@stemy/backend 3.6.0 → 4.0.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.
Files changed (145) hide show
  1. package/commands/fixtures-command.d.ts +9 -0
  2. package/commands/index.d.ts +2 -0
  3. package/common-types.d.ts +11 -6
  4. package/esm2020/commands/clear-command.mjs +17 -0
  5. package/esm2020/commands/fixtures-command.mjs +23 -0
  6. package/esm2020/commands/index.mjs +7 -0
  7. package/esm2020/common-types.mjs +21 -0
  8. package/esm2020/public_api.mjs +379 -0
  9. package/esm2020/requests/asset-image-params.mjs +53 -0
  10. package/esm2020/rest-controllers/assets.controller.mjs +126 -0
  11. package/esm2020/rest-controllers/auth.controller.mjs +46 -0
  12. package/esm2020/rest-controllers/gallery.controller.mjs +21 -0
  13. package/esm2020/rest-controllers/progresses.controller.mjs +29 -0
  14. package/esm2020/rest-controllers/terminal-styles.mjs +67 -0
  15. package/esm2020/rest-controllers/terminal.controller.mjs +125 -0
  16. package/esm2020/rest-middlewares/container.middleware.mjs +20 -0
  17. package/esm2020/rest-middlewares/error-handler.middleware.mjs +74 -0
  18. package/esm2020/rest-middlewares/language.middleware.mjs +18 -0
  19. package/esm2020/rest-middlewares/request-ended.middleware.mjs +23 -0
  20. package/esm2020/rest-middlewares/request-started.middleware.mjs +22 -0
  21. package/esm2020/services/asset-processor.mjs +90 -0
  22. package/esm2020/services/asset-resolver.mjs +31 -0
  23. package/esm2020/services/assets.mjs +140 -0
  24. package/esm2020/services/backend-provider.mjs +22 -0
  25. package/esm2020/services/cache-processor.mjs +16 -0
  26. package/esm2020/services/cache.mjs +62 -0
  27. package/{esm2015/services/configuration.js → esm2020/services/configuration.mjs} +3 -15
  28. package/esm2020/services/endpoint-provider.mjs +13 -0
  29. package/esm2020/services/entities/asset.mjs +43 -0
  30. package/esm2020/services/entities/base-entity.mjs +26 -0
  31. package/esm2020/services/entities/lazy-asset.mjs +73 -0
  32. package/esm2020/services/entities/progress.mjs +176 -0
  33. package/esm2020/services/entities/temp-asset.mjs +45 -0
  34. package/esm2020/services/fixtures.mjs +26 -0
  35. package/esm2020/services/gallery-cache.mjs +27 -0
  36. package/esm2020/services/gallery-image.mjs +37 -0
  37. package/esm2020/services/gallery.mjs +116 -0
  38. package/esm2020/services/id-generator.mjs +42 -0
  39. package/esm2020/services/job-manager.mjs +187 -0
  40. package/esm2020/services/lazy-assets.mjs +48 -0
  41. package/esm2020/services/logger.mjs +21 -0
  42. package/esm2020/services/mail-sender.mjs +36 -0
  43. package/esm2020/services/memory-cache.mjs +57 -0
  44. package/esm2020/services/mongo-connector.mjs +37 -0
  45. package/esm2020/services/open-api.mjs +114 -0
  46. package/esm2020/services/progresses.mjs +86 -0
  47. package/esm2020/services/template-renderer.mjs +64 -0
  48. package/esm2020/services/terminal-manager.mjs +77 -0
  49. package/esm2020/services/token-generator.mjs +35 -0
  50. package/esm2020/services/translation-provider.mjs +34 -0
  51. package/esm2020/services/translator.mjs +63 -0
  52. package/esm2020/services/user-manager.mjs +27 -0
  53. package/esm2020/socket-controllers/progress.controller.mjs +52 -0
  54. package/esm2020/socket-controllers/terminal.controller.mjs +48 -0
  55. package/esm2020/socket-controllers/terminal.mjs +85 -0
  56. package/esm2020/socket-middlewares/compression.middleware.mjs +14 -0
  57. package/esm2020/static.mjs +23 -0
  58. package/esm2020/utilities/decorators.mjs +52 -0
  59. package/esm2020/utilities/di-container.mjs +83 -0
  60. package/esm2020/utilities/empty-job.mjs +13 -0
  61. package/esm2020/utilities/lazy-asset-generator.mjs +35 -0
  62. package/esm2020/utilities/mongoose.mjs +216 -0
  63. package/esm2020/utils.mjs +693 -0
  64. package/esm2020/validators.mjs +46 -0
  65. package/fesm2015/{stemy-backend.js → stemy-backend.mjs} +1638 -2403
  66. package/fesm2015/stemy-backend.mjs.map +1 -0
  67. package/fesm2020/stemy-backend.mjs +4202 -0
  68. package/fesm2020/stemy-backend.mjs.map +1 -0
  69. package/{stemy-backend.d.ts → index.d.ts} +1 -0
  70. package/package.json +35 -23
  71. package/public_api.d.ts +2 -2
  72. package/rest-controllers/terminal-styles.d.ts +2 -0
  73. package/rest-controllers/terminal.controller.d.ts +2 -0
  74. package/services/assets.d.ts +1 -0
  75. package/services/entities/asset.d.ts +1 -0
  76. package/services/entities/temp-asset.d.ts +1 -0
  77. package/services/fixtures.d.ts +2 -2
  78. package/utils.d.ts +3 -0
  79. package/bundles/stemy-backend.umd.js +0 -7553
  80. package/bundles/stemy-backend.umd.js.map +0 -1
  81. package/esm2015/common-types.js +0 -20
  82. package/esm2015/public_api.js +0 -380
  83. package/esm2015/requests/asset-image-params.js +0 -70
  84. package/esm2015/rest-controllers/assets.controller.js +0 -180
  85. package/esm2015/rest-controllers/auth.controller.js +0 -76
  86. package/esm2015/rest-controllers/gallery.controller.js +0 -37
  87. package/esm2015/rest-controllers/progresses.controller.js +0 -57
  88. package/esm2015/rest-controllers/terminal.controller.js +0 -151
  89. package/esm2015/rest-middlewares/container.middleware.js +0 -32
  90. package/esm2015/rest-middlewares/error-handler.middleware.js +0 -99
  91. package/esm2015/rest-middlewares/language.middleware.js +0 -28
  92. package/esm2015/rest-middlewares/request-ended.middleware.js +0 -33
  93. package/esm2015/rest-middlewares/request-started.middleware.js +0 -32
  94. package/esm2015/rest-openapi.js +0 -44
  95. package/esm2015/services/asset-processor.js +0 -108
  96. package/esm2015/services/asset-resolver.js +0 -53
  97. package/esm2015/services/assets.js +0 -181
  98. package/esm2015/services/backend-provider.js +0 -32
  99. package/esm2015/services/cache-processor.js +0 -34
  100. package/esm2015/services/cache.js +0 -93
  101. package/esm2015/services/endpoint-provider.js +0 -29
  102. package/esm2015/services/entities/asset.js +0 -60
  103. package/esm2015/services/entities/base-entity.js +0 -37
  104. package/esm2015/services/entities/lazy-asset.js +0 -90
  105. package/esm2015/services/entities/progress.js +0 -213
  106. package/esm2015/services/entities/temp-asset.js +0 -64
  107. package/esm2015/services/fixtures.js +0 -45
  108. package/esm2015/services/gallery-cache.js +0 -36
  109. package/esm2015/services/gallery-image.js +0 -48
  110. package/esm2015/services/gallery.js +0 -138
  111. package/esm2015/services/id-generator.js +0 -63
  112. package/esm2015/services/job-manager.js +0 -221
  113. package/esm2015/services/lazy-assets.js +0 -83
  114. package/esm2015/services/logger.js +0 -31
  115. package/esm2015/services/mail-sender.js +0 -58
  116. package/esm2015/services/memory-cache.js +0 -84
  117. package/esm2015/services/mongo-connector.js +0 -58
  118. package/esm2015/services/open-api.js +0 -140
  119. package/esm2015/services/progresses.js +0 -118
  120. package/esm2015/services/template-renderer.js +0 -88
  121. package/esm2015/services/terminal-manager.js +0 -94
  122. package/esm2015/services/token-generator.js +0 -55
  123. package/esm2015/services/translation-provider.js +0 -54
  124. package/esm2015/services/translator.js +0 -84
  125. package/esm2015/services/user-manager.js +0 -47
  126. package/esm2015/socket-controllers/progress.controller.js +0 -82
  127. package/esm2015/socket-controllers/terminal.controller.js +0 -83
  128. package/esm2015/socket-controllers/terminal.js +0 -98
  129. package/esm2015/socket-middlewares/compression.middleware.js +0 -19
  130. package/esm2015/static.js +0 -33
  131. package/esm2015/utilities/clear-command.js +0 -33
  132. package/esm2015/utilities/decorators.js +0 -54
  133. package/esm2015/utilities/di-container.js +0 -84
  134. package/esm2015/utilities/empty-job.js +0 -29
  135. package/esm2015/utilities/lazy-asset-generator.js +0 -46
  136. package/esm2015/utilities/mongoose.js +0 -225
  137. package/esm2015/utils.js +0 -699
  138. package/esm2015/validators.js +0 -51
  139. package/fesm2015/stemy-backend.js.map +0 -1
  140. package/rest-openapi.d.ts +0 -3
  141. package/stemy-backend.metadata.json +0 -1
  142. /package/{utilities → commands}/clear-command.d.ts +0 -0
  143. /package/{esm2015/stemy-backend.js → esm2020/stemy-backend.mjs} +0 -0
  144. /package/{esm2015/utilities/base-doc.js → esm2020/utilities/base-doc.mjs} +0 -0
  145. /package/{esm2015/utilities/tree.js → esm2020/utilities/tree.mjs} +0 -0
