@veloceapps/sdk 11.0.0-11 → 11.0.0-13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. package/cms/vendor-map.d.ts +7 -6
  2. package/core/modules/configuration/helpers.d.ts +2 -1
  3. package/core/modules/configuration/services/configuration-runtime.service.d.ts +1 -3
  4. package/core/modules/configuration/services/configuration-state.service.d.ts +7 -7
  5. package/core/modules/configuration/services/configuration.service.d.ts +5 -10
  6. package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +11 -32
  7. package/core/services/catalog-products.service.d.ts +11 -0
  8. package/core/services/flow-info.service.d.ts +23 -10
  9. package/core/services/flow-state.service.d.ts +9 -12
  10. package/core/services/index.d.ts +2 -2
  11. package/core/services/quote-draft.service.d.ts +5 -5
  12. package/core/services/sales-transaction.service.d.ts +28 -0
  13. package/core/types/flow-state.types.d.ts +2 -2
  14. package/esm2020/cms/vendor-map.mjs +8 -7
  15. package/esm2020/core/core.module.mjs +7 -4
  16. package/esm2020/core/modules/configuration/helpers.mjs +11 -17
  17. package/esm2020/core/modules/configuration/services/configuration-runtime.service.mjs +8 -45
  18. package/esm2020/core/modules/configuration/services/configuration-state.service.mjs +46 -54
  19. package/esm2020/core/modules/configuration/services/configuration.service.mjs +21 -39
  20. package/esm2020/core/modules/flow-configuration/services/flow-configuration.service.mjs +34 -110
  21. package/esm2020/core/services/catalog-products.service.mjs +25 -0
  22. package/esm2020/core/services/flow-info.service.mjs +70 -28
  23. package/esm2020/core/services/flow-state.service.mjs +59 -133
  24. package/esm2020/core/services/index.mjs +3 -3
  25. package/esm2020/core/services/quote-draft.service.mjs +20 -38
  26. package/esm2020/core/services/sales-transaction.service.mjs +62 -0
  27. package/esm2020/core/types/flow-state.types.mjs +1 -1
  28. package/esm2020/src/components/flow-header/flow-header.component.mjs +3 -6
  29. package/esm2020/src/components/guided-selling/guided-selling.component.mjs +3 -6
  30. package/esm2020/src/flow-routing.module.mjs +5 -36
  31. package/esm2020/src/flow.component.mjs +5 -5
  32. package/esm2020/src/guards/flow.guard.mjs +10 -9
  33. package/esm2020/src/guards/product-unload.guard.mjs +5 -7
  34. package/esm2020/src/index.mjs +1 -2
  35. package/esm2020/src/pages/assets/assets.component.mjs +3 -3
  36. package/esm2020/src/pages/catalog/catalog.component.mjs +3 -3
  37. package/esm2020/src/pages/debug/debug.component.mjs +7 -11
  38. package/esm2020/src/pages/product/product.component.mjs +47 -67
  39. package/esm2020/src/pages/product/product.module.mjs +5 -5
  40. package/esm2020/src/pages/shopping-cart/shopping-cart.component.mjs +3 -3
  41. package/esm2020/src/resolvers/flow.resolver.mjs +10 -18
  42. package/esm2020/src/resolvers/quote.resolver.mjs +11 -11
  43. package/esm2020/src/services/flow-dialog.service.mjs +8 -8
  44. package/esm2020/src/services/flow-router.service.mjs +11 -21
  45. package/esm2020/src/services/flow.service.mjs +10 -43
  46. package/esm2020/src/utils/flow.utils.mjs +2 -13
  47. package/fesm2015/veloceapps-sdk-cms.mjs +7 -6
  48. package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
  49. package/fesm2015/veloceapps-sdk-core.mjs +1483 -1636
  50. package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
  51. package/fesm2015/veloceapps-sdk.mjs +126 -672
  52. package/fesm2015/veloceapps-sdk.mjs.map +1 -1
  53. package/fesm2020/veloceapps-sdk-cms.mjs +7 -6
  54. package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
  55. package/fesm2020/veloceapps-sdk-core.mjs +1515 -1707
  56. package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
  57. package/fesm2020/veloceapps-sdk.mjs +124 -667
  58. package/fesm2020/veloceapps-sdk.mjs.map +1 -1
  59. package/package.json +1 -1
  60. package/src/components/flow-header/flow-header.component.d.ts +1 -1
  61. package/src/components/guided-selling/guided-selling.component.d.ts +1 -1
  62. package/src/flow-routing.module.d.ts +1 -2
  63. package/src/flow.component.d.ts +2 -2
  64. package/src/guards/product-unload.guard.d.ts +4 -5
  65. package/src/index.d.ts +0 -1
  66. package/src/pages/assets/assets.component.d.ts +1 -1
  67. package/src/pages/catalog/catalog.component.d.ts +1 -1
  68. package/src/pages/debug/debug.component.d.ts +2 -3
  69. package/src/pages/product/product.component.d.ts +9 -10
  70. package/src/pages/product/product.module.d.ts +1 -1
  71. package/src/pages/shopping-cart/shopping-cart.component.d.ts +1 -1
  72. package/src/resolvers/flow.resolver.d.ts +5 -6
  73. package/src/resolvers/quote.resolver.d.ts +5 -6
  74. package/src/services/flow-dialog.service.d.ts +3 -3
  75. package/src/services/flow-router.service.d.ts +2 -4
  76. package/src/services/flow.service.d.ts +2 -6
  77. package/src/utils/flow.utils.d.ts +0 -7
  78. package/core/services/context.service.d.ts +0 -23
  79. package/esm2020/core/services/context.service.mjs +0 -91
  80. package/esm2020/src/guards/context.guard.mjs +0 -91
  81. package/esm2020/src/guards/index.mjs +0 -2
  82. package/esm2020/src/pages/remote/remote.component.mjs +0 -342
  83. package/esm2020/src/pages/remote/remote.module.mjs +0 -20
  84. package/esm2020/src/pages/remote/remote.types.mjs +0 -2
  85. package/src/guards/context.guard.d.ts +0 -19
  86. package/src/guards/index.d.ts +0 -1
  87. package/src/pages/remote/remote.component.d.ts +0 -46
  88. package/src/pages/remote/remote.module.d.ts +0 -10
  89. package/src/pages/remote/remote.types.d.ts +0 -4
@@ -16,26 +16,20 @@ export const getDefaultLineItem = (context, uiDefinitionProperties, qty = 1) =>
16
16
  ...(uiDefinitionProperties.offeringId ? { offeringId: uiDefinitionProperties.offeringId } : {}),
17
17
  };
18
18
  };
