@aerokit/sdk 12.44.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/LICENSE +277 -0
- package/README.md +170 -0
- package/dist/cjs/bpm/deployer.js +57 -0
- package/dist/cjs/bpm/index.js +35 -0
- package/dist/cjs/bpm/process.js +636 -0
- package/dist/cjs/bpm/tasks.js +973 -0
- package/dist/cjs/bpm/values.js +82 -0
- package/dist/cjs/cache/cache.js +64 -0
- package/dist/cjs/cache/index.js +26 -0
- package/dist/cjs/cms/cmis.js +689 -0
- package/dist/cjs/cms/index.js +26 -0
- package/dist/cjs/component/decorators.js +126 -0
- package/dist/cjs/component/index.js +36 -0
- package/dist/cjs/core/configurations.js +110 -0
- package/dist/cjs/core/context.js +47 -0
- package/dist/cjs/core/env.js +45 -0
- package/dist/cjs/core/globals.js +54 -0
- package/dist/cjs/core/index.js +35 -0
- package/dist/cjs/db/dao.js +795 -0
- package/dist/cjs/db/database.js +904 -0
- package/dist/cjs/db/decorators.js +167 -0
- package/dist/cjs/db/index.js +72 -0
- package/dist/cjs/db/insert.js +51 -0
- package/dist/cjs/db/orm.js +245 -0
- package/dist/cjs/db/ormstatements.js +243 -0
- package/dist/cjs/db/procedure.js +112 -0
- package/dist/cjs/db/query.js +57 -0
- package/dist/cjs/db/repository.js +148 -0
- package/dist/cjs/db/sequence.js +59 -0
- package/dist/cjs/db/sql.js +516 -0
- package/dist/cjs/db/store.js +172 -0
- package/dist/cjs/db/translator.js +100 -0
- package/dist/cjs/db/update.js +43 -0
- package/dist/cjs/etcd/client.js +174 -0
- package/dist/cjs/etcd/index.js +26 -0
- package/dist/cjs/extensions/decorators.js +40 -0
- package/dist/cjs/extensions/extensions.js +108 -0
- package/dist/cjs/extensions/index.js +39 -0
- package/dist/cjs/git/client.js +277 -0
- package/dist/cjs/git/index.js +26 -0
- package/dist/cjs/http/client-async.js +224 -0
- package/dist/cjs/http/client.js +145 -0
- package/dist/cjs/http/decorators.js +76 -0
- package/dist/cjs/http/errors/ForbiddenError.js +41 -0
- package/dist/cjs/http/errors/ValidationError.js +41 -0
- package/dist/cjs/http/errors.js +26 -0
- package/dist/cjs/http/index.js +59 -0
- package/dist/cjs/http/request.js +281 -0
- package/dist/cjs/http/response.js +452 -0
- package/dist/cjs/http/rs/resource-common.js +32 -0
- package/dist/cjs/http/rs/resource-http-controller.js +306 -0
- package/dist/cjs/http/rs/resource-mappings.js +130 -0
- package/dist/cjs/http/rs/resource-method.js +218 -0
- package/dist/cjs/http/rs/resource.js +232 -0
- package/dist/cjs/http/rs.js +31 -0
- package/dist/cjs/http/session.js +124 -0
- package/dist/cjs/http/upload.js +144 -0
- package/dist/cjs/http/utils.js +106 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/indexing/index.js +29 -0
- package/dist/cjs/indexing/searcher.js +70 -0
- package/dist/cjs/indexing/writer.js +45 -0
- package/dist/cjs/integrations/index.js +26 -0
- package/dist/cjs/integrations/integrations.js +55 -0
- package/dist/cjs/io/bytes.js +101 -0
- package/dist/cjs/io/files.js +344 -0
- package/dist/cjs/io/image.js +43 -0
- package/dist/cjs/io/index.js +38 -0
- package/dist/cjs/io/streams.js +243 -0
- package/dist/cjs/io/zip.js +251 -0
- package/dist/cjs/job/decorators.js +40 -0
- package/dist/cjs/job/index.js +39 -0
- package/dist/cjs/job/scheduler.js +347 -0
- package/dist/cjs/junit/index.js +18 -0
- package/dist/cjs/junit/junit.js +67 -0
- package/dist/cjs/kafka/consumer.js +70 -0
- package/dist/cjs/kafka/index.js +29 -0
- package/dist/cjs/kafka/producer.js +70 -0
- package/dist/cjs/log/index.js +26 -0
- package/dist/cjs/log/logging.js +174 -0
- package/dist/cjs/mail/client.js +153 -0
- package/dist/cjs/mail/index.js +26 -0
- package/dist/cjs/messaging/consumer.js +83 -0
- package/dist/cjs/messaging/decorators.js +40 -0
- package/dist/cjs/messaging/index.js +42 -0
- package/dist/cjs/messaging/producer.js +81 -0
- package/dist/cjs/mongodb/client.js +627 -0
- package/dist/cjs/mongodb/dao.js +390 -0
- package/dist/cjs/mongodb/index.js +36 -0
- package/dist/cjs/net/decorators.js +40 -0
- package/dist/cjs/net/index.js +42 -0
- package/dist/cjs/net/soap.js +228 -0
- package/dist/cjs/net/websockets.js +151 -0
- package/dist/cjs/net/wrappers/onClose.js +2 -0
- package/dist/cjs/net/wrappers/onError.js +2 -0
- package/dist/cjs/net/wrappers/onMessage.js +2 -0
- package/dist/cjs/net/wrappers/onOpen.js +2 -0
- package/dist/cjs/pdf/index.js +26 -0
- package/dist/cjs/pdf/pdf.js +160 -0
- package/dist/cjs/platform/command.js +47 -0
- package/dist/cjs/platform/engines.js +70 -0
- package/dist/cjs/platform/index.js +47 -0
- package/dist/cjs/platform/lifecycle.js +49 -0
- package/dist/cjs/platform/os.js +51 -0
- package/dist/cjs/platform/problems.js +127 -0
- package/dist/cjs/platform/registry.js +319 -0
- package/dist/cjs/platform/repository.js +498 -0
- package/dist/cjs/platform/workspace.js +574 -0
- package/dist/cjs/qldb/index.js +26 -0
- package/dist/cjs/qldb/qldb.js +24 -0
- package/dist/cjs/rabbitmq/consumer.js +50 -0
- package/dist/cjs/rabbitmq/index.js +29 -0
- package/dist/cjs/rabbitmq/producer.js +38 -0
- package/dist/cjs/redis/client.js +190 -0
- package/dist/cjs/redis/index.js +26 -0
- package/dist/cjs/security/decorators.js +48 -0
- package/dist/cjs/security/index.js +40 -0
- package/dist/cjs/security/oauth.js +75 -0
- package/dist/cjs/security/user.js +88 -0
- package/dist/cjs/template/engines.js +139 -0
- package/dist/cjs/template/index.js +26 -0
- package/dist/cjs/utils/alphanumeric.js +107 -0
- package/dist/cjs/utils/base64.js +104 -0
- package/dist/cjs/utils/converter.js +78 -0
- package/dist/cjs/utils/digest.js +167 -0
- package/dist/cjs/utils/escape.js +160 -0
- package/dist/cjs/utils/hex.js +104 -0
- package/dist/cjs/utils/index.js +68 -0
- package/dist/cjs/utils/jsonpath.js +489 -0
- package/dist/cjs/utils/qrcode.js +41 -0
- package/dist/cjs/utils/url.js +82 -0
- package/dist/cjs/utils/utf8.js +61 -0
- package/dist/cjs/utils/uuid.js +48 -0
- package/dist/cjs/utils/xml.js +57 -0
- package/dist/dts/bpm/deployer.d.ts +29 -0
- package/dist/dts/bpm/index.d.ts +8 -0
- package/dist/dts/bpm/process.d.ts +433 -0
- package/dist/dts/bpm/tasks.d.ts +2022 -0
- package/dist/dts/bpm/values.d.ts +38 -0
- package/dist/dts/cache/cache.d.ts +30 -0
- package/dist/dts/cache/index.d.ts +2 -0
- package/dist/dts/cms/cmis.d.ts +413 -0
- package/dist/dts/cms/index.d.ts +2 -0
- package/dist/dts/component/decorators.d.ts +52 -0
- package/dist/dts/component/index.d.ts +2 -0
- package/dist/dts/core/configurations.d.ts +65 -0
- package/dist/dts/core/context.d.ts +19 -0
- package/dist/dts/core/env.d.ts +23 -0
- package/dist/dts/core/globals.d.ts +30 -0
- package/dist/dts/core/index.d.ts +8 -0
- package/dist/dts/db/dao.d.ts +8 -0
- package/dist/dts/db/database.d.ts +507 -0
- package/dist/dts/db/decorators.d.ts +89 -0
- package/dist/dts/db/index.d.ts +25 -0
- package/dist/dts/db/insert.d.ts +32 -0
- package/dist/dts/db/orm.d.ts +44 -0
- package/dist/dts/db/ormstatements.d.ts +4 -0
- package/dist/dts/db/procedure.d.ts +25 -0
- package/dist/dts/db/query.d.ts +48 -0
- package/dist/dts/db/repository.d.ts +64 -0
- package/dist/dts/db/sequence.d.ts +34 -0
- package/dist/dts/db/sql.d.ts +267 -0
- package/dist/dts/db/store.d.ts +138 -0
- package/dist/dts/db/translator.d.ts +26 -0
- package/dist/dts/db/update.d.ts +21 -0
- package/dist/dts/etcd/client.d.ts +92 -0
- package/dist/dts/etcd/index.d.ts +2 -0
- package/dist/dts/extensions/decorators.d.ts +11 -0
- package/dist/dts/extensions/extensions.d.ts +41 -0
- package/dist/dts/extensions/index.d.ts +4 -0
- package/dist/dts/git/client.d.ts +478 -0
- package/dist/dts/git/index.d.ts +2 -0
- package/dist/dts/http/client-async.d.ts +158 -0
- package/dist/dts/http/client.d.ts +180 -0
- package/dist/dts/http/decorators.d.ts +11 -0
- package/dist/dts/http/errors/ForbiddenError.d.ts +20 -0
- package/dist/dts/http/errors/ValidationError.d.ts +20 -0
- package/dist/dts/http/errors.d.ts +2 -0
- package/dist/dts/http/index.d.ts +16 -0
- package/dist/dts/http/request.d.ts +158 -0
- package/dist/dts/http/response.d.ts +281 -0
- package/dist/dts/http/rs/resource-common.d.ts +11 -0
- package/dist/dts/http/rs/resource-http-controller.d.ts +43 -0
- package/dist/dts/http/rs/resource-mappings.d.ts +70 -0
- package/dist/dts/http/rs/resource-method.d.ts +206 -0
- package/dist/dts/http/rs/resource.d.ts +126 -0
- package/dist/dts/http/rs.d.ts +4 -0
- package/dist/dts/http/session.d.ts +81 -0
- package/dist/dts/http/upload.d.ts +100 -0
- package/dist/dts/http/utils.d.ts +54 -0
- package/dist/dts/index.d.ts +0 -0
- package/dist/dts/indexing/index.d.ts +4 -0
- package/dist/dts/indexing/searcher.d.ts +47 -0
- package/dist/dts/indexing/writer.d.ts +22 -0
- package/dist/dts/integrations/index.d.ts +2 -0
- package/dist/dts/integrations/integrations.d.ts +118 -0
- package/dist/dts/io/bytes.d.ts +56 -0
- package/dist/dts/io/files.d.ts +261 -0
- package/dist/dts/io/image.d.ts +22 -0
- package/dist/dts/io/index.d.ts +10 -0
- package/dist/dts/io/streams.d.ts +172 -0
- package/dist/dts/io/zip.d.ts +178 -0
- package/dist/dts/job/decorators.d.ts +11 -0
- package/dist/dts/job/index.d.ts +4 -0
- package/dist/dts/job/scheduler.d.ts +250 -0
- package/dist/dts/junit/index.d.ts +1 -0
- package/dist/dts/junit/junit.d.ts +50 -0
- package/dist/dts/kafka/consumer.d.ts +48 -0
- package/dist/dts/kafka/index.d.ts +4 -0
- package/dist/dts/kafka/producer.d.ts +50 -0
- package/dist/dts/log/index.d.ts +2 -0
- package/dist/dts/log/logging.d.ts +102 -0
- package/dist/dts/mail/client.d.ts +90 -0
- package/dist/dts/mail/index.d.ts +2 -0
- package/dist/dts/messaging/consumer.d.ts +61 -0
- package/dist/dts/messaging/decorators.d.ts +11 -0
- package/dist/dts/messaging/index.d.ts +6 -0
- package/dist/dts/messaging/producer.d.ts +59 -0
- package/dist/dts/mongodb/client.d.ts +367 -0
- package/dist/dts/mongodb/dao.d.ts +24 -0
- package/dist/dts/mongodb/index.d.ts +2 -0
- package/dist/dts/net/decorators.d.ts +11 -0
- package/dist/dts/net/index.d.ts +6 -0
- package/dist/dts/net/soap.d.ts +115 -0
- package/dist/dts/net/websockets.d.ts +100 -0
- package/dist/dts/net/wrappers/onClose.d.ts +0 -0
- package/dist/dts/net/wrappers/onError.d.ts +0 -0
- package/dist/dts/net/wrappers/onMessage.d.ts +0 -0
- package/dist/dts/net/wrappers/onOpen.d.ts +0 -0
- package/dist/dts/pdf/index.d.ts +2 -0
- package/dist/dts/pdf/pdf.d.ts +72 -0
- package/dist/dts/platform/command.d.ts +41 -0
- package/dist/dts/platform/engines.d.ts +35 -0
- package/dist/dts/platform/index.d.ts +16 -0
- package/dist/dts/platform/lifecycle.d.ts +22 -0
- package/dist/dts/platform/os.d.ts +23 -0
- package/dist/dts/platform/problems.d.ts +114 -0
- package/dist/dts/platform/registry.d.ts +227 -0
- package/dist/dts/platform/repository.d.ts +354 -0
- package/dist/dts/platform/workspace.d.ts +421 -0
- package/dist/dts/qldb/index.d.ts +2 -0
- package/dist/dts/qldb/qldb.d.ts +1 -0
- package/dist/dts/rabbitmq/consumer.d.ts +25 -0
- package/dist/dts/rabbitmq/index.d.ts +4 -0
- package/dist/dts/rabbitmq/producer.d.ts +15 -0
- package/dist/dts/redis/client.d.ts +134 -0
- package/dist/dts/redis/index.d.ts +2 -0
- package/dist/dts/security/decorators.d.ts +4 -0
- package/dist/dts/security/index.d.ts +5 -0
- package/dist/dts/security/oauth.d.ts +39 -0
- package/dist/dts/security/user.d.ts +51 -0
- package/dist/dts/template/engines.d.ts +98 -0
- package/dist/dts/template/index.d.ts +2 -0
- package/dist/dts/utils/alphanumeric.d.ts +39 -0
- package/dist/dts/utils/base64.d.ts +48 -0
- package/dist/dts/utils/converter.d.ts +44 -0
- package/dist/dts/utils/digest.d.ts +50 -0
- package/dist/dts/utils/escape.d.ts +110 -0
- package/dist/dts/utils/hex.d.ts +48 -0
- package/dist/dts/utils/index.d.ts +23 -0
- package/dist/dts/utils/jsonpath.d.ts +22 -0
- package/dist/dts/utils/qrcode.d.ts +16 -0
- package/dist/dts/utils/url.d.ts +50 -0
- package/dist/dts/utils/utf8.d.ts +33 -0
- package/dist/dts/utils/uuid.d.ts +21 -0
- package/dist/dts/utils/xml.d.ts +22 -0
- package/dist/esm/bpm/deployer.mjs +38 -0
- package/dist/esm/bpm/index.mjs +15 -0
- package/dist/esm/bpm/process.mjs +617 -0
- package/dist/esm/bpm/tasks.mjs +954 -0
- package/dist/esm/bpm/values.mjs +63 -0
- package/dist/esm/cache/cache.mjs +45 -0
- package/dist/esm/cache/index.mjs +6 -0
- package/dist/esm/cms/cmis.mjs +660 -0
- package/dist/esm/cms/index.mjs +6 -0
- package/dist/esm/component/decorators.mjs +107 -0
- package/dist/esm/component/index.mjs +6 -0
- package/dist/esm/core/configurations.mjs +91 -0
- package/dist/esm/core/context.mjs +28 -0
- package/dist/esm/core/env.mjs +26 -0
- package/dist/esm/core/globals.mjs +35 -0
- package/dist/esm/core/index.mjs +15 -0
- package/dist/esm/db/dao.mjs +775 -0
- package/dist/esm/db/database.mjs +885 -0
- package/dist/esm/db/decorators.mjs +148 -0
- package/dist/esm/db/index.mjs +42 -0
- package/dist/esm/db/insert.mjs +32 -0
- package/dist/esm/db/orm.mjs +225 -0
- package/dist/esm/db/ormstatements.mjs +223 -0
- package/dist/esm/db/procedure.mjs +93 -0
- package/dist/esm/db/query.mjs +38 -0
- package/dist/esm/db/repository.mjs +129 -0
- package/dist/esm/db/sequence.mjs +40 -0
- package/dist/esm/db/sql.mjs +497 -0
- package/dist/esm/db/store.mjs +153 -0
- package/dist/esm/db/translator.mjs +81 -0
- package/dist/esm/db/update.mjs +24 -0
- package/dist/esm/etcd/client.mjs +155 -0
- package/dist/esm/etcd/index.mjs +6 -0
- package/dist/esm/extensions/decorators.mjs +21 -0
- package/dist/esm/extensions/extensions.mjs +89 -0
- package/dist/esm/extensions/index.mjs +9 -0
- package/dist/esm/git/client.mjs +258 -0
- package/dist/esm/git/index.mjs +6 -0
- package/dist/esm/http/client-async.mjs +205 -0
- package/dist/esm/http/client.mjs +126 -0
- package/dist/esm/http/decorators.mjs +47 -0
- package/dist/esm/http/errors/ForbiddenError.mjs +22 -0
- package/dist/esm/http/errors/ValidationError.mjs +22 -0
- package/dist/esm/http/errors.mjs +7 -0
- package/dist/esm/http/index.mjs +29 -0
- package/dist/esm/http/request.mjs +262 -0
- package/dist/esm/http/response.mjs +433 -0
- package/dist/esm/http/rs/resource-common.mjs +13 -0
- package/dist/esm/http/rs/resource-http-controller.mjs +287 -0
- package/dist/esm/http/rs/resource-mappings.mjs +111 -0
- package/dist/esm/http/rs/resource-method.mjs +199 -0
- package/dist/esm/http/rs/resource.mjs +213 -0
- package/dist/esm/http/rs.mjs +12 -0
- package/dist/esm/http/session.mjs +105 -0
- package/dist/esm/http/upload.mjs +125 -0
- package/dist/esm/http/utils.mjs +87 -0
- package/dist/esm/index.mjs +1 -0
- package/dist/esm/indexing/index.mjs +9 -0
- package/dist/esm/indexing/searcher.mjs +51 -0
- package/dist/esm/indexing/writer.mjs +26 -0
- package/dist/esm/integrations/index.mjs +6 -0
- package/dist/esm/integrations/integrations.mjs +36 -0
- package/dist/esm/io/bytes.mjs +82 -0
- package/dist/esm/io/files.mjs +325 -0
- package/dist/esm/io/image.mjs +24 -0
- package/dist/esm/io/index.mjs +18 -0
- package/dist/esm/io/streams.mjs +224 -0
- package/dist/esm/io/zip.mjs +232 -0
- package/dist/esm/job/decorators.mjs +21 -0
- package/dist/esm/job/index.mjs +9 -0
- package/dist/esm/job/scheduler.mjs +328 -0
- package/dist/esm/junit/index.mjs +2 -0
- package/dist/esm/junit/junit.mjs +48 -0
- package/dist/esm/kafka/consumer.mjs +51 -0
- package/dist/esm/kafka/index.mjs +9 -0
- package/dist/esm/kafka/producer.mjs +51 -0
- package/dist/esm/log/index.mjs +6 -0
- package/dist/esm/log/logging.mjs +155 -0
- package/dist/esm/mail/client.mjs +134 -0
- package/dist/esm/mail/index.mjs +6 -0
- package/dist/esm/messaging/consumer.mjs +64 -0
- package/dist/esm/messaging/decorators.mjs +21 -0
- package/dist/esm/messaging/index.mjs +12 -0
- package/dist/esm/messaging/producer.mjs +62 -0
- package/dist/esm/mongodb/client.mjs +608 -0
- package/dist/esm/mongodb/dao.mjs +360 -0
- package/dist/esm/mongodb/index.mjs +7 -0
- package/dist/esm/net/decorators.mjs +21 -0
- package/dist/esm/net/index.mjs +12 -0
- package/dist/esm/net/soap.mjs +209 -0
- package/dist/esm/net/websockets.mjs +132 -0
- package/dist/esm/net/wrappers/onClose.mjs +2 -0
- package/dist/esm/net/wrappers/onError.mjs +2 -0
- package/dist/esm/net/wrappers/onMessage.mjs +2 -0
- package/dist/esm/net/wrappers/onOpen.mjs +2 -0
- package/dist/esm/pdf/index.mjs +6 -0
- package/dist/esm/pdf/pdf.mjs +141 -0
- package/dist/esm/platform/command.mjs +28 -0
- package/dist/esm/platform/engines.mjs +51 -0
- package/dist/esm/platform/index.mjs +27 -0
- package/dist/esm/platform/lifecycle.mjs +30 -0
- package/dist/esm/platform/os.mjs +32 -0
- package/dist/esm/platform/problems.mjs +108 -0
- package/dist/esm/platform/registry.mjs +300 -0
- package/dist/esm/platform/repository.mjs +479 -0
- package/dist/esm/platform/workspace.mjs +555 -0
- package/dist/esm/qldb/index.mjs +6 -0
- package/dist/esm/qldb/qldb.mjs +5 -0
- package/dist/esm/rabbitmq/consumer.mjs +31 -0
- package/dist/esm/rabbitmq/index.mjs +9 -0
- package/dist/esm/rabbitmq/producer.mjs +19 -0
- package/dist/esm/redis/client.mjs +171 -0
- package/dist/esm/redis/index.mjs +6 -0
- package/dist/esm/security/decorators.mjs +29 -0
- package/dist/esm/security/index.mjs +10 -0
- package/dist/esm/security/oauth.mjs +56 -0
- package/dist/esm/security/user.mjs +69 -0
- package/dist/esm/template/engines.mjs +120 -0
- package/dist/esm/template/index.mjs +6 -0
- package/dist/esm/utils/alphanumeric.mjs +88 -0
- package/dist/esm/utils/base64.mjs +85 -0
- package/dist/esm/utils/converter.mjs +59 -0
- package/dist/esm/utils/digest.mjs +148 -0
- package/dist/esm/utils/escape.mjs +141 -0
- package/dist/esm/utils/hex.mjs +85 -0
- package/dist/esm/utils/index.mjs +38 -0
- package/dist/esm/utils/jsonpath.mjs +470 -0
- package/dist/esm/utils/qrcode.mjs +22 -0
- package/dist/esm/utils/url.mjs +63 -0
- package/dist/esm/utils/utf8.mjs +42 -0
- package/dist/esm/utils/uuid.mjs +29 -0
- package/dist/esm/utils/xml.mjs +38 -0
- package/package.json +58 -0
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var resource_http_controller_exports = {};
|
|
19
|
+
__export(resource_http_controller_exports, {
|
|
20
|
+
HttpController: () => HttpController,
|
|
21
|
+
service: () => service
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(resource_http_controller_exports);
|
|
24
|
+
var import_response = require("../response");
|
|
25
|
+
var import_request = require("../request");
|
|
26
|
+
var import_resource_mappings = require("./resource-mappings");
|
|
27
|
+
var import_log = require("@aerokit/sdk/log");
|
|
28
|
+
const { match } = dirigibleRequire("modules/src/http/path-to-regexp/6.2.1/index.js");
|
|
29
|
+
const logger = import_log.Logging.getLogger("http.rs.controller");
|
|
30
|
+
function getRequest() {
|
|
31
|
+
return import_request.Request;
|
|
32
|
+
}
|
|
33
|
+
function getResponse() {
|
|
34
|
+
return import_response.Response;
|
|
35
|
+
}
|
|
36
|
+
function service(oConfig) {
|
|
37
|
+
let config;
|
|
38
|
+
if (oConfig !== void 0) {
|
|
39
|
+
if (typeof oConfig === "object" || oConfig instanceof import_resource_mappings.ResourceMappings) {
|
|
40
|
+
config = oConfig;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return new HttpController(config);
|
|
44
|
+
}
|
|
45
|
+
class HttpController {
|
|
46
|
+
/**
|
|
47
|
+
* Constructor function for HttpController instances.
|
|
48
|
+
*
|
|
49
|
+
* @param oMappings The mappings configuration for this controller.
|
|
50
|
+
*/
|
|
51
|
+
constructor(oMappings) {
|
|
52
|
+
if (oMappings instanceof import_resource_mappings.ResourceMappings) {
|
|
53
|
+
this.resourceMappings = oMappings;
|
|
54
|
+
} else if (typeof oMappings === "object" || oMappings === void 0) {
|
|
55
|
+
this.resourceMappings = new import_resource_mappings.ResourceMappings(oMappings, this);
|
|
56
|
+
} else {
|
|
57
|
+
this.resourceMappings = new import_resource_mappings.ResourceMappings({}, this);
|
|
58
|
+
}
|
|
59
|
+
this.resource = this.resourcePath = this.resourceMappings.resourcePath.bind(this.resourceMappings);
|
|
60
|
+
["get", "post", "put", "delete", "remove", "method"].forEach((sMethodName) => {
|
|
61
|
+
this[sMethodName] = (...allArguments) => {
|
|
62
|
+
if (allArguments.length < 1)
|
|
63
|
+
throw Error("Insufficient arguments provided to HttpController method " + sMethodName + ".");
|
|
64
|
+
let sPath = allArguments[0];
|
|
65
|
+
if (sPath === void 0)
|
|
66
|
+
sPath = "";
|
|
67
|
+
const sVerb = allArguments[1];
|
|
68
|
+
const arrConsumes = allArguments[2];
|
|
69
|
+
const arrProduces = allArguments[3];
|
|
70
|
+
const resource = this.resourceMappings.find(sPath, sVerb, arrConsumes, arrProduces) || this.resourceMappings.resource(sPath);
|
|
71
|
+
const resourceMethodArgs = allArguments.slice(1);
|
|
72
|
+
resource[sMethodName].apply(resource, resourceMethodArgs);
|
|
73
|
+
return this;
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Alias for execute.
|
|
79
|
+
*/
|
|
80
|
+
listen(request2, response2) {
|
|
81
|
+
this.execute(request2, response2);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Executes the request handling logic, finding the best matching resource and handler.
|
|
85
|
+
*/
|
|
86
|
+
execute(request2, response2) {
|
|
87
|
+
request2 = request2 || getRequest();
|
|
88
|
+
const requestPath = request2.getResourcePath();
|
|
89
|
+
const method = request2.getMethod().toLowerCase();
|
|
90
|
+
const _oConfiguration = this.resourceMappings.configuration();
|
|
91
|
+
const matches = matchRequestUrl(requestPath, method, _oConfiguration);
|
|
92
|
+
let resourceHandler;
|
|
93
|
+
if (matches && matches[0]) {
|
|
94
|
+
const verbHandlers = _oConfiguration[matches[0].d][method];
|
|
95
|
+
if (verbHandlers) {
|
|
96
|
+
resourceHandler = verbHandlers.filter((handlerDef) => {
|
|
97
|
+
return matchMediaType(request2, handlerDef.produces, handlerDef.consumes);
|
|
98
|
+
})[0];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
response2 = response2 || getResponse();
|
|
102
|
+
const queryParams = request2.getQueryParametersMap() || {};
|
|
103
|
+
const acceptsHeader = normalizeMediaTypeHeaderValue(request2.getHeader("Accept")) || [];
|
|
104
|
+
const contentTypeHeader = normalizeMediaTypeHeaderValue(request2.getHeader("Content-Type")) || [];
|
|
105
|
+
const resourcePath = requestPath;
|
|
106
|
+
if (resourceHandler) {
|
|
107
|
+
const ctx = {
|
|
108
|
+
"pathParameters": {},
|
|
109
|
+
"queryParameters": {},
|
|
110
|
+
"response": response2,
|
|
111
|
+
"res": response2,
|
|
112
|
+
"request": request2,
|
|
113
|
+
"req": request2
|
|
114
|
+
};
|
|
115
|
+
if (matches[0].pathParams) {
|
|
116
|
+
ctx.pathParameters = matches[0].pathParams;
|
|
117
|
+
}
|
|
118
|
+
ctx.queryParameters = queryParams;
|
|
119
|
+
const noop = function() {
|
|
120
|
+
};
|
|
121
|
+
let _before, _serve, _catch, _finally;
|
|
122
|
+
_before = resourceHandler.before || noop;
|
|
123
|
+
_serve = resourceHandler.handler || resourceHandler.serve || noop;
|
|
124
|
+
_catch = resourceHandler.catch || catchErrorHandler.bind(this, {
|
|
125
|
+
path: resourcePath,
|
|
126
|
+
method: method.toUpperCase(),
|
|
127
|
+
contentType: contentTypeHeader.join(","),
|
|
128
|
+
accepts: acceptsHeader.join(",")
|
|
129
|
+
});
|
|
130
|
+
_finally = resourceHandler.finally || noop;
|
|
131
|
+
const callbackArgs = [ctx, request2, response2, resourceHandler, this];
|
|
132
|
+
try {
|
|
133
|
+
logger.trace("Before serving request for Resource[{}], Method[{}], Content-Type[{}], Accept[{}]", resourcePath, method.toUpperCase(), contentTypeHeader, acceptsHeader);
|
|
134
|
+
_before.apply(this, callbackArgs);
|
|
135
|
+
if (!response2.isCommitted()) {
|
|
136
|
+
logger.trace("Serving request for Resource[{}], Method[{}], Content-Type[{}], Accept[{}]", resourcePath, method.toUpperCase(), contentTypeHeader, acceptsHeader);
|
|
137
|
+
_serve.apply(this, callbackArgs);
|
|
138
|
+
logger.trace("Serving request for Resource[{}], Method[{}], Content-Type[{}], Accept[{}] finished", resourcePath, method.toUpperCase(), contentTypeHeader, acceptsHeader);
|
|
139
|
+
}
|
|
140
|
+
} catch (err) {
|
|
141
|
+
try {
|
|
142
|
+
callbackArgs.splice(1, 0, err);
|
|
143
|
+
_catch.apply(this, callbackArgs);
|
|
144
|
+
} catch (_catchErr) {
|
|
145
|
+
logger.error("Serving request for Resource[{}], Method[{}], Content-Type[{}], Accept[{}] error handler threw error", _catchErr);
|
|
146
|
+
throw _catchErr;
|
|
147
|
+
}
|
|
148
|
+
} finally {
|
|
149
|
+
HttpController.prototype.closeResponse.call(this);
|
|
150
|
+
try {
|
|
151
|
+
_finally.apply(this, []);
|
|
152
|
+
} catch (_finallyErr) {
|
|
153
|
+
logger.error("Serving request for Resource[{}], Method[{}], Content-Type[{}], Accept[{}] post handler threw error", _finallyErr);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
} else {
|
|
157
|
+
logger.error("No suitable resource handler for Resource[{}], Method[{}], Content-Type[{}], Accept[{}] found", resourcePath, method.toUpperCase(), contentTypeHeader, acceptsHeader);
|
|
158
|
+
this.sendError(response2.BAD_REQUEST, void 0, "Bad Request", "No suitable processor for this request.");
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Returns the ResourceMappings instance of this controller.
|
|
163
|
+
*/
|
|
164
|
+
mappings() {
|
|
165
|
+
return this.resourceMappings;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Sends an error response to the client, formatted based on the accepted media type.
|
|
169
|
+
*/
|
|
170
|
+
sendError(httpErrorCode, applicationErrorCode, errorName, errorDetails) {
|
|
171
|
+
const clientAcceptMediaTypes = normalizeMediaTypeHeaderValue(import_request.Request.getHeader("Accept")) || ["application/json"];
|
|
172
|
+
const isHtml = clientAcceptMediaTypes.some((acceptMediaType) => isMimeTypeCompatible("*/html", acceptMediaType));
|
|
173
|
+
import_response.Response.setStatus(httpErrorCode || import_response.Response.INTERNAL_SERVER_ERROR);
|
|
174
|
+
if (isHtml) {
|
|
175
|
+
const message = errorName + (applicationErrorCode !== void 0 ? "[" + applicationErrorCode + "]" : "") + (errorDetails ? ": " + errorDetails : "");
|
|
176
|
+
import_response.Response.sendError(httpErrorCode || import_response.Response.INTERNAL_SERVER_ERROR, message);
|
|
177
|
+
} else {
|
|
178
|
+
const body = {
|
|
179
|
+
"code": applicationErrorCode,
|
|
180
|
+
"error": errorName,
|
|
181
|
+
"details": errorDetails
|
|
182
|
+
};
|
|
183
|
+
import_response.Response.setHeader("Content-Type", "application/json");
|
|
184
|
+
import_response.Response.print(JSON.stringify(body, null, 2));
|
|
185
|
+
}
|
|
186
|
+
this.closeResponse();
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Flushes and closes the HTTP response stream.
|
|
190
|
+
*/
|
|
191
|
+
closeResponse() {
|
|
192
|
+
import_response.Response.flush();
|
|
193
|
+
import_response.Response.close();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
function matchedRouteDefinitionsSorter(p, n) {
|
|
197
|
+
p.w = calculateMatchedRouteWeight(p);
|
|
198
|
+
n.w = calculateMatchedRouteWeight(n);
|
|
199
|
+
if (n.w === p.w) {
|
|
200
|
+
const m1 = p.d.match(/{(.*?)}/g);
|
|
201
|
+
const placeholdersCount1 = m1 !== null ? m1.length : 0;
|
|
202
|
+
const m2 = n.d.match(/{(.*?)}/g);
|
|
203
|
+
const placeholdersCount2 = m2 !== null ? m2.length : 0;
|
|
204
|
+
if (placeholdersCount1 > placeholdersCount2) {
|
|
205
|
+
n.w = n.w + 1;
|
|
206
|
+
} else if (placeholdersCount1 < placeholdersCount2) {
|
|
207
|
+
p.w = p.w + 1;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return n.w - p.w;
|
|
211
|
+
}
|
|
212
|
+
function calculateMatchedRouteWeight(matchedRoute) {
|
|
213
|
+
return matchedRoute.params && Object.keys(matchedRoute.params).length > 0 ? 0 : 1;
|
|
214
|
+
}
|
|
215
|
+
function transformPathParamsDeclaredInBraces(pathDefinition) {
|
|
216
|
+
const pathParamsInBracesMatcher = /({(\w*\*?)})/g;
|
|
217
|
+
return pathDefinition.replace(pathParamsInBracesMatcher, ":$2");
|
|
218
|
+
}
|
|
219
|
+
function matchRequestUrl(requestPath, method, cfg) {
|
|
220
|
+
return Object.entries(cfg).filter(([_, handlers]) => handlers && handlers[method]).map(([path, _]) => path).reduce((matches, path) => matchingRouteDefinitionsReducer(matches, path, requestPath), []).sort(matchedRouteDefinitionsSorter);
|
|
221
|
+
}
|
|
222
|
+
function matchingRouteDefinitionsReducer(matchedDefinitions, definedPath, requestPath) {
|
|
223
|
+
const pathMatcher = match(transformPathParamsDeclaredInBraces(definedPath));
|
|
224
|
+
const matched = pathMatcher(requestPath);
|
|
225
|
+
if (matched) {
|
|
226
|
+
const pathParams = matched.params;
|
|
227
|
+
const matchedDefinition = {
|
|
228
|
+
p: requestPath,
|
|
229
|
+
d: definedPath,
|
|
230
|
+
pathParams
|
|
231
|
+
};
|
|
232
|
+
matchedDefinitions.push(matchedDefinition);
|
|
233
|
+
}
|
|
234
|
+
return matchedDefinitions;
|
|
235
|
+
}
|
|
236
|
+
function normalizeMediaTypeHeaderValue(sMediaType) {
|
|
237
|
+
if (sMediaType === void 0 || sMediaType === null)
|
|
238
|
+
return;
|
|
239
|
+
let arrMediaType = sMediaType.split(",");
|
|
240
|
+
arrMediaType = arrMediaType.map((mimeTypeEntry) => {
|
|
241
|
+
return mimeTypeEntry.replace("\\", "").split(";")[0].trim();
|
|
242
|
+
});
|
|
243
|
+
return arrMediaType.filter((type) => type.length > 0);
|
|
244
|
+
}
|
|
245
|
+
function isMimeTypeCompatible(source, target) {
|
|
246
|
+
if (source === target)
|
|
247
|
+
return true;
|
|
248
|
+
const targetM = target.split("/");
|
|
249
|
+
const sourceM = source.split("/");
|
|
250
|
+
if (targetM[0] === "*" && targetM[1] === sourceM[1])
|
|
251
|
+
return true;
|
|
252
|
+
if (sourceM[0] === "*" && targetM[1] === sourceM[1])
|
|
253
|
+
return true;
|
|
254
|
+
if (targetM[1] === "*" && targetM[0] === sourceM[0])
|
|
255
|
+
return true;
|
|
256
|
+
if (sourceM[1] === "*" && targetM[0] === sourceM[0])
|
|
257
|
+
return true;
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
const catchErrorHandler = function(logctx, ctx, err, request2, response2) {
|
|
261
|
+
if (ctx.suppressStack) {
|
|
262
|
+
const detailsMsg = (ctx.errorName || "") + (ctx.errorCode ? " [" + ctx.errorCode + "]" : "") + (ctx.errorMessage ? ": " + ctx.errorMessage : "");
|
|
263
|
+
logger.info("Serving resource[{}], Verb[{}], Content-Type[{}], Accept[{}] finished in error. {}", logctx.path, logctx.method, logctx.contentType, logctx.accepts, detailsMsg);
|
|
264
|
+
} else {
|
|
265
|
+
logger.error("Serving resource[{}], Verb[{}], Content-Type[{}], Accept[{}] finished in error", logctx.path, logctx.method, logctx.contentType, logctx.accepts, err);
|
|
266
|
+
}
|
|
267
|
+
const httpErrorCode = ctx.httpErrorCode || response2.INTERNAL_SERVER_ERROR;
|
|
268
|
+
const errorMessage = ctx.errorMessage || err && err.message;
|
|
269
|
+
const errorName = ctx.errorName || err && err.name;
|
|
270
|
+
const errorCode = ctx.errorCode;
|
|
271
|
+
this.sendError(httpErrorCode, errorCode, errorName, errorMessage);
|
|
272
|
+
};
|
|
273
|
+
const matchMediaType = function(request2, producesMediaTypes, consumesMediaTypes) {
|
|
274
|
+
let isProduceMatched = false;
|
|
275
|
+
const acceptsMediaTypes = normalizeMediaTypeHeaderValue(request2.getHeader("Accept"));
|
|
276
|
+
if (!acceptsMediaTypes || acceptsMediaTypes.length === 0 || acceptsMediaTypes.includes("*/*")) {
|
|
277
|
+
isProduceMatched = true;
|
|
278
|
+
} else {
|
|
279
|
+
if (producesMediaTypes && producesMediaTypes.length) {
|
|
280
|
+
const matchedProducesMIME = acceptsMediaTypes.filter((acceptsMediaType) => {
|
|
281
|
+
return producesMediaTypes.some((producesMediaType) => {
|
|
282
|
+
return isMimeTypeCompatible(acceptsMediaType, producesMediaType);
|
|
283
|
+
});
|
|
284
|
+
});
|
|
285
|
+
isProduceMatched = matchedProducesMIME && matchedProducesMIME.length > 0;
|
|
286
|
+
} else {
|
|
287
|
+
isProduceMatched = true;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
let isConsumeMatched = false;
|
|
291
|
+
const contentTypeMediaTypes = normalizeMediaTypeHeaderValue(request2.getContentType());
|
|
292
|
+
if (!consumesMediaTypes || consumesMediaTypes.length === 0 || consumesMediaTypes.includes("*/*")) {
|
|
293
|
+
isConsumeMatched = true;
|
|
294
|
+
} else {
|
|
295
|
+
if (contentTypeMediaTypes && consumesMediaTypes && consumesMediaTypes.length) {
|
|
296
|
+
const matchedConsumesMIME = contentTypeMediaTypes.filter((contentTypeMediaType) => {
|
|
297
|
+
return consumesMediaTypes.some((consumesMediaType) => {
|
|
298
|
+
return isMimeTypeCompatible(contentTypeMediaType, consumesMediaType);
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
isConsumeMatched = matchedConsumesMIME && matchedConsumesMIME.length > 0;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return isProduceMatched && isConsumeMatched;
|
|
305
|
+
};
|
|
306
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2h0dHAvcnMvcmVzb3VyY2UtaHR0cC1jb250cm9sbGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBSZXNwb25zZSBhcyByZXNwb25zZSB9IGZyb20gXCIuLi9yZXNwb25zZVwiO1xuaW1wb3J0IHsgUmVxdWVzdCBhcyByZXF1ZXN0IH0gZnJvbSBcIi4uL3JlcXVlc3RcIjtcbmltcG9ydCB7IFJlc291cmNlTWFwcGluZ3MgfSBmcm9tIFwiLi9yZXNvdXJjZS1tYXBwaW5nc1wiO1xuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gXCJAYWVyb2tpdC9zZGsvbG9nXCI7XG5cbi8vIERlY2xhcmF0aW9uIGZvciB0aGUgZXh0ZXJuYWwgZGlyaWdpYmxlUmVxdWlyZSBmdW5jdGlvbiBhbmQgaXRzIGRlcGVuZGVuY3lcbmRlY2xhcmUgZnVuY3Rpb24gZGlyaWdpYmxlUmVxdWlyZShtb2R1bGU6IHN0cmluZyk6IGFueTtcbmNvbnN0IHsgbWF0Y2ggfSA9IGRpcmlnaWJsZVJlcXVpcmUoXCJtb2R1bGVzL3NyYy9odHRwL3BhdGgtdG8tcmVnZXhwLzYuMi4xL2luZGV4LmpzXCIpO1xuXG5jb25zdCBsb2dnZXI6IGFueSA9IExvZ2dpbmcuZ2V0TG9nZ2VyKCdodHRwLnJzLmNvbnRyb2xsZXInKTtcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIHRoZSBjb250ZXh0IG9iamVjdCBwYXNzZWQgdG8gaGFuZGxlciBmdW5jdGlvbnMgKGJlZm9yZSwgc2VydmUsIGNhdGNoKS5cbiAqL1xuaW50ZXJmYWNlIFJlcXVlc3RDb250ZXh0IHtcbiAgICBwYXRoUGFyYW1ldGVyczogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICBxdWVyeVBhcmFtZXRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gICAgcmVzcG9uc2U6IGFueTtcbiAgICByZXM6IGFueTtcbiAgICByZXF1ZXN0OiBhbnk7XG4gICAgcmVxOiBhbnk7XG4gICAgLy8gQ29udGV4dCBwcm9wZXJ0aWVzIGZvciBlcnJvciBoYW5kbGluZyBtaWdodCBhbHNvIGJlIGF0dGFjaGVkIGhlcmVcbiAgICBzdXBwcmVzc1N0YWNrPzogYm9vbGVhbjtcbiAgICBodHRwRXJyb3JDb2RlPzogbnVtYmVyO1xuICAgIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgICBlcnJvck5hbWU/OiBzdHJpbmc7XG4gICAgZXJyb3JDb2RlPzogYW55O1xufVxuXG5mdW5jdGlvbiBnZXRSZXF1ZXN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHJlcXVlc3Q7XG59XG5mdW5jdGlvbiBnZXRSZXNwb25zZSgpOiBhbnkge1xuICAgIHJldHVybiByZXNwb25zZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2VydmljZSAoSHR0cENvbnRyb2xsZXIpIGluc3RhbmNlLCBvcHRpb25hbGx5IGluaXRpYWxpemVkIHdpdGggb01hcHBpbmdzLlxuICpcbiAqIEBwYXJhbSBvQ29uZmlnIENvbmZpZ3VyYXRpb24gb2JqZWN0IG9yIGNvbmZpZ3VyYXRpb24gYnVpbGRlciB3aXRoIGNvbmZpZ3VyYXRpb24oKSBnZXR0ZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIG5ldyBIdHRwQ29udHJvbGxlciBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2Uob0NvbmZpZz86IGFueSk6IEh0dHBDb250cm9sbGVyIHtcbiAgICBsZXQgY29uZmlnOiBSZXNvdXJjZU1hcHBpbmdzIHwgYW55O1xuICAgIGlmIChvQ29uZmlnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvQ29uZmlnID09PSAnb2JqZWN0JyB8fCBvQ29uZmlnIGluc3RhbmNlb2YgUmVzb3VyY2VNYXBwaW5ncykge1xuICAgICAgICAgICAgY29uZmlnID0gb0NvbmZpZztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEh0dHBDb250cm9sbGVyKGNvbmZpZyk7XG59XG5cbi8qKlxuICogVGhlIG1haW4gY2xhc3MgZm9yIGhhbmRsaW5nIEhUVFAgcmVxdWVzdHMgYW5kIHJvdXRpbmcgdGhlbSB0byB0aGUgY29ycmVjdCByZXNvdXJjZSBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEh0dHBDb250cm9sbGVyIHtcblxuICAgIHJlc291cmNlOiBGdW5jdGlvbjtcbiAgICByZXNvdXJjZVBhdGg6IEZ1bmN0aW9uO1xuICAgIHJlc291cmNlTWFwcGluZ3M6IFJlc291cmNlTWFwcGluZ3M7XG5cbiAgICAvLyBJbmRleCBzaWduYXR1cmUgdG8gYWxsb3cgZHluYW1pYyBtZXRob2QgYXNzaWdubWVudCBpbiB0aGUgY29uc3RydWN0b3JcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgSHR0cENvbnRyb2xsZXIgaW5zdGFuY2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9NYXBwaW5ncyBUaGUgbWFwcGluZ3MgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBjb250cm9sbGVyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9NYXBwaW5ncz86IFJlc291cmNlTWFwcGluZ3MgfCBhbnkpIHtcbiAgICAgICAgaWYgKG9NYXBwaW5ncyBpbnN0YW5jZW9mIFJlc291cmNlTWFwcGluZ3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VNYXBwaW5ncyA9IG9NYXBwaW5ncztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb01hcHBpbmdzID09PSAnb2JqZWN0JyB8fCBvTWFwcGluZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZU1hcHBpbmdzID0gbmV3IFJlc291cmNlTWFwcGluZ3Mob01hcHBpbmdzLCB0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gaWYgaW5wdXQgaXMgdW5leHBlY3RlZFxuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZU1hcHBpbmdzID0gbmV3IFJlc291cmNlTWFwcGluZ3Moe30sIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWxpYXMgZm9yIHJlc291cmNlTWFwcGluZ3MucmVzb3VyY2VcbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VQYXRoID0gdGhpcy5yZXNvdXJjZU1hcHBpbmdzLnJlc291cmNlUGF0aC5iaW5kKHRoaXMucmVzb3VyY2VNYXBwaW5ncyk7XG5cbiAgICAgICAgLy8gd2VhdmUtaW4gSFRUUCBtZXRob2QtYmFzZWQgZmFjdG9yeSBmdW5jdGlvbnMgLSBzaG9ydGN1dCBmb3Igc2VydmljZSgpLnJlc291cmNlKHNQYXRoKS5tZXRob2RcbiAgICAgICAgWydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3JlbW92ZScsICdtZXRob2QnXS5mb3JFYWNoKChzTWV0aG9kTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzW3NNZXRob2ROYW1lXSA9ICguLi5hbGxBcmd1bWVudHM6IGFueVtdKTogSHR0cENvbnRyb2xsZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbGxBcmd1bWVudHMubGVuZ3RoIDwgMSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0luc3VmZmljaWVudCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gSHR0cENvbnRyb2xsZXIgbWV0aG9kICcgKyBzTWV0aG9kTmFtZSArICcuJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBzUGF0aCBpcyBhbHdheXMgdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAgICAgICAgICAgICAgbGV0IHNQYXRoID0gYWxsQXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIGlmIChzUGF0aCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBzUGF0aCA9IFwiXCI7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBhcmd1bWVudHMgKHNWZXJiLCBhcnJDb25zdW1lcywgYXJyUHJvZHVjZXMpIGFyZSB1c2VkIGJ5IFJlc291cmNlTWFwcGluZ3MuZmluZC9yZXNvdXJjZVxuICAgICAgICAgICAgICAgIGNvbnN0IHNWZXJiID0gYWxsQXJndW1lbnRzWzFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyckNvbnN1bWVzID0gYWxsQXJndW1lbnRzWzJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyclByb2R1Y2VzID0gYWxsQXJndW1lbnRzWzNdO1xuXG4gICAgICAgICAgICAgICAgLy8gRmluZCBleGlzdGluZyByZXNvdXJjZSBvciBjcmVhdGUgYSBuZXcgb25lIGJhc2VkIG9uIHRoZSBwYXRoIChhbmQgb3RoZXIgb3B0aW9uYWwgY29uc3RyYWludHMpXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2U6IGFueSA9IHRoaXMucmVzb3VyY2VNYXBwaW5ncy5maW5kKHNQYXRoLCBzVmVyYiwgYXJyQ29uc3VtZXMsIGFyclByb2R1Y2VzKSB8fCB0aGlzLnJlc291cmNlTWFwcGluZ3MucmVzb3VyY2Uoc1BhdGgpO1xuXG4gICAgICAgICAgICAgICAgLy8gUGFzcyBhbGwgYXJndW1lbnRzICpleGNlcHQqIHRoZSBzUGF0aCB0byB0aGUgY29ycmVzcG9uZGluZyBtZXRob2Qgb2YgdGhlIHJlc291cmNlXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VNZXRob2RBcmdzID0gYWxsQXJndW1lbnRzLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIG1ldGhvZCBvbiB0aGUgcmVzb3VyY2UgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICByZXNvdXJjZVtzTWV0aG9kTmFtZV0uYXBwbHkocmVzb3VyY2UsIHJlc291cmNlTWV0aG9kQXJncyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgZXhlY3V0ZS5cbiAgICAgKi9cbiAgICBsaXN0ZW4ocmVxdWVzdDogYW55LCByZXNwb25zZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZShyZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIHJlcXVlc3QgaGFuZGxpbmcgbG9naWMsIGZpbmRpbmcgdGhlIGJlc3QgbWF0Y2hpbmcgcmVzb3VyY2UgYW5kIGhhbmRsZXIuXG4gICAgICovXG4gICAgZXhlY3V0ZShyZXF1ZXN0PzogYW55LCByZXNwb25zZT86IGFueSk6IHZvaWQge1xuICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdCB8fCBnZXRSZXF1ZXN0KCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQYXRoOiBzdHJpbmcgPSByZXF1ZXN0LmdldFJlc291cmNlUGF0aCgpO1xuICAgICAgICBjb25zdCBtZXRob2Q6IHN0cmluZyA9IHJlcXVlc3QuZ2V0TWV0aG9kKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgX29Db25maWd1cmF0aW9uOiBhbnkgPSB0aGlzLnJlc291cmNlTWFwcGluZ3MuY29uZmlndXJhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoZXM6IGFueVtdID0gbWF0Y2hSZXF1ZXN0VXJsKHJlcXVlc3RQYXRoLCBtZXRob2QsIF9vQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGxldCByZXNvdXJjZUhhbmRsZXI6IGFueTtcblxuICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzWzBdKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiSGFuZGxlcnM6IGFueVtdID0gX29Db25maWd1cmF0aW9uW21hdGNoZXNbMF0uZF1bbWV0aG9kXTtcbiAgICAgICAgICAgIGlmICh2ZXJiSGFuZGxlcnMpIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZUhhbmRsZXIgPSB2ZXJiSGFuZGxlcnMuZmlsdGVyKChoYW5kbGVyRGVmKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaE1lZGlhVHlwZShyZXF1ZXN0LCBoYW5kbGVyRGVmLnByb2R1Y2VzLCBoYW5kbGVyRGVmLmNvbnN1bWVzKTtcbiAgICAgICAgICAgICAgICB9KVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2UgfHwgZ2V0UmVzcG9uc2UoKTtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSByZXF1ZXN0LmdldFF1ZXJ5UGFyYW1ldGVyc01hcCgpIHx8IHt9O1xuICAgICAgICBjb25zdCBhY2NlcHRzSGVhZGVyOiBzdHJpbmdbXSA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0SGVhZGVyKCdBY2NlcHQnKSkgfHwgW107XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlSGVhZGVyOiBzdHJpbmdbXSA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKSkgfHwgW107XG4gICAgICAgIGNvbnN0IHJlc291cmNlUGF0aDogc3RyaW5nID0gcmVxdWVzdFBhdGg7XG5cbiAgICAgICAgaWYgKHJlc291cmNlSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgY3R4OiBSZXF1ZXN0Q29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICBcInBhdGhQYXJhbWV0ZXJzXCI6IHt9LFxuICAgICAgICAgICAgICAgIFwicXVlcnlQYXJhbWV0ZXJzXCI6IHt9LFxuICAgICAgICAgICAgICAgIFwicmVzcG9uc2VcIjogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgXCJyZXNcIjogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgXCJyZXF1ZXN0XCI6IHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgXCJyZXFcIjogcmVxdWVzdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzWzBdLnBhdGhQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBjdHgucGF0aFBhcmFtZXRlcnMgPSBtYXRjaGVzWzBdLnBhdGhQYXJhbXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHgucXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbXM7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vb3AgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgICAgICAgICBsZXQgX2JlZm9yZTogRnVuY3Rpb24sIF9zZXJ2ZTogRnVuY3Rpb24sIF9jYXRjaDogRnVuY3Rpb24sIF9maW5hbGx5OiBGdW5jdGlvbjtcbiAgICAgICAgICAgIF9iZWZvcmUgPSByZXNvdXJjZUhhbmRsZXIuYmVmb3JlIHx8IG5vb3A7XG4gICAgICAgICAgICBfc2VydmUgPSByZXNvdXJjZUhhbmRsZXIuaGFuZGxlciB8fCByZXNvdXJjZUhhbmRsZXIuc2VydmUgfHwgbm9vcDtcbiAgICAgICAgICAgIF9jYXRjaCA9IHJlc291cmNlSGFuZGxlci5jYXRjaCB8fCBjYXRjaEVycm9ySGFuZGxlci5iaW5kKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiByZXNvdXJjZVBhdGgsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogY29udGVudFR5cGVIZWFkZXIuam9pbignLCcpLFxuICAgICAgICAgICAgICAgIGFjY2VwdHM6IGFjY2VwdHNIZWFkZXIuam9pbignLCcpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF9maW5hbGx5ID0gcmVzb3VyY2VIYW5kbGVyLmZpbmFsbHkgfHwgbm9vcDtcblxuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tBcmdzOiBhbnlbXSA9IFtjdHgsIHJlcXVlc3QsIHJlc3BvbnNlLCByZXNvdXJjZUhhbmRsZXIsIHRoaXNdO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci50cmFjZSgnQmVmb3JlIHNlcnZpbmcgcmVxdWVzdCBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuICAgICAgICAgICAgICAgIF9iZWZvcmUuYXBwbHkodGhpcywgY2FsbGJhY2tBcmdzKTtcblxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuaXNDb21taXR0ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIudHJhY2UoJ1NlcnZpbmcgcmVxdWVzdCBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICBfc2VydmUuYXBwbHkodGhpcywgY2FsbGJhY2tBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnRyYWNlKCdTZXJ2aW5nIHJlcXVlc3QgZm9yIFJlc291cmNlW3t9XSwgTWV0aG9kW3t9XSwgQ29udGVudC1UeXBlW3t9XSwgQWNjZXB0W3t9XSBmaW5pc2hlZCcsIHJlc291cmNlUGF0aCwgbWV0aG9kLnRvVXBwZXJDYXNlKCksIGNvbnRlbnRUeXBlSGVhZGVyLCBhY2NlcHRzSGVhZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQXJncy5zcGxpY2UoMSwgMCwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgX2NhdGNoLmFwcGx5KHRoaXMsIGNhbGxiYWNrQXJncyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoX2NhdGNoRXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU2VydmluZyByZXF1ZXN0IGZvciBSZXNvdXJjZVt7fV0sIE1ldGhvZFt7fV0sIENvbnRlbnQtVHlwZVt7fV0sIEFjY2VwdFt7fV0gZXJyb3IgaGFuZGxlciB0aHJldyBlcnJvcicsIF9jYXRjaEVycik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IF9jYXRjaEVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIEh0dHBDb250cm9sbGVyLnByb3RvdHlwZS5jbG9zZVJlc3BvbnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgX2ZpbmFsbHkuYXBwbHkodGhpcywgW10pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKF9maW5hbGx5RXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU2VydmluZyByZXF1ZXN0IGZvciBSZXNvdXJjZVt7fV0sIE1ldGhvZFt7fV0sIENvbnRlbnQtVHlwZVt7fV0sIEFjY2VwdFt7fV0gcG9zdCBoYW5kbGVyIHRocmV3IGVycm9yJywgX2ZpbmFsbHlFcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignTm8gc3VpdGFibGUgcmVzb3VyY2UgaGFuZGxlciBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dIGZvdW5kJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuICAgICAgICAgICAgdGhpcy5zZW5kRXJyb3IocmVzcG9uc2UuQkFEX1JFUVVFU1QsIHVuZGVmaW5lZCwgJ0JhZCBSZXF1ZXN0JywgJ05vIHN1aXRhYmxlIHByb2Nlc3NvciBmb3IgdGhpcyByZXF1ZXN0LicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgUmVzb3VyY2VNYXBwaW5ncyBpbnN0YW5jZSBvZiB0aGlzIGNvbnRyb2xsZXIuXG4gICAgICovXG4gICAgbWFwcGluZ3MoKTogUmVzb3VyY2VNYXBwaW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlTWFwcGluZ3M7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNlbmRzIGFuIGVycm9yIHJlc3BvbnNlIHRvIHRoZSBjbGllbnQsIGZvcm1hdHRlZCBiYXNlZCBvbiB0aGUgYWNjZXB0ZWQgbWVkaWEgdHlwZS5cbiAgICAgKi9cbiAgICBzZW5kRXJyb3IoaHR0cEVycm9yQ29kZTogbnVtYmVyLCBhcHBsaWNhdGlvbkVycm9yQ29kZTogYW55LCBlcnJvck5hbWU6IHN0cmluZywgZXJyb3JEZXRhaWxzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWNjZXB0TWVkaWFUeXBlczogc3RyaW5nW10gPSBub3JtYWxpemVNZWRpYVR5cGVIZWFkZXJWYWx1ZShyZXF1ZXN0LmdldEhlYWRlcignQWNjZXB0JykpIHx8IFsnYXBwbGljYXRpb24vanNvbiddO1xuICAgICAgICBjb25zdCBpc0h0bWw6IGJvb2xlYW4gPSBjbGllbnRBY2NlcHRNZWRpYVR5cGVzLnNvbWUoKGFjY2VwdE1lZGlhVHlwZSkgPT4gaXNNaW1lVHlwZUNvbXBhdGlibGUoJyovaHRtbCcsIGFjY2VwdE1lZGlhVHlwZSkpO1xuXG4gICAgICAgIHJlc3BvbnNlLnNldFN0YXR1cyhodHRwRXJyb3JDb2RlIHx8IHJlc3BvbnNlLklOVEVSTkFMX1NFUlZFUl9FUlJPUik7XG5cbiAgICAgICAgaWYgKGlzSHRtbCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZTogc3RyaW5nID0gZXJyb3JOYW1lICsgKGFwcGxpY2F0aW9uRXJyb3JDb2RlICE9PSB1bmRlZmluZWQgPyAnWycgKyBhcHBsaWNhdGlvbkVycm9yQ29kZSArICddJyA6ICcnKSArIChlcnJvckRldGFpbHMgPyAnOiAnICsgZXJyb3JEZXRhaWxzIDogJycpO1xuICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZEVycm9yKGh0dHBFcnJvckNvZGUgfHwgcmVzcG9uc2UuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCBtZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgICAgICAgICAgXCJjb2RlXCI6IGFwcGxpY2F0aW9uRXJyb3JDb2RlLFxuICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogZXJyb3JOYW1lLFxuICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBlcnJvckRldGFpbHNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgcmVzcG9uc2UucHJpbnQoSlNPTi5zdHJpbmdpZnkoYm9keSwgbnVsbCwgMikpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xvc2VSZXNwb25zZSgpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGbHVzaGVzIGFuZCBjbG9zZXMgdGhlIEhUVFAgcmVzcG9uc2Ugc3RyZWFtLlxuICAgICAqL1xuICAgIGNsb3NlUmVzcG9uc2UoKTogdm9pZCB7XG4gICAgICAgIHJlc3BvbnNlLmZsdXNoKCk7XG4gICAgICAgIHJlc3BvbnNlLmNsb3NlKCk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBDdXN0b20gc29ydCBmdW5jdGlvbiBmb3IgbWF0Y2hlZCByb3V0ZSBkZWZpbml0aW9ucywgcHJlZmVycmluZyBleGFjdCBtYXRjaGVzIG92ZXIgdGhvc2Ugd2l0aCBwbGFjZWhvbGRlcnMuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZWRSb3V0ZURlZmluaXRpb25zU29ydGVyKHA6IGFueSwgbjogYW55KTogbnVtYmVyIHtcbiAgICBwLncgPSBjYWxjdWxhdGVNYXRjaGVkUm91dGVXZWlnaHQocCk7XG4gICAgbi53ID0gY2FsY3VsYXRlTWF0Y2hlZFJvdXRlV2VpZ2h0KG4pO1xuXG4gICAgaWYgKG4udyA9PT0gcC53KSB7XG4gICAgICAgIC8vIFRoZSBvbmUgd2l0aCBsZXNzIHBsYWNlaG9sZGVycyB3aW5zXG4gICAgICAgIGNvbnN0IG0xID0gcC5kLm1hdGNoKC97KC4qPyl9L2cpO1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnNDb3VudDEgPSBtMSAhPT0gbnVsbCA/IG0xLmxlbmd0aCA6IDA7XG4gICAgICAgIGNvbnN0IG0yID0gbi5kLm1hdGNoKC97KC4qPyl9L2cpO1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnNDb3VudDIgPSBtMiAhPT0gbnVsbCA/IG0yLmxlbmd0aCA6IDA7XG4gICAgICAgIGlmIChwbGFjZWhvbGRlcnNDb3VudDEgPiBwbGFjZWhvbGRlcnNDb3VudDIpIHtcbiAgICAgICAgICAgIG4udyA9IG4udyArIDE7XG4gICAgICAgIH0gZWxzZSBpZiAocGxhY2Vob2xkZXJzQ291bnQxIDwgcGxhY2Vob2xkZXJzQ291bnQyKSB7XG4gICAgICAgICAgICBwLncgPSBwLncgKyAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuLncgLSBwLnc7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaW5pdGlhbCB3ZWlnaHQgb2YgYSBtYXRjaGVkIHJvdXRlIGRlZmluaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZU1hdGNoZWRSb3V0ZVdlaWdodChtYXRjaGVkUm91dGU6IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuIChtYXRjaGVkUm91dGUucGFyYW1zICYmIE9iamVjdC5rZXlzKG1hdGNoZWRSb3V0ZS5wYXJhbXMpLmxlbmd0aCA+IDApID8gMCA6IDE7IC8vIGFsd2F5cyBwcmVmZXIgZXhhY3Qgcm91dGUgZGVmaW5pdGlvbnMgLSBzZXQgd2VpZ2h0IHRvIDFcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHBhdGggcGFyYW1ldGVycyBkZWNsYXJlZCBpbiBicmFjZXMgKGUuZy4sICcvYXBpL3twYXRoUGFyYW19JykgdG8gcGF0aC10by1yZWdleHAgZm9ybWF0IChlLmcuLCAnL2FwaS86cGF0aFBhcmFtJykuXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybVBhdGhQYXJhbXNEZWNsYXJlZEluQnJhY2VzKHBhdGhEZWZpbml0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhdGhQYXJhbXNJbkJyYWNlc01hdGNoZXIgPSAvKHsoXFx3KlxcKj8pfSkvZzsgLy8gbWF0Y2hlcyBjYXNlcyBsaWtlICcvYXBpL3twYXRoUGFyYW19JyBvciAnL2FwaS97cGF0aFBhcmFtKn0nXG4gICAgcmV0dXJuIHBhdGhEZWZpbml0aW9uLnJlcGxhY2UocGF0aFBhcmFtc0luQnJhY2VzTWF0Y2hlciwgXCI6JDJcIik7IC8vIHRyYW5zZm9ybXMgbWF0Y2hlZCBjYXNlcyB0byAnL2FwaS86cGF0aFBhcmFtJyBvciAnL2FwaS86cGF0aFBhcmFtKidcbn1cblxuLyoqXG4gKiBGaW5kcyBhbGwgcm91dGVzIGluIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgbWF0Y2ggdGhlIHJlcXVlc3QgcGF0aCBhbmQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBtYXRjaFJlcXVlc3RVcmwocmVxdWVzdFBhdGg6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGNmZzogYW55KTogYW55W10ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjZmcpXG4gICAgICAgIC5maWx0ZXIoKFtfLCBoYW5kbGVyc10pID0+IGhhbmRsZXJzICYmIChoYW5kbGVycyBhcyBhbnkpW21ldGhvZF0pXG4gICAgICAgIC5tYXAoKFtwYXRoLCBfXSkgPT4gcGF0aClcbiAgICAgICAgLnJlZHVjZSgobWF0Y2hlczogYW55W10sIHBhdGg6IHN0cmluZykgPT4gbWF0Y2hpbmdSb3V0ZURlZmluaXRpb25zUmVkdWNlcihtYXRjaGVzLCBwYXRoLCByZXF1ZXN0UGF0aCksIFtdKVxuICAgICAgICAuc29ydChtYXRjaGVkUm91dGVEZWZpbml0aW9uc1NvcnRlcik7XG59XG5cbi8qKlxuICogUmVkdWNlciBmdW5jdGlvbiB0byBhdHRlbXB0IG1hdGNoaW5nIGEgZGVmaW5lZCBwYXRoIGFnYWluc3QgdGhlIHJlcXVlc3QgcGF0aCB1c2luZyBwYXRoLXRvLXJlZ2V4cC5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hpbmdSb3V0ZURlZmluaXRpb25zUmVkdWNlcihtYXRjaGVkRGVmaW5pdGlvbnM6IGFueVtdLCBkZWZpbmVkUGF0aDogc3RyaW5nLCByZXF1ZXN0UGF0aDogc3RyaW5nKTogYW55W10ge1xuICAgIC8vICdtYXRjaCcgZnJvbSBwYXRoLXRvLXJlZ2V4cCBpcyB1c2VkIGhlcmVcbiAgICBjb25zdCBwYXRoTWF0Y2hlciA9IG1hdGNoKHRyYW5zZm9ybVBhdGhQYXJhbXNEZWNsYXJlZEluQnJhY2VzKGRlZmluZWRQYXRoKSk7XG4gICAgY29uc3QgbWF0Y2hlZCA9IHBhdGhNYXRjaGVyKHJlcXVlc3RQYXRoKTtcblxuICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgIC8vIEVuc3VyZSBwYXRoUGFyYW1zIGlzIGFuIG9iamVjdCBvZiBrZXkvdmFsdWUgcGFpcnNcbiAgICAgICAgY29uc3QgcGF0aFBhcmFtcyA9IG1hdGNoZWQucGFyYW1zO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoZWREZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgcDogcmVxdWVzdFBhdGgsXG4gICAgICAgICAgICBkOiBkZWZpbmVkUGF0aCxcbiAgICAgICAgICAgIHBhdGhQYXJhbXM6IHBhdGhQYXJhbXNcbiAgICAgICAgfTtcbiAgICAgICAgbWF0Y2hlZERlZmluaXRpb25zLnB1c2gobWF0Y2hlZERlZmluaXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlZERlZmluaXRpb25zO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYW4gSFRUUCBtZWRpYSB0eXBlIGhlYWRlciB2YWx1ZSAoZS5nLiwgXCJ0ZXh0L3BsYWluOyBxPTAuOSwgYXBwbGljYXRpb24vanNvblwiKS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWVkaWFUeXBlSGVhZGVyVmFsdWUoc01lZGlhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoc01lZGlhVHlwZSA9PT0gdW5kZWZpbmVkIHx8IHNNZWRpYVR5cGUgPT09IG51bGwpXG4gICAgICAgIHJldHVybjtcbiAgICAvLyBjb252ZXJ0IHRvIGFycmF5IG9mIGluZGl2aWR1YWwgdHlwZXNcbiAgICBsZXQgYXJyTWVkaWFUeXBlID0gc01lZGlhVHlwZS5zcGxpdCgnLCcpO1xuICAgIGFyck1lZGlhVHlwZSA9IGFyck1lZGlhVHlwZS5tYXAoKG1pbWVUeXBlRW50cnkpID0+IHtcbiAgICAgICAgLy8gcmVtb3ZlIGVzY2FwaW5nLCByZW1vdmUgcXVhbGl0eSBvciBvdGhlciBhdHRyaWJ1dGVzIChlLmcuLCAnOyBxPTAuOScpXG4gICAgICAgIHJldHVybiBtaW1lVHlwZUVudHJ5LnJlcGxhY2UoJ1xcXFwnLCAnJykuc3BsaXQoJzsnKVswXS50cmltKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFyck1lZGlhVHlwZS5maWx0ZXIodHlwZSA9PiB0eXBlLmxlbmd0aCA+IDApO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHNvdXJjZSBNSU1FIHR5cGUgaXMgY29tcGF0aWJsZSB3aXRoIGEgdGFyZ2V0IE1JTUUgdHlwZSwgc3VwcG9ydGluZyB3aWxkY2FyZHMgKCopLlxuICovXG5mdW5jdGlvbiBpc01pbWVUeXBlQ29tcGF0aWJsZShzb3VyY2U6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoc291cmNlID09PSB0YXJnZXQpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgdGFyZ2V0TSA9IHRhcmdldC5zcGxpdCgnLycpO1xuICAgIGNvbnN0IHNvdXJjZU0gPSBzb3VyY2Uuc3BsaXQoJy8nKTtcblxuICAgIC8vIFRhcmdldCBpcyB3aWxkY2FyZCB0eXBlLCBTb3VyY2UgaGFzIGEgc3BlY2lmaWMgc3VidHlwZSAoZS5nLiwgdGFyZ2V0PSovanNvbiwgc291cmNlPWFwcGxpY2F0aW9uL2pzb24pXG4gICAgaWYgKHRhcmdldE1bMF0gPT09ICcqJyAmJiB0YXJnZXRNWzFdID09PSBzb3VyY2VNWzFdKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyBTb3VyY2UgaXMgd2lsZGNhcmQgdHlwZSwgVGFyZ2V0IGhhcyBhIHNwZWNpZmljIHN1YnR5cGUgKGUuZy4sIHNvdXJjZT0qL2pzb24sIHRhcmdldD1hcHBsaWNhdGlvbi9qc29uKVxuICAgIGlmIChzb3VyY2VNWzBdID09PSAnKicgJiYgdGFyZ2V0TVsxXSA9PT0gc291cmNlTVsxXSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBUYXJnZXQgaXMgd2lsZGNhcmQgc3VidHlwZSwgU291cmNlIGhhcyBhIHNwZWNpZmljIHR5cGUgKGUuZy4sIHRhcmdldD1hcHBsaWNhdGlvbi8qLCBzb3VyY2U9YXBwbGljYXRpb24vanNvbilcbiAgICBpZiAodGFyZ2V0TVsxXSA9PT0gJyonICYmIHRhcmdldE1bMF0gPT09IHNvdXJjZU1bMF0pXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIFNvdXJjZSBpcyB3aWxkY2FyZCBzdWJ0eXBlLCBUYXJnZXQgaGFzIGEgc3BlY2lmaWMgdHlwZSAoZS5nLiwgc291cmNlPWFwcGxpY2F0aW9uLyosIHRhcmdldD1hcHBsaWNhdGlvbi9qc29uKVxuICAgIGlmIChzb3VyY2VNWzFdID09PSAnKicgJiYgdGFyZ2V0TVswXSA9PT0gc291cmNlTVswXSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogRGVmYXVsdCBlcnJvciBoYW5kbGVyIGZ1bmN0aW9uLlxuICovXG5jb25zdCBjYXRjaEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uICh0aGlzOiBIdHRwQ29udHJvbGxlciwgbG9nY3R4OiBhbnksIGN0eDogUmVxdWVzdENvbnRleHQsIGVycjogYW55LCByZXF1ZXN0OiBhbnksIHJlc3BvbnNlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY3R4LnN1cHByZXNzU3RhY2spIHtcbiAgICAgICAgY29uc3QgZGV0YWlsc01zZyA9IChjdHguZXJyb3JOYW1lIHx8IFwiXCIpICsgKGN0eC5lcnJvckNvZGUgPyBcIiBbXCIgKyBjdHguZXJyb3JDb2RlICsgXCJdXCIgOiBcIlwiKSArIChjdHguZXJyb3JNZXNzYWdlID8gXCI6IFwiICsgY3R4LmVycm9yTWVzc2FnZSA6IFwiXCIpO1xuICAgICAgICBsb2dnZXIuaW5mbygnU2VydmluZyByZXNvdXJjZVt7fV0sIFZlcmJbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dIGZpbmlzaGVkIGluIGVycm9yLiB7fScsIGxvZ2N0eC5wYXRoLCBsb2djdHgubWV0aG9kLCBsb2djdHguY29udGVudFR5cGUsIGxvZ2N0eC5hY2NlcHRzLCBkZXRhaWxzTXNnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1NlcnZpbmcgcmVzb3VyY2Vbe31dLCBWZXJiW3t9XSwgQ29udGVudC1UeXBlW3t9XSwgQWNjZXB0W3t9XSBmaW5pc2hlZCBpbiBlcnJvcicsIGxvZ2N0eC5wYXRoLCBsb2djdHgubWV0aG9kLCBsb2djdHguY29udGVudFR5cGUsIGxvZ2N0eC5hY2NlcHRzLCBlcnIpO1xuICAgIH1cblxuICAgIGNvbnN0IGh0dHBFcnJvckNvZGUgPSBjdHguaHR0cEVycm9yQ29kZSB8fCByZXNwb25zZS5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gY3R4LmVycm9yTWVzc2FnZSB8fCAoZXJyICYmIGVyci5tZXNzYWdlKTtcbiAgICBjb25zdCBlcnJvck5hbWUgPSBjdHguZXJyb3JOYW1lIHx8IChlcnIgJiYgZXJyLm5hbWUpO1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGN0eC5lcnJvckNvZGU7XG5cbiAgICB0aGlzLnNlbmRFcnJvcihodHRwRXJyb3JDb2RlLCBlcnJvckNvZGUsIGVycm9yTmFtZSwgZXJyb3JNZXNzYWdlKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSByZXF1ZXN0IG1lZGlhIHR5cGVzIG1hdGNoIHRoZSByZXNvdXJjZSBoYW5kbGVyJ3MgY29uc3VtZXMgYW5kIHByb2R1Y2VzIGNvbnN0cmFpbnRzLlxuICovXG5jb25zdCBtYXRjaE1lZGlhVHlwZSA9IGZ1bmN0aW9uIChyZXF1ZXN0OiBhbnksIHByb2R1Y2VzTWVkaWFUeXBlczogc3RyaW5nW10sIGNvbnN1bWVzTWVkaWFUeXBlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBsZXQgaXNQcm9kdWNlTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGFjY2VwdHNNZWRpYVR5cGVzID0gbm9ybWFsaXplTWVkaWFUeXBlSGVhZGVyVmFsdWUocmVxdWVzdC5nZXRIZWFkZXIoJ0FjY2VwdCcpKTtcblxuICAgIC8vIDEuIENoZWNrIFByb2R1Y2VzIChBY2NlcHRzIGhlYWRlcilcbiAgICBpZiAoIWFjY2VwdHNNZWRpYVR5cGVzIHx8IGFjY2VwdHNNZWRpYVR5cGVzLmxlbmd0aCA9PT0gMCB8fCBhY2NlcHRzTWVkaWFUeXBlcy5pbmNsdWRlcygnKi8qJykpIHtcbiAgICAgICAgLy8gT3V0cHV0IG1lZGlhIHR5cGUgaXMgbm90IHJlc3RyaWN0ZWQgYnkgY2xpZW50IG9yIGNsaWVudCBhY2NlcHRzIGFueXRoaW5nXG4gICAgICAgIGlzUHJvZHVjZU1hdGNoZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9kdWNlc01lZGlhVHlwZXMgJiYgcHJvZHVjZXNNZWRpYVR5cGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFByb2R1Y2VzTUlNRSA9IGFjY2VwdHNNZWRpYVR5cGVzLmZpbHRlcigoYWNjZXB0c01lZGlhVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9kdWNlc01lZGlhVHlwZXMuc29tZSgocHJvZHVjZXNNZWRpYVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTWltZVR5cGVDb21wYXRpYmxlKGFjY2VwdHNNZWRpYVR5cGUsIHByb2R1Y2VzTWVkaWFUeXBlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXNQcm9kdWNlTWF0Y2hlZCA9IG1hdGNoZWRQcm9kdWNlc01JTUUgJiYgbWF0Y2hlZFByb2R1Y2VzTUlNRS5sZW5ndGggPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVzb3VyY2UgZG9lc24ndCBzcGVjaWZ5IHByb2R1Y2VzLCBzbyBpdCBtYXRjaGVzIGlmIHRoZSBjbGllbnQgYWNjZXB0cyBhbnl0aGluZyBvciBpZiBwcm9kdWNlcyBpcyBhbiBlbXB0eSBhcnJheVxuICAgICAgICAgICAgaXNQcm9kdWNlTWF0Y2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBDaGVjayBDb25zdW1lcyAoQ29udGVudC1UeXBlIGhlYWRlcilcbiAgICBsZXQgaXNDb25zdW1lTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlTWVkaWFUeXBlcyA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0Q29udGVudFR5cGUoKSk7XG5cbiAgICBpZiAoIWNvbnN1bWVzTWVkaWFUeXBlcyB8fCBjb25zdW1lc01lZGlhVHlwZXMubGVuZ3RoID09PSAwIHx8IGNvbnN1bWVzTWVkaWFUeXBlcy5pbmNsdWRlcygnKi8qJykpIHtcbiAgICAgICAgLy8gSW5wdXQgbWVkaWEgdHlwZSBpcyBub3QgcmVzdHJpY3RlZCBieSByZXNvdXJjZSBvciByZXNvdXJjZSBhY2NlcHRzIGFueXRoaW5nXG4gICAgICAgIGlzQ29uc3VtZU1hdGNoZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjb250ZW50VHlwZU1lZGlhVHlwZXMgJiYgY29uc3VtZXNNZWRpYVR5cGVzICYmIGNvbnN1bWVzTWVkaWFUeXBlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDb25zdW1lc01JTUUgPSBjb250ZW50VHlwZU1lZGlhVHlwZXMuZmlsdGVyKChjb250ZW50VHlwZU1lZGlhVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25zdW1lc01lZGlhVHlwZXMuc29tZSgoY29uc3VtZXNNZWRpYVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTWltZVR5cGVDb21wYXRpYmxlKGNvbnRlbnRUeXBlTWVkaWFUeXBlLCBjb25zdW1lc01lZGlhVHlwZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlzQ29uc3VtZU1hdGNoZWQgPSBtYXRjaGVkQ29uc3VtZXNNSU1FICYmIG1hdGNoZWRDb25zdW1lc01JTUUubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpc1Byb2R1Y2VNYXRjaGVkICYmIGlzQ29uc3VtZU1hdGNoZWQ7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxzQkFBcUM7QUFDckMscUJBQW1DO0FBQ25DLCtCQUFpQztBQUNqQyxpQkFBd0I7QUFJeEIsTUFBTSxFQUFFLE1BQU0sSUFBSSxpQkFBaUIsZ0RBQWdEO0FBRW5GLE1BQU0sU0FBYyxtQkFBUSxVQUFVLG9CQUFvQjtBQW9CMUQsU0FBUyxhQUFrQjtBQUN2QixTQUFPLGVBQUFBO0FBQ1g7QUFDQSxTQUFTLGNBQW1CO0FBQ3hCLFNBQU8sZ0JBQUFDO0FBQ1g7QUFRTyxTQUFTLFFBQVEsU0FBK0I7QUFDbkQsTUFBSTtBQUNKLE1BQUksWUFBWSxRQUFXO0FBQ3ZCLFFBQUksT0FBTyxZQUFZLFlBQVksbUJBQW1CLDJDQUFrQjtBQUNwRSxlQUFTO0FBQUEsSUFDYjtBQUFBLEVBQ0o7QUFDQSxTQUFPLElBQUksZUFBZSxNQUFNO0FBQ3BDO0FBS08sTUFBTSxlQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBY3hCLFlBQVksV0FBb0M7QUFDNUMsUUFBSSxxQkFBcUIsMkNBQWtCO0FBQ3ZDLFdBQUssbUJBQW1CO0FBQUEsSUFDNUIsV0FBVyxPQUFPLGNBQWMsWUFBWSxjQUFjLFFBQVc7QUFDakUsV0FBSyxtQkFBbUIsSUFBSSwwQ0FBaUIsV0FBVyxJQUFJO0FBQUEsSUFDaEUsT0FBTztBQUVILFdBQUssbUJBQW1CLElBQUksMENBQWlCLENBQUMsR0FBRyxJQUFJO0FBQUEsSUFDekQ7QUFHQSxTQUFLLFdBQVcsS0FBSyxlQUFlLEtBQUssaUJBQWlCLGFBQWEsS0FBSyxLQUFLLGdCQUFnQjtBQUdqRyxLQUFDLE9BQU8sUUFBUSxPQUFPLFVBQVUsVUFBVSxRQUFRLEVBQUUsUUFBUSxDQUFDLGdCQUF3QjtBQUNsRixXQUFLLFdBQVcsSUFBSSxJQUFJLGlCQUF3QztBQUM1RCxZQUFJLGFBQWEsU0FBUztBQUN0QixnQkFBTSxNQUFNLDhEQUE4RCxjQUFjLEdBQUc7QUFHL0YsWUFBSSxRQUFRLGFBQWEsQ0FBQztBQUMxQixZQUFJLFVBQVU7QUFDVixrQkFBUTtBQUdaLGNBQU0sUUFBUSxhQUFhLENBQUM7QUFDNUIsY0FBTSxjQUFjLGFBQWEsQ0FBQztBQUNsQyxjQUFNLGNBQWMsYUFBYSxDQUFDO0FBR2xDLGNBQU0sV0FBZ0IsS0FBSyxpQkFBaUIsS0FBSyxPQUFPLE9BQU8sYUFBYSxXQUFXLEtBQUssS0FBSyxpQkFBaUIsU0FBUyxLQUFLO0FBR2hJLGNBQU0scUJBQXFCLGFBQWEsTUFBTSxDQUFDO0FBRy9DLGlCQUFTLFdBQVcsRUFBRSxNQUFNLFVBQVUsa0JBQWtCO0FBRXhELGVBQU87QUFBQSxNQUNYO0FBQUEsSUFDSixDQUFDO0FBQUEsRUFDTDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsT0FBT0QsVUFBY0MsV0FBcUI7QUFDdEMsU0FBSyxRQUFRRCxVQUFTQyxTQUFRO0FBQUEsRUFDbEM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLFFBQVFELFVBQWVDLFdBQXNCO0FBQ3pDLElBQUFELFdBQVVBLFlBQVcsV0FBVztBQUNoQyxVQUFNLGNBQXNCQSxTQUFRLGdCQUFnQjtBQUNwRCxVQUFNLFNBQWlCQSxTQUFRLFVBQVUsRUFBRSxZQUFZO0FBQ3ZELFVBQU0sa0JBQXVCLEtBQUssaUJBQWlCLGNBQWM7QUFFakUsVUFBTSxVQUFpQixnQkFBZ0IsYUFBYSxRQUFRLGVBQWU7QUFDM0UsUUFBSTtBQUVKLFFBQUksV0FBVyxRQUFRLENBQUMsR0FBRztBQUN2QixZQUFNLGVBQXNCLGdCQUFnQixRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTTtBQUNoRSxVQUFJLGNBQWM7QUFDZCwwQkFBa0IsYUFBYSxPQUFPLENBQUMsZUFBZTtBQUNsRCxpQkFBTyxlQUFlQSxVQUFTLFdBQVcsVUFBVSxXQUFXLFFBQVE7QUFBQSxRQUMzRSxDQUFDLEVBQUUsQ0FBQztBQUFBLE1BQ1I7QUFBQSxJQUNKO0FBRUEsSUFBQUMsWUFBV0EsYUFBWSxZQUFZO0FBQ25DLFVBQU0sY0FBc0NELFNBQVEsc0JBQXNCLEtBQUssQ0FBQztBQUNoRixVQUFNLGdCQUEwQiw4QkFBOEJBLFNBQVEsVUFBVSxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQy9GLFVBQU0sb0JBQThCLDhCQUE4QkEsU0FBUSxVQUFVLGNBQWMsQ0FBQyxLQUFLLENBQUM7QUFDekcsVUFBTSxlQUF1QjtBQUU3QixRQUFJLGlCQUFpQjtBQUNqQixZQUFNLE1BQXNCO0FBQUEsUUFDeEIsa0JBQWtCLENBQUM7QUFBQSxRQUNuQixtQkFBbUIsQ0FBQztBQUFBLFFBQ3BCLFlBQVlDO0FBQUEsUUFDWixPQUFPQTtBQUFBLFFBQ1AsV0FBV0Q7QUFBQSxRQUNYLE9BQU9BO0FBQUEsTUFDWDtBQUNBLFVBQUksUUFBUSxDQUFDLEVBQUUsWUFBWTtBQUN2QixZQUFJLGlCQUFpQixRQUFRLENBQUMsRUFBRTtBQUFBLE1BQ3BDO0FBQ0EsVUFBSSxrQkFBa0I7QUFFdEIsWUFBTSxPQUFPLFdBQVk7QUFBQSxNQUFFO0FBQzNCLFVBQUksU0FBbUIsUUFBa0IsUUFBa0I7QUFDM0QsZ0JBQVUsZ0JBQWdCLFVBQVU7QUFDcEMsZUFBUyxnQkFBZ0IsV0FBVyxnQkFBZ0IsU0FBUztBQUM3RCxlQUFTLGdCQUFnQixTQUFTLGtCQUFrQixLQUFLLE1BQU07QUFBQSxRQUMzRCxNQUFNO0FBQUEsUUFDTixRQUFRLE9BQU8sWUFBWTtBQUFBLFFBQzNCLGFBQWEsa0JBQWtCLEtBQUssR0FBRztBQUFBLFFBQ3ZDLFNBQVMsY0FBYyxLQUFLLEdBQUc7QUFBQSxNQUNuQyxDQUFDO0FBQ0QsaUJBQVcsZ0JBQWdCLFdBQVc7QUFFdEMsWUFBTSxlQUFzQixDQUFDLEtBQUtBLFVBQVNDLFdBQVUsaUJBQWlCLElBQUk7QUFFMUUsVUFBSTtBQUNBLGVBQU8sTUFBTSxxRkFBcUYsY0FBYyxPQUFPLFlBQVksR0FBRyxtQkFBbUIsYUFBYTtBQUN0SyxnQkFBUSxNQUFNLE1BQU0sWUFBWTtBQUVoQyxZQUFJLENBQUNBLFVBQVMsWUFBWSxHQUFHO0FBQ3pCLGlCQUFPLE1BQU0sOEVBQThFLGNBQWMsT0FBTyxZQUFZLEdBQUcsbUJBQW1CLGFBQWE7QUFDL0osaUJBQU8sTUFBTSxNQUFNLFlBQVk7QUFDL0IsaUJBQU8sTUFBTSx1RkFBdUYsY0FBYyxPQUFPLFlBQVksR0FBRyxtQkFBbUIsYUFBYTtBQUFBLFFBQzVLO0FBQUEsTUFDSixTQUFTLEtBQVU7QUFDZixZQUFJO0FBQ0EsdUJBQWEsT0FBTyxHQUFHLEdBQUcsR0FBRztBQUM3QixpQkFBTyxNQUFNLE1BQU0sWUFBWTtBQUFBLFFBQ25DLFNBQVMsV0FBVztBQUNoQixpQkFBTyxNQUFNLHdHQUF3RyxTQUFTO0FBQzlILGdCQUFNO0FBQUEsUUFDVjtBQUFBLE1BQ0osVUFBRTtBQUNFLHVCQUFlLFVBQVUsY0FBYyxLQUFLLElBQUk7QUFDaEQsWUFBSTtBQUNBLG1CQUFTLE1BQU0sTUFBTSxDQUFDLENBQUM7QUFBQSxRQUMzQixTQUFTLGFBQWE7QUFDbEIsaUJBQU8sTUFBTSx1R0FBdUcsV0FBVztBQUFBLFFBQ25JO0FBQUEsTUFDSjtBQUFBLElBQ0osT0FBTztBQUNILGFBQU8sTUFBTSxpR0FBaUcsY0FBYyxPQUFPLFlBQVksR0FBRyxtQkFBbUIsYUFBYTtBQUNsTCxXQUFLLFVBQVVBLFVBQVMsYUFBYSxRQUFXLGVBQWUseUNBQXlDO0FBQUEsSUFDNUc7QUFBQSxFQUNKO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxXQUE2QjtBQUN6QixXQUFPLEtBQUs7QUFBQSxFQUNoQjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsVUFBVSxlQUF1QixzQkFBMkIsV0FBbUIsY0FBNEI7QUFDdkcsVUFBTSx5QkFBbUMsOEJBQThCLGVBQUFELFFBQVEsVUFBVSxRQUFRLENBQUMsS0FBSyxDQUFDLGtCQUFrQjtBQUMxSCxVQUFNLFNBQWtCLHVCQUF1QixLQUFLLENBQUMsb0JBQW9CLHFCQUFxQixVQUFVLGVBQWUsQ0FBQztBQUV4SCxvQkFBQUMsU0FBUyxVQUFVLGlCQUFpQixnQkFBQUEsU0FBUyxxQkFBcUI7QUFFbEUsUUFBSSxRQUFRO0FBQ1IsWUFBTSxVQUFrQixhQUFhLHlCQUF5QixTQUFZLE1BQU0sdUJBQXVCLE1BQU0sT0FBTyxlQUFlLE9BQU8sZUFBZTtBQUN6SixzQkFBQUEsU0FBUyxVQUFVLGlCQUFpQixnQkFBQUEsU0FBUyx1QkFBdUIsT0FBTztBQUFBLElBQy9FLE9BQU87QUFDSCxZQUFNLE9BQU87QUFBQSxRQUNULFFBQVE7QUFBQSxRQUNSLFNBQVM7QUFBQSxRQUNULFdBQVc7QUFBQSxNQUNmO0FBQ0Esc0JBQUFBLFNBQVMsVUFBVSxnQkFBZ0Isa0JBQWtCO0FBQ3JELHNCQUFBQSxTQUFTLE1BQU0sS0FBSyxVQUFVLE1BQU0sTUFBTSxDQUFDLENBQUM7QUFBQSxJQUNoRDtBQUNBLFNBQUssY0FBYztBQUFBLEVBQ3ZCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxnQkFBc0I7QUFDbEIsb0JBQUFBLFNBQVMsTUFBTTtBQUNmLG9CQUFBQSxTQUFTLE1BQU07QUFBQSxFQUNuQjtBQUNKO0FBS0EsU0FBUyw4QkFBOEIsR0FBUSxHQUFnQjtBQUMzRCxJQUFFLElBQUksNEJBQTRCLENBQUM7QUFDbkMsSUFBRSxJQUFJLDRCQUE0QixDQUFDO0FBRW5DLE1BQUksRUFBRSxNQUFNLEVBQUUsR0FBRztBQUViLFVBQU0sS0FBSyxFQUFFLEVBQUUsTUFBTSxVQUFVO0FBQy9CLFVBQU0scUJBQXFCLE9BQU8sT0FBTyxHQUFHLFNBQVM7QUFDckQsVUFBTSxLQUFLLEVBQUUsRUFBRSxNQUFNLFVBQVU7QUFDL0IsVUFBTSxxQkFBcUIsT0FBTyxPQUFPLEdBQUcsU0FBUztBQUNyRCxRQUFJLHFCQUFxQixvQkFBb0I7QUFDekMsUUFBRSxJQUFJLEVBQUUsSUFBSTtBQUFBLElBQ2hCLFdBQVcscUJBQXFCLG9CQUFvQjtBQUNoRCxRQUFFLElBQUksRUFBRSxJQUFJO0FBQUEsSUFDaEI7QUFBQSxFQUNKO0FBQ0EsU0FBTyxFQUFFLElBQUksRUFBRTtBQUNuQjtBQUtBLFNBQVMsNEJBQTRCLGNBQTJCO0FBQzVELFNBQVEsYUFBYSxVQUFVLE9BQU8sS0FBSyxhQUFhLE1BQU0sRUFBRSxTQUFTLElBQUssSUFBSTtBQUN0RjtBQUtBLFNBQVMsb0NBQW9DLGdCQUFnQztBQUN6RSxRQUFNLDRCQUE0QjtBQUNsQyxTQUFPLGVBQWUsUUFBUSwyQkFBMkIsS0FBSztBQUNsRTtBQUtBLFNBQVMsZ0JBQWdCLGFBQXFCLFFBQWdCLEtBQWlCO0FBQzNFLFNBQU8sT0FBTyxRQUFRLEdBQUcsRUFDcEIsT0FBTyxDQUFDLENBQUMsR0FBRyxRQUFRLE1BQU0sWUFBYSxTQUFpQixNQUFNLENBQUMsRUFDL0QsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUN2QixPQUFPLENBQUMsU0FBZ0IsU0FBaUIsZ0NBQWdDLFNBQVMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQ3hHLEtBQUssNkJBQTZCO0FBQzNDO0FBS0EsU0FBUyxnQ0FBZ0Msb0JBQTJCLGFBQXFCLGFBQTRCO0FBRWpILFFBQU0sY0FBYyxNQUFNLG9DQUFvQyxXQUFXLENBQUM7QUFDMUUsUUFBTSxVQUFVLFlBQVksV0FBVztBQUV2QyxNQUFJLFNBQVM7QUFFVCxVQUFNLGFBQWEsUUFBUTtBQUUzQixVQUFNLG9CQUFvQjtBQUFBLE1BQ3RCLEdBQUc7QUFBQSxNQUNILEdBQUc7QUFBQSxNQUNIO0FBQUEsSUFDSjtBQUNBLHVCQUFtQixLQUFLLGlCQUFpQjtBQUFBLEVBQzdDO0FBQ0EsU0FBTztBQUNYO0FBS0EsU0FBUyw4QkFBOEIsWUFBNkQ7QUFDaEcsTUFBSSxlQUFlLFVBQWEsZUFBZTtBQUMzQztBQUVKLE1BQUksZUFBZSxXQUFXLE1BQU0sR0FBRztBQUN2QyxpQkFBZSxhQUFhLElBQUksQ0FBQyxrQkFBa0I7QUFFL0MsV0FBTyxjQUFjLFFBQVEsTUFBTSxFQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUs7QUFBQSxFQUM5RCxDQUFDO0FBQ0QsU0FBTyxhQUFhLE9BQU8sVUFBUSxLQUFLLFNBQVMsQ0FBQztBQUN0RDtBQUtBLFNBQVMscUJBQXFCLFFBQWdCLFFBQXlCO0FBQ25FLE1BQUksV0FBVztBQUNYLFdBQU87QUFFWCxRQUFNLFVBQVUsT0FBTyxNQUFNLEdBQUc7QUFDaEMsUUFBTSxVQUFVLE9BQU8sTUFBTSxHQUFHO0FBR2hDLE1BQUksUUFBUSxDQUFDLE1BQU0sT0FBTyxRQUFRLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDOUMsV0FBTztBQUVYLE1BQUksUUFBUSxDQUFDLE1BQU0sT0FBTyxRQUFRLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDOUMsV0FBTztBQUdYLE1BQUksUUFBUSxDQUFDLE1BQU0sT0FBTyxRQUFRLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDOUMsV0FBTztBQUVYLE1BQUksUUFBUSxDQUFDLE1BQU0sT0FBTyxRQUFRLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDOUMsV0FBTztBQUVYLFNBQU87QUFDWDtBQUtBLE1BQU0sb0JBQW9CLFNBQWdDLFFBQWEsS0FBcUIsS0FBVUQsVUFBY0MsV0FBcUI7QUFDckksTUFBSSxJQUFJLGVBQWU7QUFDbkIsVUFBTSxjQUFjLElBQUksYUFBYSxPQUFPLElBQUksWUFBWSxPQUFPLElBQUksWUFBWSxNQUFNLE9BQU8sSUFBSSxlQUFlLE9BQU8sSUFBSSxlQUFlO0FBQzdJLFdBQU8sS0FBSyxzRkFBc0YsT0FBTyxNQUFNLE9BQU8sUUFBUSxPQUFPLGFBQWEsT0FBTyxTQUFTLFVBQVU7QUFBQSxFQUNoTCxPQUFPO0FBQ0gsV0FBTyxNQUFNLGtGQUFrRixPQUFPLE1BQU0sT0FBTyxRQUFRLE9BQU8sYUFBYSxPQUFPLFNBQVMsR0FBRztBQUFBLEVBQ3RLO0FBRUEsUUFBTSxnQkFBZ0IsSUFBSSxpQkFBaUJBLFVBQVM7QUFDcEQsUUFBTSxlQUFlLElBQUksZ0JBQWlCLE9BQU8sSUFBSTtBQUNyRCxRQUFNLFlBQVksSUFBSSxhQUFjLE9BQU8sSUFBSTtBQUMvQyxRQUFNLFlBQVksSUFBSTtBQUV0QixPQUFLLFVBQVUsZUFBZSxXQUFXLFdBQVcsWUFBWTtBQUNwRTtBQUtBLE1BQU0saUJBQWlCLFNBQVVELFVBQWMsb0JBQThCLG9CQUF1QztBQUNoSCxNQUFJLG1CQUFtQjtBQUN2QixRQUFNLG9CQUFvQiw4QkFBOEJBLFNBQVEsVUFBVSxRQUFRLENBQUM7QUFHbkYsTUFBSSxDQUFDLHFCQUFxQixrQkFBa0IsV0FBVyxLQUFLLGtCQUFrQixTQUFTLEtBQUssR0FBRztBQUUzRix1QkFBbUI7QUFBQSxFQUN2QixPQUFPO0FBQ0gsUUFBSSxzQkFBc0IsbUJBQW1CLFFBQVE7QUFDakQsWUFBTSxzQkFBc0Isa0JBQWtCLE9BQU8sQ0FBQyxxQkFBcUI7QUFDdkUsZUFBTyxtQkFBbUIsS0FBSyxDQUFDLHNCQUFzQjtBQUNsRCxpQkFBTyxxQkFBcUIsa0JBQWtCLGlCQUFpQjtBQUFBLFFBQ25FLENBQUM7QUFBQSxNQUNMLENBQUM7QUFDRCx5QkFBbUIsdUJBQXVCLG9CQUFvQixTQUFTO0FBQUEsSUFDM0UsT0FBTztBQUVILHlCQUFtQjtBQUFBLElBQ3ZCO0FBQUEsRUFDSjtBQUdBLE1BQUksbUJBQW1CO0FBQ3ZCLFFBQU0sd0JBQXdCLDhCQUE4QkEsU0FBUSxlQUFlLENBQUM7QUFFcEYsTUFBSSxDQUFDLHNCQUFzQixtQkFBbUIsV0FBVyxLQUFLLG1CQUFtQixTQUFTLEtBQUssR0FBRztBQUU5Rix1QkFBbUI7QUFBQSxFQUN2QixPQUFPO0FBQ0gsUUFBSSx5QkFBeUIsc0JBQXNCLG1CQUFtQixRQUFRO0FBQzFFLFlBQU0sc0JBQXNCLHNCQUFzQixPQUFPLENBQUMseUJBQXlCO0FBQy9FLGVBQU8sbUJBQW1CLEtBQUssQ0FBQyxzQkFBc0I7QUFDbEQsaUJBQU8scUJBQXFCLHNCQUFzQixpQkFBaUI7QUFBQSxRQUN2RSxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQ0QseUJBQW1CLHVCQUF1QixvQkFBb0IsU0FBUztBQUFBLElBQzNFO0FBQUEsRUFDSjtBQUVBLFNBQU8sb0JBQW9CO0FBQy9COyIsCiAgIm5hbWVzIjogWyJyZXF1ZXN0IiwgInJlc3BvbnNlIl0KfQo=
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var resource_mappings_exports = {};
|
|
19
|
+
__export(resource_mappings_exports, {
|
|
20
|
+
ResourceMappings: () => ResourceMappings
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(resource_mappings_exports);
|
|
23
|
+
var import_resource = require("./resource");
|
|
24
|
+
class ResourceMappings {
|
|
25
|
+
// Bound execute function from the HttpController
|
|
26
|
+
/**
|
|
27
|
+
* Constructor function for ResourceMappings instances.
|
|
28
|
+
*
|
|
29
|
+
* @param oConfiguration Configuration object defining initial resource paths and their handlers.
|
|
30
|
+
* @param controller The HttpController instance, for which this ResourceMappings handles configuration.
|
|
31
|
+
*/
|
|
32
|
+
constructor(oConfiguration, controller) {
|
|
33
|
+
// Map of resource path (string) to the Resource instance (typed as any for flexibility)
|
|
34
|
+
this.resources = {};
|
|
35
|
+
if (oConfiguration) {
|
|
36
|
+
Object.keys(oConfiguration).forEach((sPath) => {
|
|
37
|
+
this.resources[sPath] = this.resource(sPath, oConfiguration[sPath]);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
if (controller) {
|
|
41
|
+
this.controller = controller;
|
|
42
|
+
this.execute = controller.execute.bind(controller);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Creates or retrieves a Resource object corresponding to the given path.
|
|
47
|
+
* The second, optional argument can be used to initialize the resource.
|
|
48
|
+
*
|
|
49
|
+
* @param sPath The URL path template for the resource (e.g., "users/{id}").
|
|
50
|
+
* @param oConfiguration Optional configuration object for initial resource setup.
|
|
51
|
+
* @returns The created or existing Resource instance.
|
|
52
|
+
*/
|
|
53
|
+
path(sPath, oConfiguration) {
|
|
54
|
+
if (sPath !== "" && sPath[0] === "/") {
|
|
55
|
+
sPath = sPath.substring(1);
|
|
56
|
+
}
|
|
57
|
+
if (this.resources[sPath] === void 0) {
|
|
58
|
+
this.resources[sPath] = new import_resource.Resource(sPath, oConfiguration, this.controller, this);
|
|
59
|
+
}
|
|
60
|
+
return this.resources[sPath];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Alias for path().
|
|
64
|
+
*/
|
|
65
|
+
resourcePath(sPath, oConfiguration) {
|
|
66
|
+
return this.path(sPath, oConfiguration);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Alias for path().
|
|
70
|
+
*/
|
|
71
|
+
resource(sPath, oConfiguration) {
|
|
72
|
+
return this.path(sPath, oConfiguration);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Returns the compiled configuration object for all resources managed by this ResourceMappings.
|
|
76
|
+
* The configuration is structured to be consumed by the HttpController's routing logic.
|
|
77
|
+
*/
|
|
78
|
+
configuration() {
|
|
79
|
+
const _cfg = {};
|
|
80
|
+
Object.keys(this.resources).forEach((sPath) => {
|
|
81
|
+
_cfg[sPath] = this.resources[sPath].configuration();
|
|
82
|
+
});
|
|
83
|
+
return _cfg;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Removes all but GET resource handlers from all managed resources, making them read-only.
|
|
87
|
+
*
|
|
88
|
+
* @returns The ResourceMappings instance for method chaining.
|
|
89
|
+
*/
|
|
90
|
+
readonly() {
|
|
91
|
+
Object.keys(this.resources).forEach((sPath) => {
|
|
92
|
+
this.resources[sPath].readonly();
|
|
93
|
+
});
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Disables resource handling specifications matching the arguments, effectively removing them from this API.
|
|
98
|
+
*
|
|
99
|
+
* @param sPath The path of the resource.
|
|
100
|
+
* @param sVerb The HTTP verb (e.g., 'get', 'post').
|
|
101
|
+
* @param arrConsumes Array of consumed media types.
|
|
102
|
+
* @param arrProduces Array of produced media types.
|
|
103
|
+
* @returns The ResourceMappings instance for method chaining.
|
|
104
|
+
*/
|
|
105
|
+
disable(sPath, sVerb, arrConsumes, arrProduces) {
|
|
106
|
+
const resource = this.resources[sPath];
|
|
107
|
+
if (resource && typeof resource.disable === "function") {
|
|
108
|
+
resource.disable(sVerb, arrConsumes, arrProduces);
|
|
109
|
+
}
|
|
110
|
+
return this;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Provides a reference to a handler specification matching the supplied arguments.
|
|
114
|
+
*
|
|
115
|
+
* @param sPath The path of the resource.
|
|
116
|
+
* @param sVerb The HTTP verb (e.g., 'get', 'post').
|
|
117
|
+
* @param arrConsumes Array of consumed media types.
|
|
118
|
+
* @param arrProduces Array of produced media types.
|
|
119
|
+
* @returns The matching Resource handler specification or undefined.
|
|
120
|
+
*/
|
|
121
|
+
find(sPath, sVerb, arrConsumes, arrProduces) {
|
|
122
|
+
if (this.resources[sPath]) {
|
|
123
|
+
const hit = this.resources[sPath].find(sVerb, arrConsumes, arrProduces);
|
|
124
|
+
if (hit)
|
|
125
|
+
return hit;
|
|
126
|
+
}
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2h0dHAvcnMvcmVzb3VyY2UtbWFwcGluZ3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFJlc291cmNlIH0gZnJvbSBcIi4vcmVzb3VyY2VcIjtcblxuLyoqXG4gKiBUaGUgUmVzb3VyY2VNYXBwaW5ncyBjbGFzcyBhYnN0cmFjdHMgdGhlIG1hcHBpbmdzIGJldHdlZW4gcmVzb3VyY2UgVVJMIHBhdGggdGVtcGxhdGVzXG4gKiBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyByZXNvdXJjZSBoYW5kbGVyIHNwZWNpZmljYXRpb25zLiBJdCBhY3RzIGFzIHRoZSBjb25maWd1cmF0aW9uXG4gKiBzdG9yZSBmb3IgdGhlIEh0dHBDb250cm9sbGVyLlxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VNYXBwaW5ncyB7XG4gICAgLy8gTWFwIG9mIHJlc291cmNlIHBhdGggKHN0cmluZykgdG8gdGhlIFJlc291cmNlIGluc3RhbmNlICh0eXBlZCBhcyBhbnkgZm9yIGZsZXhpYmlsaXR5KVxuICAgIHJlc291cmNlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGNvbnRyb2xsZXI6IGFueTsgLy8gUmVwcmVzZW50cyB0aGUgSHR0cENvbnRyb2xsZXIgaW5zdGFuY2VcbiAgICBleGVjdXRlOiBhbnk7IC8vIEJvdW5kIGV4ZWN1dGUgZnVuY3Rpb24gZnJvbSB0aGUgSHR0cENvbnRyb2xsZXJcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciBSZXNvdXJjZU1hcHBpbmdzIGluc3RhbmNlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvQ29uZmlndXJhdGlvbiBDb25maWd1cmF0aW9uIG9iamVjdCBkZWZpbmluZyBpbml0aWFsIHJlc291cmNlIHBhdGhzIGFuZCB0aGVpciBoYW5kbGVycy5cbiAgICAgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgSHR0cENvbnRyb2xsZXIgaW5zdGFuY2UsIGZvciB3aGljaCB0aGlzIFJlc291cmNlTWFwcGluZ3MgaGFuZGxlcyBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9Db25maWd1cmF0aW9uOiBhbnksIGNvbnRyb2xsZXI6IGFueSkge1xuICAgICAgICBpZiAob0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG9Db25maWd1cmF0aW9uKS5mb3JFYWNoKChzUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZXNbc1BhdGhdID0gdGhpcy5yZXNvdXJjZShzUGF0aCwgb0NvbmZpZ3VyYXRpb25bc1BhdGhdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGUgPSBjb250cm9sbGVyLmV4ZWN1dGUuYmluZChjb250cm9sbGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgb3IgcmV0cmlldmVzIGEgUmVzb3VyY2Ugb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHBhdGguXG4gICAgICogVGhlIHNlY29uZCwgb3B0aW9uYWwgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc1BhdGggVGhlIFVSTCBwYXRoIHRlbXBsYXRlIGZvciB0aGUgcmVzb3VyY2UgKGUuZy4sIFwidXNlcnMve2lkfVwiKS5cbiAgICAgKiBAcGFyYW0gb0NvbmZpZ3VyYXRpb24gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIGluaXRpYWwgcmVzb3VyY2Ugc2V0dXAuXG4gICAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgb3IgZXhpc3RpbmcgUmVzb3VyY2UgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcGF0aChzUGF0aDogc3RyaW5nLCBvQ29uZmlndXJhdGlvbj86IGFueSk6IFJlc291cmNlIHtcbiAgICAgICAgaWYgKHNQYXRoICE9PSBcIlwiICYmIHNQYXRoWzBdID09PSBcIi9cIikge1xuICAgICAgICAgICAgc1BhdGggPSBzUGF0aC5zdWJzdHJpbmcoMSk7IC8vIHRyYW5zZm9ybSBcIi90ZXN0XCIgaW50byBcInRlc3RcIlxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucmVzb3VyY2VzW3NQYXRoXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBSZXNvdXJjZSBpcyB0aGUgY2xhc3MgaW1wb3J0ZWQgZnJvbSBcIi4vcmVzb3VyY2VcIlxuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZXNbc1BhdGhdID0gbmV3IFJlc291cmNlKHNQYXRoLCBvQ29uZmlndXJhdGlvbiwgdGhpcy5jb250cm9sbGVyLCB0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlc1tzUGF0aF07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBwYXRoKCkuXG4gICAgICovXG4gICAgcmVzb3VyY2VQYXRoKHNQYXRoOiBzdHJpbmcsIG9Db25maWd1cmF0aW9uPzogYW55KTogUmVzb3VyY2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoKHNQYXRoLCBvQ29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHBhdGgoKS5cbiAgICAgKi9cbiAgICByZXNvdXJjZShzUGF0aDogc3RyaW5nLCBvQ29uZmlndXJhdGlvbj86IGFueSk6IFJlc291cmNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGF0aChzUGF0aCwgb0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbXBpbGVkIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBhbGwgcmVzb3VyY2VzIG1hbmFnZWQgYnkgdGhpcyBSZXNvdXJjZU1hcHBpbmdzLlxuICAgICAqIFRoZSBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQgdG8gYmUgY29uc3VtZWQgYnkgdGhlIEh0dHBDb250cm9sbGVyJ3Mgcm91dGluZyBsb2dpYy5cbiAgICAgKi9cbiAgICBjb25maWd1cmF0aW9uKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgICAgICBjb25zdCBfY2ZnOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMucmVzb3VyY2VzKS5mb3JFYWNoKChzUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAvLyBBc3N1bWluZyBlYWNoIFJlc291cmNlIG9iamVjdCBoYXMgYSBjb25maWd1cmF0aW9uKCkgbWV0aG9kXG4gICAgICAgICAgICBfY2ZnW3NQYXRoXSA9IHRoaXMucmVzb3VyY2VzW3NQYXRoXS5jb25maWd1cmF0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX2NmZztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgYnV0IEdFVCByZXNvdXJjZSBoYW5kbGVycyBmcm9tIGFsbCBtYW5hZ2VkIHJlc291cmNlcywgbWFraW5nIHRoZW0gcmVhZC1vbmx5LlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIFJlc291cmNlTWFwcGluZ3MgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICAgKi9cbiAgICByZWFkb25seSgpOiB0aGlzIHtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5yZXNvdXJjZXMpLmZvckVhY2goKHNQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VzW3NQYXRoXS5yZWFkb25seSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHJlc291cmNlIGhhbmRsaW5nIHNwZWNpZmljYXRpb25zIG1hdGNoaW5nIHRoZSBhcmd1bWVudHMsIGVmZmVjdGl2ZWx5IHJlbW92aW5nIHRoZW0gZnJvbSB0aGlzIEFQSS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzUGF0aCBUaGUgcGF0aCBvZiB0aGUgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIHNWZXJiIFRoZSBIVFRQIHZlcmIgKGUuZy4sICdnZXQnLCAncG9zdCcpLlxuICAgICAqIEBwYXJhbSBhcnJDb25zdW1lcyBBcnJheSBvZiBjb25zdW1lZCBtZWRpYSB0eXBlcy5cbiAgICAgKiBAcGFyYW0gYXJyUHJvZHVjZXMgQXJyYXkgb2YgcHJvZHVjZWQgbWVkaWEgdHlwZXMuXG4gICAgICogQHJldHVybnMgVGhlIFJlc291cmNlTWFwcGluZ3MgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBkaXNhYmxlKHNQYXRoOiBzdHJpbmcsIHNWZXJiOiBzdHJpbmcsIGFyckNvbnN1bWVzOiBzdHJpbmdbXSwgYXJyUHJvZHVjZXM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZXNbc1BhdGhdO1xuICAgICAgICAvLyBBc3N1bWluZyB0aGUgaW50ZW50aW9uIGlzIHRvIGZpbmQgdGhlIHNpbmdsZSBSZXNvdXJjZSBpbnN0YW5jZSBhbmQgY2FsbCBkaXNhYmxlIG9uIGl0XG4gICAgICAgIGlmIChyZXNvdXJjZSAmJiB0eXBlb2YgcmVzb3VyY2UuZGlzYWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgIHJlc291cmNlLmRpc2FibGUoc1ZlcmIsIGFyckNvbnN1bWVzLCBhcnJQcm9kdWNlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgcmVmZXJlbmNlIHRvIGEgaGFuZGxlciBzcGVjaWZpY2F0aW9uIG1hdGNoaW5nIHRoZSBzdXBwbGllZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc1BhdGggVGhlIHBhdGggb2YgdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBzVmVyYiBUaGUgSFRUUCB2ZXJiIChlLmcuLCAnZ2V0JywgJ3Bvc3QnKS5cbiAgICAgKiBAcGFyYW0gYXJyQ29uc3VtZXMgQXJyYXkgb2YgY29uc3VtZWQgbWVkaWEgdHlwZXMuXG4gICAgICogQHBhcmFtIGFyclByb2R1Y2VzIEFycmF5IG9mIHByb2R1Y2VkIG1lZGlhIHR5cGVzLlxuICAgICAqIEByZXR1cm5zIFRoZSBtYXRjaGluZyBSZXNvdXJjZSBoYW5kbGVyIHNwZWNpZmljYXRpb24gb3IgdW5kZWZpbmVkLlxuICAgICAqL1xuICAgIGZpbmQoc1BhdGg6IHN0cmluZywgc1ZlcmI6IHN0cmluZywgYXJyQ29uc3VtZXM6IHN0cmluZ1tdLCBhcnJQcm9kdWNlczogc3RyaW5nW10pOiBhbnkgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodGhpcy5yZXNvdXJjZXNbc1BhdGhdKSB7XG4gICAgICAgICAgICAvLyBBc3N1bWluZyBSZXNvdXJjZSBpbnN0YW5jZSBoYXMgYSBmaW5kIG1ldGhvZFxuICAgICAgICAgICAgY29uc3QgaGl0ID0gdGhpcy5yZXNvdXJjZXNbc1BhdGhdLmZpbmQoc1ZlcmIsIGFyckNvbnN1bWVzLCBhcnJQcm9kdWNlcyk7XG4gICAgICAgICAgICBpZiAoaGl0KVxuICAgICAgICAgICAgICAgIHJldHVybiBoaXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH07XG59Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsc0JBQXlCO0FBT2xCLE1BQU0saUJBQWlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVkxQixZQUFZLGdCQUFxQixZQUFpQjtBQVZsRDtBQUFBLHFCQUFvQyxDQUFDO0FBV2pDLFFBQUksZ0JBQWdCO0FBQ2hCLGFBQU8sS0FBSyxjQUFjLEVBQUUsUUFBUSxDQUFDLFVBQWtCO0FBQ25ELGFBQUssVUFBVSxLQUFLLElBQUksS0FBSyxTQUFTLE9BQU8sZUFBZSxLQUFLLENBQUM7QUFBQSxNQUN0RSxDQUFDO0FBQUEsSUFDTDtBQUVBLFFBQUksWUFBWTtBQUNaLFdBQUssYUFBYTtBQUNsQixXQUFLLFVBQVUsV0FBVyxRQUFRLEtBQUssVUFBVTtBQUFBLElBQ3JEO0FBQUEsRUFDSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVBLEtBQUssT0FBZSxnQkFBZ0M7QUFDaEQsUUFBSSxVQUFVLE1BQU0sTUFBTSxDQUFDLE1BQU0sS0FBSztBQUNsQyxjQUFRLE1BQU0sVUFBVSxDQUFDO0FBQUEsSUFDN0I7QUFFQSxRQUFJLEtBQUssVUFBVSxLQUFLLE1BQU0sUUFBVztBQUVyQyxXQUFLLFVBQVUsS0FBSyxJQUFJLElBQUkseUJBQVMsT0FBTyxnQkFBZ0IsS0FBSyxZQUFZLElBQUk7QUFBQSxJQUNyRjtBQUVBLFdBQU8sS0FBSyxVQUFVLEtBQUs7QUFBQSxFQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsYUFBYSxPQUFlLGdCQUFnQztBQUN4RCxXQUFPLEtBQUssS0FBSyxPQUFPLGNBQWM7QUFBQSxFQUMxQztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsU0FBUyxPQUFlLGdCQUFnQztBQUNwRCxXQUFPLEtBQUssS0FBSyxPQUFPLGNBQWM7QUFBQSxFQUMxQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSxnQkFBd0M7QUFDcEMsVUFBTSxPQUErQixDQUFDO0FBQ3RDLFdBQU8sS0FBSyxLQUFLLFNBQVMsRUFBRSxRQUFRLENBQUMsVUFBa0I7QUFFbkQsV0FBSyxLQUFLLElBQUksS0FBSyxVQUFVLEtBQUssRUFBRSxjQUFjO0FBQUEsSUFDdEQsQ0FBQztBQUNELFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsV0FBaUI7QUFDYixXQUFPLEtBQUssS0FBSyxTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQWtCO0FBQ25ELFdBQUssVUFBVSxLQUFLLEVBQUUsU0FBUztBQUFBLElBQ25DLENBQUM7QUFDRCxXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBV0EsUUFBUSxPQUFlLE9BQWUsYUFBdUIsYUFBNkI7QUFDdEYsVUFBTSxXQUFXLEtBQUssVUFBVSxLQUFLO0FBRXJDLFFBQUksWUFBWSxPQUFPLFNBQVMsWUFBWSxZQUFZO0FBQ25ELGVBQVMsUUFBUSxPQUFPLGFBQWEsV0FBVztBQUFBLElBQ3JEO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdBLEtBQUssT0FBZSxPQUFlLGFBQXVCLGFBQXdDO0FBQzlGLFFBQUksS0FBSyxVQUFVLEtBQUssR0FBRztBQUV2QixZQUFNLE1BQU0sS0FBSyxVQUFVLEtBQUssRUFBRSxLQUFLLE9BQU8sYUFBYSxXQUFXO0FBQ3RFLFVBQUk7QUFDQSxlQUFPO0FBQUEsSUFDZjtBQUNBO0FBQUEsRUFDSjtBQUNKOyIsCiAgIm5hbWVzIjogW10KfQo=
|