@@ -1,54 +0,0 @@
1
- import { getStatusCode, OpenAPI } from "routing-controllers-openapi";
2
- export function IsDocumented(summary = null, paramDescriptions = {}) {
3
- return OpenAPI(op => {
4
- var _a;
5
- op.summary = summary || op.summary;
6
- op.tags = ["Documented"].concat(op.tags || []);
7
- (_a = op.parameters) === null || _a === void 0 ? void 0 : _a.forEach(p => {
8
- if (p.$ref)
9
- return;
10
- const schema = p;
11
- schema.description = paramDescriptions[schema.name]
12
- || schema.description
13
- || `param.${op.operationId}.${schema.name}`.toLowerCase();
14
- });
15
- return op;
16
- });
17
- }
18
- export function JsonResponse(description = "Success", statusCode = null) {
19
- return OpenAPI((op, route) => {
20
- const status = statusCode !== null && statusCode !== void 0 ? statusCode : getStatusCode(route) + "";
21
- op.responses = op.responses || {};
22
- op.responses[status] = {
23
- description,
24
- content: {
25
- "application/json": {}
26
- }
27
- };
28
- return op;
29
- });
30
- }
31
- export function ResponseType(type, options = {}) {
32
- return OpenAPI((op, route) => {
33
- var _a;
34
- const contentType = "application/json";
35
- const statusCode = (_a = options === null || options === void 0 ? void 0 : options.statusCode) !== null && _a !== void 0 ? _a : getStatusCode(route) + "";
36
- const reference = {
37
- $ref: `#/components/schemas/${type.name}`,
38
- };
39
- const schema = options.isArray
40
- ? { items: reference, type: "array" }
41
- : reference;
42
- op.responses = op.responses || {};
43
- op.responses[statusCode] = {
44
- description: options.description || "Success",
45
- content: {
46
- [contentType]: {
47
- schema
48
- }
49
- }
50
- };
51
- return op;
52
- });
53
- }
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlsaXRpZXMvZGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsYUFBYSxFQUFFLE9BQU8sRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBR25FLE1BQU0sVUFBVSxZQUFZLENBQUMsVUFBa0IsSUFBSSxFQUFFLG9CQUE4QyxFQUFFO0lBQ2pHLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFOztRQUNoQixFQUFFLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQ25DLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvQyxNQUFBLEVBQUUsQ0FBQyxVQUFVLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsQ0FBQyxJQUFJO2dCQUFFLE9BQU87WUFDbkIsTUFBTSxNQUFNLEdBQUcsQ0FBaUIsQ0FBQztZQUNqQyxNQUFNLENBQUMsV0FBVyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7bUJBQzVDLE1BQU0sQ0FBQyxXQUFXO21CQUNsQixTQUFTLEVBQUUsQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLGNBQXNCLFNBQVMsRUFBRSxhQUFxQixJQUFJO0lBQ25GLE9BQU8sT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLFVBQVUsYUFBVixVQUFVLGNBQVYsVUFBVSxHQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkQsRUFBRSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHO1lBQ25CLFdBQVc7WUFDWCxPQUFPLEVBQUU7Z0JBQ0wsa0JBQWtCLEVBQUUsRUFBRTthQUN6QjtTQUNKLENBQUM7UUFDRixPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQVFELE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBYyxFQUFFLFVBQWdDLEVBQUU7SUFDM0UsT0FBTyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7O1FBQ3pCLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDO1FBQ3ZDLE1BQU0sVUFBVSxHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFVBQVUsbUNBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNwRSxNQUFNLFNBQVMsR0FBb0I7WUFDL0IsSUFBSSxFQUFFLHdCQUF3QixJQUFJLENBQUMsSUFBSSxFQUFFO1NBQzVDLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBaUIsT0FBTyxDQUFDLE9BQU87WUFDeEMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ3JDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEIsRUFBRSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHO1lBQ3ZCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLFNBQVM7WUFDN0MsT0FBTyxFQUFFO2dCQUNMLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQ1gsTUFBTTtpQkFDVDthQUNKO1NBQ0osQ0FBQztRQUNGLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtnZXRTdGF0dXNDb2RlLCBPcGVuQVBJfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVycy1vcGVuYXBpXCI7XHJcbmltcG9ydCB7UmVmZXJlbmNlT2JqZWN0LCBTY2hlbWFPYmplY3R9IGZyb20gXCJvcGVuYXBpMy10c1wiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIElzRG9jdW1lbnRlZChzdW1tYXJ5OiBzdHJpbmcgPSBudWxsLCBwYXJhbURlc2NyaXB0aW9uczoge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9ID0ge30pIHtcclxuICAgIHJldHVybiBPcGVuQVBJKG9wID0+IHtcclxuICAgICAgICBvcC5zdW1tYXJ5ID0gc3VtbWFyeSB8fCBvcC5zdW1tYXJ5O1xyXG4gICAgICAgIG9wLnRhZ3MgPSBbXCJEb2N1bWVudGVkXCJdLmNvbmNhdChvcC50YWdzIHx8IFtdKTtcclxuICAgICAgICBvcC5wYXJhbWV0ZXJzPy5mb3JFYWNoKHAgPT4ge1xyXG4gICAgICAgICAgICBpZiAocC4kcmVmKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHAgYXMgU2NoZW1hT2JqZWN0O1xyXG4gICAgICAgICAgICBzY2hlbWEuZGVzY3JpcHRpb24gPSBwYXJhbURlc2NyaXB0aW9uc1tzY2hlbWEubmFtZV1cclxuICAgICAgICAgICAgICAgIHx8IHNjaGVtYS5kZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgfHwgYHBhcmFtLiR7b3Aub3BlcmF0aW9uSWR9LiR7c2NoZW1hLm5hbWV9YC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBvcDtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gSnNvblJlc3BvbnNlKGRlc2NyaXB0aW9uOiBzdHJpbmcgPSBcIlN1Y2Nlc3NcIiwgc3RhdHVzQ29kZTogbnVtYmVyID0gbnVsbCkge1xyXG4gICAgcmV0dXJuIE9wZW5BUEkoKG9wLCByb3V0ZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHN0YXR1c0NvZGUgPz8gZ2V0U3RhdHVzQ29kZShyb3V0ZSkgKyBcIlwiO1xyXG4gICAgICAgIG9wLnJlc3BvbnNlcyA9IG9wLnJlc3BvbnNlcyB8fCB7fTtcclxuICAgICAgICBvcC5yZXNwb25zZXNbc3RhdHVzXSA9IHtcclxuICAgICAgICAgICAgZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICAgICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7fVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gb3A7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUmVzcG9uc2VUeXBlT3B0aW9ucyB7XHJcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcclxuICAgIHN0YXR1c0NvZGU/OiBudW1iZXI7XHJcbiAgICBpc0FycmF5PzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFJlc3BvbnNlVHlwZSh0eXBlOiBGdW5jdGlvbiwgb3B0aW9uczogSVJlc3BvbnNlVHlwZU9wdGlvbnMgPSB7fSkge1xyXG4gICAgcmV0dXJuIE9wZW5BUEkoKG9wLCByb3V0ZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IG9wdGlvbnM/LnN0YXR1c0NvZGUgPz8gZ2V0U3RhdHVzQ29kZShyb3V0ZSkgKyBcIlwiO1xyXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZTogUmVmZXJlbmNlT2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAkcmVmOiBgIy9jb21wb25lbnRzL3NjaGVtYXMvJHt0eXBlLm5hbWV9YCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHNjaGVtYTogU2NoZW1hT2JqZWN0ID0gb3B0aW9ucy5pc0FycmF5XHJcbiAgICAgICAgICAgID8geyBpdGVtczogcmVmZXJlbmNlLCB0eXBlOiBcImFycmF5XCIgfVxyXG4gICAgICAgICAgICA6IHJlZmVyZW5jZTtcclxuICAgICAgICBvcC5yZXNwb25zZXMgPSBvcC5yZXNwb25zZXMgfHwge307XHJcbiAgICAgICAgb3AucmVzcG9uc2VzW3N0YXR1c0NvZGVdID0ge1xyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbiB8fCBcIlN1Y2Nlc3NcIixcclxuICAgICAgICAgICAgY29udGVudDoge1xyXG4gICAgICAgICAgICAgICAgW2NvbnRlbnRUeXBlXToge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gb3A7XHJcbiAgICB9KTtcclxufVxyXG4iXX0=
@@ -1,84 +0,0 @@
1
- import { isFactoryProvider } from "tsyringe";
2
- import { Tree } from "./tree";
3
- import { isString } from "../utils";
4
- export class DiContainer {
5
- constructor(container, parent = null) {
6
- this.container = container;
7
- this.parent = parent;
8
- container["wrapperContainer"] = this;
9
- this.tokens = [];
10
- this.tokenSet = new Set();
11
- this.root = new Tree(this, false, "");
12
- }
13
- get registeredTokens() {
14
- var _a;
15
- return (((_a = this.parent) === null || _a === void 0 ? void 0 : _a.registeredTokens) || []).concat(this.tokens);
16
- }
17
- get tree() {
18
- return this.root;
19
- }
20
- beforeResolution(token, callback, options) {
21
- this.container.beforeResolution(token, callback, options);
22
- }
23
- afterResolution(token, callback, options) {
24
- this.container.afterResolution(token, callback, options);
25
- }
26
- clearInstances() {
27
- this.container.clearInstances();
28
- }
29
- createChildContainer() {
30
- return new DiContainer(this.container.createChildContainer(), this);
31
- }
32
- isRegistered(token, recursive) {
33
- return this.container.isRegistered(token, recursive);
34
- }
35
- register(token, provider, options) {
36
- if (isFactoryProvider(provider)) {
37
- this.container.register(token, {
38
- useFactory: dc => {
39
- return provider.useFactory(dc["wrapperContainer"]);
40
- }
41
- });
42
- return this.addToken(token);
43
- }
44
- this.container.register(token, provider);
45
- return this.addToken(token);
46
- }
47
- registerInstance(token, instance) {
48
- this.container.registerInstance(token, instance);
49
- return this.addToken(token);
50
- }
51
- registerSingleton(from, to) {
52
- this.container.registerSingleton(from, to);
53
- return this.addToken(from);
54
- }
55
- registerType(from, to) {
56
- this.container.registerType(from, to);
57
- return this.addToken(from);
58
- }
59
- reset() {
60
- this.tokens = [];
61
- this.tokenSet = new Set();
62
- this.container.reset();
63
- }
64
- resolve(token) {
65
- return this.container.resolve(token);
66
- }
67
- resolveAll(token) {
68
- return this.container.resolveAll(token);
69
- }
70
- get(token) {
71
- return this.container.resolve(token);
72
- }
73
- addToken(token) {
74
- if (this.tokenSet.has(token))
75
- return this;
76
- this.tokenSet.add(token);
77
- this.tokens.push(token);
78
- if (isString(token)) {
79
- this.root.addPath(token);
80
- }
81
- return this;
82
- }
83
- }
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGktY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxpdGllcy9kaS1jb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUtILGlCQUFpQixFQUlwQixNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFVbEMsTUFBTSxPQUFPLFdBQVc7SUFjcEIsWUFBc0IsU0FBOEIsRUFBVyxTQUErQixJQUFJO1FBQTVFLGNBQVMsR0FBVCxTQUFTLENBQXFCO1FBQVcsV0FBTSxHQUFOLE1BQU0sQ0FBNkI7UUFDOUYsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFqQkQsSUFBSSxnQkFBZ0I7O1FBQ2hCLE9BQU8sQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLE1BQU0sMENBQUUsZ0JBQWdCLEtBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ0osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFhRCxnQkFBZ0IsQ0FBSSxLQUF3QixFQUFFLFFBQTZDLEVBQUUsT0FBa0M7UUFDM0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxlQUFlLENBQUksS0FBd0IsRUFBRSxRQUE4QyxFQUFFLE9BQWtDO1FBQzNILElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxvQkFBb0I7UUFDaEIsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELFlBQVksQ0FBSSxLQUF3QixFQUFFLFNBQW1CO1FBQ3pELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFPRCxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUE2QjtRQUNuRCxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtnQkFDM0IsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFO29CQUNiLE9BQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDO2FBQ0osQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUksS0FBd0IsRUFBRSxRQUFXO1FBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBSUQsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEVBQUc7UUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDM0MsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxZQUFZLENBQUksSUFBdUIsRUFBRSxFQUFxQjtRQUMxRCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxPQUFPLENBQUksS0FBd0I7UUFDL0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsVUFBVSxDQUFJLEtBQXdCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELEdBQUcsQ0FBSSxLQUF3QjtRQUMzQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFUyxRQUFRLENBQUksS0FBd0I7UUFDMUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDbGFzc1Byb3ZpZGVyLFxyXG4gICAgRGVwZW5kZW5jeUNvbnRhaW5lcixcclxuICAgIEZyZXF1ZW5jeSxcclxuICAgIEluamVjdGlvblRva2VuLFxyXG4gICAgaXNGYWN0b3J5UHJvdmlkZXIsXHJcbiAgICBSZWdpc3RyYXRpb25PcHRpb25zLFxyXG4gICAgVG9rZW5Qcm92aWRlcixcclxuICAgIFZhbHVlUHJvdmlkZXJcclxufSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtGYWN0b3J5UHJvdmlkZXIsIElEZXBlbmRlbmN5Q29udGFpbmVyLCBJVHJlZSwgVHlwZX0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge1RyZWV9IGZyb20gXCIuL3RyZWVcIjtcclxuaW1wb3J0IHtpc1N0cmluZ30gZnJvbSBcIi4uL3V0aWxzXCI7XHJcblxyXG5pbnRlcmZhY2UgUHJlUmVzb2x1dGlvbkludGVyY2VwdG9yQ2FsbGJhY2s8VCA9IGFueT4ge1xyXG4gICAgKHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgcmVzb2x1dGlvblR5cGU6IFwiU2luZ2xlXCIgfCBcIkFsbFwiKTogdm9pZDtcclxufVxyXG5cclxuaW50ZXJmYWNlIFBvc3RSZXNvbHV0aW9uSW50ZXJjZXB0b3JDYWxsYmFjazxUID0gYW55PiB7XHJcbiAgICAodG9rZW46IEluamVjdGlvblRva2VuPFQ+LCByZXN1bHQ6IFQgfCBUW10sIHJlc29sdXRpb25UeXBlOiBcIlNpbmdsZVwiIHwgXCJBbGxcIik6IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBEaUNvbnRhaW5lciBpbXBsZW1lbnRzIElEZXBlbmRlbmN5Q29udGFpbmVyIHtcclxuXHJcbiAgICBnZXQgcmVnaXN0ZXJlZFRva2VucygpOiBSZWFkb25seUFycmF5PEluamVjdGlvblRva2VuPiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnBhcmVudD8ucmVnaXN0ZXJlZFRva2VucyB8fCBbXSkuY29uY2F0KHRoaXMudG9rZW5zKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdHJlZSgpOiBJVHJlZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdG9rZW5zOiBBcnJheTxJbmplY3Rpb25Ub2tlbj47XHJcbiAgICBwcm90ZWN0ZWQgdG9rZW5TZXQ6IFNldDxJbmplY3Rpb25Ub2tlbj47XHJcbiAgICBwcm90ZWN0ZWQgcm9vdDogVHJlZTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY29udGFpbmVyOiBEZXBlbmRlbmN5Q29udGFpbmVyLCByZWFkb25seSBwYXJlbnQ6IElEZXBlbmRlbmN5Q29udGFpbmVyID0gbnVsbCkge1xyXG4gICAgICAgIGNvbnRhaW5lcltcIndyYXBwZXJDb250YWluZXJcIl0gPSB0aGlzO1xyXG4gICAgICAgIHRoaXMudG9rZW5zID0gW107XHJcbiAgICAgICAgdGhpcy50b2tlblNldCA9IG5ldyBTZXQ8SW5qZWN0aW9uVG9rZW4+KCk7XHJcbiAgICAgICAgdGhpcy5yb290ID0gbmV3IFRyZWUodGhpcywgZmFsc2UsIFwiXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGJlZm9yZVJlc29sdXRpb248VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBjYWxsYmFjazogUHJlUmVzb2x1dGlvbkludGVyY2VwdG9yQ2FsbGJhY2s8VD4sIG9wdGlvbnM/OiB7IGZyZXF1ZW5jeTogRnJlcXVlbmN5IH0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5iZWZvcmVSZXNvbHV0aW9uKHRva2VuLCBjYWxsYmFjaywgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWZ0ZXJSZXNvbHV0aW9uPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgY2FsbGJhY2s6IFBvc3RSZXNvbHV0aW9uSW50ZXJjZXB0b3JDYWxsYmFjazxUPiwgb3B0aW9ucz86IHsgZnJlcXVlbmN5OiBGcmVxdWVuY3kgfSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLmFmdGVyUmVzb2x1dGlvbih0b2tlbiwgY2FsbGJhY2ssIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFySW5zdGFuY2VzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLmNsZWFySW5zdGFuY2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlQ2hpbGRDb250YWluZXIoKTogSURlcGVuZGVuY3lDb250YWluZXIge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGlDb250YWluZXIodGhpcy5jb250YWluZXIuY3JlYXRlQ2hpbGRDb250YWluZXIoKSwgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNSZWdpc3RlcmVkPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgcmVjdXJzaXZlPzogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5pc1JlZ2lzdGVyZWQodG9rZW4sIHJlY3Vyc2l2ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogVmFsdWVQcm92aWRlcjxUPik6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogRmFjdG9yeVByb3ZpZGVyPFQ+KTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3RlcjxUPih0b2tlbjogSW5qZWN0aW9uVG9rZW48VD4sIHByb3ZpZGVyOiBUb2tlblByb3ZpZGVyPFQ+LCBvcHRpb25zPzogUmVnaXN0cmF0aW9uT3B0aW9ucyk6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogQ2xhc3NQcm92aWRlcjxUPiwgb3B0aW9ucz86IFJlZ2lzdHJhdGlvbk9wdGlvbnMpOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVyPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgcHJvdmlkZXI6IFR5cGU8VD4sIG9wdGlvbnM/OiBSZWdpc3RyYXRpb25PcHRpb25zKTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3Rlcih0b2tlbiwgcHJvdmlkZXIsIG9wdGlvbnM/OiBSZWdpc3RyYXRpb25PcHRpb25zKTogSURlcGVuZGVuY3lDb250YWluZXIge1xyXG4gICAgICAgIGlmIChpc0ZhY3RvcnlQcm92aWRlcihwcm92aWRlcikpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIucmVnaXN0ZXIodG9rZW4sIHtcclxuICAgICAgICAgICAgICAgIHVzZUZhY3Rvcnk6IGRjID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvdmlkZXIudXNlRmFjdG9yeShkY1tcIndyYXBwZXJDb250YWluZXJcIl0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkVG9rZW4odG9rZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5yZWdpc3Rlcih0b2tlbiwgcHJvdmlkZXIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZFRva2VuKHRva2VuKTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlckluc3RhbmNlPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgaW5zdGFuY2U6IFQpOiBJRGVwZW5kZW5jeUNvbnRhaW5lciB7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIucmVnaXN0ZXJJbnN0YW5jZSh0b2tlbiwgaW5zdGFuY2UpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZFRva2VuKHRva2VuKTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlclNpbmdsZXRvbjxUPihmcm9tOiBJbmplY3Rpb25Ub2tlbjxUPiwgdG86IEluamVjdGlvblRva2VuPFQ+KTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3RlclNpbmdsZXRvbjxUPih0b2tlbjogVHlwZTxUPik6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXJTaW5nbGV0b24oZnJvbSwgdG8/KTogSURlcGVuZGVuY3lDb250YWluZXIge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLnJlZ2lzdGVyU2luZ2xldG9uKGZyb20sIHRvKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGRUb2tlbihmcm9tKTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlclR5cGU8VD4oZnJvbTogSW5qZWN0aW9uVG9rZW48VD4sIHRvOiBJbmplY3Rpb25Ub2tlbjxUPik6IElEZXBlbmRlbmN5Q29udGFpbmVyIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5yZWdpc3RlclR5cGUoZnJvbSwgdG8pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZFRva2VuKGZyb20pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudG9rZW5zID0gW107XHJcbiAgICAgICAgdGhpcy50b2tlblNldCA9IG5ldyBTZXQ8SW5qZWN0aW9uVG9rZW4+KCk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXNvbHZlPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPik6IFQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5yZXNvbHZlKHRva2VuKTtcclxuICAgIH1cclxuXHJcbiAgICByZXNvbHZlQWxsPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPik6IFRbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLnJlc29sdmVBbGwodG9rZW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldDxUPih0b2tlbjogSW5qZWN0aW9uVG9rZW48VD4pOiBUIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXIucmVzb2x2ZSh0b2tlbik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFkZFRva2VuPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPik6IHRoaXMge1xyXG4gICAgICAgIGlmICh0aGlzLnRva2VuU2V0Lmhhcyh0b2tlbikpIHJldHVybiB0aGlzO1xyXG4gICAgICAgIHRoaXMudG9rZW5TZXQuYWRkKHRva2VuKTtcclxuICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHRva2VuKTtcclxuICAgICAgICBpZiAoaXNTdHJpbmcodG9rZW4pKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdC5hZGRQYXRoKHRva2VuKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -1,29 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9
- return new (P || (P = Promise))(function (resolve, reject) {
10
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
11
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
12
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
13
- step((generator = generator.apply(thisArg, _arguments || [])).next());
14
- });
15
- };
16
- import { injectable, Lifecycle, scoped } from "tsyringe";
17
- let EmptyJob = class EmptyJob {
18
- process() {
19
- return __awaiter(this, void 0, void 0, function* () {
20
- return null;
21
- });
22
- }
23
- };
24
- EmptyJob = __decorate([
25
- injectable(),
26
- scoped(Lifecycle.ContainerScoped)
27
- ], EmptyJob);
28
- export { EmptyJob };
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxpdGllcy9lbXB0eS1qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0lBSzFDLFFBQVEsU0FBUixRQUFRO0lBRVgsT0FBTzs7WUFDVCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQUE7Q0FDSixDQUFBO0FBTFksUUFBUTtJQUZwQixVQUFVLEVBQUU7SUFDWixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztHQUNyQixRQUFRLENBS3BCO1NBTFksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0YWJsZSwgTGlmZWN5Y2xlLCBzY29wZWR9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge0lKb2J9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxyXG5leHBvcnQgY2xhc3MgRW1wdHlKb2IgaW1wbGVtZW50cyBJSm9iIHtcclxuXHJcbiAgICBhc3luYyBwcm9jZXNzKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -1,46 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- export class LazyAssetGenerator {
11
- constructor(assetResolver, progresses, lazyId) {
12
- this.assetResolver = assetResolver;
13
- this.progresses = progresses;
14
- this.lazyId = lazyId;
15
- }
16
- get assets() {
17
- return this.assetResolver.assets;
18
- }
19
- get lazyAssets() {
20
- return this.assetResolver.lazyAssets;
21
- }
22
- process(messaging) {
23
- return __awaiter(this, void 0, void 0, function* () {
24
- const lazyAsset = yield this.lazyAssets.read(this.lazyId);
25
- let progress = yield this.progresses.get(lazyAsset.progressId);
26
- if (!progress || progress.canceled)
27
- return null;
28
- progress.setMessageBridge(messaging);
29
- try {
30
- const asset = yield this.generate(progress, messaging);
31
- progress = yield progress.load();
32
- if (!progress || progress.canceled)
33
- return null;
34
- yield lazyAsset.writeAsset(asset);
35
- }
36
- catch (e) {
37
- yield progress.setError(e.message || e);
38
- throw e;
39
- }
40
- if (progress.remaining > 0) {
41
- yield progress.advance(progress.remaining);
42
- }
43
- });
44
- }
45
- }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1hc3NldC1nZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbGl0aWVzL2xhenktYXNzZXQtZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE1BQU0sT0FBZ0Isa0JBQWtCO0lBVXBDLFlBQWdDLGFBQTRCLEVBQVksVUFBc0IsRUFBWSxNQUFjO1FBQXhGLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVksZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFZLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDeEgsQ0FBQztJQVRELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7SUFDekMsQ0FBQztJQU9LLE9BQU8sQ0FBQyxTQUF5Qjs7WUFDbkMsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUQsSUFBSSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNoRCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckMsSUFBSTtnQkFDQSxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUN2RCxRQUFRLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVE7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQ2hELE1BQU0sU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNyQztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLENBQUMsQ0FBQzthQUNYO1lBQ0QsSUFBSSxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRTtnQkFDeEIsTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUM5QztRQUNMLENBQUM7S0FBQTtDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJQXNzZXQsIElKb2IsIElNZXNzYWdlQnJpZGdlLCBJUHJvZ3Jlc3N9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtBc3NldHN9IGZyb20gXCIuLi9zZXJ2aWNlcy9hc3NldHNcIjtcclxuaW1wb3J0IHtMYXp5QXNzZXRzfSBmcm9tIFwiLi4vc2VydmljZXMvbGF6eS1hc3NldHNcIjtcclxuaW1wb3J0IHtBc3NldFJlc29sdmVyfSBmcm9tIFwiLi4vc2VydmljZXMvYXNzZXQtcmVzb2x2ZXJcIjtcclxuaW1wb3J0IHtQcm9ncmVzc2VzfSBmcm9tIFwiLi4vc2VydmljZXMvcHJvZ3Jlc3Nlc1wiO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExhenlBc3NldEdlbmVyYXRvciBpbXBsZW1lbnRzIElKb2Ige1xyXG5cclxuICAgIGdldCBhc3NldHMoKTogQXNzZXRzIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hc3NldFJlc29sdmVyLmFzc2V0cztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGF6eUFzc2V0cygpOiBMYXp5QXNzZXRzIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hc3NldFJlc29sdmVyLmxhenlBc3NldHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBhc3NldFJlc29sdmVyOiBBc3NldFJlc29sdmVyLCBwcm90ZWN0ZWQgcHJvZ3Jlc3NlczogUHJvZ3Jlc3NlcywgcHJvdGVjdGVkIGxhenlJZDogc3RyaW5nKSB7XHJcbiAgICB9XHJcblxyXG4gICAgYWJzdHJhY3QgZ2VuZXJhdGUocHJvZ3Jlc3M6IElQcm9ncmVzcywgbWVzc2FnaW5nPzogSU1lc3NhZ2VCcmlkZ2UpOiBQcm9taXNlPElBc3NldD47XHJcblxyXG4gICAgYXN5bmMgcHJvY2VzcyhtZXNzYWdpbmc6IElNZXNzYWdlQnJpZGdlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBsYXp5QXNzZXQgPSBhd2FpdCB0aGlzLmxhenlBc3NldHMucmVhZCh0aGlzLmxhenlJZCk7XHJcbiAgICAgICAgbGV0IHByb2dyZXNzID0gYXdhaXQgdGhpcy5wcm9ncmVzc2VzLmdldChsYXp5QXNzZXQucHJvZ3Jlc3NJZCk7XHJcbiAgICAgICAgaWYgKCFwcm9ncmVzcyB8fCBwcm9ncmVzcy5jYW5jZWxlZCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcHJvZ3Jlc3Muc2V0TWVzc2FnZUJyaWRnZShtZXNzYWdpbmcpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgdGhpcy5nZW5lcmF0ZShwcm9ncmVzcywgbWVzc2FnaW5nKTtcclxuICAgICAgICAgICAgcHJvZ3Jlc3MgPSBhd2FpdCBwcm9ncmVzcy5sb2FkKCk7XHJcbiAgICAgICAgICAgIGlmICghcHJvZ3Jlc3MgfHwgcHJvZ3Jlc3MuY2FuY2VsZWQpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICBhd2FpdCBsYXp5QXNzZXQud3JpdGVBc3NldChhc3NldCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBhd2FpdCBwcm9ncmVzcy5zZXRFcnJvcihlLm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcm9ncmVzcy5yZW1haW5pbmcgPiAwKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHByb2dyZXNzLmFkdmFuY2UocHJvZ3Jlc3MucmVtYWluaW5nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -1,225 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { model, Types } from "mongoose";
11
- import { getValue as getMongoValue, setValue as setMongoValue } from "mongoose/lib/utils";
12
- import { BadRequestError, createParamDecorator, HttpError } from "routing-controllers";
13
- import { diContainers, isArray, isFunction, isObject, isString, valueToPromise } from "../utils";
14
- const pluginsKey = "typegoose:plugins";
15
- /**
16
- * A mongoose/typegoose plugin to inject services from the main di container to a schema as virtuals
17
- * @param schema
18
- * @param services
19
- */
20
- export function injectServices(schema, services) {
21
- const serviceMap = {};
22
- if (!isObject(services)) {
23
- throw new Error(`services object should be defined to inject services to schema!`);
24
- }
25
- Object.keys(services).forEach(prop => {
26
- schema
27
- .virtual(prop)
28
- .get(() => {
29
- const diContainer = diContainers.appContainer;
30
- serviceMap[prop] = serviceMap[prop] || (!diContainer ? {} : diContainer.resolve(services[prop]));
31
- return serviceMap[prop];
32
- });
33
- });
34
- }
35
- /**
36
- * Decorates a property to inject a service with the help of the injectServices mongoose/typegoose plugin
37
- * @param token optional InjectionToken to use
38
- * @return PropertyDecorator
39
- */
40
- export function service(token) {
41
- return (target, propertyKey) => {
42
- var _a;
43
- const propertyType = Reflect.getOwnMetadata("design:type", target, propertyKey);
44
- const plugins = Array.from((_a = Reflect.getMetadata(pluginsKey, target.constructor)) !== null && _a !== void 0 ? _a : []);
45
- let plugin = plugins.find(t => t.mongoosePlugin === injectServices);
46
- if (!plugin) {
47
- plugin = { mongoosePlugin: injectServices, options: {} };
48
- plugins.push(plugin);
49
- }
50
- plugin.options = Object.assign(plugin.options || {}, { [propertyKey]: token !== null && token !== void 0 ? token : propertyType });
51
- Reflect.defineMetadata(pluginsKey, plugins, target.constructor);
52
- };
53
- }
54
- /**
55
- * Paginate using a typegoose model using a simple where query and pagination params
56
- * @param model Typegoose model
57
- * @param where Simple query to filter the results
58
- * @param params Pagination params
59
- */
60
- export function paginate(model, where, params) {
61
- return model.countDocuments(where).then(count => {
62
- let query = model.find(where);
63
- if (isString(params.sort)) {
64
- query = query.sort(params.sort);
65
- }
66
- if (isArray(params.populate)) {
67
- params.populate.forEach(field => {
68
- query = query.populate(field);
69
- });
70
- }
71
- return (params.limit > 0 ? query.skip(params.page * params.limit).limit(params.limit) : query).then(items => {
72
- const meta = { total: count };
73
- return { count, items, meta };
74
- });
75
- });
76
- }
77
- export function lookupStages(from, localField, as = null, foreignField = "_id", shouldUnwind = true) {
78
- as = as || localField.replace("Id", "");
79
- const stages = [
80
- {
81
- $lookup: {
82
- from,
83
- localField,
84
- foreignField,
85
- as
86
- }
87
- },
88
- {
89
- $unwind: {
90
- path: `$${as}`,
91
- preserveNullAndEmptyArrays: true
92
- }
93
- }
94
- ];
95
- if (!shouldUnwind) {
96
- stages.splice(1, 1);
97
- }
98
- return stages;
99
- }
100
- export function letsLookupStage(from, pipeline, as = null, letFields = null) {
101
- as = as || from;
102
- letFields = letFields || { id: "$_id" };
103
- return {
104
- $lookup: {
105
- from,
106
- let: letFields,
107
- pipeline,
108
- as
109
- }
110
- };
111
- }
112
- export function matchStage(match) {
113
- return { $match: match };
114
- }
115
- export function matchField(field, filter, when) {
116
- return { field, filter, when };
117
- }
118
- export function matchFieldStages(...fields) {
119
- const match = {};
120
- fields.forEach(field => {
121
- if (field.when) {
122
- match[field.field] = field.filter;
123
- }
124
- });
125
- return Object.keys(match).length > 0 ? [matchStage(match)] : [];
126
- }
127
- export function projectStage(fields) {
128
- return { $project: fields };
129
- }
130
- export function unwindStage(fieldOrOpts) {
131
- return { $unwind: fieldOrOpts };
132
- }
133
- export function hydratePopulated(modelType, json) {
134
- let object = modelType.hydrate(json);
135
- for (const [path, obj] of Object.entries(modelType.schema.obj)) {
136
- let { ref, type } = obj;
137
- if (Array.isArray(type) && type.length > 0) {
138
- ref = type[0].ref;
139
- }
140
- if (!ref)
141
- continue;
142
- const value = getMongoValue(path, json);
143
- const hydrateVal = val => {
144
- if (val == null || val instanceof Types.ObjectId)
145
- return val;
146
- return hydratePopulated(model(ref), val);
147
- };
148
- if (Array.isArray(value)) {
149
- setMongoValue(path, value.map(hydrateVal), object);
150
- continue;
151
- }
152
- setMongoValue(path, hydrateVal(value), object);
153
- }
154
- return object;
155
- }
156
- export function paginateAggregations(model, aggregations, params, metaProjection = {}) {
157
- return __awaiter(this, void 0, void 0, function* () {
158
- const sortField = !isString(params.sort) || !params.sort ? null : (params.sort.startsWith("-") ? params.sort.substr(1) : params.sort);
159
- const sortAggregation = !sortField ? [] : [{
160
- $sort: { [sortField]: sortField == params.sort ? 1 : -1 }
161
- }];
162
- const result = yield model.aggregate([
163
- ...aggregations,
164
- ...sortAggregation,
165
- {
166
- $group: {
167
- _id: "results",
168
- result: { $push: "$$CURRENT" }
169
- }
170
- },
171
- {
172
- $project: {
173
- _id: 0,
174
- items: params.limit > 0 ? { $slice: ["$result", params.page * params.limit, params.limit] } : "$result",
175
- count: { $size: "$result" },
176
- meta: Object.assign({ total: { $size: "$result" } }, metaProjection)
177
- }
178
- }
179
- ]);
180
- const pagination = result[0];
181
- if (!pagination) {
182
- return { items: [], count: 0, meta: { total: 0 } };
183
- }
184
- pagination.items = pagination.items.map(i => hydratePopulated(model, i));
185
- return pagination;
186
- });
187
- }
188
- export function ResolveEntity(model, extraCheck) {
189
- const modelName = model.modelName;
190
- const paramName = modelName.toLowerCase();
191
- return createParamDecorator({
192
- required: false,
193
- value: (action) => __awaiter(this, void 0, void 0, function* () {
194
- const req = action.request;
195
- const token = req.header(`x-${paramName}-token`);
196
- const id = req.params[`${paramName}Id`];
197
- if (!id && !token) {
198
- throw new BadRequestError(`${modelName} id or token should be defined!`);
199
- }
200
- const query = !token
201
- ? model.findById(id)
202
- : model.findOne({ token });
203
- let doc = null;
204
- if (isFunction(extraCheck)) {
205
- try {
206
- doc = yield valueToPromise(extraCheck(query, action));
207
- }
208
- catch (e) {
209
- throw new BadRequestError(`${modelName} check error: ${e.message || e}`);
210
- }
211
- }
212
- else {
213
- doc = yield query;
214
- }
215
- if (!doc) {
216
- throw new HttpError(404, !token
217
- ? `${modelName} could not be found with id: ${id}`
218
- : `${modelName} could not be found with token: ${token}`);
219
- }
220
- action.request[paramName] = doc;
221
- return doc;
222
- })
223
- });
224
- }
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ29vc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbGl0aWVzL21vbmdvb3NlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBd0IsS0FBSyxFQUF1QyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbEcsT0FBTyxFQUFDLFFBQVEsSUFBSSxhQUFhLEVBQUUsUUFBUSxJQUFJLGFBQWEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRXhGLE9BQU8sRUFBUyxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFZN0YsT0FBTyxFQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRS9GLE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDO0FBT3ZDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQW1CLEVBQUUsUUFBa0Q7SUFDbEcsTUFBTSxVQUFVLEdBQTRCLEVBQUUsQ0FBQztJQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQTtLQUNyRjtJQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2pDLE1BQU07YUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDO2FBQ2IsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNOLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUM7WUFDOUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLEtBQTJCO0lBQy9DLE9BQU8sQ0FBQyxNQUFXLEVBQUUsV0FBbUIsRUFBUSxFQUFFOztRQUM5QyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDaEYsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFBLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsbUNBQUksRUFBRSxDQUF5QixDQUFDO1FBQzlHLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxLQUFLLGNBQWMsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxNQUFNLEdBQUcsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN6RCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLEVBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLGFBQUwsS0FBSyxjQUFMLEtBQUssR0FBSSxZQUFZLEVBQUMsQ0FBQyxDQUFDO1FBQzdGLE9BQU8sQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEUsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBMkMsS0FBeUIsRUFBRSxLQUFtQyxFQUFFLE1BQXlCO0lBQ3hKLE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDNUMsSUFBSSxLQUFLLEdBQW9CLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQztRQUNELElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMxQixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDNUIsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDeEcsTUFBTSxJQUFJLEdBQUcsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUM7WUFDNUIsT0FBTyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQVksRUFBRSxVQUFrQixFQUFFLEtBQWEsSUFBSSxFQUFFLGVBQXVCLEtBQUssRUFBRSxlQUF3QixJQUFJO0lBQ3hJLEVBQUUsR0FBRyxFQUFFLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEMsTUFBTSxNQUFNLEdBQWlEO1FBQ3pEO1lBQ0ksT0FBTyxFQUFFO2dCQUNMLElBQUk7Z0JBQ0osVUFBVTtnQkFDVixZQUFZO2dCQUNaLEVBQUU7YUFDTDtTQUNKO1FBQ0Q7WUFDSSxPQUFPLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNkLDBCQUEwQixFQUFFLElBQUk7YUFDbkM7U0FDSjtLQUNKLENBQUM7SUFDRixJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDdkI7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxJQUFZLEVBQUUsUUFBa0csRUFBRSxLQUFhLElBQUksRUFBRSxZQUFpQixJQUFJO0lBQ3RMLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDO0lBQ2hCLFNBQVMsR0FBRyxTQUFTLElBQUksRUFBQyxFQUFFLEVBQUUsTUFBTSxFQUFDLENBQUM7SUFDdEMsT0FBTztRQUNILE9BQU8sRUFBRTtZQUNMLElBQUk7WUFDSixHQUFHLEVBQUUsU0FBUztZQUNkLFFBQVE7WUFDUixFQUFFO1NBQ0w7S0FDSixDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBdUI7SUFDOUMsT0FBTyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhLEVBQUUsTUFBVyxFQUFFLElBQWE7SUFDaEUsT0FBTyxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFHLE1BQXFCO0lBQ3JELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNqQixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ25CLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtZQUNaLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUNyQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNwRSxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUF1QjtJQUNoRCxPQUFPLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxDQUFDO0FBQzlCLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLFdBQW9DO0lBQzVELE9BQU8sRUFBQyxPQUFPLEVBQUUsV0FBVyxFQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBcUIsU0FBbUIsRUFBRSxJQUFTO0lBQy9FLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFckMsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUM1RCxJQUFJLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxHQUFHLEdBQVUsQ0FBQztRQUM3QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7U0FDckI7UUFDRCxJQUFJLENBQUMsR0FBRztZQUFFLFNBQVM7UUFDbkIsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4QyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsRUFBRTtZQUNyQixJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxZQUFZLEtBQUssQ0FBQyxRQUFRO2dCQUFFLE9BQU8sR0FBRyxDQUFDO1lBQzdELE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQztRQUNGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0QixhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbkQsU0FBUztTQUNaO1FBQ0QsYUFBYSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDbEQ7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUVsQixDQUFDO0FBRUQsTUFBTSxVQUFnQixvQkFBb0IsQ0FBMkMsS0FBeUIsRUFBRSxZQUE2QixFQUFFLE1BQXlCLEVBQUUsaUJBQXNCLEVBQUU7O1FBQzlMLE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0SSxNQUFNLGVBQWUsR0FBeUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0QsS0FBSyxFQUFFLEVBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQzthQUMxRCxDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDakMsR0FBRyxZQUFZO1lBQ2YsR0FBRyxlQUFlO1lBQ2xCO2dCQUNJLE1BQU0sRUFBRTtvQkFDSixHQUFHLEVBQUUsU0FBUztvQkFDZCxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsV0FBVyxFQUFDO2lCQUMvQjthQUNKO1lBQ0Q7Z0JBQ0ksUUFBUSxFQUFFO29CQUNOLEdBQUcsRUFBRSxDQUFDO29CQUNOLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO29CQUNyRyxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFDO29CQUN6QixJQUFJLGtCQUNBLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUMsSUFDdEIsY0FBYyxDQUNwQjtpQkFDSjthQUNKO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBcUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2IsT0FBTyxFQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFDLEVBQUMsQ0FBQztTQUNsRDtRQUNELFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFRLENBQUMsQ0FBQztRQUNoRixPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQUE7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUEyQyxLQUF5QixFQUFFLFVBQTZGO0lBQzVMLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDbEMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzFDLE9BQU8sb0JBQW9CLENBQUM7UUFDeEIsUUFBUSxFQUFFLEtBQUs7UUFDZixLQUFLLEVBQUUsQ0FBTSxNQUFNLEVBQUMsRUFBRTtZQUNsQixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBbUIsQ0FBQztZQUN2QyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssU0FBUyxRQUFRLENBQUMsQ0FBQztZQUNqRCxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxJQUFJLENBQVcsQ0FBQztZQUNsRCxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNmLE1BQU0sSUFBSSxlQUFlLENBQUMsR0FBRyxTQUFTLGlDQUFpQyxDQUFDLENBQUM7YUFDNUU7WUFDRCxNQUFNLEtBQUssR0FBRyxDQUFDLEtBQUs7Z0JBQ2hCLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBQyxLQUFLLEVBQVEsQ0FBQyxDQUFDO1lBQ3BDLElBQUksR0FBRyxHQUFhLElBQUksQ0FBQztZQUN6QixJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDeEIsSUFBSTtvQkFDQSxHQUFHLEdBQUcsTUFBTSxjQUFjLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUN6RDtnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFDUixNQUFNLElBQUksZUFBZSxDQUFDLEdBQUcsU0FBUyxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUM1RTthQUNKO2lCQUFNO2dCQUNILEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQzthQUNyQjtZQUNELElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ04sTUFBTSxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLO29CQUMzQixDQUFDLENBQUMsR0FBRyxTQUFTLGdDQUFnQyxFQUFFLEVBQUU7b0JBQ2xELENBQUMsQ0FBQyxHQUFHLFNBQVMsbUNBQW1DLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDakU7WUFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUNoQyxPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUMsQ0FBQTtLQUNKLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RvY3VtZW50LCBGaWx0ZXJRdWVyeSwgbW9kZWwsIE1vZGVsLCBQaXBlbGluZVN0YWdlLCBRdWVyeSwgU2NoZW1hLCBUeXBlc30gZnJvbSBcIm1vbmdvb3NlXCI7XHJcbmltcG9ydCB7Z2V0VmFsdWUgYXMgZ2V0TW9uZ29WYWx1ZSwgc2V0VmFsdWUgYXMgc2V0TW9uZ29WYWx1ZX0gZnJvbSBcIm1vbmdvb3NlL2xpYi91dGlsc1wiO1xyXG5pbXBvcnQge0RvY3VtZW50VHlwZSwgUmV0dXJuTW9kZWxUeXBlfSBmcm9tIFwiQHR5cGVnb29zZS90eXBlZ29vc2VcIjtcclxuaW1wb3J0IHtBY3Rpb24sIEJhZFJlcXVlc3RFcnJvciwgY3JlYXRlUGFyYW1EZWNvcmF0b3IsIEh0dHBFcnJvcn0gZnJvbSBcInJvdXRpbmctY29udHJvbGxlcnNcIjtcclxuaW1wb3J0IHtJbmplY3Rpb25Ub2tlbn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBJTWF0Y2hGaWVsZCxcclxuICAgIEluZmVyR2VuZXJpYyxcclxuICAgIElQYWdpbmF0aW9uQmFzZSxcclxuICAgIElQYWdpbmF0aW9uUGFyYW1zLFxyXG4gICAgSVByb2plY3RPcHRpb25zLFxyXG4gICAgSVJlcXVlc3QsXHJcbiAgICBJVW53aW5kT3B0aW9ucyxcclxuICAgIFR5cGVcclxufSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7ZGlDb250YWluZXJzLCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc09iamVjdCwgaXNTdHJpbmcsIHZhbHVlVG9Qcm9taXNlfSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuXHJcbmNvbnN0IHBsdWdpbnNLZXkgPSBcInR5cGVnb29zZTpwbHVnaW5zXCI7XHJcblxyXG5pbnRlcmZhY2UgSVBsdWdpbldpdGhPcHRpb25zIHtcclxuICAgIG1vbmdvb3NlUGx1Z2luOiBGdW5jdGlvbjtcclxuICAgIG9wdGlvbnM6IGFueTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgbW9uZ29vc2UvdHlwZWdvb3NlIHBsdWdpbiB0byBpbmplY3Qgc2VydmljZXMgZnJvbSB0aGUgbWFpbiBkaSBjb250YWluZXIgdG8gYSBzY2hlbWEgYXMgdmlydHVhbHNcclxuICogQHBhcmFtIHNjaGVtYVxyXG4gKiBAcGFyYW0gc2VydmljZXNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RTZXJ2aWNlcyhzY2hlbWE6IFNjaGVtYTxhbnk+LCBzZXJ2aWNlcz86IHsgW3Byb3A6IHN0cmluZ106IEluamVjdGlvblRva2VuPGFueT4gfSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VydmljZU1hcDogeyBbcHJvcDogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgIGlmICghaXNPYmplY3Qoc2VydmljZXMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzZXJ2aWNlcyBvYmplY3Qgc2hvdWxkIGJlIGRlZmluZWQgdG8gaW5qZWN0IHNlcnZpY2VzIHRvIHNjaGVtYSFgKVxyXG4gICAgfVxyXG4gICAgT2JqZWN0LmtleXMoc2VydmljZXMpLmZvckVhY2gocHJvcCA9PiB7XHJcbiAgICAgICAgc2NoZW1hXHJcbiAgICAgICAgICAgIC52aXJ0dWFsKHByb3ApXHJcbiAgICAgICAgICAgIC5nZXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlDb250YWluZXIgPSBkaUNvbnRhaW5lcnMuYXBwQ29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgc2VydmljZU1hcFtwcm9wXSA9IHNlcnZpY2VNYXBbcHJvcF0gfHwgKCFkaUNvbnRhaW5lciA/IHt9IDogZGlDb250YWluZXIucmVzb2x2ZShzZXJ2aWNlc1twcm9wXSkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2VNYXBbcHJvcF07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZWNvcmF0ZXMgYSBwcm9wZXJ0eSB0byBpbmplY3QgYSBzZXJ2aWNlIHdpdGggdGhlIGhlbHAgb2YgdGhlIGluamVjdFNlcnZpY2VzIG1vbmdvb3NlL3R5cGVnb29zZSBwbHVnaW5cclxuICogQHBhcmFtIHRva2VuIG9wdGlvbmFsIEluamVjdGlvblRva2VuIHRvIHVzZVxyXG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2VydmljZSh0b2tlbj86IEluamVjdGlvblRva2VuPGFueT4pOiBQcm9wZXJ0eURlY29yYXRvciB7XHJcbiAgICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJvcGVydHlUeXBlID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG4gICAgICAgIGNvbnN0IHBsdWdpbnMgPSBBcnJheS5mcm9tKFJlZmxlY3QuZ2V0TWV0YWRhdGEocGx1Z2luc0tleSwgdGFyZ2V0LmNvbnN0cnVjdG9yKSA/PyBbXSkgYXMgSVBsdWdpbldpdGhPcHRpb25zW107XHJcbiAgICAgICAgbGV0IHBsdWdpbiA9IHBsdWdpbnMuZmluZCh0ID0+IHQubW9uZ29vc2VQbHVnaW4gPT09IGluamVjdFNlcnZpY2VzKTtcclxuICAgICAgICBpZiAoIXBsdWdpbikge1xyXG4gICAgICAgICAgICBwbHVnaW4gPSB7IG1vbmdvb3NlUGx1Z2luOiBpbmplY3RTZXJ2aWNlcywgb3B0aW9uczoge30gfTtcclxuICAgICAgICAgICAgcGx1Z2lucy5wdXNoKHBsdWdpbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBsdWdpbi5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihwbHVnaW4ub3B0aW9ucyB8fCB7fSwge1twcm9wZXJ0eUtleV06IHRva2VuID8/IHByb3BlcnR5VHlwZX0pO1xyXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEocGx1Z2luc0tleSwgcGx1Z2lucywgdGFyZ2V0LmNvbnN0cnVjdG9yKTtcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYWdpbmF0ZSB1c2luZyBhIHR5cGVnb29zZSBtb2RlbCB1c2luZyBhIHNpbXBsZSB3aGVyZSBxdWVyeSBhbmQgcGFnaW5hdGlvbiBwYXJhbXNcclxuICogQHBhcmFtIG1vZGVsIFR5cGVnb29zZSBtb2RlbFxyXG4gKiBAcGFyYW0gd2hlcmUgU2ltcGxlIHF1ZXJ5IHRvIGZpbHRlciB0aGUgcmVzdWx0c1xyXG4gKiBAcGFyYW0gcGFyYW1zIFBhZ2luYXRpb24gcGFyYW1zXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcGFnaW5hdGU8VCBleHRlbmRzIFR5cGU8YW55PiwgVSA9IEluZmVyR2VuZXJpYzxUPj4obW9kZWw6IFJldHVybk1vZGVsVHlwZTxUPiwgd2hlcmU6IEZpbHRlclF1ZXJ5PERvY3VtZW50VHlwZTxVPj4sIHBhcmFtczogSVBhZ2luYXRpb25QYXJhbXMpOiBQcm9taXNlPElQYWdpbmF0aW9uQmFzZTxEb2N1bWVudFR5cGU8VT4+PiB7XHJcbiAgICByZXR1cm4gbW9kZWwuY291bnREb2N1bWVudHMod2hlcmUpLnRoZW4oY291bnQgPT4ge1xyXG4gICAgICAgIGxldCBxdWVyeTogUXVlcnk8YW55LCBhbnk+ID0gbW9kZWwuZmluZCh3aGVyZSk7XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHBhcmFtcy5zb3J0KSkge1xyXG4gICAgICAgICAgICBxdWVyeSA9IHF1ZXJ5LnNvcnQocGFyYW1zLnNvcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNBcnJheShwYXJhbXMucG9wdWxhdGUpKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5wb3B1bGF0ZS5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucG9wdWxhdGUoZmllbGQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChwYXJhbXMubGltaXQgPiAwID8gcXVlcnkuc2tpcChwYXJhbXMucGFnZSAqIHBhcmFtcy5saW1pdCkubGltaXQocGFyYW1zLmxpbWl0KSA6IHF1ZXJ5KS50aGVuKGl0ZW1zID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWV0YSA9IHt0b3RhbDogY291bnR9O1xyXG4gICAgICAgICAgICByZXR1cm4ge2NvdW50LCBpdGVtcywgbWV0YX07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvb2t1cFN0YWdlcyhmcm9tOiBzdHJpbmcsIGxvY2FsRmllbGQ6IHN0cmluZywgYXM6IHN0cmluZyA9IG51bGwsIGZvcmVpZ25GaWVsZDogc3RyaW5nID0gXCJfaWRcIiwgc2hvdWxkVW53aW5kOiBib29sZWFuID0gdHJ1ZSk6IFtQaXBlbGluZVN0YWdlLkxvb2t1cCwgUGlwZWxpbmVTdGFnZS5VbndpbmRdIHtcclxuICAgIGFzID0gYXMgfHwgbG9jYWxGaWVsZC5yZXBsYWNlKFwiSWRcIiwgXCJcIik7XHJcbiAgICBjb25zdCBzdGFnZXM6IFtQaXBlbGluZVN0YWdlLkxvb2t1cCwgUGlwZWxpbmVTdGFnZS5VbndpbmRdID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgJGxvb2t1cDoge1xyXG4gICAgICAgICAgICAgICAgZnJvbSxcclxuICAgICAgICAgICAgICAgIGxvY2FsRmllbGQsXHJcbiAgICAgICAgICAgICAgICBmb3JlaWduRmllbGQsXHJcbiAgICAgICAgICAgICAgICBhc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgICR1bndpbmQ6IHtcclxuICAgICAgICAgICAgICAgIHBhdGg6IGAkJHthc31gLFxyXG4gICAgICAgICAgICAgICAgcHJlc2VydmVOdWxsQW5kRW1wdHlBcnJheXM6IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIF07XHJcbiAgICBpZiAoIXNob3VsZFVud2luZCkge1xyXG4gICAgICAgIHN0YWdlcy5zcGxpY2UoMSwgMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RhZ2VzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbGV0c0xvb2t1cFN0YWdlKGZyb206IHN0cmluZywgcGlwZWxpbmU6IEV4Y2x1ZGU8UGlwZWxpbmVTdGFnZSwgUGlwZWxpbmVTdGFnZS5NZXJnZSB8IFBpcGVsaW5lU3RhZ2UuT3V0IHwgUGlwZWxpbmVTdGFnZS5TZWFyY2g+W10sIGFzOiBzdHJpbmcgPSBudWxsLCBsZXRGaWVsZHM6IGFueSA9IG51bGwpOiBQaXBlbGluZVN0YWdlLkxvb2t1cCB7XHJcbiAgICBhcyA9IGFzIHx8IGZyb207XHJcbiAgICBsZXRGaWVsZHMgPSBsZXRGaWVsZHMgfHwge2lkOiBcIiRfaWRcIn07XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgICRsb29rdXA6IHtcclxuICAgICAgICAgICAgZnJvbSxcclxuICAgICAgICAgICAgbGV0OiBsZXRGaWVsZHMsXHJcbiAgICAgICAgICAgIHBpcGVsaW5lLFxyXG4gICAgICAgICAgICBhc1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFN0YWdlKG1hdGNoOiBGaWx0ZXJRdWVyeTxhbnk+KTogUGlwZWxpbmVTdGFnZS5NYXRjaCB7XHJcbiAgICByZXR1cm4geyRtYXRjaDogbWF0Y2h9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hGaWVsZChmaWVsZDogc3RyaW5nLCBmaWx0ZXI6IGFueSwgd2hlbjogYm9vbGVhbik6IElNYXRjaEZpZWxkIHtcclxuICAgIHJldHVybiB7ZmllbGQsIGZpbHRlciwgd2hlbn07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtYXRjaEZpZWxkU3RhZ2VzKC4uLmZpZWxkczogSU1hdGNoRmllbGRbXSk6IFJlYWRvbmx5QXJyYXk8UGlwZWxpbmVTdGFnZS5NYXRjaD4ge1xyXG4gICAgY29uc3QgbWF0Y2ggPSB7fTtcclxuICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICBpZiAoZmllbGQud2hlbikge1xyXG4gICAgICAgICAgICBtYXRjaFtmaWVsZC5maWVsZF0gPSBmaWVsZC5maWx0ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobWF0Y2gpLmxlbmd0aCA+IDAgPyBbbWF0Y2hTdGFnZShtYXRjaCldIDogW107XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0U3RhZ2UoZmllbGRzOiBJUHJvamVjdE9wdGlvbnMpOiBQaXBlbGluZVN0YWdlLlByb2plY3Qge1xyXG4gICAgcmV0dXJuIHskcHJvamVjdDogZmllbGRzfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVud2luZFN0YWdlKGZpZWxkT3JPcHRzOiBzdHJpbmcgfCBJVW53aW5kT3B0aW9ucyk6IFBpcGVsaW5lU3RhZ2UuVW53aW5kIHtcclxuICAgIHJldHVybiB7JHVud2luZDogZmllbGRPck9wdHN9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaHlkcmF0ZVBvcHVsYXRlZDxUIGV4dGVuZHMgRG9jdW1lbnQ+KG1vZGVsVHlwZTogTW9kZWw8VD4sIGpzb246IGFueSk6IFQge1xyXG4gICAgbGV0IG9iamVjdCA9IG1vZGVsVHlwZS5oeWRyYXRlKGpzb24pO1xyXG5cclxuICAgIGZvciAoY29uc3QgW3BhdGgsIG9ial0gb2YgT2JqZWN0LmVudHJpZXMobW9kZWxUeXBlLnNjaGVtYS5vYmopKSB7XHJcbiAgICAgICAgbGV0IHtyZWYsIHR5cGV9ID0gb2JqIGFzIGFueTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSAmJiB0eXBlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmVmID0gdHlwZVswXS5yZWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcmVmKSBjb250aW51ZTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGdldE1vbmdvVmFsdWUocGF0aCwganNvbik7XHJcbiAgICAgICAgY29uc3QgaHlkcmF0ZVZhbCA9IHZhbCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWwgPT0gbnVsbCB8fCB2YWwgaW5zdGFuY2VvZiBUeXBlcy5PYmplY3RJZCkgcmV0dXJuIHZhbDtcclxuICAgICAgICAgICAgcmV0dXJuIGh5ZHJhdGVQb3B1bGF0ZWQobW9kZWwocmVmKSBhcyBhbnksIHZhbCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgc2V0TW9uZ29WYWx1ZShwYXRoLCB2YWx1ZS5tYXAoaHlkcmF0ZVZhbCksIG9iamVjdCk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRNb25nb1ZhbHVlKHBhdGgsIGh5ZHJhdGVWYWwodmFsdWUpLCBvYmplY3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvYmplY3Q7XHJcblxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVBZ2dyZWdhdGlvbnM8VCBleHRlbmRzIFR5cGU8YW55PiwgVSA9IEluZmVyR2VuZXJpYzxUPj4obW9kZWw6IFJldHVybk1vZGVsVHlwZTxUPiwgYWdncmVnYXRpb25zOiBQaXBlbGluZVN0YWdlW10sIHBhcmFtczogSVBhZ2luYXRpb25QYXJhbXMsIG1ldGFQcm9qZWN0aW9uOiBhbnkgPSB7fSk6IFByb21pc2U8SVBhZ2luYXRpb25CYXNlPERvY3VtZW50VHlwZTxVPj4+IHtcclxuICAgIGNvbnN0IHNvcnRGaWVsZCA9ICFpc1N0cmluZyhwYXJhbXMuc29ydCkgfHwgIXBhcmFtcy5zb3J0ID8gbnVsbCA6IChwYXJhbXMuc29ydC5zdGFydHNXaXRoKFwiLVwiKSA/IHBhcmFtcy5zb3J0LnN1YnN0cigxKSA6IHBhcmFtcy5zb3J0KTtcclxuICAgIGNvbnN0IHNvcnRBZ2dyZWdhdGlvbjogUGlwZWxpbmVTdGFnZS5Tb3J0W10gPSAhc29ydEZpZWxkID8gW10gOiBbe1xyXG4gICAgICAgICRzb3J0OiB7W3NvcnRGaWVsZF06IHNvcnRGaWVsZCA9PSBwYXJhbXMuc29ydCA/IDEgOiAtMX1cclxuICAgIH1dO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwuYWdncmVnYXRlKFtcclxuICAgICAgICAuLi5hZ2dyZWdhdGlvbnMsXHJcbiAgICAgICAgLi4uc29ydEFnZ3JlZ2F0aW9uLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgJGdyb3VwOiB7XHJcbiAgICAgICAgICAgICAgICBfaWQ6IFwicmVzdWx0c1wiLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiB7JHB1c2g6IFwiJCRDVVJSRU5UXCJ9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgJHByb2plY3Q6IHtcclxuICAgICAgICAgICAgICAgIF9pZDogMCxcclxuICAgICAgICAgICAgICAgIGl0ZW1zOiBwYXJhbXMubGltaXQgPiAwID8geyRzbGljZTogW1wiJHJlc3VsdFwiLCBwYXJhbXMucGFnZSAqIHBhcmFtcy5saW1pdCwgcGFyYW1zLmxpbWl0XX0gOiBcIiRyZXN1bHRcIixcclxuICAgICAgICAgICAgICAgIGNvdW50OiB7JHNpemU6IFwiJHJlc3VsdFwifSxcclxuICAgICAgICAgICAgICAgIG1ldGE6IHtcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbDogeyRzaXplOiBcIiRyZXN1bHRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgLi4ubWV0YVByb2plY3Rpb25cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIF0pO1xyXG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHJlc3VsdFswXSBhcyBJUGFnaW5hdGlvbkJhc2U8RG9jdW1lbnRUeXBlPFU+PjtcclxuICAgIGlmICghcGFnaW5hdGlvbikge1xyXG4gICAgICAgIHJldHVybiB7aXRlbXM6IFtdLCBjb3VudDogMCwgbWV0YToge3RvdGFsOiAwfX07XHJcbiAgICB9XHJcbiAgICBwYWdpbmF0aW9uLml0ZW1zID0gcGFnaW5hdGlvbi5pdGVtcy5tYXAoaSA9PiBoeWRyYXRlUG9wdWxhdGVkKG1vZGVsLCBpKSBhcyBhbnkpO1xyXG4gICAgcmV0dXJuIHBhZ2luYXRpb247XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBSZXNvbHZlRW50aXR5PFQgZXh0ZW5kcyBUeXBlPGFueT4sIFUgPSBJbmZlckdlbmVyaWM8VD4+KG1vZGVsOiBSZXR1cm5Nb2RlbFR5cGU8VD4sIGV4dHJhQ2hlY2s/OiAocXVlcnk6IFF1ZXJ5PERvY3VtZW50VHlwZTxVPiwgYW55PiwgYWN0aW9uOiBBY3Rpb24pID0+IFByb21pc2U8RG9jdW1lbnRUeXBlPFU+Pik6IFBhcmFtZXRlckRlY29yYXRvciB7XHJcbiAgICBjb25zdCBtb2RlbE5hbWUgPSBtb2RlbC5tb2RlbE5hbWU7XHJcbiAgICBjb25zdCBwYXJhbU5hbWUgPSBtb2RlbE5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgIHJldHVybiBjcmVhdGVQYXJhbURlY29yYXRvcih7XHJcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICAgIHZhbHVlOiBhc3luYyBhY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZXEgPSBhY3Rpb24ucmVxdWVzdCBhcyBJUmVxdWVzdDtcclxuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSByZXEuaGVhZGVyKGB4LSR7cGFyYW1OYW1lfS10b2tlbmApO1xyXG4gICAgICAgICAgICBjb25zdCBpZCA9IHJlcS5wYXJhbXNbYCR7cGFyYW1OYW1lfUlkYF0gYXMgc3RyaW5nO1xyXG4gICAgICAgICAgICBpZiAoIWlkICYmICF0b2tlbikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFcnJvcihgJHttb2RlbE5hbWV9IGlkIG9yIHRva2VuIHNob3VsZCBiZSBkZWZpbmVkIWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gIXRva2VuXHJcbiAgICAgICAgICAgICAgICA/IG1vZGVsLmZpbmRCeUlkKGlkKVxyXG4gICAgICAgICAgICAgICAgOiBtb2RlbC5maW5kT25lKHt0b2tlbn0gYXMgYW55KTtcclxuICAgICAgICAgICAgbGV0IGRvYzogRG9jdW1lbnQgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihleHRyYUNoZWNrKSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBkb2MgPSBhd2FpdCB2YWx1ZVRvUHJvbWlzZShleHRyYUNoZWNrKHF1ZXJ5LCBhY3Rpb24pKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEVycm9yKGAke21vZGVsTmFtZX0gY2hlY2sgZXJyb3I6ICR7ZS5tZXNzYWdlIHx8IGV9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkb2MgPSBhd2FpdCBxdWVyeTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWRvYykge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcig0MDQsICF0b2tlblxyXG4gICAgICAgICAgICAgICAgICAgID8gYCR7bW9kZWxOYW1lfSBjb3VsZCBub3QgYmUgZm91bmQgd2l0aCBpZDogJHtpZH1gXHJcbiAgICAgICAgICAgICAgICAgICAgOiBgJHttb2RlbE5hbWV9IGNvdWxkIG5vdCBiZSBmb3VuZCB3aXRoIHRva2VuOiAke3Rva2VufWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFjdGlvbi5yZXF1ZXN0W3BhcmFtTmFtZV0gPSBkb2M7XHJcbiAgICAgICAgICAgIHJldHVybiBkb2M7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuIl19