@cartanova/qgrid-cli 2.10.10 → 2.11.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/bundle/dist/_virtual/_rolldown/runtime.js +1 -10
- package/bundle/dist/application/monit/log-buffer.js +12 -6
- package/bundle/dist/application/monit/monit.frame.js +11 -3
- package/bundle/dist/application/monit/monit.types.js +1 -1
- package/bundle/dist/application/qgrid/conv-routing.js +9 -6
- package/bundle/dist/application/qgrid/expired-token-reminder.js +2 -2
- package/bundle/dist/application/qgrid/oauth.js +31 -4
- package/bundle/dist/application/qgrid/qgrid-image-generation.js +1 -1
- package/bundle/dist/application/qgrid/qgrid-response-format.js +21 -19
- package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +40 -33
- package/bundle/dist/application/qgrid/qgrid.dispatcher.js +128 -93
- package/bundle/dist/application/qgrid/qgrid.frame.js +930 -49
- package/bundle/dist/application/qgrid/qgrid.types.js +212 -5
- package/bundle/dist/application/qgrid/schema-prompt.js +75 -48
- package/bundle/dist/application/qgrid/slack-user-map.js +1 -1
- package/bundle/dist/application/qgrid/token-death.js +1 -1
- package/bundle/dist/application/qgrid/token-subscriber.js +83 -30
- package/bundle/dist/application/qgrid/token-trigger-setup.js +1 -1
- package/bundle/dist/application/qgrid/token-window-keepalive.js +8 -6
- package/bundle/dist/application/qgrid/tool-emulation-schema.js +13 -13
- package/bundle/dist/application/qgrid/tool-emulation.js +19 -15
- package/bundle/dist/application/request-log/json-schema-type-text.js +29 -12
- package/bundle/dist/application/request-log/request-log.model.js +83 -70
- package/bundle/dist/application/request-log/request-log.types.js +1 -1
- package/bundle/dist/application/request-log/zod-code-format.js +1 -1
- package/bundle/dist/application/request-log-step/request-log-step.model.js +1 -1
- package/bundle/dist/application/request-log-step/request-log-step.types.js +1 -1
- package/bundle/dist/application/setting/setting.constant.js +1 -1
- package/bundle/dist/application/setting/setting.model.js +2 -2
- package/bundle/dist/application/setting/setting.store.js +2 -2
- package/bundle/dist/application/setting/setting.types.js +1 -1
- package/bundle/dist/application/sonamu.generated.js +32 -16
- package/bundle/dist/application/sonamu.generated.sso.js +1 -1
- package/bundle/dist/application/token/token.model.js +26 -9
- package/bundle/dist/application/token/token.types.js +20 -3
- package/bundle/dist/i18n/en.js +15 -1
- package/bundle/dist/i18n/ko.js +15 -1
- package/bundle/dist/i18n/sd.generated.js +1 -1
- package/bundle/dist/migrations/20260807133553_manual__backfill_request_log_cost.js +8 -6
- package/bundle/dist/server-bootstrap.js +4 -2
- package/bundle/dist/server-error-handler.js +1 -1
- package/bundle/dist/sonamu.config.js +37 -8
- package/bundle/dist/startup-migrations.js +17 -7
- package/bundle/dist/testing/global.js +1 -1
- package/bundle/dist/testing/schema-bench.js +0 -0
- package/bundle/dist/testing/test-database-name.js +1 -1
- package/bundle/dist/utils/providers/anthropic/anthropic-constants.js +1 -1
- package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +11 -5
- package/bundle/dist/utils/providers/anthropic/anthropic-quota.js +4 -4
- package/bundle/dist/utils/providers/anthropic/anthropic-thinking.js +1 -1
- package/bundle/dist/utils/providers/anthropic/claude-session.js +20 -19
- package/bundle/dist/utils/providers/anthropic/fence-strip.js +1 -1
- package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +49 -23
- package/bundle/dist/utils/providers/common/credentials.js +5 -1
- package/bundle/dist/utils/providers/common/effort.js +3 -3
- package/bundle/dist/utils/providers/common/model-cost.js +69 -14
- package/bundle/dist/utils/providers/common/provider-types.js +29 -1
- package/bundle/dist/utils/providers/common/schema-validation.js +78 -40
- package/bundle/dist/utils/providers/common/smooth-weighted-round-robin.js +1 -1
- package/bundle/dist/utils/providers/common/strictifier.js +62 -43
- package/bundle/dist/utils/providers/common/thinking.js +3 -2
- package/bundle/dist/utils/providers/common/ttft.js +1 -1
- package/bundle/dist/utils/providers/grok/grok-backend-protocol.js +427 -0
- package/bundle/dist/utils/providers/grok/grok-constants.js +55 -0
- package/bundle/dist/utils/providers/grok/grok-direct-client.js +196 -0
- package/bundle/dist/utils/providers/grok/grok-dispatcher.js +1313 -0
- package/bundle/dist/utils/providers/grok/grok-headers.js +118 -0
- package/bundle/dist/utils/providers/grok/grok-media-client.js +420 -0
- package/bundle/dist/utils/providers/grok/grok-models.js +114 -0
- package/bundle/dist/utils/providers/grok/grok-oauth.js +455 -0
- package/bundle/dist/utils/providers/grok/grok-quota.js +119 -0
- package/bundle/dist/utils/providers/grok/grok-refresh.js +192 -0
- package/bundle/dist/utils/providers/grok/grok-types.js +186 -0
- package/bundle/dist/utils/providers/grok/grok-voice-client.js +199 -0
- package/bundle/dist/utils/providers/grok/index.js +11 -0
- package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +111 -83
- package/bundle/dist/utils/providers/openai/openai-callback-relay.js +3 -2
- package/bundle/dist/utils/providers/openai/openai-constants.js +1 -1
- package/bundle/dist/utils/providers/openai/openai-direct-client.js +23 -7
- package/bundle/dist/utils/providers/openai/openai-dispatcher.js +143 -106
- package/bundle/dist/utils/providers/openai/openai-image-generation.js +48 -33
- package/bundle/dist/utils/providers/openai/openai-oauth.js +28 -13
- package/bundle/dist/utils/providers/openai/openai-quota.js +38 -27
- package/bundle/dist/utils/providers/openai/openai-refresh.js +17 -9
- package/bundle/dist/utils/providers/openai/openai-sse.js +1 -1
- package/bundle/dist/utils/providers/openai/openai-transport-config.js +1 -1
- package/bundle/dist/utils/quiet-hours.js +1 -1
- package/bundle/dist/utils/slack-notify.js +14 -8
- package/bundle/dist/utils/subset-loaders.js +4 -5
- package/bundle/src/application/monit/log-buffer.ts +23 -9
- package/bundle/src/application/monit/monit.frame.ts +22 -5
- package/bundle/src/application/monit/monit.types.ts +6 -0
- package/bundle/src/application/qgrid/conv-routing.test.ts +76 -4
- package/bundle/src/application/qgrid/conv-routing.ts +35 -9
- package/bundle/src/application/qgrid/expired-token-reminder.ts +9 -1
- package/bundle/src/application/qgrid/oauth.ts +51 -15
- package/bundle/src/application/qgrid/qgrid-image-generation.ts +9 -0
- package/bundle/src/application/qgrid/qgrid-response-format.ts +50 -25
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +19 -0
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +84 -40
- package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +97 -0
- package/bundle/src/application/qgrid/qgrid.dispatcher.ts +274 -126
- package/bundle/src/application/qgrid/qgrid.frame.test.ts +1013 -3
- package/bundle/src/application/qgrid/qgrid.frame.ts +1415 -60
- package/bundle/src/application/qgrid/qgrid.types.ts +335 -0
- package/bundle/src/application/qgrid/schema-prompt.ts +105 -41
- package/bundle/src/application/qgrid/slack-user-map.ts +5 -0
- package/bundle/src/application/qgrid/token-death.ts +4 -0
- package/bundle/src/application/qgrid/token-subscriber.test.ts +21 -19
- package/bundle/src/application/qgrid/token-subscriber.ts +186 -53
- package/bundle/src/application/qgrid/token-trigger-setup.ts +2 -0
- package/bundle/src/application/qgrid/token-window-keepalive.ts +49 -6
- package/bundle/src/application/qgrid/tool-emulation-schema.ts +33 -29
- package/bundle/src/application/qgrid/tool-emulation.ts +52 -27
- package/bundle/src/application/request-log/json-schema-type-text.test.ts +5 -5
- package/bundle/src/application/request-log/json-schema-type-text.ts +81 -26
- package/bundle/src/application/request-log/request-log.model.test.ts +111 -4
- package/bundle/src/application/request-log/request-log.model.ts +277 -146
- package/bundle/src/application/request-log/request-log.types.ts +6 -0
- package/bundle/src/application/request-log/zod-code-format.ts +11 -0
- package/bundle/src/application/request-log-step/request-log-step.model.ts +1 -0
- package/bundle/src/application/request-log-step/request-log-step.types.ts +2 -0
- package/bundle/src/application/setting/setting.constant.ts +9 -0
- package/bundle/src/application/setting/setting.model.ts +12 -2
- package/bundle/src/application/setting/setting.store.ts +5 -1
- package/bundle/src/application/setting/setting.types.ts +8 -0
- package/bundle/src/application/sonamu.generated.http +133 -0
- package/bundle/src/application/sonamu.generated.sso.ts +2 -0
- package/bundle/src/application/sonamu.generated.ts +15 -0
- package/bundle/src/application/token/token.identity.test.ts +20 -0
- package/bundle/src/application/token/token.model.ts +66 -7
- package/bundle/src/application/token/token.types.ts +24 -1
- package/bundle/src/i18n/en.ts +19 -0
- package/bundle/src/i18n/ko.ts +21 -0
- package/bundle/src/i18n/sd.generated.ts +23 -2
- package/bundle/src/migrations/20260807133553_manual__backfill_request_log_cost.ts +16 -8
- package/bundle/src/server-bootstrap.ts +4 -2
- package/bundle/src/server-error-handler.ts +1 -0
- package/bundle/src/sonamu.config.ts +69 -7
- package/bundle/src/startup-migrations.ts +27 -9
- package/bundle/src/testing/global.ts +20 -0
- package/bundle/src/testing/schema-bench.ts +105 -30
- package/bundle/src/testing/test-database-name.ts +2 -0
- package/bundle/src/utils/providers/anthropic/anthropic-constants.ts +8 -0
- package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +41 -6
- package/bundle/src/utils/providers/anthropic/anthropic-quota.ts +7 -3
- package/bundle/src/utils/providers/anthropic/anthropic-thinking.ts +6 -0
- package/bundle/src/utils/providers/anthropic/claude-session.ts +58 -24
- package/bundle/src/utils/providers/anthropic/fence-strip.ts +11 -0
- package/bundle/src/utils/providers/anthropic/stream-json-adapter.ts +110 -45
- package/bundle/src/utils/providers/common/credentials.ts +8 -0
- package/bundle/src/utils/providers/common/effort.ts +9 -2
- package/bundle/src/utils/providers/common/model-cost.test.ts +48 -1
- package/bundle/src/utils/providers/common/model-cost.ts +259 -158
- package/bundle/src/utils/providers/common/provider-dispatcher.ts +98 -2
- package/bundle/src/utils/providers/common/provider-types.ts +46 -3
- package/bundle/src/utils/providers/common/schema-validation.test.ts +5 -1
- package/bundle/src/utils/providers/common/schema-validation.ts +124 -56
- package/bundle/src/utils/providers/common/smooth-weighted-round-robin.ts +4 -0
- package/bundle/src/utils/providers/common/strictifier.ts +185 -59
- package/bundle/src/utils/providers/common/thinking.ts +2 -2
- package/bundle/src/utils/providers/common/ttft.ts +4 -2
- package/bundle/src/utils/providers/grok/__fixtures__/golden-responses-1.0.60.json +164 -0
- package/bundle/src/utils/providers/grok/grok-backend-protocol.test.ts +325 -0
- package/bundle/src/utils/providers/grok/grok-backend-protocol.ts +721 -0
- package/bundle/src/utils/providers/grok/grok-constants.ts +105 -0
- package/bundle/src/utils/providers/grok/grok-direct-client.test.ts +179 -0
- package/bundle/src/utils/providers/grok/grok-direct-client.ts +313 -0
- package/bundle/src/utils/providers/grok/grok-dispatcher.test.ts +1395 -0
- package/bundle/src/utils/providers/grok/grok-dispatcher.ts +2105 -0
- package/bundle/src/utils/providers/grok/grok-headers.test.ts +149 -0
- package/bundle/src/utils/providers/grok/grok-headers.ts +199 -0
- package/bundle/src/utils/providers/grok/grok-media-client.test.ts +446 -0
- package/bundle/src/utils/providers/grok/grok-media-client.ts +703 -0
- package/bundle/src/utils/providers/grok/grok-models.test.ts +96 -0
- package/bundle/src/utils/providers/grok/grok-models.ts +161 -0
- package/bundle/src/utils/providers/grok/grok-oauth.test.ts +406 -0
- package/bundle/src/utils/providers/grok/grok-oauth.ts +771 -0
- package/bundle/src/utils/providers/grok/grok-quota.test.ts +142 -0
- package/bundle/src/utils/providers/grok/grok-quota.ts +198 -0
- package/bundle/src/utils/providers/grok/grok-refresh.test.ts +239 -0
- package/bundle/src/utils/providers/grok/grok-refresh.ts +325 -0
- package/bundle/src/utils/providers/grok/grok-types.test.ts +252 -0
- package/bundle/src/utils/providers/grok/grok-types.ts +374 -0
- package/bundle/src/utils/providers/grok/grok-voice-client.test.ts +321 -0
- package/bundle/src/utils/providers/grok/grok-voice-client.ts +284 -0
- package/bundle/src/utils/providers/grok/index.ts +20 -0
- package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +221 -137
- package/bundle/src/utils/providers/openai/openai-callback-relay.ts +12 -1
- package/bundle/src/utils/providers/openai/openai-constants.ts +2 -0
- package/bundle/src/utils/providers/openai/openai-direct-client.ts +111 -21
- package/bundle/src/utils/providers/openai/openai-dispatcher.ts +322 -169
- package/bundle/src/utils/providers/openai/openai-image-generation.ts +116 -36
- package/bundle/src/utils/providers/openai/openai-oauth.ts +48 -20
- package/bundle/src/utils/providers/openai/openai-quota.ts +77 -46
- package/bundle/src/utils/providers/openai/openai-refresh.ts +42 -18
- package/bundle/src/utils/providers/openai/openai-sse.ts +27 -3
- package/bundle/src/utils/providers/openai/openai-transport-config.ts +2 -0
- package/bundle/src/utils/quiet-hours.ts +12 -1
- package/bundle/src/utils/slack-notify.ts +44 -13
- package/bundle/src/utils/subset-loaders.ts +7 -7
- package/bundle/web-dist/client/assets/clsx-5XM_pHvN.js +1 -0
- package/bundle/web-dist/client/assets/index-BA7uQ-6c.js +31 -0
- package/bundle/web-dist/client/assets/index-Be2qCZmI.css +1 -0
- package/bundle/web-dist/client/assets/logs-C47OJGEI.js +1 -0
- package/bundle/web-dist/client/assets/monit-BS9no0dU.js +4 -0
- package/bundle/web-dist/client/assets/plus-sdACTfH0.js +1 -0
- package/bundle/web-dist/client/assets/refresh-cw-CY8o_1cT.js +1 -0
- package/bundle/web-dist/client/assets/request-model-BRtFuZvj.js +1 -0
- package/bundle/web-dist/client/assets/routes-kqgkUxE8.js +5 -0
- package/bundle/web-dist/client/assets/{services.generated-NP-ValHd.js → services.generated-CefiDXEv.js} +5 -5
- package/bundle/web-dist/client/assets/settings-DNDvFGSw.js +1 -0
- package/bundle/web-dist/client/assets/show-u8Np69q3.js +2 -0
- package/bundle/web-dist/client/assets/tokens-QvP410NW.js +1 -0
- package/bundle/web-dist/client/assets/total-cost-MnfKU8IN.js +1 -0
- package/bundle/web-dist/client/assets/use-oauth-login-flow-Bzdh28Ws.js +1 -0
- package/bundle/web-dist/client/assets/use-update-token-mutation-CfJKaxmR.js +1 -0
- package/bundle/web-dist/client/assets/vendor-react-CUFFrVN9.js +244 -0
- package/bundle/web-dist/client/assets/vendor-tanstack-Bf_jag9G.js +1 -0
- package/bundle/web-dist/client/index.html +6 -6
- package/bundle/web-dist/server/assets/clsx-D_N5PN_2.js +16 -0
- package/bundle/web-dist/server/assets/{lazyRouteComponent-CgBdabgd.js → lazyRouteComponent-D8iTIHyn.js} +129 -2
- package/bundle/web-dist/server/assets/logs-B3OTd9hy.js +825 -0
- package/bundle/web-dist/server/assets/{monit-ZPt66W5M.js → monit-B2hqorPe.js} +385 -126
- package/bundle/web-dist/server/assets/plus-DwG7h9kq.js +28 -0
- package/bundle/web-dist/server/assets/{react-dom-Ds75e4Jl.js → react-dom-BIYQzBqG.js} +2 -129
- package/bundle/web-dist/server/assets/refresh-cw-mMBkwOq0.js +44 -0
- package/bundle/web-dist/server/assets/{request-model-DjGldb-h.js → request-model-I6OdODSH.js} +15 -6
- package/bundle/web-dist/server/assets/{routes-Ct-k7nBA.js → routes-B95YlUv2.js} +760 -213
- package/bundle/web-dist/server/assets/{services.generated-BA4AcAf5.js → services.generated-DQATJ6qf.js} +12820 -12194
- package/bundle/web-dist/server/assets/settings-C3gbGk0m.js +830 -0
- package/bundle/web-dist/server/assets/{show-LSFIzvO2.js → show-Bxaj3rhH.js} +1350 -418
- package/bundle/web-dist/server/assets/tokens-CZjH3cB7.js +1038 -0
- package/bundle/web-dist/server/assets/total-cost-fTE9Xy82.js +18 -0
- package/bundle/web-dist/server/assets/use-oauth-login-flow-CKDHgc3U.js +2379 -0
- package/bundle/web-dist/server/assets/{use-update-token-mutation-pkArIzCP.js → use-update-token-mutation-BEbgOzaa.js} +1 -1
- package/bundle/web-dist/server/entry-server.generated.js +4295 -22810
- package/dist/cli.js +9 -9
- package/package.json +4 -11
- package/postinstall.mjs +12 -0
- package/skills/qgrid/SKILL.md +1 -0
- package/skills/qgrid/references/cli-env-and-server-boot.md +4 -1
- package/skills/qgrid/references/decision-rationale.md +23 -0
- package/skills/qgrid/references/grok-runtime.md +89 -0
- package/skills/qgrid/references/provider-runtime-differences.md +30 -29
- package/skills/qgrid/references/repo-map.md +10 -0
- package/skills/qgrid/references/token-auth-quota-lifecycle.md +56 -3
- package/bundle/dist/node_modules/.pnpm/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +0 -406
- package/bundle/dist/node_modules/.pnpm/@vitest_expect@4.1.10/node_modules/@vitest/expect/dist/index.js +0 -1507
- package/bundle/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.10/node_modules/@vitest/pretty-format/dist/index.js +0 -887
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/chunk-artifact.js +0 -2756
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/index.js +0 -8
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/utils.js +0 -8
- package/bundle/dist/node_modules/.pnpm/@vitest_snapshot@4.1.10/node_modules/@vitest/snapshot/dist/index.js +0 -922
- package/bundle/dist/node_modules/.pnpm/@vitest_spy@4.1.10/node_modules/@vitest/spy/dist/index.js +0 -386
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +0 -121
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/constants.js +0 -51
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/diff.js +0 -1317
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/display.js +0 -561
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/error.js +0 -40
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/helpers.js +0 -272
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/offset.js +0 -27
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/serialize.js +0 -77
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/source-map.js +0 -381
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/timers.js +0 -51
- package/bundle/dist/node_modules/.pnpm/chai@6.2.2/node_modules/chai/index.js +0 -2986
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.js +0 -10
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.js +0 -109
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.js +0 -10
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.js +0 -10
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.js +0 -10
- package/bundle/dist/node_modules/.pnpm/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.js +0 -1126
- package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.js +0 -21
- package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +0 -432
- package/bundle/dist/node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.js +0 -517
- package/bundle/dist/node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.js +0 -101
- package/bundle/dist/node_modules/.pnpm/vite@8.0.3_@emnapi_core@1.11.2_@emnapi_runtime@1.11.2_@types_node@25.0.7_esbuild@0.27.4_5b35fc1fb85d2af4d105e0d74f940f50/node_modules/vite/dist/node/module-runner.js +0 -1265
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +0 -9
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +0 -41
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +0 -19
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +0 -202
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/index.DdgEv5B1.js +0 -46
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +0 -119
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js +0 -3044
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +0 -59
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/index.js +0 -28
- package/bundle/dist/testing/setup-mocks.js +0 -16
- package/bundle/src/testing/setup-mocks.ts +0 -44
- package/bundle/web-dist/client/assets/index-Bw2s88Ot.css +0 -1
- package/bundle/web-dist/client/assets/index-DZwzUfI-.js +0 -106
- package/bundle/web-dist/client/assets/logs-Cog79DU5.js +0 -1
- package/bundle/web-dist/client/assets/monit-2auznBys.js +0 -1
- package/bundle/web-dist/client/assets/plus-B62CuqT8.js +0 -1
- package/bundle/web-dist/client/assets/refresh-cw-NNcU0Cmq.js +0 -1
- package/bundle/web-dist/client/assets/request-model-CojtinqK.js +0 -1
- package/bundle/web-dist/client/assets/routes-B0lTeLK-.js +0 -5
- package/bundle/web-dist/client/assets/settings-D8ZxZGSJ.js +0 -1
- package/bundle/web-dist/client/assets/show-CFSERlnM.js +0 -2
- package/bundle/web-dist/client/assets/tokens-CZXUyI7O.js +0 -1
- package/bundle/web-dist/client/assets/use-oauth-login-flow-hboOs3wG.js +0 -1
- package/bundle/web-dist/client/assets/use-update-token-mutation-BQHS0byG.js +0 -1
- package/bundle/web-dist/client/assets/vendor-react-DH4kUfK2.js +0 -9
- package/bundle/web-dist/client/assets/vendor-tanstack-DJRQAbrY.js +0 -1
- package/bundle/web-dist/server/assets/logs-BMyR98rU.js +0 -509
- package/bundle/web-dist/server/assets/plus-BZ9I0VgC.js +0 -19
- package/bundle/web-dist/server/assets/refresh-cw-CztCFis-.js +0 -23
- package/bundle/web-dist/server/assets/settings-CBUZ47Xx.js +0 -461
- package/bundle/web-dist/server/assets/tokens-DxrBW512.js +0 -448
- package/bundle/web-dist/server/assets/use-oauth-login-flow-Gn8flMK5.js +0 -178
- package/dist/cli.d.ts +0 -10
- /package/bundle/web-dist/client/assets/{cost-DH2jZbrw.js → cost-DB3HbU7T.js} +0 -0
- /package/bundle/web-dist/client/assets/{preload-helper-ca-nBW7U.js → preload-helper-DWTEM3RW.js} +0 -0
- /package/bundle/web-dist/server/assets/{cost-eEHeTRT5.js → cost-BC9yzyA9.js} +0 -0
|
@@ -10,8 +10,8 @@ async function readAnthropicQuotaUsage(accessToken, model) {
|
|
|
10
10
|
};
|
|
11
11
|
const utilizations = [data.five_hour?.utilization];
|
|
12
12
|
if (isFableFamilyModel(model)) utilizations.push(data.seven_day_overage_included?.utilization);
|
|
13
|
-
const utilization = Math.max(...utilizations.filter((value) =>
|
|
14
|
-
if (
|
|
13
|
+
const utilization = Math.max(...utilizations.filter((value) => value !== null && value !== void 0 && Number.isFinite(value)));
|
|
14
|
+
if (!Number.isFinite(utilization)) return {
|
|
15
15
|
kind: "lookup_failed",
|
|
16
16
|
reason: "five_hour utilization unavailable"
|
|
17
17
|
};
|
|
@@ -23,11 +23,11 @@ async function readAnthropicQuotaUsage(accessToken, model) {
|
|
|
23
23
|
} catch (e) {
|
|
24
24
|
return {
|
|
25
25
|
kind: "lookup_failed",
|
|
26
|
-
reason: e.message
|
|
26
|
+
reason: e instanceof Error ? e.message : String(e)
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
//#endregion
|
|
31
31
|
export { invalidateAnthropicQuotaUsage, readAnthropicQuotaUsage };
|
|
32
32
|
|
|
33
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50aHJvcGljLXF1b3RhLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9wcm92aWRlcnMvYW50aHJvcGljL2FudGhyb3BpYy1xdW90YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBmZXRjaFVzYWdlV2l0aE1ldGEsXG4gIGludmFsaWRhdGVBbnRocm9waWNRdW90YVVzYWdlLFxufSBmcm9tIFwiLi4vLi4vLi4vYXBwbGljYXRpb24vcWdyaWQvb2F1dGhcIjtcbmltcG9ydCB7IGlzRmFibGVGYW1pbHlNb2RlbCB9IGZyb20gXCIuL2FudGhyb3BpYy1jb25zdGFudHNcIjtcblxuZXhwb3J0IHsgaW52YWxpZGF0ZUFudGhyb3BpY1F1b3RhVXNhZ2UgfTtcblxuZXhwb3J0IHR5cGUgQW50aHJvcGljUXVvdGFVc2FnZVJlc3VsdCA9XG4gIHwgeyBraW5kOiBcIm9rXCI7IHV0aWxpemF0aW9uUGN0OiBudW1iZXI7IGNhY2hlQWdlTXM6IG51bWJlciB9XG4gIHwgeyBraW5kOiBcImxvb2t1cF9mYWlsZWRcIjsgcmVhc29uOiBzdHJpbmcgfTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRBbnRocm9waWNRdW90YVVzYWdlKFxuICBhY2Nlc3NUb2tlbjogc3RyaW5nLFxuICBtb2RlbD86IHN0cmluZyxcbik6IFByb21pc2U8QW50aHJvcGljUXVvdGFVc2FnZVJlc3VsdD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHsgZGF0YSwgY2FjaGVkQXQgfSA9IGF3YWl0IGZldGNoVXNhZ2VXaXRoTWV0YShhY2Nlc3NUb2tlbik7XG5cbiAgICBpZiAoZGF0YS5lcnJvcikgcmV0dXJuIHsga2luZDogXCJsb29rdXBfZmFpbGVkXCIsIHJlYXNvbjogZGF0YS5lcnJvciB9O1xuXG4gICAgY29uc3QgdXRpbGl6YXRpb25zID0gW2RhdGEuZml2ZV9ob3VyPy51dGlsaXphdGlvbl07XG5cbiAgICAvLyBGYWJsZSDqs4Tsl7QoNSwgNS4xKeydgCA17Iuc6rCEIOywveqzvCDrs4TqsJzroZwgdXNhZ2UgY3JlZGl0cyDquLDrsJggN+ydvCDrsoTtgrfrj4Qg7IaM7KeE65CgIOyImCDsnojri6QuXG4gICAgaWYgKGlzRmFibGVGYW1pbHlNb2RlbChtb2RlbCkpIHtcbiAgICAgIHV0aWxpemF0aW9ucy5wdXNoKGRhdGEuc2V2ZW5fZGF5X292ZXJhZ2VfaW5jbHVkZWQ/LnV0aWxpemF0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCB1dGlsaXphdGlvbiA9IE1hdGgubWF4KFxuICAgICAgLi4udXRpbGl6YXRpb25zLmZpbHRlcihcbiAgICAgICAgKHZhbHVlKTogdmFsdWUgaXMgbnVtYmVyID0+IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHV0aWxpemF0aW9uKSkge1xuICAgICAgcmV0dXJuIHsga2luZDogXCJsb29rdXBfZmFpbGVkXCIsIHJlYXNvbjogXCJmaXZlX2hvdXIgdXRpbGl6YXRpb24gdW5hdmFpbGFibGVcIiB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBraW5kOiBcIm9rXCIsXG4gICAgICB1dGlsaXphdGlvblBjdDogdXRpbGl6YXRpb24sXG4gICAgICBjYWNoZUFnZU1zOiBNYXRoLm1heChEYXRlLm5vdygpIC0gY2FjaGVkQXQsIDApLFxuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBraW5kOiBcImxvb2t1cF9mYWlsZWRcIiwgcmVhc29uOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFZQSxlQUFzQix3QkFDcEIsYUFDQSxPQUNvQztDQUNwQyxJQUFJO0VBQ0YsTUFBTSxFQUFFLE1BQU0sYUFBYSxNQUFNLG1CQUFtQixXQUFXO0VBRS9ELElBQUksS0FBSyxPQUFPLE9BQU87R0FBRSxNQUFNO0dBQWlCLFFBQVEsS0FBSztFQUFNO0VBRW5FLE1BQU0sZUFBZSxDQUFDLEtBQUssV0FBVyxXQUFXO0VBR2pELElBQUksbUJBQW1CLEtBQUssR0FDMUIsYUFBYSxLQUFLLEtBQUssNEJBQTRCLFdBQVc7RUFHaEUsTUFBTSxjQUFjLEtBQUssSUFDdkIsR0FBRyxhQUFhLFFBQ2IsVUFBMkIsVUFBVSxRQUFRLFVBQVUsVUFBYSxPQUFPLFNBQVMsS0FBSyxDQUM1RixDQUNGO0VBRUEsSUFBSSxDQUFDLE9BQU8sU0FBUyxXQUFXLEdBQzlCLE9BQU87R0FBRSxNQUFNO0dBQWlCLFFBQVE7RUFBb0M7RUFHOUUsT0FBTztHQUNMLE1BQU07R0FDTixnQkFBZ0I7R0FDaEIsWUFBWSxLQUFLLElBQUksS0FBSyxJQUFJLElBQUksVUFBVSxDQUFDO0VBQy9DO0NBQ0YsU0FBUyxHQUFHO0VBQ1YsT0FBTztHQUFFLE1BQU07R0FBaUIsUUFBUSxhQUFhLFFBQVEsRUFBRSxVQUFVLE9BQU8sQ0FBQztFQUFFO0NBQ3JGO0FBQ0YifQ==
|
|
@@ -52,4 +52,4 @@ function resolveAnthropicThinking(model, thinking, effort) {
|
|
|
52
52
|
//#endregion
|
|
53
53
|
export { assertAnthropicThinkingRuntime, resolveAnthropicThinking };
|
|
54
54
|
|
|
55
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50aHJvcGljLXRoaW5raW5nLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9wcm92aWRlcnMvYW50aHJvcGljL2FudGhyb3BpYy10aGlua2luZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5cbmltcG9ydCB7IHJlc29sdmVBbnRocm9waWNFZmZvcnQgfSBmcm9tIFwiLi4vY29tbW9uL2VmZm9ydFwiO1xuaW1wb3J0IHsgVGhpbmtpbmdWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiLi4vY29tbW9uL3RoaW5raW5nXCI7XG5pbXBvcnQge1xuICBBTlRIUk9QSUNfREVGQVVMVF9FRkZPUlQsXG4gIGNhbm9uaWNhbEFudGhyb3BpY01vZGVsLFxuICB1c2VzQWRhcHRpdmVUaGlua2luZyxcbn0gZnJvbSBcIi4vYW50aHJvcGljLWNvbnN0YW50c1wiO1xuXG5jb25zdCBUSElOS0lOR19PRkZfTU9ERUxTID0gbmV3IFNldChbXG4gIFwiY2xhdWRlLWhhaWt1LTQtNVwiLFxuICBcImNsYXVkZS1zb25uZXQtNC01XCIsXG4gIFwiY2xhdWRlLXNvbm5ldC00LTZcIixcbiAgXCJjbGF1ZGUtc29ubmV0LTVcIixcbiAgXCJjbGF1ZGUtb3B1cy00LTVcIixcbiAgXCJjbGF1ZGUtb3B1cy00LTZcIixcbiAgXCJjbGF1ZGUtb3B1cy00LTdcIixcbiAgXCJjbGF1ZGUtb3B1cy00LThcIixcbiAgXCJjbGF1ZGUtb3B1cy01XCIsXG4gIFwiY2xhdWRlLWhhaWt1LTUtNVwiLFxuICBcImNsYXVkZS1zb25uZXQtNS01XCIsXG5dKTtcblxubGV0IGV4dHJhQm9keVJ1bnRpbWVTdXBwb3J0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbi8qKiBUaGVzZSBtb2RlcyB3ZXJlIHZlcmlmaWVkIHRocm91Z2ggbmF0aXZlIGV4dHJhLWJvZHkgZGVsaXZlcnkgb24gQ2xhdWRlIENvZGUgMi4xLjI5NS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRBbnRocm9waWNUaGlua2luZ1J1bnRpbWUoZXh0cmFCb2R5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgaWYgKCFleHRyYUJvZHkpIHJldHVybjtcblxuICBpZiAoZXh0cmFCb2R5UnVudGltZVN1cHBvcnRlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBleGVjRmlsZVN5bmMoXCJjbGF1ZGVcIiwgW1wiLS12ZXJzaW9uXCJdLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgdGltZW91dDogNTAwMCxcbiAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgICAgICBlbnY6IHsgUEFUSDogcHJvY2Vzcy5lbnYuUEFUSCwgVE1QRElSOiBwcm9jZXNzLmVudi5UTVBESVIgfSxcbiAgICAgIH0pLm1hdGNoKC9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspLyk7XG5cbiAgICAgIGNvbnN0IFttYWpvciwgbWlub3IsIHBhdGNoXSA9IHZlcnNpb24/LnNsaWNlKDEpLm1hcChOdW1iZXIpID8/IFtdO1xuICAgICAgZXh0cmFCb2R5UnVudGltZVN1cHBvcnRlZCA9XG4gICAgICAgIG1ham9yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgbWlub3IgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBwYXRjaCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIChtYWpvciA+IDIgfHwgKG1ham9yID09PSAyICYmIChtaW5vciA+IDEgfHwgKG1pbm9yID09PSAxICYmIHBhdGNoID49IDI5NSkpKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBleHRyYUJvZHlSdW50aW1lU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFleHRyYUJvZHlSdW50aW1lU3VwcG9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IFRoaW5raW5nVmFsaWRhdGlvbkVycm9yKFxuICAgICAgXCJ0aGlua2luZzpmYWxzZSBmb3IgSGFpa3UgNS41IGFuZCBTb25uZXQgNS41IHJlcXVpcmVzIENsYXVkZSBDb2RlIDIuMS4yOTUgb3IgbGF0ZXI7IHJ1bnRpbWUgdmVyc2lvbiBjb3VsZCBub3QgYmUgdmVyaWZpZWRcIixcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQW50aHJvcGljVGhpbmtpbmcobW9kZWw6IHN0cmluZywgdGhpbmtpbmc/OiBib29sZWFuLCBlZmZvcnQ/OiBzdHJpbmcpIHtcbiAgY29uc3QgY2Fub25pY2FsID0gY2Fub25pY2FsQW50aHJvcGljTW9kZWwobW9kZWwpO1xuXG4gIGlmICh0aGlua2luZyA9PT0gZmFsc2UgJiYgIVRISU5LSU5HX09GRl9NT0RFTFMuaGFzKGNhbm9uaWNhbCkpIHtcbiAgICBjb25zdCByZWFzb24gPSB1c2VzQWRhcHRpdmVUaGlua2luZyhjYW5vbmljYWwpXG4gICAgICA/IFwidGhpcyBtb2RlbCByZXF1aXJlcyB0aGlua2luZ1wiXG4gICAgICA6IFwidGhpbmtpbmctb2ZmIHN1cHBvcnQgaGFzIG5vdCBiZWVuIHZlcmlmaWVkIGZvciB0aGlzIG1vZGVsXCI7XG5cbiAgICB0aHJvdyBuZXcgVGhpbmtpbmdWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBgdGhpbmtpbmc6ZmFsc2UgaXMgbm90IHN1cHBvcnRlZCBmb3IgYW50aHJvcGljLyR7Y2Fub25pY2FsfTogJHtyZWFzb259YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBOZXZlciBhY2NlcHQgY2FsbGVyLXByb3ZpZGVkIGV4dHJhIGJvZHkgZGF0YSBvciBpbmhlcml0IGl0IGZyb20gdGhlIGhvc3QgZW52aXJvbm1lbnQuXG4gICAgZXh0cmFCb2R5OlxuICAgICAgdGhpbmtpbmcgPT09IGZhbHNlICYmIChjYW5vbmljYWwgPT09IFwiY2xhdWRlLWhhaWt1LTUtNVwiIHx8IGNhbm9uaWNhbCA9PT0gXCJjbGF1ZGUtc29ubmV0LTUtNVwiKVxuICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHRoaW5raW5nOiB7IHR5cGU6IGNhbm9uaWNhbCA9PT0gXCJjbGF1ZGUtc29ubmV0LTUtNVwiID8gXCJiZXR3ZWVuX3Rvb2xzXCIgOiBcImRpc2FibGVkXCIgfSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICBtb2RlOlxuICAgICAgdGhpbmtpbmcgPT09IHRydWVcbiAgICAgICAgPyAoXCJhZGFwdGl2ZVwiIGFzIGNvbnN0KVxuICAgICAgICA6IHRoaW5raW5nID09PSBmYWxzZSB8fCAhdXNlc0FkYXB0aXZlVGhpbmtpbmcoY2Fub25pY2FsKVxuICAgICAgICAgID8gKFwiZGlzYWJsZWRcIiBhcyBjb25zdClcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICBlZmZvcnQ6XG4gICAgICB0aGlua2luZyA9PT0gZmFsc2VcbiAgICAgICAgPyBBTlRIUk9QSUNfREVGQVVMVF9FRkZPUlRcbiAgICAgICAgOiAocmVzb2x2ZUFudGhyb3BpY0VmZm9ydChlZmZvcnQpID8/IEFOVEhST1BJQ19ERUZBVUxUX0VGRk9SVCksXG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBVUEsTUFBTSxzQ0FBc0IsSUFBSSxJQUFJO0NBQ2xDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDRixDQUFDO0FBRUQsSUFBSTs7QUFHSixTQUFnQiwrQkFBK0IsV0FBcUM7Q0FDbEYsSUFBSSxDQUFDLFdBQVc7Q0FFaEIsSUFBSSw4QkFBOEIsUUFDaEMsSUFBSTtFQVFGLE1BQU0sQ0FBQyxPQUFPLE9BQU8sU0FQTCxhQUFhLFVBQVUsQ0FBQyxXQUFXLEdBQUc7R0FDcEQsVUFBVTtHQUNWLFNBQVM7R0FDVCxPQUFPO0lBQUM7SUFBVTtJQUFRO0dBQU07R0FDaEMsS0FBSztJQUFFLE1BQU0sUUFBUSxJQUFJO0lBQU0sUUFBUSxRQUFRLElBQUk7R0FBTztFQUM1RCxDQUFDLENBQUMsQ0FBQyxNQUFNLHNCQUVxQixDQUFBLEVBQVMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sS0FBSyxDQUFDO0VBQ2hFLDRCQUNFLFVBQVUsVUFDVixVQUFVLFVBQ1YsVUFBVSxXQUNULFFBQVEsS0FBTSxVQUFVLE1BQU0sUUFBUSxLQUFNLFVBQVUsS0FBSyxTQUFTO0NBQ3pFLFFBQVE7RUFDTiw0QkFBNEI7Q0FDOUI7Q0FHRixJQUFJLENBQUMsMkJBQ0gsTUFBTSxJQUFJLHdCQUNSLDBIQUNGO0FBRUo7QUFFQSxTQUFnQix5QkFBeUIsT0FBZSxVQUFvQixRQUFpQjtDQUMzRixNQUFNLFlBQVksd0JBQXdCLEtBQUs7Q0FFL0MsSUFBSSxhQUFhLFNBQVMsQ0FBQyxvQkFBb0IsSUFBSSxTQUFTLEdBSzFELE1BQU0sSUFBSSx3QkFDUixpREFBaUQsVUFBVSxJQUw5QyxxQkFBcUIsU0FBUyxJQUN6QyxpQ0FDQSw2REFJSjtDQUdGLE9BQU87RUFFTCxXQUNFLGFBQWEsVUFBVSxjQUFjLHNCQUFzQixjQUFjLHVCQUNyRSxLQUFLLFVBQVUsRUFDYixVQUFVLEVBQUUsTUFBTSxjQUFjLHNCQUFzQixrQkFBa0IsV0FBVyxFQUNyRixDQUFDLElBQ0Q7RUFDTixNQUNFLGFBQWEsT0FDUixhQUNELGFBQWEsU0FBUyxDQUFDLHFCQUFxQixTQUFTLElBQ2xELGFBQ0Q7RUFDUixRQUNFLGFBQWEsUUFBQSxRQUVSLHVCQUF1QixNQUFNLEtBQUE7Q0FDdEM7QUFDRiJ9
|
|
@@ -155,6 +155,24 @@ function runClaudeSession(req, onDelta) {
|
|
|
155
155
|
return;
|
|
156
156
|
}
|
|
157
157
|
if (systemPromptFile) writeFileSync(systemPromptFile, system);
|
|
158
|
+
const env = {
|
|
159
|
+
PATH: process.env.PATH,
|
|
160
|
+
TMPDIR: process.env.TMPDIR,
|
|
161
|
+
CLAUDE_CODE_OAUTH_TOKEN: req.token,
|
|
162
|
+
CLAUDE_CONFIG_DIR: configDir
|
|
163
|
+
};
|
|
164
|
+
if (thinking.extraBody) env.CLAUDE_CODE_EXTRA_BODY = thinking.extraBody;
|
|
165
|
+
env.CLAUDE_CODE_DISABLE_AUTO_MEMORY = "1";
|
|
166
|
+
Object.assign(env, oneMillionEnv(supportsOneMillion));
|
|
167
|
+
env.CLAUDE_CODE_DISABLE_CLAUDE_MDS = "1";
|
|
168
|
+
env.CLAUDE_CODE_DISABLE_TERMINAL_TITLE = "1";
|
|
169
|
+
env.CLAUDE_CODE_DISABLE_BUNDLED_SKILLS = "1";
|
|
170
|
+
env.CLAUDE_CODE_DISABLE_WORKFLOWS = "1";
|
|
171
|
+
env.CLAUDE_CODE_ATTRIBUTION_HEADER = "0";
|
|
172
|
+
if (shouldPinStructuredRetries({
|
|
173
|
+
useStructured,
|
|
174
|
+
includePartialMessages: req.includePartialMessages
|
|
175
|
+
})) Object.assign(env, structuredOutputRetriesEnv());
|
|
158
176
|
const child = spawn("claude", args, {
|
|
159
177
|
stdio: [
|
|
160
178
|
"pipe",
|
|
@@ -162,24 +180,7 @@ function runClaudeSession(req, onDelta) {
|
|
|
162
180
|
"pipe"
|
|
163
181
|
],
|
|
164
182
|
cwd: ANTHROPIC_CLAUDE_CWD,
|
|
165
|
-
env
|
|
166
|
-
PATH: process.env.PATH,
|
|
167
|
-
TMPDIR: process.env.TMPDIR,
|
|
168
|
-
CLAUDE_CODE_OAUTH_TOKEN: req.token,
|
|
169
|
-
CLAUDE_CONFIG_DIR: configDir,
|
|
170
|
-
...thinking.extraBody ? { CLAUDE_CODE_EXTRA_BODY: thinking.extraBody } : {},
|
|
171
|
-
CLAUDE_CODE_DISABLE_AUTO_MEMORY: "1",
|
|
172
|
-
...oneMillionEnv(supportsOneMillion),
|
|
173
|
-
CLAUDE_CODE_DISABLE_CLAUDE_MDS: "1",
|
|
174
|
-
CLAUDE_CODE_DISABLE_TERMINAL_TITLE: "1",
|
|
175
|
-
CLAUDE_CODE_DISABLE_BUNDLED_SKILLS: "1",
|
|
176
|
-
CLAUDE_CODE_DISABLE_WORKFLOWS: "1",
|
|
177
|
-
CLAUDE_CODE_ATTRIBUTION_HEADER: "0",
|
|
178
|
-
...shouldPinStructuredRetries({
|
|
179
|
-
useStructured,
|
|
180
|
-
includePartialMessages: req.includePartialMessages
|
|
181
|
-
}) ? structuredOutputRetriesEnv() : {}
|
|
182
|
-
}
|
|
183
|
+
env
|
|
183
184
|
});
|
|
184
185
|
let settled = false;
|
|
185
186
|
let buffer = "";
|
|
@@ -271,4 +272,4 @@ function runClaudeSession(req, onDelta) {
|
|
|
271
272
|
//#endregion
|
|
272
273
|
export { SYSTEM_PROMPT_ARGV_MAX_BYTES, applyOneMillionSuffix, buildClaudeArgs, decorateAndSerialize, ensureConfigDir, makeAnthropicWorkerId, oneMillionEnv, runClaudeSession, shouldPinStructuredRetries, structuredOutputRetriesEnv, withSessionLock };
|
|
273
274
|
|
|
274
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhdWRlLXNlc3Npb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvY2xhdWRlLXNlc3Npb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjbGF1ZGUtc2Vzc2lvbiDigJQgQ2xhdWRlIENMSSDshLjshZggc3Bhd24gKyBRZ3JpZFRocmVhZENvb3JkIOunpO2VkSArIHBlci1zZXNzaW9uIOudvS5cbiAqXG4gKiDrqYDti7DthLQ6IOunpCDtmLjstpwgZnJlc2ggYC0tc2Vzc2lvbi1pZCA8dXVpZD5g66GcIOyLpO2Wie2VnOuLpC4g7J6F66Cl7J2AIOyWtOuMke2EsOqwgCDrp4zrk6AgSlNPTkwg7J2EXG4gKiBzdGRpbiDsnLzroZwg7Z2Y66as6rOgKGAtLWlucHV0LWZvcm1hdCBzdHJlYW0tanNvbmApLCDstpzroKXsnYAg7YyM7ISc66GcIOyymOumrO2VnOuLpC5cbiAqXG4gKiDtlbXsi6wg6rOE7JW9OlxuICogIC0gY29vcmQg64qUIOyehOydmCDsoIDsnqXsnbQg7JWE64uI6528IOq4sOyhtCBRZ3JpZFRocmVhZENvb3Jke3dvcmtlcklkLHRocmVhZElkLGVwb2NoLHN5c3RlbUhhc2h9IOyXkFxuICogICAg66ek7ZWR7ZWc64ukLiB0aHJlYWRJZD3shLjshZggdXVpZCwgZXBvY2g9MCDqs6DsoJUod29ya2VyIHJlc3RhcnQg6rCc64WQIOyXhuydjCksIHdvcmtlcklkPXRva2VuIOq4sOuwmFxuICogICAg7JWI7KCVIO2VqeyEsSwgc3lzdGVtSGFzaD3smpTssq0gc3lzdGVtIO2VtOyLnC4gaXNzdWVDb252Q29udGV4dC9kZWNpZGVDb252Um91dGluZyDqs7wgcm91bmQtdHJpcC5cbiAqICAtIHdpdGhTZXNzaW9uTG9jayDsnYAgZXhwb3J0ZWQgcHJpbWl0aXZlIOuhnCDsnKDsp4DtlZzri6QuIOq4sOuzuCDqsr3roZzsl5DshJzripQg66ekIO2YuOy2nCDsg4ggc2Vzc2lvbi1pZCDrnbxcbiAqICAgIOyCrOyLpOyDgSBuby1jb250ZW50aW9uIOydtOyngOunjCwg7KeB7KCRIO2YuOy2nOyekC/thYzsiqTtirjsnZgg7KeB66Cs7ZmUIOuztOyepeydgCDrs7TsobTtlZzri6QuXG4gKiAgLSBzdHJlYW0tanNvbiDsp4HroKztmZQg7IucIFNESyBlbnZlbG9wZSh1dWlkL3Nlc3Npb25faWQvcGFyZW50X3Rvb2xfdXNlX2lkKSBkZWNvcmF0ZS5cbiAqICAtIHN0cnVjdHVyZWQgb3V0cHV0IOydvCDrlYwg7Lac66ClIO2MjOyEnOyXkCB7IHN0cnVjdHVyZWRPdXRwdXQ6IHRydWUgfSDsoITri6wo7JeG7Jy866m0IHN0cmVhbU9iamVjdCDquajsp5ApLlxuICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgbWtkaXJTeW5jLCB1bmxpbmtTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgdHlwZSBKc29uVmFsdWUsIHR5cGUgVG9rZW5Vc2FnZUJyZWFrZG93biwgdHlwZSBVc2VySW5wdXQgfSBmcm9tIFwiLi4vY29tbW9uL3Byb3ZpZGVyLXR5cGVzXCI7XG5pbXBvcnQge1xuICBBUkdWX1NBRkVfTUFYX1VURjhfQllURVMsXG4gIGFzc2VydEFudGhyb3BpY1NjaGVtYUFyZ3ZTaXplLFxufSBmcm9tIFwiLi4vY29tbW9uL3NjaGVtYS12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBjcmVhdGVUdGZ0VHJhY2tlciB9IGZyb20gXCIuLi9jb21tb24vdHRmdFwiO1xuaW1wb3J0IHtcbiAgQU5USFJPUElDX0NMQVVERV9DV0QsXG4gIGFudGhyb3BpY0NvbmZpZ0RpcixcbiAgQU5USFJPUElDX0RJU0FMTE9XRURfVE9PTFMsXG4gIGFzc2VydFN1cHBvcnRlZE9uZU1pbGxpb25TdWZmaXgsXG4gIGNhbm9uaWNhbEFudGhyb3BpY01vZGVsLFxuICBuZWVkc0NsaTFtU3VmZml4LFxuICBzdXBwb3J0czFNQ29udGV4dCxcbn0gZnJvbSBcIi4vYW50aHJvcGljLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgYXNzZXJ0QW50aHJvcGljVGhpbmtpbmdSdW50aW1lLCByZXNvbHZlQW50aHJvcGljVGhpbmtpbmcgfSBmcm9tIFwiLi9hbnRocm9waWMtdGhpbmtpbmdcIjtcbmltcG9ydCB7XG4gIGJ1aWxkU3RyZWFtSnNvbklucHV0LFxuICB0eXBlIENsYXVkZVN0cmVhbUpzb25TdGF0ZSxcbiAgdHlwZSBDbGF1ZGVTdHJlYW1Kc29uTGluZSxcbiAgdHlwZSBDbGF1ZGVTdHJlYW1SZXN1bHQsXG4gIGhhbmRsZVN0cmVhbUpzb25MaW5lLFxufSBmcm9tIFwiLi9zdHJlYW0tanNvbi1hZGFwdGVyXCI7XG5cbi8vIOKUgOKUgCBwZXItc2Vzc2lvbiDrnb0g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8vIHNlc3Npb24taWQg64uo7JyEIOyngeugrO2ZlCBwcmltaXRpdmUuIOq4sOuzuCDqsr3roZzsl5DshJzripQg66ekIO2YuOy2nCDsg4ggdXVpZCDrnbwg7IKs7Iuk7IOBIG5vLW9wIOydtOyngOunjCxcbi8vIOqwmeydgCBzZXNzaW9uLWlkIOulvCDsp4HsoJEg7JOw64qUIO2YuOy2nOyekOuKlCDsl6zsoITtnogg7KeB66Cs7ZmUIOuztOyepeydhCDrsJvripTri6QuXG5jb25zdCBzZXNzaW9uQ2hhaW5zID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+KCk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoU2Vzc2lvbkxvY2s8VD4oc2Vzc2lvbklkOiBzdHJpbmcsIGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHByZXYgPSBzZXNzaW9uQ2hhaW5zLmdldChzZXNzaW9uSWQpID8/IFByb21pc2UucmVzb2x2ZSgpO1xuICAvLyDsnbTsoIQgdHVybiDsnZgg7ISx7Yyo7JmAIOustOq0gO2VmOqyjCDsp4HroKwg7LK07J247J2EIOyeh+uKlOuLpC5cbiAgY29uc3QgbmV4dCA9IHByZXYudGhlbihmbiwgZm4pO1xuICAvLyB0YWlsOiDshLHtjKgg66y06rSAIHNldHRsZSDrkJjripQg7ZW465OkLiDsnbTqsbgg66e17JeQIOuRkOqzoCwgZmluYWxseSDsl5DshJwgXCLsl6zsoITtnogg64K06rCAIOuBnVwi7J28IOuVjOunjCDsgq3soJwuXG4gIC8vIChzZXQg7KeB7ZuEIHVuZGVmaW5lZCDqsoDsgqzroZwg7ZWY66m0IOygiOuMgCDsgq3soJwg7JWIIOuPvCDshLjshZggaWQg6rCAIOuIhOyImOuQqCDigJQgdGFpbCDsnbzsuZgg6rKA7IKs66GcIO2ajO2UvC4pXG4gIGNvbnN0IHRhaWwgPSBuZXh0LnRoZW4oXG4gICAgKCkgPT4ge30sXG4gICAgKCkgPT4ge30sXG4gICk7XG4gIHNlc3Npb25DaGFpbnMuc2V0KHNlc3Npb25JZCwgdGFpbCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG5leHQ7XG4gIH0gZmluYWxseSB7XG4gICAgLy8g6re4IOyCrOydtCDri6TrpbggdHVybiDsnbQg7LK07J247J2EIOydtOyWtOuwm+yVmOycvOuptCB0YWlsIOydtCDqtZDssrTrj7wg7J6I64ukIOKAlCDqt7jrlYzripQg7IKt7KCc7ZWY7KeAIOyViuuKlOuLpC5cbiAgICBpZiAoc2Vzc2lvbkNoYWlucy5nZXQoc2Vzc2lvbklkKSA9PT0gdGFpbCkgc2Vzc2lvbkNoYWlucy5kZWxldGUoc2Vzc2lvbklkKTtcbiAgfVxufVxuXG4vLyDilIDilIAgY29vcmQg66ek7ZWRIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vLyB0b2tlbiDquLDrsJgg7JWI7KCVIHdvcmtlcklkIO2VqeyEsS4gQW50aHJvcGljIOydgCB3b3JrZXIgcG9vbCDsnbQg7JeG7Jy866+A66GcIHRva2VuSWQg66W8IOq3uOuMgOuhnCDsk7Tri6QuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUFudGhyb3BpY1dvcmtlcklkKHRva2VuSWQ6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiB0b2tlbklkO1xufVxuXG4vLyDilIDilIAgZW52ZWxvcGUgZGVjb3JhdGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8vIHN0cmVhbS1qc29uIOyeheugpSDrnbzsnbjsl5AgU0RLIGVudmVsb3BlIOu2gOywqSDtm4Qg7KeB66Cs7ZmULiBzZXNzaW9uIOyGjOycoOyekOyduCDsl6zquLDshJwg7ZWc64ukLlxuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlQW5kU2VyaWFsaXplKFxuICBsaW5lczogQXJyYXk8Q2xhdWRlU3RyZWFtSnNvbkxpbmU+LFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgbGluZXNcbiAgICAgIC5tYXAoKGxpbmUpID0+XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAuLi5saW5lLFxuICAgICAgICAgIHNlc3Npb25faWQ6IHNlc3Npb25JZCxcbiAgICAgICAgICB1dWlkOiByYW5kb21VVUlEKCksXG4gICAgICAgICAgcGFyZW50X3Rvb2xfdXNlX2lkOiBudWxsLFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5qb2luKFwiXFxuXCIpICsgXCJcXG5cIlxuICApO1xufVxuXG4vLyDilIDilIAgc3Bhd24gKyBjb25zdW1lIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIENsYXVkZVNlc3Npb25SZXF1ZXN0IHtcbiAgdG9rZW5JZDogbnVtYmVyO1xuICB0b2tlbjogc3RyaW5nOyAvLyBPQXV0aCBhY2Nlc3MgdG9rZW5cbiAgbW9kZWw6IHN0cmluZztcbiAgc3lzdGVtPzogc3RyaW5nO1xuICBqc29uU2NoZW1hPzogc3RyaW5nOyAvLyDsnojsnLzrqbQgc3RydWN0dXJlZCBvdXRwdXRcbiAgZWZmb3J0Pzogc3RyaW5nO1xuICB0aGlua2luZz86IGJvb2xlYW47XG4gIHRpbWVvdXRNczogbnVtYmVyO1xuICBjb2xkSGlzdG9yeT86IEFycmF5PEpzb25WYWx1ZT47XG4gIGlucHV0OiBBcnJheTxVc2VySW5wdXQ+O1xuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVTZXNzaW9uUmVzdWx0IGV4dGVuZHMgQ2xhdWRlU3RyZWFtUmVzdWx0IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHdvcmtlcklkOiBudW1iZXI7XG4gIHR0ZnRNczogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gcGVyLXRva2VuIENMQVVERV9DT05GSUdfRElSIOuztOyepSjqsqnrpqwpLiDqsr3roZwg6rec7LmZ7J2AIGFudGhyb3BpY0NvbmZpZ0RpcijsiJzsiJgg7ZWo7IiYKeydtCDshozsnKAg4oCUXG4vLyDsl6zquLDshKAg6re4IOqyveuhnOyXkCDruYggc2V0dGluZ3Mg66W8IOq5lOyVhCBjbGF1ZGUtbWVtIGhvb2sg65Ox7J2EIOywqOuLqO2VnOuLpC4gKFIxMCDqsqnrpqwpXG4vLyDsnbQgc2VlZCDtjIzsnbzsnYAgY2xhdWRlLW1lbSBob29rIC8g7IKs7Jqp7J6QIOyEpOyglSDsmKTsl7wg7LCo64uo7J2EIOychO2VnCDqsqnrpqwg6rK96rOE64ukLiDrp6Qg7Zi47Lac66eI64ukIOuLpOyLnCDsjajshJxcbi8vIOyZuOu2gCDrs4DsobDCt+yCreygnCDtm4Tsl5Drj4Qg64uk7J2MIOyLpO2WieyXkOyEnCBzZWxmLWhlYWxpbmcg65CY64+E66GdIOq4sOyhtCBzZW1hbnRpY3Mg66W8IOycoOyngO2VnOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVDb25maWdEaXIodG9rZW5JZDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgZGlyID0gYW50aHJvcGljQ29uZmlnRGlyKHRva2VuSWQpO1xuICBta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhgJHtkaXJ9Ly5jbGF1ZGUuanNvbmAsIFwie31cIik7XG4gIHdyaXRlRmlsZVN5bmMoYCR7ZGlyfS9zZXR0aW5ncy5qc29uYCwgXCJ7fVwiKTtcbiAgcmV0dXJuIGRpcjtcbn1cblxubGV0IGN3ZEVuc3VyZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIGVuc3VyZUN3ZCgpOiB2b2lkIHtcbiAgaWYgKGN3ZEVuc3VyZWQpIHJldHVybjtcbiAgbWtkaXJTeW5jKGAke0FOVEhST1BJQ19DTEFVREVfQ1dEfS8uY2xhdWRlYCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHdyaXRlRmlsZVN5bmMoYCR7QU5USFJPUElDX0NMQVVERV9DV0R9Ly5jbGF1ZGUvc2V0dGluZ3MuanNvbmAsIFwie31cIik7XG4gIGN3ZEVuc3VyZWQgPSB0cnVlO1xufVxuXG4vLyBzcGF3biBhcmdzIOq1rOyEsS4g66mA7Yuw7YS0L+qyqeumrC9zdHJ1Y3R1cmVkIOuqqOuTnCDrsJjsmIEuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlPbmVNaWxsaW9uU3VmZml4KG1vZGVsOiBzdHJpbmcsIG5lZWRzU3VmZml4OiBib29sZWFuKTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IGNhbm9uaWNhbEFudGhyb3BpY01vZGVsKG1vZGVsKTtcbiAgcmV0dXJuIG5lZWRzU3VmZml4ID8gYCR7YmFzZX1bMW1dYCA6IGJhc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbmVNaWxsaW9uRW52KHN1cHBvcnRlZDogYm9vbGVhbik6IHsgQ0xBVURFX0NPREVfRElTQUJMRV8xTV9DT05URVhUPzogXCIxXCIgfSB7XG4gIHJldHVybiBzdXBwb3J0ZWQgPyB7fSA6IHsgQ0xBVURFX0NPREVfRElTQUJMRV8xTV9DT05URVhUOiBcIjFcIiB9O1xufVxuXG4vLyBTT04tNDk1OiBzdHJ1Y3R1cmVkIG91dHB1dCByZXRyeSDrpbwgMSDroZwg6rOg7KCV7ZWc64ukLiBDQyDqsIAgYXR0ZW1wdCDrpbwgcmVqZWN0IO2VmOqzoCByZXRyeSDtlZjrqbRcbi8vIGB7cmVqZWN0ZWR9e2FjY2VwdGVkfWAg64iE7KCB7J20IEFJLVNESyDsnZggSlNPTi5wYXJzZSDrpbwg6rmo65yo66as66+A66GcLCByZXRyeSDsnpDssrTrpbwg66eJ7JWEIOq3uCDqsr3roZzrpbxcbi8vIOybkOyynCDssKjri6jtlZzri6QuIGAwYCDsnYAgQ0MgcXVlcnkgbG9vcChgY2FsbHNUaGlzUXVlcnkgPj0gbWF4UmV0cmllc2Ap6rCAIOyyqyBhdHRlbXB0IGVtaXQg7KCE7JeQXG4vLyDsi6TtjKjsi5ztgqTrr4DroZwoYGVycm9yX21heF9zdHJ1Y3R1cmVkX291dHB1dF9yZXRyaWVzYCkg7Jm467aAIOqwkuydtCAxIOuvuOunjOydtOyWtOuPhCAxIOuhnCDtgbTrnqjtlITtlZzri6QuXG5leHBvcnQgZnVuY3Rpb24gc3RydWN0dXJlZE91dHB1dFJldHJpZXNFbnYocmF3ID0gcHJvY2Vzcy5lbnYuTUFYX1NUUlVDVFVSRURfT1VUUFVUX1JFVFJJRVMpOiB7XG4gIE1BWF9TVFJVQ1RVUkVEX09VVFBVVF9SRVRSSUVTOiBzdHJpbmc7XG59IHtcbiAgaWYgKCFyYXcpIHJldHVybiB7IE1BWF9TVFJVQ1RVUkVEX09VVFBVVF9SRVRSSUVTOiBcIjFcIiB9O1xuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIucGFyc2VJbnQocmF3LCAxMCk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkpIHJldHVybiB7IE1BWF9TVFJVQ1RVUkVEX09VVFBVVF9SRVRSSUVTOiBcIjFcIiB9O1xuICByZXR1cm4geyBNQVhfU1RSVUNUVVJFRF9PVVRQVVRfUkVUUklFUzogU3RyaW5nKE1hdGgubWF4KHBhcnNlZCwgMSkpIH07XG59XG5cbi8vIFNPTi00OTUg7J2YIHJldHJ5IOqzoOygleydgCBcIuyKpO2KuOumrOuwjSArIHN0cnVjdHVyZWRcIiDsobDtlakg7ZWc7KCVIOygleyxheydtOuLpC4g7Iqk7Yq466a87JeQ7IScIHJldHJ5IOqwgCDrj4zrqbRcbi8vIHdhbGwtY2xvY2sg7J20IDLrsLDqsIAg65CY7Ja0IOyLpOyaqeyEseydtCDsl4bquLAg65WM66y47J2064ukKOybkCDqsrDsoJUg7IKs7JygKS4g64W87Iqk7Yq466a8IGdlbmVyYXRlIOuKlCDslaDstIjsl5Ag7JmE66OM66W8XG4vLyDquLDri6Trpqzrr4DroZwg6re4IOyCrOycoOqwgCDshLHrpr3tlZjsp4Ag7JWK64qU64ukLiDrsJjrqbQgQ2xhdWRlIOqzhOyXtOydgCBPcGVuQUkg64yA67mEIHN0cnVjdHVyZWQgb3V0cHV0IOykgOyImOycqOydtFxuLy8g64Ku7JWELCDrhbzsiqTtirjrprzquYzsp4AgcmV0cnk9MSDroZwg66y27Jy866m0IDHtmowgcmVqZWN0IOqwgCDqs6frsJTroZxcbi8vIGBlcnJvcl9tYXhfc3RydWN0dXJlZF9vdXRwdXRfcmV0cmllc2Ag66GcIOyngeqysOuQnOuLpCjsi6TsuKE6IGRldGlfcHJvZHVjdGlvbiBvcHVzLTQtOCDsi6TtjKjsnKggMzkuNiUpLlxuLy8g7Iqk7Yq466as67CNIOyXrOu2gOuKlCBgLS1pbmNsdWRlLXBhcnRpYWwtbWVzc2FnZXNgIOulvCDrtpnsnbTripQgZ2VuZXJhdGVTdHJlYW0g6rK966Gc7JeQ7ISc66eMIHRydWUg6rCAIOuQmOuvgOuhnFxuLy8gKGFudGhyb3BpYy1kaXNwYXRjaGVyIOydmCBnZW5lcmF0ZS9nZW5lcmF0ZVN0cmVhbSDrtoTquLApIOydtOulvCDsi6Tsp4gg6rWs67aE7J6Q66GcIOyTtOuLpC5cbi8vIOu5hOyEseqztSBzdWJ0eXBlIOydhCDtla3sg4EgaXNFcnJvciDroZwg7Jis66as64qUIFNPTi00OTUg7J2YIOuCmOuouOyngCDsoIjrsJjsnYAg6re464yA66GcIOycoOyngOuQnOuLpCDigJQgcmV0cnkg7ZuE7JeQ64+EXG4vLyBkZWdlbmVyYXRlIOy2nOugpeydtOuptCDsobDsmqntnogg7Ya16rO87Iuc7YKk7KeAIOyViuqzoCDsoJXsp4HtlZjqsowg7Iuk7Yyo7ZWc64ukLlxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFBpblN0cnVjdHVyZWRSZXRyaWVzKG9wdHM6IHtcbiAgdXNlU3RydWN0dXJlZDogYm9vbGVhbjtcbiAgaW5jbHVkZVBhcnRpYWxNZXNzYWdlcz86IGJvb2xlYW47XG59KTogYm9vbGVhbiB7XG4gIHJldHVybiBvcHRzLnVzZVN0cnVjdHVyZWQgJiYgb3B0cy5pbmNsdWRlUGFydGlhbE1lc3NhZ2VzID09PSB0cnVlO1xufVxuXG4vLyBMaW51eCDri6jsnbwgYXJndiDsnbjsnpAg7ZWc6rOEKE1BWF9BUkdfU1RSTEVOID0gUEFHRV9TSVpFw5czMiA9IDEyOEtCLCDsu6TrhJAg7ZWY65Oc7L2U65SpIOyDgeyImClcbi8vIOyLnOyKpO2FnCDtlITroaztlITtirjqsIAg7J2066W8IOuEmOycvOuptCBleGVjdmUg6rCAIEUyQklHIOuhnCDqsbDrtoDrkJzri6QuIGRldGkg65OxIOuMgO2YlSDtlITroaztlITtirjripQg7Iuk7LihXG4vLyDtj4nqt6AgMzQzS0LCt+y1nOuMgCA0ODVLQihvcHVzLTQtOCnrnbwg7J287IOB7KCB7Jy866GcIOy0iOqzvO2VnOuLpC4g7ZWc6rOE7J2YIOygiOuwmCg2NEtCKeydhCDsnoTqs4TqsJLsnLzroZwg7J6h7JWEXG4vLyBVVEYtOCDrqYDti7DrsJTsnbTtirjCt+yYiOy4oSDrqrsg7ZWcIOyXrOycoOu2hOq5jOyngCDslYjsoIQg66eI7KeE7J2EIOuRlOuLpC5cbmV4cG9ydCBjb25zdCBTWVNURU1fUFJPTVBUX0FSR1ZfTUFYX0JZVEVTID0gQVJHVl9TQUZFX01BWF9VVEY4X0JZVEVTO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDbGF1ZGVBcmdzKG9wdHM6IHtcbiAgbW9kZWw6IHN0cmluZztcbiAgLy8g7Iuc7Iqk7YWcIO2UhOuhrO2UhO2KuCDsoITri6zsnYAg7YGs6riw66GcIOu2hOq4sO2VnOuLpCjtmLjstpzrtoDqsIAg6rKw7KCVKTpcbiAgLy8gIC0g7J6R7Jy866m0IHN5c3RlbShpbmxpbmUpIOKGkiAtLXN5c3RlbS1wcm9tcHQgPHRleHQ+ICjtjIzsnbwgSS9PIOyXhuydjCwg6riw7KG0IOqyveuhnClcbiAgLy8gIC0g7YGs66m0IHN5c3RlbVByb21wdEZpbGUo6rK966GcKSDihpIgLS1zeXN0ZW0tcHJvbXB0LWZpbGUgPHBhdGg+IChhcmd2IO2VnOqzhCDtmoztlLwpXG4gIC8vIC0tc3lzdGVtLXByb21wdC1maWxlIOydgCAtLXN5c3RlbS1wcm9tcHQg7JmAIOuPmeydvO2VmOqyjCBkZWZhdWx0IOulvCByZXBsYWNlIO2VnOuLpChhcHBlbmQg7JWE64uYIOKAlFxuICAvLyBSNyDqsqnrpqwg67O07KG0LCDsi6TsuKEg7ZmV7J24KS4g65GYIOuLpCDsl4bsnLzrqbQg67mIIC0tc3lzdGVtLXByb21wdChkZWZhdWx0IDIzayDso7zsnoUg67Cp7KeAKS5cbiAgc3lzdGVtPzogc3RyaW5nO1xuICBzeXN0ZW1Qcm9tcHRGaWxlPzogc3RyaW5nO1xuICBlZmZvcnQ/OiBzdHJpbmc7XG4gIHRoaW5raW5nPzogYm9vbGVhbjtcbiAganNvblNjaGVtYT86IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIG5lZWRzT25lTWlsbGlvblN1ZmZpeD86IGJvb2xlYW47XG4gIGluY2x1ZGVQYXJ0aWFsTWVzc2FnZXM/OiBib29sZWFuO1xufSk6IEFycmF5PHN0cmluZz4ge1xuICBjb25zdCB0aGlua2luZyA9IHJlc29sdmVBbnRocm9waWNUaGlua2luZyhvcHRzLm1vZGVsLCBvcHRzLnRoaW5raW5nLCBvcHRzLmVmZm9ydCk7XG4gIGNvbnN0IHVzZVN0cnVjdHVyZWQgPSBCb29sZWFuKG9wdHMuanNvblNjaGVtYSAmJiBvcHRzLmpzb25TY2hlbWEubGVuZ3RoID4gMCk7XG4gIGlmICh1c2VTdHJ1Y3R1cmVkKSBhc3NlcnRBbnRocm9waWNTY2hlbWFBcmd2U2l6ZShvcHRzLmpzb25TY2hlbWEhKTtcbiAgLy8gLS10b29scyBcIlwiIOuhnCDsoITssrQg7LCo64uoLCBzdHJ1Y3R1cmVkKGpzb25TY2hlbWEg7J6I7J2MKSDrqbQgU3RydWN0dXJlZE91dHB1dCDrp4wg7ZeI7JqpLlxuICBjb25zdCB0b29sQXJncyA9IHVzZVN0cnVjdHVyZWRcbiAgICA/IFtcIi0tdG9vbHNcIiwgXCJcIiwgXCItLWFsbG93ZWQtdG9vbHNcIiwgXCJTdHJ1Y3R1cmVkT3V0cHV0XCJdXG4gICAgOiBbXCItLXRvb2xzXCIsIFwiXCJdO1xuXG4gIC8vIOyLnOyKpO2FnCDtlITroaztlITtirg6IO2MjOydvCDqsr3roZzqsIAg7Jik66m0IC0tc3lzdGVtLXByb21wdC1maWxlLCDslYTri4jrqbQgaW5saW5lIC0tc3lzdGVtLXByb21wdC5cbiAgLy8gKO2YuOy2nOu2gOqwgCDtgazquLDroZwg67aE6riw7ZW0IOuRmCDspJEg7ZWY64KY66eMIOyxhOyatOuLpC4g65GYIOuLpCDsl4bsnLzrqbQg67mIIC0tc3lzdGVtLXByb21wdC4pXG4gIGNvbnN0IHN5c3RlbUFyZ3MgPSBvcHRzLnN5c3RlbVByb21wdEZpbGVcbiAgICA/IFtcIi0tc3lzdGVtLXByb21wdC1maWxlXCIsIG9wdHMuc3lzdGVtUHJvbXB0RmlsZV1cbiAgICA6IFtcIi0tc3lzdGVtLXByb21wdFwiLCBvcHRzLnN5c3RlbSA/PyBcIlwiXTtcblxuICBjb25zdCBhcmdzOiBBcnJheTxzdHJpbmc+ID0gW1xuICAgIFwiLXBcIixcbiAgICAuLi50b29sQXJncyxcbiAgICBcIi0tZGlzYWxsb3dlZFRvb2xzXCIsXG4gICAgLi4uQU5USFJPUElDX0RJU0FMTE9XRURfVE9PTFMsXG4gICAgXCItLWlucHV0LWZvcm1hdFwiLFxuICAgIFwic3RyZWFtLWpzb25cIixcbiAgICBcIi0tb3V0cHV0LWZvcm1hdFwiLFxuICAgIFwic3RyZWFtLWpzb25cIixcbiAgICBcIi0tdmVyYm9zZVwiLFxuICAgIC4uLihvcHRzLmluY2x1ZGVQYXJ0aWFsTWVzc2FnZXMgPyBbXCItLWluY2x1ZGUtcGFydGlhbC1tZXNzYWdlc1wiXSA6IFtdKSxcbiAgICBcIi0tcGVybWlzc2lvbi1tb2RlXCIsXG4gICAgXCJieXBhc3NQZXJtaXNzaW9uc1wiLFxuICAgIFwiLS1zZXR0aW5nLXNvdXJjZXNcIixcbiAgICBcInByb2plY3RcIixcbiAgICBcIi0tbW9kZWxcIixcbiAgICBhcHBseU9uZU1pbGxpb25TdWZmaXgob3B0cy5tb2RlbCwgb3B0cy5uZWVkc09uZU1pbGxpb25TdWZmaXggPz8gZmFsc2UpLFxuICAgIC8vIGlubGluZSBbU3lzdGVtXSDquIjsp4Ag4oCUIOygleyLnSDssYTrhJDrp4woUjcpLiDsg53rnrUg7IucIENDIGRlZmF1bHQoMjNrKSDso7zsnoXrkJjrr4DroZwg67CY65Oc7IucIOuqheyLnC5cbiAgICAvLyDtgazquLDsl5Ag65Sw6528IC0tc3lzdGVtLXByb21wdCjsnpHsnYwpIC8gLS1zeXN0ZW0tcHJvbXB0LWZpbGUo7YG8KeuhnCDrtoTquLAoc3lzdGVtQXJncykuXG4gICAgLi4uc3lzdGVtQXJncyxcbiAgICAvLyBPbmUgQ0xJIGNvbnRyb2wgb3ducyB0aGlua2luZzsgbm8gY29tcGV0aW5nIGFkYXB0aXZlL2J1ZGdldCBlbnZpcm9ubWVudCBvdmVycmlkZXMuXG4gICAgLi4uKHRoaW5raW5nLm1vZGUgPyBbXCItLXRoaW5raW5nXCIsIHRoaW5raW5nLm1vZGVdIDogW10pLFxuICAgIFwiLS1lZmZvcnRcIixcbiAgICB0aGlua2luZy5lZmZvcnQsXG4gICAgXCItLWRpc2FibGUtc2xhc2gtY29tbWFuZHNcIixcbiAgICBcIi0tc2Vzc2lvbi1pZFwiLFxuICAgIG9wdHMuc2Vzc2lvbklkLFxuICBdO1xuICBpZiAodXNlU3RydWN0dXJlZCkgYXJncy5wdXNoKFwiLS1qc29uLXNjaGVtYVwiLCBvcHRzLmpzb25TY2hlbWEhKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbi8qKlxuICogQ2xhdWRlIOyEuOyFmOydhCBzcGF3biDtlbQg7ZWcIHR1cm4g7J2EIOyLpO2Wie2VnOuLpC4gcGVyLXNlc3Npb24g65297Jy866GcIOyngeugrO2ZlOuQnOuLpC5cbiAqIEBwYXJhbSBvbkRlbHRhIOygkOynhCDthY3siqTtirggZGVsdGEoc3RyZWFtVGV4dCkg65iQ64qUIHN0cnVjdHVyZWQg67aA67aEIEpTT04oc3RyZWFtT2JqZWN0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNsYXVkZVNlc3Npb24oXG4gIHJlcTogQ2xhdWRlU2Vzc2lvblJlcXVlc3QsXG4gIG9uRGVsdGE6ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQsXG4pOiBQcm9taXNlPENsYXVkZVNlc3Npb25SZXN1bHQ+IHtcbiAgLy8g7KCV6rec7ZmUIOq3nOy5meydgCBjYW5vbmljYWxBbnRocm9waWNNb2RlbCDsnbQg64uo64+FIOyGjOycoCDigJQgZGlzcGF0Y2hlciDqsIAg7J2066+4IGNhbm9uaWNhbCDsnYQg64SY6riw7KeA66eMLFxuICAvLyDsp4HsoJEg7Zi47LacKO2FjOyKpO2KuC/rr7jrnpggY2FsbGVyKSDrjIDruYQg67Cp7Ja07KCB7Jy866GcIO2VnCDrsogg642UIO2GteqzvOyLnO2CqOuLpCjsnbTrr7ggY2Fub25pY2FsIOydtOuptCBuby1vcCkuXG4gIGFzc2VydFN1cHBvcnRlZE9uZU1pbGxpb25TdWZmaXgocmVxLm1vZGVsKTtcbiAgY29uc3QgbW9kZWwgPSBjYW5vbmljYWxBbnRocm9waWNNb2RlbChyZXEubW9kZWwpO1xuICBjb25zdCB0aGlua2luZyA9IHJlc29sdmVBbnRocm9waWNUaGlua2luZyhtb2RlbCwgcmVxLnRoaW5raW5nLCByZXEuZWZmb3J0KTtcbiAgYXNzZXJ0QW50aHJvcGljVGhpbmtpbmdSdW50aW1lKHRoaW5raW5nLmV4dHJhQm9keSk7XG4gIGNvbnN0IHN1cHBvcnRzT25lTWlsbGlvbiA9IHN1cHBvcnRzMU1Db250ZXh0KG1vZGVsKTtcbiAgY29uc3QgbmVlZHNPbmVNaWxsaW9uU3VmZml4ID0gbmVlZHNDbGkxbVN1ZmZpeChtb2RlbCk7XG4gIGNvbnN0IHNlc3Npb25JZCA9IHJhbmRvbVVVSUQoKTtcbiAgY29uc3QgdXNlU3RydWN0dXJlZCA9IEJvb2xlYW4ocmVxLmpzb25TY2hlbWEgJiYgcmVxLmpzb25TY2hlbWEubGVuZ3RoID4gMCk7XG4gIGNvbnN0IHdvcmtlcklkID0gbWFrZUFudGhyb3BpY1dvcmtlcklkKHJlcS50b2tlbklkKTtcblxuICByZXR1cm4gd2l0aFNlc3Npb25Mb2NrKHNlc3Npb25JZCwgKCkgPT4ge1xuICAgIGVuc3VyZUN3ZCgpO1xuICAgIGNvbnN0IGNvbmZpZ0RpciA9IGVuc3VyZUNvbmZpZ0RpcihyZXEudG9rZW5JZCk7XG5cbiAgICAvLyDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq466W8IO2BrOq4sOuhnCDrtoTquLA6IDEyOEtCKGFyZ3Yg7ZWc6rOEKeydmCDsoIjrsJjsnYQg64SY7Jy866m0IO2MjOydvOuhnCDrhJjqsqggRTJCSUcg7ZqM7ZS8LlxuICAgIC8vIOyekeydgCDtlITroaztlITtirjripQg7YyM7J28IEkvTyDsl4bsnbQg6riw7KG0IGlubGluZSDqsr3roZzrpbwg6re464yA66GcIOyTtOuLpCjrjIDrtoDrtoTsnZgg7Zi47LacKS5cbiAgICAvLyDsi6TsoJwg7YyM7J28IOyTsOq4sOuKlCBhYm9ydCDssrTtgawg7J207ZuEKFByb21pc2Ug7JWIKeuhnCDrr7jrpIQsIOydtOuvuCDst6jshozrkJwg7JqU7LKt7JeUIOyTsOyngCDslYrripTri6QuXG4gICAgY29uc3Qgc3lzdGVtID0gcmVxLnN5c3RlbSA/PyBcIlwiO1xuICAgIGNvbnN0IHVzZVN5c3RlbVByb21wdEZpbGUgPSBCdWZmZXIuYnl0ZUxlbmd0aChzeXN0ZW0sIFwidXRmOFwiKSA+IFNZU1RFTV9QUk9NUFRfQVJHVl9NQVhfQllURVM7XG4gICAgY29uc3Qgc3lzdGVtUHJvbXB0RmlsZSA9IHVzZVN5c3RlbVByb21wdEZpbGVcbiAgICAgID8gYCR7Y29uZmlnRGlyfS9zeXN0ZW0tcHJvbXB0LSR7c2Vzc2lvbklkfS50eHRgXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGFyZ3MgPSBidWlsZENsYXVkZUFyZ3Moe1xuICAgICAgbW9kZWwsXG4gICAgICBzeXN0ZW06IHVzZVN5c3RlbVByb21wdEZpbGUgPyB1bmRlZmluZWQgOiByZXEuc3lzdGVtLFxuICAgICAgc3lzdGVtUHJvbXB0RmlsZSxcbiAgICAgIGVmZm9ydDogcmVxLmVmZm9ydCxcbiAgICAgIHRoaW5raW5nOiByZXEudGhpbmtpbmcsXG4gICAgICBqc29uU2NoZW1hOiByZXEuanNvblNjaGVtYSxcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIG5lZWRzT25lTWlsbGlvblN1ZmZpeCxcbiAgICAgIGluY2x1ZGVQYXJ0aWFsTWVzc2FnZXM6IHJlcS5pbmNsdWRlUGFydGlhbE1lc3NhZ2VzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaW5wdXRMaW5lcyA9IGJ1aWxkU3RyZWFtSnNvbklucHV0KHtcbiAgICAgIGNvbGRIaXN0b3J5OiByZXEuY29sZEhpc3RvcnksXG4gICAgICBpbnB1dDogcmVxLmlucHV0LFxuICAgIH0pO1xuICAgIGNvbnN0IHN0ZGluUGF5bG9hZCA9IGRlY29yYXRlQW5kU2VyaWFsaXplKGlucHV0TGluZXMsIHNlc3Npb25JZCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8Q2xhdWRlU2Vzc2lvblJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHJlcS5hYm9ydFNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiYWJvcnRlZFwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8g64yA7ZiVIOyLnOyKpO2FnCDtlITroaztlITtirjripQgc3Bhd24g7KeB7KCE7JeQIO2MjOydvOuhnCDquLDroZ0oYXJndiBFMkJJRyDtmoztlLwpLiDsooXro4wg7IucIOygleumrO2VnOuLpC5cbiAgICAgIGlmIChzeXN0ZW1Qcm9tcHRGaWxlKSB3cml0ZUZpbGVTeW5jKHN5c3RlbVByb21wdEZpbGUsIHN5c3RlbSk7XG5cbiAgICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oXCJjbGF1ZGVcIiwgYXJncywge1xuICAgICAgICAvLyBzdGRlcnIg64+EIOy6oeyymDogaW52YWxpZCBPQXV0aCAvIOyemOuqu+uQnCDtlIzrnpjqt7ggLyBDTEkg6rKA7KadIOyLpO2MqOqwgFxuICAgICAgICAvLyBcImNsb3NlZCB3aXRob3V0IHJlc3VsdFwiIOuhnCDrrYnqsJzsp4Dsp4Ag7JWK6rKMIGNsb3NlL2Vycm9yIOyXkCBzdGRlcnIg66W8IOyLpOyWtCDrs7Trgrjri6QuXG4gICAgICAgIHN0ZGlvOiBbXCJwaXBlXCIsIFwicGlwZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIGN3ZDogQU5USFJPUElDX0NMQVVERV9DV0QsXG4gICAgICAgIGVudjoge1xuICAgICAgICAgIFBBVEg6IHByb2Nlc3MuZW52LlBBVEgsXG4gICAgICAgICAgVE1QRElSOiBwcm9jZXNzLmVudi5UTVBESVIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfT0FVVEhfVE9LRU46IHJlcS50b2tlbixcbiAgICAgICAgICBDTEFVREVfQ09ORklHX0RJUjogY29uZmlnRGlyLFxuICAgICAgICAgIC4uLih0aGlua2luZy5leHRyYUJvZHkgPyB7IENMQVVERV9DT0RFX0VYVFJBX0JPRFk6IHRoaW5raW5nLmV4dHJhQm9keSB9IDoge30pLFxuICAgICAgICAgIENMQVVERV9DT0RFX0RJU0FCTEVfQVVUT19NRU1PUlk6IFwiMVwiLFxuICAgICAgICAgIC4uLm9uZU1pbGxpb25FbnYoc3VwcG9ydHNPbmVNaWxsaW9uKSxcbiAgICAgICAgICBDTEFVREVfQ09ERV9ESVNBQkxFX0NMQVVERV9NRFM6IFwiMVwiLFxuICAgICAgICAgIENMQVVERV9DT0RFX0RJU0FCTEVfVEVSTUlOQUxfVElUTEU6IFwiMVwiLFxuICAgICAgICAgIENMQVVERV9DT0RFX0RJU0FCTEVfQlVORExFRF9TS0lMTFM6IFwiMVwiLFxuICAgICAgICAgIENMQVVERV9DT0RFX0RJU0FCTEVfV09SS0ZMT1dTOiBcIjFcIixcbiAgICAgICAgICBDTEFVREVfQ09ERV9BVFRSSUJVVElPTl9IRUFERVI6IFwiMFwiLFxuICAgICAgICAgIC8vIHN0cnVjdHVyZWQgKyDsiqTtirjrpqzrsI3snbwg65WM66eMIHJldHJ5IOulvCDqs6DsoJXtlZzri6QoU09OLTQ5NSkuIHRleHQg66qo65Oc7JmAIOuFvOyKpO2KuOumvFxuICAgICAgICAgIC8vIGdlbmVyYXRlIOuKlCBDQyDquLDrs7ggcmV0cnkg66W8IOq3uOuMgOuhnCDsk7Tri6QuXG4gICAgICAgICAgLi4uKHNob3VsZFBpblN0cnVjdHVyZWRSZXRyaWVzKHtcbiAgICAgICAgICAgIHVzZVN0cnVjdHVyZWQsXG4gICAgICAgICAgICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzOiByZXEuaW5jbHVkZVBhcnRpYWxNZXNzYWdlcyxcbiAgICAgICAgICB9KVxuICAgICAgICAgICAgPyBzdHJ1Y3R1cmVkT3V0cHV0UmV0cmllc0VudigpXG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgICAgbGV0IGJ1ZmZlciA9IFwiXCI7XG4gICAgICBjb25zdCBzdHJlYW1TdGF0ZTogQ2xhdWRlU3RyZWFtSnNvblN0YXRlID0ge307XG4gICAgICBjb25zdCB0dGZ0VHJhY2tlciA9IGNyZWF0ZVR0ZnRUcmFja2VyKCk7XG4gICAgICBjb25zdCBvblRyYWNrZWREZWx0YSA9IHR0ZnRUcmFja2VyLndyYXBEZWx0YShvbkRlbHRhKTtcbiAgICAgIC8vIGJvdW5kZWQgc3RkZXJyIOuyhO2NvCjstZzqt7wgfjRLQuunjCDsnKDsp4Ag4oCUIOustO2VnCDriITsoIEg67Cp7KeAKS5cbiAgICAgIGxldCBzdGRlcnJCdWYgPSBcIlwiO1xuICAgICAgY29uc3QgU1RERVJSX0NBUCA9IDQwOTY7XG4gICAgICBjaGlsZC5zdGRlcnI/Lm9uKFwiZGF0YVwiLCAoZDogQnVmZmVyKSA9PiB7XG4gICAgICAgIHN0ZGVyckJ1ZiA9IChzdGRlcnJCdWYgKyBkLnRvU3RyaW5nKCkpLnNsaWNlKC1TVERFUlJfQ0FQKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RkZXJyU3VmZml4ID0gKCkgPT4gKHN0ZGVyckJ1Zi50cmltKCkgPyBgIOKAlCBzdGRlcnI6ICR7c3RkZXJyQnVmLnRyaW0oKX1gIDogXCJcIik7XG4gICAgICAvLyBzcGF3biDsi5wg7JO0IOyehOyLnCDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq4IO2MjOydvCDsoJXrpqwo7ZWcIOuyiOunjCkuIOuqqOuToCDsooXro4wg6rK966Gc7JeQ7IScIO2YuOy2nO2VnOuLpC5cbiAgICAgIC8vIOuIhOudveuPvOuPhCDri6TsnYwgZW5zdXJlQ29uZmlnRGlyIOqwgCDrlJTroInthqDrpqzrpbwg7J6s7IKs7Jqp7ZWgIOu/kOydtOyngOunjCwgc2Vzc2lvbklkIOuzhCDtjIzsnbzsnbTrnbxcbiAgICAgIC8vIOyMk+ydtOuptCDrlJTsiqTtgazqsIAg7LCo66+A66GcIHNldHRsZSDsi5wg7KaJ7IucIOyngOyatOuLpC5cbiAgICAgIGNvbnN0IGNsZWFudXBTcGF3bkZpbGVzID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXN5c3RlbVByb21wdEZpbGUpIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB1bmxpbmtTeW5jKHN5c3RlbVByb21wdEZpbGUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyDsnbTrr7gg7JeG6rGw64KYIOq2jO2VnCDrrLjsoJzrqbQg66y07IucIOKAlCDsoJXrpqzripQgYmVzdC1lZmZvcnQuXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsZXQgY2xlYW51cEFib3J0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cEFib3J0Py4oKTtcbiAgICAgICAgY2xlYW51cFNwYXduRmlsZXMoKTtcbiAgICAgICAgY2hpbGQua2lsbCgpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiB0aW1lb3V0IGFmdGVyICR7cmVxLnRpbWVvdXRNcyAvIDEwMDB9c2ApKTtcbiAgICAgIH0sIHJlcS50aW1lb3V0TXMpO1xuXG4gICAgICBjb25zdCBmaW5pc2ggPSAocmVzdWx0OiBDbGF1ZGVTdHJlYW1SZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIGNsZWFudXBBYm9ydD8uKCk7XG4gICAgICAgIGNsZWFudXBTcGF3bkZpbGVzKCk7XG4gICAgICAgIHJlc29sdmUoeyAuLi5yZXN1bHQsIHNlc3Npb25JZCwgd29ya2VySWQsIHR0ZnRNczogdHRmdFRyYWNrZXIudmFsdWUoKSB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICBjaGlsZC5raWxsKCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJhYm9ydGVkXCIpKTtcbiAgICAgIH07XG4gICAgICBjbGVhbnVwQWJvcnQgPSAoKSA9PiByZXEuYWJvcnRTaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgIHJlcS5hYm9ydFNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcblxuICAgICAgY2hpbGQuc3Rkb3V0Py5vbihcImRhdGFcIiwgKGQ6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBidWZmZXIgKz0gZC50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgYnVmZmVyID0gbGluZXMucG9wKCkgPz8gXCJcIjtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlU3RyZWFtSnNvbkxpbmUobGluZSwgb25UcmFja2VkRGVsdGEsIHtcbiAgICAgICAgICAgIHN0cnVjdHVyZWRPdXRwdXQ6IHVzZVN0cnVjdHVyZWQsXG4gICAgICAgICAgICBzdGF0ZTogc3RyZWFtU3RhdGUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgZmluaXNoKHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY2hpbGQub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiBjbG9zZWQgd2l0aG91dCByZXN1bHQke3N0ZGVyclN1ZmZpeCgpfWApKTtcbiAgICAgIH0pO1xuICAgICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiBzcGF3biBlcnJvcjogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gc3RkaW4g7Jy866GcIOyeheugpSBKU09OTCDtnZjrpqzqs6Ag64ur64qU64ukLlxuICAgICAgdHRmdFRyYWNrZXIubWFya1N0YXJ0KCk7XG4gICAgICBjaGlsZC5zdGRpbj8ud3JpdGUoc3RkaW5QYXlsb2FkKTtcbiAgICAgIGNoaWxkLnN0ZGluPy5lbmQoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8vIHVzYWdlIOyerOuFuOy2nCjthYzsiqTtirgg7Y647J2YKS5cbmV4cG9ydCB0eXBlIHsgVG9rZW5Vc2FnZUJyZWFrZG93biB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnREEsTUFBTSxnQ0FBZ0IsSUFBSSxJQUE4QjtBQUV4RCxlQUFzQixnQkFBbUIsV0FBbUIsSUFBa0M7Q0FHNUYsTUFBTSxRQUZPLGNBQWMsSUFBSSxTQUFTLEtBQUssUUFBUSxRQUFR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
|
|
275
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhdWRlLXNlc3Npb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvY2xhdWRlLXNlc3Npb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjbGF1ZGUtc2Vzc2lvbiDigJQgQ2xhdWRlIENMSSDshLjshZggc3Bhd24gKyBRZ3JpZFRocmVhZENvb3JkIOunpO2VkSArIHBlci1zZXNzaW9uIOudvS5cbiAqXG4gKiDrqYDti7DthLQ6IOunpCDtmLjstpwgZnJlc2ggYC0tc2Vzc2lvbi1pZCA8dXVpZD5g66GcIOyLpO2Wie2VnOuLpC4g7J6F66Cl7J2AIOyWtOuMke2EsOqwgCDrp4zrk6AgSlNPTkwg7J2EXG4gKiBzdGRpbiDsnLzroZwg7Z2Y66as6rOgKGAtLWlucHV0LWZvcm1hdCBzdHJlYW0tanNvbmApLCDstpzroKXsnYAg7YyM7ISc66GcIOyymOumrO2VnOuLpC5cbiAqXG4gKiDtlbXsi6wg6rOE7JW9OlxuICogIC0gY29vcmQg64qUIOyehOydmCDsoIDsnqXsnbQg7JWE64uI6528IOq4sOyhtCBRZ3JpZFRocmVhZENvb3Jke3dvcmtlcklkLHRocmVhZElkLGVwb2NoLHN5c3RlbUhhc2h9IOyXkFxuICogICAg66ek7ZWR7ZWc64ukLiB0aHJlYWRJZD3shLjshZggdXVpZCwgZXBvY2g9MCDqs6DsoJUod29ya2VyIHJlc3RhcnQg6rCc64WQIOyXhuydjCksIHdvcmtlcklkPXRva2VuIOq4sOuwmFxuICogICAg7JWI7KCVIO2VqeyEsSwgc3lzdGVtSGFzaD3smpTssq0gc3lzdGVtIO2VtOyLnC4gaXNzdWVDb252Q29udGV4dC9kZWNpZGVDb252Um91dGluZyDqs7wgcm91bmQtdHJpcC5cbiAqICAtIHdpdGhTZXNzaW9uTG9jayDsnYAgZXhwb3J0ZWQgcHJpbWl0aXZlIOuhnCDsnKDsp4DtlZzri6QuIOq4sOuzuCDqsr3roZzsl5DshJzripQg66ekIO2YuOy2nCDsg4ggc2Vzc2lvbi1pZCDrnbxcbiAqICAgIOyCrOyLpOyDgSBuby1jb250ZW50aW9uIOydtOyngOunjCwg7KeB7KCRIO2YuOy2nOyekC/thYzsiqTtirjsnZgg7KeB66Cs7ZmUIOuztOyepeydgCDrs7TsobTtlZzri6QuXG4gKiAgLSBzdHJlYW0tanNvbiDsp4HroKztmZQg7IucIFNESyBlbnZlbG9wZSh1dWlkL3Nlc3Npb25faWQvcGFyZW50X3Rvb2xfdXNlX2lkKSBkZWNvcmF0ZS5cbiAqICAtIHN0cnVjdHVyZWQgb3V0cHV0IOydvCDrlYwg7Lac66ClIO2MjOyEnOyXkCB7IHN0cnVjdHVyZWRPdXRwdXQ6IHRydWUgfSDsoITri6wo7JeG7Jy866m0IHN0cmVhbU9iamVjdCDquajsp5ApLlxuICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgbWtkaXJTeW5jLCB1bmxpbmtTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgdHlwZSBKc29uVmFsdWUsIHR5cGUgVG9rZW5Vc2FnZUJyZWFrZG93biwgdHlwZSBVc2VySW5wdXQgfSBmcm9tIFwiLi4vY29tbW9uL3Byb3ZpZGVyLXR5cGVzXCI7XG5pbXBvcnQge1xuICBBUkdWX1NBRkVfTUFYX1VURjhfQllURVMsXG4gIGFzc2VydEFudGhyb3BpY1NjaGVtYUFyZ3ZTaXplLFxufSBmcm9tIFwiLi4vY29tbW9uL3NjaGVtYS12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBjcmVhdGVUdGZ0VHJhY2tlciB9IGZyb20gXCIuLi9jb21tb24vdHRmdFwiO1xuaW1wb3J0IHtcbiAgQU5USFJPUElDX0NMQVVERV9DV0QsXG4gIGFudGhyb3BpY0NvbmZpZ0RpcixcbiAgQU5USFJPUElDX0RJU0FMTE9XRURfVE9PTFMsXG4gIGFzc2VydFN1cHBvcnRlZE9uZU1pbGxpb25TdWZmaXgsXG4gIGNhbm9uaWNhbEFudGhyb3BpY01vZGVsLFxuICBuZWVkc0NsaTFtU3VmZml4LFxuICBzdXBwb3J0czFNQ29udGV4dCxcbn0gZnJvbSBcIi4vYW50aHJvcGljLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgYXNzZXJ0QW50aHJvcGljVGhpbmtpbmdSdW50aW1lLCByZXNvbHZlQW50aHJvcGljVGhpbmtpbmcgfSBmcm9tIFwiLi9hbnRocm9waWMtdGhpbmtpbmdcIjtcbmltcG9ydCB7XG4gIGJ1aWxkU3RyZWFtSnNvbklucHV0LFxuICB0eXBlIENsYXVkZVN0cmVhbUpzb25TdGF0ZSxcbiAgdHlwZSBDbGF1ZGVTdHJlYW1Kc29uTGluZSxcbiAgdHlwZSBDbGF1ZGVTdHJlYW1SZXN1bHQsXG4gIGhhbmRsZVN0cmVhbUpzb25MaW5lLFxufSBmcm9tIFwiLi9zdHJlYW0tanNvbi1hZGFwdGVyXCI7XG5cbi8vIOKUgOKUgCBwZXItc2Vzc2lvbiDrnb0g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8vIHNlc3Npb24taWQg64uo7JyEIOyngeugrO2ZlCBwcmltaXRpdmUuIOq4sOuzuCDqsr3roZzsl5DshJzripQg66ekIO2YuOy2nCDsg4ggdXVpZCDrnbwg7IKs7Iuk7IOBIG5vLW9wIOydtOyngOunjCxcbi8vIOqwmeydgCBzZXNzaW9uLWlkIOulvCDsp4HsoJEg7JOw64qUIO2YuOy2nOyekOuKlCDsl6zsoITtnogg7KeB66Cs7ZmUIOuztOyepeydhCDrsJvripTri6QuXG5jb25zdCBzZXNzaW9uQ2hhaW5zID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+KCk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoU2Vzc2lvbkxvY2s8VD4oc2Vzc2lvbklkOiBzdHJpbmcsIGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHByZXYgPSBzZXNzaW9uQ2hhaW5zLmdldChzZXNzaW9uSWQpID8/IFByb21pc2UucmVzb2x2ZSgpO1xuICAvLyDsnbTsoIQgdHVybiDsnZgg7ISx7Yyo7JmAIOustOq0gO2VmOqyjCDsp4HroKwg7LK07J247J2EIOyeh+uKlOuLpC5cbiAgY29uc3QgbmV4dCA9IHByZXYudGhlbihmbiwgZm4pO1xuXG4gIC8vIHRhaWw6IOyEse2MqCDrrLTqtIAgc2V0dGxlIOuQmOuKlCDtlbjrk6QuIOydtOqxuCDrp7Xsl5Ag65GQ6rOgLCBmaW5hbGx5IOyXkOyEnCBcIuyXrOyghO2eiCDrgrTqsIAg64GdXCLsnbwg65WM66eMIOyCreygnC5cbiAgLy8gKHNldCDsp4Htm4QgdW5kZWZpbmVkIOqygOyCrOuhnCDtlZjrqbQg7KCI64yAIOyCreygnCDslYgg64+8IOyEuOyFmCBpZCDqsIAg64iE7IiY65CoIOKAlCB0YWlsIOydvOy5mCDqsoDsgqzroZwg7ZqM7ZS8LilcbiAgY29uc3QgdGFpbCA9IG5leHQudGhlbihcbiAgICAoKSA9PiB7fSxcbiAgICAoKSA9PiB7fSxcbiAgKTtcblxuICBzZXNzaW9uQ2hhaW5zLnNldChzZXNzaW9uSWQsIHRhaWwpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG5leHQ7XG4gIH0gZmluYWxseSB7XG4gICAgLy8g6re4IOyCrOydtCDri6TrpbggdHVybiDsnbQg7LK07J247J2EIOydtOyWtOuwm+yVmOycvOuptCB0YWlsIOydtCDqtZDssrTrj7wg7J6I64ukIOKAlCDqt7jrlYzripQg7IKt7KCc7ZWY7KeAIOyViuuKlOuLpC5cbiAgICBpZiAoc2Vzc2lvbkNoYWlucy5nZXQoc2Vzc2lvbklkKSA9PT0gdGFpbCkgc2Vzc2lvbkNoYWlucy5kZWxldGUoc2Vzc2lvbklkKTtcbiAgfVxufVxuXG4vLyDilIDilIAgY29vcmQg66ek7ZWRIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vLyB0b2tlbiDquLDrsJgg7JWI7KCVIHdvcmtlcklkIO2VqeyEsS4gQW50aHJvcGljIOydgCB3b3JrZXIgcG9vbCDsnbQg7JeG7Jy866+A66GcIHRva2VuSWQg66W8IOq3uOuMgOuhnCDsk7Tri6QuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUFudGhyb3BpY1dvcmtlcklkKHRva2VuSWQ6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiB0b2tlbklkO1xufVxuXG4vLyDilIDilIAgZW52ZWxvcGUgZGVjb3JhdGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8vIHN0cmVhbS1qc29uIOyeheugpSDrnbzsnbjsl5AgU0RLIGVudmVsb3BlIOu2gOywqSDtm4Qg7KeB66Cs7ZmULiBzZXNzaW9uIOyGjOycoOyekOyduCDsl6zquLDshJwg7ZWc64ukLlxuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlQW5kU2VyaWFsaXplKFxuICBsaW5lczogQXJyYXk8Q2xhdWRlU3RyZWFtSnNvbkxpbmU+LFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgbGluZXNcbiAgICAgIC5tYXAoKGxpbmUpID0+XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAuLi5saW5lLFxuICAgICAgICAgIHNlc3Npb25faWQ6IHNlc3Npb25JZCxcbiAgICAgICAgICB1dWlkOiByYW5kb21VVUlEKCksXG4gICAgICAgICAgcGFyZW50X3Rvb2xfdXNlX2lkOiBudWxsLFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5qb2luKFwiXFxuXCIpICsgXCJcXG5cIlxuICApO1xufVxuXG4vLyDilIDilIAgc3Bhd24gKyBjb25zdW1lIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIENsYXVkZVNlc3Npb25SZXF1ZXN0IHtcbiAgdG9rZW5JZDogbnVtYmVyO1xuICB0b2tlbjogc3RyaW5nOyAvLyBPQXV0aCBhY2Nlc3MgdG9rZW5cbiAgbW9kZWw6IHN0cmluZztcbiAgc3lzdGVtPzogc3RyaW5nO1xuICBqc29uU2NoZW1hPzogc3RyaW5nOyAvLyDsnojsnLzrqbQgc3RydWN0dXJlZCBvdXRwdXRcbiAgZWZmb3J0Pzogc3RyaW5nO1xuICB0aGlua2luZz86IGJvb2xlYW47XG4gIHRpbWVvdXRNczogbnVtYmVyO1xuICBjb2xkSGlzdG9yeT86IEFycmF5PEpzb25WYWx1ZT47XG4gIGlucHV0OiBBcnJheTxVc2VySW5wdXQ+O1xuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVTZXNzaW9uUmVzdWx0IGV4dGVuZHMgQ2xhdWRlU3RyZWFtUmVzdWx0IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHdvcmtlcklkOiBudW1iZXI7XG4gIHR0ZnRNczogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gcGVyLXRva2VuIENMQVVERV9DT05GSUdfRElSIOuztOyepSjqsqnrpqwpLiDqsr3roZwg6rec7LmZ7J2AIGFudGhyb3BpY0NvbmZpZ0RpcijsiJzsiJgg7ZWo7IiYKeydtCDshozsnKAg4oCUXG4vLyDsl6zquLDshKAg6re4IOqyveuhnOyXkCDruYggc2V0dGluZ3Mg66W8IOq5lOyVhCBjbGF1ZGUtbWVtIGhvb2sg65Ox7J2EIOywqOuLqO2VnOuLpC4gKFIxMCDqsqnrpqwpXG4vLyDsnbQgc2VlZCDtjIzsnbzsnYAgY2xhdWRlLW1lbSBob29rIC8g7IKs7Jqp7J6QIOyEpOyglSDsmKTsl7wg7LCo64uo7J2EIOychO2VnCDqsqnrpqwg6rK96rOE64ukLiDrp6Qg7Zi47Lac66eI64ukIOuLpOyLnCDsjajshJxcbi8vIOyZuOu2gCDrs4DsobDCt+yCreygnCDtm4Tsl5Drj4Qg64uk7J2MIOyLpO2WieyXkOyEnCBzZWxmLWhlYWxpbmcg65CY64+E66GdIOq4sOyhtCBzZW1hbnRpY3Mg66W8IOycoOyngO2VnOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVDb25maWdEaXIodG9rZW5JZDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgZGlyID0gYW50aHJvcGljQ29uZmlnRGlyKHRva2VuSWQpO1xuICBta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhgJHtkaXJ9Ly5jbGF1ZGUuanNvbmAsIFwie31cIik7XG4gIHdyaXRlRmlsZVN5bmMoYCR7ZGlyfS9zZXR0aW5ncy5qc29uYCwgXCJ7fVwiKTtcblxuICByZXR1cm4gZGlyO1xufVxuXG5sZXQgY3dkRW5zdXJlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBlbnN1cmVDd2QoKTogdm9pZCB7XG4gIGlmIChjd2RFbnN1cmVkKSByZXR1cm47XG4gIG1rZGlyU3luYyhgJHtBTlRIUk9QSUNfQ0xBVURFX0NXRH0vLmNsYXVkZWAsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB3cml0ZUZpbGVTeW5jKGAke0FOVEhST1BJQ19DTEFVREVfQ1dEfS8uY2xhdWRlL3NldHRpbmdzLmpzb25gLCBcInt9XCIpO1xuICBjd2RFbnN1cmVkID0gdHJ1ZTtcbn1cblxuLy8gc3Bhd24gYXJncyDqtazshLEuIOupgO2LsO2EtC/qsqnrpqwvc3RydWN0dXJlZCDrqqjrk5wg67CY7JiBLlxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5T25lTWlsbGlvblN1ZmZpeChtb2RlbDogc3RyaW5nLCBuZWVkc1N1ZmZpeDogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IGJhc2UgPSBjYW5vbmljYWxBbnRocm9waWNNb2RlbChtb2RlbCk7XG5cbiAgcmV0dXJuIG5lZWRzU3VmZml4ID8gYCR7YmFzZX1bMW1dYCA6IGJhc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbmVNaWxsaW9uRW52KHN1cHBvcnRlZDogYm9vbGVhbik6IHsgQ0xBVURFX0NPREVfRElTQUJMRV8xTV9DT05URVhUPzogXCIxXCIgfSB7XG4gIHJldHVybiBzdXBwb3J0ZWQgPyB7fSA6IHsgQ0xBVURFX0NPREVfRElTQUJMRV8xTV9DT05URVhUOiBcIjFcIiB9O1xufVxuXG4vLyBTT04tNDk1OiBzdHJ1Y3R1cmVkIG91dHB1dCByZXRyeSDrpbwgMSDroZwg6rOg7KCV7ZWc64ukLiBDQyDqsIAgYXR0ZW1wdCDrpbwgcmVqZWN0IO2VmOqzoCByZXRyeSDtlZjrqbRcbi8vIGB7cmVqZWN0ZWR9e2FjY2VwdGVkfWAg64iE7KCB7J20IEFJLVNESyDsnZggSlNPTi5wYXJzZSDrpbwg6rmo65yo66as66+A66GcLCByZXRyeSDsnpDssrTrpbwg66eJ7JWEIOq3uCDqsr3roZzrpbxcbi8vIOybkOyynCDssKjri6jtlZzri6QuIGAwYCDsnYAgQ0MgcXVlcnkgbG9vcChgY2FsbHNUaGlzUXVlcnkgPj0gbWF4UmV0cmllc2Ap6rCAIOyyqyBhdHRlbXB0IGVtaXQg7KCE7JeQXG4vLyDsi6TtjKjsi5ztgqTrr4DroZwoYGVycm9yX21heF9zdHJ1Y3R1cmVkX291dHB1dF9yZXRyaWVzYCkg7Jm467aAIOqwkuydtCAxIOuvuOunjOydtOyWtOuPhCAxIOuhnCDtgbTrnqjtlITtlZzri6QuXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZWRPdXRwdXRSZXRyaWVzRW52IHtcbiAgTUFYX1NUUlVDVFVSRURfT1VUUFVUX1JFVFJJRVM6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cnVjdHVyZWRPdXRwdXRSZXRyaWVzRW52KFxuICByYXcgPSBwcm9jZXNzLmVudi5NQVhfU1RSVUNUVVJFRF9PVVRQVVRfUkVUUklFUyxcbik6IFN0cnVjdHVyZWRPdXRwdXRSZXRyaWVzRW52IHtcbiAgaWYgKCFyYXcpIHJldHVybiB7IE1BWF9TVFJVQ1RVUkVEX09VVFBVVF9SRVRSSUVTOiBcIjFcIiB9O1xuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIucGFyc2VJbnQocmF3LCAxMCk7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSkgcmV0dXJuIHsgTUFYX1NUUlVDVFVSRURfT1VUUFVUX1JFVFJJRVM6IFwiMVwiIH07XG5cbiAgcmV0dXJuIHsgTUFYX1NUUlVDVFVSRURfT1VUUFVUX1JFVFJJRVM6IFN0cmluZyhNYXRoLm1heChwYXJzZWQsIDEpKSB9O1xufVxuXG4vLyBTT04tNDk1IOydmCByZXRyeSDqs6DsoJXsnYAgXCLsiqTtirjrpqzrsI0gKyBzdHJ1Y3R1cmVkXCIg7KGw7ZWpIO2VnOyglSDsoJXssYXsnbTri6QuIOyKpO2KuOumvOyXkOyEnCByZXRyeSDqsIAg64+M66m0XG4vLyB3YWxsLWNsb2NrIOydtCAy67Cw6rCAIOuQmOyWtCDsi6TsmqnshLHsnbQg7JeG6riwIOuVjOusuOydtOuLpCjsm5Ag6rKw7KCVIOyCrOycoCkuIOuFvOyKpO2KuOumvCBnZW5lcmF0ZSDripQg7JWg7LSI7JeQIOyZhOujjOulvFxuLy8g6riw64uk66as66+A66GcIOq3uCDsgqzsnKDqsIAg7ISx66a97ZWY7KeAIOyViuuKlOuLpC4g67CY66m0IENsYXVkZSDqs4Tsl7TsnYAgT3BlbkFJIOuMgOu5hCBzdHJ1Y3R1cmVkIG91dHB1dCDspIDsiJjsnKjsnbRcbi8vIOuCruyVhCwg64W87Iqk7Yq466a86rmM7KeAIHJldHJ5PTEg66GcIOustuycvOuptCAx7ZqMIHJlamVjdCDqsIAg6rOn67CU66GcXG4vLyBgZXJyb3JfbWF4X3N0cnVjdHVyZWRfb3V0cHV0X3JldHJpZXNgIOuhnCDsp4HqsrDrkJzri6Qo7Iuk7LihOiBkZXRpX3Byb2R1Y3Rpb24gb3B1cy00LTgg7Iuk7Yyo7JyoIDM5LjYlKS5cbi8vIOyKpO2KuOumrOuwjSDsl6zrtoDripQgYC0taW5jbHVkZS1wYXJ0aWFsLW1lc3NhZ2VzYCDrpbwg67aZ7J2064qUIGdlbmVyYXRlU3RyZWFtIOqyveuhnOyXkOyEnOunjCB0cnVlIOqwgCDrkJjrr4DroZxcbi8vIChhbnRocm9waWMtZGlzcGF0Y2hlciDsnZggZ2VuZXJhdGUvZ2VuZXJhdGVTdHJlYW0g67aE6riwKSDsnbTrpbwg7Iuk7KeIIOq1rOu2hOyekOuhnCDsk7Tri6QuXG4vLyDruYTshLHqs7Ugc3VidHlwZSDsnYQg7ZWt7IOBIGlzRXJyb3Ig66GcIOyYrOumrOuKlCBTT04tNDk1IOydmCDrgpjrqLjsp4Ag7KCI67CY7J2AIOq3uOuMgOuhnCDsnKDsp4DrkJzri6Qg4oCUIHJldHJ5IO2bhOyXkOuPhFxuLy8gZGVnZW5lcmF0ZSDstpzroKXsnbTrqbQg7KGw7Jqp7Z6IIO2GteqzvOyLnO2CpOyngCDslYrqs6Ag7KCV7KeB7ZWY6rKMIOyLpO2MqO2VnOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRQaW5TdHJ1Y3R1cmVkUmV0cmllcyhvcHRzOiB7XG4gIHVzZVN0cnVjdHVyZWQ6IGJvb2xlYW47XG4gIGluY2x1ZGVQYXJ0aWFsTWVzc2FnZXM/OiBib29sZWFuO1xufSk6IGJvb2xlYW4ge1xuICByZXR1cm4gb3B0cy51c2VTdHJ1Y3R1cmVkICYmIG9wdHMuaW5jbHVkZVBhcnRpYWxNZXNzYWdlcyA9PT0gdHJ1ZTtcbn1cblxuLy8gTGludXgg64uo7J28IGFyZ3Yg7J247J6QIO2VnOqzhChNQVhfQVJHX1NUUkxFTiA9IFBBR0VfU0laRcOXMzIgPSAxMjhLQiwg7Luk64SQIO2VmOuTnOy9lOuUqSDsg4HsiJgpXG4vLyDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq46rCAIOydtOulvCDrhJjsnLzrqbQgZXhlY3ZlIOqwgCBFMkJJRyDroZwg6rGw67aA65Cc64ukLiBkZXRpIOuTsSDrjIDtmJUg7ZSE66Gs7ZSE7Yq464qUIOyLpOy4oVxuLy8g7Y+J6regIDM0M0tCwrfstZzrjIAgNDg1S0Iob3B1cy00LTgp6528IOydvOyDgeyggeycvOuhnCDstIjqs7ztlZzri6QuIO2VnOqzhOydmCDsoIjrsJgoNjRLQinsnYQg7J6E6rOE6rCS7Jy866GcIOyeoeyVhFxuLy8gVVRGLTgg66mA7Yuw67CU7J207Yq4wrfsmIjsuKEg66q7IO2VnCDsl6zsnKDrtoTquYzsp4Ag7JWI7KCEIOuniOynhOydhCDrkZTri6QuXG5leHBvcnQgY29uc3QgU1lTVEVNX1BST01QVF9BUkdWX01BWF9CWVRFUyA9IEFSR1ZfU0FGRV9NQVhfVVRGOF9CWVRFUztcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ2xhdWRlQXJncyhvcHRzOiB7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIC8vIOyLnOyKpO2FnCDtlITroaztlITtirgg7KCE64us7J2AIO2BrOq4sOuhnCDrtoTquLDtlZzri6Qo7Zi47Lac67aA6rCAIOqysOyglSk6XG4gIC8vICAtIOyekeycvOuptCBzeXN0ZW0oaW5saW5lKSDihpIgLS1zeXN0ZW0tcHJvbXB0IDx0ZXh0PiAo7YyM7J28IEkvTyDsl4bsnYwsIOq4sOyhtCDqsr3roZwpXG4gIC8vICAtIO2BrOuptCBzeXN0ZW1Qcm9tcHRGaWxlKOqyveuhnCkg4oaSIC0tc3lzdGVtLXByb21wdC1maWxlIDxwYXRoPiAoYXJndiDtlZzqs4Qg7ZqM7ZS8KVxuICAvLyAtLXN5c3RlbS1wcm9tcHQtZmlsZSDsnYAgLS1zeXN0ZW0tcHJvbXB0IOyZgCDrj5nsnbztlZjqsowgZGVmYXVsdCDrpbwgcmVwbGFjZSDtlZzri6QoYXBwZW5kIOyVhOuLmCDigJRcbiAgLy8gUjcg6rKp66asIOuztOyhtCwg7Iuk7LihIO2ZleyduCkuIOuRmCDri6Qg7JeG7Jy866m0IOu5iCAtLXN5c3RlbS1wcm9tcHQoZGVmYXVsdCAyM2sg7KO87J6FIOuwqeyngCkuXG4gIHN5c3RlbT86IHN0cmluZztcbiAgc3lzdGVtUHJvbXB0RmlsZT86IHN0cmluZztcbiAgZWZmb3J0Pzogc3RyaW5nO1xuICB0aGlua2luZz86IGJvb2xlYW47XG4gIGpzb25TY2hlbWE/OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBuZWVkc09uZU1pbGxpb25TdWZmaXg/OiBib29sZWFuO1xuICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzPzogYm9vbGVhbjtcbn0pOiBBcnJheTxzdHJpbmc+IHtcbiAgY29uc3QgdGhpbmtpbmcgPSByZXNvbHZlQW50aHJvcGljVGhpbmtpbmcob3B0cy5tb2RlbCwgb3B0cy50aGlua2luZywgb3B0cy5lZmZvcnQpO1xuICBjb25zdCB1c2VTdHJ1Y3R1cmVkID0gQm9vbGVhbihvcHRzLmpzb25TY2hlbWEgJiYgb3B0cy5qc29uU2NoZW1hLmxlbmd0aCA+IDApO1xuXG4gIGlmICh1c2VTdHJ1Y3R1cmVkKSBhc3NlcnRBbnRocm9waWNTY2hlbWFBcmd2U2l6ZShvcHRzLmpzb25TY2hlbWEhKTtcblxuICAvLyAtLXRvb2xzIFwiXCIg66GcIOyghOyytCDssKjri6gsIHN0cnVjdHVyZWQoanNvblNjaGVtYSDsnojsnYwpIOuptCBTdHJ1Y3R1cmVkT3V0cHV0IOunjCDtl4jsmqkuXG4gIGNvbnN0IHRvb2xBcmdzID0gdXNlU3RydWN0dXJlZFxuICAgID8gW1wiLS10b29sc1wiLCBcIlwiLCBcIi0tYWxsb3dlZC10b29sc1wiLCBcIlN0cnVjdHVyZWRPdXRwdXRcIl1cbiAgICA6IFtcIi0tdG9vbHNcIiwgXCJcIl07XG5cbiAgLy8g7Iuc7Iqk7YWcIO2UhOuhrO2UhO2KuDog7YyM7J28IOqyveuhnOqwgCDsmKTrqbQgLS1zeXN0ZW0tcHJvbXB0LWZpbGUsIOyVhOuLiOuptCBpbmxpbmUgLS1zeXN0ZW0tcHJvbXB0LlxuICAvLyAo7Zi47Lac67aA6rCAIO2BrOq4sOuhnCDrtoTquLDtlbQg65GYIOykkSDtlZjrgpjrp4wg7LGE7Jq064ukLiDrkZgg64ukIOyXhuycvOuptCDruYggLS1zeXN0ZW0tcHJvbXB0LilcbiAgY29uc3Qgc3lzdGVtQXJncyA9IG9wdHMuc3lzdGVtUHJvbXB0RmlsZVxuICAgID8gW1wiLS1zeXN0ZW0tcHJvbXB0LWZpbGVcIiwgb3B0cy5zeXN0ZW1Qcm9tcHRGaWxlXVxuICAgIDogW1wiLS1zeXN0ZW0tcHJvbXB0XCIsIG9wdHMuc3lzdGVtID8/IFwiXCJdO1xuXG4gIGNvbnN0IGFyZ3M6IEFycmF5PHN0cmluZz4gPSBbXG4gICAgXCItcFwiLFxuICAgIC4uLnRvb2xBcmdzLFxuICAgIFwiLS1kaXNhbGxvd2VkVG9vbHNcIixcbiAgICAuLi5BTlRIUk9QSUNfRElTQUxMT1dFRF9UT09MUyxcbiAgICBcIi0taW5wdXQtZm9ybWF0XCIsXG4gICAgXCJzdHJlYW0tanNvblwiLFxuICAgIFwiLS1vdXRwdXQtZm9ybWF0XCIsXG4gICAgXCJzdHJlYW0tanNvblwiLFxuICAgIFwiLS12ZXJib3NlXCIsXG4gICAgLi4uKG9wdHMuaW5jbHVkZVBhcnRpYWxNZXNzYWdlcyA/IFtcIi0taW5jbHVkZS1wYXJ0aWFsLW1lc3NhZ2VzXCJdIDogW10pLFxuICAgIFwiLS1wZXJtaXNzaW9uLW1vZGVcIixcbiAgICBcImJ5cGFzc1Blcm1pc3Npb25zXCIsXG4gICAgXCItLXNldHRpbmctc291cmNlc1wiLFxuICAgIFwicHJvamVjdFwiLFxuICAgIFwiLS1tb2RlbFwiLFxuICAgIGFwcGx5T25lTWlsbGlvblN1ZmZpeChvcHRzLm1vZGVsLCBvcHRzLm5lZWRzT25lTWlsbGlvblN1ZmZpeCA/PyBmYWxzZSksXG4gICAgLy8gaW5saW5lIFtTeXN0ZW1dIOq4iOyngCDigJQg7KCV7IudIOyxhOuEkOunjChSNykuIOyDneuetSDsi5wgQ0MgZGVmYXVsdCgyM2spIOyjvOyeheuQmOuvgOuhnCDrsJjrk5zsi5wg66qF7IucLlxuICAgIC8vIO2BrOq4sOyXkCDrlLDrnbwgLS1zeXN0ZW0tcHJvbXB0KOyekeydjCkgLyAtLXN5c3RlbS1wcm9tcHQtZmlsZSjtgbwp66GcIOu2hOq4sChzeXN0ZW1BcmdzKS5cbiAgICAuLi5zeXN0ZW1BcmdzLFxuICAgIC8vIE9uZSBDTEkgY29udHJvbCBvd25zIHRoaW5raW5nOyBubyBjb21wZXRpbmcgYWRhcHRpdmUvYnVkZ2V0IGVudmlyb25tZW50IG92ZXJyaWRlcy5cbiAgICAuLi4odGhpbmtpbmcubW9kZSA/IFtcIi0tdGhpbmtpbmdcIiwgdGhpbmtpbmcubW9kZV0gOiBbXSksXG4gICAgXCItLWVmZm9ydFwiLFxuICAgIHRoaW5raW5nLmVmZm9ydCxcbiAgICBcIi0tZGlzYWJsZS1zbGFzaC1jb21tYW5kc1wiLFxuICAgIFwiLS1zZXNzaW9uLWlkXCIsXG4gICAgb3B0cy5zZXNzaW9uSWQsXG4gIF07XG5cbiAgaWYgKHVzZVN0cnVjdHVyZWQpIGFyZ3MucHVzaChcIi0tanNvbi1zY2hlbWFcIiwgb3B0cy5qc29uU2NoZW1hISk7XG5cbiAgcmV0dXJuIGFyZ3M7XG59XG5cbi8qKlxuICogQ2xhdWRlIOyEuOyFmOydhCBzcGF3biDtlbQg7ZWcIHR1cm4g7J2EIOyLpO2Wie2VnOuLpC4gcGVyLXNlc3Npb24g65297Jy866GcIOyngeugrO2ZlOuQnOuLpC5cbiAqIEBwYXJhbSBvbkRlbHRhIOygkOynhCDthY3siqTtirggZGVsdGEoc3RyZWFtVGV4dCkg65iQ64qUIHN0cnVjdHVyZWQg67aA67aEIEpTT04oc3RyZWFtT2JqZWN0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNsYXVkZVNlc3Npb24oXG4gIHJlcTogQ2xhdWRlU2Vzc2lvblJlcXVlc3QsXG4gIG9uRGVsdGE6ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQsXG4pOiBQcm9taXNlPENsYXVkZVNlc3Npb25SZXN1bHQ+IHtcbiAgLy8g7KCV6rec7ZmUIOq3nOy5meydgCBjYW5vbmljYWxBbnRocm9waWNNb2RlbCDsnbQg64uo64+FIOyGjOycoCDigJQgZGlzcGF0Y2hlciDqsIAg7J2066+4IGNhbm9uaWNhbCDsnYQg64SY6riw7KeA66eMLFxuICAvLyDsp4HsoJEg7Zi47LacKO2FjOyKpO2KuC/rr7jrnpggY2FsbGVyKSDrjIDruYQg67Cp7Ja07KCB7Jy866GcIO2VnCDrsogg642UIO2GteqzvOyLnO2CqOuLpCjsnbTrr7ggY2Fub25pY2FsIOydtOuptCBuby1vcCkuXG4gIGFzc2VydFN1cHBvcnRlZE9uZU1pbGxpb25TdWZmaXgocmVxLm1vZGVsKTtcbiAgY29uc3QgbW9kZWwgPSBjYW5vbmljYWxBbnRocm9waWNNb2RlbChyZXEubW9kZWwpO1xuICBjb25zdCB0aGlua2luZyA9IHJlc29sdmVBbnRocm9waWNUaGlua2luZyhtb2RlbCwgcmVxLnRoaW5raW5nLCByZXEuZWZmb3J0KTtcbiAgYXNzZXJ0QW50aHJvcGljVGhpbmtpbmdSdW50aW1lKHRoaW5raW5nLmV4dHJhQm9keSk7XG4gIGNvbnN0IHN1cHBvcnRzT25lTWlsbGlvbiA9IHN1cHBvcnRzMU1Db250ZXh0KG1vZGVsKTtcbiAgY29uc3QgbmVlZHNPbmVNaWxsaW9uU3VmZml4ID0gbmVlZHNDbGkxbVN1ZmZpeChtb2RlbCk7XG4gIGNvbnN0IHNlc3Npb25JZCA9IHJhbmRvbVVVSUQoKTtcbiAgY29uc3QgdXNlU3RydWN0dXJlZCA9IEJvb2xlYW4ocmVxLmpzb25TY2hlbWEgJiYgcmVxLmpzb25TY2hlbWEubGVuZ3RoID4gMCk7XG4gIGNvbnN0IHdvcmtlcklkID0gbWFrZUFudGhyb3BpY1dvcmtlcklkKHJlcS50b2tlbklkKTtcblxuICByZXR1cm4gd2l0aFNlc3Npb25Mb2NrKHNlc3Npb25JZCwgKCkgPT4ge1xuICAgIGVuc3VyZUN3ZCgpO1xuICAgIGNvbnN0IGNvbmZpZ0RpciA9IGVuc3VyZUNvbmZpZ0RpcihyZXEudG9rZW5JZCk7XG5cbiAgICAvLyDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq466W8IO2BrOq4sOuhnCDrtoTquLA6IDEyOEtCKGFyZ3Yg7ZWc6rOEKeydmCDsoIjrsJjsnYQg64SY7Jy866m0IO2MjOydvOuhnCDrhJjqsqggRTJCSUcg7ZqM7ZS8LlxuICAgIC8vIOyekeydgCDtlITroaztlITtirjripQg7YyM7J28IEkvTyDsl4bsnbQg6riw7KG0IGlubGluZSDqsr3roZzrpbwg6re464yA66GcIOyTtOuLpCjrjIDrtoDrtoTsnZgg7Zi47LacKS5cbiAgICAvLyDsi6TsoJwg7YyM7J28IOyTsOq4sOuKlCBhYm9ydCDssrTtgawg7J207ZuEKFByb21pc2Ug7JWIKeuhnCDrr7jrpIQsIOydtOuvuCDst6jshozrkJwg7JqU7LKt7JeUIOyTsOyngCDslYrripTri6QuXG4gICAgY29uc3Qgc3lzdGVtID0gcmVxLnN5c3RlbSA/PyBcIlwiO1xuICAgIGNvbnN0IHVzZVN5c3RlbVByb21wdEZpbGUgPSBCdWZmZXIuYnl0ZUxlbmd0aChzeXN0ZW0sIFwidXRmOFwiKSA+IFNZU1RFTV9QUk9NUFRfQVJHVl9NQVhfQllURVM7XG5cbiAgICBjb25zdCBzeXN0ZW1Qcm9tcHRGaWxlID0gdXNlU3lzdGVtUHJvbXB0RmlsZVxuICAgICAgPyBgJHtjb25maWdEaXJ9L3N5c3RlbS1wcm9tcHQtJHtzZXNzaW9uSWR9LnR4dGBcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgYXJncyA9IGJ1aWxkQ2xhdWRlQXJncyh7XG4gICAgICBtb2RlbCxcbiAgICAgIHN5c3RlbTogdXNlU3lzdGVtUHJvbXB0RmlsZSA/IHVuZGVmaW5lZCA6IHJlcS5zeXN0ZW0sXG4gICAgICBzeXN0ZW1Qcm9tcHRGaWxlLFxuICAgICAgZWZmb3J0OiByZXEuZWZmb3J0LFxuICAgICAgdGhpbmtpbmc6IHJlcS50aGlua2luZyxcbiAgICAgIGpzb25TY2hlbWE6IHJlcS5qc29uU2NoZW1hLFxuICAgICAgc2Vzc2lvbklkLFxuICAgICAgbmVlZHNPbmVNaWxsaW9uU3VmZml4LFxuICAgICAgaW5jbHVkZVBhcnRpYWxNZXNzYWdlczogcmVxLmluY2x1ZGVQYXJ0aWFsTWVzc2FnZXMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnB1dExpbmVzID0gYnVpbGRTdHJlYW1Kc29uSW5wdXQoe1xuICAgICAgY29sZEhpc3Rvcnk6IHJlcS5jb2xkSGlzdG9yeSxcbiAgICAgIGlucHV0OiByZXEuaW5wdXQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdGRpblBheWxvYWQgPSBkZWNvcmF0ZUFuZFNlcmlhbGl6ZShpbnB1dExpbmVzLCBzZXNzaW9uSWQpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPENsYXVkZVNlc3Npb25SZXN1bHQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXEuYWJvcnRTaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcImFib3J0ZWRcIikpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8g64yA7ZiVIOyLnOyKpO2FnCDtlITroaztlITtirjripQgc3Bhd24g7KeB7KCE7JeQIO2MjOydvOuhnCDquLDroZ0oYXJndiBFMkJJRyDtmoztlLwpLiDsooXro4wg7IucIOygleumrO2VnOuLpC5cbiAgICAgIGlmIChzeXN0ZW1Qcm9tcHRGaWxlKSB3cml0ZUZpbGVTeW5jKHN5c3RlbVByb21wdEZpbGUsIHN5c3RlbSk7XG5cbiAgICAgIGNvbnN0IGVudjogTm9kZUpTLlByb2Nlc3NFbnYgPSB7XG4gICAgICAgIFBBVEg6IHByb2Nlc3MuZW52LlBBVEgsXG4gICAgICAgIFRNUERJUjogcHJvY2Vzcy5lbnYuVE1QRElSLFxuICAgICAgICBDTEFVREVfQ09ERV9PQVVUSF9UT0tFTjogcmVxLnRva2VuLFxuICAgICAgICBDTEFVREVfQ09ORklHX0RJUjogY29uZmlnRGlyLFxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaW5raW5nLmV4dHJhQm9keSkgZW52LkNMQVVERV9DT0RFX0VYVFJBX0JPRFkgPSB0aGlua2luZy5leHRyYUJvZHk7XG5cbiAgICAgIGVudi5DTEFVREVfQ09ERV9ESVNBQkxFX0FVVE9fTUVNT1JZID0gXCIxXCI7XG4gICAgICBPYmplY3QuYXNzaWduKGVudiwgb25lTWlsbGlvbkVudihzdXBwb3J0c09uZU1pbGxpb24pKTtcbiAgICAgIGVudi5DTEFVREVfQ09ERV9ESVNBQkxFX0NMQVVERV9NRFMgPSBcIjFcIjtcbiAgICAgIGVudi5DTEFVREVfQ09ERV9ESVNBQkxFX1RFUk1JTkFMX1RJVExFID0gXCIxXCI7XG4gICAgICBlbnYuQ0xBVURFX0NPREVfRElTQUJMRV9CVU5ETEVEX1NLSUxMUyA9IFwiMVwiO1xuICAgICAgZW52LkNMQVVERV9DT0RFX0RJU0FCTEVfV09SS0ZMT1dTID0gXCIxXCI7XG4gICAgICBlbnYuQ0xBVURFX0NPREVfQVRUUklCVVRJT05fSEVBREVSID0gXCIwXCI7XG5cbiAgICAgIC8vIHN0cnVjdHVyZWQgKyDsiqTtirjrpqzrsI3snbwg65WM66eMIHJldHJ5IOulvCDqs6DsoJXtlZzri6QoU09OLTQ5NSkuIHRleHQg66qo65Oc7JmAIOuFvOyKpO2KuOumvFxuICAgICAgLy8gZ2VuZXJhdGUg64qUIENDIOq4sOuzuCByZXRyeSDrpbwg6re464yA66GcIOyTtOuLpC5cbiAgICAgIGlmIChcbiAgICAgICAgc2hvdWxkUGluU3RydWN0dXJlZFJldHJpZXMoe1xuICAgICAgICAgIHVzZVN0cnVjdHVyZWQsXG4gICAgICAgICAgaW5jbHVkZVBhcnRpYWxNZXNzYWdlczogcmVxLmluY2x1ZGVQYXJ0aWFsTWVzc2FnZXMsXG4gICAgICAgIH0pXG4gICAgICApIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihlbnYsIHN0cnVjdHVyZWRPdXRwdXRSZXRyaWVzRW52KCkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGlsZCA9IHNwYXduKFwiY2xhdWRlXCIsIGFyZ3MsIHtcbiAgICAgICAgLy8gc3RkZXJyIOuPhCDsuqHsspg6IGludmFsaWQgT0F1dGggLyDsnpjrqrvrkJwg7ZSM656Y6re4IC8gQ0xJIOqygOymnSDsi6TtjKjqsIBcbiAgICAgICAgLy8gXCJjbG9zZWQgd2l0aG91dCByZXN1bHRcIiDroZwg662J6rCc7KeA7KeAIOyViuqyjCBjbG9zZS9lcnJvciDsl5Agc3RkZXJyIOulvCDsi6TslrQg67O064K464ukLlxuICAgICAgICBzdGRpbzogW1wicGlwZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgICAgICBjd2Q6IEFOVEhST1BJQ19DTEFVREVfQ1dELFxuICAgICAgICBlbnYsXG4gICAgICB9KTtcblxuICAgICAgbGV0IHNldHRsZWQgPSBmYWxzZTtcbiAgICAgIGxldCBidWZmZXIgPSBcIlwiO1xuICAgICAgY29uc3Qgc3RyZWFtU3RhdGU6IENsYXVkZVN0cmVhbUpzb25TdGF0ZSA9IHt9O1xuICAgICAgY29uc3QgdHRmdFRyYWNrZXIgPSBjcmVhdGVUdGZ0VHJhY2tlcigpO1xuICAgICAgY29uc3Qgb25UcmFja2VkRGVsdGEgPSB0dGZ0VHJhY2tlci53cmFwRGVsdGEob25EZWx0YSk7XG4gICAgICAvLyBib3VuZGVkIHN0ZGVyciDrsoTtjbwo7LWc6re8IH40S0Lrp4wg7Jyg7KeAIOKAlCDrrLTtlZwg64iE7KCBIOuwqeyngCkuXG4gICAgICBsZXQgc3RkZXJyQnVmID0gXCJcIjtcbiAgICAgIGNvbnN0IFNUREVSUl9DQVAgPSA0MDk2O1xuICAgICAgY2hpbGQuc3RkZXJyPy5vbihcImRhdGFcIiwgKGQ6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBzdGRlcnJCdWYgPSAoc3RkZXJyQnVmICsgZC50b1N0cmluZygpKS5zbGljZSgtU1RERVJSX0NBUCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0ZGVyclN1ZmZpeCA9ICgpID0+IChzdGRlcnJCdWYudHJpbSgpID8gYCDigJQgc3RkZXJyOiAke3N0ZGVyckJ1Zi50cmltKCl9YCA6IFwiXCIpO1xuXG4gICAgICAvLyBzcGF3biDsi5wg7JO0IOyehOyLnCDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq4IO2MjOydvCDsoJXrpqwo7ZWcIOuyiOunjCkuIOuqqOuToCDsooXro4wg6rK966Gc7JeQ7IScIO2YuOy2nO2VnOuLpC5cbiAgICAgIC8vIOuIhOudveuPvOuPhCDri6TsnYwgZW5zdXJlQ29uZmlnRGlyIOqwgCDrlJTroInthqDrpqzrpbwg7J6s7IKs7Jqp7ZWgIOu/kOydtOyngOunjCwgc2Vzc2lvbklkIOuzhCDtjIzsnbzsnbTrnbxcbiAgICAgIC8vIOyMk+ydtOuptCDrlJTsiqTtgazqsIAg7LCo66+A66GcIHNldHRsZSDsi5wg7KaJ7IucIOyngOyatOuLpC5cbiAgICAgIGNvbnN0IGNsZWFudXBTcGF3bkZpbGVzID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXN5c3RlbVByb21wdEZpbGUpIHJldHVybjtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHVubGlua1N5bmMoc3lzdGVtUHJvbXB0RmlsZSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIOydtOuvuCDsl4bqsbDrgpgg6raM7ZWcIOusuOygnOuptCDrrLTsi5wg4oCUIOygleumrOuKlCBiZXN0LWVmZm9ydC5cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgbGV0IGNsZWFudXBBYm9ydDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cEFib3J0Py4oKTtcbiAgICAgICAgY2xlYW51cFNwYXduRmlsZXMoKTtcbiAgICAgICAgY2hpbGQua2lsbCgpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiB0aW1lb3V0IGFmdGVyICR7cmVxLnRpbWVvdXRNcyAvIDEwMDB9c2ApKTtcbiAgICAgIH0sIHJlcS50aW1lb3V0TXMpO1xuXG4gICAgICBjb25zdCBmaW5pc2ggPSAocmVzdWx0OiBDbGF1ZGVTdHJlYW1SZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIGNsZWFudXBBYm9ydD8uKCk7XG4gICAgICAgIGNsZWFudXBTcGF3bkZpbGVzKCk7XG4gICAgICAgIHJlc29sdmUoeyAuLi5yZXN1bHQsIHNlc3Npb25JZCwgd29ya2VySWQsIHR0ZnRNczogdHRmdFRyYWNrZXIudmFsdWUoKSB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICBjaGlsZC5raWxsKCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJhYm9ydGVkXCIpKTtcbiAgICAgIH07XG5cbiAgICAgIGNsZWFudXBBYm9ydCA9ICgpID0+IHJlcS5hYm9ydFNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgcmVxLmFib3J0U2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuXG4gICAgICBjaGlsZC5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCAoZDogQnVmZmVyKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIGJ1ZmZlciArPSBkLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSA/PyBcIlwiO1xuXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGhhbmRsZVN0cmVhbUpzb25MaW5lKGxpbmUsIG9uVHJhY2tlZERlbHRhLCB7XG4gICAgICAgICAgICBzdHJ1Y3R1cmVkT3V0cHV0OiB1c2VTdHJ1Y3R1cmVkLFxuICAgICAgICAgICAgc3RhdGU6IHN0cmVhbVN0YXRlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgZmluaXNoKHJlc3VsdCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjaGlsZC5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIGNsZWFudXBBYm9ydD8uKCk7XG4gICAgICAgIGNsZWFudXBTcGF3bkZpbGVzKCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYENsYXVkZSBzZXNzaW9uIGNsb3NlZCB3aXRob3V0IHJlc3VsdCR7c3RkZXJyU3VmZml4KCl9YCkpO1xuICAgICAgfSk7XG4gICAgICBjaGlsZC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIGNsZWFudXBBYm9ydD8uKCk7XG4gICAgICAgIGNsZWFudXBTcGF3bkZpbGVzKCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYENsYXVkZSBzZXNzaW9uIHNwYXduIGVycm9yOiAke2Vyci5tZXNzYWdlfWApKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBzdGRpbiDsnLzroZwg7J6F66ClIEpTT05MIO2dmOumrOqzoCDri6vripTri6QuXG4gICAgICB0dGZ0VHJhY2tlci5tYXJrU3RhcnQoKTtcbiAgICAgIGNoaWxkLnN0ZGluPy53cml0ZShzdGRpblBheWxvYWQpO1xuICAgICAgY2hpbGQuc3RkaW4/LmVuZCgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLy8gdXNhZ2Ug7J6s64W47LacKO2FjOyKpO2KuCDtjrjsnZgpLlxuZXhw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
|
|
@@ -80,4 +80,4 @@ function trailingHoldLength(unemitted) {
|
|
|
80
80
|
//#endregion
|
|
81
81
|
export { createFenceStripTransform, stripFences };
|
|
82
82
|
|
|
83
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVuY2Utc3RyaXAuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvZmVuY2Utc3RyaXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDsvZTrk5ztjpzsiqQg7Iqk7Yq466as7ZWRIChTT04tNTMyKS5cbiAqXG4gKiBhbnRocm9waWMg7J2AIOyKpO2CpOuniC9lbnZlbG9wZSDqs4Tslb3snYQg7ZSE66Gs7ZSE7Yq466GcIOyViOuCtO2VmOuvgOuhnCDsnZHri7XsnYAg7Y+J67KU7ZWcIO2FjeyKpO2KuOuLpC5cbiAqIHNvbm5ldCDqs4Tsl7TsnbQg7KeA7Iuc7JeQ64+EIOu2iOq1rO2VmOqzoCBgYGBqc29uIO2OnOyKpOulvCDrtpnsnbTripQg7Iuk7Lih7J20IOyeiOyWtCwg7ISc67KE6rCAIO2OnOyKpOyZgFxuICog7JaR64GdIOqzteuwseunjCDrspfqsqgg7IaM67mE7J6QKHpvZCkvcGFyc2VFbnZlbG9wZS9FbnZlbG9wZVN0cmVhbVBhcnNlciDsl5Ag7Iic7IiYIEpTT04g7J2EXG4gKiDrhJjquLTri6QuIOuouOumrOunkMK37ZuE66+4IO2UhOuhnOymiCDqtazsoJzripQg7ZWY7KeAIOyViuuKlOuLpCDigJQg6rSA7JqpIOuzteq1rOuKlCAyMDI2LTA3IG1lZHBhdGggMTMuNWtcbiAqIOyYpOyXvCDsgqzqs6DroZwg6riw6rCB65CcIOybkOy5meydtOupsCwg7ZSE66Gc7KaIIOydkeuLteydgCDri6TsnYwg7Li17JeQ7IScIOygleynge2VmOqyjCDsi6TtjKjtlZzri6QuXG4gKlxuICogYHN0cmlwRmVuY2VzYCDripQgc3RyZWFtLWpzb24tYWRhcHRlciDsnZggc3RyaXBDb2RlRmVuY2Uo67mE7Iqk7Yq466a8IHJlc3VsdCDqsr3roZwp7JeQ7IScXG4gKiDstpTstpztlZwg64+Z7J28IOyLnOunqO2LseydtOuLpCDigJQg7Iqk7Yq466a8IOuNuO2DgCDsl7DqsrDqs7wg67mE7Iqk7Yq466a8IOy1nOyihSDthY3siqTtirjqsIAg6rCZ7J2AIOqysOqzvOyXrOyVvFxuICog7YG065287J207Ja47Yq46rCAIOyWtOuKkCDsqr3snYQg7KGw66a97ZW064+EIOyWtOq4i+uCmOyngCDslYrripTri6QuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwRmVuY2VzKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzXG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9eYGBgKD86anNvbik/XFxzKlxcbj8vaSwgXCJcIilcbiAgICAucmVwbGFjZSgvXFxuP2BgYFxccyokL2ksIFwiXCIpO1xufVxuXG5pbnRlcmZhY2UgRmVuY2VTdHJpcFRyYW5zZm9ybSB7XG4gIC8qKiBkZWx0YSDrpbwg64Sj6rOgIOyngOq4iCDrsKnstpztlbTrj4Qg7JWI7KCE7ZWcIOyhsOqwgeydhCDrj4zroKTrsJvripTri6QuICovXG4gIHB1c2goZGVsdGE6IHN0cmluZyk6IHN0cmluZztcbiAgLyoqIOyKpO2KuOumvCDsooXro4wuIOuztOulmOu2hCDspJEg7Y6c7Iqkwrd0cmFpbGluZyDqs7XrsLHsnbQg7JWE64uMIOyelOyXrOulvCDrj4zroKTspIDri6QuICovXG4gIGZsdXNoKCk6IHN0cmluZztcbn1cblxuLyoqXG4gKiDrjbjtg4Ag7Iqk7Yq466a87JqpIO2GteqzvCDtlYTthLAuIOu2iOuzgOyLnTog7J6E7J2YIOygiOuLqCDsp4DsoJDsl5Ag64yA7ZW0XG4gKiBgcHVzaCguLi4pIOuTpOydmCDsl7DqsrAgKyBmbHVzaCgpID09IHN0cmlwRmVuY2VzKOyghOyytCDthY3siqTtirgpYC5cbiAqXG4gKiB0YWlsIO2ZgOuTnOuwseydgCDqs6DsoJUg7YGs6riw6rCAIOyVhOuLiOudvCDqs4Tslb0g6riw67CY7J2064ukIOKAlCBcIuqzteuwscK36rCc7ZaJwrfrsLHti7Hrp4zsnLzroZwg7J2066Oo7Ja07KeEXG4gKiBzdWZmaXhcIijri6vripQg7Y6c7IqkIO2bhOuztCnrpbwg7Iqk7Yq466a8IOyZhOujjOq5jOyngCDrs7TrpZjtlZjqs6AsIO2bhOuztOulvCDquajripQg64K07Jqp7J20IOyYpOuptCDsponsi5xcbiAqIOuwqey2nOydhCDsnqzqsJztlZzri6QuIOuLq+uKlCDtjpzsiqQg7JWeIOqzteuwseydgCDsnoTsnZgg6ri47J207J28IOyImCDsnojslrQg6rOg7KCVIO2BrOq4sOuhnOuKlCBcIuyWkeuBnSDqs7XrsLFcbiAqIOygnOqxsFwiIOu2iOuzgOyLneydtCDshLHrpr3tlZjsp4Ag7JWK64qU64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmVuY2VTdHJpcFRyYW5zZm9ybSgpOiBGZW5jZVN0cmlwVHJhbnNmb3JtIHtcbiAgbGV0IGZ1bGwgPSBcIlwiO1xuICAvLyBmdWxsIOyXkOyEnCDrs7jrrLgobGVhZGluZyB0cmltICsg7Jes64qUIO2OnOyKpCDsnbTtm4Qp7J20IOyLnOyeke2VmOuKlCDsnbjrjbHsiqQuIC0xID0g7JWE7KeBIOuvuO2ZleyglS5cbiAgbGV0IGJvZHlTdGFydCA9IC0xO1xuICAvLyDrs7jrrLgg6riw7KSA7Jy866GcIOydtOuvuCDrsKnstpztlZwg66y47J6QIOyImC4g67Cp7Lac67aE7J2AIOy1nOyihSDqsrDqs7zsnZggcHJlZml4IOyehOydtCDrs7TsnqXrkJzri6Qg4oCUXG4gIC8vIOqzteuwseydgCDruYTqs7XrsLEg64K07Jqp7J20IOuSpOuUsOultOq4sCDsoITquYzsp4Ag7ZWt7IOBIOuztOulmOuQmOuvgOuhnCwg64KY7KSR7JeQIOuLq+uKlCDtjpzsiqTsnZgg7J2867aA66GcXG4gIC8vIO2MkOuqheuQoCDrrLjsnpDqsIAg66+
|
|
83
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVuY2Utc3RyaXAuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvZmVuY2Utc3RyaXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDsvZTrk5ztjpzsiqQg7Iqk7Yq466as7ZWRIChTT04tNTMyKS5cbiAqXG4gKiBhbnRocm9waWMg7J2AIOyKpO2CpOuniC9lbnZlbG9wZSDqs4Tslb3snYQg7ZSE66Gs7ZSE7Yq466GcIOyViOuCtO2VmOuvgOuhnCDsnZHri7XsnYAg7Y+J67KU7ZWcIO2FjeyKpO2KuOuLpC5cbiAqIHNvbm5ldCDqs4Tsl7TsnbQg7KeA7Iuc7JeQ64+EIOu2iOq1rO2VmOqzoCBgYGBqc29uIO2OnOyKpOulvCDrtpnsnbTripQg7Iuk7Lih7J20IOyeiOyWtCwg7ISc67KE6rCAIO2OnOyKpOyZgFxuICog7JaR64GdIOqzteuwseunjCDrspfqsqgg7IaM67mE7J6QKHpvZCkvcGFyc2VFbnZlbG9wZS9FbnZlbG9wZVN0cmVhbVBhcnNlciDsl5Ag7Iic7IiYIEpTT04g7J2EXG4gKiDrhJjquLTri6QuIOuouOumrOunkMK37ZuE66+4IO2UhOuhnOymiCDqtazsoJzripQg7ZWY7KeAIOyViuuKlOuLpCDigJQg6rSA7JqpIOuzteq1rOuKlCAyMDI2LTA3IG1lZHBhdGggMTMuNWtcbiAqIOyYpOyXvCDsgqzqs6DroZwg6riw6rCB65CcIOybkOy5meydtOupsCwg7ZSE66Gc7KaIIOydkeuLteydgCDri6TsnYwg7Li17JeQ7IScIOygleynge2VmOqyjCDsi6TtjKjtlZzri6QuXG4gKlxuICogYHN0cmlwRmVuY2VzYCDripQgc3RyZWFtLWpzb24tYWRhcHRlciDsnZggc3RyaXBDb2RlRmVuY2Uo67mE7Iqk7Yq466a8IHJlc3VsdCDqsr3roZwp7JeQ7IScXG4gKiDstpTstpztlZwg64+Z7J28IOyLnOunqO2LseydtOuLpCDigJQg7Iqk7Yq466a8IOuNuO2DgCDsl7DqsrDqs7wg67mE7Iqk7Yq466a8IOy1nOyihSDthY3siqTtirjqsIAg6rCZ7J2AIOqysOqzvOyXrOyVvFxuICog7YG065287J207Ja47Yq46rCAIOyWtOuKkCDsqr3snYQg7KGw66a97ZW064+EIOyWtOq4i+uCmOyngCDslYrripTri6QuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwRmVuY2VzKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzXG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9eYGBgKD86anNvbik/XFxzKlxcbj8vaSwgXCJcIilcbiAgICAucmVwbGFjZSgvXFxuP2BgYFxccyokL2ksIFwiXCIpO1xufVxuXG5pbnRlcmZhY2UgRmVuY2VTdHJpcFRyYW5zZm9ybSB7XG4gIC8qKiBkZWx0YSDrpbwg64Sj6rOgIOyngOq4iCDrsKnstpztlbTrj4Qg7JWI7KCE7ZWcIOyhsOqwgeydhCDrj4zroKTrsJvripTri6QuICovXG4gIHB1c2goZGVsdGE6IHN0cmluZyk6IHN0cmluZztcbiAgLyoqIOyKpO2KuOumvCDsooXro4wuIOuztOulmOu2hCDspJEg7Y6c7Iqkwrd0cmFpbGluZyDqs7XrsLHsnbQg7JWE64uMIOyelOyXrOulvCDrj4zroKTspIDri6QuICovXG4gIGZsdXNoKCk6IHN0cmluZztcbn1cblxuLyoqXG4gKiDrjbjtg4Ag7Iqk7Yq466a87JqpIO2GteqzvCDtlYTthLAuIOu2iOuzgOyLnTog7J6E7J2YIOygiOuLqCDsp4DsoJDsl5Ag64yA7ZW0XG4gKiBgcHVzaCguLi4pIOuTpOydmCDsl7DqsrAgKyBmbHVzaCgpID09IHN0cmlwRmVuY2VzKOyghOyytCDthY3siqTtirgpYC5cbiAqXG4gKiB0YWlsIO2ZgOuTnOuwseydgCDqs6DsoJUg7YGs6riw6rCAIOyVhOuLiOudvCDqs4Tslb0g6riw67CY7J2064ukIOKAlCBcIuqzteuwscK36rCc7ZaJwrfrsLHti7Hrp4zsnLzroZwg7J2066Oo7Ja07KeEXG4gKiBzdWZmaXhcIijri6vripQg7Y6c7IqkIO2bhOuztCnrpbwg7Iqk7Yq466a8IOyZhOujjOq5jOyngCDrs7TrpZjtlZjqs6AsIO2bhOuztOulvCDquajripQg64K07Jqp7J20IOyYpOuptCDsponsi5xcbiAqIOuwqey2nOydhCDsnqzqsJztlZzri6QuIOuLq+uKlCDtjpzsiqQg7JWeIOqzteuwseydgCDsnoTsnZgg6ri47J207J28IOyImCDsnojslrQg6rOg7KCVIO2BrOq4sOuhnOuKlCBcIuyWkeuBnSDqs7XrsLFcbiAqIOygnOqxsFwiIOu2iOuzgOyLneydtCDshLHrpr3tlZjsp4Ag7JWK64qU64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmVuY2VTdHJpcFRyYW5zZm9ybSgpOiBGZW5jZVN0cmlwVHJhbnNmb3JtIHtcbiAgbGV0IGZ1bGwgPSBcIlwiO1xuICAvLyBmdWxsIOyXkOyEnCDrs7jrrLgobGVhZGluZyB0cmltICsg7Jes64qUIO2OnOyKpCDsnbTtm4Qp7J20IOyLnOyeke2VmOuKlCDsnbjrjbHsiqQuIC0xID0g7JWE7KeBIOuvuO2ZleyglS5cbiAgbGV0IGJvZHlTdGFydCA9IC0xO1xuICAvLyDrs7jrrLgg6riw7KSA7Jy866GcIOydtOuvuCDrsKnstpztlZwg66y47J6QIOyImC4g67Cp7Lac67aE7J2AIOy1nOyihSDqsrDqs7zsnZggcHJlZml4IOyehOydtCDrs7TsnqXrkJzri6Qg4oCUXG4gIC8vIOqzteuwseydgCDruYTqs7XrsLEg64K07Jqp7J20IOuSpOuUsOultOq4sCDsoITquYzsp4Ag7ZWt7IOBIOuztOulmOuQmOuvgOuhnCwg64KY7KSR7JeQIOuLq+uKlCDtjpzsiqTsnZgg7J2867aA66GcXG4gIC8vIO2MkOuqheuQoCDrrLjsnpDqsIAg66+466asIOuwqey2nOuQmOuKlCDsnbzsnbQg7JeG64ukLlxuICBsZXQgZW1pdHRlZCA9IDA7XG5cbiAgcmV0dXJuIHtcbiAgICBwdXNoKGRlbHRhOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgZnVsbCArPSBkZWx0YTtcblxuICAgICAgaWYgKGJvZHlTdGFydCA8IDApIHtcbiAgICAgICAgYm9keVN0YXJ0ID0gcmVzb2x2ZUxlYWRpbmdPZmZzZXQoZnVsbCk7XG5cbiAgICAgICAgaWYgKGJvZHlTdGFydCA8IDApIHJldHVybiBcIlwiO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBib2R5ID0gZnVsbC5zbGljZShib2R5U3RhcnQpO1xuICAgICAgY29uc3QgdW5lbWl0dGVkID0gYm9keS5zbGljZShlbWl0dGVkKTtcbiAgICAgIGNvbnN0IHNhZmUgPSB1bmVtaXR0ZWQubGVuZ3RoIC0gdHJhaWxpbmdIb2xkTGVuZ3RoKHVuZW1pdHRlZCk7XG5cbiAgICAgIGlmIChzYWZlIDw9IDApIHJldHVybiBcIlwiO1xuXG4gICAgICBjb25zdCBvdXQgPSB1bmVtaXR0ZWQuc2xpY2UoMCwgc2FmZSk7XG4gICAgICBlbWl0dGVkICs9IHNhZmU7XG5cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIGZsdXNoKCk6IHN0cmluZyB7XG4gICAgICAvLyDrsKnstpzrtoTsnbQg7LWc7KKFIOqysOqzvOydmCBwcmVmaXgg652864qUIOu2iOuzgOyLnSDsnITsl5DshJwsIOyelOyXrOunjCDsnpjrnbwg64+M66Ck7KSA64ukLlxuICAgICAgcmV0dXJuIHN0cmlwRmVuY2VzKGZ1bGwpLnNsaWNlKGVtaXR0ZWQpO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICog7Jes64qUIO2OnOyKpCDtjJDsoJUuIOyVhOyngSBcImBgYGpzb25cIiDsnLzroZwg7J6Q656EIOyImCDsnojripQg6rK96rOEKOuwse2LsSAxfjLqsJwsIFwiYGBgaihzKG8pKVwiLFxuICog7Y6c7IqkIOynge2bhCDqs7XrsLHrp4wg64+E7LCpKeuptCAtMSDroZwg67O066WY7ZWc64ukLiBzdHJpcEZlbmNlcyDsnZggbGVhZGluZyDsoJXqt5zsi53qs7wg64+Z7J287ZWcXG4gKiDshozruYQg6rec7LmZOiBgYGAoanNvbik/IOuSpOyXkCDsnbTslrTsp4DripQg6rO167CxIOyghOu2gOqwgCDtjpzsiqTsl5Ag67aZ7Ja0IOuWqOyWtOyguCDrgpjqsITri6QuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVMZWFkaW5nT2Zmc2V0KHRleHQ6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHRyaW1tZWRTdGFydCA9IHRleHQudHJpbVN0YXJ0KCk7XG5cbiAgaWYgKHRyaW1tZWRTdGFydCA9PT0gXCJcIikgcmV0dXJuIC0xOyAvLyDslYTsp4Eg6rO167Cx67+QIOKAlCBmbHVzaCDqsIAg7KCV66as7ZWc64ukXG4gIGNvbnN0IHdzID0gdGV4dC5sZW5ndGggLSB0cmltbWVkU3RhcnQubGVuZ3RoO1xuXG4gIGlmICghdHJpbW1lZFN0YXJ0LnN0YXJ0c1dpdGgoXCJgXCIpKSByZXR1cm4gd3M7XG5cbiAgaWYgKC9eYHsxLDJ9JC8udGVzdCh0cmltbWVkU3RhcnQpKSByZXR1cm4gLTE7IC8vIFwiYGBgXCIg66GcIOyekOuehCDsiJgg7J6I7J2MXG5cbiAgY29uc3QgZmVuY2UgPSAvXmBgYCg/Ompzb24pPy9pLmV4ZWModHJpbW1lZFN0YXJ0KTtcblxuICBpZiAoIWZlbmNlKSByZXR1cm4gd3M7IC8vIFwiYHhcIiwgXCJgYHhcIiDigJQg7Y6c7Iqk6rCAIOyVhOuLiOudvCDrs7jrrLhcblxuICBpZiAoL15gYGAoPzpqfGpzfGpzbykkL2kudGVzdCh0cmltbWVkU3RhcnQpKSByZXR1cm4gLTE7IC8vIFwianNvblwiIO2DnOq3uOqwgCDsnpDrnbzripQg7KSRXG5cbiAgY29uc3QgYWZ0ZXJGZW5jZSA9IHRyaW1tZWRTdGFydC5zbGljZShmZW5jZVswXS5sZW5ndGgpO1xuICBjb25zdCBhZnRlckZlbmNlQm9keSA9IGFmdGVyRmVuY2UudHJpbVN0YXJ0KCk7XG5cbiAgaWYgKGFmdGVyRmVuY2VCb2R5ID09PSBcIlwiKSByZXR1cm4gLTE7IC8vIO2OnOyKpCDrkqQg6rO167Cx66eMIOKAlCDrs7jrrLgg7LKrIOq4gOyekCDrjIDquLBcblxuICByZXR1cm4gd3MgKyBmZW5jZVswXS5sZW5ndGggKyAoYWZ0ZXJGZW5jZS5sZW5ndGggLSBhZnRlckZlbmNlQm9keS5sZW5ndGgpO1xufVxuXG4vKipcbiAqIOyVhOyngSDrsKnstpztlZjrqbQg7JWIIOuQmOuKlCBzdWZmaXgg6ri47J20LiDri6vripQg7Y6c7IqkIO2bhOuztOuKlCBcIijqsJztlok/KSjrsLHti7EgMX4zKSjqs7XrsLEqKVwiIOuYkOuKlFxuICog7Iic7IiYIHRyYWlsaW5nIOqzteuwsSDigJQgc3RyaXBGZW5jZXMg7J2YIHRyaW0gKyAvXFxuP2BgYFxccyokLyDqsIAg7KeA7Jq4IOyImCDsnojripQg66qo65OgIO2Yle2DnOulvFxuICog642u64qU64ukLiDqs7XrsLEg7YG0656Y7Iqk64qUIOuwmOuTnOyLnCBgXFxzYCgrQk9NKSDigJQgdHJpbSgpIOydgCBOQlNQwrdWVMK3RkbCt1UrMjAyOMK3VSsyMDI5IOq5jOyngFxuICog7KeA7Jqw66+A66GcIEFTQ0lJIOunjCDrs7TrpZjtlZjrqbQg6re4IOusuOyekOuTpOydtCDrqLzsoIAg67Cp7Lac64+8IFwi67Cp7LacID09IHN0cmlwKOyghOyytClcIiDrtojrs4Dsi53snbRcbiAqIOq5qOynhOuLpCgy7LCoIOqygO2GoCAjOCDsi6TsuKEpLiDrr7jrsKnstpwg6rWs6rCE7JeQ66eMIOyggeyaqe2VmOuvgOuhnCDruYTsmqnsnYAgKOuztOulmOu2hCtkZWx0YSnsl5Ag67mE66GALlxuICovXG5mdW5jdGlvbiB0cmFpbGluZ0hvbGRMZW5ndGgodW5lbWl0dGVkOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBtYXRjaCA9IC8oPzpcXG4/YHsxLDN9KT9bXFxz77u/XSokLy5leGVjKHVuZW1pdHRlZCk7XG5cbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0ubGVuZ3RoIDogMDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFjQSxTQUFnQixZQUFZLEdBQW1CO0NBQzdDLE9BQU8sRUFDSixLQUFLLENBQUMsQ0FDTixRQUFRLHdCQUF3QixFQUFFLENBQUMsQ0FDbkMsUUFBUSxlQUFlLEVBQUU7QUFDOUI7Ozs7Ozs7Ozs7QUFrQkEsU0FBZ0IsNEJBQWlEO0NBQy9ELElBQUksT0FBTztDQUVYLElBQUksWUFBWTtDQUloQixJQUFJLFVBQVU7Q0FFZCxPQUFPO0VBQ0wsS0FBSyxPQUF1QjtHQUMxQixRQUFRO0dBRVIsSUFBSSxZQUFZLEdBQUc7SUFDakIsWUFBWSxxQkFBcUIsSUFBSTtJQUVyQyxJQUFJLFlBQVksR0FBRyxPQUFPO0dBQzVCO0dBR0EsTUFBTSxZQURPLEtBQUssTUFBTSxTQUNOLENBQUEsQ0FBSyxNQUFNLE9BQU87R0FDcEMsTUFBTSxPQUFPLFVBQVUsU0FBUyxtQkFBbUIsU0FBUztHQUU1RCxJQUFJLFFBQVEsR0FBRyxPQUFPO0dBRXRCLE1BQU0sTUFBTSxVQUFVLE1BQU0sR0FBRyxJQUFJO0dBQ25DLFdBQVc7R0FFWCxPQUFPO0VBQ1Q7RUFFQSxRQUFnQjtHQUVkLE9BQU8sWUFBWSxJQUFJLENBQUMsQ0FBQyxNQUFNLE9BQU87RUFDeEM7Q0FDRjtBQUNGOzs7Ozs7QUFPQSxTQUFTLHFCQUFxQixNQUFzQjtDQUNsRCxNQUFNLGVBQWUsS0FBSyxVQUFVO0NBRXBDLElBQUksaUJBQWlCLElBQUksT0FBTztDQUNoQyxNQUFNLEtBQUssS0FBSyxTQUFTLGFBQWE7Q0FFdEMsSUFBSSxDQUFDLGFBQWEsV0FBVyxHQUFHLEdBQUcsT0FBTztDQUUxQyxJQUFJLFdBQVcsS0FBSyxZQUFZLEdBQUcsT0FBTztDQUUxQyxNQUFNLFFBQVEsaUJBQWlCLEtBQUssWUFBWTtDQUVoRCxJQUFJLENBQUMsT0FBTyxPQUFPO0NBRW5CLElBQUkscUJBQXFCLEtBQUssWUFBWSxHQUFHLE9BQU87Q0FFcEQsTUFBTSxhQUFhLGFBQWEsTUFBTSxNQUFNLEVBQUUsQ0FBQyxNQUFNO0NBQ3JELE1BQU0saUJBQWlCLFdBQVcsVUFBVTtDQUU1QyxJQUFJLG1CQUFtQixJQUFJLE9BQU87Q0FFbEMsT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDLFVBQVUsV0FBVyxTQUFTLGVBQWU7QUFDcEU7Ozs7Ozs7O0FBU0EsU0FBUyxtQkFBbUIsV0FBMkI7Q0FDckQsTUFBTSxRQUFRLHdCQUF3QixLQUFLLFNBQVM7Q0FFcEQsT0FBTyxRQUFRLE1BQU0sRUFBRSxDQUFDLFNBQVM7QUFDbkMifQ==
|