19
- export const getGuidedSellingConfigurationRequest = (data, context) => {
20
- const _context = { ...context };
21
- delete _context.configurationToken;
22
- const properties = { ...context.properties };
23
- delete properties['ConfigurationToken'];
19
+ export const generateEmptyContext = () => {
20
+ return {
21
+ headerId: '',
22
+ mode: ConfigurationContextMode.TEST,
23
+ properties: {},
24
+ configurationToken: '',
25
+ };
26
+ };
27
+ export const getGuidedSellingConfigurationRequest = (data) => {
24
28
  return {
25
29
  mode: 'SEARCH',
26
30
  step: 'START',
27
31
  attributeDomainMode: 'ALL',
28
- context: {
29
- ..._context,
30
- mode: ConfigurationContextMode.TEST,
31
- properties: {
32
- ...properties,
33
- ModelId: data.modelId,
34
- Name: 'Veloce Guided Selling',
35
- PricingEnabled: 'false',
36
- RuntimeMode: 'TEST',
37
- },
38
- },
32
+ context: generateEmptyContext(),
39
33
  lineItem: {
40
34
  actionCode: 'ADD',
41
35
  cfgStatus: 'Default',
@@ -70,4 +64,4 @@ export const generateConfigurationLineItem = (props, qty = 1) => {
70
64
  productId: props.product.id ?? '',
71
65
  };
72
66
  };
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL2NvcmUvbW9kdWxlcy9jb25maWd1cmF0aW9uL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHdCQUF3QixFQUl4QixJQUFJLEdBQ0wsTUFBTSxrQkFBa0IsQ0FBQztBQUkxQixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUNoQyxPQUF1QixFQUN2QixzQkFBeUMsRUFDekMsR0FBRyxHQUFHLENBQUMsRUFDRyxFQUFFO0lBQ1osTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLE1BQU0sVUFBVSxHQUFnQixFQUFFLENBQUM7SUFDbkMsTUFBTSxTQUFTLEdBQWUsRUFBRSxDQUFDO0lBRWpDLE9BQU87UUFDTCxFQUFFO1FBQ0YsSUFBSSxFQUFFLHNCQUFzQixDQUFDLFFBQVEsSUFBSSxFQUFFO1FBQzNDLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLEdBQUc7UUFDSCxVQUFVO1FBQ1YsU0FBUztRQUNULFdBQVcsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksT0FBTyxDQUFDLFdBQVc7UUFDdkUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRTtRQUNsQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3BGLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQUcsQ0FDbEQsSUFBNkIsRUFDN0IsT0FBNkIsRUFDUCxFQUFFO0lBQ3hCLE1BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUNoQyxPQUFPLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztJQUVuQyxNQUFNLFVBQVUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzdDLE9BQU8sVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFeEMsT0FBTztRQUNMLElBQUksRUFBRSxRQUFRO1FBQ2QsSUFBSSxFQUFFLE9BQU87UUFDYixtQkFBbUIsRUFBRSxLQUFLO1FBQzFCLE9BQU8sRUFBRTtZQUNQLEdBQUcsUUFBUTtZQUNYLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxJQUFJO1lBQ25DLFVBQVUsRUFBRTtnQkFDVixHQUFHLFVBQVU7Z0JBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixJQUFJLEVBQUUsdUJBQXVCO2dCQUM3QixjQUFjLEVBQUUsT0FBTztnQkFDdkIsV0FBVyxFQUFFLE1BQU07YUFDcEI7U0FDRjtRQUNELFFBQVEsRUFBRTtZQUNSLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2YsR0FBRyxFQUFFLENBQUM7WUFDTixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDcEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRSxJQUFJO2dCQUNKLEtBQUs7Z0JBQ0wsU0FBUyxFQUFFLE1BQU07YUFDbEIsQ0FBQyxDQUFDO1NBQ1E7S0FDZCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxLQUE0QixFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQVksRUFBRTtJQUMvRixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLElBQUk7UUFDSixLQUFLO1FBQ0wsU0FBUyxFQUFFLE1BQU07S0FDbEIsQ0FBQyxDQUFDLENBQUM7SUFDSixNQUFNLFNBQVMsR0FBZSxFQUFFLENBQUM7SUFFakMsT0FBTztRQUNMLEVBQUU7UUFDRixJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRTtRQUNsQyxTQUFTLEVBQUUsU0FBUztRQUNwQixVQUFVLEVBQUUsS0FBSztRQUNqQixHQUFHO1FBQ0gsVUFBVTtRQUNWLFNBQVM7UUFDVCxXQUFXLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJO1FBQy9CLFNBQVMsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFO0tBQ3RCLENBQUM7QUFDaEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXR0cmlidXRlLFxuICBDb25maWd1cmF0aW9uQ29udGV4dCxcbiAgQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLFxuICBDb25maWd1cmF0aW9uUmVxdWVzdCxcbiAgTGluZUl0ZW0sXG4gIFVJRGVmaW5pdGlvblByb3BzLFxuICBVVUlELFxufSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlJztcbmltcG9ydCB7IFJ1bnRpbWVDb250ZXh0IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgR3VpZGVkU2VsbGluZ1N1Ym1pdERhdGEsIE5ld0NvbmZpZ3VyYXRpb25Qcm9wcyB9IGZyb20gJy4vdHlwZXMvY29uZmlndXJhdGlvbi50eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0TGluZUl0ZW0gPSAoXG4gIGNvbnRleHQ6IFJ1bnRpbWVDb250ZXh0LFxuICB1aURlZmluaXRpb25Qcm9wZXJ0aWVzOiBVSURlZmluaXRpb25Qcm9wcyxcbiAgcXR5ID0gMSxcbik6IExpbmVJdGVtID0+IHtcbiAgY29uc3QgaWQgPSBVVUlELlVVSUQoKTtcbiAgY29uc3QgYXR0cmlidXRlczogQXR0cmlidXRlW10gPSBbXTtcbiAgY29uc3QgbGluZUl0ZW1zOiBMaW5lSXRlbVtdID0gW107XG5cbiAgcmV0dXJuIHtcbiAgICBpZCxcbiAgICB0eXBlOiB1aURlZmluaXRpb25Qcm9wZXJ0aWVzLnJvb3RUeXBlID8/ICcnLFxuICAgIGNmZ1N0YXR1czogJ0RlZmF1bHQnLFxuICAgIGFjdGlvbkNvZGU6ICdBREQnLFxuICAgIHF0eSxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIGxpbmVJdGVtcyxcbiAgICBwcm9kdWN0TmFtZTogY29udGV4dC5wcm9wZXJ0aWVzPy5bJ2Rpc3BsYXlOYW1lJ10gfHwgY29udGV4dC5wcm9kdWN0TmFtZSxcbiAgICBwcm9kdWN0SWQ6IGNvbnRleHQucHJvZHVjdElkID8/ICcnLFxuICAgIC4uLih1aURlZmluaXRpb25Qcm9wZXJ0aWVzLm9mZmVyaW5nSWQgPyB7IG9mZmVyaW5nSWQ6IHVpRGVmaW5pdGlvblByb3BlcnRpZXMub2ZmZXJpbmdJZCB9IDoge30pLFxuICB9IGFzIExpbmVJdGVtO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEd1aWRlZFNlbGxpbmdDb25maWd1cmF0aW9uUmVxdWVzdCA9IChcbiAgZGF0YTogR3VpZGVkU2VsbGluZ1N1Ym1pdERhdGEsXG4gIGNvbnRleHQ6IENvbmZpZ3VyYXRpb25Db250ZXh0LFxuKTogQ29uZmlndXJhdGlvblJlcXVlc3QgPT4ge1xuICBjb25zdCBfY29udGV4dCA9IHsgLi4uY29udGV4dCB9O1xuICBkZWxldGUgX2NvbnRleHQuY29uZmlndXJhdGlvblRva2VuO1xuXG4gIGNvbnN0IHByb3BlcnRpZXMgPSB7IC4uLmNvbnRleHQucHJvcGVydGllcyB9O1xuICBkZWxldGUgcHJvcGVydGllc1snQ29uZmlndXJhdGlvblRva2VuJ107XG5cbiAgcmV0dXJuIHtcbiAgICBtb2RlOiAnU0VBUkNIJyxcbiAgICBzdGVwOiAnU1RBUlQnLFxuICAgIGF0dHJpYnV0ZURvbWFpbk1vZGU6ICdBTEwnLFxuICAgIGNvbnRleHQ6IHtcbiAgICAgIC4uLl9jb250ZXh0LFxuICAgICAgbW9kZTogQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLlRFU1QsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLnByb3BlcnRpZXMsXG4gICAgICAgIE1vZGVsSWQ6IGRhdGEubW9kZWxJZCxcbiAgICAgICAgTmFtZTogJ1ZlbG9jZSBHdWlkZWQgU2VsbGluZycsXG4gICAgICAgIFByaWNpbmdFbmFibGVkOiAnZmFsc2UnLFxuICAgICAgICBSdW50aW1lTW9kZTogJ1RFU1QnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGxpbmVJdGVtOiB7XG4gICAgICBhY3Rpb25Db2RlOiAnQUREJyxcbiAgICAgIGNmZ1N0YXR1czogJ0RlZmF1bHQnLFxuICAgICAgaWQ6IFVVSUQuVVVJRCgpLFxuICAgICAgcXR5OiAxLFxuICAgICAgdHlwZTogZGF0YS5tb2RlbFR5cGUsXG4gICAgICBhdHRyaWJ1dGVzOiBPYmplY3QuZW50cmllcyhkYXRhLmF0dHJpYnV0ZXNNYXApLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGNmZ1N0YXR1czogJ1VzZXInLFxuICAgICAgfSkpLFxuICAgIH0gYXMgTGluZUl0ZW0sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVDb25maWd1cmF0aW9uTGluZUl0ZW0gPSAocHJvcHM6IE5ld0NvbmZpZ3VyYXRpb25Qcm9wcywgcXR5ID0gMSk6IExpbmVJdGVtID0+IHtcbiAgY29uc3QgaWQgPSBVVUlELlVVSUQoKTtcbiAgY29uc3QgYXR0cmlidXRlcyA9IE9iamVjdC5lbnRyaWVzKHByb3BzLmF0dHJpYnV0ZXNNYXAgPz8ge30pLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gKHtcbiAgICBuYW1lLFxuICAgIHZhbHVlLFxuICAgIGNmZ1N0YXR1czogJ1VzZXInLFxuICB9KSk7XG4gIGNvbnN0IGxpbmVJdGVtczogTGluZUl0ZW1bXSA9IFtdO1xuXG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgdHlwZTogcHJvcHMucHJvZHVjdC50eXBlTmFtZSA/PyAnJyxcbiAgICBjZmdTdGF0dXM6ICdEZWZhdWx0JyxcbiAgICBhY3Rpb25Db2RlOiAnQUREJyxcbiAgICBxdHksXG4gICAgYXR0cmlidXRlcyxcbiAgICBsaW5lSXRlbXMsXG4gICAgcHJvZHVjdE5hbWU6IHByb3BzLnByb2R1Y3QubmFtZSxcbiAgICBwcm9kdWN0SWQ6IHByb3BzLnByb2R1Y3QuaWQgPz8gJycsXG4gIH0gYXMgTGluZUl0ZW07XG59O1xuIl19
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL2NvcmUvbW9kdWxlcy9jb25maWd1cmF0aW9uL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHdCQUF3QixFQUl4QixJQUFJLEdBQ0wsTUFBTSxrQkFBa0IsQ0FBQztBQUkxQixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUNoQyxPQUF1QixFQUN2QixzQkFBeUMsRUFDekMsR0FBRyxHQUFHLENBQUMsRUFDRyxFQUFFO0lBQ1osTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLE1BQU0sVUFBVSxHQUFnQixFQUFFLENBQUM7SUFDbkMsTUFBTSxTQUFTLEdBQWUsRUFBRSxDQUFDO0lBRWpDLE9BQU87UUFDTCxFQUFFO1FBQ0YsSUFBSSxFQUFFLHNCQUFzQixDQUFDLFFBQVEsSUFBSSxFQUFFO1FBQzNDLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLEdBQUc7UUFDSCxVQUFVO1FBQ1YsU0FBUztRQUNULFdBQVcsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksT0FBTyxDQUFDLFdBQVc7UUFDdkUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRTtRQUNsQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3BGLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsR0FBeUIsRUFBRTtJQUM3RCxPQUFPO1FBQ0wsUUFBUSxFQUFFLEVBQUU7UUFDWixJQUFJLEVBQUUsd0JBQXdCLENBQUMsSUFBSTtRQUNuQyxVQUFVLEVBQUUsRUFBRTtRQUNkLGtCQUFrQixFQUFFLEVBQUU7S0FDdkIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUFHLENBQUMsSUFBNkIsRUFBd0IsRUFBRTtJQUMxRyxPQUFPO1FBQ0wsSUFBSSxFQUFFLFFBQVE7UUFDZCxJQUFJLEVBQUUsT0FBTztRQUNiLG1CQUFtQixFQUFFLEtBQUs7UUFDMUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFO1FBQy9CLFFBQVEsRUFBRTtZQUNSLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2YsR0FBRyxFQUFFLENBQUM7WUFDTixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDcEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRSxJQUFJO2dCQUNKLEtBQUs7Z0JBQ0wsU0FBUyxFQUFFLE1BQU07YUFDbEIsQ0FBQyxDQUFDO1NBQ1E7S0FDZCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxLQUE0QixFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQVksRUFBRTtJQUMvRixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLElBQUk7UUFDSixLQUFLO1FBQ0wsU0FBUyxFQUFFLE1BQU07S0FDbEIsQ0FBQyxDQUFDLENBQUM7SUFDSixNQUFNLFNBQVMsR0FBZSxFQUFFLENBQUM7SUFFakMsT0FBTztRQUNMLEVBQUU7UUFDRixJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRTtRQUNsQyxTQUFTLEVBQUUsU0FBUztRQUNwQixVQUFVLEVBQUUsS0FBSztRQUNqQixHQUFHO1FBQ0gsVUFBVTtRQUNWLFNBQVM7UUFDVCxXQUFXLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJO1FBQy9CLFNBQVMsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFO0tBQ3RCLENBQUM7QUFDaEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXR0cmlidXRlLFxuICBDb25maWd1cmF0aW9uQ29udGV4dCxcbiAgQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLFxuICBDb25maWd1cmF0aW9uUmVxdWVzdCxcbiAgTGluZUl0ZW0sXG4gIFVJRGVmaW5pdGlvblByb3BzLFxuICBVVUlELFxufSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlJztcbmltcG9ydCB7IFJ1bnRpbWVDb250ZXh0IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgR3VpZGVkU2VsbGluZ1N1Ym1pdERhdGEsIE5ld0NvbmZpZ3VyYXRpb25Qcm9wcyB9IGZyb20gJy4vdHlwZXMvY29uZmlndXJhdGlvbi50eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0TGluZUl0ZW0gPSAoXG4gIGNvbnRleHQ6IFJ1bnRpbWVDb250ZXh0LFxuICB1aURlZmluaXRpb25Qcm9wZXJ0aWVzOiBVSURlZmluaXRpb25Qcm9wcyxcbiAgcXR5ID0gMSxcbik6IExpbmVJdGVtID0+IHtcbiAgY29uc3QgaWQgPSBVVUlELlVVSUQoKTtcbiAgY29uc3QgYXR0cmlidXRlczogQXR0cmlidXRlW10gPSBbXTtcbiAgY29uc3QgbGluZUl0ZW1zOiBMaW5lSXRlbVtdID0gW107XG5cbiAgcmV0dXJuIHtcbiAgICBpZCxcbiAgICB0eXBlOiB1aURlZmluaXRpb25Qcm9wZXJ0aWVzLnJvb3RUeXBlID8/ICcnLFxuICAgIGNmZ1N0YXR1czogJ0RlZmF1bHQnLFxuICAgIGFjdGlvbkNvZGU6ICdBREQnLFxuICAgIHF0eSxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIGxpbmVJdGVtcyxcbiAgICBwcm9kdWN0TmFtZTogY29udGV4dC5wcm9wZXJ0aWVzPy5bJ2Rpc3BsYXlOYW1lJ10gfHwgY29udGV4dC5wcm9kdWN0TmFtZSxcbiAgICBwcm9kdWN0SWQ6IGNvbnRleHQucHJvZHVjdElkID8/ICcnLFxuICAgIC4uLih1aURlZmluaXRpb25Qcm9wZXJ0aWVzLm9mZmVyaW5nSWQgPyB7IG9mZmVyaW5nSWQ6IHVpRGVmaW5pdGlvblByb3BlcnRpZXMub2ZmZXJpbmdJZCB9IDoge30pLFxuICB9IGFzIExpbmVJdGVtO1xufTtcblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlRW1wdHlDb250ZXh0ID0gKCk6IENvbmZpZ3VyYXRpb25Db250ZXh0ID0+IHtcbiAgcmV0dXJuIHtcbiAgICBoZWFkZXJJZDogJycsXG4gICAgbW9kZTogQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLlRFU1QsXG4gICAgcHJvcGVydGllczoge30sXG4gICAgY29uZmlndXJhdGlvblRva2VuOiAnJyxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHdWlkZWRTZWxsaW5nQ29uZmlndXJhdGlvblJlcXVlc3QgPSAoZGF0YTogR3VpZGVkU2VsbGluZ1N1Ym1pdERhdGEpOiBDb25maWd1cmF0aW9uUmVxdWVzdCA9PiB7XG4gIHJldHVybiB7XG4gICAgbW9kZTogJ1NFQVJDSCcsXG4gICAgc3RlcDogJ1NUQVJUJyxcbiAgICBhdHRyaWJ1dGVEb21haW5Nb2RlOiAnQUxMJyxcbiAgICBjb250ZXh0OiBnZW5lcmF0ZUVtcHR5Q29udGV4dCgpLFxuICAgIGxpbmVJdGVtOiB7XG4gICAgICBhY3Rpb25Db2RlOiAnQUREJyxcbiAgICAgIGNmZ1N0YXR1czogJ0RlZmF1bHQnLFxuICAgICAgaWQ6IFVVSUQuVVVJRCgpLFxuICAgICAgcXR5OiAxLFxuICAgICAgdHlwZTogZGF0YS5tb2RlbFR5cGUsXG4gICAgICBhdHRyaWJ1dGVzOiBPYmplY3QuZW50cmllcyhkYXRhLmF0dHJpYnV0ZXNNYXApLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGNmZ1N0YXR1czogJ1VzZXInLFxuICAgICAgfSkpLFxuICAgIH0gYXMgTGluZUl0ZW0sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVDb25maWd1cmF0aW9uTGluZUl0ZW0gPSAocHJvcHM6IE5ld0NvbmZpZ3VyYXRpb25Qcm9wcywgcXR5ID0gMSk6IExpbmVJdGVtID0+IHtcbiAgY29uc3QgaWQgPSBVVUlELlVVSUQoKTtcbiAgY29uc3QgYXR0cmlidXRlcyA9IE9iamVjdC5lbnRyaWVzKHByb3BzLmF0dHJpYnV0ZXNNYXAgPz8ge30pLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gKHtcbiAgICBuYW1lLFxuICAgIHZhbHVlLFxuICAgIGNmZ1N0YXR1czogJ1VzZXInLFxuICB9KSk7XG4gIGNvbnN0IGxpbmVJdGVtczogTGluZUl0ZW1bXSA9IFtdO1xuXG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgdHlwZTogcHJvcHMucHJvZHVjdC50eXBlTmFtZSA/PyAnJyxcbiAgICBjZmdTdGF0dXM6ICdEZWZhdWx0JyxcbiAgICBhY3Rpb25Db2RlOiAnQUREJyxcbiAgICBxdHksXG4gICAgYXR0cmlidXRlcyxcbiAgICBsaW5lSXRlbXMsXG4gICAgcHJvZHVjdE5hbWU6IHByb3BzLnByb2R1Y3QubmFtZSxcbiAgICBwcm9kdWN0SWQ6IHByb3BzLnByb2R1Y3QuaWQgPz8gJycsXG4gIH0gYXMgTGluZUl0ZW07XG59O1xuIl19
@@ -1,19 +1,15 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { ConfigurationApiService } from '@veloceapps/api';
3
3
  import { RuntimeModel, SalesforceIdUtils } from '@veloceapps/core';
4
- import { combineLatest } from 'rxjs';
5
4
  import { first, map, tap } from 'rxjs/operators';
6
- import { ContextService } from '../../../services';
7
5
  import { RuntimeMode } from '../../../types';
8
6
  import { RuntimeContextService } from './runtime-context.service';
9
7
  import * as i0 from "@angular/core";
10
8
  import * as i1 from "@veloceapps/api";
11
- import * as i2 from "../../../services";
12
- import * as i3 from "./runtime-context.service";
9
+ import * as i2 from "./runtime-context.service";
13
10
  export class ConfigurationRuntimeService {
14
- constructor(apiService, contextService, runtimeContextService) {
11
+ constructor(apiService, runtimeContextService) {
15
12
  this.apiService = apiService;
16
- this.contextService = contextService;
17
13
  this.runtimeContextService = runtimeContextService;
18
14
  this._isInitialized = false;
19
15
  this.uiDefinitionProperties = {};
@@ -26,22 +22,7 @@ export class ConfigurationRuntimeService {
26
22
  }
27
23
  initTestMode(uiDefinitionContainer) {
28
24
  this.uiDefinitionProperties = uiDefinitionContainer.source.properties ?? {};
29
- const uiDefinitionExternals = uiDefinitionContainer.source.externals ?? {};
30
- return combineLatest([
31
- this.apiService.getRuntimeDataByModelId(uiDefinitionContainer.modelId),
32
- this.contextService.initTestMode(),
33
- ]).pipe(first(), map(([runtimeData, context]) => {
34
- this.contextService.update({
35
- properties: {
36
- ...this.runtimeContext?.properties,
37
- ...context.properties,
38
- ModelId: uiDefinitionContainer.modelId,
39
- PricingEnabled: this.uiDefinitionProperties.pricingEnabled ? 'true' : 'false',
40
- PriceListId: this.uiDefinitionProperties.priceList,
41
- offeringId: this.uiDefinitionProperties.offeringId,
42
- ...uiDefinitionExternals,
43
- },
44
- });
25
+ return this.apiService.getRuntimeDataByModelId(uiDefinitionContainer.modelId).pipe(first(), map(runtimeData => {
45
26
  this._runtimeContext = {
46
27
  modelId: uiDefinitionContainer.modelId,
47
28
  runtimeModel: RuntimeModel.create(runtimeData.types, runtimeData.products),
@@ -53,30 +34,12 @@ export class ConfigurationRuntimeService {
53
34
  }
54
35
  init(props) {
55
36
  this.initializationProps = props;
56
- const context = this.contextService.resolve();
57
37
  return this.runtimeContextService
58
38
  .getRuntimeContext(props.productId, props.offeringId, props.defaultUIDefinitionId, props.requiredUIDefinitionId)
59
39
  .pipe(tap(runtimeContext => {
60
40
  this.uiDefinitionProperties = runtimeContext.uiDefinitionContainer?.source.properties ?? {};
61
- const { PriceListId } = context.properties ?? {};
62
- const mergeContext = {
63
- ...runtimeContext,
64
- properties: {
65
- ...runtimeContext.properties,
66
- ...context.properties,
67
- PricingEnabled: PriceListId ? 'true' : 'false',
68
- },
69
- };
70
- this.id15to18('AccountId', mergeContext.properties);
71
- this._runtimeContext = mergeContext;
72
- if (context.properties && this._runtimeContext.properties?.StartDate) {
73
- this.contextService.update({
74
- properties: {
75
- ...this._runtimeContext.properties,
76
- ...context.properties,
77
- },
78
- });
79
- }
41
+ this.id15to18('AccountId', runtimeContext.properties);
42
+ this._runtimeContext = runtimeContext;
80
43
  return this._runtimeContext;
81
44
  }), tap(() => (this._isInitialized = true)));
82
45
  }
@@ -106,9 +69,9 @@ export class ConfigurationRuntimeService {
106
69
  return this._runtimeContext;
107
70
  }
108
71
  }
109
- ConfigurationRuntimeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService, deps: [{ token: i1.ConfigurationApiService }, { token: i2.ContextService }, { token: i3.RuntimeContextService }], target: i0.ɵɵFactoryTarget.Injectable });
72
+ ConfigurationRuntimeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService, deps: [{ token: i1.ConfigurationApiService }, { token: i2.RuntimeContextService }], target: i0.ɵɵFactoryTarget.Injectable });
110
73
  ConfigurationRuntimeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService });
111
74
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationRuntimeService, decorators: [{
112
75
  type: Injectable
113
- }], ctorParameters: function () { return [{ type: i1.ConfigurationApiService }, { type: i2.ContextService }, { type: i3.RuntimeContextService }]; } });
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1ydW50aW1lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9jb3JlL21vZHVsZXMvY29uZmlndXJhdGlvbi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uLXJ1bnRpbWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQTRDLE1BQU0sa0JBQWtCLENBQUM7QUFFN0csT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7QUFHbEUsTUFBTSxPQUFPLDJCQUEyQjtJQU90QyxZQUNVLFVBQW1DLEVBQ25DLGNBQThCLEVBQzlCLHFCQUE0QztRQUY1QyxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQVI5QyxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUd4QiwyQkFBc0IsR0FBc0IsRUFBRSxDQUFDO0lBTW5ELENBQUM7SUFFRyxLQUFLO1FBQ1YsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztRQUNyQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTSxZQUFZLENBQUMscUJBQTRDO1FBQzlELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUM1RSxNQUFNLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1FBRTNFLE9BQU8sYUFBYSxDQUFDO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFO1NBQ25DLENBQUMsQ0FBQyxJQUFJLENBQ0wsS0FBSyxFQUFFLEVBQ1AsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztnQkFDekIsVUFBVSxFQUFFO29CQUNWLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxVQUFVO29CQUNsQyxHQUFHLE9BQU8sQ0FBQyxVQUFVO29CQUNyQixPQUFPLEVBQUUscUJBQXFCLENBQUMsT0FBTztvQkFDdEMsY0FBYyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTztvQkFDN0UsV0FBVyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTO29CQUNsRCxVQUFVLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVU7b0JBQ2xELEdBQUcscUJBQXFCO2lCQUN6QjthQUNGLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxlQUFlLEdBQUc7Z0JBQ3JCLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPO2dCQUN0QyxZQUFZLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUM7Z0JBQzFFLFdBQVcsRUFBRSxXQUFXLENBQUMsSUFBSTtnQkFDN0IscUJBQXFCO2FBQ3RCLENBQUM7WUFFRixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDOUIsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUN4QyxDQUFDO0lBQ0osQ0FBQztJQUVNLElBQUksQ0FBQyxLQUFpQztRQUMzQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFOUMsT0FBTyxJQUFJLENBQUMscUJBQXFCO2FBQzlCLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLHNCQUFzQixDQUFDO2FBQy9HLElBQUksQ0FDSCxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztZQUM1RixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFFakQsTUFBTSxZQUFZLEdBQW1CO2dCQUNuQyxHQUFHLGNBQWM7Z0JBQ2pCLFVBQVUsRUFBRTtvQkFDVixHQUFHLGNBQWMsQ0FBQyxVQUFVO29CQUM1QixHQUFHLE9BQU8sQ0FBQyxVQUFVO29CQUNyQixjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU87aUJBQy9DO2FBQ0YsQ0FBQztZQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsZUFBZSxHQUFHLFlBQVksQ0FBQztZQUVwQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFO2dCQUNwRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztvQkFDekIsVUFBVSxFQUFFO3dCQUNWLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVO3dCQUNsQyxHQUFHLE9BQU8sQ0FBQyxVQUFVO3FCQUN0QjtpQkFDRixDQUFDLENBQUM7YUFDSjtZQUVELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM5QixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQ3hDLENBQUM7SUFDTixDQUFDO0lBRU0sb0JBQW9CLENBQUMscUJBQTRDO1FBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7UUFDbkUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO0lBQzlFLENBQUM7SUFFTyxRQUFRLENBQUMsWUFBb0IsRUFBRSxNQUF3QjtRQUM3RCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTztTQUNSO1FBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRW5DLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFO1lBQ3BELE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0RTtJQUNILENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDOzt3SEE1SFUsMkJBQTJCOzRIQUEzQiwyQkFBMkI7MkZBQTNCLDJCQUEyQjtrQkFEdkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZWFwcHMvYXBpJztcbmltcG9ydCB7IFJ1bnRpbWVNb2RlbCwgU2FsZXNmb3JjZUlkVXRpbHMsIFVJRGVmaW5pdGlvbkNvbnRhaW5lciwgVUlEZWZpbml0aW9uUHJvcHMgfSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlJztcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlyc3QsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBSdW50aW1lQ29udGV4dCwgUnVudGltZU1vZGUgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBSdW50aW1lSW5pdGlhbGl6YXRpb25Qcm9wcyB9IGZyb20gJy4uL3R5cGVzL2NvbmZpZ3VyYXRpb24tcnVudGltZS50eXBlcyc7XG5pbXBvcnQgeyBSdW50aW1lQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL3J1bnRpbWUtY29udGV4dC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZSB7XG4gIHByaXZhdGUgX3J1bnRpbWVDb250ZXh0PzogUnVudGltZUNvbnRleHQ7XG4gIHByaXZhdGUgX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgaW5pdGlhbGl6YXRpb25Qcm9wcz86IFJ1bnRpbWVJbml0aWFsaXphdGlvblByb3BzO1xuICBwdWJsaWMgdWlEZWZpbml0aW9uUHJvcGVydGllczogVUlEZWZpbml0aW9uUHJvcHMgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwaVNlcnZpY2U6IENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcnVudGltZUNvbnRleHRTZXJ2aWNlOiBSdW50aW1lQ29udGV4dFNlcnZpY2UsXG4gICkge31cblxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuX3J1bnRpbWVDb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9wcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnVpRGVmaW5pdGlvblByb3BlcnRpZXMgPSB7fTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0VGVzdE1vZGUodWlEZWZpbml0aW9uQ29udGFpbmVyOiBVSURlZmluaXRpb25Db250YWluZXIpOiBPYnNlcnZhYmxlPFJ1bnRpbWVDb250ZXh0PiB7XG4gICAgdGhpcy51aURlZmluaXRpb25Qcm9wZXJ0aWVzID0gdWlEZWZpbml0aW9uQ29udGFpbmVyLnNvdXJjZS5wcm9wZXJ0aWVzID8/IHt9O1xuICAgIGNvbnN0IHVpRGVmaW5pdGlvbkV4dGVybmFscyA9IHVpRGVmaW5pdGlvbkNvbnRhaW5lci5zb3VyY2UuZXh0ZXJuYWxzID8/IHt9O1xuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldFJ1bnRpbWVEYXRhQnlNb2RlbElkKHVpRGVmaW5pdGlvbkNvbnRhaW5lci5tb2RlbElkKSxcbiAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UuaW5pdFRlc3RNb2RlKCksXG4gICAgXSkucGlwZShcbiAgICAgIGZpcnN0KCksXG4gICAgICBtYXAoKFtydW50aW1lRGF0YSwgY29udGV4dF0pID0+IHtcbiAgICAgICAgdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUoe1xuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIC4uLnRoaXMucnVudGltZUNvbnRleHQ/LnByb3BlcnRpZXMsXG4gICAgICAgICAgICAuLi5jb250ZXh0LnByb3BlcnRpZXMsXG4gICAgICAgICAgICBNb2RlbElkOiB1aURlZmluaXRpb25Db250YWluZXIubW9kZWxJZCxcbiAgICAgICAgICAgIFByaWNpbmdFbmFibGVkOiB0aGlzLnVpRGVmaW5pdGlvblByb3BlcnRpZXMucHJpY2luZ0VuYWJsZWQgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgICAgICAgUHJpY2VMaXN0SWQ6IHRoaXMudWlEZWZpbml0aW9uUHJvcGVydGllcy5wcmljZUxpc3QsXG4gICAgICAgICAgICBvZmZlcmluZ0lkOiB0aGlzLnVpRGVmaW5pdGlvblByb3BlcnRpZXMub2ZmZXJpbmdJZCxcbiAgICAgICAgICAgIC4uLnVpRGVmaW5pdGlvbkV4dGVybmFscyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9ydW50aW1lQ29udGV4dCA9IHtcbiAgICAgICAgICBtb2RlbElkOiB1aURlZmluaXRpb25Db250YWluZXIubW9kZWxJZCxcbiAgICAgICAgICBydW50aW1lTW9kZWw6IFJ1bnRpbWVNb2RlbC5jcmVhdGUocnVudGltZURhdGEudHlwZXMsIHJ1bnRpbWVEYXRhLnByb2R1Y3RzKSxcbiAgICAgICAgICBydW50aW1lTW9kZTogUnVudGltZU1vZGUuVEVTVCxcbiAgICAgICAgICB1aURlZmluaXRpb25Db250YWluZXIsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bnRpbWVDb250ZXh0O1xuICAgICAgfSksXG4gICAgICB0YXAoKCkgPT4gKHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlKSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0KHByb3BzOiBSdW50aW1lSW5pdGlhbGl6YXRpb25Qcm9wcyk6IE9ic2VydmFibGU8UnVudGltZUNvbnRleHQ+IHtcbiAgICB0aGlzLmluaXRpYWxpemF0aW9uUHJvcHMgPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlKCk7XG5cbiAgICByZXR1cm4gdGhpcy5ydW50aW1lQ29udGV4dFNlcnZpY2VcbiAgICAgIC5nZXRSdW50aW1lQ29udGV4dChwcm9wcy5wcm9kdWN0SWQsIHByb3BzLm9mZmVyaW5nSWQsIHByb3BzLmRlZmF1bHRVSURlZmluaXRpb25JZCwgcHJvcHMucmVxdWlyZWRVSURlZmluaXRpb25JZClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAocnVudGltZUNvbnRleHQgPT4ge1xuICAgICAgICAgIHRoaXMudWlEZWZpbml0aW9uUHJvcGVydGllcyA9IHJ1bnRpbWVDb250ZXh0LnVpRGVmaW5pdGlvbkNvbnRhaW5lcj8uc291cmNlLnByb3BlcnRpZXMgPz8ge307XG4gICAgICAgICAgY29uc3QgeyBQcmljZUxpc3RJZCB9ID0gY29udGV4dC5wcm9wZXJ0aWVzID8/IHt9O1xuXG4gICAgICAgICAgY29uc3QgbWVyZ2VDb250ZXh0OiBSdW50aW1lQ29udGV4dCA9IHtcbiAgICAgICAgICAgIC4uLnJ1bnRpbWVDb250ZXh0LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5ydW50aW1lQ29udGV4dC5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi5jb250ZXh0LnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgIFByaWNpbmdFbmFibGVkOiBQcmljZUxpc3RJZCA/ICd0cnVlJyA6ICdmYWxzZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLmlkMTV0bzE4KCdBY2NvdW50SWQnLCBtZXJnZUNvbnRleHQucHJvcGVydGllcyk7XG4gICAgICAgICAgdGhpcy5fcnVudGltZUNvbnRleHQgPSBtZXJnZUNvbnRleHQ7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5wcm9wZXJ0aWVzICYmIHRoaXMuX3J1bnRpbWVDb250ZXh0LnByb3BlcnRpZXM/LlN0YXJ0RGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUoe1xuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fcnVudGltZUNvbnRleHQucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICAuLi5jb250ZXh0LnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5fcnVudGltZUNvbnRleHQ7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKCkgPT4gKHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlKSksXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlVUlEZWZpbml0aW9uKHVpRGVmaW5pdGlvbkNvbnRhaW5lcjogVUlEZWZpbml0aW9uQ29udGFpbmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9ydW50aW1lQ29udGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3J1bnRpbWVDb250ZXh0LnVpRGVmaW5pdGlvbkNvbnRhaW5lciA9IHVpRGVmaW5pdGlvbkNvbnRhaW5lcjtcbiAgICB0aGlzLnVpRGVmaW5pdGlvblByb3BlcnRpZXMgPSB1aURlZmluaXRpb25Db250YWluZXIuc291cmNlLnByb3BlcnRpZXMgPz8ge307XG4gIH1cblxuICBwcml2YXRlIGlkMTV0bzE4KHByb3BlcnR5TmFtZTogc3RyaW5nLCBzb3VyY2U/OiBEaWN0aW9uYXJ5PGFueT4pOiB2b2lkIHtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gc291cmNlW3Byb3BlcnR5TmFtZV07XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPT09IDE1KSB7XG4gICAgICBzb3VyY2VbcHJvcGVydHlOYW1lXSA9IFNhbGVzZm9yY2VJZFV0aWxzLmdlbmVyYXRlSWQxOEZyb21JZDE1KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzSW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzSW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJ1bnRpbWVNb2RlbCgpOiBSdW50aW1lTW9kZWwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJ1bnRpbWVDb250ZXh0Py5ydW50aW1lTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJ1bnRpbWVDb250ZXh0KCk6IFJ1bnRpbWVDb250ZXh0IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcnVudGltZUNvbnRleHQ7XG4gIH1cbn1cbiJdfQ==
76
+ }], ctorParameters: function () { return [{ type: i1.ConfigurationApiService }, { type: i2.RuntimeContextService }]; } });
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1ydW50aW1lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9jb3JlL21vZHVsZXMvY29uZmlndXJhdGlvbi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uLXJ1bnRpbWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQTRDLE1BQU0sa0JBQWtCLENBQUM7QUFHN0csT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7OztBQUdsRSxNQUFNLE9BQU8sMkJBQTJCO0lBT3RDLFlBQW9CLFVBQW1DLEVBQVUscUJBQTRDO1FBQXpGLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQVUsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUxyRyxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUd4QiwyQkFBc0IsR0FBc0IsRUFBRSxDQUFDO0lBRTBELENBQUM7SUFFMUcsS0FBSztRQUNWLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUM7UUFDckMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU0sWUFBWSxDQUFDLHFCQUE0QztRQUM5RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFFNUUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDaEYsS0FBSyxFQUFFLEVBQ1AsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxlQUFlLEdBQUc7Z0JBQ3JCLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPO2dCQUN0QyxZQUFZLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUM7Z0JBQzFFLFdBQVcsRUFBRSxXQUFXLENBQUMsSUFBSTtnQkFDN0IscUJBQXFCO2FBQ3RCLENBQUM7WUFFRixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDOUIsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUN4QyxDQUFDO0lBQ0osQ0FBQztJQUVNLElBQUksQ0FBQyxLQUFpQztRQUMzQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRWpDLE9BQU8sSUFBSSxDQUFDLHFCQUFxQjthQUM5QixpQkFBaUIsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQzthQUMvRyxJQUFJLENBQ0gsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxjQUFjLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFFNUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxlQUFlLEdBQUcsY0FBYyxDQUFDO1lBRXRDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM5QixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQ3hDLENBQUM7SUFDTixDQUFDO0lBRU0sb0JBQW9CLENBQUMscUJBQTRDO1FBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7UUFDbkUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO0lBQzlFLENBQUM7SUFFTyxRQUFRLENBQUMsWUFBb0IsRUFBRSxNQUF3QjtRQUM3RCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTztTQUNSO1FBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRW5DLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFO1lBQ3BELE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0RTtJQUNILENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDOzt3SEFwRlUsMkJBQTJCOzRIQUEzQiwyQkFBMkI7MkZBQTNCLDJCQUEyQjtrQkFEdkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZWFwcHMvYXBpJztcbmltcG9ydCB7IFJ1bnRpbWVNb2RlbCwgU2FsZXNmb3JjZUlkVXRpbHMsIFVJRGVmaW5pdGlvbkNvbnRhaW5lciwgVUlEZWZpbml0aW9uUHJvcHMgfSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlJztcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlyc3QsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUnVudGltZUNvbnRleHQsIFJ1bnRpbWVNb2RlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgUnVudGltZUluaXRpYWxpemF0aW9uUHJvcHMgfSBmcm9tICcuLi90eXBlcy9jb25maWd1cmF0aW9uLXJ1bnRpbWUudHlwZXMnO1xuaW1wb3J0IHsgUnVudGltZUNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi9ydW50aW1lLWNvbnRleHQuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2Uge1xuICBwcml2YXRlIF9ydW50aW1lQ29udGV4dD86IFJ1bnRpbWVDb250ZXh0O1xuICBwcml2YXRlIF9pc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgcHVibGljIGluaXRpYWxpemF0aW9uUHJvcHM/OiBSdW50aW1lSW5pdGlhbGl6YXRpb25Qcm9wcztcbiAgcHVibGljIHVpRGVmaW5pdGlvblByb3BlcnRpZXM6IFVJRGVmaW5pdGlvblByb3BzID0ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhcGlTZXJ2aWNlOiBDb25maWd1cmF0aW9uQXBpU2VydmljZSwgcHJpdmF0ZSBydW50aW1lQ29udGV4dFNlcnZpY2U6IFJ1bnRpbWVDb250ZXh0U2VydmljZSkge31cblxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuX3J1bnRpbWVDb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9wcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnVpRGVmaW5pdGlvblByb3BlcnRpZXMgPSB7fTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0VGVzdE1vZGUodWlEZWZpbml0aW9uQ29udGFpbmVyOiBVSURlZmluaXRpb25Db250YWluZXIpOiBPYnNlcnZhYmxlPFJ1bnRpbWVDb250ZXh0PiB7XG4gICAgdGhpcy51aURlZmluaXRpb25Qcm9wZXJ0aWVzID0gdWlEZWZpbml0aW9uQ29udGFpbmVyLnNvdXJjZS5wcm9wZXJ0aWVzID8/IHt9O1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5nZXRSdW50aW1lRGF0YUJ5TW9kZWxJZCh1aURlZmluaXRpb25Db250YWluZXIubW9kZWxJZCkucGlwZShcbiAgICAgIGZpcnN0KCksXG4gICAgICBtYXAocnVudGltZURhdGEgPT4ge1xuICAgICAgICB0aGlzLl9ydW50aW1lQ29udGV4dCA9IHtcbiAgICAgICAgICBtb2RlbElkOiB1aURlZmluaXRpb25Db250YWluZXIubW9kZWxJZCxcbiAgICAgICAgICBydW50aW1lTW9kZWw6IFJ1bnRpbWVNb2RlbC5jcmVhdGUocnVudGltZURhdGEudHlwZXMsIHJ1bnRpbWVEYXRhLnByb2R1Y3RzKSxcbiAgICAgICAgICBydW50aW1lTW9kZTogUnVudGltZU1vZGUuVEVTVCxcbiAgICAgICAgICB1aURlZmluaXRpb25Db250YWluZXIsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bnRpbWVDb250ZXh0O1xuICAgICAgfSksXG4gICAgICB0YXAoKCkgPT4gKHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlKSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0KHByb3BzOiBSdW50aW1lSW5pdGlhbGl6YXRpb25Qcm9wcyk6IE9ic2VydmFibGU8UnVudGltZUNvbnRleHQ+IHtcbiAgICB0aGlzLmluaXRpYWxpemF0aW9uUHJvcHMgPSBwcm9wcztcblxuICAgIHJldHVybiB0aGlzLnJ1bnRpbWVDb250ZXh0U2VydmljZVxuICAgICAgLmdldFJ1bnRpbWVDb250ZXh0KHByb3BzLnByb2R1Y3RJZCwgcHJvcHMub2ZmZXJpbmdJZCwgcHJvcHMuZGVmYXVsdFVJRGVmaW5pdGlvbklkLCBwcm9wcy5yZXF1aXJlZFVJRGVmaW5pdGlvbklkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcChydW50aW1lQ29udGV4dCA9PiB7XG4gICAgICAgICAgdGhpcy51aURlZmluaXRpb25Qcm9wZXJ0aWVzID0gcnVudGltZUNvbnRleHQudWlEZWZpbml0aW9uQ29udGFpbmVyPy5zb3VyY2UucHJvcGVydGllcyA/PyB7fTtcblxuICAgICAgICAgIHRoaXMuaWQxNXRvMTgoJ0FjY291bnRJZCcsIHJ1bnRpbWVDb250ZXh0LnByb3BlcnRpZXMpO1xuICAgICAgICAgIHRoaXMuX3J1bnRpbWVDb250ZXh0ID0gcnVudGltZUNvbnRleHQ7XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5fcnVudGltZUNvbnRleHQ7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKCkgPT4gKHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlKSksXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlVUlEZWZpbml0aW9uKHVpRGVmaW5pdGlvbkNvbnRhaW5lcjogVUlEZWZpbml0aW9uQ29udGFpbmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9ydW50aW1lQ29udGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3J1bnRpbWVDb250ZXh0LnVpRGVmaW5pdGlvbkNvbnRhaW5lciA9IHVpRGVmaW5pdGlvbkNvbnRhaW5lcjtcbiAgICB0aGlzLnVpRGVmaW5pdGlvblByb3BlcnRpZXMgPSB1aURlZmluaXRpb25Db250YWluZXIuc291cmNlLnByb3BlcnRpZXMgPz8ge307XG4gIH1cblxuICBwcml2YXRlIGlkMTV0bzE4KHByb3BlcnR5TmFtZTogc3RyaW5nLCBzb3VyY2U/OiBEaWN0aW9uYXJ5PGFueT4pOiB2b2lkIHtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gc291cmNlW3Byb3BlcnR5TmFtZV07XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPT09IDE1KSB7XG4gICAgICBzb3VyY2VbcHJvcGVydHlOYW1lXSA9IFNhbGVzZm9yY2VJZFV0aWxzLmdlbmVyYXRlSWQxOEZyb21JZDE1KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzSW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzSW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJ1bnRpbWVNb2RlbCgpOiBSdW50aW1lTW9kZWwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJ1bnRpbWVDb250ZXh0Py5ydW50aW1lTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJ1bnRpbWVDb250ZXh0KCk6IFJ1bnRpbWVDb250ZXh0IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcnVudGltZUNvbnRleHQ7XG4gIH1cbn1cbiJdfQ==
@@ -1,10 +1,11 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { FlowStateApiService, QuoteApiService } from '@veloceapps/api';
2
+ import { FlowStateApiService } from '@veloceapps/api';
3
+ import { SalesTransactionApiService } from '@veloceapps/api/v2';
3
4
  import { ToastService, ToastType } from '@veloceapps/components';
4
5
  import { ConfigurationTranslatorUtils, EntityUtil, isDefined, UUID, } from '@veloceapps/core';
5
6
  import { assign, cloneDeep } from 'lodash';
6
7
  import { BehaviorSubject, buffer, catchError, combineLatest, debounceTime, distinctUntilChanged, filter, finalize, map, of, share, shareReplay, Subject, switchMap, take, takeUntil, tap, throwError, } from 'rxjs';
7
- import { FlowInfoService, FlowStateService, QuoteDraftService } from '../../../services';
8
+ import { FlowInfoService, FlowStateService, SalesTransactionService } from '../../../services';
8
9
  import { FlowConfigurationService } from '../../flow-configuration';
9
10
  import { ConfigurationRuntimeService } from './configuration-runtime.service';
10
11
  import { ConfigurationService } from './configuration.service';
@@ -15,17 +16,22 @@ import * as i3 from "../../../services";
15
16
  import * as i4 from "@veloceapps/components";
16
17
  import * as i5 from "../../flow-configuration";
17
18
  import * as i6 from "@veloceapps/api";
19
+ import * as i7 from "@veloceapps/api/v2";
18
20
  export class ConfigurationStateService {
19
- constructor(configurationRuntimeService, configurationService, quoteDraftService, toastService, flowStateService, flowInfoService, flowConfigurationService, flowStateApiService, quoteApiService) {
21
+ constructor(configurationRuntimeService, configurationService,
22
+ // private quoteDraftService: QuoteDraftService,
23
+ salesTransactionService, toastService, flowStateService, flowInfoService, flowConfigurationService, flowStateApiService,
24
+ // private quoteApiService: QuoteApiService,
25
+ salesTransactionApiService) {
20
26
  this.configurationRuntimeService = configurationRuntimeService;
21
27
  this.configurationService = configurationService;
22
- this.quoteDraftService = quoteDraftService;
28
+ this.salesTransactionService = salesTransactionService;
23
29
  this.toastService = toastService;
24
30
  this.flowStateService = flowStateService;
25
31
  this.flowInfoService = flowInfoService;
26
32
  this.flowConfigurationService = flowConfigurationService;
27
33
  this.flowStateApiService = flowStateApiService;
28
- this.quoteApiService = quoteApiService;
34
+ this.salesTransactionApiService = salesTransactionApiService;
29
35
  this.isInitialized$ = new BehaviorSubject(false);
30
36
  this.canceledConfiguration$ = new Subject();
31
37
  this.NOT_INITIALIZED = Symbol();
@@ -49,9 +55,9 @@ export class ConfigurationStateService {
49
55
  request$ = this.initStateful$();
50
56
  }
51
57
  else {
52
- request$ = this.initStateless$();
58
+ request$ = of(undefined);
53
59
  }
54
- return request$.pipe(finalize(() => {
60
+ return request$.pipe(take(1), tap(() => {
55
61
  this.isInitialized$.next(true);
56
62
  this.canceledConfiguration$ = new Subject();
57
63
  }));
@@ -133,50 +139,39 @@ export class ConfigurationStateService {
133
139
  }
134
140
  }), takeUntil(this.canceledConfiguration$));
135
141
  }
136
- saveConfiguration(flow) {
142
+ saveConfiguration() {
137
143
  if (this.isStatefulConfiguration) {
138
- return this.flowStateApiService
139
- .saveConfiguration(this.flowStateService.stateId ?? '', this.stateId ?? '')
140
- .pipe(switchMap(r => this.flowStateService.executeRequest$({}, true).pipe(map(() => r))));
144
+ return this.flowStateApiService.saveConfiguration(this.flowStateService.stateId ?? '', this.stateId ?? '').pipe(switchMap(r => this.flowStateService.executeRequest$({}, true).pipe(map(() => r))), map(r => ({ id: r.quoteId })));
141
145
  }
142
- else {
143
- if (!flow) {
144
- const quoteDraft = this.quoteDraftService.quoteDraft;
145
- if (!quoteDraft) {
146
- return of({ quoteId: '' });
147
- }
148
- const rootLineItem = this.configurationService.getSnapshot();
149
- const asset = this.configurationService.getAsset();
150
- const currentState = rootLineItem ? [rootLineItem] : [];
151
- const initialState = asset ? [asset] : [];
152
- return this.quoteApiService.upsertQuote({ ...quoteDraft, currentState, initialState });
153
- }
154
- else {
155
- const quoteDraft = this.quoteDraftService.quoteDraft;
156
- const lineItem = this.configurationService.getSnapshot();
157
- if (!quoteDraft || !lineItem) {
158
- return of({ quoteId: '' });
159
- }
160
- const isNewLineItem = quoteDraft.currentState.every(li => li.id !== lineItem.id);
161
- let currentState;
162
- if (isNewLineItem) {
163
- currentState = [...quoteDraft.currentState, lineItem];
164
- }
165
- else {
166
- currentState = quoteDraft.currentState.map(li => (li.id === lineItem.id ? lineItem : li));
167
- }
168
- const asset = this.configurationService.getAsset();
169
- const initialState = [...(this.quoteDraftService.quoteDraft?.initialState ?? [])];
170
- if (asset) {
171
- if (!initialState.some(li => li.id === asset.id)) {
172
- initialState.push(asset);
173
- }
174
- }
175
- return this.flowConfigurationService
176
- .calculate$({ ...quoteDraft, currentState, initialState })
177
- .pipe(map(() => ({ quoteId: '' })));
178
- }
146
+ const state = this.salesTransactionService.state;
147
+ if (!state) {
148
+ return of({ id: '' });
179
149
  }
150
+ const { standalone } = this.flowInfoService.flow.properties;
151
+ if (standalone) {
152
+ return this.salesTransactionApiService.upsert(state);
153
+ }
154
+ // const lineItem = this.configurationService.getSnapshot();
155
+ // if (!lineItem) {
156
+ // return of({ id: '' });
157
+ // }
158
+ // const isNewLineItem = quoteDraft.currentState.every(li => li.id !== lineItem.id);
159
+ // let currentState: LineItem[];
160
+ // if (isNewLineItem) {
161
+ // currentState = [...quoteDraft.currentState, lineItem];
162
+ // } else {
163
+ // currentState = quoteDraft.currentState.map(li => (li.id === lineItem.id ? lineItem : li));
164
+ // }
165
+ // const asset = this.configurationService.getAsset();
166
+ // const initialState = [...(this.quoteDraftService.quoteDraft?.initialState ?? [])];
167
+ // if (asset) {
168
+ // if (!initialState.some(li => li.id === asset.id)) {
169
+ // initialState.push(asset);
170
+ // }
171
+ // }
172
+ // TODO: adjust the logic for ShoppingCart
173
+ const newState = { ...state };
174
+ return this.flowConfigurationService.calculate$(newState).pipe(map(() => ({ id: '' })));
180
175
  }
181
176
  cancelConfiguration() {
182
177
  if (!this.isInitialized$.value) {
@@ -222,9 +217,6 @@ export class ConfigurationStateService {
222
217
  return undefined;
223
218
  }));
224
219
  }
225
- initStateless$() {
226
- return this.configurationService.configure().pipe(map(() => undefined));
227
- }
228
220
  execToRequest(exec) {
229
221
  return {
230
222
  actions: exec.actions?.map(action => ({
@@ -378,9 +370,9 @@ export class ConfigurationStateService {
378
370
  }, { stateId: '', selectors: {} });
379
371
  }
380
372
  }
381
- ConfigurationStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService, deps: [{ token: i1.ConfigurationRuntimeService }, { token: i2.ConfigurationService }, { token: i3.QuoteDraftService }, { token: i4.ToastService }, { token: i3.FlowStateService }, { token: i3.FlowInfoService }, { token: i5.FlowConfigurationService }, { token: i6.FlowStateApiService }, { token: i6.QuoteApiService }], target: i0.ɵɵFactoryTarget.Injectable });
373
+ ConfigurationStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService, deps: [{ token: i1.ConfigurationRuntimeService }, { token: i2.ConfigurationService }, { token: i3.SalesTransactionService }, { token: i4.ToastService }, { token: i3.FlowStateService }, { token: i3.FlowInfoService }, { token: i5.FlowConfigurationService }, { token: i6.FlowStateApiService }, { token: i7.SalesTransactionApiService }], target: i0.ɵɵFactoryTarget.Injectable });
382
374
  ConfigurationStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService });
383
375
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService, decorators: [{
384
376
  type: Injectable
385
- }], ctorParameters: function () { return [{ type: i1.ConfigurationRuntimeService }, { type: i2.ConfigurationService }, { type: i3.QuoteDraftService }, { type: i4.ToastService }, { type: i3.FlowStateService }, { type: i3.FlowInfoService }, { type: i5.FlowConfigurationService }, { type: i6.FlowStateApiService }, { type: i6.QuoteApiService }]; } });
386
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS9tb2R1bGVzL2NvbmZpZ3VyYXRpb24vc2VydmljZXMvY29uZmlndXJhdGlvbi1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFJTCw0QkFBNEIsRUFFNUIsVUFBVSxFQU1WLFNBQVMsRUFFVCxJQUFJLEdBQ0wsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBYyxNQUFNLFFBQVEsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsZUFBZSxFQUNmLE1BQU0sRUFDTixVQUFVLEVBQ1YsYUFBYSxFQUNiLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLFFBQVEsRUFDUixHQUFHLEVBRUgsRUFBRSxFQUNGLEtBQUssRUFDTCxXQUFXLEVBQ1gsT0FBTyxFQUNQLFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxFQUNULEdBQUcsRUFDSCxVQUFVLEdBQ1gsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7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RU8scUJBQXFCLENBQzNCLE9BQXFDLEVBQ3JDLGtCQUFrQztRQUVsQyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQ3ZELENBQUMsTUFBZ0MsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQ3BELElBQUk7Z0JBQ0YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRztvQkFDdEIsT0FBTyxFQUFFLElBQUk7b0JBQ2IsTUFBTSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUM7aUJBQ2pFLENBQUM7YUFDSDtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUc7b0JBQ3RCLE9BQU8sRUFBRSxLQUFLO29CQUNkLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUN4QixDQUFDO2FBQ0g7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLEVBQ0QsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FDL0IsQ0FBQztJQUNKLENBQUM7O3NIQTVlVSx5QkFBeUI7MEhBQXpCLHlCQUF5QjsyRkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmxvd1N0YXRlQXBpU2VydmljZSwgUXVvdGVBcGlTZXJ2aWNlLCBTYXZlUXVvdGVSZXNwb25zZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UsIFRvYXN0VHlwZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhdGlvblByb2Nlc3NvcixcbiAgQ29uZmlndXJhdGlvblByb2Nlc3NvclNjcmlwdEZuLFxuICBDb25maWd1cmF0aW9uUmVxdWVzdCxcbiAgQ29uZmlndXJhdGlvblRyYW5zbGF0b3JVdGlscyxcbiAgQ29uZmlndXJlUHJpY2UsXG4gIEVudGl0eVV0aWwsXG4gIEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8sXG4gIEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3QsXG4gIEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8sXG4gIEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdCxcbiAgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZSxcbiAgaXNEZWZpbmVkLFxuICBMaW5lSXRlbSxcbiAgVVVJRCxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBhc3NpZ24sIGNsb25lRGVlcCwgRGljdGlvbmFyeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGJ1ZmZlcixcbiAgY2F0Y2hFcnJvcixcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBmaW5hbGl6ZSxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc2hhcmUsXG4gIHNoYXJlUmVwbGF5LFxuICBTdWJqZWN0LFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxuICB0aHJvd0Vycm9yLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZsb3dJbmZvU2VydmljZSwgRmxvd1N0YXRlU2VydmljZSwgUXVvdGVEcmFmdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBGbG93U3RhdGVTdWJzY3JpcHRpb25PcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvZmxvdy1zdGF0ZS50eXBlcyc7XG5pbXBvcnQgeyBGbG93Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9mbG93LWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLXJ1bnRpbWUuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcblxudHlwZSBTdGF0ZVN1YnNjcmlwdGlvbiA9IHtcbiAgcmVxdWVzdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTztcbiAgZGF0YSQ6IEJlaGF2aW9yU3ViamVjdDx1bmtub3duPjtcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uU3RhdGVTZXJ2aWNlIHtcbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGNhbmNlbGVkQ29uZmlndXJhdGlvbiQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgTk9UX0lOSVRJQUxJWkVEID0gU3ltYm9sKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgRVhFQ1VUSU9OX0JVRkZFUl9USU1FID0gMTAwO1xuXG4gIHByaXZhdGUgZXhlY3V0ZWRGdW5jdGlvbnM6IERpY3Rpb25hcnk8Q29uZmlndXJhdGlvblByb2Nlc3NvclNjcmlwdEZuPiA9IHt9O1xuICBwcml2YXRlIHN0YXRlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG93bmVySWQgPSAnJztcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBTdGF0ZVN1YnNjcmlwdGlvbj4gPSB7fTtcbiAgcHJpdmF0ZSBjb25maWd1cmF0aW9uU3RvcmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgcHJpdmF0ZSBleGVjdXRpb25JblByb2dyZXNzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIHN0YXRlZnVsUmVxdWVzdFN0cmVhbSQgPSBuZXcgU3ViamVjdDxGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPPigpO1xuICBwcml2YXRlIHN0YXRlZnVsRXhlY3V0aW9uUmVxdWVzdCQ6IE9ic2VydmFibGU8Rmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0PjtcbiAgcHJpdmF0ZSBzdGF0ZWxlc3NFeGVjdXRpb25SZXF1ZXN0JDogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2U6IENvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHF1b3RlRHJhZnRTZXJ2aWNlOiBRdW90ZURyYWZ0U2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd1N0YXRlU2VydmljZTogRmxvd1N0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dJbmZvU2VydmljZTogRmxvd0luZm9TZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBGbG93Q29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93U3RhdGVBcGlTZXJ2aWNlOiBGbG93U3RhdGVBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVvdGVBcGlTZXJ2aWNlOiBRdW90ZUFwaVNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuc3RhdGVmdWxFeGVjdXRpb25SZXF1ZXN0JCA9IHRoaXMuaW5pdEJ1ZmZlcmVkUmVxdWVzdCQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFeGVjdXRpb25JblByb2dyZXNzJCgpIHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRpb25JblByb2dyZXNzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0JCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBsZXQgcmVxdWVzdCQ7XG4gICAgaWYgKHRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkICYmIHRoaXMuaXNTdGF0ZWZ1bENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHJlcXVlc3QkID0gdGhpcy5pbml0U3RhdGVmdWwkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QkID0gdGhpcy5pbml0U3RhdGVsZXNzJCgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0JC5waXBlKFxuICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuY2FuY2VsZWRDb25maWd1cmF0aW9uJCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNsZWFudXAoKTogdm9pZCB7XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnN1YnNjcmlwdGlvbnMpLmZvckVhY2goKHsgZGF0YSQgfSkgPT4gZGF0YSQuY29tcGxldGUoKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0ge307XG5cbiAgICBpZiAodGhpcy5zdGF0ZUlkKSB7XG4gICAgICB0aGlzLmNhbmNlbENvbmZpZ3VyYXRpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25TdG9yZSA9IHt9O1xuICAgIHRoaXMuZXhlY3V0ZWRGdW5jdGlvbnMgPSB7fTtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLnJlc2V0KCk7XG4gIH1cblxuICBwdWJsaWMgZXhlY3V0ZSQoZXhlYzogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdCk6IE9ic2VydmFibGU8Rmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0WydzZWxlY3RvcnMnXT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmV4ZWNUb1JlcXVlc3QoZXhlYyk7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlUmVxdWVzdCQocmVxdWVzdCkucGlwZShcbiAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAvLyBLZWVwIG9ubHkgcmVxdWVzdGVkIHJlc3VsdHNcbiAgICAgICAgY29uc3QgYWN0dWFsU2VsZWN0b3JzID0gT2JqZWN0LmVudHJpZXMocmVzdWx0LnNlbGVjdG9ycykucmVkdWNlKFxuICAgICAgICAgICh0cnVuazogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZT4sIFtyZXF1ZXN0SWQsIHJlc3VsdF0pID0+IHtcbiAgICAgICAgICAgIGlmIChleGVjLnNlbGVjdG9ycz8uW3JlcXVlc3RJZF0pIHtcbiAgICAgICAgICAgICAgdHJ1bmtbcmVxdWVzdElkXSA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVuaztcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9LFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBhY3R1YWxTZWxlY3RvcnM7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGRpc3BhdGNoJChhY3Rpb25OYW1lOiBzdHJpbmcsIGlucHV0RGF0YTogdW5rbm93biA9IHt9KTogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBleGVjOiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0ID0ge1xuICAgICAgYWN0aW9uczogW3sgbmFtZTogYWN0aW9uTmFtZSwgaW5wdXREYXRhIH1dLFxuICAgIH07XG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZXhlY1RvUmVxdWVzdChleGVjKTtcblxuICAgIGNvbnN0IGV4ZWN1dGlvblJlcXVlc3QkID0gdGhpcy5leGVjdXRlUmVxdWVzdCQocmVxdWVzdCk7XG5cbiAgICBpZiAodGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIGV4ZWN1dGlvblJlcXVlc3QkO1xuICAgIH1cblxuICAgIC8vIHByZXZlbnQgcGFyYWxsZWwgY29uZmlndXJhdGlvbiByZXF1ZXN0cyBpbiBzdGF0ZWxlc3MgbW9kZVxuICAgIGlmICghdGhpcy5zdGF0ZWxlc3NFeGVjdXRpb25SZXF1ZXN0JCkge1xuICAgICAgdGhpcy5zdGF0ZWxlc3NFeGVjdXRpb25SZXF1ZXN0JCA9IGV4ZWN1dGlvblJlcXVlc3QkLnBpcGUoXG4gICAgICAgIHNoYXJlUmVwbGF5KCksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+ICh0aGlzLnN0YXRlbGVzc0V4ZWN1dGlvblJlcXVlc3QkID0gbnVsbCkpLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVsZXNzRXhlY3V0aW9uUmVxdWVzdCQ7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0JDxSZXNwb25zZSA9IHVua25vd24+KFxuICAgIHNlbGVjdG9yTmFtZTogc3RyaW5nLFxuICAgIGlucHV0RGF0YTogdW5rbm93biA9IHt9LFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+PiB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gVVVJRC5VVUlEKCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZXhlY1RvUmVxdWVzdCh7XG4gICAgICBzZWxlY3RvcnM6IHtcbiAgICAgICAgW3JlcXVlc3RJZF06IHtcbiAgICAgICAgICBuYW1lOiBzZWxlY3Rvck5hbWUsXG4gICAgICAgICAgaW5wdXREYXRhLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVSZXF1ZXN0JChyZXF1ZXN0KS5waXBlKFxuICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLnNlbGVjdG9yc1tyZXF1ZXN0SWRdIGFzIEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZSQ8UmVzcG9uc2UgPSB1bmtub3duPihcbiAgICBzZWxlY3Rvck5hbWU6IHN0cmluZyxcbiAgICBpbnB1dERhdGE6IHVua25vd24gPSB7fSxcbiAgICBvcHRpb25zPzogRmxvd1N0YXRlU3Vic2NyaXB0aW9uT3B0aW9ucyxcbiAgKTogT2JzZXJ2YWJsZTxGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPFJlc3BvbnNlPj4ge1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IFVVSUQuVVVJRCgpO1xuXG4gICAgbGV0IHN1YnNjcmlwdGlvbiA9IHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdO1xuICAgIGlmICghc3Vic2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5leGVjVG9SZXF1ZXN0KHtcbiAgICAgICAgc2VsZWN0b3JzOiB7XG4gICAgICAgICAgW3JlcXVlc3RJZF06IHtcbiAgICAgICAgICAgIG5hbWU6IHNlbGVjdG9yTmFtZSxcbiAgICAgICAgICAgIGlucHV0RGF0YSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHN1YnNjcmlwdGlvbiA9IHtcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgZGF0YSQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8dW5rbm93bj4odGhpcy5OT1RfSU5JVElBTElaRUQpLFxuICAgICAgfTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdID0gc3Vic2NyaXB0aW9uO1xuXG4gICAgICBpZiAoIW9wdGlvbnM/LmNvbGQpIHtcbiAgICAgICAgdGhpcy5leGVjdXRlUmVxdWVzdCQocmVxdWVzdCkuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbi5kYXRhJC5waXBlKFxuICAgICAgZmlsdGVyKGRhdGEgPT4gZGF0YSAhPSB0aGlzLk5PVF9JTklUSUFMSVpFRCksXG4gICAgICBtYXAoZGF0YSA9PiBkYXRhIGFzIEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0/LmRhdGEkLm9ic2VydmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLmNhbmNlbGVkQ29uZmlndXJhdGlvbiQpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZUNvbmZpZ3VyYXRpb24oZmxvdz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPFNhdmVRdW90ZVJlc3BvbnNlPiB7XG4gICAgaWYgKHRoaXMuaXNTdGF0ZWZ1bENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2VcbiAgICAgICAgLnNhdmVDb25maWd1cmF0aW9uKHRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkID8/ICcnLCB0aGlzLnN0YXRlSWQgPz8gJycpXG4gICAgICAgIC5waXBlKHN3aXRjaE1hcChyID0+IHRoaXMuZmxvd1N0YXRlU2VydmljZS5leGVjdXRlUmVxdWVzdCQoe30sIHRydWUpLnBpcGUobWFwKCgpID0+IHIpKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWZsb3cpIHtcbiAgICAgICAgY29uc3QgcXVvdGVEcmFmdCA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdDtcbiAgICAgICAgaWYgKCFxdW90ZURyYWZ0KSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHsgcXVvdGVJZDogJycgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb290TGluZUl0ZW0gPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFNuYXBzaG90KCk7XG4gICAgICAgIGNvbnN0IGFzc2V0ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRBc3NldCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSByb290TGluZUl0ZW0gPyBbcm9vdExpbmVJdGVtXSA6IFtdO1xuICAgICAgICBjb25zdCBpbml0aWFsU3RhdGUgPSBhc3NldCA/IFthc3NldF0gOiBbXTtcblxuICAgICAgICByZXR1cm4gdGhpcy5xdW90ZUFwaVNlcnZpY2UudXBzZXJ0UXVvdGUoeyAuLi5xdW90ZURyYWZ0LCBjdXJyZW50U3RhdGUsIGluaXRpYWxTdGF0ZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHF1b3RlRHJhZnQgPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQ7XG4gICAgICAgIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRTbmFwc2hvdCgpO1xuXG4gICAgICAgIGlmICghcXVvdGVEcmFmdCB8fCAhbGluZUl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gb2YoeyBxdW90ZUlkOiAnJyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmV3TGluZUl0ZW0gPSBxdW90ZURyYWZ0LmN1cnJlbnRTdGF0ZS5ldmVyeShsaSA9PiBsaS5pZCAhPT0gbGluZUl0ZW0uaWQpO1xuXG4gICAgICAgIGxldCBjdXJyZW50U3RhdGU6IExpbmVJdGVtW107XG4gICAgICAgIGlmIChpc05ld0xpbmVJdGVtKSB7XG4gICAgICAgICAgY3VycmVudFN0YXRlID0gWy4uLnF1b3RlRHJhZnQuY3VycmVudFN0YXRlLCBsaW5lSXRlbV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudFN0YXRlID0gcXVvdGVEcmFmdC5jdXJyZW50U3RhdGUubWFwKGxpID0+IChsaS5pZCA9PT0gbGluZUl0ZW0uaWQgPyBsaW5lSXRlbSA6IGxpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhc3NldCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0QXNzZXQoKTtcbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlID0gWy4uLih0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQ/LmluaXRpYWxTdGF0ZSA/PyBbXSldO1xuICAgICAgICBpZiAoYXNzZXQpIHtcbiAgICAgICAgICBpZiAoIWluaXRpYWxTdGF0ZS5zb21lKGxpID0+IGxpLmlkID09PSBhc3NldC5pZCkpIHtcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZS5wdXNoKGFzc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5mbG93Q29uZmlndXJhdGlvblNlcnZpY2VcbiAgICAgICAgICAuY2FsY3VsYXRlJCh7IC4uLnF1b3RlRHJhZnQsIGN1cnJlbnRTdGF0ZSwgaW5pdGlhbFN0YXRlIH0pXG4gICAgICAgICAgLnBpcGUobWFwKCgpID0+ICh7IHF1b3RlSWQ6ICcnIH0pKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNhbmNlbENvbmZpZ3VyYXRpb24oKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQkLnZhbHVlKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbmNlbGVkQ29uZmlndXJhdGlvbiQubmV4dCgpO1xuICAgIHRoaXMuY2FuY2VsZWRDb25maWd1cmF0aW9uJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IHt9O1xuXG4gICAgdGhpcy5pc0luaXRpYWxpemVkJC5uZXh0KGZhbHNlKTtcbiAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCQudmFsdWUgfHwgIXRoaXMuaXNTdGF0ZWZ1bENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLmNhbmNlbENvbmZpZ3VyYXRpb24odGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQgPz8gJycsIHRoaXMuc3RhdGVJZCA/PyAnJyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc1N0YXRlZnVsQ29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mbG93SW5mb1NlcnZpY2UuZmxvdz8ucHJvcGVydGllcy5zdGF0ZWZ1bCA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN0YXRlZnVsJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICB0aGlzLm93bmVySWQgPSB0aGlzLmNvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZS5ydW50aW1lQ29udGV4dD8udWlEZWZpbml0aW9uQ29udGFpbmVyPy5pZCA/PyAnJztcbiAgICBjb25zdCBsaW5lSXRlbUlkID0gdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ/LnByb3BlcnRpZXM/LmxpbmVJdGVtSWQ7XG4gICAgaWYgKCF0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCkge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ/LnVpRGVmaW5pdGlvbkNvbnRhaW5lcjtcblxuICAgIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZW5lcmF0ZUxpbmVJdGVtKCk7XG5cbiAgICBsZXQgcmVxdWVzdCQ6IE9ic2VydmFibGU8Rmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0PjtcblxuICAgIGlmICghbGluZUl0ZW1JZCkge1xuICAgICAgcmVxdWVzdCQgPSB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2UubmV3Q29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCwge1xuICAgICAgICBsaW5lSXRlbSxcbiAgICAgICAgYWN0aW9uc092ZXJyaWRlOiBjb250YWluZXI/LmFjdGlvbnM/Lm1hcChwcm9jZXNzb3IgPT4gKHsgLi4ucHJvY2Vzc29yLCBvd25lcklkOiB0aGlzLm93bmVySWQgfSkpLFxuICAgICAgICBzZWxlY3RvcnNPdmVycmlkZTogY29udGFpbmVyPy5zZWxlY3RvcnM/Lm1hcChwcm9jZXNzb3IgPT4gKHsgLi4ucHJvY2Vzc29yLCBvd25lcklkOiB0aGlzLm93bmVySWQgfSkpLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QkID0gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLnN0YXJ0Q29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCwge1xuICAgICAgICBsaW5lSXRlbUlkLFxuICAgICAgICBhY3Rpb25zT3ZlcnJpZGU6IGNvbnRhaW5lcj8uYWN0aW9ucz8ubWFwKHByb2Nlc3NvciA9PiAoeyAuLi5wcm9jZXNzb3IsIG93bmVySWQ6IHRoaXMub3duZXJJZCB9KSksXG4gICAgICAgIHNlbGVjdG9yc092ZXJyaWRlOiBjb250YWluZXI/LnNlbGVjdG9ycz8ubWFwKHByb2Nlc3NvciA9PiAoeyAuLi5wcm9jZXNzb3IsIG93bmVySWQ6IHRoaXMub3duZXJJZCB9KSksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWVzdCQucGlwZShcbiAgICAgIG1hcChyID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZUlkID0gci5zdGF0ZUlkO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN0YXRlbGVzcyQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuY29uZmlndXJlKCkucGlwZShtYXAoKCkgPT4gdW5kZWZpbmVkKSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWNUb1JlcXVlc3QoZXhlYzogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdCk6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8ge1xuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb25zOiBleGVjLmFjdGlvbnM/Lm1hcChhY3Rpb24gPT4gKHtcbiAgICAgICAgYXBpTmFtZTogYWN0aW9uLm5hbWUsXG4gICAgICAgIG93bmVySWQ6IHRoaXMub3duZXJJZCxcbiAgICAgICAgaW5wdXREYXRhOiBhY3Rpb24uaW5wdXREYXRhID8/IHt9LFxuICAgICAgfSkpLFxuICAgICAgc2VsZWN0b3JzOlxuICAgICAgICBleGVjLnNlbGVjdG9ycyAmJlxuICAgICAgICBPYmplY3QuZW50cmllcyhleGVjLnNlbGVjdG9ycykucmVkdWNlKFxuICAgICAgICAgICh0cnVuazogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlRXhlY3V0YWJsZURUTz4sIFtrZXksIHNlbGVjdG9yXSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnRydW5rLFxuICAgICAgICAgICAgW2tleV06IHsgYXBpTmFtZTogc2VsZWN0b3IubmFtZSwgb3duZXJJZDogdGhpcy5vd25lcklkLCBpbnB1dERhdGE6IHNlbGVjdG9yLmlucHV0RGF0YSA/PyB7fSB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHt9LFxuICAgICAgICApLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdG9yc1Jlc3BvbnNlKHNlbGVjdG9yczogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTx1bmtub3duPj4pOiB2b2lkIHtcbiAgICBPYmplY3QuZW50cmllcyhzZWxlY3RvcnMpLmZvckVhY2goKFtyZXF1ZXN0SWQsIHNlbGVjdG9yUmVzdWx0XSkgPT4ge1xuICAgICAgaWYgKCFzZWxlY3RvclJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiBUb2FzdFR5cGUuZXJyb3IsIHN1bW1hcnk6IHNlbGVjdG9yUmVzdWx0LmVycm9yTWVzc2FnZSB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uJCA9IHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdPy5kYXRhJDtcbiAgICAgIGlmIChzdWJzY3JpcHRpb24kKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiQubmV4dChzZWxlY3RvclJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVSZXF1ZXN0JChcbiAgICByZXE6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8sXG4gICAgZm9yY2VTdWJzY3JpcHRpb25zPzogYm9vbGVhbixcbiAgKTogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBmdWxsUmVxdWVzdCA9IGNsb25lRGVlcChyZXEpO1xuICAgIGlmIChmdWxsUmVxdWVzdC5hY3Rpb25zPy5sZW5ndGggfHwgZm9yY2VTdWJzY3JpcHRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuc3Vic2NyaXB0aW9ucykpIHtcbiAgICAgICAgZnVsbFJlcXVlc3Quc2VsZWN0b3JzID0gYXNzaWduKGZ1bGxSZXF1ZXN0LnNlbGVjdG9ycywgc3Vic2NyaXB0aW9uLnJlcXVlc3Quc2VsZWN0b3JzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZXhlY3V0aW9uJDtcblxuICAgIGlmICh0aGlzLmlzU3RhdGVmdWxDb25maWd1cmF0aW9uKSB7XG4gICAgICBleGVjdXRpb24kID0gdGhpcy5leGVjdXRlU3RhdGVmdWwkKGZ1bGxSZXF1ZXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhlY3V0aW9uJCA9IHRoaXMuZXhlY3V0ZVN0YXRlbGVzcyQoZnVsbFJlcXVlc3QpO1xuICAgIH1cblxuICAgIHJldHVybiBleGVjdXRpb24kLnBpcGUodGFwKHJlc3VsdCA9PiB0aGlzLmhhbmRsZVNlbGVjdG9yc1Jlc3BvbnNlKHJlc3VsdC5zZWxlY3RvcnMpKSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTdGF0ZWxlc3MkKHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8pOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIHRoaXMuZXhlY3V0aW9uSW5Qcm9ncmVzcyQubmV4dCh0cnVlKTtcblxuICAgIHJldHVybiBvZih1bmRlZmluZWQpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAvLyBBcHBseSBhY3Rpb25zIGFuZCBleGVjdXRlIGNvbmZpZ3VyYXRpb24vcHJpY2UgY2FsbFxuICAgICAgICAvLyBObyBuZWVkIHRvIHJ1biBjb25maWd1cmF0aW9uIGlmIG5vIGFjdGlvbnMgaW4gdGhlIHJlcXVlc3RcbiAgICAgICAgaWYgKCFyZXF1ZXN0LmFjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbmZpZ3VyYXRpb25SZXF1ZXN0ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZW5lcmF0ZVJlcXVlc3QoZmFsc2UpO1xuICAgICAgICByZXF1ZXN0LmFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgICAgIGNvbmZpZ3VyYXRpb25SZXF1ZXN0ID0gdGhpcy5leGVjdXRlQWN0aW9uU2NyaXB0KGNvbmZpZ3VyYXRpb25SZXF1ZXN0LCBhY3Rpb24pID8/IGNvbmZpZ3VyYXRpb25SZXF1ZXN0O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25maWd1cmF0aW9uUmVxdWVzdCA9IENvbmZpZ3VyYXRpb25UcmFuc2xhdG9yVXRpbHMubGlnaHRlbkNvbmZpZ3VyYXRpb25SZXF1ZXN0KGNvbmZpZ3VyYXRpb25SZXF1ZXN0KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5jb25maWd1cmVSZXF1ZXN0JChjb25maWd1cmF0aW9uUmVxdWVzdCk7XG4gICAgICB9KSxcbiAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgIC8vIFJ1biBzZWxlY3RvcnMgYW5kIGFwcGx5IHRoZW0gdG8gdGhlIHN0YXRlXG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25TdGF0ZSA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2Uuc3RhdGVTbmFwc2hvdDtcbiAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uU3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4geyBzdGF0ZUlkOiAnJywgc2VsZWN0b3JzOiB7fSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucnVuU3RhdGVsZXNzU2VsZWN0b3JzKHJlcXVlc3QsIGNvbmZpZ3VyYXRpb25TdGF0ZSk7XG4gICAgICB9KSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmV4ZWN1dGlvbkluUHJvZ3Jlc3MkLm5leHQoZmFsc2UpKSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uU3RhdGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLnByZXZpb3VzU3RhdGVTbmFwc2hvdDtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25TdGF0ZSkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdG9yc1Jlc3VsdCA9IHRoaXMucnVuU3RhdGVsZXNzU2VsZWN0b3JzKHJlcXVlc3QsIGNvbmZpZ3VyYXRpb25TdGF0ZSk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RvcnNSZXNwb25zZShzZWxlY3RvcnNSZXN1bHQuc2VsZWN0b3JzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4ZWN1dGlvbkluUHJvZ3Jlc3MkLm5leHQoZmFsc2UpO1xuXG4gICAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UudWlEZWZpbml0aW9uUHJvcGVydGllcy5zdXBwcmVzc1RvYXN0TWVzc2FnZXMpIHtcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5hZGQoeyBzZXZlcml0eTogVG9hc3RUeXBlLmVycm9yLCBzdW1tYXJ5OiBTdHJpbmcoZXJyb3IpIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEJ1ZmZlcmVkUmVxdWVzdCQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVmdWxSZXF1ZXN0U3RyZWFtJC5waXBlKFxuICAgICAgYnVmZmVyKHRoaXMuc3RhdGVmdWxSZXF1ZXN0U3RyZWFtJC5waXBlKGRlYm91bmNlVGltZSh0aGlzLkVYRUNVVElPTl9CVUZGRVJfVElNRSkpKSxcbiAgICAgIHN3aXRjaE1hcChyZXF1ZXN0cyA9PiB7XG4gICAgICAgIGlmICghdGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQgfHwgIXRoaXMuc3RhdGVJZCkge1xuICAgICAgICAgIHRocm93ICdTdGF0ZWZ1bCBzZXNzaW9uIGlzIG5vdCBpbml0aWFsaXplZCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtZXJnZSBidWZmZXJlZCByZXF1ZXN0c1xuICAgICAgICBjb25zdCByZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPID0ge1xuICAgICAgICAgIGFjdGlvbnM6IHJlcXVlc3RzLmZsYXRNYXAoKHsgYWN0aW9ucyB9KSA9PiBhY3Rpb25zKS5maWx0ZXIoaXNEZWZpbmVkKSxcbiAgICAgICAgICBzZWxlY3RvcnM6IHJlcXVlc3RzXG4gICAgICAgICAgICAubWFwKCh7IHNlbGVjdG9ycyB9KSA9PiBzZWxlY3RvcnMpXG4gICAgICAgICAgICAuZmlsdGVyKGlzRGVmaW5lZClcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgc2VsZWN0b3JzTWFwKSA9PiBPYmplY3QuYXNzaWduKGFjYywgc2VsZWN0b3JzTWFwKSwge30pLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZXhlY3V0aW9uSW5Qcm9ncmVzcyQubmV4dCh0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxvd1N0YXRlQXBpU2VydmljZS5leGVjdXRlQ29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCwgdGhpcy5zdGF0ZUlkLCByZXF1ZXN0KTtcbiAgICAgIH0pLFxuICAgICAgdGFwKCh7IHN0YXRlSWQgfSkgPT4gKHRoaXMuc3RhdGVJZCA9IHN0YXRlSWQpKSxcbiAgICAgIHNoYXJlKCksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5leGVjdXRpb25JblByb2dyZXNzJC5uZXh0KGZhbHNlKSksXG4gICAgICBjYXRjaEVycm9yKGUgPT4ge1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbkluUHJvZ3Jlc3MkLm5leHQoZmFsc2UpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTdGF0ZWZ1bCQocmVxdWVzdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTyk6IE9ic2VydmFibGU8Rmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0aW9uSW5Qcm9ncmVzcyQucGlwZShcbiAgICAgIGZpbHRlcihpblByb2dyZXNzID0+ICFpblByb2dyZXNzKSxcbiAgICAgIHRha2UoMSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgLy8gbWFrZSBzdXJlIHN0cmVhbSBzd2l0Y2hlcyB0byBzdGF0ZWZ1bEV4ZWN1dGlvblJlcXVlc3QkIGJlZm9yZSBwdXNoaW5nIGFuIGV4ZWN1dGlvbiByZXF1ZXN0XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgIHRoaXMuc3RhdGVmdWxFeGVjdXRpb25SZXF1ZXN0JCxcbiAgICAgICAgICBvZih1bmRlZmluZWQpLnBpcGUodGFwKCgpID0+IHRoaXMuc3RhdGVmdWxSZXF1ZXN0U3RyZWFtJC5uZXh0KHJlcXVlc3QpKSksXG4gICAgICAgIF0pLFxuICAgICAgKSxcbiAgICAgIG1hcCgoW3Jlc3BvbnNlXSkgPT4gcmVzcG9uc2UpLFxuICAgICAgdGFrZSgxKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlQWN0aW9uU2NyaXB0KHJlcXVlc3Q6IENvbmZpZ3VyYXRpb25SZXF1ZXN0LCBwcm9jZXNzb3I6IEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8pOiBDb25maWd1cmF0aW9uUmVxdWVzdCB7XG4gICAgY29uc3QgeyBhY3Rpb25zIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZS5ydW50aW1lQ29udGV4dD8udWlEZWZpbml0aW9uQ29udGFpbmVyID8/IHt9O1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25Qcm9jZXNzb3IgPSBhY3Rpb25zPy5maW5kKGFjdGlvbiA9PiBhY3Rpb24uYXBpTmFtZSA9PT0gcHJvY2Vzc29yLmFwaU5hbWUpO1xuXG4gICAgaWYgKCFjb25maWd1cmF0aW9uUHJvY2Vzc29yPy5zY3JpcHQpIHtcbiAgICAgIHRocm93IGBDb25maWd1cmF0aW9uUHJvY2Vzc29yICR7cHJvY2Vzc29yLmFwaU5hbWV9IG5vdCBmb3VuZGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVByb2Nlc3NvclNjcmlwdChyZXF1ZXN0LCBjb25maWd1cmF0aW9uUHJvY2Vzc29yLCBwcm9jZXNzb3IuaW5wdXREYXRhKSBhcyBDb25maWd1cmF0aW9uUmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVNlbGVjdG9yU2NyaXB0KHJlcXVlc3Q6IENvbmZpZ3VyZVByaWNlLCBwcm9jZXNzb3I6IEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8pOiB1bmtub3duIHtcbiAgICBjb25zdCB7IHNlbGVjdG9ycyB9ID0gdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ/LnVpRGVmaW5pdGlvbkNvbnRhaW5lciA/PyB7fTtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uUHJvY2Vzc29yID0gc2VsZWN0b3JzPy5maW5kKHNlbGVjdG9yID0+IHNlbGVjdG9yLmFwaU5hbWUgPT09IHByb2Nlc3Nvci5hcGlOYW1lKTtcblxuICAgIGlmICghY29uZmlndXJhdGlvblByb2Nlc3Nvcj8uc2NyaXB0KSB7XG4gICAgICB0aHJvdyBgQ29uZmlndXJhdGlvblByb2Nlc3NvciAke3Byb2Nlc3Nvci5hcGlOYW1lfSBub3QgZm91bmRgO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVQcm9jZXNzb3JTY3JpcHQocmVxdWVzdCwgY29uZmlndXJhdGlvblByb2Nlc3NvciwgcHJvY2Vzc29yLmlucHV0RGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVQcm9jZXNzb3JTY3JpcHQoXG4gICAgcmVxdWVzdDogQ29uZmlndXJhdGlvblJlcXVlc3QgfCBDb25maWd1cmVQcmljZSxcbiAgICBjb25maWd1cmF0aW9uUHJvY2Vzc29yOiBDb25maWd1cmF0aW9uUHJvY2Vzc29yLFxuICAgIGlucHV0RGF0YTogdW5rbm93bixcbiAgKTogdW5rbm93biB7XG4gICAgbGV0IGZ1bmN0aW9uVG9FeGVjdXRlID0gdGhpcy5leGVjdXRlZEZ1bmN0aW9uc1tjb25maWd1cmF0aW9uUHJvY2Vzc29yLmFwaU5hbWVdO1xuICAgIGlmICghZnVuY3Rpb25Ub0V4ZWN1dGUpIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGAke2NvbmZpZ3VyYXRpb25Qcm9jZXNzb3Iuc2NyaXB0fVxcbnJldHVybiB0cmFuc2Zvcm07YDtcbiAgICAgIGNvbnN0IHNvdXJjZU1hcCA9IGBcXG4vLyMgc291cmNlVVJMPSR7Y29uZmlndXJhdGlvblByb2Nlc3Nvci5hcGlOYW1lfS5qc2A7XG4gICAgICBmdW5jdGlvblRvRXhlY3V0ZSA9IG5ldyBGdW5jdGlvbihzY3JpcHQgKyBzb3VyY2VNYXApKCkgYXMgQ29uZmlndXJhdGlvblByb2Nlc3NvclNjcmlwdEZuO1xuICAgICAgdGhpcy5leGVjdXRlZEZ1bmN0aW9uc1tjb25maWd1cmF0aW9uUHJvY2Vzc29yLmFwaU5hbWVdID0gZnVuY3Rpb25Ub0V4ZWN1dGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9FeGVjdXRlKHtcbiAgICAgIHJlcXVlc3QsXG4gICAgICBpbnB1dERhdGEsXG4gICAgICBmbG93U3RvcmU6IHRoaXMuZmxvd1N0YXRlU2VydmljZS5nZXRGbG93U3RvcmUoKSxcbiAgICAgIGNvbmZpZ3VyYXRpb25TdG9yZTogdGhpcy5jb25maWd1cmF0aW9uU3RvcmUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJ1blN0YXRlbGVzc1NlbGVjdG9ycyhcbiAgICByZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPLFxuICAgIGNvbmZpZ3VyYXRpb25TdGF0ZTogQ29uZmlndXJlUHJpY2UsXG4gICk6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdCB7XG4gICAgcmV0dXJuIEVudGl0eVV0aWwuZW50cmllcyhyZXF1ZXN0LnNlbGVjdG9ycyA/PyB7fSkucmVkdWNlKFxuICAgICAgKHJlc3VsdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0LCBba2V5LCBzZWxlY3Rvcl0pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXN1bHQuc2VsZWN0b3JzW2tleV0gPSB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgcmVzdWx0OiB0aGlzLmV4ZWN1dGVTZWxlY3RvclNjcmlwdChjb25maWd1cmF0aW9uU3RhdGUsIHNlbGVjdG9yKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICByZXN1bHQuc2VsZWN0b3JzW2tleV0gPSB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZTogU3RyaW5nKGUpLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICAgIHsgc3RhdGVJZDogJycsIHNlbGVjdG9yczoge30gfSxcbiAgICApO1xuICB9XG59XG4iXX0=
377
+ }], ctorParameters: function () { return [{ type: i1.ConfigurationRuntimeService }, { type: i2.ConfigurationService }, { type: i3.SalesTransactionService }, { type: i4.ToastService }, { type: i3.FlowStateService }, { type: i3.FlowInfoService }, { type: i5.FlowConfigurationService }, { type: i6.FlowStateApiService }, { type: i7.SalesTransactionApiService }]; } });
378
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS9tb2R1bGVzL2NvbmZpZ3VyYXRpb24vc2VydmljZXMvY29uZmlndXJhdGlvbi1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLDBCQUEwQixFQUFrQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUlMLDRCQUE0QixFQUU1QixVQUFVLEVBTVYsU0FBUyxFQUNULElBQUksR0FDTCxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFjLE1BQU0sUUFBUSxDQUFDO0FBQ3ZELE9BQU8sRUFDTCxlQUFlLEVBQ2YsTUFBTSxFQUNOLFVBQVUsRUFDVixhQUFhLEVBQ2IsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sUUFBUSxFQUNSLEdBQUcsRUFFSCxFQUFFLEVBQ0YsS0FBSyxFQUNMLFdBQVcsRUFDWCxPQUFPLEVBQ1AsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxFQUNILFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUvRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RSxPQUFPLEVB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T0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUN2RCxDQUFDLE1BQWdDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRTtZQUNwRCxJQUFJO2dCQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUc7b0JBQ3RCLE9BQU8sRUFBRSxJQUFJO29CQUNiLE1BQU0sRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDO2lCQUNqRSxDQUFDO2FBQ0g7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHO29CQUN0QixPQUFPLEVBQUUsS0FBSztvQkFDZCxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztpQkFDeEIsQ0FBQzthQUNIO1lBRUQsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxFQUNELEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQy9CLENBQUM7SUFDSixDQUFDOztzSEF0ZVUseUJBQXlCOzBIQUF6Qix5QkFBeUI7MkZBQXpCLHlCQUF5QjtrQkFEckMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZsb3dTdGF0ZUFwaVNlcnZpY2UgfSBmcm9tICdAdmVsb2NlYXBwcy9hcGknO1xuaW1wb3J0IHsgU2FsZXNUcmFuc2FjdGlvbkFwaVNlcnZpY2UsIFNhbGVzVHJhbnNhY3Rpb25VcHNlcnRSZXNwb25zZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaS92Mic7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UsIFRvYXN0VHlwZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhdGlvblByb2Nlc3NvcixcbiAgQ29uZmlndXJhdGlvblByb2Nlc3NvclNjcmlwdEZuLFxuICBDb25maWd1cmF0aW9uUmVxdWVzdCxcbiAgQ29uZmlndXJhdGlvblRyYW5zbGF0b3JVdGlscyxcbiAgQ29uZmlndXJlUHJpY2UsXG4gIEVudGl0eVV0aWwsXG4gIEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8sXG4gIEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3QsXG4gIEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8sXG4gIEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdCxcbiAgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZSxcbiAgaXNEZWZpbmVkLFxuICBVVUlELFxufSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlJztcbmltcG9ydCB7IGFzc2lnbiwgY2xvbmVEZWVwLCBEaWN0aW9uYXJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgYnVmZmVyLFxuICBjYXRjaEVycm9yLFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZpbmFsaXplLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBzaGFyZSxcbiAgc2hhcmVSZXBsYXksXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG4gIHRocm93RXJyb3IsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmxvd0luZm9TZXJ2aWNlLCBGbG93U3RhdGVTZXJ2aWNlLCBTYWxlc1RyYW5zYWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEZsb3dTdGF0ZVN1YnNjcmlwdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9mbG93LXN0YXRlLnR5cGVzJztcbmltcG9ydCB7IEZsb3dDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2Zsb3ctY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24tcnVudGltZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuXG50eXBlIFN0YXRlU3Vic2NyaXB0aW9uID0ge1xuICByZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPO1xuICBkYXRhJDogQmVoYXZpb3JTdWJqZWN0PHVua25vd24+O1xufTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25TdGF0ZVNlcnZpY2Uge1xuICBwdWJsaWMgaXNJbml0aWFsaXplZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgY2FuY2VsZWRDb25maWd1cmF0aW9uJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBOT1RfSU5JVElBTElaRUQgPSBTeW1ib2woKTtcbiAgcHJpdmF0ZSByZWFkb25seSBFWEVDVVRJT05fQlVGRkVSX1RJTUUgPSAxMDA7XG5cbiAgcHJpdmF0ZSBleGVjdXRlZEZ1bmN0aW9uczogRGljdGlvbmFyeTxDb25maWd1cmF0aW9uUHJvY2Vzc29yU2NyaXB0Rm4+ID0ge307XG4gIHByaXZhdGUgc3RhdGVJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgb3duZXJJZCA9ICcnO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFJlY29yZDxzdHJpbmcsIFN0YXRlU3Vic2NyaXB0aW9uPiA9IHt9O1xuICBwcml2YXRlIGNvbmZpZ3VyYXRpb25TdG9yZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBwcml2YXRlIGV4ZWN1dGlvbkluUHJvZ3Jlc3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByaXZhdGUgc3RhdGVmdWxSZXF1ZXN0U3RyZWFtJCA9IG5ldyBTdWJqZWN0PEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8+KCk7XG4gIHByaXZhdGUgc3RhdGVmdWxFeGVjdXRpb25SZXF1ZXN0JDogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+O1xuICBwcml2YXRlIHN0YXRlbGVzc0V4ZWN1dGlvblJlcXVlc3QkOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZTogQ29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIC8vIHByaXZhdGUgcXVvdGVEcmFmdFNlcnZpY2U6IFF1b3RlRHJhZnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FsZXNUcmFuc2FjdGlvblNlcnZpY2U6IFNhbGVzVHJhbnNhY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93U3RhdGVTZXJ2aWNlOiBGbG93U3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd0luZm9TZXJ2aWNlOiBGbG93SW5mb1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93Q29uZmlndXJhdGlvblNlcnZpY2U6IEZsb3dDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dTdGF0ZUFwaVNlcnZpY2U6IEZsb3dTdGF0ZUFwaVNlcnZpY2UsXG4gICAgLy8gcHJpdmF0ZSBxdW90ZUFwaVNlcnZpY2U6IFF1b3RlQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHNhbGVzVHJhbnNhY3Rpb25BcGlTZXJ2aWNlOiBTYWxlc1RyYW5zYWN0aW9uQXBpU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5zdGF0ZWZ1bEV4ZWN1dGlvblJlcXVlc3QkID0gdGhpcy5pbml0QnVmZmVyZWRSZXF1ZXN0JCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0V4ZWN1dGlvbkluUHJvZ3Jlc3MkKCkge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvbkluUHJvZ3Jlc3MkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGluaXQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGxldCByZXF1ZXN0JDtcbiAgICBpZiAodGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQgJiYgdGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmVxdWVzdCQgPSB0aGlzLmluaXRTdGF0ZWZ1bCQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdCQgPSBvZih1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0JC5waXBlKFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5jYW5jZWxlZENvbmZpZ3VyYXRpb24kID0gbmV3IFN1YmplY3QoKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2xlYW51cCgpOiB2b2lkIHtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuc3Vic2NyaXB0aW9ucykuZm9yRWFjaCgoeyBkYXRhJCB9KSA9PiBkYXRhJC5jb21wbGV0ZSgpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSB7fTtcblxuICAgIGlmICh0aGlzLnN0YXRlSWQpIHtcbiAgICAgIHRoaXMuY2FuY2VsQ29uZmlndXJhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlndXJhdGlvblN0b3JlID0ge307XG4gICAgdGhpcy5leGVjdXRlZEZ1bmN0aW9ucyA9IHt9O1xuICAgIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UucmVzZXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBleGVjdXRlJChleGVjOiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0KTogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHRbJ3NlbGVjdG9ycyddPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZXhlY1RvUmVxdWVzdChleGVjKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVSZXF1ZXN0JChyZXF1ZXN0KS5waXBlKFxuICAgICAgbWFwKHJlc3VsdCA9PiB7XG4gICAgICAgIC8vIEtlZXAgb25seSByZXF1ZXN0ZWQgcmVzdWx0c1xuICAgICAgICBjb25zdCBhY3R1YWxTZWxlY3RvcnMgPSBPYmplY3QuZW50cmllcyhyZXN1bHQuc2VsZWN0b3JzKS5yZWR1Y2UoXG4gICAgICAgICAgKHRydW5rOiBSZWNvcmQ8c3RyaW5nLCBGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPiwgW3JlcXVlc3RJZCwgcmVzdWx0XSkgPT4ge1xuICAgICAgICAgICAgaWYgKGV4ZWMuc2VsZWN0b3JzPy5bcmVxdWVzdElkXSkge1xuICAgICAgICAgICAgICB0cnVua1tyZXF1ZXN0SWRdID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydW5rO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30sXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGFjdHVhbFNlbGVjdG9ycztcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZGlzcGF0Y2gkKGFjdGlvbk5hbWU6IHN0cmluZywgaW5wdXREYXRhOiB1bmtub3duID0ge30pOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IGV4ZWM6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3QgPSB7XG4gICAgICBhY3Rpb25zOiBbeyBuYW1lOiBhY3Rpb25OYW1lLCBpbnB1dERhdGEgfV0sXG4gICAgfTtcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5leGVjVG9SZXF1ZXN0KGV4ZWMpO1xuXG4gICAgY29uc3QgZXhlY3V0aW9uUmVxdWVzdCQgPSB0aGlzLmV4ZWN1dGVSZXF1ZXN0JChyZXF1ZXN0KTtcblxuICAgIGlmICh0aGlzLmlzU3RhdGVmdWxDb25maWd1cmF0aW9uKSB7XG4gICAgICByZXR1cm4gZXhlY3V0aW9uUmVxdWVzdCQ7XG4gICAgfVxuXG4gICAgLy8gcHJldmVudCBwYXJhbGxlbCBjb25maWd1cmF0aW9uIHJlcXVlc3RzIGluIHN0YXRlbGVzcyBtb2RlXG4gICAgaWYgKCF0aGlzLnN0YXRlbGVzc0V4ZWN1dGlvblJlcXVlc3QkKSB7XG4gICAgICB0aGlzLnN0YXRlbGVzc0V4ZWN1dGlvblJlcXVlc3QkID0gZXhlY3V0aW9uUmVxdWVzdCQucGlwZShcbiAgICAgICAgc2hhcmVSZXBsYXkoKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gKHRoaXMuc3RhdGVsZXNzRXhlY3V0aW9uUmVxdWVzdCQgPSBudWxsKSksXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGF0ZWxlc3NFeGVjdXRpb25SZXF1ZXN0JDtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3QkPFJlc3BvbnNlID0gdW5rbm93bj4oXG4gICAgc2VsZWN0b3JOYW1lOiBzdHJpbmcsXG4gICAgaW5wdXREYXRhOiB1bmtub3duID0ge30sXG4gICk6IE9ic2VydmFibGU8Rmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTxSZXNwb25zZT4+IHtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSBVVUlELlVVSUQoKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5leGVjVG9SZXF1ZXN0KHtcbiAgICAgIHNlbGVjdG9yczoge1xuICAgICAgICBbcmVxdWVzdElkXToge1xuICAgICAgICAgIG5hbWU6IHNlbGVjdG9yTmFtZSxcbiAgICAgICAgICBpbnB1dERhdGEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVJlcXVlc3QkKHJlcXVlc3QpLnBpcGUoXG4gICAgICBtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2Uuc2VsZWN0b3JzW3JlcXVlc3RJZF0gYXMgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTxSZXNwb25zZT4pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlJDxSZXNwb25zZSA9IHVua25vd24+KFxuICAgIHNlbGVjdG9yTmFtZTogc3RyaW5nLFxuICAgIGlucHV0RGF0YTogdW5rbm93biA9IHt9LFxuICAgIG9wdGlvbnM/OiBGbG93U3RhdGVTdWJzY3JpcHRpb25PcHRpb25zLFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+PiB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gVVVJRC5VVUlEKCk7XG5cbiAgICBsZXQgc3Vic2NyaXB0aW9uID0gdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF07XG4gICAgaWYgKCFzdWJzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmV4ZWNUb1JlcXVlc3Qoe1xuICAgICAgICBzZWxlY3RvcnM6IHtcbiAgICAgICAgICBbcmVxdWVzdElkXToge1xuICAgICAgICAgICAgbmFtZTogc2VsZWN0b3JOYW1lLFxuICAgICAgICAgICAgaW5wdXREYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgc3Vic2NyaXB0aW9uID0ge1xuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBkYXRhJDogbmV3IEJlaGF2aW9yU3ViamVjdDx1bmtub3duPih0aGlzLk5PVF9JTklUSUFMSVpFRCksXG4gICAgICB9O1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0gPSBzdWJzY3JpcHRpb247XG5cbiAgICAgIGlmICghb3B0aW9ucz8uY29sZCkge1xuICAgICAgICB0aGlzLmV4ZWN1dGVSZXF1ZXN0JChyZXF1ZXN0KS5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic2NyaXB0aW9uLmRhdGEkLnBpcGUoXG4gICAgICBmaWx0ZXIoZGF0YSA9PiBkYXRhICE9IHRoaXMuTk9UX0lOSVRJQUxJWkVEKSxcbiAgICAgIG1hcChkYXRhID0+IGRhdGEgYXMgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTxSZXNwb25zZT4pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbnNbcmVxdWVzdElkXT8uZGF0YSQub2JzZXJ2ZWQpIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF07XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMuY2FuY2VsZWRDb25maWd1cmF0aW9uJCksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlQ29uZmlndXJhdGlvbigpOiBPYnNlcnZhYmxlPFNhbGVzVHJhbnNhY3Rpb25VcHNlcnRSZXNwb25zZT4ge1xuICAgIGlmICh0aGlzLmlzU3RhdGVmdWxDb25maWd1cmF0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLnNhdmVDb25maWd1cmF0aW9uKHRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkID8/ICcnLCB0aGlzLnN0YXRlSWQgPz8gJycpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChyID0+IHRoaXMuZmxvd1N0YXRlU2VydmljZS5leGVjdXRlUmVxdWVzdCQoe30sIHRydWUpLnBpcGUobWFwKCgpID0+IHIpKSksXG4gICAgICAgIG1hcChyID0+ICh7IGlkOiByLnF1b3RlSWQgfSkpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc2FsZXNUcmFuc2FjdGlvblNlcnZpY2Uuc3RhdGU7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgcmV0dXJuIG9mKHsgaWQ6ICcnIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc3RhbmRhbG9uZSB9ID0gdGhpcy5mbG93SW5mb1NlcnZpY2UuZmxvdy5wcm9wZXJ0aWVzO1xuICAgIGlmIChzdGFuZGFsb25lKSB7XG4gICAgICByZXR1cm4gdGhpcy5zYWxlc1RyYW5zYWN0aW9uQXBpU2VydmljZS51cHNlcnQoc3RhdGUpO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRTbmFwc2hvdCgpO1xuICAgIC8vIGlmICghbGluZUl0ZW0pIHtcbiAgICAvLyAgIHJldHVybiBvZih7IGlkOiAnJyB9KTtcbiAgICAvLyB9XG5cbiAgICAvLyBjb25zdCBpc05ld0xpbmVJdGVtID0gcXVvdGVEcmFmdC5jdXJyZW50U3RhdGUuZXZlcnkobGkgPT4gbGkuaWQgIT09IGxpbmVJdGVtLmlkKTtcblxuICAgIC8vIGxldCBjdXJyZW50U3RhdGU6IExpbmVJdGVtW107XG4gICAgLy8gaWYgKGlzTmV3TGluZUl0ZW0pIHtcbiAgICAvLyAgIGN1cnJlbnRTdGF0ZSA9IFsuLi5xdW90ZURyYWZ0LmN1cnJlbnRTdGF0ZSwgbGluZUl0ZW1dO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICBjdXJyZW50U3RhdGUgPSBxdW90ZURyYWZ0LmN1cnJlbnRTdGF0ZS5tYXAobGkgPT4gKGxpLmlkID09PSBsaW5lSXRlbS5pZCA/IGxpbmVJdGVtIDogbGkpKTtcbiAgICAvLyB9XG5cbiAgICAvLyBjb25zdCBhc3NldCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0QXNzZXQoKTtcbiAgICAvLyBjb25zdCBpbml0aWFsU3RhdGUgPSBbLi4uKHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdD8uaW5pdGlhbFN0YXRlID8/IFtdKV07XG4gICAgLy8gaWYgKGFzc2V0KSB7XG4gICAgLy8gICBpZiAoIWluaXRpYWxTdGF0ZS5zb21lKGxpID0+IGxpLmlkID09PSBhc3NldC5pZCkpIHtcbiAgICAvLyAgICAgaW5pdGlhbFN0YXRlLnB1c2goYXNzZXQpO1xuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIC8vIFRPRE86IGFkanVzdCB0aGUgbG9naWMgZm9yIFNob3BwaW5nQ2FydFxuICAgIGNvbnN0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSB9O1xuICAgIHJldHVybiB0aGlzLmZsb3dDb25maWd1cmF0aW9uU2VydmljZS5jYWxjdWxhdGUkKG5ld1N0YXRlKS5waXBlKG1hcCgoKSA9PiAoeyBpZDogJycgfSkpKTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWxDb25maWd1cmF0aW9uKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkJC52YWx1ZSkge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgdGhpcy5jYW5jZWxlZENvbmZpZ3VyYXRpb24kLm5leHQoKTtcbiAgICB0aGlzLmNhbmNlbGVkQ29uZmlndXJhdGlvbiQuY29tcGxldGUoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSB7fTtcblxuICAgIHRoaXMuaXNJbml0aWFsaXplZCQubmV4dChmYWxzZSk7XG4gICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQkLnZhbHVlIHx8ICF0aGlzLmlzU3RhdGVmdWxDb25maWd1cmF0aW9uKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmxvd1N0YXRlQXBpU2VydmljZS5jYW5jZWxDb25maWd1cmF0aW9uKHRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkID8/ICcnLCB0aGlzLnN0YXRlSWQgPz8gJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNTdGF0ZWZ1bENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd0luZm9TZXJ2aWNlLmZsb3c/LnByb3BlcnRpZXMuc3RhdGVmdWwgPz8gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGluaXRTdGF0ZWZ1bCQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgdGhpcy5vd25lcklkID0gdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ/LnVpRGVmaW5pdGlvbkNvbnRhaW5lcj8uaWQgPz8gJyc7XG4gICAgY29uc3QgbGluZUl0ZW1JZCA9IHRoaXMuY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLnJ1bnRpbWVDb250ZXh0Py5wcm9wZXJ0aWVzPy5saW5lSXRlbUlkO1xuICAgIGlmICghdGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQpIHtcbiAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLnJ1bnRpbWVDb250ZXh0Py51aURlZmluaXRpb25Db250YWluZXI7XG5cbiAgICBjb25zdCBsaW5lSXRlbSA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuZ2VuZXJhdGVMaW5lSXRlbSgpO1xuXG4gICAgbGV0IHJlcXVlc3QkOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD47XG5cbiAgICBpZiAoIWxpbmVJdGVtSWQpIHtcbiAgICAgIHJlcXVlc3QkID0gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLm5ld0NvbmZpZ3VyYXRpb24odGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQsIHtcbiAgICAgICAgbGluZUl0ZW0sXG4gICAgICAgIGFjdGlvbnNPdmVycmlkZTogY29udGFpbmVyPy5hY3Rpb25zPy5tYXAocHJvY2Vzc29yID0+ICh7IC4uLnByb2Nlc3Nvciwgb3duZXJJZDogdGhpcy5vd25lcklkIH0pKSxcbiAgICAgICAgc2VsZWN0b3JzT3ZlcnJpZGU6IGNvbnRhaW5lcj8uc2VsZWN0b3JzPy5tYXAocHJvY2Vzc29yID0+ICh7IC4uLnByb2Nlc3Nvciwgb3duZXJJZDogdGhpcy5vd25lcklkIH0pKSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0JCA9IHRoaXMuZmxvd1N0YXRlQXBpU2VydmljZS5zdGFydENvbmZpZ3VyYXRpb24odGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQsIHtcbiAgICAgICAgbGluZUl0ZW1JZCxcbiAgICAgICAgYWN0aW9uc092ZXJyaWRlOiBjb250YWluZXI/LmFjdGlvbnM/Lm1hcChwcm9jZXNzb3IgPT4gKHsgLi4ucHJvY2Vzc29yLCBvd25lcklkOiB0aGlzLm93bmVySWQgfSkpLFxuICAgICAgICBzZWxlY3RvcnNPdmVycmlkZTogY29udGFpbmVyPy5zZWxlY3RvcnM/Lm1hcChwcm9jZXNzb3IgPT4gKHsgLi4ucHJvY2Vzc29yLCBvd25lcklkOiB0aGlzLm93bmVySWQgfSkpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3QkLnBpcGUoXG4gICAgICBtYXAociA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGVJZCA9IHIuc3RhdGVJZDtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWNUb1JlcXVlc3QoZXhlYzogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdCk6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8ge1xuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb25zOiBleGVjLmFjdGlvbnM/Lm1hcChhY3Rpb24gPT4gKHtcbiAgICAgICAgYXBpTmFtZTogYWN0aW9uLm5hbWUsXG4gICAgICAgIG93bmVySWQ6IHRoaXMub3duZXJJZCxcbiAgICAgICAgaW5wdXREYXRhOiBhY3Rpb24uaW5wdXREYXRhID8/IHt9LFxuICAgICAgfSkpLFxuICAgICAgc2VsZWN0b3JzOlxuICAgICAgICBleGVjLnNlbGVjdG9ycyAmJlxuICAgICAgICBPYmplY3QuZW50cmllcyhleGVjLnNlbGVjdG9ycykucmVkdWNlKFxuICAgICAgICAgICh0cnVuazogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlRXhlY3V0YWJsZURUTz4sIFtrZXksIHNlbGVjdG9yXSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnRydW5rLFxuICAgICAgICAgICAgW2tleV06IHsgYXBpTmFtZTogc2VsZWN0b3IubmFtZSwgb3duZXJJZDogdGhpcy5vd25lcklkLCBpbnB1dERhdGE6IHNlbGVjdG9yLmlucHV0RGF0YSA/PyB7fSB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHt9LFxuICAgICAgICApLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdG9yc1Jlc3BvbnNlKHNlbGVjdG9yczogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTx1bmtub3duPj4pOiB2b2lkIHtcbiAgICBPYmplY3QuZW50cmllcyhzZWxlY3RvcnMpLmZvckVhY2goKFtyZXF1ZXN0SWQsIHNlbGVjdG9yUmVzdWx0XSkgPT4ge1xuICAgICAgaWYgKCFzZWxlY3RvclJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiBUb2FzdFR5cGUuZXJyb3IsIHN1bW1hcnk6IHNlbGVjdG9yUmVzdWx0LmVycm9yTWVzc2FnZSB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uJCA9IHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdPy5kYXRhJDtcbiAgICAgIGlmIChzdWJzY3JpcHRpb24kKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiQubmV4dChzZWxlY3RvclJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVSZXF1ZXN0JChcbiAgICByZXE6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8sXG4gICAgZm9yY2VTdWJzY3JpcHRpb25zPzogYm9vbGVhbixcbiAgKTogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBmdWxsUmVxdWVzdCA9IGNsb25lRGVlcChyZXEpO1xuICAgIGlmIChmdWxsUmVxdWVzdC5hY3Rpb25zPy5sZW5ndGggfHwgZm9yY2VTdWJzY3JpcHRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuc3Vic2NyaXB0aW9ucykpIHtcbiAgICAgICAgZnVsbFJlcXVlc3Quc2VsZWN0b3JzID0gYXNzaWduKGZ1bGxSZXF1ZXN0LnNlbGVjdG9ycywgc3Vic2NyaXB0aW9uLnJlcXVlc3Quc2VsZWN0b3JzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZXhlY3V0aW9uJDtcblxuICAgIGlmICh0aGlzLmlzU3RhdGVmdWxDb25maWd1cmF0aW9uKSB7XG4gICAgICBleGVjdXRpb24kID0gdGhpcy5leGVjdXRlU3RhdGVmdWwkKGZ1bGxSZXF1ZXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhlY3V0aW9uJCA9IHRoaXMuZXhlY3V0ZVN0YXRlbGVzcyQoZnVsbFJlcXVlc3QpO1xuICAgIH1cblxuICAgIHJldHVybiBleGVjdXRpb24kLnBpcGUodGFwKHJlc3VsdCA9PiB0aGlzLmhhbmRsZVNlbGVjdG9yc1Jlc3BvbnNlKHJlc3VsdC5zZWxlY3RvcnMpKSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTdGF0ZWxlc3MkKHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8pOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIHRoaXMuZXhlY3V0aW9uSW5Qcm9ncmVzcyQubmV4dCh0cnVlKTtcblxuICAgIHJldHVybiBvZih1bmRlZmluZWQpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAvLyBBcHBseSBhY3Rpb25zIGFuZCBleGVjdXRlIGNvbmZpZ3VyYXRpb24vcHJpY2UgY2FsbFxuICAgICAgICAvLyBObyBuZWVkIHRvIHJ1biBjb25maWd1cmF0aW9uIGlmIG5vIGFjdGlvbnMgaW4gdGhlIHJlcXVlc3RcbiAgICAgICAgaWYgKCFyZXF1ZXN0LmFjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbmZpZ3VyYXRpb25SZXF1ZXN0ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZW5lcmF0ZVJlcXVlc3QoZmFsc2UpO1xuICAgICAgICByZXF1ZXN0LmFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgICAgIGNvbmZpZ3VyYXRpb25SZXF1ZXN0ID0gdGhpcy5leGVjdXRlQWN0aW9uU2NyaXB0KGNvbmZpZ3VyYXRpb25SZXF1ZXN0LCBhY3Rpb24pID8/IGNvbmZpZ3VyYXRpb25SZXF1ZXN0O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25maWd1cmF0aW9uUmVxdWVzdCA9IENvbmZpZ3VyYXRpb25UcmFuc2xhdG9yVXRpbHMubGlnaHRlbkNvbmZpZ3VyYXRpb25SZXF1ZXN0KGNvbmZpZ3VyYXRpb25SZXF1ZXN0KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5jb25maWd1cmVSZXF1ZXN0JChjb25maWd1cmF0aW9uUmVxdWVzdCk7XG4gICAgICB9KSxcbiAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgIC8vIFJ1biBzZWxlY3RvcnMgYW5kIGFwcGx5IHRoZW0gdG8gdGhlIHN0YXRlXG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25TdGF0ZSA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2Uuc3RhdGVTbmFwc2hvdDtcbiAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uU3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4geyBzdGF0ZUlkOiAnJywgc2VsZWN0b3JzOiB7fSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucnVuU3RhdGVsZXNzU2VsZWN0b3JzKHJlcXVlc3QsIGNvbmZpZ3VyYXRpb25TdGF0ZSk7XG4gICAgICB9KSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmV4ZWN1dGlvbkluUHJvZ3Jlc3MkLm5leHQoZmFsc2UpKSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uU3RhdGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLnByZXZpb3VzU3RhdGVTbmFwc2hvdDtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25TdGF0ZSkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdG9yc1Jlc3VsdCA9IHRoaXMucnVuU3RhdGVsZXNzU2VsZWN0b3JzKHJlcXVlc3QsIGNvbmZpZ3VyYXRpb25TdGF0ZSk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RvcnNSZXNwb25zZShzZWxlY3RvcnNSZXN1bHQuc2VsZWN0b3JzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4ZWN1dGlvbkluUHJvZ3Jlc3MkLm5leHQoZmFsc2UpO1xuXG4gICAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UudWlEZWZpbml0aW9uUHJvcGVydGllcy5zdXBwcmVzc1RvYXN0TWVzc2FnZXMpIHtcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5hZGQoeyBzZXZlcml0eTogVG9hc3RUeXBlLmVycm9yLCBzdW1tYXJ5OiBTdHJpbmcoZXJyb3IpIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEJ1ZmZlcmVkUmVxdWVzdCQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVmdWxSZXF1ZXN0U3RyZWFtJC5waXBlKFxuICAgICAgYnVmZmVyKHRoaXMuc3RhdGVmdWxSZXF1ZXN0U3RyZWFtJC5waXBlKGRlYm91bmNlVGltZSh0aGlzLkVYRUNVVElPTl9CVUZGRVJfVElNRSkpKSxcbiAgICAgIHN3aXRjaE1hcChyZXF1ZXN0cyA9PiB7XG4gICAgICAgIGlmICghdGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQgfHwgIXRoaXMuc3RhdGVJZCkge1xuICAgICAgICAgIHRocm93ICdTdGF0ZWZ1bCBzZXNzaW9uIGlzIG5vdCBpbml0aWFsaXplZCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtZXJnZSBidWZmZXJlZCByZXF1ZXN0c1xuICAgICAgICBjb25zdCByZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPID0ge1xuICAgICAgICAgIGFjdGlvbnM6IHJlcXVlc3RzLmZsYXRNYXAoKHsgYWN0aW9ucyB9KSA9PiBhY3Rpb25zKS5maWx0ZXIoaXNEZWZpbmVkKSxcbiAgICAgICAgICBzZWxlY3RvcnM6IHJlcXVlc3RzXG4gICAgICAgICAgICAubWFwKCh7IHNlbGVjdG9ycyB9KSA9PiBzZWxlY3RvcnMpXG4gICAgICAgICAgICAuZmlsdGVyKGlzRGVmaW5lZClcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgc2VsZWN0b3JzTWFwKSA9PiBPYmplY3QuYXNzaWduKGFjYywgc2VsZWN0b3JzTWFwKSwge30pLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZXhlY3V0aW9uSW5Qcm9ncmVzcyQubmV4dCh0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxvd1N0YXRlQXBpU2VydmljZS5leGVjdXRlQ29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCwgdGhpcy5zdGF0ZUlkLCByZXF1ZXN0KTtcbiAgICAgIH0pLFxuICAgICAgdGFwKCh7IHN0YXRlSWQgfSkgPT4gKHRoaXMuc3RhdGVJZCA9IHN0YXRlSWQpKSxcbiAgICAgIHNoYXJlKCksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5leGVjdXRpb25JblByb2dyZXNzJC5uZXh0KGZhbHNlKSksXG4gICAgICBjYXRjaEVycm9yKGUgPT4ge1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbkluUHJvZ3Jlc3MkLm5leHQoZmFsc2UpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTdGF0ZWZ1bCQocmVxdWVzdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTyk6IE9ic2VydmFibGU8Rmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0aW9uSW5Qcm9ncmVzcyQucGlwZShcbiAgICAgIGZpbHRlcihpblByb2dyZXNzID0+ICFpblByb2dyZXNzKSxcbiAgICAgIHRha2UoMSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgLy8gbWFrZSBzdXJlIHN0cmVhbSBzd2l0Y2hlcyB0byBzdGF0ZWZ1bEV4ZWN1dGlvblJlcXVlc3QkIGJlZm9yZSBwdXNoaW5nIGFuIGV4ZWN1dGlvbiByZXF1ZXN0XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgIHRoaXMuc3RhdGVmdWxFeGVjdXRpb25SZXF1ZXN0JCxcbiAgICAgICAgICBvZih1bmRlZmluZWQpLnBpcGUodGFwKCgpID0+IHRoaXMuc3RhdGVmdWxSZXF1ZXN0U3RyZWFtJC5uZXh0KHJlcXVlc3QpKSksXG4gICAgICAgIF0pLFxuICAgICAgKSxcbiAgICAgIG1hcCgoW3Jlc3BvbnNlXSkgPT4gcmVzcG9uc2UpLFxuICAgICAgdGFrZSgxKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlQWN0aW9uU2NyaXB0KHJlcXVlc3Q6IENvbmZpZ3VyYXRpb25SZXF1ZXN0LCBwcm9jZXNzb3I6IEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8pOiBDb25maWd1cmF0aW9uUmVxdWVzdCB7XG4gICAgY29uc3QgeyBhY3Rpb25zIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZS5ydW50aW1lQ29udGV4dD8udWlEZWZpbml0aW9uQ29udGFpbmVyID8/IHt9O1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25Qcm9jZXNzb3IgPSBhY3Rpb25zPy5maW5kKGFjdGlvbiA9PiBhY3Rpb24uYXBpTmFtZSA9PT0gcHJvY2Vzc29yLmFwaU5hbWUpO1xuXG4gICAgaWYgKCFjb25maWd1cmF0aW9uUHJvY2Vzc29yPy5zY3JpcHQpIHtcbiAgICAgIHRocm93IGBDb25maWd1cmF0aW9uUHJvY2Vzc29yICR7cHJvY2Vzc29yLmFwaU5hbWV9IG5vdCBmb3VuZGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVByb2Nlc3NvclNjcmlwdChyZXF1ZXN0LCBjb25maWd1cmF0aW9uUHJvY2Vzc29yLCBwcm9jZXNzb3IuaW5wdXREYXRhKSBhcyBDb25maWd1cmF0aW9uUmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVNlbGVjdG9yU2NyaXB0KHJlcXVlc3Q6IENvbmZpZ3VyZVByaWNlLCBwcm9jZXNzb3I6IEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8pOiB1bmtub3duIHtcbiAgICBjb25zdCB7IHNlbGVjdG9ycyB9ID0gdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ/LnVpRGVmaW5pdGlvbkNvbnRhaW5lciA/PyB7fTtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uUHJvY2Vzc29yID0gc2VsZWN0b3JzPy5maW5kKHNlbGVjdG9yID0+IHNlbGVjdG9yLmFwaU5hbWUgPT09IHByb2Nlc3Nvci5hcGlOYW1lKTtcblxuICAgIGlmICghY29uZmlndXJhdGlvblByb2Nlc3Nvcj8uc2NyaXB0KSB7XG4gICAgICB0aHJvdyBgQ29uZmlndXJhdGlvblByb2Nlc3NvciAke3Byb2Nlc3Nvci5hcGlOYW1lfSBub3QgZm91bmRgO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVQcm9jZXNzb3JTY3JpcHQocmVxdWVzdCwgY29uZmlndXJhdGlvblByb2Nlc3NvciwgcHJvY2Vzc29yLmlucHV0RGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVQcm9jZXNzb3JTY3JpcHQoXG4gICAgcmVxdWVzdDogQ29uZmlndXJhdGlvblJlcXVlc3QgfCBDb25maWd1cmVQcmljZSxcbiAgICBjb25maWd1cmF0aW9uUHJvY2Vzc29yOiBDb25maWd1cmF0aW9uUHJvY2Vzc29yLFxuICAgIGlucHV0RGF0YTogdW5rbm93bixcbiAgKTogdW5rbm93biB7XG4gICAgbGV0IGZ1bmN0aW9uVG9FeGVjdXRlID0gdGhpcy5leGVjdXRlZEZ1bmN0aW9uc1tjb25maWd1cmF0aW9uUHJvY2Vzc29yLmFwaU5hbWVdO1xuICAgIGlmICghZnVuY3Rpb25Ub0V4ZWN1dGUpIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGAke2NvbmZpZ3VyYXRpb25Qcm9jZXNzb3Iuc2NyaXB0fVxcbnJldHVybiB0cmFuc2Zvcm07YDtcbiAgICAgIGNvbnN0IHNvdXJjZU1hcCA9IGBcXG4vLyMgc291cmNlVVJMPSR7Y29uZmlndXJhdGlvblByb2Nlc3Nvci5hcGlOYW1lfS5qc2A7XG4gICAgICBmdW5jdGlvblRvRXhlY3V0ZSA9IG5ldyBGdW5jdGlvbihzY3JpcHQgKyBzb3VyY2VNYXApKCkgYXMgQ29uZmlndXJhdGlvblByb2Nlc3NvclNjcmlwdEZuO1xuICAgICAgdGhpcy5leGVjdXRlZEZ1bmN0aW9uc1tjb25maWd1cmF0aW9uUHJvY2Vzc29yLmFwaU5hbWVdID0gZnVuY3Rpb25Ub0V4ZWN1dGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9FeGVjdXRlKHtcbiAgICAgIHJlcXVlc3QsXG4gICAgICBpbnB1dERhdGEsXG4gICAgICBmbG93U3RvcmU6IHRoaXMuZmxvd1N0YXRlU2VydmljZS5nZXRGbG93U3RvcmUoKSxcbiAgICAgIGNvbmZpZ3VyYXRpb25TdG9yZTogdGhpcy5jb25maWd1cmF0aW9uU3RvcmUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJ1blN0YXRlbGVzc1NlbGVjdG9ycyhcbiAgICByZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPLFxuICAgIGNvbmZpZ3VyYXRpb25TdGF0ZTogQ29uZmlndXJlUHJpY2UsXG4gICk6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdCB7XG4gICAgcmV0dXJuIEVudGl0eVV0aWwuZW50cmllcyhyZXF1ZXN0LnNlbGVjdG9ycyA/PyB7fSkucmVkdWNlKFxuICAgICAgKHJlc3VsdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0LCBba2V5LCBzZWxlY3Rvcl0pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXN1bHQuc2VsZWN0b3JzW2tleV0gPSB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgcmVzdWx0OiB0aGlzLmV4ZWN1dGVTZWxlY3RvclNjcmlwdChjb25maWd1cmF0aW9uU3RhdGUsIHNlbGVjdG9yKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICByZXN1bHQuc2VsZWN0b3JzW2tleV0gPSB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZTogU3RyaW5nKGUpLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICAgIHsgc3RhdGVJZDogJycsIHNlbGVjdG9yczoge30gfSxcbiAgICApO1xuICB9XG59XG4iXX0=