@wbce/projen-d9 0.0.28 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +184 -45
- package/API.md +153 -37
- package/CHANGELOG.md +13 -0
- package/README.md +10 -3
- package/docs/D9-plumbing.md +189 -0
- package/lib/cli/atlas.d.ts +10 -0
- package/lib/cli/atlas.js +65 -0
- package/lib/cli/commands/cedar/cedar-format.d.ts +7 -0
- package/lib/cli/commands/cedar/cedar-format.js +75 -0
- package/lib/cli/commands/cedar/cedar-to-d9-translations.d.ts +12 -0
- package/lib/cli/commands/cedar/cedar-to-d9-translations.js +130 -0
- package/lib/cli/commands/cedar/cedar-to-d9.d.ts +57 -0
- package/lib/cli/commands/cedar/cedar-to-d9.js +221 -0
- package/lib/cli/commands/cedar/cedar-translations.d.ts +9 -0
- package/lib/cli/commands/cedar/cedar-translations.js +213 -0
- package/lib/cli/commands/cedar/d9-permission.d.ts +27 -0
- package/lib/cli/commands/cedar/d9-permission.js +45 -0
- package/lib/cli/commands/cedar/d9-to-cedar.d.ts +33 -0
- package/lib/cli/commands/cedar/d9-to-cedar.js +157 -0
- package/lib/cli/commands/cedar/roles-table.d.ts +14 -0
- package/lib/cli/commands/cedar/roles-table.js +29 -0
- package/lib/cli/commands/save/apply-snapshot.js +39 -30
- package/lib/cli/commands/save/check-unsaved.d.ts +9 -0
- package/lib/cli/commands/save/check-unsaved.js +81 -0
- package/lib/cli/commands/save/env.d.ts +33 -0
- package/lib/cli/commands/save/env.js +109 -0
- package/lib/cli/commands/save/save-snapshot.d.ts +9 -0
- package/lib/cli/commands/save/save-snapshot.js +232 -0
- package/lib/cli/commands/save/sync-files.d.ts +5 -0
- package/lib/cli/commands/save/sync-files.js +46 -0
- package/lib/cli/commands/save/transfer.d.ts +18 -0
- package/lib/cli/commands/save/transfer.js +96 -0
- package/lib/cli/commands/save/utils.d.ts +5 -0
- package/lib/cli/commands/save/utils.js +33 -3
- package/lib/cli/commands/sync.js +4 -3
- package/lib/cli/index.js +65 -25
- package/lib/cli/logger.d.ts +2 -0
- package/lib/cli/logger.js +10 -0
- package/lib/cli/plumbing-config.d.ts +11 -0
- package/lib/cli/plumbing-config.js +13 -0
- package/lib/index.d.ts +44 -5
- package/lib/index.js +54 -41
- package/node_modules/@cedar-policy/cedar-wasm/README.md +181 -0
- package/node_modules/@cedar-policy/cedar-wasm/esm/README.md +181 -0
- package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm.d.ts +427 -0
- package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm.js +9 -0
- package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.js +434 -0
- package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.wasm +0 -0
- package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.wasm.d.ts +34 -0
- package/node_modules/@cedar-policy/cedar-wasm/esm/package.json +23 -0
- package/node_modules/@cedar-policy/cedar-wasm/nodejs/README.md +181 -0
- package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm.d.ts +427 -0
- package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm.js +463 -0
- package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm_bg.wasm +0 -0
- package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm_bg.wasm.d.ts +34 -0
- package/node_modules/@cedar-policy/cedar-wasm/nodejs/package.json +18 -0
- package/node_modules/@cedar-policy/cedar-wasm/package.json +53 -0
- package/node_modules/@cedar-policy/cedar-wasm/web/README.md +181 -0
- package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm.d.ts +486 -0
- package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm.js +534 -0
- package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm_bg.wasm +0 -0
- package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm_bg.wasm.d.ts +34 -0
- package/node_modules/@cedar-policy/cedar-wasm/web/package.json +21 -0
- package/node_modules/@types/node/README.md +5 -6
- package/node_modules/@types/node/assert/strict.d.ts +111 -0
- package/node_modules/@types/node/assert.d.ts +1040 -79
- package/node_modules/@types/node/async_hooks.d.ts +476 -119
- package/node_modules/@types/node/buffer.buffer.d.ts +472 -0
- package/node_modules/@types/node/buffer.d.ts +1925 -13
- package/node_modules/@types/node/child_process.d.ts +1204 -235
- package/node_modules/@types/node/cluster.d.ts +455 -137
- package/node_modules/@types/node/compatibility/disposable.d.ts +14 -0
- package/node_modules/@types/node/compatibility/index.d.ts +9 -0
- package/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
- package/node_modules/@types/node/compatibility/iterators.d.ts +20 -0
- package/node_modules/@types/node/console.d.ts +450 -1
- package/node_modules/@types/node/constants.d.ts +20 -447
- package/node_modules/@types/node/crypto.d.ts +3962 -600
- package/node_modules/@types/node/dgram.d.ts +515 -33
- package/node_modules/@types/node/diagnostics_channel.d.ts +578 -0
- package/node_modules/@types/node/dns/promises.d.ts +503 -0
- package/node_modules/@types/node/dns.d.ts +798 -247
- package/node_modules/@types/node/domain.d.ts +164 -10
- package/node_modules/@types/node/events.d.ts +954 -25
- package/node_modules/@types/node/fs/promises.d.ts +1295 -0
- package/node_modules/@types/node/fs.d.ts +3463 -1569
- package/node_modules/@types/node/globals.d.ts +98 -1277
- package/node_modules/@types/node/globals.typedarray.d.ts +38 -0
- package/node_modules/@types/node/http.d.ts +1933 -300
- package/node_modules/@types/node/http2.d.ts +1946 -254
- package/node_modules/@types/node/https.d.ts +557 -134
- package/node_modules/@types/node/index.d.ts +54 -48
- package/node_modules/@types/node/inspector.d.ts +227 -3014
- package/node_modules/@types/node/inspector.generated.d.ts +4052 -0
- package/node_modules/@types/node/module.d.ts +890 -2
- package/node_modules/@types/node/net.d.ts +872 -105
- package/node_modules/@types/node/os.d.ts +452 -209
- package/node_modules/@types/node/package.json +78 -128
- package/node_modules/@types/node/path.d.ts +196 -155
- package/node_modules/@types/node/perf_hooks.d.ts +829 -120
- package/node_modules/@types/node/process.d.ts +2072 -3
- package/node_modules/@types/node/punycode.d.ts +69 -27
- package/node_modules/@types/node/querystring.d.ts +132 -9
- package/node_modules/@types/node/readline/promises.d.ts +161 -0
- package/node_modules/@types/node/readline.d.ts +485 -49
- package/node_modules/@types/node/repl.d.ts +121 -83
- package/node_modules/@types/node/sea.d.ts +153 -0
- package/node_modules/@types/node/sqlite.d.ts +721 -0
- package/node_modules/@types/node/stream/consumers.d.ts +38 -0
- package/node_modules/@types/node/stream/promises.d.ts +90 -0
- package/node_modules/@types/node/stream/web.d.ts +622 -0
- package/node_modules/@types/node/stream.d.ts +1470 -140
- package/node_modules/@types/node/string_decoder.d.ts +64 -4
- package/node_modules/@types/node/test.d.ts +2163 -0
- package/node_modules/@types/node/timers/promises.d.ts +108 -0
- package/node_modules/@types/node/timers.d.ts +284 -13
- package/node_modules/@types/node/tls.d.ts +850 -244
- package/node_modules/@types/node/trace_events.d.ts +147 -11
- package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
- package/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
- package/node_modules/@types/node/ts5.6/index.d.ts +97 -0
- package/node_modules/@types/node/tty.d.ts +160 -18
- package/node_modules/@types/node/url.d.ts +890 -53
- package/node_modules/@types/node/util.d.ts +2566 -160
- package/node_modules/@types/node/v8.d.ts +806 -83
- package/node_modules/@types/node/vm.d.ts +932 -44
- package/node_modules/@types/node/wasi.d.ts +148 -22
- package/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
- package/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
- package/node_modules/@types/node/web-globals/events.d.ts +97 -0
- package/node_modules/@types/node/web-globals/fetch.d.ts +55 -0
- package/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
- package/node_modules/@types/node/web-globals/storage.d.ts +24 -0
- package/node_modules/@types/node/worker_threads.d.ts +657 -80
- package/node_modules/@types/node/zlib.d.ts +510 -119
- package/node_modules/pino/.nojekyll +0 -0
- package/node_modules/pino/.prettierignore +1 -0
- package/node_modules/pino/CNAME +1 -0
- package/node_modules/pino/CONTRIBUTING.md +34 -0
- package/node_modules/pino/LICENSE +21 -0
- package/node_modules/pino/README.md +177 -0
- package/node_modules/pino/SECURITY.md +103 -0
- package/node_modules/pino/benchmarks/basic.bench.js +95 -0
- package/node_modules/pino/benchmarks/child-child.bench.js +52 -0
- package/node_modules/pino/benchmarks/child-creation.bench.js +73 -0
- package/node_modules/pino/benchmarks/child.bench.js +62 -0
- package/node_modules/pino/benchmarks/deep-object.bench.js +88 -0
- package/node_modules/pino/benchmarks/formatters.bench.js +50 -0
- package/node_modules/pino/benchmarks/internal/custom-levels.js +67 -0
- package/node_modules/pino/benchmarks/internal/just-pino-heavy.bench.js +76 -0
- package/node_modules/pino/benchmarks/internal/just-pino.bench.js +182 -0
- package/node_modules/pino/benchmarks/internal/parent-vs-child.bench.js +75 -0
- package/node_modules/pino/benchmarks/internal/redact.bench.js +86 -0
- package/node_modules/pino/benchmarks/long-string.bench.js +81 -0
- package/node_modules/pino/benchmarks/multi-arg.bench.js +193 -0
- package/node_modules/pino/benchmarks/multistream.js +98 -0
- package/node_modules/pino/benchmarks/object.bench.js +82 -0
- package/node_modules/pino/benchmarks/utils/generate-benchmark-doc.js +36 -0
- package/node_modules/pino/benchmarks/utils/runbench.js +138 -0
- package/node_modules/pino/benchmarks/utils/wrap-log-level.js +55 -0
- package/node_modules/pino/bin.js +6 -0
- package/node_modules/pino/browser.js +607 -0
- package/node_modules/pino/build/sync-version.js +25 -0
- package/node_modules/pino/docs/api.md +1664 -0
- package/node_modules/pino/docs/asynchronous.md +55 -0
- package/node_modules/pino/docs/benchmarks.md +55 -0
- package/node_modules/pino/docs/browser.md +341 -0
- package/node_modules/pino/docs/bundling.md +40 -0
- package/node_modules/pino/docs/child-loggers.md +116 -0
- package/node_modules/pino/docs/diagnostics.md +16 -0
- package/node_modules/pino/docs/ecosystem.md +87 -0
- package/node_modules/pino/docs/help.md +353 -0
- package/node_modules/pino/docs/lts.md +93 -0
- package/node_modules/pino/docs/pretty.md +38 -0
- package/node_modules/pino/docs/redaction.md +130 -0
- package/node_modules/pino/docs/transports.md +1447 -0
- package/node_modules/pino/docs/web.md +306 -0
- package/node_modules/pino/eslint.config.js +36 -0
- package/node_modules/pino/examples/basic.js +43 -0
- package/node_modules/pino/examples/transport.js +68 -0
- package/node_modules/pino/favicon.ico +0 -0
- package/node_modules/pino/file.js +12 -0
- package/node_modules/pino/inc-version.sh +42 -0
- package/node_modules/pino/index.html +55 -0
- package/node_modules/pino/lib/caller.js +40 -0
- package/node_modules/pino/lib/constants.js +28 -0
- package/node_modules/pino/lib/deprecations.js +8 -0
- package/node_modules/pino/lib/levels.js +241 -0
- package/node_modules/pino/lib/meta.js +3 -0
- package/node_modules/pino/lib/multistream.js +211 -0
- package/node_modules/pino/lib/proto.js +256 -0
- package/node_modules/pino/lib/redaction.js +119 -0
- package/node_modules/pino/lib/symbols.js +76 -0
- package/node_modules/pino/lib/time.js +39 -0
- package/node_modules/pino/lib/tools.js +427 -0
- package/node_modules/pino/lib/transport-stream.js +56 -0
- package/node_modules/pino/lib/transport.js +302 -0
- package/node_modules/pino/lib/worker.js +197 -0
- package/node_modules/pino/package.json +112 -0
- package/node_modules/pino/pino.d.ts +881 -0
- package/node_modules/pino/pino.js +259 -0
- package/node_modules/pino/test/basic.test.js +952 -0
- package/node_modules/pino/test/broken-pipe.test.js +59 -0
- package/node_modules/pino/test/browser-bindings.test.js +114 -0
- package/node_modules/pino/test/browser-child.test.js +132 -0
- package/node_modules/pino/test/browser-disabled.test.js +87 -0
- package/node_modules/pino/test/browser-early-console-freeze.test.js +12 -0
- package/node_modules/pino/test/browser-is-level-enabled.test.js +101 -0
- package/node_modules/pino/test/browser-levels.test.js +241 -0
- package/node_modules/pino/test/browser-redaction.test.js +264 -0
- package/node_modules/pino/test/browser-serializers.test.js +352 -0
- package/node_modules/pino/test/browser-set-bindings.test.js +99 -0
- package/node_modules/pino/test/browser-timestamp.test.js +88 -0
- package/node_modules/pino/test/browser-transmit.test.js +417 -0
- package/node_modules/pino/test/browser.test.js +698 -0
- package/node_modules/pino/test/caller.test.js +20 -0
- package/node_modules/pino/test/complex-objects.test.js +36 -0
- package/node_modules/pino/test/crlf.test.js +34 -0
- package/node_modules/pino/test/custom-levels.test.js +267 -0
- package/node_modules/pino/test/diagnostics.test.js +107 -0
- package/node_modules/pino/test/error-key.test.js +37 -0
- package/node_modules/pino/test/error.test.js +403 -0
- package/node_modules/pino/test/escaping.test.js +110 -0
- package/node_modules/pino/test/esm/esm.mjs +14 -0
- package/node_modules/pino/test/esm/index.test.js +21 -0
- package/node_modules/pino/test/esm/named-exports.mjs +29 -0
- package/node_modules/pino/test/exit.test.js +79 -0
- package/node_modules/pino/test/fixtures/broken-pipe/basic.js +9 -0
- package/node_modules/pino/test/fixtures/broken-pipe/destination.js +10 -0
- package/node_modules/pino/test/fixtures/broken-pipe/syncfalse.js +12 -0
- package/node_modules/pino/test/fixtures/caller-loop.js +6 -0
- package/node_modules/pino/test/fixtures/console-transport.js +13 -0
- package/node_modules/pino/test/fixtures/crashing-transport.js +13 -0
- package/node_modules/pino/test/fixtures/default-exit.js +8 -0
- package/node_modules/pino/test/fixtures/destination-exit.js +8 -0
- package/node_modules/pino/test/fixtures/eval/index.js +13 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/14-files.js +3 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/2-files.js +3 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file1.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file10.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file11.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file12.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file13.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file14.js +11 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file2.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file3.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file4.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file5.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file6.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file7.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file8.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file9.js +5 -0
- package/node_modules/pino/test/fixtures/noop-transport.js +10 -0
- package/node_modules/pino/test/fixtures/pretty/null-prototype.js +8 -0
- package/node_modules/pino/test/fixtures/stdout-hack-protection.js +11 -0
- package/node_modules/pino/test/fixtures/syncfalse-child.js +6 -0
- package/node_modules/pino/test/fixtures/syncfalse-exit.js +9 -0
- package/node_modules/pino/test/fixtures/syncfalse-flush-exit.js +10 -0
- package/node_modules/pino/test/fixtures/syncfalse.js +6 -0
- package/node_modules/pino/test/fixtures/syntax-error-esm.mjs +2 -0
- package/node_modules/pino/test/fixtures/to-file-transport-with-transform.js +20 -0
- package/node_modules/pino/test/fixtures/to-file-transport.js +13 -0
- package/node_modules/pino/test/fixtures/to-file-transport.mjs +8 -0
- package/node_modules/pino/test/fixtures/transport/index.js +12 -0
- package/node_modules/pino/test/fixtures/transport/package.json +5 -0
- package/node_modules/pino/test/fixtures/transport-exit-immediately-with-async-dest.js +16 -0
- package/node_modules/pino/test/fixtures/transport-exit-immediately.js +11 -0
- package/node_modules/pino/test/fixtures/transport-exit-on-ready.js +12 -0
- package/node_modules/pino/test/fixtures/transport-invalid-node-options.js +26 -0
- package/node_modules/pino/test/fixtures/transport-main.js +9 -0
- package/node_modules/pino/test/fixtures/transport-many-lines.js +29 -0
- package/node_modules/pino/test/fixtures/transport-preload-main.mjs +13 -0
- package/node_modules/pino/test/fixtures/transport-preload.mjs +13 -0
- package/node_modules/pino/test/fixtures/transport-string-stdout.js +9 -0
- package/node_modules/pino/test/fixtures/transport-transform.js +21 -0
- package/node_modules/pino/test/fixtures/transport-uses-pino-config.js +33 -0
- package/node_modules/pino/test/fixtures/transport-with-on-exit.js +12 -0
- package/node_modules/pino/test/fixtures/transport-worker-data.js +19 -0
- package/node_modules/pino/test/fixtures/transport-worker-name.js +24 -0
- package/node_modules/pino/test/fixtures/transport-worker.js +15 -0
- package/node_modules/pino/test/fixtures/transport-wrong-export-type.js +3 -0
- package/node_modules/pino/test/fixtures/ts/to-file-transport-native.mts +15 -0
- package/node_modules/pino/test/fixtures/ts/to-file-transport-with-transform.ts +18 -0
- package/node_modules/pino/test/fixtures/ts/to-file-transport.ts +11 -0
- package/node_modules/pino/test/fixtures/ts/transpile.cjs +36 -0
- package/node_modules/pino/test/fixtures/ts/transport-exit-immediately-with-async-dest.ts +15 -0
- package/node_modules/pino/test/fixtures/ts/transport-exit-immediately.ts +10 -0
- package/node_modules/pino/test/fixtures/ts/transport-exit-on-ready.ts +11 -0
- package/node_modules/pino/test/fixtures/ts/transport-main.ts +8 -0
- package/node_modules/pino/test/fixtures/ts/transport-string-stdout.ts +8 -0
- package/node_modules/pino/test/fixtures/ts/transport-worker.ts +14 -0
- package/node_modules/pino/test/formatters.test.js +364 -0
- package/node_modules/pino/test/helper.d.ts +4 -0
- package/node_modules/pino/test/helper.js +159 -0
- package/node_modules/pino/test/hooks.test.js +114 -0
- package/node_modules/pino/test/http.test.js +214 -0
- package/node_modules/pino/test/internals/version.test.js +17 -0
- package/node_modules/pino/test/is-level-enabled.test.js +179 -0
- package/node_modules/pino/test/jest/basic.spec.js +10 -0
- package/node_modules/pino/test/levels.test.js +810 -0
- package/node_modules/pino/test/metadata.test.js +120 -0
- package/node_modules/pino/test/mixin-merge-strategy.test.js +57 -0
- package/node_modules/pino/test/mixin.test.js +241 -0
- package/node_modules/pino/test/multistream.test.js +793 -0
- package/node_modules/pino/test/redact.test.js +923 -0
- package/node_modules/pino/test/serializers.test.js +257 -0
- package/node_modules/pino/test/smoke.js +59 -0
- package/node_modules/pino/test/stdout-protection.test.js +41 -0
- package/node_modules/pino/test/syncfalse.test.js +186 -0
- package/node_modules/pino/test/timestamp-nano.test.js +37 -0
- package/node_modules/pino/test/timestamp.test.js +124 -0
- package/node_modules/pino/test/transport/big.test.js +42 -0
- package/node_modules/pino/test/transport/bundlers-support.test.js +99 -0
- package/node_modules/pino/test/transport/caller.test.js +24 -0
- package/node_modules/pino/test/transport/core.test.js +818 -0
- package/node_modules/pino/test/transport/core.transpiled.test.ts +114 -0
- package/node_modules/pino/test/transport/crash.test.js +36 -0
- package/node_modules/pino/test/transport/module-link.test.js +241 -0
- package/node_modules/pino/test/transport/native-type-stripping.test.mjs +151 -0
- package/node_modules/pino/test/transport/node-options.test.js +116 -0
- package/node_modules/pino/test/transport/pipeline.test.js +137 -0
- package/node_modules/pino/test/transport/preload.test.js +54 -0
- package/node_modules/pino/test/transport/repl.test.js +15 -0
- package/node_modules/pino/test/transport/sync-false.test.js +79 -0
- package/node_modules/pino/test/transport/sync-true.test.js +57 -0
- package/node_modules/pino/test/transport/targets.test.js +48 -0
- package/node_modules/pino/test/transport/uses-pino-config.test.js +166 -0
- package/node_modules/pino/test/transport-stream.test.js +40 -0
- package/node_modules/pino/test/types/pino-import.tst.cts +30 -0
- package/node_modules/pino/test/types/pino-import.tst.js +73 -0
- package/node_modules/pino/test/types/pino-multistream.tst.ts +49 -0
- package/node_modules/pino/test/types/pino-top-export.tst.ts +32 -0
- package/node_modules/pino/test/types/pino-transport.tst.ts +171 -0
- package/node_modules/pino/test/types/pino-type-only.tst.ts +77 -0
- package/node_modules/pino/test/types/pino.ts +98 -0
- package/node_modules/pino/test/types/pino.tst.ts +681 -0
- package/node_modules/pino/test/types/tsconfig.json +10 -0
- package/node_modules/pino/tsconfig.json +14 -0
- package/node_modules/pino-pretty/.borp.yaml +6 -0
- package/node_modules/pino-pretty/.editorconfig +13 -0
- package/node_modules/pino-pretty/.github/dependabot.yml +13 -0
- package/node_modules/pino-pretty/.github/workflows/ci.yml +83 -0
- package/node_modules/pino-pretty/LICENSE +21 -0
- package/node_modules/pino-pretty/Readme.md +425 -0
- package/node_modules/pino-pretty/SECURITY.md +146 -0
- package/node_modules/pino-pretty/benchmark.js +105 -0
- package/node_modules/pino-pretty/bin.js +113 -0
- package/node_modules/pino-pretty/demo.png +0 -0
- package/node_modules/pino-pretty/docs/help.md +24 -0
- package/node_modules/pino-pretty/eslint.config.js +5 -0
- package/node_modules/pino-pretty/help/help.txt +68 -0
- package/node_modules/pino-pretty/index.d.ts +227 -0
- package/node_modules/pino-pretty/index.js +234 -0
- package/node_modules/pino-pretty/lib/colors.js +134 -0
- package/node_modules/pino-pretty/lib/colors.test.js +132 -0
- package/node_modules/pino-pretty/lib/constants.js +55 -0
- package/node_modules/pino-pretty/lib/pretty.js +171 -0
- package/node_modules/pino-pretty/lib/utils/build-safe-sonic-boom.js +69 -0
- package/node_modules/pino-pretty/lib/utils/build-safe-sonic-boom.test.js +84 -0
- package/node_modules/pino-pretty/lib/utils/create-date.js +26 -0
- package/node_modules/pino-pretty/lib/utils/create-date.test.js +20 -0
- package/node_modules/pino-pretty/lib/utils/delete-log-property.js +28 -0
- package/node_modules/pino-pretty/lib/utils/delete-log-property.test.js +31 -0
- package/node_modules/pino-pretty/lib/utils/filter-log.js +99 -0
- package/node_modules/pino-pretty/lib/utils/filter-log.test.js +265 -0
- package/node_modules/pino-pretty/lib/utils/format-time.js +66 -0
- package/node_modules/pino-pretty/lib/utils/format-time.test.js +71 -0
- package/node_modules/pino-pretty/lib/utils/get-level-label-data.js +29 -0
- package/node_modules/pino-pretty/lib/utils/get-property-value.js +30 -0
- package/node_modules/pino-pretty/lib/utils/get-property-value.test.js +31 -0
- package/node_modules/pino-pretty/lib/utils/handle-custom-levels-names-opts.js +38 -0
- package/node_modules/pino-pretty/lib/utils/handle-custom-levels-names-opts.test.js +45 -0
- package/node_modules/pino-pretty/lib/utils/handle-custom-levels-opts.js +39 -0
- package/node_modules/pino-pretty/lib/utils/handle-custom-levels-opts.test.js +47 -0
- package/node_modules/pino-pretty/lib/utils/index.js +108 -0
- package/node_modules/pino-pretty/lib/utils/index.test.js +37 -0
- package/node_modules/pino-pretty/lib/utils/interpret-conditionals.js +41 -0
- package/node_modules/pino-pretty/lib/utils/interpret-conditionals.test.js +84 -0
- package/node_modules/pino-pretty/lib/utils/is-object.js +7 -0
- package/node_modules/pino-pretty/lib/utils/is-object.test.js +10 -0
- package/node_modules/pino-pretty/lib/utils/is-valid-date.js +14 -0
- package/node_modules/pino-pretty/lib/utils/is-valid-date.test.js +16 -0
- package/node_modules/pino-pretty/lib/utils/join-lines-with-indentation.js +29 -0
- package/node_modules/pino-pretty/lib/utils/join-lines-with-indentation.test.js +16 -0
- package/node_modules/pino-pretty/lib/utils/noop.js +3 -0
- package/node_modules/pino-pretty/lib/utils/noop.test.js +12 -0
- package/node_modules/pino-pretty/lib/utils/parse-factory-options.js +171 -0
- package/node_modules/pino-pretty/lib/utils/prettify-error-log.js +76 -0
- package/node_modules/pino-pretty/lib/utils/prettify-error-log.test.js +143 -0
- package/node_modules/pino-pretty/lib/utils/prettify-error.js +54 -0
- package/node_modules/pino-pretty/lib/utils/prettify-error.test.js +25 -0
- package/node_modules/pino-pretty/lib/utils/prettify-level.js +41 -0
- package/node_modules/pino-pretty/lib/utils/prettify-level.test.js +70 -0
- package/node_modules/pino-pretty/lib/utils/prettify-message.js +65 -0
- package/node_modules/pino-pretty/lib/utils/prettify-message.test.js +287 -0
- package/node_modules/pino-pretty/lib/utils/prettify-metadata.js +75 -0
- package/node_modules/pino-pretty/lib/utils/prettify-metadata.test.js +170 -0
- package/node_modules/pino-pretty/lib/utils/prettify-object.js +115 -0
- package/node_modules/pino-pretty/lib/utils/prettify-object.test.js +217 -0
- package/node_modules/pino-pretty/lib/utils/prettify-time.js +43 -0
- package/node_modules/pino-pretty/lib/utils/prettify-time.test.js +264 -0
- package/node_modules/pino-pretty/lib/utils/split-property-key.js +49 -0
- package/node_modules/pino-pretty/lib/utils/split-property-key.test.js +29 -0
- package/node_modules/pino-pretty/lib/utils/strip-unsafe-control-chars.js +18 -0
- package/node_modules/pino-pretty/lib/utils/strip-unsafe-control-chars.test.js +9 -0
- package/node_modules/pino-pretty/package.json +64 -0
- package/node_modules/pino-pretty/test/basic.test.js +1305 -0
- package/node_modules/pino-pretty/test/boolean-options.test.js +228 -0
- package/node_modules/pino-pretty/test/cli-rc.test.js +275 -0
- package/node_modules/pino-pretty/test/cli.test.js +360 -0
- package/node_modules/pino-pretty/test/crlf.test.js +33 -0
- package/node_modules/pino-pretty/test/error-objects.test.js +494 -0
- package/node_modules/pino-pretty/test/example/example.js +33 -0
- package/node_modules/pino-pretty/test/helper.js +19 -0
- package/node_modules/pino-pretty/test/types/exports.tst.ts +15 -0
- package/node_modules/pino-pretty/test/types/pino-pretty.tst.ts +140 -0
- package/node_modules/pino-pretty/test/types/tsconfig.json +9 -0
- package/package.json +12 -5
- package/lib/cli/commands/init.d.ts +0 -1
- package/lib/cli/commands/init.js +0 -8
- package/node_modules/@types/node/globals.global.d.ts +0 -1
package/lib/index.js
CHANGED
|
@@ -10,8 +10,8 @@ const workflows_model_1 = require("projen/lib/github/workflows-model");
|
|
|
10
10
|
const javascript_1 = require("projen/lib/javascript");
|
|
11
11
|
class D9Project extends projen_1.javascript.NodeProject {
|
|
12
12
|
constructor(options) {
|
|
13
|
-
const d9Version = options.packageVersions?.d9 || '12.0.
|
|
14
|
-
const atlasVersion = options.packageVersions?.atlas || '
|
|
13
|
+
const d9Version = options.packageVersions?.d9 || '12.0.15';
|
|
14
|
+
const atlasVersion = options.packageVersions?.atlas || '1.3.3';
|
|
15
15
|
super({
|
|
16
16
|
...options,
|
|
17
17
|
packageManager: options.packageManager ?? projen_1.javascript.NodePackageManager.NPM,
|
|
@@ -53,8 +53,8 @@ class D9Project extends projen_1.javascript.NodeProject {
|
|
|
53
53
|
'',
|
|
54
54
|
'| Task | Description |',
|
|
55
55
|
'| --- | --- |',
|
|
56
|
-
'| `npx projen run` | Start d9 (`docker compose up
|
|
57
|
-
'| `npx projen build-extensions` | Install and build all extensions |',
|
|
56
|
+
'| `npx projen run` | Start d9 (`docker compose up d9`) |',
|
|
57
|
+
'| `npx projen build-extensions [name]` | Install and build all extensions (or only `name`) |',
|
|
58
58
|
'| `npx projen create-an-admin` | Create the default admin user |',
|
|
59
59
|
'',
|
|
60
60
|
'See `.projen/tasks.json` for the full list.',
|
|
@@ -79,7 +79,6 @@ class D9Project extends projen_1.javascript.NodeProject {
|
|
|
79
79
|
devDeps: [
|
|
80
80
|
'@wbce/projen-d9',
|
|
81
81
|
'@wbce/projen-d9-extension',
|
|
82
|
-
`@ariga/atlas@${atlasVersion}`,
|
|
83
82
|
...(options.devDeps ?? []),
|
|
84
83
|
],
|
|
85
84
|
deps: [`@wbce-d9/directus9@${d9Version}`],
|
|
@@ -87,12 +86,15 @@ class D9Project extends projen_1.javascript.NodeProject {
|
|
|
87
86
|
this.options = options;
|
|
88
87
|
// No tsconfig means no tsc --build in compile
|
|
89
88
|
this.compileTask.reset();
|
|
89
|
+
this.plumbingConfig = new projen_1.JsonFile(this, 'd9-plumbing.json', {
|
|
90
|
+
obj: { atlasVersion },
|
|
91
|
+
});
|
|
90
92
|
this.addExtensionFolder();
|
|
91
93
|
this.addDockerCompose();
|
|
92
|
-
this.addApplySchemaTask();
|
|
93
94
|
this.addFirstRunTask();
|
|
94
95
|
this.addBuildExtensionTask();
|
|
95
96
|
this.addRunTask();
|
|
97
|
+
this.addD9PlumbingTask();
|
|
96
98
|
this.addDockerfile();
|
|
97
99
|
this.addCreateAdminUserTask();
|
|
98
100
|
new projen_1.AiInstructions(this, {
|
|
@@ -106,7 +108,7 @@ class D9Project extends projen_1.javascript.NodeProject {
|
|
|
106
108
|
this.gitignore.addPatterns('**/.DS_Store');
|
|
107
109
|
this.gitignore.addPatterns('.env.local');
|
|
108
110
|
// Create an empty .env.local if it doesn't exist, so Docker doesn't mount a directory
|
|
109
|
-
new projen_1.SampleFile(this, '.env.local', { contents: '# Local environment overrides for
|
|
111
|
+
new projen_1.SampleFile(this, '.env.local', { contents: '# Local environment overrides for d9' });
|
|
110
112
|
}
|
|
111
113
|
addExtensionFolder() {
|
|
112
114
|
const folderName = this.options.extensionsFolderName ?? 'plugins';
|
|
@@ -118,15 +120,26 @@ class D9Project extends projen_1.javascript.NodeProject {
|
|
|
118
120
|
addExtension(name, extensionTypes, options) {
|
|
119
121
|
return this.extensions.add(name, extensionTypes, options);
|
|
120
122
|
}
|
|
123
|
+
configurePlumbing(options) {
|
|
124
|
+
for (const [key, value] of Object.entries(options)) {
|
|
125
|
+
this.plumbingConfig.addOverride(key, value);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
121
128
|
addFirstRunTask() {
|
|
122
129
|
const task = this.addTask('first-run', {
|
|
123
|
-
description: 'Initialize and start a fresh
|
|
130
|
+
description: 'Initialize and start a fresh d9 instance',
|
|
124
131
|
});
|
|
125
132
|
const adminEmail = 'admin@example.com';
|
|
126
|
-
const userNotExistsCondition = `docker compose exec database psql -U
|
|
133
|
+
const userNotExistsCondition = `docker compose exec database psql -U d9 -d d9 -tAc "SELECT count(*) FROM directus_users WHERE email = '${adminEmail}'" | grep -q '^0$'`;
|
|
134
|
+
const emptyDatabaseCondition = 'docker compose exec database psql -U d9 -d d9 -tAc "SELECT count(*) FROM information_schema.tables WHERE table_name LIKE \'directus_%\'" | grep -q \'^0$\'';
|
|
127
135
|
task.exec('docker compose up -d --wait database cache');
|
|
128
|
-
task.
|
|
129
|
-
|
|
136
|
+
task.exec('npx d9-plumbing first-import --host localhost --user d9 --password d9 --database d9', {
|
|
137
|
+
condition: 'test -d ./sql',
|
|
138
|
+
});
|
|
139
|
+
task.exec('docker compose run --rm d9 npx directus bootstrap', {
|
|
140
|
+
condition: `test ! -d ./sql && ${emptyDatabaseCondition}`,
|
|
141
|
+
});
|
|
142
|
+
task.exec(`ADMIN_ROLE_ID=$(docker compose exec database psql -U d9 -d d9 -tAc "SELECT id FROM directus_roles WHERE admin_access = true LIMIT 1") && docker compose run --rm d9 npx directus users create --email ${adminEmail} --password totototo --role "$ADMIN_ROLE_ID"`, {
|
|
130
143
|
condition: userNotExistsCondition,
|
|
131
144
|
});
|
|
132
145
|
task.say(`User ${adminEmail} has been created with password totototo`, {
|
|
@@ -135,16 +148,16 @@ class D9Project extends projen_1.javascript.NodeProject {
|
|
|
135
148
|
task.say(`User ${adminEmail} already exists, skipping creation`, {
|
|
136
149
|
condition: `! ${userNotExistsCondition}`,
|
|
137
150
|
});
|
|
138
|
-
task.exec('docker compose up
|
|
151
|
+
task.exec('docker compose up d9');
|
|
139
152
|
}
|
|
140
153
|
addCreateAdminUserTask() {
|
|
141
154
|
const task = this.addTask('create-an-admin', {
|
|
142
155
|
description: 'Create an admin user',
|
|
143
156
|
});
|
|
144
157
|
const adminEmail = 'admin@example.com';
|
|
145
|
-
const userNotExistsCondition = `docker compose exec database psql -U
|
|
158
|
+
const userNotExistsCondition = `docker compose exec database psql -U d9 -d d9 -tAc "SELECT count(*) FROM directus_users WHERE email = '${adminEmail}'" | grep -q '^0$'`;
|
|
146
159
|
task.exec('docker compose up -d --wait database cache');
|
|
147
|
-
task.exec(`ADMIN_ROLE_ID=$(docker compose exec database psql -U
|
|
160
|
+
task.exec(`ADMIN_ROLE_ID=$(docker compose exec database psql -U d9 -d d9 -tAc "SELECT id FROM directus_roles WHERE admin_access = true LIMIT 1") && docker compose run --rm d9 npx directus users create --email ${adminEmail} --password totototo --role "$ADMIN_ROLE_ID"`, {
|
|
148
161
|
condition: userNotExistsCondition,
|
|
149
162
|
});
|
|
150
163
|
task.say(`User ${adminEmail} has been created with password totototo`, {
|
|
@@ -156,27 +169,24 @@ class D9Project extends projen_1.javascript.NodeProject {
|
|
|
156
169
|
}
|
|
157
170
|
addRunTask() {
|
|
158
171
|
const task = this.addTask('run', {
|
|
159
|
-
description: 'start the
|
|
172
|
+
description: 'start the d9 instance',
|
|
160
173
|
});
|
|
161
|
-
task.exec('docker compose up
|
|
174
|
+
task.exec('docker compose up d9');
|
|
162
175
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
description: '
|
|
166
|
-
});
|
|
167
|
-
this.applySchemaTask.exec('npx wbce-directus apply-snapshot --host localhost --user directus --password directus --database directus', {
|
|
168
|
-
condition: 'test -d ./sql',
|
|
169
|
-
});
|
|
170
|
-
this.applySchemaTask.exec('docker compose run --rm directus npx directus bootstrap', {
|
|
171
|
-
condition: 'test ! -d ./sql',
|
|
176
|
+
addD9PlumbingTask() {
|
|
177
|
+
const task = this.addTask('d9-plumbing', {
|
|
178
|
+
description: 'Run the d9-plumbing CLI (save, apply-schema, first-import...). Use --help to list all subcommands.',
|
|
172
179
|
});
|
|
180
|
+
task.say('Tip: you can also call it directly with `npx d9-plumbing <command>`');
|
|
181
|
+
task.exec('npx d9-plumbing "$@"', { receiveArgs: true });
|
|
173
182
|
}
|
|
174
183
|
addBuildExtensionTask() {
|
|
175
184
|
this.buildExtensionTask = this.addTask('build-extensions', {
|
|
176
|
-
description: 'Build the
|
|
185
|
+
description: 'Build the d9 extensions',
|
|
177
186
|
});
|
|
178
187
|
this.buildExtensionTask.exec(`cd ${this.extensionFolder} && pnpm install`);
|
|
179
|
-
|
|
188
|
+
// projen replaces "$@" with the quoted task args; `set --` turns them back into $1
|
|
189
|
+
this.buildExtensionTask.exec(`cd ${this.extensionFolder} && set -- "$@" && if [ -n "$1" ]; then pnpm --recursive --filter "$1..." run build; else pnpm run --recursive build; fi`, { receiveArgs: true });
|
|
180
190
|
}
|
|
181
191
|
addDockerCompose() {
|
|
182
192
|
const dc = new projen_1.DockerCompose(this);
|
|
@@ -189,9 +199,9 @@ class D9Project extends projen_1.javascript.NodeProject {
|
|
|
189
199
|
projen_1.DockerCompose.portMapping(5432, 5432),
|
|
190
200
|
],
|
|
191
201
|
environment: {
|
|
192
|
-
POSTGRES_USER: '
|
|
193
|
-
POSTGRES_PASSWORD: '
|
|
194
|
-
POSTGRES_DB: '
|
|
202
|
+
POSTGRES_USER: 'd9',
|
|
203
|
+
POSTGRES_PASSWORD: 'd9',
|
|
204
|
+
POSTGRES_DB: 'd9',
|
|
195
205
|
},
|
|
196
206
|
});
|
|
197
207
|
this.cacheService = dc.addService('cache', {
|
|
@@ -203,7 +213,7 @@ class D9Project extends projen_1.javascript.NodeProject {
|
|
|
203
213
|
projen_1.DockerCompose.portMapping(6379, 6379),
|
|
204
214
|
],
|
|
205
215
|
});
|
|
206
|
-
this.
|
|
216
|
+
this.d9Service = dc.addService('d9', {
|
|
207
217
|
imageBuild: { context: '.' },
|
|
208
218
|
ports: [
|
|
209
219
|
projen_1.DockerCompose.portMapping(8055, 8055),
|
|
@@ -220,11 +230,14 @@ class D9Project extends projen_1.javascript.NodeProject {
|
|
|
220
230
|
DB_CLIENT: 'pg',
|
|
221
231
|
DB_HOST: 'database',
|
|
222
232
|
DB_PORT: '5432',
|
|
223
|
-
DB_DATABASE: '
|
|
224
|
-
DB_USER: '
|
|
225
|
-
DB_PASSWORD: '
|
|
233
|
+
DB_DATABASE: 'd9',
|
|
234
|
+
DB_USER: 'd9',
|
|
235
|
+
DB_PASSWORD: 'd9',
|
|
226
236
|
CACHE_ENABLED: 'false',
|
|
237
|
+
CACHE_STORE: 'redis',
|
|
227
238
|
CACHE_REDIS_HOST: 'cache',
|
|
239
|
+
MESSENGER_STORE: 'redis',
|
|
240
|
+
MESSENGER_REDIS: 'redis://cache:6379',
|
|
228
241
|
CACHE_STATUS_HEADER: 'cache-hit',
|
|
229
242
|
CORS_ENABLED: 'true',
|
|
230
243
|
CORS_ORIGIN: 'true',
|
|
@@ -237,10 +250,10 @@ class D9Project extends projen_1.javascript.NodeProject {
|
|
|
237
250
|
},
|
|
238
251
|
command: ['sh', '-c', 'npx directus start'],
|
|
239
252
|
});
|
|
240
|
-
this.
|
|
253
|
+
this.d9Service.addVolume(projen_1.DockerCompose.bindVolume('./.env.local', '/app/.env.local'));
|
|
241
254
|
// Add healthcheck for database (not natively supported by projen DockerCompose)
|
|
242
255
|
dc.file.addOverride('services.database.healthcheck', {
|
|
243
|
-
test: ['CMD', 'pg_isready', '--host=localhost', '--username=
|
|
256
|
+
test: ['CMD', 'pg_isready', '--host=localhost', '--username=d9'],
|
|
244
257
|
interval: '10s',
|
|
245
258
|
timeout: '5s',
|
|
246
259
|
retries: 5,
|
|
@@ -257,7 +270,7 @@ class D9Project extends projen_1.javascript.NodeProject {
|
|
|
257
270
|
start_period: '30s',
|
|
258
271
|
});
|
|
259
272
|
// Override depends_on to use condition syntax
|
|
260
|
-
dc.file.addOverride('services.
|
|
273
|
+
dc.file.addOverride('services.d9.depends_on', {
|
|
261
274
|
cache: { condition: 'service_healthy' },
|
|
262
275
|
database: { condition: 'service_healthy' },
|
|
263
276
|
});
|
|
@@ -303,14 +316,14 @@ class D9Project extends projen_1.javascript.NodeProject {
|
|
|
303
316
|
.copy('.', '.')
|
|
304
317
|
.step('build-extension', 'build extensions')
|
|
305
318
|
.run('npx projen build-extensions')
|
|
306
|
-
.step('start', 'Start
|
|
319
|
+
.step('start', 'Start d9 server')
|
|
307
320
|
.cmdExec(['npx', 'directus', 'start']);
|
|
308
321
|
return this.dockerfile;
|
|
309
322
|
}
|
|
310
323
|
}
|
|
311
324
|
exports.D9Project = D9Project;
|
|
312
325
|
_a = JSII_RTTI_SYMBOL_1;
|
|
313
|
-
D9Project[_a] = { fqn: "@wbce/projen-d9.D9Project", version: "0.0
|
|
326
|
+
D9Project[_a] = { fqn: "@wbce/projen-d9.D9Project", version: "0.1.0" };
|
|
314
327
|
/**
|
|
315
328
|
* @deprecated Use {@link D9Project} instead. The package was renamed to `@wbce/projen-d9` to reflect that it targets the d9 fork, not upstream Directus.
|
|
316
329
|
*/
|
|
@@ -318,5 +331,5 @@ class DirectusProject extends D9Project {
|
|
|
318
331
|
}
|
|
319
332
|
exports.DirectusProject = DirectusProject;
|
|
320
333
|
_b = JSII_RTTI_SYMBOL_1;
|
|
321
|
-
DirectusProject[_b] = { fqn: "@wbce/projen-d9.DirectusProject", version: "0.0
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtRUFBa0c7QUFDbEcsdURBQW9GO0FBQ3BGLG1DQUFnSTtBQUNoSSx1RUFBa0U7QUFDbEUsc0RBQW9FO0FBNEJwRSxNQUFhLFNBQVUsU0FBUSxtQkFBVSxDQUFDLFdBQVc7SUFhbkQsWUFBc0IsT0FBeUI7UUFDN0MsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksUUFBUSxDQUFDO1FBQzFELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxlQUFlLEVBQUUsS0FBSyxJQUFJLFFBQVEsQ0FBQztRQUNoRSxLQUFLLENBQUM7WUFDSixHQUFHLE9BQU87WUFDVixjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWMsSUFBSSxtQkFBVSxDQUFDLGtCQUFrQixDQUFDLEdBQUc7WUFDM0UsTUFBTSxFQUFFLEtBQUssRUFBRSxzQ0FBc0M7WUFDckQsV0FBVyxFQUFFLElBQUk7WUFDakIsa0JBQWtCLEVBQUU7Z0JBQ2xCLGVBQWUsRUFBRTtvQkFDZixRQUFRLEVBQUUsd0NBQTJCLENBQUMsS0FBSztpQkFDNUM7YUFDRjtZQUNELFFBQVEsRUFBRSxLQUFLO1lBQ2YsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUk7Z0JBQ3hCLFFBQVEsRUFBRTtvQkFDUixLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUU7b0JBQ25CLEVBQUU7b0JBQ0YsZ1BBQWdQO29CQUNoUCxFQUFFO29CQUNGLHNCQUFzQjtvQkFDdEIsRUFBRTtvQkFDRixPQUFPO29CQUNQLGdEQUFnRDtvQkFDaEQsOERBQThEO29CQUM5RCxLQUFLO29CQUNMLEVBQUU7b0JBQ0YscUlBQXFJO29CQUNySSxFQUFFO29CQUNGLFdBQVc7b0JBQ1gsRUFBRTtvQkFDRixtRkFBbUY7b0JBQ25GLEVBQUU7b0JBQ0YsT0FBTztvQkFDUCw0Q0FBNEM7b0JB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RSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDOztBQTlVSCw4QkFnVkM7OztBQVFEOztHQUVHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLFNBQVM7O0FBQTlDLDBDQUFpRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZEV4dGVuc2lvbk9wdGlvbnMsIEQ5RXh0ZW5zaW9uVHlwZSwgRXh0ZW5zaW9uRm9sZGVyIH0gZnJvbSAnQHdiY2UvcHJvamVuLWQ5LWV4dGVuc2lvbic7XG5pbXBvcnQgeyBHaXRIdWJDb25maWcsIEdpdEh1YkNvbmZpZ09wdGlvbnMsIERvY2tlcmZpbGUgfSBmcm9tICdAd2JjZS9wcm9qZW4tc2hhcmVkJztcbmltcG9ydCB7IEFpQWdlbnQsIEFpSW5zdHJ1Y3Rpb25zLCBEb2NrZXJDb21wb3NlLCBEb2NrZXJDb21wb3NlU2VydmljZSwgamF2YXNjcmlwdCwgU2FtcGxlRmlsZSwgVGFzaywgdHlwZXNjcmlwdCB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IFVwZ3JhZGVEZXBlbmRlbmNpZXNTY2hlZHVsZSB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFja2FnZVZlcnNpb25zIHtcbiAgcmVhZG9ubHkgZDk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiBAYXJpZ2EvYXRsYXMgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCBcIjAuMzIuMFwiXG4gICAqL1xuICByZWFkb25seSBhdGxhcz86IHN0cmluZztcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIEQ5UHJvamVjdE9wdGlvbnMgZXh0ZW5kcyB0eXBlc2NyaXB0LlR5cGVTY3JpcHRQcm9qZWN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciB0aGUgR2l0SHViIGNvbmZpZ3VyYXRpb24uXG4gICAqIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIEdpdEh1YiBjb25maWcgZW50aXJlbHkuXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBHaXRIdWJDb25maWcgd2l0aCBwcm9qZWN0IGRlZmF1bHRzXG4gICAqL1xuICByZWFkb25seSBnaXRodWJDb25maWc/OiBHaXRIdWJDb25maWdPcHRpb25zIHwgZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb25zIGZvbGRlci5cbiAgICogQGRlZmF1bHQgXCJleHRlbnNpb24tcGFja2FnZXNcIlxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZW5zaW9uc0ZvbGRlck5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhY2thZ2VWZXJzaW9ucz86IFBhY2thZ2VWZXJzaW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIEQ5UHJvamVjdCBleHRlbmRzIGphdmFzY3JpcHQuTm9kZVByb2plY3Qge1xuXG4gIHB1YmxpYyByZWFkb25seSBnaXRodWJDb25maWc/OiBHaXRIdWJDb25maWc7XG4gIHB1YmxpYyBleHRlbnNpb25zITogRXh0ZW5zaW9uRm9sZGVyO1xuICBwdWJsaWMgZXh0ZW5zaW9uRm9sZGVyITogc3RyaW5nO1xuICBwdWJsaWMgYXBwbHlTY2hlbWFUYXNrITogVGFzaztcbiAgcHVibGljIGJ1aWxkRXh0ZW5zaW9uVGFzayE6IFRhc2s7XG4gIHB1YmxpYyBkb2NrZXJmaWxlITogRG9ja2VyZmlsZTtcbiAgcHVibGljIGRvY2tlckNvbXBvc2VGaWxlITogRG9ja2VyQ29tcG9zZTtcbiAgcHVibGljIGRpcmVjdHVzU2VydmljZSE6IERvY2tlckNvbXBvc2VTZXJ2aWNlO1xuICBwdWJsaWMgZGF0YWJhc2VTZXJ2aWNlITogRG9ja2VyQ29tcG9zZVNlcnZpY2U7XG4gIHB1YmxpYyBjYWNoZVNlcnZpY2UhOiBEb2NrZXJDb21wb3NlU2VydmljZTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgb3B0aW9uczogRDlQcm9qZWN0T3B0aW9ucykge1xuICAgIGNvbnN0IGQ5VmVyc2lvbiA9IG9wdGlvbnMucGFja2FnZVZlcnNpb25zPy5kOSB8fCAnMTIuMC4xJztcbiAgICBjb25zdCBhdGxhc1ZlcnNpb24gPSBvcHRpb25zLnBhY2thZ2VWZXJzaW9ucz8uYXRsYXMgfHwgJzAuMzIuMCc7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHBhY2thZ2VNYW5hZ2VyOiBvcHRpb25zLnBhY2thZ2VNYW5hZ2VyID8/IGphdmFzY3JpcHQuTm9kZVBhY2thZ2VNYW5hZ2VyLk5QTSxcbiAgICAgIGdpdGh1YjogZmFsc2UsIC8vIFdlIHVzZSBvdXIgb3duIEdpdEh1YkNvbmZpZyBpbnN0ZWFkXG4gICAgICBkZXBzVXBncmFkZTogdHJ1ZSxcbiAgICAgIGRlcHNVcGdyYWRlT3B0aW9uczoge1xuICAgICAgICB3b3JrZmxvd09wdGlvbnM6IHtcbiAgICAgICAgICBzY2hlZHVsZTogVXBncmFkZURlcGVuZGVuY2llc1NjaGVkdWxlLkRBSUxZLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGxpY2Vuc2VkOiBmYWxzZSxcbiAgICAgIHJlYWRtZTogb3B0aW9ucy5yZWFkbWUgPz8ge1xuICAgICAgICBjb250ZW50czogW1xuICAgICAgICAgIGAjICR7b3B0aW9ucy5uYW1lfWAsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ0EgW2Q5XShodHRwczovL2dpdGh1Yi5jb20vTGFXZWJjYXBzdWxlL2Q5KSAoRGlyZWN0dXMgOSBmb3JrKSBwcm9qZWN0IHNjYWZmb2xkZWQgd2l0aCBbYEB3YmNlL3Byb2plbi1kOWBdKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0B3YmNlL3Byb2plbi1kOSkuIERldmVsb3AgbG9jYWxseSBhZ2FpbnN0IERvY2tlciBDb21wb3NlLCB0aGVuIGJ1aWxkIGEgRG9ja2VyIGltYWdlIHRvIGRlcGxveSBhbnl3aGVyZS4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIyBMb2NhbCBkZXZlbG9wbWVudCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ2BgYHNoJyxcbiAgICAgICAgICAnbnB4IHByb2plbiBpbnN0YWxsICAgICAgIyBpbnN0YWxsIGRlcGVuZGVuY2llcycsXG4gICAgICAgICAgJ25weCBwcm9qZW4gZmlyc3QtcnVuICAgICMgYm9vdCBzdGFjaywgY3JlYXRlIGFkbWluLCBzdGFydCBkOScsXG4gICAgICAgICAgJ2BgYCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ09wZW4gaHR0cDovL2xvY2FsaG9zdDo4MDU1IGFuZCBzaWduIGluIGFzIGBhZG1pbkBleGFtcGxlLmNvbWAgLyBgdG90b3RvdG9gLiBFeHRlbnNpb25zIGF1dG8tcmVsb2FkIChgRVhURU5TSU9OU19BVVRPX1JFTE9BRD10cnVlYCkuJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnIyMgRGVwbG95JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnQSBgRG9ja2VyZmlsZWAgaXMgaW5jbHVkZWQuIEJ1aWxkIGFuZCBwdXNoIHRoZSBpbWFnZSBmb3IgeW91ciB0YXJnZXQgZW52aXJvbm1lbnQ6JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnYGBgc2gnLFxuICAgICAgICAgICdkb2NrZXIgYnVpbGQgLXQgPHJlZ2lzdHJ5Pi88aW1hZ2U+Ojx0YWc+IC4nLFxuICAgICAgICAgICdkb2NrZXIgcHVzaCA8cmVnaXN0cnk+LzxpbWFnZT46PHRhZz4nLFxuICAgICAgICAgICdgYGAnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdDb25maWd1cmUgdGhlIGRlcGxveWVkIGluc3RhbmNlIHdpdGggZW52aXJvbm1lbnQgdmFyaWFibGVzIChkYXRhYmFzZSwgY2FjaGUsIHNlY3JldHMpIOKAlCBzZWUgdGhlIGQ5IGRvY3MuJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnIyMgQ29tbW9uIHRhc2tzJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnfCBUYXNrIHwgRGVzY3JpcHRpb24gfCcsXG4gICAgICAgICAgJ3wgLS0tIHwgLS0tIHwnLFxuICAgICAgICAgICd8IGBucHggcHJvamVuIHJ1bmAgfCBTdGFydCBkOSAoYGRvY2tlciBjb21wb3NlIHVwIGRpcmVjdHVzYCkgfCcsXG4gICAgICAgICAgJ3wgYG5weCBwcm9qZW4gYnVpbGQtZXh0ZW5zaW9uc2AgfCBJbnN0YWxsIGFuZCBidWlsZCBhbGwgZXh0ZW5zaW9ucyB8JyxcbiAgICAgICAgICAnfCBgbnB4IHByb2plbiBjcmVhdGUtYW4tYWRtaW5gIHwgQ3JlYXRlIHRoZSBkZWZhdWx0IGFkbWluIHVzZXIgfCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ1NlZSBgLnByb2plbi90YXNrcy5qc29uYCBmb3IgdGhlIGZ1bGwgbGlzdC4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIyBDb25maWd1cmF0aW9uJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnRWRpdCBgLnByb2plbnJjLmpzYCBhbmQgcnVuIGBucHggcHJvamVuYCB0byByZWdlbmVyYXRlIHByb2plY3QgZmlsZXMuIExvY2FsIGVudmlyb25tZW50IG92ZXJyaWRlcyBnbyBpbiBgLmVudi5sb2NhbGAuJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnIyMgRXh0ZW5zaW9ucycsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ0V4dGVuc2lvbnMgbGl2ZSB1bmRlciBgLi9wbHVnaW5zL2AuIEFkZCBuZXcgb25lcyBpbiBgLnByb2plbnJjLmpzYDonLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdgYGBqcycsXG4gICAgICAgICAgXCJpbXBvcnQgeyBEOUV4dGVuc2lvblR5cGUgfSBmcm9tICdAd2JjZS9wcm9qZW4tZDktZXh0ZW5zaW9uJztcIixcbiAgICAgICAgICAnJyxcbiAgICAgICAgICBcInByb2plY3QuYWRkRXh0ZW5zaW9uKCdteS1ob29rJywgW0Q5RXh0ZW5zaW9uVHlwZS5IT09LXSk7XCIsXG4gICAgICAgICAgJ2BgYCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ1RoZW4gYG5weCBwcm9qZW4gJiYgbnB4IHByb2plbiBidWlsZC1leHRlbnNpb25zYC4nLFxuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgfSxcbiAgICAgIGRldkRlcHM6IFtcbiAgICAgICAgJ0B3YmNlL3Byb2plbi1kOScsXG4gICAgICAgICdAd2JjZS9wcm9qZW4tZDktZXh0ZW5zaW9uJyxcbiAgICAgICAgYEBhcmlnYS9hdGxhc0Ake2F0bGFzVmVyc2lvbn1gLFxuICAgICAgICAuLi4ob3B0aW9ucy5kZXZEZXBzID8/IFtdKSxcbiAgICAgIF0sXG4gICAgICBkZXBzOiBbYEB3YmNlLWQ5L2RpcmVjdHVzOUAke2Q5VmVyc2lvbn1gXSxcbiAgICB9KTtcblxuICAgIC8vIE5vIHRzY29uZmlnIG1lYW5zIG5vIHRzYyAtLWJ1aWxkIGluIGNvbXBpbGVcbiAgICB0aGlzLmNvbXBpbGVUYXNrLnJlc2V0KCk7XG5cbiAgICB0aGlzLmFkZEV4dGVuc2lvbkZvbGRlcigpO1xuICAgIHRoaXMuYWRkRG9ja2VyQ29tcG9zZSgpO1xuICAgIHRoaXMuYWRkQXBwbHlTY2hlbWFUYXNrKCk7XG4gICAgdGhpcy5hZGRGaXJzdFJ1blRhc2soKTtcbiAgICB0aGlzLmFkZEJ1aWxkRXh0ZW5zaW9uVGFzaygpO1xuICAgIHRoaXMuYWRkUnVuVGFzaygpO1xuICAgIHRoaXMuYWRkRG9ja2VyZmlsZSgpO1xuICAgIHRoaXMuYWRkQ3JlYXRlQWRtaW5Vc2VyVGFzaygpO1xuXG4gICAgbmV3IEFpSW5zdHJ1Y3Rpb25zKHRoaXMsIHtcbiAgICAgIGFnZW50czogW0FpQWdlbnQuQ0xBVURFXSxcbiAgICB9KTtcblxuICAgIGlmIChvcHRpb25zLmdpdGh1YkNvbmZpZyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZ2l0aHViQ29uZmlnID0gbmV3IEdpdEh1YkNvbmZpZyh0aGlzLCBvcHRpb25zLmdpdGh1YkNvbmZpZyk7XG4gICAgICB0aGlzLmFkZFNhdmVCcmFuY2hXb3JrZmxvdygpO1xuICAgIH1cbiAgICB0aGlzLmdpdGlnbm9yZS5hZGRQYXR0ZXJucygndXBsb2FkcycpO1xuICAgIHRoaXMuZ2l0aWdub3JlLmFkZFBhdHRlcm5zKCcqKi8uRFNfU3RvcmUnKTtcbiAgICB0aGlzLmdpdGlnbm9yZS5hZGRQYXR0ZXJucygnLmVudi5sb2NhbCcpO1xuXG4gICAgLy8gQ3JlYXRlIGFuIGVtcHR5IC5lbnYubG9jYWwgaWYgaXQgZG9lc24ndCBleGlzdCwgc28gRG9ja2VyIGRvZXNuJ3QgbW91bnQgYSBkaXJlY3RvcnlcbiAgICBuZXcgU2FtcGxlRmlsZSh0aGlzLCAnLmVudi5sb2NhbCcsIHsgY29udGVudHM6ICcjIExvY2FsIGVudmlyb25tZW50IG92ZXJyaWRlcyBmb3IgRGlyZWN0dXMnIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRFeHRlbnNpb25Gb2xkZXIoKSB7XG4gICAgY29uc3QgZm9sZGVyTmFtZSA9IHRoaXMub3B0aW9ucy5leHRlbnNpb25zRm9sZGVyTmFtZSA/PyAncGx1Z2lucyc7XG4gICAgdGhpcy5leHRlbnNpb25zID0gbmV3IEV4dGVuc2lvbkZvbGRlcih7IHBhcmVudDogdGhpcywgbmFtZTogZm9sZGVyTmFtZSB9KTtcbiAgICB0aGlzLmV4dGVuc2lvbkZvbGRlciA9IGZvbGRlck5hbWU7XG4gICAgdGhpcy5naXRpZ25vcmUuZXhjbHVkZSgnZXh0ZW5zaW9ucy8qJyk7XG4gICAgdGhpcy5naXRpZ25vcmUuaW5jbHVkZSgnZXh0ZW5zaW9ucy90ZW1wbGF0ZXMvJyk7XG4gIH1cblxuICBwdWJsaWMgYWRkRXh0ZW5zaW9uKG5hbWU6IHN0cmluZywgZXh0ZW5zaW9uVHlwZXM6IEQ5RXh0ZW5zaW9uVHlwZVtdLCBvcHRpb25zPzogQWRkRXh0ZW5zaW9uT3B0aW9ucyApIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbnNpb25zLmFkZChuYW1lLCBleHRlbnNpb25UeXBlcywgb3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGFkZEZpcnN0UnVuVGFzaygpIHtcbiAgICBjb25zdCB0YXNrID0gdGhpcy5hZGRUYXNrKCdmaXJzdC1ydW4nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0luaXRpYWxpemUgYW5kIHN0YXJ0IGEgZnJlc2ggRGlyZWN0dXMgaW5zdGFuY2UnLFxuICAgIH0pO1xuICAgIGNvbnN0IGFkbWluRW1haWwgPSAnYWRtaW5AZXhhbXBsZS5jb20nO1xuICAgIGNvbnN0IHVzZXJOb3RFeGlzdHNDb25kaXRpb24gPSBgZG9ja2VyIGNvbXBvc2UgZXhlYyBkYXRhYmFzZSBwc3FsIC1VIGRpcmVjdHVzIC1kIGRpcmVjdHVzIC10QWMgXCJTRUxFQ1QgY291bnQoKikgRlJPTSBkaXJlY3R1c191c2VycyBXSEVSRSBlbWFpbCA9ICcke2FkbWluRW1haWx9J1wiIHwgZ3JlcCAtcSAnXjAkJ2A7XG4gICAgdGFzay5leGVjKCdkb2NrZXIgY29tcG9zZSB1cCAtZCAtLXdhaXQgZGF0YWJhc2UgY2FjaGUnKTtcbiAgICB0YXNrLnNwYXduKHRoaXMuYXBwbHlTY2hlbWFUYXNrKTtcbiAgICB0YXNrLmV4ZWMoYEFETUlOX1JPTEVfSUQ9JChkb2NrZXIgY29tcG9zZSBleGVjIGRhdGFiYXNlIHBzcWwgLVUgZGlyZWN0dXMgLWQgZGlyZWN0dXMgLXRBYyBcIlNFTEVDVCBpZCBGUk9NIGRpcmVjdHVzX3JvbGVzIFdIRVJFIGFkbWluX2FjY2VzcyA9IHRydWUgTElNSVQgMVwiKSAmJiBkb2NrZXIgY29tcG9zZSBydW4gLS1ybSBkaXJlY3R1cyBucHggZGlyZWN0dXMgdXNlcnMgY3JlYXRlIC0tZW1haWwgJHthZG1pbkVtYWlsfSAtLXBhc3N3b3JkIHRvdG90b3RvIC0tcm9sZSBcIiRBRE1JTl9ST0xFX0lEXCJgLCB7XG4gICAgICBjb25kaXRpb246IHVzZXJOb3RFeGlzdHNDb25kaXRpb24sXG4gICAgfSk7XG4gICAgdGFzay5zYXkoYFVzZXIgJHthZG1pbkVtYWlsfSBoYXMgYmVlbiBjcmVhdGVkIHdpdGggcGFzc3dvcmQgdG90b3RvdG9gLCB7XG4gICAgICBjb25kaXRpb246IHVzZXJOb3RFeGlzdHNDb25kaXRpb24sXG4gICAgfSk7XG4gICAgdGFzay5zYXkoYFVzZXIgJHthZG1pbkVtYWlsfSBhbHJlYWR5IGV4aXN0cywgc2tpcHBpbmcgY3JlYXRpb25gLCB7XG4gICAgICBjb25kaXRpb246IGAhICR7dXNlck5vdEV4aXN0c0NvbmRpdGlvbn1gLFxuICAgIH0pO1xuICAgIHRhc2suZXhlYygnZG9ja2VyIGNvbXBvc2UgdXAgZGlyZWN0dXMnKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ3JlYXRlQWRtaW5Vc2VyVGFzaygpIHtcbiAgICBjb25zdCB0YXNrID0gdGhpcy5hZGRUYXNrKCdjcmVhdGUtYW4tYWRtaW4nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhbiBhZG1pbiB1c2VyJyxcbiAgICB9KTtcbiAgICBjb25zdCBhZG1pbkVtYWlsID0gJ2FkbWluQGV4YW1wbGUuY29tJztcbiAgICBjb25zdCB1c2VyTm90RXhpc3RzQ29uZGl0aW9uID0gYGRvY2tlciBjb21wb3NlIGV4ZWMgZGF0YWJhc2UgcHNxbCAtVSBkaXJlY3R1cyAtZCBkaXJlY3R1cyAtdEFjIFwiU0VMRUNUIGNvdW50KCopIEZST00gZGlyZWN0dXNfdXNlcnMgV0hFUkUgZW1haWwgPSAnJHthZG1pbkVtYWlsfSdcIiB8IGdyZXAgLXEgJ14wJCdgO1xuICAgIHRhc2suZXhlYygnZG9ja2VyIGNvbXBvc2UgdXAgLWQgLS13YWl0IGRhdGFiYXNlIGNhY2hlJyk7XG4gICAgdGFzay5leGVjKGBBRE1JTl9ST0xFX0lEPSQoZG9ja2VyIGNvbXBvc2UgZXhlYyBkYXRhYmFzZSBwc3FsIC1VIGRpcmVjdHVzIC1kIGRpcmVjdHVzIC10QWMgXCJTRUxFQ1QgaWQgRlJPTSBkaXJlY3R1c19yb2xlcyBXSEVSRSBhZG1pbl9hY2Nlc3MgPSB0cnVlIExJTUlUIDFcIikgJiYgZG9ja2VyIGNvbXBvc2UgcnVuIC0tcm0gZGlyZWN0dXMgbnB4IGRpcmVjdHVzIHVzZXJzIGNyZWF0ZSAtLWVtYWlsICR7YWRtaW5FbWFpbH0gLS1wYXNzd29yZCB0b3RvdG90byAtLXJvbGUgXCIkQURNSU5fUk9MRV9JRFwiYCwge1xuICAgICAgY29uZGl0aW9uOiB1c2VyTm90RXhpc3RzQ29uZGl0aW9uLFxuICAgIH0pO1xuICAgIHRhc2suc2F5KGBVc2VyICR7YWRtaW5FbWFpbH0gaGFzIGJlZW4gY3JlYXRlZCB3aXRoIHBhc3N3b3JkIHRvdG90b3RvYCwge1xuICAgICAgY29uZGl0aW9uOiB1c2VyTm90RXhpc3RzQ29uZGl0aW9uLFxuICAgIH0pO1xuICAgIHRhc2suc2F5KGBVc2VyICR7YWRtaW5FbWFpbH0gYWxyZWFkeSBleGlzdHMsIHNraXBwaW5nIGNyZWF0aW9uYCwge1xuICAgICAgY29uZGl0aW9uOiBgISAke3VzZXJOb3RFeGlzdHNDb25kaXRpb259YCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUnVuVGFzaygpIHtcbiAgICBjb25zdCB0YXNrID0gdGhpcy5hZGRUYXNrKCdydW4nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3N0YXJ0IHRoZSBEaXJlY3R1cyBpbnN0YW5jZScsXG4gICAgfSk7XG4gICAgdGFzay5leGVjKCdkb2NrZXIgY29tcG9zZSB1cCBkaXJlY3R1cycpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBcHBseVNjaGVtYVRhc2soKSB7XG4gICAgdGhpcy5hcHBseVNjaGVtYVRhc2sgPSB0aGlzLmFkZFRhc2soJ2FwcGx5LXNjaGVtYScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnQXBwbHkgU1FMIHNuYXBzaG90IHRvIHRoZSBsb2NhbCBEaXJlY3R1cyBkYXRhYmFzZScsXG4gICAgfSk7XG4gICAgdGhpcy5hcHBseVNjaGVtYVRhc2suZXhlYygnbnB4IHdiY2UtZGlyZWN0dXMgYXBwbHktc25hcHNob3QgLS1ob3N0IGxvY2FsaG9zdCAtLXVzZXIgZGlyZWN0dXMgLS1wYXNzd29yZCBkaXJlY3R1cyAtLWRhdGFiYXNlIGRpcmVjdHVzJywge1xuICAgICAgY29uZGl0aW9uOiAndGVzdCAtZCAuL3NxbCcsXG4gICAgfSk7XG4gICAgdGhpcy5hcHBseVNjaGVtYVRhc2suZXhlYygnZG9ja2VyIGNvbXBvc2UgcnVuIC0tcm0gZGlyZWN0dXMgbnB4IGRpcmVjdHVzIGJvb3RzdHJhcCcsIHtcbiAgICAgIGNvbmRpdGlvbjogJ3Rlc3QgISAtZCAuL3NxbCcsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEJ1aWxkRXh0ZW5zaW9uVGFzaygpIHtcbiAgICB0aGlzLmJ1aWxkRXh0ZW5zaW9uVGFzayA9IHRoaXMuYWRkVGFzaygnYnVpbGQtZXh0ZW5zaW9ucycsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnQnVpbGQgdGhlIGRpcmVjdHVzIGV4dGVuc2lvbnMnLFxuICAgIH0pO1xuICAgIHRoaXMuYnVpbGRFeHRlbnNpb25UYXNrLmV4ZWMoYGNkICR7dGhpcy5leHRlbnNpb25Gb2xkZXJ9ICYmIHBucG0gaW5zdGFsbGApO1xuICAgIHRoaXMuYnVpbGRFeHRlbnNpb25UYXNrLmV4ZWMoYGNkICR7dGhpcy5leHRlbnNpb25Gb2xkZXJ9ICYmIHBucG0gcnVuIC0tcmVjdXJzaXZlIGJ1aWxkYCk7XG4gIH1cblxuXG4gIHByaXZhdGUgYWRkRG9ja2VyQ29tcG9zZSgpIHtcbiAgICBjb25zdCBkYyA9IG5ldyBEb2NrZXJDb21wb3NlKHRoaXMpO1xuXG4gICAgdGhpcy5kYXRhYmFzZVNlcnZpY2UgPSBkYy5hZGRTZXJ2aWNlKCdkYXRhYmFzZScsIHtcbiAgICAgIGltYWdlOiAncG9zdGdpcy9wb3N0Z2lzOjEzLW1hc3RlcicsXG4gICAgICB2b2x1bWVzOiBbXG4gICAgICAgIERvY2tlckNvbXBvc2UubmFtZWRWb2x1bWUoJ3BnZGF0YScsICcvdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGEnKSxcbiAgICAgIF0sXG4gICAgICBwb3J0czogW1xuICAgICAgICBEb2NrZXJDb21wb3NlLnBvcnRNYXBwaW5nKDU0MzIsIDU0MzIpLFxuICAgICAgXSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFBPU1RHUkVTX1VTRVI6ICdkaXJlY3R1cycsXG4gICAgICAgIFBPU1RHUkVTX1BBU1NXT1JEOiAnZGlyZWN0dXMnLFxuICAgICAgICBQT1NUR1JFU19EQjogJ2RpcmVjdHVzJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmNhY2hlU2VydmljZSA9IGRjLmFkZFNlcnZpY2UoJ2NhY2hlJywge1xuICAgICAgaW1hZ2U6ICdyZWRpczo2JyxcbiAgICAgIHZvbHVtZXM6IFtcbiAgICAgICAgRG9ja2VyQ29tcG9zZS5uYW1lZFZvbHVtZSgncmVkaXNfc3RvcmFnZScsICcvZGF0YScpLFxuICAgICAgXSxcbiAgICAgIHBvcnRzOiBbXG4gICAgICAgIERvY2tlckNvbXBvc2UucG9ydE1hcHBpbmcoNjM3OSwgNjM3OSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kaXJlY3R1c1NlcnZpY2UgPSBkYy5hZGRTZXJ2aWNlKCdkaXJlY3R1cycsIHtcbiAgICAgIGltYWdlQnVpbGQ6IHsgY29udGV4dDogJy4nIH0sXG4gICAgICBwb3J0czogW1xuICAgICAgICBEb2NrZXJDb21wb3NlLnBvcnRNYXBwaW5nKDgwNTUsIDgwNTUpLFxuICAgICAgXSxcbiAgICAgIHZvbHVtZXM6IFtcbiAgICAgICAgRG9ja2VyQ29tcG9zZS5iaW5kVm9sdW1lKCcuL3VwbG9hZHMnLCAnL2FwcC91cGxvYWRzJyksXG4gICAgICAgIERvY2tlckNvbXBvc2UuYmluZFZvbHVtZSgnLi9leHRlbnNpb25zJywgJy9hcHAvZXh0ZW5zaW9ucycpLFxuICAgICAgXSxcbiAgICAgIC8vIGRlcGVuZHNPbiBpcyBzZXQgdmlhIGFkZE92ZXJyaWRlIGJlbG93IHdpdGggY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIEtFWTogJ3NvbWUtcmFuZG9tLWtleScsXG4gICAgICAgIFNFQ1JFVDogJ2Fub3RoZXItcmFuZG9tLWtleScsXG4gICAgICAgIENPTkZJR19QQVRIOiAnLmVudi5sb2NhbCcsXG4gICAgICAgIERCX0NMSUVOVDogJ3BnJyxcbiAgICAgICAgREJfSE9TVDogJ2RhdGFiYXNlJyxcbiAgICAgICAgREJfUE9SVDogJzU0MzInLFxuICAgICAgICBEQl9EQVRBQkFTRTogJ2RpcmVjdHVzJyxcbiAgICAgICAgREJfVVNFUjogJ2RpcmVjdHVzJyxcbiAgICAgICAgREJfUEFTU1dPUkQ6ICdkaXJlY3R1cycsXG4gICAgICAgIENBQ0hFX0VOQUJMRUQ6ICdmYWxzZScsXG4gICAgICAgIENBQ0hFX1JFRElTX0hPU1Q6ICdjYWNoZScsXG4gICAgICAgIENBQ0hFX1NUQVRVU19IRUFERVI6ICdjYWNoZS1oaXQnLFxuICAgICAgICBDT1JTX0VOQUJMRUQ6ICd0cnVlJyxcbiAgICAgICAgQ09SU19PUklHSU46ICd0cnVlJyxcbiAgICAgICAgTE9HX0xFVkVMOiAnaW5mbycsXG4gICAgICAgIEFETUlOX0VNQUlMOiAnYWRtaW5AZXhhbXBsZS5jb20nLFxuICAgICAgICBBRE1JTl9QQVNTV09SRDogJ3RvdG90b3RvJyxcbiAgICAgICAgRVhURU5TSU9OU19BVVRPX1JFTE9BRDogJ3RydWUnLFxuICAgICAgICBWQUxJREFURV9FTlRJVElFU19UT0tFTlNfQVBJX0tFWTogJ3RvdG8nLFxuICAgICAgICBBV1NfS01TX0tFWV9JRDogJ3R1dHUnLFxuICAgICAgfSxcbiAgICAgIGNvbW1hbmQ6IFsnc2gnLCAnLWMnLCAnbnB4IGRpcmVjdHVzIHN0YXJ0J10sXG4gICAgfSk7XG5cbiAgICB0aGlzLmRpcmVjdHVzU2VydmljZS5hZGRWb2x1bWUoRG9ja2VyQ29tcG9zZS5iaW5kVm9sdW1lKCcuLy5lbnYubG9jYWwnLCAnL2FwcC8uZW52LmxvY2FsJykpO1xuXG4gICAgLy8gQWRkIGhlYWx0aGNoZWNrIGZvciBkYXRhYmFzZSAobm90IG5hdGl2ZWx5IHN1cHBvcnRlZCBieSBwcm9qZW4gRG9ja2VyQ29tcG9zZSlcbiAgICBkYy5maWxlLmFkZE92ZXJyaWRlKCdzZXJ2aWNlcy5kYXRhYmFzZS5oZWFsdGhjaGVjaycsIHtcbiAgICAgIHRlc3Q6IFsnQ01EJywgJ3BnX2lzcmVhZHknLCAnLS1ob3N0PWxvY2FsaG9zdCcsICctLXVzZXJuYW1lPWRpcmVjdHVzJ10sXG4gICAgICBpbnRlcnZhbDogJzEwcycsXG4gICAgICB0aW1lb3V0OiAnNXMnLFxuICAgICAgcmV0cmllczogNSxcbiAgICAgIHN0YXJ0X2ludGVydmFsOiAnNXMnLFxuICAgICAgc3RhcnRfcGVyaW9kOiAnMzBzJyxcbiAgICB9KTtcblxuICAgIC8vIEFkZCBoZWFsdGhjaGVjayBmb3IgY2FjaGVcbiAgICBkYy5maWxlLmFkZE92ZXJyaWRlKCdzZXJ2aWNlcy5jYWNoZS5oZWFsdGhjaGVjaycsIHtcbiAgICAgIHRlc3Q6IFsnQ01ELVNIRUxMJywgJ1sgJChyZWRpcy1jbGkgcGluZykgPSBcXCdQT05HXFwnIF0nXSxcbiAgICAgIGludGVydmFsOiAnMTBzJyxcbiAgICAgIHRpbWVvdXQ6ICc1cycsXG4gICAgICByZXRyaWVzOiA1LFxuICAgICAgc3RhcnRfaW50ZXJ2YWw6ICc1cycsXG4gICAgICBzdGFydF9wZXJpb2Q6ICczMHMnLFxuICAgIH0pO1xuXG4gICAgLy8gT3ZlcnJpZGUgZGVwZW5kc19vbiB0byB1c2UgY29uZGl0aW9uIHN5bnRheFxuICAgIGRjLmZpbGUuYWRkT3ZlcnJpZGUoJ3NlcnZpY2VzLmRpcmVjdHVzLmRlcGVuZHNfb24nLCB7XG4gICAgICBjYWNoZTogeyBjb25kaXRpb246ICdzZXJ2aWNlX2hlYWx0aHknIH0sXG4gICAgICBkYXRhYmFzZTogeyBjb25kaXRpb246ICdzZXJ2aWNlX2hlYWx0aHknIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmRvY2tlckNvbXBvc2VGaWxlID0gZGM7XG5cbiAgICByZXR1cm4gZGM7XG4gIH1cblxuICBwcml2YXRlIGFkZFNhdmVCcmFuY2hXb3JrZmxvdygpIHtcbiAgICBjb25zdCB3b3JrZmxvdyA9IHRoaXMuZ2l0aHViQ29uZmlnIS5hZGRXb3JrZmxvdygnc2F2ZS1icmFuY2gnKTtcbiAgICB3b3JrZmxvdy5vbih7IHB1c2g6IHsgYnJhbmNoZXM6IFsnKi1zYXZlJ10gfSB9KTtcbiAgICB3b3JrZmxvdy5hZGRKb2IoJ2NyZWF0ZS1wcicsIHtcbiAgICAgIG5hbWU6ICdDcmVhdGUgUHVsbCBSZXF1ZXN0JyxcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICBwdWxsUmVxdWVzdHM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICB9LFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAgeyBuYW1lOiAnQ2hlY2tvdXQnLCB1c2VzOiAnYWN0aW9ucy9jaGVja291dEB2NCcgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdDcmVhdGUgUHVsbCBSZXF1ZXN0JyxcbiAgICAgICAgICBydW46ICdnaCBwciBjcmVhdGUgLS10aXRsZSBcIlNhdmU6ICR7R0lUSFVCX1JFRl9OQU1FJS1zYXZlfVwiIC0tYm9keSBcIkF1dG8tZ2VuZXJhdGVkIFBSIGZyb20gYnJhbmNoIFxcXFxgJHtHSVRIVUJfUkVGX05BTUUlLXNhdmV9XFxcXGBcIiAtLWJhc2UgXCIke0dJVEhVQl9SRUZfTkFNRSUtc2F2ZX1cIiB8fCBlY2hvIFwiUFIgYWxyZWFkeSBleGlzdHNcIicsXG4gICAgICAgICAgZW52OiB7IEdIX1RPS0VOOiAnJHt7IHNlY3JldHMuR0lUSFVCX1RPS0VOIH19JyB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRG9ja2VyZmlsZSgpIHtcbiAgICB0aGlzLmRvY2tlcmZpbGUgPSBuZXcgRG9ja2VyZmlsZSh0aGlzKVxuICAgICAgLmZyb20oJ25vZGUnLCAnMjItYm9va3dvcm0tc2xpbScpXG4gICAgICAuc3RlcCgndXBkYXRlLW5wbScsICdVcGRhdGUgbnBtIHRvIGZpeCBkZXBlbmRlbmNpZXMnKVxuICAgICAgLnJ1bignbnBtIGluc3RhbGwgLWcgbnBtQDExLjguMCcpXG4gICAgICAuc3RlcCgnaW5zdGFsbC1wbnBtJywgJ2luc3RhbGwgcG5wbScpXG4gICAgICAucnVuKCducG0gaW5zdGFsbCAtZyBwbnBtQDEwLjMzLjAnKVxuICAgICAgLnN0ZXAoJ2NvcHktcGFja2FnZScsICdDb3B5IHBhY2thZ2UuanNvbiBhbmQgcGFja2FnZS1sb2NrLmpzb24gZmlyc3QgdG8gbGV2ZXJhZ2UgRG9ja2VyIGxheWVyIGNhY2hpbmcnKVxuICAgICAgLmNvcHkoJ3BhY2thZ2UqLmpzb24nLCAnL2FwcC8nKVxuICAgICAgLnN0ZXAoJ3dvcmtkaXInLCAnU2V0IHdvcmtpbmcgZGlyZWN0b3J5JylcbiAgICAgIC53b3JrZGlyKCcvYXBwJylcbiAgICAgIC5zdGVwKCdpbnN0YWxsLWRlcHMnLCAnSW5zdGFsbCBkZXBlbmRlbmNpZXMgLSB3aXRob3V0IGRldiBkZXBlbmRlbmNpZXMnKVxuICAgICAgLnJ1bignTk9ERV9FTlY9cHJvZHVjdGlvbiBucG0gaW5zdGFsbCcpXG4gICAgICAuc3RlcCgnY2xlYW51cCcsICdDbGVhbmluZyBiZW5jaG1hcmtzIGZvbGRlciBpbiB0ZWRpb3VzIG1vZHVsZSBmb3Igc2VjdXJpdHknKVxuICAgICAgLnJ1bigncm0gLXJmIG5vZGVfbW9kdWxlcy90ZWRpb3VzL2JlbmNobWFya3MnKVxuICAgICAgLnN0ZXAoJ2NvcHktc291cmNlJywgJ0NvcHkgdGhlIHJlc3Qgb2YgdGhlIGFwcGxpY2F0aW9uIGNvZGUnKVxuICAgICAgLmNvcHkoJy4nLCAnLicpXG4gICAgICAuc3RlcCgnYnVpbGQtZXh0ZW5zaW9uJywgJ2J1aWxkIGV4dGVuc2lvbnMnKVxuICAgICAgLnJ1bignbnB4IHByb2plbiBidWlsZC1leHRlbnNpb25zJylcbiAgICAgIC5zdGVwKCdzdGFydCcsICdTdGFydCBEaXJlY3R1cyBzZXJ2ZXInKVxuICAgICAgLmNtZEV4ZWMoWyducHgnLCAnZGlyZWN0dXMnLCAnc3RhcnQnXSk7XG4gICAgcmV0dXJuIHRoaXMuZG9ja2VyZmlsZTtcbiAgfVxuXG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBEOVByb2plY3RPcHRpb25zfSBpbnN0ZWFkLiBUaGUgcGFja2FnZSB3YXMgcmVuYW1lZCB0byBgQHdiY2UvcHJvamVuLWQ5YCB0byByZWZsZWN0IHRoYXQgaXQgdGFyZ2V0cyB0aGUgZDkgZm9yaywgbm90IHVwc3RyZWFtIERpcmVjdHVzLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdHVzUHJvamVjdE9wdGlvbnMgZXh0ZW5kcyBEOVByb2plY3RPcHRpb25zIHt9XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBEOVByb2plY3R9IGluc3RlYWQuIFRoZSBwYWNrYWdlIHdhcyByZW5hbWVkIHRvIGBAd2JjZS9wcm9qZW4tZDlgIHRvIHJlZmxlY3QgdGhhdCBpdCB0YXJnZXRzIHRoZSBkOSBmb3JrLCBub3QgdXBzdHJlYW0gRGlyZWN0dXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEaXJlY3R1c1Byb2plY3QgZXh0ZW5kcyBEOVByb2plY3Qge31cbiJdfQ==
|
|
334
|
+
DirectusProject[_b] = { fqn: "@wbce/projen-d9.DirectusProject", version: "0.1.0" };
|
|
335
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtRUFBa0c7QUFDbEcsdURBQW9GO0FBQ3BGLG1DQUEwSTtBQUMxSSx1RUFBa0U7QUFDbEUsc0RBQW9FO0FBK0RwRSxNQUFhLFNBQVUsU0FBUSxtQkFBVSxDQUFDLFdBQVc7SUFhbkQsWUFBc0IsT0FBeUI7UUFDN0MsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksU0FBUyxDQUFDO1FBQzNELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxlQUFlLEVBQUUsS0FBSyxJQUFJLE9BQU8sQ0FBQztRQUMvRCxLQUFLLENBQUM7WUFDSixHQUFHLE9BQU87WUFDVixjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWMsSUFBSSxtQkFBVSxDQUFDLGtCQUFrQixDQUFDLEdBQUc7WUFDM0UsTUFBTSxFQUFFLEtBQUssRUFBRSxzQ0FBc0M7WUFDckQsV0FBVyxFQUFFLElBQUk7WUFDakIsa0JBQWtCLEVBQUU7Z0JBQ2xCLGVBQWUsRUFBRTtvQkFDZixRQUFRLEVBQUUsd0NBQTJCLENBQUMsS0FBSztpQkFDNUM7YUFDRjtZQUNELFFBQVEsRUFBRSxLQUFLO1lBQ2YsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUk7Z0JBQ3hCLFFBQVEsRUFBRTtvQkFDUixLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUU7b0JBQ25CLEVBQUU7b0JBQ0YsZ1BBQWdQO29CQUNoUCxFQUFFO29CQUNGLHNCQUFzQjtvQkFDdEIsRUFBRTtvQkFDRixPQUFPO29CQUNQLGdEQUFnRDtvQkFDaEQsOERBQThEO29CQUM5RCxLQUFLO29CQUNMLEVBQUU7b0JBQ0YscUlBQXFJO29CQUNySSxFQUFFO29CQUNGLFdBQVc7b0JBQ1gsRUFBRTtvQkFDRixtRkFBbUY7b0JBQ25GLEVBQUU7b0JBQ0YsT0FBTztvQkFDUCw0Q0FBNEM7b0JBQzVDLHNDQUFzQztvQkFDdEMsS0FBSztvQkFDTCxFQUFFO29CQUNGLDBHQUEwRztvQkFDMUcsRUFBRTtvQkFDRixpQkFBaUI7b0JBQ2pCLEVBQUU7b0JBQ0Ysd0JBQXdCO29CQUN4QixlQUFlO29CQUNmLDBEQUEwRDtvQkFDMUQsOEZBQThGO29CQUM5RixrRUFBa0U7b0JBQ2xFLEVBQUU7b0JBQ0YsNkNBQTZDO29CQUM3QyxFQUFFO29CQUNGLGtCQUFrQjtvQkFDbEIsRUFBRTtvQkFDRix1SEFBdUg7b0JBQ3ZILEVBQUU7b0JBQ0YsZUFBZTtvQkFDZixFQUFFO29CQUNGLHFFQUFxRTtvQkFDckUsRUFBRTtvQkFDRixPQUFPO29CQUNQLDhEQUE4RDtvQkFDOUQsRUFBRTtvQkFDRiwwREFBMEQ7b0JBQzFELEtBQUs7b0JBQ0wsRUFBRTtvQkFDRixtREFBbUQ7aUJBQ3BELENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzthQUNiO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLGlCQUFpQjtnQkFDakIsMkJBQTJCO2dCQUMzQixHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7YUFDM0I7WUFDRCxJQUFJLEVBQUUsQ0FBQyxzQkFBc0IsU0FBUyxFQUFFLENBQUM7U0FDMUMsQ0FBQyxDQUFDO1FBekVpQixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQTJFN0MsOENBQThDO1FBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGlCQUFRLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQzNELEdBQUcsRUFBRSxFQUFFLFlBQVksRUFBRTtTQUN0QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUU5QixJQUFJLHVCQUFjLENBQUMsSUFBSSxFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxDQUFDLGdCQUFPLENBQUMsTUFBTSxDQUFDO1NBQ3pCLENBQUMsQ0FBQztRQUVILElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksNEJBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV6QyxzRkFBc0Y7UUFDdEYsSUFBSSxtQkFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxRQUFRLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxTQUFTLENBQUM7UUFDbEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLHFDQUFlLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLFlBQVksQ0FBQyxJQUFZLEVBQUUsY0FBaUMsRUFBRSxPQUE2QjtRQUNoRyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVNLGlCQUFpQixDQUFDLE9BQXdCO1FBQy9DLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZTtRQUNyQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUNyQyxXQUFXLEVBQUUsMENBQTBDO1NBQ3hELENBQUMsQ0FBQztRQUNILE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDO1FBQ3ZDLE1BQU0sc0JBQXNCLEdBQUcsMEdBQTBHLFVBQVUsb0JBQW9CLENBQUM7UUFDeEssTUFBTSxzQkFBc0IsR0FBRyw0SkFBNEosQ0FBQztRQUM1TCxJQUFJLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxxRkFBcUYsRUFBRTtZQUMvRixTQUFTLEVBQUUsZUFBZTtTQUMzQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLG1EQUFtRCxFQUFFO1lBQzdELFNBQVMsRUFBRSxzQkFBc0Isc0JBQXNCLEVBQUU7U0FDMUQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyx5TUFBeU0sVUFBVSw4Q0FBOEMsRUFBRTtZQUMzUSxTQUFTLEVBQUUsc0JBQXNCO1NBQ2xDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxVQUFVLDBDQUEwQyxFQUFFO1lBQ3JFLFNBQVMsRUFBRSxzQkFBc0I7U0FDbEMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLFVBQVUsb0NBQW9DLEVBQUU7WUFDL0QsU0FBUyxFQUFFLEtBQUssc0JBQXNCLEVBQUU7U0FDekMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUMzQyxXQUFXLEVBQUUsc0JBQXNCO1NBQ3BDLENBQUMsQ0FBQztRQUNILE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDO1FBQ3ZDLE1BQU0sc0JBQXNCLEdBQUcsMEdBQTBHLFVBQVUsb0JBQW9CLENBQUM7UUFDeEssSUFBSSxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMseU1BQXlNLFVBQVUsOENBQThDLEVBQUU7WUFDM1EsU0FBUyxFQUFFLHNCQUFzQjtTQUNsQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsVUFBVSwwQ0FBMEMsRUFBRTtZQUNyRSxTQUFTLEVBQUUsc0JBQXNCO1NBQ2xDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxVQUFVLG9DQUFvQyxFQUFFO1lBQy9ELFNBQVMsRUFBRSxLQUFLLHNCQUFzQixFQUFFO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxVQUFVO1FBQ2hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQy9CLFdBQVcsRUFBRSx1QkFBdUI7U0FDckMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDdkMsV0FBVyxFQUFFLG9HQUFvRztTQUNsSCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUU7WUFDekQsV0FBVyxFQUFFLHlCQUF5QjtTQUN2QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLGVBQWUsa0JBQWtCLENBQUMsQ0FBQztRQUMzRSxtRkFBbUY7UUFDbkYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDMUIsTUFBTSxJQUFJLENBQUMsZUFBZSwwSEFBMEgsRUFDcEosRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQ3RCLENBQUM7SUFDSixDQUFDO0lBR08sZ0JBQWdCO1FBQ3RCLE1BQU0sRUFBRSxHQUFHLElBQUksc0JBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFO1lBQy9DLEtBQUssRUFBRSwyQkFBMkI7WUFDbEMsT0FBTyxFQUFFO2dCQUNQLHNCQUFhLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSwwQkFBMEIsQ0FBQzthQUNoRTtZQUNELEtBQUssRUFBRTtnQkFDTCxzQkFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO2FBQ3RDO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixpQkFBaUIsRUFBRSxJQUFJO2dCQUN2QixXQUFXLEVBQUUsSUFBSTthQUNsQjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUU7WUFDekMsS0FBSyxFQUFFLFNBQVM7WUFDaEIsT0FBTyxFQUFFO2dCQUNQLHNCQUFhLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUM7YUFDcEQ7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsc0JBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQzthQUN0QztTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDbkMsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUM1QixLQUFLLEVBQUU7Z0JBQ0wsc0JBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQzthQUN0QztZQUNELE9BQU8sRUFBRTtnQkFDUCxzQkFBYSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDO2dCQUNyRCxzQkFBYSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLENBQUM7YUFDNUQ7WUFDRCx5RUFBeUU7WUFDekUsV0FBVyxFQUFFO2dCQUNYLEdBQUcsRUFBRSxpQkFBaUI7Z0JBQ3RCLE1BQU0sRUFBRSxvQkFBb0I7Z0JBQzVCLFdBQVcsRUFBRSxZQUFZO2dCQUN6QixTQUFTLEVBQUUsSUFBSTtnQkFDZixPQUFPLEVBQUUsVUFBVTtnQkFDbkIsT0FBTyxFQUFFLE1BQU07Z0JBQ2YsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixhQUFhLEVBQUUsT0FBTztnQkFDdEIsV0FBVyxFQUFFLE9BQU87Z0JBQ3BCLGdCQUFnQixFQUFFLE9BQU87Z0JBQ3pCLGVBQWUsRUFBRSxPQUFPO2dCQUN4QixlQUFlLEVBQUUsb0JBQW9CO2dCQUNyQyxtQkFBbUIsRUFBRSxXQUFXO2dCQUNoQyxZQUFZLEVBQUUsTUFBTTtnQkFDcEIsV0FBVyxFQUFFLE1BQU07Z0JBQ25CLFNBQVMsRUFBRSxNQUFNO2dCQUNqQixXQUFXLEVBQUUsbUJBQW1CO2dCQUNoQyxjQUFjLEVBQUUsVUFBVTtnQkFDMUIsc0JBQXNCLEVBQUUsTUFBTTtnQkFDOUIsZ0NBQWdDLEVBQUUsTUFBTTtnQkFDeEMsY0FBYyxFQUFFLE1BQU07YUFDdkI7WUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixDQUFDO1NBQzVDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLHNCQUFhLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFFdEYsZ0ZBQWdGO1FBQ2hGLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLCtCQUErQixFQUFFO1lBQ25ELElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxDQUFDO1lBQ2hFLFFBQVEsRUFBRSxLQUFLO1lBQ2YsT0FBTyxFQUFFLElBQUk7WUFDYixPQUFPLEVBQUUsQ0FBQztZQUNWLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLFlBQVksRUFBRSxLQUFLO1NBQ3BCLENBQUMsQ0FBQztRQUVILDRCQUE0QjtRQUM1QixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyw0QkFBNEIsRUFBRTtZQUNoRCxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsa0NBQWtDLENBQUM7WUFDdkQsUUFBUSxFQUFFLEtBQUs7WUFDZixPQUFPLEVBQUUsSUFBSTtZQUNiLE9BQU8sRUFBRSxDQUFDO1lBQ1YsY0FBYyxFQUFFLElBQUk7WUFDcEIsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQyxDQUFDO1FBRUgsOENBQThDO1FBQzlDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFO1lBQzVDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRTtZQUN2QyxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUU7U0FDM0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUU1QixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQWEsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0QsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQzNCLElBQUksRUFBRSxxQkFBcUI7WUFDM0IsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDO1lBQ3pCLFdBQVcsRUFBRTtnQkFDWCxRQUFRLEVBQUUsK0JBQWEsQ0FBQyxJQUFJO2dCQUM1QixZQUFZLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO2FBQ2xDO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUU7Z0JBQ2pEO29CQUNFLElBQUksRUFBRSxxQkFBcUI7b0JBQzNCLEdBQUcsRUFBRSwyTEFBMkw7b0JBQ2hNLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSw2QkFBNkIsRUFBRTtpQkFDakQ7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSwwQkFBVSxDQUFDLElBQUksQ0FBQzthQUNuQyxJQUFJLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDO2FBQ2hDLElBQUksQ0FBQyxZQUFZLEVBQUUsZ0NBQWdDLENBQUM7YUFDcEQsR0FBRyxDQUFDLDJCQUEyQixDQUFDO2FBQ2hDLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDO2FBQ3BDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQzthQUNsQyxJQUFJLENBQUMsY0FBYyxFQUFFLGdGQUFnRixDQUFDO2FBQ3RHLElBQUksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDO2FBQzlCLElBQUksQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLENBQUM7YUFDeEMsT0FBTyxDQUFDLE1BQU0sQ0FBQzthQUNmLElBQUksQ0FBQyxjQUFjLEVBQUUsaURBQWlELENBQUM7YUFDdkUsR0FBRyxDQUFDLGlDQUFpQyxDQUFDO2FBQ3RDLElBQUksQ0FBQyxTQUFTLEVBQUUsMkRBQTJELENBQUM7YUFDNUUsR0FBRyxDQUFDLHdDQUF3QyxDQUFDO2FBQzdDLElBQUksQ0FBQyxhQUFhLEVBQUUsdUNBQXVDLENBQUM7YUFDNUQsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7YUFDZCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUM7YUFDM0MsR0FBRyxDQUFDLDZCQUE2QixDQUFDO2FBQ2xDLElBQUksQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUM7YUFDaEMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDOztBQWhXSCw4QkFrV0M7OztBQVFEOztHQUVHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLFNBQVM7O0FBQTlDLDBDQUFpRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZEV4dGVuc2lvbk9wdGlvbnMsIEQ5RXh0ZW5zaW9uVHlwZSwgRXh0ZW5zaW9uRm9sZGVyIH0gZnJvbSAnQHdiY2UvcHJvamVuLWQ5LWV4dGVuc2lvbic7XG5pbXBvcnQgeyBHaXRIdWJDb25maWcsIEdpdEh1YkNvbmZpZ09wdGlvbnMsIERvY2tlcmZpbGUgfSBmcm9tICdAd2JjZS9wcm9qZW4tc2hhcmVkJztcbmltcG9ydCB7IEFpQWdlbnQsIEFpSW5zdHJ1Y3Rpb25zLCBEb2NrZXJDb21wb3NlLCBEb2NrZXJDb21wb3NlU2VydmljZSwgamF2YXNjcmlwdCwgSnNvbkZpbGUsIFNhbXBsZUZpbGUsIFRhc2ssIHR5cGVzY3JpcHQgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgSm9iUGVybWlzc2lvbiB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbCc7XG5pbXBvcnQgeyBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUgfSBmcm9tICdwcm9qZW4vbGliL2phdmFzY3JpcHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2VWZXJzaW9ucyB7XG4gIHJlYWRvbmx5IGQ5Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIEF0bGFzIGJpbmFyeSBkb3dubG9hZGVkIGJ5IGQ5LXBsdW1iaW5nLlxuICAgKiBAZGVmYXVsdCBcIjEuMy4zXCJcbiAgICovXG4gIHJlYWRvbmx5IGF0bGFzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0b3JhZ2Ugc2hhcmVkIGJldHdlZW4gZW52aXJvbm1lbnRzLCB1c2VkIGJ5IGBkOS1wbHVtYmluZyBzYXZlYCBhbmQgYGQ5LXBsdW1iaW5nIGFwcGx5LXNjaGVtYWAgdG8gdHJhbnNmZXIgZmlsZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJtZWRpYXRlU3RvcmFnZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHN0b3JhZ2UgZHJpdmVyOiBzMywgZ2NzLCBhenVyZSwgbG9jYWwgb3IgY2xvdWRpbmFyeS5cbiAgICovXG4gIHJlYWRvbmx5IGRyaXZlcjogc3RyaW5nO1xuICAvKipcbiAgICogTm9uLXNlY3JldCBkcml2ZXIgb3B0aW9ucyAocm9vdCwgYnVja2V0LCByZWdpb24sIGVuZHBvaW50Li4uKS5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKipcbiAgICogU2VjcmV0IGRyaXZlciBvcHRpb25zLCBtYXBwaW5nIGVhY2ggb3B0aW9uIG5hbWUgdG8gdGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGhvbGRpbmcgaXRzIHZhbHVlLlxuICAgKiBPbmx5IHRoZSB2YXJpYWJsZSBuYW1lIGlzIHdyaXR0ZW4gdG8gYGQ5LXBsdW1iaW5nLmpzb25gLCBuZXZlciB0aGUgdmFsdWU6IGl0IGlzIHJlYWQgZnJvbSB0aGUgZW52aXJvbm1lbnQgKG9yIGAuZW52YCkgYXQgcnVudGltZS5cbiAgICogQGV4YW1wbGUgeyBrZXk6ICdTM19BQ0NFU1NfS0VZX0lEX0VOVl9WQVInLCBzZWNyZXQ6ICdTM19TRUNSRVRfQUNDRVNTX0tFWV9FTlZfVkFSJyB9IC8vIHRoZSBgc2VjcmV0YCBvcHRpb24gaXMgcmVhZCBmcm9tICRTM19TRUNSRVRfQUNDRVNTX0tFWV9FTlZfVkFSXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRFbnY/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb2YgdGhlIGQ5LXBsdW1iaW5nIENMSSwgd3JpdHRlbiB0byBgZDktcGx1bWJpbmcuanNvbmAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1bWJpbmdPcHRpb25zIHtcbiAgLyoqXG4gICAqIFN0b3JhZ2Ugc2hhcmVkIGJldHdlZW4gZW52aXJvbm1lbnRzLlxuICAgKiBAZGVmYXVsdCAtIG5vbmUsIHRoZSBpbnRlcm1lZGlhdGUgc3RvcmFnZSBpcyBjb25maWd1cmVkIHdpdGggSU5URVJNRURJQVRFX1NUT1JBR0VfKiB2YXJpYWJsZXMgb3IgZmxhZ3NcbiAgICovXG4gIHJlYWRvbmx5IGludGVybWVkaWF0ZVN0b3JhZ2U/OiBJbnRlcm1lZGlhdGVTdG9yYWdlT3B0aW9ucztcbiAgLyoqXG4gICAqIERlZmF1bHQgbG9nIGxldmVsIG9mIHRoZSBDTEksIG92ZXJyaWRkZW4gYnkgdGhlIExPR19MRVZFTCBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICogQGRlZmF1bHQgXCJkZWJ1Z1wiXG4gICAqL1xuICByZWFkb25seSBsb2dMZXZlbD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEOVByb2plY3RPcHRpb25zIGV4dGVuZHMgdHlwZXNjcmlwdC5UeXBlU2NyaXB0UHJvamVjdE9wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9ucyBmb3IgdGhlIEdpdEh1YiBjb25maWd1cmF0aW9uLlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBHaXRIdWIgY29uZmlnIGVudGlyZWx5LlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgR2l0SHViQ29uZmlnIHdpdGggcHJvamVjdCBkZWZhdWx0c1xuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViQ29uZmlnPzogR2l0SHViQ29uZmlnT3B0aW9ucyB8IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9ucyBmb2xkZXIuXG4gICAqIEBkZWZhdWx0IFwiZXh0ZW5zaW9uLXBhY2thZ2VzXCJcbiAgICovXG4gIHJlYWRvbmx5IGV4dGVuc2lvbnNGb2xkZXJOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBwYWNrYWdlVmVyc2lvbnM/OiBQYWNrYWdlVmVyc2lvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBEOVByb2plY3QgZXh0ZW5kcyBqYXZhc2NyaXB0Lk5vZGVQcm9qZWN0IHtcblxuICBwdWJsaWMgcmVhZG9ubHkgZ2l0aHViQ29uZmlnPzogR2l0SHViQ29uZmlnO1xuICBwdWJsaWMgZXh0ZW5zaW9ucyE6IEV4dGVuc2lvbkZvbGRlcjtcbiAgcHVibGljIGV4dGVuc2lvbkZvbGRlciE6IHN0cmluZztcbiAgcHVibGljIGJ1aWxkRXh0ZW5zaW9uVGFzayE6IFRhc2s7XG4gIHB1YmxpYyBkb2NrZXJmaWxlITogRG9ja2VyZmlsZTtcbiAgcHVibGljIGRvY2tlckNvbXBvc2VGaWxlITogRG9ja2VyQ29tcG9zZTtcbiAgcHVibGljIGQ5U2VydmljZSE6IERvY2tlckNvbXBvc2VTZXJ2aWNlO1xuICBwdWJsaWMgZGF0YWJhc2VTZXJ2aWNlITogRG9ja2VyQ29tcG9zZVNlcnZpY2U7XG4gIHB1YmxpYyBjYWNoZVNlcnZpY2UhOiBEb2NrZXJDb21wb3NlU2VydmljZTtcbiAgcHJpdmF0ZSBwbHVtYmluZ0NvbmZpZyE6IEpzb25GaWxlO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBvcHRpb25zOiBEOVByb2plY3RPcHRpb25zKSB7XG4gICAgY29uc3QgZDlWZXJzaW9uID0gb3B0aW9ucy5wYWNrYWdlVmVyc2lvbnM/LmQ5IHx8ICcxMi4wLjE1JztcbiAgICBjb25zdCBhdGxhc1ZlcnNpb24gPSBvcHRpb25zLnBhY2thZ2VWZXJzaW9ucz8uYXRsYXMgfHwgJzEuMy4zJztcbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgcGFja2FnZU1hbmFnZXI6IG9wdGlvbnMucGFja2FnZU1hbmFnZXIgPz8gamF2YXNjcmlwdC5Ob2RlUGFja2FnZU1hbmFnZXIuTlBNLFxuICAgICAgZ2l0aHViOiBmYWxzZSwgLy8gV2UgdXNlIG91ciBvd24gR2l0SHViQ29uZmlnIGluc3RlYWRcbiAgICAgIGRlcHNVcGdyYWRlOiB0cnVlLFxuICAgICAgZGVwc1VwZ3JhZGVPcHRpb25zOiB7XG4gICAgICAgIHdvcmtmbG93T3B0aW9uczoge1xuICAgICAgICAgIHNjaGVkdWxlOiBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUuREFJTFksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgbGljZW5zZWQ6IGZhbHNlLFxuICAgICAgcmVhZG1lOiBvcHRpb25zLnJlYWRtZSA/PyB7XG4gICAgICAgIGNvbnRlbnRzOiBbXG4gICAgICAgICAgYCMgJHtvcHRpb25zLm5hbWV9YCxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnQSBbZDldKGh0dHBzOi8vZ2l0aHViLmNvbS9MYVdlYmNhcHN1bGUvZDkpIChEaXJlY3R1cyA5IGZvcmspIHByb2plY3Qgc2NhZmZvbGRlZCB3aXRoIFtgQHdiY2UvcHJvamVuLWQ5YF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQHdiY2UvcHJvamVuLWQ5KS4gRGV2ZWxvcCBsb2NhbGx5IGFnYWluc3QgRG9ja2VyIENvbXBvc2UsIHRoZW4gYnVpbGQgYSBEb2NrZXIgaW1hZ2UgdG8gZGVwbG95IGFueXdoZXJlLicsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJyMjIExvY2FsIGRldmVsb3BtZW50JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnYGBgc2gnLFxuICAgICAgICAgICducHggcHJvamVuIGluc3RhbGwgICAgICAjIGluc3RhbGwgZGVwZW5kZW5jaWVzJyxcbiAgICAgICAgICAnbnB4IHByb2plbiBmaXJzdC1ydW4gICAgIyBib290IHN0YWNrLCBjcmVhdGUgYWRtaW4sIHN0YXJ0IGQ5JyxcbiAgICAgICAgICAnYGBgJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnT3BlbiBodHRwOi8vbG9jYWxob3N0OjgwNTUgYW5kIHNpZ24gaW4gYXMgYGFkbWluQGV4YW1wbGUuY29tYCAvIGB0b3RvdG90b2AuIEV4dGVuc2lvbnMgYXV0by1yZWxvYWQgKGBFWFRFTlNJT05TX0FVVE9fUkVMT0FEPXRydWVgKS4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIyBEZXBsb3knLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdBIGBEb2NrZXJmaWxlYCBpcyBpbmNsdWRlZC4gQnVpbGQgYW5kIHB1c2ggdGhlIGltYWdlIGZvciB5b3VyIHRhcmdldCBlbnZpcm9ubWVudDonLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdgYGBzaCcsXG4gICAgICAgICAgJ2RvY2tlciBidWlsZCAtdCA8cmVnaXN0cnk+LzxpbWFnZT46PHRhZz4gLicsXG4gICAgICAgICAgJ2RvY2tlciBwdXNoIDxyZWdpc3RyeT4vPGltYWdlPjo8dGFnPicsXG4gICAgICAgICAgJ2BgYCcsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ0NvbmZpZ3VyZSB0aGUgZGVwbG95ZWQgaW5zdGFuY2Ugd2l0aCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKGRhdGFiYXNlLCBjYWNoZSwgc2VjcmV0cykg4oCUIHNlZSB0aGUgZDkgZG9jcy4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIyBDb21tb24gdGFza3MnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICd8IFRhc2sgfCBEZXNjcmlwdGlvbiB8JyxcbiAgICAgICAgICAnfCAtLS0gfCAtLS0gfCcsXG4gICAgICAgICAgJ3wgYG5weCBwcm9qZW4gcnVuYCB8IFN0YXJ0IGQ5IChgZG9ja2VyIGNvbXBvc2UgdXAgZDlgKSB8JyxcbiAgICAgICAgICAnfCBgbnB4IHByb2plbiBidWlsZC1leHRlbnNpb25zIFtuYW1lXWAgfCBJbnN0YWxsIGFuZCBidWlsZCBhbGwgZXh0ZW5zaW9ucyAob3Igb25seSBgbmFtZWApIHwnLFxuICAgICAgICAgICd8IGBucHggcHJvamVuIGNyZWF0ZS1hbi1hZG1pbmAgfCBDcmVhdGUgdGhlIGRlZmF1bHQgYWRtaW4gdXNlciB8JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnU2VlIGAucHJvamVuL3Rhc2tzLmpzb25gIGZvciB0aGUgZnVsbCBsaXN0LicsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJyMjIENvbmZpZ3VyYXRpb24nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdFZGl0IGAucHJvamVucmMuanNgIGFuZCBydW4gYG5weCBwcm9qZW5gIHRvIHJlZ2VuZXJhdGUgcHJvamVjdCBmaWxlcy4gTG9jYWwgZW52aXJvbm1lbnQgb3ZlcnJpZGVzIGdvIGluIGAuZW52LmxvY2FsYC4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICcjIyBFeHRlbnNpb25zJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnRXh0ZW5zaW9ucyBsaXZlIHVuZGVyIGAuL3BsdWdpbnMvYC4gQWRkIG5ldyBvbmVzIGluIGAucHJvamVucmMuanNgOicsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ2BgYGpzJyxcbiAgICAgICAgICBcImltcG9ydCB7IEQ5RXh0ZW5zaW9uVHlwZSB9IGZyb20gJ0B3YmNlL3Byb2plbi1kOS1leHRlbnNpb24nO1wiLFxuICAgICAgICAgICcnLFxuICAgICAgICAgIFwicHJvamVjdC5hZGRFeHRlbnNpb24oJ215LWhvb2snLCBbRDlFeHRlbnNpb25UeXBlLkhPT0tdKTtcIixcbiAgICAgICAgICAnYGBgJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnVGhlbiBgbnB4IHByb2plbiAmJiBucHggcHJvamVuIGJ1aWxkLWV4dGVuc2lvbnNgLicsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICB9LFxuICAgICAgZGV2RGVwczogW1xuICAgICAgICAnQHdiY2UvcHJvamVuLWQ5JyxcbiAgICAgICAgJ0B3YmNlL3Byb2plbi1kOS1leHRlbnNpb24nLFxuICAgICAgICAuLi4ob3B0aW9ucy5kZXZEZXBzID8/IFtdKSxcbiAgICAgIF0sXG4gICAgICBkZXBzOiBbYEB3YmNlLWQ5L2RpcmVjdHVzOUAke2Q5VmVyc2lvbn1gXSxcbiAgICB9KTtcblxuICAgIC8vIE5vIHRzY29uZmlnIG1lYW5zIG5vIHRzYyAtLWJ1aWxkIGluIGNvbXBpbGVcbiAgICB0aGlzLmNvbXBpbGVUYXNrLnJlc2V0KCk7XG5cbiAgICB0aGlzLnBsdW1iaW5nQ29uZmlnID0gbmV3IEpzb25GaWxlKHRoaXMsICdkOS1wbHVtYmluZy5qc29uJywge1xuICAgICAgb2JqOiB7IGF0bGFzVmVyc2lvbiB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRFeHRlbnNpb25Gb2xkZXIoKTtcbiAgICB0aGlzLmFkZERvY2tlckNvbXBvc2UoKTtcbiAgICB0aGlzLmFkZEZpcnN0UnVuVGFzaygpO1xuICAgIHRoaXMuYWRkQnVpbGRFeHRlbnNpb25UYXNrKCk7XG4gICAgdGhpcy5hZGRSdW5UYXNrKCk7XG4gICAgdGhpcy5hZGREOVBsdW1iaW5nVGFzaygpO1xuICAgIHRoaXMuYWRkRG9ja2VyZmlsZSgpO1xuICAgIHRoaXMuYWRkQ3JlYXRlQWRtaW5Vc2VyVGFzaygpO1xuXG4gICAgbmV3IEFpSW5zdHJ1Y3Rpb25zKHRoaXMsIHtcbiAgICAgIGFnZW50czogW0FpQWdlbnQuQ0xBVURFXSxcbiAgICB9KTtcblxuICAgIGlmIChvcHRpb25zLmdpdGh1YkNvbmZpZyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZ2l0aHViQ29uZmlnID0gbmV3IEdpdEh1YkNvbmZpZyh0aGlzLCBvcHRpb25zLmdpdGh1YkNvbmZpZyk7XG4gICAgICB0aGlzLmFkZFNhdmVCcmFuY2hXb3JrZmxvdygpO1xuICAgIH1cbiAgICB0aGlzLmdpdGlnbm9yZS5hZGRQYXR0ZXJucygndXBsb2FkcycpO1xuICAgIHRoaXMuZ2l0aWdub3JlLmFkZFBhdHRlcm5zKCcqKi8uRFNfU3RvcmUnKTtcbiAgICB0aGlzLmdpdGlnbm9yZS5hZGRQYXR0ZXJucygnLmVudi5sb2NhbCcpO1xuXG4gICAgLy8gQ3JlYXRlIGFuIGVtcHR5IC5lbnYubG9jYWwgaWYgaXQgZG9lc24ndCBleGlzdCwgc28gRG9ja2VyIGRvZXNuJ3QgbW91bnQgYSBkaXJlY3RvcnlcbiAgICBuZXcgU2FtcGxlRmlsZSh0aGlzLCAnLmVudi5sb2NhbCcsIHsgY29udGVudHM6ICcjIExvY2FsIGVudmlyb25tZW50IG92ZXJyaWRlcyBmb3IgZDknIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRFeHRlbnNpb25Gb2xkZXIoKSB7XG4gICAgY29uc3QgZm9sZGVyTmFtZSA9IHRoaXMub3B0aW9ucy5leHRlbnNpb25zRm9sZGVyTmFtZSA/PyAncGx1Z2lucyc7XG4gICAgdGhpcy5leHRlbnNpb25zID0gbmV3IEV4dGVuc2lvbkZvbGRlcih7IHBhcmVudDogdGhpcywgbmFtZTogZm9sZGVyTmFtZSB9KTtcbiAgICB0aGlzLmV4dGVuc2lvbkZvbGRlciA9IGZvbGRlck5hbWU7XG4gICAgdGhpcy5naXRpZ25vcmUuZXhjbHVkZSgnZXh0ZW5zaW9ucy8qJyk7XG4gICAgdGhpcy5naXRpZ25vcmUuaW5jbHVkZSgnZXh0ZW5zaW9ucy90ZW1wbGF0ZXMvJyk7XG4gIH1cblxuICBwdWJsaWMgYWRkRXh0ZW5zaW9uKG5hbWU6IHN0cmluZywgZXh0ZW5zaW9uVHlwZXM6IEQ5RXh0ZW5zaW9uVHlwZVtdLCBvcHRpb25zPzogQWRkRXh0ZW5zaW9uT3B0aW9ucyApIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbnNpb25zLmFkZChuYW1lLCBleHRlbnNpb25UeXBlcywgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgY29uZmlndXJlUGx1bWJpbmcob3B0aW9uczogUGx1bWJpbmdPcHRpb25zKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob3B0aW9ucykpIHtcbiAgICAgIHRoaXMucGx1bWJpbmdDb25maWcuYWRkT3ZlcnJpZGUoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRGaXJzdFJ1blRhc2soKSB7XG4gICAgY29uc3QgdGFzayA9IHRoaXMuYWRkVGFzaygnZmlyc3QtcnVuJywge1xuICAgICAgZGVzY3JpcHRpb246ICdJbml0aWFsaXplIGFuZCBzdGFydCBhIGZyZXNoIGQ5IGluc3RhbmNlJyxcbiAgICB9KTtcbiAgICBjb25zdCBhZG1pbkVtYWlsID0gJ2FkbWluQGV4YW1wbGUuY29tJztcbiAgICBjb25zdCB1c2VyTm90RXhpc3RzQ29uZGl0aW9uID0gYGRvY2tlciBjb21wb3NlIGV4ZWMgZGF0YWJhc2UgcHNxbCAtVSBkOSAtZCBkOSAtdEFjIFwiU0VMRUNUIGNvdW50KCopIEZST00gZGlyZWN0dXNfdXNlcnMgV0hFUkUgZW1haWwgPSAnJHthZG1pbkVtYWlsfSdcIiB8IGdyZXAgLXEgJ14wJCdgO1xuICAgIGNvbnN0IGVtcHR5RGF0YWJhc2VDb25kaXRpb24gPSAnZG9ja2VyIGNvbXBvc2UgZXhlYyBkYXRhYmFzZSBwc3FsIC1VIGQ5IC1kIGQ5IC10QWMgXCJTRUxFQ1QgY291bnQoKikgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIFdIRVJFIHRhYmxlX25hbWUgTElLRSBcXCdkaXJlY3R1c18lXFwnXCIgfCBncmVwIC1xIFxcJ14wJFxcJyc7XG4gICAgdGFzay5leGVjKCdkb2NrZXIgY29tcG9zZSB1cCAtZCAtLXdhaXQgZGF0YWJhc2UgY2FjaGUnKTtcbiAgICB0YXNrLmV4ZWMoJ25weCBkOS1wbHVtYmluZyBmaXJzdC1pbXBvcnQgLS1ob3N0IGxvY2FsaG9zdCAtLXVzZXIgZDkgLS1wYXNzd29yZCBkOSAtLWRhdGFiYXNlIGQ5Jywge1xuICAgICAgY29uZGl0aW9uOiAndGVzdCAtZCAuL3NxbCcsXG4gICAgfSk7XG4gICAgdGFzay5leGVjKCdkb2NrZXIgY29tcG9zZSBydW4gLS1ybSBkOSBucHggZGlyZWN0dXMgYm9vdHN0cmFwJywge1xuICAgICAgY29uZGl0aW9uOiBgdGVzdCAhIC1kIC4vc3FsICYmICR7ZW1wdHlEYXRhYmFzZUNvbmRpdGlvbn1gLFxuICAgIH0pO1xuICAgIHRhc2suZXhlYyhgQURNSU5fUk9MRV9JRD0kKGRvY2tlciBjb21wb3NlIGV4ZWMgZGF0YWJhc2UgcHNxbCAtVSBkOSAtZCBkOSAtdEFjIFwiU0VMRUNUIGlkIEZST00gZGlyZWN0dXNfcm9sZXMgV0hFUkUgYWRtaW5fYWNjZXNzID0gdHJ1ZSBMSU1JVCAxXCIpICYmIGRvY2tlciBjb21wb3NlIHJ1biAtLXJtIGQ5IG5weCBkaXJlY3R1cyB1c2VycyBjcmVhdGUgLS1lbWFpbCAke2FkbWluRW1haWx9IC0tcGFzc3dvcmQgdG90b3RvdG8gLS1yb2xlIFwiJEFETUlOX1JPTEVfSURcImAsIHtcbiAgICAgIGNvbmRpdGlvbjogdXNlck5vdEV4aXN0c0NvbmRpdGlvbixcbiAgICB9KTtcbiAgICB0YXNrLnNheShgVXNlciAke2FkbWluRW1haWx9IGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCBwYXNzd29yZCB0b3RvdG90b2AsIHtcbiAgICAgIGNvbmRpdGlvbjogdXNlck5vdEV4aXN0c0NvbmRpdGlvbixcbiAgICB9KTtcbiAgICB0YXNrLnNheShgVXNlciAke2FkbWluRW1haWx9IGFscmVhZHkgZXhpc3RzLCBza2lwcGluZyBjcmVhdGlvbmAsIHtcbiAgICAgIGNvbmRpdGlvbjogYCEgJHt1c2VyTm90RXhpc3RzQ29uZGl0aW9ufWAsXG4gICAgfSk7XG4gICAgdGFzay5leGVjKCdkb2NrZXIgY29tcG9zZSB1cCBkOScpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDcmVhdGVBZG1pblVzZXJUYXNrKCkge1xuICAgIGNvbnN0IHRhc2sgPSB0aGlzLmFkZFRhc2soJ2NyZWF0ZS1hbi1hZG1pbicsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGFuIGFkbWluIHVzZXInLFxuICAgIH0pO1xuICAgIGNvbnN0IGFkbWluRW1haWwgPSAnYWRtaW5AZXhhbXBsZS5jb20nO1xuICAgIGNvbnN0IHVzZXJOb3RFeGlzdHNDb25kaXRpb24gPSBgZG9ja2VyIGNvbXBvc2UgZXhlYyBkYXRhYmFzZSBwc3FsIC1VIGQ5IC1kIGQ5IC10QWMgXCJTRUxFQ1QgY291bnQoKikgRlJPTSBkaXJlY3R1c191c2VycyBXSEVSRSBlbWFpbCA9ICcke2FkbWluRW1haWx9J1wiIHwgZ3JlcCAtcSAnXjAkJ2A7XG4gICAgdGFzay5leGVjKCdkb2NrZXIgY29tcG9zZSB1cCAtZCAtLXdhaXQgZGF0YWJhc2UgY2FjaGUnKTtcbiAgICB0YXNrLmV4ZWMoYEFETUlOX1JPTEVfSUQ9JChkb2NrZXIgY29tcG9zZSBleGVjIGRhdGFiYXNlIHBzcWwgLVUgZDkgLWQgZDkgLXRBYyBcIlNFTEVDVCBpZCBGUk9NIGRpcmVjdHVzX3JvbGVzIFdIRVJFIGFkbWluX2FjY2VzcyA9IHRydWUgTElNSVQgMVwiKSAmJiBkb2NrZXIgY29tcG9zZSBydW4gLS1ybSBkOSBucHggZGlyZWN0dXMgdXNlcnMgY3JlYXRlIC0tZW1haWwgJHthZG1pbkVtYWlsfSAtLXBhc3N3b3JkIHRvdG90b3RvIC0tcm9sZSBcIiRBRE1JTl9ST0xFX0lEXCJgLCB7XG4gICAgICBjb25kaXRpb246IHVzZXJOb3RFeGlzdHNDb25kaXRpb24sXG4gICAgfSk7XG4gICAgdGFzay5zYXkoYFVzZXIgJHthZG1pbkVtYWlsfSBoYXMgYmVlbiBjcmVhdGVkIHdpdGggcGFzc3dvcmQgdG90b3RvdG9gLCB7XG4gICAgICBjb25kaXRpb246IHVzZXJOb3RFeGlzdHNDb25kaXRpb24sXG4gICAgfSk7XG4gICAgdGFzay5zYXkoYFVzZXIgJHthZG1pbkVtYWlsfSBhbHJlYWR5IGV4aXN0cywgc2tpcHBpbmcgY3JlYXRpb25gLCB7XG4gICAgICBjb25kaXRpb246IGAhICR7dXNlck5vdEV4aXN0c0NvbmRpdGlvbn1gLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRSdW5UYXNrKCkge1xuICAgIGNvbnN0IHRhc2sgPSB0aGlzLmFkZFRhc2soJ3J1bicsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnc3RhcnQgdGhlIGQ5IGluc3RhbmNlJyxcbiAgICB9KTtcbiAgICB0YXNrLmV4ZWMoJ2RvY2tlciBjb21wb3NlIHVwIGQ5Jyk7XG4gIH1cblxuICBwcml2YXRlIGFkZEQ5UGx1bWJpbmdUYXNrKCkge1xuICAgIGNvbnN0IHRhc2sgPSB0aGlzLmFkZFRhc2soJ2Q5LXBsdW1iaW5nJywge1xuICAgICAgZGVzY3JpcHRpb246ICdSdW4gdGhlIGQ5LXBsdW1iaW5nIENMSSAoc2F2ZSwgYXBwbHktc2NoZW1hLCBmaXJzdC1pbXBvcnQuLi4pLiBVc2UgLS1oZWxwIHRvIGxpc3QgYWxsIHN1YmNvbW1hbmRzLicsXG4gICAgfSk7XG4gICAgdGFzay5zYXkoJ1RpcDogeW91IGNhbiBhbHNvIGNhbGwgaXQgZGlyZWN0bHkgd2l0aCBgbnB4IGQ5LXBsdW1iaW5nIDxjb21tYW5kPmAnKTtcbiAgICB0YXNrLmV4ZWMoJ25weCBkOS1wbHVtYmluZyBcIiRAXCInLCB7IHJlY2VpdmVBcmdzOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRCdWlsZEV4dGVuc2lvblRhc2soKSB7XG4gICAgdGhpcy5idWlsZEV4dGVuc2lvblRhc2sgPSB0aGlzLmFkZFRhc2soJ2J1aWxkLWV4dGVuc2lvbnMnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0J1aWxkIHRoZSBkOSBleHRlbnNpb25zJyxcbiAgICB9KTtcbiAgICB0aGlzLmJ1aWxkRXh0ZW5zaW9uVGFzay5leGVjKGBjZCAke3RoaXMuZXh0ZW5zaW9uRm9sZGVyfSAmJiBwbnBtIGluc3RhbGxgKTtcbiAgICAvLyBwcm9qZW4gcmVwbGFjZXMgXCIkQFwiIHdpdGggdGhlIHF1b3RlZCB0YXNrIGFyZ3M7IGBzZXQgLS1gIHR1cm5zIHRoZW0gYmFjayBpbnRvICQxXG4gICAgdGhpcy5idWlsZEV4dGVuc2lvblRhc2suZXhlYyhcbiAgICAgIGBjZCAke3RoaXMuZXh0ZW5zaW9uRm9sZGVyfSAmJiBzZXQgLS0gXCIkQFwiICYmIGlmIFsgLW4gXCIkMVwiIF07IHRoZW4gcG5wbSAtLXJlY3Vyc2l2ZSAtLWZpbHRlciBcIiQxLi4uXCIgcnVuIGJ1aWxkOyBlbHNlIHBucG0gcnVuIC0tcmVjdXJzaXZlIGJ1aWxkOyBmaWAsXG4gICAgICB7IHJlY2VpdmVBcmdzOiB0cnVlIH0sXG4gICAgKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBhZGREb2NrZXJDb21wb3NlKCkge1xuICAgIGNvbnN0IGRjID0gbmV3IERvY2tlckNvbXBvc2UodGhpcyk7XG5cbiAgICB0aGlzLmRhdGFiYXNlU2VydmljZSA9IGRjLmFkZFNlcnZpY2UoJ2RhdGFiYXNlJywge1xuICAgICAgaW1hZ2U6ICdwb3N0Z2lzL3Bvc3RnaXM6MTMtbWFzdGVyJyxcbiAgICAgIHZvbHVtZXM6IFtcbiAgICAgICAgRG9ja2VyQ29tcG9zZS5uYW1lZFZvbHVtZSgncGdkYXRhJywgJy92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScpLFxuICAgICAgXSxcbiAgICAgIHBvcnRzOiBbXG4gICAgICAgIERvY2tlckNvbXBvc2UucG9ydE1hcHBpbmcoNTQzMiwgNTQzMiksXG4gICAgICBdLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgUE9TVEdSRVNfVVNFUjogJ2Q5JyxcbiAgICAgICAgUE9TVEdSRVNfUEFTU1dPUkQ6ICdkOScsXG4gICAgICAgIFBPU1RHUkVTX0RCOiAnZDknLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuY2FjaGVTZXJ2aWNlID0gZGMuYWRkU2VydmljZSgnY2FjaGUnLCB7XG4gICAgICBpbWFnZTogJ3JlZGlzOjYnLFxuICAgICAgdm9sdW1lczogW1xuICAgICAgICBEb2NrZXJDb21wb3NlLm5hbWVkVm9sdW1lKCdyZWRpc19zdG9yYWdlJywgJy9kYXRhJyksXG4gICAgICBdLFxuICAgICAgcG9ydHM6IFtcbiAgICAgICAgRG9ja2VyQ29tcG9zZS5wb3J0TWFwcGluZyg2Mzc5LCA2Mzc5KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmQ5U2VydmljZSA9IGRjLmFkZFNlcnZpY2UoJ2Q5Jywge1xuICAgICAgaW1hZ2VCdWlsZDogeyBjb250ZXh0OiAnLicgfSxcbiAgICAgIHBvcnRzOiBbXG4gICAgICAgIERvY2tlckNvbXBvc2UucG9ydE1hcHBpbmcoODA1NSwgODA1NSksXG4gICAgICBdLFxuICAgICAgdm9sdW1lczogW1xuICAgICAgICBEb2NrZXJDb21wb3NlLmJpbmRWb2x1bWUoJy4vdXBsb2FkcycsICcvYXBwL3VwbG9hZHMnKSxcbiAgICAgICAgRG9ja2VyQ29tcG9zZS5iaW5kVm9sdW1lKCcuL2V4dGVuc2lvbnMnLCAnL2FwcC9leHRlbnNpb25zJyksXG4gICAgICBdLFxuICAgICAgLy8gZGVwZW5kc09uIGlzIHNldCB2aWEgYWRkT3ZlcnJpZGUgYmVsb3cgd2l0aCBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgS0VZOiAnc29tZS1yYW5kb20ta2V5JyxcbiAgICAgICAgU0VDUkVUOiAnYW5vdGhlci1yYW5kb20ta2V5JyxcbiAgICAgICAgQ09ORklHX1BBVEg6ICcuZW52LmxvY2FsJyxcbiAgICAgICAgREJfQ0xJRU5UOiAncGcnLFxuICAgICAgICBEQl9IT1NUOiAnZGF0YWJhc2UnLFxuICAgICAgICBEQl9QT1JUOiAnNTQzMicsXG4gICAgICAgIERCX0RBVEFCQVNFOiAnZDknLFxuICAgICAgICBEQl9VU0VSOiAnZDknLFxuICAgICAgICBEQl9QQVNTV09SRDogJ2Q5JyxcbiAgICAgICAgQ0FDSEVfRU5BQkxFRDogJ2ZhbHNlJyxcbiAgICAgICAgQ0FDSEVfU1RPUkU6ICdyZWRpcycsXG4gICAgICAgIENBQ0hFX1JFRElTX0hPU1Q6ICdjYWNoZScsXG4gICAgICAgIE1FU1NFTkdFUl9TVE9SRTogJ3JlZGlzJyxcbiAgICAgICAgTUVTU0VOR0VSX1JFRElTOiAncmVkaXM6Ly9jYWNoZTo2Mzc5JyxcbiAgICAgICAgQ0FDSEVfU1RBVFVTX0hFQURFUjogJ2NhY2hlLWhpdCcsXG4gICAgICAgIENPUlNfRU5BQkxFRDogJ3RydWUnLFxuICAgICAgICBDT1JTX09SSUdJTjogJ3RydWUnLFxuICAgICAgICBMT0dfTEVWRUw6ICdpbmZvJyxcbiAgICAgICAgQURNSU5fRU1BSUw6ICdhZG1pbkBleGFtcGxlLmNvbScsXG4gICAgICAgIEFETUlOX1BBU1NXT1JEOiAndG90b3RvdG8nLFxuICAgICAgICBFWFRFTlNJT05TX0FVVE9fUkVMT0FEOiAndHJ1ZScsXG4gICAgICAgIFZBTElEQVRFX0VOVElUSUVTX1RPS0VOU19BUElfS0VZOiAndG90bycsXG4gICAgICAgIEFXU19LTVNfS0VZX0lEOiAndHV0dScsXG4gICAgICB9LFxuICAgICAgY29tbWFuZDogWydzaCcsICctYycsICducHggZGlyZWN0dXMgc3RhcnQnXSxcbiAgICB9KTtcblxuICAgIHRoaXMuZDlTZXJ2aWNlLmFkZFZvbHVtZShEb2NrZXJDb21wb3NlLmJpbmRWb2x1bWUoJy4vLmVudi5sb2NhbCcsICcvYXBwLy5lbnYubG9jYWwnKSk7XG5cbiAgICAvLyBBZGQgaGVhbHRoY2hlY2sgZm9yIGRhdGFiYXNlIChub3QgbmF0aXZlbHkgc3VwcG9ydGVkIGJ5IHByb2plbiBEb2NrZXJDb21wb3NlKVxuICAgIGRjLmZpbGUuYWRkT3ZlcnJpZGUoJ3NlcnZpY2VzLmRhdGFiYXNlLmhlYWx0aGNoZWNrJywge1xuICAgICAgdGVzdDogWydDTUQnLCAncGdfaXNyZWFkeScsICctLWhvc3Q9bG9jYWxob3N0JywgJy0tdXNlcm5hbWU9ZDknXSxcbiAgICAgIGludGVydmFsOiAnMTBzJyxcbiAgICAgIHRpbWVvdXQ6ICc1cycsXG4gICAgICByZXRyaWVzOiA1LFxuICAgICAgc3RhcnRfaW50ZXJ2YWw6ICc1cycsXG4gICAgICBzdGFydF9wZXJpb2Q6ICczMHMnLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIGhlYWx0aGNoZWNrIGZvciBjYWNoZVxuICAgIGRjLmZpbGUuYWRkT3ZlcnJpZGUoJ3NlcnZpY2VzLmNhY2hlLmhlYWx0aGNoZWNrJywge1xuICAgICAgdGVzdDogWydDTUQtU0hFTEwnLCAnWyAkKHJlZGlzLWNsaSBwaW5nKSA9IFxcJ1BPTkdcXCcgXSddLFxuICAgICAgaW50ZXJ2YWw6ICcxMHMnLFxuICAgICAgdGltZW91dDogJzVzJyxcbiAgICAgIHJldHJpZXM6IDUsXG4gICAgICBzdGFydF9pbnRlcnZhbDogJzVzJyxcbiAgICAgIHN0YXJ0X3BlcmlvZDogJzMwcycsXG4gICAgfSk7XG5cbiAgICAvLyBPdmVycmlkZSBkZXBlbmRzX29uIHRvIHVzZSBjb25kaXRpb24gc3ludGF4XG4gICAgZGMuZmlsZS5hZGRPdmVycmlkZSgnc2VydmljZXMuZDkuZGVwZW5kc19vbicsIHtcbiAgICAgIGNhY2hlOiB7IGNvbmRpdGlvbjogJ3NlcnZpY2VfaGVhbHRoeScgfSxcbiAgICAgIGRhdGFiYXNlOiB7IGNvbmRpdGlvbjogJ3NlcnZpY2VfaGVhbHRoeScgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuZG9ja2VyQ29tcG9zZUZpbGUgPSBkYztcblxuICAgIHJldHVybiBkYztcbiAgfVxuXG4gIHByaXZhdGUgYWRkU2F2ZUJyYW5jaFdvcmtmbG93KCkge1xuICAgIGNvbnN0IHdvcmtmbG93ID0gdGhpcy5naXRodWJDb25maWchLmFkZFdvcmtmbG93KCdzYXZlLWJyYW5jaCcpO1xuICAgIHdvcmtmbG93Lm9uKHsgcHVzaDogeyBicmFuY2hlczogWycqLXNhdmUnXSB9IH0pO1xuICAgIHdvcmtmbG93LmFkZEpvYignY3JlYXRlLXByJywge1xuICAgICAgbmFtZTogJ0NyZWF0ZSBQdWxsIFJlcXVlc3QnLFxuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIHB1bGxSZXF1ZXN0czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgIH0sXG4gICAgICBzdGVwczogW1xuICAgICAgICB7IG5hbWU6ICdDaGVja291dCcsIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHY0JyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0NyZWF0ZSBQdWxsIFJlcXVlc3QnLFxuICAgICAgICAgIHJ1bjogJ2doIHByIGNyZWF0ZSAtLXRpdGxlIFwiU2F2ZTogJHtHSVRIVUJfUkVGX05BTUUlLXNhdmV9XCIgLS1ib2R5IFwiQXV0by1nZW5lcmF0ZWQgUFIgZnJvbSBicmFuY2ggXFxcXGAke0dJVEhVQl9SRUZfTkFNRSUtc2F2ZX1cXFxcYFwiIC0tYmFzZSBcIiR7R0lUSFVCX1JFRl9OQU1FJS1zYXZlfVwiIHx8IGVjaG8gXCJQUiBhbHJlYWR5IGV4aXN0c1wiJyxcbiAgICAgICAgICBlbnY6IHsgR0hfVE9LRU46ICcke3sgc2VjcmV0cy5HSVRIVUJfVE9LRU4gfX0nIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREb2NrZXJmaWxlKCkge1xuICAgIHRoaXMuZG9ja2VyZmlsZSA9IG5ldyBEb2NrZXJmaWxlKHRoaXMpXG4gICAgICAuZnJvbSgnbm9kZScsICcyMi1ib29rd29ybS1zbGltJylcbiAgICAgIC5zdGVwKCd1cGRhdGUtbnBtJywgJ1VwZGF0ZSBucG0gdG8gZml4IGRlcGVuZGVuY2llcycpXG4gICAgICAucnVuKCducG0gaW5zdGFsbCAtZyBucG1AMTEuOC4wJylcbiAgICAgIC5zdGVwKCdpbnN0YWxsLXBucG0nLCAnaW5zdGFsbCBwbnBtJylcbiAgICAgIC5ydW4oJ25wbSBpbnN0YWxsIC1nIHBucG1AMTAuMzMuMCcpXG4gICAgICAuc3RlcCgnY29weS1wYWNrYWdlJywgJ0NvcHkgcGFja2FnZS5qc29uIGFuZCBwYWNrYWdlLWxvY2suanNvbiBmaXJzdCB0byBsZXZlcmFnZSBEb2NrZXIgbGF5ZXIgY2FjaGluZycpXG4gICAgICAuY29weSgncGFja2FnZSouanNvbicsICcvYXBwLycpXG4gICAgICAuc3RlcCgnd29ya2RpcicsICdTZXQgd29ya2luZyBkaXJlY3RvcnknKVxuICAgICAgLndvcmtkaXIoJy9hcHAnKVxuICAgICAgLnN0ZXAoJ2luc3RhbGwtZGVwcycsICdJbnN0YWxsIGRlcGVuZGVuY2llcyAtIHdpdGhvdXQgZGV2IGRlcGVuZGVuY2llcycpXG4gICAgICAucnVuKCdOT0RFX0VOVj1wcm9kdWN0aW9uIG5wbSBpbnN0YWxsJylcbiAgICAgIC5zdGVwKCdjbGVhbnVwJywgJ0NsZWFuaW5nIGJlbmNobWFya3MgZm9sZGVyIGluIHRlZGlvdXMgbW9kdWxlIGZvciBzZWN1cml0eScpXG4gICAgICAucnVuKCdybSAtcmYgbm9kZV9tb2R1bGVzL3RlZGlvdXMvYmVuY2htYXJrcycpXG4gICAgICAuc3RlcCgnY29weS1zb3VyY2UnLCAnQ29weSB0aGUgcmVzdCBvZiB0aGUgYXBwbGljYXRpb24gY29kZScpXG4gICAgICAuY29weSgnLicsICcuJylcbiAgICAgIC5zdGVwKCdidWlsZC1leHRlbnNpb24nLCAnYnVpbGQgZXh0ZW5zaW9ucycpXG4gICAgICAucnVuKCducHggcHJvamVuIGJ1aWxkLWV4dGVuc2lvbnMnKVxuICAgICAgLnN0ZXAoJ3N0YXJ0JywgJ1N0YXJ0IGQ5IHNlcnZlcicpXG4gICAgICAuY21kRXhlYyhbJ25weCcsICdkaXJlY3R1cycsICdzdGFydCddKTtcbiAgICByZXR1cm4gdGhpcy5kb2NrZXJmaWxlO1xuICB9XG5cbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIEQ5UHJvamVjdE9wdGlvbnN9IGluc3RlYWQuIFRoZSBwYWNrYWdlIHdhcyByZW5hbWVkIHRvIGBAd2JjZS9wcm9qZW4tZDlgIHRvIHJlZmxlY3QgdGhhdCBpdCB0YXJnZXRzIHRoZSBkOSBmb3JrLCBub3QgdXBzdHJlYW0gRGlyZWN0dXMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0dXNQcm9qZWN0T3B0aW9ucyBleHRlbmRzIEQ5UHJvamVjdE9wdGlvbnMge31cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIEQ5UHJvamVjdH0gaW5zdGVhZC4gVGhlIHBhY2thZ2Ugd2FzIHJlbmFtZWQgdG8gYEB3YmNlL3Byb2plbi1kOWAgdG8gcmVmbGVjdCB0aGF0IGl0IHRhcmdldHMgdGhlIGQ5IGZvcmssIG5vdCB1cHN0cmVhbSBEaXJlY3R1cy5cbiAqL1xuZXhwb3J0IGNsYXNzIERpcmVjdHVzUHJvamVjdCBleHRlbmRzIEQ5UHJvamVjdCB7fVxuIl19
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# cedar-wasm
|
|
2
|
+
|
|
3
|
+
An implementation of various cedar functions to enable developers to write typescript and javascript applications using Cedar and wasm.
|
|
4
|
+
|
|
5
|
+
## Installing
|
|
6
|
+
|
|
7
|
+
Installing is simple, just run `npm i @cedar-policy/cedar-wasm --save` or install with whatever your favorite package manager is.
|
|
8
|
+
|
|
9
|
+
Loading is much more complicated. It depends on your environment. We offer three subpackages:
|
|
10
|
+
|
|
11
|
+
* es modules (default). It loads wasm in a way that will be bundled into a single file if you use dynamic imports, or embedded into your main bundle if you use regular imports.
|
|
12
|
+
* commonjs (for node). It loads wasm using node's `fs` module, synchronously. Not really designed for bundling or shipping to the browser.
|
|
13
|
+
* web: more customizable. This one is for when you need to load the wasm in some totally custom way. More details in the "alternate loading strategies" section.
|
|
14
|
+
|
|
15
|
+
These sub-packages are named `@cedar-policy/cedar-wasm`, `@cedar-policy/cedar-wasm/nodejs`, and `@cedar-policy/cedar-wasm/web`, respectively.
|
|
16
|
+
|
|
17
|
+
## Loading in bare nodeJs without a bundler
|
|
18
|
+
|
|
19
|
+
Node uses CommonJs so you have to import with require, or with dynamic `import()`.
|
|
20
|
+
|
|
21
|
+
Importing the CJS export:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
const cedar = require('@cedar-policy/cedar-wasm/nodejs');
|
|
25
|
+
console.log(cedar.getCedarVersion());
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Importing the esm version using esm async import:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
import('@cedar-policy/cedar-wasm/nodejs')
|
|
32
|
+
.then(cedar => console.log(cedar.getCedarVersion()));
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## Loading in webpack 5:
|
|
37
|
+
|
|
38
|
+
Minimal package.json for webpack including dev server:
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
{
|
|
42
|
+
"name": "webpack-ts-tester",
|
|
43
|
+
"version": "1.0.0",
|
|
44
|
+
"description": "",
|
|
45
|
+
"private": true,
|
|
46
|
+
"scripts": {
|
|
47
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
48
|
+
"build": "webpack",
|
|
49
|
+
"dev": "webpack serve"
|
|
50
|
+
},
|
|
51
|
+
"keywords": [],
|
|
52
|
+
"author": "",
|
|
53
|
+
"license": "ISC",
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@cedar-policy/cedar-wasm": "3.2.0"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"ts-loader": "^9.5.1",
|
|
59
|
+
"typescript": "^5.4.5",
|
|
60
|
+
"webpack": "^5.91.0",
|
|
61
|
+
"webpack-cli": "^5.1.4",
|
|
62
|
+
"webpack-dev-server": "^5.0.4",
|
|
63
|
+
"html-webpack-plugin": "^5.6.0"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Minimal tsconfig:
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
{
|
|
72
|
+
"compilerOptions": {
|
|
73
|
+
"outDir": "./dist/",
|
|
74
|
+
"noImplicitAny": true,
|
|
75
|
+
"module": "es2020",
|
|
76
|
+
"target": "es5",
|
|
77
|
+
"jsx": "react",
|
|
78
|
+
"allowJs": true,
|
|
79
|
+
"moduleResolution": "node"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Configure webpack.config.js:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
const path = require('path');
|
|
88
|
+
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
|
89
|
+
|
|
90
|
+
module.exports = {
|
|
91
|
+
mode: 'development', // change this to suit you
|
|
92
|
+
entry: './src/index.ts',
|
|
93
|
+
module: {
|
|
94
|
+
rules: [
|
|
95
|
+
{
|
|
96
|
+
test: /\.tsx?$/,
|
|
97
|
+
use: 'ts-loader',
|
|
98
|
+
exclude: /node_modules/,
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
resolve: {
|
|
103
|
+
extensions: ['.tsx', '.ts', '.js'],
|
|
104
|
+
},
|
|
105
|
+
output: {
|
|
106
|
+
filename: 'bundle.js',
|
|
107
|
+
path: path.resolve(__dirname, 'dist'),
|
|
108
|
+
},
|
|
109
|
+
experiments: {
|
|
110
|
+
asyncWebAssembly: true, // enables wasm support in webpack
|
|
111
|
+
},
|
|
112
|
+
plugins: [new HtmlWebpackPlugin()],
|
|
113
|
+
devServer: {
|
|
114
|
+
static: {
|
|
115
|
+
directory: path.join(__dirname, 'dist'),
|
|
116
|
+
},
|
|
117
|
+
compress: true,
|
|
118
|
+
port: 8000,
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Finally, load the code from your `index.ts` file. We recommend dynamic imports:
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
import('@cedar-policy/cedar-wasm').then(mod => {
|
|
127
|
+
// cache it globally here or invoke functions like mod.getCedarVersion();
|
|
128
|
+
});
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
## Loading in vite 5:
|
|
134
|
+
|
|
135
|
+
Starting from the vite typescript template, install these two dependencies to enable wasm:
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
npm i --save-dev vite-plugin-top-level-await vite-plugin-wasm
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Then add those two plugins to your vite config in `vite.config.js`:
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
import wasm from 'vite-plugin-wasm';
|
|
145
|
+
import topLevelAwait from 'vite-plugin-top-level-await';
|
|
146
|
+
import { defineConfig } from 'vite';
|
|
147
|
+
|
|
148
|
+
export default defineConfig({
|
|
149
|
+
plugins: [
|
|
150
|
+
wasm(),
|
|
151
|
+
topLevelAwait()
|
|
152
|
+
]
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Finally, load the code. We recommend dynamic imports:
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
import('@cedar-policy/cedar-wasm').then(mod => {
|
|
161
|
+
// cache it globally here or invoke functions like mod.getCedarVersion();
|
|
162
|
+
});
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Alternate loading strategies
|
|
166
|
+
|
|
167
|
+
If for some reason you cannot use es modules, we provide alternate sub-packages `web` and `nodejs` (defined as `exports` in the root package.json).
|
|
168
|
+
|
|
169
|
+
The `nodejs` subpackage uses `fs` and CommonJS modules. To use it, you can import it like so:
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
const cedar = require('@cedar-policy/cedar-wasm/nodejs')
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
The `web` subpackage exposes an `initSync` function that you can use to load Cedar in scenarios where you want to load the wasm binary async for whatever reason. Using the `web` subpackage may also be necessary with some `jest` setups. Here's how you use the `web` subpackage:
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
const wasmBuffer = ... // `fetch` it or use `fs` to read it from `node_modules` in jest setupTests
|
|
179
|
+
import * as cedarJsBindings from '@cedar-policy/cedar-wasm/web';
|
|
180
|
+
cedarJsBindings.initSync(wasmBuffer);
|
|
181
|
+
```
|