From 740829733499855335a7861e3c4f1333a09db45d Mon Sep 17 00:00:00 2001 From: Carlos Scheidegger Date: Wed, 2 Oct 2024 10:16:08 -0700 Subject: [PATCH 1/3] chore - upgrade to deno 1.46.3 --- .gitignore | 4 +- configuration | 4 +- dev-docs/add-typescript-dependency.md | 2 + package/scripts/common/quarto | 4 +- package/scripts/deno_std/deno_std.ts | 181 +- package/scripts/windows/quarto.cmd | 9 +- package/src/common/compile-quarto-latexmk.ts | 2 +- package/src/common/config.ts | 2 +- package/src/common/configure.ts | 3 +- package/src/common/create-deno-config.ts | 2 +- package/src/common/dependencies/dartsass.ts | 2 +- package/src/common/dependencies/deno_dom.ts | 8 +- package/src/common/dependencies/esbuild.ts | 2 +- package/src/common/dependencies/pandoc.ts | 2 +- package/src/common/dependencies/typst.ts | 2 +- .../common/import-report/find-bad-imports.ts | 2 +- .../import-report/find-bad-types-constants.ts | 2 +- package/src/common/package-filters.ts | 2 +- package/src/common/prepare-dist.ts | 3 +- .../src/common/update-html-dependencies.ts | 3 +- package/src/common/update-pandoc.ts | 2 +- package/src/ext/installer.ts | 2 +- package/src/linux/installer.ts | 3 +- package/src/macos/installer.ts | 2 +- package/src/quarto-bld | 2 +- package/src/util/deno.ts | 1 + package/src/util/git.ts | 2 +- package/src/util/utils.ts | 2 +- package/src/windows/installer.ts | 3 +- quarto-cli.code-workspace | 2 +- src/command/capabilities/cmd.ts | 2 +- src/command/convert/cmd.ts | 2 +- src/command/convert/jupyter.ts | 2 +- .../create/artifacts/artifact-shared.ts | 2 +- src/command/create/artifacts/extension.ts | 2 +- src/command/create/cmd.ts | 2 +- src/command/create/editor.ts | 2 +- src/command/preview/cmd.ts | 4 +- src/command/preview/preview.ts | 2 +- src/command/publish/cmd.ts | 2 +- src/command/render/cleanup.ts | 2 +- src/command/render/cmd.ts | 2 +- src/command/render/defaults.ts | 6 +- src/command/render/filters.ts | 2 +- src/command/render/flags.ts | 2 +- src/command/render/freeze.ts | 8 +- src/command/render/latexmk/latex.ts | 2 +- src/command/render/latexmk/parse-error.ts | 2 +- src/command/render/latexmk/pdf.ts | 2 +- src/command/render/latexmk/quarto-latexmk.ts | 2 +- src/command/render/output-tex.ts | 2 +- src/command/render/output-typst.ts | 2 +- src/command/render/output.ts | 8 +- .../render/pandoc-dependencies-html.ts | 2 +- .../render/pandoc-dependencies-resources.ts | 2 +- src/command/render/pandoc-html.ts | 14 +- src/command/render/pandoc.ts | 6 +- src/command/render/project.ts | 6 +- src/command/render/render-shared.ts | 2 +- src/command/render/render.ts | 2 +- src/command/render/template.ts | 2 +- src/command/run/run.ts | 2 +- src/command/serve/cmd.ts | 2 +- .../use/commands/binder/binder-utils.ts | 2 +- src/command/use/commands/binder/binder.ts | 2 +- src/command/use/commands/template.ts | 2 +- src/config/metadata.ts | 2 +- src/core/appdirs.ts | 2 +- src/core/console.ts | 4 +- src/core/container.ts | 4 +- src/core/copy.ts | 11 +- src/core/cri/cri.ts | 2 +- src/core/css.ts | 2 +- src/core/dart-sass.ts | 2 +- src/core/data-url.ts | 2 +- src/core/date.ts | 4 +- src/core/deno-dom.ts | 46 +- src/core/deno/expand-glob.ts | 15 +- src/core/devconfig.ts | 2 +- src/core/download.ts | 2 +- src/core/encode-metadata.ts | 11 +- src/core/file.ts | 4 +- src/core/github.ts | 2 +- src/core/handlers/base.ts | 2 +- src/core/hash.ts | 6 +- src/core/http.ts | 4 +- src/core/image.ts | 2 +- src/core/jupyter/capabilities.ts | 2 +- src/core/jupyter/filtered-notebook-cache.ts | 14 +- src/core/jupyter/jupyter-filters.ts | 2 +- src/core/jupyter/jupyter-fixups.ts | 2 +- src/core/jupyter/jupyter-shared.ts | 4 +- src/core/jupyter/jupyter.ts | 14 +- src/core/jupyter/kernels.ts | 2 +- src/core/jupyter/venv.ts | 11 +- src/core/knitr.ts | 8 +- src/core/language.ts | 2 +- src/core/lib/external/colors.ts | 2 +- src/core/log.ts | 46 +- src/core/main.ts | 4 +- src/core/path.ts | 8 +- src/core/previewurl.ts | 2 +- src/core/process.ts | 4 +- src/core/puppeteer.ts | 2 +- src/core/quarto.ts | 6 +- src/core/resources.ts | 4 +- src/core/run/deno.ts | 2 +- src/core/sass.ts | 4 +- src/core/schema/types-from-schema.ts | 4 +- src/core/schema/utils.ts | 13 +- src/core/schema/validated-yaml.ts | 2 +- src/core/temp.ts | 2 +- src/core/text.ts | 15 +- src/core/typst.ts | 2 +- src/core/watch.ts | 11 +- src/core/windows.ts | 2 +- src/core/yaml.ts | 23 +- src/core/zip.ts | 2 +- src/deno_ral/encoding.ts | 2 +- src/deno_ral/fs.ts | 71 +- src/deno_ral/io.ts | 3 +- src/deno_ral/log.ts | 4 +- src/deno_ral/path.ts | 32 +- src/dev_import_map.json | 223 +- src/execute/julia.ts | 8 +- src/execute/jupyter/jupyter-kernel.ts | 2 +- src/execute/jupyter/jupyter.ts | 4 +- src/execute/ojs/compile.ts | 2 +- src/execute/ojs/extract-resources.ts | 11 +- src/execute/rmd.ts | 4 +- src/extension/extension-host.ts | 2 +- src/extension/extension.ts | 4 +- src/extension/install.ts | 2 +- src/extension/template.ts | 2 +- src/format/asciidoc/format-asciidoc.ts | 6 +- src/format/dashboard/format-dashboard.ts | 2 +- src/format/html/format-html-scss.ts | 2 +- src/format/html/format-html-title.ts | 2 +- src/format/ipynb/format-ipynb.ts | 2 +- src/format/jats/format-jats-postprocess.ts | 4 +- src/format/pdf/format-pdf.ts | 2 +- src/format/reveal/format-reveal-multiplex.ts | 6 +- src/format/reveal/format-reveal-plugin.ts | 10 +- src/format/reveal/format-reveal-theme.ts | 4 +- src/import_map.json | 56 +- src/preview/preview-server.ts | 4 +- src/project/project-cites.ts | 2 +- src/project/project-context.ts | 14 +- src/project/project-create.ts | 2 +- src/project/project-crossrefs.ts | 2 +- src/project/project-environment.ts | 2 +- src/project/project-gitignore.ts | 2 +- src/project/project-resources.ts | 2 +- src/project/project-scratch.ts | 2 +- src/project/project-shared.ts | 4 +- src/project/serve/serve.ts | 4 +- src/project/serve/watch.ts | 2 +- src/project/types/book/book-bibliography.ts | 4 +- src/project/types/book/book-config.ts | 2 +- src/project/types/book/book-crossrefs.ts | 2 +- src/project/types/book/book-render.ts | 4 +- .../types/manuscript/manuscript-config.ts | 4 +- .../types/manuscript/manuscript-meca.ts | 7 +- src/project/types/manuscript/manuscript.ts | 4 +- src/project/types/single-file/single-file.ts | 2 +- .../website/listing/website-listing-index.ts | 2 +- .../listing/website-listing-project.ts | 13 +- .../website/listing/website-listing-read.ts | 4 +- .../types/website/listing/website-listing.ts | 9 +- src/project/types/website/website-aliases.ts | 2 +- src/project/types/website/website-config.ts | 2 +- src/project/types/website/website-giscus.ts | 11 +- src/project/types/website/website-search.ts | 2 +- src/project/types/website/website-sitemap.ts | 2 +- src/publish/common/account.ts | 13 +- src/publish/common/bundle.ts | 10 +- src/publish/common/data.ts | 4 +- src/publish/common/publish.ts | 8 +- src/publish/config.ts | 3 +- src/publish/confluence/api/index.ts | 2 +- src/publish/gh-pages/gh-pages.ts | 4 +- src/publish/huggingface/huggingface.ts | 4 +- src/publish/posit-cloud/api/index.ts | 5 +- src/publish/posit-cloud/posit-cloud.ts | 4 +- src/publish/publish.ts | 2 +- src/publish/rsconnect/rsconnect.ts | 2 +- src/quarto-core/dotenv.ts | 5 +- src/quarto-core/inspect.ts | 2 +- src/quarto-core/profile.ts | 11 +- src/quarto-core/text-highlighting.ts | 2 +- .../notebook/notebook-contributor-html.ts | 2 +- .../notebook/notebook-contributor-ipynb.ts | 2 +- .../notebook/notebook-contributor-qmd.ts | 2 +- src/resources/deno_std/deno_std.lock | 616 +- src/resources/deno_std/import_map.json | 2 +- src/resources/deno_std/run_import_map.json | 38 +- src/resources/editor/tools/vs-code.mjs | 17 +- src/resources/editor/tools/yaml/web-worker.js | 17 +- .../yaml/yaml-intelligence-resources.json | 17 +- src/resources/scripts/check-usage.sh | 2 +- src/resources/scripts/juice.ts | 8 +- src/resources/types/schema-schema-types.ts | 2 +- src/resources/types/schema-types.ts | 2 +- src/tools/impl/tinytex-info.ts | 13 +- src/tools/impl/tinytex.ts | 4 +- src/tools/tools-console.ts | 2 +- .../optimized/js-yaml.js | 2645 +++++ src/vendor/cdn.skypack.dev/js-yaml.js | 16 + .../std@0.196.0/console/unicode_width.ts | 62 - .../deno.land/std@0.217.0/bytes/concat.ts | 29 - .../deno.land/std@0.217.0/bytes/copy.ts | 38 - .../deno.land/std@0.217.0/bytes/ends_with.ts | 25 - .../deno.land/std@0.217.0/bytes/equals.ts | 44 - .../std@0.217.0/bytes/includes_needle.ts | 27 - .../std@0.217.0/bytes/index_of_needle.ts | 49 - .../std@0.217.0/bytes/last_index_of_needle.ts | 49 - src/vendor/deno.land/std@0.217.0/bytes/mod.ts | 19 - .../deno.land/std@0.217.0/bytes/repeat.ts | 40 - .../std@0.217.0/bytes/starts_with.ts | 21 - .../std@0.217.0/collections/associate_by.ts | 41 - .../std@0.217.0/collections/associate_with.ts | 37 - .../std@0.217.0/collections/distinct_by.ts | 36 - .../collections/drop_last_while.ts | 31 - .../std@0.217.0/collections/filter_keys.ts | 42 - .../std@0.217.0/collections/filter_values.ts | 43 - .../std@0.217.0/collections/includes_value.ts | 36 - .../std@0.217.0/collections/max_by.ts | 115 - .../std@0.217.0/collections/min_by.ts | 115 - .../std@0.217.0/collections/reduce_groups.ts | 36 - .../std@0.217.0/collections/sort_by.ts | 151 - .../collections/take_last_while.ts | 29 - .../std@0.217.0/collections/take_while.ts | 33 - .../std@0.217.0/crypto/_fnv/fnv32.ts | 32 - .../std@0.217.0/crypto/_fnv/fnv64.ts | 35 - .../deno.land/std@0.217.0/crypto/_fnv/mod.ts | 24 - .../deno.land/std@0.217.0/crypto/_fnv/util.ts | 62 - .../lib/deno_std_wasm_crypto.generated.mjs | 3249 ------ .../deno.land/std@0.217.0/datetime/format.ts | 46 - .../deno.land/std@0.217.0/datetime/is_leap.ts | 65 - .../deno.land/std@0.217.0/datetime/parse.ts | 59 - .../std@0.217.0/front_matter/_formats.ts | 57 - .../front_matter/create_extractor.ts | 138 - .../deno.land/std@0.217.0/front_matter/mod.ts | 156 - .../std@0.217.0/front_matter/test.ts | 44 - .../deno.land/std@0.217.0/fs/ensure_link.ts | 46 - .../std@0.217.0/fs/ensure_symlink.ts | 81 - src/vendor/deno.land/std@0.217.0/fs/exists.ts | 203 - .../deno.land/std@0.217.0/io/buf_reader.ts | 427 - .../deno.land/std@0.217.0/io/buf_writer.ts | 226 - src/vendor/deno.land/std@0.217.0/io/buffer.ts | 250 - .../std@0.217.0/io/limited_reader.ts | 34 - .../deno.land/std@0.217.0/io/multi_reader.ts | 29 - .../deno.land/std@0.217.0/io/read_int.ts | 18 - .../deno.land/std@0.217.0/io/read_long.ts | 27 - .../deno.land/std@0.217.0/io/read_short.ts | 17 - .../std@0.217.0/io/slice_long_to_bytes.ts | 21 - .../deno.land/std@0.217.0/io/string_writer.ts | 75 - .../deno.land/std@0.217.0/io/write_all.ts | 53 - .../deno.land/std@0.217.0/json/common.ts | 30 - .../deno.land/std@0.217.0/log/base_handler.ts | 42 - .../std@0.217.0/media_types/extension.ts | 28 - .../media_types/format_media_type.ts | 70 - .../media_types/type_by_extension.ts | 26 - .../std@0.217.0/semver/_comparator_format.ts | 16 - .../semver/_comparator_intersects.ts | 54 - .../std@0.217.0/semver/_comparator_max.ts | 53 - .../std@0.217.0/semver/_comparator_min.ts | 41 - .../std@0.217.0/semver/_constants.ts | 17 - .../std@0.217.0/semver/_is_comparator.ts | 29 - .../std@0.217.0/semver/_parse_comparator.ts | 50 - .../deno.land/std@0.217.0/semver/can_parse.ts | 14 - .../std@0.217.0/semver/difference.ts | 18 - .../deno.land/std@0.217.0/semver/equals.ts | 12 - .../std@0.217.0/semver/format_range.ts | 14 - .../std@0.217.0/semver/greater_or_equal.ts | 12 - .../std@0.217.0/semver/greater_than.ts | 13 - .../deno.land/std@0.217.0/semver/gtr.ts | 17 - .../deno.land/std@0.217.0/semver/is_range.ts | 18 - .../std@0.217.0/semver/less_or_equal.ts | 12 - .../deno.land/std@0.217.0/semver/less_than.ts | 12 - .../deno.land/std@0.217.0/semver/ltr.ts | 17 - .../std@0.217.0/semver/not_equals.ts | 12 - .../std@0.217.0/semver/range_intersects.ts | 43 - .../deno.land/std@0.217.0/semver/range_max.ts | 23 - .../deno.land/std@0.217.0/semver/range_min.ts | 23 - .../std@0.217.0/semver/reverse_sort.ts | 13 - .../deno.land/std@0.217.0/semver/try_parse.ts | 19 - .../std@0.217.0/semver/try_parse_range.ts | 21 - .../deno.land/std@0.217.0/streams/buffer.ts | 178 - .../std@0.217.0/streams/byte_slice_stream.ts | 48 - .../streams/early_zip_readable_streams.ts | 45 - .../std@0.217.0/streams/iterate_reader.ts | 93 - .../streams/limited_bytes_transform_stream.ts | 42 - .../streams/limited_transform_stream.ts | 38 - .../streams/merge_readable_streams.ts | 51 - .../streams/reader_from_stream_reader.ts | 28 - .../streams/text_delimiter_stream.ts | 81 - .../std@0.217.0/streams/text_line_stream.ts | 68 - .../deno.land/std@0.217.0/streams/to_blob.ts | 20 - .../streams/writable_stream_from_writer.ts | 32 - .../streams/writer_from_stream_writer.ts | 37 - .../streams/zip_readable_streams.ts | 47 - .../deno.land/std@0.217.0/toml/parse.ts | 11 - .../deno.land/std@0.217.0/uuid/constants.ts | 47 - src/vendor/deno.land/std@0.217.0/uuid/mod.ts | 80 - src/vendor/deno.land/std@0.217.0/uuid/v3.ts | 61 - src/vendor/deno.land/std@0.217.0/uuid/v4.ts | 22 - src/vendor/deno.land/std@0.217.0/uuid/v5.ts | 60 - src/vendor/deno.land/std@0.217.0/version.ts | 8 - .../deno.land/std@0.217.0/yaml/_utils.ts | 80 - .../deno.land/std@0.217.0/yaml/parse.ts | 57 - .../std@0.217.0/yaml/schema/extended.ts | 39 - .../deno.land/std@0.217.0/yaml/schema/mod.ts | 11 - .../deno.land/std@0.217.0/yaml/stringify.ts | 22 - .../deno.land/std@0.224.0/assert/assert.ts | 20 + .../std@0.224.0/assert/assertion_error.ts | 20 + .../console => std@0.224.0/cli}/_data.json | 0 .../cli/_run_length.ts} | 4 +- .../std@0.224.0/cli/unicode_width.ts | 80 + .../std@0.224.0/console/unicode_width.ts | 48 + .../encoding/_util.ts | 0 .../encoding/ascii85.ts | 43 +- .../encoding/base32.ts | 110 +- .../encoding/base58.ts | 44 +- .../encoding/base64.ts | 52 +- .../encoding/base64url.ts | 8 +- .../encoding/hex.ts | 21 +- .../encoding/varint.ts | 163 +- .../{std@0.217.0 => std@0.224.0}/fmt/bytes.ts | 0 .../fmt/colors.ts | 2 +- .../fmt/printf.ts | 30 +- .../build/deno-wasm/deno-wasm.js | 188 - .../build/deno-wasm/deno-wasm.js | 194 + .../deno-dom-wasm-noinit.ts | 0 .../src/api.ts | 0 .../src/constructor-lock.ts | 0 .../src/deserialize.ts | 7 +- .../src/dom/document-fragment.ts | 4 + .../src/dom/document.ts | 5 +- .../src/dom/dom-parser.ts | 0 .../src/dom/element.ts | 108 +- .../src/dom/elements/html-template-element.ts | 6 +- .../src/dom/html-collection.ts | 0 .../src/dom/node-list.ts | 0 .../src/dom/node.ts | 0 .../src/dom/selectors/custom-api.ts | 0 .../src/dom/selectors/nwsapi-types.ts | 0 .../src/dom/selectors/nwsapi.js | 0 .../src/dom/selectors/selectors.ts | 0 .../src/dom/selectors/sizzle-types.ts | 0 .../src/dom/selectors/sizzle.js | 0 .../src/dom/utils-types.ts | 0 .../src/dom/utils.ts | 146 +- .../src/parser.ts | 4 +- src/vendor/import_map.json | 174 +- .../@std/archive/0.224.3}/_common.ts | 59 +- .../@std/archive/0.224.3}/tar.ts | 150 +- .../jsr.io/@std/archive/0.225.3/_common.ts | 187 + src/vendor/jsr.io/@std/archive/0.225.3/tar.ts | 485 + .../@std/assert/0.224.0}/_constants.ts | 0 .../jsr.io/@std/assert/0.224.0/assert.ts | 20 + .../assert/0.224.0}/assert_almost_equals.ts | 3 +- .../assert/0.224.0}/assert_array_includes.ts | 5 +- .../@std/assert/0.224.0}/assert_equals.ts | 8 +- .../@std/assert/0.224.0}/assert_exists.ts | 3 +- .../@std/assert/0.224.0}/assert_false.ts | 3 +- .../@std/assert/0.224.0}/assert_greater.ts | 5 +- .../0.224.0}/assert_greater_or_equal.ts | 5 +- .../assert/0.224.0}/assert_instance_of.ts | 3 +- .../@std/assert/0.224.0}/assert_is_error.ts | 5 +- .../@std/assert/0.224.0}/assert_less.ts | 5 +- .../assert/0.224.0}/assert_less_or_equal.ts | 5 +- .../@std/assert/0.224.0}/assert_match.ts | 3 +- .../@std/assert/0.224.0}/assert_not_equals.ts | 3 +- .../assert/0.224.0}/assert_not_instance_of.ts | 3 +- .../@std/assert/0.224.0}/assert_not_match.ts | 3 +- .../0.224.0}/assert_not_strict_equals.ts | 5 +- .../assert/0.224.0}/assert_object_match.ts | 3 +- .../@std/assert/0.224.0}/assert_rejects.ts | 9 +- .../assert/0.224.0}/assert_strict_equals.ts | 8 +- .../assert/0.224.0}/assert_string_includes.ts | 3 +- .../@std/assert/0.224.0}/assert_throws.ts | 11 +- .../@std/assert/0.224.0/assertion_error.ts | 20 + .../@std/assert/0.224.0}/equal.ts | 3 +- .../@std/assert/0.224.0}/fail.ts | 3 +- .../@std/assert/0.224.0}/mod.ts | 8 + .../@std/assert/0.224.0}/unimplemented.ts | 3 +- .../@std/assert/0.224.0}/unreachable.ts | 7 +- .../@std/async/0.224.2}/_util.ts | 9 + .../@std/async/0.224.2}/abortable.ts | 63 +- .../@std/async/0.224.2}/deadline.ts | 37 +- .../@std/async/0.224.2}/debounce.ts | 12 +- .../@std/async/0.224.2}/delay.ts | 20 +- .../@std/async/0.224.2}/mod.ts | 7 + .../@std/async/0.224.2}/mux_async_iterator.ts | 89 +- .../@std/async/0.224.2}/pool.ts | 12 +- .../@std/async/0.224.2}/retry.ts | 45 +- .../@std/async/0.224.2}/tee.ts | 21 +- src/vendor/jsr.io/@std/async/1.0.5/delay.ts | 72 + .../jsr.io/@std/bytes/0.224.0/concat.ts | 33 + src/vendor/jsr.io/@std/bytes/0.224.0/copy.ts | 49 + .../jsr.io/@std/bytes/0.224.0/ends_with.ts | 33 + .../jsr.io/@std/bytes/0.224.0/equals.ts | 89 + .../@std/bytes/0.224.0/includes_needle.ts | 45 + .../@std/bytes/0.224.0/index_of_needle.ts | 70 + .../bytes/0.224.0/last_index_of_needle.ts | 69 + src/vendor/jsr.io/@std/bytes/0.224.0/mod.ts | 153 + .../jsr.io/@std/bytes/0.224.0/repeat.ts | 40 + .../jsr.io/@std/bytes/0.224.0/starts_with.ts | 30 + src/vendor/jsr.io/@std/bytes/1.0.2/concat.ts | 34 + src/vendor/jsr.io/@std/bytes/1.0.2/copy.ts | 51 + .../@std/cli/0.224.7}/parse_args.ts | 90 +- .../@std/collections/0.224.2}/_utils.ts | 2 +- .../collections/0.224.2}/aggregate_groups.ts | 38 +- .../@std/collections/0.224.2/associate_by.ts | 50 + .../collections/0.224.2/associate_with.ts | 46 + .../@std/collections/0.224.2}/chunk.ts | 34 +- .../@std/collections/0.224.2/deep_merge.ts | 578 ++ .../@std/collections/0.224.2}/distinct.ts | 12 +- .../@std/collections/0.224.2/distinct_by.ts | 42 + .../collections/0.224.2/drop_last_while.ts | 36 + .../@std/collections/0.224.2}/drop_while.ts | 16 +- .../collections/0.224.2}/filter_entries.ts | 35 +- .../@std/collections/0.224.2/filter_keys.ts | 51 + .../@std/collections/0.224.2/filter_values.ts | 51 + .../@std/collections/0.224.2}/find_single.ts | 26 +- .../0.224.2}/first_not_nullish_of.ts | 18 +- .../collections/0.224.2/includes_value.ts | 45 + .../@std/collections/0.224.2}/intersect.ts | 13 +- .../jsr.io/@std/collections/0.224.2/invert.ts | 38 + .../@std/collections/0.224.2/invert_by.ts | 56 + .../collections/0.224.2}/join_to_string.ts | 64 +- .../@std/collections/0.224.2}/map_entries.ts | 29 +- .../@std/collections/0.224.2}/map_keys.ts | 21 +- .../collections/0.224.2}/map_not_nullish.ts | 23 +- .../@std/collections/0.224.2}/map_values.ts | 48 +- .../jsr.io/@std/collections/0.224.2/max_by.ts | 153 + .../@std/collections/0.224.2}/max_of.ts | 40 +- .../@std/collections/0.224.2}/max_with.ts | 20 +- .../jsr.io/@std/collections/0.224.2/min_by.ts | 151 + .../@std/collections/0.224.2}/min_of.ts | 40 +- .../@std/collections/0.224.2}/min_with.ts | 18 +- .../@std/collections/0.224.2}/mod.ts | 56 +- .../jsr.io/@std/collections/0.224.2/omit.ts | 34 + .../@std/collections/0.224.2}/partition.ts | 35 +- .../collections/0.224.2}/partition_entries.ts | 26 +- .../@std/collections/0.224.2}/permutations.ts | 22 +- .../jsr.io/@std/collections/0.224.2/pick.ts | 32 + .../@std/collections/0.224.2/reduce_groups.ts | 45 + .../collections/0.224.2}/running_reduce.ts | 15 +- .../@std/collections/0.224.2}/sample.ts | 16 +- .../collections/0.224.2}/sliding_windows.ts | 63 +- .../@std/collections/0.224.2/sort_by.ts | 209 + .../@std/collections/0.224.2}/sum_of.ts | 16 +- .../collections/0.224.2/take_last_while.ts | 37 + .../@std/collections/0.224.2/take_while.ts | 41 + .../@std/collections/0.224.2}/union.ts | 13 +- .../@std/collections/0.224.2}/unzip.ts | 21 +- .../@std/collections/0.224.2}/without_all.ts | 14 +- .../@std/collections/0.224.2}/zip.ts | 19 +- .../jsr.io/@std/collections/1.0.6/_utils.ts | 26 + .../@std/collections/1.0.6}/deep_merge.ts | 209 +- .../lib/deno_std_wasm_crypto.generated.d.mts | 78 + .../lib/deno_std_wasm_crypto.generated.mjs | 2708 +++++ .../@std/crypto/0.224.0}/_wasm/mod.ts | 26 +- .../@std/crypto/0.224.0}/crypto.ts | 184 +- .../@std/crypto/0.224.0}/mod.ts | 10 + .../@std/crypto/0.224.0}/timing_safe_equal.ts | 6 +- .../@std/crypto/0.224.0}/unstable_keystack.ts | 4 +- .../csv => jsr.io/@std/csv/0.224.3}/_io.ts | 94 +- .../@std/csv/0.224.3}/csv_parse_stream.ts | 90 +- .../@std/csv/0.224.3}/csv_stringify_stream.ts | 40 +- .../csv => jsr.io/@std/csv/0.224.3}/mod.ts | 6 +- .../csv => jsr.io/@std/csv/0.224.3}/parse.ts | 53 +- .../@std/csv/0.224.3}/stringify.ts | 67 +- .../datetime/0.224.5/_date_time_formatter.ts} | 321 +- .../@std/datetime/0.224.5}/constants.ts | 20 +- .../@std/datetime/0.224.5}/day_of_year.ts | 24 +- .../@std/datetime/0.224.5}/difference.ts | 63 +- .../jsr.io/@std/datetime/0.224.5/format.ts | 85 + .../jsr.io/@std/datetime/0.224.5/is_leap.ts | 80 + .../@std/datetime/0.224.5}/mod.ts | 13 +- .../jsr.io/@std/datetime/0.224.5/parse.ts | 52 + .../@std/datetime/0.224.5}/week_of_year.ts | 14 +- .../@std/dotenv/0.224.2}/mod.ts | 122 +- .../@std/dotenv/0.224.2}/parse.ts | 22 +- .../@std/dotenv/0.224.2}/stringify.ts | 8 +- .../encoding/0.224.3/_validate_binary_like.ts | 29 + .../jsr.io/@std/encoding/0.224.3/base64.ts | 176 + .../jsr.io/@std/encoding/0.224.3/base64url.ts | 90 + .../jsr.io/@std/encoding/0.224.3/hex.ts | 120 + .../1.0.0-rc.2/_validate_binary_like.ts | 29 + .../jsr.io/@std/encoding/1.0.0-rc.2/base64.ts | 174 + .../jsr.io/@std/encoding/1.0.0-rc.2/hex.ts | 118 + .../@std/flags/0.224.0}/mod.ts | 27 +- src/vendor/jsr.io/@std/fmt/0.224.0/colors.ts | 589 ++ src/vendor/jsr.io/@std/fmt/0.224.0/printf.ts | 939 ++ src/vendor/jsr.io/@std/fmt/0.225.6/bytes.ts | 181 + src/vendor/jsr.io/@std/fmt/0.225.6/colors.ts | 1016 ++ src/vendor/jsr.io/@std/fmt/1.0.2/colors.ts | 1002 ++ .../@std/front-matter/0.224.3/_formats.ts | 61 + .../@std/front-matter/0.224.3/_types.ts | 7 + .../front-matter/0.224.3/create_extractor.ts | 174 + .../jsr.io/@std/front-matter/0.224.3/json.ts | 35 + .../jsr.io/@std/front-matter/0.224.3/mod.ts | 130 + .../jsr.io/@std/front-matter/0.224.3/test.ts | 89 + .../jsr.io/@std/front-matter/0.224.3/toml.ts | 34 + .../jsr.io/@std/front-matter/0.224.3/yaml.ts | 34 + .../@std/fs/0.224.0}/_create_walk_entry.ts | 4 +- .../@std/fs/0.224.0}/_get_file_info_type.ts | 0 .../@std/fs/0.224.0}/_is_same_path.ts | 2 +- .../@std/fs/0.224.0}/_is_subdir.ts | 2 +- .../@std/fs/0.224.0}/_to_path_string.ts | 2 +- .../fs => jsr.io/@std/fs/0.224.0}/copy.ts | 114 +- .../@std/fs/0.224.0}/empty_dir.ts | 28 +- .../@std/fs/0.224.0}/ensure_dir.ts | 36 +- .../@std/fs/0.224.0}/ensure_file.ts | 34 +- .../jsr.io/@std/fs/0.224.0/ensure_link.ts | 50 + .../jsr.io/@std/fs/0.224.0/ensure_symlink.ts | 133 + .../fs => jsr.io/@std/fs/0.224.0}/eol.ts | 36 +- src/vendor/jsr.io/@std/fs/0.224.0/exists.ts | 285 + .../@std/fs/0.224.0}/expand_glob.ts | 103 +- .../fs => jsr.io/@std/fs/0.224.0}/mod.ts | 9 + .../fs => jsr.io/@std/fs/0.224.0}/move.ts | 53 +- .../fs => jsr.io/@std/fs/0.224.0}/walk.ts | 61 +- src/vendor/jsr.io/@std/fs/1.0.3/exists.ts | 294 + .../@std/http/0.224.5}/_negotiation/common.ts | 0 .../http/0.224.5}/_negotiation/encoding.ts | 2 +- .../http/0.224.5}/_negotiation/language.ts | 2 +- .../http/0.224.5}/_negotiation/media_type.ts | 2 +- .../@std/http/0.224.5}/cookie.ts | 85 +- src/vendor/jsr.io/@std/http/0.224.5/deno.json | 16 + .../http => jsr.io/@std/http/0.224.5}/etag.ts | 36 +- .../@std/http/0.224.5}/file_server.ts | 75 +- .../http => jsr.io/@std/http/0.224.5}/mod.ts | 6 +- .../@std/http/0.224.5}/negotiation.ts | 92 +- .../@std/http/0.224.5}/server.ts | 197 +- .../http/0.224.5}/server_sent_event_stream.ts | 6 +- .../@std/http/0.224.5}/status.ts | 113 +- .../http/0.224.5}/unstable_signed_cookie.ts | 40 +- .../@std/http/0.224.5}/user_agent.ts | 182 +- .../@std/internal/0.224.0/diff.ts} | 22 +- .../@std/internal/0.224.0/format.ts} | 2 - .../jsr.io/@std/internal/0.224.0/mod.ts | 11 + .../io => jsr.io/@std/io/0.224.8}/_common.ts | 0 .../@std/io/0.224.8}/_constants.ts | 0 .../jsr.io/@std/io/0.224.8/buf_reader.ts | 658 ++ .../jsr.io/@std/io/0.224.8/buf_writer.ts | 597 ++ src/vendor/jsr.io/@std/io/0.224.8/buffer.ts | 492 + .../io => jsr.io/@std/io/0.224.8}/copy.ts | 26 +- .../io => jsr.io/@std/io/0.224.8}/copy_n.ts | 20 +- .../@std/io/0.224.8}/iterate_reader.ts | 46 +- .../jsr.io/@std/io/0.224.8/limited_reader.ts | 111 + .../io => jsr.io/@std/io/0.224.8}/mod.ts | 7 + .../jsr.io/@std/io/0.224.8/multi_reader.ts | 81 + .../io => jsr.io/@std/io/0.224.8}/read_all.ts | 20 +- .../@std/io/0.224.8}/read_delim.ts | 26 +- src/vendor/jsr.io/@std/io/0.224.8/read_int.ts | 32 + .../@std/io/0.224.8}/read_lines.ts | 23 +- .../jsr.io/@std/io/0.224.8/read_long.ts | 43 + .../@std/io/0.224.8}/read_range.ts | 71 +- .../jsr.io/@std/io/0.224.8/read_short.ts | 31 + .../@std/io/0.224.8}/read_string_delim.ts | 22 +- .../io/0.224.8}/reader_from_stream_reader.ts | 14 +- .../@std/io/0.224.8/slice_long_to_bytes.ts | 32 + .../@std/io/0.224.8}/string_reader.ts | 30 +- .../jsr.io/@std/io/0.224.8/string_writer.ts | 122 + .../@std/io/0.224.8}/to_readable_stream.ts | 29 +- .../@std/io/0.224.8}/to_writable_stream.ts | 19 +- .../io => jsr.io/@std/io/0.224.8}/types.ts | 71 +- .../jsr.io/@std/io/0.224.8/write_all.ts | 65 + src/vendor/jsr.io/@std/json/1.0.0/types.ts | 11 + src/vendor/jsr.io/@std/jsonc/0.224.3/mod.ts | 25 + .../@std/jsonc/0.224.3}/parse.ts | 45 +- .../@std/log/0.224.7}/_config.ts | 2 +- .../@std/log/0.224.7/_file_handler_symbols.ts | 8 + .../log => jsr.io/@std/log/0.224.7}/_state.ts | 4 +- .../jsr.io/@std/log/0.224.7/base_handler.ts | 69 + .../@std/log/0.224.7}/console_handler.ts | 7 +- .../@std/log/0.224.7}/critical.ts | 3 +- .../log => jsr.io/@std/log/0.224.7}/debug.ts | 3 +- .../log => jsr.io/@std/log/0.224.7}/error.ts | 3 +- .../@std/log/0.224.7}/file_handler.ts | 84 +- .../@std/log/0.224.7}/formatters.ts | 3 +- .../@std/log/0.224.7}/get_logger.ts | 11 +- .../log => jsr.io/@std/log/0.224.7}/info.ts | 3 +- .../log => jsr.io/@std/log/0.224.7}/levels.ts | 4 +- .../log => jsr.io/@std/log/0.224.7}/logger.ts | 3 +- .../log => jsr.io/@std/log/0.224.7}/mod.ts | 25 +- .../log/0.224.7}/rotating_file_handler.ts | 43 +- .../log => jsr.io/@std/log/0.224.7}/setup.ts | 11 +- .../log => jsr.io/@std/log/0.224.7}/warn.ts | 3 +- .../@std/media-types/0.224.1}/_db.ts | 6 +- .../@std/media-types/0.224.1}/_util.ts | 8 +- .../@std/media-types/0.224.1/content_type.ts | 91 + .../@std/media-types/0.224.1/extension.ts | 30 + .../0.224.1}/extensions_by_type.ts | 18 +- .../media-types/0.224.1/format_media_type.ts | 86 + .../@std/media-types/0.224.1/get_charset.ts | 45 + .../@std/media-types/0.224.1}/mod.ts | 24 +- .../media-types/0.224.1}/parse_media_type.ts | 65 +- .../media-types/0.224.1/type_by_extension.ts | 33 + .../0.224.1}/vendor/mime-db.v1.52.0.ts | 0 .../jsr.io/@std/media-types/1.0.3/_db.ts | 48 + .../jsr.io/@std/media-types/1.0.3/_util.ts | 145 + .../@std/media-types/1.0.3}/content_type.ts | 32 +- .../media-types/1.0.3/format_media_type.ts | 86 + .../@std/media-types/1.0.3}/get_charset.ts | 26 +- .../media-types/1.0.3/parse_media_type.ts | 125 + .../media-types/1.0.3/type_by_extension.ts | 33 + .../@std/media-types/1.0.3/vendor/db.ts | 8871 +++++++++++++++++ .../@std/net/0.224.5/get_network_address.ts | 50 + .../@std/path/0.224.0/_common/assert_path.ts | 10 + .../@std/path/0.224.0/_common/basename.ts | 53 + .../@std/path/0.224.0/_common/common.ts | 26 + .../@std/path/0.224.0/_common/constants.ts | 49 + .../@std/path/0.224.0/_common/dirname.ts | 9 + .../@std/path/0.224.0/_common/format.ts | 25 + .../path/0.224.0/_common/from_file_url.ts | 10 + .../path/0.224.0/_common/glob_to_reg_exp.ts | 283 + .../@std/path/0.224.0/_common/normalize.ts | 9 + .../path/0.224.0/_common/normalize_string.ts | 74 + .../@std/path/0.224.0/_common/relative.ts | 10 + .../_common/strip_trailing_separators.ts | 25 + .../@std/path/0.224.0/_common/to_file_url.ts | 17 + .../jsr.io/@std/path/0.224.0/_interface.ts | 42 + src/vendor/jsr.io/@std/path/0.224.0/_os.ts | 31 + .../jsr.io/@std/path/0.224.0/basename.ts | 28 + src/vendor/jsr.io/@std/path/0.224.0/common.ts | 24 + .../jsr.io/@std/path/0.224.0/constants.ts | 7 + .../jsr.io/@std/path/0.224.0/dirname.ts | 14 + .../jsr.io/@std/path/0.224.0/extname.ts | 14 + src/vendor/jsr.io/@std/path/0.224.0/format.ts | 17 + .../jsr.io/@std/path/0.224.0/from_file_url.ts | 26 + .../@std/path/0.224.0/glob_to_regexp.ts | 80 + .../jsr.io/@std/path/0.224.0/is_absolute.ts | 14 + .../jsr.io/@std/path/0.224.0/is_glob.ts | 35 + src/vendor/jsr.io/@std/path/0.224.0/join.ts | 14 + .../jsr.io/@std/path/0.224.0/join_globs.ts | 19 + src/vendor/jsr.io/@std/path/0.224.0/mod.ts | 65 + .../jsr.io/@std/path/0.224.0/normalize.ts | 15 + .../@std/path/0.224.0/normalize_glob.ts | 21 + src/vendor/jsr.io/@std/path/0.224.0/parse.ts | 29 + .../jsr.io/@std/path/0.224.0/posix/_util.ts | 10 + .../@std/path/0.224.0/posix/basename.ts | 37 + .../jsr.io/@std/path/0.224.0/posix/common.ts | 24 + .../@std/path/0.224.0/posix/constants.ts | 6 + .../jsr.io/@std/path/0.224.0/posix/dirname.ts | 53 + .../jsr.io/@std/path/0.224.0/posix/extname.ts | 71 + .../jsr.io/@std/path/0.224.0/posix/format.ts | 14 + .../@std/path/0.224.0/posix/from_file_url.ts | 21 + .../@std/path/0.224.0/posix/glob_to_regexp.ts | 79 + .../@std/path/0.224.0/posix/is_absolute.ts | 14 + .../@std/path/0.224.0/posix/is_glob.ts} | 2 +- .../jsr.io/@std/path/0.224.0/posix/join.ts | 25 + .../@std/path/0.224.0/posix/join_globs.ts | 30 + .../jsr.io/@std/path/0.224.0/posix/mod.ts | 43 + .../@std/path/0.224.0/posix/normalize.ts | 30 + .../@std/path/0.224.0/posix/normalize_glob.ts | 27 + .../jsr.io/@std/path/0.224.0/posix/parse.ts | 104 + .../@std/path/0.224.0/posix/relative.ts | 91 + .../jsr.io/@std/path/0.224.0/posix/resolve.ts | 56 + .../@std/path/0.224.0/posix/to_file_url.ts | 27 + .../path/0.224.0/posix/to_namespaced_path.ts | 11 + .../jsr.io/@std/path/0.224.0/relative.ts | 21 + .../jsr.io/@std/path/0.224.0/resolve.ts | 16 + .../jsr.io/@std/path/0.224.0/to_file_url.ts | 26 + .../@std/path/0.224.0/to_namespaced_path.ts | 16 + .../jsr.io/@std/path/0.224.0/windows/_util.ts | 28 + .../@std/path/0.224.0/windows/basename.ts | 46 + .../@std/path/0.224.0/windows/common.ts | 24 + .../@std/path/0.224.0/windows/constants.ts | 6 + .../@std/path/0.224.0/windows/dirname.ts | 103 + .../@std/path/0.224.0/windows/extname.ts | 76 + .../@std/path/0.224.0/windows/format.ts | 14 + .../path/0.224.0/windows/from_file_url.ts | 30 + .../path/0.224.0/windows/glob_to_regexp.ts | 79 + .../@std/path/0.224.0/windows/is_absolute.ts | 29 + .../@std/path/0.224.0/windows/is_glob.ts | 4 + .../jsr.io/@std/path/0.224.0/windows/join.ts | 72 + .../@std/path/0.224.0/windows/join_globs.ts | 30 + .../jsr.io/@std/path/0.224.0/windows/mod.ts | 43 + .../@std/path/0.224.0/windows/normalize.ts | 127 + .../path/0.224.0/windows/normalize_glob.ts | 27 + .../jsr.io/@std/path/0.224.0/windows/parse.ts | 167 + .../@std/path/0.224.0/windows/relative.ts | 118 + .../@std/path/0.224.0/windows/resolve.ts | 161 + .../@std/path/0.224.0/windows/to_file_url.ts | 35 + .../0.224.0/windows/to_namespaced_path.ts | 49 + .../path/1.0.0-rc.2/_common/assert_path.ts | 10 + .../@std/path/1.0.0-rc.2/_common/constants.ts | 49 + .../@std/path/1.0.0-rc.2/_common/normalize.ts | 9 + .../1.0.0-rc.2/_common/normalize_string.ts | 74 + .../@std/path/1.0.0-rc.2/_common/relative.ts | 10 + src/vendor/jsr.io/@std/path/1.0.0-rc.2/_os.ts | 26 + .../jsr.io/@std/path/1.0.0-rc.2/constants.ts | 18 + .../jsr.io/@std/path/1.0.0-rc.2/extname.ts | 27 + .../jsr.io/@std/path/1.0.0-rc.2/join.ts | 28 + .../@std/path/1.0.0-rc.2/posix/_util.ts | 10 + .../@std/path/1.0.0-rc.2/posix/extname.ts | 73 + .../jsr.io/@std/path/1.0.0-rc.2/posix/join.ts | 27 + .../@std/path/1.0.0-rc.2/posix/normalize.ts | 41 + .../@std/path/1.0.0-rc.2/posix/relative.ts | 103 + .../@std/path/1.0.0-rc.2/posix/resolve.ts | 67 + .../jsr.io/@std/path/1.0.0-rc.2/relative.ts | 32 + .../jsr.io/@std/path/1.0.0-rc.2/resolve.ts | 32 + .../@std/path/1.0.0-rc.2/windows/_util.ts | 28 + .../@std/path/1.0.0-rc.2/windows/extname.ts | 86 + .../@std/path/1.0.0-rc.2/windows/join.ts | 72 + .../@std/path/1.0.0-rc.2/windows/normalize.ts | 132 + .../@std/path/1.0.0-rc.2/windows/relative.ts | 128 + .../@std/path/1.0.0-rc.2/windows/resolve.ts | 172 + .../@std/permissions/0.224.0}/mod.ts | 35 +- .../jsr.io/@std/semver/0.224.3/_constants.ts | 11 + .../@std/semver/0.224.3}/_shared.ts | 2 +- .../semver/0.224.3/_test_comparator_set.ts} | 33 +- .../jsr.io/@std/semver/0.224.3/can_parse.ts | 30 + .../@std/semver/0.224.3}/compare.ts | 18 + .../@std/semver/0.224.3}/constants.ts | 17 +- .../jsr.io/@std/semver/0.224.3/difference.ts | 40 + .../jsr.io/@std/semver/0.224.3/equals.ts | 29 + .../@std/semver/0.224.3}/format.ts | 20 +- .../@std/semver/0.224.3/format_range.ts | 28 + .../@std/semver/0.224.3/greater_or_equal.ts | 29 + .../@std/semver/0.224.3/greater_than.ts | 30 + .../@std/semver/0.224.3/greater_than_range.ts | 66 + .../@std/semver/0.224.3}/increment.ts | 21 +- .../jsr.io/@std/semver/0.224.3/is_range.ts | 45 + .../@std/semver/0.224.3}/is_semver.ts | 17 + .../@std/semver/0.224.3/less_or_equal.ts | 29 + .../jsr.io/@std/semver/0.224.3/less_than.ts | 29 + .../@std/semver/0.224.3/less_than_range.ts | 68 + .../@std/semver/0.224.3}/max_satisfying.ts | 17 +- .../@std/semver/0.224.3}/min_satisfying.ts | 17 +- .../@std/semver/0.224.3}/mod.ts | 64 +- .../jsr.io/@std/semver/0.224.3/not_equals.ts | 28 + .../@std/semver/0.224.3}/parse.ts | 19 +- .../@std/semver/0.224.3}/parse_range.ts | 231 +- .../@std/semver/0.224.3/range_intersects.ts | 101 + .../jsr.io/@std/semver/0.224.3/range_max.ts | 78 + .../jsr.io/@std/semver/0.224.3/range_min.ts | 69 + .../jsr.io/@std/semver/0.224.3/satisfies.ts | 32 + .../jsr.io/@std/semver/0.224.3/test_range.ts | 31 + .../jsr.io/@std/semver/0.224.3/try_parse.ts | 33 + .../@std/semver/0.224.3/try_parse_range.ts | 37 + .../@std/semver/0.224.3}/types.ts | 23 +- .../@std/streams/0.224.5}/_common.ts | 2 +- .../jsr.io/@std/streams/0.224.5/buffer.ts | 447 + .../@std/streams/0.224.5/byte_slice_stream.ts | 87 + .../0.224.5/concat_readable_streams.ts | 50 + .../@std/streams/0.224.5}/delimiter_stream.ts | 81 +- .../0.224.5/early_zip_readable_streams.ts | 109 + .../@std/streams/0.224.5/iterate_reader.ts | 99 + .../0.224.5/limited_bytes_transform_stream.ts | 134 + .../0.224.5/limited_transform_stream.ts | 116 + .../streams/0.224.5/merge_readable_streams.ts | 71 + .../@std/streams/0.224.5}/mod.ts | 11 + .../0.224.5}/readable_stream_from_reader.ts | 23 +- .../streams/0.224.5}/reader_from_iterable.ts | 31 +- .../0.224.5/reader_from_stream_reader.ts | 33 + .../streams/0.224.5/text_delimiter_stream.ts | 139 + .../@std/streams/0.224.5/text_line_stream.ts | 142 + .../@std/streams/0.224.5}/to_array_buffer.ts | 17 +- .../jsr.io/@std/streams/0.224.5/to_blob.ts | 28 + .../@std/streams/0.224.5}/to_json.ts | 17 +- .../@std/streams/0.224.5}/to_text.ts | 10 +- .../streams/0.224.5}/to_transform_stream.ts | 55 +- .../0.224.5/writable_stream_from_writer.ts | 47 + .../0.224.5/writer_from_stream_writer.ts | 42 + .../streams/0.224.5/zip_readable_streams.ts | 102 + .../@std/testing/0.224.0}/asserts.ts | 128 +- .../@std/toml/0.224.1}/_parser.ts | 2 +- .../toml => jsr.io/@std/toml/0.224.1}/mod.ts | 43 +- src/vendor/jsr.io/@std/toml/0.224.1/parse.ts | 26 + .../@std/toml/0.224.1}/stringify.ts | 22 +- src/vendor/jsr.io/@std/toml/1.0.1/_parser.ts | 805 ++ src/vendor/jsr.io/@std/toml/1.0.1/parse.ts | 27 + .../@std/uuid/0.224.3}/_common.ts | 0 src/vendor/jsr.io/@std/uuid/0.224.3/common.ts | 72 + .../jsr.io/@std/uuid/0.224.3/constants.ts | 56 + src/vendor/jsr.io/@std/uuid/0.224.3/mod.ts | 108 + .../uuid => jsr.io/@std/uuid/0.224.3}/v1.ts | 88 +- src/vendor/jsr.io/@std/uuid/0.224.3/v3.ts | 72 + src/vendor/jsr.io/@std/uuid/0.224.3/v4.ts | 28 + src/vendor/jsr.io/@std/uuid/0.224.3/v5.ts | 72 + .../@std/yaml/0.224.3}/_dumper/dumper.ts | 148 +- .../yaml/0.224.3}/_dumper/dumper_state.ts | 44 +- .../@std/yaml/0.224.3}/_error.ts | 2 +- .../@std/yaml/0.224.3}/_loader/loader.ts | 168 +- .../yaml/0.224.3}/_loader/loader_state.ts | 46 +- .../@std/yaml/0.224.3}/_mark.ts | 31 +- .../@std/yaml/0.224.3}/_state.ts | 5 +- .../@std/yaml/0.224.3}/_type/binary.ts | 2 +- .../@std/yaml/0.224.3}/_type/bool.ts | 0 .../@std/yaml/0.224.3}/_type/float.ts | 6 +- .../@std/yaml/0.224.3}/_type/function.ts | 0 .../@std/yaml/0.224.3}/_type/int.ts | 2 +- .../@std/yaml/0.224.3}/_type/map.ts | 0 .../@std/yaml/0.224.3}/_type/merge.ts | 0 .../@std/yaml/0.224.3}/_type/mod.ts | 0 .../@std/yaml/0.224.3}/_type/nil.ts | 0 .../@std/yaml/0.224.3}/_type/omap.ts | 5 - .../@std/yaml/0.224.3}/_type/pairs.ts | 6 +- .../@std/yaml/0.224.3}/_type/regexp.ts | 0 .../@std/yaml/0.224.3}/_type/seq.ts | 0 .../@std/yaml/0.224.3}/_type/set.ts | 0 .../@std/yaml/0.224.3}/_type/str.ts | 0 .../@std/yaml/0.224.3}/_type/timestamp.ts | 12 +- .../@std/yaml/0.224.3}/_type/undefined.ts | 0 src/vendor/jsr.io/@std/yaml/0.224.3/_utils.ts | 37 + .../yaml => jsr.io/@std/yaml/0.224.3}/mod.ts | 2 +- src/vendor/jsr.io/@std/yaml/0.224.3/parse.ts | 137 + .../@std/yaml/0.224.3}/schema.ts | 25 +- .../jsr.io/@std/yaml/0.224.3/schema/core.ts | 26 + .../@std/yaml/0.224.3}/schema/default.ts | 18 +- .../@std/yaml/0.224.3/schema/extended.ts | 71 + .../@std/yaml/0.224.3}/schema/failsafe.ts | 18 +- .../@std/yaml/0.224.3}/schema/json.ts | 15 +- .../jsr.io/@std/yaml/0.224.3/schema/mod.ts | 42 + .../jsr.io/@std/yaml/0.224.3/stringify.ts | 93 + .../yaml => jsr.io/@std/yaml/0.224.3}/type.ts | 20 +- src/vendor/jsr.io/@std/yaml/1.0.5/_chars.ts | 55 + .../jsr.io/@std/yaml/1.0.5/_loader_state.ts | 1725 ++++ src/vendor/jsr.io/@std/yaml/1.0.5/_schema.ts | 168 + src/vendor/jsr.io/@std/yaml/1.0.5/_type.ts | 33 + .../jsr.io/@std/yaml/1.0.5/_type/binary.ts | 127 + .../jsr.io/@std/yaml/1.0.5/_type/bool.ts | 37 + .../jsr.io/@std/yaml/1.0.5/_type/float.ts | 112 + .../jsr.io/@std/yaml/1.0.5/_type/int.ts | 174 + .../@std/yaml/1.0.5/_type/map.ts} | 19 +- .../jsr.io/@std/yaml/1.0.5/_type/merge.ts | 13 + .../jsr.io/@std/yaml/1.0.5/_type/nil.ts | 27 + .../jsr.io/@std/yaml/1.0.5/_type/omap.ts | 30 + .../jsr.io/@std/yaml/1.0.5/_type/pairs.ts | 22 + .../jsr.io/@std/yaml/1.0.5/_type/regexp.ts | 33 + .../jsr.io/@std/yaml/1.0.5/_type/seq.ts | 13 + .../jsr.io/@std/yaml/1.0.5/_type/set.ts | 17 + .../jsr.io/@std/yaml/1.0.5/_type/str.ts | 12 + .../jsr.io/@std/yaml/1.0.5/_type/timestamp.ts | 101 + .../jsr.io/@std/yaml/1.0.5/_type/undefined.ts | 23 + src/vendor/jsr.io/@std/yaml/1.0.5/_utils.ts | 16 + src/vendor/jsr.io/@std/yaml/1.0.5/parse.ts | 128 + .../author/prerender/post-render.ts | 2 +- .../author/prerender/pre-render.ts | 2 +- .../project/prepost/invalid-mutate/pre.ts | 2 +- .../project/prepost/mutate-render-list/pre.ts | 4 +- tests/docs/run/test-stdlib.ts | 2 +- .../drafts-preprocessor/clean-drafts.ts | 2 +- .../drafts/drafts-preprocessor/make-drafts.ts | 2 +- tests/integration/playwright-tests.test.ts | 2 +- tests/run-parallel-tests.ts | 21 +- tests/run-tests.ps1 | 2 +- tests/run-tests.sh | 2 +- tests/smoke/book/render-book.test.ts | 2 +- tests/smoke/convert/convert-backticks.test.ts | 2 +- tests/smoke/convert/convert.ts | 4 +- tests/smoke/create/create.test.ts | 2 +- tests/smoke/crossref/syntax.test.ts | 2 +- tests/smoke/embed/render-embed.test.ts | 1 - .../extension-render-journals.test.ts | 2 +- .../extension-render-project.test.ts | 2 +- tests/smoke/extensions/install.test.ts | 4 +- tests/smoke/filters/editor-support.test.ts | 2 +- .../smoke/inspect/inspect-code-cells.test.ts | 2 +- tests/smoke/inspect/inspect-include.test.ts | 2 +- .../inspect/inspect-recursive-include.test.ts | 2 +- tests/smoke/jupyter/cache.test.ts | 2 +- tests/smoke/manuscript/manuscript.ts | 2 +- tests/smoke/project/common.ts | 2 +- tests/smoke/project/project-book.test.ts | 3 +- tests/smoke/project/project-simple.test.ts | 2 +- tests/smoke/project/project-stdout.test.ts | 2 +- tests/smoke/project/project-website.test.ts | 2 +- tests/smoke/render/render-email.test.ts | 2 +- tests/smoke/render/render-freeze.test.ts | 4 +- tests/smoke/render/render-pdf.test.ts | 2 +- tests/smoke/render/render.ts | 1 - tests/smoke/run/run-script.test.ts | 4 +- tests/smoke/run/stdlib-run-version.test.ts | 5 +- tests/smoke/site/render-site-themes.test.ts | 2 +- tests/smoke/site/site.ts | 2 +- tests/smoke/smoke-all.test.ts | 4 +- tests/smoke/use/template.test.ts | 2 +- tests/smoke/website/drafts-env.test.ts | 2 +- tests/smoke/website/drafts.test.ts | 2 +- ...-intelligence-folded-block-strings.test.ts | 2 +- .../yaml-intelligence.test.ts | 2 +- tests/test-deps.ts | 2 +- tests/test.ts | 12 +- tests/unit/binary-search.test.ts | 2 +- .../break-quarto-md/break-quarto-md.test.ts | 2 +- .../case-conversion/case-conversion.test.ts | 3 +- tests/unit/confluence/confluence.test.ts | 2 +- tests/unit/dotenv-config.test.ts | 2 +- tests/unit/environment.test.ts | 2 +- tests/unit/filter-paths.test.ts | 2 +- tests/unit/giscus.test.ts | 2 +- tests/unit/guess-chunk-options-format.test.ts | 2 +- tests/unit/latexmk/parse-error.test.ts | 2 +- tests/unit/mapped-strings/mapped-text.test.ts | 2 +- .../mapped-strings/multiple-source.test.ts | 2 +- .../unit/pandoc-codegen/native-string.test.ts | 2 +- tests/unit/pandoc-formats.test.ts | 2 +- tests/unit/pandoc-partition.test.ts | 2 +- tests/unit/pandoc.test.ts | 2 +- tests/unit/partition-cell-options.test.ts | 2 +- tests/unit/path.test.ts | 4 +- tests/unit/paths/qualified-path.test.ts | 2 +- .../schema-validation/format-aliases.test.ts | 2 +- .../schema-validation/format-execute.test.ts | 2 +- .../schema-validation/object-super.test.ts | 2 +- .../schema-completions.test.ts | 2 +- .../schema-validation/schema-schema.test.ts | 2 +- tests/unit/schema-validation/utils.ts | 2 +- tests/unit/text.test.ts | 2 +- .../yaml-intelligence/annotated-yaml.test.ts | 2 +- .../unit/yaml-intelligence/hover-info.test.ts | 2 +- tests/unit/yaml.test.ts | 2 +- tests/verify.ts | 4 +- tools/render-all-formats.ts | 6 +- 920 files changed, 45384 insertions(+), 12181 deletions(-) create mode 100644 src/vendor/cdn.skypack.dev/-/js-yaml@v4.1.0-dDv6O5b7vFYj0Ro3QdID/dist=es2019,mode=imports/optimized/js-yaml.js create mode 100644 src/vendor/cdn.skypack.dev/js-yaml.js delete mode 100644 src/vendor/deno.land/std@0.196.0/console/unicode_width.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/bytes/concat.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/bytes/copy.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/bytes/ends_with.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/bytes/equals.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/bytes/includes_needle.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/bytes/index_of_needle.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/bytes/last_index_of_needle.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/bytes/mod.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/bytes/repeat.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/bytes/starts_with.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/collections/associate_by.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/collections/associate_with.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/collections/distinct_by.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/collections/drop_last_while.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/collections/filter_keys.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/collections/filter_values.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/collections/includes_value.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/collections/max_by.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/collections/min_by.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/collections/reduce_groups.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/collections/sort_by.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/collections/take_last_while.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/collections/take_while.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/crypto/_fnv/fnv32.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/crypto/_fnv/fnv64.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/crypto/_fnv/mod.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/crypto/_fnv/util.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/crypto/_wasm/lib/deno_std_wasm_crypto.generated.mjs delete mode 100644 src/vendor/deno.land/std@0.217.0/datetime/format.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/datetime/is_leap.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/datetime/parse.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/front_matter/_formats.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/front_matter/create_extractor.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/front_matter/mod.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/front_matter/test.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/fs/ensure_link.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/fs/ensure_symlink.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/fs/exists.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/io/buf_reader.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/io/buf_writer.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/io/buffer.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/io/limited_reader.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/io/multi_reader.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/io/read_int.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/io/read_long.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/io/read_short.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/io/slice_long_to_bytes.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/io/string_writer.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/io/write_all.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/json/common.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/log/base_handler.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/media_types/extension.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/media_types/format_media_type.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/media_types/type_by_extension.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/_comparator_format.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/_comparator_intersects.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/_comparator_max.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/_comparator_min.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/_constants.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/_is_comparator.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/_parse_comparator.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/can_parse.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/difference.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/equals.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/format_range.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/greater_or_equal.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/greater_than.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/gtr.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/is_range.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/less_or_equal.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/less_than.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/ltr.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/not_equals.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/range_intersects.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/range_max.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/range_min.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/reverse_sort.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/try_parse.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/semver/try_parse_range.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/streams/buffer.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/streams/byte_slice_stream.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/streams/early_zip_readable_streams.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/streams/iterate_reader.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/streams/limited_bytes_transform_stream.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/streams/limited_transform_stream.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/streams/merge_readable_streams.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/streams/reader_from_stream_reader.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/streams/text_delimiter_stream.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/streams/text_line_stream.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/streams/to_blob.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/streams/writable_stream_from_writer.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/streams/writer_from_stream_writer.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/streams/zip_readable_streams.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/toml/parse.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/uuid/constants.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/uuid/mod.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/uuid/v3.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/uuid/v4.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/uuid/v5.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/version.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/yaml/_utils.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/yaml/parse.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/yaml/schema/extended.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/yaml/schema/mod.ts delete mode 100644 src/vendor/deno.land/std@0.217.0/yaml/stringify.ts create mode 100644 src/vendor/deno.land/std@0.224.0/assert/assert.ts create mode 100644 src/vendor/deno.land/std@0.224.0/assert/assertion_error.ts rename src/vendor/deno.land/{std@0.196.0/console => std@0.224.0/cli}/_data.json (100%) rename src/vendor/deno.land/{std@0.196.0/console/_rle.ts => std@0.224.0/cli/_run_length.ts} (87%) create mode 100644 src/vendor/deno.land/std@0.224.0/cli/unicode_width.ts create mode 100644 src/vendor/deno.land/std@0.224.0/console/unicode_width.ts rename src/vendor/deno.land/{std@0.217.0 => std@0.224.0}/encoding/_util.ts (100%) rename src/vendor/deno.land/{std@0.217.0 => std@0.224.0}/encoding/ascii85.ts (85%) rename src/vendor/deno.land/{std@0.217.0 => std@0.224.0}/encoding/base32.ts (67%) rename src/vendor/deno.land/{std@0.217.0 => std@0.224.0}/encoding/base58.ts (72%) rename src/vendor/deno.land/{std@0.217.0 => std@0.224.0}/encoding/base64.ts (62%) rename src/vendor/deno.land/{std@0.217.0 => std@0.224.0}/encoding/base64url.ts (91%) rename src/vendor/deno.land/{std@0.217.0 => std@0.224.0}/encoding/hex.ts (84%) rename src/vendor/deno.land/{std@0.217.0 => std@0.224.0}/encoding/varint.ts (51%) rename src/vendor/deno.land/{std@0.217.0 => std@0.224.0}/fmt/bytes.ts (100%) rename src/vendor/deno.land/{std@0.217.0 => std@0.224.0}/fmt/colors.ts (99%) rename src/vendor/deno.land/{std@0.217.0 => std@0.224.0}/fmt/printf.ts (97%) delete mode 100644 src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/build/deno-wasm/deno-wasm.js create mode 100644 src/vendor/deno.land/x/deno_dom@v0.1.41/build/deno-wasm/deno-wasm.js rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/deno-dom-wasm-noinit.ts (100%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/api.ts (100%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/constructor-lock.ts (100%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/deserialize.ts (93%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/dom/document-fragment.ts (97%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/dom/document.ts (98%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/dom/dom-parser.ts (100%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/dom/element.ts (89%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/dom/elements/html-template-element.ts (93%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/dom/html-collection.ts (100%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/dom/node-list.ts (100%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/dom/node.ts (100%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/dom/selectors/custom-api.ts (100%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/dom/selectors/nwsapi-types.ts (100%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/dom/selectors/nwsapi.js (100%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/dom/selectors/selectors.ts (100%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/dom/selectors/sizzle-types.ts (100%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/dom/selectors/sizzle.js (100%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/dom/utils-types.ts (100%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/dom/utils.ts (53%) rename src/vendor/deno.land/x/{deno_dom@v0.1.35-alpha => deno_dom@v0.1.41}/src/parser.ts (74%) rename src/vendor/{deno.land/std@0.217.0/archive => jsr.io/@std/archive/0.224.3}/_common.ts (64%) rename src/vendor/{deno.land/std@0.217.0/archive => jsr.io/@std/archive/0.224.3}/tar.ts (68%) create mode 100644 src/vendor/jsr.io/@std/archive/0.225.3/_common.ts create mode 100644 src/vendor/jsr.io/@std/archive/0.225.3/tar.ts rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/_constants.ts (100%) create mode 100644 src/vendor/jsr.io/@std/assert/0.224.0/assert.ts rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_almost_equals.ts (92%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_array_includes.ts (88%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_equals.ts (86%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_exists.ts (87%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_false.ts (85%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_greater.ts (79%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_greater_or_equal.ts (79%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_instance_of.ts (94%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_is_error.ts (92%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_less.ts (79%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_less_or_equal.ts (80%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_match.ts (87%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_not_equals.ts (90%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_not_instance_of.ts (86%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_not_match.ts (86%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_not_strict_equals.ts (79%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_object_match.ts (97%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_rejects.ts (90%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_strict_equals.ts (86%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_string_includes.ts (85%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/assert_throws.ts (88%) create mode 100644 src/vendor/jsr.io/@std/assert/0.224.0/assertion_error.ts rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/equal.ts (97%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/fail.ts (82%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/mod.ts (87%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/unimplemented.ts (80%) rename src/vendor/{deno.land/std@0.217.0/assert => jsr.io/@std/assert/0.224.0}/unreachable.ts (54%) rename src/vendor/{deno.land/std@0.217.0/async => jsr.io/@std/async/0.224.2}/_util.ts (57%) rename src/vendor/{deno.land/std@0.217.0/async => jsr.io/@std/async/0.224.2}/abortable.ts (68%) rename src/vendor/{deno.land/std@0.217.0/async => jsr.io/@std/async/0.224.2}/deadline.ts (65%) rename src/vendor/{deno.land/std@0.217.0/async => jsr.io/@std/async/0.224.2}/debounce.ts (87%) rename src/vendor/{deno.land/std@0.217.0/async => jsr.io/@std/async/0.224.2}/delay.ts (75%) rename src/vendor/{deno.land/std@0.217.0/async => jsr.io/@std/async/0.224.2}/mod.ts (72%) rename src/vendor/{deno.land/std@0.217.0/async => jsr.io/@std/async/0.224.2}/mux_async_iterator.ts (50%) rename src/vendor/{deno.land/std@0.217.0/async => jsr.io/@std/async/0.224.2}/pool.ts (92%) rename src/vendor/{deno.land/std@0.217.0/async => jsr.io/@std/async/0.224.2}/retry.ts (77%) rename src/vendor/{deno.land/std@0.217.0/async => jsr.io/@std/async/0.224.2}/tee.ts (77%) create mode 100644 src/vendor/jsr.io/@std/async/1.0.5/delay.ts create mode 100644 src/vendor/jsr.io/@std/bytes/0.224.0/concat.ts create mode 100644 src/vendor/jsr.io/@std/bytes/0.224.0/copy.ts create mode 100644 src/vendor/jsr.io/@std/bytes/0.224.0/ends_with.ts create mode 100644 src/vendor/jsr.io/@std/bytes/0.224.0/equals.ts create mode 100644 src/vendor/jsr.io/@std/bytes/0.224.0/includes_needle.ts create mode 100644 src/vendor/jsr.io/@std/bytes/0.224.0/index_of_needle.ts create mode 100644 src/vendor/jsr.io/@std/bytes/0.224.0/last_index_of_needle.ts create mode 100644 src/vendor/jsr.io/@std/bytes/0.224.0/mod.ts create mode 100644 src/vendor/jsr.io/@std/bytes/0.224.0/repeat.ts create mode 100644 src/vendor/jsr.io/@std/bytes/0.224.0/starts_with.ts create mode 100644 src/vendor/jsr.io/@std/bytes/1.0.2/concat.ts create mode 100644 src/vendor/jsr.io/@std/bytes/1.0.2/copy.ts rename src/vendor/{deno.land/std@0.217.0/cli => jsr.io/@std/cli/0.224.7}/parse_args.ts (91%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/_utils.ts (91%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/aggregate_groups.ts (54%) create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/associate_by.ts create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/associate_with.ts rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/chunk.ts (56%) create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/deep_merge.ts rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/distinct.ts (59%) create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/distinct_by.ts create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/drop_last_while.ts rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/drop_while.ts (54%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/filter_entries.ts (52%) create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/filter_keys.ts create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/filter_values.ts rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/find_single.ts (50%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/first_not_nullish_of.ts (57%) create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/includes_value.ts rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/intersect.ts (70%) create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/invert.ts create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/invert_by.ts rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/join_to_string.ts (52%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/map_entries.ts (57%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/map_keys.ts (59%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/map_not_nullish.ts (52%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/map_values.ts (51%) create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/max_by.ts rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/max_of.ts (55%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/max_with.ts (62%) create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/min_by.ts rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/min_of.ts (55%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/min_with.ts (56%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/mod.ts (72%) create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/omit.ts rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/partition.ts (53%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/partition_entries.ts (62%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/permutations.ts (68%) create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/pick.ts create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/reduce_groups.ts rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/running_reduce.ts (63%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/sample.ts (52%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/sliding_windows.ts (52%) create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/sort_by.ts rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/sum_of.ts (58%) create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/take_last_while.ts create mode 100644 src/vendor/jsr.io/@std/collections/0.224.2/take_while.ts rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/union.ts (68%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/unzip.ts (59%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/without_all.ts (51%) rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/0.224.2}/zip.ts (66%) create mode 100644 src/vendor/jsr.io/@std/collections/1.0.6/_utils.ts rename src/vendor/{deno.land/std@0.217.0/collections => jsr.io/@std/collections/1.0.6}/deep_merge.ts (69%) create mode 100644 src/vendor/jsr.io/@std/crypto/0.224.0/_wasm/lib/deno_std_wasm_crypto.generated.d.mts create mode 100644 src/vendor/jsr.io/@std/crypto/0.224.0/_wasm/lib/deno_std_wasm_crypto.generated.mjs rename src/vendor/{deno.land/std@0.217.0/crypto => jsr.io/@std/crypto/0.224.0}/_wasm/mod.ts (58%) rename src/vendor/{deno.land/std@0.217.0/crypto => jsr.io/@std/crypto/0.224.0}/crypto.ts (70%) rename src/vendor/{deno.land/std@0.217.0/crypto => jsr.io/@std/crypto/0.224.0}/mod.ts (66%) rename src/vendor/{deno.land/std@0.217.0/crypto => jsr.io/@std/crypto/0.224.0}/timing_safe_equal.ts (87%) rename src/vendor/{deno.land/std@0.217.0/crypto => jsr.io/@std/crypto/0.224.0}/unstable_keystack.ts (97%) rename src/vendor/{deno.land/std@0.217.0/csv => jsr.io/@std/csv/0.224.3}/_io.ts (80%) rename src/vendor/{deno.land/std@0.217.0/csv => jsr.io/@std/csv/0.224.3}/csv_parse_stream.ts (67%) rename src/vendor/{deno.land/std@0.217.0/csv => jsr.io/@std/csv/0.224.3}/csv_stringify_stream.ts (64%) rename src/vendor/{deno.land/std@0.217.0/csv => jsr.io/@std/csv/0.224.3}/mod.ts (93%) rename src/vendor/{deno.land/std@0.217.0/csv => jsr.io/@std/csv/0.224.3}/parse.ts (90%) rename src/vendor/{deno.land/std@0.217.0/csv => jsr.io/@std/csv/0.224.3}/stringify.ts (88%) rename src/vendor/{deno.land/std@0.217.0/datetime/_common.ts => jsr.io/@std/datetime/0.224.5/_date_time_formatter.ts} (70%) rename src/vendor/{deno.land/std@0.217.0/datetime => jsr.io/@std/datetime/0.224.5}/constants.ts (51%) rename src/vendor/{deno.land/std@0.217.0/datetime => jsr.io/@std/datetime/0.224.5}/day_of_year.ts (68%) rename src/vendor/{deno.land/std@0.217.0/datetime => jsr.io/@std/datetime/0.224.5}/difference.ts (68%) create mode 100644 src/vendor/jsr.io/@std/datetime/0.224.5/format.ts create mode 100644 src/vendor/jsr.io/@std/datetime/0.224.5/is_leap.ts rename src/vendor/{deno.land/std@0.217.0/datetime => jsr.io/@std/datetime/0.224.5}/mod.ts (52%) create mode 100644 src/vendor/jsr.io/@std/datetime/0.224.5/parse.ts rename src/vendor/{deno.land/std@0.217.0/datetime => jsr.io/@std/datetime/0.224.5}/week_of_year.ts (72%) rename src/vendor/{deno.land/std@0.217.0/dotenv => jsr.io/@std/dotenv/0.224.2}/mod.ts (82%) rename src/vendor/{deno.land/std@0.217.0/dotenv => jsr.io/@std/dotenv/0.224.2}/parse.ts (82%) rename src/vendor/{deno.land/std@0.217.0/dotenv => jsr.io/@std/dotenv/0.224.2}/stringify.ts (83%) create mode 100644 src/vendor/jsr.io/@std/encoding/0.224.3/_validate_binary_like.ts create mode 100644 src/vendor/jsr.io/@std/encoding/0.224.3/base64.ts create mode 100644 src/vendor/jsr.io/@std/encoding/0.224.3/base64url.ts create mode 100644 src/vendor/jsr.io/@std/encoding/0.224.3/hex.ts create mode 100644 src/vendor/jsr.io/@std/encoding/1.0.0-rc.2/_validate_binary_like.ts create mode 100644 src/vendor/jsr.io/@std/encoding/1.0.0-rc.2/base64.ts create mode 100644 src/vendor/jsr.io/@std/encoding/1.0.0-rc.2/hex.ts rename src/vendor/{deno.land/std@0.217.0/flags => jsr.io/@std/flags/0.224.0}/mod.ts (96%) create mode 100644 src/vendor/jsr.io/@std/fmt/0.224.0/colors.ts create mode 100644 src/vendor/jsr.io/@std/fmt/0.224.0/printf.ts create mode 100644 src/vendor/jsr.io/@std/fmt/0.225.6/bytes.ts create mode 100644 src/vendor/jsr.io/@std/fmt/0.225.6/colors.ts create mode 100644 src/vendor/jsr.io/@std/fmt/1.0.2/colors.ts create mode 100644 src/vendor/jsr.io/@std/front-matter/0.224.3/_formats.ts create mode 100644 src/vendor/jsr.io/@std/front-matter/0.224.3/_types.ts create mode 100644 src/vendor/jsr.io/@std/front-matter/0.224.3/create_extractor.ts create mode 100644 src/vendor/jsr.io/@std/front-matter/0.224.3/json.ts create mode 100644 src/vendor/jsr.io/@std/front-matter/0.224.3/mod.ts create mode 100644 src/vendor/jsr.io/@std/front-matter/0.224.3/test.ts create mode 100644 src/vendor/jsr.io/@std/front-matter/0.224.3/toml.ts create mode 100644 src/vendor/jsr.io/@std/front-matter/0.224.3/yaml.ts rename src/vendor/{deno.land/std@0.217.0/fs => jsr.io/@std/fs/0.224.0}/_create_walk_entry.ts (90%) rename src/vendor/{deno.land/std@0.217.0/fs => jsr.io/@std/fs/0.224.0}/_get_file_info_type.ts (100%) rename src/vendor/{deno.land/std@0.217.0/fs => jsr.io/@std/fs/0.224.0}/_is_same_path.ts (89%) rename src/vendor/{deno.land/std@0.217.0/fs => jsr.io/@std/fs/0.224.0}/_is_subdir.ts (91%) rename src/vendor/{deno.land/std@0.217.0/fs => jsr.io/@std/fs/0.224.0}/_to_path_string.ts (83%) rename src/vendor/{deno.land/std@0.217.0/fs => jsr.io/@std/fs/0.224.0}/copy.ts (73%) rename src/vendor/{deno.land/std@0.217.0/fs => jsr.io/@std/fs/0.224.0}/empty_dir.ts (65%) rename src/vendor/{deno.land/std@0.217.0/fs => jsr.io/@std/fs/0.224.0}/ensure_dir.ts (63%) rename src/vendor/{deno.land/std@0.217.0/fs => jsr.io/@std/fs/0.224.0}/ensure_file.ts (62%) create mode 100644 src/vendor/jsr.io/@std/fs/0.224.0/ensure_link.ts create mode 100644 src/vendor/jsr.io/@std/fs/0.224.0/ensure_symlink.ts rename src/vendor/{deno.land/std@0.217.0/fs => jsr.io/@std/fs/0.224.0}/eol.ts (51%) create mode 100644 src/vendor/jsr.io/@std/fs/0.224.0/exists.ts rename src/vendor/{deno.land/std@0.217.0/fs => jsr.io/@std/fs/0.224.0}/expand_glob.ts (74%) rename src/vendor/{deno.land/std@0.217.0/fs => jsr.io/@std/fs/0.224.0}/mod.ts (64%) rename src/vendor/{deno.land/std@0.217.0/fs => jsr.io/@std/fs/0.224.0}/move.ts (60%) rename src/vendor/{deno.land/std@0.217.0/fs => jsr.io/@std/fs/0.224.0}/walk.ts (85%) create mode 100644 src/vendor/jsr.io/@std/fs/1.0.3/exists.ts rename src/vendor/{deno.land/std@0.217.0/http => jsr.io/@std/http/0.224.5}/_negotiation/common.ts (100%) rename src/vendor/{deno.land/std@0.217.0/http => jsr.io/@std/http/0.224.5}/_negotiation/encoding.ts (98%) rename src/vendor/{deno.land/std@0.217.0/http => jsr.io/@std/http/0.224.5}/_negotiation/language.ts (98%) rename src/vendor/{deno.land/std@0.217.0/http => jsr.io/@std/http/0.224.5}/_negotiation/media_type.ts (98%) rename src/vendor/{deno.land/std@0.217.0/http => jsr.io/@std/http/0.224.5}/cookie.ts (81%) create mode 100644 src/vendor/jsr.io/@std/http/0.224.5/deno.json rename src/vendor/{deno.land/std@0.217.0/http => jsr.io/@std/http/0.224.5}/etag.ts (86%) rename src/vendor/{deno.land/std@0.217.0/http => jsr.io/@std/http/0.224.5}/file_server.ts (90%) rename src/vendor/{deno.land/std@0.217.0/http => jsr.io/@std/http/0.224.5}/mod.ts (92%) rename src/vendor/{deno.land/std@0.217.0/http => jsr.io/@std/http/0.224.5}/negotiation.ts (60%) rename src/vendor/{deno.land/std@0.217.0/http => jsr.io/@std/http/0.224.5}/server.ts (80%) rename src/vendor/{deno.land/std@0.217.0/http => jsr.io/@std/http/0.224.5}/server_sent_event_stream.ts (96%) rename src/vendor/{deno.land/std@0.217.0/http => jsr.io/@std/http/0.224.5}/status.ts (79%) rename src/vendor/{deno.land/std@0.217.0/http => jsr.io/@std/http/0.224.5}/unstable_signed_cookie.ts (68%) rename src/vendor/{deno.land/std@0.217.0/http => jsr.io/@std/http/0.224.5}/user_agent.ts (86%) rename src/vendor/{deno.land/std@0.217.0/assert/_diff.ts => jsr.io/@std/internal/0.224.0/diff.ts} (97%) rename src/vendor/{deno.land/std@0.217.0/assert/_format.ts => jsr.io/@std/internal/0.224.0/format.ts} (94%) create mode 100644 src/vendor/jsr.io/@std/internal/0.224.0/mod.ts rename src/vendor/{deno.land/std@0.217.0/io => jsr.io/@std/io/0.224.8}/_common.ts (100%) rename src/vendor/{deno.land/std@0.217.0/io => jsr.io/@std/io/0.224.8}/_constants.ts (100%) create mode 100644 src/vendor/jsr.io/@std/io/0.224.8/buf_reader.ts create mode 100644 src/vendor/jsr.io/@std/io/0.224.8/buf_writer.ts create mode 100644 src/vendor/jsr.io/@std/io/0.224.8/buffer.ts rename src/vendor/{deno.land/std@0.217.0/io => jsr.io/@std/io/0.224.8}/copy.ts (68%) rename src/vendor/{deno.land/std@0.217.0/io => jsr.io/@std/io/0.224.8}/copy_n.ts (64%) rename src/vendor/{deno.land/std@0.217.0/io => jsr.io/@std/io/0.224.8}/iterate_reader.ts (65%) create mode 100644 src/vendor/jsr.io/@std/io/0.224.8/limited_reader.ts rename src/vendor/{deno.land/std@0.217.0/io => jsr.io/@std/io/0.224.8}/mod.ts (86%) create mode 100644 src/vendor/jsr.io/@std/io/0.224.8/multi_reader.ts rename src/vendor/{deno.land/std@0.217.0/io => jsr.io/@std/io/0.224.8}/read_all.ts (81%) rename src/vendor/{deno.land/std@0.217.0/io => jsr.io/@std/io/0.224.8}/read_delim.ts (68%) create mode 100644 src/vendor/jsr.io/@std/io/0.224.8/read_int.ts rename src/vendor/{deno.land/std@0.217.0/io => jsr.io/@std/io/0.224.8}/read_lines.ts (58%) create mode 100644 src/vendor/jsr.io/@std/io/0.224.8/read_long.ts rename src/vendor/{deno.land/std@0.217.0/io => jsr.io/@std/io/0.224.8}/read_range.ts (51%) create mode 100644 src/vendor/jsr.io/@std/io/0.224.8/read_short.ts rename src/vendor/{deno.land/std@0.217.0/io => jsr.io/@std/io/0.224.8}/read_string_delim.ts (51%) rename src/vendor/{deno.land/std@0.217.0/io => jsr.io/@std/io/0.224.8}/reader_from_stream_reader.ts (73%) create mode 100644 src/vendor/jsr.io/@std/io/0.224.8/slice_long_to_bytes.ts rename src/vendor/{deno.land/std@0.217.0/io => jsr.io/@std/io/0.224.8}/string_reader.ts (50%) create mode 100644 src/vendor/jsr.io/@std/io/0.224.8/string_writer.ts rename src/vendor/{deno.land/std@0.217.0/io => jsr.io/@std/io/0.224.8}/to_readable_stream.ts (78%) rename src/vendor/{deno.land/std@0.217.0/io => jsr.io/@std/io/0.224.8}/to_writable_stream.ts (76%) rename src/vendor/{deno.land/std@0.217.0/io => jsr.io/@std/io/0.224.8}/types.ts (61%) create mode 100644 src/vendor/jsr.io/@std/io/0.224.8/write_all.ts create mode 100644 src/vendor/jsr.io/@std/json/1.0.0/types.ts create mode 100644 src/vendor/jsr.io/@std/jsonc/0.224.3/mod.ts rename src/vendor/{deno.land/std@0.217.0/jsonc => jsr.io/@std/jsonc/0.224.3}/parse.ts (92%) rename src/vendor/{deno.land/std@0.217.0/log => jsr.io/@std/log/0.224.7}/_config.ts (89%) create mode 100644 src/vendor/jsr.io/@std/log/0.224.7/_file_handler_symbols.ts rename src/vendor/{deno.land/std@0.217.0/log => jsr.io/@std/log/0.224.7}/_state.ts (72%) create mode 100644 src/vendor/jsr.io/@std/log/0.224.7/base_handler.ts rename src/vendor/{deno.land/std@0.217.0/log => jsr.io/@std/log/0.224.7}/console_handler.ts (87%) rename src/vendor/{deno.land/std@0.217.0/log => jsr.io/@std/log/0.224.7}/critical.ts (88%) rename src/vendor/{deno.land/std@0.217.0/log => jsr.io/@std/log/0.224.7}/debug.ts (88%) rename src/vendor/{deno.land/std@0.217.0/log => jsr.io/@std/log/0.224.7}/error.ts (88%) rename src/vendor/{deno.land/std@0.217.0/log => jsr.io/@std/log/0.224.7}/file_handler.ts (52%) rename src/vendor/{deno.land/std@0.217.0/log => jsr.io/@std/log/0.224.7}/formatters.ts (87%) rename src/vendor/{deno.land/std@0.217.0/log => jsr.io/@std/log/0.224.7}/get_logger.ts (76%) rename src/vendor/{deno.land/std@0.217.0/log => jsr.io/@std/log/0.224.7}/info.ts (88%) rename src/vendor/{deno.land/std@0.217.0/log => jsr.io/@std/log/0.224.7}/levels.ts (90%) rename src/vendor/{deno.land/std@0.217.0/log => jsr.io/@std/log/0.224.7}/logger.ts (98%) rename src/vendor/{deno.land/std@0.217.0/log => jsr.io/@std/log/0.224.7}/mod.ts (91%) rename src/vendor/{deno.land/std@0.217.0/log => jsr.io/@std/log/0.224.7}/rotating_file_handler.ts (77%) rename src/vendor/{deno.land/std@0.217.0/log => jsr.io/@std/log/0.224.7}/setup.ts (80%) rename src/vendor/{deno.land/std@0.217.0/log => jsr.io/@std/log/0.224.7}/warn.ts (88%) rename src/vendor/{deno.land/std@0.217.0/media_types => jsr.io/@std/media-types/0.224.1}/_db.ts (85%) rename src/vendor/{deno.land/std@0.217.0/media_types => jsr.io/@std/media-types/0.224.1}/_util.ts (95%) create mode 100644 src/vendor/jsr.io/@std/media-types/0.224.1/content_type.ts create mode 100644 src/vendor/jsr.io/@std/media-types/0.224.1/extension.ts rename src/vendor/{deno.land/std@0.217.0/media_types => jsr.io/@std/media-types/0.224.1}/extensions_by_type.ts (51%) create mode 100644 src/vendor/jsr.io/@std/media-types/0.224.1/format_media_type.ts create mode 100644 src/vendor/jsr.io/@std/media-types/0.224.1/get_charset.ts rename src/vendor/{deno.land/std@0.217.0/media_types => jsr.io/@std/media-types/0.224.1}/mod.ts (50%) rename src/vendor/{deno.land/std@0.217.0/media_types => jsr.io/@std/media-types/0.224.1}/parse_media_type.ts (60%) create mode 100644 src/vendor/jsr.io/@std/media-types/0.224.1/type_by_extension.ts rename src/vendor/{deno.land/std@0.217.0/media_types => jsr.io/@std/media-types/0.224.1}/vendor/mime-db.v1.52.0.ts (100%) create mode 100644 src/vendor/jsr.io/@std/media-types/1.0.3/_db.ts create mode 100644 src/vendor/jsr.io/@std/media-types/1.0.3/_util.ts rename src/vendor/{deno.land/std@0.217.0/media_types => jsr.io/@std/media-types/1.0.3}/content_type.ts (71%) create mode 100644 src/vendor/jsr.io/@std/media-types/1.0.3/format_media_type.ts rename src/vendor/{deno.land/std@0.217.0/media_types => jsr.io/@std/media-types/1.0.3}/get_charset.ts (51%) create mode 100644 src/vendor/jsr.io/@std/media-types/1.0.3/parse_media_type.ts create mode 100644 src/vendor/jsr.io/@std/media-types/1.0.3/type_by_extension.ts create mode 100644 src/vendor/jsr.io/@std/media-types/1.0.3/vendor/db.ts create mode 100644 src/vendor/jsr.io/@std/net/0.224.5/get_network_address.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/_common/assert_path.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/_common/basename.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/_common/common.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/_common/constants.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/_common/dirname.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/_common/format.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/_common/from_file_url.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/_common/glob_to_reg_exp.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/_common/normalize.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/_common/normalize_string.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/_common/relative.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/_common/strip_trailing_separators.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/_common/to_file_url.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/_interface.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/_os.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/basename.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/common.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/constants.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/dirname.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/extname.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/format.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/from_file_url.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/glob_to_regexp.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/is_absolute.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/is_glob.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/join.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/join_globs.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/mod.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/normalize.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/normalize_glob.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/parse.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/_util.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/basename.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/common.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/constants.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/dirname.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/extname.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/format.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/from_file_url.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/glob_to_regexp.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/is_absolute.ts rename src/vendor/{deno.land/std@0.217.0/jsonc/mod.ts => jsr.io/@std/path/0.224.0/posix/is_glob.ts} (74%) create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/join.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/join_globs.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/mod.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/normalize.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/normalize_glob.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/parse.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/relative.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/resolve.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/to_file_url.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/posix/to_namespaced_path.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/relative.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/resolve.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/to_file_url.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/to_namespaced_path.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/_util.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/basename.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/common.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/constants.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/dirname.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/extname.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/format.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/from_file_url.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/glob_to_regexp.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/is_absolute.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/is_glob.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/join.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/join_globs.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/mod.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/normalize.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/normalize_glob.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/parse.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/relative.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/resolve.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/to_file_url.ts create mode 100644 src/vendor/jsr.io/@std/path/0.224.0/windows/to_namespaced_path.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/assert_path.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/constants.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/normalize.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/normalize_string.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/relative.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/_os.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/constants.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/extname.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/join.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/_util.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/extname.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/join.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/normalize.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/relative.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/resolve.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/relative.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/resolve.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/_util.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/extname.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/join.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/normalize.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/relative.ts create mode 100644 src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/resolve.ts rename src/vendor/{deno.land/std@0.217.0/permissions => jsr.io/@std/permissions/0.224.0}/mod.ts (77%) create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/_constants.ts rename src/vendor/{deno.land/std@0.217.0/semver => jsr.io/@std/semver/0.224.3}/_shared.ts (99%) rename src/vendor/{deno.land/std@0.217.0/semver/test_range.ts => jsr.io/@std/semver/0.224.3/_test_comparator_set.ts} (65%) create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/can_parse.ts rename src/vendor/{deno.land/std@0.217.0/semver => jsr.io/@std/semver/0.224.3}/compare.ts (58%) rename src/vendor/{deno.land/std@0.217.0/semver => jsr.io/@std/semver/0.224.3}/constants.ts (74%) create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/difference.ts create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/equals.ts rename src/vendor/{deno.land/std@0.217.0/semver => jsr.io/@std/semver/0.224.3}/format.ts (71%) create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/format_range.ts create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/greater_or_equal.ts create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/greater_than.ts create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/greater_than_range.ts rename src/vendor/{deno.land/std@0.217.0/semver => jsr.io/@std/semver/0.224.3}/increment.ts (88%) create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/is_range.ts rename src/vendor/{deno.land/std@0.217.0/semver => jsr.io/@std/semver/0.224.3}/is_semver.ts (81%) create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/less_or_equal.ts create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/less_than.ts create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/less_than_range.ts rename src/vendor/{deno.land/std@0.217.0/semver => jsr.io/@std/semver/0.224.3}/max_satisfying.ts (58%) rename src/vendor/{deno.land/std@0.217.0/semver => jsr.io/@std/semver/0.224.3}/min_satisfying.ts (57%) rename src/vendor/{deno.land/std@0.217.0/semver => jsr.io/@std/semver/0.224.3}/mod.ts (94%) create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/not_equals.ts rename src/vendor/{deno.land/std@0.217.0/semver => jsr.io/@std/semver/0.224.3}/parse.ts (77%) rename src/vendor/{deno.land/std@0.217.0/semver => jsr.io/@std/semver/0.224.3}/parse_range.ts (60%) create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/range_intersects.ts create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/range_max.ts create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/range_min.ts create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/satisfies.ts create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/test_range.ts create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/try_parse.ts create mode 100644 src/vendor/jsr.io/@std/semver/0.224.3/try_parse_range.ts rename src/vendor/{deno.land/std@0.217.0/semver => jsr.io/@std/semver/0.224.3}/types.ts (68%) rename src/vendor/{deno.land/std@0.217.0/streams => jsr.io/@std/streams/0.224.5}/_common.ts (94%) create mode 100644 src/vendor/jsr.io/@std/streams/0.224.5/buffer.ts create mode 100644 src/vendor/jsr.io/@std/streams/0.224.5/byte_slice_stream.ts create mode 100644 src/vendor/jsr.io/@std/streams/0.224.5/concat_readable_streams.ts rename src/vendor/{deno.land/std@0.217.0/streams => jsr.io/@std/streams/0.224.5}/delimiter_stream.ts (81%) create mode 100644 src/vendor/jsr.io/@std/streams/0.224.5/early_zip_readable_streams.ts create mode 100644 src/vendor/jsr.io/@std/streams/0.224.5/iterate_reader.ts create mode 100644 src/vendor/jsr.io/@std/streams/0.224.5/limited_bytes_transform_stream.ts create mode 100644 src/vendor/jsr.io/@std/streams/0.224.5/limited_transform_stream.ts create mode 100644 src/vendor/jsr.io/@std/streams/0.224.5/merge_readable_streams.ts rename src/vendor/{deno.land/std@0.217.0/streams => jsr.io/@std/streams/0.224.5}/mod.ts (78%) rename src/vendor/{deno.land/std@0.217.0/streams => jsr.io/@std/streams/0.224.5}/readable_stream_from_reader.ts (55%) rename src/vendor/{deno.land/std@0.217.0/streams => jsr.io/@std/streams/0.224.5}/reader_from_iterable.ts (57%) create mode 100644 src/vendor/jsr.io/@std/streams/0.224.5/reader_from_stream_reader.ts create mode 100644 src/vendor/jsr.io/@std/streams/0.224.5/text_delimiter_stream.ts create mode 100644 src/vendor/jsr.io/@std/streams/0.224.5/text_line_stream.ts rename src/vendor/{deno.land/std@0.217.0/streams => jsr.io/@std/streams/0.224.5}/to_array_buffer.ts (51%) create mode 100644 src/vendor/jsr.io/@std/streams/0.224.5/to_blob.ts rename src/vendor/{deno.land/std@0.217.0/streams => jsr.io/@std/streams/0.224.5}/to_json.ts (50%) rename src/vendor/{deno.land/std@0.217.0/streams => jsr.io/@std/streams/0.224.5}/to_text.ts (69%) rename src/vendor/{deno.land/std@0.217.0/streams => jsr.io/@std/streams/0.224.5}/to_transform_stream.ts (58%) create mode 100644 src/vendor/jsr.io/@std/streams/0.224.5/writable_stream_from_writer.ts create mode 100644 src/vendor/jsr.io/@std/streams/0.224.5/writer_from_stream_writer.ts create mode 100644 src/vendor/jsr.io/@std/streams/0.224.5/zip_readable_streams.ts rename src/vendor/{deno.land/std@0.217.0/testing => jsr.io/@std/testing/0.224.0}/asserts.ts (67%) rename src/vendor/{deno.land/std@0.217.0/toml => jsr.io/@std/toml/0.224.1}/_parser.ts (99%) rename src/vendor/{deno.land/std@0.217.0/toml => jsr.io/@std/toml/0.224.1}/mod.ts (84%) create mode 100644 src/vendor/jsr.io/@std/toml/0.224.1/parse.ts rename src/vendor/{deno.land/std@0.217.0/toml => jsr.io/@std/toml/0.224.1}/stringify.ts (94%) create mode 100644 src/vendor/jsr.io/@std/toml/1.0.1/_parser.ts create mode 100644 src/vendor/jsr.io/@std/toml/1.0.1/parse.ts rename src/vendor/{deno.land/std@0.217.0/uuid => jsr.io/@std/uuid/0.224.3}/_common.ts (100%) create mode 100644 src/vendor/jsr.io/@std/uuid/0.224.3/common.ts create mode 100644 src/vendor/jsr.io/@std/uuid/0.224.3/constants.ts create mode 100644 src/vendor/jsr.io/@std/uuid/0.224.3/mod.ts rename src/vendor/{deno.land/std@0.217.0/uuid => jsr.io/@std/uuid/0.224.3}/v1.ts (63%) create mode 100644 src/vendor/jsr.io/@std/uuid/0.224.3/v3.ts create mode 100644 src/vendor/jsr.io/@std/uuid/0.224.3/v4.ts create mode 100644 src/vendor/jsr.io/@std/uuid/0.224.3/v5.ts rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_dumper/dumper.ts (89%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_dumper/dumper_state.ts (81%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_error.ts (91%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_loader/loader.ts (94%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_loader/loader_state.ts (69%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_mark.ts (76%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_state.ts (77%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/binary.ts (98%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/bool.ts (100%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/float.ts (95%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/function.ts (100%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/int.ts (98%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/map.ts (100%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/merge.ts (100%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/mod.ts (100%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/nil.ts (100%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/omap.ts (90%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/pairs.ts (91%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/regexp.ts (100%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/seq.ts (100%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/set.ts (100%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/str.ts (100%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/timestamp.ts (92%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/_type/undefined.ts (100%) create mode 100644 src/vendor/jsr.io/@std/yaml/0.224.3/_utils.ts rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/mod.ts (95%) create mode 100644 src/vendor/jsr.io/@std/yaml/0.224.3/parse.ts rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/schema.ts (85%) create mode 100644 src/vendor/jsr.io/@std/yaml/0.224.3/schema/core.ts rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/schema/default.ts (55%) create mode 100644 src/vendor/jsr.io/@std/yaml/0.224.3/schema/extended.ts rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/schema/failsafe.ts (51%) rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/schema/json.ts (58%) create mode 100644 src/vendor/jsr.io/@std/yaml/0.224.3/schema/mod.ts create mode 100644 src/vendor/jsr.io/@std/yaml/0.224.3/stringify.ts rename src/vendor/{deno.land/std@0.217.0/yaml => jsr.io/@std/yaml/0.224.3}/type.ts (76%) create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_chars.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_loader_state.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_schema.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_type.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_type/binary.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_type/bool.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_type/float.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_type/int.ts rename src/vendor/{deno.land/std@0.217.0/yaml/schema/core.ts => jsr.io/@std/yaml/1.0.5/_type/map.ts} (50%) create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_type/merge.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_type/nil.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_type/omap.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_type/pairs.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_type/regexp.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_type/seq.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_type/set.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_type/str.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_type/timestamp.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_type/undefined.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/_utils.ts create mode 100644 src/vendor/jsr.io/@std/yaml/1.0.5/parse.ts diff --git a/.gitignore b/.gitignore index 999b2e003c9..bfd3e00fac6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ *.Rproj *.Rhistory __pycache__/ -build quarto_cli.egg-info .Rproj.user package/dist/** @@ -18,6 +17,9 @@ package/dist/** src/resources/deno_std/cache src/vendor-* +# deno lock file +deno.lock + # windows configuration file win_configuration.bat /package/pkg-working diff --git a/configuration b/configuration index a9c61e32ecb..728aab337c3 100644 --- a/configuration +++ b/configuration @@ -8,9 +8,9 @@ # deno_dom should match release at https://github.com/b-fuze/deno-dom/releases # Binary dependencies -export DENO=v1.41.0 +export DENO=v1.46.3 # TODO figure out where 0.1.41 apple silicon libs are available -export DENO_DOM=v0.1.35-alpha-artifacts +export DENO_DOM=v0.1.41-alpha-artifacts export PANDOC=3.4 export DARTSASS=1.70.0 export ESBUILD=0.19.12 diff --git a/dev-docs/add-typescript-dependency.md b/dev-docs/add-typescript-dependency.md index 08c91a37e1f..679164c5e06 100644 --- a/dev-docs/add-typescript-dependency.md +++ b/dev-docs/add-typescript-dependency.md @@ -1,5 +1,7 @@ ## Adding a new Typescript dependency to the project +FIXME THIS ALL NEEDS UPDATING FOR 1.46.3 AND LATER + We vendor all external dependencies to avoid downloads during the execution of quarto in installed environments. To add a new dependency, edit the `./src/import_map.json` file. - If the dependency comes from the Deno standard library, make sure you match the version number (otherwise we can end up with duplicate imports from different versions) diff --git a/package/scripts/common/quarto b/package/scripts/common/quarto index eaef0b2c9b4..ce1fd6afea7 100755 --- a/package/scripts/common/quarto +++ b/package/scripts/common/quarto @@ -49,7 +49,7 @@ if [ -f "$DEV_PATH" ]; then fi # Local import map - QUARTO_IMPORT_MAP_ARG=--importmap=$QUARTO_SRC_PATH/dev_import_map.json + QUARTO_IMPORT_MAP_ARG=--importmap=$QUARTO_SRC_PATH/import_map.json # Turn on type checking for dev version QUARTO_DENO_OPTIONS=--check @@ -63,7 +63,7 @@ if [ -f "$DEV_PATH" ]; then if [ -z ${QUARTO_DEBUG+x} ]; then export QUARTO_DEBUG=true fi - QUARTO_CACHE_OPTIONS="--cached-only" + # QUARTO_CACHE_OPTIONS="--cached-only" # Check for deno update QUARTO_DIST_CONFIG=$QUARTO_BIN_PATH/../config diff --git a/package/scripts/deno_std/deno_std.ts b/package/scripts/deno_std/deno_std.ts index 54eaf74bbf4..3c0ac52bf8f 100644 --- a/package/scripts/deno_std/deno_std.ts +++ b/package/scripts/deno_std/deno_std.ts @@ -39,43 +39,48 @@ import * as textproto from "https://deno.land/std@0.159.0/textproto/mod.ts"; import * as uuid from "https://deno.land/std@0.159.0/uuid/mod.ts"; */ -import * as tar from "https://deno.land/std@0.217.0/archive/tar.ts"; -import * as async from "https://deno.land/std@0.217.0/async/mod.ts"; -import * as bytes from "https://deno.land/std@0.217.0/bytes/mod.ts"; -import * as collections from "https://deno.land/std@0.217.0/collections/mod.ts"; -import * as crypto from "https://deno.land/std@0.217.0/crypto/mod.ts"; -import * as datetime from "https://deno.land/std@0.217.0/datetime/mod.ts"; -import * as dotenv from "https://deno.land/std@0.217.0/dotenv/mod.ts"; +// The import map "run_import_map.json" needs to mirror these imports +// If you edit this file, you need to update the import map as well + +import * as tar from "jsr:/@std/archive@^0.224.0/tar"; +import * as async from "jsr:/@std/async@^0.224.0"; +import * as bytes from "jsr:/@std/bytes@^0.224.0"; +import * as collections from "jsr:/@std/collections@^0.224.0"; +import * as crypto from "jsr:/@std/crypto@^0.224.0"; +import * as datetime from "jsr:/@std/datetime@^0.224.0"; +import * as dotenv from "jsr:/@std/dotenv@^0.224.0"; // encoding has no mod.ts -import * as ascii85 from "https://deno.land/std@0.217.0/encoding/ascii85.ts"; -import * as base32 from "https://deno.land/std@0.217.0/encoding/base32.ts"; -import * as base58 from "https://deno.land/std@0.217.0/encoding/base58.ts"; -import * as base64 from "https://deno.land/std@0.217.0/encoding/base64.ts"; -import * as base64url from "https://deno.land/std@0.217.0/encoding/base64url.ts"; -import * as csv from "https://deno.land/std@0.217.0/csv/mod.ts"; -import * as front_matter from "https://deno.land/std@0.217.0/front_matter/mod.ts"; -import * as hex from "https://deno.land/std@0.217.0/encoding/hex.ts"; -import * as jsonc from "https://deno.land/std@0.217.0/jsonc/mod.ts"; -import * as toml from "https://deno.land/std@0.217.0/toml/mod.ts"; -import * as varint from "https://deno.land/std@0.217.0/encoding/varint.ts"; -import * as yaml from "https://deno.land/std@0.217.0/yaml/mod.ts"; +import * as ascii85 from "https://deno.land/std@0.224.0/encoding/ascii85.ts"; +import * as base32 from "https://deno.land/std@0.224.0/encoding/base32.ts"; +import * as base58 from "https://deno.land/std@0.224.0/encoding/base58.ts"; +import * as base64 from "https://deno.land/std@0.224.0/encoding/base64.ts"; +import * as base64url from "https://deno.land/std@0.224.0/encoding/base64url.ts"; +import * as csv from "jsr:/@std/csv@^0.224.0"; +import * as front_matter from "jsr:/@std/front-matter@^0.224.0"; +import * as hex from "https://deno.land/std@0.224.0/encoding/hex.ts"; +import * as jsonc from "jsr:/@std/jsonc@^0.224.0"; +import * as toml from "jsr:/@std/toml@^0.224.0"; +import * as varint from "https://deno.land/std@0.224.0/encoding/varint.ts"; +import * as yaml from "jsr:/@std/yaml@^0.224.0"; + +import * as flags from "jsr:/@std/flags@^0.224.0"; +import * as fmt_bytes from "https://deno.land/std@0.224.0/fmt/bytes.ts"; +import * as fmt_colors from "https://deno.land/std@0.224.0/fmt/colors.ts"; +import * as fmt_printf from "https://deno.land/std@0.224.0/fmt/printf.ts"; +import * as fs from "jsr:/@std/fs@^0.224.0"; +import * as http from "jsr:/@std/http@^0.224.0"; +import * as io from "jsr:/@std/io@^0.224.0"; +import * as log from "jsr:/@std/log@^0.224.0"; +import * as mediaTypes from "jsr:/@std/media-types@^0.224.0"; +import * as path from "jsr:/@std/path@^0.224.0"; +import * as permissions from "jsr:/@std/permissions@^0.224.0"; +import * as semver from "jsr:/@std/semver@^0.224.0"; +import * as streams from "jsr:/@std/streams@^0.224.0"; +import * as uuid from "jsr:/@std/uuid@^0.224.0"; -import * as flags from "https://deno.land/std@0.217.0/flags/mod.ts"; -import * as fmt_bytes from "https://deno.land/std@0.217.0/fmt/bytes.ts"; -import * as fmt_colors from "https://deno.land/std@0.217.0/fmt/colors.ts"; -import * as fmt_printf from "https://deno.land/std@0.217.0/fmt/printf.ts"; -import * as fs from "https://deno.land/std@0.217.0/fs/mod.ts"; -import * as http from "https://deno.land/std@0.217.0/http/mod.ts"; -import * as io from "https://deno.land/std@0.217.0/io/mod.ts"; -import * as log from "https://deno.land/std@0.217.0/log/mod.ts"; -import * as mediaTypes from "https://deno.land/std@0.217.0/media_types/mod.ts"; -import * as path from "https://deno.land/std@0.217.0/path/mod.ts"; -import * as permissions from "https://deno.land/std@0.217.0/permissions/mod.ts"; -import * as semver from "https://deno.land/std@0.217.0/semver/mod.ts"; -import * as streams from "https://deno.land/std@0.217.0/streams/mod.ts"; -import * as uuid from "https://deno.land/std@0.217.0/uuid/mod.ts"; -import * as version from "https://deno.land/std@0.217.0/version.ts"; +// seems like jsr doesn't export version numbers?! +// import * as version from "jsr:/@std/version@^0.224.0"; import juice from "https://cdn.skypack.dev/juice@10.0.0"; /* @@ -84,58 +89,58 @@ These would be useful imports to add, but they increase the size of the download cache significantly, so we're skipping them until they are needed. -import "https://deno.land/std@0.217.0/node/assert/strict.ts"; -import "https://deno.land/std@0.217.0/node/dns/promises.ts"; -import "https://deno.land/std@0.217.0/node/fs/promises.ts"; -import "https://deno.land/std@0.217.0/node/path/mod.ts"; -import "https://deno.land/std@0.217.0/node/readline/promises.ts"; -import "https://deno.land/std@0.217.0/node/stream/web.ts"; -import "https://deno.land/std@0.217.0/node/timers/promises.ts"; -import "https://deno.land/std@0.217.0/node/util/types.ts"; -import "https://deno.land/std@0.217.0/node/assert.ts"; -import "https://deno.land/std@0.217.0/node/assertion_error.ts"; -import "https://deno.land/std@0.217.0/node/async_hooks.ts"; -import "https://deno.land/std@0.217.0/node/async_hooks.ts"; -import "https://deno.land/std@0.217.0/node/buffer.ts"; -import "https://deno.land/std@0.217.0/node/child_process.ts"; -import "https://deno.land/std@0.217.0/node/cluster.ts"; -import "https://deno.land/std@0.217.0/node/console.ts"; -import "https://deno.land/std@0.217.0/node/constants.ts"; -import "https://deno.land/std@0.217.0/node/crypto.ts"; -import "https://deno.land/std@0.217.0/node/dgram.ts"; -import "https://deno.land/std@0.217.0/node/diagnostics_channel.ts"; -import "https://deno.land/std@0.217.0/node/dns.ts"; -import "https://deno.land/std@0.217.0/node/domain.ts"; -import "https://deno.land/std@0.217.0/node/events.ts"; -import "https://deno.land/std@0.217.0/node/fs.ts"; -import "https://deno.land/std@0.217.0/node/http.ts"; -import "https://deno.land/std@0.217.0/node/http2.ts"; -import "https://deno.land/std@0.217.0/node/https.ts"; -import "https://deno.land/std@0.217.0/node/inspector.ts"; -import "https://deno.land/std@0.217.0/node/module_all.ts"; -import "https://deno.land/std@0.217.0/node/module_esm.ts"; -import "https://deno.land/std@0.217.0/node/module.ts"; -import "https://deno.land/std@0.217.0/node/net.ts"; -import "https://deno.land/std@0.217.0/node/os.ts"; -import "https://deno.land/std@0.217.0/node/path.ts"; -import "https://deno.land/std@0.217.0/node/perf_hooks.ts"; -import "https://deno.land/std@0.217.0/node/process.ts"; -import "https://deno.land/std@0.217.0/node/punycode.ts"; -import "https://deno.land/std@0.217.0/node/querystring.ts"; -import "https://deno.land/std@0.217.0/node/readline.ts"; -import "https://deno.land/std@0.217.0/node/repl.ts"; -import "https://deno.land/std@0.217.0/node/stream.ts"; -import "https://deno.land/std@0.217.0/node/string_decoder.ts"; -import "https://deno.land/std@0.217.0/node/sys.ts"; -import "https://deno.land/std@0.217.0/node/timers.ts"; -import "https://deno.land/std@0.217.0/node/tls.ts"; -import "https://deno.land/std@0.217.0/node/tty.ts"; -import "https://deno.land/std@0.217.0/node/upstream_modules.ts"; -import "https://deno.land/std@0.217.0/node/url.ts"; -import "https://deno.land/std@0.217.0/node/util.ts"; -import "https://deno.land/std@0.217.0/node/v8.ts"; -import "https://deno.land/std@0.217.0/node/vm.ts"; -import "https://deno.land/std@0.217.0/node/wasi.ts"; -import "https://deno.land/std@0.217.0/node/worker_threads.ts"; -import "https://deno.land/std@0.217.0/node/zlib.ts"; +import "https://deno.land/std@0.224.0/node/assert/strict.ts"; +import "https://deno.land/std@0.224.0/node/dns/promises.ts"; +import "https://deno.land/std@0.224.0/node/fs/promises.ts"; +import "https://deno.land/std@0.224.0/node/path/mod.ts"; +import "https://deno.land/std@0.224.0/node/readline/promises.ts"; +import "https://deno.land/std@0.224.0/node/stream/web.ts"; +import "https://deno.land/std@0.224.0/node/timers/promises.ts"; +import "https://deno.land/std@0.224.0/node/util/types.ts"; +import "https://deno.land/std@0.224.0/node/assert.ts"; +import "https://deno.land/std@0.224.0/node/assertion_error.ts"; +import "https://deno.land/std@0.224.0/node/async_hooks.ts"; +import "https://deno.land/std@0.224.0/node/async_hooks.ts"; +import "https://deno.land/std@0.224.0/node/buffer.ts"; +import "https://deno.land/std@0.224.0/node/child_process.ts"; +import "https://deno.land/std@0.224.0/node/cluster.ts"; +import "https://deno.land/std@0.224.0/node/console.ts"; +import "https://deno.land/std@0.224.0/node/constants.ts"; +import "https://deno.land/std@0.224.0/node/crypto.ts"; +import "https://deno.land/std@0.224.0/node/dgram.ts"; +import "https://deno.land/std@0.224.0/node/diagnostics_channel.ts"; +import "https://deno.land/std@0.224.0/node/dns.ts"; +import "https://deno.land/std@0.224.0/node/domain.ts"; +import "https://deno.land/std@0.224.0/node/events.ts"; +import "https://deno.land/std@0.224.0/node/fs.ts"; +import "https://deno.land/std@0.224.0/node/http.ts"; +import "https://deno.land/std@0.224.0/node/http2.ts"; +import "https://deno.land/std@0.224.0/node/https.ts"; +import "https://deno.land/std@0.224.0/node/inspector.ts"; +import "https://deno.land/std@0.224.0/node/module_all.ts"; +import "https://deno.land/std@0.224.0/node/module_esm.ts"; +import "https://deno.land/std@0.224.0/node/module.ts"; +import "https://deno.land/std@0.224.0/node/net.ts"; +import "https://deno.land/std@0.224.0/node/os.ts"; +import "https://deno.land/std@0.224.0/node/path.ts"; +import "https://deno.land/std@0.224.0/node/perf_hooks.ts"; +import "https://deno.land/std@0.224.0/node/process.ts"; +import "https://deno.land/std@0.224.0/node/punycode.ts"; +import "https://deno.land/std@0.224.0/node/querystring.ts"; +import "https://deno.land/std@0.224.0/node/readline.ts"; +import "https://deno.land/std@0.224.0/node/repl.ts"; +import "https://deno.land/std@0.224.0/node/stream.ts"; +import "https://deno.land/std@0.224.0/node/string_decoder.ts"; +import "https://deno.land/std@0.224.0/node/sys.ts"; +import "https://deno.land/std@0.224.0/node/timers.ts"; +import "https://deno.land/std@0.224.0/node/tls.ts"; +import "https://deno.land/std@0.224.0/node/tty.ts"; +import "https://deno.land/std@0.224.0/node/upstream_modules.ts"; +import "https://deno.land/std@0.224.0/node/url.ts"; +import "https://deno.land/std@0.224.0/node/util.ts"; +import "https://deno.land/std@0.224.0/node/v8.ts"; +import "https://deno.land/std@0.224.0/node/vm.ts"; +import "https://deno.land/std@0.224.0/node/wasi.ts"; +import "https://deno.land/std@0.224.0/node/worker_threads.ts"; +import "https://deno.land/std@0.224.0/node/zlib.ts"; */ diff --git a/package/scripts/windows/quarto.cmd b/package/scripts/windows/quarto.cmd index 4b8f44a3625..ed14a8adfb3 100644 --- a/package/scripts/windows/quarto.cmd +++ b/package/scripts/windows/quarto.cmd @@ -28,7 +28,7 @@ IF EXIST "!QUARTO_TS_PATH!" ( IF NOT DEFINED QUARTO_ACTION ( SET QUARTO_ACTION=run ) - SET "QUARTO_IMPORT_MAP_ARG=--importmap=""!QUARTO_SRC_PATH!\dev_import_map.json""" + SET "QUARTO_IMPORT_MAP_ARG=--importmap=""!QUARTO_SRC_PATH!\import_map.json""" IF NOT DEFINED QUARTO_TARGET ( SET "QUARTO_TARGET=!QUARTO_TS_PATH!" @@ -57,6 +57,8 @@ IF EXIST "!QUARTO_TS_PATH!" ( echo !DENO!>"!DENO_VERSION_FILE!" ) + SET QUARTO_CACHE_OPTIONS="" + ) ELSE ( IF NOT DEFINED QUARTO_SHARE_PATH ( @@ -78,6 +80,7 @@ IF EXIST "!QUARTO_TS_PATH!" ( SET "QUARTO_TARGET=%SCRIPT_PATH%\quarto.js" SET "QUARTO_BIN_PATH=%SCRIPT_PATH%" SET "QUARTO_IMPORT_MAP_ARG=--importmap=""%SCRIPT_PATH%\vendor\import_map.json""" + SET QUARTO_CACHE_OPTIONS="--cached-only" ) IF "%1"=="--paths" ( @@ -99,7 +102,7 @@ IF NOT DEFINED QUARTO_DENO ( SET "DENO_TLS_CA_STORE=system,mozilla" SET "DENO_NO_UPDATE_CHECK=1" -SET "QUARTO_DENO_OPTIONS=--unstable-kv --unstable-ffi --no-config --cached-only --allow-read --allow-write --allow-run --allow-env --allow-net --allow-ffi" +SET "QUARTO_DENO_OPTIONS=--unstable-kv --unstable-ffi --no-config --allow-read --allow-write --allow-run --allow-env --allow-net --allow-ffi" REM Add expected V8 options to QUARTO_DENO_V8_OPTIONS IF DEFINED QUARTO_DENO_V8_OPTIONS ( @@ -128,7 +131,7 @@ IF NOT DEFINED QUARTO_DENO_EXTRA_OPTIONS ( ) ) -!QUARTO_DENO! !QUARTO_ACTION! !QUARTO_DENO_OPTIONS! !QUARTO_DENO_EXTRA_OPTIONS! !QUARTO_IMPORT_MAP_ARG! !QUARTO_TARGET! %* +!QUARTO_DENO! !QUARTO_ACTION! !QUARTO_CACHE_OPTIONS! !QUARTO_DENO_OPTIONS! !QUARTO_DENO_EXTRA_OPTIONS! !QUARTO_IMPORT_MAP_ARG! !QUARTO_TARGET! %* :end \ No newline at end of file diff --git a/package/src/common/compile-quarto-latexmk.ts b/package/src/common/compile-quarto-latexmk.ts index 42311b5d973..7fb7d052d2f 100644 --- a/package/src/common/compile-quarto-latexmk.ts +++ b/package/src/common/compile-quarto-latexmk.ts @@ -6,7 +6,7 @@ */ import { Command } from "cliffy/command/mod.ts"; import { basename, join } from "../../../src/deno_ral/path.ts"; -import { ensureDirSync } from "fs/mod.ts"; +import { ensureDirSync } from "../../../src/deno_ral/fs.ts"; import { info } from "../../../src/deno_ral/log.ts"; import { Configuration, readConfiguration } from "../common/config.ts"; diff --git a/package/src/common/config.ts b/package/src/common/config.ts index b6fc948d4ee..924292aa748 100644 --- a/package/src/common/config.ts +++ b/package/src/common/config.ts @@ -102,7 +102,7 @@ export function readConfiguration( ); } - const importmap = join(src, "dev_import_map.json"); + const importmap = join(src, "import_map.json"); return { productName, diff --git a/package/src/common/configure.ts b/package/src/common/configure.ts index cee7f6b0819..8e2b4fa7e74 100644 --- a/package/src/common/configure.ts +++ b/package/src/common/configure.ts @@ -4,8 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ import { dirname, join, SEP } from "../../../src/deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; -import { ensureDirSync } from "fs/mod.ts"; +import { existsSync, ensureDirSync } from "../../../src/deno_ral/fs.ts"; import { info, warning } from "../../../src/deno_ral/log.ts"; import { expandPath } from "../../../src/core/path.ts"; diff --git a/package/src/common/create-deno-config.ts b/package/src/common/create-deno-config.ts index 1eb17ba2271..d3fccbb85e5 100644 --- a/package/src/common/create-deno-config.ts +++ b/package/src/common/create-deno-config.ts @@ -1,4 +1,4 @@ -import { expandGlobSync } from "fs/mod.ts"; +import { expandGlobSync } from "../../../src/deno_ral/fs.ts"; const json = JSON.parse( Deno.readTextFileSync("package/src/common/deno-meta.json"), diff --git a/package/src/common/dependencies/dartsass.ts b/package/src/common/dependencies/dartsass.ts index b164e3dc36f..4537748d977 100644 --- a/package/src/common/dependencies/dartsass.ts +++ b/package/src/common/dependencies/dartsass.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC * */ -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../../../../src/deno_ral/fs.ts"; import { dirname, join } from "../../../../src/deno_ral/path.ts"; import { unTar } from "../../util/tar.ts"; diff --git a/package/src/common/dependencies/deno_dom.ts b/package/src/common/dependencies/deno_dom.ts index fd67a711d21..31b95feda05 100644 --- a/package/src/common/dependencies/deno_dom.ts +++ b/package/src/common/dependencies/deno_dom.ts @@ -5,7 +5,7 @@ * */ -import { ensureDir } from "fs/mod.ts"; +import { ensureDir } from "../../../../src/deno_ral/fs.ts"; import { basename, dirname, join } from "../../../../src/deno_ral/path.ts"; import { Configuration } from "../config.ts"; @@ -34,8 +34,8 @@ export function deno_dom(version: string): Dependency { }; }; - const deno_dom_release_dragonstyle = (filename: string, targetFileName: string) => { - return deno_dom_release(filename, "https://github.com/dragonstyle/deno-dom", targetFileName) + const deno_dom_release_quarto_dev = (filename: string, targetFileName: string) => { + return deno_dom_release(filename, "https://github.com/quarto-dev/deno-dom-apple-silicon", targetFileName) } return { @@ -50,7 +50,7 @@ export function deno_dom(version: string): Dependency { }, "aarch64": { linux: deno_dom_release("libplugin-linux-aarch64.so"), - darwin: deno_dom_release_dragonstyle("libplugin-aarch64.dylib", "libplugin.dylib") + darwin: deno_dom_release_quarto_dev("libplugin-aarch64.dylib", "libplugin.dylib") }, }, }; diff --git a/package/src/common/dependencies/esbuild.ts b/package/src/common/dependencies/esbuild.ts index 49ae9f91377..cf00e107d56 100644 --- a/package/src/common/dependencies/esbuild.ts +++ b/package/src/common/dependencies/esbuild.ts @@ -3,7 +3,7 @@ * * Copyright (C) 2020-2022 Posit Software, PBC */ -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../../../../src/deno_ral/fs.ts"; import { dirname, join } from "../../../../src/deno_ral/path.ts"; import { unTar } from "../../util/tar.ts"; diff --git a/package/src/common/dependencies/pandoc.ts b/package/src/common/dependencies/pandoc.ts index 56e66e77eb6..706d5775d07 100644 --- a/package/src/common/dependencies/pandoc.ts +++ b/package/src/common/dependencies/pandoc.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC * */ -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../../../../src/deno_ral/fs.ts"; import { dirname, join } from "../../../../src/deno_ral/path.ts"; import { unTar } from "../../util/tar.ts"; diff --git a/package/src/common/dependencies/typst.ts b/package/src/common/dependencies/typst.ts index 7a10b5290e4..1538f8f0055 100644 --- a/package/src/common/dependencies/typst.ts +++ b/package/src/common/dependencies/typst.ts @@ -1,6 +1,6 @@ import { join, dirname, basename } from "../../../../src/deno_ral/path.ts" -import { ensureDirSync, existsSync } from "fs/mod.ts" +import { ensureDirSync, existsSync } from "../../../../src/deno_ral/fs.ts" import { Configuration } from "../config.ts"; import { Dependency } from "./dependencies.ts"; diff --git a/package/src/common/import-report/find-bad-imports.ts b/package/src/common/import-report/find-bad-imports.ts index 2a331b518b2..1fd66e98e2a 100644 --- a/package/src/common/import-report/find-bad-imports.ts +++ b/package/src/common/import-report/find-bad-imports.ts @@ -1,5 +1,5 @@ import { DenoInfoDependency, Edge, getDenoInfo } from "./deno-info.ts"; -import { brightBlue } from "https://deno.land/std/fmt/colors.ts"; +import { brightBlue } from "jsr:/@std/fmt@^0.224.0/colors"; import { longestCommonDirPrefix } from "./utils.ts"; const allowedTerminalFileSuffixes = [ diff --git a/package/src/common/import-report/find-bad-types-constants.ts b/package/src/common/import-report/find-bad-types-constants.ts index 7cd69849ca3..04e00973f8b 100644 --- a/package/src/common/import-report/find-bad-types-constants.ts +++ b/package/src/common/import-report/find-bad-types-constants.ts @@ -1,5 +1,5 @@ import { DenoInfoDependency, Edge, getDenoInfo } from "./deno-info.ts"; -import { brightBlue } from "https://deno.land/std/fmt/colors.ts"; +import { brightBlue } from "jsr:/@std/fmt@^0.224.0/colors"; import { longestCommonDirPrefix } from "./utils.ts"; function isBadImportTypes(source: string, dep: DenoInfoDependency) { diff --git a/package/src/common/package-filters.ts b/package/src/common/package-filters.ts index 868aedcd416..e1ac3099c0f 100644 --- a/package/src/common/package-filters.ts +++ b/package/src/common/package-filters.ts @@ -5,7 +5,7 @@ * */ import { dirname, join } from "../../../src/deno_ral/path.ts"; -import { ensureDirSync } from "fs/mod.ts"; +import { ensureDirSync } from "../../../src/deno_ral/fs.ts"; import { info } from "../../../src/deno_ral/log.ts"; // Creates inlined version of the filters that can be distributed with our installer diff --git a/package/src/common/prepare-dist.ts b/package/src/common/prepare-dist.ts index d5675491dca..1a1fef70ea4 100755 --- a/package/src/common/prepare-dist.ts +++ b/package/src/common/prepare-dist.ts @@ -6,8 +6,7 @@ */ import { dirname, join } from "../../../src/deno_ral/path.ts"; -import { ensureDirSync, existsSync } from "fs/mod.ts"; -import { copySync } from "fs/copy.ts"; +import { copySync, ensureDirSync, existsSync } from "../../../src/deno_ral/fs.ts"; import { Configuration } from "../common/config.ts"; import { buildFilter } from "./package-filters.ts"; diff --git a/package/src/common/update-html-dependencies.ts b/package/src/common/update-html-dependencies.ts index e2eaa6fab4f..3b6f5780495 100644 --- a/package/src/common/update-html-dependencies.ts +++ b/package/src/common/update-html-dependencies.ts @@ -3,8 +3,7 @@ * * Copyright (C) 2020-2022 Posit Software, PBC */ -import { ensureDir, ensureDirSync, existsSync, walkSync } from "fs/mod.ts"; -import { copySync } from "fs/copy.ts"; +import { copySync, ensureDir, ensureDirSync, existsSync, walkSync } from "../../../src/deno_ral/fs.ts"; import { info } from "../../../src/deno_ral/log.ts"; import { dirname, basename, extname, join } from "../../../src/deno_ral/path.ts"; import { lines } from "../../../src/core/text.ts"; diff --git a/package/src/common/update-pandoc.ts b/package/src/common/update-pandoc.ts index 23b93a63d73..1447e01058c 100644 --- a/package/src/common/update-pandoc.ts +++ b/package/src/common/update-pandoc.ts @@ -6,7 +6,7 @@ */ import { Command } from "cliffy/command/mod.ts"; import { join } from "../../../src/deno_ral/path.ts"; -import { ensureDirSync } from "fs/mod.ts"; +import { ensureDirSync } from "../../../src/deno_ral/fs.ts"; import { info } from "../../../src/deno_ral/log.ts"; import { diff --git a/package/src/ext/installer.ts b/package/src/ext/installer.ts index cac27109043..c3649d7267a 100644 --- a/package/src/ext/installer.ts +++ b/package/src/ext/installer.ts @@ -6,7 +6,7 @@ */ import { join } from "../../../src/deno_ral/path.ts"; -import { copySync } from "fs/copy.ts"; +import { copySync } from "../../../src/deno_ral/fs.ts"; import { info } from "../../../src/deno_ral/log.ts"; import { Configuration } from "../common/config.ts"; diff --git a/package/src/linux/installer.ts b/package/src/linux/installer.ts index 562a38163be..fa0e6e0d90c 100644 --- a/package/src/linux/installer.ts +++ b/package/src/linux/installer.ts @@ -5,8 +5,7 @@ * */ import { join } from "../../../src/deno_ral/path.ts"; -import { emptyDirSync, ensureDirSync, walk } from "fs/mod.ts"; -import { copySync } from "fs/copy.ts"; +import { copySync, emptyDirSync, ensureDirSync, walk } from "../../../src/deno_ral/fs.ts"; import { info } from "../../../src/deno_ral/log.ts"; import { Configuration } from "../common/config.ts"; diff --git a/package/src/macos/installer.ts b/package/src/macos/installer.ts index 93942377563..ca80ced0056 100644 --- a/package/src/macos/installer.ts +++ b/package/src/macos/installer.ts @@ -11,7 +11,7 @@ // TODO: Bundle and package Identifier - same or different? import { dirname, join } from "../../../src/deno_ral/path.ts"; -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../../../src/deno_ral/fs.ts"; import { error, info, warning } from "../../../src/deno_ral/log.ts"; import { Configuration } from "../common/config.ts"; diff --git a/package/src/quarto-bld b/package/src/quarto-bld index 037861b948c..0b4204ee98b 100755 --- a/package/src/quarto-bld +++ b/package/src/quarto-bld @@ -17,4 +17,4 @@ export DENO_NO_UPDATE_CHECK=1 # TODO: Consider generating a source map or something to get a good stack # Create the Deno bundle -"$QUARTO_DENO" run --unstable-kv --unstable-ffi --allow-env --allow-read --allow-write --allow-run --allow-net --allow-ffi --v8-flags=--stack-trace-limit=100 --importmap="${SCRIPT_PATH}/../../src/dev_import_map.json" "$SCRIPT_PATH/bld.ts" $@ +"$QUARTO_DENO" run --no-check --unstable-kv --unstable-ffi --allow-env --allow-read --allow-write --allow-run --allow-net --allow-ffi --v8-flags=--stack-trace-limit=100 --importmap="${SCRIPT_PATH}/../../src/import_map.json" "$SCRIPT_PATH/bld.ts" $@ diff --git a/package/src/util/deno.ts b/package/src/util/deno.ts index 12dcdaab0df..c1358eb1bb3 100644 --- a/package/src/util/deno.ts +++ b/package/src/util/deno.ts @@ -20,6 +20,7 @@ export async function bundle( } denoBundleCmd.push(denoExecPath); denoBundleCmd.push("bundle"); + denoBundleCmd.push("--no-check"); denoBundleCmd.push("--unstable-kv"); denoBundleCmd.push("--unstable-ffi"); denoBundleCmd.push( diff --git a/package/src/util/git.ts b/package/src/util/git.ts index 4be9922bcb6..aa69466df49 100644 --- a/package/src/util/git.ts +++ b/package/src/util/git.ts @@ -6,7 +6,7 @@ */ import { join } from "../../../src/deno_ral/path.ts"; import { info } from "../../../src/deno_ral/log.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; export interface Repo { dir: string; diff --git a/package/src/util/utils.ts b/package/src/util/utils.ts index 5e26a176215..3a0445a2d7d 100644 --- a/package/src/util/utils.ts +++ b/package/src/util/utils.ts @@ -1,4 +1,4 @@ -import { writeAll } from "io/write_all.ts"; +import { writeAll } from "io/write-all"; import { CmdResult, runCmd } from "./cmd.ts"; // Read an environment variable diff --git a/package/src/windows/installer.ts b/package/src/windows/installer.ts index 8df576254bf..33aa941b3e8 100644 --- a/package/src/windows/installer.ts +++ b/package/src/windows/installer.ts @@ -1,12 +1,11 @@ import { info } from "../../../src/deno_ral/log.ts"; import { basename, dirname, join } from "../../../src/deno_ral/path.ts"; -import { emptyDirSync, ensureDirSync, existsSync, moveSync } from "fs/mod.ts"; import { Configuration } from "../common/config.ts"; import { runCmd } from "../util/cmd.ts"; import { download, unzip } from "../util/utils.ts"; import { execProcess } from "../../../src/core/process.ts"; -import { copySync } from "fs/copy.ts"; +import { emptyDirSync, ensureDirSync, existsSync, moveSync, copySync } from "../../../src/deno_ral/fs.ts"; export async function makeInstallerWindows(configuration: Configuration) { const packageName = `quarto-${configuration.version}-win.msi`; diff --git a/quarto-cli.code-workspace b/quarto-cli.code-workspace index 714efa00ff9..f19a2188636 100644 --- a/quarto-cli.code-workspace +++ b/quarto-cli.code-workspace @@ -9,7 +9,7 @@ "debug.javascript.unmapMissingSources": true, "julia.format.indent": 2, "julia.format.indents": false, - "deno.importMap": "./src/dev_import_map.json", + "deno.importMap": "./src/import_map.json", "deno.lint": true, "deno.enable": true, "deno.unstable": true, diff --git a/src/command/capabilities/cmd.ts b/src/command/capabilities/cmd.ts index 2bc433bb4b3..18ce25e1c14 100644 --- a/src/command/capabilities/cmd.ts +++ b/src/command/capabilities/cmd.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { writeAllSync } from "io/write_all.ts"; +import { writeAllSync } from "io/write-all"; import { Command } from "cliffy/command/mod.ts"; import { capabilities } from "./capabilities.ts"; diff --git a/src/command/convert/cmd.ts b/src/command/convert/cmd.ts index b4cbc85b3d4..845f26b3f32 100644 --- a/src/command/convert/cmd.ts +++ b/src/command/convert/cmd.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { join } from "../../deno_ral/path.ts"; import { info } from "../../deno_ral/log.ts"; diff --git a/src/command/convert/jupyter.ts b/src/command/convert/jupyter.ts index 0fe28cab82d..4b6b9b73d2e 100644 --- a/src/command/convert/jupyter.ts +++ b/src/command/convert/jupyter.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { stringify } from "yaml/mod.ts"; +import { stringify } from "../../core/yaml.ts"; import { partitionYamlFrontMatter, diff --git a/src/command/create/artifacts/artifact-shared.ts b/src/command/create/artifacts/artifact-shared.ts index 9a5486f6b2f..cb4544a6f14 100644 --- a/src/command/create/artifacts/artifact-shared.ts +++ b/src/command/create/artifacts/artifact-shared.ts @@ -12,7 +12,7 @@ import { gfmAutoIdentifier } from "../../../core/pandoc/pandoc-id.ts"; import { coerce } from "semver/mod.ts"; import { info } from "../../../deno_ral/log.ts"; import { basename, dirname, join, relative } from "../../../deno_ral/path.ts"; -import { ensureDirSync, walkSync } from "fs/mod.ts"; +import { ensureDirSync, walkSync } from "../../../deno_ral/fs.ts"; import { renderEjs } from "../../../core/ejs.ts"; import { safeExistsSync } from "../../../core/path.ts"; import { CreateDirective, CreateDirectiveData } from "../cmd-types.ts"; diff --git a/src/command/create/artifacts/extension.ts b/src/command/create/artifacts/extension.ts index 4f940514509..ed9a2dc8c00 100644 --- a/src/command/create/artifacts/extension.ts +++ b/src/command/create/artifacts/extension.ts @@ -16,7 +16,7 @@ import { resourcePath } from "../../../core/resources.ts"; import { Input, Select } from "cliffy/prompt/mod.ts"; import { join } from "../../../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../deno_ral/fs.ts"; const kType = "type"; const kSubType = "subtype"; diff --git a/src/command/create/cmd.ts b/src/command/create/cmd.ts index ccaa93af646..79447d525fa 100644 --- a/src/command/create/cmd.ts +++ b/src/command/create/cmd.ts @@ -13,7 +13,7 @@ import { runningInCI } from "../../core/ci-info.ts"; import { Command } from "cliffy/command/mod.ts"; import { prompt, Select, SelectValueOptions } from "cliffy/prompt/mod.ts"; -import { readLines } from "io/mod.ts"; +import { readLines } from "../../deno_ral/io.ts"; import { info } from "../../deno_ral/log.ts"; import { ArtifactCreator, CreateDirective, CreateResult } from "./cmd-types.ts"; diff --git a/src/command/create/editor.ts b/src/command/create/editor.ts index dea44dbc3b0..b2eb02d8614 100644 --- a/src/command/create/editor.ts +++ b/src/command/create/editor.ts @@ -14,7 +14,7 @@ import { } from "../../core/platform.ts"; import { basename, dirname, join } from "../../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; export interface Editor { // A short, command line friendly id diff --git a/src/command/preview/cmd.ts b/src/command/preview/cmd.ts index a96e4d9670b..830050caa1c 100644 --- a/src/command/preview/cmd.ts +++ b/src/command/preview/cmd.ts @@ -4,10 +4,10 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { dirname, extname, join, relative } from "../../deno_ral/path.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import { Command } from "cliffy/command/mod.ts"; diff --git a/src/command/preview/preview.ts b/src/command/preview/preview.ts index 0b080a78638..e62026edbe7 100644 --- a/src/command/preview/preview.ts +++ b/src/command/preview/preview.ts @@ -12,7 +12,7 @@ import { join, relative, } from "../../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import * as ld from "../../core/lodash.ts"; diff --git a/src/command/publish/cmd.ts b/src/command/publish/cmd.ts index 3992b0655ff..d182d58e168 100644 --- a/src/command/publish/cmd.ts +++ b/src/command/publish/cmd.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { Command } from "cliffy/command/mod.ts"; import { Select } from "cliffy/prompt/select.ts"; diff --git a/src/command/render/cleanup.ts b/src/command/render/cleanup.ts index 39f64490a1b..f7667345a0c 100644 --- a/src/command/render/cleanup.ts +++ b/src/command/render/cleanup.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { dirname, extname, isAbsolute, join } from "../../deno_ral/path.ts"; import * as ld from "../../core/lodash.ts"; diff --git a/src/command/render/cmd.ts b/src/command/render/cmd.ts index 65bdf41a1b0..fafc3139969 100644 --- a/src/command/render/cmd.ts +++ b/src/command/render/cmd.ts @@ -5,7 +5,7 @@ */ import { dirname, relative } from "../../deno_ral/path.ts"; -import { expandGlobSync } from "fs/expand_glob.ts"; +import { expandGlobSync } from "../../deno_ral/fs.ts"; import { Command } from "cliffy/command/mod.ts"; import { debug, info, warning } from "../../deno_ral/log.ts"; diff --git a/src/command/render/defaults.ts b/src/command/render/defaults.ts index 05656eb5e2e..e6ef78d8d16 100644 --- a/src/command/render/defaults.ts +++ b/src/command/render/defaults.ts @@ -5,7 +5,7 @@ */ import { extname } from "../../deno_ral/path.ts"; -import { stringify } from "yaml/mod.ts"; +import { stringify } from "../../core/yaml.ts"; import * as ld from "../../core/lodash.ts"; @@ -125,10 +125,10 @@ export function pandocDefaultsMessage( const filtersContains = (filters: QuartoFilter[], filter: QuartoFilter) => { return filters.find((sysFilter) => { - const sysPath = typeof (sysFilter) === "string" + const sysPath = typeof sysFilter === "string" ? sysFilter : sysFilter.path; - const filterPath = typeof (filter) === "string" ? filter : filter.path; + const filterPath = typeof filter === "string" ? filter : filter.path; return sysPath === filterPath; }); }; diff --git a/src/command/render/filters.ts b/src/command/render/filters.ts index 127d3feaddd..4fca54a47fa 100644 --- a/src/command/render/filters.ts +++ b/src/command/render/filters.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { kBibliography, diff --git a/src/command/render/flags.ts b/src/command/render/flags.ts index 104923eca4c..a2fa17bfcc7 100644 --- a/src/command/render/flags.ts +++ b/src/command/render/flags.ts @@ -3,7 +3,7 @@ * * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { readYaml, readYamlFromString } from "../../core/yaml.ts"; diff --git a/src/command/render/freeze.ts b/src/command/render/freeze.ts index a0e43c76448..1a364f8fd2c 100644 --- a/src/command/render/freeze.ts +++ b/src/command/render/freeze.ts @@ -12,7 +12,13 @@ import { join, relative, } from "../../deno_ral/path.ts"; -import { ensureDirSync, EOL, existsSync, format, LF } from "fs/mod.ts"; +import { + ensureDirSync, + EOL, + existsSync, + format, + LF, +} from "../../deno_ral/fs.ts"; import { cloneDeep } from "../../core/lodash.ts"; diff --git a/src/command/render/latexmk/latex.ts b/src/command/render/latexmk/latex.ts index 851624bc45d..77cb9ffdd33 100644 --- a/src/command/render/latexmk/latex.ts +++ b/src/command/render/latexmk/latex.ts @@ -5,7 +5,7 @@ */ import { basename, join } from "../../../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../deno_ral/fs.ts"; import { error, info } from "../../../deno_ral/log.ts"; import { PdfEngine } from "../../../config/types.ts"; diff --git a/src/command/render/latexmk/parse-error.ts b/src/command/render/latexmk/parse-error.ts index ea843107b3d..47f0ebb640b 100644 --- a/src/command/render/latexmk/parse-error.ts +++ b/src/command/render/latexmk/parse-error.ts @@ -5,7 +5,7 @@ */ import { basename, join } from "../../../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../deno_ral/fs.ts"; import * as ld from "../../../core/lodash.ts"; import { lines } from "../../../core/text.ts"; diff --git a/src/command/render/latexmk/pdf.ts b/src/command/render/latexmk/pdf.ts index a7b984d6526..81fdd746972 100644 --- a/src/command/render/latexmk/pdf.ts +++ b/src/command/render/latexmk/pdf.ts @@ -5,7 +5,7 @@ */ import { dirname, join } from "../../../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../deno_ral/fs.ts"; import { PdfEngine } from "../../../config/types.ts"; import { LatexmkOptions } from "./types.ts"; diff --git a/src/command/render/latexmk/quarto-latexmk.ts b/src/command/render/latexmk/quarto-latexmk.ts index fb947b9aa06..3f317e1301a 100644 --- a/src/command/render/latexmk/quarto-latexmk.ts +++ b/src/command/render/latexmk/quarto-latexmk.ts @@ -4,7 +4,7 @@ import { CompletionsCommand, HelpCommand, } from "cliffy/command/mod.ts"; -import { parse } from "flags/mod.ts"; +import { parse } from "flags"; import { appendLogOptions, diff --git a/src/command/render/output-tex.ts b/src/command/render/output-tex.ts index 1b29d1eb55e..ac09b70eb99 100644 --- a/src/command/render/output-tex.ts +++ b/src/command/render/output-tex.ts @@ -5,7 +5,7 @@ */ import { dirname, join, normalize, relative } from "../../deno_ral/path.ts"; -import { ensureDirSync } from "fs/mod.ts"; +import { ensureDirSync } from "../../deno_ral/fs.ts"; import { writeFileToStdout } from "../../core/console.ts"; import { dirAndStem, expandPath } from "../../core/path.ts"; diff --git a/src/command/render/output-typst.ts b/src/command/render/output-typst.ts index 439db9c6a77..f714e7b6fbf 100644 --- a/src/command/render/output-typst.ts +++ b/src/command/render/output-typst.ts @@ -5,7 +5,7 @@ */ import { dirname, join, normalize, relative } from "../../deno_ral/path.ts"; -import { ensureDirSync } from "fs/mod.ts"; +import { ensureDirSync } from "../../deno_ral/fs.ts"; import { kFontPaths, diff --git a/src/command/render/output.ts b/src/command/render/output.ts index 8c183a36de1..fdf2e1a0c40 100644 --- a/src/command/render/output.ts +++ b/src/command/render/output.ts @@ -16,9 +16,11 @@ import { import { writeFileToStdout } from "../../core/console.ts"; import { dirAndStem, expandPath } from "../../core/path.ts"; -import { partitionYamlFrontMatter } from "../../core/yaml.ts"; - -import { parse as parseYaml, stringify as stringifyYaml } from "yaml/mod.ts"; +import { + parse as parseYaml, + partitionYamlFrontMatter, + stringify as stringifyYaml, +} from "../../core/yaml.ts"; import { kOutputExt, diff --git a/src/command/render/pandoc-dependencies-html.ts b/src/command/render/pandoc-dependencies-html.ts index bd9063a9f74..0f98cd31455 100644 --- a/src/command/render/pandoc-dependencies-html.ts +++ b/src/command/render/pandoc-dependencies-html.ts @@ -31,7 +31,7 @@ import { } from "./pandoc-dependencies.ts"; import { fixupCssReferences, isCssFile } from "../../core/css.ts"; -import { ensureDirSync } from "fs/mod.ts"; +import { ensureDirSync } from "../../deno_ral/fs.ts"; import { ProjectContext } from "../../project/types.ts"; import { projectOutputDir } from "../../project/project-shared.ts"; import { insecureHash } from "../../core/hash.ts"; diff --git a/src/command/render/pandoc-dependencies-resources.ts b/src/command/render/pandoc-dependencies-resources.ts index 83e0e66c405..a9855080d8f 100644 --- a/src/command/render/pandoc-dependencies-resources.ts +++ b/src/command/render/pandoc-dependencies-resources.ts @@ -17,7 +17,7 @@ import { appendDependencies, FormatResourceDependency, } from "./pandoc-dependencies.ts"; -import { existsSync } from "fs/exists.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; export interface Resource { file: string; diff --git a/src/command/render/pandoc-html.ts b/src/command/render/pandoc-html.ts index 5743b80a66a..b07443fca2d 100644 --- a/src/command/render/pandoc-html.ts +++ b/src/command/render/pandoc-html.ts @@ -132,7 +132,7 @@ export async function resolveSassBundles( // First, Clean CSS cleanSourceMappingUrl(cssPath); // look for a sentinel 'dark' value, extract variables - const cssResult = processCssIntoExtras(cssPath, extras, temp); + const cssResult = await processCssIntoExtras(cssPath, extras, temp); cssPath = cssResult.path; // it can happen that processing generate an empty css file (e.g quarto-html deps with Quarto CSS variables) @@ -176,7 +176,9 @@ export async function resolveSassBundles( let targetName = target.name; if (target.attribs["append-hash"] === "true") { - const hashFragment = `-${md5HashBytes(Deno.readFileSync(cssPath))}`; + const hashFragment = `-${await md5HashBytes( + Deno.readFileSync(cssPath), + )}`; let extension = ""; if (target.name.endsWith(".min.css")) { extension = ".min.css"; @@ -365,7 +367,7 @@ async function resolveQuartoSyntaxHighlighting( existingDependency.stylesheets = existingDependency.stylesheets || []; - const hash = md5HashBytes(Deno.readFileSync(highlightCssPath)); + const hash = await md5HashBytes(Deno.readFileSync(highlightCssPath)); existingDependency.stylesheets.push({ name: cssFileName + `-${hash}.css`, path: highlightCssPath, @@ -461,11 +463,11 @@ interface CSSResult { } // Processes CSS into format extras (scanning for variables and removing them) -function processCssIntoExtras( +async function processCssIntoExtras( cssPath: string, extras: FormatExtras, temp: TempContext, -): CSSResult { +): Promise { extras.html = extras.html || {}; const css = Deno.readTextFileSync(cssPath); @@ -501,7 +503,7 @@ function processCssIntoExtras( if (cleanedCss.trim() === "") { newCssPath = undefined; } else { - const hash = md5HashBytes(new TextEncoder().encode(cleanedCss)); + const hash = await md5HashBytes(new TextEncoder().encode(cleanedCss)); newCssPath = temp.createFile({ suffix: `-${hash}.css` }); writeTextFileSyncPreserveMode(newCssPath, cleanedCss); } diff --git a/src/command/render/pandoc.ts b/src/command/render/pandoc.ts index e87e729d8bd..c5a69079ef5 100644 --- a/src/command/render/pandoc.ts +++ b/src/command/render/pandoc.ts @@ -8,10 +8,10 @@ import { basename, dirname, isAbsolute, join } from "../../deno_ral/path.ts"; import { info } from "../../deno_ral/log.ts"; -import { ensureDir, existsSync, expandGlobSync } from "fs/mod.ts"; +import { ensureDir, existsSync, expandGlobSync } from "../../deno_ral/fs.ts"; -import { stringify } from "yaml/mod.ts"; -import { encodeBase64 } from "encoding/base64.ts"; +import { stringify } from "../../core/yaml.ts"; +import { encodeBase64 } from "encoding/base64"; import * as ld from "../../core/lodash.ts"; diff --git a/src/command/render/project.ts b/src/command/render/project.ts index e9ca686dbe6..dc4aa8698f3 100644 --- a/src/command/render/project.ts +++ b/src/command/render/project.ts @@ -4,12 +4,12 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../../deno_ral/fs.ts"; import { dirname, isAbsolute, join, relative } from "../../deno_ral/path.ts"; import { info, warning } from "../../deno_ral/log.ts"; import { mergeProjectMetadata } from "../../config/metadata.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import { copyMinimal, copyTo } from "../../core/copy.ts"; import * as ld from "../../core/lodash.ts"; @@ -68,7 +68,7 @@ import { } from "../../project/project-shared.ts"; import { asArray } from "../../core/array.ts"; import { normalizePath } from "../../core/path.ts"; -import { isSubdir } from "fs/_is_subdir.ts"; +import { isSubdir } from "../../deno_ral/fs.ts"; import { Format } from "../../config/types.ts"; import { fileExecutionEngine } from "../../execute/engine.ts"; import { projectContextForDirectory } from "../../project/project-context.ts"; diff --git a/src/command/render/render-shared.ts b/src/command/render/render-shared.ts index c8d23dfc42f..6663d41bfcf 100644 --- a/src/command/render/render-shared.ts +++ b/src/command/render/render-shared.ts @@ -7,7 +7,7 @@ import { dirname } from "../../deno_ral/path.ts"; import { info } from "../../deno_ral/log.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import { projectContext, diff --git a/src/command/render/render.ts b/src/command/render/render.ts index 4fbb1e31403..195bdd693cf 100644 --- a/src/command/render/render.ts +++ b/src/command/render/render.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../../deno_ral/fs.ts"; import { dirname, isAbsolute, join, relative } from "../../deno_ral/path.ts"; diff --git a/src/command/render/template.ts b/src/command/render/template.ts index 4fe2922967b..c3a51669383 100644 --- a/src/command/render/template.ts +++ b/src/command/render/template.ts @@ -21,7 +21,7 @@ import { copyTo } from "../../core/copy.ts"; import { PandocOptions, RenderFlags } from "./types.ts"; import * as ld from "../../core/lodash.ts"; import { isHtmlDocOutput, isRevealjsOutput } from "../../config/format.ts"; -import { expandGlobSync } from "fs/mod.ts"; +import { expandGlobSync } from "../../deno_ral/fs.ts"; import { normalizePath } from "../../core/path.ts"; import { isGlob } from "../../core/lib/glob.ts"; import { ProjectContext } from "../../project/types.ts"; diff --git a/src/command/run/run.ts b/src/command/run/run.ts index 09530192bb9..8e355441e33 100644 --- a/src/command/run/run.ts +++ b/src/command/run/run.ts @@ -6,7 +6,7 @@ import { Command } from "cliffy/command/command.ts"; -import { existsSync } from "fs/exists.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { error } from "../../deno_ral/log.ts"; import { handlerForScript } from "../../core/run/run.ts"; import { exitWithCleanup } from "../../core/cleanup.ts"; diff --git a/src/command/serve/cmd.ts b/src/command/serve/cmd.ts index 0645879b9a8..8edc80215ea 100644 --- a/src/command/serve/cmd.ts +++ b/src/command/serve/cmd.ts @@ -6,7 +6,7 @@ import { Command } from "cliffy/command/mod.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import { error } from "../../deno_ral/log.ts"; import { initYamlIntelligenceResourcesFromFilesystem } from "../../core/schema/utils.ts"; import { projectContext } from "../../project/project-context.ts"; diff --git a/src/command/use/commands/binder/binder-utils.ts b/src/command/use/commands/binder/binder-utils.ts index 006f3a61085..db11ba87477 100644 --- a/src/command/use/commands/binder/binder-utils.ts +++ b/src/command/use/commands/binder/binder-utils.ts @@ -8,7 +8,7 @@ import { md5Hash } from "../../../../core/hash.ts"; import { projectScratchPath } from "../../../../project/project-scratch.ts"; import { info, warning } from "../../../../deno_ral/log.ts"; -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../../../../deno_ral/fs.ts"; import { dirname, join } from "../../../../deno_ral/path.ts"; import { Confirm } from "cliffy/prompt/mod.ts"; diff --git a/src/command/use/commands/binder/binder.ts b/src/command/use/commands/binder/binder.ts index 3986718424b..34e9c509401 100644 --- a/src/command/use/commands/binder/binder.ts +++ b/src/command/use/commands/binder/binder.ts @@ -12,7 +12,7 @@ import { rBinaryPath, resourcePath } from "../../../../core/resources.ts"; import SemVer from "semver/mod.ts"; import { extname, join } from "../../../../deno_ral/path.ts"; import { info, warning } from "../../../../deno_ral/log.ts"; -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../../../../deno_ral/fs.ts"; import { EnvironmentConfiguration, PythonConfiguration, diff --git a/src/command/use/commands/template.ts b/src/command/use/commands/template.ts index 83d4e031416..3bd1c40b6b8 100644 --- a/src/command/use/commands/template.ts +++ b/src/command/use/commands/template.ts @@ -11,7 +11,7 @@ import { import { info } from "../../../deno_ral/log.ts"; import { Confirm, Input } from "cliffy/prompt/mod.ts"; import { basename, dirname, join, relative } from "../../../deno_ral/path.ts"; -import { ensureDir, ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDir, ensureDirSync, existsSync } from "../../../deno_ral/fs.ts"; import { TempContext } from "../../../core/temp-types.ts"; import { downloadWithProgress } from "../../../core/download.ts"; import { withSpinner } from "../../../core/console.ts"; diff --git a/src/config/metadata.ts b/src/config/metadata.ts index b2871cb7ae3..3872718eee7 100644 --- a/src/config/metadata.ts +++ b/src/config/metadata.ts @@ -6,7 +6,7 @@ import * as ld from "../core/lodash.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { join } from "../deno_ral/path.ts"; import { error } from "../deno_ral/log.ts"; diff --git a/src/core/appdirs.ts b/src/core/appdirs.ts index 3f80d0bef52..d5ab8246930 100644 --- a/src/core/appdirs.ts +++ b/src/core/appdirs.ts @@ -5,7 +5,7 @@ */ import { join } from "../deno_ral/path.ts"; -import { ensureDirSync } from "fs/mod.ts"; +import { ensureDirSync } from "../deno_ral/fs.ts"; export function quartoDataDir(subdir?: string, roaming = false) { return quartoDir(userDataDir, subdir, roaming); diff --git a/src/core/console.ts b/src/core/console.ts index 7f90bf3814f..590e855479e 100644 --- a/src/core/console.ts +++ b/src/core/console.ts @@ -5,8 +5,8 @@ */ import { ansi } from "cliffy/ansi/mod.ts"; -import { writeAllSync } from "io/write_all.ts"; -import { readAllSync } from "io/read_all.ts"; +import { writeAllSync } from "io/write-all"; +import { readAllSync } from "io/read-all"; import { info } from "../deno_ral/log.ts"; import { runningInCI } from "./ci-info.ts"; import { SpinnerOptions } from "./console-types.ts"; diff --git a/src/core/container.ts b/src/core/container.ts index f7cec6d755b..c9b7d0fb6a6 100644 --- a/src/core/container.ts +++ b/src/core/container.ts @@ -4,10 +4,8 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { walkSync } from "fs/walk.ts"; - +import { existsSync, walkSync } from "../deno_ral/fs.ts"; import { basename, join } from "../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; // REES Compatible execution files // from https://repo2docker.readthedocs.io/en/latest/config_files.html#config-files diff --git a/src/core/copy.ts b/src/core/copy.ts index e3c1f7b31f9..a05636cddce 100644 --- a/src/core/copy.ts +++ b/src/core/copy.ts @@ -12,9 +12,14 @@ import { resolve, } from "../deno_ral/path.ts"; -import { CopyOptions, ensureDirSync, existsSync, walkSync } from "fs/mod.ts"; -import { getFileInfoType } from "fs/_get_file_info_type.ts"; -import { isSubdir } from "fs/_is_subdir.ts"; +import { + CopyOptions, + ensureDirSync, + existsSync, + getFileInfoType, + isSubdir, + walkSync, +} from "../deno_ral/fs.ts"; import { isWindows } from "./platform.ts"; diff --git a/src/core/cri/cri.ts b/src/core/cri/cri.ts index 0b73cc6c9f0..e35b375f0c3 100644 --- a/src/core/cri/cri.ts +++ b/src/core/cri/cri.ts @@ -6,7 +6,7 @@ * Copyright (c) 2022 Posit Software, PBC. */ -import { decodeBase64 as decode } from "encoding/base64.ts"; +import { decodeBase64 as decode } from "encoding/base64"; import cdp from "./deno-cri/index.js"; import { getBrowserExecutablePath } from "../puppeteer.ts"; import { Semaphore } from "../lib/semaphore.ts"; diff --git a/src/core/css.ts b/src/core/css.ts index c1df43da0fd..dc51c800321 100644 --- a/src/core/css.ts +++ b/src/core/css.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { dirname, extname, join } from "../deno_ral/path.ts"; import { isFileRef } from "./http.ts"; import { normalizePath } from "./path.ts"; diff --git a/src/core/dart-sass.ts b/src/core/dart-sass.ts index 20f67d9319c..32bdc368c17 100644 --- a/src/core/dart-sass.ts +++ b/src/core/dart-sass.ts @@ -10,7 +10,7 @@ import { execProcess } from "./process.ts"; import { TempContext } from "./temp.ts"; import { lines } from "./text.ts"; import { debug, info } from "../deno_ral/log.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { warnOnce } from "./log.ts"; export function dartSassInstallDir() { diff --git a/src/core/data-url.ts b/src/core/data-url.ts index 2c30a11fcfc..80ba56c81aa 100644 --- a/src/core/data-url.ts +++ b/src/core/data-url.ts @@ -1,4 +1,4 @@ -import { encode as base64Encode } from "encoding/base64.ts"; +import { encode as base64Encode } from "encoding/base64"; export function asDataUrl( content: string | ArrayBuffer, diff --git a/src/core/date.ts b/src/core/date.ts index bcb9099e760..99f699e2cc4 100644 --- a/src/core/date.ts +++ b/src/core/date.ts @@ -5,7 +5,7 @@ */ import momentGuess from "moment-guess"; -import { parse } from "datetime/mod.ts"; +import { parse } from "datetime/parse"; import dayjs from "dayjs/dayjs.min.js"; import advancedPlugin from "../resources/library/dayjs/plugins/advanced.js"; import timezonePlugin from "../resources/library/dayjs/plugins/timezone.js"; @@ -13,8 +13,8 @@ import utcPlugin from "../resources/library/dayjs/plugins/utc.js"; import isoWeekPlugin from "../resources/library/dayjs/plugins/isoweek.js"; import weekOfYearPlugin from "../resources/library/dayjs/plugins/weekofyear.js"; import weekYearPlugin from "../resources/library/dayjs/plugins/weekyear.js"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { toFileUrl } from "../deno_ral/path.ts"; import { resourcePath } from "./resources.ts"; diff --git a/src/core/deno-dom.ts b/src/core/deno-dom.ts index 980e02fe49a..98371ca3675 100644 --- a/src/core/deno-dom.ts +++ b/src/core/deno-dom.ts @@ -44,6 +44,7 @@ export async function writeDomToHtmlFile( // 2022-08-26: cscheid changed this to match commit a69551336f37cd4010032e039231d926e1a4774c // 2023-02-06: jjallaire confirmed that this is up to date as of commit e18ab07fd6e23f1e32ffd77fb4c0f92fadb81b87 +// 2024-09-23: cscheid changed this to match commit a84e6057d367282efdf3f1a1f80c3f0982252ffa let s_DenoDomInitialized = false; export async function initDenoDom() { @@ -63,7 +64,7 @@ export async function initDenoDom() { result: "void", }, deno_dom_parse_frag_sync: { - parameters: ["buffer", "usize", "buffer"], + parameters: ["buffer", "usize", "buffer", "usize", "buffer"], result: "void", }, deno_dom_is_big_endian: { parameters: [], result: "u32" }, @@ -95,16 +96,43 @@ export async function initDenoDom() { const returnBufSizeLenRaw = new ArrayBuffer(usizeBytes * 2); const returnBufSizeLen = new Uint8Array(returnBufSizeLenRaw); + type DocumentParser = ( + srcBuf: Uint8Array, + srcLength: bigint, + returnBuf: Uint8Array, + ) => void; + type FragmentParser = ( + srcBuf: Uint8Array, + srcLength: bigint, + contextLocalNameBuf: Uint8Array, + contextLocalNameLength: bigint, + returnBuf: Uint8Array, + ) => void; + const genericParse = ( - parser: ( - srcBuf: Uint8Array, - srcLength: number, - returnBuf: Uint8Array, - ) => void, + parser: DocumentParser | FragmentParser, srcHtml: string, + contextLocalName?: string, ): string => { const encodedHtml = utf8Encoder.encode(srcHtml); - parser(encodedHtml, encodedHtml.length, returnBufSizeLen); + if (contextLocalName) { + const encodedContextLocalName = utf8Encoder.encode( + contextLocalName, + ); + (parser as FragmentParser)( + encodedHtml, + BigInt(encodedHtml.length), + encodedContextLocalName, + BigInt(encodedContextLocalName.length), + returnBufSizeLen, + ); + } else { + (parser as DocumentParser)( + encodedHtml, + BigInt(encodedHtml.length), + returnBufSizeLen, + ); + } const outBufSize = Number( new DataView(returnBufSizeLenRaw).getBigUint64(0, !isBigEndian), @@ -122,8 +150,8 @@ export async function initDenoDom() { return genericParse(dylibParseSync, html); }; - const parseFrag = (html: string): string => { - return genericParse(dylibParseFragSync, html); + const parseFrag = (html: string, contextLocalName?: string): string => { + return genericParse(dylibParseFragSync, html, contextLocalName); }; debug("Loaded deno-dom-native"); diff --git a/src/core/deno/expand-glob.ts b/src/core/deno/expand-glob.ts index 81d9752c979..59677ef03d9 100644 --- a/src/core/deno/expand-glob.ts +++ b/src/core/deno/expand-glob.ts @@ -1,17 +1,16 @@ /* -* expand-glob.ts -* -* Copyright (C) 2023 Posit Software, PBC -* -* Fixed version of expandGlob, expandGlobSync (https://github.com/denoland/deno_std/issues/3099) -* -*/ + * expand-glob.ts + * + * Copyright (C) 2023 Posit Software, PBC + * + * Fixed version of expandGlob, expandGlobSync (https://github.com/denoland/deno_std/issues/3099) + */ import { expandGlob as badExpandGlob, ExpandGlobOptions, expandGlobSync as badExpandGlobSync, -} from "fs/mod.ts"; +} from "../../deno_ral/fs.ts"; export function expandGlobSync( glob: string, diff --git a/src/core/devconfig.ts b/src/core/devconfig.ts index 4ab0f9176bc..5b9afb7b61f 100644 --- a/src/core/devconfig.ts +++ b/src/core/devconfig.ts @@ -6,7 +6,7 @@ import { error, info } from "../deno_ral/log.ts"; import { join } from "../deno_ral/path.ts"; -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../deno_ral/fs.ts"; import { md5Hash } from "./hash.ts"; diff --git a/src/core/download.ts b/src/core/download.ts index 03a38e7cd3d..88608169f3c 100644 --- a/src/core/download.ts +++ b/src/core/download.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { writeAll } from "io/write_all.ts"; +import { writeAll } from "io/write-all"; import { progressBar } from "./console.ts"; export interface DownloadError extends Error { diff --git a/src/core/encode-metadata.ts b/src/core/encode-metadata.ts index 320ef65fdc8..35de3596239 100644 --- a/src/core/encode-metadata.ts +++ b/src/core/encode-metadata.ts @@ -1,10 +1,9 @@ /* -* encode-metadata.ts -* -* Copyright (C) 2022 Posit Software, PBC -* -*/ -import { encode as base64Encode } from "encoding/base64.ts"; + * encode-metadata.ts + * + * Copyright (C) 2022 Posit Software, PBC + */ +import { encode as base64Encode } from "encoding/base64"; export function encodeMetadata( metadata: Record, diff --git a/src/core/file.ts b/src/core/file.ts index baa3cafe1b5..3e2447bbac1 100644 --- a/src/core/file.ts +++ b/src/core/file.ts @@ -4,9 +4,9 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { execProcess } from "./process.ts"; -import { TextLineStream } from "streams/mod.ts"; +import { TextLineStream } from "streams/text-line-stream"; export function existsSync1(s: string | URL) { // eat all but the first param to work in map, filter, find, etc. diff --git a/src/core/github.ts b/src/core/github.ts index fdaeda10b2a..4777353d619 100644 --- a/src/core/github.ts +++ b/src/core/github.ts @@ -8,7 +8,7 @@ import { which } from "./path.ts"; import { execProcess } from "./process.ts"; import { join } from "../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { isHttpUrl } from "./url.ts"; import { GitHubContext } from "./github-types.ts"; import { gitBranchExists } from "./git.ts"; diff --git a/src/core/handlers/base.ts b/src/core/handlers/base.ts index 779ac37e9a3..9cbb1593e08 100644 --- a/src/core/handlers/base.ts +++ b/src/core/handlers/base.ts @@ -75,7 +75,7 @@ import { resolve, } from "../../deno_ral/path.ts"; import { figuresDir, inputFilesDir } from "../render.ts"; -import { ensureDirSync } from "fs/mod.ts"; +import { ensureDirSync } from "../../deno_ral/fs.ts"; import { mappedStringFromFile } from "../mapped-text.ts"; import { error } from "../../deno_ral/log.ts"; import { withCriClient } from "../cri/cri.ts"; diff --git a/src/core/hash.ts b/src/core/hash.ts index 709dc3a5c88..9db01d9f79c 100644 --- a/src/core/hash.ts +++ b/src/core/hash.ts @@ -4,15 +4,15 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { crypto } from "crypto/mod.ts"; +import { crypto } from "crypto/crypto"; import blueimpMd5 from "blueimpMd5"; export function md5Hash(content: string) { return blueimpMd5(content); } -export function md5HashBytes(content: Uint8Array) { - const buffer = crypto.subtle.digestSync( +export async function md5HashBytes(content: Uint8Array) { + const buffer = await crypto.subtle.digest( "MD5", content, ); diff --git a/src/core/http.ts b/src/core/http.ts index e84bc220988..c948b555e83 100644 --- a/src/core/http.ts +++ b/src/core/http.ts @@ -4,11 +4,11 @@ * Copyright (C) 2020-2023 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { basename, extname, join, normalize, posix } from "../deno_ral/path.ts"; import { error, info } from "../deno_ral/log.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import { contentType, diff --git a/src/core/image.ts b/src/core/image.ts index e92dc20da2b..6ea8eb07ac3 100644 --- a/src/core/image.ts +++ b/src/core/image.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/exists.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { extname } from "../deno_ral/path.ts"; import PngImage from "./png.ts"; diff --git a/src/core/jupyter/capabilities.ts b/src/core/jupyter/capabilities.ts index 8f25bcee475..57b02c81fdd 100644 --- a/src/core/jupyter/capabilities.ts +++ b/src/core/jupyter/capabilities.ts @@ -5,7 +5,7 @@ */ import { isAbsolute, join } from "../../deno_ral/path.ts"; -import { existsSync, expandGlobSync } from "fs/mod.ts"; +import { existsSync, expandGlobSync } from "../../deno_ral/fs.ts"; import { isWindows } from "../platform.ts"; import { execProcess } from "../process.ts"; diff --git a/src/core/jupyter/filtered-notebook-cache.ts b/src/core/jupyter/filtered-notebook-cache.ts index 721b77b2523..1b08b4dd5d3 100644 --- a/src/core/jupyter/filtered-notebook-cache.ts +++ b/src/core/jupyter/filtered-notebook-cache.ts @@ -1,12 +1,10 @@ /* -* filtered-notebook-cache.ts -* -* Copyright (C) 2022 Posit Software, PBC -* -*/ - -import { existsSync } from "fs/exists.ts"; -import { ensureDirSync } from "fs/mod.ts"; + * filtered-notebook-cache.ts + * + * Copyright (C) 2022 Posit Software, PBC + */ + +import { ensureDirSync, existsSync } from "../../deno_ral/fs.ts"; import { dirname, isAbsolute, join } from "../../deno_ral/path.ts"; import { parseShellRunCommand } from "../../core/run/shell.ts"; diff --git a/src/core/jupyter/jupyter-filters.ts b/src/core/jupyter/jupyter-filters.ts index d84e40b23ac..a91c5357c38 100644 --- a/src/core/jupyter/jupyter-filters.ts +++ b/src/core/jupyter/jupyter-filters.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/exists.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { basename, dirname, isAbsolute, join } from "../../deno_ral/path.ts"; import { kIpynbFilters } from "../../config/constants.ts"; import { Format } from "../../config/types.ts"; diff --git a/src/core/jupyter/jupyter-fixups.ts b/src/core/jupyter/jupyter-fixups.ts index 780a263ebe3..de0bbe32577 100644 --- a/src/core/jupyter/jupyter-fixups.ts +++ b/src/core/jupyter/jupyter-fixups.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2023 Posit Software, PBC */ -import { stringify } from "yaml/mod.ts"; +import { stringify } from "../yaml.ts"; import { warning } from "../../deno_ral/log.ts"; import { kTitle } from "../../config/constants.ts"; diff --git a/src/core/jupyter/jupyter-shared.ts b/src/core/jupyter/jupyter-shared.ts index 4fb3084b075..a7912f145a8 100644 --- a/src/core/jupyter/jupyter-shared.ts +++ b/src/core/jupyter/jupyter-shared.ts @@ -4,9 +4,9 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ import { join } from "../../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import { pathWithForwardSlashes } from "../path.ts"; diff --git a/src/core/jupyter/jupyter.ts b/src/core/jupyter/jupyter.ts index f246c0a4e35..30b4316d014 100644 --- a/src/core/jupyter/jupyter.ts +++ b/src/core/jupyter/jupyter.ts @@ -6,12 +6,11 @@ // deno-lint-ignore-file camelcase -import { ensureDirSync } from "fs/ensure_dir.ts"; +import { ensureDirSync, walkSync } from "../../deno_ral/fs.ts"; import { dirname, extname, join, relative } from "../../deno_ral/path.ts"; -import { walkSync } from "fs/walk.ts"; -import * as colors from "fmt/colors.ts"; -import { decodeBase64 as base64decode } from "encoding/base64.ts"; -import { DumpOptions as StringifyOptions, stringify } from "yaml/mod.ts"; +import * as colors from "fmt/colors"; +import { decodeBase64 as base64decode } from "encoding/base64"; +import { stringify } from "../yaml.ts"; import { partitionCellOptions } from "../lib/partition-cell-options.ts"; import * as ld from "../lodash.ts"; @@ -156,7 +155,7 @@ import { import { convertToHtmlSpans, hasAnsiEscapeCodes } from "../ansi-colors.ts"; import { kProjectType, ProjectContext } from "../../project/types.ts"; import { mergeConfigs } from "../config.ts"; -import { encodeBase64 } from "encoding/base64.ts"; +import { encodeBase64 } from "encoding/base64"; import { isHtmlOutput, isIpynbOutput, @@ -934,7 +933,8 @@ export function jupyterCellWithOptions( export function jupyterCellOptionsAsComment( language: string, options: Record, - stringifyOptions?: StringifyOptions, + // deno-lint-ignore no-explicit-any + stringifyOptions?: any, ) { if (Object.keys(options).length > 0) { const cellYaml = stringify(options, { diff --git a/src/core/jupyter/kernels.ts b/src/core/jupyter/kernels.ts index 21b0ed9e3c0..69ca4d152b2 100644 --- a/src/core/jupyter/kernels.ts +++ b/src/core/jupyter/kernels.ts @@ -5,7 +5,7 @@ */ import { basename, join } from "../../deno_ral/path.ts"; -import { existsSync, walkSync } from "fs/mod.ts"; +import { existsSync, walkSync } from "../../deno_ral/fs.ts"; import { debug } from "../../deno_ral/log.ts"; diff --git a/src/core/jupyter/venv.ts b/src/core/jupyter/venv.ts index 1b591226c19..65f5700c5db 100644 --- a/src/core/jupyter/venv.ts +++ b/src/core/jupyter/venv.ts @@ -1,14 +1,13 @@ /* -* venv.ts -* -* Copyright (C) 2020-2022 Posit Software, PBC -* -*/ + * venv.ts + * + * Copyright (C) 2020-2022 Posit Software, PBC + */ import { info } from "../../deno_ral/log.ts"; import { join } from "../../deno_ral/path.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import * as ld from "../lodash.ts"; diff --git a/src/core/knitr.ts b/src/core/knitr.ts index b539ef37c07..cdbc01e24fe 100644 --- a/src/core/knitr.ts +++ b/src/core/knitr.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import { execProcess } from "./process.ts"; import { rBinaryPath, resourcePath } from "./resources.ts"; @@ -48,7 +48,11 @@ export async function checkRBinary() { stderr: "piped", }); // Before R4.2.3, the output version information is printed to stderr - if (result.success && (result.stdout || /R scripting front-end version/.test(result.stderr ?? ''))) { + if ( + result.success && + (result.stdout || + /R scripting front-end version/.test(result.stderr ?? "")) + ) { debug(`\n++R found at ${rBin} is working.`); return rBin; } else { diff --git a/src/core/language.ts b/src/core/language.ts index e7b24379011..52f3d39294f 100644 --- a/src/core/language.ts +++ b/src/core/language.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync, expandGlobSync } from "fs/mod.ts"; +import { existsSync, expandGlobSync } from "../deno_ral/fs.ts"; import { extname, join } from "../deno_ral/path.ts"; import { diff --git a/src/core/lib/external/colors.ts b/src/core/lib/external/colors.ts index 23914d8a730..05d151d6544 100644 --- a/src/core/lib/external/colors.ts +++ b/src/core/lib/external/colors.ts @@ -11,7 +11,7 @@ /** * ```ts - * import { bgBlue, red, bold } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts"; + * import { bgBlue, red, bold } from "https://deno.land/std@$STD_VERSION/fmt/colors"; * console.log(bgBlue(red(bold("Hello world!")))); * ``` * diff --git a/src/core/log.ts b/src/core/log.ts index e8763321b78..0661ce9831d 100644 --- a/src/core/log.ts +++ b/src/core/log.ts @@ -4,17 +4,17 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { ensureDirSync } from "fs/mod.ts"; +import { ensureDirSync } from "../deno_ral/fs.ts"; import { dirname } from "../deno_ral/path.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import * as log from "../deno_ral/log.ts"; -import { LogRecord } from "log/logger.ts"; -import { BaseHandler } from "log/base_handler.ts"; -import { FileHandler } from "log/file_handler.ts"; +import { LogRecord } from "log/logger"; +import { BaseHandler } from "log/base-handler"; +import { FileHandler } from "log/file-handler"; import { Command } from "cliffy/command/mod.ts"; import { getenv } from "./env.ts"; -import { Args } from "flags/mod.ts"; +import { Args } from "flags"; import { lines } from "./text.ts"; import { debug, error, getLogger, setup, warning } from "../deno_ral/log.ts"; import { asErrorEx, InternalError } from "./lib/error.ts"; @@ -186,12 +186,20 @@ export class LogEventsHandler extends StdErrOutputHandler { } export class LogFileHandler extends FileHandler { + logger: FileHandler; constructor(levelName: log.LevelName, options: LogFileHandlerOptions) { super(levelName, options); + this.logger = new FileHandler(levelName, options); + this.logger.setup(); this.msgFormat = options.format; + this.logger.formatter = this.format.bind(this); } msgFormat; + flush(): void { + this.logger.flush(); + } + format(logRecord: LogRecord): string { // Messages that start with a carriage return are progress messages // that rewrite a line, so just ignore these @@ -229,19 +237,7 @@ export class LogFileHandler extends FileHandler { async log(msg: string) { // Ignore any messages that are blank if (msg !== "") { - // Strip any color information that may have been applied - msg = colors.stripColor(msg); - if (!this._file) { - throw new Error("Internal error: logging file not open"); - } - let buf = this._encoder.encode(msg); - let total = 0; - while (total < buf.length) { - const offset = this._file.writeSync(buf); - total += offset; - buf = buf.subarray(offset); - } - Deno.fsyncSync(this._file.rid); + this.logger.log(msg); } } } @@ -252,7 +248,15 @@ interface LogFileHandlerOptions { format?: "plain" | "json-stream"; } -export async function initializeLogger(logOptions: LogOptions) { +export function flushLoggers(handlers: Record) { + if (handlers["file"]) { + (handlers["file"] as LogFileHandler).flush(); + } +} + +export async function initializeLogger( + logOptions: LogOptions, +): Promise> { const handlers: Record = {}; const defaultHandlers = []; const file = logOptions.log; @@ -299,6 +303,8 @@ export async function initializeLogger(logOptions: LogOptions) { }); onCleanup(cleanupLogger); + + return handlers; } export async function cleanupLogger() { diff --git a/src/core/main.ts b/src/core/main.ts index bf9ffaeffce..a37cc49d319 100644 --- a/src/core/main.ts +++ b/src/core/main.ts @@ -7,8 +7,8 @@ */ import { initializeLogger, logError, logOptions } from "../../src/core/log.ts"; -import { Args } from "flags/mod.ts"; -import { parse } from "flags/mod.ts"; +import { Args } from "flags"; +import { parse } from "flags"; import { exitWithCleanup } from "./cleanup.ts"; import { captureFileReads, diff --git a/src/core/path.ts b/src/core/path.ts index 0c691ae031f..75331568464 100644 --- a/src/core/path.ts +++ b/src/core/path.ts @@ -9,18 +9,16 @@ import { dirname, extname, fromFileUrl, + globToRegExp, isAbsolute, + isGlob, join, normalize, } from "../deno_ral/path.ts"; -import { globToRegExp } from "path/glob_to_regexp.ts"; -import { isGlob } from "path/mod.ts"; - import { warning } from "../deno_ral/log.ts"; -import { existsSync } from "fs/exists.ts"; -import { expandGlobSync } from "fs/expand_glob.ts"; +import { existsSync, expandGlobSync } from "../deno_ral/fs.ts"; import * as ld from "./lodash.ts"; diff --git a/src/core/previewurl.ts b/src/core/previewurl.ts index 935131b33e0..9e34c6c0c67 100644 --- a/src/core/previewurl.ts +++ b/src/core/previewurl.ts @@ -5,7 +5,7 @@ */ import { info } from "../deno_ral/log.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import { isJupyterHubServer, diff --git a/src/core/process.ts b/src/core/process.ts index c21c6ca6721..0787993bf59 100644 --- a/src/core/process.ts +++ b/src/core/process.ts @@ -4,8 +4,8 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { MuxAsyncIterator, pooledMap } from "async/mod.ts"; -import { iterateReader } from "streams/mod.ts"; +import { MuxAsyncIterator, pooledMap } from "async"; +import { iterateReader } from "io/iterate-reader"; import { debug, info } from "../deno_ral/log.ts"; import { onCleanup } from "./cleanup.ts"; import { ProcessResult } from "./process-types.ts"; diff --git a/src/core/puppeteer.ts b/src/core/puppeteer.ts index 31e1a860e87..6a1934ba89a 100644 --- a/src/core/puppeteer.ts +++ b/src/core/puppeteer.ts @@ -7,7 +7,7 @@ import { readRegistryKey } from "./windows.ts"; import { safeExistsSync, which } from "./path.ts"; import { error, info } from "../deno_ral/log.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { UnreachableError } from "./lib/error.ts"; import { quartoDataDir } from "./appdirs.ts"; diff --git a/src/core/quarto.ts b/src/core/quarto.ts index 9292b13fd4a..1ad9799ca0a 100644 --- a/src/core/quarto.ts +++ b/src/core/quarto.ts @@ -3,11 +3,11 @@ * * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/exists.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { extname, join } from "../deno_ral/path.ts"; import { info } from "../deno_ral/log.ts"; -import * as colors from "fmt/colors.ts"; -import { load as config, LoadOptions as ConfigOptions } from "dotenv/mod.ts"; +import * as colors from "fmt/colors"; +import { load as config, LoadOptions as ConfigOptions } from "dotenv"; import { getenv } from "./env.ts"; import { exitWithCleanup } from "./cleanup.ts"; diff --git a/src/core/resources.ts b/src/core/resources.ts index 977a6a762c0..6ec52c1338f 100644 --- a/src/core/resources.ts +++ b/src/core/resources.ts @@ -4,8 +4,8 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { debug, warning } from "../deno_ral/log.ts"; -import { existsSync, walkSync } from "fs/mod.ts"; +import { debug } from "../deno_ral/log.ts"; +import { existsSync, walkSync } from "../deno_ral/fs.ts"; import { dirname, join } from "../deno_ral/path.ts"; import { warnOnce } from "./log.ts"; import { safeExistsSync, which } from "./path.ts"; diff --git a/src/core/run/deno.ts b/src/core/run/deno.ts index fced5088cac..96111b4de6b 100644 --- a/src/core/run/deno.ts +++ b/src/core/run/deno.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync, expandGlobSync } from "fs/mod.ts"; +import { existsSync, expandGlobSync } from "../../deno_ral/fs.ts"; import { extname, join, normalize } from "../../deno_ral/path.ts"; import { quartoCacheDir } from "../appdirs.ts"; import { execProcess } from "../process.ts"; diff --git a/src/core/sass.ts b/src/core/sass.ts index 290badd0087..0de99a872a7 100644 --- a/src/core/sass.ts +++ b/src/core/sass.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { join } from "../deno_ral/path.ts"; import { quartoCacheDir } from "./appdirs.ts"; @@ -155,7 +155,7 @@ export async function compileSass( loadPaths, temp, minified, - md5HashBytes(new TextEncoder().encode(scssInput)), + await md5HashBytes(new TextEncoder().encode(scssInput)), ); if (failed) { diff --git a/src/core/schema/types-from-schema.ts b/src/core/schema/types-from-schema.ts index eca9bb57e7d..5e0f216356d 100644 --- a/src/core/schema/types-from-schema.ts +++ b/src/core/schema/types-from-schema.ts @@ -17,7 +17,7 @@ itself run. */ -import { parse } from "yaml/mod.ts"; +import { parse } from "../yaml.ts"; import { toCapitalizationCase } from "../lib/text.ts"; import { capitalizeWord as capitalize } from "../text.ts"; import { join } from "../../deno_ral/path.ts"; @@ -38,7 +38,7 @@ export const generatedSrcMessage = // If you find yourself trying to rebuild types and \`quarto build-js\` won't run because // of bad type definitions, run the following: // $ cd $QUARTO_ROOT -// $ ./package/dist/bin/tools/deno run --importmap=./src/dev_import_map.json --allow-all ./package/src/common/create-schema-types.ts ./src/resources +// $ ./package/dist/bin/tools/deno run --importmap=./src/import_map.json --allow-all ./package/src/common/create-schema-types.ts ./src/resources export type MaybeArrayOf = (T | T[]); export type JsonObject = { [key: string]: unknown }; diff --git a/src/core/schema/utils.ts b/src/core/schema/utils.ts index df290f81a7a..18811062bcb 100644 --- a/src/core/schema/utils.ts +++ b/src/core/schema/utils.ts @@ -1,11 +1,10 @@ /* -* utils.ts -* -* Copyright (C) 2021-2022 Posit Software, PBC -* -*/ + * utils.ts + * + * Copyright (C) 2021-2022 Posit Software, PBC + */ -import { toFileUrl, join } from "../../deno_ral/path.ts"; +import { join, toFileUrl } from "../../deno_ral/path.ts"; import { resourcePath } from "../resources.ts"; import { initTreeSitter } from "./deno-init-tree-sitter.ts"; import { initYamlIntelligence } from "../lib/yaml-intelligence/yaml-intelligence.ts"; @@ -21,7 +20,7 @@ export async function initYamlIntelligenceResourcesFromFilesystem() { resourcePath("editor/tools/yaml/yaml-intelligence-resources.json"), ).href, { - assert: { type: "json" }, + with: { type: "json" }, } )).default as Record; diff --git a/src/core/schema/validated-yaml.ts b/src/core/schema/validated-yaml.ts index 74a2e740c64..35a4e450891 100644 --- a/src/core/schema/validated-yaml.ts +++ b/src/core/schema/validated-yaml.ts @@ -6,7 +6,7 @@ * Copyright (C) 2021-2022 Posit Software, PBC */ -import { existsSync } from "fs/exists.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { asMappedString } from "../mapped-text.ts"; import { Schema } from "../lib/yaml-schema/types.ts"; import { relative } from "../../deno_ral/path.ts"; diff --git a/src/core/temp.ts b/src/core/temp.ts index 214c55c5b0b..0dd33d7c9ff 100644 --- a/src/core/temp.ts +++ b/src/core/temp.ts @@ -6,7 +6,7 @@ import { debug, info } from "../deno_ral/log.ts"; import { join } from "../deno_ral/path.ts"; -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../deno_ral/fs.ts"; import { normalizePath, removeIfExists, safeRemoveIfExists } from "./path.ts"; import { TempContext } from "./temp-types.ts"; diff --git a/src/core/text.ts b/src/core/text.ts index f8ca1fe5e51..03bb84888a1 100644 --- a/src/core/text.ts +++ b/src/core/text.ts @@ -1,12 +1,11 @@ /* -* text.ts -* -* Copyright (C) 2020-2022 Posit Software, PBC -* -*/ - -import { sprintf } from "fmt/printf.ts"; -import { rgb24 } from "fmt/colors.ts"; + * text.ts + * + * Copyright (C) 2020-2022 Posit Software, PBC + */ + +import { sprintf } from "fmt/printf"; +import { rgb24 } from "fmt/colors"; import { lines } from "./lib/text.ts"; diff --git a/src/core/typst.ts b/src/core/typst.ts index ec2fcd6a7a7..2eb741e1a2f 100644 --- a/src/core/typst.ts +++ b/src/core/typst.ts @@ -6,7 +6,7 @@ import { error, info } from "../deno_ral/log.ts"; import { basename } from "../deno_ral/path.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import { satisfies } from "semver/mod.ts"; diff --git a/src/core/watch.ts b/src/core/watch.ts index b040252ff3f..32c27e81b2f 100644 --- a/src/core/watch.ts +++ b/src/core/watch.ts @@ -1,11 +1,10 @@ /* -* watch.ts -* -* Copyright (C) 2020-2022 Posit Software, PBC -* -*/ + * watch.ts + * + * Copyright (C) 2020-2022 Posit Software, PBC + */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { error } from "../deno_ral/log.ts"; import { sleep } from "./async.ts"; diff --git a/src/core/windows.ts b/src/core/windows.ts index 68b43376575..8ed9c990c7f 100644 --- a/src/core/windows.ts +++ b/src/core/windows.ts @@ -3,7 +3,7 @@ * * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { join } from "../deno_ral/path.ts"; import { quartoCacheDir } from "./appdirs.ts"; import { removeIfExists } from "./path.ts"; diff --git a/src/core/yaml.ts b/src/core/yaml.ts index 3394efc3177..837aac8c98d 100644 --- a/src/core/yaml.ts +++ b/src/core/yaml.ts @@ -4,10 +4,9 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/exists.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { extname } from "../deno_ral/path.ts"; -import { parse } from "yaml/mod.ts"; import { lines, matchAll, normalizeNewlines } from "./text.ts"; import { ErrorEx } from "./lib/error.ts"; import { getFrontMatterSchema } from "./lib/yaml-schema/front-matter.ts"; @@ -29,10 +28,16 @@ import { /// YAML schema imports -import { Schema } from "yaml/schema.ts"; -import { Type } from "yaml/type.ts"; -import { bool, float, int, nil } from "yaml/_type/mod.ts"; -import { failsafe } from "yaml/schema/failsafe.ts"; +import { Schema } from "yaml"; +import { types } from "yaml"; +const { bool, float, int, null: nil } = types; +import { Type } from "yaml"; +import { FAILSAFE_SCHEMA } from "yaml"; +import { load } from "yaml"; +import { dump } from "yaml"; + +export const stringify = dump; +export const parse = load; const kRegExBeginYAML = /^---[ \t]*$/; const kRegExEndYAML = /^(?:---|\.\.\.)([ \t]*)$/; @@ -261,13 +266,15 @@ export class YAMLValidationError extends ErrorEx { // Standard YAML's JSON schema + an expr tag handler () // http://www.yaml.org/spec/1.2/spec.html#id2803231 + export const QuartoJSONSchema = new Schema({ implicit: [nil, bool, int, float], - include: [failsafe], + include: [FAILSAFE_SCHEMA], explicit: [ new Type("!expr", { kind: "scalar", - construct(data): Record { + // deno-lint-ignore no-explicit-any + construct(data: any): Record { const result: string = data !== null ? data : ""; return { value: result, diff --git a/src/core/zip.ts b/src/core/zip.ts index 8defb302b4d..0e1bdeae3fd 100644 --- a/src/core/zip.ts +++ b/src/core/zip.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ import { dirname } from "../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { isWindows } from "./platform.ts"; import { execProcess } from "./process.ts"; import { safeWindowsExec } from "./windows.ts"; diff --git a/src/deno_ral/encoding.ts b/src/deno_ral/encoding.ts index 2d30c8e1b65..6ab2e48b2c1 100644 --- a/src/deno_ral/encoding.ts +++ b/src/deno_ral/encoding.ts @@ -4,4 +4,4 @@ * Copyright (C) 2020-2024 Posit Software, PBC */ -export { decodeBase64, encodeBase64 } from "encoding/base64.ts"; +export { decodeBase64, encodeBase64 } from "encoding/base64"; diff --git a/src/deno_ral/fs.ts b/src/deno_ral/fs.ts index 002ea499ac6..ca640075c98 100644 --- a/src/deno_ral/fs.ts +++ b/src/deno_ral/fs.ts @@ -4,4 +4,73 @@ * Copyright (C) 2020-2024 Posit Software, PBC */ -export { ensureDirSync, existsSync } from "fs/mod.ts"; +import { fromFileUrl } from "./path.ts"; +import { resolve, SEP as SEPARATOR } from "./path.ts"; + +export { ensureDir, ensureDirSync } from "fs/ensure-dir"; +export { existsSync } from "fs/exists"; +export { walk, walkSync } from "fs/walk"; +export { expandGlob, expandGlobSync } from "fs/expand-glob"; +export type { ExpandGlobOptions } from "fs/expand-glob"; +export { EOL, format, LF } from "fs/eol"; +export { copy, copySync } from "fs/copy"; +export type { CopyOptions } from "fs/copy"; +export { moveSync } from "fs/move"; +export { emptyDirSync } from "fs/empty-dir"; +export type { WalkEntry } from "fs/walk"; + +// It looks like these exports disappeared when Deno moved to JSR? :( +// from https://jsr.io/@std/fs/1.0.3/_get_file_info_type.ts + +export type PathType = "file" | "dir" | "symlink"; +export function getFileInfoType(fileInfo: Deno.FileInfo): PathType | undefined { + return fileInfo.isFile + ? "file" + : fileInfo.isDirectory + ? "dir" + : fileInfo.isSymlink + ? "symlink" + : undefined; +} + +// from https://jsr.io/@std/fs/1.0.3/_is_subdir.ts +/** + * Checks whether `src` is a sub-directory of `dest`. + * + * @param src Source file path as a string or URL. + * @param dest Destination file path as a string or URL. + * @param sep Path separator. Defaults to `\\` for Windows and `/` for other + * platforms. + * + * @returns `true` if `src` is a sub-directory of `dest`, `false` otherwise. + */ +export function isSubdir( + src: string | URL, + dest: string | URL, + sep = SEPARATOR, +): boolean { + src = toPathString(src); + dest = toPathString(dest); + + if (resolve(src) === resolve(dest)) { + return false; + } + + const srcArray = src.split(sep); + const destArray = dest.split(sep); + + return srcArray.every((current, i) => destArray[i] === current); +} + +/** + * Convert a URL or string to a path. + * + * @param pathUrl A URL or string to be converted. + * + * @returns The path as a string. + */ +export function toPathString( + pathUrl: string | URL, +): string { + return pathUrl instanceof URL ? fromFileUrl(pathUrl) : pathUrl; +} diff --git a/src/deno_ral/io.ts b/src/deno_ral/io.ts index 44791a8baf2..3ae38cc8b92 100644 --- a/src/deno_ral/io.ts +++ b/src/deno_ral/io.ts @@ -4,4 +4,5 @@ * Copyright (C) 2020-2024 Posit Software, PBC */ -export { readAll } from "io/mod.ts"; +export { readAll } from "io/read-all"; +export { readLines } from "io/read-lines"; diff --git a/src/deno_ral/log.ts b/src/deno_ral/log.ts index 8773c86d496..5a9d6623fc5 100644 --- a/src/deno_ral/log.ts +++ b/src/deno_ral/log.ts @@ -12,6 +12,6 @@ export { LogLevels, setup, warn as warning, -} from "log/mod.ts"; +} from "log"; -export type { LevelName, LogRecord } from "log/mod.ts"; +export type { LevelName, LogRecord } from "log"; diff --git a/src/deno_ral/path.ts b/src/deno_ral/path.ts index dd0e5a28cd8..7cf51ad93fa 100644 --- a/src/deno_ral/path.ts +++ b/src/deno_ral/path.ts @@ -4,21 +4,21 @@ * Copyright (C) 2020-2024 Posit Software, PBC */ -export { - basename, - dirname, - extname, - fromFileUrl, - isAbsolute, - join, - normalize, - relative, - resolve, - SEPARATOR as SEP, - SEPARATOR_PATTERN as SEP_PATTERN, - toFileUrl, -} from "path/mod.ts"; +import * as path from "path"; -export * as posix from "path/posix/mod.ts"; +export const SEP = path.SEPARATOR; +export const SEP_PATTERN = path.SEPARATOR_PATTERN; +export const basename = path.basename; +export const extname = path.extname; +export const dirname = path.dirname; +export const fromFileUrl = path.fromFileUrl; +export const globToRegExp = path.globToRegExp; +export const isAbsolute = path.isAbsolute; +export const join = path.join; +export const relative = path.relative; +export const resolve = path.resolve; +export const normalize = path.normalize; +export const toFileUrl = path.toFileUrl; +export const isGlob = path.isGlob; -export { globToRegExp } from "path/glob_to_regexp.ts"; +export const posix = { normalize: path.posix.normalize }; diff --git a/src/dev_import_map.json b/src/dev_import_map.json index 56e0a676ad4..151870a2835 100644 --- a/src/dev_import_map.json +++ b/src/dev_import_map.json @@ -1,34 +1,36 @@ { "imports": { - "archive/": "./vendor/deno.land/std@0.217.0/archive/", - "async/": "./vendor/deno.land/std@0.217.0/async/", - "bytes/": "./vendor/deno.land/std@0.217.0/bytes/", - "collection/": "./vendor/deno.land/std@0.217.0/collection/", + "archive/": "jsr:/@std/archive@^0.225.0/", + "async": "./vendor/jsr.io/@std/async/0.224.2/mod.ts", + "async/": "./vendor/jsr.io/@std/async/0.224.2/mod.ts/", + "bytes/": "./vendor/jsr.io/@std/bytes/0.224.0/mod.ts/", + "collection/": "jsr:/@std/collection@^0.224.0/", "colors": "./vendor/deno.land/std@0.217.0/fmt/colors.ts", - "crypto/": "./vendor/deno.land/std@0.217.0/crypto/", - "datetime/": "./vendor/deno.land/std@0.217.0/datetime/", - "dotenv/": "./vendor/deno.land/std@0.217.0/dotenv/", - "encoding/": "./vendor/deno.land/std@0.217.0/encoding/", - "yaml/": "./vendor/deno.land/std@0.217.0/yaml/", - "flags/": "./vendor/deno.land/std@0.217.0/flags/", - "fmt/": "./vendor/deno.land/std@0.217.0/fmt/", - "fs/": "./vendor/deno.land/std@0.217.0/fs/", - "http/": "./vendor/deno.land/std@0.217.0/http/", - "io/": "./vendor/deno.land/std@0.217.0/io/", - "log/": "./vendor/deno.land/std@0.217.0/log/", - "node/": "./vendor/deno.land/std@0.217.0/node/", - "path/": "./vendor/deno.land/std@0.217.0/path/", - "permissions/": "./vendor/deno.land/std@0.217.0/permissions/", - "signal/": "./vendor/deno.land/std@0.217.0/signal/", - "streams/": "./vendor/deno.land/std@0.217.0/streams/", - "testing/": "./vendor/deno.land/std@0.217.0/testing/", - "uuid/": "./vendor/deno.land/std@0.217.0/uuid/", - "version": "./vendor/deno.land/std@0.217.0/version.ts", - "wasi/": "./vendor/deno.land/std@0.217.0/wasi/", + "crypto/": "./vendor/jsr.io/@std/crypto/0.224.0/mod.ts/", + "datetime/": "./vendor/jsr.io/@std/datetime/0.224.5/mod.ts/", + "dotenv": "./vendor/jsr.io/@std/dotenv/0.224.2/mod.ts", + "dotenv/": "./vendor/jsr.io/@std/dotenv/0.224.2/mod.ts/", + "encoding/": "jsr:/@std/encoding@^0.224.0/", + "yaml": "./vendor/cdn.skypack.dev/js-yaml.js", + "flags": "./vendor/jsr.io/@std/flags/0.224.0/mod.ts", + "fmt/": "jsr:/@std/fmt@^0.224.0/", + "fs/": "./vendor/jsr.io/@std/fs/0.224.0/mod.ts/", + "http/": "./vendor/jsr.io/@std/http/0.224.5/mod.ts/", + "io/": "./vendor/jsr.io/@std/io/0.224.8/mod.ts/", + "log": "./vendor/jsr.io/@std/log/0.224.7/mod.ts", + "log/": "./vendor/jsr.io/@std/log/0.224.7/mod.ts/", + "node/": "jsr:/@std/node@^0.224.0/", + "path": "./vendor/jsr.io/@std/path/0.224.0/mod.ts", + "permissions/": "./vendor/jsr.io/@std/permissions/0.224.0/mod.ts/", + "signal/": "jsr:/@std/signal@^0.224.0/", + "streams/": "./vendor/jsr.io/@std/streams/0.224.5/mod.ts/", + "testing/": "jsr:/@std/testing@^0.224.0/", + "uuid/": "./vendor/jsr.io/@std/uuid/0.224.3/mod.ts/", + "wasi/": "jsr:/@std/wasi@^0.224.0/", "events/": "./vendor/deno.land/x/events@v1.0.0/", "cache/": "./vendor/../resources/vendor/deno-land/x/cache@0-2-12/", "cliffy/": "./vendor/deno.land/x/cliffy@v1.0.0-rc.3/", - "deno_dom/": "./vendor/deno.land/x/deno_dom@v0.1.35-alpha/", + "deno_dom/": "./vendor/deno.land/x/deno_dom@v0.1.41/", "xmlp/": "./vendor/deno.land/x/xmlp@v0.2.8/", "xml/": "./vendor/deno.land/x/xml@2.1.1/", "another_cookiejar/": "./vendor/deno.land/x/another_cookiejar@v5.0.3/", @@ -49,13 +51,15 @@ "slimdom": "./vendor/cdn.skypack.dev/slimdom@4.2.0.js", "fontoxpath": "./vendor/cdn.skypack.dev/fontoxpath@3.29.1.js", "scss-parser": "./vendor/cdn.skypack.dev/scss-parser@1.0.6.js", + "https://deno.land/std@0.196.0/console/unicode_width.ts": "./vendor/deno.land/std@0.224.0/console/unicode_width.ts", "https://deno.land/std@0.161.0/": "./vendor/deno.land/std@0.217.0/", "https://deno.land/std@0.101.0/": "./vendor/deno.land/std@0.217.0/", "https://deno.land/std@0.105.0/": "./vendor/deno.land/std@0.217.0/", "https://deno.land/std@0.93.0/encoding/base64.ts": "./vendor/deno.land/std@0.196.0/encoding/base64.ts", "https://deno.land/std@0.93.0/path/mod.ts": "./vendor/deno.land/std@0.204.0/path/mod.ts", "https://deno.land/std@0.93.0/": "./vendor/deno.land/std@0.217.0/", - "https://deno.land/std@0.91.0/path/": "./vendor/deno.land/std@0.217.0/path/", + "https://deno.land/std@0.91.0/path/mod.ts": "./vendor/jsr.io/@std/path/0.224.0/mod.ts", + "https://deno.land/std@0.91.0/path/": "./vendor/jsr.io/@std/path/0.224.0/mod.ts/", "https://deno.land/std@0.91.0/fs/exists.ts": "./vendor/deno.land/std@0.217.0/fs/exists.ts", "https://deno.land/std@0.91.0/fs/ensure_dir.ts": "./vendor/deno.land/std@0.217.0/fs/ensure_dir.ts", "https://deno.land/std@0.91.0/hash/": "./vendor/../resources/vendor/deno-land/std@0-91-0/hash/", @@ -63,37 +67,51 @@ "https://dev.jspm.io/": "./vendor/../resources/vendor/dev-jspm-io/", "https://dev.jspm.io/jszip@3.5.0": "./vendor/../resources/vendor/dev-jspm-io/jszip@3.5.0.js", "puppeteer/": "./vendor/../resources/vendor/deno-land/x/puppeteer@9-0-2/", + "jsr:/@std/archive@^0.224.0/tar": "./vendor/jsr.io/@std/archive/0.224.3/tar.ts", + "jsr:/@std/async@^0.224.0": "./vendor/jsr.io/@std/async/0.224.2/mod.ts", + "jsr:/@std/bytes@^0.224.0": "./vendor/jsr.io/@std/bytes/0.224.0/mod.ts", + "jsr:/@std/collections@^0.224.0": "./vendor/jsr.io/@std/collections/0.224.2/mod.ts", + "jsr:/@std/crypto@^0.224.0": "./vendor/jsr.io/@std/crypto/0.224.0/mod.ts", + "jsr:/@std/datetime@^0.224.0": "./vendor/jsr.io/@std/datetime/0.224.5/mod.ts", + "jsr:/@std/dotenv@^0.224.0": "./vendor/jsr.io/@std/dotenv/0.224.2/mod.ts", + "jsr:/@std/csv@^0.224.0": "./vendor/jsr.io/@std/csv/0.224.3/mod.ts", + "jsr:/@std/front-matter@^0.224.0": "./vendor/jsr.io/@std/front-matter/0.224.3/mod.ts", + "jsr:/@std/jsonc@^0.224.0": "./vendor/jsr.io/@std/jsonc/0.224.3/mod.ts", + "jsr:/@std/toml@^0.224.0": "./vendor/jsr.io/@std/toml/0.224.1/mod.ts", + "jsr:/@std/yaml@^0.224.0": "./vendor/jsr.io/@std/yaml/0.224.3/mod.ts", + "jsr:/@std/flags@^0.224.0": "./vendor/jsr.io/@std/flags/0.224.0/mod.ts", + "jsr:/@std/fs@^0.224.0": "./vendor/jsr.io/@std/fs/0.224.0/mod.ts", + "jsr:/@std/http@^0.224.0": "./vendor/jsr.io/@std/http/0.224.5/mod.ts", + "jsr:/@std/io@^0.224.0": "./vendor/jsr.io/@std/io/0.224.8/mod.ts", + "jsr:/@std/log@^0.224.0": "./vendor/jsr.io/@std/log/0.224.7/mod.ts", + "jsr:/@std/media-types@^0.224.0": "./vendor/jsr.io/@std/media-types/0.224.1/mod.ts", + "jsr:/@std/path@^0.224.0": "./vendor/jsr.io/@std/path/0.224.0/mod.ts", + "jsr:/@std/permissions@^0.224.0": "./vendor/jsr.io/@std/permissions/0.224.0/mod.ts", + "jsr:/@std/semver@^0.224.0": "./vendor/jsr.io/@std/semver/0.224.3/mod.ts", + "jsr:/@std/streams@^0.224.0": "./vendor/jsr.io/@std/streams/0.224.5/mod.ts", + "jsr:/@std/uuid@^0.224.0": "./vendor/jsr.io/@std/uuid/0.224.3/mod.ts", "https://cdn.skypack.dev/juice@10.0.0": "./vendor/cdn.skypack.dev/juice@10.0.0.js", - "io/write_all.ts": "./vendor/deno.land/std@0.217.0/io/write_all.ts", + "io/write-all": "./vendor/jsr.io/@std/io/0.224.8/write_all.ts", "cliffy/command/mod.ts": "./vendor/deno.land/x/cliffy@v1.0.0-rc.3/command/mod.ts", "semver/mod.ts": "./vendor/deno.land/x/semver@v1.4.0/mod.ts", - "fs/mod.ts": "./vendor/deno.land/std@0.217.0/fs/mod.ts", - "yaml/mod.ts": "./vendor/deno.land/std@0.217.0/yaml/mod.ts", "cliffy/prompt/mod.ts": "./vendor/deno.land/x/cliffy@v1.0.0-rc.3/prompt/mod.ts", - "io/mod.ts": "./vendor/deno.land/std@0.217.0/io/mod.ts", "cliffy/table/mod.ts": "./vendor/deno.land/x/cliffy@v1.0.0-rc.3/table/mod.ts", "cliffy/command/command.ts": "./vendor/deno.land/x/cliffy@v1.0.0-rc.3/command/command.ts", - "fmt/colors.ts": "./vendor/deno.land/std@0.217.0/fmt/colors.ts", + "fmt/colors": "./vendor/jsr.io/@std/fmt/0.224.0/colors.ts", "cliffy/prompt/select.ts": "./vendor/deno.land/x/cliffy@v1.0.0-rc.3/prompt/select.ts", - "fs/expand_glob.ts": "./vendor/deno.land/std@0.217.0/fs/expand_glob.ts", - "fs/exists.ts": "./vendor/deno.land/std@0.217.0/fs/exists.ts", - "encoding/base64.ts": "./vendor/deno.land/std@0.217.0/encoding/base64.ts", - "fs/_is_subdir.ts": "./vendor/deno.land/std@0.217.0/fs/_is_subdir.ts", + "encoding/base64": "./vendor/jsr.io/@std/encoding/0.224.3/base64.ts", "cliffy/ansi/mod.ts": "./vendor/deno.land/x/cliffy@v1.0.0-rc.3/ansi/mod.ts", - "io/read_all.ts": "./vendor/deno.land/std@0.217.0/io/read_all.ts", - "fs/walk.ts": "./vendor/deno.land/std@0.217.0/fs/walk.ts", - "fs/_get_file_info_type.ts": "./vendor/deno.land/std@0.217.0/fs/_get_file_info_type.ts", + "io/read-all": "./vendor/jsr.io/@std/io/0.224.8/read_all.ts", "events/mod.ts": "./vendor/deno.land/x/events@v1.0.0/mod.ts", - "datetime/mod.ts": "./vendor/deno.land/std@0.217.0/datetime/mod.ts", + "datetime/parse": "./vendor/jsr.io/@std/datetime/0.224.5/parse.ts", "dayjs/dayjs.min.js": "./vendor/cdn.skypack.dev/dayjs@1.8.21/dayjs.min.js", - "deno_dom/deno-dom-wasm-noinit.ts": "./vendor/deno.land/x/deno_dom@v0.1.35-alpha/deno-dom-wasm-noinit.ts", - "deno_dom/src/parser.ts": "./vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/parser.ts", - "deno_dom/src/dom/dom-parser.ts": "./vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/dom-parser.ts", - "deno_dom/src/api.ts": "./vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/api.ts", - "deno_dom/src/dom/node.ts": "./vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/node.ts", - "streams/mod.ts": "./vendor/deno.land/std@0.217.0/streams/mod.ts", - "crypto/mod.ts": "./vendor/deno.land/std@0.217.0/crypto/mod.ts", - "fs/ensure_dir.ts": "./vendor/deno.land/std@0.217.0/fs/ensure_dir.ts", + "deno_dom/deno-dom-wasm-noinit.ts": "./vendor/deno.land/x/deno_dom@v0.1.41/deno-dom-wasm-noinit.ts", + "deno_dom/src/parser.ts": "./vendor/deno.land/x/deno_dom@v0.1.41/src/parser.ts", + "deno_dom/src/dom/dom-parser.ts": "./vendor/deno.land/x/deno_dom@v0.1.41/src/dom/dom-parser.ts", + "deno_dom/src/api.ts": "./vendor/deno.land/x/deno_dom@v0.1.41/src/api.ts", + "deno_dom/src/dom/node.ts": "./vendor/deno.land/x/deno_dom@v0.1.41/src/dom/node.ts", + "streams/text-line-stream": "./vendor/jsr.io/@std/streams/0.224.5/text_line_stream.ts", + "crypto/crypto": "./vendor/jsr.io/@std/crypto/0.224.0/crypto.ts", "lodash/cloneDeep.js": "./vendor/cdn.skypack.dev/lodash@4.17.21/cloneDeep.js", "lodash/debounce.js": "./vendor/cdn.skypack.dev/lodash@4.17.21/debounce.js", "lodash/difference.js": "./vendor/cdn.skypack.dev/lodash@4.17.21/difference.js", @@ -110,39 +128,38 @@ "lodash/isEqual.js": "./vendor/cdn.skypack.dev/lodash@4.17.21/isEqual.js", "lodash/orderBy.js": "./vendor/cdn.skypack.dev/lodash@4.17.21/orderBy.js", "lodash/escape.js": "./vendor/cdn.skypack.dev/lodash@4.17.21/escape.js", - "log/logger.ts": "./vendor/deno.land/std@0.217.0/log/logger.ts", - "log/base_handler.ts": "./vendor/deno.land/std@0.217.0/log/base_handler.ts", - "log/file_handler.ts": "./vendor/deno.land/std@0.217.0/log/file_handler.ts", - "flags/mod.ts": "./vendor/deno.land/std@0.217.0/flags/mod.ts", - "path/glob_to_regexp.ts": "./vendor/deno.land/std@0.217.0/path/glob_to_regexp.ts", - "path/mod.ts": "./vendor/deno.land/std@0.217.0/path/mod.ts", - "async/mod.ts": "./vendor/deno.land/std@0.217.0/async/mod.ts", - "dotenv/mod.ts": "./vendor/deno.land/std@0.217.0/dotenv/mod.ts", - "fmt/printf.ts": "./vendor/deno.land/std@0.217.0/fmt/printf.ts", - "yaml/schema.ts": "./vendor/deno.land/std@0.217.0/yaml/schema.ts", - "yaml/type.ts": "./vendor/deno.land/std@0.217.0/yaml/type.ts", - "yaml/_type/mod.ts": "./vendor/deno.land/std@0.217.0/yaml/_type/mod.ts", - "yaml/schema/failsafe.ts": "./vendor/deno.land/std@0.217.0/yaml/schema/failsafe.ts", - "log/mod.ts": "./vendor/deno.land/std@0.217.0/log/mod.ts", - "path/posix/mod.ts": "./vendor/deno.land/std@0.217.0/path/posix/mod.ts", - "testing/asserts.ts": "./vendor/deno.land/std@0.217.0/testing/asserts.ts", + "log/logger": "./vendor/jsr.io/@std/log/0.224.7/logger.ts", + "log/base-handler": "./vendor/jsr.io/@std/log/0.224.7/base_handler.ts", + "log/file-handler": "./vendor/jsr.io/@std/log/0.224.7/file_handler.ts", + "io/iterate-reader": "./vendor/jsr.io/@std/io/0.224.8/iterate_reader.ts", + "fmt/printf": "./vendor/jsr.io/@std/fmt/0.224.0/printf.ts", + "fs/ensure-dir": "./vendor/jsr.io/@std/fs/0.224.0/ensure_dir.ts", + "fs/exists": "./vendor/jsr.io/@std/fs/0.224.0/exists.ts", + "fs/walk": "./vendor/jsr.io/@std/fs/0.224.0/walk.ts", + "fs/expand-glob": "./vendor/jsr.io/@std/fs/0.224.0/expand_glob.ts", + "fs/eol": "./vendor/jsr.io/@std/fs/0.224.0/eol.ts", + "fs/copy": "./vendor/jsr.io/@std/fs/0.224.0/copy.ts", + "fs/move": "./vendor/jsr.io/@std/fs/0.224.0/move.ts", + "fs/empty-dir": "./vendor/jsr.io/@std/fs/0.224.0/empty_dir.ts", + "io/read-lines": "./vendor/jsr.io/@std/io/0.224.8/read_lines.ts", + "testing/asserts": "./vendor/jsr.io/@std/testing/0.224.0/asserts.ts", "media_types/mod.ts": "./vendor/deno.land/x/media_types@v2.10.1/mod.ts", - "fs/copy.ts": "./vendor/deno.land/std@0.217.0/fs/copy.ts", - "io/read_lines.ts": "./vendor/deno.land/std@0.217.0/io/read_lines.ts", + "async/mux-async-iterator": "./vendor/jsr.io/@std/async/0.224.2/mux_async_iterator.ts", "xml/mod.ts": "./vendor/deno.land/x/xml@2.1.1/mod.ts", - "path/dirname.ts": "./vendor/deno.land/std@0.217.0/path/dirname.ts", "xmlp/mod.ts": "./vendor/deno.land/x/xmlp@v0.2.8/mod.ts", "cliffy/prompt/confirm.ts": "./vendor/deno.land/x/cliffy@v1.0.0-rc.3/prompt/confirm.ts", - "io/copy.ts": "./vendor/deno.land/std@0.217.0/io/copy.ts", - "archive/tar.ts": "./vendor/deno.land/std@0.217.0/archive/tar.ts", + "io/copy": "./vendor/jsr.io/@std/io/0.224.8/copy.ts", + "archive/tar": "./vendor/jsr.io/@std/archive/0.225.3/tar.ts", "cliffy/prompt/input.ts": "./vendor/deno.land/x/cliffy@v1.0.0-rc.3/prompt/input.ts", - "encoding/hex.ts": "./vendor/deno.land/std@0.217.0/encoding/hex.ts", + "encoding/hex": "./vendor/jsr.io/@std/encoding/0.224.3/hex.ts", "cliffy/prompt/secret.ts": "./vendor/deno.land/x/cliffy@v1.0.0-rc.3/prompt/secret.ts", "another_cookiejar/mod.ts": "./vendor/deno.land/x/another_cookiejar@v5.0.3/mod.ts", + "dotenv/stringify": "./vendor/jsr.io/@std/dotenv/0.224.2/stringify.ts", "cliffy/command/_errors.ts": "./vendor/deno.land/x/cliffy@v1.0.0-rc.3/command/_errors.ts", "https://deno.land/std@0.105.0/path/mod.ts": "./vendor/deno.land/std@0.217.0/path/mod.ts", "https://cdn.skypack.dev/": "./vendor/cdn.skypack.dev/", - "https://deno.land/": "./vendor/deno.land/" + "https://deno.land/": "./vendor/deno.land/", + "https://jsr.io/": "./vendor/jsr.io/" }, "scopes": { "./resources/vendor/dev-jspm-io/": { @@ -321,6 +338,7 @@ "/-/blueimp-md5@v2.19.0-FsBtHB6ITwdC3L5Giq4Q/dist=es2019,mode=imports/optimized/blueimp-md5.js": "./vendor/cdn.skypack.dev/-/blueimp-md5@v2.19.0-FsBtHB6ITwdC3L5Giq4Q/dist=es2019,mode=imports/optimized/blueimp-md5.js", "/-/dayjs@v1.8.21-6syVEc6qGP8frQXKlmJD/dist=es2019,mode=imports/optimized/dayjs.js": "./vendor/cdn.skypack.dev/-/dayjs@v1.8.21-6syVEc6qGP8frQXKlmJD/dist=es2019,mode=imports/optimized/dayjs.js", "/-/fontoxpath@v3.29.1-a0ohYsVP957eLX7RfgAa/dist=es2019,mode=imports/optimized/fontoxpath.js": "./vendor/cdn.skypack.dev/-/fontoxpath@v3.29.1-a0ohYsVP957eLX7RfgAa/dist=es2019,mode=imports/optimized/fontoxpath.js", + "/-/js-yaml@v4.1.0-dDv6O5b7vFYj0Ro3QdID/dist=es2019,mode=imports/optimized/js-yaml.js": "./vendor/cdn.skypack.dev/-/js-yaml@v4.1.0-dDv6O5b7vFYj0Ro3QdID/dist=es2019,mode=imports/optimized/js-yaml.js", "/-/juice@v10.0.0-FUuj4gsVBIZ9bgC3rRoH/dist=es2019,mode=imports/optimized/juice.js": "./vendor/cdn.skypack.dev/-/juice@v10.0.0-FUuj4gsVBIZ9bgC3rRoH/dist=es2019,mode=imports/optimized/juice.js", "/-/lodash@v4.17.21-K6GEbP02mWFnLA45zAmi/dist=es2019,mode=imports/unoptimized/cloneDeep.js": "./vendor/cdn.skypack.dev/-/lodash@v4.17.21-K6GEbP02mWFnLA45zAmi/dist=es2019,mode=imports/unoptimized/cloneDeep.js", "/-/lodash@v4.17.21-K6GEbP02mWFnLA45zAmi/dist=es2019,mode=imports/unoptimized/debounce.js": "./vendor/cdn.skypack.dev/-/lodash@v4.17.21-K6GEbP02mWFnLA45zAmi/dist=es2019,mode=imports/unoptimized/debounce.js", @@ -341,6 +359,71 @@ "/-/moment-guess@v1.2.4-bDXl7KQy0hLGNuGhyGb4/dist=es2019,mode=imports/optimized/moment-guess.js": "./vendor/cdn.skypack.dev/-/moment-guess@v1.2.4-bDXl7KQy0hLGNuGhyGb4/dist=es2019,mode=imports/optimized/moment-guess.js", "/-/scss-parser@v1.0.6-hrwwdU1eImlkqs8SqYeB/dist=es2019,mode=imports/optimized/scss-parser.js": "./vendor/cdn.skypack.dev/-/scss-parser@v1.0.6-hrwwdU1eImlkqs8SqYeB/dist=es2019,mode=imports/optimized/scss-parser.js", "/-/slimdom@v4.2.0-QzuHPU3P67qdOzczKt6u/dist=es2019,mode=imports/optimized/slimdom.js": "./vendor/cdn.skypack.dev/-/slimdom@v4.2.0-QzuHPU3P67qdOzczKt6u/dist=es2019,mode=imports/optimized/slimdom.js" + }, + "./vendor/jsr.io/": { + "jsr:/@std/io@^0.224.3/buf-reader": "./vendor/jsr.io/@std/io/0.224.8/buf_reader.ts", + "jsr:/@std/io@^0.224.3/types": "./vendor/jsr.io/@std/io/0.224.8/types.ts", + "jsr:/@std/io@^0.224.3/multi-reader": "./vendor/jsr.io/@std/io/0.224.8/multi_reader.ts", + "jsr:/@std/io@^0.224.3/buffer": "./vendor/jsr.io/@std/io/0.224.8/buffer.ts", + "jsr:@std/io@^0.224.8/buf-reader": "./vendor/jsr.io/@std/io/0.224.8/buf_reader.ts", + "jsr:@std/io@^0.224.8/types": "./vendor/jsr.io/@std/io/0.224.8/types.ts", + "jsr:@std/io@^0.224.8/multi-reader": "./vendor/jsr.io/@std/io/0.224.8/multi_reader.ts", + "jsr:@std/io@^0.224.8/buffer": "./vendor/jsr.io/@std/io/0.224.8/buffer.ts", + "jsr:/@std/internal@^0.224.0/format": "./vendor/jsr.io/@std/internal/0.224.0/format.ts", + "jsr:@std/internal@^0.224.0": "./vendor/jsr.io/@std/internal/0.224.0/mod.ts", + "jsr:/@std/fmt@^0.224.0/colors": "./vendor/jsr.io/@std/fmt/0.224.0/colors.ts", + "jsr:/@std/assert@^0.224.0/assert": "./vendor/jsr.io/@std/assert/0.224.0/assert.ts", + "jsr:/@std/encoding@^0.224.0/base64url": "./vendor/jsr.io/@std/encoding/0.224.3/base64url.ts", + "jsr:/@std/streams@^0.224.4/text-delimiter-stream": "./vendor/jsr.io/@std/streams/0.224.5/text_delimiter_stream.ts", + "jsr:/@std/assert@^0.224.0/assert-exists": "./vendor/jsr.io/@std/assert/0.224.0/assert_exists.ts", + "jsr:/@std/toml@^1.0.0-rc.3/parse": "./vendor/jsr.io/@std/toml/1.0.1/parse.ts", + "jsr:/@std/yaml@^1.0.0-rc.1/parse": "./vendor/jsr.io/@std/yaml/1.0.5/parse.ts", + "jsr:/@std/path@^0.224.0/basename": "./vendor/jsr.io/@std/path/0.224.0/basename.ts", + "jsr:/@std/path@^0.224.0/normalize": "./vendor/jsr.io/@std/path/0.224.0/normalize.ts", + "jsr:/@std/path@^0.224.0/resolve": "./vendor/jsr.io/@std/path/0.224.0/resolve.ts", + "jsr:/@std/path@^0.224.0/constants": "./vendor/jsr.io/@std/path/0.224.0/constants.ts", + "jsr:/@std/path@^0.224.0/from-file-url": "./vendor/jsr.io/@std/path/0.224.0/from_file_url.ts", + "jsr:/@std/path@^0.224.0/join": "./vendor/jsr.io/@std/path/0.224.0/join.ts", + "jsr:/@std/path@^0.224.0/dirname": "./vendor/jsr.io/@std/path/0.224.0/dirname.ts", + "jsr:/@std/path@^0.224.0/glob-to-regexp": "./vendor/jsr.io/@std/path/0.224.0/glob_to_regexp.ts", + "jsr:/@std/path@^0.224.0/join-globs": "./vendor/jsr.io/@std/path/0.224.0/join_globs.ts", + "jsr:/@std/path@^0.224.0/is-glob": "./vendor/jsr.io/@std/path/0.224.0/is_glob.ts", + "jsr:/@std/path@^0.224.0/is-absolute": "./vendor/jsr.io/@std/path/0.224.0/is_absolute.ts", + "jsr:/@std/encoding@1.0.0-rc.2/base64": "./vendor/jsr.io/@std/encoding/1.0.0-rc.2/base64.ts", + "jsr:/@std/path@1.0.0-rc.2/posix/join": "./vendor/jsr.io/@std/path/1.0.0-rc.2/posix/join.ts", + "jsr:/@std/path@1.0.0-rc.2/posix/normalize": "./vendor/jsr.io/@std/path/1.0.0-rc.2/posix/normalize.ts", + "jsr:/@std/path@1.0.0-rc.2/extname": "./vendor/jsr.io/@std/path/1.0.0-rc.2/extname.ts", + "jsr:/@std/path@1.0.0-rc.2/join": "./vendor/jsr.io/@std/path/1.0.0-rc.2/join.ts", + "jsr:/@std/path@1.0.0-rc.2/relative": "./vendor/jsr.io/@std/path/1.0.0-rc.2/relative.ts", + "jsr:/@std/path@1.0.0-rc.2/resolve": "./vendor/jsr.io/@std/path/1.0.0-rc.2/resolve.ts", + "jsr:/@std/path@1.0.0-rc.2/constants": "./vendor/jsr.io/@std/path/1.0.0-rc.2/constants.ts", + "jsr:/@std/media-types@^1.0.0-rc.1/content-type": "./vendor/jsr.io/@std/media-types/1.0.3/content_type.ts", + "jsr:/@std/streams@^0.224.5/byte-slice-stream": "./vendor/jsr.io/@std/streams/0.224.5/byte_slice_stream.ts", + "jsr:/@std/cli@^0.224.7/parse-args": "./vendor/jsr.io/@std/cli/0.224.7/parse_args.ts", + "jsr:/@std/fmt@^0.225.4/colors": "./vendor/jsr.io/@std/fmt/0.225.6/colors.ts", + "jsr:/@std/fmt@^0.225.4/bytes": "./vendor/jsr.io/@std/fmt/0.225.6/bytes.ts", + "jsr:/@std/net@^0.224.3/get-network-address": "./vendor/jsr.io/@std/net/0.224.5/get_network_address.ts", + "jsr:/@std/async@^1.0.0-rc.1/delay": "./vendor/jsr.io/@std/async/1.0.5/delay.ts", + "jsr:/@std/encoding@1.0.0-rc.2/hex": "./vendor/jsr.io/@std/encoding/1.0.0-rc.2/hex.ts", + "jsr:@std/bytes@^1.0.2/copy": "./vendor/jsr.io/@std/bytes/1.0.2/copy.ts", + "jsr:@std/bytes@^1.0.2/concat": "./vendor/jsr.io/@std/bytes/1.0.2/concat.ts", + "jsr:/@std/json@^1.0.0-rc.1/types": "./vendor/jsr.io/@std/json/1.0.0/types.ts", + "jsr:@std/fmt@^1.0.2/colors": "./vendor/jsr.io/@std/fmt/1.0.2/colors.ts", + "jsr:@std/io@^0.224.7/write-all": "./vendor/jsr.io/@std/io/0.224.8/write_all.ts", + "jsr:@std/fs@^1.0.3/exists": "./vendor/jsr.io/@std/fs/1.0.3/exists.ts", + "jsr:/@std/bytes@^1.0.0-rc.3/copy": "./vendor/jsr.io/@std/bytes/1.0.2/copy.ts", + "jsr:/@std/bytes@^1.0.0-rc.3/concat": "./vendor/jsr.io/@std/bytes/1.0.2/concat.ts", + "jsr:/@std/io@^0.224.1/iterate-reader": "./vendor/jsr.io/@std/io/0.224.8/iterate_reader.ts", + "jsr:/@std/io@^0.224.1/types": "./vendor/jsr.io/@std/io/0.224.8/types.ts", + "jsr:/@std/io@^0.224.1/to-readable-stream": "./vendor/jsr.io/@std/io/0.224.8/to_readable_stream.ts", + "jsr:/@std/io@^0.224.1/buffer": "./vendor/jsr.io/@std/io/0.224.8/buffer.ts", + "jsr:/@std/io@^0.224.1/write-all": "./vendor/jsr.io/@std/io/0.224.8/write_all.ts", + "jsr:/@std/io@^0.224.1/reader-from-stream-reader": "./vendor/jsr.io/@std/io/0.224.8/reader_from_stream_reader.ts", + "jsr:/@std/io@^0.224.1/to-writable-stream": "./vendor/jsr.io/@std/io/0.224.8/to_writable_stream.ts", + "jsr:@std/assert@^0.224.0": "./vendor/jsr.io/@std/assert/0.224.0/mod.ts", + "jsr:/@std/collections@^1.0.0-rc.1/deep-merge": "./vendor/jsr.io/@std/collections/1.0.6/deep_merge.ts", + "jsr:@std/collections@^1.0.5/deep-merge": "./vendor/jsr.io/@std/collections/1.0.6/deep_merge.ts", + "jsr:/@std/crypto@^0.224.0/crypto": "./vendor/jsr.io/@std/crypto/0.224.0/crypto.ts" } } } \ No newline at end of file diff --git a/src/execute/julia.ts b/src/execute/julia.ts index 4a59b2c8344..f95ab3d2a6b 100644 --- a/src/execute/julia.ts +++ b/src/execute/julia.ts @@ -1,5 +1,5 @@ -import { error, info } from "log/mod.ts"; -import { join } from "path/mod.ts"; +import { error, info } from "../deno_ral/log.ts"; +import { join } from "../deno_ral/path.ts"; import { MappedString, mappedStringFromFile } from "../core/mapped-text.ts"; import { partitionMarkdown } from "../core/pandoc/pandoc-partition.ts"; import { readYamlFromMarkdown } from "../core/yaml.ts"; @@ -39,8 +39,8 @@ import { isInteractiveSession } from "../core/platform.ts"; import { runningInCI } from "../core/ci-info.ts"; import { sleep } from "../core/async.ts"; import { JupyterNotebook } from "../core/jupyter/types.ts"; -import { existsSync } from "fs/mod.ts"; -import { encodeBase64 } from "encoding/base64.ts"; +import { existsSync } from "../deno_ral/fs.ts"; +import { encodeBase64 } from "encoding/base64"; import { executeResultEngineDependencies, executeResultIncludes, diff --git a/src/execute/jupyter/jupyter-kernel.ts b/src/execute/jupyter/jupyter-kernel.ts index b1c9f3a5164..71c89d4ef6f 100644 --- a/src/execute/jupyter/jupyter-kernel.ts +++ b/src/execute/jupyter/jupyter-kernel.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { join } from "../../deno_ral/path.ts"; import { error, info, warning } from "../../deno_ral/log.ts"; diff --git a/src/execute/jupyter/jupyter.ts b/src/execute/jupyter/jupyter.ts index a1a5e6bb85f..5bc03c342e1 100644 --- a/src/execute/jupyter/jupyter.ts +++ b/src/execute/jupyter/jupyter.ts @@ -7,7 +7,7 @@ import { basename, dirname, join, relative } from "../../deno_ral/path.ts"; import { satisfies } from "semver/mod.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { error } from "../../deno_ral/log.ts"; @@ -110,7 +110,7 @@ import { jupyterCapabilities } from "../../core/jupyter/capabilities.ts"; import { runExternalPreviewServer } from "../../preview/preview-server.ts"; import { onCleanup } from "../../core/cleanup.ts"; import { projectOutputDir } from "../../project/project-shared.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; export const jupyterEngine: ExecutionEngine = { name: kJupyterEngine, diff --git a/src/execute/ojs/compile.ts b/src/execute/ojs/compile.ts index 134d3797bb3..17303e7d9c3 100644 --- a/src/execute/ojs/compile.ts +++ b/src/execute/ojs/compile.ts @@ -83,7 +83,7 @@ import { getDivAttributes } from "../../core/handlers/base.ts"; import { pathWithForwardSlashes } from "../../core/path.ts"; import { executeInlineCodeHandlerMapped } from "../../core/execute-inline.ts"; -import { encodeBase64 } from "encoding/base64.ts"; +import { encodeBase64 } from "encoding/base64"; export interface OjsCompileOptions { source: string; diff --git a/src/execute/ojs/extract-resources.ts b/src/execute/ojs/extract-resources.ts index 83bf43199e1..f56c674477e 100644 --- a/src/execute/ojs/extract-resources.ts +++ b/src/execute/ojs/extract-resources.ts @@ -4,9 +4,14 @@ * Copyright (C) 2021-2022 Posit Software, PBC */ -import * as colors from "fmt/colors.ts"; -import { dirname, fromFileUrl, relative, resolve } from "../../deno_ral/path.ts"; -import { encodeBase64 } from "encoding/base64.ts"; +import * as colors from "fmt/colors"; +import { + dirname, + fromFileUrl, + relative, + resolve, +} from "../../deno_ral/path.ts"; +import { encodeBase64 } from "encoding/base64"; import { lookup } from "media_types/mod.ts"; import { parseModule } from "observablehq/parser"; diff --git a/src/execute/rmd.ts b/src/execute/rmd.ts index 2f85e5ee340..3e44f8e7387 100644 --- a/src/execute/rmd.ts +++ b/src/execute/rmd.ts @@ -5,10 +5,10 @@ */ import { error, info, warning } from "../deno_ral/log.ts"; -import { existsSync } from "fs/exists.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { basename, extname } from "../deno_ral/path.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import { execProcess } from "../core/process.ts"; import { rBinaryPath, resourcePath } from "../core/resources.ts"; diff --git a/src/extension/extension-host.ts b/src/extension/extension-host.ts index 8b642850a3b..3a0eaebb641 100644 --- a/src/extension/extension-host.ts +++ b/src/extension/extension-host.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { isWindows } from "../core/platform.ts"; export interface ResolvedExtensionInfo { diff --git a/src/extension/extension.ts b/src/extension/extension.ts index 149c521bd45..c9d3650cf9e 100644 --- a/src/extension/extension.ts +++ b/src/extension/extension.ts @@ -4,9 +4,10 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync, walkSync } from "fs/mod.ts"; +import { existsSync, walkSync } from "../deno_ral/fs.ts"; import { expandGlobSync } from "../core/deno/expand-glob.ts"; import { warning } from "../deno_ral/log.ts"; +import { isSubdir } from "../deno_ral/fs.ts"; import { coerce, Range, satisfies } from "semver/mod.ts"; import { @@ -14,7 +15,6 @@ import { ProjectConfig, ProjectContext, } from "../project/types.ts"; -import { isSubdir } from "fs/_is_subdir.ts"; import { dirname, diff --git a/src/extension/install.ts b/src/extension/install.ts index 229e53ed2ff..51784c96b42 100644 --- a/src/extension/install.ts +++ b/src/extension/install.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../deno_ral/fs.ts"; import { Confirm } from "cliffy/prompt/mod.ts"; import { Table } from "cliffy/table/mod.ts"; import { basename, dirname, join, relative } from "../deno_ral/path.ts"; diff --git a/src/extension/template.ts b/src/extension/template.ts index 12d5a03f1ea..162da7b7e5f 100644 --- a/src/extension/template.ts +++ b/src/extension/template.ts @@ -5,7 +5,7 @@ */ import { join } from "../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { resolvePathGlobs } from "../core/path.ts"; import { lines } from "../core/text.ts"; import { warning } from "../deno_ral/log.ts"; diff --git a/src/format/asciidoc/format-asciidoc.ts b/src/format/asciidoc/format-asciidoc.ts index b370d4a965a..8e1c2477a0e 100644 --- a/src/format/asciidoc/format-asciidoc.ts +++ b/src/format/asciidoc/format-asciidoc.ts @@ -32,7 +32,7 @@ import { kSectionTitleReferences, kShiftHeadingLevelBy, } from "../../config/constants.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { ProjectOutputFile } from "../../project/types/types.ts"; import { lines } from "../../core/text.ts"; import { @@ -328,7 +328,7 @@ function partsAndChapters( include: (path: string) => string, ) { return entries.map((entry) => { - if (typeof (entry) === "string") { + if (typeof entry === "string") { return include(entry); } else { const partOutput: string[] = []; @@ -419,7 +419,7 @@ async function resolveBookInputs( const outputs: AsciiDocBookPart[] = []; for (const input of inputs) { - if (typeof (input) === "string") { + if (typeof input === "string") { const chapterOutput = await resolveChapter(input); if (chapterOutput) { outputs.push(chapterOutput); diff --git a/src/format/dashboard/format-dashboard.ts b/src/format/dashboard/format-dashboard.ts index b0a765c1d74..a067d823daa 100644 --- a/src/format/dashboard/format-dashboard.ts +++ b/src/format/dashboard/format-dashboard.ts @@ -61,7 +61,7 @@ import { projectIsWebsite } from "../../project/project-shared.ts"; import { processShinyComponents } from "./format-dashboard-shiny.ts"; import { processToolbars } from "./format-dashboard-toolbar.ts"; import { processDatatables } from "./format-dashboard-tables.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { brandBootstrapSassBundles } from "../../core/sass/brand.ts"; const kDashboardClz = "quarto-dashboard"; diff --git a/src/format/html/format-html-scss.ts b/src/format/html/format-html-scss.ts index 9e7867608f5..b355249c6d9 100644 --- a/src/format/html/format-html-scss.ts +++ b/src/format/html/format-html-scss.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { dirname, extname, isAbsolute, join } from "../../deno_ral/path.ts"; import { formatResourcePath } from "../../core/resources.ts"; diff --git a/src/format/html/format-html-title.ts b/src/format/html/format-html-title.ts index e068e64340a..07ea1c2f707 100644 --- a/src/format/html/format-html-title.ts +++ b/src/format/html/format-html-title.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { dirname, isAbsolute, join } from "../../deno_ral/path.ts"; import { kDateFormat, kTocLocation } from "../../config/constants.ts"; import { Format, Metadata, PandocFlags } from "../../config/types.ts"; diff --git a/src/format/ipynb/format-ipynb.ts b/src/format/ipynb/format-ipynb.ts index 7643985d1c1..237044263bf 100644 --- a/src/format/ipynb/format-ipynb.ts +++ b/src/format/ipynb/format-ipynb.ts @@ -26,7 +26,7 @@ import { import { formatResourcePath } from "../../core/resources.ts"; import { createFormat } from "../formats-shared.ts"; -import { decodeBase64 as base64decode } from "encoding/base64.ts"; +import { decodeBase64 as base64decode } from "encoding/base64"; import { JupyterOutput, JupyterOutputDisplayData, diff --git a/src/format/jats/format-jats-postprocess.ts b/src/format/jats/format-jats-postprocess.ts index 74ed94d0b4f..46f63e19f5a 100644 --- a/src/format/jats/format-jats-postprocess.ts +++ b/src/format/jats/format-jats-postprocess.ts @@ -9,8 +9,8 @@ import { RenderServices } from "../../command/render/types.ts"; import { JatsRenderSubArticle, xmlPlaceholder } from "./format-jats-types.ts"; import { dirname, join, relative } from "../../deno_ral/path.ts"; -import { copySync } from "fs/copy.ts"; -import { readLines } from "io/mod.ts"; +import { copySync } from "../../deno_ral/fs.ts"; +import { readLines } from "io/read-lines"; import { ProjectContext } from "../../project/types.ts"; import { logProgress } from "../../core/log.ts"; import { kJatsSubarticle } from "../../render/notebook/notebook-types.ts"; diff --git a/src/format/pdf/format-pdf.ts b/src/format/pdf/format-pdf.ts index 5fa63d76719..3de6b6738bc 100644 --- a/src/format/pdf/format-pdf.ts +++ b/src/format/pdf/format-pdf.ts @@ -45,7 +45,7 @@ import { RenderedFile, RenderServices } from "../../command/render/types.ts"; import { ProjectConfig, ProjectContext } from "../../project/types.ts"; import { BookExtension } from "../../project/types/book/book-shared.ts"; -import { readLines } from "io/read_lines.ts"; +import { readLines } from "io/read-lines"; import { TempContext } from "../../core/temp.ts"; import { isLatexPdfEngine, pdfEngine } from "../../config/pdf.ts"; import { formatResourcePath } from "../../core/resources.ts"; diff --git a/src/format/reveal/format-reveal-multiplex.ts b/src/format/reveal/format-reveal-multiplex.ts index b431f5633e1..af9bd12bbf9 100644 --- a/src/format/reveal/format-reveal-multiplex.ts +++ b/src/format/reveal/format-reveal-multiplex.ts @@ -4,7 +4,7 @@ * Copyright (C) 2021-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { join } from "../../deno_ral/path.ts"; import { isSelfContainedOutput } from "../../command/render/render-info.ts"; import { kResourcePath } from "../../config/constants.ts"; @@ -113,7 +113,7 @@ async function revealMultiplexToken( // is it provided in config? const multiplex = format.metadata[kRevealJsMultiplex] as RevealMultiplexToken; if ( - typeof (multiplex) === "object" && typeof (multiplex.secret) === "string" && + typeof multiplex === "object" && typeof (multiplex.secret) === "string" && typeof (multiplex.id) === "string" ) { multiplex.url = multiplex.url || kDefaultMultiplexUrl; @@ -146,7 +146,7 @@ async function revealMultiplexToken( } // provision a new token - const url = typeof (multiplex) === "object" + const url = typeof multiplex === "object" ? (multiplex.url || kDefaultMultiplexUrl) : kDefaultMultiplexUrl; try { diff --git a/src/format/reveal/format-reveal-plugin.ts b/src/format/reveal/format-reveal-plugin.ts index 7e045afe1d9..5e2e7452778 100644 --- a/src/format/reveal/format-reveal-plugin.ts +++ b/src/format/reveal/format-reveal-plugin.ts @@ -4,7 +4,7 @@ * Copyright (C) 2021-2022 Posit Software, PBC */ -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../../deno_ral/fs.ts"; import { basename, join } from "../../deno_ral/path.ts"; import { kIncludeInHeader, kSelfContained } from "../../config/constants.ts"; @@ -177,7 +177,7 @@ export async function revealPluginExtras( const resolvePlugin = async ( plugin: string | RevealPluginBundle | RevealPlugin, ) => { - if (typeof (plugin) === "string") { + if (typeof plugin === "string") { // This is just a simple path // If the path can be resolved to a file on disk then // don't treat it as an extension @@ -194,7 +194,7 @@ export async function revealPluginExtras( const pluginBundles = resolvedPlugins.map( (resolvedPlug): RevealPluginBundle => { - if (typeof (resolvedPlug) === "string") { + if (typeof resolvedPlug === "string") { return { plugin: resolvedPlug, config: plugin.config, @@ -234,7 +234,7 @@ export async function revealPluginExtras( // read plugins for (let bundle of pluginBundles) { // convert string to plugin - if (typeof (bundle) === "string") { + if (typeof bundle === "string") { bundle = { plugin: bundle, }; @@ -513,7 +513,7 @@ async function pluginFromBundle( plugin.script = [plugin.script]; } plugin.script = plugin.script?.map((script) => { - if (typeof (script) === "string") { + if (typeof script === "string") { return { path: script, }; diff --git a/src/format/reveal/format-reveal-theme.ts b/src/format/reveal/format-reveal-theme.ts index cef4f79a7af..79c63534397 100644 --- a/src/format/reveal/format-reveal-theme.ts +++ b/src/format/reveal/format-reveal-theme.ts @@ -5,7 +5,7 @@ */ import { dirname, join, relative } from "../../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { kTheme } from "../../config/constants.ts"; import { @@ -192,7 +192,7 @@ export async function revealTheme( // Remove sourcemap information cleanSourceMappingUrl(css); // convert from string to bytes - const hash = md5HashBytes(Deno.readFileSync(css)); + const hash = await md5HashBytes(Deno.readFileSync(css)); const fileName = `quarto-${hash}`; copyTo( css, diff --git a/src/import_map.json b/src/import_map.json index f629d7ffeba..edc1a146eef 100644 --- a/src/import_map.json +++ b/src/import_map.json @@ -1,34 +1,36 @@ { "imports": { - "archive/": "https://deno.land/std@0.217.0/archive/", - "async/": "https://deno.land/std@0.217.0/async/", - "bytes/": "https://deno.land/std@0.217.0/bytes/", - "collection/": "https://deno.land/std@0.217.0/collection/", + "archive/": "jsr:/@std/archive@^0.225.0/", + "async": "jsr:/@std/async@^0.224.0", + "async/": "jsr:/@std/async@^0.224.0/", + "bytes/": "jsr:/@std/bytes@^0.224.0/", + "collection/": "jsr:/@std/collection@^0.224.0/", "colors": "https://deno.land/std@0.217.0/fmt/colors.ts", - "crypto/": "https://deno.land/std@0.217.0/crypto/", - "datetime/": "https://deno.land/std@0.217.0/datetime/", - "dotenv/": "https://deno.land/std@0.217.0/dotenv/", - "encoding/": "https://deno.land/std@0.217.0/encoding/", - "yaml/": "https://deno.land/std@0.217.0/yaml/", - "flags/": "https://deno.land/std@0.217.0/flags/", - "fmt/": "https://deno.land/std@0.217.0/fmt/", - "fs/": "https://deno.land/std@0.217.0/fs/", - "http/": "https://deno.land/std@0.217.0/http/", - "io/": "https://deno.land/std@0.217.0/io/", - "log/": "https://deno.land/std@0.217.0/log/", - "node/": "https://deno.land/std@0.217.0/node/", - "path/": "https://deno.land/std@0.217.0/path/", - "permissions/": "https://deno.land/std@0.217.0/permissions/", - "signal/": "https://deno.land/std@0.217.0/signal/", - "streams/": "https://deno.land/std@0.217.0/streams/", - "testing/": "https://deno.land/std@0.217.0/testing/", - "uuid/": "https://deno.land/std@0.217.0/uuid/", - "version": "https://deno.land/std@0.217.0/version.ts", - "wasi/": "https://deno.land/std@0.217.0/wasi/", + "crypto/": "jsr:/@std/crypto@^0.224.0/", + "datetime/": "jsr:/@std/datetime@^0.224.0/", + "dotenv": "jsr:/@std/dotenv@^0.224.0", + "dotenv/": "jsr:/@std/dotenv@^0.224.0/", + "encoding/": "jsr:/@std/encoding@^0.224.0/", + "yaml": "https://cdn.skypack.dev/js-yaml", + "flags": "jsr:/@std/flags@^0.224.0", + "fmt/": "jsr:/@std/fmt@^0.224.0/", + "fs/": "jsr:/@std/fs@^0.224.0/", + "http/": "jsr:/@std/http@^0.224.0/", + "io/": "jsr:/@std/io@^0.224.0/", + "log": "jsr:/@std/log@^0.224.0", + "log/": "jsr:/@std/log@^0.224.0/", + "node/": "jsr:/@std/node@^0.224.0/", + "path": "jsr:@std/path@^0.224.0", + "permissions/": "jsr:/@std/permissions@^0.224.0/", + "signal/": "jsr:/@std/signal@^0.224.0/", + "streams/": "jsr:/@std/streams@^0.224.0/", + "testing/": "jsr:/@std/testing@^0.224.0/", + "uuid/": "jsr:/@std/uuid@^0.224.0/", + "wasi/": "jsr:/@std/wasi@^0.224.0/", "events/": "https://deno.land/x/events@v1.0.0/", "cache/": "https://deno.land/x/cache@0.2.12/", "cliffy/": "https://deno.land/x/cliffy@v1.0.0-rc.3/", - "deno_dom/": "https://deno.land/x/deno_dom@v0.1.35-alpha/", + "deno_dom/": "https://deno.land/x/deno_dom@v0.1.41/", "xmlp/": "https://deno.land/x/xmlp@v0.2.8/", "xml/": "https://deno.land/x/xml@2.1.1/", "another_cookiejar/": "https://deno.land/x/another_cookiejar@v5.0.3/", @@ -51,6 +53,7 @@ "fontoxpath": "https://cdn.skypack.dev/fontoxpath@3.29.1", "scss-parser": "https://cdn.skypack.dev/scss-parser@1.0.6", + "https://deno.land/std@0.196.0/console/unicode_width.ts": "https://deno.land/std@0.224.0/console/unicode_width.ts", "https://deno.land/std@0.161.0/": "https://deno.land/std@0.217.0/", "https://deno.land/std@0.101.0/": "https://deno.land/std@0.217.0/", "https://deno.land/std@0.105.0/": "https://deno.land/std@0.217.0/", @@ -58,7 +61,8 @@ "https://deno.land/std@0.93.0/path/mod.ts": "https://deno.land/std@0.204.0/path/mod.ts", "https://deno.land/std@0.93.0/": "https://deno.land/std@0.217.0/", - "https://deno.land/std@0.91.0/path/": "https://deno.land/std@0.217.0/path/", + "https://deno.land/std@0.91.0/path/mod.ts": "jsr:/@std/path@^0.224.0", + "https://deno.land/std@0.91.0/path/": "jsr:/@std/path@^0.224.0/", "https://deno.land/std@0.91.0/fs/exists.ts": "https://deno.land/std@0.217.0/fs/exists.ts", "https://deno.land/std@0.91.0/fs/ensure_dir.ts": "https://deno.land/std@0.217.0/fs/ensure_dir.ts", diff --git a/src/preview/preview-server.ts b/src/preview/preview-server.ts index f9989f9d333..9d807ae10d7 100644 --- a/src/preview/preview-server.ts +++ b/src/preview/preview-server.ts @@ -4,8 +4,8 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { MuxAsyncIterator } from "async/mod.ts"; -import { iterateReader } from "streams/mod.ts"; +import { MuxAsyncIterator } from "async/mux-async-iterator"; +import { iterateReader } from "io/iterate-reader"; import { isWindows } from "../core/platform.ts"; export interface PreviewServer { diff --git a/src/project/project-cites.ts b/src/project/project-cites.ts index c5fe55828ce..b829ae5f17c 100644 --- a/src/project/project-cites.ts +++ b/src/project/project-cites.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../deno_ral/fs.ts"; import { join } from "../deno_ral/path.ts"; import { PandocOptions } from "../command/render/types.ts"; diff --git a/src/project/project-context.ts b/src/project/project-context.ts index a57927d22f7..a0284a94d3f 100644 --- a/src/project/project-context.ts +++ b/src/project/project-context.ts @@ -4,10 +4,16 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { dirname, isAbsolute, join, relative, SEP } from "../deno_ral/path.ts"; -import { globToRegExp } from "path/glob_to_regexp.ts"; - -import { existsSync, walkSync } from "fs/mod.ts"; +import { + dirname, + globToRegExp, + isAbsolute, + join, + relative, + SEP, +} from "../deno_ral/path.ts"; + +import { existsSync, walkSync } from "../deno_ral/fs.ts"; import * as ld from "../core/lodash.ts"; import { ProjectType } from "./types/types.ts"; diff --git a/src/project/project-create.ts b/src/project/project-create.ts index 33a9b2af581..e34867e7731 100644 --- a/src/project/project-create.ts +++ b/src/project/project-create.ts @@ -5,7 +5,7 @@ */ import * as ld from "../core/lodash.ts"; -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../deno_ral/fs.ts"; import { basename, dirname, join } from "../deno_ral/path.ts"; import { info } from "../deno_ral/log.ts"; diff --git a/src/project/project-crossrefs.ts b/src/project/project-crossrefs.ts index 9f61dc7130e..0e7a2b569f1 100644 --- a/src/project/project-crossrefs.ts +++ b/src/project/project-crossrefs.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../deno_ral/fs.ts"; import { basename, isAbsolute, join, relative } from "../deno_ral/path.ts"; import { diff --git a/src/project/project-environment.ts b/src/project/project-environment.ts index f645c99862e..cb84e29ac79 100644 --- a/src/project/project-environment.ts +++ b/src/project/project-environment.ts @@ -5,7 +5,7 @@ */ import { extname } from "../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { projectType } from "../project/types/project-types.ts"; import { kManuscriptType, diff --git a/src/project/project-gitignore.ts b/src/project/project-gitignore.ts index 1885423880f..1615b86bd81 100644 --- a/src/project/project-gitignore.ts +++ b/src/project/project-gitignore.ts @@ -5,7 +5,7 @@ */ import { join } from "../deno_ral/path.ts"; -import { existsSync, walkSync } from "fs/mod.ts"; +import { existsSync, walkSync } from "../deno_ral/fs.ts"; import { which } from "../core/path.ts"; import { execProcess } from "../core/process.ts"; diff --git a/src/project/project-resources.ts b/src/project/project-resources.ts index 60baeeb1e55..ee9ae8dfdd2 100644 --- a/src/project/project-resources.ts +++ b/src/project/project-resources.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync } from "../deno_ral/fs.ts"; import { dirname, extname, join, relative } from "../deno_ral/path.ts"; import * as ld from "../core/lodash.ts"; import { asArray } from "../core/array.ts"; diff --git a/src/project/project-scratch.ts b/src/project/project-scratch.ts index d9dcb2646e9..b85ebc7cfc4 100644 --- a/src/project/project-scratch.ts +++ b/src/project/project-scratch.ts @@ -5,7 +5,7 @@ */ import { dirname, join } from "../deno_ral/path.ts"; -import { ensureDirSync } from "fs/mod.ts"; +import { ensureDirSync } from "../deno_ral/fs.ts"; import { normalizePath } from "../core/path.ts"; export const kQuartoScratch = ".quarto"; diff --git a/src/project/project-shared.ts b/src/project/project-shared.ts index fa890b62a46..689fc8b4bb0 100644 --- a/src/project/project-shared.ts +++ b/src/project/project-shared.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/exists.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { dirname, isAbsolute, @@ -41,7 +41,7 @@ import { ExecutionEngine } from "../execute/types.ts"; import { InspectedMdCell } from "../quarto-core/inspect-types.ts"; import { breakQuartoMd, QuartoMdCell } from "../core/lib/break-quarto-md.ts"; import { partitionCellOptionsText } from "../core/lib/partition-cell-options.ts"; -import { parse } from "yaml/mod.ts"; +import { parse } from "../core/yaml.ts"; import { mappedIndexToLineCol } from "../core/lib/mapped-text.ts"; import { normalizeNewlines } from "../core/lib/text.ts"; import { DirectiveCell } from "../core/lib/break-quarto-md-types.ts"; diff --git a/src/project/serve/serve.ts b/src/project/serve/serve.ts index c85cd2f005b..b2822e6f8b1 100644 --- a/src/project/serve/serve.ts +++ b/src/project/serve/serve.ts @@ -5,7 +5,7 @@ */ import { info, warning } from "../../deno_ral/log.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { basename, dirname, @@ -13,7 +13,7 @@ import { join, relative, } from "../../deno_ral/path.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import * as ld from "../../core/lodash.ts"; diff --git a/src/project/serve/watch.ts b/src/project/serve/watch.ts index 0eb31f3a163..6e1b5cc9533 100644 --- a/src/project/serve/watch.ts +++ b/src/project/serve/watch.ts @@ -5,7 +5,7 @@ */ import { join, relative } from "../../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import * as ld from "../../core/lodash.ts"; diff --git a/src/project/types/book/book-bibliography.ts b/src/project/types/book/book-bibliography.ts index 90299e09c5c..0c29281cfaa 100644 --- a/src/project/types/book/book-bibliography.ts +++ b/src/project/types/book/book-bibliography.ts @@ -5,10 +5,10 @@ */ import { dirname, isAbsolute, join, relative } from "../../../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../deno_ral/fs.ts"; import * as ld from "../../../core/lodash.ts"; -import { stringify } from "yaml/mod.ts"; +import { stringify } from "../../../core/yaml.ts"; import { error } from "../../../deno_ral/log.ts"; import { diff --git a/src/project/types/book/book-config.ts b/src/project/types/book/book-config.ts index 103d89991fb..a66081bb3a8 100644 --- a/src/project/types/book/book-config.ts +++ b/src/project/types/book/book-config.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../deno_ral/fs.ts"; import { join } from "../../../deno_ral/path.ts"; import * as ld from "../../../core/lodash.ts"; diff --git a/src/project/types/book/book-crossrefs.ts b/src/project/types/book/book-crossrefs.ts index 42d0dd68ae6..6b2d3fc6284 100644 --- a/src/project/types/book/book-crossrefs.ts +++ b/src/project/types/book/book-crossrefs.ts @@ -6,7 +6,7 @@ import { warning } from "../../../deno_ral/log.ts"; import { dirname, join, relative } from "../../../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../deno_ral/fs.ts"; import { Element, diff --git a/src/project/types/book/book-render.ts b/src/project/types/book/book-render.ts index 2ede42ab8d1..87f3f593b21 100644 --- a/src/project/types/book/book-render.ts +++ b/src/project/types/book/book-render.ts @@ -6,7 +6,7 @@ import { dirname, isAbsolute, join, relative } from "../../../deno_ral/path.ts"; -import { encodeBase64 } from "encoding/base64.ts"; +import { encodeBase64 } from "encoding/base64"; import * as ld from "../../../core/lodash.ts"; @@ -90,7 +90,7 @@ import { kDateFormat } from "../website/listing/website-listing-template.ts"; import { removePandocTo } from "../../../command/render/flags.ts"; import { resourcePath } from "../../../core/resources.ts"; import { PandocAttr, PartitionedMarkdown } from "../../../core/pandoc/types.ts"; -import { stringify } from "yaml/mod.ts"; +import { stringify } from "../../../core/yaml.ts"; import { waitUntilNamedLifetime } from "../../../core/lifetimes.ts"; export function bookPandocRenderer( diff --git a/src/project/types/manuscript/manuscript-config.ts b/src/project/types/manuscript/manuscript-config.ts index 68ba15d721c..0fc879f6b33 100644 --- a/src/project/types/manuscript/manuscript-config.ts +++ b/src/project/types/manuscript/manuscript-config.ts @@ -6,12 +6,12 @@ import { isAbsolute, join, relative } from "../../../deno_ral/path.ts"; import { ProjectContext } from "../../types.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../deno_ral/fs.ts"; import { ManuscriptConfig, ResolvedManuscriptConfig, } from "./manuscript-types.ts"; -import { readLines } from "io/mod.ts"; +import { readLines } from "../../../deno_ral/io.ts"; import { Format } from "../../../config/types.ts"; import { kNotebookViewStyle } from "../../../config/constants.ts"; diff --git a/src/project/types/manuscript/manuscript-meca.ts b/src/project/types/manuscript/manuscript-meca.ts index 50f8e555564..8492c47fc6b 100644 --- a/src/project/types/manuscript/manuscript-meca.ts +++ b/src/project/types/manuscript/manuscript-meca.ts @@ -22,7 +22,12 @@ import { relative, SEP, } from "../../../deno_ral/path.ts"; -import { copySync, ensureDirSync, moveSync, walkSync } from "fs/mod.ts"; +import { + copySync, + ensureDirSync, + moveSync, + walkSync, +} from "../../../deno_ral/fs.ts"; import { kMecaVersion, MecaItem, MecaManifest, toXml } from "./meca.ts"; import { zip } from "../../../core/zip.ts"; import { diff --git a/src/project/types/manuscript/manuscript.ts b/src/project/types/manuscript/manuscript.ts index 2128706d75e..abf093bfcab 100644 --- a/src/project/types/manuscript/manuscript.ts +++ b/src/project/types/manuscript/manuscript.ts @@ -84,7 +84,7 @@ import { mecaFileName, shouldMakeMecaBundle, } from "./manuscript-meca.ts"; -import { readLines } from "io/mod.ts"; +import { readLines } from "../../../deno_ral/io.ts"; import { computeProjectArticleFile, isArticle, @@ -107,7 +107,7 @@ import { isQmdFile } from "../../../execute/qmd.ts"; import * as ld from "../../../core/lodash.ts"; import { safeExistsSync } from "../../../core/path.ts"; -import { copySync, ensureDirSync, existsSync } from "fs/mod.ts"; +import { copySync, ensureDirSync, existsSync } from "../../../deno_ral/fs.ts"; import { kTitleBlockStyle } from "../../../format/html/format-html-title.ts"; import { resolveProjectInputLinks } from "../website/website-utils.ts"; diff --git a/src/project/types/single-file/single-file.ts b/src/project/types/single-file/single-file.ts index 5c1ce3500d2..fdef60a41f7 100644 --- a/src/project/types/single-file/single-file.ts +++ b/src/project/types/single-file/single-file.ts @@ -10,7 +10,7 @@ // Currently, this file houses utilities to make the // single-file path look closer to a project. -import { dirname } from "path/dirname.ts"; +import { dirname } from "../../../deno_ral/path.ts"; import { normalizePath } from "../../../core/path.ts"; import { NotebookContext } from "../../../render/notebook/notebook-types.ts"; import { makeProjectEnvironmentMemoizer } from "../../project-environment.ts"; diff --git a/src/project/types/website/listing/website-listing-index.ts b/src/project/types/website/listing/website-listing-index.ts index b0b5c6d8d10..0cb928f861c 100644 --- a/src/project/types/website/listing/website-listing-index.ts +++ b/src/project/types/website/listing/website-listing-index.ts @@ -5,7 +5,7 @@ */ import { join, relative } from "../../../../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../../deno_ral/fs.ts"; import { ProjectContext } from "../../../types.ts"; import { ListingDescriptor, ListingItem } from "./website-listing-shared.ts"; diff --git a/src/project/types/website/listing/website-listing-project.ts b/src/project/types/website/listing/website-listing-project.ts index 84c42938f51..ae6b27b5485 100644 --- a/src/project/types/website/listing/website-listing-project.ts +++ b/src/project/types/website/listing/website-listing-project.ts @@ -1,11 +1,10 @@ /* -* website-listing-project.ts -* -* Copyright (C) 2020-2022 Posit Software, PBC -* -*/ + * website-listing-project.ts + * + * Copyright (C) 2020-2022 Posit Software, PBC + */ -import { ensureDirSync } from "fs/mod.ts"; +import { ensureDirSync } from "../../../../deno_ral/fs.ts"; import { dirname, join } from "../../../../deno_ral/path.ts"; import { projectScratchPath } from "../../../project-scratch.ts"; @@ -34,7 +33,7 @@ export function cacheListingProjectData( const listingContents = descriptors.flatMap((descriptor) => { const contentItems = descriptor.listing.contents; return contentItems.filter((item) => { - return typeof (item) === "string"; + return typeof item === "string"; }); }) as string[]; diff --git a/src/project/types/website/listing/website-listing-read.ts b/src/project/types/website/listing/website-listing-read.ts index ed39c9a2602..40e454b1dd6 100644 --- a/src/project/types/website/listing/website-listing-read.ts +++ b/src/project/types/website/listing/website-listing-read.ts @@ -15,7 +15,7 @@ import { relative, } from "../../../../deno_ral/path.ts"; import { cloneDeep, orderBy, uniq } from "../../../../core/lodash.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../../deno_ral/fs.ts"; import { Format, Metadata } from "../../../../config/types.ts"; import { @@ -108,7 +108,7 @@ import { projectOutputDir, } from "../../../project-shared.ts"; import { mergeConfigs } from "../../../../core/config.ts"; -import { globToRegExp } from "path/glob_to_regexp.ts"; +import { globToRegExp } from "../../../../deno_ral/path.ts"; import { cslNames } from "../../../../core/csl.ts"; import { isHttpUrl } from "../../../../core/url.ts"; import { InternalError } from "../../../../core/lib/error.ts"; diff --git a/src/project/types/website/listing/website-listing.ts b/src/project/types/website/listing/website-listing.ts index 72605c59279..f202e6897e5 100644 --- a/src/project/types/website/listing/website-listing.ts +++ b/src/project/types/website/listing/website-listing.ts @@ -6,9 +6,14 @@ * */ -import { basename, dirname, join, relative } from "../../../../deno_ral/path.ts"; +import { + basename, + dirname, + join, + relative, +} from "../../../../deno_ral/path.ts"; import { Document, Element } from "deno_dom/deno-dom-wasm-noinit.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../../deno_ral/fs.ts"; import { Format, diff --git a/src/project/types/website/website-aliases.ts b/src/project/types/website/website-aliases.ts index 0bf8bffde26..9a6b9565353 100644 --- a/src/project/types/website/website-aliases.ts +++ b/src/project/types/website/website-aliases.ts @@ -3,7 +3,7 @@ * * Copyright (C) 2020-2022 Posit Software, PBC */ -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../../../deno_ral/fs.ts"; import { dirname, extname, join, relative } from "../../../deno_ral/path.ts"; import { ProjectOutputFile } from "../types.ts"; diff --git a/src/project/types/website/website-config.ts b/src/project/types/website/website-config.ts index de3678f3055..2a47dac3f8e 100644 --- a/src/project/types/website/website-config.ts +++ b/src/project/types/website/website-config.ts @@ -44,7 +44,7 @@ import { kWebsite, } from "./website-constants.ts"; import { ensureTrailingSlash } from "../../../core/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../deno_ral/fs.ts"; import { join } from "../../../deno_ral/path.ts"; type WebsiteConfigKey = diff --git a/src/project/types/website/website-giscus.ts b/src/project/types/website/website-giscus.ts index fc3451c197d..512deccc7dd 100644 --- a/src/project/types/website/website-giscus.ts +++ b/src/project/types/website/website-giscus.ts @@ -1,11 +1,10 @@ /* -* website-giscus.ts -* -* Copyright (C) 2020-2022 Posit Software, PBC -* -*/ + * website-giscus.ts + * + * Copyright (C) 2020-2022 Posit Software, PBC + */ -import { ensureDirSync } from "fs/mod.ts"; +import { ensureDirSync } from "../../../deno_ral/fs.ts"; import { join } from "../../../deno_ral/path.ts"; import { Format } from "../../../config/types.ts"; import { diff --git a/src/project/types/website/website-search.ts b/src/project/types/website/website-search.ts index 04087bdcbae..254d72c3848 100644 --- a/src/project/types/website/website-search.ts +++ b/src/project/types/website/website-search.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../deno_ral/fs.ts"; import { basename, join, relative } from "../../../deno_ral/path.ts"; // currently not building the index here so not using fuse diff --git a/src/project/types/website/website-sitemap.ts b/src/project/types/website/website-sitemap.ts index 8a92297e337..05d032346bc 100644 --- a/src/project/types/website/website-sitemap.ts +++ b/src/project/types/website/website-sitemap.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../deno_ral/fs.ts"; import { basename, join, relative } from "../../../deno_ral/path.ts"; import { ElementInfo, SAXParser } from "xmlp/mod.ts"; diff --git a/src/publish/common/account.ts b/src/publish/common/account.ts index bc868de928c..c09a0133fe2 100644 --- a/src/publish/common/account.ts +++ b/src/publish/common/account.ts @@ -1,14 +1,13 @@ /* -* account.ts -* -* Copyright (C) 2020-2022 Posit Software, PBC -* -*/ + * account.ts + * + * Copyright (C) 2020-2022 Posit Software, PBC + */ -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../../deno_ral/fs.ts"; import { join } from "../../deno_ral/path.ts"; import { info } from "../../deno_ral/log.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import { isServerSession, isWindows } from "../../core/platform.ts"; import { openUrl } from "../../core/shell.ts"; import { sleep } from "../../core/wait.ts"; diff --git a/src/publish/common/bundle.ts b/src/publish/common/bundle.ts index 200b11be114..363539f8e7d 100644 --- a/src/publish/common/bundle.ts +++ b/src/publish/common/bundle.ts @@ -5,16 +5,16 @@ */ import { dirname, join } from "../../deno_ral/path.ts"; -import { copy } from "io/copy.ts"; -import { ensureDirSync } from "fs/mod.ts"; - -import { Tar } from "archive/tar.ts"; +import { ensureDirSync } from "../../deno_ral/fs.ts"; import { PublishFiles } from "../provider-types.ts"; import { TempContext } from "../../core/temp-types.ts"; import { md5HashBytes } from "../../core/hash.ts"; import { pathWithForwardSlashes } from "../../core/path.ts"; +import { copy } from "io/copy"; +import { Tar } from "archive/tar"; + interface ManifestMetadata { appmode: string; primary_rmd: string | null; @@ -55,7 +55,7 @@ export async function createBundle( const filePath = join(files.baseDir, file); if (Deno.statSync(filePath).isFile) { const fileBytes = Deno.readFileSync(filePath); - const checksum = md5HashBytes(fileBytes); + const checksum = await md5HashBytes(fileBytes); manifestFiles[file] = { checksum }; } } diff --git a/src/publish/common/data.ts b/src/publish/common/data.ts index bcaa57d104d..47915883a1e 100644 --- a/src/publish/common/data.ts +++ b/src/publish/common/data.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../../deno_ral/fs.ts"; import { join } from "../../deno_ral/path.ts"; import { quartoDataDir } from "../../core/appdirs.ts"; @@ -33,7 +33,7 @@ export async function readAccountsPublishedTo( record: PublishRecord, ): Promise { const source = normalizePath( - typeof (input) === "string" ? input : input.dir, + typeof input === "string" ? input : input.dir, ); const tokens: AccountToken[] = []; const publishRecordsFile = publishRecordsPath(); diff --git a/src/publish/common/publish.ts b/src/publish/common/publish.ts index 2781b7e82b4..20c9e1f7cf5 100644 --- a/src/publish/common/publish.ts +++ b/src/publish/common/publish.ts @@ -5,15 +5,15 @@ */ import { info } from "../../deno_ral/log.ts"; -import * as colors from "fmt/colors.ts"; -import { ensureDirSync, walkSync } from "fs/mod.ts"; +import * as colors from "fmt/colors"; +import { ensureDirSync, walkSync } from "../../deno_ral/fs.ts"; import { Input } from "cliffy/prompt/input.ts"; import { Select } from "cliffy/prompt/select.ts"; import { dirname, join, relative } from "../../deno_ral/path.ts"; -import { crypto } from "crypto/mod.ts"; -import { encodeHex } from "encoding/hex.ts"; +import { crypto } from "crypto/crypto"; +import { encodeHex } from "encoding/hex"; import { sleep } from "../../core/wait.ts"; import { pathWithForwardSlashes } from "../../core/path.ts"; diff --git a/src/publish/config.ts b/src/publish/config.ts index 42a68f262b3..4033ae111a0 100644 --- a/src/publish/config.ts +++ b/src/publish/config.ts @@ -5,9 +5,8 @@ */ import { warning } from "../deno_ral/log.ts"; -import { stringify } from "yaml/mod.ts"; +import { stringify } from "../core/yaml.ts"; import { basename, dirname, join } from "../deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; import * as ld from "../core/lodash.ts"; diff --git a/src/publish/confluence/api/index.ts b/src/publish/confluence/api/index.ts index c6c5d8a8fb2..7b4015930c6 100644 --- a/src/publish/confluence/api/index.ts +++ b/src/publish/confluence/api/index.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020 by Posit, PBC */ -import { encodeBase64 as base64encode } from "encoding/base64.ts"; +import { encodeBase64 as base64encode } from "encoding/base64"; import { ensureTrailingSlash } from "../../../core/path.ts"; import { AccountToken } from "../../provider-types.ts"; diff --git a/src/publish/gh-pages/gh-pages.ts b/src/publish/gh-pages/gh-pages.ts index 92b97e3d2d3..39aa0c75be7 100644 --- a/src/publish/gh-pages/gh-pages.ts +++ b/src/publish/gh-pages/gh-pages.ts @@ -6,8 +6,8 @@ import { info } from "../../deno_ral/log.ts"; import { dirname, join, relative } from "../../deno_ral/path.ts"; -import { copy } from "fs/mod.ts"; -import * as colors from "fmt/colors.ts"; +import { copy } from "../../deno_ral/fs.ts"; +import * as colors from "fmt/colors"; import { Confirm } from "cliffy/prompt/confirm.ts"; diff --git a/src/publish/huggingface/huggingface.ts b/src/publish/huggingface/huggingface.ts index e2bb61e7eff..c26f87ef945 100644 --- a/src/publish/huggingface/huggingface.ts +++ b/src/publish/huggingface/huggingface.ts @@ -6,7 +6,7 @@ import { info } from "../../deno_ral/log.ts"; import { dirname, join } from "../../deno_ral/path.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import { ProjectContext } from "../../project/types.ts"; import { AccountToken, @@ -23,7 +23,7 @@ import { } from "../common/git.ts"; import { throwUnableToPublish } from "../common/errors.ts"; import { Input } from "cliffy/prompt/input.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { Secret } from "cliffy/prompt/secret.ts"; export const kHuggingFace = "huggingface"; diff --git a/src/publish/posit-cloud/api/index.ts b/src/publish/posit-cloud/api/index.ts index fca99d2bbd3..e4f44e9c4a0 100644 --- a/src/publish/posit-cloud/api/index.ts +++ b/src/publish/posit-cloud/api/index.ts @@ -18,12 +18,11 @@ import { import { md5Hash } from "../../../core/hash.ts"; import { quartoConfig } from "../../../core/quarto.ts"; -import { crypto } from "crypto/mod.ts"; - +import { crypto } from "crypto/crypto"; import { decodeBase64 as base64Decode, encodeBase64 as base64Encode, -} from "encoding/base64.ts"; +} from "encoding/base64"; interface FetchOpts { body?: string; diff --git a/src/publish/posit-cloud/posit-cloud.ts b/src/publish/posit-cloud/posit-cloud.ts index b19b9d094ff..f756131f855 100644 --- a/src/publish/posit-cloud/posit-cloud.ts +++ b/src/publish/posit-cloud/posit-cloud.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2023 Posit Software, PBC */ import { info } from "../../deno_ral/log.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import { Input } from "cliffy/prompt/input.ts"; import { Secret } from "cliffy/prompt/secret.ts"; @@ -238,7 +238,7 @@ async function publish( }, async () => { const bundleBytes = Deno.readFileSync(bundlePath); const bundleSize = bundleBytes.length; - const bundleHash = md5HashBytes(bundleBytes); + const bundleHash = await md5HashBytes(bundleBytes); const bundle = await client.createBundle( applicationId, diff --git a/src/publish/publish.ts b/src/publish/publish.ts index bf0d58078a6..c774890b21b 100644 --- a/src/publish/publish.ts +++ b/src/publish/publish.ts @@ -6,7 +6,7 @@ import * as ld from "../core/lodash.ts"; -import { existsSync, walkSync } from "fs/mod.ts"; +import { existsSync, walkSync } from "../deno_ral/fs.ts"; import { basename, diff --git a/src/publish/rsconnect/rsconnect.ts b/src/publish/rsconnect/rsconnect.ts index 694cbb6d300..53c015883d7 100644 --- a/src/publish/rsconnect/rsconnect.ts +++ b/src/publish/rsconnect/rsconnect.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ import { info } from "../../deno_ral/log.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import { Input } from "cliffy/prompt/input.ts"; import { Secret } from "cliffy/prompt/secret.ts"; diff --git a/src/quarto-core/dotenv.ts b/src/quarto-core/dotenv.ts index c17d705071d..d8513fe3541 100644 --- a/src/quarto-core/dotenv.ts +++ b/src/quarto-core/dotenv.ts @@ -4,12 +4,13 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { load as config, stringify } from "dotenv/mod.ts"; +import { load as config } from "dotenv"; +import { stringify } from "dotenv/stringify"; import { join } from "../deno_ral/path.ts"; import { safeExistsSync } from "../core/path.ts"; import { isEqual } from "../core/lodash.ts"; import { globalTempContext } from "../core/temp.ts"; -import { existsSync } from "fs/exists.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { activeProfiles, kQuartoProfile } from "./profile.ts"; const kQuartoEnv = "_environment"; diff --git a/src/quarto-core/inspect.ts b/src/quarto-core/inspect.ts index e3befd97134..bbbcab4d018 100644 --- a/src/quarto-core/inspect.ts +++ b/src/quarto-core/inspect.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { dirname, join, relative } from "../deno_ral/path.ts"; import * as ld from "../core/lodash.ts"; diff --git a/src/quarto-core/profile.ts b/src/quarto-core/profile.ts index 96d1f696b5f..7f2df2c795c 100644 --- a/src/quarto-core/profile.ts +++ b/src/quarto-core/profile.ts @@ -1,11 +1,10 @@ /* -* profile.ts -* -* Copyright (C) 2020-2022 Posit Software, PBC -* -*/ + * profile.ts + * + * Copyright (C) 2020-2022 Posit Software, PBC + */ -import { Args } from "flags/mod.ts"; +import { Args } from "flags"; import { Command } from "cliffy/command/mod.ts"; export const kQuartoProfile = "QUARTO_PROFILE"; diff --git a/src/quarto-core/text-highlighting.ts b/src/quarto-core/text-highlighting.ts index e363b4c545a..e748b9ad7a6 100644 --- a/src/quarto-core/text-highlighting.ts +++ b/src/quarto-core/text-highlighting.ts @@ -9,7 +9,7 @@ import { kDefaultHighlightStyle } from "../command/render/constants.ts"; import { kHighlightStyle } from "../config/constants.ts"; import { FormatPandoc } from "../config/types.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../deno_ral/fs.ts"; import { resourcePath } from "../core/resources.ts"; import { normalizePath } from "../core/path.ts"; import { warnOnce } from "../core/log.ts"; diff --git a/src/render/notebook/notebook-contributor-html.ts b/src/render/notebook/notebook-contributor-html.ts index ba3443afdaa..448a1c61106 100644 --- a/src/render/notebook/notebook-contributor-html.ts +++ b/src/render/notebook/notebook-contributor-html.ts @@ -50,7 +50,7 @@ import { Format } from "../../config/types.ts"; import { isQmdFile } from "../../execute/qmd.ts"; import { dirAndStem } from "../../core/path.ts"; import { projectOutputDir } from "../../project/project-shared.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; export const htmlNotebookContributor: NotebookContributor = { resolve: resolveHtmlNotebook, diff --git a/src/render/notebook/notebook-contributor-ipynb.ts b/src/render/notebook/notebook-contributor-ipynb.ts index 8f85214d499..9a702a6456d 100644 --- a/src/render/notebook/notebook-contributor-ipynb.ts +++ b/src/render/notebook/notebook-contributor-ipynb.ts @@ -32,7 +32,7 @@ import { error } from "../../deno_ral/log.ts"; import { Format } from "../../config/types.ts"; import { ipynbTitleTemplatePath } from "../../format/ipynb/format-ipynb.ts"; import { projectOutputDir } from "../../project/project-shared.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { dirname, join, relative } from "../../deno_ral/path.ts"; export const outputNotebookContributor: NotebookContributor = { diff --git a/src/render/notebook/notebook-contributor-qmd.ts b/src/render/notebook/notebook-contributor-qmd.ts index 606dde40a50..ad9ff7d17af 100644 --- a/src/render/notebook/notebook-contributor-qmd.ts +++ b/src/render/notebook/notebook-contributor-qmd.ts @@ -36,7 +36,7 @@ import { error } from "../../deno_ral/log.ts"; import { Format } from "../../config/types.ts"; import { ipynbTitleTemplatePath } from "../../format/ipynb/format-ipynb.ts"; import { projectScratchPath } from "../../project/project-scratch.ts"; -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../../deno_ral/fs.ts"; import { dirname, join, relative } from "../../deno_ral/path.ts"; export const qmdNotebookContributor: NotebookContributor = { diff --git a/src/resources/deno_std/deno_std.lock b/src/resources/deno_std/deno_std.lock index 341a7f6cce9..333c170ca79 100644 --- a/src/resources/deno_std/deno_std.lock +++ b/src/resources/deno_std/deno_std.lock @@ -1,5 +1,233 @@ { "version": "3", + "packages": { + "specifiers": { + "jsr:@std/archive@^0.224.0": "jsr:@std/archive@0.224.3", + "jsr:@std/assert@^0.224.0": "jsr:@std/assert@0.224.0", + "jsr:@std/async@^0.224.0": "jsr:@std/async@0.224.2", + "jsr:@std/async@^1.0.0-rc.1": "jsr:@std/async@1.0.5", + "jsr:@std/bytes@^0.224.0": "jsr:@std/bytes@0.224.0", + "jsr:@std/bytes@^1.0.0-rc.3": "jsr:@std/bytes@1.0.2", + "jsr:@std/bytes@^1.0.2": "jsr:@std/bytes@1.0.2", + "jsr:@std/cli@^0.224.7": "jsr:@std/cli@0.224.7", + "jsr:@std/collections@^0.224.0": "jsr:@std/collections@0.224.2", + "jsr:@std/collections@^1.0.0-rc.1": "jsr:@std/collections@1.0.6", + "jsr:@std/collections@^1.0.5": "jsr:@std/collections@1.0.6", + "jsr:@std/crypto@^0.224.0": "jsr:@std/crypto@0.224.0", + "jsr:@std/csv@^0.224.0": "jsr:@std/csv@0.224.3", + "jsr:@std/datetime@^0.224.0": "jsr:@std/datetime@0.224.5", + "jsr:@std/dotenv@^0.224.0": "jsr:@std/dotenv@0.224.2", + "jsr:@std/encoding@1.0.0-rc.2": "jsr:@std/encoding@1.0.0-rc.2", + "jsr:@std/encoding@^0.224.0": "jsr:@std/encoding@0.224.3", + "jsr:@std/flags@^0.224.0": "jsr:@std/flags@0.224.0", + "jsr:@std/fmt@^0.225.4": "jsr:@std/fmt@0.225.6", + "jsr:@std/fmt@^1.0.2": "jsr:@std/fmt@1.0.2", + "jsr:@std/front-matter@^0.224.0": "jsr:@std/front-matter@0.224.3", + "jsr:@std/fs@^0.224.0": "jsr:@std/fs@0.224.0", + "jsr:@std/fs@^1.0.3": "jsr:@std/fs@1.0.3", + "jsr:@std/http@^0.224.0": "jsr:@std/http@0.224.5", + "jsr:@std/io@^0.224.0": "jsr:@std/io@0.224.8", + "jsr:@std/io@^0.224.1": "jsr:@std/io@0.224.8", + "jsr:@std/io@^0.224.3": "jsr:@std/io@0.224.8", + "jsr:@std/io@^0.224.7": "jsr:@std/io@0.224.8", + "jsr:@std/json@^1.0.0-rc.1": "jsr:@std/json@1.0.0", + "jsr:@std/jsonc@^0.224.0": "jsr:@std/jsonc@0.224.3", + "jsr:@std/log@^0.224.0": "jsr:@std/log@0.224.7", + "jsr:@std/media-types@^0.224.0": "jsr:@std/media-types@0.224.1", + "jsr:@std/media-types@^1.0.0-rc.1": "jsr:@std/media-types@1.0.3", + "jsr:@std/net@^0.224.3": "jsr:@std/net@0.224.5", + "jsr:@std/path@1.0.0-rc.2": "jsr:@std/path@1.0.0-rc.2", + "jsr:@std/path@^0.224.0": "jsr:@std/path@0.224.0", + "jsr:@std/permissions@^0.224.0": "jsr:@std/permissions@0.224.0", + "jsr:@std/semver@^0.224.0": "jsr:@std/semver@0.224.3", + "jsr:@std/streams@^0.224.0": "jsr:@std/streams@0.224.5", + "jsr:@std/streams@^0.224.4": "jsr:@std/streams@0.224.5", + "jsr:@std/streams@^0.224.5": "jsr:@std/streams@0.224.5", + "jsr:@std/toml@^0.224.0": "jsr:@std/toml@0.224.1", + "jsr:@std/toml@^1.0.0-rc.3": "jsr:@std/toml@1.0.1", + "jsr:@std/uuid@^0.224.0": "jsr:@std/uuid@0.224.3", + "jsr:@std/yaml@^0.224.0": "jsr:@std/yaml@0.224.3", + "jsr:@std/yaml@^1.0.0-rc.1": "jsr:@std/yaml@1.0.5" + }, + "jsr": { + "@std/archive@0.224.3": { + "integrity": "d75b0593ce9870a13a1c22857032f7c3024c8eac8ba270f73061f9f1e5758a12", + "dependencies": [ + "jsr:@std/io@^0.224.3" + ] + }, + "@std/assert@0.224.0": { + "integrity": "8643233ec7aec38a940a8264a6e3eed9bfa44e7a71cc6b3c8874213ff401967f" + }, + "@std/async@0.224.2": { + "integrity": "4d277d6e165df43d5e061ba0ef3edfddb8e8d558f5b920e3e6b1d2614b44d074" + }, + "@std/async@1.0.5": { + "integrity": "31d68214bfbb31bd4c6022401d484e3964147c76c9220098baa703a39b6c2da6" + }, + "@std/bytes@0.224.0": { + "integrity": "a2250e1d0eb7d1c5a426f21267ab9bdeac2447fa87a3d0d1a467d3f7a6058e49" + }, + "@std/bytes@1.0.2": { + "integrity": "fbdee322bbd8c599a6af186a1603b3355e59a5fb1baa139f8f4c3c9a1b3e3d57" + }, + "@std/cli@0.224.7": { + "integrity": "654ca6477518e5e3a0d3fabafb2789e92b8c0febf1a1d24ba4b567aba94b5977" + }, + "@std/collections@0.224.2": { + "integrity": "e77819455294e92d4e7ddad1dbfd46f94174c09318e541e6621fac4a4d0ab326" + }, + "@std/collections@1.0.6": { + "integrity": "60ad252af7df0594e6455f697920a37cd523ad66469fefcc9735e362826ac01d" + }, + "@std/crypto@0.224.0": { + "integrity": "154ef3ff08ef535562ef1a718718c5b2c5fc3808f0f9100daad69e829bfcdf2d", + "dependencies": [ + "jsr:@std/assert@^0.224.0", + "jsr:@std/encoding@^0.224.0" + ] + }, + "@std/csv@0.224.3": { + "integrity": "cf9cb88954a029b9997a613f67771d39b4d1602c8ea1a289328c89b48460fae3", + "dependencies": [ + "jsr:@std/streams@^0.224.4" + ] + }, + "@std/datetime@0.224.5": { + "integrity": "363fca6e2e46c1e85139c10ba77745d25c0936abd112b8bfdc9b8fc3615added" + }, + "@std/dotenv@0.224.2": { + "integrity": "29081695357e4534696c9e986b2560be29c141ccf52daa32b6c20ff5b5c64ab9" + }, + "@std/encoding@0.224.3": { + "integrity": "5e861b6d81be5359fad4155e591acf17c0207b595112d1840998bb9f476dbdaf" + }, + "@std/encoding@1.0.0-rc.2": { + "integrity": "160d7674a20ebfbccdf610b3801fee91cf6e42d1c106dd46bbaf46e395cd35ef" + }, + "@std/flags@0.224.0": { + "integrity": "d40eaf58c356b2e1313c6d4e62dc28b614aad2ddae6f5ff72a969e0b1f5ad689", + "dependencies": [ + "jsr:@std/assert@^0.224.0" + ] + }, + "@std/fmt@0.225.6": { + "integrity": "aba6aea27f66813cecfd9484e074a9e9845782ab0685c030e453a8a70b37afc8" + }, + "@std/fmt@1.0.2": { + "integrity": "87e9dfcdd3ca7c066e0c3c657c1f987c82888eb8103a3a3baa62684ffeb0f7a7" + }, + "@std/front-matter@0.224.3": { + "integrity": "983e98b6fc90d614540d2176350e4edf7b6ec067b384c03245e2e795b66de9bb", + "dependencies": [ + "jsr:@std/toml@^1.0.0-rc.3", + "jsr:@std/yaml@^1.0.0-rc.1" + ] + }, + "@std/fs@0.224.0": { + "integrity": "52a5ec89731ac0ca8f971079339286f88c571a4d61686acf75833f03a89d8e69", + "dependencies": [ + "jsr:@std/assert@^0.224.0", + "jsr:@std/path@^0.224.0" + ] + }, + "@std/fs@1.0.3": { + "integrity": "3cb839b1360b0a42d8b367c3093bfe4071798e6694fa44cf1963e04a8edba4fe" + }, + "@std/http@0.224.5": { + "integrity": "b03b5d1529f6c423badfb82f6640f9f2557b4034cd7c30655ba5bb447ff750a4", + "dependencies": [ + "jsr:@std/async@^1.0.0-rc.1", + "jsr:@std/cli@^0.224.7", + "jsr:@std/encoding@1.0.0-rc.2", + "jsr:@std/fmt@^0.225.4", + "jsr:@std/media-types@^1.0.0-rc.1", + "jsr:@std/net@^0.224.3", + "jsr:@std/path@1.0.0-rc.2", + "jsr:@std/streams@^0.224.5" + ] + }, + "@std/io@0.224.8": { + "integrity": "f525d05d51fd873de6352b9afcf35cab9ab5dc448bf3c20e0c8b521ded9be392", + "dependencies": [ + "jsr:@std/bytes@^1.0.2" + ] + }, + "@std/json@1.0.0": { + "integrity": "985c1e544918d42e4e84072fc739ac4a19c3a5093292c99742ffcdd03fb6a268" + }, + "@std/jsonc@0.224.3": { + "integrity": "c10770a31489f5b85a3562d9b107c497666d8b6a49291ee2711d84da2616c2d6", + "dependencies": [ + "jsr:@std/json@^1.0.0-rc.1" + ] + }, + "@std/log@0.224.7": { + "integrity": "021941e5cd16de60cb11599c9b36f892aea95987fe66c753922808da27909e18", + "dependencies": [ + "jsr:@std/fmt@^1.0.2", + "jsr:@std/fs@^1.0.3", + "jsr:@std/io@^0.224.7" + ] + }, + "@std/media-types@0.224.1": { + "integrity": "9e69a5daed37c5b5c6d3ce4731dc191f80e67f79bed392b0957d1d03b87f11e1" + }, + "@std/media-types@1.0.3": { + "integrity": "b12d30a7852f7578f4d210622df713bbfd1cbdd9b4ec2eaf5c1845ab70bab159" + }, + "@std/net@0.224.5": { + "integrity": "9c2ae90a5c3dc7771da5ae5e13b6f7d5d0b316c1954c5d53f2bfc1129fb757ff" + }, + "@std/path@0.224.0": { + "integrity": "55bca6361e5a6d158b9380e82d4981d82d338ec587de02951e2b7c3a24910ee6", + "dependencies": [ + "jsr:@std/assert@^0.224.0" + ] + }, + "@std/path@1.0.0-rc.2": { + "integrity": "39f20d37a44d1867abac8d91c169359ea6e942237a45a99ee1e091b32b921c7d" + }, + "@std/permissions@0.224.0": { + "integrity": "1a2dba903795bc4d43fb49fc44b7f6cd00e2f472d9abb3499aa56a5dd8ebb829" + }, + "@std/semver@0.224.3": { + "integrity": "7bb34b5ad46de2c0c73de0ca3e30081ef64b4361f66abd57c84ff1011c6a1233" + }, + "@std/streams@0.224.5": { + "integrity": "bcde7818dd5460d474cdbd674b15f6638b9cd73cd64e52bd852fba2bd4d8ec91", + "dependencies": [ + "jsr:@std/bytes@^1.0.0-rc.3", + "jsr:@std/io@^0.224.1" + ] + }, + "@std/toml@0.224.1": { + "integrity": "c364b9ca3b18207223c4e2a1f652ef2970ff80967f7575ddf89b6b0565a17148", + "dependencies": [ + "jsr:@std/collections@^1.0.0-rc.1" + ] + }, + "@std/toml@1.0.1": { + "integrity": "b55b407159930f338d384b1f8fd317c8e8a35e27ebb8946155f49e3a158d16c4", + "dependencies": [ + "jsr:@std/collections@^1.0.5" + ] + }, + "@std/uuid@0.224.3": { + "integrity": "29167a84e77038de33c217e4adbc4b5733df00f04a59659de1685479fe87b568", + "dependencies": [ + "jsr:@std/bytes@^1.0.0-rc.3", + "jsr:@std/crypto@^0.224.0" + ] + }, + "@std/yaml@0.224.3": { + "integrity": "9da1ed0094f42ba24570b4d88a094b44a793ac7f2bc085c1939d3ac7e11cc0bb" + }, + "@std/yaml@1.0.5": { + "integrity": "71ba3d334305ee2149391931508b2c293a8490f94a337eef3a09cade1a2a2742" + } + } + }, "remote": { "https://cdn.skypack.dev/-/boolbase@v1.0.0-VOm51i7l8eNaWy5whtPS/dist=es2019,mode=imports/optimized/boolbase.js": "4940121004d9361cc93959178e9aed3ab5bf31a576ab4d39d1e757efb7bd3270", "https://cdn.skypack.dev/-/cheerio-select@v2.1.0-3jQ9aaXMWR0anNb0rdBs/dist=es2019,mode=imports/optimized/cheerio-select.js": "2e2c8d8d6e03462999dd804f0f773a4ac829c4bfdbcf0090237015fc17aac18b", @@ -415,6 +643,392 @@ "https://deno.land/std@0.217.0/yaml/schema/json.ts": "0fb9268282d266c24d963e75ef77f51accbbb74f40713a99e83ad621a81bc9ae", "https://deno.land/std@0.217.0/yaml/schema/mod.ts": "9bf7ff80c2a246f781bdcab979211d0389760831a974cf5883bf2016567e3507", "https://deno.land/std@0.217.0/yaml/stringify.ts": "580f8b2fa56e3233424520d8242f4fc0edf41ac54a6a6d2f6f8e0b6e99cd63c0", - "https://deno.land/std@0.217.0/yaml/type.ts": "708dde5f20b01cc1096489b7155b6af79a217d585afb841128e78c3c2391eb5c" + "https://deno.land/std@0.217.0/yaml/type.ts": "708dde5f20b01cc1096489b7155b6af79a217d585afb841128e78c3c2391eb5c", + "https://deno.land/std@0.224.0/archive/_common.ts": "5fcad5f7280cec1d20540b4a6e43ea9a6fd63daf9c4cf8a58c6321d07c32e317", + "https://deno.land/std@0.224.0/archive/tar.ts": "14ab32955e8dc15713436ff676b4cf141a73a6d7594489d2866c7d76e18922bd", + "https://deno.land/std@0.224.0/assert/assert.ts": "09d30564c09de846855b7b071e62b5974b001bb72a4b797958fe0660e7849834", + "https://deno.land/std@0.224.0/assert/assert_exists.ts": "43420cf7f956748ae6ed1230646567b3593cb7a36c5a5327269279c870c5ddfd", + "https://deno.land/std@0.224.0/assert/assertion_error.ts": "ba8752bd27ebc51f723702fac2f54d3e94447598f54264a6653d6413738a8917", + "https://deno.land/std@0.224.0/async/_util.ts": "3e94e674c974c5c9277f6b3ba2d4e8403c320ba5cebb891f50afa3af4b8e0ac9", + "https://deno.land/std@0.224.0/async/abortable.ts": "ea6ddb98c1c6f066d5b26c8fd030e2d5afa54571182674aa07929c39dfa8c5b2", + "https://deno.land/std@0.224.0/async/deadline.ts": "008929d69b1efdd11b1fa55784bb4882add6adf8722868b26e87f68e35efc573", + "https://deno.land/std@0.224.0/async/debounce.ts": "e7bcccb17b6fe34646ac5d37c2a6d3830ca049e7e3534d2aace4001596f42eff", + "https://deno.land/std@0.224.0/async/delay.ts": "f90dd685b97c2f142b8069082993e437b1602b8e2561134827eeb7c12b95c499", + "https://deno.land/std@0.224.0/async/mod.ts": "ae2b6869ad7563f825e037e02c263507da4a55563b4a0bcd9079d2c3eb2670a2", + "https://deno.land/std@0.224.0/async/mux_async_iterator.ts": "8d960e951c7bf6cb682522c2ebf5bd3e738b27c6a7ac9500ab64d27054930972", + "https://deno.land/std@0.224.0/async/pool.ts": "2b972e3643444b73f6a8bcdd19799a2d0821b28a45fbe47fd333223eb84327f0", + "https://deno.land/std@0.224.0/async/retry.ts": "29025b09259c22123c599b8c957aeff2755854272954776dc9a5846c72ea4cfe", + "https://deno.land/std@0.224.0/async/tee.ts": "34373c58950b7ac5950632dc8c9908076abeefcc9032d6299fff92194c284fbd", + "https://deno.land/std@0.224.0/bytes/concat.ts": "86161274b5546a02bdb3154652418efe7af8c9310e8d54107a68aaa148e0f5ed", + "https://deno.land/std@0.224.0/bytes/copy.ts": "08d85062240a7223e6ec4e2af193ad1a50c59a43f0d86ac3a7b16f3e0d77c028", + "https://deno.land/std@0.224.0/bytes/ends_with.ts": "18476239e2b26f662b33f46f23d6baaf796e27fe33769e3bf959658158472e5e", + "https://deno.land/std@0.224.0/bytes/equals.ts": "166c0de3614ebfa7a52ec658e5a5bd56a972d986fb6b50d5add0a0cdcb4f4a33", + "https://deno.land/std@0.224.0/bytes/includes_needle.ts": "becfe456fa1280fc10931ee3be3863029b61b96be1cbfb2fcd5e72e41dbe8cc6", + "https://deno.land/std@0.224.0/bytes/index_of_needle.ts": "c3c4f3769882018ae87a3c189fd2de939ecbaf7ef45f71a28425d707722d063f", + "https://deno.land/std@0.224.0/bytes/last_index_of_needle.ts": "b55ce2a716d60429c23df01f4d3312045ed9be45a33b3430c05356fff3180b07", + "https://deno.land/std@0.224.0/bytes/mod.ts": "291e7b0d0860944567a6105b01275ceb54e9d4c9eaf67b77a064e6445153932a", + "https://deno.land/std@0.224.0/bytes/repeat.ts": "2548d326056b24d46d4d7e8a7f9ef47f485043f1101becbe99050b90015fcabd", + "https://deno.land/std@0.224.0/bytes/starts_with.ts": "98f74169ac5e867265e5643b0824fe00947f72bc47e026c5d198e7d917cd7b34", + "https://deno.land/std@0.224.0/cli/parse_args.ts": "5250832fb7c544d9111e8a41ad272c016f5a53f975ef84d5a9fe5fcb70566ece", + "https://deno.land/std@0.224.0/collections/_utils.ts": "b2ec8ada31b5a72ebb1d99774b849b4c09fe4b3a38d07794bd010bd218a16e0b", + "https://deno.land/std@0.224.0/collections/aggregate_groups.ts": "c63a57a16e87537ee71df1174a111e2c4cd05f0d4be83db701c8740e81bd157c", + "https://deno.land/std@0.224.0/collections/associate_by.ts": "8c09c6a66769480f3181bd7b582796aed85fa71e2595c1b3d73684b9caae33b1", + "https://deno.land/std@0.224.0/collections/associate_with.ts": "5cbbdb53ffb0160338b86d7c3ba6e0b343c66d5104ccff4430dd766c603ea3d4", + "https://deno.land/std@0.224.0/collections/chunk.ts": "e6e533d6ae047f2082892831d463426f79cdd0d3f09ce298317a8469abf8467e", + "https://deno.land/std@0.224.0/collections/deep_merge.ts": "04f8d2a6cfa15c7580e788689bcb5e162512b9ccb18bab1241824b432a78551e", + "https://deno.land/std@0.224.0/collections/distinct.ts": "42d81633e4ccd5ea89118cb08f875bbfc683ac6620df2fa60f3d07270b177f4d", + "https://deno.land/std@0.224.0/collections/distinct_by.ts": "e895705decb0ce88b31c6679fd4e2bd08ac6d47cde7d00bf2016e3c2bac565a7", + "https://deno.land/std@0.224.0/collections/drop_last_while.ts": "4bfb91818d0165b172843bfd41a8b988e566b23a29e038794ca832118de150bf", + "https://deno.land/std@0.224.0/collections/drop_while.ts": "cf15d7f83ece2828e1fe04bbe04b646801d11be9c259a0f47c1b0ac2aa7dabdf", + "https://deno.land/std@0.224.0/collections/filter_entries.ts": "12202e99001695fcf541ec0191e9762fe7290ba4597df762d3a0c6e611a1aafe", + "https://deno.land/std@0.224.0/collections/filter_keys.ts": "bf8eaae2769e6ddd34f23ba1912f7feda2b6f374253c07a6630e9a2e384ba611", + "https://deno.land/std@0.224.0/collections/filter_values.ts": "ad8fae5751977598f8c794d65f0d42c9f9e47a7d774cf82b2449cd78ff4f729a", + "https://deno.land/std@0.224.0/collections/find_single.ts": "d2f69dd19d85c85d0f82ffff18517076795fe8a4a960b75f33b00655e070d6f7", + "https://deno.land/std@0.224.0/collections/first_not_nullish_of.ts": "cc5581ace9b896c83b9c002dc90a2f7b4c5dcddc319d78542287479dd348c300", + "https://deno.land/std@0.224.0/collections/includes_value.ts": "c5755ad1ac0b95cdc60ca794ada0e65e85ecad96729a9f6cd715516b77497564", + "https://deno.land/std@0.224.0/collections/intersect.ts": "9a4427ce81bd0982f4e6e65c51da99648b09f89ed0e4950fcf89fc7052336e60", + "https://deno.land/std@0.224.0/collections/join_to_string.ts": "6f3441958aeb382e8e35be527e5ff5e6f6346e83ac4c17fe3f9fa293eff0f18e", + "https://deno.land/std@0.224.0/collections/map_entries.ts": "45b8bf3f197ee24abe2e078213a4cf2f4e187ad130649fff34e13b1a03ede478", + "https://deno.land/std@0.224.0/collections/map_keys.ts": "2fd91963117d2376ea6dbbe473d77c20ede79b72437ed0dac36161b1af62f058", + "https://deno.land/std@0.224.0/collections/map_not_nullish.ts": "f519f74db550afcf6c6e2486382cb4dc6b0465e4234b6acca26910d118e7dd55", + "https://deno.land/std@0.224.0/collections/map_values.ts": "91d6ece4b4dc4b94abc378f51e0e309e7f7f18b2ce4c335dab673a31ebd17c75", + "https://deno.land/std@0.224.0/collections/max_by.ts": "a601c296d54349097d5b424bc86c84010ab22733b622b480e2ad65927063d7bb", + "https://deno.land/std@0.224.0/collections/max_of.ts": "a56297ed49ee42eb948d348451c9158c9f7b8e4e1fc0259829e945924893ca07", + "https://deno.land/std@0.224.0/collections/max_with.ts": "ea4838b17246166991ed033c52b43f04be957168c12bdb193b0f8ffdd046a6d0", + "https://deno.land/std@0.224.0/collections/min_by.ts": "79477d359b5882acf670179ba18ac619b63bb01f8a681d067f9fb318f3367dfe", + "https://deno.land/std@0.224.0/collections/min_of.ts": "a80b6881494f505fe42c160317225c99a69bf393419563063ac2dd258cffd9b2", + "https://deno.land/std@0.224.0/collections/min_with.ts": "94e011b9f0329be593527975c5f511b02010c4f42a50098297cb5012a418ac76", + "https://deno.land/std@0.224.0/collections/mod.ts": "c65d90938582b7d0b3e8fc319cc6d41d736f87656a256428c7b4cd600703fd62", + "https://deno.land/std@0.224.0/collections/omit.ts": "7a875ecbb02e3c418195325fd8c520bcf492362344d4d6b295d2e0f101ccccae", + "https://deno.land/std@0.224.0/collections/partition.ts": "22689dc4834bbcaa06f9ac204ac5502ab0f7087d7fca26bad50319c12434d099", + "https://deno.land/std@0.224.0/collections/partition_entries.ts": "4112ef54d8f1b24a281a432d1d55e183c260139da9153a8449021884ff2bd675", + "https://deno.land/std@0.224.0/collections/permutations.ts": "976f444c0fe52f764ad473d2dbcfbc5a97a3066aebed2f809e084c548dcf7f19", + "https://deno.land/std@0.224.0/collections/pick.ts": "eb3940ff8107e5990e35b30f4cc63f52a469e35b53dc83f904b0f30fab968bc3", + "https://deno.land/std@0.224.0/collections/reduce_groups.ts": "59a375aec7dfacdf1f22c39e618fbbfbfb50ed36e338b1c57c704beadaeef2a7", + "https://deno.land/std@0.224.0/collections/running_reduce.ts": "b8b4b5bf0b3d61db8fc0993b9e7e630fba299e360c463ebb0d3ce7e12a65abeb", + "https://deno.land/std@0.224.0/collections/sample.ts": "bdf721d86a6eb3d27ae419aea92a2f24a3de19772b24aad831064e8a0ff7ecd1", + "https://deno.land/std@0.224.0/collections/sliding_windows.ts": "254402e0603a94063a90e5561c48435c2fb278b8915e801632b8deebdd731219", + "https://deno.land/std@0.224.0/collections/sort_by.ts": "c84b51b70e9698313c021d11531a1eb07ddda0f423b7778e3cda24663c8b0eaa", + "https://deno.land/std@0.224.0/collections/sum_of.ts": "a7617a77c2501a54dedf50bc4211ca6c06c9678eee00c31a63e187cc8f0b3b97", + "https://deno.land/std@0.224.0/collections/take_last_while.ts": "d6e05d89e17c4e59015aff3b8e2b08a9d72314c77363590c0db2775f43cbf47b", + "https://deno.land/std@0.224.0/collections/take_while.ts": "b281c439e5195bc1e8a7f75aa538b4a920aeae9b29a45f0df468b4f48434506d", + "https://deno.land/std@0.224.0/collections/union.ts": "7eaec5f85dbf115e14695a740ce43b0463f6202ee2b10408b31efa7b4eeb1968", + "https://deno.land/std@0.224.0/collections/unzip.ts": "7dbe500a7b283a4ad6000316f98e0f590f084be103b3ea2e0519a7e3d98a38b2", + "https://deno.land/std@0.224.0/collections/without_all.ts": "c85ec7c536037385d1b99f9820ccb0e05eea385422e74132c8c081f4dcb353e5", + "https://deno.land/std@0.224.0/collections/zip.ts": "5320938b447da8a8ed4811d6248829886c7ddd088e1653cfce6e59d0abb73692", + "https://deno.land/std@0.224.0/crypto/_wasm/lib/deno_std_wasm_crypto.generated.mjs": "7cd490ae1553c97459bd02de4c3f0a552768a85621949b2366003f3cf84b99d7", + "https://deno.land/std@0.224.0/crypto/_wasm/mod.ts": "e89fbbc3c4722602ff975dd85f18273c7741ec766a9b68f6de4fd1d9876409f8", + "https://deno.land/std@0.224.0/crypto/crypto.ts": "e58d78f3db111a499261dbab037ec78cc89da0516a50e1f0205665980a3417e3", + "https://deno.land/std@0.224.0/crypto/mod.ts": "9148fb70ca3d64977e9487b2002d3b1026e8ad8a2078774b807586ba3c77e3bb", + "https://deno.land/std@0.224.0/crypto/timing_safe_equal.ts": "bc3622b5aec05e2d8b735bf60633425c34333c06cfb6c4a9f102e4a0f3931ced", + "https://deno.land/std@0.224.0/crypto/unstable_keystack.ts": "c2a6f6ed67a4e78745e3c9b490ebb7c12f6066f5c2fe0c69d353961909dc82dd", + "https://deno.land/std@0.224.0/csv/_io.ts": "568718b7eb4cf3ba140b0690a00ef5a8416ceae9a4116f386114c83717bd8a9e", + "https://deno.land/std@0.224.0/csv/csv_parse_stream.ts": "f06696ed1fbda5cb75426dff735b9cc91227eb0fa5367591b98bf88b99ae3048", + "https://deno.land/std@0.224.0/csv/csv_stringify_stream.ts": "b564e43b884eb9ab8e1efee8c30a0868a1a9328a33c32a7dd436dc26f63954ac", + "https://deno.land/std@0.224.0/csv/mod.ts": "289ecf79b3609f63dfc1d39a7c791f8f14b73b29fb65bbb6b3e3e2bd0cddc75d", + "https://deno.land/std@0.224.0/csv/parse.ts": "e2d5e82e19b71a968f5fcd3b76b438ee6f646fe8e948c4c2d3b00ad9cd0a659a", + "https://deno.land/std@0.224.0/csv/stringify.ts": "9e0badcbc32fc63ee089d2dfbc5721650d5766ef0a554f07243ab8f03f7c3127", + "https://deno.land/std@0.224.0/datetime/_date_time_formatter.ts": "b810c4c0d8f7aafe765fb963efdbf704acceb0730f5b242a7ec46df37834307c", + "https://deno.land/std@0.224.0/datetime/constants.ts": "5df80a84e301da6db5793804122c034d2d090da31f1e1c5fdaa831fc70a45da7", + "https://deno.land/std@0.224.0/datetime/day_of_year.ts": "5e513e239bd473e86d6a869d154720e9b6b8c86e1f14330ed5bb97575d9fa07b", + "https://deno.land/std@0.224.0/datetime/difference.ts": "8da08374910cae7d316cd7669912b70465f36d4e159e2c9f525a441f91fa9c7a", + "https://deno.land/std@0.224.0/datetime/format.ts": "8a550406530533c4aba101d471695f7f96c0eae61c1346748708eb333290d5f8", + "https://deno.land/std@0.224.0/datetime/is_leap.ts": "77f6eb9a4b7ea2a2dedbfecf75fd0a3f8f0e1610f708480e692f401f29e72650", + "https://deno.land/std@0.224.0/datetime/mod.ts": "6a49163dd0c7986658ed425b3555da5312252e5f5156bced6ae7199e651aa83b", + "https://deno.land/std@0.224.0/datetime/parse.ts": "d6dea8b3e394908dfd016bbe4545f260da4032493294aee1d10a3cf194c191cb", + "https://deno.land/std@0.224.0/datetime/week_of_year.ts": "ecaff056953753db3dabc9a769f80ff7ea7be79ae1e34edb5e2bda336f685757", + "https://deno.land/std@0.224.0/dotenv/mod.ts": "0180eaeedaaf88647318811cdaa418cc64dc51fb08354f91f5f480d0a1309f7d", + "https://deno.land/std@0.224.0/dotenv/parse.ts": "09977ff88dfd1f24f9973a338f0f91bbdb9307eb5ff6085446e7c423e4c7ba0c", + "https://deno.land/std@0.224.0/dotenv/stringify.ts": "275da322c409170160440836342eaa7cf012a1d11a7e700d8ca4e7f2f8aa4615", + "https://deno.land/std@0.224.0/encoding/_util.ts": "beacef316c1255da9bc8e95afb1fa56ed69baef919c88dc06ae6cb7a6103d376", + "https://deno.land/std@0.224.0/encoding/ascii85.ts": "855a556107248b0f1836761141555c61a315e8b70baa8149a28b5b794c20ee30", + "https://deno.land/std@0.224.0/encoding/base32.ts": "02744a37df78abeaa0b3251e850bfee7c232f26fedc5a62b6c68cb2b99733984", + "https://deno.land/std@0.224.0/encoding/base58.ts": "fec1fd3d9926860e3082359de9046fca816e33378ab58071619224b4dd5b9038", + "https://deno.land/std@0.224.0/encoding/base64.ts": "dd59695391584c8ffc5a296ba82bcdba6dd8a84d41a6a539fbee8e5075286eaf", + "https://deno.land/std@0.224.0/encoding/base64url.ts": "ef40e0f18315ab539f17cebcc32839779e018d86dea9df39d94d302f342a1713", + "https://deno.land/std@0.224.0/encoding/hex.ts": "6270f25e5d85f99fcf315278670ba012b04b7c94b67715b53f30d03249687c07", + "https://deno.land/std@0.224.0/encoding/varint.ts": "31f30461f95ae95fcb0bcf07d6258c8582e65e8f5edde73b655e40fc9a891ad0", + "https://deno.land/std@0.224.0/flags/mod.ts": "88553267f34519c8982212185339efdb2d2e62c159ec558f47eb50c8952a6be3", + "https://deno.land/std@0.224.0/fmt/bytes.ts": "7b294a4b9cf0297efa55acb55d50610f3e116a0ac772d1df0ae00f0b833ccd4a", + "https://deno.land/std@0.224.0/fmt/colors.ts": "508563c0659dd7198ba4bbf87e97f654af3c34eb56ba790260f252ad8012e1c5", + "https://deno.land/std@0.224.0/fmt/printf.ts": "8d01408076e2f956b03dd8377010c4974515d6cc909978d2edc5c8cd75077eeb", + "https://deno.land/std@0.224.0/front_matter/_formats.ts": "9a8ac1524f93b3ae093bd66864a49fc0088037920c6d60863da136d10f92e04d", + "https://deno.land/std@0.224.0/front_matter/create_extractor.ts": "642e6e55cd07864b7c8068f88d271290d5d0a13d979ad335e10a7f52046b1f80", + "https://deno.land/std@0.224.0/front_matter/json.ts": "bc9dc5d4caebd0aa8957734e29f16362f9fa127768c1590fc201a250cfb7804d", + "https://deno.land/std@0.224.0/front_matter/mod.ts": "ed57ed6de52ec90bd1212852c5a1daa0dcc0df8110d18444fb55b9aa5f86fbb5", + "https://deno.land/std@0.224.0/front_matter/test.ts": "6a72a690ef9bd606411e3e78dfd44f382fce58f722ed6e56ce57d65140368822", + "https://deno.land/std@0.224.0/front_matter/toml.ts": "784fb9e496198ac0434edd40f23d1579b9bc42c563906e3a6efedd713d060c4e", + "https://deno.land/std@0.224.0/front_matter/yaml.ts": "103b8338bec480c6b7a7e245cf6bda72682eb78ed2231c799a4526d52cb6888a", + "https://deno.land/std@0.224.0/fs/_create_walk_entry.ts": "5d9d2aaec05bcf09a06748b1684224d33eba7a4de24cf4cf5599991ca6b5b412", + "https://deno.land/std@0.224.0/fs/_get_file_info_type.ts": "da7bec18a7661dba360a1db475b826b18977582ce6fc9b25f3d4ee0403fe8cbd", + "https://deno.land/std@0.224.0/fs/_is_same_path.ts": "709c95868345fea051c58b9e96af95cff94e6ae98dfcff2b66dee0c212c4221f", + "https://deno.land/std@0.224.0/fs/_is_subdir.ts": "c68b309d46cc8568ed83c000f608a61bbdba0943b7524e7a30f9e450cf67eecd", + "https://deno.land/std@0.224.0/fs/_to_path_string.ts": "29bfc9c6c112254961d75cbf6ba814d6de5349767818eb93090cecfa9665591e", + "https://deno.land/std@0.224.0/fs/copy.ts": "7ab12a16adb65d155d4943c88081ca16ce3b0b5acada64c1ce93800653678039", + "https://deno.land/std@0.224.0/fs/empty_dir.ts": "e400e96e1d2c8c558a5a1712063bd43939e00619c1d1cc29959babc6f1639418", + "https://deno.land/std@0.224.0/fs/ensure_dir.ts": "51a6279016c65d2985f8803c848e2888e206d1b510686a509fa7cc34ce59d29f", + "https://deno.land/std@0.224.0/fs/ensure_file.ts": "67608cf550529f3d4aa1f8b6b36bf817bdc40b14487bf8f60e61cbf68f507cf3", + "https://deno.land/std@0.224.0/fs/ensure_link.ts": "5c98503ebfa9cc05e2f2efaa30e91e60b4dd5b43ebbda82f435c0a5c6e3ffa01", + "https://deno.land/std@0.224.0/fs/ensure_symlink.ts": "cafe904cebacb9a761977d6dbf5e3af938be946a723bb394080b9a52714fafe4", + "https://deno.land/std@0.224.0/fs/eol.ts": "18c4ac009d0318504c285879eb7f47942643f13619e0ff070a0edc59353306bd", + "https://deno.land/std@0.224.0/fs/exists.ts": "3d38cb7dcbca3cf313be343a7b8af18a87bddb4b5ca1bd2314be12d06533b50f", + "https://deno.land/std@0.224.0/fs/expand_glob.ts": "2e428d90acc6676b2aa7b5c78ef48f30641b13f1fe658e7976c9064fb4b05309", + "https://deno.land/std@0.224.0/fs/mod.ts": "c25e6802cbf27f3050f60b26b00c2d8dba1cb7fcdafe34c66006a7473b7b34d4", + "https://deno.land/std@0.224.0/fs/move.ts": "ca205d848908d7f217353bc5c623627b1333490b8b5d3ef4cab600a700c9bd8f", + "https://deno.land/std@0.224.0/fs/walk.ts": "cddf87d2705c0163bff5d7767291f05b0f46ba10b8b28f227c3849cace08d303", + "https://deno.land/std@0.224.0/http/_negotiation/common.ts": "051a9f6edd1ed69507df89bbc16fc1b13b7654b9b8fd38072ec33ae4c185fc13", + "https://deno.land/std@0.224.0/http/_negotiation/encoding.ts": "fdedea1145c1dea3b3de2d5217e8eb927e764083eebc8c52d09a1ed3d9bb7a93", + "https://deno.land/std@0.224.0/http/_negotiation/language.ts": "300a5c586f844c97f246ab72c948e9fde9a8f45e92ec08e1cc9a9df80259e2a3", + "https://deno.land/std@0.224.0/http/_negotiation/media_type.ts": "87a1ecb22c1b268d0fa23d798e1ea238343505268cb1ff82bd038638de29ce31", + "https://deno.land/std@0.224.0/http/cookie.ts": "a377fa60175ba5f61dd4b8a70b34f2bbfbc70782dfd5faf36d314c42e4306006", + "https://deno.land/std@0.224.0/http/etag.ts": "9ca56531be682f202e4239971931060b688ee5c362688e239eeaca39db9e72cb", + "https://deno.land/std@0.224.0/http/file_server.ts": "2a5392195b8e7713288f274d071711b705bb5b3220294d76cce495d456c61a93", + "https://deno.land/std@0.224.0/http/mod.ts": "b0e06293a8a2f71b041add53d4674d4997bd2b83a4760bddad1b5e552130bcc8", + "https://deno.land/std@0.224.0/http/negotiation.ts": "d06ef2958ca712a7dbe4538eed6a46abfa2b87f8e150b7c89d83a6055dabd7cc", + "https://deno.land/std@0.224.0/http/server.ts": "f9313804bf6467a1704f45f76cb6cd0a3396a3b31c316035e6a4c2035d1ea514", + "https://deno.land/std@0.224.0/http/server_sent_event_stream.ts": "d9c20b46f986d78f60c38dbd91e95c71d73b45f29739a8ef4216dfa5f2e71eb3", + "https://deno.land/std@0.224.0/http/status.ts": "ed61b4882af2514a81aefd3245e8df4c47b9a8e54929a903577643d2d1ebf514", + "https://deno.land/std@0.224.0/http/unstable_signed_cookie.ts": "2a5bfbdf6b4aa35ef1464300fe1ba4eb89eb79f535c9cb28401d55fbb7038479", + "https://deno.land/std@0.224.0/http/user_agent.ts": "05f8849c7e27b898793bfc70204f0c72b6be9bee7accbe98e18a1c413bd4ace3", + "https://deno.land/std@0.224.0/io/_common.ts": "36705cdb4dfcd338d6131bca1b16e48a4d5bf0d1dada6ce397268e88c17a5835", + "https://deno.land/std@0.224.0/io/_constants.ts": "3c7ad4695832e6e4a32e35f218c70376b62bc78621ef069a4a0a3d55739f8856", + "https://deno.land/std@0.224.0/io/buf_reader.ts": "aa6d589e567c964c8ba1f582648f3feac45e88ab2e3d2cc2c9f84fd73c05d051", + "https://deno.land/std@0.224.0/io/buf_writer.ts": "3fab3fbeae7a6ed1672207b640b6781a2369890878f8a7bb35f95d364dd6dae6", + "https://deno.land/std@0.224.0/io/buffer.ts": "4d1f805f350433e418002accec798bc6c33ce18f614afa65f987c202d7b2234e", + "https://deno.land/std@0.224.0/io/copy.ts": "63c6a4acf71fb1e89f5e47a7b3b2972f9d2c56dd645560975ead72db7eb23f61", + "https://deno.land/std@0.224.0/io/copy_n.ts": "1bad1525b1f78737cb4c11084e2f7cf22359210fea89e2f0e784bd9a4b221fca", + "https://deno.land/std@0.224.0/io/iterate_reader.ts": "1e5e4fea22d8965afb7df4ee9ab9adda0a0fc581adbea31bc2f2d25453f8a6e9", + "https://deno.land/std@0.224.0/io/limited_reader.ts": "bbe3f7dafe9dd076d0c92d88b1b94e91ecad4825997064f44c2a767737ad2526", + "https://deno.land/std@0.224.0/io/mod.ts": "f0a3f9d419394cec27099ba15ab0c8100da1e70928f95ebe646caaf667c6870c", + "https://deno.land/std@0.224.0/io/multi_reader.ts": "dd8f06d50adec0e1befb92a1d354fcf28733a4b1669b23bf534ace161ce61b1c", + "https://deno.land/std@0.224.0/io/read_all.ts": "876c1cb20adea15349c72afc86cecd3573335845ae778967aefb5e55fe5a8a4a", + "https://deno.land/std@0.224.0/io/read_delim.ts": "d26cfed53b0c2c127ec3453ccd65f474ecc36a331209e246448885434afffc4e", + "https://deno.land/std@0.224.0/io/read_int.ts": "2412f106103a271f5d770b2a61c97b13eebcd18de414a0a092ed82dfcb875903", + "https://deno.land/std@0.224.0/io/read_lines.ts": "17b96f87dbebc5edb976b3d83dc7713bddb994e9c8cb688012d6c6c26803fb9e", + "https://deno.land/std@0.224.0/io/read_long.ts": "d7cd367ab5c1263014c32a76afa0f0584c3bf3a3d860963c7368a6825094df46", + "https://deno.land/std@0.224.0/io/read_range.ts": "2ddfedbfff44e4ea8d60c0463cddb2b1860293d932d6a72a0fb78bdf412538fc", + "https://deno.land/std@0.224.0/io/read_short.ts": "f6dff570e685ade917dcb5188e8ecf0b701d6581b0cd186f08e6efe7f5ce33f7", + "https://deno.land/std@0.224.0/io/read_string_delim.ts": "f6beafa8969e6d9d6d7d679f846cd6595d8b6e99091a20a0aecbd50eb30a391e", + "https://deno.land/std@0.224.0/io/reader_from_stream_reader.ts": "a75bbc93f39df8b0e372cc1fbdc416a7cbf2a39fc4c09ddb057f1241100191c5", + "https://deno.land/std@0.224.0/io/slice_long_to_bytes.ts": "bc59a7aaac64845371dbd44debf3e864ae7b7e453127751d96e30adb29fb633b", + "https://deno.land/std@0.224.0/io/string_reader.ts": "279e9ea72e0ed7af6a9cb6da84f4148af93df849d308c31f124ca21f16d09cf2", + "https://deno.land/std@0.224.0/io/string_writer.ts": "923954c2038a622b84c294b94a3a322565fa0d67e8b4c62942b154fc1ad3bb9b", + "https://deno.land/std@0.224.0/io/to_readable_stream.ts": "ed03a44a1ec1cc55a85a857acf6cac472035298f6f3b6207ea209f93b4aefb39", + "https://deno.land/std@0.224.0/io/to_writable_stream.ts": "ef422e0425963c8a1e0481674e66c3023da50f0acbe5ef51ec9789efc3c1e2ed", + "https://deno.land/std@0.224.0/io/types.ts": "acecb3074c730b5ff487ba4fe9ce51e67bd982aa07c95e5f5679b7b2f24ad129", + "https://deno.land/std@0.224.0/io/write_all.ts": "24aac2312bb21096ae3ae0b102b22c26164d3249dff96dbac130958aa736f038", + "https://deno.land/std@0.224.0/json/common.ts": "33f1a4f39a45e2f9f357823fd0b5cf88b63fb4784b8c9a28f8120f70a20b23e9", + "https://deno.land/std@0.224.0/jsonc/mod.ts": "1756f094e00894ec27416b4fcccbcf445e73892a83cf1937de3aad7de2d5da7c", + "https://deno.land/std@0.224.0/jsonc/parse.ts": "06fbe10f0bb0cba684f7902bf7de5126b16eb0e5a82220c98a4b86675c7f9cff", + "https://deno.land/std@0.224.0/log/_config.ts": "489e11b6d3c917bf5fc954c5e914c095d3480efd924d1e85f2fc576468581c54", + "https://deno.land/std@0.224.0/log/_state.ts": "314c0c31ab9c8f4fb33326ad446757d35f75e5bb21746b7720ed4e3f3a939da1", + "https://deno.land/std@0.224.0/log/base_handler.ts": "f03f013dac9c1a226aab60c6f5751b3131cc4f2808720715285e0dab5697a54e", + "https://deno.land/std@0.224.0/log/console_handler.ts": "9b17b9025c7d94eab950a25eccca81fd9dd71d063b9f458f149e52db52ab0295", + "https://deno.land/std@0.224.0/log/critical.ts": "a8b44a4c6768629d2a506ffe1a1a048da7ae76d3146000f8a492008eac4ecba0", + "https://deno.land/std@0.224.0/log/debug.ts": "ddd63a549fedc3061deba47e41cd2170263831fc266e503a12b610b77439333b", + "https://deno.land/std@0.224.0/log/error.ts": "3979ee3aadc962345ad50eff8a5470ad3fe07c70370808ddc178ee08c3d6c89c", + "https://deno.land/std@0.224.0/log/file_handler.ts": "68d6d81ec53bdd6ba61eaceec19d12de59a8ad12ace0d7980a592a51f924a242", + "https://deno.land/std@0.224.0/log/formatters.ts": "29e0325902c3b1cbb3b9ffc1f9d77ac2d2e5af35d27b9bdfe4fdbbd83588d4a8", + "https://deno.land/std@0.224.0/log/get_logger.ts": "36a5febf5338f68aadafaf23bbe38a208e2a3150ec02ca2ec5d3c6bbaf840641", + "https://deno.land/std@0.224.0/log/info.ts": "e6c4971e35092d85cd3241fe7eccdb42999083d14db6aadc5e741f6231e275ad", + "https://deno.land/std@0.224.0/log/levels.ts": "632ba12baa2600750d004cc5cb4eabe10e410f3f2bdfcb9f7142b6d767f2fee6", + "https://deno.land/std@0.224.0/log/logger.ts": "57109848fb587fb3843a7b893f22f1a86c1b78c289172627a6305906738f238a", + "https://deno.land/std@0.224.0/log/mod.ts": "650c53c2c5d9eb05210c4ec54184ecb5bd24fb32ce28e65fad039853978f53f3", + "https://deno.land/std@0.224.0/log/rotating_file_handler.ts": "a6e7c712e568b618303273ff95483f6ab86dec0a485c73c2e399765f752b5aa8", + "https://deno.land/std@0.224.0/log/setup.ts": "42425c550da52c7def7f63a4fcc1ac01a4aec6c73336697a640978d6a324e7a6", + "https://deno.land/std@0.224.0/log/warn.ts": "f1a6bc33a481f231a0257e6d66e26c2e695b931d5e917d8de4f2b825778dfd4e", + "https://deno.land/std@0.224.0/media_types/_db.ts": "19563a2491cd81b53b9c1c6ffd1a9145c355042d4a854c52f6e1424f73ff3923", + "https://deno.land/std@0.224.0/media_types/_util.ts": "e0b8da0c7d8ad2015cf27ac16ddf0809ac984b2f3ec79f7fa4206659d4f10deb", + "https://deno.land/std@0.224.0/media_types/content_type.ts": "ed3f2e1f243b418ad3f441edc95fd92efbadb0f9bde36219c7564c67f9639513", + "https://deno.land/std@0.224.0/media_types/extension.ts": "ec91e1818864cb84f8053ecafb270eaca702412c15c2086929ae34132e11c56a", + "https://deno.land/std@0.224.0/media_types/extensions_by_type.ts": "9db10797e09421815688c8f7a2fbfd5dcb040fa5c488278f1b9e04359369bd0b", + "https://deno.land/std@0.224.0/media_types/format_media_type.ts": "ffef4718afa2489530cb94021bb865a466eb02037609f7e82899c017959d288a", + "https://deno.land/std@0.224.0/media_types/get_charset.ts": "277ebfceb205bd34e616fe6764ef03fb277b77f040706272bea8680806ae3f11", + "https://deno.land/std@0.224.0/media_types/mod.ts": "c8acfa43ce3993e99f4d8aa60fb828a4eee3ab6920aaeb90f6a3d63f6f4f3435", + "https://deno.land/std@0.224.0/media_types/parse_media_type.ts": "487f000a38c230ccbac25420a50f600862e06796d0eee19d19631b9e84ee9654", + "https://deno.land/std@0.224.0/media_types/type_by_extension.ts": "bf4e3f5d6b58b624d5daa01cbb8b1e86d9939940a77e7c26e796a075b60ec73b", + "https://deno.land/std@0.224.0/media_types/vendor/mime-db.v1.52.0.ts": "0218d2c7d900e8cd6fa4a866e0c387712af4af9a1bae55d6b2546c73d273a1e6", + "https://deno.land/std@0.224.0/path/_common/assert_path.ts": "dbdd757a465b690b2cc72fc5fb7698c51507dec6bfafce4ca500c46b76ff7bd8", + "https://deno.land/std@0.224.0/path/_common/basename.ts": "569744855bc8445f3a56087fd2aed56bdad39da971a8d92b138c9913aecc5fa2", + "https://deno.land/std@0.224.0/path/_common/common.ts": "ef73c2860694775fe8ffcbcdd387f9f97c7a656febf0daa8c73b56f4d8a7bd4c", + "https://deno.land/std@0.224.0/path/_common/constants.ts": "dc5f8057159f4b48cd304eb3027e42f1148cf4df1fb4240774d3492b5d12ac0c", + "https://deno.land/std@0.224.0/path/_common/dirname.ts": "684df4aa71a04bbcc346c692c8485594fc8a90b9408dfbc26ff32cf3e0c98cc8", + "https://deno.land/std@0.224.0/path/_common/format.ts": "92500e91ea5de21c97f5fe91e178bae62af524b72d5fcd246d6d60ae4bcada8b", + "https://deno.land/std@0.224.0/path/_common/from_file_url.ts": "d672bdeebc11bf80e99bf266f886c70963107bdd31134c4e249eef51133ceccf", + "https://deno.land/std@0.224.0/path/_common/glob_to_reg_exp.ts": "6cac16d5c2dc23af7d66348a7ce430e5de4e70b0eede074bdbcf4903f4374d8d", + "https://deno.land/std@0.224.0/path/_common/normalize.ts": "684df4aa71a04bbcc346c692c8485594fc8a90b9408dfbc26ff32cf3e0c98cc8", + "https://deno.land/std@0.224.0/path/_common/normalize_string.ts": "33edef773c2a8e242761f731adeb2bd6d683e9c69e4e3d0092985bede74f4ac3", + "https://deno.land/std@0.224.0/path/_common/relative.ts": "faa2753d9b32320ed4ada0733261e3357c186e5705678d9dd08b97527deae607", + "https://deno.land/std@0.224.0/path/_common/strip_trailing_separators.ts": "7024a93447efcdcfeaa9339a98fa63ef9d53de363f1fbe9858970f1bba02655a", + "https://deno.land/std@0.224.0/path/_common/to_file_url.ts": "7f76adbc83ece1bba173e6e98a27c647712cab773d3f8cbe0398b74afc817883", + "https://deno.land/std@0.224.0/path/_interface.ts": "8dfeb930ca4a772c458a8c7bbe1e33216fe91c253411338ad80c5b6fa93ddba0", + "https://deno.land/std@0.224.0/path/_os.ts": "8fb9b90fb6b753bd8c77cfd8a33c2ff6c5f5bc185f50de8ca4ac6a05710b2c15", + "https://deno.land/std@0.224.0/path/basename.ts": "7ee495c2d1ee516ffff48fb9a93267ba928b5a3486b550be73071bc14f8cc63e", + "https://deno.land/std@0.224.0/path/common.ts": "03e52e22882402c986fe97ca3b5bb4263c2aa811c515ce84584b23bac4cc2643", + "https://deno.land/std@0.224.0/path/constants.ts": "0c206169ca104938ede9da48ac952de288f23343304a1c3cb6ec7625e7325f36", + "https://deno.land/std@0.224.0/path/dirname.ts": "85bd955bf31d62c9aafdd7ff561c4b5fb587d11a9a5a45e2b01aedffa4238a7c", + "https://deno.land/std@0.224.0/path/extname.ts": "593303db8ae8c865cbd9ceec6e55d4b9ac5410c1e276bfd3131916591b954441", + "https://deno.land/std@0.224.0/path/format.ts": "6ce1779b0980296cf2bc20d66436b12792102b831fd281ab9eb08fa8a3e6f6ac", + "https://deno.land/std@0.224.0/path/from_file_url.ts": "911833ae4fd10a1c84f6271f36151ab785955849117dc48c6e43b929504ee069", + "https://deno.land/std@0.224.0/path/glob_to_regexp.ts": "7f30f0a21439cadfdae1be1bf370880b415e676097fda584a63ce319053b5972", + "https://deno.land/std@0.224.0/path/is_absolute.ts": "4791afc8bfd0c87f0526eaa616b0d16e7b3ab6a65b62942e50eac68de4ef67d7", + "https://deno.land/std@0.224.0/path/is_glob.ts": "a65f6195d3058c3050ab905705891b412ff942a292bcbaa1a807a74439a14141", + "https://deno.land/std@0.224.0/path/join.ts": "ae2ec5ca44c7e84a235fd532e4a0116bfb1f2368b394db1c4fb75e3c0f26a33a", + "https://deno.land/std@0.224.0/path/join_globs.ts": "5b3bf248b93247194f94fa6947b612ab9d3abd571ca8386cf7789038545e54a0", + "https://deno.land/std@0.224.0/path/mod.ts": "f6bd79cb08be0e604201bc9de41ac9248582699d1b2ee0ab6bc9190d472cf9cd", + "https://deno.land/std@0.224.0/path/normalize.ts": "4155743ccceeed319b350c1e62e931600272fad8ad00c417b91df093867a8352", + "https://deno.land/std@0.224.0/path/normalize_glob.ts": "cc89a77a7d3b1d01053b9dcd59462b75482b11e9068ae6c754b5cf5d794b374f", + "https://deno.land/std@0.224.0/path/parse.ts": "77ad91dcb235a66c6f504df83087ce2a5471e67d79c402014f6e847389108d5a", + "https://deno.land/std@0.224.0/path/posix/_util.ts": "1e3937da30f080bfc99fe45d7ed23c47dd8585c5e473b2d771380d3a6937cf9d", + "https://deno.land/std@0.224.0/path/posix/basename.ts": "d2fa5fbbb1c5a3ab8b9326458a8d4ceac77580961b3739cd5bfd1d3541a3e5f0", + "https://deno.land/std@0.224.0/path/posix/common.ts": "26f60ccc8b2cac3e1613000c23ac5a7d392715d479e5be413473a37903a2b5d4", + "https://deno.land/std@0.224.0/path/posix/constants.ts": "93481efb98cdffa4c719c22a0182b994e5a6aed3047e1962f6c2c75b7592bef1", + "https://deno.land/std@0.224.0/path/posix/dirname.ts": "76cd348ffe92345711409f88d4d8561d8645353ac215c8e9c80140069bf42f00", + "https://deno.land/std@0.224.0/path/posix/extname.ts": "e398c1d9d1908d3756a7ed94199fcd169e79466dd88feffd2f47ce0abf9d61d2", + "https://deno.land/std@0.224.0/path/posix/format.ts": "185e9ee2091a42dd39e2a3b8e4925370ee8407572cee1ae52838aed96310c5c1", + "https://deno.land/std@0.224.0/path/posix/from_file_url.ts": "951aee3a2c46fd0ed488899d024c6352b59154c70552e90885ed0c2ab699bc40", + "https://deno.land/std@0.224.0/path/posix/glob_to_regexp.ts": "76f012fcdb22c04b633f536c0b9644d100861bea36e9da56a94b9c589a742e8f", + "https://deno.land/std@0.224.0/path/posix/is_absolute.ts": "cebe561ad0ae294f0ce0365a1879dcfca8abd872821519b4fcc8d8967f888ede", + "https://deno.land/std@0.224.0/path/posix/is_glob.ts": "8a8b08c08bf731acf2c1232218f1f45a11131bc01de81e5f803450a5914434b9", + "https://deno.land/std@0.224.0/path/posix/join.ts": "7fc2cb3716aa1b863e990baf30b101d768db479e70b7313b4866a088db016f63", + "https://deno.land/std@0.224.0/path/posix/join_globs.ts": "a9475b44645feddceb484ee0498e456f4add112e181cb94042cdc6d47d1cdd25", + "https://deno.land/std@0.224.0/path/posix/mod.ts": "2301fc1c54a28b349e20656f68a85f75befa0ee9b6cd75bfac3da5aca9c3f604", + "https://deno.land/std@0.224.0/path/posix/normalize.ts": "baeb49816a8299f90a0237d214cef46f00ba3e95c0d2ceb74205a6a584b58a91", + "https://deno.land/std@0.224.0/path/posix/normalize_glob.ts": "9c87a829b6c0f445d03b3ecadc14492e2864c3ebb966f4cea41e98326e4435c6", + "https://deno.land/std@0.224.0/path/posix/parse.ts": "09dfad0cae530f93627202f28c1befa78ea6e751f92f478ca2cc3b56be2cbb6a", + "https://deno.land/std@0.224.0/path/posix/relative.ts": "3907d6eda41f0ff723d336125a1ad4349112cd4d48f693859980314d5b9da31c", + "https://deno.land/std@0.224.0/path/posix/resolve.ts": "08b699cfeee10cb6857ccab38fa4b2ec703b0ea33e8e69964f29d02a2d5257cf", + "https://deno.land/std@0.224.0/path/posix/to_file_url.ts": "7aa752ba66a35049e0e4a4be5a0a31ac6b645257d2e031142abb1854de250aaf", + "https://deno.land/std@0.224.0/path/posix/to_namespaced_path.ts": "28b216b3c76f892a4dca9734ff1cc0045d135532bfd9c435ae4858bfa5a2ebf0", + "https://deno.land/std@0.224.0/path/relative.ts": "ab739d727180ed8727e34ed71d976912461d98e2b76de3d3de834c1066667add", + "https://deno.land/std@0.224.0/path/resolve.ts": "a6f977bdb4272e79d8d0ed4333e3d71367cc3926acf15ac271f1d059c8494d8d", + "https://deno.land/std@0.224.0/path/to_file_url.ts": "88f049b769bce411e2d2db5bd9e6fd9a185a5fbd6b9f5ad8f52bef517c4ece1b", + "https://deno.land/std@0.224.0/path/to_namespaced_path.ts": "b706a4103b104cfadc09600a5f838c2ba94dbcdb642344557122dda444526e40", + "https://deno.land/std@0.224.0/path/windows/_util.ts": "d5f47363e5293fced22c984550d5e70e98e266cc3f31769e1710511803d04808", + "https://deno.land/std@0.224.0/path/windows/basename.ts": "6bbc57bac9df2cec43288c8c5334919418d784243a00bc10de67d392ab36d660", + "https://deno.land/std@0.224.0/path/windows/common.ts": "26f60ccc8b2cac3e1613000c23ac5a7d392715d479e5be413473a37903a2b5d4", + "https://deno.land/std@0.224.0/path/windows/constants.ts": "5afaac0a1f67b68b0a380a4ef391bf59feb55856aa8c60dfc01bd3b6abb813f5", + "https://deno.land/std@0.224.0/path/windows/dirname.ts": "33e421be5a5558a1346a48e74c330b8e560be7424ed7684ea03c12c21b627bc9", + "https://deno.land/std@0.224.0/path/windows/extname.ts": "165a61b00d781257fda1e9606a48c78b06815385e7d703232548dbfc95346bef", + "https://deno.land/std@0.224.0/path/windows/format.ts": "bbb5ecf379305b472b1082cd2fdc010e44a0020030414974d6029be9ad52aeb6", + "https://deno.land/std@0.224.0/path/windows/from_file_url.ts": "ced2d587b6dff18f963f269d745c4a599cf82b0c4007356bd957cb4cb52efc01", + "https://deno.land/std@0.224.0/path/windows/glob_to_regexp.ts": "e45f1f89bf3fc36f94ab7b3b9d0026729829fabc486c77f414caebef3b7304f8", + "https://deno.land/std@0.224.0/path/windows/is_absolute.ts": "4a8f6853f8598cf91a835f41abed42112cebab09478b072e4beb00ec81f8ca8a", + "https://deno.land/std@0.224.0/path/windows/is_glob.ts": "8a8b08c08bf731acf2c1232218f1f45a11131bc01de81e5f803450a5914434b9", + "https://deno.land/std@0.224.0/path/windows/join.ts": "8d03530ab89195185103b7da9dfc6327af13eabdcd44c7c63e42e27808f50ecf", + "https://deno.land/std@0.224.0/path/windows/join_globs.ts": "a9475b44645feddceb484ee0498e456f4add112e181cb94042cdc6d47d1cdd25", + "https://deno.land/std@0.224.0/path/windows/mod.ts": "2301fc1c54a28b349e20656f68a85f75befa0ee9b6cd75bfac3da5aca9c3f604", + "https://deno.land/std@0.224.0/path/windows/normalize.ts": "78126170ab917f0ca355a9af9e65ad6bfa5be14d574c5fb09bb1920f52577780", + "https://deno.land/std@0.224.0/path/windows/normalize_glob.ts": "9c87a829b6c0f445d03b3ecadc14492e2864c3ebb966f4cea41e98326e4435c6", + "https://deno.land/std@0.224.0/path/windows/parse.ts": "08804327b0484d18ab4d6781742bf374976de662f8642e62a67e93346e759707", + "https://deno.land/std@0.224.0/path/windows/relative.ts": "3e1abc7977ee6cc0db2730d1f9cb38be87b0ce4806759d271a70e4997fc638d7", + "https://deno.land/std@0.224.0/path/windows/resolve.ts": "8dae1dadfed9d46ff46cc337c9525c0c7d959fb400a6308f34595c45bdca1972", + "https://deno.land/std@0.224.0/path/windows/to_file_url.ts": "40e560ee4854fe5a3d4d12976cef2f4e8914125c81b11f1108e127934ced502e", + "https://deno.land/std@0.224.0/path/windows/to_namespaced_path.ts": "4ffa4fb6fae321448d5fe810b3ca741d84df4d7897e61ee29be961a6aac89a4c", + "https://deno.land/std@0.224.0/permissions/mod.ts": "84d26658ec2da93d8405378510fd8962d40471b67f28c3373aa6da1ed2eaed5d", + "https://deno.land/std@0.224.0/semver/_constants.ts": "5ef89c5f33e6095546ae3e57920592feefcb8372d4cc05542f6bf15a1977e3c9", + "https://deno.land/std@0.224.0/semver/_shared.ts": "5c53a675225cba9ad74ae2e17c124e333728fc2b551a13e8a32b99433b90c1c2", + "https://deno.land/std@0.224.0/semver/_test_comparator_set.ts": "c57f3009ee30748becb15c14de8f0af518ba7f7e9c4db0dd2a31f925c5f2c811", + "https://deno.land/std@0.224.0/semver/can_parse.ts": "590094363e0ae1b97a71e9924633cda9c4582d42299efbefa643c9de5d9c754c", + "https://deno.land/std@0.224.0/semver/compare.ts": "7b5610c25ded57dc4aa41034ee02857d1a6fff609ab183afea17849284f86236", + "https://deno.land/std@0.224.0/semver/constants.ts": "bd442eb6d51d5032686e02abdf575b32dd08f2c95e653e66bbeb927e8ff54bb5", + "https://deno.land/std@0.224.0/semver/difference.ts": "460608126dd5d49b2b1b93b5d8c70f93936ee0f7049283d4050c2d691115b81c", + "https://deno.land/std@0.224.0/semver/equals.ts": "c22d79ce6f9b80fb8db9af3cb680d8103081fc2c460d57a4761ba11f82b683bd", + "https://deno.land/std@0.224.0/semver/format.ts": "a4492b55a10210a10b9307491c0ec7f0c2475cc82af33de1c2565a15083b83df", + "https://deno.land/std@0.224.0/semver/format_range.ts": "493a9916a806270fc0e4721cf3b4c6a6815cf240150e7e87c58dec23eb574aaa", + "https://deno.land/std@0.224.0/semver/greater_or_equal.ts": "d05ddd0adce43758ce74d4a4d7bc2a20b79cbd7604f01f604187c12735a65d0e", + "https://deno.land/std@0.224.0/semver/greater_than.ts": "12e7bd3790539b791147a1c10654747c60791f2699b72e07bcaba6042ac946a6", + "https://deno.land/std@0.224.0/semver/greater_than_range.ts": "6e709b6220c012660c45915e54485c90d40e3300064f2e083cbf56b636f9c419", + "https://deno.land/std@0.224.0/semver/increment.ts": "24e10e8d867bdbabd3e31d5e1caa4276329d7afb75cb5e89691e9597fdba7720", + "https://deno.land/std@0.224.0/semver/is_range.ts": "00083508729b878ba33fa919cb670d533b1e370798cced3d1e5b2068c5176fb6", + "https://deno.land/std@0.224.0/semver/is_semver.ts": "dc9c36d7a61cfe19749bce2b97d7fb808a66f7f40a2ae9ff1ee6cdc774ecff67", + "https://deno.land/std@0.224.0/semver/less_or_equal.ts": "7f2f07e2844aa8de020b265674e19e94003d00b9cf8d52bc2537007faca06627", + "https://deno.land/std@0.224.0/semver/less_than.ts": "890eb36e6294d245934a33dbe6818164c4ec6fddf3aa585a590031393f781719", + "https://deno.land/std@0.224.0/semver/less_than_range.ts": "4fc346b8151c8b5ad29da7d898ef4a80b84091c8181842d04e6058d319fcf90f", + "https://deno.land/std@0.224.0/semver/max_satisfying.ts": "3d402be276171f677b0eb2d02b9b6b9ddb170f0d52bce545c4839175e2fd0dfc", + "https://deno.land/std@0.224.0/semver/min_satisfying.ts": "f7d7d2d3cb4fa333c29f92e383dda7347ea803d0af777c23c32b4c8132be8fc0", + "https://deno.land/std@0.224.0/semver/mod.ts": "73ba48a686ac3a5df6508f518ecf97a64df1db438ff130a23bbed3cee1f567a8", + "https://deno.land/std@0.224.0/semver/not_equals.ts": "4d16649686e95c7c9bd6631c854e458d81f8c2e53f1122f0e39798239893b3b4", + "https://deno.land/std@0.224.0/semver/parse.ts": "94c09f3486643853e7438e64f2c6741462fbeb84cf141ad5bfe88b73ec4cb0f3", + "https://deno.land/std@0.224.0/semver/parse_range.ts": "f48ca42b59988d9274225b1f93c39d84005e810bb858faf564f48c0ad8431fa7", + "https://deno.land/std@0.224.0/semver/range_intersects.ts": "bfcdff2731a2ceda85f1a189ccb5909c764be3baa735f9591b319d7e0fc6b711", + "https://deno.land/std@0.224.0/semver/range_max.ts": "67a56c8851da984dd314456f834eff8cf3814a090270554464ab62bf1f026c3d", + "https://deno.land/std@0.224.0/semver/range_min.ts": "d961ba26d8f01a79c8877cb48f9f566778947fc1df0e2bdfa3b31c7dd39f7448", + "https://deno.land/std@0.224.0/semver/satisfies.ts": "8c163ca35cb05d0384bcef6b8dd2842f15b39a375d126e10c2fbec6274a215cf", + "https://deno.land/std@0.224.0/semver/test_range.ts": "e8f46ed1a11817ec9ddf691e347a1b03f8096d12e13fa5dabfafa6e459fc7799", + "https://deno.land/std@0.224.0/semver/try_parse.ts": "043204f1235243c3d02b66ffca2c37dc2941e417dbccaf6c3a15b476a33f0e24", + "https://deno.land/std@0.224.0/semver/try_parse_range.ts": "cf1e2d489bbe9ed6185de551acdf708e23e0e1bc4be0958052dfef178f763eee", + "https://deno.land/std@0.224.0/semver/types.ts": "9286e72b160e25856608f4bc5f08f8f5ccba54e6cdfc9aba8adee68a355c4b36", + "https://deno.land/std@0.224.0/streams/_common.ts": "948735ef6d140cd6916dca861197b88fc57db52c2f923c392b7a14033d8fed4b", + "https://deno.land/std@0.224.0/streams/buffer.ts": "e012de72a53ad17c56512488e9afb6f4b6ed046b32fc1415ae7a4e6fc0efce38", + "https://deno.land/std@0.224.0/streams/byte_slice_stream.ts": "5bbdcadb118390affa9b3d0a0f73ef8e83754f59bb89df349add669dd9369713", + "https://deno.land/std@0.224.0/streams/delimiter_stream.ts": "4e4050740ff27a8824defa6c96126229ef9d794c4ace4ef9cabb10b5ad4a5d14", + "https://deno.land/std@0.224.0/streams/early_zip_readable_streams.ts": "21f5cf6dd36381c6a50c31a7727b5bd219f6382bbb7a413418595c3e466c4d14", + "https://deno.land/std@0.224.0/streams/iterate_reader.ts": "a8e698d16373d49821172f90ec7ac011ef1aae7a4036ae4bace284ff99e2bc92", + "https://deno.land/std@0.224.0/streams/limited_bytes_transform_stream.ts": "b22a45a337374e863c4eb1867ec6b8ad3e68620a6c52fe837746060ea610e6f1", + "https://deno.land/std@0.224.0/streams/limited_transform_stream.ts": "4c47da5ca38a30fa9f33b0f1a61d4548e7f52a9a58c294b0f430f680e44cc543", + "https://deno.land/std@0.224.0/streams/merge_readable_streams.ts": "73eed8ff54c9111b8b974b11a5a11c1ed0b7800e0157c39277ccac3ed14721e2", + "https://deno.land/std@0.224.0/streams/mod.ts": "d56624832b9649b680c74ab9c77e746e8be81ae1a24756cc04623e25a0d43ce9", + "https://deno.land/std@0.224.0/streams/readable_stream_from_reader.ts": "64943452485bcba48e203fa8ae61c195aed9ab8b2a178e2fc6a383f761ce010a", + "https://deno.land/std@0.224.0/streams/reader_from_iterable.ts": "e7b064142b2a97bb562d958c2e4b4d129e923e9c9f2f6e003a4e16cbdcd62570", + "https://deno.land/std@0.224.0/streams/reader_from_stream_reader.ts": "b3519118ed2a32e3fb6201a4c257d5c4e58c38b5918bdc505a45fccbfa0a53f9", + "https://deno.land/std@0.224.0/streams/text_delimiter_stream.ts": "94dfc900204e306496c1b58c80473db57b6097afdcb8ea9eaff453a193a659f1", + "https://deno.land/std@0.224.0/streams/text_line_stream.ts": "21f33d3922e019ec1a1676474beb543929cb564ec99b69cd2654e029e0f45bd5", + "https://deno.land/std@0.224.0/streams/to_array_buffer.ts": "1a9c07c4a396ce557ab205c44415815ab13b614fed94a12f62b80f8e650c726d", + "https://deno.land/std@0.224.0/streams/to_blob.ts": "bf5daaae50fa8f57e0c8bfd7474ebac16ac09e130e3d01ef2947ae5153912b4a", + "https://deno.land/std@0.224.0/streams/to_json.ts": "b6a908d0da7cd30956e5fbbfa7460747e50b8f307d1041282ed6fe9070d579ee", + "https://deno.land/std@0.224.0/streams/to_text.ts": "6f93593bdfc2cea5cca39755ea5caf0d4092580c0a713dfe04a1e85c60df331f", + "https://deno.land/std@0.224.0/streams/to_transform_stream.ts": "4c4836455ef89bab9ece55975ee3a819f07d3d8b0e43101ec7f4ed033c8a2b61", + "https://deno.land/std@0.224.0/streams/writable_stream_from_writer.ts": "527fc1b136fc53a9f0b32641f04a4522c72617fa7ca3778d27ed064f9cd98932", + "https://deno.land/std@0.224.0/streams/writer_from_stream_writer.ts": "22cba4e5162fc443c7e5ef62f2054674cd6a20f5d7519a62db8d201496463931", + "https://deno.land/std@0.224.0/streams/zip_readable_streams.ts": "53eb10d7557539b489bd858907aab6dd28247f074b3446573801de3150cb932e", + "https://deno.land/std@0.224.0/toml/_parser.ts": "187560eb4465977808b18c68299e1f5a6e4631c0a181d868c8f24722cf9146d1", + "https://deno.land/std@0.224.0/toml/mod.ts": "a457ea7877a6d5e7f3d6985c43da4d2ecd7461038d5c4c7a0089737e90a7ee90", + "https://deno.land/std@0.224.0/toml/parse.ts": "2f0729a8f62c7e508af8dfada0386a4bc2c0d664ef4d26090df03cf495dcb25a", + "https://deno.land/std@0.224.0/toml/stringify.ts": "8b9ba3c1bf8fa7d58d7b62ad62b3174dbbc51050d5cc302aa8e2834089c00d73", + "https://deno.land/std@0.224.0/uuid/_common.ts": "05c787c5735776c4e48e30294878332c39cb7738f50b209df4eb9f2b0facce4d", + "https://deno.land/std@0.224.0/uuid/constants.ts": "eb6c96871e968adf3355507d7ae79adce71525fd6c1ca55c51d32ace0196d64e", + "https://deno.land/std@0.224.0/uuid/mod.ts": "cefc8e2f77d9e493739c8dc4ec141b12b855414bf757e778bf9b00f783506b76", + "https://deno.land/std@0.224.0/uuid/v1.ts": "cc45e7eb1d463d7d38b21a3c6e4de55ff98598ca442309321575fe841b323a54", + "https://deno.land/std@0.224.0/uuid/v3.ts": "689f2d64a9460a75877a2eed94662d9cb31bedb890d72fce0d161ef47d66cc26", + "https://deno.land/std@0.224.0/uuid/v4.ts": "1319a2eeff7259adda416ec5f7997ded80d3165ef0787012793fc8621c18c493", + "https://deno.land/std@0.224.0/uuid/v5.ts": "75f76d9e53583572fe3d4893168530986222d439b1545b56d4493c6d5d1cd81d", + "https://deno.land/std@0.224.0/version.ts": "f6a28c9704d82d1c095988777e30e6172eb674a6570974a0d27a653be769bbbe", + "https://deno.land/std@0.224.0/yaml/_dumper/dumper.ts": "08b595b40841a2e1c75303f5096392323b6baf8e9662430a91e3b36fbe175fe9", + "https://deno.land/std@0.224.0/yaml/_dumper/dumper_state.ts": "9e29f700ea876ed230b43f11fa006fcb1a62eedc1e27d32baaeaf3210f19f1e7", + "https://deno.land/std@0.224.0/yaml/_error.ts": "f38cdebdb69cde16903d9aa2f3b8a3dd9d13e5f7f3570bf662bfaca69fef669e", + "https://deno.land/std@0.224.0/yaml/_loader/loader.ts": "bf9e8a99770b59bc887b43ebccea108cbe9146ae32d91f7ce558d62c946d3fe3", + "https://deno.land/std@0.224.0/yaml/_loader/loader_state.ts": "ee216de6040551940b85473c3185fdb7a6f3030b77153f87a6b7f63f82e489ea", + "https://deno.land/std@0.224.0/yaml/_mark.ts": "61097a614857fcebf7b2ecad057916d74c90cd160117a33c9e74bac60457410a", + "https://deno.land/std@0.224.0/yaml/_state.ts": "f3b1c1fd11860302f1f33e35e9ce089bf069d4943e8d67516cd6bedbba058c13", + "https://deno.land/std@0.224.0/yaml/_type/binary.ts": "f1a6e1d83dcc52b21cc3639cd98be44051cfc54065cc4f2a42065bce07ebc07d", + "https://deno.land/std@0.224.0/yaml/_type/bool.ts": "121743b23ba82a27ad6a3ec6298c7f5b0908f90e52707f8644a91f7ad51ed2ef", + "https://deno.land/std@0.224.0/yaml/_type/float.ts": "c5ed84b0aec1ec5dc05f6abfaaff672e8890d4d44a42120b4445c9754fca4eba", + "https://deno.land/std@0.224.0/yaml/_type/function.ts": "bbf705058942bf3370604b37eb77a10aadd72f986c237c9f69b43378a42202c1", + "https://deno.land/std@0.224.0/yaml/_type/int.ts": "c2dc88438a60fccc8d2226042bd18b9967753adaf6bd145feb8b99d567e432ce", + "https://deno.land/std@0.224.0/yaml/_type/map.ts": "ae2acb1cb837fb8e96c75c98611cfd45af847d0114ab5336333c318e7d4b12f4", + "https://deno.land/std@0.224.0/yaml/_type/merge.ts": "ad0d971f91d2fb9f4ab3eba0c837eae357b1804d6b798adc99dc917bc5306b11", + "https://deno.land/std@0.224.0/yaml/_type/mod.ts": "e8929d7b1c969a74f76338d4eb380ef8c4a26cd6441117d521f076b766e9c265", + "https://deno.land/std@0.224.0/yaml/_type/nil.ts": "cbe4387d02d5933322c21b25d8955c5e6228c492e391a6fb82dcf4f498cc421c", + "https://deno.land/std@0.224.0/yaml/_type/omap.ts": "cda915105ab22ba9e1d6317adacee8eec2d8ddaf864cc2f814e3e476946e72c6", + "https://deno.land/std@0.224.0/yaml/_type/pairs.ts": "dd39bb44c1b9abaf6172c63f73350475933151f07e05253b81f7860c9b507177", + "https://deno.land/std@0.224.0/yaml/_type/regexp.ts": "e49eb9e1c9356fd142bc15f7f323820d411fcc537b5ba3896df9a8b812d270a4", + "https://deno.land/std@0.224.0/yaml/_type/seq.ts": "2deffc7f970869bc01a1541b4961d076329a1c2b30b95e07918f3132db7c3fe2", + "https://deno.land/std@0.224.0/yaml/_type/set.ts": "be8a9e7237a7ffc92dfbe7f5e552d84b7eeba60f3f73cc77fc3c59d3506c74ea", + "https://deno.land/std@0.224.0/yaml/_type/str.ts": "88f0a1ba12295520cd57e96cd78d53aa0787d53c7a1c506155f418c496c2f550", + "https://deno.land/std@0.224.0/yaml/_type/timestamp.ts": "277a41a40fb93c3b2b3f5c373bf11b0b7856cc6a7b919e8ea130755e4029edc5", + "https://deno.land/std@0.224.0/yaml/_type/undefined.ts": "9d215953c65740f1764e0bdca021007573473f0c49e087f00d9ff02817ecfc97", + "https://deno.land/std@0.224.0/yaml/_utils.ts": "91bbe28b5e7000b9594e40ff5353f8fe7a7ba914eec917e1202cbaf5ac931c58", + "https://deno.land/std@0.224.0/yaml/mod.ts": "54e9bfad77c8cd58f49b65f4d568045ff08989ed36318a2ca733a43cb6f1bc00", + "https://deno.land/std@0.224.0/yaml/parse.ts": "f45278d9ebccb789af4eceeffa5c291e194bcf1fa9aab1b34ff52c2bd4a9d886", + "https://deno.land/std@0.224.0/yaml/schema.ts": "a0f7956d997852b5d1c6564bd73eb7352175cfba439707ac819b65b5a2ec173a", + "https://deno.land/std@0.224.0/yaml/schema/core.ts": "0a37c07710e3df4eb4edc02f4edf623bf8df5af72b34d8a7c0229d0bac2a7043", + "https://deno.land/std@0.224.0/yaml/schema/default.ts": "1367fd30420c7071ecc67e5b470838474e8259aaf64460f314af4b6bd8da497c", + "https://deno.land/std@0.224.0/yaml/schema/extended.ts": "248180c22697f37ed173057eae62ce4879865bb59f30c4908d698bed5edcc7c5", + "https://deno.land/std@0.224.0/yaml/schema/failsafe.ts": "0ac1cae5b86d8fe2c83ad0a17f8adc33106a452b7139f84e4b0bfaee2206730e", + "https://deno.land/std@0.224.0/yaml/schema/json.ts": "a0228a0c0bad7dece17ab848774fcadc2ccb5e51775c2d58d21d486917ba3ba1", + "https://deno.land/std@0.224.0/yaml/schema/mod.ts": "0e1558a4823834f106675e48ddc15338e04f6f18469d1a7d6b3f0e1ab06abcb2", + "https://deno.land/std@0.224.0/yaml/stringify.ts": "f0ed4e419cb40c807cf79ae4039d6cdf492be9a947121fff4d4b7cd1d4738bae", + "https://deno.land/std@0.224.0/yaml/type.ts": "708dde5f20b01cc1096489b7155b6af79a217d585afb841128e78c3c2391eb5c" } } diff --git a/src/resources/deno_std/import_map.json b/src/resources/deno_std/import_map.json index 5860269005c..a4db1650623 100644 --- a/src/resources/deno_std/import_map.json +++ b/src/resources/deno_std/import_map.json @@ -1,5 +1,5 @@ { "imports": { - "https://deno.land/std/": "../../vendor/deno.land/std@0.217.0/" + "https://deno.land/std/": "../../vendor/deno.land/std@0.224.0/" } } diff --git a/src/resources/deno_std/run_import_map.json b/src/resources/deno_std/run_import_map.json index 7722a321912..d58aa5d68da 100644 --- a/src/resources/deno_std/run_import_map.json +++ b/src/resources/deno_std/run_import_map.json @@ -1,6 +1,40 @@ { "imports": { - "https://deno.land/std/": "https://deno.land/std@0.217.0/", - "https://cdn.skypack.dev/juice": "https://cdn.skypack.dev/juice@10.0.0" + "stdlib/tar": "jsr:/@std/archive@^0.224.0/tar", + "stdlib/async": "jsr:/@std/async@^0.224.0", + "stdlib/bytes": "jsr:/@std/bytes@^0.224.0", + "stdlib/collections": "jsr:/@std/collections@^0.224.0", + "stdlib/crypto": "jsr:/@std/crypto@^0.224.0", + "stdlib/datetime": "jsr:/@std/datetime@^0.224.0", + "stdlib/dotenv": "jsr:/@std/dotenv@^0.224.0", + + "stdlib/ascii85": "https://deno.land/std@0.224.0/encoding/ascii85.ts", + "stdlib/base32": "https://deno.land/std@0.224.0/encoding/base32.ts", + "stdlib/base58": "https://deno.land/std@0.224.0/encoding/base58.ts", + "stdlib/base64": "https://deno.land/std@0.224.0/encoding/base64.ts", + "stdlib/base64url": "https://deno.land/std@0.224.0/encoding/base64url.ts", + "stdlib/csv": "jsr:/@std/csv@^0.224.0", + "stdlib/front_matter": "jsr:/@std/front-matter@^0.224.0", + "stdlib/hex": "https://deno.land/std@0.224.0/encoding/hex.ts", + "stdlib/jsonc": "jsr:/@std/jsonc@^0.224.0", + "stdlib/toml": "jsr:/@std/toml@^0.224.0", + "stdlib/varint": "https://deno.land/std@0.224.0/encoding/varint.ts", + "stdlib/yaml": "jsr:/@std/yaml@^0.224.0", + + "stdlib/flags": "jsr:/@std/flags@^0.224.0", + "stdlib/fmt_bytes": "https://deno.land/std@0.224.0/fmt/bytes.ts", + "stdlib/fmt_colors": "https://deno.land/std@0.224.0/fmt/colors.ts", + "stdlib/fmt_printf": "https://deno.land/std@0.224.0/fmt/printf.ts", + "stdlib/fs": "jsr:/@std/fs@^0.224.0", + "stdlib/http": "jsr:/@std/http@^0.224.0", + "stdlib/io": "jsr:/@std/io@^0.224.0", + "stdlib/log": "jsr:/@std/log@^0.224.0", + "stdlib/mediaTypes": "jsr:/@std/media-types@^0.224.0", + "stdlib/path": "jsr:/@std/path@^0.224.0", + "stdlib/permissions": "jsr:/@std/permissions@^0.224.0", + "stdlib/semver": "jsr:/@std/semver@^0.224.0", + "stdlib/streams": "jsr:/@std/streams@^0.224.0", + "stdlib/uuid": "jsr:/@std/uuid@^0.224.0", + "stdlib/juice": "https://cdn.skypack.dev/juice@10.0.0" } } diff --git a/src/resources/editor/tools/vs-code.mjs b/src/resources/editor/tools/vs-code.mjs index 1d4a9d947a0..78e4d468cca 100644 --- a/src/resources/editor/tools/vs-code.mjs +++ b/src/resources/editor/tools/vs-code.mjs @@ -20383,6 +20383,7 @@ var require_yaml_intelligence_resources = __commonJS({ } ], "pandoc/formats.yml": [ + "ansi", "asciidoc", "asciidoc_legacy", "asciidoctor", @@ -21670,11 +21671,11 @@ var require_yaml_intelligence_resources = __commonJS({ "Typography definitions for the brand.", "Font files and definitions for the brand.", "The base font settings for the brand. These are used as the default\nfor all text.", - "The font settings for headings.", - "The font settings for monospace text", - "Inline code, all values inherit from monospace.", - "Block code, all values inherit from monospace.", - "The text properties used for hyperlinks.", + "Settings for headings", + "Settings for monospace text", + "Settings for inline code", + "Settings for code blocks", + "Settings for links", "Typographic options for monospace elements.", "Typographic options for inline monospace elements.", "Typographic options for block monospace elements.", @@ -23985,12 +23986,12 @@ var require_yaml_intelligence_resources = __commonJS({ mermaid: "%%" }, "handlers/mermaid/schema.yml": { - _internalId: 187697, + _internalId: 190200, type: "object", description: "be an object", properties: { "mermaid-format": { - _internalId: 187689, + _internalId: 190192, type: "enum", enum: [ "png", @@ -24006,7 +24007,7 @@ var require_yaml_intelligence_resources = __commonJS({ exhaustiveCompletions: true }, theme: { - _internalId: 187696, + _internalId: 190199, type: "anyOf", anyOf: [ { diff --git a/src/resources/editor/tools/yaml/web-worker.js b/src/resources/editor/tools/yaml/web-worker.js index aeca065a1b1..cb29ba36ec7 100644 --- a/src/resources/editor/tools/yaml/web-worker.js +++ b/src/resources/editor/tools/yaml/web-worker.js @@ -20384,6 +20384,7 @@ try { } ], "pandoc/formats.yml": [ + "ansi", "asciidoc", "asciidoc_legacy", "asciidoctor", @@ -21671,11 +21672,11 @@ try { "Typography definitions for the brand.", "Font files and definitions for the brand.", "The base font settings for the brand. These are used as the default\nfor all text.", - "The font settings for headings.", - "The font settings for monospace text", - "Inline code, all values inherit from monospace.", - "Block code, all values inherit from monospace.", - "The text properties used for hyperlinks.", + "Settings for headings", + "Settings for monospace text", + "Settings for inline code", + "Settings for code blocks", + "Settings for links", "Typographic options for monospace elements.", "Typographic options for inline monospace elements.", "Typographic options for block monospace elements.", @@ -23986,12 +23987,12 @@ try { mermaid: "%%" }, "handlers/mermaid/schema.yml": { - _internalId: 187697, + _internalId: 190200, type: "object", description: "be an object", properties: { "mermaid-format": { - _internalId: 187689, + _internalId: 190192, type: "enum", enum: [ "png", @@ -24007,7 +24008,7 @@ try { exhaustiveCompletions: true }, theme: { - _internalId: 187696, + _internalId: 190199, type: "anyOf", anyOf: [ { diff --git a/src/resources/editor/tools/yaml/yaml-intelligence-resources.json b/src/resources/editor/tools/yaml/yaml-intelligence-resources.json index dd636eacd71..82251da8277 100644 --- a/src/resources/editor/tools/yaml/yaml-intelligence-resources.json +++ b/src/resources/editor/tools/yaml/yaml-intelligence-resources.json @@ -13355,6 +13355,7 @@ } ], "pandoc/formats.yml": [ + "ansi", "asciidoc", "asciidoc_legacy", "asciidoctor", @@ -14642,11 +14643,11 @@ "Typography definitions for the brand.", "Font files and definitions for the brand.", "The base font settings for the brand. These are used as the default\nfor all text.", - "The font settings for headings.", - "The font settings for monospace text", - "Inline code, all values inherit from monospace.", - "Block code, all values inherit from monospace.", - "The text properties used for hyperlinks.", + "Settings for headings", + "Settings for monospace text", + "Settings for inline code", + "Settings for code blocks", + "Settings for links", "Typographic options for monospace elements.", "Typographic options for inline monospace elements.", "Typographic options for block monospace elements.", @@ -16957,12 +16958,12 @@ "mermaid": "%%" }, "handlers/mermaid/schema.yml": { - "_internalId": 187697, + "_internalId": 190200, "type": "object", "description": "be an object", "properties": { "mermaid-format": { - "_internalId": 187689, + "_internalId": 190192, "type": "enum", "enum": [ "png", @@ -16978,7 +16979,7 @@ "exhaustiveCompletions": true }, "theme": { - "_internalId": 187696, + "_internalId": 190199, "type": "anyOf", "anyOf": [ { diff --git a/src/resources/scripts/check-usage.sh b/src/resources/scripts/check-usage.sh index 004519a9090..801fed62876 100755 --- a/src/resources/scripts/check-usage.sh +++ b/src/resources/scripts/check-usage.sh @@ -3,7 +3,7 @@ # https://stackoverflow.com/a/246128 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -deno info --import-map dev_import_map.json quarto.ts | grep https | gsed -r 's/\x1B\[[0-9;]*[JKmsu]//g' | sed 's/[^ht]*ht/ht/g' | grep -v '\*$' | deno run --allow-read ${SCRIPT_DIR}/check-usage.ts $* +deno info --import-map import_map.json quarto.ts | grep https | gsed -r 's/\x1B\[[0-9;]*[JKmsu]//g' | sed 's/[^ht]*ht/ht/g' | grep -v '\*$' | deno run --allow-read ${SCRIPT_DIR}/check-usage.ts $* ## Info on how to read the output # diff --git a/src/resources/scripts/juice.ts b/src/resources/scripts/juice.ts index c655d0749cc..93a1359a979 100644 --- a/src/resources/scripts/juice.ts +++ b/src/resources/scripts/juice.ts @@ -1,7 +1,7 @@ -import juice from "https://cdn.skypack.dev/juice"; +import juice from "stdlib/juice"; -const input = await Deno.readTextFile(Deno.args[0]) +const input = await Deno.readTextFile(Deno.args[0]); console.log(juice(input)); -// not available in skypack version -// juice.juiceResources(input, {}, (err, output) => console.log(output)) \ No newline at end of file +// not available in skypack version +// juice.juiceResources(input, {}, (err, output) => console.log(output)) diff --git a/src/resources/types/schema-schema-types.ts b/src/resources/types/schema-schema-types.ts index 31ad0bb6729..2e3737f9823 100644 --- a/src/resources/types/schema-schema-types.ts +++ b/src/resources/types/schema-schema-types.ts @@ -3,7 +3,7 @@ // If you find yourself trying to rebuild types and `quarto build-js` won't run because // of bad type definitions, run the following: // $ cd $QUARTO_ROOT -// $ ./package/dist/bin/tools/deno run --importmap=./src/dev_import_map.json --allow-all ./package/src/common/create-schema-types.ts ./src/resources +// $ ./package/dist/bin/tools/deno run --importmap=./src/import_map.json --allow-all ./package/src/common/create-schema-types.ts ./src/resources export type MaybeArrayOf = T | T[]; export type JsonObject = { [key: string]: unknown }; diff --git a/src/resources/types/schema-types.ts b/src/resources/types/schema-types.ts index 4dd95c8b2a2..d7b9fa40188 100644 --- a/src/resources/types/schema-types.ts +++ b/src/resources/types/schema-types.ts @@ -3,7 +3,7 @@ // If you find yourself trying to rebuild types and `quarto build-js` won't run because // of bad type definitions, run the following: // $ cd $QUARTO_ROOT -// $ ./package/dist/bin/tools/deno run --importmap=./src/dev_import_map.json --allow-all ./package/src/common/create-schema-types.ts ./src/resources +// $ ./package/dist/bin/tools/deno run --importmap=./src/import_map.json --allow-all ./package/src/common/create-schema-types.ts ./src/resources export type MaybeArrayOf = T | T[]; export type JsonObject = { [key: string]: unknown }; diff --git a/src/tools/impl/tinytex-info.ts b/src/tools/impl/tinytex-info.ts index 3c6293103c3..61e0fd89d09 100644 --- a/src/tools/impl/tinytex-info.ts +++ b/src/tools/impl/tinytex-info.ts @@ -1,15 +1,14 @@ /* -* tools-info.ts -* -* Copyright (C) 2022 Posit Software, PBC -* -*/ + * tools-info.ts + * + * Copyright (C) 2022 Posit Software, PBC + */ import { expandPath, safeExistsSync } from "../../core/path.ts"; import { join } from "../../deno_ral/path.ts"; import { getenv } from "../../core/env.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; export function hasTinyTex(): boolean { const installDir = tinyTexInstallDir(); @@ -45,7 +44,7 @@ export function tinyTexBinDir(): string | undefined { case "windows": { // TeX Live 2023 use windows now. Previous version were using win32 const winPath = join(basePath, "bin\\win32\\"); - if (safeExistsSync(winPath)) return (winPath); + if (safeExistsSync(winPath)) return winPath; return join(basePath, "bin\\windows\\"); } case "linux": diff --git a/src/tools/impl/tinytex.ts b/src/tools/impl/tinytex.ts index ca388c93622..464e04bd91f 100644 --- a/src/tools/impl/tinytex.ts +++ b/src/tools/impl/tinytex.ts @@ -5,7 +5,7 @@ */ import { debug, warning } from "../../deno_ral/log.ts"; -import { existsSync } from "fs/exists.ts"; +import { existsSync } from "../../deno_ral/fs.ts"; import { basename, join, relative } from "../../deno_ral/path.ts"; import { expandPath, which } from "../../core/path.ts"; @@ -31,7 +31,7 @@ import { hasTinyTex, tinyTexInstallDir } from "./tinytex-info.ts"; import { copyTo } from "../../core/copy.ts"; import { suggestUserBinPaths } from "../../core/path.ts"; -import { ensureDirSync, walkSync } from "fs/mod.ts"; +import { ensureDirSync, walkSync } from "../../deno_ral/fs.ts"; // This the https texlive repo that we use by default const kDefaultRepos = [ diff --git a/src/tools/tools-console.ts b/src/tools/tools-console.ts index ed10cb19df5..78f4b634ab4 100644 --- a/src/tools/tools-console.ts +++ b/src/tools/tools-console.ts @@ -3,7 +3,7 @@ * * Copyright (C) 2021-2022 Posit Software, PBC */ -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import { Confirm, Select } from "cliffy/prompt/mod.ts"; import { Table } from "cliffy/table/mod.ts"; import { info, warning } from "../deno_ral/log.ts"; diff --git a/src/vendor/cdn.skypack.dev/-/js-yaml@v4.1.0-dDv6O5b7vFYj0Ro3QdID/dist=es2019,mode=imports/optimized/js-yaml.js b/src/vendor/cdn.skypack.dev/-/js-yaml@v4.1.0-dDv6O5b7vFYj0Ro3QdID/dist=es2019,mode=imports/optimized/js-yaml.js new file mode 100644 index 00000000000..6758fa2cc3c --- /dev/null +++ b/src/vendor/cdn.skypack.dev/-/js-yaml@v4.1.0-dDv6O5b7vFYj0Ro3QdID/dist=es2019,mode=imports/optimized/js-yaml.js @@ -0,0 +1,2645 @@ +/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ +function isNothing(subject) { + return typeof subject === "undefined" || subject === null; +} +function isObject(subject) { + return typeof subject === "object" && subject !== null; +} +function toArray(sequence) { + if (Array.isArray(sequence)) + return sequence; + else if (isNothing(sequence)) + return []; + return [sequence]; +} +function extend(target, source) { + var index, length, key, sourceKeys; + if (source) { + sourceKeys = Object.keys(source); + for (index = 0, length = sourceKeys.length; index < length; index += 1) { + key = sourceKeys[index]; + target[key] = source[key]; + } + } + return target; +} +function repeat(string, count) { + var result = "", cycle; + for (cycle = 0; cycle < count; cycle += 1) { + result += string; + } + return result; +} +function isNegativeZero(number) { + return number === 0 && Number.NEGATIVE_INFINITY === 1 / number; +} +var isNothing_1 = isNothing; +var isObject_1 = isObject; +var toArray_1 = toArray; +var repeat_1 = repeat; +var isNegativeZero_1 = isNegativeZero; +var extend_1 = extend; +var common = { + isNothing: isNothing_1, + isObject: isObject_1, + toArray: toArray_1, + repeat: repeat_1, + isNegativeZero: isNegativeZero_1, + extend: extend_1 +}; +function formatError(exception2, compact) { + var where = "", message = exception2.reason || "(unknown reason)"; + if (!exception2.mark) + return message; + if (exception2.mark.name) { + where += 'in "' + exception2.mark.name + '" '; + } + where += "(" + (exception2.mark.line + 1) + ":" + (exception2.mark.column + 1) + ")"; + if (!compact && exception2.mark.snippet) { + where += "\n\n" + exception2.mark.snippet; + } + return message + " " + where; +} +function YAMLException$1(reason, mark) { + Error.call(this); + this.name = "YAMLException"; + this.reason = reason; + this.mark = mark; + this.message = formatError(this, false); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + this.stack = new Error().stack || ""; + } +} +YAMLException$1.prototype = Object.create(Error.prototype); +YAMLException$1.prototype.constructor = YAMLException$1; +YAMLException$1.prototype.toString = function toString(compact) { + return this.name + ": " + formatError(this, compact); +}; +var exception = YAMLException$1; +function getLine(buffer, lineStart, lineEnd, position, maxLineLength) { + var head = ""; + var tail = ""; + var maxHalfLength = Math.floor(maxLineLength / 2) - 1; + if (position - lineStart > maxHalfLength) { + head = " ... "; + lineStart = position - maxHalfLength + head.length; + } + if (lineEnd - position > maxHalfLength) { + tail = " ..."; + lineEnd = position + maxHalfLength - tail.length; + } + return { + str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, "\u2192") + tail, + pos: position - lineStart + head.length + }; +} +function padStart(string, max) { + return common.repeat(" ", max - string.length) + string; +} +function makeSnippet(mark, options) { + options = Object.create(options || null); + if (!mark.buffer) + return null; + if (!options.maxLength) + options.maxLength = 79; + if (typeof options.indent !== "number") + options.indent = 1; + if (typeof options.linesBefore !== "number") + options.linesBefore = 3; + if (typeof options.linesAfter !== "number") + options.linesAfter = 2; + var re = /\r?\n|\r|\0/g; + var lineStarts = [0]; + var lineEnds = []; + var match; + var foundLineNo = -1; + while (match = re.exec(mark.buffer)) { + lineEnds.push(match.index); + lineStarts.push(match.index + match[0].length); + if (mark.position <= match.index && foundLineNo < 0) { + foundLineNo = lineStarts.length - 2; + } + } + if (foundLineNo < 0) + foundLineNo = lineStarts.length - 1; + var result = "", i, line; + var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length; + var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3); + for (i = 1; i <= options.linesBefore; i++) { + if (foundLineNo - i < 0) + break; + line = getLine(mark.buffer, lineStarts[foundLineNo - i], lineEnds[foundLineNo - i], mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]), maxLineLength); + result = common.repeat(" ", options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + " | " + line.str + "\n" + result; + } + line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength); + result += common.repeat(" ", options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + " | " + line.str + "\n"; + result += common.repeat("-", options.indent + lineNoLength + 3 + line.pos) + "^\n"; + for (i = 1; i <= options.linesAfter; i++) { + if (foundLineNo + i >= lineEnds.length) + break; + line = getLine(mark.buffer, lineStarts[foundLineNo + i], lineEnds[foundLineNo + i], mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]), maxLineLength); + result += common.repeat(" ", options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + " | " + line.str + "\n"; + } + return result.replace(/\n$/, ""); +} +var snippet = makeSnippet; +var TYPE_CONSTRUCTOR_OPTIONS = [ + "kind", + "multi", + "resolve", + "construct", + "instanceOf", + "predicate", + "represent", + "representName", + "defaultStyle", + "styleAliases" +]; +var YAML_NODE_KINDS = [ + "scalar", + "sequence", + "mapping" +]; +function compileStyleAliases(map2) { + var result = {}; + if (map2 !== null) { + Object.keys(map2).forEach(function(style) { + map2[style].forEach(function(alias) { + result[String(alias)] = style; + }); + }); + } + return result; +} +function Type$1(tag, options) { + options = options || {}; + Object.keys(options).forEach(function(name) { + if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { + throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + } + }); + this.options = options; + this.tag = tag; + this.kind = options["kind"] || null; + this.resolve = options["resolve"] || function() { + return true; + }; + this.construct = options["construct"] || function(data) { + return data; + }; + this.instanceOf = options["instanceOf"] || null; + this.predicate = options["predicate"] || null; + this.represent = options["represent"] || null; + this.representName = options["representName"] || null; + this.defaultStyle = options["defaultStyle"] || null; + this.multi = options["multi"] || false; + this.styleAliases = compileStyleAliases(options["styleAliases"] || null); + if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { + throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + } +} +var type = Type$1; +function compileList(schema2, name) { + var result = []; + schema2[name].forEach(function(currentType) { + var newIndex = result.length; + result.forEach(function(previousType, previousIndex) { + if (previousType.tag === currentType.tag && previousType.kind === currentType.kind && previousType.multi === currentType.multi) { + newIndex = previousIndex; + } + }); + result[newIndex] = currentType; + }); + return result; +} +function compileMap() { + var result = { + scalar: {}, + sequence: {}, + mapping: {}, + fallback: {}, + multi: { + scalar: [], + sequence: [], + mapping: [], + fallback: [] + } + }, index, length; + function collectType(type2) { + if (type2.multi) { + result.multi[type2.kind].push(type2); + result.multi["fallback"].push(type2); + } else { + result[type2.kind][type2.tag] = result["fallback"][type2.tag] = type2; + } + } + for (index = 0, length = arguments.length; index < length; index += 1) { + arguments[index].forEach(collectType); + } + return result; +} +function Schema$1(definition) { + return this.extend(definition); +} +Schema$1.prototype.extend = function extend2(definition) { + var implicit = []; + var explicit = []; + if (definition instanceof type) { + explicit.push(definition); + } else if (Array.isArray(definition)) { + explicit = explicit.concat(definition); + } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) { + if (definition.implicit) + implicit = implicit.concat(definition.implicit); + if (definition.explicit) + explicit = explicit.concat(definition.explicit); + } else { + throw new exception("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })"); + } + implicit.forEach(function(type$1) { + if (!(type$1 instanceof type)) { + throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object."); + } + if (type$1.loadKind && type$1.loadKind !== "scalar") { + throw new exception("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported."); + } + if (type$1.multi) { + throw new exception("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit."); + } + }); + explicit.forEach(function(type$1) { + if (!(type$1 instanceof type)) { + throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object."); + } + }); + var result = Object.create(Schema$1.prototype); + result.implicit = (this.implicit || []).concat(implicit); + result.explicit = (this.explicit || []).concat(explicit); + result.compiledImplicit = compileList(result, "implicit"); + result.compiledExplicit = compileList(result, "explicit"); + result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit); + return result; +}; +var schema = Schema$1; +var str = new type("tag:yaml.org,2002:str", { + kind: "scalar", + construct: function(data) { + return data !== null ? data : ""; + } +}); +var seq = new type("tag:yaml.org,2002:seq", { + kind: "sequence", + construct: function(data) { + return data !== null ? data : []; + } +}); +var map = new type("tag:yaml.org,2002:map", { + kind: "mapping", + construct: function(data) { + return data !== null ? data : {}; + } +}); +var failsafe = new schema({ + explicit: [ + str, + seq, + map + ] +}); +function resolveYamlNull(data) { + if (data === null) + return true; + var max = data.length; + return max === 1 && data === "~" || max === 4 && (data === "null" || data === "Null" || data === "NULL"); +} +function constructYamlNull() { + return null; +} +function isNull(object) { + return object === null; +} +var _null = new type("tag:yaml.org,2002:null", { + kind: "scalar", + resolve: resolveYamlNull, + construct: constructYamlNull, + predicate: isNull, + represent: { + canonical: function() { + return "~"; + }, + lowercase: function() { + return "null"; + }, + uppercase: function() { + return "NULL"; + }, + camelcase: function() { + return "Null"; + }, + empty: function() { + return ""; + } + }, + defaultStyle: "lowercase" +}); +function resolveYamlBoolean(data) { + if (data === null) + return false; + var max = data.length; + return max === 4 && (data === "true" || data === "True" || data === "TRUE") || max === 5 && (data === "false" || data === "False" || data === "FALSE"); +} +function constructYamlBoolean(data) { + return data === "true" || data === "True" || data === "TRUE"; +} +function isBoolean(object) { + return Object.prototype.toString.call(object) === "[object Boolean]"; +} +var bool = new type("tag:yaml.org,2002:bool", { + kind: "scalar", + resolve: resolveYamlBoolean, + construct: constructYamlBoolean, + predicate: isBoolean, + represent: { + lowercase: function(object) { + return object ? "true" : "false"; + }, + uppercase: function(object) { + return object ? "TRUE" : "FALSE"; + }, + camelcase: function(object) { + return object ? "True" : "False"; + } + }, + defaultStyle: "lowercase" +}); +function isHexCode(c) { + return 48 <= c && c <= 57 || 65 <= c && c <= 70 || 97 <= c && c <= 102; +} +function isOctCode(c) { + return 48 <= c && c <= 55; +} +function isDecCode(c) { + return 48 <= c && c <= 57; +} +function resolveYamlInteger(data) { + if (data === null) + return false; + var max = data.length, index = 0, hasDigits = false, ch; + if (!max) + return false; + ch = data[index]; + if (ch === "-" || ch === "+") { + ch = data[++index]; + } + if (ch === "0") { + if (index + 1 === max) + return true; + ch = data[++index]; + if (ch === "b") { + index++; + for (; index < max; index++) { + ch = data[index]; + if (ch === "_") + continue; + if (ch !== "0" && ch !== "1") + return false; + hasDigits = true; + } + return hasDigits && ch !== "_"; + } + if (ch === "x") { + index++; + for (; index < max; index++) { + ch = data[index]; + if (ch === "_") + continue; + if (!isHexCode(data.charCodeAt(index))) + return false; + hasDigits = true; + } + return hasDigits && ch !== "_"; + } + if (ch === "o") { + index++; + for (; index < max; index++) { + ch = data[index]; + if (ch === "_") + continue; + if (!isOctCode(data.charCodeAt(index))) + return false; + hasDigits = true; + } + return hasDigits && ch !== "_"; + } + } + if (ch === "_") + return false; + for (; index < max; index++) { + ch = data[index]; + if (ch === "_") + continue; + if (!isDecCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + if (!hasDigits || ch === "_") + return false; + return true; +} +function constructYamlInteger(data) { + var value = data, sign = 1, ch; + if (value.indexOf("_") !== -1) { + value = value.replace(/_/g, ""); + } + ch = value[0]; + if (ch === "-" || ch === "+") { + if (ch === "-") + sign = -1; + value = value.slice(1); + ch = value[0]; + } + if (value === "0") + return 0; + if (ch === "0") { + if (value[1] === "b") + return sign * parseInt(value.slice(2), 2); + if (value[1] === "x") + return sign * parseInt(value.slice(2), 16); + if (value[1] === "o") + return sign * parseInt(value.slice(2), 8); + } + return sign * parseInt(value, 10); +} +function isInteger(object) { + return Object.prototype.toString.call(object) === "[object Number]" && (object % 1 === 0 && !common.isNegativeZero(object)); +} +var int = new type("tag:yaml.org,2002:int", { + kind: "scalar", + resolve: resolveYamlInteger, + construct: constructYamlInteger, + predicate: isInteger, + represent: { + binary: function(obj) { + return obj >= 0 ? "0b" + obj.toString(2) : "-0b" + obj.toString(2).slice(1); + }, + octal: function(obj) { + return obj >= 0 ? "0o" + obj.toString(8) : "-0o" + obj.toString(8).slice(1); + }, + decimal: function(obj) { + return obj.toString(10); + }, + hexadecimal: function(obj) { + return obj >= 0 ? "0x" + obj.toString(16).toUpperCase() : "-0x" + obj.toString(16).toUpperCase().slice(1); + } + }, + defaultStyle: "decimal", + styleAliases: { + binary: [2, "bin"], + octal: [8, "oct"], + decimal: [10, "dec"], + hexadecimal: [16, "hex"] + } +}); +var YAML_FLOAT_PATTERN = new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"); +function resolveYamlFloat(data) { + if (data === null) + return false; + if (!YAML_FLOAT_PATTERN.test(data) || data[data.length - 1] === "_") { + return false; + } + return true; +} +function constructYamlFloat(data) { + var value, sign; + value = data.replace(/_/g, "").toLowerCase(); + sign = value[0] === "-" ? -1 : 1; + if ("+-".indexOf(value[0]) >= 0) { + value = value.slice(1); + } + if (value === ".inf") { + return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; + } else if (value === ".nan") { + return NaN; + } + return sign * parseFloat(value, 10); +} +var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; +function representYamlFloat(object, style) { + var res; + if (isNaN(object)) { + switch (style) { + case "lowercase": + return ".nan"; + case "uppercase": + return ".NAN"; + case "camelcase": + return ".NaN"; + } + } else if (Number.POSITIVE_INFINITY === object) { + switch (style) { + case "lowercase": + return ".inf"; + case "uppercase": + return ".INF"; + case "camelcase": + return ".Inf"; + } + } else if (Number.NEGATIVE_INFINITY === object) { + switch (style) { + case "lowercase": + return "-.inf"; + case "uppercase": + return "-.INF"; + case "camelcase": + return "-.Inf"; + } + } else if (common.isNegativeZero(object)) { + return "-0.0"; + } + res = object.toString(10); + return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace("e", ".e") : res; +} +function isFloat(object) { + return Object.prototype.toString.call(object) === "[object Number]" && (object % 1 !== 0 || common.isNegativeZero(object)); +} +var float = new type("tag:yaml.org,2002:float", { + kind: "scalar", + resolve: resolveYamlFloat, + construct: constructYamlFloat, + predicate: isFloat, + represent: representYamlFloat, + defaultStyle: "lowercase" +}); +var json = failsafe.extend({ + implicit: [ + _null, + bool, + int, + float + ] +}); +var core = json; +var YAML_DATE_REGEXP = new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"); +var YAML_TIMESTAMP_REGEXP = new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$"); +function resolveYamlTimestamp(data) { + if (data === null) + return false; + if (YAML_DATE_REGEXP.exec(data) !== null) + return true; + if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) + return true; + return false; +} +function constructYamlTimestamp(data) { + var match, year, month, day, hour, minute, second, fraction = 0, delta = null, tz_hour, tz_minute, date; + match = YAML_DATE_REGEXP.exec(data); + if (match === null) + match = YAML_TIMESTAMP_REGEXP.exec(data); + if (match === null) + throw new Error("Date resolve error"); + year = +match[1]; + month = +match[2] - 1; + day = +match[3]; + if (!match[4]) { + return new Date(Date.UTC(year, month, day)); + } + hour = +match[4]; + minute = +match[5]; + second = +match[6]; + if (match[7]) { + fraction = match[7].slice(0, 3); + while (fraction.length < 3) { + fraction += "0"; + } + fraction = +fraction; + } + if (match[9]) { + tz_hour = +match[10]; + tz_minute = +(match[11] || 0); + delta = (tz_hour * 60 + tz_minute) * 6e4; + if (match[9] === "-") + delta = -delta; + } + date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + if (delta) + date.setTime(date.getTime() - delta); + return date; +} +function representYamlTimestamp(object) { + return object.toISOString(); +} +var timestamp = new type("tag:yaml.org,2002:timestamp", { + kind: "scalar", + resolve: resolveYamlTimestamp, + construct: constructYamlTimestamp, + instanceOf: Date, + represent: representYamlTimestamp +}); +function resolveYamlMerge(data) { + return data === "<<" || data === null; +} +var merge = new type("tag:yaml.org,2002:merge", { + kind: "scalar", + resolve: resolveYamlMerge +}); +var BASE64_MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r"; +function resolveYamlBinary(data) { + if (data === null) + return false; + var code, idx, bitlen = 0, max = data.length, map2 = BASE64_MAP; + for (idx = 0; idx < max; idx++) { + code = map2.indexOf(data.charAt(idx)); + if (code > 64) + continue; + if (code < 0) + return false; + bitlen += 6; + } + return bitlen % 8 === 0; +} +function constructYamlBinary(data) { + var idx, tailbits, input = data.replace(/[\r\n=]/g, ""), max = input.length, map2 = BASE64_MAP, bits = 0, result = []; + for (idx = 0; idx < max; idx++) { + if (idx % 4 === 0 && idx) { + result.push(bits >> 16 & 255); + result.push(bits >> 8 & 255); + result.push(bits & 255); + } + bits = bits << 6 | map2.indexOf(input.charAt(idx)); + } + tailbits = max % 4 * 6; + if (tailbits === 0) { + result.push(bits >> 16 & 255); + result.push(bits >> 8 & 255); + result.push(bits & 255); + } else if (tailbits === 18) { + result.push(bits >> 10 & 255); + result.push(bits >> 2 & 255); + } else if (tailbits === 12) { + result.push(bits >> 4 & 255); + } + return new Uint8Array(result); +} +function representYamlBinary(object) { + var result = "", bits = 0, idx, tail, max = object.length, map2 = BASE64_MAP; + for (idx = 0; idx < max; idx++) { + if (idx % 3 === 0 && idx) { + result += map2[bits >> 18 & 63]; + result += map2[bits >> 12 & 63]; + result += map2[bits >> 6 & 63]; + result += map2[bits & 63]; + } + bits = (bits << 8) + object[idx]; + } + tail = max % 3; + if (tail === 0) { + result += map2[bits >> 18 & 63]; + result += map2[bits >> 12 & 63]; + result += map2[bits >> 6 & 63]; + result += map2[bits & 63]; + } else if (tail === 2) { + result += map2[bits >> 10 & 63]; + result += map2[bits >> 4 & 63]; + result += map2[bits << 2 & 63]; + result += map2[64]; + } else if (tail === 1) { + result += map2[bits >> 2 & 63]; + result += map2[bits << 4 & 63]; + result += map2[64]; + result += map2[64]; + } + return result; +} +function isBinary(obj) { + return Object.prototype.toString.call(obj) === "[object Uint8Array]"; +} +var binary = new type("tag:yaml.org,2002:binary", { + kind: "scalar", + resolve: resolveYamlBinary, + construct: constructYamlBinary, + predicate: isBinary, + represent: representYamlBinary +}); +var _hasOwnProperty$3 = Object.prototype.hasOwnProperty; +var _toString$2 = Object.prototype.toString; +function resolveYamlOmap(data) { + if (data === null) + return true; + var objectKeys = [], index, length, pair, pairKey, pairHasKey, object = data; + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + pairHasKey = false; + if (_toString$2.call(pair) !== "[object Object]") + return false; + for (pairKey in pair) { + if (_hasOwnProperty$3.call(pair, pairKey)) { + if (!pairHasKey) + pairHasKey = true; + else + return false; + } + } + if (!pairHasKey) + return false; + if (objectKeys.indexOf(pairKey) === -1) + objectKeys.push(pairKey); + else + return false; + } + return true; +} +function constructYamlOmap(data) { + return data !== null ? data : []; +} +var omap = new type("tag:yaml.org,2002:omap", { + kind: "sequence", + resolve: resolveYamlOmap, + construct: constructYamlOmap +}); +var _toString$1 = Object.prototype.toString; +function resolveYamlPairs(data) { + if (data === null) + return true; + var index, length, pair, keys, result, object = data; + result = new Array(object.length); + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + if (_toString$1.call(pair) !== "[object Object]") + return false; + keys = Object.keys(pair); + if (keys.length !== 1) + return false; + result[index] = [keys[0], pair[keys[0]]]; + } + return true; +} +function constructYamlPairs(data) { + if (data === null) + return []; + var index, length, pair, keys, result, object = data; + result = new Array(object.length); + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + keys = Object.keys(pair); + result[index] = [keys[0], pair[keys[0]]]; + } + return result; +} +var pairs = new type("tag:yaml.org,2002:pairs", { + kind: "sequence", + resolve: resolveYamlPairs, + construct: constructYamlPairs +}); +var _hasOwnProperty$2 = Object.prototype.hasOwnProperty; +function resolveYamlSet(data) { + if (data === null) + return true; + var key, object = data; + for (key in object) { + if (_hasOwnProperty$2.call(object, key)) { + if (object[key] !== null) + return false; + } + } + return true; +} +function constructYamlSet(data) { + return data !== null ? data : {}; +} +var set = new type("tag:yaml.org,2002:set", { + kind: "mapping", + resolve: resolveYamlSet, + construct: constructYamlSet +}); +var _default = core.extend({ + implicit: [ + timestamp, + merge + ], + explicit: [ + binary, + omap, + pairs, + set + ] +}); +var _hasOwnProperty$1 = Object.prototype.hasOwnProperty; +var CONTEXT_FLOW_IN = 1; +var CONTEXT_FLOW_OUT = 2; +var CONTEXT_BLOCK_IN = 3; +var CONTEXT_BLOCK_OUT = 4; +var CHOMPING_CLIP = 1; +var CHOMPING_STRIP = 2; +var CHOMPING_KEEP = 3; +var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; +var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; +var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; +var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; +function _class(obj) { + return Object.prototype.toString.call(obj); +} +function is_EOL(c) { + return c === 10 || c === 13; +} +function is_WHITE_SPACE(c) { + return c === 9 || c === 32; +} +function is_WS_OR_EOL(c) { + return c === 9 || c === 32 || c === 10 || c === 13; +} +function is_FLOW_INDICATOR(c) { + return c === 44 || c === 91 || c === 93 || c === 123 || c === 125; +} +function fromHexCode(c) { + var lc; + if (48 <= c && c <= 57) { + return c - 48; + } + lc = c | 32; + if (97 <= lc && lc <= 102) { + return lc - 97 + 10; + } + return -1; +} +function escapedHexLen(c) { + if (c === 120) { + return 2; + } + if (c === 117) { + return 4; + } + if (c === 85) { + return 8; + } + return 0; +} +function fromDecimalCode(c) { + if (48 <= c && c <= 57) { + return c - 48; + } + return -1; +} +function simpleEscapeSequence(c) { + return c === 48 ? "\0" : c === 97 ? "\x07" : c === 98 ? "\b" : c === 116 ? " " : c === 9 ? " " : c === 110 ? "\n" : c === 118 ? "\v" : c === 102 ? "\f" : c === 114 ? "\r" : c === 101 ? "" : c === 32 ? " " : c === 34 ? '"' : c === 47 ? "/" : c === 92 ? "\\" : c === 78 ? "\x85" : c === 95 ? "\xA0" : c === 76 ? "\u2028" : c === 80 ? "\u2029" : ""; +} +function charFromCodepoint(c) { + if (c <= 65535) { + return String.fromCharCode(c); + } + return String.fromCharCode((c - 65536 >> 10) + 55296, (c - 65536 & 1023) + 56320); +} +var simpleEscapeCheck = new Array(256); +var simpleEscapeMap = new Array(256); +for (var i = 0; i < 256; i++) { + simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; + simpleEscapeMap[i] = simpleEscapeSequence(i); +} +function State$1(input, options) { + this.input = input; + this.filename = options["filename"] || null; + this.schema = options["schema"] || _default; + this.onWarning = options["onWarning"] || null; + this.legacy = options["legacy"] || false; + this.json = options["json"] || false; + this.listener = options["listener"] || null; + this.implicitTypes = this.schema.compiledImplicit; + this.typeMap = this.schema.compiledTypeMap; + this.length = input.length; + this.position = 0; + this.line = 0; + this.lineStart = 0; + this.lineIndent = 0; + this.firstTabInLine = -1; + this.documents = []; +} +function generateError(state, message) { + var mark = { + name: state.filename, + buffer: state.input.slice(0, -1), + position: state.position, + line: state.line, + column: state.position - state.lineStart + }; + mark.snippet = snippet(mark); + return new exception(message, mark); +} +function throwError(state, message) { + throw generateError(state, message); +} +function throwWarning(state, message) { + if (state.onWarning) { + state.onWarning.call(null, generateError(state, message)); + } +} +var directiveHandlers = { + YAML: function handleYamlDirective(state, name, args) { + var match, major, minor; + if (state.version !== null) { + throwError(state, "duplication of %YAML directive"); + } + if (args.length !== 1) { + throwError(state, "YAML directive accepts exactly one argument"); + } + match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); + if (match === null) { + throwError(state, "ill-formed argument of the YAML directive"); + } + major = parseInt(match[1], 10); + minor = parseInt(match[2], 10); + if (major !== 1) { + throwError(state, "unacceptable YAML version of the document"); + } + state.version = args[0]; + state.checkLineBreaks = minor < 2; + if (minor !== 1 && minor !== 2) { + throwWarning(state, "unsupported YAML version of the document"); + } + }, + TAG: function handleTagDirective(state, name, args) { + var handle, prefix; + if (args.length !== 2) { + throwError(state, "TAG directive accepts exactly two arguments"); + } + handle = args[0]; + prefix = args[1]; + if (!PATTERN_TAG_HANDLE.test(handle)) { + throwError(state, "ill-formed tag handle (first argument) of the TAG directive"); + } + if (_hasOwnProperty$1.call(state.tagMap, handle)) { + throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); + } + if (!PATTERN_TAG_URI.test(prefix)) { + throwError(state, "ill-formed tag prefix (second argument) of the TAG directive"); + } + try { + prefix = decodeURIComponent(prefix); + } catch (err) { + throwError(state, "tag prefix is malformed: " + prefix); + } + state.tagMap[handle] = prefix; + } +}; +function captureSegment(state, start, end, checkJson) { + var _position, _length, _character, _result; + if (start < end) { + _result = state.input.slice(start, end); + if (checkJson) { + for (_position = 0, _length = _result.length; _position < _length; _position += 1) { + _character = _result.charCodeAt(_position); + if (!(_character === 9 || 32 <= _character && _character <= 1114111)) { + throwError(state, "expected valid JSON character"); + } + } + } else if (PATTERN_NON_PRINTABLE.test(_result)) { + throwError(state, "the stream contains non-printable characters"); + } + state.result += _result; + } +} +function mergeMappings(state, destination, source, overridableKeys) { + var sourceKeys, key, index, quantity; + if (!common.isObject(source)) { + throwError(state, "cannot merge mappings; the provided source object is unacceptable"); + } + sourceKeys = Object.keys(source); + for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { + key = sourceKeys[index]; + if (!_hasOwnProperty$1.call(destination, key)) { + destination[key] = source[key]; + overridableKeys[key] = true; + } + } +} +function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startLineStart, startPos) { + var index, quantity; + if (Array.isArray(keyNode)) { + keyNode = Array.prototype.slice.call(keyNode); + for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { + if (Array.isArray(keyNode[index])) { + throwError(state, "nested arrays are not supported inside keys"); + } + if (typeof keyNode === "object" && _class(keyNode[index]) === "[object Object]") { + keyNode[index] = "[object Object]"; + } + } + } + if (typeof keyNode === "object" && _class(keyNode) === "[object Object]") { + keyNode = "[object Object]"; + } + keyNode = String(keyNode); + if (_result === null) { + _result = {}; + } + if (keyTag === "tag:yaml.org,2002:merge") { + if (Array.isArray(valueNode)) { + for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { + mergeMappings(state, _result, valueNode[index], overridableKeys); + } + } else { + mergeMappings(state, _result, valueNode, overridableKeys); + } + } else { + if (!state.json && !_hasOwnProperty$1.call(overridableKeys, keyNode) && _hasOwnProperty$1.call(_result, keyNode)) { + state.line = startLine || state.line; + state.lineStart = startLineStart || state.lineStart; + state.position = startPos || state.position; + throwError(state, "duplicated mapping key"); + } + if (keyNode === "__proto__") { + Object.defineProperty(_result, keyNode, { + configurable: true, + enumerable: true, + writable: true, + value: valueNode + }); + } else { + _result[keyNode] = valueNode; + } + delete overridableKeys[keyNode]; + } + return _result; +} +function readLineBreak(state) { + var ch; + ch = state.input.charCodeAt(state.position); + if (ch === 10) { + state.position++; + } else if (ch === 13) { + state.position++; + if (state.input.charCodeAt(state.position) === 10) { + state.position++; + } + } else { + throwError(state, "a line break is expected"); + } + state.line += 1; + state.lineStart = state.position; + state.firstTabInLine = -1; +} +function skipSeparationSpace(state, allowComments, checkIndent) { + var lineBreaks = 0, ch = state.input.charCodeAt(state.position); + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + if (ch === 9 && state.firstTabInLine === -1) { + state.firstTabInLine = state.position; + } + ch = state.input.charCodeAt(++state.position); + } + if (allowComments && ch === 35) { + do { + ch = state.input.charCodeAt(++state.position); + } while (ch !== 10 && ch !== 13 && ch !== 0); + } + if (is_EOL(ch)) { + readLineBreak(state); + ch = state.input.charCodeAt(state.position); + lineBreaks++; + state.lineIndent = 0; + while (ch === 32) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + } else { + break; + } + } + if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { + throwWarning(state, "deficient indentation"); + } + return lineBreaks; +} +function testDocumentSeparator(state) { + var _position = state.position, ch; + ch = state.input.charCodeAt(_position); + if ((ch === 45 || ch === 46) && ch === state.input.charCodeAt(_position + 1) && ch === state.input.charCodeAt(_position + 2)) { + _position += 3; + ch = state.input.charCodeAt(_position); + if (ch === 0 || is_WS_OR_EOL(ch)) { + return true; + } + } + return false; +} +function writeFoldedLines(state, count) { + if (count === 1) { + state.result += " "; + } else if (count > 1) { + state.result += common.repeat("\n", count - 1); + } +} +function readPlainScalar(state, nodeIndent, withinFlowCollection) { + var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, _kind = state.kind, _result = state.result, ch; + ch = state.input.charCodeAt(state.position); + if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 35 || ch === 38 || ch === 42 || ch === 33 || ch === 124 || ch === 62 || ch === 39 || ch === 34 || ch === 37 || ch === 64 || ch === 96) { + return false; + } + if (ch === 63 || ch === 45) { + following = state.input.charCodeAt(state.position + 1); + if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) { + return false; + } + } + state.kind = "scalar"; + state.result = ""; + captureStart = captureEnd = state.position; + hasPendingContent = false; + while (ch !== 0) { + if (ch === 58) { + following = state.input.charCodeAt(state.position + 1); + if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) { + break; + } + } else if (ch === 35) { + preceding = state.input.charCodeAt(state.position - 1); + if (is_WS_OR_EOL(preceding)) { + break; + } + } else if (state.position === state.lineStart && testDocumentSeparator(state) || withinFlowCollection && is_FLOW_INDICATOR(ch)) { + break; + } else if (is_EOL(ch)) { + _line = state.line; + _lineStart = state.lineStart; + _lineIndent = state.lineIndent; + skipSeparationSpace(state, false, -1); + if (state.lineIndent >= nodeIndent) { + hasPendingContent = true; + ch = state.input.charCodeAt(state.position); + continue; + } else { + state.position = captureEnd; + state.line = _line; + state.lineStart = _lineStart; + state.lineIndent = _lineIndent; + break; + } + } + if (hasPendingContent) { + captureSegment(state, captureStart, captureEnd, false); + writeFoldedLines(state, state.line - _line); + captureStart = captureEnd = state.position; + hasPendingContent = false; + } + if (!is_WHITE_SPACE(ch)) { + captureEnd = state.position + 1; + } + ch = state.input.charCodeAt(++state.position); + } + captureSegment(state, captureStart, captureEnd, false); + if (state.result) { + return true; + } + state.kind = _kind; + state.result = _result; + return false; +} +function readSingleQuotedScalar(state, nodeIndent) { + var ch, captureStart, captureEnd; + ch = state.input.charCodeAt(state.position); + if (ch !== 39) { + return false; + } + state.kind = "scalar"; + state.result = ""; + state.position++; + captureStart = captureEnd = state.position; + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 39) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + if (ch === 39) { + captureStart = state.position; + state.position++; + captureEnd = state.position; + } else { + return true; + } + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, "unexpected end of the document within a single quoted scalar"); + } else { + state.position++; + captureEnd = state.position; + } + } + throwError(state, "unexpected end of the stream within a single quoted scalar"); +} +function readDoubleQuotedScalar(state, nodeIndent) { + var captureStart, captureEnd, hexLength, hexResult, tmp, ch; + ch = state.input.charCodeAt(state.position); + if (ch !== 34) { + return false; + } + state.kind = "scalar"; + state.result = ""; + state.position++; + captureStart = captureEnd = state.position; + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 34) { + captureSegment(state, captureStart, state.position, true); + state.position++; + return true; + } else if (ch === 92) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + if (is_EOL(ch)) { + skipSeparationSpace(state, false, nodeIndent); + } else if (ch < 256 && simpleEscapeCheck[ch]) { + state.result += simpleEscapeMap[ch]; + state.position++; + } else if ((tmp = escapedHexLen(ch)) > 0) { + hexLength = tmp; + hexResult = 0; + for (; hexLength > 0; hexLength--) { + ch = state.input.charCodeAt(++state.position); + if ((tmp = fromHexCode(ch)) >= 0) { + hexResult = (hexResult << 4) + tmp; + } else { + throwError(state, "expected hexadecimal character"); + } + } + state.result += charFromCodepoint(hexResult); + state.position++; + } else { + throwError(state, "unknown escape sequence"); + } + captureStart = captureEnd = state.position; + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, "unexpected end of the document within a double quoted scalar"); + } else { + state.position++; + captureEnd = state.position; + } + } + throwError(state, "unexpected end of the stream within a double quoted scalar"); +} +function readFlowCollection(state, nodeIndent) { + var readNext = true, _line, _lineStart, _pos, _tag = state.tag, _result, _anchor = state.anchor, following, terminator, isPair, isExplicitPair, isMapping, overridableKeys = Object.create(null), keyNode, keyTag, valueNode, ch; + ch = state.input.charCodeAt(state.position); + if (ch === 91) { + terminator = 93; + isMapping = false; + _result = []; + } else if (ch === 123) { + terminator = 125; + isMapping = true; + _result = {}; + } else { + return false; + } + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + ch = state.input.charCodeAt(++state.position); + while (ch !== 0) { + skipSeparationSpace(state, true, nodeIndent); + ch = state.input.charCodeAt(state.position); + if (ch === terminator) { + state.position++; + state.tag = _tag; + state.anchor = _anchor; + state.kind = isMapping ? "mapping" : "sequence"; + state.result = _result; + return true; + } else if (!readNext) { + throwError(state, "missed comma between flow collection entries"); + } else if (ch === 44) { + throwError(state, "expected the node content, but found ','"); + } + keyTag = keyNode = valueNode = null; + isPair = isExplicitPair = false; + if (ch === 63) { + following = state.input.charCodeAt(state.position + 1); + if (is_WS_OR_EOL(following)) { + isPair = isExplicitPair = true; + state.position++; + skipSeparationSpace(state, true, nodeIndent); + } + } + _line = state.line; + _lineStart = state.lineStart; + _pos = state.position; + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + keyTag = state.tag; + keyNode = state.result; + skipSeparationSpace(state, true, nodeIndent); + ch = state.input.charCodeAt(state.position); + if ((isExplicitPair || state.line === _line) && ch === 58) { + isPair = true; + ch = state.input.charCodeAt(++state.position); + skipSeparationSpace(state, true, nodeIndent); + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + valueNode = state.result; + } + if (isMapping) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos); + } else if (isPair) { + _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos)); + } else { + _result.push(keyNode); + } + skipSeparationSpace(state, true, nodeIndent); + ch = state.input.charCodeAt(state.position); + if (ch === 44) { + readNext = true; + ch = state.input.charCodeAt(++state.position); + } else { + readNext = false; + } + } + throwError(state, "unexpected end of the stream within a flow collection"); +} +function readBlockScalar(state, nodeIndent) { + var captureStart, folding, chomping = CHOMPING_CLIP, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false, tmp, ch; + ch = state.input.charCodeAt(state.position); + if (ch === 124) { + folding = false; + } else if (ch === 62) { + folding = true; + } else { + return false; + } + state.kind = "scalar"; + state.result = ""; + while (ch !== 0) { + ch = state.input.charCodeAt(++state.position); + if (ch === 43 || ch === 45) { + if (CHOMPING_CLIP === chomping) { + chomping = ch === 43 ? CHOMPING_KEEP : CHOMPING_STRIP; + } else { + throwError(state, "repeat of a chomping mode identifier"); + } + } else if ((tmp = fromDecimalCode(ch)) >= 0) { + if (tmp === 0) { + throwError(state, "bad explicit indentation width of a block scalar; it cannot be less than one"); + } else if (!detectedIndent) { + textIndent = nodeIndent + tmp - 1; + detectedIndent = true; + } else { + throwError(state, "repeat of an indentation width identifier"); + } + } else { + break; + } + } + if (is_WHITE_SPACE(ch)) { + do { + ch = state.input.charCodeAt(++state.position); + } while (is_WHITE_SPACE(ch)); + if (ch === 35) { + do { + ch = state.input.charCodeAt(++state.position); + } while (!is_EOL(ch) && ch !== 0); + } + } + while (ch !== 0) { + readLineBreak(state); + state.lineIndent = 0; + ch = state.input.charCodeAt(state.position); + while ((!detectedIndent || state.lineIndent < textIndent) && ch === 32) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + if (!detectedIndent && state.lineIndent > textIndent) { + textIndent = state.lineIndent; + } + if (is_EOL(ch)) { + emptyLines++; + continue; + } + if (state.lineIndent < textIndent) { + if (chomping === CHOMPING_KEEP) { + state.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); + } else if (chomping === CHOMPING_CLIP) { + if (didReadContent) { + state.result += "\n"; + } + } + break; + } + if (folding) { + if (is_WHITE_SPACE(ch)) { + atMoreIndented = true; + state.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); + } else if (atMoreIndented) { + atMoreIndented = false; + state.result += common.repeat("\n", emptyLines + 1); + } else if (emptyLines === 0) { + if (didReadContent) { + state.result += " "; + } + } else { + state.result += common.repeat("\n", emptyLines); + } + } else { + state.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); + } + didReadContent = true; + detectedIndent = true; + emptyLines = 0; + captureStart = state.position; + while (!is_EOL(ch) && ch !== 0) { + ch = state.input.charCodeAt(++state.position); + } + captureSegment(state, captureStart, state.position, false); + } + return true; +} +function readBlockSequence(state, nodeIndent) { + var _line, _tag = state.tag, _anchor = state.anchor, _result = [], following, detected = false, ch; + if (state.firstTabInLine !== -1) + return false; + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + ch = state.input.charCodeAt(state.position); + while (ch !== 0) { + if (state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, "tab characters must not be used in indentation"); + } + if (ch !== 45) { + break; + } + following = state.input.charCodeAt(state.position + 1); + if (!is_WS_OR_EOL(following)) { + break; + } + detected = true; + state.position++; + if (skipSeparationSpace(state, true, -1)) { + if (state.lineIndent <= nodeIndent) { + _result.push(null); + ch = state.input.charCodeAt(state.position); + continue; + } + } + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); + _result.push(state.result); + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) { + throwError(state, "bad indentation of a sequence entry"); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = "sequence"; + state.result = _result; + return true; + } + return false; +} +function readBlockMapping(state, nodeIndent, flowIndent) { + var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, _tag = state.tag, _anchor = state.anchor, _result = {}, overridableKeys = Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch; + if (state.firstTabInLine !== -1) + return false; + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + ch = state.input.charCodeAt(state.position); + while (ch !== 0) { + if (!atExplicitKey && state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, "tab characters must not be used in indentation"); + } + following = state.input.charCodeAt(state.position + 1); + _line = state.line; + if ((ch === 63 || ch === 58) && is_WS_OR_EOL(following)) { + if (ch === 63) { + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + detected = true; + atExplicitKey = true; + allowCompact = true; + } else if (atExplicitKey) { + atExplicitKey = false; + allowCompact = true; + } else { + throwError(state, "incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"); + } + state.position += 1; + ch = following; + } else { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + break; + } + if (state.line === _line) { + ch = state.input.charCodeAt(state.position); + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + if (ch === 58) { + ch = state.input.charCodeAt(++state.position); + if (!is_WS_OR_EOL(ch)) { + throwError(state, "a whitespace character is expected after the key-value separator within a block mapping"); + } + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + detected = true; + atExplicitKey = false; + allowCompact = false; + keyTag = state.tag; + keyNode = state.result; + } else if (detected) { + throwError(state, "can not read an implicit mapping pair; a colon is missed"); + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; + } + } else if (detected) { + throwError(state, "can not read a block mapping entry; a multiline key may not be an implicit key"); + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; + } + } + if (state.line === _line || state.lineIndent > nodeIndent) { + if (atExplicitKey) { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + } + if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { + if (atExplicitKey) { + keyNode = state.result; + } else { + valueNode = state.result; + } + } + if (!atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + } + if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) { + throwError(state, "bad indentation of a mapping entry"); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + } + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = "mapping"; + state.result = _result; + } + return detected; +} +function readTagProperty(state) { + var _position, isVerbatim = false, isNamed = false, tagHandle, tagName, ch; + ch = state.input.charCodeAt(state.position); + if (ch !== 33) + return false; + if (state.tag !== null) { + throwError(state, "duplication of a tag property"); + } + ch = state.input.charCodeAt(++state.position); + if (ch === 60) { + isVerbatim = true; + ch = state.input.charCodeAt(++state.position); + } else if (ch === 33) { + isNamed = true; + tagHandle = "!!"; + ch = state.input.charCodeAt(++state.position); + } else { + tagHandle = "!"; + } + _position = state.position; + if (isVerbatim) { + do { + ch = state.input.charCodeAt(++state.position); + } while (ch !== 0 && ch !== 62); + if (state.position < state.length) { + tagName = state.input.slice(_position, state.position); + ch = state.input.charCodeAt(++state.position); + } else { + throwError(state, "unexpected end of the stream within a verbatim tag"); + } + } else { + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + if (ch === 33) { + if (!isNamed) { + tagHandle = state.input.slice(_position - 1, state.position + 1); + if (!PATTERN_TAG_HANDLE.test(tagHandle)) { + throwError(state, "named tag handle cannot contain such characters"); + } + isNamed = true; + _position = state.position + 1; + } else { + throwError(state, "tag suffix cannot contain exclamation marks"); + } + } + ch = state.input.charCodeAt(++state.position); + } + tagName = state.input.slice(_position, state.position); + if (PATTERN_FLOW_INDICATORS.test(tagName)) { + throwError(state, "tag suffix cannot contain flow indicator characters"); + } + } + if (tagName && !PATTERN_TAG_URI.test(tagName)) { + throwError(state, "tag name cannot contain such characters: " + tagName); + } + try { + tagName = decodeURIComponent(tagName); + } catch (err) { + throwError(state, "tag name is malformed: " + tagName); + } + if (isVerbatim) { + state.tag = tagName; + } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) { + state.tag = state.tagMap[tagHandle] + tagName; + } else if (tagHandle === "!") { + state.tag = "!" + tagName; + } else if (tagHandle === "!!") { + state.tag = "tag:yaml.org,2002:" + tagName; + } else { + throwError(state, 'undeclared tag handle "' + tagHandle + '"'); + } + return true; +} +function readAnchorProperty(state) { + var _position, ch; + ch = state.input.charCodeAt(state.position); + if (ch !== 38) + return false; + if (state.anchor !== null) { + throwError(state, "duplication of an anchor property"); + } + ch = state.input.charCodeAt(++state.position); + _position = state.position; + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + if (state.position === _position) { + throwError(state, "name of an anchor node must contain at least one character"); + } + state.anchor = state.input.slice(_position, state.position); + return true; +} +function readAlias(state) { + var _position, alias, ch; + ch = state.input.charCodeAt(state.position); + if (ch !== 42) + return false; + ch = state.input.charCodeAt(++state.position); + _position = state.position; + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + if (state.position === _position) { + throwError(state, "name of an alias node must contain at least one character"); + } + alias = state.input.slice(_position, state.position); + if (!_hasOwnProperty$1.call(state.anchorMap, alias)) { + throwError(state, 'unidentified alias "' + alias + '"'); + } + state.result = state.anchorMap[alias]; + skipSeparationSpace(state, true, -1); + return true; +} +function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { + var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type2, flowIndent, blockIndent; + if (state.listener !== null) { + state.listener("open", state); + } + state.tag = null; + state.anchor = null; + state.kind = null; + state.result = null; + allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext; + if (allowToSeek) { + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } + } + if (indentStatus === 1) { + while (readTagProperty(state) || readAnchorProperty(state)) { + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + allowBlockCollections = allowBlockStyles; + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } else { + allowBlockCollections = false; + } + } + } + if (allowBlockCollections) { + allowBlockCollections = atNewLine || allowCompact; + } + if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { + if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { + flowIndent = parentIndent; + } else { + flowIndent = parentIndent + 1; + } + blockIndent = state.position - state.lineStart; + if (indentStatus === 1) { + if (allowBlockCollections && (readBlockSequence(state, blockIndent) || readBlockMapping(state, blockIndent, flowIndent)) || readFlowCollection(state, flowIndent)) { + hasContent = true; + } else { + if (allowBlockScalars && readBlockScalar(state, flowIndent) || readSingleQuotedScalar(state, flowIndent) || readDoubleQuotedScalar(state, flowIndent)) { + hasContent = true; + } else if (readAlias(state)) { + hasContent = true; + if (state.tag !== null || state.anchor !== null) { + throwError(state, "alias node should not have any properties"); + } + } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { + hasContent = true; + if (state.tag === null) { + state.tag = "?"; + } + } + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } else if (indentStatus === 0) { + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + } + } + if (state.tag === null) { + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } else if (state.tag === "?") { + if (state.result !== null && state.kind !== "scalar") { + throwError(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + } + for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { + type2 = state.implicitTypes[typeIndex]; + if (type2.resolve(state.result)) { + state.result = type2.construct(state.result); + state.tag = type2.tag; + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + break; + } + } + } else if (state.tag !== "!") { + if (_hasOwnProperty$1.call(state.typeMap[state.kind || "fallback"], state.tag)) { + type2 = state.typeMap[state.kind || "fallback"][state.tag]; + } else { + type2 = null; + typeList = state.typeMap.multi[state.kind || "fallback"]; + for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { + if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) { + type2 = typeList[typeIndex]; + break; + } + } + } + if (!type2) { + throwError(state, "unknown tag !<" + state.tag + ">"); + } + if (state.result !== null && type2.kind !== state.kind) { + throwError(state, "unacceptable node kind for !<" + state.tag + '> tag; it should be "' + type2.kind + '", not "' + state.kind + '"'); + } + if (!type2.resolve(state.result, state.tag)) { + throwError(state, "cannot resolve a node with !<" + state.tag + "> explicit tag"); + } else { + state.result = type2.construct(state.result, state.tag); + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } + if (state.listener !== null) { + state.listener("close", state); + } + return state.tag !== null || state.anchor !== null || hasContent; +} +function readDocument(state) { + var documentStart = state.position, _position, directiveName, directiveArgs, hasDirectives = false, ch; + state.version = null; + state.checkLineBreaks = state.legacy; + state.tagMap = Object.create(null); + state.anchorMap = Object.create(null); + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + if (state.lineIndent > 0 || ch !== 37) { + break; + } + hasDirectives = true; + ch = state.input.charCodeAt(++state.position); + _position = state.position; + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + directiveName = state.input.slice(_position, state.position); + directiveArgs = []; + if (directiveName.length < 1) { + throwError(state, "directive name must not be less than one character in length"); + } + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + if (ch === 35) { + do { + ch = state.input.charCodeAt(++state.position); + } while (ch !== 0 && !is_EOL(ch)); + break; + } + if (is_EOL(ch)) + break; + _position = state.position; + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + directiveArgs.push(state.input.slice(_position, state.position)); + } + if (ch !== 0) + readLineBreak(state); + if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) { + directiveHandlers[directiveName](state, directiveName, directiveArgs); + } else { + throwWarning(state, 'unknown document directive "' + directiveName + '"'); + } + } + skipSeparationSpace(state, true, -1); + if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 45 && state.input.charCodeAt(state.position + 1) === 45 && state.input.charCodeAt(state.position + 2) === 45) { + state.position += 3; + skipSeparationSpace(state, true, -1); + } else if (hasDirectives) { + throwError(state, "directives end mark is expected"); + } + composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); + skipSeparationSpace(state, true, -1); + if (state.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { + throwWarning(state, "non-ASCII line breaks are interpreted as content"); + } + state.documents.push(state.result); + if (state.position === state.lineStart && testDocumentSeparator(state)) { + if (state.input.charCodeAt(state.position) === 46) { + state.position += 3; + skipSeparationSpace(state, true, -1); + } + return; + } + if (state.position < state.length - 1) { + throwError(state, "end of the stream or a document separator is expected"); + } else { + return; + } +} +function loadDocuments(input, options) { + input = String(input); + options = options || {}; + if (input.length !== 0) { + if (input.charCodeAt(input.length - 1) !== 10 && input.charCodeAt(input.length - 1) !== 13) { + input += "\n"; + } + if (input.charCodeAt(0) === 65279) { + input = input.slice(1); + } + } + var state = new State$1(input, options); + var nullpos = input.indexOf("\0"); + if (nullpos !== -1) { + state.position = nullpos; + throwError(state, "null byte is not allowed in input"); + } + state.input += "\0"; + while (state.input.charCodeAt(state.position) === 32) { + state.lineIndent += 1; + state.position += 1; + } + while (state.position < state.length - 1) { + readDocument(state); + } + return state.documents; +} +function loadAll$1(input, iterator, options) { + if (iterator !== null && typeof iterator === "object" && typeof options === "undefined") { + options = iterator; + iterator = null; + } + var documents = loadDocuments(input, options); + if (typeof iterator !== "function") { + return documents; + } + for (var index = 0, length = documents.length; index < length; index += 1) { + iterator(documents[index]); + } +} +function load$1(input, options) { + var documents = loadDocuments(input, options); + if (documents.length === 0) { + return void 0; + } else if (documents.length === 1) { + return documents[0]; + } + throw new exception("expected a single document in the stream, but found more"); +} +var loadAll_1 = loadAll$1; +var load_1 = load$1; +var loader = { + loadAll: loadAll_1, + load: load_1 +}; +var _toString = Object.prototype.toString; +var _hasOwnProperty = Object.prototype.hasOwnProperty; +var CHAR_BOM = 65279; +var CHAR_TAB = 9; +var CHAR_LINE_FEED = 10; +var CHAR_CARRIAGE_RETURN = 13; +var CHAR_SPACE = 32; +var CHAR_EXCLAMATION = 33; +var CHAR_DOUBLE_QUOTE = 34; +var CHAR_SHARP = 35; +var CHAR_PERCENT = 37; +var CHAR_AMPERSAND = 38; +var CHAR_SINGLE_QUOTE = 39; +var CHAR_ASTERISK = 42; +var CHAR_COMMA = 44; +var CHAR_MINUS = 45; +var CHAR_COLON = 58; +var CHAR_EQUALS = 61; +var CHAR_GREATER_THAN = 62; +var CHAR_QUESTION = 63; +var CHAR_COMMERCIAL_AT = 64; +var CHAR_LEFT_SQUARE_BRACKET = 91; +var CHAR_RIGHT_SQUARE_BRACKET = 93; +var CHAR_GRAVE_ACCENT = 96; +var CHAR_LEFT_CURLY_BRACKET = 123; +var CHAR_VERTICAL_LINE = 124; +var CHAR_RIGHT_CURLY_BRACKET = 125; +var ESCAPE_SEQUENCES = {}; +ESCAPE_SEQUENCES[0] = "\\0"; +ESCAPE_SEQUENCES[7] = "\\a"; +ESCAPE_SEQUENCES[8] = "\\b"; +ESCAPE_SEQUENCES[9] = "\\t"; +ESCAPE_SEQUENCES[10] = "\\n"; +ESCAPE_SEQUENCES[11] = "\\v"; +ESCAPE_SEQUENCES[12] = "\\f"; +ESCAPE_SEQUENCES[13] = "\\r"; +ESCAPE_SEQUENCES[27] = "\\e"; +ESCAPE_SEQUENCES[34] = '\\"'; +ESCAPE_SEQUENCES[92] = "\\\\"; +ESCAPE_SEQUENCES[133] = "\\N"; +ESCAPE_SEQUENCES[160] = "\\_"; +ESCAPE_SEQUENCES[8232] = "\\L"; +ESCAPE_SEQUENCES[8233] = "\\P"; +var DEPRECATED_BOOLEANS_SYNTAX = [ + "y", + "Y", + "yes", + "Yes", + "YES", + "on", + "On", + "ON", + "n", + "N", + "no", + "No", + "NO", + "off", + "Off", + "OFF" +]; +var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/; +function compileStyleMap(schema2, map2) { + var result, keys, index, length, tag, style, type2; + if (map2 === null) + return {}; + result = {}; + keys = Object.keys(map2); + for (index = 0, length = keys.length; index < length; index += 1) { + tag = keys[index]; + style = String(map2[tag]); + if (tag.slice(0, 2) === "!!") { + tag = "tag:yaml.org,2002:" + tag.slice(2); + } + type2 = schema2.compiledTypeMap["fallback"][tag]; + if (type2 && _hasOwnProperty.call(type2.styleAliases, style)) { + style = type2.styleAliases[style]; + } + result[tag] = style; + } + return result; +} +function encodeHex(character) { + var string, handle, length; + string = character.toString(16).toUpperCase(); + if (character <= 255) { + handle = "x"; + length = 2; + } else if (character <= 65535) { + handle = "u"; + length = 4; + } else if (character <= 4294967295) { + handle = "U"; + length = 8; + } else { + throw new exception("code point within a string may not be greater than 0xFFFFFFFF"); + } + return "\\" + handle + common.repeat("0", length - string.length) + string; +} +var QUOTING_TYPE_SINGLE = 1, QUOTING_TYPE_DOUBLE = 2; +function State(options) { + this.schema = options["schema"] || _default; + this.indent = Math.max(1, options["indent"] || 2); + this.noArrayIndent = options["noArrayIndent"] || false; + this.skipInvalid = options["skipInvalid"] || false; + this.flowLevel = common.isNothing(options["flowLevel"]) ? -1 : options["flowLevel"]; + this.styleMap = compileStyleMap(this.schema, options["styles"] || null); + this.sortKeys = options["sortKeys"] || false; + this.lineWidth = options["lineWidth"] || 80; + this.noRefs = options["noRefs"] || false; + this.noCompatMode = options["noCompatMode"] || false; + this.condenseFlow = options["condenseFlow"] || false; + this.quotingType = options["quotingType"] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE; + this.forceQuotes = options["forceQuotes"] || false; + this.replacer = typeof options["replacer"] === "function" ? options["replacer"] : null; + this.implicitTypes = this.schema.compiledImplicit; + this.explicitTypes = this.schema.compiledExplicit; + this.tag = null; + this.result = ""; + this.duplicates = []; + this.usedDuplicates = null; +} +function indentString(string, spaces) { + var ind = common.repeat(" ", spaces), position = 0, next = -1, result = "", line, length = string.length; + while (position < length) { + next = string.indexOf("\n", position); + if (next === -1) { + line = string.slice(position); + position = length; + } else { + line = string.slice(position, next + 1); + position = next + 1; + } + if (line.length && line !== "\n") + result += ind; + result += line; + } + return result; +} +function generateNextLine(state, level) { + return "\n" + common.repeat(" ", state.indent * level); +} +function testImplicitResolving(state, str2) { + var index, length, type2; + for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { + type2 = state.implicitTypes[index]; + if (type2.resolve(str2)) { + return true; + } + } + return false; +} +function isWhitespace(c) { + return c === CHAR_SPACE || c === CHAR_TAB; +} +function isPrintable(c) { + return 32 <= c && c <= 126 || 161 <= c && c <= 55295 && c !== 8232 && c !== 8233 || 57344 <= c && c <= 65533 && c !== CHAR_BOM || 65536 <= c && c <= 1114111; +} +function isNsCharOrWhitespace(c) { + return isPrintable(c) && c !== CHAR_BOM && c !== CHAR_CARRIAGE_RETURN && c !== CHAR_LINE_FEED; +} +function isPlainSafe(c, prev, inblock) { + var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c); + var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c); + return (inblock ? cIsNsCharOrWhitespace : cIsNsCharOrWhitespace && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET) && c !== CHAR_SHARP && !(prev === CHAR_COLON && !cIsNsChar) || isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP || prev === CHAR_COLON && cIsNsChar; +} +function isPlainSafeFirst(c) { + return isPrintable(c) && c !== CHAR_BOM && !isWhitespace(c) && c !== CHAR_MINUS && c !== CHAR_QUESTION && c !== CHAR_COLON && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK && c !== CHAR_EXCLAMATION && c !== CHAR_VERTICAL_LINE && c !== CHAR_EQUALS && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE && c !== CHAR_DOUBLE_QUOTE && c !== CHAR_PERCENT && c !== CHAR_COMMERCIAL_AT && c !== CHAR_GRAVE_ACCENT; +} +function isPlainSafeLast(c) { + return !isWhitespace(c) && c !== CHAR_COLON; +} +function codePointAt(string, pos) { + var first = string.charCodeAt(pos), second; + if (first >= 55296 && first <= 56319 && pos + 1 < string.length) { + second = string.charCodeAt(pos + 1); + if (second >= 56320 && second <= 57343) { + return (first - 55296) * 1024 + second - 56320 + 65536; + } + } + return first; +} +function needIndentIndicator(string) { + var leadingSpaceRe = /^\n* /; + return leadingSpaceRe.test(string); +} +var STYLE_PLAIN = 1, STYLE_SINGLE = 2, STYLE_LITERAL = 3, STYLE_FOLDED = 4, STYLE_DOUBLE = 5; +function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType, quotingType, forceQuotes, inblock) { + var i; + var char = 0; + var prevChar = null; + var hasLineBreak = false; + var hasFoldableLine = false; + var shouldTrackWidth = lineWidth !== -1; + var previousLineBreak = -1; + var plain = isPlainSafeFirst(codePointAt(string, 0)) && isPlainSafeLast(codePointAt(string, string.length - 1)); + if (singleLineOnly || forceQuotes) { + for (i = 0; i < string.length; char >= 65536 ? i += 2 : i++) { + char = codePointAt(string, i); + if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + } else { + for (i = 0; i < string.length; char >= 65536 ? i += 2 : i++) { + char = codePointAt(string, i); + if (char === CHAR_LINE_FEED) { + hasLineBreak = true; + if (shouldTrackWidth) { + hasFoldableLine = hasFoldableLine || i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== " "; + previousLineBreak = i; + } + } else if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + hasFoldableLine = hasFoldableLine || shouldTrackWidth && (i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== " "); + } + if (!hasLineBreak && !hasFoldableLine) { + if (plain && !forceQuotes && !testAmbiguousType(string)) { + return STYLE_PLAIN; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; + } + if (indentPerLevel > 9 && needIndentIndicator(string)) { + return STYLE_DOUBLE; + } + if (!forceQuotes) { + return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; +} +function writeScalar(state, string, level, iskey, inblock) { + state.dump = function() { + if (string.length === 0) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; + } + if (!state.noCompatMode) { + if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? '"' + string + '"' : "'" + string + "'"; + } + } + var indent = state.indent * Math.max(1, level); + var lineWidth = state.lineWidth === -1 ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); + var singleLineOnly = iskey || state.flowLevel > -1 && level >= state.flowLevel; + function testAmbiguity(string2) { + return testImplicitResolving(state, string2); + } + switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) { + case STYLE_PLAIN: + return string; + case STYLE_SINGLE: + return "'" + string.replace(/'/g, "''") + "'"; + case STYLE_LITERAL: + return "|" + blockHeader(string, state.indent) + dropEndingNewline(indentString(string, indent)); + case STYLE_FOLDED: + return ">" + blockHeader(string, state.indent) + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); + case STYLE_DOUBLE: + return '"' + escapeString(string) + '"'; + default: + throw new exception("impossible error: invalid scalar style"); + } + }(); +} +function blockHeader(string, indentPerLevel) { + var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ""; + var clip = string[string.length - 1] === "\n"; + var keep = clip && (string[string.length - 2] === "\n" || string === "\n"); + var chomp = keep ? "+" : clip ? "" : "-"; + return indentIndicator + chomp + "\n"; +} +function dropEndingNewline(string) { + return string[string.length - 1] === "\n" ? string.slice(0, -1) : string; +} +function foldString(string, width) { + var lineRe = /(\n+)([^\n]*)/g; + var result = function() { + var nextLF = string.indexOf("\n"); + nextLF = nextLF !== -1 ? nextLF : string.length; + lineRe.lastIndex = nextLF; + return foldLine(string.slice(0, nextLF), width); + }(); + var prevMoreIndented = string[0] === "\n" || string[0] === " "; + var moreIndented; + var match; + while (match = lineRe.exec(string)) { + var prefix = match[1], line = match[2]; + moreIndented = line[0] === " "; + result += prefix + (!prevMoreIndented && !moreIndented && line !== "" ? "\n" : "") + foldLine(line, width); + prevMoreIndented = moreIndented; + } + return result; +} +function foldLine(line, width) { + if (line === "" || line[0] === " ") + return line; + var breakRe = / [^ ]/g; + var match; + var start = 0, end, curr = 0, next = 0; + var result = ""; + while (match = breakRe.exec(line)) { + next = match.index; + if (next - start > width) { + end = curr > start ? curr : next; + result += "\n" + line.slice(start, end); + start = end + 1; + } + curr = next; + } + result += "\n"; + if (line.length - start > width && curr > start) { + result += line.slice(start, curr) + "\n" + line.slice(curr + 1); + } else { + result += line.slice(start); + } + return result.slice(1); +} +function escapeString(string) { + var result = ""; + var char = 0; + var escapeSeq; + for (var i = 0; i < string.length; char >= 65536 ? i += 2 : i++) { + char = codePointAt(string, i); + escapeSeq = ESCAPE_SEQUENCES[char]; + if (!escapeSeq && isPrintable(char)) { + result += string[i]; + if (char >= 65536) + result += string[i + 1]; + } else { + result += escapeSeq || encodeHex(char); + } + } + return result; +} +function writeFlowSequence(state, level, object) { + var _result = "", _tag = state.tag, index, length, value; + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } + if (writeNode(state, level, value, false, false) || typeof value === "undefined" && writeNode(state, level, null, false, false)) { + if (_result !== "") + _result += "," + (!state.condenseFlow ? " " : ""); + _result += state.dump; + } + } + state.tag = _tag; + state.dump = "[" + _result + "]"; +} +function writeBlockSequence(state, level, object, compact) { + var _result = "", _tag = state.tag, index, length, value; + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } + if (writeNode(state, level + 1, value, true, true, false, true) || typeof value === "undefined" && writeNode(state, level + 1, null, true, true, false, true)) { + if (!compact || _result !== "") { + _result += generateNextLine(state, level); + } + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + _result += "-"; + } else { + _result += "- "; + } + _result += state.dump; + } + } + state.tag = _tag; + state.dump = _result || "[]"; +} +function writeFlowMapping(state, level, object) { + var _result = "", _tag = state.tag, objectKeyList = Object.keys(object), index, length, objectKey, objectValue, pairBuffer; + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ""; + if (_result !== "") + pairBuffer += ", "; + if (state.condenseFlow) + pairBuffer += '"'; + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } + if (!writeNode(state, level, objectKey, false, false)) { + continue; + } + if (state.dump.length > 1024) + pairBuffer += "? "; + pairBuffer += state.dump + (state.condenseFlow ? '"' : "") + ":" + (state.condenseFlow ? "" : " "); + if (!writeNode(state, level, objectValue, false, false)) { + continue; + } + pairBuffer += state.dump; + _result += pairBuffer; + } + state.tag = _tag; + state.dump = "{" + _result + "}"; +} +function writeBlockMapping(state, level, object, compact) { + var _result = "", _tag = state.tag, objectKeyList = Object.keys(object), index, length, objectKey, objectValue, explicitPair, pairBuffer; + if (state.sortKeys === true) { + objectKeyList.sort(); + } else if (typeof state.sortKeys === "function") { + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + throw new exception("sortKeys must be a boolean or a function"); + } + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ""; + if (!compact || _result !== "") { + pairBuffer += generateNextLine(state, level); + } + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } + if (!writeNode(state, level + 1, objectKey, true, true, true)) { + continue; + } + explicitPair = state.tag !== null && state.tag !== "?" || state.dump && state.dump.length > 1024; + if (explicitPair) { + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += "?"; + } else { + pairBuffer += "? "; + } + } + pairBuffer += state.dump; + if (explicitPair) { + pairBuffer += generateNextLine(state, level); + } + if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { + continue; + } + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += ":"; + } else { + pairBuffer += ": "; + } + pairBuffer += state.dump; + _result += pairBuffer; + } + state.tag = _tag; + state.dump = _result || "{}"; +} +function detectType(state, object, explicit) { + var _result, typeList, index, length, type2, style; + typeList = explicit ? state.explicitTypes : state.implicitTypes; + for (index = 0, length = typeList.length; index < length; index += 1) { + type2 = typeList[index]; + if ((type2.instanceOf || type2.predicate) && (!type2.instanceOf || typeof object === "object" && object instanceof type2.instanceOf) && (!type2.predicate || type2.predicate(object))) { + if (explicit) { + if (type2.multi && type2.representName) { + state.tag = type2.representName(object); + } else { + state.tag = type2.tag; + } + } else { + state.tag = "?"; + } + if (type2.represent) { + style = state.styleMap[type2.tag] || type2.defaultStyle; + if (_toString.call(type2.represent) === "[object Function]") { + _result = type2.represent(object, style); + } else if (_hasOwnProperty.call(type2.represent, style)) { + _result = type2.represent[style](object, style); + } else { + throw new exception("!<" + type2.tag + '> tag resolver accepts not "' + style + '" style'); + } + state.dump = _result; + } + return true; + } + } + return false; +} +function writeNode(state, level, object, block, compact, iskey, isblockseq) { + state.tag = null; + state.dump = object; + if (!detectType(state, object, false)) { + detectType(state, object, true); + } + var type2 = _toString.call(state.dump); + var inblock = block; + var tagStr; + if (block) { + block = state.flowLevel < 0 || state.flowLevel > level; + } + var objectOrArray = type2 === "[object Object]" || type2 === "[object Array]", duplicateIndex, duplicate; + if (objectOrArray) { + duplicateIndex = state.duplicates.indexOf(object); + duplicate = duplicateIndex !== -1; + } + if (state.tag !== null && state.tag !== "?" || duplicate || state.indent !== 2 && level > 0) { + compact = false; + } + if (duplicate && state.usedDuplicates[duplicateIndex]) { + state.dump = "*ref_" + duplicateIndex; + } else { + if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { + state.usedDuplicates[duplicateIndex] = true; + } + if (type2 === "[object Object]") { + if (block && Object.keys(state.dump).length !== 0) { + writeBlockMapping(state, level, state.dump, compact); + if (duplicate) { + state.dump = "&ref_" + duplicateIndex + state.dump; + } + } else { + writeFlowMapping(state, level, state.dump); + if (duplicate) { + state.dump = "&ref_" + duplicateIndex + " " + state.dump; + } + } + } else if (type2 === "[object Array]") { + if (block && state.dump.length !== 0) { + if (state.noArrayIndent && !isblockseq && level > 0) { + writeBlockSequence(state, level - 1, state.dump, compact); + } else { + writeBlockSequence(state, level, state.dump, compact); + } + if (duplicate) { + state.dump = "&ref_" + duplicateIndex + state.dump; + } + } else { + writeFlowSequence(state, level, state.dump); + if (duplicate) { + state.dump = "&ref_" + duplicateIndex + " " + state.dump; + } + } + } else if (type2 === "[object String]") { + if (state.tag !== "?") { + writeScalar(state, state.dump, level, iskey, inblock); + } + } else if (type2 === "[object Undefined]") { + return false; + } else { + if (state.skipInvalid) + return false; + throw new exception("unacceptable kind of an object to dump " + type2); + } + if (state.tag !== null && state.tag !== "?") { + tagStr = encodeURI(state.tag[0] === "!" ? state.tag.slice(1) : state.tag).replace(/!/g, "%21"); + if (state.tag[0] === "!") { + tagStr = "!" + tagStr; + } else if (tagStr.slice(0, 18) === "tag:yaml.org,2002:") { + tagStr = "!!" + tagStr.slice(18); + } else { + tagStr = "!<" + tagStr + ">"; + } + state.dump = tagStr + " " + state.dump; + } + } + return true; +} +function getDuplicateReferences(object, state) { + var objects = [], duplicatesIndexes = [], index, length; + inspectNode(object, objects, duplicatesIndexes); + for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { + state.duplicates.push(objects[duplicatesIndexes[index]]); + } + state.usedDuplicates = new Array(length); +} +function inspectNode(object, objects, duplicatesIndexes) { + var objectKeyList, index, length; + if (object !== null && typeof object === "object") { + index = objects.indexOf(object); + if (index !== -1) { + if (duplicatesIndexes.indexOf(index) === -1) { + duplicatesIndexes.push(index); + } + } else { + objects.push(object); + if (Array.isArray(object)) { + for (index = 0, length = object.length; index < length; index += 1) { + inspectNode(object[index], objects, duplicatesIndexes); + } + } else { + objectKeyList = Object.keys(object); + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); + } + } + } + } +} +function dump$1(input, options) { + options = options || {}; + var state = new State(options); + if (!state.noRefs) + getDuplicateReferences(input, state); + var value = input; + if (state.replacer) { + value = state.replacer.call({"": value}, "", value); + } + if (writeNode(state, 0, value, true, true)) + return state.dump + "\n"; + return ""; +} +var dump_1 = dump$1; +var dumper = { + dump: dump_1 +}; +function renamed(from, to) { + return function() { + throw new Error("Function yaml." + from + " is removed in js-yaml 4. Use yaml." + to + " instead, which is now safe by default."); + }; +} +var Type = type; +var Schema = schema; +var FAILSAFE_SCHEMA = failsafe; +var JSON_SCHEMA = json; +var CORE_SCHEMA = core; +var DEFAULT_SCHEMA = _default; +var load = loader.load; +var loadAll = loader.loadAll; +var dump = dumper.dump; +var YAMLException = exception; +var types = { + binary, + float, + map, + null: _null, + pairs, + set, + timestamp, + bool, + int, + merge, + omap, + seq, + str +}; +var safeLoad = renamed("safeLoad", "load"); +var safeLoadAll = renamed("safeLoadAll", "loadAll"); +var safeDump = renamed("safeDump", "dump"); +var jsYaml = { + Type, + Schema, + FAILSAFE_SCHEMA, + JSON_SCHEMA, + CORE_SCHEMA, + DEFAULT_SCHEMA, + load, + loadAll, + dump, + YAMLException, + types, + safeLoad, + safeLoadAll, + safeDump +}; +export default jsYaml; +export {CORE_SCHEMA, DEFAULT_SCHEMA, FAILSAFE_SCHEMA, JSON_SCHEMA, Schema, Type, YAMLException, dump, load, loadAll, safeDump, safeLoad, safeLoadAll, types}; diff --git a/src/vendor/cdn.skypack.dev/js-yaml.js b/src/vendor/cdn.skypack.dev/js-yaml.js new file mode 100644 index 00000000000..80290955208 --- /dev/null +++ b/src/vendor/cdn.skypack.dev/js-yaml.js @@ -0,0 +1,16 @@ +/* + * Skypack CDN - js-yaml@4.1.0 + * + * Learn more: + * 📙 Package Documentation: https://www.skypack.dev/view/js-yaml + * 📘 Skypack Documentation: https://www.skypack.dev/docs + * + * Pinned URL: (Optimized for Production) + * ▶️ Normal: https://cdn.skypack.dev/pin/js-yaml@v4.1.0-dDv6O5b7vFYj0Ro3QdID/mode=imports/optimized/js-yaml.js + * ⏩ Minified: https://cdn.skypack.dev/pin/js-yaml@v4.1.0-dDv6O5b7vFYj0Ro3QdID/mode=imports,min/optimized/js-yaml.js + * + */ + +// Browser-Optimized Imports (Don't directly import the URLs below in your application!) +export * from '/-/js-yaml@v4.1.0-dDv6O5b7vFYj0Ro3QdID/dist=es2019,mode=imports/optimized/js-yaml.js'; +export {default} from '/-/js-yaml@v4.1.0-dDv6O5b7vFYj0Ro3QdID/dist=es2019,mode=imports/optimized/js-yaml.js'; diff --git a/src/vendor/deno.land/std@0.196.0/console/unicode_width.ts b/src/vendor/deno.land/std@0.196.0/console/unicode_width.ts deleted file mode 100644 index 9221b4645ab..00000000000 --- a/src/vendor/deno.land/std@0.196.0/console/unicode_width.ts +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// Ported from unicode_width rust crate, Copyright (c) 2015 The Rust Project Developers. MIT license. - -import data from "./_data.json" assert { type: "json" }; -import { runLengthDecode } from "./_rle.ts"; - -let tables: Uint8Array[] | null = null; -function lookupWidth(cp: number) { - if (!tables) tables = data.tables.map(runLengthDecode); - - const t1Offset = tables[0][(cp >> 13) & 0xff]; - const t2Offset = tables[1][128 * t1Offset + ((cp >> 6) & 0x7f)]; - const packedWidths = tables[2][16 * t2Offset + ((cp >> 2) & 0xf)]; - - const width = (packedWidths >> (2 * (cp & 0b11))) & 0b11; - - return width === 3 ? 1 : width; -} - -const cache = new Map(); -function charWidth(ch: string) { - if (cache.has(ch)) return cache.get(ch)!; - - const cp = ch.codePointAt(0)!; - let v: number | null = null; - - if (cp < 0x7f) { - v = cp >= 0x20 ? 1 : cp === 0 ? 0 : null; - } else if (cp >= 0xa0) { - v = lookupWidth(cp); - } else { - v = null; - } - - cache.set(ch, v); - return v; -} - -/** - * Get the width of a string's constituent characters in columns in TTY-like - * environments. - * - * Combine with `stripColor` from `fmt/colors.ts` to get the expected physical - * width of a string in the console. - * - * @example - * ```ts - * import { unicodeWidth } from "https://deno.land/std@$STD_VERSION/console/unicode_width.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * import { stripColor } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts"; - * - * assertEquals(unicodeWidth("hello world"), 11); - * assertEquals(unicodeWidth("天地玄黃宇宙洪荒"), 16); - * assertEquals(unicodeWidth("fullwidth"), 18); - * assertEquals(unicodeWidth(stripColor("\x1b[36mголубой\x1b[39m")), 7); - * assertEquals(unicodeWidth(stripColor("\x1b[31m紅色\x1b[39m")), 4); - * assertEquals(unicodeWidth(stripColor("\x1B]8;;https://deno.land\x07🦕\x1B]8;;\x07")), 2); - * ``` - */ -export function unicodeWidth(str: string) { - return [...str].map((ch) => charWidth(ch) ?? 0).reduce((a, b) => a + b, 0); -} diff --git a/src/vendor/deno.land/std@0.217.0/bytes/concat.ts b/src/vendor/deno.land/std@0.217.0/bytes/concat.ts deleted file mode 100644 index 7f4114d28d7..00000000000 --- a/src/vendor/deno.land/std@0.217.0/bytes/concat.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Concatenate an array of {@linkcode Uint8Array}s. - * - * @example - * ```ts - * import { concat } from "https://deno.land/std@$STD_VERSION/bytes/concat.ts"; - * - * const a = new Uint8Array([0, 1, 2]); - * const b = new Uint8Array([3, 4, 5]); - * concat([a, b]); // Uint8Array(6) [ 0, 1, 2, 3, 4, 5 ] - * ``` - */ -export function concat(buf: Uint8Array[]): Uint8Array { - let length = 0; - for (const b of buf) { - length += b.length; - } - const output = new Uint8Array(length); - let index = 0; - for (const b of buf) { - output.set(b, index); - index += b.length; - } - - return output; -} diff --git a/src/vendor/deno.land/std@0.217.0/bytes/copy.ts b/src/vendor/deno.land/std@0.217.0/bytes/copy.ts deleted file mode 100644 index 7905a4cb351..00000000000 --- a/src/vendor/deno.land/std@0.217.0/bytes/copy.ts +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** Copy bytes from the `src` array to the `dst` array. Returns the number of - * bytes copied. - * - * If the `src` array is larger than what the `dst` array can hold, only the - * amount of bytes that fit in the `dst` array are copied. - * - * An offset can be specified as the third argument that begins the copy at - * that given index in the `dst` array. The offset defaults to the beginning of - * the array. - * - * ```ts - * import { copy } from "https://deno.land/std@$STD_VERSION/bytes/copy.ts"; - * const src = new Uint8Array([9, 8, 7]); - * const dst = new Uint8Array([0, 1, 2, 3, 4, 5]); - * console.log(copy(src, dst)); // 3 - * console.log(dst); // [9, 8, 7, 3, 4, 5] - * ``` - * - * ```ts - * import { copy } from "https://deno.land/std@$STD_VERSION/bytes/copy.ts"; - * const src = new Uint8Array([1, 1, 1, 1]); - * const dst = new Uint8Array([0, 0, 0, 0]); - * console.log(copy(src, dst, 1)); // 3 - * console.log(dst); // [0, 1, 1, 1] - * ``` - */ -export function copy(src: Uint8Array, dst: Uint8Array, off = 0): number { - off = Math.max(0, Math.min(off, dst.byteLength)); - const dstBytesAvailable = dst.byteLength - off; - if (src.byteLength > dstBytesAvailable) { - src = src.subarray(0, dstBytesAvailable); - } - dst.set(src, off); - return src.byteLength; -} diff --git a/src/vendor/deno.land/std@0.217.0/bytes/ends_with.ts b/src/vendor/deno.land/std@0.217.0/bytes/ends_with.ts deleted file mode 100644 index bb1ce786b3c..00000000000 --- a/src/vendor/deno.land/std@0.217.0/bytes/ends_with.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** Returns true if the suffix array appears at the end of the source array, - * false otherwise. - * - * The complexity of this function is O(suffix.length). - * - * ```ts - * import { endsWith } from "https://deno.land/std@$STD_VERSION/bytes/ends_with.ts"; - * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); - * const suffix = new Uint8Array([1, 2, 3]); - * console.log(endsWith(source, suffix)); // true - * ``` - */ -export function endsWith(source: Uint8Array, suffix: Uint8Array): boolean { - for ( - let srci = source.length - 1, sfxi = suffix.length - 1; - sfxi >= 0; - srci--, sfxi-- - ) { - if (source[srci] !== suffix[sfxi]) return false; - } - return true; -} diff --git a/src/vendor/deno.land/std@0.217.0/bytes/equals.ts b/src/vendor/deno.land/std@0.217.0/bytes/equals.ts deleted file mode 100644 index fe3c7177b27..00000000000 --- a/src/vendor/deno.land/std@0.217.0/bytes/equals.ts +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** Check whether binary arrays are equal to each other using 8-bit comparisons. - * @private - * @param a first array to check equality - * @param b second array to check equality - */ -function equalsNaive(a: Uint8Array, b: Uint8Array): boolean { - for (let i = 0; i < b.length; i++) { - if (a[i] !== b[i]) return false; - } - return true; -} - -/** Check whether binary arrays are equal to each other using 32-bit comparisons. - * @private - * @param a first array to check equality - * @param b second array to check equality - */ -function equals32Bit(a: Uint8Array, b: Uint8Array): boolean { - const len = a.length; - const compressible = Math.floor(len / 4); - const compressedA = new Uint32Array(a.buffer, 0, compressible); - const compressedB = new Uint32Array(b.buffer, 0, compressible); - for (let i = compressible * 4; i < len; i++) { - if (a[i] !== b[i]) return false; - } - for (let i = 0; i < compressedA.length; i++) { - if (compressedA[i] !== compressedB[i]) return false; - } - return true; -} - -/** Check whether binary arrays are equal to each other. - * @param a first array to check equality - * @param b second array to check equality - */ -export function equals(a: Uint8Array, b: Uint8Array): boolean { - if (a.length !== b.length) { - return false; - } - return a.length < 1000 ? equalsNaive(a, b) : equals32Bit(a, b); -} diff --git a/src/vendor/deno.land/std@0.217.0/bytes/includes_needle.ts b/src/vendor/deno.land/std@0.217.0/bytes/includes_needle.ts deleted file mode 100644 index 37c2518b33e..00000000000 --- a/src/vendor/deno.land/std@0.217.0/bytes/includes_needle.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { indexOfNeedle } from "./index_of_needle.ts"; - -/** Returns true if the source array contains the needle array, false otherwise. - * - * A start index can be specified as the third argument that begins the search - * at that given index. The start index defaults to the beginning of the array. - * - * The complexity of this function is O(source.length * needle.length). - * - * ```ts - * import { includesNeedle } from "https://deno.land/std@$STD_VERSION/bytes/includes_needle.ts"; - * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); - * const needle = new Uint8Array([1, 2]); - * console.log(includesNeedle(source, needle)); // true - * console.log(includesNeedle(source, needle, 6)); // false - * ``` - */ -export function includesNeedle( - source: Uint8Array, - needle: Uint8Array, - start = 0, -): boolean { - return indexOfNeedle(source, needle, start) !== -1; -} diff --git a/src/vendor/deno.land/std@0.217.0/bytes/index_of_needle.ts b/src/vendor/deno.land/std@0.217.0/bytes/index_of_needle.ts deleted file mode 100644 index 5538711fe6b..00000000000 --- a/src/vendor/deno.land/std@0.217.0/bytes/index_of_needle.ts +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** Returns the index of the first occurrence of the needle array in the source - * array, or -1 if it is not present. - * - * A start index can be specified as the third argument that begins the search - * at that given index. The start index defaults to the start of the array. - * - * The complexity of this function is O(source.length * needle.length). - * - * ```ts - * import { indexOfNeedle } from "https://deno.land/std@$STD_VERSION/bytes/index_of_needle.ts"; - * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); - * const needle = new Uint8Array([1, 2]); - * console.log(indexOfNeedle(source, needle)); // 1 - * console.log(indexOfNeedle(source, needle, 2)); // 3 - * ``` - */ -export function indexOfNeedle( - source: Uint8Array, - needle: Uint8Array, - start = 0, -): number { - if (start >= source.length) { - return -1; - } - if (start < 0) { - start = Math.max(0, source.length + start); - } - const s = needle[0]; - for (let i = start; i < source.length; i++) { - if (source[i] !== s) continue; - const pin = i; - let matched = 1; - let j = i; - while (matched < needle.length) { - j++; - if (source[j] !== needle[j - pin]) { - break; - } - matched++; - } - if (matched === needle.length) { - return pin; - } - } - return -1; -} diff --git a/src/vendor/deno.land/std@0.217.0/bytes/last_index_of_needle.ts b/src/vendor/deno.land/std@0.217.0/bytes/last_index_of_needle.ts deleted file mode 100644 index b5d3685fdb7..00000000000 --- a/src/vendor/deno.land/std@0.217.0/bytes/last_index_of_needle.ts +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** Returns the index of the last occurrence of the needle array in the source - * array, or -1 if it is not present. - * - * A start index can be specified as the third argument that begins the search - * at that given index. The start index defaults to the end of the array. - * - * The complexity of this function is O(source.length * needle.length). - * - * ```ts - * import { lastIndexOfNeedle } from "https://deno.land/std@$STD_VERSION/bytes/last_index_of_needle.ts"; - * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); - * const needle = new Uint8Array([1, 2]); - * console.log(lastIndexOfNeedle(source, needle)); // 5 - * console.log(lastIndexOfNeedle(source, needle, 4)); // 3 - * ``` - */ -export function lastIndexOfNeedle( - source: Uint8Array, - needle: Uint8Array, - start: number = source.length - 1, -): number { - if (start < 0) { - return -1; - } - if (start >= source.length) { - start = source.length - 1; - } - const e = needle[needle.length - 1]; - for (let i = start; i >= 0; i--) { - if (source[i] !== e) continue; - const pin = i; - let matched = 1; - let j = i; - while (matched < needle.length) { - j--; - if (source[j] !== needle[needle.length - 1 - (pin - j)]) { - break; - } - matched++; - } - if (matched === needle.length) { - return pin - needle.length + 1; - } - } - return -1; -} diff --git a/src/vendor/deno.land/std@0.217.0/bytes/mod.ts b/src/vendor/deno.land/std@0.217.0/bytes/mod.ts deleted file mode 100644 index 7e04988a7e1..00000000000 --- a/src/vendor/deno.land/std@0.217.0/bytes/mod.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Provides helper functions to manipulate `Uint8Array` byte slices that are not - * included on the `Uint8Array` prototype. - * - * @module - */ - -export * from "./concat.ts"; -export * from "./copy.ts"; -export * from "./ends_with.ts"; -export * from "./equals.ts"; -export * from "./includes_needle.ts"; -export * from "./index_of_needle.ts"; -export * from "./last_index_of_needle.ts"; -export * from "./repeat.ts"; -export * from "./starts_with.ts"; diff --git a/src/vendor/deno.land/std@0.217.0/bytes/repeat.ts b/src/vendor/deno.land/std@0.217.0/bytes/repeat.ts deleted file mode 100644 index d9d7b664184..00000000000 --- a/src/vendor/deno.land/std@0.217.0/bytes/repeat.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. -import { copy } from "./copy.ts"; - -/** Returns a new Uint8Array composed of `count` repetitions of the `source` - * array. - * - * If `count` is negative, a `RangeError` is thrown. - * - * ```ts - * import { repeat } from "https://deno.land/std@$STD_VERSION/bytes/repeat.ts"; - * const source = new Uint8Array([0, 1, 2]); - * console.log(repeat(source, 3)); // [0, 1, 2, 0, 1, 2, 0, 1, 2] - * console.log(repeat(source, 0)); // [] - * console.log(repeat(source, -1)); // RangeError - * ``` - */ -export function repeat(source: Uint8Array, count: number): Uint8Array { - if (count === 0) { - return new Uint8Array(); - } - - if (count < 0) { - throw new RangeError("bytes: negative repeat count"); - } - - if (!Number.isInteger(count)) { - throw new Error("bytes: repeat count must be an integer"); - } - - const nb = new Uint8Array(source.length * count); - - let bp = copy(source, nb); - - for (; bp < nb.length; bp *= 2) { - copy(nb.slice(0, bp), nb, bp); - } - - return nb; -} diff --git a/src/vendor/deno.land/std@0.217.0/bytes/starts_with.ts b/src/vendor/deno.land/std@0.217.0/bytes/starts_with.ts deleted file mode 100644 index eef3f5d00e5..00000000000 --- a/src/vendor/deno.land/std@0.217.0/bytes/starts_with.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** Returns true if the prefix array appears at the start of the source array, - * false otherwise. - * - * The complexity of this function is O(prefix.length). - * - * ```ts - * import { startsWith } from "https://deno.land/std@$STD_VERSION/bytes/starts_with.ts"; - * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); - * const prefix = new Uint8Array([0, 1, 2]); - * console.log(startsWith(source, prefix)); // true - * ``` - */ -export function startsWith(source: Uint8Array, prefix: Uint8Array): boolean { - for (let i = 0, max = prefix.length; i < max; i++) { - if (source[i] !== prefix[i]) return false; - } - return true; -} diff --git a/src/vendor/deno.land/std@0.217.0/collections/associate_by.ts b/src/vendor/deno.land/std@0.217.0/collections/associate_by.ts deleted file mode 100644 index bc00abf396b..00000000000 --- a/src/vendor/deno.land/std@0.217.0/collections/associate_by.ts +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Transforms the given array into a Record, extracting the key of each element - * using the given selector. If the selector produces the same key for multiple - * elements, the latest one will be used (overriding the ones before it). - * - * @example - * ```ts - * import { associateBy } from "https://deno.land/std@$STD_VERSION/collections/associate_by.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * const users = [ - * { id: "a2e", userName: "Anna" }, - * { id: "5f8", userName: "Arnold" }, - * { id: "d2c", userName: "Kim" }, - * ]; - * const usersById = associateBy(users, (it) => it.id); - * - * assertEquals(usersById, { - * "a2e": { id: "a2e", userName: "Anna" }, - * "5f8": { id: "5f8", userName: "Arnold" }, - * "d2c": { id: "d2c", userName: "Kim" }, - * }); - * ``` - */ -export function associateBy( - array: Iterable, - selector: (el: T) => string, -): Record { - const ret: Record = {}; - - for (const element of array) { - const selectedValue = selector(element); - - ret[selectedValue] = element; - } - - return ret; -} diff --git a/src/vendor/deno.land/std@0.217.0/collections/associate_with.ts b/src/vendor/deno.land/std@0.217.0/collections/associate_with.ts deleted file mode 100644 index 7d39154f937..00000000000 --- a/src/vendor/deno.land/std@0.217.0/collections/associate_with.ts +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Builds a new Record using the given array as keys and choosing a value for - * each key using the given selector. If any of two pairs would have the same - * value the latest on will be used (overriding the ones before it). - * - * @example - * ```ts - * import { associateWith } from "https://deno.land/std@$STD_VERSION/collections/associate_with.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * const names = ["Kim", "Lara", "Jonathan"]; - * const namesToLength = associateWith(names, (it) => it.length); - * - * assertEquals(namesToLength, { - * "Kim": 3, - * "Lara": 4, - * "Jonathan": 8, - * }); - * ``` - */ -export function associateWith( - array: Iterable, - selector: (key: string) => T, -): Record { - const ret: Record = {}; - - for (const element of array) { - const selectedValue = selector(element); - - ret[element] = selectedValue; - } - - return ret; -} diff --git a/src/vendor/deno.land/std@0.217.0/collections/distinct_by.ts b/src/vendor/deno.land/std@0.217.0/collections/distinct_by.ts deleted file mode 100644 index 965dc6ea8aa..00000000000 --- a/src/vendor/deno.land/std@0.217.0/collections/distinct_by.ts +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Returns all elements in the given array that produce a distinct value using - * the given selector, preserving order by first occurrence. - * - * @example - * ```ts - * import { distinctBy } from "https://deno.land/std@$STD_VERSION/collections/distinct_by.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * const names = ["Anna", "Kim", "Arnold", "Kate"]; - * const exampleNamesByFirstLetter = distinctBy(names, (it) => it.charAt(0)); - * - * assertEquals(exampleNamesByFirstLetter, ["Anna", "Kim"]); - * ``` - */ -export function distinctBy( - array: Iterable, - selector: (el: T) => D, -): T[] { - const selectedValues = new Set(); - const ret: T[] = []; - - for (const element of array) { - const currentSelectedValue = selector(element); - - if (!selectedValues.has(currentSelectedValue)) { - selectedValues.add(currentSelectedValue); - ret.push(element); - } - } - - return ret; -} diff --git a/src/vendor/deno.land/std@0.217.0/collections/drop_last_while.ts b/src/vendor/deno.land/std@0.217.0/collections/drop_last_while.ts deleted file mode 100644 index 1a60ba86564..00000000000 --- a/src/vendor/deno.land/std@0.217.0/collections/drop_last_while.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Returns a new array that drops all elements in the given collection until the - * last element that does not match the given predicate. - * - * @example - * ```ts - * import { dropLastWhile } from "https://deno.land/std@$STD_VERSION/collections/drop_last_while.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * const numbers = [22, 30, 44]; - * - * const notFortyFour = dropLastWhile(numbers, (i) => i !== 44); - * - * assertEquals( - * notFortyFour, - * [22, 30], - * ); - * ``` - */ -export function dropLastWhile( - array: readonly T[], - predicate: (el: T) => boolean, -): T[] { - let offset = array.length; - while (0 < offset && predicate(array[offset - 1] as T)) offset--; - - return array.slice(0, offset); -} diff --git a/src/vendor/deno.land/std@0.217.0/collections/filter_keys.ts b/src/vendor/deno.land/std@0.217.0/collections/filter_keys.ts deleted file mode 100644 index 70cc11b1857..00000000000 --- a/src/vendor/deno.land/std@0.217.0/collections/filter_keys.ts +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Returns a new record with all entries of the given record except the ones that - * have a key that does not match the given predicate. - * - * @example - * ```ts - * import { filterKeys } from "https://deno.land/std@$STD_VERSION/collections/filter_keys.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * const menu = { - * "Salad": 11, - * "Soup": 8, - * "Pasta": 13, - * }; - * const menuWithoutSalad = filterKeys(menu, (it) => it !== "Salad"); - * - * assertEquals( - * menuWithoutSalad, - * { - * "Soup": 8, - * "Pasta": 13, - * }, - * ); - * ``` - */ -export function filterKeys( - record: Readonly>, - predicate: (key: string) => boolean, -): Record { - const ret: Record = {}; - - for (const [key, value] of Object.entries(record)) { - if (predicate(key)) { - ret[key] = value; - } - } - - return ret; -} diff --git a/src/vendor/deno.land/std@0.217.0/collections/filter_values.ts b/src/vendor/deno.land/std@0.217.0/collections/filter_values.ts deleted file mode 100644 index 210ce799fac..00000000000 --- a/src/vendor/deno.land/std@0.217.0/collections/filter_values.ts +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Returns a new record with all entries of the given record except the ones - * that have a value that does not match the given predicate. - * - * @example - * ```ts - * import { filterValues } from "https://deno.land/std@$STD_VERSION/collections/filter_values.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * const people = { - * "Arnold": 37, - * "Sarah": 7, - * "Kim": 23, - * }; - * const adults = filterValues(people, (it) => it >= 18); - * - * assertEquals( - * adults, - * { - * "Arnold": 37, - * "Kim": 23, - * }, - * ); - * ``` - */ -export function filterValues( - record: Readonly>, - predicate: (value: T) => boolean, -): Record { - const ret: Record = {}; - const entries = Object.entries(record); - - for (const [key, value] of entries) { - if (predicate(value)) { - ret[key] = value; - } - } - - return ret; -} diff --git a/src/vendor/deno.land/std@0.217.0/collections/includes_value.ts b/src/vendor/deno.land/std@0.217.0/collections/includes_value.ts deleted file mode 100644 index e00c62fbc0f..00000000000 --- a/src/vendor/deno.land/std@0.217.0/collections/includes_value.ts +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * If the given value is part of the given object it returns true, otherwise it - * returns false. Doesn't work with non-primitive values: includesValue({x: {}}, - * {}) returns false. - * - * @example - * ```ts - * import { includesValue } from "https://deno.land/std@$STD_VERSION/collections/includes_value.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * const input = { - * first: 33, - * second: 34, - * }; - * - * assertEquals(includesValue(input, 34), true); - * ``` - */ -export function includesValue( - record: Readonly>, - value: T, -): boolean { - for (const i in record) { - if ( - Object.hasOwn(record, i) && - (record[i] === value || Number.isNaN(value) && Number.isNaN(record[i])) - ) { - return true; - } - } - - return false; -} diff --git a/src/vendor/deno.land/std@0.217.0/collections/max_by.ts b/src/vendor/deno.land/std@0.217.0/collections/max_by.ts deleted file mode 100644 index fbbbc588b86..00000000000 --- a/src/vendor/deno.land/std@0.217.0/collections/max_by.ts +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Returns the first element that is the largest value of the given function or - * undefined if there are no elements. - * - * @example - * ```ts - * import { maxBy } from "https://deno.land/std@$STD_VERSION/collections/max_by.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * const people = [ - * { name: "Anna", age: 34 }, - * { name: "Kim", age: 42 }, - * { name: "John", age: 23 }, - * ]; - * - * const personWithMaxAge = maxBy(people, (i) => i.age); - * - * assertEquals(personWithMaxAge, { name: "Kim", age: 42 }); - * ``` - */ -export function maxBy( - array: Iterable, - selector: (el: T) => number, -): T | undefined; -/** - * Returns the first element that is the largest value of the given function or - * undefined if there are no elements. - * - * @example - * ```ts - * import { maxBy } from "https://deno.land/std@$STD_VERSION/collections/max_by.ts"; - * - * const people = [ - * { name: "Anna" }, - * { name: "Kim" }, - * { name: "John" }, - * ]; - * - * const personWithMaxName = maxBy(people, (i) => i.name); - * ``` - */ -export function maxBy( - array: Iterable, - selector: (el: T) => string, -): T | undefined; -/** - * Returns the first element that is the largest value of the given function or - * undefined if there are no elements. - * - * @example - * ```ts - * import { maxBy } from "https://deno.land/std@$STD_VERSION/collections/max_by.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * const people = [ - * { name: "Anna", age: 34n }, - * { name: "Kim", age: 42n }, - * { name: "John", age: 23n }, - * ]; - * - * const personWithMaxAge = maxBy(people, (i) => i.age); - * - * assertEquals(personWithMaxAge, { name: "Kim", age: 42n }); - * ``` - */ -export function maxBy( - array: Iterable, - selector: (el: T) => bigint, -): T | undefined; -/** - * Returns the first element that is the largest value of the given function or - * undefined if there are no elements. - * - * @example - * ```ts - * import { maxBy } from "https://deno.land/std@$STD_VERSION/collections/max_by.ts"; - * - * const people = [ - * { name: "Anna", startedAt: new Date("2020-01-01") }, - * { name: "Kim", startedAt: new Date("2021-03-01") }, - * { name: "John", startedAt: new Date("2020-03-01") }, - * ]; - * - * const personWithLastStartedAt = maxBy(people, (i) => i.startedAt); - * ``` - */ -export function maxBy( - array: Iterable, - selector: (el: T) => Date, -): T | undefined; -export function maxBy( - array: Iterable, - selector: - | ((el: T) => number) - | ((el: T) => string) - | ((el: T) => bigint) - | ((el: T) => Date), -): T | undefined { - let max: T | undefined = undefined; - let maxValue: ReturnType | undefined = undefined; - - for (const current of array) { - const currentValue = selector(current); - - if (maxValue === undefined || currentValue > maxValue) { - max = current; - maxValue = currentValue; - } - } - - return max; -} diff --git a/src/vendor/deno.land/std@0.217.0/collections/min_by.ts b/src/vendor/deno.land/std@0.217.0/collections/min_by.ts deleted file mode 100644 index 583fda13df2..00000000000 --- a/src/vendor/deno.land/std@0.217.0/collections/min_by.ts +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Returns the first element that is the smallest value of the given function or - * undefined if there are no elements - * - * @example - * ```ts - * import { minBy } from "https://deno.land/std@$STD_VERSION/collections/min_by.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * const people = [ - * { name: "Anna", age: 34 }, - * { name: "Kim", age: 42 }, - * { name: "John", age: 23 }, - * ]; - * - * const personWithMinAge = minBy(people, (i) => i.age); - * - * assertEquals(personWithMinAge, { name: "John", age: 23 }); - * ``` - */ -export function minBy( - array: Iterable, - selector: (el: T) => number, -): T | undefined; -/** - * Returns the first element that is the smallest value of the given function or - * undefined if there are no elements - * - * @example - * ```ts - * import { minBy } from "https://deno.land/std@$STD_VERSION/collections/min_by.ts"; - * - * const people = [ - * { name: "Anna" }, - * { name: "Kim" }, - * { name: "John" }, - * ]; - * - * const personWithMinName = minBy(people, (i) => i.name); - * ``` - */ -export function minBy( - array: Iterable, - selector: (el: T) => string, -): T | undefined; -/** - * Returns the first element that is the smallest value of the given function or - * undefined if there are no elements - * - * @example - * ```ts - * import { minBy } from "https://deno.land/std@$STD_VERSION/collections/min_by.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * const people = [ - * { name: "Anna", age: 34n }, - * { name: "Kim", age: 42n }, - * { name: "John", age: 23n }, - * ]; - * - * const personWithMinAge = minBy(people, (i) => i.age); - * - * assertEquals(personWithMinAge, { name: "John", age: 23n }); - * ``` - */ -export function minBy( - array: Iterable, - selector: (el: T) => bigint, -): T | undefined; -/** - * Returns the first element that is the smallest value of the given function or - * undefined if there are no elements - * - * @example - * ```ts - * import { minBy } from "https://deno.land/std@$STD_VERSION/collections/min_by.ts"; - * - * const people = [ - * { name: "Anna", startedAt: new Date("2020-01-01") }, - * { name: "Kim", startedAt: new Date("2020-03-01") }, - * { name: "John", startedAt: new Date("2019-01-01") }, - * ]; - * - * const personWithMinStartedAt = minBy(people, (i) => i.startedAt); - * ``` - */ -export function minBy( - array: Iterable, - selector: (el: T) => Date, -): T | undefined; -export function minBy( - array: Iterable, - selector: - | ((el: T) => number) - | ((el: T) => string) - | ((el: T) => bigint) - | ((el: T) => Date), -): T | undefined { - let min: T | undefined = undefined; - let minValue: ReturnType | undefined = undefined; - - for (const current of array) { - const currentValue = selector(current); - - if (minValue === undefined || currentValue < minValue) { - min = current; - minValue = currentValue; - } - } - - return min; -} diff --git a/src/vendor/deno.land/std@0.217.0/collections/reduce_groups.ts b/src/vendor/deno.land/std@0.217.0/collections/reduce_groups.ts deleted file mode 100644 index 644618e942a..00000000000 --- a/src/vendor/deno.land/std@0.217.0/collections/reduce_groups.ts +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { mapValues } from "./map_values.ts"; - -/** - * Applies the given reducer to each group in the given grouping, returning the - * results together with the respective group keys. - * - * @template T input type of an item in a group in the given grouping. - * @template A type of the accumulator value, which will match the returned record's values. - * @example - * ```ts - * import { reduceGroups } from "https://deno.land/std@$STD_VERSION/collections/reduce_groups.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * const votes = { - * "Woody": [2, 3, 1, 4], - * "Buzz": [5, 9], - * }; - * - * const totalVotes = reduceGroups(votes, (sum, it) => sum + it, 0); - * - * assertEquals(totalVotes, { - * "Woody": 10, - * "Buzz": 14, - * }); - * ``` - */ -export function reduceGroups( - record: Readonly>>, - reducer: (accumulator: A, current: T) => A, - initialValue: A, -): Record { - return mapValues(record, (it) => it.reduce(reducer, initialValue)); -} diff --git a/src/vendor/deno.land/std@0.217.0/collections/sort_by.ts b/src/vendor/deno.land/std@0.217.0/collections/sort_by.ts deleted file mode 100644 index a95b8a656ed..00000000000 --- a/src/vendor/deno.land/std@0.217.0/collections/sort_by.ts +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** Order option for {@linkcode SortByOptions}. */ -export type Order = "asc" | "desc"; - -/** Options for {@linkcode sortBy}. */ -export type SortByOptions = { - order: Order; -}; - -/** - * Returns all elements in the given collection, sorted by their result using - * the given selector. The selector function is called only once for each - * element. Ascending or descending order can be specified. - * - * @example - * ```ts - * import { sortBy } from "https://deno.land/std@$STD_VERSION/collections/sort_by.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * const people = [ - * { name: "Anna", age: 34 }, - * { name: "Kim", age: 42 }, - * { name: "John", age: 23 }, - * ]; - * const sortedByAge = sortBy(people, (it) => it.age); - * - * assertEquals(sortedByAge, [ - * { name: "John", age: 23 }, - * { name: "Anna", age: 34 }, - * { name: "Kim", age: 42 }, - * ]); - * - * const sortedByAgeDesc = sortBy(people, (it) => it.age, { order: "desc" }); - * - * assertEquals(sortedByAgeDesc, [ - * { name: "Kim", age: 42 }, - * { name: "Anna", age: 34 }, - * { name: "John", age: 23 }, - * ]); - * ``` - */ -export function sortBy( - array: readonly T[], - selector: (el: T) => number, - options?: SortByOptions, -): T[]; -/** - * Returns all elements in the given collection, sorted by their result using - * the given selector. The selector function is called only once for each - * element. Ascending or descending order can be specified. - * - * @example - * ```ts - * import { sortBy } from "https://deno.land/std@$STD_VERSION/collections/sort_by.ts"; - * - * const people = [ - * { name: "Anna" }, - * { name: "Kim" }, - * { name: "John" }, - * ]; - * const sortedByName = sortBy(people, (it) => it.name); - */ -export function sortBy( - array: readonly T[], - selector: (el: T) => string, - options?: SortByOptions, -): T[]; -/** - * Returns all elements in the given collection, sorted by their result using - * the given selector. The selector function is called only once for each - * element. Ascending or descending order can be specified. - * - * @example - * ```ts - * import { sortBy } from "https://deno.land/std@$STD_VERSION/collections/sort_by.ts"; - * - * const people = [ - * { name: "Anna", age: 34n }, - * { name: "Kim", age: 42n }, - * { name: "John", age: 23n }, - * ]; - * const sortedByAge = sortBy(people, (it) => it.age); - * ``` - */ - -export function sortBy( - array: readonly T[], - selector: (el: T) => bigint, - options?: SortByOptions, -): T[]; -/** - * Returns all elements in the given collection, sorted by their result using - * the given selector. The selector function is called only once for each - * element. Ascending or descending order can be specified. - * - * @example - * ```ts - * import { sortBy } from "https://deno.land/std@$STD_VERSION/collections/sort_by.ts"; - * - * const people = [ - * { name: "Anna", startedAt: new Date("2020-01-01") }, - * { name: "Kim", startedAt: new Date("2020-03-01") }, - * { name: "John", startedAt: new Date("2020-06-01") }, - * ]; - * const sortedByStartedAt = sortBy(people, (it) => it.startedAt); - * ``` - */ -export function sortBy( - array: readonly T[], - selector: (el: T) => Date, - options?: SortByOptions, -): T[]; -export function sortBy( - array: readonly T[], - selector: - | ((el: T) => number) - | ((el: T) => string) - | ((el: T) => bigint) - | ((el: T) => Date), - options?: SortByOptions, -): T[] { - const len = array.length; - const indexes = new Array(len); - const selectors = new Array | null>(len); - const order = options?.order ?? "asc"; - - array.forEach((item, idx) => { - indexes[idx] = idx; - const s = selector(item); - selectors[idx] = Number.isNaN(s) ? null : s; - }); - - indexes.sort((ai, bi) => { - let a = selectors[ai]!; - let b = selectors[bi]!; - if (order === "desc") { - [a, b] = [b, a]; - } - if (a === null) return 1; - if (b === null) return -1; - return a > b ? 1 : a < b ? -1 : 0; - }); - - for (let i = 0; i < len; i++) { - (indexes as unknown as T[])[i] = array[indexes[i] as number] as T; - } - - return indexes as unknown as T[]; -} diff --git a/src/vendor/deno.land/std@0.217.0/collections/take_last_while.ts b/src/vendor/deno.land/std@0.217.0/collections/take_last_while.ts deleted file mode 100644 index f031f597218..00000000000 --- a/src/vendor/deno.land/std@0.217.0/collections/take_last_while.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Returns all elements in the given array after the last element that does not - * match the given predicate. - * - * @example - * ```ts - * import { takeLastWhile } from "https://deno.land/std@$STD_VERSION/collections/take_last_while.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * const arr = [1, 2, 3, 4, 5, 6]; - * - * assertEquals( - * takeLastWhile(arr, (i) => i > 4), - * [5, 6], - * ); - * ``` - */ -export function takeLastWhile( - array: readonly T[], - predicate: (el: T) => boolean, -): T[] { - let offset = array.length; - while (0 < offset && predicate(array[offset - 1] as T)) offset--; - - return array.slice(offset, array.length); -} diff --git a/src/vendor/deno.land/std@0.217.0/collections/take_while.ts b/src/vendor/deno.land/std@0.217.0/collections/take_while.ts deleted file mode 100644 index ecf41746f7d..00000000000 --- a/src/vendor/deno.land/std@0.217.0/collections/take_while.ts +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Returns all elements in the given collection until the first element that - * does not match the given predicate. - * - * @example - * ```ts - * import { takeWhile } from "https://deno.land/std@$STD_VERSION/collections/take_while.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * const arr = [1, 2, 3, 4, 5, 6]; - * - * assertEquals( - * takeWhile(arr, (i) => i !== 4), - * [1, 2, 3], - * ); - * ``` - */ -export function takeWhile( - array: readonly T[], - predicate: (el: T) => boolean, -): T[] { - let offset = 0; - const length = array.length; - - while (length > offset && predicate(array[offset] as T)) { - offset++; - } - - return array.slice(0, offset); -} diff --git a/src/vendor/deno.land/std@0.217.0/crypto/_fnv/fnv32.ts b/src/vendor/deno.land/std@0.217.0/crypto/_fnv/fnv32.ts deleted file mode 100644 index d4904b78ac9..00000000000 --- a/src/vendor/deno.land/std@0.217.0/crypto/_fnv/fnv32.ts +++ /dev/null @@ -1,32 +0,0 @@ -// Ported from Go: -// https://github.com/golang/go/tree/go1.13.10/src/hash/fnv/fnv.go -// Copyright 2011 The Go Authors. All rights reserved. BSD license. -// https://github.com/golang/go/blob/master/LICENSE -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { mul32, swap32 } from "./util.ts"; - -const prime32 = 16777619; - -export const fnv32 = (data: Uint8Array): ArrayBuffer => { - let hash = 2166136261; - - data.forEach((c) => { - hash = mul32(hash, prime32); - hash ^= c; - }); - - return Uint32Array.from([swap32(hash)]).buffer; -}; - -export const fnv32a = (data: Uint8Array): ArrayBuffer => { - let hash = 2166136261; - - data.forEach((c) => { - hash ^= c; - hash = mul32(hash, prime32); - }); - - return Uint32Array.from([swap32(hash)]).buffer; -}; diff --git a/src/vendor/deno.land/std@0.217.0/crypto/_fnv/fnv64.ts b/src/vendor/deno.land/std@0.217.0/crypto/_fnv/fnv64.ts deleted file mode 100644 index 24664b0754f..00000000000 --- a/src/vendor/deno.land/std@0.217.0/crypto/_fnv/fnv64.ts +++ /dev/null @@ -1,35 +0,0 @@ -// Ported from Go: -// https://github.com/golang/go/tree/go1.13.10/src/hash/fnv/fnv.go -// Copyright 2011 The Go Authors. All rights reserved. BSD license. -// https://github.com/golang/go/blob/master/LICENSE -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { mul64, swap32 } from "./util.ts"; - -const prime64Lo = 435; -const prime64Hi = 256; - -export const fnv64 = (data: Uint8Array): ArrayBuffer => { - let hashLo = 2216829733; - let hashHi = 3421674724; - - data.forEach((c) => { - [hashHi, hashLo] = mul64([hashHi, hashLo], [prime64Hi, prime64Lo]); - hashLo ^= c; - }); - - return new Uint32Array([swap32(hashHi >>> 0), swap32(hashLo >>> 0)]).buffer; -}; - -export const fnv64a = (data: Uint8Array): ArrayBuffer => { - let hashLo = 2216829733; - let hashHi = 3421674724; - - data.forEach((c) => { - hashLo ^= c; - [hashHi, hashLo] = mul64([hashHi, hashLo], [prime64Hi, prime64Lo]); - }); - - return new Uint32Array([swap32(hashHi >>> 0), swap32(hashLo >>> 0)]).buffer; -}; diff --git a/src/vendor/deno.land/std@0.217.0/crypto/_fnv/mod.ts b/src/vendor/deno.land/std@0.217.0/crypto/_fnv/mod.ts deleted file mode 100644 index ee7278b3a26..00000000000 --- a/src/vendor/deno.land/std@0.217.0/crypto/_fnv/mod.ts +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { fnv32, fnv32a } from "./fnv32.ts"; -import { fnv64, fnv64a } from "./fnv64.ts"; - -export function fnv(name: string, buf?: Uint8Array): ArrayBuffer { - if (!buf) { - throw new TypeError("no data provided for hashing"); - } - - switch (name) { - case "FNV32": - return fnv32(buf); - case "FNV64": - return fnv64(buf); - case "FNV32A": - return fnv32a(buf); - case "FNV64A": - return fnv64a(buf); - default: - throw new TypeError(`unsupported fnv digest: ${name}`); - } -} diff --git a/src/vendor/deno.land/std@0.217.0/crypto/_fnv/util.ts b/src/vendor/deno.land/std@0.217.0/crypto/_fnv/util.ts deleted file mode 100644 index 15a2fefd3ba..00000000000 --- a/src/vendor/deno.land/std@0.217.0/crypto/_fnv/util.ts +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -export function swap32(val: number): number { - return ( - ((val & 0xff) << 24) | - ((val & 0xff00) << 8) | - ((val >> 8) & 0xff00) | - ((val >> 24) & 0xff) - ); -} - -function n16(n: number): number { - return n & 0xffff; -} - -function n32(n: number): number { - return n >>> 0; -} - -function add32WithCarry(a: number, b: number): [number, number] { - const added = n32(a) + n32(b); - return [n32(added), added > 0xffffffff ? 1 : 0]; -} - -function mul32WithCarry(a: number, b: number): [number, number] { - const al = n16(a); - const ah = n16(a >>> 16); - const bl = n16(b); - const bh = n16(b >>> 16); - - const [t, tc] = add32WithCarry(al * bh, ah * bl); - const [n, nc] = add32WithCarry(al * bl, n32(t << 16)); - const carry = nc + (tc << 16) + n16(t >>> 16) + ah * bh; - - return [n, carry]; -} - -/** - * mul32 performs 32-bit multiplication, a * b - * @param a - * @param b - */ -export function mul32(a: number, b: number): number { - // https://stackoverflow.com/a/28151933 - const al = n16(a); - const ah = a - al; - return n32(n32(ah * b) + al * b); -} - -/** - * mul64 performs 64-bit multiplication with two 32-bit words - * @param [ah, al] - * @param [bh, bl] - */ -export function mul64( - [ah, al]: [number, number], - [bh, bl]: [number, number], -): [number, number] { - const [n, c] = mul32WithCarry(al, bl); - return [n32(mul32(al, bh) + mul32(ah, bl) + c), n]; -} diff --git a/src/vendor/deno.land/std@0.217.0/crypto/_wasm/lib/deno_std_wasm_crypto.generated.mjs b/src/vendor/deno.land/std@0.217.0/crypto/_wasm/lib/deno_std_wasm_crypto.generated.mjs deleted file mode 100644 index 418935eae63..00000000000 --- a/src/vendor/deno.land/std@0.217.0/crypto/_wasm/lib/deno_std_wasm_crypto.generated.mjs +++ /dev/null @@ -1,3249 +0,0 @@ -// @generated file from wasmbuild -- do not edit -// @ts-nocheck: generated -// deno-lint-ignore-file -// deno-fmt-ignore-file -// source-hash: 84e3cce6f11cd843776df87eb63883be022e0f43 -let wasm; - -const heap = new Array(128).fill(undefined); - -heap.push(undefined, null, true, false); - -function getObject(idx) { - return heap[idx]; -} - -let heap_next = heap.length; - -function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; -} - -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -const cachedTextDecoder = typeof TextDecoder !== "undefined" - ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) - : { - decode: () => { - throw Error("TextDecoder not available"); - }, - }; - -if (typeof TextDecoder !== "undefined") cachedTextDecoder.decode(); - -let cachedUint8Memory0 = null; - -function getUint8Memory0() { - if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { - cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachedUint8Memory0; -} - -function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); -} - -let WASM_VECTOR_LEN = 0; - -const cachedTextEncoder = typeof TextEncoder !== "undefined" - ? new TextEncoder("utf-8") - : { - encode: () => { - throw Error("TextEncoder not available"); - }, - }; - -const encodeString = function (arg, view) { - return cachedTextEncoder.encodeInto(arg, view); -}; - -function passStringToWasm0(arg, malloc, realloc) { - if (realloc === undefined) { - const buf = cachedTextEncoder.encode(arg); - const ptr = malloc(buf.length, 1) >>> 0; - getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); - WASM_VECTOR_LEN = buf.length; - return ptr; - } - - let len = arg.length; - let ptr = malloc(len, 1) >>> 0; - - const mem = getUint8Memory0(); - - let offset = 0; - - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7F) break; - mem[ptr + offset] = code; - } - - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; - const view = getUint8Memory0().subarray(ptr + offset, ptr + len); - const ret = encodeString(arg, view); - - offset += ret.written; - } - - WASM_VECTOR_LEN = offset; - return ptr; -} - -function isLikeNone(x) { - return x === undefined || x === null; -} - -let cachedInt32Memory0 = null; - -function getInt32Memory0() { - if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { - cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachedInt32Memory0; -} - -function getArrayU8FromWasm0(ptr, len) { - ptr = ptr >>> 0; - return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); -} -/** - * Returns the digest of the given `data` using the given hash `algorithm`. - * - * `length` will usually be left `undefined` to use the default length for - * the algorithm. For algorithms with variable-length output, it can be used - * to specify a non-negative integer number of bytes. - * - * An error will be thrown if `algorithm` is not a supported hash algorithm or - * `length` is not a supported length for the algorithm. - * @param {string} algorithm - * @param {Uint8Array} data - * @param {number | undefined} [length] - * @returns {Uint8Array} - */ -export function digest(algorithm, data, length) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - algorithm, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.digest( - retptr, - ptr0, - len0, - addHeapObject(data), - !isLikeNone(length), - isLikeNone(length) ? 0 : length, - ); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var r2 = getInt32Memory0()[retptr / 4 + 2]; - var r3 = getInt32Memory0()[retptr / 4 + 3]; - if (r3) { - throw takeObject(r2); - } - var v2 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } -} - -const DigestContextFinalization = new FinalizationRegistry((ptr) => - wasm.__wbg_digestcontext_free(ptr >>> 0) -); -/** - * A context for incrementally computing a digest using a given hash algorithm. - */ -export class DigestContext { - static __wrap(ptr) { - ptr = ptr >>> 0; - const obj = Object.create(DigestContext.prototype); - obj.__wbg_ptr = ptr; - DigestContextFinalization.register(obj, obj.__wbg_ptr, obj); - return obj; - } - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - DigestContextFinalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_digestcontext_free(ptr); - } - /** - * Creates a new context incrementally computing a digest using the given - * hash algorithm. - * - * An error will be thrown if `algorithm` is not a supported hash algorithm. - * @param {string} algorithm - */ - constructor(algorithm) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - algorithm, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.digestcontext_new(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var r2 = getInt32Memory0()[retptr / 4 + 2]; - if (r2) { - throw takeObject(r1); - } - this.__wbg_ptr = r0 >>> 0; - return this; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * Update the digest's internal state with the additional input `data`. - * - * If the `data` array view is large, it will be split into subarrays (via - * JavaScript bindings) which will be processed sequentially in order to - * limit the amount of memory that needs to be allocated in the Wasm heap. - * @param {Uint8Array} data - */ - update(data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.digestcontext_update(retptr, this.__wbg_ptr, addHeapObject(data)); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - if (r1) { - throw takeObject(r0); - } - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * Returns the digest of the input data so far. This may be called repeatedly - * without side effects. - * - * `length` will usually be left `undefined` to use the default length for - * the algorithm. For algorithms with variable-length output, it can be used - * to specify a non-negative integer number of bytes. - * - * An error will be thrown if `algorithm` is not a supported hash algorithm or - * `length` is not a supported length for the algorithm. - * @param {number | undefined} [length] - * @returns {Uint8Array} - */ - digest(length) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.digestcontext_digest( - retptr, - this.__wbg_ptr, - !isLikeNone(length), - isLikeNone(length) ? 0 : length, - ); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var r2 = getInt32Memory0()[retptr / 4 + 2]; - var r3 = getInt32Memory0()[retptr / 4 + 3]; - if (r3) { - throw takeObject(r2); - } - var v1 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * Returns the digest of the input data so far, and resets this context to - * its initial state, as though it has not yet been provided with any input - * data. (It will still use the same algorithm.) - * - * `length` will usually be left `undefined` to use the default length for - * the algorithm. For algorithms with variable-length output, it can be used - * to specify a non-negative integer number of bytes. - * - * An error will be thrown if `algorithm` is not a supported hash algorithm or - * `length` is not a supported length for the algorithm. - * @param {number | undefined} [length] - * @returns {Uint8Array} - */ - digestAndReset(length) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.digestcontext_digestAndReset( - retptr, - this.__wbg_ptr, - !isLikeNone(length), - isLikeNone(length) ? 0 : length, - ); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var r2 = getInt32Memory0()[retptr / 4 + 2]; - var r3 = getInt32Memory0()[retptr / 4 + 3]; - if (r3) { - throw takeObject(r2); - } - var v1 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * Returns the digest of the input data so far, and then drops the context - * from memory on the Wasm side. This context must no longer be used, and any - * further method calls will result in null pointer errors being thrown. - * https://github.com/rustwasm/wasm-bindgen/blob/bf39cfd8/crates/backend/src/codegen.rs#L186 - * - * `length` will usually be left `undefined` to use the default length for - * the algorithm. For algorithms with variable-length output, it can be used - * to specify a non-negative integer number of bytes. - * - * An error will be thrown if `algorithm` is not a supported hash algorithm or - * `length` is not a supported length for the algorithm. - * @param {number | undefined} [length] - * @returns {Uint8Array} - */ - digestAndDrop(length) { - try { - const ptr = this.__destroy_into_raw(); - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.digestcontext_digestAndDrop( - retptr, - ptr, - !isLikeNone(length), - isLikeNone(length) ? 0 : length, - ); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var r2 = getInt32Memory0()[retptr / 4 + 2]; - var r3 = getInt32Memory0()[retptr / 4 + 3]; - if (r3) { - throw takeObject(r2); - } - var v1 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v1; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * Resets this context to its initial state, as though it has not yet been - * provided with any input data. (It will still use the same algorithm.) - */ - reset() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.digestcontext_reset(retptr, this.__wbg_ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - if (r1) { - throw takeObject(r0); - } - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * Returns a new `DigestContext` that is a copy of this one, i.e., using the - * same algorithm and with a copy of the same internal state. - * - * This may be a more efficient option for computing multiple digests that - * start with a common prefix. - * @returns {DigestContext} - */ - clone() { - const ret = wasm.digestcontext_clone(this.__wbg_ptr); - return DigestContext.__wrap(ret); - } -} - -const imports = { - __wbindgen_placeholder__: { - __wbg_new_d331494ab60a8491: function (arg0, arg1) { - const ret = new TypeError(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }, - __wbindgen_object_drop_ref: function (arg0) { - takeObject(arg0); - }, - __wbg_byteLength_a8d894d93425b2e0: function (arg0) { - const ret = getObject(arg0).byteLength; - return ret; - }, - __wbg_byteOffset_89d0a5265d5bde53: function (arg0) { - const ret = getObject(arg0).byteOffset; - return ret; - }, - __wbg_buffer_3da2aecfd9814cd8: function (arg0) { - const ret = getObject(arg0).buffer; - return addHeapObject(ret); - }, - __wbg_newwithbyteoffsetandlength_d695c7957788f922: function ( - arg0, - arg1, - arg2, - ) { - const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0); - return addHeapObject(ret); - }, - __wbg_length_f0764416ba5bb237: function (arg0) { - const ret = getObject(arg0).length; - return ret; - }, - __wbindgen_memory: function () { - const ret = wasm.memory; - return addHeapObject(ret); - }, - __wbg_buffer_5d1b598a01b41a42: function (arg0) { - const ret = getObject(arg0).buffer; - return addHeapObject(ret); - }, - __wbg_new_ace717933ad7117f: function (arg0) { - const ret = new Uint8Array(getObject(arg0)); - return addHeapObject(ret); - }, - __wbg_set_74906aa30864df5a: function (arg0, arg1, arg2) { - getObject(arg0).set(getObject(arg1), arg2 >>> 0); - }, - __wbindgen_throw: function (arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); - }, - }, -}; - -/** Instantiates an instance of the Wasm module returning its functions. - * @remarks It is safe to call this multiple times and once successfully - * loaded it will always return a reference to the same object. - */ -export function instantiate() { - return instantiateWithInstance().exports; -} - -let instanceWithExports; - -/** Instantiates an instance of the Wasm module along with its exports. - * @remarks It is safe to call this multiple times and once successfully - * loaded it will always return a reference to the same object. - * @returns {{ - * instance: WebAssembly.Instance; - * exports: { digest: typeof digest; DigestContext : typeof DigestContext } - * }} - */ -export function instantiateWithInstance() { - if (instanceWithExports == null) { - const instance = instantiateInstance(); - wasm = instance.exports; - cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); - cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); - instanceWithExports = { - instance, - exports: { digest, DigestContext }, - }; - } - return instanceWithExports; -} - -/** Gets if the Wasm module has been instantiated. */ -export function isInstantiated() { - return instanceWithExports != null; -} - -function instantiateInstance() { - const wasmBytes = base64decode( - "\ -AGFzbQEAAAABsQEZYAAAYAABf2ABfwBgAX8Bf2ACf38AYAJ/fwF/YAN/f38AYAN/f38Bf2AEf39/fw\ -BgBH9/f38Bf2AFf39/f38AYAV/f39/fwF/YAZ/f39/f38AYAZ/f39/f38Bf2AHf39/f35/fwBgBX9/\ -f35/AGAHf39/fn9/fwF/YAN/f34AYAV/f35/fwBgBX9/fX9/AGAFf398f38AYAJ/fgBgBH9+f38AYA\ -R/fX9/AGAEf3x/fwACpAUMGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxpfX3diZ19uZXdfZDMzMTQ5\ -NGFiNjBhODQ5MQAFGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxpfX3diaW5kZ2VuX29iamVjdF9kcm\ -9wX3JlZgACGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXyFfX3diZ19ieXRlTGVuZ3RoX2E4ZDg5NGQ5\ -MzQyNWIyZTAAAxhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18hX193YmdfYnl0ZU9mZnNldF84OWQwYT\ -UyNjVkNWJkZTUzAAMYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fHV9fd2JnX2J1ZmZlcl8zZGEyYWVj\ -ZmQ5ODE0Y2Q4AAMYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fMV9fd2JnX25ld3dpdGhieXRlb2Zmc2\ -V0YW5kbGVuZ3RoX2Q2OTVjNzk1Nzc4OGY5MjIABxhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18dX193\ -YmdfbGVuZ3RoX2YwNzY0NDE2YmE1YmIyMzcAAxhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18RX193Ym\ -luZGdlbl9tZW1vcnkAARhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18dX193YmdfYnVmZmVyXzVkMWI1\ -OThhMDFiNDFhNDIAAxhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18aX193YmdfbmV3X2FjZTcxNzkzM2\ -FkNzExN2YAAxhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18aX193Ymdfc2V0Xzc0OTA2YWEzMDg2NGRm\ -NWEABhhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18QX193YmluZGdlbl90aHJvdwAEA4sBiQEGCAYIEQ\ -oEBgYEBg8DAwYGBBAEBwIEFQQEBAYJBQYHBg0EBAcFBgYGBAYGBwYGBgYGBgIEBgQGBgYGBA4OBgYG\ -BgQEBAQEBgYMBAcGBggIBgQMCggGBgYGBQUCBAQEBAQEBAUHBgYJAAQECQ0CCwoLCgoTFBIIBwUFBA\ -YABQMAAAQEBwcHAAICAgQFAXABFxcFAwEAEQYJAX8BQYCAwAALB7gCDgZtZW1vcnkCAAZkaWdlc3QA\ -VBhfX3diZ19kaWdlc3Rjb250ZXh0X2ZyZWUAZhFkaWdlc3Rjb250ZXh0X25ldwBXFGRpZ2VzdGNvbn\ -RleHRfdXBkYXRlAHAUZGlnZXN0Y29udGV4dF9kaWdlc3QADRxkaWdlc3Rjb250ZXh0X2RpZ2VzdEFu\ -ZFJlc2V0AFkbZGlnZXN0Y29udGV4dF9kaWdlc3RBbmREcm9wAFoTZGlnZXN0Y29udGV4dF9yZXNldA\ -AeE2RpZ2VzdGNvbnRleHRfY2xvbmUAGB9fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyAIkB\ -EV9fd2JpbmRnZW5fbWFsbG9jAG4SX193YmluZGdlbl9yZWFsbG9jAHYPX193YmluZGdlbl9mcmVlAI\ -YBCSYBAEEBCxaDAYQBKIgBeV16e3eCAYEBfH1+f4ABkgFkkwFllAGFAQqtuwiJAY5XASN+IAApAzgh\ -AyAAKQMwIQQgACkDKCEFIAApAyAhBiAAKQMYIQcgACkDECEIIAApAwghCSAAKQMAIQoCQCACRQ0AIA\ -EgAkEHdGohAgNAIApCJIkgCkIeiYUgCkIZiYUgCSAIhSAKgyAJIAiDhXwgAyAFIASFIAaDIASFfCAG\ -QjKJIAZCLomFIAZCF4mFfCABKQAAIgtCOIYgC0KA/gODQiiGhCALQoCA/AeDQhiGIAtCgICA+A+DQg\ -iGhIQgC0IIiEKAgID4D4MgC0IYiEKAgPwHg4QgC0IoiEKA/gODIAtCOIiEhIQiDHxCotyiuY3zi8XC\ -AHwiDXwiC0IkiSALQh6JhSALQhmJhSALIAogCYWDIAogCYOFfCAEIAEpAAgiDkI4hiAOQoD+A4NCKI\ -aEIA5CgID8B4NCGIYgDkKAgID4D4NCCIaEhCAOQgiIQoCAgPgPgyAOQhiIQoCA/AeDhCAOQiiIQoD+\ -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\ -UpAwA3A0AgByAEQcAAakHQARCQARoMGQtBAC0AgNhAGkHQARAZIgdFDRsgBSkDQCEPIARBwABqQcgA\ -aiAFQcgAahBnIARBwABqQQhqIAVBCGopAwA3AwAgBEHAAGpBEGogBUEQaikDADcDACAEQcAAakEYai\ -AFQRhqKQMANwMAIARBwABqQSBqIAVBIGopAwA3AwAgBEHAAGpBKGogBUEoaikDADcDACAEQcAAakEw\ -aiAFQTBqKQMANwMAIARBwABqQThqIAVBOGopAwA3AwAgBEHAAGpByAFqIAVByAFqLQAAOgAAIAQgDz\ -cDgAEgBCAFKQMANwNAIAcgBEHAAGpB0AEQkAEaDBgLQQAtAIDYQBpB0AEQGSIHRQ0aIAUpA0AhDyAE\ -QcAAakHIAGogBUHIAGoQZyAEQcAAakEIaiAFQQhqKQMANwMAIARBwABqQRBqIAVBEGopAwA3AwAgBE\ -HAAGpBGGogBUEYaikDADcDACAEQcAAakEgaiAFQSBqKQMANwMAIARBwABqQShqIAVBKGopAwA3AwAg\ -BEHAAGpBMGogBUEwaikDADcDACAEQcAAakE4aiAFQThqKQMANwMAIARBwABqQcgBaiAFQcgBai0AAD\ -oAACAEIA83A4ABIAQgBSkDADcDQCAHIARBwABqQdABEJABGgwXC0EALQCA2EAaQdABEBkiB0UNGSAF\ -KQNAIQ8gBEHAAGpByABqIAVByABqEGcgBEHAAGpBCGogBUEIaikDADcDACAEQcAAakEQaiAFQRBqKQ\ -MANwMAIARBwABqQRhqIAVBGGopAwA3AwAgBEHAAGpBIGogBUEgaikDADcDACAEQcAAakEoaiAFQShq\ -KQMANwMAIARBwABqQTBqIAVBMGopAwA3AwAgBEHAAGpBOGogBUE4aikDADcDACAEQcAAakHIAWogBU\ -HIAWotAAA6AAAgBCAPNwOAASAEIAUpAwA3A0AgByAEQcAAakHQARCQARoMFgtBAC0AgNhAGkHQARAZ\ -IgdFDRggBSkDQCEPIARBwABqQcgAaiAFQcgAahBnIARBwABqQQhqIAVBCGopAwA3AwAgBEHAAGpBEG\ -ogBUEQaikDADcDACAEQcAAakEYaiAFQRhqKQMANwMAIARBwABqQSBqIAVBIGopAwA3AwAgBEHAAGpB\ -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\ -QeAAaiAFQeAAai0AADoAACAEIA83A0AgByAEQcAAakHoABCQARoMDAtBAC0AgNhAGkHoABAZIgdFDQ\ -4gBEHAAGpBGGogBUEYaigCADYCACAEQcAAakEQaiAFQRBqKQMANwMAIAQgBSkDCDcDSCAFKQMAIQ8g\ -BEHAAGpBIGogBUEgahBVIARBwABqQeAAaiAFQeAAai0AADoAACAEIA83A0AgByAEQcAAakHoABCQAR\ -oMCwtBAC0AgNhAGkHoAhAZIgdFDQ0gBSgCyAEhDCAEQcAAakHQAWogBUHQAWoQaCAFQeACai0AACEN\ -IARBwABqIAVByAEQkAEaIARBwABqQeACaiANOgAAIAQgDDYCiAIgByAEQcAAakHoAhCQARoMCgtBAC\ -0AgNhAGkHgAhAZIgdFDQwgBSgCyAEhDCAEQcAAakHQAWogBUHQAWoQaSAFQdgCai0AACENIARBwABq\ -IAVByAEQkAEaIARBwABqQdgCaiANOgAAIAQgDDYCiAIgByAEQcAAakHgAhCQARoMCQtBAC0AgNhAGk\ -HAAhAZIgdFDQsgBSgCyAEhDCAEQcAAakHQAWogBUHQAWoQaiAFQbgCai0AACENIARBwABqIAVByAEQ\ -kAEaIARBwABqQbgCaiANOgAAIAQgDDYCiAIgByAEQcAAakHAAhCQARoMCAtBAC0AgNhAGkGgAhAZIg\ -dFDQogBSgCyAEhDCAEQcAAakHQAWogBUHQAWoQayAFQZgCai0AACENIARBwABqIAVByAEQkAEaIARB\ -wABqQZgCaiANOgAAIAQgDDYCiAIgByAEQcAAakGgAhCQARoMBwtBAC0AgNhAGkHwABAZIgdFDQkgBS\ -kDICEPIARBwABqQShqIAVBKGoQVSAEQcAAakEIaiAFQQhqKQMANwMAIARBwABqQRBqIAVBEGopAwA3\ -AwAgBEHAAGpBGGogBUEYaikDADcDACAEQcAAakHoAGogBUHoAGotAAA6AAAgBCAPNwNgIAQgBSkDAD\ -cDQCAHIARBwABqQfAAEJABGgwGC0EALQCA2EAaQfAAEBkiB0UNCCAFKQMgIQ8gBEHAAGpBKGogBUEo\ -ahBVIARBwABqQQhqIAVBCGopAwA3AwAgBEHAAGpBEGogBUEQaikDADcDACAEQcAAakEYaiAFQRhqKQ\ -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\ -NxIBlzaiAOQRp3IA5BFXdzIA5BB3dzakHr2cGiemoiDGoiFkEedyAWQRN3cyAWQQp3cyAWIAsgEHNx\ -IAsgEHFzaiATIBRBGXcgFEEOd3MgFEEDdnNqIA9qICVBD3cgJUENd3MgJUEKdnNqIBlqIAwgDWoiDS\ -AOICNzcSAjc2ogDUEadyANQRV3cyANQQd3c2pB98fm93tqIhlqIhMgFiALc3EgFiALcXMgAmogE0Ee\ -dyATQRN3cyATQQp3c2ogFCAXQRl3IBdBDndzIBdBA3ZzaiASaiAkQQ93ICRBDXdzICRBCnZzaiAjai\ -AZIBFqIhEgDSAOc3EgDnNqIBFBGncgEUEVd3MgEUEHd3NqQfLxxbN8aiIUaiECIBMgCmohCiAQIAdq\ -IBRqIQcgFiAJaiEJIBEgBmohBiALIAhqIQggDSAFaiEFIA4gBGohBCABQcAAaiIBIANHDQALIAAgBD\ -YCHCAAIAU2AhggACAGNgIUIAAgBzYCECAAIAg2AgwgACAJNgIIIAAgCjYCBCAAIAI2AgAL7E8COX8C\ -fiMAQYACayIEJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAk\ -ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJA\ -AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQA\ -JAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAADhsA\ -AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRoACyABQcgAaiEFIANBgAEgAUHIAWotAAAiAGsiBk0NGi\ -AARQ1pIAUgAGogAiAGEJABGiABIAEpA0BCgAF8NwNAIAEgBUIAEBACQCADIAZrIgNFDQAgAiAGaiEC\ -DGoLQbiSwAAhA0EAIQYMagsgAUHIAGohBSADQYABIAFByAFqLQAAIgBrIgZNDRogAEUNZiAFIABqIA\ -IgBhCQARogASABKQNAQoABfDcDQCABIAVCABAQAkAgAyAGayIDRQ0AIAIgBmohAgxnC0G4ksAAIQNB\ -ACEGDGcLIAFByABqIQUgA0GAASABQcgBai0AACIAayIGTQ0aIABFDWMgBSAAaiACIAYQkAEaIAEgAS\ -kDQEKAAXw3A0AgASAFQgAQEAJAIAMgBmsiA0UNACACIAZqIQIMZAtBuJLAACEDQQAhBgxkCyABQcgA\ -aiEFIANBgAEgAUHIAWotAAAiAGsiBk0NGiAARQ1gIAUgAGogAiAGEJABGiABIAEpA0BCgAF8NwNAIA\ -EgBUIAEBACQCADIAZrIgNFDQAgAiAGaiECDGELQbiSwAAhA0EAIQYMYQsgAUHIAGohBSADQYABIAFB\ -yAFqLQAAIgBrIgZNDRogAEUNXSAFIABqIAIgBhCQARogASABKQNAQoABfDcDQCABIAVCABAQAkAgAy\ -AGayIDRQ0AIAIgBmohAgxeC0G4ksAAIQNBACEGDF4LIAFByABqIQUgA0GAASABQcgBai0AACIAayIG\ -TQ0aIABFDVogBSAAaiACIAYQkAEaIAEgASkDQEKAAXw3A0AgASAFQgAQEAJAIAMgBmsiA0UNACACIA\ -ZqIQIMWwtBuJLAACEDQQAhBgxbCyABQShqIQUgA0HAACABQegAai0AACIAayIGTQ0aIABFDVcgBSAA\ -aiACIAYQkAEaIAEgASkDIELAAHw3AyBBACEHIAEgBUEAEBMCQCADIAZrIgNFDQAgAiAGaiECDFgLQb\ -iSwAAhAwxYCyABQSBqIQggAUGJAWotAABBBnQgAUGIAWotAABqIgBFDVUgCCACQYAIIABrIgAgAyAA\ -IANJGyIGEC8hBSADIAZrIgNFDWQgBEG4AWoiCSABQegAaiIAKQMANwMAIARBwAFqIgogAUHwAGoiBy\ -kDADcDACAEQcgBaiILIAFB+ABqIgwpAwA3AwAgBEHwAGpBCGoiDSAFQQhqKQMANwMAIARB8ABqQRBq\ -Ig4gBUEQaikDADcDACAEQfAAakEYaiIPIAVBGGopAwA3AwAgBEHwAGpBIGoiECAFQSBqKQMANwMAIA\ -RB8ABqQShqIhEgBUEoaikDADcDACAEQfAAakEwaiISIAVBMGopAwA3AwAgBEHwAGpBOGoiEyAFQThq\ -KQMANwMAIAQgBSkDADcDcCAEIAFB4ABqIhQpAwA3A7ABIAFBigFqLQAAIRUgAUGAAWopAwAhPSABLQ\ -CJASEWIAQgAS0AiAEiFzoA2AEgBCA9NwPQASAEIBUgFkVyQQJyIhU6ANkBIARBGGoiFiAMKQIANwMA\ -IARBEGoiDCAHKQIANwMAIARBCGoiByAAKQIANwMAIAQgFCkCADcDACAEIARB8ABqIBcgPSAVEBcgBE\ -Efai0AACEUIARBHmotAAAhFSAEQR1qLQAAIRcgBEEbai0AACEYIARBGmotAAAhGSAEQRlqLQAAIRog\ -Fi0AACEWIARBF2otAAAhGyAEQRZqLQAAIRwgBEEVai0AACEdIARBE2otAAAhHiAEQRJqLQAAIR8gBE\ -ERai0AACEgIAwtAAAhDCAEQQ9qLQAAISEgBEEOai0AACEiIARBDWotAAAhIyAEQQtqLQAAISQgBEEK\ -ai0AACElIARBCWotAAAhJiAHLQAAIScgBC0AHCEoIAQtABQhKSAELQAMISogBC0AByErIAQtAAYhLC\ -AELQAFIS0gBC0ABCEuIAQtAAMhLyAELQACITAgBC0AASExIAQtAAAhMiABID0QIiABQfAOaigCACIH\ -QTdPDRogASAHQQV0aiIAQZMBaiAvOgAAIABBkgFqIDA6AAAgAEGRAWogMToAACAAQZABaiAyOgAAIA\ -BBrwFqIBQ6AAAgAEGuAWogFToAACAAQa0BaiAXOgAAIABBrAFqICg6AAAgAEGrAWogGDoAACAAQaoB\ -aiAZOgAAIABBqQFqIBo6AAAgAEGoAWogFjoAACAAQacBaiAbOgAAIABBpgFqIBw6AAAgAEGlAWogHT\ -oAACAAQaQBaiApOgAAIABBowFqIB46AAAgAEGiAWogHzoAACAAQaEBaiAgOgAAIABBoAFqIAw6AAAg\ -AEGfAWogIToAACAAQZ4BaiAiOgAAIABBnQFqICM6AAAgAEGcAWogKjoAACAAQZsBaiAkOgAAIABBmg\ -FqICU6AAAgAEGZAWogJjoAACAAQZgBaiAnOgAAIABBlwFqICs6AAAgAEGWAWogLDoAACAAQZUBaiAt\ -OgAAIABBlAFqIC46AAAgASAHQQFqNgLwDiANQgA3AwAgDkIANwMAIA9CADcDACAQQgA3AwAgEUIANw\ -MAIBJCADcDACATQgA3AwAgCSABQQhqKQMANwMAIAogAUEQaikDADcDACALIAFBGGopAwA3AwAgBEIA\ -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\ -BmshAyACIAZqIQIMKwsgBSAAaiACIAMQkAEaIAEgACADajoAWAw+CyAFIABqIAIgBhCQARogBEHwAG\ -ogBUEBEBsgAiAGaiECIAMgBmshAwwoCyAGIABqIAIgAxCQARogASAAIANqOgBgDDwLIAYgAGogAiAF\ -EJABGiABIAEpAwBCAXw3AwAgAUEIaiAGEBIgAyAFayEDIAIgBWohAgwlCyAFIABqIAIgAxCQARogAS\ -AAIANqOgBgDDoLIAUgAGogAiAGEJABGiABIAEpAwBCAXw3AwAgAUEIaiAFQQEQFCACIAZqIQIgAyAG\ -ayEDDCILIAUgAGogAiADEJABGiABIAAgA2o6AOACDDgLIAUgAGogAiAGEJABGiAEQfAAaiAFQQEQOy\ -ACIAZqIQIgAyAGayEDDB8LIAUgAGogAiADEJABGiABIAAgA2o6ANgCDDYLIAUgAGogAiAGEJABGiAE\ -QfAAaiAFQQEQQiACIAZqIQIgAyAGayEDDBwLIAUgAGogAiADEJABGiABIAAgA2o6ALgCDDQLIAUgAG\ -ogAiAGEJABGiAEQfAAaiAFQQEQUiACIAZqIQIgAyAGayEDDBkLIAUgAGogAiADEJABGiABIAAgA2o6\ -AJgCDDILIAUgAGogAiAGEJABGiAEQfAAaiAFQQEQWCACIAZqIQIgAyAGayEDDBYLIAUgAGogAiADEJ\ -ABGiABIAAgA2o6AGgMMAsgBSAAaiACIAYQkAEaIAEgASkDIEIBfDcDICABIAVBARAOIAIgBmohAiAD\ -IAZrIQMMEwsgBSAAaiACIAMQkAEaIAEgACADajoAaAwuCyAFIABqIAIgBhCQARogASABKQMgQgF8Nw\ -MgIAEgBUEBEA4gAiAGaiECIAMgBmshAwwQCyAFIABqIAIgAxCQARogASAAIANqOgDQAQwsCyAFIABq\ -IAIgBhCQARogASABKQNAQgF8Ij03A0AgAUHIAGoiACAAKQMAID1QrXw3AwAgASAFQQEQDCACIAZqIQ\ -IgAyAGayEDDA0LIAUgAGogAiADEJABGiABIAAgA2o6ANABDCoLIAUgAGogAiAGEJABGiABIAEpA0BC\ -AXwiPTcDQCABQcgAaiIAIAApAwAgPVCtfDcDACABIAVBARAMIAIgBmohAiADIAZrIQMMCgsgBSAAai\ -ACIAMQkAEaIAEgACADajoA+AIMKAsgBSAAaiACIAYQkAEaIARB8ABqIAVBARAzIAIgBmohAiADIAZr\ -IQMMBwsgBSAAaiACIAMQkAEaIAEgACADajoA2AIMJgsgBSAAaiACIAYQkAEaIARB8ABqIAVBARBCIA\ -IgBmohAiADIAZrIQMMBAsgBiAAaiACIAMQkAEaIAAgA2ohBwwCCyAGIABqIAIgBRCQARogASABKQMA\ -QgF8NwMAIAFBCGogBhAVIAMgBWshAyACIAVqIQILIANBP3EhByACIANBQHEiAGohDAJAIANBwABJDQ\ -AgASABKQMAIANBBnatfDcDACABQQhqIQUDQCAFIAIQFSACQcAAaiECIABBQGoiAA0ACwsgBiAMIAcQ\ -kAEaCyABIAc6AGAMIQsgAyADQYgBbiIHQYgBbCIGayEAAkAgA0GIAUkNACAEQfAAaiACIAcQQgsCQC\ -AAQYkBTw0AIAUgAiAGaiAAEJABGiABIAA6ANgCDCELIABBiAFBgIDAABBgAAsgAyADQagBbiIHQagB\ -bCIGayEAAkAgA0GoAUkNACAEQfAAaiACIAcQMwsCQCAAQakBTw0AIAUgAiAGaiAAEJABGiABIAA6AP\ -gCDCALIABBqAFBgIDAABBgAAsgA0H/AHEhACACIANBgH9xaiEGAkAgA0GAAUkNACABIAEpA0AiPSAD\ -QQd2IgOtfCI+NwNAIAFByABqIgcgBykDACA+ID1UrXw3AwAgASACIAMQDAsgBSAGIAAQkAEaIAEgAD\ -oA0AEMHgsgA0H/AHEhACACIANBgH9xaiEGAkAgA0GAAUkNACABIAEpA0AiPSADQQd2IgOtfCI+NwNA\ -IAFByABqIgcgBykDACA+ID1UrXw3AwAgASACIAMQDAsgBSAGIAAQkAEaIAEgADoA0AEMHQsgA0E/cS\ -EAIAIgA0FAcWohBgJAIANBwABJDQAgASABKQMgIANBBnYiA618NwMgIAEgAiADEA4LIAUgBiAAEJAB\ -GiABIAA6AGgMHAsgA0E/cSEAIAIgA0FAcWohBgJAIANBwABJDQAgASABKQMgIANBBnYiA618NwMgIA\ -EgAiADEA4LIAUgBiAAEJABGiABIAA6AGgMGwsgAyADQcgAbiIHQcgAbCIGayEAAkAgA0HIAEkNACAE\ -QfAAaiACIAcQWAsCQCAAQckATw0AIAUgAiAGaiAAEJABGiABIAA6AJgCDBsLIABByABBgIDAABBgAA\ -sgAyADQegAbiIHQegAbCIGayEAAkAgA0HoAEkNACAEQfAAaiACIAcQUgsCQCAAQekATw0AIAUgAiAG\ -aiAAEJABGiABIAA6ALgCDBoLIABB6ABBgIDAABBgAAsgAyADQYgBbiIHQYgBbCIGayEAAkAgA0GIAU\ -kNACAEQfAAaiACIAcQQgsCQCAAQYkBTw0AIAUgAiAGaiAAEJABGiABIAA6ANgCDBkLIABBiAFBgIDA\ -ABBgAAsgAyADQZABbiIHQZABbCIGayEAAkAgA0GQAUkNACAEQfAAaiACIAcQOwsCQCAAQZEBTw0AIA\ -UgAiAGaiAAEJABGiABIAA6AOACDBgLIABBkAFBgIDAABBgAAsgA0E/cSEAIAIgA0FAcWohBgJAIANB\ -wABJDQAgASABKQMAIANBBnYiA618NwMAIAFBCGogAiADEBQLIAUgBiAAEJABGiABIAA6AGAMFgsgA0\ -E/cSEHIAIgA0FAcSIAaiEMAkAgA0HAAEkNACABIAEpAwAgA0EGdq18NwMAIAFBCGohBQNAIAUgAhAS\ -IAJBwABqIQIgAEFAaiIADQALCyAGIAwgBxCQARogASAHOgBgDBULIANBP3EhACACIANBQHFqIQYCQC\ -ADQcAASQ0AIARB8ABqIAIgA0EGdhAbCyAFIAYgABCQARogASAAOgBYDBQLIANBP3EhBiACIANBQHEi\ -AGohBwJAIANBwABJDQAgASABKQMQIANBBnatfDcDEANAIAEgAhAjIAJBwABqIQIgAEFAaiIADQALCy\ -AFIAcgBhCQARogASAGOgBYDBMLIAMgA0HIAG4iB0HIAGwiBmshAAJAIANByABJDQAgBEHwAGogAiAH\ -EFgLAkAgAEHJAE8NACAFIAIgBmogABCQARogASAAOgCYAgwTCyAAQcgAQYCAwAAQYAALIAMgA0HoAG\ -4iB0HoAGwiBmshAAJAIANB6ABJDQAgBEHwAGogAiAHEFILAkAgAEHpAE8NACAFIAIgBmogABCQARog\ -ASAAOgC4AgwSCyAAQegAQYCAwAAQYAALIAMgA0GIAW4iB0GIAWwiBmshAAJAIANBiAFJDQAgBEHwAG\ -ogAiAHEEILAkAgAEGJAU8NACAFIAIgBmogABCQARogASAAOgDYAgwRCyAAQYgBQYCAwAAQYAALIAMg\ -A0GQAW4iB0GQAWwiBmshAAJAIANBkAFJDQAgBEHwAGogAiAHEDsLAkAgAEGRAU8NACAFIAIgBmogAB\ -CQARogASAAOgDgAgwQCyAAQZABQYCAwAAQYAALAkACQAJAAkACQAJAAkACQAJAIANBgQhJDQAgAUGQ\ -AWohFiABQYABaikDACE+IARBwABqIRUgBEHwAGpBwABqIQwgBEEgaiEUIARB4AFqQR9qIQ0gBEHgAW\ -pBHmohDiAEQeABakEdaiEPIARB4AFqQRtqIRAgBEHgAWpBGmohESAEQeABakEZaiESIARB4AFqQRdq\ -IRMgBEHgAWpBFmohMyAEQeABakEVaiE0IARB4AFqQRNqITUgBEHgAWpBEmohNiAEQeABakERaiE3IA\ -RB4AFqQQ9qITggBEHgAWpBDmohOSAEQeABakENaiE6IARB4AFqQQtqITsgBEHgAWpBCWohPANAID5C\ -CoYhPUF/IANBAXZndkEBaiEFA0AgBSIAQQF2IQUgPSAAQX9qrYNCAFINAAsgAEEKdq0hPQJAAkAgAE\ -GBCEkNACADIABJDQUgAS0AigEhByAEQfAAakE4aiIXQgA3AwAgBEHwAGpBMGoiGEIANwMAIARB8ABq\ -QShqIhlCADcDACAEQfAAakEgaiIaQgA3AwAgBEHwAGpBGGoiG0IANwMAIARB8ABqQRBqIhxCADcDAC\ -AEQfAAakEIaiIdQgA3AwAgBEIANwNwIAIgACABID4gByAEQfAAakHAABAdIQUgBEHgAWpBGGpCADcD\ -ACAEQeABakEQakIANwMAIARB4AFqQQhqQgA3AwAgBEIANwPgAQJAIAVBA0kNAANAIAVBBXQiBUHBAE\ -8NCCAEQfAAaiAFIAEgByAEQeABakEgECwiBUEFdCIGQcEATw0JIAZBIU8NCiAEQfAAaiAEQeABaiAG\ -EJABGiAFQQJLDQALCyAEQThqIBcpAwA3AwAgBEEwaiAYKQMANwMAIARBKGogGSkDADcDACAUIBopAw\ -A3AwAgBEEYaiIHIBspAwA3AwAgBEEQaiIXIBwpAwA3AwAgBEEIaiIYIB0pAwA3AwAgBCAEKQNwNwMA\ -IAEgASkDgAEQIiABKALwDiIGQTdPDQkgFiAGQQV0aiIFIAQpAwA3AAAgBUEYaiAHKQMANwAAIAVBEG\ -ogFykDADcAACAFQQhqIBgpAwA3AAAgASAGQQFqNgLwDiABIAEpA4ABID1CAYh8ECIgASgC8A4iBkE3\ -Tw0KIBYgBkEFdGoiBSAUKQAANwAAIAVBGGogFEEYaikAADcAACAFQRBqIBRBEGopAAA3AAAgBUEIai\ -AUQQhqKQAANwAAIAEgBkEBajYC8A4MAQsgBEHwAGpBCGpCADcDACAEQfAAakEQakIANwMAIARB8ABq\ -QRhqQgA3AwAgBEHwAGpBIGpCADcDACAEQfAAakEoakIANwMAIARB8ABqQTBqQgA3AwAgBEHwAGpBOG\ -pCADcDACAMIAEpAwA3AwAgDEEIaiIGIAFBCGopAwA3AwAgDEEQaiIHIAFBEGopAwA3AwAgDEEYaiIX\ -IAFBGGopAwA3AwAgBEIANwNwIARBADsB2AEgBCA+NwPQASAEIAEtAIoBOgDaASAEQfAAaiACIAAQLy\ -EFIBUgDCkDADcDACAVQQhqIAYpAwA3AwAgFUEQaiAHKQMANwMAIBVBGGogFykDADcDACAEQQhqIAVB\ -CGopAwA3AwAgBEEQaiAFQRBqKQMANwMAIARBGGogBUEYaikDADcDACAUIAVBIGopAwA3AwAgBEEoai\ -AFQShqKQMANwMAIARBMGogBUEwaikDADcDACAEQThqIAVBOGopAwA3AwAgBCAFKQMANwMAIAQtANoB\ -IQUgBC0A2QEhGCAEKQPQASE+IAQgBC0A2AEiGToAaCAEID43A2AgBCAFIBhFckECciIFOgBpIARB4A\ -FqQRhqIhggFykCADcDACAEQeABakEQaiIXIAcpAgA3AwAgBEHgAWpBCGoiByAGKQIANwMAIAQgDCkC\ -ADcD4AEgBEHgAWogBCAZID4gBRAXIA0tAAAhGSAOLQAAIRogDy0AACEbIBAtAAAhHCARLQAAIR0gEi\ -0AACEeIBgtAAAhGCATLQAAIR8gMy0AACEgIDQtAAAhISA1LQAAISIgNi0AACEjIDctAAAhJCAXLQAA\ -IRcgOC0AACElIDktAAAhJiA6LQAAIScgOy0AACEoIARB4AFqQQpqLQAAISkgPC0AACEqIActAAAhBy\ -AELQD8ASErIAQtAPQBISwgBC0A7AEhLSAELQDnASEuIAQtAOYBIS8gBC0A5QEhMCAELQDkASExIAQt\ -AOMBITIgBC0A4gEhCSAELQDhASEKIAQtAOABIQsgASABKQOAARAiIAEoAvAOIgZBN08NCiAWIAZBBX\ -RqIgUgCToAAiAFIAo6AAEgBSALOgAAIAVBA2ogMjoAACAFICs6ABwgBSAYOgAYIAUgLDoAFCAFIBc6\ -ABAgBSAtOgAMIAUgBzoACCAFIDE6AAQgBUEfaiAZOgAAIAVBHmogGjoAACAFQR1qIBs6AAAgBUEbai\ -AcOgAAIAVBGmogHToAACAFQRlqIB46AAAgBUEXaiAfOgAAIAVBFmogIDoAACAFQRVqICE6AAAgBUET\ -aiAiOgAAIAVBEmogIzoAACAFQRFqICQ6AAAgBUEPaiAlOgAAIAVBDmogJjoAACAFQQ1qICc6AAAgBU\ -ELaiAoOgAAIAVBCmogKToAACAFQQlqICo6AAAgBUEHaiAuOgAAIAVBBmogLzoAACAFQQVqIDA6AAAg\ -ASAGQQFqNgLwDgsgASABKQOAASA9fCI+NwOAASADIABJDQIgAiAAaiECIAMgAGsiA0GACEsNAAsLIA\ -NFDRYgCCACIAMQLxogASABQYABaikDABAiDBYLIAAgA0HkhcAAEGEACyAAIANB1IXAABBgAAsgBUHA\ -AEH0hMAAEGAACyAGQcAAQYSFwAAQYAALIAZBIEGUhcAAEGAACyAEQfAAakEYaiAEQRhqKQMANwMAIA\ -RB8ABqQRBqIARBEGopAwA3AwAgBEHwAGpBCGogBEEIaikDADcDACAEIAQpAwA3A3BBjJLAACAEQfAA\ -akHshsAAQcSFwAAQXwALIARB8ABqQRhqIBRBGGopAAA3AwAgBEHwAGpBEGogFEEQaikAADcDACAEQf\ -AAakEIaiAUQQhqKQAANwMAIAQgFCkAADcDcEGMksAAIARB8ABqQeyGwABBxIXAABBfAAsgBEH9AWog\ -GzoAACAEQfkBaiAeOgAAIARB9QFqICE6AAAgBEHxAWogJDoAACAEQe0BaiAnOgAAIARB6QFqICo6AA\ -AgBEHlAWogMDoAACAEQf4BaiAaOgAAIARB+gFqIB06AAAgBEH2AWogIDoAACAEQfIBaiAjOgAAIARB\ -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\ -/gNxQQh0ciAcQQh2QYD+A3EgHEEYdnJyIh0gCXMgEXMgASgAHCIcQRh0IBxBgP4DcUEIdHIgHEEIdk\ -GA/gNxIBxBGHZyciIeIAxzIAtzIBUgD3MgHXMgASgAPCIcQRh0IBxBgP4DcUEIdHIgHEEIdkGA/gNx\ -IBxBGHZyciIcc0EBdyIfc0EBdyIgc0EBdyIhc0EBdyIic0EBdyIjc0EBdyIkc0EBdyIlIBkgH3MgFi\ -AdcyAfcyAYIB5zIBxzIBlzQQF3IiZzQQF3IidzIBQgHHMgJnMgG3NBAXciKHNBAXciKXMgGyAncyAp\ -cyAaICZzIChzICVzQQF3IipzQQF3IitzICQgKHMgKnMgIyAbcyAlcyAiIBpzICRzICEgE3MgI3MgIC\ -AScyAicyAfIBFzICFzIBwgC3MgIHMgJ3NBAXciLHNBAXciLXNBAXciLnNBAXciL3NBAXciMHNBAXci\ -MXNBAXciMnNBAXciMyApIC1zICcgIXMgLXMgJiAgcyAscyApc0EBdyI0c0EBdyI1cyAoICxzIDRzIC\ -tzQQF3IjZzQQF3IjdzICsgNXMgN3MgKiA0cyA2cyAzc0EBdyI4c0EBdyI5cyAyIDZzIDhzIDEgK3Mg\ -M3MgMCAqcyAycyAvICVzIDFzIC4gJHMgMHMgLSAjcyAvcyAsICJzIC5zIDVzQQF3IjpzQQF3IjtzQQ\ -F3IjxzQQF3Ij1zQQF3Ij5zQQF3Ij9zQQF3IkBzQQF3IkEgNyA7cyA1IC9zIDtzIDQgLnMgOnMgN3NB\ -AXciQnNBAXciQ3MgNiA6cyBCcyA5c0EBdyJEc0EBdyJFcyA5IENzIEVzIDggQnMgRHMgQXNBAXciRn\ -NBAXciR3MgQCBEcyBGcyA/IDlzIEFzID4gOHMgQHMgPSAzcyA/cyA8IDJzID5zIDsgMXMgPXMgOiAw\ -cyA8cyBDc0EBdyJIc0EBdyJJc0EBdyJKc0EBdyJLc0EBdyJMc0EBdyJNc0EBdyJOc0EBdyBEIEhzIE\ -IgPHMgSHMgRXNBAXciT3MgR3NBAXciUCBDID1zIElzIE9zQQF3IlEgSiA/IDggNyA6IC8gJCAbICYg\ -HyALIAkgBkEedyJSIA1qIAUgUiACcyAHcSACc2ogF2ogB0EFdyAEaiAFIAJzIAZxIAVzaiAQakGZ84\ -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\ -4gMnNBEHciLiAwIDFqIjBqIjEgKnNBFHciMmoiOCAuc0EYdyIuc0EQdyIqIDMgCWogMCArc0EZdyIr\ -aiIwIAdqIDAgLXNBEHciLSA3aiIwICtzQRR3IjNqIjQgLXNBGHciKyAwaiIwaiItIC9zQRR3Ii9qIj\ -cgKnNBGHciKiAlczYCNCADIDggJGogPCA5c0EYdyI4IDVqIjUgNnNBGXciNmoiOSAMaiA5ICtzQRB3\ -IisgLGoiLCA2c0EUdyI2aiI5ICtzQRh3IisgH3M2AjAgAyArICxqIiwgDXM2AiwgAyAqIC1qIi0gHn\ -M2AiAgAyAsIDogEWogMCAzc0EZdyIwaiIzIBJqIDMgOHNBEHciMyAuIDFqIi5qIjEgMHNBFHciMGoi\ -OHM2AgwgAyAtIDQgE2ogLiAyc0EZdyIuaiIyIApqIDIgO3NBEHciMiA1aiI0IC5zQRR3IjVqIjpzNg\ -IAIAMgOCAzc0EYdyIuIAZzNgI4IAMgLCA2c0EZdyAuczYCGCADIDogMnNBGHciLCAPczYCPCADIC4g\ -MWoiLiAjczYCJCADIC0gL3NBGXcgLHM2AhwgAyAuIDlzNgIEIAMgLCA0aiIsIARzNgIoIAMgLCA3cz\ -YCCCADIC4gMHNBGXcgK3M2AhAgAyAsIDVzQRl3ICpzNgIUIClB/wFxIipBwABLDQIgASADICpqIAJB\ -wAAgKmsiKiACICpJGyIqEJABISsgACApICpqIik6AHAgAiAqayECAkAgKUH/AXFBwABHDQBBACEpIA\ -BBADoAcCAAID1CAXwiPTcDYAsgKyAqaiEBIAINAAsLIANBwABqJAAPCyAqQcAAQZSGwAAQYQALiRsB\ -IH8gACAAKAIEIAEoAAgiBWogACgCFCIGaiIHIAEoAAwiCGogByADQiCIp3NBEHciCUGF3Z7be2oiCi\ -AGc0EUdyILaiIMIAEoACgiBmogACgCCCABKAAQIgdqIAAoAhgiDWoiDiABKAAUIg9qIA4gAkH/AXFz\ -QRB3IgJB8ua74wNqIg4gDXNBFHciDWoiECACc0EYdyIRIA5qIhIgDXNBGXciE2oiFCABKAAsIgJqIB\ -QgACgCACABKAAAIg1qIAAoAhAiFWoiFiABKAAEIg5qIBYgA6dzQRB3IhZB58yn0AZqIhcgFXNBFHci\ -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\ -BqIhYgFWogFiARc0EQdyIRIBxqIhYgEHNBFHciEGoiGyARc0EYdyIRIBZqIhZqIhwgHXNBFHciHWoi\ -ICAFaiAZIA5qICMgIXNBGHciBSAeaiIOIBNzQRl3IhNqIhkgCWogGSARc0EQdyIJIBJqIhEgE3NBFH\ -ciEmoiEyAJc0EYdyIJIBFqIhEgEnNBGXciEmoiGSAKaiAZIB8gAmogFiAQc0EZdyICaiIKIAFqIAog\ -BXNBEHciASAPIBhqIgVqIg8gAnNBFHciAmoiCiABc0EYdyIBc0EQdyIQIBsgBGogBSANc0EZdyIFai\ -INIBRqIA0gF3NBEHciDSAOaiIOIAVzQRR3IgVqIhQgDXNBGHciDSAOaiIOaiIEIBJzQRR3IhJqIhYg\ -EHNBGHciECAEaiIEIBQgFWogASAPaiIBIAJzQRl3Ig9qIgIgC2ogAiAJc0EQdyICICAgGnNBGHciFC\ -AcaiIVaiIJIA9zQRR3Ig9qIgtzNgIMIAAgBiAKIAxqIBUgHXNBGXciFWoiCmogCiANc0EQdyIGIBFq\ -Ig0gFXNBFHciFWoiCiAGc0EYdyIGIA1qIg0gByATIAhqIA4gBXNBGXciBWoiCGogCCAUc0EQdyIIIA\ -FqIgEgBXNBFHciBWoiB3M2AgggACALIAJzQRh3IgIgCWoiDiAWczYCBCAAIAcgCHNBGHciCCABaiIB\ -IApzNgIAIAAgASAFc0EZdyAGczYCHCAAIAQgEnNBGXcgAnM2AhggACANIBVzQRl3IAhzNgIUIAAgDi\ -APc0EZdyAQczYCEAuIIwILfwN+IwBBwBxrIgEkAAJAAkACQAJAIABFDQAgACgCACICQX9GDQEgACAC\ -QQFqNgIAIABBCGooAgAhAgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQA\ -JAAkACQAJAAkACQAJAIABBBGooAgAiAw4bAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaAAtBAC0A\ -gNhAGkHQARAZIgRFDR0gAikDQCEMIAFByABqIAJByABqEGcgAUEIaiACQQhqKQMANwMAIAFBEGogAk\ -EQaikDADcDACABQRhqIAJBGGopAwA3AwAgAUEgaiACQSBqKQMANwMAIAFBKGogAkEoaikDADcDACAB\ -QTBqIAJBMGopAwA3AwAgAUE4aiACQThqKQMANwMAIAFByAFqIAJByAFqLQAAOgAAIAEgDDcDQCABIA\ -IpAwA3AwAgBCABQdABEJABGgwaC0EALQCA2EAaQdABEBkiBEUNHCACKQNAIQwgAUHIAGogAkHIAGoQ\ -ZyABQQhqIAJBCGopAwA3AwAgAUEQaiACQRBqKQMANwMAIAFBGGogAkEYaikDADcDACABQSBqIAJBIG\ -opAwA3AwAgAUEoaiACQShqKQMANwMAIAFBMGogAkEwaikDADcDACABQThqIAJBOGopAwA3AwAgAUHI\ -AWogAkHIAWotAAA6AAAgASAMNwNAIAEgAikDADcDACAEIAFB0AEQkAEaDBkLQQAtAIDYQBpB0AEQGS\ -IERQ0bIAIpA0AhDCABQcgAaiACQcgAahBnIAFBCGogAkEIaikDADcDACABQRBqIAJBEGopAwA3AwAg\ -AUEYaiACQRhqKQMANwMAIAFBIGogAkEgaikDADcDACABQShqIAJBKGopAwA3AwAgAUEwaiACQTBqKQ\ -MANwMAIAFBOGogAkE4aikDADcDACABQcgBaiACQcgBai0AADoAACABIAw3A0AgASACKQMANwMAIAQg\ -AUHQARCQARoMGAtBAC0AgNhAGkHQARAZIgRFDRogAikDQCEMIAFByABqIAJByABqEGcgAUEIaiACQQ\ -hqKQMANwMAIAFBEGogAkEQaikDADcDACABQRhqIAJBGGopAwA3AwAgAUEgaiACQSBqKQMANwMAIAFB\ -KGogAkEoaikDADcDACABQTBqIAJBMGopAwA3AwAgAUE4aiACQThqKQMANwMAIAFByAFqIAJByAFqLQ\ -AAOgAAIAEgDDcDQCABIAIpAwA3AwAgBCABQdABEJABGgwXC0EALQCA2EAaQdABEBkiBEUNGSACKQNA\ -IQwgAUHIAGogAkHIAGoQZyABQQhqIAJBCGopAwA3AwAgAUEQaiACQRBqKQMANwMAIAFBGGogAkEYai\ -kDADcDACABQSBqIAJBIGopAwA3AwAgAUEoaiACQShqKQMANwMAIAFBMGogAkEwaikDADcDACABQThq\ -IAJBOGopAwA3AwAgAUHIAWogAkHIAWotAAA6AAAgASAMNwNAIAEgAikDADcDACAEIAFB0AEQkAEaDB\ -YLQQAtAIDYQBpB0AEQGSIERQ0YIAIpA0AhDCABQcgAaiACQcgAahBnIAFBCGogAkEIaikDADcDACAB\ -QRBqIAJBEGopAwA3AwAgAUEYaiACQRhqKQMANwMAIAFBIGogAkEgaikDADcDACABQShqIAJBKGopAw\ -A3AwAgAUEwaiACQTBqKQMANwMAIAFBOGogAkE4aikDADcDACABQcgBaiACQcgBai0AADoAACABIAw3\ -A0AgASACKQMANwMAIAQgAUHQARCQARoMFQtBAC0AgNhAGkHwABAZIgRFDRcgAikDICEMIAFBKGogAk\ -EoahBVIAFBCGogAkEIaikDADcDACABQRBqIAJBEGopAwA3AwAgAUEYaiACQRhqKQMANwMAIAFB6ABq\ -IAJB6ABqLQAAOgAAIAEgDDcDICABIAIpAwA3AwAgBCABQfAAEJABGgwUC0EAIQVBAC0AgNhAGkH4Dh\ -AZIgRFDRYgAUH4DWpB2ABqIAJB+ABqKQMANwMAIAFB+A1qQdAAaiACQfAAaikDADcDACABQfgNakHI\ -AGogAkHoAGopAwA3AwAgAUH4DWpBCGogAkEoaikDADcDACABQfgNakEQaiACQTBqKQMANwMAIAFB+A\ -1qQRhqIAJBOGopAwA3AwAgAUH4DWpBIGogAkHAAGopAwA3AwAgAUH4DWpBKGogAkHIAGopAwA3AwAg\ -AUH4DWpBMGogAkHQAGopAwA3AwAgAUH4DWpBOGogAkHYAGopAwA3AwAgASACQeAAaikDADcDuA4gAS\ -ACKQMgNwP4DSACQYABaikDACEMIAJBigFqLQAAIQYgAkGJAWotAAAhByACQYgBai0AACEIAkAgAkHw\ -DmooAgAiCUUNACACQZABaiIKIAlBBXRqIQtBASEFIAFB2A5qIQkDQCAJIAopAAA3AAAgCUEYaiAKQR\ -hqKQAANwAAIAlBEGogCkEQaikAADcAACAJQQhqIApBCGopAAA3AAAgCkEgaiIKIAtGDQEgBUE3Rg0Z\ -IAlBIGogCikAADcAACAJQThqIApBGGopAAA3AAAgCUEwaiAKQRBqKQAANwAAIAlBKGogCkEIaikAAD\ -cAACAJQcAAaiEJIAVBAmohBSAKQSBqIgogC0cNAAsgBUF/aiEFCyABIAU2ArgcIAFBBWogAUHYDmpB\ -5A0QkAEaIAFB2A5qQQhqIAJBCGopAwA3AwAgAUHYDmpBEGogAkEQaikDADcDACABQdgOakEYaiACQR\ -hqKQMANwMAIAEgAikDADcD2A4gAUHYDmpBIGogAUH4DWpB4AAQkAEaIAQgAUHYDmpBgAEQkAEiAiAG\ -OgCKASACIAc6AIkBIAIgCDoAiAEgAiAMNwOAASACQYsBaiABQekNEJABGgwTC0EALQCA2EAaQegCEB\ -kiBEUNFSACKALIASEJIAFB0AFqIAJB0AFqEGggAkHgAmotAAAhCiABIAJByAEQkAEiAkHgAmogCjoA\ -ACACIAk2AsgBIAQgAkHoAhCQARoMEgtBAC0AgNhAGkHgAhAZIgRFDRQgAigCyAEhCSABQdABaiACQd\ -ABahBpIAJB2AJqLQAAIQogASACQcgBEJABIgJB2AJqIAo6AAAgAiAJNgLIASAEIAJB4AIQkAEaDBEL\ -QQAtAIDYQBpBwAIQGSIERQ0TIAIoAsgBIQkgAUHQAWogAkHQAWoQaiACQbgCai0AACEKIAEgAkHIAR\ -CQASICQbgCaiAKOgAAIAIgCTYCyAEgBCACQcACEJABGgwQC0EALQCA2EAaQaACEBkiBEUNEiACKALI\ -ASEJIAFB0AFqIAJB0AFqEGsgAkGYAmotAAAhCiABIAJByAEQkAEiAkGYAmogCjoAACACIAk2AsgBIA\ -QgAkGgAhCQARoMDwtBAC0AgNhAGkHgABAZIgRFDREgAikDECEMIAIpAwAhDSACKQMIIQ4gAUEYaiAC\ -QRhqEFUgAUHYAGogAkHYAGotAAA6AAAgASAONwMIIAEgDTcDACABIAw3AxAgBCABQeAAEJABGgwOC0\ -EALQCA2EAaQeAAEBkiBEUNECACKQMQIQwgAikDACENIAIpAwghDiABQRhqIAJBGGoQVSABQdgAaiAC\ -QdgAai0AADoAACABIA43AwggASANNwMAIAEgDDcDECAEIAFB4AAQkAEaDA0LQQAtAIDYQBpB6AAQGS\ -IERQ0PIAFBGGogAkEYaigCADYCACABQRBqIAJBEGopAwA3AwAgASACKQMINwMIIAIpAwAhDCABQSBq\ -IAJBIGoQVSABQeAAaiACQeAAai0AADoAACABIAw3AwAgBCABQegAEJABGgwMC0EALQCA2EAaQegAEB\ -kiBEUNDiABQRhqIAJBGGooAgA2AgAgAUEQaiACQRBqKQMANwMAIAEgAikDCDcDCCACKQMAIQwgAUEg\ -aiACQSBqEFUgAUHgAGogAkHgAGotAAA6AAAgASAMNwMAIAQgAUHoABCQARoMCwtBAC0AgNhAGkHoAh\ -AZIgRFDQ0gAigCyAEhCSABQdABaiACQdABahBoIAJB4AJqLQAAIQogASACQcgBEJABIgJB4AJqIAo6\ -AAAgAiAJNgLIASAEIAJB6AIQkAEaDAoLQQAtAIDYQBpB4AIQGSIERQ0MIAIoAsgBIQkgAUHQAWogAk\ -HQAWoQaSACQdgCai0AACEKIAEgAkHIARCQASICQdgCaiAKOgAAIAIgCTYCyAEgBCACQeACEJABGgwJ\ -C0EALQCA2EAaQcACEBkiBEUNCyACKALIASEJIAFB0AFqIAJB0AFqEGogAkG4AmotAAAhCiABIAJByA\ -EQkAEiAkG4AmogCjoAACACIAk2AsgBIAQgAkHAAhCQARoMCAtBAC0AgNhAGkGgAhAZIgRFDQogAigC\ -yAEhCSABQdABaiACQdABahBrIAJBmAJqLQAAIQogASACQcgBEJABIgJBmAJqIAo6AAAgAiAJNgLIAS\ -AEIAJBoAIQkAEaDAcLQQAtAIDYQBpB8AAQGSIERQ0JIAIpAyAhDCABQShqIAJBKGoQVSABQQhqIAJB\ -CGopAwA3AwAgAUEQaiACQRBqKQMANwMAIAFBGGogAkEYaikDADcDACABQegAaiACQegAai0AADoAAC\ -ABIAw3AyAgASACKQMANwMAIAQgAUHwABCQARoMBgtBAC0AgNhAGkHwABAZIgRFDQggAikDICEMIAFB\ -KGogAkEoahBVIAFBCGogAkEIaikDADcDACABQRBqIAJBEGopAwA3AwAgAUEYaiACQRhqKQMANwMAIA\ -FB6ABqIAJB6ABqLQAAOgAAIAEgDDcDICABIAIpAwA3AwAgBCABQfAAEJABGgwFC0EALQCA2EAaQdgB\ -EBkiBEUNByACQcgAaikDACEMIAIpA0AhDSABQdAAaiACQdAAahBnIAFByABqIAw3AwAgAUEIaiACQQ\ -hqKQMANwMAIAFBEGogAkEQaikDADcDACABQRhqIAJBGGopAwA3AwAgAUEgaiACQSBqKQMANwMAIAFB\ -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\ -ACQEEAKALA10AiACACSw0AQQAhASACQa+ABGoiBUEQdkAAIgBBf0YiBw0JIABBEHQiBkUNCUEAQQAo\ -AszXQEEAIAVBgIB8cSAHGyIIaiIANgLM10BBAEEAKALQ10AiASAAIAEgAEsbNgLQ10ACQAJAAkBBAC\ -gCyNdAIgFFDQBBnNXAACEAA0AgACgCACIFIAAoAgQiB2ogBkYNAiAAKAIIIgANAAwDCwsCQAJAQQAo\ -AtjXQCIARQ0AIAAgBk0NAQtBACAGNgLY10ALQQBB/x82AtzXQEEAIAg2AqDVQEEAIAY2ApzVQEEAQa\ -zVwAA2ArjVQEEAQbTVwAA2AsDVQEEAQazVwAA2ArTVQEEAQbzVwAA2AsjVQEEAQbTVwAA2ArzVQEEA\ -QcTVwAA2AtDVQEEAQbzVwAA2AsTVQEEAQczVwAA2AtjVQEEAQcTVwAA2AszVQEEAQdTVwAA2AuDVQE\ -EAQczVwAA2AtTVQEEAQdzVwAA2AujVQEEAQdTVwAA2AtzVQEEAQeTVwAA2AvDVQEEAQdzVwAA2AuTV\ -QEEAQQA2AqjVQEEAQezVwAA2AvjVQEEAQeTVwAA2AuzVQEEAQezVwAA2AvTVQEEAQfTVwAA2AoDWQE\ -EAQfTVwAA2AvzVQEEAQfzVwAA2AojWQEEAQfzVwAA2AoTWQEEAQYTWwAA2ApDWQEEAQYTWwAA2AozW\ -QEEAQYzWwAA2ApjWQEEAQYzWwAA2ApTWQEEAQZTWwAA2AqDWQEEAQZTWwAA2ApzWQEEAQZzWwAA2Aq\ -jWQEEAQZzWwAA2AqTWQEEAQaTWwAA2ArDWQEEAQaTWwAA2AqzWQEEAQazWwAA2ArjWQEEAQbTWwAA2\ -AsDWQEEAQazWwAA2ArTWQEEAQbzWwAA2AsjWQEEAQbTWwAA2ArzWQEEAQcTWwAA2AtDWQEEAQbzWwA\ -A2AsTWQEEAQczWwAA2AtjWQEEAQcTWwAA2AszWQEEAQdTWwAA2AuDWQEEAQczWwAA2AtTWQEEAQdzW\ -wAA2AujWQEEAQdTWwAA2AtzWQEEAQeTWwAA2AvDWQEEAQdzWwAA2AuTWQEEAQezWwAA2AvjWQEEAQe\ -TWwAA2AuzWQEEAQfTWwAA2AoDXQEEAQezWwAA2AvTWQEEAQfzWwAA2AojXQEEAQfTWwAA2AvzWQEEA\ -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\ -+JuRo7Pw2wA3AzggAULr+obav7X2wR83AzAgAUKf2PnZwpHagpt/NwMoIAFC0YWa7/rPlIfRADcDIC\ -ABQvHt9Pilp/2npX83AxggAUKr8NP0r+68tzw3AxAgAUK7zqqm2NDrs7t/NwMIIAFCyJL3lf/M+YTq\ -ADcDACABQcAAakEAQYkBEI4BGgsgACACNgIEIABBCGogATYCAEEAIQELIAAgATYCACADQdAPaiQADw\ -sAC/AQARl/IAAoAgAiAyADKQMQIAKtfDcDEAJAIAJFDQAgASACQQZ0aiEEIAMoAgwhBSADKAIIIQYg\ -AygCBCECIAMoAgAhBwNAIAMgASgAECIIIAEoACAiCSABKAAwIgogASgAACILIAEoACQiDCABKAA0Ig\ -0gASgABCIOIAEoABQiDyANIAwgDyAOIAogCSAIIAsgAiAGcSAFIAJBf3NxciAHampB+Miqu31qQQd3\ -IAJqIgBqIAUgDmogBiAAQX9zcWogACACcWpB1u6exn5qQQx3IABqIhAgAiABKAAMIhFqIAAgECAGIA\ -EoAAgiEmogAiAQQX9zcWogECAAcWpB2+GBoQJqQRF3aiITQX9zcWogEyAQcWpB7p33jXxqQRZ3IBNq\ -IgBBf3NxaiAAIBNxakGvn/Crf2pBB3cgAGoiFGogDyAQaiATIBRBf3NxaiAUIABxakGqjJ+8BGpBDH\ -cgFGoiECABKAAcIhUgAGogFCAQIAEoABgiFiATaiAAIBBBf3NxaiAQIBRxakGTjMHBempBEXdqIgBB\ -f3NxaiAAIBBxakGBqppqakEWdyAAaiITQX9zcWogEyAAcWpB2LGCzAZqQQd3IBNqIhRqIAwgEGogAC\ -AUQX9zcWogFCATcWpBr++T2nhqQQx3IBRqIhAgASgALCIXIBNqIBQgECABKAAoIhggAGogEyAQQX9z\ -cWogECAUcWpBsbd9akERd2oiAEF/c3FqIAAgEHFqQb6v88p4akEWdyAAaiITQX9zcWogEyAAcWpBoq\ -LA3AZqQQd3IBNqIhRqIAEoADgiGSAAaiATIA0gEGogACAUQX9zcWogFCATcWpBk+PhbGpBDHcgFGoi\ -AEF/cyIacWogACAUcWpBjofls3pqQRF3IABqIhAgGnFqIAEoADwiGiATaiAUIBBBf3MiG3FqIBAgAH\ -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\ -aikDADcDACAHQRhqIARBGGopAwA3AwAgB0EgaiAEQSBqKQMANwMAIAdBKGogBEEoaikDADcDACAHQT\ -BqIARBMGopAwA3AwAgB0E4aiAEQThqKQMANwMAIAcgBykDwAE3A0AgByAEKQMANwMAIActAOoBIQQg\ -By0A6QEhACAHKQPgASEDIAcgBy0A6AEiAToAaCAHIAM3A2AgByAEIABFckECciIEOgBpIAdB8AFqQR\ -hqIgAgDCkDADcDACAHQfABakEQaiICIAspAwA3AwAgB0HwAWpBCGoiCSAIKQMANwMAIAcgBykDwAE3\ -A/ABIAdB8AFqIAcgASADIAQQFyAKQQV0IgRBIGoiASAGSw0DIAdB8AFqQR9qLQAAIQEgB0HwAWpBHm\ -otAAAhBiAHQfABakEdai0AACEIIAdB8AFqQRtqLQAAIQsgB0HwAWpBGmotAAAhDCAHQfABakEZai0A\ -ACENIAAtAAAhACAHQfABakEXai0AACEOIAdB8AFqQRZqLQAAIQ8gB0HwAWpBFWotAAAhECAHQfABak\ -ETai0AACERIAdB8AFqQRJqLQAAIRIgB0HwAWpBEWotAAAhEyACLQAAIQIgB0HwAWpBD2otAAAhFCAH\ -QfABakEOai0AACEVIAdB8AFqQQ1qLQAAIRYgB0HwAWpBC2otAAAhFyAHQfABakEKai0AACEYIAdB8A\ -FqQQlqLQAAIRkgCS0AACEJIActAIQCIRogBy0A/AEhGyAHLQD3ASEcIActAPYBIR0gBy0A9QEhHiAH\ -LQD0ASEfIActAPMBISAgBy0A8gEhISAHLQDxASEiIActAPABISMgBSAEaiIEIActAIwCOgAcIAQgAD\ -oAGCAEIBo6ABQgBCACOgAQIAQgGzoADCAEIAk6AAggBCAfOgAEIAQgIjoAASAEICM6AAAgBEEeaiAG\ -OgAAIARBHWogCDoAACAEQRpqIAw6AAAgBEEZaiANOgAAIARBFmogDzoAACAEQRVqIBA6AAAgBEESai\ -ASOgAAIARBEWogEzoAACAEQQ5qIBU6AAAgBEENaiAWOgAAIARBCmogGDoAACAEQQlqIBk6AAAgBEEG\ -aiAdOgAAIARBBWogHjoAACAEICE6AAIgBEEfaiABOgAAIARBG2ogCzoAACAEQRdqIA46AAAgBEETai\ -AROgAAIARBD2ogFDoAACAEQQtqIBc6AAAgBEEHaiAcOgAAIARBA2ogIDoAACAKQQFqIQoMAQsgACAJ\ -IAIgAyAEIAdBAEGAARCOASIKQSBBwAAgCBsiCBAdIQsgACAJaiABIAlrIAIgCUEKdq0gA3wgBCAKIA\ -hqQYABIAhrEB0hAAJAIAtBAUcNACAGQT9NDQQgBSAKKQAANwAAIAVBOGogCkE4aikAADcAACAFQTBq\ -IApBMGopAAA3AAAgBUEoaiAKQShqKQAANwAAIAVBIGogCkEgaikAADcAACAFQRhqIApBGGopAAA3AA\ -AgBUEQaiAKQRBqKQAANwAAIAVBCGogCkEIaikAADcAAEECIQoMAQsgACALakEFdCIAQYEBTw0EIAog\ -ACACIAQgBSAGECwhCgsgB0GQAmokACAKDwsgByAAQYAIajYCAEGMksAAIAdB/IbAAEH0g8AAEF8ACy\ -ABIAZB5IPAABBgAAtBwAAgBkHUhMAAEGAACyAAQYABQeSEwAAQYAALrhQBBH8jAEHgAGsiAiQAAkAC\ -QCABRQ0AIAEoAgANASABQX82AgACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQA\ -JAAkACQAJAAkACQAJAAkACQCABKAIEDhsAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRoACyABQQhq\ -KAIAIgNCADcDQCADQvnC+JuRo7Pw2wA3AzggA0Lr+obav7X2wR83AzAgA0Kf2PnZwpHagpt/NwMoIA\ -NC0YWa7/rPlIfRADcDICADQvHt9Pilp/2npX83AxggA0Kr8NP0r+68tzw3AxAgA0K7zqqm2NDrs7t/\ -NwMIIANCyJL3lf/M+YTqADcDACADQcgBakEAOgAADBoLIAFBCGooAgAiA0IANwNAIANC+cL4m5Gjs/\ -DbADcDOCADQuv6htq/tfbBHzcDMCADQp/Y+dnCkdqCm383AyggA0LRhZrv+s+Uh9EANwMgIANC8e30\ -+KWn/aelfzcDGCADQqvw0/Sv7ry3PDcDECADQrvOqqbY0Ouzu383AwggA0KYkveV/8z5hOoANwMAIA\ -NByAFqQQA6AAAMGQsgAUEIaigCACIDQgA3A0AgA0L5wvibkaOz8NsANwM4IANC6/qG2r+19sEfNwMw\ -IANCn9j52cKR2oKbfzcDKCADQtGFmu/6z5SH0QA3AyAgA0Lx7fT4paf9p6V/NwMYIANCq/DT9K/uvL\ -c8NwMQIANCu86qptjQ67O7fzcDCCADQpyS95X/zPmE6gA3AwAgA0HIAWpBADoAAAwYCyABQQhqKAIA\ -IgNCADcDQCADQvnC+JuRo7Pw2wA3AzggA0Lr+obav7X2wR83AzAgA0Kf2PnZwpHagpt/NwMoIANC0Y\ -Wa7/rPlIfRADcDICADQvHt9Pilp/2npX83AxggA0Kr8NP0r+68tzw3AxAgA0K7zqqm2NDrs7t/NwMI\ -IANClJL3lf/M+YTqADcDACADQcgBakEAOgAADBcLIAFBCGooAgAiA0IANwNAIANC+cL4m5Gjs/DbAD\ -cDOCADQuv6htq/tfbBHzcDMCADQp/Y+dnCkdqCm383AyggA0LRhZrv+s+Uh9EANwMgIANC8e30+KWn\ -/aelfzcDGCADQqvw0/Sv7ry3PDcDECADQrvOqqbY0Ouzu383AwggA0KokveV/8z5hOoANwMAIANByA\ -FqQQA6AAAMFgsgAUEIaigCACIDQgA3A0AgA0L5wvibkaOz8NsANwM4IANC6/qG2r+19sEfNwMwIANC\ -n9j52cKR2oKbfzcDKCADQtGFmu/6z5SH0QA3AyAgA0Lx7fT4paf9p6V/NwMYIANCq/DT9K/uvLc8Nw\ -MQIANCu86qptjQ67O7fzcDCCADQriS95X/zPmE6gA3AwAgA0HIAWpBADoAAAwVCyABQQhqKAIAIgNC\ -ADcDICADQquzj/yRo7Pw2wA3AxggA0L/pLmIxZHagpt/NwMQIANC8ua746On/aelfzcDCCADQsfMo9\ -jW0Ouzu383AwAgA0HoAGpBADoAAAwUCyABQQhqKAIAIQMgAkEIakIANwMAIAJBEGpCADcDACACQRhq\ -QgA3AwAgAkEgakIANwMAIAJBKGpCADcDACACQTBqQgA3AwAgAkE4akIANwMAIAJByABqIANBCGopAw\ -A3AwAgAkHQAGogA0EQaikDADcDACACQdgAaiADQRhqKQMANwMAIAJCADcDACACIAMpAwA3A0AgA0GK\ -AWoiBC0AACEFIANBIGogAkHgABCQARogBCAFOgAAIANBiAFqQQA7AQAgA0GAAWpCADcDACADQfAOai\ -gCAEUNEyADQQA2AvAODBMLIAFBCGooAgBBAEHIARCOASIDQeACakEAOgAAIANBGDYCyAEMEgsgAUEI\ -aigCAEEAQcgBEI4BIgNB2AJqQQA6AAAgA0EYNgLIAQwRCyABQQhqKAIAQQBByAEQjgEiA0G4AmpBAD\ -oAACADQRg2AsgBDBALIAFBCGooAgBBAEHIARCOASIDQZgCakEAOgAAIANBGDYCyAEMDwsgAUEIaigC\ -ACIDQv6568XpjpWZEDcDCCADQoHGlLqW8ermbzcDACADQgA3AxAgA0HYAGpBADoAAAwOCyABQQhqKA\ -IAIgNC/rnrxemOlZkQNwMIIANCgcaUupbx6uZvNwMAIANCADcDECADQdgAakEAOgAADA0LIAFBCGoo\ -AgAiA0IANwMAIANBACkDoIxANwMIIANBEGpBACkDqIxANwMAIANBGGpBACgCsIxANgIAIANB4ABqQQ\ -A6AAAMDAsgAUEIaigCACIDQfDDy558NgIYIANC/rnrxemOlZkQNwMQIANCgcaUupbx6uZvNwMIIANC\ -ADcDACADQeAAakEAOgAADAsLIAFBCGooAgBBAEHIARCOASIDQeACakEAOgAAIANBGDYCyAEMCgsgAU\ -EIaigCAEEAQcgBEI4BIgNB2AJqQQA6AAAgA0EYNgLIAQwJCyABQQhqKAIAQQBByAEQjgEiA0G4AmpB\ -ADoAACADQRg2AsgBDAgLIAFBCGooAgBBAEHIARCOASIDQZgCakEAOgAAIANBGDYCyAEMBwsgAUEIai\ -gCACIDQQApA7iMQDcDACADQgA3AyAgA0EIakEAKQPAjEA3AwAgA0EQakEAKQPIjEA3AwAgA0EYakEA\ -KQPQjEA3AwAgA0HoAGpBADoAAAwGCyABQQhqKAIAIgNBACkD2IxANwMAIANCADcDICADQQhqQQApA+\ -CMQDcDACADQRBqQQApA+iMQDcDACADQRhqQQApA/CMQDcDACADQegAakEAOgAADAULIAFBCGooAgAi\ -A0IANwNAIANBACkD+IxANwMAIANByABqQgA3AwAgA0EIakEAKQOAjUA3AwAgA0EQakEAKQOIjUA3Aw\ -AgA0EYakEAKQOQjUA3AwAgA0EgakEAKQOYjUA3AwAgA0EoakEAKQOgjUA3AwAgA0EwakEAKQOojUA3\ -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\ -kDADcDACACQSBqQShqIAJBkAFqQShqKQMANwMAIAJBIGpBMGogAkGQAWpBMGopAwA3AwAgAkEgakE4\ -aiACQZABakE4aikDADcDACACIEY3AyAgAC0AigEhJyAHQRhqIABBGGoiKCkDADcDACAHQRBqIABBEG\ -oiKSkDADcDACAHQQhqIABBCGoiKikDADcDACAHIAApAwA3AwAgAkHAADoAiAEgAkIANwOAASACICdB\ -BHIiJzoAiQEgICAoKQIANwMAICIgKSkCADcDACAkICopAgA3AwAgAiAAKQIANwOQASACQZABaiACQS\ -BqQcAAQgAgJxAXIA0tAAAhJyAOLQAAISggDy0AACEpIBAtAAAhKiARLQAAISsgEi0AACEsICAtAAAh\ -ICATLQAAIS0gFC0AACEuIBUtAAAhLyAWLQAAITAgFy0AACExIBgtAAAhMiAiLQAAISIgGS0AACEzIB\ -otAAAhNCAbLQAAITUgHC0AACE2IB0tAAAhNyAeLQAAITggJC0AACEkIAItAKwBITkgAi0ApAEhOiAC\ -LQCcASE7IAItAJcBITwgAi0AlgEhPSACLQCVASE+IAItAJQBIT8gAi0AkwEhQCACLQCSASFBIAItAJ\ -EBIUIgAi0AkAEhQyAMRQ0DICYgQzoAACAmIEI6AAEgA0HuAGogKDoAACADQe0AaiApOgAAIANB7ABq\ -IDk6AAAgA0HqAGogKzoAACADQekAaiAsOgAAICEgIDoAACADQeYAaiAuOgAAIANB5QBqIC86AAAgA0\ -HkAGogOjoAACADQeIAaiAxOgAAIANB4QBqIDI6AAAgIyAiOgAAIANB3gBqIDQ6AAAgA0HdAGogNToA\ -ACADQdwAaiA7OgAAIANB2gBqIDc6AAAgA0HZAGogODoAACAlICQ6AAAgA0HWAGogPToAACADQdUAai\ -A+OgAAIANB1ABqID86AAAgJiBBOgACIANB7wBqICc6AAAgA0HrAGogKjoAACADQecAaiAtOgAAIANB\ -4wBqIDA6AAAgA0HfAGogMzoAACADQdsAaiA2OgAAIANB1wBqIDw6AAAgJkEDaiBAOgAAIAAgBjYC8A\ -4gBUFgaiEFIB8hBiAfIARPDQALCyACQdABaiQADwtBuJLAAEErQaSFwAAQcQALIAJBrQFqICk6AAAg\ -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\ -EMahAZIgFFDQAgAUF4aiECAkACQCAAQX9qIgQgAXENACACIQAMAQsgAUF8aiIFKAIAIgZBeHEgBCAB\ -akEAIABrcUF4aiIBQQAgACABIAJrQRBLG2oiACACayIBayEEAkAgBkEDcUUNACAAIAAoAgRBAXEgBH\ -JBAnI2AgQgACAEaiIEIAQoAgRBAXI2AgQgBSAFKAIAQQFxIAFyQQJyNgIAIAIgAWoiBCAEKAIEQQFy\ -NgIEIAIgARAkDAELIAIoAgAhAiAAIAQ2AgQgACACIAFqNgIACwJAIAAoAgQiAUEDcUUNACABQXhxIg\ -IgA0EQak0NACAAIAFBAXEgA3JBAnI2AgQgACADaiIBIAIgA2siA0EDcjYCBCAAIAJqIgIgAigCBEEB\ -cjYCBCABIAMQJAsgAEEIaiECCyACC7gDAQF/IAIgAi0AqAEiA2pBAEGoASADaxCOASEDIAJBADoAqA\ -EgA0EfOgAAIAIgAi0ApwFBgAFyOgCnASABIAEpAwAgAikAAIU3AwAgASABKQMIIAIpAAiFNwMIIAEg\ -ASkDECACKQAQhTcDECABIAEpAxggAikAGIU3AxggASABKQMgIAIpACCFNwMgIAEgASkDKCACKQAohT\ -cDKCABIAEpAzAgAikAMIU3AzAgASABKQM4IAIpADiFNwM4IAEgASkDQCACKQBAhTcDQCABIAEpA0gg\ -AikASIU3A0ggASABKQNQIAIpAFCFNwNQIAEgASkDWCACKQBYhTcDWCABIAEpA2AgAikAYIU3A2AgAS\ -ABKQNoIAIpAGiFNwNoIAEgASkDcCACKQBwhTcDcCABIAEpA3ggAikAeIU3A3ggASABKQOAASACKQCA\ -AYU3A4ABIAEgASkDiAEgAikAiAGFNwOIASABIAEpA5ABIAIpAJABhTcDkAEgASABKQOYASACKQCYAY\ -U3A5gBIAEgASkDoAEgAikAoAGFNwOgASABIAEoAsgBECUgACABQcgBEJABIAEoAsgBNgLIAQvtAgEE\ -fyMAQeABayIDJAACQAJAAkACQCACDQBBASEEDAELIAJBf0wNASACEBkiBEUNAiAEQXxqLQAAQQNxRQ\ -0AIARBACACEI4BGgsgA0EIaiABECEgA0GAAWpBCGpCADcDACADQYABakEQakIANwMAIANBgAFqQRhq\ -QgA3AwAgA0GAAWpBIGpCADcDACADQagBakIANwMAIANBsAFqQgA3AwAgA0G4AWpCADcDACADQcgBai\ -ABQQhqKQMANwMAIANB0AFqIAFBEGopAwA3AwAgA0HYAWogAUEYaikDADcDACADQgA3A4ABIAMgASkD\ -ADcDwAEgAUGKAWoiBS0AACEGIAFBIGogA0GAAWpB4AAQkAEaIAUgBjoAACABQYgBakEAOwEAIAFBgA\ -FqQgA3AwACQCABQfAOaigCAEUNACABQQA2AvAOCyADQQhqIAQgAhAWIAAgAjYCBCAAIAQ2AgAgA0Hg\ -AWokAA8LEHMACwALlwMBAX8CQCACRQ0AIAEgAkGoAWxqIQMgACgCACECA0AgAiACKQMAIAEpAACFNw\ -MAIAIgAikDCCABKQAIhTcDCCACIAIpAxAgASkAEIU3AxAgAiACKQMYIAEpABiFNwMYIAIgAikDICAB\ -KQAghTcDICACIAIpAyggASkAKIU3AyggAiACKQMwIAEpADCFNwMwIAIgAikDOCABKQA4hTcDOCACIA\ -IpA0AgASkAQIU3A0AgAiACKQNIIAEpAEiFNwNIIAIgAikDUCABKQBQhTcDUCACIAIpA1ggASkAWIU3\ -A1ggAiACKQNgIAEpAGCFNwNgIAIgAikDaCABKQBohTcDaCACIAIpA3AgASkAcIU3A3AgAiACKQN4IA\ -EpAHiFNwN4IAIgAikDgAEgASkAgAGFNwOAASACIAIpA4gBIAEpAIgBhTcDiAEgAiACKQOQASABKQCQ\ -AYU3A5ABIAIgAikDmAEgASkAmAGFNwOYASACIAIpA6ABIAEpAKABhTcDoAEgAiACKALIARAlIAFBqA\ -FqIgEgA0cNAAsLC5UDAgd/AX4jAEHgAGsiAiQAIAEgASkDICABQegAai0AACIDrXw3AyAgAUEoaiEE\ -AkAgA0HAAEYNACAEIANqQQBBwAAgA2sQjgEaCyABQQA6AGggASAEQX8QEyACQSBqQQhqIgMgAUEIai\ -IEKQIAIgk3AwAgAkEIaiIFIAk3AwAgAkEQaiIGIAEpAhA3AwAgAkEYaiIHIAFBGGoiCCkCADcDACAC\ -IAEpAgAiCTcDICACIAk3AwAgAUEAOgBoIAFCADcDICAIQquzj/yRo7Pw2wA3AwAgAUL/pLmIxZHagp\ -t/NwMQIARC8ua746On/aelfzcDACABQsfMo9jW0Ouzu383AwAgAkEgakEYaiIEIAcpAwA3AwAgAkEg\ -akEQaiIHIAYpAwA3AwAgAyAFKQMANwMAIAIgAikDADcDIEEALQCA2EAaAkBBIBAZIgENAAALIAEgAi\ -kDIDcAACABQRhqIAQpAwA3AAAgAUEQaiAHKQMANwAAIAFBCGogAykDADcAACAAQSA2AgQgACABNgIA\ -IAJB4ABqJAALkwMBAX8gASABLQCQASIDakEAQZABIANrEI4BIQMgAUEAOgCQASADQQE6AAAgASABLQ\ -CPAUGAAXI6AI8BIAAgACkDACABKQAAhTcDACAAIAApAwggASkACIU3AwggACAAKQMQIAEpABCFNwMQ\ -IAAgACkDGCABKQAYhTcDGCAAIAApAyAgASkAIIU3AyAgACAAKQMoIAEpACiFNwMoIAAgACkDMCABKQ\ -AwhTcDMCAAIAApAzggASkAOIU3AzggACAAKQNAIAEpAECFNwNAIAAgACkDSCABKQBIhTcDSCAAIAAp\ -A1AgASkAUIU3A1AgACAAKQNYIAEpAFiFNwNYIAAgACkDYCABKQBghTcDYCAAIAApA2ggASkAaIU3A2\ -ggACAAKQNwIAEpAHCFNwNwIAAgACkDeCABKQB4hTcDeCAAIAApA4ABIAEpAIABhTcDgAEgACAAKQOI\ -ASABKQCIAYU3A4gBIAAgACgCyAEQJSACIAApAwA3AAAgAiAAKQMINwAIIAIgACkDEDcAECACIAApAx\ -g+ABgLkwMBAX8gASABLQCQASIDakEAQZABIANrEI4BIQMgAUEAOgCQASADQQY6AAAgASABLQCPAUGA\ -AXI6AI8BIAAgACkDACABKQAAhTcDACAAIAApAwggASkACIU3AwggACAAKQMQIAEpABCFNwMQIAAgAC\ -kDGCABKQAYhTcDGCAAIAApAyAgASkAIIU3AyAgACAAKQMoIAEpACiFNwMoIAAgACkDMCABKQAwhTcD\ -MCAAIAApAzggASkAOIU3AzggACAAKQNAIAEpAECFNwNAIAAgACkDSCABKQBIhTcDSCAAIAApA1AgAS\ -kAUIU3A1AgACAAKQNYIAEpAFiFNwNYIAAgACkDYCABKQBghTcDYCAAIAApA2ggASkAaIU3A2ggACAA\ -KQNwIAEpAHCFNwNwIAAgACkDeCABKQB4hTcDeCAAIAApA4ABIAEpAIABhTcDgAEgACAAKQOIASABKQ\ -CIAYU3A4gBIAAgACgCyAEQJSACIAApAwA3AAAgAiAAKQMINwAIIAIgACkDEDcAECACIAApAxg+ABgL\ -wQIBCH8CQAJAIAJBEE8NACAAIQMMAQsgAEEAIABrQQNxIgRqIQUCQCAERQ0AIAAhAyABIQYDQCADIA\ -YtAAA6AAAgBkEBaiEGIANBAWoiAyAFSQ0ACwsgBSACIARrIgdBfHEiCGohAwJAAkAgASAEaiIJQQNx\ -RQ0AIAhBAUgNASAJQQN0IgZBGHEhAiAJQXxxIgpBBGohAUEAIAZrQRhxIQQgCigCACEGA0AgBSAGIA\ -J2IAEoAgAiBiAEdHI2AgAgAUEEaiEBIAVBBGoiBSADSQ0ADAILCyAIQQFIDQAgCSEBA0AgBSABKAIA\ -NgIAIAFBBGohASAFQQRqIgUgA0kNAAsLIAdBA3EhAiAJIAhqIQELAkAgAkUNACADIAJqIQUDQCADIA\ -EtAAA6AAAgAUEBaiEBIANBAWoiAyAFSQ0ACwsgAAuAAwEBfyABIAEtAIgBIgNqQQBBiAEgA2sQjgEh\ -AyABQQA6AIgBIANBBjoAACABIAEtAIcBQYABcjoAhwEgACAAKQMAIAEpAACFNwMAIAAgACkDCCABKQ\ -AIhTcDCCAAIAApAxAgASkAEIU3AxAgACAAKQMYIAEpABiFNwMYIAAgACkDICABKQAghTcDICAAIAAp\ -AyggASkAKIU3AyggACAAKQMwIAEpADCFNwMwIAAgACkDOCABKQA4hTcDOCAAIAApA0AgASkAQIU3A0\ -AgACAAKQNIIAEpAEiFNwNIIAAgACkDUCABKQBQhTcDUCAAIAApA1ggASkAWIU3A1ggACAAKQNgIAEp\ -AGCFNwNgIAAgACkDaCABKQBohTcDaCAAIAApA3AgASkAcIU3A3AgACAAKQN4IAEpAHiFNwN4IAAgAC\ -kDgAEgASkAgAGFNwOAASAAIAAoAsgBECUgAiAAKQMANwAAIAIgACkDCDcACCACIAApAxA3ABAgAiAA\ -KQMYNwAYC4ADAQF/IAEgAS0AiAEiA2pBAEGIASADaxCOASEDIAFBADoAiAEgA0EBOgAAIAEgAS0Ahw\ -FBgAFyOgCHASAAIAApAwAgASkAAIU3AwAgACAAKQMIIAEpAAiFNwMIIAAgACkDECABKQAQhTcDECAA\ -IAApAxggASkAGIU3AxggACAAKQMgIAEpACCFNwMgIAAgACkDKCABKQAohTcDKCAAIAApAzAgASkAMI\ -U3AzAgACAAKQM4IAEpADiFNwM4IAAgACkDQCABKQBAhTcDQCAAIAApA0ggASkASIU3A0ggACAAKQNQ\ -IAEpAFCFNwNQIAAgACkDWCABKQBYhTcDWCAAIAApA2AgASkAYIU3A2AgACAAKQNoIAEpAGiFNwNoIA\ -AgACkDcCABKQBwhTcDcCAAIAApA3ggASkAeIU3A3ggACAAKQOAASABKQCAAYU3A4ABIAAgACgCyAEQ\ -JSACIAApAwA3AAAgAiAAKQMINwAIIAIgACkDEDcAECACIAApAxg3ABgL7AIBAX8gAiACLQCIASIDak\ -EAQYgBIANrEI4BIQMgAkEAOgCIASADQR86AAAgAiACLQCHAUGAAXI6AIcBIAEgASkDACACKQAAhTcD\ -ACABIAEpAwggAikACIU3AwggASABKQMQIAIpABCFNwMQIAEgASkDGCACKQAYhTcDGCABIAEpAyAgAi\ -kAIIU3AyAgASABKQMoIAIpACiFNwMoIAEgASkDMCACKQAwhTcDMCABIAEpAzggAikAOIU3AzggASAB\ -KQNAIAIpAECFNwNAIAEgASkDSCACKQBIhTcDSCABIAEpA1AgAikAUIU3A1AgASABKQNYIAIpAFiFNw\ -NYIAEgASkDYCACKQBghTcDYCABIAEpA2ggAikAaIU3A2ggASABKQNwIAIpAHCFNwNwIAEgASkDeCAC\ -KQB4hTcDeCABIAEpA4ABIAIpAIABhTcDgAEgASABKALIARAlIAAgAUHIARCQASABKALIATYCyAEL3g\ -IBAX8CQCACRQ0AIAEgAkGQAWxqIQMgACgCACECA0AgAiACKQMAIAEpAACFNwMAIAIgAikDCCABKQAI\ -hTcDCCACIAIpAxAgASkAEIU3AxAgAiACKQMYIAEpABiFNwMYIAIgAikDICABKQAghTcDICACIAIpAy\ -ggASkAKIU3AyggAiACKQMwIAEpADCFNwMwIAIgAikDOCABKQA4hTcDOCACIAIpA0AgASkAQIU3A0Ag\ -AiACKQNIIAEpAEiFNwNIIAIgAikDUCABKQBQhTcDUCACIAIpA1ggASkAWIU3A1ggAiACKQNgIAEpAG\ -CFNwNgIAIgAikDaCABKQBohTcDaCACIAIpA3AgASkAcIU3A3AgAiACKQN4IAEpAHiFNwN4IAIgAikD\ -gAEgASkAgAGFNwOAASACIAIpA4gBIAEpAIgBhTcDiAEgAiACKALIARAlIAFBkAFqIgEgA0cNAAsLC7\ -oCAgN/An4jAEHgAGsiAyQAIAApAwAhBiABIAEtAEAiBGoiBUGAAToAACADQQhqQRBqIABBGGooAgA2\ -AgAgA0EIakEIaiAAQRBqKQIANwMAIAMgACkCCDcDCCAGQgmGIQYgBK1CA4YhBwJAIARBP3MiAEUNAC\ -AFQQFqQQAgABCOARoLIAYgB4QhBgJAAkAgBEE4c0EISQ0AIAEgBjcAOCADQQhqIAEQEgwBCyADQQhq\ -IAEQEiADQdAAakIANwMAIANByABqQgA3AwAgA0HAAGpCADcDACADQThqQgA3AwAgA0EwakIANwMAIA\ -NBKGpCADcDACADQgA3AyAgAyAGNwNYIANBCGogA0EgahASCyABQQA6AEAgAiADKAIINgAAIAIgAykC\ -DDcABCACIAMpAhQ3AAwgA0HgAGokAAvoAgIBfxV+AkAgAkUNACABIAJBqAFsaiEDA0AgACgCACICKQ\ -MAIQQgAikDCCEFIAIpAxAhBiACKQMYIQcgAikDICEIIAIpAyghCSACKQMwIQogAikDOCELIAIpA0Ah\ -DCACKQNIIQ0gAikDUCEOIAIpA1ghDyACKQNgIRAgAikDaCERIAIpA3AhEiACKQN4IRMgAikDgAEhFC\ -ACKQOIASEVIAIpA5ABIRYgAikDmAEhFyACKQOgASEYIAIgAigCyAEQJSABIBg3AKABIAEgFzcAmAEg\ -ASAWNwCQASABIBU3AIgBIAEgFDcAgAEgASATNwB4IAEgEjcAcCABIBE3AGggASAQNwBgIAEgDzcAWC\ -ABIA43AFAgASANNwBIIAEgDDcAQCABIAs3ADggASAKNwAwIAEgCTcAKCABIAg3ACAgASAHNwAYIAEg\ -BjcAECABIAU3AAggASAENwAAIAFBqAFqIgEgA0cNAAsLC74CAQV/IAAoAhghAQJAAkACQCAAKAIMIg\ -IgAEcNACAAQRRBECAAQRRqIgIoAgAiAxtqKAIAIgQNAUEAIQIMAgsgACgCCCIEIAI2AgwgAiAENgII\ -DAELIAIgAEEQaiADGyEDA0AgAyEFIAQiAkEUaiIEIAJBEGogBCgCACIEGyEDIAJBFEEQIAQbaigCAC\ -IEDQALIAVBADYCAAsCQCABRQ0AAkACQCAAKAIcQQJ0QZzUwABqIgQoAgAgAEYNACABQRBBFCABKAIQ\ -IABGG2ogAjYCACACDQEMAgsgBCACNgIAIAINAEEAQQAoArjXQEF+IAAoAhx3cTYCuNdADwsgAiABNg\ -IYAkAgACgCECIERQ0AIAIgBDYCECAEIAI2AhgLIABBFGooAgAiBEUNACACQRRqIAQ2AgAgBCACNgIY\ -DwsLwAICBX8CfiMAQfABayICJAAgAkEgaiABQfAAEJABGiACIAIpA0AgAkGIAWotAAAiA618NwNAIA\ -JByABqIQQCQCADQcAARg0AIAQgA2pBAEHAACADaxCOARoLIAJBADoAiAEgAkEgaiAEQX8QEyACQZAB\ -akEIaiACQSBqQQhqKQMAIgc3AwAgAkGQAWpBGGogAkEgakEYaikDACIINwMAIAJBGGoiBCAINwMAIA\ -JBEGoiBSACKQMwNwMAIAJBCGoiBiAHNwMAIAIgAikDICIHNwOwASACIAc3A5ABIAIgBzcDAEEALQCA\ -2EAaAkBBIBAZIgMNAAALIAMgAikDADcAACADQRhqIAQpAwA3AAAgA0EQaiAFKQMANwAAIANBCGogBi\ -kDADcAACABECAgAEEgNgIEIAAgAzYCACACQfABaiQAC7gCAQN/IwBBgAZrIgMkAAJAAkACQAJAAkAC\ -QCACDQBBASEEDAELIAJBf0wNASACEBkiBEUNAiAEQXxqLQAAQQNxRQ0AIARBACACEI4BGgsgA0GAA2\ -ogAUHQARCQARogA0HUBGogAUHQAWpBqQEQkAEaIAMgA0GAA2ogA0HUBGoQMSADQdABakEAQakBEI4B\ -GiADIAM2AtQEIAIgAkGoAW4iBUGoAWwiAUkNAiADQdQEaiAEIAUQPQJAIAIgAUYNACADQYADakEAQa\ -gBEI4BGiADQdQEaiADQYADakEBED0gAiABayIFQakBTw0EIAQgAWogA0GAA2ogBRCQARoLIAAgAjYC\ -BCAAIAQ2AgAgA0GABmokAA8LEHMACwALQfyLwABBI0Hci8AAEHEACyAFQagBQeyLwAAQYAALsgIBBH\ -9BHyECAkAgAUH///8HSw0AIAFBBiABQQh2ZyICa3ZBAXEgAkEBdGtBPmohAgsgAEIANwIQIAAgAjYC\ -HCACQQJ0QZzUwABqIQMCQAJAQQAoArjXQCIEQQEgAnQiBXENAEEAIAQgBXI2ArjXQCADIAA2AgAgAC\ -ADNgIYDAELAkACQAJAIAMoAgAiBCgCBEF4cSABRw0AIAQhAgwBCyABQQBBGSACQQF2a0EfcSACQR9G\ -G3QhAwNAIAQgA0EddkEEcWpBEGoiBSgCACICRQ0CIANBAXQhAyACIQQgAigCBEF4cSABRw0ACwsgAi\ -gCCCIDIAA2AgwgAiAANgIIIABBADYCGCAAIAI2AgwgACADNgIIDwsgBSAANgIAIAAgBDYCGAsgACAA\ -NgIMIAAgADYCCAvLAgEBfwJAIAJFDQAgASACQYgBbGohAyAAKAIAIQIDQCACIAIpAwAgASkAAIU3Aw\ -AgAiACKQMIIAEpAAiFNwMIIAIgAikDECABKQAQhTcDECACIAIpAxggASkAGIU3AxggAiACKQMgIAEp\ -ACCFNwMgIAIgAikDKCABKQAohTcDKCACIAIpAzAgASkAMIU3AzAgAiACKQM4IAEpADiFNwM4IAIgAi\ -kDQCABKQBAhTcDQCACIAIpA0ggASkASIU3A0ggAiACKQNQIAEpAFCFNwNQIAIgAikDWCABKQBYhTcD\ -WCACIAIpA2AgASkAYIU3A2AgAiACKQNoIAEpAGiFNwNoIAIgAikDcCABKQBwhTcDcCACIAIpA3ggAS\ -kAeIU3A3ggAiACKQOAASABKQCAAYU3A4ABIAIgAigCyAEQJSABQYgBaiIBIANHDQALCwvNAgEBfyAB\ -IAEtAGgiA2pBAEHoACADaxCOASEDIAFBADoAaCADQQE6AAAgASABLQBnQYABcjoAZyAAIAApAwAgAS\ -kAAIU3AwAgACAAKQMIIAEpAAiFNwMIIAAgACkDECABKQAQhTcDECAAIAApAxggASkAGIU3AxggACAA\ -KQMgIAEpACCFNwMgIAAgACkDKCABKQAohTcDKCAAIAApAzAgASkAMIU3AzAgACAAKQM4IAEpADiFNw\ -M4IAAgACkDQCABKQBAhTcDQCAAIAApA0ggASkASIU3A0ggACAAKQNQIAEpAFCFNwNQIAAgACkDWCAB\ -KQBYhTcDWCAAIAApA2AgASkAYIU3A2AgACAAKALIARAlIAIgACkDADcAACACIAApAwg3AAggAiAAKQ\ -MQNwAQIAIgACkDGDcAGCACIAApAyA3ACAgAiAAKQMoNwAoC80CAQF/IAEgAS0AaCIDakEAQegAIANr\ -EI4BIQMgAUEAOgBoIANBBjoAACABIAEtAGdBgAFyOgBnIAAgACkDACABKQAAhTcDACAAIAApAwggAS\ -kACIU3AwggACAAKQMQIAEpABCFNwMQIAAgACkDGCABKQAYhTcDGCAAIAApAyAgASkAIIU3AyAgACAA\ -KQMoIAEpACiFNwMoIAAgACkDMCABKQAwhTcDMCAAIAApAzggASkAOIU3AzggACAAKQNAIAEpAECFNw\ -NAIAAgACkDSCABKQBIhTcDSCAAIAApA1AgASkAUIU3A1AgACAAKQNYIAEpAFiFNwNYIAAgACkDYCAB\ -KQBghTcDYCAAIAAoAsgBECUgAiAAKQMANwAAIAIgACkDCDcACCACIAApAxA3ABAgAiAAKQMYNwAYIA\ -IgACkDIDcAICACIAApAyg3ACgLrwIBA38jAEGwBGsiAyQAAkACQAJAAkACQAJAIAINAEEBIQQMAQsg\ -AkF/TA0BIAIQGSIERQ0CIARBfGotAABBA3FFDQAgBEEAIAIQjgEaCyADIAEgAUHQAWoQMSABQQBByA\ -EQjgEiAUH4AmpBADoAACABQRg2AsgBIANB0AFqQQBBqQEQjgEaIAMgAzYChAMgAiACQagBbiIFQagB\ -bCIBSQ0CIANBhANqIAQgBRA9AkAgAiABRg0AIANBiANqQQBBqAEQjgEaIANBhANqIANBiANqQQEQPS\ -ACIAFrIgVBqQFPDQQgBCABaiADQYgDaiAFEJABGgsgACACNgIEIAAgBDYCACADQbAEaiQADwsQcwAL\ -AAtB/IvAAEEjQdyLwAAQcQALIAVBqAFB7IvAABBgAAutAgEFfyMAQcAAayICJAAgAkEgakEYaiIDQg\ -A3AwAgAkEgakEQaiIEQgA3AwAgAkEgakEIaiIFQgA3AwAgAkIANwMgIAEgAUEoaiACQSBqECkgAkEY\ -aiIGIAMpAwA3AwAgAkEQaiIDIAQpAwA3AwAgAkEIaiIEIAUpAwA3AwAgAiACKQMgNwMAIAFBGGpBAC\ -kD8IxANwMAIAFBEGpBACkD6IxANwMAIAFBCGpBACkD4IxANwMAIAFBACkD2IxANwMAIAFB6ABqQQA6\ -AAAgAUIANwMgQQAtAIDYQBoCQEEgEBkiAQ0AAAsgASACKQMANwAAIAFBGGogBikDADcAACABQRBqIA\ -MpAwA3AAAgAUEIaiAEKQMANwAAIABBIDYCBCAAIAE2AgAgAkHAAGokAAuNAgIDfwF+IwBB0ABrIgck\ -ACAFIAUtAEAiCGoiCUGAAToAACAHIAM2AgwgByACNgIIIAcgATYCBCAHIAA2AgAgBEIJhiEEIAitQg\ -OGIQoCQCAIQT9zIgNFDQAgCUEBakEAIAMQjgEaCyAKIASEIQQCQAJAIAhBOHNBCEkNACAFIAQ3ADgg\ -ByAFECMMAQsgByAFECMgB0HAAGpCADcDACAHQThqQgA3AwAgB0EwakIANwMAIAdBKGpCADcDACAHQS\ -BqQgA3AwAgB0EQakEIakIANwMAIAdCADcDECAHIAQ3A0ggByAHQRBqECMLIAVBADoAQCAGIAcpAwA3\ -AAAgBiAHKQMINwAIIAdB0ABqJAALjQICA38BfiMAQdAAayIHJAAgBSAFLQBAIghqIglBgAE6AAAgBy\ -ADNgIMIAcgAjYCCCAHIAE2AgQgByAANgIAIARCCYYhBCAIrUIDhiEKAkAgCEE/cyIDRQ0AIAlBAWpB\ -ACADEI4BGgsgCiAEhCEEAkACQCAIQThzQQhJDQAgBSAENwA4IAcgBRAcDAELIAcgBRAcIAdBwABqQg\ -A3AwAgB0E4akIANwMAIAdBMGpCADcDACAHQShqQgA3AwAgB0EgakIANwMAIAdBEGpBCGpCADcDACAH\ -QgA3AxAgByAENwNIIAcgB0EQahAcCyAFQQA6AEAgBiAHKQMANwAAIAYgBykDCDcACCAHQdAAaiQAC6\ -gCAgF/EX4CQCACRQ0AIAEgAkGIAWxqIQMDQCAAKAIAIgIpAwAhBCACKQMIIQUgAikDECEGIAIpAxgh\ -ByACKQMgIQggAikDKCEJIAIpAzAhCiACKQM4IQsgAikDQCEMIAIpA0ghDSACKQNQIQ4gAikDWCEPIA\ -IpA2AhECACKQNoIREgAikDcCESIAIpA3ghEyACKQOAASEUIAIgAigCyAEQJSABIBQ3AIABIAEgEzcA\ -eCABIBI3AHAgASARNwBoIAEgEDcAYCABIA83AFggASAONwBQIAEgDTcASCABIAw3AEAgASALNwA4IA\ -EgCjcAMCABIAk3ACggASAINwAgIAEgBzcAGCABIAY3ABAgASAFNwAIIAEgBDcAACABQYgBaiIBIANH\ -DQALCwuEAgIEfwJ+IwBBwABrIgMkACABIAEtAEAiBGoiBUEBOgAAIAApAwBCCYYhByAErUIDhiEIAk\ -AgBEE/cyIGRQ0AIAVBAWpBACAGEI4BGgsgByAIhCEHAkACQCAEQThzQQhJDQAgASAHNwA4IABBCGog\ -ARAVDAELIABBCGoiBCABEBUgA0EwakIANwMAIANBKGpCADcDACADQSBqQgA3AwAgA0EYakIANwMAIA\ -NBEGpCADcDACADQQhqQgA3AwAgA0IANwMAIAMgBzcDOCAEIAMQFQsgAUEAOgBAIAIgACkDCDcAACAC\ -IABBEGopAwA3AAggAiAAQRhqKQMANwAQIANBwABqJAALoQIBAX8gASABLQBIIgNqQQBByAAgA2sQjg\ -EhAyABQQA6AEggA0EBOgAAIAEgAS0AR0GAAXI6AEcgACAAKQMAIAEpAACFNwMAIAAgACkDCCABKQAI\ -hTcDCCAAIAApAxAgASkAEIU3AxAgACAAKQMYIAEpABiFNwMYIAAgACkDICABKQAghTcDICAAIAApAy\ -ggASkAKIU3AyggACAAKQMwIAEpADCFNwMwIAAgACkDOCABKQA4hTcDOCAAIAApA0AgASkAQIU3A0Ag\ -ACAAKALIARAlIAIgACkDADcAACACIAApAwg3AAggAiAAKQMQNwAQIAIgACkDGDcAGCACIAApAyA3AC\ -AgAiAAKQMoNwAoIAIgACkDMDcAMCACIAApAzg3ADgLoQIBAX8gASABLQBIIgNqQQBByAAgA2sQjgEh\ -AyABQQA6AEggA0EGOgAAIAEgAS0AR0GAAXI6AEcgACAAKQMAIAEpAACFNwMAIAAgACkDCCABKQAIhT\ -cDCCAAIAApAxAgASkAEIU3AxAgACAAKQMYIAEpABiFNwMYIAAgACkDICABKQAghTcDICAAIAApAygg\ -ASkAKIU3AyggACAAKQMwIAEpADCFNwMwIAAgACkDOCABKQA4hTcDOCAAIAApA0AgASkAQIU3A0AgAC\ -AAKALIARAlIAIgACkDADcAACACIAApAwg3AAggAiAAKQMQNwAQIAIgACkDGDcAGCACIAApAyA3ACAg\ -AiAAKQMoNwAoIAIgACkDMDcAMCACIAApAzg3ADgLgAIBBX8jAEHAAGsiAiQAIAJBIGpBGGoiA0IANw\ -MAIAJBIGpBEGoiBEIANwMAIAJBIGpBCGoiBUIANwMAIAJCADcDICABIAFB0AFqIAJBIGoQOSABQQBB\ -yAEQjgEiAUHYAmpBADoAACABQRg2AsgBIAJBCGoiBiAFKQMANwMAIAJBEGoiBSAEKQMANwMAIAJBGG\ -oiBCADKQMANwMAIAIgAikDIDcDAEEALQCA2EAaAkBBIBAZIgENAAALIAEgAikDADcAACABQRhqIAQp\ -AwA3AAAgAUEQaiAFKQMANwAAIAFBCGogBikDADcAACAAQSA2AgQgACABNgIAIAJBwABqJAALgAIBBX\ -8jAEHAAGsiAiQAIAJBIGpBGGoiA0IANwMAIAJBIGpBEGoiBEIANwMAIAJBIGpBCGoiBUIANwMAIAJC\ -ADcDICABIAFB0AFqIAJBIGoQOCABQQBByAEQjgEiAUHYAmpBADoAACABQRg2AsgBIAJBCGoiBiAFKQ\ -MANwMAIAJBEGoiBSAEKQMANwMAIAJBGGoiBCADKQMANwMAIAIgAikDIDcDAEEALQCA2EAaAkBBIBAZ\ -IgENAAALIAEgAikDADcAACABQRhqIAQpAwA3AAAgAUEQaiAFKQMANwAAIAFBCGogBikDADcAACAAQS\ -A2AgQgACABNgIAIAJBwABqJAAL/gEBBn8jAEGgA2siAiQAIAJBIGogAUHgAhCQARogAkGAA2pBGGoi\ -A0IANwMAIAJBgANqQRBqIgRCADcDACACQYADakEIaiIFQgA3AwAgAkIANwOAAyACQSBqIAJB8AFqIA\ -JBgANqEDkgAkEYaiIGIAMpAwA3AwAgAkEQaiIHIAQpAwA3AwAgAkEIaiIEIAUpAwA3AwAgAiACKQOA\ -AzcDAEEALQCA2EAaAkBBIBAZIgMNAAALIAMgAikDADcAACADQRhqIAYpAwA3AAAgA0EQaiAHKQMANw\ -AAIANBCGogBCkDADcAACABECAgAEEgNgIEIAAgAzYCACACQaADaiQAC/4BAQZ/IwBBsAFrIgIkACAC\ -QSBqIAFB8AAQkAEaIAJBkAFqQRhqIgNCADcDACACQZABakEQaiIEQgA3AwAgAkGQAWpBCGoiBUIANw\ -MAIAJCADcDkAEgAkEgaiACQcgAaiACQZABahApIAJBGGoiBiADKQMANwMAIAJBEGoiByAEKQMANwMA\ -IAJBCGoiBCAFKQMANwMAIAIgAikDkAE3AwBBAC0AgNhAGgJAQSAQGSIDDQAACyADIAIpAwA3AAAgA0\ -EYaiAGKQMANwAAIANBEGogBykDADcAACADQQhqIAQpAwA3AAAgARAgIABBIDYCBCAAIAM2AgAgAkGw\ -AWokAAv+AQEGfyMAQaADayICJAAgAkEgaiABQeACEJABGiACQYADakEYaiIDQgA3AwAgAkGAA2pBEG\ -oiBEIANwMAIAJBgANqQQhqIgVCADcDACACQgA3A4ADIAJBIGogAkHwAWogAkGAA2oQOCACQRhqIgYg\ -AykDADcDACACQRBqIgcgBCkDADcDACACQQhqIgQgBSkDADcDACACIAIpA4ADNwMAQQAtAIDYQBoCQE\ -EgEBkiAw0AAAsgAyACKQMANwAAIANBGGogBikDADcAACADQRBqIAcpAwA3AAAgA0EIaiAEKQMANwAA\ -IAEQICAAQSA2AgQgACADNgIAIAJBoANqJAALiAIBAX8CQCACRQ0AIAEgAkHoAGxqIQMgACgCACECA0\ -AgAiACKQMAIAEpAACFNwMAIAIgAikDCCABKQAIhTcDCCACIAIpAxAgASkAEIU3AxAgAiACKQMYIAEp\ -ABiFNwMYIAIgAikDICABKQAghTcDICACIAIpAyggASkAKIU3AyggAiACKQMwIAEpADCFNwMwIAIgAi\ -kDOCABKQA4hTcDOCACIAIpA0AgASkAQIU3A0AgAiACKQNIIAEpAEiFNwNIIAIgAikDUCABKQBQhTcD\ -UCACIAIpA1ggASkAWIU3A1ggAiACKQNgIAEpAGCFNwNgIAIgAigCyAEQJSABQegAaiIBIANHDQALCw\ -vuAQEHfyMAQRBrIgMkACACEAIhBCACEAMhBSACEAQhBgJAAkAgBEGBgARJDQBBACEHIAQhCANAIANB\ -BGogBiAFIAdqIAhBgIAEIAhBgIAESRsQBSIJEFwCQCAJQYQBSQ0AIAkQAQsgACABIAMoAgQiCSADKA\ -IMEA8CQCADKAIIRQ0AIAkQIAsgCEGAgHxqIQggB0GAgARqIgcgBEkNAAwCCwsgA0EEaiACEFwgACAB\ -IAMoAgQiCCADKAIMEA8gAygCCEUNACAIECALAkAgBkGEAUkNACAGEAELAkAgAkGEAUkNACACEAELIA\ -NBEGokAAvfAQEDfyMAQSBrIgYkACAGQRRqIAEgAhAaAkACQCAGKAIUDQAgBkEcaigCACEHIAYoAhgh\ -CAwBCyAGKAIYIAZBHGooAgAQACEHQRshCAsCQCACRQ0AIAEQIAsCQAJAAkAgCEEbRw0AIANBhAFJDQ\ -EgAxABDAELIAggByADEFMgBkEIaiAIIAcgBEEARyAFEF4gBigCDCEHIAYoAggiAkUNAEEAIQggByEB\ -QQAhBwwBC0EBIQhBACECQQAhAQsgACAINgIMIAAgBzYCCCAAIAE2AgQgACACNgIAIAZBIGokAAvLAQ\ -ECfyMAQdAAayICQQA2AkxBQCEDA0AgAkEMaiADakHAAGogASADakHAAGooAAA2AgAgA0EEaiIDDQAL\ -IAAgAikCDDcAACAAQThqIAJBDGpBOGopAgA3AAAgAEEwaiACQQxqQTBqKQIANwAAIABBKGogAkEMak\ -EoaikCADcAACAAQSBqIAJBDGpBIGopAgA3AAAgAEEYaiACQQxqQRhqKQIANwAAIABBEGogAkEMakEQ\ -aikCADcAACAAQQhqIAJBDGpBCGopAgA3AAALtQEBA38CQAJAIAJBEE8NACAAIQMMAQsgAEEAIABrQQ\ -NxIgRqIQUCQCAERQ0AIAAhAwNAIAMgAToAACADQQFqIgMgBUkNAAsLIAUgAiAEayIEQXxxIgJqIQMC\ -QCACQQFIDQAgAUH/AXFBgYKECGwhAgNAIAUgAjYCACAFQQRqIgUgA0kNAAsLIARBA3EhAgsCQCACRQ\ -0AIAMgAmohBQNAIAMgAToAACADQQFqIgMgBUkNAAsLIAALvgEBBH8jAEEQayIDJAAgA0EEaiABIAIQ\ -GgJAAkAgAygCBA0AIANBDGooAgAhBCADKAIIIQUMAQsgAygCCCADQQxqKAIAEAAhBEEbIQULAkAgAk\ -UNACABECALQQAhAgJAAkACQCAFQRtGIgFFDQAgBCEGDAELQQAhBkEALQCA2EAaQQwQGSICRQ0BIAIg\ -BDYCCCACIAU2AgQgAkEANgIACyAAIAY2AgQgACACNgIAIAAgATYCCCADQRBqJAAPCwALyAEBAX8CQC\ -ACRQ0AIAEgAkHIAGxqIQMgACgCACECA0AgAiACKQMAIAEpAACFNwMAIAIgAikDCCABKQAIhTcDCCAC\ -IAIpAxAgASkAEIU3AxAgAiACKQMYIAEpABiFNwMYIAIgAikDICABKQAghTcDICACIAIpAyggASkAKI\ -U3AyggAiACKQMwIAEpADCFNwMwIAIgAikDOCABKQA4hTcDOCACIAIpA0AgASkAQIU3A0AgAiACKALI\ -ARAlIAFByABqIgEgA0cNAAsLC7YBAQN/IwBBEGsiBCQAAkACQCABRQ0AIAEoAgANASABQX82AgAgBE\ -EEaiABQQRqKAIAIAFBCGooAgAgAkEARyADEBEgBEEEakEIaigCACEDIAQoAgghAgJAAkAgBCgCBA0A\ -QQAhBUEAIQYMAQsgAiADEAAhBUEBIQZBACECQQAhAwsgAUEANgIAIAAgBjYCDCAAIAU2AgggACADNg\ -IEIAAgAjYCACAEQRBqJAAPCxCKAQALEIsBAAutAQEEfyMAQRBrIgQkAAJAAkAgAUUNACABKAIADQFB\ -ACEFIAFBADYCACABQQhqKAIAIQYgASgCBCEHIAEQICAEQQhqIAcgBiACQQBHIAMQXiAEKAIMIQECQA\ -JAIAQoAggiAg0AQQEhA0EAIQIMAQtBACEDIAIhBSABIQJBACEBCyAAIAM2AgwgACABNgIIIAAgAjYC\ -BCAAIAU2AgAgBEEQaiQADwsQigEACxCLAQALkgEBAn8jAEGAAWsiAyQAAkACQAJAAkAgAg0AQQEhBA\ -wBCyACQX9MDQEgAhAZIgRFDQIgBEF8ai0AAEEDcUUNACAEQQAgAhCOARoLIANBCGogARAhAkAgAUHw\ -DmooAgBFDQAgAUEANgLwDgsgA0EIaiAEIAIQFiAAIAI2AgQgACAENgIAIANBgAFqJAAPCxBzAAsAC5\ -MBAQV/AkACQAJAAkAgARAGIgINAEEBIQMMAQsgAkF/TA0BQQAtAIDYQBogAhAZIgNFDQILEAciBBAI\ -IgUQCSEGAkAgBUGEAUkNACAFEAELIAYgASADEAoCQCAGQYQBSQ0AIAYQAQsCQCAEQYQBSQ0AIAQQAQ\ -sgACABEAY2AgggACACNgIEIAAgAzYCAA8LEHMACwALkAEBAX8jAEEQayIGJAACQAJAIAFFDQAgBkEE\ -aiABIAMgBCAFIAIoAhARCgAgBigCBCEBAkAgBigCCCIEIAYoAgwiBU0NAAJAIAUNACABECBBBCEBDA\ -ELIAEgBEECdEEEIAVBAnQQJyIBRQ0CCyAAIAU2AgQgACABNgIAIAZBEGokAA8LQeiOwABBMhCMAQAL\ -AAuJAQEBfyMAQRBrIgUkACAFQQRqIAEgAiADIAQQESAFQQxqKAIAIQQgBSgCCCEDAkACQCAFKAIEDQ\ -AgACAENgIEIAAgAzYCAAwBCyADIAQQACEEIABBADYCACAAIAQ2AgQLAkAgAUEHRw0AIAJB8A5qKAIA\ -RQ0AIAJBADYC8A4LIAIQICAFQRBqJAALhAEBAX8jAEHAAGsiBCQAIARBKzYCDCAEIAA2AgggBCACNg\ -IUIAQgATYCECAEQRhqQQxqQgI3AgAgBEEwakEMakEBNgIAIARBAjYCHCAEQeiHwAA2AhggBEECNgI0\ -IAQgBEEwajYCICAEIARBEGo2AjggBCAEQQhqNgIwIARBGGogAxB0AAtyAQF/IwBBMGsiAyQAIAMgAD\ -YCACADIAE2AgQgA0EIakEMakICNwIAIANBIGpBDGpBAzYCACADQQI2AgwgA0GUisAANgIIIANBAzYC\ -JCADIANBIGo2AhAgAyADQQRqNgIoIAMgAzYCICADQQhqIAIQdAALcgEBfyMAQTBrIgMkACADIAA2Ag\ -AgAyABNgIEIANBCGpBDGpCAjcCACADQSBqQQxqQQM2AgAgA0ECNgIMIANB9InAADYCCCADQQM2AiQg\ -AyADQSBqNgIQIAMgA0EEajYCKCADIAM2AiAgA0EIaiACEHQAC3IBAX8jAEEwayIDJAAgAyABNgIEIA\ -MgADYCACADQQhqQQxqQgI3AgAgA0EgakEMakEDNgIAIANBAzYCDCADQeSKwAA2AgggA0EDNgIkIAMg\ -A0EgajYCECADIAM2AiggAyADQQRqNgIgIANBCGogAhB0AAtyAQF/IwBBMGsiAyQAIAMgATYCBCADIA\ -A2AgAgA0EIakEMakICNwIAIANBIGpBDGpBAzYCACADQQI2AgwgA0HUh8AANgIIIANBAzYCJCADIANB\ -IGo2AhAgAyADNgIoIAMgA0EEajYCICADQQhqIAIQdAALYwECfyMAQSBrIgIkACACQQxqQgE3AgAgAk\ -EBNgIEIAJBtIbAADYCACACQQI2AhwgAkHUhsAANgIYIAFBGGooAgAhAyACIAJBGGo2AgggASgCFCAD\ -IAIQKiEBIAJBIGokACABC2MBAn8jAEEgayICJAAgAkEMakIBNwIAIAJBATYCBCACQbSGwAA2AgAgAk\ -ECNgIcIAJB1IbAADYCGCABQRhqKAIAIQMgAiACQRhqNgIIIAEoAhQgAyACECohASACQSBqJAAgAQtd\ -AQJ/AkACQCAARQ0AIAAoAgANASAAQQA2AgAgAEEIaigCACEBIAAoAgQhAiAAECACQCACQQdHDQAgAU\ -HwDmooAgBFDQAgAUEANgLwDgsgARAgDwsQigEACxCLAQALWAECfyMAQZABayICJAAgAkEANgKMAUGA\ -fyEDA0AgAkEMaiADakGAAWogASADakGAAWooAAA2AgAgA0EEaiIDDQALIAAgAkEMakGAARCQARogAk\ -GQAWokAAtYAQJ/IwBBoAFrIgIkACACQQA2ApwBQfB+IQMDQCACQQxqIANqQZABaiABIANqQZABaigA\ -ADYCACADQQRqIgMNAAsgACACQQxqQZABEJABGiACQaABaiQAC1gBAn8jAEGQAWsiAiQAIAJBADYCjA\ -FB+H4hAwNAIAJBBGogA2pBiAFqIAEgA2pBiAFqKAAANgIAIANBBGoiAw0ACyAAIAJBBGpBiAEQkAEa\ -IAJBkAFqJAALVwECfyMAQfAAayICJAAgAkEANgJsQZh/IQMDQCACQQRqIANqQegAaiABIANqQegAai\ -gAADYCACADQQRqIgMNAAsgACACQQRqQegAEJABGiACQfAAaiQAC1cBAn8jAEHQAGsiAiQAIAJBADYC\ -TEG4fyEDA0AgAkEEaiADakHIAGogASADakHIAGooAAA2AgAgA0EEaiIDDQALIAAgAkEEakHIABCQAR\ -ogAkHQAGokAAtYAQJ/IwBBsAFrIgIkACACQQA2AqwBQdh+IQMDQCACQQRqIANqQagBaiABIANqQagB\ -aigAADYCACADQQRqIgMNAAsgACACQQRqQagBEJABGiACQbABaiQAC2YBAX9BAEEAKAKY1EAiAkEBaj\ -YCmNRAAkAgAkEASA0AQQAtAOTXQEEBcQ0AQQBBAToA5NdAQQBBACgC4NdAQQFqNgLg10BBACgClNRA\ -QX9MDQBBAEEAOgDk10AgAEUNABCRAQALAAtRAAJAIAFpQQFHDQBBgICAgHggAWsgAEkNAAJAIABFDQ\ -BBAC0AgNhAGgJAAkAgAUEJSQ0AIAEgABAwIQEMAQsgABAZIQELIAFFDQELIAEPCwALSgEDf0EAIQMC\ -QCACRQ0AAkADQCAALQAAIgQgAS0AACIFRw0BIABBAWohACABQQFqIQEgAkF/aiICRQ0CDAALCyAEIA\ -VrIQMLIAMLRgACQAJAIAFFDQAgASgCAA0BIAFBfzYCACABQQRqKAIAIAFBCGooAgAgAhBTIAFBADYC\ -ACAAQgA3AwAPCxCKAQALEIsBAAtHAQF/IwBBIGsiAyQAIANBDGpCADcCACADQQE2AgQgA0G4ksAANg\ -IIIAMgATYCHCADIAA2AhggAyADQRhqNgIAIAMgAhB0AAtCAQF/AkACQAJAIAJBgIDEAEYNAEEBIQQg\ -ACACIAEoAhARBQANAQsgAw0BQQAhBAsgBA8LIAAgA0EAIAEoAgwRBwALPwEBfyMAQSBrIgAkACAAQR\ -RqQgA3AgAgAEEBNgIMIABBtILAADYCCCAAQbiSwAA2AhAgAEEIakG8gsAAEHQACz4BAX8jAEEgayIC\ -JAAgAkEBOwEcIAIgATYCGCACIAA2AhQgAkGQh8AANgIQIAJBuJLAADYCDCACQQxqEHgACzwBAX8gAE\ -EMaigCACECAkACQCAAKAIEDgIAAAELIAINACABLQAQIAEtABEQbQALIAEtABAgAS0AERBtAAsvAAJA\ -AkAgA2lBAUcNAEGAgICAeCADayABSQ0AIAAgASADIAIQJyIDDQELAAsgAwsmAAJAIAANAEHojsAAQT\ -IQjAEACyAAIAIgAyAEIAUgASgCEBELAAsnAQF/AkAgACgCCCIBDQBBuJLAAEErQYCTwAAQcQALIAEg\ -ABCNAQALJAACQCAADQBB6I7AAEEyEIwBAAsgACACIAMgBCABKAIQEQkACyQAAkAgAA0AQeiOwABBMh\ -CMAQALIAAgAiADIAQgASgCEBEIAAskAAJAIAANAEHojsAAQTIQjAEACyAAIAIgAyAEIAEoAhARCQAL\ -JAACQCAADQBB6I7AAEEyEIwBAAsgACACIAMgBCABKAIQEQgACyQAAkAgAA0AQeiOwABBMhCMAQALIA\ -AgAiADIAQgASgCEBEIAAskAAJAIAANAEHojsAAQTIQjAEACyAAIAIgAyAEIAEoAhARFwALJAACQCAA\ -DQBB6I7AAEEyEIwBAAsgACACIAMgBCABKAIQERgACyQAAkAgAA0AQeiOwABBMhCMAQALIAAgAiADIA\ -QgASgCEBEWAAsiAAJAIAANAEHojsAAQTIQjAEACyAAIAIgAyABKAIQEQYACyAAAkAgAA0AQeiOwABB\ -MhCMAQALIAAgAiABKAIQEQUACxQAIAAoAgAgASAAKAIEKAIMEQUACxAAIAEgACgCACAAKAIEEB8LIQ\ -AgAEKYo6rL4I761NYANwMIIABCq6qJm/b22twaNwMACw4AAkAgAUUNACAAECALCxEAQcyCwABBL0HY\ -jsAAEHEACw0AIAAoAgAaA38MAAsLCwAgACMAaiQAIwALDQBBqNPAAEEbEIwBAAsOAEHD08AAQc8AEI\ -wBAAsJACAAIAEQCwALCQAgACABEHUACwoAIAAgASACEFYLCgAgACABIAIQbwsKACAAIAEgAhA3CwMA\ -AAsCAAsCAAsCAAsLnFQBAEGAgMAAC5JUfAUQAGAAAACuAAAAFAAAAEJMQUtFMkJCTEFLRTJCLTEyOE\ -JMQUtFMkItMTYwQkxBS0UyQi0yMjRCTEFLRTJCLTI1NkJMQUtFMkItMzg0QkxBS0UyU0JMQUtFM0tF\ -Q0NBSy0yMjRLRUNDQUstMjU2S0VDQ0FLLTM4NEtFQ0NBSy01MTJNRDRNRDVSSVBFTUQtMTYwU0hBLT\ -FTSEEtMjI0U0hBLTI1NlNIQS0zODRTSEEtNTEyVElHRVJ1bnN1cHBvcnRlZCBhbGdvcml0aG1ub24t\ -ZGVmYXVsdCBsZW5ndGggc3BlY2lmaWVkIGZvciBub24tZXh0ZW5kYWJsZSBhbGdvcml0aG1saWJyYX\ -J5L2FsbG9jL3NyYy9yYXdfdmVjLnJzY2FwYWNpdHkgb3ZlcmZsb3cjARAAEQAAAAcBEAAcAAAAFgIA\ -AAUAAABBcnJheVZlYzogY2FwYWNpdHkgZXhjZWVkZWQgaW4gZXh0ZW5kL2Zyb21faXRlci9Vc2Vycy\ -9hc2hlci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFm\ -L2JsYWtlMy0xLjUuMC9zcmMvbGliLnJzewEQAFkAAADYAQAAEQAAAHsBEABZAAAAfgIAAAoAAAB7AR\ -AAWQAAAGoCAAAWAAAAewEQAFkAAACsAgAADAAAAHsBEABZAAAArAIAACgAAAB7ARAAWQAAAKwCAAA0\ -AAAAewEQAFkAAACcAgAAFwAAAHsBEABZAAAA2AIAAB8AAAB7ARAAWQAAAPUCAAAMAAAAewEQAFkAAA\ -D8AgAAEgAAAHsBEABZAAAAIAMAACEAAAB7ARAAWQAAACIDAAARAAAAewEQAFkAAAAiAwAAQQAAAHsB\ -EABZAAAAEgQAADIAAAB7ARAAWQAAABoEAAAbAAAAewEQAFkAAABBBAAAFwAAAHsBEABZAAAApQQAAB\ -sAAAB7ARAAWQAAALcEAAAbAAAAewEQAFkAAADoBAAAEgAAAHsBEABZAAAA8gQAABIAAAB7ARAAWQAA\ -AB8GAAAmAAAAQ2FwYWNpdHlFcnJvcjogACQDEAAPAAAAaW5zdWZmaWNpZW50IGNhcGFjaXR5AAAAPA\ -MQABUAAAARAAAABAAAAAQAAAASAAAAEwAAACAAAAABAAAAFAAAABEAAAAEAAAABAAAABIAAAApAAAA\ -FQAAAAAAAAABAAAAFgAAAGluZGV4IG91dCBvZiBib3VuZHM6IHRoZSBsZW4gaXMgIGJ1dCB0aGUgaW\ -5kZXggaXMgAACgAxAAIAAAAMADEAASAAAAOiAAADgJEAAAAAAA5AMQAAIAAAAwMDAxMDIwMzA0MDUw\ -NjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MjAyMTIyMjMyNDI1MjYyNzI4MjkzMDMxMzIzMzM0Mz\ -UzNjM3MzgzOTQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NTA1MTUyNTM1NDU1NTY1NzU4NTk2MDYxNjI2MzY0\ -NjU2NjY3Njg2OTcwNzE3MjczNzQ3NTc2Nzc3ODc5ODA4MTgyODM4NDg1ODY4Nzg4ODk5MDkxOTI5Mz\ -k0OTU5Njk3OTg5OXJhbmdlIHN0YXJ0IGluZGV4ICBvdXQgb2YgcmFuZ2UgZm9yIHNsaWNlIG9mIGxl\ -bmd0aCDABBAAEgAAANIEEAAiAAAAcmFuZ2UgZW5kIGluZGV4IAQFEAAQAAAA0gQQACIAAABzb3VyY2\ -Ugc2xpY2UgbGVuZ3RoICgpIGRvZXMgbm90IG1hdGNoIGRlc3RpbmF0aW9uIHNsaWNlIGxlbmd0aCAo\ -JAUQABUAAAA5BRAAKwAAAIwDEAABAAAAL1VzZXJzL2FzaGVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW\ -5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvYmxvY2stYnVmZmVyLTAuMTAuNC9zcmMvbGli\ -LnJzfAUQAGAAAABYAQAAHgAAAHwFEABgAAAAFQEAACwAAABhc3NlcnRpb24gZmFpbGVkOiBtaWQgPD\ -0gc2VsZi5sZW4oKQABI0VniavN7/7cuph2VDIQ8OHSwwAAAADYngXBB9V8NhfdcDA5WQ73MQvA/xEV\ -WGinj/lkpE/6vmfmCWqFrme7cvNuPDr1T6V/Ug5RjGgFm6vZgx8ZzeBb2J4FwV2du8sH1Xw2KimaYh\ -fdcDBaAVmROVkO99jsLxUxC8D/ZyYzZxEVWGiHSrSOp4/5ZA0uDNukT/q+HUi1RwjJvPNn5glqO6fK\ -hIWuZ7sr+JT+cvNuPPE2HV869U+l0YLmrX9SDlEfbD4rjGgFm2u9Qfur2YMfeSF+ExnN4FsvVXNlcn\ -MvYXNoZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAx\ -Zi9hcnJheXZlYy0wLjcuNC9zcmMvYXJyYXl2ZWMucnP4BhAAYAAAAG0EAAAPAAAAY2xvc3VyZSBpbn\ -Zva2VkIHJlY3Vyc2l2ZWx5IG9yIGFmdGVyIGJlaW5nIGRyb3BwZWQAAAAAAAABAAAAAAAAAIKAAAAA\ -AAAAioAAAAAAAIAAgACAAAAAgIuAAAAAAAAAAQAAgAAAAACBgACAAAAAgAmAAAAAAACAigAAAAAAAA\ -CIAAAAAAAAAAmAAIAAAAAACgAAgAAAAACLgACAAAAAAIsAAAAAAACAiYAAAAAAAIADgAAAAAAAgAKA\ -AAAAAACAgAAAAAAAAIAKgAAAAAAAAAoAAIAAAACAgYAAgAAAAICAgAAAAAAAgAEAAIAAAAAACIAAgA\ -AAAIAvVXNlcnMvYXNoZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2Qy\ -MmJiYTE1MDAxZi9rZWNjYWstMC4xLjUvc3JjL2xpYi5yc0Egcm91bmRfY291bnQgZ3JlYXRlciB0aG\ -FuIEtFQ0NBS19GX1JPVU5EX0NPVU5UIGlzIG5vdCBzdXBwb3J0ZWQhAABgCBAAWQAAAO4AAAAJAAAA\ -Y2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZQBjYWxsZWQgYE9wdGlvbj\ -o6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlbGlicmFyeS9zdGQvc3JjL3Bhbmlja2luZy5ycwBj\ -CRAAHAAAAFQCAAAeAAAAXgzp93yxqgLsqEPiA0tCrNP81Q3jW81yOn/59pObAW2TkR/S/3iZzeIpgH\ -DJoXN1w4MqkmsyZLFwWJEE7j6IRubsA3EF46zqXFOjCLhpQcV8xN6NkVTnTAz0Ddzf9KIK+r5Npxhv\ -txBqq9FaI7bMxv/iL1chYXITHpKdGW+MSBrKBwDa9PnJS8dBUuj25vUmtkdZ6tt5kIWSjJ7JxYUYT0\ -uGb6kedo7XfcG1UoxCNo7BYzA3J2jPaW7FtJs9yQe26rV2DnYOgn1C3H/wxpxcZOBCMyR4oDi/BH0u\ -nTw0a1/GDgtg64rC8qy8VHJf2A5s5U/bpIEiWXGf7Q/OafpnGdtFZbn4k1L9C2Cn8tfpechOGZMBkk\ -gChrPAnC07U/mkE3aVFWyDU5DxezX8is9t21cPN3p66r4YZpC5UMoXcQM1SkJ0lwqzapskJeMCL+n0\ -4cocBgfbOXcFKqTsnLTz2HMvOFE/vla9KLuwQ1jt+kWDH78RXD2BHGmhX9e25PCKmZmth6QY7jMQRM\ -mx6ugmPPkiqMArEBC1OxLmDDHvHhRUsd1ZALll/Afm4MVAhhXgz6PDJpgHToj9NcUjlQ0NkwArmk51\ -jWM11Z1GQM/8hUBMOuKL0nqxxC5qPmr88LLKzT+UaxqXYChGBOMS4m7ePa5lF+Aq8yJi/giDR7ULVV\ -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\ -caVsdFNr6dJJ7aE/loTKZ4my1l2u80wzt/qSdM9Bdr5iASYnYLfc2aiUN3loJn7eDKW+7z/HnIADZ1\ -n0C2bZK1OZrQBojFejGwroNvIR84hkrK5gElMJ/RYjT/Zvs7/d0kfCBy6+Ls4tO29kreCOrHvk2ZnM\ -SLmrCX5axJupcHz2ZHjLN1KnzFc5MbE1gek2HOLIKxDBy6CblVdZ3SEX2T3a9/EuSSbcatO9opvOzC\ -VHHVwaIk/vaCTRPFWE8nYltR4zocJoHLAS7IB+nLf+MTGQnt+MlGAMj52EkyY/uI4+2bz4Ce8WwRml\ -OBGFck1Wv38wNRqPdHrvXmtxXPnH7U3sbX2xq7KAJBXOVEmU7bXiXUR7Yw/Kq4K4gRXSoh0ym7iwn1\ -s5YC6RTqtY9aAt1XIZR7Z7WskKPA51j7AUq9g0xn04k7ufNL36QtnilIq4wyHsT8UixYupaM8wOyXd\ -h/vb3RyoOugmDBQrS7sJrapWvoX7k/qXE3ZwQusthSMUnJWFOEHlS0l4ZIKr5maY7TLdyilSuFPJKs\ -ESzAe6jyDZmxiCO+N08b+giAfAPlVE3I0HAf1FfOfuytkFQ6OgbZJzwrAL+iMICEo65+wAMg7W0yAs\ -aGQKlpfSing4p69TDLX3rFeefreeREaLXpvNwFD7Rzo+IOV4hueBrXoPbovc26nIcvo2TBvNFql4vX\ -ZpZe4iGrPMPl5apjEJCQjWlIRLMYmLuKHj6uh2TjtNw7iTH5va8Z1btf3KBFY8pllJsm/iiG7FGcP2\ -ABXR63SVChBkDkTbHLdvflcGy/7StV7/IYEkGjNlpwCAcMy0RgmE91FE3nDiioDkPZVs1lUF9T15El\ -wZbvCnLxIzLIH6Vjc285oMPvzauJZ0UjARAyVHaYutz+h+Gyw7SllvBudWxsIHBvaW50ZXIgcGFzc2\ -VkIHRvIHJ1c3RyZWN1cnNpdmUgdXNlIG9mIGFuIG9iamVjdCBkZXRlY3RlZCB3aGljaCB3b3VsZCBs\ -ZWFkIHRvIHVuc2FmZSBhbGlhc2luZyBpbiBydXN0AOdKBG5hbWUB30qVAQBFanNfc3lzOjpUeXBlRX\ -Jyb3I6Om5ldzo6X193YmdfbmV3X2QzMzE0OTRhYjYwYTg0OTE6Omg4ZDVkNWFhZGNiYjUyMzE0ATt3\ -YXNtX2JpbmRnZW46Ol9fd2JpbmRnZW5fb2JqZWN0X2Ryb3BfcmVmOjpoMmQwNjhmOGYzZmVmZTY4Mg\ -JVanNfc3lzOjpVaW50OEFycmF5OjpieXRlX2xlbmd0aDo6X193YmdfYnl0ZUxlbmd0aF9hOGQ4OTRk\ -OTM0MjViMmUwOjpoZjQyMTRlYWRmNmY3ZTQwOQNVanNfc3lzOjpVaW50OEFycmF5OjpieXRlX29mZn\ -NldDo6X193YmdfYnl0ZU9mZnNldF84OWQwYTUyNjVkNWJkZTUzOjpoMzI2OGQzYjA4ODYyMDc2MQRM\ -anNfc3lzOjpVaW50OEFycmF5OjpidWZmZXI6Ol9fd2JnX2J1ZmZlcl8zZGEyYWVjZmQ5ODE0Y2Q4Oj\ -poODdhYzM4NDIwZDEzYmJiYgV5anNfc3lzOjpVaW50OEFycmF5OjpuZXdfd2l0aF9ieXRlX29mZnNl\ -dF9hbmRfbGVuZ3RoOjpfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9kNjk1Yzc5NTc3OD\ -hmOTIyOjpoYWU5ODY4NWQ0MDA1OThjZQZManNfc3lzOjpVaW50OEFycmF5OjpsZW5ndGg6Ol9fd2Jn\ -X2xlbmd0aF9mMDc2NDQxNmJhNWJiMjM3OjpoYzc1ZjdjMDYxOTJlMDI1OAcyd2FzbV9iaW5kZ2VuOj\ -pfX3diaW5kZ2VuX21lbW9yeTo6aDkxYTBkMGNiMjE2YTM4YTYIVWpzX3N5czo6V2ViQXNzZW1ibHk6\ -Ok1lbW9yeTo6YnVmZmVyOjpfX3diZ19idWZmZXJfNWQxYjU5OGEwMWI0MWE0Mjo6aGUyM2NlYWZhOG\ -RhYzMzYmUJRmpzX3N5czo6VWludDhBcnJheTo6bmV3OjpfX3diZ19uZXdfYWNlNzE3OTMzYWQ3MTE3\ -Zjo6aGM0MmEyY2Y3NDYwYzliMTkKRmpzX3N5czo6VWludDhBcnJheTo6c2V0OjpfX3diZ19zZXRfNz\ -Q5MDZhYTMwODY0ZGY1YTo6aDMyZDI4NjM3ZjQ5NWIwYWMLMXdhc21fYmluZGdlbjo6X193YmluZGdl\ -bl90aHJvdzo6aGNmYmIzZjRlZWMzODU1YjAMLHNoYTI6OnNoYTUxMjo6Y29tcHJlc3M1MTI6OmhhYj\ -g4ZWQ2Y2ViODg0Njc0DRRkaWdlc3Rjb250ZXh0X2RpZ2VzdA4sc2hhMjo6c2hhMjU2Ojpjb21wcmVz\ -czI1Njo6aDEwMDExZDlmNjY5Y2M0NTcPQGRlbm9fc3RkX3dhc21fY3J5cHRvOjpkaWdlc3Q6OkNvbn\ -RleHQ6OnVwZGF0ZTo6aGMyNDIxODM5YzFmNDUxYTIQM2JsYWtlMjo6Qmxha2UyYlZhckNvcmU6OmNv\ -bXByZXNzOjpoYzQ2ZDczMTQxM2U2MDhmZBFKZGVub19zdGRfd2FzbV9jcnlwdG86OmRpZ2VzdDo6Q2\ -9udGV4dDo6ZGlnZXN0X2FuZF9yZXNldDo6aDY0NjRkNzQ4MWE0OTQ2YjISKXJpcGVtZDo6YzE2MDo6\ -Y29tcHJlc3M6OmhhNDJlYzM5ODM4MWYxOGMwEzNibGFrZTI6OkJsYWtlMnNWYXJDb3JlOjpjb21wcm\ -Vzczo6aGE5NjYyZTNkMGQ2OWVhYWYUK3NoYTE6OmNvbXByZXNzOjpjb21wcmVzczo6aGEwNGZhYmUw\ -MGE5M2Q4NGQVLHRpZ2VyOjpjb21wcmVzczo6Y29tcHJlc3M6OmhlYmVhZTFjYzYzYTJkODAxFi1ibG\ -FrZTM6Ok91dHB1dFJlYWRlcjo6ZmlsbDo6aDVkZGYxYWQyNmI1MGEyZTMXNmJsYWtlMzo6cG9ydGFi\ -bGU6OmNvbXByZXNzX2luX3BsYWNlOjpoNjFjZWM4NGZlMjc1ZTgzOBgTZGlnZXN0Y29udGV4dF9jbG\ -9uZRk6ZGxtYWxsb2M6OmRsbWFsbG9jOjpEbG1hbGxvYzxBPjo6bWFsbG9jOjpoZDgwNGZjZWU1YTBj\ -MmIwYho9ZGVub19zdGRfd2FzbV9jcnlwdG86OmRpZ2VzdDo6Q29udGV4dDo6bmV3OjpoNjhkZjVmMz\ -MzYTM0YzgxZhtlPGRpZ2VzdDo6Y29yZV9hcGk6OndyYXBwZXI6OkNvcmVXcmFwcGVyPFQ+IGFzIGRp\ -Z2VzdDo6VXBkYXRlPjo6dXBkYXRlOjp7e2Nsb3N1cmV9fTo6aDg4ZWQ0YjBlZGE4NDFkNWQcaDxtZD\ -U6Ok1kNUNvcmUgYXMgZGlnZXN0Ojpjb3JlX2FwaTo6Rml4ZWRPdXRwdXRDb3JlPjo6ZmluYWxpemVf\ -Zml4ZWRfY29yZTo6e3tjbG9zdXJlfX06Omg1OTlmMzk1NGQxNjc1M2FiHTBibGFrZTM6OmNvbXByZX\ -NzX3N1YnRyZWVfd2lkZTo6aGYyZjI0ZDRmY2Q4YWIwNDUeE2RpZ2VzdGNvbnRleHRfcmVzZXQfLGNv\ -cmU6OmZtdDo6Rm9ybWF0dGVyOjpwYWQ6OmhiMGZmN2QxMzBhZjNhZGNhIDhkbG1hbGxvYzo6ZGxtYW\ -xsb2M6OkRsbWFsbG9jPEE+OjpmcmVlOjpoOTNhMDUyZmVmMTUyYTJjMyEvYmxha2UzOjpIYXNoZXI6\ -OmZpbmFsaXplX3hvZjo6aGFiM2IwOGYwNDA1YzQyZDkiMWJsYWtlMzo6SGFzaGVyOjptZXJnZV9jdl\ -9zdGFjazo6aGM1ZTllNjkyYjE2NDRmNDEjIG1kNDo6Y29tcHJlc3M6Omg3MGY1OWI1ZTdjMTgyZTY5\ -JEFkbG1hbGxvYzo6ZGxtYWxsb2M6OkRsbWFsbG9jPEE+OjpkaXNwb3NlX2NodW5rOjpoNDNiZjI4Ym\ -QwMTM4NjlkMiUga2VjY2FrOjpwMTYwMDo6aDUyODU4YmExYzM4NmM2Y2MmcjxzaGEyOjpjb3JlX2Fw\ -aTo6U2hhNTEyVmFyQ29yZSBhcyBkaWdlc3Q6OmNvcmVfYXBpOjpWYXJpYWJsZU91dHB1dENvcmU+Oj\ -pmaW5hbGl6ZV92YXJpYWJsZV9jb3JlOjpoM2YxODJiMGZhNTVkZjMyNScOX19ydXN0X3JlYWxsb2Mo\ -TmNvcmU6OmZtdDo6bnVtOjppbXA6OjxpbXBsIGNvcmU6OmZtdDo6RGlzcGxheSBmb3IgdTMyPjo6Zm\ -10OjpoM2YwNGM3OTljZTE5ZmQ1NilyPHNoYTI6OmNvcmVfYXBpOjpTaGEyNTZWYXJDb3JlIGFzIGRp\ -Z2VzdDo6Y29yZV9hcGk6OlZhcmlhYmxlT3V0cHV0Q29yZT46OmZpbmFsaXplX3ZhcmlhYmxlX2Nvcm\ -U6Omg3MWY5OTQ3M2RmNDg1NDk2KiNjb3JlOjpmbXQ6OndyaXRlOjpoN2I2MmEwMmZiMDQ3ZDA1NStd\ -PHNoYTE6OlNoYTFDb3JlIGFzIGRpZ2VzdDo6Y29yZV9hcGk6OkZpeGVkT3V0cHV0Q29yZT46OmZpbm\ -FsaXplX2ZpeGVkX2NvcmU6OmhlM2Q2Zjc3ZTEzNTZjODA2LDRibGFrZTM6OmNvbXByZXNzX3BhcmVu\ -dHNfcGFyYWxsZWw6OmhjZGZlMjExYzM5MTBlYzM3LUM8RCBhcyBkaWdlc3Q6OmRpZ2VzdDo6RHluRG\ -lnZXN0Pjo6ZmluYWxpemVfcmVzZXQ6OmhmMTIxNjJjOWIzMmUwNWVkLj08RCBhcyBkaWdlc3Q6OmRp\ -Z2VzdDo6RHluRGlnZXN0Pjo6ZmluYWxpemU6Omg1N2JlNTZhYWRhZTA2YTM3Ly1ibGFrZTM6OkNodW\ -5rU3RhdGU6OnVwZGF0ZTo6aDQ4NzRhZWE4YjE1ZWMzNGUwPGRsbWFsbG9jOjpkbG1hbGxvYzo6RGxt\ -YWxsb2M8QT46Om1lbWFsaWduOjpoZGZhYjYzYWExNmUxNzU0MzFkPHNoYTM6OlNoYWtlMTI4Q29yZS\ -BhcyBkaWdlc3Q6OmNvcmVfYXBpOjpFeHRlbmRhYmxlT3V0cHV0Q29yZT46OmZpbmFsaXplX3hvZl9j\ -b3JlOjpoMTU5YTRlZjRhNzM2ZGZjNjJGZGlnZXN0OjpFeHRlbmRhYmxlT3V0cHV0UmVzZXQ6OmZpbm\ -FsaXplX2JveGVkX3Jlc2V0OjpoODI2ZDAxMTZlMjMwYmMzNTNlPGRpZ2VzdDo6Y29yZV9hcGk6Ondy\ -YXBwZXI6OkNvcmVXcmFwcGVyPFQ+IGFzIGRpZ2VzdDo6VXBkYXRlPjo6dXBkYXRlOjp7e2Nsb3N1cm\ -V9fTo6aGVlOGQ0ZGUwZjEwYzM0Zjk0QzxEIGFzIGRpZ2VzdDo6ZGlnZXN0OjpEeW5EaWdlc3Q+Ojpm\ -aW5hbGl6ZV9yZXNldDo6aDgxY2I3ZmJjMzRlN2Y3ZDA1YjxzaGEzOjpLZWNjYWsyMjRDb3JlIGFzIG\ -RpZ2VzdDo6Y29yZV9hcGk6OkZpeGVkT3V0cHV0Q29yZT46OmZpbmFsaXplX2ZpeGVkX2NvcmU6Omgz\ -NzYxM2VlODQ4MDZlMjAwNmE8c2hhMzo6U2hhM18yMjRDb3JlIGFzIGRpZ2VzdDo6Y29yZV9hcGk6Ok\ -ZpeGVkT3V0cHV0Q29yZT46OmZpbmFsaXplX2ZpeGVkX2NvcmU6OmgyOWY2M2EyM2EwNTg4ZDNmNzFj\ -b21waWxlcl9idWlsdGluczo6bWVtOjptZW1jcHk6Omg5NTI3YTQ4MDZmZGM3YWU4OGE8c2hhMzo6U2\ -hhM18yNTZDb3JlIGFzIGRpZ2VzdDo6Y29yZV9hcGk6OkZpeGVkT3V0cHV0Q29yZT46OmZpbmFsaXpl\ -X2ZpeGVkX2NvcmU6Omg1OGU2MmQ1YjIyMTlhYjBkOWI8c2hhMzo6S2VjY2FrMjU2Q29yZSBhcyBkaW\ -dlc3Q6OmNvcmVfYXBpOjpGaXhlZE91dHB1dENvcmU+OjpmaW5hbGl6ZV9maXhlZF9jb3JlOjpoNzJm\ -ZjBkMDg0Y2YzOWY3ZDpkPHNoYTM6OlNoYWtlMjU2Q29yZSBhcyBkaWdlc3Q6OmNvcmVfYXBpOjpFeH\ -RlbmRhYmxlT3V0cHV0Q29yZT46OmZpbmFsaXplX3hvZl9jb3JlOjpoN2M5NjY2OTExYjU3NGVmNjtl\ -PGRpZ2VzdDo6Y29yZV9hcGk6OndyYXBwZXI6OkNvcmVXcmFwcGVyPFQ+IGFzIGRpZ2VzdDo6VXBkYX\ -RlPjo6dXBkYXRlOjp7e2Nsb3N1cmV9fTo6aDRhZDZlNjRkZDllNWRmZTI8ZDxyaXBlbWQ6OlJpcGVt\ -ZDE2MENvcmUgYXMgZGlnZXN0Ojpjb3JlX2FwaTo6Rml4ZWRPdXRwdXRDb3JlPjo6ZmluYWxpemVfZm\ -l4ZWRfY29yZTo6aDJlYmQyZGFkOTljMGViZmE9cjxkaWdlc3Q6OmNvcmVfYXBpOjp4b2ZfcmVhZGVy\ -OjpYb2ZSZWFkZXJDb3JlV3JhcHBlcjxUPiBhcyBkaWdlc3Q6OlhvZlJlYWRlcj46OnJlYWQ6Ont7Y2\ -xvc3VyZX19OjpoZTFlYzJlOGI0NDU0YjA4Mz5GZGxtYWxsb2M6OmRsbWFsbG9jOjpEbG1hbGxvYzxB\ -Pjo6dW5saW5rX2xhcmdlX2NodW5rOjpoNGZhNDdmMWM0MTZiNjM3ZD89PEQgYXMgZGlnZXN0OjpkaW\ -dlc3Q6OkR5bkRpZ2VzdD46OmZpbmFsaXplOjpoM2I0YjkxNDRiZjBmYzNmZkA7ZGlnZXN0OjpFeHRl\ -bmRhYmxlT3V0cHV0OjpmaW5hbGl6ZV9ib3hlZDo6aDU1YTNkZjhiMTNkZWU1N2VBRmRsbWFsbG9jOj\ -pkbG1hbGxvYzo6RGxtYWxsb2M8QT46Omluc2VydF9sYXJnZV9jaHVuazo6aDEyMDRmZDY4Y2ZlOTBl\ -YjZCZTxkaWdlc3Q6OmNvcmVfYXBpOjp3cmFwcGVyOjpDb3JlV3JhcHBlcjxUPiBhcyBkaWdlc3Q6Ol\ -VwZGF0ZT46OnVwZGF0ZTo6e3tjbG9zdXJlfX06OmgwYWI1YjU2ZTVlMmFkMWExQ2I8c2hhMzo6S2Vj\ -Y2FrMzg0Q29yZSBhcyBkaWdlc3Q6OmNvcmVfYXBpOjpGaXhlZE91dHB1dENvcmU+OjpmaW5hbGl6ZV\ -9maXhlZF9jb3JlOjpoODc4ZjUyNDdkOWRkYzk3ZkRhPHNoYTM6OlNoYTNfMzg0Q29yZSBhcyBkaWdl\ -c3Q6OmNvcmVfYXBpOjpGaXhlZE91dHB1dENvcmU+OjpmaW5hbGl6ZV9maXhlZF9jb3JlOjpoMDQ1OW\ -MxZTkwMWU5NjNjOUVGZGlnZXN0OjpFeHRlbmRhYmxlT3V0cHV0UmVzZXQ6OmZpbmFsaXplX2JveGVk\ -X3Jlc2V0OjpoZmVkMTgxYjIzZDVjYTkyN0ZDPEQgYXMgZGlnZXN0OjpkaWdlc3Q6OkR5bkRpZ2VzdD\ -46OmZpbmFsaXplX3Jlc2V0OjpoZTlhODg4ZmUyNjI3YWRhZUdbPG1kNDo6TWQ0Q29yZSBhcyBkaWdl\ -c3Q6OmNvcmVfYXBpOjpGaXhlZE91dHB1dENvcmU+OjpmaW5hbGl6ZV9maXhlZF9jb3JlOjpoNWFhMm\ -NjMjc4ZmUzN2M2Y0hbPG1kNTo6TWQ1Q29yZSBhcyBkaWdlc3Q6OmNvcmVfYXBpOjpGaXhlZE91dHB1\ -dENvcmU+OjpmaW5hbGl6ZV9maXhlZF9jb3JlOjpoN2JhNGVjOTk5Nzg2Y2QxNUlyPGRpZ2VzdDo6Y2\ -9yZV9hcGk6OnhvZl9yZWFkZXI6OlhvZlJlYWRlckNvcmVXcmFwcGVyPFQ+IGFzIGRpZ2VzdDo6WG9m\ -UmVhZGVyPjo6cmVhZDo6e3tjbG9zdXJlfX06OmgxZmFjYzY2NTAyMWQzNjI2Sl88dGlnZXI6OlRpZ2\ -VyQ29yZSBhcyBkaWdlc3Q6OmNvcmVfYXBpOjpGaXhlZE91dHB1dENvcmU+OjpmaW5hbGl6ZV9maXhl\ -ZF9jb3JlOjpoNDI5OTZiMWExMjM1YjNkMUtiPHNoYTM6OktlY2NhazUxMkNvcmUgYXMgZGlnZXN0Oj\ -pjb3JlX2FwaTo6Rml4ZWRPdXRwdXRDb3JlPjo6ZmluYWxpemVfZml4ZWRfY29yZTo6aDVhNTJjZjcx\ -MGZlNDFlYTZMYTxzaGEzOjpTaGEzXzUxMkNvcmUgYXMgZGlnZXN0Ojpjb3JlX2FwaTo6Rml4ZWRPdX\ -RwdXRDb3JlPjo6ZmluYWxpemVfZml4ZWRfY29yZTo6aDU2ZTJmMzc3NmEzMmRlMzRNQzxEIGFzIGRp\ -Z2VzdDo6ZGlnZXN0OjpEeW5EaWdlc3Q+OjpmaW5hbGl6ZV9yZXNldDo6aGFlZjFlZWM3MjM4MWFkOT\ -FOQzxEIGFzIGRpZ2VzdDo6ZGlnZXN0OjpEeW5EaWdlc3Q+OjpmaW5hbGl6ZV9yZXNldDo6aDhlM2Uz\ -YTAzMDI0N2VkY2ZPPTxEIGFzIGRpZ2VzdDo6ZGlnZXN0OjpEeW5EaWdlc3Q+OjpmaW5hbGl6ZTo6aD\ -AwNzk1ZWFlNWJiN2QyYzJQPTxEIGFzIGRpZ2VzdDo6ZGlnZXN0OjpEeW5EaWdlc3Q+OjpmaW5hbGl6\ -ZTo6aDcyNjA3OGZiYjc5YjQzMWNRPTxEIGFzIGRpZ2VzdDo6ZGlnZXN0OjpEeW5EaWdlc3Q+OjpmaW\ -5hbGl6ZTo6aGJiMzQ3M2Y2OWE1MzUwNjdSZTxkaWdlc3Q6OmNvcmVfYXBpOjp3cmFwcGVyOjpDb3Jl\ -V3JhcHBlcjxUPiBhcyBkaWdlc3Q6OlVwZGF0ZT46OnVwZGF0ZTo6e3tjbG9zdXJlfX06Omg2MjU4NT\ -M4NjI2ZmFlY2U2Uz5kZW5vX3N0ZF93YXNtX2NyeXB0bzo6RGlnZXN0Q29udGV4dDo6dXBkYXRlOjpo\ -ZjdhNjAzZDBlNmRmZjljNVQGZGlnZXN0VUVnZW5lcmljX2FycmF5OjpmdW5jdGlvbmFsOjpGdW5jdG\ -lvbmFsU2VxdWVuY2U6Om1hcDo6aGUxZWU5MDY5MzYwMTVmYzlWMWNvbXBpbGVyX2J1aWx0aW5zOjpt\ -ZW06Om1lbXNldDo6aDJjOGIwODBmMGZlZDNiZWVXEWRpZ2VzdGNvbnRleHRfbmV3WGU8ZGlnZXN0Oj\ -pjb3JlX2FwaTo6d3JhcHBlcjo6Q29yZVdyYXBwZXI8VD4gYXMgZGlnZXN0OjpVcGRhdGU+Ojp1cGRh\ -dGU6Ont7Y2xvc3VyZX19OjpoNzRmNTc2ODYxMzIyYmYwMVkcZGlnZXN0Y29udGV4dF9kaWdlc3RBbm\ -RSZXNldFobZGlnZXN0Y29udGV4dF9kaWdlc3RBbmREcm9wWztkaWdlc3Q6OkV4dGVuZGFibGVPdXRw\ -dXQ6OmZpbmFsaXplX2JveGVkOjpoMmIzNjRlODk4ZjBiMDdmMFwtanNfc3lzOjpVaW50OEFycmF5Oj\ -p0b192ZWM6OmhkYjFiNmQ2MzI1ZmM1YWQ2XT93YXNtX2JpbmRnZW46OmNvbnZlcnQ6OmNsb3N1cmVz\ -OjppbnZva2UzX211dDo6aGYyMGE2YzQ0Y2E3ZWY3YmFeR2Rlbm9fc3RkX3dhc21fY3J5cHRvOjpEaW\ -dlc3RDb250ZXh0OjpkaWdlc3RfYW5kX2Ryb3A6OmhkMzQwMTc3NTBjNTY5OTg5Xy5jb3JlOjpyZXN1\ -bHQ6OnVud3JhcF9mYWlsZWQ6OmhiZTc5YTQxOGZhYjQ2MWZmYD9jb3JlOjpzbGljZTo6aW5kZXg6On\ -NsaWNlX2VuZF9pbmRleF9sZW5fZmFpbDo6aDE5ODBmZTE1YmE0ZWIyZjZhQWNvcmU6OnNsaWNlOjpp\ -bmRleDo6c2xpY2Vfc3RhcnRfaW5kZXhfbGVuX2ZhaWw6OmhjMTdiNjViNmU5ZTVmODFhYk5jb3JlOj\ -pzbGljZTo6PGltcGwgW1RdPjo6Y29weV9mcm9tX3NsaWNlOjpsZW5fbWlzbWF0Y2hfZmFpbDo6aDcy\ -NzkxNDkwMjJhYmUwZGRjNmNvcmU6OnBhbmlja2luZzo6cGFuaWNfYm91bmRzX2NoZWNrOjpoYTFiNz\ -M2YzA0Yjc1NTA1MGRQPGFycmF5dmVjOjplcnJvcnM6OkNhcGFjaXR5RXJyb3I8VD4gYXMgY29yZTo6\ -Zm10OjpEZWJ1Zz46OmZtdDo6aDdhNzdjMDhkOGRiZjIyNjRlUDxhcnJheXZlYzo6ZXJyb3JzOjpDYX\ -BhY2l0eUVycm9yPFQ+IGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmhmNGJkMTIxYTRjZmE3MzRi\ -ZhhfX3diZ19kaWdlc3Rjb250ZXh0X2ZyZWVnRWdlbmVyaWNfYXJyYXk6OmZ1bmN0aW9uYWw6OkZ1bm\ -N0aW9uYWxTZXF1ZW5jZTo6bWFwOjpoZTU1NzU0Yjg1MjhiNjRhYmhFZ2VuZXJpY19hcnJheTo6ZnVu\ -Y3Rpb25hbDo6RnVuY3Rpb25hbFNlcXVlbmNlOjptYXA6OmhlNjk0MzU1MmY5Y2MyZGVjaUVnZW5lcm\ -ljX2FycmF5OjpmdW5jdGlvbmFsOjpGdW5jdGlvbmFsU2VxdWVuY2U6Om1hcDo6aGZjY2M4MDQ4Zjk2\ -MGQzMjlqRWdlbmVyaWNfYXJyYXk6OmZ1bmN0aW9uYWw6OkZ1bmN0aW9uYWxTZXF1ZW5jZTo6bWFwOj\ -poMjBiNzEwYmM1NGQ0MzczNGtFZ2VuZXJpY19hcnJheTo6ZnVuY3Rpb25hbDo6RnVuY3Rpb25hbFNl\ -cXVlbmNlOjptYXA6OmgyNTI3OTgzOGJiNDgzNGJhbEVnZW5lcmljX2FycmF5OjpmdW5jdGlvbmFsOj\ -pGdW5jdGlvbmFsU2VxdWVuY2U6Om1hcDo6aGM0N2M0NjllMjVkNWE2ZTVtN3N0ZDo6cGFuaWNraW5n\ -OjpydXN0X3BhbmljX3dpdGhfaG9vazo6aGMyMGVhZGRlZDZiZmU2ODduEV9fd2JpbmRnZW5fbWFsbG\ -9jbzFjb21waWxlcl9idWlsdGluczo6bWVtOjptZW1jbXA6Omg2ZjBjZWZmMzNkYjk0YzBhcBRkaWdl\ -c3Rjb250ZXh0X3VwZGF0ZXEpY29yZTo6cGFuaWNraW5nOjpwYW5pYzo6aDdiYmVhMzc3M2I3NTIyMz\ -VyQ2NvcmU6OmZtdDo6Rm9ybWF0dGVyOjpwYWRfaW50ZWdyYWw6OndyaXRlX3ByZWZpeDo6aDMyMWU5\ -NWI2ZThkMDAxOGJzNGFsbG9jOjpyYXdfdmVjOjpjYXBhY2l0eV9vdmVyZmxvdzo6aDg0N2E2ODJiND\ -JkZDY4NGZ0LWNvcmU6OnBhbmlja2luZzo6cGFuaWNfZm10OjpoN2EzNjgzODU5MzY4ODhkY3VDc3Rk\ -OjpwYW5pY2tpbmc6OmJlZ2luX3BhbmljX2hhbmRsZXI6Ont7Y2xvc3VyZX19OjpoODI0MTVmZTM1Yj\ -BlMjAwMXYSX193YmluZGdlbl9yZWFsbG9jdz93YXNtX2JpbmRnZW46OmNvbnZlcnQ6OmNsb3N1cmVz\ -OjppbnZva2U0X211dDo6aGQ3NWJiZDY1NmUxZGZlMWV4EXJ1c3RfYmVnaW5fdW53aW5keT93YXNtX2\ -JpbmRnZW46OmNvbnZlcnQ6OmNsb3N1cmVzOjppbnZva2UzX211dDo6aDdlMzdjNGQ3MWQxM2M0NmF6\ -P3dhc21fYmluZGdlbjo6Y29udmVydDo6Y2xvc3VyZXM6Omludm9rZTNfbXV0OjpoMTYxZDFiYWNjMW\ -E0M2FjYXs/d2FzbV9iaW5kZ2VuOjpjb252ZXJ0OjpjbG9zdXJlczo6aW52b2tlM19tdXQ6OmhhYjRm\ -ZGQzODA1N2Q2MDg3fD93YXNtX2JpbmRnZW46OmNvbnZlcnQ6OmNsb3N1cmVzOjppbnZva2UzX211dD\ -o6aGNmN2M3YWYwNjQ4NDdkNDl9P3dhc21fYmluZGdlbjo6Y29udmVydDo6Y2xvc3VyZXM6Omludm9r\ -ZTNfbXV0OjpoMzRhNjU4OWY4MDdiZGZkOH4/d2FzbV9iaW5kZ2VuOjpjb252ZXJ0OjpjbG9zdXJlcz\ -o6aW52b2tlM19tdXQ6OmhjYmFkYzZmZDMyZDU3YWY1fz93YXNtX2JpbmRnZW46OmNvbnZlcnQ6OmNs\ -b3N1cmVzOjppbnZva2UzX211dDo6aDMwOGYyYzFlNzEyMmVkMjKAAT93YXNtX2JpbmRnZW46OmNvbn\ -ZlcnQ6OmNsb3N1cmVzOjppbnZva2UzX211dDo6aDdlNDViZTAwMzhlMjNhNDmBAT93YXNtX2JpbmRn\ -ZW46OmNvbnZlcnQ6OmNsb3N1cmVzOjppbnZva2UyX211dDo6aDExZGYyOWNjMDRiMjA0MmOCAT93YX\ -NtX2JpbmRnZW46OmNvbnZlcnQ6OmNsb3N1cmVzOjppbnZva2UxX211dDo6aGVjZGUzZGNkNjBhZmY3\ -YjCDATA8JlQgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGRiNDg4ZmYxMjM4MmU1OTaEATI8Jl\ -QgYXMgY29yZTo6Zm10OjpEaXNwbGF5Pjo6Zm10OjpoMWY5YjU3ZDlmNjNiYTNlZYUBMTxUIGFzIGNv\ -cmU6OmFueTo6QW55Pjo6dHlwZV9pZDo6aDQyZmM3MTY1MjM4NzQ2ZGaGAQ9fX3diaW5kZ2VuX2ZyZW\ -WHATNhcnJheXZlYzo6YXJyYXl2ZWM6OmV4dGVuZF9wYW5pYzo6aGFhODcyMjYxZjBlODg1YjGIATlj\ -b3JlOjpvcHM6OmZ1bmN0aW9uOjpGbk9uY2U6OmNhbGxfb25jZTo6aDhlNTMxYjBiN2JmNjYyMGOJAR\ -9fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyigExd2FzbV9iaW5kZ2VuOjpfX3J0Ojp0aHJv\ -d19udWxsOjpoZDJjODFlOTdjMWJiNTYxYosBMndhc21fYmluZGdlbjo6X19ydDo6Ym9ycm93X2ZhaW\ -w6Omg2NzkzZDQzZDUxNjAxZDU2jAEqd2FzbV9iaW5kZ2VuOjp0aHJvd19zdHI6OmhjMTljYmM0N2I3\ -ZWMzZDk3jQFJc3RkOjpzeXNfY29tbW9uOjpiYWNrdHJhY2U6Ol9fcnVzdF9lbmRfc2hvcnRfYmFja3\ -RyYWNlOjpoNzFmNTA0ZDQ2YTIwM2Q4OI4BBm1lbXNldI8BBm1lbWNtcJABBm1lbWNweZEBCnJ1c3Rf\ -cGFuaWOSAVdjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8YXJyYXl2ZWM6OmVycm9yczo6Q2FwYWNpdH\ -lFcnJvcjwmW3U4OyA2NF0+Pjo6aDkwYWYxZWNjYzI3YzBiNWSTAVZjb3JlOjpwdHI6OmRyb3BfaW5f\ -cGxhY2U8YXJyYXl2ZWM6OmVycm9yczo6Q2FwYWNpdHlFcnJvcjxbdTg7IDMyXT4+OjpoNTNkNGJlZj\ -cyZWQxN2IyYZQBPWNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxjb3JlOjpmbXQ6OkVycm9yPjo6aGMz\ -ZmY0OWFkMzQ0ODkyY2EAbwlwcm9kdWNlcnMCCGxhbmd1YWdlAQRSdXN0AAxwcm9jZXNzZWQtYnkDBX\ -J1c3RjHTEuNzQuMCAoNzllOTcxNmM5IDIwMjMtMTEtMTMpBndhbHJ1cwYwLjIwLjMMd2FzbS1iaW5k\ -Z2VuBjAuMi45MAAsD3RhcmdldF9mZWF0dXJlcwIrD211dGFibGUtZ2xvYmFscysIc2lnbi1leHQ=\ - ", - ); - const wasmModule = new WebAssembly.Module(wasmBytes); - return new WebAssembly.Instance(wasmModule, imports); -} - -function base64decode(b64) { - const binString = atob(b64); - const size = binString.length; - const bytes = new Uint8Array(size); - for (let i = 0; i < size; i++) { - bytes[i] = binString.charCodeAt(i); - } - return bytes; -} diff --git a/src/vendor/deno.land/std@0.217.0/datetime/format.ts b/src/vendor/deno.land/std@0.217.0/datetime/format.ts deleted file mode 100644 index f4e8b40d30e..00000000000 --- a/src/vendor/deno.land/std@0.217.0/datetime/format.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { DateTimeFormatter } from "./_common.ts"; - -/** - * Takes an input `date` and a `formatString` to format to a `string`. - * - * @example - * ```ts - * import { format } from "https://deno.land/std@$STD_VERSION/datetime/format.ts"; - * - * format(new Date(2019, 0, 20), "dd-MM-yyyy"); // output : "20-01-2019" - * format(new Date(2019, 0, 20), "yyyy-MM-dd"); // output : "2019-01-20" - * format(new Date(2019, 0, 20), "dd.MM.yyyy"); // output : "20.01.2019" - * format(new Date(2019, 0, 20, 16, 34), "MM-dd-yyyy HH:mm"); // output : "01-20-2019 16:34" - * format(new Date(2019, 0, 20, 16, 34), "MM-dd-yyyy hh:mm a"); // output : "01-20-2019 04:34 PM" - * format(new Date(2019, 0, 20, 16, 34), "HH:mm MM-dd-yyyy"); // output : "16:34 01-20-2019" - * format(new Date(2019, 0, 20, 16, 34, 23, 123), "MM-dd-yyyy HH:mm:ss.SSS"); // output : "01-20-2019 16:34:23.123" - * format(new Date(2019, 0, 20), "'today:' yyyy-MM-dd"); // output : "today: 2019-01-20" - * format(new Date("2019-01-20T16:34:23:123-05:00"), "yyyy-MM-dd HH:mm:ss", { utc: true }); - * // output : "2019-01-20 21:34:23" - * ``` - * - * @param date The date to be formatted. - * @param formatString The date time string format. - * @param options The options to customize the formatting of the date. - * @return The formatted date string. - */ -export function format( - date: Date, - formatString: string, - options: FormatOptions = {}, -): string { - const formatter = new DateTimeFormatter(formatString); - return formatter.format( - date, - options.utc ? { timeZone: "UTC" } : undefined, - ); -} - -/** Options for {@linkcode format}. */ -export interface FormatOptions { - /** Whether returns the formatted date in UTC instead of local time. */ - utc?: boolean; -} diff --git a/src/vendor/deno.land/std@0.217.0/datetime/is_leap.ts b/src/vendor/deno.land/std@0.217.0/datetime/is_leap.ts deleted file mode 100644 index 74e6c2d3dee..00000000000 --- a/src/vendor/deno.land/std@0.217.0/datetime/is_leap.ts +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Returns whether the given date or year (in number) is a leap year or not in the local time zone. - * based on: https://docs.microsoft.com/en-us/office/troubleshoot/excel/determine-a-leap-year - * - * @example - * ```ts - * import { isLeap } from "https://deno.land/std@$STD_VERSION/datetime/is_leap.ts"; - * - * isLeap(new Date("1970-01-02")); // => returns false - * isLeap(new Date("1972-01-02")); // => returns true - * isLeap(new Date("2000-01-02")); // => returns true - * isLeap(new Date("2100-01-02")); // => returns false - * isLeap(1972); // => returns true - * ``` - * - * Some dates may return different values depending on your timezone. - * - * @example - * ```ts - * import { isLeap } from "https://deno.land/std@$STD_VERSION/datetime/is_leap.ts"; - * - * isLeap(new Date("2000-01-01")); // => returns true if the local timezone is GMT+0, returns false if the local timezone is GMT-1 - * isLeap(2000); // => returns true regardless of the local timezone - * ``` - * - * @param year year in number or Date format - */ -export function isLeap(year: Date | number): boolean { - const yearNumber = year instanceof Date ? year.getFullYear() : year; - return isYearNumberALeapYear(yearNumber); -} - -/** - * Returns whether the given date or year (in number) is a leap year or not in UTC time. This always returns the same value regardless of the local timezone. - * based on: https://docs.microsoft.com/en-us/office/troubleshoot/excel/determine-a-leap-year - * - * @example - * ```ts - * import { isUtcLeap } from "https://deno.land/std@$STD_VERSION/datetime/is_leap.ts"; - * - * isUtcLeap(2000); // => returns true regardless of the local timezone - * isUtcLeap(new Date("2000-01-01")); // => returns true regardless of the local timezone - * isUtcLeap(new Date("January 1, 2000 00:00:00 GMT+00:00")); // => returns true regardless of the local timezone - * isUtcLeap(new Date("December 31, 2000 23:59:59 GMT+00:00")); // => returns true regardless of the local timezone - * isUtcLeap(new Date("January 1, 2000 00:00:00 GMT+01:00")); // => returns false regardless of the local timezone - * isUtcLeap(new Date("December 31, 2000 23:59:59 GMT-01:00")); // => returns false regardless of the local timezone - * isUtcLeap(new Date("January 1, 2001 00:00:00 GMT+01:00")); // => returns true regardless of the local timezone - * isUtcLeap(new Date("December 31, 1999 23:59:59 GMT-01:00")); // => returns true regardless of the local timezone - * ``` - * - * @param year year in number or Date format - */ -export function isUtcLeap(year: Date | number): boolean { - const yearNumber = year instanceof Date ? year.getUTCFullYear() : year; - return isYearNumberALeapYear(yearNumber); -} - -function isYearNumberALeapYear(yearNumber: number): boolean { - return ( - (yearNumber % 4 === 0 && yearNumber % 100 !== 0) || yearNumber % 400 === 0 - ); -} diff --git a/src/vendor/deno.land/std@0.217.0/datetime/parse.ts b/src/vendor/deno.land/std@0.217.0/datetime/parse.ts deleted file mode 100644 index 7487dd2b476..00000000000 --- a/src/vendor/deno.land/std@0.217.0/datetime/parse.ts +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { DateTimeFormatter } from "./_common.ts"; - -/** - * Takes an input `string` and a `formatString` to parse to a `date`. - * - * The following symbols from - * {@link https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table | unicode LDML} - * are supported: - * - * - `yyyy` - numeric year. - * - `yy` - 2-digit year. - * - `M` - numeric month. - * - `MM` - 2-digit month. - * - `d` - numeric day. - * - `dd` - 2-digit day. - * - * - `H` - numeric hour (0-23 hours). - * - `HH` - 2-digit hour (00-23 hours). - * - `h` - numeric hour (1-12 hours). - * - `hh` - 2-digit hour (01-12 hours). - * - `m` - numeric minute. - * - `mm` - 2-digit minute. - * - `s` - numeric second. - * - `ss` - 2-digit second. - * - `S` - 1-digit fractionalSecond. - * - `SS` - 2-digit fractionalSecond. - * - `SSS` - 3-digit fractionalSecond. - * - * - `a` - dayPeriod, either `AM` or `PM`. - * - * - `'foo'` - quoted literal. - * - `./-` - unquoted literal. - * - * @example - * ```ts - * import { parse } from "https://deno.land/std@$STD_VERSION/datetime/parse.ts"; - * - * parse("20-01-2019", "dd-MM-yyyy"); // output : new Date(2019, 0, 20) - * parse("2019-01-20", "yyyy-MM-dd"); // output : new Date(2019, 0, 20) - * parse("20.01.2019", "dd.MM.yyyy"); // output : new Date(2019, 0, 20) - * parse("01-20-2019 16:34", "MM-dd-yyyy HH:mm"); // output : new Date(2019, 0, 20, 16, 34) - * parse("01-20-2019 04:34 PM", "MM-dd-yyyy hh:mm a"); // output : new Date(2019, 0, 20, 16, 34) - * parse("16:34 01-20-2019", "HH:mm MM-dd-yyyy"); // output : new Date(2019, 0, 20, 16, 34) - * parse("01-20-2019 16:34:23.123", "MM-dd-yyyy HH:mm:ss.SSS"); // output : new Date(2019, 0, 20, 16, 34, 23, 123) - * ``` - * - * @param dateString Date string - * @param formatString Format string - * @return Parsed date - */ -export function parse(dateString: string, formatString: string): Date { - const formatter = new DateTimeFormatter(formatString); - const parts = formatter.parseToParts(dateString); - const sortParts = formatter.sortDateTimeFormatPart(parts); - return formatter.partsToDate(sortParts); -} diff --git a/src/vendor/deno.land/std@0.217.0/front_matter/_formats.ts b/src/vendor/deno.land/std@0.217.0/front_matter/_formats.ts deleted file mode 100644 index 06409be4164..00000000000 --- a/src/vendor/deno.land/std@0.217.0/front_matter/_formats.ts +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -type Delimiter = string | [begin: string, end: string]; - -const { isArray } = Array; - -function getBeginToken(delimiter: Delimiter): string { - return isArray(delimiter) ? delimiter[0] : delimiter; -} - -function getEndToken(delimiter: Delimiter): string { - return isArray(delimiter) ? delimiter[1] : delimiter; -} - -function createRegExp(...dv: Delimiter[]): [RegExp, RegExp] { - const beginPattern = "(" + dv.map(getBeginToken).join("|") + ")"; - const pattern = "^(" + - "\\ufeff?" + // Maybe byte order mark - beginPattern + - "$([\\s\\S]+?)" + - "^(?:" + dv.map(getEndToken).join("|") + ")\\s*" + - "$" + - (globalThis?.Deno?.build?.os === "windows" ? "\\r?" : "") + - "(?:\\n)?)"; - - return [ - new RegExp("^" + beginPattern + "$", "im"), - new RegExp(pattern, "im"), - ]; -} - -const [RX_RECOGNIZE_YAML, RX_YAML] = createRegExp( - ["---yaml", "---"], - "= yaml =", - "---", -); -const [RX_RECOGNIZE_TOML, RX_TOML] = createRegExp( - ["---toml", "---"], - "\\+\\+\\+", - "= toml =", -); -const [RX_RECOGNIZE_JSON, RX_JSON] = createRegExp( - ["---json", "---"], - "= json =", -); - -export const MAP_FORMAT_TO_RECOGNIZER_RX = { - yaml: RX_RECOGNIZE_YAML, - toml: RX_RECOGNIZE_TOML, - json: RX_RECOGNIZE_JSON, -} as const; - -export const MAP_FORMAT_TO_EXTRACTOR_RX = { - yaml: RX_YAML, - toml: RX_TOML, - json: RX_JSON, -} as const; diff --git a/src/vendor/deno.land/std@0.217.0/front_matter/create_extractor.ts b/src/vendor/deno.land/std@0.217.0/front_matter/create_extractor.ts deleted file mode 100644 index d746f0d21e7..00000000000 --- a/src/vendor/deno.land/std@0.217.0/front_matter/create_extractor.ts +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -import { - MAP_FORMAT_TO_EXTRACTOR_RX, - MAP_FORMAT_TO_RECOGNIZER_RX, -} from "./_formats.ts"; - -type Format = "yaml" | "toml" | "json" | "unknown"; - -/** Return type for {@linkcode Extractor}. */ -export type Extract = { - frontMatter: string; - body: string; - attrs: T; -}; - -/** Function return type for {@linkcode createExtractor}. */ -export type Extractor = >( - str: string, -) => Extract; - -/** Parser function type used alongside {@linkcode createExtractor}. */ -export type Parser = >(str: string) => T; - -function _extract( - str: string, - rx: RegExp, - parse: Parser, -): Extract { - const match = rx.exec(str); - if (!match || match.index !== 0) { - throw new TypeError("Unexpected end of input"); - } - const frontMatter = match.at(-1)?.replace(/^\s+|\s+$/g, "") || ""; - const attrs = parse(frontMatter) as T; - const body = str.replace(match[0], ""); - return { frontMatter, body, attrs }; -} - -/** - * Recognizes the format of the front matter in a string. Supports YAML, TOML and JSON. - * - * @param str String to recognize. - * @param formats A list of formats to recognize. Defaults to all supported formats. - * - * ```ts - * import { recognize } from "https://deno.land/std@$STD_VERSION/front_matter/mod.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * assertEquals(recognize("---\ntitle: Three dashes marks the spot\n---\n"), "yaml"); - * assertEquals(recognize("---toml\ntitle = 'Three dashes followed by format marks the spot'\n---\n"), "toml"); - * assertEquals(recognize("---json\n{\"title\": \"Three dashes followed by format marks the spot\"}\n---\n"), "json"); - * assertEquals(recognize("---xml\nThree dashes marks the spot\n---\n"), "unknown"); - * - * assertEquals(recognize("---json\nThree dashes marks the spot\n---\n", ["yaml"]), "unknown"); - */ -function recognize(str: string, formats?: Format[]): Format { - if (!formats) { - formats = Object.keys(MAP_FORMAT_TO_RECOGNIZER_RX) as Format[]; - } - - const [firstLine] = str.split(/(\r?\n)/) as [string]; - - for (const format of formats) { - if (format === "unknown") { - continue; - } - - if (MAP_FORMAT_TO_RECOGNIZER_RX[format].test(firstLine)) { - return format; - } - } - - return "unknown"; -} - -/** - * Factory that creates a function that extracts front matter from a string with the given parsers. - * Supports YAML, TOML and JSON. - * - * @param formats A descriptor containing Format-parser pairs to use for each format. - * @returns A function that extracts front matter from a string with the given parsers. - * - * ```ts - * import { createExtractor, Parser } from "https://deno.land/std@$STD_VERSION/front_matter/mod.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * import { parse as parseYAML } from "https://deno.land/std@$STD_VERSION/yaml/parse.ts"; - * import { parse as parseTOML } from "https://deno.land/std@$STD_VERSION/toml/parse.ts"; - * const extractYAML = createExtractor({ yaml: parseYAML as Parser }); - * const extractTOML = createExtractor({ toml: parseTOML as Parser }); - * const extractJSON = createExtractor({ json: JSON.parse as Parser }); - * const extractYAMLOrJSON = createExtractor({ - * yaml: parseYAML as Parser, - * json: JSON.parse as Parser, - * }); - * - * let { attrs, body, frontMatter } = extractYAML<{ title: string }>("---\ntitle: Three dashes marks the spot\n---\nferret"); - * assertEquals(attrs.title, "Three dashes marks the spot"); - * assertEquals(body, "ferret"); - * assertEquals(frontMatter, "title: Three dashes marks the spot"); - * - * ({ attrs, body, frontMatter } = extractTOML<{ title: string }>("---toml\ntitle = 'Three dashes followed by format marks the spot'\n---\n")); - * assertEquals(attrs.title, "Three dashes followed by format marks the spot"); - * assertEquals(body, ""); - * assertEquals(frontMatter, "title = 'Three dashes followed by format marks the spot'"); - * - * ({ attrs, body, frontMatter } = extractJSON<{ title: string }>("---json\n{\"title\": \"Three dashes followed by format marks the spot\"}\n---\ngoat")); - * assertEquals(attrs.title, "Three dashes followed by format marks the spot"); - * assertEquals(body, "goat"); - * assertEquals(frontMatter, "{\"title\": \"Three dashes followed by format marks the spot\"}"); - * - * ({ attrs, body, frontMatter } = extractYAMLOrJSON<{ title: string }>("---\ntitle: Three dashes marks the spot\n---\nferret")); - * assertEquals(attrs.title, "Three dashes marks the spot"); - * assertEquals(body, "ferret"); - * assertEquals(frontMatter, "title: Three dashes marks the spot"); - * - * ({ attrs, body, frontMatter } = extractYAMLOrJSON<{ title: string }>("---json\n{\"title\": \"Three dashes followed by format marks the spot\"}\n---\ngoat")); - * assertEquals(attrs.title, "Three dashes followed by format marks the spot"); - * assertEquals(body, "goat"); - * assertEquals(frontMatter, "{\"title\": \"Three dashes followed by format marks the spot\"}"); - * ``` - */ -export function createExtractor( - formats: Partial>, -): Extractor { - const formatKeys = Object.keys(formats) as Format[]; - - return function extract(str: string): Extract { - const format = recognize(str, formatKeys); - const parser = formats[format]; - - if (format === "unknown" || !parser) { - throw new TypeError(`Unsupported front matter format`); - } - - return _extract(str, MAP_FORMAT_TO_EXTRACTOR_RX[format], parser); - }; -} diff --git a/src/vendor/deno.land/std@0.217.0/front_matter/mod.ts b/src/vendor/deno.land/std@0.217.0/front_matter/mod.ts deleted file mode 100644 index 9e5585d8f5e..00000000000 --- a/src/vendor/deno.land/std@0.217.0/front_matter/mod.ts +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// Copyright (c) Jason Campbell. MIT license - -/** - * Extracts - * {@link https://daily-dev-tips.com/posts/what-exactly-is-frontmatter/ | front matter} - * from strings. - * - * {@linkcode createExtractor} and {@linkcode test} functions - * to handle many forms of front matter. - * - * Adapted from - * {@link https://github.com/jxson/front-matter/blob/36f139ef797bd9e5196a9ede03ef481d7fbca18e/index.js | jxson/front-matter}. - * - * Supported formats: - * - * - [`YAML`](./front_matter/yaml.ts) - * - [`TOML`](./front_matter/toml.ts) - * - [`JSON`](./front_matter/json.ts) - * - * ### Basic usage - * - * example.md - * - * ```markdown - * --- - * module: front_matter - * tags: - * - yaml - * - toml - * - json - * --- - * - * deno is awesome - * ``` - * - * example.ts - * - * ```ts - * import { extract } from "https://deno.land/std@$STD_VERSION/front_matter/any.ts"; - * import { test } from "https://deno.land/std@$STD_VERSION/front_matter/test.ts"; - * - * const str = await Deno.readTextFile("./example.md"); - * - * if (test(str)) { - * console.log(extract(str)); - * } else { - * console.log("document doesn't contain front matter"); - * } - * ``` - * - * ```sh - * $ deno run ./example.ts - * { - * frontMatter: "module: front_matter\ntags:\n - yaml\n - toml\n - json", - * body: "deno is awesome", - * attrs: { module: "front_matter", tags: [ "yaml", "toml", "json" ] } - * } - * ``` - * - * The above example recognizes any of the supported formats, extracts metadata and - * parses accordingly. Please note that in this case both the [YAML](#yaml) and - * [TOML](#toml) parsers will be imported as dependencies. - * - * If you need only one specific format then you can import the file named - * respectively from [here](./front_matter). - * - * ### Advanced usage - * - * ```ts - * import { test as _test } from "https://deno.land/std@$STD_VERSION/front_matter/test.ts"; - * import { - * createExtractor, - * Parser, - * } from "https://deno.land/std@$STD_VERSION/front_matter/mod.ts"; - * import { parse } from "https://deno.land/std@$STD_VERSION/toml/parse.ts"; - * - * const extract = createExtractor({ - * "toml": parse as Parser, - * "json": JSON.parse as Parser, - * }); - * - * export function test(str: string): boolean { - * return _test(str, ["toml", "json"]); - * } - * ``` - * - * In this setup `extract()` and `test()` will work with TOML and JSON and only. - * This way the YAML parser is not loaded if not needed. You can cherry-pick which - * combination of formats are you supporting based on your needs. - * - * ### Delimiters - * - * #### YAML - * - * ```markdown - * --- - * these: are - * --- - * ``` - * - * ```markdown - * ---yaml - * all: recognized - * --- - * ``` - * - * ```markdown - * = yaml = - * as: yaml - * = yaml = - * ``` - * - * #### TOML - * - * ```markdown - * ---toml - * this = 'is' - * --- - * ``` - * - * ```markdown - * = toml = - * parsed = 'as' - * toml = 'data' - * = toml = - * ``` - * - * ```markdown - * +++ - * is = 'that' - * not = 'cool?' - * +++ - * ``` - * - * #### JSON - * - * ```markdown - * ---json - * { - * "and": "this" - * } - * --- - * ``` - * - * ```markdown - * { - * "is": "JSON" - * } - * ``` - * - * @module - */ - -export * from "./create_extractor.ts"; -export * from "./test.ts"; diff --git a/src/vendor/deno.land/std@0.217.0/front_matter/test.ts b/src/vendor/deno.land/std@0.217.0/front_matter/test.ts deleted file mode 100644 index 616a877e37a..00000000000 --- a/src/vendor/deno.land/std@0.217.0/front_matter/test.ts +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -import { MAP_FORMAT_TO_EXTRACTOR_RX } from "./_formats.ts"; - -type Format = "yaml" | "toml" | "json" | "unknown"; - -/** - * Tests if a string has valid front matter. Supports YAML, TOML and JSON. - * - * @param str String to test. - * @param formats A list of formats to test for. Defaults to all supported formats. - * - * ```ts - * import { test } from "https://deno.land/std@$STD_VERSION/front_matter/mod.ts"; - * import { assert } from "https://deno.land/std@$STD_VERSION/assert/assert.ts"; - * - * assert(test("---\ntitle: Three dashes marks the spot\n---\n")); - * assert(test("---toml\ntitle = 'Three dashes followed by format marks the spot'\n---\n")); - * assert(test("---json\n{\"title\": \"Three dashes followed by format marks the spot\"}\n---\n")); - * - * assert(!test("---json\n{\"title\": \"Three dashes followed by format marks the spot\"}\n---\n", ["yaml"])); - * ``` - */ -export function test( - str: string, - formats?: ("yaml" | "toml" | "json" | "unknown")[], -): boolean { - if (!formats) { - formats = Object.keys(MAP_FORMAT_TO_EXTRACTOR_RX) as Format[]; - } - - for (const format of formats) { - if (format === "unknown") { - throw new TypeError("Unable to test for unknown front matter format"); - } - - const match = MAP_FORMAT_TO_EXTRACTOR_RX[format].exec(str); - if (match?.index === 0) { - return true; - } - } - - return false; -} diff --git a/src/vendor/deno.land/std@0.217.0/fs/ensure_link.ts b/src/vendor/deno.land/std@0.217.0/fs/ensure_link.ts deleted file mode 100644 index 410ac738399..00000000000 --- a/src/vendor/deno.land/std@0.217.0/fs/ensure_link.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { dirname } from "../path/dirname.ts"; -import { ensureDir, ensureDirSync } from "./ensure_dir.ts"; -import { toPathString } from "./_to_path_string.ts"; - -/** - * Ensures that the hard link exists. - * If the directory structure does not exist, it is created. - * - * @example - * ```ts - * import { ensureSymlink } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; - * - * ensureSymlink("./folder/targetFile.dat", "./folder/targetFile.link.dat"); // returns promise - * ``` - * - * @param src the source file path. Directory hard links are not allowed. - * @param dest the destination link path - */ -export async function ensureLink(src: string | URL, dest: string | URL) { - dest = toPathString(dest); - await ensureDir(dirname(dest)); - - await Deno.link(toPathString(src), dest); -} - -/** - * Ensures that the hard link exists. - * If the directory structure does not exist, it is created. - * - * @example - * ```ts - * import { ensureSymlinkSync } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; - * - * ensureSymlinkSync("./folder/targetFile.dat", "./folder/targetFile.link.dat"); // void - * ``` - * - * @param src the source file path. Directory hard links are not allowed. - * @param dest the destination link path - */ -export function ensureLinkSync(src: string | URL, dest: string | URL) { - dest = toPathString(dest); - ensureDirSync(dirname(dest)); - - Deno.linkSync(toPathString(src), dest); -} diff --git a/src/vendor/deno.land/std@0.217.0/fs/ensure_symlink.ts b/src/vendor/deno.land/std@0.217.0/fs/ensure_symlink.ts deleted file mode 100644 index 1345718aa42..00000000000 --- a/src/vendor/deno.land/std@0.217.0/fs/ensure_symlink.ts +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { dirname } from "../path/dirname.ts"; -import { resolve } from "../path/resolve.ts"; -import { ensureDir, ensureDirSync } from "./ensure_dir.ts"; -import { getFileInfoType } from "./_get_file_info_type.ts"; -import { toPathString } from "./_to_path_string.ts"; - -const isWindows = Deno.build.os === "windows"; - -function resolveSymlinkTarget(target: string | URL, linkName: string | URL) { - if (typeof target !== "string") return target; // URL is always absolute path - if (typeof linkName === "string") { - return resolve(dirname(linkName), target); - } else { - return new URL(target, linkName); - } -} - -/** - * Ensures that the link exists, and points to a valid file. - * If the directory structure does not exist, it is created. - * - * @param target the source file path - * @param linkName the destination link path - */ -export async function ensureSymlink( - target: string | URL, - linkName: string | URL, -) { - const targetRealPath = resolveSymlinkTarget(target, linkName); - const srcStatInfo = await Deno.lstat(targetRealPath); - const srcFilePathType = getFileInfoType(srcStatInfo); - - await ensureDir(dirname(toPathString(linkName))); - - const options: Deno.SymlinkOptions | undefined = isWindows - ? { - type: srcFilePathType === "dir" ? "dir" : "file", - } - : undefined; - - try { - await Deno.symlink(target, linkName, options); - } catch (error) { - if (!(error instanceof Deno.errors.AlreadyExists)) { - throw error; - } - } -} - -/** - * Ensures that the link exists, and points to a valid file. - * If the directory structure does not exist, it is created. - * - * @param target the source file path - * @param linkName the destination link path - */ -export function ensureSymlinkSync( - target: string | URL, - linkName: string | URL, -) { - const targetRealPath = resolveSymlinkTarget(target, linkName); - const srcStatInfo = Deno.lstatSync(targetRealPath); - const srcFilePathType = getFileInfoType(srcStatInfo); - - ensureDirSync(dirname(toPathString(linkName))); - - const options: Deno.SymlinkOptions | undefined = isWindows - ? { - type: srcFilePathType === "dir" ? "dir" : "file", - } - : undefined; - - try { - Deno.symlinkSync(target, linkName, options); - } catch (error) { - if (!(error instanceof Deno.errors.AlreadyExists)) { - throw error; - } - } -} diff --git a/src/vendor/deno.land/std@0.217.0/fs/exists.ts b/src/vendor/deno.land/std@0.217.0/fs/exists.ts deleted file mode 100644 index fdbb3730662..00000000000 --- a/src/vendor/deno.land/std@0.217.0/fs/exists.ts +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -/** Options for {@linkcode exists} and {@linkcode existsSync.} */ -export interface ExistsOptions { - /** - * When `true`, will check if the path is readable by the user as well. - * @default {false} - */ - isReadable?: boolean; - /** - * When `true`, will check if the path is a directory as well. - * Directory symlinks are included. - * @default {false} - */ - isDirectory?: boolean; - /** - * When `true`, will check if the path is a file as well. - * File symlinks are included. - * @default {false} - */ - isFile?: boolean; -} - -/** - * Test whether or not the given path exists by checking with the file system. Please consider to check if the path is readable and either a file or a directory by providing additional `options`: - * - * ```ts - * import { exists } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; - * const isReadableDir = await exists("./foo", { - * isReadable: true, - * isDirectory: true - * }); - * const isReadableFile = await exists("./bar", { - * isReadable: true, - * isFile: true - * }); - * ``` - * - * Note: Do not use this function if performing a check before another operation on that file. Doing so creates a race condition. Instead, perform the actual file operation directly. - * - * Bad: - * ```ts - * import { exists } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; - * - * if (await exists("./foo")) { - * await Deno.remove("./foo"); - * } - * ``` - * - * Good: - * ```ts - * // Notice no use of exists - * try { - * await Deno.remove("./foo", { recursive: true }); - * } catch (error) { - * if (!(error instanceof Deno.errors.NotFound)) { - * throw error; - * } - * // Do nothing... - * } - * ``` - * @see https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use - */ -export async function exists( - path: string | URL, - options?: ExistsOptions, -): Promise { - try { - const stat = await Deno.stat(path); - if ( - options && - (options.isReadable || options.isDirectory || options.isFile) - ) { - if (options.isDirectory && options.isFile) { - throw new TypeError( - "ExistsOptions.options.isDirectory and ExistsOptions.options.isFile must not be true together.", - ); - } - if ( - (options.isDirectory && !stat.isDirectory) || - (options.isFile && !stat.isFile) - ) { - return false; - } - if (options.isReadable) { - if (stat.mode === null) { - return true; // Exclusive on Non-POSIX systems - } - if (Deno.uid() === stat.uid) { - return (stat.mode & 0o400) === 0o400; // User is owner and can read? - } else if (Deno.gid() === stat.gid) { - return (stat.mode & 0o040) === 0o040; // User group is owner and can read? - } - return (stat.mode & 0o004) === 0o004; // Others can read? - } - } - return true; - } catch (error) { - if (error instanceof Deno.errors.NotFound) { - return false; - } - if (error instanceof Deno.errors.PermissionDenied) { - if ( - (await Deno.permissions.query({ name: "read", path })).state === - "granted" - ) { - // --allow-read not missing - return !options?.isReadable; // PermissionDenied was raised by file system, so the item exists, but can't be read - } - } - throw error; - } -} - -/** - * Test whether or not the given path exists by checking with the file system. Please consider to check if the path is readable and either a file or a directory by providing additional `options`: - * - * ```ts - * import { existsSync } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; - * const isReadableDir = existsSync("./foo", { - * isReadable: true, - * isDirectory: true - * }); - * const isReadableFile = existsSync("./bar", { - * isReadable: true, - * isFile: true - * }); - * ``` - * - * Note: do not use this function if performing a check before another operation on that file. Doing so creates a race condition. Instead, perform the actual file operation directly. - * - * Bad: - * ```ts - * import { existsSync } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; - * - * if (existsSync("./foo")) { - * Deno.removeSync("./foo"); - * } - * ``` - * - * Good: - * ```ts - * // Notice no use of existsSync - * try { - * Deno.removeSync("./foo", { recursive: true }); - * } catch (error) { - * if (!(error instanceof Deno.errors.NotFound)) { - * throw error; - * } - * // Do nothing... - * } - * ``` - * @see https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use - */ -export function existsSync( - path: string | URL, - options?: ExistsOptions, -): boolean { - try { - const stat = Deno.statSync(path); - if ( - options && - (options.isReadable || options.isDirectory || options.isFile) - ) { - if (options.isDirectory && options.isFile) { - throw new TypeError( - "ExistsOptions.options.isDirectory and ExistsOptions.options.isFile must not be true together.", - ); - } - if ( - (options.isDirectory && !stat.isDirectory) || - (options.isFile && !stat.isFile) - ) { - return false; - } - if (options.isReadable) { - if (stat.mode === null) { - return true; // Exclusive on Non-POSIX systems - } - if (Deno.uid() === stat.uid) { - return (stat.mode & 0o400) === 0o400; // User is owner and can read? - } else if (Deno.gid() === stat.gid) { - return (stat.mode & 0o040) === 0o040; // User group is owner and can read? - } - return (stat.mode & 0o004) === 0o004; // Others can read? - } - } - return true; - } catch (error) { - if (error instanceof Deno.errors.NotFound) { - return false; - } - if (error instanceof Deno.errors.PermissionDenied) { - if ( - Deno.permissions.querySync({ name: "read", path }).state === "granted" - ) { - // --allow-read not missing - return !options?.isReadable; // PermissionDenied was raised by file system, so the item exists, but can't be read - } - } - throw error; - } -} diff --git a/src/vendor/deno.land/std@0.217.0/io/buf_reader.ts b/src/vendor/deno.land/std@0.217.0/io/buf_reader.ts deleted file mode 100644 index 7118e011c4a..00000000000 --- a/src/vendor/deno.land/std@0.217.0/io/buf_reader.ts +++ /dev/null @@ -1,427 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { assert } from "../assert/assert.ts"; -import { copy } from "../bytes/copy.ts"; -import type { Reader } from "./types.ts"; - -const DEFAULT_BUF_SIZE = 4096; -const MIN_BUF_SIZE = 16; -const MAX_CONSECUTIVE_EMPTY_READS = 100; -const CR = "\r".charCodeAt(0); -const LF = "\n".charCodeAt(0); - -/** - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. - */ -export class BufferFullError extends Error { - override name = "BufferFullError"; - constructor(public partial: Uint8Array) { - super("Buffer full"); - } -} - -/** - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. - */ -export class PartialReadError extends Error { - override name = "PartialReadError"; - partial?: Uint8Array; - constructor() { - super("Encountered UnexpectedEof, data only partially read"); - } -} - -/** - * Result type returned by of BufReader.readLine(). - * - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. - */ -export interface ReadLineResult { - line: Uint8Array; - more: boolean; -} - -/** - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. - */ -export class BufReader implements Reader { - #buf!: Uint8Array; - #rd!: Reader; // Reader provided by caller. - #r = 0; // buf read position. - #w = 0; // buf write position. - #eof = false; - // private lastByte: number; - // private lastCharSize: number; - - /** return new BufReader unless r is BufReader */ - static create(r: Reader, size: number = DEFAULT_BUF_SIZE): BufReader { - return r instanceof BufReader ? r : new BufReader(r, size); - } - - constructor(rd: Reader, size: number = DEFAULT_BUF_SIZE) { - if (size < MIN_BUF_SIZE) { - size = MIN_BUF_SIZE; - } - this.#reset(new Uint8Array(size), rd); - } - - /** Returns the size of the underlying buffer in bytes. */ - size(): number { - return this.#buf.byteLength; - } - - buffered(): number { - return this.#w - this.#r; - } - - // Reads a new chunk into the buffer. - #fill = async () => { - // Slide existing data to beginning. - if (this.#r > 0) { - this.#buf.copyWithin(0, this.#r, this.#w); - this.#w -= this.#r; - this.#r = 0; - } - - if (this.#w >= this.#buf.byteLength) { - throw Error("bufio: tried to fill full buffer"); - } - - // Read new data: try a limited number of times. - for (let i = MAX_CONSECUTIVE_EMPTY_READS; i > 0; i--) { - const rr = await this.#rd.read(this.#buf.subarray(this.#w)); - if (rr === null) { - this.#eof = true; - return; - } - assert(rr >= 0, "negative read"); - this.#w += rr; - if (rr > 0) { - return; - } - } - - throw new Error( - `No progress after ${MAX_CONSECUTIVE_EMPTY_READS} read() calls`, - ); - }; - - /** Discards any buffered data, resets all state, and switches - * the buffered reader to read from r. - */ - reset(r: Reader) { - this.#reset(this.#buf, r); - } - - #reset = (buf: Uint8Array, rd: Reader) => { - this.#buf = buf; - this.#rd = rd; - this.#eof = false; - // this.lastByte = -1; - // this.lastCharSize = -1; - }; - - /** reads data into p. - * It returns the number of bytes read into p. - * The bytes are taken from at most one Read on the underlying Reader, - * hence n may be less than len(p). - * To read exactly len(p) bytes, use io.ReadFull(b, p). - */ - async read(p: Uint8Array): Promise { - let rr: number | null = p.byteLength; - if (p.byteLength === 0) return rr; - - if (this.#r === this.#w) { - if (p.byteLength >= this.#buf.byteLength) { - // Large read, empty buffer. - // Read directly into p to avoid copy. - const rr = await this.#rd.read(p); - const nread = rr ?? 0; - assert(nread >= 0, "negative read"); - // if (rr.nread > 0) { - // this.lastByte = p[rr.nread - 1]; - // this.lastCharSize = -1; - // } - return rr; - } - - // One read. - // Do not use this.fill, which will loop. - this.#r = 0; - this.#w = 0; - rr = await this.#rd.read(this.#buf); - if (rr === 0 || rr === null) return rr; - assert(rr >= 0, "negative read"); - this.#w += rr; - } - - // copy as much as we can - const copied = copy(this.#buf.subarray(this.#r, this.#w), p, 0); - this.#r += copied; - // this.lastByte = this.buf[this.r - 1]; - // this.lastCharSize = -1; - return copied; - } - - /** reads exactly `p.length` bytes into `p`. - * - * If successful, `p` is returned. - * - * If the end of the underlying stream has been reached, and there are no more - * bytes available in the buffer, `readFull()` returns `null` instead. - * - * An error is thrown if some bytes could be read, but not enough to fill `p` - * entirely before the underlying stream reported an error or EOF. Any error - * thrown will have a `partial` property that indicates the slice of the - * buffer that has been successfully filled with data. - * - * Ported from https://golang.org/pkg/io/#ReadFull - */ - async readFull(p: Uint8Array): Promise { - let bytesRead = 0; - while (bytesRead < p.length) { - try { - const rr = await this.read(p.subarray(bytesRead)); - if (rr === null) { - if (bytesRead === 0) { - return null; - } else { - throw new PartialReadError(); - } - } - bytesRead += rr; - } catch (err) { - if (err instanceof PartialReadError) { - err.partial = p.subarray(0, bytesRead); - } - throw err; - } - } - return p; - } - - /** Returns the next byte [0, 255] or `null`. */ - async readByte(): Promise { - while (this.#r === this.#w) { - if (this.#eof) return null; - await this.#fill(); // buffer is empty. - } - const c = this.#buf[this.#r]; - this.#r++; - // this.lastByte = c; - return c; - } - - /** readString() reads until the first occurrence of delim in the input, - * returning a string containing the data up to and including the delimiter. - * If ReadString encounters an error before finding a delimiter, - * it returns the data read before the error and the error itself - * (often `null`). - * ReadString returns err !== null if and only if the returned data does not end - * in delim. - * For simple uses, a Scanner may be more convenient. - */ - async readString(delim: string): Promise { - if (delim.length !== 1) { - throw new Error("Delimiter should be a single character"); - } - const buffer = await this.readSlice(delim.charCodeAt(0)); - if (buffer === null) return null; - return new TextDecoder().decode(buffer); - } - - /** `readLine()` is a low-level line-reading primitive. Most callers should - * use `readString('\n')` instead or use a Scanner. - * - * `readLine()` tries to return a single line, not including the end-of-line - * bytes. If the line was too long for the buffer then `more` is set and the - * beginning of the line is returned. The rest of the line will be returned - * from future calls. `more` will be false when returning the last fragment - * of the line. The returned buffer is only valid until the next call to - * `readLine()`. - * - * The text returned from ReadLine does not include the line end ("\r\n" or - * "\n"). - * - * When the end of the underlying stream is reached, the final bytes in the - * stream are returned. No indication or error is given if the input ends - * without a final line end. When there are no more trailing bytes to read, - * `readLine()` returns `null`. - * - * Calling `unreadByte()` after `readLine()` will always unread the last byte - * read (possibly a character belonging to the line end) even if that byte is - * not part of the line returned by `readLine()`. - */ - async readLine(): Promise { - let line: Uint8Array | null = null; - - try { - line = await this.readSlice(LF); - } catch (err) { - let partial; - if (err instanceof PartialReadError) { - partial = err.partial; - assert( - partial instanceof Uint8Array, - "bufio: caught error from `readSlice()` without `partial` property", - ); - } - - // Don't throw if `readSlice()` failed with `BufferFullError`, instead we - // just return whatever is available and set the `more` flag. - if (!(err instanceof BufferFullError)) { - throw err; - } - - partial = err.partial; - - // Handle the case where "\r\n" straddles the buffer. - if ( - !this.#eof && partial && - partial.byteLength > 0 && - partial[partial.byteLength - 1] === CR - ) { - // Put the '\r' back on buf and drop it from line. - // Let the next call to ReadLine check for "\r\n". - assert(this.#r > 0, "bufio: tried to rewind past start of buffer"); - this.#r--; - partial = partial.subarray(0, partial.byteLength - 1); - } - - if (partial) { - return { line: partial, more: !this.#eof }; - } - } - - if (line === null) { - return null; - } - - if (line.byteLength === 0) { - return { line, more: false }; - } - - if (line[line.byteLength - 1] === LF) { - let drop = 1; - if (line.byteLength > 1 && line[line.byteLength - 2] === CR) { - drop = 2; - } - line = line.subarray(0, line.byteLength - drop); - } - return { line, more: false }; - } - - /** `readSlice()` reads until the first occurrence of `delim` in the input, - * returning a slice pointing at the bytes in the buffer. The bytes stop - * being valid at the next read. - * - * If `readSlice()` encounters an error before finding a delimiter, or the - * buffer fills without finding a delimiter, it throws an error with a - * `partial` property that contains the entire buffer. - * - * If `readSlice()` encounters the end of the underlying stream and there are - * any bytes left in the buffer, the rest of the buffer is returned. In other - * words, EOF is always treated as a delimiter. Once the buffer is empty, - * it returns `null`. - * - * Because the data returned from `readSlice()` will be overwritten by the - * next I/O operation, most clients should use `readString()` instead. - */ - async readSlice(delim: number): Promise { - let s = 0; // search start index - let slice: Uint8Array | undefined; - - while (true) { - // Search buffer. - let i = this.#buf.subarray(this.#r + s, this.#w).indexOf(delim); - if (i >= 0) { - i += s; - slice = this.#buf.subarray(this.#r, this.#r + i + 1); - this.#r += i + 1; - break; - } - - // EOF? - if (this.#eof) { - if (this.#r === this.#w) { - return null; - } - slice = this.#buf.subarray(this.#r, this.#w); - this.#r = this.#w; - break; - } - - // Buffer full? - if (this.buffered() >= this.#buf.byteLength) { - this.#r = this.#w; - // #4521 The internal buffer should not be reused across reads because it causes corruption of data. - const oldbuf = this.#buf; - const newbuf = this.#buf.slice(0); - this.#buf = newbuf; - throw new BufferFullError(oldbuf); - } - - s = this.#w - this.#r; // do not rescan area we scanned before - - // Buffer is not full. - try { - await this.#fill(); - } catch (err) { - if (err instanceof PartialReadError) { - err.partial = slice; - } - throw err; - } - } - - // Handle last byte, if any. - // const i = slice.byteLength - 1; - // if (i >= 0) { - // this.lastByte = slice[i]; - // this.lastCharSize = -1 - // } - - return slice; - } - - /** `peek()` returns the next `n` bytes without advancing the reader. The - * bytes stop being valid at the next read call. - * - * When the end of the underlying stream is reached, but there are unread - * bytes left in the buffer, those bytes are returned. If there are no bytes - * left in the buffer, it returns `null`. - * - * If an error is encountered before `n` bytes are available, `peek()` throws - * an error with the `partial` property set to a slice of the buffer that - * contains the bytes that were available before the error occurred. - */ - async peek(n: number): Promise { - if (n < 0) { - throw Error("negative count"); - } - - let avail = this.#w - this.#r; - while (avail < n && avail < this.#buf.byteLength && !this.#eof) { - try { - await this.#fill(); - } catch (err) { - if (err instanceof PartialReadError) { - err.partial = this.#buf.subarray(this.#r, this.#w); - } - throw err; - } - avail = this.#w - this.#r; - } - - if (avail === 0 && this.#eof) { - return null; - } else if (avail < n && this.#eof) { - return this.#buf.subarray(this.#r, this.#r + avail); - } else if (avail < n) { - throw new BufferFullError(this.#buf.subarray(this.#r, this.#w)); - } - - return this.#buf.subarray(this.#r, this.#r + n); - } -} diff --git a/src/vendor/deno.land/std@0.217.0/io/buf_writer.ts b/src/vendor/deno.land/std@0.217.0/io/buf_writer.ts deleted file mode 100644 index 09def5144a0..00000000000 --- a/src/vendor/deno.land/std@0.217.0/io/buf_writer.ts +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { copy } from "../bytes/copy.ts"; -import type { Writer, WriterSync } from "./types.ts"; - -const DEFAULT_BUF_SIZE = 4096; - -abstract class AbstractBufBase { - buf: Uint8Array; - usedBufferBytes = 0; - err: Error | null = null; - - constructor(buf: Uint8Array) { - this.buf = buf; - } - - /** Size returns the size of the underlying buffer in bytes. */ - size(): number { - return this.buf.byteLength; - } - - /** Returns how many bytes are unused in the buffer. */ - available(): number { - return this.buf.byteLength - this.usedBufferBytes; - } - - /** buffered returns the number of bytes that have been written into the - * current buffer. - */ - buffered(): number { - return this.usedBufferBytes; - } -} - -/** BufWriter implements buffering for an deno.Writer object. - * If an error occurs writing to a Writer, no more data will be - * accepted and all subsequent writes, and flush(), will return the error. - * After all data has been written, the client should call the - * flush() method to guarantee all data has been forwarded to - * the underlying deno.Writer. - * - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. - */ -export class BufWriter extends AbstractBufBase implements Writer { - #writer: Writer; - - /** return new BufWriter unless writer is BufWriter */ - static create(writer: Writer, size: number = DEFAULT_BUF_SIZE): BufWriter { - return writer instanceof BufWriter ? writer : new BufWriter(writer, size); - } - - constructor(writer: Writer, size: number = DEFAULT_BUF_SIZE) { - super(new Uint8Array(size <= 0 ? DEFAULT_BUF_SIZE : size)); - this.#writer = writer; - } - - /** Discards any unflushed buffered data, clears any error, and - * resets buffer to write its output to w. - */ - reset(w: Writer) { - this.err = null; - this.usedBufferBytes = 0; - this.#writer = w; - } - - /** Flush writes any buffered data to the underlying io.Writer. */ - async flush() { - if (this.err !== null) throw this.err; - if (this.usedBufferBytes === 0) return; - - try { - const p = this.buf.subarray(0, this.usedBufferBytes); - let nwritten = 0; - while (nwritten < p.length) { - nwritten += await this.#writer.write(p.subarray(nwritten)); - } - } catch (e) { - if (e instanceof Error) { - this.err = e; - } - throw e; - } - - this.buf = new Uint8Array(this.buf.length); - this.usedBufferBytes = 0; - } - - /** Writes the contents of `data` into the buffer. If the contents won't fully - * fit into the buffer, those bytes that are copied into the buffer will be flushed - * to the writer and the remaining bytes are then copied into the now empty buffer. - * - * @return the number of bytes written to the buffer. - */ - async write(data: Uint8Array): Promise { - if (this.err !== null) throw this.err; - if (data.length === 0) return 0; - - let totalBytesWritten = 0; - let numBytesWritten = 0; - while (data.byteLength > this.available()) { - if (this.buffered() === 0) { - // Large write, empty buffer. - // Write directly from data to avoid copy. - try { - numBytesWritten = await this.#writer.write(data); - } catch (e) { - if (e instanceof Error) { - this.err = e; - } - throw e; - } - } else { - numBytesWritten = copy(data, this.buf, this.usedBufferBytes); - this.usedBufferBytes += numBytesWritten; - await this.flush(); - } - totalBytesWritten += numBytesWritten; - data = data.subarray(numBytesWritten); - } - - numBytesWritten = copy(data, this.buf, this.usedBufferBytes); - this.usedBufferBytes += numBytesWritten; - totalBytesWritten += numBytesWritten; - return totalBytesWritten; - } -} - -/** BufWriterSync implements buffering for a deno.WriterSync object. - * If an error occurs writing to a WriterSync, no more data will be - * accepted and all subsequent writes, and flush(), will return the error. - * After all data has been written, the client should call the - * flush() method to guarantee all data has been forwarded to - * the underlying deno.WriterSync. - * - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. - */ -export class BufWriterSync extends AbstractBufBase implements WriterSync { - #writer: WriterSync; - - /** return new BufWriterSync unless writer is BufWriterSync */ - static create( - writer: WriterSync, - size: number = DEFAULT_BUF_SIZE, - ): BufWriterSync { - return writer instanceof BufWriterSync - ? writer - : new BufWriterSync(writer, size); - } - - constructor(writer: WriterSync, size: number = DEFAULT_BUF_SIZE) { - super(new Uint8Array(size <= 0 ? DEFAULT_BUF_SIZE : size)); - this.#writer = writer; - } - - /** Discards any unflushed buffered data, clears any error, and - * resets buffer to write its output to w. - */ - reset(w: WriterSync) { - this.err = null; - this.usedBufferBytes = 0; - this.#writer = w; - } - - /** Flush writes any buffered data to the underlying io.WriterSync. */ - flush() { - if (this.err !== null) throw this.err; - if (this.usedBufferBytes === 0) return; - - try { - const p = this.buf.subarray(0, this.usedBufferBytes); - let nwritten = 0; - while (nwritten < p.length) { - nwritten += this.#writer.writeSync(p.subarray(nwritten)); - } - } catch (e) { - if (e instanceof Error) { - this.err = e; - } - throw e; - } - - this.buf = new Uint8Array(this.buf.length); - this.usedBufferBytes = 0; - } - - /** Writes the contents of `data` into the buffer. If the contents won't fully - * fit into the buffer, those bytes that can are copied into the buffer, the - * buffer is the flushed to the writer and the remaining bytes are copied into - * the now empty buffer. - * - * @return the number of bytes written to the buffer. - */ - writeSync(data: Uint8Array): number { - if (this.err !== null) throw this.err; - if (data.length === 0) return 0; - - let totalBytesWritten = 0; - let numBytesWritten = 0; - while (data.byteLength > this.available()) { - if (this.buffered() === 0) { - // Large write, empty buffer. - // Write directly from data to avoid copy. - try { - numBytesWritten = this.#writer.writeSync(data); - } catch (e) { - if (e instanceof Error) { - this.err = e; - } - throw e; - } - } else { - numBytesWritten = copy(data, this.buf, this.usedBufferBytes); - this.usedBufferBytes += numBytesWritten; - this.flush(); - } - totalBytesWritten += numBytesWritten; - data = data.subarray(numBytesWritten); - } - - numBytesWritten = copy(data, this.buf, this.usedBufferBytes); - this.usedBufferBytes += numBytesWritten; - totalBytesWritten += numBytesWritten; - return totalBytesWritten; - } -} diff --git a/src/vendor/deno.land/std@0.217.0/io/buffer.ts b/src/vendor/deno.land/std@0.217.0/io/buffer.ts deleted file mode 100644 index 46c9555fc57..00000000000 --- a/src/vendor/deno.land/std@0.217.0/io/buffer.ts +++ /dev/null @@ -1,250 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { assert } from "../assert/assert.ts"; -import { copy } from "../bytes/copy.ts"; -import type { Reader, ReaderSync, Writer, WriterSync } from "./types.ts"; - -// MIN_READ is the minimum ArrayBuffer size passed to a read call by -// buffer.ReadFrom. As long as the Buffer has at least MIN_READ bytes beyond -// what is required to hold the contents of r, readFrom() will not grow the -// underlying buffer. -const MIN_READ = 32 * 1024; -const MAX_SIZE = 2 ** 32 - 2; - -/** A variable-sized buffer of bytes with `read()` and `write()` methods. - * - * Buffer is almost always used with some I/O like files and sockets. It allows - * one to buffer up a download from a socket. Buffer grows and shrinks as - * necessary. - * - * Buffer is NOT the same thing as Node's Buffer. Node's Buffer was created in - * 2009 before JavaScript had the concept of ArrayBuffers. It's simply a - * non-standard ArrayBuffer. - * - * ArrayBuffer is a fixed memory allocation. Buffer is implemented on top of - * ArrayBuffer. - * - * Based on {@link https://golang.org/pkg/bytes/#Buffer | Go Buffer}. - */ - -export class Buffer implements Writer, WriterSync, Reader, ReaderSync { - #buf: Uint8Array; // contents are the bytes buf[off : len(buf)] - #off = 0; // read at buf[off], write at buf[buf.byteLength] - - constructor(ab?: ArrayBufferLike | ArrayLike) { - this.#buf = ab === undefined ? new Uint8Array(0) : new Uint8Array(ab); - } - - /** Returns a slice holding the unread portion of the buffer. - * - * The slice is valid for use only until the next buffer modification (that - * is, only until the next call to a method like `read()`, `write()`, - * `reset()`, or `truncate()`). If `options.copy` is false the slice aliases the buffer content at - * least until the next buffer modification, so immediate changes to the - * slice will affect the result of future reads. - * @param [options={ copy: true }] - */ - bytes(options = { copy: true }): Uint8Array { - if (options.copy === false) return this.#buf.subarray(this.#off); - return this.#buf.slice(this.#off); - } - - /** Returns whether the unread portion of the buffer is empty. */ - empty(): boolean { - return this.#buf.byteLength <= this.#off; - } - - /** A read only number of bytes of the unread portion of the buffer. */ - get length(): number { - return this.#buf.byteLength - this.#off; - } - - /** The read only capacity of the buffer's underlying byte slice, that is, - * the total space allocated for the buffer's data. */ - get capacity(): number { - return this.#buf.buffer.byteLength; - } - - /** Discards all but the first `n` unread bytes from the buffer but - * continues to use the same allocated storage. It throws if `n` is - * negative or greater than the length of the buffer. */ - truncate(n: number) { - if (n === 0) { - this.reset(); - return; - } - if (n < 0 || n > this.length) { - throw Error("bytes.Buffer: truncation out of range"); - } - this.#reslice(this.#off + n); - } - - reset() { - this.#reslice(0); - this.#off = 0; - } - - #tryGrowByReslice(n: number) { - const l = this.#buf.byteLength; - if (n <= this.capacity - l) { - this.#reslice(l + n); - return l; - } - return -1; - } - - #reslice(len: number) { - assert(len <= this.#buf.buffer.byteLength); - this.#buf = new Uint8Array(this.#buf.buffer, 0, len); - } - - /** Reads the next `p.length` bytes from the buffer or until the buffer is - * drained. Returns the number of bytes read. If the buffer has no data to - * return, the return is EOF (`null`). */ - readSync(p: Uint8Array): number | null { - if (this.empty()) { - // Buffer is empty, reset to recover space. - this.reset(); - if (p.byteLength === 0) { - // this edge case is tested in 'bufferReadEmptyAtEOF' test - return 0; - } - return null; - } - const nread = copy(this.#buf.subarray(this.#off), p); - this.#off += nread; - return nread; - } - - /** Reads the next `p.length` bytes from the buffer or until the buffer is - * drained. Resolves to the number of bytes read. If the buffer has no - * data to return, resolves to EOF (`null`). - * - * NOTE: This methods reads bytes synchronously; it's provided for - * compatibility with `Reader` interfaces. - */ - read(p: Uint8Array): Promise { - const rr = this.readSync(p); - return Promise.resolve(rr); - } - - writeSync(p: Uint8Array): number { - const m = this.#grow(p.byteLength); - return copy(p, this.#buf, m); - } - - /** NOTE: This methods writes bytes synchronously; it's provided for - * compatibility with `Writer` interface. */ - write(p: Uint8Array): Promise { - const n = this.writeSync(p); - return Promise.resolve(n); - } - - #grow(n: number) { - const m = this.length; - // If buffer is empty, reset to recover space. - if (m === 0 && this.#off !== 0) { - this.reset(); - } - // Fast: Try to grow by means of a reslice. - const i = this.#tryGrowByReslice(n); - if (i >= 0) { - return i; - } - const c = this.capacity; - if (n <= Math.floor(c / 2) - m) { - // We can slide things down instead of allocating a new - // ArrayBuffer. We only need m+n <= c to slide, but - // we instead let capacity get twice as large so we - // don't spend all our time copying. - copy(this.#buf.subarray(this.#off), this.#buf); - } else if (c + n > MAX_SIZE) { - throw new Error("The buffer cannot be grown beyond the maximum size."); - } else { - // Not enough space anywhere, we need to allocate. - const buf = new Uint8Array(Math.min(2 * c + n, MAX_SIZE)); - copy(this.#buf.subarray(this.#off), buf); - this.#buf = buf; - } - // Restore this.#off and len(this.#buf). - this.#off = 0; - this.#reslice(Math.min(m + n, MAX_SIZE)); - return m; - } - - /** Grows the buffer's capacity, if necessary, to guarantee space for - * another `n` bytes. After `.grow(n)`, at least `n` bytes can be written to - * the buffer without another allocation. If `n` is negative, `.grow()` will - * throw. If the buffer can't grow it will throw an error. - * - * Based on Go Lang's - * {@link https://golang.org/pkg/bytes/#Buffer.Grow | Buffer.Grow}. */ - grow(n: number) { - if (n < 0) { - throw Error("Buffer.grow: negative count"); - } - const m = this.#grow(n); - this.#reslice(m); - } - - /** Reads data from `r` until EOF (`null`) and appends it to the buffer, - * growing the buffer as needed. It resolves to the number of bytes read. - * If the buffer becomes too large, `.readFrom()` will reject with an error. - * - * Based on Go Lang's - * {@link https://golang.org/pkg/bytes/#Buffer.ReadFrom | Buffer.ReadFrom}. */ - async readFrom(r: Reader): Promise { - let n = 0; - const tmp = new Uint8Array(MIN_READ); - while (true) { - const shouldGrow = this.capacity - this.length < MIN_READ; - // read into tmp buffer if there's not enough room - // otherwise read directly into the internal buffer - const buf = shouldGrow - ? tmp - : new Uint8Array(this.#buf.buffer, this.length); - - const nread = await r.read(buf); - if (nread === null) { - return n; - } - - // write will grow if needed - if (shouldGrow) this.writeSync(buf.subarray(0, nread)); - else this.#reslice(this.length + nread); - - n += nread; - } - } - - /** Reads data from `r` until EOF (`null`) and appends it to the buffer, - * growing the buffer as needed. It returns the number of bytes read. If the - * buffer becomes too large, `.readFromSync()` will throw an error. - * - * Based on Go Lang's - * {@link https://golang.org/pkg/bytes/#Buffer.ReadFrom | Buffer.ReadFrom}. */ - readFromSync(r: ReaderSync): number { - let n = 0; - const tmp = new Uint8Array(MIN_READ); - while (true) { - const shouldGrow = this.capacity - this.length < MIN_READ; - // read into tmp buffer if there's not enough room - // otherwise read directly into the internal buffer - const buf = shouldGrow - ? tmp - : new Uint8Array(this.#buf.buffer, this.length); - - const nread = r.readSync(buf); - if (nread === null) { - return n; - } - - // write will grow if needed - if (shouldGrow) this.writeSync(buf.subarray(0, nread)); - else this.#reslice(this.length + nread); - - n += nread; - } - } -} diff --git a/src/vendor/deno.land/std@0.217.0/io/limited_reader.ts b/src/vendor/deno.land/std@0.217.0/io/limited_reader.ts deleted file mode 100644 index 42b2c198f29..00000000000 --- a/src/vendor/deno.land/std@0.217.0/io/limited_reader.ts +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * A `LimitedReader` reads from `reader` but limits the amount of data returned to just `limit` bytes. - * Each call to `read` updates `limit` to reflect the new amount remaining. - * `read` returns `null` when `limit` <= `0` or - * when the underlying `reader` returns `null`. - */ -import type { Reader } from "./types.ts"; - -/** - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. - */ -export class LimitedReader implements Reader { - constructor(public reader: Reader, public limit: number) {} - - async read(p: Uint8Array): Promise { - if (this.limit <= 0) { - return null; - } - - if (p.length > this.limit) { - p = p.subarray(0, this.limit); - } - const n = await this.reader.read(p); - if (n === null) { - return null; - } - - this.limit -= n; - return n; - } -} diff --git a/src/vendor/deno.land/std@0.217.0/io/multi_reader.ts b/src/vendor/deno.land/std@0.217.0/io/multi_reader.ts deleted file mode 100644 index 6d2f639a01b..00000000000 --- a/src/vendor/deno.land/std@0.217.0/io/multi_reader.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import type { Reader } from "./types.ts"; - -/** - * Reader utility for combining multiple readers - * - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. - */ -export class MultiReader implements Reader { - readonly #readers: Reader[]; - #currentIndex = 0; - - constructor(readers: Reader[]) { - this.#readers = [...readers]; - } - - async read(p: Uint8Array): Promise { - const r = this.#readers[this.#currentIndex]; - if (!r) return null; - const result = await r.read(p); - if (result === null) { - this.#currentIndex++; - return 0; - } - return result; - } -} diff --git a/src/vendor/deno.land/std@0.217.0/io/read_int.ts b/src/vendor/deno.land/std@0.217.0/io/read_int.ts deleted file mode 100644 index c0f55f013ea..00000000000 --- a/src/vendor/deno.land/std@0.217.0/io/read_int.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -import { type BufReader } from "./buf_reader.ts"; -import { readShort } from "./read_short.ts"; - -/** - * Read big endian 32bit integer from BufReader - * @param buf - * - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. - */ -export async function readInt(buf: BufReader): Promise { - const high = await readShort(buf); - if (high === null) return null; - const low = await readShort(buf); - if (low === null) throw new Deno.errors.UnexpectedEof(); - return (high << 16) | low; -} diff --git a/src/vendor/deno.land/std@0.217.0/io/read_long.ts b/src/vendor/deno.land/std@0.217.0/io/read_long.ts deleted file mode 100644 index 408f96ff4b5..00000000000 --- a/src/vendor/deno.land/std@0.217.0/io/read_long.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -import { type BufReader } from "./buf_reader.ts"; -import { readInt } from "./read_int.ts"; - -const MAX_SAFE_INTEGER = BigInt(Number.MAX_SAFE_INTEGER); - -/** - * Read big endian 64bit long from BufReader - * @param buf - * - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. - */ -export async function readLong(buf: BufReader): Promise { - const high = await readInt(buf); - if (high === null) return null; - const low = await readInt(buf); - if (low === null) throw new Deno.errors.UnexpectedEof(); - const big = (BigInt(high) << 32n) | BigInt(low); - // We probably should provide a similar API that returns BigInt values. - if (big > MAX_SAFE_INTEGER) { - throw new RangeError( - "Long value too big to be represented as a JavaScript number.", - ); - } - return Number(big); -} diff --git a/src/vendor/deno.land/std@0.217.0/io/read_short.ts b/src/vendor/deno.land/std@0.217.0/io/read_short.ts deleted file mode 100644 index 4ba50eab4d6..00000000000 --- a/src/vendor/deno.land/std@0.217.0/io/read_short.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -import { type BufReader } from "./buf_reader.ts"; - -/** - * Read big endian 16bit short from BufReader - * @param buf - * - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. - */ -export async function readShort(buf: BufReader): Promise { - const high = await buf.readByte(); - if (high === null) return null; - const low = await buf.readByte(); - if (low === null) throw new Deno.errors.UnexpectedEof(); - return (high << 8) | low; -} diff --git a/src/vendor/deno.land/std@0.217.0/io/slice_long_to_bytes.ts b/src/vendor/deno.land/std@0.217.0/io/slice_long_to_bytes.ts deleted file mode 100644 index 6e5752960e9..00000000000 --- a/src/vendor/deno.land/std@0.217.0/io/slice_long_to_bytes.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Slice number into 64bit big endian byte array - * @param d The number to be sliced - * @param dest The sliced array - * - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. - */ -export function sliceLongToBytes( - d: number, - dest: number[] = Array.from({ length: 8 }), -): number[] { - let big = BigInt(d); - for (let i = 0; i < 8; i++) { - dest[7 - i] = Number(big & 0xffn); - big >>= 8n; - } - return dest; -} diff --git a/src/vendor/deno.land/std@0.217.0/io/string_writer.ts b/src/vendor/deno.land/std@0.217.0/io/string_writer.ts deleted file mode 100644 index c3fa2347436..00000000000 --- a/src/vendor/deno.land/std@0.217.0/io/string_writer.ts +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import type { Writer, WriterSync } from "./types.ts"; - -const decoder = new TextDecoder(); - -/** - * Writer utility for buffering string chunks. - * - * @example - * ```ts - * import { - * copyN, - * StringReader, - * StringWriter, - * } from "https://deno.land/std@$STD_VERSION/io/mod.ts"; - * import { copy } from "https://deno.land/std@$STD_VERSION/io/copy.ts"; - * - * const w = new StringWriter("base"); - * const r = new StringReader("0123456789"); - * await copyN(r, w, 4); // copy 4 bytes - * - * // Number of bytes read - * console.log(w.toString()); //base0123 - * - * await copy(r, w); // copy all - * console.log(w.toString()); // base0123456789 - * ``` - * - * **Output:** - * - * ```text - * base0123 - * base0123456789 - * ``` - * - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. - */ -export class StringWriter implements Writer, WriterSync { - #chunks: Uint8Array[] = []; - #byteLength = 0; - #cache: string | undefined; - - constructor(private base: string = "") { - const c = new TextEncoder().encode(base); - this.#chunks.push(c); - this.#byteLength += c.byteLength; - } - - write(p: Uint8Array): Promise { - return Promise.resolve(this.writeSync(p)); - } - - writeSync(p: Uint8Array): number { - this.#chunks.push(new Uint8Array(p)); - this.#byteLength += p.byteLength; - this.#cache = undefined; - return p.byteLength; - } - - toString(): string { - if (this.#cache) { - return this.#cache; - } - const buf = new Uint8Array(this.#byteLength); - let offs = 0; - for (const chunk of this.#chunks) { - buf.set(chunk, offs); - offs += chunk.byteLength; - } - this.#cache = decoder.decode(buf); - return this.#cache; - } -} diff --git a/src/vendor/deno.land/std@0.217.0/io/write_all.ts b/src/vendor/deno.land/std@0.217.0/io/write_all.ts deleted file mode 100644 index 3edba7da196..00000000000 --- a/src/vendor/deno.land/std@0.217.0/io/write_all.ts +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import type { Writer, WriterSync } from "./types.ts"; - -/** - * Write all the content of the array buffer (`arr`) to the writer (`w`). - * - * @example - * ```ts - * import { writeAll } from "https://deno.land/std@$STD_VERSION/io/write_all.ts"; - - * // Example writing to stdout - * let contentBytes = new TextEncoder().encode("Hello World"); - * await writeAll(Deno.stdout, contentBytes); - * - * // Example writing to file - * contentBytes = new TextEncoder().encode("Hello World"); - * using file = await Deno.open('test.file', {write: true}); - * await writeAll(file, contentBytes); - * ``` - */ -export async function writeAll(writer: Writer, data: Uint8Array) { - let nwritten = 0; - while (nwritten < data.length) { - nwritten += await writer.write(data.subarray(nwritten)); - } -} - -/** - * Synchronously write all the content of the array buffer (`arr`) to the - * writer (`w`). - * - * @example - * ```ts - * import { writeAllSync } from "https://deno.land/std@$STD_VERSION/io/write_all.ts"; - * - * // Example writing to stdout - * let contentBytes = new TextEncoder().encode("Hello World"); - * writeAllSync(Deno.stdout, contentBytes); - * - * // Example writing to file - * contentBytes = new TextEncoder().encode("Hello World"); - * using file = Deno.openSync('test.file', {write: true}); - * writeAllSync(file, contentBytes); - * ``` - */ -export function writeAllSync(writer: WriterSync, data: Uint8Array) { - let nwritten = 0; - while (nwritten < data.length) { - nwritten += writer.writeSync(data.subarray(nwritten)); - } -} diff --git a/src/vendor/deno.land/std@0.217.0/json/common.ts b/src/vendor/deno.land/std@0.217.0/json/common.ts deleted file mode 100644 index e0a9215eea3..00000000000 --- a/src/vendor/deno.land/std@0.217.0/json/common.ts +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** The type of the result of parsing JSON. */ -export type JsonValue = - | { [key: string]: JsonValue | undefined } - | JsonValue[] - | string - | number - | boolean - | null; - -/** - * Options for {@linkcode JsonParseStream} and - * {@linkcode ConcatenatedJsonParseStream}. - */ -export interface ParseStreamOptions { - /** - * Controls the buffer of the {@linkcode TransformStream} used internally. - * - * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/TransformStream/TransformStream#writablestrategy} - */ - readonly writableStrategy?: QueuingStrategy; - /** - * Controls the buffer of the {@linkcode TransformStream} used internally. - * - * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/TransformStream/TransformStream#readablestrategy} - */ - readonly readableStrategy?: QueuingStrategy; -} diff --git a/src/vendor/deno.land/std@0.217.0/log/base_handler.ts b/src/vendor/deno.land/std@0.217.0/log/base_handler.ts deleted file mode 100644 index 6b68e01fe1b..00000000000 --- a/src/vendor/deno.land/std@0.217.0/log/base_handler.ts +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { getLevelByName, LevelName } from "./levels.ts"; -import type { LogRecord } from "./logger.ts"; - -export type FormatterFunction = (logRecord: LogRecord) => string; -const DEFAULT_FORMATTER: FormatterFunction = ({ levelName, msg }) => - `${levelName} ${msg}`; - -export interface BaseHandlerOptions { - formatter?: FormatterFunction; -} - -export class BaseHandler { - level: number; - levelName: LevelName; - formatter: FormatterFunction; - - constructor(levelName: LevelName, options: BaseHandlerOptions = {}) { - this.level = getLevelByName(levelName); - this.levelName = levelName; - this.formatter = options.formatter || DEFAULT_FORMATTER; - } - - handle(logRecord: LogRecord) { - if (this.level > logRecord.level) return; - - const msg = this.format(logRecord); - this.log(msg); - } - - format(logRecord: LogRecord): string { - return this.formatter(logRecord); - } - - log(_msg: string) {} - setup() {} - destroy() {} - - [Symbol.dispose]() { - this.destroy(); - } -} diff --git a/src/vendor/deno.land/std@0.217.0/media_types/extension.ts b/src/vendor/deno.land/std@0.217.0/media_types/extension.ts deleted file mode 100644 index 5dc88cab1a9..00000000000 --- a/src/vendor/deno.land/std@0.217.0/media_types/extension.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { extensionsByType } from "./extensions_by_type.ts"; - -/** - * For a given media type, return the most relevant extension, or `undefined` - * if no extension can be found. - * - * Extensions are returned without a leading `.`. - * - * @example - * ```ts - * import { extension } from "https://deno.land/std@$STD_VERSION/media_types/extension.ts"; - * - * extension("text/plain"); // "txt" - * extension("application/json"); // "json" - * extension("text/html; charset=UTF-8"); // "html" - * extension("application/foo"); // undefined - * ``` - */ -export function extension(type: string): string | undefined { - const exts = extensionsByType(type); - if (exts) { - return exts[0]; - } - return undefined; -} diff --git a/src/vendor/deno.land/std@0.217.0/media_types/format_media_type.ts b/src/vendor/deno.land/std@0.217.0/media_types/format_media_type.ts deleted file mode 100644 index 731942ce9f6..00000000000 --- a/src/vendor/deno.land/std@0.217.0/media_types/format_media_type.ts +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { isIterator, isToken, needsEncoding } from "./_util.ts"; - -/** Serializes the media type and the optional parameters as a media type - * conforming to RFC 2045 and RFC 2616. - * - * The type and parameter names are written in lower-case. - * - * When any of the arguments results in a standard violation then the return - * value will be an empty string (`""`). - * - * @example - * ```ts - * import { formatMediaType } from "https://deno.land/std@$STD_VERSION/media_types/format_media_type.ts"; - * - * formatMediaType("text/plain", { charset: "UTF-8" }); // "text/plain; charset=UTF-8" - * ``` - */ -export function formatMediaType( - type: string, - param?: Record | Iterable<[string, string]>, -): string { - let b = ""; - const [major = "", sub] = type.split("/"); - if (!sub) { - if (!isToken(type)) { - return ""; - } - b += type.toLowerCase(); - } else { - if (!isToken(major) || !isToken(sub)) { - return ""; - } - b += `${major.toLowerCase()}/${sub.toLowerCase()}`; - } - - if (param) { - param = isIterator(param) ? Object.fromEntries(param) : param; - const attrs = Object.keys(param); - attrs.sort(); - - for (const attribute of attrs) { - if (!isToken(attribute)) { - return ""; - } - const value = param[attribute]!; - b += `; ${attribute.toLowerCase()}`; - - const needEnc = needsEncoding(value); - if (needEnc) { - b += "*"; - } - b += "="; - - if (needEnc) { - b += `utf-8''${encodeURIComponent(value)}`; - continue; - } - - if (isToken(value)) { - b += value; - continue; - } - b += `"${value.replace(/["\\]/gi, (m) => `\\${m}`)}"`; - } - } - return b; -} diff --git a/src/vendor/deno.land/std@0.217.0/media_types/type_by_extension.ts b/src/vendor/deno.land/std@0.217.0/media_types/type_by_extension.ts deleted file mode 100644 index 73139aa4766..00000000000 --- a/src/vendor/deno.land/std@0.217.0/media_types/type_by_extension.ts +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { types } from "./_db.ts"; - -/** - * Returns the media type associated with the file extension. Values are - * normalized to lower case and matched irrespective of a leading `.`. - * - * When `extension` has no associated type, the function returns `undefined`. - * - * @example - * ```ts - * import { typeByExtension } from "https://deno.land/std@$STD_VERSION/media_types/type_by_extension.ts"; - * - * typeByExtension("js"); // "application/json" - * typeByExtension(".HTML"); // "text/html" - * typeByExtension("foo"); // undefined - * typeByExtension("file.json"); // undefined - * ``` - */ -export function typeByExtension(extension: string): string | undefined { - extension = extension.startsWith(".") ? extension.slice(1) : extension; - // @ts-ignore workaround around denoland/dnt#148 - return types.get(extension.toLowerCase()); -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/_comparator_format.ts b/src/vendor/deno.land/std@0.217.0/semver/_comparator_format.ts deleted file mode 100644 index ae3e2f45951..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/_comparator_format.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import type { Comparator } from "./types.ts"; -import { format } from "./format.ts"; - -/** - * Formats the comparator into a string - * @example >=0.0.0 - * @param comparator - * @returns A string representation of the comparator - */ -export function comparatorFormat(comparator: Comparator): string { - const { semver, operator } = comparator; - return `${operator === undefined ? "" : operator}${ - format(semver ?? comparator) - }`; -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/_comparator_intersects.ts b/src/vendor/deno.land/std@0.217.0/semver/_comparator_intersects.ts deleted file mode 100644 index 72cbba2766a..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/_comparator_intersects.ts +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import type { Comparator } from "./types.ts"; -import { compare } from "./compare.ts"; -import { testRange } from "./test_range.ts"; -import { isWildcardComparator } from "./_shared.ts"; - -/** - * Returns true if the range of possible versions intersects with the other comparators set of possible versions - * @param c0 The left side comparator - * @param c1 The right side comparator - * @returns True if any part of the comparators intersect - */ -export function comparatorIntersects( - c0: Comparator, - c1: Comparator, -): boolean { - const op0 = c0.operator; - const op1 = c1.operator; - - if (op0 === "" || op0 === undefined) { - // if c0 is empty comparator, then returns true - if (isWildcardComparator(c0)) { - return true; - } - return testRange(c0, [[c1]]); - } else if (op1 === "" || op1 === undefined) { - if (isWildcardComparator(c1)) { - return true; - } - return testRange(c1, [[c0]]); - } - - const cmp = compare(c0, c1); - - const sameDirectionIncreasing = (op0 === ">=" || op0 === ">") && - (op1 === ">=" || op1 === ">"); - const sameDirectionDecreasing = (op0 === "<=" || op0 === "<") && - (op1 === "<=" || op1 === "<"); - const sameSemVer = cmp === 0; - const differentDirectionsInclusive = (op0 === ">=" || op0 === "<=") && - (op1 === ">=" || op1 === "<="); - const oppositeDirectionsLessThan = cmp === -1 && - (op0 === ">=" || op0 === ">") && - (op1 === "<=" || op1 === "<"); - const oppositeDirectionsGreaterThan = cmp === 1 && - (op0 === "<=" || op0 === "<") && - (op1 === ">=" || op1 === ">"); - - return sameDirectionIncreasing || - sameDirectionDecreasing || - (sameSemVer && differentDirectionsInclusive) || - oppositeDirectionsLessThan || - oppositeDirectionsGreaterThan; -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/_comparator_max.ts b/src/vendor/deno.land/std@0.217.0/semver/_comparator_max.ts deleted file mode 100644 index f18a1ad272b..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/_comparator_max.ts +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import type { Comparator, SemVer } from "./types.ts"; -import { ANY, INVALID, MAX } from "./constants.ts"; - -/** - * The maximum version that could match this comparator. - * - * If an invalid comparator is given such as <0.0.0 then - * an out of range semver will be returned. - * @returns the version, the MAX version or the next smallest patch version - */ -export function comparatorMax(comparator: Comparator): SemVer { - const semver = comparator.semver ?? comparator; - if (semver === ANY) return MAX; - switch (comparator.operator) { - case "!=": - case "!==": - case ">": - case ">=": - return MAX; - case "": - case "==": - case "===": - case undefined: - case "=": - case "<=": - return { - major: semver.major, - minor: semver.minor, - patch: semver.patch, - prerelease: semver.prerelease, - build: semver.build, - }; - case "<": { - const patch = semver.patch - 1; - const minor = patch >= 0 ? semver.minor : semver.minor - 1; - const major = minor >= 0 ? semver.major : semver.major - 1; - // if you try to do <0.0.0 it will Give you -∞.∞.∞ - // which means no SemVer can compare successfully to it. - if (major < 0) { - return INVALID; - } else { - return { - major, - minor: minor >= 0 ? minor : Number.POSITIVE_INFINITY, - patch: patch >= 0 ? patch : Number.POSITIVE_INFINITY, - prerelease: [], - build: [], - }; - } - } - } -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/_comparator_min.ts b/src/vendor/deno.land/std@0.217.0/semver/_comparator_min.ts deleted file mode 100644 index fb206442454..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/_comparator_min.ts +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import type { Comparator, SemVer } from "./types.ts"; -import { ANY, MAX, MIN } from "./constants.ts"; -import { greaterThan } from "./greater_than.ts"; -import { increment } from "./increment.ts"; - -/** - * The minimum semantic version that could match this comparator - * @param comparator The semantic version of the comparator - * @param operator The operator of the comparator - * @returns The minimum valid semantic version - */ -export function comparatorMin(comparator: Comparator): SemVer { - const semver = comparator.semver ?? comparator; - if (semver === ANY) return MIN; - switch (comparator.operator) { - case ">": - return semver.prerelease && semver.prerelease.length > 0 - ? increment(semver, "pre") - : increment(semver, "patch"); - case "!=": - case "!==": - case "<=": - case "<": - // The min(<0.0.0) is MAX - return greaterThan(semver, MIN) ? MIN : MAX; - case ">=": - case undefined: - case "": - case "=": - case "==": - case "===": - return { - major: semver.major, - minor: semver.minor, - patch: semver.patch, - prerelease: semver.prerelease, - build: semver.build, - }; - } -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/_constants.ts b/src/vendor/deno.land/std@0.217.0/semver/_constants.ts deleted file mode 100644 index 0bdfad06124..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/_constants.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -/** - * @deprecated (will be removed in 0.219.0) `"=="`, `"==="`, `"!=="` and `""` operators are deprecated. Use `"="`, `"!="` or `undefined` instead. - */ -export const OPERATORS = [ - "", - "=", - "==", - "===", - "!==", - "!=", - ">", - ">=", - "<", - "<=", -] as const; diff --git a/src/vendor/deno.land/std@0.217.0/semver/_is_comparator.ts b/src/vendor/deno.land/std@0.217.0/semver/_is_comparator.ts deleted file mode 100644 index a4c3c7417b8..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/_is_comparator.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { isSemVer } from "./is_semver.ts"; -import { OPERATORS } from "./_constants.ts"; -import type { Comparator } from "./types.ts"; -import { ALL, NONE } from "./constants.ts"; - -/** - * Does a deep check on the value to see if it is a valid Comparator object. - * - * Objects with extra fields are still considered valid if they have at - * least the correct fields. - * - * Adds a type assertion if true. - * @param value The value to check if its a Comparator - * @returns True if the object is a Comparator otherwise false - */ -export function isComparator(value: unknown): value is Comparator { - if ( - value === null || value === undefined || Array.isArray(value) || - typeof value !== "object" - ) return false; - if (value === NONE || value === ALL) return true; - const { operator, semver } = value as Comparator; - return ( - (operator === undefined || - OPERATORS.includes(operator)) && - isSemVer(semver) - ); -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/_parse_comparator.ts b/src/vendor/deno.land/std@0.217.0/semver/_parse_comparator.ts deleted file mode 100644 index c2361e90634..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/_parse_comparator.ts +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import type { Comparator, Operator } from "./types.ts"; -import { - COMPARATOR_REGEXP, - parseBuild, - parseNumber, - parsePrerelease, -} from "./_shared.ts"; -import { ANY, NONE } from "./constants.ts"; - -type REGEXP_GROUPS = { - operator: Operator; - major: string; - minor: string; - patch: string; - prerelease: string; - buildmetadata: string; -}; - -/** - * Parses a comparator string into a valid Comparator. - * @param comparator - * @returns A valid Comparator - */ -export function parseComparator(comparator: string): Comparator { - const match = comparator.match(COMPARATOR_REGEXP); - const groups = match?.groups; - - if (!groups) return NONE; - - const { operator, prerelease, buildmetadata } = groups as REGEXP_GROUPS; - - const semver = groups.major - ? { - major: parseNumber(groups.major, "Invalid major version"), - minor: parseNumber( - groups.minor!, - "Invalid minor version", - ), - patch: parseNumber( - groups.patch!, - "Invalid patch version", - ), - prerelease: prerelease ? parsePrerelease(prerelease) : [], - build: buildmetadata ? parseBuild(buildmetadata) : [], - } - : ANY; - - return { operator: operator || undefined, ...semver, semver }; -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/can_parse.ts b/src/vendor/deno.land/std@0.217.0/semver/can_parse.ts deleted file mode 100644 index 995b0152cb1..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/can_parse.ts +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { parse } from "./parse.ts"; - -export function canParse(version: string): boolean { - try { - parse(version); - return true; - } catch (err) { - if (!(err instanceof TypeError)) { - throw err; - } - return false; - } -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/difference.ts b/src/vendor/deno.land/std@0.217.0/semver/difference.ts deleted file mode 100644 index 633ae22a642..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/difference.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import type { ReleaseType, SemVer } from "./types.ts"; -import { compareIdentifier } from "./_shared.ts"; - -/** - * Returns difference between two versions by the release type, or `undefined` if the versions are the same. - */ -export function difference(s0: SemVer, s1: SemVer): ReleaseType | undefined { - const hasPrerelease = s0.prerelease?.length || s1.prerelease?.length; - - if (s0.major !== s1.major) return hasPrerelease ? "premajor" : "major"; - if (s0.minor !== s1.minor) return hasPrerelease ? "preminor" : "minor"; - if (s0.patch !== s1.patch) return hasPrerelease ? "prepatch" : "patch"; - - if (compareIdentifier(s0.prerelease, s1.prerelease) !== 0) { - return "prerelease"; - } -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/equals.ts b/src/vendor/deno.land/std@0.217.0/semver/equals.ts deleted file mode 100644 index 900ddc27ecd..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/equals.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { compare } from "./compare.ts"; -import type { SemVer } from "./types.ts"; - -/** - * Returns `true` if both semantic versions are logically equivalent, even if they're not the exact same version object. - * - * This is equal to `compare(s0, s1) === 0`. - */ -export function equals(s0: SemVer, s1: SemVer): boolean { - return compare(s0, s1) === 0; -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/format_range.ts b/src/vendor/deno.land/std@0.217.0/semver/format_range.ts deleted file mode 100644 index 837c3e3b4c9..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/format_range.ts +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import type { Range } from "./types.ts"; -import { comparatorFormat } from "./_comparator_format.ts"; - -/** - * Formats the range into a string - * @example >=0.0.0 || <1.0.0 - * @param range The range to format - * @returns A string representation of the range - */ -export function formatRange(range: Range): string { - return range.map((c) => c.map((c) => comparatorFormat(c)).join(" ")) - .join("||"); -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/greater_or_equal.ts b/src/vendor/deno.land/std@0.217.0/semver/greater_or_equal.ts deleted file mode 100644 index fc1284f923b..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/greater_or_equal.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import type { SemVer } from "./types.ts"; -import { compare } from "./compare.ts"; - -/** - * Greater than or equal to comparison - * - * This is equal to `compare(s0, s1) >= 0`. - */ -export function greaterOrEqual(s0: SemVer, s1: SemVer): boolean { - return compare(s0, s1) >= 0; -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/greater_than.ts b/src/vendor/deno.land/std@0.217.0/semver/greater_than.ts deleted file mode 100644 index 9f31ad3a4b3..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/greater_than.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -import type { SemVer } from "./types.ts"; -import { compare } from "./compare.ts"; - -/** - * Greater than comparison - * - * This is equal to `compare(s0, s1) > 0`. - */ -export function greaterThan(s0: SemVer, s1: SemVer): boolean { - return compare(s0, s1) > 0; -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/gtr.ts b/src/vendor/deno.land/std@0.217.0/semver/gtr.ts deleted file mode 100644 index 9342ee8ac98..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/gtr.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import type { Range, SemVer } from "./types.ts"; -import { rangeMax } from "./range_max.ts"; -import { greaterThan } from "./greater_than.ts"; - -/** - * Checks to see if the version is greater than all possible versions of the range. - * @deprecated (will be removed after 0.217.0) See - * {@link https://github.com/denoland/deno_std/issues/4273 | deno_std#4273} - * for details. - */ -export function gtr( - version: SemVer, - range: Range, -): boolean { - return greaterThan(version, rangeMax(range)); -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/is_range.ts b/src/vendor/deno.land/std@0.217.0/semver/is_range.ts deleted file mode 100644 index 8361af5a61e..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/is_range.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import type { Range } from "./types.ts"; -import { isComparator } from "./_is_comparator.ts"; - -/** - * Does a deep check on the object to determine if its a valid range. - * - * Objects with extra fields are still considered valid if they have at - * least the correct fields. - * - * Adds a type assertion if true. - * @param value The value to check if its a valid Range - * @returns True if its a valid Range otherwise false. - */ -export function isRange(value: unknown): value is Range { - return Array.isArray(value) && - value.every((r) => Array.isArray(r) && r.every((c) => isComparator(c))); -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/less_or_equal.ts b/src/vendor/deno.land/std@0.217.0/semver/less_or_equal.ts deleted file mode 100644 index a813c45971e..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/less_or_equal.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import type { SemVer } from "./types.ts"; -import { compare } from "./compare.ts"; - -/** - * Less than or equal to comparison - * - * This is equal to `compare(s0, s1) <= 0`. - */ -export function lessOrEqual(s0: SemVer, s1: SemVer): boolean { - return compare(s0, s1) <= 0; -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/less_than.ts b/src/vendor/deno.land/std@0.217.0/semver/less_than.ts deleted file mode 100644 index a53a4455483..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/less_than.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import type { SemVer } from "./types.ts"; -import { compare } from "./compare.ts"; - -/** - * Less than comparison - * - * This is equal to `compare(s0, s1) < 0`. - */ -export function lessThan(s0: SemVer, s1: SemVer): boolean { - return compare(s0, s1) < 0; -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/ltr.ts b/src/vendor/deno.land/std@0.217.0/semver/ltr.ts deleted file mode 100644 index ef3fdf7ffae..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/ltr.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import type { Range, SemVer } from "./types.ts"; -import { lessThan } from "./less_than.ts"; -import { rangeMin } from "./range_min.ts"; - -/** - * Less than range comparison - * @deprecated (will be removed after 0.217.0) See - * {@link https://github.com/denoland/deno_std/issues/4273 | deno_std#4273} - * for details. - */ -export function ltr( - version: SemVer, - range: Range, -): boolean { - return lessThan(version, rangeMin(range)); -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/not_equals.ts b/src/vendor/deno.land/std@0.217.0/semver/not_equals.ts deleted file mode 100644 index 76cfbb31180..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/not_equals.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import type { SemVer } from "./types.ts"; -import { compare } from "./compare.ts"; - -/** - * Not equal comparison - * - * This is equal to `compare(s0, s1) !== 0`. - */ -export function notEquals(s0: SemVer, s1: SemVer): boolean { - return compare(s0, s1) !== 0; -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/range_intersects.ts b/src/vendor/deno.land/std@0.217.0/semver/range_intersects.ts deleted file mode 100644 index 471ef54d42b..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/range_intersects.ts +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { comparatorIntersects } from "./_comparator_intersects.ts"; -import type { Comparator, Range } from "./types.ts"; - -function rangesSatisfiable(ranges: Range[]): boolean { - return ranges.every((r) => { - // For each OR at least one AND must be satisfiable - return r.some((comparators) => comparatorsSatisfiable(comparators)); - }); -} - -function comparatorsSatisfiable(comparators: Comparator[]): boolean { - // Comparators are satisfiable if they all intersect with each other - for (let i = 0; i < comparators.length - 1; i++) { - const c0 = comparators[i]!; - for (const c1 of comparators.slice(i + 1)) { - if (!comparatorIntersects(c0, c1)) { - return false; - } - } - } - return true; -} - -/** - * The ranges intersect every range of AND comparators intersects with a least one range of OR ranges. - * @param r0 range 0 - * @param r1 range 1 - * @returns returns true if any - */ -export function rangeIntersects( - r0: Range, - r1: Range, -): boolean { - return rangesSatisfiable([r0, r1]) && - r0.some((r00) => { - return r1.some((r11) => { - return r00.every((c0) => { - return r11.every((c1) => comparatorIntersects(c0, c1)); - }); - }); - }); -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/range_max.ts b/src/vendor/deno.land/std@0.217.0/semver/range_max.ts deleted file mode 100644 index bf68572f681..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/range_max.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { INVALID } from "./constants.ts"; -import type { Range, SemVer } from "./types.ts"; -import { testRange } from "./test_range.ts"; -import { comparatorMax } from "./_comparator_max.ts"; -import { greaterThan } from "./greater_than.ts"; - -/** - * The maximum valid SemVer for a given range or INVALID - * @param range The range to calculate the max for - * @returns A valid SemVer or INVALID - */ -export function rangeMax(range: Range): SemVer { - let max; - for (const comparators of range) { - for (const comparator of comparators) { - const candidate = comparatorMax(comparator); - if (!testRange(candidate, range)) continue; - max = (max && greaterThan(max, candidate)) ? max : candidate; - } - } - return max ?? INVALID; -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/range_min.ts b/src/vendor/deno.land/std@0.217.0/semver/range_min.ts deleted file mode 100644 index ed04fa9098c..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/range_min.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { INVALID } from "./constants.ts"; -import type { Range, SemVer } from "./types.ts"; -import { testRange } from "./test_range.ts"; -import { comparatorMin } from "./_comparator_min.ts"; -import { lessThan } from "./less_than.ts"; - -/** - * The minimum valid SemVer for a given range or INVALID - * @param range The range to calculate the min for - * @returns A valid SemVer or INVALID - */ -export function rangeMin(range: Range): SemVer { - let min; - for (const comparators of range) { - for (const comparator of comparators) { - const candidate = comparatorMin(comparator); - if (!testRange(candidate, range)) continue; - min = (min && lessThan(min, candidate)) ? min : candidate; - } - } - return min ?? INVALID; -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/reverse_sort.ts b/src/vendor/deno.land/std@0.217.0/semver/reverse_sort.ts deleted file mode 100644 index d8ea1e40690..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/reverse_sort.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import type { SemVer } from "./types.ts"; -import { compare } from "./compare.ts"; - -/** - * Sorts a list of semantic versions in descending order. - * @deprecated (will be removed after 0.217.0) Use `versions.sort((a, b) => compare(b, a))` instead. - */ -export function reverseSort( - versions: SemVer[], -): SemVer[] { - return versions.sort((a, b) => compare(b, a)); -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/try_parse.ts b/src/vendor/deno.land/std@0.217.0/semver/try_parse.ts deleted file mode 100644 index d3d290191b7..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/try_parse.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { SemVer } from "./types.ts"; -import { parse } from "./parse.ts"; - -/** - * Returns the parsed version, or undefined if it's not valid. - * @param version The version string to parse - * @returns A valid SemVer or `undefined` - */ -export function tryParse(version?: string): SemVer | undefined { - if (version === undefined) { - return undefined; - } - try { - return parse(version); - } catch { - return undefined; - } -} diff --git a/src/vendor/deno.land/std@0.217.0/semver/try_parse_range.ts b/src/vendor/deno.land/std@0.217.0/semver/try_parse_range.ts deleted file mode 100644 index 010580629e3..00000000000 --- a/src/vendor/deno.land/std@0.217.0/semver/try_parse_range.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -import { Range } from "./types.ts"; -import { parseRange } from "./parse_range.ts"; - -/** - * A tries to parse a valid Range string or returns undefined - * @param range The range string - * @returns A Range object if valid otherwise `undefined` - */ -export function tryParseRange( - range: string, -): Range | undefined { - try { - // Return '*' instead of '' so that truthiness works. - // This will throw if it's invalid anyway - return parseRange(range); - } catch { - return undefined; - } -} diff --git a/src/vendor/deno.land/std@0.217.0/streams/buffer.ts b/src/vendor/deno.land/std@0.217.0/streams/buffer.ts deleted file mode 100644 index ba3f2422262..00000000000 --- a/src/vendor/deno.land/std@0.217.0/streams/buffer.ts +++ /dev/null @@ -1,178 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { assert } from "../assert/assert.ts"; -import { copy } from "../bytes/copy.ts"; - -const MAX_SIZE = 2 ** 32 - 2; -const DEFAULT_CHUNK_SIZE = 16_640; - -/** A variable-sized buffer of bytes with `read()` and `write()` methods. - * - * Buffer is almost always used with some I/O like files and sockets. It allows - * one to buffer up a download from a socket. Buffer grows and shrinks as - * necessary. - * - * Buffer is NOT the same thing as Node's Buffer. Node's Buffer was created in - * 2009 before JavaScript had the concept of ArrayBuffers. It's simply a - * non-standard ArrayBuffer. - * - * ArrayBuffer is a fixed memory allocation. Buffer is implemented on top of - * ArrayBuffer. - * - * Based on {@link https://golang.org/pkg/bytes/#Buffer | Go Buffer}. */ -export class Buffer { - #buf: Uint8Array; // contents are the bytes buf[off : len(buf)] - #off = 0; // read at buf[off], write at buf[buf.byteLength] - #readable: ReadableStream = new ReadableStream({ - type: "bytes", - pull: (controller) => { - const view = new Uint8Array(controller.byobRequest!.view!.buffer); - if (this.empty()) { - // Buffer is empty, reset to recover space. - this.reset(); - controller.close(); - controller.byobRequest!.respond(0); - return; - } - const nread = copy(this.#buf.subarray(this.#off), view); - this.#off += nread; - controller.byobRequest!.respond(nread); - }, - autoAllocateChunkSize: DEFAULT_CHUNK_SIZE, - }); - - /** Getter returning the instance's {@linkcode ReadableStream}. */ - get readable(): ReadableStream { - return this.#readable; - } - - #writable = new WritableStream({ - write: (chunk) => { - const m = this.#grow(chunk.byteLength); - copy(chunk, this.#buf, m); - }, - }); - - /** Getter returning the instance's {@linkcode WritableStream}. */ - get writable(): WritableStream { - return this.#writable; - } - - /** Constructs a new instance. */ - constructor(ab?: ArrayBufferLike | ArrayLike) { - this.#buf = ab === undefined ? new Uint8Array(0) : new Uint8Array(ab); - } - - /** Returns a slice holding the unread portion of the buffer. - * - * The slice is valid for use only until the next buffer modification (that - * is, only until the next call to a method like `read()`, `write()`, - * `reset()`, or `truncate()`). If `options.copy` is false the slice aliases - * the buffer content at least until the next buffer modification, so - * immediate changes to the slice will affect the result of future reads. - */ - bytes(options = { copy: true }): Uint8Array { - if (options.copy === false) return this.#buf.subarray(this.#off); - return this.#buf.slice(this.#off); - } - - /** Returns whether the unread portion of the buffer is empty. */ - empty(): boolean { - return this.#buf.byteLength <= this.#off; - } - - /** A read only number of bytes of the unread portion of the buffer. */ - get length(): number { - return this.#buf.byteLength - this.#off; - } - - /** The read only capacity of the buffer's underlying byte slice, that is, - * the total space allocated for the buffer's data. */ - get capacity(): number { - return this.#buf.buffer.byteLength; - } - - /** - * Discards all but the first `n` unread bytes from the buffer but - * continues to use the same allocated storage. It throws if `n` is - * negative or greater than the length of the buffer. - */ - truncate(n: number): void { - if (n === 0) { - this.reset(); - return; - } - if (n < 0 || n > this.length) { - throw Error("bytes.Buffer: truncation out of range"); - } - this.#reslice(this.#off + n); - } - - /** Resets to an empty buffer. */ - reset() { - this.#reslice(0); - this.#off = 0; - } - - #tryGrowByReslice(n: number) { - const l = this.#buf.byteLength; - if (n <= this.capacity - l) { - this.#reslice(l + n); - return l; - } - return -1; - } - - #reslice(len: number) { - assert(len <= this.#buf.buffer.byteLength); - this.#buf = new Uint8Array(this.#buf.buffer, 0, len); - } - - #grow(n: number) { - const m = this.length; - // If buffer is empty, reset to recover space. - if (m === 0 && this.#off !== 0) { - this.reset(); - } - // Fast: Try to grow by means of a reslice. - const i = this.#tryGrowByReslice(n); - if (i >= 0) { - return i; - } - const c = this.capacity; - if (n <= Math.floor(c / 2) - m) { - // We can slide things down instead of allocating a new - // ArrayBuffer. We only need m+n <= c to slide, but - // we instead let capacity get twice as large so we - // don't spend all our time copying. - copy(this.#buf.subarray(this.#off), this.#buf); - } else if (c + n > MAX_SIZE) { - throw new Error("The buffer cannot be grown beyond the maximum size."); - } else { - // Not enough space anywhere, we need to allocate. - const buf = new Uint8Array(Math.min(2 * c + n, MAX_SIZE)); - copy(this.#buf.subarray(this.#off), buf); - this.#buf = buf; - } - // Restore this.#off and len(this.#buf). - this.#off = 0; - this.#reslice(Math.min(m + n, MAX_SIZE)); - return m; - } - - /** Grows the buffer's capacity, if necessary, to guarantee space for - * another `n` bytes. After `.grow(n)`, at least `n` bytes can be written to - * the buffer without another allocation. If `n` is negative, `.grow()` will - * throw. If the buffer can't grow it will throw an error. - * - * Based on Go Lang's - * {@link https://golang.org/pkg/bytes/#Buffer.Grow | Buffer.Grow}. */ - grow(n: number) { - if (n < 0) { - throw Error("Buffer.grow: negative count"); - } - const m = this.#grow(n); - this.#reslice(m); - } -} diff --git a/src/vendor/deno.land/std@0.217.0/streams/byte_slice_stream.ts b/src/vendor/deno.land/std@0.217.0/streams/byte_slice_stream.ts deleted file mode 100644 index ff9570578ea..00000000000 --- a/src/vendor/deno.land/std@0.217.0/streams/byte_slice_stream.ts +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { assert } from "../assert/assert.ts"; - -/** - * A transform stream that only transforms from the zero-indexed `start` and - * `end` bytes (both inclusive). - * - * @example - * ```ts - * import { ByteSliceStream } from "https://deno.land/std@$STD_VERSION/streams/byte_slice_stream.ts"; - * - * const response = await fetch("https://example.com"); - * const rangedStream = response.body! - * .pipeThrough(new ByteSliceStream(3, 8)); - * ``` - */ -export class ByteSliceStream extends TransformStream { - #offsetStart = 0; - #offsetEnd = 0; - - /** Constructs a new instance. */ - constructor(start = 0, end: number = Infinity) { - super({ - start: () => { - assert(start >= 0, "`start` must be greater than 0"); - end += 1; - }, - transform: (chunk, controller) => { - this.#offsetStart = this.#offsetEnd; - this.#offsetEnd += chunk.byteLength; - if (this.#offsetEnd > start) { - if (this.#offsetStart < start) { - chunk = chunk.slice(start - this.#offsetStart); - } - if (this.#offsetEnd >= end) { - chunk = chunk.slice(0, chunk.byteLength - this.#offsetEnd + end); - controller.enqueue(chunk); - controller.terminate(); - } else { - controller.enqueue(chunk); - } - } - }, - }); - } -} diff --git a/src/vendor/deno.land/std@0.217.0/streams/early_zip_readable_streams.ts b/src/vendor/deno.land/std@0.217.0/streams/early_zip_readable_streams.ts deleted file mode 100644 index 5ab256251fc..00000000000 --- a/src/vendor/deno.land/std@0.217.0/streams/early_zip_readable_streams.ts +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Merge multiple streams into a single one, taking order into account, and each stream - * will wait for a chunk to enqueue before the next stream can append another chunk. - * If a stream ends before other ones, the others will be cancelled. - * - * @example - * ```ts - * import { earlyZipReadableStreams } from "https://deno.land/std@$STD_VERSION/streams/early_zip_readable_streams.ts"; - * - * const stream1 = ReadableStream.from(["1", "2", "3"]); - * const stream2 = ReadableStream.from(["a", "b", "c"]); - * const zippedStream = earlyZipReadableStreams(stream1, stream2); - * - * await Array.fromAsync(zippedStream); // ["1", "a", "2", "b", "3", "c"]; - * ``` - */ -export function earlyZipReadableStreams( - ...streams: ReadableStream[] -): ReadableStream { - const readers = streams.map((s) => s.getReader()); - return new ReadableStream({ - async start(controller) { - try { - loop: - while (true) { - for (const reader of readers) { - const { value, done } = await reader.read(); - if (!done) { - controller.enqueue(value!); - } else { - await Promise.all(readers.map((reader) => reader.cancel())); - break loop; - } - } - } - controller.close(); - } catch (e) { - controller.error(e); - } - }, - }); -} diff --git a/src/vendor/deno.land/std@0.217.0/streams/iterate_reader.ts b/src/vendor/deno.land/std@0.217.0/streams/iterate_reader.ts deleted file mode 100644 index 2057ce0dbdf..00000000000 --- a/src/vendor/deno.land/std@0.217.0/streams/iterate_reader.ts +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { - iterateReader as _iterateReader, - iterateReaderSync as _iterateReaderSync, -} from "../io/iterate_reader.ts"; -import type { Reader, ReaderSync } from "../io/types.ts"; - -export type { Reader, ReaderSync }; - -/** - * Turns a {@linkcode Reader}, `r`, into an async iterator. - * - * @example - * ```ts - * import { iterateReader } from "https://deno.land/std@$STD_VERSION/streams/iterate_reader.ts"; - * - * using f = await Deno.open("/etc/passwd"); - * for await (const chunk of iterateReader(f)) { - * console.log(chunk); - * } - * ``` - * - * Second argument can be used to tune size of a buffer. - * Default size of the buffer is 32kB. - * - * @example - * ```ts - * import { iterateReader } from "https://deno.land/std@$STD_VERSION/streams/iterate_reader.ts"; - * - * using f = await Deno.open("/etc/passwd"); - * const it = iterateReader(f, { - * bufSize: 1024 * 1024 - * }); - * for await (const chunk of it) { - * console.log(chunk); - * } - * ``` - * - * @deprecated (will be removed in 1.0.0) Import from {@link https://deno.land/std/io/iterate_reader.ts} instead. - */ -export function iterateReader( - r: Reader, - options?: { - bufSize?: number; - }, -): AsyncIterableIterator { - return _iterateReader(r, options); -} - -/** - * Turns a {@linkcode ReaderSync}, `r`, into an iterator. - * - * ```ts - * import { iterateReaderSync } from "https://deno.land/std@$STD_VERSION/streams/iterate_reader.ts"; - * - * using f = Deno.openSync("/etc/passwd"); - * for (const chunk of iterateReaderSync(f)) { - * console.log(chunk); - * } - * ``` - * - * Second argument can be used to tune size of a buffer. - * Default size of the buffer is 32kB. - * - * ```ts - * import { iterateReaderSync } from "https://deno.land/std@$STD_VERSION/streams/iterate_reader.ts"; - - * using f = await Deno.open("/etc/passwd"); - * const iter = iterateReaderSync(f, { - * bufSize: 1024 * 1024 - * }); - * for (const chunk of iter) { - * console.log(chunk); - * } - * ``` - * - * Iterator uses an internal buffer of fixed size for efficiency; it returns - * a view on that buffer on each iteration. It is therefore caller's - * responsibility to copy contents of the buffer if needed; otherwise the - * next iteration will overwrite contents of previously returned chunk. - * - * @deprecated (will be removed in 1.0.0) Import from {@link https://deno.land/std/io/iterate_reader.ts} instead. - */ -export function iterateReaderSync( - r: ReaderSync, - options?: { - bufSize?: number; - }, -): IterableIterator { - return _iterateReaderSync(r, options); -} diff --git a/src/vendor/deno.land/std@0.217.0/streams/limited_bytes_transform_stream.ts b/src/vendor/deno.land/std@0.217.0/streams/limited_bytes_transform_stream.ts deleted file mode 100644 index 32821273aff..00000000000 --- a/src/vendor/deno.land/std@0.217.0/streams/limited_bytes_transform_stream.ts +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * A {@linkcode TransformStream} that will only read & enqueue `size` amount of - * bytes. This operation is chunk based and not BYOB based, and as such will - * read more than needed. - * - * If `options.error` is set, then instead of terminating the stream, - * an error will be thrown. - * - * @example - * ```ts - * import { LimitedBytesTransformStream } from "https://deno.land/std@$STD_VERSION/streams/limited_bytes_transform_stream.ts"; - * - * const res = await fetch("https://example.com"); - * const parts = res.body! - * .pipeThrough(new LimitedBytesTransformStream(512 * 1024)); - * ``` - */ -export class LimitedBytesTransformStream - extends TransformStream { - #read = 0; - - /** Constructs a new instance. */ - constructor(size: number, options: { error?: boolean } = {}) { - super({ - transform: (chunk, controller) => { - if ((this.#read + chunk.byteLength) > size) { - if (options.error) { - throw new RangeError(`Exceeded byte size limit of '${size}'`); - } else { - controller.terminate(); - } - } else { - this.#read += chunk.byteLength; - controller.enqueue(chunk); - } - }, - }); - } -} diff --git a/src/vendor/deno.land/std@0.217.0/streams/limited_transform_stream.ts b/src/vendor/deno.land/std@0.217.0/streams/limited_transform_stream.ts deleted file mode 100644 index 6578faf4cfa..00000000000 --- a/src/vendor/deno.land/std@0.217.0/streams/limited_transform_stream.ts +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * A {@linkcode TransformStream} that will only read & enqueue `size` amount of - * chunks. - * - * If `options.error` is set, then instead of terminating the stream, - * an error will be thrown. - * - * @example - * ```ts - * import { LimitedTransformStream } from "https://deno.land/std@$STD_VERSION/streams/limited_transform_stream.ts"; - * const res = await fetch("https://example.com"); - * const parts = res.body!.pipeThrough(new LimitedTransformStream(50)); - * ``` - */ -export class LimitedTransformStream extends TransformStream { - #read = 0; - - /** Constructs a new instance. */ - constructor(size: number, options: { error?: boolean } = {}) { - super({ - transform: (chunk, controller) => { - if ((this.#read + 1) > size) { - if (options.error) { - throw new RangeError(`Exceeded chunk limit of '${size}'`); - } else { - controller.terminate(); - } - } else { - this.#read++; - controller.enqueue(chunk); - } - }, - }); - } -} diff --git a/src/vendor/deno.land/std@0.217.0/streams/merge_readable_streams.ts b/src/vendor/deno.land/std@0.217.0/streams/merge_readable_streams.ts deleted file mode 100644 index 3d258c67a4f..00000000000 --- a/src/vendor/deno.land/std@0.217.0/streams/merge_readable_streams.ts +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -/** - * Merge multiple streams into a single one, not taking order into account. - * If a stream ends before other ones, the other will continue adding data, - * and the finished one will not add any more data. - * - * @example - * ```ts - * import { mergeReadableStreams } from "https://deno.land/std@$STD_VERSION/streams/merge_readable_streams.ts"; - * - * const stream1 = ReadableStream.from(["1", "2", "3"]); - * const stream2 = ReadableStream.from(["a", "b", "c"]); - * - * // ["2", "c", "a", "b", "3", "1"] - * await Array.fromAsync(mergeReadableStreams(stream1, stream2)); - * ``` - */ -export function mergeReadableStreams( - ...streams: ReadableStream[] -): ReadableStream { - const resolvePromises = streams.map(() => Promise.withResolvers()); - return new ReadableStream({ - start(controller) { - let mustClose = false; - Promise.all(resolvePromises.map(({ promise }) => promise)) - .then(() => { - controller.close(); - }) - .catch((error) => { - mustClose = true; - controller.error(error); - }); - for (const [index, stream] of streams.entries()) { - (async () => { - try { - for await (const data of stream) { - if (mustClose) { - break; - } - controller.enqueue(data); - } - resolvePromises[index].resolve(); - } catch (error) { - resolvePromises[index].reject(error); - } - })(); - } - }, - }); -} diff --git a/src/vendor/deno.land/std@0.217.0/streams/reader_from_stream_reader.ts b/src/vendor/deno.land/std@0.217.0/streams/reader_from_stream_reader.ts deleted file mode 100644 index 28571361b5c..00000000000 --- a/src/vendor/deno.land/std@0.217.0/streams/reader_from_stream_reader.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { readerFromStreamReader as _readerFromStreamReader } from "../io/reader_from_stream_reader.ts"; -import type { Reader } from "../io/types.ts"; - -/** - * Create a {@linkcode Reader} from a {@linkcode ReadableStreamDefaultReader}. - * - * @example - * ```ts - * import { copy } from "https://deno.land/std@$STD_VERSION/io/copy.ts"; - * import { readerFromStreamReader } from "https://deno.land/std@$STD_VERSION/streams/reader_from_stream_reader.ts"; - * - * const res = await fetch("https://deno.land"); - * using file = await Deno.open("./deno.land.html", { create: true, write: true }); - * - * const reader = readerFromStreamReader(res.body!.getReader()); - * await copy(reader, file); - * ``` - * - * @deprecated (will be removed in 1.0.0) Import from {@link https://deno.land/std/io/reader_from_stream_reader.ts} instead. - */ -export function readerFromStreamReader( - streamReader: ReadableStreamDefaultReader, -): Reader { - return _readerFromStreamReader(streamReader); -} diff --git a/src/vendor/deno.land/std@0.217.0/streams/text_delimiter_stream.ts b/src/vendor/deno.land/std@0.217.0/streams/text_delimiter_stream.ts deleted file mode 100644 index 2025cc33226..00000000000 --- a/src/vendor/deno.land/std@0.217.0/streams/text_delimiter_stream.ts +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { createLPS } from "./_common.ts"; - -import type { - DelimiterDisposition, - DelimiterStreamOptions, -} from "./delimiter_stream.ts"; - -/** - * Transform a stream into a stream where each chunk is divided by a given delimiter. - * - * @example - * ```ts - * import { TextDelimiterStream } from "https://deno.land/std@$STD_VERSION/streams/text_delimiter_stream.ts"; - * const res = await fetch("https://example.com"); - * const parts = res.body! - * .pipeThrough(new TextDecoderStream()) - * .pipeThrough(new TextDelimiterStream("foo")); - * ``` - */ -export class TextDelimiterStream extends TransformStream { - #buf = ""; - #delimiter: string; - #inspectIndex = 0; - #matchIndex = 0; - #delimLPS: Uint8Array; - #disp: DelimiterDisposition; - - /** Constructs a new instance. */ - constructor(delimiter: string, options?: DelimiterStreamOptions) { - super({ - transform: (chunk, controller) => { - this.#handle(chunk, controller); - }, - flush: (controller) => { - controller.enqueue(this.#buf); - }, - }); - - this.#delimiter = delimiter; - this.#delimLPS = createLPS(new TextEncoder().encode(delimiter)); - this.#disp = options?.disposition ?? "discard"; - } - - #handle( - chunk: string, - controller: TransformStreamDefaultController, - ) { - this.#buf += chunk; - let localIndex = 0; - while (this.#inspectIndex < this.#buf.length) { - if (chunk[localIndex] === this.#delimiter[this.#matchIndex]) { - this.#inspectIndex++; - localIndex++; - this.#matchIndex++; - if (this.#matchIndex === this.#delimiter.length) { - // Full match - const start = this.#inspectIndex - this.#delimiter.length; - const end = this.#disp === "suffix" ? this.#inspectIndex : start; - const copy = this.#buf.slice(0, end); - controller.enqueue(copy); - const shift = this.#disp === "prefix" ? start : this.#inspectIndex; - this.#buf = this.#buf.slice(shift); - this.#inspectIndex = this.#disp === "prefix" - ? this.#delimiter.length - : 0; - this.#matchIndex = 0; - } - } else { - if (this.#matchIndex === 0) { - this.#inspectIndex++; - localIndex++; - } else { - this.#matchIndex = this.#delimLPS[this.#matchIndex - 1]; - } - } - } - } -} diff --git a/src/vendor/deno.land/std@0.217.0/streams/text_line_stream.ts b/src/vendor/deno.land/std@0.217.0/streams/text_line_stream.ts deleted file mode 100644 index f1ff1493551..00000000000 --- a/src/vendor/deno.land/std@0.217.0/streams/text_line_stream.ts +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** Options for {@linkcode TextLineStream}. */ -export interface TextLineStreamOptions { - /** - * Allow splitting by `\r`. - * - * @default {false} - */ - allowCR?: boolean; -} - -/** - * Transform a stream into a stream where each chunk is divided by a newline, - * be it `\n` or `\r\n`. `\r` can be enabled via the `allowCR` option. - * - * @example - * ```ts - * import { TextLineStream } from "https://deno.land/std@$STD_VERSION/streams/text_line_stream.ts"; - * - * const res = await fetch("https://example.com"); - * const lines = res.body! - * .pipeThrough(new TextDecoderStream()) - * .pipeThrough(new TextLineStream()); - * ``` - */ -export class TextLineStream extends TransformStream { - #currentLine = ""; - - /** Constructs a new instance. */ - constructor(options: TextLineStreamOptions = { allowCR: false }) { - super({ - transform: (chars, controller) => { - chars = this.#currentLine + chars; - - while (true) { - const lfIndex = chars.indexOf("\n"); - const crIndex = options.allowCR ? chars.indexOf("\r") : -1; - - if ( - crIndex !== -1 && crIndex !== (chars.length - 1) && - (lfIndex === -1 || (lfIndex - 1) > crIndex) - ) { - controller.enqueue(chars.slice(0, crIndex)); - chars = chars.slice(crIndex + 1); - continue; - } - - if (lfIndex === -1) break; - - const endIndex = chars[lfIndex - 1] === "\r" ? lfIndex - 1 : lfIndex; - controller.enqueue(chars.slice(0, endIndex)); - chars = chars.slice(lfIndex + 1); - } - - this.#currentLine = chars; - }, - flush: (controller) => { - if (this.#currentLine === "") return; - const currentLine = options.allowCR && this.#currentLine.endsWith("\r") - ? this.#currentLine.slice(0, -1) - : this.#currentLine; - controller.enqueue(currentLine); - }, - }); - } -} diff --git a/src/vendor/deno.land/std@0.217.0/streams/to_blob.ts b/src/vendor/deno.land/std@0.217.0/streams/to_blob.ts deleted file mode 100644 index bc9f34606dc..00000000000 --- a/src/vendor/deno.land/std@0.217.0/streams/to_blob.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Converts a {@linkcode ReadableStream} of {@linkcode Uint8Array}s to a - * {@linkcode Blob}. Works the same as {@linkcode Response.blob}. - * - * @example - * ```ts - * import { toBlob } from "https://deno.land/std@$STD_VERSION/streams/to_blob.ts"; - * - * const stream = ReadableStream.from([new Uint8Array(1), new Uint8Array(2)]); - * await toBlob(stream); // Blob { size: 3, type: "" } - * ``` - */ -export async function toBlob( - stream: ReadableStream, -): Promise { - return await new Response(stream).blob(); -} diff --git a/src/vendor/deno.land/std@0.217.0/streams/writable_stream_from_writer.ts b/src/vendor/deno.land/std@0.217.0/streams/writable_stream_from_writer.ts deleted file mode 100644 index 3ac30692d6b..00000000000 --- a/src/vendor/deno.land/std@0.217.0/streams/writable_stream_from_writer.ts +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import type { Writer } from "../io/types.ts"; -import { toWritableStream } from "../io/to_writable_stream.ts"; - -/** - * Options for {@linkcode writableStreamFromWriter}. - * - * @deprecated (will be removed after 1.0.0) Use {@linkcode toWritableStream} instead. - */ -export interface WritableStreamFromWriterOptions { - /** - * If the `writer` is also a `Closer`, automatically close the `writer` - * when the stream is closed, aborted, or a write error occurs. - * - * @default {true} - */ - autoClose?: boolean; -} - -/** - * Create a {@linkcode WritableStream} from a {@linkcode Writer}. - * - * @deprecated (will be removed after 1.0.0) Use {@linkcode toWritableStream} instead. - */ -export function writableStreamFromWriter( - writer: Writer, - options: WritableStreamFromWriterOptions = {}, -): WritableStream { - return toWritableStream(writer, options); -} diff --git a/src/vendor/deno.land/std@0.217.0/streams/writer_from_stream_writer.ts b/src/vendor/deno.land/std@0.217.0/streams/writer_from_stream_writer.ts deleted file mode 100644 index 726884f402e..00000000000 --- a/src/vendor/deno.land/std@0.217.0/streams/writer_from_stream_writer.ts +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import type { Writer } from "../io/types.ts"; - -/** - * Create a {@linkcode Writer} from a {@linkcode WritableStreamDefaultWriter}. - * - * @example - * ```ts - * import { copy } from "https://deno.land/std@$STD_VERSION/io/copy.ts"; - * import { writerFromStreamWriter } from "https://deno.land/std@$STD_VERSION/streams/writer_from_stream_writer.ts"; - * - * using file = await Deno.open("./deno.land.html", { read: true }); - * - * const writableStream = new WritableStream({ - * write(chunk): void { - * console.log(chunk); - * }, - * }); - * const writer = writerFromStreamWriter(writableStream.getWriter()); - * await copy(file, writer); - * ``` - * - * @deprecated (will be removed after 1.0.0) Use {@linkcode WritableStreamDefaultWriter} directly. - */ -export function writerFromStreamWriter( - streamWriter: WritableStreamDefaultWriter, -): Writer { - return { - async write(p: Uint8Array): Promise { - await streamWriter.ready; - await streamWriter.write(p); - return p.length; - }, - }; -} diff --git a/src/vendor/deno.land/std@0.217.0/streams/zip_readable_streams.ts b/src/vendor/deno.land/std@0.217.0/streams/zip_readable_streams.ts deleted file mode 100644 index ca8e78b77c7..00000000000 --- a/src/vendor/deno.land/std@0.217.0/streams/zip_readable_streams.ts +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Merge multiple streams into a single one, taking order into account, and - * each stream will wait for a chunk to enqueue before the next stream can - * append another chunk. If a stream ends before other ones, the others will - * continue adding data in order, and the finished one will not add any more - * data. - * - * @example - * ```ts - * import { zipReadableStreams } from "https://deno.land/std@$STD_VERSION/streams/zip_readable_streams.ts"; - * - * const stream1 = ReadableStream.from(["1", "2", "3"]); - * const stream2 = ReadableStream.from(["a", "b", "c"]); - * const zippedStream = zipReadableStreams(stream1, stream2); - * - * await Array.fromAsync(zippedStream); // ["1", "a", "2", "b", "3", "c"]; - * ``` - */ -export function zipReadableStreams( - ...streams: ReadableStream[] -): ReadableStream { - const readers = new Set(streams.map((s) => s.getReader())); - return new ReadableStream({ - async start(controller) { - try { - let resolved = 0; - while (resolved !== streams.length) { - for (const reader of readers) { - const { value, done } = await reader.read(); - if (!done) { - controller.enqueue(value!); - } else { - resolved++; - readers.delete(reader); - } - } - } - controller.close(); - } catch (e) { - controller.error(e); - } - }, - }); -} diff --git a/src/vendor/deno.land/std@0.217.0/toml/parse.ts b/src/vendor/deno.land/std@0.217.0/toml/parse.ts deleted file mode 100644 index 5fbbac3e2b9..00000000000 --- a/src/vendor/deno.land/std@0.217.0/toml/parse.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { ParserFactory, Toml } from "./_parser.ts"; - -/** - * Parse parses TOML string into an object. - * @param tomlString - */ -export const parse: (tomlString: string) => Record = - ParserFactory(Toml); diff --git a/src/vendor/deno.land/std@0.217.0/uuid/constants.ts b/src/vendor/deno.land/std@0.217.0/uuid/constants.ts deleted file mode 100644 index 345f7bb57d8..00000000000 --- a/src/vendor/deno.land/std@0.217.0/uuid/constants.ts +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Name string is a fully-qualified domain name. - * - * @example - * ```ts - * import { NAMESPACE_DNS } from "https://deno.land/std@$STD_VERSION/uuid/constants.ts"; - * - * console.log(NAMESPACE_DNS); // => 6ba7b810-9dad-11d1-80b4-00c04fd430c8 - * ``` - */ -export const NAMESPACE_DNS = "6ba7b810-9dad-11d1-80b4-00c04fd430c8"; -/** - * Name string is a URL. - * - * @example - * ```ts - * import { NAMESPACE_URL } from "https://deno.land/std@$STD_VERSION/uuid/constants.ts"; - * - * console.log(NAMESPACE_URL); // => 6ba7b811-9dad-11d1-80b4-00c04fd430c8 - * ``` - */ -export const NAMESPACE_URL = "6ba7b811-9dad-11d1-80b4-00c04fd430c8"; -/** - * Name string is an ISO OID. - * - * @example - * ```ts - * import { NAMESPACE_OID } from "https://deno.land/std@$STD_VERSION/uuid/constants.ts"; - * - * console.log(NAMESPACE_OID); // => 6ba7b812-9dad-11d1-80b4-00c04fd430c8 - * ``` - */ -export const NAMESPACE_OID = "6ba7b812-9dad-11d1-80b4-00c04fd430c8"; -/** - * Name string is an X.500 DN (in DER or a text output format). - * - * @example - * ```ts - * import { NAMESPACE_X500 } from "https://deno.land/std@$STD_VERSION/uuid/constants.ts"; - * - * console.log(NAMESPACE_X500); // => 6ba7b814-9dad-11d1-80b4-00c04fd430c8 - * ``` - */ -export const NAMESPACE_X500 = "6ba7b814-9dad-11d1-80b4-00c04fd430c8"; diff --git a/src/vendor/deno.land/std@0.217.0/uuid/mod.ts b/src/vendor/deno.land/std@0.217.0/uuid/mod.ts deleted file mode 100644 index c3ab445504f..00000000000 --- a/src/vendor/deno.land/std@0.217.0/uuid/mod.ts +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Generators and validators for UUIDs for versions v1, v3, v4 and v5. - * - * Use {@linkcode crypto.randomUUID} for v4 generating v4 UUIDs. - * - * Based on https://github.com/kelektiv/node-uuid -> https://www.ietf.org/rfc/rfc4122.txt - * - * Support for RFC4122 version 1, 3, 4, and 5 UUIDs - * - * This module is browser compatible. - * - * @module - */ - -export * from "./constants.ts"; -export * as v1 from "./v1.ts"; -export * as v3 from "./v3.ts"; -export * as v4 from "./v4.ts"; -export * as v5 from "./v5.ts"; - -/** - * The nil UUID is special form of UUID that is specified to have all 128 bits - * set to zero. - */ -export const NIL_UUID = "00000000-0000-0000-0000-000000000000"; - -/** - * Check if the passed UUID is the nil UUID. - * - * @example - * ```ts - * import { isNil } from "https://deno.land/std@$STD_VERSION/uuid/mod.ts"; - * - * isNil("00000000-0000-0000-0000-000000000000"); // true - * isNil(crypto.randomUUID()); // false - * ``` - */ -export function isNil(id: string): boolean { - return id === NIL_UUID; -} - -/** - * Test a string to see if it is a valid UUID. - * - * @example - * ```ts - * import { validate } from "https://deno.land/std@$STD_VERSION/uuid/mod.ts"; - * - * validate("not a UUID"); // false - * validate("6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b"); // true - * ``` - */ -export function validate(uuid: string): boolean { - return /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i - .test( - uuid, - ); -} - -/** - * Detect RFC version of a UUID. - * - * @example - * ```ts - * import { version } from "https://deno.land/std@$STD_VERSION/uuid/mod.ts"; - * - * version("d9428888-122b-11e1-b85c-61cd3cbb3210"); // 1 - * version("109156be-c4fb-41ea-b1b4-efe1671c5836"); // 4 - * ``` - */ -export function version(uuid: string): number { - if (!validate(uuid)) { - throw new TypeError("Invalid UUID"); - } - - return parseInt(uuid[14], 16); -} diff --git a/src/vendor/deno.land/std@0.217.0/uuid/v3.ts b/src/vendor/deno.land/std@0.217.0/uuid/v3.ts deleted file mode 100644 index 466314f1bb1..00000000000 --- a/src/vendor/deno.land/std@0.217.0/uuid/v3.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { bytesToUuid, uuidToBytes } from "./_common.ts"; -import { concat } from "../bytes/concat.ts"; -import { assert } from "../assert/assert.ts"; -import { crypto } from "../crypto/crypto.ts"; - -const UUID_RE = - /^[0-9a-f]{8}-[0-9a-f]{4}-[3][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - -/** - * Validate that the passed UUID is an RFC4122 v3 UUID. - * - * @example - * ```ts - * import { generate, validate } from "https://deno.land/std@$STD_VERSION/uuid/v3.ts"; - * - * validate(await generate("6ba7b811-9dad-11d1-80b4-00c04fd430c8", new Uint8Array())); // true - * validate(crypto.randomUUID()); // false - * validate("this-is-not-a-uuid"); // false - * ``` - */ -export function validate(id: string): boolean { - return UUID_RE.test(id); -} - -/** - * Generate a RFC4122 v3 UUID (MD5 namespace). - * - * @example - * ```js - * import { generate } from "https://deno.land/std@$STD_VERSION/uuid/v3.ts"; - * - * const NAMESPACE_URL = "6ba7b811-9dad-11d1-80b4-00c04fd430c8"; - * - * const uuid = await generate(NAMESPACE_URL, new TextEncoder().encode("python.org")); - * uuid === "22fe6191-c161-3d86-a432-a81f343eda08" // true - * ``` - * - * @param namespace The namespace to use, encoded as a UUID. - * @param data The data to hash to calculate the MD5 digest for the UUID. - */ -export async function generate( - namespace: string, - data: Uint8Array, -): Promise { - // TODO(lino-levan): validate that `namespace` is a valid UUID. - - const space = uuidToBytes(namespace); - assert(space.length === 16, "namespace must be a valid UUID"); - - const toHash = concat([new Uint8Array(space), data]); - const buffer = await crypto.subtle.digest("MD5", toHash); - const bytes = new Uint8Array(buffer); - - bytes[6] = (bytes[6] & 0x0f) | 0x30; - bytes[8] = (bytes[8] & 0x3f) | 0x80; - - return bytesToUuid(bytes); -} diff --git a/src/vendor/deno.land/std@0.217.0/uuid/v4.ts b/src/vendor/deno.land/std@0.217.0/uuid/v4.ts deleted file mode 100644 index 169328f1e18..00000000000 --- a/src/vendor/deno.land/std@0.217.0/uuid/v4.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -const UUID_RE = - /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - -/** - * Validate that the passed UUID is an RFC4122 v4 UUID. - * - * @example - * ```ts - * import { validate } from "https://deno.land/std@$STD_VERSION/uuid/v4.ts"; - * import { generate as generateV1 } from "https://deno.land/std@$STD_VERSION/uuid/v1.ts"; - * - * validate(crypto.randomUUID()); // true - * validate(generateV1() as string); // false - * validate("this-is-not-a-uuid"); // false - * ``` - */ -export function validate(id: string): boolean { - return UUID_RE.test(id); -} diff --git a/src/vendor/deno.land/std@0.217.0/uuid/v5.ts b/src/vendor/deno.land/std@0.217.0/uuid/v5.ts deleted file mode 100644 index 539580cbb4c..00000000000 --- a/src/vendor/deno.land/std@0.217.0/uuid/v5.ts +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { bytesToUuid, uuidToBytes } from "./_common.ts"; -import { concat } from "../bytes/concat.ts"; -import { assert } from "../assert/assert.ts"; - -const UUID_RE = - /^[0-9a-f]{8}-[0-9a-f]{4}-[5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - -/** - * Validate that the passed UUID is an RFC4122 v5 UUID. - * - * @example - * ```ts - * import { generate as generateV5, validate } from "https://deno.land/std@$STD_VERSION/uuid/v5.ts"; - * - * validate(await generateV5("6ba7b811-9dad-11d1-80b4-00c04fd430c8", new Uint8Array())); // true - * validate(crypto.randomUUID()); // false - * validate("this-is-not-a-uuid"); // false - * ``` - */ -export function validate(id: string): boolean { - return UUID_RE.test(id); -} - -/** - * Generate a RFC4122 v5 UUID (SHA-1 namespace). - * - * @example - * ```js - * import { generate } from "https://deno.land/std@$STD_VERSION/uuid/v5.ts"; - * - * const NAMESPACE_URL = "6ba7b811-9dad-11d1-80b4-00c04fd430c8"; - * - * const uuid = await generate(NAMESPACE_URL, new TextEncoder().encode("python.org")); - * uuid === "7af94e2b-4dd9-50f0-9c9a-8a48519bdef0" // true - * ``` - * - * @param namespace The namespace to use, encoded as a UUID. - * @param data The data to hash to calculate the SHA-1 digest for the UUID. - */ -export async function generate( - namespace: string, - data: Uint8Array, -): Promise { - // TODO(lucacasonato): validate that `namespace` is a valid UUID. - - const space = uuidToBytes(namespace); - assert(space.length === 16, "namespace must be a valid UUID"); - - const toHash = concat([new Uint8Array(space), data]); - const buffer = await crypto.subtle.digest("sha-1", toHash); - const bytes = new Uint8Array(buffer); - - bytes[6] = (bytes[6] & 0x0f) | 0x50; - bytes[8] = (bytes[8] & 0x3f) | 0x80; - - return bytesToUuid(bytes); -} diff --git a/src/vendor/deno.land/std@0.217.0/version.ts b/src/vendor/deno.land/std@0.217.0/version.ts deleted file mode 100644 index 16745663deb..00000000000 --- a/src/vendor/deno.land/std@0.217.0/version.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -/** Version of the Deno standard modules - * - * Deno std is versioned differently than Deno cli because it is still unstable; - * the cli's API is stable. In the future when std becomes stable, likely we - * will match versions with cli as we have in the past. - */ -export const VERSION = "0.217.0"; diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_utils.ts b/src/vendor/deno.land/std@0.217.0/yaml/_utils.ts deleted file mode 100644 index ce12d306fd9..00000000000 --- a/src/vendor/deno.land/std@0.217.0/yaml/_utils.ts +++ /dev/null @@ -1,80 +0,0 @@ -// Ported from js-yaml v3.13.1: -// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da -// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -// deno-lint-ignore no-explicit-any -export type Any = any; - -export function isNothing(subject: unknown): subject is never { - return typeof subject === "undefined" || subject === null; -} - -export function isArray(value: unknown): value is Any[] { - return Array.isArray(value); -} - -export function isBoolean(value: unknown): value is boolean { - return typeof value === "boolean" || value instanceof Boolean; -} - -export function isNull(value: unknown): value is null { - return value === null; -} - -export function isNumber(value: unknown): value is number { - return typeof value === "number" || value instanceof Number; -} - -export function isString(value: unknown): value is string { - return typeof value === "string" || value instanceof String; -} - -export function isSymbol(value: unknown): value is symbol { - return typeof value === "symbol"; -} - -export function isUndefined(value: unknown): value is undefined { - return value === undefined; -} - -export function isObject(value: unknown): value is Record { - return value !== null && typeof value === "object"; -} - -export function isError(e: unknown): boolean { - return e instanceof Error; -} - -export function isFunction(value: unknown): value is () => void { - return typeof value === "function"; -} - -export function isRegExp(value: unknown): value is RegExp { - return value instanceof RegExp; -} - -export function toArray(sequence: T): T | [] | [T] { - if (isArray(sequence)) return sequence; - if (isNothing(sequence)) return []; - - return [sequence]; -} - -export function repeat(str: string, count: number): string { - let result = ""; - - for (let cycle = 0; cycle < count; cycle++) { - result += str; - } - - return result; -} - -export function isNegativeZero(i: number): boolean { - return i === 0 && Number.NEGATIVE_INFINITY === 1 / i; -} - -export interface ArrayObject { - [P: string]: T; -} diff --git a/src/vendor/deno.land/std@0.217.0/yaml/parse.ts b/src/vendor/deno.land/std@0.217.0/yaml/parse.ts deleted file mode 100644 index 9a6bf67e0ac..00000000000 --- a/src/vendor/deno.land/std@0.217.0/yaml/parse.ts +++ /dev/null @@ -1,57 +0,0 @@ -// Ported from js-yaml v3.13.1: -// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da -// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { CbFunction, load, loadAll } from "./_loader/loader.ts"; -import type { LoaderStateOptions } from "./_loader/loader_state.ts"; - -export type ParseOptions = LoaderStateOptions; - -/** - * Parses `content` as single YAML document. - * - * Returns a JavaScript object or throws `YAMLError` on error. - * By default, does not support regexps, functions and undefined. This method is safe for untrusted data. - */ -export function parse(content: string, options?: ParseOptions): unknown { - return load(content, options); -} - -/** - * Same as `parse()`, but understands multi-document sources. - * Applies iterator to each document if specified, or returns array of documents. - * - * @example - * ```ts - * import { parseAll } from "https://deno.land/std@$STD_VERSION/yaml/parse.ts"; - * - * const data = parseAll(` - * --- - * id: 1 - * name: Alice - * --- - * id: 2 - * name: Bob - * --- - * id: 3 - * name: Eve - * `); - * console.log(data); - * // => [ { id: 1, name: "Alice" }, { id: 2, name: "Bob" }, { id: 3, name: "Eve" } ] - * ``` - */ -export function parseAll( - content: string, - iterator: CbFunction, - options?: ParseOptions, -): void; -export function parseAll(content: string, options?: ParseOptions): unknown; -export function parseAll( - content: string, - iterator?: CbFunction | ParseOptions, - options?: ParseOptions, -): unknown { - return loadAll(content, iterator, options); -} diff --git a/src/vendor/deno.land/std@0.217.0/yaml/schema/extended.ts b/src/vendor/deno.land/std@0.217.0/yaml/schema/extended.ts deleted file mode 100644 index 879d65414e9..00000000000 --- a/src/vendor/deno.land/std@0.217.0/yaml/schema/extended.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { Schema } from "../schema.ts"; -import { regexp, undefinedType } from "../_type/mod.ts"; -import { def } from "./default.ts"; - -/*** - * Extends JS-YAML default schema with additional JavaScript types - * It is not described in the YAML specification. - * Functions are no longer supported for security reasons. - * - * @example - * ```ts - * import { - * EXTENDED_SCHEMA, - * parse, - * } from "https://deno.land/std@$STD_VERSION/yaml/mod.ts"; - * - * const data = parse( - * ` - * regexp: - * simple: !!js/regexp foobar - * modifiers: !!js/regexp /foobar/mi - * undefined: !!js/undefined ~ - * # Disabled, see: https://github.com/denoland/deno_std/pull/1275 - * # function: !!js/function > - * # function foobar() { - * # return 'hello world!'; - * # } - * `, - * { schema: EXTENDED_SCHEMA }, - * ); - * ``` - */ -export const extended: Schema = new Schema({ - explicit: [regexp, undefinedType], - include: [def], -}); diff --git a/src/vendor/deno.land/std@0.217.0/yaml/schema/mod.ts b/src/vendor/deno.land/std@0.217.0/yaml/schema/mod.ts deleted file mode 100644 index 0a5a8b95d72..00000000000 --- a/src/vendor/deno.land/std@0.217.0/yaml/schema/mod.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Ported from js-yaml v3.13.1: -// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da -// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -export { core as CORE_SCHEMA } from "./core.ts"; -export { def as DEFAULT_SCHEMA } from "./default.ts"; -export { extended as EXTENDED_SCHEMA } from "./extended.ts"; -export { failsafe as FAILSAFE_SCHEMA } from "./failsafe.ts"; -export { json as JSON_SCHEMA } from "./json.ts"; diff --git a/src/vendor/deno.land/std@0.217.0/yaml/stringify.ts b/src/vendor/deno.land/std@0.217.0/yaml/stringify.ts deleted file mode 100644 index 679bb407486..00000000000 --- a/src/vendor/deno.land/std@0.217.0/yaml/stringify.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Ported from js-yaml v3.13.1: -// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da -// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { dump } from "./_dumper/dumper.ts"; -import type { DumperStateOptions } from "./_dumper/dumper_state.ts"; - -export type DumpOptions = DumperStateOptions; - -/** - * Serializes `object` as a YAML document. - * - * You can disable exceptions by setting the skipInvalid option to true. - */ -export function stringify( - obj: Record, - options?: DumpOptions, -): string { - return dump(obj, options); -} diff --git a/src/vendor/deno.land/std@0.224.0/assert/assert.ts b/src/vendor/deno.land/std@0.224.0/assert/assert.ts new file mode 100644 index 00000000000..e8430bcb9ab --- /dev/null +++ b/src/vendor/deno.land/std@0.224.0/assert/assert.ts @@ -0,0 +1,20 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import { AssertionError } from "./assertion_error.ts"; + +/** + * Make an assertion, error will be thrown if `expr` does not have truthy value. + * + * @example + * ```ts + * import { assert } from "https://deno.land/std@$STD_VERSION/assert/assert.ts"; + * + * assert("hello".includes("ello")); // Doesn't throw + * assert("hello".includes("world")); // Throws + * ``` + */ +export function assert(expr: unknown, msg = ""): asserts expr { + if (!expr) { + throw new AssertionError(msg); + } +} diff --git a/src/vendor/deno.land/std@0.224.0/assert/assertion_error.ts b/src/vendor/deno.land/std@0.224.0/assert/assertion_error.ts new file mode 100644 index 00000000000..f000eea47e0 --- /dev/null +++ b/src/vendor/deno.land/std@0.224.0/assert/assertion_error.ts @@ -0,0 +1,20 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Error thrown when an assertion fails. + * + * @example + * ```ts + * import { AssertionError } from "https://deno.land/std@$STD_VERSION/assert/assertion_error.ts"; + * + * throw new AssertionError("Assertion failed"); + * ``` + */ +export class AssertionError extends Error { + /** Constructs a new instance. */ + constructor(message: string) { + super(message); + this.name = "AssertionError"; + } +} diff --git a/src/vendor/deno.land/std@0.196.0/console/_data.json b/src/vendor/deno.land/std@0.224.0/cli/_data.json similarity index 100% rename from src/vendor/deno.land/std@0.196.0/console/_data.json rename to src/vendor/deno.land/std@0.224.0/cli/_data.json diff --git a/src/vendor/deno.land/std@0.196.0/console/_rle.ts b/src/vendor/deno.land/std@0.224.0/cli/_run_length.ts similarity index 87% rename from src/vendor/deno.land/std@0.196.0/console/_rle.ts rename to src/vendor/deno.land/std@0.224.0/cli/_run_length.ts index e66bd4c370a..4bf2add29e0 100644 --- a/src/vendor/deno.land/std@0.196.0/console/_rle.ts +++ b/src/vendor/deno.land/std@0.224.0/cli/_run_length.ts @@ -1,4 +1,4 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. import { assert } from "../assert/assert.ts"; @@ -32,7 +32,7 @@ export function runLengthDecode({ d, r }: { d: string; r: string }) { let out = ""; for (const [i, ch] of [...runLengths].entries()) { - out += data[i].repeat(ch.codePointAt(0)!); + out += data[i]!.repeat(ch.codePointAt(0)!); } return Uint8Array.from([...out].map((x) => x.codePointAt(0)!)); diff --git a/src/vendor/deno.land/std@0.224.0/cli/unicode_width.ts b/src/vendor/deno.land/std@0.224.0/cli/unicode_width.ts new file mode 100644 index 00000000000..7cdd3350a22 --- /dev/null +++ b/src/vendor/deno.land/std@0.224.0/cli/unicode_width.ts @@ -0,0 +1,80 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +// Ported from unicode_width rust crate, Copyright (c) 2015 The Rust Project Developers. MIT license. + +import data from "./_data.json" with { type: "json" }; +import { runLengthDecode } from "./_run_length.ts"; + +let tables: Uint8Array[] | null = null; +function lookupWidth(cp: number) { + if (!tables) tables = data.tables.map(runLengthDecode); + + const t1Offset = (tables[0] as Uint8Array)[(cp >> 13) & 0xff] as number; + const t2Offset = + (tables[1] as Uint8Array)[128 * t1Offset + ((cp >> 6) & 0x7f)] as number; + const packedWidths = + (tables[2] as Uint8Array)[16 * t2Offset + ((cp >> 2) & 0xf)] as number; + + const width = (packedWidths >> (2 * (cp & 0b11))) & 0b11; + + return width === 3 ? 1 : width; +} + +const cache = new Map(); +function charWidth(ch: string) { + if (cache.has(ch)) return cache.get(ch)!; + + const cp = ch.codePointAt(0)!; + let v: number | null = null; + + if (cp < 0x7f) { + v = cp >= 0x20 ? 1 : cp === 0 ? 0 : null; + } else if (cp >= 0xa0) { + v = lookupWidth(cp); + } else { + v = null; + } + + cache.set(ch, v); + return v; +} + +/** + * Calculate the physical width of a string in a TTY-like environment. This is + * useful for cases such as calculating where a line-wrap will occur and + * underlining strings. + * + * The physical width is given by the number of columns required to display + * the string. The number of columns a given unicode character occupies can + * vary depending on the character itself. + * + * @param str The string to measure. + * @returns The unicode width of the string. + * + * @example Calculating the unicode width of a string + * ```ts + * import { unicodeWidth } from "https://deno.land/std@$STD_VERSION/cli/unicode_width.ts"; + * + * unicodeWidth("hello world"); // 11 + * unicodeWidth("天地玄黃宇宙洪荒"); // 16 + * unicodeWidth("fullwidth"); // 18 + * ``` + * + * @example Calculating the unicode width of a color-encoded string + * ```ts + * import { unicodeWidth } from "https://deno.land/std@$STD_VERSION/cli/unicode_width.ts"; + * import { stripAnsiCode } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts"; + * + * unicodeWidth(stripAnsiCode("\x1b[36mголубой\x1b[39m")); // 7 + * unicodeWidth(stripAnsiCode("\x1b[31m紅色\x1b[39m")); // 4 + * unicodeWidth(stripAnsiCode("\x1B]8;;https://deno.land\x07🦕\x1B]8;;\x07")); // 2 + * ``` + * + * Use + * {@linkcode https://jsr.io/@std/fmt/doc/colors/~/stripAnsiCode | stripAnsiCode} + * to remove ANSI escape codes from a string before passing it to + * {@linkcode unicodeWidth}. + */ +export function unicodeWidth(str: string): number { + return [...str].map((ch) => charWidth(ch) ?? 0).reduce((a, b) => a + b, 0); +} diff --git a/src/vendor/deno.land/std@0.224.0/console/unicode_width.ts b/src/vendor/deno.land/std@0.224.0/console/unicode_width.ts new file mode 100644 index 00000000000..538e25cfee9 --- /dev/null +++ b/src/vendor/deno.land/std@0.224.0/console/unicode_width.ts @@ -0,0 +1,48 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +// Ported from unicode_width rust crate, Copyright (c) 2015 The Rust Project Developers. MIT license. + +import { unicodeWidth as _unicodeWidth } from "../cli/unicode_width.ts"; + +/** + * Calculate the physical width of a string in a TTY-like environment. This is + * useful for cases such as calculating where a line-wrap will occur and + * underlining strings. + * + * The physical width is given by the number of columns required to display + * the string. The number of columns a given unicode character occupies can + * vary depending on the character itself. + * + * @param str The string to measure. + * @returns The unicode width of the string. + * + * @example Calculating the unicode width of a string + * ```ts + * import { unicodeWidth } from "https://deno.land/std@$STD_VERSION/console/unicode_width.ts"; + * + * unicodeWidth("hello world"); // 11 + * unicodeWidth("天地玄黃宇宙洪荒"); // 16 + * unicodeWidth("fullwidth"); // 18 + * ``` + * + * @example Calculating the unicode width of a color-encoded string + * ```ts + * import { unicodeWidth } from "https://deno.land/std@$STD_VERSION/console/unicode_width.ts"; + * import { stripAnsiCode } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts"; + * + * unicodeWidth(stripAnsiCode("\x1b[36mголубой\x1b[39m")); // 7 + * unicodeWidth(stripAnsiCode("\x1b[31m紅色\x1b[39m")); // 4 + * unicodeWidth(stripAnsiCode("\x1B]8;;https://deno.land\x07🦕\x1B]8;;\x07")); // 2 + * ``` + * + * Use + * {@linkcode https://jsr.io/@std/fmt/doc/colors/~/stripAnsiCode | stripAnsiCode} + * to remove ANSI escape codes from a string before passing it to + * {@linkcode unicodeWidth}. + * + * @deprecated Use {@linkcode unicodeWidth} from `std/cli` instead. This will be + * removed once the Standard Library migrates to {@link https://jsr.io/ | JSR}. + */ +export function unicodeWidth(str: string): number { + return _unicodeWidth(str); +} diff --git a/src/vendor/deno.land/std@0.217.0/encoding/_util.ts b/src/vendor/deno.land/std@0.224.0/encoding/_util.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/encoding/_util.ts rename to src/vendor/deno.land/std@0.224.0/encoding/_util.ts diff --git a/src/vendor/deno.land/std@0.217.0/encoding/ascii85.ts b/src/vendor/deno.land/std@0.224.0/encoding/ascii85.ts similarity index 85% rename from src/vendor/deno.land/std@0.217.0/encoding/ascii85.ts rename to src/vendor/deno.land/std@0.224.0/encoding/ascii85.ts index 1c186f96ac9..b85a3b60648 100644 --- a/src/vendor/deno.land/std@0.217.0/encoding/ascii85.ts +++ b/src/vendor/deno.land/std@0.224.0/encoding/ascii85.ts @@ -44,9 +44,9 @@ export interface Ascii85Options { delimiter?: boolean; } const rfc1924 = - "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~"; + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~" as const; const Z85 = - "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#"; + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#" as const; /** * Converts data into an ascii58-encoded string. @@ -55,7 +55,7 @@ const Z85 = * ```ts * import { encodeAscii85 } from "https://deno.land/std@$STD_VERSION/encoding/ascii85.ts"; * - * encodeAscii85("Hello world!"); // => "87cURD]j7BEbo80" + * encodeAscii85("Hello world!"); // "87cURD]j7BEbo80" * ``` */ export function encodeAscii85( @@ -65,10 +65,10 @@ export function encodeAscii85( let uint8 = validateBinaryLike(data); const standard = options?.standard ?? "Adobe"; - let output: string[] = [], - v: number, - n = 0, - difference = 0; + let output: string[] = []; + let v: number; + let n = 0; + let difference = 0; if (uint8.length % 4 !== 0) { const tmp = uint8; difference = 4 - (tmp.length % 4); @@ -76,13 +76,13 @@ export function encodeAscii85( uint8.set(tmp); } const view = new DataView(uint8.buffer, uint8.byteOffset, uint8.byteLength); - for (let i = 0, len = uint8.length; i < len; i += 4) { + for (let i = 0; i < uint8.length; i += 4) { v = view.getUint32(i); // Adobe and btoa standards compress 4 zeroes to single "z" character if ( (standard === "Adobe" || standard === "btoa") && v === 0 && - i < len - difference - 3 + i < uint8.length - difference - 3 ) { output[n++] = "z"; continue; @@ -114,23 +114,28 @@ export function encodeAscii85( } break; case "RFC 1924": - output = output.map((val) => rfc1924[val.charCodeAt(0) - 33]); + output = output.map((val) => rfc1924[val.charCodeAt(0) - 33]!); break; case "Z85": - output = output.map((val) => Z85[val.charCodeAt(0) - 33]); + output = output.map((val) => Z85[val.charCodeAt(0) - 33]!); break; } return output.slice(0, output.length - difference).join(""); } /** - * Decodes a given ascii85-encoded string. + * Decodes a ascii85-encoded string. + * + * @param ascii85 The ascii85-encoded string to decode. + * @param options Options for decoding. + * @returns The decoded data. * * @example * ```ts * import { decodeAscii85 } from "https://deno.land/std@$STD_VERSION/encoding/ascii85.ts"; * - * decodeAscii85("87cURD]j7BEbo80"); // => Uint8Array [ 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33 ] + * decodeAscii85("87cURD]j7BEbo80"); + * // Uint8Array(12) [ 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33 ] * ``` */ export function decodeAscii85( @@ -162,14 +167,14 @@ export function decodeAscii85( ); break; } - //remove all invalid characters + // remove all invalid characters ascii85 = ascii85.replaceAll(/[^!-u]/g, ""); - const len = ascii85.length, - output = new Uint8Array(len + 4 - (len % 4)); + const len = ascii85.length; + const output = new Uint8Array(len + 4 - (len % 4)); const view = new DataView(output.buffer); - let v = 0, - n = 0, - max = 0; + let v = 0; + let n = 0; + let max = 0; for (let i = 0; i < len;) { for (max += 5; i < max; i++) { v = v * 85 + (i < len ? ascii85.charCodeAt(i) : 117) - 33; diff --git a/src/vendor/deno.land/std@0.217.0/encoding/base32.ts b/src/vendor/deno.land/std@0.224.0/encoding/base32.ts similarity index 67% rename from src/vendor/deno.land/std@0.217.0/encoding/base32.ts rename to src/vendor/deno.land/std@0.224.0/encoding/base32.ts index acbe0089f3a..f64c6fb71ce 100644 --- a/src/vendor/deno.land/std@0.217.0/encoding/base32.ts +++ b/src/vendor/deno.land/std@0.224.0/encoding/base32.ts @@ -11,20 +11,22 @@ * * This module is browser compatible. * + * ```ts + * import { encodeBase32, decodeBase32 } from "https://deno.land/std@$STD_VERSION/encoding/base32.ts"; + * + * const encoded = encodeBase32("foobar"); // "MZXW6YTBOI======" + * + * decodeBase32(encoded); // Uint8Array(6) [ 102, 111, 111, 98, 97, 114 ] + * ``` + * * @module */ import { validateBinaryLike } from "./_util.ts"; -const lookup: string[] = []; +const lookup: string[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567".split(""); const revLookup: number[] = []; - -// RFC4648 base32 -const code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; -for (let i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i]; - revLookup[code.charCodeAt(i)] = i; -} +lookup.forEach((c, i) => revLookup[c.charCodeAt(0)] = i); const placeHolderPadLookup = [0, 1, , 2, 3, , 4]; function _getPadLen(placeHoldersLen: number): number { @@ -59,11 +61,15 @@ function _byteLength(validLen: number, placeHoldersLen: number): number { * * @see {@link https://datatracker.ietf.org/doc/html/rfc4648#section-6} * + * @param b32 The base32-encoded string to decode. + * @returns The decoded data. + * * @example * ```ts * import { decodeBase32 } from "https://deno.land/std@$STD_VERSION/encoding/base32.ts"; * - * decodeBase32("NRQMA==="); // Uint8Array(3) [ 108, 96, 192 ] + * decodeBase32("NRQMA==="); + * // Uint8Array(3) [ 108, 96, 192 ] * ``` */ export function decodeBase32(b32: string): Uint8Array { @@ -79,55 +85,55 @@ export function decodeBase32(b32: string): Uint8Array { let i: number; for (i = 0; i < len; i += 8) { - tmp = (revLookup[b32.charCodeAt(i)] << 20) | - (revLookup[b32.charCodeAt(i + 1)] << 15) | - (revLookup[b32.charCodeAt(i + 2)] << 10) | - (revLookup[b32.charCodeAt(i + 3)] << 5) | - revLookup[b32.charCodeAt(i + 4)]; + tmp = (revLookup[b32.charCodeAt(i)]! << 20) | + (revLookup[b32.charCodeAt(i + 1)]! << 15) | + (revLookup[b32.charCodeAt(i + 2)]! << 10) | + (revLookup[b32.charCodeAt(i + 3)]! << 5) | + revLookup[b32.charCodeAt(i + 4)]!; arr[curByte++] = (tmp >> 17) & 0xff; arr[curByte++] = (tmp >> 9) & 0xff; arr[curByte++] = (tmp >> 1) & 0xff; tmp = ((tmp & 1) << 15) | - (revLookup[b32.charCodeAt(i + 5)] << 10) | - (revLookup[b32.charCodeAt(i + 6)] << 5) | - revLookup[b32.charCodeAt(i + 7)]; + (revLookup[b32.charCodeAt(i + 5)]! << 10) | + (revLookup[b32.charCodeAt(i + 6)]! << 5) | + revLookup[b32.charCodeAt(i + 7)]!; arr[curByte++] = (tmp >> 8) & 0xff; arr[curByte++] = tmp & 0xff; } if (placeHoldersLen === 1) { - tmp = (revLookup[b32.charCodeAt(i)] << 20) | - (revLookup[b32.charCodeAt(i + 1)] << 15) | - (revLookup[b32.charCodeAt(i + 2)] << 10) | - (revLookup[b32.charCodeAt(i + 3)] << 5) | - revLookup[b32.charCodeAt(i + 4)]; + tmp = (revLookup[b32.charCodeAt(i)]! << 20) | + (revLookup[b32.charCodeAt(i + 1)]! << 15) | + (revLookup[b32.charCodeAt(i + 2)]! << 10) | + (revLookup[b32.charCodeAt(i + 3)]! << 5) | + revLookup[b32.charCodeAt(i + 4)]!; arr[curByte++] = (tmp >> 17) & 0xff; arr[curByte++] = (tmp >> 9) & 0xff; arr[curByte++] = (tmp >> 1) & 0xff; tmp = ((tmp & 1) << 7) | - (revLookup[b32.charCodeAt(i + 5)] << 2) | - (revLookup[b32.charCodeAt(i + 6)] >> 3); + (revLookup[b32.charCodeAt(i + 5)]! << 2) | + (revLookup[b32.charCodeAt(i + 6)]! >> 3); arr[curByte++] = tmp & 0xff; } else if (placeHoldersLen === 3) { - tmp = (revLookup[b32.charCodeAt(i)] << 19) | - (revLookup[b32.charCodeAt(i + 1)] << 14) | - (revLookup[b32.charCodeAt(i + 2)] << 9) | - (revLookup[b32.charCodeAt(i + 3)] << 4) | - (revLookup[b32.charCodeAt(i + 4)] >> 1); + tmp = (revLookup[b32.charCodeAt(i)]! << 19) | + (revLookup[b32.charCodeAt(i + 1)]! << 14) | + (revLookup[b32.charCodeAt(i + 2)]! << 9) | + (revLookup[b32.charCodeAt(i + 3)]! << 4) | + (revLookup[b32.charCodeAt(i + 4)]! >> 1); arr[curByte++] = (tmp >> 16) & 0xff; arr[curByte++] = (tmp >> 8) & 0xff; arr[curByte++] = tmp & 0xff; } else if (placeHoldersLen === 4) { - tmp = (revLookup[b32.charCodeAt(i)] << 11) | - (revLookup[b32.charCodeAt(i + 1)] << 6) | - (revLookup[b32.charCodeAt(i + 2)] << 1) | - (revLookup[b32.charCodeAt(i + 3)] >> 4); + tmp = (revLookup[b32.charCodeAt(i)]! << 11) | + (revLookup[b32.charCodeAt(i + 1)]! << 6) | + (revLookup[b32.charCodeAt(i + 2)]! << 1) | + (revLookup[b32.charCodeAt(i + 3)]! >> 4); arr[curByte++] = (tmp >> 8) & 0xff; arr[curByte++] = tmp & 0xff; } else if (placeHoldersLen === 6) { - tmp = (revLookup[b32.charCodeAt(i)] << 3) | - (revLookup[b32.charCodeAt(i + 1)] >> 2); + tmp = (revLookup[b32.charCodeAt(i)]! << 3) | + (revLookup[b32.charCodeAt(i + 1)]! >> 2); arr[curByte++] = tmp & 0xff; } @@ -138,16 +144,16 @@ function encodeChunk(uint8: Uint8Array, start: number, end: number): string { let tmp: number; const output = []; for (let i = start; i < end; i += 5) { - tmp = ((uint8[i] << 16) & 0xff0000) | - ((uint8[i + 1] << 8) & 0xff00) | - (uint8[i + 2] & 0xff); + tmp = ((uint8[i]! << 16) & 0xff0000) | + ((uint8[i + 1]! << 8) & 0xff00) | + (uint8[i + 2]! & 0xff); output.push(lookup[(tmp >> 19) & 0x1f]); output.push(lookup[(tmp >> 14) & 0x1f]); output.push(lookup[(tmp >> 9) & 0x1f]); output.push(lookup[(tmp >> 4) & 0x1f]); tmp = ((tmp & 0xf) << 16) | - ((uint8[i + 3] << 8) & 0xff00) | - (uint8[i + 4] & 0xff); + ((uint8[i + 3]! << 8) & 0xff00) | + (uint8[i + 4]! & 0xff); output.push(lookup[(tmp >> 15) & 0x1f]); output.push(lookup[(tmp >> 10) & 0x1f]); output.push(lookup[(tmp >> 5) & 0x1f]); @@ -157,10 +163,13 @@ function encodeChunk(uint8: Uint8Array, start: number, end: number): string { } /** - * Converts data to a base32-encoded string. + * Converts data into a base32-encoded string. * * @see {@link https://datatracker.ietf.org/doc/html/rfc4648#section-6} * + * @param data The data to encode. + * @returns The base32-encoded string. + * * @example * ```ts * import { encodeBase32 } from "https://deno.land/std@$STD_VERSION/encoding/base32.ts"; @@ -191,22 +200,22 @@ export function encodeBase32(data: ArrayBuffer | Uint8Array | string): string { // pad the end with zeros, but make sure to not forget the extra bytes if (extraBytes === 4) { - tmp = ((uint8[len2] & 0xff) << 16) | - ((uint8[len2 + 1] & 0xff) << 8) | - (uint8[len2 + 2] & 0xff); + tmp = ((uint8[len2]! & 0xff) << 16) | + ((uint8[len2 + 1]! & 0xff) << 8) | + (uint8[len2 + 2]! & 0xff); parts.push(lookup[(tmp >> 19) & 0x1f]); parts.push(lookup[(tmp >> 14) & 0x1f]); parts.push(lookup[(tmp >> 9) & 0x1f]); parts.push(lookup[(tmp >> 4) & 0x1f]); - tmp = ((tmp & 0xf) << 11) | (uint8[len2 + 3] << 3); + tmp = ((tmp & 0xf) << 11) | (uint8[len2 + 3]! << 3); parts.push(lookup[(tmp >> 10) & 0x1f]); parts.push(lookup[(tmp >> 5) & 0x1f]); parts.push(lookup[tmp & 0x1f]); parts.push("="); } else if (extraBytes === 3) { - tmp = ((uint8[len2] & 0xff) << 17) | - ((uint8[len2 + 1] & 0xff) << 9) | - ((uint8[len2 + 2] & 0xff) << 1); + tmp = ((uint8[len2]! & 0xff) << 17) | + ((uint8[len2 + 1]! & 0xff) << 9) | + ((uint8[len2 + 2]! & 0xff) << 1); parts.push(lookup[(tmp >> 20) & 0x1f]); parts.push(lookup[(tmp >> 15) & 0x1f]); parts.push(lookup[(tmp >> 10) & 0x1f]); @@ -214,14 +223,15 @@ export function encodeBase32(data: ArrayBuffer | Uint8Array | string): string { parts.push(lookup[tmp & 0x1f]); parts.push("==="); } else if (extraBytes === 2) { - tmp = ((uint8[len2] & 0xff) << 12) | ((uint8[len2 + 1] & 0xff) << 4); + tmp = ((uint8[len2]! & 0xff) << 12) | + ((uint8[len2 + 1]! & 0xff) << 4); parts.push(lookup[(tmp >> 15) & 0x1f]); parts.push(lookup[(tmp >> 10) & 0x1f]); parts.push(lookup[(tmp >> 5) & 0x1f]); parts.push(lookup[tmp & 0x1f]); parts.push("===="); } else if (extraBytes === 1) { - tmp = (uint8[len2] & 0xff) << 2; + tmp = (uint8[len2]! & 0xff) << 2; parts.push(lookup[(tmp >> 5) & 0x1f]); parts.push(lookup[tmp & 0x1f]); parts.push("======"); diff --git a/src/vendor/deno.land/std@0.217.0/encoding/base58.ts b/src/vendor/deno.land/std@0.224.0/encoding/base58.ts similarity index 72% rename from src/vendor/deno.land/std@0.217.0/encoding/base58.ts rename to src/vendor/deno.land/std@0.224.0/encoding/base58.ts index b9886ae8694..fd992ff372e 100644 --- a/src/vendor/deno.land/std@0.217.0/encoding/base58.ts +++ b/src/vendor/deno.land/std@0.224.0/encoding/base58.ts @@ -8,6 +8,15 @@ * * This module is browser compatible. * + * ```ts + * import { encodeBase58, decodeBase58 } from "https://deno.land/std@$STD_VERSION/encoding/base58.ts"; + * + * const encoded = encodeBase58("Hello World!"); // "2NEpo7TZRRrLZSi2U" + * + * decodeBase58(encoded); + * // Uint8Array(12) [ 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33 ] + * ``` + * * @module */ @@ -27,10 +36,13 @@ const base58alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz".split(""); /** - * Converts data to a base58-encoded string. + * Converts data into a base58-encoded string. * * @see {@link https://datatracker.ietf.org/doc/html/draft-msporny-base58-03#section-3} * + * @param data The data to encode. + * @returns The base58-encoded string. + * * @example * ```ts * import { encodeBase58 } from "https://deno.land/std@$STD_VERSION/encoding/base58.ts"; @@ -61,12 +73,12 @@ export function encodeBase58(data: ArrayBuffer | Uint8Array | string): string { let carry = byte; for ( - let reverse_iterator = size - 1; - (carry > 0 || i < length) && reverse_iterator !== -1; - reverse_iterator--, i++ + let reverseIterator = size - 1; + (carry > 0 || i < length) && reverseIterator !== -1; + reverseIterator--, i++ ) { - carry += (b58Encoding[reverse_iterator] || 0) * 256; - b58Encoding[reverse_iterator] = Math.round(carry % 58); + carry += (b58Encoding[reverseIterator] || 0) * 256; + b58Encoding[reverseIterator] = Math.round(carry % 58); carry = Math.floor(carry / 58); } @@ -81,7 +93,9 @@ export function encodeBase58(data: ArrayBuffer | Uint8Array | string): string { strResult.fill("1", 0, zeroes); } - b58Encoding.forEach((byteValue) => strResult.push(base58alphabet[byteValue])); + b58Encoding.forEach((byteValue) => + strResult.push(base58alphabet[byteValue]!) + ); return strResult.join(""); } @@ -91,11 +105,15 @@ export function encodeBase58(data: ArrayBuffer | Uint8Array | string): string { * * @see {@link https://datatracker.ietf.org/doc/html/draft-msporny-base58-03#section-4} * + * @param b58 The base58-encoded string to decode. + * @returns The decoded data. + * * @example * ```ts * import { decodeBase58 } from "https://deno.land/std@$STD_VERSION/encoding/base58.ts"; * - * decodeBase58("2NEpo7TZRRrLZSi2U"); // Uint8Array(12) [ 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33 ] + * decodeBase58("2NEpo7TZRRrLZSi2U"); + * // Uint8Array(12) [ 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33 ] * ``` */ export function decodeBase58(b58: string): Uint8Array { @@ -125,12 +143,12 @@ export function decodeBase58(b58: string): Uint8Array { } for ( - let reverse_iterator = size - 1; - (carry > 0 || i < length) && reverse_iterator !== -1; - reverse_iterator--, i++ + let reverseIterator = size - 1; + (carry > 0 || i < length) && reverseIterator !== -1; + reverseIterator--, i++ ) { - carry += 58 * (output[reverse_iterator] || 0); - output[reverse_iterator] = Math.round(carry % 256); + carry += 58 * (output[reverseIterator] || 0); + output[reverseIterator] = Math.round(carry % 256); carry = Math.floor(carry / 256); } diff --git a/src/vendor/deno.land/std@0.217.0/encoding/base64.ts b/src/vendor/deno.land/std@0.224.0/encoding/base64.ts similarity index 62% rename from src/vendor/deno.land/std@0.217.0/encoding/base64.ts rename to src/vendor/deno.land/std@0.224.0/encoding/base64.ts index b229f136022..f0651c6c162 100644 --- a/src/vendor/deno.land/std@0.217.0/encoding/base64.ts +++ b/src/vendor/deno.land/std@0.224.0/encoding/base64.ts @@ -8,6 +8,17 @@ * * This module is browser compatible. * + * ```ts + * import { + * encodeBase64, + * decodeBase64, + * } from "https://deno.land/std@$STD_VERSION/encoding/base64.ts"; + * + * const encoded = encodeBase64("foobar"); // "Zm9vYmFy" + * + * decodeBase64(encoded); // Uint8Array(6) [ 102, 111, 111, 98, 97, 114 ] + * ``` + * * @module */ @@ -85,6 +96,9 @@ const base64abc = [ * * @see {@link https://datatracker.ietf.org/doc/html/rfc4648#section-4} * + * @param data The data to encode. + * @returns The base64-encoded string. + * * @example * ```ts * import { encodeBase64 } from "https://deno.land/std@$STD_VERSION/encoding/base64.ts"; @@ -95,26 +109,35 @@ const base64abc = [ export function encodeBase64(data: ArrayBuffer | Uint8Array | string): string { // CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727 const uint8 = validateBinaryLike(data); - let result = "", - i; + let result = ""; + let i; const l = uint8.length; for (i = 2; i < l; i += 3) { - result += base64abc[uint8[i - 2] >> 2]; - result += base64abc[((uint8[i - 2] & 0x03) << 4) | (uint8[i - 1] >> 4)]; - result += base64abc[((uint8[i - 1] & 0x0f) << 2) | (uint8[i] >> 6)]; - result += base64abc[uint8[i] & 0x3f]; + result += base64abc[(uint8[i - 2]!) >> 2]; + result += base64abc[ + (((uint8[i - 2]!) & 0x03) << 4) | + ((uint8[i - 1]!) >> 4) + ]; + result += base64abc[ + (((uint8[i - 1]!) & 0x0f) << 2) | + ((uint8[i]!) >> 6) + ]; + result += base64abc[(uint8[i]!) & 0x3f]; } if (i === l + 1) { // 1 octet yet to write - result += base64abc[uint8[i - 2] >> 2]; - result += base64abc[(uint8[i - 2] & 0x03) << 4]; + result += base64abc[(uint8[i - 2]!) >> 2]; + result += base64abc[((uint8[i - 2]!) & 0x03) << 4]; result += "=="; } if (i === l) { // 2 octets yet to write - result += base64abc[uint8[i - 2] >> 2]; - result += base64abc[((uint8[i - 2] & 0x03) << 4) | (uint8[i - 1] >> 4)]; - result += base64abc[(uint8[i - 1] & 0x0f) << 2]; + result += base64abc[(uint8[i - 2]!) >> 2]; + result += base64abc[ + (((uint8[i - 2]!) & 0x03) << 4) | + ((uint8[i - 1]!) >> 4) + ]; + result += base64abc[((uint8[i - 1]!) & 0x0f) << 2]; result += "="; } return result; @@ -125,11 +148,14 @@ export function encodeBase64(data: ArrayBuffer | Uint8Array | string): string { * * @see {@link https://datatracker.ietf.org/doc/html/rfc4648#section-4} * + * @param b64 The base64-encoded string to decode. + * @returns The decoded data. + * * @example * ```ts - * import { encodeBase64 } from "https://deno.land/std@$STD_VERSION/encoding/base64.ts"; + * import { decodeBase64 } from "https://deno.land/std@$STD_VERSION/encoding/base64.ts"; * - * encodeBase64("foobar"); // "Zm9vYmFy" + * decodeBase64("Zm9vYmFy"); // Uint8Array(6) [ 102, 111, 111, 98, 97, 114 ] * ``` */ export function decodeBase64(b64: string): Uint8Array { diff --git a/src/vendor/deno.land/std@0.217.0/encoding/base64url.ts b/src/vendor/deno.land/std@0.224.0/encoding/base64url.ts similarity index 91% rename from src/vendor/deno.land/std@0.217.0/encoding/base64url.ts rename to src/vendor/deno.land/std@0.224.0/encoding/base64url.ts index 831718474f8..4043895d528 100644 --- a/src/vendor/deno.land/std@0.217.0/encoding/base64url.ts +++ b/src/vendor/deno.land/std@0.224.0/encoding/base64url.ts @@ -49,11 +49,14 @@ function convertBase64ToBase64url(b64: string) { * * @see {@link https://datatracker.ietf.org/doc/html/rfc4648#section-5} * + * @param data The data to encode. + * @returns The base64url-encoded string. + * * @example * ```ts * import { encodeBase64Url } from "https://deno.land/std@$STD_VERSION/encoding/base64url.ts"; * - * encodeBase64Url(new TextEncoder().encode("foobar")); // "Zm9vYmFy" + * encodeBase64Url("foobar"); // "Zm9vYmFy" * ``` */ export function encodeBase64Url( @@ -67,6 +70,9 @@ export function encodeBase64Url( * * @see {@link https://datatracker.ietf.org/doc/html/rfc4648#section-5} * + * @param b64url The base64url-encoded string to decode. + * @returns The decoded data. + * * @example * ```ts * import { decodeBase64Url } from "https://deno.land/std@$STD_VERSION/encoding/base64url.ts"; diff --git a/src/vendor/deno.land/std@0.217.0/encoding/hex.ts b/src/vendor/deno.land/std@0.224.0/encoding/hex.ts similarity index 84% rename from src/vendor/deno.land/std@0.217.0/encoding/hex.ts rename to src/vendor/deno.land/std@0.224.0/encoding/hex.ts index 4f21681a27e..1bb1c1d57b8 100644 --- a/src/vendor/deno.land/std@0.217.0/encoding/hex.ts +++ b/src/vendor/deno.land/std@0.224.0/encoding/hex.ts @@ -10,20 +10,15 @@ * * This module is browser compatible. * - * @example * ```ts * import { * decodeHex, * encodeHex, * } from "https://deno.land/std@$STD_VERSION/encoding/hex.ts"; * - * const binary = new TextEncoder().encode("abc"); - * const encoded = encodeHex(binary); - * console.log(encoded); - * // => "616263" + * const encoded = encodeHex("abc"); // "616263" * - * console.log(decodeHex(encoded)); - * // => Uint8Array(3) [ 97, 98, 99 ] + * decodeHex(encoded); // Uint8Array(3) [ 97, 98, 99 ] * ``` * * @module @@ -70,9 +65,9 @@ export function encodeHex(src: string | Uint8Array | ArrayBuffer): string { const dst = new Uint8Array(u8.length * 2); for (let i = 0; i < dst.length; i++) { - const v = u8[i]; - dst[i * 2] = hexTable[v >> 4]; - dst[i * 2 + 1] = hexTable[v & 0x0f]; + const v = u8[i]!; + dst[i * 2] = hexTable[v >> 4]!; + dst[i * 2 + 1] = hexTable[v & 0x0f]!; } return textDecoder.decode(dst); } @@ -92,15 +87,15 @@ export function decodeHex(src: string): Uint8Array { const u8 = textEncoder.encode(src); const dst = new Uint8Array(u8.length / 2); for (let i = 0; i < dst.length; i++) { - const a = fromHexChar(u8[i * 2]); - const b = fromHexChar(u8[i * 2 + 1]); + const a = fromHexChar(u8[i * 2]!); + const b = fromHexChar(u8[i * 2 + 1]!); dst[i] = (a << 4) | b; } if (u8.length % 2 === 1) { // Check for invalid char before reporting bad length, // since the invalid char (if present) is an earlier problem. - fromHexChar(u8[dst.length * 2]); + fromHexChar(u8[dst.length * 2]!); throw errLength(); } diff --git a/src/vendor/deno.land/std@0.217.0/encoding/varint.ts b/src/vendor/deno.land/std@0.224.0/encoding/varint.ts similarity index 51% rename from src/vendor/deno.land/std@0.217.0/encoding/varint.ts rename to src/vendor/deno.land/std@0.224.0/encoding/varint.ts index 07e411ecd09..77fd07878fc 100644 --- a/src/vendor/deno.land/std@0.217.0/encoding/varint.ts +++ b/src/vendor/deno.land/std@0.224.0/encoding/varint.ts @@ -4,6 +4,16 @@ /** * Functions for encoding typed integers in array buffers. * + * ```ts + * import { encode, decode } from "https://deno.land/std@$STD_VERSION/encoding/varint.ts"; + * + * const buf = new Uint8Array(10); + * const [encoded, bytesWritten] = encode(42n, buf); + * // [ Uint8Array(1) [ 42 ], 1 ]; + * + * decode(encoded); // [ 42n, 1 ]; + * ``` + * * @module */ @@ -37,8 +47,52 @@ const U64_VIEW = new BigUint64Array(AB); * * To know how many bytes the VarInt took to encode, simply negate `offset` * from the returned new `offset`. + * + * @param buf The buffer to decode from. + * @param offset The offset to start decoding from. + * @returns A tuple of the decoded varint 64-bit number, and the new offset. + * + * @example + * ```ts + * import { decode } from "https://deno.land/std@$STD_VERSION/encoding/varint.ts"; + * + * const buf = new Uint8Array([0x8E, 0x02]); + * decode(buf); // [ 300n, 2 ]; + * ``` + * + * @deprecated This will be removed in 1.0.0. Use {@linkcode decodeVarint} + * instead. */ export function decode(buf: Uint8Array, offset = 0): [bigint, number] { + return decodeVarint(buf, offset); +} + +/** + * Given a non empty `buf`, starting at `offset` (default: 0), begin decoding bytes as + * VarInt encoded bytes, for a maximum of 10 bytes (offset + 10). The returned + * tuple is of the decoded varint 32-bit number, and the new offset with which + * to continue decoding other data. + * + * If a `bigint` in return is undesired, the `decode32` function will return a + * `number`, but this should only be used in cases where the varint is + * _assured_ to be 32-bits. If in doubt, use `decode()`. + * + * To know how many bytes the VarInt took to encode, simply negate `offset` + * from the returned new `offset`. + * + * @param buf The buffer to decode from. + * @param offset The offset to start decoding from. + * @returns A tuple of the decoded varint 64-bit number, and the new offset. + * + * @example + * ```ts + * import { decodeVarint } from "https://deno.land/std@$STD_VERSION/encoding/varint.ts"; + * + * const buf = new Uint8Array([0x8E, 0x02]); + * decodeVarint(buf); // [ 300n, 2 ]; + * ``` + */ +export function decodeVarint(buf: Uint8Array, offset = 0): [bigint, number] { // Clear the last result from the Two's complement view U64_VIEW[0] = 0n; @@ -53,7 +107,7 @@ export function decode(buf: Uint8Array, offset = 0): [bigint, number] { let byte; do { // Get a single byte from the buffer - byte = buf[i]; + byte = buf[i]!; // 1. Take the lower 7 bits of the byte. // 2. Shift the bits into the correct position. @@ -110,17 +164,59 @@ export function decode(buf: Uint8Array, offset = 0): [bigint, number] { * * To know how many bytes the VarInt took to encode, simply negate `offset` * from the returned new `offset`. + * + * @param buf The buffer to decode from. + * @param offset The offset to start decoding from. + * @returns A tuple of the decoded varint 32-bit number, and the new offset. + * + * @example + * ```ts + * import { decode32 } from "https://deno.land/std@$STD_VERSION/encoding/varint.ts"; + * + * const buf = new Uint8Array([0x8E, 0x02]); + * decode32(buf); // [ 300, 2 ]; + * ``` + * + * @deprecated This will be removed in 1.0.0. Use {@linkcode decodeVarint32} + * instead. */ export function decode32(buf: Uint8Array, offset = 0): [number, number] { + return decodeVarint32(buf, offset); +} + +/** + * Given a `buf`, starting at `offset` (default: 0), begin decoding bytes as + * VarInt encoded bytes, for a maximum of 5 bytes (offset + 5). The returned + * tuple is of the decoded varint 32-bit number, and the new offset with which + * to continue decoding other data. + * + * VarInts are _not 32-bit by default_ so this should only be used in cases + * where the varint is _assured_ to be 32-bits. If in doubt, use `decode()`. + * + * To know how many bytes the VarInt took to encode, simply negate `offset` + * from the returned new `offset`. + * + * @param buf The buffer to decode from. + * @param offset The offset to start decoding from. + * @returns A tuple of the decoded varint 32-bit number, and the new offset. + * + * @example + * ```ts + * import { decodeVarint32 } from "https://deno.land/std@$STD_VERSION/encoding/varint.ts"; + * + * const buf = new Uint8Array([0x8E, 0x02]); + * decodeVarint32(buf); // [ 300, 2 ]; + * ``` + */ +export function decodeVarint32(buf: Uint8Array, offset = 0): [number, number] { + let shift = 0; + let decoded = 0; for ( - let i = offset, - len = Math.min(buf.length, offset + MaxVarIntLen32), - shift = 0, - decoded = 0; - i <= len; + let i = offset; + i <= Math.min(buf.length, offset + MaxVarIntLen32); i += 1, shift += SHIFT ) { - const byte = buf[i]; + const byte = buf[i]!; decoded += (byte & REST) * Math.pow(2, shift); if (!(byte & MSB)) return [decoded, i + 1]; } @@ -139,17 +235,66 @@ export function decode32(buf: Uint8Array, offset = 0): [number, number] { * If passed `buf` then that will be written into, starting at `offset`. The * resulting returned `Uint8Array` will be a slice of `buf`. The resulting * returned number is effectively `offset + bytesWritten`. + * + * @param num The number to encode. + * @param buf The buffer to write into. + * @param offset The offset to start writing at. + * @returns A tuple of the encoded VarInt `Uint8Array` and the new offset. + * + * @example + * ```ts + * import { encode } from "https://deno.land/std@$STD_VERSION/encoding/varint.ts"; + * + * const buf = new Uint8Array(10); + * encode(42n, buf); // [ Uint8Array(1) [ 42 ], 1 ]; + * ``` + * + * @deprecated This will be removed in 1.0.0. Use {@linkcode encodeVarint} instead. */ export function encode( num: bigint | number, buf: Uint8Array = new Uint8Array(MaxVarIntLen64), offset = 0, +): [Uint8Array, number] { + return encodeVarint(num, buf, offset); +} + +/** + * Takes unsigned number `num` and converts it into a VarInt encoded + * `Uint8Array`, returning a tuple consisting of a `Uint8Array` slice of the + * encoded VarInt, and an offset where the VarInt encoded bytes end within the + * `Uint8Array`. + * + * If `buf` is not given then a Uint8Array will be created. + * `offset` defaults to `0`. + * + * If passed `buf` then that will be written into, starting at `offset`. The + * resulting returned `Uint8Array` will be a slice of `buf`. The resulting + * returned number is effectively `offset + bytesWritten`. + * + * @param num The number to encode. + * @param buf The buffer to write into. + * @param offset The offset to start writing at. + * @returns A tuple of the encoded VarInt `Uint8Array` and the new offset. + * + * @example + * ```ts + * import { encodeVarint } from "https://deno.land/std@$STD_VERSION/encoding/varint.ts"; + * + * const buf = new Uint8Array(10); + * encodeVarint(42n, buf); // [ Uint8Array(1) [ 42 ], 1 ]; + * ``` + */ +export function encodeVarint( + num: bigint | number, + buf: Uint8Array = new Uint8Array(MaxVarIntLen64), + offset = 0, ): [Uint8Array, number] { num = BigInt(num); if (num < 0n) throw new RangeError("signed input given"); for ( - let i = offset, len = Math.min(buf.length, MaxVarIntLen64); - i <= len; + let i = offset; + i <= Math.min(buf.length, MaxVarIntLen64); i += 1 ) { if (num < MSBN) { diff --git a/src/vendor/deno.land/std@0.217.0/fmt/bytes.ts b/src/vendor/deno.land/std@0.224.0/fmt/bytes.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/fmt/bytes.ts rename to src/vendor/deno.land/std@0.224.0/fmt/bytes.ts diff --git a/src/vendor/deno.land/std@0.217.0/fmt/colors.ts b/src/vendor/deno.land/std@0.224.0/fmt/colors.ts similarity index 99% rename from src/vendor/deno.land/std@0.217.0/fmt/colors.ts rename to src/vendor/deno.land/std@0.224.0/fmt/colors.ts index 8e5048b470c..0746be9b0c5 100644 --- a/src/vendor/deno.land/std@0.217.0/fmt/colors.ts +++ b/src/vendor/deno.land/std@0.224.0/fmt/colors.ts @@ -573,7 +573,7 @@ const ANSI_PATTERN = new RegExp( * Remove ANSI escape codes from the string. * @param string to remove ANSI escape codes from * - * @deprecated (will be removed in 1.0.0) Use {@linkcode stripAnsiCode} instead. + * @deprecated This will be removed in 1.0.0. Use {@linkcode stripAnsiCode} instead. */ export function stripColor(string: string): string { return stripAnsiCode(string); diff --git a/src/vendor/deno.land/std@0.217.0/fmt/printf.ts b/src/vendor/deno.land/std@0.224.0/fmt/printf.ts similarity index 97% rename from src/vendor/deno.land/std@0.217.0/fmt/printf.ts rename to src/vendor/deno.land/std@0.224.0/fmt/printf.ts index 86344a7221a..42ed9c0983c 100644 --- a/src/vendor/deno.land/std@0.217.0/fmt/printf.ts +++ b/src/vendor/deno.land/std@0.224.0/fmt/printf.ts @@ -256,7 +256,7 @@ class Printf { this.flags = new Flags(); const flags = this.flags; for (; this.i < this.format.length; ++this.i) { - const c = this.format[this.i]; + const c = this.format[this.i]!; switch (this.state) { case State.PERCENT: switch (c) { @@ -352,7 +352,7 @@ class Printf { handleWidthAndPrecision(flags: Flags) { const fmt = this.format; for (; this.i !== this.format.length; ++this.i) { - const c = fmt[this.i]; + const c = fmt[this.i]!; switch (this.state) { case State.WIDTH: switch (c) { @@ -418,7 +418,7 @@ class Printf { break; } positional *= 10; - const val = parseInt(format[this.i]); + const val = parseInt(format[this.i]!, 10); if (isNaN(val)) { //throw new Error( // `invalid character in positional: ${format}[${format[this.i]}]` @@ -453,7 +453,7 @@ class Printf { /** Handle verb */ handleVerb() { const verb = this.format[this.i]; - this.verb = verb; + this.verb = verb || this.verb; if (this.tmpError) { this.buf += this.tmpError; this.tmpError = undefined; @@ -691,20 +691,18 @@ class Printf { if (!m) { throw Error("can't happen, bug"); } - let fractional = m[F.fractional]; const precision = this.flags.precision !== -1 ? this.flags.precision : DEFAULT_PRECISION; - let rounding = false; - [fractional, rounding] = this.roundFractionToPrecision( - fractional, + const [fractional, rounding] = this.roundFractionToPrecision( + m[F.fractional] || "", precision, ); - let e = m[F.exponent]; - let esign = m[F.esign]; + let e = m[F.exponent]!; + let esign = m[F.esign]!; // scientific notation output with exponent padded to minlen 2 - let mantissa = parseInt(m[F.mantissa]); + let mantissa = parseInt(m[F.mantissa]!); if (rounding) { mantissa += 1; if (10 <= mantissa) { @@ -737,8 +735,8 @@ class Printf { } const t = n.toExponential().split("e"); - let m = t[0].replace(".", ""); - const e = parseInt(t[1]); + let m = t[0]!.replace(".", ""); + const e = parseInt(t[1]!); if (e < 0) { let nStr = "0."; for (let i = 0; i !== Math.abs(e) - 1; ++i) { @@ -755,9 +753,7 @@ class Printf { } // avoiding sign makes padding easier const val = expandNumber(Math.abs(n)) as string; - const arr = val.split("."); - let dig = arr[0]; - let fractional = arr[1]; + let [dig, fractional] = val.split(".") as [string, string]; const precision = this.flags.precision !== -1 ? this.flags.precision @@ -814,7 +810,7 @@ class Printf { throw Error("can't happen"); } - const X = parseInt(m[F.exponent]) * (m[F.esign] === "-" ? -1 : 1); + const X = parseInt(m[F.exponent]!) * (m[F.esign] === "-" ? -1 : 1); let nStr = ""; if (P > X && X >= -4) { this.flags.precision = P - (X + 1); diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/build/deno-wasm/deno-wasm.js b/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/build/deno-wasm/deno-wasm.js deleted file mode 100644 index 82834f2212a..00000000000 --- a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/build/deno-wasm/deno-wasm.js +++ /dev/null @@ -1,188 +0,0 @@ -let wasm; - -let WASM_VECTOR_LEN = 0; - -let cachegetUint8Memory0 = null; -function getUint8Memory0() { - if ( - cachegetUint8Memory0 === null || - cachegetUint8Memory0.buffer !== wasm.memory.buffer - ) { - cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachegetUint8Memory0; -} - -let cachedTextEncoder = new TextEncoder("utf-8"); - -const encodeString = - (typeof cachedTextEncoder.encodeInto === "function" - ? function (arg, view) { - return cachedTextEncoder.encodeInto(arg, view); - } - : function (arg, view) { - const buf = cachedTextEncoder.encode(arg); - view.set(buf); - return { - read: arg.length, - written: buf.length, - }; - }); - -function passStringToWasm0(arg, malloc, realloc) { - if (realloc === undefined) { - const buf = cachedTextEncoder.encode(arg); - const ptr = malloc(buf.length); - getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); - WASM_VECTOR_LEN = buf.length; - return ptr; - } - - let len = arg.length; - let ptr = malloc(len); - - const mem = getUint8Memory0(); - - let offset = 0; - - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7F) break; - mem[ptr + offset] = code; - } - - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, len = offset + arg.length * 3); - const view = getUint8Memory0().subarray(ptr + offset, ptr + len); - const ret = encodeString(arg, view); - - offset += ret.written; - } - - WASM_VECTOR_LEN = offset; - return ptr; -} - -let cachegetInt32Memory0 = null; -function getInt32Memory0() { - if ( - cachegetInt32Memory0 === null || - cachegetInt32Memory0.buffer !== wasm.memory.buffer - ) { - cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachegetInt32Memory0; -} - -let cachedTextDecoder = new TextDecoder("utf-8", { - ignoreBOM: true, - fatal: true, -}); - -cachedTextDecoder.decode(); - -function getStringFromWasm0(ptr, len) { - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); -} -/** - * @param {string} html - * @returns {string} - */ -export function parse(html) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - var ptr0 = passStringToWasm0( - html, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len0 = WASM_VECTOR_LEN; - wasm.parse(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(r0, r1); - } -} - -/** - * @param {string} html - * @returns {string} - */ -export function parse_frag(html) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - var ptr0 = passStringToWasm0( - html, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len0 = WASM_VECTOR_LEN; - wasm.parse_frag(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(r0, r1); - } -} - -async function load(module, imports) { - if (typeof Response === "function" && module instanceof Response) { - if (typeof WebAssembly.instantiateStreaming === "function") { - try { - return await WebAssembly.instantiateStreaming(module, imports); - } catch (e) { - if (module.headers.get("Content-Type") != "application/wasm") { - console.warn( - "`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", - e, - ); - } else { - throw e; - } - } - } - - const bytes = await module.arrayBuffer(); - return await WebAssembly.instantiate(bytes, imports); - } else { - const instance = await WebAssembly.instantiate(module, imports); - - if (instance instanceof WebAssembly.Instance) { - return { instance, module }; - } else { - return instance; - } - } -} - -async function init(input) { - if (typeof input === "undefined") { - input = new URL("deno-wasm_bg.wasm", import.meta.url); - } - const imports = {}; - imports.env = { now() {} }; - - input = Uint8Array.from( - atob( - "AGFzbQEAAAAB1QEfYAN/f38Bf2ACf38Bf2ACf38AYAF/AGADf39/AGABfwF/YAR/f39/AGAAAGAFf39/f38AYAR/f39/AX9gAAF/YAJ/fgF/YAF/AX5gBH9/f34AYAJ/fgBgBX9/f39/AX9gBn9/f39/fwBgBX9/f39+AGAJf39/f39/fn5+AGADf39+AGAEf35/fwBgBX9+f35/AGACf3wAYAZ/f39/f38Bf2AHf39/f39/fwF/YAV/f35+fwF/YAN/fH8Bf2AEf3x/fwF/YAN+f38Bf2ACf38BfmAAAXwCCwEDZW52A25vdwAeA/wD+gMGBA0EAgMIDgIFAgQRBAIGBAkJAAMBAAMMAgIBBgIAGQICAQYEAwMIAQQBAQICAwAAGxcCAgMdCQYCBgETBAMAAxoEBQQEBAIBCAIDAwQEAAIBAgMHBQMFEQILAwMCAgACAQIDBQsCBhQBAhINAwEBAQQDAgAPAQ4CBAQEAgIBEAkDEAIBGA8BCAQFDwIBBAECAQICAQMAHAEOAQMBAQUAAgsEAwIFAQECAgICAQECBQQDAQMDCgIBAQMBAQEDAgIBAwEDBQQDAQIDAQMBBQICBAIBFgUFBAQCAgICBAQCCAECAQEBBAMCCwMCDQICBAQCBAUFAQAEBAICAwUFAgMDAwMDAQEBAQECAQMEAwQGAwMEAQEBAQEDAwMDAQEBAwQBAQEBAQEBAwAFBgIBAAEEAQEGAwgCBQMEBAEBAgEGAgECAgIEAgICBAEBAQICBAQBAQIBAQECAQEFAQEBAQEKAQIBAQEBAhUFCgEFAQMCAgEBAQACAgIABQAAAAcAAwUDAgoJAwEEAgIFAgMBAgECAQEBAQMBBwcCAgMDBQsFAQEKAQYBAQUDBAIFBAYCBgIBAQQDAwQAAQEDAQIFBQIBAQEBAQkCAQEBAQEBAQEBAgEBBwcBAQEEBAABBQEBAQEBAQEBAQEBAQICAgABAQEAAAAEAQwBDAwDAgQHAXABrwGvAQUDAQAVBgkBfwFBgIDAAAsHggEHBm1lbW9yeQIABXBhcnNlANcBCnBhcnNlX2ZyYWcA2AEfX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcgDcAxFfX3diaW5kZ2VuX21hbGxvYwCdAxJfX3diaW5kZ2VuX3JlYWxsb2MAtwMPX193YmluZGdlbl9m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DfEBIAQoAgQhASAEQYABaiADQRhqKQMANwMAIARB+ABqIANBEGopAwA3AwAgBEHwAGogA0EIaikDADcDACAEIAMpAwA3A2ggACABQQYgBEHoAGoQAQzyAQsgBCgCBCECIARBgAFqIANBGGopAwA3AwAgBEH4AGogA0EQaikDADcDACAEQfAAaiABKQMANwMAIAQgAykDADcDaCAAIAJBAyAEQegAahABDPEBCyADQRxqLQAARQ0FDOwBCyAEKAIEIQEgBEHwAGogA0EMaigCADYCACAEIANBBGopAgA3A2ggACABIARB6ABqEJICDOwBCyADLQABDgIBAuoBCyAAQQA6AAAM6gELIABBAjoAACAAQQxqIANBDGooAgA2AgAgAEEEaiADQQRqKQIANwIAQQAhAQzOAQsgBCgCBCEBIARBgAFqIANBGGopAwA3AwAgBEH4AGogA0EQaikDADcDACAEQfAAaiADQQhqKQMANwMAIAQgAykDADcDaCAAIAFBBiAEQegAahABDOsBCyADQQhqIgEpAwBCgoCAgKDmAFIN5gEgBCgCBCECIARBgAFqIANBGGopAwA3AwAgBEH4AGogA0EQaikDADcDACAEQfAAaiABKQMANwMAIAQgAykDADcDaCAAIAJBBiAEQegAahABDOoBCyAEKAIEIQEgBEHwAGogA0EMaigCADYCACAEIANBBGopAgA3A2ggACABIARB6ABqEPIBDOYBCyADLQABDgIBAuEBCyAAQQA6AAAM5AELIABBAjoAACAAQQxqIANBDGooAgA2AgAgAEEEaiADQQRqKQIANwIAQQAhAQzIAQsgBCgCBCEBIARB8ABqIANBDGooAgA2AgAgBCADQQRqKQIANwNoIAAgASAEQegAahC6AkEAIQEMxwELIANBCGopAwAhCiADQRxqLQAARQ3cASAKQoKAgICg5gBSDd0BIAQoAgRBFjoAYiAAQQA6AAAM4QELIAQoAgQhASAEQfAAaiADQQxqKAIANgIAIAQgA0EEaikCADcDaCAAIAEgBEHoAGoQ8gEM4AELIAMtAAEOAgEC1AELQQEhAiAEKAIEIgFBQGsoAgBBAUcEQCAEQegAaiABIAMQeyAEQegAahDnAQsgAEEAOgAAQQEhAQzfAQsgAEECOgAAIABBDGogA0EMaigCADYCACAAQQRqIANBBGopAgA3AgBBACEBDMIBCyAEKAIEIQEgBEHwAGogA0EMaigCADYCACAEIANBBGopAgA3A2ggACABIARB6ABqELoCQQAhAQzBAQsgA0EIaikDACEKIANBHGotAABFDc8BIApCgoCAgNDSAFIN0AECQCAEKAIEIgFBQGsoAgBBAUYEQCAEQegAaiABIAMQeyAEQegAahDnAQwBCyAEIAEQigM2AmggBEHoAGoQGCAEKAIEIgEoAlgNACABQoKAgIDQ0gAQngMNACAEKAIEQRQ6AGILIABBADoAAAzbAQsgBCgCBCEBIARB8ABqIANBDGooAgA2AgAgBCADQQRqKQIANwNoIAAgASAEQegAahD3AUEBIQEMvwELIAMtAAEOAgECywELIABBADoAAEEBIQEMvQELIABBAjoAACAAQQxqIANBDGooAgA2AgAgAEEEaiADQQRqKQIANwIAQQAhAQy8AQsgBCgCBCEBIARBgAFqIANBGGopAwA3AwAgBEH4AGogA0EQaikDADcDACAEQfAAaiADQQhqKQMANwMAIAQgAykDADcDaCAAIAFBBiAEQegAahABDNkBCyADQQhqKQMAIQogA0Ecai0AAEUNxgEgCkKCgICAoOYAUg3HAQJAIAQoAgQiASgCWEUEQCABQRU6AGIMAQsgBEHoAGogASADEHsgBEHoAGoQ5wELIABBADoAAAzVAQsgA0Ecai0AAEUhAQzDAQsgBCgCBCEBIARBgAFqIANBGGopAwA3AwAgBEH4AGogA0EQaikDADcDACAEQfAAaiADQQhqKQMANwMAIAQgAykDADcDaCAAIAFBBiAEQegAahABDNYBCyAEKAIEIQEgBEGAAWogA0EYaikDADcDACAEQfgAaiADQRBqKQMANwMAIARB8ABqIANBCGopAwA3AwAgBCADKQMANwNoIAAgAUEGIARB6ABqEAEM1QELIAQoAgQQgAMEQCAEQegAaiAEKAIEIAMQeyAEQegAahDnASAEKAIEQoKAgIDgBxCiARogBCgCBBCCASAEKAIEIgFBJGooAgAiAgRAIAEgAkF/ajYCJAsgARBWIQEgBCgCBCICIAE6AGIgAhBWIQEgAEEDOgAAIABBIGogA0EYaikDADcDACAAQRhqIANBEGopAwA3AwAgAEEQaiADQQhqKQMANwMAIABBCGogAykDADcDACAAIAE6AAEM1QELIABBADoAAEEBIQEMtgELIANBCGopAwAhCiADQRxqLQAARQ24ASAKQoKAgIDgB1ENuQEgBEGYAWogA0EJaikAADcDACAEQaABaiADQRFqKQAANwMAIARBpwFqIANBGGooAAA2AAAgBCADKQABNwOQAQzAAQsgAy0AAA22ASADQQhqIgEpAwAhCiADQRxqLQAARQ21AQJAIApCgYCAgIDSAFcEQCAKQoGAgICAN1cEQCAKQoKAgIDQBVENAiAKQoKAgIDwMVINuQEMAgsgCkKCgICAgDdRDQEgCkKCgICAkM0AUg24AQwBCyAKQoGAgIDQ8gBXBEAgCkKCgICAgNIAUQ0BIApCgoCAgNDbAFINuAEMAQsgCkKCgICA0PIAUQ0AIApCgoCAgMD1AFINtwELIARBoAFqIAFBEGopAwA3AwAgBEGYAWogAUEIaikDADcDACAEIAEpAwA3A5ABIARB6ABqIAQoAgQgBEGQAWoQfCAEQegAahDnASAEKAIEIAQpA5ABIgpCA4NQBH4gCqciASABKAIMQQFqNgIMIAQpA5ABBSAKCxBmBEAgBCgCBEKCgICA8IkBEKIBGiAEKAIEEFYhASAEQfcAaiAEQZgBaikDADcAACAEQf8AaiAEQaABaikDACIKNwAAIABBCGpBADoAACAAIAE6AAEgAEEgaiAKNwAAIABBAzoAACAEIAQpA5ABNwBvIABBCWogBCkAaDcAACAAQRFqIARB8ABqKQAANwAAIABBGWogBEH4AGopAAA3AAAMyQELIABBADoAACAEQZABahDKAQzIAQsgBCgCBCEBIARB8ABqIANBDGooAgA2AgAgBCADQQRqKQIANwNoIAAgASAEQegAahDyAUEBIQEMswELIAQoAgQhASAEQfAAaiADQQxqKAIANgIAIAQgA0EEaikCADcDaCAAIAEgBEHoAGoQugJBACEBDLIBCyAAIAQoAgQgAxB7QQEhAQyxAQsgBCgCBCEBIARBgAFqIANBGGopAwA3AwAgBEH4AGogA0EQaikDADcDACAEQfAAaiADQQhqKQMANwMAIAQgAykDADcDaCAAIAFBBiAEQegAahABDM4BCyADQQhqIgEpAwAhCiADQRxqLQAARQ2fASAKQoGAgIDA7gBXBEAgCkKCgICA4AdRDaEBIApCgoCAgPDZAFINpQEgBCgC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ASAEIAJBAWopAAA3A0ggBCACQQhqKQAANwBPIAItAABBA0YNfSAEQThqIAQoAgRBABBOIARBMGogBEFAaygCADYCACAEIAQpAzg3AyggBSAGKQAANwAAIAVBCGogBkEIaigAADYAACAEQQE2AmggBEEoaiAEQegAahCrASABIQIgA0FwaiIDDQALDHwLIAQoAgQhASAEQfAAaiADQQxqKAIANgIAIAQgA0EEaikCADcDaCAAIAEgBEHoAGoQ8gFBASEBDKIBCyAEKAIEIQEgBEGAAWogA0EYaikDADcDACAEQfgAaiADQRBqKQMANwMAIARB8ABqIANBCGopAwA3AwAgBCADKQMANwNoIAAgASAEQegAahA+DL8BCyAEKAIEIQEgBEGAAWogA0EYaikDADcDACAEQfgAaiADQRBqKQMANwMAIARB8ABqIANBCGopAwA3AwAgBCADKQMANwNoIAAgASAEQegAahA+DL4BCyAEKAIEIQEgBEGAAWogA0EYaikDADcDACAEQfgAaiADQRBqKQMANwMAIARB8ABqIANBCGopAwA3AwAgBCADKQMANwNoIAAgAUEGIARB6ABqEAEMvQELIANBCGoiASkDACEKIANBHGotAABFDWwCQCAKQoGAgIDQ2wBXBEAgCkKBgICAgDdXBEAgCkKCgICA0AVRDW4gCkKCgICA4AdRDXggCkKCgICA8DFRDW4McAsgCkKCgICAgDdRDQEgCkKCgICAkM0AUQ1tIApCgoCAgIDSAFENbQxvCyAKQoGAgICw6ABXBEAgCkKCgICA0NsAUQ1tIApCgoCAgLDfAFENbSAKQoKAgICg5gBRDW0MbwsgCkKBgICAwPUAVwRAIApCgoCAgLDoAFENbSAKQoKAgIDQ8gBSDW8MbQsgCkKCgICAwPUAUQ1sIApCgoCAgPD3AFENbAxuCwJAIAQoAgRCgoCAgIA3EGZFBEAgBEHoAGogBCgCBCADEHsgBEHoAGoQ5wEMAQsgBCgCBEKCgICAgDcQogEaIAQoAgQQViEBIAQoAgQgAToAYgsgAEEAOgAADLkBCyAEQf8AaiADQRhqKAAANgAAIARB+ABqIANBEWopAAA3AwAgBEHwAGogA0EJaikAADcDACAEIAMpAAE3A2ggAUUEQCADQRxqLQAAIgENAgtBwK7AAEEcQdyuwAAQswMACyAE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ACAEQfuvwAA2AmwgBEEANgJoQQhqIARB6ABqEOICDCoLIAQoAgRCgoCAgPD3ABBbIAQoAgQhAUUEQCAEQfAAakEfNgIAIARBurDAADYCbCAEQQA2AmggAUEIaiAEQegAahDiAiAAQQA6AAAMtgELIAEQlgEgAEGDJDsBACAAQSBqIANBGGopAwA3AwAgAEEYaiADQRBqKQMANwMAIABBEGogA0EIaikDADcDACAAQQhqIAMpAwA3AwAMuAELIAEQlgEgBCgCBEESOgBiCyAAQQA6AAAMswELIAQoAgQgBEH4AGogA0EYaigAADYCACAEQf8AaiADQR9qLQAAOgAAIAQgCjcDaCAEIAU6AHwgBCADQRBqKQAANwNwIAQgA0Edai8AADsAfSAEQegAahAhIABBADoAAAy1AQsgBEHwAGpBJDYCACAEQdevwAA2AmwgBEEANgJoIAVBCGogBEHoAGoQ4gIgAEEAOgAAIARBCGoQGAsgAy0AAA2zASABEMoBDLMBCyAEKAIEIQEgBEHwAGogA0EMaigCADYCACAEIANBBGopAgA3A2ggACABIARB6ABqEPIBDK8BCwJAAkAgAy0AAQ4CAAEjCyAAQQI6AAAgAEEMaiADQQxqKAIANgIAIABBBGogA0EEaikCADcCAAwhCyAEKAIEIQEgBEHwAGogA0EMaigCADYCACAEIANBBGopAgA3A2ggACABIARB6ABqELoCDCALIANBCGopAwAhCiADQRxqLQAARQ0eIApCgoCAgOAHUg0gIAQoAgQhASAEQYABaiADQRhqKQMANwMAIARB+ABqIANBEGopAwA3AwAgBEHwAGogA0EIaikDADcDACAEIAMpAwA3A2ggACABQQMgBEHoAGoQAQywAQsgBCgCBCEBIARBgAFqIANBGGopAwA3AwAgBEH4AGogA0EQaikDADcDACAEQfAAaiADQQhqKQMANwMAIAQgAykDADcDaCAAIAFBAyAEQegAahABDK8BCwJAAkAgAy0AAQ4CAAEdCyAAQQI6AAAgAEEMaiADQQxqKAIANgIAIABBBGogA0EEaikCADcCAAweCyAEKAIEIQEgBEGAAWogA0EYaikDADcDACAEQfgAaiADQRBqKQMANwMAIARB8ABqIANBCGopAwA3AwAgBCADKQMANwNoIAAgAUEDIARB6ABqEAEMrgELIANBCGopAwAhCiADQRxqLQAARQ0ZIApCgoCAgLDFAFINGiAEIAQoAgQQigM2AmggBEHoAGoQGCAEKAIEQQM6AGIgAEEAOgAADKoBCyAEKAIEIQEgBEHwAGogA0EMaigCADYCACAEIANBBGopAgA3A2ggACABIARB6ABqEPIBDKkBCwJAAkAgAy0AAQ4CAAEYCyAAQQI6AAAgAEEMaiADQQxqKAIANgIAIABBBGogA0EEaikCADcCAAwbCyAEKAIEIQEgBEHwAGogA0EMaigCADYCACAEIANBBGopAgA3A2ggACABIARB6ABqELoCDBoLIANBCGoiASkDACEKIANBHGotAABFDRQgCkKCgICA4AdSBEAgCkKCgICA8AZSDRYgBCAEKAIEEIoDNgJoIARB6ABqEBggBCgCBEEFOgBiIABBADoAAAyoAQsgBEGgAWogAUEQaikDADcDACAEQZgBaiABQQhqKQMANwMAIAQgASkDADcDkAECQCAEKAIEEIADBEAgBCgCBBCCAiAEKAIEQoKAgIDgBxB4IAQoAgQQggEgBCgCBCIBQSRqKAIAIgIEQCABIAJBf2o2AiQLIAEQViEBIAQoAgQgAToAYgwBCyAEQegAaiAEKAIEIARBkAFqEHwgBEHoAGoQ5wELQQAhAiAAQQA6AAAgBEGQAWoQygFBASEBDKgBCyADQRxqLQAARQ0CDBILIAQoAgQhASAEQfAAaiADQQxqKAIANgIAIAQgA0EEaikCADcDaCAAIAEgBEHoAGoQ8gEMpQELAkACQCADLQABDgIAARILIABBAjoAACAAQQxqIANBDGooAgA2AgAgAEEEaiADQQRqKQIANwIADBcLIABBADoAAAykAQsgA0EIaikDACIKQoKAgIDwBlIEQCAKQoKAgICg5gBSDRAgBCgCBCEBIARBgAFqIANBGGopAwA3AwAgBEH4AGogA0EQaikDADcDACAEQfAAaiADQQhqKQMANwMAIAQgAykDADcDaCAAIAFBBiAEQegAahABDKcBCyAEKAIEIARB8ABqIANBGGooAgA2AgAgBCADQRBqKQIANwNoQQAhAkEAQoKAgIDwAEKCgICA8AYgBEHoAGoQICEFIAQoAgQiASgCUARAIAFB0ABqEBggBCgCBCEBCyABQQM6AGIgASAFNgJQDIYBCyADQRxqLQAARQ0CDA0LIAQoAgQhASAEQfAAaiADQQxqKAIANgIAIAQgA0EEaikCADcDaCAAIAEgBEHoAGoQkgIMoQELAkACQCADLQABDgIAAQ0LIABBAjoAACAAQQxqIANBDGooAgA2AgAgAEEEaiADQQRqKQIANwIADBMLIABBADoAAAygAQsgA0EIaiIBKQMAQoKAgICg5gBSDQogBEH4AGogAUEQaikDACIKNwMAIARB8ABqIAFBCGopAwAiCzcDACAEIAEpAwA3A2ggBCgCBCAEQZgBaiAKPgIAIAQgCzcDkAEgBEGQAWoQ4gEgBCgCBEECOgBiIABBADoAACAEQegAahCQAgxZCyAEKAIEIQEgBEHwAGogA0EMaigCADYCACAEIANBBGopAgA3A2ggACABIARB6ABqEJICDJ4BCwJAAkAgAy0AAQ4CAAECCyAAQQI6AAAgAEEMaiADQQxqKAIANgIAIABBBGogA0EEaikCADcCAAwQCyAAQQA6AAAMnQELIARBqAFqIgEgA0EYaikDADcDACAEQaABaiICIANBEGopAwA3AwAgBEGYAWoiBSADQQhqKQMANwMAIAQgAykDADcDkAEgBCgCBCIDQd4Aai0AAA0GIARB6ABqIAMgBEGQAWoQeyAEQegAahDnASAEKAIEIgNBADoAZCADQRhqQQA6AAAMBgsgAy0AASEBIAQoAgQgBEH0AGogA0EMaigCADYCACAEIAE6AGggBCADQQRqKQIANwJsQShqIARB6ABqEPACQQAhASAAQQA6AAAMgAELIAIgAUHQrcAAEMkCAAsgBCAEKAIEEIoDNgJoIARB6ABqEBgMbQtBwJrAAEErQbCuwAAQhwMAC0HIncAAQRJBuKHAABDYAwALIAQoAgQgBEHwAGpBGzYCACAEQfuvwAA2AmwgBEEANgJoQQhqIARB6ABqEOICDAsLIABBgwI7AQAgAEEIaiAEKQOQATcDACAAQSBqIAEpAwA3AwAgAEEYaiACKQMANwMAIABBEGogBSkDADcDAAyYAQsgBUEARyECIANBHGotAAAhASADQQhqKQMAIQoCQCAFDQAgAUEBcUUNAEEAIQICQCAKQoGAgICg5gBXBEAgCkKCgICA8AZRDQEgCkKCgICAoNAAUQ0BDAILIApCgoCAgKDmAFENACAKQoKAgIDw9wBSDQELQQEhAgsgBEGYAWogA0EY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A0EQaikDADcDACAEQfAAaiADQQhqKQMANwMAIAQgAykDADcDaCAAIAFBAyAEQegAahABDJMBCyADQRxqLQAAIQUgA0EIaikDACEKAkACQCAGBEAgA0EdaiEBIANBEGohAgwBCyADQR1qIQEgA0EQaiECIAUgCkKCgICAoNAAUXENACAFDQELIARBmAFqIgcgCjcDACAEQaABaiIIIAIpAwA3AwAgBEGsAWogBToAACAEQa0BaiABLwAAOwAAIARBqAFqIgUgAkEIaigCADYCACAEQa8BaiABQQJqLQAAOgAAIAQgBjoAkAEgBCADKAABNgCRASAEIANBBGooAAA2AJQBIARB6ABqIAQoAgQgBEGQAWoQeyAEQegAahDnASAEIAQoAgQQigM2AmggBEHoAGoQGCAAQSBqIAUpAwA3AwAgAEEYaiAIKQMANwMAIABBEGogBykDADcDACAAQQhqIAQpA5ABNwMAIABBgwY7AQAMkwELIARB+ABqIAJBCGooAgA2AgAgBEH/AGogAUECai0AADoAACAEIAo3A2ggBCAFOgB8IAQgAikDADcDcCAEIAEvAAA7AH0gACAEKAIEIARB6ABqEHwgBEHoAGoQygEMkgELAkACQAJAAkACQCAKQoGAgICAJ1cEQCAKQoGAgICQD1cEQCAKQoKAgIDwBlENBSAKQoKAgIDgB1ENAiAKQoKAgIDwClINCAwCCyAKQoGAgIDwH1cEQCAKQoKAgICQD1ENAiAKQoKAgIDgF1INCAwCCyAKQoKAgIDwH1ENASAKQoKAgICwJlINBwwBCyAKQoGAgIDQ0gBXBEAgCkKCgICAgCdRDQEgCkKCgICA4D1RDQEgCkKCgICA0MsAUg0HDAELIApCgYCAgKDmAFUNASAKQoKAgIDQ0gBRDQIgCkKCgICAoNUAUg0GCyAEQegAaiAEKAIEIAMQeyAEQegAahDnASAEKAIEKAJQIgFFDQMgASABKAIAIgJBAWoiBTYCACAFIAJJDTAgBCABNgIIIAQoAgQgARDDAiAEKAIEIQIgBEGoAWogA0EYaikDADcDACAEQaABaiADQRBqKQMANwMAIARBmAFqIANBCGopAwA3AwAgBCADKQMANwOQASAEQegAaiACQQMgBEGQAWoQASAEKAIEIAEQ+QEgAEEgaiAEQYgBaikDADcDACAAQRhqIARBgAFqKQMANwMAIABBEGogBEH4AGopAwA3AwAgAEEIaiAEQfAAaikDADcDACAAIAQpA2g3AwAgBEEIahAYDJUBCyAKQoKAgICg5gBSBEAgCkKCgICA8PcAUg0FIAQoAgQhASAEQfAAaiADQRhqKAIANgIAIAQgA0EQaikCADcDaCAEIAFBAEKCgICA8ABCgoCAgPD3ACAEQegAahAgNgKQASAEQZABahAYIAQoAgQiAUEAOgBlIAFBBjoAYiAAQQA6AAAMTAsgBCgCBCEBIARBgAFqIANBGGopAwA3AwAgBEH4AGogA0EQaikDADcDACAEQfAAaiADQQhqKQMANwMAIAQgAykDADcDaCAAIAFBBiAEQegAahABDJQBCyAEKAIEIQEgBEHwAGogA0EYaigCADYCACAEIANBEGopAgA3A2ggBCABQQBCgoCAgPAAQoKAgIDQ0gAgBEHoAGoQIDYCkAEgBEGQAWoQGCAEKAIEQRM6AGIgAEEAOgAADEoLIAAgBCgCBCADEHsMjwELQeKxwABBD0H0scAAENgDAAtBASECQQAhAQyOAQsgBUEARyECIANBHGotAAAhASADQQhqKQMAIQoCQCAFDQAgAUEBcUUNAAJAIApCgoCAgKDQAFENACAKQoKAgICg5gBRDQBBACECIApCgoCAgPD3AFINAQtBASECCyAEQZgBaiADQRhqKAIANgIAIARBKmoiByADQR9qLQAAOgAAIAQgAygAATYCCCAEIANBBGooAAA2AAsgBCADQRBqIgYpAwA3A5ABIAQgA0EdaiIDLwAAOwEoIAJFQQAgARtFBEAgBCgCBCECIARBADYCcCAEQgg3A2ggBCACQQBCgoCAgPAAQoKAgIDw9wAgBEHoAGoQIDYCSCAEQcgAahAYIABBCGogBToAACAAQQlqIAQoAgg2AAAgAEEMaiAEKAALNgAAIABBEGogCjcDACAAQRhqIAQpA5ABNwMAIABBIGogBEGYAWooAgA2AgAgAEEkaiABOgAAIABBJWogBC8BKDsAACAAQSdqIActAAA6AAAgAEGDDDsBAAyQAQsgBEH4AGogBkEIaigCADYCACAEQf8AaiADQQJqLQAAOgAAIAQgCjcDaCAEIAE6AHwgBCAGKQMANwNwIAQgAy8AADsAfSAAIAQoAgQgBEHoAGoQfCAEQegAahDKAQyPAQsgBCgCBEKCgICAkDIQogEaDAELIARBkAFqEBggBEEIahAYCyAAQQA6AAAMiQELIARBoAFqKAIAIgAEQCAEKAKYASECIABBKGwhAANAIAIQVCACQShqIQIgAEFYaiIADQALCyAEQZwBaigCAEUNgQEgBCgCmAEQJgyBAQsgA0EYaigCACECIANBFGooAgAgA0EQaigCACEBIAQoAgQgChAIIABBADoAACACBEAgAkEobCEAIAEhAgNAIAIQVCACQShqIQIgAEFYaiIADQALC0UNQSABECYMQQsgBEH4AGogAUEQaikDADcDACAEQfAAaiABQQhqKQMANwMAIAQgASkDACIKNwNoIARCgoCAgIDsADcDkAEgBEGQAWoQkAIgBCgCBCEBAkACQAJAIApCgoCAgIDsAFIEQCABIApCA4NQBEAgCqciASABKAIMQQFqNgIMIAQpA2ghCgsgChBbRQ0CIAQoAgQhAiAKQgODQgBSDQEgCqciASABKAIMQQFqNgIMIAQpA2ghCgwBCyABEGVFDQFCgoCAgIDsACEKIAQoAgQhAgsgAiAKEJoBIAQoAgQgChB4IABBADoAAAwBCyAEKAIEIARBmAFqQRg2AgAgBEGsr8AANgKUASAEQQA2ApABQQhqIARBkAFqEOICIABBADoAACAEQegAahCQAgsgBCgCcCEBIARB+ABqKAIAIgAEQCAAQShsIQAgASECA0AgAhBUIAJBKGohAiAAQVhqIgANAAsLIARB9ABqKAIARQ1/IAEQJgx/CyAEKAIEEPsBIABBADoAAAyFAQsgBEH4AGogAUEQaikDADcDACAEQfAAaiABQQhqKQMANwMAIAQgASkDADcDaCAEKAIEEM4BIQIgBCgCBCEBAkACQAJAIAIEQCABEIMCIAQoAgQgBCkDaBCeA0UNAQwCCyAEQZgBakEXNgIAIARBla/AADYClAEgBEEANgKQASABQQhqIARBkAFqEOICIABBADoAACAEQegAahCQAgwCCyAEKAIEIARBmAFqQRk2AgAgBEH8rsAANgKUASAEQQA2ApABQQhqIARBkAFqEOICCyAEKAIEEJECIABBADoAAAsgBCgCcCEBIARB+ABqKAIAIgAEQCAAQShsIQAgASECA0AgAhBUIAJBKGohAiAAQVhqIgANAAsLIARB9ABqKAIARQ19IAEQJgx9CyAE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CiAEQegAahAgIQIgBCgCBCIBKAJUBH8gAUHUAGoQGCAEKAIEBSABCyACNgJUIABBADoAAAxCCyAAQQA6AAAgBEGQAWoQygEMQQsgBCgCBCEBIAQpA5ABIQogBEHwAGogAigCADYCACAEIAQpA5gBNwNoIAQgAUEBQoKAgIDwACAKIARB6ABqECA2AgggBEEIahAYIABBAToAAAxACyAEKAIEQoKAgICANxCiARogBCgCBBBWIQEgAEEDOgAAIABBIGogA0EYaikDADcDACAAQRhqIANBEGopAwA3AwAgAEEQaiADQQhqKQMANwMAIABBCGogAykDADcDACAAIAE6AAEMSQtBACECQQEhAQxGCyAEKAIEEIACIAQoAgQhASAEQQA2AnAgBEIINwNoIAQgAUEAQoKAgIDwAEKCgICA0AUgBEHoAGoQIDYCkAEgBEGQAWoQGCAAQYMYOwEAIABBIGogA0EYaikDADcDACAAQRhqIANBEGopAwA3AwAgAEEQaiADQQhqKQMANwMAIABBCGogAykDADcDAAxHCyAEKAIEIQEgBEGAAWogA0EYaikDADcDACAEQfgAaiADQRBqKQMANwMAIARB8ABqIANBCGopAwA3AwAgBCADKQMANwNoIAAgAUEDIARB6ABqEAEMRgsgBCgCBCAEQfAAakEUNgIAIARB4K3AADYCbCAEQQA2AmhBCGogBEHoAGoQ4gIgBCAFNgI0IAQgAjYCMCAEIAM2AiwgBCACNgIoAkAgAUUNACABQQR0IQMgBEGgAWohBSAEQZABakECciEGIARB3ABqIQcgBEE7aiEIA0AgBCACQRBqIgE2AjAgBCACQQFqKQAANwM4IAQgAkEIaikAADcAPyACLQAAIglBA0YNASAEKAIEIQIgB0EIaiAIQQhqKAAANgAAIAcgCCkAADcAAEGQjtIAKAIAQQJPBEAgBEEANgJ8IARBwJrAADYCeCAEQgE3AmwgBEGEqcAANgJoIARB6ABqQQJBjKnAABD4AQsgAkEBOgBnIAYgBCkBWjcBACAGQQZqIARB4ABqKQEANwEAIAUgBCkDSDcDACAFQQhqIARB0ABqKQMANwMAIAQgCToAkQEgBEECOgCQASAEQegAaiACQQYgBEGQAWoQASACQQA6AGcgBC0AaEUEQCABIQIgA0FwaiIDDQEMAgsLQfStwABBHEGQrsAAELMDAAsgBEEoahDMAQwBCyAEQZABahDMAQsgBCgCBCICLQBjIQEgAkEXOgBjIAFBF0cEQCAAIAE6AAEgAEEDOgAAIABBCGogBCkDCDcDACAAQSBqIARBIGopAwA3AwAgAEEYaiAEQRhqKQMANwMAIABBEGogBEEQaikDADcDAAxEC0HAmsAAQStBoK7AABCHAwALIApCgYCAgNDbAFcEQCAKQoGAgICQzQBXBEAgCkKCgICA0AVRDQIgCkKCgICA8DFSDQMMAgsgCkKCgICAkM0AUQ0BIApCgoCAgIDSAFINAgwBCyAKQoGAgICw6ABXBEAgCkKCgICA0NsAUQ0BIApCgoCAgLDfAFINAgwBCyAKQoKAgICw6ABRDQAgCkKCgICA0PIAUQ0AIApCgoCAgMD1AFINAQsgBEGgAWogAUEQaikDADcDACAEQZgBaiABQQhqKQMANwMAIAQgASkDADcDkAECQCAEKAIEQoKAgIDQ2wAQZkUEQCAEQegAaiAEKAIEIARBkAFqEHwgBEHoAGoQ5wEMAQsgBCgCBBCDAiAEKAIEQoKAgIDQ2wAQeCAEKAIEEIIBAkAgBC0ApAEEQCAEKQOQAUKCgICA0NsAUQ0BCyAEQfcAaiAEQZgBaikDADcAACAEQf8AaiAEQaABaikDACIKNwAAIABBgxA7AQAgAEEIakEAOgAAIAQgBCkDkAE3AG8gAEEJaiAEKQBoNwAAIABBIGogCjcAACAAQRFqIARB8ABqKQAANwAAIABBGWogBEH4AGopAAA3AAAMOQsgBCgCBEEIOgBiCyAAQQA6AAAgBEGQAWoQygEMNwsgBCgCBCEBIARBgAFqIANBGGopAwA3AwAgBEH4AGogA0EQaikDADcDACAEQfAAaiADQQhqKQMANwMAIAQgAykDADcDaCAAIAFBBiAEQegAahABDEALIApCgoCAgOAHUQ0BIApCgoCAgKDmAFENAiAKQoKAgICw6ABRDQMLIARBgAFqIgEgA0EYaikDADcDACAEQfgAaiICIANBEGopAwA3AwAgBEHwAGoiBSADQQhqKQMANwMAIAQgAykDADcDaCAEKAIEQoKAgICw3wAQngNFDQMgBCAEKAIEEIoDNgKQASAEQZABahAYIABBIGogASkDADcDACAAQRhqIAIpAwA3AwAgAEEQaiAFKQMANwMAIABBCGogBCkDaDcDACAAQYMQOwEADD4LIAQoAgQhASAEQYABaiADQRhqKQMANwMAIARB+ABqIANBEGopAwA3AwAgBEHwAGogA0EIaikDADcDACAEIAMpAwA3A2ggACABQQMgBEHoAGoQAQw9CyAEKAIEIQEgBEGAAWogA0EYaikDADcDACAEQfgAaiADQRBqKQMANwMAIARB8ABqIANBCGopAwA3AwAgBCADKQMANwNoIAAgAUEGIARB6ABqEAEMPAsgBCgCBCECIARB8ABqIANBGGooAgA2AgAgBCADQRBqKQIANwNoQQEhASAEIAJBAUKCgICA8ABCgoCAgLDoACAEQegAahAgNgKQASAEQZABahAYDDILIAAgBCgCBCAEQegAahB7IARB6ABqEFcMOgsCQCAKQoGAgIDQ2wBXBEAgCkKBgICAkM0AVwRAIApCgoCAgNAFUQ0DIApCgoCAgPAxUg0EDAILIApCgoCAgJDNAFENAiAKQoKAgICA0gBSDQMgBEGYAWoiASADQRhqKAIANgIAIAQgA0EQaikDADcDkAEgBCgCBBD/ASAEKAIEIQIgBEHwAGogASgCADYCACAEIAQpA5ABNwNoIAQgAkEAQoKAgIDwAEKCgICAgNIAIARB6ABqECA2AgggBEEIahAYIAQoAgRBDToAYiAAQQA6AAAMMQsgCkKBgICAsOgAVwRAIApCgoCAgNDbAFENAiAKQoKAgICw3wBSDQMMAgsgCkKCgICAsOgAUQ0BIApCgoCAgNDyAFENASAKQoKAgIDA9QBSDQILIARB6ABqIAQoAgQgAxB7IARB6ABqEOcBIAQoAgQQ/wEgBCgCBCEBIARBADYCcCAEQgg3A2ggBCABQQBCgoCAgPAAQoKAgICA0gAgBEHoAGoQIDYCkAEgBEGQAWoQGCAAQYMaOwEAIABBIGogA0EYaikDADcDACAAQRhqIANBEGopAwA3AwAgAEEQaiADQQhqKQMANwMAIABBCGogAykDADcDAAw5CyAEKAIEENUBIAQoAgQhAUUEQCAAIAEgAxB7QQEhAQwbCyABEP8BIAQgBCgCBBCKAzYCaCAEQegAahAYIABBgxA7AQAgAEEgaiADQRhqKQMANwMAIABBGGogA0EQaikDADcDACAAQRBqIANBCGopAwA3AwAgAEEIaiADKQMANwMADDgLIAQo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GDsBACAAQSBqIANBGGopAwA3AwAgAEEYaiADQRBqKQMANwMAIABBEGogA0EIaikDADcDACAAQQhqIAMpAwA3AwAMFQsgBCgCBCIBQRxqIAFBJGooAgAiBQRAIAEgBUF/ajYCJAtBCBCLAyAAQYMQOwEAIABBIGogA0EYaikDADcDACAAQRhqIANBEGopAwA3AwAgAEEQaiADQQhqKQMANwMAIABBCGogAykDADcDAAwUCyAEQZgBaiADQQlqKQAANwMAIARBoAFqIANBEWopAAA3AwAgBEGnAWogA0EYaigAADYAACAEQQpqIANBH2otAAA6AAAgBCADKQABNwOQASAEIANBHWovAAA7AQggAg0AIAFFDQAgBCgCBCIBQRxqIAFBJGooAgAiAwRAIAEgA0F/ajYCJAtBBhCLAyAEQfcAaiAEQZ8BaikAADcAACAEQf8AaiAEQacBaigAACIBNgAAIABBJWogBC8BCDsAACAAQSdqIARBCmotAAA6AAAgAEEIakEAOgAAIABBBjoAASAAQSBqIAE2AAAgBCAEKQCXATcAbyAAQQlqIAQpAGg3AAAgAEERaiAEQfAAaikAADcAACAAQRlqIARB+ABqKQAANwAAIABBJGpBADoAACAAQQM6AAAMEwsgBEGAAWogA0EYaikDADcDACAEQfgAaiADQRBqKQMANwMAIARB8ABqIANBCGopAwA3AwAgBCADKQMANwNoIAAgBCgCBCAEQegAahB7IARB6ABqEFcMEgsgCkKCgICAoOYAUQ0BCyAEQagBaiIBIANBGGopAwA3AwAgBEGgAWoiAiADQRBqKQMANwMAIARBmAFqIgUgA0EIaikDADcDACAEIAMpAwA3A5ABIARB6ABqIAQoAgQgBEGQAWoQeyAEQegAahDnASAAQSBqIAEpAwA3AwAgAEEYaiACKQMANwMAIABBEGogBSkDADcDACAAQQhqIAQpA5ABNwMAIABBgww7AQAMEAsgBCgCBCEBIARBgAFqIANBGGopAwA3AwAgBEH4AGogA0EQaikDADcDACAEQfAAaiADQQhqKQMANwMAIAQgAykDADcDaCAAIAFBBiAEQegAahABDA8LIApCgYCAgNDSAFcEQCAKQoKAgICQAlENBCAKQoKAgIDQywBSDQEgBCgCBCEBIARBgAFqIANBGGopAwA3AwAgBEH4AGogA0EQaikDADcDACAEQfAAaiADQQhqKQMANwMAIAQgAykDADcDaCAAIAFBAyAEQegAahABDA8LIApCgoCAgNDSAFENAiAKQoKAgICg5gBRDQELIARBgAFqIANBGGopAwA3AwAgBEH4AGogA0EQaikDADcDACAEQfAAaiADQQhqKQMANwMAIAQgAykDADcDaCAAIAQoAgQgBEHoAGoQeyAEQegAahBXDA0LIAQoAgQhASAEQYABaiADQRhqKQMANwMAIARB+ABqIANBEGopAwA3AwAgBEHwAGogA0EIaikDADcDACAEIAMpAwA3A2ggACABQQYgBEHoAGoQAQwMCyAEKAIEIQEgBEHwAGogA0EYaigCADYCACAEIANBEGopAgA3A2ggBCABQQBCgoCAgPAAQoKAgIDQ0gAgBEHoAGoQIDYCkAEgBEGQAWoQGCAAQQA6AAAMAQsgBCgCBCECIARB8ABqIANBGGooAgA2AgAgBCADQRBqKQIANwNoQQEhASAEIAJBAUKCgICA8ABCgoCAgJACIARB6ABqECA2ApABIARBkAFqEBgMAQtBASEBQQAhAgwHCyAAQQE6AABBACECDAYLIApCgoCAgNDLAFENAiAKQoKAgICg5gBRDQELIARBgAFqIANBGGopAwA3AwAgBEH4AGogA0EQaikDADcDACAEQfAAaiADQQhqKQMANwMAIAQgAykDADcDaCAAIAQoAgQgBEHoAGoQeyAEQegAahBXDAYLIAQoAgQhASAEQYABaiADQRhqKQMANwMAIARB+ABqIANBEGopAwA3AwAgBEHwAGogA0EIaikDADcDACAEIAMpAwA3A2ggACABQQYgBEHoAGoQAQwFCyAEKAIEIQEgBEGAAWogA0EYaikDADcDACAEQfgAaiADQRBqKQMANwMAIARB8ABqIANBCGopAwA3AwAgBCADKQMANwNoIAAgAUEDIARB6ABqEAEMBAsgBEGoAWoiASADQRhqKQMANwMAIARBoAFqIgIgA0EQaikDADcDACAEQZgBaiIFIANBCGopAwA3AwAgBCADKQMANwOQASAEQegAaiAEKAIEIARBkAFqEHsgBEHoAGoQ5wEgAEEgaiABKQMANwMAIABBGGogAikDADcDACAAQRBqIAUpAwA3AwAgAEEIaiAEKQOQATcDACAAQYMMOwEADAMLQQEhAkEBIQELAkACQAJAIAMtAAAOAwEEAAQLIAFFDQMgA0EEaigCACIBQRBJDQMgAUF+cSEAAkAgAUEBcUUEQCADQQxqKAIAIgFBCGogAU8NAQwGCyAAIAAoAQQiAUF/ajYBBCABQQFHDQQgACgCACIBQQhqIAFJDQILIAAQJgwDCyACRQ0CAkAgA0EIaiIAKQMAIgpCA4NCAFINACAKpyIBIAEoAgwiAUF/ajYCDCABQQFHDQAgABC4AgsgA0EYaigCACIABEAgA0EQaigCACECIABBKGwhAANAIAIQVCACQShqIQIgAEFYaiIADQALCyADQRRqKAIARQ0CIAMoAhAQJgwCCwwCCyAEQYABaiADQRhqKQMANwMAIARB+ABqIANBEGopAwA3AwAgBEHwAGogA0EIaikDADcDACAEIAMpAwA3A2ggACAEKAIEIARB6ABqEHsgBEHoAGoQVwsgBEGwAWokAA8LQbCy0QAoAgBBtLLRACgCAEGoncAAENgDAAv6jQECDX8BfiMAQdABayIDJAACQAJAAkAgASgClAEiBARAIAFBADYClAFBASEGAkACQAJAIAQgASACEBRB/wFxQQFrDgIBAAILIANBqAFqIARBOGopAgA3AwAgA0GgAWogBEEwaikCADcDACADQZgBaiAEQShqKQIANwMAIANBkAFqIARBIGopAgA3AwAgA0GIAWogBEEYaikCADcDACADQYABaiAEQRBqKQIANwMAIANB+ABqIARBCGopAgA3AwAgAyAEKQIANwNwIANBwAFqIANB8ABqEO0BIAEgA0HAAWoQSCAEECZBACEGDAMLQQAhBgsgASgClAEiBQRAIAUoAiAiCAR/AkAgCEEQSQ0AIAhBfnEhAgJAIAhBAXFFBEAgBUEoaigCACIFQQhqIAVPDQEMBwsgAiACKAEEIgVBf2o2AQQgBUEBRw0BIAIoAgAiBUEIaiAFSQ0GCyACECYLIAEoApQBBSAFCxAmCyABIAQ2ApQBDAELQZCO0gAoAgBBA0sEQCADQYQBakEBNgIAIANCATcCdCADQbzIwAA2AnAgA0EbNgLEASADIAFBmAJqNgLAASADIANBwAFqNgKAASADQfAAakEEQcTIwAAQ+AELIAFBmAJqIQkCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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LQCOAUUEQCABIAM2AsgBIAEgBTYCxAEgASACNgLAASABIAY2ArwBIAFBBjYCuAEgAUHIAmogACABQbgBaiAAKQN4EAMgAS0AyAIMAQsQlwMgASABKAKgATYCgAIgASABKQOYATcD+AEgASADNgLIASABIAU2AsQBIAEgAjYCwAEgASAGNgK8ASABQQY2ArgBIAFBuAJqIAAgAUG4AWogACkDeBADEJcDIAEpA7gCIRcgACAAKQNwIAE1ApABIAEpA4gBQoCU69wDfnx8NwNwIAEgFzcDyAIgF6cLQf8BcSICQQFGBEAgDxAYCyACDQwgAEEBOgD8ASABQbgBaiICQQA6ACQgAkEANgIYIAJBADYCDCACQQA2AgAgAUGYAmoiAiAHQSBqIgspAgA3AwAgAUGQAmoiBSAHQRhqIgwpAgA3AwAgAUGIAmoiBiAHQRBqIg0pAgA3AwAgAUGAAmoiCiAHQQhqIgMpAgA3AwAgBykCACEXIAcgASkDuAE3AgAgAyABQcABaikDADcCACANIAFByAFqKQMANwIAIAwgAUHQAWopAwA3AgAgCyABQdgBaikDADcCACABIBc3A/gBAn8gAC0AjgFFBEAgBCABKQP4ATcCACAEQQhqIAopAwA3AgAgBEEQaiAGKQMANwIAIARBGGogBSkDADcCACAEQSBqIAIpAwA3AgAgAUEANgK4ASABQbACaiAAIAFBuAFqIAApA3gQAyABLQCwAgwBCxCXAyABIAEoAoABNgLAAiABIAEpA3g3A7gCIAQgASkD+AE3AgAgBEEIaiAKKQMANwIAIARBEGogBikDADcCACAEQRhqIAUpAwA3AgAgBEEgaiACKQMANwIAIAFBADYCuAEgAUHIAmogACABQbgBaiAAKQN4EAMQlwMgASkDyAIhFyAAIAApA3AgATUCcCABKQNoQoCU69wDfnx8NwNwIAEgFzcDsAIgF6cLQf8BcSICQQFGBEAgEBAYCyACDQwgCEEAOgAADAgLIAFBuAFqIgJBADoAJCACQQA2AhggAkEANgIMIAJBADYCACABQZgCaiICIAdBIGoiBSkCADcDACABQZACaiIGIAdBGGoiAykCADcDACABQYgCaiIKIAdBEGoiCykCADcDACABQYACaiIMIAdBCGoiDSkCADcDACAHKQIAIRcgByABKQO4ATcCACANIAFB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f3NqQQV0EPMDIAAgBkF/ajYCTCADKAJgDQIgA0HgAGpBBHIQGAJAIANB6ABqIgIpAwAiAUIDg0IAUg0AIAGnIgAgACgCDCIAQX9qNgIMIABBAUcNACACELgCCyADQfAAaigCACEAIANB+ABqKAIAIgIEQCACQShsIQUgACECA0AgAhBUIAJBKGohAiAFQVhqIgUNAAsLIANB9ABqKAIARQ0CIAAQJgwCCyACIAZBzKfAABDFAgALIABBFGooAgAiAiAAQRBqKAIARgRAIABBDGogAhDZASAAKAIUIQILIAAoAgwgAkEEdGoiAkGco8AANgIEIAJBADYCACACQQhqQR82AgAgACAAKAIUQQFqNgIUCwJAIAMpAxAiAUIDg0IAUg0AIAGnIgAgACgCDCIAQX9qNgIMIABBAUcNABDqAiICIAItAAAiAEEBIAAbOgAAIAAEQCADQgA3A2AgAiADQeAAahAeCyACQQRqIAMoAhAQwAIgAkEAIAItAAAiACAAQQFGIgAbOgAAIAANACACEE0LIANBIGooAgAiAARAIAMoAhghAiAAQShsIQUDQCACEFQgAkEoaiECIAVBWGoiBQ0ACwsgA0EcaigCAARAIAMoAhgQJgsgA0EMahAYIAMpAwAhAQwCCyAPIAUgAygCRBC5AiADQUBrEBggA0E8ahAYIANBLGoQGCADQQxqEBggG0EIRw0ACwwBCyABQgODQgBSDQEgAaciACAAKAIMIgBBf2o2AgwgAEEBRw0BEOoCIgIgAi0AACIAQQEgABs6AAAgAARAIANCADcDYCACIANB4ABqEB4LIAJBBGogAygCABDAAiACQQAgAi0AACIAIABBAUYiABs6AAAgAA0BIAIQTQwBCyADKQMAIgFCA4NCAFINACABpyIAIAAoAgwiAEF/ajYCDCAAQQFHDQAgAxC4AgsgA0GQAWokAA8LQcidwABBEkG4ocAAENgDAAvyGgIOfwJ+IwBBoAFrIg0kAAJAAkACQAJAAkACQAJAAkACQCABQQdxIgMEQAJAAkAgACgCACIFQSlJBEAgBUUEQEEAIQUMAwsgA0ECdEH01tEAajUCACERIABBBGohAyAFQX9qQf////8DcSILQQFqIgRBA3EhAiALQQNJDQEgBEH8////B3EhBwNAIAMgAzUCACARfiAQfCIQPgIAIANBBGoiBCAE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GGopAwA3AwAgAyACQSBqKQMANwMAIAQgGDcDKEEBIQICQCABIAVrQQNJDQAgBkHQAGogBEEoahAWRQ0AQQAhAyAJIQIDQAJAIAJBIGogAkHIAGopAwA3AwAgAkEYaiACQUBrKQMANwMAIAJBEGogAkE4aikDADcDACACQQhqIAJBMGopAwA3AwAgAiACQShqIgcpAwA3AwAgCiADIghGDQAgCEF/aiEDIAJB0ABqIAchAiAEQShqEBYNAQsLQQIgCGshAgsgBiACQShsaiICIAQpAyg3AwAgAkEgaiALKQMANwMAIAJBGGogDikDADcDACACQRBqIAwpAwA3AwAgAkEIaiARKQMANwMACyAJQVhqIQkgCkF/aiEKIAUiAg0ACwsgBEHQAGokAA8LIAJBCEH0jtIAKAIAIgBB8AAgABsRAgAAC48QAgN/AX4jAEHQAmsiAyQAIANBEGoiBCACQQhqKAIANgIAIAMgAikCADcDCCADQbgCaiADQQhqEM8BIAQgA0HAAmooAgA2AgAgAyADKQO4AjcDCCABQaACaiICIANBCGoQqgECQCABKAKgAiABQaQCaigCAEYNAANAAkAgAS0AnQJFDQAgAhCwASIEQf/9A0cEQCAEQYCAxABHDQEMAwsgAhCmARoLIAMgASACEKgBIgQ2AgggBEUNASADQQhqEBggASgCoAIgASgCpAJHDQALCyADQQhqIAFBsAIQ8AMaAkAgAygCqAIgA0GsAmooAgBGDQAgA0GoAmohAQNAAkAgAy0ApQJFDQAgARCwASICQf/9A0cEQCACQYCAxABHDQEMAwsgARCmARoLIAMgA0EIaiABEKgBIgI2ArgCIAJFDQEgA0G4AmoQGCADKAKoAiADKAKsAkcNAAsLAkACQCADKAKoAiADKAKsAkYEQCADQQhqEAYgACADKQMQNwIAIABBEGogA0EgaigCADYCACAAQQhqIANBGGopAwA3AgACQCADKAKIASIARQ0AIANBjAFqKAIARQ0AIAAQJgsgA0EoaigCAARAIAMoAiQQJgsgA0E4aigCACIABEAgAEEEdCECIAMoAjBBBGohAQNAIAEQmAIgAUEQaiEBIAJBcGoiAg0ACwsgA0E0aigCAARAIAMoAjAQJgsgA0E8ahAYIANByABqKAIAIgAEQCADKAJAIQEgAEECdCECA0AgARAYIAFBBGohASACQXxqIgINAAsLIANBxABqKAIABEAgAygCQBAmCyADQcwAahA2IANB0ABqKAIABEAgAygCTBAmCyADKAJYBEAgA0HYAGoQGAsgAygCXARAIANB3ABqEBgLIAMoAmAEQCADQeAAahAYCyADKAKcASIBBEAgASgCICICBH8CQCACQRBJDQAgAkF+cSEAAkAgAkEBcUUEQCABQShqKAIAIgFBCGogAU8NAQwHCyAAIAAoAQQiAUF/ajYBBCABQQFHDQEgACgCACIBQQhqIAFJDQYLIAAQJgsgAygCnAEFIAELECYLAkAgAygCpAEiAUEQSQ0AIAFBfnEhAAJAIAFBAXFFBEAgA0GsAWooAgAiAUEIaiABTw0BDAULIAAgACgBBCIBQX9qNgEEIAFBAUcNASAAKAIAIgFBCGogAUkNBAsgABAmCyADQbgBaigCACIABEAgAygCsAEhASAAQShsIQIDQCABEFQgAUEoaiEBIAJBWGoiAg0ACwsgA0G0AWooAgAEQCADKAKwARAmCwJAIAMoArwBIgFBEEkNACABQX5xIQACQCABQQFxRQRAIANBxAFqKAIAIgFBCGogAU8NAQwFCyAAIAAoAQQiAUF/ajYBBCABQQFHDQEgACgCACIBQQhqIAFJDQQLIAAQJgsCQCADKALIASIBQRBJDQAgAUF+cSEAAkAgAUEBcUUEQCADQdABaigCACIBQQhqIAFPDQEMBQsgACAAKAEEIgFBf2o2AQQgAUEBRw0BIAAoAgAiAUEIaiABSQ0ECyAAECYLAkAgAygC1AEiAUEQSQ0AIAFBfnEhAAJAIAFBAXFFBEAgA0HcAWooAgAiAUEIaiABTw0BDAULIAAgACgBBCIBQX9qNgEEIAFBAUcNASAAKAIAIgFBCGogAUkNBAsgABAmCwJAIAMoAuABIgFBEEkNACABQX5xIQACQCABQQFxRQRAIANB6AFqKAIAIgFBCGogAU8NAQwFCyAAIAAoAQQiAUF/ajYBBCABQQFHDQEgACgCACIBQQhqIAFJDQQLIAAQJgsCQCADQewBaigCACIBQRBJDQAgAUF+cSEAAkAgAUEBcUUEQCADQfQBaigCACIBQQhqIAFPDQEMBQsgACAAKAEEIgFBf2o2AQQgAUEBRw0BIAAoAgAiAUEIaiABSQ0ECyAAECYLAkACQCADQfgBaigCACIBQRBJDQAgAUF+cSEAAkAgAUEBcUUEQCADQYACaigCACIBQQhqIAFPDQEMBgsgACAAKAEEIgFBf2o2AQQgAUEBRw0BIAAoAgAiAUEIaiABSQ0CCyAAECYLAkAgAykDcCIGUA0AIAZCA4NCAFINACAGpyIAIAAoAgwiAEF/ajYCDCAAQQFHDQAQ6gIiACAALQAAIgFBASABGzoAACABBEAgA0IANwO4AiAAIANBuAJqEB4LIABBBGogAygCcBDAAiAAQQAgAC0AACIBIAFBAUYiARs6AAAgAQ0AIAAQTQsCQCADKAKIAiIBQRBJDQAgAUF+cSEAAkAgAUEBcUUEQCADQZACaigCACIBQQhqIAFPDQEMBgsgACAAKAEEIgFBf2o2AQQgAUEBRw0BIAAoAgAiAUEIaiABSQ0FCyAAECYLIANBlAJqEGQgA0G0AmooAgAhBCADQbACaigCACEBAkAgAygCrAIiACADKAKoAiICSQRAIAQgAk8NAUG4hsAAQSNB9IfAABCHAwALIAAgBEsNAyAAIQRBACEACyAEIAJrBEAgASACQQxsIgVqIQIgBEEMbCAFayEEA0AgAhCZAiACQQxqIQIgBEF0aiIEDQALCyAABEAgAEEMbCECA0AgARCZAiABQQxqIQEgAkF0aiICDQALCyADKAK0AgRAIANBsAJqKAIAECYLIANB0AJqJAAPCwwCC0HQycAAQS5B3MrAABCHAwALIAAgBBDqAwALQbCy0QAoAgBBtLLRACgCAEHcy8AAENgDAAv2EAINfwF+IwBBIGsiDSQAIAEoAgghCgJAAkACQAJAAkACQAJAAkACQAJAAkACQCABKAIEIgUvAV4iBkELTwRAIAEoAgAhBiANQRBqIAoQ5wIgDUEYaigCACEBIA0oAhQhCyANKAIQIQhB+ABBCBDKAyIKRQ0GIApBADYCWCAKIAUvAV4iByAIQX9zaiIJOwFeIAlBDE8NByAHIAhBAWoiDGsgCUcNDCAFQeAAaiIPIAhBAXRqLwAAIQcgBSAIQQN0aikDACESIApB4ABqIA8gDEEBdGogCUEBdBDwAxogCiAFIAxBA3RqIAlBA3QQ8AMgBSAIOwFeIAUgCxsiCEHgAGohCSABQQFqIgwgCC8BXiILTQ0BIAkgAUEBdGoiCSADOgABIAkgAjoAAAwCCyAFQeAAaiEBAkAgCkEBaiIHIAZLBEAgASAKQQF0aiIBIAM6AAEgASACOgAADAELIAEgB0EBdGogASAKQQF0aiIBIAYgCmsiCEEBdBDzAyABIAM6AAEgASACOgAAIAUgB0EDdGogBSAKQQN0aiAIQQN0EPMDCyAFIApBA3RqIg8gBDcDACAFIAZBAWo7AV4MAgsgCSAMQQF0aiAJIAFBAXRqIgkgCyABayIPQQF0EPMDIAkgAzoAASAJIAI6AAAgCCAMQQN0aiAIIAFBA3RqIA9BA3QQ8wMLIAggAUEDdGoiDyAENwMAIAggC0EBajsBXiAHQf8BcUErRw0BCyAAIA82AiAgAEErOgAADAELIAdBgP4DcUEIdiEMAkACf0EAIAUoAlgiAUUNABpBACEDA0AgAyAGRw0GIAUvAVwhBQJAAkACQAJAIAEiAi8BXiIBQQtPBEAgDUEQaiAFEOcCIA0oAhghASANKAIUIRAgDSgCECEDIAIvAV5BqAFBCBDKAyIIRQ0MIAhBADYCWCAIIAIvAV4iCSADQX9zaiIFOwFeIAVBDE8NDSAJIANBAWoiDmsgBUcNDyACQeAAaiILIANBAXRqLwAAIQkgAiADQQN0aikDACEEIAhB4ABqIAsgDkEBdGogBUEBdBDwAxogCCACIA5BA3RqIAVBA3QQ8AMhCCACIAM7AV4gCC8BXiILQQFqIQUgC0EMTw0OIANrIgMgBUcNDyAGQQFqIQYgCEH4AGogAiAOQQJ0akH4AGogA0ECdBDwAxpBACEFA0ACQCAIIAVBAnRqQfgAaigCACIDIAU7AVwgAyAINgJYIAUgC08NACAFIAUgC0lqIgUgC00NAQsLIAggAiAQGyIFQeAAaiEOIAFBAWoiAyAFLwFeIgtNDQEgDiABQQF0aiIOIAw6AAEgDiAHOgAADAILIAVBAWohBiACQeAAaiEDIAFBAWohCQJAIAEgBU0EQCADIAVBAXRqIgMgDDoAASADIAc6AAAgAiAFQQN0aiASNwMAIAJB+ABqIQMMAQsgAyAGQQF0aiADIAVBAXRqIgMgASAFayIIQQF0EPMDIAMgDDoAASADIAc6AAAgAiAGQQN0aiACIAVBA3RqIgMgCEEDdBDzAyADIBI3AwAgAkH4AGoiAyAFQQJ0akEIaiADIAZBAnRqIAhBAnQQ8wMLIAMgBkECdGogCjYCACACIAk7AV4gBiABQQJqTw0CIAEgBWsiCkEBakEDcSIDBEAgAiAFQQJ0akH8AGohBQNAIAUoAgAiByAGOwFcIAcgAjYCWCAFQQRqIQUgBkEBaiEGIANBf2oiAw0ACwsgCkEDSQ0CIAZBA2ohBUF+IAFrIQMgBkECdCACakGEAWohAQNAIAFBdGooAgAiBiAFQX1qOwFcIAYgAjYCWCABQXhqKAIAIgYgBUF+ajsBXCAGIAI2AlggAUF8aigCACIGIAVBf2o7AVwgBiACNgJYIAEoAgAiBiAFOwFcIAYgAjYCWCABQRBqIQEgAyAFQQRqIgVqQQNHDQALDAILIA4gA0EBdGogDiABQQF0aiIOIAsgAWsiEEEBdBDzAyAOIAw6AAEgDiAHOgAAIAUgA0EDdGogBSABQQN0aiAQQQN0EPMDCyAFIAFBA3RqIBI3AwAgBUH4AGohByABQQJqIgwgC0ECaiIOSQRAIAcgDEECdGogByADQQJ0aiALIAFrQQJ0EPMDCyAHIANBAnRqIAo2AgAgBSALQQFqOwFeAkAgAyAOTw0AIAsgAWsiB0EBakEDcSIKBEAgBSABQQJ0akH8AGohAQNAIAEoAgAiDCADOwFcIAwgBTYCWCABQQRqIQEgA0EBaiEDIApBf2oiCg0ACwsgB0EDSQ0AIANBA2ohAUF+IAtrIQogBSADQQJ0akGEAWohAwNAIANBdGooAgAiByABQX1qOwFcIAcgBTYCWCADQXhqKAIAIgcgAUF+ajsBXCAHIAU2AlggA0F8aigCACIHIAFBf2o7AVwgByAFNgJYIAMoAgAiByABOwFcIAcgBTYCWCADQRBqIQMgCiABQQRqIgFqQQNHDQALCyAJQf8BcUErRw0BCyAAQSs6AAAMAwsgDUEIaiANQQ5qLwEAOwEAIA0gDSgBCjYCBCAJQQh2IQwgCSEHIAQhEiAGIQMgCCEKIAIiBSgCWCIBDQALIAYLIQEgACAMOgABIAAgBzoAACAAQQJqIA0oAgQ2AQAgAEEcaiAKNgIAIABBGGogATYCACAAQRRqIAU2AgAgAEEQaiAGNgIAIABBCGogEjcDACAAQQZqIA1BCGovAQA7AQALIAAgDzYCIAsgDUEgaiQADwtB+ABBCEH0jtIAKAIAIgBB8AAgABsRAgAACyAJQQsQ6gMAC0HQgsAAQTVBiIPAABCHAwALQagBQQhB9I7SACgCACIAQfAAIAAbEQIAAAsgBUELEOoDAAsgBUEMEOoDAAtB+IHAAEEoQaCCwAAQhwMAC7MQAgh/Fn4jAEEwayIFJAACQAJAAkACQAJAIAEpAwAiDFBFBEAgASkDCCINUEUEQCABKQMQIgtQRQRAIAsgDHwiCyAMWgRAIAwgDX0iDSAMWARAAkACQCALQv//////////H1gEQCAFIAEvARgiATsBCCAFIA03AwAgASABQWBqIAEgC0KAgICAEFQiAxsiBEFwaiAEIAtCIIYgCyADGyILQoCAgICAgMAAVCIDGyIEQXhqIAQgC0IQhiALIAMbIgtCgICAgICAgIABVCIDGyIEQXxqIAQgC0IIhiALIAMbIgtCgICAgICAgIAQVCIDGyIEQX5qIAQgC0IEhiALIAMbIgtCgICAgICAgIDAAFQiAxsgC0IChiALIAMbIg5CP4enQX9zaiIDa0EQdEEQdSIEQQBIDQIgBUJ/IAStIg+IIgsgDYM3AxAgDSALVg0MIAUgATsBCCAFIAw3AwAgBSALIAyDNwMQIAwgC1YNDEGgfyADa0EQdEEQdUHQAGxBsKcFakHOEG0iAUHRAE8NASABQQR0IgFBuN3RAGopAwAiEUL/////D4MiCyAMIA9CP4MiDIYiEEIgiCIXfiISQiCIIh0gEUIgiCIPIBd+fCAPIBBC/////w+DIhF+IhBCIIgiHnwgEkL/////D4MgCyARfkIgiHwgEEL/////D4N8QoCAgIAIfEIgiCEZQgFBACADIAFBwN3RAGovAQBqa0E/ca0iEoYiEUJ/fCEVIAsgDSAMhiIMQiCIIg1+IhBC/////w+DIAsgDEL/////D4MiDH5CIIh8IAwgD34iDEL/////D4N8QoCAgIAIfEIgiCEWIA0gD34hDSAMQiCIIQwgEEIgiCEQIAFBwt3RAGovAQAhAQJ/AkACQCAPIA4gDkJ/hUI/iIYiDkIgiCIafiIfIAsgGn4iE0IgiCIbfCAPIA5C/////w+DIg5+IhhCIIgiHHwgE0L/////D4MgCyAOfkIgiHwgGEL/////D4N8QoCAgIAIfEIgiCIYfEIBfCITIBKIpyIDQZDOAE8EQCADQcCEPUkNASADQYDC1y9JDQJBCEEJIANBgJTr3ANJIgQbIQZBgMLXL0GAlOvcAyAEGwwDCyADQeQATwRAQQJBAyADQegHSSIEGyEGQeQAQegHIAQbDAMLIANBCUshBkEBQQogA0EKSRsMAgtBBEEFIANBoI0GSSIEGyEGQZDOAEGgjQYgBBsMAQtBBkEHIANBgK3iBEkiBBshBkHAhD1BgK3iBCAEGwshBCAZfCEUIBMgFYMhCyAGIAFrQQFqIQggEyANIBB8IAx8IBZ8IiB9QgF8IhYgFYMhDUEAIQEDQCADIARuIQcCQAJAAkAgAUERRwRAIAEgAmoiCiAHQTBqIgk6AAAgFiADIAQgB2xrIgOtIBKGIhAgC3wiDFYNDSABIAZHDQMgAUEBaiIBQREgAUERSxshA0IBIQwDQCAMIQ4gDSEPIAEgA0YNAiAOQgp+IQwgASACaiALQgp+IgsgEoinQTBqIgQ6AAAgAUEBaiEBIA9CCn4iDSALIBWDIgtYDQALIAFBf2pBEU8NAiANIAt9IhUgEVohAyAMIBMgFH1+IhIgDHwhECASIAx9IhIgC1gNDiAVIBFUDQ4gASACakF/aiEGIA9CCn4gCyARfH0hEyARIBJ9IRUgEiALfSEUQgAhDwNAAkAgCyARfCIMIBJUDQAgDyAUfCALIBV8Wg0AQQEhAwwQCyAGIARBf2oiBDoAACAPIBN8IhYgEVohAyAMIBJaDRAgDyARfSEPIAwhCyAWIBFaDQALDA8LQRFBEUHc6dEAEMkCAAsgA0ERQezp0QAQyQIACyABQREQ6gMACyABQQFqIQEgBEEKSSAEQQpuIQRFDQALQcDp0QBBGUGo6dEAEIcDAAtB6OjRAEEtQZjp0QAQhwMACyABQdEAQfjn0QAQyQIAC0GU1tEAQR1B1NbRABCHAwALQZzb0QBBN0HI6NEAEIcDAAtB1NrRAEE2Qbjo0QAQhwMAC0Go2tEAQRxBqOjRABCHAwALQfjZ0QBBHUGY6NEAEIcDAAtBy9nRAEEcQYjo0QAQhwMACyABQQFqIQMCQCABQRFJBEAgFiAMfSINIAStIBKGIg5aIQEgEyAUfSISQgF8IREgEkJ/fCISIAxYDQEgDSAOVA0BIAsgDnwiDCAdfCAefCAZfCAPIBcgGn1+fCAbfSAcfSAYfSEPIBsgHHwgGHwgH3whDUIAIBQgCyAQfHx9IRVCAiAgIAwgEHx8fSEUA0ACQCAMIBB8IhcgElQNACANIBV8IA8gEHxaDQAgCyAQfCEMQQEhAQwDCyAKIAlBf2oiCToAACALIA58IQsgDSAUfCETIBcgElQEQCAMIA58IQwgDiAPfCEPIA0gDn0hDSATIA5aDQELCyATIA5aIQEgCyAQfCEMDAELIANBERDqAwALAkACQAJAIBEgDFgNACABRQ0AIAwgDnwiCyARVA0BIBEgDH0gCyARfVoNAQsgDEICWkEAIAwgFkJ8fFgbDQEgAEEANgIADAQLIABBADYCAAwDCyAAIAM2AgQgACACNgIAIABBCGogCDsBAAwCCyALIQwLAkACQAJAIBAgDFgNACADRQ0AIAwgEXwiCyAQVA0BIBAgDH0gCyAQfVoNAQsgDkIUfiAMWEEAIAwgDkJYfiANfFgbDQEgAEEANgIADAILIABBADYCAAwBCyAAIAE2AgQgACACNgIAIABBCGogCDsBAAsgBUEwaiQADwsgBUEANgIYIAVBEGogBSAFQRhqENACAAvRDwIVfwJ+IwBBIGsiCiQAAkACQCABQRVPBEACQAJAAkACQCABQQF2IgJB/////wBxIAJHDQAgAkEEdCICQQBIDQAgAkEIEMoDIhFFDQYgCkEANgIIIApCBDcDACAAQXBqIRQgAEFgaiEVIABBWGohFiABIQgDQAJAIAgiCUF/aiIORQRAQQAhCEEBIQcMAQsCQCAAIAlBfmoiBUEEdGpBCGopAwAiGCAAIA5BBHRqQQhqKQMAWgRAIAlBfmohBiAWIAlBBHRqIQJBACEIQQAhBAJAA0AgBCAGRg0BIARBAWohBCACKQMAIhcgGFQgAkFwaiECIBchGEUNAAsgBEEBaiEHIARBf3MgCWohBAwCCyAJIQcMAgsgFSAJQQR0IhJqIQdBAiEGA0ACQCAHIQIgBiEIIAUiBEUNACAIQQFqIQYgAkFwaiEHIAAgBEF/aiIFQQR0akEIaikDACIXIBhUIBchGA0BCwsCQCAJIARPBEAgCSABSw0BIAkgBGsiB0ECSQ0CIAhBAXYhBiASIBRqIQUDQCACKQMAIRcgAiAFKQMANwMAIAJBCGoiCCkDACEYIAggBUEIaiIIKQMANwMAIAUgFzcDACAIIBg3AwAgBUFwaiEFIAJBEGohAiAGQX9qIgYNAAsMAgsgBCAJEOsDAAsgCSABEOoDAAsgBEUEQCAEIQgMAQsgB0EJSwRAIAQhCAwBCyAJIAFLDQMgACAEQQR0aiEGA0AgCSAEQX9qIghJDQUCQCAJIAhrIgdBAU0NACAAIAhBBHRqIgtBCGoiAykDACIXIAAgBEEEdGoiAkEIaiIFKQMAWg0AIAspAwAhGCALIAIpAwA3AwAgAyAFKQMANwMAAkAgB0EDSQ0AIA4hBSAGIQMgFyALQShqKQMAWg0AA0AgA0EIaiADQRhqKQMANwMAIAMgA0EQaiICKQMANwMAIAQgBUF/aiIFRg0BIANBKGohCyACIQMgFyALKQMAVA0ACwsgAiAXNwMIIAIgGDcDAAsgCARAIAZBcGohBiAIIQQgB0EKSQ0BCwsgCigCCCEDCyAKKAIEIANGBEAgCiADENwBIAooAgghAwsgCigCACADQQN0aiICIAc2AgQgAiAINgIAIAogCigCCEEBaiIDNgIIAkACQCADQQJJDQADQAJAAkACQAJAIAooAgAiByADQX9qQQN0aiICKAIARQ0AIANBA3QgB2oiBEF0aigCACIGIAIoAgQiBU0NACADQQNJBEBBAiEDIAhFDQwMCAsgByADQX1qIgxBA3RqKAIEIgIgBSAGak0NASADQQRJBEBBAyEDIAhFDQwMCAsgBEFkaigCACACIAZqTQ0BDAULIANBA0kNASACKAIEIQUgByADQX1qIgxBA3RqKAIEIQILIAIgBUkNAQsgA0F+aiEMCwJAAkACQAJAAkAgAyAMQQFqIg9LBEAgAyAMTQ0BIAcgDEEDdGoiEygCBCISIBMoAgBqIgYgByAPQQN0IgtqIgIoAgAiEEkNAiAGIAFLDQMgE0EEaiEOIAAgEEEEdGoiBSACKAIEIg1BBHQiBGohAyAGQQR0IQkCQCAGIBBrIgYgDWsiByANSQRAIBEgAyAHQQR0IgIQ8AMiBiACaiEEIA1BAUgEQCAGIQIMCAsgB0EBTg0BIAYhAgwHCyAEIBEgBSAEEPADIgJqIQQgDUEBSA0FIAYgDUwNBSAAIAlqIQkDQCAFIAMgAiACQQhqKQMAIhcgA0EIaikDACIYVCIHGyIGKQMANwMAIAVBCGogBkEIaikDADcDACAFQRBqIQUgAiAXIBhaQQR0aiICIARPBEAgBSEDDAgLIAMgB0EEdGoiAyAJSQ0ACyAFIQMMBgsgCSAUaiEHA0AgByADIAQgA0F4aikDACIXIARBeGopAwAiGFQiCRtBcGoiAikDADcDACAHQQhqIAJBCGopAwA3AwAgBEFwQQAgFyAYWhtqIQQgBSADQXBBACAJG2oiA08EQCAGIQIMBwsgB0FwaiEHIAQgBiICSw0ACwwFCyAPIANB5LzAABDJAgALIAwgA0H0vMAAEMkCAAsgECAGEOsDAAsgBiABEOoDAAsgBSEDCyADIAIgBCACaxDwAxogDiANIBJqNgIAIBMgEDYCACAKKAIIIgUgD00NAiAKKAIAIAtqIgIgAkEIaiAFIAxrQQN0QXBqEPMDIAogBUF/aiIDNgIIIANBAUsNAAsLIAhFDQUMAQsLIA8gBUGUvcAAEMUCAAsQmAMACyAJIARBf2oiCEkNACAJIAEQ6gMACyAIIAkQ6wMACyAKKAIEBEAgCigCABAmCyARECYMAQsgAUECSQ0AIAFBf2oiAkUNACAAIAFBBHRqIQYDQCACQQR0IQggACACQX9qIgJBBHRqIglBCGoiBSkDACIXIAAgCGoiA0EIaiIIKQMAVARAIAkpAwAhGCAJIAMpAwA3AwAgBSAIKQMANwMAAkAgASACa0EDSQ0AIAchBCAXIAlBKGopAwBaDQADQCAEIAZqIgNBcGoiCCADKQMANwMAIAhBCGogA0EIaikDADcDACAEQRBqIgRFDQEgFyADQRhqKQMAVA0ACwsgAyAXNwMIIAMgGDcDAAsgB0FwaiEHIAINAAsLIApBIGokAA8LIAJBCEH0jtIAKAIAIgBB8AAgABsRAgAAC8gOAg5/AX4jAEEwayIKJAACQCABKAIMIgwgAmoiAiAMSQRAEP0CIAooAgwhAiAKKAIIIQQMAQsCQAJAAkACfwJAIAIgASgCACIJIAlBAWoiB0EDdkEHbCAJQQhJGyILQQF2SwRAIAIgC0EBaiIEIAIgBEsbIgJBCEkNASACIAJB/////wFxRgRAQX8gAkEDdEEHbkF/amd2QQFqDAMLEP0CIAooAiwhAiAKKAIoIQQMBgsgAUEEaigCACEGQQAhAgNAAkACQCAEQQFxRQRAIAIgB08NAQwCCyACQQdqIgQgAkkNACAEIgIgB0kNAQsCQAJAIAdBCE8EQCAGIAdqIAYpAAA3AAAMAQsgBkEIaiAGIAcQ8wMgB0UNAQtBACECA0ACQCAGIAIiCGoiDS0AAEGAAUcNACAGIAhBf3NBGGxqIQQgBkEAIAhrQRhsakFoaiEQAkADQCAJIAMgEBA3pyIOcSIHIQUgBiAHaikAAEKAgYKEiJCgwIB/gyISUARAQQghAiAHIQUDQCACIAVqIQUgAkEIaiECIAYgBSAJcSIFaikAAEKAgYKEiJCgwIB/gyISUA0ACwsgBiASeqdBA3YgBWogCXEiBWosAABBf0oEQCAGKQMAQoCBgoSIkKDAgH+DeqdBA3YhBQsgBSAHayAIIAdrcyAJcUEITwRAIAYgBUF/c0EYbGohAiAFIAZqIgctAAAgByAOQRl2Igc6AAAgBUF4aiAJcSAGakEIaiAHOgAAQf8BRg0CIAQtAAUhBSAELQAEIQcgBCACLwAEOwAEIAItAAchDiACLQAGIQ8gAiAELwAGOwAGIAQoAAAhESAEIAIoAAA2AAAgAiARNgAAIAIgBzoABCAEIA86AAYgAiAFOgAFIAQgDjoAByAELQAIIQUgBCACLQAIOgAIIAIgBToACCAELQAJIQUgBCACLQAJOgAJIAIgBToACSAELQAKIQUgBCACLQAKOgAKIAIgBToACiAELQALIQUgBCACLQALOgALIAIgBToACyAELQAMIQUgBCACLQAMOgAMIAIgBToADCAELQANIQUgBCACLQANOgANIAIgBToADSAELQAOIQUgBCACLQAOOgAOIAIgBToADiAELQAPIQUgBCACLQAPOgAPIAIgBToADyAELQAQIQUgBCACLQAQOgAQIAIgBToAECAELQARIQUgBCACLQAROgARIAIgBToAESAELQASIQUgBCACLQASOgASIAIgBToAEiAELQATIQUgBCACLQATOgATIAIgBToAEyAELQAUIQUgBCACLQAUOgAUIAIgBToAFCAELQAVIQUgBCACLQAVOgAVIAIgBToAFSAELQAWIQUgBCACLQAWOgAWIAIgBToAFiAELQAXIQUgBCACLQAXOgAXIAIgBToAFwwBCwsgDSAOQRl2IgI6AAAgCEF4aiAJcSAGakEIaiACOgAADAELIA1B/wE6AAAgCEF4aiAJcSAGakEIakH/AToAACACQRBqIARBEGopAAA3AAAgAkEIaiAEQQhqKQAANwAAIAIgBCkAADcAAAsgCEEBaiECIAggCUcNAAsLIAEgCyAMazYCCAwFCyACIAZqIgQgBCkDACISQgeIQn+FQoGChIiQoMCAAYMgEkL//v379+/fv/8AhHw3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A0EBIAMbOgAAIAMEQCAEQgA3AyggACAEQShqEB4LIABBBGogBCgCIBDAAiAAQQAgAC0AACIDIANBAUYiAxs6AAAgAw0AIAAQTQsgBUEoaiEAIAZFDQELCyAFIAhHIQULIARBOGogAUEQaikDADcDACAEQTBqIAFBCGopAwA3AwAgBCABKQMANwMoIARBCGogAkEIaigCADYCACAEIAIpAgA3AwBBACEBDAELIAFBEGoiACkDACAEQThqIAApAwA3AwAgBEEwaiABQQhqKQMANwMAIAQgASkDADcDKCAEQQhqIAJBCGooAgA2AgAgBCACKQIANwMAQQAhAUKCgICA4AdSDQBB0ABBCBDKAyIBRQ0BIAFBADYCSCABQgQ3A0AgAUIANwM4IAFBADoACCABQoGAgIAQNwMAC0HQAEEIEMoDIgBFDQAgAEEANgIMIAAgBToACSAAQQQ6AAggACAEKQMANwIQIAAgATYCHCAAIAQpAyg3AyAgAEEANgJIIABCBDcDQCAAQgA3AzggAEKBgICAEDcDACAAQRhqIARBCGooAgA2AgAgAEEoaiAEQTBqKQMANwMAIABBMGogBEE4aikDADcDACAEQUBrJAAgAA8LQdAAQQhB9I7SACgCACIAQfAAIAAbEQIAAAvhBwEDfyAAKAIAIgMgAygCAEF/aiIANgIAAkACQCAADQACQCADKAI4IgBBAWpBAkkNACAAIAAoAgRBf2oiATYCBCABDQAgABAmCyADKAJIIgEEQCADKAJAIQAgAUECdCECA0AgABAYIABBBGohACACQXxqIgINAAsLIANBxABqKAIABEAgAygCQBAmCwJAAkACQAJAAkACQCADQQhqIgEtAAAOBQUBAgMEAAsCQCABQQRqKAIAIgJBEEkNACACQX5xIQACQCACQQFxRQRAIAFBDGooAgAiAUEIaiABTw0BDAkLIAAgACgBBCIBQX9qNgEEIAFBAUcNASAAKAIAIgFBCGogAUkNCAsgABAmCyADKAIYIgFBEEkNBCABQX5xIQACQCABQQFxRQRAIANBIGooAgAiAUEIaiABTw0BDAgLIAAgACgBBCIBQX9qNgEEIAFBAUcNBSAAKAIAIgFBCGogAUkNBwsgABAmDAQLAkAgAUEEaigCACICQRBJDQAgAkF+cSEAAkAgAkEBcUUEQCABQQxqKAIAIgJB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AEEoakEANgIAIAJBCkYNAiAAQSxqQQA2AgAgAkELRg0CIABBMGpBADYCACACQQxGDQIgAEE0akEANgIAIAJBDUYNAiAAQThqQQA2AgAgAkEORg0CIABBPGpBADYCACACQQ9GDQIgAEFAa0EANgIAIAJBEEYNAiAAQcQAakEANgIAIAJBEUYNAiAAQcgAakEANgIAIAJBEkYNAiAAQcwAakEANgIAIAJBE0YNAiAAQdAAakEANgIAIAJBFEYNAiAAQdQAakEANgIAIAJBFUYNAiAAQdgAakEANgIAIAJBFkYNAiAAQdwAakEANgIAIAJBF0YNAiAAQeAAakEANgIAIAJBGEYNAiAAQeQAakEANgIAIAJBGUYNAiAAQegAakEANgIAIAJBGkYNAiAAQewAakEANgIAIAJBG0YNAiAAQfAAakEANgIAIAJBHEYNAiAAQfQAakEANgIAIAJBHUYNAiAAQfgAakEANgIAIAJBHkYNAiAAQfwAakEANgIAIAJBH0YNAiAAQYABakEANgIAIAJBIEYNAiAAQYQBakEANgIAIAJBIUYNAiAAQYgBakEANgIAIAJBIkYNAiAAQYwBakEANgIAIAJBI0YNAiAAQZABakEANgIAIAJBJEYNAiAAQZQBakEANgIAIAJBJUYNAiAAQZgBakEANgIAIAJBJkYNAiAAQZwBakEANgIAIAJBJ0YNAiAAQaABakEANgIAIAJBKEYNAkEoQShB6IXSABDJAgALIANBKEHohdIAEMkCAAtBkobSAEEdQeiF0gAQhwMACyAAKAIAIAVqIQIgAUEfcSIHRQRAIAAgAjYCACAADwsCQCACQX9qIgNBJ00EQCACIQQgACADQQJ0akEEaigCACIGQQAgAWsiAXYiA0UNASACQSdNBEAgACACQQJ0akEEaiADNgIAIAJBAWohBAwCCyACQShB6IXSABDJAgALIANBKEHohdIAEMkCAAsCQCAFQQFqIgggAkkEQCABQR9xIQEgAkECdCAAakF8aiEDA0AgAkF+akEoTw0CIANBBGogBiAHdCADKAIAIgYgAXZyNgIAIANBfGohAyAIIAJBf2oiAkkNAAsLIAAgBUECdGpBBGoiASABKAIAIAd0NgIAIAAgBDYCACAADwtBf0EoQeiF0gAQyQIAC6kJAQV/IwBB8ABrIgQkACAEIAM2AgwgBCAC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IAVBATYCACADQQ82AgwgA0ICNwJMIANBhKvAADYCSCADIANBEGo2AgggAyADQQhqNgJYIANBIGogA0HIAGoQYyADKAIUBEAgAygCEBAmCyADKAIgIQUgAygCJCEGIAMoAighB0EBCyEIIAFBFGooAgAiBCABQRBqKAIARgRAIAFBDGogBBDZASABKAIUIQQLIAEoAgwgBEEEdGoiBCAFNgIEIAQgCDYCACAEQQxqIAc2AgAgBEEIaiAGNgIAIAEgASgCFEEBajYCFCADQThqIgQgAkEYaikDADcDACADQTBqIAJBEGopAwA3AwAgA0EoaiIFIAJBCGopAwA3AwAgAyACKQMANwMgQZCO0gAoAgBBAk8EQCADQdwAakEANgIAIANBwJrAADYCWCADQgE3AkwgA0GEqcAANgJIIANByABqQQJBjKnAABD4AQsgAUEBOgBnIANB4ABqIAQpAwA3AwAgA0HYAGogA0EwaikDADcDACADQdAAaiAFKQMANwMAIAMgAykDIDcDSCAAIAFBBiADQcgAahABIAFBADoAZwwDC0HIncAAQRJBuKHAABDYAwALQfiSwABBD0GIk8AAELMDAAtBn6rAAEE0QdSqwAAQhwMACyADQfAAaiQAC7MHAQR/IwBB4ABrIgEkACABQRBqIABBEGopAgA3AwAgAUEIaiAAQQhqKQIANwMAIAEgACkCADcDACABQQY2AhwgAUHsvtEANgIYAkACQEHNjtIALQAARQ0AQaCP0gAoAgBFBEBBoI/SAEIBNwIADAELQaSP0gAoAgAhAEGkj9IAQQA2AgAgAEUNACAALQAIIQJBASEDIABBAToACCABIAJBAXEiAjoAOCACRQRAQYSP0gAoAgBB/////wdxBEACf0H4ktIALQAABEBB/JLSACgCAEUMAQtB+JLSAEEBOgAAQfyS0gBBADYCAEEBCyEDCyABQQQ6ADwgASAAQQxqNgI4IAFB2ABqIAFBEGopAwA3AwAgAUHQAGogAUEIaikDADcDACABIAEpAwA3A0gCQCABQThqQai/0QAgAUHIAGoQUARAIAEtADxBBEYNASABLQA8QQNHDQEgAUFAaygCACICKAIAIAIoAgQoAgARAwAgAigCBCIEKAIEBEAgBCgCCBogAigCABAmCyACECYMAQsgAS0APEEDRw0AIAFBQGsoAgAiAigCACACKAIEKAIAEQMAIAIoAgQiBCgCBARAIAQoAggaIAIoAgAQJgsgASgCQBAmCwJAIANFDQBBhI/SACgCAEH/////B3FFDQACf0H4ktIALQAABEBB/JLSACgCAEUMAQtB+JLSAEEBOgAAQfyS0gBBADYCAEEBCw0AIABBAToACQsgAEEAOgAIQaSP0gAoAgAhAkGkj9IAIAA2AgAgAkUNAiACIAIoAgAiAEF/ajYCACAAQQFHDQIgAhCFAwwCCyABQdwAakEANgIAIAFB2ABqQZyz0QA2AgAgAUIBNwJMIAFBhMvRADYCSCABQThqIAFByABqEM4CAAsCQEHQjtIAKAIAQQNGDQBB0I7SACgCAEEDRg0AIAFB1I7SADYCOCABIAFBOGo2AkhB0I7SAEEBIAFByABqQey/0QBB3L/RABBKCyABQdSO0gA2AiwgASABQSxqNgI4IAFB2ABqIAFBEGopAwA3AwAgAUHQAGogAUEIaikDADcDACABIAEpAwA3A0ggAUEgaiABQThqIAFByABqEHogAS0AIEEERg0AIAEgASkDIDcDMCABQdwAakECNgIAIAFBxABqQe8ANgIAIAFCAjcCTCABQcy+0QA2AkggAUHuADYCPCABIAFBOGo2AlggASABQTBqNgJAIAEgAUEYajYCOCABQcgAakHcvtEAEJkDAAsgAUHgAGokAAvTBQEJfwJAIAIEQCAAKAIEIQkgACgCACEKIAAoAgghBwNAAkAgBy0AAEUNACAKQfjv0QBBBCAJKAIMEQAARQ0AQQEPC0EAIQYgAiEEAkACQAJAA0ACQCABIAZqIQUCQAJAAkACQCAEQQhPBEAgBUEDakF8cSAFayIARQRAIARBeGohA0EAIQAMAwsgBCAAIAAgBEsbIQBBACEDA0AgAyAFai0AAEEKRg0FIANBAWoiAyAARw0ACwwBCyAERQ0EQQAhAyAFLQAAQQpGDQMgBEEBRg0EQQEhAyAFLQABQQpGDQMgBEECRg0EQQIhAyAFLQACQQpGDQMgBEEDRg0EQQMhAyAFLQADQQpGDQMgBEEERg0EQQQhAyAFLQAEQQpGDQMgBEEFRg0EQQUhAyAFLQAFQQpGDQMgBEEGRg0EQQYhAyAFLQAGQQpHDQQMAwsgACAEQXhqIgNLDQELA0AgACAFaiIIKAIAIgtBf3MgC0GKlKjQAHNB//37d2pxIAhBBGooAgAiCEF/cyAIQYqUqNAAc0H//ft3anFyQYCBgoR4cUUEQCAAQQhqIgAgA00NAQsLIAAgBE0NACAAIAQQ6QMACyAAIARGDQEgACAEayEEIAAgBWohBUEAIQMDQCADIAVqLQAAQQpHBEAgBCADQQFqIgNqDQEMAwsLIAAgA2ohAwsCQCADIAZqIgBBAWoiBiAASQ0AIAIgBkkNACAAIAFqLQAAQQpHDQAgB0EBOgAAIAIgBk0NAyAGIgAgAWosAABBv39MDQQMBQsgAiAGayEEIAIgBk8NAQsLIAdBADoAACACIQYLIAYgAiIARg0BCyABIAJBACAGEK0DAAsgCiABIAAgCSgCDBEAAARAQQEPCwJAIAIgAE0EQCAAIAJGDQEMBAsgACABaiwAAEG/f0wNAwsgACABaiEBIAIgAGsiAg0ACwtBAA8LIAEgAiAAIAIQrQMAC/cFAgZ/AX4jAEFAaiIDJAACQAJAAkACQCAAQUBrKAIAIgFFDQAgACgCOCABQX9qIgRBAnRqIQIDQCACKAIAIgEtAAhBBEcNAiABQShqIAFBMGoQowIEQCAAIAQ2AkAgAigCACIBRQ0EIAMgATYCCCACQXxqIQIgA0EIahAYIARBf2oiBEF/Rw0BDAILC0EBIQUDQAJAIAAgBDYCQCACKAIAIgZFDQAgAyAGNgIIIAYtAAhBBEcNBSAGQTBqIQEgBkEoaikDAEKCgICA8ABRBH8gASkDACIHQoKAgIDwMVEgB0KCgICAwPUAUXIFQQALIANBCGoQGA0AIAJBfGohAiAFQQFqIQUgBEF/aiIEQX9HDQELCyAFQQFGDQAgAEEUaigCACICIABBEGooAgBGBEAgAEEMaiACENkBIAAoAhQhAgsgACgCDCACQQR0aiIBQeKiwAA2AgQgAUEANgIAIAFBCGpBKDYCACAAIAAoAhRBAWo2AhQLAkAgAEHMAGooAgAiAkUNACADQQhqQQRyIQUDQCAAIAJBf2oiATYCTCADQRBqIAAoAkQgAUEFdGoiAUEIaikDADcDACADQRhqIAFBEGopAwA3AwAgA0EgaiABQRhqKQMANwMAIAMgASkDACIHNwMIIAenQX9qQQJJDQEgBRAYAkAgAykDECIHQgODQgBSDQAgB6ciASABKAIMIgFBf2o2AgwgAUEBRw0AEOoCIgIgAi0AACIBQQEgARs6AAAgAQRAIANCADcDKCACIANBKGoQHgsgAkEEaiADKAIQEMACIAJBACACLQAAIgEgAUEBRiIBGzoAACABDQAgAhBNCyADKAIYIQEgAygCICICBEAgAkEobCEEIAEhAgNAIAIQVCACQShqIQIgBEFYaiIEDQALCyADKAIcBEAgARAmCyAAKAJMIgINAAsLIANBQGskAA8LQfiSwABBD0GIk8AAELMDAAtByJ3AAEESQcCtwAAQ2AMAC0H4ksAAQQ9BiJPAABCzAwAL3AUCBX8GfiMAQYABayIDJAAgAb0hCAJAIAEgAWIEQEECIQUMAQsgCEL/////////B4MiDEKAgICAgICACIQgCEIBhkL+////////D4MgCEI0iKdB/w9xIgYbIglCAYMhCkEDIQUCQAJAAkBBAUECQQQgCEKAgICAgICA+P8AgyINUCIHGyANQoCAgICAgID4/wBRG0EDQQQgBxsgDFAbQX5qDgMAAQIDC0EEIQUMAgsgBkHNd2ohBCAKp0EBcyEFQgEhCwwBC0KAgICAgICAICAJQgGGIAlCgICAgICAgAhRIgQbIQlCAkIBIAQbIQsgCqdBAXMhBUHLd0HMdyAEGyAGaiEECyADIAQ7AXggAyALNwNwIANCATcDaCADIAk3A2AgAyAFOgB6An8gBUECRgRAQZTW0QAhBEEADAELIAJFBEBBw+zRAEGU1tEAIAhCAFMbIQQgCEI/iKcMAQtBw+zRAEHE7NEAIAhCAFMbIQRBAQshAiADQdwAagJ/AkACQAJAAkAgBUF+aiIFQQMgBUEDSRtB/wFxQQFrDgMBAwIACyADQQM2AiggA0HJ7NEANgIkIANBAjsBICADIAI2AlQgAyAENgJQIAMgA0EgajYCWEEBDAMLIANBAzYCKCADQcbs0QA2AiQgA0ECOwEgIAMgAjYCVCADIAQ2AlAgAyADQSBqNgJYQQEMAgsgA0EgaiADQeAAaiADQQ9qEA4CQCADKAIgRQRAIANB0ABqIANB4ABqIANBD2oQBAwBCyADQdgAaiADQShqKAIANgIAIAMgAykDIDcDUAsgAyADKAJQIAMoAlQgAy8BWEEAIANBIGoQgAEgAyACNgJUIAMgBDYCUCADIAMoAgA2AlggAygCBAwBCyADQQI7ASAgA0EBNgIoIANBxezRADYCJCADIAI2AlQgAyAENgJQIAMgA0EgajYCWEEBCzYCACAAIANB0ABqEFIgA0GAAWokAAuYBQEHfwJAAn8CQCAAIAFrIAJJBEAgASACaiEFIAAgAmohAyAAIAJBD00NAhogA0F8cSEAQQAgA0EDcSIGayEHIAYEQCABIAJqQX9qIQQDQCADQX9qIgMgBC0AADoAACAEQX9qIQQgACADSQ0ACwsgACACIAZrIgZBfHEiAmshA0EAIAJrIQIgBSAHaiIFQQNxBEAgAkF/Sg0CIAVBA3QiBEEYcSEHIAVBfHEiCEF8aiEBQQAgBGtBGHEhCSAIKAIAIQQDQCAAQXxqIgAgBCAJdCABKAIAIgQgB3ZyNgIAIAFBfGohASAAIANLDQALDAILIAJBf0oNASABIAZqQXxqIQEDQCAAQXxqIgAgASgCADYCACABQXxqIQEgACADSw0ACwwBCwJAIAJBD00EQCAAIQMMAQsgAEEAIABrQQNxIgVqIQQgBQRAIAAhAyABIQADQCADIAAtAAA6AAAgAEEBaiEAIANBAWoiAyAESQ0ACwsgBCACIAVrIgJBfHEiBmohAwJAIAEgBWoiBUEDcQRAIAZBAUgNASAFQQN0IgBBGHEhByAFQXxxIghBBGohAUEAIABrQRhxIQkgCCgCACEAA0AgBCAAIAd2IAEoAgAiACAJdHI2AgAgAUEEaiEBIARBBGoiBCADSQ0ACwwBCyAGQQFIDQAgBSEBA0AgBCABKAIANgIAIAFBBGohASAEQQRqIgQgA0kNAAsLIAJBA3EhAiAFIAZqIQELIAJFDQIgAiADaiEAA0AgAyABLQAAOgAAIAFBAWohASADQQFqIgMgAEkNAAsMAgsgBkEDcSIARQ0BIAIgBWohBSADIABrCyEAIAVBf2ohAQNAIANBf2oiAyABLQAAOgAAIAFBf2ohASAAIANJDQALCwvEBQIHfwF+IwBBQGoiAyQAIAAoAggiAkFwaiEFIABBEGooAgBBKGwhAAJAA0AgAEUNASADIAJBEGo2AgwgAyACQQhqNgIIIANCgoCAgBA3AxggA0KCgICAkD43AyAgAyADQSBqNgIUIAMgA0EYajYCECADQQhqIgEoAgApAwAgA0EQaiIEKAIAKQMAUQR/IAEoAgQpAwAgBCgCBCkDAFEFQQALAkAgAykDICIIQgODQgBSDQAgCKciASABKAIMIgFBf2o2AgwgAUEBRw0AEOoCIgEgAS0AACIEQQEgBBs6AAAgBARAIANCADcDKCABIANBKGoQHgsgAUEEaiADKAIgEMACIAFBACABLQAAIgQgBEEBRiIEGzoAACAEDQAgARBNCwJAIAMpAxgiCEIDg0IAUg0AIAinIgEgASgCDCIBQX9qNgIMIAFBAUcNABDqAiIBIAEtAAAiBEEBIAQbOgAAIAQEQCADQgA3AyggASADQShqEB4LIAFBBGogAygCGBDAAiABQQAgAS0AACIEIARBAUYiBBs6AAAgBA0AIAEQTQsgAkEoaiECIABBWGohACAFQShqIQVFDQALIAUoAgAiAkEPRg0AAkAgAkEJTwRAIAJBfnEgBUEIaigCAEEAIAJBAXFrcWpBCGohACAFQQRqKAIAIQIMAQsgBUEEaiEACyACQQZHDQAgAC0AACICQb9/akH/AXFBGklBBXQgAnJB6ABHDQAgAC0AASICQb9/akH/AXFBGklBBXQgAnJB6QBHDQAgAC0AAiICQb9/akH/AXFBGklBBXQgAnJB5ABHDQAgAC0AAyICQb9/akH/AXFBGklBBXQgAnJB5ABHDQAgAC0ABCICQb9/akH/AXFBGklBBXQgAnJB5QBHDQAgAC0ABSIAQb9/akH/AXFBGklBBXQgAHJB7gBGIQcLIANBQGskACAHC+IFAgZ/An4CQCACRQ0AQQAgAkF5aiIEIAQgAksbIQcgAUEDakF8cSABayEIQQAhBAJAAkACQANAAkACQAJAIAEgBGotAAAiBUEYdEEYdSIGQQBOBEAgCEF/Rg0BIAggBGtBA3ENAQJAIAQgB08NAANAIAEgBGoiAygCACADQQRqKAIAckGAgYKEeHENASAEQQhqIgQgB0kNAAsLIAQgAk8NAgNAIAEgBGosAABBAEgNAyACIARBAWoiBEcNAAsMCAtCgICAgIAgIQlCgICAgBAhCgJAAkACQAJAAkACQAJAAkACQCAFQcj00QBqLQAAQX5qDgMAAQIPCyAEQQFqIgMgAkkNBkIAIQkMDQtCACEJIARBAWoiAyACTw0MIAEgA2osAAAhAyAFQaB+ag4OAQMDAwMDAwMDAwMDAwIDC0IAIQkgBEEBaiIDIAJPDQsgASADaiwAACEDAkACQAJAAkAgBUGQfmoOBQEAAAACAAsgBkEPakH/AXFBAksNDSADQX9KDQ0gA0FATw0NDAILIANB8ABqQf8BcUEwTw0MDAELIANBj39KDQsLIARBAmoiAyACTw0LIAEgA2osAABBv39KDQhCACEKIARBA2oiAyACTw0MIAEgA2osAABBv39MDQVCgICAgIDgACEJQoCAgIAQIQoMDAsgA0FgcUGgf0cNCQwCCyADQaB/Tg0IDAELIAZBH2pB/wFxQQxPBEAgBkF+cUFuRw0IIANBf0oNCCADQUBPDQgMAQsgA0G/f0oNBwtCACEKIARBAmoiAyACTw0IIAEgA2osAABBv39KDQQMAQsgASADaiwAAEG/f0oNBwsgA0EBaiEEDAELIARBAWohBAsgBCACSQ0BDAULC0KAgICAgMAAIQlCgICAgBAhCgwCC0KAgICAgCAhCQwBC0IAIQoLIAAgCSAErYQgCoQ3AgQgAEEBNgIADwsgACABNgIEIABBCGogAjYCACAAQQA2AgAL2wUCBn8BfiMAQSBrIgMkAAJAIAAgAUYNACACKAIAIgdBBGohCCAHQQhqIQYDQAJ/IAAsAAAiAkF/SgRAIAJB/wFxIQIgAEEBagwBCyAALQABQT9xIQUgAkEfcSEEIAJBX00EQCAEQQZ0IAVyIQIgAEECagwBCyAALQACQT9xIAVBBnRyIQUgAkFwSQRAIAUgBEEMdHIhAiAAQQNqDAELIARBEnRBgIDwAHEgAC0AA0E/cSAFQQZ0cnIiAkGAgMQARg0CIABBBGoLIQBBAiEFQfQAIQQCQAJAAkACQAJAAkACQCACQXdqDh8GAwEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBBQEBAQEFAAsgAkHcAEYNBAtBASEFIAJBYGpB3wBPDQIMAwtB8gAhBAwDC0HuACEEDAILIAJBAXJnQQJ2QQdzrUKAgICA0ACEIQlBAyEFCyACIQQLIAMgCTcDECADIAQ2AgwgAyAFNgIIIANBCGoQ/AEiAkGAgMQARwRAA0ACQAJ/AkACQCACQYABTwRAIANBADYCHCACQYAQSQ0BIAJBgIAETw0CIAMgAkE/cUGAAXI6AB4gAyACQQx2QeABcjoAHCADIAJBBnZBP3FBgAFyOgAdQQMMAwsgBigCACIEIAgoAgBGBH8gByAEEO4BIAYoAgAFIAQLIAcoAgBqIAI6AAAgBiAGKAIAQQFqNgIADAMLIAMgAkE/cUGAAXI6AB0gAyACQQZ2QcABcjoAHEECDAELIAMgAkE/cUGAAXI6AB8gAyACQRJ2QfABcjoAHCADIAJBBnZBP3FBgAFyOgAeIAMgAkEMdkE/cUGAAXI6AB1BBAshAiAIKAIAIAYoAgAiBGsgAkkEQCAHIAQgAhDvASAGKAIAIQQLIAcoAgAgBGogA0EcaiACEPADGiAGIAIgBGo2AgALIANBCGoQ/AEiAkGAgMQARw0ACwsgACABRw0ACwsgA0EgaiQAC6oFAgN/AX4jAEEwayIEJAAgBEEIaiABIAIQfAJAAkACQAJAAkACQCAELQAIQX5qDgQAAQIDBAsgBCgCDCIFQRBJDQMgBUF+cSEDAkAgBUEBcUUEQCAEQRRqKAIAIgVBCGogBU8NAQwGCyADIAMoAQQiBUF/ajYBBCAFQQFHDQQgAygCACIFQQhqIAVJDQULIAMQJgwDCyAEQRBqEFcMAgsgBEEQahBXDAELIARBCGpBBHIQGAsCQCABKAJYRQRAAkACQAJAIAFBQGsoAgAiA0UNACABIANBf2oiAzYCQCABKAI4IANBAnRqKAIAIgNFDQAgBCADNgIIIARBCGoQGCABKAJAIgMEQANAIAEoAjggA0ECdGpBfGooAgAiAy0ACEEERw0DAkACQCADKQMoQoKAgIDwAFENACADQShqIgUgA0EwaiIDEPECDQAgBSADEJEDRQ0BCyAEQRdqIAJBCGopAAA3AAAgBEEfaiACQRBqKQAAIgY3AAAgAEEEOgAAIABBCGpBADoAACAAQSBqIAY3AAAgBCACKQAANwAPIABBCWogBCkACDcAACAAQRFqIARBEGopAAA3AAAgAEEZaiAEQRhqKQAANwAADAcLIAEoAkAiA0UNBCABIANBf2oiAzYCQCABKAI4IANBAnRqKAIAIgNFDQQgBCADNgIIIARBCGoQGCABKAJAIgMNAAsLQcidwABBEkG4ocAAENgDAAtByJ3AAEESQcCtwAAQ2AMAC0H4ksAAQQ9BiJPAABCzAwALQcidwABBEkHArcAAENgDAAsgBEEYaiACQRBqKQMANwMAIARBEGogAkEIaikDADcDACAEIAIpAwA3AwggACABIARBCGoQKgsgBEEwaiQADwtBsLLRACgCAEG0stEAKAIAQaidwAAQ2AMAC84FAgR/An4jAEEgayICJAAgASkCACIGp0EmIAEtAAgiBBshASAAQcABaiEDIABBmAJqIQUCQAJAAkACQAJAAkAgAC0AmAIOEwIEBAQEAAQEBAQEBAQEBAQEBAEECyAALQCZAkECRg0BDAMLIAJBADYCACADIAICfwJAAkAgAUGAAU8EQCABQYAQSQ0BIAFBgIAETw0CIAIgAUE/cUGAAXI6AAIgAiABQQx2QeABcjoAACACIAFBBnZBP3FBgAFyOgABQQMMAwsgAiABOgAAQQEMAgsgAiABQT9xQYABcjoAASACIAFBBnZBwAFyOgAAQQIMAQsgAiABQT9xQYABcjoAAyACIAFBEnZB8AFyOgAAIAIgAUEGdkE/cUGAAXI6AAIgAiABQQx2QT9xQYABcjoAAUEECxAlDAELIAAgARCsAQsgBEEBIAQbIgRBAUcEQCAGQiCIIgenIQECQAJAAkACQCAFLQAADhMCBQUFBQEFBQUFBQUFBQUFBQUABQsgAkEANgIAIAFBgAFPBEAgAUGAEE8EQCABQYCABE8EQCACIAFBP3FBgAFyOgADIAIgBkIyiKdB8AFyOgAAIAIgBkImiKdBP3FBgAFyOgACIAIgBkIsiKdBP3FBgAFyOgABIAMgAkEEECUMBQsgAiABQT9xQYABcjoAAiACIAZCLIinQeABcjoAACACIAZCJoinQT9xQYABcjoAASADIAJBAxAlDAQLIAIgAUE/cUGAAXI6AAEgAiAGQiaIp0HAAXI6AAAgAyACQQIQJQwDCyACIAc8AAAgAyACQQEQJQwCCyAALQCZAkECRw0DCyAAIAEQrAELIARBAkcNAgsgAkEgaiQADwsgAkEUakEBNgIAIAJCAjcCBCACQcjFwAA2AgAgAkEbNgIcIAIgBTYCGCACIAJBGGo2AhAgAkHYxcAAEJkDAAtBAkECQYTFwAAQyQIAC/4EAQl/IwBBEGsiBSQAAn8gASgCBCICBEBBASAAKAIYIAEoAgAgAiAAQRxqKAIAKAIMEQAADQEaC0EAIAFBDGooAgAiA0UNABogASgCCCICIANBDGxqIQggAEEcaigCACEGIAAoAhghByAFQQxqIQkDQAJAAkACQAJAIAIvAQBBAWsOAgIBAAsCQCACKAIEIgFBwQBPBEAgBigCDCEAA0BBASAHQZTy0QBBwAAgABEAAA0HGiABQUBqIgFBwABLDQALDAELIAFFDQMLAkAgAUE/TQRAIAFBlPLRAGosAABBv39MDQELIAdBlPLRACABIAYoAgwRAABFDQNBAQwFC0GU8tEAQcAAQQAgARCtAwALIAcgAigCBCACKAIIIAYoAgwRAABFDQFBAQwDCyACLwECIQEgCUEAOgAAIAVBADYCCEEBIQACQAJAAkACQAJAIAIvAQBBAWsOAgABAgsgAi8BAiIAQegHTwRAQQRBBSAAQZDOAEkbIQQMAwtBASEEIABBCkkNAkECQQMgAEHkAEkbIQQMAgtBAiEACyACIABBAnRqKAIAIgRBBkkEQCAEDQFBACEEDAILIARBBRDqAwALIAVBCGogBGohAwJAIARBAXFFBEAgASEADAELIANBf2oiAyABIAFBCm4iAEEKbGtBMHI6AAALIARBAUYNACADQX5qIQEDQCABIABB//8DcSIDQQpuIgpBCnBBMHI6AAAgAUEBaiAAIApBCmxrQTByOgAAIANB5ABuIQAgASAFQQhqRiABQX5qIQFFDQALCyAHIAVBCGogBCAGKAIMEQAARQ0AQQEMAgsgCCACQQxqIgJHDQALQQALIAVBEGokAAvYBQEFfyMAQSBrIgUkACAFQQhqQQJyIQkgACgCACEHA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAcOBAEAAgUCCyABRQ0CCyAAQQIgACgCACIGIAYgB0YiCBs2AgAgCA0CIAYhBwwMCyAHQQNxQQJGBEADQEHwktIAKAIADQVB8JLSAEF/NgIAQfSS0gAoAgAiBkUEQEH0ktIAIAcQxQEiBjYCAAsgBiAGKAIAIghBAWo2AgAgCEF/TA0GQfCS0gBB8JLSACgCAEEBajYCACAGRQ0HIAchCCAAIAkgACgCACIHIAcgCEYbNgIAIAVBADoAECAFIAY2AgggBSAIQXxxNgIMIAcgCEYEQCAFLQAQRQ0JDAwLAkAgBSgCCCIGRQ0AIAYgBigCACIGQX9qNgIAIAZBAUcNACAFKAIIEO4CCyAHQQNxQQJGDQAMDAsAC0GQwNEAQcAAIAQQhwMACyAFQRxqQQA2AgAgBUGcs9EANgIYIAVCATcCDCAFQfzA0QA2AgggBUEIaiAEEJkDAAsgBSAHQQFGOgAMIAVBAzYCCCACIAVBCGogAygCEBECACAAKAIAIQEgACAFKAIINgIAIAUgAUEDcSIANgIAIABBAkcNBSABQX5qIgZFDQADQCAGKAIAIQEgBkEANgIAIAFFDQcgBigCBCAGQQE6AAggAUEYahC1ASABIAEoAgAiAkF/ajYCACACQQFGBEAgARDuAgsiBg0ACwsgBUEgaiQADwtBnLPRAEEQIAVB/LPRAEG8wtEAELUCAAsAC0HotNEAQd4AQeS10QAQ2AMACwNAEFUgBS0AEEUNAAsMAgsgBUEANgIIIAUgBUEIakGIwdEAEM8CAAtBz7PRAEErQZjB0QAQhwMACyAFKAIIIgdFDQAgByAHKAIAIgdBf2o2AgAgB0EBRw0AIAUoAggQ7gIgACgCACEHDAELIAAoAgAhBwwACwALwAQCBX8GfiAAIAAoAjhBBGo2AjggAAJ/AkACQAJAIAAoAjwiBUUEQAwBCwJ+QQggBWsiAkEEIAJBBEkbIgRBA00EQEIADAELQQQhAyABNQAACyEHIAAgACkDMCADQQFyIARJBEAgASADajMAACADQQN0rYYgB4QhByADQQJyIQMLIAMgBEkEfiABIANqMQAAIANBA3SthiAHhAUgBwsgBUEDdEE4ca2GhCIINwMwIAJBBEsNASAAQSBqIgMgAEEoaiIFKQMAIAiFIgkgAEEYaiIEKQMAfCIKIAMpAwAiB0INiSAHIAApAxB8IguFIgx8IgcgDEIRiYU3AwAgBCAHQiCJNwMAIAUgCiAJQhCJhSIHQhWJIAcgC0IgiXwiB4U3AwAgACAHIAiFNwMQCyACIQQgAkEEIAJrIgZBeHFJBEAgAEEgaiIDIAEgAmopAAAiCCAAQShqIgUpAwCFIgkgAEEYaiIEKQMAfCIKIAMpAwAiByAAKQMQfCILIAdCDYmFIgx8IgcgDEIRiYU3AwAgBCAHQiCJNwMAIAUgCUIQiSAKhSIHQhWJIAcgC0IgiXwiB4U3AwAgACAHIAiFNwMQIAJBCGohBAsgAkUNAUIAIQdBAAwCCyAAIAVBBGo2AjwPCyABIARqNQAAIQdBBAsiAkEBciAGSQRAIAEgAiAEamozAAAgAkEDdK2GIAeEIQcgAkECciECCyACIAZJBH4gASACIARqajEAACACQQN0rYYgB4QFIAcLNwMwIAAgBjYCPAvMBAIFfwF+IwBBIGsiAyQAAkAgACgCCCIBBEAgACgCACEAIAFBKGwhBQNAAkAgACkDACIGUA0AIAZCA4NCAFINACAGpyIBIAEoAgwiAUF/ajYCDCABQQFHDQAQ6gIiASABLQAAIgJBASACGzoAACACBEAgA0IANwMIIAEgA0EIahAeCyABQQRqIAAoAgAQwAIgAUEAIAEtAAAiAiACQQFGIgIbOgAAIAINACABEE0LAkAgAEEIaiIEKQMAIgZCA4NCAFINACAGpyIBIAEoAgwiAUF/ajYCDCABQQFHDQAQ6gIiASABLQAAIgJBASACGzoAACACBEAgA0IANwMIIAEgA0EIahAeCyABQQRqIAQoAgAQwAIgAUEAIAEtAAAiAiACQQFGIgIbOgAAIAINACABEE0LAkAgAEEQaiIEKQMAIgZCA4NCAFINACAGpyIBIAEoAgwiAUF/ajYCDCABQQFHDQAQ6gIiASABLQAAIgJBASACGzoAACACBEAgA0IANwMIIAEgA0EIahAeCyABQQRqIAQoAgAQwAIgAUEAIAEtAAAiAiACQQFGIgIbOgAAIAINACABEE0LAkAgAEEYaigCACICQRBJDQAgAkF+cSEBAkAgAkEBcUUEQCAAQSBqKAIAIgJBCGogAk8NAQwFCyABIAEoAQQiAkF/ajYBBCACQQFHDQEgASgCACICQQhqIAJJDQQLIAEQJgsgAEEoaiEAIAVBWGoiBQ0ACwsgA0EgaiQADwtBsLLRACgCAEG0stEAKAIAQYCNwQAQ2AMAC/IEAgp/An4jAEEgayIFJAAgAEG5893xeWwhBgJAAkACfwJAAkADQEGojtIAKAIAIgFFBEAQgwMhAQsgBkEAIAEoAghrdiIHIAEoAgQiAk8NASABKAIAIgkgB0EGdGoiAyADKAIYIgJBASACGzYCGCADQRhqIQQgAgRAIAQQjQILQaiO0gAoAgAgAUcEQCAEIAQoAgAiAkF/ajYCACACQQRJDQEgAkECcQ0BIAQQxAEMAQsLIAkgB0EGdGoiCCgCHCIBRQ0DAn8gACABKAIARgRAQQAhAiAIQRxqDAELA0AgASICKAIEIgFFDQUgASgCACAARw0ACyACQQRqCyABKAIEIgM2AgACQCABIAkgB0EGdGoiBigCIEcEQCADDQFBAQwECyAGQSBqIAI2AgBBAQwDCwNAIAMoAgAiAiAARg0CIAMoAgQiAw0ACwwBCyAHIAJB5K7RABDJAgALIAAgAkcLIQogBUEQahAAENQBIAECfwJAQX8gBSkDECIMIAgpAwAiC1IgDCALVBsiBkF/IAUoAhgiAyAJIAdBBnRqQQhqIgEoAgAiAkcgAyACSRsgBhtBAUYEQCAFIAwgA0IAIAgQpwNBwIQ9cBDoAiAFKQMAIQsgASAFKAIINgIAIAggCzcDAAwBCyAKBEAgAEEAOgAAQQAMAgsgAEECOgAAQQAMAQtBASAKRQ0AGiAAQQE6AABBAQs2AggQ1AMgBCAEKAIAIgBBf2o2AgACQCAAQQRJDQAgAEECcQ0AIAQQxAELDAELIABBADoAACAEIAQoAgAiAEF/ajYCACAAQQRJDQAgAEECcQ0AIAQQxAELIAVBIGokAAuXBQIEfwF+IwBBEGsiBSQAAkACQAJAAkACQAJAAkAgAkUEQCABQUBrKAIAIgJFDQEgASgCOCACQQJ0akF8aigCACICIAIoAgAiA0EBaiIENgIAIAQgA0kNAgsgBSACNgIMIAACfwJAAkACQAJAIAEtAGdFDQAgAi0ACEEERw0LIAJBKGogAkEwahDzAkUNACABQUBrKAIAIgMEQCABKAI4IQQgA0ECdCECA0AgAiAEaiIGQXxqKAIAIgEtAAhBBEcNDSABKQMoQoKAgIDwAFEEQCABKQMwIgdCgoCAgOAHUQ0FIAdCgoCAgIA3UQ0GCyACQXxqIgINAAsgAw0CC0EAQQBBhLLAABDJAgALIAItAAhBBEcNCgJAIAIpAyhCgoCAgPAAUQRAIAIpAzBCgoCAgOAHUQ0BCyAAQQA2AgAgACACNgIEDAoLIAIoAhwiAUUNBiABIAEoAgAiAkEBaiIDNgIAIAMgAkkNBSAAIAE2AgRBAAwDCyAEKAIAIgEgASgCACICQQFqIgM2AgAgAyACSQ0EIABBADYCACAAIAE2AgQgBUEMahAYDAgLIAEoAhwiAUUNBSABIAEoAgAiAkEBaiIDNgIAIAMgAkkNAyAAIAE2AgRBAAwBCyABIAEoAgAiA0EBaiIENgIAIAQgA0kNAiACQQRGDQUgBkF4aigCACICIAIoAgAiA0EBaiIENgIAIAQgA0kNAiAAIAE2AgQgAEEIaiACNgIAQQILNgIAIAVBDGoQGAwFC0HIncAAQRJBuKHAABDYAwALAAtB0JLAAEEXQeiSwAAQswMAC0HQksAAQRdB6JLAABCzAwALQcCawABBK0GMrcAAEIcDAAsgBUEQaiQADwtB+JLAAEEPQYiTwAAQswMAC4oEAQd/IAJBACACIAFBA2pBfHEgAWsiCWtBB3EgAiAJSSIIGyIDayEEAkAgAiADTwRAAn8CQAJAIANFDQAgASACaiIHIAEgBGoiBWshBiAHQX9qIgMtAABBCkYEQCAGQX9qIARqIQMMAgsgAyAFRg0AIAdBfmoiAy0AAEEKRgRAIAZBfmogBGohAwwCCyADIAVGDQAgB0F9aiIDLQAAQQpGBEAgBkF9aiAEaiEDDAILIAMgBUYNACAHQXxqIgMtAABBCkYEQCAGQXxqIARqIQMMAgsgAyAFRg0AIAdBe2oiAy0AAEEKRgRAIAZBe2ogBGohAwwCCyADIAVGDQAgB0F6aiIDLQAAQQpGBEAgBkF6aiAEaiEDDAILIAMgBUYNACAHQXlqIgMtAABBCkYEQCAGQXlqIARqIQMMAgsgAyAFRg0AIAZBeGogBGohAwwBCyACIAkgCBshBQNAIAQiAyAFSwRAIANBeGohBCABIANqIglBeGooAgBBipSo0ABzIghBf3MgCEH//ft3anEgCUF8aigCAEGKlKjQAHMiCEF/cyAIQf/9+3dqcXJBgIGChHhxRQ0BCwsgAyACSw0DIAFBf2ohAgNAQQAgA0UNAhogAiADaiADQX9qIQMtAABBCkcNAAsLQQELIQEgACADNgIEIAAgATYCAA8LIAQgAhDpAwALIAMgAhDqAwALgAUBCn8jAEEwayIDJAAgA0EkaiABNgIAIANBAzoAKCADQoCAgICABDcDCCADIAA2AiAgA0EANgIYIANBADYCEAJAAkACQCACKAIIIgpFBEAgAkEUaigCACIERQ0BIAIoAgAhASACKAIQIQAgBEF/akH/////AXFBAWoiByEEA0AgAUEEaigCACIFBEAgAygCICABKAIAIAUgAygCJCgCDBEAAA0ECyAAKAIAIANBCGogAEEEaigCABEBAA0DIABBCGohACABQQhqIQEgBEF/aiIEDQALDAELIAJBDGooAgAiAEUNACAAQQV0IQsgAEF/akH///8/cUEBaiEHIAIoAgAhAQNAIAFBBGooAgAiAARAIAMoAiAgASgCACAAIAMoAiQoAgwRAAANAwsgAyAEIApqIgVBHGotAAA6ACggAyAFQQRqKQIAQiCJNwMIIAVBGGooAgAhBiACKAIQIQhBACEJQQAhAAJAAkACQCAFQRRqKAIAQQFrDgIAAgELIAZBA3QgCGoiDCgCBEGgAUcNASAMKAIAKAIAIQYLQQEhAAsgAyAGNgIUIAMgADYCECAFQRBqKAIAIQACQAJAAkAgBUEMaigCAEEBaw4CAAIBCyAAQQN0IAhqIgYoAgRBoAFHDQEgBigCACgCACEAC0EBIQkLIAMgADYCHCADIAk2AhggCCAFKAIAQQN0aiIAKAIAIANBCGogACgCBBEBAA0CIAFBCGohASALIARBIGoiBEcNAAsLQQAhACAHIAIoAgRJIgFFDQEgAygCICACKAIAIAdBA3RqQQAgARsiASgCACABKAIEIAMoAiQoAgwRAABFDQELQQEhAAsgA0EwaiQAIAAL8wMCA38BfiMAQSBrIgMkAAJAIAEEQCAAIAFBBXRqIQQDQAJAAkACQAJAIAAtAAAOAwABAgMLAkAgAEEIaikDACIFQgODQgBSDQAgBaciASABKAIMIgFBf2o2AgwgAUEBRw0AEOoCIgEgAS0AACICQQEgAhs6AAAgAgRAIANCADcDCCABIANBCGoQHgsgAUEEaiAAKAIIEMACIAFBACABLQAAIgIgAkEBRiICGzoAACACDQAgARBNCyAAQRhqKAIAIgIEQCAAQRBqKAIAIQEgAkEobCECA0AgARBUIAFBKGohASACQVhqIgINAAsLIABBFGooAgBFDQIgACgCEBAmDAILIABBBGooAgAiAkEQSQ0BIAJBfnEhAQJAIAJBAXFFBEAgAEEMaigCACICQQhqIAJPDQEMBgsgASABKAEEIgJBf2o2AQQgAkEBRw0CIAEoAgAiAkEIaiACSQ0FCyABECYMAQsgAEEEaigCACICQRBJDQAgAkF+cSEBAkAgAkEBcUUEQCAAQQxqKAIAIgJBCGogAk8NAQwFCyABIAEoAQQiAkF/ajYBBCACQQFHDQEgASgCACICQQhqIAJJDQQLIAEQJgsgAEEgaiIAIARHDQALCyADQSBqJAAPC0GwstEAKAIAQbSy0QAoAgBB2JnAABDYAwAL1wQBCX8jAEEQayIEJAACQAJAAn8CQCAAKAIIQQFGBEAgAEEMaigCACEGIARBDGogAUEMaigCACIFNgIAIAQgAUEIaigCACICNgIIIAQgAUEEaigCACIDNgIEIAQgASgCACIBNgIAIAAtACAhCSAAKAIEIQogAC0AAEEIcQ0BIAohCCAJIQcgAwwCCyAAIAEQSSECDAMLIAAoAhggASADIABBHGooAgAoAgwRAAANAUEBIQcgAEEBOgAgQTAhCCAAQTA2AgQgBEEANgIEIARBlNbRADYCAEEAIAYgA2siAyADIAZLGyEGQQALIQEgBQRAIAVBDGwhAwNAAn8CQAJAAkAgAi8BAEEBaw4CAgEACyACQQRqKAIADAILIAJBCGooAgAMAQsgAkECai8BACIFQegHTwRAQQRBBSAFQZDOAEkbDAELQQEgBUEKSQ0AGkECQQMgBUHkAEkbCyEFIAJBDGohAiABIAVqIQEgA0F0aiIDDQALCwJ/AkAgBiABSwRAQQAhAiAGIAFrIgEhAwJAAkACQCAHQQNxQQFrDgMAAQACC0EAIQMgASECDAELIAFBAXYhAiABQQFqQQF2IQMLIAJBAWohAiAAQRxqKAIAIQEgACgCGCEHA0AgAkF/aiICRQ0CIAcgCCABKAIQEQEARQ0ACwwDCyAAIAQQSQwBCyAAIAQQSQ0BQQAhAgNAQQAgAiADRg0BGiACQQFqIQIgByAIIAEoAhARAQBFDQALIAJBf2ogA0kLIQIgACAJOgAgIAAgCjYCBAwBC0EBIQILIARBEGokACACC/kEAgZ/An4jAEHQAGsiAiQAAkACQAJAIAAoAgAiAy0ACEEERgRAIAMoAgwNASADQX82AgwgAygCGCIAQShsIQQgAygCECEFAn5BiI/SACkDAFBFBEBBmI/SACkDACEIQZCP0gApAwAMAQsgAkEIaiIGQgI3AwggBkIBNwMAQYiP0gBCATcDAEGYj9IAIAIpAxAiCDcDACACKQMICyEJIAJBMGpCADcDACACQSxqQfDLwAA2AgAgAiAJNwMYQZCP0gAgCUIBfDcDACACQQA2AiggAiAINwMgIAAEQCACIAJBKGogACACQRhqEBALIAUgBCAFaiACQRhqENEBIAEoAgghBSABKAIEIQQgAiABKAIAIgA2AkAgAiAENgI8IAIgADYCOCACIAAgBUEobGo2AkQgAiACQRhqNgJIIANBEGogAkE4ahAiIAIoAigiBEUNAyACKAI0RQRAIARBAWohBgwDCyACKAIsIgBBCGohBSAAIARBAWoiBmohByAAKQMAQn+FQoCBgoSIkKDAgH+DIQgDQAJ+IAhQBEAgBSEBA0AgASAHTw0GIABBwH5qIQAgASkDACABQQhqIgUhAUKAgYKEiJCgwIB/gyIIQoCBgoSIkKDAgH9RDQALIAhCgIGChIiQoMCAf4UiCEJ/fCAIgwwBCyAARQ0EIAhCf3wgCIMLIABBACAIeqdBA3ZrQRhsakFoahBzIQgMAAsAC0GclMAAQQ5BrJTAABCzAwALQbCNwABBECACQRhqQZSOwABBvJTAABC1AgALIAQgBq1CGH6nIgBqQQlqRQ0AIAIoAiwgAGsQJgsgAyADKAIMQQFqNgIMIAJB0ABqJAALlAQCA38BfiMAQSBrIgMkAAJAIAApAwAiBFANACAEQgODQgBSDQAgBKciASABKAIMIgFBf2o2AgwgAUEBRw0AEOoCIgEgAS0AACICQQEgAhs6AAAgAgRAIANCADcDCCABIANBCGoQHgsgAUEEaiAAKAIAEMACIAFBACABLQAAIgIgAkEBRiICGzoAACACDQAgARBNCwJAIAApAwgiBEIDg0IAUg0AIASnIgEgASgCDCIBQX9qNgIMIAFBAUcNABDqAiIBIAEtAAAiAkEBIAIbOgAAIAIEQCADQgA3AwggASADQQhqEB4LIAFBBGogACgCCBDAAiABQQAgAS0AACICIAJBAUYiAhs6AAAgAg0AIAEQTQsCQCAAKQMQIgRCA4NCAFINACAEpyIBIAEoAgwiAUF/ajYCDCABQQFHDQAQ6gIiASABLQAAIgJBASACGzoAACACBEAgA0IANwMIIAEgA0EIahAeCyABQQRqIAAoAhAQwAIgAUEAIAEtAAAiAiACQQFGIgIbOgAAIAINACABEE0LAkACQCAAKAIYIgJBEEkNACACQX5xIQECQCACQQFxRQRAIABBIGooAgAiAEEIaiAATw0BDAMLIAEgASgBBCIAQX9qNgEEIABBAUcNASABKAIAIgBBCGogAEkNAgsgARAmCyADQSBqJAAPC0GwstEAKAIAQbSy0QAoAgBBmI3AABDYAwAL9gUBBn8jAEEgayIAJAACQAJAAkACQAJAAkACQEHwktIAKAIARQRAQfCS0gBBfzYCAEH0ktIAKAIAIgJFBEBB9JLSACACEMUBIgI2AgALIAIgAigCACIBQQFqNgIAIAFBf0wNAUHwktIAQfCS0gAoAgBBAWo2AgAgAkUNAiACQQAgAigCGCIBIAFBAkYiARs2AhggAUUEQCACQRhqIgEtAAQhAyABQQE6AAQgACADQQFxIgM6AAQgAw0EIAFBBGohA0GEj9IAKAIAQf////8HcQRAAn9B+JLSAC0AAARAQfyS0gAoAgBFDAELQfiS0gBBAToAAEH8ktIAQQA2AgBBAQtBAXMhBQsgAy0AAQ0FIAEgASgCACIEQQEgBBs2AgAgBEUNCCAEQQJHDQYgASgCACEEIAFBADYCACAAIAQ2AgQgBEECRw0HAkAgBQ0AQYSP0gAoAgBB/////wdxRQ0AAn9B+JLSAC0AAARAQfyS0gAoAgBFDAELQfiS0gBBAToAAEH8ktIAQQA2AgBBAQsNACADQQE6AAELIANBADoAAAsgAiACKAIAIgFBf2o2AgAgAUEBRgRAIAIQ7gILIABBIGokAA8LQZyz0QBBECAAQQhqQfyz0QBBvMLRABC1AgALAAtB6LTRAEHeAEHktdEAENgDAAsgAEEcakEANgIAIABBGGpBnLPRADYCACAAQgE3AgwgAEGEy9EANgIIIABBBGogAEEIahDOAgALIAAgBToADCAAIAM2AghBjLTRAEErIABBCGpBuLTRAEGIzNEAELUCAAsgAEEcakEANgIAIABBnLPRADYCGCAAQgE3AgwgAEGwzNEANgIIIABBCGpBuMzRABCZAwALIABBHGpBADYCACAAQRhqQZyz0QA2AgAgAEIBNwIMIABB6MzRADYCCCAAQQRqIABBCGpB8MzRABDPAgALIABBHGpBADYCACAAQZyz0QA2AhggAEIBNwIMIABBlMrRADYCCCAAQQhqQdTK0QAQmQMAC7IFAgd/AX5BBiEEAkAgAEFAaygCACICRQ0AIAAoAjghBSAAQdgAakEAIAAoAlgiBhshByACQQJ0QXxqIQEDQAJAAkACQAJAIAEgBWoiAyAHIAEbIAMgBhsoAgAiAy0ACEEERgRAIAMpAyhCgoCAgPAAUg0EAkACQAJAAkACQAJAAkACQAJAIAMpAzAiCEKBgICAgDdXBEAgCEKBgICA4AdXBEAgCEKCgICA8AZRDQUgCEKCgICA0AVRDQIMDwsgCEKCgICA8DFRDQMgCEKCgICA4AdSDQ4gAEEkaigCACIBRQ0MIAEgACgCHGpBf2otAAAPCyAIQoGAgIDA9QBVDQEgCEKBgICA0NsAVwRAIAhCgYCAgIDSAFcEQCAIQoKAgICAN1ENCCAIQoKAgICQzQBRDQIMDwsgCEKCgICAgNIAUg0IQQ0PCyAIQoGAgICg5gBXBEAgCEKCgICA0NsAUQ0GIAhCgoCAgLDfAFINDkELDwsgCEKCgICAoOYAUQ0EIAhCgoCAgNDyAFINDQtBDA8LIAhCgoCAgMD1AFENACAIQoKAgIDw9wBRDQ0gCEKCgICA8IkBUg0LIAIgAUECdiIASQ0IQQ8hBCABRQ0NIAVBfGohAiABQXxxIQEDQCABIAJqKAIAIgAtAAhBBEcNCyAAKQMoQoKAgIDwAFEEQCAAKQMwIghCgoCAgOAHUQ0PIAhCgoCAgIA3UQ0ICyABQXxqIgENAAsMDQsgAUUNCkEODwsgAUUNCUEDDwtBBUECIAAoAlAbDwtBCg8LQQgPCyAIQoKAgIDQ0gBSDQVBEw8LQRAhBAwGC0H4ksAAQQ9BiJPAABCzAwALIAAgAhDqAwALQcCawABBK0HEqMAAEIcDAAtB+JLAAEEPQYiTwAAQswMACyABQXxqIgFBfEcNAAsLIAQL1QMCA38BfiMAQSBrIgMkAAJAAkACQAJAAkAgAC0AAA4DAAECAwsCQCAAQQhqKQMAIgRCA4NCAFINACAEpyIBIAEoAgwiAUF/ajYCDCABQQFHDQAQ6gIiASABLQAAIgJBASACGzoAACACBEAgA0IANwMIIAEgA0EIahAeCyABQQRqIAAoAggQwAIgAUEAIAEtAAAiAiACQQFGIgIbOgAAIAINACABEE0LIABBGGooAgAiAgRAIABBEGooAgAhASACQShsIQIDQCABEFQgAUEoaiEBIAJBWGoiAg0ACwsgAEEUaigCAEUNAiAAKAIQECYMAgsgAEEEaigCACICQRBJDQEgAkF+cSEBAkAgAkEBcUUEQCAAQQxqKAIAIgBBCGogAE8NAQwECyABIAEoAQQiAEF/ajYBBCAAQQFHDQIgASgCACIAQQhqIABJDQMLIAEQJgwBCyAAQQRqKAIAIgJBEEkNACACQX5xIQECQCACQQFxRQRAIABBDGooAgAiAEEIaiAATw0BDAMLIAEgASgBBCIAQX9qNgEEIABBAUcNASABKAIAIgBBCGogAEkNAgsgARAmCyADQSBqJAAPC0GwstEAKAIAQbSy0QAoAgBBqJ3AABDYAwALigQBBn9BgIDEACEBAkACQAJAIAAoAgAiA0EPRg0AAn9BgIDEAAJ/IANBCU8EQCADQX5xIABBCGooAgBBACADQQFxa3FqQQhqIQEgACgCBAwBCyAAQQRqIQEgAwsiBUUNABoCfyABLAAAIgJBf0oEQCACQf8BcSEEIAFBAWoMAQsgAS0AAUE/cSEGIAJBH3EhBCACQV9NBEAgBEEGdCAGciEEIAFBAmoMAQsgAS0AAkE/cSAGQQZ0ciEGIAJBcEkEQCAGIARBDHRyIQQgAUEDagwBC0GAgMQAIARBEnRBgIDwAHEgAS0AA0E/cSAGQQZ0cnIiBEGAgMQARg0BGiABQQRqCyECAkAgAiABIAVqIgFGDQAgBSABayACaiEBAkAgAiwAACIFQX9KDQAgBUFgSQ0AIAVBcEkNACAFQf8BcUESdEGAgPAAcSACLQADQT9xIAItAAJBP3FBBnQgAi0AAUE/cUEMdHJyckGAgMQARg0BIAFFDQEMBQsgAQ0ECyAECyEBIANBEEkNACADQQFxRQRAIABBADYCBCABDwsgA0F+cSIDIAMoAQQiAkF/ajYBBCACQQFGBEAgAygCACICQQhqIAJJDQIgAxAmCyAAQgA3AgQgAEEPNgIAIAEPCyAAQQ82AgAgAQ8LQbCy0QAoAgBBtLLRACgCAEHckMEAENgDAAsgACABEH4gBAvvBAIGfwF+IwBBQGoiBSQAIAUgAzoAMSAFIAI6ADACQAJAAkACQAJ+AkACQCABKAIEIgYEQCAFQQhqIAEoAgAiByAGIAVBMGoQJCAFKAIIRQ0CIAUtADEhAyAFLQAwIQIgBUEQaigCACIJDQELQfgAQQgQygMiBkUNAyAGIAI6AGAgBkEBOwFeIAZBADYCWCAGIAQ3AwAgAUEBNgIIIAEgBjYCBCABQQA2AgAgBkHhAGogAzoAAEIADAILIAUoAgwhCCAFIAVBFGooAgA2AjggBSAJNgI0IAUgCDYCMCAFQQhqIAVBMGogAiADIAQQDSAFLQAIIglBK0cEQCAFQSRqKAIAIQMgBUEgaigCACEIIAVBEGopAwAhBCAFLQAJIQpBqAFBCBDKAyICRQ0EIAIgBjYCeCACQQA7AV4gAkEANgJYIAEgAjYCBCAGQQA7AVwgBiACNgJYIAEgB0EBajYCACAHIAhHDQUgAi8BXiIGQQpLDQYgAiAGQQFqIgc7AV4gAiAGQQF0aiIIQeEAaiAKOgAAIAhB4ABqIAk6AAAgAiAGQQN0aiAENwMAIAJB+ABqIAdBAnRqIAM2AgAgAyAHOwFcIAMgAjYCWAsgASABKAIIQQFqNgIIQgAMAQsgBUEQaigCACAFQRRqKAIAQQN0aiIBKQMAIQsgASAENwMAQgELIQQgACALNwMIIAAgBDcDACAFQUBrJAAPC0H4AEEIQfSO0gAoAgAiAEHwACAAGxECAAALQagBQQhB9I7SACgCACIAQfAAIAAbEQIAAAtBpoHAAEEwQdiBwAAQhwMAC0GrgMAAQSBB6IHAABCHAwALrgUBBH8gACABaiECAkACQAJAIAAoAgRBAXENACAAKAIAIQMCQCAALQAEQQNxBEAgASADaiEBIAAgA2siAEHAktIAKAIARw0BIAIoAgRBA3FBA0cNAkG4ktIAIAE2AgAgAiACKAIEQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgAPCyABIANqQRBqIQAMAgsgA0GAAk8EQCAAELIBDAELIABBDGooAgAiBCAAQQhqKAIAIgVHBEAgBSAENgIMIAQgBTYCCAwBC0Goj9IAQaiP0gAoAgBBfiADQQN2d3E2AgALIAItAARBAnFBAXYEQCACIAIoAgRBfnE2AgQgACABQQFyNgIEIAAgAWogATYCAAwCCwJAQcSS0gAoAgAgAkcEQCACQcCS0gAoAgBHDQFBwJLSACAANgIAQbiS0gBBuJLSACgCACABaiIBNgIAIAAgAUEBcjYCBCAAIAFqIAE2AgAPC0HEktIAIAA2AgBBvJLSAEG8ktIAKAIAIAFqIgE2AgAgACABQQFyNgIEIABBwJLSACgCAEcNAUG4ktIAQQA2AgBBwJLSAEEANgIADwsgAigCBEF4cSIDIAFqIQECQCADQYACTwRAIAIQsgEMAQsgAkEMaigCACIEIAJBCGooAgAiAkcEQCACIAQ2AgwgBCACNgIIDAELQaiP0gBBqI/SACgCAEF+IANBA3Z3cTYCAAsgACABQQFyNgIEIAAgAWogATYCACAAQcCS0gAoAgBHDQFBuJLSACABNgIACw8LIAFBgAJPBEAgACABEK8BDwsgAUEDdiICQQN0QbCP0gBqIQECf0Goj9IAKAIAIgNBASACdCICcQRAIAEoAggMAQtBqI/SACACIANyNgIAIAELIQIgASAANgIIIAIgADYCDCAAIAE2AgwgACACNgIIC5MEAgh/AX4jAEEgayIGJAAgAEFAaygCACEDIAGnIQQgACgCOCECAkACQAJAIAFCA4MiClBFBEAgA0ECdCEAIAJBfGohBwNAQQAhAyAARQ0CIAAgB2oiBSgCACICIAIoAgAiCEEBaiIJNgIAIAkgCEkNBCAGIAI2AgggAiABEOkBIAZBCGoQGARAQQEhAwwDCyAFKAIAIgItAAhBBEcNAyACQShqIgUgAkEwaiICEK0CDQIgBSACEPECDQIgAEF8aiEAIAUgAhCRA0UNAAsMAQsgA0ECdCEAIAJBfGohBwNAIABFBEBBACEDDAILIAAgB2oiBSgCACICIAIoAgAiA0EBaiIINgIAIAggA0kNA0EBIQMgBCAEKAIMQQFqNgIMIAYgAjYCCCACIAEQ6QEgBkEIahAYDQEgBSgCACIDLQAIQQRHDQIgA0EoaiICIANBMGoiBRCtAgRAQQAhAwwCCyACIAUQ8QIEQEEAIQMMAgsgAEF8aiEAQQAhAyACIAUQkQNFDQALCwJAIApCAFINACAEIAQoAgwiAEF/ajYCDCAAQQFHDQAQ6gIiACAALQAAIgJBASACGzoAACACBEAgBkIANwMIIAAgBkEIahAeCyAAQQRqIAQQwAIgAEEAIAAtAAAiBCAEQQFGIgQbOgAAIAQNACAAEE0LIAZBIGokACADDwtB+JLAAEEPQYiTwAAQswMACwALmgUCBX8DfiMAQSBrIgMkACAAQRBqKAIAIgEEQCAAKAIIIQAgAUEobCEEA0BCgoCAgMAAIQcCQAJ+An4CQAJAAkACQAJAAkACQAJAIABBEGoiASkDACIGQgODUARAIAanIgIgAigCDEEBajYCDCABKQMAIQYLIAZCgYCAgKA7VwRAIAZCgYCAgOAQVwRAQoKAgICgBSAGQoKAgIDQA1ENChogBkKCgICA0AhRDQIgBkKCgICAkA5SDQhCgoCAgDAhB0KCgICAsCYhCEICDAsLIAZCgoCAgOAQUQ0DIAZCgoCAgKAZUQ0EIAZCgoCAgJAvUg0HQoKAgICQPgwJCyAGQoGAgIDg2gBXBEAgBkKCgICAoDtRDQYgBkKCgICAgD1RDQUgBkKCgICAkMIAUg0HQoKAgIAwIQdCgoCAgOAgIQhCAgwKCyAGQoKAgIDg2gBRDQcgBkKCgICAsN0AUQ0BIAZCgoCAgJD1AFINBkKCgICAkB4MCAtCgoCAgIDqAAwHC0KCgICA0BwMBgtCgoCAgIAnDAULQoKAgIAwIQdCgoCAgODPACEIQgIMBQtCAiEHQoKAgICAPSEIQoKAgIDQAAwEC0ICIQdCgoCAgLAaIQhCgoCAgPAADAMLIAZCA4NCAFINAyAGpyICIAIoAgwiAUF/ajYCDCABQQFHDQMQ6gIiASABLQAAIgVBASAFGzoAACAFBEAgA0IANwMIIAEgA0EIahAeCyABQQRqIAIQwAIgAUEAIAEtAAAiAiACQQFGIgIbOgAAIAINAyABEE0MAwtCgoCAgLAXCyEIQoKAgIDAAAshBiAAEHMgASAINwMAIABBCGogBzcDACAAIAY3AwALIABBKGohACAEQVhqIgQNAAsLIANBIGokAAuZBAELf0GkjtIAQaSO0gAoAgBBAWoiBjYCACAGQQNsIQUCQAJAA0BBqI7SACgCACIDRQRAEIMDIQMLIAMoAgQiAiAFTw0BIAIEQCACQQZ0IQQgAygCAEEYaiEBA0AgASABKAIAIgJBASACGzYCACACBEAgARCNAgsgAUFAayEBIARBQGoiBA0ACwtBqI7SACgCACADRwRAIAMoAgQiAkUNASACQQZ0IQQgAygCAEEYaiEBA0AgASABKAIAIgJBf2o2AgACQCACQQRJDQAgAkECcQ0AIAEQxAELIAFBQGshASAEQUBqIgQNAAsMAQsLIAYgAxBxIQcgAygCBCICBEAgAygCACIIIAJBBnRqIQsDQCAIKAIcIgEEQEEAIAcoAghrQR9xIQQgBygCACEGIAcoAgQhCQNAIAEoAgBBufPd8XlsIAR2IgUgCU8NBSABKAIEIAYgBUEGdGoiCigCICIFQQRqIApBHGogBRsgATYCACAKIAE2AiAgAUEANgIEIgENAAsLIAhBQGsiCCALRw0ACwtBqI7SACAHNgIAIAMoAgQiAkUNACACQQZ0IQQgAygCAEEYaiEBA0AgASABKAIAIgJBf2o2AgACQCACQQRJDQAgAkECcQ0AIAEQxAELIAFBQGshASAEQUBqIgQNAAsLIABCADcCACAAQRBqQQA6AAAgAEEIakIANwIADwsgBSAJQeyv0QAQyQIAC5AEAgt/BH4jAEEQayIKJAACQAJAAkACQCABKAIIIgVFBEAgAEIINwIAIABBCGohCAwBCyAFrUIofiINQiCIpw0BIA2nIgZBAEgNASABKAIAIQsgBkEIEMoDIglFDQIgAEEANgIIIAAgBTYCBCAAIAk2AgAgAEEIaiEIQQAhASAFIQADQCABIAZGDQECQCABIAtqIgMpAwAiDVAEQEIAIQ0MAQsgDUIDg0IAUg0AIA2nIgIgAigCDEEBajYCDCADKQMAIQ0LIANBCGoiAikDACIOQgODUARAIA6nIgQgBCgCDEEBajYCDCACKQMAIQ4LIANBEGoiAikDACIPQgODUARAIA+nIgQgBCgCDEEBajYCDCACKQMAIQ8LIANBGGoiBCgCACICQRBPBEAgAkEBcUUEQCACIANBIGoiBygCADYCACAHQQA2AgAgBCACQQFyIgI2AgALIAJBfnEiAigBBCIHQQFqIgwgB0kNBSACIAw2AQQLIANBIGooAgAhAiAEKQMAIRAgASAJaiIDQRBqIA83AwAgA0EIaiAONwMAIAMgDTcDACADQRhqIBA3AwAgA0EgaiACNgIAIAFBKGohASAAQX9qIgANAAsLIAggBTYCACAKQRBqJAAPCxCYAwALIAZBCEH0jtIAKAIAIgBB8AAgABsRAgAAC0GwstEAKAIAQbSy0QAoAgBBsIzAABDYAwALkAQCC38EfiMAQRBrIgokAAJAAkACQAJAIAEoAggiBUUEQCAAQgg3AgAgAEEIaiEIDAELIAWtQih+Ig1CIIinDQEgDaciBkEASA0BIAEoAgAhCyAGQQgQygMiCUUNAiAAQQA2AgggACAFNgIEIAAgCTYCACAAQQhqIQhBACEBIAUhAANAIAEgBkYNAQJAIAEgC2oiAykDACINUARAQgAhDQwBCyANQgODQgBSDQAgDaciAiACKAIMQQFqNgIMIAMpAwAhDQsgA0EIaiICKQMAIg5CA4NQBEAgDqciBCAEKAIMQQFqNgIMIAIpAwAhDgsgA0EQaiICKQMAIg9CA4NQBEAgD6ciBCAEKAIMQQFqNgIMIAIpAwAhDwsgA0EYaiIEKAIAIgJBEE8EQCACQQFxRQRAIAIgA0EgaiIHKAIANgIAIAdBADYCACAEIAJBAXIiAjYCAAsgAkF+cSICKAEEIgdBAWoiDCAHSQ0FIAIgDDYBBAsgA0EgaigCACECIAQpAwAhECABIAlqIgNBEGogDzcDACADQQhqIA43AwAgAyANNwMAIANBGGogEDcDACADQSBqIAI2AgAgAUEoaiEBIABBf2oiAA0ACwsgCCAFNgIAIApBEGokAA8LEJgDAAsgBkEIQfSO0gAoAgAiAEHwACAAGxECAAALQbCy0QAoAgBBtLLRACgCAEGYjMEAENgDAAutBAEFfwJAIAAoAgAiBSACQf8fcSIHQQJ0aiIDKAIARQ0AA0ACQAJAIAMoAgAiBCgCCCACRw0AIAQoAgQiBiABQQxBCCABKAIAG2ooAgBHDQAgBCgCACABKAIEIAYQ8QNFDQELIARBEGohAyAEKAIQDQEMAgsLIAQgBCgCDCIEQQFqNgIMIARBAEwEQCADKAIAIgMgAygCDEF/ajYCDCAAKAIAIQUMAQsgAygCAAJAIAEoAgBFDQAgAUEIaigCAEUNACABKAIEECYLDwsgAUEIaigCACEDIAEoAgQhBgJAAkACQAJAAkAgASgCAEUEQAJAIANFBEBBASEEDAELIANBAEgNAyADQQEQygMiBEUNBAsgBCAGIAMQ8AMaIAUgB0ECdGoiASgCACEFIAFBADYCAAwBCyABQQxqKAIAIQAgBSAHQQJ0aiIBKAIAIQUgAUEANgIAIAMgAE0EQCAAIQMgBiEEDAELIABFBEBBASEEIAYQJkEAIQMMAQsgBiADQQEgABDFAyIERQ0DIAAhAwtBFEEEEMoDIgBFDQMgACAFNgIQIABBATYCDCAAIAI2AgggACADNgIEIAAgBDYCACABKAIAIgIEQCACEJsDIAEoAgAQJgsgASAANgIAIAAPCxCYAwALIANBAUH0jtIAKAIAIgBB8AAgABsRAgAACyAAQQFB9I7SACgCACIAQfAAIAAbEQIAAAtBFEEEQfSO0gAoAgAiAEHwACAAGxECAAAL/AMBB38jAEEQayIHJAAgAUEEaiEFAkACQAJAAkACQCABKAIAQQFGBEAgACgCACIEQTxqKAIAIgJB/////wdPDQIgBCACQQFqIgI2AjwgBCgCSCIDRQ0BIAQoAkAgA0ECdGpBfGoCfyAFKAIAIgNBD0YEQEGcj8AAIQJBAAwBCyADQQlPBEAgA0F+cSABQQxqKAIAQQAgA0EBcWtxakEIaiECIAFBCGooAgAMAQsgAUEIaiECIAMLIQgoAgAgAiAIEB8gBCgCPCECRQ0BIAQgAkF/ajYCPCADQRBJDQQgA0F+cSEAAkAgA0EBcUUEQCABQQxqKAIAIgFBCGogAU8NAQwHCyAAIAAoAQQiAUF/ajYBBCABQQFHDQUgACgCACIBQQhqIAFJDQYLIAAQJgwECyAAIAUoAgAQ6AEMAwsgBCACQX9qNgI8QdAAQQgQygMiAUUNASABQQA2AgwgAUECOgAIIAFBADYCSCABQgQ3A0AgAUIANwM4IAFCgYCAgBA3AwAgASAFKQIANwIQIAFBGGogBUEIaigCADYCACAAIAEQ6AEMAgtBwI3AAEEYIAdBCGpBhI7AAEGYk8AAELUCAAtB0ABBCEH0jtIAKAIAIgBB8AAgABsRAgAACyAHQRBqJAAPC0GwstEAKAIAQbSy0QAoAgBBjI/AABDYAwALggoAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAALQAAQQFrDigBAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoAAsgASgCGEHvyNEAQQggAUEcaigCACgCDBEAAA8LIAEoAhhB38jRAEEQIAFBHGooAgAoAgwRAAAPCyABKAIYQc7I0QBBESABQRxqKAIAKAIMEQAADwsgASgCGEG/yNEAQQ8gAUEcaigCACgCDBEAAA8LIAEoAhhBsMjRAEEPIAFBHGooAgAoAgwRAAAPCyABKAIYQZ7I0QBBEiABQRxqKAIAKAIMEQAADwsgASgCGEGNyNEAQREgAUEcaigCACgCDBEAAA8LIAEoAhhBgcjRAEEMIAFBHGooAgAoAgwRAAAPCyABKAIYQfjH0QBBCSABQRxqKAIAKAIMEQAADwsgASgCGEHox9EAQRAgAUEcaigCACgCDBEAAA8LIAEoAhhB3cfRAEELIAFBHGooAgAoAgwRAAAPCyABKAIYQdPH0QBBCiABQRxqKAIAKAIMEQAADwsgASgCGEHGx9EAQQ0gAUEcaigCACgCDBEAAA8LIAEoAhhBvMfRAEEKIAFBHGooAgAoAgwRAAAPCyABKAIYQa/H0QBBDSABQRxqKAIAKAIMEQAADwsgASgCGEGjx9EAQQwgAUEcaigCACgCDBEAAA8LIAEoAhhBksfRAEERIAFBHGooAgAoAgwRAAAPCyABKAIYQYDH0QBBEiABQRxqKAIAKAIMEQAADwsgASgCGEHyxtEAQQ4gAUEcaigCACgCDBEAAA8LIAEoAhhB3MbRAEEWIAFBHGooAgAoAgwRAAAPCyABKAIYQdDG0QBBDCABQRxqKAIAKAIMEQAADwsgASgCGEHFxtEAQQsgAUEcaigCACgCDBEAAA8LIAEoAhhBvcbRAEEIIAFBHGooAgAoAgwRAAAPCyABKAIYQbTG0QBBCSABQRxqKAIAKAIMEQAADwsgASgCGEGpxtEAQQsgAUEcaigCACgCDBEAAA8LIAEoAhhBnsbRAEELIAFBHGooAgAoAgwRAAAPCyABKAIYQYfG0QBBFyABQRxqKAIAKAIMEQAADwsgASgCGEH7xdEAQQwgAUEcaigCACgCDBEAAA8LIAEoAhhB78XRAEEMIAFBHGooAgAoAgwRAAAPCyABKAIYQd3F0QBBEiABQRxqKAIAKAIMEQAADwsgASgCGEHVxdEAQQggAUEcaigCACgCDBEAAA8LIAEoAhhBx8XRAEEOIAFBHGooAgAoAgwRAAAPCyABKAIYQbvF0QBBDCABQRxqKAIAKAIMEQAADwsgASgCGEGsxdEAQQ8gAUEcaigCACgCDBEAAA8LIAEoAhhBmcXRAEETIAFBHGooAgAoAgwRAAAPCyABKAIYQY7F0QBBCyABQRxqKAIAKAIMEQAADwsgASgCGEGsxNEAQQsgAUEcaigCACgCDBEAAA8LIAEoAhhBgcXRAEENIAFBHGooAgAoAgwRAAAPCyABKAIYQfbE0QBBCyABQRxqKAIAKAIMEQAADwsgASgCGEHxxNEAQQUgAUEcaigCACgCDBEAAA8LIAEoAhhB5MTRAEENIAFBHGooAgAoAgwRAAAL8AMBCH8jAEEgayIEJAAgAUEUaigCACEJIAEoAgAhBQJAIAFBBGooAgAiB0EDdEUNACAHQX9qQf////8BcSICQQFqIgNBB3EhBgJ/IAJBB0kEQEEAIQMgBQwBCyAFQTxqIQIgA0H4////A3EhCEEAIQMDQCACKAIAIAJBeGooAgAgAkFwaigCACACQWhqKAIAIAJBYGooAgAgAkFYaigCACACQVBqKAIAIAJBSGooAgAgA2pqampqampqIQMgAkFAayECIAhBeGoiCA0ACyACQURqCyAGRQ0AQQRqIQIDQCACKAIAIANqIQMgAkEIaiECIAZBf2oiBg0ACwsCQAJAAkAgCUUEQCADIQIMAQsCQCAHRQ0AIAUoAgQNACADQRBJDQILIAMgA2oiAiADSQ0BCyACRQ0AAkAgAkF/SgRAIAJBARDKAyIDRQ0BDAMLEJgDAAsgAkEBQfSO0gAoAgAiAEHwACAAGxECAAALQQEhA0EAIQILIABBADYCCCAAIAI2AgQgACADNgIAIAQgADYCBCAEQRhqIAFBEGopAgA3AwAgBEEQaiABQQhqKQIANwMAIAQgASkCADcDCCAEQQRqQcjS0QAgBEEIahBQRQRAIARBIGokAA8LQcjT0QBBMyAEQQhqQfDS0QBBlNTRABC1AgAL/gMBBX8jAEFAaiIBJAACQCAAKAIEIgJFDQAgACgCCCEDIAAoAgAhACABQSBqIAI2AgAgAUEcaiAANgIAIAFBEGogAjYCACABIAM2AiggAUEANgIYIAEgADYCDCABQQA2AggCQAJAIANFBEAgAUECNgIIDAELIAFBCGpBBHIhBQJAA0AgASADQX9qNgIoAkACQCAEDgMAAQMBCyABKAIQIQICQCABKAIMIgBFDQAgAEF/aiAAQQdxIgMEQANAIABBf2ohACACKAJ4IQIgA0F/aiIDDQALC0EHSQ0AA0AgAigCeCgCeCgCeCgCeCgCeCgCeCgCeCgCeCECIABBeGoiAA0ACwsgAUEANgIUIAEgAjYCECABQgE3AwgLIAFBMGogBRChASABKAI0RQ0EIAEoAgghBCABKAIoIgMNAAsgAUECNgIIIAEoAhAhAiABKAIMIQAgBA4DAQIDAgtBmIjAAEErQaSJwAAQhwMACwJAIABFDQAgAEF/aiAAQQdxIgMEQANAIABBf2ohACACKAJ4IQIgA0F/aiIDDQALC0EHSQ0AA0AgAigCeCgCeCgCeCgCeCgCeCgCeCgCeCgCeCECIABBeGoiAA0ACwtBACEACyACRQ0AA0AgAigCWEGoAUH4ACAAGwRAIAIQJgsgAEEBaiEAIgINAAsLIAFBQGskAAvKAQEHfyMAQSBrIgMkACAAQUBrKAIAIQIgACgCOCEBAkACQAJAIAJBAnQhACABQXxqIQQDQEEAIQIgAEUNASAAIARqIgUoAgAiASABKAIAIgZBAWoiBzYCACAHIAZJDQMgAyABNgIIIAFCgoCAgIDsABDpASADQQhqEBgEQEEBIQIMAgsgBSgCACIBLQAIQQRHDQIgAEF8aiEAIAFBKGogAUEwahC9AUUNAAsMAAsgA0EgaiQAIAIPC0H4ksAAQQ9BiJPAABCzAwALAAvWAwIIfwF+IwBBIGsiBSQAIABBQGsoAgAhAyABpyEEIAAoAjghAgJAAkACQCABQgODIgpQRQRAIANBAnQhACACQXxqIQYDQEEAIQMgAEUNAiAAIAZqIgcoAgAiAiACKAIAIghBAWoiCTYCACAJIAhJDQQgBSACNgIIIAIgARDpASAFQQhqEBgEQEEBIQMMAwsgBygCACICLQAIQQRHDQMgAEF8aiEAIAJBKGogAkEwahCSA0UNAAsMAQsgA0ECdCEAIAJBfGohBgNAQQAhAyAARQ0BIAAgBmoiBygCACICIAIoAgAiA0EBaiIINgIAIAggA0kNA0EBIQMgBCAEKAIMQQFqNgIMIAUgAjYCCCACIAEQ6QEgBUEIahAYDQEgBygCACICLQAIQQRHDQIgAEF8aiEAQQAhAyACQShqIAJBMGoQkgNFDQALCwJAIApCAFINACAEIAQoAgwiAEF/ajYCDCAAQQFHDQAQ6gIiACAALQAAIgJBASACGzoAACACBEAgBUIANwMIIAAgBUEIahAeCyAAQQRqIAQQwAIgAEEAIAAtAAAiBCAEQQFGIgQbOgAAIAQNACAAEE0LIAVBIGokACADDwtB+JLAAEEPQYiTwAAQswMACwAL+AMBBn8jAEEQayIGJAACQAJAAkACQCAAKAIAIgBBPGooAgBFBEAgAEF/NgI8IAEoAgAiBEE8aigCAA0BIARBfzYCPCAAKAJIQQJ0IQEgACgCQCEFA0AgAUUEQCAAKAJIIQIgAEEANgJIIAAoAkQgACgCQCEFIABCBDcCQCAEQcQAaigCACAEQcgAaiIDKAIAIgFrIAJJBEAgBEFAayABIAIQ3QEgAygCACEBCyAEKAJAIAFBAnRqIAUgAkECdBDwAxogAyABIAJqNgIABEAgBRAmCyAEIAQoAjxBAWo2AjwgACAAKAI8QQFqNgI8IAZBEGokAA8LIAUoAgAhAyAEQQRqIgIgAigCACICQQFqIgc2AgAgByACSQ0DIAMoAjghAiADIAQ2AjggAkUNBCACQX9GDQUgAigCACIDRQ0FIAIgA0EBaiIHNgIAIAcgA0kNAyAGIAI2AgQgBkEEahAYIAIgAigCBEF/aiIDNgIEIANFBEAgAhAmCyAFQQRqIQUgAUF8aiEBIAAgAkYNAAtBnJXAAEHiAEGAlsAAEIcDAAtBsI3AAEEQIAZBCGpBlI7AAEHMlMAAELUCAAtBsI3AAEEQIAZBCGpBlI7AAEHclMAAELUCAAsAC0HYjcAAQStB7JTAABCHAwALQfyUwABBDUGMlcAAENgDAAvtAwIEfwF+IwBBEGsiBiQAAkACQAJAIAEoAgAiASgCCEUEQCABQX82AgggBiACIAMQTyABQQxqIQcCQCAGKAIARQRAIAEoAgwhBAJAIAFBFGooAgAiBUUNACAERQ0AIAQgBWpBf2otAABBCkcNAEEAIQUgAUEAOgAYIAFBFGpBADYCAAsgAUEQaigCACAFayADSw0BIAAgByACIAMQswIMBQsgBigCBEEBaiIFIANLDQIgAUEUaigCACIERQ0DAkACQCABQRBqKAIAIARrIAVLBEAgASgCDCAEaiACIAUQ8AMaIAFBFGogBCAFajYCAAwBCyAGQQhqIAcgAiAFELMCIAYtAAhBBEYNACAGKQMIIginQf8BcUEERw0BCyABQRRqIgQoAgBFDQQgAUEAOgAYIARBADYCAAwECyAAIAg3AgAMBAsgBCAFaiACIAMQ8AMaIABBBDoAACABQRRqIAMgBWo2AgAMAwtBnLPRAEEQIAZBCGpB/LPRAEGovtEAELUCAAtBrLPRAEEjQYy30QAQhwMACyACIAVqIQQgAUEQaigCACADIAVrIgJNBEAgACAHIAQgAhCzAgwBCyABKAIMIAQgAhDwAxogAEEEOgAAIAFBFGogAjYCAAsgASABKAIIQQFqNgIIIAZBEGokAAvaAwEGfyMAQRBrIggkACAAQQRqKAIAIgUgACgCACIHIAGnIglxIgZqKQAAQoCBgoSIkKDAgH+DIgFQBEBBCCEEA0AgBCAGaiEGIARBCGohBCAFIAYgB3EiBmopAABCgIGChIiQoMCAf4MiAVANAAsLIAUgAXqnQQN2IAZqIAdxIgRqLAAAIgZBf0oEfyAFIAUpAwBCgIGChIiQoMCAf4N6p0EDdiIEai0AAAUgBgtBAXEhBgJAIAAoAggNACAGRQ0AIAhBCGogAEEBIAMQECAAQQRqKAIAIgUgACgCACIHIAlxIgNqKQAAQoCBgoSIkKDAgH+DIgFQBEBBCCEEA0AgAyAEaiEDIARBCGohBCAFIAMgB3EiA2opAABCgIGChIiQoMCAf4MiAVANAAsLIAUgAXqnQQN2IANqIAdxIgRqLAAAQX9MDQAgBSkDAEKAgYKEiJCgwIB/g3qnQQN2IQQLIAQgBWogCUEZdiIDOgAAIARBeGogB3EgBWpBCGogAzoAACAAIAAoAgggBms2AgggACAAKAIMQQFqNgIMIAVBACAEa0EYbGpBaGoiAEEQaiACQRBqKQMANwMAIABBCGogAkEIaikDADcDACAAIAIpAwA3AwAgCEEQaiQAC8UDAgR/AX4jAEGAAWsiBCQAAkACQAJAAkAgASgCACIDQRBxRQRAIANBIHENASAAKQMAQQEgARCYASEADAQLIAApAwAhBkGAASEAIARBgAFqIQMCQAJAA0AgAEUEQEEAIQAMAwsgA0F/akEwQdcAIAanIgJBD3EiBUEKSRsgBWo6AAAgBkIQWgRAIANBfmoiA0EwQdcAIAJB/wFxIgJBoAFJGyACQQR2ajoAACAAQX5qIQAgBkKAAlQgBkIIiCEGRQ0BDAILCyAAQX9qIQALIABBgQFPDQILIAFBAUGx8NEAQQIgACAEakGAASAAaxAzIQAMAwsgACkDACEGQYABIQAgBEGAAWohAwJAAkADQCAARQRAQQAhAAwDCyADQX9qQTBBNyAGpyICQQ9xIgVBCkkbIAVqOgAAIAZCEFoEQCADQX5qIgNBMEE3IAJB/wFxIgJBoAFJGyACQQR2ajoAACAAQX5qIQAgBkKAAlQgBkIIiCEGRQ0BDAILCyAAQX9qIQALIABBgQFPDQILIAFBAUGx8NEAQQIgACAEakGAASAAaxAzIQAMAgsgAEGAARDpAwALIABBgAEQ6QMACyAEQYABaiQAIAALkQQCBH8BfiMAQdAAayICJAAgAEEANgIIIABCATcCACACQSBqIAFBIGopAgA3AwAgAkEYaiIDIAFBGGopAgA3AwAgAkEQaiABQRBqKQIANwMAIAJBCGoiBCABQQhqKQIAIgY3AwAgAiABKQIANwMAQQAhASAGp0EERwRAIAQiAUEIaigCACABQQxqLQAAaiABKAIAIgEgAUEDRhshAQsgAigCGEEERwRAIANBCGooAgAgA0EMai0AAGogAygCACIDIANBA0YbIQULIAEgBXIEQCAAQQBBfyABIAVqIgMgAyABSRsQ7wELIAJBMGogAkEkaigCADYCACACIAJBHGopAgA3AyggAigCACEDIAIoAgQhBSACKAIYIQQgAigCCCEBIAIgADYCNAJAIAFBBEYNACACQcQAaiACQRRqKAIANgIAIAIgATYCOCACIAJBDGopAgA3AjwgAiACQTRqNgJMIAJBOGoQ/AEiAUGAgMQARg0AA0AgAkHMAGogARCNASACQThqEPwBIgFBgIDEAEcNAAsLIAMEQCADIAUgAkE0ahBGCwJAIARBBEYNACACQcQAaiACQTBqKAIANgIAIAIgBDYCOCACIAIpAyg3AjwgAiACQTRqNgJMIAJBOGoQ/AEiAUGAgMQARg0AA0AgAkHMAGogARCNASACQThqEPwBIgFBgIDEAEcNAAsLIAJB0ABqJAAL4gIBBX8CQAJAAkACQAJAAkAgByAIVgRAIAcgCH0gCFgNBSAHIAZ9IAZWBEAgByAGQgGGfSAIQgGGWg0CCyAGIAhWBEAgByAGIAh9IgZ9IAZYDQMLDAULDAQLIAMgAksNAgwECyADIAJLDQEgASADaiABIQoCQANAIAMgCUYNASAJQQFqIQkgAyAKaiAKQX9qIg0hCkF/ai0AAEE5Rg0ACyADIA1qIgUgBS0AAEEBajoAACADIAlrQQFqIANPDQEgBUEBakEwIAlBf2oQ8gMaDAELAn9BMSADRQ0AGiABQTE6AABBMCADQQFGDQAaIAFBAWpBMCADQX9qEPIDGkEwCyAEQRB0QYCABGpBEHUiBCAFQRB0QRB1TA0AIAMgAk8NADoAACADQQFqIQMMAAsgAyACTQRADAMLCyADIAIQ6gMACyAAQQA2AgAPCyAAIAM2AgQgACABNgIAIABBCGogBDsBAAvOAwEDfyMAQTBrIgQkACABLQCbAiEFAkACQAJAAkACQAJAAkACQAJAIAFBjAFqLQAADQAgBQ0AIAEtAJwCRQ0BCyAFDQFBAiEFIAIQpgEiBkGAgMQARg0FIAEgBiACEHUiAUGAgMQARg0FDAQLIAQgAiADED1BkI7SACgCAEEDSw0BDAILIAFBADoAmwIgASgCmAEhAQwCCyAEQSRqQQE2AgAgBEIBNwIUIARBqMPAADYCECAEQRw2AiwgBCAEQShqNgIgIAQgBDYCKCAEQRBqQQRBqMTAABD4AQsCQCAEKAIARQRAIAAgASAEKAIEIAIQdSIBQYCAxABHBH8gACABNgIEQQAFQQILNgIAIAQoAgAOAwQBBAELIAAgBCkDADcCACAAQQhqIARBCGopAwA3AgAMAwsgBCgCBCIBQRBJDQIgAUF+cSEAAkACQCABQQFxRQRAIARBDGooAgAiAUEIaiABTw0BDAYLIAAgACgBBCIBQX9qNgEEIAFBAUcNBCAAKAIAIgFBCGogAUkNAQsgABAmDAMLDAMLIAAgATYCBEEAIQULIAAgBTYCAAsgBEEwaiQADwtBsLLRACgCAEG0stEAKAIAQYy+wAAQ2AMAC74CAQJ/AkACQCAAKAIAIgFBEEkNACABQX5xIQICQCABQQFxRQRAIABBCGooAgAiAUEIaiABTw0BDAMLIAIgAigBBCIBQX9qNgEEIAFBAUcNASACKAIAIgFBCGogAUkNAgsgAhAmCwJAIAAoAgwiAUEQSQ0AIAFBfnEhAgJAIAFBAXFFBEAgAEEUaigCACIBQQhqIAFPDQEMAwsgAiACKAEEIgFBf2o2AQQgAUEBRw0BIAIoAgAiAUEIaiABSQ0CCyACECYLAkAgACgCGCIBQRBJDQAgAUF+cSECAkAgAUEBcUUEQCAAQSBqKAIAIgBBCGogAE8NAQwDCyACIAIoAQQiAEF/ajYBBCAAQQFHDQEgAigCACIAQQhqIABJDQILIAIQJgsPC0GwstEAKAIAQbSy0QAoAgBBjL7AABDYAwALrAMCBH8CfkEBIQUCQAJAAkAgACkDACIGIAEpAwAiB1ENAAJ/AkACQAJAIAenIgJBA3FBAWsOAgABAgsgAkEEdkEPcSIDQQhPDQQgAUEBagwCC0G00cIAKAIAIgEgB0IgiKciAksEQEGw0cIAKAIAIAJBA3RqIgEoAgQhAyABKAIADAILIAIgAUHchsAAEMkCAAsgAigCBCEDIAIoAgALIQECfwJAAkACQCAGpyICQQNxQQFrDgIAAQILIAJBBHZBD3EiBEEITw0FIABBAWoMAgtBtNHCACgCACIAIAZCIIinIgJLBEBBsNHCACgCACACQQN0aiIAKAIEIQQgACgCAAwCCyACIABB3IbAABDJAgALIAIoAgQhBCACKAIACyEAQQAhBSADIARHDQBBASEFIANFDQAgA0F/aiEDA0AgAC0AACICQb9/akH/AXFBGklBBXQgAnIiBCABLQAAIgJBv39qQf8BcUEaSUEFdCACciICRiEFIAIgBEcNASADIgJBf2ohAyABQQFqIQEgAEEBaiEAIAINAAsLIAUPCyADQQcQ6gMACyAEQQcQ6gMAC98DAQd/IwBBEGsiBSQAAn9BASABKAIYIgZBJyABQRxqKAIAKAIQIgcRAQANABogBSAAKAIAQYECEIoBIAVBDGotAAAhAyAFQQhqKAIAIQQgBSgCACEBAkACQCAFKAIEIghBgIDEAEcEQANAIAEhAEHcACECQQEhAQJAAkACQAJAIABBAWsOAwEDAAcLIANB/wFxIQBBACEDQQMhAUH9ACECAkACQAJAIABBAWsOBQUEAAECCQtBAiEDQfsAIQIMBAtB9QAhAkEDIQMMAwtBBCEDQdwAIQIMAgtBACEBIAghAgwBC0ECQQEgBBshA0EwQdcAIAggBEECdHZBD3EiAEEKSRsgAGohAiAEQX9qQQAgBBshBAsgBiACIAcRAQBFDQAMAgsACwNAIAEhAEHcACECQQEhAQJAAkAgAEECaw4CAQAECyADQf8BcSEAQQAhA0EDIQFB/QAhAgJAAkACQAJAIABBAWsOBQQDAgEABwtBBCEDQdwAIQIMAwtB9QAhAkEDIQMMAgtBAiEDQfsAIQIMAQtBAkEBIAQbIQNBgIDEACAEQQJ0dkEBcUEwciECIARBf2pBACAEGyEECyAGIAIgBxEBAEUNAAsLQQEMAQsgBkEnIAcRAQALIAVBEGokAAvrAwIFfwF+IwBBIGsiAiQAIAIQABDUAQJAQX8gAEEDbCIAQX9qZ3ZBAWpBASAAQQFLGyIFRQRAQQAhACACQQA2AhggAkLAADcDEEHAACEDDAELAkACQCAFQf///x9xIAVHDQAgBUEGdCIAQQBIDQAgAigCCCEGIAIpAwAhByAAQcAAEMoDIgNFDQEgAkEANgIYIAIgBTYCFCACIAM2AhBBASEEIAUhA0EAIQADQCAAIANGBEAgAkEQaiADEN8BIAIoAhghAAsgAigCECAAQQZ0aiIAQQA2AiAgAEIANwMYIAAgBDYCECAAIAY2AgggACAHNwMAIAIgAigCGEEBaiIANgIYIAQgBUYEQCACKAIQIQQgAigCFCIDIABNBEAgBCEDDAULIANBBnQhAyAAQQZ0IgYEQCAEIANBwAAgBhDFAyIDDQUgBkHAAEH0jtIAKAIAIgBB8AAgABsRAgAAC0HAACEDIAQQJgwEBSAEQQFqIQQgAigCFCEDDAELAAsACxCYAwALIABBwABB9I7SACgCACIAQfAAIAAbEQIAAAtBEEEEEMoDIgQEQCAEIAE2AgwgBCAANgIEIAQgAzYCACAEQR8gBWdrNgIIIAJBIGokACAEDwtBEEEEQfSO0gAoAgAiAEHwACAAGxECAAAL7wMCBn8CfiMAQTBrIgMkACACKAIAIQQgAkEANgIAAkAgBEUNACADQRBqIAIpAgQiCUIgiD4CACADIAQ2AgwgA0EANgIIIANBCGoQGSEKIAmnRQ0AIAQQJgsgAkEQaiIGLQAAIQcgAi0ADSEIIAItAA8hBSADQQhqIgRBADoAJCAEQQA2AhggBEEANgIMIARBADYCACAAQZABaiAGKAIANgIAIABBiAFqIAJBCGopAgA3AgAgACACKQIANwKAASAAIAFB6AAQ8AMiAEEAOgCaAiAAQZkCaiAHOgAAIABBACAFIAVBK0YbOgCYAiAAIAg6AJ0CIABBADsAmwIgAEIANwKUASAAQQA7AZ4CIABBoAFqQgA3AwAgAEEPNgKcASAAQdABakIANwMAIABBDzYCzAEgAEHEAWpCADcCACAAQQ82AsABIABBuAFqQgA3AwAgAEGwAWpCgICAgPABNwMAIABCCDcDqAEgAEH4AWogA0EoaikDADcCACAAQfABaiADQSBqKQMANwIAIABB6AFqIANBGGopAwA3AgAgAEHgAWogA0EQaikDADcCACAAIAMpAwg3AtgBIABBkAJqQgA3AwAgAEGEAmpCADcCACAAQQ82AoACIAAgCjcDaCAAQgA3A3AgAEIBNwN4IANBMGokAAuYAwIDfwF+IwBBIGsiAyQAAkAgACkDACIEUA0AIARCA4NCAFINACAEpyIBIAEoAgwiAUF/ajYCDCABQQFHDQAQ6gIiASABLQAAIgJBASACGzoAACACBEAgA0IANwMIIAEgA0EIahAeCyABQQRqIAAoAgAQwAIgAUEAIAEtAAAiAiACQQFGIgIbOgAAIAINACABEE0LAkAgACkDCCIEQgODQgBSDQAgBKciASABKAIMIgFBf2o2AgwgAUEBRw0AEOoCIgEgAS0AACICQQEgAhs6AAAgAgRAIANCADcDCCABIANBCGoQHgsgAUEEaiAAKAIIEMACIAFBACABLQAAIgIgAkEBRiICGzoAACACDQAgARBNCwJAIAApAxAiBEIDg0IAUg0AIASnIgEgASgCDCIBQX9qNgIMIAFBAUcNABDqAiIBIAEtAAAiAkEBIAIbOgAAIAIEQCADQgA3AwggASADQQhqEB4LIAFBBGogACgCEBDAAiABQQAgAS0AACIAIABBAUYiABs6AAAgAA0AIAEQTQsgA0EgaiQAC4kDAgF/AX4jAEHwAGsiAiQAAn8gAEGOAWotAABFBEAgAkHoAGogAUEoaikDADcDACACQeAAaiABQSBqKQMANwMAIAJB2ABqIAFBGGopAwA3AwAgAkHQAGogAUEQaikDADcDACACQcgAaiABQQhqKQMANwMAIAIgASkDADcDQCACQShqIAAgAkFAayAAKQN4EAMgAi0AKAwBCxCXAyACIAIoAiA2AjAgAiACKQMYNwMoIAJB6ABqIAFBKGopAwA3AwAgAkHgAGogAUEgaikDADcDACACQdgAaiABQRhqKQMANwMAIAJB0ABqIAFBEGopAwA3AwAgAkHIAGogAUEIaikDADcDACACIAEpAwA3A0AgAkE4aiAAIAJBQGsgACkDeBADEJcDIAIpAzghAyAAIAApA3AgAjUCECACKQMIQoCU69wDfnx8NwNwIAIgAzcDKCADpwtB/wFxIgBBAUYEQCACQShqQQRyEBgLIABFBEAgAkHwAGokAA8LQbTGwABB0gBBiMfAABCHAwALzwMBAn8jAEHQAGsiAyQAIAMgATYCBAJAAkAgAC0AnAJFDQAgAEEAOgCcAiABQQpHDQBBgIDEACEEIAIQpgEiAUGAgMQARg0BIAMgATYCBAsCQAJAAkACQAJAAkACQCABQXZqDgQBAgIAAgsgAEEBOgCcAiADQQo2AgQLIAAgACkDeEIBfDcDeEEKIQEgAEGMAWotAABFDQQMAQsgAEGMAWotAABFDQMgAQ0AQQAhAQwBCyABQQlJDQEgAUELRg0BIAFBcmpBEkkNAQsgAUH+/wNxQf7/A0YNACABQYF/akEhSQ0AIAFBsIR8akEfSw0BCyADQTRqQQE2AgAgA0IBNwIkIANB+MXAADYCICADQRo2AhwgAyADQRhqNgIwIAMgA0EEajYCGCADQQhqIANBIGoQYyADQShqIAMpAwg3AwAgA0EwaiADQRBqKAIANgIAIANChoCAgBA3AyAgACADQSBqEHQLQZCO0gAoAgBBA0sEQCADQTRqQQE2AgAgA0IBNwIkIANBkMbAADYCICADQRo2AgwgAyADQQhqNgIwIAMgA0EEajYCCCADQSBqQQRBmMbAABD4AQsgACADKAIEIgQ2ApgBCyADQdAAaiQAIAQLgQMCCn8CfiABIAJBAnRqIQoCQCAEBEAgBEEBaiELIARBAnQhDANAIAAgCUECdGohBgNAIAkhByAGIQIgASAKRg0DIAJBBGohBiAHQQFqIQkgASgCACEIIAFBBGoiDSEBIAhFDQALIAdBKCAHQShJG0FYaiEOIAitIRBCACEPQQAhASAMIQggAyEGAkACQAJAA0AgASAORg0BIAIgDyACNQIAfCAGNQIAIBB+fCIPPgIAIA9CIIghDyACQQRqIQIgAUF/aiEBIAZBBGohBiAIQXxqIggNAAsgBCEBIA+nIgINAQwCCyABQX9zIAlqQShB6IXSABDJAgALIAQgB2oiAUEnTQRAIAAgAUECdGogAjYCACALIQEMAQsgAUEoQeiF0gAQyQIACyABIAdqIgEgBSAFIAFJGyEFIA0hAQwACwALQQAhAgNAIAEgCkYNASACQQFqIQIgASgCACABQQRqIgAhAUUNACACQX9qIgEgBSAFIAFJGyEFIAAhAQwACwALIAULgQQBAX8jAEEwayICJAACQAJAAkACQAJAAkAgAC0AAEEBaw4DAQIDAAsgAiAAQQRqKAIANgIMIAJBEGogAUHAvdEAQQIQrwMgAkEQakHCvdEAQQQgAkEMakHIvdEAEIcBIAJBKDoAH0GOvdEAQQQgAkEfakGUvdEAEIcBQRRBARDKAyIARQ0EIABBEGpBh8nRACgAADYAACAAQQhqQf/I0QApAAA3AAAgAEH3yNEAKQAANwAAIAJClICAgMACNwIkIAIgADYCIEGkvdEAQQcgAkEgakHYvdEAEIcBELcCIQAgAigCJEUNAyACKAIgECYMAwsgAiAALQABOgAQIAJBIGogAUG8vdEAQQQQpAMgAkEgaiACQRBqQZS90QAQoAEQqgIhAAwCCyAAQQRqKAIAIQAgAkEgaiABQYm90QBBBRCvAyACQSBqQY690QBBBCAAQQhqQZS90QAQhwFBpL3RAEEHIABBrL3RABCHARC3AiEADAELIABBBGooAgAhACACQSBqIAFByMTRAEEGEK8DIAIgAEEIajYCECACQSBqQY690QBBBCACQRBqQbjE0QAQhwEaIAIgADYCECACQSBqQc7E0QBBBSACQRBqQdTE0QAQhwEaIAJBIGoQtwIhAAsgAkEwaiQAIAAPC0EUQQFB9I7SACgCACIAQfAAIAAbEQIAAAugAwEGfyMAQUBqIgIkACACIAE3AwggACABQgODUARAIAGnIgMgAygCDEEBajYCDCACKQMIIQELIAEQogFBAUcEQAJ/IAAtAFxFBEBBnKjAACEEQRchBUEADAELIAJBPGpBATYCACACQgE3AiwgAkGUqMAANgIoIAJBFDYCJCACIAJBIGo2AjggAiACQQhqNgIgIAJBEGogAkEoahBjIAIoAhAhBCACKAIUIQUgAigCGCEGQQELIQcgAEEUaigCACIDIABBEGooAgBGBEAgAEEMaiADENkBIAAoAhQhAwsgACgCDCADQQR0aiIDIAQ2AgQgAyAHNgIAIANBDGogBjYCACADQQhqIAU2AgAgACAAKAIUQQFqNgIUIAIpAwghAQsCQCABQgODQgBSDQAgAaciACAAKAIMIgBBf2o2AgwgAEEBRw0AEOoCIgAgAC0AACIDQQEgAxs6AAAgAwRAIAJCADcDKCAAIAJBKGoQHgsgAEEEaiACKAIIEMACIABBACAALQAAIgMgA0EBRiIDGzoAACADDQAgABBNCyACQUBrJAAL3QMBBH8jAEGgBWsiAiQAIAFBCGoiBCgCACEFQdAAQQgQygMiAwRAIANBADYCSCADQgQ3A0AgA0IANwM4IANBADoACCADQoGAgIAQNwMAIAJBvAJqQQA2AgAgAkECOgDAAiACQgQ3ArQCIAIgAzYCsAIgAkHwAmoiA0GAgoDYAjYCDCADQQA2AgAgAkGEA2oiA0GABDsABCADQYACNgAAIAJBCGpBAzYCACACQajNwAA2AgQgAkEANgIAIAIgAhAZNwPYAiACQoKAgIDwADcD0AIgAkIANwPIAiACQQA2AugCIAJCCDcD4AIgAiACQbACaiACQfACaiACQcgCaiACQeACahCJASACQfACaiACQbACEPADGiACQbgCaiAEKAIANgIAIAIgASkCADcDsAIgAkHIAmogAkHwAmogAkGwAmoQDCAAIAUgAigCyAIQ5gEgAkHIAmoQGCACKALMAiEDIAJB1AJqKAIAIgAEQCAAQQR0IQEgAyEAA0ACQCAAKAIARQ0AIABBCGooAgBFDQAgAEEEaigCABAmCyAAQRBqIQAgAUFwaiIBDQALCyACQdACaigCAARAIAMQJgsgAkGgBWokAA8LQdAAQQhB9I7SACgCACIAQfAAIAAbEQIAAAu1AwEDfyMAQTBrIgMkAAJAAkACQCABKAIAKAIAIgEoAgBB7JLSAEcEQCABLQAcIQQgAUEBOgAcIAMgBEEBcSIEOgAIIAQNAiABQQE2AgQgAUHsktIANgIADAELIAEoAgQiBEEBaiIFIARJDQIgASAFNgIECyADIAE2AgQgA0EEOgAMIAMgA0EEajYCCCADQShqIAJBEGopAgA3AwAgA0EgaiACQQhqKQIANwMAIAMgAikCADcDGAJAIANBCGpBkL/RACADQRhqEFAEQCADLQAMQQRGBEAgAEKCgICAwPCXCjcCAAwCCyAAIAMpAgw3AgAMAQsgAEEEOgAAIAMtAAxBA0cNACADQRBqKAIAIgAoAgAgACgCBCgCABEDACAAKAIEIgEoAgQEQCABKAIIGiAAKAIAECYLIAMoAhAQJgsgAygCBCIAIAAoAgRBf2oiATYCBCABRQRAIABBADoAHCAAQQA2AgALIANBMGokAA8LIANBLGpBADYCACADQShqQZyz0QA2AgAgA0IBNwIcIANBhMvRADYCGCADQQhqIANBGGoQzgIAC0GzwdEAQSZBgMLRABDYAwALpgMBBX8jAEHgAGsiAyQAAn8gAS0AXEUEQEHkoMAAIQRBECEFQQAMAQsgAyACNgIkIANBzABqIgRBATYCACADQgE3AjwgA0GojcAANgI4IANBDjYCDCADIANBCGo2AkggAyADQSRqNgIIIANBKGogA0E4ahBjIAMoAighAiADKAIwIQUgA0EENgJQIANBBDYCQCADIAIgBWo2AjwgAyACNgI4IANBGGogA0E4ahBrIAMoAiwEQCACECYLIANBFGpBDTYCACAEQQI2AgAgA0EPNgIMIANCAjcCPCADQdSgwAA2AjggAyABQeIAajYCECADIANBGGo2AgggAyADQQhqNgJIIANBKGogA0E4ahBjIAMoAhwEQCADKAIYECYLIAMoAighBCADKAIsIQUgAygCMCEGQQELIQcgAUEUaigCACIC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NgIMIAFBgBBJDQEgAUGAgARPDQIgAiABQT9xQYABcjoADiACIAFBDHZB4AFyOgAMIAIgAUEGdkE/cUGAAXI6AA1BAwwDCyAAKAIIIgMgAEEEaigCAEYEfyAAIAMQ7gEgACgCCAUgAwsgACgCAGogAToAACAAIAAoAghBAWo2AggMAwsgAiABQT9xQYABcjoADSACIAFBBnZBwAFyOgAMQQIMAQsgAiABQT9xQYABcjoADyACIAFBEnZB8AFyOgAMIAIgAUEGdkE/cUGAAXI6AA4gAiABQQx2QT9xQYABcjoADUEECyEBIABBBGooAgAgAEEIaiIEKAIAIgNrIAFJBEAgACADIAEQ7wEgBCgCACEDCyAAKAIAIANqIAJBDGogARDwAxogBCABIANqNgIACyACQRBqJABBAAuLAwEEfyMAQYABayIDJAAgASgCACIFIAUoAgAiBEEBaiIGNgIAAkAgBiAETwRAIAJBGWotAAAhBCADQQxqIAEpAgQ3AgAgA0HIAGpCADcDACADQUBrQoCAgICAATcDACADQSxqQgA3AgAgA0EkakKAgICAwAA3AgAgA0HQAGpCADcDACADQdgAakEANgIAIANBFGogAUEMaikCADcCACADQeAAaiACQRhqLQAAOgAAIAMgBTYCCCADQgE3AwAgA0IENwM4IAMgBTYCNCADQgE3AhwgAyACKAIUNgJcIANB4QBqIAQ6AAAgA0EAOgBnIANBATsAZSADIAQ6AGQgA0GALjsBYiADQfgAaiACQRBqKAIANgIAIANB8ABqIAJBCGopAgA3AwAgAyACKQIANwNoIAAgAyADQegAahByQYADQQQQygMiAUUNASAAQgA3A6ACIABBrAJqQSA2AgAgAEGoAmogATYCACADQYABaiQADwsAC0GAA0EEQfSO0gAoAgAiAEHwACAAGxECAAAL2gIBA38jAEEQayICJAACQAJ/AkACQCABQYABTwRAIAJBADYCDCABQYAQSQ0BIAFBgIAETw0CIAIgAUE/cUGAAXI6AA4gAiABQQx2QeABcjoADCACIAFBBnZBP3FBgAFyOgANQQMMAwsgACgCCCIDIABBBGooAgBGBH8gACADEO4BIAAoAggFIAMLIAAoAgBqIAE6AAAgACAAKAIIQQFqNgIIDAMLIAIgAUE/cUGAAXI6AA0gAiABQQZ2QcAB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AkEcakHEADYCACACQgM3AiQgAkGU7sAANgIgIAJBxQA2AhQgAiACQRBqNgIwIAIgAkEIajYCGCACIAJBOGo2AhACfwJAIAEgAkEgahDLAg0AAkAgAygCACIAQQ9GBEBB9O3AACEEQQAhAAwBCyAAQQlPBEAgAEF+cSADQQhqKAIAQQAgAEEBcWtxakEIaiEEIANBBGooAgAhAAwBCyADQQRqIQQLIAQgACABEDENACACQTRqQQA2AgAgAkH07cAANgIwIAJCATcCJCACQbDuwAA2AiAgASACQSBqEMsCDAELQQELIAJBQGskAAvIAgIGfwF+IwBBIGsiASQAAkACQAJAAkACQCAAQQxqKAIAIgIEQCACIAJqIgMgAkkNBSABQQQ2AhggASACrUIMfj4CFCABIAAoAgg2AhAgASADrUIMfiIHpyAHQiCIp0VBAnQgAUEQahCPAiABKAIADQEgASgCBCEEIABBDGogAzYCACAAIAQ2AggLIAMgAkEBdEcNAyAAKAIAIgUgACgCBCIETQ0CIAQgAiAFayIGSQ0BIAAoAggiAiADIAZrIgNBDGxqIAIgBUEMbGogBkEMbBDwAxogACADNgIADAILIAFBCGooAgAiAEUNAyABKAIEIABB9I7SACgCACIAQfAAIAAbEQIAAAsgACgCCCIDIAJBDGxqIAMgBEEMbBDwAxogACACIARqNgIECyABQSBqJAAPC0GgptEAQStBrKfRABCHAwALEJgDAAvRAgEDfyMAQUBqIgIkACACAn8CQAJAIAAoAgAiAygCACIAQRBPBEAgAEEBcUUNAiACQbOr0QA2AggMAQsgAkGoq9EANgIIC0EGDAELIAJBrqvRADYCCEEFCzYCDCACQTRqQQI2AgAgAkEcakHgADYCACACQgM3AiQgAkHIq9EANgIgIAJBxQA2AhQgAiACQRBqNgIwIAIgAkEIajYCGCACIAJBOGo2AhACfwJAIAEgAkEgahDLAg0AAkAgAygCACIAQQ9GBEBBqKvRACEEQQAhAAwBCyAAQQlPBEAgAEF+cSADQQhqKAIAQQAgAEEBcWtxakEIaiEEIANBBGooAgAhAAwBCyADQQRqIQQLIAQgACABEDENACACQTRqQQA2AgAgAkGoq9EANgIwIAJCATcCJCACQeSr0QA2AiAgASACQSBqEMsCDAELQQELIAJB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AkEIahDLAgsgAkEwaiQAC64CAgl/AX4jAEHgAGsiASQAIAFBMGoiAkEAOgAkIAJBADYCGCACQQA2AgwgAkEANgIAIAFBKGoiAiAAQfgBaiIDKQIANwMAIAFBIGoiBCAAQfABaiIFKQIANwMAIAFBGGoiBiAAQegBaiIHKQIANwMAIAFBEGoiCCAAQeABaiIJKQIANwMAIAApAtgBIQogACABKQMwNwLYASAJIAFBOGopAwA3AgAgByABQUBrKQMANwIAIAUgAUHIAGopAwA3AgAgAyABQdAAaikDADcCACABIAo3AwggAUHUAGogAikDADcCACABQcwAaiAEKQMANwIAIAFBxABqIAYpAwA3AgAgAUE8aiAIKQMANwIAIAFBADYCMCABIAEpAwg3AjQgACABQTBqEHQgAUHgAGokAAurBQACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIAQQFrDhUBAgMEBQYHCAkKCwwNDg8QERITFBUACyABKAIYIAAoAgQgAEEIaigCACABQRxqKAIAKAIMEQAADwsgAEEEaiABEIUBDwsgASgCGEGU4MAAQRggAUEcaigCACgCDBEAAA8LIAEoAhhB+d/AAEEbIAFBHGooAgAoAgwRAAAPCyABKAIYQd/fwABBGiABQRxqKAIAKAIMEQAADwsgASgCGEHG38AAQRkgAUEcaigCACgCDBEAAA8LIAEoAhhBut/AAEEMIAFBHGooAgAoAgwRAAAPCyABKAIYQaffwABBEyABQRxqKAIAKAIMEQAADwsgASgCGEGU38AAQRMgAUEcaigCACgCDBEAAA8LIAEoAhhBht/AAEEOIAFBHGooAgAoAgwRAAAPCyABKAIYQfjewABBDiABQRxqKAIAKAIMEQAADwsgASgCGEHq3sAAQQ4gAUEcaigCACgCDBEAAA8LIAEoAhhB3N7AAEEOIAFBHGooAgAoAgwRAAAPCyABKAIYQcnewABBEyABQRxqKAIAKAIMEQAADwsgASgCGEGv3sAAQRogAUEcaigCACgCDBEAAA8LIAEoAhhB8d3AAEE+IAFBHGooAgAoAgwRAAAPCyABKAIYQd3dwABBFCABQRxqKAIAKAIMEQAADwsgASgCGEG53cAAQSQgAUEcaigCACgCDBEAAA8LIAEoAhhB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FCACIAAoAgA2AhBBAQVBAAs2AhggAiADQQEgAkEQahCPAiACKAIABEAgAkEIaigCACIARQ0BIAIoAgQgAEH0jtIAKAIAIgBB8AAgABsRAgAACyACKAIEIQEgAEEEaiADNgIAIAAgATYCACACQSBqJAAPCxCYAwALwQEBAn8jAEEgayIDJAACQCABIAJqIgIgAUkNACAAQQRqKAIAIgFBAXQiBCACIAQgAksbIgJBCCACQQhLGyECIAMgAQR/IAMgATYCFCADIAAoAgA2AhBBAQVBAAs2AhggAyACQQEgA0EQahCPAiADKAIABEAgA0EIaigCACIARQ0BIAMoAgQgAEH0jtIAKAIAIgBB8AAgABsRAgAACyADKAIEIQEgAEEEaiACNgIAIAAgATYCACADQSBqJAAPCxCYAwALvwEBAn8jAEEgayIDJAACQCABIAJqIgIgAUkNACAAQQRqKAIAIgFBAXQiBCACIAQgAksbIgJBCCACQQhLGyECIAMgAQR/IAMgATYCFCADIAAoAgA2AhBBAQVBAAs2AhggAyACIANBEGoQjgIgAygCAARAIANBCGooAgAiAEUNASADKAIEIABB9I7SACgCACIAQfAAIAAbEQIAAAsgAygCBCEBIABBBGogAjYCACAAIAE2AgAgA0EgaiQADwsQmAMAC78BAQN/IwBBIGsiAiQAAkAgAUEBaiIDIAFJDQAgAEEEaigCACIBQQF0IgQgAyAEIANLGyIDQQggA0EISxshAyACIAEEfyACIAE2AhQgAiAAKAIANgIQQQEFQQALNgIYIAIgAyACQRBqEI4CIAIoAgAEQCACQQhqKAIAIgBFDQEgAigCBCAAQfSO0gAoAgAiAEHwACAAGxECAAALIAIoAgQhASAAQQRqIAM2AgAgACABNgIAIAJBIGokAA8LEJgDAAvaAQEBfyMAQTBrIgMkACADQStqIAJBCGooAAA2AAAgAyACKQAANwAjQdAAQQgQygMiAkUEQEHQAEEIQfSO0gAoAgAiAEHwACAAGxECAAALIAJBAzoACCACIAMpACA3AAkgAkEANgJIIAJCBDcDQCACQgA3AzggAkKBgICAEDcDACACQRBqIANBJ2opAAA3AAAgAyABQQAQTiADQRhqIANBCGooAgA2AgAgAyADKQMANwMQIAMgAjYCJCADQQA2AiAgA0EQaiADQSBqEKsBIABBADoAACADQTBqJAAL6gECB38BfiMAQRBrIgIkACAAKAI4QXxqIQQgAEFAaygCAEECdCEAAkACQANAAkAgAEUNACAAIARqIgMoAgAiASABKAIAIgVBAWoiBjYCACAGIAVJDQIgAiABNgIMIAFCgoCAgPCJARDpASACQQxqEBgEQEEBIQcMAQsgAygCACIBLQAIQQRHDQMgAEF8aiEAIAFBMGohAyABQShqKQMAQoKAgIDwAFEEfyADKQMAIghCgoCAgPDZAFIgCEKCgICAwO4AUnEFQQELRQ0BCwsgAkEQaiQAIAcPCwALQfiSwABBD0GIk8AAELMDAAu8AQEHfyMAQRBrIgIkACAAKAI4QXxqIQQgAEFAaygCAEECdCEAAkACQANAAkAgAEUNACAAIARqIgUoAgAiASABKAIAIgZBAWoiBzYCACAHIAZJDQIgAiABNgIMIAFCgoCAgKDYABDpASACQQxqEBgEQEEBIQMMAQsgBSgCACIBLQAIQQRHDQMgAEF8aiEAIAFBKGogAUEwahC8AUUNAQsLIAJBEGokACADDwsAC0H4ksAAQQ9BiJPAABCzAwALngEBA38jAEEgayICJAACQCAALQAUIAEtABRHDQAgACkDACABKQMAUg0AIAIgAEEIahBfIAJBEGogAUEIahBfIAIoAgAiACACKAIIIgEQCyACKAIQIgMgAigCGCIEEAsgACABIAMgBBCBASEDIAJBEGoQTCACKAIUBEAgAigCEBAmCyACEEwgAigCBEUNACACKAIAECYLIAJBIGokACADC6sBAQN/AkAgAkEPTQRAIAAhAwwBCyAAQQAgAGtBA3EiBGohBSAEBEAgACEDA0AgAyABOgAAIANBAWoiAyAFSQ0ACwsgBSACIARrIgJBfHEiBGohAyAEQQFOBEAgAUH/AXFBgYKECGwhBANAIAUgBDYCACAFQQRqIgUgA0kNAAsLIAJBA3EhAgsgAgRAIAIgA2ohAgNAIAMgAToAACADQQFqIgMgAkkNAAsLIAALzwEBAX8jAEEQayIDJAACQCABQUBrKAIABEAgASgCOCADQQtqIAJBCGooAAA2AAAgAyACKQAANwADQdAAQQgQygMiAkUNASACQQM6AAggAiADKQAANwAJIAJBADYCSCACQgQ3A0AgAkIANwM4IAJCgYCAgBA3AwAg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AnQQ8wMgAEEIaiADQQFqNgIAIAQgAjYCAA8LIAEgAxDEAgALawEBfyMAQTBrIgMkACADIAFBABBOIANBGGogA0EIaigCADYCACADIAMpAwA3AxAgA0EsaiACQQhqKAIANgIAIANBATYCICADIAIpAgA3AiQgA0EQaiADQSBqEKsBIABBADoAACADQTBqJAALdwEBfyMAQRBrIgIkAAJAIAAoAgBFBEAgAiABQbSSwQBBBxCkAyACIABBBGo2AgwgAiACQQxqQbySwQAQoAEaDAELIAIgAUGYksEAQQoQpAMgAiAAQQRqNgIMIAIgAkEMakGkksEAEKABGgsgAhCqAiACQRBqJAALigEBAn8jAEEQayICJAAgACgCACIAKAIIIQMgACgCACEAIAIgARCwAyADBEAgA0EobCEBA0AgAiAANgIMIAIgAkEMakGA7MAAENkDIABBKGohACABQVhqIgENAAsLIAItAAQEf0EBBSACKAIAIgAoAhhBsPDRAEEBIAAoAhwoAgwRAAALIAJBEGokAAtVAQF/IAAgAEEIaiIAQQdqQXhxIABrIgJqIQBBvJLSACABIAJrIgE2AgBBxJLSACAANgIAIAAgAUEBcjYCBCAAIAFqQSg2AgRB4JLSAEGAgIABNgIAC3EBBH8jAEEgayICJABBASEDAkAgACABEJ4BDQAgAUEcaigCACEEIAEoAhggAkEcakEANgIAIAJBlNbRADYCGCACQgE3AgwgAkGI7dEANgIIIAQgAkEIahBQDQAgAEEEaiABEJ4BIQMLIAJBIGokACADC3YCAX8BfiMAQSBrIgQkACACKQMAIQUgBEEYaiACQRBqKAIANgIAIAQgAikCCDcDECAEIAFBAEKCgICA8AAgBSAEQRBqECA2AgwgBEEMahAYIAAgAzoAASAAQQc6AAAgASABLQBiOgBjIAFBBzoAYiAEQSBqJAALawEBfwJAIAAoAgAgASgCCEH/H3FBAnRqIgAoAgBFDQADQCABIAAoAgAiAkcEQCACQRBqIQAgAigCEA0BDAILCyABKAIQIQIgAUEANgIQIAAoAgAhASAAIAI2AgAgAUUNACABEJsDIAEQJgsLhgEBAn8jAEEQayICJAAgACgCACIAQQhqKAIAIQMgACgCACEAIAIgARCwAyADBEADQCACIAA2AgwgAiACQQxqQeDS0QAQ2QMgAEEBaiEAIANBf2oiAw0ACwsgAi0ABAR/QQEFIAIoAgAiACgCGEGw8NEAQQEgACgCHCgCDBEAAAsgAkEQaiQAC10BAX8jAEEwayICJAAgAiAAQQAQTiACQRhqIAJBCGooAgA2AgAgAiACKQMANwMQIAJBKGogAUEIaikCADcDACACIAEpAgA3AyAgAkEQaiACQSBqEKsBIAJBMGokAAtjAQJ/IAEgASgCACICQQFqIgM2AgAgAyACTwRAIABBQGsoAgAiAiAAQTxqKAIARgRAIABBOGogAhDaASAAKAJAIQILIAAoAjggAkECdGogATYCACAAIAAoAkBBAWo2AkAPCwALcAEBfyMAQTBrIgIkACACIAE2AgQgAiAANgIAIAJBHGpBAjYCACACQSxqQS82AgAgAkIDNwIMIAJBhNXRADYCCCACQS82AiQgAiACQSBqNgIYIAIgAkEEajYCKCACIAI2AiAgAkEIakGc1dEAEJkDAAttAQF/IwBBMGsiAyQAIAMgATYCBCADIAA2AgAgA0EcakECNgIAIANBLGpBLzYCACADQgM3AgwgA0HA1dEANgIIIANBLzYCJCADIANBIGo2AhggAyADQQRqNgIoIAMgAzYCICADQQhqIAIQmQMAC3ABAX8jAEEwayICJAAgAiABNgIEIAIgADYCACACQRxqQQI2AgAgAkEsakEvNgIAIAJCAjcCDCACQaj00QA2AgggAkEvNgIkIAIgAkEgajYCGCACIAJBBGo2AiggAiACNgIgIAJBCGpBuPTRABCZAwALcAEBfyMAQTBrIgIkACACIAE2AgQgAiAANgIAIAJBHGpBAjYCACACQSxqQS82AgAgAkICNwIMIAJB5PPRADYCCCACQS82AiQgAiACQSBqNgIYIAIgAkEEajYCKCACIAI2AiAgAkEIakH089EAEJkDAAtwAQF/IwBBMGsiAiQAIAIgATYCBCACIAA2AgAgAkEcakECNgIAIAJBLGpBLzYCACACQgI3AgwgAkGU89EANgIIIAJBLzYCJCACIAJBIGo2AhggAiACQQRqNgIoIAIgAjYCICACQQhqQcTz0QAQmQMAC20BAX8jAEEwayIDJAAgAyABNgIEIAMgADYCACADQRxqQQI2AgAgA0EsakEvNgIAIANCAjcCDCADQdzt0QA2AgggA0EvNgIkIAMgA0EgajYCGCADIAM2AiggAyADQQRqNgIgIANBCGogAhCZAwALVgECfyMAQSBrIgIkACABQRxqKAIAIQMgASgCGCACQRhqIABBEGopAgA3AwAgAkEQaiAAQQhqKQIANwMAIAIgACkCADcDCCADIAJBCGoQUCACQSBqJAALVgECfyMAQSBrIgIkACAAQRxqKAIAIQMgACgCGCACQRhqIAFBEGopAgA3AwAgAkEQaiABQQhqKQIANwMAIAIgASkCADcDCCADIAJBCGoQUCACQSBqJAALXwEBfyAAKAIAIgIoAgAiAEEPRgRAQfjUwABBACABEOwDDwsgAEEJTwRAIABBfnEgAkEIaigCAEEAIABBAXFrcWpBCGogAkEEaigCACABEOwDDwsgAkEEaiAAIAEQ7AMLZwEBfyMAQSBrIgIkACACQdTWwAA2AgQgAiAANgIAIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBpNfAACACQQRqQaTXwAAgAkEIakHY1sAAEIMBAAtnAQF/IwBBIGsiAiQAIAJB3rbRADYCBCACIAA2AgAgAkEYaiABQRBqKQIANwMAIAJBEGogAUEIaikCADcDACACIAEpAgA3AwggAkHItNEAIAJBBGpByLTRACACQQhqQcTL0QAQgwEAC2QBAX8jAEEgayIDJAAgA0GEwdEANgIEIAMgADYCACADQRhqIAFBEGopAgA3AwAgA0EQaiABQQhqKQIANwMAIAMgASkCADcDCCADQdi00QAgA0EEakHYtNEAIANBCGogAhCDAQALZAEBfyMAQSBrIgMkACADIAE2AgQgAyAANgIAIANBGGogAkEQaikCADcDACADQRBqIAJBCGopAgA3AwAgAyACKQIANwMIIANBsO7RACADQQRqQbDu0QAgA0EIakHk1tEAEIMBAAtZAQF/IwBBIGsiAiQAIAIgACgCADYCBCACQRhqIAFBEGopAgA3AwAgAkEQaiABQQhqKQIANwMAIAIgASkCADcDCCACQQRqQezKwAAgAkEIahBQIAJBIGokAAtZAQF/IwBBIGsiAiQAIAIgACgCADYCBCACQRhqIAFBEGopAgA3AwAgAkEQaiABQQhqKQIANwMAIAIgASkCADcDCCACQQRqQejgwAAgAkEIahBQIAJBIGokAAt/ACAAKAIAIgEoAgAhACABQQA2AgACQCAABEBBgAhBARDKAyIBRQ0BIABBADoAHCAAQQA6ABggAEKACDcCECAAIAE2AgwgAEEANgIIIABCADcCAA8LQc+z0QBBK0GAwNEAEIcDAAtBgAhBAUH0jtIAKAIAIgBB8AAgABsRAgAAC1kBAX8jAEEgayICJAAgAiAAKAIANgIEIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpBhLPRACACQQhqEFAgAkEgaiQAC1kBAX8jAEEgayICJAAgAiAAKAIANgIEIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpB7LLRACACQQhqEFAgAkEgaiQAC1kBAX8jAEEgayICJAAgAiAAKAIANgIEIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpB1LLRACACQQhqEFAgAkEgaiQAC2gAIwBBMGsiASQAQYiO0gAtAAAEQCABQRxqQQE2AgAgAUICNwIMIAFB8MLRADYCCCABQS82AiQgASAANgIsIAEgAUEgajYCGCABIAFBLGo2AiAgAUEIakGYw9EAEJkDAAsgAUEwaiQAC1kBAX8jAEEgayICJAAgAiAAKAIANgIEIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpByNLRACACQQhqEFAgAkEgaiQAC1kBAX8jAEEgayICJAAgAiAAKAIANgIEIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpB/PHRACACQQhqEFAgAkEgaiQAC2UBAn8gAEFAaygCACIBRQRAQQAPCyAAKAI4IAFBAnRqQXxqIgIgAEHYAGogAiAAKAJYGyABQQFHGygCACIALQAIQQRGBEAgACkDKEKCgICA8ABSDwtB+JLAAEEPQYiTwAAQswMAC1YBAX8jAEEgayICJAAgAiAANgIEIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpB7MrAACACQQhqEFAgAkEgaiQAC1YBAX8jAEEgayICJAAgAiAANgIEIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpB6ODAACACQQhqEFAgAkEgaiQAC1YBAX8jAEEgayICJAAgAiAANgIEIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpB1LLRACACQQhqEFAgAkEgaiQAC1YBAX8jAEEgayICJAAgAiAANgIEIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpBhLPRACACQQhqEFAgAkEgaiQAC1YBAX8jAEEgayICJAAgAiAANgIEIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpB/PHRACACQQhqEFAgAkEgaiQAC2oBBH8jAEEQayIAJABB5I3SACgCACEBQeCN0gAoAgBBjI7SACgCACEDIABBCGpBFzYCACAAQfSewAA2AgQgAEEENgIAQciOwQAgA0ECRiICGyAAIAFB1I7BACACGygCEBEBACAAQRBqJAALUwEDfyAAQQhqIgMoAgAiAiABSwRAIAAoAgAgAUECdGoiACgCACAAIABBBGogAiABQX9zakECdBDzAyADIAJBf2o2AgAPCyABIAJBtKjAABDFAgALXQEBfyAAQQxqKAIAIgIgAEEIaigCAEYEQCAAQQRqIAIQ2QEgACgCDCECCyAAKAIEIAJBBHRqIgIgASkCADcCACACQQhqIAFBCGopAgA3AgAgACAAKAIMQQFqNgIMC4MBAQF+AkACQCAAKQMAQoKAgIDwAFINAEEBIQAgASkDACICQoGAgIDAzwBXBEAgAkKCgICAsBVRDQIgAkKCgICA0ChRDQIgAkKCgICAkClSDQEMAgsgAkKCgICAwM8AUQ0BIAJCgoCAgICEAVENASACQoKAgICAhwFRDQELQQAhAAsgAAtmAQF/IwBBEGsiAiQAIAIgAUGgqdEAQQkQrwMgAiAANgIMIAJBqanRAEEEIAJBDGpBsKnRABCHARogAiAAQRhqNgIMIAJBwKnRAEEFIAJBDGpByKnRABCHARogAhC3AiACQRBqJAALZgEBfyMAQRBrIgIkACACIAFBhNbRAEENEK8DIAIgADYCDCACQejV0QBBBSACQQxqQdjV0QAQhwEaIAIgAEEMajYC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QQAgAUGAgHxxIAJBf0YiARs2AgQgAEEAIAJBEHQgARs2AgALSwIBfwF+AkAgACkDAEKCgICAIFINAAJAIAEpAwAiA0KCgICAgCdRDQAgA0KCgICAoIkBUQ0AIANCgoCAgIDwAFINAQtBASECCyACC0sBAX4CQCAAKQMAQoKAgIDwAFEEQEEBIQAgASkDACICQoKAgIDgB1ENASACQoKAgICAN1ENASACQoKAgICg5gBRDQELQQAhAAsgAAtMAQF+AkAgACkDAEKCgICA8ABRBEBBASEAIAEpAwAiAkKCgICA4AdRDQEgAkKCgICAgNIAUQ0BIAJCgoCAgKDmAFENAQtBACEACyAAC0sBAX4CQCAAKQMAQoKAgIDwAFEEQEEBIQAgASkDACICQoKAgIDQBVENASACQoKAgICAN1ENASACQoKAgIDQ8gBRDQELQQAhAAsgAAtrAQN/IwBBEGsiASQAIAAoAgwiAkUEQEHPs9EAQStBxMPRABCHAwALIAAoAggiA0UEQEHPs9EAQStB1MPRABCHAwALIAEgAjYCCCABIAA2AgQgASADNgIAIAEoAgAgASgCBCABKAIIELACAAs9AQF/An8gAC0AmwJFBEBBgIDEACABEKYBIgJBgIDEAEYNARogACACIAEQdQ8LIABBADoAmwIgACgCmAELC0ABAX8jAEEgayIAJAAgAEEcakEANgIAIABBnLPRADYCGCAAQgE3AgwgAEGwydEANgIIIABBCGpB6MnRABCZAwALQAEBfyMAQSBrIgAkACAAQRxqQQA2AgAgAEHw0tEANgIYIABCATcCDCAAQbDT0QA2AgggAEEIakG409EAEJkDAAs/AQF/IwBBIGsiAiQAIAJBAToAGCACIAE2AhQgAiAANgIQIAJBmO7RADYCDCACQZTW0QA2AgggAkEIahCVAwALQAAgAEEAOwE8IABBADYCGCAAQYCAxAA2AgwgACABNgIIIABBADYCACAAQQA2AjggAEEANgIsIABCgIDEADcCHAspAQF/IAAoAgQEQCAAKAIAECYLIAAoAhAiAQRAIAEQmwMgACgCEBAmCwspAQF/IAAoAgQEQCAAKAIAECYLIAAoAhAiAQRAIAEQnAMgACgCEBAmCwsrAAJAIABBfEsNACAARQRAQQQPCyAAIABBfUlBAnQQygMiAEUNACAADwsACzgBAX8gAEFAaygCACICRQRAQcidwABBEkG4ocAAENgDAAsgACgCOCACQQJ0akF8aigCACABEOkBC0cBAX4gACkCACEBQRRBBBDKAyIARQRAQRRBBEH0jtIAKAIAIgBB8AAgABsRAgAACyAAQgA3AgwgACABNwIEIABBATYCACAACz4AIAAoAgAhACABLQAAQRBxQQR2RQRAIAEtAABBIHFBBXZFBEAgACABENcDDwsgACABEJ4CDwsgACABEJ0CCysAIwBBEGsiACQAIABBCGogAUGowdEAQQsQrwMgAEEIahD9ASAAQRBqJAALMAEBfwJAQYCAAUEEEH8iAEUNACAAQXhqLQAEQQNxRQ0AIABBAEGAgAEQ8gMaCyAAC0MAIAAoAgAhACABLQAAQRBxQQR2RQRAIAEtAABBIHFBBXZFBEAgADEAAEEBIAEQmAEPCyAAIAEQlgIPCyAAIAEQlQILNAAgACABKAIYIAIgAyABQRxqKAIAKAIMEQAAOgAIIAAgATYCACAAIANFOgAJIABBADYCBAtrAAJAAkACQCAAKAIALQAAQQFrDgIBAgALIAEoAhhB8+HAAEEIIAFBHGooAgAoAgwRAAAPCyABKAIYQefhwABBDCABQRxqKAIAKAIMEQAADwsgASgCGEHb4cAAQQwgAUEcaigCACgCDBEAAAtrAAJAAkACQCAAKAIALQAAQQFrDgIBAgALIAEoAhhBrPPAAEEIIAFBHGooAgAoAgwRAAAPCyABKAIYQaLzwABBCiABQRxqKAIAKAIMEQAADwsgASgCGEGV88AAQQ0gAUEcaigCACgCDBEAAAsoACAAIAAoAhAiAEENdCAAcyIAQRF2IABzIgBBBXQgAHMiADYCECAAC2YBAX8gACgCACEBAkAgAC0ABA0AQYSP0gAoAgBB/////wdxRQ0AAn9B+JLSAC0AAARAQfyS0gAoAgBFDAELQfiS0gBBAToAAEH8ktIAQQA2AgBBAQsNACABQQE6AAELIAFBADoAAAsvAQF/IwBBEGsiAyQAIAMgATYCDCADIAA2AgggA0EIakGEiMAAQQAgAkEBEOABAAsyAQF/AkAgAC0AmwJFBEAgARCmASICQYCAxABGDQEgACACIAEQdRoPCyAAQQA6AJsCCws2ACAAQYCwA3NBgIC8f2pBgJC8f09BACAAQYCAxABHG0UEQEHs6sAAQStBmOvAABDYAwALIAALLwEBfyMAQRBrIgMkACADIAE2AgwgAyAANgIIIANBCGpB8LHRAEEAIAJBARDgAQALQAEBfyMAQRBrIgQkACAEIAM2AgwgBCACNgIIIAQgATYCBCAEIAA2AgAgBCgCACAEKAIEIAQoAgggBCgCDBAdAAs3ACAAQQM6ACAgAEKAgICAgAQ3AgAgACABNgIYIABBADYCECAAQQA2AgggAEEcakGo28AANgIACzAAIAEoAhggAiADIAFBHGooAgAoAgwRAAAhAiAAQQA6AAUgACACOgAEIAAgATYCAAs1AQF/IAEoAhhBnvDRAEEBIAFBHGooAgAoAgwRAAAhAiAAQQA6AAUgACACOgAEIAAgATYCAAs4AAJAIAEtAABBEHFBBHZFBEAgAS0AAEEgcUEFdg0BIAAgARCyAw8LIAAgARCdAg8LIAAgARCeAgsiACAAKAIAIgCtIABBf3OsQgF8IABBf0oiABsgACABEJgBCzUBAX8jAEEQayIDJAAgAyACNgIIIAMgATYCBCADIAA2AgAgAygCACADKAIEIAMoAggQqQMACzgBAX8jAEEQayIBJAAgASAANgIIIAFBJjYCBCABQYyw0QA2AgAgASgCACABKAIEIAEoAggQrAMACyABAX8CQCAAKAIEIgFFDQAgAEEIaigCAEUNACABECYLCyYBAX8jAEEQayIDJAAgAyABNgIMIAMgADYCCCADQQhqIAIQiAMACx8AAkAgAUF8TQRAIAAgAUEEIAIQxQMiAA0BCwALIAALQwAgACgCAC0AAEUEQCABKAIYQY3hwABBByABQRxqKAIAKAIMEQAADwsgASgCGEGA4cAAQQ0gAUEcaigCACgCDBEAAAtDACAAKAIALQAARQRAIAEoAhhB3vDAAEEIIAFBHGooAgAoAgwRAAAPCyABKAIYQdjwwABBBiABQRxqKAIAKAIMEQAACxQAIABBBGooAgAEQCAAKAIAECYLC0AAIAAtAABFBEAgASgCGEHIstEAQQsgAUEcaigCACgCDBEAAA8LIAEoAhhBuLLRAEEQIAFBHGooAgAoAgwRAAALHQAgASgCAEUEQAALIABBiNnAADYCBCAAIAE2AgALIAAgACgCIEUEQEGc6sAAQS1BzOrAABDYAwALIABBIGoLIAAgACgCIEUEQEGc6sAAQS1B3OrAABDYAwALIABBIGoLHQAgASgCAEUEQAALIABB/K/RADYCBCAAIAE2AgALHAAgASgCGEGQ7dEAQQsgAUEcaigCACgCDBEAAAscACABKAIYQZvt0QBBDiABQRxqKAIAKAIMEQAACxwAIAEoAhhB5IbSAEEFIAFBHGooAgAoAgwRAAALKgAgASgCGEGU4cAAQZrhwAAgACgCAC0AABtBBiABQRxqKAIAKAIMEQAACxkAIAAoAgAiACgCACABIAAoAgQoAgwRAQALDAAgACABIAIgAxA4CwsAIAEEQCAAECYLCxMAIAAoAgAgAEEIaigCACABEDELFAAgACgCACAAQQhqKAIAIAEQ7AMLFAAgACgCACABIAAoAgQoAgwRAQALCAAgACABEH8LEQAgACgCACAAKAIEIAEQ7AMLEQAgACgCACAAKAIIIAEQ7AMLEAAgACgCACAAKAIIIAEQMQsQACAAKAIAIAAoAgQgARAxCw4AIAAoAgAgARCRAUEACxMAIABB9MPRADYCBCAAIAE2AgALEAAgASAAKAIAIAAoAgQQMAsNACAALQAAIAEtAABGCwsAQaCx0QAQtAMACwsAQeCx0QAQtAMACw4AIAAoAgAgARCTAUEACw4AIAAoAgAaA0AMAAsACw4AIAA1AgBBASABEJgBCwwAIAAgASACELYDAAsLACAAIAEgAhCxAQsNACAAKAIAIAEgAhBACw4AIAApAwBBASABEJgBCwsAIAAjAGokACMACwwAIAAoAgAgARCiAgsMACAAKAIAIAEQ4wELDAAgACgCACABELsCCwwAIAAoAgAgARCvAgsMACAAKAIAIAEQ5AILKQACfyAAKAIALQAARQRAIAFB2PLRAEEFEDAMAQsgAUHU8tEAQQQQMAsLCwAgACgCACABEHALHAAgASgCGEGEstEAQQQgAUEcaigCACgCDBEAAAsLACAAKAIAIAEQYgsMACAAKAIAIAEQrgELDAAgACgCACABEJIBCwwAIAAoAgAgARDhAQsKACAAIAEQyAIACwoAIAAgARDHAgALCgAgACABEMYCAAsKACACIAAgARAwCwwAIAAoAgAgARCeAQsLACAAKAIAIAEQagsMACAAKAIAIAEQmQELCwAgACABIAIQlwELCwAgACABIAIQ/gILCwAgACABIAIQ9gELCgAgACABIAIQQwsIACAAIAEQdwsNAEKL5OeV8riP17h/CwQAQQALDQBC9t+Mj5a6icCTfwsNAEKJ4sS25MTEnNAACwMAAQsDAAELC7DREOU8AEGAgMAAC/gWY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZWFzc2VydGlvbiBmYWlsZWQ6IGlkeCA8IENBUEFDSVRZL3J1c3RjL2UwOTJkMGI2YjQzZjJkZTk2N2FmMDg4Nzg3MzE1MWJiMWMwYjE4ZDMvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbm9kZS5yc2Fzc2VydGlvbiBmYWlsZWQ6IGVkZ2UuaGVpZ2h0ID09IHNlbGYuaGVpZ2h0IC0gMQAASwAQAFsAAACAAgAACQAAAEsAEABbAAAAhAIAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBzcmMubGVuKCkgPT0gZHN0LmxlbigpSwAQAFsAAAC2BgAABQAAAEsAEABbAAAARgQAABYAAABLABAAWwAAAIMEAAAWAAAAYXNzZXJ0aW9uIGZhaWxlZDogZWRnZS5oZWlnaHQgPT0gc2VsZi5ub2RlLmhlaWdodCAtIDEAAABLABAAWwAAAJ8DAAAJAAAAL3J1c3RjL2UwOTJkMGI2YjQzZjJkZTk2N2FmMDg4Nzg3MzE1MWJiMWMwYjE4ZDMvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbmF2aWdhdGUucnMAmAEQAF8AAAA/AgAAVgAAAJgBEABfAAAA/wEAAC8AAAAvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGhmX3NoYXJlZC0wLjguMC9zcmMvbGliLnJzGAIQAFgAAAA5AAAAGgAAAGF0dGVtcHQgdG8gY2FsY3VsYXRlIHRoZSByZW1haW5kZXIgd2l0aCBhIGRpdmlzb3Igb2YgemVybwAAABgCEABYAAAAOgAAAAUAAAAvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvc3RyaW5nX2NhY2hlLTAuOC4yL3NyYy9hdG9tLnJzAMwCEABbAAAAjwAAABsAAABhc3NlcnRpb24gZmFpbGVkOiBtaWQgPD0gc2VsZi5sZW4oKQDMAhAAWwAAAAcBAAAfAAAAzAIQAFsAAAAFAQAALwAAAC9ydXN0Yy9lMDkyZDBiNmI0M2YyZGU5NjdhZjA4ODc4NzMxNTFiYjFjMGIxOGQzL2xpYnJhcnkvYWxsb2Mvc3JjL2NvbGxlY3Rpb25zL3ZlY19kZXF1ZS9yaW5nX3NsaWNlcy5ycwAAfAMQAGYAAAAgAAAADgAAAHwDEABmAAAAIwAAABEAAAABAAAACAAAAAQAAAACAAAAAwAAAGNhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWUvcnVzdGMvZTA5MmQwYjZiNDNmMmRlOTY3YWYwODg3ODczMTUxYmIxYzBiMThkMy9saWJyYXJ5L2FsbG9jL3NyYy9jb2xsZWN0aW9ucy9idHJlZS9uYXZpZ2F0ZS5ycwAAQwQQAF8AAAC4AAAAJwAAAEMEEABfAAAAlAAAACQAAABTb21lAQAAAAQAAAAEAAAABAAAAE5vbmUvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvdGVuZHJpbC0wLjQuMi9zcmMvYnVmMzIucnMA3AQQAFcAAAAdAAAALgAAAAUAAAAMAAAABAAAAAYAAAAHAAAACAAAAGZvcm1hdHRlciBlcnJvcgBcBRAADwAAACgAAAAvcnVzdGMvZTA5MmQwYjZiNDNmMmRlOTY3YWYwODg3ODczMTUxYmIxYzBiMThkMy9saWJyYXJ5L2FsbG9jL3NyYy92ZWMvbW9kLnJzeAUQAEwAAAA8BwAAJAAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy90ZW5kcmlsLTAuNC4yL3NyYy90ZW5kcmlsLnJzAAAA1AUQAFkAAABXAAAANQAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy90ZW5kcmlsLTAuNC4yL3NyYy9idWYzMi5ycwBABhAAVwAAAB0AAAAuAAAAqAYQAAAAAABhbHJlYWR5IGJvcnJvd2VkYWxyZWFkeSBtdXRhYmx5IGJvcnJvd2VkY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZQAJAAAAAAAAAAEAAAAKAAAACQAAAAAAAAABAAAACwAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy90ZW5kcmlsLTAuNC4yL3NyYy9idWYzMi5ycwAkBxAAVwAAAFYAAAA7AAAAJAcQAFcAAAAdAAAALgAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy90ZW5kcmlsLTAuNC4yL3NyYy90ZW5kcmlsLnJzAAAAnAcQAFkAAACuAwAAPQAAAGNoaWxkIHBhc3NlZCB0byBhcHBlbmQgY2Fubm90IGhhdmUgZXhpc3RpbmcgcGFyZW50L2hvbWUvYi1mdXNlL1Byb2plY3RzL2dpdC9kZW5vLWRvbS9odG1sLXBhcnNlci9jb3JlL3NyYy9yY2RvbS5ycwAAOggQAEAAAACSAAAABQAAADoIEABAAAAAlwAAABkAAABkYW5nbGluZyB3ZWFrIHBvaW50ZXIgdG8gcGFyZW50ADoIEABAAAAAnQAAACEAAAA6CBAAQAAAAKEAAAAKAAAAaGF2ZSBwYXJlbnQgYnV0IGNvdWxkbid0IGZpbmQgaW4gcGFyZW50J3MgY2hpbGRyZW4hADoIEABAAAAApwAAABEAAAA6CBAAQAAAAK8AAAAWAAAAOggQAEAAAAC4AAAAGQAAADoIEABAAAAAuAAAACYAAABub3QgYSB0ZW1wbGF0ZSBlbGVtZW50IQA6CBAAQAAAAOEAAAANAAAAbm90IGFuIGVsZW1lbnQhADoIEABAAAAA8AAAABIAAAA6CBAAQAAAABQBAAAuAAAAYXBwZW5kX2JlZm9yZV9zaWJsaW5nIGNhbGxlZCBvbiBub2RlIHdpdGhvdXQgcGFyZW50ADoIEABAAAAAKAEAAA4AAAA6CBAAQAAAADIBAAAwAAAAOggQAEAAAAAzAQAAHQAAADoIEABAAAAARgEAABkAAABub3QgYW4gZWxlbWVudAAAOggQAEAAAABuAQAADQAAADoIEABAAAAAbAEAABMAAAA6CBAAQAAAAIEBAAAqAAAAOggQAEAAAACCAQAANAAAADoIEABAAAAAhwEAACIAAABkYW5nbGluZyB3ZWFrAAAAOggQAEAAAACHAQAANQAAAGFzc2VydGlvbiBmYWlsZWQ6IFJjOjpwdHJfZXEoJm5vZGUsICZwcmV2aW91c19wYXJlbnQudW53cmFwKCkudXBncmFkZSgpLmV4cGVjdChcImRhbmdsaW5nIHdlYWtcIikpAAA6CBAAQAAAAIUBAAANAAAAOggQAEAAAACVAQAADQAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9waGZfc2hhcmVkLTAuOC4wL3NyYy9saWIucnMAQYCXwAALuSJhdHRlbXB0IHRvIGNhbGN1bGF0ZSB0aGUgcmVtYWluZGVyIHdpdGggYSBkaXZpc29yIG9mIHplcm8AAAAgCxAAWAAAADoAAAAFAAAAYXBwbGljYXRpb24veGh0bWwreG1sAAAAL3J1c3RjL2UwOTJkMGI2YjQzZjJkZTk2N2FmMDg4Nzg3MzE1MWJiMWMwYjE4ZDMvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvdmVjX2RlcXVlL21vZC5yc2Fzc2VydGlvbiBmYWlsZWQ6IHNlbGYuY2FwKCkgPT0gb2xkX2NhcCAqIDIAAADkCxAAXgAAAM8IAAAJAAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3RlbmRyaWwtMC40LjIvc3JjL2J1ZjMyLnJzAIAMEABXAAAAHQAAAC4AAABCYWQgRE9DVFlQRTogAAAA6AwQAA0AAABCYWQgRE9DVFlQRURPQ1RZUEUgaW4gaW5zZXJ0aW9uIG1vZGUgAAAACw0QABoAAABET0NUWVBFIGluIGJvZHkAY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZWNhbGxlZCBgUmVzdWx0Ojp1bndyYXAoKWAgb24gYW4gYEVycmAgdmFsdWUAABUAAAABAAAAAQAAABYAAABzdGF0aWNpbmxpbmVkeW5hbWljQXRvbSgnJyB0eXBlPSkAAAC7DRAABgAAAMENEAAHAAAAyA0QAAEAAAAvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvdGVuZHJpbC0wLjQuMi9zcmMvdGVuZHJpbC5ycwAAAOQNEABZAAAAVwAAADUAAAAvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvdGVuZHJpbC0wLjQuMi9zcmMvYnVmMzIucnMAUA4QAFcAAAAdAAAALgAAAOQNEABZAAAAXQMAAB8AAABubyBjdXJyZW50IGVsZW1lbnQvaG9tZS9iLWZ1c2UvUHJvamVjdHMvZ2l0L2Rlbm8tZG9tL2h0bWwtcGFyc2VyL3dhc20vdGFyZ2V0L3dhc20zMi11bmtub3duLXVua25vd24vcmVsZWFzZS9idWlsZC9odG1sNWV2ZXItZGYzY2NlNDBhMzlhZWIwNy9vdXQvcnVsZXMucnMAAADaDhAAhwAAAAgAAAAYAAAAaHRtbDVldmVyOjp0cmVlX2J1aWxkZXJwcm9jZXNzaW5nICBpbiBpbnNlcnRpb24gbW9kZSAAAACLDxAACwAAAJYPEAATAAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL2h0bWw1ZXZlci0wLjI1LjEvc3JjL3RyZWVfYnVpbGRlci9tb2QucnMAAAB0DxAAFwAAAHQPEAAXAAAAvA8QAGUAAAA4AQAAVW5leHBlY3RlZCB0b2tlbiAAAABAEBAAEQAAAJYPEAATAAAAVW5leHBlY3RlZCB0b2tlbmFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaHRtbF9lbGVtX25hbWVkKCZub2RlLCBuYW1lKQC8DxAAZQAAAFsCAAAJAAAAvA8QAGUAAACJAgAAIAAAANoOEACHAAAAWgYAACwAAABpbXBvc3NpYmxlIGNhc2UgaW4gZm9yZWlnbiBjb250ZW50AADaDhAAhwAAAGMGAAAQAAAAVW5leHBlY3RlZCBvcGVuIHRhZyAgYXQgZW5kIG9mIGJvZHkADBEQABQAAAAgERAADwAAAFVuZXhwZWN0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IGluIHNjb3BlPC9ib2R5PiB3aXRoIG5vIDxib2R5PiBpbiBzY29wZWltcG9zc2libGUgY2FzZSBpbiBJbkJvZHkgbW9kZQAA2g4QAIcAAAAIAwAAEAAAAE5lc3RlZCA8bm9icj5uZXN0ZWQgYnV0dG9uc25lc3RlZCBmb3Jtc25lc3RlZCBoZWFkaW5nIHRhZ3NubyBoZWFkIGVsZW1lbnQAAADaDhAAhwAAANYAAABJAAAAvA8QAGUAAAC6AwAACgAAALwPEABlAAAAHQIAAAYAAAAvcnVzdGMvZTA5MmQwYjZiNDNmMmRlOTY3YWYwODg3ODczMTUxYmIxYzBiMThkMy9saWJyYXJ5L2NvcmUvc3JjL2NoYXIvbWV0aG9kcy5yc3RvX2RpZ2l0OiByYWRpeCBpcyB0b28gaGlnaCAobWF4aW11bSAzNil0GRAAKAAAACQZEABQAAAAXQEAAA0AAABjYWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3RlbmRyaWwtMC40LjIvc3JjL2J1ZjMyLnJzAADfGRAAVwAAAFYAAAA7AAAA3xkQAFcAAAAdAAAALgAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy90ZW5kcmlsLTAuNC4yL3NyYy90ZW5kcmlsLnJzAAAAWBoQAFkAAACuAwAAPQAAAEVPRiBpbiBudW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2VFT0YgYWZ0ZXIgJyMnIGluIGNoYXJhY3RlciByZWZlcmVuY2Vhc3NlcnRpb24gZmFpbGVkOiBuYW1lX2xlbiA+IDAvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvaHRtbDVldmVyLTAuMjUuMS9zcmMvdG9rZW5pemVyL2NoYXJfcmVmL21vZC5ycwAoGxAAawAAAF0BAAARAAAAKBsQAGsAAABeAQAAJAAAACgbEABrAAAAXgEAAFMAAAAoGxAAawAAAGUBAAAaAAAAKBsQAGsAAABlAQAARQAAAENoYXJhY3RlciByZWZlcmVuY2UgZG9lcyBub3QgZW5kIHdpdGggc2VtaWNvbG9uRXF1YWxzIHNpZ24gYWZ0ZXIgY2hhcmFjdGVyIHJlZmVyZW5jZSBpbiBhdHRyaWJ1dGUAAAAoGxAAawAAAIcBAAA+AAAAKBsQAGsAAACJAQAALgAAACgbEABrAAAAiQEAAEUAAABJbnZhbGlkIG51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZSB2YWx1ZSAweHgcEAAsAAAAAAAAACAAAAAIAAAAAgBBxLnAAAu5BwYAAAADAAAASW52YWxpZCBudW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2VJbnZhbGlkIGNoYXJhY3RlciByZWZlcmVuY2UgJu8cEAAdAAAASW52YWxpZCBjaGFyYWN0ZXIgcmVmZXJlbmNlTnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlIHdpdGhvdXQgZGlnaXRzU2VtaWNvbG9uIG1pc3NpbmcgYWZ0ZXIgbnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlY2hhciByZWYgdG9rZW5pemVyIHN0ZXBwaW5nIGluIHN0YXRlIAAAAIwdEAAlAAAAaHRtbDVldmVyOjp0b2tlbml6ZXI6OmNoYXJfcmVmAAC8HRAAHgAAALwdEAAeAAAAKBsQAGsAAAB/AAAAL3J1c3RjL2UwOTJkMGI2YjQzZjJkZTk2N2FmMDg4Nzg3MzE1MWJiMWMwYjE4ZDMvbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAAPgdEABKAAAAZwQAABUAAAD4HRAASgAAAHUEAAAeAAAA+B0QAEoAAAB+BAAAGAAAAPgdEABKAAAAfwQAABkAAAD4HRAASgAAAIIEAAAaAAAA+B0QAEoAAACJBAAAEgAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy90ZW5kcmlsLTAuNC4yL3NyYy9idWYzMi5ycwCkHhAAVwAAAFYAAAA7AAAApB4QAFcAAAAdAAAALgAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy90ZW5kcmlsLTAuNC4yL3NyYy90ZW5kcmlsLnJzAAAAHB8QAFkAAAAAAwAAPwAAABwfEABZAAAArgMAAD0AAAAvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvc3RyaW5nX2NhY2hlLTAuOC4yL3NyYy9hdG9tLnJzAJgfEABbAAAABwEAAB8AAACYHxAAWwAAAAUBAAAvAAAAClRva2VuaXplciBwcm9maWxlLCBpbiBuYW5vc2Vjb25kcwoAFCAQACMAAAAKICAgICAgICAgdG90YWwgaW4gdG9rZW4gc2luawoAAEAgEAABAAAAQSAQAB0AAAAAAAAAIAAAAAAAAAACAEGIwcAAC2kMAAAAAwAAACAgICAgICAgIHRvdGFsIGluIHRva2VuaXplcgpAIBAAAQAAAJAgEAAcAAAAICAlICAAAACkHhAAAAAAALwgEAACAAAAviAQAAMAAABAIBAAAQAAAAAAAAAgAAAAAAAAAAIAQfzBwAALDQwAAAADAAAAAQAAACAAQZTCwAALtxcBAAAAAAAAAAQAAAADAAAAAgAAACAAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAMAAABTYXcgRU9GIGluIHN0YXRlIAAAAEQhEAARAAAAVW5leHBlY3RlZCBFT0ZTYXcgIGluIHN0YXRlIG4hEAAEAAAAciEQAAoAAABCYWQgY2hhcmFjdGVyZ290IGNoYXJhY3RlcnMgmSEQAA8AAABodG1sNWV2ZXI6OnRva2VuaXplci9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9odG1sNWV2ZXItMC4yNS4xL3NyYy90b2tlbml6ZXIvbW9kLnJzAACwIRAAFAAAALAhEAAUAAAAxCEQAGIAAAAzAQAAQXR0cmlidXRlcyBvbiBhbiBlbmQgdGFnU2VsZi1jbG9zaW5nIGVuZCB0YWdEdXBsaWNhdGUgYXR0cmlidXRlAMQhEABiAAAAYAUAABUAAABzdGF0ZSAgc2hvdWxkIG5vdCBiZSByZWFjaGFibGUgaW4gcHJvY2Vzc19jaGFyX3JlZgAAlCIQAAYAAACaIhAALAAAAMQhEABiAAAAZgUAABYAAABCYWQgY2hhcmFjdGVyIAAA6CIQAA4AAABnb3QgY2hhcmFjdGVyIAAAACMQAA4AAACwIRAAFAAAALAhEAAUAAAAxCEQAGIAAAAXAQAAYXNzZXJ0aW9uIGZhaWxlZDogbWF0Y2hlcyEoc2VsZi5wcm9jZXNzX3Rva2VuKHRva2VuKSwgVG9rZW5TaW5rUmVzdWx0IDo6IENvbnRpbnVlKQAAxCEQAGIAAADyAAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IG1hdGNoZXMhKHNlbGYucnVuKCYgbXV0IGlucHV0KSwgVG9rZW5pemVyUmVzdWx0IDo6IERvbmUpAADEIRAAYgAAAH4FAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogaW5wdXQuaXNfZW1wdHkoKQAAxCEQAGIAAAB/BQAACQAAAHByb2Nlc3NpbmcgaW4gc3RhdGUgKCQQABQAAACwIRAAFAAAALAhEAAUAAAAxCEQAGIAAACzAgAAcHVibGljc3lzdGVtLS0hLS0h77+9LS0tLe+/vS3vv71kb2N0eXBlW0NEQVRBW3NjcmlwdHByb2Nlc3NpbmcgRU9GIGluIHN0YXRlIJQkEAAYAAAAsCEQABQAAACwIRAAFAAAAMQhEABiAAAApAUAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaW5wdXRfYnVmZmVyLmlzX2VtcHR5KCkvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvaHRtbDVldmVyLTAuMjUuMS9zcmMvZHJpdmVyLnJzAAAA/iQQAFsAAAB6AAAACQAAACEAAAAEAAAABAAAACIAAAAjAAAAJAAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy90ZW5kcmlsLTAuNC4yL3NyYy9idWYzMi5ycwCEJRAAVwAAAB0AAAAuAAAAAAAAAP//////////YWxyZWFkeSBtdXRhYmx5IGJvcnJvd2VkY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZQAlAAAAAAAAAAEAAAAKAAAAJgAAABQAAAAEAAAAJwAAAGNhbGxlZCBgUmVzdWx0Ojp1bndyYXAoKWAgb24gYW4gYEVycmAgdmFsdWUAKAAAAAgAAAAEAAAAKQAAACoAAAAEAAAABAAAACsAAABkaXZzZXJpYWxpemVfbm9kZSBmYWlsZWQgdG8gcHJvZHVjZSB2YWxpZCBVVEYtOC9ob21lL2ItZnVzZS9Qcm9qZWN0cy9naXQvZGVuby1kb20vaHRtbC1wYXJzZXIvY29yZS9zcmMvbGliLnJzAAAA1yYQAD4AAAA9AAAAHAAAAFsxLAAoJxAAAwAAANcmEAA+AAAAcQAAACYAAADXJhAAPgAAAHIAAAA7AAAALAAAAFQnEAABAAAA1yYQAD4AAABzAAAAJAAAANcmEAA+AAAAewAAAC0AAADXJhAAPgAAAJMAAAAfAAAAXQAAAJAnEAABAAAA1yYQAD4AAACXAAAAJAAAAFs4LACsJxAAAwAAANcmEAA+AAAAoQAAACYAAADXJhAAPgAAAKIAAABBAAAA1yYQAD4AAACjAAAAJAAAAFszLADoJxAAAwAAANcmEAA+AAAAmwAAACYAAADXJhAAPgAAAJwAAAA3AAAA1yYQAD4AAACcAAAASgAAANcmEAA+AAAAnQAAACQAAABbMTAsNCgQAAQAAADXJhAAPgAAAKsAAAAnAAAA1yYQAD4AAACsAAAAPQAAANcmEAA+AAAArQAAACQAAADXJhAAPgAAAK4AAABCAAAA1yYQAD4AAACvAAAAJAAAANcmEAA+AAAAsAAAAEIAAADXJhAAPgAAALEAAAAkAAAA1yYQAD4AAABJAAAAKQAAAFs5LCIjZG9jdW1lbnQiLFtdAAAAwCgQABEAAADXJhAAPgAAAEsAAAA2AAAA1yYQAD4AAABNAAAAKAAAANcmEAA+AAAAZQAAAB8AAABbAAAADCkQAAEAAADXJhAAPgAAALkAAAAcAAAA1yYQAD4AAAC6AAAAFAAAANcmEAA+AAAAvgAAACAAAADXJhAAPgAAAL8AAABEAAAA1yYQAD4AAADAAAAAIAAAANcmEAA+AAAAwQAAAD8AAABdLAAAeCkQAAIAAADXJhAAPgAAAMQAAAAlAAAA1yYQAD4AAADGAAAAJAAAANcmEAA+AAAAygAAABwAAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3NlcmRlX2pzb24tMS4wLjY4L3NyYy9zZXIucnMAAADcKRAAWQAAADIGAAASAAAA3CkQAFkAAAAqCAAAOwAAANwpEABZAAAANAgAADcAAABcdFxyXG5cZlxiXFxcIgAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3RlbmRyaWwtMC40LjIvc3JjL2J1ZjMyLnJzAHgqEABXAAAAHQAAAC4AAAAvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvbWFya3VwNWV2ZXItMC4xMC4xL3V0aWwvYnVmZmVyX3F1ZXVlLnJz4CoQAGQAAADVAAAAFQAAAAAAAADgKhAAZAAAAOYAAAAVAAAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZQAsAAAAAQAAAAEAAAAWAAAALAAAAAQAAAAEAAAALQAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy90ZW5kcmlsLTAuNC4yL3NyYy9idWYzMi5ycwC0KxAAVwAAAB0AAAAuAAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3RlbmRyaWwtMC40LjIvc3JjL3RlbmRyaWwucnMAAAAcLBAAWQAAAF0DAAAfAAAALAAAAAgAAAAEAAAALgAAADAxMjM0NTY3ODlhYmNkZWZ1dXV1dXV1dWJ0bnVmcnV1dXV1dXV1dXV1dXV1dXV1dQAAIgBBhNrAAAsBXABBqNvAAAvJNzEAAAAMAAAABAAAADIAAAAzAAAANAAAAGEgRGlzcGxheSBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB1bmV4cGVjdGVkbHkvcnVzdGMvZTA5MmQwYjZiNDNmMmRlOTY3YWYwODg3ODczMTUxYmIxYzBiMThkMy9saWJyYXJ5L2FsbG9jL3NyYy9zdHJpbmcucnMAAPctEABLAAAAsQkAAA4AAAA1AAAAAAAAAAEAAAA2AAAAcmVjdXJzaW9uIGxpbWl0IGV4Y2VlZGVkdW5leHBlY3RlZCBlbmQgb2YgaGV4IGVzY2FwZXRyYWlsaW5nIGNoYXJhY3RlcnN0cmFpbGluZyBjb21tYWxvbmUgbGVhZGluZyBzdXJyb2dhdGUgaW4gaGV4IGVzY2FwZWtleSBtdXN0IGJlIGEgc3RyaW5nY29udHJvbCBjaGFyYWN0ZXIgKFx1MDAwMC1cdTAwMUYpIGZvdW5kIHdoaWxlIHBhcnNpbmcgYSBzdHJpbmdpbnZhbGlkIHVuaWNvZGUgY29kZSBwb2ludG51bWJlciBvdXQgb2YgcmFuZ2VpbnZhbGlkIG51bWJlcmludmFsaWQgZXNjYXBlZXhwZWN0ZWQgdmFsdWVleHBlY3RlZCBpZGVudGV4cGVjdGVkIGAsYCBvciBgfWBleHBlY3RlZCBgLGAgb3IgYF1gZXhwZWN0ZWQgYDpgRU9GIHdoaWxlIHBhcnNpbmcgYSB2YWx1ZUVPRiB3aGlsZSBwYXJzaW5nIGEgc3RyaW5nRU9GIHdoaWxlIHBhcnNpbmcgYW4gb2JqZWN0RU9GIHdoaWxlIHBhcnNpbmcgYSBsaXN0RXJyb3IoLCBsaW5lOiAsIGNvbHVtbjogKQAAACwwEAAGAAAAMjAQAAgAAAA6MBAACgAAAEQwEAABAAAANwAAAAQAAAAEAAAAOAAAADkAAAA6AAAARG91YmxlRXNjYXBlZEVzY2FwZWRTeXN0ZW1QdWJsaWNTY3JpcHREYXRhRXNjYXBlZAAAADsAAAAEAAAABAAAADwAAABTY3JpcHREYXRhUmF3dGV4dFJjZGF0YURvdWJsZVF1b3RlZFNpbmdsZVF1b3RlZFVucXVvdGVkQ2RhdGFTZWN0aW9uRW5kQ2RhdGFTZWN0aW9uQnJhY2tldENkYXRhU2VjdGlvbkJvZ3VzRG9jdHlwZUJldHdlZW5Eb2N0eXBlUHVibGljQW5kU3lzdGVtSWRlbnRpZmllcnNBZnRlckRvY3R5cGVJZGVudGlmaWVyADsAAAAEAAAABAAAAD0AAABEb2N0eXBlSWRlbnRpZmllclNpbmdsZVF1b3RlZERvY3R5cGVJZGVudGlmaWVyRG91YmxlUXVvdGVkQmVmb3JlRG9jdHlwZUlkZW50aWZpZXJBZnRlckRvY3R5cGVLZXl3b3JkQWZ0ZXJEb2N0eXBlTmFtZURvY3R5cGVOYW1lQmVmb3JlRG9jdHlwZU5hbWVEb2N0eXBlQ29tbWVudEVuZEJhbmdDb21tZW50RW5kQ29tbWVudEVuZERhc2hDb21tZW50Q29tbWVudFN0YXJ0RGFzaENvbW1lbnRTdGFydE1hcmt1cERlY2xhcmF0aW9uT3BlbkJvZ3VzQ29tbWVudFNlbGZDbG9zaW5nU3RhcnRUYWdBZnRlckF0dHJpYnV0ZVZhbHVlUXVvdGVkQXR0cmlidXRlVmFsdWUAOwAAAAQAAAAEAAAAPgAAAEJlZm9yZUF0dHJpYnV0ZVZhbHVlQWZ0ZXJBdHRyaWJ1dGVOYW1lQXR0cmlidXRlTmFtZUJlZm9yZUF0dHJpYnV0ZU5hbWVTY3JpcHREYXRhRG91YmxlRXNjYXBlRW5kU2NyaXB0RGF0YUVzY2FwZWREYXNoRGFzaFNjcmlwdERhdGFFc2NhcGVkRGFzaFNjcmlwdERhdGFFc2NhcGVTdGFydERhc2hTY3JpcHREYXRhRXNjYXBlU3RhcnRSYXdFbmRUYWdOYW1lOwAAAAQAAAAEAAAAPwAAAFJhd0VuZFRhZ09wZW5SYXdMZXNzVGhhblNpZ25SYXdEYXRhVGFnTmFtZUVuZFRhZ09wZW5UYWdPcGVuUGxhaW50ZXh0RGF0YWNhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWUvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvdGVuZHJpbC0wLjQuMi9zcmMvYnVmMzIucnMAABs0EABXAAAAHQAAAC4AAABnZXRfcmVzdWx0IGNhbGxlZCBiZWZvcmUgZG9uZS9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9odG1sNWV2ZXItMC4yNS4xL3NyYy90b2tlbml6ZXIvY2hhcl9yZWYvbW9kLnJzoTQQAGsAAABVAAAAFQAAAG5hbWVfYnVmIG1pc3NpbmcgaW4gbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZQAAAKE0EABrAAAAWwAAAA4AAAChNBAAawAAAGEAAAAOAAAAaW52YWxpZCBjaGFyIG1pc3NlZCBieSBlcnJvciBoYW5kbGluZyBjYXNlcwChNBAAawAAAPQAAAAZAAAAoTQQAGsAAAA3AQAAMwAAAEJvZ3VzTmFtZU5hbWVkTnVtZXJpY1NlbWljb2xvbk51bWVyaWMAAABAAAAABAAAAAQAAABBAAAAT2N0b3Rob3JwZUJlZ2luAEIAAAAEAAAABAAAAEMAAAAvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvdGVuZHJpbC0wLjQuMi9zcmMvYnVmMzIucnMAEDYQAFcAAABWAAAAOwAAABA2EABXAAAAHQAAAC4AAAAvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvdGVuZHJpbC0wLjQuMi9zcmMvdGVuZHJpbC5ycwAAAIg2EABZAAAArgMAAD0AAABpbmxpbmVvd25lZHNoYXJlZFRlbmRyaWw8Pig6IAAAAAU3EAAIAAAADTcQAAIAAAAPNxAAAgAAACkAAAAsNxAAAQAAAC9ydXN0Yy9lMDkyZDBiNmI0M2YyZGU5NjdhZjA4ODc4NzMxNTFiYjFjMGIxOGQzL2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzAAA4NxAASgAAAGcEAAAVAAAAODcQAEoAAAB1BAAAHgAAADg3EABKAAAAfgQAABgAAAA4NxAASgAAAH8EAAAZAAAAODcQAEoAAACCBAAAGgAAADg3EABKAAAAiAQAAA0AAAA4NxAASgAAAIkEAAASAAAAU29tZUYAAAAEAAAABAAAAEcAAABOb25lRG9jdHlwZW5hbWUASAAAAAQAAAAEAAAASQAAAHB1YmxpY19pZHN5c3RlbV9pZGZvcmNlX3F1aXJrcwAASAAAAAQAAAAEAAAASgAAAEVuZFRhZ1N0YXJ0VGFnVGFna2luZAAAAEgAAAAEAAAABAAAAEsAAABIAAAABAAAAAQAAABMAAAAc2VsZl9jbG9zaW5nYXR0cnMAAABIAAAABAAAAAQAAABNAAAAQWZ0ZXJBZnRlckZyYW1lc2V0QWZ0ZXJBZnRlckJvZHlBZnRlckZyYW1lc2V0SW5GcmFtZXNldEFmdGVyQm9keUluVGVtcGxhdGVJblNlbGVjdEluVGFibGVJblNlbGVjdEluQ2VsbEluUm93SW5UYWJsZUJvZHlJbkNvbHVtbkdyb3VwSW5DYXB0aW9uSW5UYWJsZVRleHRJblRhYmxlVGV4dEluQm9keUFmdGVySGVhZEluSGVhZE5vc2NyaXB0SW5IZWFkQmVmb3JlSGVhZEJlZm9yZUh0bWxJbml0aWFsTm90V2hpdGVzcGFjZVdoaXRlc3BhY2VOb3RTcGxpdEVPRlRva2VuTnVsbENoYXJhY3RlclRva2VuQ2hhcmFjdGVyVG9rZW5zAAAATgAAAAQAAAAEAAAATwAAAE4AAAAEAAAABAAAAEcAAABDb21tZW50VG9rZW5UYWdUb2tlbk4AAAAEAAAABAAAAFAAAAAtLy9hZHZhc29mdCBsdGQvL2R0ZCBodG1sIDMuMCBhc3dlZGl0ICsgZXh0ZW5zaW9ucy8vLS8vYXMvL2R0ZCBodG1sIDMuMCBhc3dlZGl0ICsgZXh0ZW5zaW9ucy8vLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIGxldmVsIDEvLy0vL2lldGYvL2R0ZCBodG1sIDIuMCBsZXZlbCAyLy8tLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0IGxldmVsIDEvLy0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QgbGV2ZWwgMi8vLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIHN0cmljdC8vLS8vaWV0Zi8vZHRkIGh0bWwgMi4wLy8tLy9pZXRmLy9kdGQgaHRtbCAyLjFlLy8tLy9pZXRmLy9kdGQgaHRtbCAzLjAvLy0vL2lldGYvL2R0ZCBodG1sIDMuMiBmaW5hbC8vLS8vaWV0Zi8vZHRkIGh0bWwgMy4yLy8tLy9pZXRmLy9kdGQgaHRtbCAzLy8tLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAwLy8tLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAxLy8tLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAyLy8tLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAzLy8tLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMC8vLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDEvLy0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAyLy8tLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMy8vLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0Ly8tLy9pZXRmLy9kdGQgaHRtbC8vLS8vbWV0cml1cy8vZHRkIG1ldHJpdXMgcHJlc2VudGF0aW9uYWwvLy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCBodG1sIHN0cmljdC8vLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMi4wIGh0bWwvLy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCB0YWJsZXMvLy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCBodG1sIHN0cmljdC8vLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMy4wIGh0bWwvLy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCB0YWJsZXMvLy0vL25ldHNjYXBlIGNvbW0uIGNvcnAuLy9kdGQgaHRtbC8vLS8vbmV0c2NhcGUgY29tbS4gY29ycC4vL2R0ZCBzdHJpY3QgaHRtbC8vLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIDIuMC8vLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIGV4dGVuZGVkIDEuMC8vLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIGV4dGVuZGVkIHJlbGF4ZWQgMS4wLy8tLy9zb2Z0cXVhZCBzb2Z0d2FyZS8vZHRkIGhvdG1ldGFsIHBybyA2LjA6OjE5OTkwNjAxOjpleHRlbnNpb25zIHRvIGh0bWwgNC4wLy8tLy9zb2Z0cXVhZC8vZHRkIGhvdG1ldGFsIHBybyA0LjA6OjE5OTcxMDEwOjpleHRlbnNpb25zIHRvIGh0bWwgNC4wLy8tLy9zcHlnbGFzcy8vZHRkIGh0bWwgMi4wIGV4dGVuZGVkLy8tLy9zcS8vZHRkIGh0bWwgMi4wIGhvdG1ldGFsICsgZXh0ZW5zaW9ucy8vLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgaHRtbC8vLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgc3RyaWN0IGh0bWwvLy0vL3czYy8vZHRkIGh0bWwgMyAxOTk1LTAzLTI0Ly8tLy93M2MvL2R0ZCBodG1sIDMuMiBkcmFmdC8vLS8vdzNjLy9kdGQgaHRtbCAzLjIgZmluYWwvLy0vL3czYy8vZHRkIGh0bWwgMy4yLy8tLy93M2MvL2R0ZCBodG1sIDMuMnMgZHJhZnQvLy0vL3czYy8vZHRkIGh0bWwgNC4wIGZyYW1lc2V0Ly8tLy93M2MvL2R0ZCBodG1sIDQuMCB0cmFuc2l0aW9uYWwvLy0vL3czYy8vZHRkIGh0bWwgZXhwZXJpbWVudGFsIDE5OTYwNzEyLy8tLy93M2MvL2R0ZCBodG1sIGV4cGVyaW1lbnRhbCA5NzA0MjEvLy0vL3czYy8vZHRkIHczIGh0bWwvLy0vL3czby8vZHRkIHczIGh0bWwgMy4wLy8tLy93ZWJ0ZWNocy8vZHRkIG1vemlsbGEgaHRtbCAyLjAvLy0vL3dlYnRlY2hzLy9kdGQgbW96aWxsYSBodG1sLy8AACQ6EAA0AAAAWDoQACoAAACCOhAAHwAAAKE6EAAfAAAAwDoQACYAAADmOhAAJgAAAAw7EAAeAAAAKjsQABcAAABBOxAAGAAAAFk7EAAXAAAAcDsQAB0AAACNOxAAFwAAAKQ7EAAVAAAAuTsQABsAAADUOxAAGwAAAO87EAAbAAAACjwQABsAAAAlPBAAIgAAAEc8EAAiAAAAaTwQACIAAACLPBAAIgAAAK08EAAaAAAAxzwQABMAAADaPBAAKAAAAAI9EAA1AAAANz0QAC4AAABlPRAAMAAAAJU9EAA1AAAAyj0QAC4AAAD4PRAAMAAAACg+EAAjAAAASz4QACoAAAB1PhAAKgAAAJ8+EAAzAAAA0j4QADsAAAANPxAATgAAAFs/EABFAAAAoD8QACQAAADEPxAAKwAAAO8/EAAtAAAAHEAQADQAAABQQBAAHwAAAG9AEAAcAAAAi0AQABwAAACnQBAAFgAAAL1AEAAdAAAA2kAQAB8AAAD5QBAAIwAAABxBEAAoAAAAREEQACYAAABqQRAAFQAAAH9BEAAZAAAAmEEQACMAAAC7QRAAHwAAAC0vL3czby8vZHRkIHczIGh0bWwgc3RyaWN0IDMuMC8vZW4vLy0vdzNjL2R0ZCBodG1sIDQuMCB0cmFuc2l0aW9uYWwvZW5odHRwOi8vd3d3LmlibS5jb20vZGF0YS9kdGQvdjExL2libXhodG1sMS10cmFuc2l0aW9uYWwuZHRkLS8vdzNjLy9kdGQgeGh0bWwgMS4wIGZyYW1lc2V0Ly8tLy93M2MvL2R0ZCB4aHRtbCAxLjAgdHJhbnNpdGlvbmFsLy8tLy93M2MvL2R0ZCBodG1sIDQuMDEgZnJhbWVzZXQvLy0vL3czYy8vZHRkIGh0bWwgNC4wMSB0cmFuc2l0aW9uYWwvLy0vL1czQy8vRFREIEhUTUwgNC4wLy9FTmh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvc3RyaWN0LmR0ZC0vL1czQy8vRFREIEhUTUwgNC4wMS8vRU5odHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9zdHJpY3QuZHRkLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU5odHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTmh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkYWJvdXQ6bGVnYWN5LWNvbXBhdC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy90ZW5kcmlsLTAuNC4yL3NyYy90ZW5kcmlsLnJzAAC9RRAAWQAAAFcAAAA1AAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3RlbmRyaWwtMC40LjIvc3JjL2J1ZjMyLnJzAChGEABXAAAAHQAAAC4AAABzdGF0aWNpbmxpbmVkeW5hbWljQXRvbSgnJyB0eXBlPSkAAACjRhAABgAAAKlGEAAHAAAAsEYQAAEAAAAvaG9tZS9iLWZ1c2Uv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Zm9yZWNvcHlyb3dzcGFjaW5ndGhpbm1hdGhzcGFjZW1hdGhlbWF0aWNhbHBhdHRlcm51bml0c29uZXJyb3JzdHJva2UtbGluZWpvaW5hbGlnbm1lbnRzY29wZXVuaW9uaGVhZHNpemVzY29sc2FjdGlvbnBvbHlsaW5lc3BlZWRub2JydGVtcGxhdGVnMWhhbmRsZXJmZXNwZWN1bGFybGlnaHRpbmdhcmlhLWV4cGFuZGVkY2xpcHBhdGhsZXF4bGluazpyb2xlZmllbGRzZXRhbHRHbHlwaEl0ZW1iYm94dGFucmVxdWlyZWRmZWF0dXJlc29uZHJhZ2Ryb3BjbGFzc2lkZGlyZWN0aW9ub25kcmFnbGVhdmVzZWN0aW9uZ2x5cGhhcmlhLXNldHNpemVncm91cGFsaWdua2VybmluZ3N0cm9rZS1taXRlcmxpbWl0YXJjc2VjY29kZXR5cGVsaW5rcmVsb25wYWdlc2hvd3JlbG5hcmNjb3RmbG9vcmtleVRpbWVzY2hhcnJlcGVhdGNvdW50cmVwZWF0LW1pbmZlbWVyZ2Vub2RlYXNpZGVjb2x1bW5hbGlnbm9uYmVmb3JlZWRpdGZvY3Vzb25maW5pc2hlbGV2YXRpb25vbnJlc2l6ZXN0cm9rZS13aWR0aGFyaWEtaW52YWxpZHByZXNlcnZlYXNwZWN0cmF0aW9tYXhwYXJ0aWFsZGlmZnN0YXJ0b2Zmc2V0aXNpbmRleG9ubW91c2Vkb3dub25kYXRhc2V0Y2hhbmdlZHhtbDpiYXNlazFzdHJpbmdzdWJkZWZpbml0aW9uVVJMYXJhYmljLWZvcm1pZnJhbWVzdGVtdnNjcmlwdGJpYXNob3Jpei1hZHYteHN0b3AtY29sb3JhdHRyaWJ1dGVOYW1lZm9yZWlnbm9iamVjdGl0ZW1wcm9wZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWxjb2RlZmxvb2Qtb3BhY2l0eXJhdGlvbmFsc2ZlQ29tcG9uZW50VHJhbnNmZXJ0ZXh0cGF0aHhsaW5rOnRpdGxlc2hhcGVtYXBjaGFyc2V0dGFyZ2V0eW9uZGJsY2xpY2ttcGF0aG9uZHJhZ3N0YXJ0aGlkZWZvY3VzZWRnZW1vZGVtZ2x5cGhub25jZXJhZGlhbEdyYWRpZW50YW5ub3RhdGlvbi14bWxtcGFkZGVkZ3JhZGllbnRUcmFuc2Zvcm1mZWZ1bmNhb25mb2N1c291dG9uY2hhbmdldmtlcm5ub3RwcnN1YnNldGZvbnQtd2VpZ2h0bWF0aHNpemVjb2xvci1pbnRlcnBvbGF0aW9uc2VjaHJlZmVycmVycG9saWN5cmVhZG9ubHlwb2ludHNhY2NlcHQtY2hhcnNldGZvbnQtc2l6ZWNhcmRydHVuaWNvZGUtcmFuZ2VwYXRoZ2NkbWFyZ2luaGVpZ2h0a2V5cG9pbnRzaDJhY3Rpb250eXBlcmVxdWlyZWRGZWF0dXJlc3J1bGVhcmlhLWNoZWNrZWRjbGlwcGF0aHVuaXRzc3JjZG9jZGlzcGxheXN0eWxlbXVsdGlwbGV2ZXJzaW9ubnVtT2N0YXZlc21hdHJpeHJvd29mZnNldG1hcmtwcmltZXNzdHJva2Utb3BhY2l0eWhyZWZtc3BhY2VvbmJsdXJiZ3NvdW5kb25tb3VzZXdoZWVsbW9sYXJnZW9wcmVzdWx0YXppbXV0aGFsaW5rc3RvcGFyaWEtYnVzeWZvbnR3ZWlnaHRzcHJlYWRtZXRob2RiZXZlbGxlZHhtbDpsYW5ncG9pbnRzQXRYYXJjdGFuaHJxdW90ZW9ubW91c2VvdmVyY3Vyc29yc3VwZXJzY3JpcHRzaGlmdGNvbHVtbmxpbmVzZm9udGZhbWlseXhsaW5rY2xpcC1wYXRobWFza3N1cHZhbHVlc3BhY2luZ2ZlZHJvcHNoYWRvd2Zvcm1hY3Rpb25vbmNvbnRleHRtZW51dG9nZ2xlZmlnY2FwdGlvbnNlZWRwb2ludHNhdHlpZGVudG5hcmdzdmxpbmthY2NlbnRpdGVtcmVmc2hvd2NoYXJvZmZob3Jpei1vcmlnaW4teGVkZ2VNb2Rlc2VtYW50aWNzYWNjZXB0bG9nYXJpYS1hdG9taWNzY2FsZXVuaWNvZGUtYmlkaW9yZGVya2FyY3JvbGVkaXZpc29yaGFuZ2luZ3NkZXZheGlzZG9taW5hbnQtYmFzZWxpbmVlbmFibGUtYmFja2dyb3VuZG9ubGFuZ3VhZ2VjaGFuZ2V0cmFja25vdHN1YnNldHBvaW50c0F0WW1lYW5maWxsZmVDb252b2x2ZU1hdHJpeHN0eWxldG9vdGhlcnRyYW5zbGF0ZWxvY2Fsc2FtcHhjaGFubmVsc2VsZWN0b3JzcGFjZWVxdWFscm93c3N0aXRjaFRpbGVzZmVmbG9vZGRub3RhbnVtYmVybWFya2VySGVpZ2h0bGluZXRoaWNrbmVzc2Rpc2NhcmRhbHRHbHlwaERlZnRhYmxldmFsdWVzcHJpbWl0aXZldW5pdHNmZW5jZWluZmluaXR5a2VybmVsdW5pdGxlbmd0aGxpbmUtaGVpZ2h0dGFyZ2V0WGFyaWEtbXVsdGlzZWxlY3RhYmxlY2VsbHBhZGRpbmdkYXRhZm9ybWF0YXNrZXJuZWxVbml0TGVuZ3RoZ2VxYWx0R2x5cGhlbWJlZHBhdHRlcm5Db250ZW50VW5pdHNhcmNjb3RocHJvZ3Jlc3NtZnJhY3N0cm9rZWJhc2VsaW5lZm9yYWxsZmVGdW5jR2FuaW1hdGlvbm5vdmFsaWRhdGVydWxlc3NyY2l0ZW1zY29wZW9uYmVmb3JlYWN0aXZhdGViZGlmZXR1cmJ1bGVuY2VnbHlwaFJlZmNzY25hbWVzaW5jb2xzcGFuYmFzZW9uYmVmb3JlcHJpbnRzb3VyY2Vsb3doc3BhY2V0aXRsZXNjcmlwdGxldmVsb25jdXRyZXZlcnNlZHRicmVha3NldG1hcmtlci1zdGFydGVuY3R5cGVtZXRhZGF0YXhDaGFubmVsU2VsZWN0b3Jtb2Rlc2VwYXJhdG9yc29uaW52YWxpZGg2Y29uanVnYXRlcmVxdWlyZWRFeHRlbnNpb25zbXVuZGVyb3Zlcmg1bWV0aG9kbWF0aGNvbG9yZGl2ZXJnZW5jZWZhbHNlc3BlY2lmaWNhdGlvbm9ucmVhZHlzdGF0ZWNoYW5nZWRvbWFpbm9mYXBwbGljYXRpb25tYXRoYmFja2dyb3VuZGtlcm5lbE1hdHJpeG5hdHVyYWxudW1iZXJzZGVwdGhzY2FsYXJwcm9kdWN0b3BlcmF0b3JjbGFzc3BvaW50c0F0WmNvb3Jkc2JvcmRlcnRleHRsZW5ndGhzY3JpcHRzaXplbXVsdGlwbGllcm9uc3RvcmFnZWFyaWEtY29udHJvbHNvbnByb3BlcnR5Y2hhbmdlaW1hZ2Vwcm9kdWN0Y2FudmFzcHJvbXB0ZmV0aWxlb25mb3JtY2hhbmdlYW5pbWF0ZW1vdGlvbm1heHNpemVhcmlhLWxpdmVsaW1pdGZvcm10YXJnZXRlcXVhbGNvbHVtbnNyZWN0ZmVjb21wb25lbnR0cmFuc2ZlcmZlRGlzcGxhY2VtZW50TWFwZGVncmVlb25iZWZvcmRlYWN0aXZhdGViYXNlRnJlcXVlbmN5ZHljdXJsYmFzZWxpbmUtc2hpZnRjbGlwYWFyaWEtZHJvcGVmZmVjdHhsaW5rOnR5cGVvbmxvYWRyZWZYcHJzdWJzZXRwcmVzZXJ2ZWFscGhhaW5wdXRtb2RlazRncmFkaWVudHVuaXRzYXJpYS12YWx1ZW1heGxuYWNyb255bWFydGljbGV0c3BhbmZlYmxlbmRjb2xvci1wcm9maWxlZm9yYXJpYS1kYXRhdHlwZXZlcnQtYWR2LXltc3FydHRoaWNrbWF0aHNwYWNlbW9tZW50bWlzc2luZy1nbHlwaHRkZm9ybW5vdmFsaWRhdGVmb3JtZm9udHNpemVtYXNrY29udGVudHVuaXRzZm9ybW1ldGhvZGFyY2Nvc2hvbnBhc3RlaW50ZXJ2YWxtdGR0YWJpbmRleGFyaWEtZ3JhYnNyY2xhbmdtdGFibGVyZXBlYXRjb2xvci1yZW5kZXJpbmdmb250c3R5bGVhdHRyaWJ1dGVUeXBlZXhwb25lbnRwYXR0ZXJub25kcmFnZW50ZXJhcmlhLXZhbHVlbWlubW9tZW50YWJvdXRkYXRldGltZXN2Z3ZhcmlhbmNlZmVPZmZzZXRvbmVycm9ydXBkYXRlZG93bmxvYWRhcmNoaXZlZnhleGlzdHNzdGVwYnV0dG9ubXRleHRmZUNvbXBvc2l0ZWRlZmF1bHRzdGVtaG1lbnVpdGVtZm9udC12YXJpYW50b25jb250cm9sc2VsZWN0dGFibGVwcm9wZXJ0eWZvbnQtZmFjZS11cmlpY29udmVydC1vcmlnaW4teW9uaGFzaGNoYW5nZXgyb25rZXlkb3dubGluZWJyZWFrcm9vdGl0ZW10eXBldGltZXN1cmZhY2VzY2FsZWxhbWJkYXNyY3NldGZ5aG9yaXotb3JpZ2luLXljb2RlYmFzZXYtYWxwaGFiZXRpY2FyZWFhcmlhLW11bHRpbGluZXJlcGVhdC1tYXhhYnNvbmVuZGZvb3RlcnZlcnQtb3JpZ2luLXh0ZXh0LWRlY29yYXRpb25hYmJybW92ZXJ0YXJnZXRwcmltaXRpdmVVbml0c2ZlZnVuY2J0ZXh0LWFuY2hvcm5vcmVzaXpleG1sbnM6eGxpbmtjZW50ZXJmb250bXNmbmszcGllY2VlbGxpcHNlcmVhbHNub2VtYmVkZW1wdHlzZXRmZUJsZW5kcnB3aWR0aHN4bWxuc3RleHRMZW5ndGhlcXVuaXRzLXBlci1lbWJhc2VQcm9maWxlZGF0YXRlbXBsYXRlYmFzZWZvbnRkaWZmZHh0eXBlYXJpYS1jaGFubmVsc3lzdGVtbGFuZ3VhZ2VyZWZ5cmVmeGFsdGltZ2RpYWxvZ29uc2Nyb2xsYXJpYS1zZWxlY3RlZHZlY3RvcnJ5cGF0dGVybnRyYW5zZm9ybWZvbnQtc2l6ZS1hZGp1c3R0YXJnZXR4bXJvd3JlcGVhdENvdW50YWx0dGV4dGxlbmd0aGFkanVzdHZlcnl0aGlubWF0aHNwYWNlbWlubGVuZ3RobWFya2VyLWVuZGRhdGFmbGRwYXJzZWNvbG9yLWludGVycG9sYXRpb24tZmlsdGVyc25hdmhlaWdodHByZWZldGNod3JpdGluZy1tb2RlYXJpYS1kZXNjcmliZWRieXBhdHRlcm5jb250ZW50dW5pdHNkaXJuYW1ldTJ4bWw6c3BhY2VkZXRhaWxzbmVzdG9ua2V5dXBtdXRlZG9uZHJhZ29uaW5wdXRvbnNlbGVjdGFsdGh0dHAtZXF1aXZhY2NlbnQtaGVpZ2h0Y29udHJvbGxlcmNoYW5nZWNlbGxzcGFjaW5ncGF0aGxlbmd0aGJhY2tncm91bmRhcmlhLXNvcnRmcmFtZWJvcmRlcmdyYWRpZW50dHJhbnNmb3JtdmVjdG9ycHJvZHVjdGZvbnQtZmFtaWx5YXJpYS1oaWRkZW5hbGlnbm1lbnQtYmFzZWxpbmVoaWRkZW5maWx0ZXJ1bml0c3NjcmlwdG1pbnNpemV1c2Vub3NjcmlwdHN0cmV0Y2h5di1tYXRoZW1hdGljYWxjb21wbGV4ZXNhcmlhLWxhYmVsbGVkYnlyb3dhbGlnbnBpY3R1cmVwcmVzZXJ2ZUFscGhhYXJpYS1yZXF1aXJlZHkydW5zZWxlY3RhYmxlY29udGVudGVkaXRhYmxlenN0b3Atb3BhY2l0eW9ubWVzc2FnZWx0ZmFjdG9yaWFsZmlndXJlbG9vcGNhcC1oZWlnaHRjeXhyZWZmZWRpZmZ1c2VsaWdodGluZ29uYWN0aXZhdGVsaXN0aW5nb25tb3VzZW1vdmVkdG9wdGltdW1mZURyb3BTaGFkb3dmaWx0ZXJzbWFsbG9ub2ZmbGluZXBhbm9zZS0xbWFycXVlZXpvb21hbmRwYW5tbmFkZHJlc3NtYXRoeDFvbmhlbHB3aGVub3JhcmlhLXZhbHVlbm93YWNjZXNza2V5ZGVzY2VudHYtaWRlb2dyYXBoaWNpcnJlbGV2YW50Y2hlY2tlZG9uYmVmb3JlcGFzdGV0cmFuc2Zvcm1ub2ZyYW1lc2Nvc2htdHJmZUltYWdlY29udGV4dG1lbnV2YWxpZ25nbHlwaC1uYW1lb25iZWZvcmV1cGRhdGVzcGVjdWxhcmNvbnN0YW50ZGVsYXJpYS1vd25zZmVTcGVjdWxhckxpZ2h0aW5ndGhlYWRvbm1vdmVlbmRtZW5jbG9zZW1hcmdpbndpZHRod29yZC1zcGFjaW5nb2JqZWN0bG9nYmFzZW1sYWJlbGVkdHJhbmltYXRlTW90aW9udGV4dFBhdGhkcmFnZ2FibGVkZm5yZXF1aXJlZGFyY2Nvc2JpZ2ludGF0dHJpYnV0ZXR5cGViYXNlZnJlcXVlbmN5c2VwaDFmZWNvbnZvbHZlbWF0cml4bGFuZ2hncm91cGV1bGVyZ2FtbWFjb3NicmZlZGlzcGxhY2VtZW50bWFwa2V5c3BsaW5lc3dpZHRoaW50ZXJjZXB0dGVuZHN0b29uc2VsZWN0c3RhcnRtZXJyb3JtYWNyb3Ntb3picm93c2Vyb25hYm9ydG1hdHJpeG9uYWZ0ZXJwcmludG1vdmFibGVsaW1pdHN0cnN0cm9rZS1saW5lY2Fwbm90YXRpb25vbm1vdXNlZW50ZXJhbm5vdGF0aW9uZnJhbWVzZXRjcm9zc29yaWdpbmludmVyc2VoZWFkZXJzZmVtZXJnZWRhdGFzcmNzaW5oZ2x5cGhyZWZvbmZvcm1pbnB1dHZpc2liaWxpdHlvbmRyYWdvdmVyc3BhY2Vyb3ZlcmxpbmUtdGhpY2tuZXNzeG9yb25kYXRhc2V0Y29tcGxldGVwaW5nbGV0dGVyLXNwYWNpbmdsZW5ndGhBZGp1c3R2ZXJ5dGhpY2ttYXRoc3BhY2VvbnJlcGVhdGltZXRhdmlld2JveGRlZnNyYmFsaWduZGF0YXNwcmVhZE1ldGhvZGRlZmluaXRpb24tc3JjYXNjZW50dmFsdWV0eXBlb25yb3dlbnRlcm9uc3RvcHJzcGFjZW1hcmtlcm9yaWVudGF0aW9uZW5jb2RpbmdwbGFpbnRleHRyZXN0YXJ0c3RkRGV2aWF0aW9ubnVtb2N0YXZlc21hcmtlcnVuaXRzY2xpcFBhdGhVbml0c3N0ZGRldmlhdGlvbmNvdHBhcmlhLWRpc2FibGVkbWluc2l6ZWZlU3BvdExpZ2h0Y2VpbGluZ3J5MWZhY3Rvcm9mYnN0YXRlY2hhbmdla2V5dGltZXNkaXJlbmRvcHRncm91cG9ucm93c2RlbGV0ZWZlZ2F1c3NpYW5ibHVybG93bGltaXRrMnN0cm9rZS1kYXNob2Zmc2V0dXBsaW1pdHhsaW5rOmhyZWZhbmltYXRlVHJhbnNmb3Jtc2xvcGVmZUZ1bmNCcG9pbnRzYXR4dW5kZXJsaW5lLXBvc2l0aW9uaHJlZmxhbmdjYXB0aW9ubXVsdGljb2x3YnJkaXNhYmxlZHF1b3RpZW50ZmVUaWxldHJ1ZWFyY3NpbmhlcXVpdmFsZW50ZmVvZmZzZXR2YWx1ZXNjYWxjTW9kZWFyaWEtYWN0aXZlZGVzY2VuZGFudG1lbnV4bGluazpzaG93c3Vic2NyaXB0c2hpZnRvbnBvcHN0YXRlYXJjc2ludGV4dGFyZWF1MWFyaWEtc2VjcmV0a2VybmVsbWF0cml4b3ZlcmxpbmUtcG9zaXRpb25vbmJlZ2ludGFibGVWYWx1ZXNzY29wZWRvbnN1Ym1pdG9uZHJvcG1haW5ncmFkaWVudFVuaXRzY29sZ3JvdXBjYWxjbW9kZWhlYWRlcmNvdGhpbnNvbnN0YXJ0aW1hZ2luYXJ5Y29udGVudHN0eWxldHlwZWJ2YXJ2YXJyYWRpb2dyb3VwZXhwb25lbnRpYWxlb3V0cHV0a2V5UG9pbnRzc2V0ZGlmZm9ub25saW5lYmxvY2txdW90ZWNpdGVsaW5lYXJncmFkaWVudGdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWxwYXJhbWludGVncml0eWltYWdpbmFyeWlvbmJvdW5jZW9ubW91c2V1cGZlY29sb3JtYXRyaXhmZVR1cmJ1bGVuY2VmaWx0ZXJVbml0c3JlZllvbmNlbGxjaGFuZ2Vpc21hcGRldGVybWluYW50bm9tb2R1bGVzdWJzZXRtYXhsZW5ndGhwcmVsb2Fkb25kYXRhYXZhaWxhYmxlcmVwZWF0LXN0YXJ0dnNwYWNlb3BlbmF1ZGlvYXR0cmlidXRlbmFtZWVtb25tb3VzZWxlYXZlcmFkaXVzY2xpcC1ydWxlb25jbGlja3BpbXN1YnN1cGFzeW5jZG9tYWlubG9uZ2Rlc2NhcmlhLWZsb3d0b3YtaGFuZ2luZ2ZlZGlzdGFudGxpZ2h0aHRtbHNwZWN1bGFyQ29uc3RhbnRhbGxvd2Z1bGxzY3JlZW5vbm1vdXNlb3V0bHF1b3RlYXBwbHlocmFtcGxpdHVkZWZlUG9pbnRMaWdodHBvd2VyYXJpYS1yZWxldmFudHJlYWxyZXZmZU1lcmdlTm9kZWRlY2xhcmVhbHRnbHlwaGNsb3NlY29sc3RhbmRieXJlcGxhY2Vjb2x1bW5zcGFuaW4ybXVuZGVyZGlmZnVzZWNvbnN0YW50cG9pbnRzYXR6b25tb3ZlbXJvb3RzcGVsbGNoZWNrc3VyZmFjZVNjYWxlZXZlbnRyb2xlaGtlcm5yZXBlYXRkdXJtYWxpZ25tYXJrYXJjY3Njc3VtbWFyeWtleVNwbGluZXNiZWdpbmNvbnRyb2xzc2xvdHNlbGVjdGlvbnN0cm9rZS1kYXNoYXJyYXljb25kaXRpb25jb2xvcm1ldGVydmVyeXZlcnl0aGlja21hdGhzcGFjZWxpdW5pY29kZW9ucmVzZXRhcmlhLWF1dG9jb21wbGV0ZWxlZ2VuZG9uYmVmb3JlY3V0cGxhY2Vob2xkZXJtc3VibWVkaWFhcmdmb250LXN0cmV0Y2hub2hyZWZ1bmRlcmxpbmUtdGhpY2tuZXNzZGVmaW5pdGlvbnVybHBhdHRlcm5UcmFuc2Zvcm1jb2x1bW53aWR0aGxvd3NyY3NjaGVtZWV4dGVybmFscmVzb3VyY2VzcmVxdWlyZWRvbm1vdmVzdGFydG9wdGlvbnJ1Ynlyb3dsaW5lc29ucm93ZXhpdG9sb3JpZ2ludGFyZ2V0WWluZGV4YXJjY3NjaGZvbnQtZmFjZS1uYW1lc3RyaWtldGhyb3VnaC10aGlja25lc3N2aWV3ZGVzY3Zlcnl2ZXJ5dGhpbm1hdGhzcGFjZXJlcGVhdER1cmcydGFuaGR1cm1hY3Rpb25sYWJlbHVzZW1hcGZlZnVuY3JpbnRlcnNlY3RtYWxpZ25ncm91cHNlbGVjdG9yYmRvZmVjb21wb3NpdGVzb2xpZGNvbG9yY3hvbmZpbHRlcmNoYW5nZWluaXRlbWlkbWVkaWFudGZvb3RhcmlhLXBvc2luc2V0cm93c2RpdmlkZXN0aXRjaHRpbGVzZm9udC1mYWNlLXNyY3NwYW5saW5lYXJHcmFkaWVudHRyZWZvcGFjaXR5bGlzdHN0cm9uZ21pbmRkbGlnaHRpbmctY29sb3JieW1hc2tVbml0c21tdWx0aXNjcmlwdHNmZUNvbG9yTWF0cml4cnh4bGluazphcmNyb2xlcGF0aExlbmd0aG9uZm9jdXN0aGFyaWEtbGV2ZWxjb21wYWN0c3RhcnRvbnVubG9hZGF1dG9zdWJtaXRsYXBsYWNpYW5pbWFnZS1yZW5kZXJpbmdndGlucHV0Y29tcG9zZWNpb25mb2N1c2luZ291dGVycHJvZHVjdHZpZXdCb3htYXJrZXJVbml0c3NoYXBlLXJlbmRlcmluZ2ZvbnQtZmFjZS1mb3JtYXRib2R5ZGl2bWFya2Vyd2lkdGhjbGVhcnN5c3RlbUxhbmd1YWdlcmVwZWF0LXRlbXBsYXRlbXByZXNjcmlwdHNpbXBsaWVzc2Nyb2xsZGVsYXlhbmltYXRldHJhbnNmb3JtYXV0b2NvbXBsZXRlY3N5bWJvbGNvbnRlbnRzY3JpcHR0eXBleXN0cmlrZWxpbmVzdW1kZWNvZGluZ2ZlRmxvb2RmZURpZmZ1c2VMaWdodGluZ2tiZGZlbW9ycGhvbG9neWNucmVxdWlyZWRleHRlbnNpb25zY2xpcFBhdGhub3RtYXJrZXItbWlkb25hZnRlcnVwZGF0ZW5vdGlubGFuZ3VhZ2VtYXJrZXJoZWlnaHRmZWZ1bmNnZmVGdW5jUndyYXB0ZXh0LXJlbmRlcmluZ2FyY3RhbmFyaWEtdGVtcGxhdGVpZGJhc2Vwcm9maWxldmlkZW9wcm9maWxlc3RyaWtldGhyb3VnaC1wb3NpdGlvbm1zdXB0dHJhZGlhbGdyYWRpZW50c2VsZWN0ZWRncmFkbm9zaGFkZXNwZWN1bGFyRXhwb25lbnRhbmltYXRlYWN0aXZlbWF0aHZhcmlhbnRvbmJlZm9yZXVubG9hZHRyYW5zcG9zZXljaGFubmVsc2VsZWN0b3JzYW5kYm94cm90YXRlb25kZWFjdGl2YXRla2luZGZldGNoY29sdW1uc3BhY2luZ2JsaW5rc2VjbXN0eWxlZmVEaXN0YW50TGlnaHRhdXRvcGxheW9ucm93c2luc2VydGVkbWZlbmNlZGZlaW1hZ2V4bXByZW5kZXJpbmctaW50ZW50ZGlmZnVzZUNvbnN0YW50YWNjdW11bGF0ZW5leHRpZHNjb3BleUNoYW5uZWxTZWxlY3RvcmFjY2VudHVuZGVyb25wYWdlaGlkZWFsdGdseXBoaXRlbXNlYW1sZXNzY29udGVudFN0eWxlVHlwZWNvZG9tYWlubWFza0NvbnRlbnRVbml0c2NhcnRlc2lhbnByb2R1Y3RtcGhhbnRvbW1pbnVzc3BlY3VsYXJleHBvbmVudGF1dG9mb2N1c2NpcmNsZXNpemVkZWZlcnJlbXBpZWNld2lzZXBsdXNjbG9zdXJlYW5pbWF0ZWNvbG9yb2NjdXJyZW5jZWZyb21oM2FuZHN3aXRjaGZlR2F1c3NpYW5CbHVyZGF0YWxpc3Rmb250LXN0eWxlYXBwbGV0ZGxvbnpvb214LWhlaWdodGZyYW1lc3BhY2luZ2xpbWl0aW5nY29uZWFuZ2xlZmVzcG90bGlnaHRwYXR0ZXJuVW5pdHNtZWRpdW1tYXRoc3BhY2VpbWdlZGdlb3ZlcmZsb3dmaWxsLXJ1bGVvcmllbnRzdmlld3RhcmdldGlkZW9ncmFwaGljbGlzdGVuZXJoNHBvc3RlcmZhY2Vub3dyYXBmaWx0ZXJSZXNhcmNzZWNocHJlc2VydmVBc3BlY3RSYXRpb2ZlRnVuY0FpbnRlZ2Vyc2xzcGFjZXRpbWVza2V5Z2VuYXJpYS1oYXNwb3B1cHJvd3NwYW5hbHRnbHlwaGRlZmZvcm1lbmN0eXBlZmlsdGVycmVzeGZvcmVpZ25PYmplY3RzeW1ib2xzeW1tZXRyaWNvbmNvcHljc2Noc2VsZWN0dGV4dGFwcHJveGhpZ2hmZU1vcnBob2xvZ3ltYXJrZXJXaWR0aDxQEAAJAAAARVAQAAQAAABJUBAACgAAAFNQEAARAAAAZFAQAAcAAABrUBAADAAAAHdQEAADAAAAelAQAAsA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AKADAAAAAAAAgQAAAGdjaXNmcjtMZWZ0RG91YmxlQnJhY2tlbnNjY3VlO2xnRXNzZXRtY2lyY2xlZERvd25UbkdnO25WZGFPdmVyUGFyZW1lYXN1cmVkYW5ZdW1sU2hvcnRVcG5zdWJzZXREb3VibGVDb25mYWxsaW5nZG90c2VxO09vcGZ2c3VibnVwZG93c2FjdXRuc3Vic2V0ZWNyb3NOdGRvdHNxdWFyZTtzY3NpbURpZmZlTmVzdGVkR3JlYXRlckdyZWF0ZXJscmNvcm5lclN1YnNGb3VyaWVydHJmO0F0aVVwQXJyb3dEb3duQXJyUmlnaHRBcnJvSWFjdXRvc2VsbDtMbGVmdGFOb3RDb25ncnVMZXNzU2xhbnRFcXVheGk7bHRyaWU7YXJpbmc7TnNja29DaXJjbGVEb3Q7bGF0O25vdG5pTnRpbGRlbWFwO3N3bndhclNob3J0UmlnaHRBcnZCYXJ2cnBwb2xpbnN3QXJDYXBpdGFsRENpcmNsZVRpbWxwYU5vdFRpbExhckRvdWJsZVZlcnRpY2FsQmFjY2VkaXNlYVNxdWFyZUludGVyc2VjdGlzaW1lcXR3b2hlYWRiYXJ2ZURTY3lMYW1iZGE7Tm90VGlsZGVUaWxyaWdodHJpZ2h0dWNpcmM7Q2xvc2VDdXJseVF1b3RlO0NvdW50ZXJibGFja3RyaWFuZ2xlbFVuZGVyQmFhbmdydHZiO3VkYmxhY2JvcHJpZ2h0bGVmdGFybnJpZ2h0YWF3aXJicmtlcGhpdjtsZWZ0cmlnaHRhcnJvd3M7Z3RyZXFsaW9wQW1Eb3duVGVlb2d0aW1lc2Jhck5vdEVsZW1jaXJjZW1lYXN1cmVkYW9taW51cztTdXBlcnNUaWxkZUZ1bGxFcXVhbDtucHJlTm90VmVydGljYWxCU2NpcmM7aXNpbnN2dGNhcm9uO0FhY2hlY2ttYXJrO3dwO0Rac2N5O2ludHByb0VhbGFycmhrO3VjaXJjUmhqc2VyaWdyYXZlO0xvd2VyUmlnaHRBcnJzbXRlbGludGVWZXJ0aWNhbFNlcGFzb2ZnbkU7Ymlnd2VMZWZ0UmlnaHRBcnJvdztOb3ROZXN0ZWRHcmVhbnJBTG9uZ0xlZnRSaWdodEFycm93O1JldmVyc2VVRG93bkxlZnRWZWN0b3JEY2Fyb1JpZ2h0QXJyb3dCbnN1cHNldGVxO3N1cGVkUmlnaHRUcmlhbmdsZUJhclVkYmxhY2xkcXVvcmVyTEplcHNpQnVtc3VibXRpSHVtcERyY3lyY2VkdXBhcnF1YXRlcm5pb25zTm90U3Vic2V0RXF1YWw7c2NpcmNOb3RMZXNzVGlsT2N5O25lZG9iZWJpZ3VwcnVyZXNhY2N1ZGFycmxGaWxsZWRWZXJ5U21hbGxTcXVhcmU7b3Njcjt4d2VkZ2dhbW1hZEhmcmN1bGFycnBEb3duTGVmdFJpZ2h0VmVjdEVsZW1lU2NyQXRhaWFuZ2U7UnJMZWZ0RG91YmxlQnJhc2hvcnRtaWRWRGFzQW1hY3I7SUVjY29sdHNjeTtsamN5cGFyc3N1YnJhcnI7Ym5lUmNlR3NjclVwYXJyb3c7RW9nb29yZGY7ZHRyaWZzd25yc2FxdVdvcGY7bnNpdmFyc3Vic2V0bmVxcTtuc2NjbmFwRXR3aXh0QXRpbGRlO3h2ZWdzY3ZhcnByb3B0Y2VkaURvdWJsZVJpZ2h0QXJyb3dOZXN0ZWRHcmVhdGVyR3V0ZG90O3Zhcm50aGV0YXY7cHJvZmFsSW50ZXJzZWN0aW9uO2xvcGRhZ2dzdXBzRGNzdWJtdWx0dXRpbGRlO1N1Y2NlZWRzRXFsbGhhcmNvbmludFJpZ2h0VHJpQ2lIaWxiZXJ0U3BvZWxpZ2x2c29sYmZvcmFsbDtsb25nbGVmdHJpZ2h0RG93blJpZXNkYm94dlI7ZG90ZWdzY3I7b2Rzb2xkO25kYXNoZG93bmF5c2Njd2lubEFycm52RGFzaHJhcnJmcztEb3VibGVDZUREb3Q7WnNjdGlub2xjcm9zc2NpcmNsZWRjaXJpbm9kb3Q7bGVmdHJpZ2h0YXJyb3c7TGVmdEFuZ2xlQnJhY2tlbWVhc3VyZVlmcmRvd25kb3duTGVzc0dyZWF0aXF1ZWd0cmVyaWdodGhhcnBvb251bG9uZ2xlZnRhTGVmdFZlc2NuUGFydGl2RGFzaDtJbWFjcjtUYXVlZkRvZm9ya3Y7WmNhcm9uO0djaXJjYmZyYmVwc2k7Ym94Vkw7ZXFzbGFudGNvbXBsZVJFbmRhc2g7YnNlbWljaXJjbGVkZGFYZnI7RG91YmxlVXBEb3duQXJ0aWxHSmN5cm90aU5vdExlZnRUcmlhbmdsZUVxcHJ1c21hbGxPbWlqY3VsYXJyZXBzaXZHcmVhdGVyVGlsZGVjb2xvbjtzbGFib3htaW51S2ZyO1JldmVyc2VVcEVxYW5nbGU7Q29udG9yYWRvbWludXNMc2g7VXBBcnJvd0Rvd25BcnJvdztxdW90O0V4aXN0aGJTcXVhcmVJbnRlcnNWZXJ0aWNhbFRpbHJhZW1wdHlOZXN0ZWRMZXJhcnJ0bDtOb3RIdW1wRG93bkh1bW1sbGJhcnJMZWZ0RG93blZlY3RvckJhRG93bkxlZnRWZWN0b3I7VnZkYXNuc3ViO2FuZ3pUaWxkdHJpYW5nbGVyaWdodGVxO2hhcnJjcmlnaHRsZWZSY2xkcnVzaGFyY3VyYXJybTtUaWxkb3RwcnBhcjtFbXB0eVZlcnlTbWFsbFNxdWF1aGFybGxzY3I7dnppZ3phZ2NhY3V0UGFydGlhbFNxdWFyZVN1cGVyc2V0RXF1YUh1bXBaSGN5O0hzdHJvaztyb3RmcmFjY3NjcjtBb3BmbG9ucmlnaHRzcXVpZ2FybndhcmhrO0dyZWF0ZXJHcmVhZXhpc3RzdWJzZXRlcXE7Q291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JudHJpYW5nbGVyaWdwdW5jc3A7RXF1YWxUYWxlZnNpYWN1dXJjbGxjb3JuZXJ3Y2lyTm90UHJlY2VkZXNTbGFDb3VudGVyQ2xvY2t3aXNlQ29udG91cnBzY0xvbk5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyTGFycmJjb25nO29yb3JzbWlkO2FuZGFuZDtUaWxkZUVxdWFsO250cmlhbmdsRmlsbGVkU21hbGxTcXVhclByaW1jb21wbHRsd2VkYmFjdXJybG9uZ21hQUdyZWF0ZXJFcXVhY2lyc2NpcjthbmRzbG9wc2hvcnRzcnJlYWxpbmVtYWx0ZXNQcm9kdWN0O0xlZnREb3duVGVpbnRsYXJob3JzbG9wU2hvcnREb3duQXJyb0RpYWNyaXRpY2FsRG91YlJpZ2h0VHJpYW5nbGVFcXVOb3RTdXBlTm90VGlsZGVGdWhrc3dhckV4cG9wcm9mc3Vsb25nbGVmdHJpZ2h0YXJybG9uZ21hbmdydGltYWdlc3N0ZXRoO3RoZXRhc3hoQXJyO0NjZWRQZnI7Ym93dGllRW1wdHlWTm90TmVzdEVwU21hbGxlc3NhdHJpYW5oYXJJbXBsaWVzRG93blJpZ0Rvd25SaWdodFZlY1N1Y2NlZWRzU0xlZnRDZWltaW51c2Q7dWZpc2h0O3RlbHJTYWN1dGU7ZnJvd0Rvd25BcnJvd1VwQXJyb3dNaW51c1BsdXNzY2FwO3Nxc3ViZTtnRURpYWNyaXRpY2FsVGlseHZlZTtwcm5hcE5vdExlc3NFcmlnaHR0aGxhcnJmc25vdGludmFVb2dkbGNvcm47ZGVtcHpldGE7dGVudHJpYW5nbGVuTGVmdHJpZ2h0YXJyb3dMc3Ryb2s7YW9nb0RvdWJsZVVwQXJyb3c7Y3NjS2N5O3N1YkVib3hoVXBBcnJvZG90ZXFIYWNlaztMb25nbmRhc3Vic2ltO2d0bFBhclZlcmJhbGVmdGxlZnRhTm90U3VjY2VlZHNFcXVzdWJzZXRlcXFrYXBwYTtIYWNNZWxsaW50cm5sZXFxYm94dEJjeTthcGVTaG9ydExlZnRBcnJob2JpZ3RyaWFDaXJjbGVUaXRyaWFuZ2xlcmlnaHRlcU1zY3JvcmRlcjtnamN5RGlhY3JpdGljYWxEdmFuZ3J0O2hmQ2RveWljQ291bnRlckNjYXJldDtkb3duaGFycG9vbnJpZ2hvb2tyVmJhcnNxc3VidGhoYXJyY2lyO2NpcmNsZWFycm93bGVmdDtkc2NyO2ltYWNibGFja3RyaWFuZ2xlQ2xvYmJyaztic29sO3JkcXVvcjtzaW1sRTtVcGRvd25hcnJvd25jb25nZG9yZHNoTG9uZ2xlZnRhcnJvd2JveGJveDtmZmxsaXZhcnRyaWFuZ2xlbG5wYXJhVW5kZXJCcmFja2VOb3RTcXVhcmVTdXBlVXBFcXVpbGlicmxhcnJscERpYWNyaXRpY2FBcHBseUZ1TmVzdGVkR3JlYXRlckdyZWF0ZWJlcm5vdTtIdW1wRXF1YWxyZGxkaGFyaW1hZ3BhcnREb3duTGVmdFRlZWd0cXVlc2d0cXVwcmVjbmFwcGNpcmNsZWFycm93bGVmd3JlYXRoO2NlbXBidWxyZmlFYWNmYWxsTGVmdERvd25WaW1hdGhuYW5HSmN5O05vdExlc3NHcmVhdGVybHN0cm9wbHVzO2JpZ29kb3Q7R2ZyO2RhZ2dlcm5zdXBzZXRlcWN1cGxyaG5ocHZ6aWdscmFMb3dlclJpdXJpbmc7d2ZyS0hjeW9tZWdhTGVmdFVwVmVjdG9yQnhvcGZHcmVhdGVyU2xhbnRFcXVhbExlZnRUZWVWZWN0b2dyYXZlblJpZ1RSQUREc3Ryb2s7bGF0YXNtYWxsc2V0bWluUHJlY0xvbmdSaWdodEFyaWdodGxlZnRPcGVuQ2xlc2RvQWJyQWJyZXZlWUljeVJpZ2h0QW5nbGVCcmF6Y2Fyb247Z3RyZXFxbGRpYW1vbmRzdXRpbGRlbmVMZWZ0VHJpYW5nbGVCYXRjZWR2YXJ0cmlhbmdsZWxlZWRvbG9icmtkaGFycmRvd25kb3djaXJjZXE7ZGJsdmFyc3Vic2V0bHRjSXRpQ3Njcjtsb25ncmlzY3BvbmFwb3NqbWF0aGRyYmthcm93WmZBZ3JhS2NlTG9uZ0xlZnRSaWdodEF6d25qO2pjaXJjaXByb21pZGZlbWpzY3J2YXJrYXBwdmVydGJpZ29wU2Z2YU5vdFB1b3BmbnZydHJpZW9pbkRvd25SaWdodFZlY3RvcjtMZWZoc3Ryb21pZGFzUHJpVEhPUk5wbHVzc2lyYXJyZnNwaGk7c3VwaHNvbDtsZWZ0dGhyZWV0aW1Ob3RTcXVhcmVTdWJ0ZWxyZWNzemxpZ0lKUHJvZHVjdHJpcGx1c1ZlcmJhcjtiY3k7bGVmdHRoTGxlZnRhcnJVcHBlaWlpbk5vdEdyZWF0ZXJGdWxsRXFuc21pVmVydGljYWxUaWxkZVJhY3V0ZTtwcmVjYXB1YXJWZXJ0aWNhbFNlcGFyYW9sYXJycm9hbmdzcWN1cHNzaHk7aW9nb247bmhwYUdib2hob29rcmlnaHRhcnJvd2JhY2tjb25zY2VkZG90ZXE7bm9wZjtCdWN1cGJyQ29sb247SnNlVXJkYWdnZWR6aWdPbVNob3J0TGVmdEFycm9SaWdodERvd25WTGVzc0dyZWF0ZVVwc2lsb247TmVnYXRpdmVWZXNhY3V0ZTtjdXJ2ZWFyckRvcGY7Y2Fyb247Tm90RXFCckRvdWJsZUxvbmdSaWdodEFycm9SaWdodEFycm93TGVmdXBzaUNPUFlwbU5vdFRpbGRlRXF1YWxTdXBsdXNhY2xyaGFyO2xvbmdsZWZ0cmlnaGFwcHJvb3RpbGJwcmltZTtudmdlO0NlbnRlUmlnaHRBcnJvd0xlZnRpbm9VbmRlckJyYWNEb3VibGVEb3duQXJyb3dlcXVhbGxybTt5Y2lyYztEb3VibGVDb250b3VySWNkb3Q7UkJhcnI7dkJhcnY7VGhlcmVmb3JlO2Jzb2xhZW1wdHl2O05vdERvdWJsZVZlcnRpY2Fsc3Vic2V0bmVxY2lyY2xlYXJyb3dsRGlhY3JpdGljYWxHcmF2ZTtOb3RMZXNTaG9ydFJpZ2h0QXJyb0NlbnRlckRkZGFnVHJpcGxlRG90U2hvcnRVcEFycm93O05vQnJsZWZ0ZWZob29rcmlQcmVjZWRlc1NsYW5ib3hEbDtOb3RSaWdodFRyaWFuYmlnb3RpbWVzO1N1YnNldEVxdWFsO2lpbmZpbjtsZXNzc05vdEVxdWFsVGlsZGU7UWZyO2tqbGVmdHJpZ2h0YXNxY2F0b3Bib3Q7dG9lbGx0cmlKb25ydHJpZTtDb3VudGVOb3RFeGluZ2VxO3R3b2hlYWRsZWZ0YXJydHJpYW5nbE5vdFN1cGVyc2V0RXF1YWw7ZXhwZWN0YXRpb25Vb2dvZnJhYzM4O0xvbmdyaWdocmF0aU5vdFJpZ2h0VHJpYW5nbGVFcXVhbERvdWJsZUxvbmdMZWZ0UmlnaHRBcnJvU3F1YXJlSW50ZWJuZTtFZmJyZXZlO0xlZnREb3duVGVlVmVjdExlZnRBcnJvd1JpZ2h0QXJycnRpbWd0ZG90O0FicmVuc3Vwc2V0ZXFxO29hc3RJZkxlZnRyaWdodGFsb3RpbWVzO2hzdHJva3N3amNpcm11bWFUaWxkZUZ1bEhhdDtsbGNvcm5sbWlkb3RkaXZpZGVsSGFydm9wZnJhYzE2ZWU7ZnNRc2NyaGFycmNpbGNlZGxlZnRoYXJwb29uVXBBcnJvd0Rvd25PYWN1dGU7UmNlZGlsanNlcmNMZWZ0UmlnaHRWZ3Ryc2ltZG93bmhhcnBvb25yaWdodHJhdGFpbDtudmRhc2xlZnRyaWdodHNxdWlnYWJpTm90VGxvem5vdGluO2xmbG9vcjtOb3RMc3Vwc2V0bmVxYW5kc2xvcGU7TG1paWlpaW5wcnVyZWxBYnJldmU7UmlnaHRBbmdsZUJyTm90RG91cmF0aW9ucGk7cnRocmVlaHNsYXNxdWFhZ3JhdmU7RG93blJpZ2h0VGVlVmVjdG9yVnNVdGlsZGV3ZWRiYXJzZWFycm9Ob3RMZXNzTGh5YnVsbGN3Y29uR3JlYXRlckdyZWF0dWZFcXVhbFRpbG9wTXNjbGxjb2d0cmxlc2x2ZXJ0bmVwcmVjbmVxcTt3ZWRiYXI7UmFjdVVwVEludmlzaWJsZVRpdmFydHJpYW5nbGVya2N5O0xlZnRBbmdsZUJydmVlYmFJb3Buc3Vwc1hzZ2Vxc2xhbnRuYnVtcG5MZWZ0YXJyYXBvbnNob3J0bWlkSmNpcmNyY3ViO0Rvd25MZWZ0UmlnaHRWZWN0b3I7Y3VydmVhcnJvd3J2YXJ0cmlhbmdsZXJpZ2h0O2JveHY7bEJhcmJlbXB0eXZhbmR2bGN1UmlnaHRVcFZlY3RvcjtKc2Jsa2N1cmx5dmVlY2x1YnNkdERpYWNyaXRpY2FsVGlsZGU7Z2ZFZ2NpcmNsZWFycm93bGVSaWdodEFycm93TGVyYW5nbGFtYnhvdGltZTtuYXBFO0d0RG93bkxlZnRWZWN0b2JveHZyO1ByZWNlZGluZmluO252YXA7cGFyc2ltbWludXNkdTtyaWdodHRocmVldGltZXNzdHJhaWdodGVwc2lsTm90TGVzc0dyeHV0cmlxdWF0TGVzc0VxdWFsR3JlYXRlcmRsY29ybmhzY3JuR3RkaXZpZGU7ZmVtYWxMZWZ0VUhzdGJsYWNrdHJpYW5rY0REYm94aHU7emRvdExlZnRGbG9vcjtsdHF1ZUxhY3RlbHJlYztzdXBzdWJEb3Q7c2xhcnJ2YXJzY2FwY3VwTmVnYXRpdmVUaGluU3BhY2U7UmlnaHRBcnJvd0JhcjtpdGlsc2NuYXBHcmVhdG1hY3JsYXJyO05vdERvdWJsZVZlcmlnaHRsZWZ0aGFycG9vbkxlZnRBbmdsZUJmcmFjMzRwcm5SaWdodFRlZVZlR3JlYXRlckZEaWFjcml0aWNhbERvdWJsZXBsYW5Ob3RTdXBlcnN0YnJrbGFlbXBuamNTdWNoVGhvckNvbmdyaWdodGFycm93dGFTcXVhcmVTdXBlcnNldGltcGVkO0xlZnRDZWlsaW5nbGJyYWNlUWZycmJibGhhcnN0cmFpZ2h0ZXBzaWxvbjtPbWVkYmtndHJhcHByb3hzdWJkb0dicmV2ZTt0aGluTm90VGlsZGVGdWxsRXF1Tm90TGVzc1NWZGFzcG9tYXJrZXJjd2NvZmZsbGlnbGU7b2dhbmdydHZiZDtpbmZpbnRpUm9wZjtvcnNsb3NoY1ZlcnRpY2FsQnJlYWx2YXJzdWJzZXRuZXE7UkJib3hib3hIdW1wRG93bkh1bVRoaWN1bG5hcHByb3hOb3ROZXN0ZWRHcmVhdGVyR3JlYXRuc3VjY0Rhc2h2dmZyb2FjdXRlZW9nb25tYWNpbnRjYXFvcHVwaGFycG9SaWdodFVwRERpYWNyaXRpY2FsRG90O0hpbGJlcnRTaW50O05lc3RlZEdyZWF1bXZhcnJob01lbGxpbnRVcHBlclJpZ2hkaXY7YnJ2YmFyY2lyY2xlYXJyb3djc3VwZVN1Y2hUaGFWZXJ0ZW1yb3Bmc3FzdWJzZXRlYWFjdXRFcXVhcmF0YWlWZGFzaE5vdEV4aXN0Y2lyY2xlYXJyb3dyaWdodG1hcHN2YXJ0aGV0YXRyaXBsc3FDbG9ja3dpc2VDb1VuZGVyUGFyZXVsY29ybmVtY3k7RG93bkxlZnRSaWdoYmxhY2t0cmlhbmdsZXJpZ2Fjd2lMZWZ0VXBEb3duVmVjdG9yRXRyb2JqY3lTbWFsbEdmcnR3b2hlYWRyaWdodGFycm93O1pIcHJvZmxpbmRsZ2VzbDtQaTthbmRhbmdlcXFMZWZ0VXBUZWVWZWN0b3I7cnJhcnI7c2Nhcm9uO09wZW5DdXJseURvdWJsZVFCZWNhdUljaVRvcFJldmVyc2VFbGVib3h1clByZWNlZGVzU2xhbnRFcXVhYnVtcFJpZ2h0RG91YmxlQkdKY2N1ZXNjO1dvcGZOb3REb3ViTmVnYXRpdmVNZWRpdW1TcGFjZWxyYXJyYXJpRGZybnN1YnN0aW1jc2NyT2ZyQ29udG91c2NpcmM7RXNjcjtOZWdhdGl2ZVRoaWNrU3BhY2U7Zmx0bnM7RW1wdHlWZXJ5U21hbGxzaW1sVmVydGljYUNvbnRvdXJJbnRlZ3JBYXJydWRoYUFwcGx5RnVuY3RlbGNhcDticHJpT3NDcm9zcztwaXZzdXBzaWNpVW1TY3k7d2VkZ2U7VmVlO0RvdWJsVGlsZGVUaWxkZTtwcmVjY3VybHllcTtpc2luZG9lcXNsYW5BcHBhbWFuTGVmdHJpZ2h0YXJybnByZWNlcWx0cXVlc05vdExlZnRUcmlhblJjYXJvc2ltcHh2ZWVwY2ltb2Y7emZyO1N1cGVyc2VlcWNJZnI7YmlndmlxdWVzdDtsZXNuZWFycm9kb3RzcXVOYWNucmlnaHRhcnJvd2Rvd3BjeWpzVW9wQWN5Y2FwYnJjdXNmcm93bnByZWNuYWRvdDtMb25nUmlnaGJveHVSO2ltYWdwYXJ0O3JhbmdlO3JiYnJrO25SU0hjckJhcnI7bHRpbWVzO0hBUkRjeXJlTWZMb25ncmlnaHR0cmlhbmdsZXJpcmJya3NsZDt4bGFycjtEb3VibGVVcERvd25BcnJvd3Jtb3VzdGFTdWJzZXRFcXVhcmlnaHRsZWZ0YXJyb3dzRGlmZmVyZWdsRXFpbmNpcmNsZWRhc2RlbXB0eXZwbHVzdHdib3hWSDtCZWNhdXNlO05vdEh1bXBEb2xlc3Nkb3N0cmFpZ2h0ZXBwb3VuZDtOb3RFcXVhbFRpbGROb3RTcXVhcmVTdXBlcnNldHBlcmNYaW5WRG53YXJyYXRhTm90U3VjY2VlZHNTRG91YmxlVmVydGlzdWJtdWNpcm1tRERvdG1ucHdlZGdlcTtOZXdzd0Fycjt2YXJrYXBwYTtTT0ZUTGVmdFJpZ2h0VmVjdG9ybWFwc3RvZG93bjtOb3RTcXVhcmVTdXBlcmR0ZG90O0xtaWRvdGdpT3RpbWVBcHBseUZ1bmN0aW9uUHNjcjtFbGVCZXJ2QXRvcGZvcmtsZWZ0cmlnaHRoYWNjdXBzVXBBcnJpZ2h0bGVmdGhydWx1aGFFZ3JhdmVubGVmdGFycmRvdWJsZWJhcnZCYVBzaWVsaW50bWFwc3RvdXN1cGVkb3Q7ZG90c3F1cmNybGVmdGxlZnRhcnN1Y2NjdXJseWVxO3BhcmFjaXJjbGVkZGFzaHZhbmdydGxvb3BhcnJvd2xzY25zaW07U3VjY2VlZHNFcXVhUnJpZ2h0YXJyb3duc3FzdXBlbWlkY2lyckJhVFNjeVJpZ2h0QXJyb3dMZWZ0QXJ2YW5hbmdtc2RhZU5vdEVxdWFsVGlsZGViYWNrZXBzaWxvbmRvbGxhcnBybnNEaWFjcml0aWNhbERvdWJsZUFjdWFhY2RpZ2FmcmFjMThsYXJyYmZzbnVtc0xlZnRyaWdodGFycm93O0NoaTtOb3RQcmVjTm90VGlsZGVGdWxFbGVtZW5jdWRhdnN1cG5FSWRvdGxvbmdsZWZ0cmxlZnRyaWdodHNxdWlnYXJic29sYjtubGVxcTtjb3B5bGJhb2dyYXZlO0VtcHR5U21hbGxTcXVhcm9wYXJjZWlsbG9vcGFycm93bGVmcmFxdURvd25MZWZ0UmlMZWZ0VXBUZWVWZWN0b3JyYW5nbGVEZWw7Z3REb3VibGVSaWdodENpcmNsZVBsdXNMZXNzRnVsbEVxdWFyaWdodHRocmVnZXNkb3Q7SXVtbGJhcnd1ZGFwaWQ7TGVzc1RpbGlvcGY7YW5nbGFtYWxnO2dpbWVFbXB0eVNtYWxsU2dlcXE7TmVnYXRpdmVUaGRia2FyRmlsbGVkU21hSW52aXNpYnBsdXJmaXNoTm90RG91YmxlVmVydG9zc3Vwc3Vudmx0O1VwRXF1Q29uZ3J1ZW50O0tjZWRpZ2ZycHJvZmFob29rbGVmdGFyTGVmdHJmcmFzbDtGc2Nycm1vdXN0YWNoZTtSaWdodERvd25UZWVWZWNhYztDbG9ja3dpc2VDb250bHNFY2Fyb1JvdW5kSW1wbGFtRGlhY3JpdGljYWxBY1FVT1REb3duQnJldmU7bmxlTm90RG91YmxlVmVydGljYWxCYU5lc3RlZEdyZWF0ZXJHcmVhdGVyO2Jicmt0Y2VudGVyZG91b3BzdXAzZURvdDtjdXJseWVxc3NyYXJKc2NyO2RibGFjY2lyY2xlYXJWZXJ0aWNhbFRpbGRzcXN1cHNldGVic2ltO3NwYWRlc0RvdWJsZVVwRG9ERG9sdXJkc0JhTG9uZ0xlZnRBc2NuYXA7SWdyTG9uZ0xlZnRSaWdodEFybkxlZnRhcnJvd3ByY3VlO1VicmV2ZWdvcGxBdGFpUmlnaHRGbG92YXJwaUZpbGxlZFZlcnlTbWJzaW1lO3Zuc3VwYm94RHI7c3ViZWRvcGhpdkxlc3NkaGFtZnI7a3NjckNjb25pbnQ7SG9yaXpvcmFjdXRlO05vdFJpZ2h0VHJpYW5nbGVCVXBzaWxvTm9CcmVhazt0cHJpbWVkc2NEaWFjcml0aWNhbGRvdWJsZWJiTm90O250bFRyaXBsZURvbHNoO2NvbXBsZW1lU3Vic2V0RXF1bG5lcXF2bnN1Tm90TmVzdGVkR3JzaGN5T2NpcmNFb3BiaWd0cmlhbmdsZWRUaWxkZVRpbGRlU3VwZXJzZXRFcXVhVWFycm9jaXJhbmRhYm5lcXZ6aWd6YXhuaXM7RERvdHJ2YXJ0TGVmdERvdWJsTGVmdFRyaWFuZ2xlRXF1Tm90UHJlY2VkZXNTbGFuQWdyYXZldmFybm90aGluZztkZG90c2VxYkxlc3NTbGFudEVxTXNjcjt1ZnI7YW5nbXNkYWdsbGNvcm5lc29sYmFEb3VibGVMb25nUmlnaHRBcnJMZWZ0UmlnaHRBcnJvdmRhc2hvbXJhbmc7Tm90TGVzc0xlZGRhcmxhZ3JOZWdhdGl2ZU1lZGloYXJydztsRWc7bGVzc2dJbnRlcnNlYnVsbGVOZXN0ZWRHcmVhdGV1cGx1cztGaWxsZWRTdmxldnByb3A7dHJpc2JJb2dubWlsQmFyclRoZXRhO3h3ZWRnZWh5YkxlZnRUcmlhbmdsZU5vdExlc3NUaWxkZTtEb05lc3RlZEdyZWF0ZXJxb3BmYmxhY2t0cmlhbXVscHJuc2ltO2NoZWNrO3BybkVtaWRhc3RjdWxhcnJwO0Rvd25UZWVBcnJvZXVnbmU7bWFwc3RvbGVmdDtSZXZlcnNlRWxlbWJsb2NDbG9ja3dpRG91YmxlUmlnaHRBcnJvdztwZXJ0ZWxlc3NhcHBkaWdhbW1zbWVwYXJJbnZpc2libGVUYWJyZXZlO2VuZzt0b2VhO2xtb3VzQ2NhckZvdXJpZXJ0cmZsbmFwcHJvbmdlcztFcXVpbGlibmxhckRvdWJsZURvd25BcnVwaGFycG9vRW9nVXBFcXVpbGlicml1UHJlY2VkZXNTbGFMZWZ0QW5nbGVCcmFja2V0Ym94VlJOb3RHcmVhdGVyVGlsZGV2c3VibkU7Y3Rkb0NvcHJvZHVjdGRyY0xvd2VyTGVmdEFycm93bGhibGtJbWFnaW5hcnlJO3Nxc3Vic2V0ZXE7bm90aW5jYXBicmJveHRpbW1vZGVsc0JzY1RpbGRlRXF1YU5vdFZlcnRpY0xvbmdsaGNpcmM7Y2N1cHByZWNlcVpldGE7Tm90VmVydGljYVNob3J0TGVmdEFPdGltZXM7TGVmdERvd25WZWN0bnRnQ2xvc2VDdXJseURvdWJsYnNvbGJyYXF1bztDb3BmbWludXNHY2lvcGx1V2NlUGx1c0RvdWJsZUxvbmdMZWZ0UmlnSU9jeW5hdHVyYXZlZTtVcGRvd25hcnJvdztGb3VEb3duUlRjZWNoaTt0cmltaXJhcnJhQ3VwQ2FwTG9uZ1JpZ2h0QXJkZW1wdHl2O25wcmVjO0xlZnREb3duVGVlVmVjdG9yO05vdEh1bXBFcW5vdGluZG90bHRyaWVTcXVhcmVVbml5ZnI7SmZyO3JlYWxpbmU7ZGl2Ym94cGx1c0tjZWRpbGhlcmNsb3BhcmR1aGFySW50ZVRoaW5TcHJyYXJpZ2h0YXJwbHVzdHdvO0NpcmNsZVRpbWVOb3RSaWdodFRyYWZyO2xhcVdzY3I7dHdvaGVhZHJpYmZsZXFMZWZ0RG91YmxlQlNob3J0TGVmdEFycm93ZXF1aXZERFN1Y2hUaE5lc0xhbWJPY2lyRXhibGFja3RyaWFuZ2xlZElKbGlnVXBBcnJvd05vdFN1cGx2ZXJ0c2ZXc2NybGVzZG90ZXhwZXJpZ2h0c3F1aWdhdUFOb3RTdWJzZXRmcGFydGlTdWI7Tm90SHByZWNuYXBwcm94Tm90VGlsZGVUU3Njcm9jeTtEb3duYXJyb3dubHRyaXJwYXJubGVmdGFycm9ucnRTT0ZUY3k7WkhjbnNxc3ViZUVtcHR5U21Ob3RHcmVhdGVyRkNlVG9wZjtVcERvd25BcnJvd3RpbWVzZGhrc2Vhcm93Q291bnRlckNsb2Nrd2lzZUNvbnRjaXJtaWQ7ZG90ZXFkb3Q7ZW9wcmFycmI7ZGJsYWM7bXU7Tm90SHVtcEVxdWFsaW50cHJvZGNpcmNsZWFycm9SZXZlcnNlRXF1aWxpYnJlemFjTGVmdERvd25UZWVWRG91YmxlTG9uZ0xlZm9oYmFyO05vdE5lc3RlZExlc3NMbGFuZ2Q7bmdzaW1hc3ltcGVxO2xjZWlsbGVmdGxlZnRhcnJwcmVjYXBwckVxdWlsUGZybHVydWhhdG9wO2xvd2FzdHZhcnRobG9vcGFycm93Y3VybHllcXByZWNydWx1dHJwZXppdW07RGlhY3JpdGljYWxBY3VMZWZ0QW5nbGVCcmFjaW1hZ2xpbmU7Tm90TGVmdFRyaWFuZ2xlRXF1YWxOb3RWZXJ0bG9vcGFyQXBwbHlGYW9nT3BlbkN1cmx5UWJpZ3N0YXI7ZXF1YVByb2R1QWxjdXJ2ZWFycm93bGVpaW5maW9kaXY7bGVzc2VxZ3RyaXVtbGVxdWl2cGxhbmNraDtOZnNxdWFyZm5lYXJyb3dDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGxhdGFpaW50ZXJibGFja3RyaWFuZ2xlbGV0cmlhbmdsZWRvd2JsYWNrbG96ZW5pb2dvYWN1dElPY3k7TGVmdFVwVmVjdG9yO2R6Y0ZpbGxlZFNtYWxsU0NvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWxsdmVydG5lcXFwb3VucmRsbnBvbGlsQWFyY29wZjtsbDtQcm9wb3J0aW9udWRic2Vhck5lc3RlcmVhbHBiaWdzdGFyTm9uQnJlYWtpbmdTcHZhcmVwc2lsb01hcDtsYXJyaGt0b3BmO2duc2duZXFudHJpYW5nZG93bmhhcnBvWWN5Q2lyY2xlTWludXM7RG93bkJ0aGlVdGlsZGU7RG93blJpZ2h0Vk5lZ2F0aXZlVmVyeVRoaW5TcGFjZVVwRXFhYnJlc3VjY2N1ck5vdFNxdWFyZVN1cGVyc2V0O05vdExlc3NFcXVhbHRzYXBwcmFycmxVYWN1dGVUc3Ryb1JpZ2h0QW5nbGVCcmFja2VzdWJzdXF1YXRpbnRERG90cmFibGFja3RyaWFuZ2xpb2N5SGF2ZWVOb3RTdWJzZXRFcXVhUmlnaHRVcFZlY3ROb3ROZXN0ZWRHcmVhdGVMb25ncmlnbnZyQWFuZ3phdHdvemNhcm9ubGVmdGhhcnBvb251cDtjc3ViZTtsb3plbmVncmF2SmNpcnRpbWVzbmdlcXE7cmJya3NsdVlvR2FtbWFkO21hcHN0b2xlZnROb3RTdWNjZWVkbHNxYjtudmluVWJyY1BmUmZycXVhRG93bmFycm9Ob3RSaWdodFRyaWFuZ2JuZXF1dGJyaztMZWZ0Rmxvb3JkYmthcm93O2ZyYWMyNTtyQXJyTGVzc0VxdWFsR3JlYXRjeWxjdHk7Tm90TGVzc1NsYW50RXF1YWxDb3VudGJzaW1jdXJseWVxcGxjZWRpbDttYXBzdG9saXNpbnNMb3dlclJpZ2h0QXJib3hVcmZsdG50d29oZWdhbW1hZDttbGNwdHJwZXlvcE5lZ3JvcGFyRG93bkxlZnRWZXFzbGFudGd0Tm90RXF1YWJvd3Rhc3Q7anNjQ2xvY2t3aXNlQ29udG9kZWx0YTtuc2hEaWFjVWFjdW5zdXA7Tm90R3JlYXRlckdyZG93bmhhcnBvb25sZWZTaG9ydFJSY2F5YWN5cmVhbHM7VXBzRG91YmxlTGVmdEFycm9scmNvcm5lU0hjeTtkcmNyb3BvdGltZXNhc3VwYXJyTmNhcm9wbGFjdXJseWVxc3VDbG9ja3dpc2VyQWFycjtzaG9yTG9uZ0xlZnRSaWdoRXF1YWw7bG90aW1lc2hvcnRtaW5WcmxoYXN1Y2Nuc3NxY3VwO0RvdWJsZVJpZ2h0QXJyb25WZExjZXBvaXJlYU5lZ2F0aXZlTWVxY29sRGVsdGFkcmJjdXJhcnJtbmVhcnJvdztMZWZ0RG93blZlY3RvckJSaWdodERvd25UZWVWZWN0b3Jub3RpbnZjYXBwclJvdW5oYXJkbnZkYWJsYW5rO2FuZGFuZFJpZ2h0VHJpYW5nbGVFY2VwZXJpb2Q7RG93blJpZ2h0TGxlZnRBTVA7bmN1cDtyaXNlZWJlbXBPdmVyUGFyZW50aGVzaWVxY29sb247Rm91cmllRG91YmxlVXBEb3duQXJyb3c7T3ZlckJyUmlnaHRBcnJvd0xlZnRBcnJvdztuZXF1aXhvZG90O3Nob29mRG93bkxlZnRUZWVWZW5jb25nZG90O3ByZWNjdVJpZ2h0RG91YmxlQnJhYmFja2VlcXVpdjtsaGFydXBsdXNjdHJpZG90cmFlbXBDdXBDYW5wYXJhbGxlR3JlYXRlclNsYW50dnJ0cmlWb3BmO3ZBcnJlbGluVmRhc2N1cGNhcHNjYXJvbmxvejtVcmluanVrY3k7bGVzZG90b3I7Tm90U3Vic2V0RXF1YWxCZnI7V2VkaW50Y0VjYXJvbkRvdWJsZVJpTm90U3VwZXJzZXRFcXVhbHZhcnN1cG9jaXI7dm9wZjtkaWdhbWJveHBsdXJpbmdSaWdodFZlY0thYmxhY2tzcXVSaWdodERvd25UZWVWZWN0Tm90UHJlY2VkZXNTbGFudEVxdWFzdXBkb09mcjtycnRoaW5zb2hiRmZ2YXJzaWdtcW9wZjthcDtEaWFjcml0aWNhbEFjdXRlZXVyaG9va2xldXBoYXJwb29uTG9uZ0xlZnRSaXlhY3V0bnZydHJpT29wZjtESmN5TnRpbGRlO3JzaDtEc2NyYm94cGx1VXBUZWVBcnJvdztsYXRlO1VwRXF1aWxpYnJpdW07Y3V3ZUNycGFyZ1ZlcnRpY2FsTGluZXFwZWdyT21lZ3RwcmlFbXB0eVZlcnlTbWFsbFNxZGFsZXRTb0hvcmljdXJseWVxcHJlYztnZXFuZUFycjtjY2FwczthbmdzcGg7aG9hcnNob3J0cHJicmFja2JveGhVO1N1Y2NlZWRzVGlsZHJBdEFhY3V0c2NjdWVVcFRlZTtEb3VibGVSaWdodEFsc2ltbnRyaWFuZ2xlcmlnaHRTcXVhcmVJbnRlcnNlY2hmcjtjYXBkb3Q7TWllY3lBY2lsZWZ0YXJyb3c7SWZyZnJhYzU4O1BvaW5jYXJlcGxPcGVuQ3VybHlRdW90TGVmdFRyaXBoaXN1cGRhZ05vdFN1cGVyc2V0RXFaYWN1dGVZQW5hdHVyYWxzO2xicmtlO05vdFN1cGVyc2V0RXF1YU5vdEdyZWF0ZXJHcmVhdERpYW1vaWluc3VjY2FwcHJlY2FDb2xvbmVEb3VibGVSaWdodFROZWdhdGl2ZVRoaW5TcGFjZWluZmlzbWVwYU9ncmF1ZmxhdDtFY2Fyb247QWxwaGdzaW1saGVhcnRzQ29udG91ckludG9sY2lyO1plcm9XaWRsbGhhdXBhVmN5Tm90UHJlY2VkZXNFcXVhU3F1YXJlU3Vic2V0ZXVtbENpcmNsZURSb3VsdGxhcnI7TGVmdFVwRG93blZlY3RaZXJvV2lkdGhrc2Vhcm93O0RvdWJsZURvd25Ba2FwY2lyZm5pbnQ7Y2lyY2xlZGRhc2FuZ3N0O3phVXBwUmlnaHRUZWVBcnJvbGVmdGhhcnBvb25kdHJwZXpudW1lVXVtbExlc3NUaWxkZTtVZGJsYUxlZnREb3VibGVCcmFja1VwcGVyTGVmdHNoY3k7QXNzY3lob29rbGVmdHJhZWxlZnR0aHJlZXRpbWVJZG90O3N1Y2Nuc2lOb3RSaWdodFRyaWFuZ2xlRXF1YWw7RG91YmxlRG93bkFycnJhdGlvbmFsc2N1cmx5d2VkZ2U7ZHpjeTthc2NycmNlaWw7a2ZyO1Byb3BvRGlhY3Jsb25nbGVmdHJpZ2h0YXJwYXI7cmxhYmVjYXVzZWN1cmx5ZXFzdWNjO3ZkckFhckxvd2VyUlJpZ2h0VGVlQXJpbnRsYXJoa1RjZWRpbGVzc2FwcHJSZXZlcnNlVXBGaWxsZWRWZXJ5U21hbGxTT3BlbGRyZGhhcjtBZ3JhdmRvdG1ubEFyclN1cGVyc2V0RVNxdWFyZVN1cGVyc2V0RXF1YWxlcmFycnNjdWFycjtybGFyck9jaXJjO05vdERvdWJsZVZlcnRpY2FsQmFyeGNpcmM7dHJpYW5nbGVsZWZ0bG93YmFyO2xhZ3Jhbjt2YXJzdXBzZXRuY3VwY3N1cDJrZ3JlR2ZoZXJFcXVpbGlicml1bWJpZ3NiZXJub2xhdGVzO1JyaWdodG11bWFwRG91YmxlVmVydGljYXR3b2hlYWRyVXBEb3duQXJSaWdodFVwRG93blZudmx0cmZhbGxpY2Nhcm9uO01mcjtpdGlsZEx0cGZyO3ZzY3I7SWdyYXZib3h0aW1lcmlnaHRsZWZ0aGFudmFmcmFjMnF1YXRlckNvbnRvdXJJbnRlZ3JramNoQWJlY2F1c0RvdWJsZVVwQXJyb3dpbXBlYmZyO05vdEdyZWF0ZXJTbGFudERvd25MZWZ0VmVjdG9yQmFuTGVwcm9mbGluZTtLZkxlZnREb3duVmVjdG9yQ29Jc2NzdWNjbmFwcHJyaWdodGhhcnBvb25kb3duO0Nsb2Nrd2lzZUNvbnJpZ2h0cmlnaHRhcnJvWmN5O3VsY29ybnBtO2J1bGxhbmdtaW51cztSaWdodERvd25WZWN0b3JCb3JkbXJwcG9hbGVmc3lzdXBwbHVyaWdodGhhcnBvb251cDthb3BmZXF1YWxzO1JldmVyc2VVcEVxdWlsaXNldG1ueHdlZGFtYWxSYWN1dERvdWJsZUxvbmdMZWZ0UmlnaGNvcGZQcmVjZWRlc0VxdWFSaG87TG93ZXJSaWdoZWdzZG9lYWN1dG5sZTtuUmlnaHRhZW9nb09tYWNsZXNjYztUaWxkZUVxdWFsYnNvbENvdW50ZXJDbG9ja3dpc2VDb250b3V1ZGhhcjt0ZG9TdWNjZWVkc1NsYW50RXF1YWZjeU5vdExlc3NTbGFudEVxdWFuaEFycjtQcjtHcmVhdGVyR3JlYXRlZXBsTmFjdXRSaWdodFRlZVZlY3RvclRpbGRlRnVsbEVxb2N5bG9wbHVlY2Fyb25ydHJpZXRycE5vdFJldmVyc2VFbGVzZXR0c2NyVWJyZWxhbmdsZTtucGFydGFuZ21zZGFhO3JjZWRpbDtwZXJwbm1pZDtiYWNrZXBzaWxvbjtDY252bEFyQ2ZSaWdodFVwRG93blZlY3Rvb2NIdW1wRG93bkh1bXA7bHJtbGVxc2xOb3ROZXN0ZWZyYWM3YXdOZWdhdGl2ZW53YUNvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWw7TGZybHNpbWdpbnRsYXR3b2hlYWRsZWZ0YXJyb3c7Q29uaW50ZHN0clJ1bGVEbWRhc2g7Tm90R3JlYXRlclNsYW50RXFIb3Jpem9udGFsTGlpc2luaW1hZ3BhQ3NjclNjaXJjZm9ybXA7WXNjcmxhbWJkYTtiaWd0cmlhbmdsZXVwc2NuRWdjaXJjO3RoaWNrc2ltR3JlYXRlckZ1bGxFcXVhbGx0bGFycmlxdXRyaXNiO3JpZ2h0cmlnc3dhcnJvd25hcG9zO1JpZ2h0VXBWZWN0b3JCYXI7UmlnaHRVcFRlZVZlY3plZXJwcG9saWxlZnRoc3psRW95Y3k7U3VwZXJzZXRFcXVhbDtjaXJFR3JlYXRlclNsYW51Z3JQYXJ0aWFudW1zcHRyaWFuZ3BlcmlSaWdodEFycm93TGVmdEFIb3Jpem9udGFsTGluZTtib3hVUjtDb25pbnQ7T2Rib3JvREQ7U09GVGN5Tm90SHVtcERvd25oZXJjb250d29oZWFkcmlnaHRhcnJ1c2NyWG9wZmdlcTtQcm9wb3J0aW9uYWw7cXByaW1lO253bmVhcmxlc3NhcHByb3g7Rm91cmllcnRybmxBcnI7dXVhUGx1c01pb3BsbHJ0c3VwbnJpc2luZ2RvUmlnaHRBbmdseGxhY29tcGZuO0dyZWF0ZXJFcWJveHZlc2NyO0lKbGlnO21pZDtlcXNpbWh5cGhEb3VibGVDb250b3VySW5pbnRlZ2xmaXN4c3Vic2lwcmVjbnNpbTt4aGFycjtiaWd0cmlHcmVhdGVyTGVkSGFzdXBuZWNpcmR3UkVHO3JkY2JveGhETnNsZXNzYXBwcm94SW50ZXJzb3VtbGRvd25hcnJvRW1wdHlWZXJ5U0NIUG9wZjtXZWRnZW9pbnRvdnVsY29ybmVyO0NvbnRvdXJJbnRlZ3JhbDtSaWdodFVwVGVlVnZkYXNoO3NjY3V0cmFkZTtmYWxsaW5nZG90Y2ZyO05vdFNxdWFyZVN1cGVyc3VsdHJpTm90VGlsZGVGdWxsRXFMZXNzRmJveHZIdHdvaGVhZGxlZnRhcnJvVXBzaWxvbkFFbGlrZ3JlZW47bHRyUFZlcnRpY2FsVGlramN5O0xhY3V0ZXN0cmFpZ2h0ZXBzaWxvblJpZ2h0Rmxvb3I7RW1wdHlTbWFsbGlvdGE7YXBwcm94RG91YmxlTHplZG91YkRpYW1vbmQ7Zm9ya3NjY3VlO2x1cmRMZWZ0VXBEY2NpcmNyc2hMZWZ0RG93blZlY3Rvcjtsb3dhbmhWZnN3YXJoVW5pb247V29Mb25nUmlnaHRBcnJvdztwcmlFcXVpbGlDaXJjbGVNaW5qY2ltb2RlZmVtYWxlZG93bmhhcnBvb25yaWdodDtWZXJ0O1FzY3NlQXJWZGFzaGw7bnZydHJTdWNjZWVkc1NsYW50RXF1blZkYXNoc3FjUmlnaHREb3duVmVjdG9yQmFybHJ0cmh5YnVjdXA7SHVtU2hvcnREb3duQXJyb3c7c3ViZWRuc3Vwc2V0SmN5aXNpbmRidW1wRURvdWJsZUNvbnRvdXJJbnRlZ3JhbHNleHRudkhhVmJEb3duYXN0cmFpZ2h0R3JlYXRlclRzdXBwbHVzO05lZWNvbHF1YXRlRmlsbGVkU21hbGxTcURvd25MZWZ0VGVlVmltYWdsT3BlbkN1cmx5RG91YmxlUXVvdGU7T2ZsbHRybHNxdW9yYmthcm93dmFycGk7b2FzdDtFeGlzdHNMZXNzRXF1YVNxdWFyZVN1YnNldDtlcmFycjtkamN5VGhlcmVmb3JldmFycjtNZU5vdExlZnRUcmlhbmdsZWFuZGRvbGNyb3NyYXJyYXBTaG9ydExlZnRBcnJvdztjd2Nuc3VjY2VxdGlsZGN1bGFyRmN5RG93bkFQcm5lc2VhcmJhY2twcmlDbG9ja3dpc2VDb250b3VydGNlZGlsO3VoYmxOb3RHcmVhdGVyTGVzcztib3hEUjtMZXNzU2xwcm9wdG87cGl0Y2hmb3JrO2dicmVMb3BmO2NjYXB6Y3k7Y3VydmVhcnJvaGNsYXJyc2ZmbGlQb2luY2FyZXBsYW5lO0F0aWxlbXB0eXNIb3Jpem1lYXN1cmVkYW5nbHNjaXJib3hVbDtsYXJycGxmbGF0cmlhbmdsZXByaW1TcXVhcmVTdWJzRFNjeTtFcXVhbFRpbGRlO2JlY2F1c2U7ZXF2cHhvcGFjaXJjU09hY2NhcnhvcGx1cztOb3RFbGVtZW50Ym94aHVMYXBsYUltTUVtcHR5U21hbGxTcXVhaG9tdGh0O1ZlcnRpY2FsU2VwYW5nc05vdEdyZWF0ZXJGdWxsRXF1YWxoZXJjb0lvbnBhcnQ7RG93bkFycm93RG91YmxlRG93bkFycm9uTHR2O2x0aHJlZTtDYXBpdGFsRGlmZmVyZW50ZHppT3Njck5vdExlZnRUcmlhbmdsZUVxdXNtZU5vdFNxdWFyZVN1YnNldEVxdWFuanJhcnJoazttY29tbVRvTG93ZXJMTm90RXF1YWxUaWxTdWNjZWVkc0VxdWFsTm90Q29uZ3J1ZW50O3hyZGVtY3VwYnJjYXA7TGVmdFZzdXBlZG9taWNnamNOb3RMZXNzR3JldHdvaGVhZHJpZ2hFY2lib3hoZDtwb2ludHZhcm5vdGhuYXRUY2Fyb247Tm90SHVtcERDbG9zZUN1cmx5RG91YmxlR3JlYXRlckxlc2x0aGN1dmVlTm90SHVtcEVxdWFsO250cmlhbmdsZWxlZnRlTm90U3F1YXJwcjtiYWNrcHJ0aGlja2FlZG90bG9icm5hcGlvYXNvdmJhcjtKdWtjeTtydHJpO3N1YnNldGVxQXBwbHlGdW5jdGljb25nYW1tYU9tYWNyO3ZzdXBubnBhcnNsO1djaXJjb21pYnVtcGVpaWludDtsdGRvY2FjdXRlUHJlY2VkZXNTbGFudFJpZ2h0RG93blRlZVZlY3RvRG91YmxlVXBEVXBBcnJvd0JhcjtvY2l2YXJ0cmlhbmdsZWxlZnBobW1hdDt1dGlsZGVXc2NDb3VudGVyQ2xvY2t3aXNlQ29udG91ckluQ2xvc2VpbWFnbGluZUVsZW1lbnRlcWNpcmNrZnN6dnpvb3BmRWdyaHlwaGVuRG91YmxlTGVmdFJpZ2hudGlMZWZ0VXBEb3duVmVjdG9lb3BmO2Jick5jYXJzZG90TGVzc1NsYW5SaWdodFRlZVZMYW5nVWZ2YXJzdWJUU2Nuc3Vic2V0ZXFxR3JlYXRlckxlc3M7emFjdXRlcmlnaHRsZWZ0aGFycFJ1bGVEZWxhU3VtO2ZsbGlJdGlsZGx1cm5jZWRpbGxIYW5hcHBubGVzO2Rzb2xEb3duQXJ1d2FuZ2xlO2h5cGhlRHNhY2ROb3ROZXN0ZWRMZXNzTGViZXRoO25WRGFzaDtleHBlY3RhdGlvU2ZyTGVmdGFycm9VbmRlckJyYW5nbXNkYWhsb3plU2Nhcm9uO2x1cmRzaGFib3htaW5tbGNiZWNhdXM7ZnJhc2x2YXJwcm9Sc2NyO2N5TGVzc1NsYW50eHVwRG91YmxlTG9uZ1JpZ2h0QXJOSmN5UmlnaHRybG1wcnVyZWw7SW50ZXJzZWN0aW9uTm90U3VjY2VlZHNTbGFudEVxdWFuY2VkbkxsO25lYXJoaztDaXJjbGVUaW1lcztsb3dhc3Q7cGVyY25XY2lybnNob3J0cEFwcGx5RnVuRG93bkxlZnRSR2NlZExvbmdMZWZ0UmlnaHRscmhhcmRpbnRlZ2VBbHBiaWd1cGx1c3N1cHBsdXNsb3pmQ2x0aGlja2FwcGR1YXJybmV4aXN0c29kc29Mb3dlckxlZnRBcnJvdztib3hqb3BmRXhwb25lbnRpYWxFO09FbGlnO0dyZWF0ZXJGdWxsRXFaZXJvV2lub3RpbmRvdDtJbXBsaWV1bGNvQ29udG91ckludGVic29saGluY2FyZUxlZnRSaWdodFZlY2VwYW50cmlhbmdsZXJpZ2h0O0ZpbGxlZFZlcnlTbWFsYXBhY2lyYm94dmw7QmVjYXVzZU5vdFByZWNlZGVzU2xhbnRFcGVydGVua2hiYXJQYVRIT1JlcXNsYW50bEludGVyc2VjbnNxc3ViZTtuc3Vic3VjY2N1cmxSZXZldG9lYXJiTWludXNQbHVzO3JmbG9vcjtHcmVhcmZycmFybG1vdXN0YUlFY3lsZXNnZXNyaWdodHNxRmlsbGVkVmVyeVNtYWxsc3RyYWlnaHRwRG91YmxlTG9uZ0xlZnRSaWdodEFycm93O0RvdWJsZUxlZnRSaWdodHJ0cmllO3JpZ2h0bGVmdGhhcnBvb2xvb0Nkb3ROZXN0ZWRHcnBsdXNiO2JOT3RpbWRBZ3RyYXBwbHZlcnRuZXFub3RjbHVic3VpdDt1QXJlcGx1Q29wcm9kZ2pjeTtuZXNlYXI7ZW1wY29sb247bGFjbGc7RG93bkJyZXZDYXBpdGJsYWNrdHJpYW5nbGVkb3duZXNkb3RjaXJFO1VwcGVyTGVmdEFOb3RTcXVhcmVTdXB1ZGJsbGVnO05vdFJpZ2h0VHJpYW5nbGVFWHNjcmJsYWNrdHJzZXhnZXNjYztOb3RFeHZhcnRyaWFuZ2xlcmlnaGxBYWhhbWlvYWNoZWNsc2FxdW87c2lnbWF2RmlsbGVkTG9uZ1JpZ2h0Z2xqTGVzc0VxdWFsR3JlYXFzY3I7Tm90U3Vjc3VicHNkb3RlO29saW5nYnJ1Z3JhdmU7Y3VldmFycHJvcHRvVWJyZXZlO3B1bmNzcFVhcnI7Y3Rkb3Q7dWxjcmFybmxzaW07anNlbGVmdGFycm93dGFpbGRzdEdjaXJSaWdodEFuZ2xlQmd0cXVlc3RWZXJ0aWNhbFNlbGRyc3VjY2FwcEJyZVVwcGVyc3Vwc2V0ZXFxUmlnaHRUZWVBYmlnd2NoZWNrbWFHcmVhdGVyR2xuZXE7YWFhcHByb3hlcTtzbWFsbHNldG1pUmFycjtyaWdodGxlZnRhcnJvc2R2bnN1YnN1Y2NlcTtOb3RUaWxkZUVxdWFsO2N1cnJlYm5lcXVpdnJpbndlaXN1Y2Nuc2ltO25wb2xyc2NyO3JhZGljQ2NpcmM7RGFnZ2VyO0dhbW1hY3N1cFlhY3VEb3VibGVMb25nTGVmdEFycm93O1RyaXBsZURvdDtMb25nbGVsb2Jyaztkb3duaGFycG9vbmxlZnQ7dGNub3ppZ3JhcnVwaGFycG9vbmxlZG9sbGF2YXJzdWJzZXRuZXFxT2dyYXZlO2NvbG9uZXFMZWZ0Q2VpbGluQWdTSENIY3k7YW5kRG93blJpZ2h0VGVlVmVjdG9mcmFjNzhsdHF1ZXN0Q2VkaWxsR3JlYXRlclNsZHNjeW5yaWdodGFydXBoYXJwb29ucmlnaEFjaXJ5dW1sO0FhY3V0ZWNvbmc7ZnBhcmJzaW1lSnNlcmN5YmFja2Nvbmc7eHJBcnJMZXNzRXF1YWxHcmVhdGVyO0REb3RyYWhkO1RoaW5TcGFicnZiYXI7U2hvcnRMQWZyO3Zhck5vdFJpZ2h0VHJpYW5nbGVFcXVhc2VhcmhrO29taWNyb25hYmxhO0RvdWJib3hVTDtzdWNjc2ltO2l0O0JhcnZOZWdhdGl2ZVZlcnlUZWdzZG52ZG9yZGVyb2Y7bG90aW1ucGFyYWxsZWw7UmlnaHREb3duVmVjdG9yQmFMZXNzTENpcmNsZVBsdXByZWNuYXBwcm94O1RmckNsb2Nrd2lzZUNib3dPbWFjcmdicmV2TG93ZWN1cmFycjttRHJvYnJrTm90UmV2ZXJzZUVsZW1lUmV2ZXJzZVVwRWVxdWl2REQ7YmlndXBsVXBwZXJSaWdodEFycm93bHRkQWN5O3Bob25jd2NvbmluaW50TmVnYXRpdmVUY2hlVGlsZGVUaWxka2dyZWVOZWdhdGl2ZHVoc3VjY2N1cmx5ZXFVYnJjeTtVbmlubGVzc2JveGRMO3BvdW5kZG90c3F1YXJTaG9ydFVwQXJyb3d1cHNpaDtUU2N5O2lzY3I7TnU7T2FkdGRvY2lyY2xlZFI7TG93ZXJMZWZ0QXJyb05vdFJldmVyc2JveHVSUGx1c01pbnNjbnN1cGRva3NjZXNoeWx0Y2NtbGRyUmlnaHRBbmdsZXVhY3VsYWZzY3JOZWdhdGl2ZVRoaWNrU3BhY2VUaWxkZUZ1bGxtc2NyO2d0bFByaWdodHNxdWdlcztwbGdzaW07UnJpZ2hlbWFjcjtTdWNjZWVkc1NsYW5yc3F1b0pjaXJjO05vdEdyZWF0ZXJUaXZlcmJTdXBlcnNldDtSaWdodFVwVGVlcGx1c2NpUmlnaHRBbmdsZUJyYWNrZXRuaWNpcmNsZWRTO2NjYUNvbnRvdXJJbnRlZ3JhZWdzZG90VGhpY2tnZTtMZWZ0QW5ubGRybHREc3R2YXJ0cmlhbmdOb3RHcmVhdGVyR3JlYXRlY2VtcHR5djttZWFzY3VkYXJybDtEY2FydmNidU5vdEdyZWF0ZXJTbGFudEVxdWJsYWNrc3FjdXBjdXA7emV0YU9jeXhyYXJybmhwYXJsbmVxcTtzdWJzdWI7ZmxsaWdMZWZ0RmxUaGRhc1JmcjtjeWxjbWFsdXRyaWY7SWdyYWxlc3NldGltZXNiO25oQXJybG5zaW07Zm9wY2lyZlRzdHJva29mY2lyO0V4cGxlZnRyaWd0b3Bib3N0cm5zO25SaWdodGFycnJpZ2h0cmlnaHRhcnJvd3M7bnN1Y2NlcTtDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGVnUmlnaHRWZWN0b3JCYXJjd2JhcndlZENhY2JveHZodmFyc3Vic2V0bmVOb3ROZXN0aGVyZWZvck9wZW5DdXJseUtjRG91YmxlQ29sbmFwcHJveG1oZ3RjYWNFbmx0ZGRhcnJTSEN0aW50O2JyZXZtZWFzdXJlZGFuZ2xlbmxlZnRyaWdOZWdhQUVsTGNhcnNmcnF1ZXN0ZXFzY0RvcGZpbnRlZ2VycztOb3RQcmVjZWRlc1NsYW50RXF1TGVmdERvdWJsZUJyYWNjb21wbGVtYXdpbnRoc2xhc2hkb3BkcmJrTGVmdFRyaWFuZ2xEb3duQXJyRG90VGlsZGVUaW1vYmxhY2t0cmlhbmdsZTtTdWNoVGhhdDtib3h1bWlkZG92bHRyYmlndXBsdXM7Z3RjaXJuR3R2Tm90SHVtcEhpbGJlcnByc2ltO2NvbG9uZTtudkludmlzaWJsZUNvbW1hO05vdFN1cGVyc2V0d3JVbmRlclBhcmRvdWJsZWJhcndsaGFyZHBvcGY7dUFycjtsZWZ0dGhyZWl1a2NIdW1wRG93bkhwcm9mc3Vic2V0ZWNhcGNhcGxnRTtWRGFzaDtvdGltZXNhcztsZHJ1c2hMYW5nO2lzaXpjYVJldmVyc2VVcEVxdWllcXZwYXVicmV2cmRxY2VudDtJZGVzaW07YmxrMW52bEFkaWFtc05lZ2F0aXZlVmVyeVRjdHJpbWluUmlnaHREdmVlZWxlZnRyaWdodHNxdWlnYXJyb3c7SW50O2ZsdG5zZ3Rkb3RlcWNvbG9sb29wYXJyZG93bmFycm93O29sdDtjZWRpbDtPcGVuQ3VybHlEb2VsaW50ZXJzO25HdDtVbmlvblBsdXNzcWN1cHM7TGVmdFJpZ2h0VmVjdG9yO2R0ZG1ob0RvdWJsZUxlZnRUZWU7bmxlZnRyaWdodGxlZnRsZWR6aWdyYXJTcXVhcmVJblpmcjttaWRkb2xhck5vdExlcWZhc3ltcGVxc3FzdWJzZUxvd092ZXJQYXN1YnNsZWZ0cmlnaHRoYXJSaWdodFRyaWFuZ2xlRXFvdGltZWNvcHJvZDtubXNpZ21hdjtSaWdodFVwRG93blZlY3NjbkU7SmN5O05lZ2F0aXZlVGhpbnF1YXRlcm5pb25zO3N0cmFpZ0xlZnRWZWN0bHNoU3VjY2VlZHNTbHNvcGdhY3VHcmVhdGVyTGVzc0Rvd25BcnJvd0JhcjtVcFRlZUFJSmxDbG9zZUN1cmx5RG91Yk9hY3V0ZUxsZWZvbWljUnVsZURlbGF5ZWQ7TGVmdEFyRG91YmxlVmVydGljYWxCeWlsZXNzZ3RTcXVhcmVTdWJzZXRFcW5hdHVyTGVmdFVwRG9uamN5R3JlYXRlckdyZWF0ZXI7UmV2ZXJzZVVwRXF1TG93ZXJLSmNwcmVjYXBwcm9Eb3BiaWdzcWN1cDtDYXlkbGNyb3BzcWN1cHhtRG91YmxlTGVmdFJpZ2h0QXJyb3JCYXJyTm90U3VjY2VlZHNFcXVhY2FjdXNlYXJodmFycGhkdHJpbnZsdEF0aWxkZVVwQXJyb3dEb3duQXJyb3Nxc3Vwc2V0ZXFuY0VxdU5vdExlZnRUcmlhbmdsZUJhcnRvcGNpckxlZnREb3ViemlncmFMZWZ0VGVlQXJyb25lc2ltTm9wZjtudmdlc21hbGxzaGFycjtpamxpZ0V4cG9udGN5O2R6aWdyYXJyO3BybnNpU21hbGxDcGFyYWxsZWxBcHBseUZ1bmN0aW9uO25sZWZ0c2hjaGNVYXJyTGxlZnRhcnJvbGVzc2d0cjtycnRock5lZ2F0aXZlVGhpY2tTcGF0d29oaWlvdGFzY0U7bGFlbXB0UmV2ZXJzZUVsc3VicmlnaHRzcXVpZ2Fycm9CZXJub05vdEdyZWF0ZXJKb3BkcmNvaEFyckNhcGl0YWxEaWZmZXJlbnRpYWxEO25lZG90TmNlZGlzaW1sRW1hcHN0bztTaG9ydFJpZ2h0QXJyb3c7c3VwMjthbWFsZ2hhcnJjaXJleHBvbmVudGlhbGU7TGVmdFRyaWFuZ2xlRW5zdXBzZUxvbmdyaWdodGFycm93O1JpZ2h0RG93blZlY3RvcnJtb3VzdGFjaGVnZXNkb3RvbE5vdFNxdWFyZVN1YnNuZXhpdGhpbnNwO1NIQ0hjQnNjcmd2ZXJ0bk5vdFN1ZmFsbGluZ2RJRWN5O3VydHJpO3ZwcmxmbG9tYXBzdG9kb3duYmlndHJpYW5nbGVkb3duO0Rvd25MZWZ0UmlnaHR0cmllb1NpZ3Jsb25nbWFwc3ROZXN0ZWRMZXNzTGVzcztzcXN1U21hbGxDaXJjbGU7dnN1cHpjYXJvQmVybm91bGxpc2xuTG9uZ2xlZnRhcnJkZmlzaHQ7Ym94dGltZXNib3R0b0VhY3V0ZTtNZWxsc2xhcmxuc2l4bWFzb2Z0bWlkY2lyaXNpRGlhY3JpdGljYWxEb3VmamxpZ0NheWxleXNJY2lyYzt1dHJpZm5sZWZ0cmlnaHRhckNhcGl0Y2FybmFjdUdyZWF0ZXJGdWxsRXF1YWw7a3Njcjt2ZWxsaXBBb3BzcWNhcGVtYWNoZWFydHN1aUdyZWF0ZXJGdXZhcnRoZXRCZXRhO05vdEdyZWF0ZXJTbGFuQWNyZmlzaHRFeHBvbmVudGlhbEVramN5bnJhcnJhdGFpbGx1cmRzaGNjZWRpbDt6d25VbmRlckJhcnN0cm5zZWNpcnJkbGROb3RHcmVhdGVyTE5vdEdyZWF0ZXJFcXVhbDtVZ3JhdmU7d3NjdmFycHJvcHRvO3NzY3N1cG5lO3N1Ym11bHlvTm90TGVzc0xlc3NVbmlvbkFwcGx5bHVydWhsb3BsdXM7ZGVsdExsZWZ0YXJyb3dndHJQYXJ0aWFsRDtGaWxsZWRWZXJ5RG91YmxlVmVydGljYWxCYXI7Y2lyZm5pbk5vdEdyZWF0ZXJGdWxsRWZqbHhoYUxlZnREbnVtc3A7TGVmdHJpZ2hSaWdodFVwSHNjTGVmdFVwRG93blZlY0xlc3NFcUhjaXJjcm9hcnJOb3REb3VibGVzbWVwYXJzQ09Eb3duQXJyb3dVcFZkcGVyY250O092ZXJOb3RSaWdodFRyaWRoYXJDZW50ZXJEb3Q7c2ltcmFUaGVyZWZHcmVhdGVyRnVsbEVxdWlhb2ZjaU5vdExlc3NHcmVhdGVjb25nZG90TGVzc1NsYW50RXF1YWw7Y3Vwc2Vuc3ZhcnRyaWFuZ2xlbGVmdFJCYXJyb2xpbmU7bmxlZnRyaWdodGFycm93ZXBsdXM7bmlzZ3NjckRhc2h2O2Vtc3N3YXJoaztEb3VibGVWZXJ0T3BlbkN1cmxjaXJjbGVhcnJvd2xlZnRuYWJFcXVpVmVydGljYWxTZXBhcmF0b3JscmFyY3VybHl3ZWROb3RIdW1wRG93bkh1bXByaXNpbmdkc3VjY2VOb3RSZXZlcnNlaG9yYmFyO3ljaXJFZG90aGVhcnRzdWl0O3VoYXJyO0RvdWJsZUxlZnRSaWdodEFycm93O3ZydHJuc3Vic2V0ZXE7VXBEb3duQU5lc3RlZEdyZWF0ZXJHckxlZnRyaWdjb21tYTtSZXZlcnNlRWxlbWV1aG5ndHN0cm9reHJBcnI7UmlnaHRBbmdsZUJyYWNrTm90U3VwZXJzZXRFVW5kZXJQY2FwYnJjdXB0d1RpbGRlRXF1Q29udG91cklub2Rhc2xicmRsY29yTG9uZ0xlZnRBcnJvdztBc3NpY29weXNyY3VybHllcXByUnJpUmlnaHRhcnJCZmJveHBPdmVyQnJhVXBwZXJMZWxmaWxhZ3JhR2NyaWdodHJpdkFycjtvZFJpZ2h0VGVlO29oYmFyc2Nwb2xpbkFvZ29uTGVmdEFycm93O0dzb2Rhc2hjdWVwcjtQbGNjYm94bWludXM7VGhpY2tTcHJzcXVvcktvZ3JhdWJOb3RSaW52RGFzaDtiaWdvdGlVYnJHcmVhdGVyRXF1YWw7d29wZjtQb2luY2FyZXBJbnZpc2l1dGRvQ2xvc2VDdXJseURkaWFtb25zY2FscGhpb2N5O2Jicmt0YnJmcmFhbXA7bnVtZXJBcHBseUZ1bmNjaXJjbGVkY2ljYXBhbmQ7Y29tcGxiaWdvbnZndEJldHN6bGlnO3N1Y2NlcXVwdXBhcnJvd3NzaW1yYXJybG9wbHVwYXJyb3dQc2k7YmxhY2tzcXVhclJpZ2h0VHJpYW5nbGU7R2N5O252bENpcmNsZURvZm9yYWxsZ3Ryc2ltO21kYXNoRG91YmxlTGVmdFJpZ2h0QXJhZWxpZztMZWZ0Q2VpbGhvcHJubWl0cmFyaXNpbmdkb3RlcWNpcnNpbXJhck5vdFNxdWFyZUxjeTtzZWFycm93O29sc3FjYXA7TGVzc1RpbGRlZURvaG9va2xlZnRhcnJvd01lZGllYXN0ZXI7UHJlY2VkZXNFbnZpbmZpemlnZ29wZlJjYXJvbmNpcmZuY29uZ0NvbmdyZGNudGlsZGNpcmNsZWRhc3Q7TG9uZ0xFbXBsdHJpO25zaW1Ob3RDdXBDYXBJbnRlcnNlY3Rpb3Jtb3VzdGN1cGRvdDtTcXVrb3BmO0VtcHR5VmVyeVNtYWxsU3F1cmJya3NscnRyaTtUY2FSaWdodFRyaWFuVXBwZXJMZWZ0QXJydXRkb3Rib3hIVTtTY2VkaWxsb25ncmlnaGR1YXJ0aGlja2FwcHJveHZhcnN1cHNlRG91YmxlTGVmdFJTaG9ydERvd25Bcm5zdWJFTm90TmVzdGVkR3JlYXRlckdyZXFwcmltZVZlcnlUaGluU3BhY2dlc2RvdG87QnJldmJpZ2NhdWFjdXRIb3Jpem9udGFsTHZhcnN1YnNldG5lcU5vdEdyZWF0aXVzcXVEb3duUmlnaHRWZWN0b3JOb3ROZXN0ZWRHcmVMZXNzRXF1YWxHaWZmT3BlbkN1cmx5RG91YmxlUXVMZWZ0VmVjdG9yQmFMZWZ0VXBvZWxpZzt1d2FuZ2xTbWFsbENpcmNsbGxjb3JuZXI7b2xjaXJEaWFjcml0aWNhbFRSdWxlRGVsYXlOb3RMZXNzU2xhbnRFcXVhbDtsZWZ0cmlnaHRzcXVpZ2JsYWNrdHJpYW5nbGVyaXNtYWxsc2V0bWludWptYWRjYXJvbnNlc3dhckVtcHR5VmVyeUNsb3NlQ3VyVmVydGljYWxCYXI7THN3ZWRkemlncmFycnRhdTtMYXJyO21pZGNDYXBpdGFsRGlmZmVyZW50aWFib3hVTGJveHZMUmlnaHREb3VEc2NyO05vdFJldmVyc2VFcmlnaHR0aHJlZXRpbWVzO1Nob3J0Umlac2NyO3JhZ2VzbGVzbmxlcXNsYW5yaW5nO1NxdWFyZVN1cGVyc2V0RXFvbGNyb3NzO3RyaXBsdXM7c3FjYXBzQ2Nhcm9uO25lcXV1cGhhcnBTdWJNaW51c05vdExlZnRUcmlhbmdsZUJhT3ZlclBhcmVuT3ZlclBhcmVudFBvaW5jYXJlcGxhbmVOdGlsc3dhcnJwc3VwZG90O21pUmN5SHN0cm9Eb3VibGVDb250b3VySW50ZWdySWNpcmNwZXJpY2lyYztib3h0aWhlbGxyaGFydVVyaW5nO1NxcnRzYztFbWFjU0hDSGN5UG9wbG9uZ3JDSGN5O1NmcjtucmlnaHRuY29uZ2RvdHRoa2FiYWNrTm90R3JlRG93bkxlZnRUZWVWZWN0Q2lyY2xlVHVncmF2c2ltZExvbmdsZWZ0cmlnaHRhcnJvd09yO1JpZ2h0VXBWZWN0b3JCYXhzTm90VmVycm9hbmc7TGVmdEFycm93UmlnaHRBemVldHJmO1JpZ2h0VGVlQXJyb3diZW1ybm1zdWNjYXBwcm94O0xlZnRVcFRlZVZndHJhcnI7a2NlZGlsO2NpcmNsZWRhbGFycnNpbUxtaWRvbGVmdHJpZ2h0YXJyeHJhUmlnaHRVcERvd25WZWN0b3JubEVMZWZ0UmlnaHRWZWN0b0djZWRpbG1vdXN0O25nZU5vdEdyZWF0ZXJFZW9nb247Z25hcHByb25zdWJzZXRlcXNlQXJydXB1cGFOY25nRXZzdWJuZTtQcm9wb3J0aW9uYW9wZU5vdEdyZWF0ZXJMZXNzRG90RXF1YWw7bG93YmRxTGVmdFVwVmVjdG9yTm90R3JlYXRlckVxdWFydWx1aGFyO1ZlcnRpY2FsQmFyeHNxY3VwZXRhO2NyY3VkYXJyck5vdFNxdWFyZVN1cGVyc2V0RXF1YWw7ZWFjdXRlTmVnYXRpZGRhZ2dlcnN1Y2NuZWxvbmdsZWZ0YXJycHJuRTtFb2dvbjtDYXBpdGFsRGlmZmVyZW50aWFsRGd0cU5vdEN1cENhcDt0b3BjaXN0cmFpZ2h0cGhpO2ljeWV4cGNlZGlsQ2VudGVyRG9hcGFjaXI7cGhvbmU7RG91YmxlVXBEb3duQUxlZnRUZWVWQXJpbmJpZ29kY2NhcmxkcGxhbmNtSWFjdUVtcHR5U21hbGxTcVVuZGVyQmFwcHJveGVOb3RHcmVhdGVyRXF1RGlhY3JpdE5vdEdyZWF0ZXJTbGFudEV2ZWViY2lyY2xlZGRhc2g7Y2FwY2FSaWdodEFyRXF1aWxpYnJpdW07cmlnaHRoYXJwb2FuZ21zTm90TGVmdFRyaWFuZ2xlO3dmcjtwcm9mYWxhcjtEb3duQXJyb3h3ZWRnZTtOb3ROZXN0ZWRHcmVhdGVyR0tvaXNsZmlzaE5vdFN1Y2NlZWRzRXF1YWN1RG91YmxlTGVmdFRlZWVkRG91YmxlTG9uZ0xlZnRSaWdodEFycmxvdGluaGF0c2hjU3Vic2V0RXFudnNjdXJ2ZWFycm93cmlnaHRMZWZ0Q2VpbGluZztsSGF1bnNob3J0cGFzY2Fyb0RpYWNyaXRpY2FsQXBhbnByY0ljaXJhb2ludGVnZXJhY3lpc2lucztMZWZ0cmlnaHRhcmNOb3RUaWxkZVRpbGRIb3Jpem9udGFsdXRyaTtSaWdodFRlZUFycm93O0ludGVyTm90TGVmdFRyaWFuZ2xzdWJzZXRuZXFxaXVrdGhldHZEYXN1cHNpbG9uO2Vxc2lDbG9ja3djdXBvcjtUY2VkaWxJbkFicmV2U3F1YXJlaW50Y2FsbmhhcnI7bnNob3J0cGFyYUNvbmdydWVucGx1c21uY2hlY2tzaGFycDtEaWFjcml0aWNhbERvdHByb0xvbmdsZWZ0YXJyb2tmcnJlZztScmlnaHRhcnJvdztyb3BmO0Vwc2lsb3pjVmVyeVRoaW5TYXRpbGRlZm9yaztzdXBzZXRldXBkb3duYXZhcm5vdGhpTGFwbGFjZWZlbWFIdW1wRURvdWJsZXJpZ2h0dGhyZWV0aWxlZnR0aHJoeWJ1bGRzdHJvaztjdXBvcnRoZXJlZm9QaWxtb3VzdGFjaGNjYXBzTmNlR2JyZUludGVnclRoaWNrU3BhY2U7RG91YmxlQ29udG91ckludGVncmFsO2ltYXRzZXRtaW51c25ndFZjb29sdm5Eb3duUmlnaGhhbWlsdHJhcnJiZmJhcndlZGdlO2NzdWJlbGFuZztOb3RQcmVjZWRlc1NsYW50TG9uZ0xlZnRSaWdPcGVuQ3VybHlRdW9tZEdkb3RwZXJwO1N0YXI7bnJhcnJjYm94RFJMZWZ0QXJyb3dSaWdodEFyaWdyYXJhcnJmZ2FwO1Nob3J0TGVmR3JlYXRlclRpbGRlZHRyZG93bmhhcmNvbmlkZG90bEFhcnJubGFwbGFua2FjaW1pZGFzdDtyY2Fyb09ncm5HZ2xhbmdsVmVyeVRiYWNrY29mcGFydGludFVmcjtiaWd3ZWRnZWludGVyY2F0aGV0YXN5bVByb3BvcnRpb3JhZW1wdGxzcXVvdXdhbmdlcXVlc3NvbGJhcjtHcmVhdGVyckhhdXBzaWx0cmlhbmdsZXJpZ2h0aXNpbkVvZ29uO0dKbG9vcGFycm93cmlnaGxhcXVvYW1wRG93bkxlZnRSaWdodFZlY3RvbWFwc3RvbGVmYmlnb3RpbWViaWd0cmlhbmdsZWJveHZoO3N1YmRvdGlpb3RtYXJ0d29oZWFkbGVndHJkb3RGb3JDYXlsZXlDbG9zZUN1cmx5RG91YmxlUXVvdGU7T21pY3Jvbkd0djttbk5lc3RlZExlc3NMZXJwYXJndExlZnRSaWdodFZlY3RzdGFyZjtCZWNhdXNsZWZ0bGVmYWJyZXZlcmJya2U7c3VwbGludGNhbDtmZmlsUmlnaHRBcnJvd0xlZnRBcnJOb3RTdWNjZWVkc1RSQnVtcGVxO2JveG1pbnVzSGNpcktIY3k7T2RzcGFydHJpYW5nbGVsZWZ0O3NyYXJybmZpY2l0cnBleml1bXNjcG9saW50eHNxY3VwaGFyZ25lcXFzZnJvcGx1c2R1O2NvcHJSZXZlcnNlVXBFcXVpbGlicml1bTtsZHNBcGJveEh1eG9wbHVyYmFycjtTbWFsbENpQ2xvc2VDdXJseWljO0Rvd25BcnJvd1VwQXJyb09wZW5DdXJseURvdWJsZWNhcm9uO3VoYmxrO2JhY2tzaW1lcWJldHdlZW5yYWRpYztvcnZOb3REb3VibGVWZXJ0blZkYXNoO25jb2d0cmxlc3NFVEhzdXBoc29wcm5zaW1zcWN1Z3Jhdm5vdG5pdmNzaW1lcTtPc2NzaW1uRmlsbGVkU21hbGxzcXVvcjtBbHBoYU5ld0xpZGl2b3hkdHJpbmxzaW1udHJsc3Ryb2JpZ3dlZGdOb3RMZWZ0VHJpTmVnYXRpdmVWZXJ5VGhpblNwbnZyQXJOb0JJbnRlZ2tzY0hzdHJOY2VkTGVmdFRlZVZlY3RvcmFwRTtOb3RMZWZ0VHJpYW5nbGVFUmlnaHRUcmlhbmdsZUJhTXNSaWdodFZlY3RvckJuc2hvcnRwYXJhbGxMb3dlckxlZmxIYXI7ZmpxdWF0aW5uY2Fyb3N1YnNldG5lcTtwcmVjbmFwRWNhYm94VVJQcmVjZWRlc1RpbGRwYXJ0RGludWJvdHR3ZWllcnA7Tm90UmV2TEpjeU50aWxkT3RpbWVzRG91YmxlUmlnaHRBcmpzY3I7bGJyYWNlO0Rvd25UZWVpbmNhcnVyY3JvcGJpZ2NVcHBlclJpZ2h0QURvd25SaWdodFRlZVZlaW1hZ2U7RG93bkFycm93VXBBcnJzdHJhaWdodGVwc2lOb3RTdWNjZWVkc0VxdWFsO1FvcGY7RG91YmxlUmlnaFNtYWxsQ2lyY2xlRWRJbnRCb1Nob3J0UmlnaHRzcXN1cHNldDtjaXJjbGVkY2lyYztFbXB0eVNtYWxsU3F1eWFjeTtsYnJrc0RvdWJsZUxvbmdSaWdodEFycm93cmVhbGluVW5pb25QbEF1bUdyZWF0ZXJFcXVhbExlc21pbE5vbkJzY2U7WmZyZWdyYXZlbHRjYztucHJjdWVHcmVhdGVyRXF1YWxMZXNzO3NpZ21hZm9TO2V4cG9uZW5sYWN1ZnJvd247R2NlZGlsO3JzcWJOb25CcmVha2luZ1NwYU5vdFNxdWFyZVN1cGVyc2V0RXFzZXRtaW51Y2VtcHR5c2lnbWFNaW51c1BsUmlnaHREb3VibGVCcmFjbGFycnNpc3ViZG90O2VtcHR5bG9uZ2xlZnRhcmNhcGFpZXhjbG5kVXBBcnJvd0JhYm94Vmw7dHJpYW5nbGVkb092ZXJQYXJOb3RMZXNzRXNpTHNjcjtubGVxO3JjeTtsb3plbmducHJlY2VxO2VmRHlpY3k7cXByaW1ub3BmbGZyO3JhbmdkdGhrYXA7Ym5lcXVpT3ZlckJyYWNlZnBhcnRpbmJpZ29kb3RSZXZlcnNlRXF1aWxpYmVwc2l2O05vdEdyZWF0ZXJTbGFudEVxdWFwbHVzc2ltO0ZpbGxlZFZlcnlTbWFsbFNxdWFyZUJyZXZlVXBzaWxsZXM7d2VpZXJlYWw7Z3Rkb1JpZ2h0Q2VpbGluZztvc29sU2hvcnRSaWdoTmVnYXRpdmVWZXJ5VGhpblNwYWVhc3RlcmRibGFDY29uaW5uaEF1c3RjYXJvbnJmcjtOb3NjaWlzaW5zdjt5YWN1dGU7bnNjY3VlY3VsbnRsZ25HTGVmdFVwVGVlVmVjdG1mcm9taWRnZXNsR29wZkltYWdqbWF0TGVmdEFycm93QmFyO2R1Q2xvc2VDdXJsYm94Vjtob3JiYXJnYWNsaGFyZDt5YWN1ZXF1ZXN0RG91YmxlVXBBcnJpZ2h0aEVtYWRsY2xhZW1wdHl2U21hbGxDaXJjc21pTGVmdEZsb05vdEdyZWF0ZXJGdWxsRXF1YWw7RG91YmxlTGVmdEFMY2Fyb25lY29Pc2NyO1RjYXJvUmNhcm9uO25zaW1lYmlnTm90U3VwZXJzZU5lc3RlZEdyZWF0ZXJHcmVhdFpzY3JjYXJvY2VtcHR5dnBjeTtLYXBwZG93bmRvbGVmdHJpZ2h0aGhlYXJ0U3F1YXJlU3VwZXJzZW1wdHlzZXQ7Z3RsUGFyO05vdExlZk5vdENveGxBTG9uZ1JpbHBhclV0aWxoZWlvZ29sZWZ0cmlnaHRhcnJvbGVmdHRHb3BmO2VvcG9pbnRpbmRyY3JvcDt0aGlja0NvbG9uZTtVcGRvd25hcnJMZWZ0RG93blZlc3VwbXVscmFxdW9DdXA7ZGFzaHZuc3FzdXBOb3RTdWNjZWVkc1RpbERvdWJsZUxlZnRSaWdodEFDZG90O2hzY0xlZnRSaWdoSHByZWNlcTtGb3FkcmNyb3ZhcnNpZ21hb2VsZEFycmJhcnVydHJpcmlzaW5wZXJpb0xjc2NuYXVyY3JvcDtwcmN1c3FzdXBlY3VlcHN1YnBsdXNHcmVlbXNwMTQ7Ymlnb3RQcmVjZWRlc0VxdWFsO2xtaUxlc3NTbGFzdXBlO2NoZWNrbWFyaW1wZWRDSGN5TWVkaXVtU3BhY1JpSHNjcml1bWw7bGFuc3N0YXJmcGx1c2RvO2duYWxlZnRyaWdodGhhcnBvb25zO0Rvd25MZWZ0UmlnaHRWZWN4ZnJjYXBzO25wcmU7Tm90RXhpc2NhcGRvUmlnaHRUcmlhbmdsZUVxdWFsYnVsbGV0O2JhY2twcmltZTtzZG90YnNob3J0cGFyYWxsZVNjaXJZY2lyaW5maW50TmV3TGluZXZlbGxpYmlnc3RhbHRkb3Q7ZGxjcm9wO1J1bGVEZWxheWVQcmVVdWRyYmthSG9wZjtzb2Z0Y3lVcHBlckxlZnRMZXNzR3JlYXRlcjtWdmRpdmlkZW9udGltZXM7WmFjdXRMYWN1dGU7bnZpbmZpbjtob29rcmlnaHRhclJpZ2h0RG91YnZhcnRyaWFuZ2xMZWZ0RG91YmxlQnJSaWdodEZjdXJseXdwdW5jc25nZXFzbGFoYWxmO1JldmVyc2VFcXVpbGlicml1Um91bmRJbXBsaWN1cnZlYXJOb3RTdWNjZWVkc1NsZG93bmhhcnBvb25yaWdoZXBzaWxvbjtob29kdWhhcjtucmFycnc7U2FsZGN2ZXJuc21pZFpjeWJlcm5yaWdodHRocmVlU2FjYmVybWhvO2xhdGFpbHRyaXRjZG9sZXNkb3Q7TmVzdGVkR3JlYXRlckdyZWF6d25qZWdyYXZlO2xuYXBwcmxlZnRhcnJvd05vdEN1cENhbWludXNkbG9uZ2xlZnRyaW9zbGFzaDt0c3RvY2lyY25vdGludmE7bGVmdHJpZ2h0c3F1cHJhdmZ0b3BjZXhjbENoaUNvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYUxlZnRBbmdsZUJyYWNrZXQ7ZnJhYzNiZXJub3VhbmR2O1RoaW5VcERvd25BcnJvQ291bnRlckNsb2NrZ25FcGx1c2RvTXU7WmVyb1dpZHRoU3BTY2Fyb25Ob3RUaWxkZUVxdWFyaGFyZG5lZG90O3N1cHBXZnI7c2hjeTtTcXVhcmVTdWJzZXRFcXVhbExvbmdsZWZMc3RuZWFybnNjcnN1cDt0cmFkRG91YmxlVXBEb3duQXJyZXFzbGFudGxlc3M7ZHJjclVwQXJyb3dCZ3NpbWw7Q29wcm9kdWNOb3REb3VibG5jeTtHcmVhdGVyRXF1YWxMaXNjblJpZ2h0Q2NpcnJhZW1wdHl2cmFycmJmc3N3YXJyb2xzcWx1cmRzaGFyO2lub2R1aGJsa0ZvdXJpU3VjY2VlRERvdHJhaHRyaXRpbURvdWJsZUxvbmdMZWZ0UlRpbGRlRnVsbEVEaWFtb25kUmV2ZXJzZUVsZW1lbnQ7dmFya3JhcnJzaW07bnJ0cmllTm90SHVtcERvd0dhbW1hO2J1bXBlO2VmRG90c21hbGxzZXBhcmFsbHJkbGRoYXI7YnNvbGhzdWJyYW5nbGU7eHNxcGVybWlsO0NvcGY7T3ZlclBhcmVudGhlc2lzb3RpbWVzO3NzbWlsTGVzc0V0cmlhbmdsZXJpZ2h0O0xhbWJkdHJpbWludXNDb3VudGVyQ2xvY0xlZnRyaWdodGdyYU5vcGZuZ3NpbTtoYW1pbHQ7Tm90UmV2ZXJzZUVsVXBwZXJMZWZ0QXJyb2N1clZmcjtTdWJzZXQ7c2ltZVJpZ2h0VGVlVmVjYW9wU3VjY2VlZHNFaGVsbGlwO3RyaXNtYXBzdG9sZXZEUHJpbWVndm5FO2xhcnJzaW07endqO25lYWthcHBhdnZhcnN1cHNwbGFuY2s7RG93bkFycm93VUNlZGlzZXh0O21wbGFuZ2xlYW5kZDtoYWlkYXNodjtkb3duaGFzdXBzZXRuZWVxY2lyYztvcGVybnZEYWJydmJhWmVyb0xlZnRBdXRpbGR4bWFwTWVsaHNsRG91YmxlVmVydGljYWxOb3RMZXNzRXFEY2Fyb25Ob3ROZXN0ZWRMZXNzTGVzcztyaXNpbmdkb3RzRmlsbGVkVmVyeVNtYWxsU3FOb3RUaWxkZUZ1bGxEb3duUmlnaHRWZWN0b3JCYXI7bGFyck5lc3RlZGRvd25kb3duYU5vdFN1Y2NTYWN1bmFjdXR1cmNvcm5lYW5nbXNkYWQ7RWNpcmM7U3VjY2VlZHNyYWN1T3RpbGRlZ2VzbGVzO0Rvd25BcnJvd1VwQXJyb3c7bGVmdHJpZ2h0YXJyb3dzZWxzZHJpZ2h0YXJyb05lZ2F0aXZlVGhpY2tTZ2JyZXZlY2NlZGlsc3RhcmZpbjtyaWdodGxlZnRhcnJvd3M7UmlnaHREb3VibGNvbmdkdnN1Ym5lRG91YmxlTG9uZ0xlZnRBQmVjdHJpYW5nbGVsZWZ0ZXFSY2VkWmVyb1dpZHRoU3BhY2Nhcm9uZG90c3F1YXJlbmVhcmhvcmRmbmN5cmFycnBsY3VydnZsdHJpO3N0cmFyaWdodGhhcnBvb25kTm90RG91YmxlVnRoa2Fwc3RyYWlnaHRlcHNsZHNoQ2NlZGlsO0RvdWJsZUxlZnRSaXVwYXJyb3c7ZG90ZXFkb3Rsb3BmRERvdHJhaGRjYXBjdXA7Z25lVmVydGljYWxTZXBhck5vdExlc3NTbGFudENsb3NlQ3VybHlEb3VibGVRdW90ZUdzY3I7VmVydGlzcXN1YmVndHJzYnVtc3FzdXBzZXRlcTtHYnJuc3BhcjtZYWNEb3VibGVDb250b2JzaHlidWxsO3plZXRyZnZhcnN1YnNib3d0aWU7ZUREbG90aW1lc1NxdWFyZTtOb3RMZXNzO3BpdjtPcGVuQ3VybHlEb3VibGVEaWFjcml0aW5yYWJicmt0Yk5lZ2F0aXZlTWVkaXVxdWF0aW50O05vdFNxdWFyZVN1cGVyc2V0RXF1YUJyZXZlO3dzY3I7bGVmdGxlZnRhcnJvd2F1bXBybnNob3J0cGFyTm90R3JlYXRlckZ1bGxFcXVWb3BmYmxhY2t0cmlhbmdsZWRvd247TmVzdGVkR3JlYXROb3RTdWNjZWVkc1NsYW50RXF1YWxSaWdodEFycm93TGVmdEFycm93TG93ZXJMZWZ0cm9wbHVzRG93bkxlZnRWZWN0b3JCYXJTcXVhcmVJbnRzaG9ydHBhcmFEb3duUmlnaHRWZWN0b3JCZG90bWlMb3ZlcmJhcnN3bndlZkRvdDtMZWZ0Q2VQcmVjZWRlc1NsYW50RXFaYWNsc2ltZztkb3duYXJzdWJuU3F1YXJlU3Vic2V0RXF1bHJoYXJwcm9kO2JveHRpbWVzO2NpcmNsZWRhc3RzdW5nbGNlZGlBbnVsdHNwbGxhcnJMc3RycmFycmh0aGtzaUxlZnRVcFRlZVZlY1RhdTtsdmVydG5lcXE7VmVyYmFycmlnaHRsZWZ0aGFycHJuYXA7bnJpZ2FjdGF1YXJyTmVnYXRpdmVNZWRjcm9zc25nc25taWRSaWdodENlaWxpZGlzcnRocmVlO05vdExlc3NFcXVDYWN1dGVsRXhkdHJpO2RkYWdnZVJpZ2h0VXBUZWVWZW5yaWdodGFycm9ubGVxc2xCb3BmZGllbWVhc3VyTGVmdEZuc2NlO25jZWRpbDt1cGRMZXNzU2xhbnRFcXVnbmFwO2xtb3VzdGFjaGU7RG91YmxlTG9uZ1JpZ2h0QXJyb3c7c3N0aGtzaW07U2hvcnREb3dubGN1Yk90bGVmdHJpZ2h0aGFycG9lbnNwO29ib3hIdTtSaWdodFVwRG93blZlRGlmZmVyZW50aWFsRDt1ZGhhcmxvYW5kcmV0aHlhY3V0ZW50cmlhbmdsZXJ0cmlhbmdsZXFzcXN1cHNybW91c3RhY0Nsb3NlQ3VybHlEb3VibGVRdW90aXVrY3lsZXNzZXFndFVuZGVyUGFyZW50aGFjaXJjO2hBcnJicmFjTmZyO0Rvd25BcnJvd0JzdWNjbmFwTmVnYXRpdmVUaGlja1NwYWNrY2VkT3NsYXNodERpZmZlcmVuTm90TmVzdGVkR3JlYXRlckdyZWF0ZUVsUW9wZkpjcmlnaHRoYXJud25lYXI7TGxvcmFycjtibGFja3RyaWFuZ0RvdWJsZURvdDtiZW1wdHl2O0FyaXNwYWRlc3VpbnBhcnNtaWxlO05vdE5lc3RlZEdyZWF0ZXJMZWZ0UmlnaHRBcnJvd0xhY3VDb3VudGVyQ2xvY2t3Z3RjaWRvdG1pbnVzO0RvdWJsZUNvbnRvdXJJbnRlZ3JhZ2VzY3RoaWNrYXBuYXBwcm9uUmlnaHRhcnJvdztyZGxkaHVvcGY7UUhmcjthd2NvbnRyaW1pbnVuc3VwZTtuZXNGaWxsZWRTbWFsbFNxdWFyZTtleHBvbmVmYWxsaW5Ob3RDdXBDc3VicmFOZXN0ZWRHZnJhYzU4Z2FtbWE7c3VjY25QYXJ0RG93bkxlZnRUZWVWZWN0b3I7VW5pb25QbHVzO092ZW90aW1lc2d0cmRrZ3JVcFRlZUFyc3BhZGVzO3Nxc3VwZTtWZGFzaGxybERvd25CcmdlcXNHYW1jZW5jaXJjbGVkZGNoY3k7YWJzaW1nO21sZHI7VFNIY3lyaWdodHRub3RpbnZjO25hbmd0YXVBYWNPY2ltc3Rwb3M7b2hiYWJveGRMTGVmdERvd25WZWN0b25wb2xpbmRzb2w7Q2xvY2t3aXNlQ29udG91ckludGVncmFsO3N0YUVzY2xjYXJvbjtsb3BsdXNTdWNjZWVkc1RpbGRlU3F1YXJlU3Vzd2Fycm93O0RTcmJhcnJhbmdtc2RhZTtob3BmO2RmaXBvcGZJbWFmZnI7cHJlY3NkaXZpZGVvckF0YWlsO2xlc3NlcXFndHI7ZGVsQWNpcmNsYXJyYmxvd2JhaGFyZGNjaXJjbGVkUlVhcnJvY3ZhcmthcHBhbG1pZG90O0dyZWF0ZXJTbGFkemlncmFjY2lOb3RMZXNzR3JlYXRlcjt1cGhhcnBvb25sVmVyeVRoaW5TcGFjZTtOb3RHcmVhdGVyRnVsbHJsYXJndHJhcHByb21pY3JvbGJya3NsdTt5ZnJleHBlY3RhdGludGlsSW9nb247dmRhc2h2RGFzaGNvbG9zcXVhcmVpaW9wcmVjY3VybHllVW5pb21hbHRlc2U7Q2xvc2VDdXJseURvdWJsZVFEY3k7ZHpzdWJlam9uc3VwYm94Vmg7SW52cnRyaWV4cG9uZW50aWFsbnN1YmVOZXdMaW5lO1JpZ2h0VmVjdG9yY2lyY2xlZFNVZGJuZ3RyO3NpbWRvdDtlcXNsYW50bGVOZWdhdGl2ZVZlcnlUaGludGdsZG90cGx1Z3RsUGFjb21tYXQ7bEFjY3VidW1wO3lhY1pudGlsZGVVcGRvd25hcnJvdGltZXNiYXI7am9wZjtBZmduYXBwcm94O2xzcWJ1bWxiaWdjaXJjO3ByYXA7ZmVtYWxlO01pbnVzUFN1Y2NlZWRzVGlsZGU7c3ViZTtVb3BmO3Jtb3VzdDtyc2FxcmlnaHRhcnJMZWZ0RG93blRlZXJtb2NvcHJvSHVtcERvd25IdW1wZ2c7Q29uaW5TdGFuZHNseGN1cDtyaWdodGhhaWpEb3VibGVSaWdodFRlZG93bmFycnRoZXRhdmxvbmdyaWdodGFVbmlvblBsdWlxc3VwbXVsdDtkb1VuZGVyQnJhTGVmdEFuZ2xlQnJhY2tOZWdhdGl2ZVRoaW5TcGFjRG91YmxlVXBEb3dlcGFyc2xzdWJyYXJyYW5nc3BzdWNjc2lndHJkb3ljaXJjQ2NvbkRvd25MZWZ0VmVjeHVmZmlsaWc7ZGl2aWRlb250ZHVkYXJyO2RlbXB0eWRhcnJQcm9wb3J0Q2lyTGVzc0VxdWFsR3J1b2dvbmJsYWNrdHJpYW5nbGVyaWdodDtwbHVzYWNpcjtjdUVOTGVmdEFycm93UmlkaWxyYXJyO2d0cmVxZXNjcmN1cGRvUmlnaHRVcFZlY3RvRG91YmxlTG9uZ0xtaW5tb3BubGVmdHJpZ2hOb3RTcXVhQWxwaGE7enNjcjtOb3RTcXVhcmVTeGhhcnVvYmxvbGVzc2VxcWR6Y3lEb3duUmlnaHRUZWVWUHJlY2VkZXNFcUxlZnRUZWVWZWNkb3duaGFycG9vbktjZWRpbDtSZXZlcnNlRWxlbWVuZ3NpbWVTcXVhcmVJU09GTm90U3VibGVzc2VxcWdQcm9wb3J0aW9uO3ZlcnQ7c3dhcmhrT21hTGVmdGFycm93dXRpbGV4cGVjdGVERG90aWpsaWc7YXN5TG9uZ3JJdWt2YXJzdXBzZXRuZXFxO2xlZnRhcmJveERMZ2xFO2N3aW50dmFyc3Vwc2V0bmVxO0tIY3VwaGFycG9vbnJpZ2h0O0JhcndlZDtOb3RDb25ncnVlbnNob3J0cGFyYWxsZWxjaXJjbGVhcnJvd3JpZ2hsbGNyYXJyc2ltb2NpcmVEb3RpbWFncERvdWJsZUxvbmdMZWZ0QXJycmFlbXB0eXY7VkRhbndBcnJuZXNlTmVnYXRpdmVWZXJ5VGh1d2FmcGlwbGFycmJmcztOb3RUaWxkZUZ1bGxFZWNvbG9scGFyO21lYXN1cmVkYW5nbGU7dWJyZVVwQXJyb3dEb3duQXJ1cHVwYXJlbXB0eXZ2YXJlcGFmO250cmlhbmdsZXJpcnNjcmthcHBhdjtHcmVhdGVyU2xhbnRFcWlmaW50cHJvZDt1cHNpbG9tYWx0aW50bGFyUHJlY2VsZWZ0aGFydGhpY2thcHByb3g7Rm9wRG91YmxlVmVydGljYWxCYXJnY2FsZWZzeW1FbXB0eVZlcnlTbWFsYm94RGxjdXBiam1hdGg7Tm90RXF1YWxUaWFwb3M7Zm5vYW5nbXNkYWI7TGNlZGlsO0xlZnRBcnJvd2xvb3BhcnJvd3JpZ0RvdWJsZUxlZnRSaWdodEFycm93c3VwbXV5Y3lwZXJjbnRMb25nTGVmdEFybnRyaWFuZ2xlbGVmdGVxcmRsZGhhQ2FwaXRhbERpZmZlclVjeWZub2ZWY3k7Tm90RWxOb3ROZXN0ZWRHcmVhdGVyR3JidW1wZXE7UVVPVDtzdWNjc2ltbWFwc3RvZGZjeTtOb3RMZXNzVGlnbDtsb25nRG93bkxlZkNvdW50ZXJDbG9ja3dpc2VDb250b3N1Ym5lO0NpcmNsZURvdHJhcnJscExlZnREb3VWZXJ0aWNhbFRVcGRvd1RSQUl1Z2NpcmNOb3RQcmZudXJjb3JuO3NoY2hjeVVwcGVyUmlnb3VtdWJyY3k7Tm90TGVzc0dVdW1sO0xvbmdsZWZ0cmJveHZMO0NheWxleXM7ZUR6ZnJzd253YU1lbGxpbnRyZmF3aW50O1phU3F1YXJlU3VwZXJzZXRFbGVxO2V4cG9uZWNpcmNubGVmdHJpZ2h0YXJybmN1Q2VudGVyRG90c2NhUmlnaHRhcGhvbmVsbHRyaTtpZWN5O0RvdWJsZVJpZ2h0VGVlcmFycnNpY2x1ZW1wdHlzZXRsbmV4dXBsdXNTT0ZUY2ptTm90TmVzdGVkaG9va3JpZ2h0YXJyb01mcm9kYlJpZ2h0VXBUZWVWZWN0b3I7Y29sb25lU3F1YXJlVW5pb2JubmhBcmFwcHJveGVxeWFBc2N0d29oZWFkcmlnaHRMZWZ0YXJyUmFuVkRaZXRhTm90VmVjdWRhcnJyO3VhY3V0ZUtzY3I7dW1hY3JQb2luY2VzZG90O092ZXJCYXI7Tm90VGlsZGVUaXVtbDtZQWN5O3JpZ2h0aGFycG9vbG9uZ2xlZnRhcnJvdztpaWludEFNUEh1bXBFcW5leGlzdG5sZWZ0YWxtb3VDb3VnRWw7TG9uZ1Jib3hETDtvZ3JhdmVubGVzSXRpbGRlbGVmdGhhcnBvZnJhYzE0a2Fac2NvbXBsZW1lbnQ7dHdvaGVhZHJpZ2h0YXJyb3dib3htb3NjYmFja3NpbWV5Y2lpcmZsb29CZXJub3VsbGlzO3JsbTt0b3B0aG9yamN5O2RjYXJyc2xvb3BhRW1wdHlWZXJpZXhjbDtwb2lubnZnVFJBREU7ckJhcnNpbW5lcmJyYWNrO3N1cHNldG5lcXF0YnJyQXJyO29kb3ROb3RQcmVjZWRlcztpdGlsZGU7R3NjT3NsYXNoO3NicXF1SGNpcmM7SXNjcmRvbE5vdEV4aXN0c3JpZ2h0aGFycG9vbnVwRmlsbGVkVnhkdHJ2YXJzaWdnbGE7RG91YmxlTGVmYmxvY2t0cmlhbmdsZWxlc21lcFN1YnNldEVxdWFsQ29uZ3J1ZW50YmFja2Vwc2lsamN5O0xlZnRWZWN0b3JCYXJOb3RIdW1wRG93bkh1dmFybm90dW1hY3I7RGlhY3JpdGljYWxUaWxkZW5sZXFzbGFmcmFjMjM7YnNjT2FjdXRMZWZ0QXJyb3dScmlnaHRzcXVpZ2Fycm93bG9uZ2xlZnRyaWdodGFycm9uYW9zb05vdFRpbGRlRnVsbEVxdWF0b3Bmb3JrO0xlZnREb3FpemREb3duUmlnaHRWZWN0b3JpZ2h0cmlnaHRhcnJ1aGJwYXJzaWxlZnRyaWdodHJpZ2h0bGVmdGhhcnBvb25zcHJlY2N1cmx5bGhhdGNlZGlsRXBzaWxvbjtzY2VkaWxtdW5jYXJMZXNEb3VibGVEdGhldGFzeVNpZ21hVGhpU3F1YXJlU3VwZXJzZXQ7Tm90RG53bG5lcWJlcGJsYVN1Y2NlZWRzO2RpZ0ludmlzbm90bnZhcm5vY2FwYW5TaG9ydFVwQXJuYWJsb3ZiYXBvc05lZ2F0aXZlVGhpblNwbG5hcHByb3g7Wm9wZnZsc210ZTtsdHF1ZXN0O05vbkJyZWFraW5nU0xvbmdyaWF3Y29uaW52c3VwbmViZXR3ZWVnYVJpZ2h0VHJpYW5nbGVFcXVhT21pY3JvbmxzYXF1ZG90bWludXZzYmVtcHR5Q2xvY2t3aXNlQ29udG91cklOb3ROZXN0ZWRMZXNzTGVzc25pdjtBRWxpZztVbmRlckJhcjtmcmFjNURvd25MZWZ0VGVlVmVjdG9zdHJhaWdodGVkdWF1ZGhTaG9ydFVhbmRzZ2xqO3JlY3Rjb21zcGFkZXN1aXQ7YmFja3NpbXJjV29wU2hvcnRET3ZlckJyYWNrZXQ7UG90b3Byb2ROb3RMZWZ0b3JpZ2ZyYWMxNXh2RG91YmxlQ29udExlZnRVcFZlY3RvaW1hdGg7dUhhVWFjdXRlO3ByZWNucmlnaHRzcXVpTGFjdXRhc2NyO0Rvd25UZWU7ZmN1cGhhcnBvb25sZWZ0RG93blJpZ2h0VmVjdG9yQmFJbWFnaVRTSENlZGlsbmNvbmdkbnduZWFBb2dvZ2VsO0NvbmlzdXBzZXRuZXFxO25wcmN1ZTtPdGlsaW5vZG9kb3RlcWRYc2NFbXB0eVNtYXJjZXJicmFjZTtmaURvdERvdGRIYmlndHJpYW5nbGdzaW9nb3N1cGVkb3RndHJlcWxlc3NzbXRlcztmbGxpZzt2YXJlcHNpbE5vdEdyZWF0ZXJGdWxjaGN5WmVyb1d5ZkxhcGxhY2JibnVtc21hc2JlY2FSaWdodFRyaWFuZ2xlQmFyO1VuZGVybW9wZnZhcnRyaXJpc2luZ1dzcXVhdGVybm92YmFyTm90U3VjY2VlZHNsb25nbGVmdHJpZ2h0YXJyb3dlcXZwYXJzRm9wZjtiaWdjdXA7YmVtcHRpZ3JhdktIR2dyc2FxdW9EaWZmZXJVdGlPbWljcm9uO0Vkb2xlcXE7VWFycm9jaWxmbHRzY3lMY2VkaWV1bWw7SmNpcnZvVXBhcnJubHNpT3BlbkN1cmx5RG91YmxlUXVvdENPUFk7Ym94SGRzdXBoc2FvZ29uO0xzdHJvTmVzdGVkTGVzc0xlc2ZsYXRpbWFnbGl3cmVhdGh2YXJwTm90UHJlY2VkZXNsYnJrc2xkZ3RyZXFxbGVzc3pzZ2Vxc2xhbmxlcXNsYW50Tm90R3JlYW5sZHI7YmlndHJpYW5nTGVmdFJpZ2h0QXJyY2xmaWxEb3VibGVMb25nTGVmdFJpZ2h0b21hY3JUaGluU2dqYXN5bXBlVmVydGljYWxTZXBhcmF0b3I7SW52aXNpYmxlY3JhcnI7RXVhbmdtc2RhY05vdFJldmVyc2VFbGVtYWJyZXZVYWNMZWZ0RG93blRlZVZlY3RvdWxjb3JuZXJvbGNyU2hvcnREb3duQXJyb3dVcHBlckxlZnRBcnJvd0JjeWFhY3V0ZTtPb3B1Y2lybGRxdURpZmZlcmVudGlhbERsYWdJbWFnaW5hcnlJQ2xvY2FuZ3phcnI7TGVmdFVwVGVlbGFycmZzY3NhcGlEb3VibGVMb25nTGVmdEFyZXFzbHNjcG9saWxvbmdyaWdodGFyclNoY2Fwc0ludmlzaWJsZVRpbWVzO2FlYmFja3NOb3RQcmVyYnJhY2VDbG9ja3dpc2VDb250b3VySW50ZWdyRXRhO3NpemFjdXRMZWZ0RG91YmxlbHNpbWU7c3NldHN1cGhvbWFjZWdzYnF1bztsQXJyO3NlYXJyb3dBb3VoYXJOdGhpY2thcHByb2xvd2FzbGx0TG9uZ0xlZnR4b3BsdXNsb29wYXJyb3dsZWZ0YXN5bXBsdXN0VXBBcnJvd0RvU2NlcmlnaHR0aHJlZXRpbWV1bHRyYmxhY2t0cmlhbmdsZWRvbGVmdHJpZ2h0aGFycEdyZWF0ZXJHcnN3QWZyYWM1NjtsZXFzbGFudDtuZUFyaGVhcnJpZ2h0dGhyZWV0TGVmdERvd2Vsc3pzY2NhY3V0ZTtyY3VyaWdodHJpZ2hwb2ludGludFNvcHVncmF0cmlhbmdsZWxlZm1hcHN0b2Rvd0xvbmdyaWdodGFybm90aW5kVW1hY3JDbG9ja3dpc2VDb250b3VySW50Y29tbWF0VXBFcXVpbGlicHJvZnN1cmZnZGxzY1VwVGVlQXJyYXRpbHJpZ2h0c0tKY3k7Z3RyZXFsZXNzO3hoQXJyRG91YmxlVmVycW9TcXVhcmVTdXBlcnNlc2JxdWRzdHJvbWVhc3VyZWRhbmdOb3RUaWxkcHJlY25lSW50ZXJzZWN0ZGRhQUVsaWdSaWdodFRyaWFuZ2xlVWRibGFjO3RyaXRpbWU7bEJhcnI7bEJNZWRpdW1TcGFjZWN1cGJyY2FjdGRjZW50ZXJkTWVkcmRHYnJldlJldmVyc2VFcXVpbGlicml1bTtGb3JBbGFicnJob3Zhbmdlb3JpZ29MZWZ0VGVlQXJsdHJpZjtPYWN1VXVtcm90aW1Eb3VibGVDb250b3VySW50ZWdDaXJjTG9uZ2xlZnRyaW5sZWZ0YXJyb3c7bG1pZG9BRUludGVncmFWZXJ1cmNvcm5lcnNwYWRlbG9vcGFycm9Ob3RTdWJzZXRFUHJlY2VkZXNFcXVhbGxhZXNjYXBFY3k7cmxhcnI7YmlnY2lydHN0cm9uZWFycjtvbWVnYTtTc2N6b2djeW5sdHJpZXpvcGZ2YXJlcHNpYmVjYXVpZWN5dW1hbnRyaWFuZ2xlbFVwYXJoYWlyc3BsdGNpVGhpY2tTQ2FjdXRlO0RlbHRhO3ZzY3JSaWdodFVwVGVlVmVjdG9mcGFydHJvYXJMZWZ0VHJpYW5nbGVCYXI7YXVtbG5wYXJhbGxlbEZpRG93bkxlZnRUZ2JyZXZlO3ZlZWVxO1Nob3J0VXBBU3F1YXJlU3VwZWlpaWlzdWJFO05zY3I7Tm90RXF1YWxUR3JlYXRlckVxdWFsTGVzc3JjYXJGaWxsZWRWZXJycHBvbGludDtvZVVuZGVyUGFyZW50aGVzaXM7RG91YmxlTGVmdEFycm93O2dzaW1lO2ZwYWVmcjtiZWNwaW9taW5sQXRhZ2FtbXdlZGdjaERvdWJsZVVlbXB0eXY7ZnNjbmxlZnRyaWdodGFycm9MZWZ0VGVyaW50cmlhbmdsZWxlZnQ7cmlnTm90R3JlYXRlckZ1dmFyZVNIVWFZQWNsb2FycmNvbXBsZXhlc0Vwc3Nob3J0cGFyYWxudnJ0cmllO092ZXJCcmFjZTtUY2VkYmlnb3BsdXNQc3JvYnJjd2NvbmlQcmVjZWRlcztub3RuaXZhaG9yYkRmYW1hY0xvbmdMZWZ0QXJyb3dtb3BmO2NvbG9uZXE7UHJvZEVjRXF1YWxUaWxkd29wZnNpZ21nZXNsZVNjYXVyY3JvdXJjb3JuZXI7b2htSU9MZXNzVHByY3VlRG93bkFycm93O3ZsdEludmlzaWJsZUNvUmV2ZXJzZUVsZW1lbnR3cE9zbGFzYm94VXI7U3F1YXJlSW50ZXJzZWNpcnNjaXJucmFycmM7dHJpZG9yYnJrc2Vzd2Fsb3didHJpbWludXM7Y3VwY2FwO2dhcG5hcHByb3g7RGlhY3JpdGljYWxEb3VibGVBY3V0ZU5lc3RlZExlc3NMRGFyTGVmdEFycm93QmFUaWxkZTtOb3RMZXNzU2xhblljbkxscXVlR29sakxlZnRDU3VjY2VlZHNUaWxucnRybndhcnJyYXJycE5vdFNkaXZpZGlnZWNpcmM7ZWFMb25ncmlnaHRhcnJvd1JpZ2h0QXJyb3dMZWZ0QXJyb0dyZWF0ZXJTbGFudEVxdWFOb25CcmVha2luZ3JvYXJyO0RvdWJsZUxlZnRSaWd2YXJ0cmlhbmdsZU5vdEdyZWF0ZXJFcXVhbE5vbkJyZWFraWRhc2g7UHJlY2VkZXNTbGFudEVxdWFsYmxrMTQ7WXNsYWVtUmlnaHREb3VibGVCcmFja2JsYW5iZHF1b1VwYUJhY3RwckJvcFJzaDtMbWlkQ291bkNhY3VTcXVhcmVTdWJzZXRFcXVhVXRpbGRhcGFyYnJrc2xkYmV0YTtSaWdodFZlY3RvckJhcjtibGFja2xvemVuZ1VwcGVyUmlnaHRnZWxMZWZ0VHJpYW5nbGVFcXVhbGxsaGFyZDtTaWdtYTtFY2lydGhrRWFjdUlvZ29SaWdoTm90TGVzc0VxdWFsO2RibGNlaWFuZ3phcnJlYWxwYXJ0c3ViZWRvdEJhY2tzbGFvc2xhbkxlZnRhbG9uZ3JpZ2h0c3FzaW5jYW9hY3VzcXN1YnNldDtudmxlRGlhY3JpdGljYWxHaHlwaXByZXhwb25lbnRpc2NhcnN1YnJhcmVxc2xhbnRsZXNzZXFjb2xvbk1lZGl1bVNwaEFycjtOZXN0ZWRMc3NtaWxlO3VyaXZhcm5vdGhpbkNvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWFscGhhO1VyaW5nTGVmdERvd25UTG93ZXJSaWdodEFycm93eGZyO0xlZnRWZWN0b3I7VmVyeVRoaW5TcGFjZURpYWNyaXRpY2FsRG91YmxlQWN1dGU7SG9ySWdsZXNkb3RvclBvaW53QXJtb3VzZG93bmhhcnBvb25sc3VwZHN1YjttZWFzdXJlZG53YXJyb3doZWFDZEh1bXBFcXVuTHROb3RMZXNzU2xhbnRFcXJ0cmJsYWNrdHJpYW5nbGVyaWdoZmZpbGlnZGZlbXNwMTM7TGw7YmFja2Vwc2lsb090aWxkZTtyaWdodHRoclN1Y2hUaGF0Y2FyZXRmaWxpZ1lvcFVicmN5TGVmdFRyaWFuZ2xlRXF1YWw7RGlhY3JpdGljU3VjY2VlZHNTbGFudFVuZGVvbWFDYWN1dEZpbGxlZFZlcnlTc3RyYWlnaHRwaGduYXBwck5vdEVsZW1lbnQ7bmNvbmc7RHN0cmRsY290c2NyO2RhbGVWZXJ0aWNhbExpbm5sZXNzZHJvcE5vdFRpbGRlRnVsbEVxdWFsO2FuZ3NwaHdjaWJveEhEO3V1bWxUaWxkZXVicmV2ZW5sdHJkY3llc2RvcmlnaHRhcnJvd3RhaVNob3J0UmlnaHRBVmVydGljYWxMTGVmdERvd25UZWVWZWNib3h2cmZvcGY7b3JkZW5wb2xpbnRkYWxldGg7Y3VybHllcVJpZ2h0RG93blZlY3RvcjtMb3dlckxlZnRBcnJubGVmdGFycm93bGVmdHJuYnVtcDtOZWdhdGl2ZVZlcnlUaGluU2JveGg7ZXFzbGFudGxlc0xjZWRhd2NvbmludDtiYWNrZXBzbmxBckNsb3NlQ3VybHlEb2RpYW1mZnJjdXJ2ZWFycm93cmlnaHQ7c3VjY25lcXE7dGJNZWRpdW1udmx0cmluZUFycmxjYXJvdHN0cm9rO2xlc2RvdG87cmxoYXJDb2xvbHNpbWVwYXJhbGxlZnRoYXJwb29udXBVcFRlZUFycm9hbmdydHZuY2FtZVJFR05lZ2F0aXZlVGhpY2tib3hIZDtHckxlc3NUaWNvQ2xvc2VDdXJseVFJYWN1dGU7VGlsZGVGdWxsRXF1YURvdERvdDtib3h1bDtjdXJseWVxcHJlY3djb25pbnQ7VXBkVm9wcHJzaW1jY2Fyb2JldHdlZW47R2NlZGlsbGJyYWJveFZscmlnaHRhZGZpc2hydGltZXM7aGtzd3NpbWw7bG5zaW1PcGVuQ3VybHlEb3VibGVRdW9vbGlkb3duZG93bmFyT3BlbkN1ZGl2aWRlb250aW1lc3JoYXJ1bDtyZHNyb3BhcjtzZXN3YXI7c3Vic2ltbm90O0VncmF2ZTtVbWFyb3RpbWVkb3duaGFycG9vbmxlZnRFcXhvdGlsb3BmO2xhbWJkYWRvd25kb3duYXJyb1ZzY0Fzc2lnbnpoZnJhYzM1O2Rvd25kb3duYXJyb3dzckFhb3J2O0VtcHR5VmVyeVNtVW5kZXJQYXJlbmN1ZXNMZWZ0QXJyb3dSaWdocmlnaHRyaWdodGFyZGNhcm9uO05vdERvdWJsZVZlcnRpZXBhcjtkYWdnZXI7bGVzc2VxUGx1c01Ob3RTdWNjZWVkc1NsYW50YmxsYWVtcHR5QU1wbGFua3ZmamxpbGVmdHRocmVldERKY0Rhc2JzaVVwQXJIYXJOb3RSaWdoZWFydHN1aXR1ZmljeWxjdHluYnVtcGU7c2RvY3lsYm94SDtyYXJyY2x2bkVoa3NlYXJyZmxMZWZ0QXJyb3dSaWdodEFycm93O250cmlhbmdsZWxlZlNxdWFyZVVpbnRlcmNhbDtndHJhRGN5cG9wTm90TGVmdFRyaWFuZ2xlQmFyO2xyaGFyZDtFb3BmO3V1bWw7YmlndXBpcXVlc2JveHBsdXM7VnZkYmlndmVlO0RhcnJubGRHZG90O2RoYXJsO1BjeTtEb3VibGVEb3duQXJyb3c7Tm90Q3VwZW1zcDtuZ3Q7bnNpbWVxO2x2ZXJkb3VibGViYXJ3ZWROb3RTcXVhcmVTdWJzZXRFcXVzZXRtSW9wZjtUU0hjYmFjTG9uZ2xlZnRhQ2xvc2VDdXJseVF1b3RldGNhTFQ7VnNjcjtVc3ByZWNjdXJseWVxYmxhY2tsZXNzZXFxZ3RyeGhBRXF1aWxpYnJpc2VBZWN5O0h1bXBEb3dGY3k7YW9wZjt4aERpYWNyaXRpY2FsR3JhdmViaWd0cmlhbmdsZXVwO25yaWdodGFycm93O1BOYWxkcXVvY2lyZU1hcG5zdXBzZXRlcXVlc3RlcUxlZnRSaWdodEFyeGxBcnI7bHVydW53bm50aWxkZTtQcmVjZWRlc1RzdXBtdWx0aWpsQ2FwRGViaWd3ZWRnZTtjcm9zcztjdGN1cnZlYW51bWVybztzZXN3c3RybmJOb3RSYWNub3BzYWN1dGVjY3Vwc3NtUkJhbGJya2VDaXJjbGVUaW1lc0JhY2tEb3VibGVWZXJ0aWNUaXVwbHVVdE5vQnJlYWtOb3RTcXVhcmVTdXBlcnNldEVxdWZhbGxpbmdkb3RzZU1pbmFuZ21zZGFmO3dvcERvd25BcnJvd0JhckdyZWF0ZXJMTmV3TGlubmxhcnJzaW1kb1NxdWFyZVN1YnNldEVxdWFsO2dhY3V0ZVJhcnJ0R3JlYXRlckVxdWFsTGVzYm94bWlhYWN1Q291bnRlckNsb0ZvdXJVcG5pdmJpZ3VwbHVVcGRvbG5FQ291bnRlckNsb2Nrd2lGaWxlcXVlc3Q7bmdlcXNsYW50O0lKbGlmcm9zbGFzRG91YmxlTG9uZ1JpZ2h0Q2xvY2tEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3dzaG9ydG1pZDtVcFRlZUFycm93QmFja3NsYXNoTm9uQnJlYWtpbmdTcGFjZTtOb3RHcmVhdGVyU2xhREpjeTtubGVmdHJzdWNjY3VybHllbkxlZnRyaWVsc2RvdHFwcml0b3NhY3NrY2VkaWxMYXBsYWNldHJmaGtzd2Fyb3c7S3NlcWNpendqc2JuTERvdWJsZUxvbmdMZWZ0QXJyb2NpcmU7UmNhcmRBcnI7ZmZsaWc7QmV0YVRoaW5TcGFjZWpmcjtHcmVhdGVyU2xhbnRFcXVhbDtVcGFycm9Ob3RHU3VjY2NvbXBsZXhIb3Jpem9udGFsTGluYmlndGxicmFjRGlhY3JpdGljYWxUaWxkY3VybHl2TG93ZXJSaWdodEFycm9Eb3RFcXV1cGFycm9Pc2xhc3Vic2V0O3RoaWNrc2ltO2VxdnBhcnNsYWxlcGhMZWZ0QW5nbGVCcmFwcm9wdExvbmdMZWZ0UmlnaHRBcnJvbnNob3J0bWluYXA7U21lcXVhbHNuYWNhdFNzY3I7bGVmdGFyaWdodHNxdWlnYXJyTGVmdGFycm93O2NlbnRlckZvdXJpZXJMb25nTGVmdFJpZ2h0QXJycGx1c2xBYXJyO3Jpc2luZ2RvdHNldHJpYW5nbGVkY2FwY2FwO0RpYUVUbXVtYXA7Z2VzZG9Eb3dubGVzc2VxcWd0YmxhY2t0cmlhbmdsZXJpZ2h0bG9uZ2xlTXVSaWdodFRyaWFuZ2xMZU1jeTtlY2JpZ2NpcmNiYWNrY29uZ2RkYXJyO3NtYWxsc2V0eG5pU21hTm90U3VjY2VlZHNTbGFudEVxcHJvZnN1cmY7RXhpZ3NVcERvZXhpQ2FwaXRhbERpZmZlTGVzc0Z1Z3RyYXBwcm94O2JldHdsdmVydG5ndGNpcjtzdW07ZXhmcmFjMjNVc2NwcmVjZWdydXJpbmZvcmFsbnJpZ2hwcmNDb25ncnVsZWZ0dGhyZWV0aWRkb3RzZXE7YmlndmVDYXBpdGFsRGlmZmVyZW5lbWFTaG9ydFJpZ2h0QXJyb3dib3BmZGlnYW1tYTtldXJvO0ZpbGxlVmVyeVRoaW5TcFZkYXNoO3N1cHNpbXZsdHJpZG91YmxlYmFyd2VkZ3VsY3JvcDtSaWdodFRyaWFjd2ludDtmc2NyO1JpZ2h0RG91YmxlQnJhY2tlc3NldG1uO1J1bmxlZnRhcmJrYXJSaWdodERvd25UZWVWbGhibGs7dHJpYW5nbGVkb3duc21hbGxzZXRtbGJhcnN1YnNldG5vcmlBcnhkdG50cmlOb3RMZWZ0VHJSaWdodERvd25UZWVWZWN0b3I7bnN1YkU7bnN1cHNldGVxcWV4aXNOb3RFbGVtZW5iaWdvcGx1VW9iaWd0cmRzTGVmdFRlZVZlT2RibGF0c2hjeXN1Y2NjWWFjdXRpbnRlcmNPcmJveERMb3dlckxlYmlnc3FVcHNpVW5kZXJCcmFja2V0ZGRlcHNoZWxsaUxlZnRUcmlhbmdyaG92O1N1Y2NlZWRzU2xhbnRFcXVhbENmcjtyYW5SYXJydGxuc2NlRG90RXFJdW1sO25zdWNjZXByb2ZsaW5lc3VwbGFmaWxpR2FtbWhjaXJ3b2FvZ29uZGllO2l0aWJhcndldGltZUxvd2VyUmlnT3ZlclBhcmVudGhBbWFjcllVY3pkb250cmlhbmdsZXJpZ2h0ZXFkcmNvcm5sZWZ0YXJyb3d0cGFyU3VwZXJSZnN1cGVtaWNyUnNoY2lyY2xlYXJyb3dyaWd0aW50cGhtbUREb3RDbG9zZUNtYXBzdG91cDtJZ3JhdmVrY3lOYWN1cmhhcmQ7QW9nb247UmlnaHRBbmdhY3V0R3JlYXRlckZ1bGxkdXRycHJlY2FwcHJveDtsb2FydXBsdXN2YXJzaWdtYTtydGlob29rbERvd25hcmxlc2d4bnN1cGRzdW9yRGlmZmVyZW50aWFBYWN1ZGVhdW1sO2xiYnRyaWRyZmlzaHQ7TGVmdFRlZVJ1bGVEZWxMb25nTGVhbmdtc2RhZztyYXJyd2d2ZXJ0bmVCZXJub3VsbGl1YWN1dGU7UHJlY2VkZXNUaWxkZTt2cnRpZWNYaTtOb3RWZXJ0aXJuc2Nwb2xpbnQ7Tm90VGlsZGVUaWxkZXBpdGNoZm9ya21jb21tYTttZlJpZ2h0RG93blRVbmRlclBhcmVudHRzdHJkZG90c2VUc2NyO2N1cmx1cHNpbG9udXRpc3VjY25hcHByb3J0aW1ldnByb3Boc2lhY2lvdGFwbHVzZHVQcmVjZWRlc1NsYW50RXF1YWw7dXBscmRzaDtjYWNnZ2dkemlncnN1cHNldG5lcTtjdXJseWVxc3VjcmZsb29yRGlhbW9ucmlnaHRhcnJvd3RhaWxSaWdodENlaWxlbXNwMTNOb3RQcmVjZWRlc0VxdWFsO2d0ZERvdWJsZUxvbmdydHJpZjtkYXNoTm90U3F1YXJlU3Vic2V0aG9va3JpZ2h0YVhmZ3RyYXJyZWFsaUxlc3NHcmVwaG1tYXdlZGdlRG91YmxlTGVmdEFyT3BlbkN1cmx5UXVuaHBhcjt3Y2lyYzttbGR6YWN1TG9wZmN1ZGFyeG9wbGhlbGxpcHBsdXNlO2xBdGhzdHJIb3Jpem9udFVwQXJyb3dEb3duQXNxdTtxcHJ4bGFyc3VjY3ZhcnRyaWFuZ2xlcmlnaHRwcmVjbmVxdXRsdHJQYXI7dXBoYVN0YXVBcnJibG9jaztzdWNjbmVxcmFjdXRydHJpbHROb3RMZWZ0VHJpYW5nbGVFcXVhbDtNZWRpdW1TcGFscGFybHRpYWN1dHNob3J0cGFyYWxsZWw7bHN0Y2x1Ym52Z3Q7YmlndHJpYW5TYWN1dFpkTm90UmV2ZXJzZUVsZW1lbnQ7Um9wZmNvbmdkb2N1cnZlYXJyb3dyaWdoaW50ZWdlcnNiaWdzcWN1cE5vdFRpbGRlRXF1Z3RyZXFxbGVFbXB0eVNtYWxsU3F1YXJlVGN5O3BsdXNkbnNjO2ludGxhcmhrO05vdFRpbGRlVGlsZGU7RG93blJpZ2h0VGVlTGVmdFVwVGVVcEVxdWljaXJjbGVkY25oYXJybGF0YWlsO05vdE5lc3RlZEdyZWF0ZXJHcmVhbmxzYmlndHJpYW5nbGVkb3dubWNvbWduYXBwcm94WG9wZjtsZmlzaHRyaWdodHNxdWlnc21pbGVjb25pbnQ7bXVsdGltYVplcm9XaWR0aFNwYWNlO0Rvd25BcnJvd0JhY2VudGVzYWN1Y3Vwb1lVY3k7UmlnaHRBbmhhbUxlZnREb3VibGVCcmFja2V0ZHdhbmdFeHBvbmVudE9wZW5DdXJ0cmFkZWVuc3B4Y3VndHJlcXFJbnZpc2libGVDb21tYXJhZGlEb3duTGVmdFZlY3RsZWZ0bGVmdE5lZ2F0aXZlVmVyeVRoaW5TcGFjZTtEb3duTGVmdFJpZ2h0VmVjdG9yQ29wTmVnYXRpdmVWdHByaW1lO3VwaGFycG9vbnJpZ2h0VEhPUk47aXRzdXBzZXRubHNhbHBQcm9wb3J0aWFjZDtyY2VkaWx1d2FuQ2FwaXRhbERpZmZ1bWFjaGtzZU5vdE5lc3RlZEdaY2FEWmN5R3JlYXRlclNsYW50RXBvdW5zcXN1Ymhvb2tyaWdodGlub2RvdGJvdDtTcXVhcmVTdXBOb3RQcmVjZWRlc0VxdXNldG1pbnVzO2ZhdGhrc2ltcmhhcnU7YnNlbWd2ZXJ0bmVxeWVuO2xjYXJvbnRyaUFzY3I7T3Vtc3VjY25hcHByb3g7bWludXNiO0VtcHRQb2luc2ltbmU7RG91YmxlTG9uVWFySHVtcERvd25IdUVzY3JrZ0NhcGl0YWxEaWZmZXJlbnRpYWxtaWNybztyaWdodGxlZnRhcnJvd1VnckxlZnRVcFRlZVZlY3RvRW1hY3I7cnhuc3VjTGVzc0Z1bGxFcWVhY1BoaXJzYXF1bzt5Y2d2ZXRyaWFuZ2xlcmlnaHR3b2hlYWRyaWdodGFOb3RTcXVhcmVTdWJzZXRFcXVhbDt0d29oZWFkbHJicmtzbHU7UmlnaHRVcERvd25WZWN0ZXFvcmRVZGhlbHVwdXBhcnJvRmlsbGVkU21hbGxTcXVOb3B0cmlhbmdsZWxnYWN1dHVsY3JvcEludmlzaWJsZVRpbXBlcnR0ZnJzcGFkZXN1TGVmdENlaWxpZ2VzY2NRZm9yZDtudGdsO2xlZnRyaWdodGhhcnBvb3ZhcnNpc3Vwc2V0bnBhcmFsbG1pZGFOb3RQcmVjZWRlc1NsYW50RXF1YWxia2FVbmRlclBhcmVudGhlc3N1Y2NjdXJseWFyaW5nTGVmdHJpZ2h0YXJyb3dud0FybmNhcDtCZnJQb2luY2FyZXBsYU5vdFNxdWFyZVN1cmFycnRsTm90SHVtcEVxdWFyYnJhZGlhbW9uZHN1aXRJbWFnaW5hcmlmcm5WRGFzc3Vwc3VwRmlsbGVkU21hbGxTcXVhcmVOb0JyZW5hdHVyYWxzeGxsbW91c3RhY2hlSmZybnZkYXNoO0ljeW52SHhzY3I7R3JlYXRlckZ1bGxFcXVhc3Vwc2V0ZXFxO3JhcVByb3N0UnVsZWZhbGxpbmdkb3RzbnZydHN3YXJwcm9mc2lhY3V0ZTtySHVjaWFwYWNEaWFjcml0aWNhbFRpbGNhS2FwcGF1ZnJib3h2Umhvb2tsZWZSaWdodFRlZVZlY3RvT2dyYXZlTG9uZ2xlZnRyaWdodEJhcnY7UmlnaHRVcFZlQ29udG91ckludGVncmFsdmVyYmFyO2xsY29ycGhubHRyaTtkb2xsbnNjY3VkaXZpZGVvbnRpbWVOb3RSZXZlbnBleHBvbmVudGlhbGVDaXJjbGVNbGhlYXNMZWZ0VmVjdG9yT3ZlclBhcmVudGhlc2xvYXJyO3JlYWxwYXJzdXBzZXRlcTtFeHBvbmVudGlhVXBwZXJSaWdodEFycm9Ob3RMZXNzU2xhY29uZ2RvdDt1dXZlcmJhYWxlZk5KY3k7UVVGaWxsQ29wckFyaW5nc3RyYW1Tb3BmO2F3aW51bHRyaTt0aG9ybjtib3hoVXNjbnNpRG91YmxlVXBBTm90VmVydGljYWxCYWlwcm9kO25vdG5pdmJ0cmlhbmdsZWRvd247bnZsQXJyVGNhcm9uWXNjcjtDbG9zZUN1cmx5RG91YmxlUXVvZWxzZG90O3JhdGlvbmFsTm90VGlucG9kamN5O0dyZWF0ZXJUaWxUaWxkZUZ1bGxFcXVhbG9kb3Q7bHRpbWVpY2JsYWNrbG96ZVplcmxvb3BaZWRvdHNxdWF0cmltZ3RybGVzczthbmRzbG9wZXV1YXJyY2VudGVyZG90O05vdFN1cGVyc2V0RXF1T3ZlckJhcGFydDtiTm9waG1zaWdtYWY7bGVzc2FwcHJvTm90TmVzdGVkR3JlYXRlckdyZWF0ZXI7bHN0cm9rO2F0aU5vbkJyZWFraW5nU3BhY0FyaW5nO3RvcGJMZWZ0bGVmdGhhYnJ2YlRzRm9wZnRjZU5vdFRpbGRlUHJvcG9yZG07Tm90U3F1YXJlU3Vic2V0O0xvbmdsZWZ0cmlnaHRhcnJvdzt4dXRtaW51c2JvaXJtb3VzdGFjaE9ncmFycmJmcztWZnJHZztlbmdzY2VkaWw7dGRvdHhvcGY7TGVmdFRlZVZlY3RUc3Ryb2s7dUh0aW1lcztzZW1pO05vdFN1Y2NlZWRzVGlhbGVwaDtyYXRpb2RhckNlZGlsbGFMZWZ0VXBWZXBsdXNzTm90TGVzc1NsYW50RXF1Tm90R3JlYXRlclNsYW50RXF1YWw7bGhibmN1cGduc2ltcmFyQ3VwQ2FwO09FbGlyaWdodGhhcnBvb25kYWd0aW1lc2Q7aGFpckpvcGZzZUFycjtSaWdodEFuZ2xlQnJhY05jYXFmcjtyZWFscGFydDt6ZWV0cm1jeXNicXVvTm90UmV2ZXJzZUVsZW1lbkdjZUhBUkRjeTtOZXN0ZWRHcmVhdGVyR3JldGlsZGU7dWRhTm90TGVzc0xlc3M7UmlnaHRBcnJubHQ7aG9tdGhiY05vdExlZnRUcmlhbmd0YXJnZW5zaW1lcVJpZ2h0Q2VpTGVzc0Z1bGxlcXNpbTtkd2FuZ2xlO25wYXJzT3ZlckJkb3dubmdlcXFFTkc7Y2lyY2xlZGNpcmNOZXN0bnByZWNleHNjcnNzdGFycXVhdGVybmljc3VibHRkb3Rob2FycjtkaWFtb25kc3Vpc2hvcnRtbnRsZztob29rbGVmdGFycm9XZnJMZWZ0RG93blZlY3RvckJhcjtmZmlSaWdodFVwVnNldG1uO0hpbERvd25BcnJvd1VwQXJuTGVmdHJpZ2h0YXJyb0xlc3NMZXNzVXBzaTt0cnBlemlzdWJuRTtzcXN1YnNldGVxZnJhYzE0O2lmZjt2ZU5vdERvdWJsZVZlcnRpY2FsQmFyO2xjZWlsO2V1bUh1bXBEb0RvdWJsZUxvbmdMZXJpZ2h0aGFycG9vbmRvUmV2ZXJzZVVwRXF1aWxpYnJpdWRvdGV4cG9vbGluZU5lc3RlZExlc3Nsb25nbGVmdGFycm9SaWdodERvd2ltYWNyT3BlbnJoc2NlZGlMb25nTGVmdEFycmxhcGlqbGlyb3BsdW5hcHByc2VtaUNvcHJvZHVuaTtwaG9Ob3RSaWdodFRyaWFyYWVtZW1wdHk7c3dBcnJzcXVhcmU7dWRibGF0d29oZWFkcmlnTG9uZ1JpZ2h0QXJyb2RibGFucmFycnduc3FzdXBlO3RjeWJpZ290aW1lc2VzY1NpZ21WdmRhcGx1c3R3b2Vnc2RvdDtjdXJ2ZWFycm93cmlnZ2Vxc2xhbmxlZnR0aHJlZXNmcm93bjtoY2lyY2N1cnJlbnN1cHNldDtMZnI7bmdFO1VuZGVyUGFEb3VibGVMZWZ0QXJycmlnaHRoYXJwb29uZG93Y2VudGVyZG90Tm9uQnJlYXZlZWJhcjtrb3BmTmVnYXRpdmVNZWRpdW1tc3Rwb3N2YXJ0aGVMb25nbGVmdHJpZ2h0YWxiRG93blRlZUFycm93O0V1bUxlZnRWZWN0b3JCYXI7bnZIYXJTdXBlcnNldEVxdW5wcjtzdXBoc3ViO2pjaXJjO2RyY29ycmVhbHN0YXJnZXRwaXRjaGZvcm11bHRpZXBzaTtkc2NydG9wYm90bnZyY2lyY2Vxc2VzUHNjcmhvb2tyaWdobGNlZGRhZ2dnbmFwRWZyO1VuZGVyQnJhY2tsZHJkaGFjaXJjbGVzbXRlb2ZjaXJuZ3NpU3VjY2VlZHNTbGFudEVxdWFsO25leFVkYmxVYmhlcmNvbjtSZXZlcnNlVXBFcXVpbGliclByb3BvcnRpb25hbGxhcmFwRUN1cExvbmdSaWdodEFycm93dnN1cG5lO1JpZ2h0VWhmckRvd25hcnJScmlnaHRhVGlsZGVGc3VtY2FwZHZhcnN1YnNldG5ud2Fycm9SaWdodERvd25WZWNuc2ltO2RpdmlkZW9udGltblJpZ2h0YXJyb2lvY2xuYXA7Y3VyYXJySGNpYXBhY2luc3VjYztyb3BscmFycnNib3hib09wZW5DdXJseVF1b3RlblZEYU5vdFJpZ2h0VHJpYW5nbGVFcXVyaWdodGxlZnRhcnJTdGFydmFyc3Vic2VvdGlsZGJhY2tzaW1lcTt2YXJwaGk7Q2FwaXRhbERpZmRIYXI7b2d0Tm90RVRoZXJlTm90VmVydGljYWxib3hWSE5hY3V0ZWNhcGFuZFN1cGVyc2V0RXFiZXBzaWRlZztTdWNjZWVkc1NsYW50RW9tZWdWb3JkZXJvbmVxdWl2O3BlcnRlbnRvc2E7Tm90RG91YmxlVmVydGljYW5yaW9mY0VtcHR5U21hbGxTcXVhcmU7bW9kZWxzO3ByZWNVcHBlclJpZ2h0QXJyU3F1YXJlVW5pb247bEFyTm90TGVzc0dyZWF0bGF0Tm90Q3JwYVVwYXJyb3dsamNTdWNjZWx0Y2lyO25WRGFzaFpvcFJpZ2h0RG93bnJhdGlvbmFic29saHN4dXRyaTt5ZW5Fc2ltO21hbGU7cGl0Y2hzZWFyaGt1ZmlzVm9Eb3VibGVVcEFycnByb2ZhbGFyaWdobnNob3J0bWlkO2JsYWNrdHF1b1lVY3lpZXhjY3VybHl3ZWRnZWxpbnRlcnNkdWhhTGVmdFRyaWFuZ2xlO25nZXFzbFlJY3NoYURvd25MZWZ0VGVlVmVjdG9yRG93blRlZUFycnVsY3JvbGRydXNoYXI7dXNjcjtzaW1nRW5MZWZ0cmlnTG93ZXJSaWdodEFycm93O3Vyc3Vic2V0bmVxcTtVY3N1cGRzVWdyYWltb2ZlbGluc3Vic2V0bmV6aXJhcnJoa0Fmck5vdEdyZWF0ZXJHcmVhdGVyO0NvbG9uc3NtaWxlTm90SHVtcEVsZWNhcmhvcGx1c2J0d29oZWFkbGVmbGVmdGxlZnRhcnJvd3NWZXJ0aWNhbFNlcGFyYXRkb3VibGViYW5SaWdodGFyVmVydGljYWxTZXBhcmF0b1RjdXJ2ZWFycm93Ym94dUw7Ymlnb3BsU2hvcnRVcEFycnN1Y2NuZXFxbmxFO1VjeTtJdGJpZ29wbHVzO2JpZ3NxY25zaG9ybXN0cG9TY2Fyb2Vxc2xhbnRnaG9va2xlZnRhcGx1c3NpbW52bEFycjtMZWZ0VXBEb3duVmxlZnRsZWZ0YXJyb3dzO0Rvd25MZWZ0VGVlVmVjYmlnc3FjdXF1ZXNiZXRoZXBhcnNyaWdodGxlZnRoYXJwb29ucztjbHVic3VpdFVwREV4cG9uZW50aWFscHJlY2NsYWdyYW54dXRyeGlkb3VibGVvZGJsYWM7YWNpckRhZ2d1Z250cmlhbmdsZWxlZnRucnJhbmdsUmlnaHRDZU5vdExlZnRUcmlhaGFsZXFzbGFudGd0cjtjdXZlZTtOb3RQcmVjZWRlc1NCb3BmO0xlZnRWZWN0b3JCendib3hkcm5taWQ7RG91YmxlTGVWZUxlZnRSaWdodFZlc3VjY2FwcHJsYWduYXBwbGVzZG90b2xhcnJiO2FjdVVuZGVyUGFyZW50aGVndGltZXNmbm9mO2toY3k7bmlzZDtsc2NySWFjdXRlcmlnaHR0aHJlZXRpbXB1bkZpbGxlZFZlcnlTbWFsbFNxdWFEb3REb0ltYWdpbmFyeWZvc3ViclZlcnRpY3JicmtzbHNtYXNobWFsdGVaZXJvV2lkdGhTaHN0cm9rO3ZhcnN1TmVnYXRpdmVUaGluU3JjYXZhcm5vdGhpbmdSaWdodFRyaWFuZ2xlQnJjZWRpcGl0bGVzZ2VVbmRlckJyYWNlO2VjaXI7Tm90UHJlY2VBc3Njb21wZm5wcnVyc3VwbGFycnNpbXJwb2ludGludDtIb3BDY2FpdGlsZGV0cmlhbmdsZXJpZ25idWxlc2NEb3duQnJlUm9oYXJybmU7YW5ncmthcHBhZG93bmRvd25hcnJvd25zaG9ydG1VY2lBdW1hcmtpb3Rsb25ncmlnaHRhcnR3b2hlYUxlZnRBcnJuY29uTHNjcm52aW5maW5jb21tYU5vdFByZWNlZGVzU2xJZG9uZ2U7RG93bkxlZnRSaWdodFZKc2NyaXByb2RoYW1pbEZzY3I7aWNpcmNyYXJyO2xoYXJ1O3dlaWVycHRyaWU7TmVnYXRpdmVWZXJUaWxkZUVib3hVbHByc3N1cHNlbmZydmFyZXBzT3ZlclBhcmVudGhlSnVrY0FncmF2ZTtvbWFjcjtzdWJzdXA7Q2lyY2xlUGxvYW5nO2ZyYWMxcGVybXJBdGFpbGRpYW07TG93ZXJMZWZ0QXJzcXN1YnNqb3BzdXBkb3RuZXNlYVJpZ2h0VmVjdHBlcm1pbGxtb3VzdGFjYm94aGRVbmRlckJyYWNrZXQ7TGVmdERvd25UZWVWZWN0b3JSZXZlcnNlRXF1aWx0ZnI7Y3V3ZWROb3RMZXNzU2xhbnRFY2lyY2xlYXJybWludWxkcmRSQmFyTGVzc0VxdWFsR3JlYXRlTnVvcmRlcm9mSnNlcmN2YXJzdXBzZXRuZWJsYWNrbG96ZW5nZTtzbGFycjtsY2FyUmV2ZXJzZVVwRXF1aWxMZWZ0VGVlQXJyb3duZ2Vxc2xhbnRVb2dvbjthbmdtc2RhYzt2RGFkb3duaGFycHN1YjtqdU5vdFByZWNlZGVzRXF1YWxkaXZvbm1hcmtlcHJvcHRvcm90aW1lc0lncmF2ZTtWYmFyO2Jub1JpZ2h0Q3BlcmlvZGV4cG9uZW50aWF1cHNia2Fyb3VydHByb2ZsZnJhc1RpbGRlRnVzdWJzdXBIc2NyO1ZzY3JsZHJ1bEF0YWlsO2N1cmx5ZXFzdWNjQmFyU2hvcnRVcEFycm92Y3k7Ym90dG9tO05vdFZlcnRpY2FsQmFySGFjZXBsdXM7ZXJEb3RMZWZ0VHJEb3VibGVMb25nUmlnaHRBc3NldG1ub29wZjt6aWdycXVvdE5jZWRpbGFuZDtMb25nTGVmdEFycm9sYnJrc2x1SW9wZkJlY2Fsb25nbWFwc3RvO25yQXJyZHJia2Fyb3c7c3VwaHN1YmNvbXBsZW1lbkhjY2FCZXJubmpjeTtzY3BjdXJseXZlZTtjaXJmbmludEZpbGxlZFZlcnlTbWFsbFNxdWFybWFwc3RvWmV0RXhwb25lRGVsQ2xvY2t3aXNlQ29udG91ckludGVwcmVjYXBwcm94TGNlZGlsT3RpbGRJbXBsaWd0Y2M7aG9va3JpZ2h0YXJyb3c7c3VjYztFcHNpbG9uS2N5aWluZmludXBkb3duYXJzY3NpYmxhY2t0cmlhbmdsZXJJY3k7VkRhc2hndmVydG5lcXFOb3RQcmVjZWRlc1NsYW50RXFaZG90O29kaWxkcnVzaGFDZW50VXBEb3d0aGVyZTQ7YmFja2VwbG9uZ21hcExlZnRVcFRvdGlsZGVyaWdodGFycm93dGFpbDtMZXNzRnVsbEVxdWFsO3VmaXNodFJldnZlZWJhcnJpZ2h0YXJyb3d0bmVBc3VwRUxtUVVPb21pbnV3Y2xBdGFpbHNkb3Q7cnJhcnJhbmdydHZiYW5nO1RSQURFSHVtcERvd25hbmdtc2Q7S29wZlVwZG93bmFyeHJBcnRoZXJIdW1wRXF1YWw7c2ltZTtMZWZ0VXBWZWN0b3JCYXJiaWdvdGltY2FwZG90Q291bnRlckNsb2Nrd2lzZXVkYmxhYztubGVmdHJpZ2h0YUdyZWF0ZXJFcXVMZWZ0VHJpYW5nbGVFcWxlcXFMb25nbGVmdGJsYWNrdHJpTm90R3JlYXRlckdyZWFlcXNZSXN1YnBsSXVrY1JjZWRpYnNvbGhzdXJ0cmlmcHJlY3NpbXN1YnBsdXM7Tm90U3VjY2VlZHNFcXVhbHZhcmVwc2lsb247aHN0cGx1c2NpcjtUaWxkZUZ1bGxFcXVlbHNkb0ZvckF1cGhhcnBvb25sZWZjYXBicmN1cDtsc2FxdW9vZGF1aGFycmZhbGxpbmdkb0xlZnRhVGhpblNwYWNlO2JkcXVzdWNjYXBwcm9KdWtjeXpjYXJIb3Jpem9udGF2YXJyaG87ZmZsaWdsdHJVcEFycmhrb2d0O2RpYU5vdExlc3NURG93blRlZUFycm93U3F1YXJlU3VwZXJSc2NDcm9zY3V2eG90YW5kc2xvSEFSSWFjbmNhcm9ubnJBcmJsYWNrdHJpYW5nbGVsZWZ0O0l1bWxvb3BhcnJvd2xlZnQ7YmFja3ByaW1lcXVhdGVybmlvbk5lZ2F0T29FbXB0eW9yc2xvcGVjdXJ2ZWFycm93cmluc3VwRXNlbWhhaXJzcDt1ZGFycnRyaWFuZ2xlcmlnaHRlbGVnZGxjcm9sb25nbWFwc2lpaWludDtnZ2c7UmNlZGlsO0xlZnRST3RpbG90cmJicmt3c2NyRWZycGxhbmNrc3VibXVsdDtraGNuc29sdGF0aWxkZTtuTGVmdHJibGsxMjtnZWRvdWJsZWJhcndlZGdlUm91bmRJbXBsaWVzY2FyZVZlcnlUaGluU3Bhc2NFUmlnaHRWZWN0b3JCYXhjYXBVcHBlclJpZ2h0QXJyb3c7YWxlZnN5bTtFb2dvbmR0ZG90U3FydDtMb25ncmlnaHRhcnJOb3RDb25ncnVlSW52aXNpYmxlQ1ZlcmJOdGl4Y1pkb3ByZUV4cG9uZW50aVFzZGVnb2ludDt0aGluc3BOb3RSaWdodFRyaWFuZ2xlO3JicmxjeTtOb3RTdWNjZWVkc1NsYWJldHdlRG93bkxlZnRWZWFwaWR2YXJ0ck5vdFNxdWFyZVN1cGVyc2V0RU5vdFN1Y2NlZWRzVGlsZGU7b2RpdkRpYWNyaXRpY2FsRG9MZXNzTGVzcHJlY25hcHByb253YXJocHJFa2NldXBkb3duYXJyb3RvcGNpcjtyaWdodGxlZnRhTmN5T3NsUmlnaHRGbGxlcXNsYW52ZWxsaXA7ZWdyYWxyY29ybmVyO1ByZWNlZGVzVGlsZGVTcXVhcmVJbnRlcnNlY3Rpb25uZGFzanVrY3lnZ3NvcGZOY3k7Y3VkYXJyZ2N5O0VxdWFsVGlvbWlkO1ZlcnlUaExlc3NFcXVhbFN1Y2NlZWRzU2xhR1Q7bWVhc3VOb3RHcnNpbXBsdXM7aWN5O3JiYnJEb3duUmlnaHRUZWVWZWN0b3I7WWZpZXhUcmlwbGVDb3Byb2R1Y3Q7Tm90R3JlYXRlclRpbGRlO2xlc3NzaW1ub3RpYWxlRGFzaERpYWNyaXRpY2FsRG91Ymx2YXJ0cmlhbmdsZXJpZ2RjYXJvYmJya3Ricms7bmlzZEVsZW1ub3RuaTtlZ3M7UHJlY2VkZXNDSGNnZG90O2hiYVJpZ2h0RG91YmxlQnJhbHBoYVJpZ2h0Q2VpbGluZ2hvbXRUcmlwbGhhcmRjeTtkb3BmUmV2ZXJzZVVwRXF1aWxpYnJpdW12eml6c2NyQ09Qc21hc2hwO3VsY29ybjtsZWZ0cmlnaHRoYXJwb29uU3FsdHJQYVJpZ2h0VGVlQXJybGVmdGxlZnRhcnJvb3RpbWVzYW9wZXJwO2ZvcmFSc2h5VGlsZGVFcWlzaW52YmlnY2FwO1VjaXJDY2Fyb25Eb3VibGVMb25nUnN6bGlGaWxsZWRTbWFsbFNxdWFsdGltZGJrYXJvbHVsZWZ0aGFycG9vbnVVbmRlclBhcmVudGhlc2lOb3RSaWdodFRyaWFuZ2xlQmFyYm93dGlCYWNrc2FuZ21zZGFVY2lyYztWdmRhc2hob2FndHJhcHBycmlnaHRoYXJwb29uZG93bk5vdE5lTm90TmVzdGVkTGVzc0xlc3NzdGFpbmZEb3duUmlnaHRWZWN0b3JCYXJuc3FzVW5lb3BmdmFycHJvcHRBcHBseUZ1bmN0aW9DbG9ja3dpc2VDb250b3VySW50ZWdyYWxEb3duUmlnaHRUZWVWZWN0bkxlZnRhck5vdEdyZWF0ZXI7Z3NpbWZmbGxpZztndkRvdWJsZURvd25kaXZpb2xjcm9UZnI7b21lY2lyY2xlYVJpZ2h0RG93blZlY3RvT3ZlckJyYWNrTGVmdFVwVlVuaW9uUEZzUmV2ZXJzcng7QmFyd2VkbmlzO3ByZWNzaVJpZ2h0Rmxvb0l0aWxHcmVhdGVyVGlsZGU7bGFycnRsO3N1Ym5lZGhhcmxOZWdhdGl2ZVRoaWNTcXVhcmVJbnRlcnNlY3Rpb25wYXI7QmFja3Nsa2NlZGlkaGFycjtVcERvd25BcnJsZHF1b3I7dkJQY3licnZnbGFydWxvbmdyaWdodGFycm9lZG90O2xiYXJyO3Byc2lpc2luZG90QmN0cnBleml1ZWdzdW9nb3NldG1pa2hjeVNjZWRpdXVtcHJvZnN1ck5vdEVxdURvdWJsZUNvbnRvdXJVcEFycm93O0xhbnJoYXJ1bGN1cmx5d2VQcmVjZWRlc1RpbERvdW53YXJoa3dlZGdlcXBhcnNpbTt1dHJpTmNlZGlsO2VhY3V0ZTtybGhhcjtSaWdodEFudkRhc2ZyYWM0VHNjcmJhcnZndHJhcFlhY3V0ZTt1YWNEb3VibGVMb25nTGVmdFJpZ2h0QXJOb3RTdXBlcnNldDtpaTtzcXN1YnNldHJzcWI7Y2lyc2NpbnZzaW1ucnRyaTtkaWdhbW1hbGVmdHJpZ2hhbmd6YXJyZnJhYzE2O3V0ZG5hYmxhTm9uQnJlYWtpbmdTcGFjZVJpZ2h0VXBUZWVWZWN0b3JyYXJyYztub3RuaXZiO1hvbGVmdGFycm93dGFpbDtmcmFjNDVDbG9zZUN1SGlsYnVwaGFycG9vbnJpZ0xvd2VyUmlnaHRubGVxc1JpZ2h0VXBWZWNzdXBzZXRlcWxlZnRsWXVtbnZzaXZzdXBuRTt4cmFycjtzc2NyO3NvbGJhcmNvbXBmcmlnaHRyaWdodGFycm93bGJicms7RGlmZmVyZW50aXNvZ3RjY25hdHVyYWxJYVljaXJjO0RhZ2dlQ2xvY2t3aXNlQ29udG91ckluTmVnYXRpdmVNZWxlZnR0aHJlZXRpbWVzTGVmdFRyaWFuZ2xlQlNxdWFyZVN1YnNldEVvcm9yO2RhcnI7Y2N1cHNzb2Rhc2g7WVVmYWxmcmFjMTJkb3RtaW5MZWZ0QXJyb3dSaWdodGFtYWNyTm90U3F1c3Vic2V0ZXE7Q2VudGVyRG91YmxlTG9uZ1JpTG9uZ3JpZ2h0YXJyb2JicmtwZmxlcXNsYW50c2VhcnJ2c3ViRXF1aWxpYnJuYnNwO2JrYXJvdzttaW51c2R1SnVuYXR1ZnJhYzEyO25zdWJzZXRlcXE7QXNzaWdsZWZ0cmlnaHRhcnJvd3Nob3J0cGFybGVmdHJpbnJBcnI7cmhhdXBocnBwb2xucGFOb3RHcmVhdGVyU2xlcmFycmRvd25kb3duYXJycGVybWlsc2ltO2Ria2FnY2lydHdvaGVhZGxlZnRhcmNjZWRyc3F1bztEb3VibGVMb25nTGVmdFJpZ2h0QXRwcmltYXN5bXA7cHJlY3NpbTtubGVzcztJc05vQnJlYUNjb0RDdXBsdXNjaXJ1cFVuZGVyQnJhY2Vob3BmYmFydmVlYW1hY3I7c21hbFVwRXF1aWxzZG90YjtCdW1wZXFDZWRMZWZ0VE5vdFJlbGN5cXN0cmlhbnlVZ05vdFN1Y2NlZWRzU2xhbnRFQ3NwcmVjY3VyS3NjRXhpc3RzO2x0cmljdXBicmNMZWZ0cmlnaHRhcnJvY2N1cHNzbTtFZG90O05vdFN1YnNldDtuc2hvcnRwYXJhbEVtcHR5VmVyeVNtYUNvbnRvdXJJRm9yQWxsO2luZmludGllO1ljeTtsZWZ0cmlnaHRzcXVpUmlnaHREb3duVGVlYXdjb25pdGhpY2tzaVJvdW5kSW1kb3duYXJyb3dsZHJkaE91Z3ZuRXRyaXRpVW1hY3I7Q2F5bGJhcndlZGdlQ291bnRlckNsb2Nrd2lzZUNvblNxdWFyZVN1YnNlcnRyaWx0cmlMZWZ0UmlnaHRuYWN1dGU7Tm90U3VjY2VlZHNFbGJiclhvcHJ0aHJlRWNpcmNMc2hwcmVjYXBwTGVmdFRyaWFuZ2xlQmFyUmlnaHRhcnJvd0NoRGFnZ2VybnN1YnNlR3JlYXRlckVJb2dvbmxuYXB5c2NybGJyYWNrO0RmcjtnZXNkb3R2cHJvcGxhbmt2O0RvdEVHZFJlUmV2ZXJzZVVwRXF1aWxpYnJpUGx1c01pbnVpaW5mc3VwRTtlbXNwUmlnaHRVcERvdXBkb3duYXJyb3dxc2NyY3JvcXVlc3Q7dWxjb3J2emlnemFnO3RoZXRhc3ltO1VvZ29uRGFnQ3JvemhjbWlkY2lyO250cmlhbmdsZWxlZnRlcTtlcHNpbG9ueHVwbGJpZ3ZlZWN1cGNhZXhwZWN0YVNob3J0bmxlZnJhbmdlRmNVcHBlclJpYmlnY3VwTm90Q3VSZXZlckxlZnRUcmlhcmFycmJ2YXJwck5vdFN1YnNldEVxdVVSYXJydGw7TmVnYXRpdmVNZWRpdW1TcGFHZG9FZ3Jhdm5MZWZ0cmlnaHRhcnJvdztkb3duaGxhcDtTcXVhcmVTdXBlcnNldEVxdWFsO0ZmcjtkaWFtb25TdWNjZWVkc1NsYW50RXFpbWFncGFySXVrY3lsYXJycGw7QW9nbm90bml2YTtzdGFyO3NpbXJhcnI7TFROb3RQcmVjZWRlc0Vuc2hvcnRwYXJhbGxlbG11bXNkb3RlcGl0Y2JpZ2N1Y29tbWd0cXVlRGlhY3JpdGljYWxBY3V0ZTtsb29wYXJyb3dyaWdodDtsYXJybHNtdGVzYW5nbXNkYWRzcmFycjtQbHVzTWludXM7dm5zTHByb2ZsaUVhY3V0ZHdhU3VjY2VlZHNUaWxlc3NndHJlYXN0ZUlvdGFEb3VibGVSTGVmdEFuZ3JobztSZXZlcnNlRXF1RG93bkFycm93VXBBY3VsYXJyO2x1cnVoYXJsZXNzZXFnU2NhcmN1ZXByYmNvbmdkc292YW5ncnF1YXRpSnNlcmN5O3N1cGhzb2xSaWdodFRlRG91YmxlTG9uZ1JpZ2hidWxsZXRDY29uaW5MZWZ0YXJyb3h3ZWZsaG9yYmFDYXBpdGFsRGlmZmVyZW50aXJzcXVzcGFEb3duTGVmdFZlY3RvckJhcjtOb3RTcXVhcmVTdWJzZXRFcXVhbGJveEhMZXNzR0NvbnRibGszcm9hd2NOc2NyVGZFbXB0eVZlcnlTbWFsbFNxdWFydGhlcmVmb3JlVG9wZmV4aXN0O2RkO2xmbG9vY2FwYm5zaG9ydEltO1Jhcmx0cXVMYVZiYXVwdXBVcEVxdWlsaWJyaVNob3J0RG9uZWFyaGtyYWNlcGx1c2FsdGxhVWNpcmNSaWdodFVwRG93blZlY3RvcjtIaWxiZXJ0U3BhY2U7cmlnaHRhcnJvdztQcm9kdWN0YnByaW1SaWdodFVwVGVCYWNrc2xhc2g7bWNvZHVhcnI7RmlsbGVkVmVzaGNoY3k7Y2lyY2xlYXJyb3dyaWdodDtjdGRvdGdlcXNscmVnVEhDb25ncnVlYW5nbXNkYnNjcjtsZWZ0dGhyZWV0aW1lcztsYXF1YmxhY2t0cmlhbmdsZWxlZnRsYXF1bztndHJlcXFsZXNzO3BybmFZZnI7SHN0cm9raW1hY3I7SUVmaWxpZztzdWJzZWZyYWMxNTtudTtsYXJybHA7ZGFsZXRoTm90UHJlY2VkZUxlZnRBcnJvd0JhckRvdERMb25nbGVmdGFyV0NjZWRpbWFsZUxlZnRUZWU7cmZsb1JpZ2h0VmVjdG9yO1VwQXJyb3dEb3duQXJyb3d2ZWVlcXBhcmE7Y3V2ZVNjeWNlbnRzdXAxVHNjdXB1cGFycm93cztkd2FuTm90UmlnaHRUemZOb3RTcXVhcmVTdWJzZXRFcWxkc2g7VGlsZGVUbHJjb1plcm9XaWR0aFNwYWNMZXNzRXF1YWxHcmVuZ2Vxc05vdFNxdWFyZVN1cGVyc2VzcXN1YjtVcFRlbGhhcnVsY2N1cHM7U3VwZXJzZXRFcXVhbEF1bWw7Ym94SFVIYXRwc2NyO2hzY3I7Y3VydmVPdm5sdHJpZTtsb25ncmlnaHRhcnJvdztTdWNjZWVkc1Rib3hkUlNxcm9sY0dUbmFuZztuc2NyO25vdG5pdmVmckdyZWF0ZXJFcXVhbGN1cmFjdXJseXZlUmV2ZXJzZUVxdWlsaWJyaWJhY2tlcHNpbGxvbmdsZWZ0cmlnaHRhT3VtbExjYXJvYmxhY2t0cmlhbmdsZWRvd3RpbWVzYmxhcnJ0bFN1YnNldE5vdFRpbGRlRXFjdXJ2ZWFycm93bGVmdHNsQ2xvY2t3aXN5c3RoaWNrYXBwcnhvZG90bmxlZnRyaWdodGFycm93O2NjaXJjO3JkcXVvYmFsc3Ryb2tjb21wbGV4ZXM7Tm90UmV2ZXJmcmFjNzg7Z2ltR2JyZXZlQ2NlZXFzbGFudGd0cmx0aHJwbHVzbW47WmNhcm9ub3JzbG9wZTtzaG9ydHBhTG9uZ2xlZnRyaWdodGFycm11bHRpbUNsb3NlQ3VybHlRdW9vdW1sO0NvdW50ZXJDbG9ja3dpc2VDb250b3VySWx0aHJlRG91YmxlQ29udG91cWZyZWNpTmVnYXRpdmVWZXJ5VGhpblNwYWNTaG9ydFJpZ01lZGl1bVNEaWFjcml0aWNhbEdyYXZUcmlwbWFwc3Rndm5Mb25nTGVmZ3RyZXFxbGVzTm90SHVtcEVxdXVjeTticmV2ZU5lZ2F0aXZlVGhpblNwYWFlbGlnRXhwb25lbnJhbmdkO2hiYXI7U3VwZU5vdExlZnRUcmlhbmdsZUVxdWFub3RpbkU7YW5nbXNkYWF4d3VvZ0xvbmdSaWdodEFycm9FdW1sO2JhcndlZDtSaWdodENlaWxpbm50cmlhbmdsZXJpZ2h0ZVJldmVyc2VzdWNjc2N1cGN1cHl1YW5Eb3duUmlnaHRUZWxhcnJodXVhcnI7bWRhc3BsdXNhY2lOb3RUaWxkZTtiZERvd25MZW5sSGlsYmVkdHJpO2dseWVuZXFvbGNpYmFja3Npb3JkZXJzcXVmO3RyaWFuZ2xlbGVmdGVxO0xvbmdsZWZ0cmlnaG9sYXJyO0RpYWNyaXRpY2FsRG91YmxlQWN1dHJmaXNpZ3JhdmV0aG9MZXNzR3JlYXRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ1JhcnJucGFyYWxMZWZ0cmlDY2Fyb2FuZ2xlcnNhb3VMZWZ0UmlSZXZlcnNlRWxlZnRoYXJwb29uZG93ZWRiTW9kc2N5O1JpZ2h0VXBWZWN0b3JCb21pY3JvbjtkdHJpZjtibGsxNGFjRTtUc3RyZXF1ZXhjYXA7bWFsdDtuZ2Vxc2xhbnduZXF1aXZIc2ZsbE1lbGxpbkF0aWxkdm5zdXA7cGxhbmNraFNxdWFyZG90cGx1cztudkhhcnJCbW5wbGJveFZoUmlnaHRUcmlhbmdDaXJjbGRjYU5vdEdyZWF0ZXJTTm90U3Vic2V0RXFsdGhyZWVMZWZ0RG93bnN1cHBsSW52aU92ZXJCcmFja2V0c3VjY2N1c3VibkVDaXJjbGVQbGxlc3Nkb3RpbmNhcmU7bG5FO2VuSW50ZWdyYWw7UHJlY2VkZXNTbFBoTGVmdFRyaWFuZ2xlRXF1YURpYWNyaXRpY2FsRG91YmxlQWNmZmxsbWRhUmlnaHREb29nb25pdWtjeTtoZWFydHM7RG91YmxlUmlnc29sYjtlc2ltaW50ZVBzY2JveGhEO1JpZ2h0Rmxvb3JNZWRpdW1TcGFjZTtpbnRlcmNhbExzY1BvaW5jYU5vdEdyZWF0ZXJMZXNzbWl2cG5mcjtEb3VibGVMZWZ0UmlnaHRBcnJPZ3JhdmRqY21ERG90O21zY1N1cHNldGV4cGVjTm90U3F1YXJlU3VwZXJzZXRFcXVhbG1sY3A7Q2NlZGlsTGVmdFRyaWFubkxlZnRhcnJvdztEWmNEaWFjcml0aWNhbEFjdXR3ZW5jb25nckF0YUFtYWNvdGltU3VjZ3RybExlZnRhckF1bWxib3hWbm90aW52YmJpZ29kb2Jicmt0YnJraWlvdGE7WHNjcjtyaWdodGxtc3RwQ2xvc2VDdXJseURvdXRkb3Q7eHVwbHV4ckFaZXJvV2lkdGhCdW1waW9nb250cmlhbmdsZXE7UmV2ZXJzZUVxVFNvdGlUYWJyb2JyaztOb3RTcXVhcmVTdWJzZXRFaXVtcnBVbmRlclBhcmVudGhlc2lzRXF1YWxUaWxkZW5zdXBFO2JveHZIO3htYXA7c2VhcnI7bWNvbW1hTm90TGVzc0dyZWFwcmltZTtJbnZpc2libGVUaW1lemN5Tm90R3JlYXRlclRpbGRtbnBsdXNsYXJyZnM7bG1vTmVnYXRpdmVUaGlja1NweXVjeTtsZXNzc2ltO2pmZGl2b254Ym94ZFI7aGtzZWFyb0xlZnREb3VibGVCcmFja2V0O2ZyYWMzOGdhbWFmbnNob3J0cGFyYWxsZXVwdXBhcnJvd2V4Y2ZwYXJ0aW50O3hzcWN1RG93blJpZ2h0VHR3b2hlYWRsZWZ0YXJyb3dwZnJQbHVOb3RFeGlzdHM7bGRxVXNjcjtpc2NyZGl2b254O3NvcGY7SW1wbGRjeTtjbHVic3VpY2lyO0xlZnRVcFZlY3RvckJhcjtzdXBoc3VvZnI7ZGlzaW5sZXFzbGFUY2FyTWludW5yaWdodGFycnZzdURvd25SaWdodFZlbHRxRm9yQWxsTm90SHVtcERvd25IbWFya2VyO2V1cm9VcERvd25BcnJvdzt5dW1sYWdyY3V3ZWQ7ZG90c2dlcXNsYW50O0NhcDtoa3NlYVVtYWNlY2Fyb0NvdW50ZXJDbG9ja3dpc2VDb2xhY3V0ZTtib3hWclZ2ZGFzaDtsZkp1a2ltYWdEb3VibGVMb25nUmlnUmlnaHRBcnJvdztOb3RTcXVhcmVTdWJzZVN1Y2NlZWRzRXF1YWw7RGFsb25nbGVmdHJpZ2h0YXJyb3c7TW9wZlJvdW5kSW1wbE5vdFJpZ2h0VHJpYW5nbGVFcW53YXJyO092ZXJQYXJlbnRoZXNpczt6aWdyYXJyO0RvdWJsZVZlU2M7dXBzaWhQcmVjZWRlc1NvcGFyO2x1cmRzaGFycWludGVwYXJzbDtOb3RMZXNzTGVzWW9wZlJjeTtIaWxiZXJ0U3BhY2xyY05vdFRpbGRlRmludGxFdGFjeWxjdGVtYWNyTm90VmNzdWI7ZXBhcmxvcGFyO2VzaXN1cGRzdWJyYmF5dWNCYXJ3ZXBhcmFsbGVvcmlnb2Y7cHJlYztOb3REb3VibGVWZXJ0aWNhbEJHcmVhdGVyR3JlU3Vic2VuTGVmZmNyYXJOb3RTdWNjZWVkc1RpbGRpbmJhY2twUmlnaHRUZWVWZWN0b3I7c21pZFRjZWRpbDtOb3RDb25ncm5zcHRvcGZvcnRyaXRpbWV4bEFyZ3RybGVzY3BvbFhmcmVscztndDtsb25nbWFwc3RvcmlnaHRsZWNoZWNrbWhzbGFzaDtxdWVzdGVxO3hvZGduZXFxO250aW1DbG9zZUN1cmx5UXVvdEZpbGxlZFNtYWxsVmVydGljYWxyZHF1b3JsYWN1dGVQcmltZTtSaWdodFRlZW11bHRpbWFwO2N1cnZlYXJyb3dsSXRpbGRlO1NIY3lLb3BQcm9wb3JOb3RQcmVjZWRlc0VxdmFydHJpYW5nbGVsZWZ0O3lvcGZsQmFMb25nUmlnTm9uQnJlYWtpblpvcGY7ZGl2aWRlb250dGhlcmVmb3JlO0VncmFZdURvdWJsZUNvbnRvdXJJbnRleHBvbmVudHJzcVRoZXRoa3N3YXJvaWNpcm51bTtleHBlY3RhdGlvbjtzaW1PRU9tZWdhO3h1cGx1cztvc2NyVGFiO2dFO3N1cHN1Yjt2QmFyZHdhbmdsZWxkcnVzb3RSaWdodERvdWJsZXByaW1lc3dhcnI7T3ZlckJyYWNrZW52ckFyckxzdHJva0h1S0pwZXJ0ZW5rO0ZpbGxlZFZlcnlTbWFsbFNxdUxlc3NTZWxsTm90R3JlYXRlckZ1bGxFcXVhY2VkZnJhYzEzO0V1bWxYbmxlcXNsYW50O2Rvd25oYXJwb29ucmlkb3RwbHN0cmFpc3FzdXBzZXR4c2NMZWZ0RG93blZlY0xhcGxMZWZ0VXBEb3dSaWdodERvd25WZWN0aXNpbmRvdDtiZXRhcmFycnc7d2VpZXJzdXdmTm90U3VjY2VlTm90R3JlYXRlckVxR2FtbWFkbnNtaWQ7c3Njcll1bWw7Z2VzZG90b2w7cHJFO05vdExlc3NTbEFncmN3Y29uaW50TGZVcEFycm93RG93UmlnaHRhcmV0YURvdWJsZUxvbmdMZWZ0QXJyb3d0ZWxhc0xlZnRUZWVBUmlnaHRBcnJvd2VxdWlmcmFjMTg7c2VjZHN0cm9rSGlsYmVydFNwYWNlZ3Ryc2lOb3RQcmVjZWRIb252bHRyaWVOZXdMYmFydmVlO0Rvd25MZWZ0bGRyZGhhcmN1cGN1RXBzaWxMbWlkb3Q7c3RhcklvdGE7Ym94VkxuY2VkaWJsYWNrbG96ZW5nZW1pZGRvdDtscnJhdE5vdFN1YnNmZmxkZmlzcnVsdWhhclVwRXF1aWxpc2hjaHhjdXBzcXVhcmY7WWFjYXBjdWFjdXRlUmU7dXNjZG91YmxSaG9SaWdodFVwVGJveGRsO25zaW1lO1BvaW5jYXJlcGxhbkxlZnRSaWdodEFOb25CcnNzdGFyZjtTY2VkaWw7Q29udG91cmNmTm90UmlnaHRUcmlhbmdsZUJhcjtSaWdodFZDYXBpdGFsSW90UmlnaHRWZUx0O3RzaHpIZlJvcGFuZ3J0dmJkSGFjZWtuYXBvS2Zydm5zdWI7YW5nc3R4Y2lob29rbGVmdGFycldlZGdzaW1wbHVzYm94VWZyb1JpZ2h0VXBWZWN0b3JCYXJDZWRpbGxhO2xuYXBwbGVmdGhhcnBibGFja2xEb3VibGVVcERvd25BcnJvcnRyaWxQYXJEc3Ryb2tOZXN0ZWRMZXNtY25wb2xpbnQ7cXVlc3RiaWd0cmlhbmdsZWRvcmNhcm9uO21hcGtoT3Bhc2NDaXJjbGVQbHVzO0xvbmdMZWZ0UlBjc2Nuc2ltc2ltZ0U7bnRyaWFuc3FjYXBzO3NpbXBsdVN1Y2hjbHVic3VlckRvYmV0SnNjU2hvcnREb3duQXJyY3JhcnJiYWNrY0RpYWNyaXRpY2FsRG91YmxlQVRoZXJlZm9ya2FwcERpYWNyaW5wcmN1dWJyY2xlZnRyaWdodHNxb3JhcnJvdGlsZGU7Tm90UmlnaGN1ZXNjcm9wYU9taWNyYXJyYXA7Tm90R3JlYXRlckdyaWdodHJib3h1TENhcGl0YWxEaWZmZXJlUmlnaHRUcmxjZWRpbE5vdFN1cGVyQ2xvc2VDdXJseVF1aWFjdXRlVWFycm9jaXI7dUhhcmxoYXJ1bDtkaWFtb25kc3VpdDtTcXVhcmlnaHRyaWdodGF6aWdyYXJyc21hbGxzZXRtaW51c0xvd2VyTGVmdEFlcHNpbG9Ob3RWZXJ0aWNhbEJhcjtmbHRPQXNjcmNvbXBsZW1lbnRvZGJsWm9TcXVhcmVVbmlvbk5vdG1zTWNsZWZ0YXJyb2JhY2twcmltTm9ueGZsYnJhY2t6aGN5O1dlZ3RxdWVzdDtsb2JSZXZlcnNlRXF1aW9mckdjaXJjO0thcFJzY3JzdWNjbmFwcHJveGdyYXZlO3hoQXJlY29sb25nb25vdG5pdmM7blJpZHJia2Fyb0ltYWdpbnVkYXJOb3RSZHJjb3JuO05vdFN1Y2NlU3F1YXJlU3VwZXJzZXRFcXV0aW1lc2JhSHVtcEVxdWFBdEdyZWF0ZXJGdWxsRXJvcGx1cztwc2NyYm94ZHI7bGVmdHJpZ2h0c3F1aWdhcnJvd0Nmcnpkb3Q7aGFJT2NMZWZ0VXBWZWNjaXJjbGVzc3NpdXBoYXJwb29ucm5wYXJzbExlZnRBbmdsZW1hcHN0b3VwUmlnaHRBbmdsZUJyYWNrZXQ7Ym94dXI7dWNOYWN1dGU7RG91YmxlTGVmdEFycm93Y29weXNkaXNpbjtQaGk7Tm90VGlsZGVFY2lyc2NsZXNjY0NheWxlS2NlZHB1c21hRG93bkJyZXZlcnNxdW9yO3NvZnRjaWlpaW50YWN5O2NvcHlzcjtvaG07ZmVTdWNjZWVkc0VxdW5lZGJzZW1pO2JuZXF1aXY7VGhpY2tTcGFVYXJyb25jYXBDY2lOZWdhdGl2ZU1lZGl1bVNwYWN1cGRvd25hcnJvdztudnNpbTtib3hWcjtsb25nbFNPZm9ya3ZXY2lnaW1lbDtuc3Vwc2V0O2xhY3V0ZG91YmxlYmFyd2VkZ2U7UGx1c01pbnVzamNOb3RHcmVhdGVyU2xhbnRFcXVhbE5vbkJyZWFrdnppZ3pPdmVyUGN1d0Nsb2Nrd2lzZUNvbnRvdWJsYW5rU21hbGxDaXJvcnNsb3NsdXdvcmFwbHVzZW1hbHRlc2VzdWJzZXRVcHBlckxIQVJEY0VtcHR5U21hbHNtYXNocENyb3NzVXBwZXJMZWZ0QXJzdXBuRTtidWxsO2V4cGVjdGF0UmV2ZXJzZUVxdWlsaWJybG9uZ3JpZ3V1YXJkb3duaGFycG9vbnJsRTtwaG1tYXRzbWFsbHNldG1pbnVzO2JveGRyUmFuZztuc3ViZTtlRERvY3N1bGFtYmRzaW1kb3Rjb21wbGV4ZWFscFJpZ2h0RG93blZlY29uaW5zZWN0VXBUZWV5c2NyO1lJY3k7ZXJEb3Q7TGVzc0xlTmNhcm9uO29wZXJwVXBkb3duYXZub3JhckpvcGY7aGtzd2FzdHJhaWdocHNpO2dkb0licHJpbWVOb3RHcmVhdGVyR3JlYXRlcmFncmF2ZXRjYXJvZXF2cGFyTm90RXF1YWxhc3RScmlnTGVmdFJpZ2ZhbGxpbmdkb3RzZXFLYXBwYTtzb2w7VmVyeU5vdEdyZWF0ZXJUcm1TdWNjZWVkWUFjeW52ZGFzaE5lZ2F0aXZlVGhpdm9wZkxsZWZ0YXJyb3c7Z2RvdExlZnRUZWVWZWN0b3I7cHJlY25zYmxhY3N0cmFpZ2h0ZXBzaWxvZnJhYzM0O25lc2l0aGljbmxhcnI7Q3NjZGxjcmluZmluTGVmdEFuZ2xjdXJ2ZWFycm93bGVmdDticHJsZXNzYXBiaWd0cmlhbmdsZWRvd1VhY3V0cmlnaHRhcnJvd2FsZXBQcmVjZWRlc1NsYW50RU1lbGxpSnNlcmxsaFVmcnJjZWl0d2l4Q2FwaXRhc3FzdXA7c2NjbXVsdGltYXBvZHNvbEdyZWF0ZXJTemV0c3JhdW9nb247RmlsbGVkVmVyeVNtYVJvdW5kSW1wbGllcztjdXJyZW47Q29uZGJrYXJvd25hdHVyYWw7ZG90bWludXNPRWxpZ2lmcjtscmNvcnNjc2ltO21vZFRoaW5TcGFjYXBlO2RmcmRvd25kcmRxdWxtaWR2cnRyaTtMb25nbGVmdHJpZ2h0YXJyb0Jlcm5vdWxwcmVjbmVxcUJzY3I7Ym94SERMb3BkZnI7aW9wZlNob3JwcmU7dnNjaW50cHJ0Tm90TmVzdGVkTExlc3NGdWxsRXF1YmN5bnZpbmZuZXNpbTtkaXNpQ2FScmlnaHRhcmNjaXJsYXRlc3J0cmlsdHJpO0VtcHR5VmVyeVNtYWxsU3BsdXNhY2lyTGVzc0xlc3M7VGlsZGVUaWxuZXhpc3RzO2xvbmdsZWZ0cmlnU2hvcnREb3dOZXN0ZWRMZXNzTGVzc05lZ2F0aXZlTWVkaXVtU0VtbGVmdHJpZ2h0c3F1aWdhcnJ1cmNvcnN1cG5FTm90U3VjY2VlZHM7bGVmdGFycm93dGFpdXB1ZXBOb3RSaWdodFRyaWFuZ2xlTEpjUnVsZ3RyZXFsZXNTaG92clJ1bGVEZWxheWVkbndBcnI7amZycmNhcm9uTm90RG9Eb3VibGVSaWdodFRlZTtMYXB1YnJjeWJvY2lyY2xlYXJyb3dyeGNpcmN4b2RvVWdyYXZndmVydmFya2FwbnN1dkJhcjtib3hEcnBhcnNsSGlsYmVydFNwYWxlc2RsdmVMZWZ0QXJyb2lpaURvd25UZWVBTGVmdFZlY3RvT21lZ2FsZGNhO2xlZnRoYXJwb29kaGxlZnRhcnJvd3RhdHdvaGVhZGxlZnRhUmlnaHRUYmxhY2tzcXVhcmV1Z3JhdmVjaXJtaURpZmZuc3Vic2V0O3R3b2hlYWRyaWdodGFybnNob05vdFN1Y2NlZWRzVGlsZGVEWmN5O3VyY29MYW1jb21wO1N1cHNlZXBsdXNMZXNzRnVsY2FwY2N1cGRpbXBzcXN1cE5mcmhrc3dhcm93SW1hY2xlc3NlcWd0cjtTdXA7YmlnY2l0cmxwYXJscnVsbmxlZnRyaU5vdE5lc3RlZExlc3NscGFybHQ7TG93ZXJSaWdodEFHcmVhdGVTaWdtYUdvcGV0dWhhc2hrZ3JlZW5HcmVhdGVyRnVsVXBFcXVpbGlicml1bWJjb2x0Y2lybXNjcnBlTm90R3JlYXRlY3Vkc3F1ZmFwcHJveDt6aGN5dmFyc3Vwc2V0bmVxbGxhcnI7bGFuZ2Ryb3RpbWVzO2xhdGVIb3BmbmxBVXBFdGVscmVscmNvcm5PbWljckFzc2lnbjtsZmlzaHQ7YmxhY2tzbmV4aXN0O2ZvcGZOb3RMZWZ0VHJpYW5nbGVCTG9uZ2xlZnRyaWdjdXJ2ZWFycm93bGVmbWlkZG90cnRyaWx0cm1ucGx1czt1aGFybDtSb3VuZEltcGxpZXJpZ2h0YWZyc2ltO05vdFJldmVyc2VFbGVtZW50d3JlcGFyc2w7cmFjZTtGaGFsZkRvdWJsZUxlZnRzbXQ7bnNxc3VCZXJub3VsbHNlY3Q7S3NjcnZhcnJoZ2FjdXRlO3JlY3Q7Tm90U3FsZWZ0aGFycG9vbmRvd250aGlja3NUaGVjY2VFc05vdFJpZ2h0bGZsb29yQ2lyY2xlTWludXNiZHF1bztJbnZpc2libHJhcnJFb3BmdWxjTGVmdFVwVmVjdG9yQmFtZWF2Y3lEc2NlcmF0cmlhbmdsZXJjdXBkb3R4bEFycmVxc2xhRGVsdGRIYXJEb3RFcXVhcnVsdWhLSmN5bnNob3J0cGFyYWxsZWw7dG9wZmRpdmlkZW9udGlOb3RIdVJpZ2h0RG93blZlY3RvckJhcjtuYXByaXNpbmdkb3RzZXFuYXR1cjtOZWdhdGl2ZVZlcnlUaGluR3JlYXRlclRpRGlmZmVyZW50aWFsbG9uZ2xlZnRVcEFycm93RGF0aWxkV2NpcmM7dmFyc3Vwc2V0c2ltcGxMZWZ0QXJyb3dSaWdodEFycm9Eb3duVGVlQXJtYWNyO0Rvd25MZWZ0VmVjdG9yQkRvdWJsZUxvdHNjU3F1YXJlSW50ZXJzZWN0aW9uO2FjdXRlO25yYXJyO0Nsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhQ2lyY2xlRG93bkxyY3VidGhlbHRpbWVzTGFtYmRhSG9yaXpvbk5vdENvbmdydWVudG9ncmF2YWVsaWp1a1N1cHNFQnVtcGVyaW5nTGVmdERvd25WZWN0b3JCYXJBYWN1dGU7Ym90dG9tY3VybHllZGRvdHNyZGNhO0JhcndEY2F0d29oZWFkbGVmdEludGVyc2VjdGlsbnNUaGlja1NwYWNlb2xhbHZuRTtsc3F1bGVmdHJpZ2h0aGFycG9vbnNsYXJydGlxdWVzdHRoZXJlNHRmTm90SHVtcERvd25IdW1wO3l1bW5vdGluRXF1YXRlcm5pb25MZWZ0eW9wZjtOb3RMZXNzVGlsZGJsazM0O0xjYVRoZXRhaW50cHJ0cmlkb3Q7bGNzdWNjYUNsb3NOb3RTdWJzZVJvdW5kd3I7c2ltZ2xzcXVvO05vdEVsZUNvbGRpYW1vbmRzdmFyc3Vwc2V0bmVxcU5vdFJpZ2h0VHJpYW5nbERvdWJsZVZzdWNjbmFwcE5KY29zbGFzaHV3YW5nbGVsb29wYXJyb3dyaWdodFVuZG9kb1phY3VJc2NyO29vcE9wZW5DdXJseVF1b3RlO2hlcHNpbE5vdEdyZWF0ZXJMZXNFcXVhbFRjeW5zcGFhZ3JhdnJvYW50YXJQb3Bmc2lndXB1cGFyclVncmF2ZXN1cEpmR3JlYXRlckdyZWF0ZXJyZWN6b3BmO01hSWNsRWdmamxpZztOb3REb3VibGVWZXJ0aWNkb3VibGViYXJ3ZU5vdFN1Y2NlZWRzU2xhbm53YXJyb3c7UmFjdXRlZ25zaW07YW5nbXNkYWZTaG9ydERvd25BSW52aXNpYmxlVGltZXNtbnBsdWJyY2lyY2x4b2x0cmlmdXBoYXJwb29ucmlTcXVhcmVJbnRlcnRyaWFuZ2xlbGVmdGVJbnZpc2libGVDb21zdW5nO3ZhcnRyaWFuZ2xlcmljZnJob29rc3FzdXBzZXN1cDM7bGJicmtWZXJ0aWNhbFNDaXJjbGVNaVJldmVyc2VVcEVxdWlsaWJQcmVjZWRlc1RpdXBkb3duZGFsb3NvbDt0b3Bmb1N1cGVyc2V0SW52aXNpYmxlQ29tbWJveFZSO2N1cmx5d2VkZ2VsbW91c3Rib3RMZXNzRnVsbEVmcm93bm5ic2xlc3Nkb3Q7bmxlcVpIY3ljZG90bmFwaWRleGNsO21ERGNpcmM7SW1wTGVmdEFycm93UmlnaHRBcnJvd0xlZnRVcFZlY3RzZnJvd2RvbGxhcjtkZG9MbGVyQlZlcnlUaGlwcmVjY3VybEl1a2N5O2FlbG52bGU7c2V0bWluTGVmdFVwRG93blZlc3NtUnVsZURlTm90Q29uU3Vic2V0RUNlbmNpcnNnZXNkYXN5bXBvbXlpY3lUU0hjeTtPcGVuQ3VybHlEb3VicGl0Y2hmdGhlcmV0aG9ybnN1Y2Nuc2ltZG91c3dhY2hjU3Vwc2V0O0RvdWJsZURvd2RvdHBsdXNyQXNhRGlhY3JpdGljYWxHckxlc3NTbGFudEVxdWFsY2VtcmF0aW87UG9pbmNhckNybG96ZW5nZTtTc0RpYWNyaXRpY2FsR3JhckhhcjtzdHJhaWdodHBoaXJiYXJsb29wYXJyb3dyRG93blJpZ2h0VGVlVmVjU2hvcnRMZWZ0QXJTdXBuTHR2RFNjTGVmdEFycm93QlZlcnRpY2FsTGluZTtndmVydGZhbGxpbmdycGFyZ3Q7dmFyZXBzaWxvbm5ndHJRb2RlbXB0RXNpbWVsO0ZvdXJpZXJ0b2RzQmVybm91Y29weTtuY2V2YW5ncHJvZmFsYXJzcGFkbGdEb3duUmlnaHRWZWN0bnZsdHJpZTtsZWZ4c3FjdXA7ZW1zcDFBbmROb3RFbGVtZXZhcnBoaURhcnI7bmNhcm9uO2RlbHRhVmVydGljYWxUaWxkZTtSaWdodFVwVmVjdG9yWXNjdHBjaGlzcGFkZXN1aXRsb2FuZ3NjdHdpeHQ7UmlnaHRWZWN0b2JhcndlZGdQcmVjZWRla29wUmlnaHRhcnJvdztjdXBicmNhcHNoYXJ0aGV0YTt4b3RpbURvdWJsZUxvbmdMZWZ0Umllc0ltYWdpbmFDb3VudGVyQ2xvY2t3aXNlQ05vbkJyZVJpZ3N1YnN1Yk5vdEh1bW9wbHVzSGlsYmVydEVtcHR5U25MZWZ0cmlnaHRhZWNhclVwQXJyb3dCYXJOb3RMZXNzVGlsZGVVcERvd25EaWZoYXJkY3libGFja3NxdWFyZTtHY3lvZ3JvbWljcm9ucmhhcmFuZ3J0O0tvcGY7RGlhbURvdWJsZURvZG9wZjtFYWN1dGVMZWZ0VXBEb3duVmVjdG9yO29jaXJjO1pjYXJvZGFic29saHN1Yjtwc2lyZHF1bztsZnJTcXVhcmVTdWJsb2Fqc2VyY3k7b2FjdXRlO2N1cmx5RWNhcmhvb2tyaWdodGFyclNob3J0TGVOb3RFcXVhbDtGc2NIQU91bWw7UmlnaHRBcnJvd0Jhck5lZ2F0aXZlTWVkaXVtU3BNaW51c1BsdUd0O2JpZ2NhcE9FbGd0cmRvdDt3cmVhdWN5VXBwZXJSaW5maW50aWVzd253YXI7U2hvcnRSaWdodEFyckVtcHR5VmVyeVNtYWxsU3F1YXJlO3ByZWNuc2lwcmVjbmFwcHJEY2Fyb247YW5nbXNkYWJlcXZhcFByZWNlZGVzU2xhbnRFcXV1cnRyY2Fyb25vZHNvbGRSaWdodFVwRG93U2Npc1ZlcnRpY2FsQmFTYWN1dGVDYXBpdGFsRGlmcmFjNDU7aGFycnduYXBpZDtVb3BmeGhhcnJidW1wRTtuTGVmdHJpZ2hHcmVhdGVyU2xhbnRFcXVjbHVicztTaXVicmdlc2RvdG9jb3BFbWFjcnJBck1vcGY7TGVmdERvd25UZWVWZUxlc3NFcXV0d2lPZGJsYWM7bnNxZ3ZlcnRuZXFxO3Byb3A7RG91YmxlVXBEb3duTGVzc1RpbGRMZWZ0VGVlQXJyZEFybnByZWNsZXNnZXM7YmxhY2t0cmlhbmdsZWxlZnRyaXBsdWhvbXRodEFuZDtsY3ViO0xlZnRyaWdodGFycmxsYUludGVncmFsbm90aW52b3JzbHRpVmVyeVRoaW5Ob3RSaWdodFRyaWFuZ2xlQmFEb3VibGVMb25nTGVmdERpZmZlcmVudGJvcGY7bGRjYUhBUkREb3duTGVmdFJpZ0Rvd25MZWZ0VGVaZXJvV2lkdGhTcGFjZWxuZTtSaWdodFVwRG93blJpZ2h0VXBUZWVWZWN0c3NlaW1hZ2xpblFzY3I7ZGRhZ2dlcjtOZWdhdGl2ZU1lZGl1bVNwYWNlO21hcHN0b2RvR2FXZWRnZTt4Y2lybHRsYXJzdXAxO3huaXNybW91cmFjbGxhcmJwbnNwYXJOb3RUaWxkZUZ1bGxFcXVhbExhcGxhY2V0cm5zdXBlbmV4aXNoc2xhc3ZhcnRyaWFvZGJsYWNibGsxMnJwcG9saW50ZnJhYzEzYm94dmxsc2FxTmVzdGVkR3JlYW5nbWRmaXNodGJzY3JudkhhcnI7bnZhcHN1cG1uc210aGV0YXJubWlkc2hhcnBScmlnaHRhcnJwcmltZXM7b2Fjbmdlc2NvbG9ucmRjYUxvbmdMZWZ0UmlnaHRBcnJvd0VUSDtscmhhcmlnaHRoYXJwT2NoY2lscnRyaWVxdnBhcnNsO0Nsb3NlQ3VybHlEb3VibGVRdWNvcHJvZGdlc0RzdHJvQ29wcm9UaGVyZWZveGxhcnJhYWN1dGVucHJEb3VibGVMZWZ0VGVMZWZ0VGVlQXJyb3c7c3VicGx1SW1hY3JRb3BlbXNwMTRib3h1bHNpZ21hO09wZW5DdXJseURvdU1vcHhkUmlnaHRUZWVWZWN0b3ZiYXBpdGNoZm9PcGVuQ3VybHlEb3VibGVRdW90ZXVwaGFycG9vbmxlZnQ7Tm90TmVzdGVkTGVDY29uaW50bnVtZXJvemFjdXRlO1JpZ2h0RG93blRlZVZlUm91bmRJSlphY3V0ZTtnbmVxO25MZWZ0cmlnaHRhcmJrdHdvaGVhZHJpZ2h0YXJyb2hvb2tyaWdlYWN1TWN5UmlnaHRhcnJvTGNhcm9uO25lYXJyUmlnaHREb3VibGVCcmFja2V0SGlmZmRvd25oYXJwb29ubGVic2VJbXBsaWVzO2xicmtzbGNpcm1pZEN1cENFY3lwcmVjbnNpbWd0cmFycm5MZWZ0cmlnaHRnbkJhY2tzbGFzbG5hTmNhcm9uQ291bnRlckNsb2Nrd2lzbGRxdW87bG93YmFycm9hcmlnaHRzcXVpZ2Fycm93O2ZyYWMyNWJjb252c3VibkVsdHJQYXJsdXJ1aGFyO01lbGxpbnRyZjtzdW5Ob3ROZXN0ZWRMZXNtRERvaW1vTG9uZ2xlZnRhcnJvdztudkRzcXVhcnN1cGxhcnI7Y2lyY2xlYXJyb3dyaU5vdFN1Y2NlZWRzU2xhbnRFcXVhbDtucnRyaW52ckFycjtibGszNHZhcnRyaWFuWmNhcnVwc2k7VHJpbW9kZWxzbWVwYXJzbDthbmdtc2RhaDtsbVVwZG93bnZhcnRoZXRhO2Rvd25kb3duYXJyb3dzO3ZlbGxkakRvdWJsZURvdFJpZ2h0RG93blRldGhrc0hvcml6b250YWxMaW5lZWc7RG93bkxlZnRSaWdodFZlRW1wdHlWZXJ5U21hbGxTcXVhcmVsYXJyYmZpb3JsaExhcGxhY2V0RG91YmxlVXBzdWNOb3RMZWZ0VE5vdEdyZWF0ZXJUaWxOb3RDb25nTm90TkVsZW1lbnQ7cmlzaW5nZG90c2VxO1NxdWFyZVNUc3RaZG90bGVmdHJpZ2h0YXJUaGlja1NwYWNFcHNpbGVzc2J1bXBlcVljaXJjYWdyYWVxY29Eb3VibGVVcEFycm9UcnhjYVJhUmlnaHRBcnJvd0JhU2hvcnRMZWZ0Z2JEb3VibGVDb250b3VySW50ZXBvaW50aXZBcmhlYXJ0c3VOb3RHcmVhdGVyR3JlTGVmdEFycm93UmlnaGFyY3JhUmlnaHRUcmlhbmdsZUVxdWFsO2NhcGJyY3RyaWFuZ2xlO1BhcnRpYWxEbGVmdGFyckRKRmZyWW9wZjt1cmNvcm5ucmFycnBzcmZyaXNpbjtBcHBsc21lcGFyc2xwdW5jZGlhbW9uZDtsYnJrc2xkO2VxdWxvbmdyaWdodGFycm93Ym5vdDtHbG9uZ2xlZk5KY2RDaXJjbGVNaW51RW1wdHlWZUxhcGxhY2V0cmY7Y3N1cDtMSmN5O2xvbmdsZWZ0YXJyb3djZWRpc3ViZWRvdDtsb3BhRG91YmxlTGVmdFRsb3plbmdlTm90TmVzdGVkR3JlYXRUUnZkYW50cmlhbmdsZXJpZ2hMb25nbGVmdHJpZ2h0YXJ2YXJyZWFzdGxlZnRyaWdodHNxdWlnYXJyb2JveGJob29rbGVmdGFycm93O2NpcmZuaW9lbGlzdXBsYXJuYnVtcGVOb3RMZXNzRXF1YVNxdWFyZUludGVyc2VjdFJpZ2h0QXJyb3dMZW1wdHlzZXJhcnJwbDtWZGF4b3RpbWV0YXJneXVjeXRoZXJlZm5vdGluZG9oeXBoZW47U29wZmRyYmthckJzb3Bhck92ZXJCcmFjbGVmdGhhcnBvb25kb3duO0Rvd0FvcGY7cHJvcHFpbnQ7aGFpcnNnRWxibm90TGVmdFVwVGVlVmVudHJpYW5vdGludmI7Z3RyZXFsZXplZXRjdXBzO3N1cHNpbTtVc2NyTG9uZ3JpZ2h0YVBvaW5jYXJlb3I7VXJpVWJyZXZkaWFtcztaY2lzaW5FO2xzaXZmcjtud25ld3NMZXNzR3JiaWdzdG9taWNycHJpbWVzdmVsbGFycnBpc2ludjtEb3VibGVSaWdodEFycm5nZXFlcXVpdkRzb2Z0Y3k7blJpZ2hqc2VyY3lSYW5nYXdjb1VwcGVyUmlnaHRBcm9yaWdvZm5MdDt1ZmlzaGxhbmdWZXJ0aWNhbExpU2NlZGxvb3BhcnJvd3JpbHQ7bnZpbmFjdXRldWJyZXZlO1ZlZVlhY3V0ZWduc2lkd2FuZ2xMY3lPcGVuQ3VybHlEY2FwYmxhY2tzcXVhc3Vwc3VwO2xvemY7TGVmdFVwRG93blJpZ2h0RG91YmxlQnJhY2tldDtyZWFscGF6b3BMZWZ0Rmxvb3JpZ2h0cmlnaHRhcnJvd3NjaGVja21hcmtzaG9ydHBhcmFsbE9kYmxhY05vdFByZWNlZGVzU2xhbnRFcXVhbDtkb3RlcWRvUnJpZ2h0YXJyb2hvYXJyRG90RXF1YWxiYWNrc2ltO2ZyYWM1NkxlZnRWZWNsZWZ0aGFycG9vbmRvd09kYmxUaGVybmJzcHBhcmFsbGVsO01lZGl1cHJhcGJsYWNrbG96TGxlZnRhcnNtc3Bhcjttc3RBYm11bHRuYnVtdmFya2FMZXNzR3JlYWVtcHRpbmN4cmFyQ2NpcmNiZXBza3NFcXVpbGlicml1dUhhcjtwbHVzbWNzdXBlO1RyaXBsZURpbWFGaWxsZWRTbWN1cmFybnRyaWFuZ2xlbGVOb3Q7cmFycnRTSENI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EAAGAAAAXAEAAAAAAAB06xAABgBB5OLHAAsVeusQAAcAAABlAQAAAAAAAIHrEAACAEGE48cACyWD6xAACgAAABMnAAAAAAAAjesQAAMAAAAYIQAAAAAAAJDrEAACAEG048cACxWS6xAABAAAAEEEAAAAAAAAlusQAAYAQdTjxwALBZzrEAACAEHk48cACyWe6xAABwAAAKkhAAAAAAAApesQAAUAAAD7AAAAAAAAAKrrEAACAEGU5McACwWs6xAABABBpOTHAAsVsOsQAAcAAADsAAAAAAAAALfrEAANAEHE5McACwXE6xAAAwBB1OTHAAsFx+sQAAYAQeTkxwALBc3rEAAMAEH05McACwXZ6xAAAwBBhOXHAAsV3OsQAAQAAABpIgAAAAAAAODrEAAFAEGk5ccACxXl6xAADwAAAJQhAAAAAAAA9OsQAA0AQcTlxwALBQHsEAADAEHU5ccACxUE7BAAEwAAAPcnAAAAAAAAF+wQAAgAQfTlxwALBR/sEAAOAEGE5scACwUt7BAABQBBlObHAAsFMuwQAAsAQaTmxwALFT3sEAAKAAAAiSIAAAAAAABH7BAABQBBxObHAAsFTOwQABAAQdTmxwALBVzsEAAGAEHk5scACwVi7BAABgBB9ObHAAsFaOwQAAIAQYTnxwALBWrsEAACAEGU58cACwVs7BAABABBpOfHAAsFcOwQAAMAQbTnxwALBXPsEAAEAEHE58cACwV37BAAAgBB1OfHAAsFeewQAAUAQeTnxwALBX7sEAADAEH058cACwWB7BAABABBhOjHAAsFhewQAAQAQZToxwALBYnsEAALAEGk6McACxWU7BAADwAAAIgiAAAAAAAAo+wQAAUAQcToxwALBajsEAAKAEHU6McACxWy7BAABAAAAB4EAAAAAAAAtuwQAAQAQfToxwALBbrsEAACAEGE6ccACwW87BAABABBlOnHAAsFwOwQAAUAQaTpxwALBcXsEAADAEG06ccACwXI7BAABwBBxOnHAAslz+wQABYAAACqJQAAAAAAAOXsEAAFAAAANCEAAAAAAADq7BAABQBB9OnHAAsF7+wQAAYAQYTqxwALBfXsEAADAEGU6scACwX47BAABwBBpOrHAAsF/+wQABEAQbTqxwALBRDtEAAFAEHE6scACwUV7RAAAgBB1OrHAAsFF+0QAAUAQeTq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AAD4/xAABgBBlMXIAAsV/v8QAAQAAACoAAAAAAAAAAIAEQAFAEG0xcgACwUHABEABABBxMXIAAsFCwARAAYAQdTFyAALJREAEQASAAAACyAAAAAAAAAjABEADgAAAOUhAAAAAAAAMQARAAQAQYTGyAALBTUAEQAFAEGUxsgACwU6ABEABQBBpMbIAAslPwARAAQAAACvAAAAAAAAAEMAEQAFAAAAkCEAAAAAAABIABEACwBB1MbIAAsFUwARABAAQeTGyAALBWMAEQAKAEH0xsgACxVtABEABgAAAL4AAAAAAAAAcwARAAMAQZTHyAALBXYAEQAKAEGkx8gACwWAABEACABBtMfIAAsFiAARABEAQcTHyAALBZkAEQAEAEHUx8gACwWdABEACQBB5MfIAAsFpgARAAQAQfTHyAALBaoAEQAFAEGEyMgACwWvABEAAwBBlMjIAAsFsgARAAUAQaTIyAALBbcAEQADAEG0yMgACwW6ABEABABBxMjIAAsFvgARAAwAQdTIyAALBcoAEQAOAEHkyMgACxXYABEABgAAALUBAAAAAAAA3gARAAsAQYTJyAALBekAEQAGAEGUycgACwXvABEAAwBBpMnIAAsF8gARAAMAQbTJyAALBfUAEQAEAEHEycgACxX5ABEAEAAAAPUDAAAAAAAACQERAAMAQeTJyAALBQwBEQADAEH0ycgACwUPAREACQBBhMrIAAsFGAERAAUAQZTKyAALFR0BEQAHAAAAHgEAAAAAAAAkAREABABBtMrIAAsFKAERAA8AQcTKyAALBTcBEQAIAEHUysgACwU/AREABABB5MrIAAsFQwERAAIAQfTKyAALBUUBEQAGAEGEy8gACwVLAREABABBlMvIAAsFTwERAAYAQaTLyAALFVUBEQADAAAAZCIAAAAAAABYAREAAgBBxMvIAAsVWgERAAkAAACdKQAAAAAAAGMBEQAHAEHky8gACxVqAREABQAAAB0hAAAAAAAAbwERAAUAQYTMyAALBXQBEQADAEGUzMgACwV3AREACQBBpMzIAAsFgAERAAQAQbTMyAALFYQBEQANAAAAiiIAAAD+AACRAREAAgBB1MzIAAsFkwERAAYAQeTMyAALBZkBEQALAEH0zMgACwWkAREABABBhM3IAAsFqAERAAIAQZTNyAALBaoBEQAHAEGkzcgACwWx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BBEABgBB9N3IAAsF/wQRAAMAQYTeyAALBQIFEQALAEGU3sgACwUNBREAAwBBpN7IAAsFEAURAAMAQbTeyAALBRMFEQACAEHE3sgACwUVBREAAwBB1N7IAAsFGAURAAMAQeTeyAALBRsFEQAHAEH03sgACwUiBREABgBBhN/IAAsFKAURAAYAQZTfyAALFS4FEQAEAAAA2QIAAAAAAAAyBREACABBtN/IAAtFOgURAAYAAABYJQAAAAAAAEAFEQAJAAAAESEAAAAAAABJBREABgAAAKUpAAAAAAAATwURAAYAAABzJwAAAAAAAFUFEQACAEGE4MgACwVXBREAAwBBlODIAAslWgURAAYAAAAPKQAAAAAAAGAFEQAHAAAAySIAAAAAAABnBREABgBBxODIAAsFbQURAAIAQdTgyAALBW8FEQACAEHk4MgACwVxBREACQBB9ODIAAsFegURAAoAQYThyAALJYQFEQAIAAAAjikAAAAAAACMBREABgAAAPUnAAAAAAAAkgURABEAQbThyAALBaMFEQAHAEHE4cgACwWqBREACgBB1OHIAAsFtAURAA8AQeThyAALBcMFEQAHAEH04cgACwXKBREAAwBBhOLIAAsFzQURAAMAQZTiyAALBdAFEQAJAEGk4sgACwXZBREABwBBtOLIAAsF4AURAAYAQcTiyAALJeYFEQAGAAAAbCUAAAAAAADsBREACAAAADUiAAAAAAAA9AURAAkAQfTiyAALBf0FEQAGAEGE48gACwUDBhEACgBBlOPIAAsVDQYRAAYAAACjAAAAAAAAABMGEQAMAEG048gACwUfBhEAEQBBxOPIAAsFMAYRAAQAQdTjyAALBTQGEQACAEHk48gACwU2BhEAAwBB9OPIAAsFOQYRAAQAQYTkyAALBT0GEQAEAEGU5MgACwVBBhEADABBpOTIAAsFTQYRAAsAQbTkyAALBVgGEQAFAEHE5MgACwVdBhEABABB1OTIAAsFYQYRAAUAQeTkyAALBWYGEQADAEH05MgACxVpBhEABwAAAFkiAAAAAAAAcAYRAAMAQZTlyAALJXMGEQAGAAAA2SEAAAAAAAB5BhEACQAAAPADAAAAAAAAggYRAAQAQcTlyAALBYYGEQAPAEHU5cgACxWVBhEACwAAAKchAAAAAAAAoAYRAA4AQfTlyAALFa4GEQAGAAAA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l8kACwUrEREABgBBxJfJAAsFMRERAAgAQdSXyQALBTkREQAUAEHkl8kACyVNEREABwAAAO8qAAAAAAAAVBERAAkAAABRIgAAAAAAAF0REQADAEGUmMkACzVgEREABgAAAOUhAAAAAAAAZhERAAYAAADdAgAAAAAAAGwREQADAAAAvAMAAAAAAABvEREADABB1JjJAAsFexERAAcAQeSYyQALBYIREQAKAEH0mMkACwWMEREADQBBhJnJAAsFmRERAAMAQZSZyQALBZwREQADAEGkmckACwWfEREADABBtJnJAAsFqxERAA0AQcSZyQALFbgREQAGAAAAtSkAAAAAAAC+EREADgBB5JnJAAsVzBERAAYAAACRKQAAAAAAANIREQAFAEGEmskACxXXEREACAAAAE0iAAAAAAAA3xERAAUAQaSayQALBeQREQALAEG0mskACwXvEREACABBxJrJAAsF9xERAAUAQdSayQALBfwREQADAEHkmskACwX/EREABgBB9JrJAAsVBRIRAAQAAACkIgAAAAAAAAkSEQAGAEGUm8kACwUPEhEABQBBpJvJAAsFFBIRAAkAQbSbyQALBR0SEQALAEHEm8kACwUoEhEABABB1JvJAAsVLBIRAAkAAADiIwAAAAAAADUSEQAOAEH0m8kACwVDEhEADQBBhJzJAAsVUBIRAAkAAAAQIQAAAAAAAFkSEQAUAEGknMkACwVtEhEABwBBtJzJAAsFdBIRAAYAQcScyQALBXoSEQAGAEHUnMkACwWAEhEAAwBB5JzJAAsFgxIRAAoAQfScyQALFY0SEQAIAAAABSYAAAAAAACVEhEABABBlJ3JAAsFmRIRAAUAQaSdyQALBZ4SEQACAEG0nckACwWgEhEADABBxJ3JAAsFrBIRAAUAQdSdyQALFbESEQAFAAAAOCoAAAAAAAC2EhEACQBB9J3JAAsVvxIRAAQAAADvAAAAAAAAAMMSEQAFAEGUnskACxXIEhEACAAAAA4hAAAAAAAA0BIRAAIAQbSeyQALBdISEQAGAEHEnskACwXYEhEABwBB1J7JAAsF3xIRABoAQeSeyQALBfkSEQAFAEH0nskACwX+EhEABQBBhJ/JAAsFAxMRAA8AQZSfyQALBRITEQALAEGkn8kACwUdExEACgBBtJ/JAAsFJxMRAAMAQcSfyQALBSoTEQAFAEHUn8kACyUvExEABQAAAAEEAAAAAAAANBMRAA0AAAC/IQAAAAAAAEETEQADAEGEoMkACwVEExEADABBlKDJAAsFUBMRAB8AQaSgyQALBW8TEQAJAEG0oMkACwV4ExEABABBxKDJAAsFfBMRAAMAQdSgyQALBX8TEQAFAEHkoMkACwWEExEABABB9KDJAAsliBMRAAUAAABU1QEAAAAAAI0TEQADAAAAaiIAAAAAAACQExEACgBBpKHJAAsFmhMRAAMAQbShyQALBZ0TEQAEAEHEockACwWhExEABQBB1KHJAAsFphMRAAUAQeShyQALBasTEQAHAEH0ockACwWyExEADQBBhKLJAAsFvxMRAAkAQZSiyQALFcgTEQAEAAAABSkAAAAAAADMExEABgBBtKLJAAsV0hMRAAUAAABl1QEAAAAAANcTEQADAEHUoskACwXaExEABABB5KLJAAsF3hMRAAcAQfSiyQALBeUTEQAJAEGEo8kACwXuExEAAwBBlKPJAAsV8RMRAAwAAACWIgAAAAAAAP0TEQAFAEG0o8kACwUCFBEAAwBBxKPJAAsVBRQRAAcAAABoAQAAAAAAAAwUEQAKAEHko8kACwUWFBEAFQBB9KPJAAsFKxQRAAQAQYSkyQALBS8UEQAEAEGUpMkACwUzFBEABwBBpKTJAAsVOhQRABIAAACQIgAAOAMAAEwUEQAMAEHEpMkACwVYFBEAAgBB1KTJAAsFWhQRAAMAQeSkyQALBV0UEQAFAEH0pMkACxViFBEABgAAANoAAAAAAAAAaBQRAAUAQZSlyQALBW0UEQAQAEGkpckACwV9FBEABQBBtKXJAAsFghQRAAcAQcSlyQALBYkUEQAGAEHUpckACwWPFBEADABB5KXJAAsFmxQRAAQAQfSlyQALBZ8UEQACAEGEpskACwWhFBEAAwBBlKbJAAsFpBQRAA0AQaSmyQALBbEUEQALAEG0pskACwW8FBEADwBBxKbJAAsFyxQRAAcAQdSmyQALBdIUEQAEAEHkpskACwXWFBEABQBB9KbJAAsF2xQRAAMAQYSnyQALBd4UEQAGAEGUp8kACyXkFBEADgAAALwhAAAAAAAA8hQRAAYAAADRKgAAAAAAAPgUEQAFAEHEp8kACwX9FBEABQBB1KfJAAsFAhURAAMAQeSnyQALBQUVEQAGAEH0p8kACxULFREABgAAAGciAAA4AwAAERURAAcAQZSoyQALBRgVEQACAEGkqMkACxUaFREABwAAANwDAAAAAAAAIRURAAoAQcSoyQALBSsVEQAKAEHUqMkACxU1FREABQAAAFsAAAAAAAAAOhURAAQAQfSoyQALBT4VEQAEAEGEqckACwVCFREAAgBBlKnJAAsFRBURAAMAQaSpyQALBUcVEQADAEG0qckACwVKFREACABBxKnJAAsFUhURAA4AQdSpyQALBWAVEQAFAEHkqckACxVlFREABQAAALQjAAAAAAAAahURAAkAQYSqyQALJXMVEQAIAAAADykAAAAAAAB7FREABwAAAFYhAAAAAAAAghURAAQAQbSqyQALBYYVEQAOAEHEqskACxWUFREABwAAAC0jAAAAAAAAmxURABEAQeSqyQALBawVEQAFAEH0qskACwWxFREABABBhKvJAAsFtRURAAgAQZSryQALFb0VEQAHAAAAPAEAAAAAAADEFREABwBBtKvJAAsFyxURAAUAQcSryQALBdAVEQAMAEHUq8kACwXcFREABQBB5KvJAAsF4RURAAQAQfSryQALBeUVEQAFAEGErMkACxXqFREABwAAAN0DAAAAAAAA8RURAAQAQaSsyQALBfUVEQAEAEG0rMkACwX5FREAAwBBxKzJAAsF/BURAAMAQdSsyQALBf8VEQAFAEHkrMkACwUEFhEACQBB9KzJAAsFDRYRAAkAQYStyQALBRYWEQAHAEGUrckACwUdFhEABABBpK3JAAsVIRYRAAQAAAAqAAAAAAAAACUWEQADAEHErckACwUoFhEADgBB1K3JAAsVNhYRAAYAAAC0AwAAAAAAADwWEQADAEH0rckACwU/FhEABABBhK7JAAsFQxYRAAQAQZSuyQALFUcWEQAFAAAAhSIAAAAAAABMFhEADABBtK7JAAsFWBYRAA4AQcSuyQALBWYWEQAGAEHUrskACwVsFhEAAwBB5K7JAAsFbxYRAAQAQfSuyQALFXMWEQAGAAAAHSEAAAAAAAB5FhEAAwBBlK/JAAsFfBYRAA4AQaSvyQALBYoWEQAHAEG0r8kACxWRFhEABQAAACgEAAAAAAAAlhYRAAYAQdSvyQALBZwWEQAIAEHkr8kACwWkFhEABQBB9K/JAAsFqRYRAAUAQYSwyQALBa4WEQADAEGUsMkA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QZTZyQALFXwfEQAHAAAAPQAAAAAAAACDHxEADwBBtNnJAAsFkh8RAAUAQcTZyQALBZcfEQAEAEHU2ckACwWbHxEABABB5NnJAAsFnx8RAAUAQfTZyQALBaQfEQASAEGE2skACwW2HxEABABBlNrJAAsFuh8RAAwAQaTayQALFcYfEQAEAAAAoQMAAAAAAADKHxEACQBBxNrJAAsF0x8RAAUAQdTayQALBdgfEQAFAEHk2skACxXdHxEABAAAAHAiAAAAAAAA4R8RAAcAQYTbyQALBegfEQAEAEGU28kACwXsHxEABABBpNvJAAsV8B8RAAYAAACoKgAAAAAAAPYfEQAKAEHF28kACwQgEQAEAEHU28kACwUEIBEAFgBB5NvJAAsVGiARAAYAAABuKQAAAAAAACAgEQADAEGE3MkACwUjIBEAEQBBlNzJAAsFNCARAAMAQaTcyQALBTcgEQAQAEG03MkACyVHIBEABgAAAM4hAAAAAAAATSARAAMAAAC7KgAAAAAAAFAgEQANAEHk3MkACwVdIBEAAwBB9NzJAAsFYCARAAUAQYTdyQALBWUgEQAOAEGU3ckACwVzIBEACwBBpN3JAAsFfiARAAMAQbTdyQALBYEgEQAFAEHE3ckACwWGIBEABgBB1N3JAAsFjCARAAUAQeTdyQALBZEgEQADAEH03ckACwWUIBEADQBBhN7JAAsFoSARAAMAQZTeyQALBaQgEQAEAEGk3skACwWoIBEABABBtN7JAAsVrCARAAcAAADoJwAAAAAAALMgEQAFAEHU3skACyW4IBEACQAAAKgpAAAAAAAAwSARAAcAAABXAQAAAAAAAMggEQAEAEGE38kACyXMIBEABQAAACQiAAAAAAAA0SARAAwAAAD2AwAAAAAAAN0gEQACAEG038kACwXfIBEABQBBxN/JAAsF5CARAAIAQdTfyQALBeYgEQAQAEHk38kACwX2IBEAAgBB9N/JAAsV+CARAA0AAABOIgAAAAAAAAUhEQADAEGU4MkACwUIIREABQBBpODJAAsFDSERAAgAQbTgyQALBRUhEQAFAEHE4MkACwUaIREAAgBB1ODJAAsFHCERAAgAQeTgyQALBSQhEQADAEH04MkACxUnIREAIAAAADMiAAAAAAAARyERAAMAQZThyQALBUohEQAFAEGk4ckACwVPIREABQBB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AwAAAAAAAMUkEQAGAEHk8ckACwXLJBEABwBB9PHJAAsF0iQRAAIAQYTyyQALBdQkEQAEAEGU8skACxXYJBEACAAAAMQiAAAAAAAA4CQRAAQAQbTyyQALFeQkEQAGAAAAfSIAAAAAAADqJBEABABB1PLJAAsF7iQRAAcAQeTyyQALBfUkEQAFAEH08skACwX6JBEAAwBBhPPJAAsV/SQRAA8AAADDIQAAAAAAAAwlEQAEAEGk88kACwUQJREAAgBBtPPJAAsFEiURAAIAQcTzyQALBRQlEQAFAEHU88kACxUZJREABgAAAMMiAAAAAAAAHyURAAIAQfTzyQALFSElEQAPAAAA9icAAAAAAAAwJREAAwBBlPTJAAsFMyURAAYAQaT0yQALBTklEQAJAEG09MkACwVCJREAAwBBxPTJAAsFRSURAAQAQdT0yQALBUklEQAGAEHk9MkACyVPJREAEQAAAMIhAAAAAAAAYCURAAUAAAAWIAAAAAAAAGUlEQADAEGU9ckACwVoJREABABBpPXJAAsVbCURAAcAAADmKgAAAAAAAHMlEQAFAEHE9ckACwV4JREAEABB1PXJAAsFiCURAAYAQeT1yQALBY4lEQADAEH09ckACwWRJREAEgBBhPbJAAsFoyURAAQAQZT2yQALBaclEQAEAEGk9skACxWrJREABAAAACoiAAAAAAAAryURAAMAQcT2yQALFbIlEQAPAAAAkyEAAAAAAADBJREABQBB5PbJAAsFxiURAAcAQfT2yQALBc0lEQADAEGE98kACwXQJREABQBBlPfJAAsF1SURAAUAQaT3yQALBdolEQAVAEG098kACwXvJREABABBxPfJAAsF8yURAAQAQdT3yQALBfclEQACAEHk98kACwX5JREABQBB9PfJAAsF/iURAAgAQYT4yQALBQYmEQAIAEGU+MkACxUOJhEACAAAAMAqAAAAAAAAFiYRAAIAQbT4yQALBRgmEQAEAEHE+MkACwUcJhEABQBB1PjJAAsFISYRAA0AQeT4yQALBS4mEQAMAEH0+MkACwU6JhEABQBBhPnJAAsVPyYRABUAAAAcIAAAAAAAAFQmEQACAEGk+ckACwVWJhEABABBtPnJAAsFWiYRAAYAQcT5yQALBWAmEQAGAEHU+ckACyVmJhEABgAAANYDAAAAAAAAbCYRAAUAAACbIgAAAAAAAHEmEQAGAEGE+skACwV3JhEACABBlPrJAAslfyYRAA0AAACPIgAAAAAAAIwmEQAGAAAAcSkAAAAAAACSJhEABABBxPrJAAsFliYRAAkAQdT6yQALFZ8mEQAFAAAAlSEAAAAAAACkJhEAAgBB9PrJAAsFpiYRAA8AQYT7yQALBbUmEQAEAEGU+8kACwW5JhEABgBBpPvJAAsFvyYRAAYAQbT7yQALFcUmEQAPAAAAkCEAAAAAAADUJhEAAwBB1PvJAAsF1yYRAAcAQeT7yQALBd4mEQAEAEH0+8kACwXiJhEABQBBhPzJAAsF5yYRAAMAQZT8yQALBeomEQAFAEGk/MkACwXvJhEAAgBBtPzJAAsF8SYRAAYAQcT8yQALBfcmEQAHAEHU/MkACwX+JhEAEABB5PzJAAsVDicRAAcAAABjAQAAAAAAABUnEQAEAEGE/ckACyUZJxEADwAAAHkiAAAAAAAAKCcRAAYAAABUJQAAAAAAAC4nEQAGAEG0/ckACyU0JxEABwAAAB0iAAAAAAAAOycRAAoAAADUIgAAAAAAAEUnEQAEAEHk/ckACxVJJxEABQAAAEPVAQAAAAAATicRAAQAQYT+yQALFVInEQAEAAAANwQAAAAAAABWJxEACQBBpP7JAAsFXycRAAIAQbT+yQALBWEnEQAFAEHE/skACwVmJxEABABB1P7JAAsVaicRAA4AAAAMIQAAAAAAAHgnEQAEAEH0/skACwV8JxEABgBBhP/JAAsFgicRAAUAQZT/yQALBYcnEQAMAEGk/8kACwWTJxEABABBtP/JAAsVlycRAAYAAABcJQAAAAAAAJ0nEQAGAEHU/8kACwWjJxEAAwBB5P/JAAsFpicRAAgAQfT/yQALBa4nEQAEAEGEgMoACwWyJxEACgBBlIDKAAs1vCcRAAUAAAAFBAAAAAAAAMEnEQALAAAAQiIAAAAAAADMJxEACAAAADUiAAAAAAAA1CcRAAQAQdSAygALBdgnEQADAEHkgMoACxXbJxEABQAAAOIAAAAAAAAA4CcRAAEAQYSBygALBeEnEQADAEGUgcoACwXkJxEAAwBBpIHKAAsV5ycRAAcAAAABKgAAAAAAAO4nEQAKAEHEgcoACwX4JxEABQBB1IHKAAsF/ScRAAUAQeSBygALBQIoEQACAEH0gcoACwUEKBEAAQBBhILKAAsFBSgRAA4AQZSCygALFRMoEQAHAAAAOyIAAAAAAAAaKBEACwBBtILKAAsFJSgRAAQAQcSCygALBSkoEQATAEHUgsoACwU8KBEABQBB5ILKAAsFQSgRAAIAQfSCygALFUMoEQAGAAAAAiIAADgDAABJKBEACQBBlIPKAAsFUigRAA4AQaSDygALJWAoEQAFAAAAaiIAADgDAABlKBEABwAAAMsiAAAAAAAAbCgRABAAQdSDygALBXwoEQADAEHkg8oACwV/KBEABABB9IPKAAsFgygRABIAQYSEygALBZUoEQADAEGUhMoACwWYKBEAEwBBpITKAAsFqygRAAIAQbSEygALFa0oEQAHAAAAqiEAAAAAAAC0KBEABQBB1ITKAAsFuSgRAAIAQeSEygALBbsoEQAGAEH0hMoACwXBKBEACwBBhIXKAAsFzCgRAA0AQZSFygALFdkoEQANAAAAYiIAAAAAAADmKBEAAgBBtIXKAAsF6CgRAAMAQcSFygALFesoEQAJAAAASCoAAAAAAAD0KBEABQBB5IXKAAsF+SgRAAYAQfSFygALBf8oEQADAEGEhsoACwUCKREAAwBBlIbKAAsFBSkRAAoAQaSGygALBQ8pEQALAEG0hsoACwUaKREAAwBBxIbKAAsVHSkRAAYAAAAsJQAAAAAAACMpEQAFAEHkhsoACwUoKREABwBB9IbKAAsFLykRAAMAQYSHygALFTIpEQAHAAAAZAEAAAAAAAA5KREACABBpIfKAAsFQSkRABAAQbSHygALBVEpEQAKAEHEh8oACwVbKREAAwBB1IfKAAsFXikRAAUAQeSHygALFWMpEQANAAAATyIAADgDAABwKREADgBBhIjKAAsFfikRAAgAQZSIygALFYYpEQADAAAAeiIAAAAAAACJKREABgBBtIjKAAsFjykRAAYAQcSIygALBZUpEQAEAEHUiMoACwWZKREABABB5IjKAAsFnSkRAAQAQfSIygALBaEpEQADAEGEicoACzWkKREABgAAAD0jAAAAAAAAqikRAAYAAAAEBAAAAAAAALApEQAFAAAAuSUAAAAAAAC1KREACABBxInKAAsFvSkRAAsAQdSJygALBcgpEQADAEHkicoACwXLKREABQBB9InKAAsV0CkRAAYAAABMAQAAAAAAANYpEQAFAEGUisoACxXbKREABwAAAP0qAADlIAAA4ikRAAUAQbSKygALBecpEQADAEHEisoACwXqKREABQBB1IrKAAsV7ykRAAYAAAAtIgAAAAAAAPUpEQAEAEH0isoACwX5KREABgBBhIvKAAsF/ykRAA0AQZSLygALBQwqEQARAEGki8oACwUdKhEACQBBtIvKAAsVJioRAAsAAAASKQAAAAAAADEqEQADAEHUi8oACwU0KhEADgBB5IvKAAsVQioRAAcAAAAzIQAAAAAAAEkqEQAGAEGEjMoACwVPKhEAAwBBlIzKAAsFUioRABkAQaSMygALBWsqEQAFAEG0jMoACwVwKhEACABBxIzKAAsFeCoRAAcAQdSMygALBX8qEQAGAEHkjMoACwWFKhEAAgBB9IzKAAsFhyoRAAIAQYSNygALBYkqEQACAEGUjcoACwWLKhEABABBpI3KAAsFjyoRAAMAQbSNygALBZIqEQAGAEHEjcoACwWYKhEADgBB1I3KAAsFpioRAAMAQeSNygALBakqEQAPAEH0jcoACxW4KhEABQAAAFbVAQAAAAAAvSoRAAMAQZSOygALBcAqEQAEAEGkjsoACwXEKhEABABBtI7KAAsFyCoRAAgAQcSOygALBdAqEQAJAEHUjsoACwXZKhEABABB5I7KAAsF3SoRAAIAQfSOygALBd8qEQAGAEGEj8oACwXlKhEAAwBBlI/KAAsF6CoRAAoAQaSPygALFfIqEQAMAAAAdyIAAAAAAAD+KhEABgBBxI/KAAsFBCsRAA0AQdSPygALBRErEQAIAEHkj8oACxUZKxEABAAAABEiAAAAAAAAHSsRAAQAQYSQygALBSErEQAFAEGUkMoACwUmKxEAAwBBpJDKAAsFKSsRAAYAQbSQygALBS8rEQADAEHEkMoACwUyKxEABABB1JDKAAsVNisRAAUAAAB9KgAAOAMAADsrEQAEAEH0kMoACwU/KxEABgBBhJHKAAsVRSsRAAgAAACnKQAAAAAAAE0rEQAFAEGkkcoACwVSKxEAAgBBtJHKAAsFVCsRAAMAQcSRygALBVcrEQAPAEHUkcoACyVmKxEABQAAADYhAAAAAAAAaysRAAcAAACvIgAAAAAAAHIrEQAKAEGEksoACwV8KxEAAwBBlJLKAAsFfysRAAgAQaSSygALBYcrEQAHAEG0ksoACwWOKxEACABBxJLKAAsFlisRAAQAQdSSygALFZorEQAHAAAAYAEAAAAAAAChKxEABwBB9JLKAAsFqCsRAAYAQYSTygALBa4rEQADAEGUk8oACxWxKxEABwAAADUiAAAAAAAAuCsRAAUAQbSTygALBb0rEQAGAEHEk8oACxXDKxEABQAAABshAAAAAAAAyCsRAAIAQeSTygALBcorEQAJAEH0k8oACwXTKxEAAwBBhJTKAAsF1isRABEAQZSUygALBecrEQAEAEGklMoACwXrKxEABQBBtJTKAAsF8CsRAAMAQcSUygALFfMrEQAHAAAAsCIAAAAAAAD6KxEADABB5JTKAAsFBiwRABQAQfSUygALBRosEQAEAEGElcoAC0UeLBEABAAAANgiAAA4AwAAIiwRAAcAAAAkKQAAAAAAACksEQAMAAAAlyIAAAAAAAA1LBEABwAAABciAAAAAAAAPCwRAAUAQdSVygALBUEsEQAEAEHklcoACwVFLBEABwBB9JXKAAsFTCwRAAgAQYSWygALBVQsEQAJAEGUlsoACwVdLBEABABBpJbKAAsFYSwRAA0AQbSWygALBW4sEQAGAEHElsoACwV0LBEABgBB1JbKAAsFeiwRAAMAQeSWygALBX0sEQAIAEH0lsoACwWFLBEABwBBhJfKAAsFjCwRAAQAQZSXygALBZAsEQACAEGkl8oACwWSLBEACABBtJfKAAsFmiwRAAUAQcSXygALBZ8sEQAHAEHUl8oACwWmLBEABABB5JfKAAsVqiwRAA8AAACZIQAAAAAAALksEQADAEGEmMoACwW8LBEABABBlJjKAAslwCwRAA0AAABHIQAAAAAAAM0sEQAGAAAAUgEAAAAAAADTLBEADQBBxJjKAAsF4CwRAAYAQdSYygALFeYsEQAJAAAA9SIAADgDAADvLBEABgBB9JjKAAsF9SwRAAQAQYSZygALBfksEQALAEGUmcoACwUELREABQBBpJnKAAsFCS0RAAYAQbSZygALBQ8tEQAMAEHEmcoACwUbLREAAwBB1JnKAAsVHi0RAA8AAADrIgAAAAAAAC0tEQAOAEH0mcoACwU7LREABgBBhJrKAAsVQS0RAAYAAAAkJQAAAAAAAEctEQAHAEGkmsoACwVOLREAEQBBtJrKAAsFXy0RAAcAQcSaygALBWYtEQAEAEHUmsoACwVqLREAAgBB5JrKAAsF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EQACAEGUq8oACwXBMBEAAgBBpKvKAAsFwzARAAYAQbSrygALBckwEQALAEHEq8oACwXUMBEABQBB1KvKAAsF2TARAA0AQeSrygALFeYwEQAHAAAA0gAAAAAAAADtMBEABwBBhKzKAAsF9DARAAoAQZSsygALBf4wEQACAEGlrMoACxQxEQAHAAAAKQQAAAAAAAAHMREAAwBBxKzKAAsFCjERABEAQdSsygALBRsxEQAGAEHkrMoACwUhMREABwBB9KzKAAsFKDERAAYAQYStygALBS4xEQAJAEGUrcoACwU3MREABABBpK3KAAsFOzERAAgAQbStygALBUMxEQANAEHErcoACwVQMREABABB1K3KAAs1VDERAAUAAAD/AAAAAAAAAFkxEQAGAAAAwQAAAAAAAABfMREABQAAAEUiAAAAAAAAZDERAAQAQZSuygALBWgxEQAFAEGkrsoACwVtMREABgBBtK7KAAsVczERAAkAAABMIgAAAAAAAHwxEQAFAEHUrsoACyWBMREAEQAAANoiAAAAAAAAkjERAAkAAAARKQAAAAAAAJsxEQAHAEGEr8oACxWiMREABwAAAKYAAAAAAAAAqTERAAYAQaSvygALFa8xEQAEAAAABNUBAAAAAACzMREAAwBBxK/KAAsFtjERABQAQdSvygALFcoxEQAHAAAAJSkAAAAAAADRMREABgBB9K/KAAsV1zERAAYAAAAHIgAAAAAAAN0xEQAEAEGUsMoACzXhMREABgAAAF0lAAAAAAAA5zERAAgAAAB/IgAAAAAAAO8xEQADAAAAYiAAAAAAAADyMREABABB1LDKAAsF9jERAA0AQeSwygALBQMyEQAEAEH0sMoACwUHMhEAAwBBhLHKAAsVCjIRAAgAAAA0IQAAAAAAABIyEQAFAEGkscoACxUXMhEACgAAACYiAAAAAAAAITIRABEAQcSxygALBTIyEQAFAEHUscoACwU3MhEACQBB5LHKAAsVQDIRAAwAAAC5KgAAAAAAAEwyEQADAEGEssoACwVPMhEACgBBlLLKAAsFWTIRAAMAQaSyygALBVwyEQAFAEG0ssoACwVhMhEABQBBxLLKAAsFZjIRAAQAQdSyygALFWoyEQAHAAAAtyEAAAAAAABxMhEAAgBB9LLKAAsFczIRAAUAQYSzygALBXgyEQAPAEGUs8oACwWHMhEACgBBpLPKAAsVkTIRAAgAAAB4KgAAAAAAAJkyEQAGAEHEs8oACwWfMhEADwBB1LPKAAsFrjIRAAMAQeSzygALFbEyEQAEAAAAEAQAAAAAAAC1MhEABABBhLTKAAsFuTIRAAcAQZS0ygALBcAyEQADAEGktMoACwXDMhEACQBBtLTKAAsFzDIRAAMAQcS0ygALBc8yEQAJAEHUtMoACwXYMhEABQBB5LTKAAsF3TIRAAcAQfS0ygALBeQyEQADAEGEtcoACwXnMhEACwBBlLXKAAsV8jIRAAYAAAAOBAAAAAAAAPgyEQADAEG0tcoACwX7MhEABQBBxbXKAAskMxEABgAAAFUlAAAAAAAABjMRAAUAAACjAAAAAAAAAAszEQAIAEH0tcoACwUTMxEADABBhLbKAAtFHzMRAAYAAADSAwAAAAAAACUzEQAFAAAAJgQAAAAAAAAqMxEABQAAAL7UAQAAAAAALzMRAAMAAACdAwAAAAAAADIzEQACAEHUtsoACwU0MxEABABB5LbKAAsVODMRAAkAAACuAAAAAAAAAEEzEQANAEGEt8oACwVOMxEACQBBlLfKAAsFVzMRAAUAQaS3ygALBVwzEQAHAEG0t8oACwVjMxEABABBxLfKAAsFZzMRAAQAQdS3ygALBWszEQABAEHkt8oACwVsMxEAAwBB9LfKAAsVbzMRAAMAAACtAAAAAAAAAHIzEQAEAEGUuMoACwV2MxEABABBpLjKAAsFejMRAAoAQbS4ygALBYQzEQACAEHEuMoACwWGMxEABABB1LjKAAsFijMRAAQAQeS4ygALBY4zEQASAEH0uMoACwWgMxEACQBBhLnKAAsVqTMRAAUAAADC1AEAAAAAAK4zEQAEAEGkucoACwWyMxEACABBtLnKAAsVujMRAAQAAAB+KgAAAAAAAL4zEQACAEHUucoACxXAMxEABQAAAHMiAAAAAAAAxTMRAAUAQfS5ygALFcozEQAGAAAAEwEAAAAAAADQMxEADABBlLrKAAsF3DMRAAUAQaS6ygALFeEzEQAGAAAANAEAAAAAAADnMxEADABBxLrKAAsF8zMRAAQAQdS6ygALFfczEQAJAAAAgyIAAAAAAAAANBEACgBB9LrKAAsFCjQRAAYAQYS7ygALBRA0EQARAEGUu8oACwUhNBEAAgBBpLvKAAsVIzQRAAkAAADIJAAAAAAAACw0EQADAEHEu8oACwUvNBEADgBB1LvKAAsFPTQRAAYAQeS7ygALBUM0EQAFAEH0u8oACxVINBEAAwAAAGUiAAAAAAAASzQRAAYAQZS8ygALBVE0EQAEAEGkvMoACxVVNBEAAgAAADwAAAAAAAAAVzQRAAMAQcS8ygALBVo0EQAJAEHUvMoACwVjNBEAEABB5LzKAAsVczQRAAgAAACyKQAAAAAAAHs0EQAEAEGEvcoACxV/NBEACAAAADgpAAAAAAAAhzQRAAQAQaS9ygALBYs0EQACAEG0vcoACwWNNBEAAgBBxL3KAAsFjzQRABIAQdS9ygALBaE0EQAHAEHkvcoACxWoNBEABwAAAEoqAAAAAAAArzQRAAQAQYS+ygALBbM0EQADAEGUvsoACwW2NBEABQBBpL7KAAsFuzQRAAUAQbS+ygALJcA0EQAGAAAAaCIAAAAAAADGNBEABwAAANUqAAAAAAAAzTQRAAUAQeS+ygALBdI0EQAGAEH0vsoACwXYNBEAAgBBhL/KAAsF2jQRAAMAQZS/ygALFd00EQAEAAAAHCEAAAAAAADhNBEABABBtL/KAAsF5TQRAAMAQcS/ygALFeg0EQAGAAAAtCUAAAAAAADuNBEABABB5L/KAAsF8jQRAAUAQfS/ygALFfc0EQAHAAAAoCIAAAAAAAD+NBEABQBBlMDKAAsVAzURAAYAAADmIgAAAAAAAAk1EQADAEG0wMoACwUMNREABABBxMDKAAsFEDURAAYAQdTAygALFRY1EQAGAAAAvykAAAAAAAAcNREAAwBB9MDKAAsFHzURAAcAQYTBygALBSY1EQAFAEGUwcoACxUrNREABgAAAK8AAAAAAAAAMTURAAkAQbTBygALJTo1EQARAAAAySEAAAAAAABLNREACAAAALAqAAA4AwAAUzURABwAQeTBygALBW81EQAOAEH0wcoACwV9NREAAgBBhMLKAAsFfzURAAYAQZTCygALBYU1EQADAEGkwsoACwWINREABQBBtMLKAAsFjTURAAsAQcTCygALBZg1EQAGAEHUwsoACwWeNREACABB5MLKAAsFpjURAAkAQfTCygALBa81EQACAEGEw8oACwWxNREACABBlMPKAAsFuTURAAgAQaTDygALBcE1EQACAEG0w8oACwXDNREAAwBBxMPKAAsFxjURAAMAQdTDygALBck1EQADAEHkw8oACwXMNREABQBB9MPKAAsF0TURAAMAQYTEygALFdQ1EQAFAAAALSIAAAAAAADZNREABABBpMTKAAsF3TURAA0AQbTEygALBeo1EQAIAEHExMoACwXyNREABABB1MTKAAsF9jURAAMAQeTEygALBfk1EQAEAEH0xMoACwX9NREAAwBBhcXKAAsENhEABgBBlMXKAAsFBjYRAAMAQaTFygALBQk2EQAEAEG0xcoACxUNNhEACQAAACQhAAAAAAAAFjYRABMAQdTFygALBSk2EQAOAEHkxcoACwU3NhEABwBB9MXKAAsFPjYRAAUAQYTGygALBUM2EQAGAEGUxsoACwVJNhEAAwBBpMbKAAsFTDYRAAQAQbTGygALBVA2EQALAEHExsoACwVbNhEABwBB1MbKAAsFYjYRAAMAQeTGygALBWU2EQAHAEH0xsoACwVsNhEAAgBBhMfKAAslbjYRAA4AAAC0JQAAAAAAAHw2EQAJAAAACyIAAAAAAACFNhEABABBtMfKAAsFiTYRAAUAQcTHygALBY42EQAEAEHUx8oACxWSNhEACQAAAAQqAAAAAAAAmzYRAAUAQfTHygALBaA2EQAEAEGEyMoACwWkNhEABwBBlMjKAAsFqzYRAAYAQaTIygALJbE2EQAGAAAAfiIAAAAAAAC3NhEABwAAAFQiAAAAAAAAvjYRAAIAQdTIygALFcA2EQAPAAAAYyAAAAAAAADPNhEACwBB9MjKAAsF2jYRAAIAQYTJygALBdw2EQAIAEGUycoACwXkNhEACgBBpMnKAAsF7jYRAAUAQbTJygALJfM2EQAFAAAAYdUBAAAAAAD4NhEABQAAANEhAAAAAAAA/TYRAAgAQeTJygALBQU3EQAEAEH0ycoACwUJNxEACQBBhMrKAAsFEjcRAAQAQZTKygALBRY3EQAHAEGkysoACwUdNxEABgBBtMrKAAs1IzcRAAQAAACRKgAAAAAAACc3EQAGAAAAqyIAAAAAAAAtNxEACQAAADYqAAAAAAAANjcRAAYAQfTKygALFTw3EQAFAAAA6icAAAAAAABBNxEAAwBBlMvKAAsFRDcRAAMAQaTLygALBUc3EQANAEG0y8oACwVUNxEABQBBxMvKAAsFWTcRAAUAQdTLygALBV43EQADAEHky8oACxVhNxEABQAAAKIAAAAAAAAAZjcRAAIAQYTMygALFWg3EQAFAAAAQiIAAAAAAABtNxEABABBpMzKAAsFcTcRAAQAQbTMygALBXU3EQAFAEHEzMoACwV6NxEADABB1MzKAAsFhjcRAAIAQeTMygALBYg3EQAGAEH0zMoACwWONxEABgBBhM3KAAsFlDcRAAQAQZTNygALJZg3EQAUAAAArSEAAAAAAACsNxEABAAAACwiAAAAAAAAsDcRAAUAQcTNygALBbU3EQAFAEHUzcoACwW6NxEABgBB5M3KAAsFwDcRAAcAQfTNygALNcc3EQAKAAAAkyEAAAAAAADRNxEABAAAAMApAAAAAAAA1TcRAAYAAAC4AAAAAAAAANs3EQALAEG0zsoACyXmNxEACQAAAOcjAAAAAAAA7zcRAAQAAABrIgAA0iAAAPM3EQAJAEHkzsoACyX8NxEABwAAAJQiAAAA/gAAAzgRABAAAABOKQAAAAAAABM4EQADAEGUz8oACwUWOBEAAwBBpM/KAAsVGTgRAA4AAADkKgAAAAAAACc4EQAKAEHEz8oACwUxOBEABgBB1M/KAAsFNzgRAAcAQeTPygALBT44EQAIAEH0z8oACxVGOBEABAAAACghAAAAAAAASjgRAAQAQZTQygALBU44EQAEAEGk0MoACwVSOBEABQBBtNDKAAsFVzgRAAIAQcTQygALBVk4EQAHAEHU0MoACwVgOBEABwBB5NDKAAsFZzgRAAMAQfTQygALBWo4EQAGAEGE0coACwVwOBEABABBlNHKAAsFdDgRAAwAQaTRygALBYA4EQAPAEG00coACwWPOBEABQBBxNHKAAsVlDgRAAcAAAAQIgAAAAAAAJs4EQACAEHk0coACxWdOBEABwAAAMIDAAAAAAAApDgRAA4AQYTSygALJbI4EQAFAAAAtioAAAAAAAC3OBEABAAAABkEAAAAAAAAuzgRAAwAQbTSygALFcc4EQAMAAAADSEAAAAAAADTOBEABgBB1NLKAAsF2TgRAAgAQeTSygALBeE4EQADAEH00soACwXkOBEACgBBhNPKAAsF7jgRAAMAQZTTygALBfE4EQAEAEGk08oACwX1OBEACwBBtdPKAAsUOREADQAAABMpAAAAAAAADTkRAAYAQdTTygALBRM5EQADAEHk08oACwUWOREADgBB9NPKAAsVJDkRAAYAAADTAAAAAAAAACo5EQAEAEGU1MoACwUuOREABABBpNTKAAsVMjkRAAwAAAD0KQAAAAAAAD45EQAGAEHE1MoACwVEOREADwBB1NTKAAsFUzkRAAIAQeTUygALBVU5EQAGAEH01MoACwVbOREADgBBhNXKAAsFaTkRAAUAQZTVygALBW45EQAIAEGk1coACwV2OREABABBtNXKAAsVejkRAA8AAACiKgAAAAAAAIk5EQAMAEHU1coACwWVOREABQBB5NXKAAsFmjkRAAMAQfTVygALBZ05EQAJAEGE1soACwWmOREAAwBBlNbKAAsVqTkRAAkAAAAGKgAAAAAAALI5EQADAEG01soACwW1OREABgBBxNbKAAsFuzkRAAUAQdTWygALBcA5EQACAEHk1soACwXCOREAEwBB9NbKAAsF1TkRAAUAQYTXygALBdo5EQAPAEGU18oACwXpOREABABBpNfKAAsF7TkRAAUAQbTXygALBfI5EQAFAEHE18oACwX3OREABABB1NfKAAsF+zkRAAQAQeTXygALFf85EQAGAAAAwwAAAAAAAAAFOhEADwBBhNjKAAsFFDoRAAoAQZTYygALBR46EQACAEGk2MoACwUgOhEAAwBBtNjKAAsFIzoRABIAQcTYygALBTU6EQAGAEHU2MoACwU7OhEACABB5NjKAAsFQzoRAAUAQfTYygALBUg6EQALAEGE2coACwVTOhEABQBBlNnKAAsVWDoRAAUAAAAVIQAAAAAAAF06EQAEAEG02coACwVhOhEABgBBxNnKAAsVZzoRAAUAAACUIQAAAAAAAGw6EQAFAEHk2coACwVxOhEABQBB9NnKAAsldjoRAAQAAABCBAAAAAAAAHo6EQAJAAAA/ycAAAAAAACDOhEABQBBpNrKAAsFiDoRAAYAQbTaygALBY46EQAIAEHE2soACxWWOhEADgAAAGEgAAAAAAAApDoRAAUAQeTaygALBak6EQAFAEH02soACwWuOhEABABBhNvKAAsFsjoRAAkAQZTbygALFbs6EQAIAAAAdiIAAAAAAADDOhEAAQBBtNvKAAsFxDoRAAQAQcTbygALBcg6EQAQAEHU28oACwXYOhEABABB5NvKAAsF3DoRAAUAQfTbygALFeE6EQAEAAAAtCoAAAAAAADlOhEABgBBlNzKAAsF6zoRAAkAQaTcygALBfQ6EQADAEG03MoACwX3OhEADgBBxNzKAAsFBTsRAAUAQdTcygALBQo7EQAKAEHk3MoACwUUOxEAAwBB9NzKAAsFFzsRAAQAQYTdygALBRs7EQAEAEGU3coACxUfOxEAFQAAAEUhAAAAAAAANDsRAAUAQbTdygALBTk7EQAFAEHE3coACwU+OxEABQBB1N3KAAs1QzsRAAcAAACmIQAAAAAAAEo7EQAQAAAAkiEAAAAAAABaOxEABQAAALIAAAAAAAAAXzsRAAUAQZTeygALBWQ7EQAHAEGk3soACxVrOxEADQAAAEchAAAAAAAAeDsRAA0AQcTeygALBYU7EQAGAEHU3soACxWLOxEADwAAAPknAAAAAAAAmjsRAA8AQfTeygALBak7EQAKAEGE38oACwWzOxEACABBlN/KAAsFuzsRAA0AQaTfygALBcg7EQAEAEG038oACxXMOxEABwAAAAkgAAAAAAAA0zsRAAUAQdTfygALBdg7EQAEAEHk38oACwXcOxEABgBB9N/KAAsF4jsRAAUAQYTgygALBec7EQAIAEGU4MoACyXvOxEABQAAABUEAAAAAAAA9DsRAAYAAAD5JQAAAAAAAPo7EQADAEHE4MoACwX9OxEABABB1ODKAAsFATwRAAoAQeTgygALFQs8EQAQAAAAvSUAAAAAAAAbPBEADQBBhOHKAAsFKDwRAAQAQZThygALBSw8EQACAEGk4coACwUuPBEAAwBBtOHKAAsFMTwRAAkAQcThygALFTo8EQAPAAAAaiIAAAAAAABJPBEABABB5OHKAAsVTTwRAAwAAAAYIgAAAAAAAFk8EQAEAEGE4soACwVdPBEABQBBlOLKAAsFYjwRAAoAQaTiygALBWw8EQACAEG04soACwVuPBEACwBBxOLKAAsVeTwRAAcAAAB/KQAAAAAAAIA8EQAIAEHk4soACwWIPBEABQBB9OLKAAsVjTwRAAcAAADJAAAAAAAAAJQ8EQAEAEGU48oACwWYPBEABABBpOPKAAsFnDwRAAQAQbTjygALBaA8EQADAEHE48oACwWjPBEABABB1OPKAAsFpzwRAAUAQeTjygALBaw8EQAEAEH048oACwWwPBEADgBBhOTKAAsFvjwRAAUAQZTkygALBcM8EQAHAEGk5MoACxXKPBEABgAAAM4AAAAAAAAA0DwRAAUAQcTkygALBdU8EQAMAEHU5MoACwXhPBEABABB5OTKAAsF5TwRAAQAQfTkygALBek8EQAEAEGE5coACyXtPBEAEQAAAGciAAAAAAAA/jwRAAUAAADA1AEAAAAAAAM9EQAGAEG05coACwUJPREAAwBBxOXKAAsFDD0RAAUAQdTlygALBRE9EQAEAEHk5coACwUVPREACABB9OXKAAsFHT0RAAkAQYTmygALBSY9EQAHAEGU5soACxUtPREABQAAAJIDAAAAAAAAMj0RAA4AQbTmygALBUA9EQACAEHE5soACwVCPREABgBB1ObKAAsFSD0RAAwAQeTmygALBVQ9EQAEAEH05soACwVYPREABABBhOfKAAsFXD0RAAYAQZTnygALBWI9EQAGAEGk58oACxVoPREABwAAAOcAAAAAAAAAbz0RAAMAQcTnygALBXI9EQAIAEHU58oACwV6PREABQBB5OfKAAsFfz0RAAQAQfTnygALBYM9EQAEAEGE6MoACwWHPREACwBBlOjKAAslkj0RABAAAABxIgAAAAAAAKI9EQAHAAAA2QAAAAAAAACpPREAAwBBxOjKAAsVrD0RAAoAAAAdIgAAAAAAALY9EQADAEHk6MoACxW5PREABgAAAIsiAAAAAAAAvz0RAAYAQYTpygALBcU9EQACAEGU6coACwXHPREACwBBpOnKAAsF0j0RAAUAQbTpygALBdc9EQAFAEHE6coACwXcPREABQBB1OnKAAsV4T0RAAcAAAAtKgAAAAAAAOg9EQAEAEH06coACwXsPREACgBBhOrKAAsF9j0RAAMAQZTqygALFfk9EQAJAAAAAiIAAAAAAAACPhEACgBBtOrKAAsVDD4RABIAAAAlIgAAAAAAAB4+EQAHAEHU6soACwUlPhEADwBB5OrKAAsFND4RAAMAQfTqygALBTc+EQADAEGE68oACwU6PhEABQBBlOvKAAsVPz4RAAYAAAAHIAAAAAAAAEU+EQAIAEG068oACwVNPhEABwBBxOvKAAsFVD4RAAMAQdTrygALBVc+EQANAEHk68oACwVkPhEABgBB9OvKAAsFaj4RAAUAQYTsygALBW8+EQAFAEGU7MoACwV0PhEACQBBpOzKAAsFfT4RAAcAQbTsygALBYQ+EQACAEHE7MoACwWGPhEACwBB1OzKAAsFkT4RAAIAQeTsygALFZM+EQAHAAAAJQAAAAAAAACaPhEABABBhO3KAAsFnj4RAAsAQZTtygALBak+EQAEAEGk7coACxWtPhEACgAAALcAAAAAAAAAtz4RAAUAQcTtygALBbw+EQAGAEHU7coACwXCPhEADgBB5O3KAAsF0D4RAAIAQfTtygALBdI+EQAEAEGE7soACwXWPhEADQBBlO7KAAsF4z4RAAcAQaTuygALFeo+EQAPAAAAfSoAAAAAAAD5PhEABABBxO7KAAsF/T4RAAMAQdXuygALBD8RAA8AQeTuygALBQ8/EQAFAEH07soACxUUPxEABgAAAD4gAAAAAAAAGj8RAA8AQZTvygALFSk/EQAGAAAAcSoAAAAAAAAvPxEAAwBBtO/KAAsFMj8RAAQAQcTvygALFTY/EQAGAAAA5CoAAAAAAAA8PxEAAwBB5O/KAAsVPz8RAAcAAAAmKQAAAAAAAEY/EQAKAEGE8MoACwVQPxEACABBlPDKAAsFWD8RAA8AQaTwygALBWc/EQADAEG08MoACwVqPxEABABBxPDKAAsFbj8RABEAQdTwygALBX8/EQAEAEHk8MoACwWDPxEACABB9PDKAAsFiz8RAA8AQYTxygALBZo/EQAHAEGU8coACwWhPxEABQBBpPHKAAsFpj8RAAoAQbTxygALFbA/EQAHAAAAFSAAAAAAAAC3PxEABABB1PHKAAsFuz8RAAQAQeTxygALNb8/EQAKAAAAZSYAAAAAAADJPxEABgAAAL4hAAAAAAAAzz8RABUAAADUIQAAAAAAAOQ/EQAEAEGk8soACxXoPxEACgAAAIgiAAAAAAAA8j8RAAcAQcTyygALBfk/EQAPAEHU8soACwUIQBEABwBB5PLKAAsVD0ARAAYAAAAsAAAAAAAAABVAEQAMAEGE88oACwUhQBEAAgBBlPPKAAsFI0ARAAIAQaTzygALBSVAEQAGAEG088oACxUrQBEABgAAAPknAAAAAAAAMUARAA8AQdTzygALBUBAEQAMAEHk88oACwVMQBEABgBB9PPKAAsFUkARAAgAQYT0ygALBVpAEQACAEGU9MoACwVcQBEACABBpPTKAAsFZEARAAkAQbT0ygALBW1AEQAEAEHE9MoACwVxQBEAAwBB1PTKAAsFdEARAAUAQeT0ygALFXlAEQAOAAAA9ScAAAAAAACHQBEABABBhPXKAAsFi0ARAAYAQZT1ygALBZFAEQAJAEGk9coACwWaQBEAAwBBtPXKAAsFnUARAAgAQcT1ygALBaVAEQACAEHU9coACwWnQBEABABB5PXKAAsFq0ARAAcAQfT1ygALBbJAEQAHAEGE9soACwW5QBEAAwBBlPbKAAsFvEARAAUAQaT2ygALBcFAEQACAEG09soACwXDQBEABwBBxPbKAAsVykARAAUAAADVIQAAAAAAAM9AEQACAEHk9soACxXRQBEACQAAAKIiAAAAAAAA2kARAAUAQYT3ygALBd9AEQAHAEGU98oACwXmQBEABQBBpPfKAAsV60ARAAoAAACQIQAAAAAAAPVAEQACAEHE98oACwX3QBEABQBB1PfKAAsV/EARAAYAAADeIgAAAAAAAAJBEQACAEH098oACwUEQREAAgBBhPjKAAsVBkERAAkAAACfIgAAAAAAAA9BEQAHAEGk+MoACwUWQREABgBBtPjKAAsFHEERAAEAQcT4ygALBR1BEQAEAEHU+MoACwUhQREAAgBB5PjKAAsFI0ERAAUAQfT4ygALFShBEQAHAAAArSIAAAAAAAAvQREABgBBlPnKAAsFNUERAAMAQaT5ygALJThBEQANAAAAZSIAAAAAAABFQREABQAAAGjVAQAAAAAASkERAAkAQdT5ygALBVNBEQAGAEHk+coACwVZQREABABB9PnKAAsFXUERAAsAQYT6ygALBWhBEQAFAEGU+soACwVtQREAAwBBpPrKAAsFcEERAAQAQbT6ygALFXRBEQAFAAAAUQQAAAAAAAB5QREABwBB1PrKAAsFgEERAAMAQeT6ygALFYNBEQAEAAAAJgAAAAAAAACHQREABQBBhPvKAAsFjEERAAkAQZT7ygALBZVBEQAJAEGk+8oACxWeQREABwAAAEQqAAAAAAAApUERAAUAQcT7ygALBapBEQAEAEHU+8oACwWuQREABABB5PvKAAsFskERAAMAQfT7ygALFbVBEQAGAAAA3wAAAAAAAAC7QREABgBBlPzKAAsFwUERAAoAQaT8ygALBctBEQAHAEG0/MoACwXSQREABABBxPzKAAsF1kERAAcAQdT8ygALFd1BEQAEAAAAqAMAAAAAAADhQREACgBB9PzKAAsl60ERAA4AAACzIgAAAAAAAPlBEQAEAAAAEwQAAAAAAAD9QREAAwBBpf3KAAsEQhEACABBtP3KAAsFCEIRAAYAQcT9ygALFQ5CEQAHAAAAcyIAAAAAAAAVQhEABQBB5P3KAAsFGkIRABEAQfT9ygALFStCEQAGAAAA5gAAAAAAAAAxQhEACABBlP7KAAsFOUIRAAMAQaT+ygALBTxCEQAEAEG0/soACwVAQhEAAwBBxP7KAAsFQ0IRAAkAQdT+ygALBUxCEQAFAEHk/soACwVRQhEABgBB9P7KAAsFV0IRAAkAQYT/ygALJWBCEQAEAAAAGwQAAAAAAABkQhEACAAAAJghAAAAAAAAbEIRAAIAQbT/ygALFW5CEQAGAAAAkyIAAAAAAAB0QhEACQBB1P/KAAsFfUIRAAMAQeT/ygALBYBCEQANAEH0/8oACwWNQhEABABBhIDLAAsVkUIRAAcAAABuKgAAAAAAAJhCEQAJAEGkgMsACwWhQhEABgBBtIDLAAsFp0IRAAMAQcSAywALBapCEQAEAEHUgMsACwWuQhEABgBB5IDLAAsFtEIRAAUAQfSAywALBblCEQAEAEGEgcsACwW9QhEABQBBlIHLAAsFwkIRAAIAQaSBywALBcRCEQAFAEG0gcsACxXJQhEACwAAAJsiAAAAAAAA1EIRAAUAQdSBywALBdlCEQADAEHkgcsACxXcQhEABQAAAMMlAAAAAAAA4UIRAAQAQYSCywALBeVCEQAJAEGUgssACwXuQhEACwBBpILLAAsF+UIRAAYAQbSCywALFf9CEQAHAAAAjSIAAAAAAAAGQxEAAwBB1ILLAAsVCUMRAAUAAABc1QEAAAAAAA5DEQARAEH0gssACwUfQxEABQBBhIPLAAsVJEMRAAYAAAC/IgAAAAAAACpDEQADAEGkg8sACwUtQxEACgBBtIPLAAsFN0MRAAwAQcSDywALBUNDEQAFAEHUg8sACxVIQxEABgAAAGklAAAAAAAATkMRAAYAQfSDywALBVRDEQAIAEGEhMsACwVcQxEABABBlITLAAsFYEMRAAsAQaSEywALBWtDEQAIAEG0hMsACwVzQxEACwBBxITLAAsFfkMRAAsAQdSEywALBYlDEQAFAEHkhMsACwWOQxEAEwBB9ITLAAsFoUMRAAYAQYSFywALBadDEQAMAEGUhcsACxWzQxEACAAAAIIqAAAAAAAAu0MRAAQAQbSFywALBb9DEQAFAEHEhcsACwXEQxEABQBB1IXLAAsFyUMRAAsAQeSFywALBdRDEQAMAEH0hcsACwXgQxEACABBhIbLAAsF6EMRAAIAQZSGywALBepDEQADAEGkhssACwXtQxEADwBBtIbLAAsF/EMRAAwAQcSGywALBQhEEQAKAEHUhssACwUSRBEAAwBB5IbLAAsFFUQRABEAQfSGywALBSZEEQAMAEGEh8sACwUyRBEABgBBlIfLAAsVOEQRAAYAAABTAQAAAAAAAD5EEQAGAEG0h8sACwVERBEACgBBxIfLAAsVTkQRAAkAAAAeIwAAAAAAAFdEEQAFAEHkh8sACwVcRBEADABB9IfLAAsFaEQRAAkAQYSIywALFXFEEQASAAAAfSoAADgDAACDRBEADgBBpIjLAAsFkUQRAA8AQbSIywALBaBEEQAMAEHEiMsACwWsRBEAAwBB1IjLAAsFr0QRAAYAQeSIywALBbVEEQAGAEH0iMsACwW7RBEACQBBhInLAAsFxEQRAAgAQZSJywALFcxEEQAMAAAAIyIAAAAAAADYRBEAAgBBtInLAAsF2kQRAAMAQcSJywALBd1EEQAIAEHUicsACyXlRBEABAAAAMQDAAAAAAAA6UQRAAUAAACeIQAAAAAAAO5EEQAEAEGEissACwXyRBEAEgBBlIrLAAsFBEURAAUAQaSKywALBQlFEQAFAEG0issACwUORREACABBxIrLAAsVFkURAAUAAACf1AEAAAAAABtFEQALAEHkissACxUmRREAEAAAAMwiAAAAAAAANkURAAcAQYSLywALFT1FEQAFAAAAtdQBAAAAAABCRREAAgBBpIvLAAsFREURAAYAQbSLywALBUpFEQAIAEHEi8sACxVSRREABQAAANoCAAAAAAAAV0URABAAQeSLywALJWdFEQAIAAAAuykAAAAAAABvRREACAAAADkqAAAAAAAAd0URAAYAQZSMywALFX1FEQAHAAAADAEAAAAAAACERREABABBtIzLAAsFiEURAAYAQcSMywALBY5FEQADAEHUjMsACwWRRREABQBB5IzLAAsFlkURABEAQfSMywALBadFEQAJAEGEjcsACwWwRREACgBBlI3LAAsFukURAA0AQaSNywALBcdFEQAEAEG0jcsACwXLRREABQBBxI3LAAsF0EURAAEAQdSNywALFdFFEQAHAAAAvioAAAAAAADYRREAAgBB9I3LAAsF2kURAAMAQYSOywALBd1FEQAFAEGUjssACwXiRREAEwBBpI7LAAsV9UURAAUAAADOAAAAAAAAAPpFEQADAEHEjssACxX9RREABgAAAO4AAAAAAAAAA0YRAAUAQeSOywALBQhGEQAEAEH0jssACwUMRhEABQBBhI/LAAsVEUYRAAYAAABuAQAAAAAAABdGEQAEAEGkj8sACxUbRhEAAwAAAHsiAAAAAAAAHkYRAAQAQcSPywALBSJGEQAGAEHUj8sACwUoRhEAAwBB5I/LAAsFK0YRAAUAQfSPywALJTBGEQAFAAAAJwQAAAAAAAA1RhEABAAAABbVAQAAAAAAOUYRAAYAQaSQywALBT9GEQAIAEG0kMsACwVHRhEABABBxJDLAAsFS0YRAAQAQdSQywALBU9GEQAGAEHkkMsACwVVRhEADwBB9JDLAAsFZEYRAAcAQYSRywALBWtGEQAFAEGUkcsACwVwRhEABABBpJHLAAsFdEYRABIAQbSRywALFYZGEQADAAAAVCoAAAAAAACJRhEADwBB1JHLAAsFmEYRAAIAQeSRywALBZpGEQAGAEH0kcsACxWgRhEABgAAAO0nAAAAAAAApkYRAA8AQZSSywALFbVGEQAHAAAAKCEAAAAAAAC8RhEADQBBtJLLAAsFyUYRAAMAQcSSywALBcxGEQADAEHUkssACxXPRhEACwAAALgqAAAAAAAA2kYRAAoAQfSSywALJeRGEQAHAAAAeCkAAAAAAADrRhEABwAAADcBAAAAAAAA8kYRAAgAQaSTywALBfpGEQAHAEG0k8sACwUBRxEABQBBxJPLAAsFBkcRAAwAQdSTywALBRJHEQADAEHkk8sACwUVRxEAEQBB9JPLAAsFJkcRAAMAQYSUywALBSlHEQAOAEGUlMsACwU3RxEABQBBpJTLAAsVPEcRAAcAAACwIwAAAAAAAENHEQADAEHElMsACwVGRxEACwBB1JTLAAsVUUcRAAYAAAAZAQAAAAAAAFdHEQAHAEH0lMsACwVeRxEACQBBhJXLAAsFZ0cRAAUAQZSVywALBWxHEQAFAEGklcsACwVxRxEAAgBBtJXLAAsFc0cRAAMAQcSVywALFXZHEQAHAAAAiiIAAAD+AAB9RxEACwBB5JXLAAsFiEcRAAMAQfSVywALBYtHEQAOAEGElssACxWZRxEACQAAAFAiAAAAAAAAokcRAAMAQaSWywALBaVHEQADAEG0lssACwWoRxEADABBxJbLAAsFtEcRAA4AQdSWywALFcJHEQAIAAAAaCkAAAAAAADKRxEACwBB9JbLAAsF1UcRAAYAQYSXywALFdtHEQAEAAAAtwMAAAAAAADfRxEAAgBBpJfLAAsF4UcRAAcAQbSXywALJehHEQAXAAAA4yIAAAAAAAD/RxEABgAAAOkAAAAAAAAABUgRAAYAQeSXywALBQtIEQAHAEH0l8sACwUSSBEABgBBhJjLAAsFGEgRAAsAQZSYywALJSNIEQAFAAAAtSoAAAAAAAAoSBEABgAAABgBAAAAAAAALkgRABQAQcSYywALBUJIEQADAEHUmMsACxVFSBEACgAAAG0iAAAAAAAAT0gRAAUAQfSYywALFVRIEQAMAAAA1QMAAAAAAABgSBEAAwBBlJnLAAsFY0gRAAMAQaSZywALFWZIEQAFAAAAuAAAAAAAAABrSBEACABBxJnLAAslc0gRAAcAAABvKgAAAAAAAHpIEQAGAAAADiYAAAAAAACASBEADQBB9JnLAAsFjUgRAAgAQYSaywALBZVIEQAEAEGUmssACwWZSBEABQBBpJrLAAsFnkgRAAQAQbSaywALBaJIEQACAEHEmssACwWkSBEABQBB1JrLAAsFqUgRAAEAQeSaywALBapIEQAEAEH0mssACwWuSBEADABBhJvLAAsFukgRAAYAQZSbywALBcBIEQAHAEGkm8sACwXHSBEADQBBtJvLAAsF1EgRAAcAQcSbywALBdtIEQAQAEHUm8sACwXrSBEABABB5JvLAAsV70gRAAwAAACdIgAAAAAAAPtIEQAFAEGFnMsACwRJEQAHAEGUnMsACxUHSREADAAAAMwhAAAAAAAAE0kRAAoAQbScywALBR1JEQAFAEHEnMsACzUiSREAEAAAAOoiAAAAAAAAMkkRAAQAAAA01QEAAAAAADZJEQAJAAAALiMAAAAAAAA/SREACABBhJ3LAAsVR0kRAAcAAADAIgAAAAAAAE5JEQARAEGkncsACwVfSREAAgBBtJ3LAAsFYUkRAAIAQcSdywALBWNJEQAFAEHUncsACwVoSREADQBB5J3LAAsFdUkRAAQAQfSdywALBXlJEQANAEGEnssACwWGSREAAgBBlJ7LAAsFiEkRABYAQaSeywALBZ5JEQAEAEG0nssACwWiSREAAwBBxJ7LAAsFpUkRAAQAQdSeywALBalJEQAIAEHknssACwWxSREAAwBB9J7LAAsFtEkRAA8AQYSfywALFcNJEQAMAAAACCMAAAAAAADPSREAAgBBpJ/LAAsF0UkRAAIAQbSfywALBdNJEQAIAEHEn8sACwXbSREABQBB1J/LAAsF4EkRAAwAQeSfywALBexJEQACAEH0n8sACwXuSREABABBhKDLAAsF8kkRAAQAQZSgywALBfZJEQACAEGkoMsACwX4SREABwBBtKDLAAsF/0kRAAMAQcSgywALFQJKEQAGAAAA9CIAAAAAAAAIShEACwBB5KDLAAsFE0oRAAEAQfSgywALBRRKEQAMAEGEocsACwUgShEACgBBlKHLAAslKkoRAAUAAAC1JQAAAAAAAC9KEQAOAAAApiEAAAAAAAA9ShEABQBBxKHLAAsFQkoRAA4AQdShywALBVBKEQAKAEHkocsACwVaShEAAwBB9KHLAAsFXUoRAAQAQYSiywALBWFKEQAEAEGUossACxVlShEACAAAAMUDAAAAAAAAbUoRAAQAQbSiywALBXFKEQAGAEHEossACxV3ShEABgAAAEUqAAAAAAAAfUoRAAYAQeSiywALBYNKEQACAEH0ossACwWFShEABQBBhKPLAAsFikoRAAYAQZSjywALBZBKEQAGAEGko8sACxWWShEABgAAAK4hAAAAAAAAnEoRAAoAQcSjywALBaZKEQAIAEHUo8sACxWuShEABgAAALEAAAAAAAAAtEoRAAUAQfSjywALFblKEQAGAAAAbyYAAAAAAAC/ShEADgBBlKTLAAsFzUoRAAMAQaSkywALBdBKEQAMAEG0pMsACwXcShEAAwBBxKTLAAs130oRAAQAAACuAAAAAAAAAONKEQAMAAAA2yEAAAAAAADvShEABQAAAGPVAQAAAAAA9EoRAAYAQYSlywALBfpKEQACAEGUpcsACwX8ShEACQBBpKXLAAslBUsRAAYAAADjAAAAAAAAAAtLEQAFAAAA1CIAAAAAAAAQSxEABwBB1KXLAAsFF0sRAAcAQeSlywALBR5LEQAIAEH0pcsACwUmSxEABwBBhKbLAAsFLUsRAAQAQZSmywALBTFLEQAFAEGkpssACwU2SxEABgBBtKbLAAsFPEsRAAwAQcSmywALBUhLEQAHAEHUpssACwVPSxEABQBB5KbLAAsVVEsRAAcAAAARAQAAAAAAAFtLEQAFAEGEp8sACwVgSxEABwBBlKfLAAsFZ0sRAAIAQaSnywALBWlLEQAJAEG0p8sACwVySxEABQBBxKfLAAsFd0sRAAMAQdSnywALBXpLEQAEAEHkp8sACwV+SxEABgBB9KfLAAslhEsRAAsAAABfIAAACiAAAI9LEQAWAAAALyIAAAAAAAClSxEABABBpKjLAAsFqUsRAAgAQbSoywALBbFLEQADAEHEqMsACwW0SxEAAgBB1KjLAAsFtksRAAIAQeSoywALBbhLEQADAEH0qMsACwW7SxEACABBhKnLAAsFw0sRAAYAQZSpywALBclLEQAGAEGkqcsACxXPSxEACQAAAAUjAAAAAAAA2EsRAAUAQcSpywALFd1LEQAFAAAA6CcAAAAAAADiSxEAEABB5KnLAAsF8ksRAAsAQfSpywALBf1LEQAMAEGEqssACwUJTBEAAgBBlKrLAAsFC0wRAAQAQaSqywALJQ9MEQAFAAAApSIAAAAAAAAUTBEABQAAAMYiAAAAAAAAGUwRAAYAQdSqywALBR9MEQAFAEHkqssACwUkTBEAEABB9KrLAAsFNEwRAAQAQYSrywALBThMEQAFAEGUq8sACxU9TBEABAAAAIYqAAAAAAAAQUwRAAgAQbSrywALBUlMEQAMAEHEq8sACwVVTBEAAwBB1KvLAAsFWEwRAAcAQeSrywALBV9MEQAEAEH0q8sACwVjTBEABABBhKzLAAsFZ0wRAAUAQZSsywALBWxMEQADAEGkrMsACwVvTBEABQBBtKzLAAsFdEwRAAMAQcSsywALFXdMEQAHAAAAKgAAAAAAAAB+TBEABQBB5KzLAAsFg0wRAAMAQfSsywALBYZMEQADAEGErcsACwWJTBEABQBBlK3LAAsFjkwRAAUAQaStywALBZNMEQAGAEG0rcsACwWZTBEACABBxK3LAAsVoUwRAAQAAAAY1QEAAAAAAKVMEQAIAEHkrcsACwWtTBEABwBB9K3LAAsFtEwRAAgAQYSuywALBbxMEQAJAEGUrssACwXFTBEABgBBpK7LAAsFy0wRAAUAQbSuywALBdBMEQAFAEHErssACwXVTBEABQBB1K7LAAsV2kwRAAcAAAA/IwAAAAAAAOFMEQAHAEH0rssACwXoTBEAAwBBhK/LAAsF60wRAAUAQZSvywALBfBMEQANAEGkr8sACwX9TBEABQBBtK/LAAsVAk0RAAUAAADbAgAAAAAAAAdNEQACAEHUr8sACwUJTREADQBB5K/LAAslFk0RAAUAAACrAAAAAAAAABtNEQADAAAAJgAAAAAAAAAeTREAEgBBlLDLAAsFME0RAAkAQaSwywALBTlNEQAIAEG0sMsACwVBTREACwBBxLDLAAsVTE0RAAYAAAA8JQAAAAAAAFJNEQAGAEHksMsACwVYTREABABB9LDLAAsFXE0RAAMAQYSxywALBV9NEQAJAEGUscsACwVoTREABgBBpLHLAAsFbk0RAAMAQbSxywALBXFNEQAGAEHEscsACxV3TREAFgAAAB0gAAAAAAAAjU0RAAYAQeSxywALFZNNEQAFAAAAayIAADgDAACYTREAAgBBhLLLAAsFmk0RAAwAQZSyywALBaZNEQAGAEGksssACwWsTREADQBBtLLLAAsVuU0RAAYAAAAFJgAAAAAAAL9NEQAGAEHUsssACwXFTREABwBB5LLLAAsFzE0RAAYAQfSyywALFdJNEQAGAAAAjCkAAAAAAADYTREABABBlLPLAAsV3E0RAAcAAAC6IgAAAAAAAONNEQAEAEG0s8sACwXnTREAEQBBxLPLAAsF+E0RAAwAQdSzywALBQROEQABAEHks8sACxUFThEABwAAAE4iAAAAAAAADE4RAAgAQYS0ywALBRROEQAEAEGUtMsACxUYThEABQAAACUEAAAAAAAAHU4RAAIAQbS0ywALBR9OEQAEAEHEtMsACxUjThEADQAAAMMlAAAAAAAAME4RAAUAQeS0ywALBTVOEQACAEH0tMsACwU3ThEAAwBBhLXLAAsFOk4RAAgAQZS1ywALBUJOEQAIAEGktcsACwVKThEABABBtLXLAAsFTk4RAAUAQcS1ywALBVNOEQAFAEHUtcsACwVYThEABABB5LXLAAsVXE4RAAcAAAAlKgAAAAAAAGNOEQAEAEGEtssACxVnThEAFQAAAG8pAAAAAAAAfE4RAAMAQaS2ywALBX9OEQACAEG0tssACwWBThEABQBBxLbLAAsFhk4RAAUAQdS2ywALFYtOEQAGAAAADSkAAAAAAACRThEABwBB9LbLAAsFmE4RAAoAQYS3ywALFaJOEQADAAAAYyAAAAAAAAClThEADwBBpLfLAAsFtE4RAA4AQbS3ywALJcJOEQAHAAAAGwEAAAAAAADJThEABgAAAIAlAAAAAAAAz04RAAkAQeS3ywALBdhOEQAHAEH0t8sACxXfThEABgAAABoiAAAAAAAA5U4RAAMAQZS4ywALBehOEQANAEGkuMsACxX1ThEABwAAAK4iAAAAAAAA/E4RAAMAQcS4ywALBf9OEQAHAEHUuMsACxUGTxEAAwAAANAAAAAAAAAACU8RAAYAQfS4ywALBQ9PEQAGAEGEucsACwUVTxEABABBlLnLAAsFGU8RAAQAQaS5ywALBR1PEQAHAEG0ucsACxUkTxEABgAAAEMiAAAAAAAAKk8RAAMAQdS5ywALBS1PEQAEAEHkucsACwUxTxEACgBB9LnLAAsVO08RAAcAAAAaIAAAAAAAAEJPEQAFAEGUussACwVHTxEABQBBpLrLAAsFTE8RAAQAQbS6ywALBVBPEQAFAEHEussACwVVTxEABQBB1LrLAAsFWk8RAAMAQeS6ywALBV1PEQAFAEH0ussACwViTxEABwBBhLvLAAsFaU8RAAoAQZS7ywALBXNPEQASAEGku8sACwWFTxEABQBBtLvLAAsFik8RAAMAQcS7ywALBY1PEQAFAEHUu8sACwWSTxEAAwBB5LvLAAsFlU8RAAQAQfS7ywALBZlPEQAEAEGEvMsACwWdTxEADQBBlLzLAAsVqk8RAAQAAABwKgAAAAAAAK5PEQAQAEG0vMsACwW+TxEADwBBxLzLAAsFzU8RAAIAQdS8ywALBc9PEQAMAEHkvMsACwXbTxEADABB9LzLAAsF508RAAgAQYS9ywALFe9PEQAFAAAAYikAAAAAAAD0TxEAAgBBpL3LAAsF9k8RAAYAQbS9ywALBfxPEQAFAEHEvcsACxUBUBEACgAAAIoiAAAAAAAAC1ARAAcAQeS9ywALBRJQEQADAEH0vcsACwUVUBEABQBBhL7LAAsFGlARAAwAQZS+ywALBSZQEQAEAEGkvssACwUqUBEAAgBBtL7LAAsFLFARAAIAQcS+ywALBS5QEQAEAEHUvssACxUyUBEABwAAABghAAAAAAAAOVARAAYAQfS+ywALBT9QEQAEAEGEv8sACwVDUBEABQBBlL/LAAsFSFARAAYAQaS/ywALBU5QEQANAEG0v8sACyVbUBEABQAAAL/UAQAAAAAAYFARAAcAAAB7AAAAAAAAAGdQEQAHAEHkv8sACwVuUBEABQBB9L/LAAsFc1ARAAYAQYTAywALBXlQEQAEAEGUwMsACwV9UBEACwBBpMDLAAsFiFARAA4AQbTAywALFZZQEQAGAAAAESEAAAAAAACcUBEADgBB1MDLAAsFqlARAAwAQeTAywALJbZQEQARAAAAsCoAADgDAADHUBEABQAAABohAAAAAAAAzFARAAoAQZTBywALBdZQEQALAEGkwcsACwXhUBEAAgBBtMHLAAsF41ARAAMAQcTBywALBeZQEQACAEHUwcsACwXoUBEACgBB5MHLAAsl8lARAAkAAACQIgAAAAAAAPtQEQAMAAAAmiIAAAAAAAAHUREADQBBlMLLAAsVFFERAAUAAABPBAAAAAAAABlREQAFAEG0wssACwUeUREAFABBxMLLAAsFMlERAAYAQdTCywALBThREQAHAEHkwssACwU/UREAAwBB9MLLAAsFQlERAA4AQYTDywALBVBREQAEAEGUw8sACwVUUREABABBpMPLAAsVWFERAAQAAACwKgAAAAAAAFxREQADAEHEw8sACyVfUREABgAAAOgAAAAAAAAAZVERAAUAAACmKgAAAAAAAGpREQAGAEH0w8sACxVwUREAEQAAANsiAAAAAAAAgVERAAYAQZTEywALFYdREQADAAAAyCQAAAAAAACKUREABwBBtMTLAAsFkVERAAQAQcTEywALJZVREQAGAAAAIiMAAAAAAACbUREABwAAACIBAAAAAAAAolERAAQAQfTEywALBaZREQAOAEGExcsACwW0UREAEwBBlMXLAAsFx1ERAAcAQaTFywALBc5REQAGAEG0xcsACwXUUREABQBBxMXLAAsF2VERAAcAQdTFywALBeBREQAPAEHkxcsACwXvUREABgBB9MXLAAsV9VERAAcAAAC9KgAAAAAAAPxREQAFAEGUxssACwUBUhEACgBBpMbLAAsFC1IRAAQAQbTGywALFQ9SEQAFAAAAoQAAAAAAAAAUUhEAAgBB1MbLAAsFFlIRAAkAQeTGywALFR9SEQAGAAAAYiUAAAAAAAAlUhEACgBBhMfLAAsFL1IRAAcAQZTHywALBTZSEQAHAEGkx8sACwU9UhEAAwBBtMfLAAs1QFIRAAUAAAASIQAAAAAAAEVSEQAFAAAAcCIAAAAAAABKUhEABAAAAEAEAAAAAAAATlIRAAYAQfTHywALFVRSEQAIAAAAryoAADgDAABcUhEAAwBBlMjLAAsVX1IRAAUAAABXBAAAAAAAAGRSEQAFAEG0yMsACwVpUhEABABBxMjLAAsVbVIRAAQAAAAp1QEAAAAAAHFSEQAFAEHkyMsACxV2UhEABgAAAEgiAAAAAAAAfFIRAAYAQYTJywALBYJSEQAJAEGUycsACwWLUhEABwBBpMnLAAsFklIRAAcAQbTJywALBZlSEQAOAEHEycsACxWnUhEABgAAAPUDAAAAAAAArVIRABMAQeTJywALFcBSEQAIAAAAJioAAAAAAADIUhEAFQBBhMrLAAsF3VIRAAUAQZTKywALBeJSEQAFAEGkyssACxXnUhEABAAAAH0qAAAAAAAA61IRAAQAQcTKywALFe9SEQAFAAAAHCEAAAAAAAD0UhEABABB5MrLAAsV+FIRAA0AAAAJIwAAAAAAAAVTEQAEAEGEy8sACwUJUxEACQBBlMvLAAsFElMRABMAQaTLywALBSVTEQAGAEG0y8sACwUrUxEABABBxMvLAAsFL1MRAAYAQdTLywALBTVTEQADAEHky8sACwU4UxEAAgBB9MvLAAsFOlMRAAYAQYTMywALFUBTEQAEAAAAL9UBAAAAAABEUxEAAgBBpMzLAAsFRlMRAAMAQbTMywALJUlTEQAHAAAA8yIAAAAAAABQUxEABwAAAP0AAAAAAAAAV1MRAAYAQeTMywALBV1TEQADAEH0zMsACwVgUxEABABBhM3LAAsFZFMRAAIAQZTNywALBWZTEQANAEGkzcsACwVzUxEAAwBBtM3LAAsFdlMRAAQAQcTNywALBXpTEQAEAEHUzcsACwV+UxEABABB5M3LAAsFglMRAAQAQfTNywALBYZTEQAEAEGEzssACxWKUxEADQAAAOQhAAAAAAAAl1MRAAIAQaTOywALBZlTEQAJAEG0zssACxWiUxEABQAAAFElAAAAAAAAp1MRAAYAQdTOywALBa1TEQADAEHkzssACxWwUxEABgAAAL0hAAAAAAAAtlMRAAQAQYTPywALBbpTEQAGAEGUz8sACwXAUxEACgBBpM/LAAsFylMRAAYAQbTPywALBdBTEQADAEHEz8sACwXTUxEAAwBB1M/LAAsF1lMRAAgAQeTPywALBd5TEQAJAEH0z8sACwXnUxEAAwBBhNDLAAsF6lMRAAcAQZTQywALFfFTEQAUAAAAZyIAADgDAAAFVBEACwBBtNDLAAsFEFQRAAYAQcTQywALBRZUEQADAEHU0MsACxUZVBEABQAAAKrUAQAAAAAAHlQRAAUAQfTQywALFSNUEQAHAAAAWAEAAAAAAAAqVBEABQBBlNHLAAsFL1QRAAMAQaTRywALBTJUEQAKAEG00csACwU8VBEAEgBBxNHLAAsFTlQRAAQAQdTRywALBVJUEQAEAEHk0csACwVWVBEABwBB9NHLAAsVXVQRAAQAAAA/BAAAAAAAAGFUEQAEAEGU0ssACwVlVBEABgBBpNLLAAsFa1QRAAoAQbTSywALBXVUEQAFAEHE0ssACwV6VBEADABB1NLLAAslhlQRAAkAAAAFIgAAAAAAAI9UEQAHAAAAlSkAAAAAAACWVBEABgBBhNPLAAsFnFQRAAUAQZTTywALBaFUEQADAEGk08sACwWkVBEABgBBtNPLAAsFqlQRAAQAQcTTywALBa5UEQAEAEHU08sACwWyVBEAAgBB5NPLAAsFtFQRAAQAQfTTywALBbhUEQANAEGE1MsACwXFVBEABQBBlNTLAAsVylQRAAUAAAA+1QEAAAAAAM9UEQACAEG01MsACwXRVBEABwBBxNTLAAsV2FQRAAcAAAAMIwAAAAAAAN9UEQAFAEHk1MsACxXkVBEABwAAAHQqAAAAAAAA61QRAAkAQYTVywALBfRUEQAKAEGU1csACwX+VBEABgBBpNXLAAslBFURAAUAAAC7AAAAAAAAAAlVEQAEAAAA0yIAAAAAAAANVREABQBB1NXLAAsFElURAAYAQeTVywALBRhVEQAOAEH01csACwUmVREAEABBhNbLAAsVNlURAAUAAAAKAQAAAAAAADtVEQADAEGk1ssACwU+VREACABBtNbLAAsFRlURAAEAQcTWywALFUdVEQAHAAAAryoAAAAAAABOVREAAgBB5NbLAAsFUFURAAEAQfTWywALBVFVEQAFAEGE18sACwVWVREACABBlNfLAAsFXlURAAMAQaTXywALBWFVEQAEAEG018sACwVlVREAAwBBxNfLAAsFaFURAAUAQdTXywALBW1VEQAFAEHk18sACwVyVREABQBB9NfLAAsFd1URAAIAQYTYywALBXlVEQAEAEGU2MsACxV9VREABwAAAA4jAAAAAAAAhFURAAQAQbTYywALBYhVEQAGAEHE2MsACwWOVREABABB1NjLAAsFklURAAcAQeTYywALBZlVEQADAEH02MsACxWcVREABwAAAAUgAAAAAAAAo1URAAUAQZTZywALFahVEQAOAAAAryoAAAAAAAC2VREAAwBBtNnLAAsFuVURAAcAQcTZywALFcBVEQAFAAAAhyIAAAAAAADFVREACABB5NnLAAsFzVURAAUAQfTZywALBdJVEQAEAEGE2ssACwXWVREACgBBlNrLAAsF4FURAAIAQaTaywALBeJVEQAEAEG02ssACxXmVREABQAAAO8AAAAAAAAA61URAAMAQdTaywALBe5VEQAGAEHk2ssACxX0VREABwAAABQiAAAAAAAA+1URAAMAQYTbywALFf5VEQASAAAAyyEAAAAAAAAQVhEAEABBpNvLAAsFIFYRAAMAQbTbywALJSNWEQAFAAAAKSIAAAD+AAAoVhEABQAAAK8qAAA4AwAALVYRAAcAQeTbywALBTRWEQAFAEH028sACwU5VhEAEgBBhNzLAAslS1YRAAcAAAAiIAAAAAAAAFJWEQAKAAAANSAAAAAAAABcVhEABQBBtNzLAAsFYVYRAAwAQcTcywALBW1WEQAEAEHU3MsACwVxVhEABABB5NzLAAsFdVYRAAYAQfTcywALBXtWEQAHAEGE3csACwWCVhEABQBBlN3LAAsFh1YRAAYAQaTdywALJY1WEQAGAAAA1iIAAAAAAACTVhEABwAAAA0jAAAAAAAAmlYRAAoAQdTdywALBaRWEQADAEHk3csACwWnVhEAAgBB9N3LAAsFqVYRAAUAQYTeywALFa5WEQAFAAAADSEAAAAAAACzVhEABgBBpN7LAAsFuVYRAAkAQbTeywALFcJWEQAMAAAAdiIAAAAAAADOVhEAAgBB1N7LAAsV0FYRAA4AAADHIgAAAAAAAN5WEQAFAEH03ssACyXjVhEABwAAADkBAAAAAAAA6lYRAAgAAADeKQAAAAAAAPJWEQALAEGk38sACwX9VhEACQBBtN/LAAsFBlcRAAoAQcTfywALBRBXEQAMAEHU38sACwUcVxEABgBB5N/LAAsFIlcRAAYAQfTfywALBShXEQAFAEGE4MsACwUtVxEABwBBlODLAAsVNFcRAAUAAAC9AAAAAAAAADlXEQARAEG04MsACwVKVxEACgBBxODLAAsFVFcRAAcAQdTgywALBVtXEQANAEHk4MsACwVoVxEADwBB9ODLAAsVd1cRAAgAAAC1AwAAAAAAAH9XEQADAEGU4csACyWCVxEABgAAAG8pAAAAAAAAiFcRAAcAAACdIQAAOAMAAI9XEQACAEHE4csACwWRVxEAAwBB1OHLAAsFlFcRAAMAQeThywALBZdXEQAFAEH04csACwWcVxEAAwBBhOLLAAsFn1cRAAQAQZTiywALBaNXEQAKAEGk4ssACwWtVxEAAwBBtOLLAAsFsFcRAAMAQcTiywALFbNXEQAEAAAAJyEAAAAAAAC3VxEABgBB5OLLAAsFvVcRAAQAQfTiywALBcFXEQADAEGE48sACxXEVxEABwAAAH8qAAAAAAAAy1cRABEAQaTjywALBdxXEQAEAEG048sACxXgVxEABwAAAOgAAAAAAAAA51cRAAYAQdTjywALBe1XEQAJAEHk48sACwX2VxEACABB9OPLAAsF/lcRAAYAQYTkywALBQRYEQAKAEGU5MsACxUOWBEABwAAAPgAAAAAAAAAFVgRAAMAQbTkywALJRhYEQAFAAAA9AAAAAAAAAAdWBEACAAAAAkiAAAAAAAAJVgRAAwAQeTkywALBTFYEQADAEH05MsACwU0WBEAAgBBhOXLAAsFNlgRAAQAQZTlywALBTpYEQAEAEGk5csACwU+WBEAAwBBtOXLAAsFQVgRAB4AQcTlywALFV9YEQARAAAA6CcAAAAAAABwWBEABQBB5OXLAAsFdVgRAAYAQfTlywALFXtYEQAFAAAAWioAAAAAAACAWBEABABBlObLAAsFhFgRAAoAQaTmywALBY5YEQAMAEG05ssACwWaWBEAAwBBxObLAAsFnVgRAAYAQdTmywALFaNYEQADAAAAnAMAAAAAAACmWBEACwBB9ObLAAsFsVgRAAYAQYTnywALBbdYEQAMAEGU58sACwXDWBEABQBBpOfLAAsVyFgRAAYAAABQIgAAOAMAAM5YEQAEAEHE58sACyXSWBEABAAAABrVAQAAAAAA1lgRAAUAAABIBAAAAAAAANtYEQARAEH058sACwXsWBEABwBBhOjLAAsF81gRAAMA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CwWYbxEABQBBxNLMAAsFnW8RAAkAQdTSzAALBaZvEQAEAEHk0swACwWqbxEAAwBB9NLMAAsFrW8RAAQAQYTTzAALBbFvEQAOAEGU08wACxW/bxEACQAAAIkqAAAAAAAAyG8RAAQAQbTTzAALBcxvEQACAEHE08wACyXObxEABQAAAKwqAAAAAAAA028RAAgAAAB7KgAAAAAAANtvEQAMAEH008wACwXnbxEABgBBhNTMAAsF7W8RAAcAQZTUzAALBfRvEQAGAEGk1MwACwX6bxEABgBBtdTMAAsEcBEAAgBBxNTMAAsFAnARABEAQdTUzAALBRNwEQAHAEHk1MwACwUacBEABQBB9NTMAAsFH3ARAAcAQYTVzAALBSZwEQACAEGU1cwACwUocBEABgBBpNXMAAsFLnARABEAQbTVzAALBT9wEQARAEHE1cwACzVQcBEABAAAAAsiAAAAAAAAVHARAAYAAADGAAAAAAAAAFpwEQAJAAAAXwAAAAAAAABjcBEABQBBhNbMAAsFaHARABAAQZTWzAALBXhwEQAJAEGk1swACwWBcBEAAwBBtNbMAAsFhHARAAMAQcTWzAALBYdwEQAGAEHU1swACwWNcBEABABB5NbMAAsVkXARAAQAAACkKgAAAAAAAJVwEQAEAEGE18wACwWZcBEAAwBBlNfMAAsVnHARAAoAAABgJgAAAAAAAKZwEQAHAEG018wACwWtcBEAAgBBxNfMAAsFr3ARAAMAQdTXzAALBbJwEQAGAEHk18wACxW4cBEADAAAALQjAAAAAAAAxHARAAIAQYTYzAALBcZwEQACAEGU2MwACwXIcBEABABBpNjMAAsFzHARAAcAQbTYzAALBdNwEQAEAEHE2MwACwXXcBEABgBB1NjMAAsF3XARAAIAQeTYzAALBd9wEQAKAEH02MwACwXpcBEACwBBhNnMAAsV9HARAAYAAAAxAQAAAAAAAPpwEQADAEGk2cwACxX9cBEABwAAANoAAAAAAAAABHERAAUAQcTZzAALBQlxEQAJAEHU2cwACwUScREABQBB5NnMAAslF3ERAAUAAAC21AEAAAAAABxxEQAIAAAApCIAAAAAAAAkcREAAgBBlNrMAAsFJnERAA0AQaTazAALBTNxEQARAEG02swACwVEcREABQBBxNrMAAsFSXERAAMAQdTazAALBUxxEQAFAEHk2swACwVRcREABgBB9NrMAAsFV3ERAAUAQYTbzAALBVxxEQAEAEGU28wACxVgcREABAAAANsiAAAAAAAAZHERAAQAQbTbzAALJWhxEQALAAAAzCoAAAAAAABzcREABwAAAOAiAAAAAAAAenERAAQAQeTbzAALBX5xEQAFAEH028wACwWDcREABgBBhNzMAAsFiXERAAMAQZTczAALBYxxEQAIAEGk3MwACwWUcREAAwBBtNzMAAsVl3ERAAcAAAB9AAAAAAAAAJ5xEQACAEHU3MwACwWgcREABgBB5NzMAAsFpnERAAIAQfTczAALBahxEQAKAEGE3cwACwWycREAAwBBlN3MAAsFtXERAAMAQaTdzAALBbhxEQAHAEG03cwACwW/cREACQBBxN3MAAslyHERAAYAAACsKgAAAP4AAM5xEQAGAAAAAvsAAAAAAADUcREACABB9N3MAAsF3HERAA0AQYTezAALBelxEQAEAEGU3swACwXtcREABQBBpN7MAAsF8nERAAIAQbTezAALBfRxEQAGAEHE3swACwX6cREAAgBB1N7MAAsF/HERAAMAQeTezAALBf9xEQAEAEH03swACwUDchEABABBhN/MAAsVB3IRABEAAADQKQAAAAAAABhyEQAFAEGk38wACwUdchEABABBtN/MAAsFIXIRAAYAQcTfzAALBSdyEQAGAEHU38wACwUtchEAAgBB5N/MAAsFL3IRAAcAQfTfzAALBTZyEQAFAEGE4MwACwU7chEACwBBlODMAAsFRnIRABIAQaTgzAALBVhyEQAHAEG04MwACyVfchEABQAAAD3VAQAAAAAAZHIRAAcAAADDIgAAAAAAAGtyEQAFAEHk4MwACwVwchEABQBB9ODMAAsFdXIRAAIAQYThzAALBXdyEQACAEGU4cwACwV5chEABgBBpOHMAAsFf3IRAAYAQbThzAALBYVyEQADAEHE4cwACxWIchEACAAAAJ8DAAAAAAAAkHIRAAMAQeThzAALFZNyEQAFAAAAZiIAAAAAAACYchEABwBBhOLMAAsFn3IRAAMAQZTizAALBaJyEQAEAEGk4swACwWmchEABQBBtOLMAAsVq3IRAAUAAADrAAAAAAAAALByEQAEAEHU4swACwW0chEAAgBB5OLMAAsFtnIRAAUAQfTizAALBbtyEQAEAEGE48wACwW/chEAEwBBlOPMAAsV0nIRAAUAAACpAAAAAAAAANdyEQAFAEG048wACwXcchEABQBBxOPMAAsV4XIRAAYAAAAFAQAAAAAAAOdyEQAFAEHk48wACwXschEADQBB9OPMAAsF+XIRAAQAQYTkzAALBf1yEQAGAEGU5MwACwUDcxEABgBBpOTMAAsFCXMRAAQAQbTkzAALBQ1zEQALAEHE5MwACwUYcxEABwBB1OTMAAsFH3MRAAoAQeTkzAALBSlzEQACAEH05MwACwUrcxEABgBBhOXMAAsFMXMRAAkAQZTlzAALBTpzEQAHAEGk5cwACxVBcxEABQAAACUgAAAAAAAARnMRAAkAQcTlzAALBU9zEQAMAEHU5cwACwVbcxEAAgBB5OXMAAsFXXMRAAMAQfTlzAALBWBzEQATAEGE5swACwVzcxEABQBBlObMAAsFeHMRAAUAQaTmzAALBX1zEQACAEG05swACwV/cxEABgBBxObMAAsVhXMRABIAAABYJwAAAAAAAJdzEQAJAEHk5swACxWgcxEABgAAALUhAAAAAAAApnMRAAIAQYTnzAALBahzEQAIAEGU58wACwWwcxEADgBBpOfMAAsFvnMRAAUAQbTnzAALBcNzEQADAEHE58wACwXGcxEAEABB1OfMAAsF1nMRAAgAQeTnzAALBd5zEQAEAEH058wACwXicxEADgBBhOjMAAsF8HMRAA4AQZTozAALBf5zEQADAEGk6MwACxUBdBEABwAAAOEAAAAAAAAACHQRAAMAQcTozAALBQt0EQAEAEHU6MwACwUPdBEABABB5OjMAAsFE3QRAA0AQfTozAALBSB0EQADAEGE6cwACwUjdBEACgBBlOnMAAsFLXQRAAQAQaTpzAALFTF0EQAIAAAAfCMAAAAAAAA5dBEACQBBxOnMAAsFQnQRAAUAQdTpzAALBUd0EQADAEHk6cwACwVKdBEAAwBB9OnMAAsFTXQRABAAQYTqzAALBV10EQAEAEGU6swACwVhdBEABgBBpOrMAAsFZ3QRAAwAQbTqzAALBXN0EQACAEHE6swACwV1dBEABABB1OrMAAsVeXQRAA8AAABiIAAAAAAAAIh0EQACAEH06swACwWKdBEABQBBhOvMAAsFj3QRAAYAQZTrzAALBZV0EQAGAEGk68wACwWbdBEAFgBBtOvMAAsVsXQRAAQAAACXAwAAAAAAALV0EQACAEHU68wACwW3dBEABQBB5OvMAAsFvHQRAAoAQfTrzAALFcZ0EQAGAAAAjSoAAAAAAADMdBEABABBlOzMAAsF0HQRAAQAQaTszAALBdR0EQAEAEG07MwACwXYdBEAAgBBxOzMAAsl2nQRAAYAAAAaIAAAAAAAAOB0EQAFAAAA0CEAAAAAAADldBEABwBB9OzMAAsF7HQRAAIAQYTtzAALBe50EQAEAEGU7cwACwXydBEAAQBBpO3MAAsF83QRAAoAQbTtzAALBf10EQAFAEHE7cwACwUCdREAAwBB1O3MAAsFBXURAAgAQeTtzAALBQ11EQAGAEH07cwACwUTdREADQBBhO7MAAsFIHURAAQAQZTuzAALBSR1EQAFAEGk7swACwUpdREACQBBtO7MAAsFMnURAAMAQcTuzAALBTV1EQAOAEHU7swACwVDdREABABB5O7MAAsFR3URAA8AQfTuzAALBVZ1EQANAEGE78wACwVjdREACQBBlO/MAAsFbHURAAMAQaTvzAALJW91EQAHAAAAWiEAAAAAAAB2dREACQAAAH0qAAAAAAAAf3URAAQAQdTvzAALBYN1EQAEAEHk78wACwWHdREACwBB9O/MAAsFknURAAcAQYTwzAALBZl1EQADAEGU8MwACwWcdREAAwBBpPDMAAsVn3URAAcAAAAHAQAAAAAAAKZ1EQADAEHE8MwACwWpdREACQBB1PDMAAsFsnURAAgAQeTwzAALBbp1EQADAEH08MwACwW9dREABABBhPHMAAsFwXURAAsAQZTxzAALBcx1EQAJAEGk8cwACwXVdREACwBBtPHMAAsF4HURAAYAQcTxzAALBeZ1EQAFAEHU8cwACwXrdREAEwBB5PHMAAsF/nURAAYAQfTxzAALBQR2EQAJAEGE8swACwUNdhEACABBlPLMAAsFFXYRAAIAQaTyzAALBRd2EQADAEG08swACwUadhEACABBxPLMAAsFInYRAAQAQdTyzAALBSZ2EQAGAEHk8swACyUsdhEABQAAAAwEAAAAAAAAMXYRAAoAAADbIgAAAAAAADt2EQAFAEGU88wACwVAdhEACQBBpPPMAAsFSXYRAAIAQbTzzAALBUt2EQANAEHE88wACwVYdhEABABB1PPMAAsFXHYRAAUAQeTzzAALBWF2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jBEACgBBhN/NAAsFZowRAAYAQZTfzQALBWyMEQAGAEGk380ACwVyjBEADgBBtN/NAAsFgIwRAAkAQcTfzQALBYmMEQAGAEHU380ACxWPjBEAEQAAAK8qAAA4AwAAoIwRAAMAQfTfzQALBaOMEQAKAEGE4M0ACxWtjBEABgAAALglAAAAAAAAs4wRAAQAQaTgzQALBbeMEQAPAEG04M0ACwXGjBEACgBBxODNAAsF0IwRAAIAQdTgzQALBdKMEQAFAEHk4M0ACwXXjBEABQBB9ODNAAsF3IwRAAcAQYThzQALBeOMEQAFAEGU4c0ACwXojBEABQBBpOHNAAsF7YwRAAwAQbThzQALBfmMEQALAEHE4c0ACyUEjREABgAAAPIqAAAAAAAACo0RAAYAAAB1AQAAAAAAABCNEQADAEH04c0ACwUTjREABABBhOLNAAsFF40RAAQAQZTizQALBRuNEQAFAEGk4s0ACwUgjREABABBtOLNAAsFJI0RAAYAQcTizQALFSqNEQAGAAAAcioAAAAAAAAwjREAAwBB5OLNAAsFM40RAAQAQfTizQALBTeNEQAIAEGE480ACwU/jREADABBlOPNAAsVS40RAAQAAAChJQAAAAAAAE+NEQADAEG0480ACwVSjREABABBxOPNAAsFVo0RAAQAQdTjzQALBVqNEQAQAEHk480ACwVqjREABwBB9OPNAAsFcY0RAAIAQYTkzQALFXONEQAHAAAAlikAAAAAAAB6jREABABBpOTNAAsFfo0RAAMAQbTkzQALBYGNEQAEAEHE5M0ACxWFjREABgAAAIglAAAAAAAAi40RAAcAQeTkzQALBZKNEQAFAEH05M0ACwWXjREABgBBhOXNAAsVnY0RABUAAADsIgAAAAAAALKNEQAJAEGk5c0ACwW7jREABgBBtOXNAAsFwY0RAAUAQcTlzQALFcaNEQAOAAAAJSIAAAAAAADUjREAAwBB5OXNAAsF140RAAQAQfTlzQALFduNEQAFAAAAPgAAANIgAADgjREACABBlObNAAsF6I0RAAUAQaTmzQALBe2NEQACAEG05s0ACxXvjREAEgAAAAwiAAAAAAAAAY4RAAQAQdTmzQALBQWOEQAGAEHk5s0ACwULjhEADgBB9ObNAAsFGY4RAAgAQYTnzQALBSGOEQAIAEGU580ACwUpjhEACwBBpOfNAAsFNI4RAAgAQbTnzQALBTyOEQAQAEHE580ACxVMjhEABAAAACIEAAAAAAAAUI4RAAUAQeTnzQALNVWOEQAEAAAAgSIAAAAAAABZjhEACQAAABcqAAAAAAAAYo4RAA4AAABJIgAAAAAAAHCOEQAMAEGk6M0ACwV8jhEACABBtOjNAAsFhI4RAAYAQcTozQALBYqOEQAIAEHU6M0ACwWSjhEABQBB5OjNAAsVl44RAAcAAAAZKQAAAAAAAJ6OEQAUAEGE6c0ACwWyjhEAAwBBlOnNAAsFtY4RAA8AQaTpzQALBcSOEQAEAEG06c0ACwXIjhEACABBxOnNAAsV0I4RAAUAAABP1QEAAAAAANWOEQAGAEHk6c0ACwXbjhEACgBB9OnNAAsF5Y4RAAUAQYTqzQALFeqOEQAHAAAALiIAAAAAAADxjhEABwBBpOrNAAsV+I4RAA8AAAALIAAAAAAAAAePEQALAEHE6s0ACwUSjxEABQBB1OrNAAsFF48RAAQAQeTqzQALBRuPEQAEAEH06s0ACxUfjxEABQAAAC4EAAAAAAAAJI8RAAcAQZTrzQALBSuPEQADAEGk680ACwUujxEAEQBBtOvNAAsFP48RAAUAQcTrzQALBUSPEQAIAEHU680ACwVMjxEABwBB5OvNAAsFU48RAAUAQfTrzQALBViPEQAEAEGE7M0ACwVcjxEAAwBBlOzNAAsFX48RAAYAQaTszQALBWWPEQAOAEG07M0ACwVzjxEABABBxOzNAAsFd48RAAwAQdTszQALBYOPEQAIAEHk7M0ACxWLjxEAFgAAAAsgAAAAAAAAoY8RABMAQYTtzQALBbSPEQADAEGU7c0ACwW3jxEACQBBpO3NAAsVwI8RAAcAAAA0IAAAAAAAAMePEQAOAEHE7c0ACxXVjxEABgAAAN4AAAAAAAAA248RAAIAQeTtzQALBd2PEQAHAEH07c0ACwXkjxEAAwBBhO7NAAsF548RAAIAQZTuzQALBemPEQAIAEGk7s0ACxXxjxEABAAAAD8iAAAAAAAA9Y8RAAYAQcTuzQALBfuPEQAEAEHU7s0ACwX/jxEACwBB5O7NAAsFCpARAAQAQfTuzQALBQ6QEQAEAEGE780ACwUSkBEACgBBlO/NAAsFHJARAAMAQaTvzQALBR+QEQAEAEG0780ACwUjkBEADQBBxO/NAAsFMJARAAMAQdTvzQALBTOQEQAGAEHk780ACwU5kBEACQBB9O/NAAsFQpARAAYAQYTwzQALFUiQEQAEAAAApSIAAAAAAABMkBEACQBBpPDNAAsFVZARAA4AQbTwzQALFWOQEQAJAAAAFiIAAAAAAABskBEAAgBB1PDNAAsFbpARAAYAQeTwzQALFXSQEQAGAAAAwCEAAAAAAAB6kBEABABBhPHNAAsFfpARAAgAQZTxzQALFYaQEQAEAAAApQAAAAAAAACKkBEABgBBtPHNAAsFkJARAAMAQcTxzQALFZOQEQAFAAAAnNQBAAAAAACYkBEAAwBB5PHNAAslm5ARAAwAAAC6KgAAAAAAAKeQEQAHAAAAnyIAAAAAAACukBEABABBlPLNAAsFspARAAQAQaTyzQALFbaQEQAGAAAARiIAAAAAAAC8kBEACQBBxPLNAAsFxZARAAMAQdTyzQALBciQEQAKAEHk8s0ACwXSkBEABABB9PLNAAsF1pARAAIAQYTzzQALBdiQEQATAEGU880ACxXrkBEABgAAALUAAAAAAAAA8ZARAA4AQbTzzQALBf+QEQADAEHE880ACwUCkREADgBB1PPNAAsVEJERAAYAAAASAQAAAAAAABaREQACAEH0880ACwUYkREABABBhPTNAAsFHJERAAoAQZT0zQALBSaREQADAEGk9M0ACwUpkREAAwBBtPTNAAsVLJERAAcAAAA6IAAAAAAAADOREQACAEHU9M0ACwU1kREAAwBB5PTNAAsFOJERAAwAQfT0zQALBUSREQANAEGE9c0ACxVRkREAFQAAAOIiAAAAAAAAZpERAAgAQaT1zQALFW6REQAIAAAAkCkAAAAAAAB2kREADwBBxPXNAAsFhZERAAIAQdT1zQALBYeREQADAEHk9c0ACwWKkREAAgBB9PXNAAsFjJERAAMAQYT2zQALBY+REQAIAEGU9s0ACwWXkREADgBBpPbNAAsFpZERAAMAQbT2zQALBaiREQAJAEHE9s0ACwWxkREABQBB1PbNAAsFtpERAAYAQeT2zQALBbyREQAMAEH09s0ACwXIkREABABBhPfNAAsFzJERAAMAQZT3zQALBc+REQAHAEGk980ACwXWkREACQBBtPfNAAsF35ERAAUAQcT3zQALBeSREQACAEHU980ACyXmkREABAAAAF0qAAAAAAAA6pERAAUAAAB5IgAAAAAAAO+REQAPAEGE+M0ACwX+kREABQBBlPjNAAsFA5IRAAYAQaT4zQALBQmSEQAHAEG0+M0ACwUQkhEABABBxPjNAAsFFJIRABUAQdT4zQALBSmSEQADAEHk+M0ACwUskhEADgBB9PjNAAsFOpIRAAkAQYT5zQALFUOSEQAFAAAA5QAAAAAAAABIkhEADgBBpPnNAAsFVpIRAAQAQbT5zQALFVqSEQAFAAAAQyoAAAAAAABfkhEAAwBB1PnNAAsFYpIRAAsAQeT5zQALBW2SEQALAEH0+c0ACwV4khEABgBBhPrNAAsFfpIRAAsAQZT6zQALBYmSEQAEAEGk+s0ACwWNkhEACwBBtPrNAAsFmJIRAAgAQcT6zQALBaCSEQADAEHU+s0ACwWjkhEABQBB5PrNAAsFqJIRAAYAQfT6zQALBa6SEQARAEGE+80ACwW/khEABQBBlPvNAAsFxJIRAAgAQaT7zQALBcySEQACAEG0+80ACwXOkhEACgBBxPvNAAsF2JIRAAMAQdT7zQALFduSEQAHAAAArCIAAAAAAADikhEAAwBB9PvNAAsF5ZIRAAMAQYT8zQALFeiSEQAFAAAAzdQBAAAAAADtkhEADwBBpPzNAAsV/JIRAAoAAADGKgAAAAAAAAaTEQADAEHE/M0ACwUJkxEAAwBB1PzNAAsFDJMRAAIAQeT8zQALBQ6TEQAEAEH0/M0ACwUSkxEACwBBhP3NAAsFHZMRAAQAQZT9zQALBSGTEQAEAEGk/c0ACwUlkxEABQBBtP3NAAsVKpMRAAcAAADtAAAAAAAAADGTEQACAEHU/c0ACwUzkxEAAwBB5P3NAAsFNpMRAAQAQfT9zQALBTqTEQANAEGE/s0ACwVHkxEAAwBBlP7NAAsFSpMRAAUAQaT+zQALBU+TEQADAEG0/s0ACwVSkxEABQBBxP7NAAsFV5MRAAcAQdT+zQALBV6TEQANAEHk/s0ACxVrkxEABgAAANIAAAAAAAAAcZMRAA0AQYT/zQALFX6TEQAFAAAA5yoAAAAAAACDkxEACQBBpP/NAAsFjJMRAA8AQbT/zQALFZuTEQAHAAAAfAAAAAAAAACikxEABQBB1P/NAAsFp5MRAAIAQeT/zQALFamTEQAGAAAA6iIAAAAAAACvkxEABABBhIDOAAsFs5MRAAUAQZSAzgALBbiTEQAMAEGkgM4ACwXEkxEABwBBtIDOAAsFy5MRAAIAQcSAzgALBc2TEQAMAEHUgM4ACwXZkxEABwBB5IDOAAsF4JMRAAIAQfSAzgALBeKTEQADAEGEgc4ACwXlkxEACgBBlIHOAAsF75MRAA0AQaSBzgALFfyTEQAGAAAA/SEAAAAAAAAClBEABwBBxIHOAAsVCZQRAAkAAACHIgAAAAAAABKUEQAKAEHkgc4ACwUclBEADgBB9IHOAAsFKpQRAAoAQYSCzgALFTSUEQAIAAAAbSoAAAAAAAA8lBEAAgBBpILOAAsFPpQRAAUAQbSCzgALBUOUEQAEAEHEgs4ACxVHlBEABQAAAAoEAAAAAAAATJQRAAIAQeSCzgALBU6UEQAEAEH0gs4ACwVSlBEABABBhIPOAAsVVpQRAAUAAADFAAAAAAAAAFuUEQADAEGkg84ACwVelBEAAgBBtIPOAAsVYJQRAAUAAABK1QEAAAAAAGWUEQAEAEHUg84ACyVplBEABgAAAPglAAAAAAAAb5QRAAYAAAD+AAAAAAAAAHWUEQAFAEGEhM4ACwV6lBEABQBBlITOAAsFf5QRAAkAQaSEzgALBYiUEQANAEG0hM4ACxWVlBEABgAAADwqAAAAAAAAm5QRAAcAQdSEzgALFaKUEQANAAAAvyUAAAAAAACvlBEABgBB9ITOAAsFtZQRAAYAQYSFzgALFbuUEQAFAAAAtNQBAAAAAADAlBEAEwBBpIXOAAsV05QRAAcAAACXKgAAAAAAANqUEQAIAEHEhc4ACwXilBEABQBB1IXOAAsF55QRAAMAQeSFzgALFeqUEQAFAAAAUgQAAAAAAADvlBEACgBBhIbOAAsF+ZQRAA4AQZSGzgALFQeVEQAFAAAAmSIAAAAAAAAMlREABQBBtIbOAAsFEZURAAIAQcSGzgALBROVEQAJAEHUhs4ACwUclREAAwBB5IbOAAsFH5URAAQAQfSGzgALBSOVEQACAEGEh84ACwUllREABwBBlIfOAAsFLJURAAQAQaSHzgALFTCVEQAIAAAAdyIAAAAAAAA4lREACABBxIfOAAsFQJURAAUAQdSHzgALFUWVEQAKAAAAtwAAAAAAAABPlREADgBB9IfOAAsFXZURAAYAQYSIzgALFWOVEQAFAAAAAiIAAAAAAABolREAAwBBpIjOAAsFa5URAAMAQbSIzgALFW6VEQAHAAAAwgMAAAAAAAB1lREACQBB1IjOAAslfpURABgAAACiKgAAOAMAAJaVEQAHAAAAQgEAAAAAAACdlREAAwBBhInOAAsFoJURAA8AQZSJzgALFa+VEQAGAAAAxQAAAAAAAAC1lREABABBtInOAAsFuZURAAQAQcSJzgALBb2VEQAGAEHUic4ACwXDlREABABB5InOAAsFx5URAAIAQfSJzgALBcmVEQAEAEGEis4ACwXNlREAAwBBlIrOAAsF0JURAAgAQaSKzgALBdiVEQAEAEG0is4ACzXclREABQAAALoAAAAAAAAA4ZURABAAAACPIgAAOAMAAPGVEQATAAAA+icAAAAAAAAElhEAAwBB9IrOAAsFB5YRAAYAQYSLzgALBQ2WEQACAEGUi84ACwUPlhEACQBBpIvOAAsFGJYRAAIAQbSLzgALFRqWEQAIAAAAICkAAAAAAAAilhEAAwBB1IvOAAsVJZYRAAMAAADZIgAAAAAAACiWEQADAEH0i84ACxUrlhEABwAAAF8BAAAAAAAAMpYRAAQAQZSMzgALFTaWEQAFAAAAadUBAAAAAAA7lhEACwBBtIzOAAsVRpYRAAcAAABmAQAAAAAAAE2WEQACAEHUjM4ACyVPlhEABgAAANcAAAAAAAAAVZYRAAUAAAA7AAAAAAAAAFqWEQANAEGEjc4ACxVnlhEABgAAADUhAAAAAAAAbZYRAAUAQaSNzgALBXKWEQADAEG0jc4ACwV1lhEABwBBxI3OAAsFfJYRAAgAQdSNzgALBYSWEQAFAEHkjc4ACwWJlhEADwBB9I3OAAsVmJYRABUAAAB+KgAAOAMAAK2WEQADAEGUjs4ACwWwlhEABABBpI7OAAsFtJYRAAUAQbSOzgALBbmWEQADAEHEjs4ACxW8lhEABwAAAE0iAAAAAAAAw5YRAAQAQeSOzgALBceWEQAMAEH0js4ACwXTlhEAAwBBhI/OAAsV1pYRAAcAAAAwKgAAAAAAAN2WEQAEAEGkj84ACwXhlhEABABBtI/OAAsV5ZYRAAYAAADYIQAAAAAAAOuWEQAOAEHUj84ACwX5lhEAAwBB5I/OAAsl/JYRAAQAAAAu1QEAAAAAAACXEQAJAAAAHCEAAAAAAAAJlxEABQBBlJDOAAsFDpcRAAMAQaSQzgALBRGXEQAFAEG0kM4ACwUWlxEAEABBxJDOAAsFJpcRAAMAQdSQzgALFSmXEQAHAAAAKgQAAAAAAAAwlxEAEABB9JDOAAsVQJcRAAYAAADcAgAAAAAAAEaXEQADAEGUkc4ACxVJlxEADAAAAGoiAAA4AwAAVZcRAAgAQbSRzgALFV2XEQAEAAAAbiIAAAAAAABhlxEABQBB1JHOAAsFZpcRAAIAQeSRzgALBWiXEQANAEH0kc4ACwV1lxEABQBBhJLOAAsFepcRAAYAQZSSzgALBYCXEQAIAEGkks4ACwWIlxEACABBtJLOAAslkJcRAAYAAABCIgAAAAAAAJaXEQAIAAAApikAAAAAAACelxEABQBB5JLOAAsFo5cRAAUAQfSSzgALBaiXEQAEAEGEk84ACwWslxEABQBBlJPOAAsVsZcRAAQAAABKAQAAAAAAALWXEQALAEG0k84ACwXAlxEABABBxJPOAAsFxJcRAAYAQdSTzgALBcqXEQAEAEHkk84ACwXOlxEABQBB9JPOAAsF05cRAAgAQYSUzgALBduXEQAEAEGUlM4ACwXflxEABQBBpJTOAAsV5JcRAAYAAAD/IQAAAAAAAOqXEQAKAEHElM4ACwX0lxEABgBB1JTOAAsV+pcRAAUAAAB4IgAAAAAAAP+XEQAMAEH0lM4ACwULmBEAAwBBhJXOAAsVDpgRABIAAABZKQAAAAAAACCYEQADAEGklc4ACwUjmBEACABBtJXOAAsVK5gRAAYAAAAWIgAAAAAAADGYEQADAEHUlc4ACwU0mBEADQBB5JXOAAsFQZgRAA4AQfSVzgALBU+YEQAIAEGEls4ACxVXmBEABQAAANIDAAAAAAAAXJgRAAYAQaSWzgALFWKYEQAGAAAAyyoAAAAAAABomBEACgBBxJbOAAslcpgRAAcAAAC8AAAAAAAAAHmYEQAEAAAA1CEAAAAAAAB9mBEAAgBB9JbOAAslf5gRABUAAAAmIgAAAAAAAJSYEQAGAAAACCMAAAAAAACamBEAAwBBpJfOAAsFnZgRAAYAQbSXzgALBaOYEQAMAEHEl84ACwWvmBEADgBB1JfOAAsFvZgRABMAQeSXzgALBdCYEQADAEH0l84ACwXTmBEABABBhJjOAAsF15gRAAUAQZSYzgALBdyYEQAKAEGkmM4ACwXmmBEADABBtJjOAAsF8pgRAAgAQcSYzgALBfqYEQAFAEHUmM4ACwX/mBEABABB5JjOAAsFA5kRAAIAQfSYzgALBQWZEQAFAEGEmc4ACwUKmREACwBBlJnOAAsFFZkRAAMAQaSZzgALBRiZEQAEAEG0mc4ACwUcmREABQBBxJnOAAsFIZkRAAUAQdSZzgALBSaZEQAEAEHkmc4ACwUqmREABwBB9JnOAAsVMZkRAAMAAAALIgAAAAAAADSZEQADAEGUms4ACwU3mREADABBpJrOAAsFQ5kRAAQAQbSazgALFUeZEQAGAAAABSIAAAAAAABNmREABQBB1JrOAAsVUpkRAAcAAAChJQAAAAAAAFmZEQAFAEH0ms4ACwVemREACgBBhJvOAAsFaJkRAAwAQZSbzgALBXSZEQAFAEGkm84ACwV5mREABgBBtJvOAAsVf5kRAAgAAADjIgAAAAAAAIeZEQADAEHUm84ACwWKmREACQBB5JvOAAsFk5kRAAMAQfSbzgALBZaZEQAEAEGEnM4ACwWamREABABBlJzOAAsFnpkRAAcAQaSczgALFaWZEQAHAAAAmCoAAAAAAACsmREADQBBxJzOAAsFuZkRAAcAQdSczgALBcCZEQAJAEHknM4ACxXJmREABwAAACIjAAAAAAAA0JkRAAUAQYSdzgALRdWZEQAGAAAApAAAAAAAAADbmREABwAAAIMiAAAAAAAA4pkRAAQAAAAP1QEAAAAAAOaZEQAEAAAAZyIAADgDAADqmREABwBB1J3OAAsF8ZkRAA0AQeSdzgALBf6ZEQAPAEH0nc4ACwUNmhEACQBBhJ7OAAsFFpoRAAcAQZSezgALFR2aEQAHAAAAuyIAAAAAAAAkmhEABABBtJ7OAAsFKJoRAA4AQcSezgALBTaaEQAGAEHUns4ACwU8mhEABgBB5J7OAAsFQpoRAA4AQfSezgALBVCaEQACAEGEn84ACxVSmhEADQAAAKchAAAAAAAAX5oRAAMAQaSfzgALFWKaEQAOAAAAUikAAAAAAABwmhEABQBBxJ/OAAsFdZoRAAsAQdSfzgALNYCaEQAEAAAAgCIAAAAAAACEmhEACAAAANcqAAAAAAAAjJoRAAYAAAA1AQAAAAAAAJKaEQAFAEGUoM4ACwWXmhEABQBBpKDOAAsFnJoRAAYAQbSgzgALBaKaEQAIAEHEoM4ACwWqmhEABQBB1KDOAAsVr5oRAAUAAAC1AwAAAAAAALSaEQAEAEH0oM4ACwW4mhEABgBBhKHOAAsFvpoRAAMAQZShzgALBcGaEQAGAEGkoc4ACwXHmhEAAwBBtKHOAAsFypoRAAQAQcShzgALBc6aEQAIAEHUoc4ACwXWmhEAAwBB5KHOAAsF2ZoRAAUAQfShzgALBd6aEQAEAEGEos4ACxXimhEABAAAAAjVAQAAAAAA5poRAAoAQaSizgALBfCaEQAGAEG0os4ACwX2mhEABgBBxKLOAAsF/JoRAAQAQdWizgALBJsRAAUAQeSizgALBQWbEQAEAEH0os4ACxUJmxEAEwAAAH0iAAAAAAAAHJsRAAMAQZSjzgALBR+bEQAEAEGko84ACwUjmxEAAgBBtKPOAAsVJZsRAAcAAAC5IgAAAAAAACybEQARAEHUo84ACwU9mxEADABB5KPOAAsFSZsRAAMAQfSjzgALBUybEQADAEGEpM4ACwVPmxEAAwBBlKTOAAsFUpsRAA4AQaSkzgALFWCbEQAHAAAAiyIAAAD+AABnmxEABgBBxKTOAAsFbZsRAAMAQdSkzgALBXCbEQAHAEHkpM4ACwV3mxEABwBB9KTOAAsFfpsRAAYAQYSlzgALBYSbEQADAEGUpc4ACwWHmxEABABBpKXOAAsFi5sRAAoAQbSlzgALBZWbEQAGAEHEpc4ACwWbmxEADABB1KXOAAsVp5sRAAUAAABBIgAAAAAAAKybEQALAEH0pc4ACwW3mxEACgBBhKbOAAsFwZsRAAMAQZSmzgALFcSbEQAFAAAAiSoAAAAAAADJmxEABgBBtKbOAAsFz5sRAAMAQcSmzgALBdKbEQAFAEHUps4ACxXXmxEABgAAAIEiAAAAAAAA3ZsRAAQAQfSmzgALBeGbEQAFAEGEp84ACwXmmxEABQBBlKfOAAsF65sRAA4AQaSnzgALBfmbEQAEAEG0p84ACwX9mxEAEwBBxKfOAAsFEJwRAAwAQdSnzgALBRycEQAEAEHkp84ACwUgnBEACABB9KfOAAsFKJwRAAUAQYSozgALJS2cEQAKAAAAzSIAAAAAAAA3nBEABwAAANUDAAAAAAAAPpwRAAoAQbSozgALFUicEQAFAAAAZSkAAAAAAABNnBEAAwBB1KjOAAsFUJwRAAQAQeSozgALBVScEQAFAEH0qM4ACwVZnBEACwBBhKnOAAsFZJwRAAUAQZSpzgALBWmcEQAGAEGkqc4ACwVvnBEABgBBtKnOAAsFdZwRAAoAQcSpzgALBX+cEQAFAEHUqc4ACxWEnBEABAAAALAAAAAAAAAAiJwRAA4AQfSpzgALBZacEQAEAEGEqs4ACwWanBEAAQBBlKrOAAsFm5wRAAYAQaSqzgALFaGcEQAHAAAAYiIAAAAAAAConBEABgBBxKrOAAsVrpwRAAUAAAApKQAAAAAAALOcEQAQAEHkqs4ACwXDnBEAAwBB9KrOAAsFxpwRAAMAQYSrzgALJcmcEQARAAAA+yUAAAAAAADanBEABwAAAKciAAAAAAAA4ZwRAAQAQbSrzgALBeWcEQANAEHEq84ACxXynBEADAAAAJQiAAAAAAAA/pwRAAMAQeSrzgALBQGdEQAMAEH0q84ACwUNnREAAwBBhKzOAAsFEJ0RAAQAQZSszgALBRSdEQADAEGkrM4ACwUXnREABwBBtKzOAAsFHp0RAAMAQcSszgALBSGdEQAFAEHUrM4ACxUmnREABgAAAHkqAAAAAAAALJ0RAAYAQfSszgALBTKdEQADAEGErc4ACwU1nREACQBBlK3OAAsFPp0RAAcAQaStzgALBUWdEQAGAEG0rc4AC0VLnREABgAAALMlAAAAAAAAUZ0RAAMAAAClAAAAAAAAAFSdEQAFAAAAcyoAAAAAAABZnREABQAAAEImAAAAAAAAXp0RAAUAQYSuzgALBWOdEQAGAEGUrs4ACwVpnREABABBpK7OAAsFbZ0RAAIAQbSuzgALBW+dEQALAEHErs4ACwV6nREABwBB1K7OAAsFgZ0RAAQAQeSuzgALFYWdEQAKAAAAJCIAAAAAAACPnREABgBBhK/OAAsFlZ0RAAMAQZSvzgALBZidEQAEAEGkr84ACwWcnREABABBtK/OAAsFoJ0RAAkAQcSvzgALBamdEQAIAEHUr84ACwWxnREABABB5K/OAAsVtZ0RAA0AAACyIgAAAAAAAMKdEQAGAEGEsM4ACwXInREAAwBBlLDOAAsFy50RAAMAQaSwzgALBc6dEQARAEG0sM4ACwXfnREACgBBxLDOAAsF6Z0RAAUAQdSwzgALJe6dEQAJAAAASykAAAAAAAD3nREABQAAAMrUAQAAAAAA/J0RAAUAQYSxzgALBQGeEQAIAEGUsc4ACxUJnhEAEAAAAJghAAAAAAAAGZ4RAAIAQbSxzgALFRueEQALAAAAyyoAAAAAAAAmnhEAAgBB1LHOAAsFKJ4RAAUAQeSxzgALBS2eEQAEAEH0sc4ACwUxnhEABABBhLLOAAsFNZ4RAAQAQZSyzgALBTmeEQAIAEGkss4ACwVBnhEAAgBBtLLOAAsFQ54RAAYAQcSyzgALBUmeEQADAEHUss4ACxVMnhEAEgAAAGsiAAA4AwAAXp4RAAUAQfSyzgALBWOeEQAGAEGEs84ACwVpnhEACABBlLPOAAsFcZ4RAAEAQaSzzgALBXKeEQADAEG0s84ACwV1nhEAAwBBxLPOAAsFeJ4RAAUAQdSzzgALBX2eEQAKAEHks84ACwWHnhEADgBB9LPOAAsFlZ4RAA8AQYS0zgALBaSeEQAIAEGUtM4ACwWsnhEACABBpLTOAAsFtJ4RABAAQbS0zgALBcSeEQABAEHEtM4ACwXFnhEACgBB1LTOAAsVz54RAAYAAABbJQAAAAAAANWeEQAGAEH0tM4ACwXbnhEACgBBhLXOAAsF5Z4RAAgAQZS1zgALJe2eEQAEAAAAZiIAADgDAADxnhEABAAAACMEAAAAAAAA9Z4RAAIAQcS1zgALFfeeEQAJAAAAASoAAAAAAAAAnxEABgBB5LXOAAsFBp8RAAUAQfS1zgALBQufEQAFAEGEts4ACwUQnxEABQBBlLbOAAsFFZ8RAAgAQaS2zgALBR2fEQAJAEG0ts4ACwUmnxEABwBBxLbOAAsVLZ8RAAcAAAACKQAAAAAAADSfEQALAEHkts4ACxU/nxEADwAAAMchAAAAAAAATp8RAA4AQYS3zgALBVyfEQAHAEGUt84ACwVjnxEABABBpLfOAAsFZ58RAAQAQbS3zgALBWufEQAFAEHEt84ACxVwnxEAEgAAAMwhAAAAAAAAgp8RAAgAQeS3zgALBYqfEQADAEH0t84ACwWNnxEACwBBhLjOAAsFmJ8RAAUAQZS4zgALBZ2fEQAGAEGkuM4ACwWjnxEABABBtLjOAAsFp58RAAIAQcS4zgALBamfEQAGAEHUuM4ACxWvnxEABwAAAFEBAAAAAAAAtp8RAAQAQfS4zgALBbqfEQAEAEGEuc4ACwW+nxEAAgBBlLnOAAsFwJ8RAA0AQaS5zgALBc2fEQACAEG0uc4ACwXPnxEABQBBxLnOAAsF1J8RAAcAQdS5zgALBdufEQALAEHkuc4ACwXmnxEAAwBB9LnOAAsl6Z8RAAsAAACWKgAAAAAAAPSfEQAGAAAAziIAAAAAAAD6nxEADABBpLrOAAsVBqARAAUAAAA51QEAAAAAAAugEQALAEHEus4ACwUWoBEAAgBB1LrOAAsFGKARAAQAQeS6zgALFRygEQAGAAAA7ioAAAAAAAAioBEACABBhLvOAAsFKqARAAIAQZS7zgALBSygEQALAEGku84ACwU3oBEACABBtLvOAAsFP6ARAAIAQcS7zgALBUGgEQAFAEHUu84ACwVGoBEABwBB5LvOAAsVTaARAAYAAADkIQAAAAAAAFOgEQADAEGEvM4ACwVWoBEADQBBlLzOAAsFY6ARAAEAQaS8zgALRWSgEQAFAAAA1wAAAAAAAABpoBEABQAAAJIBAAAAAAAAbqARAAUAAABFBAAAAAAAAHOgEQAFAAAA+iIAAAAAAAB4oBEABABB9LzOAAsVfKARAAYAAADNAAAAAAAAAIKgEQANAEGUvc4ACwWPoBEAAwBBpL3OAAsFkqARABMAQbS9zgALBaWgEQAFAEHEvc4ACwWqoBEACQBB1L3OAAsFs6ARAAIAQeS9zgALBbWgEQAEAEH0vc4ACwW5oBEABgBBhL7OAAsFv6ARAAYAQZS+zgALBcWgEQAFAEGkvs4ACwXKoBEABQBBtL7OAAsFz6ARAAoAQcS+zgALFdmgEQAHAAAAJwEAAAAAAADgoBEABQBB5L7OAAsF5aARAA0AQfS+zgALBfKgEQADAEGEv84ACwX1oBEACgBBlL/OAAsF/6ARAA4AQaS/zgALBQ2hEQAFAEG0v84ACwUSoREAAwBBxL/OAAsFFaERAAUAQdS/zgALJRqhEQALAAAA3yMAAAAAAAAloREABQAAAFYiAAAAAAAAKqERAAgAQYTAzgALBTKhEQADAEGUwM4ACwU1oREABgBBpMDOAAsFO6ERAAQAQbTAzgALBT+hEQAHAEHEwM4ACwVGoREABABB1MDOAAsVSqERAAkAAAAVKgAAAAAAAFOhEQADAEH0wM4ACwVWoREAAwBBhMHOAAsFWaERAAYAQZTBzgALBV+hEQALAEGkwc4ACwVqoREAAwBBtMHOAAsFbaERAAQAQcTBzgALBXGhEQAHAEHUwc4ACwV4oREAAgBB5MHOAAsFeqERAAQAQfTBzgALFX6hEQADAAAAYCIAAAAAAACBoREABABBlMLOAAsFhaERAAUAQaTCzgALBYqhEQANAEG0ws4ACwWXoREABwBBxMLOAAsFnqERAAMAQdTCzgALBaGhEQACAEHkws4ACwWjoREABABB9MLOAAsFp6ERAAMAQYTDzgALBaqhEQALAEGUw84ACwW1oREABgBBpMPOAAsFu6ERAAcAQbTDzgALBcKhEQAEAEHEw84ACwXGoREABABB1MPOAAsFyqERAAcAQeTDzgALBdGhEQAFAEH0w84ACwXWoREADQBBhMTOAAsF46ERAAMAQZTEzgALFeahEQAEAAAAcSIAAAAAAADqoREADgBBtMTOAAsF+KERAAQAQcTEzgALBfyhEQAFAEHUxM4ACwUBohEABQBB5MTOAAtFBqIRAAUAAAAxIQAAAAAAAAuiEQAFAAAA7gAAAAAAAAAQohEABQAAAJIhAAAAAAAAFaIRAAYAAAC8IQAAAAAAABuiEQAGAEG0xc4ACxUhohEABQAAAFwiAAAAAAAAJqIRAAsAQdTFzgALBTGiEQAGAEHkxc4ACwU3ohEABQBB9MXOAAsFPKIRAAMAQYTGzgALBT+iEQAFAEGUxs4ACwVEohEAAwBBpMbOAAsFR6IRAAYAQbTGzgALBU2iEQAMAEHExs4ACwVZohEABABB1MbOAAs1XaIRAAcAAADAAAAAAAAAAGSiEQAGAAAATQEAAAAAAABqohEABwAAANMqAAAAAAAAcaIRAAcAQZTHzgALFXiiEQAGAAAA7CcAAAAAAAB+ohEABQBBtMfOAAsFg6IRAAQAQcTHzgALBYeiEQAGAEHUx84ACxWNohEABQAAAMQiAAAAAAAAkqIRAAsAQfTHzgALBZ2iEQAGAEGEyM4ACwWjohEAAwBBlMjOAAsFpqIRAAYAQaTIzgALBayiEQAFAEG0yM4ACwWxohEACQBBxMjOAAsFuqIRAAYAQdTIzgALBcCiEQAIAEHkyM4ACwXIohEABQBB9MjOAAsVzaIRAA0AAAC1IwAAAAAAANqiEQARAEGUyc4ACwXrohEADABBpMnOAAsV96IRAAQAAAAx1QEAAAAAAPuiEQAFAEHFyc4ACwSjEQANAEHUyc4ACwUNoxEACQBB5MnOAAsFFqMRAAQAQfTJzgALBRqjEQAEAEGEys4ACwUeoxEABABBlMrOAAsFIqMRAA8AQaTKzgALBTGjEQACAEG0ys4ACwUzoxEABwBBxMrOAAsFOqMRAAUAQdTKzgALBT+jEQALAEHkys4ACyVKoxEADQAAAOspAAAAAAAAV6MRAAYAAACQIQAAAAAAAF2jEQAEAEGUy84ACwVhoxEADgBBpMvOAAsFb6MRAAwAQbTLzgALBXujEQAJAEHEy84ACyWEoxEABgAAAHIBAAAAAAAAiqMRAAkAAACqKQAAAAAAAJOjEQADAEH0y84ACwWWoxEACABBhMzOAAsVnqMRAAQAAACCIgAAAAAAAKKjEQACAEGkzM4ACwWkoxEAEABBtMzOAAsFtKMRAAUAQcTMzgALBbmjEQAFAEHUzM4ACwW+oxEABgBB5MzOAAsFxKMRAAcAQfTMzgALJcujEQAHAAAAzAAAAAAAAADSoxEABQAAAOsqAAAAAAAA16MRAAMAQaTNzgALBdqjEQAGAEG0zc4ACwXgoxEABgBBxM3OAAsF5qMRAAoAQdTNzgALBfCjEQADAEHkzc4ACwXzoxEABQBB9M3OAAsF+KMRAAMAQYTOzgALBfujEQAFAEGVzs4ACwSkEQAEAEGkzs4ACwUEpBEABwBBtM7OAAsFC6QRAAYAQcTOzgALFRGkEQAFAAAACyEAAAAAAAAWpBEABABB5M7OAAsFGqQRAAQAQfTOzgALFR6kEQAHAAAAGykAAAAAAAAlpBEACwBBlM/OAAsFMKQRAAMAQaTPzgALBTOkEQALAEG0z84ACyU+pBEABAAAADIEAAAAAAAAQqQRAAcAAAClIgAAAAAAAEmkEQAOAEHkz84ACwVXpBEABABB9M/OAAsVW6QRAAUAAAArAAAAAAAAAGCkEQAFAEGU0M4ACwVlpBEABgBBpNDOAAsFa6QRABAAQbTQzgALBXukEQAGAEHE0M4ACxWBpBEABQAAAGDVAQAAAAAAhqQRAAQAQeTQzgALFYqkEQAEAAAAIgAAAAAAAACOpBEABgBBhNHOAAsVlKQRAAQAAAAnIgAAAAAAAJikEQAMAEGk0c4ACwWkpBEABwBBtNHOAAsFq6QRAAQAQcTRzgALBa+kEQAEAEHU0c4ACxWzpBEACwAAAPwnAAAAAAAAvqQRAAUAQfTRzgALFcOkEQAJAAAAECkAAAAAAADMpBEABwBBlNLOAAsF06QRAAkAQaTSzgALBdykEQACAEG00s4ACwXepBEAAgBBxNLOAAsF4KQRAAQAQdTSzgALFeSkEQAFAAAAWgQAAAAAAADppBEAAwBB9NLOAAsV7KQRAAkAAADOIgAAAAAAAPWkEQAIAEGU084ACwX9pBEAFABBpNPOAAsFEaURAAYAQbTTzgALBRelEQADAEHE084ACwUapREABgBB1NPOAAsFIKURAAMAQeTTzgALBSOlEQAUAEH0084ACwU3pREACgBBhNTOAAsFQaURAAYAQZTUzgALBUelEQAFAEGk1M4ACwVMpREABQBBtNTOAAs1UaURAAUAAACnKgAAAAAAAFalEQAPAAAAqiEAAAAAAABlpREABQAAAHsiAAAAAAAAaqURAAcAQfTUzgALBXGlEQADAEGE1c4ACwV0pREABgBBlNXOAAsFeqURAAgAQaTVzgALBYKlEQAEAEG01c4ACwWGpREADgBBxNXOAAsVlKURAAQAAAAYBAAAAAAAAJilEQAFAEHk1c4ACwWdpREACQBB9NXOAAsFpqURABIAQYTWzgALFbilEQAFAAAAewEAAAAAAAC9pREAAwBBpNbOAAsFwKURAAcAQbTWzgALBcelEQAEAEHE1s4ACwXLpREABQBB1NbOAAsV0KURAAcAAAA0IgAAAAAAANelEQAGAEH01s4ACwXdpREABwBBhNfOAAsF5KURAAcAQZTXzgALNeulEQAGAAAA9QAAAAAAAADxpREADwAAAKMhAAAAAAAAAKYRAA4AAABmIgAAAAAAAA6mEQAGAEHU184ACwUUphEAAwBB5NfOAAsFF6YRAAYAQfTXzgALBR2mEQALAEGE2M4ACwUophEAAwBBlNjOAAsFK6YRAAQAQaTYzgALBS+mEQACAEG02M4ACwUxphEAAwBBxNjOAAsFNKYRAAUAQdTYzgALBTmmEQACAEHk2M4ACwU7phEABgBB9NjOAAsVQaYRAAUAAADFIgAAAAAAAEamEQAFAEGU2c4ACwVLphEABwBBpNnOAAsVUqYRAAQAAAAgIgAAAAAAAFamEQAFAEHE2c4ACwVbphEACABB1NnOAAsVY6YRAAcAAAAhIgAAAAAAAGqmEQAEAEH02c4ACwVuphEACABBhNrOAAsFdqYRAAQAQZTazgALBXqmEQAEAEGk2s4ACyV+phEACgAAAE8iAAAAAAAAiKYRAAUAAABDIgAAAAAAAI2mEQAPAEHU2s4ACwWcphEABwBB5NrOAAsFo6YRAAYAQfTazgALBammEQAQAEGE284ACxW5phEABwAAAHEBAAAAAAAAwKYRAAsAQaTbzgALBcumEQAKAEG0284ACwXVphEADgBBxNvOAAsF46YRAAQAQdTbzgALBeemEQAIAEHk284ACwXvphEACABB9NvOAAsF96YRAA4AQYTczgALBQWnEQADAEGU3M4ACwUIpxEAAgBBpNzOAAsFCqcRAAUAQbTczgALBQ+nEQAEAEHE3M4ACwUTpxEABQBB1NzOAAsFGKcRAAcAQeTczgALBR+nEQAFAEH03M4ACwUkpxEABwBBhN3OAAsVK6cRAAgAAAC/KgAAAAAAADOnEQAQAEGk3c4ACxVDpxEACwAAAPUDAAAAAAAATqcRAAMAQcTdzgALFVGnEQAIAAAAIioAAAAAAABZpxEADABB5N3OAAsFZacRAAUAQfTdzgALBWqnEQAEAEGE3s4ACwVupxEADABBlN7OAAsVeqcRAAkAAABJKgAAAAAAAIOnEQAGAEG03s4ACwWJpxEAAwBBxN7OAAsFjKcRAAUAQdTezgALBZGnEQAJAEHk3s4ACwWapxEABQBB9N7OAAsVn6cRAAoAAAAJIAAAAAAAAKmnEQAEAEGU384ACwWtpxEACQBBpN/OAAsFtqcRAAUAQbTfzgALBbunEQAEAEHE384ACwW/pxEACQBB1N/OAAsVyKcRAAcAAADxAwAAAAAAAM+nEQAFAEH0384ACwXUpxEAAwBBhODOAAsF16cRAAUAQZTgzgALBdynEQACAEGk4M4ACxXepxEABAAAAMEpAAAAAAAA4qcRAAMAQcTgzgALBeWnEQAIAEHU4M4ACwXtpxEADABB5ODOAAsF+acRAAsAQfTgzgALBQSoEQADAEGE4c4ACwUHqBEABABBlOHOAAsFC6gRAAMAQaThzgALBQ6oEQADAEG04c4ACwURqBEABgBBxOHOAAsFF6gRAAMAQdThzgALBRqoEQADAEHk4c4ACwUdqBEABgBB9OHOAAsFI6gRAAQAQYTizgALFSeoEQASAAAAwiUAAAAAAAA5qBEAAwBBpOLOAAsVPKgRAA4AAACrIQAAAAAAAEqoEQAJAEHE4s4ACwVTqBEACgBB1OLOAAsFXagRAAUAQeTizgALBWKoEQACAEH04s4ACwVkqBEABQBBhOPOAAsFaagRAAcAQZTjzgALBXCoEQAMAEGk484ACwV8qBEABQBBtOPOAAsFgagRAAMAQcTjzgALFYSoEQAHAAAACiAAAAAAAACLqBEABQBB5OPOAAsFkKgRAA4AQfTjzgALBZ6oEQADAEGE5M4ACwWhqBEABQBBlOTOAAsFpqgRAAgAQaTkzgALNa6oEQAHAAAADCoAAAAAAAC1qBEABAAAANkiAAAAAAAAuagRAAcAAABWAQAAAAAAAMCoEQAFAEHk5M4ACwXFqBEAAwBB9OTOAAsFyKgRAAMAQYTlzgALBcuoEQAFAEGU5c4ACwXQqBEABABBpOXOAAsF1KgRAAMAQbTlzgALBdeoEQAGAEHE5c4ACxXdqBEACAAAAMEqAAAAAAAA5agRAAMAQeTlzgALBeioEQACAEH05c4ACwXqqBEAAwBBhObOAAsV7agRAAcAAADjAAAAAAAAAPSoEQAGAEGk5s4ACxX6qBEABgAAAJIlAAAAAAAAAKkRAAIAQcTmzgALBQKpEQAOAEHU5s4ACwUQqREADABB5ObOAAsFHKkRAAQAQfTmzgALBSCpEQALAEGE584ACwUrqREAAwBBlOfOAAsFLqkRAA0AQaTnzgALBTupEQAEAEG0584ACyU/qREAEAAAAJchAAAAAAAAT6kRAAgAAAA1IQAAAAAAAFepEQAFAEHk584ACwVcqREABQBB9OfOAAsVYakRAAUAAAAaIgAAAAAAAGapEQAMAEGU6M4ACwVyqREACgBBpOjOAAsFfKkRAAoAQbTozgALBYapEQAEAEHE6M4ACwWKqREAAwBB1OjOAAsFjakRAAIAQeTozgALBY+pEQADAEH06M4ACwWSqREAAwBBhOnOAAsFlakRAAkAQZTpzgALBZ6pEQACAEGk6c4ACyWgqREAAwAAALAAAAAAAAAAo6kRAAUAAAAuIgAAAAAAAKipEQAGAEHU6c4ACxWuqREAEQAAAOsiAAAAAAAAv6kRAAMAQfTpzgALFcKpEQAEAAAAOwQAAAAAAADGqREADgBBlOrOAAsF1KkRAAUAQaTqzgALBdmpEQAKAEG06s4ACwXjqREABABBxOrOAAsF56kRAAUAQdTqzgALBeypEQASAEHk6s4ACxX+qREAEQAAAH8iAAA4AwAAD6oRAAQAQYTrzgALBROqEQANAEGU684ACwUgqhEABwBBpOvOAAsFJ6oRAAoAQbTrzgALBTGqEQAFAEHE684ACwU2qhEAAwBB1OvOAAsFOaoRAAMAQeTrzgALBTyqEQAKAEH0684ACxVGqhEABwAAAPEqAAAAAAAATaoRAAoAQZTszgALBVeqEQADAEGk7M4ACwVaqhEAAwBBtOzOAAsFXaoRAAcAQcTszgALBWSqEQAHAEHU7M4ACxVrqhEABwAAAO4iAAAAAAAAcqoRAAQAQfTszgALFXaqEQAJAAAAHyMAAAAAAAB/qhEADQBBlO3OAAsFjKoRABIAQaTtzgALBZ6qEQAEAEG07c4ACwWiqhEABQBBxO3OAAsFp6oRAAIAQdTtzgALBamqEQAEAEHk7c4ACxWtqhEABAAAAB0EAAAAAAAAsaoRAAYAQYTuzgALFbeqEQAEAAAAMwQAAAAAAAC7qhEABwBBpO7OAAsVwqoRAAUAAAC2KQAAAAAAAMeqEQAGAEHE7s4ACwXNqhEACQBB1O7OAAsF1qoRAAsAQeTuzgALFeGqEQADAAAAPgAAAAAAAADkqhEABQBBhO/OAAsF6aoRAAUAQZTvzgALJe6qEQAIAAAAJCoAAAAAAAD2qhEABAAAADgEAAAAAAAA+qoRAAQAQcTvzgALFf6qEQATAAAAXykAAAAAAAARqxEAAgBB5O/OAAsFE6sRAAMAQfTvzgALBRarEQAGAEGE8M4ACyUcqxEACgAAABAiAAAAAAAAJqsRABAAAAB1IgAAAAAAADarEQAHAEG08M4ACwU9qxEABABBxPDOAAsFQasRAAMAQdTwzgALBUSrEQAEAEHk8M4ACwVIqxEAEABB9PDOAAsFWKsRAA4AQYTxzgALBWarEQAFAEGU8c4ACxVrqxEACQAAALYjAAAAAAAAdKsRAAQAQbTxzgALBXirEQAEAEHE8c4ACyV8qxEABgAAAAwiAAAAAAAAgqsRAAQAAACWKgAAAAAAAIarEQAIAEH08c4ACwWOqxEAAwBBhPLOAAsVkasRAAUAAAAhAQAAAAAAAJarEQADAEGk8s4ACwWZqxEADQBBtPLOAAsFpqsRAAUAQcTyzgALBaurEQAMAEHU8s4ACwW3qxEABABB5PLOAAsFu6sRAAUAQfTyzgALFcCrEQAHAAAASgQAAAAAAADHqxEABABBlPPOAAsFy6sRABQAQaTzzgALBd+rEQADAEG0884ACwXiqxEABABBxPPOAAsF5qsRAAMAQdTzzgALJemrEQAHAAAAMyoAAAAAAADwqxEABwAAABwjAAAAAAAA96sRABAAQYT0zgALBQesEQACAEGU9M4ACwUJrBEABQBBpPTOAAsFDqwRAAsAQbT0zgALBRmsEQAMAEHE9M4ACwUlrBEABwBB1PTOAAsVLKwRAAYAAAC5KQAAAAAAADKsEQAEAEH09M4ACwU2rBEAAgBBhPXOAAsFOKwRAAIAQZT1zgALBTqsEQAHAEGk9c4ACwVBrBEABQBBtPXOAAsVRqwRAAcAAADCIgAAAAAAAE2sEQAEAEHU9c4ACwVRrBEABgBB5PXOAAsFV6wRAAsAQfT1zgALBWKsEQAEAEGE9s4ACwVmrBEADwBBlPbOAAsFdawRAAQAQaT2zgALBXmsEQAGAEG09s4ACwV/rBEAAgBBxPbOAAsFgawRAAwAQdT2zgALBY2sEQAPAEHk9s4ACwWcrBEAEwBB9PbOAAsFr6wRAAUAQYT3zgALBbSsEQAFAEGU984ACwW5rBEABwBBpPfOAAsVwKwRAAYAAADbAAAAAAAAAMasEQAGAEHE984ACwXMrBEAAwBB1PfOAAsFz6wRAAcAQeT3zgALBdasEQAQAEH0984ACwXmrBEABQBBhPjOAAsF66wRABAAQZT4zgALBfusEQAEAEGk+M4ACwX/rBEAAwBBtPjOAAsFAq0RABIAQcT4zgALBRStEQAEAEHU+M4ACwUYrREAAgBB5PjOAAsFGq0RAAQAQfT4zgALBR6tEQAIAEGE+c4ACwUmrREADABBlPnOAAsFMq0RABgAQaT5zgALBUqtEQAQAEG0+c4ACwVarREABwBBxPnOAAsVYa0RAAsAAABvIgAAAAAAAGytEQAEAEHk+c4ACxVwrREABwAAAAT7AAAAAAAAd60RAAIAQYT6zgALBXmtEQAKAEGU+s4ACwWDrREABABBpPrOAAsFh60RAAUAQbT6zgALFYytEQAEAAAAF9UBAAAAAACQrREAAwBB1PrOAAsFk60RAAcAQeT6zgALBZqtEQAOAEH0+s4ACwWorREACQBBhPvOAAsFsa0RAAcAQZT7zgALBbitEQAGAEGk+84ACwW+rREAAgBBtPvOAAsFwK0RAAYAQcT7zgALFcatEQADAAAAHiEAAAAAAADJrREABgBB5PvOAAsVz60RAAQAAAD8IgAAAAAAANOtEQAGAEGE/M4ACwXZrREACQBBlPzOAAsF4q0RAAQAQaT8zgALJeatEQANAAAAcyIAAAAAAADzrREABwAAAKIhAAAAAAAA+q0RAAUAQdT8zgALBf+tEQAFAEHk/M4ACwUErhEADABB9PzOAAsFEK4RABEAQYT9zgALFSGuEQAFAAAAJiIAAAAAAAAmrhEABgBBpP3OAAsFLK4RAAUAQbT9zgALFTGuEQAGAAAAwiEAAAAAAAA3rhEACQBB1P3OAAsVQK4RAAcAAAAeIAAAAAAAAEeuEQACAEH0/c4ACwVJrhEAAwBBhP7OAAsFTK4RAAMAQZT+zgALBU+uEQADAEGk/s4ACwVSrhEAAgBBtP7OAAsFVK4RAA0AQcT+zgALJWGuEQAFAAAAFwEAAAAAAABmrhEABgAAAAwpAAAAAAAAbK4RAAQAQfT+zgALBXCuEQAHAEGE/84ACwV3rhEAAgBBlP/OAAsFea4RAAcAQaT/zgALBYCuEQADAEG0/84ACwWDrhEABABBxP/OAAsFh64RAAUAQdT/zgALBYyuEQAEAEHk/84ACwWQrhEABQBB9P/OAAsFla4RAAMAQYSAzwALBZiuEQAHAEGUgM8ACwWfrhEABgBBpIDPAAsFpa4RAA0AQbSAzwALFbKuEQAIAAAAkSEAAAAAAAC6rhEAAwBB1IDPAAsFva4RAAYAQeSAzwALBcOuEQAHAEH0gM8ACwXKrhEACwBBhIHPAAsF1a4RAAMAQZSBzwALBdiuEQAGAEGkgc8ACwXerhEABgBBtIHPAAsV5K4RAAcAAADzKgAAAAAAAOuuEQAEAEHUgc8ACzXvrhEABwAAAEUBAAAAAAAA9q4RAAcAAADpAAAAAAAAAP2uEQAGAAAAzCEAAAAAAAADrxEABgBBlILPAAsFCa8RAAUAQaSCzwALBQ6vEQAFAEG0gs8ACwUTrxEABABBxILPAAsFF68RAAQAQdSCzwALBRuvEQAFAEHkgs8ACxUgrxEABwAAAN0AAAAAAAAAJ68RAAMAQYSDzwALBSqvEQAVAEGUg88ACyU/rxEADAAAAIMiAADSIAAAS68RAAMAAABIIQAAAAAAAE6vEQAIAEHEg88ACxVWrxEABQAAAF0AAAAAAAAAW68RAAYAQeSDzwALBWGvEQAFAEH0g88ACxVmrxEABgAAAOsiAAAAAAAAbK8RAAcAQZSEzwALBXOvEQAIAEGkhM8ACwV7rxEABwBBtITPAAsVgq8RAAcAAABZIQAAAAAAAImvEQADAEHUhM8ACwWMrxEABQBB5ITPAAsFka8RABAAQfSEzwALBaGvEQAQAEGEhc8ACyWxrxEABgAAADMpAAAAAAAAt68RAAgAAAD+IgAAAAAAAL+vEQACAEG0hc8ACxXBrxEADgAAAKIhAAAAAAAAz68RAAYAQdSFzwALBdWvEQAHAEHkhc8ACwXcrxEABABB9IXPAAsF4K8RAAwAQYSGzwALBeyvEQAKAEGUhs8ACwX2rxEABQBBpIbPAAsF+68RAAoAQbSGzwALBQWwEQAIAEHEhs8ACwUNsBEABQBB1IbPAAsFErARAAMAQeSGzwALBRWwEQAEAEH0hs8ACzUZsBEABwAAAMwqAAAA/gAAILARAAYAAAD2JwAAAAAAACawEQAFAAAAyNQBAAAAAAArsBEABgBBtIfPAAsFMbARAAUAQcSHzwALBTawEQAPAEHUh88ACxVFsBEABgAAAHInAAAAAAAAS7ARAAoAQfSHzwALBVWwEQACAEGEiM8ACwVXsBEABABBlIjPAAsFW7ARAAcAQaSIzwALBWKwEQACAEG0iM8ACxVksBEABgAAAHYBAAAAAAAAarARAAUAQdSIzwALBW+wEQASAEHkiM8ACwWBsBEACgBB9IjPAAsFi7ARAA4AQYSJzwALBZmwEQANAEGUic8ACwWmsBEADQBBpInPAAsls7ARAAUAAABWKgAAAAAAALiwEQAFAAAAkyEAAAAAAAC9sBEABgBB1InPAAsVw7ARAAYAAACdIgAAAAAAAMmwEQACAEH0ic8ACwXLsBEAAwBBhIrPAAsVzrARAAYAAAC9AAAAAAAAANSwEQAGAEGkis8ACwXasBEADgBBtIrPAAsF6LARAAUAQcSKzwALBe2wEQAGAEHUis8ACxXzsBEACQAAAIYiAAAAAAAA/LARAAYAQfSKzwALBQKxEQAMAEGEi88ACwUOsREADQBBlIvPAAsFG7ERAAQAQaSLzwALBR+xEQACAEG0i88ACwUhsREACABBxIvPAAsFKbERAAUAQdSLzwALAy6xEQBB5IvPAAsFLrERAAQAQfSLzwALBTKxEQAIAEGEjM8ACyU6sREABQAAAKAAAAAAAAAAP7ERAAcAAAANKQAAAAAAAEaxEQAHAEG0jM8ACwVNsREAAgBBxIzPAAsFT7ERAAQAQdSMzwALJVOxEQAHAAAAvQAAAAAAAABasREACwAAAMUqAAA4AwAAZbERAAUAQYSNzwALBWqxEQAOAEGUjc8ACwV4sREACABBpI3PAAsFgLERAAYAQbSNzwALFYaxEQAGAAAAzyEAAAAAAACMsREAAwBB1I3PAAsFj7ERAAMAQeSNzwALBZKxEQAFAEH0jc8ACwWXsREAAwBBhI7PAAsFmrERAAwAQZSOzwALBaaxEQAFAEGkjs8ACwWrsREACwBBtI7PAAsFtrERAAUAQcSOzwALFbuxEQAFAAAAciIAAAAAAADAsREABABB5I7PAAsFxLERAAQAQfSOzwALBcixEQANAEGEj88ACwXVsREABABBlI/PAAsV2bERAAYAAAAZIAAAAAAAAN+xEQAUAEG0j88ACwXzsREABQBBxI/PAAs1+LERAAYAAABIIgAAAAAAAP6xEQAIAAAAfiIAAAAAAAAGshEABgAAAG4iAAAAAAAADLIRAAIAQYSQzwALBQ6yEQAGAEGUkM8ACwUUshEAAwBBpJDPAAsFF7IRAAEAQbSQzwALBRiyEQACAEHEkM8ACwUashEABwBB1JDPAAsFIbIRAAIAQeSQzwALBSOyEQAKAEH0kM8ACwUtshEABABBhJHPAAsFMbIRAAYAQZSRzwALFTeyEQAGAAAAAQEAAAAAAAA9shEABABBtJHPAAsFQbIRAAcAQcSRzwALFUiyEQAGAAAAoSIAAAAAAABOshEABgBB5JHPAAsFVLIRAAMAQfSRzwALBVeyEQAFAEGEks8ACwVcshEABQBBlJLPAAsFYbIRAAMAQaSSzwALBWSyEQACAEG0ks8ACwVmshEABQBBxJLPAAsFa7IRAAEAQdSSzwALBWyyEQACAEHkks8ACwVushEAEQBB9JLPAAsFf7IRAAIAQYSTzwALBYGyEQAHAEGUk88ACwWIshEAAwBBpJPPAAsVi7IRAAcAAAADIgAAAAAAAJKyEQAEAEHEk88ACwWWshEABgBB1JPPAAsFnLIRAA0AQeSTzwALNamyEQAIAAAAUCoAAAAAAACxshEABQAAABYBAAAAAAAAtrIRAAoAAACCIgAA0iAAAMCyEQALAEGklM8ACwXLshEADABBtJTPAAsF17IRAAgAQcSUzwALNd+yEQAHAAAAACIAAAAAAADmshEACQAAAN0pAAAAAAAA77IRAAQAAAArBAAAAAAAAPOyEQANAEGFlc8ACwSzEQAMAEGUlc8ACwUMsxEABgBBpJXPAAsFErMRAAcAQbSVzwALBRmzEQAHAEHElc8ACwUgsxEACQBB1JXPAAsFKbMRAAUAQeSVzwALBS6zEQACAEH0lc8ACwUwsxEABABBhJbPAAsFNLMRAAUAQZSWzwALFTmzEQAGAAAAagEAAAAAAAA/sxEABABBtJbPAAsFQ7MRAAgAQcSWzwALBUuzEQATAEHUls8ACwVesxEACwBB5JbPAAsFabMRAAgAQfSWzwALBXGzEQAJAEGEl88ACxV6sxEABwAAAEQBAAAAAAAAgbMRAAwAQaSXzwALBY2zEQAEAEG0l88ACwWRsxEAAwBBxJfPAAsFlLMRAAUAQdSXzwALFZmzEQAFAAAAygAAAAAAAACesxEAAwBB9JfPAAsFobMRAAcAQYSYzwALBaizEQAPAEGUmM8ACwW3sxEACgBBpJjPAAsFwbMRAAIAQbSYzwALBcOzEQAGAEHEmM8ACwXJsxEABgBB1JjPAAsFz7MRAAgAQeSYzwALBdezEQAFAEH0mM8ACwXcsxEABABBhJnPAAsF4LMRAAQAQZSZzwALJeSzEQAHAAAAWwAAAAAAAADrsxEABAAAAAfVAQAAAAAA77MRAAYAQcSZzwALBfWzEQAEAEHUmc8ACxX5sxEABwAAAA8hAAAAAAAAALQRAAQAQfSZzwALBQS0EQACAEGEms8ACwUGtBEAAgBBlJrPAAsFCLQRABIAQaSazwALBRq0EQAIAEG0ms8ACwUitBEABABBxJrPAAsVJrQRAAUAAADGKgAAAAAAACu0EQAEAEHkms8ACwUvtBEACQBB9JrPAAsFOLQRAAsAQYSbzwALBUO0EQAEAEGUm88ACwVHtBEAAwBBpJvPAAsVSrQRAAYAAAA/AAAAAAAAAFC0EQAFAEHEm88ACyVVtBEACAAAAJopAAAAAAAAXbQRAAkAAADRAwAAAAAAAGa0EQAFAEH0m88ACwVrtBEAAwBBhJzPAAsFbrQRAAMAQZSczwALBXG0EQADAEGknM8ACyV0tBEABwAAAPAqAAAAAAAAe7QRABAAAADsIgAAAAAAAIu0EQAHAEHUnM8ACwWStBEABABB5JzPAAsFlrQRAAYAQfSczwALBZy0EQAFAEGEnc8ACwWhtBEABwBBlJ3PAAsFqLQRAAUAQaSdzwALBa20EQAEAEG0nc8ACwWxtBEABQBBxJ3PAAsFtrQRAAIAQdSdzwALBbi0EQAHAEHknc8ACwW/tBEABgBB9J3PAAsFxbQRAAUAQYSezwALBcq0EQAFAEGUns8ACwXPtBEACABBpJ7PAAsF17QRAAUAQbSezwALBdy0EQAFAEHEns8ACwXhtBEADABB1J7PAAsF7bQRAAEAQeSezwALFe60EQAHAAAAFikAAAAAAAD1tBEAEQBBhJ/PAAsFBrURAAMAQZSfzwALBQm1EQAFAEGkn88ACxUOtREAEAAAAM4hAAAAAAAAHrURAAUAQcSfzwALNSO1EQAEAAAAhSoAAAAAAAAntREAFAAAAJIiAAAAAAAAO7URAAQAAAAJ1QEAAAAAAD+1EQAGAEGEoM8ACwVFtREADwBBlKDPAAsFVLURAAcAQaSgzwALBVu1EQAFAEG0oM8ACxVgtREABwAAADkpAAAAAAAAZ7URAAMAQdSgzwALRWq1EQAIAAAADCIAAAAAAABytREABQAAAAYmAAAAAAAAd7URAAgAAAByKQAAAAAAAH+1EQACAAAAPAAAAAAAAACBtREADABBpKHPAAsFjbURAA4AQbShzwALBZu1EQADAEHEoc8ACwWetREABQBB1KHPAAsFo7URAAQAQeShzwALBae1EQAFAEH0oc8ACwWstREABABBhKLPAAsFsLURAAUAQZSizwALJbW1EQARAAAAtAAAAAAAAADGtREADwAAAKwhAAAAAAAA1bURAAUAQcSizwALBdq1EQAFAEHUos8ACwXftREACABB5KLPAAsl57URAAYAAACSIQAAAAAAAO21EQAKAAAAsQAAAAAAAAD3tREAAwBBlKPPAAsF+rURAAEAQaSjzwALBfu1EQAGAEG0o88ACwUBthEABQBBxKPPAAsFBrYRAAMAQdSjzwALBQm2EQAKAEHko88ACwUTthEABwBB9KPPAAsFGrYRAAUAQYSkzwALBR+2EQAEAEGUpM8ACwUjthEABwBBpKTPAAsFKrYRAAcAQbSkzwALFTG2EQAEAAAAwQMAAAAAAAA1thEACgBB1KTPAAsFP7YRAAwAQeSkzwALFUu2EQAHAAAAtiEAAAAAAABSthEABwBBhKXPAAsFWbYRAAcAQZSlzwALBWC2EQAEAEGkpc8ACwVkthEABQBBtKXPAAsFabYRAAUAQcSlzwALBW62EQADAEHUpc8ACwVxthEABQBB5KXPAAsFdrYRAAUAQfSlzwALFXu2EQAHAAAACAQAAAAAAACCthEABwBBlKbPAAsFibYRAAcAQaSmzwALBZC2EQAOAEG0ps8ACwWethEABgBBxKbPAAsFpLYRAAUAQdSmzwALBam2EQAJAEHkps8ACwWythEAAwBB9KbPAAsFtbYRAAIAQYSnzwALBbe2EQAFAEGUp88ACwW8thEAEQBBpKfPAAsFzbYRAAQAQbSnzwALBdG2EQADAEHEp88ACxXUthEAEgAAAFYpAAAAAAAA5rYRABQAQeSnzwALBfq2EQAEAEH0p88ACwX+thEABQBBhKjPAAsFA7cRAAQAQZSozwALBQe3EQAEAEGkqM8ACwULtxEAAgBBtKjPAAsFDbcRAAMAQcSozwALBRC3EQAEAEHUqM8ACwUUtxEAAgBB5KjPAAsFFrcRABMAQfSozwALBSm3EQAJAEGEqc8ACwUytxEABABBlKnPAAslNrcRAAYAAAADIgAAAAAAADy3EQADAAAARiEAAAAAAAA/txEABQBBxKnPAAsFRLcRAAQAQdSpzwALBUi3EQAGAEHkqc8ACxVOtxEAAwAAABEhAAAAAAAAUbcRAAMAQYSqzwALBVS3EQAEAEGUqs8ACwVYtxEAAgBBpKrPAAsFWrcRAAMAQbSqzwALBV23EQAEAEHEqs8ACwVhtxEACwBB1KrPAAsFbLcRAAcAQeSqzwALBXO3EQAGAEH0qs8ACwV5txEABABBhKvPAAsFfbcRAAUAQZSrzwALBYK3EQAEAEGkq88AC0WGtxEABQAAANsAAAAAAAAAi7cRABIAAABPKQAAAAAAAJ23EQANAAAACyEAAAAAAACqtxEACwAAAJIhAAAAAAAAtbcRAAcAQfSrzwALBby3EQAFAEGErM8ACwXBtxEACQBBlKzPAAsVyrcRAAoAAAAWIgAAAAAAANS3EQADAEG0rM8ACxXXtxEABgAAAPUhAAAAAAAA3bcRAAgAQdSszwALJeW3EQAHAAAASQQAAAAAAADstxEAEQAAALshAAAAAAAA/bcRAAUAQYStzwALBQK4EQAFAEGUrc8ACxUHuBEAAwAAAK4AAAAAAAAACrgRAAIAQbStzwALBQy4EQAHAEHErc8ACwUTuBEABgBB1K3PAAslGbgRAAUAAAC31AEAAAAAAB64EQAPAAAAyyIAAAAAAAAtuBEABABBhK7PAAsFMbgRABEAQZSuzwALJUK4EQAGAAAAqwAAAAAAAABIuBEACwAAAIwqAAAAAAAAU7gRAAQAQcSuzwALFVe4EQAEAAAAHNUBAAAAAABbuBEABgBB5K7PAAsVYbgRAAYAAAArAQAAAAAAAGe4EQACAEGEr88ACxVpuBEABgAAAAH7AAAAAAAAb7gRAAUAQaSvzwALNXS4EQAHAAAAVSEAAAAAAAB7uBEAAwAAAL0DAAAAAAAAfrgRAAcAAACrIQAAAAAAAIW4EQAGAEHkr88ACwWLuBEACgBB9K/PAAsFlbgRAAwAQYSwzwALBaG4EQAEAEGUsM8ACwWluBEACgBBpLDPAAsFr7gRAAEAQbSwzwALBbC4EQAFAEHEsM8ACwW1uBEABABB1LDPAAsVubgRAAgAAACjIgAAAAAAAMG4EQAEAEH0sM8ACxXFuBEADAAAAMAhAAAAAAAA0bgRABAAQZSxzwALBeG4EQAFAEGksc8ACxXmuBEABQAAALYAAAAAAAAA67gRAAQAQcSxzwALBe+4EQADAEHUsc8ACyXyuBEABAAAAKIAAAAAAAAA9rgRAAQAAAC5AAAAAAAAAPq4EQADAEGEss8ACxX9uBEACwAAAMghAAAAAAAACLkRAAQAQaSyzwALBQy5EQAJAEG0ss8ACwUVuREAAgBBxLLPAAsFF7kRABEAQdSyzwALFSi5EQAFAAAAsiEAAAAAAAAtuREABgBB9LLPAAsFM7kRAAQAQYSzzwALBTe5EQANAEGUs88ACwVEuREADABBpLPPAAsFULkRAAUAQbSzzwALBVW5EQAQAEHEs88ACxVluREABgAAAI8iAAAAAAAAa7kRAAQAQeSzzwALBW+5EQAGAEH0s88ACxV1uREABgAAAEwqAAAAAAAAe7kRAA0AQZS0zwALFYi5EQAFAAAAxAAAAAAAAACNuREABQBBtLTPAAsFkrkRAAMAQcS0zwALJZW5EQAFAAAAxdQBAAAAAACauREABQAAAL3UAQAAAAAAn7kRAAUAQfS0zwALBaS5EQACAEGEtc8ACyWmuREABwAAAOwiAAAAAAAArbkRAA8AAAD2JwAAAAAAALy5EQAJAEG0tc8ACwXFuREABQBBxLXPAAsFyrkRAAMAQdS1zwALBc25EQADAEHktc8ACzXQuREAAgAAAD4AAAAAAAAA0rkRAAUAAAAgIgAA0iAAANe5EQAFAAAAw9QBAAAAAADcuREABgBBpLbPAAsF4rkRAAMAQbS2zwALBeW5EQAMAEHEts8ACwXxuREABABB1LbPAAsF9bkRAAcAQeS2zwALBfy5EQAQAEH0ts8ACwUMuhEACQBBhLfPAAsFFboRAA4AQZS3zwALFSO6EQAEAAAA1gAAAAAAAAAnuhEABQBBtLfPAAsFLLoRABAAQcS3zwALBTy6EQAGAEHUt88ACwVCuhEABgBB5LfPAAsFSLoRAAYAQfS3zwALBU66EQAKAEGEuM8ACwVYuhEADgBBlLjPAAsFZroRAAIAQaS4zwALBWi6EQAIAEG0uM8ACwVwuhEAAgBBxLjPAAsFcroRAAkAQdS4zwALBXu6EQAFAEHkuM8ACyWAuhEAEAAAAK4hAAAAAAAAkLoRAAYAAAAJAQAAAAAAAJa6EQAFAEGUuc8ACwWbuhEAAgBBpLnPAAsFnboRAAYAQbS5zwALFaO6EQAKAAAAAiEAAAAAAACtuhEACABB1LnPAAsVtboRAAcAAABeIQAAAAAAALy6EQADAEH0uc8ACwW/uhEABgBBhLrPAAsFxboRAAMAQZS6zwALBci6EQAKAEGkus8ACwXSuhEABABBtLrPAAsV1roRAAcAAACxAAAAAAAAAN26EQAGAEHUus8ACxXjuhEACAAAAFcqAAAAAAAA67oRAAcAQfS6zwALBfK6EQAQAEGEu88ACwUCuxEABgBBlLvPAAsFCLsRAA0AQaS7zwALFRW7EQAFAAAA9gAAAAAAAAAauxEAGABBxLvPAAsFMrsRAAUAQdS7zwALBTe7EQAMAEHku88ACwVDuxEAAwBB9LvPAAsFRrsRAAMAQYS8zwALBUm7EQAUAEGUvM8ACwVduxEACABBpLzPAAsFZbsRAAcAQbS8zwALBWy7EQAPAEHEvM8ACwV7uxEABABB1LzPAAsFf7sRAAUAQeS8zwALBYS7EQADAEH0vM8ACwWHuxEABwBBhL3PAAsFjrsRAAkAQZS9zwALBZe7EQAKAEGkvc8ACxWhuxEABAAAAEMEAAAAAAAApbsRAAUAQcS9zwALBaq7EQAPAEHUvc8ACxW5uxEABQAAAOYAAAAAAAAAvrsRAAcAQfS9zwALJcW7EQAGAAAAkikAAAAAAADLuxEABQAAAA8hAAAAAAAA0LsRAAQAQaS+zwALBdS7EQATAEG0vs8ACxXnuxEABwAAAPkiAAA4AwAA7rsRAAgAQdS+zwALBfa7EQACAEHkvs8ACwX4uxEAAwBB9L7PAAsF+7sRAA0AQYS/zwALJQi8EQAFAAAAywAAAAAAAAANvBEABwAAAAUjAAAAAAAAFLwRAAsAQbS/zwALBR+8EQAPAEHEv88ACwUuvBEABwBB1L/PAAsFNbwRAAUAQeS/zwALBTq8EQAGAEH0v88ACwVAvBEAAgBBhMDPAAsFQrwRAAIAQZTAzwALBUS8EQALAEGkwM8ACwVPvBEABQBBtMDPAAsVVLwRAAYAAADIIQAAAAAAAFq8EQAEAEHUwM8ACwVevBEABwBB5MDPAAsVZbwRAAkAAABBIgAAAAAAAG68EQACAEGEwc8ACwVwvBEABgBBlMHPAAsFdrwRAAIAQaTBzwALBXi8EQAFAEG0wc8ACxV9vBEABQAAAL8lAAAAAAAAgrwRAAIAQdTBzwALBYS8EQACAEHkwc8ACwWGvBEAAwBB9MHPAAsFibwRAAQAQYTCzwALBY28EQAGAEGUws8ACwWTvBEABQBBpMLPAAslmLwRAAUAAACqJQAAAAAAAJ28EQAPAAAAtCIAAAAAAACsvBEADABB1MLPAAsVuLwRAAYAAAC6IQAAAAAAAL68EQAVAEH0ws8ACwXTvBEABABBhMPPAAsV17wRAAYAAADsAAAAAAAAAN28EQADAEGkw88ACwXgvBEACwBBtMPPAAsF67wRABUAQcXDzwALBL0RAAQAQdTDzwALBQS9EQAGAEHkw88ACwUKvREABgBB9MPPAAsFEL0RAAUAQYTEzwALBRW9EQAFAEGUxM8ACwUavREAAwBBpMTPAAsFHb0RAAIAQbTEzwALBR+9EQAGAEHExM8ACwUlvREACABB1MTPAAsFLb0RAA0AQeTEzwALBTq9EQAEAEH0xM8ACwU+vREAAgBBhMXPAAsVQL0RAAUAAABVBAAAAAAAAEW9EQAOAEGkxc8ACyVTvREACAAAAL8DAAAAAAAAW70RAAYAAAC+JQAAAAAAAGG9EQAFAEHUxc8ACxVmvREABAAAAD4iAAAzAwAAar0RAAQAQfTFzwALBW69EQAEAEGExs8ACyVyvREABQAAAMIiAAAAAAAAd70RAAUAAAAgJwAAAAAAAHy9EQAIAEG0xs8ACwWEvREAAQBBxMbPAAsFhb0RAAYAQdTGzwALBYu9EQACAEHkxs8ACwWNvREAAwBB9MbPAAsFkL0RAAYAQYTHzwALBZa9EQAFAEGUx88ACxWbvREABgAAAIMiAADSIAAAob0RAAcAQbTHzwALBai9EQAFAEHEx88ACxWtvREACAAAABQiAAAAAAAAtb0RAAYAQeTHzwALBbu9EQABAEH0x88ACwW8vREABABBhMjPAAsFwL0RAAUAQZTIzwALBcW9EQALAEGkyM8ACwXQvREABQBBtMjPAAsF1b0RAAMAQcTIzwALBdi9EQALAEHUyM8ACwXjvREACwBB5MjPAAsF7r0RAAYAQfTIzwALBfS9EQAIAEGEyc8ACwX8vREABQBBlMnPAAsFAb4RAAQAQaTJzwALBQW+EQALAEG0yc8ACwUQvhEABgBBxMnPAAsFFr4RAAUAQdTJzwALBRu+EQAIAEHkyc8ACwUjvhEABwBB9MnPAAslKr4RAAcAAAAFIQAAAAAAADG+EQAEAAAAaCIAAAAAAAA1vhEAAgBBpMrPAAsVN74RAAkAAAArIgAAAAAAAEC+EQAKAEHEys8ACwVKvhEAAgBB1MrPAAsFTL4RABAAQeTKzwALBVy+EQATAEH0ys8ACwVvvhEABABBhMvPAAsFc74RAAMAQZTLzwALBXa+EQAHAEGky88ACwV9vhEABABBtMvPAAslgb4RAAYAAABWBAAAAAAAAIe+EQAHAAAAZSYAAAAAAACOvhEACQBB5MvPAAsVl74RAAUAAADEKQAAAAAAAJy+EQAEAEGEzM8ACwWgvhEABABBlMzPAAsFpL4RAAMAQaTMzwALFae+EQAGAAAAZSUAAAAAAACtvhEACgBBxMzPAAsVt74RAAwAAABfIAAAAAAAAMO+EQAIAEHkzM8ACwXLvhEAAwBB9MzPAAsFzr4RAAYAQYTNzwALBdS+EQAMAEGUzc8ACwXgvhEABABBpM3PAAsF5L4RAAIAQbTNzwALFea+EQAEAAAAK9UBAAAAAADqvhEAEgBB1M3PAAsF/L4RAAUAQeTNzwALBQG/EQADAEH0zc8ACxUEvxEABgAAADoiAAAAAAAACr8RAAMAQZTOzwALBQ2/EQAGAEGkzs8ACwUTvxEABQBBtM7PAAsFGL8RABYAQcTOzwALJS6/EQAFAAAA2yoAAAAAAAAzvxEABgAAAMcAAAAAAAAAOb8RAAkAQfTOzwALFUK/EQALAAAAzSEAAAAAAABNvxEAAwBBlM/PAAsFUL8RAA8AQaTPzwALBV+/EQACAEG0z88ACwVhvxEABQBBxM/PAAsFZr8RAAQAQdTPzwALBWq/EQAEAEHkz88ACwVuvxEABABB9M/PAAsFcr8RAAMAQYTQzwALBXW/EQAEAEGU0M8ACwV5vxEABgBBpNDPAAsVf78RAAQAAADEAAAAAAAAAIO/EQAEAEHE0M8ACwWHvxEABwBB1NDPAAsFjr8RAAYAQeTQzwALBZS/EQAIAEH00M8ACyWcvxEABgAAACkhAAAAAAAAor8RAAUAAACz1AEAAAAAAKe/EQAGAEGk0c8ACwWtvxEABABBtNHPAAsFsb8RAA0AQcTRzwALFb6/EQAFAAAA2yAAAAAAAADDvxEABQBB5NHPAAsFyL8RAAMAQfTRzwALBcu/EQAJAEGE0s8ACwXUvxEABABBlNLPAAsF2L8RAAUAQaTSzwALFd2/EQAKAAAAXCIAAAAAAADnvxEACQBBxNLPAAsF8L8RAAIAQdTSzwALBfK/EQADAEHk0s8ACwX1vxEAAwBB9NLPAAsV+L8RAAYAAADnJwAAAAAAAP6/EQAQAEGU088ACwUOwBEAAwBBpNPPAAsFEcARAAIAQbTTzwALBRPAEQAQAEHE088ACwUjwBEACgBB1NPPAAtFLcARAAYAAADGKgAAOAMAADPAEQAGAAAAaiUAAAAAAAA5wBEABQAAAPwnAAAAAAAAPsARAAYAAACYIQAAAAAAAETAEQAGAEGk1M8ACwVKwBEACwBBtNTPAAsVVcARAAYAAAAyIAAAAAAAAFvAEQANAEHU1M8ACwVowBEAAwBB5NTPAAsFa8ARAA4AQfTUzwALBXnAEQAGAEGE1c8ACxV/wBEABwAAAB0pAAAAAAAAhsARAAMAQaTVzwALBYnAEQAPAEG01c8ACyWYwBEABQAAAE4EAAAAAAAAncARAAgAAAByIgAAAAAAAKXAEQACAEHk1c8ACwWnwBEABgBB9NXPAAsVrcARAAYAAABSJQAAAAAAALPAEQAHAEGU1s8ACxW6wBEAEgAAAOYnAAAAAAAAzMARAAYAQbTWzwALBdLAEQADAEHE1s8ACwXVwBEAAgBB1NbPAAsF18ARAA0AQeTWzwALBeTAEQAJAEH01s8ACwXtwBEAAwBBhNfPAAsV8MARAAkAAAANKgAAAAAAAPnAEQAFAEGk188ACwX+wBEACgBBtNfPAAsFCMERABAAQcTXzwALBRjBEQADAEHU188ACwUbwREAAwBB5NfPAAsVHsERAAoAAAAEIgAAAAAAACjBEQADAEGE2M8ACxUrwREABQAAALDUAQAAAAAAMMERAAQAQaTYzwALJTTBEQAHAAAAxyIAAAAAAAA7wREABQAAAGTVAQAAAAAAQMERAAQAQdTYzwALFUTBEQAEAAAANAQAAAAAAABIwREABwBB9NjPAAslT8ERAAQAAADLJQAAAAAAAFPBEQAQAAAAWCkAAAAAAABjwREABgBBpNnPAAsVacERAAQAAAAs1QEAAAAAAG3BEQAFAEHE2c8ACwVywREABgBB1NnPAAsFeMERAAQAQeTZzwALBXzBEQAEAEH02c8ACwWAwREACQBBhNrPAAsFicERAAMAQZTazwALBYzBEQALAEGk2s8ACwWXwREAAwBBtNrPAAsFmsERAAYAQcTazwALBaDBEQAMAEHU2s8ACxWswREABwAAAK4lAAAAAAAAs8ERAAQAQfTazwALJbfBEQAMAAAAlSEAAAAAAADDwREABAAAAP8AAAAAAAAAx8ERAAMAQaTbzwALFcrBEQAGAAAAzyIAAAAAAADQwREABABBxNvPAAsl1MERAAkAAAB+KgAAAAAAAN3BEQAEAAAA0iIAAAAAAADhwREABQBB9NvPAAsF5sERAAQAQYTczwALBerBEQAFAEGU3M8ACwXvwREAEgBBpNzPAAsVAcIRAAcAAAA6AQAAAAAAAAjCEQAFAEHE3M8ACxUNwhEABwAAAKoiAAAAAAAAFMIRAAIAQeTczwALBRbCEQADAEH03M8ACwUZwhEABABBhN3PAAsFHcIRAA0AQZTdzwALFSrCEQALAAAAkiEAAAAAAAA1whEADgBBtN3PAAsVQ8IRAA4AAACwKgAAAAAAAFHCEQACAEHU3c8ACxVTwhEAEwAAAPcnAAAAAAAAZsIRAAQAQfTdzwALBWrCEQAJAEGE3s8ACwVzwhEAEgBBlN7PAAs1hcIRAAYAAACWIQAAAAAAAIvCEQAQAAAA3CMAAAAAAACbwhEACAAAAN0hAAAAAAAAo8IRAAgAQdTezwALFavCEQADAAAAvCoAAAAAAACuwhEABQBB9N7PAAsFs8IRAAkAQYTfzwALFbzCEQAFAAAAtykAAAAAAADBwhEACABBpN/PAAsFycIRAAQAQbTfzwALFc3CEQAHAAAA4ykAAAAAAADUwhEACgBB1N/PAAsF3sIRAAQAQeTfzwALFeLCEQAEAAAAIAQAAAAAAADmwhEACwBBhODPAAsF8cIRAAMAQZTgzwALBfTCEQAJAEGk4M8ACwX9whEABABBtODPAAsFAcMRAAMAQcTgzwALBQTDEQAFAEHU4M8ACwUJwxEABQBB5ODPAAsFDsMRAAQAQfTgzwALFRLDEQAFAAAAzyoAAAAAAAAXwxEABABBlOHPAAsVG8MRAAYAAACFKQAAAAAAACHDEQADAEG04c8ACwUkwxEABwBBxOHPAAsFK8MRAAMAQdThzwALBS7DEQADAEHk4c8ACwUxwxEABQBB9OHPAAsFNsMRAAcAQYTizwALJT3DEQAHAAAAtiIAAAAAAABEwxEABQAAAHoiAAAAAAAAScMRABIAQbTizwALBVvDEQAKAEHE4s8ACwVlwxEABQBB1OLPAAsFasMRAAQAQeTizwALBW7DEQABAEH04s8ACwVvwxEABABBhOPPAAsFc8MRAA8AQZTjzwALBYLDEQACAEGk488ACwWEwxEABQBBtOPPAAsVicMRAA8AAABbKQAAAAAAAJjDEQAEAEHU488ACxWcwxEABwAAAGIBAAAAAAAAo8MRAAgAQfTjzwALBavDEQADAEGE5M8ACwWuwxEABgBBlOTPAAsFtMMRAAcAQaTkzwALBbvDEQAEAEG05M8ACwW/wxEABQBBxOTPAAsFxMMRAAUAQdTkzwALBcnDEQADAEHk5M8ACyXMwxEABAAAAJUqAAAAAAAA0MMRAAMAAAA+AAAAAAAAANPDEQAKAEGU5c8ACwXdwxEABwBBpOXPAAsF5MMRAAYAQbTlzwALJerDEQAHAAAADyEAAAAAAADxwxEACAAAAF8iAAAAAAAA+cMRAAMAQeTlzwALFfzDEQAGAAAAaSIAAAAAAAACxBEAAgBBhObPAAsFBMQRAAIAQZTmzwALBQbEEQAOAEGk5s8ACwUUxBEACwBBtObPAAsFH8QRAAgAQcTmzwALBSfEEQAGAEHU5s8ACwUtxBEABgBB5ObPAAsVM8QRAAYAAAAzIAAAAAAAADnEEQAIAEGE588ACxVBxBEACQAAALgiAAAAAAAASsQRAAsAQaTnzwALFVXEEQAHAAAAKAEAAAAAAABcxBEABABBxOfPAAsFYMQRAAMAQdTnzwALBWPEEQAGAEHk588ACwVpxBEADQBB9OfPAAsVdsQRABAAAACyIgAAAAAAAIbEEQAEAEGU6M8ACwWKxBEAAwBBpOjPAAsFjcQRAAcAQbTozwALBZTEEQAKAEHE6M8ACxWexBEABQAAACQhAAAAAAAAo8QRAAkAQeTozwALFazEEQAKAAAANCIAAAAAAAC2xBEABABBhOnPAAsFusQRAAIAQZTpzwALBbzEEQAQAEGk6c8ACwXMxBEACABBtOnPAAsF1MQRAAMAQcTpzwALBdfEEQAEAEHU6c8ACwXbxBEABwBB5OnPAAsF4sQRAAQAQfTpzwALJebEEQAEAAAAIwAAAAAAAADqxBEADAAAADAhAAAAAAAA9sQRAAMAQaTqzwALBfnEEQACAEG06s8ACyX7xBEABgAAAKkDAAAAAAAAAcURAAcAAAAEKgAAAAAAAAjFEQAEAEHk6s8ACzUMxREABAAAAAkAAAAAAAAAEMURAAMAAABnIgAAAAAAABPFEQAHAAAA1CoAAAAAAAAaxREABABBpOvPAAsFHsURAAcAQbTrzwALBSXFEQAFAEHE688ACwUqxREAAgBB1OvPAAsFLMURAAsAQeTrzwALBTfFEQAFAEH0688ACxU8xREABgAAAJkhAAAAAAAAQsURAAoAQZTszwALBUzFEQAGAEGk7M8ACwVSxREABgBBtOzPAAsFWMURAAIAQcTszwALBVrFEQACAEHU7M8ACxVcxREACAAAADEgAAAAAAAAZMURABIAQfTszwALBXbFEQAFAEGE7c8ACwV7xREAAwBBlO3PAAsFfsURABIAQaTtzwALBZDFEQADAEG07c8ACyWTxREABwAAAFMhAAAAAAAAmsURAAQAAADLAAAAAAAAAJ7FEQABAEHk7c8ACxWfxREACgAAAH0qAAA4AwAAqcURAA0AQYTuzwALBbbFEQAFAEGU7s8ACwW7xREABQBBpO7PAAsFwMURAAgAQbTuzwALBcjFEQADAEHE7s8ACwXLxREACwBB1O7PAAsF1sURAAQAQeTuzwALBdrFEQAJAEH07s8ACwXjxREADQBBhO/PAAsV8MURAAgAAAD1IgAAAAAAAPjFEQAEAEGk788ACxX8xREABgAAAJ0hAAAAAAAAAsYRAAUAQcTvzwALBQfGEQACAEHU788ACwUJxhEAAgBB5O/PAAsFC8YRAAkAQfTvzwALBRTGEQAMAEGE8M8ACwUgxhEABgBBlPDPAAsVJsYRAAYAAAAkIgAAAAAAACzGEQAEAEG08M8ACzUwxhEABQAAAHgBAAAAAAAANcYRAAkAAACEKgAAAAAAAD7GEQAEAAAAsyoAAAAAAABCxhEACQBB9PDPAAsFS8YRAAMAQYTxzwALBU7GEQAIAEGU8c8ACwVWxhEAAgBBpPHPAAsFWMYRAAoAQbTxzwALBWLGEQAHAEHE8c8ACwVpxhEAAwBB1PHPAAsFbMYRABMAQeTxzwALBX/GEQADAEH08c8ACwWCxhEAAgBBhPLPAAsFhMYRAAgAQZTyzwALBYzGEQAKAEGk8s8ACwWWxhEABABBtPLPAAsVmsYRAAcAAABbIQAAAAAAAKHGEQADAEHU8s8ACwWkxhEABgBB5PLPAAsFqsYRAAwAQfTyzwALBbbGEQAFAEGE888ACwW7xhEACQBBlPPPAAsFxMYRAAIAQaTzzwALBcbGEQAHAEG0888ACwXNxhEABABBxPPPAAsV0cYRAAcAAAC9IgAAAAAAANjGEQAIAEHk888ACwXgxhEABwBB9PPPAAsF58YRAAUAQYT0zwALBezGEQAFAEGU9M8ACxXxxhEABwAAAD8BAAAAAAAA+MYRAAQAQbT0zwALFfzGEQAFAAAAmQMAAAAAAAABxxEABQBB1PTPAAsFBscRAAUAQeT0zwALBQvHEQAMAEH09M8ACxUXxxEABwAAALcAAAAAAAAAHscRAAIAQZT1zwALBSDHEQADAEGk9c8ACwUjxxEABwBBtPXPAAsFKscRAAMAQcT1zwALBS3HEQAEAEHU9c8ACwUxxxEABwBB5PXPAAsFOMcRAAgAQfT1zwALBUDHEQAEAEGE9s8ACwVExxEABABBlPbPAAsVSMcRAAcAAACqJQAAAAAAAE/HEQACAEG09s8ACwVRxxEABQBBxPbPAAslVscRAAUAAAC0AAAAAAAAAFvHEQADAAAAHCEAAAAAAABexxEAAwBB9PbPAAsFYccRAAUAQYT3zwALBWbHEQADAEGU988ACwVpxxEACABBpPfPAAslcccRAAYAAAAQJQAAAAAAAHfHEQAGAAAARCIAAAAAAAB9xxEADABB1PfPAAsFiccRAAoAQeT3zwALBZPHEQAFAEH0988ACyWYxxEABwAAAMYiAAAAAAAAn8cRAAcAAABeAQAAAAAAAKbHEQAHAEGk+M8ACwWtxxEAAgBBtPjPAAsVr8cRABQAAADQKQAAOAMAAMPHEQAGAEHU+M8ACwXJxxEABwBB5PjPAAsF0McRAAMAQfT4zwALBdPHEQAHAEGE+c8ACxXaxxEAAwAAAGoiAAAAAAAA3ccRAAMAQaT5zwALBeDHEQABAEG0+c8ACwXhxxEAAgBBxPnPAAsF48cRAAMAQdT5zwALBebHEQAIAEHk+c8ACwXuxxEABQBB9PnPAAsF88cRAAQAQYT6zwALBffHEQADAEGU+s8ACxX6xxEABgAAAIIiAADSIAAAAMgRAAUAQbT6zwALBQXIEQADAEHE+s8ACwUIyBEACwBB1PrPAAsFE8gRAAQAQeT6zwALBRfIEQAHAEH0+s8ACwUeyBEABABBhPvPAAsFIsgRAAMAQZT7zwALBSXIEQAQAEGk+88ACxU1yBEACAAAALgAAAAAAAAAPcgRAAUAQcT7zwALBULIEQAIAEHU+88ACwVKyBEABgBB5PvPAAsFUMgRABAAQfT7zwALBWDIEQAFAEGE/M8ACwVlyBEAAwBBlPzPAAsFaMgRAAYAQaT8zwALBW7IEQAJAEG0/M8ACwV3yBEAAgBBxPzPAAsVecgRAAgAAAAUKgAAAAAAAIHIEQAFAEHk/M8ACwWGyBEADQBB9PzPAAsVk8gRAAcAAABZAQAAAAAAAJrIEQADAEGU/c8ACwWdyBEAAgBBpP3PAAsFn8gRAAIAQbT9zwALBaHIEQADAEHE/c8ACxWkyBEACwAAAJUiAAAAAAAAr8gRAAkAQeT9zwALBbjIEQACAEH0/c8ACwW6yBEABgBBhP7PAAsVwMgRAAYAAACgKgAAAAAAAMbIEQAGAEGk/s8ACxXMyBEABwAAAJMiAAAA/gAA08gRAAYAQcT+zwALBdnIEQAEAEHU/s8ACwXdyBEABgBB5P7PAAsF48gRAAQAQfT+zwALBefIEQADAEGE/88ACwXqyBEAAwBBlP/PAAsF7cgRAAwAQaT/zwALBfnIEQAFAEG0/88ACwX+yBEABQBBxP/PAAsFA8kRABIAQdT/zwALBRXJEQAIAEHk/88ACwUdyREABABB9P/PAAsFIckRAAYAQYSA0AALBSfJEQAFAEGUgNAACwUsyREABABBpIDQAAsFMMkRAAsAQbSA0AALBTvJEQAFAEHEgNAACxVAyREABwAAAPUAAAAAAAAAR8kRAAcAQeSA0AALBU7JEQAFAEH0gNAACwVTyREABABBhIHQAAsFV8kRAAQAQZSB0AALFVvJEQAHAAAAdSkAAAAAAABiyREACwBBtIHQAAsFbckRAAYAQcSB0AALBXPJEQAFAEHUgdAACwV4yREADgBB5IHQAAsFhskRAAcAQfSB0AALBY3JEQAGAEGEgtAACwWTyREACABBlILQAAsFm8kRAAwAQaSC0AALJafJEQAGAAAA7QAAAAAAAACtyREACQAAAEkpAAAAAAAAtskRAAQAQdSC0AALJbrJEQAHAAAAaikAAAAAAADByREADAAAAGYmAAAAAAAAzckRAAQAQYSD0AALBdHJEQALAEGUg9AACwXcyREABwBBpIPQAAsF48kRAA0AQbSD0AALBfDJEQAKAEHEg9AACwX6yREABgBB1YPQAAsUyhEADwAAACQiAAAAAAAAD8oRAAMAQfSD0AALBRLKEQABAEGEhNAACwUTyhEABABBlITQAAsFF8oRAAoAQaSE0AALBSHKEQAEAEG0hNAACwUlyhEAAgBBxITQAAsFJ8oRAAsAQdSE0AALBTLKEQADAEHkhNAACwU1yhEAAgBB9ITQAAsFN8oRAAIAQYSF0AALBTnKEQAIAEGUhdAACwVByhEACABBpIXQAAsFScoRAAMAQbSF0AALBUzKEQACAEHEhdAACwVOyhEABgBB1IXQAAsVVMoRAAUAAAA2BAAAAAAAAFnKEQACAEH0hdAACxVbyhEACAAAAHwqAAAAAAAAY8oRAAMAQZSG0AALBWbKEQALAEGkhtAACwVxyhEAAwBBtIbQAAsVdMoRAAYAAAAcAQAAAAAAAHrKEQADAEHUhtAACwV9yhEABABB5IbQAAsFgcoRAAsAQfSG0AALFYzKEQAGAAAAYAAAAAAAAACSyhEABABBlIfQAAsFlsoRAAYAQaSH0AALBZzKEQACAEG0h9AACxWeyhEACAAAAP0iAAAAAAAApsoRAAMAQdSH0AALBanKEQAHAEHkh9AACwWwyhEABgBB9IfQAAsFtsoRAAQAQYSI0AALBbrKEQAEAEGUiNAACxW+yhEABwAAAB8jAAAAAAAAxcoRAAgAQbSI0AALBc3KEQARAEHEiNAACwXeyhEABwBB1IjQAAsF5coRAAgAQeSI0AALBe3KEQACAEH0iNAACwXvyhEADABBhInQAAsV+8oRAAcAAAAuKgAAAAAAAALLEQAEAEGkidAACxUGyxEABgAAAAwlAAAAAAAADMsRABMAQcSJ0AALBR/LEQADAEHUidAACxUiyxEABQAAAHwBAAAAAAAAJ8sRAAIAQfSJ0AALBSnLEQADAEGEitAACwUsyxEACQBBlIrQAAsFNcsRAAQAQaSK0AALBTnLEQAGAEG0itAACwU/yxEACgBBxIrQAAsFScsRAAYAQdSK0AALBU/LEQAJAEHkitAACwVYyxEACABB9IrQAAslYMsRABIAAADpJwAAAAAAAHLLEQAGAAAAFCUAAAAAAAB4yxEAAgBBpIvQAAsVessRAAcAAABDAQAAAAAAAIHLEQAPAEHEi9AACwWQyxEABQBB1IvQAAsllcsRAAYAAADyIgAAAAAAAJvLEQAEAAAApgMAAAAAAACfyxEACQBBhIzQAAsFqMsRAAUAQZSM0AALBa3LEQAFAEGkjNAACwWyyxEABQBBtIzQAAsFt8sRAAQAQcSM0AALBbvLEQACAEHUjNAACwW9yxEAAwBB5IzQAAsFwMsRAAkAQfSM0AALFcnLEQAHAAAAGSAAAAAAAADQyxEABQBBlI3QAAsF1csRAAYAQaSN0AALNdvLEQAEAAAAMAQAAAAAAADfyxEABwAAABchAAAAAAAA5ssRAAQAAACpAwAAAAAAAOrLEQACAEHkjdAACwXsyxEACwBB9I3QAAsF98sRAAMAQYSO0AALJfrLEQAGAAAATyAAAAAAAAAAzBEACAAAAGEiAADlIAAACMwRAAgAQbSO0AALBRDMEQAFAEHEjtAACwUVzBEABABB1I7QAAsFGcwRAAMAQeSO0AALBRzMEQASAEH0jtAACzUuzBEADAAAAJUhAAAAAAAAOswRAAYAAAA8IgAA0iAAAEDMEQAGAAAAXyUAAAAAAABGzBEABQBBtI/QAAsFS8wRAAIAQcSP0AALBU3MEQAFAEHUj9AACwVSzBEAAwBB5I/QAAslVcwRAAYAAAA3IQAAAAAAAFvMEQAIAAAAgyIAANIgAABjzBEABQBBlJDQAAsVaMwRAA8AAAAGIwAAAAAAAHfMEQAJAEG0kNAACwWAzBEAAgBBxJDQAAsFgswRABQAQdSQ0AALBZbMEQAIAEHkkNAACwWezBEABQBB9JDQAAsFo8wRAAUAQYSR0AALBajMEQADAEGUkdAACwWrzBEADwBBpJHQAAsFuswRAAUAQbSR0AALBb/MEQAIAEHEkdAACwXHzBEABABB1JHQAAsFy8wRAAMAQeSR0AALBc7MEQACAEH0kdAACwXQzBEAAwBBhJLQAAsF08wRAAUAQZSS0AALBdjMEQAHAEGkktAACwXfzBEABgBBtJLQAAsF5cwRAAYAQcSS0AALBevMEQAFAEHUktAACwXwzBEACQBB5JLQAAsF+cwRAAYAQfSS0AALBf/MEQAFAEGEk9AACwUEzREACwBBlJPQAAslD80RAAYAAADMKgAAAAAAABXNEQAFAAAAIiAAAAAAAAAazREACABBxJPQAAsFIs0RAA8AQdST0AALBTHNEQAHAEHkk9AACwU4zREABABB9JPQAAsFPM0RAAwAQYSU0AALFUjNEQADAAAAZiIAAAAAAABLzREABgBBpJTQAAsVUc0RAA4AAAAWIgAAAAAAAF/NEQAFAEHElNAACyVkzREABQAAAOsnAAAAAAAAac0RAAYAAACIIgAAAAAAAG/NEQAEAEH0lNAACwVzzREAAwBBhJXQAAsFds0RAAUAQZSV0AALBXvNEQAGAEGkldAACwWBzREACABBtJXQAAsFic0RAAMAQcSV0AALBYzNEQALAEHUldAACwWXzREABQBB5JXQAAsVnM0RAAQAAACnAAAAAAAAAKDNEQAFAEGEltAACzWlzREABQAAAM7UAQAAAAAAqs0RAAUAAAAHBAAAAAAAAK/NEQAGAAAAUyIAAAAAAAC1zREABgBBxJbQAAsVu80RAAcAAABHAQAAAAAAAMLNEQAFAEHkltAACwXHzREABwBB9JbQAAsFzs0RAAIAQYSX0AALBdDNEQAEAEGUl9AACxXUzREABQAAAEHVAQAAAAAA2c0RAAUAQbSX0AALBd7NEQAHAEHEl9AACxXlzREABAAAAMgDAAAAAAAA6c0RAAMAQeSX0AALBezNEQABAEH0l9AACwXtzREABgBBhJjQAAsF880RABEAQZSY0AALFQTOEQAGAAAA4AAAAAAAAAAKzhEABQBBtJjQAAsFD84RAAYAQcSY0AALBRXOEQAIAEHUmNAACwUdzhEAAwBB5JjQAAsFIM4RAAQAQfSY0AALBSTOEQAHAEGEmdAACwUrzhEADQBBlJnQAAslOM4RAAYAAACaAwAAAAAAAD7OEQAEAAAALwAAAAAAAABCzhEABABBxJnQAAsFRs4RAAsAQdSZ0AALBVHOEQACAEHkmdAACwVTzhEABwBB9JnQAAsFWs4RAAQAQYSa0AALBV7OEQAGAEGUmtAACwVkzhEACwBBpJrQAAsFb84RAAQAQbSa0AALFXPOEQALAAAA2iEAAAAAAAB+zhEABABB1JrQAAsVgs4RAA4AAABaKQAAAAAAAJDOEQAGAEH0mtAACwWWzhEABABBhJvQAAsFms4RAA4AQZSb0AALFajOEQAHAAAAvgAAAAAAAACvzhEABABBtJvQAAsFs84RAAQAQcSb0AALFbfOEQAGAAAAmiEAAAAAAAC9zhEAAwBB5JvQAAsFwM4RAAQAQfSb0AALBcTOEQAFAEGEnNAACwXJzhEACABBlJzQAAsV0c4RAA8AAAC2IQAAAAAAAODOEQADAEG0nNAACwXjzhEABgBBxJzQAAsF6c4RAA4AQdSc0AALBffOEQAFAEHknNAACwX8zhEACgBB9JzQAAsFBs8RAAQAQYSd0AALBQrPEQAOAEGUndAACwUYzxEABQBBpJ3QAAsFHc8RAAQAQbSd0AALBSHPEQADAEHEndAACwUkzxEAAwBB1J3QAAsFJ88RAAQAQeSd0AALBSvPEQAEAEH0ndAACwUvzxEABgBBhJ7QAAsVNc8RAAYAAACQIgAAAAAAADvPEQADAEGkntAACwU+zxEACABBtJ7QAAsFRs8RAAUAQcSe0AALBUvPEQAIAEHUntAACwVTzxEAAwBB5J7QAAsFVs8RAAMAQfSe0AALFVnPEQAGAAAAcwEAAAAAAABfzxEADQBBlJ/QAAslbM8RAA0AAABwKQAAAAAAAHnPEQAHAAAApAAAAAAAAACAzxEAAwBBxJ/QAAsFg88RAAcAQdSf0AALFYrPEQAIAAAAbiYAAAAAAACSzxEACABB9J/QAAsFms8RAAUAQYSg0AALFZ/PEQAEAAAAJtUBAAAAAACjzxEABQBBpKDQAAsVqM8RAAYAAAB/IgAAAAAAAK7PEQADAEHEoNAACwWxzxEACABB1KDQAAsVuc8RAAQAAABKIgAAAAAAAL3PEQADAEH0oNAACwXAzxEABQBBhKHQAAsFxc8RAAQAQZSh0AALBcnPEQAEAEGkodAACxXNzxEABgAAALMiAAAAAAAA088RABEAQcSh0AALBeTPEQAHAEHUodAACwXrzxEACABB5KHQAAsV888RAAUAAAAsIQAAAAAAAPjPEQAFAEGEotAACwX9zxEAAwBBlaLQAAsU0BEABAAAACHVAQAAAAAABNARAAQAQbSi0AALBQjQEQAEAEHEotAACxUM0BEABAAAAK8qAAAAAAAAENARAAMAQeSi0AALBRPQEQAEAEH0otAACwUX0BEAAgBBhKPQAAsFGdARAAoAQZSj0AALBSPQEQALAEGko9AACwUu0BEAAwBBtKPQAAsFMdARAAUAQcSj0AALFTbQEQAGAAAAQiIAADgDAAA80BEABABB5KPQAAsFQNARAAIAQfSj0AALBULQEQAIAEGEpNAACwVK0BEABABBlKTQAAsFTtARAAUAQaSk0AALFVPQEQAJAAAAzikAAAAAAABc0BEADwBBxKTQAAsFa9ARAAgAQdSk0AALFXPQEQAJAAAAoSoAAAAAAAB80BEACABB9KTQAAsVhNARAAgAAAAEIgAAAAAAAIzQEQALAEGUpdAACwWX0BEACABBpKXQAAsFn9ARAA4AQbSl0AALBa3QEQAPAEHEpdAACwW80BEAAgBB1KXQAAsFvtARABEAQeSl0AALBc/QEQAFAEH0pdAACwXU0BEABQBBhKbQAAsV2dARAAwAAACBIgAAAAAAAOXQEQAMAEGkptAACwXx0BEAAwBBtKbQAAsF9NARAAIAQcSm0AALBfbQEQAQAEHUptAACwUG0REAAwBB5KbQAAsFCdERAAMAQfSm0AALBQzREQAIAEGEp9AACwUU0REAAwBBlKfQAAsFF9ERAAIAQaSn0AALBRnREQALAEG0p9AACxUk0REABgAAANYhAAAAAAAAKtERAAMAQdSn0AALBS3REQAGAEHkp9AACwUz0REABQBB9KfQAAsVONERAA8AAACoIgAAAAAAAEfREQADAEGUqNAACwVK0REABQBBpKjQAAsFT9ERAAIAQbSo0AALBVHREQAMAEHEqNAACwVd0REABQBB1KjQAAsFYtERAAQAQeSo0AALBWbREQAFAEH0qNAACwVr0REABABBhKnQAAsFb9ERAAYAQZSp0AALBXXREQADAEGkqdAACxV40REABQAAAOgqAAAAAAAAfdERAAUAQcSp0AALBYLREQAFAEHUqdAACwWH0REACgBB5KnQAAsFkdERAAQAQfSp0AALBZXREQADAEGEqtAACwWY0REACABBlKrQAAsFoNERAAMAQaSq0AALBaPREQAIAEG0qtAACwWr0REACQBBxKrQAAsFtNERAAUAQdSq0AALFbnREQAFAAAANikAAAAAAAC+0REACgBB9KrQAAsFyNERAAIAQYSr0AALBcrREQALAEGUq9AACwXV0READABBpKvQAAsF4dERAAYAQbSr0AALBefREQALAEHEq9AACxXy0REABgAAAPkAAAAAAAAA+NERAAUAQeSr0AALBf3REQAEAEH0q9AACxUB0hEACAAAAIIiAADSIAAACdIRAA4AQZSs0AALBRfSEQAEAEGkrNAACwUb0hEAEABBtKzQAAsVK9IRAAUAAAAPBAAAAAAAADDSEQAEAEHUrNAACwU00hEAAwBB5KzQAAsVN9IRAAUAAAABIgAAAAAAADzSEQAFAEGErdAACwVB0hEABQBBlK3QAAsFRtIRAAcAQaSt0AALBU3SEQAEAEG0rdAACwVR0hEABABBxK3QAAsFVdIRAAMAQdSt0AALBVjSEQAFAEHkrdAACwVd0hEAAwBB9K3QAAsFYNIRAAgAQYSu0AALBWjSEQAEAEGUrtAACyVs0hEACgAAANoiAAAAAAAAdtIRAAQAAADRIgAAAAAAAHrSEQAFAEHErtAACwV/0hEAAgBB1K7QAAsFgdIRAAUAQeSu0AALBYbSEQADAEH0rtAACwWJ0hEABwBBhK/QAAsFkNIRAA0AQZSv0AALFZ3SEQAHAAAAkykAAAAAAACk0hEACwBBtK/QAAsFr9IRAAYAQcSv0AALBbXSEQAFAEHUr9AACwW60hEAAwBB5K/QAAsFvdIRAAIAQfSv0AALBb/SEQADAEGEsNAACwXC0hEAAgBBlLDQAAsFxNIRAAYAQaSw0AALBcrSEQAKAEG0sNAACwXU0hEADQBBxLDQAAsF4dIRAAMAQdSw0AALBeTSEQAFAEHksNAACwXp0hEABABB9LDQAAsF7dIRAAIAQYSx0AALBe/SEQAJAEGUsdAACwX40hEAAwBBpLHQAAsF+9IRAAQAQbSx0AALFf/SEQAHAAAASCIAAAAAAAAG0xEABABB1LHQAAsFCtMRAAwAQeSx0AALFRbTEQAGAAAAxyEAAAAAAAAc0xEABQBBhLLQAAsVIdMRAAgAAAA1KgAAAAAAACnTEQAEAEGkstAACwUt0xEABABBtLLQAAsFMdMRAAMAQcSy0AALBTTTEQADAEHUstAACwU30xEABQBB5LLQAAsFPNMRAAYAQfSy0AALBULTEQAFAEGEs9AACyVH0xEABwAAAFQiAAAAAAAATtMRAAcAAAB8KQAAAAAAAFXTEQAGAEG0s9AACxVb0xEABwAAAAQiAAAAAAAAYtMRAAQAQdSz0AALBWbTEQAQAEHks9AACwV20xEACwBB9LPQAAsFgdMRAA0AQYS00AALFY7TEQAGAAAAtwAAAAAAAACU0xEABwBBpLTQAAslm9MRAAcAAAATIgAAAAAAAKLTEQAGAAAAvyEAAAAAAACo0xEACwBB1LTQAAsFs9MRAAUAQeS00AALBbjTEQADAEH0tNAACxW70xEABAAAADwiAAAAAAAAv9MRABEAQZS10AALBdDTEQADAEGktdAACyXT0xEABgAAAP0qAAAAAAAA2dMRAAUAAAA9IgAAMQMAAN7TEQABAEHUtdAACwXf0xEABABB5LXQAAsF49MRAAoAQfS10AALFe3TEQAEAAAAqioAAAAAAADx0xEABQBBlLbQAAsF9tMRAAgAQaS20AALFf7TEQAFAAAApwAAAAAAAAAD1BEABABBxLbQAAsFB9QRAAUAQdS20AALJQzUEQAHAAAA9QEAAAAAAAAT1BEABQAAAK0lAAAAAAAAGNQRAAUAQYS30AALBR3UEQAPAEGUt9AACwUs1BEABgBBpLfQAAsFMtQRAAMAQbS30AALBTXUEQADAEHEt9AACwU41BEAAgBB1LfQAAsFOtQRAAgAQeS30AALBULUEQAGAEH0t9AACwVI1BEACwBBhLjQAAsVU9QRAAYAAAAeIAAAAAAAAFnUEQAIAEGkuNAACwVh1BEABABBtLjQAAsFZdQRAAQAQcS40AALBWnUEQADAEHUuNAACwVs1BEADgBB5LjQAAsFetQRAAMAQfS40AALBX3UEQADAEGEudAACwWA1BEAAwBBlLnQAAsFg9QRAAMAQaS50AALBYbUEQAJAEG0udAACwWP1BEABgBBxLnQAAsFldQRAAUAQdS50AALBZrUEQAFAEHkudAACwWf1BEABABB9LnQAAsFo9QRAAQAQYS60AALBafUEQAHAEGUutAACwWu1BEABQBBpLrQAAsFs9QRAAQAQbS60AALFbfUEQAPAAAAJiIAAAAAAADG1BEABABB1LrQAAsFytQRAAoAQeS60AALBdTUEQAFAEH0utAACxXZ1BEAEwAAAFUpAAAAAAAA7NQRAAMAQZS70AALBe/UEQAMAEGku9AACxX71BEABgAAAG4mAAAAAAAAAdURABAAQcS70AALBRHVEQAJAEHUu9AACwUa1READABB5LvQAAsFJtURAAgAQfS70AALBS7VEQAIAEGEvNAACwU21REABQBBlLzQAAsVO9URAAYAAAB0AQAAAAAAAEHVEQAJAEG0vNAACwVK1REABQBBxLzQAAsFT9URABIAQdS80AALBWHVEQAJAEHkvNAACxVq1REABQAAAK8AAAAAAAAAb9URAA8AQYS90AALBX7VEQAIAEGUvdAACwWG1REAAwBBpL3QAAs1idURABMAAACTIgAAAAAAAJzVEQAGAAAAtAAAAAAAAACi1REABgAAAJshAAAAAAAAqNURABcAQeS90AALBb/VEQAGAEH0vdAACwXF1REABQBBhL7QAAsFytURAAQAQZS+0AALBc7VEQADAEGkvtAACwXR1REABgBBtL7QAAsF19URAAYAQcS+0AALBd3VEQAHAEHUvtAACwXk1READABB5L7QAAsF8NURAAUAQfS+0AALBfXVEQAEAEGEv9AACwX51REAAwBBlL/QAAsF/NURAAQAQaW/0AALBNYRAAEAQbS/0AALBQHWEQAFAEHEv9AACwUG1hEABABB1L/QAAsFCtYRABEAQeS/0AALFRvWEQAHAAAAwQAAAAAAAAAi1hEABgBBhMDQAAsFKNYRAAYAQZTA0AALBS7WEQAFAEGkwNAACxUz1hEABQAAADcpAAAAAAAAONYRAAQAQcTA0AALBTzWEQADAEHUwNAA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8tAACwVk4BEABQBBtPLQAAsFaeARAAUAQcTy0AALBW7gEQAJAEHU8tAACxV34BEABwAAABkhAAAAAAAAfuARAAMAQfTy0AALBYHgEQAEAEGE89AACwWF4BEABQBBlPPQAAsFiuARAAQAQaTz0AALBY7gEQASAEG089AACxWg4BEABAAAANAAAAAAAAAApOARAAQAQdTz0AALBajgEQAJAEHk89AACwWx4BEAAgBB9PPQAAsFs+ARAAMAQYT00AALBbbgEQAFAEGU9NAACxW74BEACQAAAOUpAAAAAAAAxOARABIAQbT00AALBdbgEQAGAEHE9NAACwXc4BEAAwBB1PTQAAsF3+ARAAUAQeT00AALBeTgEQAFAEH09NAACwXp4BEABwBBhPXQAAsF8OARAAUAQZT10AALFfXgEQAGAAAA4QAAAAAAAAD74BEAAwBBtPXQAAsF/uARAAwAQcT10AALFQrhEQANAAAApCEAAAAAAAAX4REABgBB5PXQAAsFHeERAAUAQfT10AALBSLhEQADAEGE9tAACwUl4REABgBBlPbQAAsFK+ERAAUAQaT20AALFTDhEQAGAAAAwwMAAAAAAAA24READABBxPbQAAsFQuERAAMAQdT20AALBUXhEQACAEHk9tAACwVH4READABB9PbQAAsFU+ERAAQAQYT30AALBVfhEQAHAEGU99AACwVe4REAFABBpPfQAAsVcuERAA4AAAC/IQAAAAAAAIDhEQALAEHE99AACwWL4REABwBB1PfQAAsFkuERAAYAQeT30AALFZjhEQAHAAAAegEAAAAAAACf4READgBBhPjQAAsFreERAAYAQZT40AALBbPhEQABAEGk+NAACyW04REABwAAAHkBAAAAAAAAu+ERAAUAAACIKgAAAAAAAMDhEQAMAEHU+NAACwXM4REAAgBB5PjQAAsFzuERABAAQfT40AALBd7hEQAHAEGE+dAACwXl4REABABBlPnQAAsF6eERAAMAQaT50AALBezhEQAJAEG0+dAACxX14REABwAAAD0BAAAAAAAA/OERAAUAQdT50AALBQHiEQASAEHk+dAACwUT4hEAAgBB9PnQAAsFFeIRAAIAQYT60AALBRfiEQANAEGU+tAACwUk4hEAAwBBpPrQAAsVJ+IRAAgAAADSIQAAAAAAAC/iEQAGAEHE+tAACwU1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bGluZW93bmVkc2hhcmVkVGVuZHJpbDw+KDogAAAAuVUUAAgAAADBVRQAAgAAAMNVFAACAAAAKQAAAOBVFAABAAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL2xhenlfc3RhdGljLTEuNC4wL3NyYy9pbmxpbmVfbGF6eS5ycwAAAOxVFABhAAAAHgAAABAAAABkAAAABAAAAAQAAABlAAAAZgAAAC9ydXN0Yy9lMDkyZDBiNmI0M2YyZGU5NjdhZjA4ODc4NzMxNTFiYjFjMGIxOGQzL2xpYnJhcnkvc3RkL3NyYy9zeW5jL29uY2UucnN0VhQATAAAABQBAAAyAAAAY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZS9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJraW5nX2xvdF9jb3JlLTAuOC41L3NyYy9wYXJraW5nX2xvdC5ycwAAAPtWFABmAAAAUwEAABcAAAD7VhQAZgAAAG4BAAAXAAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcmtpbmdfbG90X2NvcmUtMC44LjUvc3JjL3BhcmtpbmdfbG90LnJzAACEVxQAZgAAADIBAAAMAAAAZwAAAAgAAAAEAAAAaAAAAFBhcmtpbmcgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcmtpbmdfbG90X2NvcmUtMC44LjUvc3JjL3RocmVhZF9wYXJrZXIvd2FzbS5ycwAyWBQAbQAAABoAAAAJAAAAMlgUAG0AAAAeAAAACQAAADJYFABtAAAAIgAAAAkAAAAyWBQAbQAAACYAAAAJAAAAMlgUAG0AAAAqAAAACQAAAGkAAAAIAAAABAAAAGoAAABrAAAAVVRGOHRlbmRyaWw6IG92ZXJmbG93IGluIGJ1ZmZlciBhcml0aG1ldGljAAAIWRQAJgAAAFZhbGlkYXRpb25GYWlsZWRPdXRPZkJvdW5kcwBxAAAABAAAAAQAAAByAAAAcwAAAHQAAABxAAAABAAAAAQAAAB1AAAAdgAAAHcAAABxAAAABAAAAAQAAAB4AAAAeQAAAHoAAABhbHJlYWR5IGJvcnJvd2VkYXNzZXJ0aW9uIGZhaWxlZDogbWlkIDw9IHNlbGYubGVuKCljYWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlAABxAAAAAAAAAAEAAAALAAAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZQB7AAAACAAAAAQAAAB8AAAAcQAAAAQAAAAEAAAAfQAAAHEAAAAEAAAABAAAAH4AAAB1c2Ugb2Ygc3RkOjp0aHJlYWQ6OmN1cnJlbnQoKSBpcyBub3QgcG9zc2libGUgYWZ0ZXIgdGhlIHRocmVhZCdzIGxvY2FsIGRhdGEgaGFzIGJlZW4gZGVzdHJveWVkbGlicmFyeS9zdGQvc3JjL3RocmVhZC9tb2QucnMAxloUAB0AAAClAgAAIwAAAGZhaWxlZCB0byBnZW5lcmF0ZSB1bmlxdWUgdGhyZWFkIElEOiBiaXRzcGFjZSBleGhhdXN0ZWQA9FoUADcAAADGWhQAHQAAABMEAAARAAAAxloUAB0AAAAZBAAAKgAAAJxZFAAAAAAAOiAAbGlicmFyeS9zdGQvc3JjL2lvL2J1ZmZlcmVkL2xpbmV3cml0ZXJzaGltLnJzX1sUAC0AAAABAQAAKQAAAHVuY2F0ZWdvcml6ZWQgZXJyb3JvdGhlciBlcnJvcm91dCBvZiBtZW1vcnl1bmV4cGVjdGVkIGVuZCBvZiBmaWxldW5zdXBwb3J0ZWRvcGVyYXRpb24gaW50ZXJydXB0ZWRhcmd1bWVudCBsaXN0IHRvbyBsb25naW52YWxpZCBmaWxlbmFtZXRvbyBtYW55IGxpbmtzY3Jvc3MtZGV2aWNlIGxpbmsgb3IgcmVuYW1lZGVhZGxvY2tleGVjdXRhYmxlIGZpbGUgYnVzeXJlc291cmNlIGJ1c3lmaWxlIHRvbyBsYXJnZWZpbGVzeXN0ZW0gcXVvdGEgZXhjZWVkZWRzZWVrIG9uIHVuc2Vla2FibGUgZmlsZW5vIHN0b3JhZ2Ugc3BhY2V3cml0ZSB6ZXJvdGltZWQgb3V0aW52YWxpZCBkYXRhaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzdGFsZSBuZXR3b3JrIGZpbGUgaGFuZGxlZmlsZXN5c3RlbSBsb29wIG9yIGluZGlyZWN0aW9uIGxpbWl0IChlLmcuIHN5bWxpbmsgbG9vcClyZWFkLW9ubHkgZmlsZXN5c3RlbSBvciBzdG9yYWdlIG1lZGl1bWRpcmVjdG9yeSBub3QgZW1wdHlpcyBhIGRpcmVjdG9yeW5vdCBhIGRpcmVjdG9yeW9wZXJhdGlvbiB3b3VsZCBibG9ja2VudGl0eSBhbHJlYWR5IGV4aXN0c2Jyb2tlbiBwaXBlbmV0d29yayBkb3duYWRkcmVzcyBub3QgYXZhaWxhYmxlYWRkcmVzcyBpbiB1c2Vub3QgY29ubmVjdGVkY29ubmVjdGlvbiBhYm9ydGVkbmV0d29yayB1bnJlYWNoYWJsZWhvc3QgdW5yZWFjaGFibGVjb25uZWN0aW9uIHJlc2V0Y29ubmVjdGlvbiByZWZ1c2VkcGVybWlzc2lvbiBkZW5pZWRlbnRpdHkgbm90IGZvdW5kRXJyb3JraW5kAABxAAAAAQAAAAEAAAB/AAAAbWVzc2FnZQBxAAAACAAAAAQAAACAAAAAS2luZE9zY29kZQAAcQAAAAQAAAAEAAAAgQAAAIIAAAAMAAAABAAAAIMAAAAgKG9zIGVycm9yICmcWRQAAAAAAOheFAALAAAA814UAAEAAABsaWJyYXJ5L3N0ZC9zcmMvaW8vc3RkaW8ucnMADF8UABsAAADcAgAAFAAAAGZhaWxlZCBwcmludGluZyB0byAAOF8UABMAAABcWxQAAgAAAAxfFAAbAAAA+AMAAAkAAABzdGRvdXRmb3JtYXR0ZXIgZXJyb3IAAAByXxQADwAAACgAAACEAAAADAAAAAQAAACFAAAAhgAAAIcAAACEAAAADAAAAAQAAACIAAAAiQAAAIoAAABsaWJyYXJ5L3N0ZC9zcmMvc3luYy9vbmNlLnJzwF8UABwAAABOAQAADgAAAHEAAAAEAAAABAAAAIsAAACMAAAAwF8UABwAAABOAQAAMQAAAGFzc2VydGlvbiBmYWlsZWQ6IHN0YXRlX2FuZF9xdWV1ZS5hZGRyKCkgJiBTVEFURV9NQVNLID09IFJVTk5JTkdPbmNlIGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWQAAFBgFAAqAAAAAgAAAMBfFAAcAAAA/wEAAAkAAADAXxQAHAAAAAwCAAA1AAAAUG9pc29uRXJyb3Jsb2NrIGNvdW50IG92ZXJmbG93IGluIHJlZW50cmFudCBtdXRleGxpYnJhcnkvc3RkL3NyYy9zeXNfY29tbW9uL3JlbXV0ZXgucnMAANlgFAAlAAAApwAAAA4AAABsaWJyYXJ5L3N0ZC9zcmMvc3lzX2NvbW1vbi90aHJlYWRfaW5mby5ycwAAABBhFAApAAAAFgAAADMAAABtZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkCgBMYRQAFQAAAGFhFAAOAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJzgGEUABgAAABEAQAACQAAAGxpYnJhcnkvc3RkL3NyYy9wYW5pY2tpbmcucnOoYRQAHAAAAEYCAAAfAAAAqGEUABwAAABHAgAAHgAAAIIAAAAMAAAABAAAAI0AAABxAAAACAAAAAQAAACOAAAAjwAAABAAAAAEAAAAkAAAAJEAAABxAAAACAAAAAQAAACSAAAAkwAAAFVuc3VwcG9ydGVkAHEAAAAEAAAABAAAAJQAAABDdXN0b21lcnJvcgBxAAAABAAAAAQAAACVAAAAVW5jYXRlZ29yaXplZE90aGVyT3V0T2ZNZW1vcnlVbmV4cGVjdGVkRW9mSW50ZXJydXB0ZWRBcmd1bWVudExpc3RUb29Mb25nSW52YWxpZEZpbGVuYW1lVG9vTWFueUxpbmtzQ3Jvc3Nlc0RldmljZXNEZWFkbG9ja0V4ZWN1dGFibGVGaWxlQnVzeVJlc291cmNlQnVzeUZpbGVUb29MYXJnZUZpbGVzeXN0ZW1RdW90YUV4Y2VlZGVkTm90U2Vla2FibGVTdG9yYWdlRnVsbFdyaXRlWmVyb1RpbWVkT3V0SW52YWxpZERhdGFJbnZhbGlkSW5wdXRTdGFsZU5ldHdvcmtGaWxlSGFuZGxlRmlsZXN5c3RlbUxvb3BSZWFkT25seUZpbGVzeXN0ZW1EaXJlY3RvcnlOb3RFbXB0eUlzQURpcmVjdG9yeU5vdEFEaXJlY3RvcnlXb3VsZEJsb2NrQWxyZWFkeUV4aXN0c0Jyb2tlblBpcGVOZXR3b3JrRG93bkFkZHJOb3RBdmFpbGFibGVBZGRySW5Vc2VOb3RDb25uZWN0ZWRDb25uZWN0aW9uQWJvcnRlZE5ldHdvcmtVbnJlYWNoYWJsZUhvc3RVbnJlYWNoYWJsZUNvbm5lY3Rpb25SZXNldENvbm5lY3Rpb25SZWZ1c2VkUGVybWlzc2lvbkRlbmllZE5vdEZvdW5kb3BlcmF0aW9uIHN1Y2Nlc3NmdWx0aW1lIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3Jti2QUACUAAABsaWJyYXJ5L3N0ZC9zcmMvc3lzL3dhc20vLi4vdW5zdXBwb3J0ZWQvdGltZS5ycwC4ZBQALwAAAA0AAAAJAAAAY29uZHZhciB3YWl0IG5vdCBzdXBwb3J0ZWQAAPhkFAAaAAAAbGlicmFyeS9zdGQvc3JjL3N5cy93YXNtLy4uL3Vuc3VwcG9ydGVkL2xvY2tzL2NvbmR2YXIucnMcZRQAOAAAABcAAAAJAAAAY2Fubm90IHJlY3Vyc2l2ZWx5IGFjcXVpcmUgbXV0ZXhkZRQAIAAAAGxpYnJhcnkvc3RkL3NyYy9zeXMvd2FzbS8uLi91bnN1cHBvcnRlZC9sb2Nrcy9tdXRleC5ycwAAjGUUADYAAAAXAAAACQAAAGxpYnJhcnkvc3RkL3NyYy9zeXNfY29tbW9uL3RocmVhZF9wYXJrZXIvZ2VuZXJpYy5ycwDUZRQAMwAAACcAAAAmAAAAaW5jb25zaXN0ZW50IHBhcmsgc3RhdGUAGGYUABcAAADUZRQAMwAAADUAAAAXAAAAcGFyayBzdGF0ZSBjaGFuZ2VkIHVuZXhwZWN0ZWRseQBIZhQAHwAAANRlFAAzAAAAMgAAABEAAABpbmNvbnNpc3RlbnQgc3RhdGUgaW4gdW5wYXJrgGYUABwAAADUZRQAMwAAAGwAAAASAAAA1GUUADMAAAB6AAAAHwAAAA4AAAAQAAAAFgAAABUAAAALAAAAFgAAAA0AAAALAAAAEwAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAA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", - ), - (c) => c.charCodeAt(0), - ); - - const { instance, module } = await load(input, imports); - - wasm = instance.exports; - init.__wbindgen_wasm_module = module; - - return wasm; -} - -export default init; diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.41/build/deno-wasm/deno-wasm.js b/src/vendor/deno.land/x/deno_dom@v0.1.41/build/deno-wasm/deno-wasm.js new file mode 100644 index 00000000000..20185e96bb8 --- /dev/null +++ b/src/vendor/deno.land/x/deno_dom@v0.1.41/build/deno-wasm/deno-wasm.js @@ -0,0 +1,194 @@ +let wasm; + +let WASM_VECTOR_LEN = 0; + +let cachegetUint8Memory0 = null; +function getUint8Memory0() { + if ( + cachegetUint8Memory0 === null || + cachegetUint8Memory0.buffer !== wasm.memory.buffer + ) { + cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachegetUint8Memory0; +} + +let cachedTextEncoder = new TextEncoder("utf-8"); + +const encodeString = typeof cachedTextEncoder.encodeInto === "function" + ? function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); + } + : function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length, + }; + }; + +function passStringToWasm0(arg, malloc, realloc) { + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length); + getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len); + + const mem = getUint8Memory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3); + const view = getUint8Memory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +let cachegetInt32Memory0 = null; +function getInt32Memory0() { + if ( + cachegetInt32Memory0 === null || + cachegetInt32Memory0.buffer !== wasm.memory.buffer + ) { + cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachegetInt32Memory0; +} + +let cachedTextDecoder = new TextDecoder("utf-8", { + ignoreBOM: true, + fatal: true, +}); + +cachedTextDecoder.decode(); + +function getStringFromWasm0(ptr, len) { + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); +} +/** + * @param {string} html + * @returns {string} + */ +export function parse(html) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + var ptr0 = passStringToWasm0( + html, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + var len0 = WASM_VECTOR_LEN; + wasm.parse(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } +} + +/** + * @param {string} html + * @param {string} context_local_name + * @returns {string} + */ +export function parse_frag(html, context_local_name) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + var ptr0 = passStringToWasm0( + html, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + var len0 = WASM_VECTOR_LEN; + var ptr1 = passStringToWasm0( + context_local_name, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + var len1 = WASM_VECTOR_LEN; + wasm.parse_frag(retptr, ptr0, len0, ptr1, len1); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } +} + +async function load(module, imports) { + if (typeof Response === "function" && module instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === "function") { + try { + return await WebAssembly.instantiateStreaming(module, imports); + } catch (e) { + if (module.headers.get("Content-Type") != "application/wasm") { + console.warn( + "`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", + e, + ); + } else { + throw e; + } + } + } + + const bytes = await module.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + } else { + const instance = await WebAssembly.instantiate(module, imports); + + if (instance instanceof WebAssembly.Instance) { + return { instance, module }; + } else { + return instance; + } + } +} + +async function init(input) { + if (typeof input === "undefined") { + input = new URL("deno-wasm_bg.wasm", import.meta.url); + } + const imports = {}; + imports.env = { now() {} }; + + input = Uint8Array.from( + atob( + "AGFzbQEAAAABpoKAgAAlYAAAYAABf2AAAXxgAX8AYAF/AX9gAX8BfmACf38AYAJ/fwF/YAJ/fwF+YAN/f38AYAN/f38Bf2AEf39/fwBgBH9/f38Bf2AFf39/f38AYAV/f39/fwF/YAZ/f39/f38Bf2AHf39/f39/fwBgB39/f39/f38Bf2ALf39/f39/f39/f38Bf2APf39/f39/f39/f39/f39/AX9gE39/f39/f39/f39/f39/f39/f38Bf2AJf39/f39/fn5+AGAFf39/f34AYAZ/f39/fn8AYAR/f39+AGADf39+AGADf39+AX9gBX9/fn5/AX9gAn9+AGACf34Bf2ADf35/AGADf35/AX9gBH9+f38Bf2AFf35/fn8AYAJ/fABgBH98f38Bf2ADfn9/AX8Ci4CAgAABA2VudgNub3cAAgOLhYCAAIkFCwkYBgsDDRwECRcLCgkKCQMMCQwFBgcKDQofCQkJGwkGAwoHBwMGDQkKBwoGGQYMAwcHIwMNCg0PCwkJCh4DBwkHCSMKAwoLBAYHBAMGCQYJBgMGBgMDGgYHBgsJBgYJCgYJAwQGGhoYBwggHwYGHAcGBhAJCRwHCgkVBwcKBxYQAwMDCQoMEQcHBwQJDg4DBwMGBwcJBgcGHQoLJA0EBwcLBwQGBgMDBwcKBwYHBwQHBgEJBwcGBwYDDQcYCQsDBwYGBgMHAwcEBwMHBwcHCQkDBiIJCQkJCQkHBwkGBgYGBgYGBwMGBgYJCQkJFAYGBgYGEQMHAwYNBwMKDgsTAwMDAx0JBwcKBwcJBwQSBiEJAwsLCwsLCwcDAwYHAwkDAwMJBgMJBAcHBwMDAwcDBwcDBwcKBwcHAwoDBgcDAw0LBwcDAwMEBwYJCQkJCQcGBgQLBwcHCQYGCQsGBwcHBwcHBw0GCQYHBwcHBwcJBwYHBwcKBgMHBwcKBgcHBwYJBgMGBAYDAwYBAwcECQoHBwcDCgMKCgoKCgoHCgcDBgAHBgcGBAkOBwYHBwcHAwMHAAYEBBoHBwcHBgQGBAcECwMHBwcDBwYECQsGCQYECQMHCgkHBwcHBwYLAwMEBwMDBwYEBAMDBwYHBwQHBgQGBAQHBwcMBgQHBwoHBw0HBwcHBwcDBwMHBwcHBgMEAwQHBwQECQcDBAMfAwYDBAQGBAcHCQkJBwcKCgcEBgcHBwcHBwcHBwcEBAQEBwYGCgcHCgoKCgMHAwEHAwcHBwQEAAkEBAQEBAUHAQEBAAUCBQUFAAcBAQQODAoHBAQFAwMDAwMDAwMDAwMDAwMDAwYDAwMDAwMAAwADAwSHgICAAAFwAa8BrwEFg4CAgAABABUGiYCAgAABfwFBgIDAAAsHgoGAgAAHBm1lbW9yeQIABXBhcnNlANABCnBhcnNlX2ZyYWcAngEfX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcgCrBBFfX3diaW5kZ2VuX21hbGxvYwCzAxJfX3diaW5kZ2VuX3JlYWxsb2MA0gMPX193YmluZGdlbl9mcmVlAPYDCd+CgIAAAQBBAQuuAe4EtgPvBPkD+APwBOkD8QSTA6wB3QLXBPcC1gOvBIAErQSBBKoCqgGJAvIEtQEyjwOqBKgDmwOVBPME/wLiA64E2wOhA4YDyQS7AswB9ASHA5YDrgHpArEC1gLCAqYEggTcA5wDmAHqAvUE+wP2BJcDlAHeAvcEtwP4BLEEgwSzBPkEigGuAqUCkAP6BLAE5wPFAooCxgTPAvsE3gPyA9UDyAL8BNcD8gL9BNgE/gT/BIAFiwGyBIUEtgK3AoEFhwK4Ar8CkQPGAowCggWGAoQBiwODBYED6AOEBd0E1AOKBIgEf9kChgWYA5UB3wK1ArUE4AKVA7YE4QK0BNgDhwTGA98DiQSKA7oCkQHrApkDrwHsAuAE3wTQA/gB3AKkA4sE4QTqA4gFmgOhBOICuQO7BOAD7QKiBPwDkASRBNQCfIkF7QTABH7GAe8CvwSpBMEB4wKjAcoBCqy1kIAAiQXukAICBX8CfiMAQdAHayIEJAAgBCACOgCrBwJAQQAoAsiOUkEESQ0AQQRB2JrAAEEXEPQCRQ0AQQAoAsiOUkEESQ0AIAQgAzYCrAcgBEGwB2pBDGoiBUEBNgIAIARBxAdqIgZBATYCACAEQcyGwAA2ArgHIARBADYCsAcgBEEPNgKEByAEIARBgAdqNgLAByAEIARBrAdqNgKAByAEQZAEaiAEQbAHahBiIARBg4DEADYCyAcgBEGDgMQANgK8ByAEIAQoApQEIgc2ArQHIAQgByAEKAKYBGo2ArAHIARBoARqIARBsAdqEG8CQCAEKAKQBCIIRQ0AIAcgCEEBEJQECyAEQYAHakEMakEONgIAIAVBAjYCACAGQQI2AgAgBEEQNgKEByAEQZCbwAA2ArgHIARBADYCsAcgBCAEQasHajYCiAcgBCAEQaAEajYCgAcgBCAEQYAHajYCwAcgBEGwB2pBBEGMnMAAEIsCIAQoAqAEIgdFDQAgBCgCpAQgB0EBEJQECwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAkH/AXEOFwABAgMEBQYHCAk+Cjc2NQswDA0ODxARAAtBASECIAMtABRBfmpB/wFxIgdBAWpBACAHQQRJG0F/ag4CYmNkC0EBIQIgAy0AFCIHQX5qIgZB/wFxIgVBAWpBACAFQQRJGw4DXV5fcQtBASECIAMtABQiB0F+aiIGQf8BcSIFQQFqQQAgBUEESRsOA1hZWnULQQEhAiADLQAUIgVBfmoiBkH/AXEiB0EBakEAIAdBBEkbDgNWVFV5CyADLQAUIgJBfmpB/wFxIgdBAWpBACAHQQRJGw4DUlBRfQtBASECIAMtABQiBUF+aiIGQf8BcSIHQQFqQQAgB0EESRsOA05MTYABC0EBIQIgAy0AFCIFQX5qQf8BcSIHQQFqQQAgB0EESRsOBUdERsQBRUcLQQAhAiADLQAUIgVBfmpB/wFxIgdBAWpBACAHQQRJG0F+ag4DPkA/QAtBASECIAMtABQiBUF+akH/AXEiB0EBakEAIAdBBEkbDgU8ODk6OzwLQQAhAiADLQAUQX5qQf8BcSIHQQFqQQAgB0EESRtBfmoOAjXiATYLQQEhByADLQAUIgVBfmpB/wFxIgJBAWpBACACQQRJGw4FMi0u0QEv0QELQQEhAiADLQAUIgVBfmpB/wFxIgdBAWpBACAHQQRJGw4FKCUmvwEnKAsgAy0AFCIHQX5qQf8BcSICQQFqQQAgAkEESRsOBSEeHyIgIgtBASEHIAMtABQiBUF+akH/AXEiAkEBakEAIAJBBEkbDgUcFxj9ARn9AQtBASECIAMtABQiBUF+akH/AXEiB0EBakEAIAdBBEkbDgUVEBH/ARL/AQtBASEHIAMtABQiBUF+akH/AXEiAkEBakEAIAJBBEkbDgUOCQqGAguGAgtBASEHIAMtABQiBUF+akH/AXEiAkEBakEAIAJBBEkbDgUBAgOIAgSIAgtBASEHAkACQAJAAkACQCADLQAUIgVBfmpB/wFxIgJBAWpBACACQQRJGw4FAFkBjQICjQILIAVB/wFxRQ0DDIwCCyADLQAMDgIBQIsCCyAAQQA6AAAM3wELIABBAjoAACAAIAMpAgA3AgQgAEEMaiADQQhqKAIANgIAQQAhAgyDAgsCQCADKQMAIglCgoCAgNDLAFENACAJQoKAgICg5gBSDYkCIARBsAdqQRBqIANBEGopAwA3AwAgBEGwB2pBCGogA0EIaikDADcDACAEIAMpAwA3A7AHIAAgAUEGIARBsAdqEAEMigILIARBsAdqQRBqIANBEGopAwA3AwAgBEGwB2pBCGogA0EIaikDADcDACAEIAMpAwA3A7AHIAAgAUEDIARBsAdqEAEMiQILIAVB/wFxRQ0FDIYCCyAEQfAGakEIaiADQQhqKAIANgIAIAQgAykCADcD8AYgACABIARB8AZqEKYCDNsBCyADLQAMDgIBAoQCCyAAQQA6AAAM2QELIABBAjoAACAAIAMpAgA3AgQgAEEMaiADQQhqKAIANgIAQQAhAgz9AQsgBEGwB2pBEGogA0EQaikDADcDACAEQbAHakEIaiADQQhqKQMANwMAIAQgAykDADcDsAcgACABQQYgBEGwB2oQAQyDAgsgAykDAEKCgICAoOYAUg2AAiAEQbAHakEQaiADQRBqKQMANwMAIARBsAdqQQhqIANBCGopAwA3AwAgBCADKQMANwOwByAAIAFBBiAEQbAHahABDIICCyAEQeAGakEIaiADQQhqKAIANgIAIAQgAykCADcD4AYgACABIARB4AZqEJ8CDNUBCyADLQAMDgIBAvsBCyAAQQA6AAAM0wELIABBAjoAACAAIAMpAgA3AgQgAEEMaiADQQhqKAIANgIAQQAhAgz3AQsgBEHQBmpBCGogA0EIaigCADYCACAEIAMpAgA3A9AGIAAgASAEQdAGahCAA0EAIQIM9gELIAMpAwAhCSAFQf8BcUUN9gEgCUKCgICAoOYAUg33ASAAQQA6AAAgAUEWOgBjDNABCyAEQcAGakEIaiADQQhqKAIANgIAIAQgAykCADcDwAYgACABIARBwAZqEJ8CQQEhBwz0AQsgAy0ADA4CAQLtAQsCQCABQThqKAIAQQFGDQAgBEGwB2ogASADEHUgBEGwB2oQ9QELIABBADoAAEEBIQcMzQELIABBAjoAACAAIAMpAgA3AgQgAEEMaiADQQhqKAIANgIADPABCyAEQbAGakEIaiADQQhqKAIANgIAIAQgAykCADcDsAYgACABIARBsAZqEIADDO8BCyADKQMAIQkgBUH/AXFFDegBIAlCgoCAgNDSAFIN6QECQAJAIAFBOGooAgBBAUcNACAEQbAHaiABIAMQdSAEQbAHahD1AQwBCyAEIAEQpQM2ArAHIARBsAdqEPsBIAFBEGooAgANACABQTRqKAIAIAFBOGooAgBCgoCAgNDSABC1Aw0AIAFBFDoAYwsgAEEAOgAAQQEhBwzKAQsgBEGgBmpBCGogA0EIaigCADYCACAEIAMpAgA3A6AGIAAgASAEQaAGahCFAgzJAQsgAy0ADA4CAQLkAQsgAEEAOgAADMcBCyAAQQI6AAAgACADKQIANwIEIABBDGogA0EIaigCADYCAEEAIQIM6wELIARBsAdqQRBqIANBEGopAwA3AwAgBEGwB2pBCGogA0EIaikDADcDACAEIAMpAwA3A7AHIAAgAUEGIARBsAdqEAEM8QELIAMpAwAhCSAFQf8BcUUN3wEgCUKCgICAoOYAUg3gAQJAAkAgAUEQaigCAA0AIAFBFToAYwwBCyAEQbAHaiABIAMQdSAEQbAHahD1AQsgAEEAOgAADMQBCyAEQbAHakEQaiADQRBqKQMANwMAIARBsAdqQQhqIANBCGopAwA3AwAgBCADKQMANwOwByAAIAFBBiAEQbAHahABDO8BCyAEQbAHakEQaiADQRBqKQMANwMAIARBsAdqQQhqIANBCGopAwA3AwAgBCADKQMANwOwByAAIAFBBiAEQbAHahABDO4BCwJAIAFBNGooAgAgAUE4aigCABDVAkUNACAEQbAHaiABIAMQdSAEQbAHahD1ASABQoKAgIDgBxCaARogARCSAQJAIAFBHGooAgAiAkUNACABIAJBf2o2AhwLIAEgARBJQf8BcToAYyABEEkhAiAAQQM6AAAgAEEYaiADQRBqKQMANwMAIABBEGogA0EIaikDADcDACAAIAMpAwA3AwggACACQf8BcToAAQzuAQsgAEEAOgAAQQEhBwzBAQsgAykDACEJIAdB/wFxRQ3VASAJQoKAgIDgB1IN1AEM1gELIAdB/wFxDdMBDNgBCyADLQAUIgJBAk8N0QEgAykDACEJIAJFDdABAkACQCAJQoGAgICA0gBVDQACQCAJQoGAgICAN1UNACAJQoKAgIDQBVENAiAJQoKAgIDwMVIN1AEMAgsgCUKCgICAgDdRDQEgCUKCgICAkM0AUg3TAQwBCwJAIAlCgYCAgNDyAFUNACAJQoKAgICA0gBRDQEgCUKCgICA0NsAUg3TAQwBCyAJQoKAgIDQ8gBRDQAgCUKCgICAwPUAUg3SAQsgBEGAB2pBEGogA0EQaikDADcDACAEQYAHakEIaiADQQhqKQMANwMAIAQgAykDADcDgAcgBEGwB2ogASAEQYAHahB2IARBsAdqEPUBIAQpA4AHIglCA4NQDTYMzgELIARBwAVqQQhqIANBCGooAgA2AgAgBCADKQIANwPABSAAIAEgBEHABWoQnwJBASEHDOIBCyAEQbAFakEIaiADQQhqKAIANgIAIAQgAykCADcDsAUgACABIARBsAVqEIADQQEhB0EAIQIM4QELIARBsAdqQRBqIANBEGopAwA3AwAgBEGwB2pBCGog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IAAgAykCADcCBCAAQQxqIANBCGooAgA2AgAMwAELIARBgAFqQQhqIANBCGooAgA2AgAgBCADKQIANwOAASAAIAEgBEGAAWoQgAMMvwELIAMpAwAhCSAFQf8BcUUNMCAJQoKAgIDgB1INMiAEQbAHakEQaiADQRBqKQMANwMAIARBsAdqQQhqIANBCGopAwA3AwAgBCADKQMANwOwByAAIAFBAyAEQbAHahABDMYBCyAEQbAHakEQaiADQRBqKQMANwMAIARBsAdqQQhqIANBCGopAwA3AwAgBCADKQMANwOwByAAIAFBAyAEQbAHahABDMUBCwJAAkAgAy0ADA4CAAEtCyAAQQI6AAAgACADKQIANwIEIABBDGogA0EIaigCADYCAAy9AQsgBEGwB2pBEGogA0EQaikDADcDACAEQbAHakEIaiADQQhqKQMANwMAIAQgAykDADcDsAcgACABQQMgBEGwB2oQAQzEAQsgAykDACEJIAJB/wFxRQ0pIAlCgoCAgLDFAFINKiAEIAEQpQM2ArAHIARBsAdqEPsBIABBADoAACABQQM6AGMMHwsgBEHAAGpBCGogA0EIaigCADYCACAEIAMpAgA3A0AgACABIARBwABqEJ8CQQEhBwy7AQsCQAJAIAMtAAwOAgABJQsgAEECOgAAIAAgAykCADcCBCAAQQxqIANBCGooAgA2AgAMugELIARBMGpBCGogA0EIaigCADYCACAEIAMpAgA3AzAgACABIARBMGoQgAMMuQELIAMpAwAhCSAFQf8BcUUNIQJAIAlCgoCAgOAHUQ0AIAlCgoCAgPAGUg0kIAQgARClAzYCsAcgBEGwB2oQ+wEgAEEAOgAAIAFBBToAY0EBIQcMugELIARBgAdqQRBqIANBEGopAwA3AwAgBEGAB2pBCGogA0EIaikDADcDACAEIAMpAwA3A4AHAkACQCABQTRqKAIAIAFBOGooAgAQ1QJFDQAgARCaAiABQoKAgIDgBxB3IAEQkgECQCABQRxqKAIAIgdFDQAgASAHQX9qNgIcCyABIAEQSUH/AXE6AGMMAQsgBEGwB2ogASAEQYAHahB2IARBsAdqEPUBC0EAIQcgAEEAOgAAIARBgAdqEOYBDLkBCyAHQf8BcUUNAgwcCyAEQSBqQQhqIANBCGooAgA2AgAgBCADKQIANwMgIAAgASAEQSBqEJ8CQQEhBwy3AQsCQAJAIAMtAAwOAgABHAsgAEECOgAAIAAgAykCADcCBCAAQQxqIANBCGooAgA2AgAMtgELIABBADoAAAwZCwJAIAMpAwAiCUKCgICA8AZRDQACQCAJQoKAgICg5gBRDQAgA0EVaiEFIANBCGohAgwcCyAEQbAHakEQaiADQRBqKQMANwMAIARBsAdqQQhqIANBCGopAwA3AwAgBCADKQMANwOwByAAIAFBBiAEQbAHahABDL0BCyAEQbAHakEIaiADQRBqKAIANgIAIAQgAykDCDcDsAdBACEHIAFBAEKCgICA8ABCgoCAgPAGIARBsAdqEB8hBQJAIAEoAghFDQAgAUEIahD7AQsgAUEDOgBjIAEgBTYCCCAAQQA6AAAMtQELIAdB/wFxRQ0CDBMLIARBEGpBCGogA0EIaigCADYCACAEIAMpAgA3AxAgACABIARBEGoQpgJBASEHDLMBCwJAAkAgAy0ADA4CAAETCyAAQQI6AAAgACADKQIANwIEIABBDGogA0EIaigCADYCAAyyAQsgAEEAOgAADBULAkAgAykDACIJQoKAgICg5gBRDQAgA0EVaiEFIANBCGohAgwSCyAEQbAHakEQaiADQRBqKQMAIgk3AwAgBEGwB2pBCGogA0EIaikDACIKNwMAIAQgAykDADcDsAcgBEGAB2pBCGogCT4CACAEIAo3A4AHIAEgBEGAB2oQjwIgAEEAOgAAIAFBAjoAYyAEQbAHahDEAkEAIQcMsQELIARBCGogA0EIaigCADYCACAEIAMpAgA3AwAgACABIAQQpgJBASEHDLABCwJAAkAgAy0ADA4CAAECCyAAQQI6AAAgACADKQIANwIEIABBDGogA0EIaigCADYCAAyvAQsgAEEAOgAADBILIARBgAdqQRBqIgIgA0EQaikDADcDACAEQYAHakEIaiIHIANBCGopAwA3AwAgBCADKQMANwOAByABQd8Aai0AAA0MIARBsAdqIAEgBEGAB2oQdSAEQbAHahD1ASABQdgAakEAOgAAIAFBADoAZAwMCyAEQZgHakEIaiADQQhqKAIANgIAIAQgAykCADcDmAcgACABIARBmAdqEKYCDIgBCyAJpyICIAIoAgxBAWo2AgwgBCkDgAchCQyXAQsgBSAHQeSpwAAQywIACyAEIAEQpQM2ArAH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DHoLIARBuAdqIANBEGooAgA2AgAgBCADKQMINwOwByABEIACQQEhAiAEIAFBAUKCgICA8ABCgoCAgIDnACAEQbAHahAfNgKAByAEQYAHahD7ASAAQQE6AAAgAUEAOgBlQQAhBwx5CyAEQZgCakEQaiADQRBqKQMANwMAIARBmAJqQQhqIANBCGopAwA3AwAgBCADKQMANwOYAiABEIACIAEQMSABQQA6AGUgACABIARBmAJqQQMQ0wJBACEHDHgLIAFBADoAZSAEQbACakEQaiADQRBqKQMANwMAIARBsAJqQQhqIANBCGopAwA3AwAgBCADKQMANwOwAiAAIAEgBEGwAmpBAxDTAkEAIQcMdwsgBEHIAmpBEGogA0EQaikDADcDACAEQcgCakEIaiADQQhqKQMANwMAIAQgAykDADcDyAIgACABIARByAJqQQMQ0wJBACEHDHYLIARB4AJqQRBqIANBEGopAwA3AwAgBEHgAmpBCGogA0EIaikDADcDACAEIAMpAwA3A+ACIAAgASAEQeACakKCgICA4AAQvQFBACEHDHULIARB+AJqQRBqIANBEGopAwA3AwAgBEH4AmpBCGogA0EIaikDADcDACAEIAMpAwA3A/gCIAAgASAEQfgCakKCgICAIBC9AUEAIQcMdAsgAUKCgICAoAQQcAwkCyABEJsCDCELIARBgAdqQQhqIgcgA0EQaigCADYCACAEIAMpAwg3A4AHIAFBNGooAgAgAUE4aigCAEKCgICAwO4AELUDRQ0aIAQgARClAzYCsAcgBEGwB2oQ+wEMGgsgBEG4B2ogA0EQaigCADYCACAEIAMpAwg3A7AHQQEhAiAEIAFBAUKCgICA8AAgCSAEQbAHahAfNgKAByAEQYAHahD7AQxuCyADKAIIIQUgAygCDCIHIAMoAhAiAhBCQQFzIQYMIgsgBEHwAWpBCGoiByADQRBqKAIANgIAIAQgAykDCDcD8AEgAS0AZEUNFiABEIACDBYLIARBuAdqIANBEGooAgA2AgAgBCADKQMINwOwByABEDFBACEHIAQgAUEAQoKAgIDwACAJIARBsAdqEB82AoAHIARBgAdqEPsBQQEhAiAEQQE2ArAHIAFBPGogBEGwB2oQ0QIMIgsgBEHYAWpBEGogA0EQaikDADcDACAEQdgBakEIaiADQQhqKQMANwMAIAQgAykDADcD2AEgARAxIAFBNGooAgAgAUE4aigCAEKCgICA0AcQWEUNEyAEQbAHakEIakENNgIAIARBvK3AADYCtAcgBEEANgKwByABQcgAaiAEQbAHahDwAiABQoKAgIDQBxAIIAEQMQwTCyAEQbAHakEIakEONgIAIARBya3AADYCtAcgBEEANgKwByABQcgAaiAEQbAHahDwAiABEJsCIAFCgoCAgIA2EJoBGgwfC0EBIQYLIAFBADoAZSAEQbgHaiADQRBqKQMANwMAIAQgAykDCDcDsAcgBEIANwOQBCABQThqKAIAIQcgAUE0aigCACEFIAYNCyAHQQJ0IQcgBUF8aiEIA0AgB0UNECAIIAdqKAIAIgVBGGotAABBBEcNCCAFQShqIgYgBUEwaiIFEMQDDQ0gB0F8aiEHIAYgBRCjA0UNAAwQCwsgBEGwB2pBEGoiByADQRBqKQMANwMAIARBsAdqQQhqIANBCGopAwA3AwAgBCADKQMANwOwBwJAAkAgASgCDEUNACABQTRqKAIAIAFBOGooAgAQ1QJFDQELIAEQgAIgBCkDsAchCSAEQYAHakEIaiAHKAIANgIAIAQgBCkDuAc3A4AHIAQgAUEAQoKAgIDwACAJIARBgAdqEB8iBzYCkAQgAUE0aigCACABQThqKAIAENUCDQgCQCABQQxqIgEoAgBFDQAgARD7AQsgASAHNgIADAoLIARBiAdqQQw2AgAgBEHXrcAANgKEByAEQQA2AoAHIAFByABqIARBgAdqEPACIABBADoAACAEQbAHahDmAUEAIQcMaAsgBEGAB2pBEGogA0EQaikDADcDACAEQYAHakEIaiADQQhqKQMANwMAIAQgAykDADcDgAcgBEGwB2ogASAEQYAHahB2IARBsAdqEPUBAkACQAJAIAEtAGVFDQACQCABQThqKAIAQQJJDQAgAUE0aigCACIHKAIEQoKAgIDw9wAQhAINAwsgAEEAOgAADAELIABBADoAAAsgBEGAB2oQ5gEMbwtBASECIAcoAgQiByAHKAIAQQFqIgU2AgAgBUUNBCAEIAc2AqAEIARBoARqELoBIAFBMGpBARCIAyAEKQOAByEJIARBuAdqIARBkAdqKAIANgIAIAQgBCkDiAc3A7AHIAQgAUEAQoKAgIDwACAJIARBsAdqEB82ApAEIARBkARq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AgALIAlCgoCAgNDLAFENAiAJQoKAgICg5gBRDQELIARBsAdqQRBqIANBEGopAwA3AwAgBEGwB2pBCGogA0EIaikDADcDACAEIAMpAwA3A7AHIAAgASAEQbAHahB1IARBsAdqEFYMBAsgBEGwB2pBEGogA0EQaikDADcDACAEQbAHakEIaiADQQhqKQMANwMAIAQgAykDADcDsAcgACABQQYgBEGwB2oQAQwDCyAEQbAHakEQaiADQRBqKQMANwMAIARBsAdqQQhqIANBCGopAwA3AwAgBCADKQMANwOwByAAIAFBAyAEQbAHahABDAILIARBgAdqQRBqIgIgA0EQaikDADcDACAEQYAHakEIaiIHIANBCGopAwA3AwAgBCADKQMANwOAByAEQbAHaiABIARBgAdqEHUgBEGwB2oQ9QEgAEEYaiACKQMANwMAIABBEGogBykDADcDACAAIAQpA4AHNwMIIABBgww7AQAMAQsgBEGwB2pBEGogA0EQaikDADcDACAEQbAHakEIaiADQQhqKQMANwMAIAQgAykDADcDsAcgACABIARBsAdqEHUgBEGwB2oQVgsgBEHQB2okAAu6kwECDX8BfiMAQcACayIDJAACQAJAAkACQAJAIAEoAoABIgRFDQAgAUEANgKAAUEBIQUCQAJAAkAgBCABIAIQDUH/AXEOAwIBAAILIANB2AFqIARBxAAQxAQaIANBsAJqIANB2AFqEPEBIAEgAykDsAIgAy0AuAIQPiAEQcQAQQQQlARBACEFDAYLQQAhBQsCQCABKAKAASICRQ0AAkAgAigCAEUNAAJAIAIoAgQiBkEQSQ0AIAZBfnEhBwJAAkAgBkEBcQ0AIAJBDGooAgAiBkEIaiICIAZPDQFBACgCoLZRQQAoAqS2UUGossAAEO4CAAsgByAHKAEAIgJBf2o2AQAgAkEBRw0BIAcoAgQiBkEIaiICIAZJDQULIAcgAkF/akF4cUEIakEEEJQECyABKAKAASECCyACQcQAQQQQlAQLIAEgBDYCgAEMAwtBACgCyI5SQQNNDQEgA0HkAWpBATYCACADQewBakEBNgIAIANB9LvAADYC4AEgA0EANgLYASADQRg2ArQCIAMgAUGkAmo2ArACIAMgA0GwAmo2AugBIANB2AFqQQRB/LvAABCLAgwBC0EAKAKgtlFBACgCpLZRQaiywAAQ7gIACyABQaQCaiEGAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAKQCDisxACsqKSgBJwIlJCMDIiEgHx4dHBsaGRgXFhUUExIREA8OBAUGDQwKCQgHMQsgA0HIAWogASACQoHIABBpIAMoAsgBIgRBAkYNKyABQewBaiEIIANB2AFqQQRyIQcDQCADKALMASEFAkACQAJAAkACQCAEDQAgBQ0DIAEtAOYBDQFBACEFQcC2wAAhBEENIQkMAgsgAyADKQPQATcD4AEgAyAFNgLcASADQQM2AtgBIAEgA0HYAWoQ5wEMAwsgA0ECNgLkASADQbC2wAA2AuABIANBAjYC7AEgA0EANgLYASADQRg2ArwCIAMgBjYCuAIgA0EXNgK0AiADIAg2ArACIAMgA0GwAmo2AugBIANBuAFqIANB2AFqEGIgAygCuAEhBCADKAK8ASEJIAMoAsABIQpBASEFCyADIAo2AugBIAMgCTYC5AEgAyAENgLgASADIAU2AtwBIANBBjYC2AEgASADQdgBahDnASADQgA3ArQCIANBDzYCsAIgA0Hv//YFNgK4ASADQbACaiADQbgBakEDEBwgB0EIaiADQbACakEIaigCADYCACAHIAMpA7ACNwIAIANBAzYC2AEgASADQdgBahDnAQwBCyABIAUQpQELIANByAFqIAEgAkKByAAQaSADKALIASIEQQJHDQAMLAsLAkACQCABQaUCai0AACIFQQJJDQACQAJAAkAgASACELADIgJBX2oODwIEBAQEBAQEBAQEBAQEAQALIAJBgIDEAEYNKAwDCyABELICIAEgBToApQIgAUEHOgCkAkEAIQUMNQsgBUEERw0BIAFBPBClASABQSEQpQEgAUEJOwGkAkEAIQUMNAsgASACELADIQICQCAFRQ0AIAJBgIDEAEYNJgJAIAJBL0cNACABELICIAFBLxClASABQQ06AKQCQQAhBQw1CyABQYUCOwGkAiABQQE6AKcCQQAhBQw0CwJAAkACQCACQS9GDQAgAkGAgMQARg0oIAIQzgMiBUGAgMQARw0BIAFBPBClASABQQE6AKcC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aiICEGQgAUGgAmogA0GIAmooAgA2AgAgAUGYAmogA0GAAmopAwA3AgAgAUGQAmogA0HYAWpBIGopAwA3AgAgAUGIAmogA0HwAWopAwA3AgAgAUGAAmogA0HoAWopAwA3AgAgAUH4AWogA0HgAWopAwA3AgAgASADKQPYATcC8AEgAiAGQSBzIAYgBkG/f2pBGkkbEFkgAUEfOgCkAkEAIQUMIwsgARDSASADQdgBahDmAyABQfABaiICEGQgAUGgAmogA0GIAmooAgA2AgAgAUGYAmogA0GAAmopAwA3AgAgAUGQAmogA0H4AWopAwA3AgAgAUGIAmogA0HwAWopAwA3AgAgAUGAAmogA0HoAWopAwA3AgAgAUH4AWogA0HgAWopAwA3AgAgASADKQPYATcC8AEgAkH9/wMQWSABQR86AKQCQQAhBQwjCyABENIBIANB2AFqEOYDIAFB8AFqEGQgAUGgAmoiAiADQYgCaigCADYCACABQZgCaiADQYACaikDADcCACABQZACaiADQfgBaikDADcCACABQYgCaiADQfABaikDADcCACABQYACaiADQegBaikDADcCACABQfgBaiADQeABaikDADcCACABIAMpA9gBNwLwASACQQE6AAAgARDLASABQQA6AKQCQQAhBQwiCwJAIAEgAhCwAyIFQXdqIgJBF0sNAEEBIAJ0QYuAgARxRQ0AIAZBHjoAAEEAIQUMIgsgBUGAgMQARg0ZIAEQ0gEgAUEeOgCkAiABQQE6AKcCQQAhBQwhCwJAAkACQAJAAkAgASACELADIgJBU2oOEgIBAQEBAQEBAQEBAQEBAQEBAwALIAJFDQMgAkGAgMQARg0cCyABQagBaiIEQaS8wABBAxAcQQAhBSADQQA2AtgBIANBsAFqIAIgA0HYAWoQ1QEgBCADKAKwASADKAK0ARAcIAFBGToApAIMIgsgAUGoAWpBpLzAAEEDEBwgAUEaOgCkAkEAIQUMIgsgASkCqAEhECABQQ82AqgBIANB5AFqIAFBsAFqKAIANgIAIAFBrAFqQgA3AgAgA0ECNgLYASADIBA3AtwBIAEgA0HYAWoQ5wEgAUEAOgCkAkEAIQUMIQsgARDSASABQagBakGnvMAAQQYQHCABQRk6AKQCQQAhBQwgCyABQagBaiEKIAFB7AFqIQgDQAJAAkAgAS0ApwINACACEKQBIgVBgIDEAEYNGiABIAUgAhB5IQcMAQsgAUEAOgCnAiABKALsASEHCwJAIAdBLUYNAAJAAkACQAJAIAdBPUoNACAHRQ0DIAdBIUcNASABENIBIAFBHDoApAJBACEFDCULIAdBPkYNAUEBIQUgB0GAgMQARg0kCyABENIBIApBrbzAAEECEBxBACEFIANBADYC2AEgA0GoAWogByADQdgBahDVASAKIAMoAqgBIAMoAqwBEBwgAUEZOgCkAgwiCyADQeQBaiAKQQhqKAIANgIAIAopAgAhECABQawBakIANwIAIAFBDzYCqAEgA0ECNgLYASADIBA3AtwBIAEgA0HYAWoQ5wEgAUEAOgCkAkEAIQUMIgsgARDSASAKQa+8wABBBRAcIAFBGToApAJBACEFDCELAkACQCABLQDmAQ0AQQAhBUHAtsAAIQRBDSEHDAELIANBAjYC5AEgA0GwtsAANgLgASADQQI2AuwBIANBADYC2AEgA0EYNgK8AiADIAY2ArgCIANBFzYCtAIgAyAINgKwAiADIANBsAJqNgLoASADQcgBaiADQdgBahBiIAMoAsgBIQQgAygCzAEhByADKALQASEJQQEhBQsgAyAJNgLoASADIAc2AuQBIAMgBDYC4AEgAyAFNgLcASADQQY2AtgBIAEgA0HYAWoQ5wEgA0EtNgLYASAKIANB2AFqQQEQHAwACwsCQCABIAIQsAMiAkUNAAJAIAJBLUYNACACQYCAxABGDRggA0EtNgLYASABQagBaiIFIANB2AFqQQEQHCADQQA2AtgBIANBoAFqIAIgA0HYAWoQ1QEgBSADKAKgASADKAKkARAcIAFBGToApAJBACEFDCALIAZBGzoAAEEAIQUMHwsgARDSASABQagBakG0vMAAQQQQHCABQRk6AKQCQQAhBQweCyABQagBaiEEIAFB7AFqIQgDQAJAAkAgAS0ApwINACACEKQBIgVBgIDEAEYNGCABIAUgAhB5IQUMAQsgAUEAOgCnAiABKALsASEFCwJAIAVFDQACQCAFQS1GDQAgBUGAgMQARg0YIANBADYC2AECQAJAIAVBgAFJDQACQCAFQYAQSQ0AAkAgBUGAgARJDQAgAyAFQT9xQYABcjoA2wEgAyAFQRJ2QfABcjoA2AEgAyAFQQZ2QT9xQYABcjoA2gEgAyAF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AEIAIRAMAQsgCEF/akH/////AHEiAEEBaiICQQdxIQMCQAJAIABBB08NAEIAIRAgBSEADAELIAVB+ABqIQAgAkH4////AXEhAkIAIRADQCAAKQMAIABBcGopAwAgAEFgaikDACAAQVBqKQMAIABBQGopAwAgAEGwf2opAwAgAEGgf2opAwAgAEGQf2opAwAgEHx8fHx8fHx8IRAgAEGAAWohACACQXhqIgINAAsgAEGIf2ohAAsgA0UNACAAQQhqIQADQCAAKQMAIBB8IRAgAEEQaiEAIANBf2oiAw0ACwsgASAQNwOAAiABQbgCakEMakEBNgIAIAFBuAJqQRRqQQA2AgAgAUHstMAANgLAAiABQcyxwAA2AsgCIAFBADYCuAIgAUG4AmoQqAEgAUG4AWpBDGoiAEECNgIAIAFBuAFqQRRqIgNBATYCACABQRo2AqQCIAEgBDYCoAIgAUGUtcAANgLAASABQQE2ArwBIAFBAzoA1AIgAUKAgICAgAQ3AswCIAFCgICAgMABNwLEAiABQoCAgIAgNwO4AiABIAFBoAJqNgLIASABIAFBuAJqNgK4ASABQbgBahCoASAAQQI2AgAgA0EBNgIAIAFBGjYCpAIgAUHAtcAANgLAASABQQE2ArwBIAEgAUGAAmo2AqACIAFBAzoA1AIgAUKAgICAgAQ3AswCIAFCgICAgMABNwLEAiABQoCAgIAgNwO4AiABIAFBoAJqNgLIASABIAFBuAJqNgK4ASABQbgBahCoASABKALwASEKAkAgCEUNACAFIAhBBHRqIQggBSEAA0AgAC0AACIDQStGDQEgAC0AASECIAEgACkDCCIQNwOQAiABIAI6AIkCIAEgAzoAiAIgASAQukQAAAAAAABZQKIgASkDgAK6ozkDmAIgAUEYNgLMASABQRs2AsQBIAFBGjYCvAEgASABQYgCajYCyAEgASABQZgCajYCwAEgASABQZACajYCuAEgAUEDOgCUAyABQoCAgICABDcCjAMgAUECNgKEAyABQoKAgIAgNwP4AiABQQM6APQCIAFBIDYC8AIgAUIENwPoAiABQgE3A+ACIAFCATcD2AIgAUEDOgDUAiABQoCAgICABDcCzAIgAUKAgICAwAE3AsQCIAFCgICAgCA3A7gCIAFBBDYCrAIgAUHYtcAANgKoAiABQQM2ArQCIAFB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IgMkAAJAAkACQAJAIAFBOGooAgAiBEUNACABQTRqKAIAIgVFDQAgBEECdCAFakF8aigCACIEQRhqLQAAQQRHDQECQAJAAkAgBEEoaiAEQTBqEP4CDQAgAUHdAGotAAANAUEAIQVBqKfAACEGQR4hBwwCCyABQShqKAIADQQgAEGDEjsBACABIAEtAGM6AGIgACACKQMANwMIIABBEGogAkEIaikDADcDACAAQRhqIAJBEGopAwA3AwAMBQsgAyACNgI8IANBzABqIgVBATYCACADQdQAaiIGQQE2AgAgA0HMhsAANgJIIANBADYCQCADQQ82AhQgAyADQRBqNgJQIAMgA0E8ajYCECADQSBqIANBwABqEGIgA0GDgMQANgJYIANBg4DEADYCTCADIAMoAiQiBDYCRCADIAQgAygCKGo2AkAgA0EQaiADQcAAahBvAkAgAygCICIHRQ0AIAQgB0EBEJQECyAFQQI2AgAgBkEBNgIAIANBEDYCDCADQZinwAA2AkggA0EANgJAIAMgA0EQajYCCCADIANBCGo2AlAgA0EgaiADQcAAahBiAkAgAygCECIERQ0AIAMoAhQgBEEBEJQECyADKAIgIQYgAygCJCEHIAMoAighCEEBIQULAkAgAUHUAGooAgAiBCABQcwAaiIJKAIARw0AIAkgBBDfASABKAJUIQQLIAFB0ABqKAIAIARBBHRqIgQgCDYCDCAEIAc2AgggBCAGNgIEIAQgBTYCACABIAEoAlRBAWo2AlQgA0EgakEQaiACQRBqKQMANwMAIANBIGpBCGogAkEIaikDADcDACADIAIpAwA3AyACQEEAKALIjlJBAkkNACADQcwAakEBNgIAIANB1ABqQQA2AgAgA0GYpcAANgJIIANBxJfAADYCUCADQQA2AkAgA0HAAGpBAkGgpcAAEIsCCyABQQE6AGcgACABQQYgA0EgahABIAFBADoAZwwDC0GsmcAAQRJBoJ3AABDuAgALQYSMwABBD0GUjMAAEMwDAAtBs6bAAEE0QeimwAAQjQMACyADQeAAaiQAC8EFAgZ/AX4jAEEgayICJAAgAUEobCEBIABBcGohA0EAIQQCQANAIAFFDQEgAiAAQRBqNgIEIAIgAEEIajYCACACQoKAgIAQNwMQIAJCgoCAgJA+NwMYIAIgAkEYajYCDCACIAJBEGo2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QQA6AAAgASABKAJUQQFqNgJUIANB0ABqJAAL0gMBBn8jAEHQAGsiAyQAAkACQCABQd0Aai0AAA0AQQAhBEHMnMAAIQVBECEGDAELIAMgAjYCHCADQTBqQQxqIgRBATYCACADQcQAaiIFQQE2AgAgA0HMhsAANgI4IANBADYCMCADQRE2AgQgAyADNgJAIAMgA0EcajYCACADQSBqIANBMGoQYiADQYOAxAA2AkggA0GDgMQANgI8IAMgAygCJCICNgI0IAMgAiADKAIoajYCMCADQRBqIANBMGoQbgJAIAMoAiAiBkUNACACIAZBARCUBAsgA0EMakEONgIAIARBAjYCACAFQQI2AgAgA0EQNgIEIANBvJzAADYCOCADQQA2AjAgAyABQeMAajYCCCADIANBEGo2AgAgAyADNgJAIANBIGogA0EwahBiAkAgAygCECICRQ0AIAMoAhQgAkEBEJQECyADKAIgIQUgAygCJCEGIAMoAighB0EBIQQLAkAgAUHUAGooAgAiAiABQcwAaiIIKAIARw0AIAggAhDfASABKAJUIQILIAFB0ABqKAIAIAJBBHRqIgIgBzYCDCACIAY2AgggAiAFNgIEIAIgBDYCACAAQQA6AAAgASABKAJUQQFqNgJUIANB0ABqJAALwAMBB38jAEHAAGsiAiQAIAIgATcDCAJAIAFCA4NQRQ0AIAGnIgMgAygCDEEBajYCDCACKQMIIQELAkAgACABEJoBQQFGDQACQAJAIABB3QBqLQAADQBBACEEQbCkwAAhBUEXIQYMAQtBASEEIAJBLGpBATYCACACQTRqQQE2AgAgAkGopMAANgIoIAJBADYCICACQRU2AjwgAiACQThqNgIwIAIgAkEIajYCOCACQRBqIAJBIGoQYiACKAIQIQUgAigCFCEGIAIoAhghBwsCQCAAQdQAaigCACIDIABBzABqIggoAgBHDQAgCCADEN8BIAAoAlQhAwsgAEHQAGooAgAgA0EEdGoiAyAHNgIMIAMgBjYCCCADIAU2AgQgAyAENgIAIAAgACgCVEEBajYCVCACKQMIIQELAkAgAUIDg0IAUg0AIAGnIgAgACgCDCIAQX9qNgIMIABBAUcNAEHMsNEAEIwDIgAgAC0AACIDQQEgAxs6AAACQCADRQ0AIAAgAUGAlOvcAxAbGgsgAEEEaiACKAII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NgJYIAIgAikDODcDUCACQTBqIAAgARACIAIoAjQhBCACKAIwIQUgAkEgaiACQdAAahCfAyACKQMgQoCU69wDfiACNQIofCAHIAApAwh9fCEHAkACQCAAKALEASIGRQ0AIAJB0ABqIAMoAgAgBiACQcgAahA6IAIoAlANACACKAJYIgZFDQAgBiACKAJcQQN0aiIGIAYpAwAgB3w3AwAMAQsgAkEQaiADIAItAEggAi0ASSAHEIABCyAFRQ0ACyAFQX9qDgIBAgELA0AgAkEIaiAAIAEQAiACKAIIIgVFDQALAkAgBUF/ag4CAQABCyACKAIMIQQMAQtBACEECyACQeAAaiQAIAQL0gICA38BfiMAQTBrIgIkAAJAAkACQAJAAkAgACgCACkDACIFpyIDQQNxDgMCAAECCyADQQR2QQ9xIgNBCEkNAyADQQdB3KzRABCkBAALAkAgBUIgiKciA0EHSw0AIANBA3RB/NPCAGohAwwCCyADQQhBzKzRABDLAgALIANBBGohAwsgAygCACEDCyAAQQRqIQQCQAJAIAMNACACQRRqQQE2AgAgAkEcakEBNgIAIAJBgK3RADYCECACQQA2AgggAkHeADYCJCACIAQ2AiAgAiACQSBqNgIYIAEgAkEIahDoAiEADAELIAJBIGpBDGpB3gA2AgAgAkEIakEMakECNgIAIAJBHGpBAjYCACACQfCs0QA2AhAgAkEANgIIIAIgBDYCKCACQeIANgIkIAIgADYCICACIAJBIGo2AhggASACQQhqEOgCIQALIAJBMGokACAAC+cCAgV/An4jAEHAAGsiAyQAAkACQCAALQAIRQ0AIAAoAgAhBEEBIQUMAQsgACgCACEEAkAgAEEEaigCACIGKAIYIgdBBHENAEEBIQUgBigCAEG179EAQb/v0QAgBBtBAkEBIAQbIAYoAgQoAgwRCgANASABIAYgAigCDBEHACEFDAELAkAgBA0AAkAgBigCAEG979EAQQIgBigCBCgCDBEKAEUNAEEBIQVBACEEDAILIAYoAhghBwtBASEFIANBAToAFyADQZTv0QA2AhwgAyAGKQIANwMIIAMgA0EXajYCECAGKQIIIQggBikCECEJIAMgBi0AIDoAOCADIAYoAhw2AjQgAyAHNgIwIAMgCTcDKCADIAg3AyAgAyADQQhqNgIYIAEgA0EY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IAJqIgIgAUkNACAAKAIAIgFBAXQiBCACIAQgAksbIgJBCCACQQhLGyICQX9zQR92IQQCQAJAIAFFDQAgA0EBNgIYIAMgATYCFCADIABBBGooAgA2AhAMAQsgA0EANgIYCyADIAIgBCADQRBqEJQCIAMoAgQhAQJAIAMoAgANACAAIAI2AgAgACABNgIEDAILIANBCGooAgAiAEGBgICAeEYNASAARQ0AIAEgABC8BAALEKADAAsgA0EgaiQAC9ABAQJ/IwBBIGsiAyQAAkACQCABIAJqIgIgAUkNACAAKAIAIgFBAXQiBCACIAQgAksbIgJBCCACQQhLGyICQX9zQR92IQQCQAJAIAFFDQAgA0EBNgIYIAMgATYCFCADIABBBGooAgA2AhAMAQsgA0EANgIYCyADIAIgBCADQRBqEJgCIAMoAgQhAQJAIAMoAgANACAAIAI2AgAgACABNgIEDAILIANBCGooAgAiAEGBgICAeEYNASAARQ0AIAEgABC8BAALEKADAAsgA0EgaiQAC9ABAQJ/IwBBIGsiAyQAAkACQCABIAJqIgIgAUkNACAAKAIAIgFBAXQiBCACIAQgAksbIgJBCCACQQhLGyICQX9zQR92IQQCQAJAIAFFDQAgA0EBNgIYIAMgATYCFCADIABBBGooAgA2AhAMAQsgA0EANgIYCyADIAIgBCADQRBqEP4BIAMoAgQhAQJAIAMoAgANACAAIAI2AgAgACABNgIEDAILIANBCGooAgAiAEGBgICAeEYNASAARQ0AIAEgABC8BAALEKADAAsgA0EgaiQAC+cBAQF/IwBBEGsiEyQAIAAoAgAgASACIAAoAgQoAgwRCgAhAiATQQA6AA0gEyACOgAMIBMgADYCCCATQQhqIAMgBCAFIAYQjgEgByAIIAkgChCOASALIAwgDSAOEI4BIA8gECARIBIQjgEhASATLQAMIQICQAJAIBMtAA0NACACQf8BcUEARyEADAELQQEhACACQf8BcQ0AAkAgASgCACIALQAYQQRxDQAgACgCAEG779EAQQIgACgCBCgCDBEKACEADAELIAAoAgBBuu/RAEEBIAAoAgQoAgwRCgAhAAsgE0EQaiQAIAALzgEBA38jAEEgayICJAACQAJAIAFBAWoiAUUNACAAKAIAIgNBAXQiBCABIAQgAUsbIgFBCCABQQhL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fHEiAmohAwJAIAJBAUgNACABQf8BcUGBgoQIbCECA0AgBSACNgIAIAVBBGoiBSADSQ0ACwsgBEEDcSECCwJAIAJFDQAgAyACaiEFA0AgAyABOgAAIANBAWoiAyAFSQ0ACwsgAAvTAQECfyMAQcAAayICJAACQAJAAkACQAJAIAAoAgBBA3EOAwABAgALIAJBg5jAADYCCEEHIQMMAwsgAkH9l8AANgIIDAELIAJB95fAADYCCAtBBiEDCyACIAM2AgwgAkEQakEMakEDNgIAIAJBJGpBAjYCACACQShqQQxqQRI2AgAgAkGYmMAANgIYIAJBADYCECACQRM2AiwgAiAANgI8IAIgAkEoajYCICACIAJBCGo2AjAgAiACQTxqNgIoIAEgAkEQahDoAiEAIAJBwABqJAAgAAvVAQECfyMAQcAAayICJAACQAJAAkACQAJAIAAoAgBBA3EOAwABAgALIAJBnIDBADYCCEEHIQMMAwsgAkGWgMEANgIIDAELIAJBkIDBADYCCAtBBiEDCyACIAM2AgwgAkEQakEMakEDNgIAIAJBJGpBAjYCACACQShqQQxqQcAANgIAIAJBtIDBADYCGCACQQA2AhAgAkHEADYCLCACIAA2AjwgAiACQShqNgIgIAIgAkEIajYCMCACIAJBPGo2AiggASACQRBqEOgCIQAgAkHAAGokACAAC9YBAgV/A34jAEHQAGsiAyQAQQAoAriOUiEEQQAoArSOUiEFQQAoAsSOUiEGIAIpAgAhCCACKAIYIQcgAikCCCEJIAIpAhAhCiADQTBqIAE2AgAgA0HEAGogCjcCACADQThqIAk3AwAgA0EkaiAHNgIAIAMgCDcDKCADQQA2AkAgA0EANgI0IANBATYCICADIAApAhA3AxggAyAAKQIINwMQIAMgACkCADcDCCAFQfCRwQAgBkECRiICGyADQQhqIARB/JHBACACGygCFBEGACADQdAAaiQAC9UBAQJ/IwBBwABrIgIkAAJAAkACQAJAAkAgACgCAEEDcQ4DAAECAAsgAkG8q9EANgIIQQchAwwDCyACQbar0QA2AggMAQsgAkGwq9EANgIIC0EGIQMLIAIgAzYCDCACQRBqQQxqQQM2AgAgAkEkakECNgIAIAJBKGpBDGpB3QA2AgAgAkHUq9EANgIYIAJBADYCECACQeIANgIs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A4NCAFINACADpyIBIAEoAgwiAUF/ajYCDCABQQFHDQBBzLDRABCMAyIBIAEtAAAiAkEBIAIbOgAAAkAgAkUNACABIANBgJTr3AMQGxoLIAFBBGogACgCABDQAiABQQAgAS0AACIAIABBAUYiABs6AAAgAA0AIAFBABBKCwuMAQICfwF+AkAgACkDACIDQgODQgBSDQAgA6ciASABKAIMIgFBf2o2AgwgAUEBRw0AQcyw0QAQjAMiASABLQAAIgJBASACGzoAAAJAIAJFDQAgASADQYCU69wDEBsaCyABQQRqIAAoAgAQ0AIgAUEAIAEtAAAiACAAQQFGIgAbOgAAIAANACABQQAQSgsLjQEBAn8CQCAAQThqKAIAIgENAEEADwsCQAJAAkACQCABQQFHDQAgACgCECICDQELIABBNGooAgAiAEUNASABQQJ0IABqQXxqKAIAIQILIAJBGGotAABBBEcNASACQShqKQMAQoKAgIDwAFIPC0GsmcAAQRJBoJ3AABDuAgALQYSMwABBD0GUjMAAEMwDAAuWAQECfyMAQRBrIgIkAAJAAkACQAJAAkAgACgCACIDLQAAQX5qQf8BcSIAQQMgAEEDSRsOBAABAgMACyABQcWDwQBBBhD6AyEADAMLIAFBvoPBAEEHEPoDIQAMAgsgAUG0g8EAQQoQ+gMhAAwBCyACIAM2AgwgAUGQg8EAQREgAkEMakGkg8EAEP0BIQALIAJBEGokACAAC4ABAQF/IwBBMGsiAiQAIAIgATYCBCACIAA2AgAgAkEIakEMakEDNgIAIAJBHGpBAjYCACACQSBqQQxqQTA2AgAgAkGk09EANgIQIAJBADYCCCACQTA2AiQgAiACQSBqNgIYIAIgAkEEajYCKCACIAI2AiAgAkEIakG809EAELIDAAt9AQF/IwBBMGsiAyQAIAMgATYCBCADIAA2AgAgA0EIakEMakEDNgIAIANBHGpBAjYCACADQSBqQQxqQTA2AgAgA0Hg09EANgIQIANBADYCCCADQTA2AiQgAyADQSBqNgIYIAMgA0EEajYCKCADIAM2AiAgA0EIaiACELIDAAt9AQF/IwBBMGsiAyQAIAMgATYCBCADIAA2AgAgA0EIakEMakECNgIAIANBHGpBAjYCACADQSBqQQxqQTA2AgAgA0HU7dEANgIQIANBADYCCCAD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ADYCECADQcSXwAA2AhggA0EANgIIIANBCGpBAkGgpcAAEIsCCyABQQE6AGcgACABQQYgAhABIAFBADoAZyADQSBqJAALbgECfyABKAIAIQQCQCABKAIIIgVFDQAgBCAFayADTw0AQQAhBSABQQA2AgggAUEAOgAMCwJAIAQgA00NACABKAIEIAVqIAIgAxDEBBogAEEEOgAAIAEgBSADajYCCA8LIABCBDcCACABQQA6AAwLegEDfyMAQRBrIgIkAAJAIAEoAgQNACABKAIMIQMgAkEIaiIEQQA2AgAgAkKAgICAEDcDACACIAI2AgwgAkEMakGottEAIAMQRxogAUEIaiAEKAIANgIAIAEgAikDADcCAAsgAEGMw9EANgIEIAAgATYCACACQRBqJAALZwEBfyMAQSBrIgIkACAAKAIAIQAgAkEIakEQaiABQRBqKQIANwMAIAJBCGpBCGogAUEIaikCADcDACACIAEpAgA3AwggAiAANgIEIAJBBGpBrJXAACACQQhqEEchASACQSBqJAAgAQtnAQF/IwBBIGsiAiQAIAAoAgAhACACQQhqQRBqIAFBEGopAgA3AwAgAkEIakEIaiABQQhqKQIANwMAIAIgASkCADcDCCACIAA2AgQgAkEEakHY3sAAIAJBCGoQRyEBIAJBIGokACABC2cBAX8jAEEgayICJAAgACgCACEAIAJBCGpBEGogAUEQaikCADcDACACQQhqQQhqIAFBCGopAgA3AwAgAiABKQIANwMIIAIgADYCBCACQQRqQai20QAgAkEIahBHIQEgAkEgaiQAIAELZwEBfyMAQSBrIgIkACAAKAIAIQAgAkEIakEQaiABQRBqKQIANwMAIAJBCGpBCGogAUEIaikCADcDACACIAEpAgA3AwggAiAANgIEIAJBBGpBwLbRACACQQhqEEchASACQSBqJAAgAQtnAQF/IwBBIGsiAiQAIAAoAgAhACACQQhqQRBqIAFBEGopAgA3AwAgAkEIakEIaiABQQhqKQIANwMAIAIgASkCADcDCCACIAA2AgQgAkEEakHYttEAIAJBCGoQRyEBIAJBIGokACABC2cBAX8jAEEgayICJAAgACgCACEAIAJBCGpBEGogAUEQaikCADcDACACQQhqQQhqIAFBCGopAgA3AwAgAiABKQIANwMIIAIgADYCBCACQQRqQejQ0QAgAkEIahBHIQEgAkEgaiQAIAELZwEBfyMAQSBrIgIkACAAKAIAIQAgAkEIakEQaiABQRBqKQIANwMAIAJBCGpBCGogAUEIaikCADcDACACIAEpAgA3AwggAiAANgIEIAJBBGpBzPHRACACQQhqEEchASACQSBqJAAgAQtoAQF/IwBBIGsiBSQAIAUgAjYCBCAFIAE2AgAgBUEIakEQaiADQRBqKQIANwMAIAVBCGpBCGogA0EIaikCADcDACAFIAMpAgA3AwggACAFQbyGwAAgBUEEakG8hsAAIAVBCGogBBB0AAtuAQF/IwBBIGsiAiQAIAJB8LbRADYCBCACIAA2AgAgAkEIakEQaiABQRBqKQIANwMAIAJBCGpBCGogAUEIaikCADcDACACIAEpAgA3AwhBACACQZS30QAgAkEEakGUt9EAIAJBCGpBgMrRABB0AAtrAQF/IwBBIGsiAyQAIAMgATYCBCADIAA2AgAgA0EIakEQaiACQRBqKQIANwMAIANBCGpBCGogAkEIaikCADcDACADIAIpAgA3AwhBACADQeTt0QAgA0EEakHk7dEAIANBCGpBhNXRABB0AAtjAQF/IAEgASgCAEEBaiICNgIAAkAgAkUNAAJAIABBOGooAgAiAiAAKAIwRw0AIABBMGogAhDeASAAKAI4IQILIABBNGooAgAgAkECdGogATYCACAAIAAoAjhBAWo2AjgPCwALYQECfyMAQSBrIgIkACAAKAIEIQMgACgCACEAIAJBCGpBEGogAUEQaikCADcDACACQQhqQQhqIAFBCGopAgA3AwAgAiABKQIANwMIIAAgAyACQQhqEEchASACQSBqJAAgAQtgAQF/IwBBIGsiAiQAIAIgADYCBCACQQhqQRBqIAFBEGopAgA3AwAgAkEIakEIaiABQQhqKQIANwMAIAIgASkCADcDCCACQQRqQayVwAAgAkEIahBHIQEgAkEgaiQAIAELYAEBfyMAQSBrIgIkACACIAA2AgQgAkEIakEQaiABQRBqKQIANwMAIAJBCGpBCGogAUEIaikCADcDACACIAEpAgA3AwggAkEEakHY3sAAIAJBCGoQRyEBIAJBIGokACABC2ABAX8jAEEgayICJAAgAiAANgIEIAJBCGpBEGogAUEQaikCADcDACACQQhqQQhqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpBwLbRACACQQhqEEchASACQSBqJAAgAQtgAQF/IwBBIGsiAiQAIAIgADYCBCACQQhqQRBqIAFBEGopAgA3AwAgAkEIakEIaiABQQhqKQIANwMAIAIgASkCADcDCCACQQRqQdi20QAgAkEIahBHIQEgAkEgaiQAIAELZAECfyMAQRBrIgIkACAAKAIIIQMgACgCBCEAIAIgARDLAwJAIANFDQADQCACIAA2AgwgAiACQQxqQYDR0QAQqAQaIABBAWohACADQX9qIgMNAAsLIAIQvwMhACACQRBqJAAgAAtnAQF/IwBBMGsiAyQAIAMgATYCDCADIAA2AgggA0EcakEBNgIAIANBJGpBATYCACADQYTt0QA2AhggA0EANgIQIANBnwE2AiwgAyADQShqNgIgIAMgA0EIajYCKCADQRBqIAIQsgMAC2ABAX8jAEEgayICJAAgAiAANgIEIAJBCGpBEGogAUEQaikCADcDACACQQhqQQhqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpBzPHRACACQQhqEEchASACQSBqJAAgAQtfAQF/AkAgAEEMaigCACICIAAoAgRHDQAgAEEEaiACEN8BIAAoAgwhAgsgAEEIaigCACACQQR0aiICIAEpAgA3AgAgAkEIaiABQQhqKQIANwIAIAAgACgCDEEBajYCDAuHAQIBfwF+QQAhAgJAIAApAwBCgoCAgPAAUg0AAkACQCABKQMAIgNCgYCAgMDPAFUNACADQoKAgICwFVENASADQoKAgIDQKFENASADQoKAgICQKVENAQwCCyADQoKAgICAhwFRDQAgA0KCgICAgIQBUQ0AIANCgoCAgMDPAFINAQtBASECCyACC3QBAX8jAEEQayICJAAgAiAAKAIAIgBBCGo2AgwgAUGSgsEAQQNBlYLBAEEEIABBFGpBnILBAEG/gcEAQQQgAEGsgsEAQbyCwQBBDCAAQRVqQciCwQBB2ILBAEEFIAJBDGpB4ILBABDuASEAIAJBEGokACAAC2kBAX8jAEEQayICJAACQAJAIAAoAgANACACIABBBGo2AgggAUHEqdEAQQcgAkEIakHMqdEAEP0BIQAMAQsgAiAAQQRqNgIMIAFBqKnRAEEKIAJBDGpBtKnRABD9ASEACyACQRBqJAAgAAtpAQR/IwBBEGsiAyQAQQAoAriOUiEEQQAoArSOUiEFQQAoAsSOUiEGIAMgAjYCBCADIAE2AgAgAyAANgIIIAVB8JHBACAGQQJGIgIbIAMgBEH8kcEAIAIbKAIQEQcAIQIgA0EQaiQAIAILXwECf0EAIQJBBCEDAkAgAUEFSQ0AIAEhAwJAAkAgAUF7ag4CAgEACyABQXlqIQFBASECQQYhAwwBC0EAIQFBASECQQUhAwsgACACNgIEIAAgAzYCACAAQQhqIAE2AgALZAICfwF+Qcyw0QAQjAMiASABLQAAIgJBASACGzoAAAJAIAJFDQAgASADQYCU69wDEBsaCyABQQRqIAAoAgAQ0AIgAUEAIAEtAAAiAiACQQFGIgIbOgAAAkAgAg0AIAFBABBKCwtvAQF/IwBBEGsiAiQAIAIgAEEwajYCDCABQbiBwQBBB0G/gcEAQQQgAEHEgcEAQdSBwQBBCSAAQRBqQcSBwQBB3YHBAEEJIABBIGpBxIHBAEHmgcEAQQwgAkEMakH0gcEAEO4BIQAgAkEQaiQAIAALbwEBfyMAQRBrIgIkACACIABBCGo2AgwgAUGSgsEAQQNBlYLBAEEEIABBFGpBnILBAEG/gcEAQQQgAEGsgsEAQbyCwQBBDCAAQRVqQciCwQBB2ILBAEEFIAJBDGpB4ILBABDuASEAIAJBEGokACAAC1sAAkACQCABRQ0AIABFDQAgAUECdCAAakF8aigCACIBQRhqLQAAQQRHDQEgAUEoaiABQTBqEPECDwtBrJnAAEESQaCdwAAQ7gIAC0GEjMAAQQ9BlIzAABDMAwALUgECfwJAIAAoAggiAyABTQ0AIAAoAgQgAUECdGoiAigCACEEIAIgAkEEaiADIAFBf3NqQQJ0EMEEGiAAIANBf2o2AgggBA8LIAEgAyACEMoCAAtgAQF/IwBBIGsiAiQAAkAgAQ0AIABBADYCBCACQSBqJAAPCyACQRRqQQE2AgAgAkEcakEANgIAIAJB/M/RADYCECACQeDP0QA2AhggAkEANgIIIAJBCGpB2NDRABCyAwALeAIBfwF+QQAhAgJAIAApAwBCgoCAgOAAUg0AAkACQCABKQMAIgNCgYCAgJA2VQ0AIANCgoCAgPACUQ0BIANCgoCAgIAYUQ0BDAILIANCgoCAgJA2UQ0AIANCgoCAgODJAFENACADQoKAgIDQO1INAQtBASECCyACC3sCAX8BfkEAIQICQCAAKQMAQoKAgIDwAFINAAJAAkAgASkDACIDQoGAgICQzQBVDQAgA0KCgICA0AVRDQEgA0KCgICA4AdRDQEMAgsgA0KCgICAkM0AUQ0AIANCgoCAgKDmAFENACADQoKAgIDQ8gBSDQELQQEhAgsgAgt7AgF/AX5BACECAkAgACkDAEKCgICA8ABSDQACQAJAIAEpAwAiA0KBgICAkM0AVQ0AIANCgoCAgNAFUQ0BIANCgoCAgIA3UQ0BDAILIANCgoCAgJDNAFENACADQoKAgICA0gBRDQAgA0KCgICA0PIAUg0BC0EBIQILIAILXAECfyABKAIAIQIgAUEANgIAAkACQCACRQ0AIAEoAgQhA0EIQQQQ/gMiAUUNASABIAM2AgQgASACNgIAIABB5JXAADYCBCAAIAE2AgAPCxDiBAALQQhBBBC8BAALUwEBfyMAQSBrIgMkACADQQxqIAJBCGooAgA2AgAgA0EBNgIAIAMgAikCADcCBCADQRBqIAFBABA7IAEgA0EQaiADEJECIABBADoAACADQSBqJAALXAECfyABKAIAIQIgAUEANgIAAkACQCACRQ0AIAEoAgQhA0EIQQQQ/gMiAUUNASABIAM2AgQgASACNgIAIABB5LLRADYCBCAAIAE2AgAPCxDiBAALQQhBBBC8BAALYgEDfyMAQRBrIgEkAAJAAkAgABDVBCICRQ0AIAAQ1AQiA0UNASABIAI2AgggASAANgIEIAEgAzYCACABEMoEAAtBpLfRAEErQfzC0QAQjQMAC0Gkt9EAQStB7MLRABCNAwALVgEBfwJAIAAoAggiAiAAKAIARw0AIAAgAhDfASAAKAIIIQILIAAoAgQgAkEEdGoiAiABKQIANwIAIAJBCGogAUEIaikCADcCACAAIAAoAghBAWo2AggLWgEEfwJAAkAgACgCBCIBIAAoAgAiAkYNAANAIAAgAUEQaiIDNgIEQQEhBAJAAkAgAS0AAA4DAAEEAAsgAUEEahCfAQ0DCyADIQEgAyACRw0ACwtBACEECyAEC1oBAn8jAEEQayICJAAgACgCACEDIABBADYCAAJAIAMNAEGI4sAAQStBtOLAABCNAwALIAJBCGogAEEMaigCADYCACACIAApAgQ3AwAgASACELIBIAJB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NAAgACgCACEAAkAgARCSBA0AAkAgARCTBA0AIAAgARCmBA8LIAAgARCxAg8LIAAgARCwAgs0ACAAKAIAIQACQCABEJIEDQACQCABEJMEDQAgACABEKYEDwsgACABELECDwsgACABELACCzQAAkAgACABEHgiAUUNAAJAQYSQ0gAQ6wRFDQAgARDPBBCeBA0BCyABQQAgABDDBBoLIAELNAAgACgCACEAAkAgARCSBA0AAkAgARCTBA0AIAAgARCnBA8LIAAgARCoAg8LIAAgARCpAgs5ACAAQYCAxAA2AiQgACABNgIgIABBADYCECAAQQA7AUAgAEKAgMQANwIwIABBADYCACAAQgA3AhgLKgEBfyAAIAAoAhAiAUENdCABcyIBQRF2IAFzIgFBBXQgAXMiATYCECABCzMBAX8CQAJAIAAtAKcCDQAgARCkASICQYCAxABGDQEgACACIAEQeRoPCyAAQQA6AKcCCws5AAJAAkAgAEGAgMQARg0AIABBgLADc0GAgLx/akH/j7x/Sw0BC0HM4cAAQStB+OHAABDuAgALIAALMwEBf0EAIQICQCAAKAIAKQMAIAEoAgApAwBSDQAgACgCBCkDACABKAIEKQMAUSECCyACCzUBAX9BASEBAkAgAC0ABA0AIAAoAgAiACgCAEHU79EAQQEgAEEEaigCACgCDBEKACEBCyABCzEAIAAgASgCACACIAMgASgCBCgCDBEKADoACCAAIAE2AgQgACADRToACSAAQQA2AgALLgEBfyMAQRBrIgEkACABIAApAgA3AwggAUEIakGovsAAQQAgACgCCEEBEPkBAAs8AgF/AX5BASECAkAgACkDAEKCgICA8ABSDQAgASkDACIDQoKAgIDw2QBSIANCgoCAgMDuAFJxIQILIAILOwIBfwF+QQAhAgJAIAApAwBCgoCAgPAAUg0AIAEpAwAiA0KCgICA8DFRIANCgoCAgMD1AFFyIQILIAILPAIBfwF+QQAhAgJAIAApAwBCgoCAgPAAUg0AIAEpAwAiA0KCgICAoPQAUSADQoKAgIDQyABRciECCyACCy4BAX8jAEEQayIBJAAgASAAKQIANwMIIAFBCGpB0LLRAEEAIAAoAghBARD5AQALLQACQAJAIAEQkgQNACABEJMEDQEgACABENQDDwsgACABELACDwsgACABELECCycAIAAgACgCBEEBcSABckECcjYCBCAAIAFqIgAgACgCBEEBcjYCBAsoACAAKAIAIAAtAAhqIAAoAgRBgIC8f2oiAEEDIABBA0kbIABBAksbCzEAIABBAzoAICAAQoCAgICABDcCGCAAQQA2AhAgAEEANgIIIAAgAjYCBCAAIAE2AgALLQAgASgCACACIAMgASgCBCgCDBEKACEDIABBADoABSAAIAM6AAQgACABNgIACzIBAX8gASgCAEGM7dEAQQEgASgCBCgCDBEKACECIABBADoABSAAIAI6AAQgACABNgIACygBAX8jAEEQayIDJAAgAyACNgIIIAMgATYCBCADIAA2AgAgAxDFBAALJQEBfyMAQRBrIgIkACACIABBABA7IAAgAiABEJECIAJBEGokAAsiACAAIABBIGpBgIDEACAAQb9/akEaSRsgAEGff2pBGkkbCygBAX8jAEEQayIDJAAgAyACNgIIIAMgATYCBCADIAA2AgAgAxDHBAALJwEBfwJAIABBBGooAgAiAUUNACAAKAIAIgBFDQAgASAAQQEQlAQLCyYBAn9BACECAkAgACgCACIDIAFLDQAgAyAAKAIEaiABSyECCyACCygAAkACQCABQfz///8HSw0AIAAgAUEEIAIQ9QMiAQ0BCxDQBAALIAELIwAgAiACKAIEQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgALHwAgACgCACIArUIAIACsfSAAQX9KIgAbIAAgARCdAQsoACABIAAoAgAtAABBAnQiAEHsicEAaigCACAAQeCJwQBqKAIAEPoDCyUAIAEgAC0AAEECdCIAQfyQwQBqKAIAIABBoJDBAGooAgAQ+gMLJQAgASAALQAAQQJ0IgBB5JHBAGooAgAgAEHYkcEAaigCABD6AwslACABIAAtAABBAnQiAEG8ztEAaigCACAAQZjN0QBqKAIAEPoDCx4AIAAgAUEDcjYCBCAAIAFqIgEgASgCBEEBcjYCBAsgAAJAIAENACAAIAM2AgQgACACNgIADwsgAiADELwEAAsgAQF/AkAgACgCCCIBRQ0AIABBDGooAgAgAUEBEJQECwsgAQF/AkAgACgCACIBRQ0AIABBBGooAgAgAUEBEJQECwsXACAAQVBqQQpJIABBX3FBv39qQRpJcgsjACABQfCCwQBB/YLBACAAKAIA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dC5sZW4oKbwAEABbAAAAHAcAAAUAAAC8ABAAWwAAAJwEAAAWAAAAvAAQAFsAAADcBAAAFgAAAGFzc2VydGlvbiBmYWlsZWQ6IGVkZ2UuaGVpZ2h0ID09IHNlbGYubm9kZS5oZWlnaHQgLSAxAAAAvAAQAFsAAADdAwAACQAAAC9ydXN0Yy85MGM1NDE4MDZmMjNhMTI3MDAyZGU1YjQwMzhiZTczMWJhMTQ1OGNhL2xpYnJhcnkvYWxsb2Mvc3JjL2NvbGxlY3Rpb25zL2J0cmVlL25hdmlnYXRlLnJzAAgCEABfAAAAWQIAADAAAAAIAhAAXwAAABcCAAAvAAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcGhmX3NoYXJlZC0wLjguMC9zcmMvbGliLnJzAAAAAAAAAAAAAABhdHRlbXB0IHRvIGNhbGN1bGF0ZSB0aGUgcmVtYWluZGVyIHdpdGggYSBkaXZpc29yIG9mIHplcm8AAACIAhAAXQAAADoAAAAFAAAAAQAAAAQAAAAEAAAAAgAAADwDEAAAAAAAAAAAAP//////////L2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvdGVuZHJpbC0wLjQuMi9zcmMvYnVmMzIucnNgAxAAXAAAAB0AAAAuAAAAYAMQAFwAAABWAAAAOwAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3RlbmRyaWwtMC40LjIvc3JjL3RlbmRyaWwucnMAANwDEABeAAAArgMAAD0AAABjaGlsZCBwYXNzZWQgdG8gYXBwZW5kIGNhbm5vdCBoYXZlIGV4aXN0aW5nIHBhcmVudC9ob21lL2ItZnVzZS9Qcm9qZWN0cy9naXQvZGVuby1kb20vaHRtbC1wYXJzZXIvY29yZS9zcmMvcmNkb20ucnMAAH4EEABAAAAAkgAAAAUAAABhbHJlYWR5IGJvcnJvd2VkAwAAAAAAAAABAAAABAAAAH4EEABAAAAAlwAAABkAAABkYW5nbGluZyB3ZWFrIHBvaW50ZXIgdG8gcGFyZW50YWxyZWFkeSBtdXRhYmx5IGJvcnJvd2VkAAMAAAAAAAAAAQAAAAUAAAB+BBAAQAAAAKEAAAAKAAAAaGF2ZSBwYXJlbnQgYnV0IGNvdWxkbid0IGZpbmQgaW4gcGFyZW50J3MgY2hpbGRyZW4hAH4EEABAAAAApwAAABEAAAB+BBAAQAAAAJ0AAAAhAAAAfgQQAEAAAACvAAAAFgAAAH4EEABAAAAAuAAAABkAAAB+BBAAQAAAALgAAAAmAAAAbm90IGEgdGVtcGxhdGUgZWxlbWVudCEAfgQQAEAAAADhAAAADQAAAG5vdCBhbiBlbGVtZW50IQB+BBAAQAAAAPAAAAASAAAAfgQQAEAAAAAUAQAALgAAAGFwcGVuZF9iZWZvcmVfc2libGluZyBjYWxsZWQgb24gbm9kZSB3aXRob3V0IHBhcmVudAB+BBAAQAAAADIBAAAwAAAAfgQQAEAAAAAzAQAAHQAAAH4EEABAAAAARgEAABkAAAB+BBAAQAAAACgBAAAOAAAAbm90IGFuIGVsZW1lbnQAAH4EEABAAAAAbgEAAA0AAAB+BBAAQAAAAGwBAAATAAAAfgQQAEAAAACBAQAAKgAAAH4EEABAAAAAggEAADQAAABkYW5nbGluZyB3ZWFrYXNzZXJ0aW9uIGZhaWxlZDogUmM6OnB0cl9lcSgmbm9kZSwgJnByZXZpb3VzX3BhcmVudC51bndyYXAoKS51cGdyYWRlKCkuZXhwZWN0KFwiZGFuZ2xpbmcgd2Vha1wiKSkAfgQQAEAAAACFAQAADQAAAH4EEABAAAAAhwEAADUAAABjYWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlAH4EEABAAAAAhwEAACIAAAB+BBAAQAAAAJUBAAANAAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvbWFya3VwNWV2ZXItMC4xMC4xL3V0aWwvYnVmZmVyX3F1ZXVlLnJzAAAA1AcQAGkAAADVAAAAFQAAAGNhbGxlZCBgUmVzdWx0Ojp1bndyYXAoKWAgb24gYW4gYEVycmAgdmFsdWUABgAAAAEAAAABAAAABwAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3RlbmRyaWwtMC40LjIvc3JjL3RlbmRyaWwucnMAAIwIEABeAAAAXQMAAB8AAAAAAAAA1AcQAGkAAADmAAAAFQAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3RlbmRyaWwtMC40LjIvc3JjL2J1ZjMyLnJzEAkQAFwAAAAdAAAALgAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3BoZl9zaGFyZWQtMC44LjAvc3JjL2xpYi5ycwAAAHwJEABdAAAAOQAAABoAAAAAAAAAYXR0ZW1wdCB0byBjYWxjdWxhdGUgdGhlIHJlbWFpbmRlciB3aXRoIGEgZGl2aXNvciBvZiB6ZXJvAAAAfAkQAF0AAAA6AAAABQAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N0cmluZ19jYWNoZS0wLjguMi9zcmMvYXRvbS5yczwKEABgAAAAjwAAABsAAAAIAAAABAAAAAQAAAAJAAAACgAAAAsAAAA8ChAAYAAAAAcBAAAfAAAAPAoQAGAAAAAFAQAALwAAAAgAAAAIAAAABAAAAAwAAABjYWxsZWQgYFJlc3VsdDo6dW53cmFwKClgIG9uIGFuIGBFcnJgIHZhbHVlABYAAAABAAAAAQAAAAcAAAAvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi90ZW5kcmlsLTAuNC4yL3NyYy90ZW5kcmlsLnJzAAAwCxAAXgAAAF0DAAAfAAAAQmFkIERPQ1RZUEU6IAAAAKALEAANAAAAQmFkIERPQ1RZUEUARE9DVFlQRSBpbiBpbnNlcnRpb24gbW9kZSAAAMQLEAAaAAAARE9DVFlQRSBpbiBib2R5c3RhdGljaW5saW5lZHluYW1pY0F0b20oJycgdHlwZT0pCgwQAAYAAAAQDBAABwAAABcMEAABAAAAMAsQAF4AAABXAAAANQAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3RlbmRyaWwtMC40LjIvc3JjL2J1ZjMyLnJzQAwQAFwAAAAdAAAALgAAAG5vIGN1cnJlbnQgZWxlbWVudC9ob21lL2ItZnVzZS9Qcm9qZWN0cy9naXQvZGVuby1kb20vaHRtbC1wYXJzZXIvd2FzbS90YXJnZXQvd2FzbTMyLXVua25vd24tdW5rbm93bi9yZWxlYXNlL2J1aWxkL2h0bWw1ZXZlci1lMzg4OGViMTExMTM3YTI1L291dC9ydWxlcy5ycwAAAL4MEACHAAAACAAAABgAAABodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcnByb2Nlc3NpbmcgIGluIGluc2VydGlvbiBtb2RlIAAAAG8NEAALAAAAeg0QABMAAAAvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9odG1sNWV2ZXItMC4yNS4xL3NyYy90cmVlX2J1aWxkZXIvbW9kLnJzAABYDRAAFwAAAFgNEAAXAAAAoA0QAGoAAAA4AQAAVW5leHBlY3RlZCB0b2tlbiAAAAAoDhAAEQAAAHoNEAATAAAAVW5leHBlY3RlZCB0b2tlbmFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaHRtbF9lbGVtX25hbWVkKCZub2RlLCBuYW1lKQCgDRAAagAAAFsCAAAJAAAAoA0QAGoAAACJAgAAIAAAAGltcG9zc2libGUgY2FzZSBpbiBmb3JlaWduIGNvbnRlbnQAAL4MEACHAAAAYwYAABAAAAC+DBAAhwAAAFoGAAAsAAAAVW5leHBlY3RlZCBvcGVuIHRhZyAgYXQgZW5kIG9mIGJvZHkA9A4QABQAAAAIDxAADwAAAFVuZXhwZWN0ZWQgb3BlbiB0YWcgYXQgZW5kIG9mIGJvZHlleHBlY3RlZCB0byBjbG9zZSA8dGQ+IG9yIDx0aD4gd2l0aCBjZWxsY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZQAAAKANEABqAAAAIQUAADAAAABGb3JtYXR0aW5nIGVsZW1lbnQgbm90IGluIHNjb3BlRm9ybWF0dGluZyBlbGVtZW50IG5vdCBjdXJyZW50IG5vZGUAAKANEABqAAAA6gIAACMAAACgDRAAagAAAPwCAAAYAAAAYm9va21hcmsgbm90IGZvdW5kIGluIGFjdGl2ZSBmb3JtYXR0aW5nIGVsZW1lbnRzZm9ybWF0dGluZyBlbGVtZW50IG5vdCBmb3VuZCBpbiBhY3RpdmUgZm9ybWF0dGluZyBlbGVtZW50cwAAoA0QAGoAAABeAwAALAAAAKANEABqAAAAXQMAABoAAACgDRAAagAAAFgDAAAaAAAAZnVydGhlc3QgYmxvY2sgbWlzc2luZyBmcm9tIG9wZW4gZWxlbWVudCBzdGFjawAAoA0QAGoAAABoAwAAEgAAAKANEABqAAAAUgMAABoAAACgDRAAagAAAAcDAAAlAAAARm91bmQgbWFya2VyIGR1cmluZyBhZG9wdGlvbiBhZ2VuY3kAoA0QAGoAAAAaAwAAHwAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuc2luay5zYW1lX25vZGUoaCwgJm5vZGUpAKANEABqAAAAFwMAABkAAACgDRAAagAAACMDAAARAAAAoA0QAGoAAAAkAwAAEQAAAKANEABqAAAADwMAACkAAACgDRAAagAAAOUCAAAsAAAARm9ybWF0dGluZyBlbGVtZW50IG5vdCBvcGVuAKANEABqAAAAyAIAACwAAACgDRAAagAAAAYDAABAAAAAVW5leHBlY3RlZCBvcGVuIGVsZW1lbnQgd2hpbGUgY2xvc2luZyAAAAASEAAmAAAAVW5leHBlY3RlZCBvcGVuIGVsZW1lbnQAoA0QAGoAAACBAwAAHQAAAKANEABqAAAAvQQAAE8AAACgDRAAagAAAKgEAAAlAAAAZm9zdGVyIHBhcmVudGluZyBub3QgaW1wbGVtZW50ZWR4EhAAIAAAAFgNEAAXAAAAWA0QABcAAACgDRAAagAAAH8EAABhc3NlcnRpb24gZmFpbGVkOiBtb3JlX3Rva2Vucy5pc19lbXB0eSgpoA0QAGoAAAB/AQAAFQAAAKANEABqAAAAewEAABUAAACgDRAAagAAAHcBAAAVAAAAVW5hY2tub3dsZWRnZWQgc2VsZi1jbG9zaW5nIHRhZ2Fzc2VydGlvbiBmYWlsZWQ6IHNlbGYucGVuZGluZ190YWJsZV90ZXh0LmlzX2VtcHR5KCkAoA0QAGoAAACKBAAADQAAAFVuZXhwZWN0ZWQgY2hhcmFjdGVycyAgaW4gdGFibGUAeBMQABYAAACOExAACQAAAFVuZXhwZWN0ZWQgY2hhcmFjdGVycyBpbiB0YWJsZQAAoA0QAGoAAACgAwAAKAAAAKANEABqAAAApwMAAB0AAABGb3VuZCBtYXJrZXIgZHVyaW5nIGZvcm1hdHRpbmcgZWxlbWVudCByZWNvbnN0cnVjdGlvbgAAAKANEABqAAAAqQMAABsAAACgDRAAagAAALADAAANAAAARm91bmQgc3BlY2lhbCB0YWcgd2hpbGUgY2xvc2luZyBnZW5lcmljIHRhZ21hdGNoZXMgd2l0aCBubyBpbmRleKANEABqAAAATQUAABIAAACgDRAAagAAAE0FAAAlAAAAoA0QAGoAAACoAQAAMQAAAG5vIGNvbnRleHQgZWxlbWVudAAAoA0QAGoAAADnAAAALwAAAKANEABqAAAAdQMAACoAAAC+DBAAhwAAAN0EAAB4AAAATm9uLXNwYWNlIHRhYmxlIHRleHRub3QgcHJlcGFyZWQgdG8gaGFuZGxlIHRoaXMhvgwQAIcAAACOAwAAEwAAAL4MEACHAAAAlQMAACsAAABpbXBvc3NpYmxlIGNhc2UgaW4gVGV4dCBtb2RlvgwQAIcAAAAaAwAAEAAAAL4MEACHAAAAFwMAAEcAAAC+DBAAhwAAAA8DAAA7AAAAQ2xvc2luZyB3cm9uZyBoZWFkaW5nIHRhZ05vIGhlYWRpbmcgdGFnIHRvIGNsb3NlTm8gbWF0Y2hpbmcgdGFnIHRvIGNsb3NlTm8gPHA+IHRhZyB0byBjbG9zZUZvcm0gZWxlbWVudCBub3QgaW4gc2NvcGUgb24gPC9mb3JtPkJhZCBvcGVuIGVsZW1lbnQgb24gPC9mb3JtPk51bGwgZm9ybSBlbGVtZW50IHBvaW50ZXIgb24gPC9mb3JtPjwvaHRtbD4gd2l0aCBubyA8Ym9keT4gaW4gc2NvcGU8L2JvZHk+IHdpdGggbm8gPGJvZHk+IGluIHNjb3BlaW1wb3NzaWJsZSBjYXNlIGluIEluQm9keSBtb2RlAAC+DBAAhwAAAAgDAAAQAAAATmVzdGVkIDxub2JyPm5lc3RlZCBidXR0b25zbmVzdGVkIGZvcm1zbmVzdGVkIGhlYWRpbmcgdGFnc25vIGhlYWQgZWxlbWVudAAAAL4MEACHAAAA1gAAAEkAAACgDRAAagAAALoDAAAKAAAAoA0QAGoAAAAdAgAABgAAAEluZGV4IG91dCBvZiBib3VuZHMAOBcQABMAAAAvcnVzdGMvOTBjNTQxODA2ZjIzYTEyNzAwMmRlNWI0MDM4YmU3MzFiYTE0NThjYS9saWJyYXJ5L2NvcmUvc3JjL3NsaWNlL3NvcnQucnMAAFQXEABOAAAAxgQAAA0AAABUFxAATgAAANMEAAAYAAAAVBcQAE4AAADUBAAAGQAAAFQXEABOAAAA1QQAACQAAABjYWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlAFQXEABOAAAAGQUAAEAAAABUFxAATgAAAD8FAABOAAAAVBcQAE4AAABNBQAAVgAAAGFzc2VydGlvbiBmYWlsZWQ6IGVuZCA+PSBzdGFydCAmJiBlbmQgPD0gbGVuVBcQAE4AAAC5BQAABQAAAFQXEABOAAAAygUAACgAAABhc3NlcnRpb24gZmFpbGVkOiBvZmZzZXQgIT0gMCAmJiBvZmZzZXQgPD0gbGVuAABUFxAATgAAAJsAAAAFAAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvdGVuZHJpbC0wLjQuMi9zcmMvYnVmMzIucnPMGBAAXAAAAB0AAAAuAAAAzBgQAFwAAABWAAAAOwAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3RlbmRyaWwtMC40LjIvc3JjL3RlbmRyaWwucnMAAEgZEABeAAAAAAMAAD8AAABIGRAAXgAAAK4DAAA9AAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc3RyaW5nX2NhY2hlLTAuOC4yL3NyYy9hdG9tLnJzyBkQAGAAAAAHAQAAHwAAAMgZEABgAAAABQEAAC8AAAAKVG9rZW5pemVyIHByb2ZpbGUsIGluIG5hbm9zZWNvbmRzCgBIGhAAIwAAAAogICAgICAgICB0b3RhbCBpbiB0b2tlbiBzaW5rCgAAdBoQAAEAAAB1GhAAHQAAACAgICAgICAgIHRvdGFsIGluIHRva2VuaXplcgp0GhAAAQAAAKQaEAAcAAAAICAlICAAAADMGBAAAAAAANAaEAACAAAA0hoQAAMAAAB0GhAAAQAAAFNhdyBFT0YgaW4gc3RhdGUgAAAA+BoQABEAAABVbmV4cGVjdGVkIEVPRlNhdyAgaW4gc3RhdGUgIhsQAAQAAAAmGxAACgAAAEJhZCBjaGFyYWN0ZXJnb3QgY2hhcmFjdGVycyBNGxAADwAAAGh0bWw1ZXZlcjo6dG9rZW5pemVyL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvaHRtbDVldmVyLTAuMjUuMS9zcmMvdG9rZW5pemVyL21vZC5ycwBkGxAAFAAAAGQbEAAUAAAAeBsQAGcAAAAzAQAAQXR0cmlidXRlcyBvbiBhbiBlbmQgdGFnU2VsZi1jbG9zaW5nIGVuZCB0YWdEdXBsaWNhdGUgYXR0cmlidXRlAHgbEABnAAAAYAUAABUAAABzdGF0ZSAgc2hvdWxkIG5vdCBiZSByZWFjaGFibGUgaW4gcHJvY2Vzc19jaGFyX3JlZgAATBwQAAYAAABSHBAALAAAAHgbEABnAAAAZgUAABYAAABCYWQgY2hhcmFjdGVyIAAAoBwQAA4AAABnb3QgY2hhcmFjdGVyIAAAuBwQAA4AAABkGxAAFAAAAGQbEAAUAAAAeBsQAGcAAAAXAQAAYXNzZXJ0aW9uIGZhaWxlZDogbWF0Y2hlcyEoc2VsZi5wcm9jZXNzX3Rva2VuKHRva2VuKSwgVG9rZW5TaW5rUmVzdWx0IDo6IENvbnRpbnVlKQAAeBsQAGcAAADyAAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IG1hdGNoZXMhKHNlbGYucnVuKCYgbXV0IGlucHV0KSwgVG9rZW5pemVyUmVzdWx0IDo6IERvbmUpAAB4GxAAZwAAAH4FAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogaW5wdXQuaXNfZW1wdHkoKQAAeBsQAGcAAAB/BQAACQAAAHByb2Nlc3NpbmcgaW4gc3RhdGUg4B0QABQAAABkGxAAFAAAAGQbEAAUAAAAeBsQAGcAAACzAgAAcHVibGljc3lzdGVtLS0hLS0h77+9LS0tLe+/vS3vv71kb2N0eXBlW0NEQVRBW3NjcmlwdHByb2Nlc3NpbmcgRU9GIGluIHN0YXRlIEweEAAYAAAAZBsQABQAAABkGxAAFAAAAHgbEABnAAAApAUAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaW5wdXRfYnVmZmVyLmlzX2VtcHR5KCkvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9odG1sNWV2ZXItMC4yNS4xL3NyYy9kcml2ZXIucnMAALYeEABgAAAAegAAAAkAAAAeAAAACAAAAAQAAAAfAAAAIAAAAGNhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWUvcnVzdGMvOTBjNTQxODA2ZjIzYTEyNzAwMmRlNWI0MDM4YmU3MzFiYTE0NThjYS9saWJyYXJ5L2FsbG9jL3NyYy9jb2xsZWN0aW9ucy9idHJlZS9uYXZpZ2F0ZS5ycwAAZx8QAF8AAACiAAAAJAAAAFNvbWVOb25lHgAAAAQAAAAEAAAAIQAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3RlbmRyaWwtMC40LjIvc3JjL2J1ZjMyLnJz8B8QAFwAAAAdAAAALgAAAHNlcmlhbGl6ZV9ub2RlIGZhaWxlZCB0byBwcm9kdWNlIHZhbGlkIFVURi04IgAAABQAAAAEAAAAIwAAAC9ob21lL2ItZnVzZS9Qcm9qZWN0cy9naXQvZGVuby1kb20vaHRtbC1wYXJzZXIvY29yZS9zcmMvbGliLnJzAACYIBAAPgAAAD0AAAAcAAAAWzEsAOggEAADAAAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZQAkAAAACAAAAAQAAAAlAAAAmCAQAD4AAABxAAAAJgAAACYAAAAEAAAABAAAACcAAACYIBAAPgAAAHIAAAA7AAAALAAAAGAhEAABAAAAmCAQAD4AAABzAAAAJAAAAGFscmVhZHkgbXV0YWJseSBib3Jyb3dlZCgAAAAAAAAAAQAAAAUAAACYIBAAPgAAAHsAAAAtAAAAY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZQCYIBAAPgAAAJMAAAAfAAAAXQAAAPAhEAABAAAAmCAQAD4AAACXAAAAJAAAAFs4LAAMIhAAAwAAAJggEAA+AAAAoQAAACYAAACYIBAAPgAAAKIAAABBAAAAmCAQAD4AAACjAAAAJAAAAFszLABIIhAAAwAAAJggEAA+AAAAmwAAACYAAACYIBAAPgAAAJwAAAA3AAAAmCAQAD4AAACcAAAASgAAAJggEAA+AAAAnQAAACQAAABbMTAslCIQAAQAAACYIBAAPgAAAKsAAAAnAAAAmCAQAD4AAACsAAAAPQAAAJggEAA+AAAArQAAACQAAACYIBAAPgAAAK4AAABCAAAAmCAQAD4AAACvAAAAJAAAAJggEAA+AAAAsAAAAEIAAACYIBAAPgAAALEAAAAkAAAAmCAQAD4AAABJAAAAKQAAAFs5LCIjZG9jdW1lbnQiLFtdAAAAICMQABEAAACYIBAAPgAAAEsAAAA2AAAAmCAQAD4AAABNAAAAKAAAAJggEAA+AAAAZQAAAB8AAABbAAAAbCMQAAEAAACYIBAAPgAAALkAAAAcAAAAmCAQAD4AAAC6AAAAFAAAAJggEAA+AAAAvgAAACAAAACYIBAAPgAAAL8AAABEAAAAmCAQAD4AAADAAAAAIAAAAJggEAA+AAAAwQAAAD8AAABdLAAA2CMQAAIAAACYIBAAPgAAAMQAAAAlAAAAmCAQAD4AAADGAAAAJAAAAJggEAA+AAAAygAAABwAAAApAAAADAAAAAQAAAAqAAAAKwAAACwAAABmb3JtYXR0ZXIgZXJyb3IALCQQAA8AAAAoAAAAL3J1c3RjLzkwYzU0MTgwNmYyM2ExMjcwMDJkZTViNDAzOGJlNzMxYmExNDU4Y2EvbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAAEgkEABKAAAAkgAAABEAAAAvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi90ZW5kcmlsLTAuNC4yL3NyYy90ZW5kcmlsLnJzAACkJBAAXgAAAFcAAAA1AAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvdGVuZHJpbC0wLjQuMi9zcmMvYnVmMzIucnMUJRAAXAAAAB0AAAAuAAAAL3J1c3RjLzkwYzU0MTgwNmYyM2ExMjcwMDJkZTViNDAzOGJlNzMxYmExNDU4Y2EvbGlicmFyeS9jb3JlL3NyYy9jaGFyL21ldGhvZHMucnN0b19kaWdpdDogcmFkaXggaXMgdG9vIGhpZ2ggKG1heGltdW0gMzYp0CUQACgAAACAJRAAUAAAAE0BAAANAAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvdGVuZHJpbC0wLjQuMi9zcmMvYnVmMzIucnMQJhAAXAAAAB0AAAAuAAAAECYQAFwAAABWAAAAOwAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3RlbmRyaWwtMC40LjIvc3JjL3RlbmRyaWwucnMAAIwmEABeAAAArgMAAD0AAABFT0YgaW4gbnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlRU9GIGFmdGVyICcjJyBpbiBjaGFyYWN0ZXIgcmVmZXJlbmNlYXNzZXJ0aW9uIGZhaWxlZDogbmFtZV9sZW4gPiAwL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvaHRtbDVldmVyLTAuMjUuMS9zcmMvdG9rZW5pemVyL2NoYXJfcmVmL21vZC5yc2AnEABwAAAAXQEAABEAAABgJxAAcAAAAF4BAAAkAAAAYCcQAHAAAABlAQAAGgAAAENoYXJhY3RlciByZWZlcmVuY2UgZG9lcyBub3QgZW5kIHdpdGggc2VtaWNvbG9uRXF1YWxzIHNpZ24gYWZ0ZXIgY2hhcmFjdGVyIHJlZmVyZW5jZSBpbiBhdHRyaWJ1dGUAAABgJxAAcAAAAIcBAAA+AAAAY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZQBgJxAAcAAAAIkBAABFAAAAYCcQAHAAAACJAQAALgAAAGAnEABwAAAAZQEAAEUAAABgJxAAcAAAAF4BAABTAAAASW52YWxpZCBudW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2UgdmFsdWUgMHjgKBAALAAAAEludmFsaWQgbnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlSW52YWxpZCBjaGFyYWN0ZXIgcmVmZXJlbmNlICY3KRAAHQAAAEludmFsaWQgY2hhcmFjdGVyIHJlZmVyZW5jZU51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZSB3aXRob3V0IGRpZ2l0c1NlbWljb2xvbiBtaXNzaW5nIGFmdGVyIG51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZWNoYXIgcmVmIHRva2VuaXplciBzdGVwcGluZyBpbiBzdGF0ZSAAAADUKRAAJQAAAGh0bWw1ZXZlcjo6dG9rZW5pemVyOjpjaGFyX3JlZgAABCoQAB4AAAAEKhAAHgAAAGAnEABwAAAAfwAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGUvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zZXJkZV9qc29uLTEuMC42OC9zcmMvc2VyLnJzAABoKhAAXgAAADIGAAASAAAAaCoQAF4AAAAqCAAAOwAAAGgqEABeAAAANAgAADcAAABcdFxyXG5cZlxiXFxcImFwcGxpY2F0aW9uL3hodG1sK3htbC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3RlbmRyaWwtMC40LjIvc3JjL2J1ZjMyLnJzABsrEABcAAAAHQAAAC4AAAAyAAAADAAAAAQAAAAzAAAANAAAADUAAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5ADYAAAAAAAAAAQAAADcAAAAvcnVzdGMvOTBjNTQxODA2ZjIzYTEyNzAwMmRlNWI0MDM4YmU3MzFiYTE0NThjYS9saWJyYXJ5L2FsbG9jL3NyYy9zdHJpbmcucnMA6CsQAEsAAADdCQAADgAAAHJlY3Vyc2lvbiBsaW1pdCBleGNlZWRlZHVuZXhwZWN0ZWQgZW5kIG9mIGhleCBlc2NhcGV0cmFpbGluZyBjaGFyYWN0ZXJzdHJhaWxpbmcgY29tbWFsb25lIGxlYWRpbmcgc3Vycm9nYXRlIGluIGhleCBlc2NhcGVrZXkgbXVzdCBiZSBhIHN0cmluZ2NvbnRyb2wgY2hhcmFjdGVyIChcdTAwMDAtXHUwMDFGKSBmb3VuZCB3aGlsZSBwYXJzaW5nIGEgc3RyaW5naW52YWxpZCB1bmljb2RlIGNvZGUgcG9pbnRudW1iZXIgb3V0IG9mIHJhbmdlaW52YWxpZCBudW1iZXJpbnZhbGlkIGVzY2FwZWV4cGVjdGVkIHZhbHVlZXhwZWN0ZWQgaWRlbnRleHBlY3RlZCBgLGAgb3IgYH1gZXhwZWN0ZWQgYCxgIG9yIGBdYGV4cGVjdGVkIGA6YEVPRiB3aGlsZSBwYXJzaW5nIGEgdmFsdWVFT0Ygd2hpbGUgcGFyc2luZyBhIHN0cmluZ0VPRiB3aGlsZSBwYXJzaW5nIGFuIG9iamVjdEVPRiB3aGlsZSBwYXJzaW5nIGEgbGlzdEVycm9yKCwgbGluZTogLCBjb2x1bW46ICkAAAAMLhAABgAAABIuEAAIAAAAGi4QAAoAAAAkLhAAAQAAADAxMjM0NTY3ODlhYmNkZWZ1dXV1dXV1dWJ0bnVmcnV1dXV1dXV1dXV1dXV1dXV1dQAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAQAAAAEAAAAOQAAADoAAAA7AAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvdGVuZHJpbC0wLjQuMi9zcmMvYnVmMzIucnNwLxAAXAAAAB0AAAAuAAAAZ2V0X3Jlc3VsdCBjYWxsZWQgYmVmb3JlIGRvbmUvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9odG1sNWV2ZXItMC4yNS4xL3NyYy90b2tlbml6ZXIvY2hhcl9yZWYvbW9kLnJzAAAA+S8QAHAAAABVAAAAFQAAAG5hbWVfYnVmIG1pc3NpbmcgaW4gbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZQAAAPkvEABwAAAAWwAAAA4AAAD5LxAAcAAAAGEAAAAOAAAAaW52YWxpZCBjaGFyIG1pc3NlZCBieSBlcnJvciBoYW5kbGluZyBjYXNlcwD5LxAAcAAAAPQAAAAZAAAAY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZQD5LxAAcAAAADcBAAAzAAAAQm9ndXNOYW1lTmFtZWROdW1lcmljU2VtaWNvbG9uTnVtZXJpYwAAADwAAAAEAAAABAAAAD0AAABPY3RvdGhvcnBlQmVnaW4APgAAAAQAAAAEAAAAPwAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3RlbmRyaWwtMC40LjIvc3JjL2J1ZjMyLnJznDEQAFwAAAAdAAAALgAAAJwxEABcAAAAVgAAADsAAAAvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi90ZW5kcmlsLTAuNC4yL3NyYy90ZW5kcmlsLnJzAAAYMhAAXgAAAK4DAAA9AAAAaW5saW5lb3duZWRzaGFyZWRUZW5kcmlsPD4oOiAAAACZMhAACAAAAKEyEAACAAAAozIQAAIAAAApAAAAwDIQAAEAAABTb21lQgAAAAQAAAAEAAAAQwAAAE5vbmUtLy9hZHZhc29mdCBsdGQvL2R0ZCBodG1sIDMuMCBhc3dlZGl0ICsgZXh0ZW5zaW9ucy8vLS8vYXMvL2R0ZCBodG1sIDMuMCBhc3dlZGl0ICsgZXh0ZW5zaW9ucy8vLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIGxldmVsIDEvLy0vL2lldGYvL2R0ZCBodG1sIDIuMCBsZXZlbCAyLy8tLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0IGxldmVsIDEvLy0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QgbGV2ZWwgMi8vLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIHN0cmljdC8vLS8vaWV0Zi8vZHRkIGh0bWwgMi4wLy8tLy9pZXRmLy9kdGQgaHRtbCAyLjFlLy8tLy9pZXRmLy9kdGQgaHRtbCAzLjAvLy0vL2lldGYvL2R0ZCBodG1sIDMuMiBmaW5hbC8vLS8vaWV0Zi8vZHRkIGh0bWwgMy4yLy8tLy9pZXRmLy9kdGQgaHRtbCAzLy8tLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAwLy8tLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAxLy8tLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAyLy8tLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAzLy8tLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMC8vLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDEvLy0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAyLy8tLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMy8vLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0Ly8tLy9pZXRmLy9kdGQgaHRtbC8vLS8vbWV0cml1cy8vZHRkIG1ldHJpdXMgcHJlc2VudGF0aW9uYWwvLy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCBodG1sIHN0cmljdC8vLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMi4wIGh0bWwvLy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCB0YWJsZXMvLy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCBodG1sIHN0cmljdC8vLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMy4wIGh0bWwvLy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCB0YWJsZXMvLy0vL25ldHNjYXBlIGNvbW0uIGNvcnAuLy9kdGQgaHRtbC8vLS8vbmV0c2NhcGUgY29tbS4gY29ycC4vL2R0ZCBzdHJpY3QgaHRtbC8vLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIDIuMC8vLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIGV4dGVuZGVkIDEuMC8vLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIGV4dGVuZGVkIHJlbGF4ZWQgMS4wLy8tLy9zb2Z0cXVhZCBzb2Z0d2FyZS8vZHRkIGhvdG1ldGFsIHBybyA2LjA6OjE5OTkwNjAxOjpleHRlbnNpb25zIHRvIGh0bWwgNC4wLy8tLy9zb2Z0cXVhZC8vZHRkIGhvdG1ldGFsIHBybyA0LjA6OjE5OTcxMDEwOjpleHRlbnNpb25zIHRvIGh0bWwgNC4wLy8tLy9zcHlnbGFzcy8vZHRkIGh0bWwgMi4wIGV4dGVuZGVkLy8tLy9zcS8vZHRkIGh0bWwgMi4wIGhvdG1ldGFsICsgZXh0ZW5zaW9ucy8vLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgaHRtbC8vLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgc3RyaWN0IGh0bWwvLy0vL3czYy8vZHRkIGh0bWwgMyAxOTk1LTAzLTI0Ly8tLy93M2MvL2R0ZCBodG1sIDMuMiBkcmFmdC8vLS8vdzNjLy9kdGQgaHRtbCAzLjIgZmluYWwvLy0vL3czYy8vZHRkIGh0bWwgMy4yLy8tLy93M2MvL2R0ZCBodG1sIDMuMnMgZHJhZnQvLy0vL3czYy8vZHRkIGh0bWwgNC4wIGZyYW1lc2V0Ly8tLy93M2MvL2R0ZCBodG1sIDQuMCB0cmFuc2l0aW9uYWwvLy0vL3czYy8vZHRkIGh0bWwgZXhwZXJpbWVudGFsIDE5OTYwNzEyLy8tLy93M2MvL2R0ZCBodG1sIGV4cGVyaW1lbnRhbCA5NzA0MjEvLy0vL3czYy8vZHRkIHczIGh0bWwvLy0vL3czby8vZHRkIHczIGh0bWwgMy4wLy8tLy93ZWJ0ZWNocy8vZHRkIG1vemlsbGEgaHRtbCAyLjAvLy0vL3dlYnRlY2hzLy9kdGQgbW96aWxsYSBodG1sLy8AAOQyEAA0AAAAGDMQACoAAABCMxAAHwAAAGEzEAAfAAAAgDMQACYAAACmMxAAJgAAAMwzEAAeAAAA6jMQABcAAAABNBAAGAAAABk0EAAXAAAAMDQQAB0AAABNNBAAFwAAAGQ0EAAVAAAAeTQQABsAAACUNBAAGwAAAK80EAAbAAAAyjQQABsAAADlNBAAIgAAAAc1EAAiAAAAKTUQACIAAABLNRAAIgAAAG01EAAaAAAAhzUQABMAAACaNRAAKAAAAMI1EAA1AAAA9zUQAC4AAAAlNhAAMAAAAFU2EAA1AAAAijYQAC4AAAC4NhAAMAAAAOg2EAAjAAAACzcQACoAAAA1NxAAKgAAAF83EAAzAAAAkjcQADsAAADNNxAATgAAABs4EABFAAAAYDgQACQAAACEOBAAKwAAAK84EAAtAAAA3DgQADQAAAAQORAAHwAAAC85EAAcAAAASzkQABwAAABnORAAFgAAAH05EAAdAAAAmjkQAB8AAAC5ORAAIwAAANw5EAAoAAAABDoQACYAAAAqOhAAFQAAAD86EAAZAAAAWDoQACMAAAB7OhAAHwAAAC0vL3czby8vZHRkIHczIGh0bWwgc3RyaWN0IDMuMC8vZW4vLy0vdzNjL2R0ZCBodG1sIDQuMCB0cmFuc2l0aW9uYWwvZW5odHRwOi8vd3d3LmlibS5jb20vZGF0YS9kdGQvdjExL2libXhodG1sMS10cmFuc2l0aW9uYWwuZHRkLS8vdzNjLy9kdGQgeGh0bWwgMS4wIGZyYW1lc2V0Ly8tLy93M2MvL2R0ZCB4aHRtbCAxLjAgdHJhbnNpdGlvbmFsLy8tLy93M2MvL2R0ZCBodG1sIDQuMDEgZnJhbWVzZXQvLy0vL3czYy8vZHRkIGh0bWwgNC4wMSB0cmFuc2l0aW9uYWwvLy0vL1czQy8vRFREIEhUTUwgNC4wLy9FTmh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvc3RyaWN0LmR0ZC0vL1czQy8vRFREIEhUTUwgNC4wMS8vRU5odHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9zdHJpY3QuZHRkLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU5odHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTmh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkYWJvdXQ6bGVnYWN5LWNvbXBhdEluZGV4IG91dCBvZiBib3VuZHN9PhAAEwAAAC9ydXN0Yy85MGM1NDE4MDZmMjNhMTI3MDAyZGU1YjQwMzhiZTczMWJhMTQ1OGNhL2xpYnJhcnkvY29yZS9zcmMvc2xpY2Uvc29ydC5ycwAAmD4QAE4AAADGBAAADQAAAJg+EABOAAAA0wQAABgAAACYPhAATgAAANQEAAAZAAAAmD4QAE4AAADVBAAAJAAAAGNhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWUAmD4QAE4AAAAZBQAAQAAAAJg+EABOAAAAPwUAAE4AAACYPhAATgAAAE0FAABWAAAAYXNzZXJ0aW9uIGZhaWxlZDogZW5kID49IHN0YXJ0ICYmIGVuZCA8PSBsZW6YPhAATgAAALkFAAAFAAAAmD4QAE4AAADKBQAAKAAAAGFzc2VydGlvbiBmYWlsZWQ6IG9mZnNldCAhPSAwICYmIG9mZnNldCA8PSBsZW4AAJg+EABOAAAAmwAAAAUAAABzdGF0aWNpbmxpbmVkeW5hbWljQXRvbSgnJyB0eXBlPSkAAAAjQBAABgAAAClAEAAHAAAAMEAQAAEAAAAvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi90ZW5kcmlsLTAuNC4yL3NyYy9idWYzMi5yc0xAEABcAAAAHQAAAC4AAABEb2N0eXBlbmFtZQBFAAAAEAAAAAQAAABGAAAAcHVibGljX2lkc3lzdGVtX2lkZm9yY2VfcXVpcmtzAABHAAAABAAAAAQAAABIAAAARW5kVGFnU3RhcnRUYWdUYWdraW5kAAAARwAAAAEAAAABAAAASQAAAEoAAAAIAAAACAAAAEsAAABzZWxmX2Nsb3NpbmdHAAAAAQAAAAEAAABMAAAAYXR0cnMAAABHAAAABAAAAAQAAABNAAAARG91YmxlRXNjYXBlZEVzY2FwZWRTeXN0ZW1QdWJsaWNTY3JpcHREYXRhRXNjYXBlZAAAAE4AAAAEAAAABAAAAE8AAABTY3JpcHREYXRhUmF3dGV4dFJjZGF0YURvdWJsZVF1b3RlZFNpbmdsZVF1b3RlZFVucXVvdGVkQ2RhdGFTZWN0aW9uRW5kQ2RhdGFTZWN0aW9uQnJhY2tldENkYXRhU2VjdGlvbkJvZ3VzRG9jdHlwZUJldHdlZW5Eb2N0eXBlUHVibGljQW5kU3lzdGVtSWRlbnRpZmllcnNBZnRlckRvY3R5cGVJZGVudGlmaWVyAE4AAAAEAAAABAAAAFAAAABEb2N0eXBlSWRlbnRpZmllclNpbmdsZVF1b3RlZERvY3R5cGVJZGVudGlmaWVyRG91YmxlUXVvdGVkQmVmb3JlRG9jdHlwZUlkZW50aWZpZXJBZnRlckRvY3R5cGVLZXl3b3JkQWZ0ZXJEb2N0eXBlTmFtZURvY3R5cGVOYW1lQmVmb3JlRG9jdHlwZU5hbWVEb2N0eXBlQ29tbWVudEVuZEJhbmdDb21tZW50RW5kQ29tbWVudEVuZERhc2hDb21tZW50Q29tbWVudFN0YXJ0RGFzaENvbW1lbnRTdGFydE1hcmt1cERlY2xhcmF0aW9uT3BlbkJvZ3VzQ29tbWVudFNlbGZDbG9zaW5nU3RhcnRUYWdBZnRlckF0dHJpYnV0ZVZhbHVlUXVvdGVkQXR0cmlidXRlVmFsdWUATgAAAAQAAAAEAAAAUQAAAEJlZm9yZUF0dHJpYnV0ZVZhbHVlQWZ0ZXJBdHRyaWJ1dGVOYW1lQXR0cmlidXRlTmFtZUJlZm9yZUF0dHJpYnV0ZU5hbWVTY3JpcHREYXRhRG91YmxlRXNjYXBlRW5kU2NyaXB0RGF0YUVzY2FwZWREYXNoRGFzaFNjcmlwdERhdGFFc2NhcGVkRGFzaFNjcmlwdERhdGFFc2NhcGVTdGFydERhc2hTY3JpcHREYXRhRXNjYXBlU3RhcnRSYXdFbmRUYWdOYW1lTgAAAAQAAAAEAAAAUgAAAFJhd0VuZFRhZ09wZW5SYXdMZXNzVGhhblNpZ25SYXdEYXRhVGFnTmFtZUVuZFRhZ09wZW5UYWdPcGVuUGxhaW50ZXh0RGF0YQgAAAAMAAAADAAAAONBEADXQRAAy0EQAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N0cmluZ19jYWNoZS0wLjguMi9zcmMvYXRvbS5yc/hEEABgAAAABwEAAB8AAAD4RBAAYAAAAAUBAAAvAAAAL3J1c3RjLzkwYzU0MTgwNmYyM2ExMjcwMDJkZTViNDAzOGJlNzMxYmExNDU4Y2EvbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAAHhFEABKAAAAkgAAABEAAAAvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi90ZW5kcmlsLTAuNC4yL3NyYy90ZW5kcmlsLnJzAADURRAAXgAAAFcAAAA1AAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvdGVuZHJpbC0wLjQuMi9zcmMvYnVmMzIucnNERhAAXAAAAB0AAAAuAAAAQWZ0ZXJBZnRlckZyYW1lc2V0QWZ0ZXJBZnRlckJvZHlBZnRlckZyYW1lc2V0SW5GcmFtZXNldEFmdGVyQm9keUluVGVtcGxhdGVJblNlbGVjdEluVGFibGVJblNlbGVjdEluQ2VsbEluUm93SW5UYWJsZUJvZHlJbkNvbHVtbkdyb3VwSW5DYXB0aW9uSW5UYWJsZVRleHRJblRhYmxlVGV4dEluQm9keUFmdGVySGVhZEluSGVhZE5vc2NyaXB0SW5IZWFkQmVmb3JlSGVhZEJlZm9yZUh0bWxJbml0aWFsTm90V2hpdGVzcGFjZVdoaXRlc3BhY2VOb3RTcGxpdEVPRlRva2VuTnVsbENoYXJhY3RlclRva2VuQ2hhcmFjdGVyVG9rZW5z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AAAABQAAAAEAAABMAAAAAAAAAAABAAANAAAAggEAAAAAAACYAAAAAAAAAAIAAAAAAAAAHAAAAAAAAACPAAAAAAAAAFUCAAABAAAAeAIAAAIAAACuAAAAAAAAAAMAAAAAAAAA7gAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEgAAAAAAAAADAAAAAAAAAI0AAAAEAAAAowEAAAAAAAAAAAAAAAAAAJwAAAAIAAAAXwAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAUQQAAAAAAAASAwAABQAAAB4AAAAAAAAAEwAAAAIAAAAvAQAAAAAAAGsAAAABAAAAFAEAAAAAAAABAAAAAAAAAFUDAAADAAAAjgAAAA4AAAC1AQAAAAAAAAACAAAAAAAAAQAAAG9uZHJhZ2VuZG5vbmVvbmtleXByZXNzY29udGVudFNjcmlwdFR5cGVjb250ZW50ZmVwb2ludGxpZ2h0cHJlc3RhcnRPZmZzZXRhcmlhLXByZXNzZWR2aWV3VGFyZ2V0YWRkaXRpdmVxYmdjb2xvcm5lcWxjbWZsb29kLWNvbG9yaWRmcmFtZWRpc3BsYXlhbmltYXRlQ29sb3JhbHBoYWJldGljYXJpYS1yZWFkb25seWV4cG1pKmZlTWVyZ2Vvbmxvc2VjYXB0dXJlb3RoZXJ3aXNlbWFza3VuaXRzeGxpbms6YWN0dWF0ZW1hbmlmZXN0ZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZHVsc2VwYXJhdG9ycnRjcG9seWdvbmZpbGwtb3BhY2l0eXpvb21BbmRQYW5zY3JvbGxpbmd1cG9pbnRlci1ldmVudHNmb3JtYXRhY3R1YXRlbGltaXRpbmdDb25lQW5nbGVmb250LWZhY2V0Ym9keW9uYmVmb3JlY29weXJvd3NwYWNpbmd0aGlubWF0aHNwYWNlbWF0aGVtYXRpY2FscGF0dGVybnVuaXRzb25lcnJvcnN0cm9rZS1saW5lam9pbmFsaWdubWVudHNjb3BldW5pb25oZWFkc2l6ZXNjb2xzYWN0aW9ucG9seWxpbmVzcGVlZG5vYnJ0ZW1wbGF0ZWcxaGFuZGxlcmZlc3BlY3VsYXJsaWdodGluZ2FyaWEtZXhwYW5kZWRjbGlwcGF0aGxlcXhsaW5rOnJvbGVmaWVsZHNldGFsdEdseXBoSXRlbWJib3h0YW5yZXF1aXJlZGZlYXR1cmVzb25kcmFnZHJvcGNsYXNzaWRkaXJlY3Rpb25vbmRyYWdsZWF2ZXNlY3Rpb25nbHlwaGFyaWEtc2V0c2l6ZWdyb3VwYWxpZ25rZXJuaW5nc3Ryb2tlLW1pdGVybGltaXRhcmNzZWNjb2RldHlwZWxpbmtyZWxvbnBhZ2VzaG93cmVsbmFyY2NvdGZsb29ya2V5VGltZXNjaGFycmVwZWF0Y291bnRyZXBlYXQtbWluZmVtZXJnZW5vZGVhc2lkZWNvbHVtbmFsaWdub25iZWZvcmVlZGl0Zm9jdXNvbmZpbmlzaGVsZXZhdGlvbm9ucmVzaXplc3Ryb2tlLXdpZHRoYXJpYS1pbnZhbGlkcHJlc2VydmVhc3BlY3RyYXRpb21heHBhcnRpYWxkaWZmc3RhcnRvZmZzZXRpc2luZGV4b25tb3VzZWRvd25vbmRhdGFzZXRjaGFuZ2VkeG1sOmJhc2VrMXN0cmluZ3N1YmRlZmluaXRpb25VUkxhcmFiaWMtZm9ybWlmcmFtZXN0ZW12c2NyaXB0Ymlhc2hvcml6LWFkdi14c3RvcC1jb2xvcmF0dHJpYnV0ZU5hbWVmb3JlaWdub2JqZWN0aXRlbXByb3BnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbGNvZGVmbG9vZC1vcGFjaXR5cmF0aW9uYWxzZmVDb21wb25lbnRUcmFuc2ZlcnRleHRwYXRoeGxpbms6dGl0bGVzaGFwZW1hcGNoYXJzZXR0YXJnZXR5b25kYmxjbGlja21wYXRob25kcmFnc3RhcnRoaWRlZm9jdXNlZGdlbW9kZW1nbHlwaG5vbmNlcmFkaWFsR3JhZGllbnRhbm5vdGF0aW9uLXhtbG1wYWRkZWRncmFkaWVudFRyYW5zZm9ybWZlZnVuY2FvbmZvY3Vzb3V0b25jaGFuZ2V2a2Vybm5vdHByc3Vic2V0Zm9udC13ZWlnaHRtYXRoc2l6ZWNvbG9yLWludGVycG9sYXRpb25zZWNocmVmZXJyZXJwb2xpY3lyZWFkb25seXBvaW50c2FjY2VwdC1jaGFyc2V0Zm9udC1zaXplY2FyZHJ0dW5pY29kZS1yYW5nZXBhdGhnY2RtYXJnaW5oZWlnaHRrZXlwb2ludHNoMmFjdGlvbnR5cGVyZXF1aXJlZEZlYXR1cmVzcnVsZWFyaWEtY2hlY2tlZGNsaXBwYXRodW5pdHNzcmNkb2NkaXNwbGF5c3R5bGVtdWx0aXBsZXZlcnNpb25udW1PY3RhdmVzbWF0cml4cm93b2Zmc2V0bWFya3ByaW1lc3N0cm9rZS1vcGFjaXR5aHJlZm1zcGFjZW9uYmx1cmJnc291bmRvbm1vdXNld2hlZWxtb2xhcmdlb3ByZXN1bHRhemltdXRoYWxpbmtzdG9wYXJpYS1idXN5Zm9udHdlaWdodHNwcmVhZG1ldGhvZGJldmVsbGVkeG1sOmxhbmdwb2ludHNBdFhhcmN0YW5ocnF1b3Rlb25tb3VzZW92ZXJjdXJzb3JzdXBlcnNjcmlwdHNoaWZ0Y29sdW1ubGluZXNmb250ZmFtaWx5eGxpbmtjbGlwLXBhdGhtYXNrc3VwdmFsdWVzcGFjaW5nZmVkcm9wc2hhZG93Zm9ybWFjdGlvbm9uY29udGV4dG1lbnV0b2dnbGVmaWdjYXB0aW9uc2VlZHBvaW50c2F0eWlkZW50bmFyZ3N2bGlua2FjY2VudGl0ZW1yZWZzaG93Y2hhcm9mZmhvcml6LW9yaWdpbi14ZWRnZU1vZGVzZW1hbnRpY3NhY2NlcHRsb2dhcmlhLWF0b21pY3NjYWxldW5pY29kZS1iaWRpb3JkZXJrYXJjcm9sZWRpdmlzb3JoYW5naW5nc2RldmF4aXNkb21pbmFudC1iYXNlbGluZWVuYWJsZS1iYWNrZ3JvdW5kb25sYW5ndWFnZWNoYW5nZXRyYWNrbm90c3Vic2V0cG9pbnRzQXRZbWVhbmZpbGxmZUNvbnZvbHZlTWF0cml4c3R5bGV0b290aGVydHJhbnNsYXRlbG9jYWxzYW1weGNoYW5uZWxzZWxlY3RvcnNwYWNlZXF1YWxyb3dzc3RpdGNoVGlsZXNmZWZsb29kZG5vdGFudW1iZXJtYXJrZXJIZWlnaHRsaW5ldGhpY2tuZXNzZGlzY2FyZGFsdEdseXBoRGVmdGFibGV2YWx1ZXNwcmltaXRpdmV1bml0c2ZlbmNlaW5maW5pdHlrZXJuZWx1bml0bGVuZ3RobGluZS1oZWlnaHR0YXJnZXRYYXJpYS1tdWx0aXNlbGVjdGFibGVjZWxscGFkZGluZ2RhdGFmb3JtYXRhc2tlcm5lbFVuaXRMZW5ndGhnZXFhbHRHbHlwaGVtYmVkcGF0dGVybkNvbnRlbnRVbml0c2FyY2NvdGhwcm9ncmVzc21mcmFjc3Ryb2tlYmFzZWxpbmVmb3JhbGxmZUZ1bmNHYW5pbWF0aW9ubm92YWxpZGF0ZXJ1bGVzc3JjaXRlbXNjb3Blb25iZWZvcmVhY3RpdmF0ZWJkaWZldHVyYnVsZW5jZWdseXBoUmVmY3NjbmFtZXNpbmNvbHNwYW5iYXNlb25iZWZvcmVwcmludHNvdXJjZWxvd2hzcGFjZXRpdGxlc2NyaXB0bGV2ZWxvbmN1dHJldmVyc2VkdGJyZWFrc2V0bWFya2VyLXN0YXJ0ZW5jdHlwZW1ldGFkYXRheENoYW5uZWxTZWxlY3Rvcm1vZGVzZXBhcmF0b3Jzb25pbnZhbGlkaDZjb25qdWdhdGVyZXF1aXJlZEV4dGVuc2lvbnNtdW5kZXJvdmVyaDVtZXRob2RtYXRoY29sb3JkaXZlcmdlbmNlZmFsc2VzcGVjaWZpY2F0aW9ub25yZWFkeXN0YXRlY2hhbmdlZG9tYWlub2ZhcHBsaWNhdGlvbm1hdGhiYWNrZ3JvdW5ka2VybmVsTWF0cml4bmF0dXJhbG51bWJlcnNkZXB0aHNjYWxhcnByb2R1Y3RvcGVyYXRvcmNsYXNzcG9pbnRzQXRaY29vcmRzYm9yZGVydGV4dGxlbmd0aHNjcmlwdHNpemVtdWx0aXBsaWVyb25zdG9yYWdlYXJpYS1jb250cm9sc29ucHJvcGVydHljaGFuZ2VpbWFnZXByb2R1Y3RjYW52YXNwcm9tcHRmZXRpbGVvbmZvcm1jaGFuZ2VhbmltYXRlbW90aW9ubWF4c2l6ZWFyaWEtbGl2ZWxpbWl0Zm9ybXRhcmdldGVxdWFsY29sdW1uc3JlY3RmZWNvbXBvbmVudHRyYW5zZmVyZmVEaXNwbGFjZW1lbnRNYXBkZWdyZWVvbmJlZm9yZGVhY3RpdmF0ZWJhc2VGcmVxdWVuY3lkeWN1cmxiYXNlbGluZS1zaGlmdGNsaXBhYXJpYS1kcm9wZWZmZWN0eGxpbms6dHlwZW9ubG9hZHJlZlhwcnN1YnNldHByZXNlcnZlYWxwaGFpbnB1dG1vZGVrNGdyYWRpZW50dW5pdHNhcmlhLXZhbHVlbWF4bG5hY3JvbnltYXJ0aWNsZXRzcGFuZmVibGVuZGNvbG9yLXByb2ZpbGVmb3JhcmlhLWRhdGF0eXBldmVydC1hZHYteW1zcXJ0dGhpY2ttYXRoc3BhY2Vtb21lbnRtaXNzaW5nLWdseXBodGRmb3Jtbm92YWxpZGF0ZWZvcm1mb250c2l6ZW1hc2tjb250ZW50dW5pdHNmb3JtbWV0aG9kYXJjY29zaG9ucGFzdGVpbnRlcnZhbG10ZHRhYmluZGV4YXJpYS1ncmFic3JjbGFuZ210YWJsZXJlcGVhdGNvbG9yLXJlbmRlcmluZ2ZvbnRzdHlsZWF0dHJpYnV0ZVR5cGVleHBvbmVudHBhdHRlcm5vbmRyYWdlbnRlcmFyaWEtdmFsdWVtaW5tb21lbnRhYm91dGRhdGV0aW1lc3ZndmFyaWFuY2VmZU9mZnNldG9uZXJyb3J1cGRhdGVkb3dubG9hZGFyY2hpdmVmeGV4aXN0c3N0ZXBidXR0b25tdGV4dGZlQ29tcG9zaXRlZGVmYXVsdHN0ZW1obWVudWl0ZW1mb250LXZhcmlhbnRvbmNvbnRyb2xzZWxlY3R0YWJsZXByb3BlcnR5Zm9udC1mYWNlLXVyaWljb252ZXJ0LW9yaWdpbi15b25oYXNoY2hhbmdleDJvbmtleWRvd25saW5lYnJlYWtyb290aXRlbXR5cGV0aW1lc3VyZmFjZXNjYWxlbGFtYmRhc3Jjc2V0Znlob3Jpei1vcmlnaW4teWNvZGViYXNldi1hbHBoYWJldGljYXJlYWFyaWEtbXVsdGlsaW5lcmVwZWF0LW1heGFic29uZW5kZm9vdGVydmVydC1vcmlnaW4teHRleHQtZGVjb3JhdGlvbmFiYnJtb3ZlcnRhcmdldHByaW1pdGl2ZVVuaXRzZmVmdW5jYnRleHQtYW5jaG9ybm9yZXNpemV4bWxuczp4bGlua2NlbnRlcmZvbnRtc2ZuazNwaWVjZWVsbGlwc2VyZWFsc25vZW1iZWRlbXB0eXNldGZlQmxlbmRycHdpZHRoc3htbG5zdGV4dExlbmd0aGVxdW5pdHMtcGVyLWVtYmFzZVByb2ZpbGVkYXRhdGVtcGxhdGViYXNlZm9udGRpZmZkeHR5cGVhcmlhLWNoYW5uZWxzeXN0ZW1sYW5ndWFnZXJlZnlyZWZ4YWx0aW1nZGlhbG9nb25zY3JvbGxhcmlhLXNlbGVjdGVkdmVjdG9ycnlwYXR0ZXJudHJhbnNmb3JtZm9udC1zaXplLWFkanVzdHRhcmdldHhtcm93cmVwZWF0Q291bnRhbHR0ZXh0bGVuZ3RoYWRqdXN0dmVyeXRoaW5tYXRoc3BhY2VtaW5sZW5ndGhtYXJrZXItZW5kZGF0YWZsZHBhcnNlY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzbmF2aGVpZ2h0cHJlZmV0Y2h3cml0aW5nLW1vZGVhcmlhLWRlc2NyaWJlZGJ5cGF0dGVybmNvbnRlbnR1bml0c2Rpcm5hbWV1MnhtbDpzcGFjZWRldGFpbHNuZXN0b25rZXl1cG11dGVkb25kcmFnb25pbnB1dG9uc2VsZWN0YWx0aHR0cC1lcXVpdmFjY2VudC1oZWlnaHRjb250cm9sbGVyY2hhbmdlY2VsbHNwYWNpbmdwYXRobGVuZ3RoYmFja2dyb3VuZGFyaWEtc29ydGZyYW1lYm9yZGVyZ3JhZGllbnR0cmFuc2Zvcm12ZWN0b3Jwcm9kdWN0Zm9udC1mYW1pbHlhcmlhLWhpZGRlbmFsaWdubWVudC1iYXNlbGluZWhpZGRlbmZpbHRlcnVuaXRzc2NyaXB0bWluc2l6ZXVzZW5vc2NyaXB0c3RyZXRjaHl2LW1hdGhlbWF0aWNhbGNvbXBsZXhlc2FyaWEtbGFiZWxsZWRieXJvd2FsaWducGljdHVyZXByZXNlcnZlQWxwaGFhcmlhLXJlcXVpcmVkeTJ1bnNlbGVjdGFibGVjb250ZW50ZWRpdGFibGV6c3RvcC1vcGFjaXR5b25tZXNzYWdlbHRmYWN0b3JpYWxmaWd1cmVsb29wY2FwLWhlaWdodGN5eHJlZmZlZGlmZnVzZWxpZ2h0aW5nb25hY3RpdmF0ZWxpc3Rpbmdvbm1vdXNlbW92ZWR0b3B0aW11bWZlRHJvcFNoYWRvd2ZpbHRlcnNtYWxsb25vZmZsaW5lcGFub3NlLTFtYXJxdWVlem9vbWFuZHBhbm1uYWRkcmVzc21hdGh4MW9uaGVscHdoZW5vcmFyaWEtdmFsdWVub3dhY2Nlc3NrZXlkZXNjZW50di1pZGVvZ3JhcGhpY2lycmVsZXZhbnRjaGVja2Vkb25iZWZvcmVwYXN0ZXRyYW5zZm9ybW5vZnJhbWVzY29zaG10cmZlSW1hZ2Vjb250ZXh0bWVudXZhbGlnbmdseXBoLW5hbWVvbmJlZm9yZXVwZGF0ZXNwZWN1bGFyY29uc3RhbnRkZWxhcmlhLW93bnNmZVNwZWN1bGFyTGlnaHRpbmd0aGVhZG9ubW92ZWVuZG1lbmNsb3NlbWFyZ2lud2lkdGh3b3JkLXNwYWNpbmdvYmplY3Rsb2diYXNlbWxhYmVsZWR0cmFuaW1hdGVNb3Rpb250ZXh0UGF0aGRyYWdnYWJsZWRmbnJlcXVpcmVkYXJjY29zYmlnaW50YXR0cmlidXRldHlwZWJhc2VmcmVxdWVuY3lzZXBoMWZlY29udm9sdmVtYXRyaXhsYW5naGdyb3VwZXVsZXJnYW1tYWNvc2JyZmVkaXNwbGFjZW1lbnRtYXBrZXlzcGxpbmVzd2lkdGhpbnRlcmNlcHR0ZW5kc3Rvb25zZWxlY3RzdGFydG1lcnJvcm1hY3Jvc21vemJyb3dzZXJvbmFib3J0bWF0cml4b25hZnRlcnByaW50bW92YWJsZWxpbWl0c3Ryc3Ryb2tlLWxpbmVjYXBub3RhdGlvbm9ubW91c2VlbnRlcmFubm90YXRpb25mcmFtZXNldGNyb3Nzb3JpZ2luaW52ZXJzZWhlYWRlcnNmZW1lcmdlZGF0YXNyY3NpbmhnbHlwaHJlZm9uZm9ybWlucHV0dmlzaWJpbGl0eW9uZHJhZ292ZXJzcGFjZXJvdmVybGluZS10aGlja25lc3N4b3JvbmRhdGFzZXRjb21wbGV0ZXBpbmdsZXR0ZXItc3BhY2luZ2xlbmd0aEFkanVzdHZlcnl0aGlja21hdGhzcGFjZW9ucmVwZWF0aW1ldGF2aWV3Ym94ZGVmc3JiYWxpZ25kYXRhc3ByZWFkTWV0aG9kZGVmaW5pdGlvbi1zcmNhc2NlbnR2YWx1ZXR5cGVvbnJvd2VudGVyb25zdG9wcnNwYWNlbWFya2Vyb3JpZW50YXRpb25lbmNvZGluZ3BsYWludGV4dHJlc3RhcnRzdGREZXZpYXRpb25udW1vY3RhdmVzbWFya2VydW5pdHNjbGlwUGF0aFVuaXRzc3RkZGV2aWF0aW9uY290cGFyaWEtZGlzYWJsZWRtaW5zaXplZmVTcG90TGlnaHRjZWlsaW5ncnkxZmFjdG9yb2Zic3RhdGVjaGFuZ2VrZXl0aW1lc2RpcmVuZG9wdGdyb3Vwb25yb3dzZGVsZXRlZmVnYXVzc2lhbmJsdXJsb3dsaW1pdGsyc3Ryb2tlLWRhc2hvZmZzZXR1cGxpbWl0eGxpbms6aHJlZmFuaW1hdGVUcmFuc2Zvcm1zbG9wZWZlRnVuY0Jwb2ludHNhdHh1bmRlcmxpbmUtcG9zaXRpb25ocmVmbGFuZ2NhcHRpb25tdWx0aWNvbHdicmRpc2FibGVkcXVvdGllbnRmZVRpbGV0cnVlYXJjc2luaGVxdWl2YWxlbnRmZW9mZnNldHZhbHVlc2NhbGNNb2RlYXJpYS1hY3RpdmVkZXNjZW5kYW50bWVudXhsaW5rOnNob3dzdWJzY3JpcHRzaGlmdG9ucG9wc3RhdGVhcmNzaW50ZXh0YXJlYXUxYXJpYS1zZWNyZXRrZXJuZWxtYXRyaXhvdmVybGluZS1wb3NpdGlvbm9uYmVnaW50YWJsZVZhbHVlc3Njb3BlZG9uc3VibWl0b25kcm9wbWFpbmdyYWRpZW50VW5pdHNjb2xncm91cGNhbGNtb2RlaGVhZGVyY290aGluc29uc3RhcnRpbWFnaW5hcnljb250ZW50c3R5bGV0eXBlYnZhcnZhcnJhZGlvZ3JvdXBleHBvbmVudGlhbGVvdXRwdXRrZXlQb2ludHNzZXRkaWZmb25vbmxpbmVibG9ja3F1b3RlY2l0ZWxpbmVhcmdyYWRpZW50Z2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbHBhcmFtaW50ZWdyaXR5aW1hZ2luYXJ5aW9uYm91bmNlb25tb3VzZXVwZmVjb2xvcm1hdHJpeGZlVHVyYnVsZW5jZWZpbHRlclVuaXRzcmVmWW9uY2VsbGNoYW5nZWlzbWFwZGV0ZXJtaW5hbnRub21vZHVsZXN1YnNldG1heGxlbmd0aHByZWxvYWRvbmRhdGFhdmFpbGFibGVyZXBlYXQtc3RhcnR2c3BhY2VvcGVuYXVkaW9hdHRyaWJ1dGVuYW1lZW1vbm1vdXNlbGVhdmVyYWRpdXNjbGlwLXJ1bGVvbmNsaWNrcGltc3Vic3VwYXN5bmNkb21haW5sb25nZGVzY2FyaWEtZmxvd3Rvdi1oYW5naW5nZmVkaXN0YW50bGlnaHRodG1sc3BlY3VsYXJDb25zdGFudGFsbG93ZnVsbHNjcmVlbm9ubW91c2VvdXRscXVvdGVhcHBseWhyYW1wbGl0dWRlZmVQb2ludExpZ2h0cG93ZXJhcmlhLXJlbGV2YW50cmVhbHJldmZlTWVyZ2VOb2RlZGVjbGFyZWFsdGdseXBoY2xvc2Vjb2xzdGFuZGJ5cmVwbGFjZWNvbHVtbnNwYW5pbjJtdW5kZXJkaWZmdXNlY29uc3RhbnRwb2ludHNhdHpvbm1vdmVtcm9vdHNwZWxsY2hlY2tzdXJmYWNlU2NhbGVldmVudHJvbGVoa2VybnJlcGVhdGR1cm1hbGlnbm1hcmthcmNjc2NzdW1tYXJ5a2V5U3BsaW5lc2JlZ2luY29udHJvbHNzbG90c2VsZWN0aW9uc3Ryb2tlLWRhc2hhcnJheWNvbmRpdGlvbmNvbG9ybWV0ZXJ2ZXJ5dmVyeXRoaWNrbWF0aHNwYWNlbGl1bmljb2Rlb25yZXNldGFyaWEtYXV0b2NvbXBsZXRlbGVnZW5kb25iZWZvcmVjdXRwbGFjZWhvbGRlcm1zdWJtZWRpYWFyZ2ZvbnQtc3RyZXRjaG5vaHJlZnVuZGVybGluZS10aGlja25lc3NkZWZpbml0aW9udXJscGF0dGVyblRyYW5zZm9ybWNvbHVtbndpZHRobG93c3Jjc2NoZW1lZXh0ZXJuYWxyZXNvdXJjZXNyZXF1aXJlZG9ubW92ZXN0YXJ0b3B0aW9ucnVieXJvd2xpbmVzb25yb3dleGl0b2xvcmlnaW50YXJnZXRZaW5kZXhhcmNjc2NoZm9udC1mYWNlLW5hbWVzdHJpa2V0aHJvdWdoLXRoaWNrbmVzc3ZpZXdkZXNjdmVyeXZlcnl0aGlubWF0aHNwYWNlcmVwZWF0RHVyZzJ0YW5oZHVybWFjdGlvbmxhYmVsdXNlbWFwZmVmdW5jcmludGVyc2VjdG1hbGlnbmdyb3Vwc2VsZWN0b3JiZG9mZWNvbXBvc2l0ZXNvbGlkY29sb3JjeG9uZmlsdGVyY2hhbmdlaW5pdGVtaWRtZWRpYW50Zm9vdGFyaWEtcG9zaW5zZXRyb3dzZGl2aWRlc3RpdGNodGlsZXNmb250LWZhY2Utc3Jjc3BhbmxpbmVhckdyYWRpZW50dHJlZm9wYWNpdHlsaXN0c3Ryb25nbWluZGRsaWdodGluZy1jb2xvcmJ5bWFza1VuaXRzbW11bHRpc2NyaXB0c2ZlQ29sb3JNYXRyaXhyeHhsaW5rOmFyY3JvbGVwYXRoTGVuZ3Rob25mb2N1c3RoYXJpYS1sZXZlbGNvbXBhY3RzdGFydG9udW5sb2FkYXV0b3N1Ym1pdGxhcGxhY2lhbmltYWdlLXJlbmRlcmluZ2d0aW5wdXRjb21wb3NlY2lvbmZvY3VzaW5nb3V0ZXJwcm9kdWN0dmlld0JveG1hcmtlclVuaXRzc2hhcGUtcmVuZGVyaW5nZm9udC1mYWNlLWZvcm1hdGJvZHlkaXZtYXJrZXJ3aWR0aGNsZWFyc3lzdGVtTGFuZ3VhZ2VyZXBlYXQtdGVtcGxhdGVtcHJlc2NyaXB0c2ltcGxpZXNzY3JvbGxkZWxheWFuaW1hdGV0cmFuc2Zvcm1hdXRvY29tcGxldGVjc3ltYm9sY29udGVudHNjcmlwdHR5cGV5c3RyaWtlbGluZXN1bWRlY29kaW5nZmVGbG9vZGZlRGlmZnVzZUxpZ2h0aW5na2JkZmVtb3JwaG9sb2d5Y25yZXF1aXJlZGV4dGVuc2lvbnNjbGlwUGF0aG5vdG1hcmtlci1taWRvbmFmdGVydXBkYXRlbm90aW5sYW5ndWFnZW1hcmtlcmhlaWdodGZlZnVuY2dmZUZ1bmNSd3JhcHRleHQtcmVuZGVyaW5nYXJjdGFuYXJpYS10ZW1wbGF0ZWlkYmFzZXByb2ZpbGV2aWRlb3Byb2ZpbGVzdHJpa2V0aHJvdWdoLXBvc2l0aW9ubXN1cHR0cmFkaWFsZ3JhZGllbnRzZWxlY3RlZGdyYWRub3NoYWRlc3BlY3VsYXJFeHBvbmVudGFuaW1hdGVhY3RpdmVtYXRodmFyaWFudG9uYmVmb3JldW5sb2FkdHJhbnNwb3NleWNoYW5uZWxzZWxlY3RvcnNhbmRib3hyb3RhdGVvbmRlYWN0aXZhdGVraW5kZmV0Y2hjb2x1bW5zcGFjaW5nYmxpbmtzZWNtc3R5bGVmZURpc3RhbnRMaWdodGF1dG9wbGF5b25yb3dzaW5zZXJ0ZWRtZmVuY2VkZmVpbWFnZXhtcHJlbmRlcmluZy1pbnRlbnRkaWZmdXNlQ29uc3RhbnRhY2N1bXVsYXRlbmV4dGlkc2NvcGV5Q2hhbm5lbFNlbGVjdG9yYWNjZW50dW5kZXJvbnBhZ2VoaWRlYWx0Z2x5cGhpdGVtc2VhbWxlc3Njb250ZW50U3R5bGVUeXBlY29kb21haW5tYXNrQ29udGVudFVuaXRzY2FydGVzaWFucHJvZHVjdG1waGFudG9tbWludXNzcGVjdWxhcmV4cG9uZW50YXV0b2ZvY3VzY2lyY2xlc2l6ZWRlZmVycmVtcGllY2V3aXNlcGx1c2Nsb3N1cmVhbmltYXRlY29sb3JvY2N1cnJlbmNlZnJvbWgzYW5kc3dpdGNoZmVHYXVzc2lhbkJsdXJkYXRhbGlzdGZvbnQtc3R5bGVhcHBsZXRkbG9uem9vbXgtaGVpZ2h0ZnJhbWVzcGFjaW5nbGltaXRpbmdjb25lYW5nbGVmZXNwb3RsaWdodHBhdHRlcm5Vbml0c21lZGl1bW1hdGhzcGFjZWltZ2VkZ2VvdmVyZmxvd2ZpbGwtcnVsZW9yaWVudHN2aWV3dGFyZ2V0aWRlb2dyYXBoaWNsaXN0ZW5lcmg0cG9zdGVyZmFjZW5vd3JhcGZpbHRlclJlc2FyY3NlY2hwcmVzZXJ2ZUFzcGVjdFJhdGlvZmVGdW5jQWludGVnZXJzbHNwYWNldGltZXNrZXlnZW5hcmlhLWhhc3BvcHVwcm93c3BhbmFsdGdseXBoZGVmZm9ybWVuY3R5cGVmaWx0ZXJyZXN4Zm9yZWlnbk9iamVjdHN5bWJvbHN5bW1ldHJpY29uY29weWNzY2hzZWxlY3R0ZXh0YXBwcm94aGlnaGZlTW9ycGhvbG9neW1hcmtlcldpZHRoCFAQAAkAAAARUBAABAAAABVQEAAKAAAAH1AQABEAAAAwUBAABwAAADdQEAAMAAAAQ1AQAAMAAABGUBAACwAAAFFQEAAMAAAAXVAQAAoAAABnUBAACAAAAG9QEAABAAAAcFAQAAcAAAB3UBAAAwAAAHpQEAADAAAAfVAQAAsAAACIUBAAAgAAAIpQEAAFAAAAj1AQAAcAAACWUBAADAAAAKJQEAAKAAAArFAQAA0AAAC5UBAAAwAAALxQEAACAAAAvlAQAAEAAAC/UBAABwAAAMZQEAANAAAA01AQAAkAAADcUBAACQAAAOVQEAANAAAA8lAQAAgAAAD6UBAAGQAAABNREAACAAAAFVEQAAkAAAAeURAAAwAAACFREAAH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b3RDb25ncnVMZXNzU2xhbnRFcXVheGk7bHRyaWU7YXJpbmc7TnNja29DaXJjbGVEb3Q7bGF0O25vdG5pTnRpbGRlbWFwO3N3bndhclNob3J0UmlnaHRBcnZCYXJ2cnBwb2xpbnN3QXJDYXBpdGFsRENpcmNsZVRpbWxwYU5vdFRpbExhckRvdWJsZVZlcnRpY2FsQmFjY2VkaXNlYVNxdWFyZUludGVyc2VjdGlzaW1lcXR3b2hlYWRiYXJ2ZURTY3lMYW1iZGE7Tm90VGlsZGVUaWxyaWdodHJpZ2h0dWNpcmM7Q2xvc2VDdXJseVF1b3RlO0NvdW50ZXJibGFja3RyaWFuZ2xlbFVuZGVyQmFhbmdydHZiO3VkYmxhY2JvcHJpZ2h0bGVmdGFybnJpZ2h0YWF3aXJicmtlcGhpdjtsZWZ0cmlnaHRhcnJvd3M7Z3RyZXFsaW9wQW1Eb3duVGVlb2d0aW1lc2Jhck5vdEVsZW1jaXJjZW1lYXN1cmVkYW9taW51cztTdXBlcnNUaWxkZUZ1bGxFcXVhbDtucHJlTm90VmVydGljYWxCU2NpcmM7aXNpbnN2dGNhcm9uO0FhY2hlY2ttYXJrO3dwO0Rac2N5O2ludHByb0VhbGFycmhrO3VjaXJjUmhqc2VyaWdyYXZlO0xvd2VyUmlnaHRBcnJzbXRlbGludGVWZXJ0aWNhbFNlcGFzb2ZnbkU7Ymlnd2VMZWZ0UmlnaHRBcnJvdztOb3ROZXN0ZWRHcmVhbnJBTG9uZ0xlZnRSaWdodEFycm93O1JldmVyc2VVRG93bkxlZnRWZWN0b3JEY2Fyb1JpZ2h0QXJyb3dCbnN1cHNldGVxO3N1cGVkUmlnaHRUcmlhbmdsZUJhclVkYmxhY2xkcXVvcmVyTEplcHNpQnVtc3VibXRpSHVtcERyY3lyY2VkdXBhcnF1YXRlcm5pb25zTm90U3Vic2V0RXF1YWw7c2NpcmNOb3RMZXNzVGlsT2N5O25lZG9iZWJpZ3VwcnVyZXNhY2N1ZGFycmxGaWxsZWRWZXJ5U21hbGxTcXVhcmU7b3Njcjt4d2VkZ2dhbW1hZEhmcmN1bGFycnBEb3duTGVmdFJpZ2h0VmVjdEVsZW1lU2NyQXRhaWFuZ2U7UnJMZWZ0RG91YmxlQnJhc2hvcnRtaWRWRGFzQW1hY3I7SUVjY29sdHNjeTtsamN5cGFyc3N1YnJhcnI7Ym5lUmNlR3NjclVwYXJyb3c7RW9nb29yZGY7ZHRyaWZzd25yc2FxdVdvcGY7bnNpdmFyc3Vic2V0bmVxcTtuc2NjbmFwRXR3aXh0QXRpbGRlO3h2ZWdzY3ZhcnByb3B0Y2VkaURvdWJsZVJpZ2h0QXJyb3dOZXN0ZWRHcmVhdGVyR3V0ZG90O3Zhcm50aGV0YXY7cHJvZmFsSW50ZXJzZWN0aW9uO2xvcGRhZ2dzdXBzRGNzdWJtdWx0dXRpbGRlO1N1Y2NlZWRzRXFsbGhhcmNvbmludFJpZ2h0VHJpQ2lIaWxiZXJ0U3BvZWxpZ2x2c29sYmZvcmFsbDtsb25nbGVmdHJpZ2h0RG93blJpZXNkYm94dlI7ZG90ZWdzY3I7b2Rzb2xkO25kYXNoZG93bmF5c2Njd2lubEFycm52RGFzaHJhcnJmcztEb3VibGVDZUREb3Q7WnNjdGlub2xjcm9zc2NpcmNsZWRjaXJpbm9kb3Q7bGVmdHJpZ2h0YXJyb3c7TGVmdEFuZ2xlQnJhY2tlbWVhc3VyZVlmcmRvd25kb3duTGVzc0dyZWF0aXF1ZWd0cmVyaWdodGhhcnBvb251bG9uZ2xlZnRhTGVmdFZlc2NuUGFydGl2RGFzaDtJbWFjcjtUYXVlZkRvZm9ya3Y7WmNhcm9uO0djaXJjYmZyYmVwc2k7Ym94Vkw7ZXFzbGFudGNvbXBsZVJFbmRhc2g7YnNlbWljaXJjbGVkZGFYZnI7RG91YmxlVXBEb3duQXJ0aWxHSmN5cm90aU5vdExlZnRUcmlhbmdsZUVxcHJ1c21hbGxPbWlqY3VsYXJyZXBzaXZHcmVhdGVyVGlsZGVjb2xvbjtzbGFib3htaW51S2ZyO1JldmVyc2VVcEVxYW5nbGU7Q29udG9yYWRvbWludXNMc2g7VXBBcnJvd0Rvd25BcnJvdztxdW90O0V4aXN0aGJTcXVhcmVJbnRlcnNWZXJ0aWNhbFRpbHJhZW1wdHlOZXN0ZWRMZXJhcnJ0bDtOb3RIdW1wRG93bkh1bW1sbGJhcnJMZWZ0RG93blZlY3RvckJhRG93bkxlZnRWZWN0b3I7VnZkYXNuc3ViO2FuZ3pUaWxkdHJpYW5nbGVyaWdodGVxO2hhcnJjcmlnaHRsZWZSY2xkcnVzaGFyY3VyYXJybTtUaWxkb3RwcnBhcjtFbXB0eVZlcnlTbWFsbFNxdWF1aGFybGxzY3I7dnppZ3phZ2NhY3V0UGFydGlhbFNxdWFyZVN1cGVyc2V0RXF1YUh1bXBaSGN5O0hzdHJvaztyb3RmcmFjY3NjcjtBb3BmbG9ucmlnaHRzcXVpZ2FybndhcmhrO0dyZWF0ZXJHcmVhZXhpc3RzdWJzZXRlcXE7Q291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JudHJpYW5nbGVyaWdwdW5jc3A7RXF1YWxUYWxlZnNpYWN1dXJjbGxjb3JuZXJ3Y2lyTm90UHJlY2VkZXNTbGFDb3VudGVyQ2xvY2t3aXNlQ29udG91cnBzY0xvbk5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyTGFycmJjb25nO29yb3JzbWlkO2FuZGFuZDtUaWxkZUVxdWFsO250cmlhbmdsRmlsbGVkU21hbGxTcXVhclByaW1jb21wbHRsd2VkYmFjdXJybG9uZ21hQUdyZWF0ZXJFcXVhY2lyc2NpcjthbmRzbG9wc2hvcnRzcnJlYWxpbmVtYWx0ZXNQcm9kdWN0O0xlZnREb3duVGVpbnRsYXJob3JzbG9wU2hvcnREb3duQXJyb0RpYWNyaXRpY2FsRG91YlJpZ2h0VHJpYW5nbGVFcXVOb3RTdXBlTm90VGlsZGVGdWhrc3dhckV4cG9wcm9mc3Vsb25nbGVmdHJpZ2h0YXJybG9uZ21hbmdydGltYWdlc3N0ZXRoO3RoZXRhc3hoQXJyO0NjZWRQZnI7Ym93dGllRW1wdHlWTm90TmVzdEVwU21hbGxlc3NhdHJpYW5oYXJJbXBsaWVzRG93blJpZ0Rvd25SaWdodFZlY1N1Y2NlZWRzU0xlZnRDZWltaW51c2Q7dWZpc2h0O3RlbHJTYWN1dGU7ZnJvd0Rvd25BcnJvd1VwQXJyb3dNaW51c1BsdXNzY2FwO3Nxc3ViZTtnRURpYWNyaXRpY2FsVGlseHZlZTtwcm5hcE5vdExlc3NFcmlnaHR0aGxhcnJmc25vdGludmFVb2dkbGNvcm47ZGVtcHpldGE7dGVudHJpYW5nbGVuTGVmdHJpZ2h0YXJyb3dMc3Ryb2s7YW9nb0RvdWJsZVVwQXJyb3c7Y3NjS2N5O3N1YkVib3hoVXBBcnJvZG90ZXFIYWNlaztMb25nbmRhc3Vic2ltO2d0bFBhclZlcmJhbGVmdGxlZnRhTm90U3VjY2VlZHNFcXVzdWJzZXRlcXFrYXBwYTtIYWNNZWxsaW50cm5sZXFxYm94dEJjeTthcGVTaG9ydExlZnRBcnJob2JpZ3RyaWFDaXJjbGVUaXRyaWFuZ2xlcmlnaHRlcU1zY3JvcmRlcjtnamN5RGlhY3JpdGljYWxEdmFuZ3J0O2hmQ2RveWljQ291bnRlckNjYXJldDtkb3duaGFycG9vbnJpZ2hvb2tyVmJhcnNxc3VidGhoYXJyY2lyO2NpcmNsZWFycm93bGVmdDtkc2NyO2ltYWNibGFja3RyaWFuZ2xlQ2xvYmJyaztic29sO3JkcXVvcjtzaW1sRTtVcGRvd25hcnJvd25jb25nZG9yZHNoTG9uZ2xlZnRhcnJvd2JveGJveDtmZmxsaXZhcnRyaWFuZ2xlbG5wYXJhVW5kZXJCcmFja2VOb3RTcXVhcmVTdXBlVXBFcXVpbGlicmxhcnJscERpYWNyaXRpY2FBcHBseUZ1TmVzdGVkR3JlYXRlckdyZWF0ZWJlcm5vdTtIdW1wRXF1YWxyZGxkaGFyaW1hZ3BhcnREb3duTGVmdFRlZWd0cXVlc2d0cXVwcmVjbmFwcGNpcmNsZWFycm93bGVmd3JlYXRoO2NlbXBidWxyZmlFYWNmYWxsTGVmdERvd25WaW1hdGhuYW5HSmN5O05vdExlc3NHcmVhdGVybHN0cm9wbHVzO2JpZ29kb3Q7R2ZyO2RhZ2dlcm5zdXBzZXRlcWN1cGxyaG5ocHZ6aWdscmFMb3dlclJpdXJpbmc7d2ZyS0hjeW9tZWdhTGVmdFVwVmVjdG9yQnhvcGZHcmVhdGVyU2xhbnRFcXVhbExlZnRUZWVWZWN0b2dyYXZlblJpZ1RSQUREc3Ryb2s7bGF0YXNtYWxsc2V0bWluUHJlY0xvbmdSaWdodEFyaWdodGxlZnRPcGVuQ2xlc2RvQWJyQWJyZXZlWUljeVJpZ2h0QW5nbGVCcmF6Y2Fyb247Z3RyZXFxbGRpYW1vbmRzdXRpbGRlbmVMZWZ0VHJpYW5nbGVCYXRjZWR2YXJ0cmlhbmdsZWxlZWRvbG9icmtkaGFycmRvd25kb3djaXJjZXE7ZGJsdmFyc3Vic2V0bHRjSXRpQ3Njcjtsb25ncmlzY3BvbmFwb3NqbWF0aGRyYmthcm93WmZBZ3JhS2NlTG9uZ0xlZnRSaWdodEF6d25qO2pjaXJjaXByb21pZGZlbWpzY3J2YXJrYXBwdmVydGJpZ29wU2Z2YU5vdFB1b3BmbnZydHJpZW9pbkRvd25SaWdodFZlY3RvcjtMZWZoc3Ryb21pZGFzUHJpVEhPUk5wbHVzc2lyYXJyZnNwaGk7c3VwaHNvbDtsZWZ0dGhyZWV0aW1Ob3RTcXVhcmVTdWJ0ZWxyZWNzemxpZ0lKUHJvZHVjdHJpcGx1c1ZlcmJhcjtiY3k7bGVmdHRoTGxlZnRhcnJVcHBlaWlpbk5vdEdyZWF0ZXJGdWxsRXFuc21pVmVydGljYWxUaWxkZVJhY3V0ZTtwcmVjYXB1YXJWZXJ0aWNhbFNlcGFyYW9sYXJycm9hbmdzcWN1cHNzaHk7aW9nb247bmhwYUdib2hob29rcmlnaHRhcnJvd2JhY2tjb25zY2VkZG90ZXE7bm9wZjtCdWN1cGJyQ29sb247SnNlVXJkYWdnZWR6aWdPbVNob3J0TGVmdEFycm9SaWdodERvd25WTGVzc0dyZWF0ZVVwc2lsb247TmVnYXRpdmVWZXNhY3V0ZTtjdXJ2ZWFyckRvcGY7Y2Fyb247Tm90RXFCckRvdWJsZUxvbmdSaWdodEFycm9SaWdodEFycm93TGVmdXBzaUNPUFlwbU5vdFRpbGRlRXF1YWxTdXBsdXNhY2xyaGFyO2xvbmdsZWZ0cmlnaGFwcHJvb3RpbGJwcmltZTtudmdlO0NlbnRlUmlnaHRBcnJvd0xlZnRpbm9VbmRlckJyYWNEb3VibGVEb3duQXJyb3dlcXVhbGxybTt5Y2lyYztEb3VibGVDb250b3VySWNkb3Q7UkJhcnI7dkJhcnY7VGhlcmVmb3JlO2Jzb2xhZW1wdHl2O05vdERvdWJsZVZlcnRpY2Fsc3Vic2V0bmVxY2lyY2xlYXJyb3dsRGlhY3JpdGljYWxHcmF2ZTtOb3RMZXNTaG9ydFJpZ2h0QXJyb0NlbnRlckRkZGFnVHJpcGxlRG90U2hvcnRVcEFycm93O05vQnJsZWZ0ZWZob29rcmlQcmVjZWRlc1NsYW5ib3hEbDtOb3RSaWdodFRyaWFuYmlnb3RpbWVzO1N1YnNldEVxdWFsO2lpbmZpbjtsZXNzc05vdEVxdWFsVGlsZGU7UWZyO2tqbGVmdHJpZ2h0YXNxY2F0b3Bib3Q7dG9lbGx0cmlKb25ydHJpZTtDb3VudGVOb3RFeGluZ2VxO3R3b2hlYWRsZWZ0YXJydHJpYW5nbE5vdFN1cGVyc2V0RXF1YWw7ZXhwZWN0YXRpb25Vb2dvZnJhYzM4O0xvbmdyaWdocmF0aU5vdFJpZ2h0VHJpYW5nbGVFcXVhbERvdWJsZUxvbmdMZWZ0UmlnaHRBcnJvU3F1YXJlSW50ZWJuZTtFZmJyZXZlO0xlZnREb3duVGVlVmVjdExlZnRBcnJvd1JpZ2h0QXJycnRpbWd0ZG90O0FicmVuc3Vwc2V0ZXFxO29hc3RJZkxlZnRyaWdodGFsb3RpbWVzO2hzdHJva3N3amNpcm11bWFUaWxkZUZ1bEhhdDtsbGNvcm5sbWlkb3RkaXZpZGVsSGFydm9wZnJhYzE2ZWU7ZnNRc2NyaGFycmNpbGNlZGxlZnRoYXJwb29uVXBBcnJvd0Rvd25PYWN1dGU7UmNlZGlsanNlcmNMZWZ0UmlnaHRWZ3Ryc2ltZG93bmhhcnBvb25yaWdodHJhdGFpbDtudmRhc2xlZnRyaWdodHNxdWlnYWJpTm90VGxvem5vdGluO2xmbG9vcjtOb3RMc3Vwc2V0bmVxYW5kc2xvcGU7TG1paWlpaW5wcnVyZWxBYnJldmU7UmlnaHRBbmdsZUJyTm90RG91cmF0aW9ucGk7cnRocmVlaHNsYXNxdWFhZ3JhdmU7RG93blJpZ2h0VGVlVmVjdG9yVnNVdGlsZGV3ZWRiYXJzZWFycm9Ob3RMZXNzTGh5YnVsbGN3Y29uR3JlYXRlckdyZWF0dWZFcXVhbFRpbG9wTXNjbGxjb2d0cmxlc2x2ZXJ0bmVwcmVjbmVxcTt3ZWRiYXI7UmFjdVVwVEludmlzaWJsZVRpdmFydHJpYW5nbGVya2N5O0xlZnRBbmdsZUJydmVlYmFJb3Buc3Vwc1hzZ2Vxc2xhbnRuYnVtcG5MZWZ0YXJyYXBvbnNob3J0bWlkSmNpcmNyY3ViO0Rvd25MZWZ0UmlnaHRWZWN0b3I7Y3VydmVhcnJvd3J2YXJ0cmlhbmdsZXJpZ2h0O2JveHY7bEJhcmJlbXB0eXZhbmR2bGN1UmlnaHRVcFZlY3RvcjtKc2Jsa2N1cmx5dmVlY2x1YnNkdERpYWNyaXRpY2FsVGlsZGU7Z2ZFZ2NpcmNsZWFycm93bGVSaWdodEFycm93TGVyYW5nbGFtYnhvdGltZTtuYXBFO0d0RG93bkxlZnRWZWN0b2JveHZyO1ByZWNlZGluZmluO252YXA7cGFyc2ltbWludXNkdTtyaWdodHRocmVldGltZXNzdHJhaWdodGVwc2lsTm90TGVzc0dyeHV0cmlxdWF0TGVzc0VxdWFsR3JlYXRlcmRsY29ybmhzY3JuR3RkaXZpZGU7ZmVtYWxMZWZ0VUhzdGJsYWNrdHJpYW5rY0REYm94aHU7emRvdExlZnRGbG9vcjtsdHF1ZUxhY3RlbHJlYztzdXBzdWJEb3Q7c2xhcnJ2YXJzY2FwY3VwTmVnYXRpdmVUaGluU3BhY2U7UmlnaHRBcnJvd0JhcjtpdGlsc2NuYXBHcmVhdG1hY3JsYXJyO05vdERvdWJsZVZlcmlnaHRsZWZ0aGFycG9vbkxlZnRBbmdsZUJmcmFjMzRwcm5SaWdodFRlZVZlR3JlYXRlckZEaWFjcml0aWNhbERvdWJsZXBsYW5Ob3RTdXBlcnN0YnJrbGFlbXBuamNTdWNoVGhvckNvbmdyaWdodGFycm93dGFTcXVhcmVTdXBlcnNldGltcGVkO0xlZnRDZWlsaW5nbGJyYWNlUWZycmJibGhhcnN0cmFpZ2h0ZXBzaWxvbjtPbWVkYmtndHJhcHByb3hzdWJkb0dicmV2ZTt0aGluTm90VGlsZGVGdWxsRXF1Tm90TGVzc1NWZGFzcG9tYXJrZXJjd2NvZmZsbGlnbGU7b2dhbmdydHZiZDtpbmZpbnRpUm9wZjtvcnNsb3NoY1ZlcnRpY2FsQnJlYWx2YXJzdWJzZXRuZXE7UkJib3hib3hIdW1wRG93bkh1bVRoaWN1bG5hcHByb3hOb3ROZXN0ZWRHcmVhdGVyR3JlYXRuc3VjY0Rhc2h2dmZyb2FjdXRlZW9nb25tYWNpbnRjYXFvcHVwaGFycG9SaWdodFVwRERpYWNyaXRpY2FsRG90O0hpbGJlcnRTaW50O05lc3RlZEdyZWF1bXZhcnJob01lbGxpbnRVcHBlclJpZ2hkaXY7YnJ2YmFyY2lyY2xlYXJyb3djc3VwZVN1Y2hUaGFWZXJ0ZW1yb3Bmc3FzdWJzZXRlYWFjdXRFcXVhcmF0YWlWZGFzaE5vdEV4aXN0Y2lyY2xlYXJyb3dyaWdodG1hcHN2YXJ0aGV0YXRyaXBsc3FDbG9ja3dpc2VDb1VuZGVyUGFyZXVsY29ybmVtY3k7RG93bkxlZnRSaWdoYmxhY2t0cmlhbmdsZXJpZ2Fjd2lMZWZ0VXBEb3duVmVjdG9yRXRyb2JqY3lTbWFsbEdmcnR3b2hlYWRyaWdodGFycm93O1pIcHJvZmxpbmRsZ2VzbDtQaTthbmRhbmdlcXFMZWZ0VXBUZWVWZWN0b3I7cnJhcnI7c2Nhcm9uO09wZW5DdXJseURvdWJsZVFCZWNhdUljaVRvcFJldmVyc2VFbGVib3h1clByZWNlZGVzU2xhbnRFcXVhYnVtcFJpZ2h0RG91YmxlQkdKY2N1ZXNjO1dvcGZOb3REb3ViTmVnYXRpdmVNZWRpdW1TcGFjZWxyYXJyYXJpRGZybnN1YnN0aW1jc2NyT2ZyQ29udG91c2NpcmM7RXNjcjtOZWdhdGl2ZVRoaWNrU3BhY2U7Zmx0bnM7RW1wdHlWZXJ5U21hbGxzaW1sVmVydGljYUNvbnRvdXJJbnRlZ3JBYXJydWRoYUFwcGx5RnVuY3RlbGNhcDticHJpT3NDcm9zcztwaXZzdXBzaWNpVW1TY3k7d2VkZ2U7VmVlO0RvdWJsVGlsZGVUaWxkZTtwcmVjY3VybHllcTtpc2luZG9lcXNsYW5BcHBhbWFuTGVmdHJpZ2h0YXJybnByZWNlcWx0cXVlc05vdExlZnRUcmlhblJjYXJvc2ltcHh2ZWVwY2ltb2Y7emZyO1N1cGVyc2VlcWNJZnI7YmlndmlxdWVzdDtsZXNuZWFycm9kb3RzcXVOYWNucmlnaHRhcnJvd2Rvd3BjeWpzVW9wQWN5Y2FwYnJjdXNmcm93bnByZWNuYWRvdDtMb25nUmlnaGJveHVSO2ltYWdwYXJ0O3JhbmdlO3JiYnJrO25SU0hjckJhcnI7bHRpbWVzO0hBUkRjeXJlTWZMb25ncmlnaHR0cmlhbmdsZXJpcmJya3NsZDt4bGFycjtEb3VibGVVcERvd25BcnJvd3Jtb3VzdGFTdWJzZXRFcXVhcmlnaHRsZWZ0YXJyb3dzRGlmZmVyZWdsRXFpbmNpcmNsZWRhc2RlbXB0eXZwbHVzdHdib3hWSDtCZWNhdXNlO05vdEh1bXBEb2xlc3Nkb3N0cmFpZ2h0ZXBwb3VuZDtOb3RFcXVhbFRpbGROb3RTcXVhcmVTdXBlcnNldHBlcmNYaW5WRG53YXJyYXRhTm90U3VjY2VlZHNTRG91YmxlVmVydGlzdWJtdWNpcm1tRERvdG1ucHdlZGdlcTtOZXdzd0Fycjt2YXJrYXBwYTtTT0ZUTGVmdFJpZ2h0VmVjdG9ybWFwc3RvZG93bjtOb3RTcXVhcmVTdXBlcmR0ZG90O0xtaWRvdGdpT3RpbWVBcHBseUZ1bmN0aW9uUHNjcjtFbGVCZXJ2QXRvcGZvcmtsZWZ0cmlnaHRoYWNjdXBzVXBBcnJpZ2h0bGVmdGhydWx1aGFFZ3JhdmVubGVmdGFycmRvdWJsZWJhcnZCYVBzaWVsaW50bWFwc3RvdXN1cGVkb3Q7ZG90c3F1cmNybGVmdGxlZnRhcnN1Y2NjdXJseWVxO3BhcmFjaXJjbGVkZGFzaHZhbmdydGxvb3BhcnJvd2xzY25zaW07U3VjY2VlZHNFcXVhUnJpZ2h0YXJyb3duc3FzdXBlbWlkY2lyckJhVFNjeVJpZ2h0QXJyb3dMZWZ0QXJ2YW5hbmdtc2RhZU5vdEVxdWFsVGlsZGViYWNrZXBzaWxvbmRvbGxhcnBybnNEaWFjcml0aWNhbERvdWJsZUFjdWFhY2RpZ2FmcmFjMThsYXJyYmZzbnVtc0xlZnRyaWdodGFycm93O0NoaTtOb3RQcmVjTm90VGlsZGVGdWxFbGVtZW5jdWRhdnN1cG5FSWRvdGxvbmdsZWZ0cmxlZnRyaWdodHNxdWlnYXJic29sYjtubGVxcTtjb3B5bGJhb2dyYXZlO0VtcHR5U21hbGxTcXVhcm9wYXJjZWlsbG9vcGFycm93bGVmcmFxdURvd25MZWZ0UmlMZWZ0VXBUZWVWZWN0b3JyYW5nbGVEZWw7Z3REb3VibGVSaWdodENpcmNsZVBsdXNMZXNzRnVsbEVxdWFyaWdodHRocmVnZXNkb3Q7SXVtbGJhcnd1ZGFwaWQ7TGVzc1RpbGlvcGY7YW5nbGFtYWxnO2dpbWVFbXB0eVNtYWxsU2dlcXE7TmVnYXRpdmVUaGRia2FyRmlsbGVkU21hSW52aXNpYnBsdXJmaXNoTm90RG91YmxlVmVydG9zc3Vwc3Vudmx0O1VwRXF1Q29uZ3J1ZW50O0tjZWRpZ2ZycHJvZmFob29rbGVmdGFyTGVmdHJmcmFzbDtGc2Nycm1vdXN0YWNoZTtSaWdodERvd25UZWVWZWNhYztDbG9ja3dpc2VDb250bHNFY2Fyb1JvdW5kSW1wbGFtRGlhY3JpdGljYWxBY1FVT1REb3duQnJldmU7bmxlTm90RG91YmxlVmVydGljYWxCYU5lc3RlZEdyZWF0ZXJHcmVhdGVyO2Jicmt0Y2VudGVyZG91b3BzdXAzZURvdDtjdXJseWVxc3NyYXJKc2NyO2RibGFjY2lyY2xlYXJWZXJ0aWNhbFRpbGRzcXN1cHNldGVic2ltO3NwYWRlc0RvdWJsZVVwRG9ERG9sdXJkc0JhTG9uZ0xlZnRBc2NuYXA7SWdyTG9uZ0xlZnRSaWdodEFybkxlZnRhcnJvd3ByY3VlO1VicmV2ZWdvcGxBdGFpUmlnaHRGbG92YXJwaUZpbGxlZFZlcnlTbWJzaW1lO3Zuc3VwYm94RHI7c3ViZWRvcGhpdkxlc3NkaGFtZnI7a3NjckNjb25pbnQ7SG9yaXpvcmFjdXRlO05vdFJpZ2h0VHJpYW5nbGVCVXBzaWxvTm9CcmVhazt0cHJpbWVkc2NEaWFjcml0aWNhbGRvdWJsZWJiTm90O250bFRyaXBsZURvbHNoO2NvbXBsZW1lU3Vic2V0RXF1bG5lcXF2bnN1Tm90TmVzdGVkR3JzaGN5T2NpcmNFb3BiaWd0cmlhbmdsZWRUaWxkZVRpbGRlU3VwZXJzZXRFcXVhVWFycm9jaXJhbmRhYm5lcXZ6aWd6YXhuaXM7RERvdHJ2YXJ0TGVmdERvdWJsTGVmdFRyaWFuZ2xlRXF1Tm90UHJlY2VkZXNTbGFuQWdyYXZldmFybm90aGluZztkZG90c2VxYkxlc3NTbGFudEVxTXNjcjt1ZnI7YW5nbXNkYWdsbGNvcm5lc29sYmFEb3VibGVMb25nUmlnaHRBcnJMZWZ0UmlnaHRBcnJvdmRhc2hvbXJhbmc7Tm90TGVzc0xlZGRhcmxhZ3JOZWdhdGl2ZU1lZGloYXJydztsRWc7bGVzc2dJbnRlcnNlYnVsbGVOZXN0ZWRHcmVhdGV1cGx1cztGaWxsZWRTdmxldnByb3A7dHJpc2JJb2dubWlsQmFyclRoZXRhO3h3ZWRnZWh5YkxlZnRUcmlhbmdsZU5vdExlc3NUaWxkZTtEb05lc3RlZEdyZWF0ZXJxb3BmYmxhY2t0cmlhbXVscHJuc2ltO2NoZWNrO3BybkVtaWRhc3RjdWxhcnJwO0Rvd25UZWVBcnJvZXVnbmU7bWFwc3RvbGVmdDtSZXZlcnNlRWxlbWJsb2NDbG9ja3dpRG91YmxlUmlnaHRBcnJvdztwZXJ0ZWxlc3NhcHBkaWdhbW1zbWVwYXJJbnZpc2libGVUYWJyZXZlO2VuZzt0b2VhO2xtb3VzQ2NhckZvdXJpZXJ0cmZsbmFwcHJvbmdlcztFcXVpbGlibmxhckRvdWJsZURvd25BcnVwaGFycG9vRW9nVXBFcXVpbGlicml1UHJlY2VkZXNTbGFMZWZ0QW5nbGVCcmFja2V0Ym94VlJOb3RHcmVhdGVyVGlsZGV2c3VibkU7Y3Rkb0NvcHJvZHVjdGRyY0xvd2VyTGVmdEFycm93bGhibGtJbWFnaW5hcnlJO3Nxc3Vic2V0ZXE7bm90aW5jYXBicmJveHRpbW1vZGVsc0JzY1RpbGRlRXF1YU5vdFZlcnRpY0xvbmdsaGNpcmM7Y2N1cHByZWNlcVpldGE7Tm90VmVydGljYVNob3J0TGVmdEFPdGltZXM7TGVmdERvd25WZWN0bnRnQ2xvc2VDdXJseURvdWJsYnNvbGJyYXF1bztDb3BmbWludXNHY2lvcGx1V2NlUGx1c0RvdWJsZUxvbmdMZWZ0UmlnSU9jeW5hdHVyYXZlZTtVcGRvd25hcnJvdztGb3VEb3duUlRjZWNoaTt0cmltaXJhcnJhQ3VwQ2FwTG9uZ1JpZ2h0QXJkZW1wdHl2O25wcmVjO0xlZnREb3duVGVlVmVjdG9yO05vdEh1bXBFcW5vdGluZG90bHRyaWVTcXVhcmVVbml5ZnI7SmZyO3JlYWxpbmU7ZGl2Ym94cGx1c0tjZWRpbGhlcmNsb3BhcmR1aGFySW50ZVRoaW5TcHJyYXJpZ2h0YXJwbHVzdHdvO0NpcmNsZVRpbWVOb3RSaWdodFRyYWZyO2xhcVdzY3I7dHdvaGVhZHJpYmZsZXFMZWZ0RG91YmxlQlNob3J0TGVmdEFycm93ZXF1aXZERFN1Y2hUaE5lc0xhbWJPY2lyRXhibGFja3RyaWFuZ2xlZElKbGlnVXBBcnJvd05vdFN1cGx2ZXJ0c2ZXc2NybGVzZG90ZXhwZXJpZ2h0c3F1aWdhdUFOb3RTdWJzZXRmcGFydGlTdWI7Tm90SHByZWNuYXBwcm94Tm90VGlsZGVUU3Njcm9jeTtEb3duYXJyb3dubHRyaXJwYXJubGVmdGFycm9ucnRTT0ZUY3k7WkhjbnNxc3ViZUVtcHR5U21Ob3RHcmVhdGVyRkNlVG9wZjtVcERvd25BcnJvd3RpbWVzZGhrc2Vhcm93Q291bnRlckNsb2Nrd2lzZUNvbnRjaXJtaWQ7ZG90ZXFkb3Q7ZW9wcmFycmI7ZGJsYWM7bXU7Tm90SHVtcEVxdWFsaW50cHJvZGNpcmNsZWFycm9SZXZlcnNlRXF1aWxpYnJlemFjTGVmdERvd25UZWVWRG91YmxlTG9uZ0xlZm9oYmFyO05vdE5lc3RlZExlc3NMbGFuZ2Q7bmdzaW1hc3ltcGVxO2xjZWlsbGVmdGxlZnRhcnJwcmVjYXBwckVxdWlsUGZybHVydWhhdG9wO2xvd2FzdHZhcnRobG9vcGFycm93Y3VybHllcXByZWNydWx1dHJwZXppdW07RGlhY3JpdGljYWxBY3VMZWZ0QW5nbGVCcmFjaW1hZ2xpbmU7Tm90TGVmdFRyaWFuZ2xlRXF1YWxOb3RWZXJ0bG9vcGFyQXBwbHlGYW9nT3BlbkN1cmx5UWJpZ3N0YXI7ZXF1YVByb2R1QWxjdXJ2ZWFycm93bGVpaW5maW9kaXY7bGVzc2VxZ3RyaXVtbGVxdWl2cGxhbmNraDtOZnNxdWFyZm5lYXJyb3dDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGxhdGFpaW50ZXJibGFja3RyaWFuZ2xlbGV0cmlhbmdsZWRvd2JsYWNrbG96ZW5pb2dvYWN1dElPY3k7TGVmdFVwVmVjdG9yO2R6Y0ZpbGxlZFNtYWxsU0NvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWxsdmVydG5lcXFwb3VucmRsbnBvbGlsQWFyY29wZjtsbDtQcm9wb3J0aW9udWRic2Vhck5lc3RlcmVhbHBiaWdzdGFyTm9uQnJlYWtpbmdTcHZhcmVwc2lsb01hcDtsYXJyaGt0b3BmO2duc2duZXFudHJpYW5nZG93bmhhcnBvWWN5Q2lyY2xlTWludXM7RG93bkJ0aGlVdGlsZGU7RG93blJpZ2h0Vk5lZ2F0aXZlVmVyeVRoaW5TcGFjZVVwRXFhYnJlc3VjY2N1ck5vdFNxdWFyZVN1cGVyc2V0O05vdExlc3NFcXVhbHRzYXBwcmFycmxVYWN1dGVUc3Ryb1JpZ2h0QW5nbGVCcmFja2VzdWJzdXF1YXRpbnRERG90cmFibGFja3RyaWFuZ2xpb2N5SGF2ZWVOb3RTdWJzZXRFcXVhUmlnaHRVcFZlY3ROb3ROZXN0ZWRHcmVhdGVMb25ncmlnbnZyQWFuZ3phdHdvemNhcm9ubGVmdGhhcnBvb251cDtjc3ViZTtsb3plbmVncmF2SmNpcnRpbWVzbmdlcXE7cmJya3NsdVlvR2FtbWFkO21hcHN0b2xlZnROb3RTdWNjZWVkbHNxYjtudmluVWJyY1BmUmZycXVhRG93bmFycm9Ob3RSaWdodFRyaWFuZ2JuZXF1dGJyaztMZWZ0Rmxvb3JkYmthcm93O2ZyYWMyNTtyQXJyTGVzc0VxdWFsR3JlYXRjeWxjdHk7Tm90TGVzc1NsYW50RXF1YWxDb3VudGJzaW1jdXJseWVxcGxjZWRpbDttYXBzdG9saXNpbnNMb3dlclJpZ2h0QXJib3hVcmZsdG50d29oZWdhbW1hZDttbGNwdHJwZXlvcE5lZ3JvcGFyRG93bkxlZnRWZXFzbGFudGd0Tm90RXF1YWJvd3Rhc3Q7anNjQ2xvY2t3aXNlQ29udG9kZWx0YTtuc2hEaWFjVWFjdW5zdXA7Tm90R3JlYXRlckdyZG93bmhhcnBvb25sZWZTaG9ydFJSY2F5YWN5cmVhbHM7VXBzRG91YmxlTGVmdEFycm9scmNvcm5lU0hjeTtkcmNyb3BvdGltZXNhc3VwYXJyTmNhcm9wbGFjdXJseWVxc3VDbG9ja3dpc2VyQWFycjtzaG9yTG9uZ0xlZnRSaWdoRXF1YWw7bG90aW1lc2hvcnRtaW5WcmxoYXN1Y2Nuc3NxY3VwO0RvdWJsZVJpZ2h0QXJyb25WZExjZXBvaXJlYU5lZ2F0aXZlTWVxY29sRGVsdGFkcmJjdXJhcnJtbmVhcnJvdztMZWZ0RG93blZlY3RvckJSaWdodERvd25UZWVWZWN0b3Jub3RpbnZjYXBwclJvdW5oYXJkbnZkYWJsYW5rO2FuZGFuZFJpZ2h0VHJpYW5nbGVFY2VwZXJpb2Q7RG93blJpZ2h0TGxlZnRBTVA7bmN1cDtyaXNlZWJlbXBPdmVyUGFyZW50aGVzaWVxY29sb247Rm91cmllRG91YmxlVXBEb3duQXJyb3c7T3ZlckJyUmlnaHRBcnJvd0xlZnRBcnJvdztuZXF1aXhvZG90O3Nob29mRG93bkxlZnRUZWVWZW5jb25nZG90O3ByZWNjdVJpZ2h0RG91YmxlQnJhYmFja2VlcXVpdjtsaGFydXBsdXNjdHJpZG90cmFlbXBDdXBDYW5wYXJhbGxlR3JlYXRlclNsYW50dnJ0cmlWb3BmO3ZBcnJlbGluVmRhc2N1cGNhcHNjYXJvbmxvejtVcmluanVrY3k7bGVzZG90b3I7Tm90U3Vic2V0RXF1YWxCZnI7V2VkaW50Y0VjYXJvbkRvdWJsZVJpTm90U3VwZXJzZXRFcXVhbHZhcnN1cG9jaXI7dm9wZjtkaWdhbWJveHBsdXJpbmdSaWdodFZlY0thYmxhY2tzcXVSaWdodERvd25UZWVWZWN0Tm90UHJlY2VkZXNTbGFudEVxdWFzdXBkb09mcjtycnRoaW5zb2hiRmZ2YXJzaWdtcW9wZjthcDtEaWFjcml0aWNhbEFjdXRlZXVyaG9va2xldXBoYXJwb29uTG9uZ0xlZnRSaXlhY3V0bnZydHJpT29wZjtESmN5TnRpbGRlO3JzaDtEc2NyYm94cGx1VXBUZWVBcnJvdztsYXRlO1VwRXF1aWxpYnJpdW07Y3V3ZUNycGFyZ1ZlcnRpY2FsTGluZXFwZWdyT21lZ3RwcmlFbXB0eVZlcnlTbWFsbFNxZGFsZXRTb0hvcmljdXJseWVxcHJlYztnZXFuZUFycjtjY2FwczthbmdzcGg7aG9hcnNob3J0cHJicmFja2JveGhVO1N1Y2NlZWRzVGlsZHJBdEFhY3V0c2NjdWVVcFRlZTtEb3VibGVSaWdodEFsc2ltbnRyaWFuZ2xlcmlnaHRTcXVhcmVJbnRlcnNlY2hmcjtjYXBkb3Q7TWllY3lBY2lsZWZ0YXJyb3c7SWZyZnJhYzU4O1BvaW5jYXJlcGxPcGVuQ3VybHlRdW90TGVmdFRyaXBoaXN1cGRhZ05vdFN1cGVyc2V0RXFaYWN1dGVZQW5hdHVyYWxzO2xicmtlO05vdFN1cGVyc2V0RXF1YU5vdEdyZWF0ZXJHcmVhdERpYW1vaWluc3VjY2FwcHJlY2FDb2xvbmVEb3VibGVSaWdodFROZWdhdGl2ZVRoaW5TcGFjZWluZmlzbWVwYU9ncmF1ZmxhdDtFY2Fyb247QWxwaGdzaW1saGVhcnRzQ29udG91ckludG9sY2lyO1plcm9XaWRsbGhhdXBhVmN5Tm90UHJlY2VkZXNFcXVhU3F1YXJlU3Vic2V0ZXVtbENpcmNsZURSb3VsdGxhcnI7TGVmdFVwRG93blZlY3RaZXJvV2lkdGhrc2Vhcm93O0RvdWJsZURvd25Ba2FwY2lyZm5pbnQ7Y2lyY2xlZGRhc2FuZ3N0O3phVXBwUmlnaHRUZWVBcnJvbGVmdGhhcnBvb25kdHJwZXpudW1lVXVtbExlc3NUaWxkZTtVZGJsYUxlZnREb3VibGVCcmFja1VwcGVyTGVmdHNoY3k7QXNzY3lob29rbGVmdHJhZWxlZnR0aHJlZXRpbWVJZG90O3N1Y2Nuc2lOb3RSaWdodFRyaWFuZ2xlRXF1YWw7RG91YmxlRG93bkFycnJhdGlvbmFsc2N1cmx5d2VkZ2U7ZHpjeTthc2NycmNlaWw7a2ZyO1Byb3BvRGlhY3Jsb25nbGVmdHJpZ2h0YXJwYXI7cmxhYmVjYXVzZWN1cmx5ZXFzdWNjO3ZkckFhckxvd2VyUlJpZ2h0VGVlQXJpbnRsYXJoa1RjZWRpbGVzc2FwcHJSZXZlcnNlVXBGaWxsZWRWZXJ5U21hbGxTT3BlbGRyZGhhcjtBZ3JhdmRvdG1ubEFyclN1cGVyc2V0RVNxdWFyZVN1cGVyc2V0RXF1YWxlcmFycnNjdWFycjtybGFyck9jaXJjO05vdERvdWJsZVZlcnRpY2FsQmFyeGNpcmM7dHJpYW5nbGVsZWZ0bG93YmFyO2xhZ3Jhbjt2YXJzdXBzZXRuY3VwY3N1cDJrZ3JlR2ZoZXJFcXVpbGlicml1bWJpZ3NiZXJub2xhdGVzO1JyaWdodG11bWFwRG91YmxlVmVydGljYXR3b2hlYWRyVXBEb3duQXJSaWdodFVwRG93blZudmx0cmZhbGxpY2Nhcm9uO01mcjtpdGlsZEx0cGZyO3ZzY3I7SWdyYXZib3h0aW1lcmlnaHRsZWZ0aGFudmFmcmFjMnF1YXRlckNvbnRvdXJJbnRlZ3JramNoQWJlY2F1c0RvdWJsZVVwQXJyb3dpbXBlYmZyO05vdEdyZWF0ZXJTbGFudERvd25MZWZ0VmVjdG9yQmFuTGVwcm9mbGluZTtLZkxlZnREb3duVmVjdG9yQ29Jc2NzdWNjbmFwcHJyaWdodGhhcnBvb25kb3duO0Nsb2Nrd2lzZUNvbnJpZ2h0cmlnaHRhcnJvWmN5O3VsY29ybnBtO2J1bGxhbmdtaW51cztSaWdodERvd25WZWN0b3JCb3JkbXJwcG9hbGVmc3lzdXBwbHVyaWdodGhhcnBvb251cDthb3BmZXF1YWxzO1JldmVyc2VVcEVxdWlsaXNldG1ueHdlZGFtYWxSYWN1dERvdWJsZUxvbmdMZWZ0UmlnaGNvcGZQcmVjZWRlc0VxdWFSaG87TG93ZXJSaWdoZWdzZG9lYWN1dG5sZTtuUmlnaHRhZW9nb09tYWNsZXNjYztUaWxkZUVxdWFsYnNvbENvdW50ZXJDbG9ja3dpc2VDb250b3V1ZGhhcjt0ZG9TdWNjZWVkc1NsYW50RXF1YWZjeU5vdExlc3NTbGFudEVxdWFuaEFycjtQcjtHcmVhdGVyR3JlYXRlZXBsTmFjdXRSaWdodFRlZVZlY3RvclRpbGRlRnVsbEVxb2N5bG9wbHVlY2Fyb25ydHJpZXRycE5vdFJldmVyc2VFbGVzZXR0c2NyVWJyZWxhbmdsZTtucGFydGFuZ21zZGFhO3JjZWRpbDtwZXJwbm1pZDtiYWNrZXBzaWxvbjtDY252bEFyQ2ZSaWdodFVwRG93blZlY3Rvb2NIdW1wRG93bkh1bXA7bHJtbGVxc2xOb3ROZXN0ZWZyYWM3YXdOZWdhdGl2ZW53YUNvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWw7TGZybHNpbWdpbnRsYXR3b2hlYWRsZWZ0YXJyb3c7Q29uaW50ZHN0clJ1bGVEbWRhc2g7Tm90R3JlYXRlclNsYW50RXFIb3Jpem9udGFsTGlpc2luaW1hZ3BhQ3NjclNjaXJjZm9ybXA7WXNjcmxhbWJkYTtiaWd0cmlhbmdsZXVwc2NuRWdjaXJjO3RoaWNrc2ltR3JlYXRlckZ1bGxFcXVhbGx0bGFycmlxdXRyaXNiO3JpZ2h0cmlnc3dhcnJvd25hcG9zO1JpZ2h0VXBWZWN0b3JCYXI7UmlnaHRVcFRlZVZlY3plZXJwcG9saWxlZnRoc3psRW95Y3k7U3VwZXJzZXRFcXVhbDtjaXJFR3JlYXRlclNsYW51Z3JQYXJ0aWFudW1zcHRyaWFuZ3BlcmlSaWdodEFycm93TGVmdEFIb3Jpem9udGFsTGluZTtib3hVUjtDb25pbnQ7T2Rib3JvREQ7U09GVGN5Tm90SHVtcERvd25oZXJjb250d29oZWFkcmlnaHRhcnJ1c2NyWG9wZmdlcTtQcm9wb3J0aW9uYWw7cXByaW1lO253bmVhcmxlc3NhcHByb3g7Rm91cmllcnRybmxBcnI7dXVhUGx1c01pb3BsbHJ0c3VwbnJpc2luZ2RvUmlnaHRBbmdseGxhY29tcGZuO0dyZWF0ZXJFcWJveHZlc2NyO0lKbGlnO21pZDtlcXNpbWh5cGhEb3VibGVDb250b3VySW5pbnRlZ2xmaXN4c3Vic2lwcmVjbnNpbTt4aGFycjtiaWd0cmlHcmVhdGVyTGVkSGFzdXBuZWNpcmR3UkVHO3JkY2JveGhETnNsZXNzYXBwcm94SW50ZXJzb3VtbGRvd25hcnJvRW1wdHlWZXJ5U0NIUG9wZjtXZWRnZW9pbnRvdnVsY29ybmVyO0NvbnRvdXJJbnRlZ3JhbDtSaWdodFVwVGVlVnZkYXNoO3NjY3V0cmFkZTtmYWxsaW5nZG90Y2ZyO05vdFNxdWFyZVN1cGVyc3VsdHJpTm90VGlsZGVGdWxsRXFMZXNzRmJveHZIdHdvaGVhZGxlZnRhcnJvVXBzaWxvbkFFbGlrZ3JlZW47bHRyUFZlcnRpY2FsVGlramN5O0xhY3V0ZXN0cmFpZ2h0ZXBzaWxvblJpZ2h0Rmxvb3I7RW1wdHlTbWFsbGlvdGE7YXBwcm94RG91YmxlTHplZG91YkRpYW1vbmQ7Zm9ya3NjY3VlO2x1cmRMZWZ0VXBEY2NpcmNyc2hMZWZ0RG93blZlY3Rvcjtsb3dhbmhWZnN3YXJoVW5pb247V29Mb25nUmlnaHRBcnJvdztwcmlFcXVpbGlDaXJjbGVNaW5qY2ltb2RlZmVtYWxlZG93bmhhcnBvb25yaWdodDtWZXJ0O1FzY3NlQXJWZGFzaGw7bnZydHJTdWNjZWVkc1NsYW50RXF1blZkYXNoc3FjUmlnaHREb3duVmVjdG9yQmFybHJ0cmh5YnVjdXA7SHVtU2hvcnREb3duQXJyb3c7c3ViZWRuc3Vwc2V0SmN5aXNpbmRidW1wRURvdWJsZUNvbnRvdXJJbnRlZ3JhbHNleHRudkhhVmJEb3duYXN0cmFpZ2h0R3JlYXRlclRzdXBwbHVzO05lZWNvbHF1YXRlRmlsbGVkU21hbGxTcURvd25MZWZ0VGVlVmltYWdsT3BlbkN1cmx5RG91YmxlUXVvdGU7T2ZsbHRybHNxdW9yYmthcm93dmFycGk7b2FzdDtFeGlzdHNMZXNzRXF1YVNxdWFyZVN1YnNldDtlcmFycjtkamN5VGhlcmVmb3JldmFycjtNZU5vdExlZnRUcmlhbmdsZWFuZGRvbGNyb3NyYXJyYXBTaG9ydExlZnRBcnJvdztjd2Nuc3VjY2VxdGlsZGN1bGFyRmN5RG93bkFQcm5lc2VhcmJhY2twcmlDbG9ja3dpc2VDb250b3VydGNlZGlsO3VoYmxOb3RHcmVhdGVyTGVzcztib3hEUjtMZXNzU2xwcm9wdG87cGl0Y2hmb3JrO2dicmVMb3BmO2NjYXB6Y3k7Y3VydmVhcnJvaGNsYXJyc2ZmbGlQb2luY2FyZXBsYW5lO0F0aWxlbXB0eXNIb3Jpem1lYXN1cmVkYW5nbHNjaXJib3hVbDtsYXJycGxmbGF0cmlhbmdsZXByaW1TcXVhcmVTdWJzRFNjeTtFcXVhbFRpbGRlO2JlY2F1c2U7ZXF2cHhvcGFjaXJjU09hY2NhcnhvcGx1cztOb3RFbGVtZW50Ym94aHVMYXBsYUltTUVtcHR5U21hbGxTcXVhaG9tdGh0O1ZlcnRpY2FsU2VwYW5nc05vdEdyZWF0ZXJGdWxsRXF1YWxoZXJjb0lvbnBhcnQ7RG93bkFycm93RG91YmxlRG93bkFycm9uTHR2O2x0aHJlZTtDYXBpdGFsRGlmZmVyZW50ZHppT3Njck5vdExlZnRUcmlhbmdsZUVxdXNtZU5vdFNxdWFyZVN1YnNldEVxdWFuanJhcnJoazttY29tbVRvTG93ZXJMTm90RXF1YWxUaWxTdWNjZWVkc0VxdWFsTm90Q29uZ3J1ZW50O3hyZGVtY3VwYnJjYXA7TGVmdFZzdXBlZG9taWNnamNOb3RMZXNzR3JldHdvaGVhZHJpZ2hFY2lib3hoZDtwb2ludHZhcm5vdGhuYXRUY2Fyb247Tm90SHVtcERDbG9zZUN1cmx5RG91YmxlR3JlYXRlckxlc2x0aGN1dmVlTm90SHVtcEVxdWFsO250cmlhbmdsZWxlZnRlTm90U3F1YXJwcjtiYWNrcHJ0aGlja2FlZG90bG9icm5hcGlvYXNvdmJhcjtKdWtjeTtydHJpO3N1YnNldGVxQXBwbHlGdW5jdGljb25nYW1tYU9tYWNyO3ZzdXBubnBhcnNsO1djaXJjb21pYnVtcGVpaWludDtsdGRvY2FjdXRlUHJlY2VkZXNTbGFudFJpZ2h0RG93blRlZVZlY3RvRG91YmxlVXBEVXBBcnJvd0JhcjtvY2l2YXJ0cmlhbmdsZWxlZnBobW1hdDt1dGlsZGVXc2NDb3VudGVyQ2xvY2t3aXNlQ29udG91ckluQ2xvc2VpbWFnbGluZUVsZW1lbnRlcWNpcmNrZnN6dnpvb3BmRWdyaHlwaGVuRG91YmxlTGVmdFJpZ2hudGlMZWZ0VXBEb3duVmVjdG9lb3BmO2Jick5jYXJzZG90TGVzc1NsYW5SaWdodFRlZVZMYW5nVWZ2YXJzdWJUU2Nuc3Vic2V0ZXFxR3JlYXRlckxlc3M7emFjdXRlcmlnaHRsZWZ0aGFycFJ1bGVEZWxhU3VtO2ZsbGlJdGlsZGx1cm5jZWRpbGxIYW5hcHBubGVzO2Rzb2xEb3duQXJ1d2FuZ2xlO2h5cGhlRHNhY2ROb3ROZXN0ZWRMZXNzTGViZXRoO25WRGFzaDtleHBlY3RhdGlvU2ZyTGVmdGFycm9VbmRlckJyYW5nbXNkYWhsb3plU2Nhcm9uO2x1cmRzaGFib3htaW5tbGNiZWNhdXM7ZnJhc2x2YXJwcm9Sc2NyO2N5TGVzc1NsYW50eHVwRG91YmxlTG9uZ1JpZ2h0QXJOSmN5UmlnaHRybG1wcnVyZWw7SW50ZXJzZWN0aW9uTm90U3VjY2VlZHNTbGFudEVxdWFuY2VkbkxsO25lYXJoaztDaXJjbGVUaW1lcztsb3dhc3Q7cGVyY25XY2lybnNob3J0cEFwcGx5RnVuRG93bkxlZnRSR2NlZExvbmdMZWZ0UmlnaHRscmhhcmRpbnRlZ2VBbHBiaWd1cGx1c3N1cHBsdXNsb3pmQ2x0aGlja2FwcGR1YXJybmV4aXN0c29kc29Mb3dlckxlZnRBcnJvdztib3hqb3BmRXhwb25lbnRpYWxFO09FbGlnO0dyZWF0ZXJGdWxsRXFaZXJvV2lub3RpbmRvdDtJbXBsaWV1bGNvQ29udG91ckludGVic29saGluY2FyZUxlZnRSaWdodFZlY2VwYW50cmlhbmdsZXJpZ2h0O0ZpbGxlZFZlcnlTbWFsYXBhY2lyYm94dmw7QmVjYXVzZU5vdFByZWNlZGVzU2xhbnRFcGVydGVua2hiYXJQYVRIT1JlcXNsYW50bEludGVyc2VjbnNxc3ViZTtuc3Vic3VjY2N1cmxSZXZldG9lYXJiTWludXNQbHVzO3JmbG9vcjtHcmVhcmZycmFybG1vdXN0YUlFY3lsZXNnZXNyaWdodHNxRmlsbGVkVmVyeVNtYWxsc3RyYWlnaHRwRG91YmxlTG9uZ0xlZnRSaWdodEFycm93O0RvdWJsZUxlZnRSaWdodHJ0cmllO3JpZ2h0bGVmdGhhcnBvb2xvb0Nkb3ROZXN0ZWRHcnBsdXNiO2JOT3RpbWRBZ3RyYXBwbHZlcnRuZXFub3RjbHVic3VpdDt1QXJlcGx1Q29wcm9kZ2pjeTtuZXNlYXI7ZW1wY29sb247bGFjbGc7RG93bkJyZXZDYXBpdGJsYWNrdHJpYW5nbGVkb3duZXNkb3RjaXJFO1VwcGVyTGVmdEFOb3RTcXVhcmVTdXB1ZGJsbGVnO05vdFJpZ2h0VHJpYW5nbGVFWHNjcmJsYWNrdHJzZXhnZXNjYztOb3RFeHZhcnRyaWFuZ2xlcmlnaGxBYWhhbWlvYWNoZWNsc2FxdW87c2lnbWF2RmlsbGVkTG9uZ1JpZ2h0Z2xqTGVzc0VxdWFsR3JlYXFzY3I7Tm90U3Vjc3VicHNkb3RlO29saW5nYnJ1Z3JhdmU7Y3VldmFycHJvcHRvVWJyZXZlO3B1bmNzcFVhcnI7Y3Rkb3Q7dWxjcmFybmxzaW07anNlbGVmdGFycm93dGFpbGRzdEdjaXJSaWdodEFuZ2xlQmd0cXVlc3RWZXJ0aWNhbFNlbGRyc3VjY2FwcEJyZVVwcGVyc3Vwc2V0ZXFxUmlnaHRUZWVBYmlnd2NoZWNrbWFHcmVhdGVyR2xuZXE7YWFhcHByb3hlcTtzbWFsbHNldG1pUmFycjtyaWdodGxlZnRhcnJvc2R2bnN1YnN1Y2NlcTtOb3RUaWxkZUVxdWFsO2N1cnJlYm5lcXVpdnJpbndlaXN1Y2Nuc2ltO25wb2xyc2NyO3JhZGljQ2NpcmM7RGFnZ2VyO0dhbW1hY3N1cFlhY3VEb3VibGVMb25nTGVmdEFycm93O1RyaXBsZURvdDtMb25nbGVsb2Jyaztkb3duaGFycG9vbmxlZnQ7dGNub3ppZ3JhcnVwaGFycG9vbmxlZG9sbGF2YXJzdWJzZXRuZXFxT2dyYXZlO2NvbG9uZXFMZWZ0Q2VpbGluQWdTSENIY3k7YW5kRG93blJpZ2h0VGVlVmVjdG9mcmFjNzhsdHF1ZXN0Q2VkaWxsR3JlYXRlclNsZHNjeW5yaWdodGFydXBoYXJwb29ucmlnaEFjaXJ5dW1sO0FhY3V0ZWNvbmc7ZnBhcmJzaW1lSnNlcmN5YmFja2Nvbmc7eHJBcnJMZXNzRXF1YWxHcmVhdGVyO0REb3RyYWhkO1RoaW5TcGFicnZiYXI7U2hvcnRMQWZyO3Zhck5vdFJpZ2h0VHJpYW5nbGVFcXVhc2VhcmhrO29taWNyb25hYmxhO0RvdWJib3hVTDtzdWNjc2ltO2l0O0JhcnZOZWdhdGl2ZVZlcnlUZWdzZG52ZG9yZGVyb2Y7bG90aW1ucGFyYWxsZWw7UmlnaHREb3duVmVjdG9yQmFMZXNzTENpcmNsZVBsdXByZWNuYXBwcm94O1RmckNsb2Nrd2lzZUNib3dPbWFjcmdicmV2TG93ZWN1cmFycjttRHJvYnJrTm90UmV2ZXJzZUVsZW1lUmV2ZXJzZVVwRWVxdWl2REQ7YmlndXBsVXBwZXJSaWdodEFycm93bHRkQWN5O3Bob25jd2NvbmluaW50TmVnYXRpdmVUY2hlVGlsZGVUaWxka2dyZWVOZWdhdGl2ZHVoc3VjY2N1cmx5ZXFVYnJjeTtVbmlubGVzc2JveGRMO3BvdW5kZG90c3F1YXJTaG9ydFVwQXJyb3d1cHNpaDtUU2N5O2lzY3I7TnU7T2FkdGRvY2lyY2xlZFI7TG93ZXJMZWZ0QXJyb05vdFJldmVyc2JveHVSUGx1c01pbnNjbnN1cGRva3NjZXNoeWx0Y2NtbGRyUmlnaHRBbmdsZXVhY3VsYWZzY3JOZWdhdGl2ZVRoaWNrU3BhY2VUaWxkZUZ1bGxtc2NyO2d0bFByaWdodHNxdWdlcztwbGdzaW07UnJpZ2hlbWFjcjtTdWNjZWVkc1NsYW5yc3F1b0pjaXJjO05vdEdyZWF0ZXJUaXZlcmJTdXBlcnNldDtSaWdodFVwVGVlcGx1c2NpUmlnaHRBbmdsZUJyYWNrZXRuaWNpcmNsZWRTO2NjYUNvbnRvdXJJbnRlZ3JhZWdzZG90VGhpY2tnZTtMZWZ0QW5ubGRybHREc3R2YXJ0cmlhbmdOb3RHcmVhdGVyR3JlYXRlY2VtcHR5djttZWFzY3VkYXJybDtEY2FydmNidU5vdEdyZWF0ZXJTbGFudEVxdWJsYWNrc3FjdXBjdXA7emV0YU9jeXhyYXJybmhwYXJsbmVxcTtzdWJzdWI7ZmxsaWdMZWZ0RmxUaGRhc1JmcjtjeWxjbWFsdXRyaWY7SWdyYWxlc3NldGltZXNiO25oQXJybG5zaW07Zm9wY2lyZlRzdHJva29mY2lyO0V4cGxlZnRyaWd0b3Bib3N0cm5zO25SaWdodGFycnJpZ2h0cmlnaHRhcnJvd3M7bnN1Y2NlcTtDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGVnUmlnaHRWZWN0b3JCYXJjd2JhcndlZENhY2JveHZodmFyc3Vic2V0bmVOb3ROZXN0aGVyZWZvck9wZW5DdXJseUtjRG91YmxlQ29sbmFwcHJveG1oZ3RjYWNFbmx0ZGRhcnJTSEN0aW50O2JyZXZtZWFzdXJlZGFuZ2xlbmxlZnRyaWdOZWdhQUVsTGNhcnNmcnF1ZXN0ZXFzY0RvcGZpbnRlZ2VycztOb3RQcmVjZWRlc1NsYW50RXF1TGVmdERvdWJsZUJyYWNjb21wbGVtYXdpbnRoc2xhc2hkb3BkcmJrTGVmdFRyaWFuZ2xEb3duQXJyRG90VGlsZGVUaW1vYmxhY2t0cmlhbmdsZTtTdWNoVGhhdDtib3h1bWlkZG92bHRyYmlndXBsdXM7Z3RjaXJuR3R2Tm90SHVtcEhpbGJlcnByc2ltO2NvbG9uZTtudkludmlzaWJsZUNvbW1hO05vdFN1cGVyc2V0d3JVbmRlclBhcmRvdWJsZWJhcndsaGFyZHBvcGY7dUFycjtsZWZ0dGhyZWl1a2NIdW1wRG93bkhwcm9mc3Vic2V0ZWNhcGNhcGxnRTtWRGFzaDtvdGltZXNhcztsZHJ1c2hMYW5nO2lzaXpjYVJldmVyc2VVcEVxdWllcXZwYXVicmV2cmRxY2VudDtJZGVzaW07YmxrMW52bEFkaWFtc05lZ2F0aXZlVmVyeVRjdHJpbWluUmlnaHREdmVlZWxlZnRyaWdodHNxdWlnYXJyb3c7SW50O2ZsdG5zZ3Rkb3RlcWNvbG9sb29wYXJyZG93bmFycm93O29sdDtjZWRpbDtPcGVuQ3VybHlEb2VsaW50ZXJzO25HdDtVbmlvblBsdXNzcWN1cHM7TGVmdFJpZ2h0VmVjdG9yO2R0ZG1ob0RvdWJsZUxlZnRUZWU7bmxlZnRyaWdodGxlZnRsZWR6aWdyYXJTcXVhcmVJblpmcjttaWRkb2xhck5vdExlcWZhc3ltcGVxc3FzdWJzZUxvd092ZXJQYXN1YnNsZWZ0cmlnaHRoYXJSaWdodFRyaWFuZ2xlRXFvdGltZWNvcHJvZDtubXNpZ21hdjtSaWdodFVwRG93blZlY3NjbkU7SmN5O05lZ2F0aXZlVGhpbnF1YXRlcm5pb25zO3N0cmFpZ0xlZnRWZWN0bHNoU3VjY2VlZHNTbHNvcGdhY3VHcmVhdGVyTGVzc0Rvd25BcnJvd0JhcjtVcFRlZUFJSmxDbG9zZUN1cmx5RG91Yk9hY3V0ZUxsZWZvbWljUnVsZURlbGF5ZWQ7TGVmdEFyRG91YmxlVmVydGljYWxCeWlsZXNzZ3RTcXVhcmVTdWJzZXRFcW5hdHVyTGVmdFVwRG9uamN5R3JlYXRlckdyZWF0ZXI7UmV2ZXJzZVVwRXF1TG93ZXJLSmNwcmVjYXBwcm9Eb3BiaWdzcWN1cDtDYXlkbGNyb3BzcWN1cHhtRG91YmxlTGVmdFJpZ2h0QXJyb3JCYXJyTm90U3VjY2VlZHNFcXVhY2FjdXNlYXJodmFycGhkdHJpbnZsdEF0aWxkZVVwQXJyb3dEb3duQXJyb3Nxc3Vwc2V0ZXFuY0VxdU5vdExlZnRUcmlhbmdsZUJhcnRvcGNpckxlZnREb3ViemlncmFMZWZ0VGVlQXJyb25lc2ltTm9wZjtudmdlc21hbGxzaGFycjtpamxpZ0V4cG9udGN5O2R6aWdyYXJyO3BybnNpU21hbGxDcGFyYWxsZWxBcHBseUZ1bmN0aW9uO25sZWZ0c2hjaGNVYXJyTGxlZnRhcnJvbGVzc2d0cjtycnRock5lZ2F0aXZlVGhpY2tTcGF0d29oaWlvdGFzY0U7bGFlbXB0UmV2ZXJzZUVsc3VicmlnaHRzcXVpZ2Fycm9CZXJub05vdEdyZWF0ZXJKb3BkcmNvaEFyckNhcGl0YWxEaWZmZXJlbnRpYWxEO25lZG90TmNlZGlzaW1sRW1hcHN0bztTaG9ydFJpZ2h0QXJyb3c7c3VwMjthbWFsZ2hhcnJjaXJleHBvbmVudGlhbGU7TGVmdFRyaWFuZ2xlRW5zdXBzZUxvbmdyaWdodGFycm93O1JpZ2h0RG93blZlY3RvcnJtb3VzdGFjaGVnZXNkb3RvbE5vdFNxdWFyZVN1YnNuZXhpdGhpbnNwO1NIQ0hjQnNjcmd2ZXJ0bk5vdFN1ZmFsbGluZ2RJRWN5O3VydHJpO3ZwcmxmbG9tYXBzdG9kb3duYmlndHJpYW5nbGVkb3duO0Rvd25MZWZ0UmlnaHR0cmllb1NpZ3Jsb25nbWFwc3ROZXN0ZWRMZXNzTGVzcztzcXN1U21hbGxDaXJjbGU7dnN1cHpjYXJvQmVybm91bGxpc2xuTG9uZ2xlZnRhcnJkZmlzaHQ7Ym94dGltZXNib3R0b0VhY3V0ZTtNZWxsc2xhcmxuc2l4bWFzb2Z0bWlkY2lyaXNpRGlhY3JpdGljYWxEb3VmamxpZ0NheWxleXNJY2lyYzt1dHJpZm5sZWZ0cmlnaHRhckNhcGl0Y2FybmFjdUdyZWF0ZXJGdWxsRXF1YWw7a3Njcjt2ZWxsaXBBb3BzcWNhcGVtYWNoZWFydHN1aUdyZWF0ZXJGdXZhcnRoZXRCZXRhO05vdEdyZWF0ZXJTbGFuQWNyZmlzaHRFeHBvbmVudGlhbEVramN5bnJhcnJhdGFpbGx1cmRzaGNjZWRpbDt6d25VbmRlckJhcnN0cm5zZWNpcnJkbGROb3RHcmVhdGVyTE5vdEdyZWF0ZXJFcXVhbDtVZ3JhdmU7d3NjdmFycHJvcHRvO3NzY3N1cG5lO3N1Ym11bHlvTm90TGVzc0xlc3NVbmlvbkFwcGx5bHVydWhsb3BsdXM7ZGVsdExsZWZ0YXJyb3dndHJQYXJ0aWFsRDtGaWxsZWRWZXJ5RG91YmxlVmVydGljYWxCYXI7Y2lyZm5pbk5vdEdyZWF0ZXJGdWxsRWZqbHhoYUxlZnREbnVtc3A7TGVmdHJpZ2hSaWdodFVwSHNjTGVmdFVwRG93blZlY0xlc3NFcUhjaXJjcm9hcnJOb3REb3VibGVzbWVwYXJzQ09Eb3duQXJyb3dVcFZkcGVyY250O092ZXJOb3RSaWdodFRyaWRoYXJDZW50ZXJEb3Q7c2ltcmFUaGVyZWZHcmVhdGVyRnVsbEVxdWlhb2ZjaU5vdExlc3NHcmVhdGVjb25nZG90TGVzc1NsYW50RXF1YWw7Y3Vwc2Vuc3ZhcnRyaWFuZ2xlbGVmdFJCYXJyb2xpbmU7bmxlZnRyaWdodGFycm93ZXBsdXM7bmlzZ3NjckRhc2h2O2Vtc3N3YXJoaztEb3VibGVWZXJ0T3BlbkN1cmxjaXJjbGVhcnJvd2xlZnRuYWJFcXVpVmVydGljYWxTZXBhcmF0b3JscmFyY3VybHl3ZWROb3RIdW1wRG93bkh1bXByaXNpbmdkc3VjY2VOb3RSZXZlcnNlaG9yYmFyO3ljaXJFZG90aGVhcnRzdWl0O3VoYXJyO0RvdWJsZUxlZnRSaWdodEFycm93O3ZydHJuc3Vic2V0ZXE7VXBEb3duQU5lc3RlZEdyZWF0ZXJHckxlZnRyaWdjb21tYTtSZXZlcnNlRWxlbWV1aG5ndHN0cm9reHJBcnI7UmlnaHRBbmdsZUJyYWNrTm90U3VwZXJzZXRFVW5kZXJQY2FwYnJjdXB0d1RpbGRlRXF1Q29udG91cklub2Rhc2xicmRsY29yTG9uZ0xlZnRBcnJvdztBc3NpY29weXNyY3VybHllcXByUnJpUmlnaHRhcnJCZmJveHBPdmVyQnJhVXBwZXJMZWxmaWxhZ3JhR2NyaWdodHJpdkFycjtvZFJpZ2h0VGVlO29oYmFyc2Nwb2xpbkFvZ29uTGVmdEFycm93O0dzb2Rhc2hjdWVwcjtQbGNjYm94bWludXM7VGhpY2tTcHJzcXVvcktvZ3JhdWJOb3RSaW52RGFzaDtiaWdvdGlVYnJHcmVhdGVyRXF1YWw7d29wZjtQb2luY2FyZXBJbnZpc2l1dGRvQ2xvc2VDdXJseURkaWFtb25zY2FscGhpb2N5O2Jicmt0YnJmcmFhbXA7bnVtZXJBcHBseUZ1bmNjaXJjbGVkY2ljYXBhbmQ7Y29tcGxiaWdvbnZndEJldHN6bGlnO3N1Y2NlcXVwdXBhcnJvd3NzaW1yYXJybG9wbHVwYXJyb3dQc2k7YmxhY2tzcXVhclJpZ2h0VHJpYW5nbGU7R2N5O252bENpcmNsZURvZm9yYWxsZ3Ryc2ltO21kYXNoRG91YmxlTGVmdFJpZ2h0QXJhZWxpZztMZWZ0Q2VpbGhvcHJubWl0cmFyaXNpbmdkb3RlcWNpcnNpbXJhck5vdFNxdWFyZUxjeTtzZWFycm93O29sc3FjYXA7TGVzc1RpbGRlZURvaG9va2xlZnRhcnJvd01lZGllYXN0ZXI7UHJlY2VkZXNFbnZpbmZpemlnZ29wZlJjYXJvbmNpcmZuY29uZ0NvbmdyZGNudGlsZGNpcmNsZWRhc3Q7TG9uZ0xFbXBsdHJpO25zaW1Ob3RDdXBDYXBJbnRlcnNlY3Rpb3Jtb3VzdGN1cGRvdDtTcXVrb3BmO0VtcHR5VmVyeVNtYWxsU3F1cmJya3NscnRyaTtUY2FSaWdodFRyaWFuVXBwZXJMZWZ0QXJydXRkb3Rib3hIVTtTY2VkaWxsb25ncmlnaGR1YXJ0aGlja2FwcHJveHZhcnN1cHNlRG91YmxlTGVmdFJTaG9ydERvd25Bcm5zdWJFTm90TmVzdGVkR3JlYXRlckdyZXFwcmltZVZlcnlUaGluU3BhY2dlc2RvdG87QnJldmJpZ2NhdWFjdXRIb3Jpem9udGFsTHZhcnN1YnNldG5lcU5vdEdyZWF0aXVzcXVEb3duUmlnaHRWZWN0b3JOb3ROZXN0ZWRHcmVMZXNzRXF1YWxHaWZmT3BlbkN1cmx5RG91YmxlUXVMZWZ0VmVjdG9yQmFMZWZ0VXBvZWxpZzt1d2FuZ2xTbWFsbENpcmNsbGxjb3JuZXI7b2xjaXJEaWFjcml0aWNhbFRSdWxlRGVsYXlOb3RMZXNzU2xhbnRFcXVhbDtsZWZ0cmlnaHRzcXVpZ2JsYWNrdHJpYW5nbGVyaXNtYWxsc2V0bWludWptYWRjYXJvbnNlc3dhckVtcHR5VmVyeUNsb3NlQ3VyVmVydGljYWxCYXI7THN3ZWRkemlncmFycnRhdTtMYXJyO21pZGNDYXBpdGFsRGlmZmVyZW50aWFib3hVTGJveHZMUmlnaHREb3VEc2NyO05vdFJldmVyc2VFcmlnaHR0aHJlZXRpbWVzO1Nob3J0Umlac2NyO3JhZ2VzbGVzbmxlcXNsYW5yaW5nO1NxdWFyZVN1cGVyc2V0RXFvbGNyb3NzO3RyaXBsdXM7c3FjYXBzQ2Nhcm9uO25lcXV1cGhhcnBTdWJNaW51c05vdExlZnRUcmlhbmdsZUJhT3ZlclBhcmVuT3ZlclBhcmVudFBvaW5jYXJlcGxhbmVOdGlsc3dhcnJwc3VwZG90O21pUmN5SHN0cm9Eb3VibGVDb250b3VySW50ZWdySWNpcmNwZXJpY2lyYztib3h0aWhlbGxyaGFydVVyaW5nO1NxcnRzYztFbWFjU0hDSGN5UG9wbG9uZ3JDSGN5O1NmcjtucmlnaHRuY29uZ2RvdHRoa2FiYWNrTm90R3JlRG93bkxlZnRUZWVWZWN0Q2lyY2xlVHVncmF2c2ltZExvbmdsZWZ0cmlnaHRhcnJvd09yO1JpZ2h0VXBWZWN0b3JCYXhzTm90VmVycm9hbmc7TGVmdEFycm93UmlnaHRBemVldHJmO1JpZ2h0VGVlQXJyb3diZW1ybm1zdWNjYXBwcm94O0xlZnRVcFRlZVZndHJhcnI7a2NlZGlsO2NpcmNsZWRhbGFycnNpbUxtaWRvbGVmdHJpZ2h0YXJyeHJhUmlnaHRVcERvd25WZWN0b3JubEVMZWZ0UmlnaHRWZWN0b0djZWRpbG1vdXN0O25nZU5vdEdyZWF0ZXJFZW9nb247Z25hcHByb25zdWJzZXRlcXNlQXJydXB1cGFOY25nRXZzdWJuZTtQcm9wb3J0aW9uYW9wZU5vdEdyZWF0ZXJMZXNzRG90RXF1YWw7bG93YmRxTGVmdFVwVmVjdG9yTm90R3JlYXRlckVxdWFydWx1aGFyO1ZlcnRpY2FsQmFyeHNxY3VwZXRhO2NyY3VkYXJyck5vdFNxdWFyZVN1cGVyc2V0RXF1YWw7ZWFjdXRlTmVnYXRpZGRhZ2dlcnN1Y2NuZWxvbmdsZWZ0YXJycHJuRTtFb2dvbjtDYXBpdGFsRGlmZmVyZW50aWFsRGd0cU5vdEN1cENhcDt0b3BjaXN0cmFpZ2h0cGhpO2ljeWV4cGNlZGlsQ2VudGVyRG9hcGFjaXI7cGhvbmU7RG91YmxlVXBEb3duQUxlZnRUZWVWQXJpbmJpZ29kY2NhcmxkcGxhbmNtSWFjdUVtcHR5U21hbGxTcVVuZGVyQmFwcHJveGVOb3RHcmVhdGVyRXF1RGlhY3JpdE5vdEdyZWF0ZXJTbGFudEV2ZWViY2lyY2xlZGRhc2g7Y2FwY2FSaWdodEFyRXF1aWxpYnJpdW07cmlnaHRoYXJwb2FuZ21zTm90TGVmdFRyaWFuZ2xlO3dmcjtwcm9mYWxhcjtEb3duQXJyb3h3ZWRnZTtOb3ROZXN0ZWRHcmVhdGVyR0tvaXNsZmlzaE5vdFN1Y2NlZWRzRXF1YWN1RG91YmxlTGVmdFRlZWVkRG91YmxlTG9uZ0xlZnRSaWdodEFycmxvdGluaGF0c2hjU3Vic2V0RXFudnNjdXJ2ZWFycm93cmlnaHRMZWZ0Q2VpbGluZztsSGF1bnNob3J0cGFzY2Fyb0RpYWNyaXRpY2FsQXBhbnByY0ljaXJhb2ludGVnZXJhY3lpc2lucztMZWZ0cmlnaHRhcmNOb3RUaWxkZVRpbGRIb3Jpem9udGFsdXRyaTtSaWdodFRlZUFycm93O0ludGVyTm90TGVmdFRyaWFuZ2xzdWJzZXRuZXFxaXVrdGhldHZEYXN1cHNpbG9uO2Vxc2lDbG9ja3djdXBvcjtUY2VkaWxJbkFicmV2U3F1YXJlaW50Y2FsbmhhcnI7bnNob3J0cGFyYUNvbmdydWVucGx1c21uY2hlY2tzaGFycDtEaWFjcml0aWNhbERvdHByb0xvbmdsZWZ0YXJyb2tmcnJlZztScmlnaHRhcnJvdztyb3BmO0Vwc2lsb3pjVmVyeVRoaW5TYXRpbGRlZm9yaztzdXBzZXRldXBkb3duYXZhcm5vdGhpTGFwbGFjZWZlbWFIdW1wRURvdWJsZXJpZ2h0dGhyZWV0aWxlZnR0aHJoeWJ1bGRzdHJvaztjdXBvcnRoZXJlZm9QaWxtb3VzdGFjaGNjYXBzTmNlR2JyZUludGVnclRoaWNrU3BhY2U7RG91YmxlQ29udG91ckludGVncmFsO2ltYXRzZXRtaW51c25ndFZjb29sdm5Eb3duUmlnaGhhbWlsdHJhcnJiZmJhcndlZGdlO2NzdWJlbGFuZztOb3RQcmVjZWRlc1NsYW50TG9uZ0xlZnRSaWdPcGVuQ3VybHlRdW9tZEdkb3RwZXJwO1N0YXI7bnJhcnJjYm94RFJMZWZ0QXJyb3dSaWdodEFyaWdyYXJhcnJmZ2FwO1Nob3J0TGVmR3JlYXRlclRpbGRlZHRyZG93bmhhcmNvbmlkZG90bEFhcnJubGFwbGFua2FjaW1pZGFzdDtyY2Fyb09ncm5HZ2xhbmdsVmVyeVRiYWNrY29mcGFydGludFVmcjtiaWd3ZWRnZWludGVyY2F0aGV0YXN5bVByb3BvcnRpb3JhZW1wdGxzcXVvdXdhbmdlcXVlc3NvbGJhcjtHcmVhdGVyckhhdXBzaWx0cmlhbmdsZXJpZ2h0aXNpbkVvZ29uO0dKbG9vcGFycm93cmlnaGxhcXVvYW1wRG93bkxlZnRSaWdodFZlY3RvbWFwc3RvbGVmYmlnb3RpbWViaWd0cmlhbmdsZWJveHZoO3N1YmRvdGlpb3RtYXJ0d29oZWFkbGVndHJkb3RGb3JDYXlsZXlDbG9zZUN1cmx5RG91YmxlUXVvdGU7T21pY3Jvbkd0djttbk5lc3RlZExlc3NMZXJwYXJndExlZnRSaWdodFZlY3RzdGFyZjtCZWNhdXNsZWZ0bGVmYWJyZXZlcmJya2U7c3VwbGludGNhbDtmZmlsUmlnaHRBcnJvd0xlZnRBcnJOb3RTdWNjZWVkc1RSQnVtcGVxO2JveG1pbnVzSGNpcktIY3k7T2RzcGFydHJpYW5nbGVsZWZ0O3NyYXJybmZpY2l0cnBleml1bXNjcG9saW50eHNxY3VwaGFyZ25lcXFzZnJvcGx1c2R1O2NvcHJSZXZlcnNlVXBFcXVpbGlicml1bTtsZHNBcGJveEh1eG9wbHVyYmFycjtTbWFsbENpQ2xvc2VDdXJseWljO0Rvd25BcnJvd1VwQXJyb09wZW5DdXJseURvdWJsZWNhcm9uO3VoYmxrO2JhY2tzaW1lcWJldHdlZW5yYWRpYztvcnZOb3REb3VibGVWZXJ0blZkYXNoO25jb2d0cmxlc3NFVEhzdXBoc29wcm5zaW1zcWN1Z3Jhdm5vdG5pdmNzaW1lcTtPc2NzaW1uRmlsbGVkU21hbGxzcXVvcjtBbHBoYU5ld0xpZGl2b3hkdHJpbmxzaW1udHJsc3Ryb2JpZ3dlZGdOb3RMZWZ0VHJpTmVnYXRpdmVWZXJ5VGhpblNwbnZyQXJOb0JJbnRlZ2tzY0hzdHJOY2VkTGVmdFRlZVZlY3RvcmFwRTtOb3RMZWZ0VHJpYW5nbGVFUmlnaHRUcmlhbmdsZUJhTXNSaWdodFZlY3RvckJuc2hvcnRwYXJhbGxMb3dlckxlZmxIYXI7ZmpxdWF0aW5uY2Fyb3N1YnNldG5lcTtwcmVjbmFwRWNhYm94VVJQcmVjZWRlc1RpbGRwYXJ0RGludWJvdHR3ZWllcnA7Tm90UmV2TEpjeU50aWxkT3RpbWVzRG91YmxlUmlnaHRBcmpzY3I7bGJyYWNlO0Rvd25UZWVpbmNhcnVyY3JvcGJpZ2NVcHBlclJpZ2h0QURvd25SaWdodFRlZVZlaW1hZ2U7RG93bkFycm93VXBBcnJzdHJhaWdodGVwc2lOb3RTdWNjZWVkc0VxdWFsO1FvcGY7RG91YmxlUmlnaFNtYWxsQ2lyY2xlRWRJbnRCb1Nob3J0UmlnaHRzcXN1cHNldDtjaXJjbGVkY2lyYztFbXB0eVNtYWxsU3F1eWFjeTtsYnJrc0RvdWJsZUxvbmdSaWdodEFycm93cmVhbGluVW5pb25QbEF1bUdyZWF0ZXJFcXVhbExlc21pbE5vbkJzY2U7WmZyZWdyYXZlbHRjYztucHJjdWVHcmVhdGVyRXF1YWxMZXNzO3NpZ21hZm9TO2V4cG9uZW5sYWN1ZnJvd247R2NlZGlsO3JzcWJOb25CcmVha2luZ1NwYU5vdFNxdWFyZVN1cGVyc2V0RXFzZXRtaW51Y2VtcHR5c2lnbWFNaW51c1BsUmlnaHREb3VibGVCcmFjbGFycnNpc3ViZG90O2VtcHR5bG9uZ2xlZnRhcmNhcGFpZXhjbG5kVXBBcnJvd0JhYm94Vmw7dHJpYW5nbGVkb092ZXJQYXJOb3RMZXNzRXNpTHNjcjtubGVxO3JjeTtsb3plbmducHJlY2VxO2VmRHlpY3k7cXByaW1ub3BmbGZyO3JhbmdkdGhrYXA7Ym5lcXVpT3ZlckJyYWNlZnBhcnRpbmJpZ29kb3RSZXZlcnNlRXF1aWxpYmVwc2l2O05vdEdyZWF0ZXJTbGFudEVxdWFwbHVzc2ltO0ZpbGxlZFZlcnlTbWFsbFNxdWFyZUJyZXZlVXBzaWxsZXM7d2VpZXJlYWw7Z3Rkb1JpZ2h0Q2VpbGluZztvc29sU2hvcnRSaWdoTmVnYXRpdmVWZXJ5VGhpblNwYWVhc3RlcmRibGFDY29uaW5uaEF1c3RjYXJvbnJmcjtOb3NjaWlzaW5zdjt5YWN1dGU7bnNjY3VlY3VsbnRsZ25HTGVmdFVwVGVlVmVjdG1mcm9taWRnZXNsR29wZkltYWdqbWF0TGVmdEFycm93QmFyO2R1Q2xvc2VDdXJsYm94Vjtob3JiYXJnYWNsaGFyZDt5YWN1ZXF1ZXN0RG91YmxlVXBBcnJpZ2h0aEVtYWRsY2xhZW1wdHl2U21hbGxDaXJjc21pTGVmdEZsb05vdEdyZWF0ZXJGdWxsRXF1YWw7RG91YmxlTGVmdEFMY2Fyb25lY29Pc2NyO1RjYXJvUmNhcm9uO25zaW1lYmlnTm90U3VwZXJzZU5lc3RlZEdyZWF0ZXJHcmVhdFpzY3JjYXJvY2VtcHR5dnBjeTtLYXBwZG93bmRvbGVmdHJpZ2h0aGhlYXJ0U3F1YXJlU3VwZXJzZW1wdHlzZXQ7Z3RsUGFyO05vdExlZk5vdENveGxBTG9uZ1JpbHBhclV0aWxoZWlvZ29sZWZ0cmlnaHRhcnJvbGVmdHRHb3BmO2VvcG9pbnRpbmRyY3JvcDt0aGlja0NvbG9uZTtVcGRvd25hcnJMZWZ0RG93blZlc3VwbXVscmFxdW9DdXA7ZGFzaHZuc3FzdXBOb3RTdWNjZWVkc1RpbERvdWJsZUxlZnRSaWdodEFDZG90O2hzY0xlZnRSaWdoSHByZWNlcTtGb3FkcmNyb3ZhcnNpZ21hb2VsZEFycmJhcnVydHJpcmlzaW5wZXJpb0xjc2NuYXVyY3JvcDtwcmN1c3FzdXBlY3VlcHN1YnBsdXNHcmVlbXNwMTQ7Ymlnb3RQcmVjZWRlc0VxdWFsO2xtaUxlc3NTbGFzdXBlO2NoZWNrbWFyaW1wZWRDSGN5TWVkaXVtU3BhY1JpSHNjcml1bWw7bGFuc3N0YXJmcGx1c2RvO2duYWxlZnRyaWdodGhhcnBvb25zO0Rvd25MZWZ0UmlnaHRWZWN4ZnJjYXBzO25wcmU7Tm90RXhpc2NhcGRvUmlnaHRUcmlhbmdsZUVxdWFsYnVsbGV0O2JhY2twcmltZTtzZG90YnNob3J0cGFyYWxsZVNjaXJZY2lyaW5maW50TmV3TGluZXZlbGxpYmlnc3RhbHRkb3Q7ZGxjcm9wO1J1bGVEZWxheWVQcmVVdWRyYmthSG9wZjtzb2Z0Y3lVcHBlckxlZnRMZXNzR3JlYXRlcjtWdmRpdmlkZW9udGltZXM7WmFjdXRMYWN1dGU7bnZpbmZpbjtob29rcmlnaHRhclJpZ2h0RG91YnZhcnRyaWFuZ2xMZWZ0RG91YmxlQnJSaWdodEZjdXJseXdwdW5jc25nZXFzbGFoYWxmO1JldmVyc2VFcXVpbGlicml1Um91bmRJbXBsaWN1cnZlYXJOb3RTdWNjZWVkc1NsZG93bmhhcnBvb25yaWdoZXBzaWxvbjtob29kdWhhcjtucmFycnc7U2FsZGN2ZXJuc21pZFpjeWJlcm5yaWdodHRocmVlU2FjYmVybWhvO2xhdGFpbHRyaXRjZG9sZXNkb3Q7TmVzdGVkR3JlYXRlckdyZWF6d25qZWdyYXZlO2xuYXBwcmxlZnRhcnJvd05vdEN1cENhbWludXNkbG9uZ2xlZnRyaW9zbGFzaDt0c3RvY2lyY25vdGludmE7bGVmdHJpZ2h0c3F1cHJhdmZ0b3BjZXhjbENoaUNvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYUxlZnRBbmdsZUJyYWNrZXQ7ZnJhYzNiZXJub3VhbmR2O1RoaW5VcERvd25BcnJvQ291bnRlckNsb2NrZ25FcGx1c2RvTXU7WmVyb1dpZHRoU3BTY2Fyb25Ob3RUaWxkZUVxdWFyaGFyZG5lZG90O3N1cHBXZnI7c2hjeTtTcXVhcmVTdWJzZXRFcXVhbExvbmdsZWZMc3RuZWFybnNjcnN1cDt0cmFkRG91YmxlVXBEb3duQXJyZXFzbGFudGxlc3M7ZHJjclVwQXJyb3dCZ3NpbWw7Q29wcm9kdWNOb3REb3VibG5jeTtHcmVhdGVyRXF1YWxMaXNjblJpZ2h0Q2NpcnJhZW1wdHl2cmFycmJmc3N3YXJyb2xzcWx1cmRzaGFyO2lub2R1aGJsa0ZvdXJpU3VjY2VlRERvdHJhaHRyaXRpbURvdWJsZUxvbmdMZWZ0UlRpbGRlRnVsbEVEaWFtb25kUmV2ZXJzZUVsZW1lbnQ7dmFya3JhcnJzaW07bnJ0cmllTm90SHVtcERvd0dhbW1hO2J1bXBlO2VmRG90c21hbGxzZXBhcmFsbHJkbGRoYXI7YnNvbGhzdWJyYW5nbGU7eHNxcGVybWlsO0NvcGY7T3ZlclBhcmVudGhlc2lzb3RpbWVzO3NzbWlsTGVzc0V0cmlhbmdsZXJpZ2h0O0xhbWJkdHJpbWludXNDb3VudGVyQ2xvY0xlZnRyaWdodGdyYU5vcGZuZ3NpbTtoYW1pbHQ7Tm90UmV2ZXJzZUVsVXBwZXJMZWZ0QXJyb2N1clZmcjtTdWJzZXQ7c2ltZVJpZ2h0VGVlVmVjYW9wU3VjY2VlZHNFaGVsbGlwO3RyaXNtYXBzdG9sZXZEUHJpbWVndm5FO2xhcnJzaW07endqO25lYWthcHBhdnZhcnN1cHNwbGFuY2s7RG93bkFycm93VUNlZGlzZXh0O21wbGFuZ2xlYW5kZDtoYWlkYXNodjtkb3duaGFzdXBzZXRuZWVxY2lyYztvcGVybnZEYWJydmJhWmVyb0xlZnRBdXRpbGR4bWFwTWVsaHNsRG91YmxlVmVydGljYWxOb3RMZXNzRXFEY2Fyb25Ob3ROZXN0ZWRMZXNzTGVzcztyaXNpbmdkb3RzRmlsbGVkVmVyeVNtYWxsU3FOb3RUaWxkZUZ1bGxEb3duUmlnaHRWZWN0b3JCYXI7bGFyck5lc3RlZGRvd25kb3duYU5vdFN1Y2NTYWN1bmFjdXR1cmNvcm5lYW5nbXNkYWQ7RWNpcmM7U3VjY2VlZHNyYWN1T3RpbGRlZ2VzbGVzO0Rvd25BcnJvd1VwQXJyb3c7bGVmdHJpZ2h0YXJyb3dzZWxzZHJpZ2h0YXJyb05lZ2F0aXZlVGhpY2tTZ2JyZXZlY2NlZGlsc3RhcmZpbjtyaWdodGxlZnRhcnJvd3M7UmlnaHREb3VibGNvbmdkdnN1Ym5lRG91YmxlTG9uZ0xlZnRBQmVjdHJpYW5nbGVsZWZ0ZXFSY2VkWmVyb1dpZHRoU3BhY2Nhcm9uZG90c3F1YXJlbmVhcmhvcmRmbmN5cmFycnBsY3VydnZsdHJpO3N0cmFyaWdodGhhcnBvb25kTm90RG91YmxlVnRoa2Fwc3RyYWlnaHRlcHNsZHNoQ2NlZGlsO0RvdWJsZUxlZnRSaXVwYXJyb3c7ZG90ZXFkb3Rsb3BmRERvdHJhaGRjYXBjdXA7Z25lVmVydGljYWxTZXBhck5vdExlc3NTbGFudENsb3NlQ3VybHlEb3VibGVRdW90ZUdzY3I7VmVydGlzcXN1YmVndHJzYnVtc3FzdXBzZXRlcTtHYnJuc3BhcjtZYWNEb3VibGVDb250b2JzaHlidWxsO3plZXRyZnZhcnN1YnNib3d0aWU7ZUREbG90aW1lc1NxdWFyZTtOb3RMZXNzO3BpdjtPcGVuQ3VybHlEb3VibGVEaWFjcml0aW5yYWJicmt0Yk5lZ2F0aXZlTWVkaXVxdWF0aW50O05vdFNxdWFyZVN1cGVyc2V0RXF1YUJyZXZlO3dzY3I7bGVmdGxlZnRhcnJvd2F1bXBybnNob3J0cGFyTm90R3JlYXRlckZ1bGxFcXVWb3BmYmxhY2t0cmlhbmdsZWRvd247TmVzdGVkR3JlYXROb3RTdWNjZWVkc1NsYW50RXF1YWxSaWdodEFycm93TGVmdEFycm93TG93ZXJMZWZ0cm9wbHVzRG93bkxlZnRWZWN0b3JCYXJTcXVhcmVJbnRzaG9ydHBhcmFEb3duUmlnaHRWZWN0b3JCZG90bWlMb3ZlcmJhcnN3bndlZkRvdDtMZWZ0Q2VQcmVjZWRlc1NsYW50RXFaYWNsc2ltZztkb3duYXJzdWJuU3F1YXJlU3Vic2V0RXF1bHJoYXJwcm9kO2JveHRpbWVzO2NpcmNsZWRhc3RzdW5nbGNlZGlBbnVsdHNwbGxhcnJMc3RycmFycmh0aGtzaUxlZnRVcFRlZVZlY1RhdTtsdmVydG5lcXE7VmVyYmFycmlnaHRsZWZ0aGFycHJuYXA7bnJpZ2FjdGF1YXJyTmVnYXRpdmVNZWRjcm9zc25nc25taWRSaWdodENlaWxpZGlzcnRocmVlO05vdExlc3NFcXVDYWN1dGVsRXhkdHJpO2RkYWdnZVJpZ2h0VXBUZWVWZW5yaWdodGFycm9ubGVxc2xCb3BmZGllbWVhc3VyTGVmdEZuc2NlO25jZWRpbDt1cGRMZXNzU2xhbnRFcXVnbmFwO2xtb3VzdGFjaGU7RG91YmxlTG9uZ1JpZ2h0QXJyb3c7c3N0aGtzaW07U2hvcnREb3dubGN1Yk90bGVmdHJpZ2h0aGFycG9lbnNwO29ib3hIdTtSaWdodFVwRG93blZlRGlmZmVyZW50aWFsRDt1ZGhhcmxvYW5kcmV0aHlhY3V0ZW50cmlhbmdsZXJ0cmlhbmdsZXFzcXN1cHNybW91c3RhY0Nsb3NlQ3VybHlEb3VibGVRdW90aXVrY3lsZXNzZXFndFVuZGVyUGFyZW50aGFjaXJjO2hBcnJicmFjTmZyO0Rvd25BcnJvd0JzdWNjbmFwTmVnYXRpdmVUaGlja1NwYWNrY2VkT3NsYXNodERpZmZlcmVuTm90TmVzdGVkR3JlYXRlckdyZWF0ZUVsUW9wZkpjcmlnaHRoYXJud25lYXI7TGxvcmFycjtibGFja3RyaWFuZ0RvdWJsZURvdDtiZW1wdHl2O0FyaXNwYWRlc3VpbnBhcnNtaWxlO05vdE5lc3RlZEdyZWF0ZXJMZWZ0UmlnaHRBcnJvd0xhY3VDb3VudGVyQ2xvY2t3Z3RjaWRvdG1pbnVzO0RvdWJsZUNvbnRvdXJJbnRlZ3JhZ2VzY3RoaWNrYXBuYXBwcm9uUmlnaHRhcnJvdztyZGxkaHVvcGY7UUhmcjthd2NvbnRyaW1pbnVuc3VwZTtuZXNGaWxsZWRTbWFsbFNxdWFyZTtleHBvbmVmYWxsaW5Ob3RDdXBDc3VicmFOZXN0ZWRHZnJhYzU4Z2FtbWE7c3VjY25QYXJ0RG93bkxlZnRUZWVWZWN0b3I7VW5pb25QbHVzO092ZW90aW1lc2d0cmRrZ3JVcFRlZUFyc3BhZGVzO3Nxc3VwZTtWZGFzaGxybERvd25CcmdlcXNHYW1jZW5jaXJjbGVkZGNoY3k7YWJzaW1nO21sZHI7VFNIY3lyaWdodHRub3RpbnZjO25hbmd0YXVBYWNPY2ltc3Rwb3M7b2hiYWJveGRMTGVmdERvd25WZWN0b25wb2xpbmRzb2w7Q2xvY2t3aXNlQ29udG91ckludGVncmFsO3N0YUVzY2xjYXJvbjtsb3BsdXNTdWNjZWVkc1RpbGRlU3F1YXJlU3Vzd2Fycm93O0RTcmJhcnJhbmdtc2RhZTtob3BmO2RmaXBvcGZJbWFmZnI7cHJlY3NkaXZpZGVvckF0YWlsO2xlc3NlcXFndHI7ZGVsQWNpcmNsYXJyYmxvd2JhaGFyZGNjaXJjbGVkUlVhcnJvY3ZhcmthcHBhbG1pZG90O0dyZWF0ZXJTbGFkemlncmFjY2lOb3RMZXNzR3JlYXRlcjt1cGhhcnBvb25sVmVyeVRoaW5TcGFjZTtOb3RHcmVhdGVyRnVsbHJsYXJndHJhcHByb21pY3JvbGJya3NsdTt5ZnJleHBlY3RhdGludGlsSW9nb247dmRhc2h2RGFzaGNvbG9zcXVhcmVpaW9wcmVjY3VybHllVW5pb21hbHRlc2U7Q2xvc2VDdXJseURvdWJsZVFEY3k7ZHpzdWJlam9uc3VwYm94Vmg7SW52cnRyaWV4cG9uZW50aWFsbnN1YmVOZXdMaW5lO1JpZ2h0VmVjdG9yY2lyY2xlZFNVZGJuZ3RyO3NpbWRvdDtlcXNsYW50bGVOZWdhdGl2ZVZlcnlUaGludGdsZG90cGx1Z3RsUGFjb21tYXQ7bEFjY3VidW1wO3lhY1pudGlsZGVVcGRvd25hcnJvdGltZXNiYXI7am9wZjtBZmduYXBwcm94O2xzcWJ1bWxiaWdjaXJjO3ByYXA7ZmVtYWxlO01pbnVzUFN1Y2NlZWRzVGlsZGU7c3ViZTtVb3BmO3Jtb3VzdDtyc2FxcmlnaHRhcnJMZWZ0RG93blRlZXJtb2NvcHJvSHVtcERvd25IdW1wZ2c7Q29uaW5TdGFuZHNseGN1cDtyaWdodGhhaWpEb3VibGVSaWdodFRlZG93bmFycnRoZXRhdmxvbmdyaWdodGFVbmlvblBsdWlxc3VwbXVsdDtkb1VuZGVyQnJhTGVmdEFuZ2xlQnJhY2tOZWdhdGl2ZVRoaW5TcGFjRG91YmxlVXBEb3dlcGFyc2xzdWJyYXJyYW5nc3BzdWNjc2lndHJkb3ljaXJjQ2NvbkRvd25MZWZ0VmVjeHVmZmlsaWc7ZGl2aWRlb250ZHVkYXJyO2RlbXB0eWRhcnJQcm9wb3J0Q2lyTGVzc0VxdWFsR3J1b2dvbmJsYWNrdHJpYW5nbGVyaWdodDtwbHVzYWNpcjtjdUVOTGVmdEFycm93UmlkaWxyYXJyO2d0cmVxZXNjcmN1cGRvUmlnaHRVcFZlY3RvRG91YmxlTG9uZ0xtaW5tb3BubGVmdHJpZ2hOb3RTcXVhQWxwaGE7enNjcjtOb3RTcXVhcmVTeGhhcnVvYmxvbGVzc2VxcWR6Y3lEb3duUmlnaHRUZWVWUHJlY2VkZXNFcUxlZnRUZWVWZWNkb3duaGFycG9vbktjZWRpbDtSZXZlcnNlRWxlbWVuZ3NpbWVTcXVhcmVJU09GTm90U3VibGVzc2VxcWdQcm9wb3J0aW9uO3ZlcnQ7c3dhcmhrT21hTGVmdGFycm93dXRpbGV4cGVjdGVERG90aWpsaWc7YXN5TG9uZ3JJdWt2YXJzdXBzZXRuZXFxO2xlZnRhcmJveERMZ2xFO2N3aW50dmFyc3Vwc2V0bmVxO0tIY3VwaGFycG9vbnJpZ2h0O0JhcndlZDtOb3RDb25ncnVlbnNob3J0cGFyYWxsZWxjaXJjbGVhcnJvd3JpZ2hsbGNyYXJyc2ltb2NpcmVEb3RpbWFncERvdWJsZUxvbmdMZWZ0QXJycmFlbXB0eXY7VkRhbndBcnJuZXNlTmVnYXRpdmVWZXJ5VGh1d2FmcGlwbGFycmJmcztOb3RUaWxkZUZ1bGxFZWNvbG9scGFyO21lYXN1cmVkYW5nbGU7dWJyZVVwQXJyb3dEb3duQXJ1cHVwYXJlbXB0eXZ2YXJlcGFmO250cmlhbmdsZXJpcnNjcmthcHBhdjtHcmVhdGVyU2xhbnRFcWlmaW50cHJvZDt1cHNpbG9tYWx0aW50bGFyUHJlY2VsZWZ0aGFydGhpY2thcHByb3g7Rm9wRG91YmxlVmVydGljYWxCYXJnY2FsZWZzeW1FbXB0eVZlcnlTbWFsYm94RGxjdXBiam1hdGg7Tm90RXF1YWxUaWFwb3M7Zm5vYW5nbXNkYWI7TGNlZGlsO0xlZnRBcnJvd2xvb3BhcnJvd3JpZ0RvdWJsZUxlZnRSaWdodEFycm93c3VwbXV5Y3lwZXJjbnRMb25nTGVmdEFybnRyaWFuZ2xlbGVmdGVxcmRsZGhhQ2FwaXRhbERpZmZlclVjeWZub2ZWY3k7Tm90RWxOb3ROZXN0ZWRHcmVhdGVyR3JidW1wZXE7UVVPVDtzdWNjc2ltbWFwc3RvZGZjeTtOb3RMZXNzVGlnbDtsb25nRG93bkxlZkNvdW50ZXJDbG9ja3dpc2VDb250b3N1Ym5lO0NpcmNsZURvdHJhcnJscExlZnREb3VWZXJ0aWNhbFRVcGRvd1RSQUl1Z2NpcmNOb3RQcmZudXJjb3JuO3NoY2hjeVVwcGVyUmlnb3VtdWJyY3k7Tm90TGVzc0dVdW1sO0xvbmdsZWZ0cmJveHZMO0NheWxleXM7ZUR6ZnJzd253YU1lbGxpbnRyZmF3aW50O1phU3F1YXJlU3VwZXJzZXRFbGVxO2V4cG9uZWNpcmNubGVmdHJpZ2h0YXJybmN1Q2VudGVyRG90c2NhUmlnaHRhcGhvbmVsbHRyaTtpZWN5O0RvdWJsZVJpZ2h0VGVlcmFycnNpY2x1ZW1wdHlzZXRsbmV4dXBsdXNTT0ZUY2ptTm90TmVzdGVkaG9va3JpZ2h0YXJyb01mcm9kYlJpZ2h0VXBUZWVWZWN0b3I7Y29sb25lU3F1YXJlVW5pb2JubmhBcmFwcHJveGVxeWFBc2N0d29oZWFkcmlnaHRMZWZ0YXJyUmFuVkRaZXRhTm90VmVjdWRhcnJyO3VhY3V0ZUtzY3I7dW1hY3JQb2luY2VzZG90O092ZXJCYXI7Tm90VGlsZGVUaXVtbDtZQWN5O3JpZ2h0aGFycG9vbG9uZ2xlZnRhcnJvdztpaWludEFNUEh1bXBFcW5leGlzdG5sZWZ0YWxtb3VDb3VnRWw7TG9uZ1Jib3hETDtvZ3JhdmVubGVzSXRpbGRlbGVmdGhhcnBvZnJhYzE0a2Fac2NvbXBsZW1lbnQ7dHdvaGVhZHJpZ2h0YXJyb3dib3htb3NjYmFja3NpbWV5Y2lpcmZsb29CZXJub3VsbGlzO3JsbTt0b3B0aG9yamN5O2RjYXJyc2xvb3BhRW1wdHlWZXJpZXhjbDtwb2lubnZnVFJBREU7ckJhcnNpbW5lcmJyYWNrO3N1cHNldG5lcXF0YnJyQXJyO29kb3ROb3RQcmVjZWRlcztpdGlsZGU7R3NjT3NsYXNoO3NicXF1SGNpcmM7SXNjcmRvbE5vdEV4aXN0c3JpZ2h0aGFycG9vbnVwRmlsbGVkVnhkdHJ2YXJzaWdnbGE7RG91YmxlTGVmYmxvY2t0cmlhbmdsZWxlc21lcFN1YnNldEVxdWFsQ29uZ3J1ZW50YmFja2Vwc2lsamN5O0xlZnRWZWN0b3JCYXJOb3RIdW1wRG93bkh1dmFybm90dW1hY3I7RGlhY3JpdGljYWxUaWxkZW5sZXFzbGFmcmFjMjM7YnNjT2FjdXRMZWZ0QXJyb3dScmlnaHRzcXVpZ2Fycm93bG9uZ2xlZnRyaWdodGFycm9uYW9zb05vdFRpbGRlRnVsbEVxdWF0b3Bmb3JrO0xlZnREb3FpemREb3duUmlnaHRWZWN0b3JpZ2h0cmlnaHRhcnJ1aGJwYXJzaWxlZnRyaWdodHJpZ2h0bGVmdGhhcnBvb25zcHJlY2N1cmx5bGhhdGNlZGlsRXBzaWxvbjtzY2VkaWxtdW5jYXJMZXNEb3VibGVEdGhldGFzeVNpZ21hVGhpU3F1YXJlU3VwZXJzZXQ7Tm90RG53bG5lcWJlcGJsYVN1Y2NlZWRzO2RpZ0ludmlzbm90bnZhcm5vY2FwYW5TaG9ydFVwQXJuYWJsb3ZiYXBvc05lZ2F0aXZlVGhpblNwbG5hcHByb3g7Wm9wZnZsc210ZTtsdHF1ZXN0O05vbkJyZWFraW5nU0xvbmdyaWF3Y29uaW52c3VwbmViZXR3ZWVnYVJpZ2h0VHJpYW5nbGVFcXVhT21pY3JvbmxzYXF1ZG90bWludXZzYmVtcHR5Q2xvY2t3aXNlQ29udG91cklOb3ROZXN0ZWRMZXNzTGVzc25pdjtBRWxpZztVbmRlckJhcjtmcmFjNURvd25MZWZ0VGVlVmVjdG9zdHJhaWdodGVkdWF1ZGhTaG9ydFVhbmRzZ2xqO3JlY3Rjb21zcGFkZXN1aXQ7YmFja3NpbXJjV29wU2hvcnRET3ZlckJyYWNrZXQ7UG90b3Byb2ROb3RMZWZ0b3JpZ2ZyYWMxNXh2RG91YmxlQ29udExlZnRVcFZlY3RvaW1hdGg7dUhhVWFjdXRlO3ByZWNucmlnaHRzcXVpTGFjdXRhc2NyO0Rvd25UZWU7ZmN1cGhhcnBvb25sZWZ0RG93blJpZ2h0VmVjdG9yQmFJbWFnaVRTSENlZGlsbmNvbmdkbnduZWFBb2dvZ2VsO0NvbmlzdXBzZXRuZXFxO25wcmN1ZTtPdGlsaW5vZG9kb3RlcWRYc2NFbXB0eVNtYXJjZXJicmFjZTtmaURvdERvdGRIYmlndHJpYW5nbGdzaW9nb3N1cGVkb3RndHJlcWxlc3NzbXRlcztmbGxpZzt2YXJlcHNpbE5vdEdyZWF0ZXJGdWxjaGN5WmVyb1d5ZkxhcGxhY2JibnVtc21hc2JlY2FSaWdodFRyaWFuZ2xlQmFyO1VuZGVybW9wZnZhcnRyaXJpc2luZ1dzcXVhdGVybm92YmFyTm90U3VjY2VlZHNsb25nbGVmdHJpZ2h0YXJyb3dlcXZwYXJzRm9wZjtiaWdjdXA7YmVtcHRpZ3JhdktIR2dyc2FxdW9EaWZmZXJVdGlPbWljcm9uO0Vkb2xlcXE7VWFycm9jaWxmbHRzY3lMY2VkaWV1bWw7SmNpcnZvVXBhcnJubHNpT3BlbkN1cmx5RG91YmxlUXVvdENPUFk7Ym94SGRzdXBoc2FvZ29uO0xzdHJvTmVzdGVkTGVzc0xlc2ZsYXRpbWFnbGl3cmVhdGh2YXJwTm90UHJlY2VkZXNsYnJrc2xkZ3RyZXFxbGVzc3pzZ2Vxc2xhbmxlcXNsYW50Tm90R3JlYW5sZHI7YmlndHJpYW5nTGVmdFJpZ2h0QXJyY2xmaWxEb3VibGVMb25nTGVmdFJpZ2h0b21hY3JUaGluU2dqYXN5bXBlVmVydGljYWxTZXBhcmF0b3I7SW52aXNpYmxlY3JhcnI7RXVhbmdtc2RhY05vdFJldmVyc2VFbGVtYWJyZXZVYWNMZWZ0RG93blRlZVZlY3RvdWxjb3JuZXJvbGNyU2hvcnREb3duQXJyb3dVcHBlckxlZnRBcnJvd0JjeWFhY3V0ZTtPb3B1Y2lybGRxdURpZmZlcmVudGlhbERsYWdJbWFnaW5hcnlJQ2xvY2FuZ3phcnI7TGVmdFVwVGVlbGFycmZzY3NhcGlEb3VibGVMb25nTGVmdEFyZXFzbHNjcG9saWxvbmdyaWdodGFyclNoY2Fwc0ludmlzaWJsZVRpbWVzO2FlYmFja3NOb3RQcmVyYnJhY2VDbG9ja3dpc2VDb250b3VySW50ZWdyRXRhO3NpemFjdXRMZWZ0RG91YmxlbHNpbWU7c3NldHN1cGhvbWFjZWdzYnF1bztsQXJyO3NlYXJyb3dBb3VoYXJOdGhpY2thcHByb2xvd2FzbGx0TG9uZ0xlZnR4b3BsdXNsb29wYXJyb3dsZWZ0YXN5bXBsdXN0VXBBcnJvd0RvU2NlcmlnaHR0aHJlZXRpbWV1bHRyYmxhY2t0cmlhbmdsZWRvbGVmdHJpZ2h0aGFycEdyZWF0ZXJHcnN3QWZyYWM1NjtsZXFzbGFudDtuZUFyaGVhcnJpZ2h0dGhyZWV0TGVmdERvd2Vsc3pzY2NhY3V0ZTtyY3VyaWdodHJpZ2hwb2ludGludFNvcHVncmF0cmlhbmdsZWxlZm1hcHN0b2Rvd0xvbmdyaWdodGFybm90aW5kVW1hY3JDbG9ja3dpc2VDb250b3VySW50Y29tbWF0VXBFcXVpbGlicHJvZnN1cmZnZGxzY1VwVGVlQXJyYXRpbHJpZ2h0c0tKY3k7Z3RyZXFsZXNzO3hoQXJyRG91YmxlVmVycW9TcXVhcmVTdXBlcnNlc2JxdWRzdHJvbWVhc3VyZWRhbmdOb3RUaWxkcHJlY25lSW50ZXJzZWN0ZGRhQUVsaWdSaWdodFRyaWFuZ2xlVWRibGFjO3RyaXRpbWU7bEJhcnI7bEJNZWRpdW1TcGFjZWN1cGJyY2FjdGRjZW50ZXJkTWVkcmRHYnJldlJldmVyc2VFcXVpbGlicml1bTtGb3JBbGFicnJob3Zhbmdlb3JpZ29MZWZ0VGVlQXJsdHJpZjtPYWN1VXVtcm90aW1Eb3VibGVDb250b3VySW50ZWdDaXJjTG9uZ2xlZnRyaW5sZWZ0YXJyb3c7bG1pZG9BRUludGVncmFWZXJ1cmNvcm5lcnNwYWRlbG9vcGFycm9Ob3RTdWJzZXRFUHJlY2VkZXNFcXVhbGxhZXNjYXBFY3k7cmxhcnI7YmlnY2lydHN0cm9uZWFycjtvbWVnYTtTc2N6b2djeW5sdHJpZXpvcGZ2YXJlcHNpYmVjYXVpZWN5dW1hbnRyaWFuZ2xlbFVwYXJoYWlyc3BsdGNpVGhpY2tTQ2FjdXRlO0RlbHRhO3ZzY3JSaWdodFVwVGVlVmVjdG9mcGFydHJvYXJMZWZ0VHJpYW5nbGVCYXI7YXVtbG5wYXJhbGxlbEZpRG93bkxlZnRUZ2JyZXZlO3ZlZWVxO1Nob3J0VXBBU3F1YXJlU3VwZWlpaWlzdWJFO05zY3I7Tm90RXF1YWxUR3JlYXRlckVxdWFsTGVzc3JjYXJGaWxsZWRWZXJycHBvbGludDtvZVVuZGVyUGFyZW50aGVzaXM7RG91YmxlTGVmdEFycm93O2dzaW1lO2ZwYWVmcjtiZWNwaW9taW5sQXRhZ2FtbXdlZGdjaERvdWJsZVVlbXB0eXY7ZnNjbmxlZnRyaWdodGFycm9MZWZ0VGVyaW50cmlhbmdsZWxlZnQ7cmlnTm90R3JlYXRlckZ1dmFyZVNIVWFZQWNsb2FycmNvbXBsZXhlc0Vwc3Nob3J0cGFyYWxudnJ0cmllO092ZXJCcmFjZTtUY2VkYmlnb3BsdXNQc3JvYnJjd2NvbmlQcmVjZWRlcztub3RuaXZhaG9yYkRmYW1hY0xvbmdMZWZ0QXJyb3dtb3BmO2NvbG9uZXE7UHJvZEVjRXF1YWxUaWxkd29wZnNpZ21nZXNsZVNjYXVyY3JvdXJjb3JuZXI7b2htSU9MZXNzVHByY3VlRG93bkFycm93O3ZsdEludmlzaWJsZUNvUmV2ZXJzZUVsZW1lbnR3cE9zbGFzYm94VXI7U3F1YXJlSW50ZXJzZWNpcnNjaXJucmFycmM7dHJpZG9yYnJrc2Vzd2Fsb3didHJpbWludXM7Y3VwY2FwO2dhcG5hcHByb3g7RGlhY3JpdGljYWxEb3VibGVBY3V0ZU5lc3RlZExlc3NMRGFyTGVmdEFycm93QmFUaWxkZTtOb3RMZXNzU2xhblljbkxscXVlR29sakxlZnRDU3VjY2VlZHNUaWxucnRybndhcnJyYXJycE5vdFNkaXZpZGlnZWNpcmM7ZWFMb25ncmlnaHRhcnJvd1JpZ2h0QXJyb3dMZWZ0QXJyb0dyZWF0ZXJTbGFudEVxdWFOb25CcmVha2luZ3JvYXJyO0RvdWJsZUxlZnRSaWd2YXJ0cmlhbmdsZU5vdEdyZWF0ZXJFcXVhbE5vbkJyZWFraWRhc2g7UHJlY2VkZXNTbGFudEVxdWFsYmxrMTQ7WXNsYWVtUmlnaHREb3VibGVCcmFja2JsYW5iZHF1b1VwYUJhY3RwckJvcFJzaDtMbWlkQ291bkNhY3VTcXVhcmVTdWJzZXRFcXVhVXRpbGRhcGFyYnJrc2xkYmV0YTtSaWdodFZlY3RvckJhcjtibGFja2xvemVuZ1VwcGVyUmlnaHRnZWxMZWZ0VHJpYW5nbGVFcXVhbGxsaGFyZDtTaWdtYTtFY2lydGhrRWFjdUlvZ29SaWdoTm90TGVzc0VxdWFsO2RibGNlaWFuZ3phcnJlYWxwYXJ0c3ViZWRvdEJhY2tzbGFvc2xhbkxlZnRhbG9uZ3JpZ2h0c3FzaW5jYW9hY3VzcXN1YnNldDtudmxlRGlhY3JpdGljYWxHaHlwaXByZXhwb25lbnRpc2NhcnN1YnJhcmVxc2xhbnRsZXNzZXFjb2xvbk1lZGl1bVNwaEFycjtOZXN0ZWRMc3NtaWxlO3VyaXZhcm5vdGhpbkNvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWFscGhhO1VyaW5nTGVmdERvd25UTG93ZXJSaWdodEFycm93eGZyO0xlZnRWZWN0b3I7VmVyeVRoaW5TcGFjZURpYWNyaXRpY2FsRG91YmxlQWN1dGU7SG9ySWdsZXNkb3RvclBvaW53QXJtb3VzZG93bmhhcnBvb25sc3VwZHN1YjttZWFzdXJlZG53YXJyb3doZWFDZEh1bXBFcXVuTHROb3RMZXNzU2xhbnRFcXJ0cmJsYWNrdHJpYW5nbGVyaWdoZmZpbGlnZGZlbXNwMTM7TGw7YmFja2Vwc2lsb090aWxkZTtyaWdodHRoclN1Y2hUaGF0Y2FyZXRmaWxpZ1lvcFVicmN5TGVmdFRyaWFuZ2xlRXF1YWw7RGlhY3JpdGljU3VjY2VlZHNTbGFudFVuZGVvbWFDYWN1dEZpbGxlZFZlcnlTc3RyYWlnaHRwaGduYXBwck5vdEVsZW1lbnQ7bmNvbmc7RHN0cmRsY290c2NyO2RhbGVWZXJ0aWNhbExpbm5sZXNzZHJvcE5vdFRpbGRlRnVsbEVxdWFsO2FuZ3NwaHdjaWJveEhEO3V1bWxUaWxkZXVicmV2ZW5sdHJkY3llc2RvcmlnaHRhcnJvd3RhaVNob3J0UmlnaHRBVmVydGljYWxMTGVmdERvd25UZWVWZWNib3h2cmZvcGY7b3JkZW5wb2xpbnRkYWxldGg7Y3VybHllcVJpZ2h0RG93blZlY3RvcjtMb3dlckxlZnRBcnJubGVmdGFycm93bGVmdHJuYnVtcDtOZWdhdGl2ZVZlcnlUaGluU2JveGg7ZXFzbGFudGxlc0xjZWRhd2NvbmludDtiYWNrZXBzbmxBckNsb3NlQ3VybHlEb2RpYW1mZnJjdXJ2ZWFycm93cmlnaHQ7c3VjY25lcXE7dGJNZWRpdW1udmx0cmluZUFycmxjYXJvdHN0cm9rO2xlc2RvdG87cmxoYXJDb2xvbHNpbWVwYXJhbGxlZnRoYXJwb29udXBVcFRlZUFycm9hbmdydHZuY2FtZVJFR05lZ2F0aXZlVGhpY2tib3hIZDtHckxlc3NUaWNvQ2xvc2VDdXJseVFJYWN1dGU7VGlsZGVGdWxsRXF1YURvdERvdDtib3h1bDtjdXJseWVxcHJlY3djb25pbnQ7VXBkVm9wcHJzaW1jY2Fyb2JldHdlZW47R2NlZGlsbGJyYWJveFZscmlnaHRhZGZpc2hydGltZXM7aGtzd3NpbWw7bG5zaW1PcGVuQ3VybHlEb3VibGVRdW9vbGlkb3duZG93bmFyT3BlbkN1ZGl2aWRlb250aW1lc3JoYXJ1bDtyZHNyb3BhcjtzZXN3YXI7c3Vic2ltbm90O0VncmF2ZTtVbWFyb3RpbWVkb3duaGFycG9vbmxlZnRFcXhvdGlsb3BmO2xhbWJkYWRvd25kb3duYXJyb1ZzY0Fzc2lnbnpoZnJhYzM1O2Rvd25kb3duYXJyb3dzckFhb3J2O0VtcHR5VmVyeVNtVW5kZXJQYXJlbmN1ZXNMZWZ0QXJyb3dSaWdocmlnaHRyaWdodGFyZGNhcm9uO05vdERvdWJsZVZlcnRpZXBhcjtkYWdnZXI7bGVzc2VxUGx1c01Ob3RTdWNjZWVkc1NsYW50YmxsYWVtcHR5QU1wbGFua3ZmamxpbGVmdHRocmVldERKY0Rhc2JzaVVwQXJIYXJOb3RSaWdoZWFydHN1aXR1ZmljeWxjdHluYnVtcGU7c2RvY3lsYm94SDtyYXJyY2x2bkVoa3NlYXJyZmxMZWZ0QXJyb3dSaWdodEFycm93O250cmlhbmdsZWxlZlNxdWFyZVVpbnRlcmNhbDtndHJhRGN5cG9wTm90TGVmdFRyaWFuZ2xlQmFyO2xyaGFyZDtFb3BmO3V1bWw7YmlndXBpcXVlc2JveHBsdXM7VnZkYmlndmVlO0RhcnJubGRHZG90O2RoYXJsO1BjeTtEb3VibGVEb3duQXJyb3c7Tm90Q3VwZW1zcDtuZ3Q7bnNpbWVxO2x2ZXJkb3VibGViYXJ3ZWROb3RTcXVhcmVTdWJzZXRFcXVzZXRtSW9wZjtUU0hjYmFjTG9uZ2xlZnRhQ2xvc2VDdXJseVF1b3RldGNhTFQ7VnNjcjtVc3ByZWNjdXJseWVxYmxhY2tsZXNzZXFxZ3RyeGhBRXF1aWxpYnJpc2VBZWN5O0h1bXBEb3dGY3k7YW9wZjt4aERpYWNyaXRpY2FsR3JhdmViaWd0cmlhbmdsZXVwO25yaWdodGFycm93O1BOYWxkcXVvY2lyZU1hcG5zdXBzZXRlcXVlc3RlcUxlZnRSaWdodEFyeGxBcnI7bHVydW53bm50aWxkZTtQcmVjZWRlc1RzdXBtdWx0aWpsQ2FwRGViaWd3ZWRnZTtjcm9zcztjdGN1cnZlYW51bWVybztzZXN3c3RybmJOb3RSYWNub3BzYWN1dGVjY3Vwc3NtUkJhbGJya2VDaXJjbGVUaW1lc0JhY2tEb3VibGVWZXJ0aWNUaXVwbHVVdE5vQnJlYWtOb3RTcXVhcmVTdXBlcnNldEVxdWZhbGxpbmdkb3RzZU1pbmFuZ21zZGFmO3dvcERvd25BcnJvd0JhckdyZWF0ZXJMTmV3TGlubmxhcnJzaW1kb1NxdWFyZVN1YnNldEVxdWFsO2dhY3V0ZVJhcnJ0R3JlYXRlckVxdWFsTGVzYm94bWlhYWN1Q291bnRlckNsb0ZvdXJVcG5pdmJpZ3VwbHVVcGRvbG5FQ291bnRlckNsb2Nrd2lGaWxlcXVlc3Q7bmdlcXNsYW50O0lKbGlmcm9zbGFzRG91YmxlTG9uZ1JpZ2h0Q2xvY2tEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3dzaG9ydG1pZDtVcFRlZUFycm93QmFja3NsYXNoTm9uQnJlYWtpbmdTcGFjZTtOb3RHcmVhdGVyU2xhREpjeTtubGVmdHJzdWNjY3VybHllbkxlZnRyaWVsc2RvdHFwcml0b3NhY3NrY2VkaWxMYXBsYWNldHJmaGtzd2Fyb3c7S3NlcWNpendqc2JuTERvdWJsZUxvbmdMZWZ0QXJyb2NpcmU7UmNhcmRBcnI7ZmZsaWc7QmV0YVRoaW5TcGFjZWpmcjtHcmVhdGVyU2xhbnRFcXVhbDtVcGFycm9Ob3RHU3VjY2NvbXBsZXhIb3Jpem9udGFsTGluYmlndGxicmFjRGlhY3JpdGljYWxUaWxkY3VybHl2TG93ZXJSaWdodEFycm9Eb3RFcXV1cGFycm9Pc2xhc3Vic2V0O3RoaWNrc2ltO2VxdnBhcnNsYWxlcGhMZWZ0QW5nbGVCcmFwcm9wdExvbmdMZWZ0UmlnaHRBcnJvbnNob3J0bWluYXA7U21lcXVhbHNuYWNhdFNzY3I7bGVmdGFyaWdodHNxdWlnYXJyTGVmdGFycm93O2NlbnRlckZvdXJpZXJMb25nTGVmdFJpZ2h0QXJycGx1c2xBYXJyO3Jpc2luZ2RvdHNldHJpYW5nbGVkY2FwY2FwO0RpYUVUbXVtYXA7Z2VzZG9Eb3dubGVzc2VxcWd0YmxhY2t0cmlhbmdsZXJpZ2h0bG9uZ2xlTXVSaWdodFRyaWFuZ2xMZU1jeTtlY2JpZ2NpcmNiYWNrY29uZ2RkYXJyO3NtYWxsc2V0eG5pU21hTm90U3VjY2VlZHNTbGFudEVxcHJvZnN1cmY7RXhpZ3NVcERvZXhpQ2FwaXRhbERpZmZlTGVzc0Z1Z3RyYXBwcm94O2JldHdsdmVydG5ndGNpcjtzdW07ZXhmcmFjMjNVc2NwcmVjZWdydXJpbmZvcmFsbnJpZ2hwcmNDb25ncnVsZWZ0dGhyZWV0aWRkb3RzZXE7YmlndmVDYXBpdGFsRGlmZmVyZW5lbWFTaG9ydFJpZ2h0QXJyb3dib3BmZGlnYW1tYTtldXJvO0ZpbGxlVmVyeVRoaW5TcFZkYXNoO3N1cHNpbXZsdHJpZG91YmxlYmFyd2VkZ3VsY3JvcDtSaWdodFRyaWFjd2ludDtmc2NyO1JpZ2h0RG91YmxlQnJhY2tlc3NldG1uO1J1bmxlZnRhcmJrYXJSaWdodERvd25UZWVWbGhibGs7dHJpYW5nbGVkb3duc21hbGxzZXRtbGJhcnN1YnNldG5vcmlBcnhkdG50cmlOb3RMZWZ0VHJSaWdodERvd25UZWVWZWN0b3I7bnN1YkU7bnN1cHNldGVxcWV4aXNOb3RFbGVtZW5iaWdvcGx1VW9iaWd0cmRzTGVmdFRlZVZlT2RibGF0c2hjeXN1Y2NjWWFjdXRpbnRlcmNPcmJveERMb3dlckxlYmlnc3FVcHNpVW5kZXJCcmFja2V0ZGRlcHNoZWxsaUxlZnRUcmlhbmdyaG92O1N1Y2NlZWRzU2xhbnRFcXVhbENmcjtyYW5SYXJydGxuc2NlRG90RXFJdW1sO25zdWNjZXByb2ZsaW5lc3VwbGFmaWxpR2FtbWhjaXJ3b2FvZ29uZGllO2l0aWJhcndldGltZUxvd2VyUmlnT3ZlclBhcmVudGhBbWFjcllVY3pkb250cmlhbmdsZXJpZ2h0ZXFkcmNvcm5sZWZ0YXJyb3d0cGFyU3VwZXJSZnN1cGVtaWNyUnNoY2lyY2xlYXJyb3dyaWd0aW50cGhtbUREb3RDbG9zZUNtYXBzdG91cDtJZ3JhdmVrY3lOYWN1cmhhcmQ7QW9nb247UmlnaHRBbmdhY3V0R3JlYXRlckZ1bGxkdXRycHJlY2FwcHJveDtsb2FydXBsdXN2YXJzaWdtYTtydGlob29rbERvd25hcmxlc2d4bnN1cGRzdW9yRGlmZmVyZW50aWFBYWN1ZGVhdW1sO2xiYnRyaWRyZmlzaHQ7TGVmdFRlZVJ1bGVEZWxMb25nTGVhbmdtc2RhZztyYXJyd2d2ZXJ0bmVCZXJub3VsbGl1YWN1dGU7UHJlY2VkZXNUaWxkZTt2cnRpZWNYaTtOb3RWZXJ0aXJuc2Nwb2xpbnQ7Tm90VGlsZGVUaWxkZXBpdGNoZm9ya21jb21tYTttZlJpZ2h0RG93blRVbmRlclBhcmVudHRzdHJkZG90c2VUc2NyO2N1cmx1cHNpbG9udXRpc3VjY25hcHByb3J0aW1ldnByb3Boc2lhY2lvdGFwbHVzZHVQcmVjZWRlc1NsYW50RXF1YWw7dXBscmRzaDtjYWNnZ2dkemlncnN1cHNldG5lcTtjdXJseWVxc3VjcmZsb29yRGlhbW9ucmlnaHRhcnJvd3RhaWxSaWdodENlaWxlbXNwMTNOb3RQcmVjZWRlc0VxdWFsO2d0ZERvdWJsZUxvbmdydHJpZjtkYXNoTm90U3F1YXJlU3Vic2V0aG9va3JpZ2h0YVhmZ3RyYXJyZWFsaUxlc3NHcmVwaG1tYXdlZGdlRG91YmxlTGVmdEFyT3BlbkN1cmx5UXVuaHBhcjt3Y2lyYzttbGR6YWN1TG9wZmN1ZGFyeG9wbGhlbGxpcHBsdXNlO2xBdGhzdHJIb3Jpem9udFVwQXJyb3dEb3duQXNxdTtxcHJ4bGFyc3VjY3ZhcnRyaWFuZ2xlcmlnaHRwcmVjbmVxdXRsdHJQYXI7dXBoYVN0YXVBcnJibG9jaztzdWNjbmVxcmFjdXRydHJpbHROb3RMZWZ0VHJpYW5nbGVFcXVhbDtNZWRpdW1TcGFscGFybHRpYWN1dHNob3J0cGFyYWxsZWw7bHN0Y2x1Ym52Z3Q7YmlndHJpYW5TYWN1dFpkTm90UmV2ZXJzZUVsZW1lbnQ7Um9wZmNvbmdkb2N1cnZlYXJyb3dyaWdoaW50ZWdlcnNiaWdzcWN1cE5vdFRpbGRlRXF1Z3RyZXFxbGVFbXB0eVNtYWxsU3F1YXJlVGN5O3BsdXNkbnNjO2ludGxhcmhrO05vdFRpbGRlVGlsZGU7RG93blJpZ2h0VGVlTGVmdFVwVGVVcEVxdWljaXJjbGVkY25oYXJybGF0YWlsO05vdE5lc3RlZEdyZWF0ZXJHcmVhbmxzYmlndHJpYW5nbGVkb3dubWNvbWduYXBwcm94WG9wZjtsZmlzaHRyaWdodHNxdWlnc21pbGVjb25pbnQ7bXVsdGltYVplcm9XaWR0aFNwYWNlO0Rvd25BcnJvd0JhY2VudGVzYWN1Y3Vwb1lVY3k7UmlnaHRBbmhhbUxlZnREb3VibGVCcmFja2V0ZHdhbmdFeHBvbmVudE9wZW5DdXJ0cmFkZWVuc3B4Y3VndHJlcXFJbnZpc2libGVDb21tYXJhZGlEb3duTGVmdFZlY3RsZWZ0bGVmdE5lZ2F0aXZlVmVyeVRoaW5TcGFjZTtEb3duTGVmdFJpZ2h0VmVjdG9yQ29wTmVnYXRpdmVWdHByaW1lO3VwaGFycG9vbnJpZ2h0VEhPUk47aXRzdXBzZXRubHNhbHBQcm9wb3J0aWFjZDtyY2VkaWx1d2FuQ2FwaXRhbERpZmZ1bWFjaGtzZU5vdE5lc3RlZEdaY2FEWmN5R3JlYXRlclNsYW50RXBvdW5zcXN1Ymhvb2tyaWdodGlub2RvdGJvdDtTcXVhcmVTdXBOb3RQcmVjZWRlc0VxdXNldG1pbnVzO2ZhdGhrc2ltcmhhcnU7YnNlbWd2ZXJ0bmVxeWVuO2xjYXJvbnRyaUFzY3I7T3Vtc3VjY25hcHByb3g7bWludXNiO0VtcHRQb2luc2ltbmU7RG91YmxlTG9uVWFySHVtcERvd25IdUVzY3JrZ0NhcGl0YWxEaWZmZXJlbnRpYWxtaWNybztyaWdodGxlZnRhcnJvd1VnckxlZnRVcFRlZVZlY3RvRW1hY3I7cnhuc3VjTGVzc0Z1bGxFcWVhY1BoaXJzYXF1bzt5Y2d2ZXRyaWFuZ2xlcmlnaHR3b2hlYWRyaWdodGFOb3RTcXVhcmVTdWJzZXRFcXVhbDt0d29oZWFkbHJicmtzbHU7UmlnaHRVcERvd25WZWN0ZXFvcmRVZGhlbHVwdXBhcnJvRmlsbGVkU21hbGxTcXVOb3B0cmlhbmdsZWxnYWN1dHVsY3JvcEludmlzaWJsZVRpbXBlcnR0ZnJzcGFkZXN1TGVmdENlaWxpZ2VzY2NRZm9yZDtudGdsO2xlZnRyaWdodGhhcnBvb3ZhcnNpc3Vwc2V0bnBhcmFsbG1pZGFOb3RQcmVjZWRlc1NsYW50RXF1YWxia2FVbmRlclBhcmVudGhlc3N1Y2NjdXJseWFyaW5nTGVmdHJpZ2h0YXJyb3dud0FybmNhcDtCZnJQb2luY2FyZXBsYU5vdFNxdWFyZVN1cmFycnRsTm90SHVtcEVxdWFyYnJhZGlhbW9uZHN1aXRJbWFnaW5hcmlmcm5WRGFzc3Vwc3VwRmlsbGVkU21hbGxTcXVhcmVOb0JyZW5hdHVyYWxzeGxsbW91c3RhY2hlSmZybnZkYXNoO0ljeW52SHhzY3I7R3JlYXRlckZ1bGxFcXVhc3Vwc2V0ZXFxO3JhcVByb3N0UnVsZWZhbGxpbmdkb3RzbnZydHN3YXJwcm9mc2lhY3V0ZTtySHVjaWFwYWNEaWFjcml0aWNhbFRpbGNhS2FwcGF1ZnJib3h2Umhvb2tsZWZSaWdodFRlZVZlY3RvT2dyYXZlTG9uZ2xlZnRyaWdodEJhcnY7UmlnaHRVcFZlQ29udG91ckludGVncmFsdmVyYmFyO2xsY29ycGhubHRyaTtkb2xsbnNjY3VkaXZpZGVvbnRpbWVOb3RSZXZlbnBleHBvbmVudGlhbGVDaXJjbGVNbGhlYXNMZWZ0VmVjdG9yT3ZlclBhcmVudGhlc2xvYXJyO3JlYWxwYXJzdXBzZXRlcTtFeHBvbmVudGlhVXBwZXJSaWdodEFycm9Ob3RMZXNzU2xhY29uZ2RvdDt1dXZlcmJhYWxlZk5KY3k7UVVGaWxsQ29wckFyaW5nc3RyYW1Tb3BmO2F3aW51bHRyaTt0aG9ybjtib3hoVXNjbnNpRG91YmxlVXBBTm90VmVydGljYWxCYWlwcm9kO25vdG5pdmJ0cmlhbmdsZWRvd247bnZsQXJyVGNhcm9uWXNjcjtDbG9zZUN1cmx5RG91YmxlUXVvZWxzZG90O3JhdGlvbmFsTm90VGlucG9kamN5O0dyZWF0ZXJUaWxUaWxkZUZ1bGxFcXVhbG9kb3Q7bHRpbWVpY2JsYWNrbG96ZVplcmxvb3BaZWRvdHNxdWF0cmltZ3RybGVzczthbmRzbG9wZXV1YXJyY2VudGVyZG90O05vdFN1cGVyc2V0RXF1T3ZlckJhcGFydDtiTm9waG1zaWdtYWY7bGVzc2FwcHJvTm90TmVzdGVkR3JlYXRlckdyZWF0ZXI7bHN0cm9rO2F0aU5vbkJyZWFraW5nU3BhY0FyaW5nO3RvcGJMZWZ0bGVmdGhhYnJ2YlRzRm9wZnRjZU5vdFRpbGRlUHJvcG9yZG07Tm90U3F1YXJlU3Vic2V0O0xvbmdsZWZ0cmlnaHRhcnJvdzt4dXRtaW51c2JvaXJtb3VzdGFjaE9ncmFycmJmcztWZnJHZztlbmdzY2VkaWw7dGRvdHhvcGY7TGVmdFRlZVZlY3RUc3Ryb2s7dUh0aW1lcztzZW1pO05vdFN1Y2NlZWRzVGlhbGVwaDtyYXRpb2RhckNlZGlsbGFMZWZ0VXBWZXBsdXNzTm90TGVzc1NsYW50RXF1Tm90R3JlYXRlclNsYW50RXF1YWw7bGhibmN1cGduc2ltcmFyQ3VwQ2FwO09FbGlyaWdodGhhcnBvb25kYWd0aW1lc2Q7aGFpckpvcGZzZUFycjtSaWdodEFuZ2xlQnJhY05jYXFmcjtyZWFscGFydDt6ZWV0cm1jeXNicXVvTm90UmV2ZXJzZUVsZW1lbkdjZUhBUkRjeTtOZXN0ZWRHcmVhdGVyR3JldGlsZGU7dWRhTm90TGVzc0xlc3M7UmlnaHRBcnJubHQ7aG9tdGhiY05vdExlZnRUcmlhbmd0YXJnZW5zaW1lcVJpZ2h0Q2VpTGVzc0Z1bGxlcXNpbTtkd2FuZ2xlO25wYXJzT3ZlckJkb3dubmdlcXFFTkc7Y2lyY2xlZGNpcmNOZXN0bnByZWNleHNjcnNzdGFycXVhdGVybmljc3VibHRkb3Rob2FycjtkaWFtb25kc3Vpc2hvcnRtbnRsZztob29rbGVmdGFycm9XZnJMZWZ0RG93blZlY3RvckJhcjtmZmlSaWdodFVwVnNldG1uO0hpbERvd25BcnJvd1VwQXJuTGVmdHJpZ2h0YXJyb0xlc3NMZXNzVXBzaTt0cnBlemlzdWJuRTtzcXN1YnNldGVxZnJhYzE0O2lmZjt2ZU5vdERvdWJsZVZlcnRpY2FsQmFyO2xjZWlsO2V1bUh1bXBEb0RvdWJsZUxvbmdMZXJpZ2h0aGFycG9vbmRvUmV2ZXJzZVVwRXF1aWxpYnJpdWRvdGV4cG9vbGluZU5lc3RlZExlc3Nsb25nbGVmdGFycm9SaWdodERvd2ltYWNyT3BlbnJoc2NlZGlMb25nTGVmdEFycmxhcGlqbGlyb3BsdW5hcHByc2VtaUNvcHJvZHVuaTtwaG9Ob3RSaWdodFRyaWFyYWVtZW1wdHk7c3dBcnJzcXVhcmU7dWRibGF0d29oZWFkcmlnTG9uZ1JpZ2h0QXJyb2RibGFucmFycnduc3FzdXBlO3RjeWJpZ290aW1lc2VzY1NpZ21WdmRhcGx1c3R3b2Vnc2RvdDtjdXJ2ZWFycm93cmlnZ2Vxc2xhbmxlZnR0aHJlZXNmcm93bjtoY2lyY2N1cnJlbnN1cHNldDtMZnI7bmdFO1VuZGVyUGFEb3VibGVMZWZ0QXJycmlnaHRoYXJwb29uZG93Y2VudGVyZG90Tm9uQnJlYXZlZWJhcjtrb3BmTmVnYXRpdmVNZWRpdW1tc3Rwb3N2YXJ0aGVMb25nbGVmdHJpZ2h0YWxiRG93blRlZUFycm93O0V1bUxlZnRWZWN0b3JCYXI7bnZIYXJTdXBlcnNldEVxdW5wcjtzdXBoc3ViO2pjaXJjO2RyY29ycmVhbHN0YXJnZXRwaXRjaGZvcm11bHRpZXBzaTtkc2NydG9wYm90bnZyY2lyY2Vxc2VzUHNjcmhvb2tyaWdobGNlZGRhZ2dnbmFwRWZyO1VuZGVyQnJhY2tsZHJkaGFjaXJjbGVzbXRlb2ZjaXJuZ3NpU3VjY2VlZHNTbGFudEVxdWFsO25leFVkYmxVYmhlcmNvbjtSZXZlcnNlVXBFcXVpbGliclByb3BvcnRpb25hbGxhcmFwRUN1cExvbmdSaWdodEFycm93dnN1cG5lO1JpZ2h0VWhmckRvd25hcnJScmlnaHRhVGlsZGVGc3VtY2FwZHZhcnN1YnNldG5ud2Fycm9SaWdodERvd25WZWNuc2ltO2RpdmlkZW9udGltblJpZ2h0YXJyb2lvY2xuYXA7Y3VyYXJySGNpYXBhY2luc3VjYztyb3BscmFycnNib3hib09wZW5DdXJseVF1b3RlblZEYU5vdFJpZ2h0VHJpYW5nbGVFcXVyaWdodGxlZnRhcnJTdGFydmFyc3Vic2VvdGlsZGJhY2tzaW1lcTt2YXJwaGk7Q2FwaXRhbERpZmRIYXI7b2d0Tm90RVRoZXJlTm90VmVydGljYWxib3hWSE5hY3V0ZWNhcGFuZFN1cGVyc2V0RXFiZXBzaWRlZztTdWNjZWVkc1NsYW50RW9tZWdWb3JkZXJvbmVxdWl2O3BlcnRlbnRvc2E7Tm90RG91YmxlVmVydGljYW5yaW9mY0VtcHR5U21hbGxTcXVhcmU7bW9kZWxzO3ByZWNVcHBlclJpZ2h0QXJyU3F1YXJlVW5pb247bEFyTm90TGVzc0dyZWF0bGF0Tm90Q3JwYVVwYXJyb3dsamNTdWNjZWx0Y2lyO25WRGFzaFpvcFJpZ2h0RG93bnJhdGlvbmFic29saHN4dXRyaTt5ZW5Fc2ltO21hbGU7cGl0Y2hzZWFyaGt1ZmlzVm9Eb3VibGVVcEFycnByb2ZhbGFyaWdobnNob3J0bWlkO2JsYWNrdHF1b1lVY3lpZXhjY3VybHl3ZWRnZWxpbnRlcnNkdWhhTGVmdFRyaWFuZ2xlO25nZXFzbFlJY3NoYURvd25MZWZ0VGVlVmVjdG9yRG93blRlZUFycnVsY3JvbGRydXNoYXI7dXNjcjtzaW1nRW5MZWZ0cmlnTG93ZXJSaWdodEFycm93O3Vyc3Vic2V0bmVxcTtVY3N1cGRzVWdyYWltb2ZlbGluc3Vic2V0bmV6aXJhcnJoa0Fmck5vdEdyZWF0ZXJHcmVhdGVyO0NvbG9uc3NtaWxlTm90SHVtcEVsZWNhcmhvcGx1c2J0d29oZWFkbGVmbGVmdGxlZnRhcnJvd3NWZXJ0aWNhbFNlcGFyYXRkb3VibGViYW5SaWdodGFyVmVydGljYWxTZXBhcmF0b1RjdXJ2ZWFycm93Ym94dUw7Ymlnb3BsU2hvcnRVcEFycnN1Y2NuZXFxbmxFO1VjeTtJdGJpZ29wbHVzO2JpZ3NxY25zaG9ybXN0cG9TY2Fyb2Vxc2xhbnRnaG9va2xlZnRhcGx1c3NpbW52bEFycjtMZWZ0VXBEb3duVmxlZnRsZWZ0YXJyb3dzO0Rvd25MZWZ0VGVlVmVjYmlnc3FjdXF1ZXNiZXRoZXBhcnNyaWdodGxlZnRoYXJwb29ucztjbHVic3VpdFVwREV4cG9uZW50aWFscHJlY2NsYWdyYW54dXRyeGlkb3VibGVvZGJsYWM7YWNpckRhZ2d1Z250cmlhbmdsZWxlZnRucnJhbmdsUmlnaHRDZU5vdExlZnRUcmlhaGFsZXFzbGFudGd0cjtjdXZlZTtOb3RQcmVjZWRlc1NCb3BmO0xlZnRWZWN0b3JCendib3hkcm5taWQ7RG91YmxlTGVWZUxlZnRSaWdodFZlc3VjY2FwcHJsYWduYXBwbGVzZG90b2xhcnJiO2FjdVVuZGVyUGFyZW50aGVndGltZXNmbm9mO2toY3k7bmlzZDtsc2NySWFjdXRlcmlnaHR0aHJlZXRpbXB1bkZpbGxlZFZlcnlTbWFsbFNxdWFEb3REb0ltYWdpbmFyeWZvc3ViclZlcnRpY3JicmtzbHNtYXNobWFsdGVaZXJvV2lkdGhTaHN0cm9rO3ZhcnN1TmVnYXRpdmVUaGluU3JjYXZhcm5vdGhpbmdSaWdodFRyaWFuZ2xlQnJjZWRpcGl0bGVzZ2VVbmRlckJyYWNlO2VjaXI7Tm90UHJlY2VBc3Njb21wZm5wcnVyc3VwbGFycnNpbXJwb2ludGludDtIb3BDY2FpdGlsZGV0cmlhbmdsZXJpZ25idWxlc2NEb3duQnJlUm9oYXJybmU7YW5ncmthcHBhZG93bmRvd25hcnJvd25zaG9ydG1VY2lBdW1hcmtpb3Rsb25ncmlnaHRhcnR3b2hlYUxlZnRBcnJuY29uTHNjcm52aW5maW5jb21tYU5vdFByZWNlZGVzU2xJZG9uZ2U7RG93bkxlZnRSaWdodFZKc2NyaXByb2RoYW1pbEZzY3I7aWNpcmNyYXJyO2xoYXJ1O3dlaWVycHRyaWU7TmVnYXRpdmVWZXJUaWxkZUVib3hVbHByc3N1cHNlbmZydmFyZXBzT3ZlclBhcmVudGhlSnVrY0FncmF2ZTtvbWFjcjtzdWJzdXA7Q2lyY2xlUGxvYW5nO2ZyYWMxcGVybXJBdGFpbGRpYW07TG93ZXJMZWZ0QXJzcXN1YnNqb3BzdXBkb3RuZXNlYVJpZ2h0VmVjdHBlcm1pbGxtb3VzdGFjYm94aGRVbmRlckJyYWNrZXQ7TGVmdERvd25UZWVWZWN0b3JSZXZlcnNlRXF1aWx0ZnI7Y3V3ZWROb3RMZXNzU2xhbnRFY2lyY2xlYXJybWludWxkcmRSQmFyTGVzc0VxdWFsR3JlYXRlTnVvcmRlcm9mSnNlcmN2YXJzdXBzZXRuZWJsYWNrbG96ZW5nZTtzbGFycjtsY2FyUmV2ZXJzZVVwRXF1aWxMZWZ0VGVlQXJyb3duZ2Vxc2xhbnRVb2dvbjthbmdtc2RhYzt2RGFkb3duaGFycHN1YjtqdU5vdFByZWNlZGVzRXF1YWxkaXZvbm1hcmtlcHJvcHRvcm90aW1lc0lncmF2ZTtWYmFyO2Jub1JpZ2h0Q3BlcmlvZGV4cG9uZW50aWF1cHNia2Fyb3VydHByb2ZsZnJhc1RpbGRlRnVzdWJzdXBIc2NyO1ZzY3JsZHJ1bEF0YWlsO2N1cmx5ZXFzdWNjQmFyU2hvcnRVcEFycm92Y3k7Ym90dG9tO05vdFZlcnRpY2FsQmFySGFjZXBsdXM7ZXJEb3RMZWZ0VHJEb3VibGVMb25nUmlnaHRBc3NldG1ub29wZjt6aWdycXVvdE5jZWRpbGFuZDtMb25nTGVmdEFycm9sYnJrc2x1SW9wZkJlY2Fsb25nbWFwc3RvO25yQXJyZHJia2Fyb3c7c3VwaHN1YmNvbXBsZW1lbkhjY2FCZXJubmpjeTtzY3BjdXJseXZlZTtjaXJmbmludEZpbGxlZFZlcnlTbWFsbFNxdWFybWFwc3RvWmV0RXhwb25lRGVsQ2xvY2t3aXNlQ29udG91ckludGVwcmVjYXBwcm94TGNlZGlsT3RpbGRJbXBsaWd0Y2M7aG9va3JpZ2h0YXJyb3c7c3VjYztFcHNpbG9uS2N5aWluZmludXBkb3duYXJzY3NpYmxhY2t0cmlhbmdsZXJJY3k7VkRhc2hndmVydG5lcXFOb3RQcmVjZWRlc1NsYW50RXFaZG90O29kaWxkcnVzaGFDZW50VXBEb3d0aGVyZTQ7YmFja2VwbG9uZ21hcExlZnRVcFRvdGlsZGVyaWdodGFycm93dGFpbDtMZXNzRnVsbEVxdWFsO3VmaXNodFJldnZlZWJhcnJpZ2h0YXJyb3d0bmVBc3VwRUxtUVVPb21pbnV3Y2xBdGFpbHNkb3Q7cnJhcnJhbmdydHZiYW5nO1RSQURFSHVtcERvd25hbmdtc2Q7S29wZlVwZG93bmFyeHJBcnRoZXJIdW1wRXF1YWw7c2ltZTtMZWZ0VXBWZWN0b3JCYXJiaWdvdGltY2FwZG90Q291bnRlckNsb2Nrd2lzZXVkYmxhYztubGVmdHJpZ2h0YUdyZWF0ZXJFcXVMZWZ0VHJpYW5nbGVFcWxlcXFMb25nbGVmdGJsYWNrdHJpTm90R3JlYXRlckdyZWFlcXNZSXN1YnBsSXVrY1JjZWRpYnNvbGhzdXJ0cmlmcHJlY3NpbXN1YnBsdXM7Tm90U3VjY2VlZHNFcXVhbHZhcmVwc2lsb247aHN0cGx1c2NpcjtUaWxkZUZ1bGxFcXVlbHNkb0ZvckF1cGhhcnBvb25sZWZjYXBicmN1cDtsc2FxdW9vZGF1aGFycmZhbGxpbmdkb0xlZnRhVGhpblNwYWNlO2JkcXVzdWNjYXBwcm9KdWtjeXpjYXJIb3Jpem9udGF2YXJyaG87ZmZsaWdsdHJVcEFycmhrb2d0O2RpYU5vdExlc3NURG93blRlZUFycm93U3F1YXJlU3VwZXJSc2NDcm9zY3V2eG90YW5kc2xvSEFSSWFjbmNhcm9ubnJBcmJsYWNrdHJpYW5nbGVsZWZ0O0l1bWxvb3BhcnJvd2xlZnQ7YmFja3ByaW1lcXVhdGVybmlvbk5lZ2F0T29FbXB0eW9yc2xvcGVjdXJ2ZWFycm93cmluc3VwRXNlbWhhaXJzcDt1ZGFycnRyaWFuZ2xlcmlnaHRlbGVnZGxjcm9sb25nbWFwc2lpaWludDtnZ2c7UmNlZGlsO0xlZnRST3RpbG90cmJicmt3c2NyRWZycGxhbmNrc3VibXVsdDtraGNuc29sdGF0aWxkZTtuTGVmdHJibGsxMjtnZWRvdWJsZWJhcndlZGdlUm91bmRJbXBsaWVzY2FyZVZlcnlUaGluU3Bhc2NFUmlnaHRWZWN0b3JCYXhjYXBVcHBlclJpZ2h0QXJyb3c7YWxlZnN5bTtFb2dvbmR0ZG90U3FydDtMb25ncmlnaHRhcnJOb3RDb25ncnVlSW52aXNpYmxlQ1ZlcmJOdGl4Y1pkb3ByZUV4cG9uZW50aVFzZGVnb2ludDt0aGluc3BOb3RSaWdodFRyaWFuZ2xlO3JicmxjeTtOb3RTdWNjZWVkc1NsYWJldHdlRG93bkxlZnRWZWFwaWR2YXJ0ck5vdFNxdWFyZVN1cGVyc2V0RU5vdFN1Y2NlZWRzVGlsZGU7b2RpdkRpYWNyaXRpY2FsRG9MZXNzTGVzcHJlY25hcHByb253YXJocHJFa2NldXBkb3duYXJyb3RvcGNpcjtyaWdodGxlZnRhTmN5T3NsUmlnaHRGbGxlcXNsYW52ZWxsaXA7ZWdyYWxyY29ybmVyO1ByZWNlZGVzVGlsZGVTcXVhcmVJbnRlcnNlY3Rpb25uZGFzanVrY3lnZ3NvcGZOY3k7Y3VkYXJyZ2N5O0VxdWFsVGlvbWlkO1ZlcnlUaExlc3NFcXVhbFN1Y2NlZWRzU2xhR1Q7bWVhc3VOb3RHcnNpbXBsdXM7aWN5O3JiYnJEb3duUmlnaHRUZWVWZWN0b3I7WWZpZXhUcmlwbGVDb3Byb2R1Y3Q7Tm90R3JlYXRlclRpbGRlO2xlc3NzaW1ub3RpYWxlRGFzaERpYWNyaXRpY2FsRG91Ymx2YXJ0cmlhbmdsZXJpZ2RjYXJvYmJya3Ricms7bmlzZEVsZW1ub3RuaTtlZ3M7UHJlY2VkZXNDSGNnZG90O2hiYVJpZ2h0RG91YmxlQnJhbHBoYVJpZ2h0Q2VpbGluZ2hvbXRUcmlwbGhhcmRjeTtkb3BmUmV2ZXJzZVVwRXF1aWxpYnJpdW12eml6c2NyQ09Qc21hc2hwO3VsY29ybjtsZWZ0cmlnaHRoYXJwb29uU3FsdHJQYVJpZ2h0VGVlQXJybGVmdGxlZnRhcnJvb3RpbWVzYW9wZXJwO2ZvcmFSc2h5VGlsZGVFcWlzaW52YmlnY2FwO1VjaXJDY2Fyb25Eb3VibGVMb25nUnN6bGlGaWxsZWRTbWFsbFNxdWFsdGltZGJrYXJvbHVsZWZ0aGFycG9vbnVVbmRlclBhcmVudGhlc2lOb3RSaWdodFRyaWFuZ2xlQmFyYm93dGlCYWNrc2FuZ21zZGFVY2lyYztWdmRhc2hob2FndHJhcHBycmlnaHRoYXJwb29uZG93bk5vdE5lTm90TmVzdGVkTGVzc0xlc3NzdGFpbmZEb3duUmlnaHRWZWN0b3JCYXJuc3FzVW5lb3BmdmFycHJvcHRBcHBseUZ1bmN0aW9DbG9ja3dpc2VDb250b3VySW50ZWdyYWxEb3duUmlnaHRUZWVWZWN0bkxlZnRhck5vdEdyZWF0ZXI7Z3NpbWZmbGxpZztndkRvdWJsZURvd25kaXZpb2xjcm9UZnI7b21lY2lyY2xlYVJpZ2h0RG93blZlY3RvT3ZlckJyYWNrTGVmdFVwVlVuaW9uUEZzUmV2ZXJzcng7QmFyd2VkbmlzO3ByZWNzaVJpZ2h0Rmxvb0l0aWxHcmVhdGVyVGlsZGU7bGFycnRsO3N1Ym5lZGhhcmxOZWdhdGl2ZVRoaWNTcXVhcmVJbnRlcnNlY3Rpb25wYXI7QmFja3Nsa2NlZGlkaGFycjtVcERvd25BcnJsZHF1b3I7dkJQY3licnZnbGFydWxvbmdyaWdodGFycm9lZG90O2xiYXJyO3Byc2lpc2luZG90QmN0cnBleml1ZWdzdW9nb3NldG1pa2hjeVNjZWRpdXVtcHJvZnN1ck5vdEVxdURvdWJsZUNvbnRvdXJVcEFycm93O0xhbnJoYXJ1bGN1cmx5d2VQcmVjZWRlc1RpbERvdW53YXJoa3dlZGdlcXBhcnNpbTt1dHJpTmNlZGlsO2VhY3V0ZTtybGhhcjtSaWdodEFudkRhc2ZyYWM0VHNjcmJhcnZndHJhcFlhY3V0ZTt1YWNEb3VibGVMb25nTGVmdFJpZ2h0QXJOb3RTdXBlcnNldDtpaTtzcXN1YnNldHJzcWI7Y2lyc2NpbnZzaW1ucnRyaTtkaWdhbW1hbGVmdHJpZ2hhbmd6YXJyZnJhYzE2O3V0ZG5hYmxhTm9uQnJlYWtpbmdTcGFjZVJpZ2h0VXBUZWVWZWN0b3JyYXJyYztub3RuaXZiO1hvbGVmdGFycm93dGFpbDtmcmFjNDVDbG9zZUN1SGlsYnVwaGFycG9vbnJpZ0xvd2VyUmlnaHRubGVxc1JpZ2h0VXBWZWNzdXBzZXRlcWxlZnRsWXVtbnZzaXZzdXBuRTt4cmFycjtzc2NyO3NvbGJhcmNvbXBmcmlnaHRyaWdodGFycm93bGJicms7RGlmZmVyZW50aXNvZ3RjY25hdHVyYWxJYVljaXJjO0RhZ2dlQ2xvY2t3aXNlQ29udG91ckluTmVnYXRpdmVNZWxlZnR0aHJlZXRpbWVzTGVmdFRyaWFuZ2xlQlNxdWFyZVN1YnNldEVvcm9yO2RhcnI7Y2N1cHNzb2Rhc2g7WVVmYWxmcmFjMTJkb3RtaW5MZWZ0QXJyb3dSaWdodGFtYWNyTm90U3F1c3Vic2V0ZXE7Q2VudGVyRG91YmxlTG9uZ1JpTG9uZ3JpZ2h0YXJyb2JicmtwZmxlcXNsYW50c2VhcnJ2c3ViRXF1aWxpYnJuYnNwO2JrYXJvdzttaW51c2R1SnVuYXR1ZnJhYzEyO25zdWJzZXRlcXE7QXNzaWdsZWZ0cmlnaHRhcnJvd3Nob3J0cGFybGVmdHJpbnJBcnI7cmhhdXBocnBwb2xucGFOb3RHcmVhdGVyU2xlcmFycmRvd25kb3duYXJycGVybWlsc2ltO2Ria2FnY2lydHdvaGVhZGxlZnRhcmNjZWRyc3F1bztEb3VibGVMb25nTGVmdFJpZ2h0QXRwcmltYXN5bXA7cHJlY3NpbTtubGVzcztJc05vQnJlYUNjb0RDdXBsdXNjaXJ1cFVuZGVyQnJhY2Vob3BmYmFydmVlYW1hY3I7c21hbFVwRXF1aWxzZG90YjtCdW1wZXFDZWRMZWZ0VE5vdFJlbGN5cXN0cmlhbnlVZ05vdFN1Y2NlZWRzU2xhbnRFQ3NwcmVjY3VyS3NjRXhpc3RzO2x0cmljdXBicmNMZWZ0cmlnaHRhcnJvY2N1cHNzbTtFZG90O05vdFN1YnNldDtuc2hvcnRwYXJhbEVtcHR5VmVyeVNtYUNvbnRvdXJJRm9yQWxsO2luZmludGllO1ljeTtsZWZ0cmlnaHRzcXVpUmlnaHREb3duVGVlYXdjb25pdGhpY2tzaVJvdW5kSW1kb3duYXJyb3dsZHJkaE91Z3ZuRXRyaXRpVW1hY3I7Q2F5bGJhcndlZGdlQ291bnRlckNsb2Nrd2lzZUNvblNxdWFyZVN1YnNlcnRyaWx0cmlMZWZ0UmlnaHRuYWN1dGU7Tm90U3VjY2VlZHNFbGJiclhvcHJ0aHJlRWNpcmNMc2hwcmVjYXBwTGVmdFRyaWFuZ2xlQmFyUmlnaHRhcnJvd0NoRGFnZ2VybnN1YnNlR3JlYXRlckVJb2dvbmxuYXB5c2NybGJyYWNrO0RmcjtnZXNkb3R2cHJvcGxhbmt2O0RvdEVHZFJlUmV2ZXJzZVVwRXF1aWxpYnJpUGx1c01pbnVpaW5mc3VwRTtlbXNwUmlnaHRVcERvdXBkb3duYXJyb3dxc2NyY3JvcXVlc3Q7dWxjb3J2emlnemFnO3RoZXRhc3ltO1VvZ29uRGFnQ3JvemhjbWlkY2lyO250cmlhbmdsZWxlZnRlcTtlcHNpbG9ueHVwbGJpZ3ZlZWN1cGNhZXhwZWN0YVNob3J0bmxlZnJhbmdlRmNVcHBlclJpYmlnY3VwTm90Q3VSZXZlckxlZnRUcmlhcmFycmJ2YXJwck5vdFN1YnNldEVxdVVSYXJydGw7TmVnYXRpdmVNZWRpdW1TcGFHZG9FZ3Jhdm5MZWZ0cmlnaHRhcnJvdztkb3duaGxhcDtTcXVhcmVTdXBlcnNldEVxdWFsO0ZmcjtkaWFtb25TdWNjZWVkc1NsYW50RXFpbWFncGFySXVrY3lsYXJycGw7QW9nbm90bml2YTtzdGFyO3NpbXJhcnI7TFROb3RQcmVjZWRlc0Vuc2hvcnRwYXJhbGxlbG11bXNkb3RlcGl0Y2JpZ2N1Y29tbWd0cXVlRGlhY3JpdGljYWxBY3V0ZTtsb29wYXJyb3dyaWdodDtsYXJybHNtdGVzYW5nbXNkYWRzcmFycjtQbHVzTWludXM7dm5zTHByb2ZsaUVhY3V0ZHdhU3VjY2VlZHNUaWxlc3NndHJlYXN0ZUlvdGFEb3VibGVSTGVmdEFuZ3JobztSZXZlcnNlRXF1RG93bkFycm93VXBBY3VsYXJyO2x1cnVoYXJsZXNzZXFnU2NhcmN1ZXByYmNvbmdkc292YW5ncnF1YXRpSnNlcmN5O3N1cGhzb2xSaWdodFRlRG91YmxlTG9uZ1JpZ2hidWxsZXRDY29uaW5MZWZ0YXJyb3h3ZWZsaG9yYmFDYXBpdGFsRGlmZmVyZW50aXJzcXVzcGFEb3duTGVmdFZlY3RvckJhcjtOb3RTcXVhcmVTdWJzZXRFcXVhbGJveEhMZXNzR0NvbnRibGszcm9hd2NOc2NyVGZFbXB0eVZlcnlTbWFsbFNxdWFydGhlcmVmb3JlVG9wZmV4aXN0O2RkO2xmbG9vY2FwYm5zaG9ydEltO1Jhcmx0cXVMYVZiYXVwdXBVcEVxdWlsaWJyaVNob3J0RG9uZWFyaGtyYWNlcGx1c2FsdGxhVWNpcmNSaWdodFVwRG93blZlY3RvcjtIaWxiZXJ0U3BhY2U7cmlnaHRhcnJvdztQcm9kdWN0YnByaW1SaWdodFVwVGVCYWNrc2xhc2g7bWNvZHVhcnI7RmlsbGVkVmVzaGNoY3k7Y2lyY2xlYXJyb3dyaWdodDtjdGRvdGdlcXNscmVnVEhDb25ncnVlYW5nbXNkYnNjcjtsZWZ0dGhyZWV0aW1lcztsYXF1YmxhY2t0cmlhbmdsZWxlZnRsYXF1bztndHJlcXFsZXNzO3BybmFZZnI7SHN0cm9raW1hY3I7SUVmaWxpZztzdWJzZWZyYWMxNTtudTtsYXJybHA7ZGFsZXRoTm90UHJlY2VkZUxlZnRBcnJvd0JhckRvdERMb25nbGVmdGFyV0NjZWRpbWFsZUxlZnRUZWU7cmZsb1JpZ2h0VmVjdG9yO1VwQXJyb3dEb3duQXJyb3d2ZWVlcXBhcmE7Y3V2ZVNjeWNlbnRzdXAxVHNjdXB1cGFycm93cztkd2FuTm90UmlnaHRUemZOb3RTcXVhcmVTdWJzZXRFcWxkc2g7VGlsZGVUbHJjb1plcm9XaWR0aFNwYWNMZXNzRXF1YWxHcmVuZ2Vxc05vdFNxdWFyZVN1cGVyc2VzcXN1YjtVcFRlbGhhcnVsY2N1cHM7U3VwZXJzZXRFcXVhbEF1bWw7Ym94SFVIYXRwc2NyO2hzY3I7Y3VydmVPdm5sdHJpZTtsb25ncmlnaHRhcnJvdztTdWNjZWVkc1Rib3hkUlNxcm9sY0dUbmFuZztuc2NyO25vdG5pdmVmckdyZWF0ZXJFcXVhbGN1cmFjdXJseXZlUmV2ZXJzZUVxdWlsaWJyaWJhY2tlcHNpbGxvbmdsZWZ0cmlnaHRhT3VtbExjYXJvYmxhY2t0cmlhbmdsZWRvd3RpbWVzYmxhcnJ0bFN1YnNldE5vdFRpbGRlRXFjdXJ2ZWFycm93bGVmdHNsQ2xvY2t3aXN5c3RoaWNrYXBwcnhvZG90bmxlZnRyaWdodGFycm93O2NjaXJjO3JkcXVvYmFsc3Ryb2tjb21wbGV4ZXM7Tm90UmV2ZXJmcmFjNzg7Z2ltR2JyZXZlQ2NlZXFzbGFudGd0cmx0aHJwbHVzbW47WmNhcm9ub3JzbG9wZTtzaG9ydHBhTG9uZ2xlZnRyaWdodGFycm11bHRpbUNsb3NlQ3VybHlRdW9vdW1sO0NvdW50ZXJDbG9ja3dpc2VDb250b3VySWx0aHJlRG91YmxlQ29udG91cWZyZWNpTmVnYXRpdmVWZXJ5VGhpblNwYWNTaG9ydFJpZ01lZGl1bVNEaWFjcml0aWNhbEdyYXZUcmlwbWFwc3Rndm5Mb25nTGVmZ3RyZXFxbGVzTm90SHVtcEVxdXVjeTticmV2ZU5lZ2F0aXZlVGhpblNwYWFlbGlnRXhwb25lbnJhbmdkO2hiYXI7U3VwZU5vdExlZnRUcmlhbmdsZUVxdWFub3RpbkU7YW5nbXNkYWF4d3VvZ0xvbmdSaWdodEFycm9FdW1sO2JhcndlZDtSaWdodENlaWxpbm50cmlhbmdsZXJpZ2h0ZVJldmVyc2VzdWNjc2N1cGN1cHl1YW5Eb3duUmlnaHRUZWxhcnJodXVhcnI7bWRhc3BsdXNhY2lOb3RUaWxkZTtiZERvd25MZW5sSGlsYmVkdHJpO2dseWVuZXFvbGNpYmFja3Npb3JkZXJzcXVmO3RyaWFuZ2xlbGVmdGVxO0xvbmdsZWZ0cmlnaG9sYXJyO0RpYWNyaXRpY2FsRG91YmxlQWN1dHJmaXNpZ3JhdmV0aG9MZXNzR3JlYXRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ1JhcnJucGFyYWxMZWZ0cmlDY2Fyb2FuZ2xlcnNhb3VMZWZ0UmlSZXZlcnNlRWxlZnRoYXJwb29uZG93ZWRiTW9kc2N5O1JpZ2h0VXBWZWN0b3JCb21pY3JvbjtkdHJpZjtibGsxNGFjRTtUc3RyZXF1ZXhjYXA7bWFsdDtuZ2Vxc2xhbnduZXF1aXZIc2ZsbE1lbGxpbkF0aWxkdm5zdXA7cGxhbmNraFNxdWFyZG90cGx1cztudkhhcnJCbW5wbGJveFZoUmlnaHRUcmlhbmdDaXJjbGRjYU5vdEdyZWF0ZXJTTm90U3Vic2V0RXFsdGhyZWVMZWZ0RG93bnN1cHBsSW52aU92ZXJCcmFja2V0c3VjY2N1c3VibkVDaXJjbGVQbGxlc3Nkb3RpbmNhcmU7bG5FO2VuSW50ZWdyYWw7UHJlY2VkZXNTbFBoTGVmdFRyaWFuZ2xlRXF1YURpYWNyaXRpY2FsRG91YmxlQWNmZmxsbWRhUmlnaHREb29nb25pdWtjeTtoZWFydHM7RG91YmxlUmlnc29sYjtlc2ltaW50ZVBzY2JveGhEO1JpZ2h0Rmxvb3JNZWRpdW1TcGFjZTtpbnRlcmNhbExzY1BvaW5jYU5vdEdyZWF0ZXJMZXNzbWl2cG5mcjtEb3VibGVMZWZ0UmlnaHRBcnJPZ3JhdmRqY21ERG90O21zY1N1cHNldGV4cGVjTm90U3F1YXJlU3VwZXJzZXRFcXVhbG1sY3A7Q2NlZGlsTGVmdFRyaWFubkxlZnRhcnJvdztEWmNEaWFjcml0aWNhbEFjdXR3ZW5jb25nckF0YUFtYWNvdGltU3VjZ3RybExlZnRhckF1bWxib3hWbm90aW52YmJpZ29kb2Jicmt0YnJraWlvdGE7WHNjcjtyaWdodGxtc3RwQ2xvc2VDdXJseURvdXRkb3Q7eHVwbHV4ckFaZXJvV2lkdGhCdW1waW9nb250cmlhbmdsZXE7UmV2ZXJzZUVxVFNvdGlUYWJyb2JyaztOb3RTcXVhcmVTdWJzZXRFaXVtcnBVbmRlclBhcmVudGhlc2lzRXF1YWxUaWxkZW5zdXBFO2JveHZIO3htYXA7c2VhcnI7bWNvbW1hTm90TGVzc0dyZWFwcmltZTtJbnZpc2libGVUaW1lemN5Tm90R3JlYXRlclRpbGRtbnBsdXNsYXJyZnM7bG1vTmVnYXRpdmVUaGlja1NweXVjeTtsZXNzc2ltO2pmZGl2b254Ym94ZFI7aGtzZWFyb0xlZnREb3VibGVCcmFja2V0O2ZyYWMzOGdhbWFmbnNob3J0cGFyYWxsZXVwdXBhcnJvd2V4Y2ZwYXJ0aW50O3hzcWN1RG93blJpZ2h0VHR3b2hlYWRsZWZ0YXJyb3dwZnJQbHVOb3RFeGlzdHM7bGRxVXNjcjtpc2NyZGl2b254O3NvcGY7SW1wbGRjeTtjbHVic3VpY2lyO0xlZnRVcFZlY3RvckJhcjtzdXBoc3VvZnI7ZGlzaW5sZXFzbGFUY2FyTWludW5yaWdodGFycnZzdURvd25SaWdodFZlbHRxRm9yQWxsTm90SHVtcERvd25IbWFya2VyO2V1cm9VcERvd25BcnJvdzt5dW1sYWdyY3V3ZWQ7ZG90c2dlcXNsYW50O0NhcDtoa3NlYVVtYWNlY2Fyb0NvdW50ZXJDbG9ja3dpc2VDb2xhY3V0ZTtib3hWclZ2ZGFzaDtsZkp1a2ltYWdEb3VibGVMb25nUmlnUmlnaHRBcnJvdztOb3RTcXVhcmVTdWJzZVN1Y2NlZWRzRXF1YWw7RGFsb25nbGVmdHJpZ2h0YXJyb3c7TW9wZlJvdW5kSW1wbE5vdFJpZ2h0VHJpYW5nbGVFcW53YXJyO092ZXJQYXJlbnRoZXNpczt6aWdyYXJyO0RvdWJsZVZlU2M7dXBzaWhQcmVjZWRlc1NvcGFyO2x1cmRzaGFycWludGVwYXJzbDtOb3RMZXNzTGVzWW9wZlJjeTtIaWxiZXJ0U3BhY2xyY05vdFRpbGRlRmludGxFdGFjeWxjdGVtYWNyTm90VmNzdWI7ZXBhcmxvcGFyO2VzaXN1cGRzdWJyYmF5dWNCYXJ3ZXBhcmFsbGVvcmlnb2Y7cHJlYztOb3REb3VibGVWZXJ0aWNhbEJHcmVhdGVyR3JlU3Vic2VuTGVmZmNyYXJOb3RTdWNjZWVkc1RpbGRpbmJhY2twUmlnaHRUZWVWZWN0b3I7c21pZFRjZWRpbDtOb3RDb25ncm5zcHRvcGZvcnRyaXRpbWV4bEFyZ3RybGVzY3BvbFhmcmVscztndDtsb25nbWFwc3RvcmlnaHRsZWNoZWNrbWhzbGFzaDtxdWVzdGVxO3hvZGduZXFxO250aW1DbG9zZUN1cmx5UXVvdEZpbGxlZFNtYWxsVmVydGljYWxyZHF1b3JsYWN1dGVQcmltZTtSaWdodFRlZW11bHRpbWFwO2N1cnZlYXJyb3dsSXRpbGRlO1NIY3lLb3BQcm9wb3JOb3RQcmVjZWRlc0VxdmFydHJpYW5nbGVsZWZ0O3lvcGZsQmFMb25nUmlnTm9uQnJlYWtpblpvcGY7ZGl2aWRlb250dGhlcmVmb3JlO0VncmFZdURvdWJsZUNvbnRvdXJJbnRleHBvbmVudHJzcVRoZXRoa3N3YXJvaWNpcm51bTtleHBlY3RhdGlvbjtzaW1PRU9tZWdhO3h1cGx1cztvc2NyVGFiO2dFO3N1cHN1Yjt2QmFyZHdhbmdsZWxkcnVzb3RSaWdodERvdWJsZXByaW1lc3dhcnI7T3ZlckJyYWNrZW52ckFyckxzdHJva0h1S0pwZXJ0ZW5rO0ZpbGxlZFZlcnlTbWFsbFNxdUxlc3NTZWxsTm90R3JlYXRlckZ1bGxFcXVhY2VkZnJhYzEzO0V1bWxYbmxlcXNsYW50O2Rvd25oYXJwb29ucmlkb3RwbHN0cmFpc3FzdXBzZXR4c2NMZWZ0RG93blZlY0xhcGxMZWZ0VXBEb3dSaWdodERvd25WZWN0aXNpbmRvdDtiZXRhcmFycnc7d2VpZXJzdXdmTm90U3VjY2VlTm90R3JlYXRlckVxR2FtbWFkbnNtaWQ7c3Njcll1bWw7Z2VzZG90b2w7cHJFO05vdExlc3NTbEFncmN3Y29uaW50TGZVcEFycm93RG93UmlnaHRhcmV0YURvdWJsZUxvbmdMZWZ0QXJyb3d0ZWxhc0xlZnRUZWVBUmlnaHRBcnJvd2VxdWlmcmFjMTg7c2VjZHN0cm9rSGlsYmVydFNwYWNlZ3Ryc2lOb3RQcmVjZWRIb252bHRyaWVOZXdMYmFydmVlO0Rvd25MZWZ0bGRyZGhhcmN1cGN1RXBzaWxMbWlkb3Q7c3RhcklvdGE7Ym94VkxuY2VkaWJsYWNrbG96ZW5nZW1pZGRvdDtscnJhdE5vdFN1YnNmZmxkZmlzcnVsdWhhclVwRXF1aWxpc2hjaHhjdXBzcXVhcmY7WWFjYXBjdWFjdXRlUmU7dXNjZG91YmxSaG9SaWdodFVwVGJveGRsO25zaW1lO1BvaW5jYXJlcGxhbkxlZnRSaWdodEFOb25CcnNzdGFyZjtTY2VkaWw7Q29udG91cmNmTm90UmlnaHRUcmlhbmdsZUJhcjtSaWdodFZDYXBpdGFsSW90UmlnaHRWZUx0O3RzaHpIZlJvcGFuZ3J0dmJkSGFjZWtuYXBvS2Zydm5zdWI7YW5nc3R4Y2lob29rbGVmdGFycldlZGdzaW1wbHVzYm94VWZyb1JpZ2h0VXBWZWN0b3JCYXJDZWRpbGxhO2xuYXBwbGVmdGhhcnBibGFja2xEb3VibGVVcERvd25BcnJvcnRyaWxQYXJEc3Ryb2tOZXN0ZWRMZXNtY25wb2xpbnQ7cXVlc3RiaWd0cmlhbmdsZWRvcmNhcm9uO21hcGtoT3Bhc2NDaXJjbGVQbHVzO0xvbmdMZWZ0UlBjc2Nuc2ltc2ltZ0U7bnRyaWFuc3FjYXBzO3NpbXBsdVN1Y2hjbHVic3VlckRvYmV0SnNjU2hvcnREb3duQXJyY3JhcnJiYWNrY0RpYWNyaXRpY2FsRG91YmxlQVRoZXJlZm9ya2FwcERpYWNyaW5wcmN1dWJyY2xlZnRyaWdodHNxb3JhcnJvdGlsZGU7Tm90UmlnaGN1ZXNjcm9wYU9taWNyYXJyYXA7Tm90R3JlYXRlckdyaWdodHJib3h1TENhcGl0YWxEaWZmZXJlUmlnaHRUcmxjZWRpbE5vdFN1cGVyQ2xvc2VDdXJseVF1aWFjdXRlVWFycm9jaXI7dUhhcmxoYXJ1bDtkaWFtb25kc3VpdDtTcXVhcmlnaHRyaWdodGF6aWdyYXJyc21hbGxzZXRtaW51c0xvd2VyTGVmdEFlcHNpbG9Ob3RWZXJ0aWNhbEJhcjtmbHRPQXNjcmNvbXBsZW1lbnRvZGJsWm9TcXVhcmVVbmlvbk5vdG1zTWNsZWZ0YXJyb2JhY2twcmltTm9ueGZsYnJhY2t6aGN5O1dlZ3RxdWVzdDtsb2JSZXZlcnNlRXF1aW9mckdjaXJjO0thcFJzY3JzdWNjbmFwcHJveGdyYXZlO3hoQXJlY29sb25nb25vdG5pdmM7blJpZHJia2Fyb0ltYWdpbnVkYXJOb3RSZHJjb3JuO05vdFN1Y2NlU3F1YXJlU3VwZXJzZXRFcXV0aW1lc2JhSHVtcEVxdWFBdEdyZWF0ZXJGdWxsRXJvcGx1cztwc2NyYm94ZHI7bGVmdHJpZ2h0c3F1aWdhcnJvd0Nmcnpkb3Q7aGFJT2NMZWZ0VXBWZWNjaXJjbGVzc3NpdXBoYXJwb29ucm5wYXJzbExlZnRBbmdsZW1hcHN0b3VwUmlnaHRBbmdsZUJyYWNrZXQ7Ym94dXI7dWNOYWN1dGU7RG91YmxlTGVmdEFycm93Y29weXNkaXNpbjtQaGk7Tm90VGlsZGVFY2lyc2NsZXNjY0NheWxlS2NlZHB1c21hRG93bkJyZXZlcnNxdW9yO3NvZnRjaWlpaW50YWN5O2NvcHlzcjtvaG07ZmVTdWNjZWVkc0VxdW5lZGJzZW1pO2JuZXF1aXY7VGhpY2tTcGFVYXJyb25jYXBDY2lOZWdhdGl2ZU1lZGl1bVNwYWN1cGRvd25hcnJvdztudnNpbTtib3hWcjtsb25nbFNPZm9ya3ZXY2lnaW1lbDtuc3Vwc2V0O2xhY3V0ZG91YmxlYmFyd2VkZ2U7UGx1c01pbnVzamNOb3RHcmVhdGVyU2xhbnRFcXVhbE5vbkJyZWFrdnppZ3pPdmVyUGN1d0Nsb2Nrd2lzZUNvbnRvdWJsYW5rU21hbGxDaXJvcnNsb3NsdXdvcmFwbHVzZW1hbHRlc2VzdWJzZXRVcHBlckxIQVJEY0VtcHR5U21hbHNtYXNocENyb3NzVXBwZXJMZWZ0QXJzdXBuRTtidWxsO2V4cGVjdGF0UmV2ZXJzZUVxdWlsaWJybG9uZ3JpZ3V1YXJkb3duaGFycG9vbnJsRTtwaG1tYXRzbWFsbHNldG1pbnVzO2JveGRyUmFuZztuc3ViZTtlRERvY3N1bGFtYmRzaW1kb3Rjb21wbGV4ZWFscFJpZ2h0RG93blZlY29uaW5zZWN0VXBUZWV5c2NyO1lJY3k7ZXJEb3Q7TGVzc0xlTmNhcm9uO29wZXJwVXBkb3duYXZub3JhckpvcGY7aGtzd2FzdHJhaWdocHNpO2dkb0licHJpbWVOb3RHcmVhdGVyR3JlYXRlcmFncmF2ZXRjYXJvZXF2cGFyTm90RXF1YWxhc3RScmlnTGVmdFJpZ2ZhbGxpbmdkb3RzZXFLYXBwYTtzb2w7VmVyeU5vdEdyZWF0ZXJUcm1TdWNjZWVkWUFjeW52ZGFzaE5lZ2F0aXZlVGhpdm9wZkxsZWZ0YXJyb3c7Z2RvdExlZnRUZWVWZWN0b3I7cHJlY25zYmxhY3N0cmFpZ2h0ZXBzaWxvZnJhYzM0O25lc2l0aGljbmxhcnI7Q3NjZGxjcmluZmluTGVmdEFuZ2xjdXJ2ZWFycm93bGVmdDticHJsZXNzYXBiaWd0cmlhbmdsZWRvd1VhY3V0cmlnaHRhcnJvd2FsZXBQcmVjZWRlc1NsYW50RU1lbGxpSnNlcmxsaFVmcnJjZWl0d2l4Q2FwaXRhc3FzdXA7c2NjbXVsdGltYXBvZHNvbEdyZWF0ZXJTemV0c3JhdW9nb247RmlsbGVkVmVyeVNtYVJvdW5kSW1wbGllcztjdXJyZW47Q29uZGJrYXJvd25hdHVyYWw7ZG90bWludXNPRWxpZ2lmcjtscmNvcnNjc2ltO21vZFRoaW5TcGFjYXBlO2RmcmRvd25kcmRxdWxtaWR2cnRyaTtMb25nbGVmdHJpZ2h0YXJyb0Jlcm5vdWxwcmVjbmVxcUJzY3I7Ym94SERMb3BkZnI7aW9wZlNob3JwcmU7dnNjaW50cHJ0Tm90TmVzdGVkTExlc3NGdWxsRXF1YmN5bnZpbmZuZXNpbTtkaXNpQ2FScmlnaHRhcmNjaXJsYXRlc3J0cmlsdHJpO0VtcHR5VmVyeVNtYWxsU3BsdXNhY2lyTGVzc0xlc3M7VGlsZGVUaWxuZXhpc3RzO2xvbmdsZWZ0cmlnU2hvcnREb3dOZXN0ZWRMZXNzTGVzc05lZ2F0aXZlTWVkaXVtU0VtbGVmdHJpZ2h0c3F1aWdhcnJ1cmNvcnN1cG5FTm90U3VjY2VlZHM7bGVmdGFycm93dGFpdXB1ZXBOb3RSaWdodFRyaWFuZ2xlTEpjUnVsZ3RyZXFsZXNTaG92clJ1bGVEZWxheWVkbndBcnI7amZycmNhcm9uTm90RG9Eb3VibGVSaWdodFRlZTtMYXB1YnJjeWJvY2lyY2xlYXJyb3dyeGNpcmN4b2RvVWdyYXZndmVydmFya2FwbnN1dkJhcjtib3hEcnBhcnNsSGlsYmVydFNwYWxlc2RsdmVMZWZ0QXJyb2lpaURvd25UZWVBTGVmdFZlY3RvT21lZ2FsZGNhO2xlZnRoYXJwb29kaGxlZnRhcnJvd3RhdHdvaGVhZGxlZnRhUmlnaHRUYmxhY2tzcXVhcmV1Z3JhdmVjaXJtaURpZmZuc3Vic2V0O3R3b2hlYWRyaWdodGFybnNob05vdFN1Y2NlZWRzVGlsZGVEWmN5O3VyY29MYW1jb21wO1N1cHNlZXBsdXNMZXNzRnVsY2FwY2N1cGRpbXBzcXN1cE5mcmhrc3dhcm93SW1hY2xlc3NlcWd0cjtTdXA7YmlnY2l0cmxwYXJscnVsbmxlZnRyaU5vdE5lc3RlZExlc3NscGFybHQ7TG93ZXJSaWdodEFHcmVhdGVTaWdtYUdvcGV0dWhhc2hrZ3JlZW5HcmVhdGVyRnVsVXBFcXVpbGlicml1bWJjb2x0Y2lybXNjcnBlTm90R3JlYXRlY3Vkc3F1ZmFwcHJveDt6aGN5dmFyc3Vwc2V0bmVxbGxhcnI7bGFuZ2Ryb3RpbWVzO2xhdGVIb3BmbmxBVXBFdGVscmVscmNvcm5PbWljckFzc2lnbjtsZmlzaHQ7YmxhY2tzbmV4aXN0O2ZvcGZOb3RMZWZ0VHJpYW5nbGVCTG9uZ2xlZnRyaWdjdXJ2ZWFycm93bGVmbWlkZG90cnRyaWx0cm1ucGx1czt1aGFybDtSb3VuZEltcGxpZXJpZ2h0YWZyc2ltO05vdFJldmVyc2VFbGVtZW50d3JlcGFyc2w7cmFjZTtGaGFsZkRvdWJsZUxlZnRzbXQ7bnNxc3VCZXJub3VsbHNlY3Q7S3NjcnZhcnJoZ2FjdXRlO3JlY3Q7Tm90U3FsZWZ0aGFycG9vbmRvd250aGlja3NUaGVjY2VFc05vdFJpZ2h0bGZsb29yQ2lyY2xlTWludXNiZHF1bztJbnZpc2libHJhcnJFb3BmdWxjTGVmdFVwVmVjdG9yQmFtZWF2Y3lEc2NlcmF0cmlhbmdsZXJjdXBkb3R4bEFycmVxc2xhRGVsdGRIYXJEb3RFcXVhcnVsdWhLSmN5bnNob3J0cGFyYWxsZWw7dG9wZmRpdmlkZW9udGlOb3RIdVJpZ2h0RG93blZlY3RvckJhcjtuYXByaXNpbmdkb3RzZXFuYXR1cjtOZWdhdGl2ZVZlcnlUaGluR3JlYXRlclRpRGlmZmVyZW50aWFsbG9uZ2xlZnRVcEFycm93RGF0aWxkV2NpcmM7dmFyc3Vwc2V0c2ltcGxMZWZ0QXJyb3dSaWdodEFycm9Eb3duVGVlQXJtYWNyO0Rvd25MZWZ0VmVjdG9yQkRvdWJsZUxvdHNjU3F1YXJlSW50ZXJzZWN0aW9uO2FjdXRlO25yYXJyO0Nsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhQ2lyY2xlRG93bkxyY3VidGhlbHRpbWVzTGFtYmRhSG9yaXpvbk5vdENvbmdydWVudG9ncmF2YWVsaWp1a1N1cHNFQnVtcGVyaW5nTGVmdERvd25WZWN0b3JCYXJBYWN1dGU7Ym90dG9tY3VybHllZGRvdHNyZGNhO0JhcndEY2F0d29oZWFkbGVmdEludGVyc2VjdGlsbnNUaGlja1NwYWNlb2xhbHZuRTtsc3F1bGVmdHJpZ2h0aGFycG9vbnNsYXJydGlxdWVzdHRoZXJlNHRmTm90SHVtcERvd25IdW1wO3l1bW5vdGluRXF1YXRlcm5pb25MZWZ0eW9wZjtOb3RMZXNzVGlsZGJsazM0O0xjYVRoZXRhaW50cHJ0cmlkb3Q7bGNzdWNjYUNsb3NOb3RTdWJzZVJvdW5kd3I7c2ltZ2xzcXVvO05vdEVsZUNvbGRpYW1vbmRzdmFyc3Vwc2V0bmVxcU5vdFJpZ2h0VHJpYW5nbERvdWJsZVZzdWNjbmFwcE5KY29zbGFzaHV3YW5nbGVsb29wYXJyb3dyaWdodFVuZG9kb1phY3VJc2NyO29vcE9wZW5DdXJseVF1b3RlO2hlcHNpbE5vdEdyZWF0ZXJMZXNFcXVhbFRjeW5zcGFhZ3JhdnJvYW50YXJQb3Bmc2lndXB1cGFyclVncmF2ZXN1cEpmR3JlYXRlckdyZWF0ZXJyZWN6b3BmO01hSWNsRWdmamxpZztOb3REb3VibGVWZXJ0aWNkb3VibGViYXJ3ZU5vdFN1Y2NlZWRzU2xhbm53YXJyb3c7UmFjdXRlZ25zaW07YW5nbXNkYWZTaG9ydERvd25BSW52aXNpYmxlVGltZXNtbnBsdWJyY2lyY2x4b2x0cmlmdXBoYXJwb29ucmlTcXVhcmVJbnRlcnRyaWFuZ2xlbGVmdGVJbnZpc2libGVDb21zdW5nO3ZhcnRyaWFuZ2xlcmljZnJob29rc3FzdXBzZXN1cDM7bGJicmtWZXJ0aWNhbFNDaXJjbGVNaVJldmVyc2VVcEVxdWlsaWJQcmVjZWRlc1RpdXBkb3duZGFsb3NvbDt0b3Bmb1N1cGVyc2V0SW52aXNpYmxlQ29tbWJveFZSO2N1cmx5d2VkZ2VsbW91c3Rib3RMZXNzRnVsbEVmcm93bm5ic2xlc3Nkb3Q7bmxlcVpIY3ljZG90bmFwaWRleGNsO21ERGNpcmM7SW1wTGVmdEFycm93UmlnaHRBcnJvd0xlZnRVcFZlY3RzZnJvd2RvbGxhcjtkZG9MbGVyQlZlcnlUaGlwcmVjY3VybEl1a2N5O2FlbG52bGU7c2V0bWluTGVmdFVwRG93blZlc3NtUnVsZURlTm90Q29uU3Vic2V0RUNlbmNpcnNnZXNkYXN5bXBvbXlpY3lUU0hjeTtPcGVuQ3VybHlEb3VicGl0Y2hmdGhlcmV0aG9ybnN1Y2Nuc2ltZG91c3dhY2hjU3Vwc2V0O0RvdWJsZURvd2RvdHBsdXNyQXNhRGlhY3JpdGljYWxHckxlc3NTbGFudEVxdWFsY2VtcmF0aW87UG9pbmNhckNybG96ZW5nZTtTc0RpYWNyaXRpY2FsR3JhckhhcjtzdHJhaWdodHBoaXJiYXJsb29wYXJyb3dyRG93blJpZ2h0VGVlVmVjU2hvcnRMZWZ0QXJTdXBuTHR2RFNjTGVmdEFycm93QlZlcnRpY2FsTGluZTtndmVydGZhbGxpbmdycGFyZ3Q7dmFyZXBzaWxvbm5ndHJRb2RlbXB0RXNpbWVsO0ZvdXJpZXJ0b2RzQmVybm91Y29weTtuY2V2YW5ncHJvZmFsYXJzcGFkbGdEb3duUmlnaHRWZWN0bnZsdHJpZTtsZWZ4c3FjdXA7ZW1zcDFBbmROb3RFbGVtZXZhcnBoaURhcnI7bmNhcm9uO2RlbHRhVmVydGljYWxUaWxkZTtSaWdodFVwVmVjdG9yWXNjdHBjaGlzcGFkZXN1aXRsb2FuZ3NjdHdpeHQ7UmlnaHRWZWN0b2JhcndlZGdQcmVjZWRla29wUmlnaHRhcnJvdztjdXBicmNhcHNoYXJ0aGV0YTt4b3RpbURvdWJsZUxvbmdMZWZ0Umllc0ltYWdpbmFDb3VudGVyQ2xvY2t3aXNlQ05vbkJyZVJpZ3N1YnN1Yk5vdEh1bW9wbHVzSGlsYmVydEVtcHR5U25MZWZ0cmlnaHRhZWNhclVwQXJyb3dCYXJOb3RMZXNzVGlsZGVVcERvd25EaWZoYXJkY3libGFja3NxdWFyZTtHY3lvZ3JvbWljcm9ucmhhcmFuZ3J0O0tvcGY7RGlhbURvdWJsZURvZG9wZjtFYWN1dGVMZWZ0VXBEb3duVmVjdG9yO29jaXJjO1pjYXJvZGFic29saHN1Yjtwc2lyZHF1bztsZnJTcXVhcmVTdWJsb2Fqc2VyY3k7b2FjdXRlO2N1cmx5RWNhcmhvb2tyaWdodGFyclNob3J0TGVOb3RFcXVhbDtGc2NIQU91bWw7UmlnaHRBcnJvd0Jhck5lZ2F0aXZlTWVkaXVtU3BNaW51c1BsdUd0O2JpZ2NhcE9FbGd0cmRvdDt3cmVhdWN5VXBwZXJSaW5maW50aWVzd253YXI7U2hvcnRSaWdodEFyckVtcHR5VmVyeVNtYWxsU3F1YXJlO3ByZWNuc2lwcmVjbmFwcHJEY2Fyb247YW5nbXNkYWJlcXZhcFByZWNlZGVzU2xhbnRFcXV1cnRyY2Fyb25vZHNvbGRSaWdodFVwRG93U2Npc1ZlcnRpY2FsQmFTYWN1dGVDYXBpdGFsRGlmcmFjNDU7aGFycnduYXBpZDtVb3BmeGhhcnJidW1wRTtuTGVmdHJpZ2hHcmVhdGVyU2xhbnRFcXVjbHVicztTaXVicmdlc2RvdG9jb3BFbWFjcnJBck1vcGY7TGVmdERvd25UZWVWZUxlc3NFcXV0d2lPZGJsYWM7bnNxZ3ZlcnRuZXFxO3Byb3A7RG91YmxlVXBEb3duTGVzc1RpbGRMZWZ0VGVlQXJyZEFybnByZWNsZXNnZXM7YmxhY2t0cmlhbmdsZWxlZnRyaXBsdWhvbXRodEFuZDtsY3ViO0xlZnRyaWdodGFycmxsYUludGVncmFsbm90aW52b3JzbHRpVmVyeVRoaW5Ob3RSaWdodFRyaWFuZ2xlQmFEb3VibGVMb25nTGVmdERpZmZlcmVudGJvcGY7bGRjYUhBUkREb3duTGVmdFJpZ0Rvd25MZWZ0VGVaZXJvV2lkdGhTcGFjZWxuZTtSaWdodFVwRG93blJpZ2h0VXBUZWVWZWN0c3NlaW1hZ2xpblFzY3I7ZGRhZ2dlcjtOZWdhdGl2ZU1lZGl1bVNwYWNlO21hcHN0b2RvR2FXZWRnZTt4Y2lybHRsYXJzdXAxO3huaXNybW91cmFjbGxhcmJwbnNwYXJOb3RUaWxkZUZ1bGxFcXVhbExhcGxhY2V0cm5zdXBlbmV4aXNoc2xhc3ZhcnRyaWFvZGJsYWNibGsxMnJwcG9saW50ZnJhYzEzYm94dmxsc2FxTmVzdGVkR3JlYW5nbWRmaXNodGJzY3JudkhhcnI7bnZhcHN1cG1uc210aGV0YXJubWlkc2hhcnBScmlnaHRhcnJwcmltZXM7b2Fjbmdlc2NvbG9ucmRjYUxvbmdMZWZ0UmlnaHRBcnJvd0VUSDtscmhhcmlnaHRoYXJwT2NoY2lscnRyaWVxdnBhcnNsO0Nsb3NlQ3VybHlEb3VibGVRdWNvcHJvZGdlc0RzdHJvQ29wcm9UaGVyZWZveGxhcnJhYWN1dGVucHJEb3VibGVMZWZ0VGVMZWZ0VGVlQXJyb3c7c3VicGx1SW1hY3JRb3BlbXNwMTRib3h1bHNpZ21hO09wZW5DdXJseURvdU1vcHhkUmlnaHRUZWVWZWN0b3ZiYXBpdGNoZm9PcGVuQ3VybHlEb3VibGVRdW90ZXVwaGFycG9vbmxlZnQ7Tm90TmVzdGVkTGVDY29uaW50bnVtZXJvemFjdXRlO1JpZ2h0RG93blRlZVZlUm91bmRJSlphY3V0ZTtnbmVxO25MZWZ0cmlnaHRhcmJrdHdvaGVhZHJpZ2h0YXJyb2hvb2tyaWdlYWN1TWN5UmlnaHRhcnJvTGNhcm9uO25lYXJyUmlnaHREb3VibGVCcmFja2V0SGlmZmRvd25oYXJwb29ubGVic2VJbXBsaWVzO2xicmtzbGNpcm1pZEN1cENFY3lwcmVjbnNpbWd0cmFycm5MZWZ0cmlnaHRnbkJhY2tzbGFzbG5hTmNhcm9uQ291bnRlckNsb2Nrd2lzbGRxdW87bG93YmFycm9hcmlnaHRzcXVpZ2Fycm93O2ZyYWMyNWJjb252c3VibkVsdHJQYXJsdXJ1aGFyO01lbGxpbnRyZjtzdW5Ob3ROZXN0ZWRMZXNtRERvaW1vTG9uZ2xlZnRhcnJvdztudkRzcXVhcnN1cGxhcnI7Y2lyY2xlYXJyb3dyaU5vdFN1Y2NlZWRzU2xhbnRFcXVhbDtucnRyaW52ckFycjtibGszNHZhcnRyaWFuWmNhcnVwc2k7VHJpbW9kZWxzbWVwYXJzbDthbmdtc2RhaDtsbVVwZG93bnZhcnRoZXRhO2Rvd25kb3duYXJyb3dzO3ZlbGxkakRvdWJsZURvdFJpZ2h0RG93blRldGhrc0hvcml6b250YWxMaW5lZWc7RG93bkxlZnRSaWdodFZlRW1wdHlWZXJ5U21hbGxTcXVhcmVsYXJyYmZpb3JsaExhcGxhY2V0RG91YmxlVXBzdWNOb3RMZWZ0VE5vdEdyZWF0ZXJUaWxOb3RDb25nTm90TkVsZW1lbnQ7cmlzaW5nZG90c2VxO1NxdWFyZVNUc3RaZG90bGVmdHJpZ2h0YXJUaGlja1NwYWNFcHNpbGVzc2J1bXBlcVljaXJjYWdyYWVxY29Eb3VibGVVcEFycm9UcnhjYVJhUmlnaHRBcnJvd0JhU2hvcnRMZWZ0Z2JEb3VibGVDb250b3VySW50ZXBvaW50aXZBcmhlYXJ0c3VOb3RHcmVhdGVyR3JlTGVmdEFycm93UmlnaGFyY3JhUmlnaHRUcmlhbmdsZUVxdWFsO2NhcGJyY3RyaWFuZ2xlO1BhcnRpYWxEbGVmdGFyckRKRmZyWW9wZjt1cmNvcm5ucmFycnBzcmZyaXNpbjtBcHBsc21lcGFyc2xwdW5jZGlhbW9uZDtsYnJrc2xkO2VxdWxvbmdyaWdodGFycm93Ym5vdDtHbG9uZ2xlZk5KY2RDaXJjbGVNaW51RW1wdHlWZUxhcGxhY2V0cmY7Y3N1cDtMSmN5O2xvbmdsZWZ0YXJyb3djZWRpc3ViZWRvdDtsb3BhRG91YmxlTGVmdFRsb3plbmdlTm90TmVzdGVkR3JlYXRUUnZkYW50cmlhbmdsZXJpZ2hMb25nbGVmdHJpZ2h0YXJ2YXJyZWFzdGxlZnRyaWdodHNxdWlnYXJyb2JveGJob29rbGVmdGFycm93O2NpcmZuaW9lbGlzdXBsYXJuYnVtcGVOb3RMZXNzRXF1YVNxdWFyZUludGVyc2VjdFJpZ2h0QXJyb3dMZW1wdHlzZXJhcnJwbDtWZGF4b3RpbWV0YXJneXVjeXRoZXJlZm5vdGluZG9oeXBoZW47U29wZmRyYmthckJzb3Bhck92ZXJCcmFjbGVmdGhhcnBvb25kb3duO0Rvd0FvcGY7cHJvcHFpbnQ7aGFpcnNnRWxibm90TGVmdFVwVGVlVmVudHJpYW5vdGludmI7Z3RyZXFsZXplZXRjdXBzO3N1cHNpbTtVc2NyTG9uZ3JpZ2h0YVBvaW5jYXJlb3I7VXJpVWJyZXZkaWFtcztaY2lzaW5FO2xzaXZmcjtud25ld3NMZXNzR3JiaWdzdG9taWNycHJpbWVzdmVsbGFycnBpc2ludjtEb3VibGVSaWdodEFycm5nZXFlcXVpdkRzb2Z0Y3k7blJpZ2hqc2VyY3lSYW5nYXdjb1VwcGVyUmlnaHRBcm9yaWdvZm5MdDt1ZmlzaGxhbmdWZXJ0aWNhbExpU2NlZGxvb3BhcnJvd3JpbHQ7bnZpbmFjdXRldWJyZXZlO1ZlZVlhY3V0ZWduc2lkd2FuZ2xMY3lPcGVuQ3VybHlEY2FwYmxhY2tzcXVhc3Vwc3VwO2xvemY7TGVmdFVwRG93blJpZ2h0RG91YmxlQnJhY2tldDtyZWFscGF6b3BMZWZ0Rmxvb3JpZ2h0cmlnaHRhcnJvd3NjaGVja21hcmtzaG9ydHBhcmFsbE9kYmxhY05vdFByZWNlZGVzU2xhbnRFcXVhbDtkb3RlcWRvUnJpZ2h0YXJyb2hvYXJyRG90RXF1YWxiYWNrc2ltO2ZyYWM1NkxlZnRWZWNsZWZ0aGFycG9vbmRvd09kYmxUaGVybmJzcHBhcmFsbGVsO01lZGl1cHJhcGJsYWNrbG96TGxlZnRhcnNtc3Bhcjttc3RBYm11bHRuYnVtdmFya2FMZXNzR3JlYWVtcHRpbmN4cmFyQ2NpcmNiZXBza3NFcXVpbGlicml1dUhhcjtwbHVzbWNzdXBlO1RyaXBsZURpbWFGaWxsZWRTbWN1cmFybnRyaWFuZ2xlbGVOb3Q7cmFycnRTSENIZ2ZyO2xvc29sTm90U3VjY2VlZHNTbGFudEVxdWVyRGdpbWVsU3F1YXJlVW5Eb3duYXJyb3c7ZGlhbW9uZGFsY2VtcHRhcmluRXhpc3VwZG93bmFycnN1YmRMZXNzRnVsbEVxdWFsYXdjb25pbnRsb29wYXJyb3dsZWxsQW1hWWNpblJpZ2h0YXJyb3d0cmlwTGVzc1NsYW50RWxoYmxycHByaWdodGxlZnRoYXJwb3djaXJjc3VjY2FwcHJveFVwcGVyTGVmdEFycm93O3JhY3V0ZWVsaW50ZXJCZXJhcnJscDtydGhyYXRpb25hbHM7Ym94ZGxBY2lyYztnb3BmO2p1a2NTdW1mZmlsaVdm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JyB0eXBlPSkAAADvVBQABgAAAPVUFAAHAAAA/FQUAAEAAAAvaG9tZS9iLWZ1c2UvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zdHJpbmdfY2FjaGUtMC44LjIvc3JjL2F0b20ucnMYVRQAYAAAAAcBAAAfAAAAGFUUAGAAAAAFAQAALwAAAFNvbWVgAAAABAAAAAQAAABhAAAATm9uZXN0YXRpY2lubGluZWR5bmFtaWNBdG9tKCcnIHR5cGU9KQAAAMNVFAAGAAAAyVUUAAcAAADQVRQAAQAAAC9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3N0cmluZ19jYWNoZS0wLjguMi9zcmMvYXRvbS5yc+xVFABgAAAABwEAAB8AAADsVRQAYAAAAAUBAAAvAAAAe306AGxWFAABAAAAbVYUAAIAAACwVRQAAAAAAFF1YWxOYW1lcHJlZml4AABjAAAACAAAAAgAAABkAAAAbnMAAGUAAAAIAAAACAAAAGYAAABsb2NhbAAAAGcAAAAEAAAABAAAAGgAAABBdHRyaWJ1dGVuYW1lAAAAaQAAABgAAAAIAAAAagAAAHZhbHVlAAAAZwAAAAQAAAAEAAAAWwAAAGlubGluZW93bmVkc2hhcmVkVGVuZHJpbDw+KDogAAAAHVcUAAgAAAAlVxQAAgAAACdXFAACAAAAKQAAAERXFAABAAAAb25lLXRpbWUgaW5pdGlhbGl6YXRpb24gbWF5IG5vdCBiZSBwZXJmb3JtZWQgcmVjdXJzaXZlbHlQVxQAOAAAAE9uY2UgaW5zdGFuY2UgaGFzIHByZXZpb3VzbHkgYmVlbiBwb2lzb25lZAAAkFcUACoAAABjYWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlL3J1c3RjLzkwYzU0MTgwNmYyM2ExMjcwMDJkZTViNDAzOGJlNzMxYmExNDU4Y2EvbGlicmFyeS9zdGQvc3JjL3N5bmMvb25jZS5ycwDvVxQATAAAAJUAAAAyAAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvbGF6eV9zdGF0aWMtMS40LjAvc3JjL2lubGluZV9sYXp5LnJzAABMWBQAZgAAAB4AAAAQAAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcGFya2luZ19sb3RfY29yZS0wLjguNS9zcmMvcGFya2luZ19sb3QucnMAxFgUAGsAAABTAQAAFwAAAMRYFABrAAAAbgEAABcAAABrAAAACAAAAAQAAABsAAAAbQAAAG4AAAAIAAAABAAAAG8AAABQYXJraW5nIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS9ob21lL2ItZnVzZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3BhcmtpbmdfbG90X2NvcmUtMC44LjUvc3JjL3RocmVhZF9wYXJrZXIvd2FzbS5yc5pZFAByAAAAGgAAAAkAAACaWRQAcgAAAB4AAAAJAAAAmlkUAHIAAAAiAAAACQAAAJpZFAByAAAAJgAAAAkAAACaWRQAcgAAACoAAAAJAAAAL2hvbWUvYi1mdXNlLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcGFya2luZ19sb3RfY29yZS0wLjguNS9zcmMvcGFya2luZ19sb3QucnMAXFoUAGsAAAAyAQAADAAAAFVURjhWYWxpZGF0aW9uRmFpbGVkT3V0T2ZCb3VuZHN0ZW5kcmlsOiBvdmVyZmxvdyBpbiBidWZmZXIgYXJpdGhtZXRpYwAAAPdaFAAmAAAAdQAAAAQAAAAEAAAAdgAAAHcAAAB4AAAAdQAAAAQAAAAEAAAAeQAAAHoAAAB7AAAAdQAAAAQAAAAEAAAAfAAAAH0AAAB+AAAAAGFzc2VydGlvbiBmYWlsZWQ6IG1pZCA8PSBzZWxmLmxlbigpdQAAAAQAAAAEAAAAfwAAAGNhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWUAcFsUAAAAAABsaWJyYXJ5L3N0ZC9zcmMvaW8vYnVmZmVyZWQvbGluZXdyaXRlcnNoaW0ucnMAAADYWxQALQAAAAEBAAApAAAAdW5jYXRlZ29yaXplZCBlcnJvcm90aGVyIGVycm9yb3V0IG9mIG1lbW9yeXVuZXhwZWN0ZWQgZW5kIG9mIGZpbGV1bnN1cHBvcnRlZG9wZXJhdGlvbiBpbnRlcnJ1cHRlZGFyZ3VtZW50IGxpc3QgdG9vIGxvbmdpbnZhbGlkIGZpbGVuYW1ldG9vIG1hbnkgbGlua3Njcm9zcy1kZXZpY2UgbGluayBvciByZW5hbWVkZWFkbG9ja2V4ZWN1dGFibGUgZmlsZSBidXN5cmVzb3VyY2UgYnVzeWZpbGUgdG9vIGxhcmdlZmlsZXN5c3RlbSBxdW90YSBleGNlZWRlZHNlZWsgb24gdW5zZWVrYWJsZSBmaWxlbm8gc3RvcmFnZSBzcGFjZXdyaXRlIHplcm90aW1lZCBvdXRpbnZhbGlkIGRhdGFpbnZhbGlkIGlucHV0IHBhcmFtZXRlcnN0YWxlIG5ldHdvcmsgZmlsZSBoYW5kbGVmaWxlc3lzdGVtIGxvb3Agb3IgaW5kaXJlY3Rpb24gbGltaXQgKGUuZy4gc3ltbGluayBsb29wKXJlYWQtb25seSBmaWxlc3lzdGVtIG9yIHN0b3JhZ2UgbWVkaXVtZGlyZWN0b3J5IG5vdCBlbXB0eWlzIGEgZGlyZWN0b3J5bm90IGEgZGlyZWN0b3J5b3BlcmF0aW9uIHdvdWxkIGJsb2NrZW50aXR5IGFscmVhZHkgZXhpc3RzYnJva2VuIHBpcGVuZXR3b3JrIGRvd25hZGRyZXNzIG5vdCBhdmFpbGFibGVhZGRyZXNzIGluIHVzZW5vdCBjb25uZWN0ZWRjb25uZWN0aW9uIGFib3J0ZWRuZXR3b3JrIHVucmVhY2hhYmxlaG9zdCB1bnJlYWNoYWJsZWNvbm5lY3Rpb24gcmVzZXRjb25uZWN0aW9uIHJlZnVzZWRwZXJtaXNzaW9uIGRlbmllZGVudGl0eSBub3QgZm91bmRFcnJvcmtpbmQAAHUAAAABAAAAAQAAAIAAAABtZXNzYWdlAHUAAAAIAAAABAAAAIEAAABLaW5kT3Njb2RlAAB1AAAABAAAAAQAAACCAAAAgwAAAAwAAAAEAAAAhAAAACAob3MgZXJyb3IgKXBbFAAAAAAAZF8UAAsAAABvXxQAAQAAAGFscmVhZHkgYm9ycm93ZWR1AAAAAAAAAAEAAAAEAAAAbGlicmFyeS9zdGQvc3JjL2lvL3N0ZGlvLnJzAKhfFAAbAAAA6gIAABQAAABmYWlsZWQgcHJpbnRpbmcgdG8gOiAAAADUXxQAEwAAAOdfFAACAAAAqF8UABsAAAD7AwAACQAAAHN0ZG91dAAAhQAAAAwAAAAEAAAAhgAAAIcAAACIAAAAZm9ybWF0dGVyIGVycm9yACxgFAAPAAAAKAAAAIUAAAAMAAAABAAAAIkAAACKAAAAiwAAAGxpYnJhcnkvc3RkL3NyYy9zeW5jL29uY2UucnNgYBQAHAAAANAAAAAUAAAAYGAUABwAAADQAAAAMQAAAGxvY2sgY291bnQgb3ZlcmZsb3cgaW4gcmVlbnRyYW50IG11dGV4bGlicmFyeS9zdGQvc3JjL3N5bmMvcmVtdXRleC5ycwAAAMJgFAAfAAAAkQAAAA4AAABtZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAAD0YBQAFQAAAAlhFAANAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJzKGEUABgAAABVAQAACQAAAGxpYnJhcnkvc3RkL3NyYy9wYW5pY2tpbmcucnNQYRQAHAAAAEECAAAeAAAAUGEUABwAAABAAgAAHwAAAIMAAAAMAAAABAAAAIwAAAB1AAAACAAAAAQAAACNAAAAjgAAABAAAAAEAAAAjwAAAJAAAAB1AAAACAAAAAQAAACRAAAAkgAAAHUAAAAAAAAAAQAAAJMAAABVbnN1cHBvcnRlZEN1c3RvbWVycm9yAAB1AAAABAAAAAQAAACUAAAAVW5jYXRlZ29yaXplZE90aGVyT3V0T2ZNZW1vcnlVbmV4cGVjdGVkRW9mSW50ZXJydXB0ZWRBcmd1bWVudExpc3RUb29Mb25nSW52YWxpZEZpbGVuYW1lVG9vTWFueUxpbmtzQ3Jvc3Nlc0RldmljZXNEZWFkbG9ja0V4ZWN1dGFibGVGaWxlQnVzeVJlc291cmNlQnVzeUZpbGVUb29MYXJnZUZpbGVzeXN0ZW1RdW90YUV4Y2VlZGVkTm90U2Vla2FibGVTdG9yYWdlRnVsbFdyaXRlWmVyb1RpbWVkT3V0SW52YWxpZERhdGFJbnZhbGlkSW5wdXRTdGFsZU5ldHdvcmtGaWxlSGFuZGxlRmlsZXN5c3RlbUxvb3BSZWFkT25seUZpbGVzeXN0ZW1EaXJlY3RvcnlOb3RFbXB0eUlzQURpcmVjdG9yeU5vdEFEaXJlY3RvcnlXb3VsZEJsb2NrQWxyZWFkeUV4aXN0c0Jyb2tlblBpcGVOZXR3b3JrRG93bkFkZHJOb3RBdmFpbGFibGVBZGRySW5Vc2VOb3RDb25uZWN0ZWRDb25uZWN0aW9uQWJvcnRlZE5ldHdvcmtVbnJlYWNoYWJsZUhvc3RVbnJlYWNoYWJsZUNvbm5lY3Rpb25SZXNldENvbm5lY3Rpb25SZWZ1c2VkUGVybWlzc2lvbkRlbmllZE5vdEZvdW5kb3BlcmF0aW9uIHN1Y2Nlc3NmdWx0aW1lIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtM2QUACUAAABsaWJyYXJ5L3N0ZC9zcmMvc3lzL3dhc20vLi4vdW5zdXBwb3J0ZWQvdGltZS5ycwBgZBQALwAAAA0AAAAJAAAAY2Fubm90IHJlY3Vyc2l2ZWx5IGFjcXVpcmUgbXV0ZXigZBQAIAAAAGxpYnJhcnkvc3RkL3NyYy9zeXMvd2FzbS8uLi91bnN1cHBvcnRlZC9sb2Nrcy9tdXRleC5ycwAAyGQUADYAAAAUAAAACQAAAG9uZS10aW1lIGluaXRpYWxpemF0aW9uIG1heSBub3QgYmUgcGVyZm9ybWVkIHJlY3Vyc2l2ZWx5EGUUADgAAAAQAAAAEQAAABIAAAAQAAAAEAAAABMAAAASAAAADQAAAA4AAAAVAAAADAAAAAsAAAAVAAAAFQAAAA8AAAAOAAAAEwAAACYAAAA4AAAAGQAAABcAAAAMAAAACQAAAAoAAAAQAAAAFwAAABkAAAAOAAAADQAAABQAAAAIAAAAGwAAAA4AAAAQAAAAFgAAABUAAAALAAAAFgAAAA0AAAALAAAAEwAAAPVeFADkXhQA0l4UAMJeFACyXhQAn14UAI1eFACAXhQAcl4UAF1eFABRXhQARl4UADFeFAAcXhQADV4UAP9dFADsXRQAxl0UAI5dFAB1XRQAXl0UAFJdFABJXRQAP10UAC9dFAAYXRQA/1wUAPFcFADkXBQA0FwUAMhcFACtXBQAn1wUAI9cFAB5XBQAZFwUAFlcFABD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CzEEewE2DykBAgIKAzEEAgIHAT0DJAUBCD4BDAI0CQoEAgFfAwIBAQIGAQIBnQEDCBUCOQIBAQEBFgEOBwMFwwgCAwEBFwFRAQIGAQECAQECAQLrAQIEBgIBAhsCVQgCAQECagEBAQIGAQFlAwIEAQUACQEC9QEKAgEBBAGQBAICBAEgCigGAgQIAQkGAgMuDQECAAcBBgEBUhYCBwECAQJ6BgMBAQIBBwEBSAIDAQEBAAILAjQFBQEBAQABBg8ABTsHAAE/BFEBAAIALgIXAAEBAwQFCAgCBx4ElAMANwQyCAEOARYFAQ8ABwERAgcBAgEFZAGgBwABPQQABAAHbQcAYIDwAABBtI7SAAsI8EgQAPxIEAAA3umCgAAEbmFtZQHT6YKAAIoFAANub3cBSmh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OnN0ZXA6OmgxZmEzOTQwZjUwMGM4NTEyAj5odG1sNWV2ZXI6OnRva2VuaXplcjo6VG9rZW5pemVyPFNpbms+OjpzdGVwOjpoMDlkZmZiOWFlNjNiOWY1OQODATxodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+IGFzIGh0bWw1ZXZlcjo6dG9rZW5pemVyOjppbnRlcmZhY2U6OlRva2VuU2luaz46OnByb2Nlc3NfdG9rZW46OmhhZjRkMmUxYjlhZDNiMWY1BCdjb3JlOjpzZXJpYWxpemVfbm9kZTo6aDA4MGIyYWJiN2JmYzU0NjIFSGNvcmU6Om51bTo6Zmx0MmRlYzo6c3RyYXRlZ3k6OmRyYWdvbjo6Zm9ybWF0X3Nob3J0ZXN0OjpoZjUxODAxMGQ1NmUxNDM2YQY9aHRtbDVldmVyOjp0b2tlbml6ZXI6OlRva2VuaXplcjxTaW5rPjo6ZW5kOjpoZmFlYWFiNjkzYmE3Y2NlZAdFY29yZTo6bnVtOjpmbHQyZGVjOjpzdHJhdGVneTo6ZHJhZ29uOjpmb3JtYXRfZXhhY3Q6Omg2ZTRiMGY5OGE3ZDFjN2RlCFVodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+OjphZG9wdGlvbl9hZ2VuY3k6OmhhYWM2ZjY2OGQ2ZjljNzk3CTpkbG1hbGxvYzo6ZGxtYWxsb2M6OkRsbWFsbG9jPEE+OjptYWxsb2M6OmgyMWNkMDgyMzk2NTIzZDkyCjR0ZW5kcmlsOjpzdHJlYW06OlRlbmRyaWxTaW5rOjpvbmU6OmhjOWUyNzkyMGNiZjkzNjUwC4QCYWxsb2M6OmNvbGxlY3Rpb25zOjpidHJlZTo6bm9kZTo6SGFuZGxlPGFsbG9jOjpjb2xsZWN0aW9uczo6YnRyZWU6Om5vZGU6Ok5vZGVSZWY8YWxsb2M6OmNvbGxlY3Rpb25zOjpidHJlZTo6bm9kZTo6bWFya2VyOjpNdXQsSyxWLGFsbG9jOjpjb2xsZWN0aW9uczo6YnRyZWU6Om5vZGU6Om1hcmtlcjo6TGVhZj4sYWxsb2M6OmNvbGxlY3Rpb25zOjpidHJlZTo6bm9kZTo6bWFya2VyOjpFZGdlPjo6aW5zZXJ0X3JlY3Vyc2luZzo6aDVjNjMzMDY4ZDg1ODA2OGYMS2NvcmU6Om51bTo6Zmx0MmRlYzo6c3RyYXRlZ3k6OmdyaXN1Ojpmb3JtYXRfc2hvcnRlc3Rfb3B0OjpoMzJhMTZlYmE4ODcyMjFhZQ1JaHRtbDVldmVyOjp0b2tlbml6ZXI6OmNoYXJfcmVmOjpDaGFyUmVmVG9rZW5pemVyOjpzdGVwOjpoYjJiYzJiNzllNjk1MmI1Mg4wY29yZTo6c2xpY2U6OnNvcnQ6Om1lcmdlX3NvcnQ6OmhjZTQ2NDZmNDc3M2FiOWU0D0BoYXNoYnJvd246OnJhdzo6UmF3VGFibGU8VCxBPjo6cmVzZXJ2ZV9yZWhhc2g6Omg5MWNhOTUzMDdmZjUxZmRiEEpodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6ZGF0YTo6ZG9jdHlwZV9lcnJvcl9hbmRfcXVpcmtzOjpoZDRlMDI2YTExMmQ1ZmFkYhFCY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGNvcmU6OnJjZG9tOjpOb2RlRGF0YT46Omg2YjZiYWU1NjUxMjUwN2E5ElFodG1sNWV2ZXI6OnRva2VuaXplcjo6Y2hhcl9yZWY6OkNoYXJSZWZUb2tlbml6ZXI6OmZpbmlzaF9uYW1lZDo6aGE2YjZhN2EyYzRiOTMwYmITMGNvcmU6OnNsaWNlOjpzb3J0OjptZXJnZV9zb3J0OjpoOTA5NjllODc3ZDQzYmZmYxREbWFya3VwNWV2ZXI6OnV0aWw6OmJ1ZmZlcl9xdWV1ZTo6QnVmZmVyUXVldWU6OmVhdDo6aGQ5NTI4ODY5Y2VjNzQxNTEVazxzdHJpbmdfY2FjaGU6OmF0b206OkF0b208U3RhdGljPiBhcyBjb3JlOjpjb252ZXJ0OjpGcm9tPGFsbG9jOjpib3Jyb3c6OkNvdzxzdHI+Pj46OmZyb206Omg5NjljYTEzMjE2ZmNhZjU3FltodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+OjphZGp1c3Rfc3ZnX2F0dHJpYnV0ZXM6Omg1ZjQyNTkwZGQ2NWYxZDljFzdjb3JlOjpvcHM6OmZ1bmN0aW9uOjpGbk11dDo6Y2FsbF9tdXQ6Omg2OTNkNGFhZjVlMGU1MDVkGDdjb3JlOjpyY2RvbTo6YXBwZW5kX3RvX2V4aXN0aW5nX3RleHQ6OmgwNzQ1ZDE0YWU1MzAzZjQ3GTFjb3JlOjpzdHI6OnNsaWNlX2Vycm9yX2ZhaWxfcnQ6OmgyNzEyOTVjMGY3ODA3YzFmGkdtYXJrdXA1ZXZlcjo6aW50ZXJmYWNlOjp0cmVlX2J1aWxkZXI6OmNyZWF0ZV9lbGVtZW50OjpoY2NmZjI2ZjRmZTBlNjRjMBs+cGFya2luZ19sb3Q6OnJhd19tdXRleDo6UmF3TXV0ZXg6OmxvY2tfc2xvdzo6aDkyYjI3NmRiNTg3ODI2MGYcUHRlbmRyaWw6OnRlbmRyaWw6OlRlbmRyaWw8RixBPjo6cHVzaF9ieXRlc193aXRob3V0X3ZhbGlkYXRpbmc6OmhmZWMzMGMyYTY3OTg0ZTE0HVB0ZW5kcmlsOjp0ZW5kcmlsOjpUZW5kcmlsPEYsQT46OnB1c2hfYnl0ZXNfd2l0aG91dF92YWxpZGF0aW5nOjpoZmVjMzBjMmE2Nzk4NGUxNB5QdGVuZHJpbDo6dGVuZHJpbDo6VGVuZHJpbDxGLEE+OjpwdXNoX2J5dGVzX3dpdGhvdXRfdmFsaWRhdGluZzo6aDk2YjQxYzEwNDAyM2ZhYjQfVGh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46Omluc2VydF9lbGVtZW50OjpoZDQ1ZjAwM2UyMTY0MTEyMSBXaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6Zm9yZWlnbl9zdGFydF90YWc6OmgxZDkzMzUxMjZhNjhjNmJiIV1odG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+Ojpwcm9jZXNzX2VuZF90YWdfaW5fYm9keTo6aDAyMDRhMmIwMDljYmU4NTgiOGRsbWFsbG9jOjpkbG1hbGxvYzo6RGxtYWxsb2M8QT46OmZyZWU6Omg0ZWQ4M2U5M2JkMDc0NDIwIypwaGY6Om1hcDo6TWFwPEssVj46OmdldDo6aGE4NWYyMWY2ZmNlYjlhYWMkQWh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjp0YWdfc2V0czo6c3BlY2lhbF90YWc6OmgzNDFmOWFmNTc3MDU5NjhiJThjb3JlOjpudW06OmJpZ251bTo6QmlnMzJ4NDA6Om11bF9wb3cyOjpoZmQ0MTVhMzY3ZDIxNjEzNCZKaHRtbDVldmVyOjp0b2tlbml6ZXI6OlRva2VuaXplcjxTaW5rPjo6ZmluaXNoX2F0dHJpYnV0ZTo6aGJiODYzYjcyYTUzM2ZkMmInYjxhbGxvYzo6dmVjOjpWZWM8VCxBPiBhcyBhbGxvYzo6dmVjOjpzcGVjX2V4dGVuZDo6U3BlY0V4dGVuZDxULEk+Pjo6c3BlY19leHRlbmQ6Omg0M2FkOTZhZWE4N2VjM2MxKEhjb3JlOjpudW06OmZsdDJkZWM6OnN0cmF0ZWd5OjpncmlzdTo6Zm9ybWF0X2V4YWN0X29wdDo6aGVlYzYzMWMyNTUzNGZjZTApcDxjb3JlOjpyY2RvbTo6UmNEb20gYXMgbWFya3VwNWV2ZXI6OmludGVyZmFjZTo6dHJlZV9idWlsZGVyOjpUcmVlU2luaz46OmFwcGVuZF9iZWZvcmVfc2libGluZzo6aDllMGMwOTQxNDJiZDA0NzcqLGNvcmU6OmZtdDo6Rm9ybWF0dGVyOjpwYWQ6OmhjODY3MGEwOWIyNmU2MjE3KzNjb3JlOjpzdHI6OmNvdW50Ojpkb19jb3VudF9jaGFyczo6aGI0ZTNlNDFjMDZlNjMxMWIsMTxzdHIgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGEzYTAxNjQzZDExNDU0OTItXWh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OmhhbmRsZV9taXNuZXN0ZWRfYV90YWdzOjpoMTRlNmI1NzkxYzlkYmExMS5QbWFya3VwNWV2ZXI6OnV0aWw6OmJ1ZmZlcl9xdWV1ZTo6QnVmZmVyUXVldWU6OnBvcF9leGNlcHRfZnJvbTo6aDM4ZjliYzc2MDJhYWQ1MjEvSmh0bWw1ZXZlcjo6dG9rZW5pemVyOjpUb2tlbml6ZXI8U2luaz46OmVtaXRfY3VycmVudF90YWc6Omg5ZmZmMjk4ZjYxYTFiYjQ5MA1fX3JkbF9yZWFsbG9jMVxodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+OjpyZWNvbnN0cnVjdF9mb3JtYXR0aW5nOjpoZjk3MGZmMWIwOWZhZTllMzJRPGh0bWw1ZXZlcjo6dG9rZW5pemVyOjpzdGF0ZXM6OlN0YXRlIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmhjZmVmZjI5NDFhODVlMWMyM0Jjb3JlOjpudW06OmZsdDJkZWM6OnN0cmF0ZWd5OjpkcmFnb246Om11bF9wb3cxMDo6aDZjOTVhOGZlZDk0MTM0NWI0QmNvcmU6OmZtdDo6ZmxvYXQ6OmZsb2F0X3RvX2RlY2ltYWxfY29tbW9uX2V4YWN0OjpoYjIzNTBiNzMzNTQ0Mjg0NDVIPGFsbG9jOjp2ZWM6OlZlYzxULEE+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6Omg2ZmVmNjQxMjEyZWYwZjc0NlZodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+OjpuZXdfZm9yX2ZyYWdtZW50OjpoNTY0NGExZDAwMDFkMzk1Mzc6Y29yZTo6bnVtOjpiaWdudW06OkJpZzMyeDQwOjptdWxfZGlnaXRzOjpoMjhiOTVlMjBjMjhmZDg3ODg2c2VyZGVfanNvbjo6c2VyOjpmb3JtYXRfZXNjYXBlZF9zdHI6OmgzOTQxYjkxYjBkNWE2M2M0OTVjb3JlOjpmbXQ6OkZvcm1hdHRlcjo6cGFkX2ludGVncmFsOjpoNGU5ZDY3YWVjOGQxMTJlZjq6AWFsbG9jOjpjb2xsZWN0aW9uczo6YnRyZWU6OnNlYXJjaDo6PGltcGwgYWxsb2M6OmNvbGxlY3Rpb25zOjpidHJlZTo6bm9kZTo6Tm9kZVJlZjxCb3Jyb3dUeXBlLEssVixhbGxvYzo6Y29sbGVjdGlvbnM6OmJ0cmVlOjpub2RlOjptYXJrZXI6OkxlYWZPckludGVybmFsPj46OnNlYXJjaF90cmVlOjpoZDVkNDE1M2E1MTUyOWJmMjtlaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6YXBwcm9wcmlhdGVfcGxhY2VfZm9yX2luc2VydGlvbjo6aDYzY2I0NjU3OTBhMWVmMGM8MWNvcmU6OnN0cjo6Y29udmVydHM6OmZyb21fdXRmODo6aGU5NzgyZjlkNDZhZTJlYTY9MmNvbXBpbGVyX2J1aWx0aW5zOjptZW06Om1lbW1vdmU6OmhkYTczNTk2NjZiMTk5YjYyPkpodG1sNWV2ZXI6OnRva2VuaXplcjo6VG9rZW5pemVyPFNpbms+Ojpwcm9jZXNzX2NoYXJfcmVmOjpoZTU2MTQzNmY0ZTdiNzVmOD9UaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6Y2xvc2VfdGhlX2NlbGw6OmgxYjhmZmFkZGUxM2FlOTIxQGNodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+OjpjcmVhdGVfZm9ybWF0dGluZ19lbGVtZW50X2Zvcjo6aGE1MDE4ODAxMzUxNzM2MmJBXGh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OnByb2Nlc3NfY2hhcnNfaW5fdGFibGU6Omg5Y2Q5ODUxMmYyMmExNDhlQlRodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+Ojppc190eXBlX2hpZGRlbjo6aGY0ZmVlNzlmMDdlMWVkNjFDaDxjb3JlOjppdGVyOjphZGFwdGVyczo6bWFwOjpNYXA8SSxGPiBhcyBjb3JlOjppdGVyOjp0cmFpdHM6Oml0ZXJhdG9yOjpJdGVyYXRvcj46OmZvbGQ6Omg4Njc1NWM1ZjY4N2Y4NTFhREVjb3JlOjpmbXQ6OmZsb2F0OjpmbG9hdF90b19kZWNpbWFsX2NvbW1vbl9zaG9ydGVzdDo6aGE1MDNkMjcxNGM5MmJlYmRFPmNvcmU6OmZtdDo6Rm9ybWF0dGVyOjp3cml0ZV9mb3JtYXR0ZWRfcGFydHM6Omg3NDExYmYwMzZmN2U5ZDczRlg8YWxsb2M6OnZlYzo6aW50b19pdGVyOjpJbnRvSXRlcjxULEE+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6OmhhYjdkZGZkMWJkZjU3YTdmRyNjb3JlOjpmbXQ6OndyaXRlOjpoZWMxNTg4YTJmZWNiMzY3NkgvY29yZTo6c2xpY2U6Om1lbWNocjo6bWVtcmNocjo6aGEyN2FjMDgzZTk2YzU2OTlJWmh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OnJlc2V0X2luc2VydGlvbl9tb2RlOjpoNGZiYTNhZTQxZWQxOWVjYUpAcGFya2luZ19sb3Q6OnJhd19tdXRleDo6UmF3TXV0ZXg6OnVubG9ja19zbG93OjpoY2MwZWJiNmE4NmJkNTg5MUs8Y29yZTo6Zm10OjpGb3JtYXR0ZXI6OnBhZF9mb3JtYXR0ZWRfcGFydHM6OmhlYzk2ZTdiYmUyMTExNTNkTEF0ZW5kcmlsOjp0ZW5kcmlsOjpUZW5kcmlsPEYsQT46OnBvcF9mcm9udF9jaGFyOjpoZWNmZmJmMDQwOTY5YTMyZE1IPGFsbG9jOjp2ZWM6OlZlYzxULEE+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6OmgxNzFkOTM0ZmQyZjdiYzhlTlRjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8W2h0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjp0eXBlczo6VG9rZW5dPjo6aDU3OTZjODdmZWE5M2EyNjFPbWh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OnVuZXhwZWN0ZWRfc3RhcnRfdGFnX2luX2ZvcmVpZ25fY29udGVudDo6aDNhYjdhZWNiZGFmZTE3ZjRQYzxhbGxvYzo6dmVjOjpWZWM8VD4gYXMgYWxsb2M6OnZlYzo6c3BlY19mcm9tX2l0ZXI6OlNwZWNGcm9tSXRlcjxULEk+Pjo6ZnJvbV9pdGVyOjpoODlhNGRmMTNlNGMzZGM4NlFvPGNvcmU6OnJjZG9tOjpSY0RvbSBhcyBtYXJrdXA1ZXZlcjo6aW50ZXJmYWNlOjp0cmVlX2J1aWxkZXI6OlRyZWVTaW5rPjo6YWRkX2F0dHJzX2lmX21pc3Npbmc6OmhiOWQ2MDQ4MTI2NDljN2QxUkFkbG1hbGxvYzo6ZGxtYWxsb2M6OkRsbWFsbG9jPEE+OjpkaXNwb3NlX2NodW5rOjpoOTFhZmE5ODI4ZDU0NWNkZFNBcGFya2luZ19sb3RfY29yZTo6cGFya2luZ19sb3Q6OlRocmVhZERhdGE6Om5ldzo6aDYwYTU3YjE2ZjM4NDEyZGNURjxhbGxvYzo6dmVjOjpWZWM8VCxBPiBhcyBjb3JlOjpjbG9uZTo6Q2xvbmU+OjpjbG9uZTo6aGQzMjBlMzkyZmMyZWRkNjhVRjxhbGxvYzo6dmVjOjpWZWM8VCxBPiBhcyBjb3JlOjpjbG9uZTo6Q2xvbmU+OjpjbG9uZTo6aDYzNWFlNWY1NzgzMzdjYWVWUmNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6dHlwZXM6OlRva2VuPjo6aDgzYjg3MDNlYjI1YmVjOTNXTmNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxtYXJrdXA1ZXZlcjo6aW50ZXJmYWNlOjpBdHRyaWJ1dGU+OjpoZDg1OWQ3NzE5YWI1NWUwMlhUaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6aW5fc2NvcGVfbmFtZWQ6OmgyZTMxNWY4OTllYzhmYjI2WTRodG1sNWV2ZXI6OnRva2VuaXplcjo6b3B0aW9uX3B1c2g6OmgwNWNlYjI2ZDNhNTZkOTA0WjtoYXNoYnJvd246Om1hcDo6SGFzaE1hcDxLLFYsUyxBPjo6aW5zZXJ0OjpoMTI1NjNlNjg4MWE4ZWQxM1tuPGFsbG9jOjpjb2xsZWN0aW9uczo6YnRyZWU6Om1hcDo6SXRlcjxLLFY+IGFzIGNvcmU6Oml0ZXI6OnRyYWl0czo6aXRlcmF0b3I6Okl0ZXJhdG9yPjo6bmV4dDo6aGQxYzYxZDYyMjc0MThmMTlcTDxzdGQ6OmlvOjpzdGRpbzo6U3Rkb3V0TG9jayBhcyBzdGQ6OmlvOjpXcml0ZT46OndyaXRlX2FsbDo6aDQ4YzdmMjcxM2Q2YTUxNjhdYTxjb3JlOjpyY2RvbTo6UmNEb20gYXMgbWFya3VwNWV2ZXI6OmludGVyZmFjZTo6dHJlZV9idWlsZGVyOjpUcmVlU2luaz46OmFwcGVuZDo6aDgwNDNkMjYyYjNjNTE0ZjNeMGNvcmU6Omhhc2g6Okhhc2hlcjo6d3JpdGVfdTMyOjpoYjk0MjVhMDRmOWJlOTA5ZV9faHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6YWRqdXN0X2ZvcmVpZ25fYXR0cmlidXRlczo6aGE1ZWI1ZTNiMDg3NDg4NWVgP2NvcmU6OnNsaWNlOjpzb3J0OjppbnNlcnRpb25fc29ydF9zaGlmdF9sZWZ0OjpoMTg1YWVkYmY2YTQ4ODM3Y2E5c3RyaW5nX2NhY2hlOjpkeW5hbWljX3NldDo6U2V0OjppbnNlcnQ6OmhiM2M0OTA0MDE2MjE4YjI4YjNhbGxvYzo6Zm10Ojpmb3JtYXQ6OmZvcm1hdF9pbm5lcjo6aGVhZWMzOGJjZDcyZmMzM2FjbDxjb3JlOjpyY2RvbTo6UmNEb20gYXMgbWFya3VwNWV2ZXI6OmludGVyZmFjZTo6dHJlZV9idWlsZGVyOjpUcmVlU2luaz46OnJlcGFyZW50X2NoaWxkcmVuOjpoZjk3NTk2YTQ2MDA4ZDhhOWRVY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGh0bWw1ZXZlcjo6dG9rZW5pemVyOjppbnRlcmZhY2U6OkRvY3R5cGU+OjpoYTk2ZjFmZDE1MzgzZWFkZGVCc3RkOjppbzo6c3RkaW86OnByaW50X3RvX2J1ZmZlcl9pZl9jYXB0dXJlX3VzZWQ6OmgxMTM1NDQ3ZjViN2Y2OTExZlw8c3RkOjpjb2xsZWN0aW9uczo6aGFzaDo6bWFwOjpEZWZhdWx0SGFzaGVyIGFzIGNvcmU6Omhhc2g6Okhhc2hlcj46OndyaXRlOjpoYTA0NzdhYTZmZDUyYTg5YWdUaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6aW5fc2NvcGVfbmFtZWQ6OmgzNTFhYjY1OTVlNTU2MWRlaFRodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+Ojppbl9zY29wZV9uYW1lZDo6aDgzMjgyZTdmYmZlMmIxOWZpSWh0bWw1ZXZlcjo6dG9rZW5pemVyOjpUb2tlbml6ZXI8U2luaz46OnBvcF9leGNlcHRfZnJvbTo6aGJkZjE1MmJiMWQ0ZWQwNDNqQHBhcmtpbmdfbG90X2NvcmU6OnBhcmtpbmdfbG90OjpIYXNoVGFibGU6Om5ldzo6aDYzY2I3MTgzNzBhZWIwYWZrNGNvcmU6Omhhc2g6OkJ1aWxkSGFzaGVyOjpoYXNoX29uZTo6aDY4ZTAyN2I0MDZmMTViYmZsOGhhc2hicm93bjo6cmF3OjpSYXdUYWJsZTxULEE+OjppbnNlcnQ6OmhkMGJkNjY5YjYwYjgxODZhbTZoYXNoYnJvd246OnJhdzo6UmF3VGFibGU8VCxBPjo6ZmluZDo6aGRhNGQ0ZTY3MGMxYzVlYjBuaDxhbGxvYzo6c3RyaW5nOjpTdHJpbmcgYXMgY29yZTo6aXRlcjo6dHJhaXRzOjpjb2xsZWN0OjpGcm9tSXRlcmF0b3I8Y2hhcj4+Ojpmcm9tX2l0ZXI6OmgwODUyMmYwZmYxMWI5MWVlb2g8YWxsb2M6OnN0cmluZzo6U3RyaW5nIGFzIGNvcmU6Oml0ZXI6OnRyYWl0czo6Y29sbGVjdDo6RnJvbUl0ZXJhdG9yPGNoYXI+Pjo6ZnJvbV9pdGVyOjpoNWEzOTBlOTZiYmZlMWJjNXBhaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6Z2VuZXJhdGVfaW1wbGllZF9lbmRfZXhjZXB0OjpoMjY0NTU1YWY0MjVjMDk1ZnFJc3RyaW5nX2NhY2hlOjphdG9tOjpBdG9tPFN0YXRpYz46OmVxX2lnbm9yZV9hc2NpaV9jYXNlOjpoYzNhNzdkZTIzZDc4ODI5M3JDdGVuZHJpbDo6dGVuZHJpbDo6VGVuZHJpbDxGLEE+Ojp1bnNhZmVfcG9wX2Zyb250OjpoNjQ0NzY2MTU3NjU2MzRjY3NDdGVuZHJpbDo6dGVuZHJpbDo6VGVuZHJpbDxGLEE+Ojp1bnNhZmVfcG9wX2Zyb250OjpoOWNlOWNiZDFjNzZmZWY1ZXQ3Y29yZTo6cGFuaWNraW5nOjphc3NlcnRfZmFpbGVkX2lubmVyOjpoMmFhNWU4ZTdmZTIwMWM2ZXVQaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6dW5leHBlY3RlZDo6aGY1OGZjMDJmMzI1ZmRjNDJ2UGh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OnVuZXhwZWN0ZWQ6OmhiYjA0MjAzY2Y2OWRjYzk1d1VodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+OjpleHBlY3RfdG9fY2xvc2U6OmgxYjkzMGM4MmQyNWIxOWYweDBkbG1hbGxvYzo6RGxtYWxsb2M8QT46Om1hbGxvYzo6aDc4ZDRiNGQ4YzEzYWJiNDJ5T2h0bWw1ZXZlcjo6dG9rZW5pemVyOjpUb2tlbml6ZXI8U2luaz46OmdldF9wcmVwcm9jZXNzZWRfY2hhcjo6aGUzNDlmN2M4ZmU1ZWQyOTJ6STwmc3RkOjppbzo6c3RkaW86OlN0ZG91dCBhcyBzdGQ6OmlvOjpXcml0ZT46OndyaXRlX2ZtdDo6aDZmZjY5ODMyNDkxOTQ1ZDB7WGNvcmU6Om51bTo6Zmx0MmRlYzo6c3RyYXRlZ3k6OmdyaXN1Ojpmb3JtYXRfZXhhY3Rfb3B0Ojpwb3NzaWJseV9yb3VuZDo6aGUxNWFlYjMyNTdhMjNjMDV8MjxjaGFyIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmgyNjVmYzI1OWJjZmQ2ZWJmfVNodG1sNWV2ZXI6OnRva2VuaXplcjo6Y2hhcl9yZWY6OkNoYXJSZWZUb2tlbml6ZXI6OmZpbmlzaF9udW1lcmljOjpoZTEwYjU2NjczYTc2MjU3Zn5TPGNvcmU6OmZtdDo6YnVpbGRlcnM6OlBhZEFkYXB0ZXIgYXMgY29yZTo6Zm10OjpXcml0ZT46OndyaXRlX3N0cjo6aDM0M2ExNzNhODBhZmExMjl/RTxzdGQ6OmlvOjplcnJvcjo6RXJyb3IgYXMgY29yZTo6Zm10OjpEaXNwbGF5Pjo6Zm10OjpoNDJjODEzMDdjODEzYTYxY4ABSmFsbG9jOjpjb2xsZWN0aW9uczo6YnRyZWU6Om1hcDo6QlRyZWVNYXA8SyxWLEE+OjppbnNlcnQ6OmhjM2ZkNWI5MjljYTZmNzBkgQE4Y29yZTo6bnVtOjpmbHQyZGVjOjpkaWdpdHNfdG9fZGVjX3N0cjo6aGU0MmM3Y2EyYjhjMzE0NziCAVJjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8KG1hcmt1cDVldmVyOjppbnRlcmZhY2U6OlF1YWxOYW1lLCgpKT46Omg4YzcyNDQzZjVhODhkNDMzgwFNY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPG1hcmt1cDVldmVyOjppbnRlcmZhY2U6OlF1YWxOYW1lPjo6aGEwMzI3YTEzNzY3NTUwNziEAU1jb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8bWFya3VwNWV2ZXI6OmludGVyZmFjZTo6UXVhbE5hbWU+OjpoMTc3ZDM4MzUyNTgxMWJhZIUBI2NvcmU6OnBhcnNlX2ZyYWc6OmhkOGFhMWVhZGIxNzBlNjg0hgFWaHRtbDVldmVyOjp0b2tlbml6ZXI6OmNoYXJfcmVmOjpDaGFyUmVmVG9rZW5pemVyOjp1bmNvbnN1bWVfbnVtZXJpYzo6aDA2YjZkM2I3YmQzYWI2MTWHAVFjb3JlOjpzbGljZTo6Y21wOjo8aW1wbCBjb3JlOjpjbXA6OlBhcnRpYWxFcTxbQl0+IGZvciBbQV0+OjplcTo6aGY5ZWY1ODc5ZGIzZjA2NGOIATJjb3JlOjp1bmljb2RlOjpwcmludGFibGU6OmNoZWNrOjpoZmJmY2VkMjY4MmM0YjlhNIkBZ3N0ZDo6aW86OmVycm9yOjo8aW1wbCBjb3JlOjpmbXQ6OkRlYnVnIGZvciBzdGQ6OmlvOjplcnJvcjo6cmVwcl91bnBhY2tlZDo6UmVwcj46OmZtdDo6aDY4YjU3ODJiMGVlMTdkNWGKATA8JlQgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGU1MjcyNDdlZjk0OGRkMDmLATA8JlQgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGU5MjlhYjM0OWQxNjE0ZTWMAUdjb3JlOjp1bmljb2RlOjp1bmljb2RlX2RhdGE6OmdyYXBoZW1lX2V4dGVuZDo6bG9va3VwOjpoNTUyNTgxZmE5ZDI1ZDIyOI0BPWh0bWw1ZXZlcjo6dG9rZW5pemVyOjpUb2tlbml6ZXI8U2luaz46Om5ldzo6aDY4MDczNGY3OWZlYzc1ZWWOATpjb3JlOjpmbXQ6OmJ1aWxkZXJzOjpEZWJ1Z1N0cnVjdDo6ZmllbGQ6OmgyMzM1NDI0MTM4YzUwNDVkjwE9aHRtbDVldmVyOjp0b2tlbml6ZXI6OlRva2VuaXplcjxTaW5rPjo6ZWF0OjpoNGEzMjFlYTgxMzRlMWVhNJABVGh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OmNoZWNrX2JvZHlfZW5kOjpoYWFmNmM5NjU3NDcxYjU5OJEBL2NvcmU6OmZtdDo6V3JpdGU6OndyaXRlX2NoYXI6OmhhNTExODMzYTJkYTNlMmU3kgFnaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6Y2xlYXJfYWN0aXZlX2Zvcm1hdHRpbmdfdG9fbWFya2VyOjpoYzk5NGNhMWU4ZmUxYzM0M5MBaGNvcmU6Om9wczo6ZnVuY3Rpb246OmltcGxzOjo8aW1wbCBjb3JlOjpvcHM6OmZ1bmN0aW9uOjpGbk11dDxBPiBmb3IgJm11dCBGPjo6Y2FsbF9tdXQ6OmhhNjU4ZjAwYWM3ODYyYzg5lAE7PCZtdXQgVyBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfY2hhcjo6aDQ3MTQ2OTM5M2QxMWIwNTeVATs8Jm11dCBXIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9jaGFyOjpoZGVlYzA2YTA2MWNhZDU3NpYBNGh0bWw1ZXZlcjo6ZHJpdmVyOjpwYXJzZV9kb2N1bWVudDo6aGIzZTZkODY0MTk1ODZiY2KXAR5jb3JlOjpwYXJzZTo6aDkyMGE2MDY3M2E3ODlhYzSYAUo8YWxsb2M6OnN0cmluZzo6U3RyaW5nIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9jaGFyOjpoZDY3YzMyNWM1ZTQyYmYyZZkBLmFsbG9jOjpzdHJpbmc6OlN0cmluZzo6cHVzaDo6aDgyMzliNzU5YzE2NzdmMGWaAVVodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+Ojpwb3BfdW50aWxfbmFtZWQ6OmhlZWU3Zjg2MmVmNjE1MzE5mwExY29tcGlsZXJfYnVpbHRpbnM6Om1lbTo6bWVtY3B5OjpoY2JiOTljZTc5NTdmOGYyOZwBM3N0ZDo6c3lzOjp3YXNtOjpvbmNlOjpPbmNlOjpjYWxsOjpoMzM5YTUwOGY5YjkxN2QwZZ0BL2NvcmU6OmZtdDo6bnVtOjppbXA6OmZtdF91NjQ6Omg0ZWZkZmUyZTI5MTBjOGJhngEKcGFyc2VfZnJhZ58BPmh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjphbnlfbm90X3doaXRlc3BhY2U6OmgxZTk2ZjQxNmE3NjAwN2RjoAFGY29yZTo6Zm10OjpudW06OjxpbXBsIGNvcmU6OmZtdDo6RGVidWcgZm9yIHU4Pjo6Zm10OjpoNDBhYTg5NGJjMjM2YjQxZKEBR2NvcmU6OmZtdDo6bnVtOjo8aW1wbCBjb3JlOjpmbXQ6OkRlYnVnIGZvciB1NjQ+OjpmbXQ6OmhjYTg3YmRhZmRmYzRmMDc3ogE2Y29yZTo6c2xpY2U6Om1lbWNocjo6bWVtY2hyX2FsaWduZWQ6Omg5NmFkNzZjZmUxYjI4ZDBmowFHY29yZTo6Zm10OjpudW06OjxpbXBsIGNvcmU6OmZtdDo6RGVidWcgZm9yIHUzMj46OmZtdDo6aDAwNGViZjA2YmMwODhjMDekAUVtYXJrdXA1ZXZlcjo6dXRpbDo6YnVmZmVyX3F1ZXVlOjpCdWZmZXJRdWV1ZTo6bmV4dDo6aGIxYWZjZmEyYTQxMjRkOTmlAUNodG1sNWV2ZXI6OnRva2VuaXplcjo6VG9rZW5pemVyPFNpbms+OjplbWl0X2NoYXI6Omg1ODJhNzNiZGNjNDMwMjZmpgE0Y29yZTo6cmNkb206OmdldF9wYXJlbnRfYW5kX2luZGV4OjpoMmY0MTU5MjQ4MWExMWNlNqcBRmRsbWFsbG9jOjpkbG1hbGxvYzo6RGxtYWxsb2M8QT46OnVubGlua19sYXJnZV9jaHVuazo6aGE5ZjI5N2ExMzNhZTBhMTmoASlzdGQ6OmlvOjpzdGRpbzo6X3ByaW50OjpoZTZlZGE1ZjEwZGQwMDlkNakBPWh0bWw1ZXZlcjo6dG9rZW5pemVyOjpUb2tlbml6ZXI8U2luaz46OnJ1bjo6aDA3ZWU2MDJhOTY1ODNkM2aqAVI8bWFya3VwNWV2ZXI6OmludGVyZmFjZTo6RXhwYW5kZWROYW1lIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6Omg2MjRjYjA0OTFhZDkwZWE3qwE5Y29yZTo6Zm10OjpidWlsZGVyczo6RGVidWdUdXBsZTo6ZmllbGQ6OmgxNDFhODkyNjJjMTVlZjJlrAE7PCZtdXQgVyBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfY2hhcjo6aGY3MWIyMDI3NjViM2M5MjStAUZkbG1hbGxvYzo6ZGxtYWxsb2M6OkRsbWFsbG9jPEE+OjppbnNlcnRfbGFyZ2VfY2h1bms6Omg0ZDAzNGUxNGIyYTQ4MDJmrgEvY29yZTo6Zm10OjpXcml0ZTo6d3JpdGVfY2hhcjo6aDcwMDY1NTE1MTdjNTAwYTmvAS9jb3JlOjpmbXQ6OldyaXRlOjp3cml0ZV9jaGFyOjpoYThlZTY4YTM1OTkyMTUxNbABRW1hcmt1cDVldmVyOjp1dGlsOjpidWZmZXJfcXVldWU6OkJ1ZmZlclF1ZXVlOjpwZWVrOjpoMjBmMjViNjYwOWI0MDcwNLEBQmh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjp0YWdfc2V0czo6YnV0dG9uX3Njb3BlOjpoMDI5MGY1NDMyMjU4MTgyNrIBS21hcmt1cDVldmVyOjp1dGlsOjpidWZmZXJfcXVldWU6OkJ1ZmZlclF1ZXVlOjpwdXNoX2Zyb250OjpoYmYzNDNjZWNlMGRlNDBlYbMBS2RsbWFsbG9jOjpkbG1hbGxvYzo6RGxtYWxsb2M8QT46OnJlbGVhc2VfdW51c2VkX3NlZ21lbnRzOjpoMTFkZjgyNDExNWM4ZmEwMLQBOWNvcmU6OmZtdDo6YnVpbGRlcnM6OkRlYnVnSW5uZXI6OmVudHJ5OjpoYTY5N2MxMzdlMzA5ZmM3YrUBNDxjaGFyIGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aGM5NTZiZTc1OGI5Y2FkZDm2AUw8c2VyZGVfanNvbjo6ZXJyb3I6OkVycm9yQ29kZSBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6Omg5MWY5MDZjMDQ2NTI0OWM5twFKbWFya3VwNWV2ZXI6OnV0aWw6OmJ1ZmZlcl9xdWV1ZTo6QnVmZmVyUXVldWU6OnB1c2hfYmFjazo6aGNkNTliMmNiNmI5MDRiOWK4AUVodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6dGFnX3NldHM6Omxpc3RfaXRlbV9zY29wZTo6aGI3ODYwZDBmZDEwMmE0N2G5AWZodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+Ojp0b2tlbml6ZXJfc3RhdGVfZm9yX2NvbnRleHRfZWxlbTo6aDU5ZTU3Njk0NzU5MDEwYze6ATJjb3JlOjpyY2RvbTo6cmVtb3ZlX2Zyb21fcGFyZW50OjpoMGQwMDI4ZGMxMmI1ZWNjZbsBNGh0bWw1ZXZlcjo6ZHJpdmVyOjpwYXJzZV9mcmFnbWVudDo6aDkwZjBhNDcyMTc1NWQ4ODS8AUpodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6dGFnX3NldHM6OnRob3JvdWdoX2ltcGxpZWRfZW5kOjpoMGM3Y2IwNzgxMDFmN2U5Yb0BU2h0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OmVudGVyX2ZvcmVpZ246Omg2ZjcwZjFiYjQ2ZGMyNjY4vgFEaHRtbDVldmVyOjp0b2tlbml6ZXI6OlRva2VuaXplcjxTaW5rPjo6Y3JlYXRlX3RhZzo6aGM3OGNjNzRhMmVhY2Q0YzG/AT9jb3JlOjpzbGljZTo6c29ydDo6aW5zZXJ0aW9uX3NvcnRfc2hpZnRfbGVmdDo6aGJiYzkzMTk1Y2Y0NWUwNjbAAUVwYXJraW5nX2xvdF9jb3JlOjp3b3JkX2xvY2s6OldvcmRMb2NrOjp1bmxvY2tfc2xvdzo6aDk5ZmE5ODQ5OGYzYWVlODjBATs8Jm11dCBXIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9jaGFyOjpoMTI2YjNlNDk3OTkxYjFhMsIBXmh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OmFkanVzdF9tYXRobWxfYXR0cmlidXRlczo6aGJiZDJlMzhhZTVhMjliMDjDAUpodG1sNWV2ZXI6OnRva2VuaXplcjo6VG9rZW5pemVyPFNpbms+Ojpjb25zdW1lX2NoYXJfcmVmOjpoZmYwODI0YTQ5OTAzM2I5Y8QBSmh0bWw1ZXZlcjo6dG9rZW5pemVyOjpUb2tlbml6ZXI8U2luaz46OmNyZWF0ZV9hdHRyaWJ1dGU6Omg5NTMwMzAxMDc5MTE2NjlhxQFFaHRtbDVldmVyOjp0b2tlbml6ZXI6OlRva2VuaXplcjxTaW5rPjo6ZGlzY2FyZF90YWc6Omg2MzRkZDBjZWExMjgwZTU1xgEvY29yZTo6Zm10OjpXcml0ZTo6d3JpdGVfY2hhcjo6aDQwY2U3YjFjYmRhYTlkZGXHAVg8YWxsb2M6OnZlYzo6aW50b19pdGVyOjpJbnRvSXRlcjxULEE+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6Omg1ZDUwMzhiMGY3MjRmOWVhyAFhaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6Y2hlY2tfYm9keV9lbmQ6OmJvZHlfZW5kX29rOjpoMDMyNTY1NGMwY2U5YzdmYskBOWNvcmU6OnVuaWNvZGU6OnByaW50YWJsZTo6aXNfcHJpbnRhYmxlOjpoNTMwZTk2YzI4Y2E2Yjg2McoBMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoYmI4OTcyMWJkNGM0OTMxNMsBTmh0bWw1ZXZlcjo6dG9rZW5pemVyOjpUb2tlbml6ZXI8U2luaz46OmVtaXRfY3VycmVudF9kb2N0eXBlOjpoNmI4ODAzNTZjMWU0MDhiOMwBRjxzZXJkZV9qc29uOjplcnJvcjo6RXJyb3IgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aDY3MjFkYTE4NTg1YmQ4ZmXNAVRodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+Ojppbl9zY29wZV9uYW1lZDo6aDAwZDk3Y2E3YWNhNjlkNmTOAVRodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+Ojppbl9zY29wZV9uYW1lZDo6aDFlNmViNDc2Yjk0Nzc4MTLPAU5odG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+Ojppbl9zY29wZTo6aDQ2ZmE1YTNhYTQyZGE0ODnQAQVwYXJzZdEBJmNvcmU6OmRvbV90b19zdHJpbmc6Omg5YzlmNTA0NjUzYWZjMjcx0gFIaHRtbDVldmVyOjp0b2tlbml6ZXI6OlRva2VuaXplcjxTaW5rPjo6YmFkX2NoYXJfZXJyb3I6OmhjNjgxYjRiODRhNjQwMmRj0wFPPG1hcmt1cDVldmVyOjppbnRlcmZhY2U6OlF1YWxOYW1lIGFzIGNvcmU6Omhhc2g6Okhhc2g+OjpoYXNoOjpoNmY0MDU1M2I2OWE5ZGEyNdQBM2luc3RhbnQ6Ondhc206OmR1cmF0aW9uX2Zyb21fZjY0OjpoMDk5OGQzMmRlYmVmZjA5ZdUBN2NvcmU6OmNoYXI6Om1ldGhvZHM6OmVuY29kZV91dGY4X3Jhdzo6aDI4NWYxMmFmNDBlMDRjY2LWAVBodG1sNWV2ZXI6OnRva2VuaXplcjo6Y2hhcl9yZWY6OkNoYXJSZWZUb2tlbml6ZXI6OmVuZF9vZl9maWxlOjpoODQwMjQwODI2Mzg4NmZjZdcBTmFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZTo6ZG9fcmVzZXJ2ZV9hbmRfaGFuZGxlOjpoOGQzNWIzMjdmYTk1YTg3YtgBTmFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZTo6ZG9fcmVzZXJ2ZV9hbmRfaGFuZGxlOjpoOTBiMWEyN2RhNzkwMDQ0MNkBTmFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZTo6ZG9fcmVzZXJ2ZV9hbmRfaGFuZGxlOjpoOWIwMmIzMTQzZjFlYTliM9oBTmFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZTo6ZG9fcmVzZXJ2ZV9hbmRfaGFuZGxlOjpoZWQzNTg5NmE4YTQ5ZWRkY9sBTmh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OmluX3Njb3BlOjpoNWRhNDg0MDQyMWU0MzViY9wBTmh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OmluX3Njb3BlOjpoNjdkNzhmMzA3YzcwYWUxNt0BaDxjb3JlOjppdGVyOjphZGFwdGVyczo6bWFwOjpNYXA8SSxGPiBhcyBjb3JlOjppdGVyOjp0cmFpdHM6Oml0ZXJhdG9yOjpJdGVyYXRvcj46OmZvbGQ6OmgyMzY0NGM3M2M0MTYxMGFl3gFAYWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+OjpyZXNlcnZlX2Zvcl9wdXNoOjpoMDdlN2MxZjhlMGIwMTczNN8BQGFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZV9mb3JfcHVzaDo6aDVjMDA1Y2Y1MjQ4ZjYxNTjgAUBhbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46OnJlc2VydmVfZm9yX3B1c2g6Omg4YjM5ZDI3NDRhZGUwN2E44QFAYWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+OjpyZXNlcnZlX2Zvcl9wdXNoOjpoYWNlZWMwZWU3OWYxNWRjN+IBQGFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZV9mb3JfcHVzaDo6aGRkY2QxNGJkNjcxNGY3ZDHjAUBhbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46OnJlc2VydmVfZm9yX3B1c2g6OmhhMWYxNjkxOTJkNGJmZDc25AFAYWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+OjpyZXNlcnZlX2Zvcl9wdXNoOjpoOTc4ZjE5NmI5NmRkYjljMeUBfHN0cmluZ19jYWNoZTo6dHJpdmlhbF9pbXBsczo6PGltcGwgc2VyZGU6OnNlcjo6U2VyaWFsaXplIGZvciBzdHJpbmdfY2FjaGU6OmF0b206OkF0b208U3RhdGljPj46OnNlcmlhbGl6ZTo6aDFlOThhZWExYTBjNTZjODLmAVFjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8aHRtbDVldmVyOjp0b2tlbml6ZXI6OmludGVyZmFjZTo6VGFnPjo6aDQ0ZGJkYmZjZmI2NWVmZjTnAVRodG1sNWV2ZXI6OnRva2VuaXplcjo6VG9rZW5pemVyPFNpbms+Ojpwcm9jZXNzX3Rva2VuX2FuZF9jb250aW51ZTo6aGY1M2NlYmIwMWI1MWI3MGPoAUpodG1sNWV2ZXI6OnRva2VuaXplcjo6VG9rZW5pemVyPFNpbms+OjpjbGVhcl9kb2N0eXBlX2lkOjpoOTVkY2U5YmRiMmQzYzEyOOkBJmNvcmU6OnJjZG9tOjphcHBlbmQ6OmhkYjdmZWExNmMwOTgwZDBm6gFOYWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+OjpyZXNlcnZlOjpkb19yZXNlcnZlX2FuZF9oYW5kbGU6OmhkYWEwMDY3MDJhYmQ5YWNh6wFOYWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+OjpyZXNlcnZlOjpkb19yZXNlcnZlX2FuZF9oYW5kbGU6Omg5Yzc0NDMyNGE4Mzk2ZmI07AFOYWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+OjpyZXNlcnZlOjpkb19yZXNlcnZlX2FuZF9oYW5kbGU6OmgyYzMwYTlmZTg5ZTE2NWRl7QFOYWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+OjpyZXNlcnZlOjpkb19yZXNlcnZlX2FuZF9oYW5kbGU6OmhhM2Y5ZDNkZmIxMDU5NGEy7gFDY29yZTo6Zm10OjpGb3JtYXR0ZXI6OmRlYnVnX3N0cnVjdF9maWVsZDRfZmluaXNoOjpoZTQ5ODAyZTNjMGQ5NGEyNu8BQGFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZV9mb3JfcHVzaDo6aDFiOTcwODY3OTJiZGEzMjbwAUBhbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46OnJlc2VydmVfZm9yX3B1c2g6OmgwMWVjYWEyNGE1Nzc5Zjhj8QFPaHRtbDVldmVyOjp0b2tlbml6ZXI6OmNoYXJfcmVmOjpDaGFyUmVmVG9rZW5pemVyOjpnZXRfcmVzdWx0OjpoMzIwYzkzN2YzYjFhOTkyMvIBQGFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZV9mb3JfcHVzaDo6aDkwZGU4ZGU2YTk0NWYyMmPzAUBhbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46OnJlc2VydmVfZm9yX3B1c2g6Omg5NTUxYWNkMDdjZmRmZGEx9AFCY29yZTo6Zm10OjpGb3JtYXR0ZXI6OmRlYnVnX3R1cGxlX2ZpZWxkMl9maW5pc2g6OmhmOThkZGUxMTU2ZTlhZTRm9QF8Y29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjp0eXBlczo6UHJvY2Vzc1Jlc3VsdDxhbGxvYzo6cmM6OlJjPGNvcmU6OnJjZG9tOjpOb2RlPj4+OjpoYmQ3Y2JjODZmNzkzZDQwNvYBUGh0bWw1ZXZlcjo6dG9rZW5pemVyOjppbnRlcmZhY2U6OlRhZzo6ZXF1aXZfbW9kdWxvX2F0dHJfb3JkZXI6OmhiN2ZhNDg5NmMzZWVhN2Q19wEzc3RkOjpzeXM6Ondhc206Om9uY2U6Ok9uY2U6OmNhbGw6OmhjZmJkMGEyNDdkYzg4NjZi+AFoPHN0ZDo6cGFuaWNraW5nOjpiZWdpbl9wYW5pY19oYW5kbGVyOjpQYW5pY1BheWxvYWQgYXMgY29yZTo6cGFuaWM6OkJveE1lVXA+Ojp0YWtlX2JveDo6aDRjNTM2MTcwYzdkNTZlNGL5ATdzdGQ6OnBhbmlja2luZzo6cnVzdF9wYW5pY193aXRoX2hvb2s6Omg4NWI3ZjY2MjhjMjkxZTEy+gFJPGNvcmU6OnN0cjo6ZXJyb3I6OlV0ZjhFcnJvciBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoODQxMjgxOWE0MzdlOGVkY/sBRDxhbGxvYzo6cmM6OlJjPFQ+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6Omg5MGY3MGRmOGI5ZWRmMTE1/AFOaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6aW5fc2NvcGU6OmhiY2E2ZmFjM2ViMzE0YTk3/QFCY29yZTo6Zm10OjpGb3JtYXR0ZXI6OmRlYnVnX3R1cGxlX2ZpZWxkMV9maW5pc2g6Omg1ZjRjYWEwN2Y0NjY4NmY2/gEuYWxsb2M6OnJhd192ZWM6OmZpbmlzaF9ncm93OjpoZjYxMGJkZjcyNDU2YmNkMf8BQ2NvcmU6OmZtdDo6Rm9ybWF0dGVyOjpkZWJ1Z19zdHJ1Y3RfZmllbGQzX2ZpbmlzaDo6aDUxNzViZDY0MGNjMGJjNzeAAmVodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+OjpjbG9zZV9wX2VsZW1lbnRfaW5fYnV0dG9uX3Njb3BlOjpoNWM5Mjc4NThlYzcxZWVmNIECV2h0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OnBvcF91bnRpbF9jdXJyZW50OjpoMDc2N2FlMzMwYTZjYmIyMYICV2h0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OnBvcF91bnRpbF9jdXJyZW50OjpoODA4YjVkOWY4OGNkZTRkZoMCV2h0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OnBvcF91bnRpbF9jdXJyZW50OjpoZjZmZTc2OGE3OTRkYzFlMoQCVWh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46Omh0bWxfZWxlbV9uYW1lZDo6aDQ4NGVjMDFmNzQ5MzcwNGKFAlxodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+OjphcHBlbmRfY29tbWVudF90b19odG1sOjpoZTVlZDhkMjUzMGMxNDY2MoYCMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoYThmMzAwMzdhN2UyY2JhNIcCMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoZTJlYTdjMzk1NjhkZjllZYgCMWNvbXBpbGVyX2J1aWx0aW5zOjptZW06Om1lbXNldDo6aGVkZjJkZGRjMTlmYTI5NDOJAk48c3RyaW5nX2NhY2hlOjphdG9tOjpBdG9tPFN0YXRpYz4gYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aDYzNjNmN2YzYTAyYjFlMzGKAk48c3RyaW5nX2NhY2hlOjphdG9tOjpBdG9tPFN0YXRpYz4gYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aDQ4MTNjNjgyODEwM2IyMTGLAilsb2c6Ol9fcHJpdmF0ZV9hcGlfbG9nOjpoZjNkY2NmMDBlNDY3MDk4MowCTjxzdHJpbmdfY2FjaGU6OmF0b206OkF0b208U3RhdGljPiBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoNGViMTY0Y2MwZjlhODEzNY0CXDxjb3JlOjpjaGFyOjpFc2NhcGVEZWJ1ZyBhcyBjb3JlOjppdGVyOjp0cmFpdHM6Oml0ZXJhdG9yOjpJdGVyYXRvcj46Om5leHQ6OmgwYzczODZmZjU2NDQyNDM3jgJDY29yZTo6Zm10OjpGb3JtYXR0ZXI6OmRlYnVnX3N0cnVjdF9maWVsZDJfZmluaXNoOjpoZjg0NDAxZjk5NzdiYmY5NY8CUWh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OmNyZWF0ZV9yb290OjpoMDMyNjVjNzBhM2VjNWFhY5ACRzxjb3JlOjp0aW1lOjpEdXJhdGlvbiBhcyBjb3JlOjpvcHM6OmFyaXRoOjpBZGQ+OjphZGQ6OmhmYzU4MzcyN2FiZmUyZDQ4kQJPaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6aW5zZXJ0X2F0OjpoZTUwN2RiMzM4OGYzNzExNJICVWh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OmNsb3NlX3BfZWxlbWVudDo6aGJlOWJkOGZkZGVhYmI4ZjiTAi5hbGxvYzo6cmF3X3ZlYzo6ZmluaXNoX2dyb3c6OmhkYjk0MzQwOGJjOTkzMDY2lAIuYWxsb2M6OnJhd192ZWM6OmZpbmlzaF9ncm93OjpoNGUwNzkyZTg0YTc3YjA3MZUCLmFsbG9jOjpyYXdfdmVjOjpmaW5pc2hfZ3Jvdzo6aGRiNDQ0MGZiZjYxOGI5MziWAi5hbGxvYzo6cmF3X3ZlYzo6ZmluaXNoX2dyb3c6OmhmZDAxZjYzZGQ2YzNjMzA5lwIuYWxsb2M6OnJhd192ZWM6OmZpbmlzaF9ncm93OjpoYzMzYmM0ZjEzM2QxNmI5NpgCLmFsbG9jOjpyYXdfdmVjOjpmaW5pc2hfZ3Jvdzo6aGIxZGM4ZWViNjRhY2ZlOGWZAlM8aHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OnR5cGVzOjpUb2tlbiBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoNzdmOGQxNTIxODg4YTA1Y5oCWmh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OmdlbmVyYXRlX2ltcGxpZWRfZW5kOjpoOTA1ZDQzMDA2NThiZWY5YZsCWmh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OmdlbmVyYXRlX2ltcGxpZWRfZW5kOjpoYzU5OTY0N2YzOTk0OTYyNJwCRjxjb3JlOjpvcHRpb246Ok9wdGlvbjxUPiBhcyBjb3JlOjpoYXNoOjpIYXNoPjo6aGFzaDo6aGJkYjc1ODhkOTczOTM0YmKdAl5odG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+OjpjbG9zZV9wX2VsZW1lbnQ6OmltcGxpZWQ6OmhiNDljNjE2MzQ4ZDE3MGI3ngJPaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6cG9wX3VudGlsOjpoODhmMWU1NTc3ZGE5NzVmMp8CVGh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OmFwcGVuZF9jb21tZW50OjpoN2Q2MWMyMjE1MTZkOWJiM6ACRWFsbG9jOjpjb2xsZWN0aW9uczo6dmVjX2RlcXVlOjpWZWNEZXF1ZTxULEE+Ojpncm93OjpoZDBkNmQ1NjQ0NTMwMjA4OaECRWFsbG9jOjpjb2xsZWN0aW9uczo6dmVjX2RlcXVlOjpWZWNEZXF1ZTxULEE+Ojpncm93OjpoODRmZTk0NzU0MzgyZjE0NqICQ3BhcmtpbmdfbG90X2NvcmU6OndvcmRfbG9jazo6V29yZExvY2s6OmxvY2tfc2xvdzo6aGRkM2ZjYjYxNjYyMGJhNTmjAi9hbGxvYzo6dmVjOjpWZWM8VCxBPjo6aW5zZXJ0OjpoNzJmMjA2MjJlNzVlMjdmN6QCV2h0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OnJlbW92ZV9mcm9tX3N0YWNrOjpoMTYxZGE2N2MxMTcyMzY2OaUCcGNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxjb3JlOjpvcHRpb246Ok9wdGlvbjx0ZW5kcmlsOjp0ZW5kcmlsOjpUZW5kcmlsPHRlbmRyaWw6OmZtdDo6VVRGOD4+Pjo6aGRkYTFhZjkwZDYxMmQzNDKmAltodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+OjphcHBlbmRfY29tbWVudF90b19kb2M6Omg3MjJmNDljMGJlNTZiMzQ2pwI6Y29yZTo6Zm10OjpidWlsZGVyczo6RGVidWdUdXBsZTo6ZmluaXNoOjpoYTQxZDNiNjFiODlmNTQxN6gCSWNvcmU6OmZtdDo6bnVtOjo8aW1wbCBjb3JlOjpmbXQ6OlVwcGVySGV4IGZvciBpOD46OmZtdDo6aGFlZDliMTQ3MjA0YmYwNjGpAkljb3JlOjpmbXQ6Om51bTo6PGltcGwgY29yZTo6Zm10OjpMb3dlckhleCBmb3IgaTg+OjpmbXQ6OmhhYjljMWY5YzNmYWZlZGViqgIyPCZUIGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aDI4Yzg4NTJiM2Q1N2M1YTOrAlpjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8dGVuZHJpbDo6dGVuZHJpbDo6VGVuZHJpbDx0ZW5kcmlsOjpmbXQ6OlVURjg+Pjo6aDhhYjZhOTY0YzhjYzM4ZTOsAlpjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8dGVuZHJpbDo6dGVuZHJpbDo6VGVuZHJpbDx0ZW5kcmlsOjpmbXQ6OlVURjg+Pjo6aDhhYjZhOTY0YzhjYzM4ZTOtAlpjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8dGVuZHJpbDo6dGVuZHJpbDo6VGVuZHJpbDx0ZW5kcmlsOjpmbXQ6OlVURjg+Pjo6aDhhYjZhOTY0YzhjYzM4ZTOuAjI8JlQgYXMgY29yZTo6Zm10OjpEaXNwbGF5Pjo6Zm10OjpoMGE3ZmQ2ZmYyMWE5NTYwM68CQ3N0ZDo6cGFuaWNraW5nOjpiZWdpbl9wYW5pY19oYW5kbGVyOjp7e2Nsb3N1cmV9fTo6aDFlMTdiYWQwNGE1NzEzYTSwAkpjb3JlOjpmbXQ6Om51bTo6PGltcGwgY29yZTo6Zm10OjpMb3dlckhleCBmb3IgaTMyPjo6Zm10OjpoMDUyYjBjNGFiZDAwYTg0OLECSmNvcmU6OmZtdDo6bnVtOjo8aW1wbCBjb3JlOjpmbXQ6OlVwcGVySGV4IGZvciBpMzI+OjpmbXQ6Omg3MGUwZTgyMjU0ZGZjMDdjsgJIaHRtbDVldmVyOjp0b2tlbml6ZXI6OlRva2VuaXplcjxTaW5rPjo6Y2xlYXJfdGVtcF9idWY6OmhlODRkZTEzZGE3ZGNhMDVmswJcaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6aW5zZXJ0X2VsZW1lbnQ6Omxpc3RlZDo6aDE2ZjJiNWEzZWVlMWQ3Njm0AklodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6dGFnX3NldHM6OmN1cnNvcnlfaW1wbGllZF9lbmQ6OmgxOGY3YmFkZjZlYmEzOWI0tQI6PCZtdXQgVyBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfc3RyOjpoNDY4ZWI5MGMyODc4ZmE5MbYCMjwmVCBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6OmgyZmM1MGNjYzY0YTBlMjA1twIyPCZUIGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aGE5OWE4MDk3YTk2YTVkZjC4AjI8JlQgYXMgY29yZTo6Zm10OjpEaXNwbGF5Pjo6Zm10OjpoNDUyM2VlMzgxZmNkZjU3ZrkCOHRlbmRyaWw6OnRlbmRyaWw6OlRlbmRyaWw8RixBPjo6Y2xlYXI6OmhmN2FhZmUyOTQ2NTcxMTE3ugJZPHN0ZDo6aW86OldyaXRlOjp3cml0ZV9mbXQ6OkFkYXB0ZXI8VD4gYXMgY29yZTo6Zm10OjpXcml0ZT46OndyaXRlX3N0cjo6aGM0NDJhYTlkMTQ1NTI3MmO7AkVjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8c2VyZGVfanNvbjo6ZXJyb3I6OkVycm9yPjo6aDQxNzUzYWU5MTE2NThlOTm8Alpjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8dGVuZHJpbDo6dGVuZHJpbDo6VGVuZHJpbDx0ZW5kcmlsOjpmbXQ6OlVURjg+Pjo6aDhhYjZhOTY0YzhjYzM4ZTO9AkhodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6dGFnX3NldHM6Omh0bWxfZGVmYXVsdF9zY29wZTo6aDk1MmJjNWNkMWY1MjIwMje+Anxjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8Y29yZTo6b3B0aW9uOjpPcHRpb248c3RyaW5nX2NhY2hlOjphdG9tOjpBdG9tPG1hcmt1cDVldmVyOjpMb2NhbE5hbWVTdGF0aWNTZXQ+Pj46OmhlYzUyN2VmM2IwMjAyMDgyvwJ5Y29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGNvcmU6Om9wdGlvbjo6T3B0aW9uPHN0cmluZ19jYWNoZTo6YXRvbTo6QXRvbTxtYXJrdXA1ZXZlcjo6UHJlZml4U3RhdGljU2V0Pj4+OjpoZjc5MGI0NjZhYjk4MGJiNMACLmNvcmU6OnJlc3VsdDo6dW53cmFwX2ZhaWxlZDo6aGUwZGRjMjY5MDgzMDk4YWbBAi9hbGxvYzo6dmVjOjpWZWM8VCxBPjo6cmVtb3ZlOjpoNDBmMWQ2MWM3ODk3MWMyOcICUzxodG1sNWV2ZXI6OnRva2VuaXplcjo6Y2hhcl9yZWY6OlN0YXRlIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmhmODJmYjRhMDJhYTRkM2I5wwJnaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6aW5zZXJ0X2VsZW1lbnQ6OmZvcm1fYXNzb2NpYXRhYmxlOjpoZDcwNTE4NmE3M2ExZWQ1N8QCZmNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxzdHJpbmdfY2FjaGU6OmF0b206OkF0b208bWFya3VwNWV2ZXI6OkxvY2FsTmFtZVN0YXRpY1NldD4+OjpoNzI5ZWRhOTU1MTc1NGMzNMUCZmNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxzdHJpbmdfY2FjaGU6OmF0b206OkF0b208bWFya3VwNWV2ZXI6OkxvY2FsTmFtZVN0YXRpY1NldD4+OjpoYjlhZTE5ZTNmM2IxNDFhOcYCZmNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxzdHJpbmdfY2FjaGU6OmF0b206OkF0b208bWFya3VwNWV2ZXI6Ok5hbWVzcGFjZVN0YXRpY1NldD4+OjpoNTIxN2JlZWYxMjcxZTI5MMcCrQE8aHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPiBhcyBodG1sNWV2ZXI6OnRva2VuaXplcjo6aW50ZXJmYWNlOjpUb2tlblNpbms+OjphZGp1c3RlZF9jdXJyZW50X25vZGVfcHJlc2VudF9idXRfbm90X2luX2h0bWxfbmFtZXNwYWNlOjpoZDA0MWIwZjQ1MDVjNjZkMsgCMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoNjQ2OGFlNzlmMzViY2Y1MckCPmFsbG9jOjp2ZWM6OlZlYzxULEE+OjppbnNlcnQ6OmFzc2VydF9mYWlsZWQ6Omg2NjJjMzk0MmQ5MTkzODE0ygI+YWxsb2M6OnZlYzo6VmVjPFQsQT46OnJlbW92ZTo6YXNzZXJ0X2ZhaWxlZDo6aDk4NGRmM2I3ZjJmZTQwM2HLAjZjb3JlOjpwYW5pY2tpbmc6OnBhbmljX2JvdW5kc19jaGVjazo6aDBjZmNlNDU5MjYwYTBhODLMAkRjb3JlOjpzbGljZTo6aW5kZXg6OnNsaWNlX3N0YXJ0X2luZGV4X2xlbl9mYWlsX3J0OjpoMGMxNDMxNDAyMjRmNTFlOc0CQmNvcmU6OnNsaWNlOjppbmRleDo6c2xpY2VfZW5kX2luZGV4X2xlbl9mYWlsX3J0OjpoNDFiNWU0OTBlODRhMzBkNM4CQGNvcmU6OnNsaWNlOjppbmRleDo6c2xpY2VfaW5kZXhfb3JkZXJfZmFpbF9ydDo6aDU4NzdlZjJhMWYyMzVhZmTPAjA8JlQgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGJhOTgwM2I5ZTM2ZjM4YTbQAjlzdHJpbmdfY2FjaGU6OmR5bmFtaWNfc2V0OjpTZXQ6OnJlbW92ZTo6aGNiNjFlYzUwMmJjMDEzZjHRAi1hbGxvYzo6dmVjOjpWZWM8VCxBPjo6cHVzaDo6aDk4ZmQ5NjcyMjZmMWQ3NzfSAjtjb3JlOjpmbXQ6OmJ1aWxkZXJzOjpEZWJ1Z1N0cnVjdDo6ZmluaXNoOjpoNDdmMzA0NGI2ZDcxNTRmNdMCVGh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OnBhcnNlX3Jhd19kYXRhOjpoZDdkZmJmNmFkMThkZTZkN9QCSjxjb3JlOjpvcHM6OnJhbmdlOjpSYW5nZTxJZHg+IGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmhhOGE3ZjVjZTM5MzI5NGQ41QJYaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6aW5faHRtbF9lbGVtX25hbWVkOjpoYjEzZGE3MDM4NDgwNGJiZdYCMjwmVCBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6OmgyNjQ3YTk3YzMzOWQ4MWRl1wIvYWxsb2M6OnZlYzo6VmVjPFQsQT46Omluc2VydDo6aGEzOTdkZTg3N2RjNmIzMWLYAjxkbG1hbGxvYzo6ZGxtYWxsb2M6OkRsbWFsbG9jPEE+Ojppbml0X3RvcDo6aDAwZDZlZWFlNmE5NDY2MzHZAjdzdGQ6OmFsbG9jOjpkZWZhdWx0X2FsbG9jX2Vycm9yX2hvb2s6Omg4NzIwMWY1ZmU1YWI3NDU42gJbaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6Zm9zdGVyX3BhcmVudF9pbl9ib2R5OjpoY2RkMTBmMzE1MmNkY2JiYtsCTXN0ZDo6aW86OmJ1ZmZlcmVkOjpidWZ3cml0ZXI6OkJ1ZldyaXRlcjxXPjo6d3JpdGVfYWxsX2NvbGQ6Omg4MzhjZDhiYmI3YWRjOTY33AJjPHN0ZDo6cGFuaWNraW5nOjpiZWdpbl9wYW5pY19oYW5kbGVyOjpQYW5pY1BheWxvYWQgYXMgY29yZTo6cGFuaWM6OkJveE1lVXA+OjpnZXQ6OmhmNzRmY2UwYzg4MzAwNDgx3QI6PCZtdXQgVyBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfZm10OjpoZTBhMWMzZTk2ZTMxNjMzZd4COjwmbXV0IFcgYXMgY29yZTo6Zm10OjpXcml0ZT46OndyaXRlX2ZtdDo6aDMxYWI3NTcyZmVjY2IzODPfAjo8Jm11dCBXIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9mbXQ6OmgzODhjYmE0NTMyYzEyM2Vj4AI6PCZtdXQgVyBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfZm10OjpoNDFkOTdmZWVhZjRjOTk4OOECOjwmbXV0IFcgYXMgY29yZTo6Zm10OjpXcml0ZT46OndyaXRlX2ZtdDo6aGRhOWI2ZGJiYzc4OTFjZDDiAjo8Jm11dCBXIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9mbXQ6OmhkOWVjNjQ3MWJhMzdmNjZi4wI6PCZtdXQgVyBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfZm10OjpoMzY5MDg2NmYzYWFjNTUyMeQCMWNvcmU6OnBhbmlja2luZzo6YXNzZXJ0X2ZhaWxlZDo6aGZjMzNjMWJjNzkyMzYwNTblAjFjb3JlOjpwYW5pY2tpbmc6OmFzc2VydF9mYWlsZWQ6OmgzM2QzZjU1ZWE0ODAxNDZl5gIxY29yZTo6cGFuaWNraW5nOjphc3NlcnRfZmFpbGVkOjpoZDk5NDBmZTkwZGI4ZjkyN+cCSmh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OnB1c2g6OmhlZTM5YjdjYmQyMjI0MTg06AIyY29yZTo6Zm10OjpGb3JtYXR0ZXI6OndyaXRlX2ZtdDo6aGJkZTU1ZTY0Y2MyNzBkNGXpAi5jb3JlOjpmbXQ6OldyaXRlOjp3cml0ZV9mbXQ6OmgwOTk0ODczMWQ3NmNhYjE16gIuY29yZTo6Zm10OjpXcml0ZTo6d3JpdGVfZm10OjpoMDZiN2NmMDkyM2VlZmMzY+sCLmNvcmU6OmZtdDo6V3JpdGU6OndyaXRlX2ZtdDo6aDdjYzM3MzQxMGRiMTUxZjLsAi5jb3JlOjpmbXQ6OldyaXRlOjp3cml0ZV9mbXQ6OmhjZTk2NDlhNWE4NDIxYzY57QJCPGFsbG9jOjp2ZWM6OlZlYzxULEE+IGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmgwN2YxZDJhMzAzNGY2OWI47gIuY29yZTo6b3B0aW9uOjpleHBlY3RfZmFpbGVkOjpoYzM2YTY5MzY2Nzc3Y2UwYu8CLmNvcmU6OmZtdDo6V3JpdGU6OndyaXRlX2ZtdDo6aGU3ZjBhOTlmN2NmNzQ4NzfwAmY8Y29yZTo6cmNkb206OlJjRG9tIGFzIG1hcmt1cDVldmVyOjppbnRlcmZhY2U6OnRyZWVfYnVpbGRlcjo6VHJlZVNpbms+OjpwYXJzZV9lcnJvcjo6aDEyM2UxZmMyNTQ2Nzc1NWbxAkFodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6dGFnX3NldHM6OmhlYWRpbmdfdGFnOjpoMTdjZTBjN2UzYjljOWNlNvICMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoYTRhY2JiOTgyNjdmODBkMPMCWDxtYXJrdXA1ZXZlcjo6dXRpbDo6YnVmZmVyX3F1ZXVlOjpTZXRSZXN1bHQgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGY1ZGI5NWYyYzkxZjNmOTH0Ai1sb2c6Ol9fcHJpdmF0ZV9hcGlfZW5hYmxlZDo6aGI3NDNkOWNmYTA3YzZmN2T1Aj5hbGxvYzo6Y29sbGVjdGlvbnM6OmJ0cmVlOjpub2RlOjpzcGxpdHBvaW50OjpoYjhmYzFkNjgxNzMxNWY0MfYCXzxzdHJpbmdfY2FjaGU6OmF0b206OkF0b208U3RhdGljPiBhcyBjb3JlOjpvcHM6OmRyb3A6OkRyb3A+Ojpkcm9wOjpkcm9wX3Nsb3c6Omg1MGY3OTNhYzFiZjgyYWEy9wJWPGh0bWw1ZXZlcjo6dG9rZW5pemVyOjppbnRlcmZhY2U6OkRvY3R5cGUgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGJjYWM0YTE2Mjc4YmUxYjX4AlI8aHRtbDVldmVyOjp0b2tlbml6ZXI6OmludGVyZmFjZTo6VGFnIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6Omg1Mzg0YWU5MTU4OTBmZmVk+QJVaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6Y3VycmVudF9ub2RlX2luOjpoMzIwNzM5NTBjMjQ3OWFkOfoCL2FsbG9jOjp2ZWM6OlZlYzxULEE+OjpyZW1vdmU6OmgxNzliNTkxODJmYTUyNWMy+wJBaGFzaGJyb3duOjpyYXc6OkZhbGxpYmlsaXR5OjpjYXBhY2l0eV9vdmVyZmxvdzo6aGM2MWQ4YWRlYTlkYTQ5NWb8AlNodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6dGFnX3NldHM6Om1hdGhtbF90ZXh0X2ludGVncmF0aW9uX3BvaW50OjpoNWI1NDBjOGYzMDNhZTk0NP0CSGh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjp0YWdfc2V0czo6dGFibGVfYm9keV9jb250ZXh0OjpoMDE1YjlmYWYyMjQwNjE5Y/4CaWh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OnByb2Nlc3NfY2hhcnNfaW5fdGFibGU6OnRhYmxlX291dGVyOjpoNjg5ZDEwNzI0N2JlMWIzMv8CYzxzdGQ6OnBhbmlja2luZzo6YmVnaW5fcGFuaWM6OlBhbmljUGF5bG9hZDxBPiBhcyBjb3JlOjpwYW5pYzo6Qm94TWVVcD46OnRha2VfYm94OjpoNGI2M2Y1Yzk2MzYzYTliZoADUWh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OmFwcGVuZF90ZXh0OjpoY2M1YTk3MmRlMDJiYzRmZoEDYzxzdGQ6OnBhbmlja2luZzo6YmVnaW5fcGFuaWM6OlBhbmljUGF5bG9hZDxBPiBhcyBjb3JlOjpwYW5pYzo6Qm94TWVVcD46OnRha2VfYm94OjpoMDg0ODMyYTY5OGI4NmE2YYIDEXJ1c3RfYmVnaW5fdW53aW5kgwMtYWxsb2M6OnZlYzo6VmVjPFQsQT46OnB1c2g6Omg1OTcwNTMwODg2NzUzOWYxhANePGNvcmU6OnNsaWNlOjppdGVyOjpJdGVyPFQ+IGFzIGNvcmU6Oml0ZXI6OnRyYWl0czo6aXRlcmF0b3I6Okl0ZXJhdG9yPjo6YW55OjpoM2FjYTE1M2QzNzg3OWY3MYUDU2h0bWw1ZXZlcjo6dG9rZW5pemVyOjpjaGFyX3JlZjo6Q2hhclJlZlRva2VuaXplcjo6dW5jb25zdW1lX25hbWU6OmgyNDQ1MWMwN2QxYjE2N2Y4hgNCY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPHN0ZDo6aW86OmVycm9yOjpFcnJvcj46OmhkOTgyNjJhM2MxY2FhYzQyhwNkY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPHN0ZDo6aW86OldyaXRlOjp3cml0ZV9mbXQ6OkFkYXB0ZXI8YWxsb2M6OnZlYzo6VmVjPHU4Pj4+OjpoYjk1Mzg2ZjVmNTVjYzUwM4gDMWFsbG9jOjp2ZWM6OlZlYzxULEE+Ojp0cnVuY2F0ZTo6aDIxNzM3Yjg4YTdiZGZhNWKJA0JwYXJraW5nX2xvdF9jb3JlOjpwYXJraW5nX2xvdDo6Y3JlYXRlX2hhc2h0YWJsZTo6aGMxYWM5ZDIzODI1NzlhMjSKA2Rjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8c3RkOjppbzo6V3JpdGU6OndyaXRlX2ZtdDo6QWRhcHRlcjxhbGxvYzo6dmVjOjpWZWM8dTg+Pj46OmhjZWE5OWJkNzc3NTE4OGU4iwNOPG1hcmt1cDVldmVyOjppbnRlcmZhY2U6OlF1YWxOYW1lIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmhlNzdlMmJmZWFhYzNhMDE1jANdPHN0cmluZ19jYWNoZTo6ZHluYW1pY19zZXQ6OkRZTkFNSUNfU0VUIGFzIGNvcmU6Om9wczo6ZGVyZWY6OkRlcmVmPjo6ZGVyZWY6Omg3MWExYTE1Yjg0ODExNDYwjQMpY29yZTo6cGFuaWNraW5nOjpwYW5pYzo6aDJmMDQxYmY2YWE5OTBkZmSOAzFjb21waWxlcl9idWlsdGluczo6bWVtOjptZW1jbXA6OmhiZTkzYzEzNWU3NTVjOWRijwNFPGNvcmU6Om9wdGlvbjo6T3B0aW9uPFQ+IGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmhkOTNhN2JlYjI1ZDE3ZDRjkANFPGNvcmU6Om9wdGlvbjo6T3B0aW9uPFQ+IGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmhmNDVmNTM3NGYyYjkyOWE4kQNFPGNvcmU6Om9wdGlvbjo6T3B0aW9uPFQ+IGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6Omg3ZDNkYjY3YTE3OGRiYzA3kgMxYWxsb2M6OnN5bmM6OkFyYzxUPjo6ZHJvcF9zbG93OjpoNzYxODcyMzYwZTY0NmEzNZMDOjwmbXV0IFcgYXMgY29yZTo6Zm10OjpXcml0ZT46OndyaXRlX3N0cjo6aDYwYTdkOGE3YzFmNzIyMTiUA1JodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6VHJlZUJ1aWxkZXI8SGFuZGxlLFNpbms+Ojphc3NlcnRfbmFtZWQ6OmgzY2I5OGExZmQ1ZWU3NjczlQM6PCZtdXQgVyBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfc3RyOjpoY2M5MmNiNWYxNDZjZGYwOZYDWTxzdGQ6OmlvOjpXcml0ZTo6d3JpdGVfZm10OjpBZGFwdGVyPFQ+IGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9zdHI6Omg5OTkxOGQ3ZjliNzg1MjNllwM6PCZtdXQgVyBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfc3RyOjpoZmIzNTM4N2E2OTBlZTBiY5gDOjwmbXV0IFcgYXMgY29yZTo6Zm10OjpXcml0ZT46OndyaXRlX3N0cjo6aGUzYTMwOGFlMzc5MTM0NTaZA1k8c3RkOjppbzo6V3JpdGU6OndyaXRlX2ZtdDo6QWRhcHRlcjxUPiBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfc3RyOjpoOTVkOGI2MDVlN2QzYTI0YZoDOjwmbXV0IFcgYXMgY29yZTo6Zm10OjpXcml0ZT46OndyaXRlX3N0cjo6aGY1NTEzNTNiY2E1N2M2ZmabAz1jb3JlOjpudW06OjxpbXBsIHU4Pjo6ZXFfaWdub3JlX2FzY2lpX2Nhc2U6OmhjOWM0NjFhNDRlOGM2NjNinANJPGFsbG9jOjpzdHJpbmc6OlN0cmluZyBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfc3RyOjpoZTg3MzY5YWU5Yjg4N2I0OZ0DTzxtYXJrdXA1ZXZlcjo6aW50ZXJmYWNlOjpBdHRyaWJ1dGUgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aDkzMzFkY2MwYTRmYTk1ZmSeAypzdGQ6OnRpbWU6Okluc3RhbnQ6Om5vdzo6aDIzMTFjOThjYjYwOTQ1ZDifAy5zdGQ6OnRpbWU6Okluc3RhbnQ6OmVsYXBzZWQ6OmhiMDdmZWFkMmRiMTNmZDg1oAM0YWxsb2M6OnJhd192ZWM6OmNhcGFjaXR5X292ZXJmbG93OjpoM2JiNDUzN2I1ZjlmODQwNKEDSjxhbGxvYzo6c3RyaW5nOjpGcm9tVXRmOEVycm9yIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmhhOTE2NDRhYTAzNDQ1YzcxogMtYWxsb2M6OnZlYzo6VmVjPFQsQT46OnB1c2g6OmhjNjcyNGRjYjU3ZjdjOGE0owNZaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6c3RlcDo6ZXh0cmFfc3BlY2lhbDo6aGU4YTM5ZTI5NzU4OThiNTekA2s8c3RkOjpwYW5pY2tpbmc6OmJlZ2luX3BhbmljX2hhbmRsZXI6OlN0clBhbmljUGF5bG9hZCBhcyBjb3JlOjpwYW5pYzo6Qm94TWVVcD46OnRha2VfYm94OjpoMTAwMjY2MDA2MjM3ZmM0ZKUDSWh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OnBvcDo6aDY2N2M3OWU4MDU0Y2U3YTimA0g8ZGxtYWxsb2M6OnN5czo6U3lzdGVtIGFzIGRsbWFsbG9jOjpBbGxvY2F0b3I+OjphbGxvYzo6aGViOGEwYjE2ZjhmNWJjYzCnA0Njb3JlOjpmbXQ6OkZvcm1hdHRlcjo6cGFkX2ludGVncmFsOjp3cml0ZV9wcmVmaXg6OmhiNjIzNjljMDJmMWEyOTZhqANLY29yZTo6Zm10OjpmbG9hdDo6PGltcGwgY29yZTo6Zm10OjpEaXNwbGF5IGZvciBmNjQ+OjpmbXQ6OmhiMjY0MTExY2JmYjFjOTk2qQMtYWxsb2M6OnZlYzo6VmVjPFQsQT46OnB1c2g6Omg3NDJhMTc3ZmM1ZWM5MDg3qgNQaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OnRhZ19zZXRzOjpzdmdfaHRtbF9pbnRlZ3JhdGlvbl9wb2ludDo6aDJkNDFiMWZjMTA5YTA4ZWarA0FodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6dGFnX3NldHM6OnRhYmxlX3Njb3BlOjpoNWNhODY1N2JjZDNjZTNkYawDR2h0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjp0YWdfc2V0czo6dGFibGVfcm93X2NvbnRleHQ6Omg5NWVmNWRhZTFkNjBkOGYyrQNXaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6c3RlcDo6dGFibGVfb3V0ZXI6OmgyZjNiNjdlMWVkYTZkN2VhrgNNY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPHN0cmluZ19jYWNoZTo6ZHluYW1pY19zZXQ6OkVudHJ5Pjo6aGNlYzllN2ZjODY0MmFlNzivA01jb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8c3RyaW5nX2NhY2hlOjpkeW5hbWljX3NldDo6RW50cnk+OjpoY2VjOWU3ZmM4NjQyYWU3OLADQmh0bWw1ZXZlcjo6dG9rZW5pemVyOjpUb2tlbml6ZXI8U2luaz46OmdldF9jaGFyOjpoMzY5ZjcxODE5OWIyYmQzZrEDQHN0ZDo6c3luYzo6b25jZV9sb2NrOjpPbmNlTG9jazxUPjo6aW5pdGlhbGl6ZTo6aGZlMGIyMGZmMmM1MDY3MDGyAy1jb3JlOjpwYW5pY2tpbmc6OnBhbmljX2ZtdDo6aGY1YzRjZDkyOWQ0YWFhOWWzAxFfX3diaW5kZ2VuX21hbGxvY7QDL3NlcmRlX2pzb246OmVycm9yOjpFcnJvcjo6aW86OmhmZTA4YWRlNjBlNmM1Y2RhtQNYaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6Y3VycmVudF9ub2RlX25hbWVkOjpoMGI3ZDgzZWY2Nzk2ZTc2ZbYDMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoM2YzZGM0NmU2ZTgxZWYzNbcDMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoOTdkYjRjMjNlMzg2OWQ3MLgDEl9fcmRsX2FsbG9jX3plcm9lZLkDMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoYzNjOTJkNTUzZjQ2NWMyZboDSGh0bWw1ZXZlcjo6dG9rZW5pemVyOjpjaGFyX3JlZjo6Q2hhclJlZlRva2VuaXplcjo6bmV3OjpoYTA0YTExZjIwMThkNmI1OLsDRnBhcmtpbmdfbG90X2NvcmU6OnBhcmtpbmdfbG90OjpGYWlyVGltZW91dDo6Z2VuX3UzMjo6aDk0ZDcyMmQyMDNmMmMxZja8A0ZodG1sNWV2ZXI6OnRva2VuaXplcjo6VG9rZW5pemVyPFNpbms+OjpkaXNjYXJkX2NoYXI6Omg1ODkzYzU4ZWNkY2RkYzNivQNZaHRtbDVldmVyOjp0b2tlbml6ZXI6OmNoYXJfcmVmOjpDaGFyUmVmVG9rZW5pemVyOjpmaW5pc2hfbnVtZXJpYzo6Y29udjo6aGFhNDc4ZWExYTYzZTg1YzW+A3s8bWFya3VwNWV2ZXI6OmludGVyZmFjZTo6RXhwYW5kZWROYW1lIGFzIGNvcmU6OmNtcDo6UGFydGlhbEVxPG1hcmt1cDVldmVyOjppbnRlcmZhY2U6OkV4cGFuZGVkTmFtZT4+OjplcTo6aGUyOTQ4MmY4NGJjYjcxMWa/Azljb3JlOjpmbXQ6OmJ1aWxkZXJzOjpEZWJ1Z0xpc3Q6OmZpbmlzaDo6aGYxM2M5MTcyYjMxNTNlNGTAAzRjb3JlOjpmbXQ6OkZvcm1hdHRlcjo6ZGVidWdfdHVwbGU6OmgxNDQ5ZDJjOGRkOWNlZTUxwQM7c3RkOjpwYW5pY2tpbmc6OmJlZ2luX3BhbmljOjp7e2Nsb3N1cmV9fTo6aDcwMTg0NDE2MzA1YjdjZGXCA0JodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6dGFnX3NldHM6OnNlbGVjdF9zY29wZTo6aGFlZmZlYTA4OGU5ZTJlZGPDAztodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6dGFnX3NldHM6OnRkX3RoOjpoZWM3NjIxMGUwYzUzNDk0MsQDVmh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OnN0ZXA6OmNsb3NlX2RlZm46Omg3MTA5OTk1NmUxOGZiMzIzxQM7c3RkOjpwYW5pY2tpbmc6OmJlZ2luX3BhbmljOjp7e2Nsb3N1cmV9fTo6aDliNjE2ZDM1ODgyOTQ2MznGA0djb3JlOjpmbXQ6Om51bTo6PGltcGwgY29yZTo6Zm10OjpEZWJ1ZyBmb3IgaTMyPjo6Zm10OjpoMmQ0ZTRmYmNiYmE4MzQ1MccDN2RsbWFsbG9jOjpkbG1hbGxvYzo6Q2h1bms6OnNldF9pbnVzZTo6aDcyZWVhYzRlYjEwYzc0YTfIA2g8Y29yZTo6Y2hhcjo6RXNjYXBlRGVmYXVsdCBhcyBjb3JlOjppdGVyOjp0cmFpdHM6OmV4YWN0X3NpemU6OkV4YWN0U2l6ZUl0ZXJhdG9yPjo6bGVuOjpoZGNhMTBiMjY1MWUxNzYwMckDLGNvcmU6OmZtdDo6Rm9ybWF0dGVyOjpuZXc6OmhjZWEwZjM4OTQ5MTJhMGJkygM1Y29yZTo6Zm10OjpGb3JtYXR0ZXI6OmRlYnVnX3N0cnVjdDo6aDA2ZWQxZTIyMWQwZDE2YjfLAzNjb3JlOjpmbXQ6OkZvcm1hdHRlcjo6ZGVidWdfbGlzdDo6aGM3MTQwNjA3MWQ2N2IyNDbMAy5zdGQ6OnBhbmlja2luZzo6YmVnaW5fcGFuaWM6OmgwZDllYjIxZmU5NzBmMDAxzQNaaHRtbDVldmVyOjp0cmVlX2J1aWxkZXI6OlRyZWVCdWlsZGVyPEhhbmRsZSxTaW5rPjo6aW5zZXJ0X2FwcHJvcHJpYXRlbHk6OmhhODM1NTAwNjVmY2ZlYzUyzgM7aHRtbDVldmVyOjp1dGlsOjpzdHI6Omxvd2VyX2FzY2lpX2xldHRlcjo6aGJjMzVlNzNlNjZiZmQzM2PPAy5zdGQ6OnBhbmlja2luZzo6YmVnaW5fcGFuaWM6Omg3OWMyOGUzYjkxYzEzNzNk0ANYY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGNvcmU6Om9wdGlvbjo6T3B0aW9uPGFsbG9jOjpzdHJpbmc6OlN0cmluZz4+OjpoMjIwYWNmNmFiNjcyMGNmNNEDNWRsbWFsbG9jOjpkbG1hbGxvYzo6U2VnbWVudDo6aG9sZHM6OmgwNmFlODFiYWZmNzU0YjM20gMSX193YmluZGdlbl9yZWFsbG9j0wNCZGxtYWxsb2M6OmRsbWFsbG9jOjpDaHVuazo6c2V0X2ZyZWVfd2l0aF9waW51c2U6OmgyYzdkOWY1OTJjOWMxNjM21ANOY29yZTo6Zm10OjpudW06OmltcDo6PGltcGwgY29yZTo6Zm10OjpEaXNwbGF5IGZvciBpMzI+OjpmbXQ6OmhjNGY2MTQ3MjA1NTg4Nzcy1QMwPCZUIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmgzYzUwZDJkYzBhNzc5NDMy1gNbPGh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjp0eXBlczo6SW5zZXJ0aW9uTW9kZSBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoN2M5YmI1MWZiZTJjZTQwY9cDWTxodG1sNWV2ZXI6OnRyZWVfYnVpbGRlcjo6dHlwZXM6OlNwbGl0U3RhdHVzIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmhiZGM0YTkxYjYyYzdiODAw2ANHPHN0ZDo6aW86OmVycm9yOjpFcnJvcktpbmQgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aDliNDQ3ZTY2ZWIzYTgzMjTZA0JkbG1hbGxvYzo6ZGxtYWxsb2M6OkNodW5rOjpzZXRfaW51c2VfYW5kX3BpbnVzZTo6aDdmYWMyMzI2ZjQ3MDAwNzXaAzloYXNoYnJvd246OnJhdzo6RmFsbGliaWxpdHk6OmFsbG9jX2Vycjo6aDQxMmI4MGFjOTMzMTZhMWLbA0ljb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8YWxsb2M6OnN0cmluZzo6RnJvbVV0ZjhFcnJvcj46Omg1ZGYwZWY2YjFmZjZlNzU13ANCY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGFsbG9jOjpzdHJpbmc6OlN0cmluZz46OmgyMmUzNDEyODZmNzBlYzJj3QM3aHRtbDVldmVyOjp1dGlsOjpzdHI6OmlzX2FzY2lpX2FsbnVtOjpoOWIwNjE5NmI5NDkzNTIzMt4DMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoNmQ0NDEzOWUzNTAxZTJkY98DQmNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxhbGxvYzo6c3RyaW5nOjpTdHJpbmc+OjpoZWUyYmU4NmM3Mzc0YWY2YuADvwFjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8PGFsbG9jOjpib3hlZDo6Qm94PGR5biBjb3JlOjplcnJvcjo6RXJyb3IrY29yZTo6bWFya2VyOjpTeW5jK2NvcmU6Om1hcmtlcjo6U2VuZD4gYXMgY29yZTo6Y29udmVydDo6RnJvbTxhbGxvYzo6c3RyaW5nOjpTdHJpbmc+Pjo6ZnJvbTo6U3RyaW5nRXJyb3I+OjpoY2NjOWQzMzc1Mjc2Zjk2NuEDNDxib29sIGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aGRhMzk1NzMyODhkZjljNjbiA148c3RkOjpwYW5pY2tpbmc6OmJlZ2luX3BhbmljOjpQYW5pY1BheWxvYWQ8QT4gYXMgY29yZTo6cGFuaWM6OkJveE1lVXA+OjpnZXQ6Omg0NWE2ZWZjYmMyYjlmZjM14wNNaHRtbDVldmVyOjp0b2tlbml6ZXI6OmNoYXJfcmVmOjpDaGFyUmVmVG9rZW5pemVyOjpuYW1lX2J1Zjo6aDRkNmY4MDI4YzdkYzI4MTTkA1FodG1sNWV2ZXI6OnRva2VuaXplcjo6Y2hhcl9yZWY6OkNoYXJSZWZUb2tlbml6ZXI6Om5hbWVfYnVmX211dDo6aDdkOWUxMTU2NWI2YTIwZmLlA1s8aHRtbDVldmVyOjp0b2tlbml6ZXI6OlRva2VuaXplck9wdHMgYXMgY29yZTo6ZGVmYXVsdDo6RGVmYXVsdD46OmRlZmF1bHQ6OmgzNWViOWYzNTI0NmY5Nzhk5gNAaHRtbDVldmVyOjp0b2tlbml6ZXI6OmludGVyZmFjZTo6RG9jdHlwZTo6bmV3OjpoYjhkMDQ0NGNlMDFjOTJlOOcDVjxodG1sNWV2ZXI6OnRva2VuaXplcjo6aW50ZXJmYWNlOjpUYWdLaW5kIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmhiMTVjZDEyMmQ5NjViZWM26ANePHN0ZDo6cGFuaWNraW5nOjpiZWdpbl9wYW5pYzo6UGFuaWNQYXlsb2FkPEE+IGFzIGNvcmU6OnBhbmljOjpCb3hNZVVwPjo6Z2V0OjpoZDc0ZDIxYzc5YThmYjdmM+kDTzx0ZW5kcmlsOjp0ZW5kcmlsOjpTdWJ0ZW5kcmlsRXJyb3IgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aDk4NzkxNDYwNjJiNGNkOGTqAzA8JlQgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGVhOTU5MWMyZDI1N2FiOGXrA0BkbG1hbGxvYzo6ZGxtYWxsb2M6OlRyZWVDaHVuazo6bGVmdG1vc3RfY2hpbGQ6OmgzNzIwMzJlYjkxMzQ1NWQ57ANPaHRtbDVldmVyOjp0b2tlbml6ZXI6OmNoYXJfcmVmOjpDaGFyUmVmVG9rZW5pemVyOjpmaW5pc2hfb25lOjpoYTZhZmI2ZjNhMWM2Y2RmMu0DJ3N0ZDo6YWxsb2M6OnJ1c3Rfb29tOjpoZWM0YzhkNTdkMTA4M2FiM+4DP2RsbWFsbG9jOjpkbG1hbGxvYzo6bGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4OjpoMzVhZjdmODkyNDI2OWY1Nu8DT2RsbWFsbG9jOjpkbG1hbGxvYzo6Q2h1bms6OnNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuazo6aGZjYWIzMzIxODBmZTgxMWLwA1BodG1sNWV2ZXI6OnRva2VuaXplcjo6Y2hhcl9yZWY6OkNoYXJSZWZUb2tlbml6ZXI6OmZpbmlzaF9ub25lOjpoN2ViODMxMjlhZWUyYTAwNvEDPGh0bWw1ZXZlcjo6dXRpbDo6c3RyOjppc19hc2NpaV93aGl0ZXNwYWNlOjpoNjlmZGUyNzlkZWVjNTViZfIDMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoODQwMDY3YTRmODkyNDllYfMDVmh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlcjxIYW5kbGUsU2luaz46OnN0ZXA6OmNsb3NlX2xpc3Q6Omg2ZWY1NTE0ZWUyYTE2NzYx9AMvZGxtYWxsb2M6OmRsbWFsbG9jOjphbGlnbl91cDo6aDc3ZWRkOWE5NWRjZDczMmL1Aw5fX3J1c3RfcmVhbGxvY/YDD19fd2JpbmRnZW5fZnJlZfcDMGRsbWFsbG9jOjpkbG1hbGxvYzo6bGVmdF9iaXRzOjpoNjk0NWM5ODgwZGJjY2I1YfgDRTxjb3JlOjpjZWxsOjpCb3Jyb3dFcnJvciBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoZmRhY2JjMDE0YzExYWI0ZPkDSDxjb3JlOjpjZWxsOjpCb3Jyb3dNdXRFcnJvciBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoYzFhZjk2YjE2NzVlNTBhZfoDMmNvcmU6OmZtdDo6Rm9ybWF0dGVyOjp3cml0ZV9zdHI6Omg2MDE4YTljYWNiY2U2ODYw+wM+PGNvcmU6OmZtdDo6RXJyb3IgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aDM4YzQ2MmMwNTYxODQxMzD8AzA8JlQgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aDA0Yjc1NDRiOTYwM2M0Yjj9Ay5jb3JlOjpzdHI6OnNsaWNlX2Vycm9yX2ZhaWw6Omg3NTZlZTcwYWQxMjdkZWVl/gMMX19ydXN0X2FsbG9j/wMTX19ydXN0X2FsbG9jX3plcm9lZIAERTxhbGxvYzo6c3RyaW5nOjpTdHJpbmcgYXMgY29yZTo6Zm10OjpEaXNwbGF5Pjo6Zm10OjpoYjJjODFjNzc3MmExMDNkZIEEMjwmVCBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6Omg0MTcxOTkxMjQ2YTIxODZhggRDPGFsbG9jOjpzdHJpbmc6OlN0cmluZyBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoYmJmM2U5ZTk0NzlhMjY5YoMEMjwmVCBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6OmhhZTI0OGI1YjkyM2I0ZTQ5hARgPGh0bWw1ZXZlcjo6dHJlZV9idWlsZGVyOjpUcmVlQnVpbGRlck9wdHMgYXMgY29yZTo6ZGVmYXVsdDo6RGVmYXVsdD46OmRlZmF1bHQ6Omg0MGUyYzk0MWNkOTQ4YmIzhQQyPCZUIGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aDFjNWEyNWE2NmFhOGVmYzeGBF08cGFya2luZ19sb3RfY29yZTo6cGFya2luZ19sb3Q6OlRocmVhZERhdGEgYXMgY29yZTo6b3BzOjpkcm9wOjpEcm9wPjo6ZHJvcDo6aDkwMjZjMDllZWFjMjZhM2OHBDA8JlQgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGEwZTA4MTY4ZjdlZGFiYjmIBDI8JlQgYXMgY29yZTo6Zm10OjpEaXNwbGF5Pjo6Zm10OjpoNDA3MTk2MmEyNzE0YWQ0ZokEQzxhbGxvYzo6c3RyaW5nOjpTdHJpbmcgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGJiZjNlOWU5NDc5YTI2OWKKBEU8YWxsb2M6OnN0cmluZzo6U3RyaW5nIGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aGIyYzgxYzc3NzJhMTAzZGSLBGY8c3RkOjpwYW5pY2tpbmc6OmJlZ2luX3BhbmljX2hhbmRsZXI6OlN0clBhbmljUGF5bG9hZCBhcyBjb3JlOjpwYW5pYzo6Qm94TWVVcD46OmdldDo6aDhlYWEwZDY3ZDczYmRkMjOMBD5zdGQ6OnN5czo6d2FzbTo6Y29tbW9uOjpoYXNobWFwX3JhbmRvbV9rZXlzOjpoZDcyNTczZWY4MGNkMmE4No0ENGRsbWFsbG9jOjpkbG1hbGxvYzo6Q2h1bms6OmNpbnVzZTo6aGM1OTQzODZiNmJhN2JjNjOOBDpkbG1hbGxvYzo6ZGxtYWxsb2M6OkNodW5rOjpjbGVhcl9waW51c2U6OmgzNWU2ZDdjOWVmODM1OTdmjwQzZGxtYWxsb2M6OmRsbWFsbG9jOjpDaHVuazo6aW51c2U6OmgwYzNkOTc0OWNjZDliNDkxkAQyPCZUIGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aDgzZDY0ZGFhMDFhNWExMDWRBEQ8Y29yZTo6Zm10OjpBcmd1bWVudHMgYXMgY29yZTo6Zm10OjpEaXNwbGF5Pjo6Zm10OjpoNmYyMzQ2MzU1NjhjZTUxOJIEOGNvcmU6OmZtdDo6Rm9ybWF0dGVyOjpkZWJ1Z19sb3dlcl9oZXg6OmhhMzExNjE1NmQ2YTkyNmQ1kwQ4Y29yZTo6Zm10OjpGb3JtYXR0ZXI6OmRlYnVnX3VwcGVyX2hleDo6aGU0YjliN2JiMzU0YjI1NmKUBA5fX3J1c3RfZGVhbGxvY5UES2NvcmU6OmNtcDo6aW1wbHM6OjxpbXBsIGNvcmU6OmNtcDo6UGFydGlhbEVxIGZvciB1OD46OmVxOjpoMmMyZDUxODkwNzNkMWE4NpYEhwE8cGFya2luZ19sb3RfY29yZTo6dGhyZWFkX3Bhcmtlcjo6aW1wOjpUaHJlYWRQYXJrZXIgYXMgcGFya2luZ19sb3RfY29yZTo6dGhyZWFkX3Bhcmtlcjo6VGhyZWFkUGFya2VyVD46OnByZXBhcmVfcGFyazo6aGNiZjQyODZkNTMzNmI0ODeXBIQBPHBhcmtpbmdfbG90X2NvcmU6OnRocmVhZF9wYXJrZXI6OmltcDo6VGhyZWFkUGFya2VyIGFzIHBhcmtpbmdfbG90X2NvcmU6OnRocmVhZF9wYXJrZXI6OlRocmVhZFBhcmtlclQ+Ojp0aW1lZF9vdXQ6Omg2MjhhZjRkMWYzMDc4ZDZjmAR/PHBhcmtpbmdfbG90X2NvcmU6OnRocmVhZF9wYXJrZXI6OmltcDo6VGhyZWFkUGFya2VyIGFzIHBhcmtpbmdfbG90X2NvcmU6OnRocmVhZF9wYXJrZXI6OlRocmVhZFBhcmtlclQ+OjpwYXJrOjpoMDA3MDYzNmI4YTMyYzBkZJkEhQE8cGFya2luZ19sb3RfY29yZTo6dGhyZWFkX3Bhcmtlcjo6aW1wOjpUaHJlYWRQYXJrZXIgYXMgcGFya2luZ19sb3RfY29yZTo6dGhyZWFkX3Bhcmtlcjo6VGhyZWFkUGFya2VyVD46OnBhcmtfdW50aWw6Omg3YTBlMTk1YWRjNjMzNjg0mgSGATxwYXJraW5nX2xvdF9jb3JlOjp0aHJlYWRfcGFya2VyOjppbXA6OlRocmVhZFBhcmtlciBhcyBwYXJraW5nX2xvdF9jb3JlOjp0aHJlYWRfcGFya2VyOjpUaHJlYWRQYXJrZXJUPjo6dW5wYXJrX2xvY2s6OmhmNTcxMzU3ODI0YWU0N2IzmwQKcnVzdF9wYW5pY5wEWTxzdGQ6OnN5czo6d2FzbTo6b25jZTo6Q29tcGxldGlvbkd1YXJkIGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6OmhlZTI0MWRhZDNjYTc5MTAwnQQwZGxtYWxsb2M6OmRsbWFsbG9jOjpsZWFzdF9iaXQ6OmgzMzA4YWEzYTM5ZmI0ZTExngQ1ZGxtYWxsb2M6OmRsbWFsbG9jOjpDaHVuazo6bW1hcHBlZDo6aDAyMDRkNmEwMWFmNGJhYjKfBFBkbG1hbGxvYzo6ZGxtYWxsb2M6OkNodW5rOjpzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rOjpoZTc5MzYzZmFiMjQ0NTI2MKAEM2RsbWFsbG9jOjpkbG1hbGxvYzo6U2VnbWVudDo6dG9wOjpoMGQ5NmZiNTJiNWUyMjM4Y6EEOzwmbXV0IFcgYXMgY29yZTo6Zm10OjpXcml0ZT46OndyaXRlX2NoYXI6Omg3NmMzNTY2OTAwYjk5NzdlogQ5Y29yZTo6b3BzOjpmdW5jdGlvbjo6Rm5PbmNlOjpjYWxsX29uY2U6OmgzZGM4NjFmZTgyNDNjYTQ2owRBY29yZTo6c2xpY2U6OmluZGV4OjpzbGljZV9zdGFydF9pbmRleF9sZW5fZmFpbDo6aDY1ZjRjNjNjZjljM2ZjYTCkBD9jb3JlOjpzbGljZTo6aW5kZXg6OnNsaWNlX2VuZF9pbmRleF9sZW5fZmFpbDo6aDU5MmM5ZmQ0Mzg0NDRjYWKlBD1jb3JlOjpzbGljZTo6aW5kZXg6OnNsaWNlX2luZGV4X29yZGVyX2ZhaWw6Omg2YjAwNTIwYTY0NzU2NDExpgROY29yZTo6Zm10OjpudW06OmltcDo6PGltcGwgY29yZTo6Zm10OjpEaXNwbGF5IGZvciB1MzI+OjpmbXQ6Omg5MjQyM2M0MzZmYjhlYjZjpwRNY29yZTo6Zm10OjpudW06OmltcDo6PGltcGwgY29yZTo6Zm10OjpEaXNwbGF5IGZvciB1OD46OmZtdDo6aDk3Mzk4NTk1YTYxMjVkMTKoBDdjb3JlOjpmbXQ6OmJ1aWxkZXJzOjpEZWJ1Z1NldDo6ZW50cnk6OmhkNDNhNTBmNGJjZDljYjQ3qQQ6PCZtdXQgVyBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfc3RyOjpoNzQ5YzdiNzUwMzdmNTE0N6oETmNvcmU6OmZtdDo6bnVtOjppbXA6OjxpbXBsIGNvcmU6OmZtdDo6RGlzcGxheSBmb3IgdTY0Pjo6Zm10OjpoNTFjMWNkYmYyMDQ3YzYwM6sEH19fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXKsBBpfX3J1c3RfYWxsb2NfZXJyb3JfaGFuZGxlcq0EMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoYzBlMDA5NzVkNjNmZGEzNK4EMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoYjExOWNlY2FmZjRlNGRiNa8EMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoNGJkMDUzNmJhZGUxYjYxYbAEMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoZjViM2VjMjcyNzEyZjcxYbEEMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoOWI5OGRjOWFmMGFlZWJmZLIEMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoMjMzYjNhMzU1ZTRhZjdlObMEQDx0ZW5kcmlsOjpmbXQ6OlVURjggYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGJjMTI1MDVjNWVkZTMxMGS0BDA8JlQgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGZmYjkyZGNjOTkyMjNhMzC1BDs8Jm11dCBXIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9jaGFyOjpoMDczNzBhZGVmMjk5YWQ0NLYEOzwmbXV0IFcgYXMgY29yZTo6Zm10OjpXcml0ZT46OndyaXRlX2NoYXI6OmhlYmY0OTk1NjBmYWUwNTFjtwQyZGxtYWxsb2M6OmRsbWFsbG9jOjpDaHVuazo6c2l6ZTo6aGMxYzZlZTE4NjJlZDNmNjO4BDRkbG1hbGxvYzo6ZGxtYWxsb2M6OkNodW5rOjpwaW51c2U6OmgxNjA3Mzc1NDQ4MGE0N2JjuQQ5ZGxtYWxsb2M6OmRsbWFsbG9jOjpTZWdtZW50Ojppc19leHRlcm46Omg1Yjg4OGZjMTY5NGFhZGExugQ5ZGxtYWxsb2M6OmRsbWFsbG9jOjpTZWdtZW50OjpzeXNfZmxhZ3M6Omg0MmM0MjViNDM5NzkzMGVluwQwPCZUIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6Omg0ZDNmMWFiZmI3ZDJlMGE5vAQzYWxsb2M6OmFsbG9jOjpoYW5kbGVfYWxsb2NfZXJyb3I6Omg0ZjQ0MGZlMzI2YTQ0NTBkvQQ9YWxsb2M6OmFsbG9jOjpoYW5kbGVfYWxsb2NfZXJyb3I6OnJ0X2Vycm9yOjpoMTRhMTZkZDgzZTY1ZDE5Yr4EMzxzdHIgYXMgY29yZTo6Zm10OjpEaXNwbGF5Pjo6Zm10OjpoN2RjYjZlZGEwZjllMTVlMr8EMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoM2UzZDdmYzVjNTcwMGJiMMAEMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoZjU1ZDM4YTdlODY3ZTI0YcEEB21lbW1vdmXCBAZtZW1jbXDDBAZtZW1zZXTEBAZtZW1jcHnFBElzdGQ6OnN5c19jb21tb246OmJhY2t0cmFjZTo6X19ydXN0X2VuZF9zaG9ydF9iYWNrdHJhY2U6Omg5MjRlZGE4MDE0NGI5NTAxxgQyPGJvb2wgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGFiOWYxNjA5OWM2NWE4MTHHBElzdGQ6OnN5c19jb21tb246OmJhY2t0cmFjZTo6X19ydXN0X2VuZF9zaG9ydF9iYWNrdHJhY2U6Omg4YzE0YWY3MTg2YjgwMmRiyARBc3RkOjpwYW5pY2tpbmc6OnBhbmljX2NvdW50Ojppc196ZXJvX3Nsb3dfcGF0aDo6aGEyNTc0MDYxNDc1MWFiZWTJBEM8c3RkOjppbzo6ZXJyb3I6OkVycm9yIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmhmNmU3MDgxZjBiNzUzMzQ3ygRJc3RkOjpzeXNfY29tbW9uOjpiYWNrdHJhY2U6Ol9fcnVzdF9lbmRfc2hvcnRfYmFja3RyYWNlOjpoNjNhZGFlNWMzMTQ1OGM0YssEC19fcmRsX2FsbG9jzAQ5ZGxtYWxsb2M6OmRsbWFsbG9jOjpDaHVuazo6cGx1c19vZmZzZXQ6Omg4Yzg4MTA2NzE4YjdkYTZlzQQ6ZGxtYWxsb2M6OmRsbWFsbG9jOjpDaHVuazo6bWludXNfb2Zmc2V0OjpoYjZkOTBhNmU4MWIwNDNiYs4ENGRsbWFsbG9jOjpkbG1hbGxvYzo6Q2h1bms6OnRvX21lbTo6aGYyOGUyMzZhNThlNGU3OWXPBDZkbG1hbGxvYzo6ZGxtYWxsb2M6OkNodW5rOjpmcm9tX21lbTo6aDA2MmMwNGIyOGFlOGQxYjLQBDV3YXNtX2JpbmRnZW46Ol9fcnQ6Om1hbGxvY19mYWlsdXJlOjpoMDhjMjRkZTZhMmM3M2RlM9EEDV9fcmRsX2RlYWxsb2PSBDZkbG1hbGxvYzo6ZGxtYWxsb2M6OlRyZWVDaHVuazo6bmV4dDo6aDE4NzNiOWNkN2QzMWE5MDLTBDZkbG1hbGxvYzo6ZGxtYWxsb2M6OlRyZWVDaHVuazo6cHJldjo6aGU5YmE2OTgyNjBkOTVmYjPUBD5jb3JlOjpwYW5pYzo6cGFuaWNfaW5mbzo6UGFuaWNJbmZvOjptZXNzYWdlOjpoY2Q3MWU2ZWIzMmQwNTYzMNUEP2NvcmU6OnBhbmljOjpwYW5pY19pbmZvOjpQYW5pY0luZm86OmxvY2F0aW9uOjpoOThmZjM2NmFlODRjMTA2YdYEQWNvcmU6OnBhbmljOjpwYW5pY19pbmZvOjpQYW5pY0luZm86OmNhbl91bndpbmQ6OmgzZmMzNDZiMTA4MmNkZGJm1wQxPFQgYXMgY29yZTo6YW55OjpBbnk+Ojp0eXBlX2lkOjpoMTljYWZhOGIyNzIwNDk4MtgEODxsb2c6Ok5vcExvZ2dlciBhcyBsb2c6OkxvZz46OmVuYWJsZWQ6OmhlODJhMjcxYzk2MTYxMjIx2QRlPG1hcmt1cDVldmVyOjpMb2NhbE5hbWVTdGF0aWNTZXQgYXMgc3RyaW5nX2NhY2hlOjpzdGF0aWNfc2V0czo6U3RhdGljQXRvbVNldD46OmdldDo6aDQ5ZWMxZmU2ZDk2N2I1YTLaBGI8bWFya3VwNWV2ZXI6OlByZWZpeFN0YXRpY1NldCBhcyBzdHJpbmdfY2FjaGU6OnN0YXRpY19zZXRzOjpTdGF0aWNBdG9tU2V0Pjo6Z2V0OjpoMjgwMDg0NjAwNTQzNWQ1YtsEZTxtYXJrdXA1ZXZlcjo6TmFtZXNwYWNlU3RhdGljU2V0IGFzIHN0cmluZ19jYWNoZTo6c3RhdGljX3NldHM6OlN0YXRpY0F0b21TZXQ+OjpnZXQ6OmhhNGUyOWVkYzNkNDRlNjFm3ARFcGFya2luZ19sb3RfY29yZTo6dGhyZWFkX3Bhcmtlcjo6aW1wOjp0aHJlYWRfeWllbGQ6Omg5Y2Y4YzY2Y2EwNzU5N2Zk3QQxPFQgYXMgY29yZTo6YW55OjpBbnk+Ojp0eXBlX2lkOjpoYWMyYjVhNzY1M2E1Y2I2ZN4EMWluc3RhbnQ6Ondhc206OlN5c3RlbVRpbWU6Om5vdzo6aGQwMzZhNTM3OWRmNDNhYWXfBDE8VCBhcyBjb3JlOjphbnk6OkFueT46OnR5cGVfaWQ6OmgyNGM4YzRiYzg2NzAzZDAz4AQxPFQgYXMgY29yZTo6YW55OjpBbnk+Ojp0eXBlX2lkOjpoMzVjMGI2MGI2YTVmZTA2YuEEMTxUIGFzIGNvcmU6OmFueTo6QW55Pjo6dHlwZV9pZDo6aGQzYThjYTg0MmM3NzhmODTiBCZzdGQ6OnByb2Nlc3M6OmFib3J0OjpoYzNhMjVkZTQ1NDcyMDc0YuMEEl9fcnVzdF9zdGFydF9wYW5pY+QEPGRsbWFsbG9jOjpkbG1hbGxvYzo6Q2h1bms6OmZlbmNlcG9zdF9oZWFkOjpoZmQyMDRlODYyOTE0NTVmOeUEOGRsbWFsbG9jOjpkbG1hbGxvYzo6Q2h1bms6Om1lbV9vZmZzZXQ6Omg4MGYyOThkMmVkN2Q2ZmZj5gQ3ZGxtYWxsb2M6OmRsbWFsbG9jOjpUcmVlQ2h1bms6OmNodW5rOjpoNjcyMGJmMTBmZWI0NTVlZOcESDxkbG1hbGxvYzo6c3lzOjpTeXN0ZW0gYXMgZGxtYWxsb2M6OkFsbG9jYXRvcj46OnJlbWFwOjpoNzU1MWQ2ZDFmM2Y1OTYwNegETDxkbG1hbGxvYzo6c3lzOjpTeXN0ZW0gYXMgZGxtYWxsb2M6OkFsbG9jYXRvcj46OmZyZWVfcGFydDo6aGM3YTFmOWU1MTg3YWM3YmLpBEc8ZGxtYWxsb2M6OnN5czo6U3lzdGVtIGFzIGRsbWFsbG9jOjpBbGxvY2F0b3I+OjpmcmVlOjpoZDBkMGY2Y2Y2ZmY3MGQyOOoEUzxkbG1hbGxvYzo6c3lzOjpTeXN0ZW0gYXMgZGxtYWxsb2M6OkFsbG9jYXRvcj46OmNhbl9yZWxlYXNlX3BhcnQ6Omg5MzlhYTNiYWIyNGJiYWIw6wRSPGRsbWFsbG9jOjpzeXM6OlN5c3RlbSBhcyBkbG1hbGxvYzo6QWxsb2NhdG9yPjo6YWxsb2NhdGVzX3plcm9zOjpoNjFlMDg1NWU3MDIwN2U2YuwETDxkbG1hbGxvYzo6c3lzOjpTeXN0ZW0gYXMgZGxtYWxsb2M6OkFsbG9jYXRvcj46OnBhZ2Vfc2l6ZTo6aDcwNTc5YzY5YTk2NWZmMzftBDE8VCBhcyBjb3JlOjphbnk6OkFueT46OnR5cGVfaWQ6Omg2MTEyOWZiNjVjNGQzNjll7gRMY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPHN0ZDo6dGhyZWFkOjpsb2NhbDo6QWNjZXNzRXJyb3I+OjpoOTBhMzkxOTNlNTIzNjZkNe8ERGNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxjb3JlOjpjZWxsOjpCb3Jyb3dFcnJvcj46OmhjZDE0ZDU0ZTBlZjJkZDRk8ARzY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPDxjb3JlOjpjZWxsOjpSZWZDZWxsPFQ+IGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OkJvcnJvd2VkUGxhY2Vob2xkZXI+OjpoODU2ODUzMTk5NmEyYjY5YvEET2NvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTwmbWFya3VwNWV2ZXI6OmludGVyZmFjZTo6QXR0cmlidXRlPjo6aDQ0ZmY1MDAzMDZmZDJhMGbyBE5jb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8dGVuZHJpbDo6dGVuZHJpbDo6U3VidGVuZHJpbEVycm9yPjo6aGZlNTFhM2Y2ZjY5ZjVkZTbzBE5jb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8JmFsbG9jOjpyYzo6UmM8Y29yZTo6cmNkb206Ok5vZGU+Pjo6aGY4YmQzYmU1ZjExNDE5MmP0BERjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8Y29yZTo6Y2VsbDo6Qm9ycm93RXJyb3I+OjpoY2QxNGQ1NGUwZWYyZGQ0ZPUEPWNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxjb3JlOjpmbXQ6OkVycm9yPjo6aDc1ZmIxZDZjNmE4YjgyNzT2BEdjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8Jm11dCBhbGxvYzo6c3RyaW5nOjpTdHJpbmc+OjpoYzY3ZGJiNzg3NjUxYTQzY/cEMWNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTwmdTMyPjo6aGI1OTQ3ZDUwYTQ2NjQ3ODn4BE9jb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8Jm1hcmt1cDVldmVyOjppbnRlcmZhY2U6OkF0dHJpYnV0ZT46Omg0MDhkYzNhM2VlNzRmOGM3+QRbY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPCZ0ZW5kcmlsOjp0ZW5kcmlsOjpUZW5kcmlsPHRlbmRyaWw6OmZtdDo6VVRGOD4+OjpoYzNjY2M1ODcxN2M4ZGY2Y/oEMWNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxib29sPjo6aDBjN2MwZjE2M2ExNjdkM2P7BFNjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8Jmh0bWw1ZXZlcjo6dG9rZW5pemVyOjpzdGF0ZXM6OlJhd0tpbmQ+OjpoMDhjN2U4MmUzYjUzY2ZhOfwEUmNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTwmaHRtbDVldmVyOjp0b2tlbml6ZXI6OmludGVyZmFjZTo6VGFnPjo6aDA0MDVmMTA1ZDc3YWJiMTf9BDdjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8bG9nOjpMZXZlbD46Omg2MjY5ZDhjYWUyNGQxOWY1/gQ0PGxvZzo6Tm9wTG9nZ2VyIGFzIGxvZzo6TG9nPjo6bG9nOjpoYTZiMGJlNmZlZWM1MjAyZf8ENjxsb2c6Ok5vcExvZ2dlciBhcyBsb2c6OkxvZz46OmZsdXNoOjpoM2MwMjQ1ODUwZjYwODljN4AFhAFjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8JmFsbG9jOjpjb2xsZWN0aW9uczo6dmVjX2RlcXVlOjpWZWNEZXF1ZTx0ZW5kcmlsOjp0ZW5kcmlsOjpUZW5kcmlsPHRlbmRyaWw6OmZtdDo6VVRGOD4+Pjo6aDU0ODVlMWIxNzFjNjFjOTGBBWRjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8JnN0cmluZ19jYWNoZTo6YXRvbTo6QXRvbTxtYXJrdXA1ZXZlcjo6UHJlZml4U3RhdGljU2V0Pj46OmgxOWNjMDBlYmRmM2VjMzNlggVbY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPCZ0ZW5kcmlsOjp0ZW5kcmlsOjpUZW5kcmlsPHRlbmRyaWw6OmZtdDo6VVRGOD4+OjpoNjI4ODg5YzY0MGVjZTVkNIMFXGNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxzdGQ6OnBhbmlja2luZzo6YmVnaW5fcGFuaWM6OlBhbmljUGF5bG9hZDwmc3RyPj46OmhkYWJkNjcxMmI1MTJkZGEwhAUxY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPCZzdHI+OjpoYjFmOTFjZWZlYTlkYzE0MYUFfjxwYXJraW5nX2xvdF9jb3JlOjp0aHJlYWRfcGFya2VyOjppbXA6OlRocmVhZFBhcmtlciBhcyBwYXJraW5nX2xvdF9jb3JlOjp0aHJlYWRfcGFya2VyOjpUaHJlYWRQYXJrZXJUPjo6bmV3OjpoODcxNmVjZjQ5NDA0OWQxNYYFaWNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTwmbXV0IHN0ZDo6aW86OldyaXRlOjp3cml0ZV9mbXQ6OkFkYXB0ZXI8YWxsb2M6OnZlYzo6VmVjPHU4Pj4+OjpoMDU0ZmU1ZmRmNGZjMDliZYcFLHN0ZDo6ZnM6Ok9wZW5PcHRpb25zOjpuZXc6Omg0NTM3YzY0OGFlYzI1ZTRhiAUyY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPHVzaXplPjo6aDg2ZmRmYzMwOWFkNzEyODaJBW9jb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8JmNvcmU6Oml0ZXI6OmFkYXB0ZXJzOjpjb3BpZWQ6OkNvcGllZDxjb3JlOjpzbGljZTo6aXRlcjo6SXRlcjx1OD4+Pjo6aDAxOTk1ZmNmMzc5NjFmZDUA+4CAgAAJcHJvZHVjZXJzAghsYW5ndWFnZQEEUnVzdAAMcHJvY2Vzc2VkLWJ5AwVydXN0Yx0xLjcwLjAgKDkwYzU0MTgwNiAyMDIzLTA1LTMxKQZ3YWxydXMGMC4xOS4wDHdhc20tYmluZGdlbhIwLjIuNzggKDdmODIwZGI0YikArICAgAAPdGFyZ2V0X2ZlYXR1cmVzAisPbXV0YWJsZS1nbG9iYWxzKwhzaWduLWV4dA==", + ), + (c) => c.charCodeAt(0), + ); + + const { instance, module } = await load(input, imports); + + wasm = instance.exports; + init.__wbindgen_wasm_module = module; + + return wasm; +} + +export default init; diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/deno-dom-wasm-noinit.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/deno-dom-wasm-noinit.ts similarity index 100% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/deno-dom-wasm-noinit.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/deno-dom-wasm-noinit.ts diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/api.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/api.ts similarity index 100% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/api.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/api.ts diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/constructor-lock.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/constructor-lock.ts similarity index 100% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/constructor-lock.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/constructor-lock.ts diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/deserialize.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/deserialize.ts similarity index 93% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/deserialize.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/deserialize.ts index eb7ae21b575..1a1ec337148 100644 --- a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/deserialize.ts +++ b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/deserialize.ts @@ -13,8 +13,11 @@ export function nodesFromString(html: string): Node { return node; } -export function fragmentNodesFromString(html: string): Node { - const parsed = JSON.parse(parseFrag(html)); +export function fragmentNodesFromString( + html: string, + contextLocalName: string, +): Node { + const parsed = JSON.parse(parseFrag(html, contextLocalName)); const node = nodeFromArray(parsed, null); return node; diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/document-fragment.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/document-fragment.ts similarity index 97% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/document-fragment.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/document-fragment.ts index 7c74948bf5e..074cb16111b 100644 --- a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/document-fragment.ts +++ b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/document-fragment.ts @@ -38,6 +38,10 @@ export class DocumentFragment extends Node { return elements[elements.length - 1] ?? null; } + override _shallowClone(): DocumentFragment { + return new DocumentFragment(); + } + append(...nodes: (Node | string)[]) { const mutator = this._getChildNodesMutator(); mutator.push(...nodesAndTextNodes(nodes, this)); diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/document.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/document.ts similarity index 98% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/document.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/document.ts index 382a2eb6d18..59c11d2d690 100644 --- a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/document.ts +++ b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/document.ts @@ -289,7 +289,10 @@ export class Document extends Node { querySelectorAll(selectors: string): NodeList { const nodeList = new NodeList(); const mutator = nodeList[nodeListMutatorSym](); - mutator.push(...this._nwapi.select(selectors, this)); + + for (const match of this._nwapi.select(selectors, this)) { + mutator.push(match); + } return nodeList; } diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/dom-parser.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/dom-parser.ts similarity index 100% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/dom-parser.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/dom-parser.ts diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/element.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/element.ts similarity index 89% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/element.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/element.ts index 903f7fc9ac5..74aea0d3604 100644 --- a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/element.ts +++ b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/element.ts @@ -4,9 +4,8 @@ import { Node, nodesAndTextNodes, NodeType } from "./node.ts"; import { NodeList, nodeListMutatorSym } from "./node-list.ts"; import { HTMLCollection } from "./html-collection.ts"; import { - getElementAttributesString, getElementsByClassName, - getInnerHtmlFromNodes, + getOuterOrInnerHtml, insertBeforeAfter, } from "./utils.ts"; import UtilTypes from "./utils-types.ts"; @@ -330,7 +329,8 @@ export class NamedNodeMap { const attribute = Object .keys(map) - .filter((attribute) => map[attribute] !== undefined)[index]; + .filter((attribute) => map[attribute] !== undefined)[index] + ?.slice(1); // Remove "a" for safeAttrName return this[getNamedNodeMapAttrNodeSym](attribute); }; #onAttrNodeChange: (attr: string, value: string | null) => void; @@ -354,12 +354,13 @@ export class NamedNodeMap { #ownerElement: Element | null = null; [getNamedNodeMapAttrNodeSym](attribute: string): Attr { - let attrNode = this.#attrNodeCache[attribute]; + const safeAttrName = "a" + attribute; + let attrNode = this.#attrNodeCache[safeAttrName]; if (!attrNode) { - attrNode = this.#attrNodeCache[attribute] = new Attr( + attrNode = this.#attrNodeCache[safeAttrName] = new Attr( this, attribute, - this.#map[attribute] as string, + this.#map[safeAttrName] as string, CTOR_KEY, ); attrNode[setNamedNodeMapOwnerElementSym](this.#ownerElement); @@ -373,7 +374,7 @@ export class NamedNodeMap { for (const [name, value] of Object.entries(this.#map)) { if (value !== undefined) { - names.push(name); + names.push(name.slice(1)); // Remove "a" for safeAttrName } } @@ -381,11 +382,13 @@ export class NamedNodeMap { } [getNamedNodeMapValueSym](attribute: string): string | undefined { - return this.#map[attribute]; + const safeAttrName = "a" + attribute; + return this.#map[safeAttrName]; } [setNamedNodeMapValueSym](attribute: string, value: string, bubble = false) { - if (this.#map[attribute] === undefined) { + const safeAttrName = "a" + attribute; + if (this.#map[safeAttrName] === undefined) { this.#length++; if (this.#length > this.#capacity) { @@ -395,11 +398,11 @@ export class NamedNodeMap { get: NamedNodeMap.#indexedAttrAccess.bind(this, this.#map, index), }); } - } else if (this.#attrNodeCache[attribute]) { - this.#attrNodeCache[attribute]![setAttrValueSym](value); + } else if (this.#attrNodeCache[safeAttrName]) { + this.#attrNodeCache[safeAttrName]![setAttrValueSym](value); } - this.#map[attribute] = value; + this.#map[safeAttrName] = value; if (bubble) { this.#onAttrNodeChange(attribute, value); @@ -411,15 +414,16 @@ export class NamedNodeMap { * an element */ [removeNamedNodeMapAttrSym](attribute: string) { - if (this.#map[attribute] !== undefined) { + const safeAttrName = "a" + attribute; + if (this.#map[safeAttrName] !== undefined) { this.#length--; - this.#map[attribute] = undefined; + this.#map[safeAttrName] = undefined; this.#onAttrNodeChange(attribute, null); - const attrNode = this.#attrNodeCache[attribute]; + const attrNode = this.#attrNodeCache[safeAttrName]; if (attrNode) { attrNode[setNamedNodeMapOwnerElementSym](null); - this.#attrNodeCache[attribute] = undefined; + this.#attrNodeCache[safeAttrName] = undefined; } } } @@ -445,7 +449,8 @@ export class NamedNodeMap { } getNamedItem(attribute: string): Attr | null { - if (this.#map[attribute] !== undefined) { + const safeAttrName = "a" + attribute; + if (this.#map[safeAttrName] !== undefined) { return this[getNamedNodeMapAttrNodeSym](attribute); } @@ -457,19 +462,21 @@ export class NamedNodeMap { throw new DOMException("Attribute already in use"); } - const previousAttr = this.#attrNodeCache[attrNode.name]; + const safeAttrName = "a" + attrNode.name; + const previousAttr = this.#attrNodeCache[safeAttrName]; if (previousAttr) { previousAttr[setNamedNodeMapOwnerElementSym](null); - this.#map[attrNode.name] = undefined; + this.#map[safeAttrName] = undefined; } attrNode[setNamedNodeMapOwnerElementSym](this.#ownerElement); - this.#attrNodeCache[attrNode.name] = attrNode; + this.#attrNodeCache[safeAttrName] = attrNode; this[setNamedNodeMapValueSym](attrNode.name, attrNode.value, true); } removeNamedItem(attribute: string): Attr { - if (this.#map[attribute] !== undefined) { + const safeAttrName = "a" + attribute; + if (this.#map[safeAttrName] !== undefined) { const attrNode = this[getNamedNodeMapAttrNodeSym](attribute); this[removeNamedNodeMapAttrSym](attribute); return attrNode; @@ -564,36 +571,7 @@ export class Element extends Node { } get outerHTML(): string { - const tagName = this.tagName.toLowerCase(); - let out = "<" + tagName; - - out += getElementAttributesString(this); - - // Special handling for void elements - switch (tagName) { - case "area": - case "base": - case "br": - case "col": - case "embed": - case "hr": - case "img": - case "input": - case "link": - case "meta": - case "param": - case "source": - case "track": - case "wbr": - out += ">"; - break; - - default: - out += ">" + this.innerHTML + ``; - break; - } - - return out; + return getOuterOrInnerHtml(this, true); } set outerHTML(html: string) { @@ -601,7 +579,7 @@ export class Element extends Node { } get innerHTML(): string { - return getInnerHtmlFromNodes(this.childNodes, this.tagName); + return getOuterOrInnerHtml(this, false); } set innerHTML(html: string) { @@ -615,8 +593,10 @@ export class Element extends Node { // Parse HTML into new children if (html.length) { - const parsed = fragmentNodesFromString(html); - mutator.push(...parsed.childNodes[0].childNodes); + const parsed = fragmentNodesFromString(html, this.localName); + for (const child of parsed.childNodes[0].childNodes) { + mutator.push(child); + } for (const child of this.childNodes) { child._setParent(this); @@ -768,7 +748,10 @@ export class Element extends Node { const nodeList = new NodeList(); const mutator = nodeList[nodeListMutatorSym](); - mutator.push(...this.ownerDocument!._nwapi.select(selectors, this)); + + for (const match of this.ownerDocument!._nwapi.select(selectors, this)) { + mutator.push(match); + } return nodeList; } @@ -777,6 +760,21 @@ export class Element extends Node { return this.ownerDocument!._nwapi.match(selectorString, this); } + closest(selectorString: string): Element | null { + const { match } = this.ownerDocument!._nwapi; // See note below + // deno-lint-ignore no-this-alias + let el: Element | null = this; + do { + // Note: Not using `el.matches(selectorString)` because on a browser if you override + // `matches`, you *don't* see it being used by `closest`. + if (match(selectorString, el)) { + return el; + } + el = el.parentElement; + } while (el !== null); + return null; + } + // TODO: DRY!!! getElementById(id: string): Element | null { for (const child of this.childNodes) { diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/elements/html-template-element.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/elements/html-template-element.ts similarity index 93% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/elements/html-template-element.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/elements/html-template-element.ts index 8b164321c35..ff2988d1d9e 100644 --- a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/elements/html-template-element.ts +++ b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/elements/html-template-element.ts @@ -2,7 +2,7 @@ import { Node } from "../node.ts"; import { Element } from "../element.ts"; import { Document } from "../document.ts"; import { DocumentFragment } from "../document-fragment.ts"; -import { getElementAttributesString, getInnerHtmlFromNodes } from "../utils.ts"; +import { getElementAttributesString, getOuterOrInnerHtml } from "../utils.ts"; import { fragmentNodesFromString } from "../../deserialize.ts"; import { CTOR_KEY } from "../../constructor-lock.ts"; @@ -72,7 +72,7 @@ export class HTMLTemplateElement extends Element { } get innerHTML(): string { - return getInnerHtmlFromNodes(this.content.childNodes, "template"); + return getOuterOrInnerHtml(this, false); } // Replace children in the `.content` @@ -89,7 +89,7 @@ export class HTMLTemplateElement extends Element { // Parse HTML into new children if (html.length) { - const parsed = fragmentNodesFromString(html); + const parsed = fragmentNodesFromString(html, this.localName); mutator.push(...parsed.childNodes[0].childNodes); for (const child of content.childNodes) { diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/html-collection.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/html-collection.ts similarity index 100% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/html-collection.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/html-collection.ts diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/node-list.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/node-list.ts similarity index 100% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/node-list.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/node-list.ts diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/node.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/node.ts similarity index 100% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/node.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/node.ts diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/selectors/custom-api.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/selectors/custom-api.ts similarity index 100% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/selectors/custom-api.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/selectors/custom-api.ts diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/selectors/nwsapi-types.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/selectors/nwsapi-types.ts similarity index 100% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/selectors/nwsapi-types.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/selectors/nwsapi-types.ts diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/selectors/nwsapi.js b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/selectors/nwsapi.js similarity index 100% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/selectors/nwsapi.js rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/selectors/nwsapi.js diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/selectors/selectors.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/selectors/selectors.ts similarity index 100% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/selectors/selectors.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/selectors/selectors.ts diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/selectors/sizzle-types.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/selectors/sizzle-types.ts similarity index 100% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/selectors/sizzle-types.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/selectors/sizzle-types.ts diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/selectors/sizzle.js b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/selectors/sizzle.js similarity index 100% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/selectors/sizzle.js rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/selectors/sizzle.js diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/utils-types.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/utils-types.ts similarity index 100% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/utils-types.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/utils-types.ts diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/utils.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/utils.ts similarity index 53% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/utils.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/utils.ts index ea16267aa3e..6d29fdfa8e9 100644 --- a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/dom/utils.ts +++ b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/dom/utils.ts @@ -2,6 +2,7 @@ import { Comment, Node, nodesAndTextNodes, NodeType, Text } from "./node.ts"; import { NodeList } from "./node-list.ts"; import UtilTypes from "./utils-types.ts"; import type { Element } from "./element.ts"; +import type { HTMLTemplateElement } from "./elements/html-template-element.ts"; import type { DocumentFragment } from "./document-fragment.ts"; export function getElementsByClassName( @@ -32,53 +33,126 @@ export function getElementsByClassName( return search; } +function getOuterHTMLOpeningTag(parentElement: Element) { + return "<" + parentElement.localName + + getElementAttributesString(parentElement) + ">"; +} + +const voidElements = new Set([ + "area", + "base", + "br", + "col", + "embed", + "hr", + "img", + "input", + "link", + "meta", + "param", + "source", + "track", + "wbr", +]); + /** - * @param tagName Uppercase tagname like Element.tagName + * .innerHTML/.outerHTML implementation without recursion to avoid stack + * overflows */ -export function getInnerHtmlFromNodes( - nodes: NodeList, - tagName: string, +export function getOuterOrInnerHtml( + parentElement: Element, + asOuterHtml: boolean, ): string { - let out = ""; + let outerHTMLOpeningTag = ""; + let outerHTMLClosingTag = ""; + let innerHTML = ""; - for (const child of nodes) { - switch (child.nodeType) { - case NodeType.ELEMENT_NODE: - out += (child as Element).outerHTML; - break; + if (asOuterHtml) { + outerHTMLOpeningTag = getOuterHTMLOpeningTag(parentElement); + outerHTMLClosingTag = ``; - case NodeType.COMMENT_NODE: - out += ``; - break; + if (voidElements.has(parentElement.localName)) { + return outerHTMLOpeningTag; + } + } + + const initialChildNodes = parentElement.localName === "template" + ? (parentElement as HTMLTemplateElement).content.childNodes + : parentElement.childNodes; + const childNodeDepth = [initialChildNodes]; + const indexDepth = [0]; + const closingTagDepth = [outerHTMLClosingTag]; + let depth = 0; - case NodeType.TEXT_NODE: - // Special handling for rawtext-like elements. - switch (tagName) { - case "STYLE": - case "SCRIPT": - case "XMP": - case "IFRAME": - case "NOEMBED": - case "NOFRAMES": - case "PLAINTEXT": - out += (child as Text).data; - break; - - default: - // escaping: https://html.spec.whatwg.org/multipage/parsing.html#escapingString - out += (child as Text).data - .replace(/&/g, "&") - .replace(/\xA0/g, " ") - .replace(//g, ">"); - break; + depthLoop: + while (depth > -1) { + const child = childNodeDepth[depth][indexDepth[depth]]; + + if (child) { + switch (child.nodeType) { + case NodeType.ELEMENT_NODE: { + innerHTML += getOuterHTMLOpeningTag(child as Element); + const childLocalName = (child as Element).localName; + + // Void elements don't have a closing tag nor print innerHTML + if (!voidElements.has(childLocalName)) { + if (childLocalName === "template") { + childNodeDepth.push( + (child as HTMLTemplateElement).content.childNodes, + ); + } else { + childNodeDepth.push(child.childNodes); + } + indexDepth.push(0); + closingTagDepth.push(``); + depth++; + continue depthLoop; + } + break; } - break; + case NodeType.COMMENT_NODE: + innerHTML += ``; + break; + + case NodeType.TEXT_NODE: + // Special handling for rawtext-like elements. + switch ((child.parentNode! as Element).localName) { + case "style": + case "script": + case "xmp": + case "iframe": + case "noembed": + case "noframes": + case "plaintext": + innerHTML += (child as Text).data; + break; + + default: + // escaping: https://html.spec.whatwg.org/multipage/parsing.html#escapingString + innerHTML += (child as Text).data + .replace(/&/g, "&") + .replace(/\xA0/g, " ") + .replace(//g, ">"); + break; + } + break; + } + } else { + depth--; + + indexDepth.pop(); + childNodeDepth.pop(); + innerHTML += closingTagDepth.pop(); } + + // Go to next child + indexDepth[depth]++; } - return out; + // If innerHTML is requested then the opening tag should be an empty string + return outerHTMLOpeningTag + innerHTML; } // FIXME: This uses the incorrect .attributes implementation, it diff --git a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/parser.ts b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/parser.ts similarity index 74% rename from src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/parser.ts rename to src/vendor/deno.land/x/deno_dom@v0.1.41/src/parser.ts index 11eb50eff62..60524f10d41 100644 --- a/src/vendor/deno.land/x/deno_dom@v0.1.35-alpha/src/parser.ts +++ b/src/vendor/deno.land/x/deno_dom@v0.1.41/src/parser.ts @@ -1,13 +1,13 @@ /** * Parser interface */ -export type Parser = (html: string) => string; +export type Parser = (html: string, contextLocalName?: string) => string; export let parse: Parser = (_html) => { console.error("Error: deno-dom: No parser registered"); Deno.exit(1); }; -export let parseFrag: Parser = (_html) => { +export let parseFrag: Parser = (_html, _contextLocalName) => { console.error("Error: deno-dom: No parser registered"); Deno.exit(1); }; diff --git a/src/vendor/import_map.json b/src/vendor/import_map.json index 7cc87be0a69..0a1b77cc0a2 100644 --- a/src/vendor/import_map.json +++ b/src/vendor/import_map.json @@ -5,43 +5,57 @@ "https://dev.jspm.io/": "../resources/vendor/dev-jspm-io/", "https://deno.land/x/cache@0.2.12/": "../resources/vendor/deno-land/x/cache@0-2-12/", "https://deno.land/std@0.91.0/hash/": "../resources/vendor/deno-land/std@0-91-0/hash/", + "jsr:/@std/archive@^0.224.0/tar": "./jsr.io/@std/archive/0.224.3/tar.ts", + "jsr:/@std/async@^0.224.0": "./jsr.io/@std/async/0.224.2/mod.ts", + "jsr:/@std/bytes@^0.224.0": "./jsr.io/@std/bytes/0.224.0/mod.ts", + "jsr:/@std/collections@^0.224.0": "./jsr.io/@std/collections/0.224.2/mod.ts", + "jsr:/@std/crypto@^0.224.0": "./jsr.io/@std/crypto/0.224.0/mod.ts", + "jsr:/@std/datetime@^0.224.0": "./jsr.io/@std/datetime/0.224.5/mod.ts", + "jsr:/@std/dotenv@^0.224.0": "./jsr.io/@std/dotenv/0.224.2/mod.ts", + "jsr:/@std/csv@^0.224.0": "./jsr.io/@std/csv/0.224.3/mod.ts", + "jsr:/@std/front-matter@^0.224.0": "./jsr.io/@std/front-matter/0.224.3/mod.ts", + "jsr:/@std/jsonc@^0.224.0": "./jsr.io/@std/jsonc/0.224.3/mod.ts", + "jsr:/@std/toml@^0.224.0": "./jsr.io/@std/toml/0.224.1/mod.ts", + "jsr:/@std/yaml@^0.224.0": "./jsr.io/@std/yaml/0.224.3/mod.ts", + "jsr:/@std/flags@^0.224.0": "./jsr.io/@std/flags/0.224.0/mod.ts", + "jsr:/@std/fs@^0.224.0": "./jsr.io/@std/fs/0.224.0/mod.ts", + "jsr:/@std/http@^0.224.0": "./jsr.io/@std/http/0.224.5/mod.ts", + "jsr:/@std/io@^0.224.0": "./jsr.io/@std/io/0.224.8/mod.ts", + "jsr:/@std/log@^0.224.0": "./jsr.io/@std/log/0.224.7/mod.ts", + "jsr:/@std/media-types@^0.224.0": "./jsr.io/@std/media-types/0.224.1/mod.ts", + "jsr:/@std/path@^0.224.0": "./jsr.io/@std/path/0.224.0/mod.ts", + "jsr:/@std/permissions@^0.224.0": "./jsr.io/@std/permissions/0.224.0/mod.ts", + "jsr:/@std/semver@^0.224.0": "./jsr.io/@std/semver/0.224.3/mod.ts", + "jsr:/@std/streams@^0.224.0": "./jsr.io/@std/streams/0.224.5/mod.ts", + "jsr:/@std/uuid@^0.224.0": "./jsr.io/@std/uuid/0.224.3/mod.ts", "https://cdn.skypack.dev/juice@10.0.0": "./cdn.skypack.dev/juice@10.0.0.js", - "io/write_all.ts": "./deno.land/std@0.217.0/io/write_all.ts", + "io/write-all": "./jsr.io/@std/io/0.224.8/write_all.ts", "cliffy/command/mod.ts": "./deno.land/x/cliffy@v1.0.0-rc.3/command/mod.ts", "acorn/walk": "./cdn.skypack.dev/acorn-walk@8.2.0.js", "acorn/acorn": "./cdn.skypack.dev/acorn@8.4.0.js", "acorn-class-fields": "./cdn.skypack.dev/acorn-class-fields@1.0.0.js", "semver/mod.ts": "./deno.land/x/semver@v1.4.0/mod.ts", - "fs/mod.ts": "./deno.land/std@0.217.0/fs/mod.ts", - "yaml/mod.ts": "./deno.land/std@0.217.0/yaml/mod.ts", "cliffy/prompt/mod.ts": "./deno.land/x/cliffy@v1.0.0-rc.3/prompt/mod.ts", - "io/mod.ts": "./deno.land/std@0.217.0/io/mod.ts", "cliffy/table/mod.ts": "./deno.land/x/cliffy@v1.0.0-rc.3/table/mod.ts", "cliffy/command/command.ts": "./deno.land/x/cliffy@v1.0.0-rc.3/command/command.ts", - "fmt/colors.ts": "./deno.land/std@0.217.0/fmt/colors.ts", + "fmt/colors": "./jsr.io/@std/fmt/0.224.0/colors.ts", "cliffy/prompt/select.ts": "./deno.land/x/cliffy@v1.0.0-rc.3/prompt/select.ts", - "fs/expand_glob.ts": "./deno.land/std@0.217.0/fs/expand_glob.ts", - "fs/exists.ts": "./deno.land/std@0.217.0/fs/exists.ts", - "encoding/base64.ts": "./deno.land/std@0.217.0/encoding/base64.ts", - "fs/_is_subdir.ts": "./deno.land/std@0.217.0/fs/_is_subdir.ts", + "encoding/base64": "./jsr.io/@std/encoding/0.224.3/base64.ts", "ansi_up": "./cdn.skypack.dev/ansi_up@v6.0.2.js", "cliffy/ansi/mod.ts": "./deno.land/x/cliffy@v1.0.0-rc.3/ansi/mod.ts", - "io/read_all.ts": "./deno.land/std@0.217.0/io/read_all.ts", - "fs/walk.ts": "./deno.land/std@0.217.0/fs/walk.ts", - "fs/_get_file_info_type.ts": "./deno.land/std@0.217.0/fs/_get_file_info_type.ts", + "io/read-all": "./jsr.io/@std/io/0.224.8/read_all.ts", "events/mod.ts": "./deno.land/x/events@v1.0.0/mod.ts", "moment-guess": "./cdn.skypack.dev/moment-guess@1.2.4.js", - "datetime/mod.ts": "./deno.land/std@0.217.0/datetime/mod.ts", + "datetime/parse": "./jsr.io/@std/datetime/0.224.5/parse.ts", "dayjs/dayjs.min.js": "./cdn.skypack.dev/dayjs@1.8.21/dayjs.min.js", - "deno_dom/deno-dom-wasm-noinit.ts": "./deno.land/x/deno_dom@v0.1.35-alpha/deno-dom-wasm-noinit.ts", - "deno_dom/src/parser.ts": "./deno.land/x/deno_dom@v0.1.35-alpha/src/parser.ts", - "deno_dom/src/dom/dom-parser.ts": "./deno.land/x/deno_dom@v0.1.35-alpha/src/dom/dom-parser.ts", - "deno_dom/src/api.ts": "./deno.land/x/deno_dom@v0.1.35-alpha/src/api.ts", - "deno_dom/src/dom/node.ts": "./deno.land/x/deno_dom@v0.1.35-alpha/src/dom/node.ts", - "streams/mod.ts": "./deno.land/std@0.217.0/streams/mod.ts", - "crypto/mod.ts": "./deno.land/std@0.217.0/crypto/mod.ts", + "deno_dom/deno-dom-wasm-noinit.ts": "./deno.land/x/deno_dom@v0.1.41/deno-dom-wasm-noinit.ts", + "deno_dom/src/parser.ts": "./deno.land/x/deno_dom@v0.1.41/src/parser.ts", + "deno_dom/src/dom/dom-parser.ts": "./deno.land/x/deno_dom@v0.1.41/src/dom/dom-parser.ts", + "deno_dom/src/api.ts": "./deno.land/x/deno_dom@v0.1.41/src/api.ts", + "deno_dom/src/dom/node.ts": "./deno.land/x/deno_dom@v0.1.41/src/dom/node.ts", + "streams/text-line-stream": "./jsr.io/@std/streams/0.224.5/text_line_stream.ts", + "crypto/crypto": "./jsr.io/@std/crypto/0.224.0/crypto.ts", "blueimpMd5": "./cdn.skypack.dev/blueimp-md5@2.19.0.js", - "fs/ensure_dir.ts": "./deno.land/std@0.217.0/fs/ensure_dir.ts", "lodash/cloneDeep.js": "./cdn.skypack.dev/lodash@4.17.21/cloneDeep.js", "lodash/debounce.js": "./cdn.skypack.dev/lodash@4.17.21/debounce.js", "lodash/difference.js": "./cdn.skypack.dev/lodash@4.17.21/difference.js", @@ -58,45 +72,51 @@ "lodash/isEqual.js": "./cdn.skypack.dev/lodash@4.17.21/isEqual.js", "lodash/orderBy.js": "./cdn.skypack.dev/lodash@4.17.21/orderBy.js", "lodash/escape.js": "./cdn.skypack.dev/lodash@4.17.21/escape.js", - "log/logger.ts": "./deno.land/std@0.217.0/log/logger.ts", - "log/base_handler.ts": "./deno.land/std@0.217.0/log/base_handler.ts", - "log/file_handler.ts": "./deno.land/std@0.217.0/log/file_handler.ts", - "flags/mod.ts": "./deno.land/std@0.217.0/flags/mod.ts", - "path/glob_to_regexp.ts": "./deno.land/std@0.217.0/path/glob_to_regexp.ts", - "path/mod.ts": "./deno.land/std@0.217.0/path/mod.ts", - "async/mod.ts": "./deno.land/std@0.217.0/async/mod.ts", - "dotenv/mod.ts": "./deno.land/std@0.217.0/dotenv/mod.ts", + "log/logger": "./jsr.io/@std/log/0.224.7/logger.ts", + "log/base-handler": "./jsr.io/@std/log/0.224.7/base_handler.ts", + "log/file-handler": "./jsr.io/@std/log/0.224.7/file_handler.ts", + "flags": "./jsr.io/@std/flags/0.224.0/mod.ts", + "async": "./jsr.io/@std/async/0.224.2/mod.ts", + "io/iterate-reader": "./jsr.io/@std/io/0.224.8/iterate_reader.ts", + "dotenv": "./jsr.io/@std/dotenv/0.224.2/mod.ts", "scss-parser": "./cdn.skypack.dev/scss-parser@1.0.6.js", - "fmt/printf.ts": "./deno.land/std@0.217.0/fmt/printf.ts", - "yaml/schema.ts": "./deno.land/std@0.217.0/yaml/schema.ts", - "yaml/type.ts": "./deno.land/std@0.217.0/yaml/type.ts", - "yaml/_type/mod.ts": "./deno.land/std@0.217.0/yaml/_type/mod.ts", - "yaml/schema/failsafe.ts": "./deno.land/std@0.217.0/yaml/schema/failsafe.ts", - "log/mod.ts": "./deno.land/std@0.217.0/log/mod.ts", - "path/posix/mod.ts": "./deno.land/std@0.217.0/path/posix/mod.ts", - "testing/asserts.ts": "./deno.land/std@0.217.0/testing/asserts.ts", + "fmt/printf": "./jsr.io/@std/fmt/0.224.0/printf.ts", + "yaml": "./cdn.skypack.dev/js-yaml.js", + "fs/ensure-dir": "./jsr.io/@std/fs/0.224.0/ensure_dir.ts", + "fs/exists": "./jsr.io/@std/fs/0.224.0/exists.ts", + "fs/walk": "./jsr.io/@std/fs/0.224.0/walk.ts", + "fs/expand-glob": "./jsr.io/@std/fs/0.224.0/expand_glob.ts", + "fs/eol": "./jsr.io/@std/fs/0.224.0/eol.ts", + "fs/copy": "./jsr.io/@std/fs/0.224.0/copy.ts", + "fs/move": "./jsr.io/@std/fs/0.224.0/move.ts", + "fs/empty-dir": "./jsr.io/@std/fs/0.224.0/empty_dir.ts", + "io/read-lines": "./jsr.io/@std/io/0.224.8/read_lines.ts", + "log": "./jsr.io/@std/log/0.224.7/mod.ts", + "path": "./jsr.io/@std/path/0.224.0/mod.ts", + "testing/asserts": "./jsr.io/@std/testing/0.224.0/asserts.ts", "observablehq/parser": "./cdn.skypack.dev/@observablehq/parser@4.5.0.js", "media_types/mod.ts": "./deno.land/x/media_types@v2.10.1/mod.ts", - "fs/copy.ts": "./deno.land/std@0.217.0/fs/copy.ts", - "io/read_lines.ts": "./deno.land/std@0.217.0/io/read_lines.ts", + "async/mux-async-iterator": "./jsr.io/@std/async/0.224.2/mux_async_iterator.ts", "xml/mod.ts": "./deno.land/x/xml@2.1.1/mod.ts", - "path/dirname.ts": "./deno.land/std@0.217.0/path/dirname.ts", "xmlp/mod.ts": "./deno.land/x/xmlp@v0.2.8/mod.ts", "cliffy/prompt/confirm.ts": "./deno.land/x/cliffy@v1.0.0-rc.3/prompt/confirm.ts", - "io/copy.ts": "./deno.land/std@0.217.0/io/copy.ts", - "archive/tar.ts": "./deno.land/std@0.217.0/archive/tar.ts", + "io/copy": "./jsr.io/@std/io/0.224.8/copy.ts", + "archive/tar": "./jsr.io/@std/archive/0.225.3/tar.ts", "cliffy/prompt/input.ts": "./deno.land/x/cliffy@v1.0.0-rc.3/prompt/input.ts", - "encoding/hex.ts": "./deno.land/std@0.217.0/encoding/hex.ts", + "encoding/hex": "./jsr.io/@std/encoding/0.224.3/hex.ts", "cliffy/prompt/secret.ts": "./deno.land/x/cliffy@v1.0.0-rc.3/prompt/secret.ts", "another_cookiejar/mod.ts": "./deno.land/x/another_cookiejar@v5.0.3/mod.ts", + "dotenv/stringify": "./jsr.io/@std/dotenv/0.224.2/stringify.ts", "cliffy/command/_errors.ts": "./deno.land/x/cliffy@v1.0.0-rc.3/command/_errors.ts", "https://deno.land/std@0.93.0/path/mod.ts": "./deno.land/std@0.204.0/path/mod.ts", "binary-search-bounds": "./cdn.skypack.dev/binary-search-bounds@2.0.5.js", "slimdom": "./cdn.skypack.dev/slimdom@4.2.0.js", "fontoxpath": "./cdn.skypack.dev/fontoxpath@3.29.1.js", + "https://deno.land/std@0.196.0/console/unicode_width.ts": "./deno.land/std@0.224.0/console/unicode_width.ts", "https://deno.land/std@0.105.0/path/mod.ts": "./deno.land/std@0.217.0/path/mod.ts", "https://cdn.skypack.dev/": "./cdn.skypack.dev/", - "https://deno.land/": "./deno.land/" + "https://deno.land/": "./deno.land/", + "https://jsr.io/": "./jsr.io/" }, "scopes": { "../resources/vendor/dev-jspm-io/": { @@ -205,6 +225,7 @@ "/-/blueimp-md5@v2.19.0-FsBtHB6ITwdC3L5Giq4Q/dist=es2019,mode=imports/optimized/blueimp-md5.js": "./cdn.skypack.dev/-/blueimp-md5@v2.19.0-FsBtHB6ITwdC3L5Giq4Q/dist=es2019,mode=imports/optimized/blueimp-md5.js", "/-/dayjs@v1.8.21-6syVEc6qGP8frQXKlmJD/dist=es2019,mode=imports/optimized/dayjs.js": "./cdn.skypack.dev/-/dayjs@v1.8.21-6syVEc6qGP8frQXKlmJD/dist=es2019,mode=imports/optimized/dayjs.js", "/-/fontoxpath@v3.29.1-a0ohYsVP957eLX7RfgAa/dist=es2019,mode=imports/optimized/fontoxpath.js": "./cdn.skypack.dev/-/fontoxpath@v3.29.1-a0ohYsVP957eLX7RfgAa/dist=es2019,mode=imports/optimized/fontoxpath.js", + "/-/js-yaml@v4.1.0-dDv6O5b7vFYj0Ro3QdID/dist=es2019,mode=imports/optimized/js-yaml.js": "./cdn.skypack.dev/-/js-yaml@v4.1.0-dDv6O5b7vFYj0Ro3QdID/dist=es2019,mode=imports/optimized/js-yaml.js", "/-/juice@v10.0.0-FUuj4gsVBIZ9bgC3rRoH/dist=es2019,mode=imports/optimized/juice.js": "./cdn.skypack.dev/-/juice@v10.0.0-FUuj4gsVBIZ9bgC3rRoH/dist=es2019,mode=imports/optimized/juice.js", "/-/lodash@v4.17.21-K6GEbP02mWFnLA45zAmi/dist=es2019,mode=imports/unoptimized/cloneDeep.js": "./cdn.skypack.dev/-/lodash@v4.17.21-K6GEbP02mWFnLA45zAmi/dist=es2019,mode=imports/unoptimized/cloneDeep.js", "/-/lodash@v4.17.21-K6GEbP02mWFnLA45zAmi/dist=es2019,mode=imports/unoptimized/debounce.js": "./cdn.skypack.dev/-/lodash@v4.17.21-K6GEbP02mWFnLA45zAmi/dist=es2019,mode=imports/unoptimized/debounce.js", @@ -225,6 +246,71 @@ "/-/moment-guess@v1.2.4-bDXl7KQy0hLGNuGhyGb4/dist=es2019,mode=imports/optimized/moment-guess.js": "./cdn.skypack.dev/-/moment-guess@v1.2.4-bDXl7KQy0hLGNuGhyGb4/dist=es2019,mode=imports/optimized/moment-guess.js", "/-/scss-parser@v1.0.6-hrwwdU1eImlkqs8SqYeB/dist=es2019,mode=imports/optimized/scss-parser.js": "./cdn.skypack.dev/-/scss-parser@v1.0.6-hrwwdU1eImlkqs8SqYeB/dist=es2019,mode=imports/optimized/scss-parser.js", "/-/slimdom@v4.2.0-QzuHPU3P67qdOzczKt6u/dist=es2019,mode=imports/optimized/slimdom.js": "./cdn.skypack.dev/-/slimdom@v4.2.0-QzuHPU3P67qdOzczKt6u/dist=es2019,mode=imports/optimized/slimdom.js" + }, + "./jsr.io/": { + "jsr:/@std/io@^0.224.3/buf-reader": "./jsr.io/@std/io/0.224.8/buf_reader.ts", + "jsr:/@std/io@^0.224.3/types": "./jsr.io/@std/io/0.224.8/types.ts", + "jsr:/@std/io@^0.224.3/multi-reader": "./jsr.io/@std/io/0.224.8/multi_reader.ts", + "jsr:/@std/io@^0.224.3/buffer": "./jsr.io/@std/io/0.224.8/buffer.ts", + "jsr:@std/io@^0.224.8/buf-reader": "./jsr.io/@std/io/0.224.8/buf_reader.ts", + "jsr:@std/io@^0.224.8/types": "./jsr.io/@std/io/0.224.8/types.ts", + "jsr:@std/io@^0.224.8/multi-reader": "./jsr.io/@std/io/0.224.8/multi_reader.ts", + "jsr:@std/io@^0.224.8/buffer": "./jsr.io/@std/io/0.224.8/buffer.ts", + "jsr:/@std/internal@^0.224.0/format": "./jsr.io/@std/internal/0.224.0/format.ts", + "jsr:@std/internal@^0.224.0": "./jsr.io/@std/internal/0.224.0/mod.ts", + "jsr:/@std/fmt@^0.224.0/colors": "./jsr.io/@std/fmt/0.224.0/colors.ts", + "jsr:/@std/assert@^0.224.0/assert": "./jsr.io/@std/assert/0.224.0/assert.ts", + "jsr:/@std/encoding@^0.224.0/base64url": "./jsr.io/@std/encoding/0.224.3/base64url.ts", + "jsr:/@std/streams@^0.224.4/text-delimiter-stream": "./jsr.io/@std/streams/0.224.5/text_delimiter_stream.ts", + "jsr:/@std/assert@^0.224.0/assert-exists": "./jsr.io/@std/assert/0.224.0/assert_exists.ts", + "jsr:/@std/toml@^1.0.0-rc.3/parse": "./jsr.io/@std/toml/1.0.1/parse.ts", + "jsr:/@std/yaml@^1.0.0-rc.1/parse": "./jsr.io/@std/yaml/1.0.5/parse.ts", + "jsr:/@std/path@^0.224.0/basename": "./jsr.io/@std/path/0.224.0/basename.ts", + "jsr:/@std/path@^0.224.0/normalize": "./jsr.io/@std/path/0.224.0/normalize.ts", + "jsr:/@std/path@^0.224.0/resolve": "./jsr.io/@std/path/0.224.0/resolve.ts", + "jsr:/@std/path@^0.224.0/constants": "./jsr.io/@std/path/0.224.0/constants.ts", + "jsr:/@std/path@^0.224.0/from-file-url": "./jsr.io/@std/path/0.224.0/from_file_url.ts", + "jsr:/@std/path@^0.224.0/join": "./jsr.io/@std/path/0.224.0/join.ts", + "jsr:/@std/path@^0.224.0/dirname": "./jsr.io/@std/path/0.224.0/dirname.ts", + "jsr:/@std/path@^0.224.0/glob-to-regexp": "./jsr.io/@std/path/0.224.0/glob_to_regexp.ts", + "jsr:/@std/path@^0.224.0/join-globs": "./jsr.io/@std/path/0.224.0/join_globs.ts", + "jsr:/@std/path@^0.224.0/is-glob": "./jsr.io/@std/path/0.224.0/is_glob.ts", + "jsr:/@std/path@^0.224.0/is-absolute": "./jsr.io/@std/path/0.224.0/is_absolute.ts", + "jsr:/@std/encoding@1.0.0-rc.2/base64": "./jsr.io/@std/encoding/1.0.0-rc.2/base64.ts", + "jsr:/@std/path@1.0.0-rc.2/posix/join": "./jsr.io/@std/path/1.0.0-rc.2/posix/join.ts", + "jsr:/@std/path@1.0.0-rc.2/posix/normalize": "./jsr.io/@std/path/1.0.0-rc.2/posix/normalize.ts", + "jsr:/@std/path@1.0.0-rc.2/extname": "./jsr.io/@std/path/1.0.0-rc.2/extname.ts", + "jsr:/@std/path@1.0.0-rc.2/join": "./jsr.io/@std/path/1.0.0-rc.2/join.ts", + "jsr:/@std/path@1.0.0-rc.2/relative": "./jsr.io/@std/path/1.0.0-rc.2/relative.ts", + "jsr:/@std/path@1.0.0-rc.2/resolve": "./jsr.io/@std/path/1.0.0-rc.2/resolve.ts", + "jsr:/@std/path@1.0.0-rc.2/constants": "./jsr.io/@std/path/1.0.0-rc.2/constants.ts", + "jsr:/@std/media-types@^1.0.0-rc.1/content-type": "./jsr.io/@std/media-types/1.0.3/content_type.ts", + "jsr:/@std/streams@^0.224.5/byte-slice-stream": "./jsr.io/@std/streams/0.224.5/byte_slice_stream.ts", + "jsr:/@std/cli@^0.224.7/parse-args": "./jsr.io/@std/cli/0.224.7/parse_args.ts", + "jsr:/@std/fmt@^0.225.4/colors": "./jsr.io/@std/fmt/0.225.6/colors.ts", + "jsr:/@std/fmt@^0.225.4/bytes": "./jsr.io/@std/fmt/0.225.6/bytes.ts", + "jsr:/@std/net@^0.224.3/get-network-address": "./jsr.io/@std/net/0.224.5/get_network_address.ts", + "jsr:/@std/async@^1.0.0-rc.1/delay": "./jsr.io/@std/async/1.0.5/delay.ts", + "jsr:/@std/encoding@1.0.0-rc.2/hex": "./jsr.io/@std/encoding/1.0.0-rc.2/hex.ts", + "jsr:@std/bytes@^1.0.2/copy": "./jsr.io/@std/bytes/1.0.2/copy.ts", + "jsr:@std/bytes@^1.0.2/concat": "./jsr.io/@std/bytes/1.0.2/concat.ts", + "jsr:/@std/json@^1.0.0-rc.1/types": "./jsr.io/@std/json/1.0.0/types.ts", + "jsr:@std/fmt@^1.0.2/colors": "./jsr.io/@std/fmt/1.0.2/colors.ts", + "jsr:@std/io@^0.224.7/write-all": "./jsr.io/@std/io/0.224.8/write_all.ts", + "jsr:@std/fs@^1.0.3/exists": "./jsr.io/@std/fs/1.0.3/exists.ts", + "jsr:/@std/bytes@^1.0.0-rc.3/copy": "./jsr.io/@std/bytes/1.0.2/copy.ts", + "jsr:/@std/bytes@^1.0.0-rc.3/concat": "./jsr.io/@std/bytes/1.0.2/concat.ts", + "jsr:/@std/io@^0.224.1/iterate-reader": "./jsr.io/@std/io/0.224.8/iterate_reader.ts", + "jsr:/@std/io@^0.224.1/types": "./jsr.io/@std/io/0.224.8/types.ts", + "jsr:/@std/io@^0.224.1/to-readable-stream": "./jsr.io/@std/io/0.224.8/to_readable_stream.ts", + "jsr:/@std/io@^0.224.1/buffer": "./jsr.io/@std/io/0.224.8/buffer.ts", + "jsr:/@std/io@^0.224.1/write-all": "./jsr.io/@std/io/0.224.8/write_all.ts", + "jsr:/@std/io@^0.224.1/reader-from-stream-reader": "./jsr.io/@std/io/0.224.8/reader_from_stream_reader.ts", + "jsr:/@std/io@^0.224.1/to-writable-stream": "./jsr.io/@std/io/0.224.8/to_writable_stream.ts", + "jsr:@std/assert@^0.224.0": "./jsr.io/@std/assert/0.224.0/mod.ts", + "jsr:/@std/collections@^1.0.0-rc.1/deep-merge": "./jsr.io/@std/collections/1.0.6/deep_merge.ts", + "jsr:@std/collections@^1.0.5/deep-merge": "./jsr.io/@std/collections/1.0.6/deep_merge.ts", + "jsr:/@std/crypto@^0.224.0/crypto": "./jsr.io/@std/crypto/0.224.0/crypto.ts" } } } diff --git a/src/vendor/deno.land/std@0.217.0/archive/_common.ts b/src/vendor/jsr.io/@std/archive/0.224.3/_common.ts similarity index 64% rename from src/vendor/deno.land/std@0.217.0/archive/_common.ts rename to src/vendor/jsr.io/@std/archive/0.224.3/_common.ts index ab0ddeb7e0d..d3dca7ec8f0 100644 --- a/src/vendor/deno.land/std@0.217.0/archive/_common.ts +++ b/src/vendor/jsr.io/@std/archive/0.224.3/_common.ts @@ -1,41 +1,57 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { PartialReadError } from "../io/buf_reader.ts"; -import type { Reader } from "../io/types.ts"; +import { PartialReadError } from "jsr:/@std/io@^0.224.3/buf-reader"; +import type { Reader } from "jsr:/@std/io@^0.224.3/types"; +/** Base interface for {@linkcode TarMeta} */ export interface TarInfo { + /** + * The underlying raw `st_mode` bits that contain the standard Unix + * permissions for this file/directory. + */ fileMode?: number; + /** + * Data modification time of the file at the time it was archived. It + * represents the integer number of seconds since January 1, 1970, 00:00 UTC. + */ mtime?: number; + /** + * Numeric user ID of the file owner. This is ignored if the operating system + * does not support numeric user IDs. + */ uid?: number; + /** + * Numeric group ID of the file owner. This is ignored if the operating + * system does not support numeric group IDs. + */ gid?: number; + /** The name of the file owner. */ owner?: string; + /** The group that the file owner belongs to. */ group?: string; - type?: string; -} - -export interface TarOptions extends TarInfo { /** - * Filepath of the file to append to the archive + * The type of file archived. + * + * @see {@linkcode FileTypes} */ - filePath?: string; + type?: string; +} +/** Base interface for {@linkcode TarMetaWithLinkName}. */ +export interface TarMeta extends TarInfo { /** - * A Reader of any arbitrary content to append to the archive + * The name of the file, with directory names (if any) preceding the file + * name, separated by slashes. */ - reader?: Reader; - + fileName: string; /** - * Size of the content to be appended. This is only required - * when passing a reader to the archive. + * The size of the file in bytes; for archive members that are symbolic or + * hard links to another file, this field is specified as zero. */ - contentSize?: number; -} - -export interface TarMeta extends TarInfo { - fileName: string; fileSize?: number; } +/** The type of file archived. */ export enum FileTypes { "file" = 0, "link" = 1, @@ -71,7 +87,7 @@ struct posix_header { // byte offset }; */ -export const ustarStructure = [ +export const USTAR_STRUCTURE = [ { field: "fileName", length: 100, @@ -138,7 +154,10 @@ export const ustarStructure = [ }, ] as const; -export type UstarFields = (typeof ustarStructure)[number]["field"]; +/** + * @internal + */ +export type UstarFields = (typeof USTAR_STRUCTURE)[number]["field"]; export async function readBlock( reader: Reader, diff --git a/src/vendor/deno.land/std@0.217.0/archive/tar.ts b/src/vendor/jsr.io/@std/archive/0.224.3/tar.ts similarity index 68% rename from src/vendor/deno.land/std@0.217.0/archive/tar.ts rename to src/vendor/jsr.io/@std/archive/0.224.3/tar.ts index d8b2127eb17..6ef549f8689 100644 --- a/src/vendor/deno.land/std@0.217.0/archive/tar.ts +++ b/src/vendor/jsr.io/@std/archive/0.224.3/tar.ts @@ -32,30 +32,50 @@ import { FileTypes, type TarInfo, type TarMeta, - type TarOptions, - ustarStructure, + USTAR_STRUCTURE, } from "./_common.ts"; -import type { Reader } from "../io/types.ts"; -import { MultiReader } from "../io/multi_reader.ts"; -import { Buffer } from "../io/buffer.ts"; -import { assert } from "../assert/assert.ts"; +import type { Reader } from "jsr:/@std/io@^0.224.3/types"; +import { MultiReader } from "jsr:/@std/io@^0.224.3/multi-reader"; +import { Buffer } from "jsr:/@std/io@^0.224.3/buffer"; import { HEADER_LENGTH } from "./_common.ts"; -export { type TarInfo, type TarMeta, type TarOptions }; +export type { TarInfo, TarMeta }; -const USTAR_MAGIC_HEADER = "ustar\u000000"; +/** Options for {@linkcode Tar.append}. */ +export interface TarOptions extends TarInfo { + /** + * Filepath of the file to append to the archive + */ + filePath?: string; + + /** + * A Reader of any arbitrary content to append to the archive + */ + reader?: Reader; + + /** + * Size of the content to be appended. This is only required + * when passing a reader to the archive. + */ + contentSize?: number; +} + +const USTAR_MAGIC_HEADER = "ustar\u000000" as const; /** * Simple file reader */ class FileReader implements Reader { #file?: Deno.FsFile; + #filePath: string; - constructor(private filePath: string) {} + constructor(filePath: string) { + this.#filePath = filePath; + } - public async read(p: Uint8Array): Promise { + async read(p: Uint8Array): Promise { if (!this.#file) { - this.#file = await Deno.open(this.filePath, { read: true }); + this.#file = await Deno.open(this.#filePath, { read: true }); } const res = await this.#file.read(p); if (res === null) { @@ -67,56 +87,89 @@ class FileReader implements Reader { } /** - * Initialize Uint8Array of the specified length filled with 0 - * @param length + * Pads a number with leading zeros to a specified number of bytes. + * + * @param num The number to pad. + * @param bytes The number of bytes to pad the number to. + * @returns The padded number as a string. */ -function clean(length: number): Uint8Array { - const buffer = new Uint8Array(length); - return buffer; -} - -function pad(num: number, bytes: number, base = 8): string { - const numString = num.toString(base); - return "000000000000".slice(numString.length + 12 - bytes) + numString; +function pad(num: number, bytes: number): string { + return num.toString(8).padStart(bytes, "0"); } /** - * Create header for a file in a tar archive + * Formats the header data for a tar file entry. + * + * @param data The data object containing the values for the tar header fields. + * @returns The formatted header data as a Uint8Array. */ function formatHeader(data: TarData): Uint8Array { const encoder = new TextEncoder(); - const buffer = clean(HEADER_LENGTH); + const buffer = new Uint8Array(HEADER_LENGTH); let offset = 0; - ustarStructure.forEach(function (value) { - const entry = encoder.encode(data[value.field as keyof TarData] || ""); + for (const { field, length } of USTAR_STRUCTURE) { + const entry = encoder.encode(data[field as keyof TarData] || ""); buffer.set(entry, offset); - offset += value.length; // space it out with nulls - }); + offset += length; + } return buffer; } +/** Base interface for {@linkcode TarDataWithSource}. */ export interface TarData { + /** Name of the file, excluding directory names (if any). */ fileName?: string; + /** Directory names preceding the file name (if any). */ fileNamePrefix?: string; + /** + * The underlying raw `st_mode` bits that contain the standard Unix + * permissions for this file/directory. + */ fileMode?: string; + /** + * Numeric user ID of the file owner. This is ignored if the operating system + * does not support numeric user IDs. + */ uid?: string; + /** + * Numeric group ID of the file owner. This is ignored if the operating + * system does not support numeric group IDs. + */ gid?: string; + /** + * The size of the file in bytes; for archive members that are symbolic or + * hard links to another file, this field is specified as zero. + */ fileSize?: string; + /** + * Data modification time of the file at the time it was archived. It + * represents the integer number of seconds since January 1, 1970, 00:00 UTC. + */ mtime?: string; + /** The simple sum of all bytes in the header block */ checksum?: string; + /** + * The type of file archived. + * + * @see {@linkcode FileTypes} + */ type?: string; + /** Ustar magic header */ ustar?: string; + /** The name of the file owner. */ owner?: string; + /** The group that the file owner belongs to. */ group?: string; } +/** Tar data interface for {@linkcode Tar.data}. */ export interface TarDataWithSource extends TarData { /** - * file to read + * Path of the file to read. */ filePath?: string; /** - * buffer to read + * Buffer reader. */ reader?: Reader; } @@ -149,9 +202,9 @@ export interface TarDataWithSource extends TarData { * * @example * ```ts - * import { Tar } from "https://deno.land/std@$STD_VERSION/archive/tar.ts"; - * import { Buffer } from "https://deno.land/std@$STD_VERSION/io/buffer.ts"; - * import { copy } from "https://deno.land/std@$STD_VERSION/io/copy.ts"; + * import { Tar } from "@std/archive/tar"; + * import { Buffer } from "@std/io/buffer"; + * import { copy } from "@std/io/copy"; * * const tar = new Tar(); * @@ -177,8 +230,10 @@ export interface TarDataWithSource extends TarData { * ``` */ export class Tar { + /** Tar data. */ data: TarDataWithSource[]; + /** Constructs a new instance. */ constructor() { this.data = []; } @@ -190,11 +245,10 @@ export class Tar { * directory's contents. Directories and subdirectories will be created automatically * in the archive as required. * - * @param filenameInArchive file name of the content in the archive - * e.g., test.txt; use slash for directory separators - * @param source details of the source of the content including the - * reference to the content itself and potentially any - * related metadata. + * @param filenameInArchive File name of the content in the archive. E.g. + * `test.txt`. Use slash for directory separators. + * @param source Details of the source of the content including the + * reference to the content itself and potentially any related metadata. */ async append(filenameInArchive: string, source: TarOptions) { if (typeof filenameInArchive !== "string") { @@ -203,7 +257,7 @@ export class Tar { let fileName = filenameInArchive; /** - * Ustar format has a limitation of file name length. Specifically: + * Ustar format has a limitation of file name length. Specifically: * 1. File names can contain at most 255 bytes. * 2. File names longer than 100 bytes must be split at a directory separator in two parts, * the first being at most 155 bytes long. So, in most cases file names must be a bit shorter @@ -228,7 +282,9 @@ export class Tar { if (i < 0 || fileName.length > 100) { throw new Error(errMsg); } else { - assert(fileNamePrefix !== undefined); + if (fileNamePrefix === undefined) { + throw new TypeError("File name prefix is undefined"); + } if (fileNamePrefix.length > 155) { throw new Error(errMsg); } @@ -267,7 +323,9 @@ export class Tar { } const fileSize = info?.size ?? source.contentSize; - assert(fileSize !== undefined, "fileSize must be set"); + if (fileSize === undefined) { + throw new TypeError("fileSize must be set"); + } const type = source.type ? FileTypes[source.type as keyof typeof FileTypes] @@ -315,16 +373,20 @@ export class Tar { const headerArr = formatHeader(tarData); readers.push(new Buffer(headerArr)); if (!reader) { - assert(filePath !== undefined); + if (filePath === undefined) { + throw new TypeError("filePath must be defined"); + } reader = new FileReader(filePath); } readers.push(reader); // to the nearest multiple of recordSize - assert(tarData.fileSize !== undefined, "fileSize must be set"); + if (tarData.fileSize === undefined) { + throw new TypeError("fileSize must be set"); + } readers.push( new Buffer( - clean( + new Uint8Array( HEADER_LENGTH - (parseInt(tarData.fileSize, 8) % HEADER_LENGTH || HEADER_LENGTH), ), @@ -333,7 +395,7 @@ export class Tar { }); // append 2 empty records - readers.push(new Buffer(clean(HEADER_LENGTH * 2))); + readers.push(new Buffer(new Uint8Array(HEADER_LENGTH * 2))); return new MultiReader(readers); } } diff --git a/src/vendor/jsr.io/@std/archive/0.225.3/_common.ts b/src/vendor/jsr.io/@std/archive/0.225.3/_common.ts new file mode 100644 index 00000000000..17f071287bb --- /dev/null +++ b/src/vendor/jsr.io/@std/archive/0.225.3/_common.ts @@ -0,0 +1,187 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import { PartialReadError } from "jsr:@std/io@^0.224.8/buf-reader"; +import type { Reader } from "jsr:@std/io@^0.224.8/types"; + +/** + * Base interface for {@linkcode TarMeta}. + * + * @experimental **UNSTABLE**: New API, yet to be vetted. + */ +export interface TarInfo { + /** + * The underlying raw `st_mode` bits that contain the standard Unix + * permissions for this file/directory. + */ + fileMode?: number; + /** + * Data modification time of the file at the time it was archived. It + * represents the integer number of seconds since January 1, 1970, 00:00 UTC. + */ + mtime?: number; + /** + * Numeric user ID of the file owner. This is ignored if the operating system + * does not support numeric user IDs. + */ + uid?: number; + /** + * Numeric group ID of the file owner. This is ignored if the operating + * system does not support numeric group IDs. + */ + gid?: number; + /** The name of the file owner. */ + owner?: string; + /** The group that the file owner belongs to. */ + group?: string; + /** + * The type of file archived. + * + * @see {@linkcode FileTypes} + */ + type?: string; +} + +/** + * Base interface for {@linkcode TarMetaWithLinkName}. + * + * @experimental **UNSTABLE**: New API, yet to be vetted. + */ +export interface TarMeta extends TarInfo { + /** + * The name of the file, with directory names (if any) preceding the file + * name, separated by slashes. + */ + fileName: string; + /** + * The size of the file in bytes; for archive members that are symbolic or + * hard links to another file, this field is specified as zero. + */ + fileSize?: number; +} + +/** The type of file archived. */ +export enum FileTypes { + "file" = 0, + "link" = 1, + "symlink" = 2, + "character-device" = 3, + "block-device" = 4, + "directory" = 5, + "fifo" = 6, + "contiguous-file" = 7, +} + +export const HEADER_LENGTH = 512; + +/* +struct posix_header { // byte offset + char name[100]; // 0 + char mode[8]; // 100 + char uid[8]; // 108 + char gid[8]; // 116 + char size[12]; // 124 + char mtime[12]; // 136 + char chksum[8]; // 148 + char typeflag; // 156 + char linkname[100]; // 157 + char magic[6]; // 257 + char version[2]; // 263 + char uname[32]; // 265 + char gname[32]; // 297 + char devmajor[8]; // 329 + char devminor[8]; // 337 + char prefix[155]; // 345 + // 500 +}; +*/ + +export const USTAR_STRUCTURE = [ + { + field: "fileName", + length: 100, + }, + { + field: "fileMode", + length: 8, + }, + { + field: "uid", + length: 8, + }, + { + field: "gid", + length: 8, + }, + { + field: "fileSize", + length: 12, + }, + { + field: "mtime", + length: 12, + }, + { + field: "checksum", + length: 8, + }, + { + field: "type", + length: 1, + }, + { + field: "linkName", + length: 100, + }, + { + field: "ustar", + length: 8, + }, + { + field: "owner", + length: 32, + }, + { + field: "group", + length: 32, + }, + { + field: "majorNumber", + length: 8, + }, + { + field: "minorNumber", + length: 8, + }, + { + field: "fileNamePrefix", + length: 155, + }, + { + field: "padding", + length: 12, + }, +] as const; + +/** + * @internal + */ +export type UstarFields = (typeof USTAR_STRUCTURE)[number]["field"]; + +export async function readBlock( + reader: Reader, + p: Uint8Array, +): Promise { + let bytesRead = 0; + while (bytesRead < p.length) { + const rr = await reader.read(p.subarray(bytesRead)); + if (rr === null) { + if (bytesRead === 0) { + return null; + } else { + throw new PartialReadError(p.subarray(0, bytesRead)); + } + } + bytesRead += rr; + } + return bytesRead; +} diff --git a/src/vendor/jsr.io/@std/archive/0.225.3/tar.ts b/src/vendor/jsr.io/@std/archive/0.225.3/tar.ts new file mode 100644 index 00000000000..62f4481b273 --- /dev/null +++ b/src/vendor/jsr.io/@std/archive/0.225.3/tar.ts @@ -0,0 +1,485 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +/*! + * Ported and modified from: https://github.com/beatgammit/tar-js and + * licensed as: + * + * (The MIT License) + * + * Copyright (c) 2011 T. Jameson Little + * Copyright (c) 2019 Jun Kato + * Copyright (c) 2018-2024 the Deno authors + * + * 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. + */ + +import { + FileTypes, + type TarInfo, + type TarMeta, + USTAR_STRUCTURE, +} from "./_common.ts"; +import type { Reader } from "jsr:@std/io@^0.224.8/types"; +import { MultiReader } from "jsr:@std/io@^0.224.8/multi-reader"; +import { Buffer } from "jsr:@std/io@^0.224.8/buffer"; +import { HEADER_LENGTH } from "./_common.ts"; + +export type { TarInfo, TarMeta }; + +/** + * Options for {@linkcode Tar.append}. + * + * @experimental **UNSTABLE**: New API, yet to be vetted. + */ +export interface TarOptions extends TarInfo { + /** + * Filepath of the file to append to the archive + */ + filePath?: string; + + /** + * A Reader of any arbitrary content to append to the archive + */ + reader?: Reader; + + /** + * Size of the content to be appended. This is only required + * when passing a reader to the archive. + */ + contentSize?: number; +} + +const USTAR_MAGIC_HEADER = "ustar\u000000" as const; + +/** + * Simple file reader + */ +class FileReader implements Reader { + #file: Deno.FsFile | undefined; + #filePath: string; + + constructor(filePath: string) { + this.#filePath = filePath; + } + + async read(p: Uint8Array): Promise { + if (!this.#file) { + this.#file = await Deno.open(this.#filePath, { read: true }); + } + const res = await this.#file.read(p); + if (res === null) { + this.#file.close(); + this.#file = undefined; + } + return res; + } +} + +/** + * Pads a number with leading zeros to a specified number of bytes. + * + * @param num The number to pad. + * @param bytes The number of bytes to pad the number to. + * @returns The padded number as a string. + */ +function pad(num: number, bytes: number): string { + return num.toString(8).padStart(bytes, "0"); +} + +/** + * Formats the header data for a tar file entry. + * + * @param data The data object containing the values for the tar header fields. + * @returns The formatted header data as a Uint8Array. + */ +function formatHeader(data: TarData): Uint8Array { + const encoder = new TextEncoder(); + const buffer = new Uint8Array(HEADER_LENGTH); + let offset = 0; + for (const { field, length } of USTAR_STRUCTURE) { + const entry = encoder.encode(data[field as keyof TarData] ?? ""); + buffer.set(entry, offset); + offset += length; + } + return buffer; +} + +/** + * Base interface for {@linkcode TarDataWithSource}. + * + * @experimental **UNSTABLE**: New API, yet to be vetted. + */ +export interface TarData { + /** Name of the file, excluding directory names (if any). */ + fileName?: string; + /** Directory names preceding the file name (if any). */ + fileNamePrefix?: string; + /** + * The underlying raw `st_mode` bits that contain the standard Unix + * permissions for this file/directory. + */ + fileMode?: string; + /** + * Numeric user ID of the file owner. This is ignored if the operating system + * does not support numeric user IDs. + */ + uid?: string; + /** + * Numeric group ID of the file owner. This is ignored if the operating + * system does not support numeric group IDs. + */ + gid?: string; + /** + * The size of the file in bytes; for archive members that are symbolic or + * hard links to another file, this field is specified as zero. + */ + fileSize?: string; + /** + * Data modification time of the file at the time it was archived. It + * represents the integer number of seconds since January 1, 1970, 00:00 UTC. + */ + mtime?: string; + /** The simple sum of all bytes in the header block */ + checksum?: string; + /** + * The type of file archived. + * + * @see {@linkcode FileTypes} + */ + type?: string; + /** Ustar magic header */ + ustar?: string; + /** The name of the file owner. */ + owner?: string; + /** The group that the file owner belongs to. */ + group?: string; +} + +/** + * Tar data interface for {@linkcode Tar.data}. + * + * @experimental **UNSTABLE**: New API, yet to be vetted. + */ +export interface TarDataWithSource extends TarData { + /** + * Path of the file to read. + */ + filePath?: string; + /** + * Buffer reader. + */ + reader?: Reader; +} + +/** + * ### Overview + * A class to create a tar archive. Tar archives allow for storing multiple files in a + * single file (called an archive, or sometimes a tarball). These archives typically + * have the '.tar' extension. + * + * ### Usage + * The workflow is to create a Tar instance, append files to it, and then write the + * tar archive to the filesystem (or other output stream). See the worked example + * below for details. + * + * ### Compression + * Tar archives are not compressed by default. If you want to compress the archive, + * you may compress the tar archive after creation, but this capability is not provided + * here. + * + * ### File format and limitations + * + * The ustar file format is used for creating the archive file. + * While this format is compatible with most tar readers, + * the format has several limitations, including: + * * Files must be smaller than 8GiB + * * Filenames (including path) must be shorter than 256 characters + * * Filenames (including path) cannot contain non-ASCII characters + * * Sparse files are not supported + * + * @example Usage + * ```ts no-eval + * import { Tar } from "@std/archive/tar"; + * import { Buffer } from "@std/io/buffer"; + * import { copy } from "@std/io/copy"; + * + * const tar = new Tar(); + * + * // Now that we've created our tar, let's add some files to it: + * + * const content = new TextEncoder().encode("Some arbitrary content"); + * await tar.append("deno.txt", { + * reader: new Buffer(content), + * contentSize: content.byteLength, + * }); + * + * // This file is sourced from the filesystem (and renamed in the archive) + * await tar.append("filename_in_archive.txt", { + * filePath: "./filename_on_filesystem.txt", + * }); + * + * // Now let's write the tar (with it's two files) to the filesystem + * // use tar.getReader() to read the contents. + * + * const writer = await Deno.open("./out.tar", { write: true, create: true }); + * await copy(tar.getReader(), writer); + * writer.close(); + * ``` + * + * @experimental **UNSTABLE**: New API, yet to be vetted. + */ +export class Tar { + /** Tar data. */ + #data: TarDataWithSource[]; + + /** Constructs a new instance. */ + constructor() { + this.#data = []; + } + + /** + * Append a file or reader of arbitrary content to this tar archive. Directories + * appended to the archive append only the directory itself to the archive, not + * its contents. To add a directory and its contents, recursively append the + * directory's contents. Directories and subdirectories will be created automatically + * in the archive as required. + * + * @param filenameInArchive File name of the content in the archive. E.g. + * `test.txt`. Use slash for directory separators. + * @param source Details of the source of the content including the + * reference to the content itself and potentially any related metadata. + * + * @example Usage + * ```ts no-eval + * import { Tar } from "@std/archive/tar"; + * import { Buffer } from "@std/io/buffer"; + * import { copy } from "@std/io/copy"; + * + * const tar = new Tar(); + * + * // Now that we've created our tar, let's add some files to it: + * + * const content = new TextEncoder().encode("Some arbitrary content"); + * await tar.append("deno.txt", { + * reader: new Buffer(content), + * contentSize: content.byteLength, + * }); + * + * // This file is sourced from the filesystem (and renamed in the archive) + * await tar.append("filename_in_archive.txt", { + * filePath: "./filename_on_filesystem.txt", + * }); + * + * // Now let's write the tar (with it's two files) to the filesystem + * // use tar.getReader() to read the contents. + * + * const writer = await Deno.open("./out.tar", { write: true, create: true }); + * await copy(tar.getReader(), writer); + * writer.close(); + * ``` + */ + async append(filenameInArchive: string, source: TarOptions) { + if (typeof filenameInArchive !== "string") { + throw new Error("Cannot append data: File name is not a string"); + } + let fileName = filenameInArchive; + + /** + * Ustar format has a limitation of file name length. Specifically: + * 1. File names can contain at most 255 bytes. + * 2. File names longer than 100 bytes must be split at a directory separator in two parts, + * the first being at most 155 bytes long. So, in most cases file names must be a bit shorter + * than 255 bytes. + */ + // separate file name into two parts if needed + let fileNamePrefix: string | undefined; + if (fileName.length > 100) { + let i = fileName.length; + while (i >= 0) { + i = fileName.lastIndexOf("/", i); + if (i <= 155) { + fileNamePrefix = fileName.slice(0, i); + fileName = fileName.slice(i + 1); + break; + } + i--; + } + const errMsg = + "Cannot append data: The 'ustar' format does not allow a long file name (length of [file name" + + "prefix] + / + [file name] must be shorter than 256 bytes)"; + if (i < 0 || fileName.length > 100) { + throw new Error(errMsg); + } else { + if (fileNamePrefix === undefined) { + throw new TypeError("File name prefix is undefined"); + } + if (fileNamePrefix.length > 155) { + throw new Error(errMsg); + } + } + } + + source = source ?? {}; + + // set meta data + let info: Deno.FileInfo | undefined; + if (source.filePath) { + info = await Deno.stat(source.filePath); + if (info.isDirectory) { + info.size = 0; + source.reader = new Buffer(); + } + } + + const mode = source.fileMode || (info && info.mode) || + parseInt("777", 8) & 0xfff /* 511 */; + const mtime = Math.floor( + source.mtime ?? (info?.mtime ?? new Date()).valueOf() / 1000, + ); + const uid = source.uid ?? 0; + const gid = source.gid ?? 0; + + if (typeof source.owner === "string" && source.owner.length >= 32) { + throw new Error( + "Cannot append data: The 'ustar' format does not allow owner name length >= 32 bytes", + ); + } + if (typeof source.group === "string" && source.group.length >= 32) { + throw new Error( + "Cannot append data: The 'ustar' format does not allow group name length >= 32 bytes", + ); + } + + const fileSize = info?.size ?? source.contentSize; + if (fileSize === undefined) { + throw new TypeError("Cannot append data: The file size is not defined"); + } + + const type = source.type + ? FileTypes[source.type as keyof typeof FileTypes] + : (info?.isDirectory ? FileTypes.directory : FileTypes.file); + const tarData: TarDataWithSource = { + fileName, + fileMode: pad(mode, 7), + uid: pad(uid, 7), + gid: pad(gid, 7), + fileSize: pad(fileSize, 11), + mtime: pad(mtime, 11), + checksum: " ", + type: type.toString(), + ustar: USTAR_MAGIC_HEADER, + owner: source.owner ?? "", + group: source.group ?? "", + }; + if (fileNamePrefix !== undefined) { + tarData.fileNamePrefix = fileNamePrefix; + } + if (source.filePath !== undefined) { + tarData.filePath = source.filePath; + } + if (source.reader !== undefined) { + tarData.reader = source.reader; + } + + // calculate the checksum + let checksum = 0; + const encoder = new TextEncoder(); + Object.keys(tarData) + .filter((key): boolean => ["filePath", "reader"].indexOf(key) < 0) + .forEach(function (key) { + checksum += encoder + .encode(tarData[key as keyof TarData]) + .reduce((p, c): number => p + c, 0); + }); + + tarData.checksum = pad(checksum, 6) + "\u0000 "; + this.#data.push(tarData); + } + + /** + * Get a {@linkcode Reader} instance for this tar archive. + * + * @returns A reader instance for the tar archive. + * + * @example Usage + * ```ts no-eval + * import { Tar } from "@std/archive/tar"; + * import { Buffer } from "@std/io/buffer"; + * import { copy } from "@std/io/copy"; + * + * const tar = new Tar(); + * + * // Now that we've created our tar, let's add some files to it: + * + * const content = new TextEncoder().encode("Some arbitrary content"); + * await tar.append("deno.txt", { + * reader: new Buffer(content), + * contentSize: content.byteLength, + * }); + * + * // This file is sourced from the filesystem (and renamed in the archive) + * await tar.append("filename_in_archive.txt", { + * filePath: "./filename_on_filesystem.txt", + * }); + * + * // Now let's write the tar (with it's two files) to the filesystem + * // use tar.getReader() to read the contents. + * + * const writer = await Deno.open("./out.tar", { write: true, create: true }); + * await copy(tar.getReader(), writer); + * writer.close(); + * ``` + */ + getReader(): Reader { + const readers: Reader[] = []; + this.#data.forEach((tarData) => { + let { reader } = tarData; + const { filePath } = tarData; + const headerArr = formatHeader(tarData); + readers.push(new Buffer(headerArr)); + if (!reader) { + if (filePath === undefined) { + throw new TypeError( + "Cannot get the reader for the tar archive: FilePath is not defined", + ); + } + reader = new FileReader(filePath); + } + readers.push(reader); + + // to the nearest multiple of recordSize + if (tarData.fileSize === undefined) { + throw new TypeError( + "Cannot get the reader for the tar archive: FileSize is not defined", + ); + } + readers.push( + new Buffer( + new Uint8Array( + HEADER_LENGTH - + (parseInt(tarData.fileSize, 8) % HEADER_LENGTH || HEADER_LENGTH), + ), + ), + ); + }); + + // append 2 empty records + readers.push(new Buffer(new Uint8Array(HEADER_LENGTH * 2))); + return new MultiReader(readers); + } +} diff --git a/src/vendor/deno.land/std@0.217.0/assert/_constants.ts b/src/vendor/jsr.io/@std/assert/0.224.0/_constants.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/assert/_constants.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/_constants.ts diff --git a/src/vendor/jsr.io/@std/assert/0.224.0/assert.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert.ts new file mode 100644 index 00000000000..8de6fe68a47 --- /dev/null +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert.ts @@ -0,0 +1,20 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import { AssertionError } from "./assertion_error.ts"; + +/** + * Make an assertion, error will be thrown if `expr` does not have truthy value. + * + * @example + * ```ts + * import { assert } from "@std/assert/assert"; + * + * assert("hello".includes("ello")); // Doesn't throw + * assert("hello".includes("world")); // Throws + * ``` + */ +export function assert(expr: unknown, msg = ""): asserts expr { + if (!expr) { + throw new AssertionError(msg); + } +} diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_almost_equals.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_almost_equals.ts similarity index 92% rename from src/vendor/deno.land/std@0.217.0/assert/assert_almost_equals.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_almost_equals.ts index 6d309bd2b36..55dc48401c2 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_almost_equals.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_almost_equals.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { AssertionError } from "./assertion_error.ts"; /** @@ -9,7 +10,7 @@ import { AssertionError } from "./assertion_error.ts"; * * @example * ```ts - * import { assertAlmostEquals } from "https://deno.land/std@$STD_VERSION/assert/mod.ts"; + * import { assertAlmostEquals } from "@std/assert"; * * assertAlmostEquals(0.01, 0.02, 0.1); // Doesn't throw * assertAlmostEquals(0.01, 0.02); // Throws diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_array_includes.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_array_includes.ts similarity index 88% rename from src/vendor/deno.land/std@0.217.0/assert/assert_array_includes.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_array_includes.ts index c9f38f3d614..ed1767e7924 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_array_includes.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_array_includes.ts @@ -1,6 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { equal } from "./equal.ts"; -import { format } from "./_format.ts"; +import { format } from "jsr:/@std/internal@^0.224.0/format"; import { AssertionError } from "./assertion_error.ts"; /** An array-like object (`Array`, `Uint8Array`, `NodeList`, etc.) that is not a string */ @@ -15,7 +16,7 @@ export type ArrayLikeArg = ArrayLike & object; * * @example * ```ts - * import { assertArrayIncludes } from "https://deno.land/std@$STD_VERSION/assert/assert_array_includes.ts"; + * import { assertArrayIncludes } from "@std/assert/assert-array-includes"; * * assertArrayIncludes([1, 2], [2]); // Doesn't throw * assertArrayIncludes([1, 2], [3]); // Throws diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_equals.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_equals.ts similarity index 86% rename from src/vendor/deno.land/std@0.217.0/assert/assert_equals.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_equals.ts index b26649796f9..c4baf6e2d55 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_equals.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_equals.ts @@ -1,9 +1,9 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { equal } from "./equal.ts"; -import { format } from "./_format.ts"; +import { buildMessage, diff, diffstr, format } from "jsr:@std/internal@^0.224.0"; import { AssertionError } from "./assertion_error.ts"; -import { red } from "../fmt/colors.ts"; -import { buildMessage, diff, diffstr } from "./_diff.ts"; +import { red } from "jsr:/@std/fmt@^0.224.0/colors"; import { CAN_NOT_DISPLAY } from "./_constants.ts"; /** @@ -15,7 +15,7 @@ import { CAN_NOT_DISPLAY } from "./_constants.ts"; * * @example * ```ts - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { assertEquals } from "@std/assert/assert-equals"; * * assertEquals("world", "world"); // Doesn't throw * assertEquals("hello", "world"); // Throws diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_exists.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_exists.ts similarity index 87% rename from src/vendor/deno.land/std@0.217.0/assert/assert_exists.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_exists.ts index 31edff7db64..78ee8aa1066 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_exists.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_exists.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { AssertionError } from "./assertion_error.ts"; /** @@ -7,7 +8,7 @@ import { AssertionError } from "./assertion_error.ts"; * * @example * ```ts - * import { assertExists } from "https://deno.land/std@$STD_VERSION/assert/assert_exists.ts"; + * import { assertExists } from "@std/assert/assert-exists"; * * assertExists("something"); // Doesn't throw * assertExists(undefined); // Throws diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_false.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_false.ts similarity index 85% rename from src/vendor/deno.land/std@0.217.0/assert/assert_false.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_false.ts index 928fab977e7..953c63a7e36 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_false.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_false.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { AssertionError } from "./assertion_error.ts"; /** Assertion condition for {@linkcode assertFalse}. */ @@ -9,7 +10,7 @@ export type Falsy = false | 0 | 0n | "" | null | undefined; * * @example * ```ts - * import { assertFalse } from "https://deno.land/std@$STD_VERSION/assert/assert_false.ts"; + * import { assertFalse } from "@std/assert/assert-false"; * * assertFalse(false); // Doesn't throw * assertFalse(true); // Throws diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_greater.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_greater.ts similarity index 79% rename from src/vendor/deno.land/std@0.217.0/assert/assert_greater.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_greater.ts index 5b0846047be..465f5ba003c 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_greater.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_greater.ts @@ -1,5 +1,6 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { format } from "./_format.ts"; +// This module is browser compatible. +import { format } from "jsr:/@std/internal@^0.224.0/format"; import { AssertionError } from "./assertion_error.ts"; /** @@ -8,7 +9,7 @@ import { AssertionError } from "./assertion_error.ts"; * * @example * ```ts - * import { assertGreater } from "https://deno.land/std@$STD_VERSION/assert/assert_greater.ts"; + * import { assertGreater } from "@std/assert/assert-greater"; * * assertGreater(2, 1); // Doesn't throw * assertGreater(1, 1); // Throws diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_greater_or_equal.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_greater_or_equal.ts similarity index 79% rename from src/vendor/deno.land/std@0.217.0/assert/assert_greater_or_equal.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_greater_or_equal.ts index 3a9e046c2ca..49cec6136a6 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_greater_or_equal.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_greater_or_equal.ts @@ -1,5 +1,6 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { format } from "./_format.ts"; +// This module is browser compatible. +import { format } from "jsr:/@std/internal@^0.224.0/format"; import { AssertionError } from "./assertion_error.ts"; /** @@ -8,7 +9,7 @@ import { AssertionError } from "./assertion_error.ts"; * * @example * ```ts - * import { assertGreaterOrEqual } from "https://deno.land/std@$STD_VERSION/assert/assert_greater_or_equal.ts"; + * import { assertGreaterOrEqual } from "@std/assert/assert-greater-or-equal"; * * assertGreaterOrEqual(2, 1); // Doesn't throw * assertGreaterOrEqual(1, 1); // Doesn't throw diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_instance_of.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_instance_of.ts similarity index 94% rename from src/vendor/deno.land/std@0.217.0/assert/assert_instance_of.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_instance_of.ts index abccf18ed5a..75b7b1205b5 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_instance_of.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_instance_of.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { AssertionError } from "./assertion_error.ts"; /** Any constructor */ @@ -15,7 +16,7 @@ new (...args: any) => infer C ? C * * @example * ```ts - * import { assertInstanceOf } from "https://deno.land/std@$STD_VERSION/assert/assert_instance_of.ts"; + * import { assertInstanceOf } from "@std/assert/assert-instance-of"; * * assertInstanceOf(new Date(), Date); // Doesn't throw * assertInstanceOf(new Date(), Number); // Throws diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_is_error.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_is_error.ts similarity index 92% rename from src/vendor/deno.land/std@0.217.0/assert/assert_is_error.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_is_error.ts index 75b618add7a..38701912f98 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_is_error.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_is_error.ts @@ -1,6 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { AssertionError } from "./assertion_error.ts"; -import { stripAnsiCode } from "../fmt/colors.ts"; +import { stripAnsiCode } from "jsr:/@std/fmt@^0.224.0/colors"; /** * Make an assertion that `error` is an `Error`. @@ -10,7 +11,7 @@ import { stripAnsiCode } from "../fmt/colors.ts"; * * @example * ```ts - * import { assertIsError } from "https://deno.land/std@$STD_VERSION/assert/assert_is_error.ts"; + * import { assertIsError } from "@std/assert/assert-is-error"; * * assertIsError(null); // Throws * assertIsError(new RangeError("Out of range")); // Doesn't throw diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_less.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_less.ts similarity index 79% rename from src/vendor/deno.land/std@0.217.0/assert/assert_less.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_less.ts index 6467c13d26b..0d87f9f31a0 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_less.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_less.ts @@ -1,5 +1,6 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { format } from "./_format.ts"; +// This module is browser compatible. +import { format } from "jsr:/@std/internal@^0.224.0/format"; import { AssertionError } from "./assertion_error.ts"; /** @@ -8,7 +9,7 @@ import { AssertionError } from "./assertion_error.ts"; * * @example * ```ts - * import { assertLess } from "https://deno.land/std@$STD_VERSION/assert/assert_less.ts"; + * import { assertLess } from "@std/assert/assert-less"; * * assertLess(1, 2); // Doesn't throw * assertLess(2, 1); // Throws diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_less_or_equal.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_less_or_equal.ts similarity index 80% rename from src/vendor/deno.land/std@0.217.0/assert/assert_less_or_equal.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_less_or_equal.ts index 97fc642b9f9..c5808528a2a 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_less_or_equal.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_less_or_equal.ts @@ -1,5 +1,6 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { format } from "./_format.ts"; +// This module is browser compatible. +import { format } from "jsr:/@std/internal@^0.224.0/format"; import { AssertionError } from "./assertion_error.ts"; /** @@ -8,7 +9,7 @@ import { AssertionError } from "./assertion_error.ts"; * * @example * ```ts - * import { assertLessOrEqual } from "https://deno.land/std@$STD_VERSION/assert/assert_less_or_equal.ts"; + * import { assertLessOrEqual } from "@std/assert/assert-less-or-equal"; * * assertLessOrEqual(1, 2); // Doesn't throw * assertLessOrEqual(1, 1); // Doesn't throw diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_match.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_match.ts similarity index 87% rename from src/vendor/deno.land/std@0.217.0/assert/assert_match.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_match.ts index 1bdafc4283e..2f18b84b981 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_match.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_match.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { AssertionError } from "./assertion_error.ts"; /** @@ -7,7 +8,7 @@ import { AssertionError } from "./assertion_error.ts"; * * @example * ```ts - * import { assertMatch } from "https://deno.land/std@$STD_VERSION/assert/assert_match.ts"; + * import { assertMatch } from "@std/assert/assert-match"; * * assertMatch("Raptor", RegExp(/Raptor/)); // Doesn't throw * assertMatch("Denosaurus", RegExp(/Raptor/)); // Throws diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_not_equals.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_not_equals.ts similarity index 90% rename from src/vendor/deno.land/std@0.217.0/assert/assert_not_equals.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_not_equals.ts index db85d6b887a..b16a3ae4907 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_not_equals.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_not_equals.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { CAN_NOT_DISPLAY } from "./_constants.ts"; import { equal } from "./equal.ts"; @@ -12,7 +13,7 @@ import { AssertionError } from "./assertion_error.ts"; * * @example * ```ts - * import { assertNotEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_not_equals.ts"; + * import { assertNotEquals } from "@std/assert/assert-not-equals"; * * assertNotEquals(1, 2); // Doesn't throw * assertNotEquals(1, 1); // Throws diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_not_instance_of.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_not_instance_of.ts similarity index 86% rename from src/vendor/deno.land/std@0.217.0/assert/assert_not_instance_of.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_not_instance_of.ts index 316072beaf1..794b35b0d43 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_not_instance_of.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_not_instance_of.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { assertFalse } from "./assert_false.ts"; /** @@ -7,7 +8,7 @@ import { assertFalse } from "./assert_false.ts"; * * @example * ```ts - * import { assertNotInstanceOf } from "https://deno.land/std@$STD_VERSION/assert/assert_not_instance_of.ts"; + * import { assertNotInstanceOf } from "@std/assert/assert-not-instance-of"; * * assertNotInstanceOf(new Date(), Number); // Doesn't throw * assertNotInstanceOf(new Date(), Date); // Throws diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_not_match.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_not_match.ts similarity index 86% rename from src/vendor/deno.land/std@0.217.0/assert/assert_not_match.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_not_match.ts index 92f1ef04a5d..6778ab1751b 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_not_match.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_not_match.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { AssertionError } from "./assertion_error.ts"; /** @@ -7,7 +8,7 @@ import { AssertionError } from "./assertion_error.ts"; * * @example * ```ts - * import { assertNotMatch } from "https://deno.land/std@$STD_VERSION/assert/assert_not_match.ts"; + * import { assertNotMatch } from "@std/assert/assert-not-match"; * * assertNotMatch("Denosaurus", RegExp(/Raptor/)); // Doesn't throw * assertNotMatch("Raptor", RegExp(/Raptor/)); // Throws diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_not_strict_equals.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_not_strict_equals.ts similarity index 79% rename from src/vendor/deno.land/std@0.217.0/assert/assert_not_strict_equals.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_not_strict_equals.ts index a0dfdb9f62e..4c2dbde38e0 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_not_strict_equals.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_not_strict_equals.ts @@ -1,6 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { AssertionError } from "./assertion_error.ts"; -import { format } from "./_format.ts"; +import { format } from "jsr:/@std/internal@^0.224.0/format"; /** * Make an assertion that `actual` and `expected` are not strictly equal. @@ -8,7 +9,7 @@ import { format } from "./_format.ts"; * * @example * ```ts - * import { assertNotStrictEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_not_strict_equals.ts"; + * import { assertNotStrictEquals } from "@std/assert/assert-not-strict-equals"; * * assertNotStrictEquals(1, 1); // Doesn't throw * assertNotStrictEquals(1, 2); // Throws diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_object_match.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_object_match.ts similarity index 97% rename from src/vendor/deno.land/std@0.217.0/assert/assert_object_match.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_object_match.ts index c34fe98d083..ee46c6a46e6 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_object_match.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_object_match.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { assertEquals } from "./assert_equals.ts"; /** @@ -7,7 +8,7 @@ import { assertEquals } from "./assert_equals.ts"; * * @example * ```ts - * import { assertObjectMatch } from "https://deno.land/std@$STD_VERSION/assert/assert_object_match.ts"; + * import { assertObjectMatch } from "@std/assert/assert-object-match"; * * assertObjectMatch({ foo: "bar" }, { foo: "bar" }); // Doesn't throw * assertObjectMatch({ foo: "bar" }, { foo: "baz" }); // Throws diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_rejects.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_rejects.ts similarity index 90% rename from src/vendor/deno.land/std@0.217.0/assert/assert_rejects.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_rejects.ts index 859fc30b28e..d3e50a20275 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_rejects.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_rejects.ts @@ -1,13 +1,16 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { AssertionError } from "./assertion_error.ts"; import { assertIsError } from "./assert_is_error.ts"; /** * Executes a function which returns a promise, expecting it to reject. * + * To assert that a synchronous function throws, use {@linkcode assertThrows}. + * * @example * ```ts - * import { assertRejects } from "https://deno.land/std@$STD_VERSION/assert/assert_rejects.ts"; + * import { assertRejects } from "@std/assert/assert-rejects"; * * await assertRejects(async () => Promise.reject(new Error())); // Doesn't throw * await assertRejects(async () => console.log("Hello world")); // Throws @@ -22,9 +25,11 @@ export function assertRejects( * If it does not, then it throws. An error class and a string that should be * included in the error message can also be asserted. * + * To assert that a synchronous function throws, use {@linkcode assertThrows}. + * * @example * ```ts - * import { assertRejects } from "https://deno.land/std@$STD_VERSION/assert/assert_rejects.ts"; + * import { assertRejects } from "@std/assert/assert-rejects"; * * await assertRejects(async () => Promise.reject(new Error()), Error); // Doesn't throw * await assertRejects(async () => Promise.reject(new Error()), SyntaxError); // Throws diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_strict_equals.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_strict_equals.ts similarity index 86% rename from src/vendor/deno.land/std@0.217.0/assert/assert_strict_equals.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_strict_equals.ts index 840f472e8e2..a9c99de0eae 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_strict_equals.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_strict_equals.ts @@ -1,9 +1,9 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { format } from "./_format.ts"; +// This module is browser compatible. +import { buildMessage, diff, diffstr, format } from "jsr:@std/internal@^0.224.0"; import { AssertionError } from "./assertion_error.ts"; -import { buildMessage, diff, diffstr } from "./_diff.ts"; import { CAN_NOT_DISPLAY } from "./_constants.ts"; -import { red } from "../fmt/colors.ts"; +import { red } from "jsr:/@std/fmt@^0.224.0/colors"; /** * Make an assertion that `actual` and `expected` are strictly equal. If @@ -11,7 +11,7 @@ import { red } from "../fmt/colors.ts"; * * @example * ```ts - * import { assertStrictEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_strict_equals.ts"; + * import { assertStrictEquals } from "@std/assert/assert-strict-equals"; * * const a = {}; * const b = a; diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_string_includes.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_string_includes.ts similarity index 85% rename from src/vendor/deno.land/std@0.217.0/assert/assert_string_includes.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_string_includes.ts index 52feaf6a971..7e12ee50972 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_string_includes.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_string_includes.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { AssertionError } from "./assertion_error.ts"; /** @@ -7,7 +8,7 @@ import { AssertionError } from "./assertion_error.ts"; * * @example * ```ts - * import { assertStringIncludes } from "https://deno.land/std@$STD_VERSION/assert/assert_string_includes.ts"; + * import { assertStringIncludes } from "@std/assert/assert-string-includes"; * * assertStringIncludes("Hello", "ello"); // Doesn't throw * assertStringIncludes("Hello", "world"); // Throws diff --git a/src/vendor/deno.land/std@0.217.0/assert/assert_throws.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assert_throws.ts similarity index 88% rename from src/vendor/deno.land/std@0.217.0/assert/assert_throws.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/assert_throws.ts index e52674fae1b..7c4da3fc23b 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/assert_throws.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assert_throws.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { assertIsError } from "./assert_is_error.ts"; import { AssertionError } from "./assertion_error.ts"; @@ -6,9 +7,12 @@ import { AssertionError } from "./assertion_error.ts"; * Executes a function, expecting it to throw. If it does not, then it * throws. * + * To assert that an asynchronous function rejects, use + * {@linkcode assertRejects}. + * * @example * ```ts - * import { assertThrows } from "https://deno.land/std@$STD_VERSION/assert/assert_throws.ts"; + * import { assertThrows } from "@std/assert/assert-throws"; * * assertThrows(() => { throw new TypeError("hello world!"); }); // Doesn't throw * assertThrows(() => console.log("hello world!")); // Throws @@ -23,9 +27,12 @@ export function assertThrows( * throws. An error class and a string that should be included in the * error message can also be asserted. * + * To assert that an asynchronous function rejects, use + * {@linkcode assertRejects}. + * * @example * ```ts - * import { assertThrows } from "https://deno.land/std@$STD_VERSION/assert/assert_throws.ts"; + * import { assertThrows } from "@std/assert/assert-throws"; * * assertThrows(() => { throw new TypeError("hello world!"); }, TypeError); // Doesn't throw * assertThrows(() => { throw new TypeError("hello world!"); }, RangeError); // Throws diff --git a/src/vendor/jsr.io/@std/assert/0.224.0/assertion_error.ts b/src/vendor/jsr.io/@std/assert/0.224.0/assertion_error.ts new file mode 100644 index 00000000000..faaef6a1060 --- /dev/null +++ b/src/vendor/jsr.io/@std/assert/0.224.0/assertion_error.ts @@ -0,0 +1,20 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Error thrown when an assertion fails. + * + * @example + * ```ts + * import { AssertionError } from "@std/assert/assertion-error"; + * + * throw new AssertionError("Assertion failed"); + * ``` + */ +export class AssertionError extends Error { + /** Constructs a new instance. */ + constructor(message: string) { + super(message); + this.name = "AssertionError"; + } +} diff --git a/src/vendor/deno.land/std@0.217.0/assert/equal.ts b/src/vendor/jsr.io/@std/assert/0.224.0/equal.ts similarity index 97% rename from src/vendor/deno.land/std@0.217.0/assert/equal.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/equal.ts index 50f63713961..eb94480e871 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/equal.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/equal.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. function isKeyedCollection(x: unknown): x is Set { return [Symbol.iterator, "size"].every((k) => k in (x as Set)); } @@ -16,7 +17,7 @@ function constructorsEqual(a: object, b: object) { * * @example * ```ts - * import { equal } from "https://deno.land/std@$STD_VERSION/assert/equal.ts"; + * import { equal } from "@std/assert/equal"; * * equal({ foo: "bar" }, { foo: "bar" }); // Returns `true` * equal({ foo: "bar" }, { foo: "baz" }); // Returns `false diff --git a/src/vendor/deno.land/std@0.217.0/assert/fail.ts b/src/vendor/jsr.io/@std/assert/0.224.0/fail.ts similarity index 82% rename from src/vendor/deno.land/std@0.217.0/assert/fail.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/fail.ts index a3c9c421807..617c4fc67b0 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/fail.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/fail.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { assert } from "./assert.ts"; /** @@ -6,7 +7,7 @@ import { assert } from "./assert.ts"; * * @example * ```ts - * import { fail } from "https://deno.land/std@$STD_VERSION/assert/fail.ts"; + * import { fail } from "@std/assert/fail"; * * fail("Deliberately failed!"); // Throws * ``` diff --git a/src/vendor/deno.land/std@0.217.0/assert/mod.ts b/src/vendor/jsr.io/@std/assert/0.224.0/mod.ts similarity index 87% rename from src/vendor/deno.land/std@0.217.0/assert/mod.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/mod.ts index e873f12e52b..93afef33e7b 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/mod.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/mod.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. /** A library of assertion functions. * If the assertion is false an `AssertionError` will be thrown which will @@ -7,6 +8,13 @@ * This module is browser compatible, but do not rely on good formatting of * values for AssertionError messages in browsers. * + * ```ts + * import { assert } from "@std/assert/assert"; + * + * assert("I am truthy"); // Doesn't throw + * assert(false); // Throws `AssertionError` + * ``` + * * @module */ diff --git a/src/vendor/deno.land/std@0.217.0/assert/unimplemented.ts b/src/vendor/jsr.io/@std/assert/0.224.0/unimplemented.ts similarity index 80% rename from src/vendor/deno.land/std@0.217.0/assert/unimplemented.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/unimplemented.ts index 071b930adce..cbdf61a8d0d 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/unimplemented.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/unimplemented.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { AssertionError } from "./assertion_error.ts"; /** @@ -6,7 +7,7 @@ import { AssertionError } from "./assertion_error.ts"; * * @example * ```ts - * import { unimplemented } from "https://deno.land/std@$STD_VERSION/assert/unimplemented.ts"; + * import { unimplemented } from "@std/assert/unimplemented"; * * unimplemented(); // Throws * ``` diff --git a/src/vendor/deno.land/std@0.217.0/assert/unreachable.ts b/src/vendor/jsr.io/@std/assert/0.224.0/unreachable.ts similarity index 54% rename from src/vendor/deno.land/std@0.217.0/assert/unreachable.ts rename to src/vendor/jsr.io/@std/assert/0.224.0/unreachable.ts index 0fca6aa5d11..6732c9f0532 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/unreachable.ts +++ b/src/vendor/jsr.io/@std/assert/0.224.0/unreachable.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { AssertionError } from "./assertion_error.ts"; /** @@ -6,11 +7,11 @@ import { AssertionError } from "./assertion_error.ts"; * * @example * ```ts - * import { unreachable } from "https://deno.land/std@$STD_VERSION/assert/unreachable.ts"; + * import { unreachable } from "@std/assert/unreachable"; * * unreachable(); // Throws * ``` */ -export function unreachable(): never { - throw new AssertionError("unreachable"); +export function unreachable(reason?: string): never { + throw new AssertionError(reason ?? "unreachable"); } diff --git a/src/vendor/deno.land/std@0.217.0/async/_util.ts b/src/vendor/jsr.io/@std/async/0.224.2/_util.ts similarity index 57% rename from src/vendor/deno.land/std@0.217.0/async/_util.ts rename to src/vendor/jsr.io/@std/async/0.224.2/_util.ts index 31de9f0abc3..235e5ed3c71 100644 --- a/src/vendor/deno.land/std@0.217.0/async/_util.ts +++ b/src/vendor/jsr.io/@std/async/0.224.2/_util.ts @@ -1,6 +1,15 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. +// This `reason` comes from `AbortSignal` thus must be `any`. +// deno-lint-ignore no-explicit-any +export function createAbortError(reason?: any): DOMException { + return new DOMException( + reason ? `Aborted: ${reason}` : "Aborted", + "AbortError", + ); +} + export function exponentialBackoffWithJitter( cap: number, base: number, diff --git a/src/vendor/deno.land/std@0.217.0/async/abortable.ts b/src/vendor/jsr.io/@std/async/0.224.2/abortable.ts similarity index 68% rename from src/vendor/deno.land/std@0.217.0/async/abortable.ts rename to src/vendor/jsr.io/@std/async/0.224.2/abortable.ts index b25e187fc1a..d3122479c05 100644 --- a/src/vendor/deno.land/std@0.217.0/async/abortable.ts +++ b/src/vendor/jsr.io/@std/async/0.224.2/abortable.ts @@ -1,15 +1,22 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. +import { createAbortError } from "./_util.ts"; + /** - * Make {@linkcode Promise} abortable with the given signal. + * Make a {@linkcode Promise} abortable with the given signal. + * + * @typeParam T The type of the provided and returned promise. + * @param p The promise to make abortable. + * @param signal The signal to abort the promise with. + * @returns A promise that can be aborted. * - * @example - * ```ts + * @example Usage + * ```ts no-eval * import { * abortable, * delay, - * } from "https://deno.land/std@$STD_VERSION/async/mod.ts"; + * } from "@std/async"; * * const p = delay(1000); * const c = new AbortController(); @@ -21,14 +28,19 @@ */ export function abortable(p: Promise, signal: AbortSignal): Promise; /** - * Make {@linkcode AsyncIterable} abortable with the given signal. + * Make an {@linkcode AsyncIterable} abortable with the given signal. * - * @example - * ```ts + * @typeParam T The type of the provided and returned async iterable. + * @param p The async iterable to make abortable. + * @param signal The signal to abort the promise with. + * @returns An async iterable that can be aborted. + * + * @example Usage + * ```ts no-eval * import { * abortable, * delay, - * } from "https://deno.land/std@$STD_VERSION/async/mod.ts"; + * } from "@std/async"; * * const p = async function* () { * yield "Hello"; @@ -62,11 +74,16 @@ export function abortable( } /** - * Make Promise abortable with the given signal. + * Make a {@linkcode Promise} abortable with the given signal. + * + * @typeParam T The type of the provided and returned promise. + * @param p The promise to make abortable. + * @param signal The signal to abort the promise with. + * @returns A promise that can be aborted. * - * @example - * ```ts - * import { abortablePromise } from "https://deno.land/std@$STD_VERSION/async/abortable.ts"; + * @example Usage + * ```ts no-eval + * import { abortablePromise } from "@std/async/abortable"; * * const request = fetch("https://example.com"); * @@ -95,14 +112,19 @@ export function abortablePromise( } /** - * Make AsyncIterable abortable with the given signal. + * Make an {@linkcode AsyncIterable} abortable with the given signal. * - * @example - * ```ts + * @typeParam T The type of the provided and returned async iterable. + * @param p The async iterable to make abortable. + * @param signal The signal to abort the promise with. + * @returns An async iterable that can be aborted. + * + * @example Usage + * ```ts no-eval * import { * abortableAsyncIterable, * delay, - * } from "https://deno.land/std@$STD_VERSION/async/mod.ts"; + * } from "@std/async"; * * const p = async function* () { * yield "Hello"; @@ -145,12 +167,3 @@ export async function* abortableAsyncIterable( yield value; } } - -// This `reason` comes from `AbortSignal` thus must be `any`. -// deno-lint-ignore no-explicit-any -function createAbortError(reason?: any): DOMException { - return new DOMException( - reason ? `Aborted: ${reason}` : "Aborted", - "AbortError", - ); -} diff --git a/src/vendor/deno.land/std@0.217.0/async/deadline.ts b/src/vendor/jsr.io/@std/async/0.224.2/deadline.ts similarity index 65% rename from src/vendor/deno.land/std@0.217.0/async/deadline.ts rename to src/vendor/jsr.io/@std/async/0.224.2/deadline.ts index 6516dac0c77..c755ee183f9 100644 --- a/src/vendor/deno.land/std@0.217.0/async/deadline.ts +++ b/src/vendor/jsr.io/@std/async/0.224.2/deadline.ts @@ -3,24 +3,23 @@ import { delay } from "./delay.ts"; -/** Options for {@linkcode Deadline}. */ +/** Options for {@linkcode deadline}. */ export interface DeadlineOptions { /** Signal used to abort the deadline. */ signal?: AbortSignal; } -/** Error thrown when {@linkcode Deadline} times out. */ +/** + * Error thrown when {@linkcode deadline} times out. + * + * @example Usage + * ```ts no-assert + * import { DeadlineError } from "@std/async/deadline"; + * + * const error = new DeadlineError(); + * ``` + */ export class DeadlineError extends Error { - /** - * Constructs a new {@linkcode DeadlineError} instance. - * - * @example - * ``` - * import { DeadlineError } from "https://deno.land/std@$STD_VERSION/async/deadline.ts"; - * - * throw new DeadlineError(); - * ``` - */ constructor() { super("Deadline"); this.name = this.constructor.name; @@ -34,10 +33,16 @@ export class DeadlineError extends Error { * Note: Prefer to use {@linkcode AbortSignal.timeout} instead for the APIs * that accept {@linkcode AbortSignal}. * - * @example - * ```ts - * import { deadline } from "https://deno.land/std@$STD_VERSION/async/deadline.ts"; - * import { delay } from "https://deno.land/std@$STD_VERSION/async/delay.ts"; + * @typeParam T The type of the provided and returned promise. + * @param p The promise to make rejectable. + * @param ms Duration in milliseconds for when the promise should time out. + * @param options Additional options. + * @returns A promise that will reject if the provided duration runs out before resolving. + * + * @example Usage + * ```ts no-eval + * import { deadline } from "@std/async/deadline"; + * import { delay } from "@std/async/delay"; * * const delayedPromise = delay(1000); * // Below throws `DeadlineError` after 10 ms diff --git a/src/vendor/deno.land/std@0.217.0/async/debounce.ts b/src/vendor/jsr.io/@std/async/0.224.2/debounce.ts similarity index 87% rename from src/vendor/deno.land/std@0.217.0/async/debounce.ts rename to src/vendor/jsr.io/@std/async/0.224.2/debounce.ts index b2e6cea913e..961a53a76df 100644 --- a/src/vendor/deno.land/std@0.217.0/async/debounce.ts +++ b/src/vendor/jsr.io/@std/async/0.224.2/debounce.ts @@ -22,9 +22,9 @@ export interface DebouncedFunction> { * again before the timeout expires, the previous call will be * aborted. * - * @example - * ``` - * import { debounce } from "https://deno.land/std@$STD_VERSION/async/debounce.ts"; + * @example Usage + * ```ts no-eval + * import { debounce } from "@std/async/debounce"; * * await Array.fromAsync( * Deno.watchFs('./'), @@ -36,8 +36,10 @@ export interface DebouncedFunction> { * // output: Function debounced after 200ms with baz * ``` * - * @param fn The function to debounce. - * @param wait The time in milliseconds to delay the function. + * @typeParam T The arguments of the provided function. + * @param fn The function to debounce. + * @param wait The time in milliseconds to delay the function. + * @returns The debounced function. */ // deno-lint-ignore no-explicit-any export function debounce>( diff --git a/src/vendor/deno.land/std@0.217.0/async/delay.ts b/src/vendor/jsr.io/@std/async/0.224.2/delay.ts similarity index 75% rename from src/vendor/deno.land/std@0.217.0/async/delay.ts rename to src/vendor/jsr.io/@std/async/0.224.2/delay.ts index 2e844996684..1feed535d19 100644 --- a/src/vendor/deno.land/std@0.217.0/async/delay.ts +++ b/src/vendor/jsr.io/@std/async/0.224.2/delay.ts @@ -15,9 +15,12 @@ export interface DelayOptions { /** * Resolve a {@linkcode Promise} after a given amount of milliseconds. * - * @example - * ```ts - * import { delay } from "https://deno.land/std@$STD_VERSION/async/delay.ts"; + * @param ms Duration in milliseconds for how long the delay should last. + * @param options Additional options. + * + * @example Basic usage + * ```ts no-assert + * import { delay } from "@std/async/delay"; * * // ... * const delayedPromise = delay(100); @@ -25,10 +28,13 @@ export interface DelayOptions { * // ... * ``` * - * To allow the process to continue to run as long as the timer exists. + * @example Disable persistence + * + * Setting `persistent` to `false` will allow the process to continue to run as + * long as the timer exists. * - * ```ts - * import { delay } from "https://deno.land/std@$STD_VERSION/async/delay.ts"; + * ```ts no-assert + * import { delay } from "@std/async/delay"; * * // ... * await delay(100, { persistent: false }); @@ -36,7 +42,7 @@ export interface DelayOptions { * ``` */ export function delay(ms: number, options: DelayOptions = {}): Promise { - const { signal, persistent } = options; + const { signal, persistent = true } = options; if (signal?.aborted) return Promise.reject(signal.reason); return new Promise((resolve, reject) => { const abort = () => { diff --git a/src/vendor/deno.land/std@0.217.0/async/mod.ts b/src/vendor/jsr.io/@std/async/0.224.2/mod.ts similarity index 72% rename from src/vendor/deno.land/std@0.217.0/async/mod.ts rename to src/vendor/jsr.io/@std/async/0.224.2/mod.ts index ee64d9cf826..0b66c91eb06 100644 --- a/src/vendor/deno.land/std@0.217.0/async/mod.ts +++ b/src/vendor/jsr.io/@std/async/0.224.2/mod.ts @@ -1,9 +1,16 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. /** * Provide help with asynchronous tasks like delays, debouncing, deferring, or * pooling. * + * ```ts no-assert + * import { delay } from "@std/async/delay"; + * + * await delay(100); // waits for 100 milliseconds + * ``` + * * @module */ diff --git a/src/vendor/deno.land/std@0.217.0/async/mux_async_iterator.ts b/src/vendor/jsr.io/@std/async/0.224.2/mux_async_iterator.ts similarity index 50% rename from src/vendor/deno.land/std@0.217.0/async/mux_async_iterator.ts rename to src/vendor/jsr.io/@std/async/0.224.2/mux_async_iterator.ts index 1bb4802881a..67c14e2726f 100644 --- a/src/vendor/deno.land/std@0.217.0/async/mux_async_iterator.ts +++ b/src/vendor/jsr.io/@std/async/0.224.2/mux_async_iterator.ts @@ -12,9 +12,10 @@ interface TaggedYieldedValue { * yielded from the iterator) does not matter; if there is any result, it is * discarded. * - * @example + * @example Usage * ```ts - * import { MuxAsyncIterator } from "https://deno.land/std@$STD_VERSION/async/mux_async_iterator.ts"; + * import { MuxAsyncIterator } from "@std/async/mux-async-iterator"; + * import { assertEquals } from "@std/assert/assert-equals"; * * async function* gen123(): AsyncIterableIterator { * yield 1; @@ -31,11 +32,13 @@ interface TaggedYieldedValue { * const mux = new MuxAsyncIterator(); * mux.add(gen123()); * mux.add(gen456()); - * for await (const value of mux) { - * // ... - * } - * // .. + * + * const result = await Array.fromAsync(mux); + * + * assertEquals(result, [1, 4, 2, 5, 3, 6]); * ``` + * + * @typeParam T The type of the provided async iterables and generated async iterable. */ export class MuxAsyncIterator implements AsyncIterable { #iteratorCount = 0; @@ -44,7 +47,30 @@ export class MuxAsyncIterator implements AsyncIterable { #throws: any[] = []; #signal = Promise.withResolvers(); - /** Add an async iterable to the stream. */ + /** + * Add an async iterable to the stream. + * + * @param iterable The async iterable to add. + * + * @example Usage + * ```ts + * import { MuxAsyncIterator } from "@std/async/mux-async-iterator"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * async function* gen123(): AsyncIterableIterator { + * yield 1; + * yield 2; + * yield 3; + * } + * + * const mux = new MuxAsyncIterator(); + * mux.add(gen123()); + * + * const result = await Array.fromAsync(mux.iterate()); + * + * assertEquals(result, [1, 2, 3]); + * ``` + */ add(iterable: AsyncIterable) { ++this.#iteratorCount; this.#callIteratorNext(iterable[Symbol.asyncIterator]()); @@ -66,7 +92,29 @@ export class MuxAsyncIterator implements AsyncIterable { this.#signal.resolve(); } - /** Returns an async iterator of the stream. */ + /** + * Returns an async iterator of the stream. + * @returns the async iterator for all the added async iterables. + * + * @example Usage + * ```ts + * import { MuxAsyncIterator } from "@std/async/mux-async-iterator"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * async function* gen123(): AsyncIterableIterator { + * yield 1; + * yield 2; + * yield 3; + * } + * + * const mux = new MuxAsyncIterator(); + * mux.add(gen123()); + * + * const result = await Array.fromAsync(mux.iterate()); + * + * assertEquals(result, [1, 2, 3]); + * ``` + */ async *iterate(): AsyncIterableIterator { while (this.#iteratorCount > 0) { // Sleep until any of the wrapped iterators yields. @@ -82,7 +130,6 @@ export class MuxAsyncIterator implements AsyncIterable { for (const e of this.#throws) { throw e; } - this.#throws.length = 0; } // Clear the `yields` list and reset the `signal` promise. this.#yields.length = 0; @@ -90,7 +137,29 @@ export class MuxAsyncIterator implements AsyncIterable { } } - /** Implements an async iterator for the stream. */ + /** + * Implements an async iterator for the stream. + * @returns the async iterator for all the added async iterables. + * + * @example Usage + * ```ts + * import { MuxAsyncIterator } from "@std/async/mux-async-iterator"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * async function* gen123(): AsyncIterableIterator { + * yield 1; + * yield 2; + * yield 3; + * } + * + * const mux = new MuxAsyncIterator(); + * mux.add(gen123()); + * + * const result = await Array.fromAsync(mux); + * + * assertEquals(result, [1, 2, 3]); + * ``` + */ [Symbol.asyncIterator](): AsyncIterator { return this.iterate(); } diff --git a/src/vendor/deno.land/std@0.217.0/async/pool.ts b/src/vendor/jsr.io/@std/async/0.224.2/pool.ts similarity index 92% rename from src/vendor/deno.land/std@0.217.0/async/pool.ts rename to src/vendor/jsr.io/@std/async/0.224.2/pool.ts index d8f452fa8df..64f1737e419 100644 --- a/src/vendor/deno.land/std@0.217.0/async/pool.ts +++ b/src/vendor/jsr.io/@std/async/0.224.2/pool.ts @@ -14,9 +14,10 @@ export const ERROR_WHILE_MAPPING_MESSAGE = "Threw while mapping."; * yielded on success. After that, the rejections among them are gathered and * thrown by the iterator in an `AggregateError`. * - * @example + * @example Usage * ```ts - * import { pooledMap } from "https://deno.land/std@$STD_VERSION/async/pool.ts"; + * import { pooledMap } from "@std/async/pool"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const results = pooledMap( * 2, @@ -24,14 +25,15 @@ export const ERROR_WHILE_MAPPING_MESSAGE = "Threw while mapping."; * (i) => new Promise((r) => setTimeout(() => r(i), 1000)), * ); * - * for await (const value of results) { - * // ... - * } + * assertEquals(await Array.fromAsync(results), [1, 2, 3]); * ``` * + * @typeParam T the input type. + * @typeParam R the output type. * @param poolLimit The maximum count of items being processed concurrently. * @param array The input array for mapping. * @param iteratorFn The function to call for every item of the array. + * @returns The async iterator with the transformed values. */ export function pooledMap( poolLimit: number, diff --git a/src/vendor/deno.land/std@0.217.0/async/retry.ts b/src/vendor/jsr.io/@std/async/0.224.2/retry.ts similarity index 77% rename from src/vendor/deno.land/std@0.217.0/async/retry.ts rename to src/vendor/jsr.io/@std/async/0.224.2/retry.ts index 05dcd5713ba..62eaf928ff6 100644 --- a/src/vendor/deno.land/std@0.217.0/async/retry.ts +++ b/src/vendor/jsr.io/@std/async/0.224.2/retry.ts @@ -1,20 +1,29 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -import { assert } from "../assert/assert.ts"; import { exponentialBackoffWithJitter } from "./_util.ts"; /** * Error thrown in {@linkcode retry} once the maximum number of failed attempts * has been reached. + * + * @example Usage + * ```ts no-assert no-eval + * import { RetryError } from "@std/async/retry"; + * + * throw new RetryError({ foo: "bar" }, 3); + * ``` */ export class RetryError extends Error { /** * Constructs a new {@linkcode RetryError} instance. * - * @example - * ``` - * import { RetryError } from "https://deno.land/std@$STD_VERSION/async/retry.ts"; + * @param cause the cause for this error. + * @param attempts the number of retry attempts made. + * + * @example Usage + * ```ts no-assert no-eval + * import { RetryError } from "@std/async/retry"; * * throw new RetryError({ foo: "bar" }, 3); * ``` @@ -84,9 +93,9 @@ const defaultRetryOptions: Required = { * * When `jitter` is `0`, waits the full backoff time. * - * @example - * ```ts - * import { retry } from "https://deno.land/std@$STD_VERSION/async/retry.ts"; + * @example Example configuration 1 + * ```ts no-assert + * import { retry } from "@std/async/retry"; * const req = async () => { * // some function that throws sometimes * }; @@ -101,9 +110,9 @@ const defaultRetryOptions: Required = { * }); * ``` * - * @example - * ```ts - * import { retry } from "https://deno.land/std@$STD_VERSION/async/retry.ts"; + * @example Example configuration 2 + * ```ts no-assert + * import { retry } from "@std/async/retry"; * const req = async () => { * // some function that throws sometimes * }; @@ -117,6 +126,11 @@ const defaultRetryOptions: Required = { * jitter: 0.5, * }); * ``` + * + * @typeParam T The return type of the function to retry and returned promise. + * @param fn The function to retry. + * @param opts Additional options. + * @returns The promise that resolves with the value returned by the function to retry. */ export async function retry( fn: (() => Promise) | (() => T), @@ -127,12 +141,11 @@ export async function retry( ...opts, }; - assert(options.maxTimeout >= 0, "maxTimeout is less than 0"); - assert( - options.minTimeout <= options.maxTimeout, - "minTimeout is greater than maxTimeout", - ); - assert(options.jitter <= 1, "jitter is greater than 1"); + if (options.maxTimeout <= 0) throw new TypeError("maxTimeout is less than 0"); + if (options.minTimeout > options.maxTimeout) { + throw new TypeError("minTimeout is greater than maxTimeout"); + } + if (options.jitter > 1) throw new TypeError("jitter is greater than 1"); let attempt = 0; while (true) { diff --git a/src/vendor/deno.land/std@0.217.0/async/tee.ts b/src/vendor/jsr.io/@std/async/0.224.2/tee.ts similarity index 77% rename from src/vendor/deno.land/std@0.217.0/async/tee.ts rename to src/vendor/jsr.io/@std/async/0.224.2/tee.ts index 0a3e8b039bf..172f434b018 100644 --- a/src/vendor/deno.land/std@0.217.0/async/tee.ts +++ b/src/vendor/jsr.io/@std/async/0.224.2/tee.ts @@ -51,9 +51,10 @@ class Queue { /** * Branches the given async iterable into the `n` branches. * - * @example + * @example Usage * ```ts - * import { tee } from "https://deno.land/std@$STD_VERSION/async/tee.ts"; + * import { tee } from "@std/async/tee"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const gen = async function* gen() { * yield 1; @@ -63,14 +64,18 @@ class Queue { * * const [branch1, branch2] = tee(gen()); * - * for await (const n of branch1) { - * console.log(n); // => 1, 2, 3 - * } + * const result1 = await Array.fromAsync(branch1); + * assertEquals(result1, [1, 2, 3]); * - * for await (const n of branch2) { - * console.log(n); // => 1, 2, 3 - * } + * const result2 = await Array.fromAsync(branch2); + * assertEquals(result2, [1, 2, 3]); * ``` + * + * @typeParam T The type of the provided async iterable and the returned async iterables. + * @typeParam N The amount of branches to tee into. + * @param iterable The iterable to tee. + * @param n The amount of branches to tee into. + * @returns The tuple where each element is an async iterable. */ export function tee( iterable: AsyncIterable, diff --git a/src/vendor/jsr.io/@std/async/1.0.5/delay.ts b/src/vendor/jsr.io/@std/async/1.0.5/delay.ts new file mode 100644 index 00000000000..c5b7dc07ad5 --- /dev/null +++ b/src/vendor/jsr.io/@std/async/1.0.5/delay.ts @@ -0,0 +1,72 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** Options for {@linkcode delay}. */ +export interface DelayOptions { + /** Signal used to abort the delay. */ + signal?: AbortSignal; + /** Indicates whether the process should continue to run as long as the timer exists. + * + * @default {true} + */ + persistent?: boolean; +} + +/** + * Resolve a {@linkcode Promise} after a given amount of milliseconds. + * + * @throws {DOMException} If the optional signal is aborted before the delay + * duration, and `signal.reason` is undefined. + * @param ms Duration in milliseconds for how long the delay should last. + * @param options Additional options. + * + * @example Basic usage + * ```ts no-assert + * import { delay } from "@std/async/delay"; + * + * // ... + * const delayedPromise = delay(100); + * const result = await delayedPromise; + * // ... + * ``` + * + * @example Disable persistence + * + * Setting `persistent` to `false` will allow the process to continue to run as + * long as the timer exists. + * + * ```ts no-assert + * import { delay } from "@std/async/delay"; + * + * // ... + * await delay(100, { persistent: false }); + * // ... + * ``` + */ +export function delay(ms: number, options: DelayOptions = {}): Promise { + const { signal, persistent = true } = options; + if (signal?.aborted) return Promise.reject(signal.reason); + return new Promise((resolve, reject) => { + const abort = () => { + clearTimeout(i); + reject(signal?.reason); + }; + const done = () => { + signal?.removeEventListener("abort", abort); + resolve(); + }; + const i = setTimeout(done, ms); + signal?.addEventListener("abort", abort, { once: true }); + if (persistent === false) { + try { + // @ts-ignore For browser compatibility + Deno.unrefTimer(i); + } catch (error) { + if (!(error instanceof ReferenceError)) { + throw error; + } + console.error("`persistent` option is only available in Deno"); + } + } + }); +} diff --git a/src/vendor/jsr.io/@std/bytes/0.224.0/concat.ts b/src/vendor/jsr.io/@std/bytes/0.224.0/concat.ts new file mode 100644 index 00000000000..3132cc993b3 --- /dev/null +++ b/src/vendor/jsr.io/@std/bytes/0.224.0/concat.ts @@ -0,0 +1,33 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Concatenate an array of byte slices into a single slice. + * + * @param buffers Array of byte slices to concatenate. + * @returns Hello + * + * @example Basic usage + * ```ts + * import { concat } from "@std/bytes/concat"; + * + * const a = new Uint8Array([0, 1, 2]); + * const b = new Uint8Array([3, 4, 5]); + * + * concat([a, b]); // Uint8Array(6) [ 0, 1, 2, 3, 4, 5 ] + * ``` + */ +export function concat(buffers: Uint8Array[]): Uint8Array { + let length = 0; + for (const buffer of buffers) { + length += buffer.length; + } + const output = new Uint8Array(length); + let index = 0; + for (const buffer of buffers) { + output.set(buffer, index); + index += buffer.length; + } + + return output; +} diff --git a/src/vendor/jsr.io/@std/bytes/0.224.0/copy.ts b/src/vendor/jsr.io/@std/bytes/0.224.0/copy.ts new file mode 100644 index 00000000000..197147ac84d --- /dev/null +++ b/src/vendor/jsr.io/@std/bytes/0.224.0/copy.ts @@ -0,0 +1,49 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Copy bytes from the source array to the destination array and returns the + * number of bytes copied. + * + * If the source array is larger than what the `dst` array can hold, only the + * amount of bytes that fit in the `dst` array are copied. + * + * @param src Source array to copy from. + * @param dst Destination array to copy to. + * @param offset Offset in the destination array to start copying to. Defaults + * to 0. + * @returns Number of bytes copied. + * + * @example Basic usage + * ```ts + * import { copy } from "@std/bytes/copy"; + * + * const src = new Uint8Array([9, 8, 7]); + * const dst = new Uint8Array([0, 1, 2, 3, 4, 5]); + * + * copy(src, dst); // 3 + * dst; // Uint8Array(6) [9, 8, 7, 3, 4, 5] + * ``` + * + * @example Copy with offset + * ```ts + * import { copy } from "@std/bytes/copy"; + * + * const src = new Uint8Array([1, 1, 1, 1]); + * const dst = new Uint8Array([0, 0, 0, 0]); + * + * copy(src, dst, 1); // 3 + * dst; // Uint8Array(4) [0, 1, 1, 1] + * ``` + * Defining an offset will start copying at the specified index in the + * destination array. + */ +export function copy(src: Uint8Array, dst: Uint8Array, offset = 0): number { + offset = Math.max(0, Math.min(offset, dst.byteLength)); + const dstBytesAvailable = dst.byteLength - offset; + if (src.byteLength > dstBytesAvailable) { + src = src.subarray(0, dstBytesAvailable); + } + dst.set(src, offset); + return src.byteLength; +} diff --git a/src/vendor/jsr.io/@std/bytes/0.224.0/ends_with.ts b/src/vendor/jsr.io/@std/bytes/0.224.0/ends_with.ts new file mode 100644 index 00000000000..8edb9272ada --- /dev/null +++ b/src/vendor/jsr.io/@std/bytes/0.224.0/ends_with.ts @@ -0,0 +1,33 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Returns `true` if the suffix array appears at the end of the source array, + * `false` otherwise. + * + * The complexity of this function is `O(suffix.length)`. + * + * @param source Source array to check. + * @param suffix Suffix array to check for. + * @returns `true` if the suffix array appears at the end of the source array, + * `false` otherwise. + * + * @example Basic usage + * ```ts + * import { endsWith } from "@std/bytes/ends-with"; + * + * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); + * const suffix = new Uint8Array([1, 2, 3]); + * + * endsWith(source, suffix); // true + * ``` + */ +export function endsWith(source: Uint8Array, suffix: Uint8Array): boolean { + const diff = source.length - suffix.length; + for (let i = suffix.length - 1; i >= 0; i--) { + if (source[diff + i] !== suffix[i]) { + return false; + } + } + return true; +} diff --git a/src/vendor/jsr.io/@std/bytes/0.224.0/equals.ts b/src/vendor/jsr.io/@std/bytes/0.224.0/equals.ts new file mode 100644 index 00000000000..28bb87f6908 --- /dev/null +++ b/src/vendor/jsr.io/@std/bytes/0.224.0/equals.ts @@ -0,0 +1,89 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Check whether byte slices are equal to each other using 8-bit comparisons. + * + * @param a First array to check equality + * @param b Second array to check equality + * @returns `true` if the arrays are equal, `false` otherwise + * + * @private + */ +function equalsNaive(a: Uint8Array, b: Uint8Array): boolean { + for (let i = 0; i < b.length; i++) { + if (a[i] !== b[i]) return false; + } + return true; +} + +/** Check whether byte slices are equal to each other using 32-bit comparisons. + * + * @param a First array to check equality. + * @param b Second array to check equality. + * @returns `true` if the arrays are equal, `false` otherwise. + * + * @private + */ +function equals32Bit(a: Uint8Array, b: Uint8Array): boolean { + const len = a.length; + const compactOffset = 3 - ((a.byteOffset + 3) % 4); + const compactLen = Math.floor((len - compactOffset) / 4); + const compactA = new Uint32Array( + a.buffer, + a.byteOffset + compactOffset, + compactLen, + ); + const compactB = new Uint32Array( + b.buffer, + b.byteOffset + compactOffset, + compactLen, + ); + for (let i = 0; i < compactOffset; i++) { + if (a[i] !== b[i]) return false; + } + for (let i = 0; i < compactA.length; i++) { + if (compactA[i] !== compactB[i]) return false; + } + for (let i = compactOffset + compactLen * 4; i < len; i++) { + if (a[i] !== b[i]) return false; + } + return true; +} + +/** + * Byte length threshold for when to use 32-bit comparisons, based on + * benchmarks. + * + * @see {@link https://github.com/denoland/deno_std/pull/4635} + */ +const THRESHOLD_32_BIT = 160; + +/** + * Check whether byte slices are equal to each other. + * + * @param a First array to check equality. + * @param b Second array to check equality. + * @returns `true` if the arrays are equal, `false` otherwise. + * + * @example Basic usage + * ```ts + * import { equals } from "@std/bytes/equals"; + * + * const a = new Uint8Array([1, 2, 3]); + * const b = new Uint8Array([1, 2, 3]); + * const c = new Uint8Array([4, 5, 6]); + * + * equals(a, b); // true + * equals(b, c); // false + * ``` + */ +export function equals(a: Uint8Array, b: Uint8Array): boolean { + if (a.length !== b.length) { + return false; + } + return a.length >= THRESHOLD_32_BIT && + (a.byteOffset % 4) === (b.byteOffset % 4) + ? equals32Bit(a, b) + : equalsNaive(a, b); +} diff --git a/src/vendor/jsr.io/@std/bytes/0.224.0/includes_needle.ts b/src/vendor/jsr.io/@std/bytes/0.224.0/includes_needle.ts new file mode 100644 index 00000000000..35fea061b49 --- /dev/null +++ b/src/vendor/jsr.io/@std/bytes/0.224.0/includes_needle.ts @@ -0,0 +1,45 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { indexOfNeedle } from "./index_of_needle.ts"; + +/** + * Determines whether the source array contains the needle array. + * + * The complexity of this function is `O(source.length * needle.length)`. + * + * @param source Source array to check. + * @param needle Needle array to check for. + * @param start Start index in the source array to begin the search. Defaults to + * 0. + * @returns `true` if the source array contains the needle array, `false` + * otherwise. + * + * @example Basic usage + * ```ts + * import { includesNeedle } from "@std/bytes/includes-needle"; + * + * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); + * const needle = new Uint8Array([1, 2]); + * + * includesNeedle(source, needle); // true + * ``` + * + * @example Start index + * ```ts + * import { includesNeedle } from "@std/bytes/includes-needle"; + * + * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); + * const needle = new Uint8Array([1, 2]); + * + * includesNeedle(source, needle, 6); // false + * ``` + * The search will start at the specified index in the source array. + */ +export function includesNeedle( + source: Uint8Array, + needle: Uint8Array, + start = 0, +): boolean { + return indexOfNeedle(source, needle, start) !== -1; +} diff --git a/src/vendor/jsr.io/@std/bytes/0.224.0/index_of_needle.ts b/src/vendor/jsr.io/@std/bytes/0.224.0/index_of_needle.ts new file mode 100644 index 00000000000..fba71139323 --- /dev/null +++ b/src/vendor/jsr.io/@std/bytes/0.224.0/index_of_needle.ts @@ -0,0 +1,70 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Returns the index of the first occurrence of the needle array in the source + * array, or -1 if it is not present. + * + * A start index can be specified as the third argument that begins the search + * at that given index. The start index defaults to the start of the array. + * + * The complexity of this function is `O(source.length * needle.length)`. + * + * @param source Source array to check. + * @param needle Needle array to check for. + * @param start Start index in the source array to begin the search. Defaults to + * 0. + * @returns Index of the first occurrence of the needle array in the source + * array, or -1 if it is not present. + * + * @example Basic usage + * ```ts + * import { indexOfNeedle } from "@std/bytes/index-of-needle"; + * + * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); + * const needle = new Uint8Array([1, 2]); + * const notNeedle = new Uint8Array([5, 0]); + * + * indexOfNeedle(source, needle); // 1 + * indexOfNeedle(source, notNeedle); // -1 + * ``` + * + * @example Start index + * ```ts + * import { indexOfNeedle } from "@std/bytes/index-of-needle"; + * + * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); + * const needle = new Uint8Array([1, 2]); + * + * indexOfNeedle(source, needle, 2); // 3 + * indexOfNeedle(source, needle, 6); // -1 + * ``` + * Defining a start index will begin the search at the specified index in the + * source array. + */ +export function indexOfNeedle( + source: Uint8Array, + needle: Uint8Array, + start = 0, +): number { + if (start >= source.length) { + return -1; + } + if (start < 0) { + start = Math.max(0, source.length + start); + } + const s = needle[0]; + for (let i = start; i < source.length; i++) { + if (source[i] !== s) continue; + let matched = 1; + let j = i + 1; + while (matched < needle.length && source[j] === needle[j - i]) { + matched++; + j++; + } + if (matched === needle.length) { + return i; + } + } + return -1; +} diff --git a/src/vendor/jsr.io/@std/bytes/0.224.0/last_index_of_needle.ts b/src/vendor/jsr.io/@std/bytes/0.224.0/last_index_of_needle.ts new file mode 100644 index 00000000000..39c48d7305c --- /dev/null +++ b/src/vendor/jsr.io/@std/bytes/0.224.0/last_index_of_needle.ts @@ -0,0 +1,69 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Returns the index of the last occurrence of the needle array in the source + * array, or -1 if it is not present. + * + * The complexity of this function is `O(source.length * needle.length)`. + * + * @param source Source array to check. + * @param needle Needle array to check for. + * @param start Start index in the source array to begin the search. Defaults to + * the end of the array. + * @returns Index of the last occurrence of the needle array in the source + * array, or -1 if it is not present. + * + * @example Basic usage + * ```ts + * import { lastIndexOfNeedle } from "@std/bytes/last-index-of-needle"; + * + * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); + * const needle = new Uint8Array([1, 2]); + * const notNeedle = new Uint8Array([5, 0]); + * + * lastIndexOfNeedle(source, needle); // 5 + * lastIndexOfNeedle(source, notNeedle); // -1 + * ``` + * + * @example Start index + * ```ts + * import { lastIndexOfNeedle } from "@std/bytes/last-index-of-needle"; + * + * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); + * const needle = new Uint8Array([1, 2]); + * + * lastIndexOfNeedle(source, needle, 2); // 1 + * lastIndexOfNeedle(source, needle, 6); // 3 + * ``` + * Defining a start index will begin the search at the specified index in the + * source array. + */ +export function lastIndexOfNeedle( + source: Uint8Array, + needle: Uint8Array, + start: number = source.length - 1, +): number { + if (start < 0) { + return -1; + } + if (start >= source.length) { + start = source.length - 1; + } + const e = needle[needle.length - 1]; + for (let i = start; i >= 0; i--) { + if (source[i] !== e) continue; + let matched = 1; + let j = i; + while ( + matched < needle.length && + source[--j] === needle[needle.length - 1 - (i - j)] + ) { + matched++; + } + if (matched === needle.length) { + return i - needle.length + 1; + } + } + return -1; +} diff --git a/src/vendor/jsr.io/@std/bytes/0.224.0/mod.ts b/src/vendor/jsr.io/@std/bytes/0.224.0/mod.ts new file mode 100644 index 00000000000..dfad04de09a --- /dev/null +++ b/src/vendor/jsr.io/@std/bytes/0.224.0/mod.ts @@ -0,0 +1,153 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Helper functions for working with + * {@linkcode https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array | Uint8Array} + * byte slices. + * + * ## Concatenate byte slices + * + * {@linkcode concat} concatenates an array of byte slices into a single slice. + * + * ```ts + * import { concat } from "@std/bytes/concat"; + * + * const a = new Uint8Array([0, 1, 2]); + * const b = new Uint8Array([3, 4, 5]); + * concat([a, b]); // Uint8Array(6) [ 0, 1, 2, 3, 4, 5 ] + * ``` + * + * ## Copy byte slices + * + * {@linkcode copy} copies bytes from the `src` array to the `dst` array and + * returns the number of bytes copied. + * + * ```ts + * import { copy } from "@std/bytes/copy"; + * + * const src = new Uint8Array([9, 8, 7]); + * const dst = new Uint8Array([0, 1, 2, 3, 4, 5]); + * + * copy(src, dst); // 3 + * dst; // Uint8Array(6) [9, 8, 7, 3, 4, 5] + * ``` + * + * ## Check if a byte slice ends with another byte slice + * + * {@linkcode endsWith} returns `true` if the suffix array appears at the end of + * the source array, `false` otherwise. + * + * ```ts + * import { endsWith } from "@std/bytes/ends-with"; + * + * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); + * const suffix = new Uint8Array([1, 2, 3]); + * + * endsWith(source, suffix); // true + * ``` + * + * ## Check if two byte slices are equal + * + * {@linkcode equals} checks whether byte slices are equal to each other. + * + * ```ts + * import { equals } from "@std/bytes/equals"; + * + * const a = new Uint8Array([1, 2, 3]); + * const b = new Uint8Array([1, 2, 3]); + * const c = new Uint8Array([4, 5, 6]); + * + * equals(a, b); // true + * equals(b, c); // false + * ``` + * + * ## Check if a byte slice includes another byte slice + * + * {@linkcode includesNeedle} determines whether the source array contains the + * needle array. + * + * ```ts + * import { includesNeedle } from "@std/bytes/includes-needle"; + * + * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); + * const needle = new Uint8Array([1, 2]); + * + * includesNeedle(source, needle); // true + * ``` + * + * ## Find the index of a byte slice in another byte slice + * + * {@linkcode indexOfNeedle} returns the index of the first occurrence of the + * needle array in the source array, or -1 if it is not present. + * + * ```ts + * import { indexOfNeedle } from "@std/bytes/index-of-needle"; + * + * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); + * const needle = new Uint8Array([1, 2]); + * const notNeedle = new Uint8Array([5, 0]); + * + * indexOfNeedle(source, needle); // 1 + * indexOfNeedle(source, notNeedle); // -1 + * ``` + * + * ## Find the last index of a byte slice in another byte slice + * + * {@linkcode lastIndexOfNeedle} returns the index of the last occurrence of the + * needle array in the source array, or -1 if it is not present. + * + * ```ts + * import { lastIndexOfNeedle } from "@std/bytes/last-index-of-needle"; + * + * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); + * const needle = new Uint8Array([1, 2]); + * const notNeedle = new Uint8Array([5, 0]); + * + * lastIndexOfNeedle(source, needle); // 5 + * lastIndexOfNeedle(source, notNeedle); // -1 + * ``` + * + * ## Repeat a byte slice + * + * {@linkcode repeat} returns a new byte slice composed of `count` repetitions + * of the `source` array. + * + * ```ts + * import { repeat } from "@std/bytes/repeat"; + * + * const source = new Uint8Array([0, 1, 2]); + * + * repeat(source, 3); // Uint8Array(9) [0, 1, 2, 0, 1, 2, 0, 1, 2] + * + * repeat(source, 0); // Uint8Array(0) [] + * + * repeat(source, -1); // Throws `RangeError` + * ``` + * + * ## Check if a byte slice starts with another byte slice + * + * {@linkcode startsWith} returns `true` if the prefix array appears at the start + * of the source array, `false` otherwise. + * + * ```ts + * import { startsWith } from "@std/bytes/starts-with"; + * + * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); + * const prefix = new Uint8Array([0, 1, 2]); + * + * startsWith(source, prefix); // true + * ``` + * + * @module + */ + +export * from "./concat.ts"; +export * from "./copy.ts"; +export * from "./ends_with.ts"; +export * from "./equals.ts"; +export * from "./includes_needle.ts"; +export * from "./index_of_needle.ts"; +export * from "./last_index_of_needle.ts"; +export * from "./repeat.ts"; +export * from "./starts_with.ts"; diff --git a/src/vendor/jsr.io/@std/bytes/0.224.0/repeat.ts b/src/vendor/jsr.io/@std/bytes/0.224.0/repeat.ts new file mode 100644 index 00000000000..6557a227a37 --- /dev/null +++ b/src/vendor/jsr.io/@std/bytes/0.224.0/repeat.ts @@ -0,0 +1,40 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import { copy } from "./copy.ts"; + +/** + * Returns a new byte slice composed of `count` repetitions of the `source` + * array. + * + * @param source Source array to repeat. + * @param count Number of times to repeat the source array. + * @returns A new byte slice composed of `count` repetitions of the `source` + * array. + * + * @example Basic usage + * ```ts + * import { repeat } from "@std/bytes/repeat"; + * + * const source = new Uint8Array([0, 1, 2]); + * + * repeat(source, 3); // Uint8Array(9) [0, 1, 2, 0, 1, 2, 0, 1, 2] + * + * repeat(source, 0); // Uint8Array(0) [] + * + * repeat(source, -1); // Throws `RangeError` + * ``` + */ +export function repeat(source: Uint8Array, count: number): Uint8Array { + if (count < 0 || !Number.isInteger(count)) { + throw new RangeError("Count must be a non-negative integer"); + } + + const repeated = new Uint8Array(source.length * count); + let offset = 0; + + while (offset < repeated.length) { + offset += copy(source, repeated, offset); + } + + return repeated; +} diff --git a/src/vendor/jsr.io/@std/bytes/0.224.0/starts_with.ts b/src/vendor/jsr.io/@std/bytes/0.224.0/starts_with.ts new file mode 100644 index 00000000000..8b4d4b997f4 --- /dev/null +++ b/src/vendor/jsr.io/@std/bytes/0.224.0/starts_with.ts @@ -0,0 +1,30 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Returns `true` if the prefix array appears at the start of the source array, + * `false` otherwise. + * + * The complexity of this function is `O(prefix.length)`. + * + * @param source Source array to check. + * @param prefix Prefix array to check for. + * @returns `true` if the prefix array appears at the start of the source array, + * `false` otherwise. + * + * @example Basic usage + * ```ts + * import { startsWith } from "@std/bytes/starts-with"; + * + * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); + * const prefix = new Uint8Array([0, 1, 2]); + * + * startsWith(source, prefix); // true + * ``` + */ +export function startsWith(source: Uint8Array, prefix: Uint8Array): boolean { + for (let i = 0; i < prefix.length; i++) { + if (source[i] !== prefix[i]) return false; + } + return true; +} diff --git a/src/vendor/jsr.io/@std/bytes/1.0.2/concat.ts b/src/vendor/jsr.io/@std/bytes/1.0.2/concat.ts new file mode 100644 index 00000000000..5b43cdfef65 --- /dev/null +++ b/src/vendor/jsr.io/@std/bytes/1.0.2/concat.ts @@ -0,0 +1,34 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Concatenate an array of byte slices into a single slice. + * + * @param buffers Array of byte slices to concatenate. + * @returns A new byte slice containing all the input slices concatenated. + * + * @example Basic usage + * ```ts + * import { concat } from "@std/bytes/concat"; + * import { assertEquals } from "@std/assert"; + * + * const a = new Uint8Array([0, 1, 2]); + * const b = new Uint8Array([3, 4, 5]); + * + * assertEquals(concat([a, b]), new Uint8Array([0, 1, 2, 3, 4, 5])); + * ``` + */ +export function concat(buffers: Uint8Array[]): Uint8Array { + let length = 0; + for (const buffer of buffers) { + length += buffer.length; + } + const output = new Uint8Array(length); + let index = 0; + for (const buffer of buffers) { + output.set(buffer, index); + index += buffer.length; + } + + return output; +} diff --git a/src/vendor/jsr.io/@std/bytes/1.0.2/copy.ts b/src/vendor/jsr.io/@std/bytes/1.0.2/copy.ts new file mode 100644 index 00000000000..027370eab7d --- /dev/null +++ b/src/vendor/jsr.io/@std/bytes/1.0.2/copy.ts @@ -0,0 +1,51 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Copy bytes from the source array to the destination array and returns the + * number of bytes copied. + * + * If the source array is larger than what the `dst` array can hold, only the + * amount of bytes that fit in the `dst` array are copied. + * + * @param src Source array to copy from. + * @param dst Destination array to copy to. + * @param offset Offset in the destination array to start copying to. Defaults + * to 0. + * @returns Number of bytes copied. + * + * @example Basic usage + * ```ts + * import { copy } from "@std/bytes/copy"; + * import { assertEquals } from "@std/assert"; + * + * const src = new Uint8Array([9, 8, 7]); + * const dst = new Uint8Array([0, 1, 2, 3, 4, 5]); + * + * assertEquals(copy(src, dst), 3); + * assertEquals(dst, new Uint8Array([9, 8, 7, 3, 4, 5])); + * ``` + * + * @example Copy with offset + * ```ts + * import { copy } from "@std/bytes/copy"; + * import { assertEquals } from "@std/assert"; + * + * const src = new Uint8Array([1, 1, 1, 1]); + * const dst = new Uint8Array([0, 0, 0, 0]); + * + * assertEquals(copy(src, dst, 1), 3); + * assertEquals(dst, new Uint8Array([0, 1, 1, 1])); + * ``` + * Defining an offset will start copying at the specified index in the + * destination array. + */ +export function copy(src: Uint8Array, dst: Uint8Array, offset = 0): number { + offset = Math.max(0, Math.min(offset, dst.byteLength)); + const dstBytesAvailable = dst.byteLength - offset; + if (src.byteLength > dstBytesAvailable) { + src = src.subarray(0, dstBytesAvailable); + } + dst.set(src, offset); + return src.byteLength; +} diff --git a/src/vendor/deno.land/std@0.217.0/cli/parse_args.ts b/src/vendor/jsr.io/@std/cli/0.224.7/parse_args.ts similarity index 91% rename from src/vendor/deno.land/std@0.217.0/cli/parse_args.ts rename to src/vendor/jsr.io/@std/cli/0.224.7/parse_args.ts index f34daef64da..b6f248e268e 100644 --- a/src/vendor/deno.land/std@0.217.0/cli/parse_args.ts +++ b/src/vendor/jsr.io/@std/cli/0.224.7/parse_args.ts @@ -5,37 +5,43 @@ * Command line arguments parser based on * {@link https://github.com/minimistjs/minimist | minimist}. * - * This module is browser compatible. - * * @example * ```ts - * import { parseArgs } from "https://deno.land/std@$STD_VERSION/cli/parse_args.ts"; + * import { parseArgs } from "@std/cli/parse-args"; * * console.dir(parseArgs(Deno.args)); * ``` * * @module */ -import { assert } from "../assert/assert.ts"; -/** Combines recursively all intersection types and returns a new single type. */ +/** Combines recursively all intersection types and returns a new single type. + * @internal + */ type Id = TRecord extends Record ? TRecord extends infer InferredRecord ? { [Key in keyof InferredRecord]: Id } : never : TRecord; -/** Converts a union type `A | B | C` into an intersection type `A & B & C`. */ +/** Converts a union type `A | B | C` into an intersection type `A & B & C`. + * @internal + */ type UnionToIntersection = (TValue extends unknown ? (args: TValue) => unknown : never) extends (args: infer R) => unknown ? R extends Record ? R : never : never; +/** @internal */ type BooleanType = boolean | string | undefined; +/** @internal */ type StringType = string | undefined; +/** @internal */ type ArgType = StringType | BooleanType; +/** @internal */ type Collectable = string | undefined; +/** @internal */ type Negatable = string | undefined; type UseTypes< @@ -52,6 +58,7 @@ type UseTypes< /** * Creates a record with all available flags with the corresponding type and * default type. + * @internal */ type Values< TBooleans extends BooleanType, @@ -79,6 +86,7 @@ type Values< // deno-lint-ignore no-explicit-any : Record; +/** @internal */ type Aliases = Partial< Record, TAliasNames | ReadonlyArray> >; @@ -126,6 +134,7 @@ type SpreadDefaults = TDefaults extends undefined ? TArgs /** * Defines the Record for the `default` option to add * auto-suggestion support for IDE's. + * @internal */ type Defaults = Id< UnionToIntersection< @@ -245,6 +254,7 @@ export type Args< : Record) >; +/** @internal */ type DoubleDash = { /** Contains all the arguments that appear after the double dash: "--". */ "--"?: Array; @@ -271,7 +281,7 @@ export interface ParseOptions< * @example * ```ts * // $ deno run example.ts -- a arg1 - * import { parseArgs } from "https://deno.land/std@$STD_VERSION/cli/parse_args.ts"; + * import { parseArgs } from "@std/cli/parse-args"; * console.dir(parseArgs(Deno.args, { "--": false })); * // output: { _: [ "a", "arg1" ] } * console.dir(parseArgs(Deno.args, { "--": true })); @@ -333,8 +343,7 @@ interface NestedMapping { [key: string]: NestedMapping | unknown; } -function isNumber(x: unknown): boolean { - if (typeof x === "number") return true; +function isNumber(x: string): boolean { if (/^0x[0-9a-f]+$/i.test(String(x))) return true; return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(String(x)); } @@ -350,7 +359,7 @@ function setNested( object = object[key] as NestedMapping; }); - const key = keys[keys.length - 1]; + const key = keys.at(-1)!; if (collect) { const v = object[key]; @@ -420,17 +429,32 @@ const FLAG_REGEXP = * Numeric-looking arguments will be returned as numbers unless `options.string` * or `options.boolean` is set for that argument name. * - * @example - * ```ts - * import { parseArgs } from "https://deno.land/std@$STD_VERSION/cli/parse_args.ts"; - * const parsedArgs = parseArgs(Deno.args); - * ``` + * @param args An array of command line arguments. * - * @example + * @typeParam TArgs Type of result. + * @typeParam TDoubleDash Used by `TArgs` for the result. + * @typeParam TBooleans Used by `TArgs` for the result. + * @typeParam TStrings Used by `TArgs` for the result. + * @typeParam TCollectable Used by `TArgs` for the result. + * @typeParam TNegatable Used by `TArgs` for the result. + * @typeParam TDefaults Used by `TArgs` for the result. + * @typeParam TAliases Used by `TArgs` for the result. + * @typeParam TAliasArgNames Used by `TArgs` for the result. + * @typeParam TAliasNames Used by `TArgs` for the result. + * + * @return The parsed arguments. + * + * @example Usage * ```ts - * import { parseArgs } from "https://deno.land/std@$STD_VERSION/cli/parse_args.ts"; - * const parsedArgs = parseArgs(["--foo", "--bar=baz", "./quux.txt"]); - * // parsedArgs: { foo: true, bar: "baz", _: ["./quux.txt"] } + * import { parseArgs } from "@std/cli/parse-args"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * // For proper use, one should use `parseArgs(Deno.args)` + * assertEquals(parseArgs(["--foo", "--bar=baz", "./quux.txt"]), { + * foo: true, + * bar: "baz", + * _: ["./quux.txt"], + * }); * ``` */ export function parseArgs< @@ -484,11 +508,15 @@ export function parseArgs< if (alias) { for (const key in alias) { const val = (alias as Record)[key]; - assert(val !== undefined); + if (val === undefined) throw new TypeError("Alias value must be defined"); const aliases = Array.isArray(val) ? val : [val]; aliasMap.set(key, new Set(aliases)); - const set = new Set([key, ...aliases]); - aliases.forEach((alias) => aliasMap.set(alias, set)); + aliases.forEach((alias) => + aliasMap.set( + alias, + new Set([key, ...aliases.filter((it) => it !== alias)]), + ) + ); } } @@ -553,9 +581,9 @@ export function parseArgs< const collectable = collect && collectSet.has(key); setNested(argv, key.split("."), value, collectable); - aliasMap.get(key)?.forEach((key) => - setNested(argv, key.split("."), value, collectable) - ); + aliasMap.get(key)?.forEach((key) => { + setNested(argv, key.split("."), value, collectable); + }); } let notFlags: string[] = []; @@ -568,14 +596,14 @@ export function parseArgs< } for (let i = 0; i < args.length; i++) { - const arg = args[i]; + const arg = args[i]!; const groups = arg.match(FLAG_REGEXP)?.groups; if (groups) { const { doubleDash, negated } = groups; - let key = groups.key; - let value: string | number | boolean = groups.value; + let key = groups.key!; + let value: string | number | boolean | undefined = groups.value; if (doubleDash) { if (value) { @@ -609,7 +637,7 @@ export function parseArgs< continue; } - if (isBooleanString(next)) { + if (next && isBooleanString(next)) { value = parseBooleanString(next); i++; setArgument(key, value, arg, true); @@ -632,7 +660,7 @@ export function parseArgs< } if (/[A-Za-z]/.test(letter) && /=/.test(next)) { - setArgument(letter, next.split(/=(.+)/)[1], arg, true); + setArgument(letter, next.split(/=(.+)/)[1]!, arg, true); broken = true; break; } @@ -646,7 +674,7 @@ export function parseArgs< break; } - if (letters[j + 1] && letters[j + 1].match(/\W/)) { + if (letters[j + 1] && letters[j + 1]!.match(/\W/)) { setArgument(letter, arg.slice(j + 2), arg, true); broken = true; break; diff --git a/src/vendor/deno.land/std@0.217.0/collections/_utils.ts b/src/vendor/jsr.io/@std/collections/0.224.2/_utils.ts similarity index 91% rename from src/vendor/deno.land/std@0.217.0/collections/_utils.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/_utils.ts index 939297453c4..a8df0d33d90 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/_utils.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/_utils.ts @@ -28,6 +28,6 @@ export function filterInPlace( /** * Produces a random number between the inclusive `lower` and `upper` bounds. */ -export function randomInteger(lower: number, upper: number) { +export function randomInteger(lower: number, upper: number): number { return lower + Math.floor(Math.random() * (upper - lower + 1)); } diff --git a/src/vendor/deno.land/std@0.217.0/collections/aggregate_groups.ts b/src/vendor/jsr.io/@std/collections/0.224.2/aggregate_groups.ts similarity index 54% rename from src/vendor/deno.land/std@0.217.0/collections/aggregate_groups.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/aggregate_groups.ts index be034445754..e5b76550d57 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/aggregate_groups.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/aggregate_groups.ts @@ -7,31 +7,38 @@ import { mapEntries } from "./map_entries.ts"; * Applies the given aggregator to each group in the given grouping, returning the * results together with the respective group keys * - * @template T input type of an item in a group in the given grouping. - * @template A type of the accumulator value, which will match the returned record's values. - * @example + * @template T Type of the values in the input record. + * @template A Type of the accumulator value, which will match the returned + * record's values. + * + * @param record The grouping to aggregate. + * @param aggregator The function to apply to each group. + * + * @returns A record with the same keys as the input record, but with the values + * being the result of applying the aggregator to each group. + * + * @example Basic usage * ```ts - * import { aggregateGroups } from "https://deno.land/std@$STD_VERSION/collections/aggregate_groups.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { aggregateGroups } from "@std/collections/aggregate-groups"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const foodProperties = { - * "Curry": ["spicy", "vegan"], - * "Omelette": ["creamy", "vegetarian"], + * Curry: ["spicy", "vegan"], + * Omelette: ["creamy", "vegetarian"], * }; + * * const descriptions = aggregateGroups( * foodProperties, * (current, key, first, acc) => { - * if (first) { - * return `${key} is ${current}`; - * } - * - * return `${acc} and ${current}`; + * return first + * ? `${key} is ${current}` + * : `${acc} and ${current}`; * }, * ); * * assertEquals(descriptions, { - * "Curry": "Curry is spicy and vegan", - * "Omelette": "Omelette is creamy and vegetarian", + * Curry: "Curry is spicy and vegan", + * Omelette: "Omelette is creamy and vegetarian", * }); * ``` */ @@ -43,7 +50,8 @@ export function aggregateGroups( record, ([key, values]) => [ key, - // Need the type assertions here because the reduce type does not support the type transition we need + // Need the type assertions here because the reduce type does not support + // the type transition we need values.reduce( (accumulator, current, currentIndex) => aggregator(current, key, currentIndex === 0, accumulator), diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/associate_by.ts b/src/vendor/jsr.io/@std/collections/0.224.2/associate_by.ts new file mode 100644 index 00000000000..fc1d4473962 --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/associate_by.ts @@ -0,0 +1,50 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Creates a record by associating each element of the input array with a key + * generated by the selector function. + * + * If the selector produces the same key for multiple elements, the latest one + * will be used (overriding the ones before it). + * + * @template T Type of the elements in the input array. + * + * @param array The array to transform. + * @param selector The function to extract the key from each element. + * + * @returns A record with the keys produced by the selector and the elements as + * values. + * + * @example Basic usage + * ```ts + * import { associateBy } from "@std/collections/associate-by"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const users = [ + * { id: "a2e", userName: "Anna" }, + * { id: "5f8", userName: "Arnold" }, + * { id: "d2c", userName: "Kim" }, + * ]; + * + * const usersById = associateBy(users, (user) => user.id); + * + * assertEquals(usersById, { + * "a2e": { id: "a2e", userName: "Anna" }, + * "5f8": { id: "5f8", userName: "Arnold" }, + * "d2c": { id: "d2c", userName: "Kim" }, + * }); + * ``` + */ +export function associateBy( + array: Iterable, + selector: (el: T) => string, +): Record { + const result: Record = {}; + + for (const element of array) { + result[selector(element)] = element; + } + + return result; +} diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/associate_with.ts b/src/vendor/jsr.io/@std/collections/0.224.2/associate_with.ts new file mode 100644 index 00000000000..2cfd5b67545 --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/associate_with.ts @@ -0,0 +1,46 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Associates each element of an array with a value returned by a selector + * function. + * + * If any of two pairs would have the same value the latest on will be used + * (overriding the ones before it). + * + * @template T The type of the values returned by the selector function. + * + * @param array The array of elements to associate with values. + * @param selector The selector function that returns a value for each element. + * + * @returns An object where each element of the array is associated with a value + * returned by the selector function. + * + * @example Basic usage + * ```ts + * import { associateWith } from "@std/collections/associate-with"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const names = ["Kim", "Lara", "Jonathan"]; + * + * const namesToLength = associateWith(names, (person) => person.length); + * + * assertEquals(namesToLength, { + * "Kim": 3, + * "Lara": 4, + * "Jonathan": 8, + * }); + * ``` + */ +export function associateWith( + array: Iterable, + selector: (key: string) => T, +): Record { + const result: Record = {}; + + for (const element of array) { + result[element] = selector(element); + } + + return result; +} diff --git a/src/vendor/deno.land/std@0.217.0/collections/chunk.ts b/src/vendor/jsr.io/@std/collections/0.224.2/chunk.ts similarity index 56% rename from src/vendor/deno.land/std@0.217.0/collections/chunk.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/chunk.ts index f3b198f5ba4..0b1fb1d1a61 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/chunk.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/chunk.ts @@ -4,10 +4,17 @@ /** * Splits the given array into chunks of the given size and returns them. * - * @example + * @template T Type of the elements in the input array. + * + * @param array The array to split into chunks. + * @param size The size of the chunks. This my be a positive integer. + * + * @returns An array of chunks of the given size. + * + * @example Basic usage * ```ts - * import { chunk } from "https://deno.land/std@$STD_VERSION/collections/chunk.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { chunk } from "@std/collections/chunk"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const words = [ * "lorem", @@ -32,25 +39,18 @@ */ export function chunk(array: readonly T[], size: number): T[][] { if (size <= 0 || !Number.isInteger(size)) { - throw new Error( + throw new RangeError( `Expected size to be an integer greater than 0 but found ${size}`, ); } - if (array.length === 0) { - return []; - } - - const ret = Array.from({ length: Math.ceil(array.length / size) }); - let readIndex = 0; - let writeIndex = 0; - - while (readIndex < array.length) { - ret[writeIndex] = array.slice(readIndex, readIndex + size); + const result: T[][] = []; + let index = 0; - writeIndex += 1; - readIndex += size; + while (index < array.length) { + result.push(array.slice(index, index + size)); + index += size; } - return ret; + return result; } diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/deep_merge.ts b/src/vendor/jsr.io/@std/collections/0.224.2/deep_merge.ts new file mode 100644 index 00000000000..81ab60d17f5 --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/deep_merge.ts @@ -0,0 +1,578 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { filterInPlace } from "./_utils.ts"; + +/** + * Merges the two given records, recursively merging any nested records with the + * second collection overriding the first in case of conflict. + * + * For arrays, maps and sets, a merging strategy can be specified to either + * `replace` values, or `merge` them instead. + * + * @template T Type of the first record + * + * @param record First record to merge. + * @param other Second record to merge. + * @param options Merging options. + * + * @returns A new record with the merged values. + * + * @example Merge objects + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const a = { foo: true }; + * const b = { foo: { bar: true } }; + * + * const result = deepMerge(a, b); + * + * const expected = { foo: { bar: true } }; + * + * assertEquals(result, expected); + * ``` + * + * @example Merge arrays + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const a = { foo: [1, 2] }; + * const b = { foo: [3, 4] }; + * + * const result = deepMerge(a, b); + * + * const expected = { foo: [1, 2, 3, 4] }; + * + * assertEquals(result, expected); + * ``` + * + * @example Merge maps + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const a = { foo: new Map([["a", 1]]) }; + * const b = { foo: new Map([["b", 2]]) }; + * + * const result = deepMerge(a, b); + * + * const expected = { foo: new Map([["a", 1], ["b", 2]]) }; + * + * assertEquals(result, expected); + * ``` + * + * @example Merge sets + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const a = { foo: new Set([1]) }; + * const b = { foo: new Set([2]) }; + * + * const result = deepMerge(a, b); + * + * const expected = { foo: new Set([1, 2]) }; + * + * assertEquals(result, expected); + * ``` + * + * @example Merge with custom options + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const a = { foo: [1, 2] }; + * const b = { foo: [3, 4] }; + * + * const result = deepMerge(a, b, { arrays: "replace" }); + * + * const expected = { foo: [3, 4] }; + * + * assertEquals(result, expected); + * ``` + */ +export function deepMerge< + T extends Record, +>( + record: Partial>, + other: Partial>, + options?: Readonly, +): T; +/** + * Merges the two given records, recursively merging any nested records with the + * second collection overriding the first in case of conflict. + * + * For arrays, maps and sets, a merging strategy can be specified to either + * `replace` values, or `merge` them instead. + * + * @template T Type of the first record + * @template U Type of the second record + * @template Options Merging options + * + * @param record First record to merge. + * @param other Second record to merge. + * @param options Merging options. + * + * @returns A new record with the merged values. + * + * @example Merge objects + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const a = { foo: true }; + * const b = { foo: { bar: true } }; + * + * const result = deepMerge(a, b); + * + * const expected = { foo: { bar: true } }; + * + * assertEquals(result, expected); + * ``` + * + * @example Merge arrays + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const a = { foo: [1, 2] }; + * const b = { foo: [3, 4] }; + * + * const result = deepMerge(a, b); + * + * const expected = { foo: [1, 2, 3, 4] }; + * + * assertEquals(result, expected); + * ``` + * + * @example Merge maps + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const a = { foo: new Map([["a", 1]]) }; + * const b = { foo: new Map([["b", 2]]) }; + * + * const result = deepMerge(a, b); + * + * const expected = { foo: new Map([["a", 1], ["b", 2]]) }; + * + * assertEquals(result, expected); + * ``` + * + * @example Merge sets + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const a = { foo: new Set([1]) }; + * const b = { foo: new Set([2]) }; + * + * const result = deepMerge(a, b); + * + * const expected = { foo: new Set([1, 2]) }; + * + * assertEquals(result, expected); + * ``` + * + * @example Merge with custom options + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const a = { foo: [1, 2] }; + * const b = { foo: [3, 4] }; + * + * const result = deepMerge(a, b, { arrays: "replace" }); + * + * const expected = { foo: [3, 4] }; + * + * assertEquals(result, expected); + * ``` + */ +export function deepMerge< + T extends Record, + U extends Record, + Options extends DeepMergeOptions, +>( + record: Readonly, + other: Readonly, + options?: Readonly, +): DeepMerge; +export function deepMerge< + T extends Record, + U extends Record, + Options extends DeepMergeOptions = { + arrays: "merge"; + sets: "merge"; + maps: "merge"; + }, +>( + record: Readonly, + other: Readonly, + options?: Readonly, +): DeepMerge { + return deepMergeInternal(record, other, new Set(), options); +} + +function deepMergeInternal< + T extends Record, + U extends Record, + Options extends DeepMergeOptions = { + arrays: "merge"; + sets: "merge"; + maps: "merge"; + }, +>( + record: Readonly, + other: Readonly, + seen: Set>, + options?: Readonly, +) { + // Extract options + // Clone left operand to avoid performing mutations in-place + type Result = DeepMerge; + const result: Partial = {}; + + const keys = new Set([ + ...getKeys(record), + ...getKeys(other), + ]) as Set; + + // Iterate through each key of other object and use correct merging strategy + for (const key of keys) { + // Skip to prevent Object.prototype.__proto__ accessor property calls on non-Deno platforms + if (key === "__proto__") { + continue; + } + + type ResultMember = Result[typeof key]; + + const a = record[key] as ResultMember; + + if (!Object.hasOwn(other, key)) { + result[key] = a; + + continue; + } + + const b = other[key] as ResultMember; + + if ( + isNonNullObject(a) && isNonNullObject(b) && !seen.has(a) && !seen.has(b) + ) { + seen.add(a); + seen.add(b); + result[key] = mergeObjects(a, b, seen, options) as ResultMember; + + continue; + } + + // Override value + result[key] = b; + } + + return result as Result; +} + +function mergeObjects( + left: Readonly>>, + right: Readonly>>, + seen: Set>, + options: Readonly = { + arrays: "merge", + sets: "merge", + maps: "merge", + }, +): Readonly | Iterable>> { + // Recursively merge mergeable objects + if (isMergeable(left) && isMergeable(right)) { + return deepMergeInternal(left, right, seen, options); + } + + if (isIterable(left) && isIterable(right)) { + // Handle arrays + if ((Array.isArray(left)) && (Array.isArray(right))) { + if (options.arrays === "merge") { + return left.concat(right); + } + + return right; + } + + // Handle maps + if ((left instanceof Map) && (right instanceof Map)) { + if (options.maps === "merge") { + return new Map([ + ...left, + ...right, + ]); + } + + return right; + } + + // Handle sets + if ((left instanceof Set) && (right instanceof Set)) { + if (options.sets === "merge") { + return new Set([ + ...left, + ...right, + ]); + } + + return right; + } + } + + return right; +} + +/** + * Test whether a value is mergeable or not + * Builtins that look like objects, null and user defined classes + * are not considered mergeable (it means that reference will be copied) + */ +function isMergeable( + value: NonNullable, +): value is Record { + return Object.getPrototypeOf(value) === Object.prototype; +} + +function isIterable( + value: NonNullable, +): value is Iterable { + return typeof (value as Iterable)[Symbol.iterator] === "function"; +} + +function isNonNullObject( + value: unknown, +): value is NonNullable> { + return value !== null && typeof value === "object"; +} + +function getKeys>(record: T): Array { + const result = Object.getOwnPropertySymbols(record) as Array; + filterInPlace( + result, + (key) => Object.prototype.propertyIsEnumerable.call(record, key), + ); + result.push(...(Object.keys(record) as Array)); + + return result; +} + +/** Merging strategy */ +export type MergingStrategy = "replace" | "merge"; + +/** Options for {@linkcode deepMerge}. */ +export type DeepMergeOptions = { + /** + * Merging strategy for arrays + * + * @default {"merge"} + */ + arrays?: MergingStrategy; + /** + * Merging strategy for maps. + * + * @default {"merge"} + */ + maps?: MergingStrategy; + /** + * Merging strategy for sets. + * + * @default {"merge"} + */ + sets?: MergingStrategy; +}; + +/** + * How does recursive typing works ? + * + * Deep merging process is handled through `DeepMerge` type. + * If both T and U are Records, we recursively merge them, + * else we treat them as primitives. + * + * Merging process is handled through `Merge` type, in which + * we remove all maps, sets, arrays and records so we can handle them + * separately depending on merging strategy: + * + * Merge< + * {foo: string}, + * {bar: string, baz: Set}, + * > // "foo" and "bar" will be handled with `MergeRightOmitComplexes` + * // "baz" will be handled with `MergeAll*` type + * + * `MergeRightOmitComplexes` will do the above: all T's + * exclusive keys will be kept, though common ones with U will have their + * typing overridden instead: + * + * MergeRightOmitComplexes< + * {foo: string, baz: number}, + * {foo: boolean, bar: string} + * > // {baz: number, foo: boolean, bar: string} + * // "baz" was kept from T + * // "foo" was overridden by U's typing + * // "bar" was added from U + * + * For Maps, Arrays, Sets and Records, we use `MergeAll*` utility + * types. They will extract relevant data structure from both T and U + * (providing that both have same data data structure, except for typing). + * + * From these, `*ValueType` will extract values (and keys) types to be + * able to create a new data structure with an union typing from both + * data structure of T and U: + * + * MergeAllSets< + * {foo: Set}, + * {foo: Set} + * > // `SetValueType` will extract "number" for T + * // `SetValueType` will extract "string" for U + * // `MergeAllSets` will infer type as Set + * // Process is similar for Maps, Arrays, and Sets + * + * `DeepMerge` is taking a third argument to be handle to + * infer final typing depending on merging strategy: + * + * & (Options extends { sets: "replace" } ? PartialByType> + * : MergeAllSets) + * + * In the above line, if "Options" have its merging strategy for Sets set to + * "replace", instead of performing merging of Sets type, it will take the + * typing from right operand (U) instead, effectively replacing the typing. + * + * An additional note, we use `ExpandRecursively` utility type to expand + * the resulting typing and hide all the typing logic of deep merging so it is + * more user friendly. + */ + +/** Force intellisense to expand the typing to hide merging typings */ +export type ExpandRecursively = T extends Record + ? T extends infer O ? { [K in keyof O]: ExpandRecursively } : never + : T; + +/** Filter of keys matching a given type */ +export type PartialByType = { + [K in keyof T as T[K] extends U ? K : never]: T[K]; +}; + +/** Get set values type */ +export type SetValueType = T extends Set ? V : never; + +/** Merge all sets types definitions from keys present in both objects */ +export type MergeAllSets< + T, + U, + X = PartialByType>, + Y = PartialByType>, + Z = { + [K in keyof X & keyof Y]: Set | SetValueType>; + }, +> = Z; + +/** Get array values type */ +export type ArrayValueType = T extends Array ? V : never; + +/** Merge all sets types definitions from keys present in both objects */ +export type MergeAllArrays< + T, + U, + X = PartialByType>, + Y = PartialByType>, + Z = { + [K in keyof X & keyof Y]: Array< + ArrayValueType | ArrayValueType + >; + }, +> = Z; + +/** Get map values types */ +export type MapKeyType = T extends Map ? K : never; + +/** Get map values types */ +export type MapValueType = T extends Map ? V : never; + +/** Merge all sets types definitions from keys present in both objects */ +export type MergeAllMaps< + T, + U, + X = PartialByType>, + Y = PartialByType>, + Z = { + [K in keyof X & keyof Y]: Map< + MapKeyType | MapKeyType, + MapValueType | MapValueType + >; + }, +> = Z; + +/** Merge all records types definitions from keys present in both objects */ +export type MergeAllRecords< + T, + U, + Options, + X = PartialByType>, + Y = PartialByType>, + Z = { + [K in keyof X & keyof Y]: DeepMerge; + }, +> = Z; + +/** Exclude map, sets and array from type */ +export type OmitComplexes = Omit< + T, + keyof PartialByType< + T, + | Map + | Set + | Array + | Record + > +>; + +/** Object with keys in either T or U but not in both */ +export type ObjectXorKeys< + T, + U, + X = Omit & Omit, + Y = { [K in keyof X]: X[K] }, +> = Y; + +/** Merge two objects, with left precedence */ +export type MergeRightOmitComplexes< + T, + U, + X = ObjectXorKeys & OmitComplexes<{ [K in keyof U]: U[K] }>, +> = X; + +/** Merge two objects */ +export type Merge< + T, + U, + Options, + X = + & MergeRightOmitComplexes + & MergeAllRecords + & (Options extends { sets: "replace" } ? PartialByType> + : MergeAllSets) + & (Options extends { arrays: "replace" } ? PartialByType> + : MergeAllArrays) + & (Options extends { maps: "replace" } + ? PartialByType> + : MergeAllMaps), +> = ExpandRecursively; + +/** Merge deeply two objects */ +export type DeepMerge< + T, + U, + Options = Record, +> = + // Handle objects + [T, U] extends [Record, Record] + ? Merge + // Handle primitives + : T | U; diff --git a/src/vendor/deno.land/std@0.217.0/collections/distinct.ts b/src/vendor/jsr.io/@std/collections/0.224.2/distinct.ts similarity index 59% rename from src/vendor/deno.land/std@0.217.0/collections/distinct.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/distinct.ts index 867c8bfe91c..8c57b52cb2d 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/distinct.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/distinct.ts @@ -5,10 +5,16 @@ * Returns all distinct elements in the given array, preserving order by first * occurrence. * - * @example + * @template T The type of the elements in the input array. + * + * @param array The array to filter for distinct elements. + * + * @returns An array of distinct elements in the input array. + * + * @example Basic usage * ```ts - * import { distinct } from "https://deno.land/std@$STD_VERSION/collections/distinct.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { distinct } from "@std/collections/distinct"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const numbers = [3, 2, 5, 2, 5]; * const distinctNumbers = distinct(numbers); diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/distinct_by.ts b/src/vendor/jsr.io/@std/collections/0.224.2/distinct_by.ts new file mode 100644 index 00000000000..fc9f2c05039 --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/distinct_by.ts @@ -0,0 +1,42 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Returns all elements in the given array that produce a distinct value using + * the given selector, preserving order by first occurrence. + * + * @template T The type of the elements in the input array. + * @template D The type of the values produced by the selector function. + * + * @param array The array to filter for distinct elements. + * @param selector The function to extract the value to compare for + * distinctness. + * + * @returns An array of distinct elements in the input array. + * + * @example Basic usage + * ```ts + * import { distinctBy } from "@std/collections/distinct-by"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const names = ["Anna", "Kim", "Arnold", "Kate"]; + * const exampleNamesByFirstLetter = distinctBy(names, (name) => name.charAt(0)); + * + * assertEquals(exampleNamesByFirstLetter, ["Anna", "Kim"]); + * ``` + */ +export function distinctBy( + array: Iterable, + selector: (el: T) => D, +): T[] { + const selectedValues = new Set(); + const result: T[] = []; + for (const element of array) { + const selected = selector(element); + if (!selectedValues.has(selected)) { + selectedValues.add(selected); + result.push(element); + } + } + return result; +} diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/drop_last_while.ts b/src/vendor/jsr.io/@std/collections/0.224.2/drop_last_while.ts new file mode 100644 index 00000000000..0dcef8a17ce --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/drop_last_while.ts @@ -0,0 +1,36 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Returns a new array that drops all elements in the given collection until the + * last element that does not match the given predicate. + * + * @template T The type of the elements in the input array. + * + * @param array The array to drop elements from. + * @param predicate The function to test each element for a condition. + * + * @returns A new array that drops all elements until the last element that does + * not match the given predicate. + * + * @example Basic usage + * ```ts + * import { dropLastWhile } from "@std/collections/drop-last-while"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const numbers = [20, 33, 44]; + * + * const notFortyFour = dropLastWhile(numbers, (number) => number > 30); + * + * assertEquals(notFortyFour, [20]); + * ``` + */ +export function dropLastWhile( + array: readonly T[], + predicate: (el: T) => boolean, +): T[] { + let offset = array.length; + while (0 < offset && predicate(array[offset - 1] as T)) offset--; + + return array.slice(0, offset); +} diff --git a/src/vendor/deno.land/std@0.217.0/collections/drop_while.ts b/src/vendor/jsr.io/@std/collections/0.224.2/drop_while.ts similarity index 54% rename from src/vendor/deno.land/std@0.217.0/collections/drop_while.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/drop_while.ts index 341a0e095bf..4a4655ff2cb 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/drop_while.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/drop_while.ts @@ -5,13 +5,21 @@ * Returns a new array that drops all elements in the given collection until the * first element that does not match the given predicate. * - * @example + * @template T The type of the elements in the input array. + * + * @param array The array to drop elements from. + * @param predicate The function to test each element for a condition. + * + * @returns A new array that drops all elements until the first element that + * does not match the given predicate. + * + * @example Basic usage * ```ts - * import { dropWhile } from "https://deno.land/std@$STD_VERSION/collections/drop_while.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { dropWhile } from "@std/collections/drop-while"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const numbers = [3, 2, 5, 2, 5]; - * const dropWhileNumbers = dropWhile(numbers, (i) => i !== 2); + * const dropWhileNumbers = dropWhile(numbers, (number) => number !== 2); * * assertEquals(dropWhileNumbers, [2, 5, 2, 5]); * ``` diff --git a/src/vendor/deno.land/std@0.217.0/collections/filter_entries.ts b/src/vendor/jsr.io/@std/collections/0.224.2/filter_entries.ts similarity index 52% rename from src/vendor/deno.land/std@0.217.0/collections/filter_entries.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/filter_entries.ts index 02c4a3d75a2..e5794a9b1b1 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/filter_entries.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/filter_entries.ts @@ -5,41 +5,44 @@ * Returns a new record with all entries of the given record except the ones * that do not match the given predicate. * - * @example + * @template T The type of the values in the input record. + * + * @param record The record to filter entries from. + * @param predicate The function to test each entry for a condition. + * + * @returns A new record with all entries that match the given predicate. + * + * @example Basic usage * ```ts - * import { filterEntries } from "https://deno.land/std@$STD_VERSION/collections/filter_entries.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { filterEntries } from "@std/collections/filter-entries"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const menu = { - * "Salad": 11, - * "Soup": 8, - * "Pasta": 13, - * } as const; + * Salad: 11, + * Soup: 8, + * Pasta: 13, + * }; + * * const myOptions = filterEntries( * menu, * ([item, price]) => item !== "Pasta" && price < 10, * ); * - * assertEquals( - * myOptions, - * { - * "Soup": 8, - * }, - * ); + * assertEquals(myOptions, { Soup: 8 }); * ``` */ export function filterEntries( record: Readonly>, predicate: (entry: [string, T]) => boolean, ): Record { - const ret: Record = {}; + const result: Record = {}; const entries = Object.entries(record); for (const [key, value] of entries) { if (predicate([key, value])) { - ret[key] = value; + result[key] = value; } } - return ret; + return result; } diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/filter_keys.ts b/src/vendor/jsr.io/@std/collections/0.224.2/filter_keys.ts new file mode 100644 index 00000000000..e996a3537aa --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/filter_keys.ts @@ -0,0 +1,51 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Returns a new record with all entries of the given record except the ones that + * have a key that does not match the given predicate. + * + * @template T The type of the values in the input record. + * + * @param record The record to filter keys from. + * @param predicate The function to test each key for a condition. + * + * @returns A new record with all entries that have a key that matches the given + * predicate. + * + * @example Basic usage + * ```ts + * import { filterKeys } from "@std/collections/filter-keys"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const menu = { + * Salad: 11, + * Soup: 8, + * Pasta: 13, + * }; + * + * const menuWithoutSalad = filterKeys(menu, (item) => item !== "Salad"); + * + * assertEquals( + * menuWithoutSalad, + * { + * Soup: 8, + * Pasta: 13, + * }, + * ); + * ``` + */ +export function filterKeys( + record: Readonly>, + predicate: (key: string) => boolean, +): Record { + const result: Record = {}; + + for (const [key, value] of Object.entries(record)) { + if (predicate(key)) { + result[key] = value; + } + } + + return result; +} diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/filter_values.ts b/src/vendor/jsr.io/@std/collections/0.224.2/filter_values.ts new file mode 100644 index 00000000000..89be1671319 --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/filter_values.ts @@ -0,0 +1,51 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Returns a new record with all entries of the given record except the ones + * that have a value that does not match the given predicate. + * + * @template T The type of the values in the input record. + * + * @param record The record to filter values from. + * @param predicate The function to test each value for a condition. + * + * @returns A new record with all entries that have a value that matches the + * given predicate. + * + * @example Basic usage + * ```ts + * import { filterValues } from "@std/collections/filter-values"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const people = { + * Arnold: 37, + * Sarah: 7, + * Kim: 23, + * }; + * const adults = filterValues(people, (person) => person >= 18); + * + * assertEquals( + * adults, + * { + * Arnold: 37, + * Kim: 23, + * }, + * ); + * ``` + */ +export function filterValues( + record: Readonly>, + predicate: (value: T) => boolean, +): Record { + const result: Record = {}; + const entries = Object.entries(record); + + for (const [key, value] of entries) { + if (predicate(value)) { + result[key] = value; + } + } + + return result; +} diff --git a/src/vendor/deno.land/std@0.217.0/collections/find_single.ts b/src/vendor/jsr.io/@std/collections/0.224.2/find_single.ts similarity index 50% rename from src/vendor/deno.land/std@0.217.0/collections/find_single.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/find_single.ts index 14cf524efbb..4cfca1db152 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/find_single.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/find_single.ts @@ -5,34 +5,40 @@ * Returns an element if and only if that element is the only one matching the * given condition. Returns `undefined` otherwise. * - * @example + * @template T The type of the elements in the input array. + * + * @param array The array to find a single element in. + * @param predicate The function to test each element for a condition. + * + * @returns The single element that matches the given condition or `undefined` + * if there are zero or more than one matching elements. + * + * @example Basic usage * ```ts - * import { findSingle } from "https://deno.land/std@$STD_VERSION/collections/find_single.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { findSingle } from "@std/collections/find-single"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const bookings = [ * { month: "January", active: false }, * { month: "March", active: false }, * { month: "June", active: true }, * ]; - * const activeBooking = findSingle(bookings, (it) => it.active); - * const inactiveBooking = findSingle(bookings, (it) => !it.active); + * const activeBooking = findSingle(bookings, (booking) => booking.active); + * const inactiveBooking = findSingle(bookings, (booking) => !booking.active); * * assertEquals(activeBooking, { month: "June", active: true }); - * assertEquals(inactiveBooking, undefined); // there are two applicable items + * assertEquals(inactiveBooking, undefined); // There are two applicable items * ``` */ export function findSingle( array: Iterable, predicate: (el: T) => boolean, ): T | undefined { - let match: T | undefined = undefined; + let match: T | undefined; let found = false; for (const element of array) { if (predicate(element)) { - if (found) { - return undefined; - } + if (found) return undefined; found = true; match = element; } diff --git a/src/vendor/deno.land/std@0.217.0/collections/first_not_nullish_of.ts b/src/vendor/jsr.io/@std/collections/0.224.2/first_not_nullish_of.ts similarity index 57% rename from src/vendor/deno.land/std@0.217.0/collections/first_not_nullish_of.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/first_not_nullish_of.ts index 40474a04587..eace9c4acbe 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/first_not_nullish_of.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/first_not_nullish_of.ts @@ -6,17 +6,27 @@ * produced that is neither `null` nor `undefined` and returns that value. * Returns `undefined` if no such value is produced. * - * @example + * @template T The type of the elements in the input array. + * @template O The type of the value produced by the selector function. + * + * @param array The array to select a value from. + * @param selector The function to extract a value from an element. + * + * @returns The first non-`null` and non-`undefined` value produced by the + * selector function, or `undefined` if no such value is produced. + * + * @example Basic usage * ```ts - * import { firstNotNullishOf } from "https://deno.land/std@$STD_VERSION/collections/first_not_nullish_of.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { firstNotNullishOf } from "@std/collections/first-not-nullish-of"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const tables = [ * { number: 11, order: null }, * { number: 12, order: "Soup" }, * { number: 13, order: "Salad" }, * ]; - * const nextOrder = firstNotNullishOf(tables, (it) => it.order); + * + * const nextOrder = firstNotNullishOf(tables, (table) => table.order); * * assertEquals(nextOrder, "Soup"); * ``` diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/includes_value.ts b/src/vendor/jsr.io/@std/collections/0.224.2/includes_value.ts new file mode 100644 index 00000000000..a78cca5aaee --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/includes_value.ts @@ -0,0 +1,45 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Returns true if the given value is part of the given object, otherwise it + * returns false. + * + * Note: this doesn't work with non-primitive values. For example, + * `includesValue({x: {}}, {})` returns false. + * + * @template T The type of the values in the input record. + * + * @param record The record to check for the given value. + * @param value The value to check for in the record. + * + * @returns `true` if the value is part of the record, otherwise `false`. + * + * @example Basic usage + * ```ts + * import { includesValue } from "@std/collections/includes-value"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const input = { + * first: 33, + * second: 34, + * }; + * + * assertEquals(includesValue(input, 34), true); + * ``` + */ +export function includesValue( + record: Readonly>, + value: T, +): boolean { + for (const i in record) { + if ( + Object.hasOwn(record, i) && + (record[i] === value || Number.isNaN(value) && Number.isNaN(record[i])) + ) { + return true; + } + } + + return false; +} diff --git a/src/vendor/deno.land/std@0.217.0/collections/intersect.ts b/src/vendor/jsr.io/@std/collections/0.224.2/intersect.ts similarity index 70% rename from src/vendor/deno.land/std@0.217.0/collections/intersect.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/intersect.ts index 328e13ded05..71e7ebfbf73 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/intersect.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/intersect.ts @@ -7,10 +7,17 @@ import { filterInPlace } from "./_utils.ts"; * Returns all distinct elements that appear at least once in each of the given * arrays. * - * @example + * @template T The type of the elements in the input arrays. + * + * @param arrays The arrays to intersect. + * + * @returns An array of distinct elements that appear at least once in each of + * the given arrays. + * + * @example Basic usage * ```ts - * import { intersect } from "https://deno.land/std@$STD_VERSION/collections/intersect.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { intersect } from "@std/collections/intersect"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const lisaInterests = ["Cooking", "Music", "Hiking"]; * const kimInterests = ["Music", "Tennis", "Cooking"]; diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/invert.ts b/src/vendor/jsr.io/@std/collections/0.224.2/invert.ts new file mode 100644 index 00000000000..de18849e28b --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/invert.ts @@ -0,0 +1,38 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** Return type for {@linkcode invert}. */ +export type InvertResult> = { + [P in keyof T as T[P]]: P; +}; + +/** + * Composes a new record with all keys and values inverted. + * + * If the record contains duplicate values, subsequent values overwrite property + * assignments of previous values. If the record contains values which aren't + * {@linkcode PropertyKey}s their string representation is used as the key. + * + * @template T The type of the input record. + * + * @param record The record to invert. + * + * @returns A new record with all keys and values inverted. + * + * @example Basic usage + * ```ts + * import { invert } from "@std/collections/invert"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const record = { a: "x", b: "y", c: "z" }; + * + * assertEquals(invert(record), { x: "a", y: "b", z: "c" }); + * ``` + */ +export function invert>( + record: Readonly, +): InvertResult { + return Object.fromEntries( + Object.entries(record).map(([key, value]) => [value, key]), + ); +} diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/invert_by.ts b/src/vendor/jsr.io/@std/collections/0.224.2/invert_by.ts new file mode 100644 index 00000000000..4d7abb90e19 --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/invert_by.ts @@ -0,0 +1,56 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** Return type for {@linkcode invertBy}. */ +export type InvertByResult< + T extends Record, + K extends keyof T, +> = Record; + +/** + * Composes a new record with all keys and values inverted. + * + * The new record is generated from the result of running each element of the + * input record through the given transformer function. + * + * The corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. + * + * @template R The type of the input record. + * @template T The type of the iterator function. + * + * @param record The record to invert. + * @param transformer The function to transform keys. + * + * @returns A new record with all keys and values inverted. + * + * @example Basic usage + * ```ts + * import { invertBy } from "@std/collections/invert-by"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const record = { a: "x", b: "y", c: "z" }; + * + * assertEquals( + * invertBy(record, (key) => String(key).toUpperCase()), + * { X: ["a"], Y: ["b"], Z: ["c"] } + * ); + * ``` + */ +export function invertBy< + R extends Record, + T extends (key: PropertyKey) => PropertyKey, +>(record: Readonly, transformer: T): InvertByResult { + const result = {} as InvertByResult; + + for (const [key, value] of Object.entries(record)) { + const mappedKey = transformer(value); + if (!Object.hasOwn(result, mappedKey)) { + result[mappedKey] = [key]; + } else { + result[mappedKey]!.push(key); + } + } + + return result; +} diff --git a/src/vendor/deno.land/std@0.217.0/collections/join_to_string.ts b/src/vendor/jsr.io/@std/collections/0.224.2/join_to_string.ts similarity index 52% rename from src/vendor/deno.land/std@0.217.0/collections/join_to_string.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/join_to_string.ts index 832a4860da4..f08cc06086d 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/join_to_string.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/join_to_string.ts @@ -3,10 +3,36 @@ /** Options for {@linkcode joinToString}. */ export type JoinToStringOptions = { + /** + * The string to use as a separator between the elements. + * + * @default {","} + */ separator?: string; + /** + * The string to use as a prefix for the resulting string. + * + * @default {""} + */ prefix?: string; + /** + * The string to use as a suffix for the resulting string. + * + * @default {""} + */ suffix?: string; + /** + * The maximum number of elements to append. If the value is negative, all + * elements will be appended, which is the default. + * + * @default {-1} + */ limit?: number; + /** + * The string to use as a placeholder for the truncated elements. + * + * @default {"..."} + */ truncated?: string; }; @@ -14,14 +40,23 @@ export type JoinToStringOptions = { * Transforms the elements in the given array to strings using the given * selector. Joins the produced strings into one using the given `separator` * and applying the given `prefix` and `suffix` to the whole string afterwards. + * * If the array could be huge, you can specify a non-negative value of `limit`, * in which case only the first `limit` elements will be appended, followed by - * the `truncated` string. Returns the resulting string. + * the `truncated` string. + * + * @template T The type of the elements in the input array. + * + * @param array The array to join elements from. + * @param selector The function to transform elements to strings. + * @param options The options to configure the joining. * - * @example + * @returns The resulting string. + * + * @example Usage with options * ```ts - * import { joinToString } from "https://deno.land/std@$STD_VERSION/collections/join_to_string.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { joinToString } from "@std/collections/join-to-string"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const users = [ * { name: "Kim" }, @@ -29,7 +64,7 @@ export type JoinToStringOptions = { * { name: "Tim" }, * ]; * - * const message = joinToString(users, (it) => it.name, { + * const message = joinToString(users, (user) => user.name, { * suffix: " are winners", * prefix: "result: ", * separator: " and ", @@ -43,33 +78,32 @@ export type JoinToStringOptions = { export function joinToString( array: Iterable, selector: (el: T) => string, - { + options: Readonly = {}, +): string { + const { separator = ",", prefix = "", suffix = "", limit = -1, truncated = "...", - }: Readonly = {}, -): string { + } = options; + let result = ""; - let index = -1; + let index = 0; for (const el of array) { - index++; - if (index > 0) { result += separator; } - if (limit > -1 && index >= limit) { + if (limit >= 0 && index >= limit) { result += truncated; break; } result += selector(el); + index++; } - result = prefix + result + suffix; - - return result; + return prefix + result + suffix; } diff --git a/src/vendor/deno.land/std@0.217.0/collections/map_entries.ts b/src/vendor/jsr.io/@std/collections/0.224.2/map_entries.ts similarity index 57% rename from src/vendor/deno.land/std@0.217.0/collections/map_entries.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/map_entries.ts index d3a25b4dbdb..4baa5304706 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/map_entries.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/map_entries.ts @@ -5,24 +5,33 @@ * Applies the given transformer to all entries in the given record and returns * a new record containing the results. * - * @example + * @template T The type of the values in the input record. + * @template O The type of the values in the output record. + * + * @param record The record to map entries from. + * @param transformer The function to transform each entry. + * + * @returns A new record with all entries transformed by the given transformer. + * + * @example Basic usage * ```ts - * import { mapEntries } from "https://deno.land/std@$STD_VERSION/collections/map_entries.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { mapEntries } from "@std/collections/map-entries"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const usersById = { * "a2e": { name: "Kim", age: 22 }, * "dfe": { name: "Anna", age: 31 }, * "34b": { name: "Tim", age: 58 }, - * } as const; + * }; + * * const agesByNames = mapEntries(usersById, ([id, { name, age }]) => [name, age]); * * assertEquals( * agesByNames, * { - * "Kim": 22, - * "Anna": 31, - * "Tim": 58, + * Kim: 22, + * Anna: 31, + * Tim: 58, * }, * ); * ``` @@ -31,14 +40,14 @@ export function mapEntries( record: Readonly>, transformer: (entry: [string, T]) => [string, O], ): Record { - const ret: Record = {}; + const result: Record = {}; const entries = Object.entries(record); for (const entry of entries) { const [mappedKey, mappedValue] = transformer(entry); - ret[mappedKey] = mappedValue; + result[mappedKey] = mappedValue; } - return ret; + return result; } diff --git a/src/vendor/deno.land/std@0.217.0/collections/map_keys.ts b/src/vendor/jsr.io/@std/collections/0.224.2/map_keys.ts similarity index 59% rename from src/vendor/deno.land/std@0.217.0/collections/map_keys.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/map_keys.ts index b151c95e5da..e5a8ed1d2de 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/map_keys.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/map_keys.ts @@ -8,15 +8,22 @@ * If the transformed entries contain the same key multiple times, only the last * one will appear in the returned record. * - * @example + * @template T The type of the values in the input record. + * + * @param record The record to map keys from. + * @param transformer The function to transform each key. + * + * @returns A new record with all keys transformed by the given transformer. + * + * @example Basic usage * ```ts - * import { mapKeys } from "https://deno.land/std@$STD_VERSION/collections/map_keys.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { mapKeys } from "@std/collections/map-keys"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const counts = { a: 5, b: 3, c: 8 }; * * assertEquals( - * mapKeys(counts, (it) => it.toUpperCase()), + * mapKeys(counts, (key) => key.toUpperCase()), * { * A: 5, * B: 3, @@ -29,12 +36,12 @@ export function mapKeys( record: Readonly>, transformer: (key: string) => string, ): Record { - const ret: Record = {}; + const result: Record = {}; for (const [key, value] of Object.entries(record)) { const mappedKey = transformer(key); - ret[mappedKey] = value; + result[mappedKey] = value; } - return ret; + return result; } diff --git a/src/vendor/deno.land/std@0.217.0/collections/map_not_nullish.ts b/src/vendor/jsr.io/@std/collections/0.224.2/map_not_nullish.ts similarity index 52% rename from src/vendor/deno.land/std@0.217.0/collections/map_not_nullish.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/map_not_nullish.ts index a9ad386d780..ace8bf5d5e2 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/map_not_nullish.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/map_not_nullish.ts @@ -6,10 +6,19 @@ * using the given transformer, except the ones that were transformed to `null` * or `undefined`. * - * @example + * @template T The type of the elements in the input array. + * @template O The type of the elements in the output array. + * + * @param array The array to map elements from. + * @param transformer The function to transform each element. + * + * @returns A new array with all elements transformed by the given transformer, + * except the ones that were transformed to `null` or `undefined`. + * + * @example Basic usage * ```ts - * import { mapNotNullish } from "https://deno.land/std@$STD_VERSION/collections/map_not_nullish.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { mapNotNullish } from "@std/collections/map-not-nullish"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const people = [ * { middleName: null }, @@ -17,7 +26,7 @@ * { middleName: undefined }, * { middleName: "Martha" }, * ]; - * const foundMiddleNames = mapNotNullish(people, (it) => it.middleName); + * const foundMiddleNames = mapNotNullish(people, (people) => people.middleName); * * assertEquals(foundMiddleNames, ["William", "Martha"]); * ``` @@ -26,15 +35,15 @@ export function mapNotNullish( array: Iterable, transformer: (el: T) => O, ): NonNullable[] { - const ret: NonNullable[] = []; + const result: NonNullable[] = []; for (const element of array) { const transformedElement = transformer(element); if (transformedElement !== undefined && transformedElement !== null) { - ret.push(transformedElement as NonNullable); + result.push(transformedElement as NonNullable); } } - return ret; + return result; } diff --git a/src/vendor/deno.land/std@0.217.0/collections/map_values.ts b/src/vendor/jsr.io/@std/collections/0.224.2/map_values.ts similarity index 51% rename from src/vendor/deno.land/std@0.217.0/collections/map_values.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/map_values.ts index 888850b5372..7a6c06e17ac 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/map_values.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/map_values.ts @@ -6,22 +6,31 @@ * new record containing the resulting keys associated to the last value that * produced them. * - * @example + * @template T The type of the values in the input record. + * @template O The type of the values in the output record. + * @template K The type of the keys in the input and output records. + * + * @param record The record to map values from. + * @param transformer The function to transform each value. + * + * @returns A new record with all values transformed by the given transformer. + * + * @example Basic usage * ```ts - * import { mapValues } from "https://deno.land/std@$STD_VERSION/collections/map_values.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { mapValues } from "@std/collections/map-values"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const usersById = { - * "a5ec": { name: "Mischa" }, - * "de4f": { name: "Kim" }, + * a5ec: { name: "Mischa" }, + * de4f: { name: "Kim" }, * }; - * const namesById = mapValues(usersById, (it) => it.name); + * const namesById = mapValues(usersById, (user) => user.name); * * assertEquals( * namesById, * { - * "a5ec": "Mischa", - * "de4f": "Kim", + * a5ec: "Mischa", + * de4f: "Kim", * }, * ); * ``` @@ -35,16 +44,25 @@ export function mapValues( * new record containing the resulting keys associated to the last value that * produced them. * - * @example + * @template T The type of the values in the input record. + * @template O The type of the values in the output record. + * @template K The type of the keys in the input and output records. + * + * @param record The record to map values from. + * @param transformer The function to transform each value. + * + * @returns A new record with all values transformed by the given transformer. + * + * @example Basic usage * ```ts - * import { mapValues } from "https://deno.land/std@$STD_VERSION/collections/map_values.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { mapValues } from "@std/collections/map-values"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const usersById = { * "a5ec": { name: "Mischa" }, * "de4f": { name: "Kim" }, * }; - * const namesById = mapValues(usersById, (it) => it.name); + * const namesById = mapValues(usersById, (user) => user.name); * * assertEquals( * namesById, @@ -65,14 +83,14 @@ export function mapValues( // deno-lint-ignore no-explicit-any ): any { // deno-lint-ignore no-explicit-any - const ret: any = {}; + const result: any = {}; const entries = Object.entries(record); for (const [key, value] of entries) { const mappedValue = transformer(value, key as K); - ret[key] = mappedValue; + result[key] = mappedValue; } - return ret; + return result; } diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/max_by.ts b/src/vendor/jsr.io/@std/collections/0.224.2/max_by.ts new file mode 100644 index 00000000000..b6266418b83 --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/max_by.ts @@ -0,0 +1,153 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Returns the first element that is the largest value of the given function or + * undefined if there are no elements. + * + * @template T The type of the elements in the array. + * + * @param array The array to find the maximum element in. + * @param selector The function to get the value to compare from each element. + * + * @returns The first element that is the largest value of the given function or + * undefined if there are no elements. + * + * @example Basic usage + * ```ts + * import { maxBy } from "@std/collections/max-by"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const people = [ + * { name: "Anna", age: 34 }, + * { name: "Kim", age: 42 }, + * { name: "John", age: 23 }, + * ]; + * + * const personWithMaxAge = maxBy(people, (person) => person.age); + * + * assertEquals(personWithMaxAge, { name: "Kim", age: 42 }); + * ``` + */ +export function maxBy( + array: Iterable, + selector: (el: T) => number, +): T | undefined; +/** + * Returns the first element that is the largest value of the given function or + * undefined if there are no elements. + * + * @template T The type of the elements in the array. + * + * @param array The array to find the maximum element in. + * @param selector The function to get the value to compare from each element. + * + * @returns The first element that is the largest value of the given function or + * undefined if there are no elements. + * + * @example Basic usage + * ```ts + * import { maxBy } from "@std/collections/max-by"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const people = [ + * { name: "Anna" }, + * { name: "Kim" }, + * { name: "John" }, + * ]; + * + * const personWithMaxName = maxBy(people, (person) => person.name); + * + * assertEquals(personWithMaxName, { name: "Kim" }); + * ``` + */ +export function maxBy( + array: Iterable, + selector: (el: T) => string, +): T | undefined; +/** + * Returns the first element that is the largest value of the given function or + * undefined if there are no elements. + * + * @template T The type of the elements in the array. + * + * @param array The array to find the maximum element in. + * @param selector The function to get the value to compare from each element. + * + * @returns The first element that is the largest value of the given function or + * undefined if there are no elements. + * + * @example Basic usage + * ```ts + * import { maxBy } from "@std/collections/max-by"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const people = [ + * { name: "Anna", age: 34n }, + * { name: "Kim", age: 42n }, + * { name: "John", age: 23n }, + * ]; + * + * const personWithMaxAge = maxBy(people, (person) => person.age); + * + * assertEquals(personWithMaxAge, { name: "Kim", age: 42n }); + * ``` + */ +export function maxBy( + array: Iterable, + selector: (el: T) => bigint, +): T | undefined; +/** + * Returns the first element that is the largest value of the given function or + * undefined if there are no elements. + * + * @template T The type of the elements in the array. + * + * @param array The array to find the maximum element in. + * @param selector The function to get the value to compare from each element. + * + * @returns The first element that is the largest value of the given function or + * undefined if there are no elements. + * + * @example Basic usage + * ```ts + * import { maxBy } from "@std/collections/max-by"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const people = [ + * { name: "Anna", startedAt: new Date("2020-01-01") }, + * { name: "Kim", startedAt: new Date("2021-03-01") }, + * { name: "John", startedAt: new Date("2020-03-01") }, + * ]; + * + * const personWithLastStartedAt = maxBy(people, (person) => person.startedAt); + * + * assertEquals(personWithLastStartedAt, { name: "Kim", startedAt: new Date("2021-03-01") }); + * ``` + */ +export function maxBy( + array: Iterable, + selector: (el: T) => Date, +): T | undefined; +export function maxBy( + array: Iterable, + selector: + | ((el: T) => number) + | ((el: T) => string) + | ((el: T) => bigint) + | ((el: T) => Date), +): T | undefined { + let max: T | undefined; + let maxValue: ReturnType | undefined; + + for (const current of array) { + const currentValue = selector(current); + + if (maxValue === undefined || currentValue > maxValue) { + max = current; + maxValue = currentValue; + } + } + + return max; +} diff --git a/src/vendor/deno.land/std@0.217.0/collections/max_of.ts b/src/vendor/jsr.io/@std/collections/0.224.2/max_of.ts similarity index 55% rename from src/vendor/deno.land/std@0.217.0/collections/max_of.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/max_of.ts index ee3050f4e89..801d28312e7 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/max_of.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/max_of.ts @@ -4,12 +4,20 @@ /** * Applies the given selector to all elements of the provided collection and * returns the max value of all elements. If an empty array is provided the - * function will return undefined + * function will return undefined. * - * @example + * @template T The type of the elements in the array. + * + * @param array The array to find the maximum element in. + * @param selector The function to get the value to compare from each element. + * + * @returns The largest value of the given function or undefined if there are no + * elements. + * + * @example Basic usage * ```ts - * import { maxOf } from "https://deno.land/std@$STD_VERSION/collections/max_of.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { maxOf } from "@std/collections/max-of"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const inventory = [ * { name: "mustard", count: 2 }, @@ -17,7 +25,7 @@ * { name: "tomato", count: 32 }, * ]; * - * const maxCount = maxOf(inventory, (i) => i.count); + * const maxCount = maxOf(inventory, (item) => item.count); * * assertEquals(maxCount, 32); * ``` @@ -29,12 +37,20 @@ export function maxOf( /** * Applies the given selector to all elements of the provided collection and * returns the max value of all elements. If an empty array is provided the - * function will return undefined + * function will return undefined. + * + * @template T The type of the elements in the array. + * + * @param array The array to find the maximum element in. + * @param selector The function to get the value to compare from each element. + * + * @returns The first element that is the largest value of the given function or + * undefined if there are no elements. * - * @example + * @example Basic usage * ```ts - * import { maxOf } from "https://deno.land/std@$STD_VERSION/collections/max_of.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { maxOf } from "@std/collections/max-of"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const inventory = [ * { name: "mustard", count: 2n }, @@ -55,10 +71,10 @@ export function maxOf number) | ((el: T) => bigint)>( array: Iterable, selector: S, ): ReturnType | undefined { - let maximumValue: ReturnType | undefined = undefined; + let maximumValue: ReturnType | undefined; - for (const i of array) { - const currentValue = selector(i) as ReturnType; + for (const element of array) { + const currentValue = selector(element) as ReturnType; if (maximumValue === undefined || currentValue > maximumValue) { maximumValue = currentValue; diff --git a/src/vendor/deno.land/std@0.217.0/collections/max_with.ts b/src/vendor/jsr.io/@std/collections/0.224.2/max_with.ts similarity index 62% rename from src/vendor/deno.land/std@0.217.0/collections/max_with.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/max_with.ts index c10a366db9f..f5f369645de 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/max_with.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/max_with.ts @@ -6,13 +6,21 @@ * comparator or undefined if there are no elements. * * The comparator is expected to work exactly like one passed to `Array.sort`, - * which means that `comparator(a, b)` should return a negative number if `a < b`, - * a positive number if `a > b` and `0` if `a === b`. + * which means that `comparator(a, b)` should return a negative number if + * `a < b`, a positive number if `a > b` and `0` if `a === b`. * - * @example + * @template T The type of the elements in the array. + * + * @param array The array to find the maximum element in. + * @param comparator The function to compare elements. + * + * @returns The first element that is the largest value of the given function or + * undefined if there are no elements. + * + * @example Basic usage * ```ts - * import { maxWith } from "https://deno.land/std@$STD_VERSION/collections/max_with.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { maxWith } from "@std/collections/max-with"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const people = ["Kim", "Anna", "John", "Arthur"]; * const largestName = maxWith(people, (a, b) => a.length - b.length); @@ -24,7 +32,7 @@ export function maxWith( array: Iterable, comparator: (a: T, b: T) => number, ): T | undefined { - let max: T | undefined = undefined; + let max: T | undefined; let isFirst = true; for (const current of array) { diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/min_by.ts b/src/vendor/jsr.io/@std/collections/0.224.2/min_by.ts new file mode 100644 index 00000000000..5ebfec24c4b --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/min_by.ts @@ -0,0 +1,151 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Returns the first element that is the smallest value of the given function or + * undefined if there are no elements. + * + * @template T The type of the elements in the array. + * + * @param array The array to find the minimum element in. + * @param selector The function to get the value to compare from each element. + * + * @returns The first element that is the smallest value of the given function + * or undefined if there are no elements. + * + * @example Basic usage + * ```ts + * import { minBy } from "@std/collections/min-by"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const people = [ + * { name: "Anna", age: 34 }, + * { name: "Kim", age: 42 }, + * { name: "John", age: 23 }, + * ]; + * + * const personWithMinAge = minBy(people, (i) => i.age); + * + * assertEquals(personWithMinAge, { name: "John", age: 23 }); + * ``` + */ +export function minBy( + array: Iterable, + selector: (el: T) => number, +): T | undefined; +/** + * Returns the first element that is the smallest value of the given function or + * undefined if there are no elements. + * + * @template T The type of the elements in the array. + * + * @param array The array to find the minimum element in. + * @param selector The function to get the value to compare from each element. + * + * @returns The first element that is the smallest value of the given function + * or undefined if there are no elements. + * + * @example Basic usage + * ```ts + * import { minBy } from "@std/collections/min-by"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const people = [ + * { name: "Anna" }, + * { name: "Kim" }, + * { name: "John" }, + * ]; + * + * const personWithMinName = minBy(people, (person) => person.name); + * + * assertEquals(personWithMinName, { name: "Anna" }); + * ``` + */ +export function minBy( + array: Iterable, + selector: (el: T) => string, +): T | undefined; +/** + * Returns the first element that is the smallest value of the given function or + * undefined if there are no elements. + * + * @template T The type of the elements in the array. + * + * @param array The array to find the minimum element in. + * @param selector The function to get the value to compare from each element. + * + * @returns The first element that is the smallest value of the given function + * or undefined if there are no elements. + * + * @example Basic usage + * ```ts + * import { minBy } from "@std/collections/min-by"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const people = [ + * { name: "Anna", age: 34n }, + * { name: "Kim", age: 42n }, + * { name: "John", age: 23n }, + * ]; + * + * const personWithMinAge = minBy(people, (i) => i.age); + * + * assertEquals(personWithMinAge, { name: "John", age: 23n }); + * ``` + */ +export function minBy( + array: Iterable, + selector: (el: T) => bigint, +): T | undefined; +/** + * Returns the first element that is the smallest value of the given function or + * undefined if there are no elements. + * + * @template T The type of the elements in the array. + * + * @param array The array to find the minimum element in. + * @param selector The function to get the value to compare from each element. + * + * @returns The first element that is the smallest value of the given function + * or undefined if there are no elements. + * + * @example Basic usage + * ```ts + * import { minBy } from "@std/collections/min-by"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const people = [ + * { name: "Anna", startedAt: new Date("2020-01-01") }, + * { name: "Kim", startedAt: new Date("2020-03-01") }, + * { name: "John", startedAt: new Date("2019-01-01") }, + * ]; + * + * const personWithMinStartedAt = minBy(people, (person) => person.startedAt); + * ``` + */ +export function minBy( + array: Iterable, + selector: (el: T) => Date, +): T | undefined; +export function minBy( + array: Iterable, + selector: + | ((el: T) => number) + | ((el: T) => string) + | ((el: T) => bigint) + | ((el: T) => Date), +): T | undefined { + let min: T | undefined; + let minValue: ReturnType | undefined; + + for (const current of array) { + const currentValue = selector(current); + + if (minValue === undefined || currentValue < minValue) { + min = current; + minValue = currentValue; + } + } + + return min; +} diff --git a/src/vendor/deno.land/std@0.217.0/collections/min_of.ts b/src/vendor/jsr.io/@std/collections/0.224.2/min_of.ts similarity index 55% rename from src/vendor/deno.land/std@0.217.0/collections/min_of.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/min_of.ts index 6a2fbe04a23..6ba451c9fd8 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/min_of.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/min_of.ts @@ -6,17 +6,26 @@ * returns the min value of all elements. If an empty array is provided the * function will return undefined. * - * @example + * @template T The type of the elements in the array. + * + * @param array The array to find the minimum element in. + * @param selector The function to get the value to compare from each element. + * + * @returns The smallest value of the given function or undefined if there are + * no elements. + * + * @example Basic usage * ```ts - * import { minOf } from "https://deno.land/std@$STD_VERSION/collections/min_of.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { minOf } from "@std/collections/min-of"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const inventory = [ * { name: "mustard", count: 2 }, * { name: "soy", count: 4 }, * { name: "tomato", count: 32 }, * ]; - * const minCount = minOf(inventory, (i) => i.count); + * + * const minCount = minOf(inventory, (item) => item.count); * * assertEquals(minCount, 2); * ``` @@ -30,17 +39,26 @@ export function minOf( * returns the min value of all elements. If an empty array is provided the * function will return undefined. * - * @example + * @template T The type of the elements in the array. + * + * @param array The array to find the minimum element in. + * @param selector The function to get the value to compare from each element. + * + * @returns The first element that is the smallest value of the given function + * or undefined if there are no elements. + * + * @example Basic usage * ```ts - * import { minOf } from "https://deno.land/std@$STD_VERSION/collections/min_of.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { minOf } from "@std/collections/min-of"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const inventory = [ * { name: "mustard", count: 2n }, * { name: "soy", count: 4n }, * { name: "tomato", count: 32n }, * ]; - * const minCount = minOf(inventory, (i) => i.count); + * + * const minCount = minOf(inventory, (item) => item.count); * * assertEquals(minCount, 2n); * ``` @@ -53,10 +71,10 @@ export function minOf number) | ((el: T) => bigint)>( array: Iterable, selector: S, ): ReturnType | undefined { - let minimumValue: ReturnType | undefined = undefined; + let minimumValue: ReturnType | undefined; - for (const i of array) { - const currentValue = selector(i) as ReturnType; + for (const element of array) { + const currentValue = selector(element) as ReturnType; if (minimumValue === undefined || currentValue < minimumValue) { minimumValue = currentValue; diff --git a/src/vendor/deno.land/std@0.217.0/collections/min_with.ts b/src/vendor/jsr.io/@std/collections/0.224.2/min_with.ts similarity index 56% rename from src/vendor/deno.land/std@0.217.0/collections/min_with.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/min_with.ts index 06aaae6cc99..2dc62ce58fe 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/min_with.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/min_with.ts @@ -3,12 +3,20 @@ /** * Returns the first element having the smallest value according to the provided - * comparator or undefined if there are no elements + * comparator or undefined if there are no elements. * - * @example + * @template T The type of the elements in the array. + * + * @param array The array to find the minimum element in. + * @param comparator The function to compare elements. + * + * @returns The first element that is the smallest value of the given function + * or undefined if there are no elements. + * + * @example Basic usage * ```ts - * import { minWith } from "https://deno.land/std@$STD_VERSION/collections/min_with.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { minWith } from "@std/collections/min-with"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const people = ["Kim", "Anna", "John"]; * const smallestName = minWith(people, (a, b) => a.length - b.length); @@ -20,7 +28,7 @@ export function minWith( array: Iterable, comparator: (a: T, b: T) => number, ): T | undefined { - let min: T | undefined = undefined; + let min: T | undefined; let isFirst = true; for (const current of array) { diff --git a/src/vendor/deno.land/std@0.217.0/collections/mod.ts b/src/vendor/jsr.io/@std/collections/0.224.2/mod.ts similarity index 72% rename from src/vendor/deno.land/std@0.217.0/collections/mod.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/mod.ts index 93760b045be..5d8a005dd88 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/mod.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/mod.ts @@ -9,6 +9,22 @@ * {@link https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/ | Kotlin's Collections} * package. * + * ```ts + * import { intersect, sample, pick } from "@std/collections"; + * import { assertEquals, assertArrayIncludes } from "@std/assert"; + * + * const lisaInterests = ["Cooking", "Music", "Hiking"]; + * const kimInterests = ["Music", "Tennis", "Cooking"]; + * + * assertEquals(intersect(lisaInterests, kimInterests), ["Cooking", "Music"]); + * + * assertArrayIncludes(lisaInterests, [sample(lisaInterests)]); + * + * const cat = { name: "Lulu", age: 3, breed: "Ragdoll" }; + * + * assertEquals(pick(cat, ["name", "breed"]), { name: "Lulu", breed: "Ragdoll"}); + * ``` + * * @module */ @@ -19,38 +35,42 @@ export * from "./chunk.ts"; export * from "./deep_merge.ts"; export * from "./distinct.ts"; export * from "./distinct_by.ts"; +export * from "./drop_last_while.ts"; export * from "./drop_while.ts"; export * from "./filter_entries.ts"; export * from "./filter_keys.ts"; export * from "./filter_values.ts"; +export * from "./find_single.ts"; +export * from "./first_not_nullish_of.ts"; +export * from "./includes_value.ts"; export * from "./intersect.ts"; +export * from "./invert_by.ts"; +export * from "./invert.ts"; +export * from "./join_to_string.ts"; export * from "./map_entries.ts"; export * from "./map_keys.ts"; export * from "./map_not_nullish.ts"; export * from "./map_values.ts"; -export * from "./partition.ts"; -export * from "./partition_entries.ts"; -export * from "./permutations.ts"; -export * from "./find_single.ts"; -export * from "./sliding_windows.ts"; -export * from "./sum_of.ts"; export * from "./max_by.ts"; export * from "./max_of.ts"; +export * from "./max_with.ts"; export * from "./min_by.ts"; export * from "./min_of.ts"; +export * from "./min_with.ts"; +export * from "./omit.ts"; +export * from "./partition.ts"; +export * from "./partition_entries.ts"; +export * from "./permutations.ts"; +export * from "./pick.ts"; +export * from "./reduce_groups.ts"; +export * from "./running_reduce.ts"; +export * from "./sample.ts"; +export * from "./sliding_windows.ts"; export * from "./sort_by.ts"; +export * from "./sum_of.ts"; +export * from "./take_last_while.ts"; +export * from "./take_while.ts"; export * from "./union.ts"; -export * from "./without_all.ts"; export * from "./unzip.ts"; +export * from "./without_all.ts"; export * from "./zip.ts"; -export * from "./join_to_string.ts"; -export * from "./max_with.ts"; -export * from "./min_with.ts"; -export * from "./includes_value.ts"; -export * from "./take_last_while.ts"; -export * from "./take_while.ts"; -export * from "./first_not_nullish_of.ts"; -export * from "./drop_last_while.ts"; -export * from "./reduce_groups.ts"; -export * from "./sample.ts"; -export * from "./running_reduce.ts"; diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/omit.ts b/src/vendor/jsr.io/@std/collections/0.224.2/omit.ts new file mode 100644 index 00000000000..034f1d305b4 --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/omit.ts @@ -0,0 +1,34 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Creates a new object by excluding the specified keys from the provided object. + * + * @template T The type of the object. + * @template K The type of the keys to omit. + * + * @param obj The object to omit keys from. + * @param keys The keys to omit from the object. + * + * @returns A new object with the specified keys omitted. + * + * @example Basic usage + * ```ts + * import { omit } from "@std/collections/omit"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const obj = { a: 5, b: 6, c: 7, d: 8 }; + * const omitted = omit(obj, ["a", "c"]); + * + * assertEquals(omitted, { b: 6, d: 8 }); + * ``` + */ +export function omit( + obj: Readonly, + keys: readonly K[], +): Omit { + const excludes = new Set(keys); + return Object.fromEntries( + Object.entries(obj).filter(([k, _]) => !excludes.has(k as K)), + ) as Omit; +} diff --git a/src/vendor/deno.land/std@0.217.0/collections/partition.ts b/src/vendor/jsr.io/@std/collections/0.224.2/partition.ts similarity index 53% rename from src/vendor/deno.land/std@0.217.0/collections/partition.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/partition.ts index 140bd142521..3f91d6953bf 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/partition.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/partition.ts @@ -6,10 +6,19 @@ * the given array that match the given predicate and the second one containing * all that do not. * - * @example + * @template T The type of the elements in the array. + * + * @param array The array to partition. + * @param predicate The predicate function to determine which array an element + * belongs to. + * + * @returns A tuple of two arrays. The first array contains all elements that + * match the predicate, the second contains all elements that do not. + * + * @example Basic usage * ```ts - * import { partition } from "https://deno.land/std@$STD_VERSION/collections/partition.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { partition } from "@std/collections/partition"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const numbers = [5, 6, 7, 8, 9]; * const [even, odd] = partition(numbers, (it) => it % 2 === 0); @@ -27,10 +36,24 @@ export function partition( * the given array that match the given predicate and the second one containing * all that do not. * - * @example + * This version of the function is a type-guard version of the function. It + * allows you to specify a type-guard predicate function that narrows the type + * of the elements in the array. + * + * @template T The type of the elements in the array. + * @template U The type of the elements that match the predicate. + * + * @param array The array to partition. + * @param predicate The type-guard predicate function to determine which array + * an element belongs to. + * + * @returns A tuple of two arrays. The first array contains all elements that + * match the predicate, the second contains all elements that do not. + * + * @example Basic usage * ```ts - * import { partition } from "https://deno.land/std@$STD_VERSION/collections/partition.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { partition } from "@std/collections/partition"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const numbers = [5, 6, 7, 8, 9]; * const [even, odd] = partition(numbers, (it) => it % 2 === 0); diff --git a/src/vendor/deno.land/std@0.217.0/collections/partition_entries.ts b/src/vendor/jsr.io/@std/collections/0.224.2/partition_entries.ts similarity index 62% rename from src/vendor/deno.land/std@0.217.0/collections/partition_entries.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/partition_entries.ts index 97b0aa2fa09..f039e7f6719 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/partition_entries.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/partition_entries.ts @@ -6,16 +6,24 @@ * the given record that match the given predicate and the second one containing * all that do not. * - * @example + * @template T The type of the values in the record. + * + * @param record The record to partition. + * @param predicate The predicate function to determine which entries go where. + * + * @returns A tuple containing two records, the first one containing all entries + * that match the predicate and the second one containing all that do not. + * + * @example Basic usage * ```ts - * import { partitionEntries } from "https://deno.land/std@$STD_VERSION/collections/partition_entries.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { partitionEntries } from "@std/collections/partition-entries"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const menu = { - * "Salad": 11, - * "Soup": 8, - * "Pasta": 13, - * } as const; + * Salad: 11, + * Soup: 8, + * Pasta: 13, + * }; * const myOptions = partitionEntries( * menu, * ([item, price]) => item !== "Pasta" && price < 10, @@ -24,8 +32,8 @@ * assertEquals( * myOptions, * [ - * { "Soup": 8 }, - * { "Salad": 11, "Pasta": 13 }, + * { Soup: 8 }, + * { Salad: 11, Pasta: 13 }, * ], * ); * ``` diff --git a/src/vendor/deno.land/std@0.217.0/collections/permutations.ts b/src/vendor/jsr.io/@std/collections/0.224.2/permutations.ts similarity index 68% rename from src/vendor/deno.land/std@0.217.0/collections/permutations.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/permutations.ts index 2824d07e2d6..b8da2a02851 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/permutations.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/permutations.ts @@ -6,10 +6,16 @@ * Ignores equality of elements, meaning this will always return the same * number of permutations for a given length of input. * - * @example + * @template T The type of the elements in the array. + * + * @param inputArray The array to build permutations from. + * + * @returns An array of all possible permutations of the given array. + * + * @example Basic usage * ```ts - * import { permutations } from "https://deno.land/std@$STD_VERSION/collections/permutations.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { permutations } from "@std/collections/permutations"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const numbers = [ 1, 2 ]; * const windows = permutations(numbers); @@ -21,20 +27,20 @@ * ``` */ export function permutations(inputArray: Iterable): T[][] { - const ret: T[][] = []; + const result: T[][] = []; const array = [...inputArray]; const k = array.length; if (k === 0) { - return ret; + return result; } // Heap's Algorithm const c = new Array(k).fill(0); - ret.push([...array]); + result.push([...array]); let i = 1; @@ -46,7 +52,7 @@ export function permutations(inputArray: Iterable): T[][] { [array[c[i]!], array[i]] = [array[i], array[c[i]!]] as [T, T]; } - ret.push([...array]); + result.push([...array]); c[i] += 1; i = 1; @@ -56,5 +62,5 @@ export function permutations(inputArray: Iterable): T[][] { } } - return ret; + return result; } diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/pick.ts b/src/vendor/jsr.io/@std/collections/0.224.2/pick.ts new file mode 100644 index 00000000000..e3bd03faf54 --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/pick.ts @@ -0,0 +1,32 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Creates a new object by including the specified keys from the provided + * object. + * + * @template T The type of the object. + * @template K The type of the keys. + * + * @param obj The object to pick keys from. + * @param keys The keys to include in the new object. + * + * @returns A new object with the specified keys from the provided object. + * + * @example Basic usage + * ```ts + * import { pick } from "@std/collections/pick"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const obj = { a: 5, b: 6, c: 7, d: 8 }; + * const picked = pick(obj, ["a", "c"]); + * + * assertEquals(picked, { a: 5, c: 7 }); + * ``` + */ +export function pick( + obj: Readonly, + keys: readonly K[], +): Pick { + return Object.fromEntries(keys.map((k) => [k, obj[k]])) as Pick; +} diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/reduce_groups.ts b/src/vendor/jsr.io/@std/collections/0.224.2/reduce_groups.ts new file mode 100644 index 00000000000..5e6f14c298f --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/reduce_groups.ts @@ -0,0 +1,45 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { mapValues } from "./map_values.ts"; + +/** + * Applies the given reducer to each group in the given grouping, returning the + * results together with the respective group keys. + * + * @template T input type of an item in a group in the given grouping. + * @template A type of the accumulator value, which will match the returned + * record's values. + * + * @param record The grouping to reduce. + * @param reducer The reducer function to apply to each group. + * @param initialValue The initial value of the accumulator. + * + * @returns A record with the same keys as the input grouping, where each value + * is the result of applying the reducer to the respective group. + * + * @example Basic usage + * ```ts + * import { reduceGroups } from "@std/collections/reduce-groups"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const votes = { + * Woody: [2, 3, 1, 4], + * Buzz: [5, 9], + * }; + * + * const totalVotes = reduceGroups(votes, (sum, vote) => sum + vote, 0); + * + * assertEquals(totalVotes, { + * Woody: 10, + * Buzz: 14, + * }); + * ``` + */ +export function reduceGroups( + record: Readonly>>, + reducer: (accumulator: A, current: T) => A, + initialValue: A, +): Record { + return mapValues(record, (value) => value.reduce(reducer, initialValue)); +} diff --git a/src/vendor/deno.land/std@0.217.0/collections/running_reduce.ts b/src/vendor/jsr.io/@std/collections/0.224.2/running_reduce.ts similarity index 63% rename from src/vendor/deno.land/std@0.217.0/collections/running_reduce.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/running_reduce.ts index 2288baa16fe..6c21dc1f6a3 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/running_reduce.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/running_reduce.ts @@ -6,10 +6,19 @@ * result as the accumulator to the next respective call, starting with the * given initialValue. Returns all intermediate accumulator results. * - * @example + * @template T The type of the elements in the array. + * @template O The type of the accumulator. + * + * @param array The array to reduce. + * @param reducer The reducer function to apply to each element. + * @param initialValue The initial value of the accumulator. + * + * @returns An array of all intermediate accumulator results. + * + * @example Basic usage * ```ts - * import { runningReduce } from "https://deno.land/std@$STD_VERSION/collections/running_reduce.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { runningReduce } from "@std/collections/running-reduce"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const numbers = [1, 2, 3, 4, 5]; * const sumSteps = runningReduce(numbers, (sum, current) => sum + current, 0); diff --git a/src/vendor/deno.land/std@0.217.0/collections/sample.ts b/src/vendor/jsr.io/@std/collections/0.224.2/sample.ts similarity index 52% rename from src/vendor/deno.land/std@0.217.0/collections/sample.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/sample.ts index 2007f630a9d..a8f5c085ccf 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/sample.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/sample.ts @@ -6,15 +6,23 @@ import { randomInteger } from "./_utils.ts"; /** * Returns a random element from the given array. * - * @example + * @template T The type of the elements in the array. + * @template O The type of the accumulator. + * + * @param array The array to sample from. + * + * @returns A random element from the given array, or `undefined` if the array + * is empty. + * + * @example Basic usage * ```ts - * import { sample } from "https://deno.land/std@$STD_VERSION/collections/sample.ts"; - * import { assert } from "https://deno.land/std@$STD_VERSION/assert/assert.ts"; + * import { sample } from "@std/collections/sample"; + * import { assertArrayIncludes } from "@std/assert/assert-array-includes"; * * const numbers = [1, 2, 3, 4]; * const random = sample(numbers); * - * assert(numbers.includes(random as number)); + * assertArrayIncludes(numbers, [random]); * ``` */ export function sample(array: readonly T[]): T | undefined { diff --git a/src/vendor/deno.land/std@0.217.0/collections/sliding_windows.ts b/src/vendor/jsr.io/@std/collections/0.224.2/sliding_windows.ts similarity index 52% rename from src/vendor/deno.land/std@0.217.0/collections/sliding_windows.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/sliding_windows.ts index 0187e591cc0..d2af1bc5802 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/sliding_windows.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/sliding_windows.ts @@ -1,6 +1,24 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. +/** Options for {@linkcode slidingWindows}. */ +export interface SlidingWindowsOptions { + /** + * If step is set, each window will start that many elements after the last + * window's start. + * + * @default {1} + */ + step?: number; + /** + * If partial is set, windows will be generated for the last elements of the + * collection, resulting in some undefined values if size is greater than 1. + * + * @default {false} + */ + partial?: boolean; +} + /** * Generates sliding views of the given array of the given size and returns a * new array containing all of them. @@ -11,10 +29,18 @@ * If partial is set, windows will be generated for the last elements of the * collection, resulting in some undefined values if size is greater than 1. * - * @example + * @template T The type of the array elements. + * + * @param array The array to generate sliding windows from. + * @param size The size of the sliding windows. + * @param options The options for generating sliding windows. + * + * @returns A new array containing all sliding windows of the given size. + * + * @example Usage * ```ts - * import { slidingWindows } from "https://deno.land/std@$STD_VERSION/collections/sliding_windows.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { slidingWindows } from "@std/collections/sliding-windows"; + * import { assertEquals } from "@std/assert/assert-equals"; * const numbers = [1, 2, 3, 4, 5]; * * const windows = slidingWindows(numbers, 3); @@ -43,35 +69,18 @@ export function slidingWindows( array: readonly T[], size: number, - { step = 1, partial = false }: { - /** - * If step is set, each window will start that many elements after the last - * window's start. - * - * @default {1} - */ - step?: number; - /** - * If partial is set, windows will be generated for the last elements of the - * collection, resulting in some undefined values if size is greater than 1. - * - * @default {false} - */ - partial?: boolean; - } = {}, + options: SlidingWindowsOptions = {}, ): T[][] { + const { step = 1, partial = false } = options; + if ( !Number.isInteger(size) || !Number.isInteger(step) || size <= 0 || step <= 0 ) { throw new RangeError("Both size and step must be positive integer."); } - /** length of the return array */ - const length = Math.floor((array.length - (partial ? 1 : size)) / step + 1); - - const result = []; - for (let i = 0; i < length; i++) { - result.push(array.slice(i * step, i * step + size)); - } - return result; + return Array.from( + { length: Math.floor((array.length - (partial ? 1 : size)) / step + 1) }, + (_, i) => array.slice(i * step, i * step + size), + ); } diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/sort_by.ts b/src/vendor/jsr.io/@std/collections/0.224.2/sort_by.ts new file mode 100644 index 00000000000..7e34c092785 --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/sort_by.ts @@ -0,0 +1,209 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** Order option for {@linkcode SortByOptions}. */ +export type Order = "asc" | "desc"; + +/** Options for {@linkcode sortBy}. */ +export type SortByOptions = { + /** + * The order to sort the elements in. + * + * @default {"asc"} + */ + order: Order; +}; + +/** + * Returns all elements in the given collection, sorted by their result using + * the given selector. The selector function is called only once for each + * element. Ascending or descending order can be specified through the `order` + * option. By default, the elements are sorted in ascending order. + * + * @template T The type of the array elements. + * + * @param array The array to sort. + * @param selector The selector function to get the value to sort by. + * @param options The options for sorting. + * + * @returns A new array containing all elements sorted by the selector. + * + * @example Usage + * ```ts + * import { sortBy } from "@std/collections/sort-by"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const people = [ + * { name: "Anna", age: 34 }, + * { name: "Kim", age: 42 }, + * { name: "John", age: 23 }, + * ]; + * const sortedByAge = sortBy(people, (person) => person.age); + * + * assertEquals(sortedByAge, [ + * { name: "John", age: 23 }, + * { name: "Anna", age: 34 }, + * { name: "Kim", age: 42 }, + * ]); + * + * const sortedByAgeDesc = sortBy(people, (person) => person.age, { order: "desc" }); + * + * assertEquals(sortedByAgeDesc, [ + * { name: "Kim", age: 42 }, + * { name: "Anna", age: 34 }, + * { name: "John", age: 23 }, + * ]); + * ``` + */ +export function sortBy( + array: readonly T[], + selector: (el: T) => number, + options?: SortByOptions, +): T[]; +/** + * Returns all elements in the given collection, sorted by their result using + * the given selector. The selector function is called only once for each + * element. Ascending or descending order can be specified through the `order` + * option. By default, the elements are sorted in ascending order. + * + * @template T The type of the array elements. + * + * @param array The array to sort. + * @param selector The selector function to get the value to sort by. + * @param options The options for sorting. + * + * @returns A new array containing all elements sorted by the selector. + * + * @example Usage + * ```ts + * import { sortBy } from "@std/collections/sort-by"; + * + * const people = [ + * { name: "Anna" }, + * { name: "Kim" }, + * { name: "John" }, + * ]; + * const sortedByName = sortBy(people, (it) => it.name); + * ``` + */ +export function sortBy( + array: readonly T[], + selector: (el: T) => string, + options?: SortByOptions, +): T[]; +/** + * Returns all elements in the given collection, sorted by their result using + * the given selector. The selector function is called only once for each + * element. Ascending or descending order can be specified through the `order` + * option. By default, the elements are sorted in ascending order. + * + * @template T The type of the array elements. + * + * @param array The array to sort. + * @param selector The selector function to get the value to sort by. + * @param options The options for sorting. + * + * @returns A new array containing all elements sorted by the selector. + * + * @example Usage + * ```ts + * import { sortBy } from "@std/collections/sort-by"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const people = [ + * { name: "Anna", age: 34n }, + * { name: "Kim", age: 42n }, + * { name: "John", age: 23n }, + * ]; + * + * const sortedByAge = sortBy(people, (person) => person.age); + * + * assertEquals(sortedByAge, [ + * { name: "John", age: 23n }, + * { name: "Anna", age: 34n }, + * { name: "Kim", age: 42n }, + * ]); + * ``` + */ + +export function sortBy( + array: readonly T[], + selector: (el: T) => bigint, + options?: SortByOptions, +): T[]; +/** + * Returns all elements in the given collection, sorted by their result using + * the given selector. The selector function is called only once for each + * element. Ascending or descending order can be specified through the `order` + * option. By default, the elements are sorted in ascending order. + * + * @template T The type of the array elements. + * + * @param array The array to sort. + * @param selector The selector function to get the value to sort by. + * @param options The options for sorting. + * + * @returns A new array containing all elements sorted by the selector. + * + * @example Usage + * ```ts + * import { sortBy } from "@std/collections/sort-by"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const people = [ + * { name: "Anna", startedAt: new Date("2020-01-01") }, + * { name: "Kim", startedAt: new Date("2020-03-01") }, + * { name: "John", startedAt: new Date("2020-06-01") }, + * ]; + * + * const sortedByStartedAt = sortBy(people, (people) => people.startedAt); + * + * assertEquals(sortedByStartedAt, [ + * { name: "Anna", startedAt: new Date("2020-01-01") }, + * { name: "Kim", startedAt: new Date("2020-03-01") }, + * { name: "John", startedAt: new Date("2020-06-01") }, + * ]); + * ``` + */ +export function sortBy( + array: readonly T[], + selector: (el: T) => Date, + options?: SortByOptions, +): T[]; +export function sortBy( + array: readonly T[], + selector: + | ((el: T) => number) + | ((el: T) => string) + | ((el: T) => bigint) + | ((el: T) => Date), + options?: SortByOptions, +): T[] { + const len = array.length; + const indexes = new Array(len); + const selectors = new Array | null>(len); + const order = options?.order ?? "asc"; + + array.forEach((element, index) => { + indexes[index] = index; + const selected = selector(element); + selectors[index] = Number.isNaN(selected) ? null : selected; + }); + + indexes.sort((ai, bi) => { + let a = selectors[ai]!; + let b = selectors[bi]!; + if (order === "desc") { + [a, b] = [b, a]; + } + if (a === null) return 1; + if (b === null) return -1; + return a > b ? 1 : a < b ? -1 : 0; + }); + + for (let i = 0; i < len; i++) { + (indexes as unknown as T[])[i] = array[indexes[i]!] as T; + } + + return indexes as unknown as T[]; +} diff --git a/src/vendor/deno.land/std@0.217.0/collections/sum_of.ts b/src/vendor/jsr.io/@std/collections/0.224.2/sum_of.ts similarity index 58% rename from src/vendor/deno.land/std@0.217.0/collections/sum_of.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/sum_of.ts index 07b5427dc6d..2b9753be38c 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/sum_of.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/sum_of.ts @@ -5,17 +5,25 @@ * Applies the given selector to all elements in the given collection and * calculates the sum of the results. * - * @example + * @template T The type of the array elements. + * + * @param array The array to calculate the sum of. + * @param selector The selector function to get the value to sum. + * + * @returns The sum of all elements in the collection. + * + * @example Basic usage * ```ts - * import { sumOf } from "https://deno.land/std@$STD_VERSION/collections/sum_of.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { sumOf } from "@std/collections/sum-of"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const people = [ * { name: "Anna", age: 34 }, * { name: "Kim", age: 42 }, * { name: "John", age: 23 }, * ]; - * const totalAge = sumOf(people, (i) => i.age); + * + * const totalAge = sumOf(people, (person) => person.age); * * assertEquals(totalAge, 99); * ``` diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/take_last_while.ts b/src/vendor/jsr.io/@std/collections/0.224.2/take_last_while.ts new file mode 100644 index 00000000000..e64bb947184 --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/take_last_while.ts @@ -0,0 +1,37 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Returns all elements in the given array after the last element that does not + * match the given predicate. + * + * @template T The type of the array elements. + * + * @param array The array to take elements from. + * @param predicate The predicate function to determine if an element should be + * included. + * + * @returns A new array containing all elements after the last element that does + * not match the predicate. + * + * @example Basic usage + * ```ts + * import { takeLastWhile } from "@std/collections/take-last-while"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const numbers = [1, 2, 3, 4, 5, 6]; + * + * const result = takeLastWhile(numbers, (number) => number > 4); + * + * assertEquals(result, [5, 6]); + * ``` + */ +export function takeLastWhile( + array: readonly T[], + predicate: (el: T) => boolean, +): T[] { + let offset = array.length; + while (0 < offset && predicate(array[offset - 1] as T)) offset--; + + return array.slice(offset, array.length); +} diff --git a/src/vendor/jsr.io/@std/collections/0.224.2/take_while.ts b/src/vendor/jsr.io/@std/collections/0.224.2/take_while.ts new file mode 100644 index 00000000000..244a6a78833 --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/0.224.2/take_while.ts @@ -0,0 +1,41 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Returns all elements in the given collection until the first element that + * does not match the given predicate. + * + * @template T The type of the array elements. + * + * @param array The array to take elements from. + * @param predicate The predicate function to determine if an element should be + * included. + * + * @returns A new array containing all elements until the first element that + * does not match the predicate. + * + * @example Basic usage + * ```ts + * import { takeWhile } from "@std/collections/take-while"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const numbers = [1, 2, 3, 4, 5, 6]; + * + * const result = takeWhile(numbers, (number) => number < 4); + * + * assertEquals(result, [1, 2, 3]); + * ``` + */ +export function takeWhile( + array: readonly T[], + predicate: (el: T) => boolean, +): T[] { + let offset = 0; + const length = array.length; + + while (length > offset && predicate(array[offset] as T)) { + offset++; + } + + return array.slice(0, offset); +} diff --git a/src/vendor/deno.land/std@0.217.0/collections/union.ts b/src/vendor/jsr.io/@std/collections/0.224.2/union.ts similarity index 68% rename from src/vendor/deno.land/std@0.217.0/collections/union.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/union.ts index efbbccdbc01..ddf7d4f63b5 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/union.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/union.ts @@ -4,13 +4,20 @@ /** * Returns all distinct elements that appear in any of the given arrays. * - * @example + * @template T The type of the array elements. + * + * @param arrays The arrays to get the union of. + * + * @returns A new array containing all distinct elements from the given arrays. + * + * @example Basic usage * ```ts - * import { union } from "https://deno.land/std@$STD_VERSION/collections/union.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { union } from "@std/collections/union"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const soupIngredients = ["Pepper", "Carrots", "Leek"]; * const saladIngredients = ["Carrots", "Radicchio", "Pepper"]; + * * const shoppingList = union(soupIngredients, saladIngredients); * * assertEquals(shoppingList, ["Pepper", "Carrots", "Leek", "Radicchio"]); diff --git a/src/vendor/deno.land/std@0.217.0/collections/unzip.ts b/src/vendor/jsr.io/@std/collections/0.224.2/unzip.ts similarity index 59% rename from src/vendor/deno.land/std@0.217.0/collections/unzip.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/unzip.ts index a103806b876..16ffc56416f 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/unzip.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/unzip.ts @@ -6,9 +6,18 @@ * returned array holding all first tuple elements and the second one holding * all the second elements. * + * @template T The type of the first tuple elements. + * @template U The type of the second tuple elements. + * + * @param pairs The array of 2-tuples to unzip. + * + * @returns A tuple containing two arrays, the first one holding all first tuple + * elements and the second one holding all second elements. + * + * @example Basic usage * ```ts - * import { unzip } from "https://deno.land/std@$STD_VERSION/collections/unzip.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { unzip } from "@std/collections/unzip"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const parents = [ * ["Maria", "Jeff"], @@ -24,15 +33,15 @@ */ export function unzip(pairs: readonly [T, U][]): [T[], U[]] { const { length } = pairs; - const ret: [T[], U[]] = [ + const result: [T[], U[]] = [ Array(length), Array(length), ]; pairs.forEach(([first, second], index) => { - ret[0][index] = first; - ret[1][index] = second; + result[0][index] = first; + result[1][index] = second; }); - return ret; + return result; } diff --git a/src/vendor/deno.land/std@0.217.0/collections/without_all.ts b/src/vendor/jsr.io/@std/collections/0.224.2/without_all.ts similarity index 51% rename from src/vendor/deno.land/std@0.217.0/collections/without_all.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/without_all.ts index a9c37804977..12cdf537d21 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/without_all.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/without_all.ts @@ -4,10 +4,18 @@ /** * Returns an array excluding all given values. * - * @example + * @template T The type of the array elements. + * + * @param array The array to exclude values from. + * @param values The values to exclude from the array. + * + * @returns A new array containing all elements from the given array except the + * ones that are in the values array. + * + * @example Basic usage * ```ts - * import { withoutAll } from "https://deno.land/std@$STD_VERSION/collections/without_all.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { withoutAll } from "@std/collections/without-all"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const withoutList = withoutAll([2, 1, 2, 3], [1, 2]); * diff --git a/src/vendor/deno.land/std@0.217.0/collections/zip.ts b/src/vendor/jsr.io/@std/collections/0.224.2/zip.ts similarity index 66% rename from src/vendor/deno.land/std@0.217.0/collections/zip.ts rename to src/vendor/jsr.io/@std/collections/0.224.2/zip.ts index 805ccfb8566..debb0acace3 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/zip.ts +++ b/src/vendor/jsr.io/@std/collections/0.224.2/zip.ts @@ -8,10 +8,15 @@ import { minOf } from "./min_of.ts"; * stopping when the smallest array's end is reached. * * @template T the type of the tuples produced by this function. - * @example + * + * @param arrays The arrays to zip. + * + * @returns A new array containing N-tuples of elements from the given arrays. + * + * @example Basic usage * ```ts - * import { zip } from "https://deno.land/std@$STD_VERSION/collections/zip.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { zip } from "@std/collections/zip"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const numbers = [1, 2, 3, 4]; * const letters = ["a", "b", "c", "d"]; @@ -31,14 +36,14 @@ import { minOf } from "./min_of.ts"; export function zip( ...arrays: { [K in keyof T]: ReadonlyArray } ): T[] { - const minLength = minOf(arrays, (it) => it.length) ?? 0; + const minLength = minOf(arrays, (element) => element.length) ?? 0; - const ret: T[] = new Array(minLength); + const result: T[] = new Array(minLength); for (let i = 0; i < minLength; i += 1) { const arr = arrays.map((it) => it[i]); - ret[i] = arr as T; + result[i] = arr as T; } - return ret; + return result; } diff --git a/src/vendor/jsr.io/@std/collections/1.0.6/_utils.ts b/src/vendor/jsr.io/@std/collections/1.0.6/_utils.ts new file mode 100644 index 00000000000..1d6c93c59a2 --- /dev/null +++ b/src/vendor/jsr.io/@std/collections/1.0.6/_utils.ts @@ -0,0 +1,26 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Filters the given array, removing all elements that do not match the given predicate + * **in place. This means `array` will be modified!**. + */ +export function filterInPlace( + array: Array, + predicate: (el: T) => boolean, +): Array { + let outputIndex = 0; + + for (const cur of array) { + if (!predicate(cur)) { + continue; + } + + array[outputIndex] = cur; + outputIndex += 1; + } + + array.splice(outputIndex); + + return array; +} diff --git a/src/vendor/deno.land/std@0.217.0/collections/deep_merge.ts b/src/vendor/jsr.io/@std/collections/1.0.6/deep_merge.ts similarity index 69% rename from src/vendor/deno.land/std@0.217.0/collections/deep_merge.ts rename to src/vendor/jsr.io/@std/collections/1.0.6/deep_merge.ts index 2828882160c..22cc1116d2f 100644 --- a/src/vendor/deno.land/std@0.217.0/collections/deep_merge.ts +++ b/src/vendor/jsr.io/@std/collections/1.0.6/deep_merge.ts @@ -3,25 +3,94 @@ import { filterInPlace } from "./_utils.ts"; -const { hasOwn } = Object; - /** - * Merges the two given Records, recursively merging any nested Records with the - * second collection overriding the first in case of conflict + * Merges the two given records, recursively merging any nested records with the + * second collection overriding the first in case of conflict. * * For arrays, maps and sets, a merging strategy can be specified to either - * `replace` values, or `merge` them instead. Use `includeNonEnumerable` option - * to include non-enumerable properties too. + * `replace` values, or `merge` them instead. + * + * @typeParam T Type of the first record + * + * @param record First record to merge. + * @param other Second record to merge. + * @param options Merging options. * - * @example + * @returns A new record with the merged values. + * + * @example Merge objects * ```ts - * import { deepMerge } from "https://deno.land/std@$STD_VERSION/collections/deep_merge.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert"; * * const a = { foo: true }; * const b = { foo: { bar: true } }; * - * assertEquals(deepMerge(a, b), { foo: { bar: true } }); + * const result = deepMerge(a, b); + * + * const expected = { foo: { bar: true } }; + * + * assertEquals(result, expected); + * ``` + * + * @example Merge arrays + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert"; + * + * const a = { foo: [1, 2] }; + * const b = { foo: [3, 4] }; + * + * const result = deepMerge(a, b); + * + * const expected = { foo: [1, 2, 3, 4] }; + * + * assertEquals(result, expected); + * ``` + * + * @example Merge maps + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert"; + * + * const a = { foo: new Map([["a", 1]]) }; + * const b = { foo: new Map([["b", 2]]) }; + * + * const result = deepMerge(a, b); + * + * const expected = { foo: new Map([["a", 1], ["b", 2]]) }; + * + * assertEquals(result, expected); + * ``` + * + * @example Merge sets + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert"; + * + * const a = { foo: new Set([1]) }; + * const b = { foo: new Set([2]) }; + * + * const result = deepMerge(a, b); + * + * const expected = { foo: new Set([1, 2]) }; + * + * assertEquals(result, expected); + * ``` + * + * @example Merge with custom options + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert"; + * + * const a = { foo: [1, 2] }; + * const b = { foo: [3, 4] }; + * + * const result = deepMerge(a, b, { arrays: "replace" }); + * + * const expected = { foo: [3, 4] }; + * + * assertEquals(result, expected); * ``` */ export function deepMerge< @@ -32,22 +101,95 @@ export function deepMerge< options?: Readonly, ): T; /** - * Merges the two given Records, recursively merging any nested Records with the - * second collection overriding the first in case of conflict + * Merges the two given records, recursively merging any nested records with the + * second collection overriding the first in case of conflict. * * For arrays, maps and sets, a merging strategy can be specified to either - * `replace` values, or `merge` them instead. Use `includeNonEnumerable` option - * to include non-enumerable properties too. + * `replace` values, or `merge` them instead. * - * @example + * @typeParam T Type of the first record + * @typeParam U Type of the second record + * @typeParam Options Merging options + * + * @param record First record to merge. + * @param other Second record to merge. + * @param options Merging options. + * + * @returns A new record with the merged values. + * + * @example Merge objects * ```ts - * import { deepMerge } from "https://deno.land/std@$STD_VERSION/collections/deep_merge.ts"; - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert"; * * const a = { foo: true }; * const b = { foo: { bar: true } }; * - * assertEquals(deepMerge(a, b), { foo: { bar: true } }); + * const result = deepMerge(a, b); + * + * const expected = { foo: { bar: true } }; + * + * assertEquals(result, expected); + * ``` + * + * @example Merge arrays + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert"; + * + * const a = { foo: [1, 2] }; + * const b = { foo: [3, 4] }; + * + * const result = deepMerge(a, b); + * + * const expected = { foo: [1, 2, 3, 4] }; + * + * assertEquals(result, expected); + * ``` + * + * @example Merge maps + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert"; + * + * const a = { foo: new Map([["a", 1]]) }; + * const b = { foo: new Map([["b", 2]]) }; + * + * const result = deepMerge(a, b); + * + * const expected = { foo: new Map([["a", 1], ["b", 2]]) }; + * + * assertEquals(result, expected); + * ``` + * + * @example Merge sets + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert"; + * + * const a = { foo: new Set([1]) }; + * const b = { foo: new Set([2]) }; + * + * const result = deepMerge(a, b); + * + * const expected = { foo: new Set([1, 2]) }; + * + * assertEquals(result, expected); + * ``` + * + * @example Merge with custom options + * ```ts + * import { deepMerge } from "@std/collections/deep-merge"; + * import { assertEquals } from "@std/assert"; + * + * const a = { foo: [1, 2] }; + * const b = { foo: [3, 4] }; + * + * const result = deepMerge(a, b, { arrays: "replace" }); + * + * const expected = { foo: [3, 4] }; + * + * assertEquals(result, expected); * ``` */ export function deepMerge< @@ -59,7 +201,6 @@ export function deepMerge< other: Readonly, options?: Readonly, ): DeepMerge; - export function deepMerge< T extends Record, U extends Record, @@ -111,7 +252,7 @@ function deepMergeInternal< const a = record[key] as ResultMember; - if (!hasOwn(other, key)) { + if (!Object.hasOwn(other, key)) { result[key] = a; continue; @@ -213,26 +354,38 @@ function isNonNullObject( } function getKeys>(record: T): Array { - const ret = Object.getOwnPropertySymbols(record) as Array; + const result = Object.getOwnPropertySymbols(record) as Array; filterInPlace( - ret, + result, (key) => Object.prototype.propertyIsEnumerable.call(record, key), ); - ret.push(...(Object.keys(record) as Array)); + result.push(...(Object.keys(record) as Array)); - return ret; + return result; } /** Merging strategy */ export type MergingStrategy = "replace" | "merge"; -/** Deep merge options */ +/** Options for {@linkcode deepMerge}. */ export type DeepMergeOptions = { - /** Merging strategy for arrays */ + /** + * Merging strategy for arrays + * + * @default {"merge"} + */ arrays?: MergingStrategy; - /** Merging strategy for Maps */ + /** + * Merging strategy for maps. + * + * @default {"merge"} + */ maps?: MergingStrategy; - /** Merging strategy for Sets */ + /** + * Merging strategy for sets. + * + * @default {"merge"} + */ sets?: MergingStrategy; }; diff --git a/src/vendor/jsr.io/@std/crypto/0.224.0/_wasm/lib/deno_std_wasm_crypto.generated.d.mts b/src/vendor/jsr.io/@std/crypto/0.224.0/_wasm/lib/deno_std_wasm_crypto.generated.d.mts new file mode 100644 index 00000000000..c78987a0195 --- /dev/null +++ b/src/vendor/jsr.io/@std/crypto/0.224.0/_wasm/lib/deno_std_wasm_crypto.generated.d.mts @@ -0,0 +1,78 @@ +// deno-lint-ignore-file +// deno-fmt-ignore-file + +export interface InstantiateResult { + instance: WebAssembly.Instance; + exports: { + digest: typeof digest; + DigestContext : typeof DigestContext + }; +} + +/** Gets if the Wasm module has been instantiated. */ +export function isInstantiated(): boolean; + + +/** Instantiates an instance of the Wasm module returning its functions. +* @remarks It is safe to call this multiple times and once successfully +* loaded it will always return a reference to the same object. */ +export function instantiate(): InstantiateResult["exports"]; + +/** Instantiates an instance of the Wasm module along with its exports. + * @remarks It is safe to call this multiple times and once successfully + * loaded it will always return a reference to the same object. */ +export function instantiateWithInstance(): InstantiateResult; + +/** +* Returns the digest of the given `data` using the given hash `algorithm`. +* +* `length` will usually be left `undefined` to use the default length for +* the algorithm. For algorithms with variable-length output, it can be used +* to specify a non-negative integer number of bytes. +* +* An error will be thrown if `algorithm` is not a supported hash algorithm or +* `length` is not a supported length for the algorithm. +* @param {string} algorithm +* @param {Uint8Array} data +* @param {number | undefined} [length] +* @returns {Uint8Array} +*/ +export function digest(algorithm: string, data: Uint8Array, length?: number): Uint8Array; +/** +* A context for incrementally computing a digest using a given hash algorithm. +*/ +export class DigestContext { + free(): void; +/** +* Creates a new context incrementally computing a digest using the given +* hash algorithm. +* +* An error will be thrown if `algorithm` is not a supported hash algorithm. +* @param {string} algorithm +*/ + constructor(algorithm: string); +/** +* Update the digest's internal state with the additional input `data`. +* +* If the `data` array view is large, it will be split into subarrays (via +* JavaScript bindings) which will be processed sequentially in order to +* limit the amount of memory that needs to be allocated in the Wasm heap. +* @param {Uint8Array} data +*/ + update(data: Uint8Array): void; +/** +* Returns the digest of the input data so far, and then drops the context +* from memory on the Wasm side. This context must no longer be used, and any +* further method calls will result in null pointer errors being thrown. +* https://github.com/rustwasm/wasm-bindgen/blob/bf39cfd8/crates/backend/src/codegen.rs#L186 +* +* `length` will usually be left `undefined` to use the default length for +* the algorithm. For algorithms with variable-length output, it can be used +* to specify a non-negative integer number of bytes. +* +* An error will be thrown if `length` is not a supported length for the algorithm. +* @param {number | undefined} [length] +* @returns {Uint8Array} +*/ + digestAndDrop(length?: number): Uint8Array; +} diff --git a/src/vendor/jsr.io/@std/crypto/0.224.0/_wasm/lib/deno_std_wasm_crypto.generated.mjs b/src/vendor/jsr.io/@std/crypto/0.224.0/_wasm/lib/deno_std_wasm_crypto.generated.mjs new file mode 100644 index 00000000000..26ea7d3d30a --- /dev/null +++ b/src/vendor/jsr.io/@std/crypto/0.224.0/_wasm/lib/deno_std_wasm_crypto.generated.mjs @@ -0,0 +1,2708 @@ +// @generated file from wasmbuild -- do not edit +// @ts-nocheck: generated +// deno-lint-ignore-file +// deno-fmt-ignore-file +/// + +// source-hash: 8af6b7dfcb5d38d1b2fc36a7ab6dd8085926089e +let wasm; + +const heap = new Array(128).fill(undefined); + +heap.push(undefined, null, true, false); + +function getObject(idx) { + return heap[idx]; +} + +let heap_next = heap.length; + +function dropObject(idx) { + if (idx < 132) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} + +const cachedTextDecoder = typeof TextDecoder !== "undefined" + ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) + : { + decode: () => { + throw Error("TextDecoder not available"); + }, + }; + +if (typeof TextDecoder !== "undefined") cachedTextDecoder.decode(); + +let cachedUint8Memory0 = null; + +function getUint8Memory0() { + if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { + cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8Memory0; +} + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); +} + +let WASM_VECTOR_LEN = 0; + +const cachedTextEncoder = typeof TextEncoder !== "undefined" + ? new TextEncoder("utf-8") + : { + encode: () => { + throw Error("TextEncoder not available"); + }, + }; + +const encodeString = function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +}; + +function passStringToWasm0(arg, malloc, realloc) { + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8Memory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8Memory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +function isLikeNone(x) { + return x === undefined || x === null; +} + +let cachedInt32Memory0 = null; + +function getInt32Memory0() { + if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { + cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachedInt32Memory0; +} + +function getArrayU8FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); +} +/** + * Returns the digest of the given `data` using the given hash `algorithm`. + * + * `length` will usually be left `undefined` to use the default length for + * the algorithm. For algorithms with variable-length output, it can be used + * to specify a non-negative integer number of bytes. + * + * An error will be thrown if `algorithm` is not a supported hash algorithm or + * `length` is not a supported length for the algorithm. + * @param {string} algorithm + * @param {Uint8Array} data + * @param {number | undefined} [length] + * @returns {Uint8Array} + */ +export function digest(algorithm, data, length) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + algorithm, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.digest( + retptr, + ptr0, + len0, + addHeapObject(data), + !isLikeNone(length), + isLikeNone(length) ? 0 : length, + ); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + var r3 = getInt32Memory0()[retptr / 4 + 3]; + if (r3) { + throw takeObject(r2); + } + var v2 = getArrayU8FromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 1, 1); + return v2; + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } +} + +const DigestContextFinalization = (typeof FinalizationRegistry === "undefined") + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry((ptr) => wasm.__wbg_digestcontext_free(ptr >>> 0)); +/** + * A context for incrementally computing a digest using a given hash algorithm. + */ +export class DigestContext { + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + DigestContextFinalization.unregister(this); + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_digestcontext_free(ptr); + } + /** + * Creates a new context incrementally computing a digest using the given + * hash algorithm. + * + * An error will be thrown if `algorithm` is not a supported hash algorithm. + * @param {string} algorithm + */ + constructor(algorithm) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + algorithm, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.digestcontext_new(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + this.__wbg_ptr = r0 >>> 0; + return this; + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * Update the digest's internal state with the additional input `data`. + * + * If the `data` array view is large, it will be split into subarrays (via + * JavaScript bindings) which will be processed sequentially in order to + * limit the amount of memory that needs to be allocated in the Wasm heap. + * @param {Uint8Array} data + */ + update(data) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.digestcontext_update(retptr, this.__wbg_ptr, addHeapObject(data)); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + if (r1) { + throw takeObject(r0); + } + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * Returns the digest of the input data so far, and then drops the context + * from memory on the Wasm side. This context must no longer be used, and any + * further method calls will result in null pointer errors being thrown. + * https://github.com/rustwasm/wasm-bindgen/blob/bf39cfd8/crates/backend/src/codegen.rs#L186 + * + * `length` will usually be left `undefined` to use the default length for + * the algorithm. For algorithms with variable-length output, it can be used + * to specify a non-negative integer number of bytes. + * + * An error will be thrown if `length` is not a supported length for the algorithm. + * @param {number | undefined} [length] + * @returns {Uint8Array} + */ + digestAndDrop(length) { + try { + const ptr = this.__destroy_into_raw(); + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.digestcontext_digestAndDrop( + retptr, + ptr, + !isLikeNone(length), + isLikeNone(length) ? 0 : length, + ); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + var r3 = getInt32Memory0()[retptr / 4 + 3]; + if (r3) { + throw takeObject(r2); + } + var v1 = getArrayU8FromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 1, 1); + return v1; + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } +} + +const imports = { + __wbindgen_placeholder__: { + __wbg_new_5dd86ebc917d9f52: function (arg0, arg1) { + const ret = new TypeError(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }, + __wbindgen_object_drop_ref: function (arg0) { + takeObject(arg0); + }, + __wbg_byteLength_58f7b4fab1919d44: function (arg0) { + const ret = getObject(arg0).byteLength; + return ret; + }, + __wbg_byteOffset_81d60f7392524f62: function (arg0) { + const ret = getObject(arg0).byteOffset; + return ret; + }, + __wbg_buffer_dd7f74bc60f1faab: function (arg0) { + const ret = getObject(arg0).buffer; + return addHeapObject(ret); + }, + __wbg_newwithbyteoffsetandlength_aa4a17c33a06e5cb: function ( + arg0, + arg1, + arg2, + ) { + const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0); + return addHeapObject(ret); + }, + __wbg_length_c20a40f15020d68a: function (arg0) { + const ret = getObject(arg0).length; + return ret; + }, + __wbindgen_memory: function () { + const ret = wasm.memory; + return addHeapObject(ret); + }, + __wbg_buffer_12d079cc21e14bdb: function (arg0) { + const ret = getObject(arg0).buffer; + return addHeapObject(ret); + }, + __wbg_new_63b92bc8671ed464: function (arg0) { + const ret = new Uint8Array(getObject(arg0)); + return addHeapObject(ret); + }, + __wbg_set_a47bac70306a19a7: function (arg0, arg1, arg2) { + getObject(arg0).set(getObject(arg1), arg2 >>> 0); + }, + __wbindgen_throw: function (arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }, + }, +}; + +export function instantiate() { + return instantiateWithInstance().exports; +} + +let instanceWithExports; + +export function instantiateWithInstance() { + if (instanceWithExports == null) { + const instance = instantiateInstance(); + wasm = instance.exports; + cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); + cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); + instanceWithExports = { + instance, + exports: { digest, DigestContext }, + }; + } + return instanceWithExports; +} + +export function isInstantiated() { + return instanceWithExports != null; +} + +function instantiateInstance() { + const wasmBytes = base64decode( + "\ +AGFzbQEAAAABpwEYYAAAYAABf2ABfwBgAX8Bf2ACf38AYAJ/fwF/YAN/f38AYAN/f38Bf2AEf39/fw\ +BgBH9/f38Bf2AFf39/f38AYAV/f39/fwF/YAZ/f39/f38AYAZ/f39/f38Bf2AFf39/fn8AYAd/f39+\ +f39/AX9gA39/fgBgBX9/fn9/AGAFf399f38AYAV/f3x/fwBgAn9+AGAEf35/fwBgBH99f38AYAR/fH\ +9/AAKkBQwYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fGl9fd2JnX25ld181ZGQ4NmViYzkxN2Q5ZjUy\ +AAUYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fGl9fd2JpbmRnZW5fb2JqZWN0X2Ryb3BfcmVmAAIYX1\ +93YmluZGdlbl9wbGFjZWhvbGRlcl9fIV9fd2JnX2J5dGVMZW5ndGhfNThmN2I0ZmFiMTkxOWQ0NAAD\ +GF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXyFfX3diZ19ieXRlT2Zmc2V0XzgxZDYwZjczOTI1MjRmNj\ +IAAxhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18dX193YmdfYnVmZmVyX2RkN2Y3NGJjNjBmMWZhYWIA\ +AxhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18xX193YmdfbmV3d2l0aGJ5dGVvZmZzZXRhbmRsZW5ndG\ +hfYWE0YTE3YzMzYTA2ZTVjYgAHGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXx1fX3diZ19sZW5ndGhf\ +YzIwYTQwZjE1MDIwZDY4YQADGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxFfX3diaW5kZ2VuX21lbW\ +9yeQABGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXx1fX3diZ19idWZmZXJfMTJkMDc5Y2MyMWUxNGJk\ +YgADGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxpfX3diZ19uZXdfNjNiOTJiYzg2NzFlZDQ2NAADGF\ +9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxpfX3diZ19zZXRfYTQ3YmFjNzAzMDZhMTlhNwAGGF9fd2Jp\ +bmRnZW5fcGxhY2Vob2xkZXJfXxBfX3diaW5kZ2VuX3Rocm93AAQDYWAIBgYKBhAEBgYEDgMGBgQPBx\ +QEBAYCBQQJBgYHDQQEBAcFBAcGBAQIBgwEBgcGBAwIBgYGBgUFAgQFBwYGCQAEBAkNCwoLCgoSExEI\ +AgcFBQQGAgUDAAAEBAcHBwACAgIEBQFwARcXBQMBABEGCQF/AUGAgMAACwfUAQoGbWVtb3J5AgAGZG\ +lnZXN0ADUYX193YmdfZGlnZXN0Y29udGV4dF9mcmVlAEMRZGlnZXN0Y29udGV4dF9uZXcAORRkaWdl\ +c3Rjb250ZXh0X3VwZGF0ZQBHG2RpZ2VzdGNvbnRleHRfZGlnZXN0QW5kRHJvcAAzH19fd2JpbmRnZW\ +5fYWRkX3RvX3N0YWNrX3BvaW50ZXIAYBFfX3diaW5kZ2VuX21hbGxvYwBFEl9fd2JpbmRnZW5fcmVh\ +bGxvYwBND19fd2JpbmRnZW5fZnJlZQBdCRwBAEEBCxZaWyJfTztQUU5ZV1JTVFVWakFpQmtcCreXB2\ +C6ggECOX8CfiMAQYACayIEJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJA\ +AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQA\ +JAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC\ +QAJAAkACQAJAAkACQAJAAkAgAA4fAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHgALIAFByA\ +BqIQUgA0GAASABQcgBai0AACIAayIGTQ0eIABFDVMgBSAAaiACIAYQZRogASABKQNAQoABfDcDQCAB\ +IAVCABARAkAgAyAGayIDRQ0AIAIgBmohAgxUC0HgkcAAIQNBACEGDFQLIAFByABqIQUCQCADQYABIA\ +FByAFqLQAAIgBrIgZNDQAgAEUNUSAFIABqIAIgBhBlGiABIAEpA0BCgAF8NwNAIAEgBUIAEBECQCAD\ +IAZrIgNFDQAgAiAGaiECDFILQeCRwAAhA0EAIQYMUgsgBSAAaiACIAMQZRogASAAIANqOgDIAQxUCy\ +ABQcgAaiEFAkAgA0GAASABQcgBai0AACIAayIGTQ0AIABFDU4gBSAAaiACIAYQZRogASABKQNAQoAB\ +fDcDQCABIAVCABARAkAgAyAGayIDRQ0AIAIgBmohAgxPC0HgkcAAIQNBACEGDE8LIAUgAGogAiADEG\ +UaIAEgACADajoAyAEMUwsgAUHIAGohBQJAIANBgAEgAUHIAWotAAAiAGsiBk0NACAARQ1LIAUgAGog\ +AiAGEGUaIAEgASkDQEKAAXw3A0AgASAFQgAQEQJAIAMgBmsiA0UNACACIAZqIQIMTAtB4JHAACEDQQ\ +AhBgxMCyAFIABqIAIgAxBlGiABIAAgA2o6AMgBDFILIAFByABqIQUCQCADQYABIAFByAFqLQAAIgBr\ +IgZNDQAgAEUNSCAFIABqIAIgBhBlGiABIAEpA0BCgAF8NwNAIAEgBUIAEBECQCADIAZrIgNFDQAgAi\ +AGaiECDEkLQeCRwAAhA0EAIQYMSQsgBSAAaiACIAMQZRogASAAIANqOgDIAQxRCyABQcgAaiEFAkAg\ +A0GAASABQcgBai0AACIAayIGTQ0AIABFDUUgBSAAaiACIAYQZRogASABKQNAQoABfDcDQCABIAVCAB\ +ARAkAgAyAGayIDRQ0AIAIgBmohAgxGC0HgkcAAIQNBACEGDEYLIAUgAGogAiADEGUaIAEgACADajoA\ +yAEMUAsgAUEoaiEFAkAgA0HAACABQegAai0AACIAayIGTQ0AIABFDUIgBSAAaiACIAYQZRogASABKQ\ +MgQsAAfDcDIEEAIQcgASAFQQAQEwJAIAMgBmsiA0UNACACIAZqIQIMQwtB4JHAACEDDEMLIAUgAGog\ +AiADEGUaIAEgACADajoAaAxPCyABQSBqIQggAUGJAWotAABBBnQgAUGIAWotAABqIgBFDT8gCCACQY\ +AIIABrIgAgAyAAIANJGyIGECwhBSADIAZrIgNFDU4gBEG4AWoiCSABQegAaiIAKQMANwMAIARBwAFq\ +IgogAUHwAGoiBykDADcDACAEQcgBaiILIAFB+ABqIgwpAwA3AwAgBEHwAGpBCGoiDSAFQQhqKQMANw\ +MAIARB8ABqQRBqIg4gBUEQaikDADcDACAEQfAAakEYaiIPIAVBGGopAwA3AwAgBEHwAGpBIGoiECAF\ +QSBqKQMANwMAIARB8ABqQShqIhEgBUEoaikDADcDACAEQfAAakEwaiISIAVBMGopAwA3AwAgBEHwAG\ +pBOGoiEyAFQThqKQMANwMAIAQgBSkDADcDcCAEIAFB4ABqIhQpAwA3A7ABIAFBigFqLQAAIRUgAS0A\ +iQEhFiAEIAEtAIgBIhc6ANgBIAQgAUGAAWopAwAiPTcD0AEgBCAVIBZFckECciIVOgDZASAEQRhqIh\ +YgDCkCADcDACAEQRBqIgwgBykCADcDACAEQQhqIgcgACkCADcDACAEIBQpAgA3AwAgBCAEQfAAaiAX\ +ID0gFRAWIARBH2otAAAhFCAEQR5qLQAAIRUgBEEdai0AACEXIARBG2otAAAhGCAEQRpqLQAAIRkgBE\ +EZai0AACEaIBYtAAAhFiAEQRdqLQAAIRsgBEEWai0AACEcIARBFWotAAAhHSAEQRNqLQAAIR4gBEES\ +ai0AACEfIARBEWotAAAhICAMLQAAIQwgBEEPai0AACEhIARBDmotAAAhIiAEQQ1qLQAAISMgBEELai\ +0AACEkIARBCmotAAAhJSAEQQlqLQAAISYgBy0AACEnIAQtABwhKCAELQAUISkgBC0ADCEqIAQtAAch\ +KyAELQAGISwgBC0ABSEtIAQtAAQhLiAELQADIS8gBC0AAiEwIAQtAAEhMSAELQAAITIgASA9EB0gAU\ +HwDmooAgAiB0E3Tw0YIAEgB0EFdGoiAEGTAWogLzoAACAAQZIBaiAwOgAAIABBkQFqIDE6AAAgAEGQ\ +AWogMjoAACAAQa8BaiAUOgAAIABBrgFqIBU6AAAgAEGtAWogFzoAACAAQawBaiAoOgAAIABBqwFqIB\ +g6AAAgAEGqAWogGToAACAAQakBaiAaOgAAIABBqAFqIBY6AAAgAEGnAWogGzoAACAAQaYBaiAcOgAA\ +IABBpQFqIB06AAAgAEGkAWogKToAACAAQaMBaiAeOgAAIABBogFqIB86AAAgAEGhAWogIDoAACAAQa\ +ABaiAMOgAAIABBnwFqICE6AAAgAEGeAWogIjoAACAAQZ0BaiAjOgAAIABBnAFqICo6AAAgAEGbAWog\ +JDoAACAAQZoBaiAlOgAAIABBmQFqICY6AAAgAEGYAWogJzoAACAAQZcBaiArOgAAIABBlgFqICw6AA\ +AgAEGVAWogLToAACAAQZQBaiAuOgAAIAEgB0EBajYC8A4gDUIANwMAIA5CADcDACAPQgA3AwAgEEIA\ +NwMAIBFCADcDACASQgA3AwAgE0IANwMAIAkgAUEIaikDADcDACAKIAFBEGopAwA3AwAgCyABQRhqKQ\ +MANwMAIARCADcDcCAEIAEpAwA3A7ABIAEpA4ABIT0gBSAEQfAAakHgABBlGiABQQA7AYgBIAEgPUIB\ +fDcDgAEgAiAGaiECDD8LIAFB0AFqIQUCQCADQZABIAFB4AJqLQAAIgBrIgZJDQAgAA0ZDD4LIAUgAG\ +ogAiADEGUaIAEgACADajoA4AIMTQsgAUHQAWohBQJAIANBiAEgAUHYAmotAAAiAGsiBkkNACAADRkM\ +PAsgBSAAaiACIAMQZRogASAAIANqOgDYAgxMCyABQdABaiEFAkAgA0HoACABQbgCai0AACIAayIGSQ\ +0AIAANGQw6CyAFIABqIAIgAxBlGiABIAAgA2o6ALgCDEsLIAFB0AFqIQUCQCADQcgAIAFBmAJqLQAA\ +IgBrIgZJDQAgAA0ZDDgLIAUgAGogAiADEGUaIAEgACADajoAmAIMSgsgAUEYaiEFAkAgA0HAACABQd\ +gAai0AACIAayIGSQ0AIAANGQw2CyAFIABqIAIgAxBlGiABIAAgA2o6AFgMSQsgBCABNgJwIAFBGGoh\ +BQJAIANBwAAgAUHYAGotAAAiAGsiBkkNACAADRkMNAsgBSAAaiACIAMQZRogASAAIANqOgBYDEgLIA\ +FBIGohBgJAIANBwAAgAUHgAGotAAAiAGsiBUkNACAADRkMMgsgBiAAaiACIAMQZRogASAAIANqOgBg\ +DEcLIAFBIGohBQJAIANBwAAgAUHgAGotAAAiAGsiBkkNACAADRkMMAsgBSAAaiACIAMQZRogASAAIA\ +NqOgBgDEYLIAFB0AFqIQUCQCADQZABIAFB4AJqLQAAIgBrIgZJDQAgAA0ZDC4LIAUgAGogAiADEGUa\ +IAEgACADajoA4AIMRQsgAUHQAWohBQJAIANBiAEgAUHYAmotAAAiAGsiBkkNACAADRkMLAsgBSAAai\ +ACIAMQZRogASAAIANqOgDYAgxECyABQdABaiEFAkAgA0HoACABQbgCai0AACIAayIGSQ0AIAANGQwq\ +CyAFIABqIAIgAxBlGiABIAAgA2o6ALgCDEMLIAFB0AFqIQUCQCADQcgAIAFBmAJqLQAAIgBrIgZJDQ\ +AgAA0ZDCgLIAUgAGogAiADEGUaIAEgACADajoAmAIMQgsgAUEoaiEFAkAgA0HAACABQegAai0AACIA\ +ayIGSQ0AIAANGQwmCyAFIABqIAIgAxBlGiABIAAgA2o6AGgMQQsgAUEoaiEFAkAgA0HAACABQegAai\ +0AACIAayIGSQ0AIAANGQwkCyAFIABqIAIgAxBlGiABIAAgA2o6AGgMQAsgAUHQAGohBQJAIANBgAEg\ +AUHQAWotAAAiAGsiBkkNACAADRkMIgsgBSAAaiACIAMQZRogASAAIANqOgDQAQw/CyABQdAAaiEFAk\ +AgA0GAASABQdABai0AACIAayIGSQ0AIAANGQwgCyAFIABqIAIgAxBlGiABIAAgA2o6ANABDD4LIAFB\ +0AFqIQUCQCADQagBIAFB+AJqLQAAIgBrIgZJDQAgAA0ZDB4LIAUgAGogAiADEGUaIAEgACADajoA+A\ +IMPQsgAUHQAWohBQJAIANBiAEgAUHYAmotAAAiAGsiBkkNACAADRkMHAsgBSAAaiACIAMQZRogASAA\ +IANqOgDYAgw8CyABQSBqIQYCQCADQcAAIAFB4ABqLQAAIgBrIgVJDQAgAA0ZDBoLIAYgAGogAiADEG\ +UaIAEgACADajoAYAw7CyADRQ06IAEoAgAhBQJAAkAgA0EHcSIHDQAgAiEADAELIAchBiACIQADQCAF\ +QZODgAhsIAAtAABzIQUgAEEBaiEAIAZBf2oiBg0ACyACIAdqIQALAkAgA0EISQ0AIAIgA2ohAgNAIA\ +VBk4OACGwgAC0AAHNBk4OACGwgAEEBai0AAHNBk4OACGwgAEECai0AAHNBk4OACGwgAEEDai0AAHNB\ +k4OACGwgAEEEai0AAHNBk4OACGwgAEEFai0AAHNBk4OACGwgAEEGai0AAHNBk4OACGwgAEEHai0AAH\ +MhBSAAQQhqIgAgAkcNAAsLIAEgBTYCAAw6CyADRQ05IAEoAgAhBQJAAkAgA0EHcSIHDQAgAiEADAEL\ +IAchBiACIQADQCAFIAAtAABzQZODgAhsIQUgAEEBaiEAIAZBf2oiBg0ACyACIAdqIQALAkAgA0EISQ\ +0AIAIgA2ohAgNAIAUgAC0AAHNBk4OACGwgAC0AAXNBk4OACGwgAC0AAnNBk4OACGwgAC0AA3NBk4OA\ +CGwgAC0ABHNBk4OACGwgAC0ABXNBk4OACGwgAC0ABnNBk4OACGwgAC0AB3NBk4OACGwhBSAAQQhqIg\ +AgAkcNAAsLIAEgBTYCAAw5CyADRQ04IAEpAwAhPQJAAkAgA0EHcSIGDQAgAiEADAELIAYhBSACIQAD\ +QCA9QrODgICAIH4gADEAAIUhPSAAQQFqIQAgBUF/aiIFDQALIAIgBmohAAsCQCADQQhJDQAgAiADai\ +ECA0AgPUKzg4CAgCB+IAAxAACFQrODgICAIH4gAEEBajEAAIVCs4OAgIAgfiAAQQJqMQAAhUKzg4CA\ +gCB+IABBA2oxAACFQrODgICAIH4gAEEEajEAAIVCs4OAgIAgfiAAQQVqMQAAhUKzg4CAgCB+IABBBm\ +oxAACFQrODgICAIH4gAEEHajEAAIUhPSAAQQhqIgAgAkcNAAsLIAEgPTcDAAw4CyADRQ03IAEpAwAh\ +PQJAAkAgA0EHcSIGDQAgAiEADAELIAYhBSACIQADQCA9IAAxAACFQrODgICAIH4hPSAAQQFqIQAgBU\ +F/aiIFDQALIAIgBmohAAsCQCADQQhJDQAgAiADaiECA0AgPSAAMQAAhUKzg4CAgCB+IAAxAAGFQrOD\ +gICAIH4gADEAAoVCs4OAgIAgfiAAMQADhUKzg4CAgCB+IAAxAASFQrODgICAIH4gADEABYVCs4OAgI\ +AgfiAAMQAGhUKzg4CAgCB+IAAxAAeFQrODgICAIH4hPSAAQQhqIgAgAkcNAAsLIAEgPTcDAAw3CyAF\ +IABqIAIgAxBlGiABIAAgA2o6AMgBDDYLIARB8ABqQR1qIBc6AAAgBEHwAGpBGWogGjoAACAEQfAAak\ +EVaiAdOgAAIARB8ABqQRFqICA6AAAgBEHwAGpBDWogIzoAACAEQfAAakEJaiAmOgAAIARB9QBqIC06\ +AAAgBEHwAGpBHmogFToAACAEQfAAakEaaiAZOgAAIARB8ABqQRZqIBw6AAAgBEHwAGpBEmogHzoAAC\ +AEQfAAakEOaiAiOgAAIARB8ABqQQpqICU6AAAgBEH2AGogLDoAACAEQfAAakEfaiAUOgAAIARB8ABq\ +QRtqIBg6AAAgBEHwAGpBF2ogGzoAACAEQfAAakETaiAeOgAAIARB8ABqQQ9qICE6AAAgBEHwAGpBC2\ +ogJDoAACAEQfcAaiArOgAAIAQgKDoAjAEgBCAWOgCIASAEICk6AIQBIAQgDDoAgAEgBCAqOgB8IAQg\ +JzoAeCAEIC46AHQgBCAyOgBwIAQgMToAcSAEIDA6AHIgBCAvOgBzQbSRwAAgBEHwAGpByIjAAEGgh8\ +AAEDwACyAFIABqIAIgBhBlGiABIAEpAwAgASkA0AGFNwMAIAEgASkDCCABQdgBaikAAIU3AwggASAB\ +KQMQIAFB4AFqKQAAhTcDECABIAEpAxggAUHoAWopAACFNwMYIAEgASkDICABQfABaikAAIU3AyAgAS\ +ABKQMoIAFB+AFqKQAAhTcDKCABIAEpAzAgAUGAAmopAACFNwMwIAEgASkDOCABQYgCaikAAIU3Azgg\ +ASABKQNAIAFBkAJqKQAAhTcDQCABIAEpA0ggAUGYAmopAACFNwNIIAEgASkDUCABQaACaikAAIU3A1\ +AgASABKQNYIAFBqAJqKQAAhTcDWCABIAEpA2AgAUGwAmopAACFNwNgIAEgASkDaCABQbgCaikAAIU3\ +A2ggASABKQNwIAFBwAJqKQAAhTcDcCABIAEpA3ggAUHIAmopAACFNwN4IAEgASkDgAEgAUHQAmopAA\ +CFNwOAASABIAEpA4gBIAFB2AJqKQAAhTcDiAEgASABKALIARAfIAMgBmshAyACIAZqIQIMJAsgBSAA\ +aiACIAYQZRogASABKQMAIAEpANABhTcDACABIAEpAwggAUHYAWopAACFNwMIIAEgASkDECABQeABai\ +kAAIU3AxAgASABKQMYIAFB6AFqKQAAhTcDGCABIAEpAyAgAUHwAWopAACFNwMgIAEgASkDKCABQfgB\ +aikAAIU3AyggASABKQMwIAFBgAJqKQAAhTcDMCABIAEpAzggAUGIAmopAACFNwM4IAEgASkDQCABQZ\ +ACaikAAIU3A0AgASABKQNIIAFBmAJqKQAAhTcDSCABIAEpA1AgAUGgAmopAACFNwNQIAEgASkDWCAB\ +QagCaikAAIU3A1ggASABKQNgIAFBsAJqKQAAhTcDYCABIAEpA2ggAUG4AmopAACFNwNoIAEgASkDcC\ +ABQcACaikAAIU3A3AgASABKQN4IAFByAJqKQAAhTcDeCABIAEpA4ABIAFB0AJqKQAAhTcDgAEgASAB\ +KALIARAfIAMgBmshAyACIAZqIQIMIgsgBSAAaiACIAYQZRogASABKQMAIAEpANABhTcDACABIAEpAw\ +ggAUHYAWopAACFNwMIIAEgASkDECABQeABaikAAIU3AxAgASABKQMYIAFB6AFqKQAAhTcDGCABIAEp\ +AyAgAUHwAWopAACFNwMgIAEgASkDKCABQfgBaikAAIU3AyggASABKQMwIAFBgAJqKQAAhTcDMCABIA\ +EpAzggAUGIAmopAACFNwM4IAEgASkDQCABQZACaikAAIU3A0AgASABKQNIIAFBmAJqKQAAhTcDSCAB\ +IAEpA1AgAUGgAmopAACFNwNQIAEgASkDWCABQagCaikAAIU3A1ggASABKQNgIAFBsAJqKQAAhTcDYC\ +ABIAEoAsgBEB8gAyAGayEDIAIgBmohAgwgCyAFIABqIAIgBhBlGiABIAEpAwAgASkA0AGFNwMAIAEg\ +ASkDCCABQdgBaikAAIU3AwggASABKQMQIAFB4AFqKQAAhTcDECABIAEpAxggAUHoAWopAACFNwMYIA\ +EgASkDICABQfABaikAAIU3AyAgASABKQMoIAFB+AFqKQAAhTcDKCABIAEpAzAgAUGAAmopAACFNwMw\ +IAEgASkDOCABQYgCaikAAIU3AzggASABKQNAIAFBkAJqKQAAhTcDQCABIAEoAsgBEB8gAyAGayEDIA\ +IgBmohAgweCyAFIABqIAIgBhBlGiABIAEpAxBCAXw3AxAgASAFEB4gAyAGayEDIAIgBmohAgwcCyAF\ +IABqIAIgBhBlGiAEQfAAaiAFQQEQGSACIAZqIQIgAyAGayEDDBoLIAYgAGogAiAFEGUaIAEgASkDAE\ +IBfDcDACABQQhqIAYQEiADIAVrIQMgAiAFaiECDBgLIAUgAGogAiAGEGUaIAEgASkDAEIBfDcDACAB\ +QQhqIAVBARAUIAIgBmohAiADIAZrIQMMFgsgBSAAaiACIAYQZRogASABKQMAIAEpANABhTcDACABIA\ +EpAwggAUHYAWopAACFNwMIIAEgASkDECABQeABaikAAIU3AxAgASABKQMYIAFB6AFqKQAAhTcDGCAB\ +IAEpAyAgAUHwAWopAACFNwMgIAEgASkDKCABQfgBaikAAIU3AyggASABKQMwIAFBgAJqKQAAhTcDMC\ +ABIAEpAzggAUGIAmopAACFNwM4IAEgASkDQCABQZACaikAAIU3A0AgASABKQNIIAFBmAJqKQAAhTcD\ +SCABIAEpA1AgAUGgAmopAACFNwNQIAEgASkDWCABQagCaikAAIU3A1ggASABKQNgIAFBsAJqKQAAhT\ +cDYCABIAEpA2ggAUG4AmopAACFNwNoIAEgASkDcCABQcACaikAAIU3A3AgASABKQN4IAFByAJqKQAA\ +hTcDeCABIAEpA4ABIAFB0AJqKQAAhTcDgAEgASABKQOIASABQdgCaikAAIU3A4gBIAEgASgCyAEQHy\ +ADIAZrIQMgAiAGaiECDBQLIAUgAGogAiAGEGUaIAEgASkDACABKQDQAYU3AwAgASABKQMIIAFB2AFq\ +KQAAhTcDCCABIAEpAxAgAUHgAWopAACFNwMQIAEgASkDGCABQegBaikAAIU3AxggASABKQMgIAFB8A\ +FqKQAAhTcDICABIAEpAyggAUH4AWopAACFNwMoIAEgASkDMCABQYACaikAAIU3AzAgASABKQM4IAFB\ +iAJqKQAAhTcDOCABIAEpA0AgAUGQAmopAACFNwNAIAEgASkDSCABQZgCaikAAIU3A0ggASABKQNQIA\ +FBoAJqKQAAhTcDUCABIAEpA1ggAUGoAmopAACFNwNYIAEgASkDYCABQbACaikAAIU3A2AgASABKQNo\ +IAFBuAJqKQAAhTcDaCABIAEpA3AgAUHAAmopAACFNwNwIAEgASkDeCABQcgCaikAAIU3A3ggASABKQ\ +OAASABQdACaikAAIU3A4ABIAEgASgCyAEQHyADIAZrIQMgAiAGaiECDBILIAUgAGogAiAGEGUaIAEg\ +ASkDACABKQDQAYU3AwAgASABKQMIIAFB2AFqKQAAhTcDCCABIAEpAxAgAUHgAWopAACFNwMQIAEgAS\ +kDGCABQegBaikAAIU3AxggASABKQMgIAFB8AFqKQAAhTcDICABIAEpAyggAUH4AWopAACFNwMoIAEg\ +ASkDMCABQYACaikAAIU3AzAgASABKQM4IAFBiAJqKQAAhTcDOCABIAEpA0AgAUGQAmopAACFNwNAIA\ +EgASkDSCABQZgCaikAAIU3A0ggASABKQNQIAFBoAJqKQAAhTcDUCABIAEpA1ggAUGoAmopAACFNwNY\ +IAEgASkDYCABQbACaikAAIU3A2AgASABKALIARAfIAMgBmshAyACIAZqIQIMEAsgBSAAaiACIAYQZR\ +ogASABKQMAIAEpANABhTcDACABIAEpAwggAUHYAWopAACFNwMIIAEgASkDECABQeABaikAAIU3AxAg\ +ASABKQMYIAFB6AFqKQAAhTcDGCABIAEpAyAgAUHwAWopAACFNwMgIAEgASkDKCABQfgBaikAAIU3Ay\ +ggASABKQMwIAFBgAJqKQAAhTcDMCABIAEpAzggAUGIAmopAACFNwM4IAEgASkDQCABQZACaikAAIU3\ +A0AgASABKALIARAfIAMgBmshAyACIAZqIQIMDgsgBSAAaiACIAYQZRogASABKQMgQgF8NwMgIAEgBU\ +EBEA4gAiAGaiECIAMgBmshAwwMCyAFIABqIAIgBhBlGiABIAEpAyBCAXw3AyAgASAFQQEQDiACIAZq\ +IQIgAyAGayEDDAoLIAUgAGogAiAGEGUaIAEgASkDQEIBfCI9NwNAIAFByABqIgAgACkDACA9UK18Nw\ +MAIAEgBUEBEA0gAiAGaiECIAMgBmshAwwICyAFIABqIAIgBhBlGiABIAEpA0BCAXwiPTcDQCABQcgA\ +aiIAIAApAwAgPVCtfDcDACABIAVBARANIAIgBmohAiADIAZrIQMMBgsgBSAAaiACIAYQZRogASABKQ\ +MAIAEpANABhTcDACABIAEpAwggAUHYAWopAACFNwMIIAEgASkDECABQeABaikAAIU3AxAgASABKQMY\ +IAFB6AFqKQAAhTcDGCABIAEpAyAgAUHwAWopAACFNwMgIAEgASkDKCABQfgBaikAAIU3AyggASABKQ\ +MwIAFBgAJqKQAAhTcDMCABIAEpAzggAUGIAmopAACFNwM4IAEgASkDQCABQZACaikAAIU3A0AgASAB\ +KQNIIAFBmAJqKQAAhTcDSCABIAEpA1AgAUGgAmopAACFNwNQIAEgASkDWCABQagCaikAAIU3A1ggAS\ +ABKQNgIAFBsAJqKQAAhTcDYCABIAEpA2ggAUG4AmopAACFNwNoIAEgASkDcCABQcACaikAAIU3A3Ag\ +ASABKQN4IAFByAJqKQAAhTcDeCABIAEpA4ABIAFB0AJqKQAAhTcDgAEgASABKQOIASABQdgCaikAAI\ +U3A4gBIAEgASkDkAEgAUHgAmopAACFNwOQASABIAEpA5gBIAFB6AJqKQAAhTcDmAEgASABKQOgASAB\ +QfACaikAAIU3A6ABIAEgASgCyAEQHyADIAZrIQMgAiAGaiECDAQLIAUgAGogAiAGEGUaIAEgASkDAC\ +ABKQDQAYU3AwAgASABKQMIIAFB2AFqKQAAhTcDCCABIAEpAxAgAUHgAWopAACFNwMQIAEgASkDGCAB\ +QegBaikAAIU3AxggASABKQMgIAFB8AFqKQAAhTcDICABIAEpAyggAUH4AWopAACFNwMoIAEgASkDMC\ +ABQYACaikAAIU3AzAgASABKQM4IAFBiAJqKQAAhTcDOCABIAEpA0AgAUGQAmopAACFNwNAIAEgASkD\ +SCABQZgCaikAAIU3A0ggASABKQNQIAFBoAJqKQAAhTcDUCABIAEpA1ggAUGoAmopAACFNwNYIAEgAS\ +kDYCABQbACaikAAIU3A2AgASABKQNoIAFBuAJqKQAAhTcDaCABIAEpA3AgAUHAAmopAACFNwNwIAEg\ +ASkDeCABQcgCaikAAIU3A3ggASABKQOAASABQdACaikAAIU3A4ABIAEgASgCyAEQHyADIAZrIQMgAi\ +AGaiECDAILIAYgAGogAiAFEGUaIAEgASkDAEIBfDcDACABQQhqIAYQFSADIAVrIQMgAiAFaiECCyAD\ +QT9xIQcgAiADQUBxIgBqIQwCQCADQcAASQ0AIAEgASkDACADQQZ2rXw3AwAgAUEIaiEFA0AgBSACEB\ +UgAkHAAGohAiAAQUBqIgANAAsLIAYgDCAHEGUaIAEgBzoAYAwhCyACIANBiAFuQYgBbCIGaiEAIAMg\ +BmshBgJAIANBiAFJDQADQCABIAEpAwAgAikAAIU3AwAgASABKQMIIAIpAAiFNwMIIAEgASkDECACKQ\ +AQhTcDECABIAEpAxggAikAGIU3AxggASABKQMgIAIpACCFNwMgIAEgASkDKCACKQAohTcDKCABIAEp\ +AzAgAikAMIU3AzAgASABKQM4IAIpADiFNwM4IAEgASkDQCACKQBAhTcDQCABIAEpA0ggAikASIU3A0\ +ggASABKQNQIAIpAFCFNwNQIAEgASkDWCACKQBYhTcDWCABIAEpA2AgAikAYIU3A2AgASABKQNoIAIp\ +AGiFNwNoIAEgASkDcCACKQBwhTcDcCABIAEpA3ggAikAeIU3A3ggASABKQOAASACKQCAAYU3A4ABIA\ +EgASgCyAEQHyACQYgBaiICIABHDQALCwJAIAZBiQFPDQAgBSAAIAYQZRogASAGOgDYAgwhCyAGQYgB\ +QYCAwAAQPQALIAIgA0GoAW5BqAFsIgZqIQAgAyAGayEGAkAgA0GoAUkNAANAIAEgASkDACACKQAAhT\ +cDACABIAEpAwggAikACIU3AwggASABKQMQIAIpABCFNwMQIAEgASkDGCACKQAYhTcDGCABIAEpAyAg\ +AikAIIU3AyAgASABKQMoIAIpACiFNwMoIAEgASkDMCACKQAwhTcDMCABIAEpAzggAikAOIU3AzggAS\ +ABKQNAIAIpAECFNwNAIAEgASkDSCACKQBIhTcDSCABIAEpA1AgAikAUIU3A1AgASABKQNYIAIpAFiF\ +NwNYIAEgASkDYCACKQBghTcDYCABIAEpA2ggAikAaIU3A2ggASABKQNwIAIpAHCFNwNwIAEgASkDeC\ +ACKQB4hTcDeCABIAEpA4ABIAIpAIABhTcDgAEgASABKQOIASACKQCIAYU3A4gBIAEgASkDkAEgAikA\ +kAGFNwOQASABIAEpA5gBIAIpAJgBhTcDmAEgASABKQOgASACKQCgAYU3A6ABIAEgASgCyAEQHyACQa\ +gBaiICIABHDQALCwJAIAZBqQFPDQAgBSAAIAYQZRogASAGOgD4AgwgCyAGQagBQYCAwAAQPQALIANB\ +/wBxIQAgAiADQYB/cWohBgJAIANBgAFJDQAgASABKQNAIj0gA0EHdiIDrXwiPjcDQCABQcgAaiIHIA\ +cpAwAgPiA9VK18NwMAIAEgAiADEA0LIAUgBiAAEGUaIAEgADoA0AEMHgsgA0H/AHEhACACIANBgH9x\ +aiEGAkAgA0GAAUkNACABIAEpA0AiPSADQQd2IgOtfCI+NwNAIAFByABqIgcgBykDACA+ID1UrXw3Aw\ +AgASACIAMQDQsgBSAGIAAQZRogASAAOgDQAQwdCyADQT9xIQAgAiADQUBxaiEGAkAgA0HAAEkNACAB\ +IAEpAyAgA0EGdiIDrXw3AyAgASACIAMQDgsgBSAGIAAQZRogASAAOgBoDBwLIANBP3EhACACIANBQH\ +FqIQYCQCADQcAASQ0AIAEgASkDICADQQZ2IgOtfDcDICABIAIgAxAOCyAFIAYgABBlGiABIAA6AGgM\ +GwsgAiADQcgAbkHIAGwiBmohACADIAZrIQYCQCADQcgASQ0AA0AgASABKQMAIAIpAACFNwMAIAEgAS\ +kDCCACKQAIhTcDCCABIAEpAxAgAikAEIU3AxAgASABKQMYIAIpABiFNwMYIAEgASkDICACKQAghTcD\ +ICABIAEpAyggAikAKIU3AyggASABKQMwIAIpADCFNwMwIAEgASkDOCACKQA4hTcDOCABIAEpA0AgAi\ +kAQIU3A0AgASABKALIARAfIAJByABqIgIgAEcNAAsLAkAgBkHJAE8NACAFIAAgBhBlGiABIAY6AJgC\ +DBsLIAZByABBgIDAABA9AAsgAiADQegAbkHoAGwiBmohACADIAZrIQYCQCADQegASQ0AA0AgASABKQ\ +MAIAIpAACFNwMAIAEgASkDCCACKQAIhTcDCCABIAEpAxAgAikAEIU3AxAgASABKQMYIAIpABiFNwMY\ +IAEgASkDICACKQAghTcDICABIAEpAyggAikAKIU3AyggASABKQMwIAIpADCFNwMwIAEgASkDOCACKQ\ +A4hTcDOCABIAEpA0AgAikAQIU3A0AgASABKQNIIAIpAEiFNwNIIAEgASkDUCACKQBQhTcDUCABIAEp\ +A1ggAikAWIU3A1ggASABKQNgIAIpAGCFNwNgIAEgASgCyAEQHyACQegAaiICIABHDQALCwJAIAZB6Q\ +BPDQAgBSAAIAYQZRogASAGOgC4AgwaCyAGQegAQYCAwAAQPQALIAIgA0GIAW5BiAFsIgZqIQAgAyAG\ +ayEGAkAgA0GIAUkNAANAIAEgASkDACACKQAAhTcDACABIAEpAwggAikACIU3AwggASABKQMQIAIpAB\ +CFNwMQIAEgASkDGCACKQAYhTcDGCABIAEpAyAgAikAIIU3AyAgASABKQMoIAIpACiFNwMoIAEgASkD\ +MCACKQAwhTcDMCABIAEpAzggAikAOIU3AzggASABKQNAIAIpAECFNwNAIAEgASkDSCACKQBIhTcDSC\ +ABIAEpA1AgAikAUIU3A1AgASABKQNYIAIpAFiFNwNYIAEgASkDYCACKQBghTcDYCABIAEpA2ggAikA\ +aIU3A2ggASABKQNwIAIpAHCFNwNwIAEgASkDeCACKQB4hTcDeCABIAEpA4ABIAIpAIABhTcDgAEgAS\ +ABKALIARAfIAJBiAFqIgIgAEcNAAsLAkAgBkGJAU8NACAFIAAgBhBlGiABIAY6ANgCDBkLIAZBiAFB\ +gIDAABA9AAsgAiADQZABbkGQAWwiBmohACADIAZrIQYCQCADQZABSQ0AA0AgASABKQMAIAIpAACFNw\ +MAIAEgASkDCCACKQAIhTcDCCABIAEpAxAgAikAEIU3AxAgASABKQMYIAIpABiFNwMYIAEgASkDICAC\ +KQAghTcDICABIAEpAyggAikAKIU3AyggASABKQMwIAIpADCFNwMwIAEgASkDOCACKQA4hTcDOCABIA\ +EpA0AgAikAQIU3A0AgASABKQNIIAIpAEiFNwNIIAEgASkDUCACKQBQhTcDUCABIAEpA1ggAikAWIU3\ +A1ggASABKQNgIAIpAGCFNwNgIAEgASkDaCACKQBohTcDaCABIAEpA3AgAikAcIU3A3AgASABKQN4IA\ +IpAHiFNwN4IAEgASkDgAEgAikAgAGFNwOAASABIAEpA4gBIAIpAIgBhTcDiAEgASABKALIARAfIAJB\ +kAFqIgIgAEcNAAsLAkAgBkGRAU8NACAFIAAgBhBlGiABIAY6AOACDBgLIAZBkAFBgIDAABA9AAsgA0\ +E/cSEAIAIgA0FAcWohBgJAIANBwABJDQAgASABKQMAIANBBnYiA618NwMAIAFBCGogAiADEBQLIAUg\ +BiAAEGUaIAEgADoAYAwWCyADQT9xIQcgAiADQUBxIgBqIQwCQCADQcAASQ0AIAEgASkDACADQQZ2rX\ +w3AwAgAUEIaiEFA0AgBSACEBIgAkHAAGohAiAAQUBqIgANAAsLIAYgDCAHEGUaIAEgBzoAYAwVCyAD\ +QT9xIQAgAiADQUBxaiEGAkAgA0HAAEkNACAEQfAAaiACIANBBnYQGQsgBSAGIAAQZRogASAAOgBYDB\ +QLIANBP3EhBiACIANBQHEiAGohBwJAIANBwABJDQAgASABKQMQIANBBnatfDcDEANAIAEgAhAeIAJB\ +wABqIQIgAEFAaiIADQALCyAFIAcgBhBlGiABIAY6AFgMEwsgAiADQcgAbkHIAGwiBmohACADIAZrIQ\ +YCQCADQcgASQ0AA0AgASABKQMAIAIpAACFNwMAIAEgASkDCCACKQAIhTcDCCABIAEpAxAgAikAEIU3\ +AxAgASABKQMYIAIpABiFNwMYIAEgASkDICACKQAghTcDICABIAEpAyggAikAKIU3AyggASABKQMwIA\ +IpADCFNwMwIAEgASkDOCACKQA4hTcDOCABIAEpA0AgAikAQIU3A0AgASABKALIARAfIAJByABqIgIg\ +AEcNAAsLAkAgBkHJAE8NACAFIAAgBhBlGiABIAY6AJgCDBMLIAZByABBgIDAABA9AAsgAiADQegAbk\ +HoAGwiBmohACADIAZrIQYCQCADQegASQ0AA0AgASABKQMAIAIpAACFNwMAIAEgASkDCCACKQAIhTcD\ +CCABIAEpAxAgAikAEIU3AxAgASABKQMYIAIpABiFNwMYIAEgASkDICACKQAghTcDICABIAEpAyggAi\ +kAKIU3AyggASABKQMwIAIpADCFNwMwIAEgASkDOCACKQA4hTcDOCABIAEpA0AgAikAQIU3A0AgASAB\ +KQNIIAIpAEiFNwNIIAEgASkDUCACKQBQhTcDUCABIAEpA1ggAikAWIU3A1ggASABKQNgIAIpAGCFNw\ +NgIAEgASgCyAEQHyACQegAaiICIABHDQALCwJAIAZB6QBPDQAgBSAAIAYQZRogASAGOgC4AgwSCyAG\ +QegAQYCAwAAQPQALIAIgA0GIAW5BiAFsIgZqIQAgAyAGayEGAkAgA0GIAUkNAANAIAEgASkDACACKQ\ +AAhTcDACABIAEpAwggAikACIU3AwggASABKQMQIAIpABCFNwMQIAEgASkDGCACKQAYhTcDGCABIAEp\ +AyAgAikAIIU3AyAgASABKQMoIAIpACiFNwMoIAEgASkDMCACKQAwhTcDMCABIAEpAzggAikAOIU3Az\ +ggASABKQNAIAIpAECFNwNAIAEgASkDSCACKQBIhTcDSCABIAEpA1AgAikAUIU3A1AgASABKQNYIAIp\ +AFiFNwNYIAEgASkDYCACKQBghTcDYCABIAEpA2ggAikAaIU3A2ggASABKQNwIAIpAHCFNwNwIAEgAS\ +kDeCACKQB4hTcDeCABIAEpA4ABIAIpAIABhTcDgAEgASABKALIARAfIAJBiAFqIgIgAEcNAAsLAkAg\ +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\ +AUGAAWopAwAhYiABQdwAaigCACEIIAFB2ABqKAIAIQkgAUHUAGooAgAhCiABQdAAaigCACELIAFBzA\ +BqKAIAIQwgAUHIAGooAgAhDSABQcQAaigCACEOIAFBwABqKAIAIQ8gAUE8aigCACEQIAFBOGooAgAh\ +ESABQTRqKAIAIRIgAUEwaigCACETIAFBLGooAgAhFCABQShqKAIAIRUgAUEkaigCACEWIAFB/ABqKA\ +IAIRcgAUH4AGooAgAhGCABQfQAaigCACEZIAFB8ABqKAIAIRogAUHsAGooAgAhGyABQegAaigCACEc\ +IAFB5ABqKAIAIR0gAUHgAGooAgAhHiABKAIgIR8MAQsgAUGQAWohFwJAAkACQAJAIAFBiQFqLQAAIg\ +hBBnRBACABQYgBai0AACINa0cNACAFQX5qIQggBUEBTQ0HIAFBigFqLQAAIQ4gA0EYaiAXIAhBBXRq\ +IgxBGGopAAAiYjcDACADQRBqIAxBEGopAAAiYzcDACADQQhqIAxBCGopAAAiZDcDACADQSBqIAVBBX\ +QgF2pBYGoiDSkAACJlNwMAIANBKGogDUEIaikAACJmNwMAIANBMGogDUEQaikAACJnNwMAIANBOGog\ +DUEYaikAACJoNwMAIAMgDCkAACJpNwMAIANB8ABqQThqIGg3AwAgA0HwAGpBMGogZzcDACADQfAAak\ +EoaiBmNwMAIANB8ABqQSBqIGU3AwAgA0HwAGpBGGogYjcDACADQfAAakEQaiBjNwMAIANB8ABqQQhq\ +IGQ3AwAgAyBpNwNwIANByAFqIAFBGGopAwA3AwAgA0HAAWogAUEQaikDADcDACADQbgBaiABQQhqKQ\ +MANwMAIAMgASkDADcDsAEgAyADQfAAakHgABBlIg8gDkEEciIGOgBpQcAAIQ0gD0HAADoAaEIAIWIg\ +D0IANwNgIAhFDQIgBiEODAELIANB8ABqQcgAaiABQegAaikDADcDACADQfAAakHQAGogAUHwAGopAw\ +A3AwAgA0HwAGpB2ABqIAFB+ABqKQMANwMAIANB+ABqIAFBKGopAwA3AwAgA0GAAWogAUEwaikDADcD\ +ACADQYgBaiABQThqKQMANwMAIANBkAFqIAFBwABqKQMANwMAIANB8ABqQShqIAFByABqKQMANwMAIA\ +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\ +IiFXMgASgAMCIUQRh0IBRBgP4DcUEIdHIgFEEIdkGA/gNxIBRBGHZyciIWcyANIAEoAAQiFEEYdCAU\ +QYD+A3FBCHRyIBRBCHZBgP4DcSAUQRh2cnIiF3MgASgAJCIUQRh0IBRBgP4DcUEIdHIgFEEIdkGA/g\ +NxIBRBGHZyciIYcyAIc0EBdyIUc0EBdyIZcyAIIBZzIBlzIA4gGHMgFHMgE3NBAXciGnNBAXciG3Mg\ +EiAUcyAacyARIAhzIBNzIAsgDnMgEnMgASgAKCIcQRh0IBxBgP4DcUEIdHIgHEEIdkGA/gNxIBxBGH\ +ZyciIdIAlzIBFzIAEoABwiHEEYdCAcQYD+A3FBCHRyIBxBCHZBgP4DcSAcQRh2cnIiHiAMcyALcyAV\ +IA9zIB1zIAEoADwiHEEYdCAcQYD+A3FBCHRyIBxBCHZBgP4DcSAcQRh2cnIiHHNBAXciH3NBAXciIH\ +NBAXciIXNBAXciInNBAXciI3NBAXciJHNBAXciJSAZIB9zIBYgHXMgH3MgGCAecyAccyAZc0EBdyIm\ +c0EBdyIncyAUIBxzICZzIBtzQQF3IihzQQF3IilzIBsgJ3MgKXMgGiAmcyAocyAlc0EBdyIqc0EBdy\ +IrcyAkIChzICpzICMgG3MgJXMgIiAacyAkcyAhIBNzICNzICAgEnMgInMgHyARcyAhcyAcIAtzICBz\ +ICdzQQF3IixzQQF3Ii1zQQF3Ii5zQQF3Ii9zQQF3IjBzQQF3IjFzQQF3IjJzQQF3IjMgKSAtcyAnIC\ +FzIC1zICYgIHMgLHMgKXNBAXciNHNBAXciNXMgKCAscyA0cyArc0EBdyI2c0EBdyI3cyArIDVzIDdz\ +ICogNHMgNnMgM3NBAXciOHNBAXciOXMgMiA2cyA4cyAxICtzIDNzIDAgKnMgMnMgLyAlcyAxcyAuIC\ +RzIDBzIC0gI3MgL3MgLCAicyAucyA1c0EBdyI6c0EBdyI7c0EBdyI8c0EBdyI9c0EBdyI+c0EBdyI/\ +c0EBdyJAc0EBdyJBIDcgO3MgNSAvcyA7cyA0IC5zIDpzIDdzQQF3IkJzQQF3IkNzIDYgOnMgQnMgOX\ +NBAXciRHNBAXciRXMgOSBDcyBFcyA4IEJzIERzIEFzQQF3IkZzQQF3IkdzIEAgRHMgRnMgPyA5cyBB\ +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\ +AgCDYCiNRAQQAgBjYChNRAQQBBlNTAADYCoNRAQQBBnNTAADYCqNRAQQBBlNTAADYCnNRAQQBBpNTA\ +ADYCsNRAQQBBnNTAADYCpNRAQQBBrNTAADYCuNRAQQBBpNTAADYCrNRAQQBBtNTAADYCwNRAQQBBrN\ +TAADYCtNRAQQBBvNTAADYCyNRAQQBBtNTAADYCvNRAQQBBxNTAADYC0NRAQQBBvNTAADYCxNRAQQBB\ +zNTAADYC2NRAQQBBxNTAADYCzNRAQQBBADYCkNRAQQBB1NTAADYC4NRAQQBBzNTAADYC1NRAQQBB1N\ +TAADYC3NRAQQBB3NTAADYC6NRAQQBB3NTAADYC5NRAQQBB5NTAADYC8NRAQQBB5NTAADYC7NRAQQBB\ +7NTAADYC+NRAQQBB7NTAADYC9NRAQQBB9NTAADYCgNVAQQBB9NTAADYC/NRAQQBB/NTAADYCiNVAQQ\ +BB/NTAADYChNVAQQBBhNXAADYCkNVAQQBBhNXAADYCjNVAQQBBjNXAADYCmNVAQQBBjNXAADYClNVA\ +QQBBlNXAADYCoNVAQQBBnNXAADYCqNVAQQBBlNXAADYCnNVAQQBBpNXAADYCsNVAQQBBnNXAADYCpN\ +VAQQBBrNXAADYCuNVAQQBBpNXAADYCrNVAQQBBtNXAADYCwNVAQQBBrNXAADYCtNVAQQBBvNXAADYC\ +yNVAQQBBtNXAADYCvNVAQQBBxNXAADYC0NVAQQBBvNXAADYCxNVAQQBBzNXAADYC2NVAQQBBxNXAAD\ +YCzNVAQQBB1NXAADYC4NVAQQBBzNXAADYC1NVAQQBB3NXAADYC6NVAQQBB1NXAADYC3NVAQQBB5NXA\ +ADYC8NVAQQBB3NXAADYC5NVAQQBB7NXAADYC+NVAQQBB5NXAADYC7NVAQQBB9NXAADYCgNZAQQBB7N\ +XAADYC9NVAQQBB/NXAADYCiNZAQQBB9NXAADYC/NVAQQBBhNbAADYCkNZAQQBB/NXAADYChNZAQQBB\ +jNbAADYCmNZAQQBBhNbAADYCjNZAQQAgBjYCsNZAQQBBjNbAADYClNZAQQAgCEFYaiIANgKo1kAgBi\ +AAQQFyNgIEIAYgAGpBKDYCBEEAQYCAgAE2ArzWQAwICyABIAZPDQAgBSABSw0AIAAoAgxFDQMLQQBB\ +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\ +UNACAJQYAIRw0EQQEhCgsgAUH/B3EhAQJAIAogBkEFdiIIIAogCEkbRQ0AIAdBGGoiCCACQRhqKQIA\ +NwMAIAdBEGoiCyACQRBqKQIANwMAIAdBCGoiDCACQQhqKQIANwMAIAcgAikCADcDACAHIABBwAAgAy\ +AEQQFyEBYgByAAQcAAakHAACADIAQQFiAHIABBgAFqQcAAIAMgBBAWIAcgAEHAAWpBwAAgAyAEEBYg\ +ByAAQYACakHAACADIAQQFiAHIABBwAJqQcAAIAMgBBAWIAcgAEGAA2pBwAAgAyAEEBYgByAAQcADak\ +HAACADIAQQFiAHIABBgARqQcAAIAMgBBAWIAcgAEHABGpBwAAgAyAEEBYgByAAQYAFakHAACADIAQQ\ +FiAHIABBwAVqQcAAIAMgBBAWIAcgAEGABmpBwAAgAyAEEBYgByAAQcAGakHAACADIAQQFiAHIABBgA\ +dqQcAAIAMgBBAWIAcgAEHAB2pBwAAgAyAEQQJyEBYgBSAIKQMANwAYIAUgCykDADcAECAFIAwpAwA3\ +AAggBSAHKQMANwAACyABRQ0BIAdBgAFqQThqQgA3AwAgB0GAAWpBMGpCADcDACAHQYABakEoakIANw\ +MAIAdBgAFqQSBqQgA3AwAgB0GAAWpBGGpCADcDACAHQYABakEQakIANwMAIAdBgAFqQQhqQgA3AwAg\ +B0GAAWpByABqIgggAkEIaikCADcDACAHQYABakHQAGoiCyACQRBqKQIANwMAIAdBgAFqQdgAaiIMIA\ +JBGGopAgA3AwAgB0IANwOAASAHIAQ6AOoBIAdBADsB6AEgByACKQIANwPAASAHIAqtIAN8NwPgASAH\ +QYABaiAAIAlqIAEQLCEEIAdByABqIAgpAwA3AwAgB0HQAGogCykDADcDACAHQdgAaiAMKQMANwMAIA\ +dBCGogBEEIaikDADcDACAHQRBqIARBEGopAwA3AwAgB0EYaiAEQRhqKQMANwMAIAdBIGogBEEgaikD\ +ADcDACAHQShqIARBKGopAwA3AwAgB0EwaiAEQTBqKQMANwMAIAdBOGogBEE4aikDADcDACAHIAcpA8\ +ABNwNAIAcgBCkDADcDACAHLQDqASEEIActAOkBIQAgByAHLQDoASIBOgBoIAcgBykD4AEiAzcDYCAH\ +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\ +LQAAITQgGy0AACE1IBwtAAAhNiAdLQAAITcgHi0AACE4ICQtAAAhJCACLQCsASE5IAItAKQBITogAi\ +0AnAEhOyACLQCXASE8IAItAJYBIT0gAi0AlQEhPiACLQCUASE/IAItAJMBIUAgAi0AkgEhQSACLQCR\ +ASFCIAItAJABIUMgDEUNAyAmIEM6AAAgJiBCOgABIANB7gBqICg6AAAgA0HtAGogKToAACADQewAai\ +A5OgAAIANB6gBqICs6AAAgA0HpAGogLDoAACAhICA6AAAgA0HmAGogLjoAACADQeUAaiAvOgAAIANB\ +5ABqIDo6AAAgA0HiAGogMToAACADQeEAaiAyOgAAICMgIjoAACADQd4AaiA0OgAAIANB3QBqIDU6AA\ +AgA0HcAGogOzoAACADQdoAaiA3OgAAIANB2QBqIDg6AAAgJSAkOgAAIANB1gBqID06AAAgA0HVAGog\ +PjoAACADQdQAaiA/OgAAICYgQToAAiADQe8AaiAnOgAAIANB6wBqICo6AAAgA0HnAGogLToAACADQe\ +MAaiAwOgAAIANB3wBqIDM6AAAgA0HbAGogNjoAACADQdcAaiA8OgAAICZBA2ogQDoAACAAIAY2AvAO\ +IAVBYGohBSAfIQYgHyAETw0ACwsgAkHQAWokAA8LQYCHwAAQXgALIAJBrQFqICk6AAAgAkGpAWogLD\ +oAACACQaUBaiAvOgAAIAJBoQFqIDI6AAAgAkGdAWogNToAACACQZkBaiA4OgAAIAJBlQFqID46AAAg\ +AkGuAWogKDoAACACQaoBaiArOgAAIAJBpgFqIC46AAAgAkGiAWogMToAACACQZ4BaiA0OgAAIAJBmg\ +FqIDc6AAAgAkGWAWogPToAACACQa8BaiAnOgAAIAJBqwFqICo6AAAgAkGnAWogLToAACACQaMBaiAw\ +OgAAIAJBnwFqIDM6AAAgAkGbAWogNjoAACACQZcBaiA8OgAAIAIgOToArAEgAiAgOgCoASACIDo6AK\ +QBIAIgIjoAoAEgAiA7OgCcASACICQ6AJgBIAIgPzoAlAEgAiBDOgCQASACIEI6AJEBIAIgQToAkgEg\ +AiBAOgCTAUG0kcAAIAJBkAFqQciIwABBkIfAABA8AAvZCgEafyAAIAEoACwiAiABKAAcIgMgASgADC\ +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\ +QRhqKQAANwAAIAJBEGogAUEQaikAADcAACACQQhqIAFBCGopAAA3AAAgB0EBaiEHCyAGQTBqJAAgBw\ +8LQSAgAUHghcAAED0AC0EgIAlB8IXAABA/AAueBAIDfwR+IwBB4AJrIgIkACACIAFB4AIQZSICQdAB\ +aiACQdgCaiIDLQAAIgRqQQBBiAEgBGsQZiEEIANBADoAACAEQQE6AAAgAkHXAmoiAyADLQAAQYABcj\ +oAACACIAIpAwAgAikD0AGFNwMAIAIgAikDCCACQdgBaikDAIU3AwggAiACKQMQIAJB4AFqKQMAhTcD\ +ECACIAIpAxggAkHoAWopAwCFNwMYIAIgAikDICACQfABaikDAIU3AyAgAiACKQMoIAJB+AFqKQMAhT\ +cDKCACIAIpAzAgAkGAAmopAwCFNwMwIAIgAikDOCACQYgCaikDAIU3AzggAiACKQNAIAJBkAJqKQMA\ +hTcDQCACIAIpA0ggAkGYAmopAwCFNwNIIAIgAikDUCACQaACaikDAIU3A1AgAiACKQNYIAJBqAJqKQ\ +MAhTcDWCACIAIpA2AgAkGwAmopAwCFNwNgIAIgAikDaCACQbgCaikDAIU3A2ggAiACKQNwIAJBwAJq\ +KQMAhTcDcCACIAIpA3ggAkHIAmopAwCFNwN4IAIgAikDgAEgAkHQAmopAwCFNwOAASACIAIoAsgBEB\ +9BAC0AzdZAGiACKQMYIQUgAikDECEGIAIpAwghByACKQMAIQgCQEEgEBciAw0AAAsgAyAFNwAYIAMg\ +BjcAECADIAc3AAggAyAINwAAIAEQISAAQSA2AgQgACADNgIAIAJB4AJqJAALngQCA38EfiMAQeACay\ +ICJAAgAiABQeACEGUiAkHQAWogAkHYAmoiAy0AACIEakEAQYgBIARrEGYhBCADQQA6AAAgBEEGOgAA\ +IAJB1wJqIgMgAy0AAEGAAXI6AAAgAiACKQMAIAIpA9ABhTcDACACIAIpAwggAkHYAWopAwCFNwMIIA\ +IgAikDECACQeABaikDAIU3AxAgAiACKQMYIAJB6AFqKQMAhTcDGCACIAIpAyAgAkHwAWopAwCFNwMg\ +IAIgAikDKCACQfgBaikDAIU3AyggAiACKQMwIAJBgAJqKQMAhTcDMCACIAIpAzggAkGIAmopAwCFNw\ +M4IAIgAikDQCACQZACaikDAIU3A0AgAiACKQNIIAJBmAJqKQMAhTcDSCACIAIpA1AgAkGgAmopAwCF\ +NwNQIAIgAikDWCACQagCaikDAIU3A1ggAiACKQNgIAJBsAJqKQMAhTcDYCACIAIpA2ggAkG4AmopAw\ +CFNwNoIAIgAikDcCACQcACaikDAIU3A3AgAiACKQN4IAJByAJqKQMAhTcDeCACIAIpA4ABIAJB0AJq\ +KQMAhTcDgAEgAiACKALIARAfQQAtAM3WQBogAikDGCEFIAIpAxAhBiACKQMIIQcgAikDACEIAkBBIB\ +AXIgMNAAALIAMgBTcAGCADIAY3ABAgAyAHNwAIIAMgCDcAACABECEgAEEgNgIEIAAgAzYCACACQeAC\ +aiQAC70DAgZ/AX4jAEGQA2siAiQAIAJBIGogAUHQARBlGiACIAIpA2AgAkHoAWotAAAiA618NwNgIA\ +JB6ABqIQQCQCADQYABRg0AIAQgA2pBAEGAASADaxBmGgsgAkEAOgDoASACQSBqIARCfxARIAJBkAJq\ +QQhqIgMgAkEgakEIaikDADcDACACQZACakEQaiIEIAJBIGpBEGopAwA3AwAgAkGQAmpBGGoiBSACQS\ +BqQRhqKQMANwMAIAJBkAJqQSBqIAIpA0A3AwAgAkGQAmpBKGogAkEgakEoaikDADcDACACQZACakEw\ +aiACQSBqQTBqKQMANwMAIAJBkAJqQThqIAJBIGpBOGopAwA3AwAgAiACKQMgNwOQAiACQfABakEQai\ +AEKQMAIgg3AwAgAkEIaiIEIAMpAwA3AwAgAkEQaiIGIAg3AwAgAkEYaiIHIAUpAwA3AwAgAiACKQOQ\ +AjcDAEEALQDN1kAaAkBBIBAXIgMNAAALIAMgAikDADcAACADQRhqIAcpAwA3AAAgA0EQaiAGKQMANw\ +AAIANBCGogBCkDADcAACABECEgAEEgNgIEIAAgAzYCACACQZADaiQAC6ADAQJ/AkACQAJAAkACQCAA\ +LQBoIgNFDQAgA0HBAE8NAyAAIANqIAFBwAAgA2siAyACIAMgAkkbIgMQZRogACAALQBoIANqIgQ6AG\ +ggASADaiEBAkAgAiADayICDQBBACECDAILIABBwABqIABBwAAgACkDYCAALQBqIAAtAGlFchAWIABC\ +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\ +A2AgggBCACNgIUIAQgATYCECAEQRhqQQxqQgI3AgAgBEEwakEMakEBNgIAIARBAjYCHCAEQeyJwAA2\ +AhggBEECNgI0IAQgBEEwajYCICAEIARBEGo2AjggBCAEQQhqNgIwIARBGGogAxBLAAtyAQF/IwBBMG\ +siAyQAIAMgADYCACADIAE2AgQgA0EIakEMakICNwIAIANBIGpBDGpBAzYCACADQQI2AgwgA0GYjMAA\ +NgIIIANBAzYCJCADIANBIGo2AhAgAyADQQRqNgIoIAMgAzYCICADQQhqIAIQSwALcgEBfyMAQTBrIg\ +MkACADIAA2AgAgAyABNgIEIANBCGpBDGpCAjcCACADQSBqQQxqQQM2AgAgA0ECNgIMIANB+IvAADYC\ +CCADQQM2AiQgAyADQSBqNgIQIAMgA0EEajYCKCADIAM2AiAgA0EIaiACEEsAC3IBAX8jAEEwayIDJA\ +AgAyABNgIEIAMgADYCACADQQhqQQxqQgI3AgAgA0EgakEMakEDNgIAIANBAzYCDCADQeiMwAA2Aggg\ +A0EDNgIkIAMgA0EgajYCECADIAM2AiggAyADQQRqNgIgIANBCGogAhBLAAtyAQF/IwBBMGsiAyQAIA\ +MgATYCBCADIAA2AgAgA0EIakEMakICNwIAIANBIGpBDGpBAzYCACADQQI2AgwgA0HYicAANgIIIANB\ +AzYCJCADIANBIGo2AhAgAyADNgIoIAMgA0EEajYCICADQQhqIAIQSwALYwECfyMAQSBrIgIkACACQQ\ +xqQgE3AgAgAkEBNgIEIAJBkIjAADYCACACQQI2AhwgAkGwiMAANgIYIAFBGGooAgAhAyACIAJBGGo2\ +AgggASgCFCADIAIQJyEBIAJBIGokACABC2MBAn8jAEEgayICJAAgAkEMakIBNwIAIAJBATYCBCACQZ\ +CIwAA2AgAgAkECNgIcIAJBsIjAADYCGCABQRhqKAIAIQMgAiACQRhqNgIIIAEoAhQgAyACECchASAC\ +QSBqJAAgAQtbAQJ/AkACQCAARQ0AIAAoAgANASAAQQA2AgAgAEEIaigCACEBIAAoAgQhAiAAECECQC\ +ACQQdHDQAgAUHwDmooAgBFDQAgAUEANgLwDgsgARAhDwsQYQALEGIAC2UBAX9BAEEAKAKA00AiAkEB\ +ajYCgNNAAkAgAkEASA0AQQAtAMzWQEEBcQ0AQQBBAToAzNZAQQBBACgCyNZAQQFqNgLI1kBBACgC/N\ +JAQX9MDQBBAEEAOgDM1kAgAEUNABBoAAsAC1EAAkAgAWlBAUcNAEGAgICAeCABayAASQ0AAkAgAEUN\ +AEEALQDN1kAaAkACQCABQQlJDQAgASAAEC0hAQwBCyAAEBchAQsgAUUNAQsgAQ8LAAtKAQN/QQAhAw\ +JAIAJFDQACQANAIAAtAAAiBCABLQAAIgVHDQEgAEEBaiEAIAFBAWohASACQX9qIgJFDQIMAAsLIAQg\ +BWshAwsgAwtEAAJAAkAgAUUNACABKAIADQEgAUF/NgIAIAFBBGooAgAgAUEIaigCACACEDcgAUEANg\ +IAIABCADcDAA8LEGEACxBiAAtHAQF/IwBBIGsiAyQAIANBDGpCADcCACADQQE2AgQgA0HgkcAANgII\ +IAMgATYCHCADIAA2AhggAyADQRhqNgIAIAMgAhBLAAtCAQF/AkACQAJAIAJBgIDEAEYNAEEBIQQgAC\ +ACIAEoAhARBQANAQsgAw0BQQAhBAsgBA8LIAAgA0EAIAEoAgwRBwALPwEBfyMAQSBrIgAkACAAQRRq\ +QgA3AgAgAEEBNgIMIABBvITAADYCCCAAQeCRwAA2AhAgAEEIakHEhMAAEEsACz4BAX8jAEEgayICJA\ +AgAkEBOwEcIAIgATYCGCACIAA2AhQgAkGUicAANgIQIAJB4JHAADYCDCACQQxqEFgACzwBAX8gAEEM\ +aigCACECAkACQCAAKAIEDgIAAAELIAINACABLQAQIAEtABEQRAALIAEtABAgAS0AERBEAAsvAAJAAk\ +AgA2lBAUcNAEGAgICAeCADayABSQ0AIAAgASADIAIQJCIDDQELAAsgAwslAAJAIAANAEGUjsAAQTIQ\ +YwALIAAgAiADIAQgBSABKAIQEQsACyMAAkAgAA0AQZSOwABBMhBjAAsgACACIAMgBCABKAIQEQkACy\ +MAAkAgAA0AQZSOwABBMhBjAAsgACACIAMgBCABKAIQEQgACyMAAkAgAA0AQZSOwABBMhBjAAsgACAC\ +IAMgBCABKAIQEQkACyMAAkAgAA0AQZSOwABBMhBjAAsgACACIAMgBCABKAIQEQgACyMAAkAgAA0AQZ\ +SOwABBMhBjAAsgACACIAMgBCABKAIQEQgACyMAAkAgAA0AQZSOwABBMhBjAAsgACACIAMgBCABKAIQ\ +ERYACyMAAkAgAA0AQZSOwABBMhBjAAsgACACIAMgBCABKAIQERcACyMAAkAgAA0AQZSOwABBMhBjAA\ +sgACACIAMgBCABKAIQERUACyEAAkAgAA0AQZSOwABBMhBjAAsgACACIAMgASgCEBEGAAsfAQF/AkAg\ +ACgCCCIBDQBB/JHAABBeAAsgASAAEGQACx8AAkAgAA0AQZSOwABBMhBjAAsgACACIAEoAhARBQALFA\ +AgACgCACABIAAoAgQoAgwRBQALEAAgASAAKAIAIAAoAgQQHAsgACAAQr/vtPrh37HYXzcDCCAAQqn2\ +w62BitaoUTcDAAsOAAJAIAFFDQAgABAhCwsOAEHpiMAAQSsgABBIAAsNACAAKAIAGgN/DAALCwsAIA\ +AjAGokACMACwwAQZDSwABBGxBjAAsNAEGr0sAAQc8AEGMACwkAIAAgARALAAsJACAAIAEQTAALCgAg\ +ACABIAIQLwsKACAAIAEgAhA4CwoAIAAgASACEEYLAwAACwIACwIACwIACwuEUwEAQYCAwAAL+lKABh\ +AAYAAAAK4AAAAUAAAAQkxBS0UyQkJMQUtFMkItMTI4QkxBS0UyQi0xNjBCTEFLRTJCLTIyNEJMQUtF\ +MkItMjU2QkxBS0UyQi0zODRCTEFLRTJTQkxBS0UzS0VDQ0FLLTIyNEtFQ0NBSy0yNTZLRUNDQUstMz\ +g0S0VDQ0FLLTUxMk1ENE1ENVJJUEVNRC0xNjBTSEEtMVNIQS0yMjRTSEEtMjU2U0hBLTM4NFNIQS01\ +MTJUSUdFUkZOVjMyRk5WMzJBRk5WNjRGTlY2NEF1bnN1cHBvcnRlZCBhbGdvcml0aG0AAAAA782riW\ +dFIwEQMlR2mLrc/ofhssO0pZbwCMm882fmCWo7p8qEha5nuyv4lP5y82488TYdXzr1T6XRguatf1IO\ +UR9sPiuMaAWba71B+6vZgx95IX4TGc3gW9ieBcFdnbvLB9V8NiopmmIX3XAwWgFZkTlZDvfY7C8VMQ\ +vA/2cmM2cRFVhoh0q0jqeP+WQNLgzbpE/6vh1ItUdn5glqha5nu3Lzbjw69U+lf1IOUYxoBZur2YMf\ +Gc3gW9ieBcEH1Xw2F91wMDlZDvcxC8D/ERVYaKeP+WSkT/q+ASNFZ4mrze/+3LqYdlQyEPDh0sNub2\ +4tZGVmYXVsdCBsZW5ndGggc3BlY2lmaWVkIGZvciBub24tZXh0ZW5kYWJsZSBhbGdvcml0aG1saWJy\ +YXJ5L2FsbG9jL3NyYy9yYXdfdmVjLnJzY2FwYWNpdHkgb3ZlcmZsb3cAACkCEAARAAAADQIQABwAAA\ +A6AgAABQAAAC9Vc2Vycy9hc2hlci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02\ +ZjE3ZDIyYmJhMTUwMDFmL2JsYWtlMy0xLjUuMS9zcmMvbGliLnJzAAAAVAIQAFkAAADwAQAAEQAAAF\ +QCEABZAAAAlgIAAAoAAABUAhAAWQAAAIICAAAWAAAAVAIQAFkAAADEAgAAKAAAAFQCEABZAAAAxAIA\ +ADQAAABUAhAAWQAAAMQCAAAMAAAAVAIQAFkAAAC0AgAAFwAAAFQCEABZAAAA8AIAAB8AAABUAhAAWQ\ +AAAA0DAAAMAAAAVAIQAFkAAAAUAwAAEgAAAFQCEABZAAAAOAMAACEAAABUAhAAWQAAADoDAAARAAAA\ +VAIQAFkAAAA6AwAAQQAAAFQCEABZAAAAKgQAADIAAABUAhAAWQAAADIEAAAbAAAAVAIQAFkAAABZBA\ +AAFwAAAFQCEABZAAAAvQQAABsAAABUAhAAWQAAAM8EAAAbAAAAVAIQAFkAAAAABQAAEgAAAFQCEABZ\ +AAAACgUAABIAAABUAhAAWQAAADcGAAAmAAAAQ2FwYWNpdHlFcnJvcjogAAAEEAAPAAAAaW5zdWZmaW\ +NpZW50IGNhcGFjaXR5AAAAGAQQABUAAAARAAAABAAAAAQAAAASAAAAEwAAACAAAAABAAAAFAAAABEA\ +AAAEAAAABAAAABIAAAApY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZR\ +UAAAAAAAAAAQAAABYAAABpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzICBidXQgdGhlIGlu\ +ZGV4IGlzIAAApAQQACAAAADEBBAAEgAAADogAADgCBAAAAAAAOgEEAACAAAAMDAwMTAyMDMwNDA1MD\ +YwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTIwMjEyMjIzMjQyNTI2MjcyODI5MzAzMTMyMzMzNDM1\ +MzYzNzM4Mzk0MDQxNDI0MzQ0NDU0NjQ3NDg0OTUwNTE1MjUzNTQ1NTU2NTc1ODU5NjA2MTYyNjM2ND\ +Y1NjY2NzY4Njk3MDcxNzI3Mzc0NzU3Njc3Nzg3OTgwODE4MjgzODQ4NTg2ODc4ODg5OTA5MTkyOTM5\ +NDk1OTY5Nzk4OTlyYW5nZSBzdGFydCBpbmRleCAgb3V0IG9mIHJhbmdlIGZvciBzbGljZSBvZiBsZW\ +5ndGggxAUQABIAAADWBRAAIgAAAHJhbmdlIGVuZCBpbmRleCAIBhAAEAAAANYFEAAiAAAAc291cmNl\ +IHNsaWNlIGxlbmd0aCAoKSBkb2VzIG5vdCBtYXRjaCBkZXN0aW5hdGlvbiBzbGljZSBsZW5ndGggKC\ +gGEAAVAAAAPQYQACsAAABoBBAAAQAAAC9Vc2Vycy9hc2hlci8uY2FyZ28vcmVnaXN0cnkvc3JjL2lu\ +ZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL2Jsb2NrLWJ1ZmZlci0wLjEwLjQvc3JjL2xpYi\ +5yc4AGEABgAAAAWAEAAB4AAACABhAAYAAAABUBAAAsAAAAbWlkID4gbGVuAAAAAAcQAAkAAABjbG9z\ +dXJlIGludm9rZWQgcmVjdXJzaXZlbHkgb3IgYWZ0ZXIgYmVpbmcgZHJvcHBlZAAAAQAAAAAAAACCgA\ +AAAAAAAIqAAAAAAACAAIAAgAAAAICLgAAAAAAAAAEAAIAAAAAAgYAAgAAAAIAJgAAAAAAAgIoAAAAA\ +AAAAiAAAAAAAAAAJgACAAAAAAAoAAIAAAAAAi4AAgAAAAACLAAAAAAAAgImAAAAAAACAA4AAAAAAAI\ +ACgAAAAAAAgIAAAAAAAACACoAAAAAAAAAKAACAAAAAgIGAAIAAAACAgIAAAAAAAIABAACAAAAAAAiA\ +AIAAAACAL1VzZXJzL2FzaGVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMT\ +dkMjJiYmExNTAwMWYva2VjY2FrLTAuMS41L3NyYy9saWIucnNBIHJvdW5kX2NvdW50IGdyZWF0ZXIg\ +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\ +lGAMj52EkyY/uI4+2bz4Ce8WwRmlOBGFck1Wv38wNRqPdHrvXmtxXPnH7U3sbX2xq7KAJBXOVEmU7b\ +XiXUR7Yw/Kq4K4gRXSoh0ym7iwn1s5YC6RTqtY9aAt1XIZR7Z7WskKPA51j7AUq9g0xn04k7ufNL36\ +QtnilIq4wyHsT8UixYupaM8wOyXdh/vb3RyoOugmDBQrS7sJrapWvoX7k/qXE3ZwQusthSMUnJWFOE\ +HlS0l4ZIKr5maY7TLdyilSuFPJKsESzAe6jyDZmxiCO+N08b+giAfAPlVE3I0HAf1FfOfuytkFQ6Og\ +bZJzwrAL+iMICEo65+wAMg7W0yAsaGQKlpfSing4p69TDLX3rFeefreeREaLXpvNwFD7Rzo+IOV4hu\ +eBrXoPbovc26nIcvo2TBvNFql4vXZpZe4iGrPMPl5apjEJCQjWlIRLMYmLuKHj6uh2TjtNw7iTH5va\ +8Z1btf3KBFY8pllJsm/iiG7FGcP2ABXR63SVChBkDkTbHLdvflcGy/7StV7/IYEkGjNlpwCAcMy0Rg\ +mE91FE3nDiioDkPZVs1lUF9T15ElwZbvCnLxIzLIH6Vjc285oMNudWxsIHBvaW50ZXIgcGFzc2VkIH\ +RvIHJ1c3RyZWN1cnNpdmUgdXNlIG9mIGFuIG9iamVjdCBkZXRlY3RlZCB3aGljaCB3b3VsZCBsZWFk\ +IHRvIHVuc2FmZSBhbGlhc2luZyBpbiBydXN0AJkxBG5hbWUBkTFsAEVqc19zeXM6OlR5cGVFcnJvcj\ +o6bmV3OjpfX3diZ19uZXdfNWRkODZlYmM5MTdkOWY1Mjo6aGY1NGY0OTM5ZTliNTEwNzABO3dhc21f\ +YmluZGdlbjo6X193YmluZGdlbl9vYmplY3RfZHJvcF9yZWY6Omg5NjQwNjIwM2Y3MjdhNTRjAlVqc1\ +9zeXM6OlVpbnQ4QXJyYXk6OmJ5dGVfbGVuZ3RoOjpfX3diZ19ieXRlTGVuZ3RoXzU4ZjdiNGZhYjE5\ +MTlkNDQ6Omg0MjEyYmQ1MmQ1ODhiMWZhA1Vqc19zeXM6OlVpbnQ4QXJyYXk6OmJ5dGVfb2Zmc2V0Oj\ +pfX3diZ19ieXRlT2Zmc2V0XzgxZDYwZjczOTI1MjRmNjI6OmgwNTY1ZGY3MDgwYzVlMGZlBExqc19z\ +eXM6OlVpbnQ4QXJyYXk6OmJ1ZmZlcjo6X193YmdfYnVmZmVyX2RkN2Y3NGJjNjBmMWZhYWI6Omg5OG\ +U4YzFhODM5NjEwMTQzBXlqc19zeXM6OlVpbnQ4QXJyYXk6Om5ld193aXRoX2J5dGVfb2Zmc2V0X2Fu\ +ZF9sZW5ndGg6Ol9fd2JnX25ld3dpdGhieXRlb2Zmc2V0YW5kbGVuZ3RoX2FhNGExN2MzM2EwNmU1Y2\ +I6OmhhNjkyZmRlODRlZmNkYWNkBkxqc19zeXM6OlVpbnQ4QXJyYXk6Omxlbmd0aDo6X193YmdfbGVu\ +Z3RoX2MyMGE0MGYxNTAyMGQ2OGE6Omg2MGFiY2ZiZTMxZDM3MzZlBzJ3YXNtX2JpbmRnZW46Ol9fd2\ +JpbmRnZW5fbWVtb3J5OjpoOTcwNjg1NjYyMjFiOTNiZghVanNfc3lzOjpXZWJBc3NlbWJseTo6TWVt\ +b3J5OjpidWZmZXI6Ol9fd2JnX2J1ZmZlcl8xMmQwNzljYzIxZTE0YmRiOjpoNDAyOTdkZjczNmE1Mz\ +Q3ZQlGanNfc3lzOjpVaW50OEFycmF5OjpuZXc6Ol9fd2JnX25ld182M2I5MmJjODY3MWVkNDY0Ojpo\ +NjJhZGMxNWU2N2QyNjA2NQpGanNfc3lzOjpVaW50OEFycmF5OjpzZXQ6Ol9fd2JnX3NldF9hNDdiYW\ +M3MDMwNmExOWE3OjpoY2I2NmI3ZmE4N2EzNjMwNwsxd2FzbV9iaW5kZ2VuOjpfX3diaW5kZ2VuX3Ro\ +cm93OjpoM2MyYWM2Y2ZhMGE4ZDQ4MgxAZGVub19zdGRfd2FzbV9jcnlwdG86OmRpZ2VzdDo6Q29udG\ +V4dDo6dXBkYXRlOjpoN2IwMDc0NWNiZTIzODY1Mw0sc2hhMjo6c2hhNTEyOjpjb21wcmVzczUxMjo6\ +aDE3ZTQyNGZiNDcwMjk3MmEOLHNoYTI6OnNoYTI1Njo6Y29tcHJlc3MyNTY6Omg3Y2Y2NDJlZjc2OD\ +Y0YTkzD0lkZW5vX3N0ZF93YXNtX2NyeXB0bzo6ZGlnZXN0OjpDb250ZXh0OjpkaWdlc3RfYW5kX2Ry\ +b3A6OmhjNTZkZDUwNzFmNTg4ZWZkEDtkaWdlc3Q6OkV4dGVuZGFibGVPdXRwdXQ6OmZpbmFsaXplX2\ +JveGVkOjpoNzlhYTg0MjlkMzc3ZWQwNREzYmxha2UyOjpCbGFrZTJiVmFyQ29yZTo6Y29tcHJlc3M6\ +OmhmZDNjYjE1ODM2NGZjNThlEilyaXBlbWQ6OmMxNjA6OmNvbXByZXNzOjpoZWQ1OTFlNDg3ZDM1OD\ +A3ZRMzYmxha2UyOjpCbGFrZTJzVmFyQ29yZTo6Y29tcHJlc3M6OmhlZGE4MzJmNzhlMGEyMDM0FCtz\ +aGExOjpjb21wcmVzczo6Y29tcHJlc3M6Omg4ZGZjMzY3YzJiZjRlNDgxFSx0aWdlcjo6Y29tcHJlc3\ +M6OmNvbXByZXNzOjpoZDI5OWUxODU5OGYzYzUzNxY2Ymxha2UzOjpwb3J0YWJsZTo6Y29tcHJlc3Nf\ +aW5fcGxhY2U6Omg1YzRkMGM2ZGE3NTI2NWI0FzpkbG1hbGxvYzo6ZGxtYWxsb2M6OkRsbWFsbG9jPE\ +E+OjptYWxsb2M6OmgyYWJiZTFlNGYxOWNmNWYxGD1kZW5vX3N0ZF93YXNtX2NyeXB0bzo6ZGlnZXN0\ +OjpDb250ZXh0OjpuZXc6OmhhMjUxYjE3NzdhYjA5NTZhGWU8ZGlnZXN0Ojpjb3JlX2FwaTo6d3JhcH\ +Blcjo6Q29yZVdyYXBwZXI8VD4gYXMgZGlnZXN0OjpVcGRhdGU+Ojp1cGRhdGU6Ont7Y2xvc3VyZX19\ +OjpoY2NmM2MzODIxZTMzODIwNxpoPG1kNTo6TWQ1Q29yZSBhcyBkaWdlc3Q6OmNvcmVfYXBpOjpGaX\ +hlZE91dHB1dENvcmU+OjpmaW5hbGl6ZV9maXhlZF9jb3JlOjp7e2Nsb3N1cmV9fTo6aDFjMWM4NjE1\ +ZTU1OGQ4YWUbMGJsYWtlMzo6Y29tcHJlc3Nfc3VidHJlZV93aWRlOjpoNDM0MmYwNzRjMmY3Y2RhOB\ +wsY29yZTo6Zm10OjpGb3JtYXR0ZXI6OnBhZDo6aDYyOGZmMGU1NmJmNDQ5MTMdMWJsYWtlMzo6SGFz\ +aGVyOjptZXJnZV9jdl9zdGFjazo6aGFiODAwNWNiN2FiYTVjNDYeIG1kNDo6Y29tcHJlc3M6OmgyNT\ +hmN2I3YTE3OGY2MmE4HyBrZWNjYWs6OnAxNjAwOjpoNmFhOTI4Mzg3ZWE0ZDQ3ZSByPHNoYTI6OmNv\ +cmVfYXBpOjpTaGE1MTJWYXJDb3JlIGFzIGRpZ2VzdDo6Y29yZV9hcGk6OlZhcmlhYmxlT3V0cHV0Q2\ +9yZT46OmZpbmFsaXplX3ZhcmlhYmxlX2NvcmU6OmgxMjY3ZjljMGM0YmEzMjA0IThkbG1hbGxvYzo6\ +ZGxtYWxsb2M6OkRsbWFsbG9jPEE+OjpmcmVlOjpoNjQ1OGZjZDkzYjg1MTIwZCJOY29yZTo6Zm10Oj\ +pudW06OmltcDo6PGltcGwgY29yZTo6Zm10OjpEaXNwbGF5IGZvciB1MzI+OjpmbXQ6Omg5M2ZhYjRm\ +ODllOWE0NjFhI0FkbG1hbGxvYzo6ZGxtYWxsb2M6OkRsbWFsbG9jPEE+OjpkaXNwb3NlX2NodW5rOj\ +poZDZhZTg5ZjI5MGFlYjcwZCQOX19ydXN0X3JlYWxsb2MlO2RpZ2VzdDo6RXh0ZW5kYWJsZU91dHB1\ +dDo6ZmluYWxpemVfYm94ZWQ6OmgxZTc2YjQ5NzU2OTkyNGI3JnI8c2hhMjo6Y29yZV9hcGk6OlNoYT\ +I1NlZhckNvcmUgYXMgZGlnZXN0Ojpjb3JlX2FwaTo6VmFyaWFibGVPdXRwdXRDb3JlPjo6ZmluYWxp\ +emVfdmFyaWFibGVfY29yZTo6aGE5ZTk4ZjQ3NTQ4YzUxZDUnI2NvcmU6OmZtdDo6d3JpdGU6Omg0Mj\ +A2ZTA2OTVmMjQ0ZDU4KDRibGFrZTM6OmNvbXByZXNzX3BhcmVudHNfcGFyYWxsZWw6OmhiMDY5NmFk\ +YmMxMWMzOTY4KT08RCBhcyBkaWdlc3Q6OmRpZ2VzdDo6RHluRGlnZXN0Pjo6ZmluYWxpemU6OmhhMz\ +YwNTZiYjQ3ZmZhNTFlKj08RCBhcyBkaWdlc3Q6OmRpZ2VzdDo6RHluRGlnZXN0Pjo6ZmluYWxpemU6\ +Omg3YTM5YzBmN2M0NmU1MjhjKz08RCBhcyBkaWdlc3Q6OmRpZ2VzdDo6RHluRGlnZXN0Pjo6ZmluYW\ +xpemU6OmhmZjFkYjAyN2I1MzFiYTIxLC1ibGFrZTM6OkNodW5rU3RhdGU6OnVwZGF0ZTo6aDE5NzQ2\ +YTJhZThjMjMwNTQtPGRsbWFsbG9jOjpkbG1hbGxvYzo6RGxtYWxsb2M8QT46Om1lbWFsaWduOjpoOW\ +I2NDQ2ZDVhY2ZjNmVjYi5AZGxtYWxsb2M6OmRsbWFsbG9jOjpEbG1hbGxvYzxBPjo6dW5saW5rX2No\ +dW5rOjpoY2UwODFmMjY0MDI3YzVhZS8xY29tcGlsZXJfYnVpbHRpbnM6Om1lbTo6bWVtY3B5OjpoZm\ +YzMmQxNDRhYWJjNDg4YjByPGRpZ2VzdDo6Y29yZV9hcGk6OnhvZl9yZWFkZXI6OlhvZlJlYWRlckNv\ +cmVXcmFwcGVyPFQ+IGFzIGRpZ2VzdDo6WG9mUmVhZGVyPjo6cmVhZDo6e3tjbG9zdXJlfX06Omg1MT\ +g3ZWFkMmFlOWM0OTJjMT08RCBhcyBkaWdlc3Q6OmRpZ2VzdDo6RHluRGlnZXN0Pjo6ZmluYWxpemU6\ +Omg3ZWE0YmIxNmJmYWViMzlmMkZkbG1hbGxvYzo6ZGxtYWxsb2M6OkRsbWFsbG9jPEE+OjppbnNlcn\ +RfbGFyZ2VfY2h1bms6Omg4YWRhMTRkNWE5MDA0NWRlMxtkaWdlc3Rjb250ZXh0X2RpZ2VzdEFuZERy\ +b3A0cjxkaWdlc3Q6OmNvcmVfYXBpOjp4b2ZfcmVhZGVyOjpYb2ZSZWFkZXJDb3JlV3JhcHBlcjxUPi\ +BhcyBkaWdlc3Q6OlhvZlJlYWRlcj46OnJlYWQ6Ont7Y2xvc3VyZX19OjpoZWU0ZWY1YWQxNzJmMDg3\ +MzUGZGlnZXN0Nj08RCBhcyBkaWdlc3Q6OmRpZ2VzdDo6RHluRGlnZXN0Pjo6ZmluYWxpemU6OmhlOT\ +cwZDZlNTQ5YWZkNGZmNz5kZW5vX3N0ZF93YXNtX2NyeXB0bzo6RGlnZXN0Q29udGV4dDo6dXBkYXRl\ +OjpoODI2MzRkMTg4ODQyYTViYjgxY29tcGlsZXJfYnVpbHRpbnM6Om1lbTo6bWVtc2V0OjpoNGY5NT\ +E0OGE0NmI3ZmFjNDkRZGlnZXN0Y29udGV4dF9uZXc6LWpzX3N5czo6VWludDhBcnJheTo6dG9fdmVj\ +OjpoOWIzMTY4M2JkYTE4NTBlYzs/d2FzbV9iaW5kZ2VuOjpjb252ZXJ0OjpjbG9zdXJlczo6aW52b2\ +tlM19tdXQ6Omg1NmM2NjMxMmE5ZGRiODgwPC5jb3JlOjpyZXN1bHQ6OnVud3JhcF9mYWlsZWQ6Omhh\ +ZDcwNDkxYzYyZWU2ODFiPT9jb3JlOjpzbGljZTo6aW5kZXg6OnNsaWNlX2VuZF9pbmRleF9sZW5fZm\ +FpbDo6aGE4YjlhOWIzYWZhZWMwZTg+QWNvcmU6OnNsaWNlOjppbmRleDo6c2xpY2Vfc3RhcnRfaW5k\ +ZXhfbGVuX2ZhaWw6OmgwZGEzZjM3MTE4ZDhkMGQ3P05jb3JlOjpzbGljZTo6PGltcGwgW1RdPjo6Y2\ +9weV9mcm9tX3NsaWNlOjpsZW5fbWlzbWF0Y2hfZmFpbDo6aGM2ODk0ZDBmNjI1ZTk3MDhANmNvcmU6\ +OnBhbmlja2luZzo6cGFuaWNfYm91bmRzX2NoZWNrOjpoMzBhNTU4M2M0NmY2MzMxN0FQPGFycmF5dm\ +VjOjplcnJvcnM6OkNhcGFjaXR5RXJyb3I8VD4gYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aDdm\ +N2U3YmE2MjU0MGYxZjNCUDxhcnJheXZlYzo6ZXJyb3JzOjpDYXBhY2l0eUVycm9yPFQ+IGFzIGNvcm\ +U6OmZtdDo6RGVidWc+OjpmbXQ6Omg5ZWZmMjkwODYzZWVjNjFkQxhfX3diZ19kaWdlc3Rjb250ZXh0\ +X2ZyZWVEN3N0ZDo6cGFuaWNraW5nOjpydXN0X3BhbmljX3dpdGhfaG9vazo6aDlhYWJkOTA2MjE4OD\ +k3YzNFEV9fd2JpbmRnZW5fbWFsbG9jRjFjb21waWxlcl9idWlsdGluczo6bWVtOjptZW1jbXA6Omhh\ +ZDVkNjUxNGEyM2NjZWZmRxRkaWdlc3Rjb250ZXh0X3VwZGF0ZUgpY29yZTo6cGFuaWNraW5nOjpwYW\ +5pYzo6aDExYTIwMjFkOTJkYzFjYmJJQ2NvcmU6OmZtdDo6Rm9ybWF0dGVyOjpwYWRfaW50ZWdyYWw6\ +OndyaXRlX3ByZWZpeDo6aDZjOWE3Njk3NzdhYWQ2NzRKNGFsbG9jOjpyYXdfdmVjOjpjYXBhY2l0eV\ +9vdmVyZmxvdzo6aDRlNWU5MDZiMTcyOWQwMTFLLWNvcmU6OnBhbmlja2luZzo6cGFuaWNfZm10Ojpo\ +M2FmZjg1NWZlOTM4YzEzZkxDc3RkOjpwYW5pY2tpbmc6OmJlZ2luX3BhbmljX2hhbmRsZXI6Ont7Y2\ +xvc3VyZX19OjpoOTZkMmJjMzgxZmE2ZWUxZU0SX193YmluZGdlbl9yZWFsbG9jTj93YXNtX2JpbmRn\ +ZW46OmNvbnZlcnQ6OmNsb3N1cmVzOjppbnZva2U0X211dDo6aGE4NWM3OTVkNWJiNDI0MTdPP3dhc2\ +1fYmluZGdlbjo6Y29udmVydDo6Y2xvc3VyZXM6Omludm9rZTNfbXV0OjpoYTlkZjAyMTQ0YTQwMGI3\ +MVA/d2FzbV9iaW5kZ2VuOjpjb252ZXJ0OjpjbG9zdXJlczo6aW52b2tlM19tdXQ6Omg2OTFjYjgxZD\ +dhODI4MTlhUT93YXNtX2JpbmRnZW46OmNvbnZlcnQ6OmNsb3N1cmVzOjppbnZva2UzX211dDo6aDZh\ +MmUyNzUzOGUxZmQ4MTBSP3dhc21fYmluZGdlbjo6Y29udmVydDo6Y2xvc3VyZXM6Omludm9rZTNfbX\ +V0OjpoMDUxODkyNmI4ZTg5ZmI5NFM/d2FzbV9iaW5kZ2VuOjpjb252ZXJ0OjpjbG9zdXJlczo6aW52\ +b2tlM19tdXQ6Omg5NWM1OTk3NGZkZGVhNWI3VD93YXNtX2JpbmRnZW46OmNvbnZlcnQ6OmNsb3N1cm\ +VzOjppbnZva2UzX211dDo6aDJjMTI4NDcwMjVmMzBjOTlVP3dhc21fYmluZGdlbjo6Y29udmVydDo6\ +Y2xvc3VyZXM6Omludm9rZTNfbXV0OjpoNzY0Yzc0ODFiYzM1Y2E2YVY/d2FzbV9iaW5kZ2VuOjpjb2\ +52ZXJ0OjpjbG9zdXJlczo6aW52b2tlM19tdXQ6OmgwOTgxODgyNjA0MDY0MGE1Vz93YXNtX2JpbmRn\ +ZW46OmNvbnZlcnQ6OmNsb3N1cmVzOjppbnZva2UyX211dDo6aDBiZTc2OTU2MDFiM2RmNGRYEXJ1c3\ +RfYmVnaW5fdW53aW5kWT93YXNtX2JpbmRnZW46OmNvbnZlcnQ6OmNsb3N1cmVzOjppbnZva2UxX211\ +dDo6aDNhODY3YjY0ZmUwYWFiNmZaMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoNTM3Nz\ +kzYWE4MjQxMDQ4MFsyPCZUIGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aDNhYWRlZGFlZDIw\ +OGQ2MTBcMTxUIGFzIGNvcmU6OmFueTo6QW55Pjo6dHlwZV9pZDo6aGU1MmMxZDgyMGFjZjI0MTldD1\ +9fd2JpbmRnZW5fZnJlZV4uY29yZTo6b3B0aW9uOjp1bndyYXBfZmFpbGVkOjpoMGUwYjIzMTYyM2Uw\ +ZDAwNF85Y29yZTo6b3BzOjpmdW5jdGlvbjo6Rm5PbmNlOjpjYWxsX29uY2U6OmhhY2E1ZDVhNmNjNz\ +YwY2I2YB9fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyYTF3YXNtX2JpbmRnZW46Ol9fcnQ6\ +OnRocm93X251bGw6OmhkNmJjZTg5MGIxMjgyMDk3YjJ3YXNtX2JpbmRnZW46Ol9fcnQ6OmJvcnJvd1\ +9mYWlsOjpoYmMzYmQxMjRhYTdhNmIyM2Mqd2FzbV9iaW5kZ2VuOjp0aHJvd19zdHI6OmhhNjgwY2I3\ +ZjEyZTAyYzk4ZElzdGQ6OnN5c19jb21tb246OmJhY2t0cmFjZTo6X19ydXN0X2VuZF9zaG9ydF9iYW\ +NrdHJhY2U6OmhhNzY1MTNhNzBiYjA3MGIwZQZtZW1jcHlmBm1lbXNldGcGbWVtY21waApydXN0X3Bh\ +bmljaVZjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8YXJyYXl2ZWM6OmVycm9yczo6Q2FwYWNpdHlFcn\ +JvcjxbdTg7IDMyXT4+OjpoZmVjZDhkNzYxMTVjNjA2Y2pXY29yZTo6cHRyOjpkcm9wX2luX3BsYWNl\ +PGFycmF5dmVjOjplcnJvcnM6OkNhcGFjaXR5RXJyb3I8Jlt1ODsgNjRdPj46Omg4NjUxY2YyYTQ5NW\ +MyOTNmaz1jb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8Y29yZTo6Zm10OjpFcnJvcj46Omg5YTkzNjE3\ +OWFjZDQ1YjNkAG8JcHJvZHVjZXJzAghsYW5ndWFnZQEEUnVzdAAMcHJvY2Vzc2VkLWJ5AwVydXN0Yx\ +0xLjc3LjIgKDI1ZWY5ZTNkOCAyMDI0LTA0LTA5KQZ3YWxydXMGMC4yMC4zDHdhc20tYmluZGdlbgYw\ +LjIuOTIALA90YXJnZXRfZmVhdHVyZXMCKw9tdXRhYmxlLWdsb2JhbHMrCHNpZ24tZXh0\ + ", + ); + const wasmModule = new WebAssembly.Module(wasmBytes); + return new WebAssembly.Instance(wasmModule, imports); +} + +function base64decode(b64) { + const binString = atob(b64); + const size = binString.length; + const bytes = new Uint8Array(size); + for (let i = 0; i < size; i++) { + bytes[i] = binString.charCodeAt(i); + } + return bytes; +} diff --git a/src/vendor/deno.land/std@0.217.0/crypto/_wasm/mod.ts b/src/vendor/jsr.io/@std/crypto/0.224.0/_wasm/mod.ts similarity index 58% rename from src/vendor/deno.land/std@0.217.0/crypto/_wasm/mod.ts rename to src/vendor/jsr.io/@std/crypto/0.224.0/_wasm/mod.ts index 2799af040ad..8e0e684513f 100644 --- a/src/vendor/deno.land/std@0.217.0/crypto/_wasm/mod.ts +++ b/src/vendor/jsr.io/@std/crypto/0.224.0/_wasm/mod.ts @@ -1,24 +1,23 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. export { - DigestContext, instantiate as instantiateWasm, } from "./lib/deno_std_wasm_crypto.generated.mjs"; /** - * All cryptographic hash/digest algorithms supported by std/crypto/_wasm. + * All cryptographic hash/digest algorithms supported by std/crypto. * - * For algorithms that are supported by WebCrypto, the name here must match the - * one used by WebCrypto. Otherwise we should prefer the formatting used in the - * official specification. All names are uppercase to facilitate case-insensitive - * comparisons required by the WebCrypto spec. + * For algorithms that are supported by WebCrypto, the name here will match the + * one used by WebCrypto. Otherwise we prefer the formatting used in the + * algorithm's official specification. All names are uppercase to facilitate + * case-insensitive comparisons required by the WebCrypto spec. */ -export const digestAlgorithms = [ +export const DIGEST_ALGORITHM_NAMES = [ + "BLAKE2B", "BLAKE2B-128", "BLAKE2B-160", "BLAKE2B-224", "BLAKE2B-256", "BLAKE2B-384", - "BLAKE2B", "BLAKE2S", "BLAKE3", "KECCAK-224", @@ -38,11 +37,16 @@ export const digestAlgorithms = [ "SHA-224", "SHA-256", "SHA-512", - // insecure (collidable and length-extendable): + // insecure (length-extendable and collidable): "MD4", "MD5", "SHA-1", + // insecure (non-cryptographic) + "FNV32", + "FNV32A", + "FNV64", + "FNV64A", ] as const; -/** An algorithm name supported by std/crypto/_wasm. */ -export type DigestAlgorithm = typeof digestAlgorithms[number]; +/** An algorithm name supported by std/crypto. */ +export type DigestAlgorithmName = typeof DIGEST_ALGORITHM_NAMES[number]; diff --git a/src/vendor/deno.land/std@0.217.0/crypto/crypto.ts b/src/vendor/jsr.io/@std/crypto/0.224.0/crypto.ts similarity index 70% rename from src/vendor/deno.land/std@0.217.0/crypto/crypto.ts rename to src/vendor/jsr.io/@std/crypto/0.224.0/crypto.ts index 8131f94a783..5b47db4ffc6 100644 --- a/src/vendor/deno.land/std@0.217.0/crypto/crypto.ts +++ b/src/vendor/jsr.io/@std/crypto/0.224.0/crypto.ts @@ -17,27 +17,23 @@ * ## Supported algorithms * * Here is a list of supported algorithms. If the algorithm name in WebCrypto - * and Wasm/Rust is the same, this library prefers to use algorithms that are - * supported by WebCrypto. + * and Wasm/Rust is the same, this library prefers to use the implementation + * provided by WebCrypto. * * WebCrypto: * - `SHA-384` - * - `SHA-256` - * - `SHA-512` (length-extendable and collidable) + * - `SHA-256` (length-extendable) + * - `SHA-512` (length-extendable) * * Wasm/Rust: + * - `BLAKE2B` * - `BLAKE2B-128` * - `BLAKE2B-160` * - `BLAKE2B-224` * - `BLAKE2B-256` * - `BLAKE2B-384` - * - `BLAKE2B` * - `BLAKE2S` * - `BLAKE3` - * - `FNV32` (length-extendable) - * - `FNV32A` (length-extendable) - * - `FNV64` (length-extendable) - * - `FNV64A` (length-extendable) * - `KECCAK-224` * - `KECCAK-256` * - `KECCAK-384` @@ -54,14 +50,17 @@ * - `SHA-224` (length-extendable) * - `SHA-256` (length-extendable) * - `SHA-512` (length-extendable) - * - `MD4` (collidable and length-extendable) - * - `MD5` (collidable and length-extendable) - * - `SHA-1` (collidable and length-extendable) - * ``` + * - `MD4` (length-extendable and collidable) + * - `MD5` (length-extendable and collidable) + * - `SHA-1` (length-extendable and collidable) + * - `FNV32` (non-cryptographic) + * - `FNV32A` (non-cryptographic) + * - `FNV64` (non-cryptographic) + * - `FNV64A` (non-cryptographic) * * @example * ```ts - * import { crypto } from "https://deno.land/std@$STD_VERSION/crypto/mod.ts"; + * import { crypto } from "@std/crypto"; * * // This will delegate to the runtime's WebCrypto implementation. * console.log( @@ -89,9 +88,9 @@ * ```ts * import { * crypto, - * } from "https://deno.land/std@$STD_VERSION/crypto/mod.ts"; - * import { encodeHex } from "https://deno.land/std@$STD_VERSION/encoding/hex.ts" - * import { encodeBase64 } from "https://deno.land/std@$STD_VERSION/encoding/base64.ts" + * } from "@std/crypto"; + * import { encodeHex } from "@std/encoding/hex" + * import { encodeBase64 } from "@std/encoding/base64" * * const hash = await crypto.subtle.digest( * "SHA-384", @@ -107,15 +106,22 @@ * * @module */ - import { - DigestAlgorithm as WasmDigestAlgorithm, - digestAlgorithms as wasmDigestAlgorithms, + DIGEST_ALGORITHM_NAMES, + type DigestAlgorithmName, instantiateWasm, } from "./_wasm/mod.ts"; -import { fnv } from "./_fnv/mod.ts"; -export { type WasmDigestAlgorithm, wasmDigestAlgorithms }; +export { DIGEST_ALGORITHM_NAMES, type DigestAlgorithmName }; + +/** Digest algorithms supported by WebCrypto. */ +const WEB_CRYPTO_DIGEST_ALGORITHM_NAMES = [ + "SHA-384", + "SHA-256", + "SHA-512", + // insecure (length-extendable and collidable): + "SHA-1", +] as const; /** * A copy of the global WebCrypto interface, with methods bound so they're @@ -140,17 +146,16 @@ const webCrypto = ((crypto) => ({ }, }))(globalThis.crypto); -const bufferSourceBytes = (data: BufferSource | unknown) => { - let bytes: Uint8Array | undefined; +function toUint8Array(data: unknown): Uint8Array | undefined { if (data instanceof Uint8Array) { - bytes = data; + return data; } else if (ArrayBuffer.isView(data)) { - bytes = new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); } else if (data instanceof ArrayBuffer) { - bytes = new Uint8Array(data); + return new Uint8Array(data); } - return bytes; -}; + return undefined; +} /** Extensions to the web standard `SubtleCrypto` interface. */ export interface StdSubtleCrypto extends SubtleCrypto { @@ -201,37 +206,31 @@ const stdCrypto: StdCrypto = ((x) => x)({ assertValidDigestLength(length); - const bytes = bufferSourceBytes(data); - - if (FNV_ALGORITHMS.includes(name)) { - return fnv(name, bytes); - } - // We delegate to WebCrypto whenever possible, if ( // if the algorithm is supported by the WebCrypto standard, - (webCryptoDigestAlgorithms as readonly string[]).includes(name) && + (WEB_CRYPTO_DIGEST_ALGORITHM_NAMES as readonly string[]).includes( + name, + ) && // and the data is a single buffer, - bytes + isBufferSource(data) ) { - return webCrypto.subtle.digest(algorithm, bytes); - } else if (wasmDigestAlgorithms.includes(name as WasmDigestAlgorithm)) { - if (bytes) { + return await webCrypto.subtle.digest(algorithm, data); + } else if (DIGEST_ALGORITHM_NAMES.includes(name as DigestAlgorithmName)) { + if (isBufferSource(data)) { // Otherwise, we use our bundled Wasm implementation via digestSync // if it supports the algorithm. - return stdCrypto.subtle.digestSync(algorithm, bytes); - } else if ((data as Iterable)[Symbol.iterator]) { + return stdCrypto.subtle.digestSync(algorithm, data); + } else if (isIterable(data)) { return stdCrypto.subtle.digestSync( algorithm, data as Iterable, ); - } else if ( - (data as AsyncIterable)[Symbol.asyncIterator] - ) { + } else if (isAsyncIterable(data)) { const wasmCrypto = instantiateWasm(); const context = new wasmCrypto.DigestContext(name); for await (const chunk of data as AsyncIterable) { - const chunkBytes = bufferSourceBytes(chunk); + const chunkBytes = toUint8Array(chunk); if (!chunkBytes) { throw new TypeError("data contained chunk of the wrong type"); } @@ -243,18 +242,12 @@ const stdCrypto: StdCrypto = ((x) => x)({ "data must be a BufferSource or [Async]Iterable", ); } - } else if (webCrypto.subtle?.digest) { - // (TypeScript type definitions prohibit this case.) If they're trying - // to call an algorithm we don't recognize, pass it along to WebCrypto - // in case it's a non-standard algorithm supported by the the runtime - // they're using. - return webCrypto.subtle.digest( - algorithm, - (data as unknown) as Uint8Array, - ); - } else { - throw new TypeError(`unsupported digest algorithm: ${algorithm}`); } + // (TypeScript type definitions prohibit this case.) If they're trying + // to call an algorithm we don't recognize, pass it along to WebCrypto + // in case it's a non-standard algorithm supported by the the runtime + // they're using. + return await webCrypto.subtle.digest(algorithm, data as BufferSource); }, digestSync( @@ -262,58 +255,57 @@ const stdCrypto: StdCrypto = ((x) => x)({ data: BufferSource | Iterable, ): ArrayBuffer { const { name, length } = normalizeAlgorithm(algorithm); - assertValidDigestLength(length); - const bytes = bufferSourceBytes(data); - - if (FNV_ALGORITHMS.includes(name)) { - return fnv(name, bytes); - } - const wasmCrypto = instantiateWasm(); - if (bytes) { - return wasmCrypto.digest(name, bytes, length) - .buffer; - } else if ((data as Iterable)[Symbol.iterator]) { + if (isBufferSource(data)) { + const bytes = toUint8Array(data)!; + return wasmCrypto.digest(name, bytes, length).buffer; + } + if (isIterable(data)) { const context = new wasmCrypto.DigestContext(name); - for (const chunk of data as Iterable) { - const chunkBytes = bufferSourceBytes(chunk); + for (const chunk of data) { + const chunkBytes = toUint8Array(chunk); if (!chunkBytes) { throw new TypeError("data contained chunk of the wrong type"); } context.update(chunkBytes); } return context.digestAndDrop(length).buffer; - } else { - throw new TypeError( - "data must be a BufferSource or Iterable", - ); } + throw new TypeError( + "data must be a BufferSource or Iterable", + ); }, }, }); -const FNV_ALGORITHMS = ["FNV32", "FNV32A", "FNV64", "FNV64A"]; - -/** Digest algorithms supported by WebCrypto. */ -const webCryptoDigestAlgorithms = [ - "SHA-384", - "SHA-256", - "SHA-512", - // insecure (length-extendable and collidable): - "SHA-1", -] as const; - -/** FNV (Fowler/Noll/Vo) algorithms names. */ +/** + * A FNV (Fowler/Noll/Vo) digest algorithm name supported by std/crypto. + * + * @deprecated This will be removed in 1.0.0. + */ export type FNVAlgorithms = "FNV32" | "FNV32A" | "FNV64" | "FNV64A"; -/** Extended digest algorithm names. */ -export type DigestAlgorithmName = WasmDigestAlgorithm | FNVAlgorithms; +/** + * Digest algorithm names supported by std/crypto with a Wasm implementation. + * + * @deprecated This will be removed in 1.0.0. Use + * {@linkcode DIGEST_ALGORITHM_NAMES} instead. + */ +export const wasmDigestAlgorithms = DIGEST_ALGORITHM_NAMES; + +/** + * A digest algorithm name supported by std/crypto with a Wasm implementation. + * + * @deprecated This will be removed in 1.0.0. Use + * {@linkcode DigestAlgorithmName} instead. + */ +export type WasmDigestAlgorithm = DigestAlgorithmName; /* - * The largest digest length the current WASM implementation can support. This - * is the value of `isize::MAX` on 32-bit platforms like WASM, which is the + * The largest digest length the current Wasm implementation can support. This + * is the value of `isize::MAX` on 32-bit platforms like Wasm, which is the * maximum allowed capacity of a Rust `Vec`. */ const MAX_DIGEST_LENGTH = 0x7FFF_FFFF; @@ -354,4 +346,16 @@ function normalizeAlgorithm(algorithm: DigestAlgorithm) { }) as DigestAlgorithmObject; } +function isBufferSource(obj: unknown): obj is BufferSource { + return obj instanceof ArrayBuffer || ArrayBuffer.isView(obj); +} + +function isIterable(obj: unknown): obj is Iterable { + return typeof (obj as Iterable)[Symbol.iterator] === "function"; +} + +function isAsyncIterable(obj: unknown): obj is AsyncIterable { + return typeof (obj as AsyncIterable)[Symbol.asyncIterator] === "function"; +} + export { stdCrypto as crypto }; diff --git a/src/vendor/deno.land/std@0.217.0/crypto/mod.ts b/src/vendor/jsr.io/@std/crypto/0.224.0/mod.ts similarity index 66% rename from src/vendor/deno.land/std@0.217.0/crypto/mod.ts rename to src/vendor/jsr.io/@std/crypto/0.224.0/mod.ts index 2505ccb3554..49a68871565 100644 --- a/src/vendor/deno.land/std@0.217.0/crypto/mod.ts +++ b/src/vendor/jsr.io/@std/crypto/0.224.0/mod.ts @@ -7,6 +7,16 @@ * supporting additional encryption APIs, but also delegating to the built-in * APIs when possible. * + * ```ts + * import { crypto } from "@std/crypto/crypto"; + * + * const message = "Hello, Deno!"; + * const encoder = new TextEncoder(); + * const data = encoder.encode(message); + * + * await crypto.subtle.digest("BLAKE3", data); + * ``` + * * @module */ diff --git a/src/vendor/deno.land/std@0.217.0/crypto/timing_safe_equal.ts b/src/vendor/jsr.io/@std/crypto/0.224.0/timing_safe_equal.ts similarity index 87% rename from src/vendor/deno.land/std@0.217.0/crypto/timing_safe_equal.ts rename to src/vendor/jsr.io/@std/crypto/0.224.0/timing_safe_equal.ts index 854e84b71be..6f404b9590f 100644 --- a/src/vendor/deno.land/std@0.217.0/crypto/timing_safe_equal.ts +++ b/src/vendor/jsr.io/@std/crypto/0.224.0/timing_safe_equal.ts @@ -1,7 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -import { assert } from "../assert/assert.ts"; +import { assert } from "jsr:/@std/assert@^0.224.0/assert"; /** * When checking the values of cryptographic hashes are equal, default @@ -15,8 +15,8 @@ import { assert } from "../assert/assert.ts"; * that time, `timingSafeEqual()` is provided: * * ```ts - * import { timingSafeEqual } from "https://deno.land/std@$STD_VERSION/crypto/timing_safe_equal.ts"; - * import { assert } from "https://deno.land/std@$STD_VERSION/assert/assert.ts"; + * import { timingSafeEqual } from "@std/crypto/timing-safe-equal"; + * import { assert } from "@std/assert/assert"; * * const a = await crypto.subtle.digest( * "SHA-384", diff --git a/src/vendor/deno.land/std@0.217.0/crypto/unstable_keystack.ts b/src/vendor/jsr.io/@std/crypto/0.224.0/unstable_keystack.ts similarity index 97% rename from src/vendor/deno.land/std@0.217.0/crypto/unstable_keystack.ts rename to src/vendor/jsr.io/@std/crypto/0.224.0/unstable_keystack.ts index fdef87ceb35..ecbd5c22456 100644 --- a/src/vendor/deno.land/std@0.217.0/crypto/unstable_keystack.ts +++ b/src/vendor/jsr.io/@std/crypto/0.224.0/unstable_keystack.ts @@ -9,7 +9,7 @@ */ import { timingSafeEqual } from "./timing_safe_equal.ts"; -import { encodeBase64Url } from "../encoding/base64url.ts"; +import { encodeBase64Url } from "jsr:/@std/encoding@^0.224.0/base64url"; /** Types of data that can be signed cryptographically. */ export type Data = string | number[] | ArrayBuffer | Uint8Array; @@ -78,7 +78,7 @@ async function compare(a: Data, b: Data): Promise { * * @example * ```ts - * import { KeyStack } from "https://deno.land/std@$STD_VERSION/crypto/unstable_keystack.ts"; + * import { KeyStack } from "@std/crypto/unstable-keystack"; * * const keyStack = new KeyStack(["hello", "world"]); * const digest = await keyStack.sign("some data"); diff --git a/src/vendor/deno.land/std@0.217.0/csv/_io.ts b/src/vendor/jsr.io/@std/csv/0.224.3/_io.ts similarity index 80% rename from src/vendor/deno.land/std@0.217.0/csv/_io.ts rename to src/vendor/jsr.io/@std/csv/0.224.3/_io.ts index bc7af4a518d..46082fb5c10 100644 --- a/src/vendor/deno.land/std@0.217.0/csv/_io.ts +++ b/src/vendor/jsr.io/@std/csv/0.224.3/_io.ts @@ -3,7 +3,6 @@ // Copyright 2011 The Go Authors. All rights reserved. BSD license. // https://github.com/golang/go/blob/master/LICENSE // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { assert } from "../assert/assert.ts"; /** Options for {@linkcode parseRecord}. */ export interface ReadOptions { @@ -71,7 +70,7 @@ export async function parseRecord( return []; } - assert(opt.separator !== undefined); + if (opt.separator === undefined) throw new TypeError("Separator is required"); let fullLine = line; let quoteError: ParseError | null = null; @@ -215,16 +214,99 @@ function runeCount(s: string): number { /** * A ParseError is returned for parsing errors. * Line numbers are 1-indexed and columns are 0-indexed. + * + * @example Usage + * ```ts + * import { parse, ParseError } from "@std/csv/parse"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * try { + * parse(`a "word","b"`); + * } catch (error) { + * if (error instanceof ParseError) { + * assertEquals(error.message, `parse error on line 1, column 2: bare " in non-quoted-field`); + * } + * } + * ``` */ export class ParseError extends SyntaxError { - /** Line where the record starts*/ + /** + * Line where the record starts. + * + * @example Usage + * ```ts + * import { parse, ParseError } from "@std/csv/parse"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * try { + * parse(`a "word","b"`); + * } catch (error) { + * if (error instanceof ParseError) { + * assertEquals(error.startLine, 1); + * } + * } + * ``` + */ startLine: number; - /** Line where the error occurred */ + /** + * Line where the error occurred. + * + * @example Usage + * ```ts + * import { parse, ParseError } from "@std/csv/parse"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * try { + * parse(`a "word","b"`); + * } catch (error) { + * if (error instanceof ParseError) { + * assertEquals(error.line, 1); + * } + * } + * ``` + */ line: number; - /** Column (rune index) where the error occurred */ + /** + * Column (rune index) where the error occurred. + * + * @example Usage + * ```ts + * import { parse, ParseError } from "@std/csv/parse"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * try { + * parse(`a "word","b"`); + * } catch (error) { + * if (error instanceof ParseError) { + * assertEquals(error.column, 2); + * } + * } + * ``` + */ column: number | null; - /** Constructs a new instance. */ + /** + * Constructs a new instance. + * + * @example Usage + * ```ts + * import { parse, ParseError } from "@std/csv/parse"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * try { + * parse(`a "word","b"`); + * } catch (error) { + * if (error instanceof ParseError) { + * assertEquals(error.message, `parse error on line 1, column 2: bare " in non-quoted-field`); + * } + * } + * ``` + * + * @param start Line where the record starts + * @param line Line where the error occurred + * @param column Column The index where the error occurred + * @param message Error message + */ constructor( start: number, line: number, diff --git a/src/vendor/deno.land/std@0.217.0/csv/csv_parse_stream.ts b/src/vendor/jsr.io/@std/csv/0.224.3/csv_parse_stream.ts similarity index 67% rename from src/vendor/deno.land/std@0.217.0/csv/csv_parse_stream.ts rename to src/vendor/jsr.io/@std/csv/0.224.3/csv_parse_stream.ts index cce67c3eb9f..c5e439496ce 100644 --- a/src/vendor/deno.land/std@0.217.0/csv/csv_parse_stream.ts +++ b/src/vendor/jsr.io/@std/csv/0.224.3/csv_parse_stream.ts @@ -8,8 +8,8 @@ import { parseRecord, type ParseResult, type ReadOptions, -} from "../csv/_io.ts"; -import { TextDelimiterStream } from "../streams/text_delimiter_stream.ts"; +} from "./_io.ts"; +import { TextDelimiterStream } from "jsr:/@std/streams@^0.224.4/text-delimiter-stream"; /** Options for {@linkcode CsvParseStream}. */ export interface CsvParseStreamOptions extends ReadOptions { @@ -64,16 +64,22 @@ export type RowType = T extends undefined ? string[] * for columns. * * A `CsvParseStream` expects input conforming to - * {@link https://tools.ietf.org/html/rfc4180 | RFC 4180}. + * {@link https://www.rfc-editor.org/rfc/rfc4180.html | RFC 4180}. * - * @example - * ```ts - * import { CsvParseStream } from "https://deno.land/std@$STD_VERSION/csv/csv_parse_stream.ts"; - * const res = await fetch("https://example.com/data.csv"); - * const parts = res.body! - * .pipeThrough(new TextDecoderStream()) - * .pipeThrough(new CsvParseStream()); + * @example Usage + * ```ts no-assert + * import { CsvParseStream } from "@std/csv/csv-parse-stream"; + * + * const source = ReadableStream.from([ + * "name,age", + * "Alice,34", + * "Bob,24", + * "Charlie,45", + * ]); + * const parts = source.pipeThrough(new CsvParseStream()); * ``` + * + * @typeParam T The type of options for the stream. */ export class CsvParseStream< const T extends CsvParseStreamOptions | undefined = undefined, @@ -89,7 +95,23 @@ export class CsvParseStream< #headers: readonly string[] = []; - /** Construct a new instance. */ + /** Construct a new instance. + * + * @example Usage + * ```ts no-assert + * import { CsvParseStream } from "@std/csv/csv-parse-stream"; + * + * const source = ReadableStream.from([ + * "name,age", + * "Alice,34", + * "Bob,24", + * "Charlie,45", + * ]); + * const parts = source.pipeThrough(new CsvParseStream()); + * ``` + * + * @param options Options for the stream. + */ constructor(options?: T) { this.#options = { ...defaultReadOptions, @@ -170,12 +192,54 @@ export class CsvParseStream< } } - /** The instance's {@linkcode ReadableStream}. */ + /** + * The instance's {@linkcode ReadableStream}. + * + * @example Usage + * ```ts no-assert + * import { CsvParseStream } from "@std/csv/csv-parse-stream"; + * + * const source = ReadableStream.from([ + * "name,age", + * "Alice,34", + * "Bob,24", + * "Charlie,45", + * ]); + * const parseStream = new CsvParseStream(); + * const parts = source.pipeTo(parseStream.writable); + * for await (const part of parseStream.readable) { + * console.log(part); + * } + * ``` + * + * @returns The instance's {@linkcode ReadableStream}. + */ get readable(): ReadableStream> { return this.#readable as ReadableStream>; } - /** The instance's {@linkcode WritableStream}. */ + /** + * The instance's {@linkcode WritableStream}. + * + * @example Usage + * ```ts no-assert + * import { CsvParseStream } from "@std/csv/csv-parse-stream"; + * + * const source = ReadableStream.from([ + * "name,age", + * "Alice,34", + * "Bob,24", + * "Charlie,45", + * ]); + * const parseStream = new CsvParseStream(); + * const parts = source.pipeTo(parseStream.writable); + * for await (const part of parseStream.readable) { + * console.log(part); + * } + * ``` + * + * @returns The instance's {@linkcode WritableStream}. + */ get writable(): WritableStream { return this.#lines.writable; } diff --git a/src/vendor/deno.land/std@0.217.0/csv/csv_stringify_stream.ts b/src/vendor/jsr.io/@std/csv/0.224.3/csv_stringify_stream.ts similarity index 64% rename from src/vendor/deno.land/std@0.217.0/csv/csv_stringify_stream.ts rename to src/vendor/jsr.io/@std/csv/0.224.3/csv_stringify_stream.ts index 90432b4c157..c327ee8af8d 100644 --- a/src/vendor/deno.land/std@0.217.0/csv/csv_stringify_stream.ts +++ b/src/vendor/jsr.io/@std/csv/0.224.3/csv_stringify_stream.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { stringify } from "./stringify.ts"; /** Options for {@linkcode CsvStringifyStream}. */ @@ -21,11 +22,13 @@ export interface CsvStringifyStreamOptions { /** * Convert each chunk to a CSV record. * - * @example - * ```ts - * import { CsvStringifyStream } from "https://deno.land/std@$STD_VERSION/csv/csv_stringify_stream.ts"; + * @example Usage + * ```ts no-assert + * import { CsvStringifyStream } from "@std/csv/csv-stringify-stream"; * - * const file = await Deno.open("data.csv", { create: true, write: true }); + * const path = await Deno.makeTempFile(); + * + * const file = await Deno.open(path, { create: true, write: true }); * const readable = ReadableStream.from([ * { id: 1, name: "one" }, * { id: 2, name: "two" }, @@ -36,7 +39,9 @@ export interface CsvStringifyStreamOptions { * .pipeThrough(new CsvStringifyStream({ columns: ["id", "name"] })) * .pipeThrough(new TextEncoderStream()) * .pipeTo(file.writable); - * ```` + * ``` + * + * @typeParam TOptions The type of options for the stream. */ export class CsvStringifyStream extends TransformStream< @@ -44,7 +49,30 @@ export class CsvStringifyStream : Array, string > { - /** Construct a new instance. */ + /** + * Construct a new instance. + * + * @example Usage + * ```ts no-assert + * import { CsvStringifyStream } from "@std/csv/csv-stringify-stream"; + * + * const path = await Deno.makeTempFile(); + * + * const file = await Deno.open(path, { create: true, write: true }); + * const readable = ReadableStream.from([ + * { id: 1, name: "one" }, + * { id: 2, name: "two" }, + * { id: 3, name: "three" }, + * ]); + * + * await readable + * .pipeThrough(new CsvStringifyStream({ columns: ["id", "name"] })) + * .pipeThrough(new TextEncoderStream()) + * .pipeTo(file.writable); + * ``` + * + * @param options Options for the stream. + */ constructor(options?: TOptions) { const { separator, diff --git a/src/vendor/deno.land/std@0.217.0/csv/mod.ts b/src/vendor/jsr.io/@std/csv/0.224.3/mod.ts similarity index 93% rename from src/vendor/deno.land/std@0.217.0/csv/mod.ts rename to src/vendor/jsr.io/@std/csv/0.224.3/mod.ts index a476f9ae19e..0541b020ed2 100644 --- a/src/vendor/deno.land/std@0.217.0/csv/mod.ts +++ b/src/vendor/jsr.io/@std/csv/0.224.3/mod.ts @@ -4,7 +4,7 @@ /** Reads and writes comma-separated values (CSV) files. * * There are many kinds of CSV files; this module supports the format described - * in {@link https://tools.ietf.org/html/rfc4180 | RFC 4180}. + * in {@link https://www.rfc-editor.org/rfc/rfc4180.html | RFC 4180}. * * A csv file contains zero or more records of one or more fields per record. * Each record is separated by the newline character. The final record may @@ -32,7 +32,7 @@ * * results in the fields * - * ```ts + * ```ts no-assert * [`normal string`, `quoted-field`] * ``` * @@ -55,7 +55,7 @@ * * results in * - * ```ts + * ```ts no-assert * [`Multi-line * field`, `comma is ,`] * ``` diff --git a/src/vendor/deno.land/std@0.217.0/csv/parse.ts b/src/vendor/jsr.io/@std/csv/0.224.3/parse.ts similarity index 90% rename from src/vendor/deno.land/std@0.217.0/csv/parse.ts rename to src/vendor/jsr.io/@std/csv/0.224.3/parse.ts index 539c9a9cbc2..ea6f6d89492 100644 --- a/src/vendor/deno.land/std@0.217.0/csv/parse.ts +++ b/src/vendor/jsr.io/@std/csv/0.224.3/parse.ts @@ -12,9 +12,13 @@ import { type ReadOptions, type RecordWithColumn, } from "./_io.ts"; -import { assert } from "../assert/assert.ts"; -export { ParseError, type ParseResult, ReadOptions, type RecordWithColumn }; +export { + ParseError, + type ParseResult, + type ReadOptions, + type RecordWithColumn, +}; const BYTE_ORDER_MARK = "\ufeff"; @@ -299,46 +303,39 @@ export interface ParseOptions extends ReadOptions { * Csv parse helper to manipulate data. * Provides an auto/custom mapper for columns. * - * @example + * @example Usage * ```ts - * import { parse } from "https://deno.land/std@$STD_VERSION/csv/parse.ts"; + * import { parse } from "@std/csv/parse"; + * import { assertEquals } from "@std/assert/assert-equals"; + * * const string = "a,b,c\nd,e,f"; * - * console.log( - * await parse(string, { - * skipFirstRow: false, - * }), - * ); - * // output: - * // [["a", "b", "c"], ["d", "e", "f"]] + * assertEquals(parse(string), [["a", "b", "c"], ["d", "e", "f"]]); * ``` * - * @param input Input to parse. - * @param opt options of the parser. - * @returns If you don't provide `opt.skipFirstRow` and `opt.columns`, it returns `string[][]`. - * If you provide `opt.skipFirstRow` or `opt.columns`, it returns `Record[]`. + * @param input The input to parse. + * @returns The parsed data. */ -export function parse(input: string, opt?: undefined): string[][]; +export function parse(input: string): string[][]; /** * Csv parse helper to manipulate data. * Provides an auto/custom mapper for columns. * - * @example + * @example Usage * ```ts - * import { parse } from "https://deno.land/std@$STD_VERSION/csv/parse.ts"; + * import { parse } from "@std/csv/parse"; + * import { assertEquals } from "@std/assert/assert-equals"; + * * const string = "a,b,c\nd,e,f"; * - * console.log( - * await parse(string, { - * skipFirstRow: false, - * }), - * ); - * // output: - * // [["a", "b", "c"], ["d", "e", "f"]] + * assertEquals(parse(string, { skipFirstRow: false }), [["a", "b", "c"], ["d", "e", "f"]]); + * assertEquals(parse(string, { skipFirstRow: true }), [{ a: "d", b: "e", c: "f" }]); + * assertEquals(parse(string, { columns: ["x", "y", "z"] }), [{ x: "a", y: "b", z: "c" }, { x: "d", y: "e", z: "f" }]); * ``` * - * @param input Input to parse. - * @param opt options of the parser. + * @typeParam T The options' type for parsing. + * @param input The input to parse. + * @param opt The options for parsing. * @returns If you don't provide `opt.skipFirstRow` and `opt.columns`, it returns `string[][]`. * If you provide `opt.skipFirstRow` or `opt.columns`, it returns `Record[]`. */ @@ -358,7 +355,7 @@ export function parse( if (opt.skipFirstRow) { const head = r.shift(); - assert(head !== undefined); + if (head === undefined) throw new TypeError("Headers must be defined"); headers = head; } diff --git a/src/vendor/deno.land/std@0.217.0/csv/stringify.ts b/src/vendor/jsr.io/@std/csv/0.224.3/stringify.ts similarity index 88% rename from src/vendor/deno.land/std@0.217.0/csv/stringify.ts rename to src/vendor/jsr.io/@std/csv/0.224.3/stringify.ts index 310e474f508..10a9703e9e5 100644 --- a/src/vendor/deno.land/std@0.217.0/csv/stringify.ts +++ b/src/vendor/jsr.io/@std/csv/0.224.3/stringify.ts @@ -147,8 +147,8 @@ type NormalizedColumn = Omit & { }; function normalizeColumn(column: Column): NormalizedColumn { - let header: NormalizedColumn["header"], - prop: NormalizedColumn["prop"]; + let header: NormalizedColumn["header"]; + let prop: NormalizedColumn["prop"]; if (typeof column === "object") { if (Array.isArray(column)) { @@ -168,9 +168,35 @@ function normalizeColumn(column: Column): NormalizedColumn { return { header, prop }; } -/** Error thrown in {@linkcode stringify}. */ +/** + * Error thrown in {@linkcode stringify}. + * + * @example Usage + * ```ts no-assert + * import { stringify, StringifyError } from "@std/csv/stringify"; + * + * try { + * stringify([{ a: 1 }, { a: 2 }], { separator: "\r\n" }); + * } catch (error) { + * if (error instanceof StringifyError) { + * console.error(error.message); + * } + * } + * ``` + */ export class StringifyError extends Error { - /** Construct a new instance. */ + /** + * Construct a new instance. + * + * @example Usage + * ```ts no-eval + * import { StringifyError } from "@std/csv/stringify"; + * + * throw new StringifyError("An error occurred"); + * ``` + * + * @param message The error message. + */ constructor(message?: string) { super(message); this.name = "StringifyError"; @@ -222,29 +248,15 @@ function getValuesFromItem( } /** - * Write data using CSV encoding. - * - * @param data The source data to stringify. It's an array of items which are - * plain objects or arrays. - * - * `DataItem: Record | unknown[]` + * Converts an array of objects into a CSV string. * - * ```ts - * const data = [ - * { - * name: "Deno", - * repo: { org: "denoland", name: "deno" }, - * runsOn: ["Rust", "TypeScript"], - * }, - * ]; - * ``` - * - * @example + * @example Usage * ```ts * import { * Column, * stringify, - * } from "https://deno.land/std@$STD_VERSION/csv/stringify.ts"; + * } from "@std/csv/stringify"; + * import { assertEquals } from "@std/assert/assert-equals"; * * type Character = { * age: number; @@ -276,11 +288,12 @@ function getValuesFromItem( * "age", * ]; * - * console.log(stringify(data, { columns })); - * // first,age - * // Rick,70 - * // Morty,14 + * assertEquals(stringify(data, { columns }), `first,age\r\nRick,70\r\nMorty,14\r\n`); * ``` + * + * @param data The source data to stringify. It's an array of items which are + * plain objects or arrays. + * @returns A CSV string. */ export function stringify( data: DataItem[], @@ -303,7 +316,7 @@ export function stringify( output += BYTE_ORDER_MARK; } - if (headers) { + if (headers && normalizedColumns.length > 0) { output += normalizedColumns .map((column) => getEscapedString(column.header, sep)) .join(sep); diff --git a/src/vendor/deno.land/std@0.217.0/datetime/_common.ts b/src/vendor/jsr.io/@std/datetime/0.224.5/_date_time_formatter.ts similarity index 70% rename from src/vendor/deno.land/std@0.217.0/datetime/_common.ts rename to src/vendor/jsr.io/@std/datetime/0.224.5/_date_time_formatter.ts index 12d011f2c32..8566855fdfc 100644 --- a/src/vendor/deno.land/std@0.217.0/datetime/_common.ts +++ b/src/vendor/jsr.io/@std/datetime/0.224.5/_date_time_formatter.ts @@ -1,81 +1,6 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -export type Token = { - type: string; - value: string | number; - index: number; - [key: string]: unknown; -}; - -export interface ReceiverResult { - [name: string]: string | number | unknown; -} -export type CallbackResult = { - type: string; - value: string | number; - [key: string]: unknown; -}; -type CallbackFunction = (value: unknown) => CallbackResult; - -export type TestResult = { value: unknown; length: number } | undefined; -export type TestFunction = ( - string: string, -) => TestResult | undefined; - -export interface Rule { - test: TestFunction; - fn: CallbackFunction; -} - -export class Tokenizer { - rules: Rule[]; - - constructor(rules: Rule[] = []) { - this.rules = rules; - } - - addRule(test: TestFunction, fn: CallbackFunction): Tokenizer { - this.rules.push({ test, fn }); - return this; - } - - tokenize( - string: string, - receiver = (token: Token): ReceiverResult => token, - ): ReceiverResult[] { - function* generator(rules: Rule[]): IterableIterator { - let index = 0; - for (const rule of rules) { - const result = rule.test(string); - if (result) { - const { value, length } = result; - index += length; - string = string.slice(length); - const token = { ...rule.fn(value), index }; - yield receiver(token); - yield* generator(rules); - } - } - } - const tokenGenerator = generator(this.rules); - - const tokens: ReceiverResult[] = []; - - for (const token of tokenGenerator) { - tokens.push(token); - } - - if (string.length) { - throw new Error( - `parser error: string not fully parsed! ${string.slice(0, 25)}`, - ); - } - - return tokens; - } -} - function digits(value: string | number, count = 2): string { return String(value).padStart(count, "0"); } @@ -106,128 +31,6 @@ interface Options { timeZone?: TimeZone; } -function createLiteralTestFunction(value: string): TestFunction { - return (string: string): TestResult => { - return string.startsWith(value) - ? { value, length: value.length } - : undefined; - }; -} - -function createMatchTestFunction(match: RegExp): TestFunction { - return (string: string): TestResult => { - const result = match.exec(string); - if (result) return { value: result, length: result[0].length }; - }; -} - -// according to unicode symbols (http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table) -const defaultRules = [ - { - test: createLiteralTestFunction("yyyy"), - fn: (): CallbackResult => ({ type: "year", value: "numeric" }), - }, - { - test: createLiteralTestFunction("yy"), - fn: (): CallbackResult => ({ type: "year", value: "2-digit" }), - }, - - { - test: createLiteralTestFunction("MM"), - fn: (): CallbackResult => ({ type: "month", value: "2-digit" }), - }, - { - test: createLiteralTestFunction("M"), - fn: (): CallbackResult => ({ type: "month", value: "numeric" }), - }, - { - test: createLiteralTestFunction("dd"), - fn: (): CallbackResult => ({ type: "day", value: "2-digit" }), - }, - { - test: createLiteralTestFunction("d"), - fn: (): CallbackResult => ({ type: "day", value: "numeric" }), - }, - - { - test: createLiteralTestFunction("HH"), - fn: (): CallbackResult => ({ type: "hour", value: "2-digit" }), - }, - { - test: createLiteralTestFunction("H"), - fn: (): CallbackResult => ({ type: "hour", value: "numeric" }), - }, - { - test: createLiteralTestFunction("hh"), - fn: (): CallbackResult => ({ - type: "hour", - value: "2-digit", - hour12: true, - }), - }, - { - test: createLiteralTestFunction("h"), - fn: (): CallbackResult => ({ - type: "hour", - value: "numeric", - hour12: true, - }), - }, - { - test: createLiteralTestFunction("mm"), - fn: (): CallbackResult => ({ type: "minute", value: "2-digit" }), - }, - { - test: createLiteralTestFunction("m"), - fn: (): CallbackResult => ({ type: "minute", value: "numeric" }), - }, - { - test: createLiteralTestFunction("ss"), - fn: (): CallbackResult => ({ type: "second", value: "2-digit" }), - }, - { - test: createLiteralTestFunction("s"), - fn: (): CallbackResult => ({ type: "second", value: "numeric" }), - }, - { - test: createLiteralTestFunction("SSS"), - fn: (): CallbackResult => ({ type: "fractionalSecond", value: 3 }), - }, - { - test: createLiteralTestFunction("SS"), - fn: (): CallbackResult => ({ type: "fractionalSecond", value: 2 }), - }, - { - test: createLiteralTestFunction("S"), - fn: (): CallbackResult => ({ type: "fractionalSecond", value: 1 }), - }, - - { - test: createLiteralTestFunction("a"), - fn: (value: unknown): CallbackResult => ({ - type: "dayPeriod", - value: value as string, - }), - }, - - // quoted literal - { - test: createMatchTestFunction(/^(')(?\\.|[^\']*)\1/), - fn: (match: unknown): CallbackResult => ({ - type: "literal", - value: (match as RegExpExecArray).groups!.value as string, - }), - }, - // literal - { - test: createMatchTestFunction(/^.+?\s*/), - fn: (match: unknown): CallbackResult => ({ - type: "literal", - value: (match as RegExpExecArray)[0], - }), - }, -]; - type FormatPart = { type: DateTimeFormatPartTypes; value: string | number; @@ -235,22 +38,114 @@ type FormatPart = { }; type Format = FormatPart[]; +const QUOTED_LITERAL_REGEXP = /^(')(?\\.|[^\']*)\1/; +const LITERAL_REGEXP = /^(?.+?\s*)/; +const SYMBOL_REGEXP = /^(?([a-zA-Z])\2*)/; + +// according to unicode symbols (http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table) +function formatToParts(format: string) { + const tokens: Format = []; + let index = 0; + while (index < format.length) { + const substring = format.slice(index); + const symbol = SYMBOL_REGEXP.exec(substring)?.groups?.symbol; + switch (symbol) { + case "yyyy": + tokens.push({ type: "year", value: "numeric" }); + index += symbol.length; + continue; + case "yy": + tokens.push({ type: "year", value: "2-digit" }); + index += symbol.length; + continue; + case "MM": + tokens.push({ type: "month", value: "2-digit" }); + index += symbol.length; + continue; + case "M": + tokens.push({ type: "month", value: "numeric" }); + index += symbol.length; + continue; + case "dd": + tokens.push({ type: "day", value: "2-digit" }); + index += symbol.length; + continue; + case "d": + tokens.push({ type: "day", value: "numeric" }); + index += symbol.length; + continue; + case "HH": + tokens.push({ type: "hour", value: "2-digit" }); + index += symbol.length; + continue; + case "H": + tokens.push({ type: "hour", value: "numeric" }); + index += symbol.length; + continue; + case "hh": + tokens.push({ type: "hour", value: "2-digit", hour12: true }); + index += symbol.length; + continue; + case "h": + tokens.push({ type: "hour", value: "numeric", hour12: true }); + index += symbol.length; + continue; + case "mm": + tokens.push({ type: "minute", value: "2-digit" }); + index += symbol.length; + continue; + case "m": + tokens.push({ type: "minute", value: "numeric" }); + index += symbol.length; + continue; + case "ss": + tokens.push({ type: "second", value: "2-digit" }); + index += symbol.length; + continue; + case "s": + tokens.push({ type: "second", value: "numeric" }); + index += symbol.length; + continue; + case "SSS": + tokens.push({ type: "fractionalSecond", value: 3 }); + index += symbol.length; + continue; + case "SS": + tokens.push({ type: "fractionalSecond", value: 2 }); + index += symbol.length; + continue; + case "S": + tokens.push({ type: "fractionalSecond", value: 1 }); + index += symbol.length; + continue; + case "a": + tokens.push({ type: "dayPeriod", value: 1 }); + index += symbol.length; + continue; + } + + const quotedLiteralMatch = QUOTED_LITERAL_REGEXP.exec(substring); + if (quotedLiteralMatch) { + const value = quotedLiteralMatch.groups!.value as string; + tokens.push({ type: "literal", value }); + index += quotedLiteralMatch[0].length; + continue; + } + + const literalGroups = LITERAL_REGEXP.exec(substring)!.groups!; + const value = literalGroups.value as string; + tokens.push({ type: "literal", value }); + index += value.length; + } + + return tokens; +} + export class DateTimeFormatter { #format: Format; - constructor(formatString: string, rules: Rule[] = defaultRules) { - const tokenizer = new Tokenizer(rules); - this.#format = tokenizer.tokenize( - formatString, - ({ type, value, hour12 }) => { - const result = { - type, - value, - } as unknown as ReceiverResult; - if (hour12) result.hour12 = hour12 as boolean; - return result; - }, - ) as Format; + constructor(formatString: string) { + this.#format = formatToParts(formatString); } format(date: Date, options: Options = {}): string { @@ -387,7 +282,7 @@ export class DateTimeFormatter { break; } case "dayPeriod": { - string += token.value ? (date.getHours() >= 12 ? "PM" : "AM") : ""; + string += date.getHours() >= 12 ? "PM" : "AM"; break; } case "literal": { @@ -421,6 +316,10 @@ export class DateTimeFormatter { value = /^\d{1,2}/.exec(string)?.[0] as string; break; } + default: + throw Error( + `ParserError: value "${token.value}" is not supported`, + ); } break; } diff --git a/src/vendor/deno.land/std@0.217.0/datetime/constants.ts b/src/vendor/jsr.io/@std/datetime/0.224.5/constants.ts similarity index 51% rename from src/vendor/deno.land/std@0.217.0/datetime/constants.ts rename to src/vendor/jsr.io/@std/datetime/0.224.5/constants.ts index 7a30b370eae..3a0068b4dad 100644 --- a/src/vendor/deno.land/std@0.217.0/datetime/constants.ts +++ b/src/vendor/jsr.io/@std/datetime/0.224.5/constants.ts @@ -6,9 +6,9 @@ * * @example * ```ts - * import { SECOND } from "https://deno.land/std@$STD_VERSION/datetime/constants.ts"; + * import { SECOND } from "@std/datetime/constants"; * - * console.log(SECOND); // => 1000 + * SECOND; // 1_000 * ``` */ export const SECOND = 1e3; @@ -17,9 +17,9 @@ export const SECOND = 1e3; * * @example * ```ts - * import { MINUTE } from "https://deno.land/std@$STD_VERSION/datetime/constants.ts"; + * import { MINUTE } from "@std/datetime/constants"; * - * console.log(MINUTE); // => 60000 (60 * 1000) + * MINUTE; // 60_000 * ``` */ export const MINUTE: number = SECOND * 60; @@ -28,9 +28,9 @@ export const MINUTE: number = SECOND * 60; * * @example * ```ts - * import { HOUR } from "https://deno.land/std@$STD_VERSION/datetime/constants.ts"; + * import { HOUR } from "@std/datetime/constants"; * - * console.log(HOUR); // => 3600000 (60 * 60 * 1000) + * HOUR; // 3_600_000 * ``` */ export const HOUR: number = MINUTE * 60; @@ -39,9 +39,9 @@ export const HOUR: number = MINUTE * 60; * * @example * ```ts - * import { DAY } from "https://deno.land/std@$STD_VERSION/datetime/constants.ts"; + * import { DAY } from "@std/datetime/constants"; * - * console.log(DAY); // => 86400000 (24 * 60 * 60 * 1000) + * DAY; // 86_400_000 * ``` */ export const DAY: number = HOUR * 24; @@ -50,9 +50,9 @@ export const DAY: number = HOUR * 24; * * @example * ```ts - * import { WEEK } from "https://deno.land/std@$STD_VERSION/datetime/constants.ts"; + * import { WEEK } from "@std/datetime/constants"; * - * console.log(WEEK); // => 604800000 (7 * 24 * 60 * 60 * 1000) + * WEEK; // 604_800_000 * ``` */ export const WEEK: number = DAY * 7; diff --git a/src/vendor/deno.land/std@0.217.0/datetime/day_of_year.ts b/src/vendor/jsr.io/@std/datetime/0.224.5/day_of_year.ts similarity index 68% rename from src/vendor/deno.land/std@0.217.0/datetime/day_of_year.ts rename to src/vendor/jsr.io/@std/datetime/0.224.5/day_of_year.ts index 3145ce92936..477a5e715c9 100644 --- a/src/vendor/deno.land/std@0.217.0/datetime/day_of_year.ts +++ b/src/vendor/jsr.io/@std/datetime/0.224.5/day_of_year.ts @@ -6,14 +6,16 @@ import { DAY } from "./constants.ts"; /** * Returns the number of the day in the year in the local time zone. * - * @example + * @param date Date to get the day of the year of. + * @return Number of the day in the year in the local time zone. + * + * @example Basic usage * ```ts - * import { dayOfYear } from "https://deno.land/std@$STD_VERSION/datetime/mod.ts"; + * import { dayOfYear } from "@std/datetime/day-of-year"; + * import { assertEquals } from "@std/assert"; * - * dayOfYear(new Date("2019-03-11T03:24:00")); // output: 70 + * assertEquals(dayOfYear(new Date("2019-03-11T03:24:00")), 70); * ``` - * - * @return Number of the day in the year in the local time zone */ export function dayOfYear(date: Date): number { // Values from 0 to 99 map to the years 1900 to 1999. All other values are the actual year. (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date) @@ -31,14 +33,16 @@ export function dayOfYear(date: Date): number { /** * Returns the number of the day in the year in UTC time. * - * @example + * @param date Date to get the day of the year of. + * @return Number of the day in the year in UTC time. + * + * @example Usage * ```ts - * import { dayOfYearUtc } from "https://deno.land/std@$STD_VERSION/datetime/mod.ts"; + * import { dayOfYearUtc } from "@std/datetime/day-of-year"; + * import { assertEquals } from "@std/assert"; * - * dayOfYearUtc(new Date("2019-03-11T03:24:00.000Z")) // output 70 + * assertEquals(dayOfYearUtc(new Date("2019-03-11T03:24:00.000Z")), 70); * ``` - * - * @return Number of the day in the year in UTC time */ export function dayOfYearUtc(date: Date): number { // Values from 0 to 99 map to the years 1900 to 1999. All other values are the actual year. (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date) diff --git a/src/vendor/deno.land/std@0.217.0/datetime/difference.ts b/src/vendor/jsr.io/@std/datetime/0.224.5/difference.ts similarity index 68% rename from src/vendor/deno.land/std@0.217.0/datetime/difference.ts rename to src/vendor/jsr.io/@std/datetime/0.224.5/difference.ts index c18dd205ea7..6f1366068c5 100644 --- a/src/vendor/deno.land/std@0.217.0/datetime/difference.ts +++ b/src/vendor/jsr.io/@std/datetime/0.224.5/difference.ts @@ -23,6 +23,9 @@ export type DifferenceFormat = Partial>; /** Options for {@linkcode difference}. */ export type DifferenceOptions = { + /** + * Units to calculate difference in. Defaults to all units. + */ units?: Unit[]; }; @@ -36,36 +39,54 @@ function calculateMonthsDifference(from: Date, to: Date): number { } /** - * Returns the difference of the 2 given dates in the given units. If the units + * Calculates the difference of the 2 given dates in various units. If the units * are omitted, it returns the difference in the all available units. * - * @example + * @param from Year to calculate difference from. + * @param to Year to calculate difference to. + * @param options Options such as units to calculate difference in. + * @returns The difference of the 2 given dates in various units. + * + * @example Basic usage * ```ts - * import { difference } from "https://deno.land/std@$STD_VERSION/datetime/difference.ts"; + * import { difference } from "@std/datetime/difference"; + * import { assertEquals } from "@std/assert"; * * const date0 = new Date("2018-05-14"); * const date1 = new Date("2020-05-13"); * - * difference(date0, date1, { units: ["days", "months", "years"] }); - * // => returns { days: 730, months: 23, years: 1 } - * - * difference(date0, date1); - * // => returns { - * // milliseconds: 63072000000, - * // seconds: 63072000, - * // minutes: 1051200, - * // hours: 17520, - * // days: 730, - * // weeks: 104, - * // months: 23, - * // quarters: 7, - * // years: 1 - * // } + * assertEquals(difference(date0, date1), { + * milliseconds: 63072000000, + * seconds: 63072000, + * minutes: 1051200, + * hours: 17520, + * days: 730, + * weeks: 104, + * months: 23, + * quarters: 7, + * years: 1 + * }); * ``` * - * @param from Year to calculate difference - * @param to Year to calculate difference with - * @param options Options for determining how to respond + * @example Calculate difference in specific units + * + * The `units` option defines which units to calculate the difference in. + * + * ```ts + * import { difference } from "@std/datetime/difference"; + * import { assertEquals } from "@std/assert"; + * + * const date0 = new Date("2018-05-14"); + * const date1 = new Date("2020-05-13"); + * + * const result = difference(date0, date1, { units: ["days", "months", "years"] }); + * + * assertEquals(result, { + * days: 730, + * months: 23, + * years: 1 + * }); + * ``` */ export function difference( from: Date, diff --git a/src/vendor/jsr.io/@std/datetime/0.224.5/format.ts b/src/vendor/jsr.io/@std/datetime/0.224.5/format.ts new file mode 100644 index 00000000000..39a0c761905 --- /dev/null +++ b/src/vendor/jsr.io/@std/datetime/0.224.5/format.ts @@ -0,0 +1,85 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { DateTimeFormatter } from "./_date_time_formatter.ts"; + +/** Options for {@linkcode format}. */ +export interface FormatOptions { + /** + * Whether returns the formatted date in UTC instead of local time. + * + * @default {false} + */ + utc?: boolean; +} + +/** + * Formats a date to a string with the specified format. + * + * The following symbols from + * {@link https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table | unicode LDML} + * are supported: + * - `yyyy` - numeric year + * - `yy` - 2-digit year + * - `M` - numeric month + * - `MM` - 2-digit month + * - `d` - numeric day + * - `dd` - 2-digit day + * - `H` - numeric hour (0-23 hours) + * - `HH` - 2-digit hour (00-23 hours) + * - `h` - numeric hour (1-12 hours) + * - `hh` - 2-digit hour (01-12 hours) + * - `m` - numeric minute + * - `mm` - 2-digit minute + * - `s` - numeric second + * - `ss` - 2-digit second + * - `S` - 1-digit fractional second + * - `SS` - 2-digit fractional second + * - `SSS` - 3-digit fractional second + * - `a` - dayPeriod, either `AM` or `PM` + * - `'foo'` - quoted literal + * - `./-` - unquoted literal + * + * @param date The date to be formatted. + * @param formatString The date time string format. + * @param options The options to customize the formatting of the date. + * @return The formatted date string. + * + * @example Basic usage + * ```ts no-eval + * import { format } from "@std/datetime/format"; + * import { assertEquals } from "@std/assert"; + * + * const date = new Date(2019, 0, 20, 16, 34, 23, 123); + * + * assertEquals(format(date, "dd-MM-yyyy"), "20-01-2019"); + * + * assertEquals(format(date, "MM-dd-yyyy HH:mm:ss.SSS"), "01-20-2019 16:34:23.123"); + * + * assertEquals(format(date, "'today:' yyyy-MM-dd"), "today: 2019-01-20"); + * ``` + * + * @example UTC formatting + * + * Enable UTC formatting by setting the `utc` option to `true`. + * + * ```ts no-eval + * import { format } from "@std/datetime/format"; + * import { assertEquals } from "@std/assert"; + * + * const date = new Date(2019, 0, 20, 16, 34, 23, 123); + * + * assertEquals(format(date, "yyyy-MM-dd HH:mm:ss", { utc: true }), "2019-01-20 05:34:23"); + * ``` + */ +export function format( + date: Date, + formatString: string, + options: FormatOptions = {}, +): string { + const formatter = new DateTimeFormatter(formatString); + return formatter.format( + date, + options.utc ? { timeZone: "UTC" } : undefined, + ); +} diff --git a/src/vendor/jsr.io/@std/datetime/0.224.5/is_leap.ts b/src/vendor/jsr.io/@std/datetime/0.224.5/is_leap.ts new file mode 100644 index 00000000000..e676269f9bd --- /dev/null +++ b/src/vendor/jsr.io/@std/datetime/0.224.5/is_leap.ts @@ -0,0 +1,80 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +function isYearNumberALeapYear(yearNumber: number): boolean { + return ( + (yearNumber % 4 === 0 && yearNumber % 100 !== 0) || yearNumber % 400 === 0 + ); +} + +/** + * Returns whether the given year is a leap year. Passing in a + * {@linkcode Date} object will return the leap year status of the year of that + * object and take the current timezone into account. Passing in a number will + * return the leap year status of that number. + * + * This is based on + * {@link https://docs.microsoft.com/en-us/office/troubleshoot/excel/determine-a-leap-year}. + * + * @param year The year in number or `Date` format. + * @returns `true` if the given year is a leap year; `false` otherwise. + * + * @example Basic usage + * ```ts + * import { isLeap } from "@std/datetime/is-leap"; + * import { assertEquals } from "@std/assert"; + * + * assertEquals(isLeap(new Date("1970-01-02")), false); + * + * assertEquals(isLeap(1970), false); + * + * assertEquals(isLeap(new Date("1972-01-02")), true); + * + * assertEquals(isLeap(1972), true); + * ``` + * + * @example Accounting for timezones + * ```ts no-assert + * import { isLeap } from "@std/datetime/is-leap"; + * + * // True if the local timezone is GMT+0; false if the local timezone is GMT-1 + * isLeap(new Date("2000-01-01")); + * + * // True regardless of the local timezone + * isLeap(2000); + * + * ``` + */ +export function isLeap(year: Date | number): boolean { + const yearNumber = year instanceof Date ? year.getFullYear() : year; + return isYearNumberALeapYear(yearNumber); +} + +/** + * Returns whether the given year is a leap year in UTC time. This always + * returns the same value regardless of the local timezone. + + * This is based on + * {@link https://docs.microsoft.com/en-us/office/troubleshoot/excel/determine-a-leap-year}. + * + * @param year The year in number or `Date` format. + * @returns `true` if the given year is a leap year; `false` otherwise. + * + * @example Basic usage + * ```ts + * import { isUtcLeap } from "@std/datetime/is-leap"; + * import { assertEquals } from "@std/assert"; + * + * assertEquals(isUtcLeap(new Date("2000-01-01")), true); + * + * assertEquals(isUtcLeap(new Date("December 31, 1999 23:59:59 GMT-01:00")), true); + * + * assertEquals(isUtcLeap(2000), true); + * + * assertEquals(isUtcLeap(1999), false); + * ``` + */ +export function isUtcLeap(year: Date | number): boolean { + const yearNumber = year instanceof Date ? year.getUTCFullYear() : year; + return isYearNumberALeapYear(yearNumber); +} diff --git a/src/vendor/deno.land/std@0.217.0/datetime/mod.ts b/src/vendor/jsr.io/@std/datetime/0.224.5/mod.ts similarity index 52% rename from src/vendor/deno.land/std@0.217.0/datetime/mod.ts rename to src/vendor/jsr.io/@std/datetime/0.224.5/mod.ts index f9da0fcaa29..342fd428c0f 100644 --- a/src/vendor/deno.land/std@0.217.0/datetime/mod.ts +++ b/src/vendor/jsr.io/@std/datetime/0.224.5/mod.ts @@ -4,11 +4,20 @@ /** * Utilities for dealing with {@linkcode Date} objects. * - * This module is browser compatible. + * ```ts + * import { dayOfYear, isLeap, difference } from "@std/datetime"; + * import { assertEquals } from "@std/assert"; + * + * assertEquals(dayOfYear(new Date("2019-03-11T03:24:00")), 70); + * assertEquals(isLeap(1970), false); + * + * const date0 = new Date("2018-05-14"); + * const date1 = new Date("2020-05-13"); + * assertEquals(difference(date0, date1).years, 1); + * ``` * * @module */ - export * from "./constants.ts"; export * from "./day_of_year.ts"; export * from "./difference.ts"; diff --git a/src/vendor/jsr.io/@std/datetime/0.224.5/parse.ts b/src/vendor/jsr.io/@std/datetime/0.224.5/parse.ts new file mode 100644 index 00000000000..71002563923 --- /dev/null +++ b/src/vendor/jsr.io/@std/datetime/0.224.5/parse.ts @@ -0,0 +1,52 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { DateTimeFormatter } from "./_date_time_formatter.ts"; + +/** + * Parses a date string using the specified format string. + * + * The following symbols from + * {@link https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table | unicode LDML} + * are supported: + * - `yyyy` - numeric year + * - `yy` - 2-digit year + * - `M` - numeric month + * - `MM` - 2-digit month + * - `d` - numeric day + * - `dd` - 2-digit day + * - `H` - numeric hour (0-23 hours) + * - `HH` - 2-digit hour (00-23 hours) + * - `h` - numeric hour (1-12 hours) + * - `hh` - 2-digit hour (01-12 hours) + * - `m` - numeric minute + * - `mm` - 2-digit minute + * - `s` - numeric second + * - `ss` - 2-digit second + * - `S` - 1-digit fractional second + * - `SS` - 2-digit fractional second + * - `SSS` - 3-digit fractional second + * - `a` - dayPeriod, either `AM` or `PM` + * - `'foo'` - quoted literal + * - `./-` - unquoted literal + * + * @param dateString The date string to parse. + * @param formatString The date time string format. + * @return The parsed date. + * + * @example Basic usage + * ```ts + * import { parse } from "@std/datetime/parse"; + * import { assertEquals } from "@std/assert"; + * + * assertEquals(parse("01-03-2019 16:30", "MM-dd-yyyy HH:mm"), new Date(2019, 0, 3, 16, 30)); + * + * assertEquals(parse("01-03-2019 16:33:23.123", "MM-dd-yyyy HH:mm:ss.SSS"), new Date(2019, 0, 3, 16, 33, 23, 123)); + * ``` + */ +export function parse(dateString: string, formatString: string): Date { + const formatter = new DateTimeFormatter(formatString); + const parts = formatter.parseToParts(dateString); + const sortParts = formatter.sortDateTimeFormatPart(parts); + return formatter.partsToDate(sortParts); +} diff --git a/src/vendor/deno.land/std@0.217.0/datetime/week_of_year.ts b/src/vendor/jsr.io/@std/datetime/0.224.5/week_of_year.ts similarity index 72% rename from src/vendor/deno.land/std@0.217.0/datetime/week_of_year.ts rename to src/vendor/jsr.io/@std/datetime/0.224.5/week_of_year.ts index e07ec701c16..d60fd74aa57 100644 --- a/src/vendor/deno.land/std@0.217.0/datetime/week_of_year.ts +++ b/src/vendor/jsr.io/@std/datetime/0.224.5/week_of_year.ts @@ -18,14 +18,18 @@ const Day = { /** * Returns the ISO week number of the provided date (1-53). * - * @example + * @param date Date to get the week number of. + * @returns The week number of the provided date. + * + * @example Basic usage * ```ts - * import { weekOfYear } from "https://deno.land/std@$STD_VERSION/datetime/week_of_year.ts"; + * import { weekOfYear } from "@std/datetime/week-of-year"; + * import { assertEquals } from "@std/assert"; * - * weekOfYear(new Date("2020-12-28T03:24:00")); // Returns 53 - * ``` + * assertEquals(weekOfYear(new Date("2020-12-28T03:24:00")), 53); * - * @return Number of the week in year + * assertEquals(weekOfYear(new Date("2020-07-10T03:24:00")), 28); + * ``` */ export function weekOfYear(date: Date): number { const workingDate = new Date( diff --git a/src/vendor/deno.land/std@0.217.0/dotenv/mod.ts b/src/vendor/jsr.io/@std/dotenv/0.224.2/mod.ts similarity index 82% rename from src/vendor/deno.land/std@0.217.0/dotenv/mod.ts rename to src/vendor/jsr.io/@std/dotenv/0.224.2/mod.ts index 417e909d0a6..cbec544ba4d 100644 --- a/src/vendor/deno.land/std@0.217.0/dotenv/mod.ts +++ b/src/vendor/jsr.io/@std/dotenv/0.224.2/mod.ts @@ -4,6 +4,19 @@ * Parses and loads environment variables from a `.env` file into the current * process, or stringify data into a `.env` file format. * + * ```ts no-eval + * // Automatically load environment variables from a `.env` file + * import "@std/dotenv/load"; + * ``` + * + * ```ts + * import { parse, stringify } from "@std/dotenv"; + * import { assertEquals } from "@std/assert"; + * + * assertEquals(parse("GREETING=hello world"), { GREETING: "hello world" }); + * assertEquals(stringify({ GREETING: "hello world" }), "GREETING='hello world'"); + * ``` + * * @module */ @@ -62,16 +75,29 @@ export interface LoadOptions { defaultsPath?: string | null; } -/** Works identically to {@linkcode load}, but synchronously. */ +/** + * Works identically to {@linkcode load}, but synchronously. + * + * @example Usage + * ```ts no-eval + * import { loadSync } from "@std/dotenv"; + * + * const conf = loadSync(); + * ``` + * + * @param options Options for loading the environment variables. + * @returns The parsed environment variables. + */ export function loadSync( - { + options: LoadOptions = {}, +): Record { + const { envPath = ".env", examplePath = ".env.example", defaultsPath = ".env.defaults", export: _export = false, allowEmptyValues = false, - }: LoadOptions = {}, -): Record { + } = options; const conf = envPath ? parseFileSync(envPath) : {}; if (defaultsPath) { @@ -114,11 +140,12 @@ export function loadSync( * * Then import the environment variables using the `load` function. * - * ```ts + * @example Basic usage + * ```ts no-eval * // app.ts - * import { load } from "https://deno.land/std@$STD_VERSION/dotenv/mod.ts"; + * import { load } from "@std/dotenv"; * - * console.log(await load({export: true})); // { GREETING: "hello world" } + * console.log(await load({ export: true })); // { GREETING: "hello world" } * console.log(Deno.env.get("GREETING")); // hello world * ``` * @@ -131,9 +158,10 @@ export function loadSync( * Import the `load.ts` module to auto-import from the `.env` file and into * the process environment. * - * ```ts + * @example Auto-loading + * ```ts no-eval * // app.ts - * import "https://deno.land/std@$STD_VERSION/dotenv/load.ts"; + * import "@std/dotenv/load"; * * console.log(Deno.env.get("GREETING")); // hello world * ``` @@ -209,15 +237,17 @@ export function loadSync( * |allowEmptyValues|false|Allows empty values for specified env variables (throws otherwise) * * ### Example configuration - * ```ts - * import { load } from "https://deno.land/std@$STD_VERSION/dotenv/mod.ts"; + * + * @example Using with options + * ```ts no-eval + * import { load } from "@std/dotenv"; * * const conf = await load({ - * envPath: "./.env_prod", - * examplePath: "./.env_required", - * export: true, - * allowEmptyValues: true, - * }); + * envPath: "./.env_prod", // Uses .env_prod instead of .env + * examplePath: "./.env_required", // Uses .env_required instead of .env.example + * export: true, // Exports all variables to the environment + * allowEmptyValues: true, // Allows empty values for specified env variables + * }); * ``` * * ## Permissions @@ -269,16 +299,20 @@ export function loadSync( * `{ KEY: "default" }`. Also there is possible to do this case * `KEY=${NO_SUCH_KEY:-${EXISTING_KEY:-default}}` which becomes * `{ KEY: "" }`) + * + * @param options The options + * @returns The parsed environment variables */ export async function load( - { + options: LoadOptions = {}, +): Promise> { + const { envPath = ".env", examplePath = ".env.example", defaultsPath = ".env.defaults", export: _export = false, allowEmptyValues = false, - }: LoadOptions = {}, -): Promise> { + } = options; const conf = envPath ? await parseFile(envPath) : {}; if (defaultsPath) { @@ -370,11 +404,57 @@ function assertSafe( /** * Error thrown in {@linkcode load} and {@linkcode loadSync} when required * environment variables are missing. + * + * @example Usage + * ```ts no-eval + * import { MissingEnvVarsError, load } from "@std/dotenv"; + * + * try { + * await load(); + * } catch (e) { + * if (e instanceof MissingEnvVarsError) { + * console.error(e.message); + * } + * } + * ``` */ export class MissingEnvVarsError extends Error { - /** The keys of the missing environment variables. */ + /** + * The keys of the missing environment variables. + * + * @example Usage + * ```ts no-eval + * import { MissingEnvVarsError, load } from "@std/dotenv"; + * + * try { + * await load(); + * } catch (e) { + * if (e instanceof MissingEnvVarsError) { + * console.error(e.missing); + * } + * } + * ``` + */ missing: string[]; - /** Constructs a new instance. */ + /** + * Constructs a new instance. + * + * @example Usage + * ```ts no-eval + * import { MissingEnvVarsError, load } from "@std/dotenv"; + * + * try { + * await load(); + * } catch (e) { + * if (e instanceof MissingEnvVarsError) { + * console.error(e.message); + * } + * } + * ``` + * + * @param message The error message + * @param missing The keys of the missing environment variables + */ constructor(message: string, missing: string[]) { super(message); this.name = "MissingEnvVarsError"; diff --git a/src/vendor/deno.land/std@0.217.0/dotenv/parse.ts b/src/vendor/jsr.io/@std/dotenv/0.224.2/parse.ts similarity index 82% rename from src/vendor/deno.land/std@0.217.0/dotenv/parse.ts rename to src/vendor/jsr.io/@std/dotenv/0.224.2/parse.ts index 03e226386be..bdbb345e0a2 100644 --- a/src/vendor/deno.land/std@0.217.0/dotenv/parse.ts +++ b/src/vendor/jsr.io/@std/dotenv/0.224.2/parse.ts @@ -9,10 +9,10 @@ type LineParseResult = { type CharactersMap = { [key: string]: string }; -const RE_KeyValue = +const RE_KEY_VALUE = /^\s*(?:export\s+)?(?[a-zA-Z_]+[a-zA-Z0-9_]*?)\s*=[\ \t]*('\n?(?(.|\n)*?)\n?'|"\n?(?(.|\n)*?)\n?"|(?[^\n#]*)) *#*.*$/gm; -const RE_ExpandValue = +const RE_EXPAND_VALUE = /(\${(?.+?)(\:-(?.+))?}|(?\w+)(\:-(?.+))?)/g; function expandCharacters(str: string): string { @@ -29,9 +29,9 @@ function expandCharacters(str: string): string { } function expand(str: string, variablesMap: { [key: string]: string }): string { - if (RE_ExpandValue.test(str)) { + if (RE_EXPAND_VALUE.test(str)) { return expand( - str.replace(RE_ExpandValue, function (...params) { + str.replace(RE_EXPAND_VALUE, function (...params) { const { inBrackets, inBracketsDefault, @@ -57,21 +57,25 @@ function expand(str: string, variablesMap: { [key: string]: string }): string { /** * Parse `.env` file output in an object. * - * @example + * @example Usage * ```ts - * import { parse } from "https://deno.land/std@$STD_VERSION/dotenv/parse.ts"; + * import { parse } from "@std/dotenv/parse"; + * import { assertEquals } from "@std/assert"; * * const env = parse("GREETING=hello world"); - * env.GREETING; // "hello world" + * assertEquals(env, { GREETING: "hello world" }); * ``` + * + * @param text The text to parse. + * @returns The parsed object. */ -export function parse(rawDotenv: string): Record { +export function parse(text: string): Record { const env: Record = {}; let match; const keysForExpandCheck = []; - while ((match = RE_KeyValue.exec(rawDotenv)) !== null) { + while ((match = RE_KEY_VALUE.exec(text)) !== null) { const { key, interpolated, notInterpolated, unquoted } = match ?.groups as LineParseResult; diff --git a/src/vendor/deno.land/std@0.217.0/dotenv/stringify.ts b/src/vendor/jsr.io/@std/dotenv/0.224.2/stringify.ts similarity index 83% rename from src/vendor/deno.land/std@0.217.0/dotenv/stringify.ts rename to src/vendor/jsr.io/@std/dotenv/0.224.2/stringify.ts index 505d9df46b6..9d33df93c6d 100644 --- a/src/vendor/deno.land/std@0.217.0/dotenv/stringify.ts +++ b/src/vendor/jsr.io/@std/dotenv/0.224.2/stringify.ts @@ -1,14 +1,16 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. /** * Stringify an object into a valid `.env` file format. * - * @example + * @example Usage * ```ts - * import { stringify } from "https://deno.land/std@$STD_VERSION/dotenv/stringify.ts"; + * import { stringify } from "@std/dotenv/stringify"; + * import { assertEquals } from "@std/assert"; * * const object = { GREETING: "hello world" }; - * const string = stringify(object); // GREETING='hello world' + * assertEquals(stringify(object), "GREETING='hello world'"); * ``` * * @param object object to be stringified diff --git a/src/vendor/jsr.io/@std/encoding/0.224.3/_validate_binary_like.ts b/src/vendor/jsr.io/@std/encoding/0.224.3/_validate_binary_like.ts new file mode 100644 index 00000000000..dcb18a0f633 --- /dev/null +++ b/src/vendor/jsr.io/@std/encoding/0.224.3/_validate_binary_like.ts @@ -0,0 +1,29 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +const encoder = new TextEncoder(); + +function getTypeName(value: unknown): string { + const type = typeof value; + if (type !== "object") { + return type; + } else if (value === null) { + return "null"; + } else { + return value?.constructor?.name ?? "object"; + } +} + +export function validateBinaryLike(source: unknown): Uint8Array { + if (typeof source === "string") { + return encoder.encode(source); + } else if (source instanceof Uint8Array) { + return source; + } else if (source instanceof ArrayBuffer) { + return new Uint8Array(source); + } + throw new TypeError( + `The input must be a Uint8Array, a string, or an ArrayBuffer. Received a value of the type ${ + getTypeName(source) + }.`, + ); +} diff --git a/src/vendor/jsr.io/@std/encoding/0.224.3/base64.ts b/src/vendor/jsr.io/@std/encoding/0.224.3/base64.ts new file mode 100644 index 00000000000..7f34b14d180 --- /dev/null +++ b/src/vendor/jsr.io/@std/encoding/0.224.3/base64.ts @@ -0,0 +1,176 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Utilities for + * {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-4 | base64} + * encoding and decoding. + * + * This module is browser compatible. + * + * ```ts + * import { + * encodeBase64, + * decodeBase64, + * } from "@std/encoding/base64"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const foobar = new TextEncoder().encode("foobar"); + * + * assertEquals(encodeBase64(foobar), "Zm9vYmFy"); + * assertEquals(decodeBase64("Zm9vYmFy"), foobar); + * ``` + * + * @module + */ + +import { validateBinaryLike } from "./_validate_binary_like.ts"; + +const base64abc = [ + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "+", + "/", +]; + +/** + * Converts data into a base64-encoded string. + * + * @see {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-4} + * + * @param data The data to encode. + * @returns The base64-encoded string. + * + * @example Usage + * ```ts + * import { encodeBase64 } from "@std/encoding/base64"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(encodeBase64("foobar"), "Zm9vYmFy"); + * ``` + */ +export function encodeBase64(data: ArrayBuffer | Uint8Array | string): string { + // CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727 + const uint8 = validateBinaryLike(data); + let result = ""; + let i; + const l = uint8.length; + for (i = 2; i < l; i += 3) { + result += base64abc[(uint8[i - 2]!) >> 2]; + result += base64abc[ + (((uint8[i - 2]!) & 0x03) << 4) | + ((uint8[i - 1]!) >> 4) + ]; + result += base64abc[ + (((uint8[i - 1]!) & 0x0f) << 2) | + ((uint8[i]!) >> 6) + ]; + result += base64abc[(uint8[i]!) & 0x3f]; + } + if (i === l + 1) { + // 1 octet yet to write + result += base64abc[(uint8[i - 2]!) >> 2]; + result += base64abc[((uint8[i - 2]!) & 0x03) << 4]; + result += "=="; + } + if (i === l) { + // 2 octets yet to write + result += base64abc[(uint8[i - 2]!) >> 2]; + result += base64abc[ + (((uint8[i - 2]!) & 0x03) << 4) | + ((uint8[i - 1]!) >> 4) + ]; + result += base64abc[((uint8[i - 1]!) & 0x0f) << 2]; + result += "="; + } + return result; +} + +/** + * Decodes a base64-encoded string. + * + * @see {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-4} + * + * @param b64 The base64-encoded string to decode. + * @returns The decoded data. + * + * @example Usage + * ```ts + * import { decodeBase64 } from "@std/encoding/base64"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals( + * decodeBase64("Zm9vYmFy"), + * new TextEncoder().encode("foobar") + * ); + * ``` + */ +export function decodeBase64(b64: string): Uint8Array { + const binString = atob(b64); + const size = binString.length; + const bytes = new Uint8Array(size); + for (let i = 0; i < size; i++) { + bytes[i] = binString.charCodeAt(i); + } + return bytes; +} diff --git a/src/vendor/jsr.io/@std/encoding/0.224.3/base64url.ts b/src/vendor/jsr.io/@std/encoding/0.224.3/base64url.ts new file mode 100644 index 00000000000..8910270e61d --- /dev/null +++ b/src/vendor/jsr.io/@std/encoding/0.224.3/base64url.ts @@ -0,0 +1,90 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Utilities for + * {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-5 | base64url} + * encoding and decoding. + * + * This module is browser compatible. + * + * @module + */ + +import * as base64 from "./base64.ts"; + +/** + * Some variants allow or require omitting the padding '=' signs: + * https://en.wikipedia.org/wiki/Base64#The_URL_applications + * + * @param base64url + */ +function addPaddingToBase64url(base64url: string): string { + if (base64url.length % 4 === 2) return base64url + "=="; + if (base64url.length % 4 === 3) return base64url + "="; + if (base64url.length % 4 === 1) { + throw new TypeError("Illegal base64url string!"); + } + return base64url; +} + +function convertBase64urlToBase64(b64url: string): string { + if (!/^[-_A-Z0-9]*?={0,2}$/i.test(b64url)) { + // Contains characters not part of base64url spec. + throw new TypeError("Failed to decode base64url: invalid character"); + } + return addPaddingToBase64url(b64url).replace(/\-/g, "+").replace(/_/g, "/"); +} + +function convertBase64ToBase64url(b64: string) { + return b64.endsWith("=") + ? b64.endsWith("==") + ? b64.replace(/\+/g, "-").replace(/\//g, "_").slice(0, -2) + : b64.replace(/\+/g, "-").replace(/\//g, "_").slice(0, -1) + : b64.replace(/\+/g, "-").replace(/\//g, "_"); +} + +/** + * Convert data into a base64url-encoded string. + * + * @see {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-5} + * + * @param data The data to encode. + * @returns The base64url-encoded string. + * + * @example Usage + * ```ts + * import { encodeBase64Url } from "@std/encoding/base64url"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(encodeBase64Url("foobar"), "Zm9vYmFy"); + * ``` + */ +export function encodeBase64Url( + data: ArrayBuffer | Uint8Array | string, +): string { + return convertBase64ToBase64url(base64.encodeBase64(data)); +} + +/** + * Decodes a given base64url-encoded string. + * + * @see {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-5} + * + * @param b64url The base64url-encoded string to decode. + * @returns The decoded data. + * + * @example Usage + * ```ts + * import { decodeBase64Url } from "@std/encoding/base64url"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals( + * decodeBase64Url("Zm9vYmFy"), + * new TextEncoder().encode("foobar") + * ); + * ``` + */ +export function decodeBase64Url(b64url: string): Uint8Array { + return base64.decodeBase64(convertBase64urlToBase64(b64url)); +} diff --git a/src/vendor/jsr.io/@std/encoding/0.224.3/hex.ts b/src/vendor/jsr.io/@std/encoding/0.224.3/hex.ts new file mode 100644 index 00000000000..a93116432c0 --- /dev/null +++ b/src/vendor/jsr.io/@std/encoding/0.224.3/hex.ts @@ -0,0 +1,120 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// https://github.com/golang/go/blob/master/LICENSE +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Port of the Go + * {@link https://github.com/golang/go/blob/go1.12.5/src/encoding/hex/hex.go | encoding/hex} + * library. + * + * This module is browser compatible. + * + * ```ts + * import { + * decodeHex, + * encodeHex, + * } from "@std/encoding/hex"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(encodeHex("abc"), "616263"); + * + * assertEquals( + * decodeHex("616263"), + * new TextEncoder().encode("abc"), + * ); + * ``` + * + * @module + */ + +import { validateBinaryLike } from "./_validate_binary_like.ts"; + +const hexTable = new TextEncoder().encode("0123456789abcdef"); +const textEncoder = new TextEncoder(); +const textDecoder = new TextDecoder(); + +function errInvalidByte(byte: number) { + return new TypeError(`Invalid byte '${String.fromCharCode(byte)}'`); +} + +function errLength() { + return new RangeError("Odd length hex string"); +} + +/** Converts a hex character into its value. */ +function fromHexChar(byte: number): number { + // '0' <= byte && byte <= '9' + if (48 <= byte && byte <= 57) return byte - 48; + // 'a' <= byte && byte <= 'f' + if (97 <= byte && byte <= 102) return byte - 97 + 10; + // 'A' <= byte && byte <= 'F' + if (65 <= byte && byte <= 70) return byte - 65 + 10; + + throw errInvalidByte(byte); +} + +/** + * Converts data into a hex-encoded string. + * + * @param src The data to encode. + * + * @returns The hex-encoded string. + * + * @example Usage + * ```ts + * import { encodeHex } from "@std/encoding/hex"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(encodeHex("abc"), "616263"); + * ``` + */ +export function encodeHex(src: string | Uint8Array | ArrayBuffer): string { + const u8 = validateBinaryLike(src); + + const dst = new Uint8Array(u8.length * 2); + for (let i = 0; i < dst.length; i++) { + const v = u8[i]!; + dst[i * 2] = hexTable[v >> 4]!; + dst[i * 2 + 1] = hexTable[v & 0x0f]!; + } + return textDecoder.decode(dst); +} + +/** + * Decodes the given hex-encoded string. If the input is malformed, an error is + * thrown. + * + * @param src The hex-encoded string to decode. + * + * @returns The decoded data. + * + * @example Usage + * ```ts + * import { decodeHex } from "@std/encoding/hex"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals( + * decodeHex("616263"), + * new TextEncoder().encode("abc"), + * ); + * ``` + */ +export function decodeHex(src: string): Uint8Array { + const u8 = textEncoder.encode(src); + const dst = new Uint8Array(u8.length / 2); + for (let i = 0; i < dst.length; i++) { + const a = fromHexChar(u8[i * 2]!); + const b = fromHexChar(u8[i * 2 + 1]!); + dst[i] = (a << 4) | b; + } + + if (u8.length % 2 === 1) { + // Check for invalid char before reporting bad length, + // since the invalid char (if present) is an earlier problem. + fromHexChar(u8[dst.length * 2]!); + throw errLength(); + } + + return dst; +} diff --git a/src/vendor/jsr.io/@std/encoding/1.0.0-rc.2/_validate_binary_like.ts b/src/vendor/jsr.io/@std/encoding/1.0.0-rc.2/_validate_binary_like.ts new file mode 100644 index 00000000000..dcb18a0f633 --- /dev/null +++ b/src/vendor/jsr.io/@std/encoding/1.0.0-rc.2/_validate_binary_like.ts @@ -0,0 +1,29 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +const encoder = new TextEncoder(); + +function getTypeName(value: unknown): string { + const type = typeof value; + if (type !== "object") { + return type; + } else if (value === null) { + return "null"; + } else { + return value?.constructor?.name ?? "object"; + } +} + +export function validateBinaryLike(source: unknown): Uint8Array { + if (typeof source === "string") { + return encoder.encode(source); + } else if (source instanceof Uint8Array) { + return source; + } else if (source instanceof ArrayBuffer) { + return new Uint8Array(source); + } + throw new TypeError( + `The input must be a Uint8Array, a string, or an ArrayBuffer. Received a value of the type ${ + getTypeName(source) + }.`, + ); +} diff --git a/src/vendor/jsr.io/@std/encoding/1.0.0-rc.2/base64.ts b/src/vendor/jsr.io/@std/encoding/1.0.0-rc.2/base64.ts new file mode 100644 index 00000000000..cce00793c7f --- /dev/null +++ b/src/vendor/jsr.io/@std/encoding/1.0.0-rc.2/base64.ts @@ -0,0 +1,174 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Utilities for + * {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-4 | base64} + * encoding and decoding. + * + * ```ts + * import { + * encodeBase64, + * decodeBase64, + * } from "@std/encoding/base64"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const foobar = new TextEncoder().encode("foobar"); + * + * assertEquals(encodeBase64(foobar), "Zm9vYmFy"); + * assertEquals(decodeBase64("Zm9vYmFy"), foobar); + * ``` + * + * @module + */ + +import { validateBinaryLike } from "./_validate_binary_like.ts"; + +const base64abc = [ + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "+", + "/", +]; + +/** + * Converts data into a base64-encoded string. + * + * @see {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-4} + * + * @param data The data to encode. + * @returns The base64-encoded string. + * + * @example Usage + * ```ts + * import { encodeBase64 } from "@std/encoding/base64"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(encodeBase64("foobar"), "Zm9vYmFy"); + * ``` + */ +export function encodeBase64(data: ArrayBuffer | Uint8Array | string): string { + // CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727 + const uint8 = validateBinaryLike(data); + let result = ""; + let i; + const l = uint8.length; + for (i = 2; i < l; i += 3) { + result += base64abc[(uint8[i - 2]!) >> 2]; + result += base64abc[ + (((uint8[i - 2]!) & 0x03) << 4) | + ((uint8[i - 1]!) >> 4) + ]; + result += base64abc[ + (((uint8[i - 1]!) & 0x0f) << 2) | + ((uint8[i]!) >> 6) + ]; + result += base64abc[(uint8[i]!) & 0x3f]; + } + if (i === l + 1) { + // 1 octet yet to write + result += base64abc[(uint8[i - 2]!) >> 2]; + result += base64abc[((uint8[i - 2]!) & 0x03) << 4]; + result += "=="; + } + if (i === l) { + // 2 octets yet to write + result += base64abc[(uint8[i - 2]!) >> 2]; + result += base64abc[ + (((uint8[i - 2]!) & 0x03) << 4) | + ((uint8[i - 1]!) >> 4) + ]; + result += base64abc[((uint8[i - 1]!) & 0x0f) << 2]; + result += "="; + } + return result; +} + +/** + * Decodes a base64-encoded string. + * + * @see {@link https://www.rfc-editor.org/rfc/rfc4648.html#section-4} + * + * @param b64 The base64-encoded string to decode. + * @returns The decoded data. + * + * @example Usage + * ```ts + * import { decodeBase64 } from "@std/encoding/base64"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals( + * decodeBase64("Zm9vYmFy"), + * new TextEncoder().encode("foobar") + * ); + * ``` + */ +export function decodeBase64(b64: string): Uint8Array { + const binString = atob(b64); + const size = binString.length; + const bytes = new Uint8Array(size); + for (let i = 0; i < size; i++) { + bytes[i] = binString.charCodeAt(i); + } + return bytes; +} diff --git a/src/vendor/jsr.io/@std/encoding/1.0.0-rc.2/hex.ts b/src/vendor/jsr.io/@std/encoding/1.0.0-rc.2/hex.ts new file mode 100644 index 00000000000..930c8f12035 --- /dev/null +++ b/src/vendor/jsr.io/@std/encoding/1.0.0-rc.2/hex.ts @@ -0,0 +1,118 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// https://github.com/golang/go/blob/master/LICENSE +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Port of the Go + * {@link https://github.com/golang/go/blob/go1.12.5/src/encoding/hex/hex.go | encoding/hex} + * library. + * + * ```ts + * import { + * decodeHex, + * encodeHex, + * } from "@std/encoding/hex"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(encodeHex("abc"), "616263"); + * + * assertEquals( + * decodeHex("616263"), + * new TextEncoder().encode("abc"), + * ); + * ``` + * + * @module + */ + +import { validateBinaryLike } from "./_validate_binary_like.ts"; + +const hexTable = new TextEncoder().encode("0123456789abcdef"); +const textEncoder = new TextEncoder(); +const textDecoder = new TextDecoder(); + +function errInvalidByte(byte: number) { + return new TypeError(`Invalid byte '${String.fromCharCode(byte)}'`); +} + +function errLength() { + return new RangeError("Odd length hex string"); +} + +/** Converts a hex character into its value. */ +function fromHexChar(byte: number): number { + // '0' <= byte && byte <= '9' + if (48 <= byte && byte <= 57) return byte - 48; + // 'a' <= byte && byte <= 'f' + if (97 <= byte && byte <= 102) return byte - 97 + 10; + // 'A' <= byte && byte <= 'F' + if (65 <= byte && byte <= 70) return byte - 65 + 10; + + throw errInvalidByte(byte); +} + +/** + * Converts data into a hex-encoded string. + * + * @param src The data to encode. + * + * @returns The hex-encoded string. + * + * @example Usage + * ```ts + * import { encodeHex } from "@std/encoding/hex"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(encodeHex("abc"), "616263"); + * ``` + */ +export function encodeHex(src: string | Uint8Array | ArrayBuffer): string { + const u8 = validateBinaryLike(src); + + const dst = new Uint8Array(u8.length * 2); + for (let i = 0; i < dst.length; i++) { + const v = u8[i]!; + dst[i * 2] = hexTable[v >> 4]!; + dst[i * 2 + 1] = hexTable[v & 0x0f]!; + } + return textDecoder.decode(dst); +} + +/** + * Decodes the given hex-encoded string. If the input is malformed, an error is + * thrown. + * + * @param src The hex-encoded string to decode. + * + * @returns The decoded data. + * + * @example Usage + * ```ts + * import { decodeHex } from "@std/encoding/hex"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals( + * decodeHex("616263"), + * new TextEncoder().encode("abc"), + * ); + * ``` + */ +export function decodeHex(src: string): Uint8Array { + const u8 = textEncoder.encode(src); + const dst = new Uint8Array(u8.length / 2); + for (let i = 0; i < dst.length; i++) { + const a = fromHexChar(u8[i * 2]!); + const b = fromHexChar(u8[i * 2 + 1]!); + dst[i] = (a << 4) | b; + } + + if (u8.length % 2 === 1) { + // Check for invalid char before reporting bad length, + // since the invalid char (if present) is an earlier problem. + fromHexChar(u8[dst.length * 2]!); + throw errLength(); + } + + return dst; +} diff --git a/src/vendor/deno.land/std@0.217.0/flags/mod.ts b/src/vendor/jsr.io/@std/flags/0.224.0/mod.ts similarity index 96% rename from src/vendor/deno.land/std@0.217.0/flags/mod.ts rename to src/vendor/jsr.io/@std/flags/0.224.0/mod.ts index da7e069ea38..941d1af9572 100644 --- a/src/vendor/deno.land/std@0.217.0/flags/mod.ts +++ b/src/vendor/jsr.io/@std/flags/0.224.0/mod.ts @@ -9,17 +9,19 @@ * * @example * ```ts - * import { parse } from "https://deno.land/std@$STD_VERSION/flags/mod.ts"; + * import { parse } from "@std/flags"; * * console.dir(parse(Deno.args)); * ``` * - * @deprecated (will be removed in 1.0.0) Import from - * {@link https://deno.land/std/cli/parse_args.ts} instead. + * @deprecated Use + * {@linkcode https://jsr.io/@std/cli/doc/parse-args/~/parseArgs | parseArgs} + * instead. This module will be removed once the Standard Library migrates to + * {@link https://jsr.io/ | JSR}. * * @module */ -import { assertExists } from "../assert/assert_exists.ts"; +import { assertExists } from "jsr:/@std/assert@^0.224.0/assert-exists"; /** Combines recursively all intersection types and returns a new single type. */ type Id = TRecord extends Record @@ -234,7 +236,7 @@ type ValueOf = TValue[keyof TValue]; /** * The value returned from `parse`. * - * @deprecated (will be removed in 1.0.0) Import from + * @deprecated This will be removed in 1.0.0. Import from * {@link https://deno.land/std/cli/parse_args.ts} instead. */ export type Args< @@ -261,7 +263,7 @@ type DoubleDash = { /** * The options for the `parse` call. * - * @deprecated (will be removed in 1.0.0) Import from + * @deprecated This will be removed in 1.0.0. Import from * {@link https://deno.land/std/cli/parse_args.ts} instead. */ export interface ParseOptions< @@ -284,7 +286,7 @@ export interface ParseOptions< * @example * ```ts * // $ deno run example.ts -- a arg1 - * import { parse } from "https://deno.land/std@$STD_VERSION/flags/mod.ts"; + * import { parse } from "@std/flags"; * console.dir(parse(Deno.args, { "--": false })); * // output: { _: [ "a", "arg1" ] } * console.dir(parse(Deno.args, { "--": true })); @@ -412,20 +414,21 @@ function hasKey(obj: NestedMapping, keys: string[]): boolean { * * @example * ```ts - * import { parse } from "https://deno.land/std@$STD_VERSION/flags/mod.ts"; + * import { parse } from "@std/flags"; * const parsedArgs = parse(Deno.args); * ``` * * @example * ```ts - * import { parse } from "https://deno.land/std@$STD_VERSION/flags/mod.ts"; + * import { parse } from "@std/flags"; * const parsedArgs = parse(["--foo", "--bar=baz", "./quux.txt"]); * // parsedArgs: { foo: true, bar: "baz", _: ["./quux.txt"] } * ``` * - * @deprecated (will be removed in 1.0.0) Use - * {@linkcode https://deno.land/std/cli/parse_args.ts?s=parseArgs | parseArgs} - * instead. + * @deprecated Use + * {@linkcode https://jsr.io/@std/cli/doc/parse-args/~/parseArgs | parseArgs} + * instead. This module will be removed once the Standard Library migrates to + * {@link https://jsr.io/ | JSR}. */ export function parse< TArgs extends Values< diff --git a/src/vendor/jsr.io/@std/fmt/0.224.0/colors.ts b/src/vendor/jsr.io/@std/fmt/0.224.0/colors.ts new file mode 100644 index 00000000000..bd7d4b7a074 --- /dev/null +++ b/src/vendor/jsr.io/@std/fmt/0.224.0/colors.ts @@ -0,0 +1,589 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +// A module to print ANSI terminal colors. Inspired by chalk, kleur, and colors +// on npm. + +/** + * String formatters and utilities for dealing with ANSI color codes. + * + * This module is browser compatible. + * + * This module supports `NO_COLOR` environmental variable disabling any coloring + * if `NO_COLOR` is set. + * + * @example + * ```ts + * import { + * bgBlue, + * bgRgb24, + * bgRgb8, + * bold, + * italic, + * red, + * rgb24, + * rgb8, + * } from "@std/fmt/colors"; + * + * console.log(bgBlue(italic(red(bold("Hello, World!"))))); + * + * // also supports 8bit colors + * + * console.log(rgb8("Hello, World!", 42)); + * + * console.log(bgRgb8("Hello, World!", 42)); + * + * // and 24bit rgb + * + * console.log(rgb24("Hello, World!", { + * r: 41, + * g: 42, + * b: 43, + * })); + * + * console.log(bgRgb24("Hello, World!", { + * r: 41, + * g: 42, + * b: 43, + * })); + * ``` + * + * @module + */ + +// deno-lint-ignore no-explicit-any +const { Deno } = globalThis as any; +const noColor = typeof Deno?.noColor === "boolean" + ? Deno.noColor as boolean + : false; + +interface Code { + open: string; + close: string; + regexp: RegExp; +} + +/** RGB 8-bits per channel. Each in range `0->255` or `0x00->0xff` */ +export interface Rgb { + /** Red component value */ + r: number; + /** Green component value */ + g: number; + /** Blue component value */ + b: number; +} + +let enabled = !noColor; + +/** + * Set changing text color to enabled or disabled + * @param value + */ +export function setColorEnabled(value: boolean) { + if (Deno?.noColor) { + return; + } + + enabled = value; +} + +/** Get whether text color change is enabled or disabled. */ +export function getColorEnabled(): boolean { + return enabled; +} + +/** + * Builds color code + * @param open + * @param close + */ +function code(open: number[], close: number): Code { + return { + open: `\x1b[${open.join(";")}m`, + close: `\x1b[${close}m`, + regexp: new RegExp(`\\x1b\\[${close}m`, "g"), + }; +} + +/** + * Applies color and background based on color code and its associated text + * @param str text to apply color settings to + * @param code color code to apply + */ +function run(str: string, code: Code): string { + return enabled + ? `${code.open}${str.replace(code.regexp, code.open)}${code.close}` + : str; +} + +/** + * Reset the text modified. + * @param str text to reset + */ +export function reset(str: string): string { + return run(str, code([0], 0)); +} + +/** + * Make the text bold. + * @param str text to make bold + */ +export function bold(str: string): string { + return run(str, code([1], 22)); +} + +/** + * The text emits only a small amount of light. + * @param str text to dim + * + * Warning: Not all terminal emulators support `dim`. + * For compatibility across all terminals, use {@linkcode gray} or {@linkcode brightBlack} instead. + */ +export function dim(str: string): string { + return run(str, code([2], 22)); +} + +/** + * Make the text italic. + * @param str text to make italic + */ +export function italic(str: string): string { + return run(str, code([3], 23)); +} + +/** + * Make the text underline. + * @param str text to underline + */ +export function underline(str: string): string { + return run(str, code([4], 24)); +} + +/** + * Invert background color and text color. + * @param str text to invert its color + */ +export function inverse(str: string): string { + return run(str, code([7], 27)); +} + +/** + * Make the text hidden. + * @param str text to hide + */ +export function hidden(str: string): string { + return run(str, code([8], 28)); +} + +/** + * Put horizontal line through the center of the text. + * @param str text to strike through + */ +export function strikethrough(str: string): string { + return run(str, code([9], 29)); +} + +/** + * Set text color to black. + * @param str text to make black + */ +export function black(str: string): string { + return run(str, code([30], 39)); +} + +/** + * Set text color to red. + * @param str text to make red + */ +export function red(str: string): string { + return run(str, code([31], 39)); +} + +/** + * Set text color to green. + * @param str text to make green + */ +export function green(str: string): string { + return run(str, code([32], 39)); +} + +/** + * Set text color to yellow. + * @param str text to make yellow + */ +export function yellow(str: string): string { + return run(str, code([33], 39)); +} + +/** + * Set text color to blue. + * @param str text to make blue + */ +export function blue(str: string): string { + return run(str, code([34], 39)); +} + +/** + * Set text color to magenta. + * @param str text to make magenta + */ +export function magenta(str: string): string { + return run(str, code([35], 39)); +} + +/** + * Set text color to cyan. + * @param str text to make cyan + */ +export function cyan(str: string): string { + return run(str, code([36], 39)); +} + +/** + * Set text color to white. + * @param str text to make white + */ +export function white(str: string): string { + return run(str, code([37], 39)); +} + +/** + * Set text color to gray. + * @param str text to make gray + */ +export function gray(str: string): string { + return brightBlack(str); +} + +/** + * Set text color to bright black. + * @param str text to make bright-black + */ +export function brightBlack(str: string): string { + return run(str, code([90], 39)); +} + +/** + * Set text color to bright red. + * @param str text to make bright-red + */ +export function brightRed(str: string): string { + return run(str, code([91], 39)); +} + +/** + * Set text color to bright green. + * @param str text to make bright-green + */ +export function brightGreen(str: string): string { + return run(str, code([92], 39)); +} + +/** + * Set text color to bright yellow. + * @param str text to make bright-yellow + */ +export function brightYellow(str: string): string { + return run(str, code([93], 39)); +} + +/** + * Set text color to bright blue. + * @param str text to make bright-blue + */ +export function brightBlue(str: string): string { + return run(str, code([94], 39)); +} + +/** + * Set text color to bright magenta. + * @param str text to make bright-magenta + */ +export function brightMagenta(str: string): string { + return run(str, code([95], 39)); +} + +/** + * Set text color to bright cyan. + * @param str text to make bright-cyan + */ +export function brightCyan(str: string): string { + return run(str, code([96], 39)); +} + +/** + * Set text color to bright white. + * @param str text to make bright-white + */ +export function brightWhite(str: string): string { + return run(str, code([97], 39)); +} + +/** + * Set background color to black. + * @param str text to make its background black + */ +export function bgBlack(str: string): string { + return run(str, code([40], 49)); +} + +/** + * Set background color to red. + * @param str text to make its background red + */ +export function bgRed(str: string): string { + return run(str, code([41], 49)); +} + +/** + * Set background color to green. + * @param str text to make its background green + */ +export function bgGreen(str: string): string { + return run(str, code([42], 49)); +} + +/** + * Set background color to yellow. + * @param str text to make its background yellow + */ +export function bgYellow(str: string): string { + return run(str, code([43], 49)); +} + +/** + * Set background color to blue. + * @param str text to make its background blue + */ +export function bgBlue(str: string): string { + return run(str, code([44], 49)); +} + +/** + * Set background color to magenta. + * @param str text to make its background magenta + */ +export function bgMagenta(str: string): string { + return run(str, code([45], 49)); +} + +/** + * Set background color to cyan. + * @param str text to make its background cyan + */ +export function bgCyan(str: string): string { + return run(str, code([46], 49)); +} + +/** + * Set background color to white. + * @param str text to make its background white + */ +export function bgWhite(str: string): string { + return run(str, code([47], 49)); +} + +/** + * Set background color to bright black. + * @param str text to make its background bright-black + */ +export function bgBrightBlack(str: string): string { + return run(str, code([100], 49)); +} + +/** + * Set background color to bright red. + * @param str text to make its background bright-red + */ +export function bgBrightRed(str: string): string { + return run(str, code([101], 49)); +} + +/** + * Set background color to bright green. + * @param str text to make its background bright-green + */ +export function bgBrightGreen(str: string): string { + return run(str, code([102], 49)); +} + +/** + * Set background color to bright yellow. + * @param str text to make its background bright-yellow + */ +export function bgBrightYellow(str: string): string { + return run(str, code([103], 49)); +} + +/** + * Set background color to bright blue. + * @param str text to make its background bright-blue + */ +export function bgBrightBlue(str: string): string { + return run(str, code([104], 49)); +} + +/** + * Set background color to bright magenta. + * @param str text to make its background bright-magenta + */ +export function bgBrightMagenta(str: string): string { + return run(str, code([105], 49)); +} + +/** + * Set background color to bright cyan. + * @param str text to make its background bright-cyan + */ +export function bgBrightCyan(str: string): string { + return run(str, code([106], 49)); +} + +/** + * Set background color to bright white. + * @param str text to make its background bright-white + */ +export function bgBrightWhite(str: string): string { + return run(str, code([107], 49)); +} + +/* Special Color Sequences */ + +/** + * Clam and truncate color codes + * @param n + * @param max number to truncate to + * @param min number to truncate from + */ +function clampAndTruncate(n: number, max = 255, min = 0): number { + return Math.trunc(Math.max(Math.min(n, max), min)); +} + +/** + * Set text color using paletted 8bit colors. + * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit + * @param str text color to apply paletted 8bit colors to + * @param color code + */ +export function rgb8(str: string, color: number): string { + return run(str, code([38, 5, clampAndTruncate(color)], 39)); +} + +/** + * Set background color using paletted 8bit colors. + * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit + * @param str text color to apply paletted 8bit background colors to + * @param color code + */ +export function bgRgb8(str: string, color: number): string { + return run(str, code([48, 5, clampAndTruncate(color)], 49)); +} + +/** + * Set text color using 24bit rgb. + * `color` can be a number in range `0x000000` to `0xffffff` or + * an `Rgb`. + * + * To produce the color magenta: + * + * ```ts + * import { rgb24 } from "@std/fmt/colors"; + * + * rgb24("foo", 0xff00ff); + * rgb24("foo", {r: 255, g: 0, b: 255}); + * ``` + * @param str text color to apply 24bit rgb to + * @param color code + */ +export function rgb24(str: string, color: number | Rgb): string { + if (typeof color === "number") { + return run( + str, + code( + [38, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff], + 39, + ), + ); + } + return run( + str, + code( + [ + 38, + 2, + clampAndTruncate(color.r), + clampAndTruncate(color.g), + clampAndTruncate(color.b), + ], + 39, + ), + ); +} + +/** + * Set background color using 24bit rgb. + * `color` can be a number in range `0x000000` to `0xffffff` or + * an `Rgb`. + * + * To produce the color magenta: + * + * ```ts + * import { bgRgb24 } from "@std/fmt/colors"; + * + * bgRgb24("foo", 0xff00ff); + * bgRgb24("foo", {r: 255, g: 0, b: 255}); + * ``` + * @param str text color to apply 24bit rgb to + * @param color code + */ +export function bgRgb24(str: string, color: number | Rgb): string { + if (typeof color === "number") { + return run( + str, + code( + [48, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff], + 49, + ), + ); + } + return run( + str, + code( + [ + 48, + 2, + clampAndTruncate(color.r), + clampAndTruncate(color.g), + clampAndTruncate(color.b), + ], + 49, + ), + ); +} + +// https://github.com/chalk/ansi-regex/blob/02fa893d619d3da85411acc8fd4e2eea0e95a9d9/index.js +const ANSI_PATTERN = new RegExp( + [ + "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)", + "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TXZcf-nq-uy=><~]))", + ].join("|"), + "g", +); + +/** + * Remove ANSI escape codes from the string. + * @param string to remove ANSI escape codes from + * + * @deprecated This will be removed in 1.0.0. Use {@linkcode stripAnsiCode} instead. + */ +export function stripColor(string: string): string { + return stripAnsiCode(string); +} + +/** + * Remove ANSI escape codes from the string. + * + * @param string to remove ANSI escape codes from + */ +export function stripAnsiCode(string: string): string { + return string.replace(ANSI_PATTERN, ""); +} diff --git a/src/vendor/jsr.io/@std/fmt/0.224.0/printf.ts b/src/vendor/jsr.io/@std/fmt/0.224.0/printf.ts new file mode 100644 index 00000000000..42ed9c0983c --- /dev/null +++ b/src/vendor/jsr.io/@std/fmt/0.224.0/printf.ts @@ -0,0 +1,939 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +/** + * {@linkcode sprintf} and {@linkcode printf} for printing formatted strings to + * stdout. + * + * This implementation is inspired by POSIX and Golang but does not port + * implementation code. + * + * sprintf converts and formats a variable number of arguments as is specified + * by a `format string`. In it's basic form, a format string may just be a + * literal. In case arguments are meant to be formatted, a `directive` is + * contained in the format string, preceded by a '%' character: + * + * % + * + * E.g. the verb `s` indicates the directive should be replaced by the string + * representation of the argument in the corresponding position of the argument + * list. E.g.: + * + * Hello %s! + * + * applied to the arguments "World" yields "Hello World!". + * + * The meaning of the format string is modelled after [POSIX][1] format strings + * as well as well as [Golang format strings][2]. Both contain elements specific + * to the respective programming language that don't apply to JavaScript, so + * they can not be fully supported. Furthermore we implement some functionality + * that is specific to JS. + * + * ## Verbs + * + * The following verbs are supported: + * + * | Verb | Meaning | + * | ----- | -------------------------------------------------------------- | + * | `%` | print a literal percent | + * | `t` | evaluate arg as boolean, print `true` or `false` | + * | `b` | eval as number, print binary | + * | `c` | eval as number, print character corresponding to the codePoint | + * | `o` | eval as number, print octal | + * | `x X` | print as hex (ff FF), treat string as list of bytes | + * | `e E` | print number in scientific/exponent format 1.123123e+01 | + * | `f F` | print number as float with decimal point and no exponent | + * | `g G` | use %e %E or %f %F depending on size of argument | + * | `s` | interpolate string | + * | `T` | type of arg, as returned by `typeof` | + * | `v` | value of argument in 'default' format (see below) | + * | `j` | argument as formatted by `JSON.stringify` | + * | `i` | argument as formatted by `Deno.inspect` | + * | `I` | argument as formatted by `Deno.inspect` in compact format | + * + * ## Width and Precision + * + * Verbs may be modified by providing them with width and precision, either or + * both may be omitted: + * + * %9f width 9, default precision + * %.9f default width, precision 9 + * %8.9f width 8, precision 9 + * %8.f width 9, precision 0 + * + * In general, 'width' describes the minimum length of the output, while + * 'precision' limits the output. + * + * | verb | precision | + * | --------- | --------------------------------------------------------------- | + * | `t` | n/a | + * | `b c o` | n/a | + * | `x X` | n/a for number, strings are truncated to p bytes(!) | + * | `e E f F` | number of places after decimal, default 6 | + * | `g G` | set maximum number of digits | + * | `s` | truncate input | + * | `T` | truncate | + * | `v` | truncate, or depth if used with # see "'default' format", below | + * | `j` | n/a | + * + * Numerical values for width and precision can be substituted for the `*` char, + * in which case the values are obtained from the next args, e.g.: + * + * sprintf("%*.*f", 9, 8, 456.0) + * + * is equivalent to: + * + * sprintf("%9.8f", 456.0) + * + * ## Flags + * + * The effects of the verb may be further influenced by using flags to modify + * the directive: + * + * | Flag | Verb | Meaning | + * | ----- | --------- | -------------------------------------------------------------------------- | + * | `+` | numeric | always print sign | + * | `-` | all | pad to the right (left justify) | + * | `#` | | alternate format | + * | `#` | `b o x X` | prefix with `0b 0 0x` | + * | `#` | `g G` | don't remove trailing zeros | + * | `#` | `v` | use output of `inspect` instead of `toString` | + * | `' '` | | space character | + * | `' '` | `x X` | leave spaces between bytes when printing string | + * | `' '` | `d` | insert space for missing `+` sign character | + * | `0` | all | pad with zero, `-` takes precedence, sign is appended in front of padding | + * | `<` | all | format elements of the passed array according to the directive (extension) | + * + * ## 'default' format + * + * The default format used by `%v` is the result of calling `toString()` on the + * relevant argument. If the `#` flags is used, the result of calling `inspect()` + * is interpolated. In this case, the precision, if set is passed to `inspect()` + * as the 'depth' config parameter. + * + * ## Positional arguments + * + * Arguments do not need to be consumed in the order they are provided and may + * be consumed more than once. E.g.: + * + * sprintf("%[2]s %[1]s", "World", "Hello") + * + * returns "Hello World". The presence of a positional indicator resets the arg + * counter allowing args to be reused: + * + * sprintf("dec[%d]=%d hex[%[1]d]=%x oct[%[1]d]=%#o %s", 1, 255, "Third") + * + * returns `dec[1]=255 hex[1]=0xff oct[1]=0377 Third` + * + * Width and precision my also use positionals: + * + * "%[2]*.[1]*d", 1, 2 + * + * This follows the golang conventions and not POSIX. + * + * ## Errors + * + * The following errors are handled: + * + * Incorrect verb: + * + * S("%h", "") %!(BAD VERB 'h') + * + * Too few arguments: + * + * S("%d") %!(MISSING 'd')" + * + * [1]: https://pubs.opengroup.org/onlinepubs/009695399/functions/fprintf.html + * [2]: https://golang.org/pkg/fmt/ + * + * @module + */ + +const State = { + PASSTHROUGH: 0, + PERCENT: 1, + POSITIONAL: 2, + PRECISION: 3, + WIDTH: 4, +} as const; + +type State = typeof State[keyof typeof State]; + +const WorP = { + WIDTH: 0, + PRECISION: 1, +} as const; + +type WorP = typeof WorP[keyof typeof WorP]; + +const F = { + sign: 1, + mantissa: 2, + fractional: 3, + esign: 4, + exponent: 5, +} as const; + +class Flags { + plus?: boolean; + dash?: boolean; + sharp?: boolean; + space?: boolean; + zero?: boolean; + lessthan?: boolean; + width = -1; + precision = -1; +} + +const min = Math.min; +const UNICODE_REPLACEMENT_CHARACTER = "\ufffd"; +const DEFAULT_PRECISION = 6; +const FLOAT_REGEXP = /(-?)(\d)\.?(\d*)e([+-])(\d+)/; + +class Printf { + format: string; + args: unknown[]; + i: number; + + state: State = State.PASSTHROUGH; + verb = ""; + buf = ""; + argNum = 0; + flags: Flags = new Flags(); + + haveSeen: boolean[]; + + // barf, store precision and width errors for later processing ... + tmpError?: string; + + constructor(format: string, ...args: unknown[]) { + this.format = format; + this.args = args; + this.haveSeen = Array.from({ length: args.length }); + this.i = 0; + } + + doPrintf(): string { + for (; this.i < this.format.length; ++this.i) { + const c = this.format[this.i]; + switch (this.state) { + case State.PASSTHROUGH: + if (c === "%") { + this.state = State.PERCENT; + } else { + this.buf += c; + } + break; + case State.PERCENT: + if (c === "%") { + this.buf += c; + this.state = State.PASSTHROUGH; + } else { + this.handleFormat(); + } + break; + default: + throw Error("Should be unreachable, certainly a bug in the lib."); + } + } + // check for unhandled args + let extras = false; + let err = "%!(EXTRA"; + for (let i = 0; i !== this.haveSeen.length; ++i) { + if (!this.haveSeen[i]) { + extras = true; + err += ` '${Deno.inspect(this.args[i])}'`; + } + } + err += ")"; + if (extras) { + this.buf += err; + } + return this.buf; + } + + // %[]... + handleFormat() { + this.flags = new Flags(); + const flags = this.flags; + for (; this.i < this.format.length; ++this.i) { + const c = this.format[this.i]!; + switch (this.state) { + case State.PERCENT: + switch (c) { + case "[": + this.handlePositional(); + this.state = State.POSITIONAL; + break; + case "+": + flags.plus = true; + break; + case "<": + flags.lessthan = true; + break; + case "-": + flags.dash = true; + flags.zero = false; // only left pad zeros, dash takes precedence + break; + case "#": + flags.sharp = true; + break; + case " ": + flags.space = true; + break; + case "0": + // only left pad zeros, dash takes precedence + flags.zero = !flags.dash; + break; + default: + if (("1" <= c && c <= "9") || c === "." || c === "*") { + if (c === ".") { + this.flags.precision = 0; + this.state = State.PRECISION; + this.i++; + } else { + this.state = State.WIDTH; + } + this.handleWidthAndPrecision(flags); + } else { + this.handleVerb(); + return; // always end in verb + } + } // switch c + break; + case State.POSITIONAL: + // TODO(bartlomieju): either a verb or * only verb for now + if (c === "*") { + const worp = this.flags.precision === -1 + ? WorP.WIDTH + : WorP.PRECISION; + this.handleWidthOrPrecisionRef(worp); + this.state = State.PERCENT; + break; + } else { + this.handleVerb(); + return; // always end in verb + } + default: + throw new Error(`Should not be here ${this.state}, library bug!`); + } // switch state + } + } + + /** + * Handle width or precision + * @param wOrP + */ + handleWidthOrPrecisionRef(wOrP: WorP) { + if (this.argNum >= this.args.length) { + // handle Positional should have already taken care of it... + return; + } + const arg = this.args[this.argNum]; + this.haveSeen[this.argNum] = true; + if (typeof arg === "number") { + switch (wOrP) { + case WorP.WIDTH: + this.flags.width = arg; + break; + default: + this.flags.precision = arg; + } + } else { + const tmp = wOrP === WorP.WIDTH ? "WIDTH" : "PREC"; + this.tmpError = `%!(BAD ${tmp} '${this.args[this.argNum]}')`; + } + this.argNum++; + } + + /** + * Handle width and precision + * @param flags + */ + handleWidthAndPrecision(flags: Flags) { + const fmt = this.format; + for (; this.i !== this.format.length; ++this.i) { + const c = fmt[this.i]!; + switch (this.state) { + case State.WIDTH: + switch (c) { + case ".": + // initialize precision, %9.f -> precision=0 + this.flags.precision = 0; + this.state = State.PRECISION; + break; + case "*": + this.handleWidthOrPrecisionRef(WorP.WIDTH); + // force . or flag at this point + break; + default: { + const val = parseInt(c); + // most likely parseInt does something stupid that makes + // it unusable for this scenario ... + // if we encounter a non (number|*|.) we're done with prec & wid + if (isNaN(val)) { + this.i--; + this.state = State.PERCENT; + return; + } + flags.width = flags.width === -1 ? 0 : flags.width; + flags.width *= 10; + flags.width += val; + } + } // switch c + break; + case State.PRECISION: { + if (c === "*") { + this.handleWidthOrPrecisionRef(WorP.PRECISION); + break; + } + const val = parseInt(c); + if (isNaN(val)) { + // one too far, rewind + this.i--; + this.state = State.PERCENT; + return; + } + flags.precision *= 10; + flags.precision += val; + break; + } + default: + throw new Error("can't be here. bug."); + } // switch state + } + } + + /** Handle positional */ + handlePositional() { + if (this.format[this.i] !== "[") { + // sanity only + throw new Error("Can't happen? Bug."); + } + let positional = 0; + const format = this.format; + this.i++; + let err = false; + for (; this.i !== this.format.length; ++this.i) { + if (format[this.i] === "]") { + break; + } + positional *= 10; + const val = parseInt(format[this.i]!, 10); + if (isNaN(val)) { + //throw new Error( + // `invalid character in positional: ${format}[${format[this.i]}]` + //); + this.tmpError = "%!(BAD INDEX)"; + err = true; + } + positional += val; + } + if (positional - 1 >= this.args.length) { + this.tmpError = "%!(BAD INDEX)"; + err = true; + } + this.argNum = err ? this.argNum : positional - 1; + } + + /** Handle less than */ + handleLessThan(): string { + // deno-lint-ignore no-explicit-any + const arg = this.args[this.argNum] as any; + if ((arg || {}).constructor.name !== "Array") { + throw new Error(`arg ${arg} is not an array. Todo better error handling`); + } + let str = "[ "; + for (let i = 0; i !== arg.length; ++i) { + if (i !== 0) str += ", "; + str += this._handleVerb(arg[i]); + } + return str + " ]"; + } + + /** Handle verb */ + handleVerb() { + const verb = this.format[this.i]; + this.verb = verb || this.verb; + if (this.tmpError) { + this.buf += this.tmpError; + this.tmpError = undefined; + if (this.argNum < this.haveSeen.length) { + this.haveSeen[this.argNum] = true; // keep track of used args + } + } else if (this.args.length <= this.argNum) { + this.buf += `%!(MISSING '${verb}')`; + } else { + const arg = this.args[this.argNum]; // check out of range + this.haveSeen[this.argNum] = true; // keep track of used args + if (this.flags.lessthan) { + this.buf += this.handleLessThan(); + } else { + this.buf += this._handleVerb(arg); + } + } + this.argNum++; // if there is a further positional, it will reset. + this.state = State.PASSTHROUGH; + } + + // deno-lint-ignore no-explicit-any + _handleVerb(arg: any): string { + switch (this.verb) { + case "t": + return this.pad(arg.toString()); + case "b": + return this.fmtNumber(arg as number, 2); + case "c": + return this.fmtNumberCodePoint(arg as number); + case "d": + return this.fmtNumber(arg as number, 10); + case "o": + return this.fmtNumber(arg as number, 8); + case "x": + return this.fmtHex(arg); + case "X": + return this.fmtHex(arg, true); + case "e": + return this.fmtFloatE(arg as number); + case "E": + return this.fmtFloatE(arg as number, true); + case "f": + case "F": + return this.fmtFloatF(arg as number); + case "g": + return this.fmtFloatG(arg as number); + case "G": + return this.fmtFloatG(arg as number, true); + case "s": + return this.fmtString(arg as string); + case "T": + return this.fmtString(typeof arg); + case "v": + return this.fmtV(arg); + case "j": + return this.fmtJ(arg); + case "i": + return this.fmtI(arg, false); + case "I": + return this.fmtI(arg, true); + default: + return `%!(BAD VERB '${this.verb}')`; + } + } + + /** + * Pad a string + * @param s text to pad + */ + pad(s: string): string { + const padding = this.flags.zero ? "0" : " "; + + if (this.flags.dash) { + return s.padEnd(this.flags.width, padding); + } + + return s.padStart(this.flags.width, padding); + } + + /** + * Pad a number + * @param nStr + * @param neg + */ + padNum(nStr: string, neg: boolean): string { + let sign: string; + if (neg) { + sign = "-"; + } else if (this.flags.plus || this.flags.space) { + sign = this.flags.plus ? "+" : " "; + } else { + sign = ""; + } + const zero = this.flags.zero; + if (!zero) { + // sign comes in front of padding when padding w/ zero, + // in from of value if padding with spaces. + nStr = sign + nStr; + } + + const pad = zero ? "0" : " "; + const len = zero ? this.flags.width - sign.length : this.flags.width; + + if (this.flags.dash) { + nStr = nStr.padEnd(len, pad); + } else { + nStr = nStr.padStart(len, pad); + } + + if (zero) { + // see above + nStr = sign + nStr; + } + return nStr; + } + + /** + * Format a number + * @param n + * @param radix + * @param upcase + */ + fmtNumber(n: number, radix: number, upcase = false): string { + let num = Math.abs(n).toString(radix); + const prec = this.flags.precision; + if (prec !== -1) { + this.flags.zero = false; + num = n === 0 && prec === 0 ? "" : num; + while (num.length < prec) { + num = "0" + num; + } + } + let prefix = ""; + if (this.flags.sharp) { + switch (radix) { + case 2: + prefix += "0b"; + break; + case 8: + // don't annotate octal 0 with 0... + prefix += num.startsWith("0") ? "" : "0"; + break; + case 16: + prefix += "0x"; + break; + default: + throw new Error("cannot handle base: " + radix); + } + } + // don't add prefix in front of value truncated by precision=0, val=0 + num = num.length === 0 ? num : prefix + num; + if (upcase) { + num = num.toUpperCase(); + } + return this.padNum(num, n < 0); + } + + /** + * Format number with code points + * @param n + */ + fmtNumberCodePoint(n: number): string { + let s = ""; + try { + s = String.fromCodePoint(n); + } catch { + s = UNICODE_REPLACEMENT_CHARACTER; + } + return this.pad(s); + } + + /** + * Format special float + * @param n + */ + fmtFloatSpecial(n: number): string { + // formatting of NaN and Inf are pants-on-head + // stupid and more or less arbitrary. + + if (isNaN(n)) { + this.flags.zero = false; + return this.padNum("NaN", false); + } + if (n === Number.POSITIVE_INFINITY) { + this.flags.zero = false; + this.flags.plus = true; + return this.padNum("Inf", false); + } + if (n === Number.NEGATIVE_INFINITY) { + this.flags.zero = false; + return this.padNum("Inf", true); + } + return ""; + } + + /** + * Round fraction to precision + * @param fractional + * @param precision + * @returns tuple of fractional and round + */ + roundFractionToPrecision( + fractional: string, + precision: number, + ): [string, boolean] { + let round = false; + if (fractional.length > precision) { + fractional = "1" + fractional; // prepend a 1 in case of leading 0 + let tmp = parseInt(fractional.slice(0, precision + 2)) / 10; + tmp = Math.round(tmp); + fractional = Math.floor(tmp).toString(); + round = fractional[0] === "2"; + fractional = fractional.slice(1); // remove extra 1 + } else { + while (fractional.length < precision) { + fractional += "0"; + } + } + return [fractional, round]; + } + + /** + * Format float E + * @param n + * @param upcase + */ + fmtFloatE(n: number, upcase = false): string { + const special = this.fmtFloatSpecial(n); + if (special !== "") { + return special; + } + + const m = n.toExponential().match(FLOAT_REGEXP); + if (!m) { + throw Error("can't happen, bug"); + } + const precision = this.flags.precision !== -1 + ? this.flags.precision + : DEFAULT_PRECISION; + const [fractional, rounding] = this.roundFractionToPrecision( + m[F.fractional] || "", + precision, + ); + + let e = m[F.exponent]!; + let esign = m[F.esign]!; + // scientific notation output with exponent padded to minlen 2 + let mantissa = parseInt(m[F.mantissa]!); + if (rounding) { + mantissa += 1; + if (10 <= mantissa) { + mantissa = 1; + const r = parseInt(esign + e) + 1; + e = r.toString(); + esign = r < 0 ? "-" : "+"; + } + } + e = e.length === 1 ? "0" + e : e; + const val = `${mantissa}.${fractional}${upcase ? "E" : "e"}${esign}${e}`; + return this.padNum(val, n < 0); + } + + /** + * Format float F + * @param n + */ + fmtFloatF(n: number): string { + const special = this.fmtFloatSpecial(n); + if (special !== "") { + return special; + } + + // stupid helper that turns a number into a (potentially) + // VERY long string. + function expandNumber(n: number): string { + if (Number.isSafeInteger(n)) { + return n.toString() + "."; + } + + const t = n.toExponential().split("e"); + let m = t[0]!.replace(".", ""); + const e = parseInt(t[1]!); + if (e < 0) { + let nStr = "0."; + for (let i = 0; i !== Math.abs(e) - 1; ++i) { + nStr += "0"; + } + return (nStr += m); + } else { + const splIdx = e + 1; + while (m.length < splIdx) { + m += "0"; + } + return m.slice(0, splIdx) + "." + m.slice(splIdx); + } + } + // avoiding sign makes padding easier + const val = expandNumber(Math.abs(n)) as string; + let [dig, fractional] = val.split(".") as [string, string]; + + const precision = this.flags.precision !== -1 + ? this.flags.precision + : DEFAULT_PRECISION; + let round = false; + [fractional, round] = this.roundFractionToPrecision(fractional, precision); + if (round) { + dig = (parseInt(dig) + 1).toString(); + } + return this.padNum(`${dig}.${fractional}`, n < 0); + } + + /** + * Format float G + * @param n + * @param upcase + */ + fmtFloatG(n: number, upcase = false): string { + const special = this.fmtFloatSpecial(n); + if (special !== "") { + return special; + } + + // The double argument representing a floating-point number shall be + // converted in the style f or e (or in the style F or E in + // the case of a G conversion specifier), depending on the + // value converted and the precision. Let P equal the + // precision if non-zero, 6 if the precision is omitted, or 1 + // if the precision is zero. Then, if a conversion with style E would + // have an exponent of X: + + // - If P > X>=-4, the conversion shall be with style f (or F ) + // and precision P -( X+1). + + // - Otherwise, the conversion shall be with style e (or E ) + // and precision P -1. + + // Finally, unless the '#' flag is used, any trailing zeros shall be + // removed from the fractional portion of the result and the + // decimal-point character shall be removed if there is no + // fractional portion remaining. + + // A double argument representing an infinity or NaN shall be + // converted in the style of an f or F conversion specifier. + // https://pubs.opengroup.org/onlinepubs/9699919799/functions/fprintf.html + + let P = this.flags.precision !== -1 + ? this.flags.precision + : DEFAULT_PRECISION; + P = P === 0 ? 1 : P; + + const m = n.toExponential().match(FLOAT_REGEXP); + if (!m) { + throw Error("can't happen"); + } + + const X = parseInt(m[F.exponent]!) * (m[F.esign] === "-" ? -1 : 1); + let nStr = ""; + if (P > X && X >= -4) { + this.flags.precision = P - (X + 1); + nStr = this.fmtFloatF(n); + if (!this.flags.sharp) { + nStr = nStr.replace(/\.?0*$/, ""); + } + } else { + this.flags.precision = P - 1; + nStr = this.fmtFloatE(n); + if (!this.flags.sharp) { + nStr = nStr.replace(/\.?0*e/, upcase ? "E" : "e"); + } + } + return nStr; + } + + /** + * Format string + * @param s + */ + fmtString(s: string): string { + if (this.flags.precision !== -1) { + s = s.slice(0, this.flags.precision); + } + return this.pad(s); + } + + /** + * Format hex + * @param val + * @param upper + */ + fmtHex(val: string | number, upper = false): string { + // allow others types ? + switch (typeof val) { + case "number": + return this.fmtNumber(val as number, 16, upper); + case "string": { + const sharp = this.flags.sharp && val.length !== 0; + let hex = sharp ? "0x" : ""; + const prec = this.flags.precision; + const end = prec !== -1 ? min(prec, val.length) : val.length; + for (let i = 0; i !== end; ++i) { + if (i !== 0 && this.flags.space) { + hex += sharp ? " 0x" : " "; + } + // TODO(bartlomieju): for now only taking into account the + // lower half of the codePoint, ie. as if a string + // is a list of 8bit values instead of UCS2 runes + const c = (val.charCodeAt(i) & 0xff).toString(16); + hex += c.length === 1 ? `0${c}` : c; + } + if (upper) { + hex = hex.toUpperCase(); + } + return this.pad(hex); + } + default: + throw new Error( + "currently only number and string are implemented for hex", + ); + } + } + + /** + * Format value + * @param val + */ + fmtV(val: Record): string { + if (this.flags.sharp) { + const options = this.flags.precision !== -1 + ? { depth: this.flags.precision } + : {}; + return this.pad(Deno.inspect(val, options)); + } else { + const p = this.flags.precision; + return p === -1 ? val.toString() : val.toString().slice(0, p); + } + } + + /** + * Format JSON + * @param val + */ + fmtJ(val: unknown): string { + return JSON.stringify(val); + } + + /** + * Format inspect + * @param val + * @param compact Whether or not the output should be compact. + */ + fmtI(val: unknown, compact: boolean): string { + return Deno.inspect(val, { + colors: !Deno?.noColor, + compact, + depth: Infinity, + iterableLimit: Infinity, + }); + } +} + +/** + * Converts and format a variable number of `args` as is specified by `format`. + * `sprintf` returns the formatted string. + * + * @param format + * @param args + */ +export function sprintf(format: string, ...args: unknown[]): string { + const printf = new Printf(format, ...args); + return printf.doPrintf(); +} + +/** + * Converts and format a variable number of `args` as is specified by `format`. + * `printf` writes the formatted string to standard output. + * @param format + * @param args + */ +export function printf(format: string, ...args: unknown[]) { + const s = sprintf(format, ...args); + Deno.stdout.writeSync(new TextEncoder().encode(s)); +} diff --git a/src/vendor/jsr.io/@std/fmt/0.225.6/bytes.ts b/src/vendor/jsr.io/@std/fmt/0.225.6/bytes.ts new file mode 100644 index 00000000000..f9490a69b60 --- /dev/null +++ b/src/vendor/jsr.io/@std/fmt/0.225.6/bytes.ts @@ -0,0 +1,181 @@ +// Copyright 2014-2021 Sindre Sorhus. All rights reserved. MIT license. +// Copyright 2021 Yoshiya Hinosawa. All rights reserved. MIT license. +// Copyright 2021 Giuseppe Eletto. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +type LocaleOptions = { + minimumFractionDigits?: number; + maximumFractionDigits?: number; +}; + +/** Options for {@linkcode format}. */ +export interface FormatOptions { + /** + * Uses bits representation. + * + * @default {false} + */ + bits?: boolean; + /** + * Uses binary bytes (e.g. kibibyte). + * + * @default {false} + */ + binary?: boolean; + /** + * Include plus sign for positive numbers. + * + * @default {false} + */ + signed?: boolean; + /** + * Uses localized number formatting. If it is set to true, uses default + * locale on the system. If it's set to string, uses that locale. The given + * string should be a + * {@link https://en.wikipedia.org/wiki/IETF_language_tag | BCP 47 language tag}. + * You can also give the list of language tags. + */ + locale?: boolean | string | string[]; + /** + * The minimum number of fraction digits to display. If neither + * {@linkcode minimumFractionDigits} or {@linkcode maximumFractionDigits} + * are set, the default behavior is to round to 3 significant digits. + */ + minimumFractionDigits?: number; + /** + * The maximum number of fraction digits to display. If neither + * {@linkcode minimumFractionDigits} or {@linkcode maximumFractionDigits} + * are set, the default behavior is to round to 3 significant digits. + */ + maximumFractionDigits?: number; +} + +/** + * Convert bytes to a human-readable string: 1337 → 1.34 kB + * + * Based on {@link https://github.com/sindresorhus/pretty-bytes | pretty-bytes}. + * A utility for displaying file sizes for humans. + * + * @param num The bytes value to format + * @param options The options for formatting + * @returns The formatted string + * + * @example Basic usage + * ```ts + * import { format } from "@std/fmt/bytes"; + * import { assertEquals } from "@std/assert"; + * + * assertEquals(format(1337), "1.34 kB"); + * assertEquals(format(100), "100 B"); + * ``` + * + * @example Include bits representation + * + * ```ts + * import { format } from "@std/fmt/bytes"; + * import { assertEquals } from "@std/assert"; + * + * assertEquals(format(1337, { bits: true }), "1.34 kbit"); + * ``` + * + * @example Include sign + * + * ```ts + * import { format } from "@std/fmt/bytes"; + * import { assertEquals } from "@std/assert"; + * + * assertEquals(format(42, { signed: true }), "+42 B"); + * assertEquals(format(-42, { signed: true }), "-42 B"); + * ``` + * + * @example Change locale + * + * ```ts + * import { format } from "@std/fmt/bytes"; + * import { assertEquals } from "@std/assert"; + * + * assertEquals(format(1337, { locale: "de" }), "1,34 kB"); + * ``` + */ +export function format( + num: number, + options: FormatOptions = {}, +): string { + if (!Number.isFinite(num)) { + throw new TypeError(`Expected a finite number, got ${typeof num}: ${num}`); + } + + const UNITS_FIRSTLETTER = (options.bits ? "b" : "B") + "kMGTPEZY"; + + if (options.signed && num === 0) { + return ` 0 ${UNITS_FIRSTLETTER[0]}`; + } + + const prefix = num < 0 ? "-" : (options.signed ? "+" : ""); + num = Math.abs(num); + + const localeOptions = getLocaleOptions(options); + + if (num < 1) { + const numberString = toLocaleString(num, options.locale, localeOptions); + return prefix + numberString + " " + UNITS_FIRSTLETTER[0]; + } + + const exponent = Math.min( + Math.floor( + options.binary ? Math.log(num) / Math.log(1024) : Math.log10(num) / 3, + ), + UNITS_FIRSTLETTER.length - 1, + ); + num /= Math.pow(options.binary ? 1024 : 1000, exponent); + + if (!localeOptions) { + num = Number(num.toPrecision(3)); + } + + const numberString = toLocaleString( + num, + options.locale, + localeOptions, + ); + + let unit = UNITS_FIRSTLETTER[exponent]; + if (exponent > 0) { + unit += options.binary ? "i" : ""; + unit += options.bits ? "bit" : "B"; + } + + return prefix + numberString + " " + unit; +} + +function getLocaleOptions( + { maximumFractionDigits, minimumFractionDigits }: FormatOptions, +): LocaleOptions | undefined { + if (maximumFractionDigits || minimumFractionDigits) { + return { + maximumFractionDigits, + minimumFractionDigits, + }; + } +} + +/** + * Formats the given number using `Number#toLocaleString`. + * - If locale is a string, the value is expected to be a locale-key (for example: `de`). + * - If locale is true, the system default locale is used for translation. + * - If no value for locale is specified, the number is returned unmodified. + */ +function toLocaleString( + num: number, + locale: boolean | string | string[] | undefined, + options: LocaleOptions | undefined, +): string { + if (typeof locale === "string" || Array.isArray(locale)) { + return num.toLocaleString(locale, options); + } else if (locale === true || options !== undefined) { + return num.toLocaleString(undefined, options); + } + + return num.toString(); +} diff --git a/src/vendor/jsr.io/@std/fmt/0.225.6/colors.ts b/src/vendor/jsr.io/@std/fmt/0.225.6/colors.ts new file mode 100644 index 00000000000..623d29447c7 --- /dev/null +++ b/src/vendor/jsr.io/@std/fmt/0.225.6/colors.ts @@ -0,0 +1,1016 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +// A module to print ANSI terminal colors. Inspired by chalk, kleur, and colors +// on npm. + +/** + * String formatters and utilities for dealing with ANSI color codes. + * + * This module supports `NO_COLOR` environmental variable disabling any coloring + * if `NO_COLOR` is set. + * + * ```ts no-assert + * import { + * bgBlue, + * bgRgb24, + * bgRgb8, + * bold, + * italic, + * red, + * rgb24, + * rgb8, + * } from "@std/fmt/colors"; + * + * console.log(bgBlue(italic(red(bold("Hello, World!"))))); + * + * // also supports 8bit colors + * + * console.log(rgb8("Hello, World!", 42)); + * + * console.log(bgRgb8("Hello, World!", 42)); + * + * // and 24bit rgb + * + * console.log(rgb24("Hello, World!", { + * r: 41, + * g: 42, + * b: 43, + * })); + * + * console.log(bgRgb24("Hello, World!", { + * r: 41, + * g: 42, + * b: 43, + * })); + * ``` + * + * @module + */ + +// deno-lint-ignore no-explicit-any +const { Deno } = globalThis as any; +const noColor = typeof Deno?.noColor === "boolean" + ? Deno.noColor as boolean + : false; + +interface Code { + open: string; + close: string; + regexp: RegExp; +} + +/** RGB 8-bits per channel. Each in range `0->255` or `0x00->0xff` */ +export interface Rgb { + /** Red component value */ + r: number; + /** Green component value */ + g: number; + /** Blue component value */ + b: number; +} + +let enabled = !noColor; + +/** + * Enable or disable text color when styling. + * + * `@std/fmt/colors` automatically detects NO_COLOR environmental variable + * and disables text color. Use this API only when the automatic detection + * doesn't work. + * + * @example Usage + * ```ts no-assert + * import { setColorEnabled } from "@std/fmt/colors"; + * + * // Disable text color + * setColorEnabled(false); + * + * // Enable text color + * setColorEnabled(true); + * ``` + * + * @param value The boolean value to enable or disable text color + */ +export function setColorEnabled(value: boolean) { + if (Deno?.noColor) { + return; + } + + enabled = value; +} + +/** + * Get whether text color change is enabled or disabled. + * + * @example Usage + * ```ts no-assert + * import { getColorEnabled } from "@std/fmt/colors"; + * + * console.log(getColorEnabled()); // true if enabled, false if disabled + * ``` + * @returns `true` if text color is enabled, `false` otherwise + */ +export function getColorEnabled(): boolean { + return enabled; +} + +/** + * Builds color code + * @param open + * @param close + */ +function code(open: number[], close: number): Code { + return { + open: `\x1b[${open.join(";")}m`, + close: `\x1b[${close}m`, + regexp: new RegExp(`\\x1b\\[${close}m`, "g"), + }; +} + +/** + * Applies color and background based on color code and its associated text + * @param str The text to apply color settings to + * @param code The color code to apply + */ +function run(str: string, code: Code): string { + return enabled + ? `${code.open}${str.replace(code.regexp, code.open)}${code.close}` + : str; +} + +/** + * Reset the text modified. + * + * @example Usage + * ```ts no-assert + * import { reset } from "@std/fmt/colors"; + * + * console.log(reset("Hello, world!")); + * ``` + * + * @param str The text to reset + * @returns The text with reset color + */ +export function reset(str: string): string { + return run(str, code([0], 0)); +} + +/** + * Make the text bold. + * + * @example Usage + * ```ts no-assert + * import { bold } from "@std/fmt/colors"; + * + * console.log(bold("Hello, world!")); + * ``` + * + * @param str The text to make bold + * @returns The bold text + */ +export function bold(str: string): string { + return run(str, code([1], 22)); +} + +/** + * The text emits only a small amount of light. + * + * @example Usage + * ```ts no-assert + * import { dim } from "@std/fmt/colors"; + * + * console.log(dim("Hello, world!")); + * ``` + * + * @param str The text to dim + * @returns The dimmed text + * + * Warning: Not all terminal emulators support `dim`. + * For compatibility across all terminals, use {@linkcode gray} or {@linkcode brightBlack} instead. + */ +export function dim(str: string): string { + return run(str, code([2], 22)); +} + +/** + * Make the text italic. + * + * @example Usage + * ```ts no-assert + * import { italic } from "@std/fmt/colors"; + * + * console.log(italic("Hello, world!")); + * ``` + * + * @param str The text to make italic + * @returns The italic text + */ +export function italic(str: string): string { + return run(str, code([3], 23)); +} + +/** + * Make the text underline. + * + * @example Usage + * ```ts no-assert + * import { underline } from "@std/fmt/colors"; + * + * console.log(underline("Hello, world!")); + * ``` + * + * @param str The text to underline + * @returns The underlined text + */ +export function underline(str: string): string { + return run(str, code([4], 24)); +} + +/** + * Invert background color and text color. + * + * @example Usage + * ```ts no-assert + * import { inverse } from "@std/fmt/colors"; + * + * console.log(inverse("Hello, world!")); + * ``` + * + * @param str The text to invert its color + * @returns The inverted text + */ +export function inverse(str: string): string { + return run(str, code([7], 27)); +} + +/** + * Make the text hidden. + * + * @example Usage + * ```ts no-assert + * import { hidden } from "@std/fmt/colors"; + * + * console.log(hidden("Hello, world!")); + * ``` + * + * @param str The text to hide + * @returns The hidden text + */ +export function hidden(str: string): string { + return run(str, code([8], 28)); +} + +/** + * Put horizontal line through the center of the text. + * + * @example Usage + * ```ts no-assert + * import { strikethrough } from "@std/fmt/colors"; + * + * console.log(strikethrough("Hello, world!")); + * ``` + * + * @param str The text to strike through + * @returns The text with horizontal line through the center + */ +export function strikethrough(str: string): string { + return run(str, code([9], 29)); +} + +/** + * Set text color to black. + * + * @example Usage + * ```ts no-assert + * import { black } from "@std/fmt/colors"; + * + * console.log(black("Hello, world!")); + * ``` + * + * @param str The text to make black + * @returns The black text + */ +export function black(str: string): string { + return run(str, code([30], 39)); +} + +/** + * Set text color to red. + * + * @example Usage + * ```ts no-assert + * import { red } from "@std/fmt/colors"; + * + * console.log(red("Hello, world!")); + * ``` + * + * @param str The text to make red + * @returns The red text + */ +export function red(str: string): string { + return run(str, code([31], 39)); +} + +/** + * Set text color to green. + * + * @example Usage + * ```ts no-assert + * import { green } from "@std/fmt/colors"; + * + * console.log(green("Hello, world!")); + * ``` + * + * @param str The text to make green + * @returns The green text + */ +export function green(str: string): string { + return run(str, code([32], 39)); +} + +/** + * Set text color to yellow. + * + * @example Usage + * ```ts no-assert + * import { yellow } from "@std/fmt/colors"; + * + * console.log(yellow("Hello, world!")); + * ``` + * + * @param str The text to make yellow + * @returns The yellow text + */ +export function yellow(str: string): string { + return run(str, code([33], 39)); +} + +/** + * Set text color to blue. + * + * @example Usage + * ```ts no-assert + * import { blue } from "@std/fmt/colors"; + * + * console.log(blue("Hello, world!")); + * ``` + * + * @param str The text to make blue + * @returns The blue text + */ +export function blue(str: string): string { + return run(str, code([34], 39)); +} + +/** + * Set text color to magenta. + * + * @example Usage + * ```ts no-assert + * import { magenta } from "@std/fmt/colors"; + * + * console.log(magenta("Hello, world!")); + * ``` + * + * @param str The text to make magenta + * @returns The magenta text + */ +export function magenta(str: string): string { + return run(str, code([35], 39)); +} + +/** + * Set text color to cyan. + * + * @example Usage + * ```ts no-assert + * import { cyan } from "@std/fmt/colors"; + * + * console.log(cyan("Hello, world!")); + * ``` + * + * @param str The text to make cyan + * @returns The cyan text + */ +export function cyan(str: string): string { + return run(str, code([36], 39)); +} + +/** + * Set text color to white. + * + * @example Usage + * ```ts no-assert + * import { white } from "@std/fmt/colors"; + * + * console.log(white("Hello, world!")); + * ``` + * + * @param str The text to make white + * @returns The white text + */ +export function white(str: string): string { + return run(str, code([37], 39)); +} + +/** + * Set text color to gray. + * + * @example Usage + * ```ts no-assert + * import { gray } from "@std/fmt/colors"; + * + * console.log(gray("Hello, world!")); + * ``` + * + * @param str The text to make gray + * @returns The gray text + */ +export function gray(str: string): string { + return brightBlack(str); +} + +/** + * Set text color to bright black. + * + * @example Usage + * ```ts no-assert + * import { brightBlack } from "@std/fmt/colors"; + * + * console.log(brightBlack("Hello, world!")); + * ``` + * + * @param str The text to make bright black + * @returns The bright black text + */ +export function brightBlack(str: string): string { + return run(str, code([90], 39)); +} + +/** + * Set text color to bright red. + * + * @example Usage + * ```ts no-assert + * import { brightRed } from "@std/fmt/colors"; + * + * console.log(brightRed("Hello, world!")); + * ``` + * + * @param str The text to make bright red + * @returns The bright red text + */ +export function brightRed(str: string): string { + return run(str, code([91], 39)); +} + +/** + * Set text color to bright green. + * + * @example Usage + * ```ts no-assert + * import { brightGreen } from "@std/fmt/colors"; + * + * console.log(brightGreen("Hello, world!")); + * ``` + * + * @param str The text to make bright green + * @returns The bright green text + */ +export function brightGreen(str: string): string { + return run(str, code([92], 39)); +} + +/** + * Set text color to bright yellow. + * + * @example Usage + * ```ts no-assert + * import { brightYellow } from "@std/fmt/colors"; + * + * console.log(brightYellow("Hello, world!")); + * ``` + * + * @param str The text to make bright yellow + * @returns The bright yellow text + */ +export function brightYellow(str: string): string { + return run(str, code([93], 39)); +} + +/** + * Set text color to bright blue. + * + * @example Usage + * ```ts no-assert + * import { brightBlue } from "@std/fmt/colors"; + * + * console.log(brightBlue("Hello, world!")); + * ``` + * + * @param str The text to make bright blue + * @returns The bright blue text + */ +export function brightBlue(str: string): string { + return run(str, code([94], 39)); +} + +/** + * Set text color to bright magenta. + * + * @example Usage + * ```ts no-assert + * import { brightMagenta } from "@std/fmt/colors"; + * + * console.log(brightMagenta("Hello, world!")); + * ``` + * + * @param str The text to make bright magenta + * @returns The bright magenta text + */ +export function brightMagenta(str: string): string { + return run(str, code([95], 39)); +} + +/** + * Set text color to bright cyan. + * + * @example Usage + * ```ts no-assert + * import { brightCyan } from "@std/fmt/colors"; + * + * console.log(brightCyan("Hello, world!")); + * ``` + * + * @param str The text to make bright cyan + * @returns The bright cyan text + */ +export function brightCyan(str: string): string { + return run(str, code([96], 39)); +} + +/** + * Set text color to bright white. + * + * @example Usage + * ```ts no-assert + * import { brightWhite } from "@std/fmt/colors"; + * + * console.log(brightWhite("Hello, world!")); + * ``` + * + * @param str The text to make bright white + * @returns The bright white text + */ +export function brightWhite(str: string): string { + return run(str, code([97], 39)); +} + +/** + * Set background color to black. + * + * @example Usage + * ```ts no-assert + * import { bgBlack } from "@std/fmt/colors"; + * + * console.log(bgBlack("Hello, world!")); + * ``` + * + * @param str The text to make its background black + * @returns The text with black background + */ +export function bgBlack(str: string): string { + return run(str, code([40], 49)); +} + +/** + * Set background color to red. + * + * @example Usage + * ```ts no-assert + * import { bgRed } from "@std/fmt/colors"; + * + * console.log(bgRed("Hello, world!")); + * ``` + * + * @param str The text to make its background red + * @returns The text with red background + */ +export function bgRed(str: string): string { + return run(str, code([41], 49)); +} + +/** + * Set background color to green. + * + * @example Usage + * ```ts no-assert + * import { bgGreen } from "@std/fmt/colors"; + * + * console.log(bgGreen("Hello, world!")); + * ``` + * + * @param str The text to make its background green + * @returns The text with green background + */ +export function bgGreen(str: string): string { + return run(str, code([42], 49)); +} + +/** + * Set background color to yellow. + * + * @example Usage + * ```ts no-assert + * import { bgYellow } from "@std/fmt/colors"; + * + * console.log(bgYellow("Hello, world!")); + * ``` + * + * @param str The text to make its background yellow + * @returns The text with yellow background + */ +export function bgYellow(str: string): string { + return run(str, code([43], 49)); +} + +/** + * Set background color to blue. + * + * @example Usage + * ```ts no-assert + * import { bgBlue } from "@std/fmt/colors"; + * + * console.log(bgBlue("Hello, world!")); + * ``` + * + * @param str The text to make its background blue + * @returns The text with blue background + */ +export function bgBlue(str: string): string { + return run(str, code([44], 49)); +} + +/** + * Set background color to magenta. + * + * @example Usage + * ```ts no-assert + * import { bgMagenta } from "@std/fmt/colors"; + * + * console.log(bgMagenta("Hello, world!")); + * ``` + * + * @param str The text to make its background magenta + * @returns The text with magenta background + */ +export function bgMagenta(str: string): string { + return run(str, code([45], 49)); +} + +/** + * Set background color to cyan. + * + * @example Usage + * ```ts no-assert + * import { bgCyan } from "@std/fmt/colors"; + * + * console.log(bgCyan("Hello, world!")); + * ``` + * + * @param str The text to make its background cyan + * @returns The text with cyan background + */ +export function bgCyan(str: string): string { + return run(str, code([46], 49)); +} + +/** + * Set background color to white. + * + * @example Usage + * ```ts no-assert + * import { bgWhite } from "@std/fmt/colors"; + * + * console.log(bgWhite("Hello, world!")); + * ``` + * + * @param str The text to make its background white + * @returns The text with white background + */ +export function bgWhite(str: string): string { + return run(str, code([47], 49)); +} + +/** + * Set background color to bright black. + * + * @example Usage + * ```ts no-assert + * import { bgBrightBlack } from "@std/fmt/colors"; + * + * console.log(bgBrightBlack("Hello, world!")); + * ``` + * + * @param str The text to make its background bright black + * @returns The text with bright black background + */ +export function bgBrightBlack(str: string): string { + return run(str, code([100], 49)); +} + +/** + * Set background color to bright red. + * + * @example Usage + * ```ts no-assert + * import { bgBrightRed } from "@std/fmt/colors"; + * + * console.log(bgBrightRed("Hello, world!")); + * ``` + * + * @param str The text to make its background bright red + * @returns The text with bright red background + */ +export function bgBrightRed(str: string): string { + return run(str, code([101], 49)); +} + +/** + * Set background color to bright green. + * + * @example Usage + * ```ts no-assert + * import { bgBrightGreen } from "@std/fmt/colors"; + * + * console.log(bgBrightGreen("Hello, world!")); + * ``` + * + * @param str The text to make its background bright green + * @returns The text with bright green background + */ +export function bgBrightGreen(str: string): string { + return run(str, code([102], 49)); +} + +/** + * Set background color to bright yellow. + * + * @example Usage + * ```ts no-assert + * import { bgBrightYellow } from "@std/fmt/colors"; + * + * console.log(bgBrightYellow("Hello, world!")); + * ``` + * + * @param str The text to make its background bright yellow + * @returns The text with bright yellow background + */ +export function bgBrightYellow(str: string): string { + return run(str, code([103], 49)); +} + +/** + * Set background color to bright blue. + * + * @example Usage + * ```ts no-assert + * import { bgBrightBlue } from "@std/fmt/colors"; + * + * console.log(bgBrightBlue("Hello, world!")); + * ``` + * + * @param str The text to make its background bright blue + * @returns The text with bright blue background + */ +export function bgBrightBlue(str: string): string { + return run(str, code([104], 49)); +} + +/** + * Set background color to bright magenta. + * + * @example Usage + * ```ts no-assert + * import { bgBrightMagenta } from "@std/fmt/colors"; + * + * console.log(bgBrightMagenta("Hello, world!")); + * ``` + * + * @param str The text to make its background bright magenta + * @returns The text with bright magenta background + */ +export function bgBrightMagenta(str: string): string { + return run(str, code([105], 49)); +} + +/** + * Set background color to bright cyan. + * + * @example Usage + * ```ts no-assert + * import { bgBrightCyan } from "@std/fmt/colors"; + * + * console.log(bgBrightCyan("Hello, world!")); + * ``` + * + * @param str The text to make its background bright cyan + * @returns The text with bright cyan background + */ +export function bgBrightCyan(str: string): string { + return run(str, code([106], 49)); +} + +/** + * Set background color to bright white. + * + * @example Usage + * ```ts no-assert + * import { bgBrightWhite } from "@std/fmt/colors"; + * + * console.log(bgBrightWhite("Hello, world!")); + * ``` + * + * @param str The text to make its background bright white + * @returns The text with bright white background + */ +export function bgBrightWhite(str: string): string { + return run(str, code([107], 49)); +} + +/* Special Color Sequences */ + +/** + * Clam and truncate color codes + * @param n The input number + * @param max The number to truncate to + * @param min The number to truncate from + */ +function clampAndTruncate(n: number, max = 255, min = 0): number { + return Math.trunc(Math.max(Math.min(n, max), min)); +} + +/** + * Set text color using paletted 8bit colors. + * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit + * + * @example Usage + * ```ts no-assert + * import { rgb8 } from "@std/fmt/colors"; + * + * console.log(rgb8("Hello, world!", 42)); + * ``` + * + * @param str The text color to apply paletted 8bit colors to + * @param color The color code + * @returns The text with paletted 8bit color + */ +export function rgb8(str: string, color: number): string { + return run(str, code([38, 5, clampAndTruncate(color)], 39)); +} + +/** + * Set background color using paletted 8bit colors. + * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit + * + * @example Usage + * ```ts no-assert + * import { bgRgb8 } from "@std/fmt/colors"; + * + * console.log(bgRgb8("Hello, world!", 42)); + * ``` + * + * @param str The text color to apply paletted 8bit background colors to + * @param color code + * @returns The text with paletted 8bit background color + */ +export function bgRgb8(str: string, color: number): string { + return run(str, code([48, 5, clampAndTruncate(color)], 49)); +} + +/** + * Set text color using 24bit rgb. + * `color` can be a number in range `0x000000` to `0xffffff` or + * an `Rgb`. + * + * @example To produce the color magenta: + * ```ts no-assert + * import { rgb24 } from "@std/fmt/colors"; + * + * rgb24("foo", 0xff00ff); + * rgb24("foo", {r: 255, g: 0, b: 255}); + * ``` + * @param str The text color to apply 24bit rgb to + * @param color The color code + * @returns The text with 24bit rgb color + */ +export function rgb24(str: string, color: number | Rgb): string { + if (typeof color === "number") { + return run( + str, + code( + [38, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff], + 39, + ), + ); + } + return run( + str, + code( + [ + 38, + 2, + clampAndTruncate(color.r), + clampAndTruncate(color.g), + clampAndTruncate(color.b), + ], + 39, + ), + ); +} + +/** + * Set background color using 24bit rgb. + * `color` can be a number in range `0x000000` to `0xffffff` or + * an `Rgb`. + * + * @example To produce the color magenta: + * ```ts no-assert + * import { bgRgb24 } from "@std/fmt/colors"; + * + * bgRgb24("foo", 0xff00ff); + * bgRgb24("foo", {r: 255, g: 0, b: 255}); + * ``` + * @param str The text color to apply 24bit rgb to + * @param color The color code + * @returns The text with 24bit rgb color + */ +export function bgRgb24(str: string, color: number | Rgb): string { + if (typeof color === "number") { + return run( + str, + code( + [48, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff], + 49, + ), + ); + } + return run( + str, + code( + [ + 48, + 2, + clampAndTruncate(color.r), + clampAndTruncate(color.g), + clampAndTruncate(color.b), + ], + 49, + ), + ); +} + +// https://github.com/chalk/ansi-regex/blob/02fa893d619d3da85411acc8fd4e2eea0e95a9d9/index.js +const ANSI_PATTERN = new RegExp( + [ + "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)", + "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TXZcf-nq-uy=><~]))", + ].join("|"), + "g", +); + +/** + * Remove ANSI escape codes from the string. + * + * @example Usage + * ```ts no-assert + * import { stripColor, red } from "@std/fmt/colors"; + * + * console.log(stripColor(red("Hello, world!"))); + * ``` + * + * @param string The text to remove ANSI escape codes from + * @returns The text without ANSI escape codes + * + * @deprecated This will be removed in 1.0.0. Use {@linkcode stripAnsiCode} instead. + */ +export function stripColor(string: string): string { + return stripAnsiCode(string); +} + +/** + * Remove ANSI escape codes from the string. + * + * @example Usage + * ```ts no-assert + * import { stripAnsiCode, red } from "@std/fmt/colors"; + * + * console.log(stripAnsiCode(red("Hello, world!"))); + * ``` + * + * @param string The text to remove ANSI escape codes from + * @returns The text without ANSI escape codes + */ +export function stripAnsiCode(string: string): string { + return string.replace(ANSI_PATTERN, ""); +} diff --git a/src/vendor/jsr.io/@std/fmt/1.0.2/colors.ts b/src/vendor/jsr.io/@std/fmt/1.0.2/colors.ts new file mode 100644 index 00000000000..1ea21810328 --- /dev/null +++ b/src/vendor/jsr.io/@std/fmt/1.0.2/colors.ts @@ -0,0 +1,1002 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +// A module to print ANSI terminal colors. Inspired by chalk, kleur, and colors +// on npm. + +/** + * String formatters and utilities for dealing with ANSI color codes. + * + * > [!IMPORTANT] + * > If printing directly to the console, it's recommended to style console + * > output using CSS (guide + * > {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/console#styling_console_output | here}). + * + * This module supports `NO_COLOR` environmental variable disabling any coloring + * if `NO_COLOR` is set. + * + * ```ts no-assert + * import { + * bgBlue, + * bgRgb24, + * bgRgb8, + * bold, + * italic, + * red, + * rgb24, + * rgb8, + * } from "@std/fmt/colors"; + * + * console.log(bgBlue(italic(red(bold("Hello, World!"))))); + * + * // also supports 8bit colors + * + * console.log(rgb8("Hello, World!", 42)); + * + * console.log(bgRgb8("Hello, World!", 42)); + * + * // and 24bit rgb + * + * console.log(rgb24("Hello, World!", { + * r: 41, + * g: 42, + * b: 43, + * })); + * + * console.log(bgRgb24("Hello, World!", { + * r: 41, + * g: 42, + * b: 43, + * })); + * ``` + * + * @module + */ + +// deno-lint-ignore no-explicit-any +const { Deno } = globalThis as any; +const noColor = typeof Deno?.noColor === "boolean" + ? Deno.noColor as boolean + : false; + +interface Code { + open: string; + close: string; + regexp: RegExp; +} + +/** RGB 8-bits per channel. Each in range `0->255` or `0x00->0xff` */ +export interface Rgb { + /** Red component value */ + r: number; + /** Green component value */ + g: number; + /** Blue component value */ + b: number; +} + +let enabled = !noColor; + +/** + * Enable or disable text color when styling. + * + * `@std/fmt/colors` automatically detects NO_COLOR environmental variable + * and disables text color. Use this API only when the automatic detection + * doesn't work. + * + * @example Usage + * ```ts no-assert + * import { setColorEnabled } from "@std/fmt/colors"; + * + * // Disable text color + * setColorEnabled(false); + * + * // Enable text color + * setColorEnabled(true); + * ``` + * + * @param value The boolean value to enable or disable text color + */ +export function setColorEnabled(value: boolean) { + if (Deno?.noColor) { + return; + } + + enabled = value; +} + +/** + * Get whether text color change is enabled or disabled. + * + * @example Usage + * ```ts no-assert + * import { getColorEnabled } from "@std/fmt/colors"; + * + * console.log(getColorEnabled()); // true if enabled, false if disabled + * ``` + * @returns `true` if text color is enabled, `false` otherwise + */ +export function getColorEnabled(): boolean { + return enabled; +} + +/** + * Builds color code + * @param open + * @param close + */ +function code(open: number[], close: number): Code { + return { + open: `\x1b[${open.join(";")}m`, + close: `\x1b[${close}m`, + regexp: new RegExp(`\\x1b\\[${close}m`, "g"), + }; +} + +/** + * Applies color and background based on color code and its associated text + * @param str The text to apply color settings to + * @param code The color code to apply + */ +function run(str: string, code: Code): string { + return enabled + ? `${code.open}${str.replace(code.regexp, code.open)}${code.close}` + : str; +} + +/** + * Reset the text modified. + * + * @example Usage + * ```ts no-assert + * import { reset } from "@std/fmt/colors"; + * + * console.log(reset("Hello, world!")); + * ``` + * + * @param str The text to reset + * @returns The text with reset color + */ +export function reset(str: string): string { + return run(str, code([0], 0)); +} + +/** + * Make the text bold. + * + * @example Usage + * ```ts no-assert + * import { bold } from "@std/fmt/colors"; + * + * console.log(bold("Hello, world!")); + * ``` + * + * @param str The text to make bold + * @returns The bold text + */ +export function bold(str: string): string { + return run(str, code([1], 22)); +} + +/** + * The text emits only a small amount of light. + * + * @example Usage + * ```ts no-assert + * import { dim } from "@std/fmt/colors"; + * + * console.log(dim("Hello, world!")); + * ``` + * + * @param str The text to dim + * @returns The dimmed text + * + * Warning: Not all terminal emulators support `dim`. + * For compatibility across all terminals, use {@linkcode gray} or {@linkcode brightBlack} instead. + */ +export function dim(str: string): string { + return run(str, code([2], 22)); +} + +/** + * Make the text italic. + * + * @example Usage + * ```ts no-assert + * import { italic } from "@std/fmt/colors"; + * + * console.log(italic("Hello, world!")); + * ``` + * + * @param str The text to make italic + * @returns The italic text + */ +export function italic(str: string): string { + return run(str, code([3], 23)); +} + +/** + * Make the text underline. + * + * @example Usage + * ```ts no-assert + * import { underline } from "@std/fmt/colors"; + * + * console.log(underline("Hello, world!")); + * ``` + * + * @param str The text to underline + * @returns The underlined text + */ +export function underline(str: string): string { + return run(str, code([4], 24)); +} + +/** + * Invert background color and text color. + * + * @example Usage + * ```ts no-assert + * import { inverse } from "@std/fmt/colors"; + * + * console.log(inverse("Hello, world!")); + * ``` + * + * @param str The text to invert its color + * @returns The inverted text + */ +export function inverse(str: string): string { + return run(str, code([7], 27)); +} + +/** + * Make the text hidden. + * + * @example Usage + * ```ts no-assert + * import { hidden } from "@std/fmt/colors"; + * + * console.log(hidden("Hello, world!")); + * ``` + * + * @param str The text to hide + * @returns The hidden text + */ +export function hidden(str: string): string { + return run(str, code([8], 28)); +} + +/** + * Put horizontal line through the center of the text. + * + * @example Usage + * ```ts no-assert + * import { strikethrough } from "@std/fmt/colors"; + * + * console.log(strikethrough("Hello, world!")); + * ``` + * + * @param str The text to strike through + * @returns The text with horizontal line through the center + */ +export function strikethrough(str: string): string { + return run(str, code([9], 29)); +} + +/** + * Set text color to black. + * + * @example Usage + * ```ts no-assert + * import { black } from "@std/fmt/colors"; + * + * console.log(black("Hello, world!")); + * ``` + * + * @param str The text to make black + * @returns The black text + */ +export function black(str: string): string { + return run(str, code([30], 39)); +} + +/** + * Set text color to red. + * + * @example Usage + * ```ts no-assert + * import { red } from "@std/fmt/colors"; + * + * console.log(red("Hello, world!")); + * ``` + * + * @param str The text to make red + * @returns The red text + */ +export function red(str: string): string { + return run(str, code([31], 39)); +} + +/** + * Set text color to green. + * + * @example Usage + * ```ts no-assert + * import { green } from "@std/fmt/colors"; + * + * console.log(green("Hello, world!")); + * ``` + * + * @param str The text to make green + * @returns The green text + */ +export function green(str: string): string { + return run(str, code([32], 39)); +} + +/** + * Set text color to yellow. + * + * @example Usage + * ```ts no-assert + * import { yellow } from "@std/fmt/colors"; + * + * console.log(yellow("Hello, world!")); + * ``` + * + * @param str The text to make yellow + * @returns The yellow text + */ +export function yellow(str: string): string { + return run(str, code([33], 39)); +} + +/** + * Set text color to blue. + * + * @example Usage + * ```ts no-assert + * import { blue } from "@std/fmt/colors"; + * + * console.log(blue("Hello, world!")); + * ``` + * + * @param str The text to make blue + * @returns The blue text + */ +export function blue(str: string): string { + return run(str, code([34], 39)); +} + +/** + * Set text color to magenta. + * + * @example Usage + * ```ts no-assert + * import { magenta } from "@std/fmt/colors"; + * + * console.log(magenta("Hello, world!")); + * ``` + * + * @param str The text to make magenta + * @returns The magenta text + */ +export function magenta(str: string): string { + return run(str, code([35], 39)); +} + +/** + * Set text color to cyan. + * + * @example Usage + * ```ts no-assert + * import { cyan } from "@std/fmt/colors"; + * + * console.log(cyan("Hello, world!")); + * ``` + * + * @param str The text to make cyan + * @returns The cyan text + */ +export function cyan(str: string): string { + return run(str, code([36], 39)); +} + +/** + * Set text color to white. + * + * @example Usage + * ```ts no-assert + * import { white } from "@std/fmt/colors"; + * + * console.log(white("Hello, world!")); + * ``` + * + * @param str The text to make white + * @returns The white text + */ +export function white(str: string): string { + return run(str, code([37], 39)); +} + +/** + * Set text color to gray. + * + * @example Usage + * ```ts no-assert + * import { gray } from "@std/fmt/colors"; + * + * console.log(gray("Hello, world!")); + * ``` + * + * @param str The text to make gray + * @returns The gray text + */ +export function gray(str: string): string { + return brightBlack(str); +} + +/** + * Set text color to bright black. + * + * @example Usage + * ```ts no-assert + * import { brightBlack } from "@std/fmt/colors"; + * + * console.log(brightBlack("Hello, world!")); + * ``` + * + * @param str The text to make bright black + * @returns The bright black text + */ +export function brightBlack(str: string): string { + return run(str, code([90], 39)); +} + +/** + * Set text color to bright red. + * + * @example Usage + * ```ts no-assert + * import { brightRed } from "@std/fmt/colors"; + * + * console.log(brightRed("Hello, world!")); + * ``` + * + * @param str The text to make bright red + * @returns The bright red text + */ +export function brightRed(str: string): string { + return run(str, code([91], 39)); +} + +/** + * Set text color to bright green. + * + * @example Usage + * ```ts no-assert + * import { brightGreen } from "@std/fmt/colors"; + * + * console.log(brightGreen("Hello, world!")); + * ``` + * + * @param str The text to make bright green + * @returns The bright green text + */ +export function brightGreen(str: string): string { + return run(str, code([92], 39)); +} + +/** + * Set text color to bright yellow. + * + * @example Usage + * ```ts no-assert + * import { brightYellow } from "@std/fmt/colors"; + * + * console.log(brightYellow("Hello, world!")); + * ``` + * + * @param str The text to make bright yellow + * @returns The bright yellow text + */ +export function brightYellow(str: string): string { + return run(str, code([93], 39)); +} + +/** + * Set text color to bright blue. + * + * @example Usage + * ```ts no-assert + * import { brightBlue } from "@std/fmt/colors"; + * + * console.log(brightBlue("Hello, world!")); + * ``` + * + * @param str The text to make bright blue + * @returns The bright blue text + */ +export function brightBlue(str: string): string { + return run(str, code([94], 39)); +} + +/** + * Set text color to bright magenta. + * + * @example Usage + * ```ts no-assert + * import { brightMagenta } from "@std/fmt/colors"; + * + * console.log(brightMagenta("Hello, world!")); + * ``` + * + * @param str The text to make bright magenta + * @returns The bright magenta text + */ +export function brightMagenta(str: string): string { + return run(str, code([95], 39)); +} + +/** + * Set text color to bright cyan. + * + * @example Usage + * ```ts no-assert + * import { brightCyan } from "@std/fmt/colors"; + * + * console.log(brightCyan("Hello, world!")); + * ``` + * + * @param str The text to make bright cyan + * @returns The bright cyan text + */ +export function brightCyan(str: string): string { + return run(str, code([96], 39)); +} + +/** + * Set text color to bright white. + * + * @example Usage + * ```ts no-assert + * import { brightWhite } from "@std/fmt/colors"; + * + * console.log(brightWhite("Hello, world!")); + * ``` + * + * @param str The text to make bright white + * @returns The bright white text + */ +export function brightWhite(str: string): string { + return run(str, code([97], 39)); +} + +/** + * Set background color to black. + * + * @example Usage + * ```ts no-assert + * import { bgBlack } from "@std/fmt/colors"; + * + * console.log(bgBlack("Hello, world!")); + * ``` + * + * @param str The text to make its background black + * @returns The text with black background + */ +export function bgBlack(str: string): string { + return run(str, code([40], 49)); +} + +/** + * Set background color to red. + * + * @example Usage + * ```ts no-assert + * import { bgRed } from "@std/fmt/colors"; + * + * console.log(bgRed("Hello, world!")); + * ``` + * + * @param str The text to make its background red + * @returns The text with red background + */ +export function bgRed(str: string): string { + return run(str, code([41], 49)); +} + +/** + * Set background color to green. + * + * @example Usage + * ```ts no-assert + * import { bgGreen } from "@std/fmt/colors"; + * + * console.log(bgGreen("Hello, world!")); + * ``` + * + * @param str The text to make its background green + * @returns The text with green background + */ +export function bgGreen(str: string): string { + return run(str, code([42], 49)); +} + +/** + * Set background color to yellow. + * + * @example Usage + * ```ts no-assert + * import { bgYellow } from "@std/fmt/colors"; + * + * console.log(bgYellow("Hello, world!")); + * ``` + * + * @param str The text to make its background yellow + * @returns The text with yellow background + */ +export function bgYellow(str: string): string { + return run(str, code([43], 49)); +} + +/** + * Set background color to blue. + * + * @example Usage + * ```ts no-assert + * import { bgBlue } from "@std/fmt/colors"; + * + * console.log(bgBlue("Hello, world!")); + * ``` + * + * @param str The text to make its background blue + * @returns The text with blue background + */ +export function bgBlue(str: string): string { + return run(str, code([44], 49)); +} + +/** + * Set background color to magenta. + * + * @example Usage + * ```ts no-assert + * import { bgMagenta } from "@std/fmt/colors"; + * + * console.log(bgMagenta("Hello, world!")); + * ``` + * + * @param str The text to make its background magenta + * @returns The text with magenta background + */ +export function bgMagenta(str: string): string { + return run(str, code([45], 49)); +} + +/** + * Set background color to cyan. + * + * @example Usage + * ```ts no-assert + * import { bgCyan } from "@std/fmt/colors"; + * + * console.log(bgCyan("Hello, world!")); + * ``` + * + * @param str The text to make its background cyan + * @returns The text with cyan background + */ +export function bgCyan(str: string): string { + return run(str, code([46], 49)); +} + +/** + * Set background color to white. + * + * @example Usage + * ```ts no-assert + * import { bgWhite } from "@std/fmt/colors"; + * + * console.log(bgWhite("Hello, world!")); + * ``` + * + * @param str The text to make its background white + * @returns The text with white background + */ +export function bgWhite(str: string): string { + return run(str, code([47], 49)); +} + +/** + * Set background color to bright black. + * + * @example Usage + * ```ts no-assert + * import { bgBrightBlack } from "@std/fmt/colors"; + * + * console.log(bgBrightBlack("Hello, world!")); + * ``` + * + * @param str The text to make its background bright black + * @returns The text with bright black background + */ +export function bgBrightBlack(str: string): string { + return run(str, code([100], 49)); +} + +/** + * Set background color to bright red. + * + * @example Usage + * ```ts no-assert + * import { bgBrightRed } from "@std/fmt/colors"; + * + * console.log(bgBrightRed("Hello, world!")); + * ``` + * + * @param str The text to make its background bright red + * @returns The text with bright red background + */ +export function bgBrightRed(str: string): string { + return run(str, code([101], 49)); +} + +/** + * Set background color to bright green. + * + * @example Usage + * ```ts no-assert + * import { bgBrightGreen } from "@std/fmt/colors"; + * + * console.log(bgBrightGreen("Hello, world!")); + * ``` + * + * @param str The text to make its background bright green + * @returns The text with bright green background + */ +export function bgBrightGreen(str: string): string { + return run(str, code([102], 49)); +} + +/** + * Set background color to bright yellow. + * + * @example Usage + * ```ts no-assert + * import { bgBrightYellow } from "@std/fmt/colors"; + * + * console.log(bgBrightYellow("Hello, world!")); + * ``` + * + * @param str The text to make its background bright yellow + * @returns The text with bright yellow background + */ +export function bgBrightYellow(str: string): string { + return run(str, code([103], 49)); +} + +/** + * Set background color to bright blue. + * + * @example Usage + * ```ts no-assert + * import { bgBrightBlue } from "@std/fmt/colors"; + * + * console.log(bgBrightBlue("Hello, world!")); + * ``` + * + * @param str The text to make its background bright blue + * @returns The text with bright blue background + */ +export function bgBrightBlue(str: string): string { + return run(str, code([104], 49)); +} + +/** + * Set background color to bright magenta. + * + * @example Usage + * ```ts no-assert + * import { bgBrightMagenta } from "@std/fmt/colors"; + * + * console.log(bgBrightMagenta("Hello, world!")); + * ``` + * + * @param str The text to make its background bright magenta + * @returns The text with bright magenta background + */ +export function bgBrightMagenta(str: string): string { + return run(str, code([105], 49)); +} + +/** + * Set background color to bright cyan. + * + * @example Usage + * ```ts no-assert + * import { bgBrightCyan } from "@std/fmt/colors"; + * + * console.log(bgBrightCyan("Hello, world!")); + * ``` + * + * @param str The text to make its background bright cyan + * @returns The text with bright cyan background + */ +export function bgBrightCyan(str: string): string { + return run(str, code([106], 49)); +} + +/** + * Set background color to bright white. + * + * @example Usage + * ```ts no-assert + * import { bgBrightWhite } from "@std/fmt/colors"; + * + * console.log(bgBrightWhite("Hello, world!")); + * ``` + * + * @param str The text to make its background bright white + * @returns The text with bright white background + */ +export function bgBrightWhite(str: string): string { + return run(str, code([107], 49)); +} + +/* Special Color Sequences */ + +/** + * Clam and truncate color codes + * @param n The input number + * @param max The number to truncate to + * @param min The number to truncate from + */ +function clampAndTruncate(n: number, max = 255, min = 0): number { + return Math.trunc(Math.max(Math.min(n, max), min)); +} + +/** + * Set text color using paletted 8bit colors. + * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit + * + * @example Usage + * ```ts no-assert + * import { rgb8 } from "@std/fmt/colors"; + * + * console.log(rgb8("Hello, world!", 42)); + * ``` + * + * @param str The text color to apply paletted 8bit colors to + * @param color The color code + * @returns The text with paletted 8bit color + */ +export function rgb8(str: string, color: number): string { + return run(str, code([38, 5, clampAndTruncate(color)], 39)); +} + +/** + * Set background color using paletted 8bit colors. + * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit + * + * @example Usage + * ```ts no-assert + * import { bgRgb8 } from "@std/fmt/colors"; + * + * console.log(bgRgb8("Hello, world!", 42)); + * ``` + * + * @param str The text color to apply paletted 8bit background colors to + * @param color code + * @returns The text with paletted 8bit background color + */ +export function bgRgb8(str: string, color: number): string { + return run(str, code([48, 5, clampAndTruncate(color)], 49)); +} + +/** + * Set text color using 24bit rgb. + * `color` can be a number in range `0x000000` to `0xffffff` or + * an `Rgb`. + * + * @example To produce the color magenta: + * ```ts no-assert + * import { rgb24 } from "@std/fmt/colors"; + * + * rgb24("foo", 0xff00ff); + * rgb24("foo", {r: 255, g: 0, b: 255}); + * ``` + * @param str The text color to apply 24bit rgb to + * @param color The color code + * @returns The text with 24bit rgb color + */ +export function rgb24(str: string, color: number | Rgb): string { + if (typeof color === "number") { + return run( + str, + code( + [38, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff], + 39, + ), + ); + } + return run( + str, + code( + [ + 38, + 2, + clampAndTruncate(color.r), + clampAndTruncate(color.g), + clampAndTruncate(color.b), + ], + 39, + ), + ); +} + +/** + * Set background color using 24bit rgb. + * `color` can be a number in range `0x000000` to `0xffffff` or + * an `Rgb`. + * + * @example To produce the color magenta: + * ```ts no-assert + * import { bgRgb24 } from "@std/fmt/colors"; + * + * bgRgb24("foo", 0xff00ff); + * bgRgb24("foo", {r: 255, g: 0, b: 255}); + * ``` + * @param str The text color to apply 24bit rgb to + * @param color The color code + * @returns The text with 24bit rgb color + */ +export function bgRgb24(str: string, color: number | Rgb): string { + if (typeof color === "number") { + return run( + str, + code( + [48, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff], + 49, + ), + ); + } + return run( + str, + code( + [ + 48, + 2, + clampAndTruncate(color.r), + clampAndTruncate(color.g), + clampAndTruncate(color.b), + ], + 49, + ), + ); +} + +// https://github.com/chalk/ansi-regex/blob/02fa893d619d3da85411acc8fd4e2eea0e95a9d9/index.js +const ANSI_PATTERN = new RegExp( + [ + "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)", + "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TXZcf-nq-uy=><~]))", + ].join("|"), + "g", +); + +/** + * Remove ANSI escape codes from the string. + * + * @example Usage + * ```ts no-assert + * import { stripAnsiCode, red } from "@std/fmt/colors"; + * + * console.log(stripAnsiCode(red("Hello, world!"))); + * ``` + * + * @param string The text to remove ANSI escape codes from + * @returns The text without ANSI escape codes + */ +export function stripAnsiCode(string: string): string { + return string.replace(ANSI_PATTERN, ""); +} diff --git a/src/vendor/jsr.io/@std/front-matter/0.224.3/_formats.ts b/src/vendor/jsr.io/@std/front-matter/0.224.3/_formats.ts new file mode 100644 index 00000000000..070dbde033e --- /dev/null +++ b/src/vendor/jsr.io/@std/front-matter/0.224.3/_formats.ts @@ -0,0 +1,61 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +type Delimiter = string | [begin: string, end: string]; + +function getBeginToken(delimiter: Delimiter): string { + return Array.isArray(delimiter) ? delimiter[0] : delimiter; +} + +function getEndToken(delimiter: Delimiter): string { + return Array.isArray(delimiter) ? delimiter[1] : delimiter; +} + +function createRegExps(delimiters: Delimiter[]): [RegExp, RegExp] { + const beginPattern = "(" + delimiters.map(getBeginToken).join("|") + ")"; + const pattern = "^(" + + "\\ufeff?" + // Maybe byte order mark + beginPattern + + "$([\\s\\S]+?)" + + "^(?:" + delimiters.map(getEndToken).join("|") + ")\\s*" + + "$" + + (globalThis?.Deno?.build?.os === "windows" ? "\\r?" : "") + + "(?:\\n)?)"; + + return [ + new RegExp("^" + beginPattern + "$", "im"), + new RegExp(pattern, "im"), + ]; +} + +const [RECOGNIZE_YAML_REGEXP, EXTRACT_YAML_REGEXP] = createRegExps( + [ + ["---yaml", "---"], + "= yaml =", + "---", + ], +); +const [RECOGNIZE_TOML_REGEXP, EXTRACT_TOML_REGEXP] = createRegExps( + [ + ["---toml", "---"], + "\\+\\+\\+", + "= toml =", + ], +); +const [RECOGNIZE_JSON_REGEXP, EXTRACT_JSON_REGEXP] = createRegExps( + [ + ["---json", "---"], + "= json =", + ], +); + +export const RECOGNIZE_REGEXP_MAP = { + yaml: RECOGNIZE_YAML_REGEXP, + toml: RECOGNIZE_TOML_REGEXP, + json: RECOGNIZE_JSON_REGEXP, +} as const; + +export const EXTRACT_REGEXP_MAP = { + yaml: EXTRACT_YAML_REGEXP, + toml: EXTRACT_TOML_REGEXP, + json: EXTRACT_JSON_REGEXP, +} as const; diff --git a/src/vendor/jsr.io/@std/front-matter/0.224.3/_types.ts b/src/vendor/jsr.io/@std/front-matter/0.224.3/_types.ts new file mode 100644 index 00000000000..ddaa2cf9c84 --- /dev/null +++ b/src/vendor/jsr.io/@std/front-matter/0.224.3/_types.ts @@ -0,0 +1,7 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +/** + * Supported format for front matter. `"unknown"` is used when auto format + * detection logic fails. + */ +export type Format = "yaml" | "toml" | "json" | "unknown"; diff --git a/src/vendor/jsr.io/@std/front-matter/0.224.3/create_extractor.ts b/src/vendor/jsr.io/@std/front-matter/0.224.3/create_extractor.ts new file mode 100644 index 00000000000..e16e527edbe --- /dev/null +++ b/src/vendor/jsr.io/@std/front-matter/0.224.3/create_extractor.ts @@ -0,0 +1,174 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import { EXTRACT_REGEXP_MAP, RECOGNIZE_REGEXP_MAP } from "./_formats.ts"; +import type { Format } from "./_types.ts"; + +/** Return type for {@linkcode Extractor}. */ +export type Extract = { + frontMatter: string; + body: string; + attrs: T; +}; + +/** Function return type for {@linkcode createExtractor}. */ +export type Extractor = >( + str: string, +) => Extract; + +/** Parser function type used alongside {@linkcode createExtractor}. */ +export type Parser = >(str: string) => T; + +function _extract( + str: string, + rx: RegExp, + parse: Parser, +): Extract { + const match = rx.exec(str); + if (!match || match.index !== 0) { + throw new TypeError("Unexpected end of input"); + } + const frontMatter = match.at(-1)?.replace(/^\s+|\s+$/g, "") || ""; + const attrs = parse(frontMatter) as T; + const body = str.replace(match[0], ""); + return { frontMatter, body, attrs }; +} + +/** + * Recognizes the format of the front matter in a string. + * Supports {@link https://yaml.org | YAML}, {@link https://toml.io | TOML} and + * {@link https://www.json.org/ | JSON}. + * + * @param str String to recognize. + * @param formats A list of formats to recognize. Defaults to all supported formats. + */ +function recognize(str: string, formats?: Format[]): Format { + if (!formats) { + formats = Object.keys(RECOGNIZE_REGEXP_MAP) as Format[]; + } + + const [firstLine] = str.split(/(\r?\n)/) as [string]; + + for (const format of formats) { + if (format === "unknown") { + continue; + } + + if (RECOGNIZE_REGEXP_MAP[format].test(firstLine)) { + return format; + } + } + + return "unknown"; +} + +/** + * Factory that creates a function that extracts front matter from a string with + * the given parsers. Supports {@link https://yaml.org | YAML}, + * {@link https://toml.io | TOML} and {@link https://www.json.org/ | JSON}. + * + * For simple use cases where you know which format to parse in advance, use the + * pre-built extractors: + * + * - {@linkcode https://jsr.io/@std/front-matter/doc/yaml/~/extract | extractYaml} + * - {@linkcode https://jsr.io/@std/front-matter/doc/toml/~/extract | extractToml} + * - {@linkcode https://jsr.io/@std/front-matter/doc/json/~/extract | extractJson} + * + * @param formats A descriptor containing Format-parser pairs to use for each format. + * @returns A function that extracts front matter from a string with the given parsers. + * + * @example Extract YAML front matter + * ```ts + * import { createExtractor, Parser } from "@std/front-matter"; + * import { assertEquals } from "@std/assert"; + * import { parse as parseYaml } from "@std/yaml/parse"; + * + * const extractYaml = createExtractor({ yaml: parseYaml as Parser }); + * const { attrs, body, frontMatter } = extractYaml<{ title: string }>( + * `--- + * title: Three dashes marks the spot + * --- + * ferret`); + * assertEquals(attrs.title, "Three dashes marks the spot"); + * assertEquals(body, "ferret"); + * assertEquals(frontMatter, "title: Three dashes marks the spot"); + * ``` + * + * @example Extract TOML front matter + * ```ts + * import { createExtractor, Parser } from "@std/front-matter"; + * import { assertEquals } from "@std/assert"; + * import { parse as parseToml } from "@std/toml/parse"; + * + * const extractToml = createExtractor({ toml: parseToml as Parser }); + * const { attrs, body, frontMatter } = extractToml<{ title: string }>( + * `---toml + * title = 'Three dashes followed by format marks the spot' + * --- + * `); + * assertEquals(attrs.title, "Three dashes followed by format marks the spot"); + * assertEquals(body, ""); + * assertEquals(frontMatter, "title = 'Three dashes followed by format marks the spot'"); + * ``` + * + * @example Extract JSON front matter + * ```ts + * import { createExtractor, Parser } from "@std/front-matter"; + * import { assertEquals } from "@std/assert"; + * + * const extractJson = createExtractor({ json: JSON.parse as Parser }); + * const { attrs, body, frontMatter } = extractJson<{ title: string }>( + * `---json + * {"title": "Three dashes followed by format marks the spot"} + * --- + * goat`); + * assertEquals(attrs.title, "Three dashes followed by format marks the spot"); + * assertEquals(body, "goat"); + * assertEquals(frontMatter, `{"title": "Three dashes followed by format marks the spot"}`); + * ``` + * + * @example Extract YAML or JSON front matter + * ```ts + * import { createExtractor, Parser } from "@std/front-matter"; + * import { assertEquals } from "@std/assert"; + * import { parse as parseYaml } from "@std/yaml/parse"; + * + * const extractYamlOrJson = createExtractor({ + * yaml: parseYaml as Parser, + * json: JSON.parse as Parser, + * }); + * + * let { attrs, body, frontMatter } = extractYamlOrJson<{ title: string }>( + * `--- + * title: Three dashes marks the spot + * --- + * ferret`); + * assertEquals(attrs.title, "Three dashes marks the spot"); + * assertEquals(body, "ferret"); + * assertEquals(frontMatter, "title: Three dashes marks the spot"); + * + * ({ attrs, body, frontMatter } = extractYamlOrJson<{ title: string }>( + * `---json + * {"title": "Three dashes followed by format marks the spot"} + * --- + * goat`)); + * assertEquals(attrs.title, "Three dashes followed by format marks the spot"); + * assertEquals(body, "goat"); + * assertEquals(frontMatter, `{"title": "Three dashes followed by format marks the spot"}`); + * ``` + */ +export function createExtractor( + formats: Partial>, +): Extractor { + const formatKeys = Object.keys(formats) as Format[]; + + return function extract(str: string): Extract { + const format = recognize(str, formatKeys); + const parser = formats[format]; + + if (format === "unknown" || !parser) { + throw new TypeError(`Unsupported front matter format`); + } + + return _extract(str, EXTRACT_REGEXP_MAP[format], parser); + }; +} diff --git a/src/vendor/jsr.io/@std/front-matter/0.224.3/json.ts b/src/vendor/jsr.io/@std/front-matter/0.224.3/json.ts new file mode 100644 index 00000000000..56f20cdaaea --- /dev/null +++ b/src/vendor/jsr.io/@std/front-matter/0.224.3/json.ts @@ -0,0 +1,35 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import { + createExtractor, + type Extractor, + type Parser, +} from "./create_extractor.ts"; + +/** + * Extracts and parses {@link https://www.json.org/ | JSON } from the metadata + * of front matter content. + * + * @example Extract JSON front matter + * ```ts + * import { extract } from "@std/front-matter/json"; + * import { assertEquals } from "@std/assert"; + * + * const output = `---json + * { + * "title": "Three dashes marks the spot" + * } + * --- + * Hello, world!`; + * const result = extract(output); + * + * assertEquals(result, { + * frontMatter: '{\n "title": "Three dashes marks the spot"\n}', + * body: "Hello, world!", + * attrs: { title: "Three dashes marks the spot" }, + * }); + * ``` + */ +export const extract: Extractor = createExtractor({ + json: JSON.parse as Parser, +}); diff --git a/src/vendor/jsr.io/@std/front-matter/0.224.3/mod.ts b/src/vendor/jsr.io/@std/front-matter/0.224.3/mod.ts new file mode 100644 index 00000000000..227392f7379 --- /dev/null +++ b/src/vendor/jsr.io/@std/front-matter/0.224.3/mod.ts @@ -0,0 +1,130 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// Copyright (c) Jason Campbell. MIT license + +/** + * Extracts + * {@link https://daily-dev-tips.com/posts/what-exactly-is-frontmatter/ | front matter} + * from strings. Adapted from + * {@link https://github.com/jxson/front-matter/blob/36f139ef797bd9e5196a9ede03ef481d7fbca18e/index.js | jxson/front-matter}. + * + * ## Supported formats + * + * ### JSON + * + * ```ts + * import { test, extractJson } from "@std/front-matter"; + * import { assertEquals } from "@std/assert"; + * + * const str = "---json\n{\"and\": \"this\"}\n---\ndeno is awesome"; + * + * assertEquals(test(str), true); + * assertEquals(extractJson(str), { + * frontMatter: "{\"and\": \"this\"}", + * body: "deno is awesome", + * attrs: { and: "this" } + * }); + * ``` + * + * {@linkcode extractJson | extract} and {@linkcode test} support the following + * delimiters. + * + * ```markdown + * ---json + * { + * "and": "this" + * } + * --- + * ``` + * + * ```markdown + * { + * "is": "JSON" + * } + * ``` + * + * ### TOML + * + * ```ts + * import { test, extractToml } from "@std/front-matter"; + * import { assertEquals } from "@std/assert"; + * + * const str = "---toml\nmodule = 'front_matter'\n---\ndeno is awesome"; + * + * assertEquals(test(str), true); + * assertEquals(extractToml(str), { + * frontMatter: "module = 'front_matter'", + * body: "deno is awesome", + * attrs: { module: "front_matter" } + * }); + * ``` + * + * {@linkcode extractToml | extract} and {@linkcode test} support the following + * delimiters. + * + * ```markdown + * ---toml + * this = 'is' + * --- + * ``` + * + * ```markdown + * = toml = + * parsed = 'as' + * toml = 'data' + * = toml = + * ``` + * + * ```markdown + * +++ + * is = 'that' + * not = 'cool?' + * +++ + * ``` + * + * ### YAML + * + * ```ts + * import { test, extractYaml } from "@std/front-matter"; + * import { assertEquals } from "@std/assert"; + * + * const str = "---yaml\nmodule: front_matter\n---\ndeno is awesome"; + * + * assertEquals(test(str), true); + * assertEquals(extractYaml(str), { + * frontMatter: "module: front_matter", + * body: "deno is awesome", + * attrs: { module: "front_matter" } + * }); + * ``` + * + * {@linkcode extractYaml | extract} and {@linkcode test} support the following + * delimiters. + * + * ```front_matter + * --- + * these: are + * --- + * ``` + * + * ```markdown + * ---yaml + * all: recognized + * --- + * ``` + * + * ```markdown + * = yaml = + * as: yaml + * = yaml = + * ``` + * + * @module + */ +import { extract as extractJson } from "./json.ts"; +import { extract as extractToml } from "./toml.ts"; +import { extract as extractYaml } from "./yaml.ts"; + +export * from "./create_extractor.ts"; +export * from "./test.ts"; + +export { extractJson, extractToml, extractYaml }; diff --git a/src/vendor/jsr.io/@std/front-matter/0.224.3/test.ts b/src/vendor/jsr.io/@std/front-matter/0.224.3/test.ts new file mode 100644 index 00000000000..7fdb3e019ab --- /dev/null +++ b/src/vendor/jsr.io/@std/front-matter/0.224.3/test.ts @@ -0,0 +1,89 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import { EXTRACT_REGEXP_MAP } from "./_formats.ts"; +import type { Format } from "./_types.ts"; + +export type { Format }; + +/** + * Tests if a string has valid front matter. + * Supports {@link https://yaml.org | YAML}, {@link https://toml.io | TOML} and + * {@link https://www.json.org/ | JSON}. + * + * @param str String to test. + * @param formats A list of formats to test for. Defaults to all supported formats. + * @returns `true` if the string has valid front matter, otherwise `false`. + * + * @example Test for valid YAML front matter + * ```ts + * import { test } from "@std/front-matter/test"; + * import { assert } from "@std/assert"; + * + * const result = test( + * `--- + * title: Three dashes marks the spot + * --- + * `); + * assert(result); + * ``` + * + * @example Test for valid TOML front matter + * ```ts + * import { test } from "@std/front-matter/test"; + * import { assert } from "@std/assert"; + * + * const result = test( + * `---toml + * title = 'Three dashes followed by format marks the spot' + * --- + * `); + * assert(result); + * ``` + * + * @example Test for valid JSON front matter + * ```ts + * import { test } from "@std/front-matter/test"; + * import { assert } from "@std/assert"; + * + * const result = test( + * `---json + * {"title": "Three dashes followed by format marks the spot"} + * --- + * `); + * assert(result); + * ``` + * + * @example JSON front matter is not valid as YAML + * ```ts + * import { test } from "@std/front-matter/test"; + * import { assertFalse } from "@std/assert"; + * + * const result = test( + * `---json + * {"title": "Three dashes followed by format marks the spot"} + * --- + * `, ["yaml"]); + * assertFalse(result); + * ``` + */ +export function test( + str: string, + formats?: Format[], +): boolean { + if (!formats) { + formats = Object.keys(EXTRACT_REGEXP_MAP) as Format[]; + } + + for (const format of formats) { + if (format === "unknown") { + throw new TypeError("Unable to test for unknown front matter format"); + } + + const match = EXTRACT_REGEXP_MAP[format].exec(str); + if (match?.index === 0) { + return true; + } + } + + return false; +} diff --git a/src/vendor/jsr.io/@std/front-matter/0.224.3/toml.ts b/src/vendor/jsr.io/@std/front-matter/0.224.3/toml.ts new file mode 100644 index 00000000000..b834f75a1c6 --- /dev/null +++ b/src/vendor/jsr.io/@std/front-matter/0.224.3/toml.ts @@ -0,0 +1,34 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import { + createExtractor, + type Extractor, + type Parser, +} from "./create_extractor.ts"; +import { parse } from "jsr:/@std/toml@^1.0.0-rc.3/parse"; + +/** + * Extracts and parses {@link https://toml.io | TOML} from the metadata of + * front matter content. + * + * @example Extract TOML front matter + * ```ts + * import { extract } from "@std/front-matter/toml"; + * import { assertEquals } from "@std/assert"; + * + * const output = `---toml + * title = "Three dashes marks the spot" + * --- + * Hello, world!`; + * const result = extract(output); + * + * assertEquals(result, { + * frontMatter: 'title = "Three dashes marks the spot"', + * body: "Hello, world!", + * attrs: { title: "Three dashes marks the spot" }, + * }); + * ``` + */ +export const extract: Extractor = createExtractor({ + ["toml"]: parse as Parser, +}); diff --git a/src/vendor/jsr.io/@std/front-matter/0.224.3/yaml.ts b/src/vendor/jsr.io/@std/front-matter/0.224.3/yaml.ts new file mode 100644 index 00000000000..722d1a416c2 --- /dev/null +++ b/src/vendor/jsr.io/@std/front-matter/0.224.3/yaml.ts @@ -0,0 +1,34 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import { + createExtractor, + type Extractor, + type Parser, +} from "./create_extractor.ts"; +import { parse } from "jsr:/@std/yaml@^1.0.0-rc.1/parse"; + +/** + * Extracts and parses {@link https://yaml.org | YAML} from the metadata of + * front matter content. + * + * @example Extract YAML front matter + * ```ts + * import { extract } from "@std/front-matter/yaml"; + * import { assertEquals } from "@std/assert"; + * + * const output = `---yaml + * title: Three dashes marks the spot + * --- + * Hello, world!`; + * const result = extract(output); + * + * assertEquals(result, { + * frontMatter: "title: Three dashes marks the spot", + * body: "Hello, world!", + * attrs: { title: "Three dashes marks the spot" }, + * }); + * ``` + */ +export const extract: Extractor = createExtractor({ + ["yaml"]: parse as Parser, +}); diff --git a/src/vendor/deno.land/std@0.217.0/fs/_create_walk_entry.ts b/src/vendor/jsr.io/@std/fs/0.224.0/_create_walk_entry.ts similarity index 90% rename from src/vendor/deno.land/std@0.217.0/fs/_create_walk_entry.ts rename to src/vendor/jsr.io/@std/fs/0.224.0/_create_walk_entry.ts index e336ad7bfa6..733fe105aac 100644 --- a/src/vendor/deno.land/std@0.217.0/fs/_create_walk_entry.ts +++ b/src/vendor/jsr.io/@std/fs/0.224.0/_create_walk_entry.ts @@ -1,8 +1,8 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // Copyright the Browserify authors. MIT License. -import { basename } from "../path/basename.ts"; -import { normalize } from "../path/normalize.ts"; +import { basename } from "jsr:/@std/path@^0.224.0/basename"; +import { normalize } from "jsr:/@std/path@^0.224.0/normalize"; import { toPathString } from "./_to_path_string.ts"; /** diff --git a/src/vendor/deno.land/std@0.217.0/fs/_get_file_info_type.ts b/src/vendor/jsr.io/@std/fs/0.224.0/_get_file_info_type.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/fs/_get_file_info_type.ts rename to src/vendor/jsr.io/@std/fs/0.224.0/_get_file_info_type.ts diff --git a/src/vendor/deno.land/std@0.217.0/fs/_is_same_path.ts b/src/vendor/jsr.io/@std/fs/0.224.0/_is_same_path.ts similarity index 89% rename from src/vendor/deno.land/std@0.217.0/fs/_is_same_path.ts rename to src/vendor/jsr.io/@std/fs/0.224.0/_is_same_path.ts index e901de5e8b9..35c750cf044 100644 --- a/src/vendor/deno.land/std@0.217.0/fs/_is_same_path.ts +++ b/src/vendor/jsr.io/@std/fs/0.224.0/_is_same_path.ts @@ -1,7 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // Copyright the Browserify authors. MIT License. -import { resolve } from "../path/resolve.ts"; +import { resolve } from "jsr:/@std/path@^0.224.0/resolve"; import { toPathString } from "./_to_path_string.ts"; /** diff --git a/src/vendor/deno.land/std@0.217.0/fs/_is_subdir.ts b/src/vendor/jsr.io/@std/fs/0.224.0/_is_subdir.ts similarity index 91% rename from src/vendor/deno.land/std@0.217.0/fs/_is_subdir.ts rename to src/vendor/jsr.io/@std/fs/0.224.0/_is_subdir.ts index 57fda91344c..3f4b15197ec 100644 --- a/src/vendor/deno.land/std@0.217.0/fs/_is_subdir.ts +++ b/src/vendor/jsr.io/@std/fs/0.224.0/_is_subdir.ts @@ -1,7 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // Copyright the Browserify authors. MIT License. -import { SEPARATOR } from "../path/constants.ts"; +import { SEPARATOR } from "jsr:/@std/path@^0.224.0/constants"; import { toPathString } from "./_to_path_string.ts"; /** diff --git a/src/vendor/deno.land/std@0.217.0/fs/_to_path_string.ts b/src/vendor/jsr.io/@std/fs/0.224.0/_to_path_string.ts similarity index 83% rename from src/vendor/deno.land/std@0.217.0/fs/_to_path_string.ts rename to src/vendor/jsr.io/@std/fs/0.224.0/_to_path_string.ts index 2e2c77857db..b14ebabaf5a 100644 --- a/src/vendor/deno.land/std@0.217.0/fs/_to_path_string.ts +++ b/src/vendor/jsr.io/@std/fs/0.224.0/_to_path_string.ts @@ -1,7 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // Copyright the Browserify authors. MIT License. -import { fromFileUrl } from "../path/from_file_url.ts"; +import { fromFileUrl } from "jsr:/@std/path@^0.224.0/from-file-url"; /** * Convert a URL or string to a path diff --git a/src/vendor/deno.land/std@0.217.0/fs/copy.ts b/src/vendor/jsr.io/@std/fs/0.224.0/copy.ts similarity index 73% rename from src/vendor/deno.land/std@0.217.0/fs/copy.ts rename to src/vendor/jsr.io/@std/fs/0.224.0/copy.ts index 2c266b5659a..0b421efa5de 100644 --- a/src/vendor/deno.land/std@0.217.0/fs/copy.ts +++ b/src/vendor/jsr.io/@std/fs/0.224.0/copy.ts @@ -1,10 +1,10 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { basename } from "../path/basename.ts"; -import { join } from "../path/join.ts"; -import { resolve } from "../path/resolve.ts"; +import { basename } from "jsr:/@std/path@^0.224.0/basename"; +import { join } from "jsr:/@std/path@^0.224.0/join"; +import { resolve } from "jsr:/@std/path@^0.224.0/resolve"; import { ensureDir, ensureDirSync } from "./ensure_dir.ts"; -import { assert } from "../assert/assert.ts"; +import { assert } from "jsr:/@std/assert@^0.224.0/assert"; import { getFileInfoType } from "./_get_file_info_type.ts"; import { toPathString } from "./_to_path_string.ts"; import { isSubdir } from "./_is_subdir.ts"; @@ -14,14 +14,15 @@ const isWindows = Deno.build.os === "windows"; /** Options for {@linkcode copy} and {@linkcode copySync}. */ export interface CopyOptions { /** - * overwrite existing file or directory. + * Whether to overwrite existing file or directory. + * * @default {false} */ overwrite?: boolean; /** - * When `true`, will set last modification and access times to the ones of the - * original source files. - * When `false`, timestamp behavior is OS-dependent. + * When `true`, will set last modification and access times to the ones of + * the original source files. When `false`, timestamp behavior is + * OS-dependent. * * @default {false} */ @@ -249,21 +250,49 @@ function copyDirSync( } /** - * Copy a file or directory. The directory can have contents. Like `cp -r`. + * Asynchronously copy a file or directory. The directory can have contents. + * Like `cp -r`. + * + * If `src` is a directory it will copy everything inside of this directory, + * not the entire directory itself. If `src` is a file, `dest` cannot be a + * directory. + * * Requires the `--allow-read` and `--allow-write` flag. * - * @example + * @param src The source file/directory path as a string or URL. + * @param dest The destination file/directory path as a string or URL. + * @param options Options for copying. + * @returns A promise that resolves once the copy operation completes. + * + * @example Basic usage * ```ts - * import { copy } from "https://deno.land/std@$STD_VERSION/fs/copy.ts"; - * copy("./foo", "./bar"); // returns a promise + * import { copy } from "@std/fs/copy"; + * + * await copy("./foo", "./bar"); + * ``` + * + * This will copy the file or directory at `./foo` to `./bar` without + * overwriting. + * + * @example Overwriting files/directories + * ```ts + * import { copy } from "@std/fs/copy"; + * + * await copy("./foo", "./bar", { overwrite: true }); + * ``` + * + * This will copy the file or directory at `./foo` to `./bar` and overwrite + * any existing files or directories. + * + * @example Preserving timestamps + * ```ts + * import { copy } from "@std/fs/copy"; + * + * await copy("./foo", "./bar", { preserveTimestamps: true }); * ``` * - * @param src the file/directory path. - * Note that if `src` is a directory it will copy everything inside - * of this directory, not the entire directory itself - * @param dest the destination path. Note that if `src` is a file, `dest` cannot - * be a directory - * @param options + * This will copy the file or directory at `./foo` to `./bar` and set the + * last modification and access times to the ones of the original source files. */ export async function copy( src: string | URL, @@ -295,20 +324,49 @@ export async function copy( } /** - * Copy a file or directory. The directory can have contents. Like `cp -r`. + * Synchronously copy a file or directory. The directory can have contents. + * Like `cp -r`. + * + * If `src` is a directory it will copy everything inside of this directory, + * not the entire directory itself. If `src` is a file, `dest` cannot be a + * directory. + * * Requires the `--allow-read` and `--allow-write` flag. * - * @example + * @param src The source file/directory path as a string or URL. + * @param dest The destination file/directory path as a string or URL. + * @param options Options for copying. + * @returns A void value that returns once the copy operation completes. + * + * @example Basic usage * ```ts - * import { copySync } from "https://deno.land/std@$STD_VERSION/fs/copy.ts"; - * copySync("./foo", "./bar"); // void + * import { copySync } from "@std/fs/copy"; + * + * copySync("./foo", "./bar"); * ``` - * @param src the file/directory path. - * Note that if `src` is a directory it will copy everything inside - * of this directory, not the entire directory itself - * @param dest the destination path. Note that if `src` is a file, `dest` cannot - * be a directory - * @param options + * + * This will copy the file or directory at `./foo` to `./bar` without + * overwriting. + * + * @example Overwriting files/directories + * ```ts + * import { copySync } from "@std/fs/copy"; + * + * copySync("./foo", "./bar", { overwrite: true }); + * ``` + * + * This will copy the file or directory at `./foo` to `./bar` and overwrite + * any existing files or directories. + * + * @example Preserving timestamps + * ```ts + * import { copySync } from "@std/fs/copy"; + * + * copySync("./foo", "./bar", { preserveTimestamps: true }); + * ``` + * + * This will copy the file or directory at `./foo` to `./bar` and set the + * last modification and access times to the ones of the original source files. */ export function copySync( src: string | URL, diff --git a/src/vendor/deno.land/std@0.217.0/fs/empty_dir.ts b/src/vendor/jsr.io/@std/fs/0.224.0/empty_dir.ts similarity index 65% rename from src/vendor/deno.land/std@0.217.0/fs/empty_dir.ts rename to src/vendor/jsr.io/@std/fs/0.224.0/empty_dir.ts index cbf7b31d4db..f5d7dcbfc53 100644 --- a/src/vendor/deno.land/std@0.217.0/fs/empty_dir.ts +++ b/src/vendor/jsr.io/@std/fs/0.224.0/empty_dir.ts @@ -1,19 +1,22 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { join } from "../path/join.ts"; +import { join } from "jsr:/@std/path@^0.224.0/join"; import { toPathString } from "./_to_path_string.ts"; /** - * Ensures that a directory is empty. - * Deletes directory contents if the directory is not empty. - * If the directory does not exist, it is created. + * Asynchronously ensures that a directory is empty deletes the directory + * contents it is not empty. If the directory does not exist, it is created. * The directory itself is not deleted. + * * Requires the `--allow-read` and `--allow-write` flag. * + * @param dir The path of the directory to empty, as a string or URL. + * @returns A void promise that resolves once the directory is empty. + * * @example * ```ts - * import { emptyDir } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; + * import { emptyDir } from "@std/fs/empty-dir"; * - * emptyDir("./foo"); // returns a promise + * await emptyDir("./foo"); * ``` */ export async function emptyDir(dir: string | URL) { @@ -37,17 +40,20 @@ export async function emptyDir(dir: string | URL) { } /** - * Ensures that a directory is empty. - * Deletes directory contents if the directory is not empty. - * If the directory does not exist, it is created. + * Synchronously ensures that a directory is empty deletes the directory + * contents it is not empty. If the directory does not exist, it is created. * The directory itself is not deleted. + * * Requires the `--allow-read` and `--allow-write` flag. * + * @param dir The path of the directory to empty, as a string or URL. + * @returns A void value that returns once the directory is empty. + * * @example * ```ts - * import { emptyDirSync } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; + * import { emptyDirSync } from "@std/fs/empty-dir"; * - * emptyDirSync("./foo"); // void + * emptyDirSync("./foo"); * ``` */ export function emptyDirSync(dir: string | URL) { diff --git a/src/vendor/deno.land/std@0.217.0/fs/ensure_dir.ts b/src/vendor/jsr.io/@std/fs/0.224.0/ensure_dir.ts similarity index 63% rename from src/vendor/deno.land/std@0.217.0/fs/ensure_dir.ts rename to src/vendor/jsr.io/@std/fs/0.224.0/ensure_dir.ts index 2f786cdcb4c..237e3c44d1d 100644 --- a/src/vendor/deno.land/std@0.217.0/fs/ensure_dir.ts +++ b/src/vendor/jsr.io/@std/fs/0.224.0/ensure_dir.ts @@ -2,20 +2,24 @@ import { getFileInfoType } from "./_get_file_info_type.ts"; /** - * Ensures that the directory exists. - * If the directory structure does not exist, it is created. Like mkdir -p. + * Asynchronously ensures that the directory exists. If the directory structure + * does not exist, it is created. Like `mkdir -p`. + * * Requires the `--allow-read` and `--allow-write` flag. * + * @param dir The path of the directory to ensure, as a string or URL. + * @returns A promise that resolves once the directory exists. + * * @example * ```ts - * import { ensureDir } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; + * import { ensureDir } from "@std/fs/ensure-dir"; * - * ensureDir("./bar"); // returns a promise + * await ensureDir("./bar"); * ``` */ export async function ensureDir(dir: string | URL) { try { - const fileInfo = await Deno.lstat(dir); + const fileInfo = await Deno.stat(dir); if (!fileInfo.isDirectory) { throw new Error( `Ensure path exists, expected 'dir', got '${ @@ -31,7 +35,7 @@ export async function ensureDir(dir: string | URL) { } // The dir doesn't exist. Create it. - // This can be racy. So we catch AlreadyExists and check lstat again. + // This can be racy. So we catch AlreadyExists and check stat again. try { await Deno.mkdir(dir, { recursive: true }); } catch (err) { @@ -39,7 +43,7 @@ export async function ensureDir(dir: string | URL) { throw err; } - const fileInfo = await Deno.lstat(dir); + const fileInfo = await Deno.stat(dir); if (!fileInfo.isDirectory) { throw new Error( `Ensure path exists, expected 'dir', got '${ @@ -51,20 +55,24 @@ export async function ensureDir(dir: string | URL) { } /** - * Ensures that the directory exists. - * If the directory structure does not exist, it is created. Like mkdir -p. + * Synchronously ensures that the directory exists. If the directory structure + * does not exist, it is created. Like `mkdir -p`. + * * Requires the `--allow-read` and `--allow-write` flag. * + * @param dir The path of the directory to ensure, as a string or URL. + * @returns A void value that returns once the directory exists. + * * @example * ```ts - * import { ensureDirSync } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; + * import { ensureDir } from "@std/fs/ensure-dir"; * - * ensureDirSync("./ensureDirSync"); // void + * await ensureDir("./bar"); * ``` */ export function ensureDirSync(dir: string | URL) { try { - const fileInfo = Deno.lstatSync(dir); + const fileInfo = Deno.statSync(dir); if (!fileInfo.isDirectory) { throw new Error( `Ensure path exists, expected 'dir', got '${ @@ -80,7 +88,7 @@ export function ensureDirSync(dir: string | URL) { } // The dir doesn't exist. Create it. - // This can be racy. So we catch AlreadyExists and check lstat again. + // This can be racy. So we catch AlreadyExists and check stat again. try { Deno.mkdirSync(dir, { recursive: true }); } catch (err) { @@ -88,7 +96,7 @@ export function ensureDirSync(dir: string | URL) { throw err; } - const fileInfo = Deno.lstatSync(dir); + const fileInfo = Deno.statSync(dir); if (!fileInfo.isDirectory) { throw new Error( `Ensure path exists, expected 'dir', got '${ diff --git a/src/vendor/deno.land/std@0.217.0/fs/ensure_file.ts b/src/vendor/jsr.io/@std/fs/0.224.0/ensure_file.ts similarity index 62% rename from src/vendor/deno.land/std@0.217.0/fs/ensure_file.ts rename to src/vendor/jsr.io/@std/fs/0.224.0/ensure_file.ts index 2d51ac1424f..a594e1a275b 100644 --- a/src/vendor/deno.land/std@0.217.0/fs/ensure_file.ts +++ b/src/vendor/jsr.io/@std/fs/0.224.0/ensure_file.ts @@ -1,22 +1,24 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { dirname } from "../path/dirname.ts"; +import { dirname } from "jsr:/@std/path@^0.224.0/dirname"; import { ensureDir, ensureDirSync } from "./ensure_dir.ts"; import { getFileInfoType } from "./_get_file_info_type.ts"; import { toPathString } from "./_to_path_string.ts"; /** - * Ensures that the file exists. - * If the file that is requested to be created is in directories that do not - * exist. - * these directories are created. If the file already exists, - * it is NOTMODIFIED. + * Asynchronously ensures that the file exists. If the file that is requested to + * be created is in directories that do not exist, these directories are created. + * If the file already exists, it is not modified. + * * Requires the `--allow-read` and `--allow-write` flag. * + * @param filePath The path of the file to ensure, as a string or URL. + * @returns A void promise that resolves once the file exists. + * * @example * ```ts - * import { ensureFile } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; + * import { ensureFile } from "@std/fs/ensure-file"; * - * ensureFile("./folder/targetFile.dat"); // returns promise + * await ensureFile("./folder/targetFile.dat"); * ``` */ export async function ensureFile(filePath: string | URL): Promise { @@ -43,18 +45,20 @@ export async function ensureFile(filePath: string | URL): Promise { } /** - * Ensures that the file exists. - * If the file that is requested to be created is in directories that do not - * exist, - * these directories are created. If the file already exists, - * it is NOT MODIFIED. + * Synchronously ensures that the file exists. If the file that is requested to + * be created is in directories that do not exist, these directories are created. + * If the file already exists, it is not modified. + * * Requires the `--allow-read` and `--allow-write` flag. * + * @param filePath The path of the file to ensure, as a string or URL. + * @returns A void value that returns once the file exists. + * * @example * ```ts - * import { ensureFileSync } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; + * import { ensureFileSync } from "@std/fs/ensure-file"; * - * ensureFileSync("./folder/targetFile.dat"); // void + * ensureFileSync("./folder/targetFile.dat"); * ``` */ export function ensureFileSync(filePath: string | URL): void { diff --git a/src/vendor/jsr.io/@std/fs/0.224.0/ensure_link.ts b/src/vendor/jsr.io/@std/fs/0.224.0/ensure_link.ts new file mode 100644 index 00000000000..8576374c2c3 --- /dev/null +++ b/src/vendor/jsr.io/@std/fs/0.224.0/ensure_link.ts @@ -0,0 +1,50 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +import { dirname } from "jsr:/@std/path@^0.224.0/dirname"; +import { ensureDir, ensureDirSync } from "./ensure_dir.ts"; +import { toPathString } from "./_to_path_string.ts"; + +/** + * Asynchronously ensures that the hard link exists. If the directory structure + * does not exist, it is created. + * + * @param src The source file path as a string or URL. Directory hard links are + * not allowed. + * @param dest The destination link path as a string or URL. + * @returns A void promise that resolves once the hard link exists. + * + * @example + * ```ts + * import { ensureLink } from "@std/fs/ensure-link"; + * + * await ensureLink("./folder/targetFile.dat", "./folder/targetFile.link.dat"); + * ``` + */ +export async function ensureLink(src: string | URL, dest: string | URL) { + dest = toPathString(dest); + await ensureDir(dirname(dest)); + + await Deno.link(toPathString(src), dest); +} + +/** + * Synchronously ensures that the hard link exists. If the directory structure + * does not exist, it is created. + * + * @param src The source file path as a string or URL. Directory hard links are + * not allowed. + * @param dest The destination link path as a string or URL. + * @returns A void value that returns once the hard link exists. + * + * @example + * ```ts + * import { ensureLinkSync } from "@std/fs/ensure-link"; + * + * ensureLinkSync("./folder/targetFile.dat", "./folder/targetFile.link.dat"); + * ``` + */ +export function ensureLinkSync(src: string | URL, dest: string | URL) { + dest = toPathString(dest); + ensureDirSync(dirname(dest)); + + Deno.linkSync(toPathString(src), dest); +} diff --git a/src/vendor/jsr.io/@std/fs/0.224.0/ensure_symlink.ts b/src/vendor/jsr.io/@std/fs/0.224.0/ensure_symlink.ts new file mode 100644 index 00000000000..59d5d98e40e --- /dev/null +++ b/src/vendor/jsr.io/@std/fs/0.224.0/ensure_symlink.ts @@ -0,0 +1,133 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +import { dirname } from "jsr:/@std/path@^0.224.0/dirname"; +import { resolve } from "jsr:/@std/path@^0.224.0/resolve"; +import { ensureDir, ensureDirSync } from "./ensure_dir.ts"; +import { getFileInfoType } from "./_get_file_info_type.ts"; +import { toPathString } from "./_to_path_string.ts"; + +const isWindows = Deno.build.os === "windows"; + +function resolveSymlinkTarget(target: string | URL, linkName: string | URL) { + if (typeof target !== "string") return target; // URL is always absolute path + if (typeof linkName === "string") { + return resolve(dirname(linkName), target); + } else { + return new URL(target, linkName); + } +} + +/** + * Asynchronously ensures that the link exists, and points to a valid file. If + * the directory structure does not exist, it is created. If the link already + * exists, it is not modified but error is thrown if it is not point to the + * given target. + * + * Requires the `--allow-read` and `--allow-write` flag. + * + * @param target The source file path as a string or URL. + * @param linkName The destination link path as a string or URL. + * @returns A void promise that resolves once the link exists. + * + * @example + * ```ts + * import { ensureSymlink } from "@std/fs/ensure-symlink"; + * + * await ensureSymlink("./folder/targetFile.dat", "./folder/targetFile.link.dat"); + * ``` + */ +export async function ensureSymlink( + target: string | URL, + linkName: string | URL, +) { + const targetRealPath = resolveSymlinkTarget(target, linkName); + const srcStatInfo = await Deno.lstat(targetRealPath); + const srcFilePathType = getFileInfoType(srcStatInfo); + + await ensureDir(dirname(toPathString(linkName))); + + const options: Deno.SymlinkOptions | undefined = isWindows + ? { + type: srcFilePathType === "dir" ? "dir" : "file", + } + : undefined; + + try { + await Deno.symlink(target, linkName, options); + } catch (error) { + if (!(error instanceof Deno.errors.AlreadyExists)) { + throw error; + } + const linkStatInfo = await Deno.lstat(linkName); + if (!linkStatInfo.isSymlink) { + const type = getFileInfoType(linkStatInfo); + throw new Deno.errors.AlreadyExists( + `A '${type}' already exists at the path: ${linkName}`, + ); + } + const linkPath = await Deno.readLink(linkName); + const linkRealPath = resolve(linkPath); + if (linkRealPath !== targetRealPath) { + throw new Deno.errors.AlreadyExists( + `A symlink targeting to an undesired path already exists: ${linkName} -> ${linkRealPath}`, + ); + } + } +} + +/** + * Synchronously ensures that the link exists, and points to a valid file. If + * the directory structure does not exist, it is created. If the link already + * exists, it is not modified but error is thrown if it is not point to the + * given target. + * + * Requires the `--allow-read` and `--allow-write` flag. + * + * @param target The source file path as a string or URL. + * @param linkName The destination link path as a string or URL. + * @returns A void value that returns once the link exists. + * + * @example + * ```ts + * import { ensureSymlinkSync } from "@std/fs/ensure-symlink"; + * + * ensureSymlinkSync("./folder/targetFile.dat", "./folder/targetFile.link.dat"); + * ``` + */ +export function ensureSymlinkSync( + target: string | URL, + linkName: string | URL, +) { + const targetRealPath = resolveSymlinkTarget(target, linkName); + const srcStatInfo = Deno.lstatSync(targetRealPath); + const srcFilePathType = getFileInfoType(srcStatInfo); + + ensureDirSync(dirname(toPathString(linkName))); + + const options: Deno.SymlinkOptions | undefined = isWindows + ? { + type: srcFilePathType === "dir" ? "dir" : "file", + } + : undefined; + + try { + Deno.symlinkSync(target, linkName, options); + } catch (error) { + if (!(error instanceof Deno.errors.AlreadyExists)) { + throw error; + } + const linkStatInfo = Deno.lstatSync(linkName); + if (!linkStatInfo.isSymlink) { + const type = getFileInfoType(linkStatInfo); + throw new Deno.errors.AlreadyExists( + `A '${type}' already exists at the path: ${linkName}`, + ); + } + const linkPath = Deno.readLinkSync(linkName); + const linkRealPath = resolve(linkPath); + if (linkRealPath !== targetRealPath) { + throw new Deno.errors.AlreadyExists( + `A symlink targeting to an undesired path already exists: ${linkName} -> ${linkRealPath}`, + ); + } + } +} diff --git a/src/vendor/deno.land/std@0.217.0/fs/eol.ts b/src/vendor/jsr.io/@std/fs/0.224.0/eol.ts similarity index 51% rename from src/vendor/deno.land/std@0.217.0/fs/eol.ts rename to src/vendor/jsr.io/@std/fs/0.224.0/eol.ts index 8b55e1244c1..701359efb05 100644 --- a/src/vendor/deno.land/std@0.217.0/fs/eol.ts +++ b/src/vendor/jsr.io/@std/fs/0.224.0/eol.ts @@ -11,9 +11,9 @@ export const CRLF = "\r\n" as const; * * @example * ```ts - * import { EOL } from "https://deno.land/std@$STD_VERSION/fs/eol.ts"; + * import { EOL } from "@std/fs/eol"; * - * EOL; // Returns "\n" on POSIX platforms or "\r\n" on Windows + * EOL; // "\n" on POSIX platforms and "\r\n" on Windows * ``` */ export const EOL: "\n" | "\r\n" = Deno?.build.os === "windows" ? CRLF : LF; @@ -21,22 +21,20 @@ export const EOL: "\n" | "\r\n" = Deno?.build.os === "windows" ? CRLF : LF; const regDetect = /(?:\r?\n)/g; /** - * Detect the EOL character for string input. - * returns null if no newline. + * Returns the detected EOL character(s) detected in the input string. If no EOL + * character is detected, `null` is returned. + * + * @param content The input string to detect EOL characters. + * @returns The detected EOL character(s) or `null` if no EOL character is detected. * * @example * ```ts - * import { detect, EOL } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; - * - * const CRLFinput = "deno\r\nis not\r\nnode"; - * const Mixedinput = "deno\nis not\r\nnode"; - * const LFinput = "deno\nis not\nnode"; - * const NoNLinput = "deno is not node"; + * import { detect } from "@std/fs/eol"; * - * detect(LFinput); // output EOL.LF - * detect(CRLFinput); // output EOL.CRLF - * detect(Mixedinput); // output EOL.CRLF - * detect(NoNLinput); // output null + * detect("deno\r\nis not\r\nnode"); // "\r\n" + * detect("deno\nis not\r\nnode"); // "\r\n" + * detect("deno\nis not\nnode"); // "\n" + * detect("deno is not node"); // null * ``` */ export function detect(content: string): typeof EOL | null { @@ -50,15 +48,19 @@ export function detect(content: string): typeof EOL | null { } /** - * Format the file to the targeted EOL. + * Normalize the input string to the targeted EOL. + * + * @param content The input string to normalize. + * @param eol The EOL character(s) to normalize the input string to. + * @returns The input string normalized to the targeted EOL. * * @example * ```ts - * import { LF, format } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; + * import { LF, format } from "@std/fs/eol"; * * const CRLFinput = "deno\r\nis not\r\nnode"; * - * format(CRLFinput, LF); // output "deno\nis not\nnode" + * format(CRLFinput, LF); // "deno\nis not\nnode" * ``` */ export function format(content: string, eol: typeof EOL): string { diff --git a/src/vendor/jsr.io/@std/fs/0.224.0/exists.ts b/src/vendor/jsr.io/@std/fs/0.224.0/exists.ts new file mode 100644 index 00000000000..81bd8babc15 --- /dev/null +++ b/src/vendor/jsr.io/@std/fs/0.224.0/exists.ts @@ -0,0 +1,285 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +/** Options for {@linkcode exists} and {@linkcode existsSync.} */ +export interface ExistsOptions { + /** + * When `true`, will check if the path is readable by the user as well. + * + * @default {false} + */ + isReadable?: boolean; + /** + * When `true`, will check if the path is a directory as well. Directory + * symlinks are included. + * + * @default {false} + */ + isDirectory?: boolean; + /** + * When `true`, will check if the path is a file as well. File symlinks are + * included. + * + * @default {false} + */ + isFile?: boolean; +} + +/** + * Asynchronously test whether or not the given path exists by checking with + * the file system. + * + * Note: Do not use this function if performing a check before another operation + * on that file. Doing so creates a race condition. Instead, perform the actual + * file operation directly. This function is not recommended for this use case. + * See the recommended method below. + * + * @see https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use + * + * @param path The path to the file or directory, as a string or URL. + * @param options Additional options for the check. + * @returns A promise that resolves with `true` if the path exists, `false` + * otherwise. + * + * @example Recommended method + * ```ts + * // Notice no use of exists + * try { + * await Deno.remove("./foo", { recursive: true }); + * } catch (error) { + * if (!(error instanceof Deno.errors.NotFound)) { + * throw error; + * } + * // Do nothing... + * } + * ``` + * + * Notice that `exists()` is not used in the above example. Doing so avoids a + * possible race condition. See the above section for details. + * + * @example Basic usage + * ```ts + * import { exists } from "@std/fs/exists"; + * + * await exists("./exists"); // true + * await exists("./does_not_exist"); // false + * ``` + * + * @example Check if a path is readable + * ```ts + * import { exists } from "@std/fs/exists"; + * + * await exists("./readable", { isReadable: true }); // true + * await exists("./not_readable", { isReadable: true }); // false + * ``` + * + * @example Check if a path is a directory + * ```ts + * import { exists } from "@std/fs/exists"; + * + * await exists("./directory", { isDirectory: true }); // true + * await exists("./file", { isDirectory: true }); // false + * ``` + * + * @example Check if a path is a file + * ```ts + * import { exists } from "@std/fs/exists"; + * + * await exists("./file", { isFile: true }); // true + * await exists("./directory", { isFile: true }); // false + * ``` + * + * @example Check if a path is a readable directory + * ```ts + * import { exists } from "@std/fs/exists"; + * + * await exists("./readable_directory", { isReadable: true, isDirectory: true }); // true + * await exists("./not_readable_directory", { isReadable: true, isDirectory: true }); // false + * ``` + * + * @example Check if a path is a readable file + * ```ts + * import { exists } from "@std/fs/exists"; + * + * await exists("./readable_file", { isReadable: true, isFile: true }); // true + * await exists("./not_readable_file", { isReadable: true, isFile: true }); // false + * ``` + */ +export async function exists( + path: string | URL, + options?: ExistsOptions, +): Promise { + try { + const stat = await Deno.stat(path); + if ( + options && + (options.isReadable || options.isDirectory || options.isFile) + ) { + if (options.isDirectory && options.isFile) { + throw new TypeError( + "ExistsOptions.options.isDirectory and ExistsOptions.options.isFile must not be true together.", + ); + } + if ( + (options.isDirectory && !stat.isDirectory) || + (options.isFile && !stat.isFile) + ) { + return false; + } + if (options.isReadable) { + if (stat.mode === null) { + return true; // Exclusive on Non-POSIX systems + } + if (Deno.uid() === stat.uid) { + return (stat.mode & 0o400) === 0o400; // User is owner and can read? + } else if (Deno.gid() === stat.gid) { + return (stat.mode & 0o040) === 0o040; // User group is owner and can read? + } + return (stat.mode & 0o004) === 0o004; // Others can read? + } + } + return true; + } catch (error) { + if (error instanceof Deno.errors.NotFound) { + return false; + } + if (error instanceof Deno.errors.PermissionDenied) { + if ( + (await Deno.permissions.query({ name: "read", path })).state === + "granted" + ) { + // --allow-read not missing + return !options?.isReadable; // PermissionDenied was raised by file system, so the item exists, but can't be read + } + } + throw error; + } +} + +/** + * Synchronously test whether or not the given path exists by checking with + * the file system. + * + * Note: Do not use this function if performing a check before another operation + * on that file. Doing so creates a race condition. Instead, perform the actual + * file operation directly. This function is not recommended for this use case. + * See the recommended method below. + * + * @see https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use + * + * @param path The path to the file or directory, as a string or URL. + * @param options Additional options for the check. + * @returns `true` if the path exists, `false` otherwise. + * + * @example Recommended method + * ```ts + * // Notice no use of exists + * try { + * Deno.removeSync("./foo", { recursive: true }); + * } catch (error) { + * if (!(error instanceof Deno.errors.NotFound)) { + * throw error; + * } + * // Do nothing... + * } + * ``` + * + * Notice that `existsSync()` is not used in the above example. Doing so avoids + * a possible race condition. See the above section for details. + * + * @example Basic usage + * ```ts + * import { existsSync } from "@std/fs/exists"; + * + * existsSync("./exists"); // true + * existsSync("./does_not_exist"); // false + * ``` + * + * @example Check if a path is readable + * ```ts + * import { existsSync } from "@std/fs/exists"; + * + * existsSync("./readable", { isReadable: true }); // true + * existsSync("./not_readable", { isReadable: true }); // false + * ``` + * + * @example Check if a path is a directory + * ```ts + * import { existsSync } from "@std/fs/exists"; + * + * existsSync("./directory", { isDirectory: true }); // true + * existsSync("./file", { isDirectory: true }); // false + * ``` + * + * @example Check if a path is a file + * ```ts + * import { existsSync } from "@std/fs/exists"; + * + * existsSync("./file", { isFile: true }); // true + * existsSync("./directory", { isFile: true }); // false + * ``` + * + * @example Check if a path is a readable directory + * ```ts + * import { existsSync } from "@std/fs/exists"; + * + * existsSync("./readable_directory", { isReadable: true, isDirectory: true }); // true + * existsSync("./not_readable_directory", { isReadable: true, isDirectory: true }); // false + * ``` + * + * @example Check if a path is a readable file + * ```ts + * import { existsSync } from "@std/fs/exists"; + * + * existsSync("./readable_file", { isReadable: true, isFile: true }); // true + * existsSync("./not_readable_file", { isReadable: true, isFile: true }); // false + * ``` + */ +export function existsSync( + path: string | URL, + options?: ExistsOptions, +): boolean { + try { + const stat = Deno.statSync(path); + if ( + options && + (options.isReadable || options.isDirectory || options.isFile) + ) { + if (options.isDirectory && options.isFile) { + throw new TypeError( + "ExistsOptions.options.isDirectory and ExistsOptions.options.isFile must not be true together.", + ); + } + if ( + (options.isDirectory && !stat.isDirectory) || + (options.isFile && !stat.isFile) + ) { + return false; + } + if (options.isReadable) { + if (stat.mode === null) { + return true; // Exclusive on Non-POSIX systems + } + if (Deno.uid() === stat.uid) { + return (stat.mode & 0o400) === 0o400; // User is owner and can read? + } else if (Deno.gid() === stat.gid) { + return (stat.mode & 0o040) === 0o040; // User group is owner and can read? + } + return (stat.mode & 0o004) === 0o004; // Others can read? + } + } + return true; + } catch (error) { + if (error instanceof Deno.errors.NotFound) { + return false; + } + if (error instanceof Deno.errors.PermissionDenied) { + if ( + Deno.permissions.querySync({ name: "read", path }).state === "granted" + ) { + // --allow-read not missing + return !options?.isReadable; // PermissionDenied was raised by file system, so the item exists, but can't be read + } + } + throw error; + } +} diff --git a/src/vendor/deno.land/std@0.217.0/fs/expand_glob.ts b/src/vendor/jsr.io/@std/fs/0.224.0/expand_glob.ts similarity index 74% rename from src/vendor/deno.land/std@0.217.0/fs/expand_glob.ts rename to src/vendor/jsr.io/@std/fs/0.224.0/expand_glob.ts index 024ebb8eb42..e536e55447e 100644 --- a/src/vendor/deno.land/std@0.217.0/fs/expand_glob.ts +++ b/src/vendor/jsr.io/@std/fs/0.224.0/expand_glob.ts @@ -1,12 +1,12 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { type GlobOptions, globToRegExp } from "../path/glob_to_regexp.ts"; -import { joinGlobs } from "../path/join_globs.ts"; -import { isGlob } from "../path/is_glob.ts"; -import { isAbsolute } from "../path/is_absolute.ts"; -import { resolve } from "../path/resolve.ts"; -import { SEPARATOR_PATTERN } from "../path/constants.ts"; +import { type GlobOptions, globToRegExp } from "jsr:/@std/path@^0.224.0/glob-to-regexp"; +import { joinGlobs } from "jsr:/@std/path@^0.224.0/join-globs"; +import { isGlob } from "jsr:/@std/path@^0.224.0/is-glob"; +import { isAbsolute } from "jsr:/@std/path@^0.224.0/is-absolute"; +import { resolve } from "jsr:/@std/path@^0.224.0/resolve"; +import { SEPARATOR_PATTERN } from "jsr:/@std/path@^0.224.0/constants"; import { walk, walkSync } from "./walk.ts"; -import { assert } from "../assert/assert.ts"; +import { assert } from "jsr:/@std/assert@^0.224.0/assert"; import { toPathString } from "./_to_path_string.ts"; import { createWalkEntry, @@ -14,7 +14,7 @@ import { type WalkEntry, } from "./_create_walk_entry.ts"; -export type { GlobOptions }; +export type { GlobOptions, WalkEntry }; const isWindows = Deno.build.os === "windows"; @@ -80,18 +80,47 @@ function comparePath(a: WalkEntry, b: WalkEntry): number { } /** - * Expand the glob string from the specified `root` directory and yield each - * result as a `WalkEntry` object. + * Returns an async iterator that yields each file path matching the given glob + * pattern. The file paths are relative to the provided `root` directory. + * If `root` is not provided, the current working directory is used. + * The `root` directory is not included in the yielded file paths. * - * See [`globToRegExp()`](../path/glob.ts#globToRegExp) for details on supported - * syntax. + * Requires the `--allow-read` flag. + * + * @param glob The glob pattern to expand. + * @param options Additional options for the expansion. + * @returns An async iterator that yields each walk entry matching the glob + * pattern. + * + * @example Basic usage + * + * File structure: + * ``` + * folder + * ├── script.ts + * └── foo.ts + * ``` * - * @example * ```ts - * import { expandGlob } from "https://deno.land/std@$STD_VERSION/fs/expand_glob.ts"; - * for await (const file of expandGlob("**\/*.ts")) { - * console.log(file); + * // script.ts + * import { expandGlob } from "@std/fs/expand-glob"; + * + * const entries = []; + * for await (const entry of expandGlob("*.ts")) { + * entries.push(entry); * } + * + * entries[0]!.path; // "/Users/user/folder/script.ts" + * entries[0]!.name; // "script.ts" + * entries[0]!.isFile; // false + * entries[0]!.isDirectory; // true + * entries[0]!.isSymlink; // false + * + * entries[1]!.path; // "/Users/user/folder/foo.ts" + * entries[1]!.name; // "foo.ts" + * entries[1]!.isFile; // true + * entries[1]!.isDirectory; // false + * entries[1]!.isSymlink; // false * ``` */ export async function* expandGlob( @@ -210,14 +239,46 @@ export async function* expandGlob( } /** - * Synchronous version of `expandGlob()`. + * Returns an iterator that yields each file path matching the given glob + * pattern. The file paths are relative to the provided `root` directory. + * If `root` is not provided, the current working directory is used. + * The `root` directory is not included in the yielded file paths. + * + * Requires the `--allow-read` flag. + * + * @param glob The glob pattern to expand. + * @param options Additional options for the expansion. + * @returns An iterator that yields each walk entry matching the glob pattern. + * + * @example Basic usage + * + * File structure: + * ``` + * folder + * ├── script.ts + * └── foo.ts + * ``` * - * @example * ```ts - * import { expandGlobSync } from "https://deno.land/std@$STD_VERSION/fs/expand_glob.ts"; - * for (const file of expandGlobSync("**\/*.ts")) { - * console.log(file); + * // script.ts + * import { expandGlobSync } from "@std/fs/expand-glob"; + * + * const entries = []; + * for (const entry of expandGlobSync("*.ts")) { + * entries.push(entry); * } + * + * entries[0]!.path; // "/Users/user/folder/script.ts" + * entries[0]!.name; // "script.ts" + * entries[0]!.isFile; // false + * entries[0]!.isDirectory; // true + * entries[0]!.isSymlink; // false + * + * entries[1]!.path; // "/Users/user/folder/foo.ts" + * entries[1]!.name; // "foo.ts" + * entries[1]!.isFile; // true + * entries[1]!.isDirectory; // false + * entries[1]!.isSymlink; // false * ``` */ export function* expandGlobSync( diff --git a/src/vendor/deno.land/std@0.217.0/fs/mod.ts b/src/vendor/jsr.io/@std/fs/0.224.0/mod.ts similarity index 64% rename from src/vendor/deno.land/std@0.217.0/fs/mod.ts rename to src/vendor/jsr.io/@std/fs/0.224.0/mod.ts index 55c9f07b5c4..da46758ec63 100644 --- a/src/vendor/deno.land/std@0.217.0/fs/mod.ts +++ b/src/vendor/jsr.io/@std/fs/0.224.0/mod.ts @@ -3,6 +3,15 @@ /** * Helpers for working with the filesystem. * + * ```ts + * import { ensureFile, copy, ensureDir, move } from "@std/fs"; + * + * await ensureFile("example.txt"); + * await copy("example.txt", "example_copy.txt"); + * await ensureDir("subdir"); + * await move("example_copy.txt", "subdir/example_copy.txt"); + * ``` + * * @module */ diff --git a/src/vendor/deno.land/std@0.217.0/fs/move.ts b/src/vendor/jsr.io/@std/fs/0.224.0/move.ts similarity index 60% rename from src/vendor/deno.land/std@0.217.0/fs/move.ts rename to src/vendor/jsr.io/@std/fs/0.224.0/move.ts index 07ca9094d4f..97d6261bbdf 100644 --- a/src/vendor/deno.land/std@0.217.0/fs/move.ts +++ b/src/vendor/jsr.io/@std/fs/0.224.0/move.ts @@ -14,6 +14,7 @@ export class SubdirectoryMoveError extends Error { super( `Cannot move '${src}' to a subdirectory of itself, '${dest}'.`, ); + this.name = this.constructor.name; } } @@ -28,14 +29,32 @@ export interface MoveOptions { } /** - * Moves a file or directory. + * Asynchronously moves a file or directory. * - * @example + * @param src The source file or directory as a string or URL. + * @param dest The destination file or directory as a string or URL. + * @param options Options for the move operation. + * @returns A void promise that resolves once the operation completes. + * + * @example Basic usage * ```ts - * import { move } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; + * import { move } from "@std/fs/move"; * - * move("./foo", "./bar"); // returns a promise + * await move("./foo", "./bar"); * ``` + * + * This will move the file or directory at `./foo` to `./bar` without + * overwriting. + * + * @example Overwriting + * ```ts + * import { move } from "@std/fs/move"; + * + * await move("./foo", "./bar", { overwrite: true }); + * ``` + * + * This will move the file or directory at `./foo` to `./bar`, overwriting + * `./bar` if it already exists. */ export async function move( src: string | URL, @@ -73,14 +92,32 @@ export async function move( } /** - * Moves a file or directory synchronously. + * Synchronously moves a file or directory. * - * @example + * @param src The source file or directory as a string or URL. + * @param dest The destination file or directory as a string or URL. + * @param options Options for the move operation. + * @returns A void value that returns once the operation completes. + * + * @example Basic usage * ```ts - * import { moveSync } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; + * import { moveSync } from "@std/fs/move"; * - * moveSync("./foo", "./bar"); // void + * moveSync("./foo", "./bar"); * ``` + * + * This will move the file or directory at `./foo` to `./bar` without + * overwriting. + * + * @example Overwriting + * ```ts + * import { moveSync } from "@std/fs/move"; + * + * moveSync("./foo", "./bar", { overwrite: true }); + * ``` + * + * This will move the file or directory at `./foo` to `./bar`, overwriting + * `./bar` if it already exists. */ export function moveSync( src: string | URL, diff --git a/src/vendor/deno.land/std@0.217.0/fs/walk.ts b/src/vendor/jsr.io/@std/fs/0.224.0/walk.ts similarity index 85% rename from src/vendor/deno.land/std@0.217.0/fs/walk.ts rename to src/vendor/jsr.io/@std/fs/0.224.0/walk.ts index 80c6e3a069a..fdbef555b71 100644 --- a/src/vendor/deno.land/std@0.217.0/fs/walk.ts +++ b/src/vendor/jsr.io/@std/fs/0.224.0/walk.ts @@ -2,8 +2,8 @@ // Documentation and interface for walk were adapted from Go // https://golang.org/pkg/path/filepath/#Walk // Copyright 2009 The Go Authors. All rights reserved. BSD license. -import { join } from "../path/join.ts"; -import { normalize } from "../path/normalize.ts"; +import { join } from "jsr:/@std/path@^0.224.0/join"; +import { normalize } from "jsr:/@std/path@^0.224.0/normalize"; import { toPathString } from "./_to_path_string.ts"; import { createWalkEntry, @@ -22,7 +22,7 @@ export class WalkError extends Error { `${cause instanceof Error ? cause.message : cause} for path "${root}"`, ); this.cause = cause; - this.name = "WalkError"; + this.name = this.constructor.name; this.root = root; } } @@ -54,51 +54,63 @@ function wrapErrorWithPath(err: unknown, root: string) { export interface WalkOptions { /** * The maximum depth of the file tree to be walked recursively. + * * @default {Infinity} */ maxDepth?: number; /** * Indicates whether file entries should be included or not. + * * @default {true} */ includeFiles?: boolean; /** * Indicates whether directory entries should be included or not. + * * @default {true} */ includeDirs?: boolean; /** * Indicates whether symlink entries should be included or not. * This option is meaningful only if `followSymlinks` is set to `false`. + * * @default {true} */ includeSymlinks?: boolean; /** * Indicates whether symlinks should be resolved or not. + * * @default {false} */ followSymlinks?: boolean; /** * Indicates whether the followed symlink's path should be canonicalized. * This option works only if `followSymlinks` is not `false`. + * * @default {true} */ canonicalize?: boolean; /** * List of file extensions used to filter entries. - * If specified, entries without the file extension specified by this option are excluded. + * If specified, entries without the file extension specified by this option + * are excluded. + * * @default {undefined} */ exts?: string[]; /** * List of regular expression patterns used to filter entries. - * If specified, entries that do not match the patterns specified by this option are excluded. + * If specified, entries that do not match the patterns specified by this + * option are excluded. + * * @default {undefined} */ match?: RegExp[]; /** * List of regular expression patterns used to filter entries. - * If specified, entries matching the patterns specified by this option are excluded. + * If specified, entries matching the patterns specified by this option are + * excluded. + * * @default {undefined} */ skip?: RegExp[]; @@ -106,18 +118,41 @@ export interface WalkOptions { export type { WalkEntry }; /** - * Walks the file tree rooted at root, yielding each file or directory in the - * tree filtered according to the given options. + * Recursively walks through a directory and yields information about each file + * and directory encountered. + * + * @param root The root directory to start the walk from, as a string or URL. + * @param options The options for the walk. + * @returns An async iterable iterator that yields `WalkEntry` objects. + * + * @example Basic usage + * + * File structure: + * ``` + * folder + * ├── script.ts + * └── foo.ts + * ``` * - * @example * ```ts - * import { walk } from "https://deno.land/std@$STD_VERSION/fs/walk.ts"; - * import { assert } from "https://deno.land/std@$STD_VERSION/assert/assert.ts"; + * import { walk } from "@std/fs/walk"; * + * const entries = []; * for await (const entry of walk(".")) { - * console.log(entry.path); - * assert(entry.isFile); + * entries.push(entry); * } + * + * entries[0]!.path; // "folder" + * entries[0]!.name; // "folder" + * entries[0]!.isFile; // false + * entries[0]!.isDirectory; // true + * entries[0]!.isSymlink; // false + * + * entries[1]!.path; // "folder/script.ts" + * entries[1]!.name; // "script.ts" + * entries[1]!.isFile; // true + * entries[1]!.isDirectory; // false + * entries[1]!.isSymlink; // false * ``` */ export async function* walk( diff --git a/src/vendor/jsr.io/@std/fs/1.0.3/exists.ts b/src/vendor/jsr.io/@std/fs/1.0.3/exists.ts new file mode 100644 index 00000000000..ad983621385 --- /dev/null +++ b/src/vendor/jsr.io/@std/fs/1.0.3/exists.ts @@ -0,0 +1,294 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +/** Options for {@linkcode exists} and {@linkcode existsSync.} */ +export interface ExistsOptions { + /** + * When `true`, will check if the path is readable by the user as well. + * + * @default {false} + */ + isReadable?: boolean; + /** + * When `true`, will check if the path is a directory as well. Directory + * symlinks are included. + * + * @default {false} + */ + isDirectory?: boolean; + /** + * When `true`, will check if the path is a file as well. File symlinks are + * included. + * + * @default {false} + */ + isFile?: boolean; +} + +/** + * Asynchronously test whether or not the given path exists by checking with + * the file system. + * + * Note: Do not use this function if performing a check before another operation + * on that file. Doing so creates a race condition. Instead, perform the actual + * file operation directly. This function is not recommended for this use case. + * See the recommended method below. + * + * @see {@link https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use} for + * more information on the time-of-check to time-of-use bug. + * + * Requires `--allow-read` and `--allow-sys` permissions. + * + * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access} + * for more information on Deno's permissions system. + * + * @param path The path to the file or directory, as a string or URL. + * @param options Additional options for the check. + * + * @returns A promise that resolves with `true` if the path exists, `false` + * otherwise. + * + * @example Recommended method + * ```ts no-eval + * // Notice no use of exists + * try { + * await Deno.remove("./foo", { recursive: true }); + * } catch (error) { + * if (!(error instanceof Deno.errors.NotFound)) { + * throw error; + * } + * // Do nothing... + * } + * ``` + * + * Notice that `exists()` is not used in the above example. Doing so avoids a + * possible race condition. See the above note for details. + * + * @example Basic usage + * ```ts no-eval + * import { exists } from "@std/fs/exists"; + * + * await exists("./exists"); // true + * await exists("./does_not_exist"); // false + * ``` + * + * @example Check if a path is readable + * ```ts no-eval + * import { exists } from "@std/fs/exists"; + * + * await exists("./readable", { isReadable: true }); // true + * await exists("./not_readable", { isReadable: true }); // false + * ``` + * + * @example Check if a path is a directory + * ```ts no-eval + * import { exists } from "@std/fs/exists"; + * + * await exists("./directory", { isDirectory: true }); // true + * await exists("./file", { isDirectory: true }); // false + * ``` + * + * @example Check if a path is a file + * ```ts no-eval + * import { exists } from "@std/fs/exists"; + * + * await exists("./file", { isFile: true }); // true + * await exists("./directory", { isFile: true }); // false + * ``` + * + * @example Check if a path is a readable directory + * ```ts no-eval + * import { exists } from "@std/fs/exists"; + * + * await exists("./readable_directory", { isReadable: true, isDirectory: true }); // true + * await exists("./not_readable_directory", { isReadable: true, isDirectory: true }); // false + * ``` + * + * @example Check if a path is a readable file + * ```ts no-eval + * import { exists } from "@std/fs/exists"; + * + * await exists("./readable_file", { isReadable: true, isFile: true }); // true + * await exists("./not_readable_file", { isReadable: true, isFile: true }); // false + * ``` + */ +export async function exists( + path: string | URL, + options?: ExistsOptions, +): Promise { + try { + const stat = await Deno.stat(path); + if ( + options && + (options.isReadable || options.isDirectory || options.isFile) + ) { + if (options.isDirectory && options.isFile) { + throw new TypeError( + "ExistsOptions.options.isDirectory and ExistsOptions.options.isFile must not be true together", + ); + } + if ( + (options.isDirectory && !stat.isDirectory) || + (options.isFile && !stat.isFile) + ) { + return false; + } + if (options.isReadable) { + return fileIsReadable(stat); + } + } + return true; + } catch (error) { + if (error instanceof Deno.errors.NotFound) { + return false; + } + if (error instanceof Deno.errors.PermissionDenied) { + if ( + (await Deno.permissions.query({ name: "read", path })).state === + "granted" + ) { + // --allow-read not missing + return !options?.isReadable; // PermissionDenied was raised by file system, so the item exists, but can't be read + } + } + throw error; + } +} + +/** + * Synchronously test whether or not the given path exists by checking with + * the file system. + * + * Note: Do not use this function if performing a check before another operation + * on that file. Doing so creates a race condition. Instead, perform the actual + * file operation directly. This function is not recommended for this use case. + * See the recommended method below. + * + * @see {@link https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use} for + * more information on the time-of-check to time-of-use bug. + * + * Requires `--allow-read` and `--allow-sys` permissions. + * + * @see {@link https://docs.deno.com/runtime/manual/basics/permissions#file-system-access} + * for more information on Deno's permissions system. + * + * @param path The path to the file or directory, as a string or URL. + * @param options Additional options for the check. + * + * @returns `true` if the path exists, `false` otherwise. + * + * @example Recommended method + * ```ts no-eval + * // Notice no use of exists + * try { + * Deno.removeSync("./foo", { recursive: true }); + * } catch (error) { + * if (!(error instanceof Deno.errors.NotFound)) { + * throw error; + * } + * // Do nothing... + * } + * ``` + * + * Notice that `existsSync()` is not used in the above example. Doing so avoids + * a possible race condition. See the above note for details. + * + * @example Basic usage + * ```ts no-eval + * import { existsSync } from "@std/fs/exists"; + * + * existsSync("./exists"); // true + * existsSync("./does_not_exist"); // false + * ``` + * + * @example Check if a path is readable + * ```ts no-eval + * import { existsSync } from "@std/fs/exists"; + * + * existsSync("./readable", { isReadable: true }); // true + * existsSync("./not_readable", { isReadable: true }); // false + * ``` + * + * @example Check if a path is a directory + * ```ts no-eval + * import { existsSync } from "@std/fs/exists"; + * + * existsSync("./directory", { isDirectory: true }); // true + * existsSync("./file", { isDirectory: true }); // false + * ``` + * + * @example Check if a path is a file + * ```ts no-eval + * import { existsSync } from "@std/fs/exists"; + * + * existsSync("./file", { isFile: true }); // true + * existsSync("./directory", { isFile: true }); // false + * ``` + * + * @example Check if a path is a readable directory + * ```ts no-eval + * import { existsSync } from "@std/fs/exists"; + * + * existsSync("./readable_directory", { isReadable: true, isDirectory: true }); // true + * existsSync("./not_readable_directory", { isReadable: true, isDirectory: true }); // false + * ``` + * + * @example Check if a path is a readable file + * ```ts no-eval + * import { existsSync } from "@std/fs/exists"; + * + * existsSync("./readable_file", { isReadable: true, isFile: true }); // true + * existsSync("./not_readable_file", { isReadable: true, isFile: true }); // false + * ``` + */ +export function existsSync( + path: string | URL, + options?: ExistsOptions, +): boolean { + try { + const stat = Deno.statSync(path); + if ( + options && + (options.isReadable || options.isDirectory || options.isFile) + ) { + if (options.isDirectory && options.isFile) { + throw new TypeError( + "ExistsOptions.options.isDirectory and ExistsOptions.options.isFile must not be true together", + ); + } + if ( + (options.isDirectory && !stat.isDirectory) || + (options.isFile && !stat.isFile) + ) { + return false; + } + if (options.isReadable) { + return fileIsReadable(stat); + } + } + return true; + } catch (error) { + if (error instanceof Deno.errors.NotFound) { + return false; + } + if (error instanceof Deno.errors.PermissionDenied) { + if ( + Deno.permissions.querySync({ name: "read", path }).state === "granted" + ) { + // --allow-read not missing + return !options?.isReadable; // PermissionDenied was raised by file system, so the item exists, but can't be read + } + } + throw error; + } +} + +function fileIsReadable(stat: Deno.FileInfo) { + if (stat.mode === null) { + return true; // Exclusive on Non-POSIX systems + } else if (Deno.uid() === stat.uid) { + return (stat.mode & 0o400) === 0o400; // User is owner and can read? + } else if (Deno.gid() === stat.gid) { + return (stat.mode & 0o040) === 0o040; // User group is owner and can read? + } + return (stat.mode & 0o004) === 0o004; // Others can read? +} diff --git a/src/vendor/deno.land/std@0.217.0/http/_negotiation/common.ts b/src/vendor/jsr.io/@std/http/0.224.5/_negotiation/common.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/http/_negotiation/common.ts rename to src/vendor/jsr.io/@std/http/0.224.5/_negotiation/common.ts diff --git a/src/vendor/deno.land/std@0.217.0/http/_negotiation/encoding.ts b/src/vendor/jsr.io/@std/http/0.224.5/_negotiation/encoding.ts similarity index 98% rename from src/vendor/deno.land/std@0.217.0/http/_negotiation/encoding.ts rename to src/vendor/jsr.io/@std/http/0.224.5/_negotiation/encoding.ts index 4b9a2563853..9600d56303d 100644 --- a/src/vendor/deno.land/std@0.217.0/http/_negotiation/encoding.ts +++ b/src/vendor/jsr.io/@std/http/0.224.5/_negotiation/encoding.ts @@ -29,7 +29,7 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { compareSpecs, isQuality, Specificity } from "./common.ts"; +import { compareSpecs, isQuality, type Specificity } from "./common.ts"; interface EncodingSpecificity extends Specificity { encoding?: string; diff --git a/src/vendor/deno.land/std@0.217.0/http/_negotiation/language.ts b/src/vendor/jsr.io/@std/http/0.224.5/_negotiation/language.ts similarity index 98% rename from src/vendor/deno.land/std@0.217.0/http/_negotiation/language.ts rename to src/vendor/jsr.io/@std/http/0.224.5/_negotiation/language.ts index a453e2a2542..35a70c05b3d 100644 --- a/src/vendor/deno.land/std@0.217.0/http/_negotiation/language.ts +++ b/src/vendor/jsr.io/@std/http/0.224.5/_negotiation/language.ts @@ -29,7 +29,7 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { compareSpecs, isQuality, Specificity } from "./common.ts"; +import { compareSpecs, isQuality, type Specificity } from "./common.ts"; interface LanguageSpecificity extends Specificity { prefix: string; diff --git a/src/vendor/deno.land/std@0.217.0/http/_negotiation/media_type.ts b/src/vendor/jsr.io/@std/http/0.224.5/_negotiation/media_type.ts similarity index 98% rename from src/vendor/deno.land/std@0.217.0/http/_negotiation/media_type.ts rename to src/vendor/jsr.io/@std/http/0.224.5/_negotiation/media_type.ts index 2c26028cebf..f82d5f2d7d7 100644 --- a/src/vendor/deno.land/std@0.217.0/http/_negotiation/media_type.ts +++ b/src/vendor/jsr.io/@std/http/0.224.5/_negotiation/media_type.ts @@ -29,7 +29,7 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { compareSpecs, isQuality, Specificity } from "./common.ts"; +import { compareSpecs, isQuality, type Specificity } from "./common.ts"; interface MediaTypeSpecificity extends Specificity { type: string; diff --git a/src/vendor/deno.land/std@0.217.0/http/cookie.ts b/src/vendor/jsr.io/@std/http/0.224.5/cookie.ts similarity index 81% rename from src/vendor/deno.land/std@0.217.0/http/cookie.ts rename to src/vendor/jsr.io/@std/http/0.224.5/cookie.ts index 3019a626b5a..171744bc763 100644 --- a/src/vendor/deno.land/std@0.217.0/http/cookie.ts +++ b/src/vendor/jsr.io/@std/http/0.224.5/cookie.ts @@ -3,12 +3,10 @@ // https://github.com/golang/go/blob/master/src/net/http/cookie.go // This module is browser compatible. -import { assert } from "../assert/assert.ts"; - /** * Represents an HTTP Cookie. * - * @see {@link https://tools.ietf.org/html/rfc6265#section-4.1.1} + * @see {@link https://www.rfc-editor.org/rfc/rfc6265.html#section-4.2.1} */ export interface Cookie { /** Name of the cookie. */ @@ -19,7 +17,7 @@ export interface Cookie { * @example Explicit date: * * ```ts - * import { Cookie } from "https://deno.land/std@$STD_VERSION/http/cookie.ts"; + * import { Cookie } from "@std/http/cookie"; * const cookie: Cookie = { * name: 'name', * value: 'value', @@ -31,7 +29,7 @@ export interface Cookie { * @example UTC milliseconds * * ```ts - * import { Cookie } from "https://deno.land/std@$STD_VERSION/http/cookie.ts"; + * import { Cookie } from "@std/http/cookie"; * const cookie: Cookie = { * name: 'name', * value: 'value', @@ -51,6 +49,18 @@ export interface Cookie { secure?: boolean; /** The cookie's `HTTPOnly` attribute. If `true`, the cookie cannot be accessed via JavaScript. */ httpOnly?: boolean; + /** + * The cookie's `Partitioned` attribute. + * If `true`, the cookie will be only be included in the `Cookie` request header if + * the domain it is embedded by matches the domain the cookie was originally set from. + * + * Warning: This is an attribute that has not been fully standardized yet. + * It may change in the future without following the semver semantics of the package. + * Clients may ignore the attribute until they understand it. + * + * @default {false} + */ + partitioned?: boolean; /** * Allows servers to assert that a cookie ought not to * be sent along with cross-site requests. @@ -72,7 +82,7 @@ function toString(cookie: Cookie): string { out.push(`${cookie.name}=${cookie.value}`); // Fallback for invalid Set-Cookie - // ref: https://tools.ietf.org/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.1 + // ref: https://www.rfc-editor.org/rfc/rfc6265.html#section-3.1 if (cookie.name.startsWith("__Secure")) { cookie.secure = true; } @@ -88,11 +98,15 @@ function toString(cookie: Cookie): string { if (cookie.httpOnly) { out.push("HttpOnly"); } + if (cookie.partitioned) { + out.push("Partitioned"); + } if (typeof cookie.maxAge === "number" && Number.isInteger(cookie.maxAge)) { - assert( - cookie.maxAge >= 0, - "Max-Age must be an integer superior or equal to 0", - ); + if (cookie.maxAge < 0) { + throw new RangeError( + "Max-Age must be an integer superior or equal to 0. Cookie ignored.", + ); + } out.push(`Max-Age=${cookie.maxAge}`); } if (cookie.domain) { @@ -129,7 +143,7 @@ function validateName(name: string | undefined | null) { /** * Validate Path Value. - * See {@link https://tools.ietf.org/html/rfc6265#section-4.1.2.4}. + * See {@link https://www.rfc-editor.org/rfc/rfc6265.html#section-4.1.2.4}. * @param path Path value. */ function validatePath(path: string | null) { @@ -151,7 +165,7 @@ function validatePath(path: string | null) { /** * Validate Cookie Value. - * See {@link https://tools.ietf.org/html/rfc6265#section-4.1}. + * See {@link https://www.rfc-editor.org/rfc/rfc6265.html#section-4.1}. * @param value Cookie value. */ function validateValue(name: string, value: string | null) { @@ -178,7 +192,7 @@ function validateValue(name: string, value: string | null) { /** * Validate Cookie Domain. - * See {@link https://datatracker.ietf.org/doc/html/rfc6265#section-4.1.2.3}. + * See {@link https://www.rfc-editor.org/rfc/rfc6265.html#section-4.1.2.3}. * @param domain Cookie domain. */ function validateDomain(domain: string) { @@ -194,15 +208,16 @@ function validateDomain(domain: string) { /** * Parse cookies of a header * - * @example + * @example Usage * ```ts - * import { getCookies } from "https://deno.land/std@$STD_VERSION/http/cookie.ts"; + * import { getCookies } from "@std/http/cookie"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const headers = new Headers(); * headers.set("Cookie", "full=of; tasty=chocolate"); * * const cookies = getCookies(headers); - * console.log(cookies); // { full: "of", tasty: "chocolate" } + * assertEquals(cookies, { full: "of", tasty: "chocolate" }); * ``` * * @param headers The headers instance to get cookies from @@ -215,7 +230,9 @@ export function getCookies(headers: Headers): Record { const c = cookie.split(";"); for (const kv of c) { const [cookieKey, ...cookieVal] = kv.split("="); - assert(cookieKey !== undefined); + if (cookieKey === undefined) { + throw new TypeError("Cookie cannot start with '='"); + } const key = cookieKey.trim(); out[key] = cookieVal.join("="); } @@ -227,19 +244,18 @@ export function getCookies(headers: Headers): Record { /** * Set the cookie header properly in the headers * - * @example + * @example Usage * ```ts - * import { - * Cookie, - * setCookie, - * } from "https://deno.land/std@$STD_VERSION/http/cookie.ts"; + * import { Cookie, setCookie } from "@std/http/cookie"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const headers = new Headers(); * const cookie: Cookie = { name: "Space", value: "Cat" }; * setCookie(headers, cookie); * * const cookieHeader = headers.get("set-cookie"); - * console.log(cookieHeader); // Space=Cat + * + * assertEquals(cookieHeader, "Space=Cat"); * ``` * * @param headers The headers instance to set the cookie to @@ -247,7 +263,7 @@ export function getCookies(headers: Headers): Record { */ export function setCookie(headers: Headers, cookie: Cookie) { // Parsing cookie headers to make consistent set-cookie header - // ref: https://tools.ietf.org/html/rfc6265#section-4.1.1 + // ref: https://www.rfc-editor.org/rfc/rfc6265.html#section-4.1.1 const v = toString(cookie); if (v) { headers.append("Set-Cookie", v); @@ -260,15 +276,17 @@ export function setCookie(headers: Headers, cookie: Cookie) { * > Note: Deleting a `Cookie` will set its expiration date before now. Forcing * > the browser to delete it. * - * @example + * @example Usage * ```ts - * import { deleteCookie } from "https://deno.land/std@$STD_VERSION/http/cookie.ts"; + * import { deleteCookie } from "@std/http/cookie"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const headers = new Headers(); * deleteCookie(headers, "deno"); * * const cookieHeader = headers.get("set-cookie"); - * console.log(cookieHeader); // deno=; Expires=Thus, 01 Jan 1970 00:00:00 GMT + * + * assertEquals(cookieHeader, "deno=; Expires=Thu, 01 Jan 1970 00:00:00 GMT"); * ``` * * @param headers The headers instance to delete the cookie from @@ -376,9 +394,10 @@ function parseSetCookie(value: string): Cookie | null { /** * Parse set-cookies of a header * - * @example + * @example Usage * ```ts - * import { getSetCookies } from "https://deno.land/std@$STD_VERSION/http/cookie.ts"; + * import { getSetCookies } from "@std/http/cookie"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const headers = new Headers([ * ["Set-Cookie", "lulu=meow; Secure; Max-Age=3600"], @@ -386,7 +405,13 @@ function parseSetCookie(value: string): Cookie | null { * ]); * * const cookies = getSetCookies(headers); - * console.log(cookies); // [{ name: "lulu", value: "meow", secure: true, maxAge: 3600 }, { name: "booya", value: "kahsa", httpOnly: true, path: "/ }] + * + * assertEquals(cookies[0], { + * name: "lulu", + * value: "meow", + * secure: true, + * maxAge: 3600 + * }); * ``` * * @param headers The headers instance to get set-cookies from diff --git a/src/vendor/jsr.io/@std/http/0.224.5/deno.json b/src/vendor/jsr.io/@std/http/0.224.5/deno.json new file mode 100644 index 00000000000..c059ad7a249 --- /dev/null +++ b/src/vendor/jsr.io/@std/http/0.224.5/deno.json @@ -0,0 +1,16 @@ +{ + "name": "@std/http", + "version": "0.224.5", + "exports": { + ".": "./mod.ts", + "./cookie": "./cookie.ts", + "./etag": "./etag.ts", + "./file-server": "./file_server.ts", + "./negotiation": "./negotiation.ts", + "./server": "./server.ts", + "./server-sent-event-stream": "./server_sent_event_stream.ts", + "./status": "./status.ts", + "./unstable-signed-cookie": "./unstable_signed_cookie.ts", + "./user-agent": "./user_agent.ts" + } +} diff --git a/src/vendor/deno.land/std@0.217.0/http/etag.ts b/src/vendor/jsr.io/@std/http/0.224.5/etag.ts similarity index 86% rename from src/vendor/deno.land/std@0.217.0/http/etag.ts rename to src/vendor/jsr.io/@std/http/0.224.5/etag.ts index 88644a7cec6..2863c27f9f0 100644 --- a/src/vendor/deno.land/std@0.217.0/http/etag.ts +++ b/src/vendor/jsr.io/@std/http/0.224.5/etag.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. /** * Provides functions for dealing with and matching ETags, including @@ -13,7 +14,7 @@ * @module */ -import { encodeBase64 as base64Encode } from "../encoding/base64.ts"; +import { encodeBase64 as base64Encode } from "jsr:/@std/encoding@1.0.0-rc.2/base64"; /** * Just the part of {@linkcode Deno.FileInfo} that is required to calculate an `ETag`, @@ -40,7 +41,7 @@ export interface ETagOptions { /** * A digest algorithm to use to calculate the etag. * - * @default {"FNV32A"} + * @default {"SHA-256"} */ algorithm?: AlgorithmIdentifier; @@ -94,9 +95,10 @@ async function calcFileInfo( * it will be fingerprinted as a "strong" tag, otherwise if it is just file * information, it will be calculated as a weak tag. * + * @example Usage * ```ts - * import { calculate } from "https://deno.land/std@$STD_VERSION/http/etag.ts"; - * import { assert } from "https://deno.land/std@$STD_VERSION/assert/assert.ts" + * import { calculate } from "@std/http/etag"; + * import { assert } from "@std/assert/assert"; * * const body = "hello deno!"; * @@ -105,6 +107,10 @@ async function calcFileInfo( * * const res = new Response(body, { headers: { etag } }); * ``` + * + * @param entity The entity to get the ETag for. + * @param options Various additional options. + * @returns The calculated ETag. */ export async function calculate( entity: Entity, @@ -126,12 +132,13 @@ export async function calculate( * See MDN's [`If-Match`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Match) * article for more information on how to use this function. * - * ```ts + * @example Usage + * ```ts no-eval * import { * calculate, * ifMatch, - * } from "https://deno.land/std@$STD_VERSION/http/etag.ts"; - * import { assert } from "https://deno.land/std@$STD_VERSION/assert/assert.ts" + * } from "@std/http/etag"; + * import { assert } from "@std/assert/assert" * * const body = "hello deno!"; * @@ -146,6 +153,10 @@ export async function calculate( * } * }); * ``` + * + * @param value the If-Match header value. + * @param etag the ETag to check against. + * @returns whether or not the parameters match. */ export function ifMatch( value: string | null, @@ -169,12 +180,13 @@ export function ifMatch( * See MDN's [`If-None-Match`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match) * article for more information on how to use this function. * - * ```ts + * @example Usage + * ```ts no-eval * import { * calculate, * ifNoneMatch, - * } from "https://deno.land/std@$STD_VERSION/http/etag.ts"; - * import { assert } from "https://deno.land/std@$STD_VERSION/assert/assert.ts" + * } from "@std/http/etag"; + * import { assert } from "@std/assert/assert" * * const body = "hello deno!"; * @@ -189,6 +201,10 @@ export function ifMatch( * } * }); * ``` + * + * @param value the If-None-Match header value. + * @param etag the ETag to check against. + * @returns whether or not the parameters do not match. */ export function ifNoneMatch( value: string | null, diff --git a/src/vendor/deno.land/std@0.217.0/http/file_server.ts b/src/vendor/jsr.io/@std/http/0.224.5/file_server.ts similarity index 90% rename from src/vendor/deno.land/std@0.217.0/http/file_server.ts rename to src/vendor/jsr.io/@std/http/0.224.5/file_server.ts index 214cc74bcc6..d877a79d1ee 100644 --- a/src/vendor/deno.land/std@0.217.0/http/file_server.ts +++ b/src/vendor/jsr.io/@std/http/0.224.5/file_server.ts @@ -12,16 +12,16 @@ * * ```shell * > # start server - * > deno run --allow-net --allow-read https://deno.land/std@$STD_VERSION/http/file_server.ts + * > deno run --allow-net --allow-read @std/http/file-server * > # show help - * > deno run --allow-net --allow-read https://deno.land/std@$STD_VERSION/http/file_server.ts --help + * > deno run --allow-net --allow-read @std/http/file-server --help * ``` * * If you want to install and run: * * ```shell * > # install - * > deno install --allow-net --allow-read https://deno.land/std@$STD_VERSION/http/file_server.ts + * > deno install --allow-net --allow-read @std/http/file-server * > # start server * > file_server * > # show help @@ -31,14 +31,14 @@ * @module */ -import { join as posixJoin } from "../path/posix/join.ts"; -import { normalize as posixNormalize } from "../path/posix/normalize.ts"; -import { extname } from "../path/extname.ts"; -import { join } from "../path/join.ts"; -import { relative } from "../path/relative.ts"; -import { resolve } from "../path/resolve.ts"; -import { SEPARATOR_PATTERN } from "../path/constants.ts"; -import { contentType } from "../media_types/content_type.ts"; +import { join as posixJoin } from "jsr:/@std/path@1.0.0-rc.2/posix/join"; +import { normalize as posixNormalize } from "jsr:/@std/path@1.0.0-rc.2/posix/normalize"; +import { extname } from "jsr:/@std/path@1.0.0-rc.2/extname"; +import { join } from "jsr:/@std/path@1.0.0-rc.2/join"; +import { relative } from "jsr:/@std/path@1.0.0-rc.2/relative"; +import { resolve } from "jsr:/@std/path@1.0.0-rc.2/resolve"; +import { SEPARATOR_PATTERN } from "jsr:/@std/path@1.0.0-rc.2/constants"; +import { contentType } from "jsr:/@std/media-types@^1.0.0-rc.1/content-type"; import { calculate, ifNoneMatch } from "./etag.ts"; import { isRedirectStatus, @@ -46,11 +46,12 @@ import { STATUS_TEXT, type StatusCode, } from "./status.ts"; -import { ByteSliceStream } from "../streams/byte_slice_stream.ts"; -import { parseArgs } from "../cli/parse_args.ts"; -import { red } from "../fmt/colors.ts"; -import { VERSION } from "../version.ts"; -import { format as formatBytes } from "../fmt/bytes.ts"; +import { ByteSliceStream } from "jsr:/@std/streams@^0.224.5/byte-slice-stream"; +import { parseArgs } from "jsr:/@std/cli@^0.224.7/parse-args"; +import { red } from "jsr:/@std/fmt@^0.225.4/colors"; +import denoConfig from "./deno.json" with { type: "json" }; +import { format as formatBytes } from "jsr:/@std/fmt@^0.225.4/bytes"; +import { getNetworkAddress } from "jsr:/@std/net@^0.224.3/get-network-address"; interface EntryInfo { mode: string; @@ -148,8 +149,19 @@ export interface ServeFileOptions { /** * Returns an HTTP Response with the requested file as the body. + * + * @example Usage + * ```ts no-eval + * import { serveFile } from "@std/http/file-server"; + * + * Deno.serve((req) => { + * return serveFile(req, "README.md"); + * }); + * ``` + * * @param req The server request context used to cleanup the file handle. * @param filePath Path of the file to serve. + * @returns A response for the request. */ export async function serveFile( req: Request, @@ -577,8 +589,9 @@ export interface ServeDirOptions { /** * Serves the files under the given directory root (opts.fsRoot). * - * ```ts - * import { serveDir } from "https://deno.land/std@$STD_VERSION/http/file_server.ts"; + * @example Usage + * ```ts no-eval + * import { serveDir } from "@std/http/file-server"; * * Deno.serve((req) => { * const pathname = new URL(req.url).pathname; @@ -592,10 +605,10 @@ export interface ServeDirOptions { * }); * ``` * - * Optionally you can pass `urlRoot` option. If it's specified that part is stripped from the beginning of the requested pathname. + * @example Optionally you can pass `urlRoot` option. If it's specified that part is stripped from the beginning of the requested pathname. * - * ```ts - * import { serveDir } from "https://deno.land/std@$STD_VERSION/http/file_server.ts"; + * ```ts no-eval + * import { serveDir } from "@std/http/file-server"; * * // ... * serveDir(new Request("http://localhost/static/path/to/file"), { @@ -607,6 +620,8 @@ export interface ServeDirOptions { * The above example serves `./public/path/to/file` for the request to `/static/path/to/file`. * * @param req The request to handle + * @param opts Additional options. + * @returns A response for the request. */ export async function serveDir( req: Request, @@ -778,7 +793,7 @@ function main() { } if (serverArgs.version) { - console.log(`Deno File Server ${VERSION}`); + console.log(`Deno File Server ${denoConfig.version}`); Deno.exit(); } @@ -806,10 +821,21 @@ function main() { const useTls = !!(keyFile && certFile); + function onListen({ port, hostname }: { port: number; hostname: string }) { + const networkAddress = getNetworkAddress(); + const protocol = useTls ? "https" : "http"; + let message = `Listening on:\n- Local: ${protocol}://${hostname}:${port}`; + if (networkAddress && !DENO_DEPLOYMENT_ID) { + message += `\n- Network: ${protocol}://${networkAddress}:${port}`; + } + console.log(message); + } + if (useTls) { Deno.serve({ port, hostname: host, + onListen, cert: Deno.readTextFileSync(certFile), key: Deno.readTextFileSync(keyFile), }, handler); @@ -817,16 +843,17 @@ function main() { Deno.serve({ port, hostname: host, + onListen, }, handler); } } function printUsage() { - console.log(`Deno File Server ${VERSION} + console.log(`Deno File Server ${denoConfig.version} Serves a local directory in HTTP. INSTALL: - deno install --allow-net --allow-read https://deno.land/std/http/file_server.ts + deno install --allow-net --allow-read jsr:@std/http@${denoConfig.version}/file_server USAGE: file_server [path] [options] diff --git a/src/vendor/deno.land/std@0.217.0/http/mod.ts b/src/vendor/jsr.io/@std/http/0.224.5/mod.ts similarity index 92% rename from src/vendor/deno.land/std@0.217.0/http/mod.ts rename to src/vendor/jsr.io/@std/http/0.224.5/mod.ts index 4c23569517e..2b6c6326530 100644 --- a/src/vendor/deno.land/std@0.217.0/http/mod.ts +++ b/src/vendor/jsr.io/@std/http/0.224.5/mod.ts @@ -8,7 +8,7 @@ * A small program for serving local files over HTTP. * * ```sh - * deno run --allow-net --allow-read https://deno.land/std/http/file_server.ts + * deno run --allow-net --allow-read --allow-sys jsr:@std/http/file-server * > HTTP server listening on http://localhost:4507/ * ``` * @@ -49,8 +49,8 @@ * For example to integrate the user agent provided in the header `User-Agent` * in an http request would look like this: * - * ```ts - * import { UserAgent } from "https://deno.land/std@$STD_VERSION/http/user_agent.ts"; + * ```ts no-eval + * import { UserAgent } from "@std/http/user-agent"; * * Deno.serve((req) => { * const userAgent = new UserAgent(req.headers.get("user-agent") ?? ""); diff --git a/src/vendor/deno.land/std@0.217.0/http/negotiation.ts b/src/vendor/jsr.io/@std/http/0.224.5/negotiation.ts similarity index 60% rename from src/vendor/deno.land/std@0.217.0/http/negotiation.ts rename to src/vendor/jsr.io/@std/http/0.224.5/negotiation.ts index f05e11c531c..29585603f56 100644 --- a/src/vendor/deno.land/std@0.217.0/http/negotiation.ts +++ b/src/vendor/jsr.io/@std/http/0.224.5/negotiation.ts @@ -24,45 +24,53 @@ export type Request = { * preference. If there are no media types supplied in the request, then any * media type selector will be returned. * - * @example + * @example Usage * ```ts - * import { accepts } from "https://deno.land/std@$STD_VERSION/http/negotiation.ts"; + * import { accepts } from "@std/http/negotiation"; + * import { assertEquals } from "@std/assert/assert-equals"; * - * const req = new Request("https://example.com/", { + * const request = new Request("https://example.com/", { * headers: { - * "accept": + * accept: * "text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, *\/*;q=0.8", * }, * }); * - * console.log(accepts(req)); - * // [ - * // "text/html", - * // "application/xhtml+xml", - * // "image/webp", - * // "application/xml", - * // "*\/*", - * // ] + * assertEquals(accepts(request), [ + * "text/html", + * "application/xhtml+xml", + * "image/webp", + * "application/xml", + * "*\/*", + * ]); * ``` + * + * @param request The request to get the acceptable media types for. + * @returns An array of acceptable media types. */ export function accepts(request: Request): string[]; /** * For a given set of media types, return the best match accepted in the * request. If no media type matches, then the function returns `undefined`. * - * @example + * @example Usage * ```ts - * import { accepts } from "https://deno.land/std@$STD_VERSION/http/negotiation.ts"; + * import { accepts } from "@std/http/negotiation"; + * import { assertEquals } from "@std/assert/assert-equals"; * - * const req = new Request("https://example.com/", { + * const request = new Request("https://example.com/", { * headers: { - * "accept": + * accept: * "text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, *\/*;q=0.8", * }, * }); * - * accepts(req, "text/html", "image/webp"); // "text/html"; + * assertEquals(accepts(request, "text/html", "image/webp"), "text/html"); * ``` + * + * @param request The request to get the acceptable media types for. + * @param types An array of media types to find the best matching one from. + * @returns The best matching media type, if any match. */ export function accepts( request: Request, @@ -85,16 +93,20 @@ export function accepts( * preference. If there are no encoding supplied in the request, then `["*"]` * is returned, implying any encoding is accepted. * - * @example + * @example Usage * ```ts - * import { acceptsEncodings } from "https://deno.land/std@$STD_VERSION/http/negotiation.ts"; + * import { acceptsEncodings } from "@std/http/negotiation"; + * import { assertEquals } from "@std/assert/assert-equals"; * - * const req = new Request("https://example.com/", { + * const request = new Request("https://example.com/", { * headers: { "accept-encoding": "deflate, gzip;q=1.0, *;q=0.5" }, * }); * - * acceptsEncodings(req); // ["deflate", "gzip", "*"] + * assertEquals(acceptsEncodings(request), ["deflate", "gzip", "*"]); * ``` + * + * @param request The request to get the acceptable content encodings for. + * @returns An array of content encodings this request accepts. */ export function acceptsEncodings(request: Request): string[]; /** @@ -106,16 +118,21 @@ export function acceptsEncodings(request: Request): string[]; * to ensure that there is a match when the `Accept-Encoding` header is part * of the request. * - * @example + * @example Usage * ```ts - * import { acceptsEncodings } from "https://deno.land/std@$STD_VERSION/http/negotiation.ts"; + * import { acceptsEncodings } from "@std/http/negotiation"; + * import { assertEquals } from "@std/assert/assert-equals"; * - * const req = new Request("https://example.com/", { + * const request = new Request("https://example.com/", { * headers: { "accept-encoding": "deflate, gzip;q=1.0, *;q=0.5" }, * }); * - * acceptsEncodings(req, "gzip", "identity"); // "gzip" + * assertEquals(acceptsEncodings(request, "gzip", "identity"), "gzip"); * ``` + * + * @param request The request to get the acceptable content encodings for. + * @param encodings An array of encodings to find the best matching one from. + * @returns The best matching encoding, if any match. */ export function acceptsEncodings( request: Request, @@ -140,36 +157,45 @@ export function acceptsEncodings( * preference. If there are no languages supplied in the request, then `["*"]` * is returned, imply any language is accepted. * - * @example + * @example Usage * ```ts - * import { acceptsLanguages } from "https://deno.land/std@$STD_VERSION/http/negotiation.ts"; + * import { acceptsLanguages } from "@std/http/negotiation"; + * import { assertEquals } from "@std/assert/assert-equals"; * - * const req = new Request("https://example.com/", { + * const request = new Request("https://example.com/", { * headers: { * "accept-language": "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5", * }, * }); * - * acceptsLanguages(req); // ["fr-CH", "fr", "en", "de", "*"] + * assertEquals(acceptsLanguages(request), ["fr-CH", "fr", "en", "de", "*"]); * ``` + * + * @param request The request to get the acceptable languages for. + * @returns An array of languages this request accepts. */ export function acceptsLanguages(request: Request): string[]; /** * For a given set of languages, return the best match accepted in the request. * If no languages match, then the function returns `undefined`. * - * @example + * @example Usage * ```ts - * import { acceptsLanguages } from "https://deno.land/std@$STD_VERSION/http/negotiation.ts"; + * import { acceptsLanguages } from "@std/http/negotiation"; + * import { assertEquals } from "@std/assert/assert-equals"; * - * const req = new Request("https://example.com/", { + * const request = new Request("https://example.com/", { * headers: { * "accept-language": "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5", * }, * }); * - * acceptsLanguages(req, "en-gb", "en-us", "en"); // "en" + * assertEquals(acceptsLanguages(request, "en-gb", "en-us", "en"), "en"); * ``` + * + * @param request The request to get the acceptable language for. + * @param langs An array of languages to find the best matching one from. + * @returns The best matching language, if any match. */ export function acceptsLanguages( request: Request, diff --git a/src/vendor/deno.land/std@0.217.0/http/server.ts b/src/vendor/jsr.io/@std/http/0.224.5/server.ts similarity index 80% rename from src/vendor/deno.land/std@0.217.0/http/server.ts rename to src/vendor/jsr.io/@std/http/0.224.5/server.ts index 8fd3f35599a..f7aea68430c 100644 --- a/src/vendor/deno.land/std@0.217.0/http/server.ts +++ b/src/vendor/jsr.io/@std/http/0.224.5/server.ts @@ -1,5 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { delay } from "../async/delay.ts"; +import { delay } from "jsr:/@std/async@^1.0.0-rc.1/delay"; /** Thrown by Server after it has been closed. */ const ERROR_SERVER_CLOSED = "Server closed"; @@ -19,7 +19,7 @@ const MAX_ACCEPT_BACKOFF_DELAY = 1000; /** * Information about the connection a request arrived on. * - * @deprecated (will be removed after 1.0.0) Use {@linkcode Deno.ServeHandlerInfo} instead. + * @deprecated This will be removed in 1.0.0. Use {@linkcode Deno.ServeHandlerInfo} instead. */ export interface ConnInfo { /** The local address of the connection. */ @@ -36,7 +36,7 @@ export interface ConnInfo { * of the error is isolated to the individual request. It will catch the error * and close the underlying connection. * - * @deprecated (will be removed after 1.0.0) Use {@linkcode Deno.ServeHandler} instead. + * @deprecated This will be removed in 1.0.0. Use {@linkcode Deno.ServeHandler} instead. */ export type Handler = ( request: Request, @@ -46,7 +46,7 @@ export type Handler = ( /** * Options for running an HTTP server. * - * @deprecated (will be removed after 1.0.0) Use {@linkcode Deno.ServeInit} instead. + * @deprecated This will be removed in 1.0.0. Use {@linkcode Deno.ServeInit} instead. */ export interface ServerInit extends Partial { /** The handler to invoke for individual HTTP requests. */ @@ -63,7 +63,23 @@ export interface ServerInit extends Partial { /** * Used to construct an HTTP server. * - * @deprecated (will be removed after 1.0.0) Use {@linkcode Deno.serve} instead. + * @deprecated This will be removed in 1.0.0. Use {@linkcode Deno.serve} instead. + * + * @example Usage + * ```ts no-eval + * import { Server } from "@std/http/server"; + * + * const port = 4505; + * const handler = (request: Request) => { + * const body = `Your user-agent is:\n\n${request.headers.get( + * "user-agent", + * ) ?? "Unknown"}`; + * + * return new Response(body, { status: 200 }); + * }; + * + * const server = new Server({ port, handler }); + * ``` */ export class Server { #port?: number; @@ -78,8 +94,9 @@ export class Server { /** * Constructs a new HTTP Server instance. * - * ```ts - * import { Server } from "https://deno.land/std@$STD_VERSION/http/server.ts"; + * @example Usage + * ```ts no-eval + * import { Server } from "@std/http/server"; * * const port = 4505; * const handler = (request: Request) => { @@ -117,8 +134,9 @@ export class Server { * * Will always close the created listener. * - * ```ts - * import { Server } from "https://deno.land/std@$STD_VERSION/http/server.ts"; + * @example Usage + * ```ts no-eval + * import { Server } from "@std/http/server"; * * const handler = (request: Request) => { * const body = `Your user-agent is:\n\n${request.headers.get( @@ -169,8 +187,9 @@ export class Server { * * Throws a server closed error if the server has been closed. * - * ```ts - * import { Server } from "https://deno.land/std@$STD_VERSION/http/server.ts"; + * @example Usage + * ```ts no-eval + * import { Server } from "@std/http/server"; * * const port = 4505; * const handler = (request: Request) => { @@ -213,8 +232,9 @@ export class Server { * * Throws a server closed error if the server has been closed. * - * ```ts - * import { Server } from "https://deno.land/std@$STD_VERSION/http/server.ts"; + * @example Usage + * ```ts no-eval + * import { Server } from "@std/http/server"; * * const port = 4505; * const handler = (request: Request) => { @@ -246,8 +266,8 @@ export class Server { const listener = Deno.listenTls({ port: this.#port ?? HTTPS_PORT, hostname: this.#host ?? "0.0.0.0", - certFile, - keyFile, + cert: Deno.readTextFileSync(certFile), + key: Deno.readTextFileSync(keyFile), transport: "tcp", // ALPN protocol support not yet stable. // alpnProtocols: ["h2", "http/1.1"], @@ -260,6 +280,30 @@ export class Server { * Immediately close the server listeners and associated HTTP connections. * * Throws a server closed error if called after the server has been closed. + * + * @example Usage + * ```ts no-eval + * import { Server } from "@std/http/server"; + * + * const handler = (request: Request) => { + * const body = `Your user-agent is:\n\n${request.headers.get( + * "user-agent", + * ) ?? "Unknown"}`; + * + * return new Response(body, { status: 200 }); + * }; + * + * const server = new Server({ handler }); + * const listener = Deno.listen({ port: 4505 }); + * + * console.log("server listening on http://localhost:4505"); + * + * const serve = server.serve(listener); + * setTimeout(() => { + * server.close(); + * }, 1000); + * await serve; + * ``` */ close() { if (this.#closed) { @@ -287,12 +331,69 @@ export class Server { this.#httpConnections.clear(); } - /** Get whether the server is closed. */ + /** + * Get whether the server is closed. + * + * @example Usage + * ```ts no-eval + * import { Server } from "@std/http/server"; + * + * const handler = (request: Request) => { + * const body = `Your user-agent is:\n\n${request.headers.get( + * "user-agent", + * ) ?? "Unknown"}`; + * + * return new Response(body, { status: 200 }); + * }; + * + * const server = new Server({ handler }); + * const listener = Deno.listen({ port: 4505 }); + * + * console.log("server listening on http://localhost:4505"); + * + * const serve = server.serve(listener); + * setTimeout(() => { + * server.close(); + * }, 1000); + * await serve; + * console.log(server.closed); // returns true + * ``` + * + * @returns Whether its closed or not. + */ get closed(): boolean { return this.#closed; } - /** Get the list of network addresses the server is listening on. */ + /** + * Get the list of network addresses the server is listening on. + * + * @example Usage + * ```tsm no-eval + * import { Server } from "@std/http/server"; + * + * const handler = (request: Request) => { + * const body = `Your user-agent is:\n\n${request.headers.get( + * "user-agent", + * ) ?? "Unknown"}`; + * + * return new Response(body, { status: 200 }); + * }; + * + * const server = new Server({ handler }); + * const listener = Deno.listen({ port: 4505 }); + * + * console.log("server listening on http://localhost:4505"); + * + * const serve = server.serve(listener); + * setTimeout(() => { + * console.log(server.addrs); + * }, 1000); + * await serve; + * ``` + * + * @returns List of addresses. + */ get addrs(): Deno.Addr[] { return Array.from(this.#listeners).map((listener) => listener.addr); } @@ -501,7 +602,7 @@ export class Server { /** * Additional serve options. * - * @deprecated (will be removed after 1.0.0) Use {@linkcode Deno.ServeInit} instead. + * @deprecated This will be removed in 1.0.0. Use {@linkcode Deno.ServeInit} instead. */ export interface ServeInit extends Partial { /** An AbortSignal to close the server and all connections. */ @@ -517,7 +618,7 @@ export interface ServeInit extends Partial { /** * Additional serve listener options. * - * @deprecated (will be removed after 1.0.0) Use {@linkcode Deno.ServeOptions} instead. + * @deprecated This will be removed in 1.0.0. Use {@linkcode Deno.ServeOptions} instead. */ export interface ServeListenerOptions { /** An AbortSignal to close the server and all connections. */ @@ -534,8 +635,9 @@ export interface ServeListenerOptions { * Constructs a server, accepts incoming connections on the given listener, and * handles requests on these connections with the given handler. * - * ```ts - * import { serveListener } from "https://deno.land/std@$STD_VERSION/http/server.ts"; + * @example Usage + * ```ts no-eval + * import { serveListener } from "@std/http/server"; * * const listener = Deno.listen({ port: 4505 }); * @@ -554,7 +656,7 @@ export interface ServeListenerOptions { * @param handler The handler for individual HTTP requests. * @param options Optional serve options. * - * @deprecated (will be removed after 1.0.0) Use {@linkcode Deno.serve} instead. + * @deprecated This will be removed in 1.0.0. Use {@linkcode Deno.serve} instead. */ export async function serveListener( listener: Deno.Listener, @@ -583,27 +685,26 @@ function hostnameForDisplay(hostname: string) { * You can specify an object with a port and hostname option, which is the * address to listen on. The default is port 8000 on hostname "0.0.0.0". * - * The below example serves with the port 8000. - * - * ```ts - * import { serve } from "https://deno.land/std@$STD_VERSION/http/server.ts"; + * @example The below example serves with the port 8000. + * ```ts no-eval + * import { serve } from "@std/http/server"; * serve((_req) => new Response("Hello, world")); * ``` * - * You can change the listening address by the `hostname` and `port` options. + * @example You can change the listening address by the `hostname` and `port` options. * The below example serves with the port 3000. * - * ```ts - * import { serve } from "https://deno.land/std@$STD_VERSION/http/server.ts"; + * ```ts no-eval + * import { serve } from "@std/http/server"; * serve((_req) => new Response("Hello, world"), { port: 3000 }); * ``` * - * `serve` function prints the message `Listening on http://:/` + * @example `serve` function prints the message `Listening on http://:/` * on start-up by default. If you like to change this message, you can specify * `onListen` option to override it. * - * ```ts - * import { serve } from "https://deno.land/std@$STD_VERSION/http/server.ts"; + * ```ts no-eval + * import { serve } from "@std/http/server"; * serve((_req) => new Response("Hello, world"), { * onListen({ port, hostname }) { * console.log(`Server started at http://${hostname}:${port}`); @@ -612,17 +713,17 @@ function hostnameForDisplay(hostname: string) { * }); * ``` * - * You can also specify `undefined` or `null` to stop the logging behavior. + * @example You can also specify `undefined` or `null` to stop the logging behavior. * - * ```ts - * import { serve } from "https://deno.land/std@$STD_VERSION/http/server.ts"; + * ```ts no-eval + * import { serve } from "@std/http/server"; * serve((_req) => new Response("Hello, world"), { onListen: undefined }); * ``` * * @param handler The handler for individual HTTP requests. * @param options The options. See `ServeInit` documentation for details. * - * @deprecated (will be removed after 1.0.0) Use {@linkcode Deno.serve} instead. + * @deprecated This will be removed in 1.0.0. Use {@linkcode Deno.serve} instead. */ export async function serve( handler: Handler, @@ -667,7 +768,7 @@ export async function serve( /** * Initialization parameters for {@linkcode serveTls}. * - * @deprecated (will be removed after 1.0.0) Use {@linkcode Deno.ServeTlsOptions} instead. + * @deprecated This will be removed in 1.0.0. Use {@linkcode Deno.ServeTlsOptions} instead. */ export interface ServeTlsInit extends ServeInit { /** Server private key in PEM format */ @@ -691,10 +792,10 @@ export interface ServeTlsInit extends ServeInit { * You can specify an object with a port and hostname option, which is the * address to listen on. The default is port 8443 on hostname "0.0.0.0". * - * The below example serves with the default port 8443. + * @example The below example serves with the default port 8443. * - * ```ts - * import { serveTls } from "https://deno.land/std@$STD_VERSION/http/server.ts"; + * ```ts no-eval + * import { serveTls } from "@std/http/server"; * * const cert = "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n"; * const key = "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"; @@ -707,12 +808,12 @@ export interface ServeTlsInit extends ServeInit { * serveTls((_req) => new Response("Hello, world"), { certFile, keyFile }); * ``` * - * `serveTls` function prints the message `Listening on https://:/` + * @example `serveTls` function prints the message `Listening on https://:/` * on start-up by default. If you like to change this message, you can specify * `onListen` option to override it. * - * ```ts - * import { serveTls } from "https://deno.land/std@$STD_VERSION/http/server.ts"; + * ```ts no-eval + * import { serveTls } from "@std/http/server"; * const certFile = "/path/to/certFile.crt"; * const keyFile = "/path/to/keyFile.key"; * serveTls((_req) => new Response("Hello, world"), { @@ -725,10 +826,10 @@ export interface ServeTlsInit extends ServeInit { * }); * ``` * - * You can also specify `undefined` or `null` to stop the logging behavior. + * @example You can also specify `undefined` or `null` to stop the logging behavior. * - * ```ts - * import { serveTls } from "https://deno.land/std@$STD_VERSION/http/server.ts"; + * ```ts no-eval + * import { serveTls } from "@std/http/server"; * const certFile = "/path/to/certFile.crt"; * const keyFile = "/path/to/keyFile.key"; * serveTls((_req) => new Response("Hello, world"), { @@ -742,7 +843,7 @@ export interface ServeTlsInit extends ServeInit { * @param options The options. See `ServeTlsInit` documentation for details. * @returns * - * @deprecated (will be removed after 1.0.0) Use {@linkcode Deno.serve} instead. + * @deprecated This will be removed in 1.0.0. Use {@linkcode Deno.serve} instead. */ export async function serveTls( handler: Handler, @@ -773,7 +874,9 @@ export async function serveTls( once: true, }); + // deno-lint-ignore no-sync-fn-in-async-fn const key = options.key || Deno.readTextFileSync(options.keyFile!); + // deno-lint-ignore no-sync-fn-in-async-fn const cert = options.cert || Deno.readTextFileSync(options.certFile!); const listener = Deno.listenTls({ diff --git a/src/vendor/deno.land/std@0.217.0/http/server_sent_event_stream.ts b/src/vendor/jsr.io/@std/http/0.224.5/server_sent_event_stream.ts similarity index 96% rename from src/vendor/deno.land/std@0.217.0/http/server_sent_event_stream.ts rename to src/vendor/jsr.io/@std/http/0.224.5/server_sent_event_stream.ts index fcd4953e81e..0a43efcf20a 100644 --- a/src/vendor/deno.land/std@0.217.0/http/server_sent_event_stream.ts +++ b/src/vendor/jsr.io/@std/http/0.224.5/server_sent_event_stream.ts @@ -61,12 +61,12 @@ function stringify(message: ServerSentEventMessage): Uint8Array { * * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events} * - * @example - * ```ts + * @example Usage + * ```ts no-assert * import { * type ServerSentEventMessage, * ServerSentEventStream, - * } from "https://deno.land/std@$STD_VERSION/http/server_sent_event_stream.ts"; + * } from "@std/http/server-sent-event-stream"; * * const stream = ReadableStream.from([ * { data: "hello there" } diff --git a/src/vendor/deno.land/std@0.217.0/http/status.ts b/src/vendor/jsr.io/@std/http/0.224.5/status.ts similarity index 79% rename from src/vendor/deno.land/std@0.217.0/http/status.ts rename to src/vendor/jsr.io/@std/http/0.224.5/status.ts index dfe088e3890..64708d98699 100644 --- a/src/vendor/deno.land/std@0.217.0/http/status.ts +++ b/src/vendor/jsr.io/@std/http/0.224.5/status.ts @@ -6,20 +6,20 @@ * status codes and provides several type guards for handling status codes * with type safety. * - * @example + * @example The status code and status text * ```ts * import { * STATUS_CODE, * STATUS_TEXT, - * } from "https://deno.land/std@$STD_VERSION/http/status.ts"; + * } from "@std/http/status"; * * console.log(STATUS_CODE.NotFound); // Returns 404 * console.log(STATUS_TEXT[STATUS_CODE.NotFound]); // Returns "Not Found" * ``` * - * @example + * @example Checking the status code type * ```ts - * import { isErrorStatus } from "https://deno.land/std@$STD_VERSION/http/status.ts"; + * import { isErrorStatus } from "@std/http/status"; * * const res = await fetch("https://example.com/"); * @@ -313,45 +313,136 @@ export type ServerErrorStatus = /** An HTTP status that is an error (4XX and 5XX). */ export type ErrorStatus = ClientErrorStatus | ServerErrorStatus; -/** Returns whether the provided number is a valid HTTP status code. */ +/** + * Returns whether the provided number is a valid HTTP status code. + * + * @example Usage + * ```ts + * import { isStatus } from "@std/http/status"; + * import { assert } from "@std/assert/assert"; + * + * assert(isStatus(404)); + * ``` + * + * @param status The status to assert against. + * @returns Whether or not the provided status is a valid status code. + */ export function isStatus(status: number): status is StatusCode { return Object.values(STATUS_CODE).includes(status as StatusCode); } -/** A type guard that determines if the status code is informational. */ +/** + * A type guard that determines if the status code is informational. + * + * @example Usage + * ```ts + * import { isInformationalStatus } from "@std/http/status"; + * import { assert } from "@std/assert/assert"; + * + * assert(isInformationalStatus(100)); + * ``` + * + * @param status The status to assert against. + * @returns Whether or not the provided status is an informational status code. + */ export function isInformationalStatus( status: number, ): status is InformationalStatus { return isStatus(status) && status >= 100 && status < 200; } -/** A type guard that determines if the status code is successful. */ +/** + * A type guard that determines if the status code is successful. + * + * @example Usage + * ```ts + * import { isSuccessfulStatus } from "@std/http/status"; + * import { assert } from "@std/assert/assert"; + * + * assert(isSuccessfulStatus(200)); + * ``` + * + * @param status The status to assert against. + * @returns Whether or not the provided status is a successful status code. + */ export function isSuccessfulStatus( status: number, ): status is SuccessfulStatus { return isStatus(status) && status >= 200 && status < 300; } -/** A type guard that determines if the status code is a redirection. */ +/** + * A type guard that determines if the status code is a redirection. + * + * @example Usage + * ```ts + * import { isRedirectStatus } from "@std/http/status"; + * import { assert } from "@std/assert/assert"; + * + * assert(isRedirectStatus(302)); + * ``` + * + * @param status The status to assert against. + * @returns Whether or not the provided status is a redirect status code. + */ export function isRedirectStatus(status: number): status is RedirectStatus { return isStatus(status) && status >= 300 && status < 400; } -/** A type guard that determines if the status code is a client error. */ +/** + * A type guard that determines if the status code is a client error. + * + * @example Usage + * ```ts + * import { isClientErrorStatus } from "@std/http/status"; + * import { assert } from "@std/assert/assert"; + * + * assert(isClientErrorStatus(404)); + * ``` + * + * @param status The status to assert against. + * @returns Whether or not the provided status is a client error status code. + */ export function isClientErrorStatus( status: number, ): status is ClientErrorStatus { return isStatus(status) && status >= 400 && status < 500; } -/** A type guard that determines if the status code is a server error. */ +/** + * A type guard that determines if the status code is a server error. + * + * @example Usage + * ```ts + * import { isServerErrorStatus } from "@std/http/status"; + * import { assert } from "@std/assert/assert"; + * + * assert(isServerErrorStatus(502)); + * ``` + * + * @param status The status to assert against. + * @returns Whether or not the provided status is a server error status code. + */ export function isServerErrorStatus( status: number, ): status is ServerErrorStatus { return isStatus(status) && status >= 500 && status < 600; } -/** A type guard that determines if the status code is an error. */ +/** + * A type guard that determines if the status code is an error. + * + * @example Usage + * ```ts + * import { isErrorStatus } from "@std/http/status"; + * import { assert } from "@std/assert/assert"; + * + * assert(isErrorStatus(502)); + * ``` + * + * @param status The status to assert against. + * @returns Whether or not the provided status is an error status code. + */ export function isErrorStatus(status: number): status is ErrorStatus { return isStatus(status) && status >= 400 && status < 600; } diff --git a/src/vendor/deno.land/std@0.217.0/http/unstable_signed_cookie.ts b/src/vendor/jsr.io/@std/http/0.224.5/unstable_signed_cookie.ts similarity index 68% rename from src/vendor/deno.land/std@0.217.0/http/unstable_signed_cookie.ts rename to src/vendor/jsr.io/@std/http/0.224.5/unstable_signed_cookie.ts index faf61fb4cbe..30f832e4bd9 100644 --- a/src/vendor/deno.land/std@0.217.0/http/unstable_signed_cookie.ts +++ b/src/vendor/jsr.io/@std/http/0.224.5/unstable_signed_cookie.ts @@ -1,5 +1,6 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { decodeHex, encodeHex } from "../encoding/hex.ts"; +// This module is browser compatible. +import { decodeHex, encodeHex } from "jsr:/@std/encoding@1.0.0-rc.2/hex"; const encoder = new TextEncoder(); @@ -14,10 +15,10 @@ function splitByLast(value: string, separator: string): [string, string] { * Returns a promise with the signed cookie value from the given cryptographic * key. * - * @example - * ```ts - * import { signCookie } from "https://deno.land/std@$STD_VERSION/http/unstable_signed_cookie.ts"; - * import { setCookie } from "https://deno.land/std@$STD_VERSION/http/cookie.ts"; + * @example Usage + * ```ts no-eval no-assert + * import { signCookie } from "@std/http/unstable-signed-cookie"; + * import { setCookie } from "@std/http/cookie"; * * const key = await crypto.subtle.generateKey( * { name: "HMAC", hash: "SHA-256" }, @@ -34,6 +35,10 @@ function splitByLast(value: string, separator: string): [string, string] { * * const cookieHeader = headers.get("set-cookie"); * ``` + * + * @param value The cookie value to sign. + * @param key The cryptographic key to sign the cookie with. + * @returns The signed cookie. */ export async function signCookie( value: string, @@ -48,10 +53,10 @@ export async function signCookie( /** * Returns a promise of a boolean indicating whether the signed cookie is valid. * - * @example - * ```ts - * import { verifyCookie } from "https://deno.land/std@$STD_VERSION/http/unstable_signed_cookie.ts"; - * import { getCookies } from "https://deno.land/std@$STD_VERSION/http/cookie.ts"; + * @example Usage + * ```ts no-eval no-assert + * import { verifyCookie } from "@std/http/unstable-signed-cookie"; + * import { getCookies } from "@std/http/cookie"; * * const key = await crypto.subtle.generateKey( * { name: "HMAC", hash: "SHA-256" }, @@ -63,8 +68,13 @@ export async function signCookie( * Cookie: "location=tokyo.37f7481039762eef5cd46669f93c0a3214dfecba7d0cdc0b0dc40036063fb22e", * }); * const signedCookie = getCookies(headers)["location"]; + * if (signedCookie === undefined) throw new Error("Cookie not found"); * await verifyCookie(signedCookie, key); * ``` + * + * @param signedCookie The signed cookie to verify. + * @param key The cryptographic key to verify the cookie with. + * @returns Whether or not the cookie is valid. */ export async function verifyCookie( signedCookie: string, @@ -84,10 +94,10 @@ export async function verifyCookie( * * Important: always verify the cookie using {@linkcode verifyCookie} first. * - * @example - * ```ts - * import { verifyCookie, parseSignedCookie } from "https://deno.land/std@$STD_VERSION/http/unstable_signed_cookie.ts"; - * import { getCookies } from "https://deno.land/std@$STD_VERSION/http/cookie.ts"; + * @example Usage + * ```ts no-eval no-assert + * import { verifyCookie, parseSignedCookie } from "@std/http/unstable-signed-cookie"; + * import { getCookies } from "@std/http/cookie"; * * const key = await crypto.subtle.generateKey( * { name: "HMAC", hash: "SHA-256" }, @@ -99,9 +109,13 @@ export async function verifyCookie( * Cookie: "location=tokyo.37f7481039762eef5cd46669f93c0a3214dfecba7d0cdc0b0dc40036063fb22e", * }); * const signedCookie = getCookies(headers)["location"]; + * if (signedCookie === undefined) throw new Error("Cookie not found"); * await verifyCookie(signedCookie, key); * const cookie = parseSignedCookie(signedCookie); * ``` + * + * @param signedCookie The signed cookie to parse the value from. + * @returns The parsed cookie. */ export function parseSignedCookie(signedCookie: string): string { return splitByLast(signedCookie, ".")[0]; diff --git a/src/vendor/deno.land/std@0.217.0/http/user_agent.ts b/src/vendor/jsr.io/@std/http/0.224.5/user_agent.ts similarity index 86% rename from src/vendor/deno.land/std@0.217.0/http/user_agent.ts rename to src/vendor/jsr.io/@std/http/0.224.5/user_agent.ts index 46b913ae016..cc9e2e80ccf 100644 --- a/src/vendor/deno.land/std@0.217.0/http/user_agent.ts +++ b/src/vendor/jsr.io/@std/http/0.224.5/user_agent.ts @@ -11,8 +11,6 @@ * @module */ -import { assert } from "../assert/assert.ts"; - const ARCHITECTURE = "architecture"; const MODEL = "model"; const NAME = "name"; @@ -210,7 +208,9 @@ function mapper( target[prop] = match ? match.replace(re, value) : undefined; } else { const [prop, re, value, fn] = processor; - assert(fn); + if (!fn) { + throw new TypeError("Function must be defined in processor"); + } target[prop] = match ? fn.call(prop, match.replace(re, value)) : undefined; @@ -982,6 +982,17 @@ const matchers: Matchers = { * A representation of user agent string, which can be used to determine * environmental information represented by the string. All properties are * determined lazily. + * + * @example Usage + * ```ts no-eval + * import { UserAgent } from "@std/http/user-agent"; + * + * Deno.serve((req) => { + * const userAgent = new UserAgent(req.headers.get("user-agent") ?? ""); + * return new Response(`Hello, ${userAgent.browser.name} + * on ${userAgent.os.name} ${userAgent.os.version}!`); + * }); + * ``` */ export class UserAgent { #browser?: Browser; @@ -994,9 +1005,9 @@ export class UserAgent { /** * Constructs a new instance. * - * @example - * ```ts - * import { UserAgent } from "https://deno.land/std@$STD_VERSION/http/user_agent.ts"; + * @example Usage + * ```ts no-eval + * import { UserAgent } from "@std/http/user-agent"; * * Deno.serve((req) => { * const userAgent = new UserAgent(req.headers.get("user-agent") ?? ""); @@ -1004,6 +1015,8 @@ export class UserAgent { * on ${userAgent.os.name} ${userAgent.os.version}!`); * }); * ``` + * + * @param ua The user agent string to construct this instance with. */ constructor(ua: string | null) { this.#ua = ua ?? ""; @@ -1012,6 +1025,18 @@ export class UserAgent { /** * The name and version of the browser extracted from the user agent * string. + * + * @example Usage + * ```ts no-eval + * import { UserAgent } from "@std/http/user-agent"; + * + * Deno.serve((req) => { + * const userAgent = new UserAgent(req.headers.get("user-agent") ?? ""); + * return new Response(`Hello, ${userAgent.browser.name}!`); + * }); + * ``` + * + * @returns An object with information about the user agent's browser. */ get browser(): Browser { if (!this.#browser) { @@ -1024,7 +1049,21 @@ export class UserAgent { return this.#browser; } - /** The architecture of the CPU extracted from the user agent string. */ + /** + * The architecture of the CPU extracted from the user agent string. + * + * @example Usage + * ```ts no-eval + * import { UserAgent } from "@std/http/user-agent"; + * + * Deno.serve((req) => { + * const userAgent = new UserAgent(req.headers.get("user-agent") ?? ""); + * return new Response(`Hello, ${userAgent.cpu.architecture}!`); + * }); + * ``` + * + * @returns An object with information about the user agent's CPU. + */ get cpu(): Cpu { if (!this.#cpu) { this.#cpu = { architecture: undefined }; @@ -1037,6 +1076,18 @@ export class UserAgent { /** * The model, type, and vendor of a device if present in a user agent * string. + * + * @example Usage + * ```ts no-eval + * import { UserAgent } from "@std/http/user-agent"; + * + * Deno.serve((req) => { + * const userAgent = new UserAgent(req.headers.get("user-agent") ?? ""); + * return new Response(`Hello, ${userAgent.device.model}!`); + * }); + * ``` + * + * @returns An object with information about the user agent's device. */ get device(): Device { if (!this.#device) { @@ -1047,7 +1098,21 @@ export class UserAgent { return this.#device; } - /** The name and version of the browser engine in a user agent string. */ + /** + * The name and version of the browser engine in a user agent string. + * + * @example Usage + * ```ts no-eval + * import { UserAgent } from "@std/http/user-agent"; + * + * Deno.serve((req) => { + * const userAgent = new UserAgent(req.headers.get("user-agent") ?? ""); + * return new Response(`Hello, ${userAgent.engine.name}!`); + * }); + * ``` + * + * @returns An object with information about the user agent's browser engine. + */ get engine(): Engine { if (!this.#engine) { this.#engine = { name: undefined, version: undefined }; @@ -1057,7 +1122,21 @@ export class UserAgent { return this.#engine; } - /** The name and version of the operating system in a user agent string. */ + /** + * The name and version of the operating system in a user agent string. + * + * @example Usage + * ```ts no-eval + * import { UserAgent } from "@std/http/user-agent"; + * + * Deno.serve((req) => { + * const userAgent = new UserAgent(req.headers.get("user-agent") ?? ""); + * return new Response(`Hello, ${userAgent.os.name}!`); + * }); + * ``` + * + * @returns An object with information about the user agent's OS. + */ get os(): Os { if (!this.#os) { this.#os = { name: undefined, version: undefined }; @@ -1067,12 +1146,40 @@ export class UserAgent { return this.#os; } - /** A read only version of the user agent string related to the instance. */ + /** + * A read only version of the user agent string related to the instance. + * + * @example Usage + * ```ts no-eval + * import { UserAgent } from "@std/http/user-agent"; + * + * Deno.serve((req) => { + * const userAgent = new UserAgent(req.headers.get("user-agent") ?? ""); + * return new Response(`Hello, ${userAgent.ua}!`); + * }); + * ``` + * + * @returns The user agent string. + */ get ua(): string { return this.#ua; } - /** Converts the current instance to a JSON representation. */ + /** + * Converts the current instance to a JSON representation. + * + * @example Usage + * ```ts no-eval + * import { UserAgent } from "@std/http/user-agent"; + * + * Deno.serve((req) => { + * const userAgent = new UserAgent(req.headers.get("user-agent") ?? ""); + * return new Response(`Hello, ${JSON.stringify(userAgent.toJSON())}!`); + * }); + * ``` + * + * @returns A JSON representation on this user agent instance. + */ toJSON(): { browser: Browser; cpu: Cpu; @@ -1085,12 +1192,43 @@ export class UserAgent { return { browser, cpu, device, engine, os, ua }; } - /** Converts the current instance to a string. */ + /** + * Converts the current instance to a string. + * + * @example Usage + * ```ts no-eval + * import { UserAgent } from "@std/http/user-agent"; + * + * Deno.serve((req) => { + * const userAgent = new UserAgent(req.headers.get("user-agent") ?? ""); + * return new Response(`Hello, ${userAgent.toString()}!`); + * }); + * ``` + * + * @returns The user agent string. + */ toString(): string { return this.#ua; } - /** Custom output for {@linkcode Deno.inspect}. */ + /** + * Custom output for {@linkcode Deno.inspect}. + * + * @example Usage + * ```ts no-eval + * import { UserAgent } from "@std/http/user-agent"; + * + * Deno.serve((req) => { + * const userAgent = new UserAgent(req.headers.get("user-agent") ?? ""); + * Deno.inspect(userAgent); + * return new Response(`Hello, ${userAgent.ua}!`); + * }); + * ``` + * + * @param inspect internal inspect function. + * + * @returns The custom value to inspect. + */ [Symbol.for("Deno.customInspect")]( inspect: (value: unknown) => string, ): string { @@ -1103,6 +1241,24 @@ export class UserAgent { /** * Custom output for Node's * {@linkcode https://nodejs.org/api/util.html#utilinspectobject-options | util.inspect}. + * + * @example Usage + * ```ts no-eval + * import { UserAgent } from "@std/http/user-agent"; + * import { inspect } from "node:util"; + * + * Deno.serve((req) => { + * const userAgent = new UserAgent(req.headers.get("user-agent") ?? ""); + * inspect(userAgent); + * return new Response(`Hello, ${userAgent.ua}!`); + * }); + * ``` + * + * @param depth internal inspect depth. + * @param options internal inspect option. + * @param inspect internal inspect function. + * + * @returns The custom value to inspect. */ [Symbol.for("nodejs.util.inspect.custom")]( depth: number, diff --git a/src/vendor/deno.land/std@0.217.0/assert/_diff.ts b/src/vendor/jsr.io/@std/internal/0.224.0/diff.ts similarity index 97% rename from src/vendor/deno.land/std@0.217.0/assert/_diff.ts rename to src/vendor/jsr.io/@std/internal/0.224.0/diff.ts index f75f0ff8714..0a8ca80e1f6 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/_diff.ts +++ b/src/vendor/jsr.io/@std/internal/0.224.0/diff.ts @@ -1,15 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -import { - bgGreen, - bgRed, - bold, - gray, - green, - red, - white, -} from "../fmt/colors.ts"; +import { bgGreen, bgRed, bold, gray, green, red, white } from "jsr:/@std/fmt@^0.224.0/colors"; interface FarthestPoint { y: number; @@ -260,7 +252,7 @@ export function diff(A: T[], B: T[]): Array> { * @param A Actual string * @param B Expected string */ -export function diffstr(A: string, B: string) { +export function diffstr(A: string, B: string): DiffResult[] { function unescape(string: string): string { // unescape invisible characters. // ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#escape_sequences @@ -351,7 +343,8 @@ export function diffstr(A: string, B: string) { tokenize(`${unescape(B)}\n`), ); - const added = [], removed = []; + const added = []; + const removed = []; for (const result of diffResult) { if (result.type === DiffType.added) { added.push(result); @@ -366,8 +359,8 @@ export function diffstr(A: string, B: string) { const aLines = hasMoreRemovedLines ? added : removed; const bLines = hasMoreRemovedLines ? removed : added; for (const a of aLines) { - let tokens = [] as Array>, - b: undefined | DiffResult; + let tokens = [] as Array>; + let b: undefined | DiffResult; // Search another diff line with at least one common token while (bLines.length) { b = bLines.shift(); @@ -437,7 +430,8 @@ export function buildMessage( diffResult: ReadonlyArray>, { stringDiff = false } = {}, ): string[] { - const messages: string[] = [], diffMessages: string[] = []; + const messages: string[] = []; + const diffMessages: string[] = []; messages.push(""); messages.push(""); messages.push( diff --git a/src/vendor/deno.land/std@0.217.0/assert/_format.ts b/src/vendor/jsr.io/@std/internal/0.224.0/format.ts similarity index 94% rename from src/vendor/deno.land/std@0.217.0/assert/_format.ts rename to src/vendor/jsr.io/@std/internal/0.224.0/format.ts index 73b04ffc7da..5415657e217 100644 --- a/src/vendor/deno.land/std@0.217.0/assert/_format.ts +++ b/src/vendor/jsr.io/@std/internal/0.224.0/format.ts @@ -1,8 +1,6 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -// This file been copied to `std/expect`. - /** * Converts the input into a string. Objects, Sets and Maps are sorted so as to * make tests less flaky diff --git a/src/vendor/jsr.io/@std/internal/0.224.0/mod.ts b/src/vendor/jsr.io/@std/internal/0.224.0/mod.ts new file mode 100644 index 00000000000..ecd670963c5 --- /dev/null +++ b/src/vendor/jsr.io/@std/internal/0.224.0/mod.ts @@ -0,0 +1,11 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +/** + * Internal utilities for the public API of the Deno Standard Library. + * + * Note: this module is for internal use only and should not be used directly. + * + * @module + */ +export * from "./format.ts"; +export * from "./diff.ts"; diff --git a/src/vendor/deno.land/std@0.217.0/io/_common.ts b/src/vendor/jsr.io/@std/io/0.224.8/_common.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/io/_common.ts rename to src/vendor/jsr.io/@std/io/0.224.8/_common.ts diff --git a/src/vendor/deno.land/std@0.217.0/io/_constants.ts b/src/vendor/jsr.io/@std/io/0.224.8/_constants.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/io/_constants.ts rename to src/vendor/jsr.io/@std/io/0.224.8/_constants.ts diff --git a/src/vendor/jsr.io/@std/io/0.224.8/buf_reader.ts b/src/vendor/jsr.io/@std/io/0.224.8/buf_reader.ts new file mode 100644 index 00000000000..974bb1a222d --- /dev/null +++ b/src/vendor/jsr.io/@std/io/0.224.8/buf_reader.ts @@ -0,0 +1,658 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { copy } from "jsr:@std/bytes@^1.0.2/copy"; +import type { Reader } from "./types.ts"; + +const DEFAULT_BUF_SIZE = 4096; +const MIN_BUF_SIZE = 16; +const MAX_CONSECUTIVE_EMPTY_READS = 100; +const CR = "\r".charCodeAt(0); +const LF = "\n".charCodeAt(0); + +/** + * Thrown when a write operation is attempted on a full buffer. + * + * @example Usage + * ```ts + * import { BufWriter, BufferFullError, Writer } from "@std/io"; + * import { assert, assertEquals } from "@std/assert"; + * + * const writer: Writer = { + * write(p: Uint8Array): Promise { + * throw new BufferFullError(p); + * } + * }; + * const bufWriter = new BufWriter(writer); + * try { + * await bufWriter.write(new Uint8Array([1, 2, 3])); + * } catch (err) { + * assert(err instanceof BufferFullError); + * assertEquals(err.partial, new Uint8Array([3])); + * } + * ``` + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + */ +export class BufferFullError extends Error { + /** + * The partially read bytes + * + * @example Usage + * ```ts + * import { BufferFullError } from "@std/io"; + * import { assertEquals } from "@std/assert/equals"; + * + * const err = new BufferFullError(new Uint8Array(2)); + * assertEquals(err.partial, new Uint8Array(2)); + * ``` + */ + partial: Uint8Array; + + /** + * Construct a new instance. + * + * @param partial The bytes partially read + */ + constructor(partial: Uint8Array) { + super("Buffer full"); + this.name = this.constructor.name; + this.partial = partial; + } +} + +/** + * Thrown when a read from a stream fails to read the + * requested number of bytes. + * + * @example Usage + * ```ts + * import { PartialReadError } from "@std/io"; + * import { assertEquals } from "@std/assert/equals"; + * + * const err = new PartialReadError(new Uint8Array(2)); + * assertEquals(err.name, "PartialReadError"); + * + * ``` + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + */ +export class PartialReadError extends Error { + /** + * The partially read bytes + * + * @example Usage + * ```ts + * import { PartialReadError } from "@std/io"; + * import { assertEquals } from "@std/assert/equals"; + * + * const err = new PartialReadError(new Uint8Array(2)); + * assertEquals(err.partial, new Uint8Array(2)); + * ``` + */ + partial: Uint8Array; + + /** + * Construct a {@linkcode PartialReadError}. + * + * @param partial The bytes partially read + */ + constructor(partial: Uint8Array) { + super("Encountered UnexpectedEof, data only partially read"); + this.name = this.constructor.name; + this.partial = partial; + } +} + +/** + * Result type returned by of {@linkcode BufReader.readLine}. + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + */ +export interface ReadLineResult { + /** The line read */ + line: Uint8Array; + /** `true if the end of the line has not been reached, `false` otherwise. */ + more: boolean; +} + +/** + * Implements buffering for a {@linkcode Reader} object. + * + * @example Usage + * ```ts + * import { BufReader, Buffer } from "@std/io"; + * import { assertEquals } from "@std/assert/equals"; + * + * const encoder = new TextEncoder(); + * const decoder = new TextDecoder(); + * + * const reader = new BufReader(new Buffer(encoder.encode("hello world"))); + * const buf = new Uint8Array(11); + * await reader.read(buf); + * assertEquals(decoder.decode(buf), "hello world"); + * ``` + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + */ +export class BufReader implements Reader { + #buf!: Uint8Array; + #rd!: Reader; // Reader provided by caller. + #r = 0; // buf read position. + #w = 0; // buf write position. + #eof = false; + + /** + * Returns a new {@linkcode BufReader} if `r` is not already one. + * + * @example Usage + * ```ts + * import { BufReader, Buffer } from "@std/io"; + * import { assert } from "@std/assert/assert"; + * + * const reader = new Buffer(new TextEncoder().encode("hello world")); + * const bufReader = BufReader.create(reader); + * assert(bufReader instanceof BufReader); + * ``` + * + * @param r The reader to read from. + * @param size The size of the buffer. + * @returns A new {@linkcode BufReader} if `r` is not already one. + */ + static create(r: Reader, size: number = DEFAULT_BUF_SIZE): BufReader { + return r instanceof BufReader ? r : new BufReader(r, size); + } + + /** + * Constructs a new {@linkcode BufReader} for the given reader and buffer size. + * + * @param rd The reader to read from. + * @param size The size of the buffer. + */ + constructor(rd: Reader, size: number = DEFAULT_BUF_SIZE) { + if (size < MIN_BUF_SIZE) { + size = MIN_BUF_SIZE; + } + this.#reset(new Uint8Array(size), rd); + } + + /** + * Returns the size of the underlying buffer in bytes. + * + * @example Usage + * ```ts + * import { BufReader, Buffer } from "@std/io"; + * import { assertEquals } from "@std/assert/equals"; + * + * const reader = new Buffer(new TextEncoder().encode("hello world")); + * const bufReader = new BufReader(reader); + * + * assertEquals(bufReader.size(), 4096); + * ``` + * + * @returns The size of the underlying buffer in bytes. + */ + size(): number { + return this.#buf.byteLength; + } + + /** + * Returns the number of bytes that can be read from the current buffer. + * + * @example Usage + * ```ts + * import { BufReader, Buffer } from "@std/io"; + * import { assertEquals } from "@std/assert/equals"; + * + * const reader = new Buffer(new TextEncoder().encode("hello world")); + * const bufReader = new BufReader(reader); + * await bufReader.read(new Uint8Array(5)); + * assertEquals(bufReader.buffered(), 6); + * ``` + * + * @returns Number of bytes that can be read from the buffer + */ + buffered(): number { + return this.#w - this.#r; + } + + // Reads a new chunk into the buffer. + #fill = async () => { + // Slide existing data to beginning. + if (this.#r > 0) { + this.#buf.copyWithin(0, this.#r, this.#w); + this.#w -= this.#r; + this.#r = 0; + } + + if (this.#w >= this.#buf.byteLength) { + throw new Error("Buffer full while filling"); + } + + // Read new data: try a limited number of times. + for (let i = MAX_CONSECUTIVE_EMPTY_READS; i > 0; i--) { + const rr = await this.#rd.read(this.#buf.subarray(this.#w)); + if (rr === null) { + this.#eof = true; + return; + } + this.#w += rr; + if (rr > 0) { + return; + } + } + + throw new Error( + `No progress after ${MAX_CONSECUTIVE_EMPTY_READS} read() calls`, + ); + }; + + /** + * Discards any buffered data, resets all state, and switches + * the buffered reader to read from `r`. + * + * @example Usage + * ```ts + * import { BufReader, Buffer } from "@std/io"; + * import { assertEquals } from "@std/assert/equals"; + * + * const reader = new Buffer(new TextEncoder().encode("hello world")); + * const bufReader = new BufReader(reader); + * await bufReader.read(new Uint8Array(5)); + * bufReader.reset(reader); + * assertEquals(bufReader.buffered(), 6); + * ``` + * + * @param r The reader to read from. + */ + reset(r: Reader) { + this.#reset(this.#buf, r); + } + + #reset = (buf: Uint8Array, rd: Reader) => { + this.#buf = buf; + this.#rd = rd; + this.#eof = false; + // this.lastByte = -1; + // this.lastCharSize = -1; + }; + + /** + * Reads data into `p`. + * + * The bytes are taken from at most one `read()` on the underlying `Reader`, + * hence n may be less than `len(p)`. + * To read exactly `len(p)` bytes, use `io.ReadFull(b, p)`. + * + * @example Usage + * ```ts + * import { BufReader, Buffer } from "@std/io"; + * import { assertEquals } from "@std/assert/equals"; + * + * const reader = new Buffer(new TextEncoder().encode("hello world")); + * const bufReader = new BufReader(reader); + * const buf = new Uint8Array(5); + * await bufReader.read(buf); + * assertEquals(new TextDecoder().decode(buf), "hello"); + * ``` + * + * @param p The buffer to read data into. + * @returns The number of bytes read into `p`. + */ + async read(p: Uint8Array): Promise { + let rr: number | null = p.byteLength; + if (p.byteLength === 0) return rr; + + if (this.#r === this.#w) { + if (p.byteLength >= this.#buf.byteLength) { + // Large read, empty buffer. + // Read directly into p to avoid copy. + const rr = await this.#rd.read(p); + // if (rr.nread > 0) { + // this.lastByte = p[rr.nread - 1]; + // this.lastCharSize = -1; + // } + return rr; + } + + // One read. + // Do not use this.fill, which will loop. + this.#r = 0; + this.#w = 0; + rr = await this.#rd.read(this.#buf); + if (rr === 0 || rr === null) return rr; + this.#w += rr; + } + + // copy as much as we can + const copied = copy(this.#buf.subarray(this.#r, this.#w), p, 0); + this.#r += copied; + // this.lastByte = this.buf[this.r - 1]; + // this.lastCharSize = -1; + return copied; + } + + /** + * Reads exactly `p.length` bytes into `p`. + * + * If successful, `p` is returned. + * + * If the end of the underlying stream has been reached, and there are no more + * bytes available in the buffer, `readFull()` returns `null` instead. + * + * An error is thrown if some bytes could be read, but not enough to fill `p` + * entirely before the underlying stream reported an error or EOF. Any error + * thrown will have a `partial` property that indicates the slice of the + * buffer that has been successfully filled with data. + * + * Ported from https://golang.org/pkg/io/#ReadFull + * + * @example Usage + * ```ts + * import { BufReader, Buffer } from "@std/io"; + * import { assertEquals } from "@std/assert/equals"; + * + * const reader = new Buffer(new TextEncoder().encode("hello world")); + * const bufReader = new BufReader(reader); + * const buf = new Uint8Array(5); + * await bufReader.readFull(buf); + * assertEquals(new TextDecoder().decode(buf), "hello"); + * ``` + * + * @param p The buffer to read data into. + * @returns The buffer `p` if the read is successful, `null` if the end of the + * underlying stream has been reached, and there are no more bytes available in the buffer. + */ + async readFull(p: Uint8Array): Promise { + let bytesRead = 0; + while (bytesRead < p.length) { + const rr = await this.read(p.subarray(bytesRead)); + if (rr === null) { + if (bytesRead === 0) { + return null; + } else { + throw new PartialReadError(p.subarray(0, bytesRead)); + } + } + bytesRead += rr; + } + return p; + } + + /** + * Returns the next byte ([0, 255]) or `null`. + * + * @example Usage + * ```ts + * import { BufReader, Buffer } from "@std/io"; + * import { assertEquals } from "@std/assert/equals"; + * + * const reader = new Buffer(new TextEncoder().encode("hello world")); + * const bufReader = new BufReader(reader); + * const byte = await bufReader.readByte(); + * assertEquals(byte, 104); + * ``` + * + * @returns The next byte ([0, 255]) or `null`. + */ + async readByte(): Promise { + while (this.#r === this.#w) { + if (this.#eof) return null; + await this.#fill(); // buffer is empty. + } + const c = this.#buf[this.#r]!; + this.#r++; + // this.lastByte = c; + return c; + } + + /** + * Reads until the first occurrence of delim in the input, + * returning a string containing the data up to and including the delimiter. + * If ReadString encounters an error before finding a delimiter, + * it returns the data read before the error and the error itself + * (often `null`). + * ReadString returns err !== null if and only if the returned data does not end + * in delim. + * + * @example Usage + * ```ts + * import { BufReader, Buffer } from "@std/io"; + * import { assertEquals } from "@std/assert/equals"; + * + * const reader = new Buffer(new TextEncoder().encode("hello world")); + * const bufReader = new BufReader(reader); + * const str = await bufReader.readString(" "); + * assertEquals(str, "hello "); + * + * const str2 = await bufReader.readString(" "); + * assertEquals(str2, "world"); + * ``` + * + * @param delim The delimiter to read until. + * @returns The string containing the data up to and including the delimiter. + */ + async readString(delim: string): Promise { + if (delim.length !== 1) { + throw new Error("Delimiter should be a single character"); + } + const buffer = await this.readSlice(delim.charCodeAt(0)); + if (buffer === null) return null; + return new TextDecoder().decode(buffer); + } + + /** + * A low-level line-reading primitive. Most callers should use + * `readString('\n')` instead. + * + * `readLine()` tries to return a single line, not including the end-of-line + * bytes. If the line was too long for the buffer then `more` is set and the + * beginning of the line is returned. The rest of the line will be returned + * from future calls. `more` will be false when returning the last fragment + * of the line. The returned buffer is only valid until the next call to + * `readLine()`. + * + * The text returned from this method does not include the line end ("\r\n" or + * "\n"). + * + * When the end of the underlying stream is reached, the final bytes in the + * stream are returned. No indication or error is given if the input ends + * without a final line end. When there are no more trailing bytes to read, + * `readLine()` returns `null`. + * + * @example Usage + * ```ts + * import { BufReader, Buffer } from "@std/io"; + * import { assertEquals } from "@std/assert/equals"; + * + * const reader = new Buffer(new TextEncoder().encode("hello\nworld")); + * const bufReader = new BufReader(reader); + * const line1 = await bufReader.readLine(); + * assertEquals(new TextDecoder().decode(line1!.line), "hello"); + * const line2 = await bufReader.readLine(); + * assertEquals(new TextDecoder().decode(line2!.line), "world"); + * ``` + * + * @returns The line read. + */ + async readLine(): Promise { + let line: Uint8Array | null = null; + + try { + line = await this.readSlice(LF); + } catch (err) { + // Don't throw if `readSlice()` failed with `BufferFullError`, instead we + // just return whatever is available and set the `more` flag. + if (!(err instanceof BufferFullError)) { + throw err; + } + + let partial = err.partial; + + // Handle the case where "\r\n" straddles the buffer. + if ( + !this.#eof && partial && + partial.byteLength > 0 && + partial[partial.byteLength - 1] === CR + ) { + // Put the '\r' back on buf and drop it from line. + // Let the next call to ReadLine check for "\r\n". + if (this.#r <= 0) { + throw new Error("Tried to rewind past start of buffer"); + } + this.#r--; + partial = partial.subarray(0, partial.byteLength - 1); + } + + if (partial) { + return { line: partial, more: !this.#eof }; + } + } + + if (line === null) { + return null; + } + + if (line.byteLength === 0) { + return { line, more: false }; + } + + if (line[line.byteLength - 1] === LF) { + let drop = 1; + if (line.byteLength > 1 && line[line.byteLength - 2] === CR) { + drop = 2; + } + line = line.subarray(0, line.byteLength - drop); + } + return { line, more: false }; + } + + /** + * Reads until the first occurrence of `delim` in the input, + * returning a slice pointing at the bytes in the buffer. The bytes stop + * being valid at the next read. + * + * If `readSlice()` encounters an error before finding a delimiter, or the + * buffer fills without finding a delimiter, it throws an error with a + * `partial` property that contains the entire buffer. + * + * If `readSlice()` encounters the end of the underlying stream and there are + * any bytes left in the buffer, the rest of the buffer is returned. In other + * words, EOF is always treated as a delimiter. Once the buffer is empty, + * it returns `null`. + * + * Because the data returned from `readSlice()` will be overwritten by the + * next I/O operation, most clients should use `readString()` instead. + * + * @example Usage + * ```ts + * import { BufReader, Buffer } from "@std/io"; + * import { assertEquals } from "@std/assert/equals"; + * + * const reader = new Buffer(new TextEncoder().encode("hello world")); + * const bufReader = new BufReader(reader); + * const slice = await bufReader.readSlice(0x20); + * assertEquals(new TextDecoder().decode(slice!), "hello "); + * ``` + * + * @param delim The delimiter to read until. + * @returns A slice pointing at the bytes in the buffer. + */ + async readSlice(delim: number): Promise { + let s = 0; // search start index + let slice: Uint8Array | undefined; + + while (true) { + // Search buffer. + let i = this.#buf.subarray(this.#r + s, this.#w).indexOf(delim); + if (i >= 0) { + i += s; + slice = this.#buf.subarray(this.#r, this.#r + i + 1); + this.#r += i + 1; + break; + } + + // EOF? + if (this.#eof) { + if (this.#r === this.#w) { + return null; + } + slice = this.#buf.subarray(this.#r, this.#w); + this.#r = this.#w; + break; + } + + // Buffer full? + if (this.buffered() >= this.#buf.byteLength) { + this.#r = this.#w; + // #4521 The internal buffer should not be reused across reads because it causes corruption of data. + const oldbuf = this.#buf; + const newbuf = this.#buf.slice(0); + this.#buf = newbuf; + throw new BufferFullError(oldbuf); + } + + s = this.#w - this.#r; // do not rescan area we scanned before + + // Buffer is not full. + await this.#fill(); + } + + // Handle last byte, if any. + // const i = slice.byteLength - 1; + // if (i >= 0) { + // this.lastByte = slice[i]; + // this.lastCharSize = -1 + // } + + return slice; + } + + /** + * Returns the next `n` bytes without advancing the reader. The + * bytes stop being valid at the next read call. + * + * When the end of the underlying stream is reached, but there are unread + * bytes left in the buffer, those bytes are returned. If there are no bytes + * left in the buffer, it returns `null`. + * + * If an error is encountered before `n` bytes are available, `peek()` throws + * an error with the `partial` property set to a slice of the buffer that + * contains the bytes that were available before the error occurred. + * + * @example Usage + * ```ts + * import { BufReader, Buffer } from "@std/io"; + * import { assertEquals } from "@std/assert/equals"; + * + * const reader = new Buffer(new TextEncoder().encode("hello world")); + * const bufReader = new BufReader(reader); + * const peeked = await bufReader.peek(5); + * assertEquals(new TextDecoder().decode(peeked!), "hello"); + * ``` + * + * @param n The number of bytes to peek. + * @returns The next `n` bytes without advancing the reader. + */ + async peek(n: number): Promise { + if (n < 0) { + throw new Error("Peek count cannot be negative"); + } + + let avail = this.#w - this.#r; + while (avail < n && avail < this.#buf.byteLength && !this.#eof) { + await this.#fill(); + avail = this.#w - this.#r; + } + + if (avail === 0 && this.#eof) { + return null; + } else if (avail < n && this.#eof) { + return this.#buf.subarray(this.#r, this.#r + avail); + } else if (avail < n) { + throw new BufferFullError(this.#buf.subarray(this.#r, this.#w)); + } + + return this.#buf.subarray(this.#r, this.#r + n); + } +} diff --git a/src/vendor/jsr.io/@std/io/0.224.8/buf_writer.ts b/src/vendor/jsr.io/@std/io/0.224.8/buf_writer.ts new file mode 100644 index 00000000000..73477f750e1 --- /dev/null +++ b/src/vendor/jsr.io/@std/io/0.224.8/buf_writer.ts @@ -0,0 +1,597 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { copy } from "jsr:@std/bytes@^1.0.2/copy"; +import type { Writer, WriterSync } from "./types.ts"; + +const DEFAULT_BUF_SIZE = 4096; + +/** + * AbstractBufBase is a base class which other classes can embed to + * implement the {@inkcode Reader} and {@linkcode Writer} interfaces. + * It provides basic implementations of those interfaces based on a buffer + * array. + * + * @example Usage + * ```ts no-assert + * import { AbstractBufBase } from "@std/io/buf-writer"; + * import { Reader } from "@std/io/types"; + * + * class MyBufReader extends AbstractBufBase { + * constructor(buf: Uint8Array) { + * super(buf); + * } + * } + * ``` + * + * @internal + */ +export abstract class AbstractBufBase { + /** + * The buffer + * + * @example Usage + * ```ts + * import { AbstractBufBase } from "@std/io/buf-writer"; + * import { assertEquals } from "@std/assert/equals"; + * + * class MyBuffer extends AbstractBufBase {} + * + * const buf = new Uint8Array(1024); + * const mb = new MyBuffer(buf); + * + * assertEquals(mb.buf, buf); + * ``` + */ + buf: Uint8Array; + /** + * The used buffer bytes + * + * @example Usage + * ```ts + * import { AbstractBufBase } from "@std/io/buf-writer"; + * import { assertEquals } from "@std/assert/equals"; + * + * class MyBuffer extends AbstractBufBase {} + * + * const buf = new Uint8Array(1024); + * const mb = new MyBuffer(buf); + * + * assertEquals(mb.usedBufferBytes, 0); + * ``` + */ + usedBufferBytes = 0; + /** + * The error + * + * @example Usage + * ```ts + * import { AbstractBufBase } from "@std/io/buf-writer"; + * import { assertEquals } from "@std/assert/equals"; + * + * class MyBuffer extends AbstractBufBase {} + * + * const buf = new Uint8Array(1024); + * const mb = new MyBuffer(buf); + * + * assertEquals(mb.err, null); + * ``` + */ + err: Error | null = null; + + /** + * Construct a {@linkcode AbstractBufBase} instance + * + * @param buf The buffer to use. + */ + constructor(buf: Uint8Array) { + this.buf = buf; + } + + /** + * Size returns the size of the underlying buffer in bytes. + * + * @example Usage + * ```ts + * import { AbstractBufBase } from "@std/io/buf-writer"; + * import { assertEquals } from "@std/assert/equals"; + * + * class MyBuffer extends AbstractBufBase {} + * + * const buf = new Uint8Array(1024); + * const mb = new MyBuffer(buf); + * + * assertEquals(mb.size(), 1024); + * ``` + * + * @return the size of the buffer in bytes. + */ + size(): number { + return this.buf.byteLength; + } + + /** + * Returns how many bytes are unused in the buffer. + * + * @example Usage + * ```ts + * import { AbstractBufBase } from "@std/io/buf-writer"; + * import { assertEquals } from "@std/assert/equals"; + * + * class MyBuffer extends AbstractBufBase {} + * + * const buf = new Uint8Array(1024); + * const mb = new MyBuffer(buf); + * + * assertEquals(mb.available(), 1024); + * ``` + * + * @return the number of bytes that are unused in the buffer. + */ + available(): number { + return this.buf.byteLength - this.usedBufferBytes; + } + + /** + * buffered returns the number of bytes that have been written into the + * current buffer. + * + * @example Usage + * ```ts + * import { AbstractBufBase } from "@std/io/buf-writer"; + * import { assertEquals } from "@std/assert/equals"; + * + * class MyBuffer extends AbstractBufBase {} + * + * const buf = new Uint8Array(1024); + * const mb = new MyBuffer(buf); + * + * assertEquals(mb.buffered(), 0); + * ``` + * + * @return the number of bytes that have been written into the current buffer. + */ + buffered(): number { + return this.usedBufferBytes; + } +} + +/** + * `BufWriter` implements buffering for an {@linkcode Writer} object. + * If an error occurs writing to a Writer, no more data will be + * accepted and all subsequent writes, and flush(), will return the error. + * After all data has been written, the client should call the + * flush() method to guarantee all data has been forwarded to + * the underlying deno.Writer. + * + * @example Usage + * ```ts + * import { BufWriter } from "@std/io/buf-writer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const writer = { + * write(p: Uint8Array): Promise { + * return Promise.resolve(p.length); + * } + * }; + * + * const bufWriter = new BufWriter(writer); + * const data = new Uint8Array(1024); + * + * await bufWriter.write(data); + * await bufWriter.flush(); + * + * assertEquals(bufWriter.buffered(), 0); + * ``` + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + */ +export class BufWriter extends AbstractBufBase implements Writer { + #writer: Writer; + + /** + * return new BufWriter unless writer is BufWriter + * + * @example Usage + * ```ts + * import { BufWriter } from "@std/io/buf-writer"; + * import { Writer } from "@std/io/types"; + * import { assertEquals } from "@std/assert/equals"; + * + * const writer: Writer = { + * write(p: Uint8Array): Promise { + * return Promise.resolve(p.length); + * } + * }; + * + * const bufWriter = BufWriter.create(writer); + * const data = new Uint8Array(1024); + * + * await bufWriter.write(data); + * + * assertEquals(bufWriter.buffered(), 1024); + * ``` + * + * @param writer The writer to wrap. + * @param size The size of the buffer. + * + * @return a new {@linkcode BufWriter} instance. + */ + static create(writer: Writer, size: number = DEFAULT_BUF_SIZE): BufWriter { + return writer instanceof BufWriter ? writer : new BufWriter(writer, size); + } + + /** + * Construct a new {@linkcode BufWriter} + * + * @param writer The writer to wrap. + * @param size The size of the buffer. + */ + constructor(writer: Writer, size: number = DEFAULT_BUF_SIZE) { + super(new Uint8Array(size <= 0 ? DEFAULT_BUF_SIZE : size)); + this.#writer = writer; + } + + /** + * Discards any unflushed buffered data, clears any error, and + * resets buffer to write its output to w. + * + * @example Usage + * ```ts + * import { BufWriter } from "@std/io/buf-writer"; + * import { Writer } from "@std/io/types"; + * import { assertEquals } from "@std/assert/equals"; + * + * const writer: Writer = { + * write(p: Uint8Array): Promise { + * return Promise.resolve(p.length); + * } + * }; + * + * const bufWriter = new BufWriter(writer); + * const data = new Uint8Array(1024); + * + * await bufWriter.write(data); + * + * assertEquals(bufWriter.buffered(), 1024); + * + * bufWriter.reset(writer); + * + * assertEquals(bufWriter.buffered(), 0); + * ``` + * + * @param w The writer to write to. + */ + reset(w: Writer) { + this.err = null; + this.usedBufferBytes = 0; + this.#writer = w; + } + + /** + * Flush writes any buffered data to the underlying io.Writer. + * + * @example Usage + * ```ts + * import { BufWriter } from "@std/io/buf-writer"; + * import { Writer } from "@std/io/types"; + * import { assertEquals } from "@std/assert/equals"; + * + * const writer: Writer = { + * write(p: Uint8Array): Promise { + * return Promise.resolve(p.length); + * } + * }; + * + * const bufWriter = new BufWriter(writer); + * const data = new Uint8Array(1024); + * + * await bufWriter.write(data); + * await bufWriter.flush(); + * + * assertEquals(bufWriter.buffered(), 0); + * ``` + */ + async flush() { + if (this.err !== null) throw this.err; + if (this.usedBufferBytes === 0) return; + + try { + const p = this.buf.subarray(0, this.usedBufferBytes); + let nwritten = 0; + while (nwritten < p.length) { + nwritten += await this.#writer.write(p.subarray(nwritten)); + } + } catch (e) { + if (e instanceof Error) { + this.err = e; + } + throw e; + } + + this.buf = new Uint8Array(this.buf.length); + this.usedBufferBytes = 0; + } + + /** + * Writes the contents of `data` into the buffer. If the contents won't fully + * fit into the buffer, those bytes that are copied into the buffer will be flushed + * to the writer and the remaining bytes are then copied into the now empty buffer. + * + * @example Usage + * ```ts + * import { BufWriter } from "@std/io/buf-writer"; + * import { Writer } from "@std/io/types"; + * import { assertEquals } from "@std/assert/equals"; + * + * const writer: Writer = { + * write(p: Uint8Array): Promise { + * return Promise.resolve(p.length); + * } + * }; + * + * const bufWriter = new BufWriter(writer); + * const data = new Uint8Array(1024); + * + * await bufWriter.write(data); + * + * assertEquals(bufWriter.buffered(), 1024); + * ``` + * + * @param data The data to write to the buffer. + * @return the number of bytes written to the buffer. + */ + async write(data: Uint8Array): Promise { + if (this.err !== null) throw this.err; + if (data.length === 0) return 0; + + let totalBytesWritten = 0; + let numBytesWritten = 0; + while (data.byteLength > this.available()) { + if (this.buffered() === 0) { + // Large write, empty buffer. + // Write directly from data to avoid copy. + try { + numBytesWritten = await this.#writer.write(data); + } catch (e) { + if (e instanceof Error) { + this.err = e; + } + throw e; + } + } else { + numBytesWritten = copy(data, this.buf, this.usedBufferBytes); + this.usedBufferBytes += numBytesWritten; + await this.flush(); + } + totalBytesWritten += numBytesWritten; + data = data.subarray(numBytesWritten); + } + + numBytesWritten = copy(data, this.buf, this.usedBufferBytes); + this.usedBufferBytes += numBytesWritten; + totalBytesWritten += numBytesWritten; + return totalBytesWritten; + } +} + +/** + * BufWriterSync implements buffering for a deno.WriterSync object. + * If an error occurs writing to a WriterSync, no more data will be + * accepted and all subsequent writes, and flush(), will return the error. + * After all data has been written, the client should call the + * flush() method to guarantee all data has been forwarded to + * the underlying deno.WriterSync. + * + * @example Usage + * ```ts + * import { BufWriterSync } from "@std/io/buf-writer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const writer = { + * writeSync(p: Uint8Array): number { + * return p.length; + * } + * }; + * + * const bufWriter = new BufWriterSync(writer); + * const data = new Uint8Array(1024); + * + * bufWriter.writeSync(data); + * bufWriter.flush(); + * + * assertEquals(bufWriter.buffered(), 0); + * ``` + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + */ +export class BufWriterSync extends AbstractBufBase implements WriterSync { + #writer: WriterSync; + + /** + * return new BufWriterSync unless writer is BufWriterSync + * + * @example Usage + * ```ts + * import { BufWriterSync } from "@std/io/buf-writer"; + * import { WriterSync } from "@std/io/types"; + * import { assertEquals } from "@std/assert/equals"; + * + * const writer: WriterSync = { + * writeSync(p: Uint8Array): number { + * return p.length; + * } + * }; + * + * const bufWriter = BufWriterSync.create(writer); + * const data = new Uint8Array(1024); + * bufWriter.writeSync(data); + * bufWriter.flush(); + * + * assertEquals(bufWriter.buffered(), 0); + * ``` + * + * @param writer The writer to wrap. + * @param size The size of the buffer. + * @returns a new {@linkcode BufWriterSync} instance. + */ + static create( + writer: WriterSync, + size: number = DEFAULT_BUF_SIZE, + ): BufWriterSync { + return writer instanceof BufWriterSync + ? writer + : new BufWriterSync(writer, size); + } + + /** + * Construct a new {@linkcode BufWriterSync} + * + * @param writer The writer to wrap. + * @param size The size of the buffer. + */ + constructor(writer: WriterSync, size: number = DEFAULT_BUF_SIZE) { + super(new Uint8Array(size <= 0 ? DEFAULT_BUF_SIZE : size)); + this.#writer = writer; + } + + /** + * Discards any unflushed buffered data, clears any error, and + * resets buffer to write its output to w. + * + * @example Usage + * ```ts + * import { BufWriterSync } from "@std/io/buf-writer"; + * import { WriterSync } from "@std/io/types"; + * import { assertEquals } from "@std/assert/equals"; + * + * const writer: WriterSync = { + * writeSync(p: Uint8Array): number { + * return p.length; + * } + * }; + * + * const bufWriter = new BufWriterSync(writer); + * const data = new Uint8Array(1024); + * + * bufWriter.writeSync(data); + * bufWriter.flush(); + * + * assertEquals(bufWriter.buffered(), 0); + * ``` + * + * @param w The writer to write to. + */ + reset(w: WriterSync) { + this.err = null; + this.usedBufferBytes = 0; + this.#writer = w; + } + + /** + * Flush writes any buffered data to the underlying io.WriterSync. + * + * @example Usage + * ```ts + * import { BufWriterSync } from "@std/io/buf-writer"; + * import { WriterSync } from "@std/io/types"; + * import { assertEquals } from "@std/assert/equals"; + * + * const writer: WriterSync = { + * writeSync(p: Uint8Array): number { + * return p.length; + * } + * }; + * + * const bufWriter = new BufWriterSync(writer); + * const data = new Uint8Array(1024); + * + * bufWriter.writeSync(data); + * bufWriter.flush(); + * + * assertEquals(bufWriter.buffered(), 0); + * ``` + */ + flush() { + if (this.err !== null) throw this.err; + if (this.usedBufferBytes === 0) return; + + try { + const p = this.buf.subarray(0, this.usedBufferBytes); + let nwritten = 0; + while (nwritten < p.length) { + nwritten += this.#writer.writeSync(p.subarray(nwritten)); + } + } catch (e) { + if (e instanceof Error) { + this.err = e; + } + throw e; + } + + this.buf = new Uint8Array(this.buf.length); + this.usedBufferBytes = 0; + } + + /** Writes the contents of `data` into the buffer. If the contents won't fully + * fit into the buffer, those bytes that can are copied into the buffer, the + * buffer is the flushed to the writer and the remaining bytes are copied into + * the now empty buffer. + * + * @example Usage + * ```ts + * import { BufWriterSync } from "@std/io/buf-writer"; + * import { WriterSync } from "@std/io/types"; + * import { assertEquals } from "@std/assert/equals"; + * + * const writer: WriterSync = { + * writeSync(p: Uint8Array): number { + * return p.length; + * } + * }; + * + * const bufWriter = new BufWriterSync(writer); + * const data = new Uint8Array(1024); + * + * bufWriter.writeSync(data); + * bufWriter.flush(); + * + * assertEquals(bufWriter.buffered(), 0); + * ``` + * + * @param data The data to write to the buffer. + * @return the number of bytes written to the buffer. + */ + writeSync(data: Uint8Array): number { + if (this.err !== null) throw this.err; + if (data.length === 0) return 0; + + let totalBytesWritten = 0; + let numBytesWritten = 0; + while (data.byteLength > this.available()) { + if (this.buffered() === 0) { + // Large write, empty buffer. + // Write directly from data to avoid copy. + try { + numBytesWritten = this.#writer.writeSync(data); + } catch (e) { + if (e instanceof Error) { + this.err = e; + } + throw e; + } + } else { + numBytesWritten = copy(data, this.buf, this.usedBufferBytes); + this.usedBufferBytes += numBytesWritten; + this.flush(); + } + totalBytesWritten += numBytesWritten; + data = data.subarray(numBytesWritten); + } + + numBytesWritten = copy(data, this.buf, this.usedBufferBytes); + this.usedBufferBytes += numBytesWritten; + totalBytesWritten += numBytesWritten; + return totalBytesWritten; + } +} diff --git a/src/vendor/jsr.io/@std/io/0.224.8/buffer.ts b/src/vendor/jsr.io/@std/io/0.224.8/buffer.ts new file mode 100644 index 00000000000..d54b98f9141 --- /dev/null +++ b/src/vendor/jsr.io/@std/io/0.224.8/buffer.ts @@ -0,0 +1,492 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { copy } from "jsr:@std/bytes@^1.0.2/copy"; +import type { Reader, ReaderSync, Writer, WriterSync } from "./types.ts"; + +// MIN_READ is the minimum ArrayBuffer size passed to a read call by +// buffer.ReadFrom. As long as the Buffer has at least MIN_READ bytes beyond +// what is required to hold the contents of r, readFrom() will not grow the +// underlying buffer. +const MIN_READ = 32 * 1024; +const MAX_SIZE = 2 ** 32 - 2; + +/** + * A variable-sized buffer of bytes with `read()` and `write()` methods. + * + * Buffer is almost always used with some I/O like files and sockets. It allows + * one to buffer up a download from a socket. Buffer grows and shrinks as + * necessary. + * + * Buffer is NOT the same thing as Node's Buffer. Node's Buffer was created in + * 2009 before JavaScript had the concept of ArrayBuffers. It's simply a + * non-standard ArrayBuffer. + * + * ArrayBuffer is a fixed memory allocation. Buffer is implemented on top of + * ArrayBuffer. + * + * Based on {@link https://golang.org/pkg/bytes/#Buffer | Go Buffer}. + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new Buffer(); + * await buf.write(new TextEncoder().encode("Hello, ")); + * await buf.write(new TextEncoder().encode("world!")); + * + * const data = new Uint8Array(13); + * await buf.read(data); + * + * assertEquals(new TextDecoder().decode(data), "Hello, world!"); + * ``` + */ +export class Buffer implements Writer, WriterSync, Reader, ReaderSync { + #buf: Uint8Array; // contents are the bytes buf[off : len(buf)] + #off = 0; // read at buf[off], write at buf[buf.byteLength] + + /** + * Constructs a new instance with the specified {@linkcode ArrayBuffer} as its + * initial contents. + * + * @param ab The ArrayBuffer to use as the initial contents of the buffer. + */ + constructor(ab?: ArrayBufferLike | ArrayLike) { + this.#buf = ab === undefined ? new Uint8Array(0) : new Uint8Array(ab); + } + + /** + * Returns a slice holding the unread portion of the buffer. + * + * The slice is valid for use only until the next buffer modification (that + * is, only until the next call to a method like `read()`, `write()`, + * `reset()`, or `truncate()`). If `options.copy` is false the slice aliases the buffer content at + * least until the next buffer modification, so immediate changes to the + * slice will affect the result of future reads. + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new Buffer(); + * await buf.write(new TextEncoder().encode("Hello, world!")); + * + * const slice = buf.bytes(); + * assertEquals(new TextDecoder().decode(slice), "Hello, world!"); + * ``` + * + * @param options The options for the slice. + * @returns A slice holding the unread portion of the buffer. + */ + bytes(options = { copy: true }): Uint8Array { + if (options.copy === false) return this.#buf.subarray(this.#off); + return this.#buf.slice(this.#off); + } + + /** + * Returns whether the unread portion of the buffer is empty. + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new Buffer(); + * assertEquals(buf.empty(), true); + * await buf.write(new TextEncoder().encode("Hello, world!")); + * assertEquals(buf.empty(), false); + * ``` + * + * @returns `true` if the unread portion of the buffer is empty, `false` + * otherwise. + */ + empty(): boolean { + return this.#buf.byteLength <= this.#off; + } + + /** + * A read only number of bytes of the unread portion of the buffer. + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new Buffer(); + * await buf.write(new TextEncoder().encode("Hello, world!")); + * + * assertEquals(buf.length, 13); + * ``` + * + * @returns The number of bytes of the unread portion of the buffer. + */ + get length(): number { + return this.#buf.byteLength - this.#off; + } + + /** + * The read only capacity of the buffer's underlying byte slice, that is, + * the total space allocated for the buffer's data. + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new Buffer(); + * assertEquals(buf.capacity, 0); + * await buf.write(new TextEncoder().encode("Hello, world!")); + * assertEquals(buf.capacity, 13); + * ``` + * + * @returns The capacity of the buffer. + */ + get capacity(): number { + return this.#buf.buffer.byteLength; + } + + /** + * Discards all but the first `n` unread bytes from the buffer but + * continues to use the same allocated storage. It throws if `n` is + * negative or greater than the length of the buffer. + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new Buffer(); + * await buf.write(new TextEncoder().encode("Hello, world!")); + * buf.truncate(6); + * assertEquals(buf.length, 6); + * ``` + * + * @param n The number of bytes to keep. + */ + truncate(n: number) { + if (n === 0) { + this.reset(); + return; + } + if (n < 0 || n > this.length) { + throw new Error("Buffer truncation out of range"); + } + this.#reslice(this.#off + n); + } + + /** + * Resets the contents + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new Buffer(); + * await buf.write(new TextEncoder().encode("Hello, world!")); + * buf.reset(); + * assertEquals(buf.length, 0); + * ``` + */ + reset() { + this.#reslice(0); + this.#off = 0; + } + + #tryGrowByReslice(n: number) { + const l = this.#buf.byteLength; + if (n <= this.capacity - l) { + this.#reslice(l + n); + return l; + } + return -1; + } + + #reslice(len: number) { + if (len > this.#buf.buffer.byteLength) { + throw new RangeError("Length is greater than buffer capacity"); + } + this.#buf = new Uint8Array(this.#buf.buffer, 0, len); + } + + /** + * Reads the next `p.length` bytes from the buffer or until the buffer is + * drained. Returns the number of bytes read. If the buffer has no data to + * return, the return is EOF (`null`). + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new Buffer(); + * await buf.write(new TextEncoder().encode("Hello, world!")); + * + * const data = new Uint8Array(5); + * const res = await buf.read(data); + * + * assertEquals(res, 5); + * assertEquals(new TextDecoder().decode(data), "Hello"); + * ``` + * + * @param p The buffer to read data into. + * @returns The number of bytes read. + */ + readSync(p: Uint8Array): number | null { + if (this.empty()) { + // Buffer is empty, reset to recover space. + this.reset(); + if (p.byteLength === 0) { + // this edge case is tested in 'bufferReadEmptyAtEOF' test + return 0; + } + return null; + } + const nread = copy(this.#buf.subarray(this.#off), p); + this.#off += nread; + return nread; + } + + /** + * Reads the next `p.length` bytes from the buffer or until the buffer is + * drained. Resolves to the number of bytes read. If the buffer has no + * data to return, resolves to EOF (`null`). + * + * NOTE: This methods reads bytes synchronously; it's provided for + * compatibility with `Reader` interfaces. + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new Buffer(); + * await buf.write(new TextEncoder().encode("Hello, world!")); + * + * const data = new Uint8Array(5); + * const res = await buf.read(data); + * + * assertEquals(res, 5); + * assertEquals(new TextDecoder().decode(data), "Hello"); + * ``` + * + * @param p The buffer to read data into. + * @returns The number of bytes read. + */ + read(p: Uint8Array): Promise { + const rr = this.readSync(p); + return Promise.resolve(rr); + } + + /** + * Writes the given data to the buffer. + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new Buffer(); + * const data = new TextEncoder().encode("Hello, world!"); + * buf.writeSync(data); + * + * const slice = buf.bytes(); + * assertEquals(new TextDecoder().decode(slice), "Hello, world!"); + * ``` + * + * @param p The data to write to the buffer. + * @returns The number of bytes written. + */ + writeSync(p: Uint8Array): number { + const m = this.#grow(p.byteLength); + return copy(p, this.#buf, m); + } + + /** + * Writes the given data to the buffer. Resolves to the number of bytes + * written. + * + * > [!NOTE] + * > This methods writes bytes synchronously; it's provided for compatibility + * > with the {@linkcode Writer} interface. + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new Buffer(); + * const data = new TextEncoder().encode("Hello, world!"); + * await buf.write(data); + * + * const slice = buf.bytes(); + * assertEquals(new TextDecoder().decode(slice), "Hello, world!"); + * ``` + * + * @param p The data to write to the buffer. + * @returns The number of bytes written. + */ + write(p: Uint8Array): Promise { + const n = this.writeSync(p); + return Promise.resolve(n); + } + + #grow(n: number) { + const m = this.length; + // If buffer is empty, reset to recover space. + if (m === 0 && this.#off !== 0) { + this.reset(); + } + // Fast: Try to grow by means of a reslice. + const i = this.#tryGrowByReslice(n); + if (i >= 0) { + return i; + } + const c = this.capacity; + if (n <= Math.floor(c / 2) - m) { + // We can slide things down instead of allocating a new + // ArrayBuffer. We only need m+n <= c to slide, but + // we instead let capacity get twice as large so we + // don't spend all our time copying. + copy(this.#buf.subarray(this.#off), this.#buf); + } else if (c + n > MAX_SIZE) { + throw new Error( + `The buffer cannot be grown beyond the maximum size of "${MAX_SIZE}"`, + ); + } else { + // Not enough space anywhere, we need to allocate. + const buf = new Uint8Array(Math.min(2 * c + n, MAX_SIZE)); + copy(this.#buf.subarray(this.#off), buf); + this.#buf = buf; + } + // Restore this.#off and len(this.#buf). + this.#off = 0; + this.#reslice(Math.min(m + n, MAX_SIZE)); + return m; + } + + /** Grows the buffer's capacity, if necessary, to guarantee space for + * another `n` bytes. After `.grow(n)`, at least `n` bytes can be written to + * the buffer without another allocation. If `n` is negative, `.grow()` will + * throw. If the buffer can't grow it will throw an error. + * + * Based on Go Lang's + * {@link https://golang.org/pkg/bytes/#Buffer.Grow | Buffer.Grow}. + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new Buffer(); + * buf.grow(10); + * assertEquals(buf.capacity, 10); + * ``` + * + * @param n The number of bytes to grow the buffer by. + */ + grow(n: number) { + if (n < 0) { + throw new Error("Buffer growth cannot be negative"); + } + const m = this.#grow(n); + this.#reslice(m); + } + + /** + * Reads data from `r` until EOF (`null`) and appends it to the buffer, + * growing the buffer as needed. It resolves to the number of bytes read. + * If the buffer becomes too large, `.readFrom()` will reject with an error. + * + * Based on Go Lang's + * {@link https://golang.org/pkg/bytes/#Buffer.ReadFrom | Buffer.ReadFrom}. + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer"; + * import { StringReader } from "@std/io/string-reader"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new Buffer(); + * const r = new StringReader("Hello, world!"); + * const n = await buf.readFrom(r); + * + * assertEquals(n, 13); + * ``` + * + * @param r The reader to read from. + * @returns The number of bytes read. + */ + async readFrom(r: Reader): Promise { + let n = 0; + const tmp = new Uint8Array(MIN_READ); + while (true) { + const shouldGrow = this.capacity - this.length < MIN_READ; + // read into tmp buffer if there's not enough room + // otherwise read directly into the internal buffer + const buf = shouldGrow + ? tmp + : new Uint8Array(this.#buf.buffer, this.length); + + const nread = await r.read(buf); + if (nread === null) { + return n; + } + + // write will grow if needed + if (shouldGrow) this.writeSync(buf.subarray(0, nread)); + else this.#reslice(this.length + nread); + + n += nread; + } + } + + /** Reads data from `r` until EOF (`null`) and appends it to the buffer, + * growing the buffer as needed. It returns the number of bytes read. If the + * buffer becomes too large, `.readFromSync()` will throw an error. + * + * Based on Go Lang's + * {@link https://golang.org/pkg/bytes/#Buffer.ReadFrom | Buffer.ReadFrom}. + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer"; + * import { StringReader } from "@std/io/string-reader"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new Buffer(); + * const r = new StringReader("Hello, world!"); + * const n = buf.readFromSync(r); + * + * assertEquals(n, 13); + * ``` + * + * @param r The reader to read from. + * @returns The number of bytes read. + */ + readFromSync(r: ReaderSync): number { + let n = 0; + const tmp = new Uint8Array(MIN_READ); + while (true) { + const shouldGrow = this.capacity - this.length < MIN_READ; + // read into tmp buffer if there's not enough room + // otherwise read directly into the internal buffer + const buf = shouldGrow + ? tmp + : new Uint8Array(this.#buf.buffer, this.length); + + const nread = r.readSync(buf); + if (nread === null) { + return n; + } + + // write will grow if needed + if (shouldGrow) this.writeSync(buf.subarray(0, nread)); + else this.#reslice(this.length + nread); + + n += nread; + } + } +} diff --git a/src/vendor/deno.land/std@0.217.0/io/copy.ts b/src/vendor/jsr.io/@std/io/0.224.8/copy.ts similarity index 68% rename from src/vendor/deno.land/std@0.217.0/io/copy.ts rename to src/vendor/jsr.io/@std/io/0.224.8/copy.ts index 8e39a19f11d..ac6520025f2 100644 --- a/src/vendor/deno.land/std@0.217.0/io/copy.ts +++ b/src/vendor/jsr.io/@std/io/0.224.8/copy.ts @@ -2,6 +2,7 @@ // This module is browser compatible. import { DEFAULT_BUFFER_SIZE } from "./_constants.ts"; +import { writeAll } from "./write_all.ts"; import type { Reader, Writer } from "./types.ts"; /** @@ -9,9 +10,9 @@ import type { Reader, Writer } from "./types.ts"; * an error occurs. It resolves to the number of bytes copied or rejects with * the first error encountered while copying. * - * @example - * ```ts - * import { copy } from "https://deno.land/std@$STD_VERSION/io/copy.ts"; + * @example Usage + * ```ts no-eval + * import { copy } from "@std/io/copy"; * * const source = await Deno.open("my_file.txt"); * const bytesCopied1 = await copy(source, Deno.stdout); @@ -22,6 +23,7 @@ import type { Reader, Writer } from "./types.ts"; * @param src The source to copy from * @param dst The destination to copy to * @param options Can be used to tune size of the buffer. Default size is 32kB + * @returns Number of bytes copied */ export async function copy( src: Reader, @@ -31,20 +33,12 @@ export async function copy( }, ): Promise { let n = 0; - const bufSize = options?.bufSize ?? DEFAULT_BUFFER_SIZE; - const b = new Uint8Array(bufSize); - let gotEOF = false; - while (gotEOF === false) { + const b = new Uint8Array(options?.bufSize ?? DEFAULT_BUFFER_SIZE); + while (true) { const result = await src.read(b); - if (result === null) { - gotEOF = true; - } else { - let nwritten = 0; - while (nwritten < result) { - nwritten += await dst.write(b.subarray(nwritten, result)); - } - n += nwritten; - } + if (result === null) break; + await writeAll(dst, b.subarray(0, result)); + n += result; } return n; } diff --git a/src/vendor/deno.land/std@0.217.0/io/copy_n.ts b/src/vendor/jsr.io/@std/io/0.224.8/copy_n.ts similarity index 64% rename from src/vendor/deno.land/std@0.217.0/io/copy_n.ts rename to src/vendor/jsr.io/@std/io/0.224.8/copy_n.ts index 90ae468a804..38153bfbcfb 100644 --- a/src/vendor/deno.land/std@0.217.0/io/copy_n.ts +++ b/src/vendor/jsr.io/@std/io/0.224.8/copy_n.ts @@ -1,18 +1,30 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -import { assert } from "../assert/assert.ts"; import type { Reader, Writer } from "./types.ts"; const DEFAULT_BUFFER_SIZE = 32 * 1024; /** * Copy N size at the most. If read size is lesser than N, then returns nread + * + * @example Usage + * ```ts + * import { copyN } from "@std/io/copy-n"; + * import { assertEquals } from "@std/assert/equals"; + * + * const source = await Deno.open("README.md"); + * + * const res = await copyN(source, Deno.stdout, 10); + * assertEquals(res, 10); + * ``` + * * @param r Reader * @param dest Writer * @param size Read size + * @returns Number of bytes copied * - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. */ export async function copyN( r: Reader, @@ -33,7 +45,9 @@ export async function copyN( while (n < nread) { n += await dest.write(buf.slice(n, nread)); } - assert(n === nread, "could not write"); + if (n !== nread) { + throw new Error("Could not write"); + } } if (result === null) { break; diff --git a/src/vendor/deno.land/std@0.217.0/io/iterate_reader.ts b/src/vendor/jsr.io/@std/io/0.224.8/iterate_reader.ts similarity index 65% rename from src/vendor/deno.land/std@0.217.0/io/iterate_reader.ts rename to src/vendor/jsr.io/@std/io/0.224.8/iterate_reader.ts index d9d37012740..9d24800f009 100644 --- a/src/vendor/deno.land/std@0.217.0/io/iterate_reader.ts +++ b/src/vendor/jsr.io/@std/io/0.224.8/iterate_reader.ts @@ -9,24 +9,21 @@ export type { Reader, ReaderSync }; /** * Turns a {@linkcode Reader} into an async iterator. * - * @example - * ```ts - * import { iterateReader } from "https://deno.land/std@$STD_VERSION/io/iterate_reader.ts"; + * @example Usage + * ```ts no-assert + * import { iterateReader } from "@std/io/iterate-reader"; * - * using file = await Deno.open("/etc/passwd"); + * using file = await Deno.open("README.md"); * for await (const chunk of iterateReader(file)) { * console.log(chunk); * } * ``` * - * Second argument can be used to tune size of a buffer. - * Default size of the buffer is 32kB. - * - * @example - * ```ts - * import { iterateReader } from "https://deno.land/std@$STD_VERSION/io/iterate_reader.ts"; + * @example Usage with buffer size + * ```ts no-assert + * import { iterateReader } from "@std/io/iterate-reader"; * - * using file = await Deno.open("/etc/passwd"); + * using file = await Deno.open("README.md"); * const iter = iterateReader(file, { * bufSize: 1024 * 1024 * }); @@ -34,6 +31,11 @@ export type { Reader, ReaderSync }; * console.log(chunk); * } * ``` + * + * @param reader The reader to read from + * @param options The options + * @param options.bufSize The size of the buffer to use + * @returns The async iterator of Uint8Array chunks */ export async function* iterateReader( reader: Reader, @@ -56,27 +58,31 @@ export async function* iterateReader( /** * Turns a {@linkcode ReaderSync} into an iterator. * + * @example Usage * ```ts - * import { iterateReaderSync } from "https://deno.land/std@$STD_VERSION/io/iterate_reader.ts"; + * import { iterateReaderSync } from "@std/io/iterate-reader"; + * import { assert } from "@std/assert/assert" * - * using file = Deno.openSync("/etc/passwd"); + * using file = Deno.openSync("README.md"); * for (const chunk of iterateReaderSync(file)) { - * console.log(chunk); + * assert(chunk instanceof Uint8Array); * } * ``` * * Second argument can be used to tune size of a buffer. * Default size of the buffer is 32kB. * + * @example Usage with buffer size * ```ts - * import { iterateReaderSync } from "https://deno.land/std@$STD_VERSION/io/iterate_reader.ts"; - - * using file = await Deno.open("/etc/passwd"); + * import { iterateReaderSync } from "@std/io/iterate-reader"; + * import { assert } from "@std/assert/assert" + * + * using file = await Deno.open("README.md"); * const iter = iterateReaderSync(file, { * bufSize: 1024 * 1024 * }); * for (const chunk of iter) { - * console.log(chunk); + * assert(chunk instanceof Uint8Array); * } * ``` * @@ -84,6 +90,10 @@ export async function* iterateReader( * a view on that buffer on each iteration. It is therefore caller's * responsibility to copy contents of the buffer if needed; otherwise the * next iteration will overwrite contents of previously returned chunk. + * + * @param reader The reader to read from + * @param options The options + * @returns The iterator of Uint8Array chunks */ export function* iterateReaderSync( reader: ReaderSync, diff --git a/src/vendor/jsr.io/@std/io/0.224.8/limited_reader.ts b/src/vendor/jsr.io/@std/io/0.224.8/limited_reader.ts new file mode 100644 index 00000000000..982cca6ed77 --- /dev/null +++ b/src/vendor/jsr.io/@std/io/0.224.8/limited_reader.ts @@ -0,0 +1,111 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { Reader } from "./types.ts"; + +/** + * Reads from `reader` but limits the amount of data returned to just `limit` bytes. + * Each call to `read` updates `limit` to reflect the new amount remaining. + * `read` returns `null` when `limit` <= `0` or + * when the underlying `reader` returns `null`. + * + * @example Usage + * ```ts + * import { StringReader } from "@std/io/string-reader"; + * import { LimitedReader } from "@std/io/limited-reader"; + * import { readAll } from "@std/io/read-all"; + * import { assertEquals } from "@std/assert/equals"; + * + * const r = new StringReader("hello world"); + * const lr = new LimitedReader(r, 5); + * const res = await readAll(lr); + * + * assertEquals(new TextDecoder().decode(res), "hello"); + * ``` + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + */ +export class LimitedReader implements Reader { + /** + * The reader to read from + * + * @example Usage + * ```ts + * import { StringReader } from "@std/io/string-reader"; + * import { LimitedReader } from "@std/io/limited-reader"; + * import { assertEquals } from "@std/assert/equals"; + * + * const r = new StringReader("hello world"); + * const lr = new LimitedReader(r, 5); + * + * assertEquals(lr.reader, r); + * ``` + */ + reader: Reader; + /** + * The number of bytes to limit the reader to + * + * @example Usage + * ```ts + * import { StringReader } from "@std/io/string-reader"; + * import { LimitedReader } from "@std/io/limited-reader"; + * import { assertEquals } from "@std/assert/equals"; + * + * const r = new StringReader("hello world"); + * const lr = new LimitedReader(r, 5); + * + * assertEquals(lr.limit, 5); + * ``` + */ + limit: number; + + /** + * Construct a new instance. + * + * @param reader The reader to read from. + * @param limit The number of bytes to limit the reader to. + */ + constructor(reader: Reader, limit: number) { + this.reader = reader; + this.limit = limit; + } + + /** + * Reads data from the reader. + * + * @example Usage + * ```ts + * import { StringReader } from "@std/io/string-reader"; + * import { LimitedReader } from "@std/io/limited-reader"; + * import { assertEquals } from "@std/assert/equals"; + * + * const r = new StringReader("hello world"); + * const lr = new LimitedReader(r, 5); + * + * const data = new Uint8Array(5); + * const res = await lr.read(data); + * + * assertEquals(res, 5); + * assertEquals(new TextDecoder().decode(data), "hello"); + * ``` + * + * @param p The buffer to read data into. + * @returns The number of bytes read. + */ + async read(p: Uint8Array): Promise { + if (this.limit <= 0) { + return null; + } + + if (p.length > this.limit) { + p = p.subarray(0, this.limit); + } + const n = await this.reader.read(p); + if (n === null) { + return null; + } + + this.limit -= n; + return n; + } +} diff --git a/src/vendor/deno.land/std@0.217.0/io/mod.ts b/src/vendor/jsr.io/@std/io/0.224.8/mod.ts similarity index 86% rename from src/vendor/deno.land/std@0.217.0/io/mod.ts rename to src/vendor/jsr.io/@std/io/0.224.8/mod.ts index 56750e0df94..7694718f044 100644 --- a/src/vendor/deno.land/std@0.217.0/io/mod.ts +++ b/src/vendor/jsr.io/@std/io/0.224.8/mod.ts @@ -6,6 +6,13 @@ * `Reader` and `Writer` interfaces are deprecated in Deno, and so many of these * utilities are also deprecated. Consider using web streams instead. * + * ```ts no-assert + * import { toReadableStream, toWritableStream } from "@std/io"; + * + * await toReadableStream(Deno.stdin) + * .pipeTo(toWritableStream(Deno.stdout)); + * ``` + * * @module */ diff --git a/src/vendor/jsr.io/@std/io/0.224.8/multi_reader.ts b/src/vendor/jsr.io/@std/io/0.224.8/multi_reader.ts new file mode 100644 index 00000000000..d9bb206e855 --- /dev/null +++ b/src/vendor/jsr.io/@std/io/0.224.8/multi_reader.ts @@ -0,0 +1,81 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { Reader } from "./types.ts"; + +/** + * Reader utility for combining multiple readers. + * + * @example Usage + * ```ts + * import { MultiReader } from "@std/io/multi-reader"; + * import { StringReader } from "@std/io/string-reader"; + * import { readAll } from "@std/io/read-all"; + * import { assertEquals } from "@std/assert/equals"; + * + * const r1 = new StringReader("hello"); + * const r2 = new StringReader("world"); + * const mr = new MultiReader([r1, r2]); + * + * const res = await readAll(mr); + * + * assertEquals(new TextDecoder().decode(res), "helloworld"); + * ``` + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + */ +export class MultiReader implements Reader { + readonly #readers: Reader[]; + #currentIndex = 0; + + /** + * Construct a new instance. + * + * @param readers The readers to combine. + */ + constructor(readers: Reader[]) { + this.#readers = [...readers]; + } + + /** + * Reads data from the readers. + * + * @example Usage + * ```ts + * import { MultiReader } from "@std/io/multi-reader"; + * import { StringReader } from "@std/io/string-reader"; + * import { readAll } from "@std/io/read-all"; + * import { assertEquals } from "@std/assert/equals"; + * + * const r1 = new StringReader("hello"); + * const r2 = new StringReader("world"); + * const mr = new MultiReader([r1, r2]); + * + * const data = new Uint8Array(5); + * const res = await mr.read(data); + * + * assertEquals(res, 5); + * assertEquals(new TextDecoder().decode(data), "hello"); + * + * const res2 = await mr.read(data); + * assertEquals(res2, 0); + * + * const res3 = await mr.read(data); + * assertEquals(res3, 5); + * assertEquals(new TextDecoder().decode(data), "world"); + * ``` + * + * @param p The buffer to read data into. + * @returns The number of bytes read. + */ + async read(p: Uint8Array): Promise { + const r = this.#readers[this.#currentIndex]; + if (!r) return null; + const result = await r.read(p); + if (result === null) { + this.#currentIndex++; + return 0; + } + return result; + } +} diff --git a/src/vendor/deno.land/std@0.217.0/io/read_all.ts b/src/vendor/jsr.io/@std/io/0.224.8/read_all.ts similarity index 81% rename from src/vendor/deno.land/std@0.217.0/io/read_all.ts rename to src/vendor/jsr.io/@std/io/0.224.8/read_all.ts index 10b47ac0b30..fc4a33abc9d 100644 --- a/src/vendor/deno.land/std@0.217.0/io/read_all.ts +++ b/src/vendor/jsr.io/@std/io/0.224.8/read_all.ts @@ -1,7 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -import { concat } from "../bytes/concat.ts"; +import { concat } from "jsr:@std/bytes@^1.0.2/concat"; import { DEFAULT_CHUNK_SIZE } from "./_constants.ts"; import type { Reader, ReaderSync } from "./types.ts"; @@ -9,9 +9,9 @@ import type { Reader, ReaderSync } from "./types.ts"; * Read {@linkcode Reader} `r` until EOF (`null`) and resolve to the content as * {@linkcode Uint8Array}. * - * @example - * ```ts - * import { readAll } from "https://deno.land/std@$STD_VERSION/io/read_all.ts"; + * @example Usage + * ```ts no-eval + * import { readAll } from "@std/io/read-all"; * * // Example from stdin * const stdinContent = await readAll(Deno.stdin); @@ -20,6 +20,9 @@ import type { Reader, ReaderSync } from "./types.ts"; * using file = await Deno.open("my_file.txt", {read: true}); * const myFileContent = await readAll(file); * ``` + * + * @param reader The reader to read from + * @returns The content as Uint8Array */ export async function readAll(reader: Reader): Promise { const chunks: Uint8Array[] = []; @@ -41,9 +44,9 @@ export async function readAll(reader: Reader): Promise { * Synchronously reads {@linkcode ReaderSync} `r` until EOF (`null`) and returns * the content as {@linkcode Uint8Array}. * - * @example - * ```ts - * import { readAllSync } from "https://deno.land/std@$STD_VERSION/io/read_all.ts"; + * @example Usage + * ```ts no-eval + * import { readAllSync } from "@std/io/read-all"; * * // Example from stdin * const stdinContent = readAllSync(Deno.stdin); @@ -52,6 +55,9 @@ export async function readAll(reader: Reader): Promise { * using file = Deno.openSync("my_file.txt", {read: true}); * const myFileContent = readAllSync(file); * ``` + * + * @param reader The reader to read from + * @returns The content as Uint8Array */ export function readAllSync(reader: ReaderSync): Uint8Array { const chunks: Uint8Array[] = []; diff --git a/src/vendor/deno.land/std@0.217.0/io/read_delim.ts b/src/vendor/jsr.io/@std/io/0.224.8/read_delim.ts similarity index 68% rename from src/vendor/deno.land/std@0.217.0/io/read_delim.ts rename to src/vendor/jsr.io/@std/io/0.224.8/read_delim.ts index 7eff7d0e7eb..2545b12584f 100644 --- a/src/vendor/deno.land/std@0.217.0/io/read_delim.ts +++ b/src/vendor/jsr.io/@std/io/0.224.8/read_delim.ts @@ -1,7 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -import { concat } from "../bytes/concat.ts"; +import { concat } from "jsr:@std/bytes@^1.0.2/concat"; import type { Reader } from "./types.ts"; /** Generate longest proper prefix which is also suffix array. */ @@ -19,16 +19,32 @@ function createLPS(pat: Uint8Array): Uint8Array { lps[i] = 0; i++; } else { - prefixEnd = lps[prefixEnd - 1]; + prefixEnd = lps[prefixEnd - 1]!; } } return lps; } /** - * Read delimited bytes from a Reader. + * Read delimited bytes from a {@linkcode Reader} through an + * {@linkcode AsyncIterableIterator} of {@linkcode Uint8Array}. * - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + * @example Usage + * ```ts + * import { readDelim } from "@std/io/read-delim"; + * import { assert } from "@std/assert/assert" + * + * const fileReader = await Deno.open("README.md"); + * for await (const chunk of readDelim(fileReader, new TextEncoder().encode("\n"))) { + * assert(chunk instanceof Uint8Array); + * } + * ``` + * + * @param reader The reader to read from + * @param delim The delimiter to read until + * @returns The {@linkcode AsyncIterableIterator} of {@linkcode Uint8Array}s. + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. */ export async function* readDelim( reader: Reader, @@ -76,7 +92,7 @@ export async function* readDelim( inspectIndex++; localIndex++; } else { - matchIndex = delimLPS[matchIndex - 1]; + matchIndex = delimLPS[matchIndex - 1]!; } } } diff --git a/src/vendor/jsr.io/@std/io/0.224.8/read_int.ts b/src/vendor/jsr.io/@std/io/0.224.8/read_int.ts new file mode 100644 index 00000000000..8f765308d57 --- /dev/null +++ b/src/vendor/jsr.io/@std/io/0.224.8/read_int.ts @@ -0,0 +1,32 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { BufReader } from "./buf_reader.ts"; +import { readShort } from "./read_short.ts"; + +/** + * Read big endian 32bit integer from a {@linkcode BufReader}. + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer" + * import { BufReader } from "@std/io/buf-reader"; + * import { readInt } from "@std/io/read-int"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new BufReader(new Buffer(new Uint8Array([0x12, 0x34, 0x56, 0x78]))); + * const int = await readInt(buf); + * assertEquals(int, 0x12345678); + * ``` + * + * @param buf The buffer reader to read from + * @returns The 32bit integer + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + */ +export async function readInt(buf: BufReader): Promise { + const high = await readShort(buf); + if (high === null) return null; + const low = await readShort(buf); + if (low === null) throw new Deno.errors.UnexpectedEof(); + return (high << 16) | low; +} diff --git a/src/vendor/deno.land/std@0.217.0/io/read_lines.ts b/src/vendor/jsr.io/@std/io/0.224.8/read_lines.ts similarity index 58% rename from src/vendor/deno.land/std@0.217.0/io/read_lines.ts rename to src/vendor/jsr.io/@std/io/0.224.8/read_lines.ts index 2a395fe347c..3d4179ff0b1 100644 --- a/src/vendor/deno.land/std@0.217.0/io/read_lines.ts +++ b/src/vendor/jsr.io/@std/io/0.224.8/read_lines.ts @@ -1,27 +1,30 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -import { type Reader } from "./types.ts"; +import type { Reader } from "./types.ts"; import { BufReader } from "./buf_reader.ts"; -import { concat } from "../bytes/concat.ts"; +import { concat } from "jsr:@std/bytes@^1.0.2/concat"; /** - * Read strings line-by-line from a Reader. + * Read strings line-by-line from a {@linkcode Reader}. * - * @example + * @example Usage * ```ts - * import { readLines } from "https://deno.land/std@$STD_VERSION/io/read_lines.ts"; - * import * as path from "https://deno.land/std@$STD_VERSION/path/mod.ts"; + * import { readLines } from "@std/io/read-lines"; + * import { assert } from "@std/assert/assert" * - * const filename = path.join(Deno.cwd(), "std/io/README.md"); - * let fileReader = await Deno.open(filename); + * let fileReader = await Deno.open("README.md"); * * for await (let line of readLines(fileReader)) { - * console.log(line); + * assert(typeof line === "string"); * } * ``` * - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + * @param reader The reader to read from + * @param decoderOpts The options + * @returns The async iterator of strings + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. */ export async function* readLines( reader: Reader, diff --git a/src/vendor/jsr.io/@std/io/0.224.8/read_long.ts b/src/vendor/jsr.io/@std/io/0.224.8/read_long.ts new file mode 100644 index 00000000000..12dd179d68e --- /dev/null +++ b/src/vendor/jsr.io/@std/io/0.224.8/read_long.ts @@ -0,0 +1,43 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { BufReader } from "./buf_reader.ts"; +import { readInt } from "./read_int.ts"; + +const MAX_SAFE_INTEGER = BigInt(Number.MAX_SAFE_INTEGER); + +/** + * Read big endian 64bit long from a {@linkcode BufReader}. + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer" + * import { BufReader } from "@std/io/buf-reader"; + * import { readLong } from "@std/io/read-long"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new BufReader(new Buffer(new Uint8Array([0, 0, 0, 0x12, 0x34, 0x56, 0x78, 0x9a]))); + * const long = await readLong(buf); + * assertEquals(long, 0x123456789a); + * ``` + * + * @param buf The BufReader to read from + * @returns The 64bit long + * @throws {Deno.errors.UnexpectedEof} If the reader returns unexpected EOF + * @throws {RangeError} If the long value is too big to be represented as a JavaScript number + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + */ +export async function readLong(buf: BufReader): Promise { + const high = await readInt(buf); + if (high === null) return null; + const low = await readInt(buf); + if (low === null) throw new Deno.errors.UnexpectedEof(); + const big = (BigInt(high) << 32n) | BigInt(low); + // We probably should provide a similar API that returns BigInt values. + if (big > MAX_SAFE_INTEGER) { + throw new RangeError( + "Long value too big to be represented as a JavaScript number.", + ); + } + return Number(big); +} diff --git a/src/vendor/deno.land/std@0.217.0/io/read_range.ts b/src/vendor/jsr.io/@std/io/0.224.8/read_range.ts similarity index 51% rename from src/vendor/deno.land/std@0.217.0/io/read_range.ts rename to src/vendor/jsr.io/@std/io/0.224.8/read_range.ts index 824e83aafd1..723834319f5 100644 --- a/src/vendor/deno.land/std@0.217.0/io/read_range.ts +++ b/src/vendor/jsr.io/@std/io/0.224.8/read_range.ts @@ -1,13 +1,14 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { copy as copyBytes } from "../bytes/copy.ts"; -import { assert } from "../assert/assert.ts"; -import type { Reader, ReaderSync } from "./types.ts"; +import { copy as copyBytes } from "jsr:@std/bytes@^1.0.2/copy"; +import type { Reader, ReaderSync, Seeker, SeekerSync } from "./types.ts"; const DEFAULT_BUFFER_SIZE = 32 * 1024; /** - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + * The range of bytes to read from a file or other resource that is readable. + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. */ export interface ByteRange { /** The 0 based index of the start byte for a range. */ @@ -22,9 +23,10 @@ export interface ByteRange { * seekable. The range start and end are inclusive of the bytes within that * range. * - * ```ts - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * import { readRange } from "https://deno.land/std@$STD_VERSION/io/read_range.ts"; + * @example Usage + * ```ts no-eval + * import { assertEquals } from "@std/assert"; + * import { readRange } from "@std/io/read-range"; * * // Read the first 10 bytes of a file * const file = await Deno.open("example.txt", { read: true }); @@ -32,27 +34,39 @@ export interface ByteRange { * assertEquals(bytes.length, 10); * ``` * - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + * @param r The reader to read from + * @param range The range of bytes to read + * @returns The bytes read + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. */ export async function readRange( - r: Reader & Deno.Seeker, + r: Reader & Seeker, range: ByteRange, ): Promise { // byte ranges are inclusive, so we have to add one to the end let length = range.end - range.start + 1; - assert(length > 0, "Invalid byte range was passed."); + if (length <= 0) { + throw new RangeError("Byte range start cannot be larger than end"); + } await r.seek(range.start, Deno.SeekMode.Start); const result = new Uint8Array(length); let off = 0; while (length) { const p = new Uint8Array(Math.min(length, DEFAULT_BUFFER_SIZE)); const nread = await r.read(p); - assert(nread !== null, "Unexpected EOF reach while reading a range."); - assert(nread > 0, "Unexpected read of 0 bytes while reading a range."); + if (nread === null) { + throw new Error("Unexpected EOF reach while reading a range"); + } + if (nread === 0) { + throw new Error("Unexpected read of 0 bytes while reading a range"); + } copyBytes(p, result, off); off += nread; length -= nread; - assert(length >= 0, "Unexpected length remaining after reading range."); + if (length < 0) { + throw new Error("Unexpected length remaining after reading range"); + } } return result; } @@ -62,9 +76,10 @@ export async function readRange( * readable and seekable. The range start and end are inclusive of the bytes * within that range. * - * ```ts - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * import { readRangeSync } from "https://deno.land/std@$STD_VERSION/io/read_range.ts"; + * @example Usage + * ```ts no-eval + * import { assertEquals } from "@std/assert"; + * import { readRangeSync } from "@std/io/read-range"; * * // Read the first 10 bytes of a file * const file = Deno.openSync("example.txt", { read: true }); @@ -72,27 +87,39 @@ export async function readRange( * assertEquals(bytes.length, 10); * ``` * - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + * @param r The reader to read from + * @param range The range of bytes to read + * @returns The bytes read + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. */ export function readRangeSync( - r: ReaderSync & Deno.SeekerSync, + r: ReaderSync & SeekerSync, range: ByteRange, ): Uint8Array { // byte ranges are inclusive, so we have to add one to the end let length = range.end - range.start + 1; - assert(length > 0, "Invalid byte range was passed."); + if (length <= 0) { + throw new RangeError("Byte range start cannot be larger than end"); + } r.seekSync(range.start, Deno.SeekMode.Start); const result = new Uint8Array(length); let off = 0; while (length) { const p = new Uint8Array(Math.min(length, DEFAULT_BUFFER_SIZE)); const nread = r.readSync(p); - assert(nread !== null, "Unexpected EOF reach while reading a range."); - assert(nread > 0, "Unexpected read of 0 bytes while reading a range."); + if (nread === null) { + throw new Error("Unexpected EOF reach while reading a range"); + } + if (nread === 0) { + throw new Error("Unexpected read of 0 bytes while reading a range"); + } copyBytes(p, result, off); off += nread; length -= nread; - assert(length >= 0, "Unexpected length remaining after reading range."); + if (length < 0) { + throw new Error("Unexpected length remaining after reading range"); + } } return result; } diff --git a/src/vendor/jsr.io/@std/io/0.224.8/read_short.ts b/src/vendor/jsr.io/@std/io/0.224.8/read_short.ts new file mode 100644 index 00000000000..a4e174a6c70 --- /dev/null +++ b/src/vendor/jsr.io/@std/io/0.224.8/read_short.ts @@ -0,0 +1,31 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { BufReader } from "./buf_reader.ts"; + +/** + * Read big endian 16bit short from a {@linkcode BufReader}. + * + * @example Usage + * ```ts + * import { Buffer } from "@std/io/buffer" + * import { BufReader } from "@std/io/buf-reader"; + * import { readShort } from "@std/io/read-short"; + * import { assertEquals } from "@std/assert/equals"; + * + * const buf = new BufReader(new Buffer(new Uint8Array([0x12, 0x34]))); + * const short = await readShort(buf); + * assertEquals(short, 0x1234); + * ``` + * + * @param buf The reader to read from + * @returns The 16bit short + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + */ +export async function readShort(buf: BufReader): Promise { + const high = await buf.readByte(); + if (high === null) return null; + const low = await buf.readByte(); + if (low === null) throw new Deno.errors.UnexpectedEof(); + return (high << 8) | low; +} diff --git a/src/vendor/deno.land/std@0.217.0/io/read_string_delim.ts b/src/vendor/jsr.io/@std/io/0.224.8/read_string_delim.ts similarity index 51% rename from src/vendor/deno.land/std@0.217.0/io/read_string_delim.ts rename to src/vendor/jsr.io/@std/io/0.224.8/read_string_delim.ts index c7cbee184d2..7a34eddd8e3 100644 --- a/src/vendor/deno.land/std@0.217.0/io/read_string_delim.ts +++ b/src/vendor/jsr.io/@std/io/0.224.8/read_string_delim.ts @@ -1,26 +1,30 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -import { type Reader } from "./types.ts"; +import type { Reader } from "./types.ts"; import { readDelim } from "./read_delim.ts"; /** - * Read Reader chunk by chunk, splitting based on delimiter. + * Read {@linkcode Reader} chunk by chunk, splitting based on delimiter. * - * @example + * @example Usage * ```ts - * import { readStringDelim } from "https://deno.land/std@$STD_VERSION/io/read_string_delim.ts"; - * import * as path from "https://deno.land/std@$STD_VERSION/path/mod.ts"; + * import { readStringDelim } from "@std/io/read-string-delim"; + * import { assert } from "@std/assert/assert" * - * const filename = path.join(Deno.cwd(), "std/io/README.md"); - * let fileReader = await Deno.open(filename); + * let fileReader = await Deno.open("README.md"); * * for await (let line of readStringDelim(fileReader, "\n")) { - * console.log(line); + * assert(typeof line === "string"); * } * ``` * - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + * @param reader The reader to read from + * @param delim The delimiter to split the reader by + * @param decoderOpts The options + * @returns The async iterator of strings + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. */ export async function* readStringDelim( reader: Reader, diff --git a/src/vendor/deno.land/std@0.217.0/io/reader_from_stream_reader.ts b/src/vendor/jsr.io/@std/io/0.224.8/reader_from_stream_reader.ts similarity index 73% rename from src/vendor/deno.land/std@0.217.0/io/reader_from_stream_reader.ts rename to src/vendor/jsr.io/@std/io/0.224.8/reader_from_stream_reader.ts index 4817650bae0..279764157e7 100644 --- a/src/vendor/deno.land/std@0.217.0/io/reader_from_stream_reader.ts +++ b/src/vendor/jsr.io/@std/io/0.224.8/reader_from_stream_reader.ts @@ -8,17 +8,19 @@ import type { Reader } from "./types.ts"; /** * Create a {@linkcode Reader} from a {@linkcode ReadableStreamDefaultReader}. * - * @example - * ```ts - * import { copy } from "https://deno.land/std@$STD_VERSION/io/copy.ts"; - * import { readerFromStreamReader } from "https://deno.land/std@$STD_VERSION/io/reader_from_stream_reader.ts"; + * @example Usage + * ```ts no-assert + * import { copy } from "@std/io/copy"; + * import { readerFromStreamReader } from "@std/io/reader-from-stream-reader"; * * const res = await fetch("https://deno.land"); - * using file = await Deno.open("./deno.land.html", { create: true, write: true }); * * const reader = readerFromStreamReader(res.body!.getReader()); - * await copy(reader, file); + * await copy(reader, Deno.stdout); * ``` + * + * @param streamReader The stream reader to read from + * @returns The reader */ export function readerFromStreamReader( streamReader: ReadableStreamDefaultReader, diff --git a/src/vendor/jsr.io/@std/io/0.224.8/slice_long_to_bytes.ts b/src/vendor/jsr.io/@std/io/0.224.8/slice_long_to_bytes.ts new file mode 100644 index 00000000000..f401652b3c0 --- /dev/null +++ b/src/vendor/jsr.io/@std/io/0.224.8/slice_long_to_bytes.ts @@ -0,0 +1,32 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Slice number into 64bit big endian byte array. + * + * @example Usage + * ```ts + * import { sliceLongToBytes } from "@std/io/slice-long-to-bytes"; + * import { assertEquals } from "@std/assert/equals"; + * + * const dest = sliceLongToBytes(0x123456789a); + * assertEquals(dest, [0, 0, 0, 0x12, 0x34, 0x56, 0x78, 0x9a]); + * ``` + * + * @param d The number to be sliced + * @param dest The array to store the sliced bytes + * @returns The sliced bytes + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + */ +export function sliceLongToBytes( + d: number, + dest: number[] = Array.from({ length: 8 }), +): number[] { + let big = BigInt(d); + for (let i = 0; i < 8; i++) { + dest[7 - i] = Number(big & 0xffn); + big >>= 8n; + } + return dest; +} diff --git a/src/vendor/deno.land/std@0.217.0/io/string_reader.ts b/src/vendor/jsr.io/@std/io/0.224.8/string_reader.ts similarity index 50% rename from src/vendor/deno.land/std@0.217.0/io/string_reader.ts rename to src/vendor/jsr.io/@std/io/0.224.8/string_reader.ts index b54ac9548ad..f97d6b70c63 100644 --- a/src/vendor/deno.land/std@0.217.0/io/string_reader.ts +++ b/src/vendor/jsr.io/@std/io/0.224.8/string_reader.ts @@ -6,35 +6,29 @@ import { Buffer } from "./buffer.ts"; /** * Reader utility for strings. * - * @example + * @example Usage * ```ts - * import { StringReader } from "https://deno.land/std@$STD_VERSION/io/string_reader.ts"; + * import { StringReader } from "@std/io/string-reader"; + * import { assertEquals } from "@std/assert/equals"; * * const data = new Uint8Array(6); * const r = new StringReader("abcdef"); * const res0 = await r.read(data); * const res1 = await r.read(new Uint8Array(6)); * - * // Number of bytes read - * console.log(res0); // 6 - * console.log(res1); // null, no byte left to read. EOL - * - * // text - * - * console.log(new TextDecoder().decode(data)); // abcdef - * ``` - * - * **Output:** - * - * ```text - * 6 - * null - * abcdef + * assertEquals(res0, 6); + * assertEquals(res1, null); + * assertEquals(new TextDecoder().decode(data), "abcdef"); * ``` * - * @deprecated (will be removed after 1.0.0) Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. */ export class StringReader extends Buffer { + /** + * Construct a new instance. + * + * @param s The string to read. + */ constructor(s: string) { super(new TextEncoder().encode(s).buffer); } diff --git a/src/vendor/jsr.io/@std/io/0.224.8/string_writer.ts b/src/vendor/jsr.io/@std/io/0.224.8/string_writer.ts new file mode 100644 index 00000000000..63ca18cd064 --- /dev/null +++ b/src/vendor/jsr.io/@std/io/0.224.8/string_writer.ts @@ -0,0 +1,122 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { Writer, WriterSync } from "./types.ts"; + +const decoder = new TextDecoder(); + +/** + * Writer utility for buffering string chunks. + * + * @example Usage + * ```ts + * import { + * copyN, + * StringReader, + * StringWriter, + * } from "@std/io"; + * import { copy } from "@std/io/copy"; + * import { assertEquals } from "@std/assert/equals"; + * + * const w = new StringWriter("base"); + * const r = new StringReader("0123456789"); + * await copyN(r, w, 4); // copy 4 bytes + * + * assertEquals(w.toString(), "base0123"); + * + * await copy(r, w); // copy all + * assertEquals(w.toString(), "base0123456789"); + * ``` + * + * @deprecated This will be removed in 1.0.0. Use the {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API} instead. + */ +export class StringWriter implements Writer, WriterSync { + #chunks: Uint8Array[] = []; + #byteLength = 0; + #cache: string | undefined; + #base: string; + + /** + * Construct a new instance. + * + * @param base The base string to write to the buffer. + */ + constructor(base = "") { + const c = new TextEncoder().encode(base); + this.#chunks.push(c); + this.#byteLength += c.byteLength; + this.#base = base; + } + + /** + * Writes the bytes to the buffer asynchronously. + * + * @example Usage + * ```ts + * import { StringWriter } from "@std/io/string-writer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const w = new StringWriter("base"); + * await w.write(new TextEncoder().encode("0123")); + * assertEquals(w.toString(), "base0123"); + * ``` + * + * @param p The bytes to write to the buffer. + * @returns The number of bytes written to the buffer in total. + */ + write(p: Uint8Array): Promise { + return Promise.resolve(this.writeSync(p)); + } + + /** + * Writes the bytes to the buffer synchronously. + * + * @example Usage + * ```ts + * import { StringWriter } from "@std/io/string-writer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const w = new StringWriter("base"); + * w.writeSync(new TextEncoder().encode("0123")); + * assertEquals(w.toString(), "base0123"); + * ``` + * + * @param p The bytes to write to the buffer. + * @returns The number of bytes written to the buffer in total. + */ + writeSync(p: Uint8Array): number { + this.#chunks.push(new Uint8Array(p)); + this.#byteLength += p.byteLength; + this.#cache = undefined; + return p.byteLength; + } + + /** + * Returns the string written to the buffer. + * + * @example Usage + * ```ts + * import { StringWriter } from "@std/io/string-writer"; + * import { assertEquals } from "@std/assert/equals"; + * + * const w = new StringWriter("base"); + * await w.write(new TextEncoder().encode("0123")); + * assertEquals(w.toString(), "base0123"); + * ``` + * + * @returns the string written to the buffer. + */ + toString(): string { + if (this.#cache) { + return this.#cache; + } + const buf = new Uint8Array(this.#byteLength); + let offs = 0; + for (const chunk of this.#chunks) { + buf.set(chunk, offs); + offs += chunk.byteLength; + } + this.#cache = decoder.decode(buf); + return this.#cache; + } +} diff --git a/src/vendor/deno.land/std@0.217.0/io/to_readable_stream.ts b/src/vendor/jsr.io/@std/io/0.224.8/to_readable_stream.ts similarity index 78% rename from src/vendor/deno.land/std@0.217.0/io/to_readable_stream.ts rename to src/vendor/jsr.io/@std/io/0.224.8/to_readable_stream.ts index 7c7cce9fe9d..8c958625994 100644 --- a/src/vendor/deno.land/std@0.217.0/io/to_readable_stream.ts +++ b/src/vendor/jsr.io/@std/io/0.224.8/to_readable_stream.ts @@ -14,11 +14,14 @@ export interface ToReadableStreamOptions { */ autoClose?: boolean; - /** The size of chunks to allocate to read, the default is ~16KiB, which is - * the maximum size that Deno operations can currently support. */ + /** + * The size of chunks to allocate to read. + * + * @default {16640} + */ chunkSize?: number; - /** The queuing strategy to create the `ReadableStream` with. */ + /** The queuing strategy to create the {@linkcode ReadableStream} with. */ strategy?: QueuingStrategy; } @@ -30,22 +33,28 @@ export interface ToReadableStreamOptions { * will be read. When `null` is returned from the reader, the stream will be * closed along with the reader (if it is also a `Closer`). * - * @example - * ```ts - * import { toReadableStream } from "https://deno.land/std@$STD_VERSION/io/to_readable_stream.ts"; + * @example Usage + * ```ts no-assert + * import { toReadableStream } from "@std/io/to-readable-stream"; * - * const file = await Deno.open("./file.txt", { read: true }); + * const file = await Deno.open("./README.md", { read: true }); * const fileStream = toReadableStream(file); * ``` + * + * @param reader The reader to read from + * @param options The options + * @returns The readable stream */ export function toReadableStream( reader: Reader | (Reader & Closer), - { + options?: ToReadableStreamOptions, +): ReadableStream { + const { autoClose = true, chunkSize = DEFAULT_CHUNK_SIZE, strategy, - }: ToReadableStreamOptions = {}, -): ReadableStream { + } = options ?? {}; + return new ReadableStream({ async pull(controller) { const chunk = new Uint8Array(chunkSize); diff --git a/src/vendor/deno.land/std@0.217.0/io/to_writable_stream.ts b/src/vendor/jsr.io/@std/io/0.224.8/to_writable_stream.ts similarity index 76% rename from src/vendor/deno.land/std@0.217.0/io/to_writable_stream.ts rename to src/vendor/jsr.io/@std/io/0.224.8/to_writable_stream.ts index 534903923bd..ace7a4dc3b2 100644 --- a/src/vendor/deno.land/std@0.217.0/io/to_writable_stream.ts +++ b/src/vendor/jsr.io/@std/io/0.224.8/to_writable_stream.ts @@ -19,20 +19,25 @@ export interface toWritableStreamOptions { /** * Create a {@linkcode WritableStream} from a {@linkcode Writer}. * - * @example - * ```ts - * import { toWritableStream } from "https://deno.land/std@$STD_VERSION/io/to_writable_stream.ts"; + * @example Usage + * ```ts no-assert + * import { toWritableStream } from "@std/io/to-writable-stream"; * - * const file = await Deno.open("./file.txt", { create: true, write: true }); - * await ReadableStream.from("Hello World") + * await ReadableStream.from(["Hello World"]) * .pipeThrough(new TextEncoderStream()) - * .pipeTo(toWritableStream(file)); + * .pipeTo(toWritableStream(Deno.stdout)); * ``` + * + * @param writer The writer to write to + * @param options The options + * @returns The writable stream */ export function toWritableStream( writer: Writer, - { autoClose = true }: toWritableStreamOptions = {}, + options?: toWritableStreamOptions, ): WritableStream { + const { autoClose = true } = options ?? {}; + return new WritableStream({ async write(chunk, controller) { try { diff --git a/src/vendor/deno.land/std@0.217.0/io/types.ts b/src/vendor/jsr.io/@std/io/0.224.8/types.ts similarity index 61% rename from src/vendor/deno.land/std@0.217.0/io/types.ts rename to src/vendor/jsr.io/@std/io/0.224.8/types.ts index 5e0fac6eae9..58b4b7069e9 100644 --- a/src/vendor/deno.land/std@0.217.0/io/types.ts +++ b/src/vendor/jsr.io/@std/io/0.224.8/types.ts @@ -2,7 +2,8 @@ // This module is browser compatible. /** - * An abstract interface which when implemented provides an interface to read bytes into an array buffer asynchronously. + * An abstract interface which when implemented provides an interface to read + * bytes into an array buffer asynchronously. */ export interface Reader { /** Reads up to `p.byteLength` bytes into `p`. It resolves to the number of @@ -25,14 +26,15 @@ export interface Reader { * Implementations should not retain a reference to `p`. * * Use - * {@linkcode https://deno.land/std@$STD_VERSION/io/to_iterator.ts?s=toIterator} + * {@linkcode @std/io/to-iterator.ts?s=toIterator} * to turn a {@linkcode Reader} into an {@linkcode AsyncIterableIterator}. */ read(p: Uint8Array): Promise; } /** - * An abstract interface which when implemented provides an interface to read bytes into an array buffer synchronously. + * An abstract interface which when implemented provides an interface to read + * bytes into an array buffer synchronously. */ export interface ReaderSync { /** Reads up to `p.byteLength` bytes into `p`. It resolves to the number @@ -54,14 +56,15 @@ export interface ReaderSync { * Implementations should not retain a reference to `p`. * * Use - * {@linkcode https://deno.land/std@$STD_VERSION/io/to_iterator.ts?s=toIteratorSync} + * {@linkcode @std/io/to-iterator.ts?s=toIteratorSync} * to turn a {@linkcode ReaderSync} into an {@linkcode IterableIterator}. */ readSync(p: Uint8Array): number | null; } /** - * An abstract interface which when implemented provides an interface to write bytes from an array buffer to a file/resource asynchronously. + * An abstract interface which when implemented provides an interface to write + * bytes from an array buffer to a file/resource asynchronously. */ export interface Writer { /** Writes `p.byteLength` bytes from `p` to the underlying data stream. It @@ -76,7 +79,8 @@ export interface Writer { write(p: Uint8Array): Promise; } /** - * An abstract interface which when implemented provides an interface to write bytes from an array buffer to a file/resource synchronously. + * An abstract interface which when implemented provides an interface to write + * bytes from an array buffer to a file/resource synchronously. */ export interface WriterSync { /** Writes `p.byteLength` bytes from `p` to the underlying data @@ -92,9 +96,62 @@ export interface WriterSync { } /** - * An abstract interface which when implemented provides an interface to close files/resources that were previously opened. + * An abstract interface which when implemented provides an interface to close + * files/resources that were previously opened. */ export interface Closer { /** Closes the resource, "freeing" the backing file/resource. */ close(): void; } + +/** + * A enum which defines the seek mode for IO related APIs that support + * seeking. + */ +export enum SeekMode { + /* Seek from the start of the file/resource. */ + Start = 0, + /* Seek from the current position within the file/resource. */ + Current = 1, + /* Seek from the end of the current file/resource. */ + End = 2, +} + +/** + * An abstract interface which when implemented provides an interface to seek + * within an open file/resource asynchronously. + */ +export interface Seeker { + /** Seek sets the offset for the next `read()` or `write()` to offset, + * interpreted according to `whence`: `Start` means relative to the + * start of the file, `Current` means relative to the current offset, + * and `End` means relative to the end. Seek resolves to the new offset + * relative to the start of the file. + * + * Seeking to an offset before the start of the file is an error. Seeking to + * any positive offset is legal, but the behavior of subsequent I/O + * operations on the underlying object is implementation-dependent. + * + * It resolves with the updated offset. + */ + seek(offset: number | bigint, whence: SeekMode): Promise; +} + +/** + * An abstract interface which when implemented provides an interface to seek + * within an open file/resource synchronously. + */ +export interface SeekerSync { + /** Seek sets the offset for the next `readSync()` or `writeSync()` to + * offset, interpreted according to `whence`: `Start` means relative + * to the start of the file, `Current` means relative to the current + * offset, and `End` means relative to the end. + * + * Seeking to an offset before the start of the file is an error. Seeking to + * any positive offset is legal, but the behavior of subsequent I/O + * operations on the underlying object is implementation-dependent. + * + * It returns the updated offset. + */ + seekSync(offset: number | bigint, whence: SeekMode): number; +} diff --git a/src/vendor/jsr.io/@std/io/0.224.8/write_all.ts b/src/vendor/jsr.io/@std/io/0.224.8/write_all.ts new file mode 100644 index 00000000000..ccb09f64138 --- /dev/null +++ b/src/vendor/jsr.io/@std/io/0.224.8/write_all.ts @@ -0,0 +1,65 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { Writer, WriterSync } from "./types.ts"; + +/** + * Write all the content of the array buffer (`arr`) to the writer (`w`). + * + * @example Writing to stdout + * ```ts no-assert + * import { writeAll } from "@std/io/write-all"; + * + * const contentBytes = new TextEncoder().encode("Hello World"); + * await writeAll(Deno.stdout, contentBytes); + * ``` + * + * @example Writing to file + * ```ts no-eval no-assert + * import { writeAll } from "@std/io/write-all"; + * + * const contentBytes = new TextEncoder().encode("Hello World"); + * using file = await Deno.open('test.file', { write: true }); + * await writeAll(file, contentBytes); + * ``` + * + * @param writer The writer to write to + * @param data The data to write + */ +export async function writeAll(writer: Writer, data: Uint8Array) { + let nwritten = 0; + while (nwritten < data.length) { + nwritten += await writer.write(data.subarray(nwritten)); + } +} + +/** + * Synchronously write all the content of the array buffer (`arr`) to the + * writer (`w`). + * + * @example "riting to stdout + * ```ts no-assert + * import { writeAllSync } from "@std/io/write-all"; + * + * const contentBytes = new TextEncoder().encode("Hello World"); + * writeAllSync(Deno.stdout, contentBytes); + * ``` + * + * @example Writing to file + * ```ts no-eval no-assert + * import { writeAllSync } from "@std/io/write-all"; + * + * const contentBytes = new TextEncoder().encode("Hello World"); + * using file = Deno.openSync("test.file", { write: true }); + * writeAllSync(file, contentBytes); + * ``` + * + * @param writer The writer to write to + * @param data The data to write + */ +export function writeAllSync(writer: WriterSync, data: Uint8Array) { + let nwritten = 0; + while (nwritten < data.length) { + nwritten += writer.writeSync(data.subarray(nwritten)); + } +} diff --git a/src/vendor/jsr.io/@std/json/1.0.0/types.ts b/src/vendor/jsr.io/@std/json/1.0.0/types.ts new file mode 100644 index 00000000000..f29b98a86da --- /dev/null +++ b/src/vendor/jsr.io/@std/json/1.0.0/types.ts @@ -0,0 +1,11 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** The type of the result of parsing JSON. */ +export type JsonValue = + | { [key: string]: JsonValue | undefined } + | JsonValue[] + | string + | number + | boolean + | null; diff --git a/src/vendor/jsr.io/@std/jsonc/0.224.3/mod.ts b/src/vendor/jsr.io/@std/jsonc/0.224.3/mod.ts new file mode 100644 index 00000000000..9c276a87b9c --- /dev/null +++ b/src/vendor/jsr.io/@std/jsonc/0.224.3/mod.ts @@ -0,0 +1,25 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Provides tools for working with JSONC (JSON with comments). Currently, this + * module only provides a means of parsing JSONC. JSONC serialization is not + * yet supported. + * + * ```ts + * import { parse } from "@std/jsonc"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(parse('{"foo": "bar", } // comment'), { foo: "bar" }); + * + * assertEquals(parse('{"foo": "bar", } /* comment *\/'), { foo: "bar" }); + * + * assertEquals( + * parse('{"foo": "bar" } // comment', { allowTrailingComma: false }), + * { foo: "bar" } + * ); + * ``` + * + * @module + */ +export * from "./parse.ts"; diff --git a/src/vendor/deno.land/std@0.217.0/jsonc/parse.ts b/src/vendor/jsr.io/@std/jsonc/0.224.3/parse.ts similarity index 92% rename from src/vendor/deno.land/std@0.217.0/jsonc/parse.ts rename to src/vendor/jsr.io/@std/jsonc/0.224.3/parse.ts index 3e44708a11b..1b830ae8af1 100644 --- a/src/vendor/deno.land/std@0.217.0/jsonc/parse.ts +++ b/src/vendor/jsr.io/@std/jsonc/0.224.3/parse.ts @@ -6,15 +6,10 @@ * {@link https://code.visualstudio.com/docs/languages/json#_json-with-comments | JSONC} * (JSON with Comments) strings. * - * This module is browser compatible. - * * @module */ - -import { assert } from "../assert/assert.ts"; - -import type { JsonValue } from "../json/common.ts"; -export type { JsonValue } from "../json/common.ts"; +import type { JsonValue } from "jsr:/@std/json@^1.0.0-rc.1/types"; +export type { JsonValue } from "jsr:/@std/json@^1.0.0-rc.1/types"; /** Options for {@linkcode parse}. */ export interface ParseOptions { @@ -29,18 +24,19 @@ export interface ParseOptions { * Converts a JSON with Comments (JSONC) string into an object. * If a syntax error is found, throw a {@linkcode SyntaxError}. * - * @example + * @example Usage * ```ts - * import { parse } from "https://deno.land/std@$STD_VERSION/jsonc/mod.ts"; + * import { parse } from "@std/jsonc"; + * import { assertEquals } from "@std/assert"; * - * console.log(parse('{"foo": "bar", } // comment')); // { foo: "bar" } - * console.log(parse('{"foo": "bar", } /* comment *\/')); // { foo: "bar" } - * console.log(parse('{"foo": "bar" } // comment', { - * allowTrailingComma: false, - * })); // { foo: "bar" } + * assertEquals(parse('{"foo": "bar"}'), { foo: "bar" }); + * assertEquals(parse('{"foo": "bar", }'), { foo: "bar" }); + * assertEquals(parse('{"foo": "bar", } /* comment *\/'), { foo: "bar" }); + * assertEquals(parse('{"foo": "bar" } // comment', { allowTrailingComma: false }), { foo: "bar" }); * ``` * * @param text A valid JSONC string. + * @returns The parsed JsonValue from the JSONC string. */ export function parse( text: string, @@ -79,8 +75,6 @@ type Token = { position: number; }; -const originalJSONParse = globalThis.JSON.parse; - // First tokenize and then parse the token. class JSONCParser { readonly #whitespace = new Set(" \t\r\n"); @@ -209,6 +203,7 @@ class JSONCParser { } } } + #parseJsonValue(value: Token): JsonValue { switch (value.type) { case "BeginObject": @@ -223,6 +218,7 @@ class JSONCParser { throw new SyntaxError(buildErrorMessage(value)); } } + #parseObject(): { [key: string]: JsonValue | undefined } { const target: { [key: string]: JsonValue | undefined } = {}; // ┌─token1 @@ -282,6 +278,7 @@ class JSONCParser { } } } + #parseArray(): JsonValue[] { const target: JsonValue[] = []; // ┌─token1 @@ -317,6 +314,7 @@ class JSONCParser { } } } + #parseString(value: { type: "String"; sourceText: string; @@ -325,13 +323,16 @@ class JSONCParser { let parsed; try { // Use JSON.parse to handle `\u0000` etc. correctly. - parsed = originalJSONParse(value.sourceText); + parsed = JSON.parse(value.sourceText); } catch { throw new SyntaxError(buildErrorMessage(value)); } - assert(typeof parsed === "string"); + if (typeof parsed !== "string") { + throw new TypeError(`Parsed value is not a string: ${parsed}`); + } return parsed; } + #parseNullOrTrueOrFalseOrNumber(value: { type: "NullOrTrueOrFalseOrNumber"; sourceText: string; @@ -349,11 +350,13 @@ class JSONCParser { let parsed; try { // Use JSON.parse to handle `+100`, `Infinity` etc. correctly. - parsed = originalJSONParse(value.sourceText); + parsed = JSON.parse(value.sourceText); } catch { throw new SyntaxError(buildErrorMessage(value)); } - assert(typeof parsed === "number"); + if (typeof parsed !== "number") { + throw new TypeError(`Parsed value is not a number: ${parsed}`); + } return parsed; } } @@ -386,8 +389,6 @@ function buildErrorMessage({ type, sourceText, position }: Token): string { ? `${sourceText.slice(0, 30)}...` : sourceText; break; - default: - throw new Error("unreachable"); } return `Unexpected token ${token} in JSONC at position ${position}`; } diff --git a/src/vendor/deno.land/std@0.217.0/log/_config.ts b/src/vendor/jsr.io/@std/log/0.224.7/_config.ts similarity index 89% rename from src/vendor/deno.land/std@0.217.0/log/_config.ts rename to src/vendor/jsr.io/@std/log/0.224.7/_config.ts index e984f516a6e..d882bca15b5 100644 --- a/src/vendor/deno.land/std@0.217.0/log/_config.ts +++ b/src/vendor/jsr.io/@std/log/0.224.7/_config.ts @@ -1,7 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. import { ConsoleHandler } from "./console_handler.ts"; -import { type LogConfig } from "./logger.ts"; +import type { LogConfig } from "./logger.ts"; export const DEFAULT_LEVEL = "INFO"; diff --git a/src/vendor/jsr.io/@std/log/0.224.7/_file_handler_symbols.ts b/src/vendor/jsr.io/@std/log/0.224.7/_file_handler_symbols.ts new file mode 100644 index 00000000000..0cca735f11e --- /dev/null +++ b/src/vendor/jsr.io/@std/log/0.224.7/_file_handler_symbols.ts @@ -0,0 +1,8 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +export const fileSymbol = Symbol("file"); +export const bufSymbol = Symbol("buf"); +export const pointerSymbol = Symbol("pointer"); +export const filenameSymbol = Symbol("filename"); +export const modeSymbol = Symbol("mode"); +export const openOptionsSymbol = Symbol("openOptions"); +export const encoderSymbol = Symbol("encoder"); diff --git a/src/vendor/deno.land/std@0.217.0/log/_state.ts b/src/vendor/jsr.io/@std/log/0.224.7/_state.ts similarity index 72% rename from src/vendor/deno.land/std@0.217.0/log/_state.ts rename to src/vendor/jsr.io/@std/log/0.224.7/_state.ts index 921594a271b..9fc831e85e0 100644 --- a/src/vendor/deno.land/std@0.217.0/log/_state.ts +++ b/src/vendor/jsr.io/@std/log/0.224.7/_state.ts @@ -1,8 +1,8 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { BaseHandler } from "./base_handler.ts"; +import type { BaseHandler } from "./base_handler.ts"; import { DEFAULT_CONFIG } from "./_config.ts"; -import { Logger } from "./logger.ts"; +import type { Logger } from "./logger.ts"; export const state = { handlers: new Map(), diff --git a/src/vendor/jsr.io/@std/log/0.224.7/base_handler.ts b/src/vendor/jsr.io/@std/log/0.224.7/base_handler.ts new file mode 100644 index 00000000000..8af7c0cd150 --- /dev/null +++ b/src/vendor/jsr.io/@std/log/0.224.7/base_handler.ts @@ -0,0 +1,69 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import { + getLevelByName, + getLevelName, + type LevelName, + type LogLevel, +} from "./levels.ts"; +import type { LogRecord } from "./logger.ts"; + +export type FormatterFunction = (logRecord: LogRecord) => string; +const DEFAULT_FORMATTER: FormatterFunction = ({ levelName, msg }) => + `${levelName} ${msg}`; + +export interface BaseHandlerOptions { + formatter?: FormatterFunction; +} + +export abstract class BaseHandler { + #levelName: LevelName; + #level: LogLevel; + formatter: FormatterFunction; + + constructor( + levelName: LevelName, + options?: BaseHandlerOptions, + ) { + const { formatter = DEFAULT_FORMATTER } = options ?? {}; + this.#levelName = levelName; + this.#level = getLevelByName(levelName); + this.formatter = formatter; + } + + get level(): LogLevel { + return this.#level; + } + + set level(level: LogLevel) { + this.#level = level; + this.#levelName = getLevelName(level); + } + + get levelName(): LevelName { + return this.#levelName; + } + set levelName(levelName: LevelName) { + this.#levelName = levelName; + this.#level = getLevelByName(levelName); + } + + handle(logRecord: LogRecord) { + if (this.level > logRecord.level) return; + + const msg = this.format(logRecord); + this.log(msg); + } + + format(logRecord: LogRecord): string { + return this.formatter(logRecord); + } + + abstract log(msg: string): void; + setup() {} + destroy() {} + + [Symbol.dispose]() { + this.destroy(); + } +} diff --git a/src/vendor/deno.land/std@0.217.0/log/console_handler.ts b/src/vendor/jsr.io/@std/log/0.224.7/console_handler.ts similarity index 87% rename from src/vendor/deno.land/std@0.217.0/log/console_handler.ts rename to src/vendor/jsr.io/@std/log/0.224.7/console_handler.ts index e20ff275dba..60fb77c650f 100644 --- a/src/vendor/deno.land/std@0.217.0/log/console_handler.ts +++ b/src/vendor/jsr.io/@std/log/0.224.7/console_handler.ts @@ -1,7 +1,8 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { LevelName, LogLevels } from "./levels.ts"; +// This module is browser compatible. +import { type LevelName, LogLevels } from "./levels.ts"; import type { LogRecord } from "./logger.ts"; -import { blue, bold, red, yellow } from "../fmt/colors.ts"; +import { blue, bold, red, yellow } from "jsr:@std/fmt@^1.0.2/colors"; import { BaseHandler, type BaseHandlerOptions } from "./base_handler.ts"; export interface ConsoleHandlerOptions extends BaseHandlerOptions { @@ -51,7 +52,7 @@ export class ConsoleHandler extends BaseHandler { return msg; } - override log(msg: string) { + log(msg: string) { console.log(msg); } } diff --git a/src/vendor/deno.land/std@0.217.0/log/critical.ts b/src/vendor/jsr.io/@std/log/0.224.7/critical.ts similarity index 88% rename from src/vendor/deno.land/std@0.217.0/log/critical.ts rename to src/vendor/jsr.io/@std/log/0.224.7/critical.ts index 9b0451b2d08..62c772f9a7b 100644 --- a/src/vendor/deno.land/std@0.217.0/log/critical.ts +++ b/src/vendor/jsr.io/@std/log/0.224.7/critical.ts @@ -1,7 +1,8 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { getLogger } from "./get_logger.ts"; -import { type GenericFunction } from "./logger.ts"; +import type { GenericFunction } from "./logger.ts"; /** Log with critical level, using default logger. */ export function critical(msg: () => T, ...args: unknown[]): T | undefined; diff --git a/src/vendor/deno.land/std@0.217.0/log/debug.ts b/src/vendor/jsr.io/@std/log/0.224.7/debug.ts similarity index 88% rename from src/vendor/deno.land/std@0.217.0/log/debug.ts rename to src/vendor/jsr.io/@std/log/0.224.7/debug.ts index c7b092528aa..0c6d6663d54 100644 --- a/src/vendor/deno.land/std@0.217.0/log/debug.ts +++ b/src/vendor/jsr.io/@std/log/0.224.7/debug.ts @@ -1,7 +1,8 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { getLogger } from "./get_logger.ts"; -import { type GenericFunction } from "./logger.ts"; +import type { GenericFunction } from "./logger.ts"; /** Log with debug level, using default logger. */ export function debug(msg: () => T, ...args: unknown[]): T | undefined; diff --git a/src/vendor/deno.land/std@0.217.0/log/error.ts b/src/vendor/jsr.io/@std/log/0.224.7/error.ts similarity index 88% rename from src/vendor/deno.land/std@0.217.0/log/error.ts rename to src/vendor/jsr.io/@std/log/0.224.7/error.ts index 69a2106ac35..51aa89102e3 100644 --- a/src/vendor/deno.land/std@0.217.0/log/error.ts +++ b/src/vendor/jsr.io/@std/log/0.224.7/error.ts @@ -1,7 +1,8 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { getLogger } from "./get_logger.ts"; -import { type GenericFunction } from "./logger.ts"; +import type { GenericFunction } from "./logger.ts"; /** Log with error level, using default logger. */ export function error(msg: () => T, ...args: unknown[]): T | undefined; diff --git a/src/vendor/deno.land/std@0.217.0/log/file_handler.ts b/src/vendor/jsr.io/@std/log/0.224.7/file_handler.ts similarity index 52% rename from src/vendor/deno.land/std@0.217.0/log/file_handler.ts rename to src/vendor/jsr.io/@std/log/0.224.7/file_handler.ts index d34be19b71f..c3b0508c023 100644 --- a/src/vendor/deno.land/std@0.217.0/log/file_handler.ts +++ b/src/vendor/jsr.io/@std/log/0.224.7/file_handler.ts @@ -1,14 +1,32 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { LevelName, LogLevels } from "./levels.ts"; +import { type LevelName, LogLevels } from "./levels.ts"; import type { LogRecord } from "./logger.ts"; import { BaseHandler, type BaseHandlerOptions } from "./base_handler.ts"; +import { writeAllSync } from "jsr:@std/io@^0.224.7/write-all"; +import { + bufSymbol, + encoderSymbol, + filenameSymbol, + fileSymbol, + modeSymbol, + openOptionsSymbol, + pointerSymbol, +} from "./_file_handler_symbols.ts"; -const PAGE_SIZE = 4096; export type LogMode = "a" | "w" | "x"; export interface FileHandlerOptions extends BaseHandlerOptions { filename: string; + /** + * @default {"a"} + */ mode?: LogMode; + /** + * Buffer size for writing log messages to file, in bytes. + * + * @default {4096} + */ + bufferSize?: number; } /** @@ -30,33 +48,37 @@ export interface FileHandlerOptions extends BaseHandlerOptions { * This handler requires `--allow-write` permission on the log file. */ export class FileHandler extends BaseHandler { - protected _file: Deno.FsFile | undefined; - protected _buf: Uint8Array = new Uint8Array(PAGE_SIZE); - protected _pointer = 0; - protected _filename: string; - protected _mode: LogMode; - protected _openOptions: Deno.OpenOptions; - protected _encoder: TextEncoder = new TextEncoder(); + [fileSymbol]: Deno.FsFile | undefined; + [bufSymbol]: Uint8Array; + [pointerSymbol] = 0; + [filenameSymbol]: string; + [modeSymbol]: LogMode; + [openOptionsSymbol]: Deno.OpenOptions; + [encoderSymbol]: TextEncoder = new TextEncoder(); #unloadCallback = (() => { this.destroy(); }).bind(this); constructor(levelName: LevelName, options: FileHandlerOptions) { super(levelName, options); - this._filename = options.filename; + this[filenameSymbol] = options.filename; // default to append mode, write only - this._mode = options.mode ? options.mode : "a"; - this._openOptions = { - createNew: this._mode === "x", - create: this._mode !== "x", - append: this._mode === "a", - truncate: this._mode !== "a", + this[modeSymbol] = options.mode ?? "a"; + this[openOptionsSymbol] = { + createNew: this[modeSymbol] === "x", + create: this[modeSymbol] !== "x", + append: this[modeSymbol] === "a", + truncate: this[modeSymbol] !== "a", write: true, }; + this[bufSymbol] = new Uint8Array(options.bufferSize ?? 4096); } override setup() { - this._file = Deno.openSync(this._filename, this._openOptions); + this[fileSymbol] = Deno.openSync( + this[filenameSymbol], + this[openOptionsSymbol], + ); this.#resetBuffer(); addEventListener("unload", this.#unloadCallback); @@ -71,21 +93,25 @@ export class FileHandler extends BaseHandler { } } - override log(msg: string) { - const bytes = this._encoder.encode(msg + "\n"); - if (bytes.byteLength > this._buf.byteLength - this._pointer) { + log(msg: string) { + const bytes = this[encoderSymbol].encode(msg + "\n"); + if (bytes.byteLength > this[bufSymbol].byteLength - this[pointerSymbol]) { this.flush(); } - this._buf.set(bytes, this._pointer); - this._pointer += bytes.byteLength; + if (bytes.byteLength > this[bufSymbol].byteLength) { + writeAllSync(this[fileSymbol]!, bytes); + } else { + this[bufSymbol].set(bytes, this[pointerSymbol]); + this[pointerSymbol] += bytes.byteLength; + } } flush() { - if (this._pointer > 0 && this._file) { + if (this[pointerSymbol] > 0 && this[fileSymbol]) { let written = 0; - while (written < this._pointer) { - written += this._file.writeSync( - this._buf.subarray(written, this._pointer), + while (written < this[pointerSymbol]) { + written += this[fileSymbol].writeSync( + this[bufSymbol].subarray(written, this[pointerSymbol]), ); } this.#resetBuffer(); @@ -93,13 +119,13 @@ export class FileHandler extends BaseHandler { } #resetBuffer() { - this._pointer = 0; + this[pointerSymbol] = 0; } override destroy() { this.flush(); - this._file?.close(); - this._file = undefined; + this[fileSymbol]?.close(); + this[fileSymbol] = undefined; removeEventListener("unload", this.#unloadCallback); } } diff --git a/src/vendor/deno.land/std@0.217.0/log/formatters.ts b/src/vendor/jsr.io/@std/log/0.224.7/formatters.ts similarity index 87% rename from src/vendor/deno.land/std@0.217.0/log/formatters.ts rename to src/vendor/jsr.io/@std/log/0.224.7/formatters.ts index 605738e0f88..bbab88216e8 100644 --- a/src/vendor/deno.land/std@0.217.0/log/formatters.ts +++ b/src/vendor/jsr.io/@std/log/0.224.7/formatters.ts @@ -1,5 +1,6 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { LogRecord } from "./logger.ts"; +// This module is browser compatible. +import type { LogRecord } from "./logger.ts"; export function jsonFormatter(logRecord: LogRecord): string { return JSON.stringify({ diff --git a/src/vendor/deno.land/std@0.217.0/log/get_logger.ts b/src/vendor/jsr.io/@std/log/0.224.7/get_logger.ts similarity index 76% rename from src/vendor/deno.land/std@0.217.0/log/get_logger.ts rename to src/vendor/jsr.io/@std/log/0.224.7/get_logger.ts index 6de97ba54b6..98df3dfebf7 100644 --- a/src/vendor/deno.land/std@0.217.0/log/get_logger.ts +++ b/src/vendor/jsr.io/@std/log/0.224.7/get_logger.ts @@ -1,6 +1,6 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. -import { assert } from "../assert/assert.ts"; import { Logger } from "./logger.ts"; import { state } from "./_state.ts"; @@ -8,10 +8,11 @@ import { state } from "./_state.ts"; export function getLogger(name?: string): Logger { if (!name) { const d = state.loggers.get("default"); - assert( - d !== undefined, - `"default" logger must be set for getting logger without name`, - ); + if (d === undefined) { + throw new Error( + `"default" logger must be set for getting logger without name`, + ); + } return d; } const result = state.loggers.get(name); diff --git a/src/vendor/deno.land/std@0.217.0/log/info.ts b/src/vendor/jsr.io/@std/log/0.224.7/info.ts similarity index 88% rename from src/vendor/deno.land/std@0.217.0/log/info.ts rename to src/vendor/jsr.io/@std/log/0.224.7/info.ts index aa54ee5eabc..d86405d2c00 100644 --- a/src/vendor/deno.land/std@0.217.0/log/info.ts +++ b/src/vendor/jsr.io/@std/log/0.224.7/info.ts @@ -1,7 +1,8 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { getLogger } from "./get_logger.ts"; -import { type GenericFunction } from "./logger.ts"; +import type { GenericFunction } from "./logger.ts"; /** Log with info level, using default logger. */ export function info(msg: () => T, ...args: unknown[]): T | undefined; diff --git a/src/vendor/deno.land/std@0.217.0/log/levels.ts b/src/vendor/jsr.io/@std/log/0.224.7/levels.ts similarity index 90% rename from src/vendor/deno.land/std@0.217.0/log/levels.ts rename to src/vendor/jsr.io/@std/log/0.224.7/levels.ts index cfeed467418..6afa651318b 100644 --- a/src/vendor/deno.land/std@0.217.0/log/levels.ts +++ b/src/vendor/jsr.io/@std/log/0.224.7/levels.ts @@ -43,7 +43,7 @@ export function getLevelByName(name: LevelName): LogLevel { if (level !== undefined) { return level; } - throw new Error(`no log level found for name: ${name}`); + throw new Error(`Cannot get log level: no level named ${name}`); } /** Returns the stringy log level name provided the numeric log level. */ @@ -52,5 +52,5 @@ export function getLevelName(level: LogLevel): LevelName { if (levelName) { return levelName; } - throw new Error(`no level name found for level: ${level}`); + throw new Error(`Cannot get log level: no name for level: ${level}`); } diff --git a/src/vendor/deno.land/std@0.217.0/log/logger.ts b/src/vendor/jsr.io/@std/log/0.224.7/logger.ts similarity index 98% rename from src/vendor/deno.land/std@0.217.0/log/logger.ts rename to src/vendor/jsr.io/@std/log/0.224.7/logger.ts index bf68f081b6c..2bdfa7c543e 100644 --- a/src/vendor/deno.land/std@0.217.0/log/logger.ts +++ b/src/vendor/jsr.io/@std/log/0.224.7/logger.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { getLevelByName, getLevelName, LogLevels } from "./levels.ts"; import type { LevelName, LogLevel } from "./levels.ts"; import type { BaseHandler } from "./base_handler.ts"; @@ -71,7 +72,7 @@ export class Logger { ) { this.#loggerName = loggerName; this.#level = getLevelByName(levelName); - this.handlers = options.handlers || []; + this.handlers = options.handlers ?? []; } /** Use this to retrieve the current numeric log level. */ diff --git a/src/vendor/deno.land/std@0.217.0/log/mod.ts b/src/vendor/jsr.io/@std/log/0.224.7/mod.ts similarity index 91% rename from src/vendor/deno.land/std@0.217.0/log/mod.ts rename to src/vendor/jsr.io/@std/log/0.224.7/mod.ts index d5b8c80619a..b51995ca874 100644 --- a/src/vendor/deno.land/std@0.217.0/log/mod.ts +++ b/src/vendor/jsr.io/@std/log/0.224.7/mod.ts @@ -13,8 +13,7 @@ * ## Custom message format * * If you want to override default format of message you can define `formatter` - * option for handler. It can be either simple string-based format that uses - * `LogRecord` fields or more complicated function-based one that takes `LogRecord` + * option for handler. It can a function that takes `LogRecord` * as argument and outputs string. * * The default log format is `{levelName} {msg}`. @@ -29,7 +28,7 @@ * the configuration `useColors: false` to turn off the ANSI terminal colours. * * ```ts - * import * as log from "https://deno.land/std@$STD_VERSION/log/mod.ts"; + * import * as log from "@std/log"; * * log.setup({ * handlers: { @@ -46,7 +45,7 @@ * you must pass them after the first. * * ```ts - * import * as log from "https://deno.land/std@$STD_VERSION/log/mod.ts"; + * import * as log from "@std/log"; * * log.info("This is the message", { thisWillBe: "JSON.stringify'd"}); * // {"level":"INFO","datetime":1702501580505,"message":"This is the message","args":{"thisWillBe":"JSON.stringify'd"}} @@ -77,7 +76,7 @@ * module by using a custom logger: * * ```ts - * import { getLogger } from "https://deno.land/std@$STD_VERSION/log/mod.ts"; + * import { getLogger } from "@std/log"; * * function logger() { * return getLogger("my-awesome-module"); @@ -97,7 +96,7 @@ * The user of the module can then display the internal logs with: * * ```ts, ignore - * import * as log from "https://deno.land/std@$STD_VERSION/log/mod.ts"; + * import * as log from "@std/log"; * import { sum } from "/mod.ts"; * * log.setup({ @@ -120,7 +119,7 @@ * following won't work: * * ```ts - * import { getLogger } from "https://deno.land/std@$STD_VERSION/log/mod.ts"; + * import { getLogger } from "@std/log"; * * const logger = getLogger("my-awesome-module"); * @@ -132,7 +131,7 @@ * * @example * ```ts - * import * as log from "https://deno.land/std@$STD_VERSION/log/mod.ts"; + * import * as log from "@std/log"; * * // Simple default logger out of the box. You can customize it * // by overriding logger and handler named "default", or providing @@ -191,7 +190,7 @@ * @example * Custom message format example * ```ts - * import * as log from "https://deno.land/std@$STD_VERSION/log/mod.ts"; + * import * as log from "@std/log"; * * log.setup({ * handlers: { @@ -244,7 +243,7 @@ * @example * JSON to stdout with no color example * ```ts - * import * as log from "https://deno.land/std@$STD_VERSION/log/mod.ts"; + * import * as log from "@std/log"; * * log.setup({ * handlers: { @@ -281,7 +280,7 @@ * @example * Custom JSON example * ```ts - * import * as log from "https://deno.land/std@$STD_VERSION/log/mod.ts"; + * import * as log from "@std/log"; * * log.setup({ * handlers: { @@ -313,7 +312,7 @@ * @example * Inline Logging * ```ts - * import * as logger from "https://deno.land/std@$STD_VERSION/log/mod.ts"; + * import * as logger from "@std/log"; * * const stringData: string = logger.debug("hello world"); * const booleanData: boolean = logger.debug(true, 1, "abc"); @@ -329,7 +328,7 @@ * @example * Lazy Log Evaluation * ```ts - * import * as log from "https://deno.land/std@$STD_VERSION/log/mod.ts"; + * import * as log from "@std/log"; * * log.setup({ * handlers: { diff --git a/src/vendor/deno.land/std@0.217.0/log/rotating_file_handler.ts b/src/vendor/jsr.io/@std/log/0.224.7/rotating_file_handler.ts similarity index 77% rename from src/vendor/deno.land/std@0.217.0/log/rotating_file_handler.ts rename to src/vendor/jsr.io/@std/log/0.224.7/rotating_file_handler.ts index 5954604a24a..5dd28c4153d 100644 --- a/src/vendor/deno.land/std@0.217.0/log/rotating_file_handler.ts +++ b/src/vendor/jsr.io/@std/log/0.224.7/rotating_file_handler.ts @@ -1,7 +1,14 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { LevelName } from "./levels.ts"; -import { existsSync } from "../fs/exists.ts"; +import type { LevelName } from "./levels.ts"; +import { existsSync } from "jsr:@std/fs@^1.0.3/exists"; import { FileHandler, type FileHandlerOptions } from "./file_handler.ts"; +import { + encoderSymbol, + filenameSymbol, + fileSymbol, + modeSymbol, + openOptionsSymbol, +} from "./_file_handler_symbols.ts"; interface RotatingFileHandlerOptions extends FileHandlerOptions { maxBytes: number; @@ -60,43 +67,46 @@ export class RotatingFileHandler extends FileHandler { override setup() { if (this.#maxBytes < 1) { this.destroy(); - throw new Error("maxBytes cannot be less than 1"); + throw new Error(`"maxBytes" must be >= 1: received ${this.#maxBytes}`); } if (this.#maxBackupCount < 1) { this.destroy(); - throw new Error("maxBackupCount cannot be less than 1"); + throw new Error( + `"maxBackupCount" must be >= 1: received ${this.#maxBackupCount}`, + ); } super.setup(); - if (this._mode === "w") { + if (this[modeSymbol] === "w") { // Remove old backups too as it doesn't make sense to start with a clean // log file, but old backups for (let i = 1; i <= this.#maxBackupCount; i++) { try { - Deno.removeSync(this._filename + "." + i); + Deno.removeSync(this[filenameSymbol] + "." + i); } catch (error) { if (!(error instanceof Deno.errors.NotFound)) { throw error; } } } - } else if (this._mode === "x") { + } else if (this[modeSymbol] === "x") { // Throw if any backups also exist for (let i = 1; i <= this.#maxBackupCount; i++) { - if (existsSync(this._filename + "." + i)) { + if (existsSync(this[filenameSymbol] + "." + i)) { this.destroy(); throw new Deno.errors.AlreadyExists( - "Backup log file " + this._filename + "." + i + " already exists", + "Backup log file " + this[filenameSymbol] + "." + i + + " already exists", ); } } } else { - this.#currentFileSize = (Deno.statSync(this._filename)).size; + this.#currentFileSize = (Deno.statSync(this[filenameSymbol])).size; } } override log(msg: string) { - const msgByteLength = this._encoder.encode(msg).byteLength + 1; + const msgByteLength = this[encoderSymbol].encode(msg).byteLength + 1; if (this.#currentFileSize + msgByteLength > this.#maxBytes) { this.rotateLogFiles(); @@ -110,17 +120,20 @@ export class RotatingFileHandler extends FileHandler { rotateLogFiles() { this.flush(); - this._file!.close(); + this[fileSymbol]!.close(); for (let i = this.#maxBackupCount - 1; i >= 0; i--) { - const source = this._filename + (i === 0 ? "" : "." + i); - const dest = this._filename + "." + (i + 1); + const source = this[filenameSymbol] + (i === 0 ? "" : "." + i); + const dest = this[filenameSymbol] + "." + (i + 1); if (existsSync(source)) { Deno.renameSync(source, dest); } } - this._file = Deno.openSync(this._filename, this._openOptions); + this[fileSymbol] = Deno.openSync( + this[filenameSymbol], + this[openOptionsSymbol], + ); } } diff --git a/src/vendor/deno.land/std@0.217.0/log/setup.ts b/src/vendor/jsr.io/@std/log/0.224.7/setup.ts similarity index 80% rename from src/vendor/deno.land/std@0.217.0/log/setup.ts rename to src/vendor/jsr.io/@std/log/0.224.7/setup.ts index 94d42972afe..b4e175f8dd0 100644 --- a/src/vendor/deno.land/std@0.217.0/log/setup.ts +++ b/src/vendor/jsr.io/@std/log/0.224.7/setup.ts @@ -1,6 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. -import { BaseHandler } from "./base_handler.ts"; +import type { BaseHandler } from "./base_handler.ts"; import { DEFAULT_CONFIG, DEFAULT_LEVEL } from "./_config.ts"; import { type LogConfig, Logger } from "./logger.ts"; import { state } from "./_state.ts"; @@ -19,7 +20,7 @@ export function setup(config: LogConfig) { state.handlers.clear(); // setup handlers - const handlers = state.config.handlers || {}; + const handlers = state.config.handlers ?? {}; for (const [handlerName, handler] of Object.entries(handlers)) { handler.setup(); @@ -30,9 +31,9 @@ export function setup(config: LogConfig) { state.loggers.clear(); // setup loggers - const loggers = state.config.loggers || {}; + const loggers = state.config.loggers ?? {}; for (const [loggerName, loggerConfig] of Object.entries(loggers)) { - const handlerNames = loggerConfig.handlers || []; + const handlerNames = loggerConfig.handlers ?? []; const handlers: BaseHandler[] = []; handlerNames.forEach((handlerName) => { @@ -42,7 +43,7 @@ export function setup(config: LogConfig) { } }); - const levelName = loggerConfig.level || DEFAULT_LEVEL; + const levelName = loggerConfig.level ?? DEFAULT_LEVEL; const logger = new Logger(loggerName, levelName, { handlers: handlers }); state.loggers.set(loggerName, logger); } diff --git a/src/vendor/deno.land/std@0.217.0/log/warn.ts b/src/vendor/jsr.io/@std/log/0.224.7/warn.ts similarity index 88% rename from src/vendor/deno.land/std@0.217.0/log/warn.ts rename to src/vendor/jsr.io/@std/log/0.224.7/warn.ts index 01c65cf4b8a..5dc50407684 100644 --- a/src/vendor/deno.land/std@0.217.0/log/warn.ts +++ b/src/vendor/jsr.io/@std/log/0.224.7/warn.ts @@ -1,7 +1,8 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { getLogger } from "./get_logger.ts"; -import { type GenericFunction } from "./logger.ts"; +import type { GenericFunction } from "./logger.ts"; /** Log with warning level, using default logger. */ export function warn(msg: () => T, ...args: unknown[]): T | undefined; diff --git a/src/vendor/deno.land/std@0.217.0/media_types/_db.ts b/src/vendor/jsr.io/@std/media-types/0.224.1/_db.ts similarity index 85% rename from src/vendor/deno.land/std@0.217.0/media_types/_db.ts rename to src/vendor/jsr.io/@std/media-types/0.224.1/_db.ts index 45d4c653784..9959993582e 100644 --- a/src/vendor/deno.land/std@0.217.0/media_types/_db.ts +++ b/src/vendor/jsr.io/@std/media-types/0.224.1/_db.ts @@ -1,6 +1,6 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. import db from "./vendor/mime-db.v1.52.0.ts"; -import { type DBEntry } from "./_util.ts"; +import type { DBEntry } from "./_util.ts"; export type KeyOfDb = keyof typeof db; @@ -21,7 +21,7 @@ for (const type of Object.keys(db) as KeyOfDb[]) { continue; } - // @ts-ignore work around denoland/dnt#148 + // @ts-ignore Work around https://github.com/denoland/dnt/issues/148 extensions.set(type, exts); for (const ext of exts) { @@ -33,7 +33,7 @@ for (const type of Object.keys(db) as KeyOfDb[]) { if ( current !== "application/octet-stream" && (from > to || - // @ts-ignore work around denoland/dnt#148 + // @ts-ignore work around https://github.com/denoland/dnt/issues/148 (from === to && current.startsWith("application/"))) ) { continue; diff --git a/src/vendor/deno.land/std@0.217.0/media_types/_util.ts b/src/vendor/jsr.io/@std/media-types/0.224.1/_util.ts similarity index 95% rename from src/vendor/deno.land/std@0.217.0/media_types/_util.ts rename to src/vendor/jsr.io/@std/media-types/0.224.1/_util.ts index 50d3282991b..d53e1c3ed6d 100644 --- a/src/vendor/deno.land/std@0.217.0/media_types/_util.ts +++ b/src/vendor/jsr.io/@std/media-types/0.224.1/_util.ts @@ -1,11 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -/** Supporting functions for media_types that do not make part of the public - * API. - * - * @module - * @private - */ export interface DBEntry { source: string; compressible?: boolean; @@ -131,7 +125,7 @@ function isTokenChar(r: string): boolean { return code > 0x20 && code < 0x7f && !isTSpecial(r); } -function isTSpecial(r: string): boolean { +export function isTSpecial(r: string): boolean { return r[0] ? `()<>@,;:\\"/[]?=`.includes(r[0]) : false; } diff --git a/src/vendor/jsr.io/@std/media-types/0.224.1/content_type.ts b/src/vendor/jsr.io/@std/media-types/0.224.1/content_type.ts new file mode 100644 index 00000000000..290b4d9fa85 --- /dev/null +++ b/src/vendor/jsr.io/@std/media-types/0.224.1/content_type.ts @@ -0,0 +1,91 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { parseMediaType } from "./parse_media_type.ts"; +import { getCharset } from "./get_charset.ts"; +import { formatMediaType } from "./format_media_type.ts"; +import type { db } from "./_db.ts"; +import { typeByExtension } from "./type_by_extension.ts"; + +/** MIME-types database. */ +export type DB = typeof db; +/** Maps content types to their corresponding file extensions. */ +export type ContentTypeToExtension = { + /** + * Maps each content type key to its corresponding file extension. + */ + [K in keyof DB]: DB[K] extends { "extensions": readonly string[] } + ? DB[K]["extensions"][number] + : never; +}; + +/** Known extension or type. Used in {@linkcode contentType}. */ +export type KnownExtensionOrType = + | keyof ContentTypeToExtension + | ContentTypeToExtension[keyof ContentTypeToExtension] + | `.${ContentTypeToExtension[keyof ContentTypeToExtension]}`; + +/** + * Returns the full `Content-Type` or `Content-Disposition` header value for the + * given extension or media type. + * + * The function will treat the `extensionOrType` as a media type when it + * contains a `/`, otherwise it will process it as an extension, with or without + * the leading `.`. + * + * Returns `undefined` if unable to resolve the media type. + * + * > Note: a side effect of `deno/x/media_types` was that you could pass a file + * > name (e.g. `file.json`) and it would return the content type. This behavior + * > is intentionally not supported here. If you want to get an extension for a + * > file name, use {@linkcode https://jsr.io/@std/path/doc/~/extname | extname} + * > to determine the extension and pass it here. + * + * @template T Type of the extension or media type to resolve. + * + * @param extensionOrType The extension or media type to resolve. + * + * @returns The full `Content-Type` or `Content-Disposition` header value, or + * `undefined` if unable to resolve the media type. + * + * @example Usage + * ```ts + * import { contentType } from "@std/media-types/content-type"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(contentType(".json"), "application/json; charset=UTF-8"); + * assertEquals(contentType("text/html"), "text/html; charset=UTF-8"); + * assertEquals(contentType("text/html; charset=UTF-8"), "text/html; charset=UTF-8"); + * assertEquals(contentType("txt"), "text/plain; charset=UTF-8"); + * assertEquals(contentType("foo"), undefined); + * assertEquals(contentType("file.json"), undefined); + * ``` + */ +export function contentType< + // Workaround to autocomplete for parameters: https://github.com/microsoft/TypeScript/issues/29729#issuecomment-567871939 + // deno-lint-ignore ban-types + T extends (string & {}) | KnownExtensionOrType, +>( + extensionOrType: T, +): Lowercase extends KnownExtensionOrType ? string : string | undefined { + try { + const [mediaType, params = {}] = extensionOrType.includes("/") + ? parseMediaType(extensionOrType) + : [typeByExtension(extensionOrType), undefined]; + if (!mediaType) { + return undefined as Lowercase extends KnownExtensionOrType ? string + : string | undefined; + } + if (!("charset" in params)) { + const charset = getCharset(mediaType); + if (charset) { + params.charset = charset; + } + } + return formatMediaType(mediaType, params); + } catch { + // just swallow returning undefined + } + return undefined as Lowercase extends KnownExtensionOrType ? string + : string | undefined; +} diff --git a/src/vendor/jsr.io/@std/media-types/0.224.1/extension.ts b/src/vendor/jsr.io/@std/media-types/0.224.1/extension.ts new file mode 100644 index 00000000000..d1a98019cfa --- /dev/null +++ b/src/vendor/jsr.io/@std/media-types/0.224.1/extension.ts @@ -0,0 +1,30 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { extensionsByType } from "./extensions_by_type.ts"; + +/** + * Returns the most relevant extension for the given media type, or `undefined` + * if no extension can be found. + * + * Extensions are returned without a leading `.`. + * + * @param type The media type to get the extension for. + * + * @returns The extension for the given media type, or `undefined` if no + * extension is found. + * + * @example Usage + * ```ts + * import { extension } from "@std/media-types/extension"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(extension("text/plain"), "txt"); + * assertEquals(extension("application/json"), "json"); + * assertEquals(extension("text/html; charset=UTF-8"), "html"); + * assertEquals(extension("application/foo"), undefined); + * ``` + */ +export function extension(type: string): string | undefined { + return extensionsByType(type)?.[0]; +} diff --git a/src/vendor/deno.land/std@0.217.0/media_types/extensions_by_type.ts b/src/vendor/jsr.io/@std/media-types/0.224.1/extensions_by_type.ts similarity index 51% rename from src/vendor/deno.land/std@0.217.0/media_types/extensions_by_type.ts rename to src/vendor/jsr.io/@std/media-types/0.224.1/extensions_by_type.ts index 5937017ccfd..e97266b8eea 100644 --- a/src/vendor/deno.land/std@0.217.0/media_types/extensions_by_type.ts +++ b/src/vendor/jsr.io/@std/media-types/0.224.1/extensions_by_type.ts @@ -7,18 +7,24 @@ import { extensions } from "./_db.ts"; export { extensions }; /** - * Returns the extensions known to be associated with the media type `type`. - * When `type` has no associated extensions, the function returns `undefined`. + * Returns the extensions known to be associated with the media type `type`, or + * `undefined` if no extensions are found. * * Extensions are returned without a leading `.`. * + * @param type The media type to get the extensions for. + * + * @returns The extensions for the given media type, or `undefined` if no + * extensions are found. + * * @example * ```ts - * import { extensionsByType } from "https://deno.land/std@$STD_VERSION/media_types/extensions_by_type.ts"; + * import { extensionsByType } from "@std/media-types/extensions-by-type"; + * import { assertEquals } from "@std/assert/assert-equals"; * - * extensionsByType("application/json"); // ["json", "map"] - * extensionsByType("text/html; charset=UTF-8"); // ["html", "htm", "shtml"] - * extensionsByType("application/foo"); // undefined + * assertEquals(extensionsByType("application/json"), ["json", "map"]); + * assertEquals(extensionsByType("text/html; charset=UTF-8"), ["html", "htm", "shtml"]); + * assertEquals(extensionsByType("application/foo"), undefined); * ``` */ export function extensionsByType(type: string): string[] | undefined { diff --git a/src/vendor/jsr.io/@std/media-types/0.224.1/format_media_type.ts b/src/vendor/jsr.io/@std/media-types/0.224.1/format_media_type.ts new file mode 100644 index 00000000000..5e9fa0a4976 --- /dev/null +++ b/src/vendor/jsr.io/@std/media-types/0.224.1/format_media_type.ts @@ -0,0 +1,86 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isIterator, isToken, needsEncoding } from "./_util.ts"; + +/** + * Serializes the media type and the optional parameters as a media type + * conforming to {@link https://www.ietf.org/rfc/rfc2045.txt | RFC 2045} and + * {@link https://www.ietf.org/rfc/rfc2616.txt | RFC 2616}. + * + * The type and parameter names are written in lower-case. + * + * When any of the arguments results in a standard violation then the return + * value will be an empty string (`""`). + * + * @param type The media type to serialize. + * @param param Optional parameters to serialize. + * + * @returns The serialized media type. + * + * @example Basic usage + * ```ts + * import { formatMediaType } from "@std/media-types/format-media-type"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(formatMediaType("text/plain"), "text/plain"); + * ``` + * + * @example With parameters + * ```ts + * import { formatMediaType } from "@std/media-types/format-media-type"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(formatMediaType("text/plain", { charset: "UTF-8" }), "text/plain; charset=UTF-8"); + * ``` + */ +export function formatMediaType( + type: string, + param?: Record | Iterable<[string, string]>, +): string { + let serializedMediaType = ""; + const [major = "", sub] = type.split("/"); + if (!sub) { + if (!isToken(type)) { + return ""; + } + serializedMediaType += type.toLowerCase(); + } else { + if (!isToken(major) || !isToken(sub)) { + return ""; + } + serializedMediaType += `${major.toLowerCase()}/${sub.toLowerCase()}`; + } + + if (param) { + param = isIterator(param) ? Object.fromEntries(param) : param; + const attrs = Object.keys(param); + attrs.sort(); + + for (const attribute of attrs) { + if (!isToken(attribute)) { + return ""; + } + const value = param[attribute]!; + serializedMediaType += `; ${attribute.toLowerCase()}`; + + const needEnc = needsEncoding(value); + if (needEnc) { + serializedMediaType += "*"; + } + serializedMediaType += "="; + + if (needEnc) { + serializedMediaType += `utf-8''${encodeURIComponent(value)}`; + continue; + } + + if (isToken(value)) { + serializedMediaType += value; + continue; + } + serializedMediaType += `"${value.replace(/["\\]/gi, (m) => `\\${m}`)}"`; + } + } + return serializedMediaType; +} diff --git a/src/vendor/jsr.io/@std/media-types/0.224.1/get_charset.ts b/src/vendor/jsr.io/@std/media-types/0.224.1/get_charset.ts new file mode 100644 index 00000000000..0bfdd7e41aa --- /dev/null +++ b/src/vendor/jsr.io/@std/media-types/0.224.1/get_charset.ts @@ -0,0 +1,45 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { parseMediaType } from "./parse_media_type.ts"; +import type { DBEntry } from "./_util.ts"; +import { db, type KeyOfDb } from "./_db.ts"; + +/** + * Given a media type or header value, identify the encoding charset. If the + * charset cannot be determined, the function returns `undefined`. + * + * @param type The media type or header value to get the charset for. + * + * @returns The charset for the given media type or header value, or `undefined` + * if the charset cannot be determined. + * + * @example Usage + * ```ts + * import { getCharset } from "@std/media-types/get-charset"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(getCharset("text/plain"), "UTF-8"); + * assertEquals(getCharset("application/foo"), undefined); + * assertEquals(getCharset("application/news-checkgroups"), "US-ASCII"); + * assertEquals(getCharset("application/news-checkgroups; charset=UTF-8"), "UTF-8"); + * ``` + */ +export function getCharset(type: string): string | undefined { + try { + const [mediaType, params] = parseMediaType(type); + if (params?.charset) { + return params.charset; + } + const entry = db[mediaType as KeyOfDb] as DBEntry; + if (entry?.charset) { + return entry.charset; + } + if (mediaType.startsWith("text/")) { + return "UTF-8"; + } + } catch { + // just swallow errors, returning undefined + } + return undefined; +} diff --git a/src/vendor/deno.land/std@0.217.0/media_types/mod.ts b/src/vendor/jsr.io/@std/media-types/0.224.1/mod.ts similarity index 50% rename from src/vendor/deno.land/std@0.217.0/media_types/mod.ts rename to src/vendor/jsr.io/@std/media-types/0.224.1/mod.ts index f6d509f81ed..32672de9a0e 100644 --- a/src/vendor/deno.land/std@0.217.0/media_types/mod.ts +++ b/src/vendor/jsr.io/@std/media-types/0.224.1/mod.ts @@ -1,16 +1,28 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -/** Utility functions for media types (MIME types). +/** + * Utility functions for media types (MIME types). * - * This API is inspired by the GoLang {@linkcode https://pkg.go.dev/mime | mime} package - * and {@link https://github.com/jshttp/mime-types | jshttp/mime-types}, and is - * designed to integrate and improve the APIs from + * This API is inspired by the GoLang {@linkcode https://pkg.go.dev/mime | mime} + * package and {@link https://github.com/jshttp/mime-types | jshttp/mime-types}, + * and is designed to integrate and improve the APIs from * {@link https://deno.land/x/media_types | x/media_types}. * * The `vendor` folder contains copy of the - * {@link https://github.com/jshttp/mime-types | jshttp/mime-db} `db.json` file along - * with its license. + * {@link https://github.com/jshttp/mime-types | jshttp/mime-db} `db.json` file, + * along with its license. + * + * ```ts + * import { contentType, extensionsByType, getCharset } from "@std/media-types"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(extensionsByType("application/json"), ["json", "map"]); + * + * assertEquals(contentType(".json"), "application/json; charset=UTF-8"); + * + * assertEquals(getCharset("text/plain"), "UTF-8"); + * ``` * * @module */ diff --git a/src/vendor/deno.land/std@0.217.0/media_types/parse_media_type.ts b/src/vendor/jsr.io/@std/media-types/0.224.1/parse_media_type.ts similarity index 60% rename from src/vendor/deno.land/std@0.217.0/media_types/parse_media_type.ts rename to src/vendor/jsr.io/@std/media-types/0.224.1/parse_media_type.ts index c99ebc02c70..6bd97e13965 100644 --- a/src/vendor/deno.land/std@0.217.0/media_types/parse_media_type.ts +++ b/src/vendor/jsr.io/@std/media-types/0.224.1/parse_media_type.ts @@ -5,11 +5,12 @@ import { consumeMediaParam, decode2331Encoding } from "./_util.ts"; /** * Parses the media type and any optional parameters, per - * {@link https://datatracker.ietf.org/doc/html/rfc1521 | RFC 1521}. Media - * types are the values in `Content-Type` and `Content-Disposition` headers. On - * success the function returns a tuple where the first element is the media - * type and the second element is the optional parameters or `undefined` if - * there are none. + * {@link https://datatracker.ietf.org/doc/html/rfc1521 | RFC 1521}. + * + * Media types are the values in `Content-Type` and `Content-Disposition` + * headers. On success the function returns a tuple where the first element is + * the media type and the second element is the optional parameters or + * `undefined` if there are none. * * The function will throw if the parsed value is invalid. * @@ -17,18 +18,24 @@ import { consumeMediaParam, decode2331Encoding } from "./_util.ts"; * params keys will be normalized to lower case, but preserves the casing of * the value. * - * @example + * @param type The media type to parse. + * + * @returns A tuple where the first element is the media type and the second + * element is the optional parameters or `undefined` if there are none. + * + * @example Usage * ```ts - * import { parseMediaType } from "https://deno.land/std@$STD_VERSION/media_types/parse_media_type.ts"; + * import { parseMediaType } from "@std/media-types/parse-media-type"; + * import { assertEquals } from "@std/assert/assert-equals"; * - * parseMediaType("application/JSON"); // ["application/json", undefined] - * parseMediaType("text/html; charset=UTF-8"); // ["text/html", { charset: "UTF-8" }] + * assertEquals(parseMediaType("application/JSON"), ["application/json", undefined]); + * assertEquals(parseMediaType("text/html; charset=UTF-8"), ["text/html", { charset: "UTF-8" }]); * ``` */ export function parseMediaType( - v: string, + type: string, ): [mediaType: string, params: Record | undefined] { - const [base] = v.split(";") as [string]; + const [base] = type.split(";") as [string]; const mediaType = base.toLowerCase().trim(); const params: Record = {}; @@ -36,13 +43,13 @@ export function parseMediaType( // for parameters containing a '*' character. const continuation = new Map>(); - v = v.slice(base.length); - while (v.length) { - v = v.trimStart(); - if (v.length === 0) { + type = type.slice(base.length); + while (type.length) { + type = type.trimStart(); + if (type.length === 0) { break; } - const [key, value, rest] = consumeMediaParam(v); + const [key, value, rest] = consumeMediaParam(type); if (!key) { if (rest.trim() === ";") { // ignore trailing semicolons @@ -63,7 +70,7 @@ export function parseMediaType( throw new TypeError("Duplicate key parsed."); } pmap[key] = value; - v = rest; + type = rest; } // Stitch together any continuations or things with stars @@ -71,9 +78,9 @@ export function parseMediaType( let str = ""; for (const [key, pieceMap] of continuation) { const singlePartKey = `${key}*`; - const v = pieceMap[singlePartKey]; - if (v) { - const decv = decode2331Encoding(v); + const type = pieceMap[singlePartKey]; + if (type) { + const decv = decode2331Encoding(type); if (decv) { params[key] = decv; } @@ -84,25 +91,25 @@ export function parseMediaType( let valid = false; for (let n = 0;; n++) { const simplePart = `${key}*${n}`; - let v = pieceMap[simplePart]; - if (v) { + let type = pieceMap[simplePart]; + if (type) { valid = true; - str += v; + str += type; continue; } const encodedPart = `${simplePart}*`; - v = pieceMap[encodedPart]; - if (!v) { + type = pieceMap[encodedPart]; + if (!type) { break; } valid = true; if (n === 0) { - const decv = decode2331Encoding(v); + const decv = decode2331Encoding(type); if (decv) { str += decv; } } else { - const decv = decodeURI(v); + const decv = decodeURI(type); str += decv; } } @@ -111,7 +118,5 @@ export function parseMediaType( } } - return Object.keys(params).length - ? [mediaType, params] - : [mediaType, undefined]; + return [mediaType, Object.keys(params).length ? params : undefined]; } diff --git a/src/vendor/jsr.io/@std/media-types/0.224.1/type_by_extension.ts b/src/vendor/jsr.io/@std/media-types/0.224.1/type_by_extension.ts new file mode 100644 index 00000000000..b91381f46dc --- /dev/null +++ b/src/vendor/jsr.io/@std/media-types/0.224.1/type_by_extension.ts @@ -0,0 +1,33 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { types } from "./_db.ts"; + +/** + * Returns the media type associated with the file extension, or `undefined` if + * no media type is found. + * + * Values are normalized to lower case and matched irrespective of a leading + * `.`. + * + * @param extension The file extension to get the media type for. + * + * @returns The media type associated with the file extension, or `undefined` if + * no media type is found. + * + * @example Usage + * ```ts + * import { typeByExtension } from "@std/media-types/type-by-extension"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(typeByExtension("js"), "application/javascript"); + * assertEquals(typeByExtension(".HTML"), "text/html"); + * assertEquals(typeByExtension("foo"), undefined); + * assertEquals(typeByExtension("file.json"), undefined); + * ``` + */ +export function typeByExtension(extension: string): string | undefined { + extension = extension.startsWith(".") ? extension.slice(1) : extension; + // @ts-ignore Work around https://github.com/denoland/dnt/issues/148 + return types.get(extension.toLowerCase()); +} diff --git a/src/vendor/deno.land/std@0.217.0/media_types/vendor/mime-db.v1.52.0.ts b/src/vendor/jsr.io/@std/media-types/0.224.1/vendor/mime-db.v1.52.0.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/media_types/vendor/mime-db.v1.52.0.ts rename to src/vendor/jsr.io/@std/media-types/0.224.1/vendor/mime-db.v1.52.0.ts diff --git a/src/vendor/jsr.io/@std/media-types/1.0.3/_db.ts b/src/vendor/jsr.io/@std/media-types/1.0.3/_db.ts new file mode 100644 index 00000000000..88f0378b134 --- /dev/null +++ b/src/vendor/jsr.io/@std/media-types/1.0.3/_db.ts @@ -0,0 +1,48 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +import db from "./vendor/db.ts"; +import type { DBEntry } from "./_util.ts"; + +export type KeyOfDb = keyof typeof db; + +/** A map of the media type for a given extension */ +export const types = new Map(); + +/** A map of extensions for a given media type. */ +const extensions: Map = new Map(); + +/** Internal function to populate the maps based on the Mime DB. */ +const preference = ["nginx", "apache", undefined, "iana"]; + +for (const type of Object.keys(db) as KeyOfDb[]) { + const mime = db[type] as DBEntry; + const exts = mime.extensions; + + if (!exts || !exts.length) { + continue; + } + + // @ts-ignore Work around https://github.com/denoland/dnt/issues/148 + extensions.set(type, exts); + + for (const ext of exts) { + const current = types.get(ext); + if (current) { + const from = preference.indexOf((db[current] as DBEntry).source); + const to = preference.indexOf(mime.source); + + if ( + current !== "application/octet-stream" && + current !== "application/mp4" && + (from > to || + // @ts-ignore work around https://github.com/denoland/dnt/issues/148 + (from === to && current.startsWith("application/"))) + ) { + continue; + } + } + + types.set(ext, type); + } +} + +export { db, extensions }; diff --git a/src/vendor/jsr.io/@std/media-types/1.0.3/_util.ts b/src/vendor/jsr.io/@std/media-types/1.0.3/_util.ts new file mode 100644 index 00000000000..d53e1c3ed6d --- /dev/null +++ b/src/vendor/jsr.io/@std/media-types/1.0.3/_util.ts @@ -0,0 +1,145 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +export interface DBEntry { + source: string; + compressible?: boolean; + charset?: string; + extensions?: string[]; +} + +export function consumeToken(v: string): [token: string, rest: string] { + const notPos = indexOf(v, isNotTokenChar); + if (notPos === -1) { + return [v, ""]; + } + if (notPos === 0) { + return ["", v]; + } + return [v.slice(0, notPos), v.slice(notPos)]; +} + +export function consumeValue(v: string): [value: string, rest: string] { + if (!v) { + return ["", v]; + } + if (v[0] !== `"`) { + return consumeToken(v); + } + let value = ""; + for (let i = 1; i < v.length; i++) { + const r = v[i]; + if (r === `"`) { + return [value, v.slice(i + 1)]; + } + const next = v[i + 1]; + if (r === "\\" && typeof next === "string" && isTSpecial(next)) { + value += next; + i++; + continue; + } + if (r === "\r" || r === "\n") { + return ["", v]; + } + value += v[i]; + } + return ["", v]; +} + +export function consumeMediaParam( + v: string, +): [key: string, value: string, rest: string] { + let rest = v.trimStart(); + if (!rest.startsWith(";")) { + return ["", "", v]; + } + rest = rest.slice(1); + rest = rest.trimStart(); + let param: string; + [param, rest] = consumeToken(rest); + param = param.toLowerCase(); + if (!param) { + return ["", "", v]; + } + rest = rest.slice(1); + rest = rest.trimStart(); + const [value, rest2] = consumeValue(rest); + if (value === "" && rest2 === rest) { + return ["", "", v]; + } + rest = rest2; + return [param, value, rest]; +} + +export function decode2331Encoding(v: string): string | undefined { + const sv = v.split(`'`, 3); + if (sv.length !== 3) { + return undefined; + } + const [sv0, , sv2] = sv as [string, string, string]; + const charset = sv0.toLowerCase(); + if (!charset) { + return undefined; + } + if (charset !== "us-ascii" && charset !== "utf-8") { + return undefined; + } + const encv = decodeURI(sv2); + if (!encv) { + return undefined; + } + return encv; +} + +function indexOf(s: Iterable, fn: (s: T) => boolean): number { + let i = -1; + for (const v of s) { + i++; + if (fn(v)) { + return i; + } + } + return -1; +} + +export function isIterator(obj: unknown): obj is Iterable { + if (obj === null || obj === undefined) { + return false; + } + // deno-lint-ignore no-explicit-any + return typeof (obj as any)[Symbol.iterator] === "function"; +} + +export function isToken(s: string): boolean { + if (!s) { + return false; + } + return indexOf(s, isNotTokenChar) < 0; +} + +function isNotTokenChar(r: string): boolean { + return !isTokenChar(r); +} + +function isTokenChar(r: string): boolean { + const code = r.charCodeAt(0); + return code > 0x20 && code < 0x7f && !isTSpecial(r); +} + +export function isTSpecial(r: string): boolean { + return r[0] ? `()<>@,;:\\"/[]?=`.includes(r[0]) : false; +} + +const CHAR_CODE_SPACE = " ".charCodeAt(0); +const CHAR_CODE_TILDE = "~".charCodeAt(0); + +export function needsEncoding(s: string): boolean { + for (const b of s) { + const charCode = b.charCodeAt(0); + if ( + (charCode < CHAR_CODE_SPACE || charCode > CHAR_CODE_TILDE) && b !== "\t" + ) { + return true; + } + } + return false; +} diff --git a/src/vendor/deno.land/std@0.217.0/media_types/content_type.ts b/src/vendor/jsr.io/@std/media-types/1.0.3/content_type.ts similarity index 71% rename from src/vendor/deno.land/std@0.217.0/media_types/content_type.ts rename to src/vendor/jsr.io/@std/media-types/1.0.3/content_type.ts index 1dfd5bab6c6..65be07ca98c 100644 --- a/src/vendor/deno.land/std@0.217.0/media_types/content_type.ts +++ b/src/vendor/jsr.io/@std/media-types/1.0.3/content_type.ts @@ -26,8 +26,8 @@ export type KnownExtensionOrType = | `.${ContentTypeToExtension[keyof ContentTypeToExtension]}`; /** - * Given an extension or media type, return a full `Content-Type` or - * `Content-Disposition` header value. + * Returns the full `Content-Type` or `Content-Disposition` header value for the + * given extension or media type. * * The function will treat the `extensionOrType` as a media type when it * contains a `/`, otherwise it will process it as an extension, with or without @@ -35,22 +35,24 @@ export type KnownExtensionOrType = * * Returns `undefined` if unable to resolve the media type. * - * > Note: a side effect of `deno/x/media_types` was that you could pass a file - * > name (e.g. `file.json`) and it would return the content type. This behavior - * > is intentionally not supported here. If you want to get an extension for a - * > file name, use `extname()` from `std/path/mod.ts` to determine the - * > extension and pass it here. + * @typeParam T Type of the extension or media type to resolve. * - * @example + * @param extensionOrType The extension or media type to resolve. + * + * @returns The full `Content-Type` or `Content-Disposition` header value, or + * `undefined` if unable to resolve the media type. + * + * @example Usage * ```ts - * import { contentType } from "https://deno.land/std@$STD_VERSION/media_types/content_type.ts"; + * import { contentType } from "@std/media-types/content-type"; + * import { assertEquals } from "@std/assert"; * - * contentType(".json"); // "application/json; charset=UTF-8" - * contentType("text/html"); // "text/html; charset=UTF-8" - * contentType("text/html; charset=UTF-8"); // "text/html; charset=UTF-8" - * contentType("txt"); // "text/plain; charset=UTF-8" - * contentType("foo"); // undefined - * contentType("file.json"); // undefined + * assertEquals(contentType(".json"), "application/json; charset=UTF-8"); + * assertEquals(contentType("text/html"), "text/html; charset=UTF-8"); + * assertEquals(contentType("text/html; charset=UTF-8"), "text/html; charset=UTF-8"); + * assertEquals(contentType("txt"), "text/plain; charset=UTF-8"); + * assertEquals(contentType("foo"), undefined); + * assertEquals(contentType("file.json"), undefined); * ``` */ export function contentType< diff --git a/src/vendor/jsr.io/@std/media-types/1.0.3/format_media_type.ts b/src/vendor/jsr.io/@std/media-types/1.0.3/format_media_type.ts new file mode 100644 index 00000000000..8167e7255bf --- /dev/null +++ b/src/vendor/jsr.io/@std/media-types/1.0.3/format_media_type.ts @@ -0,0 +1,86 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isIterator, isToken, needsEncoding } from "./_util.ts"; + +/** + * Serializes the media type and the optional parameters as a media type + * conforming to {@link https://www.rfc-editor.org/rfc/rfc2045.html | RFC 2045} and + * {@link https://www.rfc-editor.org/rfc/rfc2616.html | RFC 2616}. + * + * The type and parameter names are written in lower-case. + * + * When any of the arguments results in a standard violation then the return + * value will be an empty string (`""`). + * + * @param type The media type to serialize. + * @param param Optional parameters to serialize. + * + * @returns The serialized media type. + * + * @example Basic usage + * ```ts + * import { formatMediaType } from "@std/media-types/format-media-type"; + * import { assertEquals } from "@std/assert"; + * + * assertEquals(formatMediaType("text/plain"), "text/plain"); + * ``` + * + * @example With parameters + * ```ts + * import { formatMediaType } from "@std/media-types/format-media-type"; + * import { assertEquals } from "@std/assert"; + * + * assertEquals(formatMediaType("text/plain", { charset: "UTF-8" }), "text/plain; charset=UTF-8"); + * ``` + */ +export function formatMediaType( + type: string, + param?: Record | Iterable<[string, string]>, +): string { + let serializedMediaType = ""; + const [major = "", sub] = type.split("/"); + if (!sub) { + if (!isToken(type)) { + return ""; + } + serializedMediaType += type.toLowerCase(); + } else { + if (!isToken(major) || !isToken(sub)) { + return ""; + } + serializedMediaType += `${major.toLowerCase()}/${sub.toLowerCase()}`; + } + + if (param) { + param = isIterator(param) ? Object.fromEntries(param) : param; + const attrs = Object.keys(param); + attrs.sort(); + + for (const attribute of attrs) { + if (!isToken(attribute)) { + return ""; + } + const value = param[attribute]!; + serializedMediaType += `; ${attribute.toLowerCase()}`; + + const needEnc = needsEncoding(value); + if (needEnc) { + serializedMediaType += "*"; + } + serializedMediaType += "="; + + if (needEnc) { + serializedMediaType += `utf-8''${encodeURIComponent(value)}`; + continue; + } + + if (isToken(value)) { + serializedMediaType += value; + continue; + } + serializedMediaType += `"${value.replace(/["\\]/gi, (m) => `\\${m}`)}"`; + } + } + return serializedMediaType; +} diff --git a/src/vendor/deno.land/std@0.217.0/media_types/get_charset.ts b/src/vendor/jsr.io/@std/media-types/1.0.3/get_charset.ts similarity index 51% rename from src/vendor/deno.land/std@0.217.0/media_types/get_charset.ts rename to src/vendor/jsr.io/@std/media-types/1.0.3/get_charset.ts index b68c72764a7..4fd6e3ecccc 100644 --- a/src/vendor/deno.land/std@0.217.0/media_types/get_charset.ts +++ b/src/vendor/jsr.io/@std/media-types/1.0.3/get_charset.ts @@ -2,31 +2,37 @@ // This module is browser compatible. import { parseMediaType } from "./parse_media_type.ts"; -import { type DBEntry } from "./_util.ts"; +import type { DBEntry } from "./_util.ts"; import { db, type KeyOfDb } from "./_db.ts"; /** * Given a media type or header value, identify the encoding charset. If the * charset cannot be determined, the function returns `undefined`. * - * @example + * @param type The media type or header value to get the charset for. + * + * @returns The charset for the given media type or header value, or `undefined` + * if the charset cannot be determined. + * + * @example Usage * ```ts - * import { getCharset } from "https://deno.land/std@$STD_VERSION/media_types/get_charset.ts"; + * import { getCharset } from "@std/media-types/get-charset"; + * import { assertEquals } from "@std/assert"; * - * getCharset("text/plain"); // "UTF-8" - * getCharset("application/foo"); // undefined - * getCharset("application/news-checkgroups"); // "US-ASCII" - * getCharset("application/news-checkgroups; charset=UTF-8"); // "UTF-8" + * assertEquals(getCharset("text/plain"), "UTF-8"); + * assertEquals(getCharset("application/foo"), undefined); + * assertEquals(getCharset("application/news-checkgroups"), "US-ASCII"); + * assertEquals(getCharset("application/news-checkgroups; charset=UTF-8"), "UTF-8"); * ``` */ export function getCharset(type: string): string | undefined { try { const [mediaType, params] = parseMediaType(type); - if (params && params["charset"]) { - return params["charset"]; + if (params?.charset) { + return params.charset; } const entry = db[mediaType as KeyOfDb] as DBEntry; - if (entry && entry.charset) { + if (entry?.charset) { return entry.charset; } if (mediaType.startsWith("text/")) { diff --git a/src/vendor/jsr.io/@std/media-types/1.0.3/parse_media_type.ts b/src/vendor/jsr.io/@std/media-types/1.0.3/parse_media_type.ts new file mode 100644 index 00000000000..0a205ab9251 --- /dev/null +++ b/src/vendor/jsr.io/@std/media-types/1.0.3/parse_media_type.ts @@ -0,0 +1,125 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { consumeMediaParam, decode2331Encoding } from "./_util.ts"; + +const SEMICOLON_REGEXP = /^\s*;\s*$/; +/** + * Parses the media type and any optional parameters, per + * {@link https://www.rfc-editor.org/rfc/rfc1521.html | RFC 1521}. + * + * Media types are the values in `Content-Type` and `Content-Disposition` + * headers. On success the function returns a tuple where the first element is + * the media type and the second element is the optional parameters or + * `undefined` if there are none. + * + * The function will throw if the parsed value is invalid. + * + * The returned media type will be normalized to be lower case, and returned + * params keys will be normalized to lower case, but preserves the casing of + * the value. + * + * @param type The media type to parse. + * + * @returns A tuple where the first element is the media type and the second + * element is the optional parameters or `undefined` if there are none. + * + * @example Usage + * ```ts + * import { parseMediaType } from "@std/media-types/parse-media-type"; + * import { assertEquals } from "@std/assert"; + * + * assertEquals(parseMediaType("application/JSON"), ["application/json", undefined]); + * assertEquals(parseMediaType("text/html; charset=UTF-8"), ["text/html", { charset: "UTF-8" }]); + * ``` + */ +export function parseMediaType( + type: string, +): [mediaType: string, params: Record | undefined] { + const [base] = type.split(";") as [string]; + const mediaType = base.toLowerCase().trim(); + + const params: Record = {}; + // Map of base parameter name -> parameter name -> value + // for parameters containing a '*' character. + const continuation = new Map>(); + + type = type.slice(base.length); + while (type.length) { + type = type.trimStart(); + if (type.length === 0) { + break; + } + const [key, value, rest] = consumeMediaParam(type); + if (!key) { + if (SEMICOLON_REGEXP.test(rest)) { + // ignore trailing semicolons + break; + } + throw new TypeError( + `Cannot parse media type: invalid parameter "${type}"`, + ); + } + + let pmap = params; + const [baseName, rest2] = key.split("*"); + if (baseName && rest2 !== undefined) { + if (!continuation.has(baseName)) { + continuation.set(baseName, {}); + } + pmap = continuation.get(baseName)!; + } + if (key in pmap) { + throw new TypeError("Cannot parse media type: duplicate key"); + } + pmap[key] = value; + type = rest; + } + + // Stitch together any continuations or things with stars + // (i.e. RFC 2231 things with stars: "foo*0" or "foo*") + let str = ""; + for (const [key, pieceMap] of continuation) { + const singlePartKey = `${key}*`; + const type = pieceMap[singlePartKey]; + if (type) { + const decv = decode2331Encoding(type); + if (decv) { + params[key] = decv; + } + continue; + } + + str = ""; + let valid = false; + for (let n = 0;; n++) { + const simplePart = `${key}*${n}`; + let type = pieceMap[simplePart]; + if (type) { + valid = true; + str += type; + continue; + } + const encodedPart = `${simplePart}*`; + type = pieceMap[encodedPart]; + if (!type) { + break; + } + valid = true; + if (n === 0) { + const decv = decode2331Encoding(type); + if (decv) { + str += decv; + } + } else { + const decv = decodeURI(type); + str += decv; + } + } + if (valid) { + params[key] = str; + } + } + + return [mediaType, Object.keys(params).length ? params : undefined]; +} diff --git a/src/vendor/jsr.io/@std/media-types/1.0.3/type_by_extension.ts b/src/vendor/jsr.io/@std/media-types/1.0.3/type_by_extension.ts new file mode 100644 index 00000000000..0d53c5be7c9 --- /dev/null +++ b/src/vendor/jsr.io/@std/media-types/1.0.3/type_by_extension.ts @@ -0,0 +1,33 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { types } from "./_db.ts"; + +/** + * Returns the media type associated with the file extension, or `undefined` if + * no media type is found. + * + * Values are normalized to lower case and matched irrespective of a leading + * `.`. + * + * @param extension The file extension to get the media type for. + * + * @returns The media type associated with the file extension, or `undefined` if + * no media type is found. + * + * @example Usage + * ```ts + * import { typeByExtension } from "@std/media-types/type-by-extension"; + * import { assertEquals } from "@std/assert"; + * + * assertEquals(typeByExtension("js"), "text/javascript"); + * assertEquals(typeByExtension(".HTML"), "text/html"); + * assertEquals(typeByExtension("foo"), undefined); + * assertEquals(typeByExtension("file.json"), undefined); + * ``` + */ +export function typeByExtension(extension: string): string | undefined { + extension = extension.startsWith(".") ? extension.slice(1) : extension; + // @ts-ignore Work around https://github.com/denoland/dnt/issues/148 + return types.get(extension.toLowerCase()); +} diff --git a/src/vendor/jsr.io/@std/media-types/1.0.3/vendor/db.ts b/src/vendor/jsr.io/@std/media-types/1.0.3/vendor/db.ts new file mode 100644 index 00000000000..16671877185 --- /dev/null +++ b/src/vendor/jsr.io/@std/media-types/1.0.3/vendor/db.ts @@ -0,0 +1,8871 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +export default { + "application/1d-interleaved-parityfec": { + "source": "iana", + }, + "application/3gpdash-qoe-report+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/3gpp-ims+xml": { + "source": "iana", + "compressible": true, + }, + "application/3gpphal+json": { + "source": "iana", + "compressible": true, + }, + "application/3gpphalforms+json": { + "source": "iana", + "compressible": true, + }, + "application/a2l": { + "source": "iana", + }, + "application/ace+cbor": { + "source": "iana", + }, + "application/ace+json": { + "source": "iana", + "compressible": true, + }, + "application/activemessage": { + "source": "iana", + }, + "application/activity+json": { + "source": "iana", + "compressible": true, + }, + "application/aif+cbor": { + "source": "iana", + }, + "application/aif+json": { + "source": "iana", + "compressible": true, + }, + "application/alto-cdni+json": { + "source": "iana", + "compressible": true, + }, + "application/alto-cdnifilter+json": { + "source": "iana", + "compressible": true, + }, + "application/alto-costmap+json": { + "source": "iana", + "compressible": true, + }, + "application/alto-costmapfilter+json": { + "source": "iana", + "compressible": true, + }, + "application/alto-directory+json": { + "source": "iana", + "compressible": true, + }, + "application/alto-endpointcost+json": { + "source": "iana", + "compressible": true, + }, + "application/alto-endpointcostparams+json": { + "source": "iana", + "compressible": true, + }, + "application/alto-endpointprop+json": { + "source": "iana", + "compressible": true, + }, + "application/alto-endpointpropparams+json": { + "source": "iana", + "compressible": true, + }, + "application/alto-error+json": { + "source": "iana", + "compressible": true, + }, + "application/alto-networkmap+json": { + "source": "iana", + "compressible": true, + }, + "application/alto-networkmapfilter+json": { + "source": "iana", + "compressible": true, + }, + "application/alto-propmap+json": { + "source": "iana", + "compressible": true, + }, + "application/alto-propmapparams+json": { + "source": "iana", + "compressible": true, + }, + "application/alto-updatestreamcontrol+json": { + "source": "iana", + "compressible": true, + }, + "application/alto-updatestreamparams+json": { + "source": "iana", + "compressible": true, + }, + "application/aml": { + "source": "iana", + }, + "application/andrew-inset": { + "source": "iana", + "extensions": ["ez"], + }, + "application/appinstaller": { + "compressible": false, + "extensions": ["appinstaller"], + }, + "application/applefile": { + "source": "iana", + }, + "application/applixware": { + "source": "apache", + "extensions": ["aw"], + }, + "application/appx": { + "compressible": false, + "extensions": ["appx"], + }, + "application/appxbundle": { + "compressible": false, + "extensions": ["appxbundle"], + }, + "application/at+jwt": { + "source": "iana", + }, + "application/atf": { + "source": "iana", + }, + "application/atfx": { + "source": "iana", + }, + "application/atom+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atom"], + }, + "application/atomcat+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomcat"], + }, + "application/atomdeleted+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomdeleted"], + }, + "application/atomicmail": { + "source": "iana", + }, + "application/atomsvc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomsvc"], + }, + "application/atsc-dwd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dwd"], + }, + "application/atsc-dynamic-event-message": { + "source": "iana", + }, + "application/atsc-held+xml": { + "source": "iana", + "compressible": true, + "extensions": ["held"], + }, + "application/atsc-rdt+json": { + "source": "iana", + "compressible": true, + }, + "application/atsc-rsat+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rsat"], + }, + "application/atxml": { + "source": "iana", + }, + "application/auth-policy+xml": { + "source": "iana", + "compressible": true, + }, + "application/automationml-aml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["aml"], + }, + "application/automationml-amlx+zip": { + "source": "iana", + "compressible": false, + "extensions": ["amlx"], + }, + "application/bacnet-xdd+zip": { + "source": "iana", + "compressible": false, + }, + "application/batch-smtp": { + "source": "iana", + }, + "application/bdoc": { + "compressible": false, + "extensions": ["bdoc"], + }, + "application/beep+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/calendar+json": { + "source": "iana", + "compressible": true, + }, + "application/calendar+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xcs"], + }, + "application/call-completion": { + "source": "iana", + }, + "application/cals-1840": { + "source": "iana", + }, + "application/captive+json": { + "source": "iana", + "compressible": true, + }, + "application/cbor": { + "source": "iana", + }, + "application/cbor-seq": { + "source": "iana", + }, + "application/cccex": { + "source": "iana", + }, + "application/ccmp+xml": { + "source": "iana", + "compressible": true, + }, + "application/ccxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ccxml"], + }, + "application/cda+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/cdfx+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cdfx"], + }, + "application/cdmi-capability": { + "source": "iana", + "extensions": ["cdmia"], + }, + "application/cdmi-container": { + "source": "iana", + "extensions": ["cdmic"], + }, + "application/cdmi-domain": { + "source": "iana", + "extensions": ["cdmid"], + }, + "application/cdmi-object": { + "source": "iana", + "extensions": ["cdmio"], + }, + "application/cdmi-queue": { + "source": "iana", + "extensions": ["cdmiq"], + }, + "application/cdni": { + "source": "iana", + }, + "application/cea": { + "source": "iana", + }, + "application/cea-2018+xml": { + "source": "iana", + "compressible": true, + }, + "application/cellml+xml": { + "source": "iana", + "compressible": true, + }, + "application/cfw": { + "source": "iana", + }, + "application/city+json": { + "source": "iana", + "compressible": true, + }, + "application/clr": { + "source": "iana", + }, + "application/clue+xml": { + "source": "iana", + "compressible": true, + }, + "application/clue_info+xml": { + "source": "iana", + "compressible": true, + }, + "application/cms": { + "source": "iana", + }, + "application/cnrp+xml": { + "source": "iana", + "compressible": true, + }, + "application/coap-group+json": { + "source": "iana", + "compressible": true, + }, + "application/coap-payload": { + "source": "iana", + }, + "application/commonground": { + "source": "iana", + }, + "application/concise-problem-details+cbor": { + "source": "iana", + }, + "application/conference-info+xml": { + "source": "iana", + "compressible": true, + }, + "application/cose": { + "source": "iana", + }, + "application/cose-key": { + "source": "iana", + }, + "application/cose-key-set": { + "source": "iana", + }, + "application/cose-x509": { + "source": "iana", + }, + "application/cpl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cpl"], + }, + "application/csrattrs": { + "source": "iana", + }, + "application/csta+xml": { + "source": "iana", + "compressible": true, + }, + "application/cstadata+xml": { + "source": "iana", + "compressible": true, + }, + "application/csvm+json": { + "source": "iana", + "compressible": true, + }, + "application/cu-seeme": { + "source": "apache", + "extensions": ["cu"], + }, + "application/cwl": { + "source": "iana", + "extensions": ["cwl"], + }, + "application/cwl+json": { + "source": "iana", + "compressible": true, + }, + "application/cwt": { + "source": "iana", + }, + "application/cybercash": { + "source": "iana", + }, + "application/dart": { + "compressible": true, + }, + "application/dash+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpd"], + }, + "application/dash-patch+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpp"], + }, + "application/dashdelta": { + "source": "iana", + }, + "application/davmount+xml": { + "source": "iana", + "compressible": true, + "extensions": ["davmount"], + }, + "application/dca-rft": { + "source": "iana", + }, + "application/dcd": { + "source": "iana", + }, + "application/dec-dx": { + "source": "iana", + }, + "application/dialog-info+xml": { + "source": "iana", + "compressible": true, + }, + "application/dicom": { + "source": "iana", + }, + "application/dicom+json": { + "source": "iana", + "compressible": true, + }, + "application/dicom+xml": { + "source": "iana", + "compressible": true, + }, + "application/dii": { + "source": "iana", + }, + "application/dit": { + "source": "iana", + }, + "application/dns": { + "source": "iana", + }, + "application/dns+json": { + "source": "iana", + "compressible": true, + }, + "application/dns-message": { + "source": "iana", + }, + "application/docbook+xml": { + "source": "apache", + "compressible": true, + "extensions": ["dbk"], + }, + "application/dots+cbor": { + "source": "iana", + }, + "application/dskpp+xml": { + "source": "iana", + "compressible": true, + }, + "application/dssc+der": { + "source": "iana", + "extensions": ["dssc"], + }, + "application/dssc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdssc"], + }, + "application/dvcs": { + "source": "iana", + }, + "application/ecmascript": { + "source": "apache", + "compressible": true, + "extensions": ["ecma"], + }, + "application/edi-consent": { + "source": "iana", + }, + "application/edi-x12": { + "source": "iana", + "compressible": false, + }, + "application/edifact": { + "source": "iana", + "compressible": false, + }, + "application/efi": { + "source": "iana", + }, + "application/elm+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/elm+xml": { + "source": "iana", + "compressible": true, + }, + "application/emergencycalldata.cap+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/emergencycalldata.comment+xml": { + "source": "iana", + "compressible": true, + }, + "application/emergencycalldata.control+xml": { + "source": "iana", + "compressible": true, + }, + "application/emergencycalldata.deviceinfo+xml": { + "source": "iana", + "compressible": true, + }, + "application/emergencycalldata.ecall.msd": { + "source": "iana", + }, + "application/emergencycalldata.legacyesn+json": { + "source": "iana", + "compressible": true, + }, + "application/emergencycalldata.providerinfo+xml": { + "source": "iana", + "compressible": true, + }, + "application/emergencycalldata.serviceinfo+xml": { + "source": "iana", + "compressible": true, + }, + "application/emergencycalldata.subscriberinfo+xml": { + "source": "iana", + "compressible": true, + }, + "application/emergencycalldata.veds+xml": { + "source": "iana", + "compressible": true, + }, + "application/emma+xml": { + "source": "iana", + "compressible": true, + "extensions": ["emma"], + }, + "application/emotionml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["emotionml"], + }, + "application/encaprtp": { + "source": "iana", + }, + "application/epp+xml": { + "source": "iana", + "compressible": true, + }, + "application/epub+zip": { + "source": "iana", + "compressible": false, + "extensions": ["epub"], + }, + "application/eshop": { + "source": "iana", + }, + "application/exi": { + "source": "iana", + "extensions": ["exi"], + }, + "application/expect-ct-report+json": { + "source": "iana", + "compressible": true, + }, + "application/express": { + "source": "iana", + "extensions": ["exp"], + }, + "application/fastinfoset": { + "source": "iana", + }, + "application/fastsoap": { + "source": "iana", + }, + "application/fdf": { + "source": "iana", + "extensions": ["fdf"], + }, + "application/fdt+xml": { + "source": "iana", + "compressible": true, + "extensions": ["fdt"], + }, + "application/fhir+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/fhir+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/fido.trusted-apps+json": { + "compressible": true, + }, + "application/fits": { + "source": "iana", + }, + "application/flexfec": { + "source": "iana", + }, + "application/font-sfnt": { + "source": "iana", + }, + "application/font-tdpfr": { + "source": "iana", + "extensions": ["pfr"], + }, + "application/font-woff": { + "source": "iana", + "compressible": false, + }, + "application/framework-attributes+xml": { + "source": "iana", + "compressible": true, + }, + "application/geo+json": { + "source": "iana", + "compressible": true, + "extensions": ["geojson"], + }, + "application/geo+json-seq": { + "source": "iana", + }, + "application/geopackage+sqlite3": { + "source": "iana", + }, + "application/geoxacml+xml": { + "source": "iana", + "compressible": true, + }, + "application/gltf-buffer": { + "source": "iana", + }, + "application/gml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["gml"], + }, + "application/gpx+xml": { + "source": "apache", + "compressible": true, + "extensions": ["gpx"], + }, + "application/gxf": { + "source": "apache", + "extensions": ["gxf"], + }, + "application/gzip": { + "source": "iana", + "compressible": false, + "extensions": ["gz"], + }, + "application/h224": { + "source": "iana", + }, + "application/held+xml": { + "source": "iana", + "compressible": true, + }, + "application/hjson": { + "extensions": ["hjson"], + }, + "application/hl7v2+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/http": { + "source": "iana", + }, + "application/hyperstudio": { + "source": "iana", + "extensions": ["stk"], + }, + "application/ibe-key-request+xml": { + "source": "iana", + "compressible": true, + }, + "application/ibe-pkg-reply+xml": { + "source": "iana", + "compressible": true, + }, + "application/ibe-pp-data": { + "source": "iana", + }, + "application/iges": { + "source": "iana", + }, + "application/im-iscomposing+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/index": { + "source": "iana", + }, + "application/index.cmd": { + "source": "iana", + }, + "application/index.obj": { + "source": "iana", + }, + "application/index.response": { + "source": "iana", + }, + "application/index.vnd": { + "source": "iana", + }, + "application/inkml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ink", "inkml"], + }, + "application/iotp": { + "source": "iana", + }, + "application/ipfix": { + "source": "iana", + "extensions": ["ipfix"], + }, + "application/ipp": { + "source": "iana", + }, + "application/isup": { + "source": "iana", + }, + "application/its+xml": { + "source": "iana", + "compressible": true, + "extensions": ["its"], + }, + "application/java-archive": { + "source": "apache", + "compressible": false, + "extensions": ["jar", "war", "ear"], + }, + "application/java-serialized-object": { + "source": "apache", + "compressible": false, + "extensions": ["ser"], + }, + "application/java-vm": { + "source": "apache", + "compressible": false, + "extensions": ["class"], + }, + "application/javascript": { + "source": "apache", + "charset": "UTF-8", + "compressible": true, + "extensions": ["js"], + }, + "application/jf2feed+json": { + "source": "iana", + "compressible": true, + }, + "application/jose": { + "source": "iana", + }, + "application/jose+json": { + "source": "iana", + "compressible": true, + }, + "application/jrd+json": { + "source": "iana", + "compressible": true, + }, + "application/jscalendar+json": { + "source": "iana", + "compressible": true, + }, + "application/json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["json", "map"], + }, + "application/json-patch+json": { + "source": "iana", + "compressible": true, + }, + "application/json-seq": { + "source": "iana", + }, + "application/json5": { + "extensions": ["json5"], + }, + "application/jsonml+json": { + "source": "apache", + "compressible": true, + "extensions": ["jsonml"], + }, + "application/jwk+json": { + "source": "iana", + "compressible": true, + }, + "application/jwk-set+json": { + "source": "iana", + "compressible": true, + }, + "application/jwt": { + "source": "iana", + }, + "application/kpml-request+xml": { + "source": "iana", + "compressible": true, + }, + "application/kpml-response+xml": { + "source": "iana", + "compressible": true, + }, + "application/ld+json": { + "source": "iana", + "compressible": true, + "extensions": ["jsonld"], + }, + "application/lgr+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lgr"], + }, + "application/link-format": { + "source": "iana", + }, + "application/linkset": { + "source": "iana", + }, + "application/linkset+json": { + "source": "iana", + "compressible": true, + }, + "application/load-control+xml": { + "source": "iana", + "compressible": true, + }, + "application/logout+jwt": { + "source": "iana", + }, + "application/lost+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lostxml"], + }, + "application/lostsync+xml": { + "source": "iana", + "compressible": true, + }, + "application/lpf+zip": { + "source": "iana", + "compressible": false, + }, + "application/lxf": { + "source": "iana", + }, + "application/mac-binhex40": { + "source": "iana", + "extensions": ["hqx"], + }, + "application/mac-compactpro": { + "source": "apache", + "extensions": ["cpt"], + }, + "application/macwriteii": { + "source": "iana", + }, + "application/mads+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mads"], + }, + "application/manifest+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["webmanifest"], + }, + "application/marc": { + "source": "iana", + "extensions": ["mrc"], + }, + "application/marcxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mrcx"], + }, + "application/mathematica": { + "source": "iana", + "extensions": ["ma", "nb", "mb"], + }, + "application/mathml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mathml"], + }, + "application/mathml-content+xml": { + "source": "iana", + "compressible": true, + }, + "application/mathml-presentation+xml": { + "source": "iana", + "compressible": true, + }, + "application/mbms-associated-procedure-description+xml": { + "source": "iana", + "compressible": true, + }, + "application/mbms-deregister+xml": { + "source": "iana", + "compressible": true, + }, + "application/mbms-envelope+xml": { + "source": "iana", + "compressible": true, + }, + "application/mbms-msk+xml": { + "source": "iana", + "compressible": true, + }, + "application/mbms-msk-response+xml": { + "source": "iana", + "compressible": true, + }, + "application/mbms-protection-description+xml": { + "source": "iana", + "compressible": true, + }, + "application/mbms-reception-report+xml": { + "source": "iana", + "compressible": true, + }, + "application/mbms-register+xml": { + "source": "iana", + "compressible": true, + }, + "application/mbms-register-response+xml": { + "source": "iana", + "compressible": true, + }, + "application/mbms-schedule+xml": { + "source": "iana", + "compressible": true, + }, + "application/mbms-user-service-description+xml": { + "source": "iana", + "compressible": true, + }, + "application/mbox": { + "source": "iana", + "extensions": ["mbox"], + }, + "application/media-policy-dataset+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpf"], + }, + "application/media_control+xml": { + "source": "iana", + "compressible": true, + }, + "application/mediaservercontrol+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mscml"], + }, + "application/merge-patch+json": { + "source": "iana", + "compressible": true, + }, + "application/metalink+xml": { + "source": "apache", + "compressible": true, + "extensions": ["metalink"], + }, + "application/metalink4+xml": { + "source": "iana", + "compressible": true, + "extensions": ["meta4"], + }, + "application/mets+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mets"], + }, + "application/mf4": { + "source": "iana", + }, + "application/mikey": { + "source": "iana", + }, + "application/mipc": { + "source": "iana", + }, + "application/missing-blocks+cbor-seq": { + "source": "iana", + }, + "application/mmt-aei+xml": { + "source": "iana", + "compressible": true, + "extensions": ["maei"], + }, + "application/mmt-usd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["musd"], + }, + "application/mods+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mods"], + }, + "application/moss-keys": { + "source": "iana", + }, + "application/moss-signature": { + "source": "iana", + }, + "application/mosskey-data": { + "source": "iana", + }, + "application/mosskey-request": { + "source": "iana", + }, + "application/mp21": { + "source": "iana", + "extensions": ["m21", "mp21"], + }, + "application/mp4": { + "source": "iana", + "extensions": ["mp4", "mpg4", "mp4s", "m4p"], + }, + "application/mpeg4-generic": { + "source": "iana", + }, + "application/mpeg4-iod": { + "source": "iana", + }, + "application/mpeg4-iod-xmt": { + "source": "iana", + }, + "application/mrb-consumer+xml": { + "source": "iana", + "compressible": true, + }, + "application/mrb-publish+xml": { + "source": "iana", + "compressible": true, + }, + "application/msc-ivr+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/msc-mixer+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/msix": { + "compressible": false, + "extensions": ["msix"], + }, + "application/msixbundle": { + "compressible": false, + "extensions": ["msixbundle"], + }, + "application/msword": { + "source": "iana", + "compressible": false, + "extensions": ["doc", "dot"], + }, + "application/mud+json": { + "source": "iana", + "compressible": true, + }, + "application/multipart-core": { + "source": "iana", + }, + "application/mxf": { + "source": "iana", + "extensions": ["mxf"], + }, + "application/n-quads": { + "source": "iana", + "extensions": ["nq"], + }, + "application/n-triples": { + "source": "iana", + "extensions": ["nt"], + }, + "application/nasdata": { + "source": "iana", + }, + "application/news-checkgroups": { + "source": "iana", + "charset": "US-ASCII", + }, + "application/news-groupinfo": { + "source": "iana", + "charset": "US-ASCII", + }, + "application/news-transmission": { + "source": "iana", + }, + "application/nlsml+xml": { + "source": "iana", + "compressible": true, + }, + "application/node": { + "source": "iana", + "extensions": ["cjs"], + }, + "application/nss": { + "source": "iana", + }, + "application/oauth-authz-req+jwt": { + "source": "iana", + }, + "application/oblivious-dns-message": { + "source": "iana", + }, + "application/ocsp-request": { + "source": "iana", + }, + "application/ocsp-response": { + "source": "iana", + }, + "application/octet-stream": { + "source": "iana", + "compressible": false, + "extensions": [ + "bin", + "dms", + "lrf", + "mar", + "so", + "dist", + "distz", + "pkg", + "bpk", + "dump", + "elc", + "deploy", + "exe", + "dll", + "deb", + "dmg", + "iso", + "img", + "msi", + "msp", + "msm", + "buffer", + ], + }, + "application/oda": { + "source": "iana", + "extensions": ["oda"], + }, + "application/odm+xml": { + "source": "iana", + "compressible": true, + }, + "application/odx": { + "source": "iana", + }, + "application/oebps-package+xml": { + "source": "iana", + "compressible": true, + "extensions": ["opf"], + }, + "application/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["ogx"], + }, + "application/omdoc+xml": { + "source": "apache", + "compressible": true, + "extensions": ["omdoc"], + }, + "application/onenote": { + "source": "apache", + "extensions": ["onetoc", "onetoc2", "onetmp", "onepkg"], + }, + "application/opc-nodeset+xml": { + "source": "iana", + "compressible": true, + }, + "application/oscore": { + "source": "iana", + }, + "application/oxps": { + "source": "iana", + "extensions": ["oxps"], + }, + "application/p21": { + "source": "iana", + }, + "application/p21+zip": { + "source": "iana", + "compressible": false, + }, + "application/p2p-overlay+xml": { + "source": "iana", + "compressible": true, + "extensions": ["relo"], + }, + "application/parityfec": { + "source": "iana", + }, + "application/passport": { + "source": "iana", + }, + "application/patch-ops-error+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xer"], + }, + "application/pdf": { + "source": "iana", + "compressible": false, + "extensions": ["pdf"], + }, + "application/pdx": { + "source": "iana", + }, + "application/pem-certificate-chain": { + "source": "iana", + }, + "application/pgp-encrypted": { + "source": "iana", + "compressible": false, + "extensions": ["pgp"], + }, + "application/pgp-keys": { + "source": "iana", + "extensions": ["asc"], + }, + "application/pgp-signature": { + "source": "iana", + "extensions": ["sig", "asc"], + }, + "application/pics-rules": { + "source": "apache", + "extensions": ["prf"], + }, + "application/pidf+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/pidf-diff+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/pkcs10": { + "source": "iana", + "extensions": ["p10"], + }, + "application/pkcs12": { + "source": "iana", + }, + "application/pkcs7-mime": { + "source": "iana", + "extensions": ["p7m", "p7c"], + }, + "application/pkcs7-signature": { + "source": "iana", + "extensions": ["p7s"], + }, + "application/pkcs8": { + "source": "iana", + "extensions": ["p8"], + }, + "application/pkcs8-encrypted": { + "source": "iana", + }, + "application/pkix-attr-cert": { + "source": "iana", + "extensions": ["ac"], + }, + "application/pkix-cert": { + "source": "iana", + "extensions": ["cer"], + }, + "application/pkix-crl": { + "source": "iana", + "extensions": ["crl"], + }, + "application/pkix-pkipath": { + "source": "iana", + "extensions": ["pkipath"], + }, + "application/pkixcmp": { + "source": "iana", + "extensions": ["pki"], + }, + "application/pls+xml": { + "source": "iana", + "compressible": true, + "extensions": ["pls"], + }, + "application/poc-settings+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/postscript": { + "source": "iana", + "compressible": true, + "extensions": ["ai", "eps", "ps"], + }, + "application/ppsp-tracker+json": { + "source": "iana", + "compressible": true, + }, + "application/problem+json": { + "source": "iana", + "compressible": true, + }, + "application/problem+xml": { + "source": "iana", + "compressible": true, + }, + "application/provenance+xml": { + "source": "iana", + "compressible": true, + "extensions": ["provx"], + }, + "application/prs.alvestrand.titrax-sheet": { + "source": "iana", + }, + "application/prs.cww": { + "source": "iana", + "extensions": ["cww"], + }, + "application/prs.cyn": { + "source": "iana", + "charset": "7-BIT", + }, + "application/prs.hpub+zip": { + "source": "iana", + "compressible": false, + }, + "application/prs.nprend": { + "source": "iana", + }, + "application/prs.plucker": { + "source": "iana", + }, + "application/prs.rdf-xml-crypt": { + "source": "iana", + }, + "application/prs.xsf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xsf"], + }, + "application/pskc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["pskcxml"], + }, + "application/pvd+json": { + "source": "iana", + "compressible": true, + }, + "application/qsig": { + "source": "iana", + }, + "application/raml+yaml": { + "compressible": true, + "extensions": ["raml"], + }, + "application/raptorfec": { + "source": "iana", + }, + "application/rdap+json": { + "source": "iana", + "compressible": true, + }, + "application/rdf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rdf", "owl"], + }, + "application/reginfo+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rif"], + }, + "application/relax-ng-compact-syntax": { + "source": "iana", + "extensions": ["rnc"], + }, + "application/remote-printing": { + "source": "apache", + }, + "application/reputon+json": { + "source": "iana", + "compressible": true, + }, + "application/resource-lists+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rl"], + }, + "application/resource-lists-diff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rld"], + }, + "application/rfc+xml": { + "source": "iana", + "compressible": true, + }, + "application/riscos": { + "source": "iana", + }, + "application/rlmi+xml": { + "source": "iana", + "compressible": true, + }, + "application/rls-services+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rs"], + }, + "application/route-apd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rapd"], + }, + "application/route-s-tsid+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sls"], + }, + "application/route-usd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rusd"], + }, + "application/rpki-checklist": { + "source": "iana", + }, + "application/rpki-ghostbusters": { + "source": "iana", + "extensions": ["gbr"], + }, + "application/rpki-manifest": { + "source": "iana", + "extensions": ["mft"], + }, + "application/rpki-publication": { + "source": "iana", + }, + "application/rpki-roa": { + "source": "iana", + "extensions": ["roa"], + }, + "application/rpki-updown": { + "source": "iana", + }, + "application/rsd+xml": { + "source": "apache", + "compressible": true, + "extensions": ["rsd"], + }, + "application/rss+xml": { + "source": "apache", + "compressible": true, + "extensions": ["rss"], + }, + "application/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"], + }, + "application/rtploopback": { + "source": "iana", + }, + "application/rtx": { + "source": "iana", + }, + "application/samlassertion+xml": { + "source": "iana", + "compressible": true, + }, + "application/samlmetadata+xml": { + "source": "iana", + "compressible": true, + }, + "application/sarif+json": { + "source": "iana", + "compressible": true, + }, + "application/sarif-external-properties+json": { + "source": "iana", + "compressible": true, + }, + "application/sbe": { + "source": "iana", + }, + "application/sbml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sbml"], + }, + "application/scaip+xml": { + "source": "iana", + "compressible": true, + }, + "application/scim+json": { + "source": "iana", + "compressible": true, + }, + "application/scvp-cv-request": { + "source": "iana", + "extensions": ["scq"], + }, + "application/scvp-cv-response": { + "source": "iana", + "extensions": ["scs"], + }, + "application/scvp-vp-request": { + "source": "iana", + "extensions": ["spq"], + }, + "application/scvp-vp-response": { + "source": "iana", + "extensions": ["spp"], + }, + "application/sdp": { + "source": "iana", + "extensions": ["sdp"], + }, + "application/secevent+jwt": { + "source": "iana", + }, + "application/senml+cbor": { + "source": "iana", + }, + "application/senml+json": { + "source": "iana", + "compressible": true, + }, + "application/senml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["senmlx"], + }, + "application/senml-etch+cbor": { + "source": "iana", + }, + "application/senml-etch+json": { + "source": "iana", + "compressible": true, + }, + "application/senml-exi": { + "source": "iana", + }, + "application/sensml+cbor": { + "source": "iana", + }, + "application/sensml+json": { + "source": "iana", + "compressible": true, + }, + "application/sensml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sensmlx"], + }, + "application/sensml-exi": { + "source": "iana", + }, + "application/sep+xml": { + "source": "iana", + "compressible": true, + }, + "application/sep-exi": { + "source": "iana", + }, + "application/session-info": { + "source": "iana", + }, + "application/set-payment": { + "source": "iana", + }, + "application/set-payment-initiation": { + "source": "iana", + "extensions": ["setpay"], + }, + "application/set-registration": { + "source": "iana", + }, + "application/set-registration-initiation": { + "source": "iana", + "extensions": ["setreg"], + }, + "application/sgml": { + "source": "iana", + }, + "application/sgml-open-catalog": { + "source": "iana", + }, + "application/shf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["shf"], + }, + "application/sieve": { + "source": "iana", + "extensions": ["siv", "sieve"], + }, + "application/simple-filter+xml": { + "source": "iana", + "compressible": true, + }, + "application/simple-message-summary": { + "source": "iana", + }, + "application/simplesymbolcontainer": { + "source": "iana", + }, + "application/sipc": { + "source": "iana", + }, + "application/slate": { + "source": "iana", + }, + "application/smil": { + "source": "apache", + }, + "application/smil+xml": { + "source": "iana", + "compressible": true, + "extensions": ["smi", "smil"], + }, + "application/smpte336m": { + "source": "iana", + }, + "application/soap+fastinfoset": { + "source": "iana", + }, + "application/soap+xml": { + "source": "iana", + "compressible": true, + }, + "application/sparql-query": { + "source": "iana", + "extensions": ["rq"], + }, + "application/sparql-results+xml": { + "source": "iana", + "compressible": true, + "extensions": ["srx"], + }, + "application/spdx+json": { + "source": "iana", + "compressible": true, + }, + "application/spirits-event+xml": { + "source": "iana", + "compressible": true, + }, + "application/sql": { + "source": "iana", + "extensions": ["sql"], + }, + "application/srgs": { + "source": "iana", + "extensions": ["gram"], + }, + "application/srgs+xml": { + "source": "iana", + "compressible": true, + "extensions": ["grxml"], + }, + "application/sru+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sru"], + }, + "application/ssdl+xml": { + "source": "apache", + "compressible": true, + "extensions": ["ssdl"], + }, + "application/ssml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ssml"], + }, + "application/stix+json": { + "source": "iana", + "compressible": true, + }, + "application/swid+cbor": { + "source": "iana", + }, + "application/swid+xml": { + "source": "iana", + "compressible": true, + "extensions": ["swidtag"], + }, + "application/tamp-apex-update": { + "source": "iana", + }, + "application/tamp-apex-update-confirm": { + "source": "iana", + }, + "application/tamp-community-update": { + "source": "iana", + }, + "application/tamp-community-update-confirm": { + "source": "iana", + }, + "application/tamp-error": { + "source": "iana", + }, + "application/tamp-sequence-adjust": { + "source": "iana", + }, + "application/tamp-sequence-adjust-confirm": { + "source": "iana", + }, + "application/tamp-status-query": { + "source": "iana", + }, + "application/tamp-status-response": { + "source": "iana", + }, + "application/tamp-update": { + "source": "iana", + }, + "application/tamp-update-confirm": { + "source": "iana", + }, + "application/tar": { + "compressible": true, + }, + "application/taxii+json": { + "source": "iana", + "compressible": true, + }, + "application/td+json": { + "source": "iana", + "compressible": true, + }, + "application/tei+xml": { + "source": "iana", + "compressible": true, + "extensions": ["tei", "teicorpus"], + }, + "application/tetra_isi": { + "source": "iana", + }, + "application/thraud+xml": { + "source": "iana", + "compressible": true, + "extensions": ["tfi"], + }, + "application/timestamp-query": { + "source": "iana", + }, + "application/timestamp-reply": { + "source": "iana", + }, + "application/timestamped-data": { + "source": "iana", + "extensions": ["tsd"], + }, + "application/tlsrpt+gzip": { + "source": "iana", + }, + "application/tlsrpt+json": { + "source": "iana", + "compressible": true, + }, + "application/tm+json": { + "source": "iana", + "compressible": true, + }, + "application/tnauthlist": { + "source": "iana", + }, + "application/token-introspection+jwt": { + "source": "iana", + }, + "application/toml": { + "compressible": true, + "extensions": ["toml"], + }, + "application/trickle-ice-sdpfrag": { + "source": "iana", + }, + "application/trig": { + "source": "iana", + "extensions": ["trig"], + }, + "application/ttml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ttml"], + }, + "application/tve-trigger": { + "source": "iana", + }, + "application/tzif": { + "source": "iana", + }, + "application/tzif-leap": { + "source": "iana", + }, + "application/ubjson": { + "compressible": false, + "extensions": ["ubj"], + }, + "application/ulpfec": { + "source": "iana", + }, + "application/urc-grpsheet+xml": { + "source": "iana", + "compressible": true, + }, + "application/urc-ressheet+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rsheet"], + }, + "application/urc-targetdesc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["td"], + }, + "application/urc-uisocketdesc+xml": { + "source": "iana", + "compressible": true, + }, + "application/vcard+json": { + "source": "iana", + "compressible": true, + }, + "application/vcard+xml": { + "source": "iana", + "compressible": true, + }, + "application/vemmi": { + "source": "iana", + }, + "application/vividence.scriptfile": { + "source": "apache", + }, + "application/vnd.1000minds.decision-model+xml": { + "source": "iana", + "compressible": true, + "extensions": ["1km"], + }, + "application/vnd.3gpp-prose+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp-prose-pc3a+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp-prose-pc3ach+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp-prose-pc3ch+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp-prose-pc8+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp-v2x-local-service-information": { + "source": "iana", + }, + "application/vnd.3gpp.5gnas": { + "source": "iana", + }, + "application/vnd.3gpp.access-transfer-events+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.bsf+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.gmop+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.gtpc": { + "source": "iana", + }, + "application/vnd.3gpp.interworking-data": { + "source": "iana", + }, + "application/vnd.3gpp.lpp": { + "source": "iana", + }, + "application/vnd.3gpp.mc-signalling-ear": { + "source": "iana", + }, + "application/vnd.3gpp.mcdata-affiliation-command+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcdata-info+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcdata-payload": { + "source": "iana", + }, + "application/vnd.3gpp.mcdata-regroup+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcdata-service-config+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcdata-signalling": { + "source": "iana", + }, + "application/vnd.3gpp.mcdata-ue-config+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcdata-user-profile+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcptt-affiliation-command+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcptt-floor-request+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcptt-info+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcptt-location-info+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcptt-mbms-usage-info+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcptt-service-config+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcptt-signed+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcptt-ue-config+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcptt-ue-init-config+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcptt-user-profile+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcvideo-affiliation-command+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcvideo-info+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcvideo-location-info+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcvideo-service-config+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcvideo-transmission-request+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcvideo-ue-config+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mcvideo-user-profile+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.mid-call+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.ngap": { + "source": "iana", + }, + "application/vnd.3gpp.pfcp": { + "source": "iana", + }, + "application/vnd.3gpp.pic-bw-large": { + "source": "iana", + "extensions": ["plb"], + }, + "application/vnd.3gpp.pic-bw-small": { + "source": "iana", + "extensions": ["psb"], + }, + "application/vnd.3gpp.pic-bw-var": { + "source": "iana", + "extensions": ["pvb"], + }, + "application/vnd.3gpp.s1ap": { + "source": "iana", + }, + "application/vnd.3gpp.seal-info+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.seal-location-info+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.sms": { + "source": "iana", + }, + "application/vnd.3gpp.sms+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.srvcc-ext+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.srvcc-info+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.state-and-event-info+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.ussd+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp.vae-info+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp2.bcmcsinfo+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.3gpp2.sms": { + "source": "iana", + }, + "application/vnd.3gpp2.tcap": { + "source": "iana", + "extensions": ["tcap"], + }, + "application/vnd.3lightssoftware.imagescal": { + "source": "iana", + }, + "application/vnd.3m.post-it-notes": { + "source": "iana", + "extensions": ["pwn"], + }, + "application/vnd.accpac.simply.aso": { + "source": "iana", + "extensions": ["aso"], + }, + "application/vnd.accpac.simply.imp": { + "source": "iana", + "extensions": ["imp"], + }, + "application/vnd.acucobol": { + "source": "iana", + "extensions": ["acu"], + }, + "application/vnd.acucorp": { + "source": "iana", + "extensions": ["atc", "acutc"], + }, + "application/vnd.adobe.air-application-installer-package+zip": { + "source": "apache", + "compressible": false, + "extensions": ["air"], + }, + "application/vnd.adobe.flash.movie": { + "source": "iana", + }, + "application/vnd.adobe.formscentral.fcdt": { + "source": "iana", + "extensions": ["fcdt"], + }, + "application/vnd.adobe.fxp": { + "source": "iana", + "extensions": ["fxp", "fxpl"], + }, + "application/vnd.adobe.partial-upload": { + "source": "iana", + }, + "application/vnd.adobe.xdp+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdp"], + }, + "application/vnd.adobe.xfdf": { + "source": "apache", + "extensions": ["xfdf"], + }, + "application/vnd.aether.imp": { + "source": "iana", + }, + "application/vnd.afpc.afplinedata": { + "source": "iana", + }, + "application/vnd.afpc.afplinedata-pagedef": { + "source": "iana", + }, + "application/vnd.afpc.cmoca-cmresource": { + "source": "iana", + }, + "application/vnd.afpc.foca-charset": { + "source": "iana", + }, + "application/vnd.afpc.foca-codedfont": { + "source": "iana", + }, + "application/vnd.afpc.foca-codepage": { + "source": "iana", + }, + "application/vnd.afpc.modca": { + "source": "iana", + }, + "application/vnd.afpc.modca-cmtable": { + "source": "iana", + }, + "application/vnd.afpc.modca-formdef": { + "source": "iana", + }, + "application/vnd.afpc.modca-mediummap": { + "source": "iana", + }, + "application/vnd.afpc.modca-objectcontainer": { + "source": "iana", + }, + "application/vnd.afpc.modca-overlay": { + "source": "iana", + }, + "application/vnd.afpc.modca-pagesegment": { + "source": "iana", + }, + "application/vnd.age": { + "source": "iana", + "extensions": ["age"], + }, + "application/vnd.ah-barcode": { + "source": "apache", + }, + "application/vnd.ahead.space": { + "source": "iana", + "extensions": ["ahead"], + }, + "application/vnd.airzip.filesecure.azf": { + "source": "iana", + "extensions": ["azf"], + }, + "application/vnd.airzip.filesecure.azs": { + "source": "iana", + "extensions": ["azs"], + }, + "application/vnd.amadeus+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.amazon.ebook": { + "source": "apache", + "extensions": ["azw"], + }, + "application/vnd.amazon.mobi8-ebook": { + "source": "iana", + }, + "application/vnd.americandynamics.acc": { + "source": "iana", + "extensions": ["acc"], + }, + "application/vnd.amiga.ami": { + "source": "iana", + "extensions": ["ami"], + }, + "application/vnd.amundsen.maze+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.android.ota": { + "source": "iana", + }, + "application/vnd.android.package-archive": { + "source": "apache", + "compressible": false, + "extensions": ["apk"], + }, + "application/vnd.anki": { + "source": "iana", + }, + "application/vnd.anser-web-certificate-issue-initiation": { + "source": "iana", + "extensions": ["cii"], + }, + "application/vnd.anser-web-funds-transfer-initiation": { + "source": "apache", + "extensions": ["fti"], + }, + "application/vnd.antix.game-component": { + "source": "iana", + "extensions": ["atx"], + }, + "application/vnd.apache.arrow.file": { + "source": "iana", + }, + "application/vnd.apache.arrow.stream": { + "source": "iana", + }, + "application/vnd.apache.thrift.binary": { + "source": "iana", + }, + "application/vnd.apache.thrift.compact": { + "source": "iana", + }, + "application/vnd.apache.thrift.json": { + "source": "iana", + }, + "application/vnd.apexlang": { + "source": "iana", + }, + "application/vnd.api+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.aplextor.warrp+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.apothekende.reservation+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.apple.installer+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpkg"], + }, + "application/vnd.apple.keynote": { + "source": "iana", + "extensions": ["key"], + }, + "application/vnd.apple.mpegurl": { + "source": "iana", + "extensions": ["m3u8"], + }, + "application/vnd.apple.numbers": { + "source": "iana", + "extensions": ["numbers"], + }, + "application/vnd.apple.pages": { + "source": "iana", + "extensions": ["pages"], + }, + "application/vnd.apple.pkpass": { + "compressible": false, + "extensions": ["pkpass"], + }, + "application/vnd.arastra.swi": { + "source": "apache", + }, + "application/vnd.aristanetworks.swi": { + "source": "iana", + "extensions": ["swi"], + }, + "application/vnd.artisan+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.artsquare": { + "source": "iana", + }, + "application/vnd.astraea-software.iota": { + "source": "iana", + "extensions": ["iota"], + }, + "application/vnd.audiograph": { + "source": "iana", + "extensions": ["aep"], + }, + "application/vnd.autopackage": { + "source": "iana", + }, + "application/vnd.avalon+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.avistar+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.balsamiq.bmml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["bmml"], + }, + "application/vnd.balsamiq.bmpr": { + "source": "iana", + }, + "application/vnd.banana-accounting": { + "source": "iana", + }, + "application/vnd.bbf.usp.error": { + "source": "iana", + }, + "application/vnd.bbf.usp.msg": { + "source": "iana", + }, + "application/vnd.bbf.usp.msg+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.bekitzur-stech+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.belightsoft.lhzd+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.belightsoft.lhzl+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.bint.med-content": { + "source": "iana", + }, + "application/vnd.biopax.rdf+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.blink-idb-value-wrapper": { + "source": "iana", + }, + "application/vnd.blueice.multipass": { + "source": "iana", + "extensions": ["mpm"], + }, + "application/vnd.bluetooth.ep.oob": { + "source": "iana", + }, + "application/vnd.bluetooth.le.oob": { + "source": "iana", + }, + "application/vnd.bmi": { + "source": "iana", + "extensions": ["bmi"], + }, + "application/vnd.bpf": { + "source": "iana", + }, + "application/vnd.bpf3": { + "source": "iana", + }, + "application/vnd.businessobjects": { + "source": "iana", + "extensions": ["rep"], + }, + "application/vnd.byu.uapi+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.cab-jscript": { + "source": "iana", + }, + "application/vnd.canon-cpdl": { + "source": "iana", + }, + "application/vnd.canon-lips": { + "source": "iana", + }, + "application/vnd.capasystems-pg+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.cendio.thinlinc.clientconf": { + "source": "iana", + }, + "application/vnd.century-systems.tcp_stream": { + "source": "iana", + }, + "application/vnd.chemdraw+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cdxml"], + }, + "application/vnd.chess-pgn": { + "source": "iana", + }, + "application/vnd.chipnuts.karaoke-mmd": { + "source": "iana", + "extensions": ["mmd"], + }, + "application/vnd.ciedi": { + "source": "iana", + }, + "application/vnd.cinderella": { + "source": "iana", + "extensions": ["cdy"], + }, + "application/vnd.cirpack.isdn-ext": { + "source": "iana", + }, + "application/vnd.citationstyles.style+xml": { + "source": "iana", + "compressible": true, + "extensions": ["csl"], + }, + "application/vnd.claymore": { + "source": "iana", + "extensions": ["cla"], + }, + "application/vnd.cloanto.rp9": { + "source": "iana", + "extensions": ["rp9"], + }, + "application/vnd.clonk.c4group": { + "source": "iana", + "extensions": ["c4g", "c4d", "c4f", "c4p", "c4u"], + }, + "application/vnd.cluetrust.cartomobile-config": { + "source": "iana", + "extensions": ["c11amc"], + }, + "application/vnd.cluetrust.cartomobile-config-pkg": { + "source": "iana", + "extensions": ["c11amz"], + }, + "application/vnd.cncf.helm.chart.content.v1.tar+gzip": { + "source": "iana", + }, + "application/vnd.cncf.helm.chart.provenance.v1.prov": { + "source": "iana", + }, + "application/vnd.coffeescript": { + "source": "iana", + }, + "application/vnd.collabio.xodocuments.document": { + "source": "iana", + }, + "application/vnd.collabio.xodocuments.document-template": { + "source": "iana", + }, + "application/vnd.collabio.xodocuments.presentation": { + "source": "iana", + }, + "application/vnd.collabio.xodocuments.presentation-template": { + "source": "iana", + }, + "application/vnd.collabio.xodocuments.spreadsheet": { + "source": "iana", + }, + "application/vnd.collabio.xodocuments.spreadsheet-template": { + "source": "iana", + }, + "application/vnd.collection+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.collection.doc+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.collection.next+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.comicbook+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.comicbook-rar": { + "source": "iana", + }, + "application/vnd.commerce-battelle": { + "source": "iana", + }, + "application/vnd.commonspace": { + "source": "iana", + "extensions": ["csp"], + }, + "application/vnd.contact.cmsg": { + "source": "iana", + "extensions": ["cdbcmsg"], + }, + "application/vnd.coreos.ignition+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.cosmocaller": { + "source": "iana", + "extensions": ["cmc"], + }, + "application/vnd.crick.clicker": { + "source": "iana", + "extensions": ["clkx"], + }, + "application/vnd.crick.clicker.keyboard": { + "source": "iana", + "extensions": ["clkk"], + }, + "application/vnd.crick.clicker.palette": { + "source": "iana", + "extensions": ["clkp"], + }, + "application/vnd.crick.clicker.template": { + "source": "iana", + "extensions": ["clkt"], + }, + "application/vnd.crick.clicker.wordbank": { + "source": "iana", + "extensions": ["clkw"], + }, + "application/vnd.criticaltools.wbs+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wbs"], + }, + "application/vnd.cryptii.pipe+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.crypto-shade-file": { + "source": "iana", + }, + "application/vnd.cryptomator.encrypted": { + "source": "iana", + }, + "application/vnd.cryptomator.vault": { + "source": "iana", + }, + "application/vnd.ctc-posml": { + "source": "iana", + "extensions": ["pml"], + }, + "application/vnd.ctct.ws+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.cups-pdf": { + "source": "iana", + }, + "application/vnd.cups-postscript": { + "source": "iana", + }, + "application/vnd.cups-ppd": { + "source": "iana", + "extensions": ["ppd"], + }, + "application/vnd.cups-raster": { + "source": "iana", + }, + "application/vnd.cups-raw": { + "source": "iana", + }, + "application/vnd.curl": { + "source": "iana", + }, + "application/vnd.curl.car": { + "source": "apache", + "extensions": ["car"], + }, + "application/vnd.curl.pcurl": { + "source": "apache", + "extensions": ["pcurl"], + }, + "application/vnd.cyan.dean.root+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.cybank": { + "source": "iana", + }, + "application/vnd.cyclonedx+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.cyclonedx+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.d2l.coursepackage1p0+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.d3m-dataset": { + "source": "iana", + }, + "application/vnd.d3m-problem": { + "source": "iana", + }, + "application/vnd.dart": { + "source": "iana", + "compressible": true, + "extensions": ["dart"], + }, + "application/vnd.data-vision.rdz": { + "source": "iana", + "extensions": ["rdz"], + }, + "application/vnd.datalog": { + "source": "iana", + }, + "application/vnd.datapackage+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.dataresource+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.dbf": { + "source": "iana", + "extensions": ["dbf"], + }, + "application/vnd.debian.binary-package": { + "source": "iana", + }, + "application/vnd.dece.data": { + "source": "iana", + "extensions": ["uvf", "uvvf", "uvd", "uvvd"], + }, + "application/vnd.dece.ttml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["uvt", "uvvt"], + }, + "application/vnd.dece.unspecified": { + "source": "iana", + "extensions": ["uvx", "uvvx"], + }, + "application/vnd.dece.zip": { + "source": "iana", + "extensions": ["uvz", "uvvz"], + }, + "application/vnd.denovo.fcselayout-link": { + "source": "iana", + "extensions": ["fe_launch"], + }, + "application/vnd.desmume.movie": { + "source": "iana", + }, + "application/vnd.dir-bi.plate-dl-nosuffix": { + "source": "iana", + }, + "application/vnd.dm.delegation+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.dna": { + "source": "iana", + "extensions": ["dna"], + }, + "application/vnd.document+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.dolby.mlp": { + "source": "apache", + "extensions": ["mlp"], + }, + "application/vnd.dolby.mobile.1": { + "source": "iana", + }, + "application/vnd.dolby.mobile.2": { + "source": "iana", + }, + "application/vnd.doremir.scorecloud-binary-document": { + "source": "iana", + }, + "application/vnd.dpgraph": { + "source": "iana", + "extensions": ["dpg"], + }, + "application/vnd.dreamfactory": { + "source": "iana", + "extensions": ["dfac"], + }, + "application/vnd.drive+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.ds-keypoint": { + "source": "apache", + "extensions": ["kpxx"], + }, + "application/vnd.dtg.local": { + "source": "iana", + }, + "application/vnd.dtg.local.flash": { + "source": "iana", + }, + "application/vnd.dtg.local.html": { + "source": "iana", + }, + "application/vnd.dvb.ait": { + "source": "iana", + "extensions": ["ait"], + }, + "application/vnd.dvb.dvbisl+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.dvb.dvbj": { + "source": "iana", + }, + "application/vnd.dvb.esgcontainer": { + "source": "iana", + }, + "application/vnd.dvb.ipdcdftnotifaccess": { + "source": "iana", + }, + "application/vnd.dvb.ipdcesgaccess": { + "source": "iana", + }, + "application/vnd.dvb.ipdcesgaccess2": { + "source": "iana", + }, + "application/vnd.dvb.ipdcesgpdd": { + "source": "iana", + }, + "application/vnd.dvb.ipdcroaming": { + "source": "iana", + }, + "application/vnd.dvb.iptv.alfec-base": { + "source": "iana", + }, + "application/vnd.dvb.iptv.alfec-enhancement": { + "source": "iana", + }, + "application/vnd.dvb.notif-aggregate-root+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.dvb.notif-container+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.dvb.notif-generic+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.dvb.notif-ia-msglist+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.dvb.notif-ia-registration-request+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.dvb.notif-ia-registration-response+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.dvb.notif-init+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.dvb.pfr": { + "source": "iana", + }, + "application/vnd.dvb.service": { + "source": "iana", + "extensions": ["svc"], + }, + "application/vnd.dxr": { + "source": "iana", + }, + "application/vnd.dynageo": { + "source": "iana", + "extensions": ["geo"], + }, + "application/vnd.dzr": { + "source": "iana", + }, + "application/vnd.easykaraoke.cdgdownload": { + "source": "iana", + }, + "application/vnd.ecdis-update": { + "source": "iana", + }, + "application/vnd.ecip.rlp": { + "source": "iana", + }, + "application/vnd.eclipse.ditto+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.ecowin.chart": { + "source": "iana", + "extensions": ["mag"], + }, + "application/vnd.ecowin.filerequest": { + "source": "iana", + }, + "application/vnd.ecowin.fileupdate": { + "source": "iana", + }, + "application/vnd.ecowin.series": { + "source": "iana", + }, + "application/vnd.ecowin.seriesrequest": { + "source": "iana", + }, + "application/vnd.ecowin.seriesupdate": { + "source": "iana", + }, + "application/vnd.efi.img": { + "source": "iana", + }, + "application/vnd.efi.iso": { + "source": "iana", + }, + "application/vnd.eln+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.emclient.accessrequest+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.enliven": { + "source": "iana", + "extensions": ["nml"], + }, + "application/vnd.enphase.envoy": { + "source": "iana", + }, + "application/vnd.eprints.data+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.epson.esf": { + "source": "iana", + "extensions": ["esf"], + }, + "application/vnd.epson.msf": { + "source": "iana", + "extensions": ["msf"], + }, + "application/vnd.epson.quickanime": { + "source": "iana", + "extensions": ["qam"], + }, + "application/vnd.epson.salt": { + "source": "iana", + "extensions": ["slt"], + }, + "application/vnd.epson.ssf": { + "source": "iana", + "extensions": ["ssf"], + }, + "application/vnd.ericsson.quickcall": { + "source": "iana", + }, + "application/vnd.espass-espass+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.eszigno3+xml": { + "source": "iana", + "compressible": true, + "extensions": ["es3", "et3"], + }, + "application/vnd.etsi.aoc+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.asic-e+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.etsi.asic-s+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.etsi.cug+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.iptvcommand+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.iptvdiscovery+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.iptvprofile+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.iptvsad-bc+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.iptvsad-cod+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.iptvsad-npvr+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.iptvservice+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.iptvsync+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.iptvueprofile+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.mcid+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.mheg5": { + "source": "iana", + }, + "application/vnd.etsi.overload-control-policy-dataset+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.pstn+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.sci+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.simservs+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.timestamp-token": { + "source": "iana", + }, + "application/vnd.etsi.tsl+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.etsi.tsl.der": { + "source": "iana", + }, + "application/vnd.eu.kasparian.car+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.eudora.data": { + "source": "iana", + }, + "application/vnd.evolv.ecig.profile": { + "source": "iana", + }, + "application/vnd.evolv.ecig.settings": { + "source": "iana", + }, + "application/vnd.evolv.ecig.theme": { + "source": "iana", + }, + "application/vnd.exstream-empower+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.exstream-package": { + "source": "iana", + }, + "application/vnd.ezpix-album": { + "source": "iana", + "extensions": ["ez2"], + }, + "application/vnd.ezpix-package": { + "source": "iana", + "extensions": ["ez3"], + }, + "application/vnd.f-secure.mobile": { + "source": "iana", + }, + "application/vnd.familysearch.gedcom+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.fastcopy-disk-image": { + "source": "iana", + }, + "application/vnd.fdf": { + "source": "apache", + "extensions": ["fdf"], + }, + "application/vnd.fdsn.mseed": { + "source": "iana", + "extensions": ["mseed"], + }, + "application/vnd.fdsn.seed": { + "source": "iana", + "extensions": ["seed", "dataless"], + }, + "application/vnd.ffsns": { + "source": "iana", + }, + "application/vnd.ficlab.flb+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.filmit.zfc": { + "source": "iana", + }, + "application/vnd.fints": { + "source": "iana", + }, + "application/vnd.firemonkeys.cloudcell": { + "source": "iana", + }, + "application/vnd.flographit": { + "source": "iana", + "extensions": ["gph"], + }, + "application/vnd.fluxtime.clip": { + "source": "iana", + "extensions": ["ftc"], + }, + "application/vnd.font-fontforge-sfd": { + "source": "iana", + }, + "application/vnd.framemaker": { + "source": "iana", + "extensions": ["fm", "frame", "maker", "book"], + }, + "application/vnd.frogans.fnc": { + "source": "apache", + "extensions": ["fnc"], + }, + "application/vnd.frogans.ltf": { + "source": "apache", + "extensions": ["ltf"], + }, + "application/vnd.fsc.weblaunch": { + "source": "iana", + "extensions": ["fsc"], + }, + "application/vnd.fujifilm.fb.docuworks": { + "source": "iana", + }, + "application/vnd.fujifilm.fb.docuworks.binder": { + "source": "iana", + }, + "application/vnd.fujifilm.fb.docuworks.container": { + "source": "iana", + }, + "application/vnd.fujifilm.fb.jfi+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.fujitsu.oasys": { + "source": "iana", + "extensions": ["oas"], + }, + "application/vnd.fujitsu.oasys2": { + "source": "iana", + "extensions": ["oa2"], + }, + "application/vnd.fujitsu.oasys3": { + "source": "iana", + "extensions": ["oa3"], + }, + "application/vnd.fujitsu.oasysgp": { + "source": "iana", + "extensions": ["fg5"], + }, + "application/vnd.fujitsu.oasysprs": { + "source": "iana", + "extensions": ["bh2"], + }, + "application/vnd.fujixerox.art-ex": { + "source": "iana", + }, + "application/vnd.fujixerox.art4": { + "source": "iana", + }, + "application/vnd.fujixerox.ddd": { + "source": "iana", + "extensions": ["ddd"], + }, + "application/vnd.fujixerox.docuworks": { + "source": "iana", + "extensions": ["xdw"], + }, + "application/vnd.fujixerox.docuworks.binder": { + "source": "iana", + "extensions": ["xbd"], + }, + "application/vnd.fujixerox.docuworks.container": { + "source": "iana", + }, + "application/vnd.fujixerox.hbpl": { + "source": "iana", + }, + "application/vnd.fut-misnet": { + "source": "iana", + }, + "application/vnd.futoin+cbor": { + "source": "iana", + }, + "application/vnd.futoin+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.fuzzysheet": { + "source": "iana", + "extensions": ["fzs"], + }, + "application/vnd.genomatix.tuxedo": { + "source": "iana", + "extensions": ["txd"], + }, + "application/vnd.genozip": { + "source": "iana", + }, + "application/vnd.gentics.grd+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.gentoo.catmetadata+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.gentoo.ebuild": { + "source": "iana", + }, + "application/vnd.gentoo.eclass": { + "source": "iana", + }, + "application/vnd.gentoo.gpkg": { + "source": "iana", + }, + "application/vnd.gentoo.manifest": { + "source": "iana", + }, + "application/vnd.gentoo.pkgmetadata+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.gentoo.xpak": { + "source": "iana", + }, + "application/vnd.geo+json": { + "source": "apache", + "compressible": true, + }, + "application/vnd.geocube+xml": { + "source": "apache", + "compressible": true, + }, + "application/vnd.geogebra.file": { + "source": "iana", + "extensions": ["ggb"], + }, + "application/vnd.geogebra.slides": { + "source": "iana", + }, + "application/vnd.geogebra.tool": { + "source": "iana", + "extensions": ["ggt"], + }, + "application/vnd.geometry-explorer": { + "source": "iana", + "extensions": ["gex", "gre"], + }, + "application/vnd.geonext": { + "source": "iana", + "extensions": ["gxt"], + }, + "application/vnd.geoplan": { + "source": "iana", + "extensions": ["g2w"], + }, + "application/vnd.geospace": { + "source": "iana", + "extensions": ["g3w"], + }, + "application/vnd.gerber": { + "source": "iana", + }, + "application/vnd.globalplatform.card-content-mgt": { + "source": "iana", + }, + "application/vnd.globalplatform.card-content-mgt-response": { + "source": "iana", + }, + "application/vnd.gmx": { + "source": "iana", + "extensions": ["gmx"], + }, + "application/vnd.gnu.taler.exchange+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.gnu.taler.merchant+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.google-apps.document": { + "compressible": false, + "extensions": ["gdoc"], + }, + "application/vnd.google-apps.presentation": { + "compressible": false, + "extensions": ["gslides"], + }, + "application/vnd.google-apps.spreadsheet": { + "compressible": false, + "extensions": ["gsheet"], + }, + "application/vnd.google-earth.kml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["kml"], + }, + "application/vnd.google-earth.kmz": { + "source": "iana", + "compressible": false, + "extensions": ["kmz"], + }, + "application/vnd.gov.sk.e-form+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.gov.sk.e-form+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.gov.sk.xmldatacontainer+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.gpxsee.map+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.grafeq": { + "source": "iana", + "extensions": ["gqf", "gqs"], + }, + "application/vnd.gridmp": { + "source": "iana", + }, + "application/vnd.groove-account": { + "source": "iana", + "extensions": ["gac"], + }, + "application/vnd.groove-help": { + "source": "iana", + "extensions": ["ghf"], + }, + "application/vnd.groove-identity-message": { + "source": "iana", + "extensions": ["gim"], + }, + "application/vnd.groove-injector": { + "source": "iana", + "extensions": ["grv"], + }, + "application/vnd.groove-tool-message": { + "source": "iana", + "extensions": ["gtm"], + }, + "application/vnd.groove-tool-template": { + "source": "iana", + "extensions": ["tpl"], + }, + "application/vnd.groove-vcard": { + "source": "iana", + "extensions": ["vcg"], + }, + "application/vnd.hal+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.hal+xml": { + "source": "iana", + "compressible": true, + "extensions": ["hal"], + }, + "application/vnd.handheld-entertainment+xml": { + "source": "iana", + "compressible": true, + "extensions": ["zmm"], + }, + "application/vnd.hbci": { + "source": "iana", + "extensions": ["hbci"], + }, + "application/vnd.hc+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.hcl-bireports": { + "source": "iana", + }, + "application/vnd.hdt": { + "source": "iana", + }, + "application/vnd.heroku+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.hhe.lesson-player": { + "source": "iana", + "extensions": ["les"], + }, + "application/vnd.hp-hpgl": { + "source": "iana", + "extensions": ["hpgl"], + }, + "application/vnd.hp-hpid": { + "source": "iana", + "extensions": ["hpid"], + }, + "application/vnd.hp-hps": { + "source": "iana", + "extensions": ["hps"], + }, + "application/vnd.hp-jlyt": { + "source": "iana", + "extensions": ["jlt"], + }, + "application/vnd.hp-pcl": { + "source": "iana", + "extensions": ["pcl"], + }, + "application/vnd.hp-pclxl": { + "source": "iana", + "extensions": ["pclxl"], + }, + "application/vnd.hsl": { + "source": "iana", + }, + "application/vnd.httphone": { + "source": "iana", + }, + "application/vnd.hydrostatix.sof-data": { + "source": "iana", + "extensions": ["sfd-hdstx"], + }, + "application/vnd.hyper+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.hyper-item+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.hyperdrive+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.hzn-3d-crossword": { + "source": "iana", + }, + "application/vnd.ibm.afplinedata": { + "source": "apache", + }, + "application/vnd.ibm.electronic-media": { + "source": "iana", + }, + "application/vnd.ibm.minipay": { + "source": "iana", + "extensions": ["mpy"], + }, + "application/vnd.ibm.modcap": { + "source": "apache", + "extensions": ["afp", "listafp", "list3820"], + }, + "application/vnd.ibm.rights-management": { + "source": "iana", + "extensions": ["irm"], + }, + "application/vnd.ibm.secure-container": { + "source": "iana", + "extensions": ["sc"], + }, + "application/vnd.iccprofile": { + "source": "iana", + "extensions": ["icc", "icm"], + }, + "application/vnd.ieee.1905": { + "source": "iana", + }, + "application/vnd.igloader": { + "source": "iana", + "extensions": ["igl"], + }, + "application/vnd.imagemeter.folder+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.imagemeter.image+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.immervision-ivp": { + "source": "iana", + "extensions": ["ivp"], + }, + "application/vnd.immervision-ivu": { + "source": "iana", + "extensions": ["ivu"], + }, + "application/vnd.ims.imsccv1p1": { + "source": "iana", + }, + "application/vnd.ims.imsccv1p2": { + "source": "iana", + }, + "application/vnd.ims.imsccv1p3": { + "source": "iana", + }, + "application/vnd.ims.lis.v2.result+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.ims.lti.v2.toolconsumerprofile+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.ims.lti.v2.toolproxy+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.ims.lti.v2.toolproxy.id+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.ims.lti.v2.toolsettings+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.ims.lti.v2.toolsettings.simple+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.informedcontrol.rms+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.informix-visionary": { + "source": "apache", + }, + "application/vnd.infotech.project": { + "source": "iana", + }, + "application/vnd.infotech.project+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.innopath.wamp.notification": { + "source": "iana", + }, + "application/vnd.insors.igm": { + "source": "iana", + "extensions": ["igm"], + }, + "application/vnd.intercon.formnet": { + "source": "iana", + "extensions": ["xpw", "xpx"], + }, + "application/vnd.intergeo": { + "source": "iana", + "extensions": ["i2g"], + }, + "application/vnd.intertrust.digibox": { + "source": "iana", + }, + "application/vnd.intertrust.nncp": { + "source": "iana", + }, + "application/vnd.intu.qbo": { + "source": "iana", + "extensions": ["qbo"], + }, + "application/vnd.intu.qfx": { + "source": "iana", + "extensions": ["qfx"], + }, + "application/vnd.ipld.car": { + "source": "iana", + }, + "application/vnd.ipld.dag-cbor": { + "source": "iana", + }, + "application/vnd.ipld.dag-json": { + "source": "iana", + }, + "application/vnd.ipld.raw": { + "source": "iana", + }, + "application/vnd.iptc.g2.catalogitem+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.iptc.g2.conceptitem+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.iptc.g2.knowledgeitem+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.iptc.g2.newsitem+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.iptc.g2.newsmessage+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.iptc.g2.packageitem+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.iptc.g2.planningitem+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.ipunplugged.rcprofile": { + "source": "iana", + "extensions": ["rcprofile"], + }, + "application/vnd.irepository.package+xml": { + "source": "iana", + "compressible": true, + "extensions": ["irp"], + }, + "application/vnd.is-xpr": { + "source": "iana", + "extensions": ["xpr"], + }, + "application/vnd.isac.fcs": { + "source": "iana", + "extensions": ["fcs"], + }, + "application/vnd.iso11783-10+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.jam": { + "source": "iana", + "extensions": ["jam"], + }, + "application/vnd.japannet-directory-service": { + "source": "iana", + }, + "application/vnd.japannet-jpnstore-wakeup": { + "source": "iana", + }, + "application/vnd.japannet-payment-wakeup": { + "source": "iana", + }, + "application/vnd.japannet-registration": { + "source": "iana", + }, + "application/vnd.japannet-registration-wakeup": { + "source": "iana", + }, + "application/vnd.japannet-setstore-wakeup": { + "source": "iana", + }, + "application/vnd.japannet-verification": { + "source": "iana", + }, + "application/vnd.japannet-verification-wakeup": { + "source": "iana", + }, + "application/vnd.jcp.javame.midlet-rms": { + "source": "iana", + "extensions": ["rms"], + }, + "application/vnd.jisp": { + "source": "iana", + "extensions": ["jisp"], + }, + "application/vnd.joost.joda-archive": { + "source": "iana", + "extensions": ["joda"], + }, + "application/vnd.jsk.isdn-ngn": { + "source": "iana", + }, + "application/vnd.kahootz": { + "source": "iana", + "extensions": ["ktz", "ktr"], + }, + "application/vnd.kde.karbon": { + "source": "iana", + "extensions": ["karbon"], + }, + "application/vnd.kde.kchart": { + "source": "iana", + "extensions": ["chrt"], + }, + "application/vnd.kde.kformula": { + "source": "iana", + "extensions": ["kfo"], + }, + "application/vnd.kde.kivio": { + "source": "iana", + "extensions": ["flw"], + }, + "application/vnd.kde.kontour": { + "source": "iana", + "extensions": ["kon"], + }, + "application/vnd.kde.kpresenter": { + "source": "iana", + "extensions": ["kpr", "kpt"], + }, + "application/vnd.kde.kspread": { + "source": "iana", + "extensions": ["ksp"], + }, + "application/vnd.kde.kword": { + "source": "iana", + "extensions": ["kwd", "kwt"], + }, + "application/vnd.kenameaapp": { + "source": "iana", + "extensions": ["htke"], + }, + "application/vnd.kidspiration": { + "source": "iana", + "extensions": ["kia"], + }, + "application/vnd.kinar": { + "source": "iana", + "extensions": ["kne", "knp"], + }, + "application/vnd.koan": { + "source": "iana", + "extensions": ["skp", "skd", "skt", "skm"], + }, + "application/vnd.kodak-descriptor": { + "source": "iana", + "extensions": ["sse"], + }, + "application/vnd.las": { + "source": "iana", + }, + "application/vnd.las.las+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.las.las+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lasxml"], + }, + "application/vnd.laszip": { + "source": "iana", + }, + "application/vnd.leap+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.liberty-request+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.llamagraphics.life-balance.desktop": { + "source": "iana", + "extensions": ["lbd"], + }, + "application/vnd.llamagraphics.life-balance.exchange+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lbe"], + }, + "application/vnd.logipipe.circuit+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.loom": { + "source": "iana", + }, + "application/vnd.lotus-1-2-3": { + "source": "iana", + "extensions": ["123"], + }, + "application/vnd.lotus-approach": { + "source": "iana", + "extensions": ["apr"], + }, + "application/vnd.lotus-freelance": { + "source": "iana", + "extensions": ["pre"], + }, + "application/vnd.lotus-notes": { + "source": "iana", + "extensions": ["nsf"], + }, + "application/vnd.lotus-organizer": { + "source": "iana", + "extensions": ["org"], + }, + "application/vnd.lotus-screencam": { + "source": "iana", + "extensions": ["scm"], + }, + "application/vnd.lotus-wordpro": { + "source": "iana", + "extensions": ["lwp"], + }, + "application/vnd.macports.portpkg": { + "source": "iana", + "extensions": ["portpkg"], + }, + "application/vnd.mapbox-vector-tile": { + "source": "iana", + "extensions": ["mvt"], + }, + "application/vnd.marlin.drm.actiontoken+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.marlin.drm.conftoken+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.marlin.drm.license+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.marlin.drm.mdcf": { + "source": "iana", + }, + "application/vnd.mason+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.maxar.archive.3tz+zip": { + "source": "iana", + "compressible": false, + }, + "application/vnd.maxmind.maxmind-db": { + "source": "iana", + }, + "application/vnd.mcd": { + "source": "iana", + "extensions": ["mcd"], + }, + "application/vnd.medcalcdata": { + "source": "iana", + "extensions": ["mc1"], + }, + "application/vnd.mediastation.cdkey": { + "source": "iana", + "extensions": ["cdkey"], + }, + "application/vnd.medicalholodeck.recordxr": { + "source": "iana", + }, + "application/vnd.meridian-slingshot": { + "source": "iana", + }, + "application/vnd.mfer": { + "source": "iana", + "extensions": ["mwf"], + }, + "application/vnd.mfmp": { + "source": "iana", + "extensions": ["mfm"], + }, + "application/vnd.micro+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.micrografx.flo": { + "source": "iana", + "extensions": ["flo"], + }, + "application/vnd.micrografx.igx": { + "source": "iana", + "extensions": ["igx"], + }, + "application/vnd.microsoft.portable-executable": { + "source": "iana", + }, + "application/vnd.microsoft.windows.thumbnail-cache": { + "source": "iana", + }, + "application/vnd.miele+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.mif": { + "source": "iana", + "extensions": ["mif"], + }, + "application/vnd.minisoft-hp3000-save": { + "source": "iana", + }, + "application/vnd.mitsubishi.misty-guard.trustweb": { + "source": "iana", + }, + "application/vnd.mobius.daf": { + "source": "iana", + "extensions": ["daf"], + }, + "application/vnd.mobius.dis": { + "source": "iana", + "extensions": ["dis"], + }, + "application/vnd.mobius.mbk": { + "source": "iana", + "extensions": ["mbk"], + }, + "application/vnd.mobius.mqy": { + "source": "iana", + "extensions": ["mqy"], + }, + "application/vnd.mobius.msl": { + "source": "iana", + "extensions": ["msl"], + }, + "application/vnd.mobius.plc": { + "source": "iana", + "extensions": ["plc"], + }, + "application/vnd.mobius.txf": { + "source": "iana", + "extensions": ["txf"], + }, + "application/vnd.mophun.application": { + "source": "iana", + "extensions": ["mpn"], + }, + "application/vnd.mophun.certificate": { + "source": "iana", + "extensions": ["mpc"], + }, + "application/vnd.motorola.flexsuite": { + "source": "iana", + }, + "application/vnd.motorola.flexsuite.adsi": { + "source": "iana", + }, + "application/vnd.motorola.flexsuite.fis": { + "source": "iana", + }, + "application/vnd.motorola.flexsuite.gotap": { + "source": "iana", + }, + "application/vnd.motorola.flexsuite.kmr": { + "source": "iana", + }, + "application/vnd.motorola.flexsuite.ttc": { + "source": "iana", + }, + "application/vnd.motorola.flexsuite.wem": { + "source": "iana", + }, + "application/vnd.motorola.iprm": { + "source": "iana", + }, + "application/vnd.mozilla.xul+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xul"], + }, + "application/vnd.ms-3mfdocument": { + "source": "iana", + }, + "application/vnd.ms-artgalry": { + "source": "iana", + "extensions": ["cil"], + }, + "application/vnd.ms-asf": { + "source": "iana", + }, + "application/vnd.ms-cab-compressed": { + "source": "iana", + "extensions": ["cab"], + }, + "application/vnd.ms-color.iccprofile": { + "source": "apache", + }, + "application/vnd.ms-excel": { + "source": "iana", + "compressible": false, + "extensions": ["xls", "xlm", "xla", "xlc", "xlt", "xlw"], + }, + "application/vnd.ms-excel.addin.macroenabled.12": { + "source": "iana", + "extensions": ["xlam"], + }, + "application/vnd.ms-excel.sheet.binary.macroenabled.12": { + "source": "iana", + "extensions": ["xlsb"], + }, + "application/vnd.ms-excel.sheet.macroenabled.12": { + "source": "iana", + "extensions": ["xlsm"], + }, + "application/vnd.ms-excel.template.macroenabled.12": { + "source": "iana", + "extensions": ["xltm"], + }, + "application/vnd.ms-fontobject": { + "source": "iana", + "compressible": true, + "extensions": ["eot"], + }, + "application/vnd.ms-htmlhelp": { + "source": "iana", + "extensions": ["chm"], + }, + "application/vnd.ms-ims": { + "source": "iana", + "extensions": ["ims"], + }, + "application/vnd.ms-lrm": { + "source": "iana", + "extensions": ["lrm"], + }, + "application/vnd.ms-office.activex+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.ms-officetheme": { + "source": "iana", + "extensions": ["thmx"], + }, + "application/vnd.ms-opentype": { + "source": "apache", + "compressible": true, + }, + "application/vnd.ms-outlook": { + "compressible": false, + "extensions": ["msg"], + }, + "application/vnd.ms-package.obfuscated-opentype": { + "source": "apache", + }, + "application/vnd.ms-pki.seccat": { + "source": "apache", + "extensions": ["cat"], + }, + "application/vnd.ms-pki.stl": { + "source": "apache", + "extensions": ["stl"], + }, + "application/vnd.ms-playready.initiator+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.ms-powerpoint": { + "source": "iana", + "compressible": false, + "extensions": ["ppt", "pps", "pot"], + }, + "application/vnd.ms-powerpoint.addin.macroenabled.12": { + "source": "iana", + "extensions": ["ppam"], + }, + "application/vnd.ms-powerpoint.presentation.macroenabled.12": { + "source": "iana", + "extensions": ["pptm"], + }, + "application/vnd.ms-powerpoint.slide.macroenabled.12": { + "source": "iana", + "extensions": ["sldm"], + }, + "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { + "source": "iana", + "extensions": ["ppsm"], + }, + "application/vnd.ms-powerpoint.template.macroenabled.12": { + "source": "iana", + "extensions": ["potm"], + }, + "application/vnd.ms-printdevicecapabilities+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.ms-printing.printticket+xml": { + "source": "apache", + "compressible": true, + }, + "application/vnd.ms-printschematicket+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.ms-project": { + "source": "iana", + "extensions": ["mpp", "mpt"], + }, + "application/vnd.ms-tnef": { + "source": "iana", + }, + "application/vnd.ms-windows.devicepairing": { + "source": "iana", + }, + "application/vnd.ms-windows.nwprinting.oob": { + "source": "iana", + }, + "application/vnd.ms-windows.printerpairing": { + "source": "iana", + }, + "application/vnd.ms-windows.wsd.oob": { + "source": "iana", + }, + "application/vnd.ms-wmdrm.lic-chlg-req": { + "source": "iana", + }, + "application/vnd.ms-wmdrm.lic-resp": { + "source": "iana", + }, + "application/vnd.ms-wmdrm.meter-chlg-req": { + "source": "iana", + }, + "application/vnd.ms-wmdrm.meter-resp": { + "source": "iana", + }, + "application/vnd.ms-word.document.macroenabled.12": { + "source": "iana", + "extensions": ["docm"], + }, + "application/vnd.ms-word.template.macroenabled.12": { + "source": "iana", + "extensions": ["dotm"], + }, + "application/vnd.ms-works": { + "source": "iana", + "extensions": ["wps", "wks", "wcm", "wdb"], + }, + "application/vnd.ms-wpl": { + "source": "iana", + "extensions": ["wpl"], + }, + "application/vnd.ms-xpsdocument": { + "source": "iana", + "compressible": false, + "extensions": ["xps"], + }, + "application/vnd.msa-disk-image": { + "source": "iana", + }, + "application/vnd.mseq": { + "source": "iana", + "extensions": ["mseq"], + }, + "application/vnd.msign": { + "source": "iana", + }, + "application/vnd.multiad.creator": { + "source": "iana", + }, + "application/vnd.multiad.creator.cif": { + "source": "iana", + }, + "application/vnd.music-niff": { + "source": "iana", + }, + "application/vnd.musician": { + "source": "iana", + "extensions": ["mus"], + }, + "application/vnd.muvee.style": { + "source": "iana", + "extensions": ["msty"], + }, + "application/vnd.mynfc": { + "source": "iana", + "extensions": ["taglet"], + }, + "application/vnd.nacamar.ybrid+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.ncd.control": { + "source": "iana", + }, + "application/vnd.ncd.reference": { + "source": "iana", + }, + "application/vnd.nearst.inv+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.nebumind.line": { + "source": "iana", + }, + "application/vnd.nervana": { + "source": "iana", + }, + "application/vnd.netfpx": { + "source": "iana", + }, + "application/vnd.neurolanguage.nlu": { + "source": "iana", + "extensions": ["nlu"], + }, + "application/vnd.nimn": { + "source": "iana", + }, + "application/vnd.nintendo.nitro.rom": { + "source": "iana", + }, + "application/vnd.nintendo.snes.rom": { + "source": "iana", + }, + "application/vnd.nitf": { + "source": "iana", + "extensions": ["ntf", "nitf"], + }, + "application/vnd.noblenet-directory": { + "source": "iana", + "extensions": ["nnd"], + }, + "application/vnd.noblenet-sealer": { + "source": "iana", + "extensions": ["nns"], + }, + "application/vnd.noblenet-web": { + "source": "iana", + "extensions": ["nnw"], + }, + "application/vnd.nokia.catalogs": { + "source": "iana", + }, + "application/vnd.nokia.conml+wbxml": { + "source": "iana", + }, + "application/vnd.nokia.conml+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.nokia.iptv.config+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.nokia.isds-radio-presets": { + "source": "iana", + }, + "application/vnd.nokia.landmark+wbxml": { + "source": "iana", + }, + "application/vnd.nokia.landmark+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.nokia.landmarkcollection+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.nokia.n-gage.ac+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ac"], + }, + "application/vnd.nokia.n-gage.data": { + "source": "iana", + "extensions": ["ngdat"], + }, + "application/vnd.nokia.n-gage.symbian.install": { + "source": "apache", + "extensions": ["n-gage"], + }, + "application/vnd.nokia.ncd": { + "source": "iana", + }, + "application/vnd.nokia.pcd+wbxml": { + "source": "iana", + }, + "application/vnd.nokia.pcd+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.nokia.radio-preset": { + "source": "iana", + "extensions": ["rpst"], + }, + "application/vnd.nokia.radio-presets": { + "source": "iana", + "extensions": ["rpss"], + }, + "application/vnd.novadigm.edm": { + "source": "iana", + "extensions": ["edm"], + }, + "application/vnd.novadigm.edx": { + "source": "iana", + "extensions": ["edx"], + }, + "application/vnd.novadigm.ext": { + "source": "iana", + "extensions": ["ext"], + }, + "application/vnd.ntt-local.content-share": { + "source": "iana", + }, + "application/vnd.ntt-local.file-transfer": { + "source": "iana", + }, + "application/vnd.ntt-local.ogw_remote-access": { + "source": "iana", + }, + "application/vnd.ntt-local.sip-ta_remote": { + "source": "iana", + }, + "application/vnd.ntt-local.sip-ta_tcp_stream": { + "source": "iana", + }, + "application/vnd.oasis.opendocument.base": { + "source": "iana", + }, + "application/vnd.oasis.opendocument.chart": { + "source": "iana", + "extensions": ["odc"], + }, + "application/vnd.oasis.opendocument.chart-template": { + "source": "iana", + "extensions": ["otc"], + }, + "application/vnd.oasis.opendocument.database": { + "source": "apache", + "extensions": ["odb"], + }, + "application/vnd.oasis.opendocument.formula": { + "source": "iana", + "extensions": ["odf"], + }, + "application/vnd.oasis.opendocument.formula-template": { + "source": "iana", + "extensions": ["odft"], + }, + "application/vnd.oasis.opendocument.graphics": { + "source": "iana", + "compressible": false, + "extensions": ["odg"], + }, + "application/vnd.oasis.opendocument.graphics-template": { + "source": "iana", + "extensions": ["otg"], + }, + "application/vnd.oasis.opendocument.image": { + "source": "iana", + "extensions": ["odi"], + }, + "application/vnd.oasis.opendocument.image-template": { + "source": "iana", + "extensions": ["oti"], + }, + "application/vnd.oasis.opendocument.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["odp"], + }, + "application/vnd.oasis.opendocument.presentation-template": { + "source": "iana", + "extensions": ["otp"], + }, + "application/vnd.oasis.opendocument.spreadsheet": { + "source": "iana", + "compressible": false, + "extensions": ["ods"], + }, + "application/vnd.oasis.opendocument.spreadsheet-template": { + "source": "iana", + "extensions": ["ots"], + }, + "application/vnd.oasis.opendocument.text": { + "source": "iana", + "compressible": false, + "extensions": ["odt"], + }, + "application/vnd.oasis.opendocument.text-master": { + "source": "iana", + "extensions": ["odm"], + }, + "application/vnd.oasis.opendocument.text-template": { + "source": "iana", + "extensions": ["ott"], + }, + "application/vnd.oasis.opendocument.text-web": { + "source": "iana", + "extensions": ["oth"], + }, + "application/vnd.obn": { + "source": "iana", + }, + "application/vnd.ocf+cbor": { + "source": "iana", + }, + "application/vnd.oci.image.manifest.v1+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oftn.l10n+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oipf.contentaccessdownload+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oipf.contentaccessstreaming+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oipf.cspg-hexbinary": { + "source": "iana", + }, + "application/vnd.oipf.dae.svg+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oipf.dae.xhtml+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oipf.mippvcontrolmessage+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oipf.pae.gem": { + "source": "iana", + }, + "application/vnd.oipf.spdiscovery+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oipf.spdlist+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oipf.ueprofile+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oipf.userprofile+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.olpc-sugar": { + "source": "iana", + "extensions": ["xo"], + }, + "application/vnd.oma-scws-config": { + "source": "iana", + }, + "application/vnd.oma-scws-http-request": { + "source": "iana", + }, + "application/vnd.oma-scws-http-response": { + "source": "iana", + }, + "application/vnd.oma.bcast.associated-procedure-parameter+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.bcast.drm-trigger+xml": { + "source": "apache", + "compressible": true, + }, + "application/vnd.oma.bcast.imd+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.bcast.ltkm": { + "source": "iana", + }, + "application/vnd.oma.bcast.notification+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.bcast.provisioningtrigger": { + "source": "iana", + }, + "application/vnd.oma.bcast.sgboot": { + "source": "iana", + }, + "application/vnd.oma.bcast.sgdd+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.bcast.sgdu": { + "source": "iana", + }, + "application/vnd.oma.bcast.simple-symbol-container": { + "source": "iana", + }, + "application/vnd.oma.bcast.smartcard-trigger+xml": { + "source": "apache", + "compressible": true, + }, + "application/vnd.oma.bcast.sprov+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.bcast.stkm": { + "source": "iana", + }, + "application/vnd.oma.cab-address-book+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.cab-feature-handler+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.cab-pcc+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.cab-subs-invite+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.cab-user-prefs+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.dcd": { + "source": "iana", + }, + "application/vnd.oma.dcdc": { + "source": "iana", + }, + "application/vnd.oma.dd2+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dd2"], + }, + "application/vnd.oma.drm.risd+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.group-usage-list+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.lwm2m+cbor": { + "source": "iana", + }, + "application/vnd.oma.lwm2m+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.lwm2m+tlv": { + "source": "iana", + }, + "application/vnd.oma.pal+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.poc.detailed-progress-report+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.poc.final-report+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.poc.groups+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.poc.invocation-descriptor+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.poc.optimized-progress-report+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.push": { + "source": "iana", + }, + "application/vnd.oma.scidm.messages+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oma.xcap-directory+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.omads-email+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/vnd.omads-file+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/vnd.omads-folder+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/vnd.omaloc-supl-init": { + "source": "iana", + }, + "application/vnd.onepager": { + "source": "iana", + }, + "application/vnd.onepagertamp": { + "source": "iana", + }, + "application/vnd.onepagertamx": { + "source": "iana", + }, + "application/vnd.onepagertat": { + "source": "iana", + }, + "application/vnd.onepagertatp": { + "source": "iana", + }, + "application/vnd.onepagertatx": { + "source": "iana", + }, + "application/vnd.onvif.metadata": { + "source": "iana", + }, + "application/vnd.openblox.game+xml": { + "source": "iana", + "compressible": true, + "extensions": ["obgx"], + }, + "application/vnd.openblox.game-binary": { + "source": "iana", + }, + "application/vnd.openeye.oeb": { + "source": "iana", + }, + "application/vnd.openofficeorg.extension": { + "source": "apache", + "extensions": ["oxt"], + }, + "application/vnd.openstreetmap.data+xml": { + "source": "iana", + "compressible": true, + "extensions": ["osm"], + }, + "application/vnd.opentimestamps.ots": { + "source": "iana", + }, + "application/vnd.openxmlformats-officedocument.custom-properties+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.drawing+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.extended-properties+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["pptx"], + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide": { + "source": "iana", + "extensions": ["sldx"], + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { + "source": "iana", + "extensions": ["ppsx"], + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.presentationml.template": { + "source": "iana", + "extensions": ["potx"], + }, + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { + "source": "iana", + "compressible": false, + "extensions": ["xlsx"], + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { + "source": "iana", + "extensions": ["xltx"], + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.theme+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.themeoverride+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.vmldrawing": { + "source": "iana", + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { + "source": "iana", + "compressible": false, + "extensions": ["docx"], + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { + "source": "iana", + "extensions": ["dotx"], + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": + { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-package.core-properties+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.openxmlformats-package.relationships+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oracle.resource+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.orange.indata": { + "source": "iana", + }, + "application/vnd.osa.netdeploy": { + "source": "iana", + }, + "application/vnd.osgeo.mapguide.package": { + "source": "iana", + "extensions": ["mgp"], + }, + "application/vnd.osgi.bundle": { + "source": "iana", + }, + "application/vnd.osgi.dp": { + "source": "iana", + "extensions": ["dp"], + }, + "application/vnd.osgi.subsystem": { + "source": "iana", + "extensions": ["esa"], + }, + "application/vnd.otps.ct-kip+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.oxli.countgraph": { + "source": "iana", + }, + "application/vnd.pagerduty+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.palm": { + "source": "iana", + "extensions": ["pdb", "pqa", "oprc"], + }, + "application/vnd.panoply": { + "source": "iana", + }, + "application/vnd.paos.xml": { + "source": "iana", + }, + "application/vnd.patentdive": { + "source": "iana", + }, + "application/vnd.patientecommsdoc": { + "source": "iana", + }, + "application/vnd.pawaafile": { + "source": "iana", + "extensions": ["paw"], + }, + "application/vnd.pcos": { + "source": "iana", + }, + "application/vnd.pg.format": { + "source": "iana", + "extensions": ["str"], + }, + "application/vnd.pg.osasli": { + "source": "iana", + "extensions": ["ei6"], + }, + "application/vnd.piaccess.application-licence": { + "source": "iana", + }, + "application/vnd.picsel": { + "source": "iana", + "extensions": ["efif"], + }, + "application/vnd.pmi.widget": { + "source": "iana", + "extensions": ["wg"], + }, + "application/vnd.poc.group-advertisement+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.pocketlearn": { + "source": "iana", + "extensions": ["plf"], + }, + "application/vnd.powerbuilder6": { + "source": "iana", + "extensions": ["pbd"], + }, + "application/vnd.powerbuilder6-s": { + "source": "iana", + }, + "application/vnd.powerbuilder7": { + "source": "iana", + }, + "application/vnd.powerbuilder7-s": { + "source": "iana", + }, + "application/vnd.powerbuilder75": { + "source": "iana", + }, + "application/vnd.powerbuilder75-s": { + "source": "iana", + }, + "application/vnd.preminet": { + "source": "iana", + }, + "application/vnd.previewsystems.box": { + "source": "iana", + "extensions": ["box"], + }, + "application/vnd.proteus.magazine": { + "source": "iana", + "extensions": ["mgz"], + }, + "application/vnd.psfs": { + "source": "iana", + }, + "application/vnd.publishare-delta-tree": { + "source": "iana", + "extensions": ["qps"], + }, + "application/vnd.pvi.ptid1": { + "source": "iana", + "extensions": ["ptid"], + }, + "application/vnd.pwg-multiplexed": { + "source": "iana", + }, + "application/vnd.pwg-xhtml-print+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xhtm"], + }, + "application/vnd.qualcomm.brew-app-res": { + "source": "iana", + }, + "application/vnd.quarantainenet": { + "source": "iana", + }, + "application/vnd.quark.quarkxpress": { + "source": "iana", + "extensions": ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"], + }, + "application/vnd.quobject-quoxdocument": { + "source": "iana", + }, + "application/vnd.radisys.moml+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.radisys.msml+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.radisys.msml-audit+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.radisys.msml-audit-conf+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.radisys.msml-audit-conn+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.radisys.msml-audit-dialog+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.radisys.msml-audit-stream+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.radisys.msml-conf+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.radisys.msml-dialog+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.radisys.msml-dialog-base+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.radisys.msml-dialog-fax-detect+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.radisys.msml-dialog-group+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.radisys.msml-dialog-speech+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.radisys.msml-dialog-transform+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.rainstor.data": { + "source": "iana", + }, + "application/vnd.rapid": { + "source": "iana", + }, + "application/vnd.rar": { + "source": "iana", + "extensions": ["rar"], + }, + "application/vnd.realvnc.bed": { + "source": "iana", + "extensions": ["bed"], + }, + "application/vnd.recordare.musicxml": { + "source": "iana", + "extensions": ["mxl"], + }, + "application/vnd.recordare.musicxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["musicxml"], + }, + "application/vnd.renlearn.rlprint": { + "source": "iana", + }, + "application/vnd.resilient.logic": { + "source": "iana", + }, + "application/vnd.restful+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.rig.cryptonote": { + "source": "iana", + "extensions": ["cryptonote"], + }, + "application/vnd.rim.cod": { + "source": "apache", + "extensions": ["cod"], + }, + "application/vnd.rn-realmedia": { + "source": "apache", + "extensions": ["rm"], + }, + "application/vnd.rn-realmedia-vbr": { + "source": "apache", + "extensions": ["rmvb"], + }, + "application/vnd.route66.link66+xml": { + "source": "iana", + "compressible": true, + "extensions": ["link66"], + }, + "application/vnd.rs-274x": { + "source": "iana", + }, + "application/vnd.ruckus.download": { + "source": "iana", + }, + "application/vnd.s3sms": { + "source": "iana", + }, + "application/vnd.sailingtracker.track": { + "source": "iana", + "extensions": ["st"], + }, + "application/vnd.sar": { + "source": "iana", + }, + "application/vnd.sbm.cid": { + "source": "iana", + }, + "application/vnd.sbm.mid2": { + "source": "iana", + }, + "application/vnd.scribus": { + "source": "iana", + }, + "application/vnd.sealed.3df": { + "source": "iana", + }, + "application/vnd.sealed.csf": { + "source": "iana", + }, + "application/vnd.sealed.doc": { + "source": "iana", + }, + "application/vnd.sealed.eml": { + "source": "iana", + }, + "application/vnd.sealed.mht": { + "source": "iana", + }, + "application/vnd.sealed.net": { + "source": "iana", + }, + "application/vnd.sealed.ppt": { + "source": "iana", + }, + "application/vnd.sealed.tiff": { + "source": "iana", + }, + "application/vnd.sealed.xls": { + "source": "iana", + }, + "application/vnd.sealedmedia.softseal.html": { + "source": "iana", + }, + "application/vnd.sealedmedia.softseal.pdf": { + "source": "iana", + }, + "application/vnd.seemail": { + "source": "iana", + "extensions": ["see"], + }, + "application/vnd.seis+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.sema": { + "source": "iana", + "extensions": ["sema"], + }, + "application/vnd.semd": { + "source": "iana", + "extensions": ["semd"], + }, + "application/vnd.semf": { + "source": "iana", + "extensions": ["semf"], + }, + "application/vnd.shade-save-file": { + "source": "iana", + }, + "application/vnd.shana.informed.formdata": { + "source": "iana", + "extensions": ["ifm"], + }, + "application/vnd.shana.informed.formtemplate": { + "source": "iana", + "extensions": ["itp"], + }, + "application/vnd.shana.informed.interchange": { + "source": "iana", + "extensions": ["iif"], + }, + "application/vnd.shana.informed.package": { + "source": "iana", + "extensions": ["ipk"], + }, + "application/vnd.shootproof+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.shopkick+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.shp": { + "source": "iana", + }, + "application/vnd.shx": { + "source": "iana", + }, + "application/vnd.sigrok.session": { + "source": "iana", + }, + "application/vnd.simtech-mindmapper": { + "source": "iana", + "extensions": ["twd", "twds"], + }, + "application/vnd.siren+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.smaf": { + "source": "iana", + "extensions": ["mmf"], + }, + "application/vnd.smart.notebook": { + "source": "iana", + }, + "application/vnd.smart.teacher": { + "source": "iana", + "extensions": ["teacher"], + }, + "application/vnd.smintio.portals.archive": { + "source": "iana", + }, + "application/vnd.snesdev-page-table": { + "source": "iana", + }, + "application/vnd.software602.filler.form+xml": { + "source": "iana", + "compressible": true, + "extensions": ["fo"], + }, + "application/vnd.software602.filler.form-xml-zip": { + "source": "iana", + }, + "application/vnd.solent.sdkm+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sdkm", "sdkd"], + }, + "application/vnd.spotfire.dxp": { + "source": "iana", + "extensions": ["dxp"], + }, + "application/vnd.spotfire.sfs": { + "source": "iana", + "extensions": ["sfs"], + }, + "application/vnd.sqlite3": { + "source": "iana", + }, + "application/vnd.sss-cod": { + "source": "iana", + }, + "application/vnd.sss-dtf": { + "source": "iana", + }, + "application/vnd.sss-ntf": { + "source": "iana", + }, + "application/vnd.stardivision.calc": { + "source": "apache", + "extensions": ["sdc"], + }, + "application/vnd.stardivision.draw": { + "source": "apache", + "extensions": ["sda"], + }, + "application/vnd.stardivision.impress": { + "source": "apache", + "extensions": ["sdd"], + }, + "application/vnd.stardivision.math": { + "source": "apache", + "extensions": ["smf"], + }, + "application/vnd.stardivision.writer": { + "source": "apache", + "extensions": ["sdw", "vor"], + }, + "application/vnd.stardivision.writer-global": { + "source": "apache", + "extensions": ["sgl"], + }, + "application/vnd.stepmania.package": { + "source": "iana", + "extensions": ["smzip"], + }, + "application/vnd.stepmania.stepchart": { + "source": "iana", + "extensions": ["sm"], + }, + "application/vnd.street-stream": { + "source": "iana", + }, + "application/vnd.sun.wadl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wadl"], + }, + "application/vnd.sun.xml.calc": { + "source": "apache", + "extensions": ["sxc"], + }, + "application/vnd.sun.xml.calc.template": { + "source": "apache", + "extensions": ["stc"], + }, + "application/vnd.sun.xml.draw": { + "source": "apache", + "extensions": ["sxd"], + }, + "application/vnd.sun.xml.draw.template": { + "source": "apache", + "extensions": ["std"], + }, + "application/vnd.sun.xml.impress": { + "source": "apache", + "extensions": ["sxi"], + }, + "application/vnd.sun.xml.impress.template": { + "source": "apache", + "extensions": ["sti"], + }, + "application/vnd.sun.xml.math": { + "source": "apache", + "extensions": ["sxm"], + }, + "application/vnd.sun.xml.writer": { + "source": "apache", + "extensions": ["sxw"], + }, + "application/vnd.sun.xml.writer.global": { + "source": "apache", + "extensions": ["sxg"], + }, + "application/vnd.sun.xml.writer.template": { + "source": "apache", + "extensions": ["stw"], + }, + "application/vnd.sus-calendar": { + "source": "iana", + "extensions": ["sus", "susp"], + }, + "application/vnd.svd": { + "source": "iana", + "extensions": ["svd"], + }, + "application/vnd.swiftview-ics": { + "source": "iana", + }, + "application/vnd.sybyl.mol2": { + "source": "iana", + }, + "application/vnd.sycle+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.syft+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.symbian.install": { + "source": "apache", + "extensions": ["sis", "sisx"], + }, + "application/vnd.syncml+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["xsm"], + }, + "application/vnd.syncml.dm+wbxml": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["bdm"], + }, + "application/vnd.syncml.dm+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["xdm"], + }, + "application/vnd.syncml.dm.notification": { + "source": "iana", + }, + "application/vnd.syncml.dmddf+wbxml": { + "source": "iana", + }, + "application/vnd.syncml.dmddf+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["ddf"], + }, + "application/vnd.syncml.dmtnds+wbxml": { + "source": "iana", + }, + "application/vnd.syncml.dmtnds+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + }, + "application/vnd.syncml.ds.notification": { + "source": "iana", + }, + "application/vnd.tableschema+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.tao.intent-module-archive": { + "source": "iana", + "extensions": ["tao"], + }, + "application/vnd.tcpdump.pcap": { + "source": "iana", + "extensions": ["pcap", "cap", "dmp"], + }, + "application/vnd.think-cell.ppttc+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.tmd.mediaflex.api+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.tml": { + "source": "iana", + }, + "application/vnd.tmobile-livetv": { + "source": "iana", + "extensions": ["tmo"], + }, + "application/vnd.tri.onesource": { + "source": "iana", + }, + "application/vnd.trid.tpt": { + "source": "iana", + "extensions": ["tpt"], + }, + "application/vnd.triscape.mxs": { + "source": "iana", + "extensions": ["mxs"], + }, + "application/vnd.trueapp": { + "source": "iana", + "extensions": ["tra"], + }, + "application/vnd.truedoc": { + "source": "iana", + }, + "application/vnd.ubisoft.webplayer": { + "source": "iana", + }, + "application/vnd.ufdl": { + "source": "iana", + "extensions": ["ufd", "ufdl"], + }, + "application/vnd.uiq.theme": { + "source": "iana", + "extensions": ["utz"], + }, + "application/vnd.umajin": { + "source": "iana", + "extensions": ["umj"], + }, + "application/vnd.unity": { + "source": "iana", + "extensions": ["unityweb"], + }, + "application/vnd.uoml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["uoml", "uo"], + }, + "application/vnd.uplanet.alert": { + "source": "iana", + }, + "application/vnd.uplanet.alert-wbxml": { + "source": "iana", + }, + "application/vnd.uplanet.bearer-choice": { + "source": "iana", + }, + "application/vnd.uplanet.bearer-choice-wbxml": { + "source": "iana", + }, + "application/vnd.uplanet.cacheop": { + "source": "iana", + }, + "application/vnd.uplanet.cacheop-wbxml": { + "source": "iana", + }, + "application/vnd.uplanet.channel": { + "source": "iana", + }, + "application/vnd.uplanet.channel-wbxml": { + "source": "iana", + }, + "application/vnd.uplanet.list": { + "source": "iana", + }, + "application/vnd.uplanet.list-wbxml": { + "source": "iana", + }, + "application/vnd.uplanet.listcmd": { + "source": "iana", + }, + "application/vnd.uplanet.listcmd-wbxml": { + "source": "iana", + }, + "application/vnd.uplanet.signal": { + "source": "iana", + }, + "application/vnd.uri-map": { + "source": "iana", + }, + "application/vnd.valve.source.material": { + "source": "iana", + }, + "application/vnd.vcx": { + "source": "iana", + "extensions": ["vcx"], + }, + "application/vnd.vd-study": { + "source": "iana", + }, + "application/vnd.vectorworks": { + "source": "iana", + }, + "application/vnd.vel+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.verimatrix.vcas": { + "source": "iana", + }, + "application/vnd.veritone.aion+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.veryant.thin": { + "source": "iana", + }, + "application/vnd.ves.encrypted": { + "source": "iana", + }, + "application/vnd.vidsoft.vidconference": { + "source": "iana", + }, + "application/vnd.visio": { + "source": "iana", + "extensions": ["vsd", "vst", "vss", "vsw"], + }, + "application/vnd.visionary": { + "source": "iana", + "extensions": ["vis"], + }, + "application/vnd.vividence.scriptfile": { + "source": "iana", + }, + "application/vnd.vsf": { + "source": "iana", + "extensions": ["vsf"], + }, + "application/vnd.wap.sic": { + "source": "iana", + }, + "application/vnd.wap.slc": { + "source": "iana", + }, + "application/vnd.wap.wbxml": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["wbxml"], + }, + "application/vnd.wap.wmlc": { + "source": "iana", + "extensions": ["wmlc"], + }, + "application/vnd.wap.wmlscriptc": { + "source": "iana", + "extensions": ["wmlsc"], + }, + "application/vnd.wasmflow.wafl": { + "source": "iana", + }, + "application/vnd.webturbo": { + "source": "iana", + "extensions": ["wtb"], + }, + "application/vnd.wfa.dpp": { + "source": "iana", + }, + "application/vnd.wfa.p2p": { + "source": "iana", + }, + "application/vnd.wfa.wsc": { + "source": "iana", + }, + "application/vnd.windows.devicepairing": { + "source": "iana", + }, + "application/vnd.wmc": { + "source": "iana", + }, + "application/vnd.wmf.bootstrap": { + "source": "iana", + }, + "application/vnd.wolfram.mathematica": { + "source": "iana", + }, + "application/vnd.wolfram.mathematica.package": { + "source": "iana", + }, + "application/vnd.wolfram.player": { + "source": "iana", + "extensions": ["nbp"], + }, + "application/vnd.wordlift": { + "source": "iana", + }, + "application/vnd.wordperfect": { + "source": "iana", + "extensions": ["wpd"], + }, + "application/vnd.wqd": { + "source": "iana", + "extensions": ["wqd"], + }, + "application/vnd.wrq-hp3000-labelled": { + "source": "iana", + }, + "application/vnd.wt.stf": { + "source": "iana", + "extensions": ["stf"], + }, + "application/vnd.wv.csp+wbxml": { + "source": "iana", + }, + "application/vnd.wv.csp+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.wv.ssp+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.xacml+json": { + "source": "iana", + "compressible": true, + }, + "application/vnd.xara": { + "source": "iana", + "extensions": ["xar"], + }, + "application/vnd.xfdl": { + "source": "iana", + "extensions": ["xfdl"], + }, + "application/vnd.xfdl.webform": { + "source": "iana", + }, + "application/vnd.xmi+xml": { + "source": "iana", + "compressible": true, + }, + "application/vnd.xmpie.cpkg": { + "source": "iana", + }, + "application/vnd.xmpie.dpkg": { + "source": "iana", + }, + "application/vnd.xmpie.plan": { + "source": "iana", + }, + "application/vnd.xmpie.ppkg": { + "source": "iana", + }, + "application/vnd.xmpie.xlim": { + "source": "iana", + }, + "application/vnd.yamaha.hv-dic": { + "source": "iana", + "extensions": ["hvd"], + }, + "application/vnd.yamaha.hv-script": { + "source": "iana", + "extensions": ["hvs"], + }, + "application/vnd.yamaha.hv-voice": { + "source": "iana", + "extensions": ["hvp"], + }, + "application/vnd.yamaha.openscoreformat": { + "source": "iana", + "extensions": ["osf"], + }, + "application/vnd.yamaha.openscoreformat.osfpvg+xml": { + "source": "iana", + "compressible": true, + "extensions": ["osfpvg"], + }, + "application/vnd.yamaha.remote-setup": { + "source": "iana", + }, + "application/vnd.yamaha.smaf-audio": { + "source": "iana", + "extensions": ["saf"], + }, + "application/vnd.yamaha.smaf-phrase": { + "source": "iana", + "extensions": ["spf"], + }, + "application/vnd.yamaha.through-ngn": { + "source": "iana", + }, + "application/vnd.yamaha.tunnel-udpencap": { + "source": "iana", + }, + "application/vnd.yaoweme": { + "source": "iana", + }, + "application/vnd.yellowriver-custom-menu": { + "source": "iana", + "extensions": ["cmp"], + }, + "application/vnd.zul": { + "source": "iana", + "extensions": ["zir", "zirz"], + }, + "application/vnd.zzazz.deck+xml": { + "source": "iana", + "compressible": true, + "extensions": ["zaz"], + }, + "application/voicexml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["vxml"], + }, + "application/voucher-cms+json": { + "source": "iana", + "compressible": true, + }, + "application/vq-rtcpxr": { + "source": "iana", + }, + "application/wasm": { + "source": "iana", + "compressible": true, + "extensions": ["wasm"], + }, + "application/watcherinfo+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wif"], + }, + "application/webpush-options+json": { + "source": "iana", + "compressible": true, + }, + "application/whoispp-query": { + "source": "iana", + }, + "application/whoispp-response": { + "source": "iana", + }, + "application/widget": { + "source": "iana", + "extensions": ["wgt"], + }, + "application/winhlp": { + "source": "apache", + "extensions": ["hlp"], + }, + "application/wita": { + "source": "iana", + }, + "application/wordperfect5.1": { + "source": "iana", + }, + "application/wsdl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wsdl"], + }, + "application/wspolicy+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wspolicy"], + }, + "application/x-7z-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["7z"], + }, + "application/x-abiword": { + "source": "apache", + "extensions": ["abw"], + }, + "application/x-ace-compressed": { + "source": "apache", + "extensions": ["ace"], + }, + "application/x-amf": { + "source": "apache", + }, + "application/x-apple-diskimage": { + "source": "apache", + "extensions": ["dmg"], + }, + "application/x-arj": { + "compressible": false, + "extensions": ["arj"], + }, + "application/x-authorware-bin": { + "source": "apache", + "extensions": ["aab", "x32", "u32", "vox"], + }, + "application/x-authorware-map": { + "source": "apache", + "extensions": ["aam"], + }, + "application/x-authorware-seg": { + "source": "apache", + "extensions": ["aas"], + }, + "application/x-bcpio": { + "source": "apache", + "extensions": ["bcpio"], + }, + "application/x-bdoc": { + "compressible": false, + "extensions": ["bdoc"], + }, + "application/x-bittorrent": { + "source": "apache", + "extensions": ["torrent"], + }, + "application/x-blorb": { + "source": "apache", + "extensions": ["blb", "blorb"], + }, + "application/x-bzip": { + "source": "apache", + "compressible": false, + "extensions": ["bz"], + }, + "application/x-bzip2": { + "source": "apache", + "compressible": false, + "extensions": ["bz2", "boz"], + }, + "application/x-cbr": { + "source": "apache", + "extensions": ["cbr", "cba", "cbt", "cbz", "cb7"], + }, + "application/x-cdlink": { + "source": "apache", + "extensions": ["vcd"], + }, + "application/x-cfs-compressed": { + "source": "apache", + "extensions": ["cfs"], + }, + "application/x-chat": { + "source": "apache", + "extensions": ["chat"], + }, + "application/x-chess-pgn": { + "source": "apache", + "extensions": ["pgn"], + }, + "application/x-chrome-extension": { + "extensions": ["crx"], + }, + "application/x-cocoa": { + "source": "nginx", + "extensions": ["cco"], + }, + "application/x-compress": { + "source": "apache", + }, + "application/x-conference": { + "source": "apache", + "extensions": ["nsc"], + }, + "application/x-cpio": { + "source": "apache", + "extensions": ["cpio"], + }, + "application/x-csh": { + "source": "apache", + "extensions": ["csh"], + }, + "application/x-deb": { + "compressible": false, + }, + "application/x-debian-package": { + "source": "apache", + "extensions": ["deb", "udeb"], + }, + "application/x-dgc-compressed": { + "source": "apache", + "extensions": ["dgc"], + }, + "application/x-director": { + "source": "apache", + "extensions": [ + "dir", + "dcr", + "dxr", + "cst", + "cct", + "cxt", + "w3d", + "fgd", + "swa", + ], + }, + "application/x-doom": { + "source": "apache", + "extensions": ["wad"], + }, + "application/x-dtbncx+xml": { + "source": "apache", + "compressible": true, + "extensions": ["ncx"], + }, + "application/x-dtbook+xml": { + "source": "apache", + "compressible": true, + "extensions": ["dtb"], + }, + "application/x-dtbresource+xml": { + "source": "apache", + "compressible": true, + "extensions": ["res"], + }, + "application/x-dvi": { + "source": "apache", + "compressible": false, + "extensions": ["dvi"], + }, + "application/x-envoy": { + "source": "apache", + "extensions": ["evy"], + }, + "application/x-eva": { + "source": "apache", + "extensions": ["eva"], + }, + "application/x-font-bdf": { + "source": "apache", + "extensions": ["bdf"], + }, + "application/x-font-dos": { + "source": "apache", + }, + "application/x-font-framemaker": { + "source": "apache", + }, + "application/x-font-ghostscript": { + "source": "apache", + "extensions": ["gsf"], + }, + "application/x-font-libgrx": { + "source": "apache", + }, + "application/x-font-linux-psf": { + "source": "apache", + "extensions": ["psf"], + }, + "application/x-font-pcf": { + "source": "apache", + "extensions": ["pcf"], + }, + "application/x-font-snf": { + "source": "apache", + "extensions": ["snf"], + }, + "application/x-font-speedo": { + "source": "apache", + }, + "application/x-font-sunos-news": { + "source": "apache", + }, + "application/x-font-type1": { + "source": "apache", + "extensions": ["pfa", "pfb", "pfm", "afm"], + }, + "application/x-font-vfont": { + "source": "apache", + }, + "application/x-freearc": { + "source": "apache", + "extensions": ["arc"], + }, + "application/x-futuresplash": { + "source": "apache", + "extensions": ["spl"], + }, + "application/x-gca-compressed": { + "source": "apache", + "extensions": ["gca"], + }, + "application/x-glulx": { + "source": "apache", + "extensions": ["ulx"], + }, + "application/x-gnumeric": { + "source": "apache", + "extensions": ["gnumeric"], + }, + "application/x-gramps-xml": { + "source": "apache", + "extensions": ["gramps"], + }, + "application/x-gtar": { + "source": "apache", + "extensions": ["gtar"], + }, + "application/x-gzip": { + "source": "apache", + }, + "application/x-hdf": { + "source": "apache", + "extensions": ["hdf"], + }, + "application/x-httpd-php": { + "compressible": true, + "extensions": ["php"], + }, + "application/x-install-instructions": { + "source": "apache", + "extensions": ["install"], + }, + "application/x-iso9660-image": { + "source": "apache", + "extensions": ["iso"], + }, + "application/x-iwork-keynote-sffkey": { + "extensions": ["key"], + }, + "application/x-iwork-numbers-sffnumbers": { + "extensions": ["numbers"], + }, + "application/x-iwork-pages-sffpages": { + "extensions": ["pages"], + }, + "application/x-java-archive-diff": { + "source": "nginx", + "extensions": ["jardiff"], + }, + "application/x-java-jnlp-file": { + "source": "apache", + "compressible": false, + "extensions": ["jnlp"], + }, + "application/x-javascript": { + "compressible": true, + }, + "application/x-keepass2": { + "extensions": ["kdbx"], + }, + "application/x-latex": { + "source": "apache", + "compressible": false, + "extensions": ["latex"], + }, + "application/x-lua-bytecode": { + "extensions": ["luac"], + }, + "application/x-lzh-compressed": { + "source": "apache", + "extensions": ["lzh", "lha"], + }, + "application/x-makeself": { + "source": "nginx", + "extensions": ["run"], + }, + "application/x-mie": { + "source": "apache", + "extensions": ["mie"], + }, + "application/x-mobipocket-ebook": { + "source": "apache", + "extensions": ["prc", "mobi"], + }, + "application/x-mpegurl": { + "compressible": false, + }, + "application/x-ms-application": { + "source": "apache", + "extensions": ["application"], + }, + "application/x-ms-shortcut": { + "source": "apache", + "extensions": ["lnk"], + }, + "application/x-ms-wmd": { + "source": "apache", + "extensions": ["wmd"], + }, + "application/x-ms-wmz": { + "source": "apache", + "extensions": ["wmz"], + }, + "application/x-ms-xbap": { + "source": "apache", + "extensions": ["xbap"], + }, + "application/x-msaccess": { + "source": "apache", + "extensions": ["mdb"], + }, + "application/x-msbinder": { + "source": "apache", + "extensions": ["obd"], + }, + "application/x-mscardfile": { + "source": "apache", + "extensions": ["crd"], + }, + "application/x-msclip": { + "source": "apache", + "extensions": ["clp"], + }, + "application/x-msdos-program": { + "extensions": ["exe"], + }, + "application/x-msdownload": { + "source": "apache", + "extensions": ["exe", "dll", "com", "bat", "msi"], + }, + "application/x-msmediaview": { + "source": "apache", + "extensions": ["mvb", "m13", "m14"], + }, + "application/x-msmetafile": { + "source": "apache", + "extensions": ["wmf", "wmz", "emf", "emz"], + }, + "application/x-msmoney": { + "source": "apache", + "extensions": ["mny"], + }, + "application/x-mspublisher": { + "source": "apache", + "extensions": ["pub"], + }, + "application/x-msschedule": { + "source": "apache", + "extensions": ["scd"], + }, + "application/x-msterminal": { + "source": "apache", + "extensions": ["trm"], + }, + "application/x-mswrite": { + "source": "apache", + "extensions": ["wri"], + }, + "application/x-netcdf": { + "source": "apache", + "extensions": ["nc", "cdf"], + }, + "application/x-ns-proxy-autoconfig": { + "compressible": true, + "extensions": ["pac"], + }, + "application/x-nzb": { + "source": "apache", + "extensions": ["nzb"], + }, + "application/x-perl": { + "source": "nginx", + "extensions": ["pl", "pm"], + }, + "application/x-pilot": { + "source": "nginx", + "extensions": ["prc", "pdb"], + }, + "application/x-pkcs12": { + "source": "apache", + "compressible": false, + "extensions": ["p12", "pfx"], + }, + "application/x-pkcs7-certificates": { + "source": "apache", + "extensions": ["p7b", "spc"], + }, + "application/x-pkcs7-certreqresp": { + "source": "apache", + "extensions": ["p7r"], + }, + "application/x-pki-message": { + "source": "iana", + }, + "application/x-rar-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["rar"], + }, + "application/x-redhat-package-manager": { + "source": "nginx", + "extensions": ["rpm"], + }, + "application/x-research-info-systems": { + "source": "apache", + "extensions": ["ris"], + }, + "application/x-sea": { + "source": "nginx", + "extensions": ["sea"], + }, + "application/x-sh": { + "source": "apache", + "compressible": true, + "extensions": ["sh"], + }, + "application/x-shar": { + "source": "apache", + "extensions": ["shar"], + }, + "application/x-shockwave-flash": { + "source": "apache", + "compressible": false, + "extensions": ["swf"], + }, + "application/x-silverlight-app": { + "source": "apache", + "extensions": ["xap"], + }, + "application/x-sql": { + "source": "apache", + "extensions": ["sql"], + }, + "application/x-stuffit": { + "source": "apache", + "compressible": false, + "extensions": ["sit"], + }, + "application/x-stuffitx": { + "source": "apache", + "extensions": ["sitx"], + }, + "application/x-subrip": { + "source": "apache", + "extensions": ["srt"], + }, + "application/x-sv4cpio": { + "source": "apache", + "extensions": ["sv4cpio"], + }, + "application/x-sv4crc": { + "source": "apache", + "extensions": ["sv4crc"], + }, + "application/x-t3vm-image": { + "source": "apache", + "extensions": ["t3"], + }, + "application/x-tads": { + "source": "apache", + "extensions": ["gam"], + }, + "application/x-tar": { + "source": "apache", + "compressible": true, + "extensions": ["tar"], + }, + "application/x-tcl": { + "source": "apache", + "extensions": ["tcl", "tk"], + }, + "application/x-tex": { + "source": "apache", + "extensions": ["tex"], + }, + "application/x-tex-tfm": { + "source": "apache", + "extensions": ["tfm"], + }, + "application/x-texinfo": { + "source": "apache", + "extensions": ["texinfo", "texi"], + }, + "application/x-tgif": { + "source": "apache", + "extensions": ["obj"], + }, + "application/x-ustar": { + "source": "apache", + "extensions": ["ustar"], + }, + "application/x-virtualbox-hdd": { + "compressible": true, + "extensions": ["hdd"], + }, + "application/x-virtualbox-ova": { + "compressible": true, + "extensions": ["ova"], + }, + "application/x-virtualbox-ovf": { + "compressible": true, + "extensions": ["ovf"], + }, + "application/x-virtualbox-vbox": { + "compressible": true, + "extensions": ["vbox"], + }, + "application/x-virtualbox-vbox-extpack": { + "compressible": false, + "extensions": ["vbox-extpack"], + }, + "application/x-virtualbox-vdi": { + "compressible": true, + "extensions": ["vdi"], + }, + "application/x-virtualbox-vhd": { + "compressible": true, + "extensions": ["vhd"], + }, + "application/x-virtualbox-vmdk": { + "compressible": true, + "extensions": ["vmdk"], + }, + "application/x-wais-source": { + "source": "apache", + "extensions": ["src"], + }, + "application/x-web-app-manifest+json": { + "compressible": true, + "extensions": ["webapp"], + }, + "application/x-www-form-urlencoded": { + "source": "iana", + "compressible": true, + }, + "application/x-x509-ca-cert": { + "source": "iana", + "extensions": ["der", "crt", "pem"], + }, + "application/x-x509-ca-ra-cert": { + "source": "iana", + }, + "application/x-x509-next-ca-cert": { + "source": "iana", + }, + "application/x-xfig": { + "source": "apache", + "extensions": ["fig"], + }, + "application/x-xliff+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xlf"], + }, + "application/x-xpinstall": { + "source": "apache", + "compressible": false, + "extensions": ["xpi"], + }, + "application/x-xz": { + "source": "apache", + "extensions": ["xz"], + }, + "application/x-zmachine": { + "source": "apache", + "extensions": ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"], + }, + "application/x400-bp": { + "source": "iana", + }, + "application/xacml+xml": { + "source": "iana", + "compressible": true, + }, + "application/xaml+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xaml"], + }, + "application/xcap-att+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xav"], + }, + "application/xcap-caps+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xca"], + }, + "application/xcap-diff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdf"], + }, + "application/xcap-el+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xel"], + }, + "application/xcap-error+xml": { + "source": "iana", + "compressible": true, + }, + "application/xcap-ns+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xns"], + }, + "application/xcon-conference-info+xml": { + "source": "iana", + "compressible": true, + }, + "application/xcon-conference-info-diff+xml": { + "source": "iana", + "compressible": true, + }, + "application/xenc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xenc"], + }, + "application/xfdf": { + "source": "iana", + "extensions": ["xfdf"], + }, + "application/xhtml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xhtml", "xht"], + }, + "application/xhtml-voice+xml": { + "source": "apache", + "compressible": true, + }, + "application/xliff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xlf"], + }, + "application/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml", "xsl", "xsd", "rng"], + }, + "application/xml-dtd": { + "source": "iana", + "compressible": true, + "extensions": ["dtd"], + }, + "application/xml-external-parsed-entity": { + "source": "iana", + }, + "application/xml-patch+xml": { + "source": "iana", + "compressible": true, + }, + "application/xmpp+xml": { + "source": "iana", + "compressible": true, + }, + "application/xop+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xop"], + }, + "application/xproc+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xpl"], + }, + "application/xslt+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xsl", "xslt"], + }, + "application/xspf+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xspf"], + }, + "application/xv+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mxml", "xhvml", "xvml", "xvm"], + }, + "application/yang": { + "source": "iana", + "extensions": ["yang"], + }, + "application/yang-data+cbor": { + "source": "iana", + }, + "application/yang-data+json": { + "source": "iana", + "compressible": true, + }, + "application/yang-data+xml": { + "source": "iana", + "compressible": true, + }, + "application/yang-patch+json": { + "source": "iana", + "compressible": true, + }, + "application/yang-patch+xml": { + "source": "iana", + "compressible": true, + }, + "application/yin+xml": { + "source": "iana", + "compressible": true, + "extensions": ["yin"], + }, + "application/zip": { + "source": "iana", + "compressible": false, + "extensions": ["zip"], + }, + "application/zlib": { + "source": "iana", + }, + "application/zstd": { + "source": "iana", + }, + "audio/1d-interleaved-parityfec": { + "source": "iana", + }, + "audio/32kadpcm": { + "source": "iana", + }, + "audio/3gpp": { + "source": "iana", + "compressible": false, + "extensions": ["3gpp"], + }, + "audio/3gpp2": { + "source": "iana", + }, + "audio/aac": { + "source": "iana", + "extensions": ["adts", "aac"], + }, + "audio/ac3": { + "source": "iana", + }, + "audio/adpcm": { + "source": "apache", + "extensions": ["adp"], + }, + "audio/amr": { + "source": "iana", + "extensions": ["amr"], + }, + "audio/amr-wb": { + "source": "iana", + }, + "audio/amr-wb+": { + "source": "iana", + }, + "audio/aptx": { + "source": "iana", + }, + "audio/asc": { + "source": "iana", + }, + "audio/atrac-advanced-lossless": { + "source": "iana", + }, + "audio/atrac-x": { + "source": "iana", + }, + "audio/atrac3": { + "source": "iana", + }, + "audio/basic": { + "source": "iana", + "compressible": false, + "extensions": ["au", "snd"], + }, + "audio/bv16": { + "source": "iana", + }, + "audio/bv32": { + "source": "iana", + }, + "audio/clearmode": { + "source": "iana", + }, + "audio/cn": { + "source": "iana", + }, + "audio/dat12": { + "source": "iana", + }, + "audio/dls": { + "source": "iana", + }, + "audio/dsr-es201108": { + "source": "iana", + }, + "audio/dsr-es202050": { + "source": "iana", + }, + "audio/dsr-es202211": { + "source": "iana", + }, + "audio/dsr-es202212": { + "source": "iana", + }, + "audio/dv": { + "source": "iana", + }, + "audio/dvi4": { + "source": "iana", + }, + "audio/eac3": { + "source": "iana", + }, + "audio/encaprtp": { + "source": "iana", + }, + "audio/evrc": { + "source": "iana", + }, + "audio/evrc-qcp": { + "source": "iana", + }, + "audio/evrc0": { + "source": "iana", + }, + "audio/evrc1": { + "source": "iana", + }, + "audio/evrcb": { + "source": "iana", + }, + "audio/evrcb0": { + "source": "iana", + }, + "audio/evrcb1": { + "source": "iana", + }, + "audio/evrcnw": { + "source": "iana", + }, + "audio/evrcnw0": { + "source": "iana", + }, + "audio/evrcnw1": { + "source": "iana", + }, + "audio/evrcwb": { + "source": "iana", + }, + "audio/evrcwb0": { + "source": "iana", + }, + "audio/evrcwb1": { + "source": "iana", + }, + "audio/evs": { + "source": "iana", + }, + "audio/flexfec": { + "source": "iana", + }, + "audio/fwdred": { + "source": "iana", + }, + "audio/g711-0": { + "source": "iana", + }, + "audio/g719": { + "source": "iana", + }, + "audio/g722": { + "source": "iana", + }, + "audio/g7221": { + "source": "iana", + }, + "audio/g723": { + "source": "iana", + }, + "audio/g726-16": { + "source": "iana", + }, + "audio/g726-24": { + "source": "iana", + }, + "audio/g726-32": { + "source": "iana", + }, + "audio/g726-40": { + "source": "iana", + }, + "audio/g728": { + "source": "iana", + }, + "audio/g729": { + "source": "iana", + }, + "audio/g7291": { + "source": "iana", + }, + "audio/g729d": { + "source": "iana", + }, + "audio/g729e": { + "source": "iana", + }, + "audio/gsm": { + "source": "iana", + }, + "audio/gsm-efr": { + "source": "iana", + }, + "audio/gsm-hr-08": { + "source": "iana", + }, + "audio/ilbc": { + "source": "iana", + }, + "audio/ip-mr_v2.5": { + "source": "iana", + }, + "audio/isac": { + "source": "apache", + }, + "audio/l16": { + "source": "iana", + }, + "audio/l20": { + "source": "iana", + }, + "audio/l24": { + "source": "iana", + "compressible": false, + }, + "audio/l8": { + "source": "iana", + }, + "audio/lpc": { + "source": "iana", + }, + "audio/melp": { + "source": "iana", + }, + "audio/melp1200": { + "source": "iana", + }, + "audio/melp2400": { + "source": "iana", + }, + "audio/melp600": { + "source": "iana", + }, + "audio/mhas": { + "source": "iana", + }, + "audio/midi": { + "source": "apache", + "extensions": ["mid", "midi", "kar", "rmi"], + }, + "audio/mobile-xmf": { + "source": "iana", + "extensions": ["mxmf"], + }, + "audio/mp3": { + "compressible": false, + "extensions": ["mp3"], + }, + "audio/mp4": { + "source": "iana", + "compressible": false, + "extensions": ["m4a", "mp4a"], + }, + "audio/mp4a-latm": { + "source": "iana", + }, + "audio/mpa": { + "source": "iana", + }, + "audio/mpa-robust": { + "source": "iana", + }, + "audio/mpeg": { + "source": "iana", + "compressible": false, + "extensions": ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"], + }, + "audio/mpeg4-generic": { + "source": "iana", + }, + "audio/musepack": { + "source": "apache", + }, + "audio/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["oga", "ogg", "spx", "opus"], + }, + "audio/opus": { + "source": "iana", + }, + "audio/parityfec": { + "source": "iana", + }, + "audio/pcma": { + "source": "iana", + }, + "audio/pcma-wb": { + "source": "iana", + }, + "audio/pcmu": { + "source": "iana", + }, + "audio/pcmu-wb": { + "source": "iana", + }, + "audio/prs.sid": { + "source": "iana", + }, + "audio/qcelp": { + "source": "iana", + }, + "audio/raptorfec": { + "source": "iana", + }, + "audio/red": { + "source": "iana", + }, + "audio/rtp-enc-aescm128": { + "source": "iana", + }, + "audio/rtp-midi": { + "source": "iana", + }, + "audio/rtploopback": { + "source": "iana", + }, + "audio/rtx": { + "source": "iana", + }, + "audio/s3m": { + "source": "apache", + "extensions": ["s3m"], + }, + "audio/scip": { + "source": "iana", + }, + "audio/silk": { + "source": "apache", + "extensions": ["sil"], + }, + "audio/smv": { + "source": "iana", + }, + "audio/smv-qcp": { + "source": "iana", + }, + "audio/smv0": { + "source": "iana", + }, + "audio/sofa": { + "source": "iana", + }, + "audio/sp-midi": { + "source": "iana", + }, + "audio/speex": { + "source": "iana", + }, + "audio/t140c": { + "source": "iana", + }, + "audio/t38": { + "source": "iana", + }, + "audio/telephone-event": { + "source": "iana", + }, + "audio/tetra_acelp": { + "source": "iana", + }, + "audio/tetra_acelp_bb": { + "source": "iana", + }, + "audio/tone": { + "source": "iana", + }, + "audio/tsvcis": { + "source": "iana", + }, + "audio/uemclip": { + "source": "iana", + }, + "audio/ulpfec": { + "source": "iana", + }, + "audio/usac": { + "source": "iana", + }, + "audio/vdvi": { + "source": "iana", + }, + "audio/vmr-wb": { + "source": "iana", + }, + "audio/vnd.3gpp.iufp": { + "source": "iana", + }, + "audio/vnd.4sb": { + "source": "iana", + }, + "audio/vnd.audiokoz": { + "source": "iana", + }, + "audio/vnd.celp": { + "source": "iana", + }, + "audio/vnd.cisco.nse": { + "source": "iana", + }, + "audio/vnd.cmles.radio-events": { + "source": "iana", + }, + "audio/vnd.cns.anp1": { + "source": "iana", + }, + "audio/vnd.cns.inf1": { + "source": "iana", + }, + "audio/vnd.dece.audio": { + "source": "iana", + "extensions": ["uva", "uvva"], + }, + "audio/vnd.digital-winds": { + "source": "iana", + "extensions": ["eol"], + }, + "audio/vnd.dlna.adts": { + "source": "iana", + }, + "audio/vnd.dolby.heaac.1": { + "source": "iana", + }, + "audio/vnd.dolby.heaac.2": { + "source": "iana", + }, + "audio/vnd.dolby.mlp": { + "source": "iana", + }, + "audio/vnd.dolby.mps": { + "source": "iana", + }, + "audio/vnd.dolby.pl2": { + "source": "iana", + }, + "audio/vnd.dolby.pl2x": { + "source": "iana", + }, + "audio/vnd.dolby.pl2z": { + "source": "iana", + }, + "audio/vnd.dolby.pulse.1": { + "source": "iana", + }, + "audio/vnd.dra": { + "source": "iana", + "extensions": ["dra"], + }, + "audio/vnd.dts": { + "source": "iana", + "extensions": ["dts"], + }, + "audio/vnd.dts.hd": { + "source": "iana", + "extensions": ["dtshd"], + }, + "audio/vnd.dts.uhd": { + "source": "iana", + }, + "audio/vnd.dvb.file": { + "source": "iana", + }, + "audio/vnd.everad.plj": { + "source": "iana", + }, + "audio/vnd.hns.audio": { + "source": "iana", + }, + "audio/vnd.lucent.voice": { + "source": "iana", + "extensions": ["lvp"], + }, + "audio/vnd.ms-playready.media.pya": { + "source": "iana", + "extensions": ["pya"], + }, + "audio/vnd.nokia.mobile-xmf": { + "source": "iana", + }, + "audio/vnd.nortel.vbk": { + "source": "iana", + }, + "audio/vnd.nuera.ecelp4800": { + "source": "iana", + "extensions": ["ecelp4800"], + }, + "audio/vnd.nuera.ecelp7470": { + "source": "iana", + "extensions": ["ecelp7470"], + }, + "audio/vnd.nuera.ecelp9600": { + "source": "iana", + "extensions": ["ecelp9600"], + }, + "audio/vnd.octel.sbc": { + "source": "iana", + }, + "audio/vnd.presonus.multitrack": { + "source": "iana", + }, + "audio/vnd.qcelp": { + "source": "apache", + }, + "audio/vnd.rhetorex.32kadpcm": { + "source": "iana", + }, + "audio/vnd.rip": { + "source": "iana", + "extensions": ["rip"], + }, + "audio/vnd.rn-realaudio": { + "compressible": false, + }, + "audio/vnd.sealedmedia.softseal.mpeg": { + "source": "iana", + }, + "audio/vnd.vmx.cvsd": { + "source": "iana", + }, + "audio/vnd.wave": { + "compressible": false, + }, + "audio/vorbis": { + "source": "iana", + "compressible": false, + }, + "audio/vorbis-config": { + "source": "iana", + }, + "audio/wav": { + "compressible": false, + "extensions": ["wav"], + }, + "audio/wave": { + "compressible": false, + "extensions": ["wav"], + }, + "audio/webm": { + "source": "apache", + "compressible": false, + "extensions": ["weba"], + }, + "audio/x-aac": { + "source": "apache", + "compressible": false, + "extensions": ["aac"], + }, + "audio/x-aiff": { + "source": "apache", + "extensions": ["aif", "aiff", "aifc"], + }, + "audio/x-caf": { + "source": "apache", + "compressible": false, + "extensions": ["caf"], + }, + "audio/x-flac": { + "source": "apache", + "extensions": ["flac"], + }, + "audio/x-m4a": { + "source": "nginx", + "extensions": ["m4a"], + }, + "audio/x-matroska": { + "source": "apache", + "extensions": ["mka"], + }, + "audio/x-mpegurl": { + "source": "apache", + "extensions": ["m3u"], + }, + "audio/x-ms-wax": { + "source": "apache", + "extensions": ["wax"], + }, + "audio/x-ms-wma": { + "source": "apache", + "extensions": ["wma"], + }, + "audio/x-pn-realaudio": { + "source": "apache", + "extensions": ["ram", "ra"], + }, + "audio/x-pn-realaudio-plugin": { + "source": "apache", + "extensions": ["rmp"], + }, + "audio/x-realaudio": { + "source": "nginx", + "extensions": ["ra"], + }, + "audio/x-tta": { + "source": "apache", + }, + "audio/x-wav": { + "source": "apache", + "extensions": ["wav"], + }, + "audio/xm": { + "source": "apache", + "extensions": ["xm"], + }, + "chemical/x-cdx": { + "source": "apache", + "extensions": ["cdx"], + }, + "chemical/x-cif": { + "source": "apache", + "extensions": ["cif"], + }, + "chemical/x-cmdf": { + "source": "apache", + "extensions": ["cmdf"], + }, + "chemical/x-cml": { + "source": "apache", + "extensions": ["cml"], + }, + "chemical/x-csml": { + "source": "apache", + "extensions": ["csml"], + }, + "chemical/x-pdb": { + "source": "apache", + }, + "chemical/x-xyz": { + "source": "apache", + "extensions": ["xyz"], + }, + "font/collection": { + "source": "iana", + "extensions": ["ttc"], + }, + "font/otf": { + "source": "iana", + "compressible": true, + "extensions": ["otf"], + }, + "font/sfnt": { + "source": "iana", + }, + "font/ttf": { + "source": "iana", + "compressible": true, + "extensions": ["ttf"], + }, + "font/woff": { + "source": "iana", + "extensions": ["woff"], + }, + "font/woff2": { + "source": "iana", + "extensions": ["woff2"], + }, + "image/aces": { + "source": "iana", + "extensions": ["exr"], + }, + "image/apng": { + "source": "iana", + "compressible": false, + "extensions": ["apng"], + }, + "image/avci": { + "source": "iana", + "extensions": ["avci"], + }, + "image/avcs": { + "source": "iana", + "extensions": ["avcs"], + }, + "image/avif": { + "source": "iana", + "compressible": false, + "extensions": ["avif"], + }, + "image/bmp": { + "source": "iana", + "compressible": true, + "extensions": ["bmp", "dib"], + }, + "image/cgm": { + "source": "iana", + "extensions": ["cgm"], + }, + "image/dicom-rle": { + "source": "iana", + "extensions": ["drle"], + }, + "image/dpx": { + "source": "iana", + "extensions": ["dpx"], + }, + "image/emf": { + "source": "iana", + "extensions": ["emf"], + }, + "image/fits": { + "source": "iana", + "extensions": ["fits"], + }, + "image/g3fax": { + "source": "iana", + "extensions": ["g3"], + }, + "image/gif": { + "source": "iana", + "compressible": false, + "extensions": ["gif"], + }, + "image/heic": { + "source": "iana", + "extensions": ["heic"], + }, + "image/heic-sequence": { + "source": "iana", + "extensions": ["heics"], + }, + "image/heif": { + "source": "iana", + "extensions": ["heif"], + }, + "image/heif-sequence": { + "source": "iana", + "extensions": ["heifs"], + }, + "image/hej2k": { + "source": "iana", + "extensions": ["hej2"], + }, + "image/hsj2": { + "source": "iana", + "extensions": ["hsj2"], + }, + "image/ief": { + "source": "iana", + "extensions": ["ief"], + }, + "image/jls": { + "source": "iana", + "extensions": ["jls"], + }, + "image/jp2": { + "source": "iana", + "compressible": false, + "extensions": ["jp2", "jpg2"], + }, + "image/jpeg": { + "source": "iana", + "compressible": false, + "extensions": ["jpeg", "jpg", "jpe"], + }, + "image/jph": { + "source": "iana", + "extensions": ["jph"], + }, + "image/jphc": { + "source": "iana", + "extensions": ["jhc"], + }, + "image/jpm": { + "source": "iana", + "compressible": false, + "extensions": ["jpm", "jpgm"], + }, + "image/jpx": { + "source": "iana", + "compressible": false, + "extensions": ["jpx", "jpf"], + }, + "image/jxr": { + "source": "iana", + "extensions": ["jxr"], + }, + "image/jxra": { + "source": "iana", + "extensions": ["jxra"], + }, + "image/jxrs": { + "source": "iana", + "extensions": ["jxrs"], + }, + "image/jxs": { + "source": "iana", + "extensions": ["jxs"], + }, + "image/jxsc": { + "source": "iana", + "extensions": ["jxsc"], + }, + "image/jxsi": { + "source": "iana", + "extensions": ["jxsi"], + }, + "image/jxss": { + "source": "iana", + "extensions": ["jxss"], + }, + "image/ktx": { + "source": "iana", + "extensions": ["ktx"], + }, + "image/ktx2": { + "source": "iana", + "extensions": ["ktx2"], + }, + "image/naplps": { + "source": "iana", + }, + "image/pjpeg": { + "compressible": false, + }, + "image/png": { + "source": "iana", + "compressible": false, + "extensions": ["png"], + }, + "image/prs.btif": { + "source": "iana", + "extensions": ["btif", "btf"], + }, + "image/prs.pti": { + "source": "iana", + "extensions": ["pti"], + }, + "image/pwg-raster": { + "source": "iana", + }, + "image/sgi": { + "source": "apache", + "extensions": ["sgi"], + }, + "image/svg+xml": { + "source": "iana", + "compressible": true, + "extensions": ["svg", "svgz"], + }, + "image/t38": { + "source": "iana", + "extensions": ["t38"], + }, + "image/tiff": { + "source": "iana", + "compressible": false, + "extensions": ["tif", "tiff"], + }, + "image/tiff-fx": { + "source": "iana", + "extensions": ["tfx"], + }, + "image/vnd.adobe.photoshop": { + "source": "iana", + "compressible": true, + "extensions": ["psd"], + }, + "image/vnd.airzip.accelerator.azv": { + "source": "iana", + "extensions": ["azv"], + }, + "image/vnd.cns.inf2": { + "source": "iana", + }, + "image/vnd.dece.graphic": { + "source": "iana", + "extensions": ["uvi", "uvvi", "uvg", "uvvg"], + }, + "image/vnd.djvu": { + "source": "iana", + "extensions": ["djvu", "djv"], + }, + "image/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"], + }, + "image/vnd.dwg": { + "source": "iana", + "extensions": ["dwg"], + }, + "image/vnd.dxf": { + "source": "iana", + "extensions": ["dxf"], + }, + "image/vnd.fastbidsheet": { + "source": "iana", + "extensions": ["fbs"], + }, + "image/vnd.fpx": { + "source": "iana", + "extensions": ["fpx"], + }, + "image/vnd.fst": { + "source": "iana", + "extensions": ["fst"], + }, + "image/vnd.fujixerox.edmics-mmr": { + "source": "iana", + "extensions": ["mmr"], + }, + "image/vnd.fujixerox.edmics-rlc": { + "source": "iana", + "extensions": ["rlc"], + }, + "image/vnd.globalgraphics.pgb": { + "source": "iana", + }, + "image/vnd.microsoft.icon": { + "source": "iana", + "compressible": true, + "extensions": ["ico"], + }, + "image/vnd.mix": { + "source": "iana", + }, + "image/vnd.mozilla.apng": { + "source": "iana", + }, + "image/vnd.ms-dds": { + "compressible": true, + "extensions": ["dds"], + }, + "image/vnd.ms-modi": { + "source": "iana", + "extensions": ["mdi"], + }, + "image/vnd.ms-photo": { + "source": "apache", + "extensions": ["wdp"], + }, + "image/vnd.net-fpx": { + "source": "iana", + "extensions": ["npx"], + }, + "image/vnd.pco.b16": { + "source": "iana", + "extensions": ["b16"], + }, + "image/vnd.radiance": { + "source": "iana", + }, + "image/vnd.sealed.png": { + "source": "iana", + }, + "image/vnd.sealedmedia.softseal.gif": { + "source": "iana", + }, + "image/vnd.sealedmedia.softseal.jpg": { + "source": "iana", + }, + "image/vnd.svf": { + "source": "iana", + }, + "image/vnd.tencent.tap": { + "source": "iana", + "extensions": ["tap"], + }, + "image/vnd.valve.source.texture": { + "source": "iana", + "extensions": ["vtf"], + }, + "image/vnd.wap.wbmp": { + "source": "iana", + "extensions": ["wbmp"], + }, + "image/vnd.xiff": { + "source": "iana", + "extensions": ["xif"], + }, + "image/vnd.zbrush.pcx": { + "source": "iana", + "extensions": ["pcx"], + }, + "image/webp": { + "source": "iana", + "extensions": ["webp"], + }, + "image/wmf": { + "source": "iana", + "extensions": ["wmf"], + }, + "image/x-3ds": { + "source": "apache", + "extensions": ["3ds"], + }, + "image/x-cmu-raster": { + "source": "apache", + "extensions": ["ras"], + }, + "image/x-cmx": { + "source": "apache", + "extensions": ["cmx"], + }, + "image/x-freehand": { + "source": "apache", + "extensions": ["fh", "fhc", "fh4", "fh5", "fh7"], + }, + "image/x-icon": { + "source": "apache", + "compressible": true, + "extensions": ["ico"], + }, + "image/x-jng": { + "source": "nginx", + "extensions": ["jng"], + }, + "image/x-mrsid-image": { + "source": "apache", + "extensions": ["sid"], + }, + "image/x-ms-bmp": { + "source": "nginx", + "compressible": true, + "extensions": ["bmp"], + }, + "image/x-pcx": { + "source": "apache", + "extensions": ["pcx"], + }, + "image/x-pict": { + "source": "apache", + "extensions": ["pic", "pct"], + }, + "image/x-portable-anymap": { + "source": "apache", + "extensions": ["pnm"], + }, + "image/x-portable-bitmap": { + "source": "apache", + "extensions": ["pbm"], + }, + "image/x-portable-graymap": { + "source": "apache", + "extensions": ["pgm"], + }, + "image/x-portable-pixmap": { + "source": "apache", + "extensions": ["ppm"], + }, + "image/x-rgb": { + "source": "apache", + "extensions": ["rgb"], + }, + "image/x-tga": { + "source": "apache", + "extensions": ["tga"], + }, + "image/x-xbitmap": { + "source": "apache", + "extensions": ["xbm"], + }, + "image/x-xcf": { + "compressible": false, + }, + "image/x-xpixmap": { + "source": "apache", + "extensions": ["xpm"], + }, + "image/x-xwindowdump": { + "source": "apache", + "extensions": ["xwd"], + }, + "message/bhttp": { + "source": "iana", + }, + "message/cpim": { + "source": "iana", + }, + "message/delivery-status": { + "source": "iana", + }, + "message/disposition-notification": { + "source": "iana", + "extensions": [ + "disposition-notification", + ], + }, + "message/external-body": { + "source": "iana", + }, + "message/feedback-report": { + "source": "iana", + }, + "message/global": { + "source": "iana", + "extensions": ["u8msg"], + }, + "message/global-delivery-status": { + "source": "iana", + "extensions": ["u8dsn"], + }, + "message/global-disposition-notification": { + "source": "iana", + "extensions": ["u8mdn"], + }, + "message/global-headers": { + "source": "iana", + "extensions": ["u8hdr"], + }, + "message/http": { + "source": "iana", + "compressible": false, + }, + "message/imdn+xml": { + "source": "iana", + "compressible": true, + }, + "message/news": { + "source": "apache", + }, + "message/partial": { + "source": "iana", + "compressible": false, + }, + "message/rfc822": { + "source": "iana", + "compressible": true, + "extensions": ["eml", "mime"], + }, + "message/s-http": { + "source": "apache", + }, + "message/sip": { + "source": "iana", + }, + "message/sipfrag": { + "source": "iana", + }, + "message/tracking-status": { + "source": "iana", + }, + "message/vnd.si.simp": { + "source": "apache", + }, + "message/vnd.wfa.wsc": { + "source": "iana", + "extensions": ["wsc"], + }, + "model/3mf": { + "source": "iana", + "extensions": ["3mf"], + }, + "model/e57": { + "source": "iana", + }, + "model/gltf+json": { + "source": "iana", + "compressible": true, + "extensions": ["gltf"], + }, + "model/gltf-binary": { + "source": "iana", + "compressible": true, + "extensions": ["glb"], + }, + "model/iges": { + "source": "iana", + "compressible": false, + "extensions": ["igs", "iges"], + }, + "model/jt": { + "source": "iana", + "extensions": ["jt"], + }, + "model/mesh": { + "source": "iana", + "compressible": false, + "extensions": ["msh", "mesh", "silo"], + }, + "model/mtl": { + "source": "iana", + "extensions": ["mtl"], + }, + "model/obj": { + "source": "iana", + "extensions": ["obj"], + }, + "model/prc": { + "source": "iana", + "extensions": ["prc"], + }, + "model/step": { + "source": "iana", + }, + "model/step+xml": { + "source": "iana", + "compressible": true, + "extensions": ["stpx"], + }, + "model/step+zip": { + "source": "iana", + "compressible": false, + "extensions": ["stpz"], + }, + "model/step-xml+zip": { + "source": "iana", + "compressible": false, + "extensions": ["stpxz"], + }, + "model/stl": { + "source": "iana", + "extensions": ["stl"], + }, + "model/u3d": { + "source": "iana", + "extensions": ["u3d"], + }, + "model/vnd.cld": { + "source": "iana", + "extensions": ["cld"], + }, + "model/vnd.collada+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dae"], + }, + "model/vnd.dwf": { + "source": "iana", + "extensions": ["dwf"], + }, + "model/vnd.flatland.3dml": { + "source": "iana", + }, + "model/vnd.gdl": { + "source": "iana", + "extensions": ["gdl"], + }, + "model/vnd.gs-gdl": { + "source": "apache", + }, + "model/vnd.gs.gdl": { + "source": "iana", + }, + "model/vnd.gtw": { + "source": "iana", + "extensions": ["gtw"], + }, + "model/vnd.moml+xml": { + "source": "iana", + "compressible": true, + }, + "model/vnd.mts": { + "source": "iana", + "extensions": ["mts"], + }, + "model/vnd.opengex": { + "source": "iana", + "extensions": ["ogex"], + }, + "model/vnd.parasolid.transmit.binary": { + "source": "iana", + "extensions": ["x_b"], + }, + "model/vnd.parasolid.transmit.text": { + "source": "iana", + "extensions": ["x_t"], + }, + "model/vnd.pytha.pyox": { + "source": "iana", + "extensions": ["pyo", "pyox"], + }, + "model/vnd.rosette.annotated-data-model": { + "source": "iana", + }, + "model/vnd.sap.vds": { + "source": "iana", + "extensions": ["vds"], + }, + "model/vnd.usda": { + "source": "iana", + "extensions": ["usda"], + }, + "model/vnd.usdz+zip": { + "source": "iana", + "compressible": false, + "extensions": ["usdz"], + }, + "model/vnd.valve.source.compiled-map": { + "source": "iana", + "extensions": ["bsp"], + }, + "model/vnd.vtu": { + "source": "iana", + "extensions": ["vtu"], + }, + "model/vrml": { + "source": "iana", + "compressible": false, + "extensions": ["wrl", "vrml"], + }, + "model/x3d+binary": { + "source": "apache", + "compressible": false, + "extensions": ["x3db", "x3dbz"], + }, + "model/x3d+fastinfoset": { + "source": "iana", + "extensions": ["x3db"], + }, + "model/x3d+vrml": { + "source": "apache", + "compressible": false, + "extensions": ["x3dv", "x3dvz"], + }, + "model/x3d+xml": { + "source": "iana", + "compressible": true, + "extensions": ["x3d", "x3dz"], + }, + "model/x3d-vrml": { + "source": "iana", + "extensions": ["x3dv"], + }, + "multipart/alternative": { + "source": "iana", + "compressible": false, + }, + "multipart/appledouble": { + "source": "iana", + }, + "multipart/byteranges": { + "source": "iana", + }, + "multipart/digest": { + "source": "iana", + }, + "multipart/encrypted": { + "source": "iana", + "compressible": false, + }, + "multipart/form-data": { + "source": "iana", + "compressible": false, + }, + "multipart/header-set": { + "source": "iana", + }, + "multipart/mixed": { + "source": "iana", + }, + "multipart/multilingual": { + "source": "iana", + }, + "multipart/parallel": { + "source": "iana", + }, + "multipart/related": { + "source": "iana", + "compressible": false, + }, + "multipart/report": { + "source": "iana", + }, + "multipart/signed": { + "source": "iana", + "compressible": false, + }, + "multipart/vnd.bint.med-plus": { + "source": "iana", + }, + "multipart/voice-message": { + "source": "iana", + }, + "multipart/x-mixed-replace": { + "source": "iana", + }, + "text/1d-interleaved-parityfec": { + "source": "iana", + }, + "text/cache-manifest": { + "source": "iana", + "compressible": true, + "extensions": ["appcache", "manifest"], + }, + "text/calendar": { + "source": "iana", + "extensions": ["ics", "ifb"], + }, + "text/calender": { + "compressible": true, + }, + "text/cmd": { + "compressible": true, + }, + "text/coffeescript": { + "extensions": ["coffee", "litcoffee"], + }, + "text/cql": { + "source": "iana", + }, + "text/cql-expression": { + "source": "iana", + }, + "text/cql-identifier": { + "source": "iana", + }, + "text/css": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["css"], + }, + "text/csv": { + "source": "iana", + "compressible": true, + "extensions": ["csv"], + }, + "text/csv-schema": { + "source": "iana", + }, + "text/directory": { + "source": "iana", + }, + "text/dns": { + "source": "iana", + }, + "text/ecmascript": { + "source": "apache", + }, + "text/encaprtp": { + "source": "iana", + }, + "text/enriched": { + "source": "iana", + }, + "text/fhirpath": { + "source": "iana", + }, + "text/flexfec": { + "source": "iana", + }, + "text/fwdred": { + "source": "iana", + }, + "text/gff3": { + "source": "iana", + }, + "text/grammar-ref-list": { + "source": "iana", + }, + "text/hl7v2": { + "source": "iana", + }, + "text/html": { + "source": "iana", + "compressible": true, + "extensions": ["html", "htm", "shtml"], + }, + "text/jade": { + "extensions": ["jade"], + }, + "text/javascript": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["js", "mjs"], + }, + "text/jcr-cnd": { + "source": "iana", + }, + "text/jsx": { + "compressible": true, + "extensions": ["jsx"], + }, + "text/less": { + "compressible": true, + "extensions": ["less"], + }, + "text/markdown": { + "source": "iana", + "compressible": true, + "extensions": ["md", "markdown"], + }, + "text/mathml": { + "source": "nginx", + "extensions": ["mml"], + }, + "text/mdx": { + "compressible": true, + "extensions": ["mdx"], + }, + "text/mizar": { + "source": "iana", + }, + "text/n3": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["n3"], + }, + "text/parameters": { + "source": "iana", + "charset": "UTF-8", + }, + "text/parityfec": { + "source": "iana", + }, + "text/plain": { + "source": "iana", + "compressible": true, + "extensions": ["txt", "text", "conf", "def", "list", "log", "in", "ini"], + }, + "text/provenance-notation": { + "source": "iana", + "charset": "UTF-8", + }, + "text/prs.fallenstein.rst": { + "source": "iana", + }, + "text/prs.lines.tag": { + "source": "iana", + "extensions": ["dsc"], + }, + "text/prs.prop.logic": { + "source": "iana", + }, + "text/raptorfec": { + "source": "iana", + }, + "text/red": { + "source": "iana", + }, + "text/rfc822-headers": { + "source": "iana", + }, + "text/richtext": { + "source": "iana", + "compressible": true, + "extensions": ["rtx"], + }, + "text/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"], + }, + "text/rtp-enc-aescm128": { + "source": "iana", + }, + "text/rtploopback": { + "source": "iana", + }, + "text/rtx": { + "source": "iana", + }, + "text/sgml": { + "source": "iana", + "extensions": ["sgml", "sgm"], + }, + "text/shaclc": { + "source": "iana", + }, + "text/shex": { + "source": "iana", + "extensions": ["shex"], + }, + "text/slim": { + "extensions": ["slim", "slm"], + }, + "text/spdx": { + "source": "iana", + "extensions": ["spdx"], + }, + "text/strings": { + "source": "iana", + }, + "text/stylus": { + "extensions": ["stylus", "styl"], + }, + "text/t140": { + "source": "iana", + }, + "text/tab-separated-values": { + "source": "iana", + "compressible": true, + "extensions": ["tsv"], + }, + "text/troff": { + "source": "iana", + "extensions": ["t", "tr", "roff", "man", "me", "ms"], + }, + "text/turtle": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["ttl"], + }, + "text/ulpfec": { + "source": "iana", + }, + "text/uri-list": { + "source": "iana", + "compressible": true, + "extensions": ["uri", "uris", "urls"], + }, + "text/vcard": { + "source": "iana", + "compressible": true, + "extensions": ["vcard"], + }, + "text/vnd.a": { + "source": "iana", + }, + "text/vnd.abc": { + "source": "iana", + }, + "text/vnd.ascii-art": { + "source": "iana", + }, + "text/vnd.curl": { + "source": "iana", + "extensions": ["curl"], + }, + "text/vnd.curl.dcurl": { + "source": "apache", + "extensions": ["dcurl"], + }, + "text/vnd.curl.mcurl": { + "source": "apache", + "extensions": ["mcurl"], + }, + "text/vnd.curl.scurl": { + "source": "apache", + "extensions": ["scurl"], + }, + "text/vnd.debian.copyright": { + "source": "iana", + "charset": "UTF-8", + }, + "text/vnd.dmclientscript": { + "source": "iana", + }, + "text/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"], + }, + "text/vnd.esmertec.theme-descriptor": { + "source": "iana", + "charset": "UTF-8", + }, + "text/vnd.exchangeable": { + "source": "iana", + }, + "text/vnd.familysearch.gedcom": { + "source": "iana", + "extensions": ["ged"], + }, + "text/vnd.ficlab.flt": { + "source": "iana", + }, + "text/vnd.fly": { + "source": "iana", + "extensions": ["fly"], + }, + "text/vnd.fmi.flexstor": { + "source": "iana", + "extensions": ["flx"], + }, + "text/vnd.gml": { + "source": "iana", + }, + "text/vnd.graphviz": { + "source": "iana", + "extensions": ["gv"], + }, + "text/vnd.hans": { + "source": "iana", + }, + "text/vnd.hgl": { + "source": "iana", + }, + "text/vnd.in3d.3dml": { + "source": "iana", + "extensions": ["3dml"], + }, + "text/vnd.in3d.spot": { + "source": "iana", + "extensions": ["spot"], + }, + "text/vnd.iptc.newsml": { + "source": "iana", + }, + "text/vnd.iptc.nitf": { + "source": "iana", + }, + "text/vnd.latex-z": { + "source": "iana", + }, + "text/vnd.motorola.reflex": { + "source": "iana", + }, + "text/vnd.ms-mediapackage": { + "source": "iana", + }, + "text/vnd.net2phone.commcenter.command": { + "source": "iana", + }, + "text/vnd.radisys.msml-basic-layout": { + "source": "iana", + }, + "text/vnd.senx.warpscript": { + "source": "iana", + }, + "text/vnd.si.uricatalogue": { + "source": "apache", + }, + "text/vnd.sosi": { + "source": "iana", + }, + "text/vnd.sun.j2me.app-descriptor": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["jad"], + }, + "text/vnd.trolltech.linguist": { + "source": "iana", + "charset": "UTF-8", + }, + "text/vnd.wap.si": { + "source": "iana", + }, + "text/vnd.wap.sl": { + "source": "iana", + }, + "text/vnd.wap.wml": { + "source": "iana", + "extensions": ["wml"], + }, + "text/vnd.wap.wmlscript": { + "source": "iana", + "extensions": ["wmls"], + }, + "text/vtt": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["vtt"], + }, + "text/wgsl": { + "source": "iana", + "extensions": ["wgsl"], + }, + "text/x-asm": { + "source": "apache", + "extensions": ["s", "asm"], + }, + "text/x-c": { + "source": "apache", + "extensions": ["c", "cc", "cxx", "cpp", "h", "hh", "dic"], + }, + "text/x-component": { + "source": "nginx", + "extensions": ["htc"], + }, + "text/x-fortran": { + "source": "apache", + "extensions": ["f", "for", "f77", "f90"], + }, + "text/x-gwt-rpc": { + "compressible": true, + }, + "text/x-handlebars-template": { + "extensions": ["hbs"], + }, + "text/x-java-source": { + "source": "apache", + "extensions": ["java"], + }, + "text/x-jquery-tmpl": { + "compressible": true, + }, + "text/x-lua": { + "extensions": ["lua"], + }, + "text/x-markdown": { + "compressible": true, + "extensions": ["mkd"], + }, + "text/x-nfo": { + "source": "apache", + "extensions": ["nfo"], + }, + "text/x-opml": { + "source": "apache", + "extensions": ["opml"], + }, + "text/x-org": { + "compressible": true, + "extensions": ["org"], + }, + "text/x-pascal": { + "source": "apache", + "extensions": ["p", "pas"], + }, + "text/x-processing": { + "compressible": true, + "extensions": ["pde"], + }, + "text/x-sass": { + "extensions": ["sass"], + }, + "text/x-scss": { + "extensions": ["scss"], + }, + "text/x-setext": { + "source": "apache", + "extensions": ["etx"], + }, + "text/x-sfv": { + "source": "apache", + "extensions": ["sfv"], + }, + "text/x-suse-ymp": { + "compressible": true, + "extensions": ["ymp"], + }, + "text/x-uuencode": { + "source": "apache", + "extensions": ["uu"], + }, + "text/x-vcalendar": { + "source": "apache", + "extensions": ["vcs"], + }, + "text/x-vcard": { + "source": "apache", + "extensions": ["vcf"], + }, + "text/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml"], + }, + "text/xml-external-parsed-entity": { + "source": "iana", + }, + "text/yaml": { + "compressible": true, + "extensions": ["yaml", "yml"], + }, + "video/1d-interleaved-parityfec": { + "source": "iana", + }, + "video/3gpp": { + "source": "iana", + "extensions": ["3gp", "3gpp"], + }, + "video/3gpp-tt": { + "source": "iana", + }, + "video/3gpp2": { + "source": "iana", + "extensions": ["3g2"], + }, + "video/av1": { + "source": "iana", + }, + "video/bmpeg": { + "source": "iana", + }, + "video/bt656": { + "source": "iana", + }, + "video/celb": { + "source": "iana", + }, + "video/dv": { + "source": "iana", + }, + "video/encaprtp": { + "source": "iana", + }, + "video/ffv1": { + "source": "iana", + }, + "video/flexfec": { + "source": "iana", + }, + "video/h261": { + "source": "iana", + "extensions": ["h261"], + }, + "video/h263": { + "source": "iana", + "extensions": ["h263"], + }, + "video/h263-1998": { + "source": "iana", + }, + "video/h263-2000": { + "source": "iana", + }, + "video/h264": { + "source": "iana", + "extensions": ["h264"], + }, + "video/h264-rcdo": { + "source": "iana", + }, + "video/h264-svc": { + "source": "iana", + }, + "video/h265": { + "source": "iana", + }, + "video/h266": { + "source": "iana", + }, + "video/iso.segment": { + "source": "iana", + "extensions": ["m4s"], + }, + "video/jpeg": { + "source": "iana", + "extensions": ["jpgv"], + }, + "video/jpeg2000": { + "source": "iana", + }, + "video/jpm": { + "source": "apache", + "extensions": ["jpm", "jpgm"], + }, + "video/jxsv": { + "source": "iana", + }, + "video/mj2": { + "source": "iana", + "extensions": ["mj2", "mjp2"], + }, + "video/mp1s": { + "source": "iana", + }, + "video/mp2p": { + "source": "iana", + }, + "video/mp2t": { + "source": "iana", + "extensions": ["ts"], + }, + "video/mp4": { + "source": "iana", + "compressible": false, + "extensions": ["mp4", "mp4v", "mpg4"], + }, + "video/mp4v-es": { + "source": "iana", + }, + "video/mpeg": { + "source": "iana", + "compressible": false, + "extensions": ["mpeg", "mpg", "mpe", "m1v", "m2v"], + }, + "video/mpeg4-generic": { + "source": "iana", + }, + "video/mpv": { + "source": "iana", + }, + "video/nv": { + "source": "iana", + }, + "video/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["ogv"], + }, + "video/parityfec": { + "source": "iana", + }, + "video/pointer": { + "source": "iana", + }, + "video/quicktime": { + "source": "iana", + "compressible": false, + "extensions": ["qt", "mov"], + }, + "video/raptorfec": { + "source": "iana", + }, + "video/raw": { + "source": "iana", + }, + "video/rtp-enc-aescm128": { + "source": "iana", + }, + "video/rtploopback": { + "source": "iana", + }, + "video/rtx": { + "source": "iana", + }, + "video/scip": { + "source": "iana", + }, + "video/smpte291": { + "source": "iana", + }, + "video/smpte292m": { + "source": "iana", + }, + "video/ulpfec": { + "source": "iana", + }, + "video/vc1": { + "source": "iana", + }, + "video/vc2": { + "source": "iana", + }, + "video/vnd.cctv": { + "source": "iana", + }, + "video/vnd.dece.hd": { + "source": "iana", + "extensions": ["uvh", "uvvh"], + }, + "video/vnd.dece.mobile": { + "source": "iana", + "extensions": ["uvm", "uvvm"], + }, + "video/vnd.dece.mp4": { + "source": "iana", + }, + "video/vnd.dece.pd": { + "source": "iana", + "extensions": ["uvp", "uvvp"], + }, + "video/vnd.dece.sd": { + "source": "iana", + "extensions": ["uvs", "uvvs"], + }, + "video/vnd.dece.video": { + "source": "iana", + "extensions": ["uvv", "uvvv"], + }, + "video/vnd.directv.mpeg": { + "source": "iana", + }, + "video/vnd.directv.mpeg-tts": { + "source": "iana", + }, + "video/vnd.dlna.mpeg-tts": { + "source": "iana", + }, + "video/vnd.dvb.file": { + "source": "iana", + "extensions": ["dvb"], + }, + "video/vnd.fvt": { + "source": "iana", + "extensions": ["fvt"], + }, + "video/vnd.hns.video": { + "source": "iana", + }, + "video/vnd.iptvforum.1dparityfec-1010": { + "source": "iana", + }, + "video/vnd.iptvforum.1dparityfec-2005": { + "source": "iana", + }, + "video/vnd.iptvforum.2dparityfec-1010": { + "source": "iana", + }, + "video/vnd.iptvforum.2dparityfec-2005": { + "source": "iana", + }, + "video/vnd.iptvforum.ttsavc": { + "source": "iana", + }, + "video/vnd.iptvforum.ttsmpeg2": { + "source": "iana", + }, + "video/vnd.motorola.video": { + "source": "iana", + }, + "video/vnd.motorola.videop": { + "source": "iana", + }, + "video/vnd.mpegurl": { + "source": "iana", + "extensions": ["mxu", "m4u"], + }, + "video/vnd.ms-playready.media.pyv": { + "source": "iana", + "extensions": ["pyv"], + }, + "video/vnd.nokia.interleaved-multimedia": { + "source": "iana", + }, + "video/vnd.nokia.mp4vr": { + "source": "iana", + }, + "video/vnd.nokia.videovoip": { + "source": "iana", + }, + "video/vnd.objectvideo": { + "source": "iana", + }, + "video/vnd.radgamettools.bink": { + "source": "iana", + }, + "video/vnd.radgamettools.smacker": { + "source": "apache", + }, + "video/vnd.sealed.mpeg1": { + "source": "iana", + }, + "video/vnd.sealed.mpeg4": { + "source": "iana", + }, + "video/vnd.sealed.swf": { + "source": "iana", + }, + "video/vnd.sealedmedia.softseal.mov": { + "source": "iana", + }, + "video/vnd.uvvu.mp4": { + "source": "iana", + "extensions": ["uvu", "uvvu"], + }, + "video/vnd.vivo": { + "source": "iana", + "extensions": ["viv"], + }, + "video/vnd.youtube.yt": { + "source": "iana", + }, + "video/vp8": { + "source": "iana", + }, + "video/vp9": { + "source": "iana", + }, + "video/webm": { + "source": "apache", + "compressible": false, + "extensions": ["webm"], + }, + "video/x-f4v": { + "source": "apache", + "extensions": ["f4v"], + }, + "video/x-fli": { + "source": "apache", + "extensions": ["fli"], + }, + "video/x-flv": { + "source": "apache", + "compressible": false, + "extensions": ["flv"], + }, + "video/x-m4v": { + "source": "apache", + "extensions": ["m4v"], + }, + "video/x-matroska": { + "source": "apache", + "compressible": false, + "extensions": ["mkv", "mk3d", "mks"], + }, + "video/x-mng": { + "source": "apache", + "extensions": ["mng"], + }, + "video/x-ms-asf": { + "source": "apache", + "extensions": ["asf", "asx"], + }, + "video/x-ms-vob": { + "source": "apache", + "extensions": ["vob"], + }, + "video/x-ms-wm": { + "source": "apache", + "extensions": ["wm"], + }, + "video/x-ms-wmv": { + "source": "apache", + "compressible": false, + "extensions": ["wmv"], + }, + "video/x-ms-wmx": { + "source": "apache", + "extensions": ["wmx"], + }, + "video/x-ms-wvx": { + "source": "apache", + "extensions": ["wvx"], + }, + "video/x-msvideo": { + "source": "apache", + "extensions": ["avi"], + }, + "video/x-sgi-movie": { + "source": "apache", + "extensions": ["movie"], + }, + "video/x-smv": { + "source": "apache", + "extensions": ["smv"], + }, + "x-conference/x-cooltalk": { + "source": "apache", + "extensions": ["ice"], + }, + "x-shader/x-fragment": { + "compressible": true, + }, + "x-shader/x-vertex": { + "compressible": true, + }, +} as const; diff --git a/src/vendor/jsr.io/@std/net/0.224.5/get_network_address.ts b/src/vendor/jsr.io/@std/net/0.224.5/get_network_address.ts new file mode 100644 index 00000000000..b81480d41ac --- /dev/null +++ b/src/vendor/jsr.io/@std/net/0.224.5/get_network_address.ts @@ -0,0 +1,50 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +/** + * **UNSTABLE**: New API, yet to be vetted. + * + * Gets the IPv4 or IPv6 network address of the machine. + * + * This is inspired by the util of the same name in + * {@linkcode https://www.npmjs.com/package/serve | npm:serve}. + * + * For more advanced use, use {@linkcode Deno.networkInterfaces} directly. + * + * @see {@link https://github.com/vercel/serve/blob/1ea55b1b5004f468159b54775e4fb3090fedbb2b/source/utilities/http.ts#L33} + * + * @param family The IP protocol version of the interface to get the address of. + * @returns The IPv4 network address of the machine. + * + * @example Get the IPv4 network address (default) + * ```ts no-assert no-eval + * import { getNetworkAddress } from "@std/net/get-network-address"; + * + * const hostname = getNetworkAddress(); + * + * Deno.serve({ port: 0, hostname }, () => new Response("Hello, world!")); + * ``` + * + * @example Get the IPv6 network address + * ```ts no-assert no-eval + * import { getNetworkAddress } from "@std/net/get-network-address"; + * + * const hostname = getNetworkAddress("IPv6"); + * + * Deno.serve({ port: 0, hostname }, () => new Response("Hello, world!")); + * ``` + * + * @experimental + */ +export function getNetworkAddress( + family: Deno.NetworkInterfaceInfo["family"] = "IPv4", +): string | undefined { + return Deno.networkInterfaces() + .find((i) => + i.family === family && + (family === "IPv4" + // Cannot lie within 127.0.0.0/8 + ? !i.address.startsWith("127") + // Cannot be loopback or link-local addresses + : !(i.address === "::1" || i.address === "fe80::1") && i.scopeid === 0) + ) + ?.address; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/_common/assert_path.ts b/src/vendor/jsr.io/@std/path/0.224.0/_common/assert_path.ts new file mode 100644 index 00000000000..7033edcd1a7 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/_common/assert_path.ts @@ -0,0 +1,10 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. + +export function assertPath(path?: string) { + if (typeof path !== "string") { + throw new TypeError( + `Path must be a string. Received ${JSON.stringify(path)}`, + ); + } +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/_common/basename.ts b/src/vendor/jsr.io/@std/path/0.224.0/_common/basename.ts new file mode 100644 index 00000000000..64ca2f4c460 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/_common/basename.ts @@ -0,0 +1,53 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertPath } from "./assert_path.ts"; + +export function stripSuffix(name: string, suffix: string): string { + if (suffix.length >= name.length) { + return name; + } + + const lenDiff = name.length - suffix.length; + + for (let i = suffix.length - 1; i >= 0; --i) { + if (name.charCodeAt(lenDiff + i) !== suffix.charCodeAt(i)) { + return name; + } + } + + return name.slice(0, -suffix.length); +} + +export function lastPathSegment( + path: string, + isSep: (char: number) => boolean, + start = 0, +): string { + let matchedNonSeparator = false; + let end = path.length; + + for (let i = path.length - 1; i >= start; --i) { + if (isSep(path.charCodeAt(i))) { + if (matchedNonSeparator) { + start = i + 1; + break; + } + } else if (!matchedNonSeparator) { + matchedNonSeparator = true; + end = i + 1; + } + } + + return path.slice(start, end); +} + +export function assertArgs(path: string, suffix: string) { + assertPath(path); + if (path.length === 0) return path; + if (typeof suffix !== "string") { + throw new TypeError( + `Suffix must be a string. Received ${JSON.stringify(suffix)}`, + ); + } +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/_common/common.ts b/src/vendor/jsr.io/@std/path/0.224.0/_common/common.ts new file mode 100644 index 00000000000..b6d327b0407 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/_common/common.ts @@ -0,0 +1,26 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +export function _common(paths: string[], sep: string): string { + const [first = "", ...remaining] = paths; + const parts = first.split(sep); + + let endOfPrefix = parts.length; + let append = ""; + for (const path of remaining) { + const compare = path.split(sep); + if (compare.length <= endOfPrefix) { + endOfPrefix = compare.length; + append = ""; + } + + for (let i = 0; i < endOfPrefix; i++) { + if (compare[i] !== parts[i]) { + endOfPrefix = i; + append = i === 0 ? "" : sep; + break; + } + } + } + return parts.slice(0, endOfPrefix).join(sep) + append; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/_common/constants.ts b/src/vendor/jsr.io/@std/path/0.224.0/_common/constants.ts new file mode 100644 index 00000000000..9bfd411b668 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/_common/constants.ts @@ -0,0 +1,49 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported from https://github.com/browserify/path-browserify/ +// This module is browser compatible. + +// Alphabet chars. +export const CHAR_UPPERCASE_A = 65; /* A */ +export const CHAR_LOWERCASE_A = 97; /* a */ +export const CHAR_UPPERCASE_Z = 90; /* Z */ +export const CHAR_LOWERCASE_Z = 122; /* z */ + +// Non-alphabetic chars. +export const CHAR_DOT = 46; /* . */ +export const CHAR_FORWARD_SLASH = 47; /* / */ +export const CHAR_BACKWARD_SLASH = 92; /* \ */ +export const CHAR_VERTICAL_LINE = 124; /* | */ +export const CHAR_COLON = 58; /* : */ +export const CHAR_QUESTION_MARK = 63; /* ? */ +export const CHAR_UNDERSCORE = 95; /* _ */ +export const CHAR_LINE_FEED = 10; /* \n */ +export const CHAR_CARRIAGE_RETURN = 13; /* \r */ +export const CHAR_TAB = 9; /* \t */ +export const CHAR_FORM_FEED = 12; /* \f */ +export const CHAR_EXCLAMATION_MARK = 33; /* ! */ +export const CHAR_HASH = 35; /* # */ +export const CHAR_SPACE = 32; /* */ +export const CHAR_NO_BREAK_SPACE = 160; /* \u00A0 */ +export const CHAR_ZERO_WIDTH_NOBREAK_SPACE = 65279; /* \uFEFF */ +export const CHAR_LEFT_SQUARE_BRACKET = 91; /* [ */ +export const CHAR_RIGHT_SQUARE_BRACKET = 93; /* ] */ +export const CHAR_LEFT_ANGLE_BRACKET = 60; /* < */ +export const CHAR_RIGHT_ANGLE_BRACKET = 62; /* > */ +export const CHAR_LEFT_CURLY_BRACKET = 123; /* { */ +export const CHAR_RIGHT_CURLY_BRACKET = 125; /* } */ +export const CHAR_HYPHEN_MINUS = 45; /* - */ +export const CHAR_PLUS = 43; /* + */ +export const CHAR_DOUBLE_QUOTE = 34; /* " */ +export const CHAR_SINGLE_QUOTE = 39; /* ' */ +export const CHAR_PERCENT = 37; /* % */ +export const CHAR_SEMICOLON = 59; /* ; */ +export const CHAR_CIRCUMFLEX_ACCENT = 94; /* ^ */ +export const CHAR_GRAVE_ACCENT = 96; /* ` */ +export const CHAR_AT = 64; /* @ */ +export const CHAR_AMPERSAND = 38; /* & */ +export const CHAR_EQUAL = 61; /* = */ + +// Digits +export const CHAR_0 = 48; /* 0 */ +export const CHAR_9 = 57; /* 9 */ diff --git a/src/vendor/jsr.io/@std/path/0.224.0/_common/dirname.ts b/src/vendor/jsr.io/@std/path/0.224.0/_common/dirname.ts new file mode 100644 index 00000000000..3a1a1628453 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/_common/dirname.ts @@ -0,0 +1,9 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertPath } from "./assert_path.ts"; + +export function assertArg(path: string) { + assertPath(path); + if (path.length === 0) return "."; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/_common/format.ts b/src/vendor/jsr.io/@std/path/0.224.0/_common/format.ts new file mode 100644 index 00000000000..c0e3ee0b59d --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/_common/format.ts @@ -0,0 +1,25 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { FormatInputPathObject } from "../_interface.ts"; + +export function _format( + sep: string, + pathObject: FormatInputPathObject, +): string { + const dir: string | undefined = pathObject.dir || pathObject.root; + const base: string = pathObject.base || + (pathObject.name || "") + (pathObject.ext || ""); + if (!dir) return base; + if (base === sep) return dir; + if (dir === pathObject.root) return dir + base; + return dir + sep + base; +} + +export function assertArg(pathObject: FormatInputPathObject) { + if (pathObject === null || typeof pathObject !== "object") { + throw new TypeError( + `The "pathObject" argument must be of type Object. Received type ${typeof pathObject}`, + ); + } +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/_common/from_file_url.ts b/src/vendor/jsr.io/@std/path/0.224.0/_common/from_file_url.ts new file mode 100644 index 00000000000..22f2f3bbee3 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/_common/from_file_url.ts @@ -0,0 +1,10 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +export function assertArg(url: URL | string) { + url = url instanceof URL ? url : new URL(url); + if (url.protocol !== "file:") { + throw new TypeError("Must be a file URL."); + } + return url; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/_common/glob_to_reg_exp.ts b/src/vendor/jsr.io/@std/path/0.224.0/_common/glob_to_reg_exp.ts new file mode 100644 index 00000000000..26e8c82a054 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/_common/glob_to_reg_exp.ts @@ -0,0 +1,283 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** Options for {@linkcode globToRegExp}. */ +export interface GlobOptions { + /** Extended glob syntax. + * See https://www.linuxjournal.com/content/bash-extended-globbing. + * + * @default {true} + */ + extended?: boolean; + /** Globstar syntax. + * See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option. + * If false, `**` is treated like `*`. + * + * @default {true} + */ + globstar?: boolean; + /** Whether globstar should be case-insensitive. */ + caseInsensitive?: boolean; +} + +export type GlobToRegExpOptions = GlobOptions; + +const regExpEscapeChars = [ + "!", + "$", + "(", + ")", + "*", + "+", + ".", + "=", + "?", + "[", + "\\", + "^", + "{", + "|", +]; +const rangeEscapeChars = ["-", "\\", "]"]; + +export interface GlobConstants { + sep: string; + sepMaybe: string; + seps: string[]; + globstar: string; + wildcard: string; + escapePrefix: string; +} + +export function _globToRegExp( + c: GlobConstants, + glob: string, + { + extended = true, + globstar: globstarOption = true, + // os = osType, + caseInsensitive = false, + }: GlobToRegExpOptions = {}, +): RegExp { + if (glob === "") { + return /(?!)/; + } + + // Remove trailing separators. + let newLength = glob.length; + for (; newLength > 1 && c.seps.includes(glob[newLength - 1]!); newLength--); + glob = glob.slice(0, newLength); + + let regExpString = ""; + + // Terminates correctly. Trust that `j` is incremented every iteration. + for (let j = 0; j < glob.length;) { + let segment = ""; + const groupStack: string[] = []; + let inRange = false; + let inEscape = false; + let endsWithSep = false; + let i = j; + + // Terminates with `i` at the non-inclusive end of the current segment. + for (; i < glob.length && !c.seps.includes(glob[i]!); i++) { + if (inEscape) { + inEscape = false; + const escapeChars = inRange ? rangeEscapeChars : regExpEscapeChars; + segment += escapeChars.includes(glob[i]!) ? `\\${glob[i]}` : glob[i]; + continue; + } + + if (glob[i] === c.escapePrefix) { + inEscape = true; + continue; + } + + if (glob[i] === "[") { + if (!inRange) { + inRange = true; + segment += "["; + if (glob[i + 1] === "!") { + i++; + segment += "^"; + } else if (glob[i + 1] === "^") { + i++; + segment += "\\^"; + } + continue; + } else if (glob[i + 1] === ":") { + let k = i + 1; + let value = ""; + while (glob[k + 1] !== undefined && glob[k + 1] !== ":") { + value += glob[k + 1]; + k++; + } + if (glob[k + 1] === ":" && glob[k + 2] === "]") { + i = k + 2; + if (value === "alnum") segment += "\\dA-Za-z"; + else if (value === "alpha") segment += "A-Za-z"; + else if (value === "ascii") segment += "\x00-\x7F"; + else if (value === "blank") segment += "\t "; + else if (value === "cntrl") segment += "\x00-\x1F\x7F"; + else if (value === "digit") segment += "\\d"; + else if (value === "graph") segment += "\x21-\x7E"; + else if (value === "lower") segment += "a-z"; + else if (value === "print") segment += "\x20-\x7E"; + else if (value === "punct") { + segment += "!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_‘{|}~"; + } else if (value === "space") segment += "\\s\v"; + else if (value === "upper") segment += "A-Z"; + else if (value === "word") segment += "\\w"; + else if (value === "xdigit") segment += "\\dA-Fa-f"; + continue; + } + } + } + + if (glob[i] === "]" && inRange) { + inRange = false; + segment += "]"; + continue; + } + + if (inRange) { + if (glob[i] === "\\") { + segment += `\\\\`; + } else { + segment += glob[i]; + } + continue; + } + + if ( + glob[i] === ")" && groupStack.length > 0 && + groupStack[groupStack.length - 1] !== "BRACE" + ) { + segment += ")"; + const type = groupStack.pop()!; + if (type === "!") { + segment += c.wildcard; + } else if (type !== "@") { + segment += type; + } + continue; + } + + if ( + glob[i] === "|" && groupStack.length > 0 && + groupStack[groupStack.length - 1] !== "BRACE" + ) { + segment += "|"; + continue; + } + + if (glob[i] === "+" && extended && glob[i + 1] === "(") { + i++; + groupStack.push("+"); + segment += "(?:"; + continue; + } + + if (glob[i] === "@" && extended && glob[i + 1] === "(") { + i++; + groupStack.push("@"); + segment += "(?:"; + continue; + } + + if (glob[i] === "?") { + if (extended && glob[i + 1] === "(") { + i++; + groupStack.push("?"); + segment += "(?:"; + } else { + segment += "."; + } + continue; + } + + if (glob[i] === "!" && extended && glob[i + 1] === "(") { + i++; + groupStack.push("!"); + segment += "(?!"; + continue; + } + + if (glob[i] === "{") { + groupStack.push("BRACE"); + segment += "(?:"; + continue; + } + + if (glob[i] === "}" && groupStack[groupStack.length - 1] === "BRACE") { + groupStack.pop(); + segment += ")"; + continue; + } + + if (glob[i] === "," && groupStack[groupStack.length - 1] === "BRACE") { + segment += "|"; + continue; + } + + if (glob[i] === "*") { + if (extended && glob[i + 1] === "(") { + i++; + groupStack.push("*"); + segment += "(?:"; + } else { + const prevChar = glob[i - 1]; + let numStars = 1; + while (glob[i + 1] === "*") { + i++; + numStars++; + } + const nextChar = glob[i + 1]; + if ( + globstarOption && numStars === 2 && + [...c.seps, undefined].includes(prevChar) && + [...c.seps, undefined].includes(nextChar) + ) { + segment += c.globstar; + endsWithSep = true; + } else { + segment += c.wildcard; + } + } + continue; + } + + segment += regExpEscapeChars.includes(glob[i]!) + ? `\\${glob[i]}` + : glob[i]; + } + + // Check for unclosed groups or a dangling backslash. + if (groupStack.length > 0 || inRange || inEscape) { + // Parse failure. Take all characters from this segment literally. + segment = ""; + for (const c of glob.slice(j, i)) { + segment += regExpEscapeChars.includes(c) ? `\\${c}` : c; + endsWithSep = false; + } + } + + regExpString += segment; + if (!endsWithSep) { + regExpString += i < glob.length ? c.sep : c.sepMaybe; + endsWithSep = true; + } + + // Terminates with `i` at the start of the next segment. + while (c.seps.includes(glob[i]!)) i++; + + // Check that the next value of `j` is indeed higher than the current value. + if (!(i > j)) { + throw new Error("Assertion failure: i > j (potential infinite loop)"); + } + j = i; + } + + regExpString = `^${regExpString}$`; + return new RegExp(regExpString, caseInsensitive ? "i" : ""); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/_common/normalize.ts b/src/vendor/jsr.io/@std/path/0.224.0/_common/normalize.ts new file mode 100644 index 00000000000..3a1a1628453 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/_common/normalize.ts @@ -0,0 +1,9 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertPath } from "./assert_path.ts"; + +export function assertArg(path: string) { + assertPath(path); + if (path.length === 0) return "."; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/_common/normalize_string.ts b/src/vendor/jsr.io/@std/path/0.224.0/_common/normalize_string.ts new file mode 100644 index 00000000000..d8f0e090a6e --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/_common/normalize_string.ts @@ -0,0 +1,74 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported from https://github.com/browserify/path-browserify/ +// This module is browser compatible. + +import { CHAR_DOT, CHAR_FORWARD_SLASH } from "./constants.ts"; + +// Resolves . and .. elements in a path with directory names +export function normalizeString( + path: string, + allowAboveRoot: boolean, + separator: string, + isPathSeparator: (code: number) => boolean, +): string { + let res = ""; + let lastSegmentLength = 0; + let lastSlash = -1; + let dots = 0; + let code: number | undefined; + for (let i = 0; i <= path.length; ++i) { + if (i < path.length) code = path.charCodeAt(i); + else if (isPathSeparator(code!)) break; + else code = CHAR_FORWARD_SLASH; + + if (isPathSeparator(code!)) { + if (lastSlash === i - 1 || dots === 1) { + // NOOP + } else if (lastSlash !== i - 1 && dots === 2) { + if ( + res.length < 2 || + lastSegmentLength !== 2 || + res.charCodeAt(res.length - 1) !== CHAR_DOT || + res.charCodeAt(res.length - 2) !== CHAR_DOT + ) { + if (res.length > 2) { + const lastSlashIndex = res.lastIndexOf(separator); + if (lastSlashIndex === -1) { + res = ""; + lastSegmentLength = 0; + } else { + res = res.slice(0, lastSlashIndex); + lastSegmentLength = res.length - 1 - res.lastIndexOf(separator); + } + lastSlash = i; + dots = 0; + continue; + } else if (res.length === 2 || res.length === 1) { + res = ""; + lastSegmentLength = 0; + lastSlash = i; + dots = 0; + continue; + } + } + if (allowAboveRoot) { + if (res.length > 0) res += `${separator}..`; + else res = ".."; + lastSegmentLength = 2; + } + } else { + if (res.length > 0) res += separator + path.slice(lastSlash + 1, i); + else res = path.slice(lastSlash + 1, i); + lastSegmentLength = i - lastSlash - 1; + } + lastSlash = i; + dots = 0; + } else if (code === CHAR_DOT && dots !== -1) { + ++dots; + } else { + dots = -1; + } + } + return res; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/_common/relative.ts b/src/vendor/jsr.io/@std/path/0.224.0/_common/relative.ts new file mode 100644 index 00000000000..0f9901f32e4 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/_common/relative.ts @@ -0,0 +1,10 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertPath } from "./assert_path.ts"; + +export function assertArgs(from: string, to: string) { + assertPath(from); + assertPath(to); + if (from === to) return ""; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/_common/strip_trailing_separators.ts b/src/vendor/jsr.io/@std/path/0.224.0/_common/strip_trailing_separators.ts new file mode 100644 index 00000000000..852def64328 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/_common/strip_trailing_separators.ts @@ -0,0 +1,25 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported from https://github.com/browserify/path-browserify/ +// This module is browser compatible. + +export function stripTrailingSeparators( + segment: string, + isSep: (char: number) => boolean, +): string { + if (segment.length <= 1) { + return segment; + } + + let end = segment.length; + + for (let i = segment.length - 1; i > 0; i--) { + if (isSep(segment.charCodeAt(i))) { + end = i; + } else { + break; + } + } + + return segment.slice(0, end); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/_common/to_file_url.ts b/src/vendor/jsr.io/@std/path/0.224.0/_common/to_file_url.ts new file mode 100644 index 00000000000..ed985858e56 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/_common/to_file_url.ts @@ -0,0 +1,17 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +const WHITESPACE_ENCODINGS: Record = { + "\u0009": "%09", + "\u000A": "%0A", + "\u000B": "%0B", + "\u000C": "%0C", + "\u000D": "%0D", + "\u0020": "%20", +}; + +export function encodeWhitespace(string: string): string { + return string.replaceAll(/[\s]/g, (c) => { + return WHITESPACE_ENCODINGS[c] ?? c; + }); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/_interface.ts b/src/vendor/jsr.io/@std/path/0.224.0/_interface.ts new file mode 100644 index 00000000000..89dd274df0e --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/_interface.ts @@ -0,0 +1,42 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * A parsed path object generated by path.parse() or consumed by path.format(). + * + * @example + * ```ts + * import { parse } from "@std/path"; + * + * const parsedPathObj = parse("c:\\path\\dir\\index.html"); + * parsedPathObj.root; // "c:\\" + * parsedPathObj.dir; // "c:\\path\\dir" + * parsedPathObj.base; // "index.html" + * parsedPathObj.ext; // ".html" + * parsedPathObj.name; // "index" + * ``` + */ +export interface ParsedPath { + /** + * The root of the path such as '/' or 'c:\' + */ + root: string; + /** + * The full directory path of the parent such as '/home/user/dir' or 'c:\path\dir' + */ + dir: string; + /** + * The file name including extension (if any) such as 'index.html' + */ + base: string; + /** + * The file extension (if any) such as '.html' + */ + ext: string; + /** + * The file name without extension (if any) such as 'index' + */ + name: string; +} + +export type FormatInputPathObject = Partial; diff --git a/src/vendor/jsr.io/@std/path/0.224.0/_os.ts b/src/vendor/jsr.io/@std/path/0.224.0/_os.ts new file mode 100644 index 00000000000..725261279d5 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/_os.ts @@ -0,0 +1,31 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +// Keep this up-to-date with Deno.build.os +export type OSType = + | "darwin" + | "linux" + | "windows" + | "freebsd" + | "netbsd" + | "aix" + | "solaris" + | "illumos"; + +export const osType: OSType = (() => { + // deno-lint-ignore no-explicit-any + const { Deno } = globalThis as any; + if (typeof Deno?.build?.os === "string") { + return Deno.build.os; + } + + // deno-lint-ignore no-explicit-any + const { navigator } = globalThis as any; + if (navigator?.appVersion?.includes?.("Win")) { + return "windows"; + } + + return "linux"; +})(); + +export const isWindows = osType === "windows"; diff --git a/src/vendor/jsr.io/@std/path/0.224.0/basename.ts b/src/vendor/jsr.io/@std/path/0.224.0/basename.ts new file mode 100644 index 00000000000..509701119d0 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/basename.ts @@ -0,0 +1,28 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import { basename as posixBasename } from "./posix/basename.ts"; +import { basename as windowsBasename } from "./windows/basename.ts"; + +/** + * Return the last portion of a `path`. + * Trailing directory separators are ignored, and optional suffix is removed. + * + * @example + * ```ts + * import { basename } from "@std/path/basename"; + * + * basename("/home/user/Documents/"); // "Documents" + * basename("C:\\user\\Documents\\image.png"); // "image.png" + * basename("/home/user/Documents/image.png", ".png"); // "image" + * ``` + * + * @param path - path to extract the name from. + * @param [suffix] - suffix to remove from extracted name. + */ +export function basename(path: string, suffix = ""): string { + return isWindows + ? windowsBasename(path, suffix) + : posixBasename(path, suffix); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/common.ts b/src/vendor/jsr.io/@std/path/0.224.0/common.ts new file mode 100644 index 00000000000..b39346287b5 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/common.ts @@ -0,0 +1,24 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { _common } from "./_common/common.ts"; +import { SEPARATOR } from "./constants.ts"; + +/** Determines the common path from a set of paths, using an optional separator, + * which defaults to the OS default separator. + * + * ```ts + * import { common } from "@std/path"; + * const p = common([ + * "./deno/std/path/mod.ts", + * "./deno/std/fs/mod.ts", + * ]); + * console.log(p); // "./deno/std/" + * ``` + */ +export function common( + paths: string[], + sep: string = SEPARATOR, +): string { + return _common(paths, sep); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/constants.ts b/src/vendor/jsr.io/@std/path/0.224.0/constants.ts new file mode 100644 index 00000000000..2e1c08ed115 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/constants.ts @@ -0,0 +1,7 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import { isWindows } from "./_os.ts"; + +export const DELIMITER = isWindows ? ";" as const : ":" as const; +export const SEPARATOR = isWindows ? "\\" as const : "/" as const; +export const SEPARATOR_PATTERN = isWindows ? /[\\/]+/ : /\/+/; diff --git a/src/vendor/jsr.io/@std/path/0.224.0/dirname.ts b/src/vendor/jsr.io/@std/path/0.224.0/dirname.ts new file mode 100644 index 00000000000..a9902710299 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/dirname.ts @@ -0,0 +1,14 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import { dirname as posixDirname } from "./posix/dirname.ts"; +import { dirname as windowsDirname } from "./windows/dirname.ts"; + +/** + * Return the directory path of a `path`. + * @param path - path to extract the directory from. + */ +export function dirname(path: string): string { + return isWindows ? windowsDirname(path) : posixDirname(path); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/extname.ts b/src/vendor/jsr.io/@std/path/0.224.0/extname.ts new file mode 100644 index 00000000000..753d5216e25 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/extname.ts @@ -0,0 +1,14 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import { extname as posixExtname } from "./posix/extname.ts"; +import { extname as windowsExtname } from "./windows/extname.ts"; +/** + * Return the extension of the `path` with leading period. + * @param path with extension + * @returns extension (ex. for `file.ts` returns `.ts`) + */ +export function extname(path: string): string { + return isWindows ? windowsExtname(path) : posixExtname(path); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/format.ts b/src/vendor/jsr.io/@std/path/0.224.0/format.ts new file mode 100644 index 00000000000..53890819210 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/format.ts @@ -0,0 +1,17 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import { format as posixFormat } from "./posix/format.ts"; +import { format as windowsFormat } from "./windows/format.ts"; +import type { FormatInputPathObject } from "./_interface.ts"; + +/** + * Generate a path from `FormatInputPathObject` object. It does the opposite + * of `parse`. + * + * @param pathObject with path + */ +export function format(pathObject: FormatInputPathObject): string { + return isWindows ? windowsFormat(pathObject) : posixFormat(pathObject); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/from_file_url.ts b/src/vendor/jsr.io/@std/path/0.224.0/from_file_url.ts new file mode 100644 index 00000000000..4b661534723 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/from_file_url.ts @@ -0,0 +1,26 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import { fromFileUrl as posixFromFileUrl } from "./posix/from_file_url.ts"; +import { fromFileUrl as windowsFromFileUrl } from "./windows/from_file_url.ts"; + +/** + * Converts a file URL to a path string. + * + * ```ts + * import { fromFileUrl } from "@std/path/from-file-url"; + * + * // posix + * fromFileUrl("file:///home/foo"); // "/home/foo" + * + * // win32 + * fromFileUrl("file:///home/foo"); // "\\home\\foo" + * fromFileUrl("file:///C:/Users/foo"); // "C:\\Users\\foo" + * fromFileUrl("file://localhost/home/foo"); // "\\\\localhost\\home\\foo" + * ``` + * @param url of a file URL + */ +export function fromFileUrl(url: string | URL): string { + return isWindows ? windowsFromFileUrl(url) : posixFromFileUrl(url); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/glob_to_regexp.ts b/src/vendor/jsr.io/@std/path/0.224.0/glob_to_regexp.ts new file mode 100644 index 00000000000..2fcda4f2583 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/glob_to_regexp.ts @@ -0,0 +1,80 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { GlobOptions } from "./_common/glob_to_reg_exp.ts"; +import { isWindows, type OSType } from "./_os.ts"; + +import { globToRegExp as posixGlobToRegExp } from "./posix/glob_to_regexp.ts"; +import { + globToRegExp as windowsGlobToRegExp, +} from "./windows/glob_to_regexp.ts"; + +export type { GlobOptions }; + +export type GlobToRegExpOptions = GlobOptions & { + os?: OSType; +}; + +/** Convert a glob string to a regular expression. + * + * Tries to match bash glob expansion as closely as possible. + * + * Basic glob syntax: + * - `*` - Matches everything without leaving the path segment. + * - `?` - Matches any single character. + * - `{foo,bar}` - Matches `foo` or `bar`. + * - `[abcd]` - Matches `a`, `b`, `c` or `d`. + * - `[a-d]` - Matches `a`, `b`, `c` or `d`. + * - `[!abcd]` - Matches any single character besides `a`, `b`, `c` or `d`. + * - `[[::]]` - Matches any character belonging to ``. + * - `[[:alnum:]]` - Matches any digit or letter. + * - `[[:digit:]abc]` - Matches any digit, `a`, `b` or `c`. + * - See https://facelessuser.github.io/wcmatch/glob/#posix-character-classes + * for a complete list of supported character classes. + * - `\` - Escapes the next character for an `os` other than `"windows"`. + * - \` - Escapes the next character for `os` set to `"windows"`. + * - `/` - Path separator. + * - `\` - Additional path separator only for `os` set to `"windows"`. + * + * Extended syntax: + * - Requires `{ extended: true }`. + * - `?(foo|bar)` - Matches 0 or 1 instance of `{foo,bar}`. + * - `@(foo|bar)` - Matches 1 instance of `{foo,bar}`. They behave the same. + * - `*(foo|bar)` - Matches _n_ instances of `{foo,bar}`. + * - `+(foo|bar)` - Matches _n > 0_ instances of `{foo,bar}`. + * - `!(foo|bar)` - Matches anything other than `{foo,bar}`. + * - See https://www.linuxjournal.com/content/bash-extended-globbing. + * + * Globstar syntax: + * - Requires `{ globstar: true }`. + * - `**` - Matches any number of any path segments. + * - Must comprise its entire path segment in the provided glob. + * - See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option. + * + * Note the following properties: + * - The generated `RegExp` is anchored at both start and end. + * - Repeating and trailing separators are tolerated. Trailing separators in the + * provided glob have no meaning and are discarded. + * - Absolute globs will only match absolute paths, etc. + * - Empty globs will match nothing. + * - Any special glob syntax must be contained to one path segment. For example, + * `?(foo|bar/baz)` is invalid. The separator will take precedence and the + * first segment ends with an unclosed group. + * - If a path segment ends with unclosed groups or a dangling escape prefix, a + * parse error has occurred. Every character for that segment is taken + * literally in this event. + * + * Limitations: + * - A negative group like `!(foo|bar)` will wrongly be converted to a negative + * look-ahead followed by a wildcard. This means that `!(foo).js` will wrongly + * fail to match `foobar.js`, even though `foobar` is not `foo`. Effectively, + * `!(foo|bar)` is treated like `!(@(foo|bar)*)`. This will work correctly if + * the group occurs not nested at the end of the segment. */ +export function globToRegExp( + glob: string, + options: GlobToRegExpOptions = {}, +): RegExp { + return options.os === "windows" || (!options.os && isWindows) + ? windowsGlobToRegExp(glob, options) + : posixGlobToRegExp(glob, options); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/is_absolute.ts b/src/vendor/jsr.io/@std/path/0.224.0/is_absolute.ts new file mode 100644 index 00000000000..be580fd15fa --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/is_absolute.ts @@ -0,0 +1,14 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import { isAbsolute as posixIsAbsolute } from "./posix/is_absolute.ts"; +import { isAbsolute as windowsIsAbsolute } from "./windows/is_absolute.ts"; + +/** + * Verifies whether provided path is absolute + * @param path to be verified as absolute + */ +export function isAbsolute(path: string): boolean { + return isWindows ? windowsIsAbsolute(path) : posixIsAbsolute(path); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/is_glob.ts b/src/vendor/jsr.io/@std/path/0.224.0/is_glob.ts new file mode 100644 index 00000000000..2d481e463c2 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/is_glob.ts @@ -0,0 +1,35 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** Test whether the given string is a glob */ +export function isGlob(str: string): boolean { + const chars: Record = { "{": "}", "(": ")", "[": "]" }; + const regex = + /\\(.)|(^!|\*|\?|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/; + + if (str === "") { + return false; + } + + let match: RegExpExecArray | null; + + while ((match = regex.exec(str))) { + if (match[2]) return true; + let idx = match.index + match[0].length; + + // if an open bracket/brace/paren is escaped, + // set the index to the next closing character + const open = match[1]; + const close = open ? chars[open] : null; + if (open && close) { + const n = str.indexOf(close, idx); + if (n !== -1) { + idx = n + 1; + } + } + + str = str.slice(idx); + } + + return false; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/join.ts b/src/vendor/jsr.io/@std/path/0.224.0/join.ts new file mode 100644 index 00000000000..aa2119874af --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/join.ts @@ -0,0 +1,14 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import { join as posixJoin } from "./posix/join.ts"; +import { join as windowsJoin } from "./windows/join.ts"; + +/** + * Join all given a sequence of `paths`,then normalizes the resulting path. + * @param paths to be joined and normalized + */ +export function join(...paths: string[]): string { + return isWindows ? windowsJoin(...paths) : posixJoin(...paths); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/join_globs.ts b/src/vendor/jsr.io/@std/path/0.224.0/join_globs.ts new file mode 100644 index 00000000000..0c9e0d2e585 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/join_globs.ts @@ -0,0 +1,19 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { GlobOptions } from "./_common/glob_to_reg_exp.ts"; +import { isWindows } from "./_os.ts"; +import { joinGlobs as posixJoinGlobs } from "./posix/join_globs.ts"; +import { joinGlobs as windowsJoinGlobs } from "./windows/join_globs.ts"; + +export type { GlobOptions }; + +/** Like join(), but doesn't collapse "**\/.." when `globstar` is true. */ +export function joinGlobs( + globs: string[], + options: GlobOptions = {}, +): string { + return isWindows + ? windowsJoinGlobs(globs, options) + : posixJoinGlobs(globs, options); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/mod.ts b/src/vendor/jsr.io/@std/path/0.224.0/mod.ts new file mode 100644 index 00000000000..98a75814fc7 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/mod.ts @@ -0,0 +1,65 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported mostly from https://github.com/browserify/path-browserify/ +// This module is browser compatible. + +/** + * Utilities for working with OS-specific file paths. + * + * Functions from this module will automatically switch to support the path style + * of the current OS, either `windows` for Microsoft Windows, or `posix` for + * every other operating system, eg. Linux, MacOS, BSD etc. + * + * To use functions for a specific path style regardless of the current OS + * import the modules from the platform sub directory instead. + * + * Example, for `posix`: + * + * ```ts + * import { fromFileUrl } from "@std/path/posix/from-file-url"; + * const p = fromFileUrl("file:///home/foo"); + * console.log(p); // "/home/foo" + * ``` + * + * or, for `windows`: + * + * ```ts + * import { fromFileUrl } from "@std/path/windows/from-file-url"; + * const p = fromFileUrl("file:///home/foo"); + * console.log(p); // "\\home\\foo" + * ``` + * + * This module is browser compatible. + * + * @module + */ + +import * as _windows from "./windows/mod.ts"; +import * as _posix from "./posix/mod.ts"; + +/** @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/path/windows/mod.ts} instead. */ +export const win32: typeof _windows = _windows; + +/** @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/path/posix/mod.ts} instead. */ +export const posix: typeof _posix = _posix; + +export * from "./basename.ts"; +export * from "./constants.ts"; +export * from "./dirname.ts"; +export * from "./extname.ts"; +export * from "./format.ts"; +export * from "./from_file_url.ts"; +export * from "./is_absolute.ts"; +export * from "./join.ts"; +export * from "./normalize.ts"; +export * from "./parse.ts"; +export * from "./relative.ts"; +export * from "./resolve.ts"; +export * from "./to_file_url.ts"; +export * from "./to_namespaced_path.ts"; +export * from "./common.ts"; +export * from "./_interface.ts"; +export * from "./glob_to_regexp.ts"; +export * from "./is_glob.ts"; +export * from "./join_globs.ts"; +export * from "./normalize_glob.ts"; diff --git a/src/vendor/jsr.io/@std/path/0.224.0/normalize.ts b/src/vendor/jsr.io/@std/path/0.224.0/normalize.ts new file mode 100644 index 00000000000..aab9fb1308f --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/normalize.ts @@ -0,0 +1,15 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import { normalize as posixNormalize } from "./posix/normalize.ts"; +import { normalize as windowsNormalize } from "./windows/normalize.ts"; +/** + * Normalize the `path`, resolving `'..'` and `'.'` segments. + * Note that resolving these segments does not necessarily mean that all will be eliminated. + * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`. + * @param path to be normalized + */ +export function normalize(path: string): string { + return isWindows ? windowsNormalize(path) : posixNormalize(path); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/normalize_glob.ts b/src/vendor/jsr.io/@std/path/0.224.0/normalize_glob.ts new file mode 100644 index 00000000000..ae8f520b8f4 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/normalize_glob.ts @@ -0,0 +1,21 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { GlobOptions } from "./_common/glob_to_reg_exp.ts"; +import { isWindows } from "./_os.ts"; +import { normalizeGlob as posixNormalizeGlob } from "./posix/normalize_glob.ts"; +import { + normalizeGlob as windowsNormalizeGlob, +} from "./windows/normalize_glob.ts"; + +export type { GlobOptions }; + +/** Like normalize(), but doesn't collapse "**\/.." when `globstar` is true. */ +export function normalizeGlob( + glob: string, + options: GlobOptions = {}, +): string { + return isWindows + ? windowsNormalizeGlob(glob, options) + : posixNormalizeGlob(glob, options); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/parse.ts b/src/vendor/jsr.io/@std/path/0.224.0/parse.ts new file mode 100644 index 00000000000..21f4f992615 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/parse.ts @@ -0,0 +1,29 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import type { ParsedPath } from "./_interface.ts"; +import { parse as posixParse } from "./posix/parse.ts"; +import { parse as windowsParse } from "./windows/parse.ts"; + +export type { ParsedPath } from "./_interface.ts"; + +/** + * Return a `ParsedPath` object of the `path`. Use `format` to reverse the result. + * + * @example + * ```ts + * import { parse } from "@std/path"; + * + * const parsedPathObj = parse("/path/to/dir/script.ts"); + * parsedPathObj.root; // "/" + * parsedPathObj.dir; // "/path/to/dir" + * parsedPathObj.base; // "script.ts" + * parsedPathObj.ext; // ".ts" + * parsedPathObj.name; // "script" + * ``` + * @param path to process + */ +export function parse(path: string): ParsedPath { + return isWindows ? windowsParse(path) : posixParse(path); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/_util.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/_util.ts new file mode 100644 index 00000000000..b446155df5b --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/_util.ts @@ -0,0 +1,10 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported from https://github.com/browserify/path-browserify/ +// This module is browser compatible. + +import { CHAR_FORWARD_SLASH } from "../_common/constants.ts"; + +export function isPosixPathSeparator(code: number): boolean { + return code === CHAR_FORWARD_SLASH; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/basename.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/basename.ts new file mode 100644 index 00000000000..0488fd68788 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/basename.ts @@ -0,0 +1,37 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { + assertArgs, + lastPathSegment, + stripSuffix, +} from "../_common/basename.ts"; +import { stripTrailingSeparators } from "../_common/strip_trailing_separators.ts"; +import { isPosixPathSeparator } from "./_util.ts"; + +/** + * Return the last portion of a `path`. + * Trailing directory separators are ignored, and optional suffix is removed. + * + * @example + * ```ts + * import { basename } from "@std/path/basename"; + * + * console.log(basename("/home/user/Documents/")); // "Documents" + * console.log(basename("/home/user/Documents/image.png")); // "image.png" + * console.log(basename("/home/user/Documents/image.png", ".png")); // "image" + * ``` + * + * @param path - path to extract the name from. + * @param [suffix] - suffix to remove from extracted name. + */ +export function basename(path: string, suffix = ""): string { + assertArgs(path, suffix); + + const lastSegment = lastPathSegment(path, isPosixPathSeparator); + const strippedSegment = stripTrailingSeparators( + lastSegment, + isPosixPathSeparator, + ); + return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/common.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/common.ts new file mode 100644 index 00000000000..9d31bd81f3a --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/common.ts @@ -0,0 +1,24 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { _common } from "../_common/common.ts"; +import { SEPARATOR } from "./constants.ts"; + +/** Determines the common path from a set of paths, using an optional separator, + * which defaults to the OS default separator. + * + * ```ts + * import { common } from "@std/path"; + * const p = common([ + * "./deno/std/path/mod.ts", + * "./deno/std/fs/mod.ts", + * ]); + * console.log(p); // "./deno/std/" + * ``` + */ +export function common( + paths: string[], + sep: string = SEPARATOR, +): string { + return _common(paths, sep); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/constants.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/constants.ts new file mode 100644 index 00000000000..0612e5b10f7 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/constants.ts @@ -0,0 +1,6 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +export const DELIMITER = ":" as const; +export const SEPARATOR = "/" as const; +export const SEPARATOR_PATTERN = /\/+/; diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/dirname.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/dirname.ts new file mode 100644 index 00000000000..4e21e05705c --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/dirname.ts @@ -0,0 +1,53 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertArg } from "../_common/dirname.ts"; +import { stripTrailingSeparators } from "../_common/strip_trailing_separators.ts"; +import { isPosixPathSeparator } from "./_util.ts"; + +/** + * Return the directory path of a `path`. + * + * @example + * ```ts + * import { dirname } from "@std/path/dirname"; + * + * console.log(dirname("/home/user/Documents/")); // "/home/user" + * console.log(dirname("/home/user/Documents/image.png")); // "/home/user/Documents" + * ``` + * + * @param path - path to extract the directory from. + */ +export function dirname(path: string): string { + assertArg(path); + + let end = -1; + let matchedNonSeparator = false; + + for (let i = path.length - 1; i >= 1; --i) { + if (isPosixPathSeparator(path.charCodeAt(i))) { + if (matchedNonSeparator) { + end = i; + break; + } + } else { + matchedNonSeparator = true; + } + } + + // No matches. Fallback based on provided path: + // + // - leading slashes paths + // "/foo" => "/" + // "///foo" => "/" + // - no slash path + // "foo" => "." + if (end === -1) { + return isPosixPathSeparator(path.charCodeAt(0)) ? "/" : "."; + } + + return stripTrailingSeparators( + path.slice(0, end), + isPosixPathSeparator, + ); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/extname.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/extname.ts new file mode 100644 index 00000000000..9bd74c0f381 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/extname.ts @@ -0,0 +1,71 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { CHAR_DOT } from "../_common/constants.ts"; +import { assertPath } from "../_common/assert_path.ts"; +import { isPosixPathSeparator } from "./_util.ts"; + +/** + * Return the extension of the `path` with leading period. + * + * @example + * ```ts + * import { extname } from "@std/path/extname"; + * + * console.log(extname("/home/user/Documents/")); // "" + * console.log(extname("/home/user/Documents/image.png")); // ".png" + * ``` + * + * @param path with extension + * @returns extension (ex. for `file.ts` returns `.ts`) + */ +export function extname(path: string): string { + assertPath(path); + + let startDot = -1; + let startPart = 0; + let end = -1; + let matchedSlash = true; + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + let preDotState = 0; + for (let i = path.length - 1; i >= 0; --i) { + const code = path.charCodeAt(i); + if (isPosixPathSeparator(code)) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + continue; + } + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + if (code === CHAR_DOT) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) startDot = i; + else if (preDotState !== 1) preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; + } + } + + if ( + startDot === -1 || + end === -1 || + // We saw a non-dot character immediately before the dot + preDotState === 0 || + // The (right-most) trimmed path component is exactly '..' + (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) + ) { + return ""; + } + return path.slice(startDot, end); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/format.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/format.ts new file mode 100644 index 00000000000..eb73976d7af --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/format.ts @@ -0,0 +1,14 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { _format, assertArg } from "../_common/format.ts"; +import type { FormatInputPathObject } from "../_interface.ts"; + +/** + * Generate a path from `FormatInputPathObject` object. + * @param pathObject with path + */ +export function format(pathObject: FormatInputPathObject): string { + assertArg(pathObject); + return _format("/", pathObject); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/from_file_url.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/from_file_url.ts new file mode 100644 index 00000000000..10c46069faf --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/from_file_url.ts @@ -0,0 +1,21 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertArg } from "../_common/from_file_url.ts"; + +/** + * Converts a file URL to a path string. + * + * ```ts + * import { fromFileUrl } from "@std/path/posix/from-file-url"; + * + * fromFileUrl("file:///home/foo"); // "/home/foo" + * ``` + * @param url of a file URL + */ +export function fromFileUrl(url: URL | string): string { + url = assertArg(url); + return decodeURIComponent( + url.pathname.replace(/%(?![0-9A-Fa-f]{2})/g, "%25"), + ); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/glob_to_regexp.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/glob_to_regexp.ts new file mode 100644 index 00000000000..344abe769de --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/glob_to_regexp.ts @@ -0,0 +1,79 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { + _globToRegExp, + type GlobConstants, + type GlobToRegExpOptions, +} from "../_common/glob_to_reg_exp.ts"; + +const constants: GlobConstants = { + sep: "/+", + sepMaybe: "/*", + seps: ["/"], + globstar: "(?:[^/]*(?:/|$)+)*", + wildcard: "[^/]*", + escapePrefix: "\\", +}; + +/** Convert a glob string to a regular expression. + * + * Tries to match bash glob expansion as closely as possible. + * + * Basic glob syntax: + * - `*` - Matches everything without leaving the path segment. + * - `?` - Matches any single character. + * - `{foo,bar}` - Matches `foo` or `bar`. + * - `[abcd]` - Matches `a`, `b`, `c` or `d`. + * - `[a-d]` - Matches `a`, `b`, `c` or `d`. + * - `[!abcd]` - Matches any single character besides `a`, `b`, `c` or `d`. + * - `[[::]]` - Matches any character belonging to ``. + * - `[[:alnum:]]` - Matches any digit or letter. + * - `[[:digit:]abc]` - Matches any digit, `a`, `b` or `c`. + * - See https://facelessuser.github.io/wcmatch/glob/#posix-character-classes + * for a complete list of supported character classes. + * - `\` - Escapes the next character for an `os` other than `"windows"`. + * - \` - Escapes the next character for `os` set to `"windows"`. + * - `/` - Path separator. + * - `\` - Additional path separator only for `os` set to `"windows"`. + * + * Extended syntax: + * - Requires `{ extended: true }`. + * - `?(foo|bar)` - Matches 0 or 1 instance of `{foo,bar}`. + * - `@(foo|bar)` - Matches 1 instance of `{foo,bar}`. They behave the same. + * - `*(foo|bar)` - Matches _n_ instances of `{foo,bar}`. + * - `+(foo|bar)` - Matches _n > 0_ instances of `{foo,bar}`. + * - `!(foo|bar)` - Matches anything other than `{foo,bar}`. + * - See https://www.linuxjournal.com/content/bash-extended-globbing. + * + * Globstar syntax: + * - Requires `{ globstar: true }`. + * - `**` - Matches any number of any path segments. + * - Must comprise its entire path segment in the provided glob. + * - See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option. + * + * Note the following properties: + * - The generated `RegExp` is anchored at both start and end. + * - Repeating and trailing separators are tolerated. Trailing separators in the + * provided glob have no meaning and are discarded. + * - Absolute globs will only match absolute paths, etc. + * - Empty globs will match nothing. + * - Any special glob syntax must be contained to one path segment. For example, + * `?(foo|bar/baz)` is invalid. The separator will take precedence and the + * first segment ends with an unclosed group. + * - If a path segment ends with unclosed groups or a dangling escape prefix, a + * parse error has occurred. Every character for that segment is taken + * literally in this event. + * + * Limitations: + * - A negative group like `!(foo|bar)` will wrongly be converted to a negative + * look-ahead followed by a wildcard. This means that `!(foo).js` will wrongly + * fail to match `foobar.js`, even though `foobar` is not `foo`. Effectively, + * `!(foo|bar)` is treated like `!(@(foo|bar)*)`. This will work correctly if + * the group occurs not nested at the end of the segment. */ +export function globToRegExp( + glob: string, + options: GlobToRegExpOptions = {}, +): RegExp { + return _globToRegExp(constants, glob, options); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/is_absolute.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/is_absolute.ts new file mode 100644 index 00000000000..3dbc3ed8222 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/is_absolute.ts @@ -0,0 +1,14 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertPath } from "../_common/assert_path.ts"; +import { isPosixPathSeparator } from "./_util.ts"; + +/** + * Verifies whether provided path is absolute + * @param path to be verified as absolute + */ +export function isAbsolute(path: string): boolean { + assertPath(path); + return path.length > 0 && isPosixPathSeparator(path.charCodeAt(0)); +} diff --git a/src/vendor/deno.land/std@0.217.0/jsonc/mod.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/is_glob.ts similarity index 74% rename from src/vendor/deno.land/std@0.217.0/jsonc/mod.ts rename to src/vendor/jsr.io/@std/path/0.224.0/posix/is_glob.ts index 1a02f1a4926..6b97e68e132 100644 --- a/src/vendor/deno.land/std@0.217.0/jsonc/mod.ts +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/is_glob.ts @@ -1,4 +1,4 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -export * from "./parse.ts"; +export { isGlob } from "../is_glob.ts"; diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/join.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/join.ts new file mode 100644 index 00000000000..625762ab97a --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/join.ts @@ -0,0 +1,25 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertPath } from "../_common/assert_path.ts"; +import { normalize } from "./normalize.ts"; + +/** + * Join all given a sequence of `paths`,then normalizes the resulting path. + * @param paths to be joined and normalized + */ +export function join(...paths: string[]): string { + if (paths.length === 0) return "."; + + let joined: string | undefined; + for (let i = 0; i < paths.length; ++i) { + const path = paths[i]!; + assertPath(path); + if (path.length > 0) { + if (!joined) joined = path; + else joined += `/${path}`; + } + } + if (!joined) return "."; + return normalize(joined); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/join_globs.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/join_globs.ts new file mode 100644 index 00000000000..f30a11489ec --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/join_globs.ts @@ -0,0 +1,30 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { GlobOptions } from "../_common/glob_to_reg_exp.ts"; +import { join } from "./join.ts"; +import { SEPARATOR } from "./constants.ts"; +import { normalizeGlob } from "./normalize_glob.ts"; + +export type { GlobOptions }; + +/** Like join(), but doesn't collapse "**\/.." when `globstar` is true. */ +export function joinGlobs( + globs: string[], + { extended = true, globstar = false }: GlobOptions = {}, +): string { + if (!globstar || globs.length === 0) { + return join(...globs); + } + if (globs.length === 0) return "."; + let joined: string | undefined; + for (const glob of globs) { + const path = glob; + if (path.length > 0) { + if (!joined) joined = path; + else joined += `${SEPARATOR}${path}`; + } + } + if (!joined) return "."; + return normalizeGlob(joined, { extended, globstar }); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/mod.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/mod.ts new file mode 100644 index 00000000000..3c5a27adba0 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/mod.ts @@ -0,0 +1,43 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported mostly from https://github.com/browserify/path-browserify/ +// This module is browser compatible. + +/** + * Utilities for working with OS-specific file paths. + * + * Codes in the examples uses POSIX path but it automatically use Windows path + * on Windows. Use methods under `posix` or `win32` object instead to handle non + * platform specific path like: + * ```ts + * import { posix, win32 } from "@std/path"; + * const p1 = posix.fromFileUrl("file:///home/foo"); + * const p2 = win32.fromFileUrl("file:///home/foo"); + * console.log(p1); // "/home/foo" + * console.log(p2); // "\\home\\foo" + * ``` + * + * This module is browser compatible. + * + * @module + */ +export * from "./basename.ts"; +export * from "./constants.ts"; +export * from "./dirname.ts"; +export * from "./extname.ts"; +export * from "./format.ts"; +export * from "./from_file_url.ts"; +export * from "./is_absolute.ts"; +export * from "./join.ts"; +export * from "./normalize.ts"; +export * from "./parse.ts"; +export * from "./relative.ts"; +export * from "./resolve.ts"; +export * from "./to_file_url.ts"; +export * from "./to_namespaced_path.ts"; +export * from "./common.ts"; +export * from "../_interface.ts"; +export * from "./glob_to_regexp.ts"; +export * from "./is_glob.ts"; +export * from "./join_globs.ts"; +export * from "./normalize_glob.ts"; diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/normalize.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/normalize.ts new file mode 100644 index 00000000000..8e88ad254b0 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/normalize.ts @@ -0,0 +1,30 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertArg } from "../_common/normalize.ts"; +import { normalizeString } from "../_common/normalize_string.ts"; +import { isPosixPathSeparator } from "./_util.ts"; + +/** + * Normalize the `path`, resolving `'..'` and `'.'` segments. + * Note that resolving these segments does not necessarily mean that all will be eliminated. + * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`. + * @param path to be normalized + */ +export function normalize(path: string): string { + assertArg(path); + + const isAbsolute = isPosixPathSeparator(path.charCodeAt(0)); + const trailingSeparator = isPosixPathSeparator( + path.charCodeAt(path.length - 1), + ); + + // Normalize the path + path = normalizeString(path, !isAbsolute, "/", isPosixPathSeparator); + + if (path.length === 0 && !isAbsolute) path = "."; + if (path.length > 0 && trailingSeparator) path += "/"; + + if (isAbsolute) return `/${path}`; + return path; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/normalize_glob.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/normalize_glob.ts new file mode 100644 index 00000000000..49aa71aecff --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/normalize_glob.ts @@ -0,0 +1,27 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { GlobOptions } from "../_common/glob_to_reg_exp.ts"; +import { normalize } from "./normalize.ts"; +import { SEPARATOR_PATTERN } from "./constants.ts"; + +export type { GlobOptions }; + +/** Like normalize(), but doesn't collapse "**\/.." when `globstar` is true. */ +export function normalizeGlob( + glob: string, + { globstar = false }: GlobOptions = {}, +): string { + if (glob.match(/\0/g)) { + throw new Error(`Glob contains invalid characters: "${glob}"`); + } + if (!globstar) { + return normalize(glob); + } + const s = SEPARATOR_PATTERN.source; + const badParentPattern = new RegExp( + `(?<=(${s}|^)\\*\\*${s})\\.\\.(?=${s}|$)`, + "g", + ); + return normalize(glob.replace(badParentPattern, "\0")).replace(/\0/g, ".."); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/parse.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/parse.ts new file mode 100644 index 00000000000..e51ec4a5e95 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/parse.ts @@ -0,0 +1,104 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { CHAR_DOT } from "../_common/constants.ts"; +import type { ParsedPath } from "../_interface.ts"; +import { stripTrailingSeparators } from "../_common/strip_trailing_separators.ts"; +import { assertPath } from "../_common/assert_path.ts"; +import { isPosixPathSeparator } from "./_util.ts"; + +export type { ParsedPath } from "../_interface.ts"; + +/** + * Return a `ParsedPath` object of the `path`. + * @param path to process + */ +export function parse(path: string): ParsedPath { + assertPath(path); + + const ret: ParsedPath = { root: "", dir: "", base: "", ext: "", name: "" }; + if (path.length === 0) return ret; + const isAbsolute = isPosixPathSeparator(path.charCodeAt(0)); + let start: number; + if (isAbsolute) { + ret.root = "/"; + start = 1; + } else { + start = 0; + } + let startDot = -1; + let startPart = 0; + let end = -1; + let matchedSlash = true; + let i = path.length - 1; + + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + let preDotState = 0; + + // Get non-dir info + for (; i >= start; --i) { + const code = path.charCodeAt(i); + if (isPosixPathSeparator(code)) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + continue; + } + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + if (code === CHAR_DOT) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) startDot = i; + else if (preDotState !== 1) preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; + } + } + + if ( + startDot === -1 || + end === -1 || + // We saw a non-dot character immediately before the dot + preDotState === 0 || + // The (right-most) trimmed path component is exactly '..' + (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) + ) { + if (end !== -1) { + if (startPart === 0 && isAbsolute) { + ret.base = ret.name = path.slice(1, end); + } else { + ret.base = ret.name = path.slice(startPart, end); + } + } + // Fallback to '/' in case there is no basename + ret.base = ret.base || "/"; + } else { + if (startPart === 0 && isAbsolute) { + ret.name = path.slice(1, startDot); + ret.base = path.slice(1, end); + } else { + ret.name = path.slice(startPart, startDot); + ret.base = path.slice(startPart, end); + } + ret.ext = path.slice(startDot, end); + } + + if (startPart > 0) { + ret.dir = stripTrailingSeparators( + path.slice(0, startPart - 1), + isPosixPathSeparator, + ); + } else if (isAbsolute) ret.dir = "/"; + + return ret; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/relative.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/relative.ts new file mode 100644 index 00000000000..eec8e855d15 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/relative.ts @@ -0,0 +1,91 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isPosixPathSeparator } from "./_util.ts"; +import { resolve } from "./resolve.ts"; +import { assertArgs } from "../_common/relative.ts"; + +/** + * Return the relative path from `from` to `to` based on current working directory. + * + * @param from path in current working directory + * @param to path in current working directory + */ +export function relative(from: string, to: string): string { + assertArgs(from, to); + + from = resolve(from); + to = resolve(to); + + if (from === to) return ""; + + // Trim any leading backslashes + let fromStart = 1; + const fromEnd = from.length; + for (; fromStart < fromEnd; ++fromStart) { + if (!isPosixPathSeparator(from.charCodeAt(fromStart))) break; + } + const fromLen = fromEnd - fromStart; + + // Trim any leading backslashes + let toStart = 1; + const toEnd = to.length; + for (; toStart < toEnd; ++toStart) { + if (!isPosixPathSeparator(to.charCodeAt(toStart))) break; + } + const toLen = toEnd - toStart; + + // Compare paths to find the longest common path from root + const length = fromLen < toLen ? fromLen : toLen; + let lastCommonSep = -1; + let i = 0; + for (; i <= length; ++i) { + if (i === length) { + if (toLen > length) { + if (isPosixPathSeparator(to.charCodeAt(toStart + i))) { + // We get here if `from` is the exact base path for `to`. + // For example: from='/foo/bar'; to='/foo/bar/baz' + return to.slice(toStart + i + 1); + } else if (i === 0) { + // We get here if `from` is the root + // For example: from='/'; to='/foo' + return to.slice(toStart + i); + } + } else if (fromLen > length) { + if (isPosixPathSeparator(from.charCodeAt(fromStart + i))) { + // We get here if `to` is the exact base path for `from`. + // For example: from='/foo/bar/baz'; to='/foo/bar' + lastCommonSep = i; + } else if (i === 0) { + // We get here if `to` is the root. + // For example: from='/foo'; to='/' + lastCommonSep = 0; + } + } + break; + } + const fromCode = from.charCodeAt(fromStart + i); + const toCode = to.charCodeAt(toStart + i); + if (fromCode !== toCode) break; + else if (isPosixPathSeparator(fromCode)) lastCommonSep = i; + } + + let out = ""; + // Generate the relative path based on the path difference between `to` + // and `from` + for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) { + if (i === fromEnd || isPosixPathSeparator(from.charCodeAt(i))) { + if (out.length === 0) out += ".."; + else out += "/.."; + } + } + + // Lastly, append the rest of the destination (`to`) path that comes after + // the common path parts + if (out.length > 0) return out + to.slice(toStart + lastCommonSep); + else { + toStart += lastCommonSep; + if (isPosixPathSeparator(to.charCodeAt(toStart))) ++toStart; + return to.slice(toStart); + } +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/resolve.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/resolve.ts new file mode 100644 index 00000000000..196a08a568b --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/resolve.ts @@ -0,0 +1,56 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { normalizeString } from "../_common/normalize_string.ts"; +import { assertPath } from "../_common/assert_path.ts"; +import { isPosixPathSeparator } from "./_util.ts"; + +/** + * Resolves path segments into a `path` + * @param pathSegments to process to path + */ +export function resolve(...pathSegments: string[]): string { + let resolvedPath = ""; + let resolvedAbsolute = false; + + for (let i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + let path: string; + + if (i >= 0) path = pathSegments[i]!; + else { + // deno-lint-ignore no-explicit-any + const { Deno } = globalThis as any; + if (typeof Deno?.cwd !== "function") { + throw new TypeError("Resolved a relative path without a CWD."); + } + path = Deno.cwd(); + } + + assertPath(path); + + // Skip empty entries + if (path.length === 0) { + continue; + } + + resolvedPath = `${path}/${resolvedPath}`; + resolvedAbsolute = isPosixPathSeparator(path.charCodeAt(0)); + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when Deno.cwd() fails) + + // Normalize the path + resolvedPath = normalizeString( + resolvedPath, + !resolvedAbsolute, + "/", + isPosixPathSeparator, + ); + + if (resolvedAbsolute) { + if (resolvedPath.length > 0) return `/${resolvedPath}`; + else return "/"; + } else if (resolvedPath.length > 0) return resolvedPath; + else return "."; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/to_file_url.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/to_file_url.ts new file mode 100644 index 00000000000..45553ee33e1 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/to_file_url.ts @@ -0,0 +1,27 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { encodeWhitespace } from "../_common/to_file_url.ts"; +import { isAbsolute } from "./is_absolute.ts"; + +/** + * Converts a path string to a file URL. + * + * ```ts + * import { toFileUrl } from "@std/path/posix/to-file-url"; + * + * toFileUrl("/home/foo"); // new URL("file:///home/foo") + * ``` + * @param path to convert to file URL + */ +export function toFileUrl(path: string): URL { + if (!isAbsolute(path)) { + throw new TypeError("Must be an absolute path."); + } + + const url = new URL("file:///"); + url.pathname = encodeWhitespace( + path.replace(/%/g, "%25").replace(/\\/g, "%5C"), + ); + return url; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/posix/to_namespaced_path.ts b/src/vendor/jsr.io/@std/path/0.224.0/posix/to_namespaced_path.ts new file mode 100644 index 00000000000..39e05ab93a3 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/posix/to_namespaced_path.ts @@ -0,0 +1,11 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Resolves path to a namespace path + * @param path to resolve to namespace + */ +export function toNamespacedPath(path: string): string { + // Non-op on posix systems + return path; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/relative.ts b/src/vendor/jsr.io/@std/path/0.224.0/relative.ts new file mode 100644 index 00000000000..01a6ca78364 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/relative.ts @@ -0,0 +1,21 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import { relative as posixRelative } from "./posix/relative.ts"; +import { relative as windowsRelative } from "./windows/relative.ts"; + +/** + * Return the relative path from `from` to `to` based on current working directory. + * + * An example in windws, for instance: + * from = 'C:\\orandea\\test\\aaa' + * to = 'C:\\orandea\\impl\\bbb' + * The output of the function should be: '..\\..\\impl\\bbb' + * + * @param from path in current working directory + * @param to path in current working directory + */ +export function relative(from: string, to: string): string { + return isWindows ? windowsRelative(from, to) : posixRelative(from, to); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/resolve.ts b/src/vendor/jsr.io/@std/path/0.224.0/resolve.ts new file mode 100644 index 00000000000..86300b108ed --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/resolve.ts @@ -0,0 +1,16 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import { resolve as posixResolve } from "./posix/resolve.ts"; +import { resolve as windowsResolve } from "./windows/resolve.ts"; + +/** + * Resolves path segments into a `path` + * @param pathSegments to process to path + */ +export function resolve(...pathSegments: string[]): string { + return isWindows + ? windowsResolve(...pathSegments) + : posixResolve(...pathSegments); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/to_file_url.ts b/src/vendor/jsr.io/@std/path/0.224.0/to_file_url.ts new file mode 100644 index 00000000000..357f21ebcef --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/to_file_url.ts @@ -0,0 +1,26 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import { toFileUrl as posixToFileUrl } from "./posix/to_file_url.ts"; +import { toFileUrl as windowsToFileUrl } from "./windows/to_file_url.ts"; + +/** + * Converts a path string to a file URL. + * + * ```ts + * import { toFileUrl } from "@std/path/to-file-url"; + * + * // posix + * toFileUrl("/home/foo"); // new URL("file:///home/foo") + * + * // win32 + * toFileUrl("\\home\\foo"); // new URL("file:///home/foo") + * toFileUrl("C:\\Users\\foo"); // new URL("file:///C:/Users/foo") + * toFileUrl("\\\\127.0.0.1\\home\\foo"); // new URL("file://127.0.0.1/home/foo") + * ``` + * @param path to convert to file URL + */ +export function toFileUrl(path: string): URL { + return isWindows ? windowsToFileUrl(path) : posixToFileUrl(path); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/to_namespaced_path.ts b/src/vendor/jsr.io/@std/path/0.224.0/to_namespaced_path.ts new file mode 100644 index 00000000000..89db22d9bcd --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/to_namespaced_path.ts @@ -0,0 +1,16 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import { toNamespacedPath as posixToNamespacedPath } from "./posix/to_namespaced_path.ts"; +import { toNamespacedPath as windowsToNamespacedPath } from "./windows/to_namespaced_path.ts"; + +/** + * Resolves path to a namespace path + * @param path to resolve to namespace + */ +export function toNamespacedPath(path: string): string { + return isWindows + ? windowsToNamespacedPath(path) + : posixToNamespacedPath(path); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/_util.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/_util.ts new file mode 100644 index 00000000000..d4f8f8b21ce --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/_util.ts @@ -0,0 +1,28 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported from https://github.com/browserify/path-browserify/ +// This module is browser compatible. + +import { + CHAR_BACKWARD_SLASH, + CHAR_FORWARD_SLASH, + CHAR_LOWERCASE_A, + CHAR_LOWERCASE_Z, + CHAR_UPPERCASE_A, + CHAR_UPPERCASE_Z, +} from "../_common/constants.ts"; + +export function isPosixPathSeparator(code: number): boolean { + return code === CHAR_FORWARD_SLASH; +} + +export function isPathSeparator(code: number): boolean { + return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH; +} + +export function isWindowsDeviceRoot(code: number): boolean { + return ( + (code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z) || + (code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z) + ); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/basename.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/basename.ts new file mode 100644 index 00000000000..d8629da360a --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/basename.ts @@ -0,0 +1,46 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { + assertArgs, + lastPathSegment, + stripSuffix, +} from "../_common/basename.ts"; +import { CHAR_COLON } from "../_common/constants.ts"; +import { stripTrailingSeparators } from "../_common/strip_trailing_separators.ts"; +import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts"; + +/** + * Return the last portion of a `path`. + * Trailing directory separators are ignored, and optional suffix is removed. + * + * @example + * ```ts + * import { basename } from "@std/path/basename"; + * + * basename("C:\\user\\Documents\\"); // "Documents" + * basename("C:\\user\\Documents\\image.png"); // "image.png" + * basename("C:\\user\\Documents\\image.png", ".png"); // "image" + * ``` + * + * @param path - path to extract the name from. + * @param [suffix] - suffix to remove from extracted name. + */ +export function basename(path: string, suffix = ""): string { + assertArgs(path, suffix); + + // Check for a drive letter prefix so as not to mistake the following + // path separator as an extra separator at the end of the path that can be + // disregarded + let start = 0; + if (path.length >= 2) { + const drive = path.charCodeAt(0); + if (isWindowsDeviceRoot(drive)) { + if (path.charCodeAt(1) === CHAR_COLON) start = 2; + } + } + + const lastSegment = lastPathSegment(path, isPathSeparator, start); + const strippedSegment = stripTrailingSeparators(lastSegment, isPathSeparator); + return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/common.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/common.ts new file mode 100644 index 00000000000..9d31bd81f3a --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/common.ts @@ -0,0 +1,24 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { _common } from "../_common/common.ts"; +import { SEPARATOR } from "./constants.ts"; + +/** Determines the common path from a set of paths, using an optional separator, + * which defaults to the OS default separator. + * + * ```ts + * import { common } from "@std/path"; + * const p = common([ + * "./deno/std/path/mod.ts", + * "./deno/std/fs/mod.ts", + * ]); + * console.log(p); // "./deno/std/" + * ``` + */ +export function common( + paths: string[], + sep: string = SEPARATOR, +): string { + return _common(paths, sep); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/constants.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/constants.ts new file mode 100644 index 00000000000..b88dc1bee5a --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/constants.ts @@ -0,0 +1,6 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +export const DELIMITER = ";" as const; +export const SEPARATOR = "\\" as const; +export const SEPARATOR_PATTERN = /[\\/]+/; diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/dirname.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/dirname.ts new file mode 100644 index 00000000000..d5c0ed8d9dd --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/dirname.ts @@ -0,0 +1,103 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertArg } from "../_common/dirname.ts"; +import { CHAR_COLON } from "../_common/constants.ts"; +import { stripTrailingSeparators } from "../_common/strip_trailing_separators.ts"; +import { + isPathSeparator, + isPosixPathSeparator, + isWindowsDeviceRoot, +} from "./_util.ts"; + +/** + * Return the directory path of a `path`. + * @param path - path to extract the directory from. + */ +export function dirname(path: string): string { + assertArg(path); + + const len = path.length; + let rootEnd = -1; + let end = -1; + let matchedSlash = true; + let offset = 0; + const code = path.charCodeAt(0); + + // Try to match a root + if (len > 1) { + if (isPathSeparator(code)) { + // Possible UNC root + + rootEnd = offset = 1; + + if (isPathSeparator(path.charCodeAt(1))) { + // Matched double path separator at beginning + let j = 2; + let last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + // Matched! + last = j; + // Match 1 or more path separators + for (; j < len; ++j) { + if (!isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + // Matched! + last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j === len) { + // We matched a UNC root only + return path; + } + if (j !== last) { + // We matched a UNC root with leftovers + + // Offset by 1 to include the separator after the UNC root to + // treat it as a "normal root" on top of a (UNC) root + rootEnd = offset = j + 1; + } + } + } + } + } else if (isWindowsDeviceRoot(code)) { + // Possible device root + + if (path.charCodeAt(1) === CHAR_COLON) { + rootEnd = offset = 2; + if (len > 2) { + if (isPathSeparator(path.charCodeAt(2))) rootEnd = offset = 3; + } + } + } + } else if (isPathSeparator(code)) { + // `path` contains just a path separator, exit early to avoid + // unnecessary work + return path; + } + + for (let i = len - 1; i >= offset; --i) { + if (isPathSeparator(path.charCodeAt(i))) { + if (!matchedSlash) { + end = i; + break; + } + } else { + // We saw the first non-path separator + matchedSlash = false; + } + } + + if (end === -1) { + if (rootEnd === -1) return "."; + else end = rootEnd; + } + return stripTrailingSeparators(path.slice(0, end), isPosixPathSeparator); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/extname.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/extname.ts new file mode 100644 index 00000000000..23f81b21f1f --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/extname.ts @@ -0,0 +1,76 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { CHAR_COLON, CHAR_DOT } from "../_common/constants.ts"; +import { assertPath } from "../_common/assert_path.ts"; +import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts"; + +/** + * Return the extension of the `path` with leading period. + * @param path with extension + * @returns extension (ex. for `file.ts` returns `.ts`) + */ +export function extname(path: string): string { + assertPath(path); + + let start = 0; + let startDot = -1; + let startPart = 0; + let end = -1; + let matchedSlash = true; + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + let preDotState = 0; + + // Check for a drive letter prefix so as not to mistake the following + // path separator as an extra separator at the end of the path that can be + // disregarded + + if ( + path.length >= 2 && + path.charCodeAt(1) === CHAR_COLON && + isWindowsDeviceRoot(path.charCodeAt(0)) + ) { + start = startPart = 2; + } + + for (let i = path.length - 1; i >= start; --i) { + const code = path.charCodeAt(i); + if (isPathSeparator(code)) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + continue; + } + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + if (code === CHAR_DOT) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) startDot = i; + else if (preDotState !== 1) preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; + } + } + + if ( + startDot === -1 || + end === -1 || + // We saw a non-dot character immediately before the dot + preDotState === 0 || + // The (right-most) trimmed path component is exactly '..' + (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) + ) { + return ""; + } + return path.slice(startDot, end); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/format.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/format.ts new file mode 100644 index 00000000000..b6b9658ea2c --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/format.ts @@ -0,0 +1,14 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { _format, assertArg } from "../_common/format.ts"; +import type { FormatInputPathObject } from "../_interface.ts"; + +/** + * Generate a path from `FormatInputPathObject` object. + * @param pathObject with path + */ +export function format(pathObject: FormatInputPathObject): string { + assertArg(pathObject); + return _format("\\", pathObject); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/from_file_url.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/from_file_url.ts new file mode 100644 index 00000000000..bda7667cc6b --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/from_file_url.ts @@ -0,0 +1,30 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertArg } from "../_common/from_file_url.ts"; + +/** + * Converts a file URL to a path string. + * + * ```ts + * import { fromFileUrl } from "@std/path/windows/from-file-url"; + * + * fromFileUrl("file:///home/foo"); // "\\home\\foo" + * fromFileUrl("file:///C:/Users/foo"); // "C:\\Users\\foo" + * fromFileUrl("file://localhost/home/foo"); // "\\\\localhost\\home\\foo" + * ``` + * @param url of a file URL + */ +export function fromFileUrl(url: URL | string): string { + url = assertArg(url); + let path = decodeURIComponent( + url.pathname.replace(/\//g, "\\").replace(/%(?![0-9A-Fa-f]{2})/g, "%25"), + ).replace(/^\\*([A-Za-z]:)(\\|$)/, "$1\\"); + if (url.hostname !== "") { + // Note: The `URL` implementation guarantees that the drive letter and + // hostname are mutually exclusive. Otherwise it would not have been valid + // to append the hostname and path like this. + path = `\\\\${url.hostname}${path}`; + } + return path; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/glob_to_regexp.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/glob_to_regexp.ts new file mode 100644 index 00000000000..ad450c81b83 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/glob_to_regexp.ts @@ -0,0 +1,79 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { + _globToRegExp, + type GlobConstants, + type GlobToRegExpOptions, +} from "../_common/glob_to_reg_exp.ts"; + +const constants: GlobConstants = { + sep: "(?:\\\\|/)+", + sepMaybe: "(?:\\\\|/)*", + seps: ["\\", "/"], + globstar: "(?:[^\\\\/]*(?:\\\\|/|$)+)*", + wildcard: "[^\\\\/]*", + escapePrefix: "`", +}; + +/** Convert a glob string to a regular expression. + * + * Tries to match bash glob expansion as closely as possible. + * + * Basic glob syntax: + * - `*` - Matches everything without leaving the path segment. + * - `?` - Matches any single character. + * - `{foo,bar}` - Matches `foo` or `bar`. + * - `[abcd]` - Matches `a`, `b`, `c` or `d`. + * - `[a-d]` - Matches `a`, `b`, `c` or `d`. + * - `[!abcd]` - Matches any single character besides `a`, `b`, `c` or `d`. + * - `[[::]]` - Matches any character belonging to ``. + * - `[[:alnum:]]` - Matches any digit or letter. + * - `[[:digit:]abc]` - Matches any digit, `a`, `b` or `c`. + * - See https://facelessuser.github.io/wcmatch/glob/#posix-character-classes + * for a complete list of supported character classes. + * - `\` - Escapes the next character for an `os` other than `"windows"`. + * - \` - Escapes the next character for `os` set to `"windows"`. + * - `/` - Path separator. + * - `\` - Additional path separator only for `os` set to `"windows"`. + * + * Extended syntax: + * - Requires `{ extended: true }`. + * - `?(foo|bar)` - Matches 0 or 1 instance of `{foo,bar}`. + * - `@(foo|bar)` - Matches 1 instance of `{foo,bar}`. They behave the same. + * - `*(foo|bar)` - Matches _n_ instances of `{foo,bar}`. + * - `+(foo|bar)` - Matches _n > 0_ instances of `{foo,bar}`. + * - `!(foo|bar)` - Matches anything other than `{foo,bar}`. + * - See https://www.linuxjournal.com/content/bash-extended-globbing. + * + * Globstar syntax: + * - Requires `{ globstar: true }`. + * - `**` - Matches any number of any path segments. + * - Must comprise its entire path segment in the provided glob. + * - See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option. + * + * Note the following properties: + * - The generated `RegExp` is anchored at both start and end. + * - Repeating and trailing separators are tolerated. Trailing separators in the + * provided glob have no meaning and are discarded. + * - Absolute globs will only match absolute paths, etc. + * - Empty globs will match nothing. + * - Any special glob syntax must be contained to one path segment. For example, + * `?(foo|bar/baz)` is invalid. The separator will take precedence and the + * first segment ends with an unclosed group. + * - If a path segment ends with unclosed groups or a dangling escape prefix, a + * parse error has occurred. Every character for that segment is taken + * literally in this event. + * + * Limitations: + * - A negative group like `!(foo|bar)` will wrongly be converted to a negative + * look-ahead followed by a wildcard. This means that `!(foo).js` will wrongly + * fail to match `foobar.js`, even though `foobar` is not `foo`. Effectively, + * `!(foo|bar)` is treated like `!(@(foo|bar)*)`. This will work correctly if + * the group occurs not nested at the end of the segment. */ +export function globToRegExp( + glob: string, + options: GlobToRegExpOptions = {}, +): RegExp { + return _globToRegExp(constants, glob, options); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/is_absolute.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/is_absolute.ts new file mode 100644 index 00000000000..44902cdb8a5 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/is_absolute.ts @@ -0,0 +1,29 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { CHAR_COLON } from "../_common/constants.ts"; +import { assertPath } from "../_common/assert_path.ts"; +import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts"; + +/** + * Verifies whether provided path is absolute + * @param path to be verified as absolute + */ +export function isAbsolute(path: string): boolean { + assertPath(path); + + const len = path.length; + if (len === 0) return false; + + const code = path.charCodeAt(0); + if (isPathSeparator(code)) { + return true; + } else if (isWindowsDeviceRoot(code)) { + // Possible device root + + if (len > 2 && path.charCodeAt(1) === CHAR_COLON) { + if (isPathSeparator(path.charCodeAt(2))) return true; + } + } + return false; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/is_glob.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/is_glob.ts new file mode 100644 index 00000000000..6b97e68e132 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/is_glob.ts @@ -0,0 +1,4 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +export { isGlob } from "../is_glob.ts"; diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/join.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/join.ts new file mode 100644 index 00000000000..8436f1fc42f --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/join.ts @@ -0,0 +1,72 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assert } from "jsr:/@std/assert@^0.224.0/assert"; +import { assertPath } from "../_common/assert_path.ts"; +import { isPathSeparator } from "./_util.ts"; +import { normalize } from "./normalize.ts"; + +/** + * Join all given a sequence of `paths`,then normalizes the resulting path. + * @param paths to be joined and normalized + */ +export function join(...paths: string[]): string { + if (paths.length === 0) return "."; + + let joined: string | undefined; + let firstPart: string | null = null; + for (let i = 0; i < paths.length; ++i) { + const path = paths[i]!; + assertPath(path); + if (path.length > 0) { + if (joined === undefined) joined = firstPart = path; + else joined += `\\${path}`; + } + } + + if (joined === undefined) return "."; + + // Make sure that the joined path doesn't start with two slashes, because + // normalize() will mistake it for an UNC path then. + // + // This step is skipped when it is very clear that the user actually + // intended to point at an UNC path. This is assumed when the first + // non-empty string arguments starts with exactly two slashes followed by + // at least one more non-slash character. + // + // Note that for normalize() to treat a path as an UNC path it needs to + // have at least 2 components, so we don't filter for that here. + // This means that the user can use join to construct UNC paths from + // a server name and a share name; for example: + // path.join('//server', 'share') -> '\\\\server\\share\\') + let needsReplace = true; + let slashCount = 0; + assert(firstPart !== null); + if (isPathSeparator(firstPart.charCodeAt(0))) { + ++slashCount; + const firstLen = firstPart.length; + if (firstLen > 1) { + if (isPathSeparator(firstPart.charCodeAt(1))) { + ++slashCount; + if (firstLen > 2) { + if (isPathSeparator(firstPart.charCodeAt(2))) ++slashCount; + else { + // We matched a UNC path in the first part + needsReplace = false; + } + } + } + } + } + if (needsReplace) { + // Find any more consecutive slashes we need to replace + for (; slashCount < joined.length; ++slashCount) { + if (!isPathSeparator(joined.charCodeAt(slashCount))) break; + } + + // Replace the slashes if needed + if (slashCount >= 2) joined = `\\${joined.slice(slashCount)}`; + } + + return normalize(joined); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/join_globs.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/join_globs.ts new file mode 100644 index 00000000000..f30a11489ec --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/join_globs.ts @@ -0,0 +1,30 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { GlobOptions } from "../_common/glob_to_reg_exp.ts"; +import { join } from "./join.ts"; +import { SEPARATOR } from "./constants.ts"; +import { normalizeGlob } from "./normalize_glob.ts"; + +export type { GlobOptions }; + +/** Like join(), but doesn't collapse "**\/.." when `globstar` is true. */ +export function joinGlobs( + globs: string[], + { extended = true, globstar = false }: GlobOptions = {}, +): string { + if (!globstar || globs.length === 0) { + return join(...globs); + } + if (globs.length === 0) return "."; + let joined: string | undefined; + for (const glob of globs) { + const path = glob; + if (path.length > 0) { + if (!joined) joined = path; + else joined += `${SEPARATOR}${path}`; + } + } + if (!joined) return "."; + return normalizeGlob(joined, { extended, globstar }); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/mod.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/mod.ts new file mode 100644 index 00000000000..3c5a27adba0 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/mod.ts @@ -0,0 +1,43 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported mostly from https://github.com/browserify/path-browserify/ +// This module is browser compatible. + +/** + * Utilities for working with OS-specific file paths. + * + * Codes in the examples uses POSIX path but it automatically use Windows path + * on Windows. Use methods under `posix` or `win32` object instead to handle non + * platform specific path like: + * ```ts + * import { posix, win32 } from "@std/path"; + * const p1 = posix.fromFileUrl("file:///home/foo"); + * const p2 = win32.fromFileUrl("file:///home/foo"); + * console.log(p1); // "/home/foo" + * console.log(p2); // "\\home\\foo" + * ``` + * + * This module is browser compatible. + * + * @module + */ +export * from "./basename.ts"; +export * from "./constants.ts"; +export * from "./dirname.ts"; +export * from "./extname.ts"; +export * from "./format.ts"; +export * from "./from_file_url.ts"; +export * from "./is_absolute.ts"; +export * from "./join.ts"; +export * from "./normalize.ts"; +export * from "./parse.ts"; +export * from "./relative.ts"; +export * from "./resolve.ts"; +export * from "./to_file_url.ts"; +export * from "./to_namespaced_path.ts"; +export * from "./common.ts"; +export * from "../_interface.ts"; +export * from "./glob_to_regexp.ts"; +export * from "./is_glob.ts"; +export * from "./join_globs.ts"; +export * from "./normalize_glob.ts"; diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/normalize.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/normalize.ts new file mode 100644 index 00000000000..8e571fe3931 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/normalize.ts @@ -0,0 +1,127 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertArg } from "../_common/normalize.ts"; +import { CHAR_COLON } from "../_common/constants.ts"; +import { normalizeString } from "../_common/normalize_string.ts"; +import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts"; + +/** + * Normalize the `path`, resolving `'..'` and `'.'` segments. + * Note that resolving these segments does not necessarily mean that all will be eliminated. + * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`. + * @param path to be normalized + */ +export function normalize(path: string): string { + assertArg(path); + + const len = path.length; + let rootEnd = 0; + let device: string | undefined; + let isAbsolute = false; + const code = path.charCodeAt(0); + + // Try to match a root + if (len > 1) { + if (isPathSeparator(code)) { + // Possible UNC root + + // If we started with a separator, we know we at least have an absolute + // path of some kind (UNC or otherwise) + isAbsolute = true; + + if (isPathSeparator(path.charCodeAt(1))) { + // Matched double path separator at beginning + let j = 2; + let last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + const firstPart = path.slice(last, j); + // Matched! + last = j; + // Match 1 or more path separators + for (; j < len; ++j) { + if (!isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + // Matched! + last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j === len) { + // We matched a UNC root only + // Return the normalized version of the UNC root since there + // is nothing left to process + + return `\\\\${firstPart}\\${path.slice(last)}\\`; + } else if (j !== last) { + // We matched a UNC root with leftovers + + device = `\\\\${firstPart}\\${path.slice(last, j)}`; + rootEnd = j; + } + } + } + } else { + rootEnd = 1; + } + } else if (isWindowsDeviceRoot(code)) { + // Possible device root + + if (path.charCodeAt(1) === CHAR_COLON) { + device = path.slice(0, 2); + rootEnd = 2; + if (len > 2) { + if (isPathSeparator(path.charCodeAt(2))) { + // Treat separator following drive name as an absolute path + // indicator + isAbsolute = true; + rootEnd = 3; + } + } + } + } + } else if (isPathSeparator(code)) { + // `path` contains just a path separator, exit early to avoid unnecessary + // work + return "\\"; + } + + let tail: string; + if (rootEnd < len) { + tail = normalizeString( + path.slice(rootEnd), + !isAbsolute, + "\\", + isPathSeparator, + ); + } else { + tail = ""; + } + if (tail.length === 0 && !isAbsolute) tail = "."; + if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) { + tail += "\\"; + } + if (device === undefined) { + if (isAbsolute) { + if (tail.length > 0) return `\\${tail}`; + else return "\\"; + } else if (tail.length > 0) { + return tail; + } else { + return ""; + } + } else if (isAbsolute) { + if (tail.length > 0) return `${device}\\${tail}`; + else return `${device}\\`; + } else if (tail.length > 0) { + return device + tail; + } else { + return device; + } +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/normalize_glob.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/normalize_glob.ts new file mode 100644 index 00000000000..49aa71aecff --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/normalize_glob.ts @@ -0,0 +1,27 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { GlobOptions } from "../_common/glob_to_reg_exp.ts"; +import { normalize } from "./normalize.ts"; +import { SEPARATOR_PATTERN } from "./constants.ts"; + +export type { GlobOptions }; + +/** Like normalize(), but doesn't collapse "**\/.." when `globstar` is true. */ +export function normalizeGlob( + glob: string, + { globstar = false }: GlobOptions = {}, +): string { + if (glob.match(/\0/g)) { + throw new Error(`Glob contains invalid characters: "${glob}"`); + } + if (!globstar) { + return normalize(glob); + } + const s = SEPARATOR_PATTERN.source; + const badParentPattern = new RegExp( + `(?<=(${s}|^)\\*\\*${s})\\.\\.(?=${s}|$)`, + "g", + ); + return normalize(glob.replace(badParentPattern, "\0")).replace(/\0/g, ".."); +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/parse.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/parse.ts new file mode 100644 index 00000000000..33c99c790f7 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/parse.ts @@ -0,0 +1,167 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { CHAR_COLON, CHAR_DOT } from "../_common/constants.ts"; +import type { ParsedPath } from "../_interface.ts"; +import { assertPath } from "../_common/assert_path.ts"; +import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts"; + +export type { ParsedPath } from "../_interface.ts"; + +/** + * Return a `ParsedPath` object of the `path`. + * @param path to process + */ +export function parse(path: string): ParsedPath { + assertPath(path); + + const ret: ParsedPath = { root: "", dir: "", base: "", ext: "", name: "" }; + + const len = path.length; + if (len === 0) return ret; + + let rootEnd = 0; + let code = path.charCodeAt(0); + + // Try to match a root + if (len > 1) { + if (isPathSeparator(code)) { + // Possible UNC root + + rootEnd = 1; + if (isPathSeparator(path.charCodeAt(1))) { + // Matched double path separator at beginning + let j = 2; + let last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + // Matched! + last = j; + // Match 1 or more path separators + for (; j < len; ++j) { + if (!isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + // Matched! + last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j === len) { + // We matched a UNC root only + + rootEnd = j; + } else if (j !== last) { + // We matched a UNC root with leftovers + + rootEnd = j + 1; + } + } + } + } + } else if (isWindowsDeviceRoot(code)) { + // Possible device root + + if (path.charCodeAt(1) === CHAR_COLON) { + rootEnd = 2; + if (len > 2) { + if (isPathSeparator(path.charCodeAt(2))) { + if (len === 3) { + // `path` contains just a drive root, exit early to avoid + // unnecessary work + ret.root = ret.dir = path; + ret.base = "\\"; + return ret; + } + rootEnd = 3; + } + } else { + // `path` contains just a relative drive root, exit early to avoid + // unnecessary work + ret.root = ret.dir = path; + return ret; + } + } + } + } else if (isPathSeparator(code)) { + // `path` contains just a path separator, exit early to avoid + // unnecessary work + ret.root = ret.dir = path; + ret.base = "\\"; + return ret; + } + + if (rootEnd > 0) ret.root = path.slice(0, rootEnd); + + let startDot = -1; + let startPart = rootEnd; + let end = -1; + let matchedSlash = true; + let i = path.length - 1; + + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + let preDotState = 0; + + // Get non-dir info + for (; i >= rootEnd; --i) { + code = path.charCodeAt(i); + if (isPathSeparator(code)) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + continue; + } + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + if (code === CHAR_DOT) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) startDot = i; + else if (preDotState !== 1) preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; + } + } + + if ( + startDot === -1 || + end === -1 || + // We saw a non-dot character immediately before the dot + preDotState === 0 || + // The (right-most) trimmed path component is exactly '..' + (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) + ) { + if (end !== -1) { + ret.base = ret.name = path.slice(startPart, end); + } + } else { + ret.name = path.slice(startPart, startDot); + ret.base = path.slice(startPart, end); + ret.ext = path.slice(startDot, end); + } + + // Fallback to '\' in case there is no basename + ret.base = ret.base || "\\"; + + // If the directory is the root, use the entire root as the `dir` including + // the trailing slash if any (`C:\abc` -> `C:\`). Otherwise, strip out the + // trailing slash (`C:\abc\def` -> `C:\abc`). + if (startPart > 0 && startPart !== rootEnd) { + ret.dir = path.slice(0, startPart - 1); + } else ret.dir = ret.root; + + return ret; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/relative.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/relative.ts new file mode 100644 index 00000000000..90ba2270db9 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/relative.ts @@ -0,0 +1,118 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { CHAR_BACKWARD_SLASH } from "../_common/constants.ts"; +import { resolve } from "./resolve.ts"; +import { assertArgs } from "../_common/relative.ts"; + +/** + * Return the relative path from `from` to `to` based on current working directory. + * + * An example in windws, for instance: + * from = 'C:\\orandea\\test\\aaa' + * to = 'C:\\orandea\\impl\\bbb' + * The output of the function should be: '..\\..\\impl\\bbb' + * + * @param from path in current working directory + * @param to path in current working directory + */ +export function relative(from: string, to: string): string { + assertArgs(from, to); + + const fromOrig = resolve(from); + const toOrig = resolve(to); + + if (fromOrig === toOrig) return ""; + + from = fromOrig.toLowerCase(); + to = toOrig.toLowerCase(); + + if (from === to) return ""; + + // Trim any leading backslashes + let fromStart = 0; + let fromEnd = from.length; + for (; fromStart < fromEnd; ++fromStart) { + if (from.charCodeAt(fromStart) !== CHAR_BACKWARD_SLASH) break; + } + // Trim trailing backslashes (applicable to UNC paths only) + for (; fromEnd - 1 > fromStart; --fromEnd) { + if (from.charCodeAt(fromEnd - 1) !== CHAR_BACKWARD_SLASH) break; + } + const fromLen = fromEnd - fromStart; + + // Trim any leading backslashes + let toStart = 0; + let toEnd = to.length; + for (; toStart < toEnd; ++toStart) { + if (to.charCodeAt(toStart) !== CHAR_BACKWARD_SLASH) break; + } + // Trim trailing backslashes (applicable to UNC paths only) + for (; toEnd - 1 > toStart; --toEnd) { + if (to.charCodeAt(toEnd - 1) !== CHAR_BACKWARD_SLASH) break; + } + const toLen = toEnd - toStart; + + // Compare paths to find the longest common path from root + const length = fromLen < toLen ? fromLen : toLen; + let lastCommonSep = -1; + let i = 0; + for (; i <= length; ++i) { + if (i === length) { + if (toLen > length) { + if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) { + // We get here if `from` is the exact base path for `to`. + // For example: from='C:\\foo\\bar'; to='C:\\foo\\bar\\baz' + return toOrig.slice(toStart + i + 1); + } else if (i === 2) { + // We get here if `from` is the device root. + // For example: from='C:\\'; to='C:\\foo' + return toOrig.slice(toStart + i); + } + } + if (fromLen > length) { + if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) { + // We get here if `to` is the exact base path for `from`. + // For example: from='C:\\foo\\bar'; to='C:\\foo' + lastCommonSep = i; + } else if (i === 2) { + // We get here if `to` is the device root. + // For example: from='C:\\foo\\bar'; to='C:\\' + lastCommonSep = 3; + } + } + break; + } + const fromCode = from.charCodeAt(fromStart + i); + const toCode = to.charCodeAt(toStart + i); + if (fromCode !== toCode) break; + else if (fromCode === CHAR_BACKWARD_SLASH) lastCommonSep = i; + } + + // We found a mismatch before the first common path separator was seen, so + // return the original `to`. + if (i !== length && lastCommonSep === -1) { + return toOrig; + } + + let out = ""; + if (lastCommonSep === -1) lastCommonSep = 0; + // Generate the relative path based on the path difference between `to` and + // `from` + for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) { + if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) { + if (out.length === 0) out += ".."; + else out += "\\.."; + } + } + + // Lastly, append the rest of the destination (`to`) path that comes after + // the common path parts + if (out.length > 0) { + return out + toOrig.slice(toStart + lastCommonSep, toEnd); + } else { + toStart += lastCommonSep; + if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) ++toStart; + return toOrig.slice(toStart, toEnd); + } +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/resolve.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/resolve.ts new file mode 100644 index 00000000000..c34f1e8c668 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/resolve.ts @@ -0,0 +1,161 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { CHAR_COLON } from "../_common/constants.ts"; +import { normalizeString } from "../_common/normalize_string.ts"; +import { assertPath } from "../_common/assert_path.ts"; +import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts"; + +/** + * Resolves path segments into a `path` + * @param pathSegments to process to path + */ +export function resolve(...pathSegments: string[]): string { + let resolvedDevice = ""; + let resolvedTail = ""; + let resolvedAbsolute = false; + + for (let i = pathSegments.length - 1; i >= -1; i--) { + let path: string; + // deno-lint-ignore no-explicit-any + const { Deno } = globalThis as any; + if (i >= 0) { + path = pathSegments[i]!; + } else if (!resolvedDevice) { + if (typeof Deno?.cwd !== "function") { + throw new TypeError("Resolved a drive-letter-less path without a CWD."); + } + path = Deno.cwd(); + } else { + if ( + typeof Deno?.env?.get !== "function" || typeof Deno?.cwd !== "function" + ) { + throw new TypeError("Resolved a relative path without a CWD."); + } + path = Deno.cwd(); + + // Verify that a cwd was found and that it actually points + // to our drive. If not, default to the drive's root. + if ( + path === undefined || + path.slice(0, 3).toLowerCase() !== `${resolvedDevice.toLowerCase()}\\` + ) { + path = `${resolvedDevice}\\`; + } + } + + assertPath(path); + + const len = path.length; + + // Skip empty entries + if (len === 0) continue; + + let rootEnd = 0; + let device = ""; + let isAbsolute = false; + const code = path.charCodeAt(0); + + // Try to match a root + if (len > 1) { + if (isPathSeparator(code)) { + // Possible UNC root + + // If we started with a separator, we know we at least have an + // absolute path of some kind (UNC or otherwise) + isAbsolute = true; + + if (isPathSeparator(path.charCodeAt(1))) { + // Matched double path separator at beginning + let j = 2; + let last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + const firstPart = path.slice(last, j); + // Matched! + last = j; + // Match 1 or more path separators + for (; j < len; ++j) { + if (!isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + // Matched! + last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j === len) { + // We matched a UNC root only + device = `\\\\${firstPart}\\${path.slice(last)}`; + rootEnd = j; + } else if (j !== last) { + // We matched a UNC root with leftovers + + device = `\\\\${firstPart}\\${path.slice(last, j)}`; + rootEnd = j; + } + } + } + } else { + rootEnd = 1; + } + } else if (isWindowsDeviceRoot(code)) { + // Possible device root + + if (path.charCodeAt(1) === CHAR_COLON) { + device = path.slice(0, 2); + rootEnd = 2; + if (len > 2) { + if (isPathSeparator(path.charCodeAt(2))) { + // Treat separator following drive name as an absolute path + // indicator + isAbsolute = true; + rootEnd = 3; + } + } + } + } + } else if (isPathSeparator(code)) { + // `path` contains just a path separator + rootEnd = 1; + isAbsolute = true; + } + + if ( + device.length > 0 && + resolvedDevice.length > 0 && + device.toLowerCase() !== resolvedDevice.toLowerCase() + ) { + // This path points to another device so it is not applicable + continue; + } + + if (resolvedDevice.length === 0 && device.length > 0) { + resolvedDevice = device; + } + if (!resolvedAbsolute) { + resolvedTail = `${path.slice(rootEnd)}\\${resolvedTail}`; + resolvedAbsolute = isAbsolute; + } + + if (resolvedAbsolute && resolvedDevice.length > 0) break; + } + + // At this point the path should be resolved to a full absolute path, + // but handle relative paths to be safe (might happen when Deno.cwd() + // fails) + + // Normalize the tail path + resolvedTail = normalizeString( + resolvedTail, + !resolvedAbsolute, + "\\", + isPathSeparator, + ); + + return resolvedDevice + (resolvedAbsolute ? "\\" : "") + resolvedTail || "."; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/to_file_url.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/to_file_url.ts new file mode 100644 index 00000000000..047d6559083 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/to_file_url.ts @@ -0,0 +1,35 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { encodeWhitespace } from "../_common/to_file_url.ts"; +import { isAbsolute } from "./is_absolute.ts"; + +/** + * Converts a path string to a file URL. + * + * ```ts + * import { toFileUrl } from "@std/path/windows/to-file-url"; + * + * toFileUrl("\\home\\foo"); // new URL("file:///home/foo") + * toFileUrl("C:\\Users\\foo"); // new URL("file:///C:/Users/foo") + * toFileUrl("\\\\127.0.0.1\\home\\foo"); // new URL("file://127.0.0.1/home/foo") + * ``` + * @param path to convert to file URL + */ +export function toFileUrl(path: string): URL { + if (!isAbsolute(path)) { + throw new TypeError("Must be an absolute path."); + } + const [, hostname, pathname] = path.match( + /^(?:[/\\]{2}([^/\\]+)(?=[/\\](?:[^/\\]|$)))?(.*)/, + )!; + const url = new URL("file:///"); + url.pathname = encodeWhitespace(pathname!.replace(/%/g, "%25")); + if (hostname !== undefined && hostname !== "localhost") { + url.hostname = hostname; + if (!url.hostname) { + throw new TypeError("Invalid hostname."); + } + } + return url; +} diff --git a/src/vendor/jsr.io/@std/path/0.224.0/windows/to_namespaced_path.ts b/src/vendor/jsr.io/@std/path/0.224.0/windows/to_namespaced_path.ts new file mode 100644 index 00000000000..8f680a50754 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/0.224.0/windows/to_namespaced_path.ts @@ -0,0 +1,49 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { + CHAR_BACKWARD_SLASH, + CHAR_COLON, + CHAR_DOT, + CHAR_QUESTION_MARK, +} from "../_common/constants.ts"; +import { isWindowsDeviceRoot } from "./_util.ts"; +import { resolve } from "./resolve.ts"; + +/** + * Resolves path to a namespace path + * @param path to resolve to namespace + */ +export function toNamespacedPath(path: string): string { + // Note: this will *probably* throw somewhere. + if (typeof path !== "string") return path; + if (path.length === 0) return ""; + + const resolvedPath = resolve(path); + + if (resolvedPath.length >= 3) { + if (resolvedPath.charCodeAt(0) === CHAR_BACKWARD_SLASH) { + // Possible UNC root + + if (resolvedPath.charCodeAt(1) === CHAR_BACKWARD_SLASH) { + const code = resolvedPath.charCodeAt(2); + if (code !== CHAR_QUESTION_MARK && code !== CHAR_DOT) { + // Matched non-long UNC root, convert the path to a long UNC path + return `\\\\?\\UNC\\${resolvedPath.slice(2)}`; + } + } + } else if (isWindowsDeviceRoot(resolvedPath.charCodeAt(0))) { + // Possible device root + + if ( + resolvedPath.charCodeAt(1) === CHAR_COLON && + resolvedPath.charCodeAt(2) === CHAR_BACKWARD_SLASH + ) { + // Matched device root, convert the path to a long UNC path + return `\\\\?\\${resolvedPath}`; + } + } + } + + return path; +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/assert_path.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/assert_path.ts new file mode 100644 index 00000000000..7033edcd1a7 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/assert_path.ts @@ -0,0 +1,10 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. + +export function assertPath(path?: string) { + if (typeof path !== "string") { + throw new TypeError( + `Path must be a string. Received ${JSON.stringify(path)}`, + ); + } +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/constants.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/constants.ts new file mode 100644 index 00000000000..9bfd411b668 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/constants.ts @@ -0,0 +1,49 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported from https://github.com/browserify/path-browserify/ +// This module is browser compatible. + +// Alphabet chars. +export const CHAR_UPPERCASE_A = 65; /* A */ +export const CHAR_LOWERCASE_A = 97; /* a */ +export const CHAR_UPPERCASE_Z = 90; /* Z */ +export const CHAR_LOWERCASE_Z = 122; /* z */ + +// Non-alphabetic chars. +export const CHAR_DOT = 46; /* . */ +export const CHAR_FORWARD_SLASH = 47; /* / */ +export const CHAR_BACKWARD_SLASH = 92; /* \ */ +export const CHAR_VERTICAL_LINE = 124; /* | */ +export const CHAR_COLON = 58; /* : */ +export const CHAR_QUESTION_MARK = 63; /* ? */ +export const CHAR_UNDERSCORE = 95; /* _ */ +export const CHAR_LINE_FEED = 10; /* \n */ +export const CHAR_CARRIAGE_RETURN = 13; /* \r */ +export const CHAR_TAB = 9; /* \t */ +export const CHAR_FORM_FEED = 12; /* \f */ +export const CHAR_EXCLAMATION_MARK = 33; /* ! */ +export const CHAR_HASH = 35; /* # */ +export const CHAR_SPACE = 32; /* */ +export const CHAR_NO_BREAK_SPACE = 160; /* \u00A0 */ +export const CHAR_ZERO_WIDTH_NOBREAK_SPACE = 65279; /* \uFEFF */ +export const CHAR_LEFT_SQUARE_BRACKET = 91; /* [ */ +export const CHAR_RIGHT_SQUARE_BRACKET = 93; /* ] */ +export const CHAR_LEFT_ANGLE_BRACKET = 60; /* < */ +export const CHAR_RIGHT_ANGLE_BRACKET = 62; /* > */ +export const CHAR_LEFT_CURLY_BRACKET = 123; /* { */ +export const CHAR_RIGHT_CURLY_BRACKET = 125; /* } */ +export const CHAR_HYPHEN_MINUS = 45; /* - */ +export const CHAR_PLUS = 43; /* + */ +export const CHAR_DOUBLE_QUOTE = 34; /* " */ +export const CHAR_SINGLE_QUOTE = 39; /* ' */ +export const CHAR_PERCENT = 37; /* % */ +export const CHAR_SEMICOLON = 59; /* ; */ +export const CHAR_CIRCUMFLEX_ACCENT = 94; /* ^ */ +export const CHAR_GRAVE_ACCENT = 96; /* ` */ +export const CHAR_AT = 64; /* @ */ +export const CHAR_AMPERSAND = 38; /* & */ +export const CHAR_EQUAL = 61; /* = */ + +// Digits +export const CHAR_0 = 48; /* 0 */ +export const CHAR_9 = 57; /* 9 */ diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/normalize.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/normalize.ts new file mode 100644 index 00000000000..3a1a1628453 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/normalize.ts @@ -0,0 +1,9 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertPath } from "./assert_path.ts"; + +export function assertArg(path: string) { + assertPath(path); + if (path.length === 0) return "."; +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/normalize_string.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/normalize_string.ts new file mode 100644 index 00000000000..d8f0e090a6e --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/normalize_string.ts @@ -0,0 +1,74 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported from https://github.com/browserify/path-browserify/ +// This module is browser compatible. + +import { CHAR_DOT, CHAR_FORWARD_SLASH } from "./constants.ts"; + +// Resolves . and .. elements in a path with directory names +export function normalizeString( + path: string, + allowAboveRoot: boolean, + separator: string, + isPathSeparator: (code: number) => boolean, +): string { + let res = ""; + let lastSegmentLength = 0; + let lastSlash = -1; + let dots = 0; + let code: number | undefined; + for (let i = 0; i <= path.length; ++i) { + if (i < path.length) code = path.charCodeAt(i); + else if (isPathSeparator(code!)) break; + else code = CHAR_FORWARD_SLASH; + + if (isPathSeparator(code!)) { + if (lastSlash === i - 1 || dots === 1) { + // NOOP + } else if (lastSlash !== i - 1 && dots === 2) { + if ( + res.length < 2 || + lastSegmentLength !== 2 || + res.charCodeAt(res.length - 1) !== CHAR_DOT || + res.charCodeAt(res.length - 2) !== CHAR_DOT + ) { + if (res.length > 2) { + const lastSlashIndex = res.lastIndexOf(separator); + if (lastSlashIndex === -1) { + res = ""; + lastSegmentLength = 0; + } else { + res = res.slice(0, lastSlashIndex); + lastSegmentLength = res.length - 1 - res.lastIndexOf(separator); + } + lastSlash = i; + dots = 0; + continue; + } else if (res.length === 2 || res.length === 1) { + res = ""; + lastSegmentLength = 0; + lastSlash = i; + dots = 0; + continue; + } + } + if (allowAboveRoot) { + if (res.length > 0) res += `${separator}..`; + else res = ".."; + lastSegmentLength = 2; + } + } else { + if (res.length > 0) res += separator + path.slice(lastSlash + 1, i); + else res = path.slice(lastSlash + 1, i); + lastSegmentLength = i - lastSlash - 1; + } + lastSlash = i; + dots = 0; + } else if (code === CHAR_DOT && dots !== -1) { + ++dots; + } else { + dots = -1; + } + } + return res; +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/relative.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/relative.ts new file mode 100644 index 00000000000..0f9901f32e4 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_common/relative.ts @@ -0,0 +1,10 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertPath } from "./assert_path.ts"; + +export function assertArgs(from: string, to: string) { + assertPath(from); + assertPath(to); + if (from === to) return ""; +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_os.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_os.ts new file mode 100644 index 00000000000..e0d02570238 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/_os.ts @@ -0,0 +1,26 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +// Keep this up-to-date with Deno.build.os +/** + * Operating system type, equivalent to the type of + * {@linkcode https://deno.land/api?s=Deno.build | Deno.build.os}. + */ +type OSType = + | "darwin" + | "linux" + | "windows" + | "freebsd" + | "netbsd" + | "aix" + | "solaris" + | "illumos" + | "android"; + +function getOsType(): OSType { + // deno-lint-ignore no-explicit-any + return (globalThis as any).Deno?.build.os || + (navigator.userAgent.includes("Win") ? "windows" : "linux"); +} + +export const isWindows: boolean = getOsType() === "windows"; diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/constants.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/constants.ts new file mode 100644 index 00000000000..04b2ce04b9c --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/constants.ts @@ -0,0 +1,18 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import { isWindows } from "./_os.ts"; + +/** + * The character used to separate entries in the PATH environment variable. + * On Windows, this is `;`. On all other platforms, this is `:`. + */ +export const DELIMITER = isWindows ? ";" as const : ":" as const; +/** + * The character used to separate components of a file path. + * On Windows, this is `\`. On all other platforms, this is `/`. + */ +export const SEPARATOR = isWindows ? "\\" as const : "/" as const; +/** + * A regular expression that matches one or more path separators. + */ +export const SEPARATOR_PATTERN = isWindows ? /[\\/]+/ : /\/+/; diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/extname.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/extname.ts new file mode 100644 index 00000000000..67689af63c1 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/extname.ts @@ -0,0 +1,27 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import { extname as posixExtname } from "./posix/extname.ts"; +import { extname as windowsExtname } from "./windows/extname.ts"; +/** + * Return the extension of the path with leading period ("."). + * + * @example Usage + * ```ts + * import { extname } from "@std/path/extname"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * if (Deno.build.os === "windows") { + * assertEquals(extname("C:\\home\\user\\Documents\\image.png"), ".png"); + * } else { + * assertEquals(extname("/home/user/Documents/image.png"), ".png"); + * } + * ``` + * + * @param path Path with extension. + * @returns The file extension. E.g. returns `.ts` for `file.ts`. + */ +export function extname(path: string): string { + return isWindows ? windowsExtname(path) : posixExtname(path); +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/join.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/join.ts new file mode 100644 index 00000000000..22a704728ce --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/join.ts @@ -0,0 +1,28 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import { join as posixJoin } from "./posix/join.ts"; +import { join as windowsJoin } from "./windows/join.ts"; + +/** + * Joins a sequence of paths, then normalizes the resulting path. + * + * @example Usage + * ```ts + * import { join } from "@std/path/join"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * if (Deno.build.os === "windows") { + * assertEquals(join("C:\\foo", "bar", "baz\\quux", "garply", ".."), "C:\\foo\\bar\\baz\\quux"); + * } else { + * assertEquals(join("/foo", "bar", "baz/quux", "garply", ".."), "/foo/bar/baz/quux"); + * } + * ``` + * + * @param paths Paths to be joined and normalized. + * @returns The joined and normalized path. + */ +export function join(...paths: string[]): string { + return isWindows ? windowsJoin(...paths) : posixJoin(...paths); +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/_util.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/_util.ts new file mode 100644 index 00000000000..b446155df5b --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/_util.ts @@ -0,0 +1,10 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported from https://github.com/browserify/path-browserify/ +// This module is browser compatible. + +import { CHAR_FORWARD_SLASH } from "../_common/constants.ts"; + +export function isPosixPathSeparator(code: number): boolean { + return code === CHAR_FORWARD_SLASH; +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/extname.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/extname.ts new file mode 100644 index 00000000000..10e96927c49 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/extname.ts @@ -0,0 +1,73 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { CHAR_DOT } from "../_common/constants.ts"; +import { assertPath } from "../_common/assert_path.ts"; +import { isPosixPathSeparator } from "./_util.ts"; + +/** + * Return the extension of the `path` with leading period. + * + * @example Usage + * ```ts + * import { extname } from "@std/path/posix/extname"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(extname("/home/user/Documents/file.ts"), ".ts"); + * assertEquals(extname("/home/user/Documents/"), ""); + * assertEquals(extname("/home/user/Documents/image.png"), ".png"); + * ``` + * + * @param path The path to get the extension from. + * @returns The extension (ex. for `file.ts` returns `.ts`). + */ +export function extname(path: string): string { + assertPath(path); + + let startDot = -1; + let startPart = 0; + let end = -1; + let matchedSlash = true; + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + let preDotState = 0; + for (let i = path.length - 1; i >= 0; --i) { + const code = path.charCodeAt(i); + if (isPosixPathSeparator(code)) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + continue; + } + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + if (code === CHAR_DOT) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) startDot = i; + else if (preDotState !== 1) preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; + } + } + + if ( + startDot === -1 || + end === -1 || + // We saw a non-dot character immediately before the dot + preDotState === 0 || + // The (right-most) trimmed path component is exactly '..' + (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) + ) { + return ""; + } + return path.slice(startDot, end); +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/join.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/join.ts new file mode 100644 index 00000000000..cef8b792b79 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/join.ts @@ -0,0 +1,27 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertPath } from "../_common/assert_path.ts"; +import { normalize } from "./normalize.ts"; + +/** + * Join all given a sequence of `paths`,then normalizes the resulting path. + * + * @example Usage + * ```ts + * import { join } from "@std/path/posix/join"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const path = join("/foo", "bar", "baz/asdf", "quux", ".."); + * assertEquals(path, "/foo/bar/baz/asdf"); + * ``` + * + * @param paths The paths to join. + * @returns The joined path. + */ +export function join(...paths: string[]): string { + if (paths.length === 0) return "."; + paths.forEach((path) => assertPath(path)); + const joined = paths.filter((path) => path.length > 0).join("/"); + return joined === "" ? "." : normalize(joined); +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/normalize.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/normalize.ts new file mode 100644 index 00000000000..f5720dab75f --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/normalize.ts @@ -0,0 +1,41 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertArg } from "../_common/normalize.ts"; +import { normalizeString } from "../_common/normalize_string.ts"; +import { isPosixPathSeparator } from "./_util.ts"; + +/** + * Normalize the `path`, resolving `'..'` and `'.'` segments. + * Note that resolving these segments does not necessarily mean that all will be eliminated. + * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`. + * + * @example Usage + * ```ts + * import { normalize } from "@std/path/posix/normalize"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const path = normalize("/foo/bar//baz/asdf/quux/.."); + * assertEquals(path, "/foo/bar/baz/asdf"); + * ``` + * + * @param path The path to normalize. + * @returns The normalized path. + */ +export function normalize(path: string): string { + assertArg(path); + + const isAbsolute = isPosixPathSeparator(path.charCodeAt(0)); + const trailingSeparator = isPosixPathSeparator( + path.charCodeAt(path.length - 1), + ); + + // Normalize the path + path = normalizeString(path, !isAbsolute, "/", isPosixPathSeparator); + + if (path.length === 0 && !isAbsolute) path = "."; + if (path.length > 0 && trailingSeparator) path += "/"; + + if (isAbsolute) return `/${path}`; + return path; +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/relative.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/relative.ts new file mode 100644 index 00000000000..fbc077ce21c --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/relative.ts @@ -0,0 +1,103 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isPosixPathSeparator } from "./_util.ts"; +import { resolve } from "./resolve.ts"; +import { assertArgs } from "../_common/relative.ts"; + +/** + * Return the relative path from `from` to `to` based on current working directory. + * + * If `from` and `to` are the same, return an empty string. + * + * @example Usage + * ```ts + * import { relative } from "@std/path/posix/relative"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const path = relative("/data/orandea/test/aaa", "/data/orandea/impl/bbb"); + * assertEquals(path, "../../impl/bbb"); + * ``` + * + * @param from The path to start from. + * @param to The path to reach. + * @returns The relative path. + */ +export function relative(from: string, to: string): string { + assertArgs(from, to); + + from = resolve(from); + to = resolve(to); + + if (from === to) return ""; + + // Trim any leading backslashes + let fromStart = 1; + const fromEnd = from.length; + for (; fromStart < fromEnd; ++fromStart) { + if (!isPosixPathSeparator(from.charCodeAt(fromStart))) break; + } + const fromLen = fromEnd - fromStart; + + // Trim any leading backslashes + let toStart = 1; + const toEnd = to.length; + for (; toStart < toEnd; ++toStart) { + if (!isPosixPathSeparator(to.charCodeAt(toStart))) break; + } + const toLen = toEnd - toStart; + + // Compare paths to find the longest common path from root + const length = fromLen < toLen ? fromLen : toLen; + let lastCommonSep = -1; + let i = 0; + for (; i <= length; ++i) { + if (i === length) { + if (toLen > length) { + if (isPosixPathSeparator(to.charCodeAt(toStart + i))) { + // We get here if `from` is the exact base path for `to`. + // For example: from='/foo/bar'; to='/foo/bar/baz' + return to.slice(toStart + i + 1); + } else if (i === 0) { + // We get here if `from` is the root + // For example: from='/'; to='/foo' + return to.slice(toStart + i); + } + } else if (fromLen > length) { + if (isPosixPathSeparator(from.charCodeAt(fromStart + i))) { + // We get here if `to` is the exact base path for `from`. + // For example: from='/foo/bar/baz'; to='/foo/bar' + lastCommonSep = i; + } else if (i === 0) { + // We get here if `to` is the root. + // For example: from='/foo'; to='/' + lastCommonSep = 0; + } + } + break; + } + const fromCode = from.charCodeAt(fromStart + i); + const toCode = to.charCodeAt(toStart + i); + if (fromCode !== toCode) break; + else if (isPosixPathSeparator(fromCode)) lastCommonSep = i; + } + + let out = ""; + // Generate the relative path based on the path difference between `to` + // and `from` + for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) { + if (i === fromEnd || isPosixPathSeparator(from.charCodeAt(i))) { + if (out.length === 0) out += ".."; + else out += "/.."; + } + } + + // Lastly, append the rest of the destination (`to`) path that comes after + // the common path parts + if (out.length > 0) return out + to.slice(toStart + lastCommonSep); + else { + toStart += lastCommonSep; + if (isPosixPathSeparator(to.charCodeAt(toStart))) ++toStart; + return to.slice(toStart); + } +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/resolve.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/resolve.ts new file mode 100644 index 00000000000..7957e0f71fc --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/posix/resolve.ts @@ -0,0 +1,67 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { normalizeString } from "../_common/normalize_string.ts"; +import { assertPath } from "../_common/assert_path.ts"; +import { isPosixPathSeparator } from "./_util.ts"; + +/** + * Resolves path segments into a `path`. + * + * @example Usage + * ```ts + * import { resolve } from "@std/path/posix/resolve"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const path = resolve("/foo", "bar", "baz/asdf", "quux", ".."); + * assertEquals(path, "/foo/bar/baz/asdf"); + * ``` + * + * @param pathSegments The path segments to resolve. + * @returns The resolved path. + */ +export function resolve(...pathSegments: string[]): string { + let resolvedPath = ""; + let resolvedAbsolute = false; + + for (let i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + let path: string; + + if (i >= 0) path = pathSegments[i]!; + else { + // deno-lint-ignore no-explicit-any + const { Deno } = globalThis as any; + if (typeof Deno?.cwd !== "function") { + throw new TypeError("Resolved a relative path without a CWD."); + } + path = Deno.cwd(); + } + + assertPath(path); + + // Skip empty entries + if (path.length === 0) { + continue; + } + + resolvedPath = `${path}/${resolvedPath}`; + resolvedAbsolute = isPosixPathSeparator(path.charCodeAt(0)); + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when Deno.cwd() fails) + + // Normalize the path + resolvedPath = normalizeString( + resolvedPath, + !resolvedAbsolute, + "/", + isPosixPathSeparator, + ); + + if (resolvedAbsolute) { + if (resolvedPath.length > 0) return `/${resolvedPath}`; + else return "/"; + } else if (resolvedPath.length > 0) return resolvedPath; + else return "."; +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/relative.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/relative.ts new file mode 100644 index 00000000000..a384f1aecc0 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/relative.ts @@ -0,0 +1,32 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import { relative as posixRelative } from "./posix/relative.ts"; +import { relative as windowsRelative } from "./windows/relative.ts"; + +/** + * Return the relative path from `from` to `to` based on current working + * directory. + * + * @example Usage + * ```ts + * import { relative } from "@std/path/relative"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * if (Deno.build.os === "windows") { + * const path = relative("C:\\foobar\\test\\aaa", "C:\\foobar\\impl\\bbb"); + * assertEquals(path, "..\\..\\impl\\bbb"); + * } else { + * const path = relative("/data/foobar/test/aaa", "/data/foobar/impl/bbb"); + * assertEquals(path, "../../impl/bbb"); + * } + * ``` + * + * @param from Path in current working directory. + * @param to Path in current working directory. + * @returns The relative path from `from` to `to`. + */ +export function relative(from: string, to: string): string { + return isWindows ? windowsRelative(from, to) : posixRelative(from, to); +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/resolve.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/resolve.ts new file mode 100644 index 00000000000..f8738ebcf36 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/resolve.ts @@ -0,0 +1,32 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "./_os.ts"; +import { resolve as posixResolve } from "./posix/resolve.ts"; +import { resolve as windowsResolve } from "./windows/resolve.ts"; + +/** + * Resolves path segments into a path. + * + * @example Usage + * ```ts + * import { resolve } from "@std/path/resolve"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * if (Deno.build.os === "windows") { + * assertEquals(resolve("C:\\foo", "bar", "baz"), "C:\\foo\\bar\\baz"); + * assertEquals(resolve("C:\\foo", "C:\\bar", "baz"), "C:\\bar\\baz"); + * } else { + * assertEquals(resolve("/foo", "bar", "baz"), "/foo/bar/baz"); + * assertEquals(resolve("/foo", "/bar", "baz"), "/bar/baz"); + * } + * ``` + * + * @param pathSegments Path segments to process to path. + * @returns The resolved path. + */ +export function resolve(...pathSegments: string[]): string { + return isWindows + ? windowsResolve(...pathSegments) + : posixResolve(...pathSegments); +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/_util.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/_util.ts new file mode 100644 index 00000000000..d4f8f8b21ce --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/_util.ts @@ -0,0 +1,28 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported from https://github.com/browserify/path-browserify/ +// This module is browser compatible. + +import { + CHAR_BACKWARD_SLASH, + CHAR_FORWARD_SLASH, + CHAR_LOWERCASE_A, + CHAR_LOWERCASE_Z, + CHAR_UPPERCASE_A, + CHAR_UPPERCASE_Z, +} from "../_common/constants.ts"; + +export function isPosixPathSeparator(code: number): boolean { + return code === CHAR_FORWARD_SLASH; +} + +export function isPathSeparator(code: number): boolean { + return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH; +} + +export function isWindowsDeviceRoot(code: number): boolean { + return ( + (code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z) || + (code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z) + ); +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/extname.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/extname.ts new file mode 100644 index 00000000000..e4ce44c5ade --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/extname.ts @@ -0,0 +1,86 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { CHAR_COLON, CHAR_DOT } from "../_common/constants.ts"; +import { assertPath } from "../_common/assert_path.ts"; +import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts"; + +/** + * Return the extension of the `path` with leading period. + * + * @example Usage + * ```ts + * import { extname } from "@std/path/windows/extname"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const ext = extname("file.ts"); + * assertEquals(ext, ".ts"); + * ``` + * + * @param path The path to get the extension from. + * @returns The extension of the `path`. + */ +export function extname(path: string): string { + assertPath(path); + + let start = 0; + let startDot = -1; + let startPart = 0; + let end = -1; + let matchedSlash = true; + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + let preDotState = 0; + + // Check for a drive letter prefix so as not to mistake the following + // path separator as an extra separator at the end of the path that can be + // disregarded + + if ( + path.length >= 2 && + path.charCodeAt(1) === CHAR_COLON && + isWindowsDeviceRoot(path.charCodeAt(0)) + ) { + start = startPart = 2; + } + + for (let i = path.length - 1; i >= start; --i) { + const code = path.charCodeAt(i); + if (isPathSeparator(code)) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + continue; + } + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + if (code === CHAR_DOT) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) startDot = i; + else if (preDotState !== 1) preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; + } + } + + if ( + startDot === -1 || + end === -1 || + // We saw a non-dot character immediately before the dot + preDotState === 0 || + // The (right-most) trimmed path component is exactly '..' + (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) + ) { + return ""; + } + return path.slice(startDot, end); +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/join.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/join.ts new file mode 100644 index 00000000000..d07afe741e1 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/join.ts @@ -0,0 +1,72 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertPath } from "../_common/assert_path.ts"; +import { isPathSeparator } from "./_util.ts"; +import { normalize } from "./normalize.ts"; + +/** + * Join all given a sequence of `paths`,then normalizes the resulting path. + * + * @example Usage + * ```ts + * import { join } from "@std/path/windows/join"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const joined = join("C:\\foo", "bar", "baz\\.."); + * assertEquals(joined, "C:\\foo\\bar"); + * ``` + * + * @param paths The paths to join. + * @returns The joined path. + */ +export function join(...paths: string[]): string { + paths.forEach((path) => assertPath(path)); + paths = paths.filter((path) => path.length > 0); + if (paths.length === 0) return "."; + + // Make sure that the joined path doesn't start with two slashes, because + // normalize() will mistake it for an UNC path then. + // + // This step is skipped when it is very clear that the user actually + // intended to point at an UNC path. This is assumed when the first + // non-empty string arguments starts with exactly two slashes followed by + // at least one more non-slash character. + // + // Note that for normalize() to treat a path as an UNC path it needs to + // have at least 2 components, so we don't filter for that here. + // This means that the user can use join to construct UNC paths from + // a server name and a share name; for example: + // path.join('//server', 'share') -> '\\\\server\\share\\' + let needsReplace = true; + let slashCount = 0; + const firstPart = paths[0]!; + if (isPathSeparator(firstPart.charCodeAt(0))) { + ++slashCount; + const firstLen = firstPart.length; + if (firstLen > 1) { + if (isPathSeparator(firstPart.charCodeAt(1))) { + ++slashCount; + if (firstLen > 2) { + if (isPathSeparator(firstPart.charCodeAt(2))) ++slashCount; + else { + // We matched a UNC path in the first part + needsReplace = false; + } + } + } + } + } + let joined = paths.join("\\"); + if (needsReplace) { + // Find any more consecutive slashes we need to replace + for (; slashCount < joined.length; ++slashCount) { + if (!isPathSeparator(joined.charCodeAt(slashCount))) break; + } + + // Replace the slashes if needed + if (slashCount >= 2) joined = `\\${joined.slice(slashCount)}`; + } + + return normalize(joined); +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/normalize.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/normalize.ts new file mode 100644 index 00000000000..dc5d74cbe9c --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/normalize.ts @@ -0,0 +1,132 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { assertArg } from "../_common/normalize.ts"; +import { CHAR_COLON } from "../_common/constants.ts"; +import { normalizeString } from "../_common/normalize_string.ts"; +import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts"; + +/** + * Normalize the `path`, resolving `'..'` and `'.'` segments. + * Note that resolving these segments does not necessarily mean that all will be eliminated. + * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`. + * + * @example Usage + * ```ts + * import { normalize } from "@std/path/windows/normalize"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const normalized = normalize("C:\\foo\\..\\bar"); + * assertEquals(normalized, "C:\\bar"); + * ``` + * + * @param path The path to normalize + * @returns The normalized path + */ +export function normalize(path: string): string { + assertArg(path); + + const len = path.length; + let rootEnd = 0; + let device: string | undefined; + let isAbsolute = false; + const code = path.charCodeAt(0); + + // Try to match a root + if (len > 1) { + if (isPathSeparator(code)) { + // Possible UNC root + + // If we started with a separator, we know we at least have an absolute + // path of some kind (UNC or otherwise) + isAbsolute = true; + + if (isPathSeparator(path.charCodeAt(1))) { + // Matched double path separator at beginning + let j = 2; + let last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + const firstPart = path.slice(last, j); + // Matched! + last = j; + // Match 1 or more path separators + for (; j < len; ++j) { + if (!isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + // Matched! + last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j === len) { + // We matched a UNC root only + // Return the normalized version of the UNC root since there + // is nothing left to process + + return `\\\\${firstPart}\\${path.slice(last)}\\`; + } else if (j !== last) { + // We matched a UNC root with leftovers + + device = `\\\\${firstPart}\\${path.slice(last, j)}`; + rootEnd = j; + } + } + } + } else { + rootEnd = 1; + } + } else if (isWindowsDeviceRoot(code)) { + // Possible device root + + if (path.charCodeAt(1) === CHAR_COLON) { + device = path.slice(0, 2); + rootEnd = 2; + if (len > 2) { + if (isPathSeparator(path.charCodeAt(2))) { + // Treat separator following drive name as an absolute path + // indicator + isAbsolute = true; + rootEnd = 3; + } + } + } + } + } else if (isPathSeparator(code)) { + // `path` contains just a path separator, exit early to avoid unnecessary + // work + return "\\"; + } + + let tail: string; + if (rootEnd < len) { + tail = normalizeString( + path.slice(rootEnd), + !isAbsolute, + "\\", + isPathSeparator, + ); + } else { + tail = ""; + } + if (tail.length === 0 && !isAbsolute) tail = "."; + if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) { + tail += "\\"; + } + if (device === undefined) { + if (isAbsolute) { + if (tail.length > 0) return `\\${tail}`; + else return "\\"; + } + return tail; + } else if (isAbsolute) { + if (tail.length > 0) return `${device}\\${tail}`; + else return `${device}\\`; + } + return device + tail; +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/relative.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/relative.ts new file mode 100644 index 00000000000..69cef2ed461 --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/relative.ts @@ -0,0 +1,128 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { CHAR_BACKWARD_SLASH } from "../_common/constants.ts"; +import { resolve } from "./resolve.ts"; +import { assertArgs } from "../_common/relative.ts"; + +/** + * Return the relative path from `from` to `to` based on current working directory. + * + * An example in windws, for instance: + * from = 'C:\\orandea\\test\\aaa' + * to = 'C:\\orandea\\impl\\bbb' + * The output of the function should be: '..\\..\\impl\\bbb' + * + * @example Usage + * ```ts + * import { relative } from "@std/path/windows/relative"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const relativePath = relative("C:\\foobar\\test\\aaa", "C:\\foobar\\impl\\bbb"); + * assertEquals(relativePath, "..\\..\\impl\\bbb"); + * ``` + * + * @param from The path from which to calculate the relative path + * @param to The path to which to calculate the relative path + * @returns The relative path from `from` to `to` + */ +export function relative(from: string, to: string): string { + assertArgs(from, to); + + const fromOrig = resolve(from); + const toOrig = resolve(to); + + if (fromOrig === toOrig) return ""; + + from = fromOrig.toLowerCase(); + to = toOrig.toLowerCase(); + + if (from === to) return ""; + + // Trim any leading backslashes + let fromStart = 0; + let fromEnd = from.length; + for (; fromStart < fromEnd; ++fromStart) { + if (from.charCodeAt(fromStart) !== CHAR_BACKWARD_SLASH) break; + } + // Trim trailing backslashes (applicable to UNC paths only) + for (; fromEnd - 1 > fromStart; --fromEnd) { + if (from.charCodeAt(fromEnd - 1) !== CHAR_BACKWARD_SLASH) break; + } + const fromLen = fromEnd - fromStart; + + // Trim any leading backslashes + let toStart = 0; + let toEnd = to.length; + for (; toStart < toEnd; ++toStart) { + if (to.charCodeAt(toStart) !== CHAR_BACKWARD_SLASH) break; + } + // Trim trailing backslashes (applicable to UNC paths only) + for (; toEnd - 1 > toStart; --toEnd) { + if (to.charCodeAt(toEnd - 1) !== CHAR_BACKWARD_SLASH) break; + } + const toLen = toEnd - toStart; + + // Compare paths to find the longest common path from root + const length = fromLen < toLen ? fromLen : toLen; + let lastCommonSep = -1; + let i = 0; + for (; i <= length; ++i) { + if (i === length) { + if (toLen > length) { + if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) { + // We get here if `from` is the exact base path for `to`. + // For example: from='C:\\foo\\bar'; to='C:\\foo\\bar\\baz' + return toOrig.slice(toStart + i + 1); + } else if (i === 2) { + // We get here if `from` is the device root. + // For example: from='C:\\'; to='C:\\foo' + return toOrig.slice(toStart + i); + } + } + if (fromLen > length) { + if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) { + // We get here if `to` is the exact base path for `from`. + // For example: from='C:\\foo\\bar'; to='C:\\foo' + lastCommonSep = i; + } else if (i === 2) { + // We get here if `to` is the device root. + // For example: from='C:\\foo\\bar'; to='C:\\' + lastCommonSep = 3; + } + } + break; + } + const fromCode = from.charCodeAt(fromStart + i); + const toCode = to.charCodeAt(toStart + i); + if (fromCode !== toCode) break; + else if (fromCode === CHAR_BACKWARD_SLASH) lastCommonSep = i; + } + + // We found a mismatch before the first common path separator was seen, so + // return the original `to`. + if (i !== length && lastCommonSep === -1) { + return toOrig; + } + + let out = ""; + if (lastCommonSep === -1) lastCommonSep = 0; + // Generate the relative path based on the path difference between `to` and + // `from` + for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) { + if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) { + if (out.length === 0) out += ".."; + else out += "\\.."; + } + } + + // Lastly, append the rest of the destination (`to`) path that comes after + // the common path parts + if (out.length > 0) { + return out + toOrig.slice(toStart + lastCommonSep, toEnd); + } else { + toStart += lastCommonSep; + if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) ++toStart; + return toOrig.slice(toStart, toEnd); + } +} diff --git a/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/resolve.ts b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/resolve.ts new file mode 100644 index 00000000000..b5771480ecb --- /dev/null +++ b/src/vendor/jsr.io/@std/path/1.0.0-rc.2/windows/resolve.ts @@ -0,0 +1,172 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { CHAR_COLON } from "../_common/constants.ts"; +import { normalizeString } from "../_common/normalize_string.ts"; +import { assertPath } from "../_common/assert_path.ts"; +import { isPathSeparator, isWindowsDeviceRoot } from "./_util.ts"; + +/** + * Resolves path segments into a `path`. + * + * @example Usage + * ```ts + * import { resolve } from "@std/path/windows/resolve"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const resolved = resolve("C:\\foo\\bar", "..\\baz"); + * assertEquals(resolved, "C:\\foo\\baz"); + * ``` + * + * @param pathSegments The path segments to process to path + * @returns The resolved path + */ +export function resolve(...pathSegments: string[]): string { + let resolvedDevice = ""; + let resolvedTail = ""; + let resolvedAbsolute = false; + + for (let i = pathSegments.length - 1; i >= -1; i--) { + let path: string; + // deno-lint-ignore no-explicit-any + const { Deno } = globalThis as any; + if (i >= 0) { + path = pathSegments[i]!; + } else if (!resolvedDevice) { + if (typeof Deno?.cwd !== "function") { + throw new TypeError("Resolved a drive-letter-less path without a CWD."); + } + path = Deno.cwd(); + } else { + if ( + typeof Deno?.env?.get !== "function" || typeof Deno?.cwd !== "function" + ) { + throw new TypeError("Resolved a relative path without a CWD."); + } + path = Deno.cwd(); + + // Verify that a cwd was found and that it actually points + // to our drive. If not, default to the drive's root. + if ( + path === undefined || + path.slice(0, 3).toLowerCase() !== `${resolvedDevice.toLowerCase()}\\` + ) { + path = `${resolvedDevice}\\`; + } + } + + assertPath(path); + + const len = path.length; + + // Skip empty entries + if (len === 0) continue; + + let rootEnd = 0; + let device = ""; + let isAbsolute = false; + const code = path.charCodeAt(0); + + // Try to match a root + if (len > 1) { + if (isPathSeparator(code)) { + // Possible UNC root + + // If we started with a separator, we know we at least have an + // absolute path of some kind (UNC or otherwise) + isAbsolute = true; + + if (isPathSeparator(path.charCodeAt(1))) { + // Matched double path separator at beginning + let j = 2; + let last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + const firstPart = path.slice(last, j); + // Matched! + last = j; + // Match 1 or more path separators + for (; j < len; ++j) { + if (!isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + // Matched! + last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j === len) { + // We matched a UNC root only + device = `\\\\${firstPart}\\${path.slice(last)}`; + rootEnd = j; + } else if (j !== last) { + // We matched a UNC root with leftovers + + device = `\\\\${firstPart}\\${path.slice(last, j)}`; + rootEnd = j; + } + } + } + } else { + rootEnd = 1; + } + } else if (isWindowsDeviceRoot(code)) { + // Possible device root + + if (path.charCodeAt(1) === CHAR_COLON) { + device = path.slice(0, 2); + rootEnd = 2; + if (len > 2) { + if (isPathSeparator(path.charCodeAt(2))) { + // Treat separator following drive name as an absolute path + // indicator + isAbsolute = true; + rootEnd = 3; + } + } + } + } + } else if (isPathSeparator(code)) { + // `path` contains just a path separator + rootEnd = 1; + isAbsolute = true; + } + + if ( + device.length > 0 && + resolvedDevice.length > 0 && + device.toLowerCase() !== resolvedDevice.toLowerCase() + ) { + // This path points to another device so it is not applicable + continue; + } + + if (resolvedDevice.length === 0 && device.length > 0) { + resolvedDevice = device; + } + if (!resolvedAbsolute) { + resolvedTail = `${path.slice(rootEnd)}\\${resolvedTail}`; + resolvedAbsolute = isAbsolute; + } + + if (resolvedAbsolute && resolvedDevice.length > 0) break; + } + + // At this point the path should be resolved to a full absolute path, + // but handle relative paths to be safe (might happen when Deno.cwd() + // fails) + + // Normalize the tail path + resolvedTail = normalizeString( + resolvedTail, + !resolvedAbsolute, + "\\", + isPathSeparator, + ); + + return resolvedDevice + (resolvedAbsolute ? "\\" : "") + resolvedTail || "."; +} diff --git a/src/vendor/deno.land/std@0.217.0/permissions/mod.ts b/src/vendor/jsr.io/@std/permissions/0.224.0/mod.ts similarity index 77% rename from src/vendor/deno.land/std@0.217.0/permissions/mod.ts rename to src/vendor/jsr.io/@std/permissions/0.224.0/mod.ts index 73271553511..f5eef1411b3 100644 --- a/src/vendor/deno.land/std@0.217.0/permissions/mod.ts +++ b/src/vendor/jsr.io/@std/permissions/0.224.0/mod.ts @@ -1,8 +1,13 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. /** * Helpers for interacting with Deno's permissions system. + * + * @deprecated Use the + * {@link https://deno.land/api?s=Deno.Permissions | Deno Permissions API} + * directly instead. This module will be removed once the Standard Library + * migrates to {@link https://jsr.io/ | JSR}. + * * @module - * @deprecated (will be removed in 1.0.0) Use the {@link https://deno.land/api?s=Deno.Permissions | Deno Permissions API} directly instead. */ const { PermissionDenied } = Deno.errors; @@ -35,7 +40,7 @@ function getPermissionString(descriptors: Deno.PermissionDescriptor[]): string { * the permissions that are granted. * * ```ts - * import { grant } from "https://deno.land/std@$STD_VERSION/permissions/mod.ts"; + * import { grant } from "@std/permissions"; * const perms = await grant({ name: "net" }, { name: "read" }); * if (perms && perms.length === 2) { * // do something cool that connects to the net and reads files @@ -47,7 +52,10 @@ function getPermissionString(descriptors: Deno.PermissionDescriptor[]): string { * If one of the permissions requires a prompt, the function will attempt to * prompt for it. The function resolves with all of the granted permissions. * - * @deprecated (will be removed in 1.0.0) Use the {@link https://deno.land/api?s=Deno.Permissions | Deno Permissions API} directly instead. + * @deprecated Use the + * {@link https://deno.land/api?s=Deno.Permissions | Deno Permissions API} + * directly instead. This module will be removed once the Standard Library + * migrates to {@link https://jsr.io/ | JSR}. */ export async function grant( ...descriptors: Deno.PermissionDescriptor[] @@ -56,7 +64,7 @@ export async function grant( * the permissions that are granted. * * ```ts - * import { grant } from "https://deno.land/std@$STD_VERSION/permissions/mod.ts"; + * import { grant } from "@std/permissions"; * const perms = await grant([{ name: "net" }, { name: "read" }]); * if (perms && perms.length === 2) { * // do something cool that connects to the net and reads files @@ -68,7 +76,10 @@ export async function grant( * If one of the permissions requires a prompt, the function will attempt to * prompt for it. The function resolves with all of the granted permissions. * - * @deprecated (will be removed in 1.0.0) Use the {@link https://deno.land/api?s=Deno.Permissions | Deno Permissions API} directly instead. + * @deprecated Use the + * {@link https://deno.land/api?s=Deno.Permissions | Deno Permissions API} + * directly instead. This module will be removed once the Standard Library + * migrates to {@link https://jsr.io/ | JSR}. */ export async function grant( descriptors: Deno.PermissionDescriptor[], @@ -96,7 +107,7 @@ export async function grant( /** Attempts to grant a set of permissions or rejects. * * ```ts - * import { grantOrThrow } from "https://deno.land/std@$STD_VERSION/permissions/mod.ts"; + * import { grantOrThrow } from "@std/permissions"; * await grantOrThrow({ name: "env" }, { name: "net" }); * ``` * @@ -105,7 +116,10 @@ export async function grant( * permission that is denied. If all permissions are granted, the function * will resolve. * - * @deprecated (will be removed in 1.0.0) Use the {@link https://deno.land/api?s=Deno.Permissions | Deno Permissions API} directly instead. + * @deprecated Use the + * {@link https://deno.land/api?s=Deno.Permissions | Deno Permissions API} + * directly instead. This module will be removed once the Standard Library + * migrates to {@link https://jsr.io/ | JSR}. */ export async function grantOrThrow( ...descriptors: Deno.PermissionDescriptor[] @@ -113,7 +127,7 @@ export async function grantOrThrow( /** Attempts to grant a set of permissions or rejects. * * ```ts - * import { grantOrThrow } from "https://deno.land/std@$STD_VERSION/permissions/mod.ts"; + * import { grantOrThrow } from "@std/permissions"; * await grantOrThrow([{ name: "env" }, { name: "net" }]); * ``` * @@ -122,7 +136,10 @@ export async function grantOrThrow( * the denied permissions. If all permissions are granted, the function will * resolve. * - * @deprecated (will be removed in 1.0.0) Use the {@link https://deno.land/api?s=Deno.Permissions | Deno Permissions API} directly instead. + * @deprecated Use the + * {@link https://deno.land/api?s=Deno.Permissions | Deno Permissions API} + * directly instead. This module will be removed once the Standard Library + * migrates to {@link https://jsr.io/ | JSR}. */ export async function grantOrThrow( descriptors: Deno.PermissionDescriptor[], diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/_constants.ts b/src/vendor/jsr.io/@std/semver/0.224.3/_constants.ts new file mode 100644 index 00000000000..e6acb108705 --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/_constants.ts @@ -0,0 +1,11 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +export const OPERATORS = [ + undefined, + "=", + "!=", + ">", + ">=", + "<", + "<=", +] as const; diff --git a/src/vendor/deno.land/std@0.217.0/semver/_shared.ts b/src/vendor/jsr.io/@std/semver/0.224.3/_shared.ts similarity index 99% rename from src/vendor/deno.land/std@0.217.0/semver/_shared.ts rename to src/vendor/jsr.io/@std/semver/0.224.3/_shared.ts index f31f5366e9d..44875e9509a 100644 --- a/src/vendor/deno.land/std@0.217.0/semver/_shared.ts +++ b/src/vendor/jsr.io/@std/semver/0.224.3/_shared.ts @@ -1,6 +1,6 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { type Comparator } from "./types.ts"; +import type { Comparator } from "./types.ts"; export function compareNumber( a: number, diff --git a/src/vendor/deno.land/std@0.217.0/semver/test_range.ts b/src/vendor/jsr.io/@std/semver/0.224.3/_test_comparator_set.ts similarity index 65% rename from src/vendor/deno.land/std@0.217.0/semver/test_range.ts rename to src/vendor/jsr.io/@std/semver/0.224.3/_test_comparator_set.ts index 92094b82840..369070c481b 100644 --- a/src/vendor/deno.land/std@0.217.0/semver/test_range.ts +++ b/src/vendor/jsr.io/@std/semver/0.224.3/_test_comparator_set.ts @@ -1,23 +1,20 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import type { Comparator, Range, SemVer } from "./types.ts"; -import { compare } from "./compare.ts"; + +import type { Comparator, SemVer } from "./types.ts"; import { isWildcardComparator } from "./_shared.ts"; +import { compare } from "./compare.ts"; function testComparator(version: SemVer, comparator: Comparator): boolean { if (isWildcardComparator(comparator)) { return true; } - const cmp = compare(version, comparator.semver ?? comparator); + const cmp = compare(version, comparator); switch (comparator.operator) { - case "": case "=": - case "==": - case "===": case undefined: { return cmp === 0; } - case "!=": - case "!==": { + case "!=": { return cmp !== 0; } case ">": { @@ -35,7 +32,7 @@ function testComparator(version: SemVer, comparator: Comparator): boolean { } } -function testComparatorSet( +export function testComparatorSet( version: SemVer, set: Comparator[], ): boolean { @@ -54,11 +51,8 @@ function testComparatorSet( if (isWildcardComparator(comparator)) { continue; } - const { prerelease } = comparator.semver ?? comparator; + const { major, minor, patch, prerelease } = comparator; if (prerelease && prerelease.length > 0) { - const major = comparator.semver?.major ?? comparator.major; - const minor = comparator.semver?.minor ?? comparator.minor; - const patch = comparator.semver?.patch ?? comparator.patch; if ( version.major === major && version.minor === minor && version.patch === patch @@ -71,16 +65,3 @@ function testComparatorSet( } return true; } - -/** - * Test to see if the version satisfies the range. - * @param version The version to test - * @param range The range to check - * @returns true if the version is in the range - */ -export function testRange( - version: SemVer, - range: Range, -): boolean { - return range.some((set) => testComparatorSet(version, set)); -} diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/can_parse.ts b/src/vendor/jsr.io/@std/semver/0.224.3/can_parse.ts new file mode 100644 index 00000000000..5f440670e61 --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/can_parse.ts @@ -0,0 +1,30 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import { parse } from "./parse.ts"; + +/** + * Returns true if the string can be parsed as SemVer. + * + * @example Usage + * ```ts + * import { canParse } from "@std/semver/can-parse"; + * import { assert, assertFalse } from "@std/assert"; + * + * assert(canParse("1.2.3")); + * assertFalse(canParse("invalid")); + * ``` + * + * @param version The version string to check + * @returns `true` if the string can be parsed as SemVer, `false` otherwise + */ +export function canParse(version: string): boolean { + try { + parse(version); + return true; + } catch (err) { + if (!(err instanceof TypeError)) { + throw err; + } + return false; + } +} diff --git a/src/vendor/deno.land/std@0.217.0/semver/compare.ts b/src/vendor/jsr.io/@std/semver/0.224.3/compare.ts similarity index 58% rename from src/vendor/deno.land/std@0.217.0/semver/compare.ts rename to src/vendor/jsr.io/@std/semver/0.224.3/compare.ts index ed7bca0c504..a859ef5c7ad 100644 --- a/src/vendor/deno.land/std@0.217.0/semver/compare.ts +++ b/src/vendor/jsr.io/@std/semver/0.224.3/compare.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import type { SemVer } from "./types.ts"; import { checkIdentifier, @@ -13,6 +14,23 @@ import { * greater. * * Sorts in ascending order if passed to `Array.sort()`, + * + * @example Usage + * ```ts + * import { parse, compare } from "@std/semver"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const s0 = parse("1.2.3"); + * const s1 = parse("1.2.4"); + * + * assertEquals(compare(s0, s1), -1); + * assertEquals(compare(s1, s0), 1); + * assertEquals(compare(s0, s0), 0); + * ``` + * + * @param s0 The first SemVer to compare + * @param s1 The second SemVer to compare + * @returns `1` if `s0` is greater, `0` if equal, or `-1` if `s1` is greater */ export function compare( s0: SemVer, diff --git a/src/vendor/deno.land/std@0.217.0/semver/constants.ts b/src/vendor/jsr.io/@std/semver/0.224.3/constants.ts similarity index 74% rename from src/vendor/deno.land/std@0.217.0/semver/constants.ts rename to src/vendor/jsr.io/@std/semver/0.224.3/constants.ts index 052acac9100..fba7106ba90 100644 --- a/src/vendor/deno.land/std@0.217.0/semver/constants.ts +++ b/src/vendor/jsr.io/@std/semver/0.224.3/constants.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import type { Comparator, SemVer } from "./types.ts"; /** @@ -29,9 +30,9 @@ export const MIN: SemVer = { * which may be the result of impossible ranges or comparator operations. * @example * ```ts - * import { equals } from "https://deno.land/std@$STD_VERSION/semver/equals.ts"; - * import { parse } from "https://deno.land/std@$STD_VERSION/semver/parse.ts"; - * import { INVALID } from "https://deno.land/std@$STD_VERSION/semver/constants.ts" + * import { equals } from "@std/semver/equals"; + * import { parse } from "@std/semver/parse"; + * import { INVALID } from "@std/semver/constants" * equals(parse("1.2.3"), INVALID); * ``` */ @@ -48,9 +49,9 @@ export const INVALID: SemVer = { * SemVer object and should not be used directly. * @example * ```ts - * import { equals } from "https://deno.land/std@$STD_VERSION/semver/equals.ts"; - * import { parse } from "https://deno.land/std@$STD_VERSION/semver/parse.ts"; - * import { ANY } from "https://deno.land/std@$STD_VERSION/semver/constants.ts" + * import { equals } from "@std/semver/equals"; + * import { parse } from "@std/semver/parse"; + * import { ANY } from "@std/semver/constants" * equals(parse("1.2.3"), ANY); // false * ``` */ @@ -66,9 +67,8 @@ export const ANY: SemVer = { * A comparator which will span all valid semantic versions */ export const ALL: Comparator = { - operator: "", + operator: undefined, ...ANY, - semver: ANY, }; /** @@ -77,5 +77,4 @@ export const ALL: Comparator = { export const NONE: Comparator = { operator: "<", ...MIN, - semver: MIN, }; diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/difference.ts b/src/vendor/jsr.io/@std/semver/0.224.3/difference.ts new file mode 100644 index 00000000000..859cd8b73e4 --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/difference.ts @@ -0,0 +1,40 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import type { ReleaseType, SemVer } from "./types.ts"; +import { compareIdentifier } from "./_shared.ts"; + +/** + * Returns difference between two versions by the release type, + * or `undefined` if the versions are the same. + * + * @example Usage + * ```ts + * import { parse, difference } from "@std/semver"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const s0 = parse("1.2.3"); + * const s1 = parse("1.2.4"); + * const s2 = parse("1.3.0"); + * const s3 = parse("2.0.0"); + * + * assertEquals(difference(s0, s1), "patch"); + * assertEquals(difference(s0, s2), "minor"); + * assertEquals(difference(s0, s3), "major"); + * assertEquals(difference(s0, s0), undefined); + * ``` + * + * @param s0 The first SemVer to compare + * @param s1 The second SemVer to compare + * @returns The release type difference or `undefined` if the versions are the same + */ +export function difference(s0: SemVer, s1: SemVer): ReleaseType | undefined { + const hasPrerelease = s0.prerelease?.length || s1.prerelease?.length; + + if (s0.major !== s1.major) return hasPrerelease ? "premajor" : "major"; + if (s0.minor !== s1.minor) return hasPrerelease ? "preminor" : "minor"; + if (s0.patch !== s1.patch) return hasPrerelease ? "prepatch" : "patch"; + + if (compareIdentifier(s0.prerelease, s1.prerelease) !== 0) { + return "prerelease"; + } +} diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/equals.ts b/src/vendor/jsr.io/@std/semver/0.224.3/equals.ts new file mode 100644 index 00000000000..c88817053b9 --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/equals.ts @@ -0,0 +1,29 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import { compare } from "./compare.ts"; +import type { SemVer } from "./types.ts"; + +/** + * Returns `true` if both semantic versions are logically equivalent, even if they're not the exact same version object. + * + * This is equal to `compare(s0, s1) === 0`. + * + * @example Usage + * ```ts + * import { parse, equals } from "@std/semver"; + * import { assert, assertFalse } from "@std/assert"; + * + * const s0 = parse("1.2.3"); + * const s1 = parse("1.2.3"); + * + * assert(equals(s0, s1)); + * assertFalse(equals(s0, parse("1.2.4"))); + * ``` + * + * @param s0 The first SemVer to compare + * @param s1 The second SemVer to compare + * @returns `true` if `s0` is equal to `s1`, `false` otherwise + */ +export function equals(s0: SemVer, s1: SemVer): boolean { + return compare(s0, s1) === 0; +} diff --git a/src/vendor/deno.land/std@0.217.0/semver/format.ts b/src/vendor/jsr.io/@std/semver/0.224.3/format.ts similarity index 71% rename from src/vendor/deno.land/std@0.217.0/semver/format.ts rename to src/vendor/jsr.io/@std/semver/0.224.3/format.ts index 6704a3c52f5..935de82d9d3 100644 --- a/src/vendor/deno.land/std@0.217.0/semver/format.ts +++ b/src/vendor/jsr.io/@std/semver/0.224.3/format.ts @@ -1,6 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { ANY } from "./constants.ts"; +// This module is browser compatible. import type { SemVer } from "./types.ts"; +import { isWildcardComparator } from "./_shared.ts"; function formatNumber(value: number) { if (value === Number.POSITIVE_INFINITY) { @@ -19,11 +20,24 @@ function formatNumber(value: number) { * * If any number is positive or negative infinity then '∞' or '⧞' will be printed instead. * - * @param semver The semantic version to format + * @example Usage + * ```ts + * import { format } from "@std/semver/format"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const semver = { + * major: 1, + * minor: 2, + * patch: 3, + * }; + * assertEquals(format(semver), "1.2.3"); + * ``` + * + * @param semver The SemVer to format * @returns The string representation of a semantic version. */ export function format(semver: SemVer): string { - if (semver === ANY) { + if (isWildcardComparator(semver)) { return "*"; } diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/format_range.ts b/src/vendor/jsr.io/@std/semver/0.224.3/format_range.ts new file mode 100644 index 00000000000..3301bd6c1b0 --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/format_range.ts @@ -0,0 +1,28 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import { format } from "./format.ts"; +import type { Comparator, Range } from "./types.ts"; + +function formatComparator(comparator: Comparator): string { + const { operator } = comparator; + return `${operator === undefined ? "" : operator}${format(comparator)}`; +} + +/** + * Formats the range into a string + * @example Usage + * ```ts + * import { formatRange, parseRange } from "@std/semver"; + * import { assertEquals } from "@std/assert"; + * + * const range = parseRange(">=1.2.3 <1.2.4"); + * assertEquals(formatRange(range), ">=1.2.3 <1.2.4"); + * ``` + * + * @param range The range to format + * @returns A string representation of the range + */ +export function formatRange(range: Range): string { + return range.map((c) => c.map((c) => formatComparator(c)).join(" ")) + .join("||"); +} diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/greater_or_equal.ts b/src/vendor/jsr.io/@std/semver/0.224.3/greater_or_equal.ts new file mode 100644 index 00000000000..d5fffdc4c4e --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/greater_or_equal.ts @@ -0,0 +1,29 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import type { SemVer } from "./types.ts"; +import { compare } from "./compare.ts"; + +/** + * Greater than or equal to comparison + * + * This is equal to `compare(s0, s1) >= 0`. + * + * @example Usage + * ```ts + * import { parse, greaterOrEqual } from "@std/semver"; + * import { assert, assertFalse } from "@std/assert"; + * + * const s0 = parse("1.2.3"); + * const s1 = parse("1.2.4"); + * assert(greaterOrEqual(s1, s0)); + * assertFalse(greaterOrEqual(s0, s1)); + * assert(greaterOrEqual(s0, s0)); + * ``` + * + * @param s0 The first version to compare + * @param s1 The second version to compare + * @returns `true` if `s0` is greater than or equal to `s1`, `false` otherwise + */ +export function greaterOrEqual(s0: SemVer, s1: SemVer): boolean { + return compare(s0, s1) >= 0; +} diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/greater_than.ts b/src/vendor/jsr.io/@std/semver/0.224.3/greater_than.ts new file mode 100644 index 00000000000..31d784bb4b9 --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/greater_than.ts @@ -0,0 +1,30 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { SemVer } from "./types.ts"; +import { compare } from "./compare.ts"; + +/** + * Greater than comparison + * + * This is equal to `compare(s0, s1) > 0`. + * + * @example Usage + * ```ts + * import { parse, greaterThan } from "@std/semver"; + * import { assert, assertFalse } from "@std/assert"; + * + * const s0 = parse("1.2.3"); + * const s1 = parse("1.2.4"); + * assert(greaterThan(s1, s0)); + * assertFalse(greaterThan(s0, s1)); + * assertFalse(greaterThan(s0, s0)); + * ``` + * + * @param s0 The first version to compare + * @param s1 The second version to compare + * @returns `true` if `s0` is greater than `s1`, `false` otherwise + */ +export function greaterThan(s0: SemVer, s1: SemVer): boolean { + return compare(s0, s1) > 0; +} diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/greater_than_range.ts b/src/vendor/jsr.io/@std/semver/0.224.3/greater_than_range.ts new file mode 100644 index 00000000000..84958f66e94 --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/greater_than_range.ts @@ -0,0 +1,66 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { Comparator, Range, SemVer } from "./types.ts"; +import { testComparatorSet } from "./_test_comparator_set.ts"; +import { isWildcardComparator } from "./_shared.ts"; +import { compare } from "./compare.ts"; + +/** + * Check if the SemVer is greater than the range. + * + * @example Usage + * ```ts + * import { parse, parseRange, greaterThanRange } from "@std/semver"; + * import { assert, assertFalse } from "@std/assert"; + * + * const v0 = parse("1.2.3"); + * const v1 = parse("1.2.4"); + * const range = parseRange(">=1.2.3 <1.2.4"); + * assertFalse(greaterThanRange(v0, range)); + * assert(greaterThanRange(v1, range)); + * ``` + * + * @param semver The version to check. + * @param range The range to check against. + * @returns `true` if the semver is greater than the range, `false` otherwise. + */ +export function greaterThanRange(semver: SemVer, range: Range): boolean { + return range.every((comparatorSet) => + greaterThanComparatorSet(semver, comparatorSet) + ); +} + +function greaterThanComparatorSet( + semver: SemVer, + comparatorSet: Comparator[], +): boolean { + // If the comparator set contains wildcard, then the semver is not greater than the range. + if (comparatorSet.some(isWildcardComparator)) return false; + // If the semver satisfies the comparator set, then it's not greater than the range. + if (testComparatorSet(semver, comparatorSet)) return false; + // If the semver is less than any of the comparator set, then it's not greater than the range. + if ( + comparatorSet.some((comparator) => lessThanComparator(semver, comparator)) + ) return false; + return true; +} + +function lessThanComparator(semver: SemVer, comparator: Comparator): boolean { + const cmp = compare(semver, comparator); + switch (comparator.operator) { + case "=": + case undefined: + return cmp < 0; + case "!=": + return false; + case ">": + return cmp <= 0; + case "<": + return false; + case ">=": + return cmp < 0; + case "<=": + return false; + } +} diff --git a/src/vendor/deno.land/std@0.217.0/semver/increment.ts b/src/vendor/jsr.io/@std/semver/0.224.3/increment.ts similarity index 88% rename from src/vendor/deno.land/std@0.217.0/semver/increment.ts rename to src/vendor/jsr.io/@std/semver/0.224.3/increment.ts index 8d2cf576986..8dbeb60bbbb 100644 --- a/src/vendor/deno.land/std@0.217.0/semver/increment.ts +++ b/src/vendor/jsr.io/@std/semver/0.224.3/increment.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { parseBuild } from "./_shared.ts"; import type { ReleaseType, SemVer } from "./types.ts"; @@ -54,11 +55,27 @@ function bumpPrerelease( * If the input version has build metadata it will be preserved on the resulting version * unless a new build parameter is specified. Specifying `""` will unset existing build * metadata. + * + * @example Usage + * ```ts + * import { increment, parse } from "@std/semver"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const version = parse("1.2.3"); + * assertEquals(increment(version, "major"), parse("2.0.0")); + * assertEquals(increment(version, "minor"), parse("1.3.0")); + * assertEquals(increment(version, "patch"), parse("1.2.4")); + * assertEquals(increment(version, "prerelease"), parse("1.2.4-0")); + * + * const prerelease = parse("1.2.3-beta.0"); + * assertEquals(increment(prerelease, "prerelease"), parse("1.2.3-beta.1")); + * ``` + * * @param version The version to increment * @param release The type of increment to perform * @param prerelease The pre-release metadata of the new version - * @param build The build metadata of the new version - * @returns + * @param buildmetadata The build metadata of the new version + * @returns The new version */ export function increment( version: SemVer, diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/is_range.ts b/src/vendor/jsr.io/@std/semver/0.224.3/is_range.ts new file mode 100644 index 00000000000..953226f5af5 --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/is_range.ts @@ -0,0 +1,45 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import type { Comparator, Range } from "./types.ts"; +import { OPERATORS } from "./_constants.ts"; +import { ALL, NONE } from "./constants.ts"; +import { isSemVer } from "./is_semver.ts"; + +function isComparator(value: unknown): value is Comparator { + if ( + value === null || value === undefined || Array.isArray(value) || + typeof value !== "object" + ) return false; + if (value === NONE || value === ALL) return true; + const { operator } = value as Comparator; + return ( + (operator === undefined || + OPERATORS.includes(operator)) && + isSemVer(value) + ); +} + +/** + * Does a deep check on the object to determine if its a valid range. + * + * Objects with extra fields are still considered valid if they have at + * least the correct fields. + * + * Adds a type assertion if true. + * + * @example Usage + * ```ts + * import { isRange } from "@std/semver/is-range"; + * import { assert, assertFalse } from "@std/assert"; + * + * const range = [[{ major: 1, minor: 2, patch: 3 }]]; + * assert(isRange(range)); + * assertFalse(isRange({})); + * ``` + * @param value The value to check if its a valid Range + * @returns True if its a valid Range otherwise false. + */ +export function isRange(value: unknown): value is Range { + return Array.isArray(value) && + value.every((r) => Array.isArray(r) && r.every((c) => isComparator(c))); +} diff --git a/src/vendor/deno.land/std@0.217.0/semver/is_semver.ts b/src/vendor/jsr.io/@std/semver/0.224.3/is_semver.ts similarity index 81% rename from src/vendor/deno.land/std@0.217.0/semver/is_semver.ts rename to src/vendor/jsr.io/@std/semver/0.224.3/is_semver.ts index 7686ec728b1..a26a0853aa1 100644 --- a/src/vendor/deno.land/std@0.217.0/semver/is_semver.ts +++ b/src/vendor/jsr.io/@std/semver/0.224.3/is_semver.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import { ANY, INVALID } from "./constants.ts"; import type { SemVer } from "./types.ts"; import { isValidNumber, isValidString } from "./_shared.ts"; @@ -15,6 +16,22 @@ import { isValidNumber, isValidString } from "./_shared.ts"; * considered SemVer objects and this will return true. * * A type assertion is added to the value. + * + * @example Usage + * ```ts + * import { isSemVer } from "@std/semver/is-semver"; + * import { assert, assertFalse } from "@std/assert"; + * + * const value = { + * major: 1, + * minor: 2, + * patch: 3, + * }; + * + * assert(isSemVer(value)); + * assertFalse(isSemVer({ major: 1, minor: 2 })); + * ``` + * * @param value The value to check to see if its a valid SemVer object * @returns True if value is a valid SemVer otherwise false */ diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/less_or_equal.ts b/src/vendor/jsr.io/@std/semver/0.224.3/less_or_equal.ts new file mode 100644 index 00000000000..6714ba68b20 --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/less_or_equal.ts @@ -0,0 +1,29 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import type { SemVer } from "./types.ts"; +import { compare } from "./compare.ts"; + +/** + * Less than or equal to comparison + * + * This is equal to `compare(s0, s1) <= 0`. + * + * @example Usage + * ```ts + * import { parse, lessOrEqual } from "@std/semver"; + * import { assert, assertFalse } from "@std/assert"; + * + * const s0 = parse("1.2.3"); + * const s1 = parse("1.2.4"); + * assert(lessOrEqual(s0, s1)); + * assertFalse(lessOrEqual(s1, s0)); + * assert(lessOrEqual(s0, s0)); + * ``` + * + * @param s0 the first version to compare + * @param s1 the second version to compare + * @returns `true` if `s0` is less than or equal to `s1`, `false` otherwise + */ +export function lessOrEqual(s0: SemVer, s1: SemVer): boolean { + return compare(s0, s1) <= 0; +} diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/less_than.ts b/src/vendor/jsr.io/@std/semver/0.224.3/less_than.ts new file mode 100644 index 00000000000..4d0946399e5 --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/less_than.ts @@ -0,0 +1,29 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import type { SemVer } from "./types.ts"; +import { compare } from "./compare.ts"; + +/** + * Less than comparison + * + * This is equal to `compare(s0, s1) < 0`. + * + * @example Usage + * ```ts + * import { parse, lessThan } from "@std/semver"; + * import { assert, assertFalse } from "@std/assert"; + * + * const s0 = parse("1.2.3"); + * const s1 = parse("1.2.4"); + * assert(lessThan(s0, s1)); + * assertFalse(lessThan(s1, s0)); + * assertFalse(lessThan(s0, s0)); + * ``` + * + * @param s0 the first version to compare + * @param s1 the second version to compare + * @returns `true` if `s0` is less than `s1`, `false` otherwise + */ +export function lessThan(s0: SemVer, s1: SemVer): boolean { + return compare(s0, s1) < 0; +} diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/less_than_range.ts b/src/vendor/jsr.io/@std/semver/0.224.3/less_than_range.ts new file mode 100644 index 00000000000..4f3393340ea --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/less_than_range.ts @@ -0,0 +1,68 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { Comparator, Range, SemVer } from "./types.ts"; +import { testComparatorSet } from "./_test_comparator_set.ts"; +import { isWildcardComparator } from "./_shared.ts"; +import { compare } from "./compare.ts"; + +/** + * Check if the SemVer is less than the range. + * + * @example Usage + * ```ts + * import { parse, parseRange, lessThanRange } from "@std/semver"; + * import { assert, assertFalse } from "@std/assert"; + * + * const v0 = parse("1.2.3"); + * const v1 = parse("1.0.0"); + * const range = parseRange(">=1.2.3 <1.2.4"); + * assertFalse(lessThanRange(v0, range)); + * assert(lessThanRange(v1, range)); + * ``` + * + * @param semver The version to check. + * @param range The range to check against. + * @returns `true` if the SemVer is less than the range, `false` otherwise. + */ +export function lessThanRange(semver: SemVer, range: Range): boolean { + return range.every((comparatorSet) => + lessThanComparatorSet(semver, comparatorSet) + ); +} + +function lessThanComparatorSet(semver: SemVer, comparatorSet: Comparator[]) { + // If the comparator set contains wildcard, then the semver is not greater than the range. + if (comparatorSet.some(isWildcardComparator)) return false; + // If the SemVer satisfies the comparator set, then it's not less than the range. + if (testComparatorSet(semver, comparatorSet)) return false; + // If the SemVer is greater than any of the comparator set, then it's not less than the range. + if ( + comparatorSet.some((comparator) => + greaterThanComparator(semver, comparator) + ) + ) return false; + return true; +} + +function greaterThanComparator( + semver: SemVer, + comparator: Comparator, +): boolean { + const cmp = compare(semver, comparator); + switch (comparator.operator) { + case "=": + case undefined: + return cmp > 0; + case "!=": + return false; + case ">": + return false; + case "<": + return cmp >= 0; + case ">=": + return false; + case "<=": + return cmp > 0; + } +} diff --git a/src/vendor/deno.land/std@0.217.0/semver/max_satisfying.ts b/src/vendor/jsr.io/@std/semver/0.224.3/max_satisfying.ts similarity index 58% rename from src/vendor/deno.land/std@0.217.0/semver/max_satisfying.ts rename to src/vendor/jsr.io/@std/semver/0.224.3/max_satisfying.ts index bd7b4aa03e2..b5c07782d56 100644 --- a/src/vendor/deno.land/std@0.217.0/semver/max_satisfying.ts +++ b/src/vendor/jsr.io/@std/semver/0.224.3/max_satisfying.ts @@ -1,11 +1,24 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import type { Range, SemVer } from "./types.ts"; -import { testRange } from "./test_range.ts"; +import { satisfies } from "./satisfies.ts"; import { greaterThan } from "./greater_than.ts"; /** * Returns the highest version in the list that satisfies the range, or `undefined` * if none of them do. + * + * @example Usage + * ```ts + * import { parse, parseRange, maxSatisfying } from "@std/semver"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const versions = ["1.2.3", "1.2.4", "1.3.0", "2.0.0", "2.1.0"].map(parse); + * const range = parseRange(">=1.0.0 <2.0.0"); + * + * assertEquals(maxSatisfying(versions, range), parse("1.3.0")); + * ``` + * * @param versions The versions to check. * @param range The range of possible versions to compare to. * @returns The highest version in versions that satisfies the range. @@ -16,7 +29,7 @@ export function maxSatisfying( ): SemVer | undefined { let max; for (const version of versions) { - if (!testRange(version, range)) continue; + if (!satisfies(version, range)) continue; max = max && greaterThan(max, version) ? max : version; } return max; diff --git a/src/vendor/deno.land/std@0.217.0/semver/min_satisfying.ts b/src/vendor/jsr.io/@std/semver/0.224.3/min_satisfying.ts similarity index 57% rename from src/vendor/deno.land/std@0.217.0/semver/min_satisfying.ts rename to src/vendor/jsr.io/@std/semver/0.224.3/min_satisfying.ts index 3b74391cb11..cf9525c0715 100644 --- a/src/vendor/deno.land/std@0.217.0/semver/min_satisfying.ts +++ b/src/vendor/jsr.io/@std/semver/0.224.3/min_satisfying.ts @@ -1,11 +1,24 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. import type { Range, SemVer } from "./types.ts"; -import { testRange } from "./test_range.ts"; +import { satisfies } from "./satisfies.ts"; import { lessThan } from "./less_than.ts"; /** * Returns the lowest version in the list that satisfies the range, or `undefined` if * none of them do. + * + * @example Usage + * ```ts + * import { parse, parseRange, minSatisfying } from "@std/semver"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const versions = ["0.2.0", "1.2.3", "1.3.0", "2.0.0", "2.1.0"].map(parse); + * const range = parseRange(">=1.0.0 <2.0.0"); + * + * assertEquals(minSatisfying(versions, range), parse("1.2.3")); + * ``` + * * @param versions The versions to check. * @param range The range of possible versions to compare to. * @returns The lowest version in versions that satisfies the range. @@ -16,7 +29,7 @@ export function minSatisfying( ): SemVer | undefined { let min; for (const version of versions) { - if (!testRange(version, range)) continue; + if (!satisfies(version, range)) continue; min = min && lessThan(min, version) ? min : version; } return min; diff --git a/src/vendor/deno.land/std@0.217.0/semver/mod.ts b/src/vendor/jsr.io/@std/semver/0.224.3/mod.ts similarity index 94% rename from src/vendor/deno.land/std@0.217.0/semver/mod.ts rename to src/vendor/jsr.io/@std/semver/0.224.3/mod.ts index cbb928886f6..6cc90ef724f 100644 --- a/src/vendor/deno.land/std@0.217.0/semver/mod.ts +++ b/src/vendor/jsr.io/@std/semver/0.224.3/mod.ts @@ -3,10 +3,40 @@ // This module is browser compatible. /** - * The semantic version parser. + * The Semantic Version parser. * * Adapted directly from {@link https://github.com/npm/node-semver | semver}. * + * ```ts + * import { + * parse, + * parseRange, + * greaterThan, + * lessThan, + * format + * } from "@std/semver"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const semver = parse("1.2.3"); + * assertEquals(semver, { + * major: 1, + * minor: 2, + * patch: 3, + * prerelease: [], + * build: [] + * }); + * + * assertEquals(format(semver), "1.2.3"); + * + * const range = parseRange("1.x || >=2.5.0 || 5.0.0 - 7.2.3"); + * + * const s0 = parse("1.2.3"); + * const s1 = parse("9.8.7"); + * + * assertEquals(greaterThan(s0, s1), false); + * assertEquals(lessThan(s0, s1), true); + * ``` + * * ## Versions * * A "version" is described by the `v2.0.0` specification found at @@ -105,8 +135,8 @@ * * Build metadata is `.` delimited alpha-numeric string. * When parsing a version it is retained on the `build: string[]` field - * of the semver instance. When incrementing there is an additional parameter that - * can set the build metadata on the semver instance. + * of the SemVer instance. When incrementing there is an additional parameter that + * can set the build metadata on the SemVer instance. * * ### Advanced Range Syntax * @@ -240,28 +270,9 @@ * If you want to know if a version satisfies or does not satisfy a range, use the * {@linkcode satisfies} function. * - * This module is browser compatible. - * - * @example - * ```ts - * import { - * parse, - * parseRange, - * greaterThan, - * lessThan, - * format - * } from "https://deno.land/std@$STD_VERSION/semver/mod.ts"; - * - * const semver = parse("1.2.3"); - * const range = parseRange("1.x || >=2.5.0 || 5.0.0 - 7.2.3"); * - * const s0 = parse("1.2.3"); - * const s1 = parse("9.8.7"); - * greaterThan(s0, s1); // false - * lessThan(s0, s1); // true * - * format(semver) // "1.2.3" - * ``` + * * @module */ @@ -269,11 +280,10 @@ export * from "./compare.ts"; export * from "./constants.ts"; export * from "./difference.ts"; export * from "./format.ts"; -export * from "./gtr.ts"; export * from "./test_range.ts"; +export * from "./satisfies.ts"; export * from "./increment.ts"; export * from "./is_semver.ts"; -export * from "./ltr.ts"; export * from "./max_satisfying.ts"; export * from "./min_satisfying.ts"; export * from "./parse_range.ts"; @@ -285,14 +295,16 @@ export * from "./types.ts"; export * from "./try_parse_range.ts"; export * from "./is_range.ts"; export * from "./can_parse.ts"; -export * from "./reverse_sort.ts"; export * from "./try_parse.ts"; export * from "./format_range.ts"; export * from "./equals.ts"; export * from "./not_equals.ts"; export * from "./greater_than.ts"; +export * from "./greater_than_range.ts"; export * from "./greater_or_equal.ts"; export * from "./less_than.ts"; +export * from "./less_than_range.ts"; export * from "./less_or_equal.ts"; +/** The SemVer spec version */ export const SEMVER_SPEC_VERSION = "2.0.0"; diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/not_equals.ts b/src/vendor/jsr.io/@std/semver/0.224.3/not_equals.ts new file mode 100644 index 00000000000..1f22eb3a842 --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/not_equals.ts @@ -0,0 +1,28 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import type { SemVer } from "./types.ts"; +import { compare } from "./compare.ts"; + +/** + * Not equal comparison + * + * This is equal to `compare(s0, s1) !== 0`. + * + * @example Usage + * ```ts + * import { parse, notEquals } from "@std/semver"; + * import { assert, assertFalse } from "@std/assert"; + * + * const s0 = parse("1.2.3"); + * const s1 = parse("1.2.4"); + * assert(notEquals(s0, s1)); + * assertFalse(notEquals(s0, s0)); + * ``` + * + * @param s0 The first version to compare + * @param s1 The second version to compare + * @returns `true` if `s0` is not equal to `s1`, `false` otherwise + */ +export function notEquals(s0: SemVer, s1: SemVer): boolean { + return compare(s0, s1) !== 0; +} diff --git a/src/vendor/deno.land/std@0.217.0/semver/parse.ts b/src/vendor/jsr.io/@std/semver/0.224.3/parse.ts similarity index 77% rename from src/vendor/deno.land/std@0.217.0/semver/parse.ts rename to src/vendor/jsr.io/@std/semver/0.224.3/parse.ts index 73d74ac1a83..9b27d1bd90d 100644 --- a/src/vendor/deno.land/std@0.217.0/semver/parse.ts +++ b/src/vendor/jsr.io/@std/semver/0.224.3/parse.ts @@ -1,11 +1,28 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { SemVer } from "./types.ts"; +// This module is browser compatible. +import type { SemVer } from "./types.ts"; import { parseBuild, parseNumber, parsePrerelease } from "./_shared.ts"; import { FULL_REGEXP, MAX_LENGTH } from "./_shared.ts"; /** * Attempt to parse a string as a semantic version, returning either a `SemVer` * object or throws a TypeError. + * + * @example Usage + * ```ts + * import { parse } from "@std/semver/parse"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const version = parse("1.2.3"); + * assertEquals(version, { + * major: 1, + * minor: 2, + * patch: 3, + * prerelease: [], + * build: [], + * }); + * ``` + * * @param version The version string to parse * @returns A valid SemVer */ diff --git a/src/vendor/deno.land/std@0.217.0/semver/parse_range.ts b/src/vendor/jsr.io/@std/semver/0.224.3/parse_range.ts similarity index 60% rename from src/vendor/deno.land/std@0.217.0/semver/parse_range.ts rename to src/vendor/jsr.io/@std/semver/0.224.3/parse_range.ts index c429d1a0276..257732695c5 100644 --- a/src/vendor/deno.land/std@0.217.0/semver/parse_range.ts +++ b/src/vendor/jsr.io/@std/semver/0.224.3/parse_range.ts @@ -1,15 +1,59 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { ALL } from "./constants.ts"; -import type { Comparator, Range } from "./types.ts"; -import { OPERATOR_XRANGE_REGEXP, XRANGE } from "./_shared.ts"; -import { parseComparator } from "./_parse_comparator.ts"; -import { parseBuild, parsePrerelease } from "./_shared.ts"; +// This module is browser compatible. + +import { + COMPARATOR_REGEXP, + OPERATOR_XRANGE_REGEXP, + parseBuild, + parseNumber, + parsePrerelease, + XRANGE, +} from "./_shared.ts"; +import { ALL, ANY, NONE } from "./constants.ts"; +import type { Comparator, Operator, Range } from "./types.ts"; + +type ComparatorRegExpGroup = { + operator: Operator; + major: string; + minor: string; + patch: string; + prerelease: string; + buildmetadata: string; +}; + +function parseComparator(comparator: string): Comparator { + const match = comparator.match(COMPARATOR_REGEXP); + const groups = match?.groups; + + if (!groups) return NONE; + + const { operator, prerelease, buildmetadata } = + groups as ComparatorRegExpGroup; + + const semver = groups.major + ? { + major: parseNumber(groups.major, "Invalid major version"), + minor: parseNumber( + groups.minor!, + "Invalid minor version", + ), + patch: parseNumber( + groups.patch!, + "Invalid patch version", + ), + prerelease: prerelease ? parsePrerelease(prerelease) : [], + build: buildmetadata ? parseBuild(buildmetadata) : [], + } + : ANY; + + return { operator: operator || undefined, ...semver }; +} function isWildcard(id?: string): boolean { return !id || id.toLowerCase() === "x" || id === "*"; } -type RegExpGroups = { +type RangeRegExpGroups = { operator: string; major: string; minor: string; @@ -18,51 +62,110 @@ type RegExpGroups = { build?: string; }; -function parseHyphenRange(range: string) { - // remove spaces between comparator and groups - range = range.replace(/(?<=<|>|=) +/, ""); - +function handleLeftHyphenRangeGroups( + leftGroup: RangeRegExpGroups, +): Comparator | undefined { + if (isWildcard(leftGroup.major)) return; + if (isWildcard(leftGroup.minor)) { + return { + operator: ">=", + major: +leftGroup.major, + minor: 0, + patch: 0, + prerelease: [], + build: [], + }; + } + if (isWildcard(leftGroup.patch)) { + return { + operator: ">=", + major: +leftGroup.major, + minor: +leftGroup.minor, + patch: 0, + prerelease: [], + build: [], + }; + } + return { + operator: ">=", + major: +leftGroup.major, + minor: +leftGroup.minor, + patch: +leftGroup.patch, + prerelease: leftGroup.prerelease + ? parsePrerelease(leftGroup.prerelease) + : [], + build: [], + }; +} +function handleRightHyphenRangeGroups( + rightGroups: RangeRegExpGroups, +): Comparator | undefined { + if (isWildcard(rightGroups.major)) { + return; + } + if (isWildcard(rightGroups.minor)) { + return { + operator: "<", + major: +rightGroups.major! + 1, + minor: 0, + patch: 0, + prerelease: [], + build: [], + }; + } + if (isWildcard(rightGroups.patch)) { + return { + operator: "<", + major: +rightGroups.major, + minor: +rightGroups.minor! + 1, + patch: 0, + prerelease: [], + build: [], + }; + } + if (rightGroups.prerelease) { + return { + operator: "<=", + major: +rightGroups.major, + minor: +rightGroups.minor, + patch: +rightGroups.patch, + prerelease: parsePrerelease(rightGroups.prerelease), + build: [], + }; + } + return { + operator: "<=", + major: +rightGroups.major, + minor: +rightGroups.minor, + patch: +rightGroups.patch, + prerelease: rightGroups.prerelease + ? parsePrerelease(rightGroups.prerelease) + : [], + build: [], + }; +} +function parseHyphenRange(range: string): Comparator[] | undefined { const leftMatch = range.match(new RegExp(`^${XRANGE}`)); const leftGroup = leftMatch?.groups; - if (!leftGroup) return range.split(/\s+/); + if (!leftGroup) return; const leftLength = leftMatch[0].length; + const hyphenMatch = range.slice(leftLength).match(/^\s+-\s+/); - if (!hyphenMatch) return range.split(/\s+/); + if (!hyphenMatch) return; const hyphenLength = hyphenMatch[0].length; + const rightMatch = range.slice(leftLength + hyphenLength).match( new RegExp(`^${XRANGE}\\s*$`), ); const rightGroups = rightMatch?.groups; - if (!rightGroups) return range.split(/\s+/); - let from = leftMatch[0]; - let to = rightMatch[0]; - - if (isWildcard(leftGroup.major)) { - from = ""; - } else if (isWildcard(leftGroup.minor)) { - from = `>=${leftGroup.major}.0.0`; - } else if (isWildcard(leftGroup.patch)) { - from = `>=${leftGroup.major}.${leftGroup.minor}.0`; - } else { - from = `>=${from}`; - } + if (!rightGroups) return; - if (isWildcard(rightGroups.major)) { - to = ""; - } else if (isWildcard(rightGroups.minor)) { - to = `<${+rightGroups.major! + 1}.0.0`; - } else if (isWildcard(rightGroups.patch)) { - to = `<${rightGroups.major}.${+rightGroups.minor! + 1}.0`; - } else if (rightGroups.prerelease) { - to = - `<=${rightGroups.major}.${rightGroups.minor}.${rightGroups.patch}-${rightGroups.prerelease}`; - } else { - to = `<=${to}`; - } - - return [from, to]; + const from = handleLeftHyphenRangeGroups(leftGroup as RangeRegExpGroups); + const to = handleRightHyphenRangeGroups(rightGroups as RangeRegExpGroups); + return [from, to].filter(Boolean) as Comparator[]; } -function handleCaretOperator(groups: RegExpGroups): Comparator[] { + +function handleCaretOperator(groups: RangeRegExpGroups): Comparator[] { const majorIsWildcard = isWildcard(groups.major); const minorIsWildcard = isWildcard(groups.minor); const patchIsWildcard = isWildcard(groups.patch); @@ -109,7 +212,7 @@ function handleCaretOperator(groups: RegExpGroups): Comparator[] { { operator: "<", major: major + 1, minor: 0, patch: 0 }, ]; } -function handleTildeOperator(groups: RegExpGroups): Comparator[] { +function handleTildeOperator(groups: RangeRegExpGroups): Comparator[] { const majorIsWildcard = isWildcard(groups.major); const minorIsWildcard = isWildcard(groups.minor); const patchIsWildcard = isWildcard(groups.patch); @@ -137,7 +240,7 @@ function handleTildeOperator(groups: RegExpGroups): Comparator[] { { operator: "<", major, minor: minor + 1, patch: 0 }, ]; } -function handleLessThanOperator(groups: RegExpGroups): Comparator[] { +function handleLessThanOperator(groups: RangeRegExpGroups): Comparator[] { const majorIsWildcard = isWildcard(groups.major); const minorIsWildcard = isWildcard(groups.minor); const patchIsWildcard = isWildcard(groups.patch); @@ -156,7 +259,9 @@ function handleLessThanOperator(groups: RegExpGroups): Comparator[] { const build = parseBuild(groups.build ?? ""); return [{ operator: "<", major, minor, patch, prerelease, build }]; } -function handleLessThanOrEqualOperator(groups: RegExpGroups): Comparator[] { +function handleLessThanOrEqualOperator( + groups: RangeRegExpGroups, +): Comparator[] { const minorIsWildcard = isWildcard(groups.minor); const patchIsWildcard = isWildcard(groups.patch); @@ -177,7 +282,7 @@ function handleLessThanOrEqualOperator(groups: RegExpGroups): Comparator[] { const build = parseBuild(groups.build ?? ""); return [{ operator: "<=", major, minor, patch, prerelease, build }]; } -function handleGreaterThanOperator(groups: RegExpGroups): Comparator[] { +function handleGreaterThanOperator(groups: RangeRegExpGroups): Comparator[] { const majorIsWildcard = isWildcard(groups.major); const minorIsWildcard = isWildcard(groups.minor); const patchIsWildcard = isWildcard(groups.patch); @@ -198,7 +303,7 @@ function handleGreaterThanOperator(groups: RegExpGroups): Comparator[] { const build = parseBuild(groups.build ?? ""); return [{ operator: ">", major, minor, patch, prerelease, build }]; } -function handleGreaterOrEqualOperator(groups: RegExpGroups): Comparator[] { +function handleGreaterOrEqualOperator(groups: RangeRegExpGroups): Comparator[] { const majorIsWildcard = isWildcard(groups.major); const minorIsWildcard = isWildcard(groups.minor); const patchIsWildcard = isWildcard(groups.patch); @@ -217,7 +322,7 @@ function handleGreaterOrEqualOperator(groups: RegExpGroups): Comparator[] { const build = parseBuild(groups.build ?? ""); return [{ operator: ">=", major, minor, patch, prerelease, build }]; } -function handleEqualOperator(groups: RegExpGroups): Comparator[] { +function handleEqualOperator(groups: RangeRegExpGroups): Comparator[] { const majorIsWildcard = isWildcard(groups.major); const minorIsWildcard = isWildcard(groups.minor); const patchIsWildcard = isWildcard(groups.patch); @@ -244,8 +349,9 @@ function handleEqualOperator(groups: RegExpGroups): Comparator[] { return [{ operator: undefined, major, minor, patch, prerelease, build }]; } -function parseRangeString(string: string) { - const groups = string.match(OPERATOR_XRANGE_REGEXP)?.groups as RegExpGroups; +function parseOperatorRange(string: string): Comparator | Comparator[] { + const groups = string.match(OPERATOR_XRANGE_REGEXP) + ?.groups as RangeRegExpGroups; if (!groups) return parseComparator(string); switch (groups.operator) { @@ -269,16 +375,37 @@ function parseRangeString(string: string) { throw new Error(`'${groups.operator}' is not a valid operator.`); } } +function parseOperatorRanges(string: string): Comparator[] { + return string.split(/\s+/).flatMap(parseOperatorRange); +} /** * Parses a range string into a Range object or throws a TypeError. + * + * @example Usage + * ```ts + * import { parseRange } from "@std/semver/parse-range"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const range = parseRange(">=1.0.0 <2.0.0 || >=3.0.0"); + * assertEquals(range, [ + * [ + * { operator: ">=", major: 1, minor: 0, patch: 0, prerelease: [], build: [] }, + * { operator: "<", major: 2, minor: 0, patch: 0, prerelease: [], build: [] }, + * ], + * [ + * { operator: ">=", major: 3, minor: 0, patch: 0, prerelease: [], build: [] }, + * ] + * ]); + * ``` + * * @param range The range set string * @returns A valid semantic range */ export function parseRange(range: string): Range { - const ranges = range + return range + // remove spaces between operators and versions + .replaceAll(/(?<=<|>|=) +/g, "") .split(/\s*\|\|\s*/) - .map((range) => parseHyphenRange(range).flatMap(parseRangeString)); - Object.defineProperty(ranges, "ranges", { value: ranges }); - return ranges as Range; + .map((string) => parseHyphenRange(string) || parseOperatorRanges(string)); } diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/range_intersects.ts b/src/vendor/jsr.io/@std/semver/0.224.3/range_intersects.ts new file mode 100644 index 00000000000..7418ed4efdb --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/range_intersects.ts @@ -0,0 +1,101 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import { isWildcardComparator } from "./_shared.ts"; +import { compare } from "./compare.ts"; +import { satisfies } from "./satisfies.ts"; +import type { Comparator, Range } from "./types.ts"; + +function comparatorIntersects( + c0: Comparator, + c1: Comparator, +): boolean { + const op0 = c0.operator; + const op1 = c1.operator; + + if (op0 === undefined) { + // if c0 is empty comparator, then returns true + if (isWildcardComparator(c0)) return true; + return satisfies(c0, [[c1]]); + } + if (op1 === undefined) { + if (isWildcardComparator(c1)) return true; + return satisfies(c1, [[c0]]); + } + + const cmp = compare(c0, c1); + + const sameDirectionIncreasing = (op0 === ">=" || op0 === ">") && + (op1 === ">=" || op1 === ">"); + const sameDirectionDecreasing = (op0 === "<=" || op0 === "<") && + (op1 === "<=" || op1 === "<"); + const sameSemVer = cmp === 0; + const differentDirectionsInclusive = (op0 === ">=" || op0 === "<=") && + (op1 === ">=" || op1 === "<="); + const oppositeDirectionsLessThan = cmp === -1 && + (op0 === ">=" || op0 === ">") && + (op1 === "<=" || op1 === "<"); + const oppositeDirectionsGreaterThan = cmp === 1 && + (op0 === "<=" || op0 === "<") && + (op1 === ">=" || op1 === ">"); + + return sameDirectionIncreasing || + sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || + oppositeDirectionsGreaterThan; +} + +function rangesSatisfiable(ranges: Range[]): boolean { + return ranges.every((r) => { + // For each OR at least one AND must be satisfiable + return r.some((comparators) => comparatorsSatisfiable(comparators)); + }); +} + +function comparatorsSatisfiable(comparators: Comparator[]): boolean { + // Comparators are satisfiable if they all intersect with each other + for (let i = 0; i < comparators.length - 1; i++) { + const c0 = comparators[i]!; + for (const c1 of comparators.slice(i + 1)) { + if (!comparatorIntersects(c0, c1)) { + return false; + } + } + } + return true; +} + +/** + * The ranges intersect every range of AND comparators intersects with a least one range of OR ranges. + * + * @example Usage + * ```ts + * import { parseRange, rangeIntersects } from "@std/semver"; + * import { assert, assertFalse } from "@std/assert"; + * + * const r0 = parseRange(">=1.0.0 <2.0.0"); + * const r1 = parseRange(">=1.0.0 <1.2.3"); + * const r2 = parseRange(">=1.2.3 <2.0.0"); + * + * assert(rangeIntersects(r0, r1)); + * assert(rangeIntersects(r0, r2)); + * assertFalse(rangeIntersects(r1, r2)); + * ``` + * + * @param r0 range 0 + * @param r1 range 1 + * @returns returns true if the given ranges intersect, false otherwise + */ +export function rangeIntersects( + r0: Range, + r1: Range, +): boolean { + return rangesSatisfiable([r0, r1]) && + r0.some((r00) => { + return r1.some((r11) => { + return r00.every((c0) => { + return r11.every((c1) => comparatorIntersects(c0, c1)); + }); + }); + }); +} diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/range_max.ts b/src/vendor/jsr.io/@std/semver/0.224.3/range_max.ts new file mode 100644 index 00000000000..7b643498519 --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/range_max.ts @@ -0,0 +1,78 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import { INVALID, MAX } from "./constants.ts"; +import { satisfies } from "./satisfies.ts"; +import type { Comparator, Range, SemVer } from "./types.ts"; +import { greaterThan } from "./greater_than.ts"; +import { isWildcardComparator } from "./_shared.ts"; + +function comparatorMax(comparator: Comparator): SemVer { + const semver = comparator; + if (isWildcardComparator(comparator)) return MAX; + switch (comparator.operator) { + case "!=": + case ">": + case ">=": + return MAX; + case undefined: + case "=": + case "<=": + return { + major: semver.major, + minor: semver.minor, + patch: semver.patch, + prerelease: semver.prerelease, + build: semver.build, + }; + case "<": { + const patch = semver.patch - 1; + const minor = patch >= 0 ? semver.minor : semver.minor - 1; + const major = minor >= 0 ? semver.major : semver.major - 1; + // if you try to do <0.0.0 it will Give you -∞.∞.∞ + // which means no SemVer can compare successfully to it. + if (major < 0) return INVALID; + + return { + major, + minor: minor >= 0 ? minor : Number.POSITIVE_INFINITY, + patch: patch >= 0 ? patch : Number.POSITIVE_INFINITY, + prerelease: [], + build: [], + }; + } + } +} + +/** + * The maximum valid SemVer for a given range or INVALID + * + * @example Usage + * ```ts + * import { parseRange } from "@std/semver/parse-range"; + * import { rangeMax } from "@std/semver/range-max"; + * import { equals } from "@std/semver/equals"; + * import { assert } from "@std/assert/assert"; + * + * assert(equals(rangeMax(parseRange(">1.0.0 <=2.0.0")), { major: 2, minor: 0, patch: 0 })); + * ``` + * + * @param range The range to calculate the max for + * @returns A valid SemVer or INVALID + * + * @deprecated This will be removed in 1.0.0. Use {@linkcode greaterThanRange} or + * {@linkcode lessThanRange} for comparing ranges and SemVers. The maximum + * version of a range is often not well defined, and therefore this API + * shouldn't be used. See + * {@link https://github.com/denoland/deno_std/issues/4365} for details. + */ +export function rangeMax(range: Range): SemVer { + let max; + for (const comparators of range) { + for (const comparator of comparators) { + const candidate = comparatorMax(comparator); + if (!satisfies(candidate, range)) continue; + max = (max && greaterThan(max, candidate)) ? max : candidate; + } + } + return max ?? INVALID; +} diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/range_min.ts b/src/vendor/jsr.io/@std/semver/0.224.3/range_min.ts new file mode 100644 index 00000000000..5d10739ad87 --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/range_min.ts @@ -0,0 +1,69 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import { INVALID, MAX, MIN } from "./constants.ts"; +import { satisfies } from "./satisfies.ts"; +import type { Comparator, Range, SemVer } from "./types.ts"; +import { lessThan } from "./less_than.ts"; +import { greaterThan } from "./greater_than.ts"; +import { increment } from "./increment.ts"; +import { isWildcardComparator } from "./_shared.ts"; + +function comparatorMin(comparator: Comparator): SemVer { + const semver = comparator; + if (isWildcardComparator(semver)) return MIN; + switch (comparator.operator) { + case ">": + return semver.prerelease && semver.prerelease.length > 0 + ? increment(semver, "pre") + : increment(semver, "patch"); + case "!=": + case "<=": + case "<": + // The min(<0.0.0) is MAX + return greaterThan(semver, MIN) ? MIN : MAX; + case ">=": + case undefined: + case "=": + return { + major: semver.major, + minor: semver.minor, + patch: semver.patch, + prerelease: semver.prerelease, + build: semver.build, + }; + } +} + +/** + * The minimum valid SemVer for a given range or INVALID + * + * @example Usage + * ```ts + * import { parseRange } from "@std/semver/parse-range"; + * import { rangeMin } from "@std/semver/range-min"; + * import { equals } from "@std/semver/equals"; + * import { assert } from "@std/assert/assert"; + * + * assert(equals(rangeMin(parseRange(">=1.0.0 <2.0.0")), { major: 1, minor: 0, patch: 0 })); + * ``` + * + * @param range The range to calculate the min for + * @returns A valid SemVer or INVALID + * + * @deprecated This will be removed in 1.0.0. Use {@linkcode greaterThanRange} or + * {@linkcode lessThanRange} for comparing ranges and SemVers. The minimum + * version of a range is often not well defined, and therefore this API + * shouldn't be used. See + * {@link https://github.com/denoland/deno_std/issues/4365} for details. + */ +export function rangeMin(range: Range): SemVer { + let min; + for (const comparators of range) { + for (const comparator of comparators) { + const candidate = comparatorMin(comparator); + if (!satisfies(candidate, range)) continue; + min = (min && lessThan(min, candidate)) ? min : candidate; + } + } + return min ?? INVALID; +} diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/satisfies.ts b/src/vendor/jsr.io/@std/semver/0.224.3/satisfies.ts new file mode 100644 index 00000000000..0e86920c76a --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/satisfies.ts @@ -0,0 +1,32 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { Range, SemVer } from "./types.ts"; +import { testComparatorSet } from "./_test_comparator_set.ts"; + +/** + * Test to see if the version satisfies the range. + * + * @example Usage + * ```ts + * import { parse, parseRange, satisfies } from "@std/semver"; + * import { assert, assertFalse } from "@std/assert"; + * + * const version = parse("1.2.3"); + * const range0 = parseRange(">=1.0.0 <2.0.0"); + * const range1 = parseRange(">=1.0.0 <1.3.0"); + * const range2 = parseRange(">=1.0.0 <1.2.3"); + * + * assert(satisfies(version, range0)); + * assert(satisfies(version, range1)); + * assertFalse(satisfies(version, range2)); + * ``` + * @param version The version to test + * @param range The range to check + * @returns true if the version is in the range + */ +export function satisfies( + version: SemVer, + range: Range, +): boolean { + return range.some((set) => testComparatorSet(version, set)); +} diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/test_range.ts b/src/vendor/jsr.io/@std/semver/0.224.3/test_range.ts new file mode 100644 index 00000000000..69e5a024485 --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/test_range.ts @@ -0,0 +1,31 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +import type { Range, SemVer } from "./types.ts"; +import { satisfies } from "./satisfies.ts"; + +/** + * Test to see if the version satisfies the range. + * + * @example Usage + * ```ts + * import { parse, parseRange, testRange } from "@std/semver"; + * import { assert, assertFalse } from "@std/assert"; + * + * const version = parse("1.2.3"); + * const range0 = parseRange(">=1.0.0 <2.0.0"); + * const range1 = parseRange(">=1.0.0 <1.3.0"); + * const range2 = parseRange(">=1.0.0 <1.2.3"); + * + * assert(testRange(version, range0)); + * assert(testRange(version, range1)); + * assertFalse(testRange(version, range2)); + * ``` + * @param version The version to test + * @param range The range to check + * @returns true if the version is in the range + * + * @deprecated This will be removed in 1.0.0. Use {@linkcode satisfies} + * instead. See https://github.com/denoland/deno_std/pull/4364. + */ +export function testRange(version: SemVer, range: Range): boolean { + return satisfies(version, range); +} diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/try_parse.ts b/src/vendor/jsr.io/@std/semver/0.224.3/try_parse.ts new file mode 100644 index 00000000000..08673031a78 --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/try_parse.ts @@ -0,0 +1,33 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. +import type { SemVer } from "./types.ts"; +import { parse } from "./parse.ts"; + +/** + * Returns the parsed version, or undefined if it's not valid. + * + * @example Usage + * ```ts + * import { tryParse } from "@std/semver/try-parse"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(tryParse("1.2.3"), { major: 1, minor: 2, patch: 3, prerelease: [], build: [] }); + * assertEquals(tryParse("1.2.3-alpha"), { major: 1, minor: 2, patch: 3, prerelease: ["alpha"], build: [] }); + * assertEquals(tryParse("1.2.3+build"), { major: 1, minor: 2, patch: 3, prerelease: [], build: ["build"] }); + * assertEquals(tryParse("1.2.3-alpha.1+build.1"), { major: 1, minor: 2, patch: 3, prerelease: ["alpha", 1], build: ["build", "1"] }); + * assertEquals(tryParse(" invalid "), undefined); + * ``` + * + * @param version The version string to parse + * @returns A valid SemVer or `undefined` + */ +export function tryParse(version?: string): SemVer | undefined { + if (version === undefined) { + return undefined; + } + try { + return parse(version); + } catch { + return undefined; + } +} diff --git a/src/vendor/jsr.io/@std/semver/0.224.3/try_parse_range.ts b/src/vendor/jsr.io/@std/semver/0.224.3/try_parse_range.ts new file mode 100644 index 00000000000..e1b2c3ba727 --- /dev/null +++ b/src/vendor/jsr.io/@std/semver/0.224.3/try_parse_range.ts @@ -0,0 +1,37 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { Range } from "./types.ts"; +import { parseRange } from "./parse_range.ts"; + +/** + * Parses the given range string and returns a Range object. If the range string + * is invalid, `undefined` is returned. + * + * @example Usage + * ```ts + * import { tryParseRange } from "@std/semver"; + * import { assertEquals } from "@std/assert"; + * + * assertEquals(tryParseRange(">=1.2.3 <1.2.4"), [ + * [ + * { operator: ">=", major: 1, minor: 2, patch: 3, prerelease: [], build: [] }, + * { operator: "<", major: 1, minor: 2, patch: 4, prerelease: [], build: [] }, + * ], + * ]); + * ``` + * + * @param range The range string + * @returns A Range object if valid otherwise `undefined` + */ +export function tryParseRange( + range: string, +): Range | undefined { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return parseRange(range); + } catch { + return undefined; + } +} diff --git a/src/vendor/deno.land/std@0.217.0/semver/types.ts b/src/vendor/jsr.io/@std/semver/0.224.3/types.ts similarity index 68% rename from src/vendor/deno.land/std@0.217.0/semver/types.ts rename to src/vendor/jsr.io/@std/semver/0.224.3/types.ts index 8e0f1e9bdfd..2d17c6dd739 100644 --- a/src/vendor/deno.land/std@0.217.0/semver/types.ts +++ b/src/vendor/jsr.io/@std/semver/0.224.3/types.ts @@ -1,6 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -import { OPERATORS } from "./_constants.ts"; +// This module is browser compatible. /** * The possible release types are used as an operator for the @@ -18,30 +17,38 @@ export type ReleaseType = /** * SemVer comparison operators. - * @deprecated (will be removed in 0.219.0) `"=="`, `"==="`, `"!=="` and `""` operators are deprecated. Use `"="`, `"!="` or `undefined` instead. */ -export type Operator = typeof OPERATORS[number]; +export type Operator = + | undefined + | "=" + | "!=" + | ">" + | ">=" + | "<" + | "<="; /** * The shape of a valid semantic version comparator * @example >=0.0.0 */ export interface Comparator extends SemVer { + /** The operator */ operator?: Operator; - /** - * @deprecated (will be removed after 0.217.0) {@linkcode Comparator} extends {@linkcode SemVer}. Use `major`, `minor`, `patch`, `prerelease`, and `build` properties instead. - */ - semver?: SemVer; } /** * A SemVer object parsed into its constituent parts. */ export interface SemVer { + /** The major version */ major: number; + /** The minor version */ minor: number; + /** The patch version */ patch: number; + /** The prerelease version */ prerelease?: (string | number)[]; + /** The build metadata */ build?: string[]; } diff --git a/src/vendor/deno.land/std@0.217.0/streams/_common.ts b/src/vendor/jsr.io/@std/streams/0.224.5/_common.ts similarity index 94% rename from src/vendor/deno.land/std@0.217.0/streams/_common.ts rename to src/vendor/jsr.io/@std/streams/0.224.5/_common.ts index 978ffcda008..031915257c7 100644 --- a/src/vendor/deno.land/std@0.217.0/streams/_common.ts +++ b/src/vendor/jsr.io/@std/streams/0.224.5/_common.ts @@ -20,7 +20,7 @@ export function createLPS(pat: Uint8Array): Uint8Array { lps[i] = 0; i++; } else { - prefixEnd = lps[prefixEnd - 1]; + prefixEnd = lps[prefixEnd - 1]!; } } return lps; diff --git a/src/vendor/jsr.io/@std/streams/0.224.5/buffer.ts b/src/vendor/jsr.io/@std/streams/0.224.5/buffer.ts new file mode 100644 index 00000000000..a2c15b2ed8b --- /dev/null +++ b/src/vendor/jsr.io/@std/streams/0.224.5/buffer.ts @@ -0,0 +1,447 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { copy } from "jsr:/@std/bytes@^1.0.0-rc.3/copy"; + +const MAX_SIZE = 2 ** 32 - 2; +const DEFAULT_CHUNK_SIZE = 16_640; + +/** Options for {@linkcode Buffer.bytes}. */ +export interface BufferBytesOptions { + /** + * If true, {@linkcode Buffer.bytes} will return a copy of the buffered data. + * + * If false, it will return a slice to the buffer's data. + * + * @default {true} + */ + copy?: boolean; +} + +/** + * A variable-sized buffer of bytes with `readable` and `writable` getters that + * allows you to work with {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API | Web Streams API}. + * + * Buffer is almost always used with some I/O like files and sockets. It allows + * one to buffer up a download from a socket. Buffer grows and shrinks as + * necessary. + * + * Buffer is NOT the same thing as Node's Buffer. Node's Buffer was created in + * 2009 before JavaScript had the concept of ArrayBuffers. It's simply a + * non-standard ArrayBuffer. + * + * ArrayBuffer is a fixed memory allocation. Buffer is implemented on top of + * ArrayBuffer. + * + * Based on {@link https://golang.org/pkg/bytes/#Buffer | Go Buffer}. + * + * @example Buffer input bytes and convert it to a string + * ```ts + * import { Buffer } from "@std/streams/buffer"; + * import { toText } from "@std/streams/to-text"; + * import { assert } from "@std/assert/assert"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * // Create a new buffer + * const buf = new Buffer(); + * assertEquals(buf.capacity, 0); + * assertEquals(buf.length, 0); + * + * // Dummy input stream + * const inputStream = ReadableStream.from([ + * "hello, ", + * "world", + * "!", + * ]); + * + * // Pipe the input stream to the buffer + * await inputStream.pipeThrough(new TextEncoderStream()).pipeTo(buf.writable); + * assert(buf.capacity > 0); + * assert(buf.length > 0); + * + * // Convert the buffered bytes to a string + * const result = await toText(buf.readable); + * assertEquals(result, "hello, world!"); + * assert(buf.empty()); + * ``` + */ +export class Buffer { + #buf: Uint8Array; // contents are the bytes buf[off : len(buf)] + #off = 0; // read at buf[off], write at buf[buf.byteLength] + #readable: ReadableStream = new ReadableStream({ + type: "bytes", + pull: (controller) => { + const view = new Uint8Array(controller.byobRequest!.view!.buffer); + if (this.empty()) { + // Buffer is empty, reset to recover space. + this.reset(); + controller.close(); + controller.byobRequest!.respond(0); + return; + } + const nread = copy(this.#buf.subarray(this.#off), view); + this.#off += nread; + controller.byobRequest!.respond(nread); + }, + autoAllocateChunkSize: DEFAULT_CHUNK_SIZE, + }); + + /** + * Getter returning the instance's {@linkcode ReadableStream}. + * + * @returns A `ReadableStream` of the buffer. + * + * @example Read the content out of the buffer to stdout + * ```ts no-assert + * import { Buffer } from "@std/streams/buffer"; + * + * const buf = new Buffer(); + * await buf.readable.pipeTo(Deno.stdout.writable); + * ``` + */ + get readable(): ReadableStream { + return this.#readable; + } + + #writable = new WritableStream({ + write: (chunk) => { + const m = this.#grow(chunk.byteLength); + copy(chunk, this.#buf, m); + }, + }); + + /** + * Getter returning the instance's {@linkcode WritableStream}. + * + * @returns A `WritableStream` of the buffer. + * + * @example Write the data from stdin to the buffer + * ```ts no-assert + * import { Buffer } from "@std/streams/buffer"; + * + * const buf = new Buffer(); + * await Deno.stdin.readable.pipeTo(buf.writable); + * ``` + */ + get writable(): WritableStream { + return this.#writable; + } + + /** + * Constructs a new instance. + * + * @param ab An optional buffer to use as the initial buffer. + * + * @example No initial buffer provided + * ```ts no-assert + * import { Buffer } from "@std/streams/buffer"; + * + * const buf = new Buffer(); + * ``` + * + * @example With a pre-allocated buffer + * ```ts no-assert + * import { Buffer } from "@std/streams/buffer"; + * + * const arrayBuffer = new ArrayBuffer(8); + * const buf = new Buffer(arrayBuffer); + * ``` + * + * @example From Uint8Array + * ```ts no-assert + * import { Buffer } from "@std/streams/buffer"; + * + * const array = new Uint8Array([0, 1, 2]); + * const buf = new Buffer(array.buffer); + * ``` + */ + constructor(ab?: ArrayBufferLike | ArrayLike) { + this.#buf = ab === undefined ? new Uint8Array(0) : new Uint8Array(ab); + } + + /** + * Returns a slice holding the unread portion of the buffer. + * + * The slice is valid for use only until the next buffer modification (that + * is, only until the next call to a method that mutates or consumes the + * buffer, like reading data out via `readable`, `reset()`, or `truncate()`). + * + * If `options.copy` is false the slice aliases the buffer content at least + * until the next buffer modification, so immediate changes to the slice will + * affect the result of future reads. If `options` is not provided, + * `options.copy` defaults to `true`. + * + * @param options Options for the bytes method. + * @returns A copy or a slice of the buffer. + * + * @example Copy the buffer + * ```ts + * import { assertEquals } from "@std/assert/assert-equals"; + * import { assertNotEquals } from "@std/assert/assert-not-equals"; + * import { Buffer } from "@std/streams/buffer"; + * + * const array = new Uint8Array([0, 1, 2]); + * const buf = new Buffer(array.buffer); + * const copied = buf.bytes(); + * assertEquals(copied.length, array.length); + * + * // Modify an element in the original array + * array[1] = 99; + * assertEquals(copied[0], array[0]); + * // The copied buffer is not affected by the modification + * assertNotEquals(copied[1], array[1]); + * assertEquals(copied[2], array[2]); + * ``` + * + * @example Get a slice to the buffer + * ```ts + * import { assertEquals } from "@std/assert/assert-equals"; + * import { Buffer } from "@std/streams/buffer"; + * + * const array = new Uint8Array([0, 1, 2]); + * const buf = new Buffer(array.buffer); + * const slice = buf.bytes({ copy: false }); + * assertEquals(slice.length, array.length); + * + * // Modify an element in the original array + * array[1] = 99; + * assertEquals(slice[0], array[0]); + * // The slice _is_ affected by the modification + * assertEquals(slice[1], array[1]); + * assertEquals(slice[2], array[2]); + * ``` + */ + bytes(options: BufferBytesOptions = { copy: true }): Uint8Array { + if (options.copy === false) return this.#buf.subarray(this.#off); + return this.#buf.slice(this.#off); + } + + /** + * Returns whether the unread portion of the buffer is empty. + * + * @returns Whether the buffer is empty. + * + * @example Empty buffer + * ```ts + * import { assert } from "@std/assert/assert"; + * import { Buffer } from "@std/streams/buffer"; + * + * const buf = new Buffer(); + * assert(buf.empty()); + * ``` + * + * @example Non-empty buffer + * ```ts + * import { assert } from "@std/assert/assert"; + * import { Buffer } from "@std/streams/buffer"; + * + * const array = new Uint8Array([42]); + * const buf = new Buffer(array.buffer); + * assert(!buf.empty()); + * ``` + * + * @example Non-empty, but the content was already read + * ```ts + * import { assert } from "@std/assert/assert"; + * import { Buffer } from "@std/streams/buffer"; + * + * const array = new Uint8Array([42]); + * const buf = new Buffer(array.buffer); + * assert(!buf.empty()); + * // Read the content out of the buffer + * await buf.readable.pipeTo(Deno.stdout.writable); + * // The buffer is now empty + * assert(buf.empty()); + * ``` + */ + empty(): boolean { + return this.#buf.byteLength <= this.#off; + } + + /** + * A read only number of bytes of the unread portion of the buffer. + * + * @returns The number of bytes in the unread portion of the buffer. + * + * @example Basic usage + * ```ts + * import { assertEquals } from "@std/assert/assert-equals"; + * import { Buffer } from "@std/streams/buffer"; + * + * const array = new Uint8Array([0, 1, 2]); + * const buf = new Buffer(array.buffer); + * assertEquals(buf.length, 3); + * ``` + * + * @example Length becomes 0 after the content is read + * ```ts + * import { assertEquals } from "@std/assert/assert-equals"; + * import { Buffer } from "@std/streams/buffer"; + * + * const array = new Uint8Array([42]); + * const buf = new Buffer(array.buffer); + * assertEquals(buf.length, 1); + * // Read the content out of the buffer + * await buf.readable.pipeTo(Deno.stdout.writable); + * // The length is now 0 + * assertEquals(buf.length, 0); + * ``` + */ + get length(): number { + return this.#buf.byteLength - this.#off; + } + + /** + * The read only capacity of the buffer's underlying byte slice, that is, + * the total space allocated for the buffer's data. + * + * @returns The number of allocated bytes for the buffer. + * + * @example Basic usage + * ```ts + * import { assertEquals } from "@std/assert/assert-equals"; + * import { Buffer } from "@std/streams/buffer"; + * + * const arrayBuffer = new ArrayBuffer(256); + * const buf = new Buffer(arrayBuffer); + * assertEquals(buf.capacity, 256); + * ``` + */ + get capacity(): number { + return this.#buf.buffer.byteLength; + } + + /** + * Discards all but the first `n` unread bytes from the buffer but + * continues to use the same allocated storage. It throws if `n` is + * negative or greater than the length of the buffer. + * + * @param n The number of bytes to keep. + * + * @example Basic usage + * ```ts + * import { assertEquals } from "@std/assert/assert-equals"; + * import { Buffer } from "@std/streams/buffer"; + * + * const array = new Uint8Array([0, 1, 2]); + * const buf = new Buffer(array.buffer); + * assertEquals(buf.bytes(), array); + * + * // Discard all but the first 2 bytes + * buf.truncate(2); + * assertEquals(buf.bytes(), array.slice(0, 2)); + * ``` + */ + truncate(n: number): void { + if (n === 0) { + this.reset(); + return; + } + if (n < 0 || n > this.length) { + throw Error("bytes.Buffer: truncation out of range"); + } + this.#reslice(this.#off + n); + } + + /** + * Resets to an empty buffer. + * + * @example Basic usage + * ```ts + * import { assert } from "@std/assert/assert"; + * import { Buffer } from "@std/streams/buffer"; + * + * const array = new Uint8Array([0, 1, 2]); + * const buf = new Buffer(array.buffer); + * assert(!buf.empty()); + * + * // Reset + * buf.reset(); + * assert(buf.empty()); + * ``` + */ + reset() { + this.#reslice(0); + this.#off = 0; + } + + #tryGrowByReslice(n: number) { + const l = this.#buf.byteLength; + if (n <= this.capacity - l) { + this.#reslice(l + n); + return l; + } + return -1; + } + + #reslice(len: number) { + if (len > this.#buf.buffer.byteLength) { + throw new RangeError("Length is greater than buffer capacity"); + } + this.#buf = new Uint8Array(this.#buf.buffer, 0, len); + } + + #grow(n: number) { + const m = this.length; + // If buffer is empty, reset to recover space. + if (m === 0 && this.#off !== 0) { + this.reset(); + } + // Fast: Try to grow by means of a reslice. + const i = this.#tryGrowByReslice(n); + if (i >= 0) { + return i; + } + const c = this.capacity; + if (n <= Math.floor(c / 2) - m) { + // We can slide things down instead of allocating a new + // ArrayBuffer. We only need m+n <= c to slide, but + // we instead let capacity get twice as large so we + // don't spend all our time copying. + copy(this.#buf.subarray(this.#off), this.#buf); + } else if (c + n > MAX_SIZE) { + throw new Error("The buffer cannot be grown beyond the maximum size."); + } else { + // Not enough space anywhere, we need to allocate. + const buf = new Uint8Array(Math.min(2 * c + n, MAX_SIZE)); + copy(this.#buf.subarray(this.#off), buf); + this.#buf = buf; + } + // Restore this.#off and len(this.#buf). + this.#off = 0; + this.#reslice(Math.min(m + n, MAX_SIZE)); + return m; + } + + /** + * Grows the buffer's capacity, if necessary, to guarantee space for + * another `n` bytes. After `.grow(n)`, at least `n` bytes can be written to + * the buffer without another allocation. If `n` is negative, `.grow()` will + * throw. If the buffer can't grow it will throw an error. + * + * @param n The number of bytes to grow the buffer by. + * + * Based on Go Lang's + * {@link https://golang.org/pkg/bytes/#Buffer.Grow | Buffer.Grow}. + * + * @example Basic usage + * ```ts + * import { assert } from "@std/assert/assert"; + * import { assertEquals } from "@std/assert/assert-equals"; + * import { Buffer } from "@std/streams/buffer"; + * + * const buf = new Buffer(); + * assertEquals(buf.capacity, 0); + * + * buf.grow(200); + * assert(buf.capacity >= 200); + * ``` + */ + grow(n: number) { + if (n < 0) { + throw Error("Buffer.grow: negative count"); + } + const m = this.#grow(n); + this.#reslice(m); + } +} diff --git a/src/vendor/jsr.io/@std/streams/0.224.5/byte_slice_stream.ts b/src/vendor/jsr.io/@std/streams/0.224.5/byte_slice_stream.ts new file mode 100644 index 00000000000..44892cd6d7e --- /dev/null +++ b/src/vendor/jsr.io/@std/streams/0.224.5/byte_slice_stream.ts @@ -0,0 +1,87 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * A transform stream that only transforms from the zero-indexed `start` and + * `end` bytes (both inclusive). + * + * @example Basic usage + * ```ts + * import { ByteSliceStream } from "@std/streams/byte-slice-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream = ReadableStream.from([ + * new Uint8Array([0, 1]), + * new Uint8Array([2, 3, 4]), + * ]); + * const slicedStream = stream.pipeThrough(new ByteSliceStream(1, 3)); + * + * assertEquals( + * await Array.fromAsync(slicedStream), + * [new Uint8Array([1]), new Uint8Array([2, 3])] + * ); + * ``` + * + * @example Get a range of bytes from a fetch response body + * ```ts + * import { ByteSliceStream } from "@std/streams/byte-slice-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const response = await fetch("https://example.com"); + * const rangedStream = response.body! + * .pipeThrough(new ByteSliceStream(3, 8)); + * const collected = await Array.fromAsync(rangedStream); + * assertEquals(collected[0]?.length, 6); + * ``` + */ +export class ByteSliceStream extends TransformStream { + #offsetStart = 0; + #offsetEnd = 0; + + /** + * Constructs a new instance. + * + * @param start The zero-indexed byte index to start reading from. + * @param end The zero-indexed byte index to stop reading at. Inclusive. + * + * @example No parameters + * ```ts no-assert + * import { ByteSliceStream } from "@std/streams/byte-slice-stream"; + * + * const byteSliceStream = new ByteSliceStream(); + * ``` + * + * @example start = 4, end = 11 + * ```ts no-assert + * import { ByteSliceStream } from "@std/streams/byte-slice-stream"; + * + * const byteSliceStream = new ByteSliceStream(4, 11); + * ``` + */ + constructor(start = 0, end: number = Infinity) { + super({ + start: () => { + if (start < 0) { + throw new RangeError("`start` must be greater than 0"); + } + end += 1; + }, + transform: (chunk, controller) => { + this.#offsetStart = this.#offsetEnd; + this.#offsetEnd += chunk.byteLength; + if (this.#offsetEnd > start) { + if (this.#offsetStart < start) { + chunk = chunk.slice(start - this.#offsetStart); + } + if (this.#offsetEnd >= end) { + chunk = chunk.slice(0, chunk.byteLength - this.#offsetEnd + end); + controller.enqueue(chunk); + controller.terminate(); + } else { + controller.enqueue(chunk); + } + } + }, + }); + } +} diff --git a/src/vendor/jsr.io/@std/streams/0.224.5/concat_readable_streams.ts b/src/vendor/jsr.io/@std/streams/0.224.5/concat_readable_streams.ts new file mode 100644 index 00000000000..25d227c4f3e --- /dev/null +++ b/src/vendor/jsr.io/@std/streams/0.224.5/concat_readable_streams.ts @@ -0,0 +1,50 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +/** + * Concatenates multiple `ReadableStream`s into a single ordered + * `ReadableStream`. + * + * Cancelling the resulting stream will cancel all the input streams. + * + * @typeParam T The type of the chunks in the streams. + * @param streams An iterable of `ReadableStream`s to concat. + * @returns A `ReadableStream` that will emit the concatenated chunks. + * + * @example Usage + * ```ts + * import { concatReadableStreams } from "@std/streams/concat-readable-streams"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream1 = ReadableStream.from([1, 2, 3]); + * const stream2 = ReadableStream.from([4, 5, 6]); + * const stream3 = ReadableStream.from([7, 8, 9]); + * + * assertEquals( + * await Array.fromAsync(concatReadableStreams(stream1, stream2, stream3)), + * [1, 2, 3, 4, 5, 6, 7, 8, 9], + * ); + * ``` + */ +export function concatReadableStreams( + ...streams: ReadableStream[] +): ReadableStream { + let i = 0; + return new ReadableStream({ + async pull(controller) { + const reader = streams[i]!.getReader(); + const { done, value } = await reader.read(); + if (done) { + if (streams.length === ++i) { + return controller.close(); + } + return await this.pull!(controller); + } + controller.enqueue(value); + reader.releaseLock(); + }, + async cancel(reason) { + const promises = streams.map((stream) => stream.cancel(reason)); + await Promise.allSettled(promises); + }, + }); +} diff --git a/src/vendor/deno.land/std@0.217.0/streams/delimiter_stream.ts b/src/vendor/jsr.io/@std/streams/0.224.5/delimiter_stream.ts similarity index 81% rename from src/vendor/deno.land/std@0.217.0/streams/delimiter_stream.ts rename to src/vendor/jsr.io/@std/streams/0.224.5/delimiter_stream.ts index 5d7acdf6111..82aee13822f 100644 --- a/src/vendor/deno.land/std@0.217.0/streams/delimiter_stream.ts +++ b/src/vendor/jsr.io/@std/streams/0.224.5/delimiter_stream.ts @@ -1,7 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -import { concat } from "../bytes/concat.ts"; +import { concat } from "jsr:/@std/bytes@^1.0.0-rc.3/concat"; import { createLPS } from "./_common.ts"; /** Disposition of the delimiter for {@linkcode DelimiterStreamOptions}. */ @@ -16,36 +16,50 @@ export type DelimiterDisposition = /** Options for {@linkcode DelimiterStream}. */ export interface DelimiterStreamOptions { - /** Disposition of the delimiter. */ + /** + * Disposition of the delimiter. + * + * @default {"discard"} + */ disposition?: DelimiterDisposition; } /** * Divide a stream into chunks delimited by a given byte sequence. * + * If you are working with a stream of `string`, consider using {@linkcode TextDelimiterStream}. + * * @example * Divide a CSV stream by commas, discarding the commas: * ```ts - * import { DelimiterStream } from "https://deno.land/std@$STD_VERSION/streams/delimiter_stream.ts"; - * const res = await fetch("https://example.com/data.csv"); - * const parts = res.body! + * import { DelimiterStream } from "@std/streams/delimiter-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const inputStream = ReadableStream.from(["foo,bar", ",baz"]); + * + * const transformed = inputStream.pipeThrough(new TextEncoderStream()) * .pipeThrough(new DelimiterStream(new TextEncoder().encode(","))) * .pipeThrough(new TextDecoderStream()); + * + * assertEquals(await Array.fromAsync(transformed), ["foo", "bar", "baz"]); * ``` * * @example - * Divide a stream after semi-colons, keeping the semi-colons in the output: + * Divide a stream after semi-colons, keeping the semicolons in the output: * ```ts - * import { DelimiterStream } from "https://deno.land/std@$STD_VERSION/streams/delimiter_stream.ts"; - * const res = await fetch("https://example.com/file.js"); - * const parts = res.body! + * import { DelimiterStream } from "@std/streams/delimiter-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const inputStream = ReadableStream.from(["foo;", "bar;baz", ";"]); + * + * const transformed = inputStream.pipeThrough(new TextEncoderStream()) * .pipeThrough( - * new DelimiterStream( - * new TextEncoder().encode(";"), - * { disposition: "suffix" }, - * ) - * ) - * .pipeThrough(new TextDecoderStream()); + * new DelimiterStream(new TextEncoder().encode(";"), { + * disposition: "suffix", + * }), + * ).pipeThrough(new TextDecoderStream()); + * + * assertEquals(await Array.fromAsync(transformed), ["foo;", "bar;", "baz;"]); * ``` */ export class DelimiterStream extends TransformStream { @@ -55,10 +69,31 @@ export class DelimiterStream extends TransformStream { #delimLPS: Uint8Array | null; #disp: DelimiterDisposition; - /** Constructs a new instance. */ + /** + * Constructs a new instance. + * + * @param delimiter A delimiter to split the stream by. + * @param options Options for the delimiter stream. + * + * @example comma as a delimiter + * ```ts no-assert + * import { DelimiterStream } from "@std/streams/delimiter-stream"; + * + * const delimiterStream = new DelimiterStream(new TextEncoder().encode(",")); + * ``` + * + * @example semicolon as a delimiter, and disposition set to `"suffix"` + * ```ts no-assert + * import { DelimiterStream } from "@std/streams/delimiter-stream"; + * + * const delimiterStream = new DelimiterStream(new TextEncoder().encode(";"), { + * disposition: "suffix", + * }); + * ``` + */ constructor( delimiter: Uint8Array, - options?: DelimiterStreamOptions, + options: DelimiterStreamOptions = { disposition: "discard" }, ) { super({ transform: (chunk, controller) => @@ -70,7 +105,7 @@ export class DelimiterStream extends TransformStream { this.#delimiter = delimiter; this.#delimLPS = delimiter.length > 1 ? createLPS(delimiter) : null; - this.#disp = options?.disposition ?? "discard"; + this.#disp = options.disposition ?? "discard"; } #handle( @@ -116,7 +151,7 @@ export class DelimiterStream extends TransformStream { // they are (with concatenation). if (bufs.length === 1) { // Concat not needed when a single buffer is passed. - controller.enqueue(bufs[0]); + controller.enqueue(bufs[0]!); } else { controller.enqueue(concat(bufs)); } @@ -134,7 +169,7 @@ export class DelimiterStream extends TransformStream { } else if (delimitedChunkEnd < 0 && bufs.length > 0) { // Our chunk started by finishing a partial delimiter match. const lastIndex = bufs.length - 1; - const last = bufs[lastIndex]; + const last = bufs[lastIndex]!; const lastSliceIndex = last.byteLength + delimitedChunkEnd; const lastSliced = last.subarray(0, lastSliceIndex); if (lastIndex === 0) { @@ -173,7 +208,7 @@ export class DelimiterStream extends TransformStream { // but now got a new 'A', then we'll drop down to having matched // just 'A'. The while loop will turn around again and we'll rematch // to 'AA' and proceed onwards to try and match on 'B' again. - matchIndex = lps[matchIndex - 1]; + matchIndex = lps[matchIndex - 1]!; } } // Save match index. @@ -231,7 +266,7 @@ export class DelimiterStream extends TransformStream { // they are (with concatenation). if (bufs.length === 1) { // Concat not needed when a single buffer is passed. - controller.enqueue(bufs[0]); + controller.enqueue(bufs[0]!); } else { controller.enqueue(concat(bufs)); } @@ -275,7 +310,7 @@ export class DelimiterStream extends TransformStream { if (length === 0) { controller.enqueue(new Uint8Array()); } else if (length === 1) { - controller.enqueue(bufs[0]); + controller.enqueue(bufs[0]!); } else { controller.enqueue(concat(bufs)); } diff --git a/src/vendor/jsr.io/@std/streams/0.224.5/early_zip_readable_streams.ts b/src/vendor/jsr.io/@std/streams/0.224.5/early_zip_readable_streams.ts new file mode 100644 index 00000000000..800392dabc6 --- /dev/null +++ b/src/vendor/jsr.io/@std/streams/0.224.5/early_zip_readable_streams.ts @@ -0,0 +1,109 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Merge multiple streams into a single one, taking order into account, and each + * stream will wait for a chunk to enqueue before the next stream can append + * another chunk. + * + * If a stream ends before other ones, the others will be cancelled after the + * last chunk of said stream is read. See the examples below for more + * comprehensible information. If you want to continue reading the other streams + * even after one of them ends, use {@linkcode zipReadableStreams}. + * + * @typeparam T The type of the chunks in the input streams. + * @returns A `ReadableStream` that will emit the zipped chunks + * + * @example Zip 2 streams with the same length + * ```ts + * import { earlyZipReadableStreams } from "@std/streams/early-zip-readable-streams"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream1 = ReadableStream.from(["1", "2", "3"]); + * const stream2 = ReadableStream.from(["a", "b", "c"]); + * const zippedStream = earlyZipReadableStreams(stream1, stream2); + * + * assertEquals( + * await Array.fromAsync(zippedStream), + * ["1", "a", "2", "b", "3", "c"], + * ); + * ``` + * + * @example Zip 2 streams with different length (first one is shorter) + * ```ts + * import { earlyZipReadableStreams } from "@std/streams/early-zip-readable-streams"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream1 = ReadableStream.from(["1", "2"]); + * const stream2 = ReadableStream.from(["a", "b", "c", "d"]); + * const zippedStream = earlyZipReadableStreams(stream1, stream2); + * + * // The first stream ends before the second one. When the first stream ends, + * // the second one is cancelled and no more data is read or added to the + * // zipped stream. + * assertEquals( + * await Array.fromAsync(zippedStream), + * ["1", "a", "2", "b"], + * ); + * ``` + * + * @example Zip 2 streams with different length (first one is longer) + * ```ts + * import { earlyZipReadableStreams } from "@std/streams/early-zip-readable-streams"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream1 = ReadableStream.from(["1", "2", "3", "4"]); + * const stream2 = ReadableStream.from(["a", "b"]); + * const zippedStream = earlyZipReadableStreams(stream1, stream2); + * + * // The second stream ends before the first one. When the second stream ends, + * // the first one is cancelled, but the chunk of "3" is already read so it + * // is added to the zipped stream. + * assertEquals( + * await Array.fromAsync(zippedStream), + * ["1", "a", "2", "b", "3"], + * ); + * ``` + * + * @example Zip 3 streams + * ```ts + * import { earlyZipReadableStreams } from "@std/streams/early-zip-readable-streams"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream1 = ReadableStream.from(["1"]); + * const stream2 = ReadableStream.from(["a", "b"]); + * const stream3 = ReadableStream.from(["A", "B", "C"]); + * const zippedStream = earlyZipReadableStreams(stream1, stream2, stream3); + * + * assertEquals( + * await Array.fromAsync(zippedStream), + * ["1", "a", "A"], + * ); + * ``` + */ +export function earlyZipReadableStreams( + ...streams: ReadableStream[] +): ReadableStream { + const readers = streams.map((s) => s.getReader()); + return new ReadableStream({ + async start(controller) { + try { + loop: + while (true) { + for (const reader of readers) { + const { value, done } = await reader.read(); + if (!done) { + controller.enqueue(value!); + } else { + await Promise.all(readers.map((reader) => reader.cancel())); + break loop; + } + } + } + controller.close(); + } catch (e) { + controller.error(e); + } + }, + }); +} diff --git a/src/vendor/jsr.io/@std/streams/0.224.5/iterate_reader.ts b/src/vendor/jsr.io/@std/streams/0.224.5/iterate_reader.ts new file mode 100644 index 00000000000..d6e55a1ef24 --- /dev/null +++ b/src/vendor/jsr.io/@std/streams/0.224.5/iterate_reader.ts @@ -0,0 +1,99 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { + iterateReader as _iterateReader, + iterateReaderSync as _iterateReaderSync, +} from "jsr:/@std/io@^0.224.1/iterate-reader"; +import type { Reader, ReaderSync } from "jsr:/@std/io@^0.224.1/types"; + +export type { Reader, ReaderSync }; + +/** + * Turns a {@linkcode https://jsr.io/@std/io/doc/types/~/Reader | Reader}, `r`, into an async iterator. + * + * @param r A reader to turn into an async iterator. + * @param options Options for the iterateReader function. + * @returns An async iterator that yields Uint8Array. + * + * @example Convert a `Deno.FsFile` into an async iterator and iterate over it + * ```ts no-assert no-eval + * import { iterateReader } from "@std/streams/iterate-reader"; + * + * using f = await Deno.open("./README.md"); + * for await (const chunk of iterateReader(f)) { + * console.log(chunk); + * } + * ``` + * + * @example Specify a buffer size of 1MiB + * ```ts no-assert no-eval + * import { iterateReader } from "@std/streams/iterate-reader"; + * + * using f = await Deno.open("./README.md"); + * const it = iterateReader(f, { + * bufSize: 1024 * 1024 + * }); + * for await (const chunk of it) { + * console.log(chunk); + * } + * ``` + * + * @deprecated This will be removed in 1.0.0. Import from + * {@link https://jsr.io/@std/io | @std/io} instead. + */ +export function iterateReader( + r: Reader, + options?: { + bufSize?: number; + }, +): AsyncIterableIterator { + return _iterateReader(r, options); +} + +/** + * Turns a {@linkcode https://jsr.io/@std/io/doc/types/~/ReaderSync | ReaderSync}, `r`, into an iterator. + * + * @param r A reader to turn into an iterator. + * @param options Options for the iterateReaderSync function. + * @returns An iterator that yields Uint8Array. + * + * @example Convert a `Deno.FsFile` into an iterator and iterate over it + * ```ts no-eval no-assert + * import { iterateReaderSync } from "@std/streams/iterate-reader"; + * + * using f = Deno.openSync("./README.md"); + * for (const chunk of iterateReaderSync(f)) { + * console.log(chunk); + * } + * ``` + * + * @example Specify a buffer size of 1MiB + * ```ts no-eval no-assert + * import { iterateReaderSync } from "@std/streams/iterate-reader"; + * + * using f = await Deno.open("./README.md"); + * const iter = iterateReaderSync(f, { + * bufSize: 1024 * 1024 + * }); + * for (const chunk of iter) { + * console.log(chunk); + * } + * ``` + * + * Iterator uses an internal buffer of fixed size for efficiency; it returns + * a view on that buffer on each iteration. It is therefore caller's + * responsibility to copy contents of the buffer if needed; otherwise the + * next iteration will overwrite contents of previously returned chunk. + * + * @deprecated This will be removed in 1.0.0. Import from + * {@link https://jsr.io/@std/io | @std/io} instead. + */ +export function iterateReaderSync( + r: ReaderSync, + options?: { + bufSize?: number; + }, +): IterableIterator { + return _iterateReaderSync(r, options); +} diff --git a/src/vendor/jsr.io/@std/streams/0.224.5/limited_bytes_transform_stream.ts b/src/vendor/jsr.io/@std/streams/0.224.5/limited_bytes_transform_stream.ts new file mode 100644 index 00000000000..e88f4672ce9 --- /dev/null +++ b/src/vendor/jsr.io/@std/streams/0.224.5/limited_bytes_transform_stream.ts @@ -0,0 +1,134 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** Options for {@linkcode LimitedBytesTransformStream}. */ +export interface LimitedBytesTransformStreamOptions { + /** + * If true, a {@linkcode RangeError} is thrown when queueing the current chunk + * would exceed the specified size limit. + * + * @default {false} + */ + error?: boolean; +} + +/** + * A {@linkcode TransformStream} that will only read & enqueue chunks until the + * total amount of enqueued data exceeds `size`. The last chunk that would + * exceed the limit will NOT be enqueued, in which case a {@linkcode RangeError} + * is thrown when `options.error` is set to true, otherwise the stream is just + * terminated. + * + * @example `size` is equal to the total byte length of the chunks + * ```ts + * import { LimitedBytesTransformStream } from "@std/streams/limited-bytes-transform-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream = ReadableStream.from(["1234", "5678"]); + * const transformed = stream.pipeThrough(new TextEncoderStream()).pipeThrough( + * new LimitedBytesTransformStream(8), + * ).pipeThrough(new TextDecoderStream()); + * + * assertEquals( + * await Array.fromAsync(transformed), + * ["1234", "5678"], + * ); + * ``` + * + * @example `size` is less than the total byte length of the chunks, and at the + * boundary of the chunks + * ```ts + * import { LimitedBytesTransformStream } from "@std/streams/limited-bytes-transform-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream = ReadableStream.from(["1234", "5678"]); + * const transformed = stream.pipeThrough(new TextEncoderStream()).pipeThrough( + * // `4` is the boundary of the chunks + * new LimitedBytesTransformStream(4), + * ).pipeThrough(new TextDecoderStream()); + * + * assertEquals( + * await Array.fromAsync(transformed), + * // The first chunk was read, but the second chunk was not + * ["1234"], + * ); + * ``` + * + * @example `size` is less than the total byte length of the chunks, and not at + * the boundary of the chunks + * ```ts + * import { LimitedBytesTransformStream } from "@std/streams/limited-bytes-transform-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream = ReadableStream.from(["1234", "5678"]); + * const transformed = stream.pipeThrough(new TextEncoderStream()).pipeThrough( + * // `5` is not the boundary of the chunks + * new LimitedBytesTransformStream(5), + * ).pipeThrough(new TextDecoderStream()); + * + * assertEquals( + * await Array.fromAsync(transformed), + * // The second chunk was not read because it would exceed the specified size + * ["1234"], + * ); + * ``` + * + * @example error: true + * ```ts + * import { LimitedBytesTransformStream } from "@std/streams/limited-bytes-transform-stream"; + * import { assertRejects } from "@std/assert/assert-rejects"; + * + * const stream = ReadableStream.from(["1234", "5678"]); + * const transformed = stream.pipeThrough(new TextEncoderStream()).pipeThrough( + * new LimitedBytesTransformStream(5, { error: true }), + * ).pipeThrough(new TextDecoderStream()); + * + * await assertRejects(async () => { + * await Array.fromAsync(transformed); + * }, RangeError); + * ``` + */ +export class LimitedBytesTransformStream + extends TransformStream { + #read = 0; + + /** + * Constructs a new instance. + * + * @param size A size limit in bytes. + * @param options Options for the stream. + * + * @example size = 42 + * ```ts no-assert + * import { LimitedBytesTransformStream } from "@std/streams/limited-bytes-transform-stream"; + * + * const limitedBytesTransformStream = new LimitedBytesTransformStream(42); + * ``` + * + * @example size = 42, error = true + * ```ts no-assert + * import { LimitedBytesTransformStream } from "@std/streams/limited-bytes-transform-stream"; + * + * const limitedBytesTransformStream = new LimitedBytesTransformStream(42, { error: true }); + * ``` + */ + constructor( + size: number, + options: LimitedBytesTransformStreamOptions = { error: false }, + ) { + super({ + transform: (chunk, controller) => { + if ((this.#read + chunk.byteLength) > size) { + if (options.error) { + throw new RangeError(`Exceeded byte size limit of '${size}'`); + } else { + controller.terminate(); + } + } else { + this.#read += chunk.byteLength; + controller.enqueue(chunk); + } + }, + }); + } +} diff --git a/src/vendor/jsr.io/@std/streams/0.224.5/limited_transform_stream.ts b/src/vendor/jsr.io/@std/streams/0.224.5/limited_transform_stream.ts new file mode 100644 index 00000000000..2a49fac8168 --- /dev/null +++ b/src/vendor/jsr.io/@std/streams/0.224.5/limited_transform_stream.ts @@ -0,0 +1,116 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** Options for {@linkcode LimitedTransformStream} */ +export interface LimitedTransformStreamOptions { + /** + * If true, a {@linkcode RangeError} is thrown when the total number of + * enqueued chunks is about to exceed the specified limit. + * + * @default {false} + */ + error?: boolean; +} + +/** + * A {@linkcode TransformStream} that will only read & enqueue `size` amount of + * chunks. + * + * If `options.error` is set, then instead of terminating the stream, + * a {@linkcode RangeError} will be thrown when the total number of enqueued + * chunks is about to exceed the specified size. + * + * @typeparam T The type the chunks in the stream. + * + * @example `size` is equal to the total number of chunks + * ```ts + * import { LimitedTransformStream } from "@std/streams/limited-transform-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream = ReadableStream.from(["1234", "5678"]); + * const transformed = stream.pipeThrough( + * new LimitedTransformStream(2), + * ); + * + * // All chunks were read + * assertEquals( + * await Array.fromAsync(transformed), + * ["1234", "5678"], + * ); + * ``` + * + * @example `size` is less than the total number of chunks + * ```ts + * import { LimitedTransformStream } from "@std/streams/limited-transform-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream = ReadableStream.from(["1234", "5678"]); + * const transformed = stream.pipeThrough( + * new LimitedTransformStream(1), + * ); + * + * // Only the first chunk was read + * assertEquals( + * await Array.fromAsync(transformed), + * ["1234"], + * ); + * ``` + * + * @example error: true + * ```ts + * import { LimitedTransformStream } from "@std/streams/limited-transform-stream"; + * import { assertRejects } from "@std/assert/assert-rejects"; + * + * const stream = ReadableStream.from(["1234", "5678"]); + * const transformed = stream.pipeThrough( + * new LimitedTransformStream(1, { error: true }), + * ); + * + * await assertRejects(async () => { + * await Array.fromAsync(transformed); + * }, RangeError); + * ``` + */ +export class LimitedTransformStream extends TransformStream { + #read = 0; + + /** + * Constructs a new instance. + * + * @param size The maximum number of chunks to read. + * @param options Options for the stream. + * + * @example size = 42 + * ```ts no-assert + * import { LimitedTransformStream } from "@std/streams/limited-transform-stream"; + * + * const limitedTransformStream = new LimitedTransformStream(42); + * ``` + * + * @example size = 42, error = true + * ```ts no-assert + * import { LimitedTransformStream } from "@std/streams/limited-transform-stream"; + * + * const limitedTransformStream = new LimitedTransformStream(42, { error: true }); + * ``` + */ + constructor( + size: number, + options: LimitedTransformStreamOptions = { error: false }, + ) { + super({ + transform: (chunk, controller) => { + if ((this.#read + 1) > size) { + if (options.error) { + throw new RangeError(`Exceeded chunk limit of '${size}'`); + } else { + controller.terminate(); + } + } else { + this.#read++; + controller.enqueue(chunk); + } + }, + }); + } +} diff --git a/src/vendor/jsr.io/@std/streams/0.224.5/merge_readable_streams.ts b/src/vendor/jsr.io/@std/streams/0.224.5/merge_readable_streams.ts new file mode 100644 index 00000000000..b1ed79c52e7 --- /dev/null +++ b/src/vendor/jsr.io/@std/streams/0.224.5/merge_readable_streams.ts @@ -0,0 +1,71 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +/** + * Merge multiple streams into a single one, not taking order into account. + * If a stream ends before other ones, the other will continue adding data, + * and the finished one will not add any more data. + * + * @typeparam T The type of the chunks in the input/output streams. + * @param streams An iterable of `ReadableStream`s to merge. + * @returns A `ReadableStream` that will emit the merged chunks. + * + * @example Merge 2 streams + * ```ts + * import { mergeReadableStreams } from "@std/streams/merge-readable-streams"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream1 = ReadableStream.from([1, 2]); + * const stream2 = ReadableStream.from([3, 4, 5]); + * + * const mergedStream = mergeReadableStreams(stream1, stream2); + * const merged = await Array.fromAsync(mergedStream); + * assertEquals(merged.toSorted(), [1, 2, 3, 4, 5]); + * ``` + * + * @example Merge 3 streams + * ```ts + * import { mergeReadableStreams } from "@std/streams/merge-readable-streams"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream1 = ReadableStream.from([1, 2]); + * const stream2 = ReadableStream.from([3, 4, 5]); + * const stream3 = ReadableStream.from([6]); + * + * const mergedStream = mergeReadableStreams(stream1, stream2, stream3); + * const merged = await Array.fromAsync(mergedStream); + * assertEquals(merged.toSorted(), [1, 2, 3, 4, 5, 6]); + * ``` + */ +export function mergeReadableStreams( + ...streams: ReadableStream[] +): ReadableStream { + const resolvePromises = streams.map(() => Promise.withResolvers()); + return new ReadableStream({ + start(controller) { + let mustClose = false; + Promise.all(resolvePromises.map(({ promise }) => promise)) + .then(() => { + controller.close(); + }) + .catch((error) => { + mustClose = true; + controller.error(error); + }); + for (const [index, stream] of streams.entries()) { + (async () => { + try { + for await (const data of stream) { + if (mustClose) { + break; + } + controller.enqueue(data); + } + resolvePromises[index]!.resolve(); + } catch (error) { + resolvePromises[index]!.reject(error); + } + })(); + } + }, + }); +} diff --git a/src/vendor/deno.land/std@0.217.0/streams/mod.ts b/src/vendor/jsr.io/@std/streams/0.224.5/mod.ts similarity index 78% rename from src/vendor/deno.land/std@0.217.0/streams/mod.ts rename to src/vendor/jsr.io/@std/streams/0.224.5/mod.ts index 05010eedbf6..21778ab9f5b 100644 --- a/src/vendor/deno.land/std@0.217.0/streams/mod.ts +++ b/src/vendor/jsr.io/@std/streams/0.224.5/mod.ts @@ -5,11 +5,22 @@ * * Includes buffering and conversion. * + * ```ts + * import { toText } from "@std/streams"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream = ReadableStream.from("Hello, world!"); + * const text = await toText(stream); + * + * assertEquals(text, "Hello, world!"); + * ``` + * * @module */ export * from "./buffer.ts"; export * from "./byte_slice_stream.ts"; +export * from "./concat_readable_streams.ts"; export * from "./delimiter_stream.ts"; export * from "./early_zip_readable_streams.ts"; export * from "./iterate_reader.ts"; diff --git a/src/vendor/deno.land/std@0.217.0/streams/readable_stream_from_reader.ts b/src/vendor/jsr.io/@std/streams/0.224.5/readable_stream_from_reader.ts similarity index 55% rename from src/vendor/deno.land/std@0.217.0/streams/readable_stream_from_reader.ts rename to src/vendor/jsr.io/@std/streams/0.224.5/readable_stream_from_reader.ts index a32d93a6217..57054611a25 100644 --- a/src/vendor/deno.land/std@0.217.0/streams/readable_stream_from_reader.ts +++ b/src/vendor/jsr.io/@std/streams/0.224.5/readable_stream_from_reader.ts @@ -1,14 +1,14 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -import { toReadableStream } from "../io/to_readable_stream.ts"; -import type { Closer, Reader } from "../io/types.ts"; +import { toReadableStream } from "jsr:/@std/io@^0.224.1/to-readable-stream"; +import type { Closer, Reader } from "jsr:/@std/io@^0.224.1/types"; export type { Closer }; /** * Options for {@linkcode readableStreamFromReader}. * - * @deprecated (will be removed after 1.0.0) Use {@linkcode toReadableStream} instead. + * @deprecated This will be removed in 1.0.0. Use {@linkcode https://jsr.io/@std/io/doc/~/toReadableStream | toReadableStream} instead. */ export interface ReadableStreamFromReaderOptions { /** If the `reader` is also a `Closer`, automatically close the `reader` @@ -28,22 +28,25 @@ export interface ReadableStreamFromReaderOptions { /** * Create a {@linkcode ReadableStream} of {@linkcode Uint8Array}s from a - * {@linkcode Reader}. + * {@linkcode https://jsr.io/@std/io/doc/types/~/Reader | Reader}. * * When the pull algorithm is called on the stream, a chunk from the reader * will be read. When `null` is returned from the reader, the stream will be - * closed along with the reader (if it is also a `Closer`). + * closed along with the reader (if it is also a {@linkcode https://jsr.io/@std/io/doc/types/~/Closer | Closer}). * - * An example converting a `Deno.FsFile` into a readable stream: + * @param reader A reader to convert into a `ReadableStream`. + * @param options Options for the `readableStreamFromReader` function. + * @returns A `ReadableStream` of `Uint8Array`s. * - * ```ts - * import { readableStreamFromReader } from "https://deno.land/std@$STD_VERSION/streams/readable_stream_from_reader.ts"; + * @example Convert a `Deno.FsFile` into a readable stream: + * ```ts no-eval no-assert + * import { readableStreamFromReader } from "@std/streams/readable-stream-from-reader"; * - * const file = await Deno.open("./file.txt", { read: true }); + * using file = await Deno.open("./README.md", { read: true }); * const fileStream = readableStreamFromReader(file); * ``` * - * @deprecated (will be removed after 1.0.0) Use {@linkcode toReadableStream} instead. + * @deprecated This will be removed in 1.0.0. Use {@linkcode https://jsr.io/@std/io/doc/~/toReadableStream | toReadableStream} instead. */ export function readableStreamFromReader( reader: Reader | (Reader & Closer), diff --git a/src/vendor/deno.land/std@0.217.0/streams/reader_from_iterable.ts b/src/vendor/jsr.io/@std/streams/0.224.5/reader_from_iterable.ts similarity index 57% rename from src/vendor/deno.land/std@0.217.0/streams/reader_from_iterable.ts rename to src/vendor/jsr.io/@std/streams/0.224.5/reader_from_iterable.ts index 887e900dc74..cbe2340752c 100644 --- a/src/vendor/deno.land/std@0.217.0/streams/reader_from_iterable.ts +++ b/src/vendor/jsr.io/@std/streams/0.224.5/reader_from_iterable.ts @@ -1,29 +1,36 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -import { Buffer } from "../io/buffer.ts"; -import { writeAll } from "../io/write_all.ts"; -import { Reader } from "../io/types.ts"; +import { Buffer } from "jsr:/@std/io@^0.224.1/buffer"; +import { writeAll } from "jsr:/@std/io@^0.224.1/write-all"; +import type { Reader } from "jsr:/@std/io@^0.224.1/types"; /** - * Create a {@linkcode Reader} from an iterable of {@linkcode Uint8Array}s. + * Create a {@linkcode https://jsr.io/@std/io/doc/types/~/Reader | Reader} from an iterable of {@linkcode Uint8Array}s. * - * ```ts - * import { readerFromIterable } from "https://deno.land/std@$STD_VERSION/streams/reader_from_iterable.ts"; - * import { copy } from "https://deno.land/std@$STD_VERSION/io/copy.ts"; + * @param iterable An iterable or async iterable of `Uint8Array`s to convert into a `Reader`. + * @returns A `Reader` that reads from the iterable. + * + * @example Write `Deno.build` information to the blackhole 3 times every second + * ```ts no-eval no-assert + * import { readerFromIterable } from "@std/streams/reader-from-iterable"; + * import { copy } from "@std/io/copy"; + * import { delay } from "@std/async/delay"; + * import { devNull } from "node:os"; * - * const file = await Deno.open("build.txt", { write: true }); * const reader = readerFromIterable((async function* () { - * while (true) { - * await new Promise((r) => setTimeout(r, 1000)); + * for (let i = 0; i < 3; i++) { + * await delay(1000); * const message = `data: ${JSON.stringify(Deno.build)}\n\n`; * yield new TextEncoder().encode(message); * } * })()); - * await copy(reader, file); + * + * using blackhole = await Deno.open(devNull, { write: true }); + * await copy(reader, blackhole); * ``` * - * @deprecated (will be removed after 1.0.0) Use {@linkcode ReadableStream.from} instead. + * @deprecated This will be removed in 1.0.0. Use {@linkcode ReadableStream.from} instead. */ export function readerFromIterable( iterable: Iterable | AsyncIterable, diff --git a/src/vendor/jsr.io/@std/streams/0.224.5/reader_from_stream_reader.ts b/src/vendor/jsr.io/@std/streams/0.224.5/reader_from_stream_reader.ts new file mode 100644 index 00000000000..970c9d2faeb --- /dev/null +++ b/src/vendor/jsr.io/@std/streams/0.224.5/reader_from_stream_reader.ts @@ -0,0 +1,33 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { readerFromStreamReader as _readerFromStreamReader } from "jsr:/@std/io@^0.224.1/reader-from-stream-reader"; +import type { Reader } from "jsr:/@std/io@^0.224.1/types"; + +/** + * Create a {@linkcode https://jsr.io/@std/io/doc/types/~/Reader | Reader} from a {@linkcode ReadableStreamDefaultReader}. + * + * @param streamReader A `ReadableStreamDefaultReader` to convert into a `Reader`. + * @returns A `Reader` that reads from the `streamReader`. + * + * @example Copy the response body of a fetch request to the blackhole + * ```ts no-eval no-assert + * import { copy } from "@std/io/copy"; + * import { readerFromStreamReader } from "@std/streams/reader-from-stream-reader"; + * import { devNull } from "node:os"; + * + * const res = await fetch("https://deno.land"); + * using blackhole = await Deno.open(devNull, { write: true }); + * + * const reader = readerFromStreamReader(res.body!.getReader()); + * await copy(reader, blackhole); + * ``` + * + * @deprecated This will be removed in 1.0.0. Import from + * {@link https://jsr.io/@std/io | @std/io} instead. + */ +export function readerFromStreamReader( + streamReader: ReadableStreamDefaultReader, +): Reader { + return _readerFromStreamReader(streamReader); +} diff --git a/src/vendor/jsr.io/@std/streams/0.224.5/text_delimiter_stream.ts b/src/vendor/jsr.io/@std/streams/0.224.5/text_delimiter_stream.ts new file mode 100644 index 00000000000..a78cd31fb53 --- /dev/null +++ b/src/vendor/jsr.io/@std/streams/0.224.5/text_delimiter_stream.ts @@ -0,0 +1,139 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { createLPS } from "./_common.ts"; + +import type { + DelimiterDisposition, + DelimiterStreamOptions, +} from "./delimiter_stream.ts"; + +/** + * Transform a stream `string` into a stream where each chunk is divided by a + * given delimiter. + * + * If you are working with a stream of `Uint8Array`, consider using {@linkcode DelimiterStream}. + * + * If you want to split by a newline, consider using {@linkcode TextLineStream}. + * + * @example Comma-separated values + * ```ts + * import { TextDelimiterStream } from "@std/streams/text-delimiter-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream = ReadableStream.from([ + * "alice,20,", + * ",US,", + * ]); + * + * const valueStream = stream.pipeThrough(new TextDelimiterStream(",")); + * + * assertEquals( + * await Array.fromAsync(valueStream), + * ["alice", "20", "", "US", ""], + * ); + * ``` + * + * @example Semicolon-separated values with suffix disposition + * ```ts + * import { TextDelimiterStream } from "@std/streams/text-delimiter-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream = ReadableStream.from([ + * "const a = 42;;let b =", + * " true;", + * ]); + * + * const valueStream = stream.pipeThrough( + * new TextDelimiterStream(";", { disposition: "suffix" }), + * ); + * + * assertEquals( + * await Array.fromAsync(valueStream), + * ["const a = 42;", ";", "let b = true;", ""], + * ); + * ``` + */ +export class TextDelimiterStream extends TransformStream { + #buf = ""; + #delimiter: string; + #inspectIndex = 0; + #matchIndex = 0; + #delimLPS: Uint8Array; + #disp: DelimiterDisposition; + + /** + * Constructs a new instance. + * + * @param delimiter A delimiter to split the stream by. + * @param options Options for the stream. + * + * @example Comma as a delimiter + * ```ts no-assert + * import { TextDelimiterStream } from "@std/streams/text-delimiter-stream"; + * + * const delimiterStream = new TextDelimiterStream(","); + * ``` + * + * @example Semicolon as a delimiter, and disposition set to `"suffix"` + * ```ts no-assert + * import { TextDelimiterStream } from "@std/streams/text-delimiter-stream"; + * + * const delimiterStream = new TextDelimiterStream(",", { + * disposition: "suffix", + * }); + * ``` + */ + constructor( + delimiter: string, + options: DelimiterStreamOptions = { disposition: "discard" }, + ) { + super({ + transform: (chunk, controller) => { + this.#handle(chunk, controller); + }, + flush: (controller) => { + controller.enqueue(this.#buf); + }, + }); + + this.#delimiter = delimiter; + this.#delimLPS = createLPS(new TextEncoder().encode(delimiter)); + this.#disp = options.disposition ?? "discard"; + } + + #handle( + chunk: string, + controller: TransformStreamDefaultController, + ) { + this.#buf += chunk; + let localIndex = 0; + while (this.#inspectIndex < this.#buf.length) { + if (chunk[localIndex] === this.#delimiter[this.#matchIndex]) { + this.#inspectIndex++; + localIndex++; + this.#matchIndex++; + if (this.#matchIndex === this.#delimiter.length) { + // Full match + const start = this.#inspectIndex - this.#delimiter.length; + const end = this.#disp === "suffix" ? this.#inspectIndex : start; + const copy = this.#buf.slice(0, end); + controller.enqueue(copy); + const shift = this.#disp === "prefix" ? start : this.#inspectIndex; + this.#buf = this.#buf.slice(shift); + this.#inspectIndex = this.#disp === "prefix" + ? this.#delimiter.length + : 0; + this.#matchIndex = 0; + } + } else { + if (this.#matchIndex === 0) { + this.#inspectIndex++; + localIndex++; + } else { + this.#matchIndex = this.#delimLPS[this.#matchIndex - 1]!; + } + } + } + } +} diff --git a/src/vendor/jsr.io/@std/streams/0.224.5/text_line_stream.ts b/src/vendor/jsr.io/@std/streams/0.224.5/text_line_stream.ts new file mode 100644 index 00000000000..7832a38831f --- /dev/null +++ b/src/vendor/jsr.io/@std/streams/0.224.5/text_line_stream.ts @@ -0,0 +1,142 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** Options for {@linkcode TextLineStream}. */ +export interface TextLineStreamOptions { + /** + * Allow splitting by `\r`. + * + * @default {false} + */ + allowCR?: boolean; +} + +/** + * Transform a stream into a stream where each chunk is divided by a newline, + * be it `\n` or `\r\n`. `\r` can be enabled via the `allowCR` option. + * + * If you want to split by a custom delimiter, consider using {@linkcode TextDelimiterStream}. + * + * @example JSON Lines + * ```ts + * import { TextLineStream } from "@std/streams/text-line-stream"; + * import { toTransformStream } from "@std/streams/to-transform-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream = ReadableStream.from([ + * '{"name": "Alice", "age": ', + * '30}\n{"name": "Bob", "age"', + * ": 25}\n", + * ]); + * + * type Person = { name: string; age: number }; + * + * // Split the stream by newline and parse each line as a JSON object + * const jsonStream = stream.pipeThrough(new TextLineStream()) + * .pipeThrough(toTransformStream(async function* (src) { + * for await (const chunk of src) { + * if (chunk.trim().length === 0) { + * continue; + * } + * yield JSON.parse(chunk) as Person; + * } + * })); + * + * assertEquals( + * await Array.fromAsync(jsonStream), + * [{ "name": "Alice", "age": 30 }, { "name": "Bob", "age": 25 }], + * ); + * ``` + * + * @example Allow splitting by `\r` + * + * ```ts + * import { TextLineStream } from "@std/streams/text-line-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream = ReadableStream.from([ + * "CR\rLF", + * "\nCRLF\r\ndone", + * ]).pipeThrough(new TextLineStream({ allowCR: true })); + * + * const lines = await Array.fromAsync(stream); + * + * assertEquals(lines, ["CR", "LF", "CRLF", "done"]); + * ``` + */ +export class TextLineStream extends TransformStream { + #currentLine = ""; + + /** + * Constructs a new instance. + * + * @param options Options for the stream. + * + * @example No parameters + * ```ts + * import { TextLineStream } from "@std/streams/text-line-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream = ReadableStream.from([ + * "Hello,\n", + * "world!\n", + * ]).pipeThrough(new TextLineStream()); + * + * const lines = await Array.fromAsync(stream); + * + * assertEquals(lines, ["Hello,", "world!"]); + * ``` + * + * @example Allow splitting by `\r` + * + * ```ts + * import { TextLineStream } from "@std/streams/text-line-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream = ReadableStream.from([ + * "CR\rLF", + * "\nCRLF\r\ndone", + * ]).pipeThrough(new TextLineStream({ allowCR: true })); + * + * const lines = await Array.fromAsync(stream); + * + * assertEquals(lines, ["CR", "LF", "CRLF", "done"]); + * ``` + */ + constructor(options: TextLineStreamOptions = { allowCR: false }) { + super({ + transform: (chars, controller) => { + chars = this.#currentLine + chars; + + while (true) { + const lfIndex = chars.indexOf("\n"); + const crIndex = options.allowCR ? chars.indexOf("\r") : -1; + + if ( + crIndex !== -1 && crIndex !== (chars.length - 1) && + (lfIndex === -1 || (lfIndex - 1) > crIndex) + ) { + controller.enqueue(chars.slice(0, crIndex)); + chars = chars.slice(crIndex + 1); + continue; + } + + if (lfIndex === -1) break; + + const endIndex = chars[lfIndex - 1] === "\r" ? lfIndex - 1 : lfIndex; + controller.enqueue(chars.slice(0, endIndex)); + chars = chars.slice(lfIndex + 1); + } + + this.#currentLine = chars; + }, + flush: (controller) => { + if (this.#currentLine === "") return; + const currentLine = options.allowCR && this.#currentLine.endsWith("\r") + ? this.#currentLine.slice(0, -1) + : this.#currentLine; + controller.enqueue(currentLine); + }, + }); + } +} diff --git a/src/vendor/deno.land/std@0.217.0/streams/to_array_buffer.ts b/src/vendor/jsr.io/@std/streams/0.224.5/to_array_buffer.ts similarity index 51% rename from src/vendor/deno.land/std@0.217.0/streams/to_array_buffer.ts rename to src/vendor/jsr.io/@std/streams/0.224.5/to_array_buffer.ts index d54fb9753ff..90f93909522 100644 --- a/src/vendor/deno.land/std@0.217.0/streams/to_array_buffer.ts +++ b/src/vendor/jsr.io/@std/streams/0.224.5/to_array_buffer.ts @@ -1,21 +1,26 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -import { concat } from "../bytes/concat.ts"; +import { concat } from "jsr:/@std/bytes@^1.0.0-rc.3/concat"; /** * Converts a {@linkcode ReadableStream} of {@linkcode Uint8Array}s to an - * {@linkcode ArrayBuffer}. Works the same as{@linkcode Response.arrayBuffer}. + * {@linkcode ArrayBuffer}. Works the same as {@linkcode Response.arrayBuffer}. * - * @example + * @param readableStream A `ReadableStream` of `Uint8Array`s to convert into an `ArrayBuffer`. + * @returns A promise that resolves with the `ArrayBuffer` containing all the data from the stream. + * + * @example Basic usage * ```ts - * import { toArrayBuffer } from "https://deno.land/std@$STD_VERSION/streams/to_array_buffer.ts"; + * import { toArrayBuffer } from "@std/streams/to-array-buffer"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const stream = ReadableStream.from([ * new Uint8Array([1, 2]), - * new Uint8Array([3, 4]), + * new Uint8Array([3, 4, 5]), * ]); - * await toArrayBuffer(stream); // ArrayBuffer { [Uint8Contents]: <01 02 03 04>, byteLength: 4 } + * const buf = await toArrayBuffer(stream); + * assertEquals(buf.byteLength, 5); * ``` */ export async function toArrayBuffer( diff --git a/src/vendor/jsr.io/@std/streams/0.224.5/to_blob.ts b/src/vendor/jsr.io/@std/streams/0.224.5/to_blob.ts new file mode 100644 index 00000000000..a467102d73e --- /dev/null +++ b/src/vendor/jsr.io/@std/streams/0.224.5/to_blob.ts @@ -0,0 +1,28 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Converts a {@linkcode ReadableStream} of {@linkcode Uint8Array}s to a + * {@linkcode Blob}. Works the same as {@linkcode Response.blob}. + * + * @param stream A `ReadableStream` of `Uint8Array`s to convert into a `Blob`. + * @returns A `Promise` that resolves to the `Blob`. + * + * @example Basic usage + * ```ts + * import { toBlob } from "@std/streams/to-blob"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream = ReadableStream.from([ + * new Uint8Array([1, 2]), + * new Uint8Array([3, 4, 5]), + * ]); + * const blob = await toBlob(stream); + * assertEquals(blob.size, 5); + * ``` + */ +export async function toBlob( + stream: ReadableStream, +): Promise { + return await new Response(stream).blob(); +} diff --git a/src/vendor/deno.land/std@0.217.0/streams/to_json.ts b/src/vendor/jsr.io/@std/streams/0.224.5/to_json.ts similarity index 50% rename from src/vendor/deno.land/std@0.217.0/streams/to_json.ts rename to src/vendor/jsr.io/@std/streams/0.224.5/to_json.ts index b9a54465896..4269b2b1a8f 100644 --- a/src/vendor/deno.land/std@0.217.0/streams/to_json.ts +++ b/src/vendor/jsr.io/@std/streams/0.224.5/to_json.ts @@ -8,12 +8,21 @@ import { toText } from "./to_text.ts"; * {@linkcode Uint8Array}s to an object. Works the same as * {@linkcode Response.json}. * - * @example + * @param readableStream A `ReadableStream` whose chunks compose a JSON. + * @returns A promise that resolves to the parsed JSON. + * + * @example Basic usage * ```ts - * import { toJson } from "https://deno.land/std@$STD_VERSION/streams/to_json.ts"; + * import { toJson } from "@std/streams/to-json"; + * import { assertEquals } from "@std/assert/assert-equals"; * - * const stream = ReadableStream.from([JSON.stringify({ hello: "world" })]); - * await toJson(stream); // { hello: "world" } + * const stream = ReadableStream.from([ + * "[1, true", + * ', [], {}, "hello', + * '", null]', + * ]); + * const json = await toJson(stream); + * assertEquals(json, [1, true, [], {}, "hello", null]); * ``` */ export function toJson( diff --git a/src/vendor/deno.land/std@0.217.0/streams/to_text.ts b/src/vendor/jsr.io/@std/streams/0.224.5/to_text.ts similarity index 69% rename from src/vendor/deno.land/std@0.217.0/streams/to_text.ts rename to src/vendor/jsr.io/@std/streams/0.224.5/to_text.ts index 840a77c48bf..c0f1a74033c 100644 --- a/src/vendor/deno.land/std@0.217.0/streams/to_text.ts +++ b/src/vendor/jsr.io/@std/streams/0.224.5/to_text.ts @@ -7,12 +7,16 @@ const textDecoder = new TextDecoder(); * Converts a {@linkcode ReadableSteam} of strings or {@linkcode Uint8Array}s * to a single string. Works the same as {@linkcode Response.text}. * - * @example + * @param readableStream A `ReadableStream` to convert into a `string`. + * @returns A `Promise` that resolves to the `string`. + * + * @example Basic usage * ```ts - * import { toText } from "https://deno.land/std@$STD_VERSION/streams/to_text.ts"; + * import { toText } from "@std/streams/to-text"; + * import { assertEquals } from "@std/assert/assert-equals"; * * const stream = ReadableStream.from(["Hello, ", "world!"]); - * await toText(stream); // "Hello, world!" + * assertEquals(await toText(stream), "Hello, world!"); * ``` */ export async function toText( diff --git a/src/vendor/deno.land/std@0.217.0/streams/to_transform_stream.ts b/src/vendor/jsr.io/@std/streams/0.224.5/to_transform_stream.ts similarity index 58% rename from src/vendor/deno.land/std@0.217.0/streams/to_transform_stream.ts rename to src/vendor/jsr.io/@std/streams/0.224.5/to_transform_stream.ts index 20437844d89..7cdfea8b4d8 100644 --- a/src/vendor/deno.land/std@0.217.0/streams/to_transform_stream.ts +++ b/src/vendor/jsr.io/@std/streams/0.224.5/to_transform_stream.ts @@ -4,26 +4,61 @@ /** * Convert the generator function into a {@linkcode TransformStream}. * - * @example + * @typeparam I The type of the chunks in the source stream. + * @typeparam O The type of the chunks in the transformed stream. + * @param transformer A function to transform. + * @param writableStrategy An object that optionally defines a queuing strategy for the stream. + * @param readableStrategy An object that optionally defines a queuing strategy for the stream. + * @returns A {@linkcode TransformStream} that transforms the source stream as defined by the provided transformer. + * + * @example Build a transform stream that multiplies each value by 100 * ```ts - * import { toTransformStream } from "https://deno.land/std@$STD_VERSION/streams/to_transform_stream.ts"; + * import { toTransformStream } from "@std/streams/to-transform-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; * - * const readable = ReadableStream.from([0, 1, 2]) + * const stream = ReadableStream.from([0, 1, 2]) * .pipeThrough(toTransformStream(async function* (src) { * for await (const chunk of src) { * yield chunk * 100; * } * })); * - * for await (const chunk of readable) { - * console.log(chunk); - * } - * // output: 0, 100, 200 + * assertEquals( + * await Array.fromAsync(stream), + * [0, 100, 200], + * ); * ``` * - * @param transformer A function to transform. - * @param writableStrategy An object that optionally defines a queuing strategy for the stream. - * @param readableStrategy An object that optionally defines a queuing strategy for the stream. + * @example JSON Lines + * ```ts + * import { TextLineStream } from "@std/streams/text-line-stream"; + * import { toTransformStream } from "@std/streams/to-transform-stream"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream = ReadableStream.from([ + * '{"name": "Alice", "age": ', + * '30}\n{"name": "Bob", "age"', + * ": 25}\n", + * ]); + * + * type Person = { name: string; age: number }; + * + * // Split the stream by newline and parse each line as a JSON object + * const jsonStream = stream.pipeThrough(new TextLineStream()) + * .pipeThrough(toTransformStream(async function* (src) { + * for await (const chunk of src) { + * if (chunk.trim().length === 0) { + * continue; + * } + * yield JSON.parse(chunk) as Person; + * } + * })); + * + * assertEquals( + * await Array.fromAsync(jsonStream), + * [{ "name": "Alice", "age": 30 }, { "name": "Bob", "age": 25 }], + * ); + * ``` */ export function toTransformStream( transformer: (src: ReadableStream) => Iterable | AsyncIterable, diff --git a/src/vendor/jsr.io/@std/streams/0.224.5/writable_stream_from_writer.ts b/src/vendor/jsr.io/@std/streams/0.224.5/writable_stream_from_writer.ts new file mode 100644 index 00000000000..538cf14971a --- /dev/null +++ b/src/vendor/jsr.io/@std/streams/0.224.5/writable_stream_from_writer.ts @@ -0,0 +1,47 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { Writer } from "jsr:/@std/io@^0.224.1/types"; +import { toWritableStream } from "jsr:/@std/io@^0.224.1/to-writable-stream"; + +/** + * Options for {@linkcode writableStreamFromWriter}. + * + * @deprecated This will be removed in 1.0.0. Use {@linkcode https://jsr.io/@std/io/doc/~/toWritableStream | toWritableStream} instead. + */ +export interface WritableStreamFromWriterOptions { + /** + * If the `writer` is also a `Closer`, automatically close the `writer` + * when the stream is closed, aborted, or a write error occurs. + * + * @default {true} + */ + autoClose?: boolean; +} + +/** + * Create a {@linkcode WritableStream} from a {@linkcode https://jsr.io/@std/io/doc/types/~/Writer | Writer}. + * + * @param writer A `Writer` to convert into a `WritableStream`. + * @param options Options for the `writableStreamFromWriter` function. + * @returns A `WritableStream` of `Uint8Array`s. + * + * @example Convert `Deno.stdout` into a writable stream + * ```ts no-eval no-assert + * // Note that you can directly get the writer from `Deno.stdout` by + * // `Deno.stdout.writable`. This example is just for demonstration purposes; + * // definitely not a recommended way. + * + * import { writableStreamFromWriter } from "@std/streams/writable-stream-from-writer"; + * + * const stdoutStream = writableStreamFromWriter(Deno.stdout); + * ``` + * + * @deprecated This will be removed in 1.0.0. Use {@linkcode https://jsr.io/@std/io/doc/~/toWritableStream | toWritableStream} instead. + */ +export function writableStreamFromWriter( + writer: Writer, + options: WritableStreamFromWriterOptions = {}, +): WritableStream { + return toWritableStream(writer, options); +} diff --git a/src/vendor/jsr.io/@std/streams/0.224.5/writer_from_stream_writer.ts b/src/vendor/jsr.io/@std/streams/0.224.5/writer_from_stream_writer.ts new file mode 100644 index 00000000000..9b88c3dc2a4 --- /dev/null +++ b/src/vendor/jsr.io/@std/streams/0.224.5/writer_from_stream_writer.ts @@ -0,0 +1,42 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { Writer } from "jsr:/@std/io@^0.224.1/types"; + +export type { Writer }; + +/** + * Create a {@linkcode https://jsr.io/@std/io/doc/types/~/Writer | Writer} from a {@linkcode WritableStreamDefaultWriter}. + * + * @param streamWriter A `WritableStreamDefaultWriter` to convert into a `Writer`. + * @returns A `Writer` that writes to the `WritableStreamDefaultWriter`. + * + * @example Read from a file and write to stdout using a writable stream + * ```ts no-eval no-assert + * import { copy } from "@std/io/copy"; + * import { writerFromStreamWriter } from "@std/streams/writer-from-stream-writer"; + * + * using file = await Deno.open("./README.md", { read: true }); + * + * const writableStream = new WritableStream({ + * write(chunk): void { + * console.log(chunk); + * }, + * }); + * const writer = writerFromStreamWriter(writableStream.getWriter()); + * await copy(file, writer); + * ``` + * + * @deprecated This will be removed in 1.0.0. Use {@linkcode WritableStreamDefaultWriter} directly. + */ +export function writerFromStreamWriter( + streamWriter: WritableStreamDefaultWriter, +): Writer { + return { + async write(p: Uint8Array): Promise { + await streamWriter.ready; + await streamWriter.write(p); + return p.length; + }, + }; +} diff --git a/src/vendor/jsr.io/@std/streams/0.224.5/zip_readable_streams.ts b/src/vendor/jsr.io/@std/streams/0.224.5/zip_readable_streams.ts new file mode 100644 index 00000000000..0fc890aebb3 --- /dev/null +++ b/src/vendor/jsr.io/@std/streams/0.224.5/zip_readable_streams.ts @@ -0,0 +1,102 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Merge multiple streams into a single one, taking order into account, and + * each stream will wait for a chunk to enqueue before the next stream can + * append another chunk. + * + * If a stream ends before other ones, the others will continue adding data in + * order, and the finished one will not add any more data. If you want to cancel + * the other streams when one of them ends, use {@linkcode earlyZipReadableStreams}. + * + * @typeparam T The type of the chunks in the input/output streams. + * @returns A `ReadableStream` that will emit the zipped chunks. + * + * @example Zip 2 streams with the same length + * ```ts + * import { zipReadableStreams } from "@std/streams/zip-readable-streams"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream1 = ReadableStream.from(["1", "2", "3"]); + * const stream2 = ReadableStream.from(["a", "b", "c"]); + * const zippedStream = zipReadableStreams(stream1, stream2); + * + * assertEquals( + * await Array.fromAsync(zippedStream), + * ["1", "a", "2", "b", "3", "c"], + * ); + * ``` + * + * @example Zip 2 streams with different length (first one is shorter) + * ```ts + * import { zipReadableStreams } from "@std/streams/zip-readable-streams"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream1 = ReadableStream.from(["1", "2"]); + * const stream2 = ReadableStream.from(["a", "b", "c", "d"]); + * const zippedStream = zipReadableStreams(stream1, stream2); + * + * assertEquals( + * await Array.fromAsync(zippedStream), + * ["1", "a", "2", "b", "c", "d"], + * ); + * ``` + * + * @example Zip 2 streams with different length (first one is longer) + * ```ts + * import { zipReadableStreams } from "@std/streams/zip-readable-streams"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream1 = ReadableStream.from(["1", "2", "3", "4"]); + * const stream2 = ReadableStream.from(["a", "b"]); + * const zippedStream = zipReadableStreams(stream1, stream2); + * + * assertEquals( + * await Array.fromAsync(zippedStream), + * ["1", "a", "2", "b", "3", "4"], + * ); + * ``` + * + * @example Zip 3 streams + * ```ts + * import { zipReadableStreams } from "@std/streams/zip-readable-streams"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const stream1 = ReadableStream.from(["1"]); + * const stream2 = ReadableStream.from(["a", "b"]); + * const stream3 = ReadableStream.from(["A", "B", "C"]); + * const zippedStream = zipReadableStreams(stream1, stream2, stream3); + * + * assertEquals( + * await Array.fromAsync(zippedStream), + * ["1", "a", "A", "b", "B", "C"], + * ); + * ``` + */ +export function zipReadableStreams( + ...streams: ReadableStream[] +): ReadableStream { + const readers = new Set(streams.map((s) => s.getReader())); + return new ReadableStream({ + async start(controller) { + try { + let resolved = 0; + while (resolved !== streams.length) { + for (const reader of readers) { + const { value, done } = await reader.read(); + if (!done) { + controller.enqueue(value!); + } else { + resolved++; + readers.delete(reader); + } + } + } + controller.close(); + } catch (e) { + controller.error(e); + } + }, + }); +} diff --git a/src/vendor/deno.land/std@0.217.0/testing/asserts.ts b/src/vendor/jsr.io/@std/testing/0.224.0/asserts.ts similarity index 67% rename from src/vendor/deno.land/std@0.217.0/testing/asserts.ts rename to src/vendor/jsr.io/@std/testing/0.224.0/asserts.ts index f9a6a6b0876..4674bf29393 100644 --- a/src/vendor/deno.land/std@0.217.0/testing/asserts.ts +++ b/src/vendor/jsr.io/@std/testing/0.224.0/asserts.ts @@ -8,11 +8,11 @@ * This module is browser compatible, but do not rely on good formatting of * values for AssertionError messages in browsers. * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/mod.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/mod.ts} instead. * * @module */ -import * as asserts from "../assert/mod.ts"; +import * as asserts from "jsr:@std/assert@^0.224.0"; /** * Make an assertion that `actual` and `expected` are almost equal numbers @@ -22,7 +22,7 @@ import * as asserts from "../assert/mod.ts"; * * @example * ```ts - * import { assertAlmostEquals } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertAlmostEquals } from "@std/testing/asserts"; * * assertAlmostEquals(0.01, 0.02, 0.1); // Doesn't throw * assertAlmostEquals(0.01, 0.02); // Throws @@ -30,7 +30,7 @@ import * as asserts from "../assert/mod.ts"; * assertAlmostEquals(0.1 + 0.2, 0.3, 1e-17); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_almost_equals.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_almost_equals.ts} instead. */ export function assertAlmostEquals( actual: number, @@ -44,7 +44,7 @@ export function assertAlmostEquals( /** * An array-like object (`Array`, `Uint8Array`, `NodeList`, etc.) that is not a string. * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_array_includes.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_array_includes.ts} instead. */ export type ArrayLikeArg = ArrayLike & object; @@ -57,13 +57,13 @@ export type ArrayLikeArg = ArrayLike & object; * * @example * ```ts - * import { assertArrayIncludes } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertArrayIncludes } from "@std/testing/asserts"; * * assertArrayIncludes([1, 2], [2]); // Doesn't throw * assertArrayIncludes([1, 2], [3]); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_array_includes.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_array_includes.ts} instead. */ export function assertArrayIncludes( actual: ArrayLikeArg, @@ -82,7 +82,7 @@ export function assertArrayIncludes( * * @example * ```ts - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertEquals } from "@std/testing/asserts"; * * assertEquals("world", "world"); // Doesn't throw * assertEquals("hello", "world"); // Throws @@ -90,7 +90,7 @@ export function assertArrayIncludes( * * Note: formatter option is experimental and may be removed in the future. * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_equals.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_equals.ts} instead. */ export function assertEquals( actual: T, @@ -107,13 +107,13 @@ export function assertEquals( * * @example * ```ts - * import { assertExists } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertExists } from "@std/testing/asserts"; * * assertExists("something"); // Doesn't throw * assertExists(undefined); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_exists.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_exists.ts} instead. */ export function assertExists( actual: T, @@ -125,7 +125,7 @@ export function assertExists( /** * Assertion condition for {@linkcode assertFalse}. * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_false.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_false.ts} instead. */ export type Falsy = false | 0 | 0n | "" | null | undefined; @@ -134,13 +134,13 @@ export type Falsy = false | 0 | 0n | "" | null | undefined; * * @example * ```ts - * import { assertFalse } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertFalse } from "@std/testing/asserts"; * * assertFalse(false); // Doesn't throw * assertFalse(true); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_false.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_false.ts} instead. */ export function assertFalse(expr: unknown, msg = ""): asserts expr is Falsy { asserts.assertFalse(expr, msg); @@ -152,14 +152,14 @@ export function assertFalse(expr: unknown, msg = ""): asserts expr is Falsy { * * @example * ```ts - * import { assertGreaterOrEqual } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertGreaterOrEqual } from "@std/testing/asserts"; * * assertGreaterOrEqual(2, 1); // Doesn't throw * assertGreaterOrEqual(1, 1); // Doesn't throw * assertGreaterOrEqual(0, 1); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_greater_or_equal.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_greater_or_equal.ts} instead. */ export function assertGreaterOrEqual( actual: T, @@ -175,14 +175,14 @@ export function assertGreaterOrEqual( * * @example * ```ts - * import { assertGreater } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertGreater } from "@std/testing/asserts"; * * assertGreater(2, 1); // Doesn't throw * assertGreater(1, 1); // Throws * assertGreater(0, 1); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_greater.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_greater.ts} instead. */ export function assertGreater(actual: T, expected: T, msg?: string) { asserts.assertGreater(actual, expected, msg); @@ -191,13 +191,13 @@ export function assertGreater(actual: T, expected: T, msg?: string) { /** * Any constructor * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_instance_of.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_instance_of.ts} instead. */ // deno-lint-ignore no-explicit-any export type AnyConstructor = new (...args: any[]) => any; /** Gets constructor type * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_instance_of.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_instance_of.ts} instead. */ export type GetConstructorType = T extends // deno-lint-ignore no-explicit-any new (...args: any) => infer C ? C @@ -209,13 +209,13 @@ new (...args: any) => infer C ? C * * @example * ```ts - * import { assertInstanceOf } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertInstanceOf } from "@std/testing/asserts"; * * assertInstanceOf(new Date(), Date); // Doesn't throw * assertInstanceOf(new Date(), Number); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_instance_of.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_instance_of.ts} instead. */ export function assertInstanceOf( actual: unknown, @@ -233,7 +233,7 @@ export function assertInstanceOf( * * @example * ```ts - * import { assertIsError } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertIsError } from "@std/testing/asserts"; * * assertIsError(null); // Throws * assertIsError(new RangeError("Out of range")); // Doesn't throw @@ -242,7 +242,7 @@ export function assertInstanceOf( * assertIsError(new RangeError("Out of range"), SyntaxError, "Within range"); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_is_error.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_is_error.ts} instead. */ export function assertIsError( error: unknown, @@ -260,14 +260,14 @@ export function assertIsError( * * @example * ```ts - * import { assertLessOrEqual } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertLessOrEqual } from "@std/testing/asserts"; * * assertLessOrEqual(1, 2); // Doesn't throw * assertLessOrEqual(1, 1); // Doesn't throw * assertLessOrEqual(1, 0); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_less_or_equal.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_less_or_equal.ts} instead. */ export function assertLessOrEqual( actual: T, @@ -283,13 +283,13 @@ export function assertLessOrEqual( * * @example * ```ts - * import { assertLess } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertLess } from "@std/testing/asserts"; * * assertLess(1, 2); // Doesn't throw * assertLess(2, 1); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_less.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_less.ts} instead. */ export function assertLess(actual: T, expected: T, msg?: string) { asserts.assertLess(actual, expected, msg); @@ -301,13 +301,13 @@ export function assertLess(actual: T, expected: T, msg?: string) { * * @example * ```ts - * import { assertMatch } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertMatch } from "@std/testing/asserts"; * * assertMatch("Raptor", RegExp(/Raptor/)); // Doesn't throw * assertMatch("Denosaurus", RegExp(/Raptor/)); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_match.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_match.ts} instead. */ export function assertMatch( actual: string, @@ -325,13 +325,13 @@ export function assertMatch( * * @example * ```ts - * import { assertNotEquals } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertNotEquals } from "@std/testing/asserts"; * * assertNotEquals(1, 2); // Doesn't throw * assertNotEquals(1, 1); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_not_equals.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_not_equals.ts} instead. */ export function assertNotEquals(actual: T, expected: T, msg?: string) { asserts.assertNotEquals(actual, expected, msg); @@ -343,13 +343,13 @@ export function assertNotEquals(actual: T, expected: T, msg?: string) { * * @example * ```ts - * import { assertNotInstanceOf } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertNotInstanceOf } from "@std/testing/asserts"; * * assertNotInstanceOf(new Date(), Number); // Doesn't throw * assertNotInstanceOf(new Date(), Date); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_not_instance_of.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_not_instance_of.ts} instead. */ export function assertNotInstanceOf( actual: A, @@ -366,13 +366,13 @@ export function assertNotInstanceOf( * * @example * ```ts - * import { assertNotMatch } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertNotMatch } from "@std/testing/asserts"; * * assertNotMatch("Denosaurus", RegExp(/Raptor/)); // Doesn't throw * assertNotMatch("Raptor", RegExp(/Raptor/)); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_not_match.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_not_match.ts} instead. */ export function assertNotMatch( actual: string, @@ -388,13 +388,13 @@ export function assertNotMatch( * * @example * ```ts - * import { assertNotStrictEquals } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertNotStrictEquals } from "@std/testing/asserts"; * * assertNotStrictEquals(1, 1); // Doesn't throw * assertNotStrictEquals(1, 2); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_not_strict_equals.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_not_strict_equals.ts} instead. */ export function assertNotStrictEquals( actual: T, @@ -410,13 +410,13 @@ export function assertNotStrictEquals( * * @example * ```ts - * import { assertObjectMatch } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertObjectMatch } from "@std/testing/asserts"; * * assertObjectMatch({ foo: "bar" }, { foo: "bar" }); // Doesn't throw * assertObjectMatch({ foo: "bar" }, { foo: "baz" }); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_object_match.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_object_match.ts} instead. */ export function assertObjectMatch( // deno-lint-ignore no-explicit-any @@ -432,13 +432,13 @@ export function assertObjectMatch( * * @example * ```ts - * import { assertRejects } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertRejects } from "@std/testing/asserts"; * * await assertRejects(async () => Promise.reject(new Error())); // Doesn't throw * await assertRejects(async () => console.log("Hello world")); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_rejects.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_rejects.ts} instead. */ export function assertRejects( fn: () => PromiseLike, @@ -451,13 +451,13 @@ export function assertRejects( * * @example * ```ts - * import { assertRejects } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertRejects } from "@std/testing/asserts"; * * await assertRejects(async () => Promise.reject(new Error()), Error); // Doesn't throw * await assertRejects(async () => Promise.reject(new Error()), SyntaxError); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_rejects.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_rejects.ts} instead. */ export function assertRejects( fn: () => PromiseLike, @@ -490,7 +490,7 @@ export async function assertRejects( * * @example * ```ts - * import { assertStrictEquals } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertStrictEquals } from "@std/testing/asserts"; * * const a = {}; * const b = a; @@ -501,7 +501,7 @@ export async function assertRejects( * assertStrictEquals(c, d); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_strict_equals.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_strict_equals.ts} instead. */ export function assertStrictEquals( actual: unknown, @@ -517,13 +517,13 @@ export function assertStrictEquals( * * @example * ```ts - * import { assertStringIncludes } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertStringIncludes } from "@std/testing/asserts"; * * assertStringIncludes("Hello", "ello"); // Doesn't throw * assertStringIncludes("Hello", "world"); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_string_includes.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_string_includes.ts} instead. */ export function assertStringIncludes( actual: string, @@ -539,13 +539,13 @@ export function assertStringIncludes( * * @example * ```ts - * import { assertThrows } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertThrows } from "@std/testing/asserts"; * * assertThrows(() => { throw new TypeError("hello world!"); }); // Doesn't throw * assertThrows(() => console.log("hello world!")); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_throws.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_throws.ts} instead. */ export function assertThrows( fn: () => unknown, @@ -558,13 +558,13 @@ export function assertThrows( * * @example * ```ts - * import { assertThrows } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assertThrows } from "@std/testing/asserts"; * * assertThrows(() => { throw new TypeError("hello world!"); }, TypeError); // Doesn't throw * assertThrows(() => { throw new TypeError("hello world!"); }, RangeError); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert_throws.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert_throws.ts} instead. */ export function assertThrows( fn: () => unknown, @@ -596,13 +596,13 @@ export function assertThrows( * * @example * ```ts - * import { assert } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { assert } from "@std/testing/asserts"; * * assert("hello".includes("ello")); // Doesn't throw * assert("hello".includes("world")); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assert.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assert.ts} instead. */ export function assert(expr: unknown, msg = ""): asserts expr { asserts.assert(expr, msg); @@ -613,12 +613,12 @@ export function assert(expr: unknown, msg = ""): asserts expr { * * @example * ```ts - * import { AssertionError } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { AssertionError } from "@std/testing/asserts"; * * throw new AssertionError("Assertion failed"); * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/assertion_error.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/assertion_error.ts} instead. */ export class AssertionError extends Error { /** Constructs a new instance. */ @@ -635,13 +635,13 @@ export class AssertionError extends Error { * * @example * ```ts - * import { equal } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { equal } from "@std/testing/asserts"; * * equal({ foo: "bar" }, { foo: "bar" }); // Returns `true` * equal({ foo: "bar" }, { foo: "baz" }); // Returns `false * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/equal.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/equal.ts} instead. */ export function equal(c: unknown, d: unknown): boolean { return asserts.equal(c, d); @@ -652,12 +652,12 @@ export function equal(c: unknown, d: unknown): boolean { * * @example * ```ts - * import { fail } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { fail } from "@std/testing/asserts"; * * fail("Deliberately failed!"); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/fail.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/fail.ts} instead. */ export function fail(msg?: string): never { asserts.fail(msg); @@ -668,12 +668,12 @@ export function fail(msg?: string): never { * * @example * ```ts - * import { unimplemented } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { unimplemented } from "@std/testing/asserts"; * * unimplemented(); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/unimplemented.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/unimplemented.ts} instead. */ export function unimplemented(msg?: string): never { asserts.unimplemented(msg); @@ -684,12 +684,12 @@ export function unimplemented(msg?: string): never { * * @example * ```ts - * import { unreachable } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; + * import { unreachable } from "@std/testing/asserts"; * * unreachable(); // Throws * ``` * - * @deprecated (will be removed after 1.0.0) Import from {@link https://deno.land/std/assert/unreachable.ts} instead. + * @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/assert/unreachable.ts} instead. */ export function unreachable(): never { asserts.unreachable(); diff --git a/src/vendor/deno.land/std@0.217.0/toml/_parser.ts b/src/vendor/jsr.io/@std/toml/0.224.1/_parser.ts similarity index 99% rename from src/vendor/deno.land/std@0.217.0/toml/_parser.ts rename to src/vendor/jsr.io/@std/toml/0.224.1/_parser.ts index 78dbfda7215..cdd8fd43373 100644 --- a/src/vendor/deno.land/std@0.217.0/toml/_parser.ts +++ b/src/vendor/jsr.io/@std/toml/0.224.1/_parser.ts @@ -1,7 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. -import { deepMerge } from "../collections/deep_merge.ts"; +import { deepMerge } from "jsr:/@std/collections@^1.0.0-rc.1/deep-merge"; // --------------------------- // Interfaces and base classes diff --git a/src/vendor/deno.land/std@0.217.0/toml/mod.ts b/src/vendor/jsr.io/@std/toml/0.224.1/mod.ts similarity index 84% rename from src/vendor/deno.land/std@0.217.0/toml/mod.ts rename to src/vendor/jsr.io/@std/toml/0.224.1/mod.ts index 500f5788484..a38ce5a5e19 100644 --- a/src/vendor/deno.land/std@0.217.0/toml/mod.ts +++ b/src/vendor/jsr.io/@std/toml/0.224.1/mod.ts @@ -90,12 +90,10 @@ * * This module is browser compatible. * - * @example * ```ts - * import { - * parse, - * stringify, - * } from "https://deno.land/std@$STD_VERSION/toml/mod.ts"; + * import { parse, stringify } from "@std/toml"; + * import { assertEquals } from "@std/assert/assert-equals"; + * * const obj = { * bin: [ * { name: "deno", path: "cli/main.rs" }, @@ -103,33 +101,24 @@ * ], * nib: [{ name: "node", path: "not_found" }], * }; - * const tomlString = stringify(obj); - * console.log(tomlString); * - * // => - * // [[bin]] - * // name = "deno" - * // path = "cli/main.rs" + * const tomlString = stringify(obj); + * assertEquals(tomlString, ` + * [[bin]] + * name = "deno" + * path = "cli/main.rs" * - * // [[bin]] - * // name = "deno_core" - * // path = "src/foo.rs" + * [[bin]] + * name = "deno_core" + * path = "src/foo.rs" * - * // [[nib]] - * // name = "node" - * // path = "not_found" + * [[nib]] + * name = "node" + * path = "not_found" + * `); * * const tomlObject = parse(tomlString); - * console.log(tomlObject); - * - * // => - * // { - * // bin: [ - * // { name: "deno", path: "cli/main.rs" }, - * // { name: "deno_core", path: "src/foo.rs" } - * // ], - * // nib: [ { name: "node", path: "not_found" } ] - * // } + * assertEquals(tomlObject, obj); * ``` * * @module diff --git a/src/vendor/jsr.io/@std/toml/0.224.1/parse.ts b/src/vendor/jsr.io/@std/toml/0.224.1/parse.ts new file mode 100644 index 00000000000..134dfc4c1e9 --- /dev/null +++ b/src/vendor/jsr.io/@std/toml/0.224.1/parse.ts @@ -0,0 +1,26 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { ParserFactory, Toml } from "./_parser.ts"; + +/** + * Parse parses TOML string into an object. + * + * @example Decode TOML string + * ```ts + * import { parse } from "@std/toml/parse"; + * import { assertEquals } from "@std/assert/assert-equals" + * + * const tomlString = `title = "TOML Example" + * [owner] + * name = "Alice" + * bio = "Alice is a programmer."`; + * + * const obj = parse(tomlString); + * assertEquals(obj, { title: "TOML Example", owner: { name: "Alice", bio: "Alice is a programmer." } }); + * ``` + * @param tomlString TOML string to be parsed. + * @returns The parsed JS object. + */ +export const parse: (tomlString: string) => Record = + ParserFactory(Toml); diff --git a/src/vendor/deno.land/std@0.217.0/toml/stringify.ts b/src/vendor/jsr.io/@std/toml/0.224.1/stringify.ts similarity index 94% rename from src/vendor/deno.land/std@0.217.0/toml/stringify.ts rename to src/vendor/jsr.io/@std/toml/0.224.1/stringify.ts index 92c41b89359..5c38604f15d 100644 --- a/src/vendor/deno.land/std@0.217.0/toml/stringify.ts +++ b/src/vendor/jsr.io/@std/toml/0.224.1/stringify.ts @@ -260,9 +260,25 @@ class Dumper { /** * Stringify dumps source object into TOML string and returns it. - * @param srcObj - * @param [fmtOptions] format options - * @param [fmtOptions.keyAlignment] whether to align keys + * + * @example Stringify an object + * ```ts + * import { stringify } from "@std/toml/stringify"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const obj = { + * title: "TOML Example", + * owner: { + * name: "Bob", + * bio: "Bob is a cool guy", + * } + * }; + * const tomlString = stringify(obj); + * assertEquals(tomlString, `title = "TOML Example"\n\n[owner]\nname = "Bob"\nbio = "Bob is a cool guy"\n`); + * ``` + * @param srcObj Source object + * @param fmtOptions format options + * @returns TOML string */ export function stringify( srcObj: Record, diff --git a/src/vendor/jsr.io/@std/toml/1.0.1/_parser.ts b/src/vendor/jsr.io/@std/toml/1.0.1/_parser.ts new file mode 100644 index 00000000000..f989213b6e8 --- /dev/null +++ b/src/vendor/jsr.io/@std/toml/1.0.1/_parser.ts @@ -0,0 +1,805 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { deepMerge } from "jsr:@std/collections@^1.0.5/deep-merge"; + +// --------------------------- +// Interfaces and base classes +// --------------------------- + +interface Success { + ok: true; + body: T; +} +interface Failure { + ok: false; +} +type ParseResult = Success | Failure; + +type ParserComponent = (scanner: Scanner) => ParseResult; + +type BlockParseResultBody = { + type: "Block"; + value: Record; +} | { + type: "Table"; + key: string[]; + value: Record; +} | { + type: "TableArray"; + key: string[]; + value: Record; +}; + +export class Scanner { + #whitespace = /[ \t]/; + #position = 0; + #source: string; + + constructor(source: string) { + this.#source = source; + } + + /** + * Get current character + * @param index - relative index from current position + */ + char(index = 0) { + return this.#source[this.#position + index] ?? ""; + } + + /** + * Get sliced string + * @param start - start position relative from current position + * @param end - end position relative from current position + */ + slice(start: number, end: number): string { + return this.#source.slice(this.#position + start, this.#position + end); + } + + /** + * Move position to next + */ + next(count?: number) { + if (typeof count === "number") { + for (let i = 0; i < count; i++) { + this.#position++; + } + } else { + this.#position++; + } + } + + /** + * Move position until current char is not a whitespace, EOL, or comment. + * @param options.inline - skip only whitespaces + */ + nextUntilChar( + options: { inline?: boolean; comment?: boolean } = { comment: true }, + ) { + if (options.inline) { + while (this.#whitespace.test(this.char()) && !this.eof()) { + this.next(); + } + } else { + while (!this.eof()) { + const char = this.char(); + if (this.#whitespace.test(char) || this.isCurrentCharEOL()) { + this.next(); + } else if (options.comment && this.char() === "#") { + // entering comment + while (!this.isCurrentCharEOL() && !this.eof()) { + this.next(); + } + } else { + break; + } + } + } + // Invalid if current char is other kinds of whitespace + if (!this.isCurrentCharEOL() && /\s/.test(this.char())) { + const escaped = "\\u" + this.char().charCodeAt(0).toString(16); + const position = this.#position; + throw new SyntaxError( + `Cannot parse the TOML: It contains invalid whitespace at position '${position}': \`${escaped}\``, + ); + } + } + + /** + * Position reached EOF or not + */ + eof() { + return this.position() >= this.#source.length; + } + + /** + * Get current position + */ + position() { + return this.#position; + } + + isCurrentCharEOL() { + return this.char() === "\n" || this.slice(0, 2) === "\r\n"; + } +} + +// ----------------------- +// Utilities +// ----------------------- + +function success(body: T): Success { + return { ok: true, body }; +} +function failure(): Failure { + return { ok: false }; +} + +export function unflat( + keys: string[], + values: unknown = {}, + cObj?: unknown, +): Record { + const out: Record = {}; + if (keys.length === 0) { + return cObj as Record; + } + if (!cObj) cObj = values; + const key: string | undefined = keys[keys.length - 1]; + if (typeof key === "string") out[key] = cObj; + return unflat(keys.slice(0, -1), values, out); +} +export function deepAssignWithTable(target: Record, table: { + type: "Table" | "TableArray"; + key: string[]; + value: Record; +}) { + if (table.key.length === 0 || table.key[0] == null) { + throw new Error( + "Cannot parse the TOML: key length is not a positive number", + ); + } + const value = target[table.key[0]]; + + if (typeof value === "undefined") { + Object.assign( + target, + unflat( + table.key, + table.type === "Table" ? table.value : [table.value], + ), + ); + } else if (Array.isArray(value)) { + if (table.type === "TableArray" && table.key.length === 1) { + value.push(table.value); + } else { + const last = value[value.length - 1]; + deepAssignWithTable(last, { + type: table.type, + key: table.key.slice(1), + value: table.value, + }); + } + } else if (typeof value === "object" && value !== null) { + deepAssignWithTable(value as Record, { + type: table.type, + key: table.key.slice(1), + value: table.value, + }); + } else { + throw new Error("Unexpected assign"); + } +} + +// --------------------------------- +// Parser combinators and generators +// --------------------------------- + +function or(parsers: ParserComponent[]): ParserComponent { + return (scanner: Scanner): ParseResult => { + for (const parse of parsers) { + const result = parse(scanner); + if (result.ok) return result; + } + return failure(); + }; +} + +function join( + parser: ParserComponent, + separator: string, +): ParserComponent { + const Separator = character(separator); + return (scanner: Scanner): ParseResult => { + const first = parser(scanner); + if (!first.ok) return failure(); + const out: T[] = [first.body]; + while (!scanner.eof()) { + if (!Separator(scanner).ok) break; + const result = parser(scanner); + if (!result.ok) { + throw new SyntaxError(`Invalid token after "${separator}"`); + } + out.push(result.body); + } + return success(out); + }; +} + +function kv( + keyParser: ParserComponent, + separator: string, + valueParser: ParserComponent, +): ParserComponent<{ [key: string]: unknown }> { + const Separator = character(separator); + return (scanner: Scanner): ParseResult<{ [key: string]: unknown }> => { + const key = keyParser(scanner); + if (!key.ok) return failure(); + const sep = Separator(scanner); + if (!sep.ok) { + throw new SyntaxError(`key/value pair doesn't have "${separator}"`); + } + const value = valueParser(scanner); + if (!value.ok) { + throw new SyntaxError( + `Value of key/value pair is invalid data format`, + ); + } + return success(unflat(key.body, value.body)); + }; +} + +function merge( + parser: ParserComponent, +): ParserComponent> { + return (scanner: Scanner): ParseResult> => { + const result = parser(scanner); + if (!result.ok) return failure(); + let body = {}; + for (const record of result.body) { + if (typeof body === "object" && body !== null) { + // deno-lint-ignore no-explicit-any + body = deepMerge(body, record as Record); + } + } + return success(body); + }; +} + +function repeat( + parser: ParserComponent, +): ParserComponent { + return (scanner: Scanner) => { + const body: T[] = []; + while (!scanner.eof()) { + const result = parser(scanner); + if (!result.ok) break; + body.push(result.body); + scanner.nextUntilChar(); + } + if (body.length === 0) return failure(); + return success(body); + }; +} + +function surround( + left: string, + parser: ParserComponent, + right: string, +): ParserComponent { + const Left = character(left); + const Right = character(right); + return (scanner: Scanner) => { + if (!Left(scanner).ok) { + return failure(); + } + const result = parser(scanner); + if (!result.ok) { + throw new SyntaxError(`Invalid token after "${left}"`); + } + if (!Right(scanner).ok) { + throw new SyntaxError( + `Not closed by "${right}" after started with "${left}"`, + ); + } + return success(result.body); + }; +} + +function character(str: string) { + return (scanner: Scanner): ParseResult => { + scanner.nextUntilChar({ inline: true }); + if (scanner.slice(0, str.length) !== str) return failure(); + scanner.next(str.length); + scanner.nextUntilChar({ inline: true }); + return success(undefined); + }; +} + +// ----------------------- +// Parser components +// ----------------------- + +const BARE_KEY_REGEXP = /[A-Za-z0-9_-]/; +const FLOAT_REGEXP = /[0-9_\.e+\-]/i; +const END_OF_VALUE_REGEXP = /[ \t\r\n#,}\]]/; + +export function bareKey(scanner: Scanner): ParseResult { + scanner.nextUntilChar({ inline: true }); + if (!scanner.char() || !BARE_KEY_REGEXP.test(scanner.char())) { + return failure(); + } + const acc: string[] = []; + while (scanner.char() && BARE_KEY_REGEXP.test(scanner.char())) { + acc.push(scanner.char()); + scanner.next(); + } + const key = acc.join(""); + return success(key); +} + +function escapeSequence(scanner: Scanner): ParseResult { + if (scanner.char() !== "\\") return failure(); + scanner.next(); + // See https://toml.io/en/v1.0.0-rc.3#string + switch (scanner.char()) { + case "b": + scanner.next(); + return success("\b"); + case "t": + scanner.next(); + return success("\t"); + case "n": + scanner.next(); + return success("\n"); + case "f": + scanner.next(); + return success("\f"); + case "r": + scanner.next(); + return success("\r"); + case "u": + case "U": { + // Unicode character + const codePointLen = scanner.char() === "u" ? 4 : 6; + const codePoint = parseInt( + "0x" + scanner.slice(1, 1 + codePointLen), + 16, + ); + const str = String.fromCodePoint(codePoint); + scanner.next(codePointLen + 1); + return success(str); + } + case '"': + scanner.next(); + return success('"'); + case "\\": + scanner.next(); + return success("\\"); + default: + throw new SyntaxError( + `Invalid escape sequence: \\${scanner.char()}`, + ); + } +} + +export function basicString(scanner: Scanner): ParseResult { + scanner.nextUntilChar({ inline: true }); + if (scanner.char() !== '"') return failure(); + scanner.next(); + const acc = []; + while (scanner.char() !== '"' && !scanner.eof()) { + if (scanner.char() === "\n") { + throw new SyntaxError("Single-line string cannot contain EOL"); + } + const escapedChar = escapeSequence(scanner); + if (escapedChar.ok) { + acc.push(escapedChar.body); + } else { + acc.push(scanner.char()); + scanner.next(); + } + } + if (scanner.eof()) { + throw new SyntaxError( + `Single-line string is not closed:\n${acc.join("")}`, + ); + } + scanner.next(); // skip last '"" + return success(acc.join("")); +} + +export function literalString(scanner: Scanner): ParseResult { + scanner.nextUntilChar({ inline: true }); + if (scanner.char() !== "'") return failure(); + scanner.next(); + const acc: string[] = []; + while (scanner.char() !== "'" && !scanner.eof()) { + if (scanner.char() === "\n") { + throw new SyntaxError("Single-line string cannot contain EOL"); + } + acc.push(scanner.char()); + scanner.next(); + } + if (scanner.eof()) { + throw new SyntaxError( + `Single-line string is not closed:\n${acc.join("")}`, + ); + } + scanner.next(); // skip last "'" + return success(acc.join("")); +} + +export function multilineBasicString( + scanner: Scanner, +): ParseResult { + scanner.nextUntilChar({ inline: true }); + if (scanner.slice(0, 3) !== '"""') return failure(); + scanner.next(3); + if (scanner.char() === "\n") { + // The first newline (LF) is trimmed + scanner.next(); + } else if (scanner.slice(0, 2) === "\r\n") { + // The first newline (CRLF) is trimmed + scanner.next(2); + } + const acc: string[] = []; + while (scanner.slice(0, 3) !== '"""' && !scanner.eof()) { + // line ending backslash + if (scanner.slice(0, 2) === "\\\n") { + scanner.next(); + scanner.nextUntilChar({ comment: false }); + continue; + } else if (scanner.slice(0, 3) === "\\\r\n") { + scanner.next(); + scanner.nextUntilChar({ comment: false }); + continue; + } + const escapedChar = escapeSequence(scanner); + if (escapedChar.ok) { + acc.push(escapedChar.body); + } else { + acc.push(scanner.char()); + scanner.next(); + } + } + + if (scanner.eof()) { + throw new SyntaxError( + `Multi-line string is not closed:\n${acc.join("")}`, + ); + } + // if ends with 4 `"`, push the fist `"` to string + if (scanner.char(3) === '"') { + acc.push('"'); + scanner.next(); + } + scanner.next(3); // skip last '"""" + return success(acc.join("")); +} + +export function multilineLiteralString( + scanner: Scanner, +): ParseResult { + scanner.nextUntilChar({ inline: true }); + if (scanner.slice(0, 3) !== "'''") return failure(); + scanner.next(3); + if (scanner.char() === "\n") { + // The first newline (LF) is trimmed + scanner.next(); + } else if (scanner.slice(0, 2) === "\r\n") { + // The first newline (CRLF) is trimmed + scanner.next(2); + } + const acc: string[] = []; + while (scanner.slice(0, 3) !== "'''" && !scanner.eof()) { + acc.push(scanner.char()); + scanner.next(); + } + if (scanner.eof()) { + throw new SyntaxError( + `Multi-line string is not closed:\n${acc.join("")}`, + ); + } + // if ends with 4 `'`, push the fist `'` to string + if (scanner.char(3) === "'") { + acc.push("'"); + scanner.next(); + } + scanner.next(3); // skip last "'''" + return success(acc.join("")); +} + +const symbolPairs: [string, unknown][] = [ + ["true", true], + ["false", false], + ["inf", Infinity], + ["+inf", Infinity], + ["-inf", -Infinity], + ["nan", NaN], + ["+nan", NaN], + ["-nan", NaN], +]; +export function symbols(scanner: Scanner): ParseResult { + scanner.nextUntilChar({ inline: true }); + const found = symbolPairs.find(([str]) => + scanner.slice(0, str.length) === str + ); + if (!found) return failure(); + const [str, value] = found; + scanner.next(str.length); + return success(value); +} + +export const dottedKey = join(or([bareKey, basicString, literalString]), "."); + +export function integer(scanner: Scanner): ParseResult { + scanner.nextUntilChar({ inline: true }); + + // If binary / octal / hex + const first2 = scanner.slice(0, 2); + if (first2.length === 2 && /0(?:x|o|b)/i.test(first2)) { + scanner.next(2); + const acc = [first2]; + while (/[0-9a-f_]/i.test(scanner.char()) && !scanner.eof()) { + acc.push(scanner.char()); + scanner.next(); + } + if (acc.length === 1) return failure(); + return success(acc.join("")); + } + + const acc = []; + if (/[+-]/.test(scanner.char())) { + acc.push(scanner.char()); + scanner.next(); + } + while (/[0-9_]/.test(scanner.char()) && !scanner.eof()) { + acc.push(scanner.char()); + scanner.next(); + } + + if (acc.length === 0 || (acc.length === 1 && /[+-]/.test(acc[0]!))) { + return failure(); + } + + const int = parseInt(acc.filter((char) => char !== "_").join("")); + return success(int); +} + +export function float(scanner: Scanner): ParseResult { + scanner.nextUntilChar({ inline: true }); + + // lookahead validation is needed for integer value is similar to float + let position = 0; + while ( + scanner.char(position) && + !END_OF_VALUE_REGEXP.test(scanner.char(position)) + ) { + if (!FLOAT_REGEXP.test(scanner.char(position))) return failure(); + position++; + } + + const acc = []; + if (/[+-]/.test(scanner.char())) { + acc.push(scanner.char()); + scanner.next(); + } + while (FLOAT_REGEXP.test(scanner.char()) && !scanner.eof()) { + acc.push(scanner.char()); + scanner.next(); + } + + if (acc.length === 0) return failure(); + const float = parseFloat(acc.filter((char) => char !== "_").join("")); + if (isNaN(float)) return failure(); + + return success(float); +} + +export function dateTime(scanner: Scanner): ParseResult { + scanner.nextUntilChar({ inline: true }); + + let dateStr = scanner.slice(0, 10); + // example: 1979-05-27 + if (!/^\d{4}-\d{2}-\d{2}/.test(dateStr)) return failure(); + scanner.next(10); + + const acc = []; + // example: 1979-05-27T00:32:00Z + while (/[ 0-9TZ.:-]/.test(scanner.char()) && !scanner.eof()) { + acc.push(scanner.char()); + scanner.next(); + } + dateStr += acc.join(""); + const date = new Date(dateStr.trim()); + // invalid date + if (isNaN(date.getTime())) { + throw new SyntaxError(`Invalid date string "${dateStr}"`); + } + + return success(date); +} + +export function localTime(scanner: Scanner): ParseResult { + scanner.nextUntilChar({ inline: true }); + + let timeStr = scanner.slice(0, 8); + if (!/^(\d{2}):(\d{2}):(\d{2})/.test(timeStr)) return failure(); + scanner.next(8); + + const acc = []; + if (scanner.char() !== ".") return success(timeStr); + acc.push(scanner.char()); + scanner.next(); + + while (/[0-9]/.test(scanner.char()) && !scanner.eof()) { + acc.push(scanner.char()); + scanner.next(); + } + timeStr += acc.join(""); + return success(timeStr); +} + +export function arrayValue(scanner: Scanner): ParseResult { + scanner.nextUntilChar({ inline: true }); + + if (scanner.char() !== "[") return failure(); + scanner.next(); + + const array: unknown[] = []; + while (!scanner.eof()) { + scanner.nextUntilChar(); + const result = value(scanner); + if (!result.ok) break; + array.push(result.body); + scanner.nextUntilChar({ inline: true }); + // may have a next item, but trailing comma is allowed at array + if (scanner.char() !== ",") break; + scanner.next(); + } + scanner.nextUntilChar(); + + if (scanner.char() !== "]") throw new SyntaxError("Array is not closed"); + scanner.next(); + + return success(array); +} + +export function inlineTable( + scanner: Scanner, +): ParseResult> { + scanner.nextUntilChar(); + if (scanner.char(1) === "}") { + scanner.next(2); + return success({}); + } + const pairs = surround( + "{", + join(pair, ","), + "}", + )(scanner); + if (!pairs.ok) return failure(); + let table = {}; + for (const pair of pairs.body) { + table = deepMerge(table, pair); + } + return success(table); +} + +export const value = or([ + multilineBasicString, + multilineLiteralString, + basicString, + literalString, + symbols, + dateTime, + localTime, + float, + integer, + arrayValue, + inlineTable, +]); + +export const pair = kv(dottedKey, "=", value); + +export function block( + scanner: Scanner, +): ParseResult { + scanner.nextUntilChar(); + const result = merge(repeat(pair))(scanner); + if (result.ok) return success({ type: "Block", value: result.body }); + return failure(); +} + +export const tableHeader = surround("[", dottedKey, "]"); + +export function table(scanner: Scanner): ParseResult { + scanner.nextUntilChar(); + const header = tableHeader(scanner); + if (!header.ok) return failure(); + scanner.nextUntilChar(); + const b = block(scanner); + return success({ + type: "Table", + key: header.body, + value: b.ok ? b.body.value : {}, + }); +} + +export const tableArrayHeader = surround("[[", dottedKey, "]]"); + +export function tableArray( + scanner: Scanner, +): ParseResult { + scanner.nextUntilChar(); + const header = tableArrayHeader(scanner); + if (!header.ok) return failure(); + scanner.nextUntilChar(); + const b = block(scanner); + return success({ + type: "TableArray", + key: header.body, + value: b.ok ? b.body.value : {}, + }); +} + +export function toml( + scanner: Scanner, +): ParseResult> { + const blocks = repeat(or([block, tableArray, table]))(scanner); + if (!blocks.ok) return failure(); + let body = {}; + for (const block of blocks.body) { + switch (block.type) { + case "Block": { + body = deepMerge(body, block.value); + break; + } + case "Table": { + deepAssignWithTable(body, block); + break; + } + case "TableArray": { + deepAssignWithTable(body, block); + break; + } + } + } + return success(body); +} + +export function parserFactory(parser: ParserComponent) { + return (tomlString: string): T => { + const scanner = new Scanner(tomlString); + + let parsed: ParseResult | null = null; + let err: Error | null = null; + try { + parsed = parser(scanner); + } catch (e) { + err = e instanceof Error ? e : new Error("Invalid error type caught"); + } + + if (err || !parsed || !parsed.ok || !scanner.eof()) { + const position = scanner.position(); + const subStr = tomlString.slice(0, position); + const lines = subStr.split("\n"); + const row = lines.length; + const column = (() => { + let count = subStr.length; + for (const line of lines) { + if (count <= line.length) break; + count -= line.length + 1; + } + return count; + })(); + const message = `Parse error on line ${row}, column ${column}: ${ + err ? err.message : `Unexpected character: "${scanner.char()}"` + }`; + throw new SyntaxError(message); + } + return parsed.body; + }; +} diff --git a/src/vendor/jsr.io/@std/toml/1.0.1/parse.ts b/src/vendor/jsr.io/@std/toml/1.0.1/parse.ts new file mode 100644 index 00000000000..a2a4a5b103b --- /dev/null +++ b/src/vendor/jsr.io/@std/toml/1.0.1/parse.ts @@ -0,0 +1,27 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { parserFactory, toml } from "./_parser.ts"; + +/** + * Parses a {@link https://toml.io | TOML} string into an object. + * + * @example Usage + * ```ts + * import { parse } from "@std/toml/parse"; + * import { assertEquals } from "@std/assert"; + * + * const tomlString = `title = "TOML Example" + * [owner] + * name = "Alice" + * bio = "Alice is a programmer."`; + * + * const obj = parse(tomlString); + * assertEquals(obj, { title: "TOML Example", owner: { name: "Alice", bio: "Alice is a programmer." } }); + * ``` + * @param tomlString TOML string to be parsed. + * @returns The parsed JS object. + */ +export function parse(tomlString: string): Record { + return parserFactory(toml)(tomlString); +} diff --git a/src/vendor/deno.land/std@0.217.0/uuid/_common.ts b/src/vendor/jsr.io/@std/uuid/0.224.3/_common.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/uuid/_common.ts rename to src/vendor/jsr.io/@std/uuid/0.224.3/_common.ts diff --git a/src/vendor/jsr.io/@std/uuid/0.224.3/common.ts b/src/vendor/jsr.io/@std/uuid/0.224.3/common.ts new file mode 100644 index 00000000000..42991517dae --- /dev/null +++ b/src/vendor/jsr.io/@std/uuid/0.224.3/common.ts @@ -0,0 +1,72 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { NIL_UUID } from "./constants.ts"; + +/** + * Determines whether the UUID is the + * {@link https://www.rfc-editor.org/rfc/rfc4122#section-4.1.7 | nil UUID}. + * + * @param id UUID value. + * + * @returns `true` if the UUID is the nil UUID, otherwise `false`. + * + * @example Usage + * ```ts + * import { isNil } from "@std/uuid"; + * import { assert, assertFalse } from "@std/assert"; + * + * assert(isNil("00000000-0000-0000-0000-000000000000")); + * assertFalse(isNil(crypto.randomUUID())); + * ``` + */ +export function isNil(id: string): boolean { + return id === NIL_UUID; +} + +/** + * Determines whether a string is a valid UUID. + * + * @param uuid UUID value. + * + * @returns `true` if the string is a valid UUID, otherwise `false`. + * + * @example Usage + * ```ts + * import { validate } from "@std/uuid"; + * import { assert, assertFalse } from "@std/assert"; + * + * assert(validate("6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b")); + * assertFalse(validate("not a UUID")); + * ``` + */ +export function validate(uuid: string): boolean { + return /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i + .test( + uuid, + ); +} + +/** + * Detect RFC version of a UUID. + * + * @param uuid UUID value. + * + * @returns The RFC version of the UUID. + * + * @example Usage + * ```ts + * import { version } from "@std/uuid"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * assertEquals(version("d9428888-122b-11e1-b85c-61cd3cbb3210"), 1); + * assertEquals(version("6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b"), 4); + * ``` + */ +export function version(uuid: string): number { + if (!validate(uuid)) { + throw new TypeError("Invalid UUID"); + } + + return parseInt(uuid[14]!, 16); +} diff --git a/src/vendor/jsr.io/@std/uuid/0.224.3/constants.ts b/src/vendor/jsr.io/@std/uuid/0.224.3/constants.ts new file mode 100644 index 00000000000..6fdb6cb5958 --- /dev/null +++ b/src/vendor/jsr.io/@std/uuid/0.224.3/constants.ts @@ -0,0 +1,56 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Name string is a fully-qualified domain name. + * + * @example Usage + * ```ts + * import { NAMESPACE_DNS } from "@std/uuid/constants"; + * import { generate } from "@std/uuid/v5"; + * + * await generate(NAMESPACE_DNS, new TextEncoder().encode("deno.land")); + * ``` + */ +export const NAMESPACE_DNS = "6ba7b810-9dad-11d1-80b4-00c04fd430c8"; +/** + * Name string is a URL. + * + * @example Usage + * ```ts + * import { NAMESPACE_URL } from "@std/uuid/constants"; + * import { generate } from "@std/uuid/v3"; + * + * await generate(NAMESPACE_URL, new TextEncoder().encode("https://deno.land")); + * ``` + */ +export const NAMESPACE_URL = "6ba7b811-9dad-11d1-80b4-00c04fd430c8"; +/** + * Name string is an ISO OID. + * + * @example Usage + * ```ts + * import { NAMESPACE_OID } from "@std/uuid/constants"; + * import { generate } from "@std/uuid/v5"; + * + * await generate(NAMESPACE_OID, new TextEncoder().encode("1.3.6.1.2.1.1.1")); + * ``` + */ +export const NAMESPACE_OID = "6ba7b812-9dad-11d1-80b4-00c04fd430c8"; +/** + * Name string is an X.500 DN (in DER or a text output format). + * + * @example Usage + * ```ts + * import { NAMESPACE_X500 } from "@std/uuid/constants"; + * import { generate } from "@std/uuid/v3"; + * + * await generate(NAMESPACE_X500, new TextEncoder().encode("CN=John Doe, OU=People, O=Example.com")); + * ``` + */ +export const NAMESPACE_X500 = "6ba7b814-9dad-11d1-80b4-00c04fd430c8"; +/** + * The nil UUID is special form of UUID that is specified to have all 128 bits + * set to zero. + */ +export const NIL_UUID = "00000000-0000-0000-0000-000000000000"; diff --git a/src/vendor/jsr.io/@std/uuid/0.224.3/mod.ts b/src/vendor/jsr.io/@std/uuid/0.224.3/mod.ts new file mode 100644 index 00000000000..84c61db475f --- /dev/null +++ b/src/vendor/jsr.io/@std/uuid/0.224.3/mod.ts @@ -0,0 +1,108 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * Generators and validators for + * {@link https://www.rfc-editor.org/rfc/rfc9562.html | RFC 9562} UUIDs for + * versions v1, v3, v4 and v5. + * + * Use the built-in + * {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID | crypto.randomUUID()} + * function instead of this package, if you only need to generate v4 UUIDs. + * + * Based on {@linkcode https://www.npmjs.com/package/uuid | npm:uuid}. + * + * ```ts + * import { v5, NAMESPACE_DNS, NIL_UUID } from "@std/uuid"; + * import { assert, assertFalse } from "@std/assert"; + * + * const data = new TextEncoder().encode("deno.land"); + * const uuid = await v5.generate(NAMESPACE_DNS, data); + * + * assert(v5.validate(uuid)); + * assertFalse(v5.validate(NIL_UUID)); + * ``` + * + * @module + */ + +export * from "./common.ts"; +export * from "./constants.ts"; + +import { generate as generateV1, validate as validateV1 } from "./v1.ts"; +import { generate as generateV3, validate as validateV3 } from "./v3.ts"; +import { validate as validateV4 } from "./v4.ts"; +import { generate as generateV5, validate as validateV5 } from "./v5.ts"; + +/** + * Generator and validator for + * {@link https://www.rfc-editor.org/rfc/rfc9562.html#section-5.1 | UUIDv1}. + * + * @example Usage + * ```ts + * import { v1 } from "@std/uuid"; + * import { assert } from "@std/assert/assert"; + * + * const uuid = v1.generate(); + * assert(v1.validate(uuid as string)); + * ``` + */ +export const v1 = { + generate: generateV1, + validate: validateV1, +}; + +/** + * Generator and validator for + * {@link https://www.rfc-editor.org/rfc/rfc9562.html#section-5.3 | UUIDv3}. + * + * @example Usage + * ```ts + * import { v3, NAMESPACE_DNS } from "@std/uuid"; + * import { assert } from "@std/assert/assert"; + * + * const data = new TextEncoder().encode("deno.land"); + * const uuid = await v3.generate(NAMESPACE_DNS, data); + * assert(v3.validate(uuid)); + * ``` + */ +export const v3 = { + generate: generateV3, + validate: validateV3, +}; + +/** + * Validator for + * {@link https://www.rfc-editor.org/rfc/rfc9562.html#section-5.4 | UUIDv4}. + * + * @example Usage + * ```ts + * import { v4 } from "@std/uuid"; + * import { assert } from "@std/assert/assert"; + * + * const uuid = crypto.randomUUID(); + * assert(v4.validate(uuid)); + * ``` + */ +export const v4 = { + validate: validateV4, +}; + +/** + * Generator and validator for + * {@link https://www.rfc-editor.org/rfc/rfc9562.html#section-5.5 | UUIDv5}. + * + * @example Usage + * ```ts + * import { v5, NAMESPACE_DNS } from "@std/uuid"; + * import { assert } from "@std/assert/assert"; + * + * const data = new TextEncoder().encode("deno.land"); + * const uuid = await v5.generate(NAMESPACE_DNS, data); + * assert(v5.validate(uuid)); + * ``` + */ +export const v5 = { + generate: generateV5, + validate: validateV5, +}; diff --git a/src/vendor/deno.land/std@0.217.0/uuid/v1.ts b/src/vendor/jsr.io/@std/uuid/0.224.3/v1.ts similarity index 63% rename from src/vendor/deno.land/std@0.217.0/uuid/v1.ts rename to src/vendor/jsr.io/@std/uuid/0.224.3/v1.ts index 55a928bf229..5db715d07e0 100644 --- a/src/vendor/deno.land/std@0.217.0/uuid/v1.ts +++ b/src/vendor/jsr.io/@std/uuid/0.224.3/v1.ts @@ -7,17 +7,21 @@ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; /** - * Validates the UUID v1. + * Determines whether a string is a valid + * {@link https://www.rfc-editor.org/rfc/rfc9562.html#section-5.1 | UUIDv1}. * - * @example + * @param id UUID value. + * + * @returns `true` if the string is a valid UUIDv1, otherwise `false`. + * + * @example Usage * ```ts - * import { validate } from "https://deno.land/std@$STD_VERSION/uuid/v1.ts"; + * import { validate } from "@std/uuid/v1"; + * import { assert, assertFalse } from "@std/assert"; * - * validate("ea71fc60-a713-11ee-af61-8349da24f689"); // true - * validate("fac8c1e0-ad1a-4204-a0d0-8126ae84495d"); // false + * assert(validate("ea71fc60-a713-11ee-af61-8349da24f689")); + * assertFalse(validate("fac8c1e0-ad1a-4204-a0d0-8126ae84495d")); * ``` - * - * @param id UUID value. */ export function validate(id: string): boolean { return UUID_RE.test(id); @@ -29,8 +33,16 @@ let _clockseq: number; let _lastMSecs = 0; let _lastNSecs = 0; -/** The options used for generating a v1 UUID in {@linkcode generate}. */ -export interface V1Options { +/** + * Options for {@linkcode generate}. + * + * @deprecated This will be removed in 1.0.0. Use {@linkcode GenerateOptions} + * instead. + */ +export interface V1Options extends GenerateOptions {} + +/** Options for {@linkcode generate}. */ +export interface GenerateOptions { /** * An array of 6 bytes that represents a 48-bit IEEE 802 MAC address. * @@ -67,11 +79,19 @@ export interface V1Options { } /** - * Generates a RFC4122 v1 UUID (time-based). + * Generates a + * {@link https://www.rfc-editor.org/rfc/rfc9562.html#section-5.1 | UUIDv1}. * - * @example + * @param options Can use RFC time sequence values as overwrites. + * @param buf Can allow the UUID to be written in byte-form starting at the offset. + * @param offset Index to start writing on the UUID bytes in buffer. + * + * @returns Returns a UUIDv1 string or an array of 16 bytes. + * + * @example Usage * ```ts - * import { generate } from "https://deno.land/std@$STD_VERSION/uuid/v1.ts"; + * import { generate, validate } from "@std/uuid/v1"; + * import { assert } from "@std/assert/assert"; * * const options = { * node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], @@ -80,22 +100,52 @@ export interface V1Options { * nsecs: 5678, * }; * - * generate(options); // "710b962e-041c-11e1-9234-0123456789ab" + * const uuid = generate(options) as string; + * assert(validate(uuid)); * ``` * + * @deprecated This will be removed in 1.0.0. Use the other overload instead. + */ +export function generate( + options?: GenerateOptions, + buf?: number[], + offset?: number, +): string | number[]; +/** + * Generates a + * {@link https://www.rfc-editor.org/rfc/rfc9562.html#section-5.1 | UUIDv1}. + * * @param options Can use RFC time sequence values as overwrites. * @param buf Can allow the UUID to be written in byte-form starting at the offset. * @param offset Index to start writing on the UUID bytes in buffer. + * + * @returns Returns a UUIDv1 string or an array of 16 bytes. + * + * @example Usage + * ```ts + * import { generate, validate } from "@std/uuid/v1"; + * import { assert } from "@std/assert/assert"; + * + * const options = { + * node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], + * clockseq: 0x1234, + * msecs: new Date("2011-11-01").getTime(), + * nsecs: 5678, + * }; + * + * const uuid = generate(options) as string; + * assert(validate(uuid)); + * ``` */ +export function generate(options?: GenerateOptions): string; export function generate( - options?: V1Options | null, + options: GenerateOptions = {}, buf?: number[], offset?: number, ): string | number[] { let i = (buf && offset) || 0; const b = buf ?? []; - options ??= {}; let { node = _nodeId, clockseq = _clockseq } = options; if (node === undefined || clockseq === undefined) { @@ -136,6 +186,12 @@ export function generate( throw new Error("Can't create more than 10M uuids/sec"); } + if (node.length !== 6) { + throw new Error( + "Cannot create UUID. The node option must be an array of 6 bytes", + ); + } + _lastMSecs = msecs; _lastNSecs = nsecs; _clockseq = clockseq; @@ -163,7 +219,7 @@ export function generate( b[i++] = clockseq & 0xff; for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; + b[i + n] = node[n]!; } return buf ?? bytesToUuid(b); diff --git a/src/vendor/jsr.io/@std/uuid/0.224.3/v3.ts b/src/vendor/jsr.io/@std/uuid/0.224.3/v3.ts new file mode 100644 index 00000000000..cd75b4de554 --- /dev/null +++ b/src/vendor/jsr.io/@std/uuid/0.224.3/v3.ts @@ -0,0 +1,72 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { bytesToUuid, uuidToBytes } from "./_common.ts"; +import { concat } from "jsr:/@std/bytes@^1.0.0-rc.3/concat"; +import { crypto } from "jsr:/@std/crypto@^0.224.0/crypto"; +import { validate as validateCommon } from "./common.ts"; + +const UUID_RE = + /^[0-9a-f]{8}-[0-9a-f]{4}-[3][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; + +/** + * Determines whether a string is a valid + * {@link https://www.rfc-editor.org/rfc/rfc9562.html#section-5.3 | UUIDv3}. + * + * @param id UUID value. + * + * @returns `true` if the string is a valid UUIDv3, otherwise `false`. + * + * @example Usage + * ```ts + * import { validate } from "@std/uuid/v3"; + * import { assert, assertFalse } from "@std/assert"; + * + * assert(validate("22fe6191-c161-3d86-a432-a81f343eda08")); + * assertFalse(validate("this-is-not-a-uuid")); + * ``` + */ +export function validate(id: string): boolean { + return UUID_RE.test(id); +} + +/** + * Generates a + * {@link https://www.rfc-editor.org/rfc/rfc9562.html#section-5.3 | UUIDv3}. + * + * @param namespace The namespace to use, encoded as a UUID. + * @param data The data to hash to calculate the MD5 digest for the UUID. + * + * @returns A UUIDv3 string. + * + * @throws {TypeError} If the namespace is not a valid UUID. + * + * @example Usage + * ```ts + * import { NAMESPACE_URL } from "@std/uuid/constants"; + * import { generate, validate } from "@std/uuid/v3"; + * import { assert } from "@std/assert"; + * + * const data = new TextEncoder().encode("python.org"); + * const uuid = await generate(NAMESPACE_URL, data); + * + * assert(validate(uuid)); + * ``` + */ +export async function generate( + namespace: string, + data: Uint8Array, +): Promise { + if (!validateCommon(namespace)) { + throw new TypeError("Invalid namespace UUID"); + } + const space = uuidToBytes(namespace); + const toHash = concat([new Uint8Array(space), data]); + const buffer = await crypto.subtle.digest("MD5", toHash); + const bytes = new Uint8Array(buffer); + + bytes[6] = (bytes[6]! & 0x0f) | 0x30; + bytes[8] = (bytes[8]! & 0x3f) | 0x80; + + return bytesToUuid(bytes); +} diff --git a/src/vendor/jsr.io/@std/uuid/0.224.3/v4.ts b/src/vendor/jsr.io/@std/uuid/0.224.3/v4.ts new file mode 100644 index 00000000000..d5bd46411c2 --- /dev/null +++ b/src/vendor/jsr.io/@std/uuid/0.224.3/v4.ts @@ -0,0 +1,28 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +const UUID_RE = + /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; + +/** + * Determines whether a string is a valid + * {@link https://www.rfc-editor.org/rfc/rfc9562.html#section-5.4 | UUIDv4}. + * + * @param id UUID value. + * + * @returns `true` if the UUID is valid UUIDv4, otherwise `false`. + * + * @example Usage + * ```ts + * import { validate } from "@std/uuid/v4"; + * import { assert, assertFalse } from "@std/assert"; + * + * assert(validate(crypto.randomUUID())); + * assertFalse(validate("this-is-not-a-uuid")); + * ``` + */ +export function validate( + id: string, +): id is ReturnType { + return UUID_RE.test(id); +} diff --git a/src/vendor/jsr.io/@std/uuid/0.224.3/v5.ts b/src/vendor/jsr.io/@std/uuid/0.224.3/v5.ts new file mode 100644 index 00000000000..91eb8ba9025 --- /dev/null +++ b/src/vendor/jsr.io/@std/uuid/0.224.3/v5.ts @@ -0,0 +1,72 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { bytesToUuid, uuidToBytes } from "./_common.ts"; +import { concat } from "jsr:/@std/bytes@^1.0.0-rc.3/concat"; +import { validate as validateCommon } from "./common.ts"; + +const UUID_RE = + /^[0-9a-f]{8}-[0-9a-f]{4}-[5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; + +/** + * Determines whether a string is a valid + * {@link https://www.rfc-editor.org/rfc/rfc9562.html#section-5.5 | UUIDv5}. + * + * @param id UUID value. + * + * @returns `true` if the string is a valid UUIDv5, otherwise `false`. + * + * @example Usage + * ```ts + * import { validate } from "@std/uuid/v5"; + * import { assert, assertFalse } from "@std/assert"; + * + * assert(validate("7af94e2b-4dd9-50f0-9c9a-8a48519bdef0")); + * assertFalse(validate(crypto.randomUUID())); + * ``` + */ +export function validate(id: string): boolean { + return UUID_RE.test(id); +} + +/** + * Generates a + * {@link https://www.rfc-editor.org/rfc/rfc9562.html#section-5.5 | UUIDv5}. + * + * @param namespace The namespace to use, encoded as a UUID. + * @param data The data to hash to calculate the SHA-1 digest for the UUID. + * + * @returns A UUIDv5 string. + * + * @throws {TypeError} If the namespace is not a valid UUID. + * + * @example Usage + * ```ts + * import { NAMESPACE_URL } from "@std/uuid/constants"; + * import { generate, validate } from "@std/uuid/v5"; + * import { assert } from "@std/assert"; + * + * const data = new TextEncoder().encode("python.org"); + * const uuid = await generate(NAMESPACE_URL, data); + * + * assert(validate(uuid)); + * ``` + */ +export async function generate( + namespace: string, + data: Uint8Array, +): Promise { + if (!validateCommon(namespace)) { + throw new TypeError("Invalid namespace UUID"); + } + + const space = uuidToBytes(namespace); + const toHash = concat([new Uint8Array(space), data]); + const buffer = await crypto.subtle.digest("sha-1", toHash); + const bytes = new Uint8Array(buffer); + + bytes[6] = (bytes[6]! & 0x0f) | 0x50; + bytes[8] = (bytes[8]! & 0x3f) | 0x80; + + return bytesToUuid(bytes); +} diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_dumper/dumper.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_dumper/dumper.ts similarity index 89% rename from src/vendor/deno.land/std@0.217.0/yaml/_dumper/dumper.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_dumper/dumper.ts index 9de12e04223..01b310092f0 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/_dumper/dumper.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/_dumper/dumper.ts @@ -4,9 +4,9 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. import { YAMLError } from "../_error.ts"; -import type { RepresentFn, StyleVariant, Type } from "../type.ts"; +import type { RepresentFn } from "../type.ts"; import * as common from "../_utils.ts"; -import { DumperState, DumperStateOptions } from "./dumper_state.ts"; +import { DumperState, type DumperStateOptions } from "./dumper_state.ts"; type Any = common.Any; type ArrayObject = common.ArrayObject; @@ -99,12 +99,12 @@ function encodeHex(character: number): string { // Indents every line in a string. Empty lines (\n only) are not indented. function indentString(string: string, spaces: number): string { - const ind = common.repeat(" ", spaces), - length = string.length; - let position = 0, - next = -1, - result = "", - line: string; + const ind = common.repeat(" ", spaces); + const length = string.length; + let position = 0; + let next = -1; + let result = ""; + let line: string; while (position < length) { next = string.indexOf("\n", position); @@ -129,20 +129,7 @@ function generateNextLine(state: DumperState, level: number): string { } function testImplicitResolving(state: DumperState, str: string): boolean { - let type: Type; - for ( - let index = 0, length = state.implicitTypes.length; - index < length; - index += 1 - ) { - type = state.implicitTypes[index]; - - if (type.resolve(str)) { - return true; - } - } - - return false; + return state.implicitTypes.some((type) => type.resolve(str)); } // [33] s-white ::= s-space | s-tab @@ -222,11 +209,11 @@ function needIndentIndicator(string: string): boolean { return leadingSpaceRe.test(string); } -const STYLE_PLAIN = 1, - STYLE_SINGLE = 2, - STYLE_LITERAL = 3, - STYLE_FOLDED = 4, - STYLE_DOUBLE = 5; +const STYLE_PLAIN = 1; +const STYLE_SINGLE = 2; +const STYLE_LITERAL = 3; +const STYLE_FOLDED = 4; +const STYLE_DOUBLE = 5; // Determines which scalar styles are possible and returns the preferred style. // lineWidth = -1 => no limit. @@ -243,13 +230,14 @@ function chooseScalarStyle( testAmbiguousType: (...args: Any[]) => Any, ): number { const shouldTrackWidth = lineWidth !== -1; - let hasLineBreak = false, - hasFoldableLine = false, // only checked if shouldTrackWidth - previousLineBreak = -1, // count the first line correctly - plain = isPlainSafeFirst(string.charCodeAt(0)) && - !isWhitespace(string.charCodeAt(string.length - 1)); - - let char: number, i: number; + let hasLineBreak = false; + let hasFoldableLine = false; // only checked if shouldTrackWidth + let previousLineBreak = -1; // count the first line correctly + let plain = isPlainSafeFirst(string.charCodeAt(0)) && + !isWhitespace(string.charCodeAt(string.length - 1)); + + let char: number; + let i: number; if (singleLineOnly) { // Case: no block styles. // Check for disallowed characters to rule out plain and single. @@ -313,10 +301,10 @@ function foldLine(line: string, width: number): string { const breakRe = / [^ ]/g; // note: the match index will always be <= length-2. let match; // start is an inclusive index. end, curr, and next are exclusive. - let start = 0, - end, - curr = 0, - next = 0; + let start = 0; + let end; + let curr = 0; + let next = 0; let result = ""; // Invariants: 0 <= start <= length-1. @@ -378,8 +366,8 @@ function foldString(string: string, width: number): string { let match; // tslint:disable-next-line:no-conditional-assignment while ((match = lineRe.exec(string))) { - const prefix = match[1], - line = match[2]; + const prefix = match[1]; + const line = match[2] || ""; moreIndented = line[0] === " "; result += prefix + (!prevMoreIndented && !moreIndented && line !== "" ? "\n" : "") + @@ -393,7 +381,8 @@ function foldString(string: string, width: number): string { // Escapes a double-quoted string. function escapeString(string: string): string { let result = ""; - let char, nextChar; + let char; + let nextChar; let escapeSeq; for (let i = 0; i < string.length; i++) { @@ -521,7 +510,7 @@ function writeFlowSequence( let _result = ""; const _tag = state.tag; - for (let index = 0, length = object.length; index < length; index += 1) { + for (let index = 0; index < object.length; index += 1) { // Write only valid elements. if (writeNode(state, level, object[index], false, false)) { if (index !== 0) _result += `,${!state.condenseFlow ? " " : ""}`; @@ -542,7 +531,7 @@ function writeBlockSequence( let _result = ""; const _tag = state.tag; - for (let index = 0, length = object.length; index < length; index += 1) { + for (let index = 0; index < object.length; index += 1) { // Write only valid elements. if (writeNode(state, level + 1, object[index], true, true)) { if (!compact || index !== 0) { @@ -569,21 +558,15 @@ function writeFlowMapping( object: Any, ) { let _result = ""; - const _tag = state.tag, - objectKeyList = Object.keys(object); - - let pairBuffer: string, objectKey: string, objectValue: Any; - for ( - let index = 0, length = objectKeyList.length; - index < length; - index += 1 - ) { - pairBuffer = state.condenseFlow ? '"' : ""; + const _tag = state.tag; + const objectKeyList = Object.keys(object); + + for (const [index, objectKey] of objectKeyList.entries()) { + let pairBuffer = state.condenseFlow ? '"' : ""; if (index !== 0) pairBuffer += ", "; - objectKey = objectKeyList[index]; - objectValue = object[objectKey]; + const objectValue = object[objectKey]; if (!writeNode(state, level, objectKey, false, false)) { continue; // Skip this pair because of invalid key; @@ -615,8 +598,8 @@ function writeBlockMapping( object: Any, compact = false, ) { - const _tag = state.tag, - objectKeyList = Object.keys(object); + const _tag = state.tag; + const objectKeyList = Object.keys(object); let _result = ""; // Allow sorting keys so that the output file is deterministic @@ -631,29 +614,20 @@ function writeBlockMapping( throw new YAMLError("sortKeys must be a boolean or a function"); } - let pairBuffer = "", - objectKey: string, - objectValue: Any, - explicitPair: boolean; - for ( - let index = 0, length = objectKeyList.length; - index < length; - index += 1 - ) { - pairBuffer = ""; + for (const [index, objectKey] of objectKeyList.entries()) { + let pairBuffer = ""; if (!compact || index !== 0) { pairBuffer += generateNextLine(state, level); } - objectKey = objectKeyList[index]; - objectValue = object[objectKey]; + const objectValue = object[objectKey]; if (!writeNode(state, level + 1, objectKey, true, true, true)) { continue; // Skip this pair because of invalid key. } - explicitPair = (state.tag !== null && state.tag !== "?") || + const explicitPair = (state.tag !== null && state.tag !== "?") || (state.dump && state.dump.length > 1024); if (explicitPair) { @@ -697,11 +671,8 @@ function detectType( ): boolean { const typeList = explicit ? state.explicitTypes : state.implicitTypes; - let type: Type; - let style: StyleVariant; - let _result: string; - for (let index = 0, length = typeList.length; index < length; index += 1) { - type = typeList[index]; + for (const type of typeList) { + let _result: string; if ( (type.instanceOf || type.predicate) && @@ -712,12 +683,12 @@ function detectType( state.tag = explicit ? type.tag : "?"; if (type.represent) { - style = state.styleMap[type.tag] || type.defaultStyle; + const style = state.styleMap[type.tag]! || type.defaultStyle; if (_toString.call(type.represent) === "[object Function]") { _result = (type.represent as RepresentFn)(object, style); } else if (hasOwn(type.represent, style)) { - _result = (type.represent as ArrayObject)[style]( + _result = (type.represent as ArrayObject)[style]!( object, style, ); @@ -841,18 +812,12 @@ function inspectNode( objects.push(object); if (Array.isArray(object)) { - for (let idx = 0, length = object.length; idx < length; idx += 1) { + for (let idx = 0; idx < object.length; idx += 1) { inspectNode(object[idx], objects, duplicatesIndexes); } } else { - const objectKeyList = Object.keys(object); - - for ( - let idx = 0, length = objectKeyList.length; - idx < length; - idx += 1 - ) { - inspectNode(object[objectKeyList[idx]], objects, duplicatesIndexes); + for (const objectKey of Object.keys(object)) { + inspectNode(object[objectKey], objects, duplicatesIndexes); } } } @@ -863,16 +828,15 @@ function getDuplicateReferences( object: Record, state: DumperState, ) { - const objects: Any[] = [], - duplicatesIndexes: number[] = []; + const objects: Any[] = []; + const duplicatesIndexes: number[] = []; inspectNode(object, objects, duplicatesIndexes); - const length = duplicatesIndexes.length; - for (let index = 0; index < length; index += 1) { - state.duplicates.push(objects[duplicatesIndexes[index]]); + for (const idx of duplicatesIndexes) { + state.duplicates.push(objects[idx]); } - state.usedDuplicates = Array.from({ length }); + state.usedDuplicates = Array.from({ length: duplicatesIndexes.length }); } export function dump(input: Any, options?: DumperStateOptions): string { diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_dumper/dumper_state.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_dumper/dumper_state.ts similarity index 81% rename from src/vendor/deno.land/std@0.217.0/yaml/_dumper/dumper_state.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_dumper/dumper_state.ts index f0a1aac75bf..291480e3047 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/_dumper/dumper_state.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/_dumper/dumper_state.ts @@ -16,17 +16,13 @@ function compileStyleMap( ): ArrayObject { if (typeof map === "undefined" || map === null) return {}; - let type: Type; const result: ArrayObject = {}; - const keys = Object.keys(map); - let tag: string, style: StyleVariant; - for (let index = 0, length = keys.length; index < length; index += 1) { - tag = keys[index]; - style = String(map[tag]) as StyleVariant; + for (let tag of Object.keys(map)) { + let style = String(map[tag]) as StyleVariant; if (tag.slice(0, 2) === "!!") { tag = `tag:yaml.org,2002:${tag.slice(2)}`; } - type = schema.compiledTypeMap.fallback[tag]; + const type = schema.compiledTypeMap.fallback[tag]; if ( type && @@ -92,23 +88,23 @@ export interface DumperStateOptions { } export class DumperState extends State { - public indent: number; - public noArrayIndent: boolean; - public skipInvalid: boolean; - public flowLevel: number; - public sortKeys: boolean | ((a: Any, b: Any) => number); - public lineWidth: number; - public noRefs: boolean; - public noCompatMode: boolean; - public condenseFlow: boolean; - public implicitTypes: Type[]; - public explicitTypes: Type[]; - public tag: string | null = null; - public result = ""; - public duplicates: Any[] = []; - public usedDuplicates: Any[] = []; // changed from null to [] - public styleMap: ArrayObject; - public dump: Any; + indent: number; + noArrayIndent: boolean; + skipInvalid: boolean; + flowLevel: number; + sortKeys: boolean | ((a: Any, b: Any) => number); + lineWidth: number; + noRefs: boolean; + noCompatMode: boolean; + condenseFlow: boolean; + implicitTypes: Type[]; + explicitTypes: Type[]; + tag: string | null = null; + result = ""; + duplicates: Any[] = []; + usedDuplicates: Any[] = []; // changed from null to [] + styleMap: ArrayObject; + dump: Any; constructor({ schema, diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_error.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_error.ts similarity index 91% rename from src/vendor/deno.land/std@0.217.0/yaml/_error.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_error.ts index a3c3e953d68..2c7e1da39eb 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/_error.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/_error.ts @@ -14,7 +14,7 @@ export class YAMLError extends Error { this.name = this.constructor.name; } - public override toString(_compact: boolean): string { + override toString(): string { return `${this.name}: ${this.message} ${this.mark}`; } } diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_loader/loader.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_loader/loader.ts similarity index 94% rename from src/vendor/deno.land/std@0.217.0/yaml/_loader/loader.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_loader/loader.ts index 00ddd4ed0af..cba2030acba 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/_loader/loader.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/_loader/loader.ts @@ -7,7 +7,11 @@ import { YAMLError } from "../_error.ts"; import { Mark } from "../_mark.ts"; import type { Type } from "../type.ts"; import * as common from "../_utils.ts"; -import { LoaderState, LoaderStateOptions, ResultType } from "./loader_state.ts"; +import { + LoaderState, + type LoaderStateOptions, + type ResultType, +} from "./loader_state.ts"; type Any = common.Any; type ArrayObject = common.ArrayObject; @@ -198,13 +202,13 @@ const directiveHandlers: DirectiveHandlers = { return throwError(state, "YAML directive accepts exactly one argument"); } - const match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); + const match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]!); if (match === null) { return throwError(state, "ill-formed argument of the YAML directive"); } - const major = parseInt(match[1], 10); - const minor = parseInt(match[2], 10); + const major = parseInt(match[1]!, 10); + const minor = parseInt(match[2]!, 10); if (major !== 1) { return throwError(state, "unacceptable YAML version of the document"); } @@ -221,8 +225,8 @@ const directiveHandlers: DirectiveHandlers = { return throwError(state, "TAG directive accepts exactly two arguments"); } - const handle = args[0]; - const prefix = args[1]; + const handle = args[0]!; + const prefix = args[1]!; if (!PATTERN_TAG_HANDLE.test(handle)) { return throwError( @@ -264,8 +268,8 @@ function captureSegment( if (checkJson) { for ( - let position = 0, length = result.length; - position < length; + let position = 0; + position < result.length; position++ ) { const character = result.charCodeAt(position); @@ -296,9 +300,7 @@ function mergeMappings( ); } - const keys = Object.keys(source); - for (let i = 0, len = keys.length; i < len; i++) { - const key = keys[i]; + for (const key in Object.keys(source)) { if (!hasOwn(destination, key)) { Object.defineProperty(destination, key, { value: source[key], @@ -327,7 +329,7 @@ function storeMappingPair( if (Array.isArray(keyNode)) { keyNode = Array.prototype.slice.call(keyNode); - for (let index = 0, quantity = keyNode.length; index < quantity; index++) { + for (let index = 0; index < keyNode.length; index++) { if (Array.isArray(keyNode[index])) { return throwError(state, "nested arrays are not supported inside keys"); } @@ -357,8 +359,8 @@ function storeMappingPair( if (keyTag === "tag:yaml.org,2002:merge") { if (Array.isArray(valueNode)) { for ( - let index = 0, quantity = valueNode.length; - index < quantity; + let index = 0; + index < valueNode.length; index++ ) { mergeMappings(state, result, valueNode[index], overridableKeys); @@ -411,8 +413,8 @@ function skipSeparationSpace( allowComments: boolean, checkIndent: number, ): number { - let lineBreaks = 0, - ch = state.input.charCodeAt(state.position); + let lineBreaks = 0; + let ch = state.input.charCodeAt(state.position); while (ch !== 0) { while (isWhiteSpace(ch)) { @@ -524,8 +526,8 @@ function readPlainScalar( state.kind = "scalar"; state.result = ""; - let captureEnd: number, - captureStart = (captureEnd = state.position); + let captureEnd = state.position; + let captureStart = state.position; let hasPendingContent = false; let line = 0; while (ch !== 0) { @@ -597,7 +599,9 @@ function readSingleQuotedScalar( state: LoaderState, nodeIndent: number, ): boolean { - let ch, captureStart, captureEnd; + let ch; + let captureStart; + let captureEnd; ch = state.input.charCodeAt(state.position); @@ -659,8 +663,8 @@ function readDoubleQuotedScalar( state.kind = "scalar"; state.result = ""; state.position++; - let captureEnd: number, - captureStart = (captureEnd = state.position); + let captureEnd = state.position; + let captureStart = state.position; let tmp: number; while ((ch = state.input.charCodeAt(state.position)) !== 0) { if (ch === 0x22 /* " */) { @@ -750,16 +754,16 @@ function readFlowCollection(state: LoaderState, nodeIndent: number): boolean { ch = state.input.charCodeAt(++state.position); - const tag = state.tag, - anchor = state.anchor; + const tag = state.tag; + const anchor = state.anchor; let readNext = true; - let valueNode, - keyNode, - keyTag: string | null = (keyNode = valueNode = null), - isExplicitPair: boolean, - isPair = (isExplicitPair = false); - let following = 0, - line = 0; + let valueNode = null; + let keyNode = null; + let keyTag: string | null = null; + let isExplicitPair = false; + let isPair = false; + let following = 0; + let line = 0; const overridableKeys: ArrayObject = Object.create(null); while (ch !== 0) { skipSeparationSpace(state, true, nodeIndent); @@ -850,12 +854,12 @@ function readFlowCollection(state: LoaderState, nodeIndent: number): boolean { } function readBlockScalar(state: LoaderState, nodeIndent: number): boolean { - let chomping = CHOMPING_CLIP, - didReadContent = false, - detectedIndent = false, - textIndent = nodeIndent, - emptyLines = 0, - atMoreIndented = false; + let chomping = CHOMPING_CLIP; + let didReadContent = false; + let detectedIndent = false; + let textIndent = nodeIndent; + let emptyLines = 0; + let atMoreIndented = false; let ch = state.input.charCodeAt(state.position); @@ -1005,13 +1009,13 @@ function readBlockScalar(state: LoaderState, nodeIndent: number): boolean { } function readBlockSequence(state: LoaderState, nodeIndent: number): boolean { - let line: number, - following: number, - detected = false, - ch: number; - const tag = state.tag, - anchor = state.anchor, - result: unknown[] = []; + let line: number; + let following: number; + let detected = false; + let ch: number; + const tag = state.tag; + const anchor = state.anchor; + const result: unknown[] = []; if ( state.anchor !== null && @@ -1074,20 +1078,20 @@ function readBlockMapping( nodeIndent: number, flowIndent: number, ): boolean { - const tag = state.tag, - anchor = state.anchor, - result = {}, - overridableKeys = Object.create(null); - let following: number, - allowCompact = false, - line: number, - pos: number, - keyTag = null, - keyNode = null, - valueNode = null, - atExplicitKey = false, - detected = false, - ch: number; + const tag = state.tag; + const anchor = state.anchor; + const result = {}; + const overridableKeys = Object.create(null); + let following: number; + let allowCompact = false; + let line: number; + let pos: number; + let keyTag = null; + let keyNode = null; + let valueNode = null; + let atExplicitKey = false; + let detected = false; + let ch: number; if ( state.anchor !== null && @@ -1268,12 +1272,12 @@ function readBlockMapping( } function readTagProperty(state: LoaderState): boolean { - let position: number, - isVerbatim = false, - isNamed = false, - tagHandle = "", - tagName: string, - ch: number; + let position: number; + let isVerbatim = false; + let isNamed = false; + let tagHandle = ""; + let tagName: string; + let ch: number; ch = state.input.charCodeAt(state.position); @@ -1439,14 +1443,14 @@ function composeNode( allowToSeek: boolean, allowCompact: boolean, ): boolean { - let allowBlockScalars: boolean, - allowBlockCollections: boolean, - indentStatus = 1, // 1: this>parent, 0: this=parent, -1: thisparent, 0: this=parent, -1: this( const documents = loadDocuments(input, options); const iterator = iteratorOrOption; - for (let index = 0, length = documents.length; index < length; index++) { + for (let index = 0; index < documents.length; index++) { iterator(documents[index]); } diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_loader/loader_state.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_loader/loader_state.ts similarity index 69% rename from src/vendor/deno.land/std@0.217.0/yaml/_loader/loader_state.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_loader/loader_state.ts index 4a6b19adb1f..89d713d390b 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/_loader/loader_state.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/_loader/loader_state.ts @@ -26,31 +26,32 @@ export interface LoaderStateOptions { export type ResultType = any[] | Record | string; export class LoaderState extends State { - public documents: Any[] = []; - public length: number; - public lineIndent = 0; - public lineStart = 0; - public position = 0; - public line = 0; - public filename?: string; - public onWarning?: (...args: Any[]) => void; - public legacy: boolean; - public json: boolean; - public listener?: ((...args: Any[]) => void) | null; - public implicitTypes: Type[]; - public typeMap: TypeMap; + input: string; + documents: Any[] = []; + length: number; + lineIndent = 0; + lineStart = 0; + position = 0; + line = 0; + filename?: string; + onWarning?: (...args: Any[]) => void; + legacy: boolean; + json: boolean; + listener?: ((...args: Any[]) => void) | null; + implicitTypes: Type[]; + typeMap: TypeMap; - public version?: string | null; - public checkLineBreaks?: boolean; - public tagMap?: ArrayObject; - public anchorMap?: ArrayObject; - public tag?: string | null; - public anchor?: string | null; - public kind?: string | null; - public result: ResultType | null = ""; + version?: string | null; + checkLineBreaks?: boolean; + tagMap?: ArrayObject; + anchorMap?: ArrayObject; + tag?: string | null; + anchor?: string | null; + kind?: string | null; + result: ResultType | null = ""; constructor( - public input: string, + input: string, { filename, schema, @@ -61,6 +62,7 @@ export class LoaderState extends State { }: LoaderStateOptions, ) { super(schema); + this.input = input; this.filename = filename; this.onWarning = onWarning; this.legacy = legacy; diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_mark.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_mark.ts similarity index 76% rename from src/vendor/deno.land/std@0.217.0/yaml/_mark.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_mark.ts index 46528445e11..a6fcf67a065 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/_mark.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/_mark.ts @@ -6,15 +6,26 @@ import { repeat } from "./_utils.ts"; export class Mark { + name: string; + buffer: string; + position: number; + line: number; + column: number; constructor( - public name: string, - public buffer: string, - public position: number, - public line: number, - public column: number, - ) {} + name: string, + buffer: string, + position: number, + line: number, + column: number, + ) { + this.name = name; + this.buffer = buffer; + this.position = position; + this.line = line; + this.column = column; + } - public getSnippet(indent = 4, maxLength = 75): string | null { + getSnippet(indent = 4, maxLength = 75): string | null { if (!this.buffer) return null; let head = ""; @@ -56,9 +67,9 @@ export class Mark { }^`; } - public toString(compact?: boolean): string { - let snippet, - where = ""; + toString(compact?: boolean): string { + let snippet; + let where = ""; if (this.name) { where += `in "${this.name}" `; diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_state.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_state.ts similarity index 77% rename from src/vendor/deno.land/std@0.217.0/yaml/_state.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_state.ts index 2a59125cbc8..6852a254ca3 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/_state.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/_state.ts @@ -7,5 +7,8 @@ import type { SchemaDefinition } from "./schema.ts"; import { DEFAULT_SCHEMA } from "./schema/mod.ts"; export abstract class State { - constructor(public schema: SchemaDefinition = DEFAULT_SCHEMA) {} + schema: SchemaDefinition; + constructor(schema: SchemaDefinition = DEFAULT_SCHEMA) { + this.schema = schema; + } } diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/binary.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/binary.ts similarity index 98% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/binary.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/binary.ts index 589b7107019..bbdc3d1b33b 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/_type/binary.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/binary.ts @@ -88,7 +88,7 @@ function representYamlBinary(object: Uint8Array): string { result += map[bits & 0x3f]; } - bits = (bits << 8) + object[idx]; + bits = (bits << 8) + object[idx]!; } // Dump tail diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/bool.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/bool.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/bool.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/bool.ts diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/float.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/float.ts similarity index 95% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/float.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/float.ts index 97c45b613e7..9c93781cef8 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/_type/float.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/float.ts @@ -3,8 +3,8 @@ // Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { StyleVariant, Type } from "../type.ts"; -import { Any, isNegativeZero } from "../_utils.ts"; +import { type StyleVariant, Type } from "../type.ts"; +import { type Any, isNegativeZero } from "../_utils.ts"; const YAML_FLOAT_PATTERN = new RegExp( // 2.5e4, 2.5 and integers @@ -38,7 +38,7 @@ function constructYamlFloat(data: string): number { const sign = value[0] === "-" ? -1 : 1; const digits: number[] = []; - if ("+-".indexOf(value[0]) >= 0) { + if (value[0] && "+-".indexOf(value[0]) >= 0) { value = value.slice(1); } diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/function.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/function.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/function.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/function.ts diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/int.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/int.ts similarity index 98% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/int.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/int.ts index aeacf75d1d0..7c1fae89365 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/_type/int.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/int.ts @@ -4,7 +4,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. import { Type } from "../type.ts"; -import { Any, isNegativeZero } from "../_utils.ts"; +import { type Any, isNegativeZero } from "../_utils.ts"; function isHexCode(c: number): boolean { return ( diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/map.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/map.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/map.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/map.ts diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/merge.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/merge.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/merge.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/merge.ts diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/mod.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/mod.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/mod.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/mod.ts diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/nil.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/nil.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/nil.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/nil.ts diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/omap.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/omap.ts similarity index 90% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/omap.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/omap.ts index ded6e1e2603..73ab906cb86 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/_type/omap.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/omap.ts @@ -35,12 +35,7 @@ function resolveYamlOmap(data: Any): boolean { return true; } -function constructYamlOmap(data: Any): Any { - return data !== null ? data : []; -} - export const omap = new Type("tag:yaml.org,2002:omap", { - construct: constructYamlOmap, kind: "sequence", resolve: resolveYamlOmap, }); diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/pairs.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/pairs.ts similarity index 91% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/pairs.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/pairs.ts index 342e5b23dc7..62942f8e7fa 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/_type/pairs.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/pairs.ts @@ -11,9 +11,7 @@ const _toString = Object.prototype.toString; function resolveYamlPairs(data: Any[][]): boolean { const result = Array.from({ length: data.length }); - for (let index = 0; index < data.length; index++) { - const pair = data[index]; - + for (const [index, pair] of data.entries()) { if (_toString.call(pair) !== "[object Object]") return false; const keys = Object.keys(pair); @@ -32,7 +30,7 @@ function constructYamlPairs(data: string): Any[] { const result = Array.from({ length: data.length }); for (let index = 0; index < data.length; index += 1) { - const pair = data[index]; + const pair = data[index]!; const keys = Object.keys(pair); diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/regexp.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/regexp.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/regexp.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/regexp.ts diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/seq.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/seq.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/seq.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/seq.ts diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/set.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/set.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/set.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/set.ts diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/str.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/str.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/str.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/str.ts diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/timestamp.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/timestamp.ts similarity index 92% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/timestamp.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/timestamp.ts index 0047bb0ab60..d268a1ecb68 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/_type/timestamp.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/timestamp.ts @@ -39,9 +39,9 @@ function constructYamlTimestamp(data: string): Date { // match: [1] year [2] month [3] day - const year = +match[1]; - const month = +match[2] - 1; // JS month starts with 0 - const day = +match[3]; + const year = +match[1]!; + const month = +match[2]! - 1; // JS month starts with 0 + const day = +match[3]!; if (!match[4]) { // no hour @@ -51,8 +51,8 @@ function constructYamlTimestamp(data: string): Date { // match: [4] hour [5] minute [6] second [7] fraction const hour = +match[4]; - const minute = +match[5]; - const second = +match[6]; + const minute = +match[5]!; + const second = +match[6]!; let fraction = 0; if (match[7]) { @@ -67,7 +67,7 @@ function constructYamlTimestamp(data: string): Date { // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute let delta = null; - if (match[9]) { + if (match[9] && match[10]) { const tzHour = +match[10]; const tzMinute = +(match[11] || 0); delta = (tzHour * 60 + tzMinute) * 60000; // delta in milli-seconds diff --git a/src/vendor/deno.land/std@0.217.0/yaml/_type/undefined.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_type/undefined.ts similarity index 100% rename from src/vendor/deno.land/std@0.217.0/yaml/_type/undefined.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/_type/undefined.ts diff --git a/src/vendor/jsr.io/@std/yaml/0.224.3/_utils.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/_utils.ts new file mode 100644 index 00000000000..c2d4a76e052 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/_utils.ts @@ -0,0 +1,37 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +// deno-lint-ignore no-explicit-any +export type Any = any; + +export function isBoolean(value: unknown): value is boolean { + return typeof value === "boolean" || value instanceof Boolean; +} + +export function isNull(value: unknown): value is null { + return value === null; +} + +export function isObject(value: unknown): value is Record { + return value !== null && typeof value === "object"; +} + +export function repeat(str: string, count: number): string { + let result = ""; + + for (let cycle = 0; cycle < count; cycle++) { + result += str; + } + + return result; +} + +export function isNegativeZero(i: number): boolean { + return i === 0 && Number.NEGATIVE_INFINITY === 1 / i; +} + +export interface ArrayObject { + [P: string]: T; +} diff --git a/src/vendor/deno.land/std@0.217.0/yaml/mod.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/mod.ts similarity index 95% rename from src/vendor/deno.land/std@0.217.0/yaml/mod.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/mod.ts index a47c4473adc..ef00208732f 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/mod.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/mod.ts @@ -24,7 +24,7 @@ * import { * parse, * stringify, - * } from "https://deno.land/std@$STD_VERSION/yaml/mod.ts"; + * } from "@std/yaml"; * * const data = parse(` * foo: bar diff --git a/src/vendor/jsr.io/@std/yaml/0.224.3/parse.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/parse.ts new file mode 100644 index 00000000000..b591ad6f396 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/parse.ts @@ -0,0 +1,137 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { load, loadAll } from "./_loader/loader.ts"; +import { replaceSchemaNameWithSchemaClass } from "./mod.ts"; + +/** + * Options for parsing YAML. + */ +export interface ParseOptions { + /** Uses legacy mode */ + legacy?: boolean; + /** The listener */ + // deno-lint-ignore no-explicit-any + listener?: ((...args: any[]) => void) | null; + /** string to be used as a file path in error/warning messages. */ + filename?: string; + /** + * Specifies a schema to use. + * + * Schema class or its name. + */ + schema?: "core" | "default" | "failsafe" | "json" | "extended" | unknown; + /** compatibility with JSON.parse behaviour. */ + json?: boolean; + /** function to call on warning messages. */ + onWarning?(this: null, e?: Error): void; +} + +/** + * Parse `content` as single YAML document, and return it. + * + * This function does not support regexps, functions, and undefined by default. + * This method is safe for parsing untrusted data. + * + * @example Usage + * ```ts + * import { parse } from "@std/yaml/parse"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const data = parse(` + * id: 1 + * name: Alice + * `); + * + * assertEquals(data, { id: 1, name: "Alice" }); + * ``` + * + * @throws {YAMLError} Throws error on invalid YAML. + * @param content YAML string to parse. + * @param options Parsing options. + * @returns Parsed document. + */ +export function parse(content: string, options?: ParseOptions): unknown { + replaceSchemaNameWithSchemaClass(options); + // deno-lint-ignore no-explicit-any + return load(content, options as any); +} + +/** + * Same as `parse()`, but understands multi-document sources. + * Applies iterator to each document if specified, or returns array of documents. + * + * @example Usage + * ```ts + * import { parseAll } from "@std/yaml/parse"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * parseAll(` + * --- + * id: 1 + * name: Alice + * --- + * id: 2 + * name: Bob + * --- + * id: 3 + * name: Eve + * `, (doc: any) => { + * assertEquals(typeof doc, "object"); + * assertEquals(typeof doc.id, "number"); + * assertEquals(typeof doc.name, "string"); + * }); + * ``` + * + * @param content YAML string to parse. + * @param iterator Function to call on each document. + * @param options Parsing options. + */ +export function parseAll( + content: string, + iterator: (doc: unknown) => void, + options?: ParseOptions, +): void; +/** + * Same as `parse()`, but understands multi-document sources. + * Applies iterator to each document if specified, or returns array of documents. + * + * @example Usage + * ```ts + * import { parseAll } from "@std/yaml/parse"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const data = parseAll(` + * --- + * id: 1 + * name: Alice + * --- + * id: 2 + * name: Bob + * --- + * id: 3 + * name: Eve + * `); + * assertEquals(data, [ { id: 1, name: "Alice" }, { id: 2, name: "Bob" }, { id: 3, name: "Eve" }]); + * ``` + * + * @param content YAML string to parse. + * @param options Parsing options. + * @returns Array of parsed documents. + */ +export function parseAll(content: string, options?: ParseOptions): unknown; +export function parseAll( + content: string, + iteratorOrOption?: ((doc: unknown) => void) | ParseOptions, + options?: ParseOptions, +): unknown { + if (typeof iteratorOrOption !== "function") { + replaceSchemaNameWithSchemaClass(iteratorOrOption); + } + replaceSchemaNameWithSchemaClass(options); + // deno-lint-ignore no-explicit-any + return loadAll(content, iteratorOrOption as any, options as any); +} diff --git a/src/vendor/deno.land/std@0.217.0/yaml/schema.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/schema.ts similarity index 85% rename from src/vendor/deno.land/std@0.217.0/yaml/schema.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/schema.ts index 90701ecbd69..dced3dc718d 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/schema.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/schema.ts @@ -20,12 +20,7 @@ function compileList( } for (const currentType of schema[name]) { - for ( - let previousIndex = 0; - previousIndex < result.length; - previousIndex++ - ) { - const previousType = result[previousIndex]; + for (const [previousIndex, previousType] of result.entries()) { if ( previousType.tag === currentType.tag && previousType.kind === currentType.kind @@ -60,15 +55,15 @@ function compileMap(...typesList: Type[][]): TypeMap { } export class Schema implements SchemaDefinition { - public static SCHEMA_DEFAULT?: Schema; + static SCHEMA_DEFAULT?: Schema; - public implicit: Type[]; - public explicit: Type[]; - public include: Schema[]; + implicit: Type[]; + explicit: Type[]; + include: Schema[]; - public compiledImplicit: Type[]; - public compiledExplicit: Type[]; - public compiledTypeMap: TypeMap; + compiledImplicit: Type[]; + compiledExplicit: Type[]; + compiledTypeMap: TypeMap; constructor(definition: SchemaDefinition) { this.explicit = definition.explicit || []; @@ -92,7 +87,7 @@ export class Schema implements SchemaDefinition { } /* Returns a new extended schema from current schema */ - public extend(definition: SchemaDefinition): Schema { + extend(definition: SchemaDefinition): Schema { return new Schema({ implicit: [ ...new Set([...this.implicit, ...(definition?.implicit ?? [])]), @@ -104,7 +99,7 @@ export class Schema implements SchemaDefinition { }); } - public static create() {} + static create() {} } export interface SchemaDefinition { diff --git a/src/vendor/jsr.io/@std/yaml/0.224.3/schema/core.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/schema/core.ts new file mode 100644 index 00000000000..52bc1e1c20d --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/schema/core.ts @@ -0,0 +1,26 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { Schema } from "../schema.ts"; +import { JSON_SCHEMA } from "./json.ts"; + +/** + * Standard YAML's core schema. + * + * @see {@link http://www.yaml.org/spec/1.2/spec.html#id2804923} + */ +export const CORE_SCHEMA: Schema = new Schema({ + include: [JSON_SCHEMA], +}); + +/** + * Standard YAML's core schema. + * + * @see {@link http://www.yaml.org/spec/1.2/spec.html#id2804923} + * + * @deprecated This will be removed in 1.0.0. Use {@link CORE_SCHEMA} instead. + */ +export const core = CORE_SCHEMA; diff --git a/src/vendor/deno.land/std@0.217.0/yaml/schema/default.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/schema/default.ts similarity index 55% rename from src/vendor/deno.land/std@0.217.0/yaml/schema/default.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/schema/default.ts index 328ae26217c..3104400d387 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/schema/default.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/schema/default.ts @@ -6,12 +6,20 @@ import { Schema } from "../schema.ts"; import { binary, merge, omap, pairs, set, timestamp } from "../_type/mod.ts"; -import { core } from "./core.ts"; +import { CORE_SCHEMA } from "./core.ts"; -// JS-YAML's default schema for `safeLoad` function. -// It is not described in the YAML specification. -export const def: Schema = new Schema({ +/** + * Default YAML schema. It is not described in the YAML specification. + */ +export const DEFAULT_SCHEMA: Schema = new Schema({ explicit: [binary, omap, pairs, set], implicit: [timestamp, merge], - include: [core], + include: [CORE_SCHEMA], }); + +/** + * Default YAML schema. It is not described in the YAML specification. + * + * @deprecated This will be removed in 1.0.0. Use {@link DEFAULT_SCHEMA} instead. + */ +export const def = DEFAULT_SCHEMA; diff --git a/src/vendor/jsr.io/@std/yaml/0.224.3/schema/extended.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/schema/extended.ts new file mode 100644 index 00000000000..87dffe34e34 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/schema/extended.ts @@ -0,0 +1,71 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { Schema } from "../schema.ts"; +import { regexp, undefinedType } from "../_type/mod.ts"; +import { DEFAULT_SCHEMA } from "./default.ts"; + +/*** + * Extends JS-YAML default schema with additional JavaScript types + * It is not described in the YAML specification. + * Functions are no longer supported for security reasons. + * + * @example + * ```ts + * import { + * EXTENDED_SCHEMA, + * parse, + * } from "@std/yaml"; + * + * const data = parse( + * ` + * regexp: + * simple: !!js/regexp foobar + * modifiers: !!js/regexp /foobar/mi + * undefined: !!js/undefined ~ + * # Disabled, see: https://github.com/denoland/deno_std/pull/1275 + * # function: !!js/function > + * # function foobar() { + * # return 'hello world!'; + * # } + * `, + * { schema: EXTENDED_SCHEMA }, + * ); + * ``` + */ +export const EXTENDED_SCHEMA: Schema = new Schema({ + explicit: [regexp, undefinedType], + include: [DEFAULT_SCHEMA], +}); + +/*** + * Extends JS-YAML default schema with additional JavaScript types + * It is not described in the YAML specification. + * Functions are no longer supported for security reasons. + * + * @example + * ```ts + * import { + * EXTENDED_SCHEMA, + * parse, + * } from "@std/yaml"; + * + * const data = parse( + * ` + * regexp: + * simple: !!js/regexp foobar + * modifiers: !!js/regexp /foobar/mi + * undefined: !!js/undefined ~ + * # Disabled, see: https://github.com/denoland/deno_std/pull/1275 + * # function: !!js/function > + * # function foobar() { + * # return 'hello world!'; + * # } + * `, + * { schema: EXTENDED_SCHEMA }, + * ); + * ``` + * + * @deprecated This will be removed in 1.0.0. Use {@link EXTENDED_SCHEMA} instead. + */ +export const extended = EXTENDED_SCHEMA; diff --git a/src/vendor/deno.land/std@0.217.0/yaml/schema/failsafe.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/schema/failsafe.ts similarity index 51% rename from src/vendor/deno.land/std@0.217.0/yaml/schema/failsafe.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/schema/failsafe.ts index bbbf4aa7333..28eff83cc81 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/schema/failsafe.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/schema/failsafe.ts @@ -7,8 +7,20 @@ import { Schema } from "../schema.ts"; import { map, seq, str } from "../_type/mod.ts"; -// Standard YAML's Failsafe schema. -// http://www.yaml.org/spec/1.2/spec.html#id2802346 -export const failsafe: Schema = new Schema({ +/** + * Standard YAML's failsafe schema. + * + * @see {@link http://www.yaml.org/spec/1.2/spec.html#id2802346} + */ +export const FAILSAFE_SCHEMA: Schema = new Schema({ explicit: [str, seq, map], }); + +/** + * Standard YAML's failsafe schema. + * + * @see {@link http://www.yaml.org/spec/1.2/spec.html#id2802346} + * + * @deprecated This will be removed in 1.0.0. Use {@link FAILSAFE_SCHEMA} instead. + */ +export const failsafe = FAILSAFE_SCHEMA; diff --git a/src/vendor/deno.land/std@0.217.0/yaml/schema/json.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/schema/json.ts similarity index 58% rename from src/vendor/deno.land/std@0.217.0/yaml/schema/json.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/schema/json.ts index 93b727c13c2..93b12c482a4 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/schema/json.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/schema/json.ts @@ -6,11 +6,16 @@ import { Schema } from "../schema.ts"; import { bool, float, int, nil } from "../_type/mod.ts"; -import { failsafe } from "./failsafe.ts"; +import { FAILSAFE_SCHEMA } from "./failsafe.ts"; -// Standard YAML's JSON schema. -// http://www.yaml.org/spec/1.2/spec.html#id2803231 -export const json: Schema = new Schema({ +/** + * Standard YAML's JSON schema. + * + * @see {@link http://www.yaml.org/spec/1.2/spec.html#id2803231} + * + * @deprecated This will be removed in 1.0.0. Use {@link JSON_SCHEMA} instead. + */ +export const JSON_SCHEMA: Schema = new Schema({ implicit: [nil, bool, int, float], - include: [failsafe], + include: [FAILSAFE_SCHEMA], }); diff --git a/src/vendor/jsr.io/@std/yaml/0.224.3/schema/mod.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/schema/mod.ts new file mode 100644 index 00000000000..2a5beb814d5 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/schema/mod.ts @@ -0,0 +1,42 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { CORE_SCHEMA } from "./core.ts"; +import { DEFAULT_SCHEMA } from "./default.ts"; +import { EXTENDED_SCHEMA } from "./extended.ts"; +import { FAILSAFE_SCHEMA } from "./failsafe.ts"; +import { JSON_SCHEMA } from "./json.ts"; +export { + CORE_SCHEMA, + DEFAULT_SCHEMA, + EXTENDED_SCHEMA, + FAILSAFE_SCHEMA, + JSON_SCHEMA, +}; + +export function replaceSchemaNameWithSchemaClass( + options?: { + schema?: "core" | "default" | "failsafe" | "json" | "extended" | unknown; + }, +) { + switch (options?.schema) { + case "core": + options.schema = CORE_SCHEMA; + break; + case "default": + options.schema = DEFAULT_SCHEMA; + break; + case "failsafe": + options.schema = FAILSAFE_SCHEMA; + break; + case "json": + options.schema = JSON_SCHEMA; + break; + case "extended": + options.schema = EXTENDED_SCHEMA; + break; + } +} diff --git a/src/vendor/jsr.io/@std/yaml/0.224.3/stringify.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/stringify.ts new file mode 100644 index 00000000000..9c281c095e5 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/stringify.ts @@ -0,0 +1,93 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { dump } from "./_dumper/dumper.ts"; +import { replaceSchemaNameWithSchemaClass } from "./mod.ts"; + +/** + * The option for strinigfy. + */ +export type DumpOptions = { + /** Indentation width to use (in spaces). */ + indent?: number; + /** When true, will not add an indentation level to array elements */ + noArrayIndent?: boolean; + /** + * Do not throw on invalid types (like function in the safe schema) + * and skip pairs and single values with such types. + */ + skipInvalid?: boolean; + /** + * Specifies level of nesting, when to switch from + * block to flow style for collections. -1 means block style everywhere + */ + flowLevel?: number; + /** Each tag may have own set of styles. - "tag" => "style" map. */ + styles?: Record; + /** + * Specifies a schema to use. + * + * Schema class or its name. + */ + schema?: "core" | "default" | "failsafe" | "json" | "extended" | unknown; + /** + * If true, sort keys when dumping YAML in ascending, ASCII character order. + * If a function, use the function to sort the keys. (default: false) + * If a function is specified, the function must return a negative value + * if first argument is less than second argument, zero if they're equal + * and a positive value otherwise. + */ + sortKeys?: boolean | ((a: string, b: string) => number); + /** Set max line width. (default: 80) */ + lineWidth?: number; + /** + * If true, don't convert duplicate objects + * into references (default: false) + */ + noRefs?: boolean; + /** + * If true don't try to be compatible with older yaml versions. + * Currently: don't quote "yes", "no" and so on, + * as required for YAML 1.1 (default: false) + */ + noCompatMode?: boolean; + /** + * If true flow sequences will be condensed, omitting the + * space between `key: value` or `a, b`. Eg. `'[a,b]'` or `{a:{b:c}}`. + * Can be useful when using yaml for pretty URL query params + * as spaces are %-encoded. (default: false). + */ + condenseFlow?: boolean; +}; + +/** + * Serializes `data` as a YAML document. + * + * You can disable exceptions by setting the skipInvalid option to true. + * + * @example Usage + * ```ts + * import { stringify } from "@std/yaml/stringify"; + * import { assertEquals } from "@std/assert/assert-equals"; + * + * const data = { id: 1, name: "Alice" }; + * const yaml = stringify(data); + * + * assertEquals(yaml, "id: 1\nname: Alice\n"); + * ``` + * + * @param data The data to serialize. + * @param options The options for serialization. + * @returns A YAML string. + */ +export function stringify( + data: unknown, + options?: DumpOptions, +): string { + replaceSchemaNameWithSchemaClass(options); + // deno-lint-ignore no-explicit-any + return dump(data, options as any); +} diff --git a/src/vendor/deno.land/std@0.217.0/yaml/type.ts b/src/vendor/jsr.io/@std/yaml/0.224.3/type.ts similarity index 76% rename from src/vendor/deno.land/std@0.217.0/yaml/type.ts rename to src/vendor/jsr.io/@std/yaml/0.224.3/type.ts index efee6ef9d9a..c54475e70db 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/type.ts +++ b/src/vendor/jsr.io/@std/yaml/0.224.3/type.ts @@ -26,14 +26,14 @@ function checkTagFormat(tag: string): string { } export class Type { - public tag: string; - public kind: KindType | null = null; - public instanceOf: Any; - public predicate?: (data: Record) => boolean; - public represent?: RepresentFn | ArrayObject; - public defaultStyle?: StyleVariant; - public styleAliases?: ArrayObject; - public loadKind?: KindType; + tag: string; + kind: KindType | null = null; + instanceOf: Any; + predicate?: (data: Record) => boolean; + represent?: RepresentFn | ArrayObject; + defaultStyle?: StyleVariant; + styleAliases?: ArrayObject; + loadKind?: KindType; constructor(tag: string, options?: TypeOptions) { this.tag = checkTagFormat(tag); @@ -48,6 +48,6 @@ export class Type { this.styleAliases = options.styleAliases; } } - public resolve: (data?: Any) => boolean = (): boolean => true; - public construct: (data?: Any) => Any = (data): Any => data; + resolve: (data?: Any) => boolean = (): boolean => true; + construct: (data?: Any) => Any = (data): Any => data; } diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_chars.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_chars.ts new file mode 100644 index 00000000000..9d0079cf5c4 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_chars.ts @@ -0,0 +1,55 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +export const BOM = 0xfeff; /* BOM */ +export const TAB = 0x09; /* Tab */ +export const LINE_FEED = 0x0a; /* LF */ +export const CARRIAGE_RETURN = 0x0d; /* CR */ +export const SPACE = 0x20; /* Space */ +export const EXCLAMATION = 0x21; /* ! */ +export const DOUBLE_QUOTE = 0x22; /* " */ +export const SHARP = 0x23; /* # */ +export const PERCENT = 0x25; /* % */ +export const AMPERSAND = 0x26; /* & */ +export const SINGLE_QUOTE = 0x27; /* ' */ +export const ASTERISK = 0x2a; /* * */ +export const PLUS = 0x2b; /* + */ +export const COMMA = 0x2c; /* , */ +export const MINUS = 0x2d; /* - */ +export const DOT = 0x2e; /* . */ +export const COLON = 0x3a; /* : */ +export const SMALLER_THAN = 0x3c; /* < */ +export const GREATER_THAN = 0x3e; /* > */ +export const QUESTION = 0x3f; /* ? */ +export const COMMERCIAL_AT = 0x40; /* @ */ +export const LEFT_SQUARE_BRACKET = 0x5b; /* [ */ +export const BACKSLASH = 0x5c; /* \ */ +export const RIGHT_SQUARE_BRACKET = 0x5d; /* ] */ +export const GRAVE_ACCENT = 0x60; /* ` */ +export const LEFT_CURLY_BRACKET = 0x7b; /* { */ +export const VERTICAL_LINE = 0x7c; /* | */ +export const RIGHT_CURLY_BRACKET = 0x7d; /* } */ + +export function isEOL(c: number): boolean { + return c === LINE_FEED || c === CARRIAGE_RETURN; +} + +export function isWhiteSpace(c: number): boolean { + return c === TAB || c === SPACE; +} + +export function isWhiteSpaceOrEOL(c: number): boolean { + return isWhiteSpace(c) || isEOL(c); +} + +export function isFlowIndicator(c: number): boolean { + return ( + c === COMMA || + c === LEFT_SQUARE_BRACKET || + c === RIGHT_SQUARE_BRACKET || + c === LEFT_CURLY_BRACKET || + c === RIGHT_CURLY_BRACKET + ); +} diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_loader_state.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_loader_state.ts new file mode 100644 index 00000000000..2e8f75f3087 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_loader_state.ts @@ -0,0 +1,1725 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import { + AMPERSAND, + ASTERISK, + BACKSLASH, + CARRIAGE_RETURN, + COLON, + COMMA, + COMMERCIAL_AT, + DOT, + DOUBLE_QUOTE, + EXCLAMATION, + GRAVE_ACCENT, + GREATER_THAN, + isEOL, + isFlowIndicator, + isWhiteSpace, + isWhiteSpaceOrEOL, + LEFT_CURLY_BRACKET, + LEFT_SQUARE_BRACKET, + LINE_FEED, + MINUS, + PERCENT, + PLUS, + QUESTION, + RIGHT_CURLY_BRACKET, + RIGHT_SQUARE_BRACKET, + SHARP, + SINGLE_QUOTE, + SMALLER_THAN, + SPACE, + VERTICAL_LINE, +} from "./_chars.ts"; + +import { DEFAULT_SCHEMA, type Schema, type TypeMap } from "./_schema.ts"; +import type { KindType, Type } from "./_type.ts"; +import { isObject, isPlainObject } from "./_utils.ts"; + +const CONTEXT_FLOW_IN = 1; +const CONTEXT_FLOW_OUT = 2; +const CONTEXT_BLOCK_IN = 3; +const CONTEXT_BLOCK_OUT = 4; + +const CHOMPING_CLIP = 1; +const CHOMPING_STRIP = 2; +const CHOMPING_KEEP = 3; + +const PATTERN_NON_PRINTABLE = + // deno-lint-ignore no-control-regex + /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +const PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; +const PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; +const PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; +const PATTERN_TAG_URI = + /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; + +export interface LoaderStateOptions { + /** specifies a schema to use. */ + schema?: Schema; + /** compatibility with JSON.parse behaviour. */ + allowDuplicateKeys?: boolean; + /** function to call on warning messages. */ + onWarning?(error: Error): void; +} + +const ESCAPED_HEX_LENGTHS = new Map([ + [0x78, 2], // x + [0x75, 4], // u + [0x55, 8], // U +]); + +const SIMPLE_ESCAPE_SEQUENCES = new Map([ + [0x30, "\x00"], // 0 + [0x61, "\x07"], // a + [0x62, "\x08"], // b + [0x74, "\x09"], // t + [0x09, "\x09"], // Tab + [0x6e, "\x0A"], // n + [0x76, "\x0B"], // v + [0x66, "\x0C"], // f + [0x72, "\x0D"], // r + [0x65, "\x1B"], // e + [0x20, " "], // Space + [0x22, '"'], // " + [0x2f, "/"], // / + [0x5c, "\\"], // \ + [0x4e, "\x85"], // N + [0x5f, "\xA0"], // _ + [0x4c, "\u2028"], // L + [0x50, "\u2029"], // P +]); + +/** + * Converts a hexadecimal character code to its decimal value. + */ +function hexCharCodeToNumber(charCode: number) { + // Check if the character code is in the range for '0' to '9' + if (0x30 <= charCode && charCode <= 0x39) return charCode - 0x30; // Convert '0'-'9' to 0-9 + + // Normalize the character code to lowercase if it's a letter + const lc = charCode | 0x20; + + // Check if the character code is in the range for 'a' to 'f' + if (0x61 <= lc && lc <= 0x66) return lc - 0x61 + 10; // Convert 'a'-'f' to 10-15 + + return -1; +} + +/** + * Converts a decimal character code to its decimal value. + */ +function decimalCharCodeToNumber(charCode: number): number { + // Check if the character code is in the range for '0' to '9' + if (0x30 <= charCode && charCode <= 0x39) return charCode - 0x30; // Convert '0'-'9' to 0-9 + return -1; +} + +/** + * Converts a Unicode code point to a string. + */ +function codepointToChar(codepoint: number): string { + // Check if the code point is within the Basic Multilingual Plane (BMP) + if (codepoint <= 0xffff) return String.fromCharCode(codepoint); // Convert BMP code point to character + + // Encode UTF-16 surrogate pair for code points beyond BMP + // Reference: https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF + return String.fromCharCode( + ((codepoint - 0x010000) >> 10) + 0xd800, // High surrogate + ((codepoint - 0x010000) & 0x03ff) + 0xdc00, // Low surrogate + ); +} + +const INDENT = 4; +const MAX_LENGTH = 75; +const DELIMITERS = "\x00\r\n\x85\u2028\u2029"; + +function getSnippet(buffer: string, position: number): string | null { + if (!buffer) return null; + let start = position; + let end = position; + let head = ""; + let tail = ""; + + while (start > 0 && !DELIMITERS.includes(buffer.charAt(start - 1))) { + start--; + if (position - start > MAX_LENGTH / 2 - 1) { + head = " ... "; + start += 5; + break; + } + } + + while (end < buffer.length && !DELIMITERS.includes(buffer.charAt(end))) { + end++; + if (end - position > MAX_LENGTH / 2 - 1) { + tail = " ... "; + end -= 5; + break; + } + } + + const snippet = buffer.slice(start, end); + const indent = " ".repeat(INDENT); + const caretIndent = " ".repeat(INDENT + position - start + head.length); + return `${indent + head + snippet + tail}\n${caretIndent}^`; +} + +function markToString( + buffer: string, + position: number, + line: number, + column: number, +): string { + let where = `at line ${line + 1}, column ${column + 1}`; + const snippet = getSnippet(buffer, position); + if (snippet) where += `:\n${snippet}`; + return where; +} + +export class LoaderState { + input: string; + length: number; + lineIndent = 0; + lineStart = 0; + position = 0; + line = 0; + onWarning: ((error: Error) => void) | undefined; + allowDuplicateKeys: boolean; + implicitTypes: Type<"scalar">[]; + typeMap: TypeMap; + + version: string | null; + checkLineBreaks = false; + tagMap = new Map(); + anchorMap = new Map(); + tag: string | null | undefined; + anchor: string | null | undefined; + kind: string | null | undefined; + result: unknown[] | Record | string | null = ""; + + constructor( + input: string, + { + schema = DEFAULT_SCHEMA, + onWarning, + allowDuplicateKeys = false, + }: LoaderStateOptions, + ) { + this.input = input; + this.onWarning = onWarning; + this.allowDuplicateKeys = allowDuplicateKeys; + this.implicitTypes = schema.implicitTypes; + this.typeMap = schema.typeMap; + this.length = input.length; + this.version = null; + + this.readIndent(); + } + + readIndent() { + let char = this.peek(); + while (char === SPACE) { + this.lineIndent += 1; + char = this.next(); + } + } + + peek(offset = 0) { + return this.input.charCodeAt(this.position + offset); + } + next() { + this.position += 1; + return this.peek(); + } + + #createError(message: string): SyntaxError { + const mark = markToString( + this.input, + this.position, + this.line, + this.position - this.lineStart, + ); + return new SyntaxError(`${message} ${mark}`); + } + + throwError(message: string): never { + throw this.#createError(message); + } + + dispatchWarning(message: string) { + const error = this.#createError(message); + this.onWarning?.(error); + } + + yamlDirectiveHandler(...args: string[]) { + if (this.version !== null) { + return this.throwError( + "Cannot handle YAML directive: duplication of %YAML directive", + ); + } + + if (args.length !== 1) { + return this.throwError( + "Cannot handle YAML directive: YAML directive accepts exactly one argument", + ); + } + + const match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]!); + if (match === null) { + return this.throwError( + "Cannot handle YAML directive: ill-formed argument", + ); + } + + const major = parseInt(match[1]!, 10); + const minor = parseInt(match[2]!, 10); + if (major !== 1) { + return this.throwError( + "Cannot handle YAML directive: unacceptable YAML version", + ); + } + + this.version = args[0] ?? null; + this.checkLineBreaks = minor < 2; + if (minor !== 1 && minor !== 2) { + return this.dispatchWarning( + "Cannot handle YAML directive: unsupported YAML version", + ); + } + } + tagDirectiveHandler(...args: string[]) { + if (args.length !== 2) { + return this.throwError( + `Cannot handle tag directive: directive accepts exactly two arguments, received ${args.length}`, + ); + } + + const handle = args[0]!; + const prefix = args[1]!; + + if (!PATTERN_TAG_HANDLE.test(handle)) { + return this.throwError( + `Cannot handle tag directive: ill-formed handle (first argument) in "${handle}"`, + ); + } + + if (this.tagMap.has(handle)) { + return this.throwError( + `Cannot handle tag directive: previously declared suffix for "${handle}" tag handle`, + ); + } + + if (!PATTERN_TAG_URI.test(prefix)) { + return this.throwError( + "Cannot handle tag directive: ill-formed tag prefix (second argument) of the TAG directive", + ); + } + + this.tagMap.set(handle, prefix); + } + captureSegment(start: number, end: number, checkJson: boolean) { + let result: string; + if (start < end) { + result = this.input.slice(start, end); + + if (checkJson) { + for ( + let position = 0; + position < result.length; + position++ + ) { + const character = result.charCodeAt(position); + if ( + !(character === 0x09 || + (0x20 <= character && character <= 0x10ffff)) + ) { + return this.throwError( + `Expected valid JSON character: received "${character}"`, + ); + } + } + } else if (PATTERN_NON_PRINTABLE.test(result)) { + return this.throwError("Stream contains non-printable characters"); + } + + this.result += result; + } + } + readBlockSequence(nodeIndent: number): boolean { + let line: number; + let following: number; + let detected = false; + let ch: number; + const tag = this.tag; + const anchor = this.anchor; + const result: unknown[] = []; + + if (this.anchor !== null && typeof this.anchor !== "undefined") { + this.anchorMap.set(this.anchor, result); + } + + ch = this.peek(); + + while (ch !== 0) { + if (ch !== MINUS) { + break; + } + + following = this.peek(1); + + if (!isWhiteSpaceOrEOL(following)) { + break; + } + + detected = true; + this.position++; + + if (this.skipSeparationSpace(true, -1)) { + if (this.lineIndent <= nodeIndent) { + result.push(null); + ch = this.peek(); + continue; + } + } + + line = this.line; + this.composeNode(nodeIndent, CONTEXT_BLOCK_IN, false, true); + result.push(this.result); + this.skipSeparationSpace(true, -1); + + ch = this.peek(); + + if ((this.line === line || this.lineIndent > nodeIndent) && ch !== 0) { + return this.throwError( + "Cannot read block sequence: bad indentation of a sequence entry", + ); + } else if (this.lineIndent < nodeIndent) { + break; + } + } + + if (detected) { + this.tag = tag; + this.anchor = anchor; + this.kind = "sequence"; + this.result = result; + return true; + } + return false; + } + mergeMappings( + destination: Record, + source: Record, + overridableKeys: Set, + ) { + if (!isObject(source)) { + return this.throwError( + "Cannot merge mappings: the provided source object is unacceptable", + ); + } + + for (const [key, value] of Object.entries(source)) { + if (Object.hasOwn(destination, key)) continue; + Object.defineProperty(destination, key, { + value, + writable: true, + enumerable: true, + configurable: true, + }); + overridableKeys.add(key); + } + } + storeMappingPair( + result: Record, + overridableKeys: Set, + keyTag: string | null, + keyNode: Record | unknown[] | string | null, + valueNode: unknown, + startLine?: number, + startPos?: number, + ): Record { + // The output is a plain object here, so keys can only be strings. + // We need to convert keyNode to a string, but doing so can hang the process + // (deeply nested arrays that explode exponentially using aliases). + if (Array.isArray(keyNode)) { + keyNode = Array.prototype.slice.call(keyNode); + + for (let index = 0; index < keyNode.length; index++) { + if (Array.isArray(keyNode[index])) { + return this.throwError( + "Cannot store mapping pair: nested arrays are not supported inside keys", + ); + } + + if (typeof keyNode === "object" && isPlainObject(keyNode[index])) { + keyNode[index] = "[object Object]"; + } + } + } + + // Avoid code execution in load() via toString property + // (still use its own toString for arrays, timestamps, + // and whatever user schema extensions happen to have @@toStringTag) + if (typeof keyNode === "object" && isPlainObject(keyNode)) { + keyNode = "[object Object]"; + } + + keyNode = String(keyNode); + + if (keyTag === "tag:yaml.org,2002:merge") { + if (Array.isArray(valueNode)) { + for ( + let index = 0; + index < valueNode.length; + index++ + ) { + this.mergeMappings(result, valueNode[index], overridableKeys); + } + } else { + this.mergeMappings( + result, + valueNode as Record, + overridableKeys, + ); + } + } else { + if ( + !this.allowDuplicateKeys && + !overridableKeys.has(keyNode) && + Object.hasOwn(result, keyNode) + ) { + this.line = startLine || this.line; + this.position = startPos || this.position; + return this.throwError("Cannot store mapping pair: duplicated key"); + } + Object.defineProperty(result, keyNode, { + value: valueNode, + writable: true, + enumerable: true, + configurable: true, + }); + overridableKeys.delete(keyNode); + } + + return result; + } + readLineBreak() { + const ch = this.peek(); + + if (ch === LINE_FEED) { + this.position++; + } else if (ch === CARRIAGE_RETURN) { + this.position++; + if (this.peek() === LINE_FEED) { + this.position++; + } + } else { + return this.throwError("Cannot read line: line break not found"); + } + + this.line += 1; + this.lineStart = this.position; + } + skipSeparationSpace(allowComments: boolean, checkIndent: number): number { + let lineBreaks = 0; + let ch = this.peek(); + + while (ch !== 0) { + while (isWhiteSpace(ch)) { + ch = this.next(); + } + + if (allowComments && ch === SHARP) { + do { + ch = this.next(); + } while (ch !== LINE_FEED && ch !== CARRIAGE_RETURN && ch !== 0); + } + + if (isEOL(ch)) { + this.readLineBreak(); + + ch = this.peek(); + lineBreaks++; + this.lineIndent = 0; + + this.readIndent(); + ch = this.peek(); + } else { + break; + } + } + + if ( + checkIndent !== -1 && + lineBreaks !== 0 && + this.lineIndent < checkIndent + ) { + this.dispatchWarning("deficient indentation"); + } + + return lineBreaks; + } + testDocumentSeparator(): boolean { + let ch = this.peek(); + + // Condition this.position === this.lineStart is tested + // in parent on each call, for efficiency. No needs to test here again. + if ( + (ch === MINUS || ch === DOT) && + ch === this.peek(1) && + ch === this.peek(2) + ) { + ch = this.peek(3); + + if (ch === 0 || isWhiteSpaceOrEOL(ch)) { + return true; + } + } + + return false; + } + writeFoldedLines(count: number) { + if (count === 1) { + this.result += " "; + } else if (count > 1) { + this.result += "\n".repeat(count - 1); + } + } + readPlainScalar(nodeIndent: number, withinFlowCollection: boolean): boolean { + const kind = this.kind; + const result = this.result; + let ch = this.peek(); + + if ( + isWhiteSpaceOrEOL(ch) || + isFlowIndicator(ch) || + ch === SHARP || + ch === AMPERSAND || + ch === ASTERISK || + ch === EXCLAMATION || + ch === VERTICAL_LINE || + ch === GREATER_THAN || + ch === SINGLE_QUOTE || + ch === DOUBLE_QUOTE || + ch === PERCENT || + ch === COMMERCIAL_AT || + ch === GRAVE_ACCENT + ) { + return false; + } + + let following: number; + if (ch === QUESTION || ch === MINUS) { + following = this.peek(1); + + if ( + isWhiteSpaceOrEOL(following) || + (withinFlowCollection && isFlowIndicator(following)) + ) { + return false; + } + } + + this.kind = "scalar"; + this.result = ""; + let captureEnd = this.position; + let captureStart = this.position; + let hasPendingContent = false; + let line = 0; + while (ch !== 0) { + if (ch === COLON) { + following = this.peek(1); + + if ( + isWhiteSpaceOrEOL(following) || + (withinFlowCollection && isFlowIndicator(following)) + ) { + break; + } + } else if (ch === SHARP) { + const preceding = this.peek(-1); + + if (isWhiteSpaceOrEOL(preceding)) { + break; + } + } else if ( + (this.position === this.lineStart && this.testDocumentSeparator()) || + (withinFlowCollection && isFlowIndicator(ch)) + ) { + break; + } else if (isEOL(ch)) { + line = this.line; + const lineStart = this.lineStart; + const lineIndent = this.lineIndent; + this.skipSeparationSpace(false, -1); + + if (this.lineIndent >= nodeIndent) { + hasPendingContent = true; + ch = this.peek(); + continue; + } else { + this.position = captureEnd; + this.line = line; + this.lineStart = lineStart; + this.lineIndent = lineIndent; + break; + } + } + + if (hasPendingContent) { + this.captureSegment(captureStart, captureEnd, false); + this.writeFoldedLines(this.line - line); + captureStart = captureEnd = this.position; + hasPendingContent = false; + } + + if (!isWhiteSpace(ch)) { + captureEnd = this.position + 1; + } + + ch = this.next(); + } + + this.captureSegment(captureStart, captureEnd, false); + + if (this.result) { + return true; + } + + this.kind = kind; + this.result = result; + return false; + } + readSingleQuotedScalar(nodeIndent: number): boolean { + let ch; + let captureStart; + let captureEnd; + + ch = this.peek(); + + if (ch !== SINGLE_QUOTE) { + return false; + } + + this.kind = "scalar"; + this.result = ""; + this.position++; + captureStart = captureEnd = this.position; + + while ((ch = this.peek()) !== 0) { + if (ch === SINGLE_QUOTE) { + this.captureSegment(captureStart, this.position, true); + ch = this.next(); + + if (ch === SINGLE_QUOTE) { + captureStart = this.position; + this.position++; + captureEnd = this.position; + } else { + return true; + } + } else if (isEOL(ch)) { + this.captureSegment(captureStart, captureEnd, true); + this.writeFoldedLines(this.skipSeparationSpace(false, nodeIndent)); + captureStart = captureEnd = this.position; + } else if ( + this.position === this.lineStart && + this.testDocumentSeparator() + ) { + return this.throwError( + "Unexpected end of the document within a single quoted scalar", + ); + } else { + this.position++; + captureEnd = this.position; + } + } + + return this.throwError( + "Unexpected end of the stream within a single quoted scalar", + ); + } + readDoubleQuotedScalar(nodeIndent: number): boolean { + let ch = this.peek(); + + if (ch !== DOUBLE_QUOTE) { + return false; + } + + this.kind = "scalar"; + this.result = ""; + this.position++; + let captureEnd = this.position; + let captureStart = this.position; + let tmp: number; + while ((ch = this.peek()) !== 0) { + if (ch === DOUBLE_QUOTE) { + this.captureSegment(captureStart, this.position, true); + this.position++; + return true; + } + if (ch === BACKSLASH) { + this.captureSegment(captureStart, this.position, true); + ch = this.next(); + + if (isEOL(ch)) { + this.skipSeparationSpace(false, nodeIndent); + } else if (ch < 256 && SIMPLE_ESCAPE_SEQUENCES.has(ch)) { + this.result += SIMPLE_ESCAPE_SEQUENCES.get(ch); + this.position++; + } else if ((tmp = ESCAPED_HEX_LENGTHS.get(ch) ?? 0) > 0) { + let hexLength = tmp; + let hexResult = 0; + + for (; hexLength > 0; hexLength--) { + ch = this.next(); + + if ((tmp = hexCharCodeToNumber(ch)) >= 0) { + hexResult = (hexResult << 4) + tmp; + } else { + return this.throwError( + "Cannot read double quoted scalar: expected hexadecimal character", + ); + } + } + + this.result += codepointToChar(hexResult); + + this.position++; + } else { + return this.throwError( + "Cannot read double quoted scalar: unknown escape sequence", + ); + } + + captureStart = captureEnd = this.position; + } else if (isEOL(ch)) { + this.captureSegment(captureStart, captureEnd, true); + this.writeFoldedLines(this.skipSeparationSpace(false, nodeIndent)); + captureStart = captureEnd = this.position; + } else if ( + this.position === this.lineStart && + this.testDocumentSeparator() + ) { + return this.throwError( + "Unexpected end of the document within a double quoted scalar", + ); + } else { + this.position++; + captureEnd = this.position; + } + } + + return this.throwError( + "Unexpected end of the stream within a double quoted scalar", + ); + } + readFlowCollection(nodeIndent: number): boolean { + let ch = this.peek(); + let terminator: number; + let isMapping = true; + let result = {}; + if (ch === LEFT_SQUARE_BRACKET) { + terminator = RIGHT_SQUARE_BRACKET; + isMapping = false; + result = []; + } else if (ch === LEFT_CURLY_BRACKET) { + terminator = RIGHT_CURLY_BRACKET; + } else { + return false; + } + + if (this.anchor !== null && typeof this.anchor !== "undefined") { + this.anchorMap.set(this.anchor, result); + } + + ch = this.next(); + + const tag = this.tag; + const anchor = this.anchor; + let readNext = true; + let valueNode = null; + let keyNode = null; + let keyTag: string | null = null; + let isExplicitPair = false; + let isPair = false; + let following = 0; + let line = 0; + const overridableKeys = new Set(); + while (ch !== 0) { + this.skipSeparationSpace(true, nodeIndent); + + ch = this.peek(); + + if (ch === terminator) { + this.position++; + this.tag = tag; + this.anchor = anchor; + this.kind = isMapping ? "mapping" : "sequence"; + this.result = result; + return true; + } + if (!readNext) { + return this.throwError( + "Cannot read flow collection: missing comma between flow collection entries", + ); + } + + keyTag = keyNode = valueNode = null; + isPair = isExplicitPair = false; + + if (ch === QUESTION) { + following = this.peek(1); + + if (isWhiteSpaceOrEOL(following)) { + isPair = isExplicitPair = true; + this.position++; + this.skipSeparationSpace(true, nodeIndent); + } + } + + line = this.line; + this.composeNode(nodeIndent, CONTEXT_FLOW_IN, false, true); + keyTag = this.tag || null; + keyNode = this.result; + this.skipSeparationSpace(true, nodeIndent); + + ch = this.peek(); + + if ((isExplicitPair || this.line === line) && ch === COLON) { + isPair = true; + ch = this.next(); + this.skipSeparationSpace(true, nodeIndent); + this.composeNode(nodeIndent, CONTEXT_FLOW_IN, false, true); + valueNode = this.result; + } + + if (isMapping) { + this.storeMappingPair( + result as Record, + overridableKeys, + keyTag, + keyNode, + valueNode, + ); + } else if (isPair) { + (result as Record[]).push( + this.storeMappingPair( + {}, + overridableKeys, + keyTag, + keyNode, + valueNode, + ), + ); + } else { + (result as unknown[]).push(keyNode); + } + + this.skipSeparationSpace(true, nodeIndent); + + ch = this.peek(); + + if (ch === COMMA) { + readNext = true; + ch = this.next(); + } else { + readNext = false; + } + } + + return this.throwError( + "Cannot read flow collection: unexpected end of the stream within a flow collection", + ); + } + // Handles block scaler styles: e.g. '|', '>', '|-' and '>-'. + // https://yaml.org/spec/1.2.2/#81-block-scalar-styles + readBlockScalar(nodeIndent: number): boolean { + let chomping = CHOMPING_CLIP; + let didReadContent = false; + let detectedIndent = false; + let textIndent = nodeIndent; + let emptyLines = 0; + let atMoreIndented = false; + + let ch = this.peek(); + + let folding = false; + if (ch === VERTICAL_LINE) { + folding = false; + } else if (ch === GREATER_THAN) { + folding = true; + } else { + return false; + } + + this.kind = "scalar"; + this.result = ""; + + let tmp = 0; + while (ch !== 0) { + ch = this.next(); + + if (ch === PLUS || ch === MINUS) { + if (CHOMPING_CLIP === chomping) { + chomping = ch === PLUS ? CHOMPING_KEEP : CHOMPING_STRIP; + } else { + return this.throwError( + "Cannot read block: chomping mode identifier repeated", + ); + } + } else if ((tmp = decimalCharCodeToNumber(ch)) >= 0) { + if (tmp === 0) { + return this.throwError( + "Cannot read block: indentation width must be greater than 0", + ); + } else if (!detectedIndent) { + textIndent = nodeIndent + tmp - 1; + detectedIndent = true; + } else { + return this.throwError( + "Cannot read block: indentation width identifier repeated", + ); + } + } else { + break; + } + } + + if (isWhiteSpace(ch)) { + do { + ch = this.next(); + } while (isWhiteSpace(ch)); + + if (ch === SHARP) { + do { + ch = this.next(); + } while (!isEOL(ch) && ch !== 0); + } + } + + while (ch !== 0) { + this.readLineBreak(); + this.lineIndent = 0; + + ch = this.peek(); + + while ( + (!detectedIndent || this.lineIndent < textIndent) && + ch === SPACE + ) { + this.lineIndent++; + ch = this.next(); + } + + if (!detectedIndent && this.lineIndent > textIndent) { + textIndent = this.lineIndent; + } + + if (isEOL(ch)) { + emptyLines++; + continue; + } + + // End of the scalar. + if (this.lineIndent < textIndent) { + // Perform the chomping. + if (chomping === CHOMPING_KEEP) { + this.result += "\n".repeat( + didReadContent ? 1 + emptyLines : emptyLines, + ); + } else if (chomping === CHOMPING_CLIP) { + if (didReadContent) { + // i.e. only if the scalar is not empty. + this.result += "\n"; + } + } + + // Break this `while` cycle and go to the function's epilogue. + break; + } + + // Folded style: use fancy rules to handle line breaks. + if (folding) { + // Lines starting with white space characters (more-indented lines) are not folded. + if (isWhiteSpace(ch)) { + atMoreIndented = true; + // except for the first content line (cf. Example 8.1) + this.result += "\n".repeat( + didReadContent ? 1 + emptyLines : emptyLines, + ); + + // End of more-indented block. + } else if (atMoreIndented) { + atMoreIndented = false; + this.result += "\n".repeat(emptyLines + 1); + + // Just one line break - perceive as the same line. + } else if (emptyLines === 0) { + if (didReadContent) { + // i.e. only if we have already read some scalar content. + this.result += " "; + } + + // Several line breaks - perceive as different lines. + } else { + this.result += "\n".repeat(emptyLines); + } + + // Literal style: just add exact number of line breaks between content lines. + } else { + // Keep all line breaks except the header line break. + this.result += "\n".repeat( + didReadContent ? 1 + emptyLines : emptyLines, + ); + } + + didReadContent = true; + detectedIndent = true; + emptyLines = 0; + const captureStart = this.position; + + while (!isEOL(ch) && ch !== 0) { + ch = this.next(); + } + + this.captureSegment(captureStart, this.position, false); + } + + return true; + } + readBlockMapping(nodeIndent: number, flowIndent: number): boolean { + const tag = this.tag; + const anchor = this.anchor; + const result = {}; + const overridableKeys = new Set(); + let following: number; + let allowCompact = false; + let line: number; + let pos: number; + let keyTag = null; + let keyNode = null; + let valueNode = null; + let atExplicitKey = false; + let detected = false; + let ch: number; + + if (this.anchor !== null && typeof this.anchor !== "undefined") { + this.anchorMap.set(this.anchor, result); + } + + ch = this.peek(); + + while (ch !== 0) { + following = this.peek(1); + line = this.line; // Save the current line. + pos = this.position; + + // + // Explicit notation case. There are two separate blocks: + // first for the key (denoted by "?") and second for the value (denoted by ":") + // + if ((ch === QUESTION || ch === COLON) && isWhiteSpaceOrEOL(following)) { + if (ch === QUESTION) { + if (atExplicitKey) { + this.storeMappingPair( + result, + overridableKeys, + keyTag as string, + keyNode, + null, + ); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = true; + allowCompact = true; + } else if (atExplicitKey) { + // i.e. 0x3A/* : */ === character after the explicit key. + atExplicitKey = false; + allowCompact = true; + } else { + return this.throwError( + "Cannot read block as explicit mapping pair is incomplete: a key node is missed or followed by a non-tabulated empty line", + ); + } + + this.position += 1; + ch = following; + + // + // Implicit notation case. Flow-style node as the key first, then ":", and the value. + // + } else if (this.composeNode(flowIndent, CONTEXT_FLOW_OUT, false, true)) { + if (this.line === line) { + ch = this.peek(); + + while (isWhiteSpace(ch)) { + ch = this.next(); + } + + if (ch === COLON) { + ch = this.next(); + + if (!isWhiteSpaceOrEOL(ch)) { + return this.throwError( + "Cannot read block: a whitespace character is expected after the key-value separator within a block mapping", + ); + } + + if (atExplicitKey) { + this.storeMappingPair( + result, + overridableKeys, + keyTag as string, + keyNode, + null, + ); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = false; + allowCompact = false; + keyTag = this.tag; + keyNode = this.result; + } else if (detected) { + return this.throwError( + "Cannot read an implicit mapping pair: missing colon", + ); + } else { + this.tag = tag; + this.anchor = anchor; + return true; // Keep the result of `composeNode`. + } + } else if (detected) { + return this.throwError( + "Cannot read a block mapping entry: a multiline key may not be an implicit key", + ); + } else { + this.tag = tag; + this.anchor = anchor; + return true; // Keep the result of `composeNode`. + } + } else { + break; // Reading is done. Go to the epilogue. + } + + // + // Common reading code for both explicit and implicit notations. + // + if (this.line === line || this.lineIndent > nodeIndent) { + if ( + this.composeNode(nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact) + ) { + if (atExplicitKey) { + keyNode = this.result; + } else { + valueNode = this.result; + } + } + + if (!atExplicitKey) { + this.storeMappingPair( + result, + overridableKeys, + keyTag as string, + keyNode, + valueNode, + line, + pos, + ); + keyTag = keyNode = valueNode = null; + } + + this.skipSeparationSpace(true, -1); + ch = this.peek(); + } + + if (this.lineIndent > nodeIndent && ch !== 0) { + return this.throwError( + "Cannot read block: bad indentation of a mapping entry", + ); + } else if (this.lineIndent < nodeIndent) { + break; + } + } + + // + // Epilogue. + // + + // Special case: last mapping's node contains only the key in explicit notation. + if (atExplicitKey) { + this.storeMappingPair( + result, + overridableKeys, + keyTag as string, + keyNode, + null, + ); + } + + // Expose the resulting mapping. + if (detected) { + this.tag = tag; + this.anchor = anchor; + this.kind = "mapping"; + this.result = result; + } + + return detected; + } + readTagProperty(): boolean { + let position: number; + let isVerbatim = false; + let isNamed = false; + let tagHandle = ""; + let tagName: string; + let ch: number; + + ch = this.peek(); + + if (ch !== EXCLAMATION) return false; + + if (this.tag !== null) { + return this.throwError( + "Cannot read tag property: duplication of a tag property", + ); + } + + ch = this.next(); + + if (ch === SMALLER_THAN) { + isVerbatim = true; + ch = this.next(); + } else if (ch === EXCLAMATION) { + isNamed = true; + tagHandle = "!!"; + ch = this.next(); + } else { + tagHandle = "!"; + } + + position = this.position; + + if (isVerbatim) { + do { + ch = this.next(); + } while (ch !== 0 && ch !== GREATER_THAN); + + if (this.position < this.length) { + tagName = this.input.slice(position, this.position); + ch = this.next(); + } else { + return this.throwError( + "Cannot read tag property: unexpected end of stream", + ); + } + } else { + while (ch !== 0 && !isWhiteSpaceOrEOL(ch)) { + if (ch === EXCLAMATION) { + if (!isNamed) { + tagHandle = this.input.slice(position - 1, this.position + 1); + + if (!PATTERN_TAG_HANDLE.test(tagHandle)) { + return this.throwError( + "Cannot read tag property: named tag handle contains invalid characters", + ); + } + + isNamed = true; + position = this.position + 1; + } else { + return this.throwError( + "Cannot read tag property: tag suffix cannot contain an exclamation mark", + ); + } + } + + ch = this.next(); + } + + tagName = this.input.slice(position, this.position); + + if (PATTERN_FLOW_INDICATORS.test(tagName)) { + return this.throwError( + "Cannot read tag property: tag suffix cannot contain flow indicator characters", + ); + } + } + + if (tagName && !PATTERN_TAG_URI.test(tagName)) { + return this.throwError( + `Cannot read tag property: invalid characters in tag name "${tagName}"`, + ); + } + + if (isVerbatim) { + this.tag = tagName; + } else if (this.tagMap.has(tagHandle)) { + this.tag = this.tagMap.get(tagHandle) + tagName; + } else if (tagHandle === "!") { + this.tag = `!${tagName}`; + } else if (tagHandle === "!!") { + this.tag = `tag:yaml.org,2002:${tagName}`; + } else { + return this.throwError( + `Cannot read tag property: undeclared tag handle "${tagHandle}"`, + ); + } + + return true; + } + readAnchorProperty(): boolean { + let ch = this.peek(); + if (ch !== AMPERSAND) return false; + + if (this.anchor !== null) { + return this.throwError( + "Cannot read anchor property: duplicate anchor property", + ); + } + ch = this.next(); + + const position = this.position; + while (ch !== 0 && !isWhiteSpaceOrEOL(ch) && !isFlowIndicator(ch)) { + ch = this.next(); + } + + if (this.position === position) { + return this.throwError( + "Cannot read anchor property: name of an anchor node must contain at least one character", + ); + } + + this.anchor = this.input.slice(position, this.position); + return true; + } + readAlias(): boolean { + if (this.peek() !== ASTERISK) return false; + + let ch = this.next(); + + const position = this.position; + + while (ch !== 0 && !isWhiteSpaceOrEOL(ch) && !isFlowIndicator(ch)) { + ch = this.next(); + } + + if (this.position === position) { + return this.throwError( + "Cannot read alias: alias name must contain at least one character", + ); + } + + const alias = this.input.slice(position, this.position); + if (!this.anchorMap.has(alias)) { + return this.throwError( + `Cannot read alias: unidentified alias "${alias}"`, + ); + } + + this.result = this.anchorMap.get(alias); + this.skipSeparationSpace(true, -1); + return true; + } + + composeNode( + parentIndent: number, + nodeContext: number, + allowToSeek: boolean, + allowCompact: boolean, + ): boolean { + let allowBlockScalars: boolean; + let allowBlockCollections: boolean; + let indentStatus = 1; // 1: this>parent, 0: this=parent, -1: this; + let flowIndent: number; + let blockIndent: number; + + this.tag = null; + this.anchor = null; + this.kind = null; + this.result = null; + + const allowBlockStyles = (allowBlockScalars = + allowBlockCollections = + CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext); + + if (allowToSeek) { + if (this.skipSeparationSpace(true, -1)) { + atNewLine = true; + + if (this.lineIndent > parentIndent) { + indentStatus = 1; + } else if (this.lineIndent === parentIndent) { + indentStatus = 0; + } else if (this.lineIndent < parentIndent) { + indentStatus = -1; + } + } + } + + if (indentStatus === 1) { + while (this.readTagProperty() || this.readAnchorProperty()) { + if (this.skipSeparationSpace(true, -1)) { + atNewLine = true; + allowBlockCollections = allowBlockStyles; + + if (this.lineIndent > parentIndent) { + indentStatus = 1; + } else if (this.lineIndent === parentIndent) { + indentStatus = 0; + } else if (this.lineIndent < parentIndent) { + indentStatus = -1; + } + } else { + allowBlockCollections = false; + } + } + } + + if (allowBlockCollections) { + allowBlockCollections = atNewLine || allowCompact; + } + + if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { + const cond = CONTEXT_FLOW_IN === nodeContext || + CONTEXT_FLOW_OUT === nodeContext; + flowIndent = cond ? parentIndent : parentIndent + 1; + + blockIndent = this.position - this.lineStart; + + if (indentStatus === 1) { + if ( + (allowBlockCollections && + (this.readBlockSequence(blockIndent) || + this.readBlockMapping(blockIndent, flowIndent))) || + this.readFlowCollection(flowIndent) + ) { + hasContent = true; + } else { + if ( + (allowBlockScalars && this.readBlockScalar(flowIndent)) || + this.readSingleQuotedScalar(flowIndent) || + this.readDoubleQuotedScalar(flowIndent) + ) { + hasContent = true; + } else if (this.readAlias()) { + hasContent = true; + + if (this.tag !== null || this.anchor !== null) { + return this.throwError( + "Cannot compose node: alias node should not have any properties", + ); + } + } else if ( + this.readPlainScalar(flowIndent, CONTEXT_FLOW_IN === nodeContext) + ) { + hasContent = true; + + if (this.tag === null) { + this.tag = "?"; + } + } + + if (this.anchor !== null) { + this.anchorMap.set(this.anchor, this.result); + } + } + } else if (indentStatus === 0) { + // Special case: block sequences are allowed to have same indentation level as the parent. + // http://www.yaml.org/spec/1.2/spec.html#id2799784 + hasContent = allowBlockCollections && + this.readBlockSequence(blockIndent); + } + } + + if (this.tag !== null && this.tag !== "!") { + if (this.tag === "?") { + for ( + let typeIndex = 0; + typeIndex < this.implicitTypes.length; + typeIndex++ + ) { + type = this.implicitTypes[typeIndex]!; + + // Implicit resolving is not allowed for non-scalar types, and '?' + // non-specific tag is only assigned to plain scalars. So, it isn't + // needed to check for 'kind' conformity. + + if (type.resolve(this.result)) { + // `state.result` updated in resolver if matched + this.result = type.construct(this.result); + this.tag = type.tag; + if (this.anchor !== null) { + this.anchorMap.set(this.anchor, this.result); + } + break; + } + } + } else if (this.typeMap[this.kind ?? "fallback"].has(this.tag)) { + const map = this.typeMap[this.kind ?? "fallback"]; + type = map.get(this.tag)!; + + if (this.result !== null && type.kind !== this.kind) { + return this.throwError( + `Unacceptable node kind for !<${this.tag}> tag: it should be "${type.kind}", not "${this.kind}"`, + ); + } + + if (!type.resolve(this.result)) { + // `state.result` updated in resolver if matched + return this.throwError( + `Cannot resolve a node with !<${this.tag}> explicit tag`, + ); + } else { + this.result = type.construct(this.result); + if (this.anchor !== null) { + this.anchorMap.set(this.anchor, this.result); + } + } + } else { + return this.throwError(`Cannot resolve unknown tag !<${this.tag}>`); + } + } + + return this.tag !== null || this.anchor !== null || hasContent; + } + + readDocument() { + const documentStart = this.position; + let position: number; + let directiveName: string; + let directiveArgs: string[]; + let hasDirectives = false; + let ch: number; + + this.version = null; + this.checkLineBreaks = false; + this.tagMap = new Map(); + this.anchorMap = new Map(); + + while ((ch = this.peek()) !== 0) { + this.skipSeparationSpace(true, -1); + + ch = this.peek(); + + if (this.lineIndent > 0 || ch !== PERCENT) { + break; + } + + hasDirectives = true; + ch = this.next(); + position = this.position; + + while (ch !== 0 && !isWhiteSpaceOrEOL(ch)) { + ch = this.next(); + } + + directiveName = this.input.slice(position, this.position); + directiveArgs = []; + + if (directiveName.length < 1) { + return this.throwError( + "Cannot read document: directive name length must be greater than zero", + ); + } + + while (ch !== 0) { + while (isWhiteSpace(ch)) { + ch = this.next(); + } + + if (ch === SHARP) { + do { + ch = this.next(); + } while (ch !== 0 && !isEOL(ch)); + break; + } + + if (isEOL(ch)) break; + + position = this.position; + + while (ch !== 0 && !isWhiteSpaceOrEOL(ch)) { + ch = this.next(); + } + + directiveArgs.push(this.input.slice(position, this.position)); + } + + if (ch !== 0) this.readLineBreak(); + + switch (directiveName) { + case "YAML": + this.yamlDirectiveHandler(...directiveArgs); + break; + case "TAG": + this.tagDirectiveHandler(...directiveArgs); + break; + default: + this.dispatchWarning( + `unknown document directive "${directiveName}"`, + ); + break; + } + } + + this.skipSeparationSpace(true, -1); + + if ( + this.lineIndent === 0 && + this.peek() === MINUS && + this.peek(1) === MINUS && + this.peek(2) === MINUS + ) { + this.position += 3; + this.skipSeparationSpace(true, -1); + } else if (hasDirectives) { + return this.throwError( + "Cannot read document: directives end mark is expected", + ); + } + + this.composeNode(this.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); + this.skipSeparationSpace(true, -1); + + if ( + this.checkLineBreaks && + PATTERN_NON_ASCII_LINE_BREAKS.test( + this.input.slice(documentStart, this.position), + ) + ) { + this.dispatchWarning("non-ASCII line breaks are interpreted as content"); + } + + if (this.position === this.lineStart && this.testDocumentSeparator()) { + if (this.peek() === DOT) { + this.position += 3; + this.skipSeparationSpace(true, -1); + } + } else if (this.position < this.length - 1) { + return this.throwError( + "Cannot read document: end of the stream or a document separator is expected", + ); + } + + return this.result; + } + + *readDocuments() { + while (this.position < this.length - 1) { + yield this.readDocument(); + } + } +} diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_schema.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_schema.ts new file mode 100644 index 00000000000..2c1da4441ba --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_schema.ts @@ -0,0 +1,168 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import type { KindType, Type } from "./_type.ts"; +import { binary } from "./_type/binary.ts"; +import { bool } from "./_type/bool.ts"; +import { float } from "./_type/float.ts"; +import { int } from "./_type/int.ts"; +import { map } from "./_type/map.ts"; +import { merge } from "./_type/merge.ts"; +import { nil } from "./_type/nil.ts"; +import { omap } from "./_type/omap.ts"; +import { pairs } from "./_type/pairs.ts"; +import { regexp } from "./_type/regexp.ts"; +import { seq } from "./_type/seq.ts"; +import { set } from "./_type/set.ts"; +import { str } from "./_type/str.ts"; +import { timestamp } from "./_type/timestamp.ts"; +import { undefinedType } from "./_type/undefined.ts"; + +/** + * Name of the schema to use. + * + * > [!NOTE] + * > It is recommended to use the schema that is most appropriate for your use + * > case. Doing so will avoid any unnecessary processing and benefit + * > performance. + * + * Options include: + * - `failsafe`: supports generic mappings, generic sequences and generic + * strings. + * - `json`: extends `failsafe` schema by also supporting nulls, booleans, + * integers and floats. + * - `core`: functionally the same as `json` schema. + * - `default`: extends `core` schema by also supporting binary, omap, pairs and + * set types. + * - `extended`: extends `default` schema by also supporting regular + * expressions and undefined values. + * + * See + * {@link https://yaml.org/spec/1.2.2/#chapter-10-recommended-schemas | YAML 1.2 spec} + * for more details on the `failsafe`, `json` and `core` schemas. + */ +export type SchemaType = "failsafe" | "json" | "core" | "default" | "extended"; + +type ImplicitType = Type<"scalar">; +type ExplicitType = Type; + +export type TypeMap = Record< + KindType | "fallback", + Map +>; + +function createTypeMap( + implicitTypes: ImplicitType[], + explicitTypes: ExplicitType[], +): TypeMap { + const result: TypeMap = { + fallback: new Map(), + mapping: new Map(), + scalar: new Map(), + sequence: new Map(), + }; + const fallbackMap = result.fallback; + for (const type of [...implicitTypes, ...explicitTypes]) { + const map = result[type.kind]; + map.set(type.tag, type); + fallbackMap.set(type.tag, type); + } + return result; +} + +export interface Schema { + implicitTypes: ImplicitType[]; + explicitTypes: ExplicitType[]; + typeMap: TypeMap; +} + +function createSchema({ explicitTypes = [], implicitTypes = [], include }: { + implicitTypes?: ImplicitType[]; + explicitTypes?: ExplicitType[]; + include?: Schema; +}): Schema { + if (include) { + implicitTypes.push(...include.implicitTypes); + explicitTypes.push(...include.explicitTypes); + } + const typeMap = createTypeMap(implicitTypes, explicitTypes); + return { implicitTypes, explicitTypes, typeMap }; +} + +/** + * Standard YAML's failsafe schema. + * + * @see {@link http://www.yaml.org/spec/1.2/spec.html#id2802346} + */ +const FAILSAFE_SCHEMA = createSchema({ + explicitTypes: [str, seq, map], +}); + +/** + * Standard YAML's JSON schema. + * + * @see {@link http://www.yaml.org/spec/1.2/spec.html#id2803231} + */ +const JSON_SCHEMA = createSchema({ + implicitTypes: [nil, bool, int, float], + include: FAILSAFE_SCHEMA, +}); + +/** + * Standard YAML's core schema. + * + * @see {@link http://www.yaml.org/spec/1.2/spec.html#id2804923} + */ +const CORE_SCHEMA = createSchema({ + include: JSON_SCHEMA, +}); + +/** + * Default YAML schema. It is not described in the YAML specification. + */ +export const DEFAULT_SCHEMA = createSchema({ + explicitTypes: [binary, omap, pairs, set], + implicitTypes: [timestamp, merge], + include: CORE_SCHEMA, +}); + +/*** + * Extends JS-YAML default schema with additional JavaScript types + * It is not described in the YAML specification. + * Functions are no longer supported for security reasons. + * + * @example + * ```ts + * import { parse } from "@std/yaml"; + * + * const data = parse( + * ` + * regexp: + * simple: !!js/regexp foobar + * modifiers: !!js/regexp /foobar/mi + * undefined: !!js/undefined ~ + * # Disabled, see: https://github.com/denoland/deno_std/pull/1275 + * # function: !!js/function > + * # function foobar() { + * # return 'hello world!'; + * # } + * `, + * { schema: "extended" }, + * ); + * ``` + */ +const EXTENDED_SCHEMA = createSchema({ + explicitTypes: [regexp, undefinedType], + include: DEFAULT_SCHEMA, +}); + +export const SCHEMA_MAP = new Map([ + ["core", CORE_SCHEMA], + ["default", DEFAULT_SCHEMA], + ["failsafe", FAILSAFE_SCHEMA], + ["json", JSON_SCHEMA], + ["extended", EXTENDED_SCHEMA], +]); diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_type.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_type.ts new file mode 100644 index 00000000000..01396c98f0e --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_type.ts @@ -0,0 +1,33 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +export type KindType = "sequence" | "scalar" | "mapping"; +/** + * The style variation for `styles` option of {@linkcode stringify} + */ +export type StyleVariant = + | "lowercase" + | "uppercase" + | "camelcase" + | "decimal" + | "binary" + | "octal" + | "hexadecimal"; + +export type RepresentFn = (data: D, style?: StyleVariant) => string; + +// deno-lint-ignore no-explicit-any +export interface Type { + tag: string; + kind: K; + predicate?: (data: unknown) => data is D; + represent?: RepresentFn | Record>; + defaultStyle?: StyleVariant; + // deno-lint-ignore no-explicit-any + resolve: (data: any) => boolean; + // deno-lint-ignore no-explicit-any + construct: (data: any) => D; +} diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_type/binary.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/binary.ts new file mode 100644 index 00000000000..e935cd0d68f --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/binary.ts @@ -0,0 +1,127 @@ +// Ported from js-yaml v3.13.1: +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +import type { Type } from "../_type.ts"; + +// [ 64, 65, 66 ] -> [ padding, CR, LF ] +const BASE64_MAP = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r"; + +function resolveYamlBinary(data: string): boolean { + if (data === null) return false; + + let code: number; + let bitlen = 0; + const max = data.length; + const map = BASE64_MAP; + + // Convert one by one. + for (let idx = 0; idx < max; idx++) { + code = map.indexOf(data.charAt(idx)); + + // Skip CR/LF + if (code > 64) continue; + + // Fail on illegal characters + if (code < 0) return false; + + bitlen += 6; + } + + // If there are any bits left, source was corrupted + return bitlen % 8 === 0; +} + +function constructYamlBinary(data: string): Uint8Array { + // remove CR/LF & padding to simplify scan + const input = data.replace(/[\r\n=]/g, ""); + const max = input.length; + const map = BASE64_MAP; + + // Collect by 6*4 bits (3 bytes) + + const result = []; + let bits = 0; + for (let idx = 0; idx < max; idx++) { + if (idx % 4 === 0 && idx) { + result.push((bits >> 16) & 0xff); + result.push((bits >> 8) & 0xff); + result.push(bits & 0xff); + } + + bits = (bits << 6) | map.indexOf(input.charAt(idx)); + } + + // Dump tail + + const tailbits = (max % 4) * 6; + + if (tailbits === 0) { + result.push((bits >> 16) & 0xff); + result.push((bits >> 8) & 0xff); + result.push(bits & 0xff); + } else if (tailbits === 18) { + result.push((bits >> 10) & 0xff); + result.push((bits >> 2) & 0xff); + } else if (tailbits === 12) { + result.push((bits >> 4) & 0xff); + } + + return new Uint8Array(result); +} + +function representYamlBinary(object: Uint8Array): string { + const max = object.length; + const map = BASE64_MAP; + + // Convert every three bytes to 4 ASCII characters. + + let result = ""; + let bits = 0; + for (let idx = 0; idx < max; idx++) { + if (idx % 3 === 0 && idx) { + result += map[(bits >> 18) & 0x3f]; + result += map[(bits >> 12) & 0x3f]; + result += map[(bits >> 6) & 0x3f]; + result += map[bits & 0x3f]; + } + + bits = (bits << 8) + object[idx]!; + } + + // Dump tail + + const tail = max % 3; + + if (tail === 0) { + result += map[(bits >> 18) & 0x3f]; + result += map[(bits >> 12) & 0x3f]; + result += map[(bits >> 6) & 0x3f]; + result += map[bits & 0x3f]; + } else if (tail === 2) { + result += map[(bits >> 10) & 0x3f]; + result += map[(bits >> 4) & 0x3f]; + result += map[(bits << 2) & 0x3f]; + result += map[64]; + } else if (tail === 1) { + result += map[(bits >> 2) & 0x3f]; + result += map[(bits << 4) & 0x3f]; + result += map[64]; + result += map[64]; + } + + return result; +} +function isBinary(obj: unknown): obj is Uint8Array { + return obj instanceof Uint8Array; +} + +export const binary: Type<"scalar", Uint8Array> = { + tag: "tag:yaml.org,2002:binary", + construct: constructYamlBinary, + kind: "scalar", + predicate: isBinary, + represent: representYamlBinary, + resolve: resolveYamlBinary, +}; diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_type/bool.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/bool.ts new file mode 100644 index 00000000000..37e6b1a380c --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/bool.ts @@ -0,0 +1,37 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { Type } from "../_type.ts"; + +const YAML_TRUE_BOOLEANS = ["true", "True", "TRUE"]; +const YAML_FALSE_BOOLEANS = ["false", "False", "FALSE"]; +const YAML_BOOLEANS = [...YAML_TRUE_BOOLEANS, ...YAML_FALSE_BOOLEANS]; + +export const bool: Type<"scalar", boolean> = { + tag: "tag:yaml.org,2002:bool", + kind: "scalar", + defaultStyle: "lowercase", + predicate: (value: unknown): value is boolean => + typeof value === "boolean" || value instanceof Boolean, + construct: (data: string): boolean => YAML_TRUE_BOOLEANS.includes(data), + resolve: (data: string): boolean => YAML_BOOLEANS.includes(data), + represent: { + // deno-lint-ignore ban-types + lowercase: (object: boolean | Boolean): string => { + const value = object instanceof Boolean ? object.valueOf() : object; + return value ? "true" : "false"; + }, + // deno-lint-ignore ban-types + uppercase: (object: boolean | Boolean): string => { + const value = object instanceof Boolean ? object.valueOf() : object; + return value ? "TRUE" : "FALSE"; + }, + // deno-lint-ignore ban-types + camelcase: (object: boolean | Boolean): string => { + const value = object instanceof Boolean ? object.valueOf() : object; + return value ? "True" : "False"; + }, + }, +}; diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_type/float.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/float.ts new file mode 100644 index 00000000000..74f812780e7 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/float.ts @@ -0,0 +1,112 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { StyleVariant, Type } from "../_type.ts"; +import { isNegativeZero } from "../_utils.ts"; + +const YAML_FLOAT_PATTERN = new RegExp( + // 2.5e4, 2.5 and integers + "^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?" + + // .2e4, .2 + // special case, seems not from spec + "|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?" + + // .inf + "|[-+]?\\.(?:inf|Inf|INF)" + + // .nan + "|\\.(?:nan|NaN|NAN))$", +); + +function resolveYamlFloat(data: string): boolean { + if ( + !YAML_FLOAT_PATTERN.test(data) || + // Quick hack to not allow integers end with `_` + // Probably should update regexp & check speed + data[data.length - 1] === "_" + ) { + return false; + } + + return true; +} + +function constructYamlFloat(data: string): number { + let value = data.replace(/_/g, "").toLowerCase(); + const sign = value[0] === "-" ? -1 : 1; + + if (value[0] && "+-".includes(value[0])) { + value = value.slice(1); + } + + if (value === ".inf") { + return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; + } + if (value === ".nan") { + return NaN; + } + return sign * parseFloat(value); +} + +const SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; + +function representYamlFloat( + // deno-lint-ignore ban-types + object: number | Number, + style?: StyleVariant, +): string { + const value = object instanceof Number ? object.valueOf() : object; + if (isNaN(value)) { + switch (style) { + case "lowercase": + return ".nan"; + case "uppercase": + return ".NAN"; + case "camelcase": + return ".NaN"; + } + } else if (Number.POSITIVE_INFINITY === value) { + switch (style) { + case "lowercase": + return ".inf"; + case "uppercase": + return ".INF"; + case "camelcase": + return ".Inf"; + } + } else if (Number.NEGATIVE_INFINITY === value) { + switch (style) { + case "lowercase": + return "-.inf"; + case "uppercase": + return "-.INF"; + case "camelcase": + return "-.Inf"; + } + } else if (isNegativeZero(value)) { + return "-0.0"; + } + + const res = value.toString(10); + + // JS stringifier can build scientific format without dots: 5e-100, + // while YAML requires dot: 5.e-100. Fix it with simple hack + + return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace("e", ".e") : res; +} + +function isFloat(object: unknown): object is number { + if (object instanceof Number) object = object.valueOf(); + return typeof object === "number" && + (object % 1 !== 0 || isNegativeZero(object)); +} + +export const float: Type<"scalar", number> = { + tag: "tag:yaml.org,2002:float", + construct: constructYamlFloat, + defaultStyle: "lowercase", + kind: "scalar", + predicate: isFloat, + represent: representYamlFloat, + resolve: resolveYamlFloat, +}; diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_type/int.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/int.ts new file mode 100644 index 00000000000..f0d2e4b37b7 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/int.ts @@ -0,0 +1,174 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { Type } from "../_type.ts"; +import { isNegativeZero } from "../_utils.ts"; + +function isCharCodeInRange(c: number, lower: number, upper: number): boolean { + return lower <= c && c <= upper; +} + +function isHexCode(c: number): boolean { + return ( + isCharCodeInRange(c, 0x30, 0x39) || // 0-9 + isCharCodeInRange(c, 0x41, 0x46) || // A-F + isCharCodeInRange(c, 0x61, 0x66) // a-f + ); +} + +function isOctCode(c: number): boolean { + return isCharCodeInRange(c, 0x30, 0x37); // 0-7 +} + +function isDecCode(c: number): boolean { + return isCharCodeInRange(c, 0x30, 0x39); // 0-9 +} + +function resolveYamlInteger(data: string): boolean { + const max = data.length; + let index = 0; + let hasDigits = false; + + if (!max) return false; + + let ch = data[index]; + + // sign + if (ch === "-" || ch === "+") { + ch = data[++index]; + } + + if (ch === "0") { + // 0 + if (index + 1 === max) return true; + ch = data[++index]; + + // base 2, base 8, base 16 + + if (ch === "b") { + // base 2 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === "_") continue; + if (ch !== "0" && ch !== "1") return false; + hasDigits = true; + } + return hasDigits && ch !== "_"; + } + + if (ch === "x") { + // base 16 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === "_") continue; + if (!isHexCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== "_"; + } + + // base 8 + for (; index < max; index++) { + ch = data[index]; + if (ch === "_") continue; + if (!isOctCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== "_"; + } + + // base 10 (except 0) or base 60 + + // value should not start with `_`; + if (ch === "_") return false; + + for (; index < max; index++) { + ch = data[index]; + if (ch === "_") continue; + if (!isDecCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + + // Should have digits and should not end with `_` + if (!hasDigits || ch === "_") return false; + + // base60 almost not used, no needs to optimize + return /^(:[0-5]?[0-9])+$/.test(data.slice(index)); +} + +function constructYamlInteger(data: string): number { + let value = data; + + if (value.includes("_")) { + value = value.replace(/_/g, ""); + } + + let sign = 1; + let ch = value[0]; + if (ch === "-" || ch === "+") { + if (ch === "-") sign = -1; + value = value.slice(1); + ch = value[0]; + } + + if (value === "0") return 0; + + if (ch === "0") { + if (value[1] === "b") return sign * parseInt(value.slice(2), 2); + if (value[1] === "x") return sign * parseInt(value, 16); + return sign * parseInt(value, 8); + } + + return sign * parseInt(value, 10); +} + +function isInteger(object: unknown): object is number { + if (object instanceof Number) object = object.valueOf(); + return typeof object === "number" && object % 1 === 0 && + !isNegativeZero(object); +} + +export const int: Type<"scalar", number> = { + tag: "tag:yaml.org,2002:int", + construct: constructYamlInteger, + defaultStyle: "decimal", + kind: "scalar", + predicate: isInteger, + represent: { + // deno-lint-ignore ban-types + binary(object: number | Number): string { + const value = object instanceof Number ? object.valueOf() : object; + return value >= 0 + ? `0b${value.toString(2)}` + : `-0b${value.toString(2).slice(1)}`; + }, + // deno-lint-ignore ban-types + octal(object: number | Number): string { + const value = object instanceof Number ? object.valueOf() : object; + return value >= 0 + ? `0${value.toString(8)}` + : `-0${value.toString(8).slice(1)}`; + }, + // deno-lint-ignore ban-types + decimal(object: number | Number): string { + const value = object instanceof Number ? object.valueOf() : object; + return value.toString(10); + }, + // deno-lint-ignore ban-types + hexadecimal(object: number | Number): string { + const value = object instanceof Number ? object.valueOf() : object; + return value >= 0 + ? `0x${value.toString(16).toUpperCase()}` + : `-0x${value.toString(16).toUpperCase().slice(1)}`; + }, + }, + resolve: resolveYamlInteger, +}; diff --git a/src/vendor/deno.land/std@0.217.0/yaml/schema/core.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/map.ts similarity index 50% rename from src/vendor/deno.land/std@0.217.0/yaml/schema/core.ts rename to src/vendor/jsr.io/@std/yaml/1.0.5/_type/map.ts index 6bba4d22158..8bda651f01a 100644 --- a/src/vendor/deno.land/std@0.217.0/yaml/schema/core.ts +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/map.ts @@ -2,13 +2,16 @@ // https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da // Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. -import { Schema } from "../schema.ts"; -import { json } from "./json.ts"; +import type { Type } from "../_type.ts"; -// Standard YAML's Core schema. -// http://www.yaml.org/spec/1.2/spec.html#id2804923 -export const core: Schema = new Schema({ - include: [json], -}); +export const map: Type<"mapping", unknown> = { + tag: "tag:yaml.org,2002:map", + resolve() { + return true; + }, + construct(data) { + return data !== null ? data : {}; + }, + kind: "mapping", +}; diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_type/merge.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/merge.ts new file mode 100644 index 00000000000..a42cb98d810 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/merge.ts @@ -0,0 +1,13 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { Type } from "../_type.ts"; + +export const merge: Type<"scalar", unknown> = { + tag: "tag:yaml.org,2002:merge", + kind: "scalar", + resolve: (data: unknown): boolean => data === "<<" || data === null, + construct: (data: unknown): unknown => data, +}; diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_type/nil.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/nil.ts new file mode 100644 index 00000000000..26007f83a39 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/nil.ts @@ -0,0 +1,27 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { Type } from "../_type.ts"; + +export const nil: Type<"scalar", null> = { + tag: "tag:yaml.org,2002:null", + kind: "scalar", + defaultStyle: "lowercase", + predicate: (object: unknown): object is null => object === null, + construct: () => null, + resolve: (data: string): boolean => { + return ( + data === "~" || + data === "null" || + data === "Null" || + data === "NULL" + ); + }, + represent: { + lowercase: (): string => "null", + uppercase: (): string => "NULL", + camelcase: (): string => "Null", + }, +}; diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_type/omap.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/omap.ts new file mode 100644 index 00000000000..1996af863fa --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/omap.ts @@ -0,0 +1,30 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { Type } from "../_type.ts"; +import { isPlainObject } from "../_utils.ts"; + +function resolveYamlOmap(data: Record[]): boolean { + const objectKeys = new Set(); + for (const object of data) { + if (!isPlainObject(object)) return false; + const keys = Object.keys(object); + if (keys.length !== 1) return false; + for (const key of keys) { + if (objectKeys.has(key)) return false; + objectKeys.add(key); + } + } + return true; +} + +export const omap: Type<"sequence", Record[]> = { + tag: "tag:yaml.org,2002:omap", + kind: "sequence", + resolve: resolveYamlOmap, + construct(data) { + return data; + }, +}; diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_type/pairs.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/pairs.ts new file mode 100644 index 00000000000..67b3783a623 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/pairs.ts @@ -0,0 +1,22 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { Type } from "../_type.ts"; +import { isPlainObject } from "../_utils.ts"; + +function resolveYamlPairs(data: unknown[][]): boolean { + if (data === null) return true; + return data.every((it) => isPlainObject(it) && Object.keys(it).length === 1); +} + +export const pairs: Type<"sequence"> = { + tag: "tag:yaml.org,2002:pairs", + construct(data: Record[] | null): [string, unknown][] { + // Converts an array of objects into an array of key-value pairs. + return data?.flatMap(Object.entries) ?? []; + }, + kind: "sequence", + resolve: resolveYamlPairs, +}; diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_type/regexp.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/regexp.ts new file mode 100644 index 00000000000..6f8a9723676 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/regexp.ts @@ -0,0 +1,33 @@ +// Ported and adapted from js-yaml-js-types v1.0.0: +// https://github.com/nodeca/js-yaml-js-types/tree/ac537e7bbdd3c2cbbd9882ca3919c520c2dc022b +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { Type } from "../_type.ts"; + +const REGEXP = /^\/(?[\s\S]+)\/(?[gismuy]*)$/; + +export const regexp: Type<"scalar", RegExp> = { + tag: "tag:yaml.org,2002:js/regexp", + kind: "scalar", + resolve(data: string | null): boolean { + if (data === null || !data.length) return false; + + if (data.charAt(0) === "/") { + // Ensure regex is properly terminated + const groups = data.match(REGEXP)?.groups; + if (!groups) return false; + // Check no duplicate modifiers + const modifiers = groups.modifiers ?? ""; + if (new Set(modifiers).size < modifiers.length) return false; + } + + return true; + }, + construct(data: string): RegExp { + const { regexp = data, modifiers = "" } = data.match(REGEXP)?.groups ?? {}; + return new RegExp(regexp, modifiers); + }, + predicate: (object: unknown): object is RegExp => object instanceof RegExp, + represent: (object: RegExp): string => object.toString(), +}; diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_type/seq.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/seq.ts new file mode 100644 index 00000000000..14b3b776496 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/seq.ts @@ -0,0 +1,13 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { Type } from "../_type.ts"; + +export const seq: Type<"sequence", unknown[]> = { + tag: "tag:yaml.org,2002:seq", + kind: "sequence", + resolve: (): boolean => true, + construct: (data: unknown[] | null): unknown[] => data !== null ? data : [], +}; diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_type/set.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/set.ts new file mode 100644 index 00000000000..4e82116ddfc --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/set.ts @@ -0,0 +1,17 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { Type } from "../_type.ts"; + +export const set: Type<"mapping", Record> = { + tag: "tag:yaml.org,2002:set", + kind: "mapping", + construct: (data: Record): Record => + data !== null ? data : {}, + resolve: (data: Record): boolean => { + if (data === null) return true; + return Object.values(data).every((it) => it === null); + }, +}; diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_type/str.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/str.ts new file mode 100644 index 00000000000..de030d488e9 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/str.ts @@ -0,0 +1,12 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { Type } from "../_type.ts"; + +export const str: Type<"scalar", string> = { + tag: "tag:yaml.org,2002:str", + kind: "scalar", + resolve: (): boolean => true, + construct: (data: string | null): string => data !== null ? data : "", +}; diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_type/timestamp.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/timestamp.ts new file mode 100644 index 00000000000..0aeb3ce3ba3 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/timestamp.ts @@ -0,0 +1,101 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { Type } from "../_type.ts"; + +const YAML_DATE_REGEXP = new RegExp( + "^([0-9][0-9][0-9][0-9])" + // [1] year + "-([0-9][0-9])" + // [2] month + "-([0-9][0-9])$", // [3] day +); + +const YAML_TIMESTAMP_REGEXP = new RegExp( + "^([0-9][0-9][0-9][0-9])" + // [1] year + "-([0-9][0-9]?)" + // [2] month + "-([0-9][0-9]?)" + // [3] day + "(?:[Tt]|[ \\t]+)" + // ... + "([0-9][0-9]?)" + // [4] hour + ":([0-9][0-9])" + // [5] minute + ":([0-9][0-9])" + // [6] second + "(?:\\.([0-9]*))?" + // [7] fraction + "(?:[ \\t]*(Z|([-+])([0-9][0-9]?)" + // [8] tz [9] tz_sign [10] tz_hour + "(?::([0-9][0-9]))?))?$", // [11] tz_minute +); + +function resolveYamlTimestamp(data: string): boolean { + if (data === null) return false; + if (YAML_DATE_REGEXP.exec(data) !== null) return true; + if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; + return false; +} + +function constructYamlTimestamp(data: string): Date { + let match = YAML_DATE_REGEXP.exec(data); + if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); + + if (match === null) { + throw new Error("Cannot construct YAML timestamp: date resolve error"); + } + + // match: [1] year [2] month [3] day + + const year = +match[1]!; + const month = +match[2]! - 1; // JS month starts with 0 + const day = +match[3]!; + + if (!match[4]) { + // no hour + return new Date(Date.UTC(year, month, day)); + } + + // match: [4] hour [5] minute [6] second [7] fraction + + const hour = +match[4]; + const minute = +match[5]!; + const second = +match[6]!; + + let fraction = 0; + if (match[7]) { + let partFraction = match[7].slice(0, 3); + while (partFraction.length < 3) { + // milli-seconds + partFraction += "0"; + } + fraction = +partFraction; + } + + // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + + let delta = null; + if (match[9] && match[10]) { + const tzHour = +match[10]; + const tzMinute = +(match[11] || 0); + delta = (tzHour * 60 + tzMinute) * 60000; // delta in milli-seconds + if (match[9] === "-") delta = -delta; + } + + const date = new Date( + Date.UTC(year, month, day, hour, minute, second, fraction), + ); + + if (delta) date.setTime(date.getTime() - delta); + + return date; +} + +function representYamlTimestamp(date: Date): string { + return date.toISOString(); +} + +export const timestamp: Type<"scalar", Date> = { + tag: "tag:yaml.org,2002:timestamp", + construct: constructYamlTimestamp, + predicate(object): object is Date { + return object instanceof Date; + }, + kind: "scalar", + represent: representYamlTimestamp, + resolve: resolveYamlTimestamp, +}; diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_type/undefined.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/undefined.ts new file mode 100644 index 00000000000..8c13678713d --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_type/undefined.ts @@ -0,0 +1,23 @@ +// Ported and adapted from js-yaml-js-types v1.0.0: +// https://github.com/nodeca/js-yaml-js-types/tree/ac537e7bbdd3c2cbbd9882ca3919c520c2dc022b +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +import type { Type } from "../_type.ts"; + +export const undefinedType: Type<"scalar", undefined> = { + tag: "tag:yaml.org,2002:js/undefined", + kind: "scalar", + resolve() { + return true; + }, + construct() { + return undefined; + }, + predicate(object) { + return typeof object === "undefined"; + }, + represent() { + return ""; + }, +}; diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/_utils.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/_utils.ts new file mode 100644 index 00000000000..d6f4be1e9cd --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/_utils.ts @@ -0,0 +1,16 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +export function isObject(value: unknown): value is Record { + return value !== null && typeof value === "object"; +} + +export function isNegativeZero(i: number): boolean { + return i === 0 && Number.NEGATIVE_INFINITY === 1 / i; +} + +export function isPlainObject(object: unknown): object is object { + return Object.prototype.toString.call(object) === "[object Object]"; +} diff --git a/src/vendor/jsr.io/@std/yaml/1.0.5/parse.ts b/src/vendor/jsr.io/@std/yaml/1.0.5/parse.ts new file mode 100644 index 00000000000..64d0c54d131 --- /dev/null +++ b/src/vendor/jsr.io/@std/yaml/1.0.5/parse.ts @@ -0,0 +1,128 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isEOL } from "./_chars.ts"; +import { LoaderState } from "./_loader_state.ts"; +import { SCHEMA_MAP, type SchemaType } from "./_schema.ts"; + +export type { SchemaType }; + +/** Options for {@linkcode parse}. */ +export interface ParseOptions { + /** + * Name of the schema to use. + * + * @default {"default"} + */ + schema?: SchemaType; + /** + * If `true`, duplicate keys will overwrite previous values. Otherwise, + * duplicate keys will throw a {@linkcode SyntaxError}. + * + * @default {false} + */ + allowDuplicateKeys?: boolean; + /** + * If defined, a function to call on warning messages taking an + * {@linkcode Error} as its only argument. + */ + onWarning?(error: Error): void; +} + +function sanitizeInput(input: string) { + input = String(input); + + if (input.length > 0) { + // Add trailing `\n` if not exists + if (!isEOL(input.charCodeAt(input.length - 1))) input += "\n"; + + // Strip BOM + if (input.charCodeAt(0) === 0xfeff) input = input.slice(1); + } + + // Use 0 as string terminator. That significantly simplifies bounds check. + input += "\0"; + + return input; +} + +/** + * Parse and return a YAML string as a parsed YAML document object. + * + * Note: This does not support functions. Untrusted data is safe to parse. + * + * @example Usage + * ```ts + * import { parse } from "@std/yaml/parse"; + * import { assertEquals } from "@std/assert"; + * + * const data = parse(` + * id: 1 + * name: Alice + * `); + * + * assertEquals(data, { id: 1, name: "Alice" }); + * ``` + * + * @throws {SyntaxError} Throws error on invalid YAML. + * @param content YAML string to parse. + * @param options Parsing options. + * @returns Parsed document. + */ +export function parse( + content: string, + options: ParseOptions = {}, +): unknown { + content = sanitizeInput(content); + const state = new LoaderState(content, { + ...options, + schema: SCHEMA_MAP.get(options.schema!)!, + }); + const documentGenerator = state.readDocuments(); + const document = documentGenerator.next().value; + if (!documentGenerator.next().done) { + throw new SyntaxError( + "Found more than 1 document in the stream: expected a single document", + ); + } + return document ?? null; +} + +/** + * Same as {@linkcode parse}, but understands multi-document YAML sources, and + * returns multiple parsed YAML document objects. + * + * @example Usage + * ```ts + * import { parseAll } from "@std/yaml/parse"; + * import { assertEquals } from "@std/assert"; + * + * const data = parseAll(` + * --- + * id: 1 + * name: Alice + * --- + * id: 2 + * name: Bob + * --- + * id: 3 + * name: Eve + * `); + * assertEquals(data, [ { id: 1, name: "Alice" }, { id: 2, name: "Bob" }, { id: 3, name: "Eve" }]); + * ``` + * + * @param content YAML string to parse. + * @param options Parsing options. + * @returns Array of parsed documents. + */ +export function parseAll(content: string, options: ParseOptions = {}): unknown { + content = sanitizeInput(content); + const state = new LoaderState(content, { + ...options, + schema: SCHEMA_MAP.get(options.schema!)!, + }); + return [...state.readDocuments()]; +} diff --git a/tests/docs/project/prepost/extension/_extensions/author/prerender/post-render.ts b/tests/docs/project/prepost/extension/_extensions/author/prerender/post-render.ts index 8cc365d68f2..47f1e95096f 100644 --- a/tests/docs/project/prepost/extension/_extensions/author/prerender/post-render.ts +++ b/tests/docs/project/prepost/extension/_extensions/author/prerender/post-render.ts @@ -1,4 +1,4 @@ -import { join } from "https://deno.land/std/path/mod.ts"; +import { join } from "stdlib/path"; try { Deno.removeSync(join(Deno.cwd(), "i-exist.txt")); diff --git a/tests/docs/project/prepost/extension/_extensions/author/prerender/pre-render.ts b/tests/docs/project/prepost/extension/_extensions/author/prerender/pre-render.ts index 6ec33f4a59a..edc17df1d0b 100644 --- a/tests/docs/project/prepost/extension/_extensions/author/prerender/pre-render.ts +++ b/tests/docs/project/prepost/extension/_extensions/author/prerender/pre-render.ts @@ -1,4 +1,4 @@ -import { join } from "https://deno.land/std/path/mod.ts"; +import { join } from "stdlib/path"; try { Deno.statSync(join(Deno.cwd(), "i-exist.txt")); diff --git a/tests/docs/project/prepost/invalid-mutate/pre.ts b/tests/docs/project/prepost/invalid-mutate/pre.ts index 42e38e39e40..de82cc01d39 100644 --- a/tests/docs/project/prepost/invalid-mutate/pre.ts +++ b/tests/docs/project/prepost/invalid-mutate/pre.ts @@ -1,4 +1,4 @@ -import { existsSync } from "https://deno.land/std/fs/mod.ts"; +import { existsSync } from "stdlib/fs"; const file = "_metadata.yml" const contents = ` diff --git a/tests/docs/project/prepost/mutate-render-list/pre.ts b/tests/docs/project/prepost/mutate-render-list/pre.ts index 5b83886ce59..39351ad16db 100644 --- a/tests/docs/project/prepost/mutate-render-list/pre.ts +++ b/tests/docs/project/prepost/mutate-render-list/pre.ts @@ -1,5 +1,5 @@ -import { existsSync, ensureDirSync } from "https://deno.land/std/fs/mod.ts"; -import { join } from "https://deno.land/std/path/mod.ts"; +import { existsSync, ensureDirSync } from "stdlib/fs"; +import { join } from "stdlib/path"; const kNewFiles = [{file: "test1.qmd", title: "First Doc"}, {file: "test2.qmd", title: "Second Doc"}]; diff --git a/tests/docs/run/test-stdlib.ts b/tests/docs/run/test-stdlib.ts index 2dc4d8e83d5..1c4c85ea7ce 100644 --- a/tests/docs/run/test-stdlib.ts +++ b/tests/docs/run/test-stdlib.ts @@ -1 +1 @@ -import { readLines } from "https://deno.land/std/io/mod.ts"; +import { readLines } from "stdlib/io"; diff --git a/tests/docs/websites/drafts/drafts-preprocessor/clean-drafts.ts b/tests/docs/websites/drafts/drafts-preprocessor/clean-drafts.ts index 0f1e929f0e9..72dc42ba9c3 100644 --- a/tests/docs/websites/drafts/drafts-preprocessor/clean-drafts.ts +++ b/tests/docs/websites/drafts/drafts-preprocessor/clean-drafts.ts @@ -1,4 +1,4 @@ -import { existsSync } from "https://deno.land/std/fs/mod.ts"; +import { existsSync } from "stdlib/fs"; const kDraftsFile = "_drafts.yml"; diff --git a/tests/docs/websites/drafts/drafts-preprocessor/make-drafts.ts b/tests/docs/websites/drafts/drafts-preprocessor/make-drafts.ts index ee4a3d1f9a9..f440e51b207 100644 --- a/tests/docs/websites/drafts/drafts-preprocessor/make-drafts.ts +++ b/tests/docs/websites/drafts/drafts-preprocessor/make-drafts.ts @@ -1,4 +1,4 @@ -import { existsSync } from "https://deno.land/std/fs/mod.ts"; +import { existsSync } from "stdlib/fs"; const kDraftsFile = "_drafts.yml"; diff --git a/tests/integration/playwright-tests.test.ts b/tests/integration/playwright-tests.test.ts index 2069e7eb5f5..f24ad117950 100644 --- a/tests/integration/playwright-tests.test.ts +++ b/tests/integration/playwright-tests.test.ts @@ -14,7 +14,7 @@ import { import { cleanoutput } from "../smoke/render/render.ts"; import { execProcess } from "../../src/core/process.ts"; import { quartoDevCmd } from "../utils.ts"; -import { fail } from "testing/asserts.ts"; +import { fail } from "testing/asserts"; async function fullInit() { await initYamlIntelligenceResourcesFromFilesystem(); diff --git a/tests/run-parallel-tests.ts b/tests/run-parallel-tests.ts index 5344acce169..1f930bc4169 100644 --- a/tests/run-parallel-tests.ts +++ b/tests/run-parallel-tests.ts @@ -1,6 +1,21 @@ -import { expandGlobSync } from "https://deno.land/std/fs/mod.ts"; -import { basename, relative } from "https://deno.land/std/path/mod.ts"; -import { parse } from "https://deno.land/std/flags/mod.ts"; +// horrendous hack to get us out of the CI deadlock +let parse, expandGlobSync, basename: any, relative: any; +try { + const path = await import("stdlib/path"); + basename = path.basename; + relative = path.relative; + expandGlobSync = (await import("stdlib/fs")).expandGlobSync; + // let { expandGlobSync } = await import("stdlib/fs"); + // let { basename, relative } = await import("stdlib/path"); + // let { parse } = await import("stdlib/flags"); + parse = (await import("stdlib/flags")).parse; +} catch (_e) { + const path = await import("https://deno.land/std/path/mod.ts"); + basename = path.basename; + relative = path.relative; + expandGlobSync = (await import("https://deno.land/std/fs/mod.ts")).expandGlobSync; + parse = (await import("https://deno.land/std/flags/mod.ts")).parse; +} // Command line flags to use when calling `run-paralell-tests.sh`. const flags = parse(Deno.args, { diff --git a/tests/run-tests.ps1 b/tests/run-tests.ps1 index 1331f07d2cb..5bc7f44371e 100644 --- a/tests/run-tests.ps1 +++ b/tests/run-tests.ps1 @@ -55,7 +55,7 @@ $Env:QUARTO_DEBUG = "true" # Preparing running Deno with default arguments -$QUARTO_IMPORT_MAP_ARG="--importmap=$(Join-Path $QUARTO_SRC_DIR "dev_import_map.json")" +$QUARTO_IMPORT_MAP_ARG="--importmap=$(Join-Path $QUARTO_SRC_DIR "import_map.json")" $QUARTO_DENO_OPTIONS="--config test-conf.json --v8-flags=--enable-experimental-regexp-engine,--max-old-space-size=8192,--max-heap-size=8192 --unstable-kv --unstable-ffi --allow-read --allow-write --allow-run --allow-env --allow-net --check" # Parsing argument passed to the script diff --git a/tests/run-tests.sh b/tests/run-tests.sh index 56a60ebcca4..2ae589080eb 100755 --- a/tests/run-tests.sh +++ b/tests/run-tests.sh @@ -17,7 +17,7 @@ DENO_ARCH_DIR=$DENO_DIR DENO_DIR="$QUARTO_ROOT/package/dist/bin/" # Local import map -QUARTO_IMPORT_MAP_ARG=--importmap=$QUARTO_SRC_DIR/dev_import_map.json +QUARTO_IMPORT_MAP_ARG=--importmap=$QUARTO_SRC_DIR/import_map.json export QUARTO_BIN_PATH=$DENO_DIR export QUARTO_SHARE_PATH="`cd "$QUARTO_ROOT/src/resources/";pwd`" diff --git a/tests/smoke/book/render-book.test.ts b/tests/smoke/book/render-book.test.ts index 37e7d6dba2a..d5542f246bf 100644 --- a/tests/smoke/book/render-book.test.ts +++ b/tests/smoke/book/render-book.test.ts @@ -1,7 +1,7 @@ import { testQuartoCmd } from "../../test.ts"; import { fileExists, noErrorsOrWarnings } from "../../verify.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../src/deno_ral/fs.ts"; import { join } from "../../../src/deno_ral/path.ts"; import { docs } from "../../utils.ts"; diff --git a/tests/smoke/convert/convert-backticks.test.ts b/tests/smoke/convert/convert-backticks.test.ts index e3081fccbf2..23d4c9c0070 100644 --- a/tests/smoke/convert/convert-backticks.test.ts +++ b/tests/smoke/convert/convert-backticks.test.ts @@ -9,7 +9,7 @@ import { ExecuteOutput, testQuartoCmd, } from "../../test.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; (() => { const input = "docs/convert/backticks.ipynb"; diff --git a/tests/smoke/convert/convert.ts b/tests/smoke/convert/convert.ts index abec96a7f69..893e871a518 100644 --- a/tests/smoke/convert/convert.ts +++ b/tests/smoke/convert/convert.ts @@ -4,8 +4,8 @@ * Copyright (C) 2020-2022 Posit Software, PBC * */ -import { existsSync } from "fs/mod.ts"; -import { assert } from "testing/asserts.ts"; +import { existsSync } from "../../../src/deno_ral/fs.ts"; +import { assert } from "testing/asserts"; import { outputForInput } from "../../utils.ts"; import { diff --git a/tests/smoke/create/create.test.ts b/tests/smoke/create/create.test.ts index c31b3784bf5..efd0182494e 100644 --- a/tests/smoke/create/create.test.ts +++ b/tests/smoke/create/create.test.ts @@ -8,7 +8,7 @@ import { execProcess } from "../../../src/core/process.ts"; import { join } from "../../../src/deno_ral/path.ts"; import { CreateResult } from "../../../src/command/create/cmd-types.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { quartoDevCmd } from "../../utils.ts"; const kCreateTypes: Record = { diff --git a/tests/smoke/crossref/syntax.test.ts b/tests/smoke/crossref/syntax.test.ts index e070ad7f680..8d4f913d718 100644 --- a/tests/smoke/crossref/syntax.test.ts +++ b/tests/smoke/crossref/syntax.test.ts @@ -14,7 +14,7 @@ import { TestDescriptor, Verify, } from "../../test.ts"; -import { assert, fail } from "testing/asserts.ts"; +import { assert, fail } from "testing/asserts"; import { quarto } from "../../../src/quarto.ts"; const syntaxQmd = crossref("syntax.qmd", "html"); diff --git a/tests/smoke/embed/render-embed.test.ts b/tests/smoke/embed/render-embed.test.ts index 26a80827bce..dfa151177ea 100644 --- a/tests/smoke/embed/render-embed.test.ts +++ b/tests/smoke/embed/render-embed.test.ts @@ -13,7 +13,6 @@ import { noErrorsOrWarnings, } from "../../verify.ts"; import { testRender } from "../render/render.ts"; -import { walkSync } from "fs/mod.ts"; const format = "html"; const input = docs("embed/embed-qmd.qmd"); diff --git a/tests/smoke/extensions/extension-render-journals.test.ts b/tests/smoke/extensions/extension-render-journals.test.ts index 8d39ec5f6df..0327048fb64 100644 --- a/tests/smoke/extensions/extension-render-journals.test.ts +++ b/tests/smoke/extensions/extension-render-journals.test.ts @@ -6,7 +6,7 @@ import { join } from "../../../src/deno_ral/path.ts"; import { quarto } from "../../../src/quarto.ts"; -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { ensureDirSync, existsSync } from "../../../src/deno_ral/fs.ts"; import { testRender } from "../render/render.ts"; import { removeIfEmptyDir } from "../../../src/core/path.ts"; diff --git a/tests/smoke/extensions/extension-render-project.test.ts b/tests/smoke/extensions/extension-render-project.test.ts index f17770f5908..ba4ec7d8c60 100644 --- a/tests/smoke/extensions/extension-render-project.test.ts +++ b/tests/smoke/extensions/extension-render-project.test.ts @@ -10,7 +10,7 @@ import { basename, dirname, extname, join, relative } from "../../../src/deno_ra import { ensureHtmlElements } from "../../verify.ts"; import { testQuartoCmd } from "../../test.ts"; import { noErrors } from "../../verify.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../src/deno_ral/fs.ts"; const testRender = ( input: string, diff --git a/tests/smoke/extensions/install.test.ts b/tests/smoke/extensions/install.test.ts index 759967a8eff..692b60296f2 100644 --- a/tests/smoke/extensions/install.test.ts +++ b/tests/smoke/extensions/install.test.ts @@ -1,8 +1,8 @@ import { noErrorsOrWarnings } from "../../verify.ts"; import { join } from "../../../src/deno_ral/path.ts"; import { ExecuteOutput, testQuartoCmd, Verify } from "../../test.ts"; -import { assert } from "testing/asserts.ts"; -import { ensureDirSync, existsSync } from "fs/mod.ts"; +import { assert } from "testing/asserts"; +import { ensureDirSync, existsSync } from "../../../src/deno_ral/fs.ts"; import { docs } from "../../utils.ts"; const verifySubDirCount = (dir: string, count: number): Verify => { diff --git a/tests/smoke/filters/editor-support.test.ts b/tests/smoke/filters/editor-support.test.ts index 032a956d32b..0c34a145240 100644 --- a/tests/smoke/filters/editor-support.test.ts +++ b/tests/smoke/filters/editor-support.test.ts @@ -6,7 +6,7 @@ import { docs } from "../../utils.ts"; import { test } from "../../test.ts"; -import { assertEquals } from "testing/asserts.ts"; +import { assertEquals } from "testing/asserts"; async function runEditorSupportCrossref(doc: string) { let cmdLine: string; diff --git a/tests/smoke/inspect/inspect-code-cells.test.ts b/tests/smoke/inspect/inspect-code-cells.test.ts index 80d59fc61f7..df309945f8c 100644 --- a/tests/smoke/inspect/inspect-code-cells.test.ts +++ b/tests/smoke/inspect/inspect-code-cells.test.ts @@ -12,7 +12,7 @@ import { ExecuteOutput, testQuartoCmd, } from "../../test.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; (() => { const input = "docs/project/book/_include.qmd"; diff --git a/tests/smoke/inspect/inspect-include.test.ts b/tests/smoke/inspect/inspect-include.test.ts index e4312acb931..a66e274ff63 100644 --- a/tests/smoke/inspect/inspect-include.test.ts +++ b/tests/smoke/inspect/inspect-include.test.ts @@ -10,7 +10,7 @@ import { ExecuteOutput, testQuartoCmd, } from "../../test.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; (() => { const input = "docs/inspect/foo.qmd"; diff --git a/tests/smoke/inspect/inspect-recursive-include.test.ts b/tests/smoke/inspect/inspect-recursive-include.test.ts index 13da3a099d1..7ee4dc03f83 100644 --- a/tests/smoke/inspect/inspect-recursive-include.test.ts +++ b/tests/smoke/inspect/inspect-recursive-include.test.ts @@ -11,7 +11,7 @@ import { ExecuteOutput, testQuartoCmd, } from "../../test.ts"; -import { assert, assertEquals } from "testing/asserts.ts"; +import { assert, assertEquals } from "testing/asserts"; (() => { const input = "docs/websites/issue-9253/index.qmd"; diff --git a/tests/smoke/jupyter/cache.test.ts b/tests/smoke/jupyter/cache.test.ts index 72f73da524e..138be312bd2 100644 --- a/tests/smoke/jupyter/cache.test.ts +++ b/tests/smoke/jupyter/cache.test.ts @@ -5,7 +5,7 @@ */ import { quarto } from "../../../src/quarto.ts"; import { test } from "../../test.ts"; -import { assertEquals } from "testing/asserts.ts"; +import { assertEquals } from "testing/asserts"; test({ name: "jupyter:cache:test-1", diff --git a/tests/smoke/manuscript/manuscript.ts b/tests/smoke/manuscript/manuscript.ts index 5b8db2e91df..e29cbd07a14 100644 --- a/tests/smoke/manuscript/manuscript.ts +++ b/tests/smoke/manuscript/manuscript.ts @@ -3,7 +3,7 @@ * * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../src/deno_ral/fs.ts"; import { basename, dirname, extname, join } from "../../../src/deno_ral/path.ts"; import { testQuartoCmd, Verify } from "../../test.ts"; import { docs } from "../../utils.ts"; diff --git a/tests/smoke/project/common.ts b/tests/smoke/project/common.ts index b3534f29dd4..7c85afe0795 100644 --- a/tests/smoke/project/common.ts +++ b/tests/smoke/project/common.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC * */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../src/deno_ral/fs.ts"; import { join, dirname } from "../../../src/deno_ral/path.ts"; import { Verify, testQuartoCmd } from "../../test.ts"; import { outputForInput } from "../../utils.ts"; diff --git a/tests/smoke/project/project-book.test.ts b/tests/smoke/project/project-book.test.ts index f4558742c72..abce7053bf2 100644 --- a/tests/smoke/project/project-book.test.ts +++ b/tests/smoke/project/project-book.test.ts @@ -3,9 +3,8 @@ * * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../src/deno_ral/fs.ts"; import { join } from "../../../src/deno_ral/path.ts"; - import { Metadata } from "../../../src/config/types.ts"; import { testQuartoCmd, Verify } from "../../test.ts"; diff --git a/tests/smoke/project/project-simple.test.ts b/tests/smoke/project/project-simple.test.ts index 2ebb3c70f22..7723d8c17ee 100644 --- a/tests/smoke/project/project-simple.test.ts +++ b/tests/smoke/project/project-simple.test.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC * */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../src/deno_ral/fs.ts"; import { join } from "../../../src/deno_ral/path.ts"; import { Metadata } from "../../../src/config/types.ts"; diff --git a/tests/smoke/project/project-stdout.test.ts b/tests/smoke/project/project-stdout.test.ts index aec3ec9b078..dfa38d86299 100644 --- a/tests/smoke/project/project-stdout.test.ts +++ b/tests/smoke/project/project-stdout.test.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2023 Posit Software, PBC * */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../src/deno_ral/fs.ts"; import { join } from "../../../src/deno_ral/path.ts"; import { Metadata } from "../../../src/config/types.ts"; diff --git a/tests/smoke/project/project-website.test.ts b/tests/smoke/project/project-website.test.ts index 9e913d4be5a..b850e4807e7 100644 --- a/tests/smoke/project/project-website.test.ts +++ b/tests/smoke/project/project-website.test.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC * */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../src/deno_ral/fs.ts"; import { join } from "../../../src/deno_ral/path.ts"; import { Metadata } from "../../../src/config/types.ts"; diff --git a/tests/smoke/render/render-email.test.ts b/tests/smoke/render/render-email.test.ts index 74ad6be6c18..bcb1153431f 100644 --- a/tests/smoke/render/render-email.test.ts +++ b/tests/smoke/render/render-email.test.ts @@ -5,7 +5,7 @@ * */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../src/deno_ral/fs.ts"; import { TestContext, Verify } from "../../test.ts"; import { docs } from "../../utils.ts"; import { dirname, join } from "../../../src/deno_ral/path.ts"; diff --git a/tests/smoke/render/render-freeze.test.ts b/tests/smoke/render/render-freeze.test.ts index b3f80693107..7291e24d798 100644 --- a/tests/smoke/render/render-freeze.test.ts +++ b/tests/smoke/render/render-freeze.test.ts @@ -4,9 +4,9 @@ * Copyright (C) 2020-2022 Posit Software, PBC * */ -import { stringify } from "yaml/mod.ts"; +import { stringify } from "../../../src/core/yaml.ts"; import { dirname, join } from "../../../src/deno_ral/path.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { Metadata } from "../../../src/config/types.ts"; import { removeIfEmptyDir } from "../../../src/core/path.ts"; diff --git a/tests/smoke/render/render-pdf.test.ts b/tests/smoke/render/render-pdf.test.ts index 9d26e5755bb..c7ee64cf6c4 100644 --- a/tests/smoke/render/render-pdf.test.ts +++ b/tests/smoke/render/render-pdf.test.ts @@ -5,7 +5,7 @@ * */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../src/deno_ral/fs.ts"; import { removePackage, diff --git a/tests/smoke/render/render.ts b/tests/smoke/render/render.ts index d6ad922562d..9e895be615c 100644 --- a/tests/smoke/render/render.ts +++ b/tests/smoke/render/render.ts @@ -4,7 +4,6 @@ * Copyright (C) 2020-2022 Posit Software, PBC * */ -import { existsSync } from "fs/mod.ts"; import { basename, join } from "../../../src/deno_ral/path.ts"; import { outputForInput } from "../../utils.ts"; diff --git a/tests/smoke/run/run-script.test.ts b/tests/smoke/run/run-script.test.ts index 69d3394aafc..0d62a71c8a8 100644 --- a/tests/smoke/run/run-script.test.ts +++ b/tests/smoke/run/run-script.test.ts @@ -1,6 +1,6 @@ import { basename, join } from "../../../src/deno_ral/path.ts"; -import { ensureDirSync } from "fs/mod.ts"; -import { assert } from "testing/asserts.ts"; +import { ensureDirSync } from "../../../src/deno_ral/fs.ts"; +import { assert } from "testing/asserts"; import { execProcess } from "../../../src/core/process.ts"; import { quartoDevCmd } from "../../utils.ts"; import { unitTest } from "../../test.ts"; diff --git a/tests/smoke/run/stdlib-run-version.test.ts b/tests/smoke/run/stdlib-run-version.test.ts index d5b0e7d67b1..16dbcda355c 100644 --- a/tests/smoke/run/stdlib-run-version.test.ts +++ b/tests/smoke/run/stdlib-run-version.test.ts @@ -6,10 +6,10 @@ */ import { execProcess } from "../../../src/core/process.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { unitTest } from "../../test.ts"; -unitTest("yaml-intelligence-unit-regression", async () => { +unitTest("stdlib-run-version", async () => { const result = await execProcess({ cmd: [ "quarto", @@ -17,6 +17,7 @@ unitTest("yaml-intelligence-unit-regression", async () => { "docs/run/test-stdlib.ts", ], }); + console.log({result}) assert(result.success); }, { ignore: Deno.build.os == "windows", diff --git a/tests/smoke/site/render-site-themes.test.ts b/tests/smoke/site/render-site-themes.test.ts index 53a28bce374..e12fa17c25a 100644 --- a/tests/smoke/site/render-site-themes.test.ts +++ b/tests/smoke/site/render-site-themes.test.ts @@ -5,7 +5,7 @@ * */ -import { copySync } from "fs/copy.ts"; +import { copySync } from "../../../src/deno_ral/fs.ts"; import { join } from "../../../src/deno_ral/path.ts"; import { testQuartoCmd, Verify } from "../../test.ts"; import { docs } from "../../utils.ts"; diff --git a/tests/smoke/site/site.ts b/tests/smoke/site/site.ts index df48b08c487..ae812270d15 100644 --- a/tests/smoke/site/site.ts +++ b/tests/smoke/site/site.ts @@ -3,7 +3,7 @@ * * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../src/deno_ral/fs.ts"; import { dirname } from "../../../src/deno_ral/path.ts"; import { testQuartoCmd, Verify } from "../../test.ts"; import { projectOutputForInput } from "../../utils.ts"; diff --git a/tests/smoke/smoke-all.test.ts b/tests/smoke/smoke-all.test.ts index 5a8413f6f0a..91a54720b5f 100644 --- a/tests/smoke/smoke-all.test.ts +++ b/tests/smoke/smoke-all.test.ts @@ -13,7 +13,7 @@ import { } from "../../src/core/lib/yaml-validation/state.ts"; import { breakQuartoMd } from "../../src/core/lib/break-quarto-md.ts"; -import { parse } from "yaml/mod.ts"; +import { parse } from "../../src/core/yaml.ts"; import { cleanoutput } from "./render/render.ts"; import { ensureDocxRegexMatches, @@ -39,7 +39,7 @@ import { readYamlFromMarkdown } from "../../src/core/yaml.ts"; import { findProjectDir, findProjectOutputDir, outputForInput } from "../utils.ts"; import { jupyterNotebookToMarkdown } from "../../src/command/convert/jupyter.ts"; import { basename, dirname, join, relative } from "../../src/deno_ral/path.ts"; -import { WalkEntry } from "fs/mod.ts"; +import { WalkEntry } from "../../src/deno_ral/fs.ts"; import { quarto } from "../../src/quarto.ts"; import { safeExistsSync, safeRemoveSync } from "../../src/core/path.ts"; diff --git a/tests/smoke/use/template.test.ts b/tests/smoke/use/template.test.ts index 33ca547f9f0..e8947548ab9 100644 --- a/tests/smoke/use/template.test.ts +++ b/tests/smoke/use/template.test.ts @@ -1,7 +1,7 @@ import { testQuartoCmd } from "../../test.ts"; import { directoryContainsOnlyAllowedPaths, fileExists, folderExists, noErrorsOrWarnings, printsMessage } from "../../verify.ts"; import { join } from "../../../src/deno_ral/path.ts"; -import { ensureDirSync } from "fs/mod.ts"; +import { ensureDirSync } from "../../../src/deno_ral/fs.ts"; const tempDir = Deno.makeTempDirSync(); diff --git a/tests/smoke/website/drafts-env.test.ts b/tests/smoke/website/drafts-env.test.ts index 2d430289b04..7e7584d4d8c 100644 --- a/tests/smoke/website/drafts-env.test.ts +++ b/tests/smoke/website/drafts-env.test.ts @@ -7,7 +7,7 @@ import { docs } from "../../utils.ts"; import { join } from "../../../src/deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../src/deno_ral/fs.ts"; import { testQuartoCmd } from "../../test.ts"; import { noErrorsOrWarnings } from "../../verify.ts"; import { doesntHaveContentLinksToDrafts,doesntHaveEnvelopeLinksToDrafts,draftPostIsEmpty, searchDoesntHaveDraft, siteMapDoesntHaveDraft } from "./draft-utils.ts"; diff --git a/tests/smoke/website/drafts.test.ts b/tests/smoke/website/drafts.test.ts index 5a2c971cc93..cd1717d2ee5 100644 --- a/tests/smoke/website/drafts.test.ts +++ b/tests/smoke/website/drafts.test.ts @@ -7,7 +7,7 @@ import { docs } from "../../utils.ts"; import { join } from "../../../src/deno_ral/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../../src/deno_ral/fs.ts"; import { testQuartoCmd } from "../../test.ts"; import { noErrorsOrWarnings } from "../../verify.ts"; import { hasContentLinksToDrafts,hasEnvelopeLinksToDrafts,draftPostHasContent,doesntHaveContentLinksToDrafts,doesntHaveEnvelopeLinksToDrafts,draftPostIsEmpty, searchDoesntHaveDraft, searchHasDraft, siteMapDoesntHaveDraft, siteMapHasDraft } from "./draft-utils.ts"; diff --git a/tests/smoke/yaml-intelligence/yaml-intelligence-folded-block-strings.test.ts b/tests/smoke/yaml-intelligence/yaml-intelligence-folded-block-strings.test.ts index 85fe6110f4b..c6ed05eea75 100644 --- a/tests/smoke/yaml-intelligence/yaml-intelligence-folded-block-strings.test.ts +++ b/tests/smoke/yaml-intelligence/yaml-intelligence-folded-block-strings.test.ts @@ -13,7 +13,7 @@ format: `; import { unitTest } from "../../test.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { initYamlIntelligenceResourcesFromFilesystem } from "../../../src/core/schema/utils.ts"; import { initState, diff --git a/tests/smoke/yaml-intelligence/yaml-intelligence.test.ts b/tests/smoke/yaml-intelligence/yaml-intelligence.test.ts index 67ec9006154..73bd535d968 100644 --- a/tests/smoke/yaml-intelligence/yaml-intelligence.test.ts +++ b/tests/smoke/yaml-intelligence/yaml-intelligence.test.ts @@ -8,7 +8,7 @@ import { expandGlobSync } from "../../../src/core/deno/expand-glob.ts"; import { unitTest } from "../../test.ts"; -import { assert, assertEquals } from "testing/asserts.ts"; +import { assert, assertEquals } from "testing/asserts"; import { initYamlIntelligenceResourcesFromFilesystem } from "../../../src/core/schema/utils.ts"; import { diff --git a/tests/test-deps.ts b/tests/test-deps.ts index eec2f83af97..211661fdeae 100644 --- a/tests/test-deps.ts +++ b/tests/test-deps.ts @@ -1,5 +1,5 @@ import _bounds from "binary-search-bounds"; -import _asserts from "testing/asserts.ts"; +import * as _asserts from "testing/asserts"; import * as _slimdom from "slimdom"; import * as _xpath from "fontoxpath"; // import { serve } from "http/server.ts"; diff --git a/tests/test.ts b/tests/test.ts index 7f1d2a76829..e7eadbbed8f 100644 --- a/tests/test.ts +++ b/tests/test.ts @@ -4,15 +4,15 @@ * Copyright (C) 2020-2022 Posit Software, PBC * */ -import { existsSync } from "fs/mod.ts"; -import { fail } from "testing/asserts.ts"; +import { existsSync } from "../src/deno_ral/fs.ts"; +import { fail } from "testing/asserts"; import { warning } from "../src/deno_ral/log.ts"; import { initDenoDom } from "../src/core/deno-dom.ts"; -import { cleanupLogger, initializeLogger, logError } from "../src/core/log.ts"; +import { cleanupLogger, initializeLogger, flushLoggers, logError } from "../src/core/log.ts"; import { quarto } from "../src/quarto.ts"; import { join } from "../src/deno_ral/path.ts"; -import * as colors from "fmt/colors.ts"; +import * as colors from "fmt/colors"; import { runningInCI } from "../src/core/ci-info.ts"; import { relative, fromFileUrl } from "../src/deno_ral/path.ts"; import { quartoConfig } from "../src/core/quarto.ts"; @@ -156,7 +156,7 @@ export function test(test: TestDescriptor) { // Capture the output const log = Deno.makeTempFileSync({ suffix: ".json" }); - await initializeLogger({ + const handlers = await initializeLogger({ log: log, level: "INFO", format: "json-stream", @@ -182,6 +182,8 @@ export function test(test: TestDescriptor) { // Cleanup the output logging await cleanupLogOnce(); + flushLoggers(handlers); + // Read the output const testOutput = logOutput(log); if (testOutput) { diff --git a/tests/unit/binary-search.test.ts b/tests/unit/binary-search.test.ts index e76174fd338..2536ca9edf0 100644 --- a/tests/unit/binary-search.test.ts +++ b/tests/unit/binary-search.test.ts @@ -9,7 +9,7 @@ import { glb } from "../../src/core/lib/binary-search.ts"; import bounds from "binary-search-bounds"; import { unitTest } from "../test.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; // deno-lint-ignore require-await unitTest("binary-search-test - glb property tests", async () => { diff --git a/tests/unit/break-quarto-md/break-quarto-md.test.ts b/tests/unit/break-quarto-md/break-quarto-md.test.ts index 8e318673de3..09aa5f39849 100644 --- a/tests/unit/break-quarto-md/break-quarto-md.test.ts +++ b/tests/unit/break-quarto-md/break-quarto-md.test.ts @@ -7,7 +7,7 @@ import { breakQuartoMd } from "../../../src/core/lib/break-quarto-md.ts"; import { unitTest } from "../../test.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { docs } from "../../utils.ts"; import { initYamlIntelligenceResourcesFromFilesystem } from "../../../src/core/schema/utils.ts"; import { lines } from "../../../src/core/lib/text.ts"; diff --git a/tests/unit/case-conversion/case-conversion.test.ts b/tests/unit/case-conversion/case-conversion.test.ts index 69b01c623f9..2e0961aa99e 100644 --- a/tests/unit/case-conversion/case-conversion.test.ts +++ b/tests/unit/case-conversion/case-conversion.test.ts @@ -6,8 +6,7 @@ */ import { unitTest } from "../../test.ts"; -import { assert } from "testing/asserts.ts"; -import { join } from "../../../src/deno_ral/path.ts"; +import { assert } from "testing/asserts"; import { camelToKebab, } from "../../../src/core/config.ts"; diff --git a/tests/unit/confluence/confluence.test.ts b/tests/unit/confluence/confluence.test.ts index 72adb15d363..0d0bc7c5ce2 100644 --- a/tests/unit/confluence/confluence.test.ts +++ b/tests/unit/confluence/confluence.test.ts @@ -4,7 +4,7 @@ * */ import { unitTest } from "../../test.ts"; -import { assertEquals, assertThrows } from "testing/asserts.ts"; +import { assertEquals, assertThrows } from "testing/asserts"; import { buildContentCreate, diff --git a/tests/unit/dotenv-config.test.ts b/tests/unit/dotenv-config.test.ts index c0b0a0b1ff0..f3cefe463a2 100644 --- a/tests/unit/dotenv-config.test.ts +++ b/tests/unit/dotenv-config.test.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC * */ -import { assert, assertEquals } from "testing/asserts.ts"; +import { assert, assertEquals } from "testing/asserts"; import { unitTest } from "../test.ts"; import { quartoConfig } from "../../src/core/quarto.ts"; diff --git a/tests/unit/environment.test.ts b/tests/unit/environment.test.ts index 22df53cdd7d..2a6970edc8e 100644 --- a/tests/unit/environment.test.ts +++ b/tests/unit/environment.test.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC * */ -import { assert, assertEquals } from "testing/asserts.ts"; +import { assert, assertEquals } from "testing/asserts"; import { getenv } from "../../src/core/env.ts"; import { pandocBinaryPath, resourcePath } from "../../src/core/resources.ts"; import { unitTest } from "../test.ts"; diff --git a/tests/unit/filter-paths.test.ts b/tests/unit/filter-paths.test.ts index da0a571813b..fcd6b537b6a 100644 --- a/tests/unit/filter-paths.test.ts +++ b/tests/unit/filter-paths.test.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC * */ -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { filterPaths } from "../../src/core/path.ts"; import { unitTest } from "../test.ts"; diff --git a/tests/unit/giscus.test.ts b/tests/unit/giscus.test.ts index 85925c101a2..1aa135a0afb 100644 --- a/tests/unit/giscus.test.ts +++ b/tests/unit/giscus.test.ts @@ -1,6 +1,6 @@ import { unitTest } from "../test.ts"; import {buildGiscusThemeKeys, GiscusThemeToggleRecord} from "../../src/core/giscus.ts"; -import { assertEquals } from "testing/asserts.ts"; +import { assertEquals } from "testing/asserts"; const l = (label:string):string => `"Giscus buildThemeKeys: ${label}`; diff --git a/tests/unit/guess-chunk-options-format.test.ts b/tests/unit/guess-chunk-options-format.test.ts index d36dfe6a7dc..8d803ac5592 100644 --- a/tests/unit/guess-chunk-options-format.test.ts +++ b/tests/unit/guess-chunk-options-format.test.ts @@ -8,7 +8,7 @@ import { guessChunkOptionsFormat } from "../../src/core/lib/guess-chunk-options-format.ts"; import { unitTest } from "../test.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; // deno-lint-ignore require-await unitTest("guess-chunk-options-format-test", async () => { diff --git a/tests/unit/latexmk/parse-error.test.ts b/tests/unit/latexmk/parse-error.test.ts index 0526f6caddc..a3f2b37ff24 100644 --- a/tests/unit/latexmk/parse-error.test.ts +++ b/tests/unit/latexmk/parse-error.test.ts @@ -7,7 +7,7 @@ import { findMissingFontsAndPackages } from "../../../src/command/render/latexmk/parse-error.ts" import { unitTest } from "../../test.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; unitTest("findMissingPackages", async () => { const logText = Deno.readTextFileSync("expl3-aborted.log") diff --git a/tests/unit/mapped-strings/mapped-text.test.ts b/tests/unit/mapped-strings/mapped-text.test.ts index 2fd07b41f96..374907331b5 100644 --- a/tests/unit/mapped-strings/mapped-text.test.ts +++ b/tests/unit/mapped-strings/mapped-text.test.ts @@ -5,7 +5,7 @@ * */ import { unitTest } from "../../test.ts"; -import { assert, assertEquals } from "testing/asserts.ts"; +import { assert, assertEquals } from "testing/asserts"; import { asMappedString, mappedDiff, diff --git a/tests/unit/mapped-strings/multiple-source.test.ts b/tests/unit/mapped-strings/multiple-source.test.ts index 46166077ab6..991855686cb 100644 --- a/tests/unit/mapped-strings/multiple-source.test.ts +++ b/tests/unit/mapped-strings/multiple-source.test.ts @@ -6,7 +6,7 @@ */ import { unitTest } from "../../test.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { asMappedString, mappedConcat, diff --git a/tests/unit/pandoc-codegen/native-string.test.ts b/tests/unit/pandoc-codegen/native-string.test.ts index 2e8c84144f1..0a424c56d82 100644 --- a/tests/unit/pandoc-codegen/native-string.test.ts +++ b/tests/unit/pandoc-codegen/native-string.test.ts @@ -6,7 +6,7 @@ */ import { unitTest } from "../../test.ts"; -import { assertEquals } from "testing/asserts.ts"; +import { assertEquals } from "testing/asserts"; import { pandocNativeStr } from "../../../src/core/pandoc/codegen.ts"; // deno-lint-ignore require-await diff --git a/tests/unit/pandoc-formats.test.ts b/tests/unit/pandoc-formats.test.ts index f8f7c066649..db6c1e29381 100644 --- a/tests/unit/pandoc-formats.test.ts +++ b/tests/unit/pandoc-formats.test.ts @@ -1,5 +1,5 @@ import { unitTest } from "../test.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { FormatDescriptor, parseFormatString, diff --git a/tests/unit/pandoc-partition.test.ts b/tests/unit/pandoc-partition.test.ts index 026409946da..5355e4fce52 100644 --- a/tests/unit/pandoc-partition.test.ts +++ b/tests/unit/pandoc-partition.test.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC * */ -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { Metadata } from "../../src/config/types.ts"; import { partitionMarkdown } from "../../src/core/pandoc/pandoc-partition.ts"; import { unitTest } from "../test.ts"; diff --git a/tests/unit/pandoc.test.ts b/tests/unit/pandoc.test.ts index fc49db262ec..ad4a94bfbca 100644 --- a/tests/unit/pandoc.test.ts +++ b/tests/unit/pandoc.test.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2022 Posit Software, PBC * */ -import { assert, assertEquals } from "testing/asserts.ts"; +import { assert, assertEquals } from "testing/asserts"; import { getenv } from "../../src/core/env.ts"; import { parsePandocTitle } from "../../src/core/pandoc/pandoc-partition.ts"; import { pandocBinaryPath, resourcePath } from "../../src/core/resources.ts"; diff --git a/tests/unit/partition-cell-options.test.ts b/tests/unit/partition-cell-options.test.ts index 006913795fd..e0c7d0eb3dd 100644 --- a/tests/unit/partition-cell-options.test.ts +++ b/tests/unit/partition-cell-options.test.ts @@ -4,7 +4,7 @@ * Copyright (C) 2020-2023 Posit Software, PBC * */ -import { assertEquals } from "testing/asserts.ts"; +import { assertEquals } from "testing/asserts"; import { breakQuartoMd } from "../../src/core/lib/break-quarto-md.ts"; import { partitionCellOptions } from "../../src/core/lib/partition-cell-options.ts"; import { initYamlIntelligenceResourcesFromFilesystem } from "../../src/core/schema/utils.ts"; diff --git a/tests/unit/path.test.ts b/tests/unit/path.test.ts index c70ec4bf77f..4352579b70c 100644 --- a/tests/unit/path.test.ts +++ b/tests/unit/path.test.ts @@ -6,7 +6,7 @@ */ import { unitTest } from "../test.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { join } from "../../src/deno_ral/path.ts"; import { dirAndStem, @@ -14,7 +14,7 @@ import { removeIfExists, resolvePathGlobs, } from "../../src/core/path.ts"; -import { existsSync } from "fs/mod.ts"; +import { existsSync } from "../../src/deno_ral/fs.ts"; import { docs } from "../utils.ts"; const workingDir = Deno.makeTempDirSync({ prefix: "quarto-test" }); diff --git a/tests/unit/paths/qualified-path.test.ts b/tests/unit/paths/qualified-path.test.ts index c4f43a062ef..5735d35ecfc 100644 --- a/tests/unit/paths/qualified-path.test.ts +++ b/tests/unit/paths/qualified-path.test.ts @@ -12,7 +12,7 @@ import { PathInfo, QualifiedPath, } from "../../../src/core/qualified-path.ts"; -import { assertEquals, assertRejects } from "testing/asserts.ts"; +import { assertEquals, assertRejects } from "testing/asserts"; //deno-lint-ignore require-await unitTest("qualified-path - basic", async () => { diff --git a/tests/unit/schema-validation/format-aliases.test.ts b/tests/unit/schema-validation/format-aliases.test.ts index 1d7c25c5493..dc840b4e8e1 100644 --- a/tests/unit/schema-validation/format-aliases.test.ts +++ b/tests/unit/schema-validation/format-aliases.test.ts @@ -1,6 +1,6 @@ import { yamlValidationUnitTest } from "./utils.ts"; import { getExpandedFormatAliases } from "../../../src/core/lib/yaml-schema/format-aliases.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; // deno-lint-ignore require-await yamlValidationUnitTest("format-alias-expansion", async () => { diff --git a/tests/unit/schema-validation/format-execute.test.ts b/tests/unit/schema-validation/format-execute.test.ts index ad7fcb64c84..00330104fed 100644 --- a/tests/unit/schema-validation/format-execute.test.ts +++ b/tests/unit/schema-validation/format-execute.test.ts @@ -6,7 +6,7 @@ import { ensureAjv, YAMLSchema } from "../../../src/core/schema/yaml-schema.ts"; import { getFrontMatterSchema } from "../../../src/core/schema/front-matter.ts"; import { readAnnotatedYamlFromString } from "../../../src/core/schema/annotated-yaml.ts"; import { asMappedString } from "../../../src/core/mapped-text.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; unitTest("execute-validation", async () => { // FIXME we skip validation for now while we're updating the schemas diff --git a/tests/unit/schema-validation/object-super.test.ts b/tests/unit/schema-validation/object-super.test.ts index a890ddaa176..8b17333693a 100644 --- a/tests/unit/schema-validation/object-super.test.ts +++ b/tests/unit/schema-validation/object-super.test.ts @@ -17,7 +17,7 @@ import { } from "../../../src/core/lib/yaml-schema/validated-yaml.ts"; import { asMappedString } from "../../../src/core/lib/mapped-text.ts"; import { refSchema } from "../../../src/core/lib/yaml-schema/common.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; yamlValidationUnitTest("object-super-closed", async () => { const _schema1 = schemaFromString(` diff --git a/tests/unit/schema-validation/schema-completions.test.ts b/tests/unit/schema-validation/schema-completions.test.ts index f73ec52ff0f..72e1110ec7b 100644 --- a/tests/unit/schema-validation/schema-completions.test.ts +++ b/tests/unit/schema-validation/schema-completions.test.ts @@ -7,7 +7,7 @@ import { unitTest } from "../../test.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { initYamlIntelligenceResourcesFromFilesystem } from "../../../src/core/schema/utils.ts"; import { diff --git a/tests/unit/schema-validation/schema-schema.test.ts b/tests/unit/schema-validation/schema-schema.test.ts index edebe7ecd1c..7db8f327b18 100644 --- a/tests/unit/schema-validation/schema-schema.test.ts +++ b/tests/unit/schema-validation/schema-schema.test.ts @@ -5,7 +5,7 @@ * */ -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { schemaPath } from "../../../src/core/schema/utils.ts"; import { getSchemaSchemas } from "../../../src/core/lib/yaml-schema/from-yaml.ts"; import { yamlValidationUnitTest } from "./utils.ts"; diff --git a/tests/unit/schema-validation/utils.ts b/tests/unit/schema-validation/utils.ts index 27547f4c2b9..d4d4a7307f6 100644 --- a/tests/unit/schema-validation/utils.ts +++ b/tests/unit/schema-validation/utils.ts @@ -17,7 +17,7 @@ import { convertFromYaml } from "../../../src/core/lib/yaml-schema/from-yaml.ts" import { setSchemaDefinition } from "../../../src/core/lib/yaml-validation/schema.ts"; import { ValidationError } from "../../../src/core/lib/yaml-schema/validated-yaml.ts"; import { isEqual } from "../../../src/core/lodash.ts"; -import { assertRejects } from "testing/asserts.ts"; +import { assertRejects } from "testing/asserts"; import { readYamlFromString } from "../../../src/core/yaml.ts"; import { readAnnotatedYamlFromMappedString } from "../../../src/core/schema/annotated-yaml.ts"; import { diff --git a/tests/unit/text.test.ts b/tests/unit/text.test.ts index 961e25702a9..49dcd7c1d6d 100644 --- a/tests/unit/text.test.ts +++ b/tests/unit/text.test.ts @@ -5,7 +5,7 @@ * */ import { unitTest } from "../test.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { lines } from "../../src/core/text.ts"; import { editDistance } from "../../src/core/lib/text.ts"; diff --git a/tests/unit/yaml-intelligence/annotated-yaml.test.ts b/tests/unit/yaml-intelligence/annotated-yaml.test.ts index 439c26f2a91..8b36da40a1e 100644 --- a/tests/unit/yaml-intelligence/annotated-yaml.test.ts +++ b/tests/unit/yaml-intelligence/annotated-yaml.test.ts @@ -3,7 +3,7 @@ * * Copyright (C) 2020-2022 Posit Software, PBC */ -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { readAnnotatedYamlFromString } from "../../../src/core/lib/yaml-intelligence/annotated-yaml.ts"; import { yamlValidationUnitTest } from "../schema-validation/utils.ts"; diff --git a/tests/unit/yaml-intelligence/hover-info.test.ts b/tests/unit/yaml-intelligence/hover-info.test.ts index 3f0926f62d1..b56e3aa499b 100644 --- a/tests/unit/yaml-intelligence/hover-info.test.ts +++ b/tests/unit/yaml-intelligence/hover-info.test.ts @@ -4,7 +4,7 @@ * Copyright (C) 2022 Posit Software, PBC * */ -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { createVirtualDocument, diff --git a/tests/unit/yaml.test.ts b/tests/unit/yaml.test.ts index ed30b342aaf..a71b9dd9239 100644 --- a/tests/unit/yaml.test.ts +++ b/tests/unit/yaml.test.ts @@ -5,7 +5,7 @@ * */ import { unitTest } from "../test.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { Metadata } from "../../src/config/types.ts"; import { readYamlFromString } from "../../src/core/yaml.ts"; diff --git a/tests/verify.ts b/tests/verify.ts index b8b59774e0b..9e303fe9396 100644 --- a/tests/verify.ts +++ b/tests/verify.ts @@ -4,9 +4,9 @@ * Copyright (C) 2020-2022 Posit Software, PBC */ -import { existsSync, walkSync} from "fs/mod.ts"; +import { existsSync, walkSync } from "../src/deno_ral/fs.ts"; import { DOMParser, NodeList } from "../src/core/deno-dom.ts"; -import { assert } from "testing/asserts.ts"; +import { assert } from "testing/asserts"; import { basename, dirname, join, relative, resolve } from "../src/deno_ral/path.ts"; import { parseXmlDocument } from "slimdom"; import xpath from "fontoxpath"; diff --git a/tools/render-all-formats.ts b/tools/render-all-formats.ts index ab79202cd27..6d33c2d4d41 100644 --- a/tools/render-all-formats.ts +++ b/tools/render-all-formats.ts @@ -1,8 +1,8 @@ #!/usr/bin/env -S deno run --unstable -import * as fs from 'https://deno.land/std/fs/mod.ts'; -import * as yaml from 'https://deno.land/std/yaml/mod.ts'; -import * as path from 'https://deno.land/std/path/mod.ts'; +import * as fs from 'stdlib/fs'; +import * as yaml from 'stdlib/yaml'; +import * as path from 'stdlib/globPath'; const formatKeep: Record = { 'pdf': 'tex', From 5bb3f8647f71424b9486fca5c3878a3a51b79181 Mon Sep 17 00:00:00 2001 From: Carlos Scheidegger Date: Wed, 2 Oct 2024 10:47:39 -0700 Subject: [PATCH 2/3] add cderv's fix back --- package/scripts/windows/quarto.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/scripts/windows/quarto.cmd b/package/scripts/windows/quarto.cmd index ed14a8adfb3..12b776395a6 100644 --- a/package/scripts/windows/quarto.cmd +++ b/package/scripts/windows/quarto.cmd @@ -57,7 +57,7 @@ IF EXIST "!QUARTO_TS_PATH!" ( echo !DENO!>"!DENO_VERSION_FILE!" ) - SET QUARTO_CACHE_OPTIONS="" + SET QUARTO_CACHE_OPTIONS= ) ELSE ( From 6c6d7fce795df179ee225adf51e0456c11c95567 Mon Sep 17 00:00:00 2001 From: Carlos Scheidegger Date: Wed, 2 Oct 2024 11:23:56 -0700 Subject: [PATCH 3/3] changelog --- news/changelog-1.6.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/news/changelog-1.6.md b/news/changelog-1.6.md index 02bbb05e3f6..441f0e42802 100644 --- a/news/changelog-1.6.md +++ b/news/changelog-1.6.md @@ -1,5 +1,9 @@ All changes included in 1.6: +## Breaking changes + +- The syntax for standard library imports in `quarto run` TypeScript files (`*.ts`) changed. Please see https://prerelease.quarto.org/docs/projects/scripts.html#deno-scripts for how to make the necessary changes. + ## `quarto inspect` - ([#10039](https://github.com/quarto-dev/quarto-cli/issues/10039)): `quarto inspect` properly handles `!expr` tag in metadata. @@ -81,6 +85,7 @@ All changes included in 1.6: - Upgrade `mermaidjs` to 11.2.0. - Upgrade Pandoc to 3.4. +- Upgrade `deno` to 1.46.3. - ([#10162](https://github.com/quarto-dev/quarto-cli/issues/10162)): Use Edge on `macOS` as a Chromium browser when available. - ([#10235](https://github.com/quarto-dev/quarto-cli/issues/10235)): Configure the CI schedule trigger to activate exclusively for the upstream repository. - ([#10295](https://github.com/quarto-dev/quarto-cli/issues/10235)): Fix regression to return error status to shell when `CommandError` is thrown.