sonamu 0.8.26 → 0.9.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/bin/cli.js +60 -13
- package/dist/_virtual/rolldown_runtime.js +39 -0
- package/dist/ai/agents/agent.d.ts +3 -3
- package/dist/ai/agents/agent.d.ts.map +1 -1
- package/dist/ai/agents/agent.js +76 -73
- package/dist/ai/agents/index.js +3 -3
- package/dist/ai/agents/types.d.ts +3 -3
- package/dist/ai/agents/types.d.ts.map +1 -1
- package/dist/ai/agents/types.js +1 -3
- package/dist/ai/index.js +3 -2
- package/dist/ai/providers/rtzr/api.js +25 -25
- package/dist/ai/providers/rtzr/error.js +25 -26
- package/dist/ai/providers/rtzr/index.js +5 -5
- package/dist/ai/providers/rtzr/model.d.ts +1 -1
- package/dist/ai/providers/rtzr/model.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/model.js +117 -133
- package/dist/ai/providers/rtzr/options.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/options.js +35 -41
- package/dist/ai/providers/rtzr/provider.d.ts +1 -1
- package/dist/ai/providers/rtzr/provider.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/provider.js +53 -51
- package/dist/ai/providers/rtzr/utils.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/utils.js +84 -84
- package/dist/api/base-frame.d.ts +2 -2
- package/dist/api/base-frame.d.ts.map +1 -1
- package/dist/api/base-frame.js +29 -19
- package/dist/api/caster.d.ts +1 -1
- package/dist/api/caster.d.ts.map +1 -1
- package/dist/api/caster.js +51 -61
- package/dist/api/code-converters.d.ts +4 -3
- package/dist/api/code-converters.d.ts.map +1 -1
- package/dist/api/code-converters.js +226 -249
- package/dist/api/config.d.ts +17 -17
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +37 -30
- package/dist/api/context.d.ts +10 -10
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +8 -2
- package/dist/api/decorators.d.ts +8 -8
- package/dist/api/decorators.d.ts.map +1 -1
- package/dist/api/decorators.js +245 -268
- package/dist/api/index.js +39 -7
- package/dist/api/secret.js +22 -15
- package/dist/api/sonamu.d.ts +15 -15
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +1012 -1131
- package/dist/api/validator.js +88 -79
- package/dist/auth/auth-generator.d.ts.map +1 -1
- package/dist/auth/auth-generator.js +203 -200
- package/dist/auth/better-auth-entities.d.ts +2 -2
- package/dist/auth/better-auth-entities.d.ts.map +1 -1
- package/dist/auth/better-auth-entities.js +369 -429
- package/dist/auth/index.js +21 -6
- package/dist/auth/knex-adapter.d.ts +2 -2
- package/dist/auth/knex-adapter.d.ts.map +1 -1
- package/dist/auth/knex-adapter.js +153 -157
- package/dist/auth/plugins/entity-definitions/admin.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/admin.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/admin.js +58 -56
- package/dist/auth/plugins/entity-definitions/anonymous.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/anonymous.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/anonymous.js +20 -20
- package/dist/auth/plugins/entity-definitions/api-key.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/api-key.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/api-key.js +185 -196
- package/dist/auth/plugins/entity-definitions/index.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/index.js +26 -29
- package/dist/auth/plugins/entity-definitions/jwt.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/jwt.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/jwt.js +62 -64
- package/dist/auth/plugins/entity-definitions/organization.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/organization.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/organization.js +362 -421
- package/dist/auth/plugins/entity-definitions/passkey.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/passkey.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/passkey.js +115 -126
- package/dist/auth/plugins/entity-definitions/phone-number.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/phone-number.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/phone-number.js +31 -40
- package/dist/auth/plugins/entity-definitions/sso.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/sso.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/sso.js +94 -107
- package/dist/auth/plugins/entity-definitions/two-factor.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/two-factor.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/two-factor.js +78 -92
- package/dist/auth/plugins/entity-definitions/types.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/types.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/types.js +1 -10
- package/dist/auth/plugins/entity-definitions/username.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/username.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/username.js +31 -40
- package/dist/auth/plugins/index.js +12 -3
- package/dist/auth/plugins/wrappers/admin.d.ts +2 -2
- package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/admin.js +28 -29
- package/dist/auth/plugins/wrappers/anonymous.d.ts +2 -1
- package/dist/auth/plugins/wrappers/anonymous.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/anonymous.js +23 -22
- package/dist/auth/plugins/wrappers/api-key.d.ts +2 -1
- package/dist/auth/plugins/wrappers/api-key.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/api-key.js +39 -34
- package/dist/auth/plugins/wrappers/index.js +11 -11
- package/dist/auth/plugins/wrappers/jwt.d.ts +2 -1
- package/dist/auth/plugins/wrappers/jwt.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/jwt.js +31 -26
- package/dist/auth/plugins/wrappers/organization.d.ts +2 -1
- package/dist/auth/plugins/wrappers/organization.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/organization.js +65 -62
- package/dist/auth/plugins/wrappers/passkey.d.ts +2 -1
- package/dist/auth/plugins/wrappers/passkey.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/passkey.js +33 -28
- package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/phone-number.js +26 -23
- package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/sso.js +37 -31
- package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/two-factor.js +31 -28
- package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/username.js +23 -23
- package/dist/bin/build-config.js +31 -31
- package/dist/bin/cli.js +1063 -1204
- package/dist/bin/fixture.d.ts.map +1 -1
- package/dist/bin/fixture.js +266 -259
- package/dist/bin/hmr-hook-register.d.ts.map +1 -1
- package/dist/bin/hmr-hook-register.js +19 -18
- package/dist/bin/test-command.d.ts.map +1 -1
- package/dist/bin/test-command.js +180 -177
- package/dist/bin/ts-loader-register.js +13 -6
- package/dist/bin/ts-loader-registration.d.ts.map +1 -1
- package/dist/bin/ts-loader-registration.js +28 -38
- package/dist/cache/cache-manager.d.ts +1 -1
- package/dist/cache/cache-manager.d.ts.map +1 -1
- package/dist/cache/cache-manager.js +20 -15
- package/dist/cache/decorator.d.ts +1 -1
- package/dist/cache/decorator.d.ts.map +1 -1
- package/dist/cache/decorator.js +84 -76
- package/dist/cache/drivers.js +21 -34
- package/dist/cache/index.js +10 -7
- package/dist/cache/types.d.ts +2 -2
- package/dist/cache/types.d.ts.map +1 -1
- package/dist/cache/types.js +1 -6
- package/dist/cache-control/cache-control.d.ts +2 -2
- package/dist/cache-control/cache-control.d.ts.map +1 -1
- package/dist/cache-control/cache-control.js +106 -122
- package/dist/cache-control/types.d.ts +2 -2
- package/dist/cache-control/types.d.ts.map +1 -1
- package/dist/cache-control/types.js +1 -19
- package/dist/compress/compress.d.ts +1 -1
- package/dist/compress/compress.d.ts.map +1 -1
- package/dist/compress/compress.js +58 -56
- package/dist/compress/index.js +7 -2
- package/dist/compress/types.js +1 -11
- package/dist/cone/cone-generator.d.ts +1 -1
- package/dist/cone/cone-generator.d.ts.map +1 -1
- package/dist/cone/cone-generator.js +216 -219
- package/dist/database/_batch_update.d.ts +1 -1
- package/dist/database/_batch_update.d.ts.map +1 -1
- package/dist/database/_batch_update.js +107 -102
- package/dist/database/base-model.d.ts +8 -9
- package/dist/database/base-model.d.ts.map +1 -1
- package/dist/database/base-model.js +371 -392
- package/dist/database/base-model.types.d.ts +5 -5
- package/dist/database/base-model.types.d.ts.map +1 -1
- package/dist/database/base-model.types.js +1 -20
- package/dist/database/db.d.ts +5 -2
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +185 -171
- package/dist/database/knex.d.ts +1 -1
- package/dist/database/knex.d.ts.map +1 -1
- package/dist/database/knex.js +48 -42
- package/dist/database/puri-subset.types.d.ts +6 -7
- package/dist/database/puri-subset.types.d.ts.map +1 -1
- package/dist/database/puri-subset.types.js +1 -16
- package/dist/database/puri-wrapper.d.ts +6 -6
- package/dist/database/puri-wrapper.d.ts.map +1 -1
- package/dist/database/puri-wrapper.js +99 -101
- package/dist/database/puri.d.ts +4 -5
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +1021 -1227
- package/dist/database/puri.types.d.ts +6 -6
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +15 -6
- package/dist/database/transaction-context.d.ts +2 -2
- package/dist/database/transaction-context.d.ts.map +1 -1
- package/dist/database/transaction-context.js +22 -13
- package/dist/database/upsert-builder.d.ts +3 -3
- package/dist/database/upsert-builder.d.ts.map +1 -1
- package/dist/database/upsert-builder.js +405 -465
- package/dist/dict/en.js +72 -74
- package/dist/dict/index.js +13 -13
- package/dist/dict/ko.js +72 -74
- package/dist/dict/rc-keys.js +150 -168
- package/dist/dict/sd.d.ts +3 -1
- package/dist/dict/sd.d.ts.map +1 -1
- package/dist/dict/sd.js +54 -40
- package/dist/dict/sonamu-dictionary.d.ts +1 -1
- package/dist/dict/sonamu-dictionary.d.ts.map +1 -1
- package/dist/dict/sonamu-dictionary.js +887 -955
- package/dist/dict/types.js +1 -7
- package/dist/dict/utils.js +26 -24
- package/dist/entity/entity-manager.d.ts +9 -9
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +226 -223
- package/dist/entity/entity-template-cone.d.ts +1 -1
- package/dist/entity/entity-template-cone.d.ts.map +1 -1
- package/dist/entity/entity-template-cone.js +152 -151
- package/dist/entity/entity.d.ts.map +1 -1
- package/dist/entity/entity.js +952 -1089
- package/dist/exceptions/error-handler.d.ts +1 -1
- package/dist/exceptions/error-handler.d.ts.map +1 -1
- package/dist/exceptions/error-handler.js +32 -27
- package/dist/exceptions/so-exceptions.d.ts +1 -1
- package/dist/exceptions/so-exceptions.d.ts.map +1 -1
- package/dist/exceptions/so-exceptions.js +61 -68
- package/dist/filter/index.js +9 -3
- package/dist/filter/types.js +92 -88
- package/dist/filter/utils.d.ts +1 -1
- package/dist/filter/utils.d.ts.map +1 -1
- package/dist/filter/utils.js +147 -161
- package/dist/index.js +87 -40
- package/dist/logger/category.d.ts.map +1 -1
- package/dist/logger/category.js +30 -29
- package/dist/logger/configure.d.ts.map +1 -1
- package/dist/logger/configure.js +83 -107
- package/dist/migration/code-generation.d.ts +2 -2
- package/dist/migration/code-generation.d.ts.map +1 -1
- package/dist/migration/code-generation.js +1385 -1578
- package/dist/migration/migration-set.d.ts +1 -1
- package/dist/migration/migration-set.d.ts.map +1 -1
- package/dist/migration/migration-set.js +177 -227
- package/dist/migration/migrator.d.ts +4 -3
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +340 -345
- package/dist/migration/postgresql-schema-reader.d.ts +2 -2
- package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
- package/dist/migration/postgresql-schema-reader.js +506 -564
- package/dist/migration/slack-confirm.d.ts +2 -2
- package/dist/migration/slack-confirm.d.ts.map +1 -1
- package/dist/migration/slack-confirm.js +205 -193
- package/dist/migration/types.d.ts +2 -2
- package/dist/migration/types.d.ts.map +1 -1
- package/dist/migration/types.js +1 -3
- package/dist/naite/messaging-types.d.ts +1 -0
- package/dist/naite/messaging-types.d.ts.map +1 -1
- package/dist/naite/messaging-types.js +1 -7
- package/dist/naite/naite-reporter.d.ts +2 -2
- package/dist/naite/naite-reporter.d.ts.map +1 -1
- package/dist/naite/naite-reporter.js +127 -120
- package/dist/naite/naite.d.ts +3 -2
- package/dist/naite/naite.d.ts.map +1 -1
- package/dist/naite/naite.js +266 -300
- package/dist/ssr/index.d.ts +2 -2
- package/dist/ssr/index.d.ts.map +1 -1
- package/dist/ssr/index.js +13 -3
- package/dist/ssr/registry.d.ts +1 -1
- package/dist/ssr/registry.d.ts.map +1 -1
- package/dist/ssr/registry.js +45 -37
- package/dist/ssr/renderer.d.ts +4 -4
- package/dist/ssr/renderer.d.ts.map +1 -1
- package/dist/ssr/renderer.js +84 -91
- package/dist/ssr/types.d.ts +2 -2
- package/dist/ssr/types.d.ts.map +1 -1
- package/dist/ssr/types.js +1 -3
- package/dist/storage/base-file.js +54 -41
- package/dist/storage/buffered-file.d.ts +2 -2
- package/dist/storage/buffered-file.d.ts.map +1 -1
- package/dist/storage/buffered-file.js +51 -44
- package/dist/storage/drivers.d.ts +2 -2
- package/dist/storage/drivers.d.ts.map +1 -1
- package/dist/storage/drivers.js +12 -7
- package/dist/storage/index.js +14 -7
- package/dist/storage/s3-driver.d.ts +2 -2
- package/dist/storage/s3-driver.d.ts.map +1 -1
- package/dist/storage/s3-driver.js +52 -48
- package/dist/storage/storage-manager.d.ts +2 -2
- package/dist/storage/storage-manager.d.ts.map +1 -1
- package/dist/storage/storage-manager.js +33 -25
- package/dist/storage/types.d.ts +2 -2
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/types.js +1 -5
- package/dist/storage/uploaded-file.d.ts +1 -1
- package/dist/storage/uploaded-file.d.ts.map +1 -1
- package/dist/storage/uploaded-file.js +45 -35
- package/dist/stream/index.js +7 -2
- package/dist/stream/sse.d.ts +2 -2
- package/dist/stream/sse.d.ts.map +1 -1
- package/dist/stream/sse.js +72 -67
- package/dist/syncer/api-parser.d.ts +1 -1
- package/dist/syncer/api-parser.d.ts.map +1 -1
- package/dist/syncer/api-parser.js +224 -245
- package/dist/syncer/checksum.d.ts +1 -1
- package/dist/syncer/checksum.d.ts.map +1 -1
- package/dist/syncer/checksum.js +86 -72
- package/dist/syncer/code-generator.d.ts +2 -2
- package/dist/syncer/code-generator.d.ts.map +1 -1
- package/dist/syncer/code-generator.js +154 -160
- package/dist/syncer/entity-operations.d.ts +1 -1
- package/dist/syncer/entity-operations.d.ts.map +1 -1
- package/dist/syncer/entity-operations.js +63 -54
- package/dist/syncer/file-patterns.d.ts +1 -1
- package/dist/syncer/file-patterns.d.ts.map +1 -1
- package/dist/syncer/file-patterns.js +38 -38
- package/dist/syncer/index.js +19 -8
- package/dist/syncer/module-loader.d.ts +5 -5
- package/dist/syncer/module-loader.d.ts.map +1 -1
- package/dist/syncer/module-loader.js +83 -78
- package/dist/syncer/syncer-actions.d.ts +2 -2
- package/dist/syncer/syncer-actions.d.ts.map +1 -1
- package/dist/syncer/syncer-actions.js +76 -91
- package/dist/syncer/syncer.d.ts +7 -6
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +426 -492
- package/dist/tasks/decorator.d.ts +3 -3
- package/dist/tasks/decorator.d.ts.map +1 -1
- package/dist/tasks/decorator.js +32 -28
- package/dist/tasks/step-wrapper.d.ts +1 -1
- package/dist/tasks/step-wrapper.d.ts.map +1 -1
- package/dist/tasks/step-wrapper.js +42 -41
- package/dist/tasks/workflow-manager.d.ts +2 -2
- package/dist/tasks/workflow-manager.d.ts.map +1 -1
- package/dist/tasks/workflow-manager.js +192 -221
- package/dist/template/entity-converter.d.ts +1 -1
- package/dist/template/entity-converter.d.ts.map +1 -1
- package/dist/template/entity-converter.js +103 -103
- package/dist/template/helpers.d.ts.map +1 -1
- package/dist/template/helpers.js +163 -163
- package/dist/template/implementations/entity.template.d.ts +1 -1
- package/dist/template/implementations/entity.template.d.ts.map +1 -1
- package/dist/template/implementations/entity.template.js +76 -85
- package/dist/template/implementations/entry-server.template.d.ts +1 -1
- package/dist/template/implementations/entry-server.template.d.ts.map +1 -1
- package/dist/template/implementations/entry-server.template.js +32 -27
- package/dist/template/implementations/generated.template.d.ts +1 -1
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +254 -275
- package/dist/template/implementations/generated_http.template.d.ts +2 -2
- package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_http.template.js +114 -133
- package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_sso.template.js +249 -275
- package/dist/template/implementations/init_types.template.d.ts +1 -1
- package/dist/template/implementations/init_types.template.d.ts.map +1 -1
- package/dist/template/implementations/init_types.template.js +40 -34
- package/dist/template/implementations/model.template.d.ts +1 -1
- package/dist/template/implementations/model.template.d.ts.map +1 -1
- package/dist/template/implementations/model.template.js +56 -53
- package/dist/template/implementations/model_test.template.d.ts +1 -1
- package/dist/template/implementations/model_test.template.d.ts.map +1 -1
- package/dist/template/implementations/model_test.template.js +32 -24
- package/dist/template/implementations/queries.template.d.ts +1 -1
- package/dist/template/implementations/queries.template.d.ts.map +1 -1
- package/dist/template/implementations/queries.template.js +84 -89
- package/dist/template/implementations/sd.template.d.ts +1 -1
- package/dist/template/implementations/sd.template.d.ts.map +1 -1
- package/dist/template/implementations/sd.template.js +137 -144
- package/dist/template/implementations/services.template.d.ts +1 -1
- package/dist/template/implementations/services.template.d.ts.map +1 -1
- package/dist/template/implementations/services.template.js +164 -189
- package/dist/template/implementations/view_form.template.d.ts +1 -1
- package/dist/template/implementations/view_form.template.d.ts.map +1 -1
- package/dist/template/implementations/view_form.template.js +258 -285
- package/dist/template/implementations/view_id_all_select.template.d.ts +1 -1
- package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -1
- package/dist/template/implementations/view_id_all_select.template.js +31 -25
- package/dist/template/implementations/view_list.template.d.ts +1 -1
- package/dist/template/implementations/view_list.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list.template.js +304 -355
- package/dist/template/implementations/view_search_input.template.d.ts +1 -1
- package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
- package/dist/template/implementations/view_search_input.template.js +31 -27
- package/dist/template/index.js +21 -7
- package/dist/template/template-manager.d.ts +1 -1
- package/dist/template/template-manager.d.ts.map +1 -1
- package/dist/template/template-manager.js +132 -123
- package/dist/template/template-types.js +8 -6
- package/dist/template/template.d.ts +2 -2
- package/dist/template/template.d.ts.map +1 -1
- package/dist/template/template.js +73 -68
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +603 -657
- package/dist/testing/_relation-graph.d.ts +1 -1
- package/dist/testing/_relation-graph.d.ts.map +1 -1
- package/dist/testing/_relation-graph.js +93 -88
- package/dist/testing/bootstrap.d.ts +22 -13
- package/dist/testing/bootstrap.d.ts.map +1 -1
- package/dist/testing/bootstrap.js +114 -114
- package/dist/testing/data-explorer.d.ts +3 -3
- package/dist/testing/data-explorer.d.ts.map +1 -1
- package/dist/testing/data-explorer.js +237 -265
- package/dist/testing/dev-test-routes.d.ts +2 -2
- package/dist/testing/dev-test-routes.d.ts.map +1 -1
- package/dist/testing/dev-test-routes.js +258 -249
- package/dist/testing/dev-vitest-manager.d.ts +1 -1
- package/dist/testing/dev-vitest-manager.d.ts.map +1 -1
- package/dist/testing/dev-vitest-manager.js +514 -539
- package/dist/testing/faker-mappings.js +422 -420
- package/dist/testing/fixture-generator.d.ts +3 -3
- package/dist/testing/fixture-generator.d.ts.map +1 -1
- package/dist/testing/fixture-generator.js +1216 -1346
- package/dist/testing/fixture-loader.js +26 -25
- package/dist/testing/fixture-manager.d.ts +3 -3
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +706 -776
- package/dist/testing/global-setup.js +53 -49
- package/dist/testing/index.js +19 -11
- package/dist/testing/naite-vitest-reporter.js +18 -13
- package/dist/testing/parallel-db-manager.d.ts +1 -1
- package/dist/testing/parallel-db-manager.d.ts.map +1 -1
- package/dist/testing/parallel-db-manager.js +63 -78
- package/dist/testing/vitest-helpers.d.ts +1 -1
- package/dist/testing/vitest-helpers.d.ts.map +1 -1
- package/dist/testing/vitest-helpers.js +37 -33
- package/dist/types/types.d.ts +28 -28
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +764 -890
- package/dist/ui/ai-api.d.ts +1 -1
- package/dist/ui/ai-api.d.ts.map +1 -1
- package/dist/ui/ai-api.js +52 -42
- package/dist/ui/ai-client.d.ts +1 -2
- package/dist/ui/ai-client.d.ts.map +1 -1
- package/dist/ui/ai-client.js +353 -388
- package/dist/ui/api.d.ts +1 -1
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +903 -1145
- package/dist/ui/cdd-service.d.ts +1 -1
- package/dist/ui/cdd-service.d.ts.map +1 -1
- package/dist/ui/cdd-service.js +406 -407
- package/dist/ui/cdd-types.js +1 -3
- package/dist/ui-web/assets/index-C-Zz-wYg.css +1 -0
- package/dist/ui-web/assets/index-DejDON8K.js +238 -0
- package/dist/ui-web/index.html +3 -3
- package/dist/utils/async-utils.js +57 -45
- package/dist/utils/console-util.d.ts.map +1 -1
- package/dist/utils/console-util.js +104 -87
- package/dist/utils/controller.js +26 -19
- package/dist/utils/esm-utils.js +49 -38
- package/dist/utils/formatter.d.ts +1 -2
- package/dist/utils/formatter.d.ts.map +1 -1
- package/dist/utils/formatter.js +89 -115
- package/dist/utils/fs-utils.d.ts.map +1 -1
- package/dist/utils/fs-utils.js +68 -65
- package/dist/utils/lodash-able.js +11 -4
- package/dist/utils/model.d.ts +1 -1
- package/dist/utils/model.d.ts.map +1 -1
- package/dist/utils/model.js +21 -19
- package/dist/utils/object-utils.js +148 -186
- package/dist/utils/path-utils.js +67 -57
- package/dist/utils/process-utils.d.ts.map +1 -1
- package/dist/utils/process-utils.js +37 -31
- package/dist/utils/sql-parser.d.ts +1 -1
- package/dist/utils/sql-parser.d.ts.map +1 -1
- package/dist/utils/sql-parser.js +40 -40
- package/dist/utils/type-utils.js +44 -43
- package/dist/utils/utils.d.ts +2 -3
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +81 -93
- package/dist/utils/zod-error.d.ts +1 -1
- package/dist/utils/zod-error.d.ts.map +1 -1
- package/dist/utils/zod-error.js +24 -17
- package/dist/vector/chunking.d.ts +1 -1
- package/dist/vector/chunking.d.ts.map +1 -1
- package/dist/vector/chunking.js +100 -94
- package/dist/vector/config.d.ts +1 -1
- package/dist/vector/config.d.ts.map +1 -1
- package/dist/vector/config.js +76 -78
- package/dist/vector/embedding.d.ts +1 -1
- package/dist/vector/embedding.d.ts.map +1 -1
- package/dist/vector/embedding.js +128 -125
- package/dist/vector/index.js +5 -5
- package/dist/vector/types.js +1 -5
- package/package.json +31 -36
- package/src/ai/agents/agent.ts +12 -5
- package/src/ai/agents/types.ts +5 -5
- package/src/ai/providers/rtzr/model.ts +8 -10
- package/src/ai/providers/rtzr/options.ts +2 -1
- package/src/ai/providers/rtzr/provider.ts +5 -3
- package/src/ai/providers/rtzr/utils.ts +2 -7
- package/src/api/__tests__/config.test.ts +15 -8
- package/src/api/base-frame.ts +5 -3
- package/src/api/caster.ts +7 -6
- package/src/api/code-converters.ts +23 -26
- package/src/api/config.ts +23 -17
- package/src/api/context.ts +18 -11
- package/src/api/decorators.ts +17 -18
- package/src/api/sonamu.ts +44 -49
- package/src/auth/auth-generator.ts +4 -6
- package/src/auth/better-auth-entities.ts +3 -2
- package/src/auth/knex-adapter.ts +6 -5
- package/src/auth/plugins/entity-definitions/admin.ts +1 -1
- package/src/auth/plugins/entity-definitions/anonymous.ts +1 -1
- package/src/auth/plugins/entity-definitions/api-key.ts +1 -1
- package/src/auth/plugins/entity-definitions/index.ts +1 -1
- package/src/auth/plugins/entity-definitions/jwt.ts +1 -1
- package/src/auth/plugins/entity-definitions/organization.ts +1 -1
- package/src/auth/plugins/entity-definitions/passkey.ts +1 -1
- package/src/auth/plugins/entity-definitions/phone-number.ts +1 -1
- package/src/auth/plugins/entity-definitions/sso.ts +1 -1
- package/src/auth/plugins/entity-definitions/two-factor.ts +1 -1
- package/src/auth/plugins/entity-definitions/types.ts +1 -1
- package/src/auth/plugins/entity-definitions/username.ts +1 -1
- package/src/auth/plugins/wrappers/admin.ts +3 -1
- package/src/auth/plugins/wrappers/anonymous.ts +3 -1
- package/src/auth/plugins/wrappers/api-key.ts +3 -1
- package/src/auth/plugins/wrappers/jwt.ts +3 -1
- package/src/auth/plugins/wrappers/organization.ts +3 -1
- package/src/auth/plugins/wrappers/passkey.ts +3 -1
- package/src/auth/plugins/wrappers/phone-number.ts +3 -1
- package/src/auth/plugins/wrappers/sso.ts +2 -1
- package/src/auth/plugins/wrappers/two-factor.ts +3 -1
- package/src/auth/plugins/wrappers/username.ts +3 -1
- package/src/bin/__tests__/ts-loader-register.test.ts +7 -12
- package/src/bin/build-config.ts +3 -3
- package/src/bin/cli.ts +27 -25
- package/src/bin/fixture.ts +4 -2
- package/src/bin/hmr-hook-register.ts +1 -0
- package/src/bin/test-command.ts +4 -2
- package/src/bin/ts-loader-registration.ts +6 -22
- package/src/cache/cache-manager.ts +2 -1
- package/src/cache/decorator.ts +2 -2
- package/src/cache/types.ts +3 -3
- package/src/cache-control/cache-control.ts +3 -2
- package/src/cache-control/types.ts +2 -2
- package/src/compress/compress.ts +1 -1
- package/src/cone/cone-generator.ts +5 -3
- package/src/database/_batch_update.ts +1 -1
- package/src/database/base-model.ts +20 -14
- package/src/database/base-model.types.ts +12 -11
- package/src/database/db.ts +56 -21
- package/src/database/knex.ts +2 -2
- package/src/database/puri-subset.test-d.ts +33 -32
- package/src/database/puri-subset.types.ts +6 -7
- package/src/database/puri-wrapper.ts +29 -26
- package/src/database/puri.ts +36 -34
- package/src/database/puri.types.test-d.ts +6 -5
- package/src/database/puri.types.ts +9 -12
- package/src/database/transaction-context.ts +2 -2
- package/src/database/upsert-builder.ts +17 -10
- package/src/dict/sd.ts +17 -4
- package/src/dict/sonamu-dictionary.ts +23 -17
- package/src/entity/entity-manager.ts +9 -7
- package/src/entity/entity-template-cone.ts +10 -3
- package/src/entity/entity.ts +20 -16
- package/src/exceptions/error-handler.ts +2 -1
- package/src/exceptions/so-exceptions.ts +1 -1
- package/src/filter/utils.ts +3 -2
- package/src/logger/category.ts +1 -0
- package/src/logger/configure.ts +5 -5
- package/src/migration/__tests__/code-generation.search-text.test.ts +2 -3
- package/src/migration/code-generation.ts +26 -25
- package/src/migration/migration-set.ts +16 -18
- package/src/migration/migrator.ts +38 -33
- package/src/migration/postgresql-schema-reader.ts +12 -12
- package/src/migration/slack-confirm.ts +5 -4
- package/src/migration/types.ts +2 -2
- package/src/naite/messaging-types.ts +1 -1
- package/src/naite/naite-reporter.ts +5 -3
- package/src/naite/naite.ts +12 -7
- package/src/shared/app.shared.ts.txt +2 -2
- package/src/shared/web.shared.ts.txt +2 -2
- package/src/skills/AGENTS.md +19 -18
- package/src/skills/commands/sonamu-skills.md +9 -9
- package/src/skills/sonamu/SKILL.md +111 -104
- package/src/skills/sonamu/ai-agents.md +27 -26
- package/src/skills/sonamu/api.md +81 -69
- package/src/skills/sonamu/auth-migration.md +13 -27
- package/src/skills/sonamu/auth-plugins.md +41 -31
- package/src/skills/sonamu/auth.md +30 -24
- package/src/skills/sonamu/cdd.md +26 -17
- package/src/skills/sonamu/cone.md +50 -50
- package/src/skills/sonamu/config.md +74 -51
- package/src/skills/sonamu/create-sonamu.md +31 -19
- package/src/skills/sonamu/database.md +43 -26
- package/src/skills/sonamu/entity-basic.md +61 -61
- package/src/skills/sonamu/entity-relations.md +84 -80
- package/src/skills/sonamu/entity-validation-checklist.md +19 -15
- package/src/skills/sonamu/fixture-cli.md +52 -30
- package/src/skills/sonamu/framework-change.md +9 -7
- package/src/skills/sonamu/frontend.md +64 -82
- package/src/skills/sonamu/i18n.md +45 -37
- package/src/skills/sonamu/migration.md +54 -31
- package/src/skills/sonamu/model.md +98 -66
- package/src/skills/sonamu/naite.md +34 -32
- package/src/skills/sonamu/project-init.md +28 -8
- package/src/skills/sonamu/puri.md +82 -91
- package/src/skills/sonamu/scaffolding.md +44 -32
- package/src/skills/sonamu/skill-contribution.md +50 -45
- package/src/skills/sonamu/subset.md +13 -13
- package/src/skills/sonamu/tasks.md +73 -58
- package/src/skills/sonamu/testing-devrunner.md +56 -36
- package/src/skills/sonamu/testing.md +23 -58
- package/src/skills/sonamu/upsert.md +32 -31
- package/src/skills/sonamu/vector.md +37 -36
- package/src/ssr/index.ts +2 -12
- package/src/ssr/registry.ts +1 -1
- package/src/ssr/renderer.ts +7 -5
- package/src/ssr/types.ts +2 -2
- package/src/storage/buffered-file.ts +4 -2
- package/src/storage/drivers.ts +3 -2
- package/src/storage/s3-driver.ts +7 -4
- package/src/storage/storage-manager.ts +3 -2
- package/src/storage/types.ts +3 -2
- package/src/storage/uploaded-file.ts +1 -1
- package/src/stream/sse.ts +2 -2
- package/src/syncer/api-parser.ts +8 -5
- package/src/syncer/checksum.ts +9 -5
- package/src/syncer/code-generator.ts +16 -8
- package/src/syncer/entity-operations.ts +5 -3
- package/src/syncer/file-patterns.ts +2 -1
- package/src/syncer/module-loader.ts +9 -6
- package/src/syncer/syncer-actions.ts +5 -3
- package/src/syncer/syncer.ts +18 -24
- package/src/tasks/decorator.ts +10 -8
- package/src/tasks/step-wrapper.ts +1 -1
- package/src/tasks/workflow-manager.ts +18 -15
- package/src/template/__tests__/generated.template.search-text.test.ts +1 -0
- package/src/template/entity-converter.ts +4 -2
- package/src/template/generated.template.test-d.ts +2 -1
- package/src/template/helpers.ts +5 -2
- package/src/template/implementations/entity.template.ts +9 -8
- package/src/template/implementations/entry-server.template.ts +1 -1
- package/src/template/implementations/generated.template.ts +21 -29
- package/src/template/implementations/generated_http.template.ts +9 -6
- package/src/template/implementations/generated_sso.template.ts +6 -4
- package/src/template/implementations/init_types.template.ts +3 -2
- package/src/template/implementations/model.template.ts +4 -2
- package/src/template/implementations/model_test.template.ts +3 -2
- package/src/template/implementations/queries.template.ts +6 -14
- package/src/template/implementations/sd.template.ts +4 -2
- package/src/template/implementations/services.template.ts +7 -11
- package/src/template/implementations/view_form.template.ts +5 -3
- package/src/template/implementations/view_id_all_select.template.ts +3 -2
- package/src/template/implementations/view_list.template.ts +7 -5
- package/src/template/implementations/view_search_input.template.ts +3 -2
- package/src/template/template-manager.ts +4 -3
- package/src/template/template.ts +4 -3
- package/src/template/zod-converter.ts +10 -7
- package/src/testing/__tests__/dev-test-routes.test.ts +3 -2
- package/src/testing/__tests__/dev-vitest-manager.test.ts +1 -0
- package/src/testing/_relation-graph.ts +2 -2
- package/src/testing/bootstrap.ts +55 -27
- package/src/testing/data-explorer.ts +5 -4
- package/src/testing/dev-test-routes.ts +8 -5
- package/src/testing/dev-vitest-manager.ts +13 -12
- package/src/testing/fixture-generator.ts +11 -17
- package/src/testing/fixture-manager.ts +21 -17
- package/src/testing/parallel-db-manager.ts +2 -1
- package/src/testing/vitest-helpers.ts +2 -1
- package/src/types/__tests__/entity-json-schema-search-text.test.ts +1 -0
- package/src/types/types.ts +8 -8
- package/src/typings/knex.d.ts +4 -4
- package/src/ui/ai-api.ts +5 -3
- package/src/ui/ai-client.ts +6 -5
- package/src/ui/api.ts +25 -23
- package/src/ui/cdd-service.ts +12 -11
- package/src/utils/console-util.ts +3 -1
- package/src/utils/formatter.ts +94 -102
- package/src/utils/fs-utils.ts +2 -1
- package/src/utils/model.ts +2 -2
- package/src/utils/object-utils.ts +3 -3
- package/src/utils/process-utils.ts +2 -1
- package/src/utils/sql-parser.ts +10 -1
- package/src/utils/type-utils.ts +3 -3
- package/src/utils/utils.ts +9 -7
- package/src/utils/zod-error.ts +1 -1
- package/src/vector/chunking.ts +1 -1
- package/src/vector/config.ts +1 -1
- package/src/vector/embedding.ts +11 -9
- package/tsdown.api.config.ts +50 -0
- package/.swcrc.project-default +0 -18
- package/dist/api/__tests__/config.test.js +0 -189
- package/dist/bin/__tests__/test-command.test.js +0 -112
- package/dist/bin/__tests__/ts-loader-register.test.js +0 -45
- package/dist/database/puri-subset.test-d.js +0 -89
- package/dist/database/puri.types.test-d.js +0 -129
- package/dist/migration/__tests__/code-generation.search-text.test.js +0 -435
- package/dist/template/__tests__/generated.template.search-text.test.js +0 -99
- package/dist/template/generated.template.test-d.js +0 -24
- package/dist/testing/__tests__/dev-test-routes.test.js +0 -144
- package/dist/testing/__tests__/dev-vitest-manager.test.js +0 -152
- package/dist/types/__tests__/entity-json-schema-search-text.test.js +0 -256
- package/dist/typings/knex.d.js +0 -3
- package/dist/ui-web/assets/index-CKo0Z2Iu.css +0 -1
- package/dist/ui-web/assets/index-DK-2aacv.js +0 -257
|
@@ -1,282 +1,256 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Sonamu } from "../../api/sonamu.js";
|
|
2
|
+
import { init_types, isBelongsToOneRelationProp, isManyToManyRelationProp, isOneToOneRelationProp } from "../../types/types.js";
|
|
3
|
+
import { EntityManager, init_entity_manager } from "../../entity/entity-manager.js";
|
|
4
|
+
import { init_api } from "../../api/index.js";
|
|
5
|
+
import { Template, init_template } from "../template.js";
|
|
2
6
|
import inflection from "inflection";
|
|
3
7
|
import { unique } from "radashi";
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
import assert from "assert";
|
|
9
|
+
|
|
10
|
+
//#region src/template/implementations/generated_sso.template.ts
|
|
11
|
+
init_api();
|
|
12
|
+
init_entity_manager();
|
|
13
|
+
init_types();
|
|
14
|
+
init_template();
|
|
8
15
|
/**
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
return "string[]";
|
|
22
|
-
case "number[]":
|
|
23
|
-
return "number[]";
|
|
24
|
-
default:
|
|
25
|
-
return "unknown";
|
|
26
|
-
}
|
|
16
|
+
* better-auth additionalFields의 type 값을 TypeScript 타입 문자열로 변환합니다.
|
|
17
|
+
*/
|
|
18
|
+
function mapBetterAuthFieldType(type) {
|
|
19
|
+
switch (type) {
|
|
20
|
+
case "string": return "string";
|
|
21
|
+
case "number": return "number";
|
|
22
|
+
case "boolean": return "boolean";
|
|
23
|
+
case "date": return "Date";
|
|
24
|
+
case "string[]": return "string[]";
|
|
25
|
+
case "number[]": return "number[]";
|
|
26
|
+
default: return "unknown";
|
|
27
|
+
}
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
lines: [
|
|
53
|
-
`export const ${entityCamelName}SubsetQueries = {`,
|
|
54
|
-
...subsetKeys.map((subsetKey)=>`${subsetKey}: (qbWrapper: PuriWrapper<DatabaseSchemaExtend>) => {
|
|
29
|
+
var Template__generated_sso = class extends Template {
|
|
30
|
+
constructor() {
|
|
31
|
+
super("generated_sso");
|
|
32
|
+
}
|
|
33
|
+
getTargetAndPath() {
|
|
34
|
+
const { dir } = Sonamu.config.api;
|
|
35
|
+
return {
|
|
36
|
+
target: `${dir}/src/application`,
|
|
37
|
+
path: `sonamu.generated.sso.ts`
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
render() {
|
|
41
|
+
const entityIds = EntityManager.getAllIds();
|
|
42
|
+
const entities = entityIds.map((id) => EntityManager.get(id));
|
|
43
|
+
const targetEntities = entities.filter((entity) => entity.parentId === undefined && Object.keys(entity.subsets).length > 0);
|
|
44
|
+
const sourceCodes = targetEntities.flatMap((entity) => {
|
|
45
|
+
const subsetKeys = Object.keys(entity.subsets);
|
|
46
|
+
const subsetKeyTypeName = `${entity.names.module}SubsetKey`;
|
|
47
|
+
const entityCamelName = inflection.camelize(entity.id, true);
|
|
48
|
+
const puriSubsetQuery = {
|
|
49
|
+
label: `SubsetQuery: ${entity.id}`,
|
|
50
|
+
lines: [
|
|
51
|
+
`export const ${entityCamelName}SubsetQueries = {`,
|
|
52
|
+
...subsetKeys.map((subsetKey) => `${subsetKey}: (qbWrapper: PuriWrapper<DatabaseSchemaExtend>) => {
|
|
55
53
|
${entity.getPuriSubsetQuery(subsetKey)};
|
|
56
54
|
},`),
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
let fieldType;
|
|
256
|
-
// sonamuType이 있으면 description을 타입명으로 사용
|
|
257
|
-
if (fieldConfig.sonamuType) {
|
|
258
|
-
fieldType = fieldConfig.sonamuType;
|
|
259
|
-
importKeys.push(fieldType);
|
|
260
|
-
} else {
|
|
261
|
-
fieldType = mapBetterAuthFieldType(fieldConfig.type);
|
|
262
|
-
}
|
|
263
|
-
return ` ${key}${isRequired ? "" : "?"}: ${fieldType};`;
|
|
264
|
-
});
|
|
265
|
-
return {
|
|
266
|
-
label: "Auth User Type",
|
|
267
|
-
lines: [
|
|
268
|
-
"export type SonamuUser = User & {",
|
|
269
|
-
...fieldLines,
|
|
270
|
-
"};"
|
|
271
|
-
],
|
|
272
|
-
importKeys
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
/**
|
|
276
|
-
* auth 설정이 있는지 확인합니다.
|
|
277
|
-
*/ hasAuthConfig() {
|
|
278
|
-
return !!Sonamu.config.server?.auth;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
55
|
+
`};`,
|
|
56
|
+
""
|
|
57
|
+
],
|
|
58
|
+
importKeys: []
|
|
59
|
+
};
|
|
60
|
+
const puriLoaderQuery = {
|
|
61
|
+
label: `LoaderQuery: ${entity.id}`,
|
|
62
|
+
lines: [
|
|
63
|
+
`export const ${entityCamelName}LoaderQueries = {`,
|
|
64
|
+
...subsetKeys.map((subsetKey) => {
|
|
65
|
+
return `${subsetKey}: ${entity.getPuriLoaderQuery(subsetKey)},`;
|
|
66
|
+
}),
|
|
67
|
+
`} as const satisfies PuriLoaderQueries<${subsetKeyTypeName}>;`,
|
|
68
|
+
""
|
|
69
|
+
],
|
|
70
|
+
importKeys: [subsetKeyTypeName]
|
|
71
|
+
};
|
|
72
|
+
return [puriSubsetQuery, puriLoaderQuery];
|
|
73
|
+
});
|
|
74
|
+
const fkTypeSourceCode = this.getForeignKeyTypeSourceCode(entities);
|
|
75
|
+
if (fkTypeSourceCode) {
|
|
76
|
+
sourceCodes.push(fkTypeSourceCode);
|
|
77
|
+
}
|
|
78
|
+
const dbSchemaSourceCode = this.getDatabaseSchemaSourceCode(entities);
|
|
79
|
+
if (dbSchemaSourceCode) {
|
|
80
|
+
sourceCodes.push(dbSchemaSourceCode);
|
|
81
|
+
}
|
|
82
|
+
const authUserTypeSourceCode = this.getAuthUserTypeSourceCode();
|
|
83
|
+
if (authUserTypeSourceCode) {
|
|
84
|
+
sourceCodes.push(authUserTypeSourceCode);
|
|
85
|
+
}
|
|
86
|
+
const sourceCode = sourceCodes.reduce((result, ts) => {
|
|
87
|
+
if (ts === null) {
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
assert(result);
|
|
91
|
+
return {
|
|
92
|
+
lines: [
|
|
93
|
+
...result.lines,
|
|
94
|
+
`// ${ts.label}`,
|
|
95
|
+
...ts.lines,
|
|
96
|
+
""
|
|
97
|
+
],
|
|
98
|
+
importKeys: unique([...result.importKeys, ...ts.importKeys])
|
|
99
|
+
};
|
|
100
|
+
}, {
|
|
101
|
+
lines: [],
|
|
102
|
+
importKeys: []
|
|
103
|
+
});
|
|
104
|
+
const body = sourceCode.lines.join("\n");
|
|
105
|
+
const isUsingManyToManyBaseSchema = body.includes("ManyToManyBaseSchema");
|
|
106
|
+
const sonamuImports = [
|
|
107
|
+
"PuriWrapper",
|
|
108
|
+
"DatabaseSchemaExtend",
|
|
109
|
+
"PuriLoaderQueries",
|
|
110
|
+
isUsingManyToManyBaseSchema ? "ManyToManyBaseSchema" : ""
|
|
111
|
+
].filter(Boolean).join(", ");
|
|
112
|
+
const customHeaders = [
|
|
113
|
+
"/**",
|
|
114
|
+
" * @generated",
|
|
115
|
+
" * 직접 수정하지 마세요.",
|
|
116
|
+
" */",
|
|
117
|
+
`import { ${sonamuImports} } from "sonamu";`
|
|
118
|
+
];
|
|
119
|
+
if (this.hasAuthConfig()) {
|
|
120
|
+
customHeaders.push(`import type { User } from "better-auth";`);
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
...this.getTargetAndPath(),
|
|
124
|
+
body: sourceCode.lines.join("\n"),
|
|
125
|
+
importKeys: sourceCode.importKeys,
|
|
126
|
+
customHeaders
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
getDatabaseSchemaSourceCode(entities) {
|
|
130
|
+
if (entities.length === 0) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
const entitySchemaLines = entities.map((entity) => `${entity.table}: ${entity.id}BaseSchema;`);
|
|
134
|
+
const joinTables = unique(entities.flatMap((entity) => entity.props.filter(isManyToManyRelationProp).map((prop) => {
|
|
135
|
+
const fromTableKey = inflection.singularize(entity.table);
|
|
136
|
+
const toEntity = EntityManager.get(prop.with);
|
|
137
|
+
const toTableKey = inflection.singularize(toEntity.table);
|
|
138
|
+
return {
|
|
139
|
+
table: prop.joinTable,
|
|
140
|
+
fromTableKey,
|
|
141
|
+
toTableKey,
|
|
142
|
+
fromEntityId: entity.id,
|
|
143
|
+
toEntityId: toEntity.id
|
|
144
|
+
};
|
|
145
|
+
})), (joinTable) => joinTable.table);
|
|
146
|
+
const entitiesWithFk = entities.filter((entity) => this.getForeignKeyColumns(entity).length > 0);
|
|
147
|
+
const fkMetadataLines = entitiesWithFk.map((entity) => `${entity.table}: ${entity.id}ForeignKeys;`);
|
|
148
|
+
const contextExtendLines = [];
|
|
149
|
+
if (this.hasAuthConfig()) {
|
|
150
|
+
contextExtendLines.push(``, ` export interface ContextExtend {`, ` user: SonamuUser | null;`, ` }`);
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
label: `DatabaseSchema`,
|
|
154
|
+
lines: [
|
|
155
|
+
`declare module "sonamu" {`,
|
|
156
|
+
` export interface DatabaseSchemaExtend {`,
|
|
157
|
+
...entitySchemaLines,
|
|
158
|
+
...joinTables.map((joinTable) => {
|
|
159
|
+
const fromEntity = EntityManager.get(joinTable.fromEntityId);
|
|
160
|
+
const toEntity = EntityManager.get(joinTable.toEntityId);
|
|
161
|
+
const fromPkType = fromEntity.getPkType() === "integer" ? "number" : "string";
|
|
162
|
+
const toPkType = toEntity.getPkType() === "integer" ? "number" : "string";
|
|
163
|
+
return `${joinTable.table}: ManyToManyBaseSchema<"${joinTable.fromTableKey}", "${joinTable.toTableKey}", ${fromPkType}, ${toPkType}>;`;
|
|
164
|
+
}),
|
|
165
|
+
` }`,
|
|
166
|
+
``,
|
|
167
|
+
` export interface DatabaseForeignKeys {`,
|
|
168
|
+
...fkMetadataLines,
|
|
169
|
+
` }`,
|
|
170
|
+
...contextExtendLines,
|
|
171
|
+
`}`
|
|
172
|
+
],
|
|
173
|
+
importKeys: entities.map((entity) => `${entity.id}BaseSchema`)
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
getForeignKeyColumns(entity) {
|
|
177
|
+
return entity.props.filter((prop) => {
|
|
178
|
+
if (isBelongsToOneRelationProp(prop)) {
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
if (isOneToOneRelationProp(prop) && prop.hasJoinColumn) {
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
return false;
|
|
185
|
+
}).map((prop) => `${prop.name}_id`);
|
|
186
|
+
}
|
|
187
|
+
getForeignKeyTypeSourceCode(entities) {
|
|
188
|
+
if (entities.length === 0) {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
const entitiesWithFk = entities.filter((entity) => this.getForeignKeyColumns(entity).length > 0);
|
|
192
|
+
if (entitiesWithFk.length === 0) {
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
const fkTypeLines = entitiesWithFk.map((entity) => {
|
|
196
|
+
const fkColumns = this.getForeignKeyColumns(entity);
|
|
197
|
+
const fkTypeValue = fkColumns.map((col) => `"${col}"`).join(" | ");
|
|
198
|
+
return `export type ${entity.id}ForeignKeys = ${fkTypeValue};`;
|
|
199
|
+
});
|
|
200
|
+
return {
|
|
201
|
+
label: `ForeignKey Types`,
|
|
202
|
+
lines: fkTypeLines,
|
|
203
|
+
importKeys: []
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* sonamu.config.ts의 auth.user.additionalFields에서 SonamuUser 타입을 생성합니다.
|
|
208
|
+
* @returns SourceCode | null - auth 설정이 없으면 null 반환
|
|
209
|
+
*/
|
|
210
|
+
getAuthUserTypeSourceCode() {
|
|
211
|
+
const authConfig = Sonamu.config.server?.auth;
|
|
212
|
+
if (!authConfig) {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
const additionalFields = authConfig?.user?.additionalFields;
|
|
216
|
+
if (!additionalFields || Object.keys(additionalFields).length === 0) {
|
|
217
|
+
return {
|
|
218
|
+
label: "Auth User Type",
|
|
219
|
+
lines: ["export type SonamuUser = User;"],
|
|
220
|
+
importKeys: []
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
const importKeys = [];
|
|
224
|
+
const fieldLines = Object.entries(additionalFields).map(([key, value]) => {
|
|
225
|
+
const fieldConfig = value;
|
|
226
|
+
const isRequired = fieldConfig.required !== false;
|
|
227
|
+
let fieldType;
|
|
228
|
+
if (fieldConfig.sonamuType) {
|
|
229
|
+
fieldType = fieldConfig.sonamuType;
|
|
230
|
+
importKeys.push(fieldType);
|
|
231
|
+
} else {
|
|
232
|
+
fieldType = mapBetterAuthFieldType(fieldConfig.type);
|
|
233
|
+
}
|
|
234
|
+
return ` ${key}${isRequired ? "" : "?"}: ${fieldType};`;
|
|
235
|
+
});
|
|
236
|
+
return {
|
|
237
|
+
label: "Auth User Type",
|
|
238
|
+
lines: [
|
|
239
|
+
"export type SonamuUser = User & {",
|
|
240
|
+
...fieldLines,
|
|
241
|
+
"};"
|
|
242
|
+
],
|
|
243
|
+
importKeys
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* auth 설정이 있는지 확인합니다.
|
|
248
|
+
*/
|
|
249
|
+
hasAuthConfig() {
|
|
250
|
+
return !!Sonamu.config.server?.auth;
|
|
251
|
+
}
|
|
252
|
+
};
|
|
281
253
|
|
|
282
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkX3Nzby50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uLy4uL2FwaVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eVwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wLFxuICBpc01hbnlUb01hbnlSZWxhdGlvblByb3AsXG4gIGlzT25lVG9PbmVSZWxhdGlvblByb3AsXG59IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcbmltcG9ydCB0eXBlIHsgU291cmNlQ29kZSB9IGZyb20gXCIuL2dlbmVyYXRlZC50ZW1wbGF0ZVwiO1xuXG4vKipcbiAqIGJldHRlci1hdXRoIGFkZGl0aW9uYWxGaWVsZHPsnZggdHlwZSDqsJLsnYQgVHlwZVNjcmlwdCDtg4DsnoUg66y47J6Q7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gbWFwQmV0dGVyQXV0aEZpZWxkVHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICByZXR1cm4gXCJEYXRlXCI7XG4gICAgY2FzZSBcInN0cmluZ1tdXCI6XG4gICAgICByZXR1cm4gXCJzdHJpbmdbXVwiO1xuICAgIGNhc2UgXCJudW1iZXJbXVwiOlxuICAgICAgcmV0dXJuIFwibnVtYmVyW11cIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fZ2VuZXJhdGVkX3NzbyBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJnZW5lcmF0ZWRfc3NvXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aCgpIHtcbiAgICBjb25zdCB7IGRpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgc29uYW11LmdlbmVyYXRlZC5zc28udHNgLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgZW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICBjb25zdCBlbnRpdGllcyA9IGVudGl0eUlkcy5tYXAoKGlkKSA9PiBFbnRpdHlNYW5hZ2VyLmdldChpZCkpO1xuXG4gICAgLy8gU3Vic2V0UXVlcmllcyDsg53shLEg64yA7IOBOiDrtoDrqqgg7JeU7Yuw7Yuw6rCAIOyXhuqzoCDshJzruIzshYvsnbQg7KG07J6sXG4gICAgY29uc3QgdGFyZ2V0RW50aXRpZXMgPSBlbnRpdGllcy5maWx0ZXIoXG4gICAgICAoZW50aXR5KSA9PiBlbnRpdHkucGFyZW50SWQgPT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhlbnRpdHkuc3Vic2V0cykubGVuZ3RoID4gMCxcbiAgICApO1xuXG4gICAgLy8gU3Vic2V0UXVlcmllcyDsg53shLFcbiAgICBjb25zdCBzb3VyY2VDb2RlczogU291cmNlQ29kZVtdID0gdGFyZ2V0RW50aXRpZXMuZmxhdE1hcCgoZW50aXR5KSA9PiB7XG4gICAgICBjb25zdCBzdWJzZXRLZXlzID0gT2JqZWN0LmtleXMoZW50aXR5LnN1YnNldHMpO1xuXG4gICAgICBjb25zdCBzdWJzZXRLZXlUeXBlTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5YDtcbiAgICAgIGNvbnN0IGVudGl0eUNhbWVsTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoZW50aXR5LmlkLCB0cnVlKTtcblxuICAgICAgLy8gUHVyaSDquLDrsJggU3Vic2V0UXVlcnlcbiAgICAgIGNvbnN0IHB1cmlTdWJzZXRRdWVyeTogU291cmNlQ29kZSA9IHtcbiAgICAgICAgbGFiZWw6IGBTdWJzZXRRdWVyeTogJHtlbnRpdHkuaWR9YCxcbiAgICAgICAgbGluZXM6IFtcbiAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7ZW50aXR5Q2FtZWxOYW1lfVN1YnNldFF1ZXJpZXMgPSB7YCxcbiAgICAgICAgICAuLi5zdWJzZXRLZXlzLm1hcChcbiAgICAgICAgICAgIChzdWJzZXRLZXkpID0+IGAke3N1YnNldEtleX06IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4ge1xuICAgICAgICAgICAgJHtlbnRpdHkuZ2V0UHVyaVN1YnNldFF1ZXJ5KHN1YnNldEtleSl9O1xuICAgICAgICAgIH0sYCxcbiAgICAgICAgICApLFxuICAgICAgICAgIGB9O2AsXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgXSxcbiAgICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICB9O1xuXG4gICAgICAvLyBQdXJpIOq4sOuwmCBTdWJzZXRMb2FkZXJzUXVlcnlcbiAgICAgIGNvbnN0IHB1cmlMb2FkZXJRdWVyeTogU291cmNlQ29kZSA9IHtcbiAgICAgICAgbGFiZWw6IGBMb2FkZXJRdWVyeTogJHtlbnRpdHkuaWR9YCxcbiAgICAgICAgbGluZXM6IFtcbiAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7ZW50aXR5Q2FtZWxOYW1lfUxvYWRlclF1ZXJpZXMgPSB7YCxcbiAgICAgICAgICAuLi5zdWJzZXRLZXlzLm1hcCgoc3Vic2V0S2V5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYCR7c3Vic2V0S2V5fTogJHtlbnRpdHkuZ2V0UHVyaUxvYWRlclF1ZXJ5KHN1YnNldEtleSl9LGA7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgYH0gYXMgY29uc3Qgc2F0aXNmaWVzIFB1cmlMb2FkZXJRdWVyaWVzPCR7c3Vic2V0S2V5VHlwZU5hbWV9PjtgLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgIF0sXG4gICAgICAgIGltcG9ydEtleXM6IFtzdWJzZXRLZXlUeXBlTmFtZV0sXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gW3B1cmlTdWJzZXRRdWVyeSwgcHVyaUxvYWRlclF1ZXJ5XTtcbiAgICB9KTtcblxuICAgIC8vIEZvcmVpZ25LZXkg7YOA7J6FIOyDneyEsVxuICAgIGNvbnN0IGZrVHlwZVNvdXJjZUNvZGUgPSB0aGlzLmdldEZvcmVpZ25LZXlUeXBlU291cmNlQ29kZShlbnRpdGllcyk7XG4gICAgaWYgKGZrVHlwZVNvdXJjZUNvZGUpIHtcbiAgICAgIHNvdXJjZUNvZGVzLnB1c2goZmtUeXBlU291cmNlQ29kZSk7XG4gICAgfVxuXG4gICAgLy8gRGF0YWJhc2VTY2hlbWEg7IOd7ISxXG4gICAgY29uc3QgZGJTY2hlbWFTb3VyY2VDb2RlID0gdGhpcy5nZXREYXRhYmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXRpZXMpO1xuICAgIGlmIChkYlNjaGVtYVNvdXJjZUNvZGUpIHtcbiAgICAgIHNvdXJjZUNvZGVzLnB1c2goZGJTY2hlbWFTb3VyY2VDb2RlKTtcbiAgICB9XG5cbiAgICAvLyBBdXRoIFVzZXIg7YOA7J6FIOyDneyEsVxuICAgIGNvbnN0IGF1dGhVc2VyVHlwZVNvdXJjZUNvZGUgPSB0aGlzLmdldEF1dGhVc2VyVHlwZVNvdXJjZUNvZGUoKTtcbiAgICBpZiAoYXV0aFVzZXJUeXBlU291cmNlQ29kZSkge1xuICAgICAgc291cmNlQ29kZXMucHVzaChhdXRoVXNlclR5cGVTb3VyY2VDb2RlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VDb2RlID0gc291cmNlQ29kZXMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgdHMpID0+IHtcbiAgICAgICAgaWYgKHRzID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBhc3NlcnQocmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lczogWy4uLnJlc3VsdC5saW5lcywgYC8vICR7dHMubGFiZWx9YCwgLi4udHMubGluZXMsIFwiXCJdLFxuICAgICAgICAgIGltcG9ydEtleXM6IHVuaXF1ZShbLi4ucmVzdWx0LmltcG9ydEtleXMsIC4uLnRzLmltcG9ydEtleXNdKSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxpbmVzOiBbXSxcbiAgICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICB9IGFzIE9taXQ8U291cmNlQ29kZSwgXCJsYWJlbFwiPixcbiAgICApO1xuXG4gICAgY29uc3QgYm9keSA9IHNvdXJjZUNvZGUubGluZXMuam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBpc1VzaW5nTWFueVRvTWFueUJhc2VTY2hlbWEgPSBib2R5LmluY2x1ZGVzKFwiTWFueVRvTWFueUJhc2VTY2hlbWFcIik7XG5cbiAgICBjb25zdCBzb25hbXVJbXBvcnRzID0gW1xuICAgICAgXCJQdXJpV3JhcHBlclwiLFxuICAgICAgXCJEYXRhYmFzZVNjaGVtYUV4dGVuZFwiLFxuICAgICAgXCJQdXJpTG9hZGVyUXVlcmllc1wiLFxuICAgICAgaXNVc2luZ01hbnlUb01hbnlCYXNlU2NoZW1hID8gXCJNYW55VG9NYW55QmFzZVNjaGVtYVwiIDogXCJcIixcbiAgICBdXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAuam9pbihcIiwgXCIpO1xuXG4gICAgLy8gY3VzdG9tSGVhZGVycyDqtazshLFcbiAgICBjb25zdCBjdXN0b21IZWFkZXJzID0gW1xuICAgICAgXCIvKipcIixcbiAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgIFwiICovXCIsXG4gICAgICBgaW1wb3J0IHsgJHtzb25hbXVJbXBvcnRzfSB9IGZyb20gXCJzb25hbXVcIjtgLFxuICAgIF07XG4gICAgaWYgKHRoaXMuaGFzQXV0aENvbmZpZygpKSB7XG4gICAgICBjdXN0b21IZWFkZXJzLnB1c2goYGltcG9ydCB0eXBlIHsgVXNlciB9IGZyb20gXCJiZXR0ZXItYXV0aFwiO2ApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHk6IHNvdXJjZUNvZGUubGluZXMuam9pbihcIlxcblwiKSxcbiAgICAgIGltcG9ydEtleXM6IHNvdXJjZUNvZGUuaW1wb3J0S2V5cyxcbiAgICAgIGN1c3RvbUhlYWRlcnMsXG4gICAgfTtcbiAgfVxuXG4gIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gcHJpdmF0ZSBIZWxwZXIgTWV0aG9kc1xuICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHByaXZhdGUgZ2V0RGF0YWJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0aWVzOiBFbnRpdHlbXSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoZW50aXRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBEYXRhYmFzZVNjaGVtYUV4dGVuZCAtIO2FjOydtOu4lCDsiqTtgqTrp4gg7YOA7J6FIOygleydmFxuICAgIGNvbnN0IGVudGl0eVNjaGVtYUxpbmVzID0gZW50aXRpZXMubWFwKChlbnRpdHkpID0+IGAke2VudGl0eS50YWJsZX06ICR7ZW50aXR5LmlkfUJhc2VTY2hlbWE7YCk7XG5cbiAgICBjb25zdCBqb2luVGFibGVzID0gdW5pcXVlKFxuICAgICAgZW50aXRpZXMuZmxhdE1hcCgoZW50aXR5KSA9PlxuICAgICAgICBlbnRpdHkucHJvcHMuZmlsdGVyKGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcCkubWFwKChwcm9wKSA9PiB7XG4gICAgICAgICAgY29uc3QgZnJvbVRhYmxlS2V5ID0gaW5mbGVjdGlvbi5zaW5ndWxhcml6ZShlbnRpdHkudGFibGUpO1xuICAgICAgICAgIGNvbnN0IHRvRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocHJvcC53aXRoKTtcbiAgICAgICAgICBjb25zdCB0b1RhYmxlS2V5ID0gaW5mbGVjdGlvbi5zaW5ndWxhcml6ZSh0b0VudGl0eS50YWJsZSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRhYmxlOiBwcm9wLmpvaW5UYWJsZSxcbiAgICAgICAgICAgIGZyb21UYWJsZUtleSxcbiAgICAgICAgICAgIHRvVGFibGVLZXksXG4gICAgICAgICAgICBmcm9tRW50aXR5SWQ6IGVudGl0eS5pZCxcbiAgICAgICAgICAgIHRvRW50aXR5SWQ6IHRvRW50aXR5LmlkLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICAgIChqb2luVGFibGUpID0+IGpvaW5UYWJsZS50YWJsZSxcbiAgICApO1xuXG4gICAgLy8gRGF0YWJhc2VGb3JlaWduS2V5cyAtIEZLIOy7rOufvOydhCDqsIDsp4Qg7YWM7J2067iU66eMIOygleydmFxuICAgIGNvbnN0IGVudGl0aWVzV2l0aEZrID0gZW50aXRpZXMuZmlsdGVyKFxuICAgICAgKGVudGl0eSkgPT4gdGhpcy5nZXRGb3JlaWduS2V5Q29sdW1ucyhlbnRpdHkpLmxlbmd0aCA+IDAsXG4gICAgKTtcbiAgICBjb25zdCBma01ldGFkYXRhTGluZXMgPSBlbnRpdGllc1dpdGhGay5tYXAoXG4gICAgICAoZW50aXR5KSA9PiBgJHtlbnRpdHkudGFibGV9OiAke2VudGl0eS5pZH1Gb3JlaWduS2V5cztgLFxuICAgICk7XG5cbiAgICAvLyBDb250ZXh0RXh0ZW5kIC0gYXV0aCDshKTsoJXsnbQg7J6I7J2EIOuVjOunjCB1c2VyIO2DgOyehSDstpTqsIBcbiAgICBjb25zdCBjb250ZXh0RXh0ZW5kTGluZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMuaGFzQXV0aENvbmZpZygpKSB7XG4gICAgICBjb250ZXh0RXh0ZW5kTGluZXMucHVzaChcbiAgICAgICAgYGAsXG4gICAgICAgIGAgIGV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dEV4dGVuZCB7YCxcbiAgICAgICAgYCAgICB1c2VyOiBTb25hbXVVc2VyIHwgbnVsbDtgLFxuICAgICAgICBgICB9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgRGF0YWJhc2VTY2hlbWFgLFxuICAgICAgbGluZXM6IFtcbiAgICAgICAgYGRlY2xhcmUgbW9kdWxlIFwic29uYW11XCIge2AsXG4gICAgICAgIGAgIGV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VTY2hlbWFFeHRlbmQge2AsXG4gICAgICAgIC4uLmVudGl0eVNjaGVtYUxpbmVzLFxuICAgICAgICAuLi5qb2luVGFibGVzLm1hcCgoam9pblRhYmxlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZnJvbUVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGpvaW5UYWJsZS5mcm9tRW50aXR5SWQpO1xuICAgICAgICAgIGNvbnN0IHRvRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoam9pblRhYmxlLnRvRW50aXR5SWQpO1xuICAgICAgICAgIGNvbnN0IGZyb21Qa1R5cGUgPSBmcm9tRW50aXR5LmdldFBrVHlwZSgpID09PSBcImludGVnZXJcIiA/IFwibnVtYmVyXCIgOiBcInN0cmluZ1wiO1xuICAgICAgICAgIGNvbnN0IHRvUGtUeXBlID0gdG9FbnRpdHkuZ2V0UGtUeXBlKCkgPT09IFwiaW50ZWdlclwiID8gXCJudW1iZXJcIiA6IFwic3RyaW5nXCI7XG5cbiAgICAgICAgICByZXR1cm4gYCR7am9pblRhYmxlLnRhYmxlfTogTWFueVRvTWFueUJhc2VTY2hlbWE8XCIke2pvaW5UYWJsZS5mcm9tVGFibGVLZXl9XCIsIFwiJHtqb2luVGFibGUudG9UYWJsZUtleX1cIiwgJHtmcm9tUGtUeXBlfSwgJHt0b1BrVHlwZX0+O2A7XG4gICAgICAgIH0pLFxuICAgICAgICBgICB9YCxcbiAgICAgICAgYGAsXG4gICAgICAgIGAgIGV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VGb3JlaWduS2V5cyB7YCxcbiAgICAgICAgLi4uZmtNZXRhZGF0YUxpbmVzLFxuICAgICAgICBgICB9YCxcbiAgICAgICAgLi4uY29udGV4dEV4dGVuZExpbmVzLFxuICAgICAgICBgfWAsXG4gICAgICBdLFxuICAgICAgaW1wb3J0S2V5czogZW50aXRpZXMubWFwKChlbnRpdHkpID0+IGAke2VudGl0eS5pZH1CYXNlU2NoZW1hYCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEZLIOq0gOqzhOulvCDsu6zrn7zrqoXsnLzroZwg67OA7ZmYICjsmIg6IGNvbXBhbnkg4oaSIGNvbXBhbnlfaWQpXG4gIHByaXZhdGUgZ2V0Rm9yZWlnbktleUNvbHVtbnMoZW50aXR5OiBFbnRpdHkpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcigocHJvcCkgPT4ge1xuICAgICAgICBpZiAoaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLm1hcCgocHJvcCkgPT4gYCR7cHJvcC5uYW1lfV9pZGApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGb3JlaWduS2V5VHlwZVNvdXJjZUNvZGUoZW50aXRpZXM6IEVudGl0eVtdKTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIGlmIChlbnRpdGllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEZL6rCAIOyeiOuKlCDsl5Tti7Dti7Drp4wg7YOA7J6FIOyDneyEsVxuICAgIGNvbnN0IGVudGl0aWVzV2l0aEZrID0gZW50aXRpZXMuZmlsdGVyKFxuICAgICAgKGVudGl0eSkgPT4gdGhpcy5nZXRGb3JlaWduS2V5Q29sdW1ucyhlbnRpdHkpLmxlbmd0aCA+IDAsXG4gICAgKTtcblxuICAgIGlmIChlbnRpdGllc1dpdGhGay5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGZrVHlwZUxpbmVzID0gZW50aXRpZXNXaXRoRmsubWFwKChlbnRpdHkpID0+IHtcbiAgICAgIGNvbnN0IGZrQ29sdW1ucyA9IHRoaXMuZ2V0Rm9yZWlnbktleUNvbHVtbnMoZW50aXR5KTtcbiAgICAgIGNvbnN0IGZrVHlwZVZhbHVlID0gZmtDb2x1bW5zLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApLmpvaW4oXCIgfCBcIik7XG5cbiAgICAgIHJldHVybiBgZXhwb3J0IHR5cGUgJHtlbnRpdHkuaWR9Rm9yZWlnbktleXMgPSAke2ZrVHlwZVZhbHVlfTtgO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgRm9yZWlnbktleSBUeXBlc2AsXG4gICAgICBsaW5lczogZmtUeXBlTGluZXMsXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIHNvbmFtdS5jb25maWcudHPsnZggYXV0aC51c2VyLmFkZGl0aW9uYWxGaWVsZHPsl5DshJwgU29uYW11VXNlciDtg4DsnoXsnYQg7IOd7ISx7ZWp64uI64ukLlxuICAgKiBAcmV0dXJucyBTb3VyY2VDb2RlIHwgbnVsbCAtIGF1dGgg7ISk7KCV7J20IOyXhuycvOuptCBudWxsIOuwmO2ZmFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBdXRoVXNlclR5cGVTb3VyY2VDb2RlKCk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBjb25zdCBhdXRoQ29uZmlnID0gU29uYW11LmNvbmZpZy5zZXJ2ZXI/LmF1dGg7XG4gICAgaWYgKCFhdXRoQ29uZmlnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGFkZGl0aW9uYWxGaWVsZHMg7YOA7J6F7J20IOuPmeyggeyehFxuICAgIGNvbnN0IGFkZGl0aW9uYWxGaWVsZHMgPSAoYXV0aENvbmZpZyBhcyBhbnkpPy51c2VyPy5hZGRpdGlvbmFsRmllbGRzO1xuICAgIGlmICghYWRkaXRpb25hbEZpZWxkcyB8fCBPYmplY3Qua2V5cyhhZGRpdGlvbmFsRmllbGRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIGFkZGl0aW9uYWxGaWVsZHPqsIAg7JeG7Jy866m0IOq4sOuzuCBVc2VyIO2DgOyeheunjCDsgqzsmqlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiBcIkF1dGggVXNlciBUeXBlXCIsXG4gICAgICAgIGxpbmVzOiBbXCJleHBvcnQgdHlwZSBTb25hbXVVc2VyID0gVXNlcjtcIl0sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gYWRkaXRpb25hbEZpZWxkc+ulvCBUeXBlU2NyaXB0IO2DgOyeheycvOuhnCDrs4DtmZhcbiAgICBjb25zdCBmaWVsZExpbmVzID0gT2JqZWN0LmVudHJpZXMoYWRkaXRpb25hbEZpZWxkcykubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogYmV0dGVyLWF1dGggYWRkaXRpb25hbEZpZWxkcyDqtazsobBcbiAgICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdmFsdWUgYXMgYW55O1xuICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IGZpZWxkQ29uZmlnLnJlcXVpcmVkICE9PSBmYWxzZTtcblxuICAgICAgbGV0IGZpZWxkVHlwZTogc3RyaW5nO1xuXG4gICAgICAvLyBzb25hbXVUeXBl7J20IOyeiOycvOuptCBkZXNjcmlwdGlvbuydhCDtg4DsnoXrqoXsnLzroZwg7IKs7JqpXG4gICAgICBpZiAoZmllbGRDb25maWcuc29uYW11VHlwZSkge1xuICAgICAgICBmaWVsZFR5cGUgPSBmaWVsZENvbmZpZy5zb25hbXVUeXBlO1xuICAgICAgICBpbXBvcnRLZXlzLnB1c2goZmllbGRUeXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpZWxkVHlwZSA9IG1hcEJldHRlckF1dGhGaWVsZFR5cGUoZmllbGRDb25maWcudHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgICAke2tleX0ke2lzUmVxdWlyZWQgPyBcIlwiIDogXCI/XCJ9OiAke2ZpZWxkVHlwZX07YDtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogXCJBdXRoIFVzZXIgVHlwZVwiLFxuICAgICAgbGluZXM6IFtcImV4cG9ydCB0eXBlIFNvbmFtdVVzZXIgPSBVc2VyICYge1wiLCAuLi5maWVsZExpbmVzLCBcIn07XCJdLFxuICAgICAgaW1wb3J0S2V5cyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIGF1dGgg7ISk7KCV7J20IOyeiOuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGhhc0F1dGhDb25maWcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhU29uYW11LmNvbmZpZy5zZXJ2ZXI/LmF1dGg7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJhc3NlcnQiLCJpbmZsZWN0aW9uIiwidW5pcXVlIiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsImlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wIiwiaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wIiwiaXNPbmVUb09uZVJlbGF0aW9uUHJvcCIsIlRlbXBsYXRlIiwibWFwQmV0dGVyQXV0aEZpZWxkVHlwZSIsInR5cGUiLCJUZW1wbGF0ZV9fZ2VuZXJhdGVkX3NzbyIsImdldFRhcmdldEFuZFBhdGgiLCJkaXIiLCJjb25maWciLCJhcGkiLCJ0YXJnZXQiLCJwYXRoIiwicmVuZGVyIiwiZW50aXR5SWRzIiwiZ2V0QWxsSWRzIiwiZW50aXRpZXMiLCJtYXAiLCJpZCIsImdldCIsInRhcmdldEVudGl0aWVzIiwiZmlsdGVyIiwiZW50aXR5IiwicGFyZW50SWQiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJrZXlzIiwic3Vic2V0cyIsImxlbmd0aCIsInNvdXJjZUNvZGVzIiwiZmxhdE1hcCIsInN1YnNldEtleXMiLCJzdWJzZXRLZXlUeXBlTmFtZSIsIm5hbWVzIiwibW9kdWxlIiwiZW50aXR5Q2FtZWxOYW1lIiwiY2FtZWxpemUiLCJwdXJpU3Vic2V0UXVlcnkiLCJsYWJlbCIsImxpbmVzIiwic3Vic2V0S2V5IiwiZ2V0UHVyaVN1YnNldFF1ZXJ5IiwiaW1wb3J0S2V5cyIsInB1cmlMb2FkZXJRdWVyeSIsImdldFB1cmlMb2FkZXJRdWVyeSIsImZrVHlwZVNvdXJjZUNvZGUiLCJnZXRGb3JlaWduS2V5VHlwZVNvdXJjZUNvZGUiLCJwdXNoIiwiZGJTY2hlbWFTb3VyY2VDb2RlIiwiZ2V0RGF0YWJhc2VTY2hlbWFTb3VyY2VDb2RlIiwiYXV0aFVzZXJUeXBlU291cmNlQ29kZSIsImdldEF1dGhVc2VyVHlwZVNvdXJjZUNvZGUiLCJzb3VyY2VDb2RlIiwicmVkdWNlIiwicmVzdWx0IiwidHMiLCJib2R5Iiwiam9pbiIsImlzVXNpbmdNYW55VG9NYW55QmFzZVNjaGVtYSIsImluY2x1ZGVzIiwic29uYW11SW1wb3J0cyIsIkJvb2xlYW4iLCJjdXN0b21IZWFkZXJzIiwiaGFzQXV0aENvbmZpZyIsImVudGl0eVNjaGVtYUxpbmVzIiwidGFibGUiLCJqb2luVGFibGVzIiwicHJvcHMiLCJwcm9wIiwiZnJvbVRhYmxlS2V5Iiwic2luZ3VsYXJpemUiLCJ0b0VudGl0eSIsIndpdGgiLCJ0b1RhYmxlS2V5Iiwiam9pblRhYmxlIiwiZnJvbUVudGl0eUlkIiwidG9FbnRpdHlJZCIsImVudGl0aWVzV2l0aEZrIiwiZ2V0Rm9yZWlnbktleUNvbHVtbnMiLCJma01ldGFkYXRhTGluZXMiLCJjb250ZXh0RXh0ZW5kTGluZXMiLCJmcm9tRW50aXR5IiwiZnJvbVBrVHlwZSIsImdldFBrVHlwZSIsInRvUGtUeXBlIiwiaGFzSm9pbkNvbHVtbiIsIm5hbWUiLCJma1R5cGVMaW5lcyIsImZrQ29sdW1ucyIsImZrVHlwZVZhbHVlIiwiY29sIiwiYXV0aENvbmZpZyIsInNlcnZlciIsImF1dGgiLCJhZGRpdGlvbmFsRmllbGRzIiwidXNlciIsImZpZWxkTGluZXMiLCJlbnRyaWVzIiwia2V5IiwidmFsdWUiLCJmaWVsZENvbmZpZyIsImlzUmVxdWlyZWQiLCJyZXF1aXJlZCIsImZpZWxkVHlwZSIsInNvbmFtdVR5cGUiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVksU0FBUztBQUM1QixPQUFPQyxnQkFBZ0IsYUFBYTtBQUNwQyxTQUFTQyxNQUFNLFFBQVEsVUFBVTtBQUNqQyxTQUFTQyxNQUFNLFFBQVEscUJBQVk7QUFFbkMsU0FBU0MsYUFBYSxRQUFRLGlDQUE4QjtBQUM1RCxTQUNFQywwQkFBMEIsRUFDMUJDLHdCQUF3QixFQUN4QkMsc0JBQXNCLFFBQ2pCLHVCQUFvQjtBQUMzQixTQUFTQyxRQUFRLFFBQVEsaUJBQWM7QUFHdkM7O0NBRUMsR0FDRCxTQUFTQyx1QkFBdUJDLElBQVk7SUFDMUMsT0FBUUE7UUFDTixLQUFLO1lBQ0gsT0FBTztRQUNULEtBQUs7WUFDSCxPQUFPO1FBQ1QsS0FBSztZQUNILE9BQU87UUFDVCxLQUFLO1lBQ0gsT0FBTztRQUNULEtBQUs7WUFDSCxPQUFPO1FBQ1QsS0FBSztZQUNILE9BQU87UUFDVDtZQUNFLE9BQU87SUFDWDtBQUNGO0FBRUEsT0FBTyxNQUFNQyxnQ0FBZ0NIO0lBQzNDLGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBSSxtQkFBbUI7UUFDakIsTUFBTSxFQUFFQyxHQUFHLEVBQUUsR0FBR1YsT0FBT1csTUFBTSxDQUFDQyxHQUFHO1FBRWpDLE9BQU87WUFDTEMsUUFBUSxHQUFHSCxJQUFJLGdCQUFnQixDQUFDO1lBQ2hDSSxNQUFNLENBQUMsdUJBQXVCLENBQUM7UUFDakM7SUFDRjtJQUVBQyxTQUFTO1FBQ1AsTUFBTUMsWUFBWWYsY0FBY2dCLFNBQVM7UUFDekMsTUFBTUMsV0FBV0YsVUFBVUcsR0FBRyxDQUFDLENBQUNDLEtBQU9uQixjQUFjb0IsR0FBRyxDQUFDRDtRQUV6RCwwQ0FBMEM7UUFDMUMsTUFBTUUsaUJBQWlCSixTQUFTSyxNQUFNLENBQ3BDLENBQUNDLFNBQVdBLE9BQU9DLFFBQVEsS0FBS0MsYUFBYUMsT0FBT0MsSUFBSSxDQUFDSixPQUFPSyxPQUFPLEVBQUVDLE1BQU0sR0FBRztRQUdwRixtQkFBbUI7UUFDbkIsTUFBTUMsY0FBNEJULGVBQWVVLE9BQU8sQ0FBQyxDQUFDUjtZQUN4RCxNQUFNUyxhQUFhTixPQUFPQyxJQUFJLENBQUNKLE9BQU9LLE9BQU87WUFFN0MsTUFBTUssb0JBQW9CLEdBQUdWLE9BQU9XLEtBQUssQ0FBQ0MsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUMzRCxNQUFNQyxrQkFBa0J2QyxXQUFXd0MsUUFBUSxDQUFDZCxPQUFPSixFQUFFLEVBQUU7WUFFdkQsc0JBQXNCO1lBQ3RCLE1BQU1tQixrQkFBOEI7Z0JBQ2xDQyxPQUFPLENBQUMsYUFBYSxFQUFFaEIsT0FBT0osRUFBRSxFQUFFO2dCQUNsQ3FCLE9BQU87b0JBQ0wsQ0FBQyxhQUFhLEVBQUVKLGdCQUFnQixpQkFBaUIsQ0FBQzt1QkFDL0NKLFdBQVdkLEdBQUcsQ0FDZixDQUFDdUIsWUFBYyxHQUFHQSxVQUFVO1lBQzVCLEVBQUVsQixPQUFPbUIsa0JBQWtCLENBQUNELFdBQVc7WUFDdkMsQ0FBQztvQkFFSCxDQUFDLEVBQUUsQ0FBQztvQkFDSjtpQkFDRDtnQkFDREUsWUFBWSxFQUFFO1lBQ2hCO1lBRUEsNkJBQTZCO1lBQzdCLE1BQU1DLGtCQUE4QjtnQkFDbENMLE9BQU8sQ0FBQyxhQUFhLEVBQUVoQixPQUFPSixFQUFFLEVBQUU7Z0JBQ2xDcUIsT0FBTztvQkFDTCxDQUFDLGFBQWEsRUFBRUosZ0JBQWdCLGlCQUFpQixDQUFDO3VCQUMvQ0osV0FBV2QsR0FBRyxDQUFDLENBQUN1Qjt3QkFDakIsT0FBTyxHQUFHQSxVQUFVLEVBQUUsRUFBRWxCLE9BQU9zQixrQkFBa0IsQ0FBQ0osV0FBVyxDQUFDLENBQUM7b0JBQ2pFO29CQUNBLENBQUMsdUNBQXVDLEVBQUVSLGtCQUFrQixFQUFFLENBQUM7b0JBQy9EO2lCQUNEO2dCQUNEVSxZQUFZO29CQUFDVjtpQkFBa0I7WUFDakM7WUFFQSxPQUFPO2dCQUFDSztnQkFBaUJNO2FBQWdCO1FBQzNDO1FBRUEsbUJBQW1CO1FBQ25CLE1BQU1FLG1CQUFtQixJQUFJLENBQUNDLDJCQUEyQixDQUFDOUI7UUFDMUQsSUFBSTZCLGtCQUFrQjtZQUNwQmhCLFlBQVlrQixJQUFJLENBQUNGO1FBQ25CO1FBRUEsb0JBQW9CO1FBQ3BCLE1BQU1HLHFCQUFxQixJQUFJLENBQUNDLDJCQUEyQixDQUFDakM7UUFDNUQsSUFBSWdDLG9CQUFvQjtZQUN0Qm5CLFlBQVlrQixJQUFJLENBQUNDO1FBQ25CO1FBRUEsa0JBQWtCO1FBQ2xCLE1BQU1FLHlCQUF5QixJQUFJLENBQUNDLHlCQUF5QjtRQUM3RCxJQUFJRCx3QkFBd0I7WUFDMUJyQixZQUFZa0IsSUFBSSxDQUFDRztRQUNuQjtRQUVBLE1BQU1FLGFBQWF2QixZQUFZd0IsTUFBTSxDQUNuQyxDQUFDQyxRQUFRQztZQUNQLElBQUlBLE9BQU8sTUFBTTtnQkFDZixPQUFPRDtZQUNUO1lBQ0EzRCxPQUFPMkQ7WUFDUCxPQUFPO2dCQUNMZixPQUFPO3VCQUFJZSxPQUFPZixLQUFLO29CQUFFLENBQUMsR0FBRyxFQUFFZ0IsR0FBR2pCLEtBQUssRUFBRTt1QkFBS2lCLEdBQUdoQixLQUFLO29CQUFFO2lCQUFHO2dCQUMzREcsWUFBWTdDLE9BQU87dUJBQUl5RCxPQUFPWixVQUFVO3VCQUFLYSxHQUFHYixVQUFVO2lCQUFDO1lBQzdEO1FBQ0YsR0FDQTtZQUNFSCxPQUFPLEVBQUU7WUFDVEcsWUFBWSxFQUFFO1FBQ2hCO1FBR0YsTUFBTWMsT0FBT0osV0FBV2IsS0FBSyxDQUFDa0IsSUFBSSxDQUFDO1FBQ25DLE1BQU1DLDhCQUE4QkYsS0FBS0csUUFBUSxDQUFDO1FBRWxELE1BQU1DLGdCQUFnQjtZQUNwQjtZQUNBO1lBQ0E7WUFDQUYsOEJBQThCLHlCQUF5QjtTQUN4RCxDQUNFckMsTUFBTSxDQUFDd0MsU0FDUEosSUFBSSxDQUFDO1FBRVIsbUJBQW1CO1FBQ25CLE1BQU1LLGdCQUFnQjtZQUNwQjtZQUNBO1lBQ0E7WUFDQTtZQUNBLENBQUMsU0FBUyxFQUFFRixjQUFjLGlCQUFpQixDQUFDO1NBQzdDO1FBQ0QsSUFBSSxJQUFJLENBQUNHLGFBQWEsSUFBSTtZQUN4QkQsY0FBY2YsSUFBSSxDQUFDLENBQUMsd0NBQXdDLENBQUM7UUFDL0Q7UUFFQSxPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUN4QyxnQkFBZ0IsRUFBRTtZQUMxQmlELE1BQU1KLFdBQVdiLEtBQUssQ0FBQ2tCLElBQUksQ0FBQztZQUM1QmYsWUFBWVUsV0FBV1YsVUFBVTtZQUNqQ29CO1FBQ0Y7SUFDRjtJQUVBLGlEQUFpRDtJQUNqRCx5QkFBeUI7SUFDekIsaURBQWlEO0lBQ3pDYiw0QkFBNEJqQyxRQUFrQixFQUFxQjtRQUN6RSxJQUFJQSxTQUFTWSxNQUFNLEtBQUssR0FBRztZQUN6QixPQUFPO1FBQ1Q7UUFFQSx1Q0FBdUM7UUFDdkMsTUFBTW9DLG9CQUFvQmhELFNBQVNDLEdBQUcsQ0FBQyxDQUFDSyxTQUFXLEdBQUdBLE9BQU8yQyxLQUFLLENBQUMsRUFBRSxFQUFFM0MsT0FBT0osRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUU3RixNQUFNZ0QsYUFBYXJFLE9BQ2pCbUIsU0FBU2MsT0FBTyxDQUFDLENBQUNSLFNBQ2hCQSxPQUFPNkMsS0FBSyxDQUFDOUMsTUFBTSxDQUFDcEIsMEJBQTBCZ0IsR0FBRyxDQUFDLENBQUNtRDtnQkFDakQsTUFBTUMsZUFBZXpFLFdBQVcwRSxXQUFXLENBQUNoRCxPQUFPMkMsS0FBSztnQkFDeEQsTUFBTU0sV0FBV3hFLGNBQWNvQixHQUFHLENBQUNpRCxLQUFLSSxJQUFJO2dCQUM1QyxNQUFNQyxhQUFhN0UsV0FBVzBFLFdBQVcsQ0FBQ0MsU0FBU04sS0FBSztnQkFDeEQsT0FBTztvQkFDTEEsT0FBT0csS0FBS00sU0FBUztvQkFDckJMO29CQUNBSTtvQkFDQUUsY0FBY3JELE9BQU9KLEVBQUU7b0JBQ3ZCMEQsWUFBWUwsU0FBU3JELEVBQUU7Z0JBQ3pCO1lBQ0YsS0FFRixDQUFDd0QsWUFBY0EsVUFBVVQsS0FBSztRQUdoQywwQ0FBMEM7UUFDMUMsTUFBTVksaUJBQWlCN0QsU0FBU0ssTUFBTSxDQUNwQyxDQUFDQyxTQUFXLElBQUksQ0FBQ3dELG9CQUFvQixDQUFDeEQsUUFBUU0sTUFBTSxHQUFHO1FBRXpELE1BQU1tRCxrQkFBa0JGLGVBQWU1RCxHQUFHLENBQ3hDLENBQUNLLFNBQVcsR0FBR0EsT0FBTzJDLEtBQUssQ0FBQyxFQUFFLEVBQUUzQyxPQUFPSixFQUFFLENBQUMsWUFBWSxDQUFDO1FBR3pELDRDQUE0QztRQUM1QyxNQUFNOEQscUJBQStCLEVBQUU7UUFDdkMsSUFBSSxJQUFJLENBQUNqQixhQUFhLElBQUk7WUFDeEJpQixtQkFBbUJqQyxJQUFJLENBQ3JCLEVBQUUsRUFDRixDQUFDLGtDQUFrQyxDQUFDLEVBQ3BDLENBQUMsNEJBQTRCLENBQUMsRUFDOUIsQ0FBQyxHQUFHLENBQUM7UUFFVDtRQUVBLE9BQU87WUFDTFQsT0FBTyxDQUFDLGNBQWMsQ0FBQztZQUN2QkMsT0FBTztnQkFDTCxDQUFDLHlCQUF5QixDQUFDO2dCQUMzQixDQUFDLHlDQUF5QyxDQUFDO21CQUN4Q3lCO21CQUNBRSxXQUFXakQsR0FBRyxDQUFDLENBQUN5RDtvQkFDakIsTUFBTU8sYUFBYWxGLGNBQWNvQixHQUFHLENBQUN1RCxVQUFVQyxZQUFZO29CQUMzRCxNQUFNSixXQUFXeEUsY0FBY29CLEdBQUcsQ0FBQ3VELFVBQVVFLFVBQVU7b0JBQ3ZELE1BQU1NLGFBQWFELFdBQVdFLFNBQVMsT0FBTyxZQUFZLFdBQVc7b0JBQ3JFLE1BQU1DLFdBQVdiLFNBQVNZLFNBQVMsT0FBTyxZQUFZLFdBQVc7b0JBRWpFLE9BQU8sR0FBR1QsVUFBVVQsS0FBSyxDQUFDLHdCQUF3QixFQUFFUyxVQUFVTCxZQUFZLENBQUMsSUFBSSxFQUFFSyxVQUFVRCxVQUFVLENBQUMsR0FBRyxFQUFFUyxXQUFXLEVBQUUsRUFBRUUsU0FBUyxFQUFFLENBQUM7Z0JBQ3hJO2dCQUNBLENBQUMsR0FBRyxDQUFDO2dCQUNMLEVBQUU7Z0JBQ0YsQ0FBQyx3Q0FBd0MsQ0FBQzttQkFDdkNMO2dCQUNILENBQUMsR0FBRyxDQUFDO21CQUNGQztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBQ0R0QyxZQUFZMUIsU0FBU0MsR0FBRyxDQUFDLENBQUNLLFNBQVcsR0FBR0EsT0FBT0osRUFBRSxDQUFDLFVBQVUsQ0FBQztRQUMvRDtJQUNGO0lBRUEsNENBQTRDO0lBQ3BDNEQscUJBQXFCeEQsTUFBYyxFQUFZO1FBQ3JELE9BQU9BLE9BQU82QyxLQUFLLENBQ2hCOUMsTUFBTSxDQUFDLENBQUMrQztZQUNQLElBQUlwRSwyQkFBMkJvRSxPQUFPO2dCQUNwQyxPQUFPO1lBQ1Q7WUFDQSxJQUFJbEUsdUJBQXVCa0UsU0FBU0EsS0FBS2lCLGFBQWEsRUFBRTtnQkFDdEQsT0FBTztZQUNUO1lBQ0EsT0FBTztRQUNULEdBQ0NwRSxHQUFHLENBQUMsQ0FBQ21ELE9BQVMsR0FBR0EsS0FBS2tCLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDcEM7SUFFUXhDLDRCQUE0QjlCLFFBQWtCLEVBQXFCO1FBQ3pFLElBQUlBLFNBQVNZLE1BQU0sS0FBSyxHQUFHO1lBQ3pCLE9BQU87UUFDVDtRQUVBLG9CQUFvQjtRQUNwQixNQUFNaUQsaUJBQWlCN0QsU0FBU0ssTUFBTSxDQUNwQyxDQUFDQyxTQUFXLElBQUksQ0FBQ3dELG9CQUFvQixDQUFDeEQsUUFBUU0sTUFBTSxHQUFHO1FBR3pELElBQUlpRCxlQUFlakQsTUFBTSxLQUFLLEdBQUc7WUFDL0IsT0FBTztRQUNUO1FBRUEsTUFBTTJELGNBQWNWLGVBQWU1RCxHQUFHLENBQUMsQ0FBQ0s7WUFDdEMsTUFBTWtFLFlBQVksSUFBSSxDQUFDVixvQkFBb0IsQ0FBQ3hEO1lBQzVDLE1BQU1tRSxjQUFjRCxVQUFVdkUsR0FBRyxDQUFDLENBQUN5RSxNQUFRLENBQUMsQ0FBQyxFQUFFQSxJQUFJLENBQUMsQ0FBQyxFQUFFakMsSUFBSSxDQUFDO1lBRTVELE9BQU8sQ0FBQyxZQUFZLEVBQUVuQyxPQUFPSixFQUFFLENBQUMsY0FBYyxFQUFFdUUsWUFBWSxDQUFDLENBQUM7UUFDaEU7UUFFQSxPQUFPO1lBQ0xuRCxPQUFPLENBQUMsZ0JBQWdCLENBQUM7WUFDekJDLE9BQU9nRDtZQUNQN0MsWUFBWSxFQUFFO1FBQ2hCO0lBQ0Y7SUFFQTs7O0dBR0MsR0FDRCxBQUFRUyw0QkFBK0M7UUFDckQsTUFBTXdDLGFBQWE3RixPQUFPVyxNQUFNLENBQUNtRixNQUFNLEVBQUVDO1FBQ3pDLElBQUksQ0FBQ0YsWUFBWTtZQUNmLE9BQU87UUFDVDtRQUVBLHVFQUF1RTtRQUN2RSxNQUFNRyxtQkFBb0JILFlBQW9CSSxNQUFNRDtRQUNwRCxJQUFJLENBQUNBLG9CQUFvQnJFLE9BQU9DLElBQUksQ0FBQ29FLGtCQUFrQmxFLE1BQU0sS0FBSyxHQUFHO1lBQ25FLHVDQUF1QztZQUN2QyxPQUFPO2dCQUNMVSxPQUFPO2dCQUNQQyxPQUFPO29CQUFDO2lCQUFpQztnQkFDekNHLFlBQVksRUFBRTtZQUNoQjtRQUNGO1FBRUEsTUFBTUEsYUFBdUIsRUFBRTtRQUUvQix1Q0FBdUM7UUFDdkMsTUFBTXNELGFBQWF2RSxPQUFPd0UsT0FBTyxDQUFDSCxrQkFBa0I3RSxHQUFHLENBQUMsQ0FBQyxDQUFDaUYsS0FBS0MsTUFBTTtZQUNuRSw4RUFBOEU7WUFDOUUsTUFBTUMsY0FBY0Q7WUFDcEIsTUFBTUUsYUFBYUQsWUFBWUUsUUFBUSxLQUFLO1lBRTVDLElBQUlDO1lBRUosd0NBQXdDO1lBQ3hDLElBQUlILFlBQVlJLFVBQVUsRUFBRTtnQkFDMUJELFlBQVlILFlBQVlJLFVBQVU7Z0JBQ2xDOUQsV0FBV0ssSUFBSSxDQUFDd0Q7WUFDbEIsT0FBTztnQkFDTEEsWUFBWW5HLHVCQUF1QmdHLFlBQVkvRixJQUFJO1lBQ3JEO1lBRUEsT0FBTyxDQUFDLEVBQUUsRUFBRTZGLE1BQU1HLGFBQWEsS0FBSyxJQUFJLEVBQUUsRUFBRUUsVUFBVSxDQUFDLENBQUM7UUFDMUQ7UUFFQSxPQUFPO1lBQ0xqRSxPQUFPO1lBQ1BDLE9BQU87Z0JBQUM7bUJBQXdDeUQ7Z0JBQVk7YUFBSztZQUNqRXREO1FBQ0Y7SUFDRjtJQUVBOztHQUVDLEdBQ0QsQUFBUXFCLGdCQUF5QjtRQUMvQixPQUFPLENBQUMsQ0FBQ2pFLE9BQU9XLE1BQU0sQ0FBQ21GLE1BQU0sRUFBRUM7SUFDakM7QUFDRiJ9
|
|
254
|
+
//#endregion
|
|
255
|
+
export { Template__generated_sso };
|
|
256
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkX3Nzby50ZW1wbGF0ZS5qcyIsIm5hbWVzIjpbInNvdXJjZUNvZGVzOiBTb3VyY2VDb2RlW10iLCJwdXJpU3Vic2V0UXVlcnk6IFNvdXJjZUNvZGUiLCJwdXJpTG9hZGVyUXVlcnk6IFNvdXJjZUNvZGUiLCJjb250ZXh0RXh0ZW5kTGluZXM6IHN0cmluZ1tdIiwiaW1wb3J0S2V5czogc3RyaW5nW10iLCJmaWVsZFR5cGU6IHN0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkX3Nzby50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcblxuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5IH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wLFxuICBpc09uZVRvT25lUmVsYXRpb25Qcm9wLFxufSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyB0eXBlIFNvdXJjZUNvZGUgfSBmcm9tIFwiLi9nZW5lcmF0ZWQudGVtcGxhdGVcIjtcblxuLyoqXG4gKiBiZXR0ZXItYXV0aCBhZGRpdGlvbmFsRmllbGRz7J2YIHR5cGUg6rCS7J2EIFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIG1hcEJldHRlckF1dGhGaWVsZFR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgcmV0dXJuIFwiRGF0ZVwiO1xuICAgIGNhc2UgXCJzdHJpbmdbXVwiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nW11cIjtcbiAgICBjYXNlIFwibnVtYmVyW11cIjpcbiAgICAgIHJldHVybiBcIm51bWJlcltdXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2dlbmVyYXRlZF9zc28gZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiZ2VuZXJhdGVkX3Nzb1wiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgoKSB7XG4gICAgY29uc3QgeyBkaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogYCR7ZGlyfS9zcmMvYXBwbGljYXRpb25gLFxuICAgICAgcGF0aDogYHNvbmFtdS5nZW5lcmF0ZWQuc3NvLnRzYCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG4gICAgY29uc3QgZW50aXRpZXMgPSBlbnRpdHlJZHMubWFwKChpZCkgPT4gRW50aXR5TWFuYWdlci5nZXQoaWQpKTtcblxuICAgIC8vIFN1YnNldFF1ZXJpZXMg7IOd7ISxIOuMgOyDgTog67aA66qoIOyXlO2LsO2LsOqwgCDsl4bqs6Ag7ISc67iM7IWL7J20IOyhtOyerFxuICAgIGNvbnN0IHRhcmdldEVudGl0aWVzID0gZW50aXRpZXMuZmlsdGVyKFxuICAgICAgKGVudGl0eSkgPT4gZW50aXR5LnBhcmVudElkID09PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXMoZW50aXR5LnN1YnNldHMpLmxlbmd0aCA+IDAsXG4gICAgKTtcblxuICAgIC8vIFN1YnNldFF1ZXJpZXMg7IOd7ISxXG4gICAgY29uc3Qgc291cmNlQ29kZXM6IFNvdXJjZUNvZGVbXSA9IHRhcmdldEVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT4ge1xuICAgICAgY29uc3Qgc3Vic2V0S2V5cyA9IE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKTtcblxuICAgICAgY29uc3Qgc3Vic2V0S2V5VHlwZU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleWA7XG4gICAgICBjb25zdCBlbnRpdHlDYW1lbE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGVudGl0eS5pZCwgdHJ1ZSk7XG5cbiAgICAgIC8vIFB1cmkg6riw67CYIFN1YnNldFF1ZXJ5XG4gICAgICBjb25zdCBwdXJpU3Vic2V0UXVlcnk6IFNvdXJjZUNvZGUgPSB7XG4gICAgICAgIGxhYmVsOiBgU3Vic2V0UXVlcnk6ICR7ZW50aXR5LmlkfWAsXG4gICAgICAgIGxpbmVzOiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudGl0eUNhbWVsTmFtZX1TdWJzZXRRdWVyaWVzID0ge2AsXG4gICAgICAgICAgLi4uc3Vic2V0S2V5cy5tYXAoXG4gICAgICAgICAgICAoc3Vic2V0S2V5KSA9PiBgJHtzdWJzZXRLZXl9OiAocWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4pID0+IHtcbiAgICAgICAgICAgICR7ZW50aXR5LmdldFB1cmlTdWJzZXRRdWVyeShzdWJzZXRLZXkpfTtcbiAgICAgICAgICB9LGAsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBgfTtgLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgIF0sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfTtcblxuICAgICAgLy8gUHVyaSDquLDrsJggU3Vic2V0TG9hZGVyc1F1ZXJ5XG4gICAgICBjb25zdCBwdXJpTG9hZGVyUXVlcnk6IFNvdXJjZUNvZGUgPSB7XG4gICAgICAgIGxhYmVsOiBgTG9hZGVyUXVlcnk6ICR7ZW50aXR5LmlkfWAsXG4gICAgICAgIGxpbmVzOiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudGl0eUNhbWVsTmFtZX1Mb2FkZXJRdWVyaWVzID0ge2AsXG4gICAgICAgICAgLi4uc3Vic2V0S2V5cy5tYXAoKHN1YnNldEtleSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAke3N1YnNldEtleX06ICR7ZW50aXR5LmdldFB1cmlMb2FkZXJRdWVyeShzdWJzZXRLZXkpfSxgO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGB9IGFzIGNvbnN0IHNhdGlzZmllcyBQdXJpTG9hZGVyUXVlcmllczwke3N1YnNldEtleVR5cGVOYW1lfT47YCxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICBdLFxuICAgICAgICBpbXBvcnRLZXlzOiBbc3Vic2V0S2V5VHlwZU5hbWVdLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFtwdXJpU3Vic2V0UXVlcnksIHB1cmlMb2FkZXJRdWVyeV07XG4gICAgfSk7XG5cbiAgICAvLyBGb3JlaWduS2V5IO2DgOyehSDsg53shLFcbiAgICBjb25zdCBma1R5cGVTb3VyY2VDb2RlID0gdGhpcy5nZXRGb3JlaWduS2V5VHlwZVNvdXJjZUNvZGUoZW50aXRpZXMpO1xuICAgIGlmIChma1R5cGVTb3VyY2VDb2RlKSB7XG4gICAgICBzb3VyY2VDb2Rlcy5wdXNoKGZrVHlwZVNvdXJjZUNvZGUpO1xuICAgIH1cblxuICAgIC8vIERhdGFiYXNlU2NoZW1hIOyDneyEsVxuICAgIGNvbnN0IGRiU2NoZW1hU291cmNlQ29kZSA9IHRoaXMuZ2V0RGF0YWJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0aWVzKTtcbiAgICBpZiAoZGJTY2hlbWFTb3VyY2VDb2RlKSB7XG4gICAgICBzb3VyY2VDb2Rlcy5wdXNoKGRiU2NoZW1hU291cmNlQ29kZSk7XG4gICAgfVxuXG4gICAgLy8gQXV0aCBVc2VyIO2DgOyehSDsg53shLFcbiAgICBjb25zdCBhdXRoVXNlclR5cGVTb3VyY2VDb2RlID0gdGhpcy5nZXRBdXRoVXNlclR5cGVTb3VyY2VDb2RlKCk7XG4gICAgaWYgKGF1dGhVc2VyVHlwZVNvdXJjZUNvZGUpIHtcbiAgICAgIHNvdXJjZUNvZGVzLnB1c2goYXV0aFVzZXJUeXBlU291cmNlQ29kZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlQ29kZSA9IHNvdXJjZUNvZGVzLnJlZHVjZShcbiAgICAgIChyZXN1bHQsIHRzKSA9PiB7XG4gICAgICAgIGlmICh0cyA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0KHJlc3VsdCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZXM6IFsuLi5yZXN1bHQubGluZXMsIGAvLyAke3RzLmxhYmVsfWAsIC4uLnRzLmxpbmVzLCBcIlwiXSxcbiAgICAgICAgICBpbXBvcnRLZXlzOiB1bmlxdWUoWy4uLnJlc3VsdC5pbXBvcnRLZXlzLCAuLi50cy5pbXBvcnRLZXlzXSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsaW5lczogW10sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfSBhcyBPbWl0PFNvdXJjZUNvZGUsIFwibGFiZWxcIj4sXG4gICAgKTtcblxuICAgIGNvbnN0IGJvZHkgPSBzb3VyY2VDb2RlLmxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgY29uc3QgaXNVc2luZ01hbnlUb01hbnlCYXNlU2NoZW1hID0gYm9keS5pbmNsdWRlcyhcIk1hbnlUb01hbnlCYXNlU2NoZW1hXCIpO1xuXG4gICAgY29uc3Qgc29uYW11SW1wb3J0cyA9IFtcbiAgICAgIFwiUHVyaVdyYXBwZXJcIixcbiAgICAgIFwiRGF0YWJhc2VTY2hlbWFFeHRlbmRcIixcbiAgICAgIFwiUHVyaUxvYWRlclF1ZXJpZXNcIixcbiAgICAgIGlzVXNpbmdNYW55VG9NYW55QmFzZVNjaGVtYSA/IFwiTWFueVRvTWFueUJhc2VTY2hlbWFcIiA6IFwiXCIsXG4gICAgXVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmpvaW4oXCIsIFwiKTtcblxuICAgIC8vIGN1c3RvbUhlYWRlcnMg6rWs7ISxXG4gICAgY29uc3QgY3VzdG9tSGVhZGVycyA9IFtcbiAgICAgIFwiLyoqXCIsXG4gICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICBcIiAqL1wiLFxuICAgICAgYGltcG9ydCB7ICR7c29uYW11SW1wb3J0c30gfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICBdO1xuICAgIGlmICh0aGlzLmhhc0F1dGhDb25maWcoKSkge1xuICAgICAgY3VzdG9tSGVhZGVycy5wdXNoKGBpbXBvcnQgdHlwZSB7IFVzZXIgfSBmcm9tIFwiYmV0dGVyLWF1dGhcIjtgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKCksXG4gICAgICBib2R5OiBzb3VyY2VDb2RlLmxpbmVzLmpvaW4oXCJcXG5cIiksXG4gICAgICBpbXBvcnRLZXlzOiBzb3VyY2VDb2RlLmltcG9ydEtleXMsXG4gICAgICBjdXN0b21IZWFkZXJzLFxuICAgIH07XG4gIH1cblxuICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIHByaXZhdGUgSGVscGVyIE1ldGhvZHNcbiAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIGdldERhdGFiYXNlU2NoZW1hU291cmNlQ29kZShlbnRpdGllczogRW50aXR5W10pOiBTb3VyY2VDb2RlIHwgbnVsbCB7XG4gICAgaWYgKGVudGl0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gRGF0YWJhc2VTY2hlbWFFeHRlbmQgLSDthYzsnbTruJQg7Iqk7YKk66eIIO2DgOyehSDsoJXsnZhcbiAgICBjb25zdCBlbnRpdHlTY2hlbWFMaW5lcyA9IGVudGl0aWVzLm1hcCgoZW50aXR5KSA9PiBgJHtlbnRpdHkudGFibGV9OiAke2VudGl0eS5pZH1CYXNlU2NoZW1hO2ApO1xuXG4gICAgY29uc3Qgam9pblRhYmxlcyA9IHVuaXF1ZShcbiAgICAgIGVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT5cbiAgICAgICAgZW50aXR5LnByb3BzLmZpbHRlcihpc01hbnlUb01hbnlSZWxhdGlvblByb3ApLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZyb21UYWJsZUtleSA9IGluZmxlY3Rpb24uc2luZ3VsYXJpemUoZW50aXR5LnRhYmxlKTtcbiAgICAgICAgICBjb25zdCB0b0VudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHByb3Aud2l0aCk7XG4gICAgICAgICAgY29uc3QgdG9UYWJsZUtleSA9IGluZmxlY3Rpb24uc2luZ3VsYXJpemUodG9FbnRpdHkudGFibGUpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0YWJsZTogcHJvcC5qb2luVGFibGUsXG4gICAgICAgICAgICBmcm9tVGFibGVLZXksXG4gICAgICAgICAgICB0b1RhYmxlS2V5LFxuICAgICAgICAgICAgZnJvbUVudGl0eUlkOiBlbnRpdHkuaWQsXG4gICAgICAgICAgICB0b0VudGl0eUlkOiB0b0VudGl0eS5pZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICAoam9pblRhYmxlKSA9PiBqb2luVGFibGUudGFibGUsXG4gICAgKTtcblxuICAgIC8vIERhdGFiYXNlRm9yZWlnbktleXMgLSBGSyDsu6zrn7zsnYQg6rCA7KeEIO2FjOydtOu4lOunjCDsoJXsnZhcbiAgICBjb25zdCBlbnRpdGllc1dpdGhGayA9IGVudGl0aWVzLmZpbHRlcihcbiAgICAgIChlbnRpdHkpID0+IHRoaXMuZ2V0Rm9yZWlnbktleUNvbHVtbnMoZW50aXR5KS5sZW5ndGggPiAwLFxuICAgICk7XG4gICAgY29uc3QgZmtNZXRhZGF0YUxpbmVzID0gZW50aXRpZXNXaXRoRmsubWFwKFxuICAgICAgKGVudGl0eSkgPT4gYCR7ZW50aXR5LnRhYmxlfTogJHtlbnRpdHkuaWR9Rm9yZWlnbktleXM7YCxcbiAgICApO1xuXG4gICAgLy8gQ29udGV4dEV4dGVuZCAtIGF1dGgg7ISk7KCV7J20IOyeiOydhCDrlYzrp4wgdXNlciDtg4DsnoUg7LaU6rCAXG4gICAgY29uc3QgY29udGV4dEV4dGVuZExpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICh0aGlzLmhhc0F1dGhDb25maWcoKSkge1xuICAgICAgY29udGV4dEV4dGVuZExpbmVzLnB1c2goXG4gICAgICAgIGBgLFxuICAgICAgICBgICBleHBvcnQgaW50ZXJmYWNlIENvbnRleHRFeHRlbmQge2AsXG4gICAgICAgIGAgICAgdXNlcjogU29uYW11VXNlciB8IG51bGw7YCxcbiAgICAgICAgYCAgfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYERhdGFiYXNlU2NoZW1hYCxcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgIGBkZWNsYXJlIG1vZHVsZSBcInNvbmFtdVwiIHtgLFxuICAgICAgICBgICBleHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlU2NoZW1hRXh0ZW5kIHtgLFxuICAgICAgICAuLi5lbnRpdHlTY2hlbWFMaW5lcyxcbiAgICAgICAgLi4uam9pblRhYmxlcy5tYXAoKGpvaW5UYWJsZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZyb21FbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChqb2luVGFibGUuZnJvbUVudGl0eUlkKTtcbiAgICAgICAgICBjb25zdCB0b0VudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGpvaW5UYWJsZS50b0VudGl0eUlkKTtcbiAgICAgICAgICBjb25zdCBmcm9tUGtUeXBlID0gZnJvbUVudGl0eS5nZXRQa1R5cGUoKSA9PT0gXCJpbnRlZ2VyXCIgPyBcIm51bWJlclwiIDogXCJzdHJpbmdcIjtcbiAgICAgICAgICBjb25zdCB0b1BrVHlwZSA9IHRvRW50aXR5LmdldFBrVHlwZSgpID09PSBcImludGVnZXJcIiA/IFwibnVtYmVyXCIgOiBcInN0cmluZ1wiO1xuXG4gICAgICAgICAgcmV0dXJuIGAke2pvaW5UYWJsZS50YWJsZX06IE1hbnlUb01hbnlCYXNlU2NoZW1hPFwiJHtqb2luVGFibGUuZnJvbVRhYmxlS2V5fVwiLCBcIiR7am9pblRhYmxlLnRvVGFibGVLZXl9XCIsICR7ZnJvbVBrVHlwZX0sICR7dG9Qa1R5cGV9PjtgO1xuICAgICAgICB9KSxcbiAgICAgICAgYCAgfWAsXG4gICAgICAgIGBgLFxuICAgICAgICBgICBleHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlRm9yZWlnbktleXMge2AsXG4gICAgICAgIC4uLmZrTWV0YWRhdGFMaW5lcyxcbiAgICAgICAgYCAgfWAsXG4gICAgICAgIC4uLmNvbnRleHRFeHRlbmRMaW5lcyxcbiAgICAgICAgYH1gLFxuICAgICAgXSxcbiAgICAgIGltcG9ydEtleXM6IGVudGl0aWVzLm1hcCgoZW50aXR5KSA9PiBgJHtlbnRpdHkuaWR9QmFzZVNjaGVtYWApLFxuICAgIH07XG4gIH1cblxuICAvLyBGSyDqtIDqs4Trpbwg7Lus65+866qF7Jy866GcIOuzgO2ZmCAo7JiIOiBjb21wYW55IOKGkiBjb21wYW55X2lkKVxuICBwcml2YXRlIGdldEZvcmVpZ25LZXlDb2x1bW5zKGVudGl0eTogRW50aXR5KTogc3RyaW5nW10ge1xuICAgIHJldHVybiBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IHtcbiAgICAgICAgaWYgKGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKHByb3ApID0+IGAke3Byb3AubmFtZX1faWRgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rm9yZWlnbktleVR5cGVTb3VyY2VDb2RlKGVudGl0aWVzOiBFbnRpdHlbXSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoZW50aXRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBGS+qwgCDsnojripQg7JeU7Yuw7Yuw66eMIO2DgOyehSDsg53shLFcbiAgICBjb25zdCBlbnRpdGllc1dpdGhGayA9IGVudGl0aWVzLmZpbHRlcihcbiAgICAgIChlbnRpdHkpID0+IHRoaXMuZ2V0Rm9yZWlnbktleUNvbHVtbnMoZW50aXR5KS5sZW5ndGggPiAwLFxuICAgICk7XG5cbiAgICBpZiAoZW50aXRpZXNXaXRoRmsubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBma1R5cGVMaW5lcyA9IGVudGl0aWVzV2l0aEZrLm1hcCgoZW50aXR5KSA9PiB7XG4gICAgICBjb25zdCBma0NvbHVtbnMgPSB0aGlzLmdldEZvcmVpZ25LZXlDb2x1bW5zKGVudGl0eSk7XG4gICAgICBjb25zdCBma1R5cGVWYWx1ZSA9IGZrQ29sdW1ucy5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKS5qb2luKFwiIHwgXCIpO1xuXG4gICAgICByZXR1cm4gYGV4cG9ydCB0eXBlICR7ZW50aXR5LmlkfUZvcmVpZ25LZXlzID0gJHtma1R5cGVWYWx1ZX07YDtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEZvcmVpZ25LZXkgVHlwZXNgLFxuICAgICAgbGluZXM6IGZrVHlwZUxpbmVzLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzb25hbXUuY29uZmlnLnRz7J2YIGF1dGgudXNlci5hZGRpdGlvbmFsRmllbGRz7JeQ7IScIFNvbmFtdVVzZXIg7YOA7J6F7J2EIOyDneyEse2VqeuLiOuLpC5cbiAgICogQHJldHVybnMgU291cmNlQ29kZSB8IG51bGwgLSBhdXRoIOyEpOygleydtCDsl4bsnLzrqbQgbnVsbCDrsJjtmZhcbiAgICovXG4gIHByaXZhdGUgZ2V0QXV0aFVzZXJUeXBlU291cmNlQ29kZSgpOiBTb3VyY2VDb2RlIHwgbnVsbCB7XG4gICAgY29uc3QgYXV0aENvbmZpZyA9IFNvbmFtdS5jb25maWcuc2VydmVyPy5hdXRoO1xuICAgIGlmICghYXV0aENvbmZpZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gYWRkaXRpb25hbEZpZWxkcyDtg4DsnoXsnbQg64+Z7KCB7J6EXG4gICAgY29uc3QgYWRkaXRpb25hbEZpZWxkcyA9IChhdXRoQ29uZmlnIGFzIGFueSk/LnVzZXI/LmFkZGl0aW9uYWxGaWVsZHM7XG4gICAgaWYgKCFhZGRpdGlvbmFsRmllbGRzIHx8IE9iamVjdC5rZXlzKGFkZGl0aW9uYWxGaWVsZHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gYWRkaXRpb25hbEZpZWxkc+qwgCDsl4bsnLzrqbQg6riw67O4IFVzZXIg7YOA7J6F66eMIOyCrOyaqVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IFwiQXV0aCBVc2VyIFR5cGVcIixcbiAgICAgICAgbGluZXM6IFtcImV4cG9ydCB0eXBlIFNvbmFtdVVzZXIgPSBVc2VyO1wiXSxcbiAgICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGltcG9ydEtleXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBhZGRpdGlvbmFsRmllbGRz66W8IFR5cGVTY3JpcHQg7YOA7J6F7Jy866GcIOuzgO2ZmFxuICAgIGNvbnN0IGZpZWxkTGluZXMgPSBPYmplY3QuZW50cmllcyhhZGRpdGlvbmFsRmllbGRzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gYmV0dGVyLWF1dGggYWRkaXRpb25hbEZpZWxkcyDqtazsobBcbiAgICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdmFsdWUgYXMgYW55O1xuICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IGZpZWxkQ29uZmlnLnJlcXVpcmVkICE9PSBmYWxzZTtcblxuICAgICAgbGV0IGZpZWxkVHlwZTogc3RyaW5nO1xuXG4gICAgICAvLyBzb25hbXVUeXBl7J20IOyeiOycvOuptCBkZXNjcmlwdGlvbuydhCDtg4DsnoXrqoXsnLzroZwg7IKs7JqpXG4gICAgICBpZiAoZmllbGRDb25maWcuc29uYW11VHlwZSkge1xuICAgICAgICBmaWVsZFR5cGUgPSBmaWVsZENvbmZpZy5zb25hbXVUeXBlO1xuICAgICAgICBpbXBvcnRLZXlzLnB1c2goZmllbGRUeXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpZWxkVHlwZSA9IG1hcEJldHRlckF1dGhGaWVsZFR5cGUoZmllbGRDb25maWcudHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgICAke2tleX0ke2lzUmVxdWlyZWQgPyBcIlwiIDogXCI/XCJ9OiAke2ZpZWxkVHlwZX07YDtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogXCJBdXRoIFVzZXIgVHlwZVwiLFxuICAgICAgbGluZXM6IFtcImV4cG9ydCB0eXBlIFNvbmFtdVVzZXIgPSBVc2VyICYge1wiLCAuLi5maWVsZExpbmVzLCBcIn07XCJdLFxuICAgICAgaW1wb3J0S2V5cyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIGF1dGgg7ISk7KCV7J20IOyeiOuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGhhc0F1dGhDb25maWcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhU29uYW11LmNvbmZpZy5zZXJ2ZXI/LmF1dGg7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztVQUttQztxQkFFeUI7WUFLakM7ZUFDWTs7OztBQU12QyxTQUFTLHVCQUF1QixNQUFzQjtBQUNwRCxTQUFRLE1BQVI7RUFDRSxLQUFLLFNBQ0gsUUFBTztFQUNULEtBQUssU0FDSCxRQUFPO0VBQ1QsS0FBSyxVQUNILFFBQU87RUFDVCxLQUFLLE9BQ0gsUUFBTztFQUNULEtBQUssV0FDSCxRQUFPO0VBQ1QsS0FBSyxXQUNILFFBQU87RUFDVCxRQUNFLFFBQU87OztBQUliLElBQWEsMEJBQWIsY0FBNkMsU0FBUztDQUNwRCxjQUFjO0FBQ1osUUFBTSxnQkFBZ0I7O0NBR3hCLG1CQUFtQjtFQUNqQixNQUFNLEVBQUUsUUFBUSxPQUFPLE9BQU87QUFFOUIsU0FBTztHQUNMLFFBQVEsR0FBRyxJQUFJO0dBQ2YsTUFBTTtHQUNQOztDQUdILFNBQVM7RUFDUCxNQUFNLFlBQVksY0FBYyxXQUFXO0VBQzNDLE1BQU0sV0FBVyxVQUFVLEtBQUssT0FBTyxjQUFjLElBQUksR0FBRyxDQUFDO0VBRzdELE1BQU0saUJBQWlCLFNBQVMsUUFDN0IsV0FBVyxPQUFPLGFBQWEsYUFBYSxPQUFPLEtBQUssT0FBTyxRQUFRLENBQUMsU0FBUyxFQUNuRjtFQUdELE1BQU1BLGNBQTRCLGVBQWUsU0FBUyxXQUFXO0dBQ25FLE1BQU0sYUFB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
|