sonamu 0.11.16 → 0.13.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/dist/_virtual/_rolldown/runtime.js +1 -2
- package/dist/ai/agents/agent.js +2 -3
- package/dist/ai/agents/index.js +1 -2
- package/dist/ai/index.js +1 -2
- package/dist/ai/providers/rtzr/api.js +1 -2
- package/dist/ai/providers/rtzr/error.js +2 -3
- package/dist/ai/providers/rtzr/model.js +1 -2
- package/dist/ai/providers/rtzr/options.js +1 -2
- package/dist/ai/providers/rtzr/provider.js +1 -2
- package/dist/ai/providers/rtzr/utils.js +1 -2
- package/dist/api/base-frame.js +4 -4
- package/dist/api/caster.d.ts +1 -1
- package/dist/api/caster.d.ts.map +1 -1
- package/dist/api/caster.js +9 -9
- package/dist/api/code-converters.js +6 -5
- package/dist/api/config.d.ts +1 -1
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +2 -3
- package/dist/api/context.d.ts +2 -3
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +2 -3
- package/dist/api/decorators.js +2 -3
- package/dist/api/http-validator.js +2 -3
- package/dist/api/index.js +8 -3
- package/dist/api/secret.js +1 -2
- package/dist/api/sonamu.d.ts +3 -5
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +30 -24
- package/dist/api/validator.js +1 -2
- package/dist/api/websocket-helpers.js +2 -3
- package/dist/auth/audit-log/builders.js +1 -2
- package/dist/auth/audit-log/client-ip.js +2 -3
- package/dist/auth/audit-log/events.js +1 -2
- package/dist/auth/audit-log/plugin.d.ts.map +1 -1
- package/dist/auth/audit-log/plugin.js +2 -3
- package/dist/auth/audit-log-ingestor.js +2 -3
- package/dist/auth/auth-generator.js +2 -3
- package/dist/auth/better-auth-entities.js +1 -2
- package/dist/auth/better-auth-request.js +2 -3
- package/dist/auth/index.js +2 -3
- package/dist/auth/knex-adapter.js +2 -3
- package/dist/auth/plugins/entity-definitions/admin.js +1 -2
- package/dist/auth/plugins/entity-definitions/anonymous.js +1 -2
- package/dist/auth/plugins/entity-definitions/api-key.js +1 -2
- package/dist/auth/plugins/entity-definitions/audit-log.js +1 -2
- package/dist/auth/plugins/entity-definitions/index.js +1 -2
- package/dist/auth/plugins/entity-definitions/jwt.js +1 -2
- package/dist/auth/plugins/entity-definitions/organization.js +1 -2
- package/dist/auth/plugins/entity-definitions/passkey.js +1 -2
- package/dist/auth/plugins/entity-definitions/phone-number.js +1 -2
- package/dist/auth/plugins/entity-definitions/sso.js +1 -2
- package/dist/auth/plugins/entity-definitions/two-factor.js +1 -2
- package/dist/auth/plugins/entity-definitions/username.js +1 -2
- package/dist/auth/plugins/wrappers/admin.d.ts +33 -32
- package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/admin.js +2 -3
- package/dist/auth/plugins/wrappers/anonymous.js +2 -3
- package/dist/auth/plugins/wrappers/api-key.js +2 -3
- package/dist/auth/plugins/wrappers/jwt.js +2 -3
- package/dist/auth/plugins/wrappers/organization.js +2 -3
- package/dist/auth/plugins/wrappers/passkey.js +2 -3
- package/dist/auth/plugins/wrappers/phone-number.d.ts +43 -1
- package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/phone-number.js +2 -3
- package/dist/auth/plugins/wrappers/sso.d.ts +138 -187
- package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/sso.js +1 -2
- package/dist/auth/plugins/wrappers/two-factor.d.ts +51 -10
- package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/two-factor.js +2 -3
- package/dist/auth/plugins/wrappers/username.d.ts +39 -5
- package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/username.js +2 -3
- package/dist/bin/build-config.js +5 -5
- package/dist/bin/compiler-policy.js +2 -3
- package/dist/bin/fixture.js +7 -5
- package/dist/bin/hmr-hook-register.js +1 -2
- package/dist/bin/migrate-targets.js +2 -3
- package/dist/bin/test-command.js +2 -3
- package/dist/bin/ts-loader-register.js +2 -3
- package/dist/bin/ts-loader-registration.js +2 -3
- package/dist/bin/typecheck-web.js +2 -3
- package/dist/cache/cache-manager.js +1 -2
- package/dist/cache/decorator.js +2 -3
- package/dist/cache/drivers.js +1 -2
- package/dist/cache/index.js +2 -3
- package/dist/cache-control/cache-control.js +1 -2
- package/dist/code-formatting/index.js +2 -3
- package/dist/code-formatting/oxfmt.js +2 -3
- package/dist/code-formatting/oxlint.js +2 -3
- package/dist/compress/compress.js +1 -2
- package/dist/compress/index.js +2 -2
- package/dist/compress/types.d.ts +1 -1
- package/dist/compress/types.d.ts.map +1 -1
- package/dist/cone/cone-generator.js +2 -3
- package/dist/database/_batch_update.js +1 -2
- package/dist/database/base-model.js +4 -4
- package/dist/database/db.js +4 -4
- package/dist/database/knex.js +2 -3
- package/dist/database/puri-wrapper.js +2 -3
- package/dist/database/puri.js +23 -22
- package/dist/database/puri.types.js +1 -2
- package/dist/database/transaction-context.js +1 -2
- package/dist/database/upsert-builder.js +2 -3
- package/dist/dict/en.js +2 -3
- package/dist/dict/index.js +3 -3
- package/dist/dict/ko.js +2 -3
- package/dist/dict/rc-keys.js +1 -2
- package/dist/dict/sd.js +2 -3
- package/dist/dict/sonamu-dictionary.js +7 -6
- package/dist/dict/utils.js +2 -3
- package/dist/entity/entity-manager.d.ts +66 -66
- package/dist/entity/entity-manager.js +4 -4
- package/dist/entity/entity-template-cone.js +2 -3
- package/dist/entity/entity.js +21 -18
- package/dist/env.js +1 -2
- package/dist/exceptions/error-handler.d.ts.map +1 -1
- package/dist/exceptions/error-handler.js +2 -3
- package/dist/exceptions/so-exceptions.js +2 -3
- package/dist/filter/index.js +3 -2
- package/dist/filter/types.js +1 -2
- package/dist/filter/utils.js +7 -6
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -6
- package/dist/logger/category.js +2 -3
- package/dist/logger/configure.js +5 -5
- package/dist/migration/code-generation.js +23 -16
- package/dist/migration/index-where-predicate.js +2 -3
- package/dist/migration/migration-set.js +2 -3
- package/dist/migration/migrator.js +2 -3
- package/dist/migration/postgresql-schema-reader.js +6 -9
- package/dist/migration/slack-confirm.js +2 -3
- package/dist/naite/naite-reporter.js +2 -3
- package/dist/naite/naite.js +10 -8
- package/dist/runtime-type.js +2 -3
- package/dist/ssr/hmr-opt-out.js +1 -2
- package/dist/ssr/index.js +7 -4
- package/dist/ssr/registry.js +1 -2
- package/dist/ssr/renderer.js +2 -3
- package/dist/storage/base-file.js +1 -2
- package/dist/storage/buffered-file.js +2 -3
- package/dist/storage/drivers.js +1 -2
- package/dist/storage/index.js +2 -3
- package/dist/storage/s3-driver.js +1 -2
- package/dist/storage/storage-manager.js +2 -3
- package/dist/storage/uploaded-file.js +2 -3
- package/dist/stream/__tests__/ws-test-helpers.d.ts +108 -0
- package/dist/stream/__tests__/ws-test-helpers.d.ts.map +1 -0
- package/dist/stream/__tests__/ws-test-helpers.js +259 -0
- package/dist/stream/index.d.ts +1 -0
- package/dist/stream/index.d.ts.map +1 -1
- package/dist/stream/index.js +15 -4
- package/dist/stream/sse.js +1 -2
- package/dist/stream/ws-audience-resolver.d.ts +8 -5
- package/dist/stream/ws-audience-resolver.d.ts.map +1 -1
- package/dist/stream/ws-audience-resolver.js +17 -15
- package/dist/stream/ws-audience.js +1 -2
- package/dist/stream/ws-cluster-bus.d.ts +9 -4
- package/dist/stream/ws-cluster-bus.d.ts.map +1 -1
- package/dist/stream/ws-cluster-bus.js +2 -3
- package/dist/stream/ws-core.d.ts +10 -0
- package/dist/stream/ws-core.d.ts.map +1 -1
- package/dist/stream/ws-delivery.d.ts +30 -4
- package/dist/stream/ws-delivery.d.ts.map +1 -1
- package/dist/stream/ws-delivery.js +200 -54
- package/dist/stream/ws-frame.d.ts +15 -0
- package/dist/stream/ws-frame.d.ts.map +1 -0
- package/dist/stream/ws-frame.js +28 -0
- package/dist/stream/ws-local-connection-store.d.ts +4 -4
- package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
- package/dist/stream/ws-local-connection-store.js +3 -4
- package/dist/stream/ws-presence-index.d.ts +36 -0
- package/dist/stream/ws-presence-index.d.ts.map +1 -0
- package/dist/stream/ws-presence-index.js +176 -0
- package/dist/stream/ws-presence-store.d.ts +39 -39
- package/dist/stream/ws-presence-store.d.ts.map +1 -1
- package/dist/stream/ws-presence-store.js +23 -154
- package/dist/stream/ws-registry.d.ts +45 -17
- package/dist/stream/ws-registry.d.ts.map +1 -1
- package/dist/stream/ws-registry.js +170 -62
- package/dist/stream/ws-session-id.d.ts +14 -0
- package/dist/stream/ws-session-id.d.ts.map +1 -0
- package/dist/stream/ws-session-id.js +36 -0
- package/dist/stream/ws-telemetry-memory.js +3 -4
- package/dist/stream/ws-telemetry-trace.js +1 -2
- package/dist/stream/ws-telemetry.js +2 -3
- package/dist/stream/ws.d.ts +20 -10
- package/dist/stream/ws.d.ts.map +1 -1
- package/dist/stream/ws.js +60 -38
- package/dist/syncer/api-parser.js +2 -3
- package/dist/syncer/checksum.js +4 -4
- package/dist/syncer/code-generator.js +4 -4
- package/dist/syncer/entity-operations.js +2 -3
- package/dist/syncer/event-batcher.js +1 -2
- package/dist/syncer/file-copy.js +2 -3
- package/dist/syncer/file-patterns.js +2 -3
- package/dist/syncer/file-tracking.js +2 -3
- package/dist/syncer/filesystem-dependencies.js +1 -2
- package/dist/syncer/index.js +8 -2
- package/dist/syncer/module-loader.js +8 -6
- package/dist/syncer/syncer-actions.js +8 -7
- package/dist/syncer/syncer.js +13 -8
- package/dist/syncer/watcher.js +2 -3
- package/dist/tasks/decorator.js +1 -2
- package/dist/tasks/step-wrapper.js +2 -3
- package/dist/tasks/workflow-manager.js +2 -3
- package/dist/template/entity-converter.js +17 -16
- package/dist/template/helpers.js +2 -3
- package/dist/template/implementations/entity.template.js +2 -3
- package/dist/template/implementations/entry-server.template.js +2 -3
- package/dist/template/implementations/generated.template.js +2 -3
- package/dist/template/implementations/generated_http.template.js +6 -6
- package/dist/template/implementations/generated_sso.template.js +2 -3
- package/dist/template/implementations/http_validators.template.js +2 -3
- package/dist/template/implementations/init_types.template.js +2 -3
- package/dist/template/implementations/model.template.js +4 -4
- package/dist/template/implementations/model_test.template.js +2 -3
- package/dist/template/implementations/queries.template.js +2 -3
- package/dist/template/implementations/sd.template.js +2 -3
- package/dist/template/implementations/services.template.js +2 -3
- package/dist/template/implementations/view_form.template.js +12 -9
- package/dist/template/implementations/view_id_all_select.template.js +2 -3
- package/dist/template/implementations/view_list.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list.template.js +19 -17
- package/dist/template/implementations/view_search_input.template.js +2 -3
- package/dist/template/index.js +9 -3
- package/dist/template/template-manager.js +2 -3
- package/dist/template/template-types.js +1 -2
- package/dist/template/template.js +2 -3
- package/dist/template/zod-converter.js +54 -47
- package/dist/testing/_relation-graph.js +2 -3
- package/dist/testing/bootstrap.js +2 -3
- package/dist/testing/data-explorer.js +2 -3
- package/dist/testing/dev-test-routes.js +2 -3
- package/dist/testing/dev-vitest-manager.js +15 -12
- package/dist/testing/faker-mappings.js +1 -2
- package/dist/testing/filesystem.js +2 -3
- package/dist/testing/fixture-generator.js +2 -3
- package/dist/testing/fixture-loader.js +1 -2
- package/dist/testing/fixture-manager.js +12 -9
- package/dist/testing/global-setup.js +5 -5
- package/dist/testing/index.js +6 -3
- package/dist/testing/naite-vitest-reporter.js +1 -2
- package/dist/testing/parallel-db-manager.js +2 -3
- package/dist/testing/vitest-helpers.js +2 -3
- package/dist/tooling/__tests__/helpers/sonamu-test-root.js +2 -3
- package/dist/tooling/cdd-service.js +1 -2
- package/dist/tooling/cli-tooling.js +1 -2
- package/dist/tooling/fixture-service.js +1 -2
- package/dist/tooling/index.js +1 -2
- package/dist/tooling/test-run-client.js +2 -3
- package/dist/tsdown.api.config.js +1 -2
- package/dist/types/types.js +2 -3
- package/dist/ui/ai-api.d.ts.map +1 -1
- package/dist/ui/ai-api.js +4 -5
- package/dist/ui/ai-client.d.ts +2 -2
- package/dist/ui/ai-client.d.ts.map +1 -1
- package/dist/ui/ai-client.js +9 -8
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +11 -8
- package/dist/ui/async-route.js +1 -2
- package/dist/ui/cdd-service.js +22 -21
- package/dist/ui/migrations-api.js +6 -5
- package/dist/ui-web/assets/index-QDMyy31K.js +180 -0
- package/dist/ui-web/assets/index-dV7akMFB.css +1 -0
- package/dist/ui-web/index.html +2 -2
- package/dist/utils/async-utils.js +1 -2
- package/dist/utils/class-name.js +1 -2
- package/dist/utils/console-util.js +1 -2
- package/dist/utils/controller.js +2 -3
- package/dist/utils/esm-utils.js +1 -2
- package/dist/utils/fs-utils.js +2 -3
- package/dist/utils/lodash-able.js +1 -2
- package/dist/utils/model.js +1 -2
- package/dist/utils/object-utils.js +2 -3
- package/dist/utils/path-utils.js +2 -3
- package/dist/utils/process-utils.js +2 -3
- package/dist/utils/runtime-value.js +1 -2
- package/dist/utils/sql-parser.js +2 -3
- package/dist/utils/type-utils.js +8 -8
- package/dist/utils/utils.js +2 -3
- package/dist/utils/zod-error.js +2 -3
- package/dist/vector/chunking.js +1 -2
- package/dist/vector/config.js +1 -2
- package/dist/vector/embedding.js +4 -4
- package/package.json +63 -63
- package/src/ai/agents/agent.ts +1 -1
- package/src/api/__tests__/sonamu.plugins.test.ts +11 -1
- package/src/api/__tests__/sonamu.websocket-routes.test.ts +234 -0
- package/src/api/__tests__/sonamu.websocket.test.ts +241 -24
- package/src/api/config.ts +1 -1
- package/src/api/context.ts +2 -8
- package/src/api/sonamu.ts +46 -28
- package/src/auth/audit-log/plugin.ts +2 -0
- package/src/compress/types.ts +1 -1
- package/src/exceptions/error-handler.ts +3 -2
- package/src/index.ts +1 -0
- package/src/stream/__tests__/ws-contracts.test.ts +483 -265
- package/src/stream/__tests__/ws-multinode.test.ts +326 -0
- package/src/stream/__tests__/ws-registry-async.test.ts +855 -0
- package/src/stream/__tests__/ws-test-helpers.ts +360 -0
- package/src/stream/__tests__/ws.test.ts +342 -145
- package/src/stream/index.ts +1 -0
- package/src/stream/ws-audience-resolver.ts +21 -19
- package/src/stream/ws-cluster-bus.ts +12 -4
- package/src/stream/ws-core.ts +14 -0
- package/src/stream/ws-delivery.ts +321 -97
- package/src/stream/ws-frame.ts +39 -0
- package/src/stream/ws-local-connection-store.ts +10 -9
- package/src/stream/ws-presence-index.ts +273 -0
- package/src/stream/ws-presence-store.ts +64 -284
- package/src/stream/ws-registry.ts +272 -85
- package/src/stream/ws-session-id.ts +39 -0
- package/src/stream/ws.ts +91 -50
- package/src/template/implementations/model.template.ts +3 -3
- package/src/template/implementations/view_list.template.ts +12 -13
- package/src/ui/ai-api.ts +4 -2
- package/src/ui/ai-client.ts +2 -2
- package/src/ui/api.ts +58 -62
- package/dist/ui-web/assets/index-BMdIyKXS.css +0 -1
- package/dist/ui-web/assets/index-LpE8u19O.js +0 -178
package/dist/api/validator.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
-
|
|
2
|
+
// src/api/validator.ts
|
|
3
3
|
function validateMethodName(methodName) {
|
|
4
4
|
if (RESERVED_KEYWORDS.has(methodName)) throw new ApiValidationError(`Method name ${methodName} is a reserved keyword. Please choose a different name.`);
|
|
5
5
|
}
|
|
@@ -80,7 +80,6 @@ var init_validator = __esmMin((() => {
|
|
|
80
80
|
}
|
|
81
81
|
};
|
|
82
82
|
}));
|
|
83
|
-
//#endregion
|
|
84
83
|
init_validator();
|
|
85
84
|
export { ApiValidationError, RESERVED_KEYWORDS, init_validator, validateMethodName };
|
|
86
85
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { init_utils, isPlainObject } from "../utils/utils.js";
|
|
3
3
|
import { init_so_exceptions, isSoException } from "../exceptions/so-exceptions.js";
|
|
4
|
-
|
|
4
|
+
// src/api/websocket-helpers.ts
|
|
5
5
|
function resolveIntegratedViteHmrOptions({ httpServer, requiresDedicatedWebSocketServer, rawPort = process.env.SONAMU_VITE_HMR_PORT }) {
|
|
6
6
|
if (!requiresDedicatedWebSocketServer) return { server: httpServer };
|
|
7
7
|
const parsedPort = rawPort?.trim() ? Number(rawPort) : 24678;
|
|
@@ -46,8 +46,7 @@ var init_websocket_helpers = __esmMin((() => {
|
|
|
46
46
|
init_so_exceptions();
|
|
47
47
|
init_utils();
|
|
48
48
|
}));
|
|
49
|
-
//#endregion
|
|
50
49
|
init_websocket_helpers();
|
|
51
50
|
export { createWebSocketReplyStub, init_websocket_helpers, resolveIntegratedViteHmrOptions, resolveWebSocketCloseDescriptor, resolveWebSocketPluginOptions };
|
|
52
51
|
|
|
53
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWhlbHBlcnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS93ZWJzb2NrZXQtaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIFNlcnZlciB9IGZyb20gXCJodHRwXCI7XG5cbmltcG9ydCB7IHR5cGUgV2Vic29ja2V0UGx1Z2luT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS93ZWJzb2NrZXRcIjtcbmltcG9ydCB7IHR5cGUgRmFzdGlmeVJlcGx5IH0gZnJvbSBcImZhc3RpZnlcIjtcblxuaW1wb3J0IHsgaXNTb0V4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IGlzUGxhaW5PYmplY3QgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuaW50ZXJmYWNlIFdlYlNvY2tldENsb3NlRGVzY3JpcHRvciB7XG4gIGNvZGU6IG51bWJlcjtcbiAgcmVhc29uOiBzdHJpbmc7XG4gIGxvZ0xldmVsOiBcIndhcm5cIiB8IFwiZXJyb3JcIjtcbn1cblxuLy8gRmFzdGlmeSB3ZWJzb2NrZXQgcm91dGXsmYAgVml0ZSBITVIgd2Vic29ja2V07J20IOqwmeydgCBzZXJ2ZXIgc29ja2V07J2EIOuRkOqzoCDstqnrj4ztlZjripQg6rKD7J2EIOuwqeyngO2VmOq4sCDsnITtlbQsXG4vLyBXUyByb3V0ZeqwgCDsobTsnqztlZjrqbQgSE1S7J2EIOuzhOuPhCDtj6ztirjroZwg67aE66as7ZW0IOudhOybgFxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbnRlZ3JhdGVkVml0ZUhtck9wdGlvbnMoe1xuICBodHRwU2VydmVyLFxuICByZXF1aXJlc0RlZGljYXRlZFdlYlNvY2tldFNlcnZlcixcbiAgcmF3UG9ydCA9IHByb2Nlc3MuZW52LlNPTkFNVV9WSVRFX0hNUl9QT1JULFxufToge1xuICBodHRwU2VydmVyOiBTZXJ2ZXI7XG4gIHJlcXVpcmVzRGVkaWNhdGVkV2ViU29ja2V0U2VydmVyOiBib29sZWFuO1xuICByYXdQb3J0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufSk6IHsgc2VydmVyOiBTZXJ2ZXIgfSB8IHsgcG9ydDogbnVtYmVyIH0ge1xuICBpZiAoIXJlcXVpcmVzRGVkaWNhdGVkV2ViU29ja2V0U2VydmVyKSB7XG4gICAgcmV0dXJuIHsgc2VydmVyOiBodHRwU2VydmVyIH07XG4gIH1cblxuICBjb25zdCBwYXJzZWRQb3J0ID0gcmF3UG9ydD8udHJpbSgpID8gTnVtYmVyKHJhd1BvcnQpIDogMjQ2Nzg7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkUG9ydCkgJiYgcGFyc2VkUG9ydCA+IDAgPyB7IHBvcnQ6IHBhcnNlZFBvcnQgfSA6IHsgcG9ydDogMjQ2NzggfTtcbn1cblxuLy8gQGZhc3RpZnkvd2Vic29ja2V0IHRyYW5zcG9ydCBvcHRpb27snYAgc2VydmVyLnBsdWdpbnMud3Psl5Ag66qF7Iuc65CcIOqwkuunjCDsgqzsmqntlaguXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdlYlNvY2tldFBsdWdpbk9wdGlvbnMoe1xuICByYXdQbHVnaW5PcHRpb24sXG59OiB7XG4gIHJhd1BsdWdpbk9wdGlvbjogYm9vbGVhbiB8IFdlYnNvY2tldFBsdWdpbk9wdGlvbnMgfCB1bmRlZmluZWQ7XG59KTogV2Vic29ja2V0UGx1Z2luT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBsdWdpbk9wdGlvbnMgPSByYXdQbHVnaW5PcHRpb24gJiYgcmF3UGx1Z2luT3B0aW9uICE9PSB0cnVlID8geyAuLi5yYXdQbHVnaW5PcHRpb24gfSA6IHt9O1xuICBjb25zdCBzZXJ2ZXJPcHRpb25zOiBOb25OdWxsYWJsZTxXZWJzb2NrZXRQbHVnaW5PcHRpb25zW1wib3B0aW9uc1wiXT4gPSBpc1BsYWluT2JqZWN0KFxuICAgIHBsdWdpbk9wdGlvbnMub3B0aW9ucyxcbiAgKVxuICAgID8geyAuLi5wbHVnaW5PcHRpb25zLm9wdGlvbnMgfVxuICAgIDoge307XG5cbiAgaWYgKE9iamVjdC5rZXlzKHNlcnZlck9wdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICBwbHVnaW5PcHRpb25zLm9wdGlvbnMgPSBzZXJ2ZXJPcHRpb25zO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKHBsdWdpbk9wdGlvbnMpLmxlbmd0aCA+IDAgPyBwbHVnaW5PcHRpb25zIDogdW5kZWZpbmVkO1xufVxuXG4vLyBoYW5kc2hha2UvYXV0aC92YWxpZGF0aW9uIOyLpO2MqOulvCBnZW5lcmljIDEwMTHroZwg662J6rCc7KeAIOyViuqzoCAxMDA4KHBvbGljeSB2aW9sYXRpb24p66GcIOunpO2Vke2VtCxcbi8vIGNsb3NlIGNvZGUgcG9saWN566W8IO2VnCDqs7Psl5DshJwg7KCV7J2Y7ZWoXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdlYlNvY2tldENsb3NlRGVzY3JpcHRvcihjYXVzZTogdW5rbm93bik6IFdlYlNvY2tldENsb3NlRGVzY3JpcHRvciB7XG4gIGlmIChpc1NvRXhjZXB0aW9uKGNhdXNlKSkge1xuICAgIGlmIChjYXVzZS5zdGF0dXNDb2RlID09PSA0MDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvZGU6IDEwMDgsXG4gICAgICAgIHJlYXNvbjogXCJJbnZhbGlkIHdlYnNvY2tldCBoYW5kc2hha2VcIixcbiAgICAgICAgbG9nTGV2ZWw6IFwid2FyblwiLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY2F1c2Uuc3RhdHVzQ29kZSA9PT0gNDAxIHx8IGNhdXNlLnN0YXR1c0NvZGUgPT09IDQwMykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZTogMTAwOCxcbiAgICAgICAgcmVhc29uOiBcIlVuYXV0aG9yaXplZCB3ZWJzb2NrZXQgY29ubmVjdGlvblwiLFxuICAgICAgICBsb2dMZXZlbDogXCJ3YXJuXCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjYXVzZS5zdGF0dXNDb2RlID49IDQwMCAmJiBjYXVzZS5zdGF0dXNDb2RlIDwgNTAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2RlOiAxMDA4LFxuICAgICAgICByZWFzb246IFwiUmVqZWN0ZWQgd2Vic29ja2V0IGNvbm5lY3Rpb25cIixcbiAgICAgICAgbG9nTGV2ZWw6IFwid2FyblwiLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvZGU6IDEwMTEsXG4gICAgcmVhc29uOiBcIldlYlNvY2tldCBoYW5kbGVyIGZhaWxlZFwiLFxuICAgIGxvZ0xldmVsOiBcImVycm9yXCIsXG4gIH07XG59XG5cbi8vIFdTIOqyveuhnOyXkOyEnOuKlCByZXBseeqwgCDsobTsnqztlZjsp4Ag7JWK7Jy866+
|
|
52
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWhlbHBlcnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS93ZWJzb2NrZXQtaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIFNlcnZlciB9IGZyb20gXCJodHRwXCI7XG5cbmltcG9ydCB7IHR5cGUgV2Vic29ja2V0UGx1Z2luT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS93ZWJzb2NrZXRcIjtcbmltcG9ydCB7IHR5cGUgRmFzdGlmeVJlcGx5IH0gZnJvbSBcImZhc3RpZnlcIjtcblxuaW1wb3J0IHsgaXNTb0V4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IGlzUGxhaW5PYmplY3QgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuaW50ZXJmYWNlIFdlYlNvY2tldENsb3NlRGVzY3JpcHRvciB7XG4gIGNvZGU6IG51bWJlcjtcbiAgcmVhc29uOiBzdHJpbmc7XG4gIGxvZ0xldmVsOiBcIndhcm5cIiB8IFwiZXJyb3JcIjtcbn1cblxuLy8gRmFzdGlmeSB3ZWJzb2NrZXQgcm91dGXsmYAgVml0ZSBITVIgd2Vic29ja2V07J20IOqwmeydgCBzZXJ2ZXIgc29ja2V07J2EIOuRkOqzoCDstqnrj4ztlZjripQg6rKD7J2EIOuwqeyngO2VmOq4sCDsnITtlbQsXG4vLyBXUyByb3V0ZeqwgCDsobTsnqztlZjrqbQgSE1S7J2EIOuzhOuPhCDtj6ztirjroZwg67aE66as7ZW0IOudhOybgFxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbnRlZ3JhdGVkVml0ZUhtck9wdGlvbnMoe1xuICBodHRwU2VydmVyLFxuICByZXF1aXJlc0RlZGljYXRlZFdlYlNvY2tldFNlcnZlcixcbiAgcmF3UG9ydCA9IHByb2Nlc3MuZW52LlNPTkFNVV9WSVRFX0hNUl9QT1JULFxufToge1xuICBodHRwU2VydmVyOiBTZXJ2ZXI7XG4gIHJlcXVpcmVzRGVkaWNhdGVkV2ViU29ja2V0U2VydmVyOiBib29sZWFuO1xuICByYXdQb3J0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufSk6IHsgc2VydmVyOiBTZXJ2ZXIgfSB8IHsgcG9ydDogbnVtYmVyIH0ge1xuICBpZiAoIXJlcXVpcmVzRGVkaWNhdGVkV2ViU29ja2V0U2VydmVyKSB7XG4gICAgcmV0dXJuIHsgc2VydmVyOiBodHRwU2VydmVyIH07XG4gIH1cblxuICBjb25zdCBwYXJzZWRQb3J0ID0gcmF3UG9ydD8udHJpbSgpID8gTnVtYmVyKHJhd1BvcnQpIDogMjQ2Nzg7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkUG9ydCkgJiYgcGFyc2VkUG9ydCA+IDAgPyB7IHBvcnQ6IHBhcnNlZFBvcnQgfSA6IHsgcG9ydDogMjQ2NzggfTtcbn1cblxuLy8gQGZhc3RpZnkvd2Vic29ja2V0IHRyYW5zcG9ydCBvcHRpb27snYAgc2VydmVyLnBsdWdpbnMud3Psl5Ag66qF7Iuc65CcIOqwkuunjCDsgqzsmqntlaguXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdlYlNvY2tldFBsdWdpbk9wdGlvbnMoe1xuICByYXdQbHVnaW5PcHRpb24sXG59OiB7XG4gIHJhd1BsdWdpbk9wdGlvbjogYm9vbGVhbiB8IFdlYnNvY2tldFBsdWdpbk9wdGlvbnMgfCB1bmRlZmluZWQ7XG59KTogV2Vic29ja2V0UGx1Z2luT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBsdWdpbk9wdGlvbnMgPSByYXdQbHVnaW5PcHRpb24gJiYgcmF3UGx1Z2luT3B0aW9uICE9PSB0cnVlID8geyAuLi5yYXdQbHVnaW5PcHRpb24gfSA6IHt9O1xuICBjb25zdCBzZXJ2ZXJPcHRpb25zOiBOb25OdWxsYWJsZTxXZWJzb2NrZXRQbHVnaW5PcHRpb25zW1wib3B0aW9uc1wiXT4gPSBpc1BsYWluT2JqZWN0KFxuICAgIHBsdWdpbk9wdGlvbnMub3B0aW9ucyxcbiAgKVxuICAgID8geyAuLi5wbHVnaW5PcHRpb25zLm9wdGlvbnMgfVxuICAgIDoge307XG5cbiAgaWYgKE9iamVjdC5rZXlzKHNlcnZlck9wdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICBwbHVnaW5PcHRpb25zLm9wdGlvbnMgPSBzZXJ2ZXJPcHRpb25zO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKHBsdWdpbk9wdGlvbnMpLmxlbmd0aCA+IDAgPyBwbHVnaW5PcHRpb25zIDogdW5kZWZpbmVkO1xufVxuXG4vLyBoYW5kc2hha2UvYXV0aC92YWxpZGF0aW9uIOyLpO2MqOulvCBnZW5lcmljIDEwMTHroZwg662J6rCc7KeAIOyViuqzoCAxMDA4KHBvbGljeSB2aW9sYXRpb24p66GcIOunpO2Vke2VtCxcbi8vIGNsb3NlIGNvZGUgcG9saWN566W8IO2VnCDqs7Psl5DshJwg7KCV7J2Y7ZWoXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdlYlNvY2tldENsb3NlRGVzY3JpcHRvcihjYXVzZTogdW5rbm93bik6IFdlYlNvY2tldENsb3NlRGVzY3JpcHRvciB7XG4gIGlmIChpc1NvRXhjZXB0aW9uKGNhdXNlKSkge1xuICAgIGlmIChjYXVzZS5zdGF0dXNDb2RlID09PSA0MDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvZGU6IDEwMDgsXG4gICAgICAgIHJlYXNvbjogXCJJbnZhbGlkIHdlYnNvY2tldCBoYW5kc2hha2VcIixcbiAgICAgICAgbG9nTGV2ZWw6IFwid2FyblwiLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY2F1c2Uuc3RhdHVzQ29kZSA9PT0gNDAxIHx8IGNhdXNlLnN0YXR1c0NvZGUgPT09IDQwMykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZTogMTAwOCxcbiAgICAgICAgcmVhc29uOiBcIlVuYXV0aG9yaXplZCB3ZWJzb2NrZXQgY29ubmVjdGlvblwiLFxuICAgICAgICBsb2dMZXZlbDogXCJ3YXJuXCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjYXVzZS5zdGF0dXNDb2RlID49IDQwMCAmJiBjYXVzZS5zdGF0dXNDb2RlIDwgNTAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2RlOiAxMDA4LFxuICAgICAgICByZWFzb246IFwiUmVqZWN0ZWQgd2Vic29ja2V0IGNvbm5lY3Rpb25cIixcbiAgICAgICAgbG9nTGV2ZWw6IFwid2FyblwiLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvZGU6IDEwMTEsXG4gICAgcmVhc29uOiBcIldlYlNvY2tldCBoYW5kbGVyIGZhaWxlZFwiLFxuICAgIGxvZ0xldmVsOiBcImVycm9yXCIsXG4gIH07XG59XG5cbi8vIFdTIOqyveuhnOyXkOyEnOuKlCByZXBseeqwgCDsobTsnqztlZjsp4Ag7JWK7Jy866+A66GcIOygkeq3vCDsi5zrj4Trpbwg7KaJ7IucIOyXkOufrOuhnCBzdXJmYWNl7ZW0IHRyYW5zcG9ydCBtaXN1c2Xrpbwg67mo66asIOuTnOufrOuDhFxuLy8gU1NFL3JlcGx57JeQIOydmOyhtO2VmOuKlCBjb250ZXh0UHJvdmlkZXLqsIAg7J6I7Jy866m0IHdlYnNvY2tldENvbnRleHRQcm92aWRlcuulvCDrlLDroZwg7KCV7J2Y7ZWY652864qUIOqwgOydtOuTnCDsl63tlaDrj4Qg7ZWoXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2ViU29ja2V0UmVwbHlTdHViKCk6IEZhc3RpZnlSZXBseSB7XG4gIHJldHVybiBuZXcgUHJveHkoXG4gICAgLyogU0FGRVRZOiBBUEkg642w7L2U66CI7J207YSw7JmAIFpvZCDqsoDspp3quLAg65Ox66GdIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHt9IGFzIEZhc3RpZnlSZXBseSxcbiAgICB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkZhc3RpZnlSZXBseSBpcyBub3QgYXZhaWxhYmxlIGluIHdlYnNvY2tldCBjb250ZXh0LiBEZWZpbmUgd2Vic29ja2V0Q29udGV4dFByb3ZpZGVyIGlmIHlvdXIgY29udGV4dCBzZXR1cCBkZXBlbmRzIG9uIHJlcGx5IG11dGF0aW9uLlwiLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9LFxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBZ0JBLFNBQWdCLGdDQUFnQyxFQUM5QyxZQUNBLGtDQUNBLFVBQVUsUUFBUSxJQUFJLHdCQUtrQjtDQUN4QyxJQUFJLENBQUMsa0NBQ0gsT0FBTyxFQUFFLFFBQVEsV0FBVztDQUc5QixNQUFNLGFBQWEsU0FBUyxLQUFLLElBQUksT0FBTyxPQUFPLElBQUk7Q0FDdkQsT0FBTyxPQUFPLFNBQVMsVUFBVSxLQUFLLGFBQWEsSUFBSSxFQUFFLE1BQU0sV0FBVyxJQUFJLEVBQUUsTUFBTSxNQUFNO0FBQzlGO0FBR0EsU0FBZ0IsOEJBQThCLEVBQzVDLG1CQUdxQztDQUNyQyxNQUFNLGdCQUFnQixtQkFBbUIsb0JBQW9CLE9BQU8sRUFBRSxHQUFHLGdCQUFnQixJQUFJLENBQUM7Q0FDOUYsTUFBTSxnQkFBZ0UsY0FDcEUsY0FBYyxPQUNoQixJQUNJLEVBQUUsR0FBRyxjQUFjLFFBQVEsSUFDM0IsQ0FBQztDQUVMLElBQUksT0FBTyxLQUFLLGFBQWEsQ0FBQyxDQUFDLFNBQVMsR0FDdEMsY0FBYyxVQUFVO0NBRzFCLE9BQU8sT0FBTyxLQUFLLGFBQWEsQ0FBQyxDQUFDLFNBQVMsSUFBSSxnQkFBZ0I7QUFDakU7QUFJQSxTQUFnQixnQ0FBZ0MsT0FBMEM7Q0FDeEYsSUFBSSxjQUFjLEtBQUssR0FBRztFQUN4QixJQUFJLE1BQU0sZUFBZSxLQUN2QixPQUFPO0dBQ0wsTUFBTTtHQUNOLFFBQVE7R0FDUixVQUFVO0VBQ1o7RUFHRixJQUFJLE1BQU0sZUFBZSxPQUFPLE1BQU0sZUFBZSxLQUNuRCxPQUFPO0dBQ0wsTUFBTTtHQUNOLFFBQVE7R0FDUixVQUFVO0VBQ1o7RUFHRixJQUFJLE1BQU0sY0FBYyxPQUFPLE1BQU0sYUFBYSxLQUNoRCxPQUFPO0dBQ0wsTUFBTTtHQUNOLFFBQVE7R0FDUixVQUFVO0VBQ1o7Q0FFSjtDQUVBLE9BQU87RUFDTCxNQUFNO0VBQ04sUUFBUTtFQUNSLFVBQVU7Q0FDWjtBQUNGO0FBSUEsU0FBZ0IsMkJBQXlDO0NBQ3ZELE9BQU8sSUFBSSxNQUM4QyxDQUFDLEdBQ3hELEVBQ0UsTUFBTTtFQUNKLE1BQU0sSUFBSSxNQUNSLHNJQUNGO0NBQ0YsRUFDRixDQUNGO0FBQ0Y7O0NBakcyRCxtQkFBQTtDQUNiLFdBQUEifQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EVENT_TYPES, ORGANIZATION_EVENT_TYPES } from "./events.js";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
|
-
|
|
3
|
+
// src/auth/audit-log/builders.ts
|
|
4
4
|
const createEvent = (base, data, trigger, location) => ({
|
|
5
5
|
...base,
|
|
6
6
|
eventId: randomUUID(),
|
|
@@ -302,7 +302,6 @@ const buildAuditEventCatalog = () => ({
|
|
|
302
302
|
member: buildMemberEvents(),
|
|
303
303
|
invitation: buildInvitationEvents()
|
|
304
304
|
});
|
|
305
|
-
//#endregion
|
|
306
305
|
export { buildAuditEventCatalog };
|
|
307
306
|
|
|
308
307
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlcnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F1dGgvYXVkaXQtbG9nL2J1aWxkZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcblxuaW1wb3J0IHtcbiAgdHlwZSBBY2NvdW50U25hcHNob3QsXG4gIHR5cGUgQXVkaXRFdmVudERhdGEsXG4gIHR5cGUgQXVkaXRMb2dFdmVudCxcbiAgdHlwZSBCdWlsZGVyLFxuICB0eXBlIEJ1aWxkZXJMb2NhdGlvbixcbiAgdHlwZSBCdWlsZGVyVHJpZ2dlcixcbiAgRVZFTlRfVFlQRVMsXG4gIHR5cGUgSW52aXRhdGlvblNuYXBzaG90LFxuICB0eXBlIE1lbWJlclNuYXBzaG90LFxuICBPUkdBTklaQVRJT05fRVZFTlRfVFlQRVMsXG4gIHR5cGUgT3JnYW5pemF0aW9uU25hcHNob3QsXG4gIHR5cGUgU2Vzc2lvblNuYXBzaG90LFxuICB0eXBlIFRlYW1TbmFwc2hvdCxcbiAgdHlwZSBVc2VyUHJvZmlsZUxpdGUsXG4gIHR5cGUgVXNlclNuYXBzaG90LFxuICB0eXBlIFZlcmlmaWNhdGlvblNuYXBzaG90LFxufSBmcm9tIFwiLi9ldmVudHNcIjtcblxuLy8g66qo65OgIOu5jOuNlCDqs7XthrUg7ZWE65OcKHRyaWdnZXJlZEJ5L3RyaWdnZXJDb250ZXh0LCBpcEFkZHJlc3MvY2l0eS9jb3VudHJ5L2NvdW50cnlDb2RlKeulvCDtlanshLHtlZzri6QuXG5jb25zdCBjcmVhdGVFdmVudCA9IChcbiAgYmFzZTogeyBldmVudEtleTogc3RyaW5nOyBldmVudFR5cGU6IHN0cmluZzsgZXZlbnREaXNwbGF5TmFtZT86IHN0cmluZyB9LFxuICBkYXRhOiBBdWRpdEV2ZW50RGF0YSxcbiAgdHJpZ2dlcjogQnVpbGRlclRyaWdnZXIsXG4gIGxvY2F0aW9uPzogQnVpbGRlckxvY2F0aW9uLFxuKTogQXVkaXRMb2dFdmVudCA9PiAoe1xuICAuLi5iYXNlLFxuICBldmVudElkOiByYW5kb21VVUlEKCksXG4gIGV2ZW50RGF0YToge1xuICAgIC4uLmRhdGEsXG4gICAgdHJpZ2dlcmVkQnk6IHRyaWdnZXIudHJpZ2dlcmVkQnksXG4gICAgdHJpZ2dlckNvbnRleHQ6IHRyaWdnZXIudHJpZ2dlckNvbnRleHQsXG4gIH0sXG4gIGlwQWRkcmVzczogbG9jYXRpb24/LmlwQWRkcmVzcyxcbiAgY2l0eTogbG9jYXRpb24/LmNpdHksXG4gIGNvdW50cnk6IGxvY2F0aW9uPy5jb3VudHJ5LFxuICBjb3VudHJ5Q29kZTogbG9jYXRpb24/LmNvdW50cnlDb2RlLFxufSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEFjY291bnQg67mM642UXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgdHlwZSBBY2NvdW50RXZlbnRCdWlsZGVycyA9IHtcbiAgdHJhY2tBY2NvdW50TGlua2luZzogQnVpbGRlcjxcbiAgICBbQWNjb3VudFNuYXBzaG90LCBVc2VyUHJvZmlsZUxpdGUsIEJ1aWxkZXJUcmlnZ2VyLCBCdWlsZGVyTG9jYXRpb24gfCB1bmRlZmluZWRdXG4gID47XG4gIHRyYWNrQWNjb3VudFVubGluazogQnVpbGRlcjxcbiAgICBbQWNjb3VudFNuYXBzaG90LCBVc2VyUHJvZmlsZUxpdGUsIEJ1aWxkZXJUcmlnZ2VyLCBCdWlsZGVyTG9jYXRpb24gfCB1bmRlZmluZWRdXG4gID47XG4gIHRyYWNrQWNjb3VudFBhc3N3b3JkQ2hhbmdlOiBCdWlsZGVyPFxuICAgIFtBY2NvdW50U25hcHNob3QsIFVzZXJQcm9maWxlTGl0ZSwgQnVpbGRlclRyaWdnZXIsIEJ1aWxkZXJMb2NhdGlvbiB8IHVuZGVmaW5lZF1cbiAgPjtcbn07XG5cbmNvbnN0IGJ1aWxkQWNjb3VudEV2ZW50ID0gKFxuICBldmVudFR5cGU6IHN0cmluZyxcbiAgZXZlbnREaXNwbGF5TmFtZTogc3RyaW5nLFxuICBhY2NvdW50OiBBY2NvdW50U25hcHNob3QsXG4gIHVzZXI6IFVzZXJQcm9maWxlTGl0ZSxcbiAgdHJpZ2dlcjogQnVpbGRlclRyaWdnZXIsXG4gIGxvY2F0aW9uOiBCdWlsZGVyTG9jYXRpb24gfCB1bmRlZmluZWQsXG4pOiBBdWRpdExvZ0V2ZW50ID0+XG4gIGNyZWF0ZUV2ZW50KFxuICAgIHsgZXZlbnRLZXk6IGFjY291bnQudXNlcklkLCBldmVudFR5cGUsIGV2ZW50RGlzcGxheU5hbWUgfSxcbiAgICB7XG4gICAgICB1c2VySWQ6IGFjY291bnQudXNlcklkLFxuICAgICAgdXNlckVtYWlsOiB1c2VyPy5lbWFpbCA/PyBcInVua25vd25cIixcbiAgICAgIHVzZXJOYW1lOiB1c2VyPy5uYW1lID8/IFwidW5rbm93blwiLFxuICAgICAgYWNjb3VudElkOiBhY2NvdW50LmlkLFxuICAgICAgcHJvdmlkZXJJZDogYWNjb3VudC5wcm92aWRlcklkLFxuICAgIH0sXG4gICAgdHJpZ2dlcixcbiAgICBsb2NhdGlvbixcbiAgKTtcblxuY29uc3QgYnVpbGRBY2NvdW50RXZlbnRzID0gKCk6IEFjY291bnRFdmVudEJ1aWxkZXJzID0+ICh7XG4gIHRyYWNrQWNjb3VudExpbmtpbmc6IChhY2NvdW50LCB1c2VyLCB0cmlnZ2VyLCBsb2NhdGlvbikgPT5cbiAgICBidWlsZEFjY291bnRFdmVudChcbiAgICAgIEVWRU5UX1RZUEVTLkFDQ09VTlRfTElOS0VELFxuICAgICAgYExpbmtlZCAke2FjY291bnQucHJvdmlkZXJJZH0gYWNjb3VudGAsXG4gICAgICBhY2NvdW50LFxuICAgICAgdXNlcixcbiAgICAgIHRyaWdnZXIsXG4gICAgICBsb2NhdGlvbixcbiAgICApLFxuICB0cmFja0FjY291bnRVbmxpbms6IChhY2NvdW50LCB1c2VyLCB0cmlnZ2VyLCBsb2NhdGlvbikgPT5cbiAgICBidWlsZEFjY291bnRFdmVudChcbiAgICAgIEVWRU5UX1RZUEVTLkFDQ09VTlRfVU5MSU5LRUQsXG4gICAgICBgVW5saW5rZWQgJHthY2NvdW50LnByb3ZpZGVySWR9IGFjY291bnRgLFxuICAgICAgYWNjb3VudCxcbiAgICAgIHVzZXIsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgbG9jYXRpb24sXG4gICAgKSxcbiAgdHJhY2tBY2NvdW50UGFzc3dvcmRDaGFuZ2U6IChhY2NvdW50LCB1c2VyLCB0cmlnZ2VyLCBsb2NhdGlvbikgPT5cbiAgICBidWlsZEFjY291bnRFdmVudChcbiAgICAgIEVWRU5UX1RZUEVTLlBBU1NXT1JEX0NIQU5HRUQsXG4gICAgICBcIlBhc3N3b3JkIGNoYW5nZWRcIixcbiAgICAgIGFjY291bnQsXG4gICAgICB1c2VyLFxuICAgICAgdHJpZ2dlcixcbiAgICAgIGxvY2F0aW9uLFxuICAgICksXG59KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2Vzc2lvbiDruYzrjZRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmV4cG9ydCB0eXBlIFNlc3Npb25FdmVudEJ1aWxkZXJzID0ge1xuICB0cmFja1VzZXJTaWduZWRJbjogQnVpbGRlcjxcbiAgICBbU2Vzc2lvblNuYXBzaG90LCBVc2VyUHJvZmlsZUxpdGUsIEJ1aWxkZXJUcmlnZ2VyLCBCdWlsZGVyTG9jYXRpb24gfCB1bmRlZmluZWRdXG4gID47XG4gIHRyYWNrVXNlclNpZ25lZE91dDogQnVpbGRlcjxcbiAgICBbU2Vzc2lvblNuYXBzaG90LCBVc2VyUHJvZmlsZUxpdGUsIEJ1aWxkZXJUcmlnZ2VyLCBCdWlsZGVyTG9jYXRpb24gfCB1bmRlZmluZWRdXG4gID47XG4gIHRyYWNrU2Vzc2lvbkNyZWF0ZWQ6IEJ1aWxkZXI8XG4gICAgW1Nlc3Npb25TbmFwc2hvdCwgVXNlclByb2ZpbGVMaXRlLCBCdWlsZGVyVHJpZ2dlciwgQnVpbGRlckxvY2F0aW9uIHwgdW5kZWZpbmVkXVxuICA+O1xuICB0cmFja1Nlc3Npb25SZXZva2VkOiBCdWlsZGVyPFxuICAgIFtTZXNzaW9uU25hcHNob3QsIFVzZXJQcm9maWxlTGl0ZSwgQnVpbGRlclRyaWdnZXIsIEJ1aWxkZXJMb2NhdGlvbiB8IHVuZGVmaW5lZF1cbiAgPjtcbiAgdHJhY2tTZXNzaW9uUmV2b2tlZEFsbDogQnVpbGRlcjxbU2Vzc2lvblNuYXBzaG90LCBVc2VyUHJvZmlsZUxpdGUsIEJ1aWxkZXJUcmlnZ2VyXT47XG4gIHRyYWNrVXNlckltcGVyc29uYXRlZDogQnVpbGRlcjxcbiAgICBbU2Vzc2lvblNuYXBzaG90LCBVc2VyUHJvZmlsZUxpdGUsIFVzZXJQcm9maWxlTGl0ZSwgQnVpbGRlclRyaWdnZXIsIEJ1aWxkZXJMb2NhdGlvbiB8IHVuZGVmaW5lZF1cbiAgPjtcbiAgdHJhY2tVc2VySW1wZXJzb25hdGlvblN0b3A6IEJ1aWxkZXI8XG4gICAgW1Nlc3Npb25TbmFwc2hvdCwgVXNlclByb2ZpbGVMaXRlLCBVc2VyUHJvZmlsZUxpdGUsIEJ1aWxkZXJUcmlnZ2VyLCBCdWlsZGVyTG9jYXRpb24gfCB1bmRlZmluZWRdXG4gID47XG4gIHRyYWNrRW1haWxWZXJpZmljYXRpb25TZW50OiBCdWlsZGVyPFxuICAgIFtTZXNzaW9uU25hcHNob3QsIHsgbmFtZT86IHN0cmluZzsgZW1haWw/OiBzdHJpbmcgfSwgQnVpbGRlclRyaWdnZXJdXG4gID47XG4gIHRyYWNrRW1haWxTaWduSW5BdHRlbXB0OiBCdWlsZGVyPFxuICAgIFtcbiAgICAgIHsgZW1haWw6IHN0cmluZzsgbG9naW5NZXRob2Q6IHN0cmluZyB8IG51bGwgfSxcbiAgICAgIFVzZXJQcm9maWxlTGl0ZSxcbiAgICAgIEJ1aWxkZXJUcmlnZ2VyLFxuICAgICAgQnVpbGRlckxvY2F0aW9uIHwgdW5kZWZpbmVkLFxuICAgIF1cbiAgPjtcbiAgdHJhY2tTb2NpYWxTaWduSW5BdHRlbXB0OiBCdWlsZGVyPFxuICAgIFt7IGxvZ2luTWV0aG9kOiBzdHJpbmcgfCBudWxsIH0sIFVzZXJQcm9maWxlTGl0ZSwgQnVpbGRlclRyaWdnZXIsIEJ1aWxkZXJMb2NhdGlvbiB8IHVuZGVmaW5lZF1cbiAgPjtcbiAgdHJhY2tTb2NpYWxTaWduSW5SZWRpcmVjdGlvbkF0dGVtcHQ6IEJ1aWxkZXI8XG4gICAgW3sgbG9naW5NZXRob2Q6IHN0cmluZyB8IG51bGwgfSwgVXNlclByb2ZpbGVMaXRlLCBCdWlsZGVyVHJpZ2dlciwgQnVpbGRlckxvY2F0aW9uIHwgdW5kZWZpbmVkXVxuICA+O1xufTtcblxuY29uc3Qgc2Vzc2lvbkxpZmVjeWNsZURhdGEgPSAoc2Vzc2lvbjogU2Vzc2lvblNuYXBzaG90LCB1c2VyOiBVc2VyUHJvZmlsZUxpdGUpID0+ICh7XG4gIHVzZXJJZDogc2Vzc2lvbi51c2VySWQsXG4gIHVzZXJOYW1lOiB1c2VyPy5uYW1lID8/IFwidW5rbm93blwiLFxuICB1c2VyRW1haWw6IHVzZXI/LmVtYWlsID8/IFwidW5rbm93blwiLFxuICBzZXNzaW9uSWQ6IHNlc3Npb24uaWQsXG4gIGxvZ2luTWV0aG9kOiBzZXNzaW9uLmxvZ2luTWV0aG9kID8/IFwidW5rbm93blwiLFxuICB1c2VyQWdlbnQ6IHNlc3Npb24udXNlckFnZW50LFxufSk7XG5cbmNvbnN0IGJ1aWxkU2Vzc2lvbkxpZmVjeWNsZUV2ZW50ID0gKFxuICBldmVudFR5cGU6IHN0cmluZyxcbiAgZXZlbnREaXNwbGF5TmFtZTogc3RyaW5nLFxuICBzZXNzaW9uOiBTZXNzaW9uU25hcHNob3QsXG4gIHVzZXI6IFVzZXJQcm9maWxlTGl0ZSxcbiAgdHJpZ2dlcjogQnVpbGRlclRyaWdnZXIsXG4gIGxvY2F0aW9uOiBCdWlsZGVyTG9jYXRpb24gfCB1bmRlZmluZWQsXG4pOiBBdWRpdExvZ0V2ZW50ID0+XG4gIGNyZWF0ZUV2ZW50KFxuICAgIHsgZXZlbnRLZXk6IHNlc3Npb24udXNlcklkLCBldmVudFR5cGUsIGV2ZW50RGlzcGxheU5hbWUgfSxcbiAgICBzZXNzaW9uTGlmZWN5Y2xlRGF0YShzZXNzaW9uLCB1c2VyKSxcbiAgICB0cmlnZ2VyLFxuICAgIGxvY2F0aW9uLFxuICApO1xuXG5jb25zdCBidWlsZEltcGVyc29uYXRpb25FdmVudCA9IChcbiAgZXZlbnRUeXBlOiBzdHJpbmcsXG4gIGV2ZW50RGlzcGxheU5hbWU6IHN0cmluZyxcbiAgc2Vzc2lvbjogU2Vzc2lvblNuYXBzaG90LFxuICB1c2VyOiBVc2VyUHJvZmlsZUxpdGUsXG4gIGltcGVyc29uYXRvcjogVXNlclByb2ZpbGVMaXRlLFxuICB0cmlnZ2VyOiBCdWlsZGVyVHJpZ2dlcixcbiAgbG9jYXRpb246IEJ1aWxkZXJMb2NhdGlvbiB8IHVuZGVmaW5lZCxcbik6IEF1ZGl0TG9nRXZlbnQgPT5cbiAgY3JlYXRlRXZlbnQoXG4gICAgeyBldmVudEtleTogc2Vzc2lvbi51c2VySWQsIGV2ZW50VHlwZSwgZXZlbnREaXNwbGF5TmFtZSB9LFxuICAgIHtcbiAgICAgIC4uLnNlc3Npb25MaWZlY3ljbGVEYXRhKHNlc3Npb24sIHVzZXIpLFxuICAgICAgaW1wZXJzb25hdGVkQnk6IGltcGVyc29uYXRvcj8ubmFtZSA/PyBpbXBlcnNvbmF0b3I/LmVtYWlsID8/IHNlc3Npb24uaW1wZXJzb25hdGVkQnksXG4gICAgICBpbXBlcnNvbmF0ZWRCeUlkOiBzZXNzaW9uLmltcGVyc29uYXRlZEJ5LFxuICAgIH0sXG4gICAgdHJpZ2dlcixcbiAgICBsb2NhdGlvbixcbiAgKTtcblxuY29uc3QgU0lHTl9JTl9GQUlMRURfRElTUExBWSA9IFwiVXNlciBzaWduLWluIGF0dGVtcHQgZmFpbGVkXCI7XG5cbmNvbnN0IGJ1aWxkU2Vzc2lvbkV2ZW50cyA9ICgpOiBTZXNzaW9uRXZlbnRCdWlsZGVycyA9PiAoe1xuICB0cmFja1VzZXJTaWduZWRJbjogKHNlc3Npb24sIHVzZXIsIHRyaWdnZXIsIGxvY2F0aW9uKSA9PlxuICAgIGJ1aWxkU2Vzc2lvbkxpZmVjeWNsZUV2ZW50KFxuICAgICAgRVZFTlRfVFlQRVMuVVNFUl9TSUdORURfSU4sXG4gICAgICBgU2lnbmVkIGluIHZpYSAke3Nlc3Npb24ubG9naW5NZXRob2QgPz8gXCJ1bmtub3duXCJ9YCxcbiAgICAgIHNlc3Npb24sXG4gICAgICB1c2VyLFxuICAgICAgdHJpZ2dlcixcbiAgICAgIGxvY2F0aW9uLFxuICAgICksXG4gIHRyYWNrVXNlclNpZ25lZE91dDogKHNlc3Npb24sIHVzZXIsIHRyaWdnZXIsIGxvY2F0aW9uKSA9PlxuICAgIGJ1aWxkU2Vzc2lvbkxpZmVjeWNsZUV2ZW50KFxuICAgICAgRVZFTlRfVFlQRVMuVVNFUl9TSUdORURfT1VULFxuICAgICAgXCJVc2VyIHNpZ25lZCBvdXRcIixcbiAgICAgIHNlc3Npb24sXG4gICAgICB1c2VyLFxuICAgICAgdHJpZ2dlcixcbiAgICAgIGxvY2F0aW9uLFxuICAgICksXG4gIHRyYWNrU2Vzc2lvbkNyZWF0ZWQ6IChzZXNzaW9uLCB1c2VyLCB0cmlnZ2VyLCBsb2NhdGlvbikgPT5cbiAgICBidWlsZFNlc3Npb25MaWZlY3ljbGVFdmVudChcbiAgICAgIEVWRU5UX1RZUEVTLlNFU1NJT05fQ1JFQVRFRCxcbiAgICAgIFwiU2Vzc2lvbiBjcmVhdGVkXCIsXG4gICAgICBzZXNzaW9uLFxuICAgICAgdXNlcixcbiAgICAgIHRyaWdnZXIsXG4gICAgICBsb2NhdGlvbixcbiAgICApLFxuICB0cmFja1Nlc3Npb25SZXZva2VkOiAoc2Vzc2lvbiwgdXNlciwgdHJpZ2dlciwgbG9jYXRpb24pID0+XG4gICAgYnVpbGRTZXNzaW9uTGlmZWN5Y2xlRXZlbnQoXG4gICAgICBFVkVOVF9UWVBFUy5TRVNTSU9OX1JFVk9LRUQsXG4gICAgICBcIlNlc3Npb24gcmV2b2tlZFwiLFxuICAgICAgc2Vzc2lvbixcbiAgICAgIHVzZXIsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgbG9jYXRpb24sXG4gICAgKSxcbiAgdHJhY2tTZXNzaW9uUmV2b2tlZEFsbDogKHNlc3Npb24sIHVzZXIsIHRyaWdnZXIpID0+XG4gICAgY3JlYXRlRXZlbnQoXG4gICAgICB7XG4gICAgICAgIGV2ZW50S2V5OiBzZXNzaW9uLnVzZXJJZCxcbiAgICAgICAgZXZlbnRUeXBlOiBFVkVOVF9UWVBFUy5BTExfU0VTU0lPTlNfUkVWT0tFRCxcbiAgICAgICAgZXZlbnREaXNwbGF5TmFtZTogXCJBbGwgc2Vzc2lvbnMgcmV2b2tlZFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uLnVzZXJJZCxcbiAgICAgICAgdXNlck5hbWU6IHVzZXI/Lm5hbWUgPz8gXCJ1bmtub3duXCIsXG4gICAgICAgIHVzZXJFbWFpbDogdXNlcj8uZW1haWwgPz8gXCJ1bmtub3duXCIsXG4gICAgICB9LFxuICAgICAgdHJpZ2dlcixcbiAgICApLFxuICB0cmFja1VzZXJJbXBlcnNvbmF0ZWQ6IChzZXNzaW9uLCB1c2VyLCBpbXBlcnNvbmF0b3IsIHRyaWdnZXIsIGxvY2F0aW9uKSA9PlxuICAgIGJ1aWxkSW1wZXJzb25hdGlvbkV2ZW50KFxuICAgICAgRVZFTlRfVFlQRVMuVVNFUl9JTVBFUlNPTkFURUQsXG4gICAgICBcIlVzZXIgaW1wZXJzb25hdGVkXCIsXG4gICAgICBzZXNzaW9uLFxuICAgICAgdXNlcixcbiAgICAgIGltcGVyc29uYXRvcixcbiAgICAgIHRyaWdnZXIsXG4gICAgICBsb2NhdGlvbixcbiAgICApLFxuICB0cmFja1VzZXJJbXBlcnNvbmF0aW9uU3RvcDogKHNlc3Npb24sIHVzZXIsIGltcGVyc29uYXRvciwgdHJpZ2dlciwgbG9jYXRpb24pID0+XG4gICAgYnVpbGRJbXBlcnNvbmF0aW9uRXZlbnQoXG4gICAgICBFVkVOVF9UWVBFUy5VU0VSX0lNUEVSU09OQVRFRF9TVE9QUEVELFxuICAgICAgXCJVc2VyIGltcGVyc29uYXRpb24gc3RvcHBlZFwiLFxuICAgICAgc2Vzc2lvbixcbiAgICAgIHVzZXIsXG4gICAgICBpbXBlcnNvbmF0b3IsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgbG9jYXRpb24sXG4gICAgKSxcbiAgdHJhY2tFbWFpbFZlcmlmaWNhdGlvblNlbnQ6IChzZXNzaW9uLCB1c2VyLCB0cmlnZ2VyKSA9PlxuICAgIGNyZWF0ZUV2ZW50KFxuICAgICAge1xuICAgICAgICBldmVudEtleTogc2Vzc2lvbi51c2VySWQsXG4gICAgICAgIGV2ZW50VHlwZTogRVZFTlRfVFlQRVMuRU1BSUxfVkVSSUZJQ0FUSU9OX1NFTlQsXG4gICAgICAgIGV2ZW50RGlzcGxheU5hbWU6IFwiVmVyaWZpY2F0aW9uIGVtYWlsIHNlbnRcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbi51c2VySWQsXG4gICAgICAgIHVzZXJOYW1lOiB1c2VyLm5hbWUsXG4gICAgICAgIHVzZXJFbWFpbDogdXNlci5lbWFpbCxcbiAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uLmlkLFxuICAgICAgfSxcbiAgICAgIHRyaWdnZXIsXG4gICAgKSxcbiAgLy8g7KO87J2YOiDquLDsobQg64+Z7J6RIOycoOyngCDigJQgYG5hbWVOYW1lYCDsmKTtg4Ag7ZWE65Oc66qF64+EIOq3uOuMgOuhnCDrs7TsobTtlZzri6QuXG4gIHRyYWNrRW1haWxTaWduSW5BdHRlbXB0OiAoYXR0ZW1wdCwgdXNlciwgdHJpZ2dlciwgbG9jYXRpb24pID0+XG4gICAgY3JlYXRlRXZlbnQoXG4gICAgICB7XG4gICAgICAgIGV2ZW50S2V5OiB1c2VyPy5pZCA/PyBcInVua25vd25cIixcbiAgICAgICAgZXZlbnRUeXBlOiBFVkVOVF9UWVBFUy5VU0VSX1NJR05fSU5fRkFJTEVELFxuICAgICAgICBldmVudERpc3BsYXlOYW1lOiBTSUdOX0lOX0ZBSUxFRF9ESVNQTEFZLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdXNlcklkOiB1c2VyPy5pZCA/PyBcInVua25vd25cIixcbiAgICAgICAgbmFtZU5hbWU6IHVzZXI/Lm5hbWUgPz8gXCJ1bmtub3duXCIsXG4gICAgICAgIHVzZXJFbWFpbDogYXR0ZW1wdC5lbWFpbCxcbiAgICAgICAgbG9naW5NZXRob2Q6IGF0dGVtcHQubG9naW5NZXRob2QsXG4gICAgICB9LFxuICAgICAgeyB0cmlnZ2VyZWRCeTogdXNlcj8uaWQgPz8gdHJpZ2dlci50cmlnZ2VyZWRCeSwgdHJpZ2dlckNvbnRleHQ6IHRyaWdnZXIudHJpZ2dlckNvbnRleHQgfSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICksXG4gIHRyYWNrU29jaWFsU2lnbkluQXR0ZW1wdDogKGF0dGVtcHQsIHVzZXIsIHRyaWdnZXIsIGxvY2F0aW9uKSA9PlxuICAgIGNyZWF0ZUV2ZW50KFxuICAgICAge1xuICAgICAgICBldmVudEtleTogdXNlcj8uaWQgPz8gXCJ1bmtub3duXCIsXG4gICAgICAgIGV2ZW50VHlwZTogRVZFTlRfVFlQRVMuVVNFUl9TSUdOX0lOX0ZBSUxFRCxcbiAgICAgICAgZXZlbnREaXNwbGF5TmFtZTogU0lHTl9JTl9GQUlMRURfRElTUExBWSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHVzZXJJZDogdXNlcj8uaWQgPz8gXCJ1bmtub3duXCIsXG4gICAgICAgIHVzZXJOYW1lOiB1c2VyPy5uYW1lID8/IFwidW5rbm93blwiLFxuICAgICAgICB1c2VyRW1haWw6IHVzZXI/LmVtYWlsID8/IFwidW5rbm93blwiLFxuICAgICAgICBsb2dpbk1ldGhvZDogYXR0ZW1wdC5sb2dpbk1ldGhvZCxcbiAgICAgIH0sXG4gICAgICB7IHRyaWdnZXJlZEJ5OiB1c2VyPy5pZCA/PyB0cmlnZ2VyLnRyaWdnZXJlZEJ5LCB0cmlnZ2VyQ29udGV4dDogdHJpZ2dlci50cmlnZ2VyQ29udGV4dCB9LFxuICAgICAgbG9jYXRpb24sXG4gICAgKSxcbiAgLy8g7KO87J2YOiDquLDsobQg64+Z7J6RIOycoOyngCDigJQgdXNlckVtYWlsIOqwkuydtCB1c2VyPy5pZOuhnCDshKTsoJXrkJjripQg6riw7KG0IOuPmeyekeuPhCDqt7jrjIDroZwg67O07KG07ZWc64ukLlxuICB0cmFja1NvY2lhbFNpZ25JblJlZGlyZWN0aW9uQXR0ZW1wdDogKGF0dGVtcHQsIHVzZXIsIHRyaWdnZXIsIGxvY2F0aW9uKSA9PlxuICAgIGNyZWF0ZUV2ZW50KFxuICAgICAge1xuICAgICAgICBldmVudEtleTogdXNlcj8uaWQgPz8gXCJ1bmtub3duXCIsXG4gICAgICAgIGV2ZW50VHlwZTogRVZFTlRfVFlQRVMuVVNFUl9TSUdOX0lOX0ZBSUxFRCxcbiAgICAgICAgZXZlbnREaXNwbGF5TmFtZTogU0lHTl9JTl9GQUlMRURfRElTUExBWSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHVzZXJJZDogdXNlcj8uaWQgPz8gXCJ1bmtub3duXCIsXG4gICAgICAgIHVzZXJOYW1lOiB1c2VyPy5uYW1lID8/IFwidW5rbm93blwiLFxuICAgICAgICB1c2VyRW1haWw6IHVzZXI/LmlkID8/IFwidW5rbm93blwiLFxuICAgICAgICBsb2dpbk1ldGhvZDogYXR0ZW1wdC5sb2dpbk1ldGhvZCxcbiAgICAgIH0sXG4gICAgICB0cmlnZ2VyLFxuICAgICAgbG9jYXRpb24sXG4gICAgKSxcbn0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVc2VyIOu5jOuNlFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IHR5cGUgVXNlckV2ZW50QnVpbGRlcnMgPSB7XG4gIHRyYWNrVXNlclNpZ25lZFVwOiBCdWlsZGVyPFtVc2VyU25hcHNob3QsIEJ1aWxkZXJUcmlnZ2VyLCBCdWlsZGVyTG9jYXRpb24gfCB1bmRlZmluZWRdPjtcbiAgdHJhY2tVc2VyRGVsZXRlZDogQnVpbGRlcjxbVXNlclNuYXBzaG90LCBCdWlsZGVyVHJpZ2dlciwgQnVpbGRlckxvY2F0aW9uIHwgdW5kZWZpbmVkXT47XG4gIHRyYWNrVXNlclByb2ZpbGVVcGRhdGVkOiBCdWlsZGVyPFxuICAgIFtVc2VyU25hcHNob3QsIHN0cmluZ1tdLCBCdWlsZGVyVHJpZ2dlciwgQnVpbGRlckxvY2F0aW9uIHwgdW5kZWZpbmVkXVxuICA+O1xuICB0cmFja1VzZXJQcm9maWxlSW1hZ2VVcGRhdGVkOiBCdWlsZGVyPFxuICAgIFtVc2VyU25hcHNob3QsIEJ1aWxkZXJUcmlnZ2VyLCBCdWlsZGVyTG9jYXRpb24gfCB1bmRlZmluZWRdXG4gID47XG4gIHRyYWNrVXNlckJhbm5lZDogQnVpbGRlcjxbVXNlclNuYXBzaG90LCBCdWlsZGVyVHJpZ2dlciwgQnVpbGRlckxvY2F0aW9uIHwgdW5kZWZpbmVkXT47XG4gIHRyYWNrVXNlclVuQmFubmVkOiBCdWlsZGVyPFtVc2VyU25hcHNob3QsIEJ1aWxkZXJUcmlnZ2VyLCBCdWlsZGVyTG9jYXRpb24gfCB1bmRlZmluZWRdPjtcbiAgdHJhY2tVc2VyRW1haWxWZXJpZmllZDogQnVpbGRlcjxbVXNlclNuYXBzaG90LCBCdWlsZGVyVHJpZ2dlciwgQnVpbGRlckxvY2F0aW9uIHwgdW5kZWZpbmVkXT47XG59O1xuXG5jb25zdCB1c2VySWRlbnRpdHlEYXRhID0gKHVzZXI6IFVzZXJTbmFwc2hvdCkgPT4gKHtcbiAgdXNlcklkOiB1c2VyLmlkLFxuICB1c2VyRW1haWw6IHVzZXIuZW1haWwsXG4gIHVzZXJOYW1lOiB1c2VyLm5hbWUsXG59KTtcblxuY29uc3QgYnVpbGRVc2VyRXZlbnQgPSAoXG4gIGV2ZW50VHlwZTogc3RyaW5nLFxuICBldmVudERpc3BsYXlOYW1lOiBzdHJpbmcsXG4gIHVzZXI6IFVzZXJTbmFwc2hvdCxcbiAgdHJpZ2dlcjogQnVpbGRlclRyaWdnZXIsXG4gIGxvY2F0aW9uOiBCdWlsZGVyTG9jYXRpb24gfCB1bmRlZmluZWQsXG4gIGV4dHJhPzogQXVkaXRFdmVudERhdGEsXG4pOiBBdWRpdExvZ0V2ZW50ID0+XG4gIGNyZWF0ZUV2ZW50KFxuICAgIHsgZXZlbnRLZXk6IHVzZXIuaWQsIGV2ZW50VHlwZSwgZXZlbnREaXNwbGF5TmFtZSB9LFxuICAgIHsgLi4udXNlcklkZW50aXR5RGF0YSh1c2VyKSwgLi4uZXh0cmEgfSxcbiAgICB0cmlnZ2VyLFxuICAgIGxvY2F0aW9uLFxuICApO1xuXG5jb25zdCBidWlsZFVzZXJFdmVudHMgPSAoKTogVXNlckV2ZW50QnVpbGRlcnMgPT4gKHtcbiAgdHJhY2tVc2VyU2lnbmVkVXA6ICh1c2VyLCB0cmlnZ2VyLCBsb2NhdGlvbikgPT5cbiAgICBidWlsZFVzZXJFdmVudChcbiAgICAgIEVWRU5UX1RZUEVTLlVTRVJfQ1JFQVRFRCxcbiAgICAgIGAke3VzZXIubmFtZSB8fCB1c2VyLmVtYWlsfSBzaWduZWQgdXBgLFxuICAgICAgdXNlcixcbiAgICAgIHRyaWdnZXIsXG4gICAgICBsb2NhdGlvbixcbiAgICApLFxuICB0cmFja1VzZXJEZWxldGVkOiAodXNlciwgdHJpZ2dlciwgbG9jYXRpb24pID0+XG4gICAgYnVpbGRVc2VyRXZlbnQoRVZFTlRfVFlQRVMuVVNFUl9ERUxFVEVELCBcIlVzZXIgZGVsZXRlZFwiLCB1c2VyLCB0cmlnZ2VyLCBsb2NhdGlvbiksXG4gIHRyYWNrVXNlclByb2ZpbGVVcGRhdGVkOiAodXNlciwgdXBkYXRlZEZpZWxkcywgdHJpZ2dlciwgbG9jYXRpb24pID0+XG4gICAgYnVpbGRVc2VyRXZlbnQoRVZFTlRfVFlQRVMuUFJPRklMRV9VUERBVEVELCBcIlByb2ZpbGUgdXBkYXRlZFwiLCB1c2VyLCB0cmlnZ2VyLCBsb2NhdGlvbiwge1xuICAgICAgdXBkYXRlZEZpZWxkcyxcbiAgICB9KSxcbiAgdHJhY2tVc2VyUHJvZmlsZUltYWdlVXBkYXRlZDogKHVzZXIsIHRyaWdnZXIsIGxvY2F0aW9uKSA9PlxuICAgIGJ1aWxkVXNlckV2ZW50KFxuICAgICAgRVZFTlRfVFlQRVMuUFJPRklMRV9JTUFHRV9VUERBVEVELFxuICAgICAgXCJQcm9maWxlIGltYWdlIHVwZGF0ZWRcIixcbiAgICAgIHVzZXIsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgbG9jYXRpb24sXG4gICAgKSxcbiAgdHJhY2tVc2VyQmFubmVkOiAodXNlciwgdHJpZ2dlciwgbG9jYXRpb24pID0+IHtcbiAgICBjb25zdCByZWFzb25TdWZmaXggPSB1c2VyLmJhblJlYXNvbiA/IGA6ICR7dXNlci5iYW5SZWFzb259YCA6IFwiXCI7XG4gICAgY29uc3QgZXhwaXJlc1N1ZmZpeCA9IHVzZXIuYmFuRXhwaXJlcyA/IGAgKHVudGlsICR7dXNlci5iYW5FeHBpcmVzLnRvSVNPU3RyaW5nKCl9KWAgOiBcIlwiO1xuICAgIHJldHVybiBidWlsZFVzZXJFdmVudChcbiAgICAgIEVWRU5UX1RZUEVTLlVTRVJfQkFOTkVELFxuICAgICAgYFVzZXIgYmFubmVkJHtyZWFzb25TdWZmaXh9JHtleHBpcmVzU3VmZml4fWAsXG4gICAgICB1c2VyLFxuICAgICAgdHJpZ2dlcixcbiAgICAgIGxvY2F0aW9uLFxuICAgICAge1xuICAgICAgICBiYW5uZWQ6IHVzZXIuYmFubmVkLFxuICAgICAgICBiYW5SZWFzb246IHVzZXIuYmFuUmVhc29uLFxuICAgICAgICBiYW5FeHBpcmVzOiB1c2VyLmJhbkV4cGlyZXMsXG4gICAgICB9LFxuICAgICk7XG4gIH0sXG4gIHRyYWNrVXNlclVuQmFubmVkOiAodXNlciwgdHJpZ2dlciwgbG9jYXRpb24pID0+XG4gICAgYnVpbGRVc2VyRXZlbnQoRVZFTlRfVFlQRVMuVVNFUl9VTkJBTk5FRCwgXCJVc2VyIHVuYmFubmVkXCIsIHVzZXIsIHRyaWdnZXIsIGxvY2F0aW9uLCB7XG4gICAgICBiYW5uZWQ6IHVzZXIuYmFubmVkLFxuICAgIH0pLFxuICB0cmFja1VzZXJFbWFpbFZlcmlmaWVkOiAodXNlciwgdHJpZ2dlciwgbG9jYXRpb24pID0+XG4gICAgYnVpbGRVc2VyRXZlbnQoRVZFTlRfVFlQRVMuRU1BSUxfVkVSSUZJRUQsIFwiRW1haWwgdmVyaWZpZWRcIiwgdXNlciwgdHJpZ2dlciwgbG9jYXRpb24pLFxufSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFZlcmlmaWNhdGlvbiDruYzrjZRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmV4cG9ydCB0eXBlIFZlcmlmaWNhdGlvbkV2ZW50QnVpbGRlcnMgPSB7XG4gIHRyYWNrUGFzc3dvcmRSZXNldFJlcXVlc3Q6IEJ1aWxkZXI8XG4gICAgW1ZlcmlmaWNhdGlvblNuYXBzaG90LCBVc2VyUHJvZmlsZUxpdGUsIEJ1aWxkZXJUcmlnZ2VyLCBCdWlsZGVyTG9jYXRpb24gfCB1bmRlZmluZWRdXG4gID47XG4gIHRyYWNrUGFzc3dvcmRSZXNldFJlcXVlc3RDb21wbGV0aW9uOiBCdWlsZGVyPFxuICAgIFtWZXJpZmljYXRpb25TbmFwc2hvdCwgVXNlclByb2ZpbGVMaXRlLCBCdWlsZGVyVHJpZ2dlciwgQnVpbGRlckxvY2F0aW9uIHwgdW5kZWZpbmVkXVxuICA+O1xufTtcblxuY29uc3QgYnVpbGRWZXJpZmljYXRpb25FdmVudCA9IChcbiAgZXZlbnRUeXBlOiBzdHJpbmcsXG4gIGV2ZW50RGlzcGxheU5hbWU6IHN0cmluZyxcbiAgdmVyaWZpY2F0aW9uOiBWZXJpZmljYXRpb25TbmFwc2hvdCxcbiAgdXNlcjogVXNlclByb2ZpbGVMaXRlLFxuICB0cmlnZ2VyOiBCdWlsZGVyVHJpZ2dlcixcbiAgbG9jYXRpb246IEJ1aWxkZXJMb2NhdGlvbiB8IHVuZGVmaW5lZCxcbik6IEF1ZGl0TG9nRXZlbnQgPT5cbiAgY3JlYXRlRXZlbnQoXG4gICAgeyBldmVudEtleTogdmVyaWZpY2F0aW9uLnZhbHVlLCBldmVudFR5cGUsIGV2ZW50RGlzcGxheU5hbWUgfSxcbiAgICB7XG4gICAgICB1c2VySWQ6IHZlcmlmaWNhdGlvbi52YWx1ZSxcbiAgICAgIHVzZXJOYW1lOiB1c2VyPy5uYW1lID8/IFwidW5rbm93blwiLFxuICAgICAgdXNlckVtYWlsOiB1c2VyPy5lbWFpbCA/PyBcInVua25vd25cIixcbiAgICB9LFxuICAgIHRyaWdnZXIsXG4gICAgbG9jYXRpb24sXG4gICk7XG5cbmNvbnN0IGJ1aWxkVmVyaWZpY2F0aW9uRXZlbnRzID0gKCk6IFZlcmlmaWNhdGlvbkV2ZW50QnVpbGRlcnMgPT4gKHtcbiAgdHJhY2tQYXNzd29yZFJlc2V0UmVxdWVzdDogKHZlcmlmaWNhdGlvbiwgdXNlciwgdHJpZ2dlciwgbG9jYXRpb24pID0+XG4gICAgYnVpbGRWZXJpZmljYXRpb25FdmVudChcbiAgICAgIEVWRU5UX1RZUEVTLlBBU1NXT1JEX1JFU0VUX1JFUVVFU1RFRCxcbiAgICAgIFwiUGFzc3dvcmQgcmVzZXQgcmVxdWVzdGVkXCIsXG4gICAgICB2ZXJpZmljYXRpb24sXG4gICAgICB1c2VyLFxuICAgICAgdHJpZ2dlcixcbiAgICAgIGxvY2F0aW9uLFxuICAgICksXG4gIHRyYWNrUGFzc3dvcmRSZXNldFJlcXVlc3RDb21wbGV0aW9uOiAodmVyaWZpY2F0aW9uLCB1c2VyLCB0cmlnZ2VyLCBsb2NhdGlvbikgPT5cbiAgICBidWlsZFZlcmlmaWNhdGlvbkV2ZW50KFxuICAgICAgRVZFTlRfVFlQRVMuUEFTU1dPUkRfUkVTRVRfQ09NUExFVEVELFxuICAgICAgXCJQYXNzd29yZCByZXNldCBjb21wbGV0ZWRcIixcbiAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgIHVzZXIsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgbG9jYXRpb24sXG4gICAgKSxcbn0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPcmdhbml6YXRpb24gLyBUZWFtIC8gTWVtYmVyIC8gSW52aXRhdGlvbiDruYzrjZRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmNvbnN0IG9yZ2FuaXphdGlvbklkZW50aXR5RGF0YSA9IChvcmdhbml6YXRpb246IE9yZ2FuaXphdGlvblNuYXBzaG90KSA9PiAoe1xuICBvcmdhbml6YXRpb25JZDogb3JnYW5pemF0aW9uLmlkLFxuICBvcmdhbml6YXRpb25TbHVnOiBvcmdhbml6YXRpb24uc2x1ZyxcbiAgb3JnYW5pemF0aW9uTmFtZTogb3JnYW5pemF0aW9uLm5hbWUsXG59KTtcblxuZXhwb3J0IHR5cGUgT3JnYW5pemF0aW9uRXZlbnRCdWlsZGVycyA9IHtcbiAgdHJhY2tPcmdhbml6YXRpb25DcmVhdGVkOiBCdWlsZGVyPFtPcmdhbml6YXRpb25TbmFwc2hvdCwgQnVpbGRlclRyaWdnZXJdPjtcbiAgdHJhY2tPcmdhbml6YXRpb25VcGRhdGVkOiBCdWlsZGVyPFtPcmdhbml6YXRpb25TbmFwc2hvdCwgQnVpbGRlclRyaWdnZXJdPjtcbn07XG5cbmNvbnN0IGJ1aWxkT3JnYW5pemF0aW9uRXZlbnQgPSAoXG4gIGV2ZW50VHlwZTogc3RyaW5nLFxuICBldmVudERpc3BsYXlOYW1lOiBzdHJpbmcsXG4gIG9yZ2FuaXphdGlvbjogT3JnYW5pemF0aW9uU25hcHNob3QsXG4gIHRyaWdnZXI6IEJ1aWxkZXJUcmlnZ2VyLFxuKTogQXVkaXRMb2dFdmVudCA9PlxuICBjcmVhdGVFdmVudChcbiAgICB7IGV2ZW50S2V5OiBvcmdhbml6YXRpb24uaWQsIGV2ZW50VHlwZSwgZXZlbnREaXNwbGF5TmFtZSB9LFxuICAgIG9yZ2FuaXphdGlvbklkZW50aXR5RGF0YShvcmdhbml6YXRpb24pLFxuICAgIHRyaWdnZXIsXG4gICk7XG5cbmNvbnN0IGJ1aWxkT3JnYW5pemF0aW9uRXZlbnRzID0gKCk6IE9yZ2FuaXphdGlvbkV2ZW50QnVpbGRlcnMgPT4gKHtcbiAgdHJhY2tPcmdhbml6YXRpb25DcmVhdGVkOiAob3JnYW5pemF0aW9uLCB0cmlnZ2VyKSA9PlxuICAgIGJ1aWxkT3JnYW5pemF0aW9uRXZlbnQoXG4gICAgICBPUkdBTklaQVRJT05fRVZFTlRfVFlQRVMuT1JHQU5JWkFUSU9OX0NSRUFURUQsXG4gICAgICBcIk9yZ2FuaXphdGlvbiBDcmVhdGVkXCIsXG4gICAgICBvcmdhbml6YXRpb24sXG4gICAgICB0cmlnZ2VyLFxuICAgICksXG4gIHRyYWNrT3JnYW5pemF0aW9uVXBkYXRlZDogKG9yZ2FuaXphdGlvbiwgdHJpZ2dlcikgPT5cbiAgICBidWlsZE9yZ2FuaXphdGlvbkV2ZW50KFxuICAgICAgT1JHQU5JWkFUSU9OX0VWRU5UX1RZUEVTLk9SR0FOSVpBVElPTl9VUERBVEVELFxuICAgICAgXCJPcmdhbml6YXRpb24gVXBkYXRlZFwiLFxuICAgICAgb3JnYW5pemF0aW9uLFxuICAgICAgdHJpZ2dlcixcbiAgICApLFxufSk7XG5cbmV4cG9ydCB0eXBlIFRlYW1FdmVudEJ1aWxkZXJzID0ge1xuICB0cmFja09yZ2FuaXphdGlvblRlYW1DcmVhdGVkOiBCdWlsZGVyPFtPcmdhbml6YXRpb25TbmFwc2hvdCwgVGVhbVNuYXBzaG90LCBCdWlsZGVyVHJpZ2dlcl0+O1xuICB0cmFja09yZ2FuaXphdGlvblRlYW1VcGRhdGVkOiBCdWlsZGVyPFtPcmdhbml6YXRpb25TbmFwc2hvdCwgVGVhbVNuYXBzaG90LCBCdWlsZGVyVHJpZ2dlcl0+O1xuICB0cmFja09yZ2FuaXphdGlvblRlYW1EZWxldGVkOiBCdWlsZGVyPFtPcmdhbml6YXRpb25TbmFwc2hvdCwgVGVhbVNuYXBzaG90LCBCdWlsZGVyVHJpZ2dlcl0+O1xuICB0cmFja09yZ2FuaXphdGlvblRlYW1NZW1iZXJBZGRlZDogQnVpbGRlcjxcbiAgICBbXG4gICAgICBPcmdhbml6YXRpb25TbmFwc2hvdCxcbiAgICAgIFRlYW1TbmFwc2hvdCxcbiAgICAgIFVzZXJTbmFwc2hvdCxcbiAgICAgIHsgdGVhbUlkOiBzdHJpbmc7IHVzZXJJZDogc3RyaW5nIH0sXG4gICAgICBCdWlsZGVyVHJpZ2dlcixcbiAgICBdXG4gID47XG4gIHRyYWNrT3JnYW5pemF0aW9uVGVhbU1lbWJlclJlbW92ZWQ6IEJ1aWxkZXI8XG4gICAgW1xuICAgICAgT3JnYW5pemF0aW9uU25hcHNob3QsXG4gICAgICBUZWFtU25hcHNob3QsXG4gICAgICBVc2VyU25hcHNob3QsXG4gICAgICB7IHRlYW1JZDogc3RyaW5nOyB1c2VySWQ6IHN0cmluZyB9LFxuICAgICAgQnVpbGRlclRyaWdnZXIsXG4gICAgXVxuICA+O1xufTtcblxuY29uc3QgYnVpbGRUZWFtTGlmZWN5Y2xlRXZlbnQgPSAoXG4gIGV2ZW50VHlwZTogc3RyaW5nLFxuICBldmVudERpc3BsYXlOYW1lOiBzdHJpbmcsXG4gIG9yZ2FuaXphdGlvbjogT3JnYW5pemF0aW9uU25hcHNob3QsXG4gIHRlYW06IFRlYW1TbmFwc2hvdCxcbiAgdHJpZ2dlcjogQnVpbGRlclRyaWdnZXIsXG4pOiBBdWRpdExvZ0V2ZW50ID0+XG4gIGNyZWF0ZUV2ZW50KFxuICAgIHsgZXZlbnRLZXk6IG9yZ2FuaXphdGlvbi5pZCwgZXZlbnRUeXBlLCBldmVudERpc3BsYXlOYW1lIH0sXG4gICAgeyAuLi5vcmdhbml6YXRpb25JZGVudGl0eURhdGEob3JnYW5pemF0aW9uKSwgdGVhbUlkOiB0ZWFtLmlkLCB0ZWFtTmFtZTogdGVhbS5uYW1lIH0sXG4gICAgdHJpZ2dlcixcbiAgKTtcblxuY29uc3QgYnVpbGRUZWFtTWVtYmVyRXZlbnQgPSAoXG4gIGV2ZW50VHlwZTogc3RyaW5nLFxuICBldmVudERpc3BsYXlOYW1lOiBzdHJpbmcsXG4gIG9yZ2FuaXphdGlvbjogT3JnYW5pemF0aW9uU25hcHNob3QsXG4gIHRlYW06IFRlYW1TbmFwc2hvdCxcbiAgdXNlcjogVXNlclNuYXBzaG90LFxuICB0ZWFtTWVtYmVyOiB7IHRlYW1JZDogc3RyaW5nOyB1c2VySWQ6IHN0cmluZyB9LFxuICB0cmlnZ2VyOiBCdWlsZGVyVHJpZ2dlcixcbik6IEF1ZGl0TG9nRXZlbnQgPT5cbiAgY3JlYXRlRXZlbnQoXG4gICAgeyBldmVudEtleTogb3JnYW5pemF0aW9uLmlkLCBldmVudFR5cGUsIGV2ZW50RGlzcGxheU5hbWUgfSxcbiAgICB7XG4gICAgICAuLi5vcmdhbml6YXRpb25JZGVudGl0eURhdGEob3JnYW5pemF0aW9uKSxcbiAgICAgIHRlYW1JZDogdGVhbU1lbWJlci50ZWFtSWQsXG4gICAgICB0ZWFtTmFtZTogdGVhbS5uYW1lLFxuICAgICAgdXNlcmlkOiB0ZWFtTWVtYmVyLnVzZXJJZCxcbiAgICAgIG1lbWJlck5hbWU6IHVzZXIubmFtZSxcbiAgICB9LFxuICAgIHRyaWdnZXIsXG4gICk7XG5cbmNvbnN0IGJ1aWxkVGVhbUV2ZW50cyA9ICgpOiBUZWFtRXZlbnRCdWlsZGVycyA9PiAoe1xuICB0cmFja09yZ2FuaXphdGlvblRlYW1DcmVhdGVkOiAob3JnYW5pemF0aW9uLCB0ZWFtLCB0cmlnZ2VyKSA9PlxuICAgIGJ1aWxkVGVhbUxpZmVjeWNsZUV2ZW50KFxuICAgICAgT1JHQU5JWkFUSU9OX0VWRU5UX1RZUEVTLk9SR0FOSVpBVElPTl9URUFNX0NSRUFURUQsXG4gICAgICBcIk9yZ2FuaXphdGlvbiB0ZWFtIGNyZWF0ZWRcIixcbiAgICAgIG9yZ2FuaXphdGlvbixcbiAgICAgIHRlYW0sXG4gICAgICB0cmlnZ2VyLFxuICAgICksXG4gIHRyYWNrT3JnYW5pemF0aW9uVGVhbVVwZGF0ZWQ6IChvcmdhbml6YXRpb24sIHRlYW0sIHRyaWdnZXIpID0+XG4gICAgYnVpbGRUZWFtTGlmZWN5Y2xlRXZlbnQoXG4gICAgICBPUkdBTklaQVRJT05fRVZFTlRfVFlQRVMuT1JHQU5JWkFUSU9OX1RFQU1fVVBEQVRFRCxcbiAgICAgIFwiT3JnYW5pemF0aW9uIHRlYW0gdXBkYXRlZFwiLFxuICAgICAgb3JnYW5pemF0aW9uLFxuICAgICAgdGVhbSxcbiAgICAgIHRyaWdnZXIsXG4gICAgKSxcbiAgdHJhY2tPcmdhbml6YXRpb25UZWFtRGVsZXRlZDogKG9yZ2FuaXphdGlvbiwgdGVhbSwgdHJpZ2dlcikgPT5cbiAgICBidWlsZFRlYW1MaWZlY3ljbGVFdmVudChcbiAgICAgIE9SR0FOSVpBVElPTl9FVkVOVF9UWVBFUy5PUkdBTklaQVRJT05fVEVBTV9ERUxFVEVELFxuICAgICAgXCJPcmdhbml6YXRpb24gdGVhbSBkZWxldGVkXCIsXG4gICAgICBvcmdhbml6YXRpb24sXG4gICAgICB0ZWFtLFxuICAgICAgdHJpZ2dlcixcbiAgICApLFxuICB0cmFja09yZ2FuaXphdGlvblRlYW1NZW1iZXJBZGRlZDogKG9yZ2FuaXphdGlvbiwgdGVhbSwgdXNlciwgdGVhbU1lbWJlciwgdHJpZ2dlcikgPT5cbiAgICBidWlsZFRlYW1NZW1iZXJFdmVudChcbiAgICAgIE9SR0FOSVpBVElPTl9FVkVOVF9UWVBFUy5PUkdBTklaQVRJT05fVEVBTV9NRU1CRVJfQURERUQsXG4gICAgICBcIlVzZXIgYWRkZWQgdG8gb3JnYW5pemF0aW9uIHRlYW1cIixcbiAgICAgIG9yZ2FuaXphdGlvbixcbiAgICAgIHRlYW0sXG4gICAgICB1c2VyLFxuICAgICAgdGVhbU1lbWJlcixcbiAgICAgIHRyaWdnZXIsXG4gICAgKSxcbiAgdHJhY2tPcmdhbml6YXRpb25UZWFtTWVtYmVyUmVtb3ZlZDogKG9yZ2FuaXphdGlvbiwgdGVhbSwgdXNlciwgdGVhbU1lbWJlciwgdHJpZ2dlcikgPT5cbiAgICBidWlsZFRlYW1NZW1iZXJFdmVudChcbiAgICAgIE9SR0FOSVpBVElPTl9FVkVOVF9UWVBFUy5PUkdBTklaQVRJT05fVEVBTV9NRU1CRVJfUkVNT1ZFRCxcbiAgICAgIFwiVXNlciByZW1vdmVkIGZyb20gb3JnYW5pemF0aW9uIHRlYW1cIixcbiAgICAgIG9yZ2FuaXphdGlvbixcbiAgICAgIHRlYW0sXG4gICAgICB1c2VyLFxuICAgICAgdGVhbU1lbWJlcixcbiAgICAgIHRyaWdnZXIsXG4gICAgKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBNZW1iZXJFdmVudEJ1aWxkZXJzID0ge1xuICB0cmFja09yZ2FuaXphdGlvbk1lbWJlckFkZGVkOiBCdWlsZGVyPFxuICAgIFtPcmdhbml6YXRpb25TbmFwc2hvdCwgTWVtYmVyU25hcHNob3QsIFVzZXJTbmFwc2hvdCwgQnVpbGRlclRyaWdnZXJdXG4gID47XG4gIHRyYWNrT3JnYW5pemF0aW9uTWVtYmVyUmVtb3ZlZDogQnVpbGRlcjxcbiAgICBbT3JnYW5pemF0aW9uU25hcHNob3QsIE1lbWJlclNuYXBzaG90LCBVc2VyU25hcHNob3QsIEJ1aWxkZXJUcmlnZ2VyXVxuICA+O1xuICB0cmFja09yZ2FuaXphdGlvbk1lbWJlclJvbGVVcGRhdGVkOiBCdWlsZGVyPFxuICAgIFtPcmdhbml6YXRpb25TbmFwc2hvdCwgTWVtYmVyU25hcHNob3QsIFVzZXJTbmFwc2hvdCwgc3RyaW5nLCBCdWlsZGVyVHJpZ2dlcl1cbiAgPjtcbn07XG5cbmNvbnN0IG1lbWJlckNvcmVEYXRhID0gKG1lbWJlcjogTWVtYmVyU25hcHNob3QsIHVzZXI6IFVzZXJTbmFwc2hvdCkgPT4gKHtcbiAgdXNlcklkOiBtZW1iZXIudXNlcklkLFxuICBtZW1iZXJOYW1lOiB1c2VyLm5hbWUsXG4gIHJvbGU6IG1lbWJlci5yb2xlLFxuICBtZW1iZXJJZDogbWVtYmVyLmlkLFxuICBtZW1iZXJFbWFpbDogdXNlci5lbWFpbCxcbn0pO1xuXG5jb25zdCBidWlsZE1lbWJlckV2ZW50cyA9ICgpOiBNZW1iZXJFdmVudEJ1aWxkZXJzID0+ICh7XG4gIHRyYWNrT3JnYW5pemF0aW9uTWVtYmVyQWRkZWQ6IChvcmdhbml6YXRpb24sIG1lbWJlciwgdXNlciwgdHJpZ2dlcikgPT5cbiAgICBjcmVhdGVFdmVudChcbiAgICAgIHtcbiAgICAgICAgZXZlbnRLZXk6IG9yZ2FuaXphdGlvbi5pZCxcbiAgICAgICAgZXZlbnRUeXBlOiBPUkdBTklaQVRJT05fRVZFTlRfVFlQRVMuT1JHQU5JWkFUSU9OX01FTUJFUl9BRERFRCxcbiAgICAgICAgZXZlbnREaXNwbGF5TmFtZTogXCJNZW1iZXIgYWRkZWQgdG8gb3JnYW5pemF0aW9uXCIsXG4gICAgICB9LFxuICAgICAgeyAuLi5vcmdhbml6YXRpb25JZGVudGl0eURhdGEob3JnYW5pemF0aW9uKSwgLi4ubWVtYmVyQ29yZURhdGEobWVtYmVyLCB1c2VyKSB9LFxuICAgICAgdHJpZ2dlcixcbiAgICApLFxuICB0cmFja09yZ2FuaXphdGlvbk1lbWJlclJlbW92ZWQ6IChvcmdhbml6YXRpb24sIG1lbWJlciwgdXNlciwgdHJpZ2dlcikgPT5cbiAgICBjcmVhdGVFdmVudChcbiAgICAgIHtcbiAgICAgICAgZXZlbnRLZXk6IG9yZ2FuaXphdGlvbi5pZCxcbiAgICAgICAgZXZlbnRUeXBlOiBPUkdBTklaQVRJT05fRVZFTlRfVFlQRVMuT1JHQU5JWkFUSU9OX01FTUJFUl9SRU1PVkVELFxuICAgICAgICBldmVudERpc3BsYXlOYW1lOiBcIk1lbWJlciByZW1vdmVkIGZyb20gb3JnYW5pemF0aW9uXCIsXG4gICAgICB9LFxuICAgICAgeyAuLi5vcmdhbml6YXRpb25JZGVudGl0eURhdGEob3JnYW5pemF0aW9uKSwgLi4ubWVtYmVyQ29yZURhdGEobWVtYmVyLCB1c2VyKSB9LFxuICAgICAgdHJpZ2dlcixcbiAgICApLFxuICB0cmFja09yZ2FuaXphdGlvbk1lbWJlclJvbGVVcGRhdGVkOiAob3JnYW5pemF0aW9uLCBtZW1iZXIsIHVzZXIsIHByZXZpb3VzUm9sZSwgdHJpZ2dlcikgPT5cbiAgICBjcmVhdGVFdmVudChcbiAgICAgIHtcbiAgICAgICAgZXZlbnRLZXk6IG9yZ2FuaXphdGlvbi5pZCxcbiAgICAgICAgZXZlbnRUeXBlOiBPUkdBTklaQVRJT05fRVZFTlRfVFlQRVMuT1JHQU5JWkFUSU9OX01FTUJFUl9ST0xFX1VQREFURUQsXG4gICAgICAgIGV2ZW50RGlzcGxheU5hbWU6IFwiT3JnYW5pemF0aW9uIG1lbWJlciByb2xlIHVwZGF0ZWRcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC4uLm9yZ2FuaXphdGlvbklkZW50aXR5RGF0YShvcmdhbml6YXRpb24pLFxuICAgICAgICB1c2VySWQ6IG1lbWJlci51c2VySWQsXG4gICAgICAgIG1lbWJlck5hbWU6IHVzZXIubmFtZSxcbiAgICAgICAgbmV3Um9sZTogbWVtYmVyLnJvbGUsXG4gICAgICAgIG9sZFJvbGU6IHByZXZpb3VzUm9sZSxcbiAgICAgICAgbWVtYmVySWQ6IG1lbWJlci5pZCxcbiAgICAgICAgbWVtYmVyRW1haWw6IHVzZXIuZW1haWwsXG4gICAgICB9LFxuICAgICAgdHJpZ2dlcixcbiAgICApLFxufSk7XG5cbmV4cG9ydCB0eXBlIEludml0YXRpb25FdmVudEJ1aWxkZXJzID0ge1xuICB0cmFja09yZ2FuaXphdGlvbk1lbWJlckludml0ZWQ6IEJ1aWxkZXI8XG4gICAgW09yZ2FuaXphdGlvblNuYXBzaG90LCBJbnZpdGF0aW9uU25hcHNob3QsIFVzZXJTbmFwc2hvdCwgQnVpbGRlclRyaWdnZXJdXG4gID47XG4gIHRyYWNrT3JnYW5pemF0aW9uTWVtYmVySW52aXRlQWNjZXB0ZWQ6IEJ1aWxkZXI8XG4gICAgW09yZ2FuaXphdGlvblNuYXBzaG90LCBJbnZpdGF0aW9uU25hcHNob3QsIE1lbWJlclNuYXBzaG90LCBVc2VyU25hcHNob3QsIEJ1aWxkZXJUcmlnZ2VyXVxuICA+O1xuICB0cmFja09yZ2FuaXphdGlvbk1lbWJlckludml0ZVJlamVjdGVkOiBCdWlsZGVyPFxuICAgIFtPcmdhbml6YXRpb25TbmFwc2hvdCwgSW52aXRhdGlvblNuYXBzaG90LCBVc2VyU25hcHNob3QsIEJ1aWxkZXJUcmlnZ2VyXVxuICA+O1xuICB0cmFja09yZ2FuaXphdGlvbk1lbWJlckludml0ZUNhbmNlbGVkOiBCdWlsZGVyPFxuICAgIFtPcmdhbml6YXRpb25TbmFwc2hvdCwgSW52aXRhdGlvblNuYXBzaG90LCBVc2VyU25hcHNob3QsIEJ1aWxkZXJUcmlnZ2VyXVxuICA+O1xufTtcblxuY29uc3QgaW52aXRlZURhdGEgPSAoaW52aXRhdGlvbjogSW52aXRhdGlvblNuYXBzaG90KSA9PiAoe1xuICBpbnZpdGVlSWQ6IGludml0YXRpb24uaWQsXG4gIGludml0ZWVFbWFpbDogaW52aXRhdGlvbi5lbWFpbCxcbiAgaW52aXRlZVJvbGU6IGludml0YXRpb24ucm9sZSxcbiAgaW52aXRlZVRlYW1JZDogaW52aXRhdGlvbi50ZWFtSWQsXG59KTtcblxuY29uc3QgYnVpbGRJbnZpdGF0aW9uRXZlbnRzID0gKCk6IEludml0YXRpb25FdmVudEJ1aWxkZXJzID0+ICh7XG4gIHRyYWNrT3JnYW5pemF0aW9uTWVtYmVySW52aXRlZDogKG9yZ2FuaXphdGlvbiwgaW52aXRhdGlvbiwgaW52aXRlciwgdHJpZ2dlcikgPT5cbiAgICBjcmVhdGVFdmVudChcbiAgICAgIHtcbiAgICAgICAgZXZlbnRLZXk6IG9yZ2FuaXphdGlvbi5pZCxcbiAgICAgICAgZXZlbnRUeXBlOiBPUkdBTklaQVRJT05fRVZFTlRfVFlQRVMuT1JHQU5JWkFUSU9OX01FTUJFUl9JTlZJVEVELFxuICAgICAgICBldmVudERpc3BsYXlOYW1lOiBcIlVzZXIgaW52aXRlZCB0byBvcmdhbml6YXRpb25cIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC4uLm9yZ2FuaXphdGlvbklkZW50aXR5RGF0YShvcmdhbml6YXRpb24pLFxuICAgICAgICAuLi5pbnZpdGVlRGF0YShpbnZpdGF0aW9uKSxcbiAgICAgICAgaW52aXRlcklkOiBpbnZpdGVyLmlkLFxuICAgICAgICBpbnZpdGVyTmFtZTogaW52aXRlci5uYW1lLFxuICAgICAgICBpbnZpdGVyRW1haWw6IGludml0ZXIuZW1haWwsXG4gICAgICB9LFxuICAgICAgdHJpZ2dlcixcbiAgICApLFxuICB0cmFja09yZ2FuaXphdGlvbk1lbWJlckludml0ZUFjY2VwdGVkOiAob3JnYW5pemF0aW9uLCBpbnZpdGF0aW9uLCBtZW1iZXIsIGFjY2VwdGVkQnksIHRyaWdnZXIpID0+XG4gICAgY3JlYXRlRXZlbnQoXG4gICAgICB7XG4gICAgICAgIGV2ZW50S2V5OiBvcmdhbml6YXRpb24uaWQsXG4gICAgICAgIGV2ZW50VHlwZTogT1JHQU5JWkFUSU9OX0VWRU5UX1RZUEVTLk9SR0FOSVpBVElPTl9NRU1CRVJfSU5WSVRFX0FDQ0VQVEVELFxuICAgICAgICBldmVudERpc3BsYXlOYW1lOiBcIlVzZXIgYWNjZXB0ZWQgaW52aXRlIG9yZ2FuaXphdGlvbiBpbnZpdGVcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC4uLm9yZ2FuaXphdGlvbklkZW50aXR5RGF0YShvcmdhbml6YXRpb24pLFxuICAgICAgICAuLi5pbnZpdGVlRGF0YShpbnZpdGF0aW9uKSxcbiAgICAgICAgYWNjZXB0ZWRCeUlkOiBhY2NlcHRlZEJ5LmlkLFxuICAgICAgICBhY2NlcHRlZEJ5RW1haWw6IGFjY2VwdGVkQnkuZW1haWwsXG4gICAgICAgIGFjY2VwdGVkQnlOYW1lOiBhY2NlcHRlZEJ5Lm5hbWUsXG4gICAgICAgIG1lbWJlcklkOiBtZW1iZXIuaWQsXG4gICAgICAgIG1lbWJlclJvbGU6IG1lbWJlci5yb2xlLFxuICAgICAgfSxcbiAgICAgIHRyaWdnZXIsXG4gICAgKSxcbiAgdHJhY2tPcmdhbml6YXRpb25NZW1iZXJJbnZpdGVSZWplY3RlZDogKG9yZ2FuaXphdGlvbiwgaW52aXRhdGlvbiwgcmVqZWN0ZWRCeSwgdHJpZ2dlcikgPT5cbiAgICBjcmVhdGVFdmVudChcbiAgICAgIHtcbiAgICAgICAgZXZlbnRLZXk6IG9yZ2FuaXphdGlvbi5pZCxcbiAgICAgICAgZXZlbnRUeXBlOiBPUkdBTklaQVRJT05fRVZFTlRfVFlQRVMuT1JHQU5JWkFUSU9OX01FTUJFUl9JTlZJVEVfUkVKRUNURUQsXG4gICAgICAgIGV2ZW50RGlzcGxheU5hbWU6IFwiVXNlciByZWplY3RlZCBvcmdhbml6YXRpb24gaW52aXRlXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAuLi5vcmdhbml6YXRpb25JZGVudGl0eURhdGEob3JnYW5pemF0aW9uKSxcbiAgICAgICAgLi4uaW52aXRlZURhdGEoaW52aXRhdGlvbiksXG4gICAgICAgIHJlamVjdGVkQnlJZDogcmVqZWN0ZWRCeS5pZCxcbiAgICAgICAgcmVqZWN0ZWRCeUVtYWlsOiByZWplY3RlZEJ5LmVtYWlsLFxuICAgICAgICByZWplY3RlZEJ5TmFtZTogcmVqZWN0ZWRCeS5uYW1lLFxuICAgICAgfSxcbiAgICAgIHRyaWdnZXIsXG4gICAgKSxcbiAgdHJhY2tPcmdhbml6YXRpb25NZW1iZXJJbnZpdGVDYW5jZWxlZDogKG9yZ2FuaXphdGlvbiwgaW52aXRhdGlvbiwgY2FuY2VsbGVkQnksIHRyaWdnZXIpID0+XG4gICAgY3JlYXRlRXZlbnQoXG4gICAgICB7XG4gICAgICAgIGV2ZW50S2V5OiBvcmdhbml6YXRpb24uaWQsXG4gICAgICAgIGV2ZW50VHlwZTogT1JHQU5JWkFUSU9OX0VWRU5UX1RZUEVTLk9SR0FOSVpBVElPTl9NRU1CRVJfSU5WSVRFX0NBTkNFTEVELFxuICAgICAgICBldmVudERpc3BsYXlOYW1lOiBcIk9yZ2FuaXphdGlvbiBpbnZpdGUgY2FuY2VsbGVkXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAuLi5vcmdhbml6YXRpb25JZGVudGl0eURhdGEob3JnYW5pemF0aW9uKSxcbiAgICAgICAgLi4uaW52aXRlZURhdGEoaW52aXRhdGlvbiksXG4gICAgICAgIGNhbmNlbGxlZEJ5SWQ6IGNhbmNlbGxlZEJ5LmlkLFxuICAgICAgICBjYW5jZWxsZWRCeU5hbWU6IGNhbmNlbGxlZEJ5Lm5hbWUsXG4gICAgICAgIGNhbmNlbGxlZEJ5RW1haWw6IGNhbmNlbGxlZEJ5LmVtYWlsLFxuICAgICAgfSxcbiAgICAgIHRyaWdnZXIsXG4gICAgKSxcbn0pO1xuXG4vLyBUT0RPKHNlY3VyaXR5KTogc29uYW11LmNvbmZpZ+ydmCBzZWN1cml0eSDsmLXshZjsnbQg64+E7J6F65CY66m0XG4vLyBTZWN1cml0eUV2ZW50QnVpbGRlcnMgKHRyYWNrU2VjdXJpdHlCbG9ja2VkL0FsbG93ZWQvQ2hhbGxlbmdlZC9TdGFsZUFjY291bnQpIOyEueyFmOydhCDstpTqsIDtlZzri6QuXG4vLyBkYXNo7J2YIGNyZWF0ZVNlY3VyaXR5Q2xpZW50L29uU2VjdXJpdHlFdmVudCDqtaztmITsnYAg7ZiE7J6sIHNjb3BlIG91dCAoUjEpLlxuXG5leHBvcnQgdHlwZSBBdWRpdEV2ZW50QnVpbGRlckNhdGFsb2cgPSB7XG4gIGFjY291bnQ6IEFjY291bnRFdmVudEJ1aWxkZXJzO1xuICBzZXNzaW9uOiBTZXNzaW9uRXZlbnRCdWlsZGVycztcbiAgdXNlcjogVXNlckV2ZW50QnVpbGRlcnM7XG4gIHZlcmlmaWNhdGlvbjogVmVyaWZpY2F0aW9uRXZlbnRCdWlsZGVycztcbiAgb3JnYW5pemF0aW9uOiBPcmdhbml6YXRpb25FdmVudEJ1aWxkZXJzO1xuICB0ZWFtOiBUZWFtRXZlbnRCdWlsZGVycztcbiAgbWVtYmVyOiBNZW1iZXJFdmVudEJ1aWxkZXJzO1xuICBpbnZpdGF0aW9uOiBJbnZpdGF0aW9uRXZlbnRCdWlsZGVycztcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZEF1ZGl0RXZlbnRDYXRhbG9nID0gKCk6IEF1ZGl0RXZlbnRCdWlsZGVyQ2F0YWxvZyA9PiAoe1xuICBhY2NvdW50OiBidWlsZEFjY291bnRFdmVudHMoKSxcbiAgc2Vzc2lvbjogYnVpbGRTZXNzaW9uRXZlbnRzKCksXG4gIHVzZXI6IGJ1aWxkVXNlckV2ZW50cygpLFxuICB2ZXJpZmljYXRpb246IGJ1aWxkVmVyaWZpY2F0aW9uRXZlbnRzKCksXG4gIG9yZ2FuaXphdGlvbjogYnVpbGRPcmdhbml6YXRpb25FdmVudHMoKSxcbiAgdGVhbTogYnVpbGRUZWFtRXZlbnRzKCksXG4gIG1lbWJlcjogYnVpbGRNZW1iZXJFdmVudHMoKSxcbiAgaW52aXRhdGlvbjogYnVpbGRJbnZpdGF0aW9uRXZlbnRzKCksXG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBc0JBLE1BQU0sZUFDSixNQUNBLE1BQ0EsU0FDQSxjQUNtQjtDQUNuQixHQUFHO0NBQ0gsU0FBUyxXQUFXO0NBQ3BCLFdBQVc7RUFDVCxHQUFHO0VBQ0gsYUFBYSxRQUFRO0VBQ3JCLGdCQUFnQixRQUFRO0NBQzFCO0NBQ0EsV0FBVyxV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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { init_runtime_value, isStringValue } from "../../utils/runtime-value.js";
|
|
3
3
|
import { isIP } from "node:net";
|
|
4
|
-
|
|
4
|
+
// src/auth/audit-log/client-ip.ts
|
|
5
5
|
function replaceClientIpHeaders(headers, clientIp, configuredHeaders = []) {
|
|
6
6
|
const candidates = new Set([...CLIENT_IP_HEADERS, ...configuredHeaders].map((header) => header.trim().toLowerCase()).filter((header) => HEADER_NAME_PATTERN.test(header)));
|
|
7
7
|
for (const header of candidates) headers.delete(header);
|
|
@@ -22,8 +22,7 @@ var init_client_ip = __esmMin((() => {
|
|
|
22
22
|
];
|
|
23
23
|
HEADER_NAME_PATTERN = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
|
|
24
24
|
}));
|
|
25
|
-
//#endregion
|
|
26
25
|
init_client_ip();
|
|
27
26
|
export { getValidClientIp, init_client_ip, replaceClientIpHeaders };
|
|
28
27
|
|
|
29
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LWlwLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2F1ZGl0LWxvZy9jbGllbnQtaXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNJUCB9IGZyb20gXCJub2RlOm5ldFwiO1xuXG5pbXBvcnQgeyBpc1N0cmluZ1ZhbHVlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3J1bnRpbWUtdmFsdWVcIjtcblxuY29uc3QgQ0xJRU5UX0lQX0hFQURFUlMgPSBbXG4gIFwiY2YtY29ubmVjdGluZy1pcFwiLFxuICBcIngtZm9yd2FyZGVkLWZvclwiLFxuICBcIngtcmVhbC1pcFwiLFxuICBcIngtdmVyY2VsLWZvcndhcmRlZC1mb3JcIixcbl0gYXMgY29uc3Q7XG5cbmNvbnN0IEhFQURFUl9OQU1FX1BBVFRFUk4gPSAvXlshIyQlJicqK1xcLS5eX2B8fjAtOUEtWmEtel0rJC87XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQ2xpZW50SXBIZWFkZXJzKFxuICBoZWFkZXJzOiBIZWFkZXJzLFxuICBjbGllbnRJcDogc3RyaW5nLFxuICBjb25maWd1cmVkSGVhZGVyczogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSxcbik6IHZvaWQge1xuICBjb25zdCBjYW5kaWRhdGVzID0gbmV3IFNldChcbiAgICBbLi4uQ0xJRU5UX0lQX0hFQURFUlMsIC4uLmNvbmZpZ3VyZWRIZWFkZXJzXVxuICAgICAgLm1hcCgoaGVhZGVyKSA9PiBoZWFkZXIudHJpbSgpLnRvTG93ZXJDYXNlKCkpXG4gICAgICAuZmlsdGVyKChoZWFkZXIpID0+
|
|
28
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LWlwLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2F1ZGl0LWxvZy9jbGllbnQtaXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNJUCB9IGZyb20gXCJub2RlOm5ldFwiO1xuXG5pbXBvcnQgeyBpc1N0cmluZ1ZhbHVlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3J1bnRpbWUtdmFsdWVcIjtcblxuY29uc3QgQ0xJRU5UX0lQX0hFQURFUlMgPSBbXG4gIFwiY2YtY29ubmVjdGluZy1pcFwiLFxuICBcIngtZm9yd2FyZGVkLWZvclwiLFxuICBcIngtcmVhbC1pcFwiLFxuICBcIngtdmVyY2VsLWZvcndhcmRlZC1mb3JcIixcbl0gYXMgY29uc3Q7XG5cbmNvbnN0IEhFQURFUl9OQU1FX1BBVFRFUk4gPSAvXlshIyQlJicqK1xcLS5eX2B8fjAtOUEtWmEtel0rJC87XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQ2xpZW50SXBIZWFkZXJzKFxuICBoZWFkZXJzOiBIZWFkZXJzLFxuICBjbGllbnRJcDogc3RyaW5nLFxuICBjb25maWd1cmVkSGVhZGVyczogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSxcbik6IHZvaWQge1xuICBjb25zdCBjYW5kaWRhdGVzID0gbmV3IFNldChcbiAgICBbLi4uQ0xJRU5UX0lQX0hFQURFUlMsIC4uLmNvbmZpZ3VyZWRIZWFkZXJzXVxuICAgICAgLm1hcCgoaGVhZGVyKSA9PiBoZWFkZXIudHJpbSgpLnRvTG93ZXJDYXNlKCkpXG4gICAgICAuZmlsdGVyKChoZWFkZXIpID0+IEhFQURFUl9OQU1FX1BBVFRFUk4udGVzdChoZWFkZXIpKSxcbiAgKTtcblxuICBmb3IgKGNvbnN0IGhlYWRlciBvZiBjYW5kaWRhdGVzKSB7XG4gICAgaGVhZGVycy5kZWxldGUoaGVhZGVyKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgaGVhZGVyIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICBoZWFkZXJzLnNldChoZWFkZXIsIGNsaWVudElwKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRDbGllbnRJcDxWYWx1ZT4odmFsdWU6IFZhbHVlKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICghaXNTdHJpbmdWYWx1ZSh2YWx1ZSkgfHwgdmFsdWUubGVuZ3RoID4gNDUgfHwgaXNJUCh2YWx1ZSkgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQWFBLFNBQWdCLHVCQUNkLFNBQ0EsVUFDQSxvQkFBdUMsQ0FBQyxHQUNsQztDQUNOLE1BQU0sYUFBYSxJQUFJLElBQ3JCLENBQUMsR0FBRyxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQyxDQUN6QyxLQUFLLFdBQVcsT0FBTyxLQUFLLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUM1QyxRQUFRLFdBQVcsb0JBQW9CLEtBQUssTUFBTSxDQUFDLENBQ3hEO0NBRUEsS0FBSyxNQUFNLFVBQVUsWUFDbkIsUUFBUSxPQUFPLE1BQU07Q0FHdkIsS0FBSyxNQUFNLFVBQVUsWUFDbkIsUUFBUSxJQUFJLFFBQVEsUUFBUTtBQUVoQztBQUVBLFNBQWdCLGlCQUF3QixPQUE2QjtDQUNuRSxJQUFJLENBQUMsY0FBYyxLQUFLLEtBQUssTUFBTSxTQUFTLE1BQU0sS0FBSyxLQUFLLE1BQU0sR0FDaEUsT0FBTztDQUdULE9BQU87QUFDVDs7O0NBckN5RCxtQkFBQTtDQUVuRCxvQkFBb0I7RUFDeEI7RUFDQTtFQUNBO0VBQ0E7Q0FDRjtDQUVNLHNCQUFzQiJ9
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/auth/audit-log/events.ts
|
|
2
2
|
const EVENT_TYPES = {
|
|
3
3
|
USER_CREATED: "user_created",
|
|
4
4
|
USER_SIGNED_IN: "user_signed_in",
|
|
@@ -68,7 +68,6 @@ const ROUTES = {
|
|
|
68
68
|
ADMIN_BAN_USER: "/admin/ban-user",
|
|
69
69
|
ADMIN_UNBAN_USER: "/admin/unban-user"
|
|
70
70
|
};
|
|
71
|
-
//#endregion
|
|
72
71
|
export { EVENT_TYPES, ORGANIZATION_EVENT_TYPES, ROUTES };
|
|
73
72
|
|
|
74
73
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2F1ZGl0LWxvZy9ldmVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBzb25hbXVBdWRpdExvZyDtlIzrn6zqt7jsnbjsnbQgYXVkaXQtbG9nLWluZ2VzdG9y66GcIOyghOuLrO2VmOuKlCDsnbTrsqTtirggYm9keSDtg4DsnoUuXG4gKi9cbmV4cG9ydCB0eXBlIEF1ZGl0RXZlbnREYXRhVmFsdWUgPVxuICB8IG51bGxcbiAgfCB1bmRlZmluZWRcbiAgfCBib29sZWFuXG4gIHwgbnVtYmVyXG4gIHwgc3RyaW5nXG4gIHwgRGF0ZVxuICB8IEF1ZGl0RXZlbnREYXRhVmFsdWVbXVxuICB8IEF1ZGl0RXZlbnREYXRhO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0RXZlbnREYXRhIHtcbiAgW2tleTogc3RyaW5nXTogQXVkaXRFdmVudERhdGFWYWx1ZTtcbn1cblxuZXhwb3J0IHR5cGUgQXVkaXRMb2dFdmVudCA9IHtcbiAgZXZlbnRUeXBlOiBzdHJpbmc7XG4gIGV2ZW50RGF0YTogQXVkaXRFdmVudERhdGE7XG4gIGV2ZW50S2V5OiBzdHJpbmc7XG4gIGV2ZW50SWQ/OiBzdHJpbmc7XG4gIGV2ZW50RGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgY2l0eT86IHN0cmluZztcbiAgY291bnRyeT86IHN0cmluZztcbiAgY291bnRyeUNvZGU/OiBzdHJpbmc7XG59O1xuXG4vLyBkYXNoKEBiZXR0ZXItYXV0aC9pbmZyYSnsnZggYXVkaXQtZXZlbnQg7IOB7IiYIOynke2VqeydhCBTb25hbXUg66Gc7LusIOyggeyerCDqsr3roZzsl5Ag66ee6rKMIO2PrO2MhS5cbmV4cG9ydCBjb25zdCBFVkVOVF9UWVBFUyA9IHtcbiAgVVNFUl9DUkVBVEVEOiBcInVzZXJfY3JlYXRlZFwiLFxuICBVU0VSX1NJR05FRF9JTjogXCJ1c2VyX3NpZ25lZF9pblwiLFxuICBVU0VSX1NJR05FRF9PVVQ6IFwidXNlcl9zaWduZWRfb3V0XCIsXG4gIFVTRVJfU0lHTl9JTl9GQUlMRUQ6IFwidXNlcl9zaWduX2luX2ZhaWxlZFwiLFxuICBQQVNTV09SRF9SRVNFVF9SRVFVRVNURUQ6IFwicGFzc3dvcmRfcmVzZXRfcmVxdWVzdGVkXCIsXG4gIFBBU1NXT1JEX1JFU0VUX0NPTVBMRVRFRDogXCJwYXNzd29yZF9yZXNldF9jb21wbGV0ZWRcIixcbiAgUEFTU1dPUkRfQ0hBTkdFRDogXCJwYXNzd29yZF9jaGFuZ2VkXCIsXG4gIEVNQUlMX1ZFUklGSUNBVElPTl9TRU5UOiBcImVtYWlsX3ZlcmlmaWNhdGlvbl9zZW50XCIsXG4gIEVNQUlMX1ZFUklGSUVEOiBcImVtYWlsX3ZlcmlmaWVkXCIsXG4gIFBST0ZJTEVfVVBEQVRFRDogXCJwcm9maWxlX3VwZGF0ZWRcIixcbiAgUFJPRklMRV9JTUFHRV9VUERBVEVEOiBcInByb2ZpbGVfaW1hZ2VfdXBkYXRlZFwiLFxuICBTRVNTSU9OX0NSRUFURUQ6IFwic2Vzc2lvbl9jcmVhdGVkXCIsXG4gIFNFU1NJT05fUkVWT0tFRDogXCJzZXNzaW9uX3Jldm9rZWRcIixcbiAgQUxMX1NFU1NJT05TX1JFVk9LRUQ6IFwiYWxsX3Nlc3Npb25zX3Jldm9rZWRcIixcbiAgQUNDT1VOVF9MSU5LRUQ6IFwiYWNjb3VudF9saW5rZWRcIixcbiAgQUNDT1VOVF9VTkxJTktFRDogXCJhY2NvdW50X3VubGlua2VkXCIsXG4gIFVTRVJfQkFOTkVEOiBcInVzZXJfYmFubmVkXCIsXG4gIFVTRVJfVU5CQU5ORUQ6IFwidXNlcl91bmJhbm5lZFwiLFxuICBVU0VSX0RFTEVURUQ6IFwidXNlcl9kZWxldGVkXCIsXG4gIFVTRVJfSU1QRVJTT05BVEVEOiBcInVzZXJfaW1wZXJzb25hdGVkXCIsXG4gIFVTRVJfSU1QRVJTT05BVEVEX1NUT1BQRUQ6IFwidXNlcl9pbXBlcnNvbmF0ZWRfc3RvcHBlZFwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IE9SR0FOSVpBVElPTl9FVkVOVF9UWVBFUyA9IHtcbiAgT1JHQU5JWkFUSU9OX0NSRUFURUQ6IFwib3JnYW5pemF0aW9uX2NyZWF0ZWRcIixcbiAgT1JHQU5JWkFUSU9OX1VQREFURUQ6IFwib3JnYW5pemF0aW9uX3VwZGF0ZWRcIixcbiAgT1JHQU5JWkFUSU9OX01FTUJFUl9BRERFRDogXCJvcmdhbml6YXRpb25fbWVtYmVyX2FkZGVkXCIsXG4gIE9SR0FOSVpBVElPTl9NRU1CRVJfUkVNT1ZFRDogXCJvcmdhbml6YXRpb25fbWVtYmVyX3JlbW92ZWRcIixcbiAgT1JHQU5JWkFUSU9OX01FTUJFUl9ST0xFX1VQREFURUQ6IFwib3JnYW5pemF0aW9uX21lbWJlcl9yb2xlX3VwZGF0ZWRcIixcbiAgT1JHQU5JWkFUSU9OX01FTUJFUl9JTlZJVEVEOiBcIm9yZ2FuaXphdGlvbl9tZW1iZXJfaW52aXRlZFwiLFxuICBPUkdBTklaQVRJT05fTUVNQkVSX0lOVklURV9DQU5DRUxFRDogXCJvcmdhbml6YXRpb25fbWVtYmVyX2ludml0ZV9jYW5jZWxlZFwiLFxuICBPUkdBTklaQVRJT05fTUVNQkVSX0lOVklURV9BQ0NFUFRFRDogXCJvcmdhbml6YXRpb25fbWVtYmVyX2ludml0ZV9hY2NlcHRlZFwiLFxuICBPUkdBTklaQVRJT05fTUVNQkVSX0lOVklURV9SRUpFQ1RFRDogXCJvcmdhbml6YXRpb25fbWVtYmVyX2ludml0ZV9yZWplY3RlZFwiLFxuICBPUkdBTklaQVRJT05fVEVBTV9DUkVBVEVEOiBcIm9yZ2FuaXphdGlvbl90ZWFtX2NyZWF0ZWRcIixcbiAgT1JHQU5JWkFUSU9OX1RFQU1fVVBEQVRFRDogXCJvcmdhbml6YXRpb25fdGVhbV91cGRhdGVkXCIsXG4gIE9SR0FOSVpBVElPTl9URUFNX0RFTEVURUQ6IFwib3JnYW5pemF0aW9uX3RlYW1fZGVsZXRlZFwiLFxuICBPUkdBTklaQVRJT05fVEVBTV9NRU1CRVJfQURERUQ6IFwib3JnYW5pemF0aW9uX3RlYW1fbWVtYmVyX2FkZGVkXCIsXG4gIE9SR0FOSVpBVElPTl9URUFNX01FTUJFUl9SRU1PVkVEOiBcIm9yZ2FuaXphdGlvbl90ZWFtX21lbWJlcl9yZW1vdmVkXCIsXG59IGFzIGNvbnN0O1xuXG4vLyBkYXNo7J2YIHJvdXRlcyDsg4HsiJgg7KSRIOyasOumrOqwgCDsi6TsoJwgbWF0Y2hlcuuhnCDsk7DripQg7ZWt66qp66eMIO2PrO2MhS5cbmV4cG9ydCBjb25zdCBST1VURVMgPSB7XG4gIFNJR05fSU46IFwiL3NpZ24taW5cIixcbiAgU0lHTl9JTl9FTUFJTDogXCIvc2lnbi1pbi9lbWFpbFwiLFxuICBTSUdOX0lOX0VNQUlMX09UUDogXCIvc2lnbi1pbi9lbWFpbC1vdHBcIixcbiAgU0lHTl9JTl9TT0NJQUw6IFwiL3NpZ24taW4vc29jaWFsXCIsXG4gIFNJR05fSU5fU09DSUFMX0NBTExCQUNLOiBcIi9jYWxsYmFjay86aWRcIixcbiAgU0lHTl9JTl9PQVVUSF9DQUxMQkFDSzogXCIvb2F1dGgyL2NhbGxiYWNrLzppZFwiLFxuICBTSUdOX1VQOiBcIi9zaWduLXVwXCIsXG4gIFNJR05fVVBfRU1BSUw6IFwiL3NpZ24tdXAvZW1haWxcIixcbiAgU0lHTl9PVVQ6IFwiL3NpZ24tb3V0XCIsXG4gIFNFTkRfVkVSSUZJQ0FUSU9OX0VNQUlMOiBcIi9zZW5kLXZlcmlmaWNhdGlvbi1lbWFpbFwiLFxuICBVUERBVEVfVVNFUjogXCIvdXBkYXRlLXVzZXJcIixcbiAgQ0hBTkdFX0VNQUlMOiBcIi9jaGFuZ2UtZW1haWxcIixcbiAgVkVSSUZZX0VNQUlMOiBcIi92ZXJpZnktZW1haWxcIixcbiAgQ0hBTkdFX1BBU1NXT1JEOiBcIi9jaGFuZ2UtcGFzc3dvcmRcIixcbiAgU0VUX1BBU1NXT1JEOiBcIi9zZXQtcGFzc3dvcmRcIixcbiAgUkVTRVRfUEFTU1dPUkQ6IFwiL3Jlc2V0LXBhc3N3b3JkXCIsXG4gIFJFUVVFU1RfUEFTU1dPUkRfUkVTRVQ6IFwiL3JlcXVlc3QtcGFzc3dvcmQtcmVzZXRcIixcbiAgUkVWT0tFX0FMTF9TRVNTSU9OUzogXCIvcmV2b2tlLXNlc3Npb25zXCIsXG4gIERBU0hfUk9VVEU6IFwiL2Rhc2hcIixcbiAgREFTSF9VUERBVEVfVVNFUjogXCIvZGFzaC91cGRhdGUtdXNlclwiLFxuICBEQVNIX1JFVk9LRV9TRVNTSU9OU19BTEw6IFwiL2Rhc2gvc2Vzc2lvbnMvcmV2b2tlLWFsbFwiLFxuICBEQVNIX0JBTl9VU0VSOiBcIi9kYXNoL2Jhbi11c2VyXCIsXG4gIERBU0hfVU5CQU5fVVNFUjogXCIvZGFzaC91bmJhbi11c2VyXCIsXG4gIEFETUlOX1JPVVRFOiBcIi9hZG1pblwiLFxuICBBRE1JTl9SRVZPS0VfVVNFUl9TRVNTSU9OUzogXCIvYWRtaW4vcmV2b2tlLXVzZXItc2Vzc2lvbnNcIixcbiAgQURNSU5fU0VUX1BBU1NXT1JEOiBcIi9hZG1pbi9zZXQtdXNlci1wYXNzd29yZFwiLFxuICBBRE1JTl9CQU5fVVNFUjogXCIvYWRtaW4vYmFuLXVzZXJcIixcbiAgQURNSU5fVU5CQU5fVVNFUjogXCIvYWRtaW4vdW5iYW4tdXNlclwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQnVpbGRlclRyaWdnZXIgPSB7IHRyaWdnZXJlZEJ5OiBzdHJpbmc7IHRyaWdnZXJDb250ZXh0OiBzdHJpbmcgfTtcbmV4cG9ydCB0eXBlIEJ1aWxkZXJMb2NhdGlvbiA9IHtcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICBjaXR5Pzogc3RyaW5nO1xuICBjb3VudHJ5Pzogc3RyaW5nO1xuICBjb3VudHJ5Q29kZT86IHN0cmluZztcbn07XG5cbi8vIOu5jOuNlOyXkCDrhJjquLDripQg7LWc7IaMIOyXlO2LsO2LsCBzaGFwZS4gYmV0dGVyLWF1dGgg64K067aAIO2DgOyeheydhCDqt7jrjIDroZwg7JOw7KeAIOyViuqzoFxuLy8g7ZWE7JqU7ZWcIO2VhOuTnOunjCDshKDslrjtlZjsl6wg7ZW465Ok65+sIOugiOydtOyWtOyXkOyEnCDsooHtmIDshJwg7KCE64us7ZWc64ukLlxuZXhwb3J0IHR5cGUgVXNlclNuYXBzaG90ID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcbiAgYmFubmVkPzogYm9vbGVhbjtcbiAgYmFuUmVhc29uPzogc3RyaW5nIHwgbnVsbDtcbiAgYmFuRXhwaXJlcz86IERhdGUgfCBudWxsO1xufTtcbmV4cG9ydCB0eXBlIFNlc3Npb25TbmFwc2hvdCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIGxvZ2luTWV0aG9kPzogc3RyaW5nIHwgbnVsbDtcbiAgdXNlckFnZW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgaW1wZXJzb25hdGVkQnk/OiBzdHJpbmcgfCBudWxsO1xufTtcbmV4cG9ydCB0eXBlIEFjY291bnRTbmFwc2hvdCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIHByb3ZpZGVySWQ6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBWZXJpZmljYXRpb25TbmFwc2hvdCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBPcmdhbml6YXRpb25TbmFwc2hvdCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgc2x1Zz86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBUZWFtU25hcHNob3QgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgTWVtYmVyU25hcHNob3QgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVzZXJJZDogc3RyaW5nO1xuICByb2xlPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIEludml0YXRpb25TbmFwc2hvdCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgZW1haWw/OiBzdHJpbmc7XG4gIHJvbGU/OiBzdHJpbmc7XG4gIHRlYW1JZD86IHN0cmluZyB8IG51bGw7XG59O1xuXG4vLyDsgqzsmqnsnpAg7ZSE66Gc7ZWEIOuztOyhsCAo7KGw7ZqMIOyLpO2MqCDsi5wgbnVsbClcbmV4cG9ydCB0eXBlIFVzZXJQcm9maWxlTGl0ZSA9IHsgaWQ6IHN0cmluZzsgbmFtZT86IHN0cmluZzsgZW1haWw/OiBzdHJpbmcgfSB8IG51bGw7XG5cbi8vIOuqqOuToCDruYzrjZTripQgcHVyZTogaW5wdXQgLT4gQXVkaXRMb2dFdmVudC5cbi8vIOu5hOuPmeq4sCBhZGFwdGVyIOyhsO2ajOuKlCBob29rIOugiOydtOyWtOyXkOyEnCDsiJjtlontlZjqs6AsIOyhsO2ajCDqsrDqs7zrpbwg7J247J6Q66GcIOyghOuLrO2VnOuLpC5cbmV4cG9ydCB0eXBlIEJ1aWxkZXI8QSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXT4gPSAoLi4uYXJnczogQSkgPT4gQXVkaXRMb2dFdmVudDtcbiJdLCJtYXBwaW5ncyI6IjtBQThCQSxNQUFhLGNBQWM7Q0FDekIsY0FBYztDQUNkLGdCQUFnQjtDQUNoQixpQkFBaUI7Q0FDakIscUJBQXFCO0NBQ3JCLDBCQUEwQjtDQUMxQiwwQkFBMEI7Q0FDMUIsa0JBQWtCO0NBQ2xCLHlCQUF5QjtDQUN6QixnQkFBZ0I7Q0FDaEIsaUJBQWlCO0NBQ2pCLHVCQUF1QjtDQUN2QixpQkFBaUI7Q0FDakIsaUJBQWlCO0NBQ2pCLHNCQUFzQjtDQUN0QixnQkFBZ0I7Q0FDaEIsa0JBQWtCO0NBQ2xCLGFBQWE7Q0FDYixlQUFlO0NBQ2YsY0FBYztDQUNkLG1CQUFtQjtDQUNuQiwyQkFBMkI7QUFDN0I7QUFFQSxNQUFhLDJCQUEyQjtDQUN0QyxzQkFBc0I7Q0FDdEIsc0JBQXNCO0NBQ3RCLDJCQUEyQjtDQUMzQiw2QkFBNkI7Q0FDN0Isa0NBQWtDO0NBQ2xDLDZCQUE2QjtDQUM3QixxQ0FBcUM7Q0FDckMscUNBQXFDO0NBQ3JDLHFDQUFxQztDQUNyQywyQkFBMkI7Q0FDM0IsMkJBQTJCO0NBQzNCLDJCQUEyQjtDQUMzQixnQ0FBZ0M7Q0FDaEMsa0NBQWtDO0FBQ3BDO0FBR0EsTUFBYSxTQUFTO0NBQ3BCLFNBQVM7Q0FDVCxlQUFlO0NBQ2YsbUJBQW1CO0NBQ25CLGdCQUFnQjtDQUNoQix5QkFBeUI7Q0FDekIsd0JBQXdCO0NBQ3hCLFNBQVM7Q0FDVCxlQUFlO0NBQ2YsVUFBVTtDQUNWLHlCQUF5QjtDQUN6QixhQUFhO0NBQ2IsY0FBYztDQUNkLGNBQWM7Q0FDZCxpQkFBaUI7Q0FDakIsY0FBYztDQUNkLGdCQUFnQjtDQUNoQix3QkFBd0I7Q0FDeEIscUJBQXFCO0NBQ3JCLFlBQVk7Q0FDWixrQkFBa0I7Q0FDbEIsMEJBQTBCO0NBQzFCLGVBQWU7Q0FDZixpQkFBaUI7Q0FDakIsYUFBYTtDQUNiLDRCQUE0QjtDQUM1QixvQkFBb0I7Q0FDcEIsZ0JBQWdCO0NBQ2hCLGtCQUFrQjtBQUNwQiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/auth/audit-log/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,gBAAgB,EAA+B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/auth/audit-log/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,gBAAgB,EAA+B,MAAM,aAAa,CAAC;AA+MnG,wBAAgB,cAAc,IAAI,gBAAgB,CAycjD"}
|
|
@@ -5,7 +5,7 @@ import { buildAuditEventCatalog } from "./builders.js";
|
|
|
5
5
|
import { ingestAuditEvent } from "../audit-log-ingestor.js";
|
|
6
6
|
import { getLogger } from "@logtape/logtape";
|
|
7
7
|
import { createAuthMiddleware } from "better-auth/api";
|
|
8
|
-
|
|
8
|
+
// src/auth/audit-log/plugin.ts
|
|
9
9
|
init_db();
|
|
10
10
|
init_runtime_value();
|
|
11
11
|
const stripQuery = (value) => value.split("?")[0] || value;
|
|
@@ -386,7 +386,6 @@ function installOrganizationHooks(pluginCtx, catalog, emit, logger) {
|
|
|
386
386
|
hooks.afterAddTeamMember = wrapOrgHook(hooks.afterAddTeamMember, async (p) => emit(catalog.team.trackOrganizationTeamMemberAdded(p.organization, p.team, p.user, p.teamMember, getOrganizationTriggerInfo(p.user))));
|
|
387
387
|
hooks.afterRemoveTeamMember = wrapOrgHook(hooks.afterRemoveTeamMember, async (p) => emit(catalog.team.trackOrganizationTeamMemberRemoved(p.organization, p.team, p.user, p.teamMember, getOrganizationTriggerInfo(p.user))));
|
|
388
388
|
}
|
|
389
|
-
//#endregion
|
|
390
389
|
export { sonamuAuditLog };
|
|
391
390
|
|
|
392
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2F1ZGl0LWxvZy9wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IHR5cGUgQXV0aENvbnRleHQsIHR5cGUgQmV0dGVyQXV0aFBsdWdpbiwgdHlwZSBHZW5lcmljRW5kcG9pbnRDb250ZXh0IH0gZnJvbSBcImJldHRlci1hdXRoXCI7XG5pbXBvcnQgeyBjcmVhdGVBdXRoTWlkZGxld2FyZSB9IGZyb20gXCJiZXR0ZXItYXV0aC9hcGlcIjtcblxuaW1wb3J0IHsgREIgfSBmcm9tIFwiLi4vLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IGlzT2JqZWN0VmFsdWUsIGlzU3RyaW5nVmFsdWUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgaW5nZXN0QXVkaXRFdmVudCB9IGZyb20gXCIuLi9hdWRpdC1sb2ctaW5nZXN0b3JcIjtcbmltcG9ydCB7IGJ1aWxkQXVkaXRFdmVudENhdGFsb2cgfSBmcm9tIFwiLi9idWlsZGVyc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBBY2NvdW50U25hcHNob3QsXG4gIHR5cGUgQXVkaXRMb2dFdmVudCxcbiAgdHlwZSBCdWlsZGVyTG9jYXRpb24sXG4gIHR5cGUgQnVpbGRlclRyaWdnZXIsXG4gIFJPVVRFUyxcbiAgdHlwZSBTZXNzaW9uU25hcHNob3QsXG4gIHR5cGUgVXNlclByb2ZpbGVMaXRlLFxuICB0eXBlIFVzZXJTbmFwc2hvdCxcbiAgdHlwZSBWZXJpZmljYXRpb25TbmFwc2hvdCxcbn0gZnJvbSBcIi4vZXZlbnRzXCI7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIOudvOyasO2MhS/tirjrpqzqsbAg7Jyg7Yu4XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5jb25zdCBzdHJpcFF1ZXJ5ID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4gdmFsdWUuc3BsaXQoXCI/XCIpWzBdIHx8IHZhbHVlO1xuY29uc3QgZXNjYXBlUmVnZXggPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB2YWx1ZS5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIik7XG5jb25zdCByb3V0ZVRvUmVnZXggPSAocm91dGU6IHN0cmluZyk6IFJlZ0V4cCA9PiB7XG4gIGNvbnN0IHBhdHRlcm4gPSBlc2NhcGVSZWdleChzdHJpcFF1ZXJ5KHJvdXRlKSkucmVwbGFjZSgvXFwvOihbXi9dKykvZywgXCIvW14vXStcIik7XG4gIHJldHVybiBuZXcgUmVnRXhwKGAke3BhdHRlcm59KD86JHxbLz9dKWApO1xufTtcbmNvbnN0IG1hdGNoZXNBbnlSb3V0ZSA9IChyb3V0ZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCwgcm91dGVzOiByZWFkb25seSBzdHJpbmdbXSk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXJvdXRlUGF0aCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBjbGVhblBhdGggPSBzdHJpcFF1ZXJ5KHJvdXRlUGF0aCk7XG4gIHJldHVybiByb3V0ZXMuc29tZSgocm91dGUpID0+IHJvdXRlVG9SZWdleChyb3V0ZSkudGVzdChjbGVhblBhdGgpKTtcbn07XG5cbmNvbnN0IExPR0lOX1BBVEhTID0gW1xuICBST1VURVMuU0lHTl9JTl9TT0NJQUxfQ0FMTEJBQ0ssXG4gIFJPVVRFUy5TSUdOX0lOX09BVVRIX0NBTExCQUNLLFxuICBST1VURVMuU0lHTl9JTl9FTUFJTCxcbiAgUk9VVEVTLlNJR05fSU5fU09DSUFMLFxuICBST1VURVMuU0lHTl9JTl9FTUFJTF9PVFAsXG4gIFJPVVRFUy5TSUdOX1VQX0VNQUlMLFxuXSBhcyBjb25zdDtcblxuLy8gZGFzaCAzMTktMzIzIOuvuOufrDog7ZiE7J6sIOyalOyyrSBwYXRo7JeQ7IScIOuhnOq3uOyduCDrsKnsi53snYQg7LaU7Lac7ZWc64ukLlxuY29uc3QgZ2V0TG9naW5NZXRob2QgPSAoY3R4UGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLCBwYXJhbXNJZD86IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBpZiAoIWN0eFBhdGgpIHJldHVybiBudWxsO1xuICBpZiAobWF0Y2hlc0FueVJvdXRlKGN0eFBhdGgsIExPR0lOX1BBVEhTKSkge1xuICAgIGlmIChwYXJhbXNJZCkgcmV0dXJuIHBhcmFtc0lkO1xuICAgIHJldHVybiBjdHhQYXRoLnNwbGl0KFwiL1wiKS5wb3AoKSA/PyBudWxsO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuLy8gZGFzaCA3OTctODAzIOuvuOufrDog7IS47IWYL+yalOyyreyXkOyEnCDtirjrpqzqsbAg7KO87LK07JmAIOy7qO2FjeyKpO2KuOulvCDrj4TstpztlZzri6QuXG5jb25zdCBnZXRUcmlnZ2VySW5mbyA9IChcbiAgY3R4UGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBzZXNzaW9uVXNlcklkOiBzdHJpbmcgfCBudWxsLFxuICB1c2VySWQ6IHN0cmluZyxcbik6IEJ1aWxkZXJUcmlnZ2VyID0+IHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBzZXNzaW9uVXNlcklkID8/IHVzZXJJZDtcbiAgY29uc3QgdHJpZ2dlckNvbnRleHQgPVxuICAgIHJlc29sdmVkID09PSB1c2VySWRcbiAgICAgID8gXCJ1c2VyXCJcbiAgICAgIDogbWF0Y2hlc0FueVJvdXRlKGN0eFBhdGgsIFtST1VURVMuQURNSU5fUk9VVEVdKVxuICAgICAgICA/IFwiYWRtaW5cIlxuICAgICAgICA6IG1hdGNoZXNBbnlSb3V0ZShjdHhQYXRoLCBbUk9VVEVTLkRBU0hfUk9VVEVdKVxuICAgICAgICAgID8gXCJkYXNoYm9hcmRcIlxuICAgICAgICAgIDogcmVzb2x2ZWQgPT09IFwidW5rbm93blwiXG4gICAgICAgICAgICA/IFwidXNlclwiXG4gICAgICAgICAgICA6IFwidW5rbm93blwiO1xuICByZXR1cm4geyB0cmlnZ2VyZWRCeTogcmVzb2x2ZWQsIHRyaWdnZXJDb250ZXh0IH07XG59O1xuXG4vLyBkYXNoIDgwOS04MTQg66+465+sOiBvcmdhbml6YXRpb24gaG9va+ydgCDsnbjspp0g7Luo7YWN7Iqk7Yq4IOyXhuydtOuPhCDtmLjstpzrkJjrr4DroZxcbi8vIOyjvOyWtOynhCB1c2VyIOqwneyytOuhnOu2gO2EsCDtirjrpqzqsbAg7KCV67O066W8IO2VqeyEse2VnOuLpC5cbmNvbnN0IGdldE9yZ2FuaXphdGlvblRyaWdnZXJJbmZvID0gKHVzZXI6IHsgaWQ/OiBzdHJpbmcgfSB8IG51bGwgfCB1bmRlZmluZWQpOiBCdWlsZGVyVHJpZ2dlciA9PiAoe1xuICB0cmlnZ2VyZWRCeTogdXNlcj8uaWQgPz8gXCJ1bmtub3duXCIsXG4gIHRyaWdnZXJDb250ZXh0OiBcIm9yZ2FuaXphdGlvblwiLFxufSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIGJldHRlci1hdXRoIGN0eCDtg4DsnoUgaGVscGVycyAo64K067aAIHNoYXBl7J2AIOufsO2DgOyehCDqtazsobDrpbwg6riw7KSA7Jy866GcIOyige2YgCDsgqzsmqntlZzri6QpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG50eXBlIEJldHRlckF1dGhSZXF1ZXN0Q3R4ID0gR2VuZXJpY0VuZHBvaW50Q29udGV4dCAmIHtcbiAgY29udGV4dDogR2VuZXJpY0VuZHBvaW50Q29udGV4dFtcImNvbnRleHRcIl0gJiB7XG4gICAgbG9jYXRpb24/OiBCdWlsZGVyTG9jYXRpb24gfCBudWxsO1xuICB9O1xufTtcblxuLy8gZGF0YWJhc2VIb29rcyBhZnRlciDsvZzrsLHsnZggY3R464qUIOyEoO2DneyggeydtOupsCBzaGFwZeydhCDrn7Dtg4DsnoTsl5DshJwg7KKB7Z6M64ukLlxuY29uc3QgbmFycm93UmVxdWVzdEN0eCA9IChyYXc6IEdlbmVyaWNFbmRwb2ludENvbnRleHQgfCBudWxsKTogQmV0dGVyQXV0aFJlcXVlc3RDdHggfCBudWxsID0+IHJhdztcblxuLy8gYWRhcHRlci5maW5kT25lIO2YuOy2nCDsi6TtjKgg7IucIG51bGzsnYQg67CY7ZmY7ZWc64ukLiBkYXNoIO2XrO2NvOyZgCDrj5nsnbwg7KCV7LGFLlxuY29uc3QgZmV0Y2hVc2VyQnkgPSBhc3luYyAoXG4gIGN0eDogQmV0dGVyQXV0aFJlcXVlc3RDdHgsXG4gIGZpZWxkOiBcImlkXCIgfCBcImVtYWlsXCIsXG4gIHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTxVc2VyUHJvZmlsZUxpdGU+ID0+IHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFkYXB0ZXIgPSBjdHguY29udGV4dC5hZGFwdGVyO1xuICBpZiAoIWFkYXB0ZXIpIHJldHVybiBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IHJvdyA9IGF3YWl0IGFkYXB0ZXIuZmluZE9uZSh7XG4gICAgICBtb2RlbDogXCJ1c2VyXCIsXG4gICAgICBzZWxlY3Q6IFtcImlkXCIsIFwibmFtZVwiLCBcImVtYWlsXCJdLFxuICAgICAgd2hlcmU6IFt7IGZpZWxkLCB2YWx1ZSB9XSxcbiAgICB9KTtcbiAgICBpZiAoIXJvdyB8fCAhaXNPYmplY3RWYWx1ZShyb3cpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBpZCA9IFwiaWRcIiBpbiByb3cgPyByb3cuaWQgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbmFtZSA9IFwibmFtZVwiIGluIHJvdyA/IHJvdy5uYW1lIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVtYWlsID0gXCJlbWFpbFwiIGluIHJvdyA/IHJvdy5lbWFpbCA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IFN0cmluZyhpZCksXG4gICAgICBuYW1lOiBpc1N0cmluZ1ZhbHVlKG5hbWUpID8gbmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVtYWlsOiBpc1N0cmluZ1ZhbHVlKGVtYWlsKSA/IGVtYWlsIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5jb25zdCBpc05vbkVtcHR5U3RyaW5nID0gPFZhbHVlPih2YWx1ZTogVmFsdWUpOiB2YWx1ZSBpcyBWYWx1ZSAmIHN0cmluZyA9PlxuICBpc1N0cmluZ1ZhbHVlKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwO1xuXG4vLyBkYXNoIOygnOqxsCDsi5wg7ZWo6ruYIOyCrOudvOynhCBsb2NhdGlvbiDqs7XquIkg6rK966Gc66W8IOuMgOyytO2VnOuLpC5cbi8vIOyasOyEoOyInOychDogY2YtY29ubmVjdGluZy1pcCA+IHgtZm9yd2FyZGVkLWZvcijssqsg7ZWt66qpKSA+IHgtcmVhbC1pcCA+IHgtdmVyY2VsLWZvcndhcmRlZC1mb3Jcbi8vIChzb25hbXUudHMgSVBfSEVBREVSUyDsg4HsiJjsmYAg64+Z7J28KVxuY29uc3QgSVBfSEVBREVSX09SREVSID0gW1xuICBcImNmLWNvbm5lY3RpbmctaXBcIixcbiAgXCJ4LWZvcndhcmRlZC1mb3JcIixcbiAgXCJ4LXJlYWwtaXBcIixcbiAgXCJ4LXZlcmNlbC1mb3J3YXJkZWQtZm9yXCIsXG5dIGFzIGNvbnN0O1xuXG50eXBlIEhlYWRlckNvbGxlY3Rpb24gPVxuICB8IEhlYWRlcnNcbiAgfCB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkIH1cbiAgfCBudWxsXG4gIHwgdW5kZWZpbmVkO1xuXG5jb25zdCByZWFkSGVhZGVyID0gKGhlYWRlcnM6IEhlYWRlckNvbGxlY3Rpb24sIGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGlmICghaGVhZGVycykgcmV0dXJuIG51bGw7XG4gIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgIHJldHVybiBoZWFkZXJzLmdldChrZXkpO1xuICB9XG4gIGlmIChpc09iamVjdFZhbHVlKGhlYWRlcnMpKSB7XG4gICAgY29uc3QgdiA9IGhlYWRlcnNba2V5XSA/PyBoZWFkZXJzW2tleS50b0xvd2VyQ2FzZSgpXTtcbiAgICBpZiAoaXNTdHJpbmdWYWx1ZSh2KSkgcmV0dXJuIHY7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodikgJiYgaXNTdHJpbmdWYWx1ZSh2WzBdKSkgcmV0dXJuIHZbMF07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBleHRyYWN0TG9jYXRpb25Gcm9tSGVhZGVycyA9IChoZWFkZXJzOiBIZWFkZXJDb2xsZWN0aW9uKTogQnVpbGRlckxvY2F0aW9uID0+IHtcbiAgbGV0IGlwQWRkcmVzczogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGZvciAoY29uc3Qga2V5IG9mIElQX0hFQURFUl9PUkRFUikge1xuICAgIGNvbnN0IHJhdyA9IHJlYWRIZWFkZXIoaGVhZGVycywga2V5KTtcbiAgICBpZiAoaXNTdHJpbmdWYWx1ZShyYXcpICYmIHJhdy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaXJzdCA9IHJhdy5zcGxpdChcIixcIilbMF0/LnRyaW0oKTtcbiAgICAgIGlmIChmaXJzdCkge1xuICAgICAgICBpcEFkZHJlc3MgPSBmaXJzdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGNvdW50cnlDb2RlID0gcmVhZEhlYWRlcihoZWFkZXJzLCBcImNmLWlwY291bnRyeVwiKTtcbiAgY29uc3QgY2l0eSA9IHJlYWRIZWFkZXIoaGVhZGVycywgXCJjZi1pcGNpdHlcIik7XG4gIHJldHVybiB7XG4gICAgaXBBZGRyZXNzOiBpcEFkZHJlc3MgPz8gdW5kZWZpbmVkLFxuICAgIGNpdHk6IGNpdHkgPz8gdW5kZWZpbmVkLFxuICAgIGNvdW50cnk6IHVuZGVmaW5lZCxcbiAgICBjb3VudHJ5Q29kZTogY291bnRyeUNvZGUgPz8gdW5kZWZpbmVkLFxuICB9O1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT3JnYW5pemF0aW9uIGhvb2sg656Y7ZWRIO2XrO2NvFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8g7KO87Ja07KeEIG9yZ2FuaXphdGlvbkhvb2tzIOugiOy9lOuTnOyXkCDrjIDtlbQg7ZW064u5IG5hbWXsnZgg6riw7KG0IGhvb2vsnYQgY2hhaW7tlZzri6QuXG4vLyBoYW5kbGVy64qUIHBheWxvYWQg6rCd7LK0KOyyqyDrsojsp7gg7J247J6QKeunjCDrsJvslYTshJwgYXVkaXQgZW1pdOydhCDsiJjtlontlZzri6QuXG5jb25zdCB3cmFwT3JnSG9vayA9IDxQYXlsb2FkIGV4dGVuZHMgb2JqZWN0PihcbiAgcHJldmlvdXM6ICgocGF5bG9hZDogUGF5bG9hZCkgPT4gUHJvbWlzZTx2b2lkPikgfCB1bmRlZmluZWQsXG4gIGhhbmRsZXI6IChwYXlsb2FkOiBQYXlsb2FkKSA9PiBQcm9taXNlPHZvaWQ+LFxuKTogKChwYXlsb2FkOiBQYXlsb2FkKSA9PiBQcm9taXNlPHZvaWQ+KSA9PiB7XG4gIHJldHVybiBhc3luYyAocGF5bG9hZCkgPT4ge1xuICAgIGF3YWl0IGhhbmRsZXIocGF5bG9hZCk7XG4gICAgYXdhaXQgcHJldmlvdXM/LihwYXlsb2FkKTtcbiAgfTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFBsdWdpbiBlbnRyeVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLyoqXG4gKiBCZXR0ZXIgQXV0aCBkYXRhYmFzZUhvb2tzL29yZ2FuaXphdGlvbkhvb2tzL21pZGRsZXdhcmXsl5DshJwg7IiY7KeR7ZWcXG4gKiDsnbTrsqTtirjrpbwgYERCLmdldERCKFwid1wiKWDroZwg7Ja77J2AIGtuZXjsl5AgYGluZ2VzdEF1ZGl0RXZlbnRg66GcIOyggeyerO2VnOuLpC5cbiAqXG4gKiAtIGRhc2goQGJldHRlci1hdXRoL2luZnJhKeydmCBhdWRpdC1ldmVudCDsiJjsp5Eg7ZuFIOq1rOyhsOulvCDssLjqs6DtlbQgU29uYW11IOuCtOu2gCDsoIHsnqwg6rK966Gc66GcIO2PrO2Mhe2VnOuLpC5cbiAqIC0gZGFzaOydmCBpbmZyYSDsl7DqsrAvQVBJIGVuZHBvaW50IOygnOqztSDrspTsnITripQg7Y+s7ZWo7ZWY7KeAIOyViuqzoCwgYXVkaXQtZXZlbnQgZW1pdC9pbmdlc3Qg6rK966Gc66eMIOycoOyngO2VnOuLpC5cbiAqIC0gc2VjdXJpdHkgNOyiheydgCBSMSDqsrDsoJXsl5Ag65Sw6528IHNjb3BlIG91dCAoYnVpbGRlcnMudHPsnZggVE9ETyDso7zshJ0g7LC47KGwKS5cbiAqL1xuZnVuY3Rpb24gbG9jYXRpb25Gb3IoY3R4OiBCZXR0ZXJBdXRoUmVxdWVzdEN0eCk6IEJ1aWxkZXJMb2NhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjdHguY29udGV4dC5sb2NhdGlvbiA/PyB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb25hbXVBdWRpdExvZygpOiBCZXR0ZXJBdXRoUGx1Z2luIHtcbiAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInNvbmFtdVwiLCBcImF1ZGl0LWxvZ1wiXSk7XG4gIGNvbnN0IGNhdGFsb2cgPSBidWlsZEF1ZGl0RXZlbnRDYXRhbG9nKCk7XG5cbiAgLy8gZGFzaCA3Mzk0OiDrj5nsnbwg7JqU7LKt7JeQ7IScIOyEuOyFmCDrsoztgawg7IKt7KCc6rCAIOuLpO2ajCDrsJzsg53tlaAg65WMIGFsbF9zZXNzaW9uc19yZXZva2Vk66W8XG4gIC8vIO2VnCDrsojrp4wgZW1pdO2VmOuPhOuhnSDsspjrpqwg7Luo7YWN7Iqk7Yq466W8IOq4sOyWte2VnOuLpC5cbiAgY29uc3QgcHJvY2Vzc2VkQnVsa09wZXJhdGlvbkNvbnRleHRzID0gbmV3IFdlYWtTZXQ8b2JqZWN0PigpO1xuXG4gIGNvbnN0IGVtaXQgPSBhc3luYyAoZXZlbnQ6IEF1ZGl0TG9nRXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgaW5nZXN0QXVkaXRFdmVudChEQi5nZXREQihcIndcIiksIGV2ZW50KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcImF1ZGl0IGV2ZW50IGluZ2VzdCBmYWlsZWQ6IHtlcnJvcn1cIiwgeyBlcnJvcjogZXJyIH0pO1xuICAgIH1cbiAgfTtcblxuICAvLyBjdHgucGF0aCArIHNlc3Npb27sl5DshJwg7IKs7Jqp7J6QIO2KuOumrOqxsOulvCDrj4TstpztlZzri6QoZW50aXR5Lmlk66W8IHN1YmplY3TroZwg7IKs7JqpKS5cbiAgY29uc3QgdHJpZ2dlckZvciA9IChjdHg6IEJldHRlckF1dGhSZXF1ZXN0Q3R4LCBzdWJqZWN0VXNlcklkOiBzdHJpbmcpOiBCdWlsZGVyVHJpZ2dlciA9PlxuICAgIGdldFRyaWdnZXJJbmZvKGN0eC5wYXRoLCBjdHguY29udGV4dC5zZXNzaW9uPy5zZXNzaW9uPy51c2VySWQgPz8gbnVsbCwgc3ViamVjdFVzZXJJZCk7XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogXCJzb25hbXUtYXVkaXQtbG9nXCIsXG5cbiAgICBpbml0KHBsdWdpbkN0eCkge1xuICAgICAgaW5zdGFsbE9yZ2FuaXphdGlvbkhvb2tzKHBsdWdpbkN0eCwgY2F0YWxvZywgZW1pdCwgbG9nZ2VyKTtcblxuICAgICAgLy8gZGFzaCA3MjgzLTc0NDkg66+465+sOiBkYXRhYmFzZUhvb2tzICh1c2VyL3Nlc3Npb24vYWNjb3VudC92ZXJpZmljYXRpb24pLlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGRhdGFiYXNlSG9va3M6IHtcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgY3JlYXRlOiB7XG4gICAgICAgICAgICAgICAgYWZ0ZXI6IGFzeW5jIChyYXdVc2VyLCByYXdDdHgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IG5hcnJvd1JlcXVlc3RDdHgocmF3Q3R4KTtcbiAgICAgICAgICAgICAgICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBjb25zdCB1c2VyID1cbiAgICAgICAgICAgICAgICAgICAgLyogU0FGRVRZOiBiZXR0ZXItYXV0aCDtm4Xqs7wg7Ja064yR7YSwIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJhd1VzZXIgYXMgVXNlclNuYXBzaG90O1xuICAgICAgICAgICAgICAgICAgYXdhaXQgZW1pdChcbiAgICAgICAgICAgICAgICAgICAgY2F0YWxvZy51c2VyLnRyYWNrVXNlclNpZ25lZFVwKFxuICAgICAgICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckZvcihjdHgsIHVzZXIuaWQpLFxuICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uRm9yKGN0eCksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHVwZGF0ZToge1xuICAgICAgICAgICAgICAgIGFmdGVyOiBhc3luYyAocmF3VXNlciwgcmF3Q3R4KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjdHggPSBuYXJyb3dSZXF1ZXN0Q3R4KHJhd0N0eCk7XG4gICAgICAgICAgICAgICAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgY29uc3QgdXNlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qIFNBRkVUWTogYmV0dGVyLWF1dGgg7ZuF6rO8IOyWtOuMke2EsCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyByYXdVc2VyIGFzIFVzZXJTbmFwc2hvdCAmIHtcbiAgICAgICAgICAgICAgICAgICAgICBlbWFpbFZlcmlmaWVkPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICBpbWFnZT86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gY3R4LnBhdGg7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0cmlnZ2VyID0gdHJpZ2dlckZvcihjdHgsIHVzZXIuaWQpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSBsb2NhdGlvbkZvcihjdHgpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlc0FueVJvdXRlKHBhdGgsIFtST1VURVMuVVBEQVRFX1VTRVIsIFJPVVRFUy5EQVNIX1VQREFURV9VU0VSXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEZpZWxkcyA9IE9iamVjdC5rZXlzKFxuICAgICAgICAgICAgICAgICAgICAgIC8qIFNBRkVUWTogYmV0dGVyLWF1dGgg7ZuF6rO8IOyWtOuMke2EsCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoY3R4LmJvZHkgYXMgb2JqZWN0KSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzT25seUltYWdlVXBkYXRlID1cbiAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkRmllbGRzLmxlbmd0aCA9PT0gMSAmJiB1cGRhdGVkRmllbGRzWzBdID09PSBcImltYWdlXCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzT25seUVtYWlsVmVyaWZpZWRVcGRhdGUgPVxuICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHMubGVuZ3RoID09PSAxICYmIHVwZGF0ZWRGaWVsZHNbMF0gPT09IFwiZW1haWxWZXJpZmllZFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNFbWFpbFZlcmlmaWVkVXBkYXRlID0gdXBkYXRlZEZpZWxkcy5pbmNsdWRlcyhcImVtYWlsVmVyaWZpZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc09ubHlFbWFpbFZlcmlmaWVkVXBkYXRlICYmIHVzZXIuZW1haWxWZXJpZmllZCkge1xuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGVtaXQoY2F0YWxvZy51c2VyLnRyYWNrVXNlckVtYWlsVmVyaWZpZWQodXNlciwgdHJpZ2dlciwgbG9jYXRpb24pKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc09ubHlJbWFnZVVwZGF0ZSAmJiB1c2VyLmltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZW1pdChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGFsb2cudXNlci50cmFja1VzZXJQcm9maWxlSW1hZ2VVcGRhdGVkKHVzZXIsIHRyaWdnZXIsIGxvY2F0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc09ubHlJbWFnZVVwZGF0ZSAmJiAhaXNPbmx5RW1haWxWZXJpZmllZFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGVtaXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRhbG9nLnVzZXIudHJhY2tVc2VyUHJvZmlsZVVwZGF0ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbWFpbFZlcmlmaWVkVXBkYXRlICYmIHVzZXIuZW1haWxWZXJpZmllZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZW1pdChjYXRhbG9nLnVzZXIudHJhY2tVc2VyRW1haWxWZXJpZmllZCh1c2VyLCB0cmlnZ2VyLCBsb2NhdGlvbikpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaGVzQW55Um91dGUocGF0aCwgW1JPVVRFUy5DSEFOR0VfRU1BSUxdKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkRmllbGRzID0gT2JqZWN0LmtleXMoXG4gICAgICAgICAgICAgICAgICAgICAgLyogU0FGRVRZOiBiZXR0ZXItYXV0aCDtm4Xqs7wg7Ja064yR7YSwIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChjdHguYm9keSBhcyBvYmplY3QpID8/XG4gICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZW1pdChcbiAgICAgICAgICAgICAgICAgICAgICBjYXRhbG9nLnVzZXIudHJhY2tVc2VyUHJvZmlsZVVwZGF0ZWQodXNlciwgdXBkYXRlZEZpZWxkcywgdHJpZ2dlciwgbG9jYXRpb24pLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXNBbnlSb3V0ZShwYXRoLCBbUk9VVEVTLlZFUklGWV9FTUFJTF0pICYmIHVzZXIuZW1haWxWZXJpZmllZCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KGNhdGFsb2cudXNlci50cmFja1VzZXJFbWFpbFZlcmlmaWVkKHVzZXIsIHRyaWdnZXIsIGxvY2F0aW9uKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXNBbnlSb3V0ZShwYXRoLCBbUk9VVEVTLkFETUlOX0JBTl9VU0VSXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJiYW5uZWRcIiBpbiB1c2VyICYmXG4gICAgICAgICAgICAgICAgICAgIHVzZXIuYmFubmVkXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZW1pdChjYXRhbG9nLnVzZXIudHJhY2tVc2VyQmFubmVkKHVzZXIsIHRyaWdnZXIsIGxvY2F0aW9uKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXNBbnlSb3V0ZShwYXRoLCBbUk9VVEVTLkFETUlOX1VOQkFOX1VTRVJdKSAmJlxuICAgICAgICAgICAgICAgICAgICBcImJhbm5lZFwiIGluIHVzZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgIXVzZXIuYmFubmVkXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZW1pdChjYXRhbG9nLnVzZXIudHJhY2tVc2VyVW5CYW5uZWQodXNlciwgdHJpZ2dlciwgbG9jYXRpb24pKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkZWxldGU6IHtcbiAgICAgICAgICAgICAgICBhZnRlcjogYXN5bmMgKHJhd1VzZXIsIHJhd0N0eCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY3R4ID0gbmFycm93UmVxdWVzdEN0eChyYXdDdHgpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXIgPVxuICAgICAgICAgICAgICAgICAgICAvKiBTQUZFVFk6IGJldHRlci1hdXRoIO2bheqzvCDslrTrjJHthLAg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcmF3VXNlciBhcyBVc2VyU25hcHNob3Q7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICBjYXRhbG9nLnVzZXIudHJhY2tVc2VyRGVsZXRlZCh1c2VyLCB0cmlnZ2VyRm9yKGN0eCwgdXNlci5pZCksIGxvY2F0aW9uRm9yKGN0eCkpLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlc3Npb246IHtcbiAgICAgICAgICAgICAgY3JlYXRlOiB7XG4gICAgICAgICAgICAgICAgYmVmb3JlOiBhc3luYyAoXG4gICAgICAgICAgICAgICAgICByYXdTZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgcmF3Q3R4LFxuICAgICAgICAgICAgICAgICk6IFByb21pc2U8eyBkYXRhOiB7IGxvZ2luTWV0aG9kOiBzdHJpbmcgfCBudWxsIH0gfSB8IHVuZGVmaW5lZD4gPT4ge1xuICAgICAgICAgICAgICAgICAgdm9pZCByYXdTZXNzaW9uO1xuICAgICAgICAgICAgICAgICAgY29uc3QgY3R4ID0gbmFycm93UmVxdWVzdEN0eChyYXdDdHgpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFjdHgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IGxvZ2luTWV0aG9kOiBnZXRMb2dpbk1ldGhvZChjdHgucGF0aCwgY3R4LnBhcmFtcz8uaWQpIH0gfTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFmdGVyOiBhc3luYyAocmF3U2Vzc2lvbiwgcmF3Q3R4KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjdHggPSBuYXJyb3dSZXF1ZXN0Q3R4KHJhd0N0eCk7XG4gICAgICAgICAgICAgICAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qIFNBRkVUWTogYmV0dGVyLWF1dGgg7ZuF6rO8IOyWtOuMke2EsCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyByYXdTZXNzaW9uIGFzIFNlc3Npb25TbmFwc2hvdDtcbiAgICAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbi51c2VySWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gbG9jYXRpb25Gb3IoY3R4KTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxvZ2luTWV0aG9kID0gZ2V0TG9naW5NZXRob2QoY3R4LnBhdGgsIGN0eC5wYXJhbXM/LmlkKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICBjb25zdCBlbnJpY2hlZFNlc3Npb246IFNlc3Npb25TbmFwc2hvdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc2Vzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgbG9naW5NZXRob2Q6IGxvZ2luTWV0aG9kID8/IHNlc3Npb24ubG9naW5NZXRob2QgPz8gbnVsbCxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBjb25zdCB1c2VyID0gYXdhaXQgZmV0Y2hVc2VyQnkoY3R4LCBcImlkXCIsIHNlc3Npb24udXNlcklkKTtcblxuICAgICAgICAgICAgICAgICAgbGV0IHRyaWdnZXI6IEJ1aWxkZXJUcmlnZ2VyO1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzQW55Um91dGUoY3R4LnBhdGgsIFtcbiAgICAgICAgICAgICAgICAgICAgICBST1VURVMuU0lHTl9JTixcbiAgICAgICAgICAgICAgICAgICAgICBST1VURVMuU0lHTl9VUCxcbiAgICAgICAgICAgICAgICAgICAgICBST1VURVMuU0lHTl9JTl9TT0NJQUxfQ0FMTEJBQ0ssXG4gICAgICAgICAgICAgICAgICAgICAgUk9VVEVTLlNJR05fSU5fT0FVVEhfQ0FMTEJBQ0ssXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlciA9IGdldFRyaWdnZXJJbmZvKGN0eC5wYXRoLCBzZXNzaW9uLnVzZXJJZCwgc2Vzc2lvbi51c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICAgIGNhdGFsb2cuc2Vzc2lvbi50cmFja1VzZXJTaWduZWRJbihlbnJpY2hlZFNlc3Npb24sIHVzZXIsIHRyaWdnZXIsIGxvY2F0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgPSB0cmlnZ2VyRm9yKGN0eCwgc2Vzc2lvbi51c2VySWQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYXdhaXQgZW1pdChcbiAgICAgICAgICAgICAgICAgICAgY2F0YWxvZy5zZXNzaW9uLnRyYWNrU2Vzc2lvbkNyZWF0ZWQoZW5yaWNoZWRTZXNzaW9uLCB1c2VyLCB0cmlnZ2VyLCBsb2NhdGlvbiksXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKGlzTm9uRW1wdHlTdHJpbmcoc2Vzc2lvbi5pbXBlcnNvbmF0ZWRCeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1wZXJzb25hdG9yID0gYXdhaXQgZmV0Y2hVc2VyQnkoY3R4LCBcImlkXCIsIHNlc3Npb24uaW1wZXJzb25hdGVkQnkpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICAgIGNhdGFsb2cuc2Vzc2lvbi50cmFja1VzZXJJbXBlcnNvbmF0ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnJpY2hlZFNlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1wZXJzb25hdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWRCeTogc2Vzc2lvbi5pbXBlcnNvbmF0ZWRCeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckNvbnRleHQ6IHRyaWdnZXIudHJpZ2dlckNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkZWxldGU6IHtcbiAgICAgICAgICAgICAgICBhZnRlcjogYXN5bmMgKHJhd1Nlc3Npb24sIHJhd0N0eCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY3R4ID0gbmFycm93UmVxdWVzdEN0eChyYXdDdHgpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPVxuICAgICAgICAgICAgICAgICAgICAvKiBTQUZFVFk6IGJldHRlci1hdXRoIO2bheqzvCDslrTrjJHthLAg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcmF3U2Vzc2lvbiBhcyBTZXNzaW9uU25hcHNob3Q7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGxvY2F0aW9uRm9yKGN0eCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBlbnJpY2hlZFNlc3Npb246IFNlc3Npb25TbmFwc2hvdCA9IHsgLi4uc2Vzc2lvbiB9O1xuICAgICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGZldGNoVXNlckJ5KGN0eCwgXCJpZFwiLCBzZXNzaW9uLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0cmlnZ2VyID0gdHJpZ2dlckZvcihjdHgsIHNlc3Npb24udXNlcklkKTtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlc0FueVJvdXRlKGN0eC5wYXRoLCBbXG4gICAgICAgICAgICAgICAgICAgICAgUk9VVEVTLlJFVk9LRV9BTExfU0VTU0lPTlMsXG4gICAgICAgICAgICAgICAgICAgICAgUk9VVEVTLkFETUlOX1JFVk9LRV9VU0VSX1NFU1NJT05TLFxuICAgICAgICAgICAgICAgICAgICAgIFJPVVRFUy5EQVNIX1JFVk9LRV9TRVNTSU9OU19BTEwsXG4gICAgICAgICAgICAgICAgICAgICAgUk9VVEVTLkRBU0hfQkFOX1VTRVIsXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWRCdWxrT3BlcmF0aW9uQ29udGV4dHMuaGFzKGN0eCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0YWxvZy5zZXNzaW9uLnRyYWNrU2Vzc2lvblJldm9rZWRBbGwoZW5yaWNoZWRTZXNzaW9uLCB1c2VyLCB0cmlnZ2VyKSxcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZEJ1bGtPcGVyYXRpb25Db250ZXh0cy5hZGQoY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaGVzQW55Um91dGUoY3R4LnBhdGgsIFtST1VURVMuU0lHTl9PVVRdKSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICAgIGNhdGFsb2cuc2Vzc2lvbi50cmFja1VzZXJTaWduZWRPdXQoZW5yaWNoZWRTZXNzaW9uLCB1c2VyLCB0cmlnZ2VyLCBsb2NhdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICAgIGNhdGFsb2cuc2Vzc2lvbi50cmFja1Nlc3Npb25SZXZva2VkKGVucmljaGVkU2Vzc2lvbiwgdXNlciwgdHJpZ2dlciwgbG9jYXRpb24pLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKGlzTm9uRW1wdHlTdHJpbmcoc2Vzc2lvbi5pbXBlcnNvbmF0ZWRCeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1wZXJzb25hdG9yID0gYXdhaXQgZmV0Y2hVc2VyQnkoY3R4LCBcImlkXCIsIHNlc3Npb24uaW1wZXJzb25hdGVkQnkpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICAgIGNhdGFsb2cuc2Vzc2lvbi50cmFja1VzZXJJbXBlcnNvbmF0aW9uU3RvcChcbiAgICAgICAgICAgICAgICAgICAgICAgIGVucmljaGVkU2Vzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbXBlcnNvbmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY291bnQ6IHtcbiAgICAgICAgICAgICAgY3JlYXRlOiB7XG4gICAgICAgICAgICAgICAgYWZ0ZXI6IGFzeW5jIChyYXdBY2NvdW50LCByYXdDdHgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IG5hcnJvd1JlcXVlc3RDdHgocmF3Q3R4KTtcbiAgICAgICAgICAgICAgICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBjb25zdCBhY2NvdW50ID1cbiAgICAgICAgICAgICAgICAgICAgLyogU0FGRVRZOiBiZXR0ZXItYXV0aCDtm4Xqs7wg7Ja064yR7YSwIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJhd0FjY291bnQgYXMgQWNjb3VudFNuYXBzaG90O1xuICAgICAgICAgICAgICAgICAgaWYgKCFhY2NvdW50LnVzZXJJZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGZldGNoVXNlckJ5KGN0eCwgXCJpZFwiLCBhY2NvdW50LnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICBjYXRhbG9nLmFjY291bnQudHJhY2tBY2NvdW50TGlua2luZyhcbiAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50LFxuICAgICAgICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckZvcihjdHgsIGFjY291bnQudXNlcklkKSxcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbkZvcihjdHgpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB1cGRhdGU6IHtcbiAgICAgICAgICAgICAgICBhZnRlcjogYXN5bmMgKHJhd0FjY291bnQsIHJhd0N0eCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY3R4ID0gbmFycm93UmVxdWVzdEN0eChyYXdDdHgpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFjY291bnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiBTQUZFVFk6IGJldHRlci1hdXRoIO2bheqzvCDslrTrjJHthLAg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcmF3QWNjb3VudCBhcyBBY2NvdW50U25hcHNob3Q7XG4gICAgICAgICAgICAgICAgICBpZiAoIWFjY291bnQudXNlcklkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICFtYXRjaGVzQW55Um91dGUoY3R4LnBhdGgsIFtcbiAgICAgICAgICAgICAgICAgICAgICBST1VURVMuQ0hBTkdFX1BBU1NXT1JELFxuICAgICAgICAgICAgICAgICAgICAgIFJPVVRFUy5TRVRfUEFTU1dPUkQsXG4gICAgICAgICAgICAgICAgICAgICAgUk9VVEVTLlJFU0VUX1BBU1NXT1JELFxuICAgICAgICAgICAgICAgICAgICAgIFJPVVRFUy5BRE1JTl9TRVRfUEFTU1dPUkQsXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGZldGNoVXNlckJ5KGN0eCwgXCJpZFwiLCBhY2NvdW50LnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICBjYXRhbG9nLmFjY291bnQudHJhY2tBY2NvdW50UGFzc3dvcmRDaGFuZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgYWNjb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJGb3IoY3R4LCBhY2NvdW50LnVzZXJJZCksXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25Gb3IoY3R4KSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZGVsZXRlOiB7XG4gICAgICAgICAgICAgICAgYWZ0ZXI6IGFzeW5jIChyYXdBY2NvdW50LCByYXdDdHgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IG5hcnJvd1JlcXVlc3RDdHgocmF3Q3R4KTtcbiAgICAgICAgICAgICAgICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBjb25zdCBhY2NvdW50ID1cbiAgICAgICAgICAgICAgICAgICAgLyogU0FGRVRZOiBiZXR0ZXItYXV0aCDtm4Xqs7wg7Ja064yR7YSwIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJhd0FjY291bnQgYXMgQWNjb3VudFNuYXBzaG90O1xuICAgICAgICAgICAgICAgICAgaWYgKCFhY2NvdW50LnVzZXJJZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGZldGNoVXNlckJ5KGN0eCwgXCJpZFwiLCBhY2NvdW50LnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICBjYXRhbG9nLmFjY291bnQudHJhY2tBY2NvdW50VW5saW5rKFxuICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRm9yKGN0eCwgYWNjb3VudC51c2VySWQpLFxuICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uRm9yKGN0eCksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyaWZpY2F0aW9uOiB7XG4gICAgICAgICAgICAgIGNyZWF0ZToge1xuICAgICAgICAgICAgICAgIGFmdGVyOiBhc3luYyAocmF3VmVyaWZpY2F0aW9uLCByYXdDdHgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IG5hcnJvd1JlcXVlc3RDdHgocmF3Q3R4KTtcbiAgICAgICAgICAgICAgICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXNBbnlSb3V0ZShjdHgucGF0aCwgW1JPVVRFUy5SRVFVRVNUX1BBU1NXT1JEX1JFU0VUXSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qIFNBRkVUWTogYmV0dGVyLWF1dGgg7ZuF6rO8IOyWtOuMke2EsCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyByYXdWZXJpZmljYXRpb24gYXMgVmVyaWZpY2F0aW9uU25hcHNob3Q7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uVXNlcklkID0gY3R4LmNvbnRleHQuc2Vzc2lvbj8udXNlcj8uaWQgPz8gXCJ1bmtub3duXCI7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0cmlnZ2VyID0gZ2V0VHJpZ2dlckluZm8oY3R4LnBhdGgsIHNlc3Npb25Vc2VySWQsIHNlc3Npb25Vc2VySWQpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGZldGNoVXNlckJ5KGN0eCwgXCJpZFwiLCB2ZXJpZmljYXRpb24udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgYXdhaXQgZW1pdChcbiAgICAgICAgICAgICAgICAgICAgY2F0YWxvZy52ZXJpZmljYXRpb24udHJhY2tQYXNzd29yZFJlc2V0UmVxdWVzdChcbiAgICAgICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLFxuICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uRm9yKGN0eCksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRlbGV0ZToge1xuICAgICAgICAgICAgICAgIGFmdGVyOiBhc3luYyAocmF3VmVyaWZpY2F0aW9uLCByYXdDdHgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IG5hcnJvd1JlcXVlc3RDdHgocmF3Q3R4KTtcbiAgICAgICAgICAgICAgICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXNBbnlSb3V0ZShjdHgucGF0aCwgW1JPVVRFUy5SRVNFVF9QQVNTV09SRF0pKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBjb25zdCB2ZXJpZmljYXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAvKiBTQUZFVFk6IGJldHRlci1hdXRoIO2bheqzvCDslrTrjJHthLAg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcmF3VmVyaWZpY2F0aW9uIGFzIFZlcmlmaWNhdGlvblNuYXBzaG90O1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IGN0eC5jb250ZXh0LnNlc3Npb24/LnVzZXI/LmlkID8/IFwidW5rbm93blwiO1xuICAgICAgICAgICAgICAgICAgY29uc3QgdHJpZ2dlciA9IGdldFRyaWdnZXJJbmZvKGN0eC5wYXRoLCBzZXNzaW9uVXNlcklkLCBzZXNzaW9uVXNlcklkKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXIgPSBhd2FpdCBmZXRjaFVzZXJCeShjdHgsIFwiaWRcIiwgdmVyaWZpY2F0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGVtaXQoXG4gICAgICAgICAgICAgICAgICAgIGNhdGFsb2cudmVyaWZpY2F0aW9uLnRyYWNrUGFzc3dvcmRSZXNldFJlcXVlc3RDb21wbGV0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25Gb3IoY3R4KSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIGhvb2tzOiB7XG4gICAgICBiZWZvcmU6IFtcbiAgICAgICAge1xuICAgICAgICAgIC8vIGRhc2gg7KCc6rGw66GcIOyCrOudvOynhCBsb2NhdGlvbiDqs7XquIkg6rK966Gc66W8IOuzteq1rO2VnOuLpC5cbiAgICAgICAgICAvLyDrqqjrk6Ag7JqU7LKt7JeQ7IScIGN0eC5jb250ZXh0LmxvY2F0aW9u7J2EIOyxhOybjCDsnbTtm4Qg67mM642U65Ok7J20IGlwQWRkcmVzcy9jaXR5L2NvdW50cnlDb2Rl66W8IOq4sOuhne2VoCDsiJgg7J6I6rKMIO2VnOuLpC5cbiAgICAgICAgICBtYXRjaGVyOiAoKSA9PiB0cnVlLFxuICAgICAgICAgIGhhbmRsZXI6IGNyZWF0ZUF1dGhNaWRkbGV3YXJlKGFzeW5jIChyYXdDdHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN0eDogQmV0dGVyQXV0aFJlcXVlc3RDdHggPSByYXdDdHg7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gY3R4LmhlYWRlcnMgPz8gY3R4LnJlcXVlc3Q/LmhlYWRlcnM7XG4gICAgICAgICAgICBjdHguY29udGV4dC5sb2NhdGlvbiA9IGV4dHJhY3RMb2NhdGlvbkZyb21IZWFkZXJzKGhlYWRlcnMpO1xuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFmdGVyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBkYXNoIDc0NjItNzQ4NyDrr7jrn6w6IHZlcmlmaWNhdGlvbiBlbWFpbCBzZW5kLCBzaWduLWluIGF0dGVtcHRzLlxuICAgICAgICAgIC8vIEdFVCDsmpTssq3snYAg7L2c67CxIOqyveuhnOunjCDthrXqs7zsi5ztgqjri6QuXG4gICAgICAgICAgbWF0Y2hlcjogKGN0eCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgaWYgKGN0eC5yZXF1ZXN0Py5tZXRob2QgIT09IFwiR0VUXCIpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKCFjdHgucmVxdWVzdC51cmwpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHAgPSBuZXcgVVJMKGN0eC5yZXF1ZXN0LnVybCkucGF0aG5hbWU7XG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzQW55Um91dGUocCwgW1xuICAgICAgICAgICAgICAgIFJPVVRFUy5TSUdOX0lOX1NPQ0lBTF9DQUxMQkFDSyxcbiAgICAgICAgICAgICAgICBST1VURVMuU0lHTl9JTl9PQVVUSF9DQUxMQkFDSyxcbiAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGFuZGxlcjogY3JlYXRlQXV0aE1pZGRsZXdhcmUoYXN5bmMgKHJhd0N0eCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gbmFycm93UmVxdWVzdEN0eChyYXdDdHgpO1xuICAgICAgICAgICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25Vc2VyID0gY3R4LmNvbnRleHQuc2Vzc2lvbj8udXNlcjtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBzZXNzaW9uVXNlcj8uaWQgPz8gXCJ1bmtub3duXCI7XG4gICAgICAgICAgICBjb25zdCB0cmlnZ2VyID0gZ2V0VHJpZ2dlckluZm8oY3R4LnBhdGgsIHNlc3Npb25Vc2VySWQsIHNlc3Npb25Vc2VySWQpO1xuICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSBsb2NhdGlvbkZvcihjdHgpO1xuICAgICAgICAgICAgY29uc3QgcmV0dXJuZWQgPSBjdHguY29udGV4dC5yZXR1cm5lZDtcbiAgICAgICAgICAgIGNvbnN0IGlzRXJyb3JlZCA9IHJldHVybmVkIGluc3RhbmNlb2YgRXJyb3I7XG5cbiAgICAgICAgICAgIC8vIHZlcmlmaWNhdGlvbiBlbWFpbCBzZW50XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG1hdGNoZXNBbnlSb3V0ZShjdHgucGF0aCwgW1JPVVRFUy5TRU5EX1ZFUklGSUNBVElPTl9FTUFJTF0pICYmXG4gICAgICAgICAgICAgIGN0eC5jb250ZXh0LnNlc3Npb24gJiZcbiAgICAgICAgICAgICAgIWlzRXJyb3JlZFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25FbnRpdHkgPVxuICAgICAgICAgICAgICAgIC8qIFNBRkVUWTogYmV0dGVyLWF1dGgg7ZuF6rO8IOyWtOuMke2EsCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBjdHguY29udGV4dFxuICAgICAgICAgICAgICAgICAgLnNlc3Npb24uc2Vzc2lvbiBhcyBTZXNzaW9uU25hcHNob3QgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIGNvbnN0IHVzZXIgPSAvKiBTQUZFVFk6IGJldHRlci1hdXRoIO2bheqzvCDslrTrjJHthLAg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gY3R4XG4gICAgICAgICAgICAgICAgLmNvbnRleHQuc2Vzc2lvbi51c2VyIGFzIHsgbmFtZT86IHN0cmluZzsgZW1haWw/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgaWYgKHNlc3Npb25FbnRpdHkgJiYgdXNlcikge1xuICAgICAgICAgICAgICAgIGF3YWl0IGVtaXQoXG4gICAgICAgICAgICAgICAgICBjYXRhbG9nLnNlc3Npb24udHJhY2tFbWFpbFZlcmlmaWNhdGlvblNlbnQoc2Vzc2lvbkVudGl0eSwgdXNlciwgdHJpZ2dlciksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBib2R5ID0gY3R4LmJvZHk7XG4gICAgICAgICAgICAvLyBlbWFpbCBzaWduLWluIGF0dGVtcHQgZmFpbGVkXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG1hdGNoZXNBbnlSb3V0ZShjdHgucGF0aCwgW1JPVVRFUy5TSUdOX0lOX0VNQUlMLCBST1VURVMuU0lHTl9JTl9FTUFJTF9PVFBdKSAmJlxuICAgICAgICAgICAgICBpc0Vycm9yZWQgJiZcbiAgICAgICAgICAgICAgaXNTdHJpbmdWYWx1ZShib2R5Py5lbWFpbClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCB1c2VyID0gYXdhaXQgZmV0Y2hVc2VyQnkoY3R4LCBcImVtYWlsXCIsIGJvZHkuZW1haWwpO1xuICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgIGNhdGFsb2cuc2Vzc2lvbi50cmFja0VtYWlsU2lnbkluQXR0ZW1wdChcbiAgICAgICAgICAgICAgICAgIHsgZW1haWw6IGJvZHkuZW1haWwsIGxvZ2luTWV0aG9kOiBnZXRMb2dpbk1ldGhvZChjdHgucGF0aCwgY3R4LnBhcmFtcz8uaWQpIH0sXG4gICAgICAgICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgICAgICAgdHJpZ2dlcixcbiAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzb2NpYWwgc2lnbi1pbiBhdHRlbXB0IGZhaWxlZCAoUE9TVClcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbWF0Y2hlc0FueVJvdXRlKGN0eC5wYXRoLCBbUk9VVEVTLlNJR05fSU5fU09DSUFMXSkgJiZcbiAgICAgICAgICAgICAgaXNFcnJvcmVkICYmXG4gICAgICAgICAgICAgIGlzU3RyaW5nVmFsdWUoYm9keT8ucHJvdmlkZXIpICYmXG4gICAgICAgICAgICAgIGlzU3RyaW5nVmFsdWUoYm9keT8uaWRUb2tlbilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgIGNhdGFsb2cuc2Vzc2lvbi50cmFja1NvY2lhbFNpZ25JbkF0dGVtcHQoXG4gICAgICAgICAgICAgICAgICB7IGxvZ2luTWV0aG9kOiBnZXRMb2dpbk1ldGhvZChjdHgucGF0aCwgY3R4LnBhcmFtcz8uaWQpIH0sXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgdHJpZ2dlcixcbiAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzb2NpYWwgcmVkaXJlY3Rpb24gY2FsbGJhY2sgZmFpbGVkIChHRVQpXG4gICAgICAgICAgICBpZiAobWF0Y2hlc0FueVJvdXRlKGN0eC5wYXRoLCBbUk9VVEVTLlNJR05fSU5fU09DSUFMX0NBTExCQUNLXSkgJiYgaXNFcnJvcmVkKSB7XG4gICAgICAgICAgICAgIGF3YWl0IGVtaXQoXG4gICAgICAgICAgICAgICAgY2F0YWxvZy5zZXNzaW9uLnRyYWNrU29jaWFsU2lnbkluUmVkaXJlY3Rpb25BdHRlbXB0KFxuICAgICAgICAgICAgICAgICAgeyBsb2dpbk1ldGhvZDogZ2V0TG9naW5NZXRob2QoY3R4LnBhdGgsIGN0eC5wYXJhbXM/LmlkKSB9LFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIHRyaWdnZXIsXG4gICAgICAgICAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPcmdhbml6YXRpb24gaG9vayDtlanshLEgKG9yZ2FuaXphdGlvbiDtlIzrn6zqt7jsnbjsnbQg7Zmc7ISx7ZmU65CcIOqyveyasOyXkOunjClcbi8vIGRhc2ggNzE5Mi03MjgxIOuvuOufrC5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbnR5cGUgRXZlbnRFbWl0dGVyID0gKGV2ZW50OiBBdWRpdExvZ0V2ZW50KSA9PiBQcm9taXNlPHZvaWQ+O1xudHlwZSBBdWRpdExvZ2dlciA9IFJldHVyblR5cGU8dHlwZW9mIGdldExvZ2dlcj47XG5cbmZ1bmN0aW9uIGluc3RhbGxPcmdhbml6YXRpb25Ib29rcyhcbiAgcGx1Z2luQ3R4OiBBdXRoQ29udGV4dCxcbiAgY2F0YWxvZzogUmV0dXJuVHlwZTx0eXBlb2YgYnVpbGRBdWRpdEV2ZW50Q2F0YWxvZz4sXG4gIGVtaXQ6IEV2ZW50RW1pdHRlcixcbiAgbG9nZ2VyOiBBdWRpdExvZ2dlcixcbik6IHZvaWQge1xuICBjb25zdCBvcmdhbml6YXRpb25QbHVnaW4gPSBwbHVnaW5DdHguZ2V0UGx1Z2luKFwib3JnYW5pemF0aW9uXCIpO1xuXG4gIGlmICghb3JnYW5pemF0aW9uUGx1Z2luKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwib3JnYW5pemF0aW9uIHBsdWdpbiBub3QgYWN0aXZlOyBza2lwcGluZyBpbnN0cnVtZW50YXRpb25cIik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb3JnYW5pemF0aW9uUGx1Z2luLm9wdGlvbnMgPSBvcmdhbml6YXRpb25QbHVnaW4ub3B0aW9ucyA/PyB7fTtcbiAgY29uc3QgaG9va3MgPSAob3JnYW5pemF0aW9uUGx1Z2luLm9wdGlvbnMub3JnYW5pemF0aW9uSG9va3MgPVxuICAgIG9yZ2FuaXphdGlvblBsdWdpbi5vcHRpb25zLm9yZ2FuaXphdGlvbkhvb2tzID8/IHt9KTtcblxuICBob29rcy5hZnRlckNyZWF0ZU9yZ2FuaXphdGlvbiA9IHdyYXBPcmdIb29rKGhvb2tzLmFmdGVyQ3JlYXRlT3JnYW5pemF0aW9uLCBhc3luYyAocCkgPT5cbiAgICBlbWl0KFxuICAgICAgY2F0YWxvZy5vcmdhbml6YXRpb24udHJhY2tPcmdhbml6YXRpb25DcmVhdGVkKFxuICAgICAgICBwLm9yZ2FuaXphdGlvbixcbiAgICAgICAgZ2V0T3JnYW5pemF0aW9uVHJpZ2dlckluZm8ocC51c2VyKSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcblxuICBob29rcy5hZnRlclVwZGF0ZU9yZ2FuaXphdGlvbiA9IHdyYXBPcmdIb29rKGhvb2tzLmFmdGVyVXBkYXRlT3JnYW5pemF0aW9uLCBhc3luYyAocCkgPT4ge1xuICAgIGlmICghcC5vcmdhbml6YXRpb24pIHJldHVybjtcbiAgICBhd2FpdCBlbWl0KFxuICAgICAgY2F0YWxvZy5vcmdhbml6YXRpb24udHJhY2tPcmdhbml6YXRpb25VcGRhdGVkKFxuICAgICAgICBwLm9yZ2FuaXphdGlvbixcbiAgICAgICAgZ2V0T3JnYW5pemF0aW9uVHJpZ2dlckluZm8ocC51c2VyKSxcbiAgICAgICksXG4gICAgKTtcbiAgfSk7XG5cbiAgaG9va3MuYWZ0ZXJBZGRNZW1iZXIgPSB3cmFwT3JnSG9vayhob29rcy5hZnRlckFkZE1lbWJlciwgYXN5bmMgKHApID0+XG4gICAgZW1pdChcbiAgICAgIGNhdGFsb2cubWVtYmVyLnRyYWNrT3JnYW5pemF0aW9uTWVtYmVyQWRkZWQoXG4gICAgICAgIHAub3JnYW5pemF0aW9uLFxuICAgICAgICBwLm1lbWJlcixcbiAgICAgICAgcC51c2VyLFxuICAgICAgICBnZXRPcmdhbml6YXRpb25UcmlnZ2VySW5mbyhwLnVzZXIpLFxuICAgICAgKSxcbiAgICApLFxuICApO1xuXG4gIGhvb2tzLmFmdGVyUmVtb3ZlTWVtYmVyID0gd3JhcE9yZ0hvb2soaG9va3MuYWZ0ZXJSZW1vdmVNZW1iZXIsIGFzeW5jIChwKSA9PlxuICAgIGVtaXQoXG4gICAgICBjYXRhbG9nLm1lbWJlci50cmFja09yZ2FuaXphdGlvbk1lbWJlclJlbW92ZWQoXG4gICAgICAgIHAub3JnYW5pemF0aW9uLFxuICAgICAgICBwLm1lbWJlcixcbiAgICAgICAgcC51c2VyLFxuICAgICAgICBnZXRPcmdhbml6YXRpb25UcmlnZ2VySW5mbyhwLnVzZXIpLFxuICAgICAgKSxcbiAgICApLFxuICApO1xuXG4gIGhvb2tzLmFmdGVyVXBkYXRlTWVtYmVyUm9sZSA9IHdyYXBPcmdIb29rKGhvb2tzLmFmdGVyVXBkYXRlTWVtYmVyUm9sZSwgYXN5bmMgKHApID0+XG4gICAgZW1pdChcbiAgICAgIGNhdGFsb2cubWVtYmVyLnRyYWNrT3JnYW5pemF0aW9uTWVtYmVyUm9sZVVwZGF0ZWQoXG4gICAgICAgIHAub3JnYW5pemF0aW9uLFxuICAgICAgICBwLm1lbWJlcixcbiAgICAgICAgcC51c2VyLFxuICAgICAgICBwLnByZXZpb3VzUm9sZSxcbiAgICAgICAgZ2V0T3JnYW5pemF0aW9uVHJpZ2dlckluZm8ocC51c2VyKSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcblxuICBob29rcy5hZnRlckNyZWF0ZUludml0YXRpb24gPSB3cmFwT3JnSG9vayhob29rcy5hZnRlckNyZWF0ZUludml0YXRpb24sIGFzeW5jIChwKSA9PlxuICAgIGVtaXQoXG4gICAgICBjYXRhbG9nLmludml0YXRpb24udHJhY2tPcmdhbml6YXRpb25NZW1iZXJJbnZpdGVkKFxuICAgICAgICBwLm9yZ2FuaXphdGlvbixcbiAgICAgICAgcC5pbnZpdGF0aW9uLFxuICAgICAgICBwLmludml0ZXIsXG4gICAgICAgIGdldE9yZ2FuaXphdGlvblRyaWdnZXJJbmZvKHAuaW52aXRlciksXG4gICAgICApLFxuICAgICksXG4gICk7XG5cbiAgaG9va3MuYWZ0ZXJBY2NlcHRJbnZpdGF0aW9uID0gd3JhcE9yZ0hvb2soaG9va3MuYWZ0ZXJBY2NlcHRJbnZpdGF0aW9uLCBhc3luYyAocCkgPT5cbiAgICBlbWl0KFxuICAgICAgY2F0YWxvZy5pbnZpdGF0aW9uLnRyYWNrT3JnYW5pemF0aW9uTWVtYmVySW52aXRlQWNjZXB0ZWQoXG4gICAgICAgIHAub3JnYW5pemF0aW9uLFxuICAgICAgICBwLmludml0YXRpb24sXG4gICAgICAgIHAubWVtYmVyLFxuICAgICAgICBwLnVzZXIsXG4gICAgICAgIGdldE9yZ2FuaXphdGlvblRyaWdnZXJJbmZvKHAudXNlciksXG4gICAgICApLFxuICAgICksXG4gICk7XG5cbiAgaG9va3MuYWZ0ZXJSZWplY3RJbnZpdGF0aW9uID0gd3JhcE9yZ0hvb2soaG9va3MuYWZ0ZXJSZWplY3RJbnZpdGF0aW9uLCBhc3luYyAocCkgPT5cbiAgICBlbWl0KFxuICAgICAgY2F0YWxvZy5pbnZpdGF0aW9uLnRyYWNrT3JnYW5pemF0aW9uTWVtYmVySW52aXRlUmVqZWN0ZWQoXG4gICAgICAgIHAub3JnYW5pemF0aW9uLFxuICAgICAgICBwLmludml0YXRpb24sXG4gICAgICAgIHAudXNlcixcbiAgICAgICAgZ2V0T3JnYW5pemF0aW9uVHJpZ2dlckluZm8ocC51c2VyKSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcblxuICBob29rcy5hZnRlckNhbmNlbEludml0YXRpb24gPSB3cmFwT3JnSG9vayhob29rcy5hZnRlckNhbmNlbEludml0YXRpb24sIGFzeW5jIChwKSA9PlxuICAgIGVtaXQoXG4gICAgICBjYXRhbG9nLmludml0YXRpb24udHJhY2tPcmdhbml6YXRpb25NZW1iZXJJbnZpdGVDYW5jZWxlZChcbiAgICAgICAgcC5vcmdhbml6YXRpb24sXG4gICAgICAgIHAuaW52aXRhdGlvbixcbiAgICAgICAgcC5jYW5jZWxsZWRCeSxcbiAgICAgICAgZ2V0T3JnYW5pemF0aW9uVHJpZ2dlckluZm8ocC5jYW5jZWxsZWRCeSksXG4gICAgICApLFxuICAgICksXG4gICk7XG5cbiAgaG9va3MuYWZ0ZXJDcmVhdGVUZWFtID0gd3JhcE9yZ0hvb2soaG9va3MuYWZ0ZXJDcmVhdGVUZWFtLCBhc3luYyAocCkgPT5cbiAgICBlbWl0KFxuICAgICAgY2F0YWxvZy50ZWFtLnRyYWNrT3JnYW5pemF0aW9uVGVhbUNyZWF0ZWQoXG4gICAgICAgIHAub3JnYW5pemF0aW9uLFxuICAgICAgICBwLnRlYW0sXG4gICAgICAgIGdldE9yZ2FuaXphdGlvblRyaWdnZXJJbmZvKHAudXNlciksXG4gICAgICApLFxuICAgICksXG4gICk7XG5cbiAgaG9va3MuYWZ0ZXJVcGRhdGVUZWFtID0gd3JhcE9yZ0hvb2soaG9va3MuYWZ0ZXJVcGRhdGVUZWFtLCBhc3luYyAocCkgPT4ge1xuICAgIGlmICghcC50ZWFtKSByZXR1cm47XG4gICAgYXdhaXQgZW1pdChcbiAgICAgIGNhdGFsb2cudGVhbS50cmFja09yZ2FuaXphdGlvblRlYW1VcGRhdGVkKFxuICAgICAgICBwLm9yZ2FuaXphdGlvbixcbiAgICAgICAgcC50ZWFtLFxuICAgICAgICBnZXRPcmdhbml6YXRpb25UcmlnZ2VySW5mbyhwLnVzZXIpLFxuICAgICAgKSxcbiAgICApO1xuICB9KTtcblxuICBob29rcy5hZnRlckRlbGV0ZVRlYW0gPSB3cmFwT3JnSG9vayhob29rcy5hZnRlckRlbGV0ZVRlYW0sIGFzeW5jIChwKSA9PlxuICAgIGVtaXQoXG4gICAgICBjYXRhbG9nLnRlYW0udHJhY2tPcmdhbml6YXRpb25UZWFtRGVsZXRlZChcbiAgICAgICAgcC5vcmdhbml6YXRpb24sXG4gICAgICAgIHAudGVhbSxcbiAgICAgICAgZ2V0T3JnYW5pemF0aW9uVHJpZ2dlckluZm8ocC51c2VyKSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcblxuICBob29rcy5hZnRlckFkZFRlYW1NZW1iZXIgPSB3cmFwT3JnSG9vayhob29rcy5hZnRlckFkZFRlYW1NZW1iZXIsIGFzeW5jIChwKSA9PlxuICAgIGVtaXQoXG4gICAgICBjYXRhbG9nLnRlYW0udHJhY2tPcmdhbml6YXRpb25UZWFtTWVtYmVyQWRkZWQoXG4gICAgICAgIHAub3JnYW5pemF0aW9uLFxuICAgICAgICBwLnRlYW0sXG4gICAgICAgIHAudXNlcixcbiAgICAgICAgcC50ZWFtTWVtYmVyLFxuICAgICAgICBnZXRPcmdhbml6YXRpb25UcmlnZ2VySW5mbyhwLnVzZXIpLFxuICAgICAgKSxcbiAgICApLFxuICApO1xuXG4gIGhvb2tzLmFmdGVyUmVtb3ZlVGVhbU1lbWJlciA9IHdyYXBPcmdIb29rKGhvb2tzLmFmdGVyUmVtb3ZlVGVhbU1lbWJlciwgYXN5bmMgKHApID0+XG4gICAgZW1pdChcbiAgICAgIGNhdGFsb2cudGVhbS50cmFja09yZ2FuaXphdGlvblRlYW1NZW1iZXJSZW1vdmVkKFxuICAgICAgICBwLm9yZ2FuaXphdGlvbixcbiAgICAgICAgcC50ZWFtLFxuICAgICAgICBwLnVzZXIsXG4gICAgICAgIHAudGVhbU1lbWJlcixcbiAgICAgICAgZ2V0T3JnYW5pemF0aW9uVHJpZ2dlckluZm8ocC51c2VyKSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7UUFJc0M7bUJBQ2tDO0FBa0J4RSxNQUFNLGNBQWMsVUFBMEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU07QUFDckUsTUFBTSxlQUFlLFVBQTBCLE1BQU0sUUFBUSx1QkFBdUIsTUFBTTtBQUMxRixNQUFNLGdCQUFnQixVQUEwQjtDQUM5QyxNQUFNLFVBQVUsWUFBWSxXQUFXLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxlQUFlLFFBQVE7Q0FDOUUsT0FBTyxJQUFJLE9BQU8sR0FBRyxRQUFRLFdBQVc7QUFDMUM7QUFDQSxNQUFNLG1CQUFtQixXQUErQixXQUF1QztDQUM3RixJQUFJLENBQUMsV0FBVyxPQUFPO0NBQ3ZCLE1BQU0sWUFBWSxXQUFXLFNBQVM7Q0FDdEMsT0FBTyxPQUFPLE1BQU0sVUFBVSxhQUFhLEtBQUssQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDO0FBQ25FO0FBRUEsTUFBTSxjQUFjO0NBQ2xCLE9BQU87Q0FDUCxPQUFPO0NBQ1AsT0FBTztDQUNQLE9BQU87Q0FDUCxPQUFPO0NBQ1AsT0FBTztBQUNUO0FBR0Es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
|
|
391
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2F1ZGl0LWxvZy9wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IHR5cGUgQXV0aENvbnRleHQsIHR5cGUgQmV0dGVyQXV0aFBsdWdpbiwgdHlwZSBHZW5lcmljRW5kcG9pbnRDb250ZXh0IH0gZnJvbSBcImJldHRlci1hdXRoXCI7XG5pbXBvcnQgeyBjcmVhdGVBdXRoTWlkZGxld2FyZSB9IGZyb20gXCJiZXR0ZXItYXV0aC9hcGlcIjtcblxuaW1wb3J0IHsgREIgfSBmcm9tIFwiLi4vLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IGlzT2JqZWN0VmFsdWUsIGlzU3RyaW5nVmFsdWUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgaW5nZXN0QXVkaXRFdmVudCB9IGZyb20gXCIuLi9hdWRpdC1sb2ctaW5nZXN0b3JcIjtcbmltcG9ydCB7IGJ1aWxkQXVkaXRFdmVudENhdGFsb2cgfSBmcm9tIFwiLi9idWlsZGVyc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBBY2NvdW50U25hcHNob3QsXG4gIHR5cGUgQXVkaXRMb2dFdmVudCxcbiAgdHlwZSBCdWlsZGVyTG9jYXRpb24sXG4gIHR5cGUgQnVpbGRlclRyaWdnZXIsXG4gIFJPVVRFUyxcbiAgdHlwZSBTZXNzaW9uU25hcHNob3QsXG4gIHR5cGUgVXNlclByb2ZpbGVMaXRlLFxuICB0eXBlIFVzZXJTbmFwc2hvdCxcbiAgdHlwZSBWZXJpZmljYXRpb25TbmFwc2hvdCxcbn0gZnJvbSBcIi4vZXZlbnRzXCI7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIOudvOyasO2MhS/tirjrpqzqsbAg7Jyg7Yu4XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5jb25zdCBzdHJpcFF1ZXJ5ID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4gdmFsdWUuc3BsaXQoXCI/XCIpWzBdIHx8IHZhbHVlO1xuY29uc3QgZXNjYXBlUmVnZXggPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB2YWx1ZS5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIik7XG5jb25zdCByb3V0ZVRvUmVnZXggPSAocm91dGU6IHN0cmluZyk6IFJlZ0V4cCA9PiB7XG4gIGNvbnN0IHBhdHRlcm4gPSBlc2NhcGVSZWdleChzdHJpcFF1ZXJ5KHJvdXRlKSkucmVwbGFjZSgvXFwvOihbXi9dKykvZywgXCIvW14vXStcIik7XG4gIHJldHVybiBuZXcgUmVnRXhwKGAke3BhdHRlcm59KD86JHxbLz9dKWApO1xufTtcbmNvbnN0IG1hdGNoZXNBbnlSb3V0ZSA9IChyb3V0ZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCwgcm91dGVzOiByZWFkb25seSBzdHJpbmdbXSk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXJvdXRlUGF0aCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBjbGVhblBhdGggPSBzdHJpcFF1ZXJ5KHJvdXRlUGF0aCk7XG4gIHJldHVybiByb3V0ZXMuc29tZSgocm91dGUpID0+IHJvdXRlVG9SZWdleChyb3V0ZSkudGVzdChjbGVhblBhdGgpKTtcbn07XG5cbmNvbnN0IExPR0lOX1BBVEhTID0gW1xuICBST1VURVMuU0lHTl9JTl9TT0NJQUxfQ0FMTEJBQ0ssXG4gIFJPVVRFUy5TSUdOX0lOX09BVVRIX0NBTExCQUNLLFxuICBST1VURVMuU0lHTl9JTl9FTUFJTCxcbiAgUk9VVEVTLlNJR05fSU5fU09DSUFMLFxuICBST1VURVMuU0lHTl9JTl9FTUFJTF9PVFAsXG4gIFJPVVRFUy5TSUdOX1VQX0VNQUlMLFxuXSBhcyBjb25zdDtcblxuLy8gZGFzaCAzMTktMzIzIOuvuOufrDog7ZiE7J6sIOyalOyyrSBwYXRo7JeQ7IScIOuhnOq3uOyduCDrsKnsi53snYQg7LaU7Lac7ZWc64ukLlxuY29uc3QgZ2V0TG9naW5NZXRob2QgPSAoY3R4UGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLCBwYXJhbXNJZD86IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBpZiAoIWN0eFBhdGgpIHJldHVybiBudWxsO1xuICBpZiAobWF0Y2hlc0FueVJvdXRlKGN0eFBhdGgsIExPR0lOX1BBVEhTKSkge1xuICAgIGlmIChwYXJhbXNJZCkgcmV0dXJuIHBhcmFtc0lkO1xuICAgIHJldHVybiBjdHhQYXRoLnNwbGl0KFwiL1wiKS5wb3AoKSA/PyBudWxsO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuLy8gZGFzaCA3OTctODAzIOuvuOufrDog7IS47IWYL+yalOyyreyXkOyEnCDtirjrpqzqsbAg7KO87LK07JmAIOy7qO2FjeyKpO2KuOulvCDrj4TstpztlZzri6QuXG5jb25zdCBnZXRUcmlnZ2VySW5mbyA9IChcbiAgY3R4UGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBzZXNzaW9uVXNlcklkOiBzdHJpbmcgfCBudWxsLFxuICB1c2VySWQ6IHN0cmluZyxcbik6IEJ1aWxkZXJUcmlnZ2VyID0+IHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBzZXNzaW9uVXNlcklkID8/IHVzZXJJZDtcbiAgY29uc3QgdHJpZ2dlckNvbnRleHQgPVxuICAgIHJlc29sdmVkID09PSB1c2VySWRcbiAgICAgID8gXCJ1c2VyXCJcbiAgICAgIDogbWF0Y2hlc0FueVJvdXRlKGN0eFBhdGgsIFtST1VURVMuQURNSU5fUk9VVEVdKVxuICAgICAgICA/IFwiYWRtaW5cIlxuICAgICAgICA6IG1hdGNoZXNBbnlSb3V0ZShjdHhQYXRoLCBbUk9VVEVTLkRBU0hfUk9VVEVdKVxuICAgICAgICAgID8gXCJkYXNoYm9hcmRcIlxuICAgICAgICAgIDogcmVzb2x2ZWQgPT09IFwidW5rbm93blwiXG4gICAgICAgICAgICA/IFwidXNlclwiXG4gICAgICAgICAgICA6IFwidW5rbm93blwiO1xuICByZXR1cm4geyB0cmlnZ2VyZWRCeTogcmVzb2x2ZWQsIHRyaWdnZXJDb250ZXh0IH07XG59O1xuXG4vLyBkYXNoIDgwOS04MTQg66+465+sOiBvcmdhbml6YXRpb24gaG9va+ydgCDsnbjspp0g7Luo7YWN7Iqk7Yq4IOyXhuydtOuPhCDtmLjstpzrkJjrr4DroZxcbi8vIOyjvOyWtOynhCB1c2VyIOqwneyytOuhnOu2gO2EsCDtirjrpqzqsbAg7KCV67O066W8IO2VqeyEse2VnOuLpC5cbmNvbnN0IGdldE9yZ2FuaXphdGlvblRyaWdnZXJJbmZvID0gKHVzZXI6IHsgaWQ/OiBzdHJpbmcgfSB8IG51bGwgfCB1bmRlZmluZWQpOiBCdWlsZGVyVHJpZ2dlciA9PiAoe1xuICB0cmlnZ2VyZWRCeTogdXNlcj8uaWQgPz8gXCJ1bmtub3duXCIsXG4gIHRyaWdnZXJDb250ZXh0OiBcIm9yZ2FuaXphdGlvblwiLFxufSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIGJldHRlci1hdXRoIGN0eCDtg4DsnoUgaGVscGVycyAo64K067aAIHNoYXBl7J2AIOufsO2DgOyehCDqtazsobDrpbwg6riw7KSA7Jy866GcIOyige2YgCDsgqzsmqntlZzri6QpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG50eXBlIEJldHRlckF1dGhSZXF1ZXN0Q3R4ID0gR2VuZXJpY0VuZHBvaW50Q29udGV4dCAmIHtcbiAgY29udGV4dDogR2VuZXJpY0VuZHBvaW50Q29udGV4dFtcImNvbnRleHRcIl0gJiB7XG4gICAgbG9jYXRpb24/OiBCdWlsZGVyTG9jYXRpb24gfCBudWxsO1xuICAgIC8vIGFmdGVyIGhvb2vsl5DshJwgZGlzcGF0Y2jqsIAg7LGE7Jqw64qUIOydkeuLteqwki4gYmV0dGVyLWF1dGggMS42LjJ467aA7YSwIEdlbmVyaWNFbmRwb2ludENvbnRleHQg7YOA7J6F7JeQ7IScIOu5oOyhjOyngOunjCBIb29rRW5kcG9pbnRDb250ZXh07JeQ64qUIOuCqOyVhCDsnojri6QuXG4gICAgcmV0dXJuZWQ/OiB1bmtub3duO1xuICB9O1xufTtcblxuLy8gZGF0YWJhc2VIb29rcyBhZnRlciDsvZzrsLHsnZggY3R464qUIOyEoO2DneyggeydtOupsCBzaGFwZeydhCDrn7Dtg4DsnoTsl5DshJwg7KKB7Z6M64ukLlxuY29uc3QgbmFycm93UmVxdWVzdEN0eCA9IChyYXc6IEdlbmVyaWNFbmRwb2ludENvbnRleHQgfCBudWxsKTogQmV0dGVyQXV0aFJlcXVlc3RDdHggfCBudWxsID0+IHJhdztcblxuLy8gYWRhcHRlci5maW5kT25lIO2YuOy2nCDsi6TtjKgg7IucIG51bGzsnYQg67CY7ZmY7ZWc64ukLiBkYXNoIO2XrO2NvOyZgCDrj5nsnbwg7KCV7LGFLlxuY29uc3QgZmV0Y2hVc2VyQnkgPSBhc3luYyAoXG4gIGN0eDogQmV0dGVyQXV0aFJlcXVlc3RDdHgsXG4gIGZpZWxkOiBcImlkXCIgfCBcImVtYWlsXCIsXG4gIHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTxVc2VyUHJvZmlsZUxpdGU+ID0+IHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFkYXB0ZXIgPSBjdHguY29udGV4dC5hZGFwdGVyO1xuICBpZiAoIWFkYXB0ZXIpIHJldHVybiBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IHJvdyA9IGF3YWl0IGFkYXB0ZXIuZmluZE9uZSh7XG4gICAgICBtb2RlbDogXCJ1c2VyXCIsXG4gICAgICBzZWxlY3Q6IFtcImlkXCIsIFwibmFtZVwiLCBcImVtYWlsXCJdLFxuICAgICAgd2hlcmU6IFt7IGZpZWxkLCB2YWx1ZSB9XSxcbiAgICB9KTtcbiAgICBpZiAoIXJvdyB8fCAhaXNPYmplY3RWYWx1ZShyb3cpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBpZCA9IFwiaWRcIiBpbiByb3cgPyByb3cuaWQgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbmFtZSA9IFwibmFtZVwiIGluIHJvdyA/IHJvdy5uYW1lIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVtYWlsID0gXCJlbWFpbFwiIGluIHJvdyA/IHJvdy5lbWFpbCA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IFN0cmluZyhpZCksXG4gICAgICBuYW1lOiBpc1N0cmluZ1ZhbHVlKG5hbWUpID8gbmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVtYWlsOiBpc1N0cmluZ1ZhbHVlKGVtYWlsKSA/IGVtYWlsIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5jb25zdCBpc05vbkVtcHR5U3RyaW5nID0gPFZhbHVlPih2YWx1ZTogVmFsdWUpOiB2YWx1ZSBpcyBWYWx1ZSAmIHN0cmluZyA9PlxuICBpc1N0cmluZ1ZhbHVlKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwO1xuXG4vLyBkYXNoIOygnOqxsCDsi5wg7ZWo6ruYIOyCrOudvOynhCBsb2NhdGlvbiDqs7XquIkg6rK966Gc66W8IOuMgOyytO2VnOuLpC5cbi8vIOyasOyEoOyInOychDogY2YtY29ubmVjdGluZy1pcCA+IHgtZm9yd2FyZGVkLWZvcijssqsg7ZWt66qpKSA+IHgtcmVhbC1pcCA+IHgtdmVyY2VsLWZvcndhcmRlZC1mb3Jcbi8vIChzb25hbXUudHMgSVBfSEVBREVSUyDsg4HsiJjsmYAg64+Z7J28KVxuY29uc3QgSVBfSEVBREVSX09SREVSID0gW1xuICBcImNmLWNvbm5lY3RpbmctaXBcIixcbiAgXCJ4LWZvcndhcmRlZC1mb3JcIixcbiAgXCJ4LXJlYWwtaXBcIixcbiAgXCJ4LXZlcmNlbC1mb3J3YXJkZWQtZm9yXCIsXG5dIGFzIGNvbnN0O1xuXG50eXBlIEhlYWRlckNvbGxlY3Rpb24gPVxuICB8IEhlYWRlcnNcbiAgfCB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkIH1cbiAgfCBudWxsXG4gIHwgdW5kZWZpbmVkO1xuXG5jb25zdCByZWFkSGVhZGVyID0gKGhlYWRlcnM6IEhlYWRlckNvbGxlY3Rpb24sIGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGlmICghaGVhZGVycykgcmV0dXJuIG51bGw7XG4gIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgIHJldHVybiBoZWFkZXJzLmdldChrZXkpO1xuICB9XG4gIGlmIChpc09iamVjdFZhbHVlKGhlYWRlcnMpKSB7XG4gICAgY29uc3QgdiA9IGhlYWRlcnNba2V5XSA/PyBoZWFkZXJzW2tleS50b0xvd2VyQ2FzZSgpXTtcbiAgICBpZiAoaXNTdHJpbmdWYWx1ZSh2KSkgcmV0dXJuIHY7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodikgJiYgaXNTdHJpbmdWYWx1ZSh2WzBdKSkgcmV0dXJuIHZbMF07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBleHRyYWN0TG9jYXRpb25Gcm9tSGVhZGVycyA9IChoZWFkZXJzOiBIZWFkZXJDb2xsZWN0aW9uKTogQnVpbGRlckxvY2F0aW9uID0+IHtcbiAgbGV0IGlwQWRkcmVzczogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGZvciAoY29uc3Qga2V5IG9mIElQX0hFQURFUl9PUkRFUikge1xuICAgIGNvbnN0IHJhdyA9IHJlYWRIZWFkZXIoaGVhZGVycywga2V5KTtcbiAgICBpZiAoaXNTdHJpbmdWYWx1ZShyYXcpICYmIHJhdy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaXJzdCA9IHJhdy5zcGxpdChcIixcIilbMF0/LnRyaW0oKTtcbiAgICAgIGlmIChmaXJzdCkge1xuICAgICAgICBpcEFkZHJlc3MgPSBmaXJzdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGNvdW50cnlDb2RlID0gcmVhZEhlYWRlcihoZWFkZXJzLCBcImNmLWlwY291bnRyeVwiKTtcbiAgY29uc3QgY2l0eSA9IHJlYWRIZWFkZXIoaGVhZGVycywgXCJjZi1pcGNpdHlcIik7XG4gIHJldHVybiB7XG4gICAgaXBBZGRyZXNzOiBpcEFkZHJlc3MgPz8gdW5kZWZpbmVkLFxuICAgIGNpdHk6IGNpdHkgPz8gdW5kZWZpbmVkLFxuICAgIGNvdW50cnk6IHVuZGVmaW5lZCxcbiAgICBjb3VudHJ5Q29kZTogY291bnRyeUNvZGUgPz8gdW5kZWZpbmVkLFxuICB9O1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT3JnYW5pemF0aW9uIGhvb2sg656Y7ZWRIO2XrO2NvFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8g7KO87Ja07KeEIG9yZ2FuaXphdGlvbkhvb2tzIOugiOy9lOuTnOyXkCDrjIDtlbQg7ZW064u5IG5hbWXsnZgg6riw7KG0IGhvb2vsnYQgY2hhaW7tlZzri6QuXG4vLyBoYW5kbGVy64qUIHBheWxvYWQg6rCd7LK0KOyyqyDrsojsp7gg7J247J6QKeunjCDrsJvslYTshJwgYXVkaXQgZW1pdOydhCDsiJjtlontlZzri6QuXG5jb25zdCB3cmFwT3JnSG9vayA9IDxQYXlsb2FkIGV4dGVuZHMgb2JqZWN0PihcbiAgcHJldmlvdXM6ICgocGF5bG9hZDogUGF5bG9hZCkgPT4gUHJvbWlzZTx2b2lkPikgfCB1bmRlZmluZWQsXG4gIGhhbmRsZXI6IChwYXlsb2FkOiBQYXlsb2FkKSA9PiBQcm9taXNlPHZvaWQ+LFxuKTogKChwYXlsb2FkOiBQYXlsb2FkKSA9PiBQcm9taXNlPHZvaWQ+KSA9PiB7XG4gIHJldHVybiBhc3luYyAocGF5bG9hZCkgPT4ge1xuICAgIGF3YWl0IGhhbmRsZXIocGF5bG9hZCk7XG4gICAgYXdhaXQgcHJldmlvdXM/LihwYXlsb2FkKTtcbiAgfTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFBsdWdpbiBlbnRyeVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLyoqXG4gKiBCZXR0ZXIgQXV0aCBkYXRhYmFzZUhvb2tzL29yZ2FuaXphdGlvbkhvb2tzL21pZGRsZXdhcmXsl5DshJwg7IiY7KeR7ZWcXG4gKiDsnbTrsqTtirjrpbwgYERCLmdldERCKFwid1wiKWDroZwg7Ja77J2AIGtuZXjsl5AgYGluZ2VzdEF1ZGl0RXZlbnRg66GcIOyggeyerO2VnOuLpC5cbiAqXG4gKiAtIGRhc2goQGJldHRlci1hdXRoL2luZnJhKeydmCBhdWRpdC1ldmVudCDsiJjsp5Eg7ZuFIOq1rOyhsOulvCDssLjqs6DtlbQgU29uYW11IOuCtOu2gCDsoIHsnqwg6rK966Gc66GcIO2PrO2Mhe2VnOuLpC5cbiAqIC0gZGFzaOydmCBpbmZyYSDsl7DqsrAvQVBJIGVuZHBvaW50IOygnOqztSDrspTsnITripQg7Y+s7ZWo7ZWY7KeAIOyViuqzoCwgYXVkaXQtZXZlbnQgZW1pdC9pbmdlc3Qg6rK966Gc66eMIOycoOyngO2VnOuLpC5cbiAqIC0gc2VjdXJpdHkgNOyiheydgCBSMSDqsrDsoJXsl5Ag65Sw6528IHNjb3BlIG91dCAoYnVpbGRlcnMudHPsnZggVE9ETyDso7zshJ0g7LC47KGwKS5cbiAqL1xuZnVuY3Rpb24gbG9jYXRpb25Gb3IoY3R4OiBCZXR0ZXJBdXRoUmVxdWVzdEN0eCk6IEJ1aWxkZXJMb2NhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjdHguY29udGV4dC5sb2NhdGlvbiA/PyB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb25hbXVBdWRpdExvZygpOiBCZXR0ZXJBdXRoUGx1Z2luIHtcbiAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInNvbmFtdVwiLCBcImF1ZGl0LWxvZ1wiXSk7XG4gIGNvbnN0IGNhdGFsb2cgPSBidWlsZEF1ZGl0RXZlbnRDYXRhbG9nKCk7XG5cbiAgLy8gZGFzaCA3Mzk0OiDrj5nsnbwg7JqU7LKt7JeQ7IScIOyEuOyFmCDrsoztgawg7IKt7KCc6rCAIOuLpO2ajCDrsJzsg53tlaAg65WMIGFsbF9zZXNzaW9uc19yZXZva2Vk66W8XG4gIC8vIO2VnCDrsojrp4wgZW1pdO2VmOuPhOuhnSDsspjrpqwg7Luo7YWN7Iqk7Yq466W8IOq4sOyWte2VnOuLpC5cbiAgY29uc3QgcHJvY2Vzc2VkQnVsa09wZXJhdGlvbkNvbnRleHRzID0gbmV3IFdlYWtTZXQ8b2JqZWN0PigpO1xuXG4gIGNvbnN0IGVtaXQgPSBhc3luYyAoZXZlbnQ6IEF1ZGl0TG9nRXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgaW5nZXN0QXVkaXRFdmVudChEQi5nZXREQihcIndcIiksIGV2ZW50KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcImF1ZGl0IGV2ZW50IGluZ2VzdCBmYWlsZWQ6IHtlcnJvcn1cIiwgeyBlcnJvcjogZXJyIH0pO1xuICAgIH1cbiAgfTtcblxuICAvLyBjdHgucGF0aCArIHNlc3Npb27sl5DshJwg7IKs7Jqp7J6QIO2KuOumrOqxsOulvCDrj4TstpztlZzri6QoZW50aXR5Lmlk66W8IHN1YmplY3TroZwg7IKs7JqpKS5cbiAgY29uc3QgdHJpZ2dlckZvciA9IChjdHg6IEJldHRlckF1dGhSZXF1ZXN0Q3R4LCBzdWJqZWN0VXNlcklkOiBzdHJpbmcpOiBCdWlsZGVyVHJpZ2dlciA9PlxuICAgIGdldFRyaWdnZXJJbmZvKGN0eC5wYXRoLCBjdHguY29udGV4dC5zZXNzaW9uPy5zZXNzaW9uPy51c2VySWQgPz8gbnVsbCwgc3ViamVjdFVzZXJJZCk7XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogXCJzb25hbXUtYXVkaXQtbG9nXCIsXG5cbiAgICBpbml0KHBsdWdpbkN0eCkge1xuICAgICAgaW5zdGFsbE9yZ2FuaXphdGlvbkhvb2tzKHBsdWdpbkN0eCwgY2F0YWxvZywgZW1pdCwgbG9nZ2VyKTtcblxuICAgICAgLy8gZGFzaCA3MjgzLTc0NDkg66+465+sOiBkYXRhYmFzZUhvb2tzICh1c2VyL3Nlc3Npb24vYWNjb3VudC92ZXJpZmljYXRpb24pLlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGRhdGFiYXNlSG9va3M6IHtcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgY3JlYXRlOiB7XG4gICAgICAgICAgICAgICAgYWZ0ZXI6IGFzeW5jIChyYXdVc2VyLCByYXdDdHgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IG5hcnJvd1JlcXVlc3RDdHgocmF3Q3R4KTtcbiAgICAgICAgICAgICAgICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBjb25zdCB1c2VyID1cbiAgICAgICAgICAgICAgICAgICAgLyogU0FGRVRZOiBiZXR0ZXItYXV0aCDtm4Xqs7wg7Ja064yR7YSwIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJhd1VzZXIgYXMgVXNlclNuYXBzaG90O1xuICAgICAgICAgICAgICAgICAgYXdhaXQgZW1pdChcbiAgICAgICAgICAgICAgICAgICAgY2F0YWxvZy51c2VyLnRyYWNrVXNlclNpZ25lZFVwKFxuICAgICAgICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckZvcihjdHgsIHVzZXIuaWQpLFxuICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uRm9yKGN0eCksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHVwZGF0ZToge1xuICAgICAgICAgICAgICAgIGFmdGVyOiBhc3luYyAocmF3VXNlciwgcmF3Q3R4KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjdHggPSBuYXJyb3dSZXF1ZXN0Q3R4KHJhd0N0eCk7XG4gICAgICAgICAgICAgICAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgY29uc3QgdXNlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qIFNBRkVUWTogYmV0dGVyLWF1dGgg7ZuF6rO8IOyWtOuMke2EsCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyByYXdVc2VyIGFzIFVzZXJTbmFwc2hvdCAmIHtcbiAgICAgICAgICAgICAgICAgICAgICBlbWFpbFZlcmlmaWVkPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICBpbWFnZT86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gY3R4LnBhdGg7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0cmlnZ2VyID0gdHJpZ2dlckZvcihjdHgsIHVzZXIuaWQpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSBsb2NhdGlvbkZvcihjdHgpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlc0FueVJvdXRlKHBhdGgsIFtST1VURVMuVVBEQVRFX1VTRVIsIFJPVVRFUy5EQVNIX1VQREFURV9VU0VSXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEZpZWxkcyA9IE9iamVjdC5rZXlzKFxuICAgICAgICAgICAgICAgICAgICAgIC8qIFNBRkVUWTogYmV0dGVyLWF1dGgg7ZuF6rO8IOyWtOuMke2EsCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoY3R4LmJvZHkgYXMgb2JqZWN0KSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzT25seUltYWdlVXBkYXRlID1cbiAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkRmllbGRzLmxlbmd0aCA9PT0gMSAmJiB1cGRhdGVkRmllbGRzWzBdID09PSBcImltYWdlXCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzT25seUVtYWlsVmVyaWZpZWRVcGRhdGUgPVxuICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHMubGVuZ3RoID09PSAxICYmIHVwZGF0ZWRGaWVsZHNbMF0gPT09IFwiZW1haWxWZXJpZmllZFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNFbWFpbFZlcmlmaWVkVXBkYXRlID0gdXBkYXRlZEZpZWxkcy5pbmNsdWRlcyhcImVtYWlsVmVyaWZpZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc09ubHlFbWFpbFZlcmlmaWVkVXBkYXRlICYmIHVzZXIuZW1haWxWZXJpZmllZCkge1xuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGVtaXQoY2F0YWxvZy51c2VyLnRyYWNrVXNlckVtYWlsVmVyaWZpZWQodXNlciwgdHJpZ2dlciwgbG9jYXRpb24pKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc09ubHlJbWFnZVVwZGF0ZSAmJiB1c2VyLmltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZW1pdChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGFsb2cudXNlci50cmFja1VzZXJQcm9maWxlSW1hZ2VVcGRhdGVkKHVzZXIsIHRyaWdnZXIsIGxvY2F0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc09ubHlJbWFnZVVwZGF0ZSAmJiAhaXNPbmx5RW1haWxWZXJpZmllZFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGVtaXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRhbG9nLnVzZXIudHJhY2tVc2VyUHJvZmlsZVVwZGF0ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbWFpbFZlcmlmaWVkVXBkYXRlICYmIHVzZXIuZW1haWxWZXJpZmllZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZW1pdChjYXRhbG9nLnVzZXIudHJhY2tVc2VyRW1haWxWZXJpZmllZCh1c2VyLCB0cmlnZ2VyLCBsb2NhdGlvbikpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaGVzQW55Um91dGUocGF0aCwgW1JPVVRFUy5DSEFOR0VfRU1BSUxdKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkRmllbGRzID0gT2JqZWN0LmtleXMoXG4gICAgICAgICAgICAgICAgICAgICAgLyogU0FGRVRZOiBiZXR0ZXItYXV0aCDtm4Xqs7wg7Ja064yR7YSwIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChjdHguYm9keSBhcyBvYmplY3QpID8/XG4gICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZW1pdChcbiAgICAgICAgICAgICAgICAgICAgICBjYXRhbG9nLnVzZXIudHJhY2tVc2VyUHJvZmlsZVVwZGF0ZWQodXNlciwgdXBkYXRlZEZpZWxkcywgdHJpZ2dlciwgbG9jYXRpb24pLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXNBbnlSb3V0ZShwYXRoLCBbUk9VVEVTLlZFUklGWV9FTUFJTF0pICYmIHVzZXIuZW1haWxWZXJpZmllZCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KGNhdGFsb2cudXNlci50cmFja1VzZXJFbWFpbFZlcmlmaWVkKHVzZXIsIHRyaWdnZXIsIGxvY2F0aW9uKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXNBbnlSb3V0ZShwYXRoLCBbUk9VVEVTLkFETUlOX0JBTl9VU0VSXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJiYW5uZWRcIiBpbiB1c2VyICYmXG4gICAgICAgICAgICAgICAgICAgIHVzZXIuYmFubmVkXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZW1pdChjYXRhbG9nLnVzZXIudHJhY2tVc2VyQmFubmVkKHVzZXIsIHRyaWdnZXIsIGxvY2F0aW9uKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXNBbnlSb3V0ZShwYXRoLCBbUk9VVEVTLkFETUlOX1VOQkFOX1VTRVJdKSAmJlxuICAgICAgICAgICAgICAgICAgICBcImJhbm5lZFwiIGluIHVzZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgIXVzZXIuYmFubmVkXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZW1pdChjYXRhbG9nLnVzZXIudHJhY2tVc2VyVW5CYW5uZWQodXNlciwgdHJpZ2dlciwgbG9jYXRpb24pKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkZWxldGU6IHtcbiAgICAgICAgICAgICAgICBhZnRlcjogYXN5bmMgKHJhd1VzZXIsIHJhd0N0eCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY3R4ID0gbmFycm93UmVxdWVzdEN0eChyYXdDdHgpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXIgPVxuICAgICAgICAgICAgICAgICAgICAvKiBTQUZFVFk6IGJldHRlci1hdXRoIO2bheqzvCDslrTrjJHthLAg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcmF3VXNlciBhcyBVc2VyU25hcHNob3Q7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICBjYXRhbG9nLnVzZXIudHJhY2tVc2VyRGVsZXRlZCh1c2VyLCB0cmlnZ2VyRm9yKGN0eCwgdXNlci5pZCksIGxvY2F0aW9uRm9yKGN0eCkpLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlc3Npb246IHtcbiAgICAgICAgICAgICAgY3JlYXRlOiB7XG4gICAgICAgICAgICAgICAgYmVmb3JlOiBhc3luYyAoXG4gICAgICAgICAgICAgICAgICByYXdTZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgcmF3Q3R4LFxuICAgICAgICAgICAgICAgICk6IFByb21pc2U8eyBkYXRhOiB7IGxvZ2luTWV0aG9kOiBzdHJpbmcgfCBudWxsIH0gfSB8IHVuZGVmaW5lZD4gPT4ge1xuICAgICAgICAgICAgICAgICAgdm9pZCByYXdTZXNzaW9uO1xuICAgICAgICAgICAgICAgICAgY29uc3QgY3R4ID0gbmFycm93UmVxdWVzdEN0eChyYXdDdHgpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFjdHgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IGxvZ2luTWV0aG9kOiBnZXRMb2dpbk1ldGhvZChjdHgucGF0aCwgY3R4LnBhcmFtcz8uaWQpIH0gfTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFmdGVyOiBhc3luYyAocmF3U2Vzc2lvbiwgcmF3Q3R4KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjdHggPSBuYXJyb3dSZXF1ZXN0Q3R4KHJhd0N0eCk7XG4gICAgICAgICAgICAgICAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qIFNBRkVUWTogYmV0dGVyLWF1dGgg7ZuF6rO8IOyWtOuMke2EsCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyByYXdTZXNzaW9uIGFzIFNlc3Npb25TbmFwc2hvdDtcbiAgICAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbi51c2VySWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gbG9jYXRpb25Gb3IoY3R4KTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxvZ2luTWV0aG9kID0gZ2V0TG9naW5NZXRob2QoY3R4LnBhdGgsIGN0eC5wYXJhbXM/LmlkKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICBjb25zdCBlbnJpY2hlZFNlc3Npb246IFNlc3Npb25TbmFwc2hvdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc2Vzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgbG9naW5NZXRob2Q6IGxvZ2luTWV0aG9kID8/IHNlc3Npb24ubG9naW5NZXRob2QgPz8gbnVsbCxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBjb25zdCB1c2VyID0gYXdhaXQgZmV0Y2hVc2VyQnkoY3R4LCBcImlkXCIsIHNlc3Npb24udXNlcklkKTtcblxuICAgICAgICAgICAgICAgICAgbGV0IHRyaWdnZXI6IEJ1aWxkZXJUcmlnZ2VyO1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzQW55Um91dGUoY3R4LnBhdGgsIFtcbiAgICAgICAgICAgICAgICAgICAgICBST1VURVMuU0lHTl9JTixcbiAgICAgICAgICAgICAgICAgICAgICBST1VURVMuU0lHTl9VUCxcbiAgICAgICAgICAgICAgICAgICAgICBST1VURVMuU0lHTl9JTl9TT0NJQUxfQ0FMTEJBQ0ssXG4gICAgICAgICAgICAgICAgICAgICAgUk9VVEVTLlNJR05fSU5fT0FVVEhfQ0FMTEJBQ0ssXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlciA9IGdldFRyaWdnZXJJbmZvKGN0eC5wYXRoLCBzZXNzaW9uLnVzZXJJZCwgc2Vzc2lvbi51c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICAgIGNhdGFsb2cuc2Vzc2lvbi50cmFja1VzZXJTaWduZWRJbihlbnJpY2hlZFNlc3Npb24sIHVzZXIsIHRyaWdnZXIsIGxvY2F0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgPSB0cmlnZ2VyRm9yKGN0eCwgc2Vzc2lvbi51c2VySWQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYXdhaXQgZW1pdChcbiAgICAgICAgICAgICAgICAgICAgY2F0YWxvZy5zZXNzaW9uLnRyYWNrU2Vzc2lvbkNyZWF0ZWQoZW5yaWNoZWRTZXNzaW9uLCB1c2VyLCB0cmlnZ2VyLCBsb2NhdGlvbiksXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKGlzTm9uRW1wdHlTdHJpbmcoc2Vzc2lvbi5pbXBlcnNvbmF0ZWRCeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1wZXJzb25hdG9yID0gYXdhaXQgZmV0Y2hVc2VyQnkoY3R4LCBcImlkXCIsIHNlc3Npb24uaW1wZXJzb25hdGVkQnkpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICAgIGNhdGFsb2cuc2Vzc2lvbi50cmFja1VzZXJJbXBlcnNvbmF0ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnJpY2hlZFNlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1wZXJzb25hdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWRCeTogc2Vzc2lvbi5pbXBlcnNvbmF0ZWRCeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckNvbnRleHQ6IHRyaWdnZXIudHJpZ2dlckNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkZWxldGU6IHtcbiAgICAgICAgICAgICAgICBhZnRlcjogYXN5bmMgKHJhd1Nlc3Npb24sIHJhd0N0eCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY3R4ID0gbmFycm93UmVxdWVzdEN0eChyYXdDdHgpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPVxuICAgICAgICAgICAgICAgICAgICAvKiBTQUZFVFk6IGJldHRlci1hdXRoIO2bheqzvCDslrTrjJHthLAg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcmF3U2Vzc2lvbiBhcyBTZXNzaW9uU25hcHNob3Q7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGxvY2F0aW9uRm9yKGN0eCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBlbnJpY2hlZFNlc3Npb246IFNlc3Npb25TbmFwc2hvdCA9IHsgLi4uc2Vzc2lvbiB9O1xuICAgICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGZldGNoVXNlckJ5KGN0eCwgXCJpZFwiLCBzZXNzaW9uLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0cmlnZ2VyID0gdHJpZ2dlckZvcihjdHgsIHNlc3Npb24udXNlcklkKTtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlc0FueVJvdXRlKGN0eC5wYXRoLCBbXG4gICAgICAgICAgICAgICAgICAgICAgUk9VVEVTLlJFVk9LRV9BTExfU0VTU0lPTlMsXG4gICAgICAgICAgICAgICAgICAgICAgUk9VVEVTLkFETUlOX1JFVk9LRV9VU0VSX1NFU1NJT05TLFxuICAgICAgICAgICAgICAgICAgICAgIFJPVVRFUy5EQVNIX1JFVk9LRV9TRVNTSU9OU19BTEwsXG4gICAgICAgICAgICAgICAgICAgICAgUk9VVEVTLkRBU0hfQkFOX1VTRVIsXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWRCdWxrT3BlcmF0aW9uQ29udGV4dHMuaGFzKGN0eCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0YWxvZy5zZXNzaW9uLnRyYWNrU2Vzc2lvblJldm9rZWRBbGwoZW5yaWNoZWRTZXNzaW9uLCB1c2VyLCB0cmlnZ2VyKSxcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZEJ1bGtPcGVyYXRpb25Db250ZXh0cy5hZGQoY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaGVzQW55Um91dGUoY3R4LnBhdGgsIFtST1VURVMuU0lHTl9PVVRdKSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICAgIGNhdGFsb2cuc2Vzc2lvbi50cmFja1VzZXJTaWduZWRPdXQoZW5yaWNoZWRTZXNzaW9uLCB1c2VyLCB0cmlnZ2VyLCBsb2NhdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICAgIGNhdGFsb2cuc2Vzc2lvbi50cmFja1Nlc3Npb25SZXZva2VkKGVucmljaGVkU2Vzc2lvbiwgdXNlciwgdHJpZ2dlciwgbG9jYXRpb24pLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKGlzTm9uRW1wdHlTdHJpbmcoc2Vzc2lvbi5pbXBlcnNvbmF0ZWRCeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1wZXJzb25hdG9yID0gYXdhaXQgZmV0Y2hVc2VyQnkoY3R4LCBcImlkXCIsIHNlc3Npb24uaW1wZXJzb25hdGVkQnkpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICAgIGNhdGFsb2cuc2Vzc2lvbi50cmFja1VzZXJJbXBlcnNvbmF0aW9uU3RvcChcbiAgICAgICAgICAgICAgICAgICAgICAgIGVucmljaGVkU2Vzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbXBlcnNvbmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY291bnQ6IHtcbiAgICAgICAgICAgICAgY3JlYXRlOiB7XG4gICAgICAgICAgICAgICAgYWZ0ZXI6IGFzeW5jIChyYXdBY2NvdW50LCByYXdDdHgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IG5hcnJvd1JlcXVlc3RDdHgocmF3Q3R4KTtcbiAgICAgICAgICAgICAgICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBjb25zdCBhY2NvdW50ID1cbiAgICAgICAgICAgICAgICAgICAgLyogU0FGRVRZOiBiZXR0ZXItYXV0aCDtm4Xqs7wg7Ja064yR7YSwIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJhd0FjY291bnQgYXMgQWNjb3VudFNuYXBzaG90O1xuICAgICAgICAgICAgICAgICAgaWYgKCFhY2NvdW50LnVzZXJJZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGZldGNoVXNlckJ5KGN0eCwgXCJpZFwiLCBhY2NvdW50LnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICBjYXRhbG9nLmFjY291bnQudHJhY2tBY2NvdW50TGlua2luZyhcbiAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50LFxuICAgICAgICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckZvcihjdHgsIGFjY291bnQudXNlcklkKSxcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbkZvcihjdHgpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB1cGRhdGU6IHtcbiAgICAgICAgICAgICAgICBhZnRlcjogYXN5bmMgKHJhd0FjY291bnQsIHJhd0N0eCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY3R4ID0gbmFycm93UmVxdWVzdEN0eChyYXdDdHgpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFjY291bnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiBTQUZFVFk6IGJldHRlci1hdXRoIO2bheqzvCDslrTrjJHthLAg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcmF3QWNjb3VudCBhcyBBY2NvdW50U25hcHNob3Q7XG4gICAgICAgICAgICAgICAgICBpZiAoIWFjY291bnQudXNlcklkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICFtYXRjaGVzQW55Um91dGUoY3R4LnBhdGgsIFtcbiAgICAgICAgICAgICAgICAgICAgICBST1VURVMuQ0hBTkdFX1BBU1NXT1JELFxuICAgICAgICAgICAgICAgICAgICAgIFJPVVRFUy5TRVRfUEFTU1dPUkQsXG4gICAgICAgICAgICAgICAgICAgICAgUk9VVEVTLlJFU0VUX1BBU1NXT1JELFxuICAgICAgICAgICAgICAgICAgICAgIFJPVVRFUy5BRE1JTl9TRVRfUEFTU1dPUkQsXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGZldGNoVXNlckJ5KGN0eCwgXCJpZFwiLCBhY2NvdW50LnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICBjYXRhbG9nLmFjY291bnQudHJhY2tBY2NvdW50UGFzc3dvcmRDaGFuZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgYWNjb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJGb3IoY3R4LCBhY2NvdW50LnVzZXJJZCksXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25Gb3IoY3R4KSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZGVsZXRlOiB7XG4gICAgICAgICAgICAgICAgYWZ0ZXI6IGFzeW5jIChyYXdBY2NvdW50LCByYXdDdHgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IG5hcnJvd1JlcXVlc3RDdHgocmF3Q3R4KTtcbiAgICAgICAgICAgICAgICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBjb25zdCBhY2NvdW50ID1cbiAgICAgICAgICAgICAgICAgICAgLyogU0FGRVRZOiBiZXR0ZXItYXV0aCDtm4Xqs7wg7Ja064yR7YSwIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJhd0FjY291bnQgYXMgQWNjb3VudFNuYXBzaG90O1xuICAgICAgICAgICAgICAgICAgaWYgKCFhY2NvdW50LnVzZXJJZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGZldGNoVXNlckJ5KGN0eCwgXCJpZFwiLCBhY2NvdW50LnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgICAgICBjYXRhbG9nLmFjY291bnQudHJhY2tBY2NvdW50VW5saW5rKFxuICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRm9yKGN0eCwgYWNjb3VudC51c2VySWQpLFxuICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uRm9yKGN0eCksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyaWZpY2F0aW9uOiB7XG4gICAgICAgICAgICAgIGNyZWF0ZToge1xuICAgICAgICAgICAgICAgIGFmdGVyOiBhc3luYyAocmF3VmVyaWZpY2F0aW9uLCByYXdDdHgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IG5hcnJvd1JlcXVlc3RDdHgocmF3Q3R4KTtcbiAgICAgICAgICAgICAgICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXNBbnlSb3V0ZShjdHgucGF0aCwgW1JPVVRFUy5SRVFVRVNUX1BBU1NXT1JEX1JFU0VUXSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qIFNBRkVUWTogYmV0dGVyLWF1dGgg7ZuF6rO8IOyWtOuMke2EsCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyByYXdWZXJpZmljYXRpb24gYXMgVmVyaWZpY2F0aW9uU25hcHNob3Q7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uVXNlcklkID0gY3R4LmNvbnRleHQuc2Vzc2lvbj8udXNlcj8uaWQgPz8gXCJ1bmtub3duXCI7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0cmlnZ2VyID0gZ2V0VHJpZ2dlckluZm8oY3R4LnBhdGgsIHNlc3Npb25Vc2VySWQsIHNlc3Npb25Vc2VySWQpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGZldGNoVXNlckJ5KGN0eCwgXCJpZFwiLCB2ZXJpZmljYXRpb24udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgYXdhaXQgZW1pdChcbiAgICAgICAgICAgICAgICAgICAgY2F0YWxvZy52ZXJpZmljYXRpb24udHJhY2tQYXNzd29yZFJlc2V0UmVxdWVzdChcbiAgICAgICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLFxuICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uRm9yKGN0eCksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRlbGV0ZToge1xuICAgICAgICAgICAgICAgIGFmdGVyOiBhc3luYyAocmF3VmVyaWZpY2F0aW9uLCByYXdDdHgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IG5hcnJvd1JlcXVlc3RDdHgocmF3Q3R4KTtcbiAgICAgICAgICAgICAgICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXNBbnlSb3V0ZShjdHgucGF0aCwgW1JPVVRFUy5SRVNFVF9QQVNTV09SRF0pKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBjb25zdCB2ZXJpZmljYXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAvKiBTQUZFVFk6IGJldHRlci1hdXRoIO2bheqzvCDslrTrjJHthLAg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcmF3VmVyaWZpY2F0aW9uIGFzIFZlcmlmaWNhdGlvblNuYXBzaG90O1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IGN0eC5jb250ZXh0LnNlc3Npb24/LnVzZXI/LmlkID8/IFwidW5rbm93blwiO1xuICAgICAgICAgICAgICAgICAgY29uc3QgdHJpZ2dlciA9IGdldFRyaWdnZXJJbmZvKGN0eC5wYXRoLCBzZXNzaW9uVXNlcklkLCBzZXNzaW9uVXNlcklkKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXIgPSBhd2FpdCBmZXRjaFVzZXJCeShjdHgsIFwiaWRcIiwgdmVyaWZpY2F0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGVtaXQoXG4gICAgICAgICAgICAgICAgICAgIGNhdGFsb2cudmVyaWZpY2F0aW9uLnRyYWNrUGFzc3dvcmRSZXNldFJlcXVlc3RDb21wbGV0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25Gb3IoY3R4KSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIGhvb2tzOiB7XG4gICAgICBiZWZvcmU6IFtcbiAgICAgICAge1xuICAgICAgICAgIC8vIGRhc2gg7KCc6rGw66GcIOyCrOudvOynhCBsb2NhdGlvbiDqs7XquIkg6rK966Gc66W8IOuzteq1rO2VnOuLpC5cbiAgICAgICAgICAvLyDrqqjrk6Ag7JqU7LKt7JeQ7IScIGN0eC5jb250ZXh0LmxvY2F0aW9u7J2EIOyxhOybjCDsnbTtm4Qg67mM642U65Ok7J20IGlwQWRkcmVzcy9jaXR5L2NvdW50cnlDb2Rl66W8IOq4sOuhne2VoCDsiJgg7J6I6rKMIO2VnOuLpC5cbiAgICAgICAgICBtYXRjaGVyOiAoKSA9PiB0cnVlLFxuICAgICAgICAgIGhhbmRsZXI6IGNyZWF0ZUF1dGhNaWRkbGV3YXJlKGFzeW5jIChyYXdDdHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN0eDogQmV0dGVyQXV0aFJlcXVlc3RDdHggPSByYXdDdHg7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gY3R4LmhlYWRlcnMgPz8gY3R4LnJlcXVlc3Q/LmhlYWRlcnM7XG4gICAgICAgICAgICBjdHguY29udGV4dC5sb2NhdGlvbiA9IGV4dHJhY3RMb2NhdGlvbkZyb21IZWFkZXJzKGhlYWRlcnMpO1xuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFmdGVyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBkYXNoIDc0NjItNzQ4NyDrr7jrn6w6IHZlcmlmaWNhdGlvbiBlbWFpbCBzZW5kLCBzaWduLWluIGF0dGVtcHRzLlxuICAgICAgICAgIC8vIEdFVCDsmpTssq3snYAg7L2c67CxIOqyveuhnOunjCDthrXqs7zsi5ztgqjri6QuXG4gICAgICAgICAgbWF0Y2hlcjogKGN0eCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgaWYgKGN0eC5yZXF1ZXN0Py5tZXRob2QgIT09IFwiR0VUXCIpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKCFjdHgucmVxdWVzdC51cmwpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHAgPSBuZXcgVVJMKGN0eC5yZXF1ZXN0LnVybCkucGF0aG5hbWU7XG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzQW55Um91dGUocCwgW1xuICAgICAgICAgICAgICAgIFJPVVRFUy5TSUdOX0lOX1NPQ0lBTF9DQUxMQkFDSyxcbiAgICAgICAgICAgICAgICBST1VURVMuU0lHTl9JTl9PQVVUSF9DQUxMQkFDSyxcbiAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGFuZGxlcjogY3JlYXRlQXV0aE1pZGRsZXdhcmUoYXN5bmMgKHJhd0N0eCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gbmFycm93UmVxdWVzdEN0eChyYXdDdHgpO1xuICAgICAgICAgICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25Vc2VyID0gY3R4LmNvbnRleHQuc2Vzc2lvbj8udXNlcjtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBzZXNzaW9uVXNlcj8uaWQgPz8gXCJ1bmtub3duXCI7XG4gICAgICAgICAgICBjb25zdCB0cmlnZ2VyID0gZ2V0VHJpZ2dlckluZm8oY3R4LnBhdGgsIHNlc3Npb25Vc2VySWQsIHNlc3Npb25Vc2VySWQpO1xuICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSBsb2NhdGlvbkZvcihjdHgpO1xuICAgICAgICAgICAgY29uc3QgcmV0dXJuZWQgPSBjdHguY29udGV4dC5yZXR1cm5lZDtcbiAgICAgICAgICAgIGNvbnN0IGlzRXJyb3JlZCA9IHJldHVybmVkIGluc3RhbmNlb2YgRXJyb3I7XG5cbiAgICAgICAgICAgIC8vIHZlcmlmaWNhdGlvbiBlbWFpbCBzZW50XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG1hdGNoZXNBbnlSb3V0ZShjdHgucGF0aCwgW1JPVVRFUy5TRU5EX1ZFUklGSUNBVElPTl9FTUFJTF0pICYmXG4gICAgICAgICAgICAgIGN0eC5jb250ZXh0LnNlc3Npb24gJiZcbiAgICAgICAgICAgICAgIWlzRXJyb3JlZFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25FbnRpdHkgPVxuICAgICAgICAgICAgICAgIC8qIFNBRkVUWTogYmV0dGVyLWF1dGgg7ZuF6rO8IOyWtOuMke2EsCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBjdHguY29udGV4dFxuICAgICAgICAgICAgICAgICAgLnNlc3Npb24uc2Vzc2lvbiBhcyBTZXNzaW9uU25hcHNob3QgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIGNvbnN0IHVzZXIgPSAvKiBTQUZFVFk6IGJldHRlci1hdXRoIO2bheqzvCDslrTrjJHthLAg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gY3R4XG4gICAgICAgICAgICAgICAgLmNvbnRleHQuc2Vzc2lvbi51c2VyIGFzIHsgbmFtZT86IHN0cmluZzsgZW1haWw/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgaWYgKHNlc3Npb25FbnRpdHkgJiYgdXNlcikge1xuICAgICAgICAgICAgICAgIGF3YWl0IGVtaXQoXG4gICAgICAgICAgICAgICAgICBjYXRhbG9nLnNlc3Npb24udHJhY2tFbWFpbFZlcmlmaWNhdGlvblNlbnQoc2Vzc2lvbkVudGl0eSwgdXNlciwgdHJpZ2dlciksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBib2R5ID0gY3R4LmJvZHk7XG4gICAgICAgICAgICAvLyBlbWFpbCBzaWduLWluIGF0dGVtcHQgZmFpbGVkXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG1hdGNoZXNBbnlSb3V0ZShjdHgucGF0aCwgW1JPVVRFUy5TSUdOX0lOX0VNQUlMLCBST1VURVMuU0lHTl9JTl9FTUFJTF9PVFBdKSAmJlxuICAgICAgICAgICAgICBpc0Vycm9yZWQgJiZcbiAgICAgICAgICAgICAgaXNTdHJpbmdWYWx1ZShib2R5Py5lbWFpbClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCB1c2VyID0gYXdhaXQgZmV0Y2hVc2VyQnkoY3R4LCBcImVtYWlsXCIsIGJvZHkuZW1haWwpO1xuICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgIGNhdGFsb2cuc2Vzc2lvbi50cmFja0VtYWlsU2lnbkluQXR0ZW1wdChcbiAgICAgICAgICAgICAgICAgIHsgZW1haWw6IGJvZHkuZW1haWwsIGxvZ2luTWV0aG9kOiBnZXRMb2dpbk1ldGhvZChjdHgucGF0aCwgY3R4LnBhcmFtcz8uaWQpIH0sXG4gICAgICAgICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgICAgICAgdHJpZ2dlcixcbiAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzb2NpYWwgc2lnbi1pbiBhdHRlbXB0IGZhaWxlZCAoUE9TVClcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbWF0Y2hlc0FueVJvdXRlKGN0eC5wYXRoLCBbUk9VVEVTLlNJR05fSU5fU09DSUFMXSkgJiZcbiAgICAgICAgICAgICAgaXNFcnJvcmVkICYmXG4gICAgICAgICAgICAgIGlzU3RyaW5nVmFsdWUoYm9keT8ucHJvdmlkZXIpICYmXG4gICAgICAgICAgICAgIGlzU3RyaW5nVmFsdWUoYm9keT8uaWRUb2tlbilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBhd2FpdCBlbWl0KFxuICAgICAgICAgICAgICAgIGNhdGFsb2cuc2Vzc2lvbi50cmFja1NvY2lhbFNpZ25JbkF0dGVtcHQoXG4gICAgICAgICAgICAgICAgICB7IGxvZ2luTWV0aG9kOiBnZXRMb2dpbk1ldGhvZChjdHgucGF0aCwgY3R4LnBhcmFtcz8uaWQpIH0sXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgdHJpZ2dlcixcbiAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzb2NpYWwgcmVkaXJlY3Rpb24gY2FsbGJhY2sgZmFpbGVkIChHRVQpXG4gICAgICAgICAgICBpZiAobWF0Y2hlc0FueVJvdXRlKGN0eC5wYXRoLCBbUk9VVEVTLlNJR05fSU5fU09DSUFMX0NBTExCQUNLXSkgJiYgaXNFcnJvcmVkKSB7XG4gICAgICAgICAgICAgIGF3YWl0IGVtaXQoXG4gICAgICAgICAgICAgICAgY2F0YWxvZy5zZXNzaW9uLnRyYWNrU29jaWFsU2lnbkluUmVkaXJlY3Rpb25BdHRlbXB0KFxuICAgICAgICAgICAgICAgICAgeyBsb2dpbk1ldGhvZDogZ2V0TG9naW5NZXRob2QoY3R4LnBhdGgsIGN0eC5wYXJhbXM/LmlkKSB9LFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIHRyaWdnZXIsXG4gICAgICAgICAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPcmdhbml6YXRpb24gaG9vayDtlanshLEgKG9yZ2FuaXphdGlvbiDtlIzrn6zqt7jsnbjsnbQg7Zmc7ISx7ZmU65CcIOqyveyasOyXkOunjClcbi8vIGRhc2ggNzE5Mi03MjgxIOuvuOufrC5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbnR5cGUgRXZlbnRFbWl0dGVyID0gKGV2ZW50OiBBdWRpdExvZ0V2ZW50KSA9PiBQcm9taXNlPHZvaWQ+O1xudHlwZSBBdWRpdExvZ2dlciA9IFJldHVyblR5cGU8dHlwZW9mIGdldExvZ2dlcj47XG5cbmZ1bmN0aW9uIGluc3RhbGxPcmdhbml6YXRpb25Ib29rcyhcbiAgcGx1Z2luQ3R4OiBBdXRoQ29udGV4dCxcbiAgY2F0YWxvZzogUmV0dXJuVHlwZTx0eXBlb2YgYnVpbGRBdWRpdEV2ZW50Q2F0YWxvZz4sXG4gIGVtaXQ6IEV2ZW50RW1pdHRlcixcbiAgbG9nZ2VyOiBBdWRpdExvZ2dlcixcbik6IHZvaWQge1xuICBjb25zdCBvcmdhbml6YXRpb25QbHVnaW4gPSBwbHVnaW5DdHguZ2V0UGx1Z2luKFwib3JnYW5pemF0aW9uXCIpO1xuXG4gIGlmICghb3JnYW5pemF0aW9uUGx1Z2luKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwib3JnYW5pemF0aW9uIHBsdWdpbiBub3QgYWN0aXZlOyBza2lwcGluZyBpbnN0cnVtZW50YXRpb25cIik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb3JnYW5pemF0aW9uUGx1Z2luLm9wdGlvbnMgPSBvcmdhbml6YXRpb25QbHVnaW4ub3B0aW9ucyA/PyB7fTtcbiAgY29uc3QgaG9va3MgPSAob3JnYW5pemF0aW9uUGx1Z2luLm9wdGlvbnMub3JnYW5pemF0aW9uSG9va3MgPVxuICAgIG9yZ2FuaXphdGlvblBsdWdpbi5vcHRpb25zLm9yZ2FuaXphdGlvbkhvb2tzID8/IHt9KTtcblxuICBob29rcy5hZnRlckNyZWF0ZU9yZ2FuaXphdGlvbiA9IHdyYXBPcmdIb29rKGhvb2tzLmFmdGVyQ3JlYXRlT3JnYW5pemF0aW9uLCBhc3luYyAocCkgPT5cbiAgICBlbWl0KFxuICAgICAgY2F0YWxvZy5vcmdhbml6YXRpb24udHJhY2tPcmdhbml6YXRpb25DcmVhdGVkKFxuICAgICAgICBwLm9yZ2FuaXphdGlvbixcbiAgICAgICAgZ2V0T3JnYW5pemF0aW9uVHJpZ2dlckluZm8ocC51c2VyKSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcblxuICBob29rcy5hZnRlclVwZGF0ZU9yZ2FuaXphdGlvbiA9IHdyYXBPcmdIb29rKGhvb2tzLmFmdGVyVXBkYXRlT3JnYW5pemF0aW9uLCBhc3luYyAocCkgPT4ge1xuICAgIGlmICghcC5vcmdhbml6YXRpb24pIHJldHVybjtcbiAgICBhd2FpdCBlbWl0KFxuICAgICAgY2F0YWxvZy5vcmdhbml6YXRpb24udHJhY2tPcmdhbml6YXRpb25VcGRhdGVkKFxuICAgICAgICBwLm9yZ2FuaXphdGlvbixcbiAgICAgICAgZ2V0T3JnYW5pemF0aW9uVHJpZ2dlckluZm8ocC51c2VyKSxcbiAgICAgICksXG4gICAgKTtcbiAgfSk7XG5cbiAgaG9va3MuYWZ0ZXJBZGRNZW1iZXIgPSB3cmFwT3JnSG9vayhob29rcy5hZnRlckFkZE1lbWJlciwgYXN5bmMgKHApID0+XG4gICAgZW1pdChcbiAgICAgIGNhdGFsb2cubWVtYmVyLnRyYWNrT3JnYW5pemF0aW9uTWVtYmVyQWRkZWQoXG4gICAgICAgIHAub3JnYW5pemF0aW9uLFxuICAgICAgICBwLm1lbWJlcixcbiAgICAgICAgcC51c2VyLFxuICAgICAgICBnZXRPcmdhbml6YXRpb25UcmlnZ2VySW5mbyhwLnVzZXIpLFxuICAgICAgKSxcbiAgICApLFxuICApO1xuXG4gIGhvb2tzLmFmdGVyUmVtb3ZlTWVtYmVyID0gd3JhcE9yZ0hvb2soaG9va3MuYWZ0ZXJSZW1vdmVNZW1iZXIsIGFzeW5jIChwKSA9PlxuICAgIGVtaXQoXG4gICAgICBjYXRhbG9nLm1lbWJlci50cmFja09yZ2FuaXphdGlvbk1lbWJlclJlbW92ZWQoXG4gICAgICAgIHAub3JnYW5pemF0aW9uLFxuICAgICAgICBwLm1lbWJlcixcbiAgICAgICAgcC51c2VyLFxuICAgICAgICBnZXRPcmdhbml6YXRpb25UcmlnZ2VySW5mbyhwLnVzZXIpLFxuICAgICAgKSxcbiAgICApLFxuICApO1xuXG4gIGhvb2tzLmFmdGVyVXBkYXRlTWVtYmVyUm9sZSA9IHdyYXBPcmdIb29rKGhvb2tzLmFmdGVyVXBkYXRlTWVtYmVyUm9sZSwgYXN5bmMgKHApID0+XG4gICAgZW1pdChcbiAgICAgIGNhdGFsb2cubWVtYmVyLnRyYWNrT3JnYW5pemF0aW9uTWVtYmVyUm9sZVVwZGF0ZWQoXG4gICAgICAgIHAub3JnYW5pemF0aW9uLFxuICAgICAgICBwLm1lbWJlcixcbiAgICAgICAgcC51c2VyLFxuICAgICAgICBwLnByZXZpb3VzUm9sZSxcbiAgICAgICAgZ2V0T3JnYW5pemF0aW9uVHJpZ2dlckluZm8ocC51c2VyKSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcblxuICBob29rcy5hZnRlckNyZWF0ZUludml0YXRpb24gPSB3cmFwT3JnSG9vayhob29rcy5hZnRlckNyZWF0ZUludml0YXRpb24sIGFzeW5jIChwKSA9PlxuICAgIGVtaXQoXG4gICAgICBjYXRhbG9nLmludml0YXRpb24udHJhY2tPcmdhbml6YXRpb25NZW1iZXJJbnZpdGVkKFxuICAgICAgICBwLm9yZ2FuaXphdGlvbixcbiAgICAgICAgcC5pbnZpdGF0aW9uLFxuICAgICAgICBwLmludml0ZXIsXG4gICAgICAgIGdldE9yZ2FuaXphdGlvblRyaWdnZXJJbmZvKHAuaW52aXRlciksXG4gICAgICApLFxuICAgICksXG4gICk7XG5cbiAgaG9va3MuYWZ0ZXJBY2NlcHRJbnZpdGF0aW9uID0gd3JhcE9yZ0hvb2soaG9va3MuYWZ0ZXJBY2NlcHRJbnZpdGF0aW9uLCBhc3luYyAocCkgPT5cbiAgICBlbWl0KFxuICAgICAgY2F0YWxvZy5pbnZpdGF0aW9uLnRyYWNrT3JnYW5pemF0aW9uTWVtYmVySW52aXRlQWNjZXB0ZWQoXG4gICAgICAgIHAub3JnYW5pemF0aW9uLFxuICAgICAgICBwLmludml0YXRpb24sXG4gICAgICAgIHAubWVtYmVyLFxuICAgICAgICBwLnVzZXIsXG4gICAgICAgIGdldE9yZ2FuaXphdGlvblRyaWdnZXJJbmZvKHAudXNlciksXG4gICAgICApLFxuICAgICksXG4gICk7XG5cbiAgaG9va3MuYWZ0ZXJSZWplY3RJbnZpdGF0aW9uID0gd3JhcE9yZ0hvb2soaG9va3MuYWZ0ZXJSZWplY3RJbnZpdGF0aW9uLCBhc3luYyAocCkgPT5cbiAgICBlbWl0KFxuICAgICAgY2F0YWxvZy5pbnZpdGF0aW9uLnRyYWNrT3JnYW5pemF0aW9uTWVtYmVySW52aXRlUmVqZWN0ZWQoXG4gICAgICAgIHAub3JnYW5pemF0aW9uLFxuICAgICAgICBwLmludml0YXRpb24sXG4gICAgICAgIHAudXNlcixcbiAgICAgICAgZ2V0T3JnYW5pemF0aW9uVHJpZ2dlckluZm8ocC51c2VyKSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcblxuICBob29rcy5hZnRlckNhbmNlbEludml0YXRpb24gPSB3cmFwT3JnSG9vayhob29rcy5hZnRlckNhbmNlbEludml0YXRpb24sIGFzeW5jIChwKSA9PlxuICAgIGVtaXQoXG4gICAgICBjYXRhbG9nLmludml0YXRpb24udHJhY2tPcmdhbml6YXRpb25NZW1iZXJJbnZpdGVDYW5jZWxlZChcbiAgICAgICAgcC5vcmdhbml6YXRpb24sXG4gICAgICAgIHAuaW52aXRhdGlvbixcbiAgICAgICAgcC5jYW5jZWxsZWRCeSxcbiAgICAgICAgZ2V0T3JnYW5pemF0aW9uVHJpZ2dlckluZm8ocC5jYW5jZWxsZWRCeSksXG4gICAgICApLFxuICAgICksXG4gICk7XG5cbiAgaG9va3MuYWZ0ZXJDcmVhdGVUZWFtID0gd3JhcE9yZ0hvb2soaG9va3MuYWZ0ZXJDcmVhdGVUZWFtLCBhc3luYyAocCkgPT5cbiAgICBlbWl0KFxuICAgICAgY2F0YWxvZy50ZWFtLnRyYWNrT3JnYW5pemF0aW9uVGVhbUNyZWF0ZWQoXG4gICAgICAgIHAub3JnYW5pemF0aW9uLFxuICAgICAgICBwLnRlYW0sXG4gICAgICAgIGdldE9yZ2FuaXphdGlvblRyaWdnZXJJbmZvKHAudXNlciksXG4gICAgICApLFxuICAgICksXG4gICk7XG5cbiAgaG9va3MuYWZ0ZXJVcGRhdGVUZWFtID0gd3JhcE9yZ0hvb2soaG9va3MuYWZ0ZXJVcGRhdGVUZWFtLCBhc3luYyAocCkgPT4ge1xuICAgIGlmICghcC50ZWFtKSByZXR1cm47XG4gICAgYXdhaXQgZW1pdChcbiAgICAgIGNhdGFsb2cudGVhbS50cmFja09yZ2FuaXphdGlvblRlYW1VcGRhdGVkKFxuICAgICAgICBwLm9yZ2FuaXphdGlvbixcbiAgICAgICAgcC50ZWFtLFxuICAgICAgICBnZXRPcmdhbml6YXRpb25UcmlnZ2VySW5mbyhwLnVzZXIpLFxuICAgICAgKSxcbiAgICApO1xuICB9KTtcblxuICBob29rcy5hZnRlckRlbGV0ZVRlYW0gPSB3cmFwT3JnSG9vayhob29rcy5hZnRlckRlbGV0ZVRlYW0sIGFzeW5jIChwKSA9PlxuICAgIGVtaXQoXG4gICAgICBjYXRhbG9nLnRlYW0udHJhY2tPcmdhbml6YXRpb25UZWFtRGVsZXRlZChcbiAgICAgICAgcC5vcmdhbml6YXRpb24sXG4gICAgICAgIHAudGVhbSxcbiAgICAgICAgZ2V0T3JnYW5pemF0aW9uVHJpZ2dlckluZm8ocC51c2VyKSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcblxuICBob29rcy5hZnRlckFkZFRlYW1NZW1iZXIgPSB3cmFwT3JnSG9vayhob29rcy5hZnRlckFkZFRlYW1NZW1iZXIsIGFzeW5jIChwKSA9PlxuICAgIGVtaXQoXG4gICAgICBjYXRhbG9nLnRlYW0udHJhY2tPcmdhbml6YXRpb25UZWFtTWVtYmVyQWRkZWQoXG4gICAgICAgIHAub3JnYW5pemF0aW9uLFxuICAgICAgICBwLnRlYW0sXG4gICAgICAgIHAudXNlcixcbiAgICAgICAgcC50ZWFtTWVtYmVyLFxuICAgICAgICBnZXRPcmdhbml6YXRpb25UcmlnZ2VySW5mbyhwLnVzZXIpLFxuICAgICAgKSxcbiAgICApLFxuICApO1xuXG4gIGhvb2tzLmFmdGVyUmVtb3ZlVGVhbU1lbWJlciA9IHdyYXBPcmdIb29rKGhvb2tzLmFmdGVyUmVtb3ZlVGVhbU1lbWJlciwgYXN5bmMgKHApID0+XG4gICAgZW1pdChcbiAgICAgIGNhdGFsb2cudGVhbS50cmFja09yZ2FuaXphdGlvblRlYW1NZW1iZXJSZW1vdmVkKFxuICAgICAgICBwLm9yZ2FuaXphdGlvbixcbiAgICAgICAgcC50ZWFtLFxuICAgICAgICBwLnVzZXIsXG4gICAgICAgIHAudGVhbU1lbWJlcixcbiAgICAgICAgZ2V0T3JnYW5pemF0aW9uVHJpZ2dlckluZm8ocC51c2VyKSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFJc0MsUUFBQTtBQUNrQyxtQkFBQTtBQWtCeEUsTUFBTSxjQUFjLFVBQTBCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNO0FBQ3JFLE1BQU0sZUFBZSxVQUEwQixNQUFNLFFBQVEsdUJBQXVCLE1BQU07QUFDMUYsTUFBTSxnQkFBZ0IsVUFBMEI7Q0FDOUMsTUFBTSxVQUFVLFlBQVksV0FBVyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsZUFBZSxRQUFRO0NBQzlFLE9BQU8sSUFBSSxPQUFPLEdBQUcsUUFBUSxXQUFXO0FBQzFDO0FBQ0EsTUFBTSxtQkFBbUIsV0FBK0IsV0FB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
|