client-core-services 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/README.md +24 -0
  2. package/esm2020/client-core-services.mjs +5 -0
  3. package/esm2020/lib/my-lib.module.mjs +98 -0
  4. package/esm2020/lib/services/api/api-call/api-call.service.mjs +766 -0
  5. package/esm2020/lib/services/api/api-call-responce/api-call-responce.service.mjs +191 -0
  6. package/esm2020/lib/services/api/api.service.mjs +611 -0
  7. package/esm2020/lib/services/api/auth/auth-guard.service.mjs +37 -0
  8. package/esm2020/lib/services/api/auth/auth.service.mjs +500 -0
  9. package/esm2020/lib/services/api/aws-secret-manager/aws-secret-manager.service.mjs +78 -0
  10. package/esm2020/lib/services/api/common-api/common-api.service.mjs +97 -0
  11. package/esm2020/lib/services/api/doc-api/doc-api.service.mjs +221 -0
  12. package/esm2020/lib/services/api/public-api/public-api.service.mjs +37 -0
  13. package/esm2020/lib/services/chart/chart.service.mjs +166 -0
  14. package/esm2020/lib/services/check-if/check-if.service.mjs +830 -0
  15. package/esm2020/lib/services/common-utils/common-function.service.mjs +1277 -0
  16. package/esm2020/lib/services/common-utils/core-function/core-function.service.mjs +283 -0
  17. package/esm2020/lib/services/customvalidation/customvalidation.service.mjs +202 -0
  18. package/esm2020/lib/services/data-share/auth-data-share/auth-data-share.service.mjs +70 -0
  19. package/esm2020/lib/services/data-share/common-app-data-share/common-app-data-share.service.mjs +82 -0
  20. package/esm2020/lib/services/data-share/data-share.service.mjs +370 -0
  21. package/esm2020/lib/services/data-share/doc-data-share/doc-data-share.service.mjs +81 -0
  22. package/esm2020/lib/services/data-share/public-data-share/public-data-share.service.mjs +25 -0
  23. package/esm2020/lib/services/download/download.service.mjs +151 -0
  24. package/esm2020/lib/services/encryption/encryption.service.mjs +20 -0
  25. package/esm2020/lib/services/env/env.service.mjs +232 -0
  26. package/esm2020/lib/services/env/serverHostList.mjs +56 -0
  27. package/esm2020/lib/services/fileHandler/file-handler.service.mjs +136 -0
  28. package/esm2020/lib/services/form/form-control/form-control.service.mjs +654 -0
  29. package/esm2020/lib/services/form/form-creation/form-creation.service.mjs +880 -0
  30. package/esm2020/lib/services/form/form-value/form-value.service.mjs +464 -0
  31. package/esm2020/lib/services/form/multiple-form/multiple-form.service.mjs +346 -0
  32. package/esm2020/lib/services/grid/grid-common-function/grid-common-function.service.mjs +875 -0
  33. package/esm2020/lib/services/grid/grid-selection/grid-selection.service.mjs +84 -0
  34. package/esm2020/lib/services/lims-calculations/lims-calculations.service.mjs +2304 -0
  35. package/esm2020/lib/services/loader/loader.service.mjs +17 -0
  36. package/esm2020/lib/services/menu-or-module-common/menu-or-module-common.service.mjs +558 -0
  37. package/esm2020/lib/services/model/model.service.mjs +30 -0
  38. package/esm2020/lib/services/notify/notification.service.mjs +84 -0
  39. package/esm2020/lib/services/operator/operator.service.mjs +58 -0
  40. package/esm2020/lib/services/permission/permission.service.mjs +88 -0
  41. package/esm2020/lib/services/router/router.service.mjs +78 -0
  42. package/esm2020/lib/services/storage/cookies.service.mjs +56 -0
  43. package/esm2020/lib/services/storage/storage.service.mjs +749 -0
  44. package/esm2020/lib/services/tree-component/interface.mjs +6 -0
  45. package/esm2020/lib/services/tree-component/tree-component.service.mjs +394 -0
  46. package/esm2020/lib/services/userPrefrence/user-prefrence.service.mjs +767 -0
  47. package/esm2020/lib/services/voice-recognition/voice-recognition.service.mjs +97 -0
  48. package/esm2020/lib/shared/configuration/config.mjs +76 -0
  49. package/esm2020/lib/shared/configuration/editor-config.mjs +121 -0
  50. package/esm2020/lib/shared/enums/common.enum.mjs +18 -0
  51. package/esm2020/lib/shared/enums/config.enum.mjs +56 -0
  52. package/esm2020/lib/shared/enums/end-point.enum.mjs +69 -0
  53. package/esm2020/lib/shared/enums/flags.enum.mjs +20 -0
  54. package/esm2020/lib/shared/enums/keycodes.enum.mjs +122 -0
  55. package/esm2020/lib/shared/enums/operator_type.enum.mjs +13 -0
  56. package/esm2020/lib/shared/enums/storage-token-status.enum.mjs +10 -0
  57. package/esm2020/lib/shared/platform.mjs +2 -0
  58. package/esm2020/public-api.mjs +53 -0
  59. package/fesm2015/client-core-services.mjs +15487 -0
  60. package/fesm2015/client-core-services.mjs.map +1 -0
  61. package/fesm2020/client-core-services.mjs +15482 -0
  62. package/fesm2020/client-core-services.mjs.map +1 -0
  63. package/index.d.ts +5 -0
  64. package/lib/my-lib.module.d.ts +18 -0
  65. package/lib/services/api/api-call/api-call.service.d.ts +60 -0
  66. package/lib/services/api/api-call-responce/api-call-responce.service.d.ts +43 -0
  67. package/lib/services/api/api.service.d.ts +88 -0
  68. package/lib/services/api/auth/auth-guard.service.d.ts +13 -0
  69. package/lib/services/api/auth/auth.service.d.ts +50 -0
  70. package/lib/services/api/aws-secret-manager/aws-secret-manager.service.d.ts +22 -0
  71. package/lib/services/api/common-api/common-api.service.d.ts +22 -0
  72. package/lib/services/api/doc-api/doc-api.service.d.ts +35 -0
  73. package/lib/services/api/public-api/public-api.service.d.ts +14 -0
  74. package/lib/services/chart/chart.service.d.ts +21 -0
  75. package/lib/services/check-if/check-if.service.d.ts +50 -0
  76. package/lib/services/common-utils/common-function.service.d.ts +84 -0
  77. package/lib/services/common-utils/core-function/core-function.service.d.ts +21 -0
  78. package/lib/services/customvalidation/customvalidation.service.d.ts +21 -0
  79. package/lib/services/data-share/auth-data-share/auth-data-share.service.d.ts +33 -0
  80. package/lib/services/data-share/common-app-data-share/common-app-data-share.service.d.ts +36 -0
  81. package/lib/services/data-share/data-share.service.d.ts +174 -0
  82. package/lib/services/data-share/doc-data-share/doc-data-share.service.d.ts +33 -0
  83. package/lib/services/data-share/public-data-share/public-data-share.service.d.ts +12 -0
  84. package/lib/services/download/download.service.d.ts +35 -0
  85. package/lib/services/encryption/encryption.service.d.ts +8 -0
  86. package/lib/services/env/env.service.d.ts +44 -0
  87. package/lib/services/env/serverHostList.d.ts +9 -0
  88. package/lib/services/fileHandler/file-handler.service.d.ts +17 -0
  89. package/lib/services/form/form-control/form-control.service.d.ts +44 -0
  90. package/lib/services/form/form-creation/form-creation.service.d.ts +41 -0
  91. package/lib/services/form/form-value/form-value.service.d.ts +32 -0
  92. package/lib/services/form/multiple-form/multiple-form.service.d.ts +54 -0
  93. package/lib/services/grid/grid-common-function/grid-common-function.service.d.ts +74 -0
  94. package/lib/services/grid/grid-selection/grid-selection.service.d.ts +16 -0
  95. package/lib/services/lims-calculations/lims-calculations.service.d.ts +87 -0
  96. package/lib/services/loader/loader.service.d.ts +8 -0
  97. package/lib/services/menu-or-module-common/menu-or-module-common.service.d.ts +59 -0
  98. package/lib/services/model/model.service.d.ts +11 -0
  99. package/lib/services/notify/notification.service.d.ts +22 -0
  100. package/lib/services/operator/operator.service.d.ts +27 -0
  101. package/lib/services/permission/permission.service.d.ts +18 -0
  102. package/lib/services/router/router.service.d.ts +14 -0
  103. package/lib/services/storage/cookies.service.d.ts +11 -0
  104. package/lib/services/storage/storage.service.d.ts +132 -0
  105. package/lib/services/tree-component/interface.d.ts +13 -0
  106. package/lib/services/tree-component/tree-component.service.d.ts +38 -0
  107. package/lib/services/userPrefrence/user-prefrence.service.d.ts +75 -0
  108. package/lib/services/voice-recognition/voice-recognition.service.d.ts +36 -0
  109. package/lib/shared/configuration/config.d.ts +144 -0
  110. package/lib/shared/configuration/editor-config.d.ts +72 -0
  111. package/lib/shared/enums/common.enum.d.ts +16 -0
  112. package/lib/shared/enums/config.enum.d.ts +54 -0
  113. package/lib/shared/enums/end-point.enum.d.ts +66 -0
  114. package/lib/shared/enums/flags.enum.d.ts +18 -0
  115. package/lib/shared/enums/keycodes.enum.d.ts +120 -0
  116. package/lib/shared/enums/operator_type.enum.d.ts +9 -0
  117. package/lib/shared/enums/storage-token-status.enum.d.ts +8 -0
  118. package/lib/shared/platform.d.ts +1 -0
  119. package/package.json +40 -0
  120. package/public-api.d.ts +49 -0
@@ -0,0 +1,191 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../env/env.service";
4
+ import * as i2 from "../../common-utils/core-function/core-function.service";
5
+ import * as i3 from "../../storage/storage.service";
6
+ export class ApiCallResponceService {
7
+ constructor(envService, coreFunctionService, storageService) {
8
+ this.envService = envService;
9
+ this.coreFunctionService = coreFunctionService;
10
+ this.storageService = storageService;
11
+ }
12
+ saveFormResponceHandling(saveFromDataRsponce, showNotify, updateMode, currentActionButton, nextIndex, dataListForUpload, saveResponceData, custmizedFormValue, modifyCustmizedFormValue, dataSaveInProgress, isStepper, complete_object_payload_mode, form) {
13
+ let result = {
14
+ message: {
15
+ msg: "",
16
+ class: ""
17
+ },
18
+ saveDuplicateData: false,
19
+ showNotify: showNotify,
20
+ updateMode: updateMode,
21
+ next: false,
22
+ resetForm: false,
23
+ resetResponce: false,
24
+ successAction: false,
25
+ dataListForUpload: dataListForUpload,
26
+ saveResponceData: saveResponceData,
27
+ custmizedFormValue: custmizedFormValue,
28
+ modifyCustmizedFormValue: modifyCustmizedFormValue,
29
+ dataSaveInProgress: dataSaveInProgress,
30
+ isStepper: isStepper,
31
+ complete_object_payload_mode: complete_object_payload_mode,
32
+ public: {
33
+ check: false,
34
+ getFormData: {},
35
+ url: ""
36
+ }
37
+ };
38
+ if (saveFromDataRsponce) {
39
+ if (saveFromDataRsponce.success && saveFromDataRsponce.success != '' && result.showNotify) {
40
+ if (saveFromDataRsponce.success == 'success') {
41
+ if (currentActionButton && currentActionButton.onclick && currentActionButton.onclick.success_msg && currentActionButton.onclick.success_msg != '') {
42
+ result.message.msg = currentActionButton.onclick.success_msg;
43
+ result.message.class = "bg-success";
44
+ }
45
+ else if (saveFromDataRsponce.success_msg && saveFromDataRsponce.success_msg != '') {
46
+ result.message.msg = saveFromDataRsponce.success_msg;
47
+ result.message.class = "bg-success";
48
+ }
49
+ else {
50
+ if (result.updateMode) {
51
+ result.message.msg = " Form Data Update successfull !!!";
52
+ }
53
+ else {
54
+ result.message.msg = " Form Data Save successfull !!!";
55
+ }
56
+ result.message.class = "bg-success";
57
+ }
58
+ if (result.updateMode) {
59
+ if (nextIndex) {
60
+ result.next = true;
61
+ }
62
+ else {
63
+ result.resetForm = true;
64
+ result.updateMode = false;
65
+ }
66
+ result.custmizedFormValue = {};
67
+ result.modifyCustmizedFormValue = {};
68
+ }
69
+ else {
70
+ result.resetForm = true;
71
+ }
72
+ result.dataListForUpload = {};
73
+ result.saveResponceData = saveFromDataRsponce.data;
74
+ }
75
+ if (this.envService.getRequestType() == 'PUBLIC') {
76
+ result.complete_object_payload_mode = false;
77
+ result.public.check = true;
78
+ let _id = result.saveResponceData["_id"];
79
+ if (this.coreFunctionService.isNotBlank(form["details"]) && this.coreFunctionService.isNotBlank(form["details"]["on_success_url_key"] != "")) {
80
+ let public_key = form["details"]["on_success_url_key"];
81
+ const data = {
82
+ "obj": public_key,
83
+ "key": _id,
84
+ "key1": "key2",
85
+ "key2": "key3",
86
+ };
87
+ let payloaddata = {};
88
+ this.storageService.removeDataFormStorage();
89
+ const getFormData = {
90
+ data: payloaddata,
91
+ _id: _id
92
+ };
93
+ getFormData.data = data;
94
+ result.public.getFormData = getFormData;
95
+ //this.apiService.GetForm(getFormData);
96
+ let navigation_url = "pbl/" + public_key + "/" + _id + "/ie09/cnf00v";
97
+ result.public.url = navigation_url;
98
+ //this.router.navigate([navigation_url]);
99
+ }
100
+ else {
101
+ result.public.url = "home_page";
102
+ //this.router.navigate(["home_page"]);
103
+ }
104
+ }
105
+ result.showNotify = false;
106
+ result.dataSaveInProgress = true;
107
+ result.resetResponce = true;
108
+ result.successAction = true;
109
+ }
110
+ else if (saveFromDataRsponce.error && saveFromDataRsponce.error != '' && result.showNotify) {
111
+ result.message.msg = saveFromDataRsponce.error;
112
+ result.message.class = "bg-danger";
113
+ result.showNotify = false;
114
+ result.dataSaveInProgress = true;
115
+ result.resetResponce = true;
116
+ }
117
+ else if (saveFromDataRsponce.confirmationRequired && saveFromDataRsponce.confirmationRequired != '' && result.showNotify) {
118
+ result.message.msg = saveFromDataRsponce.confirmationRequired;
119
+ result.message.class = "bg-warning";
120
+ result.showNotify = false;
121
+ result.dataSaveInProgress = true;
122
+ result.resetResponce = true;
123
+ result.saveDuplicateData = true;
124
+ }
125
+ else {
126
+ if (result.showNotify) {
127
+ result.showNotify = false;
128
+ result.message.msg = "No data return";
129
+ result.message.class = "bg-danger";
130
+ result.dataSaveInProgress = true;
131
+ }
132
+ }
133
+ }
134
+ return result;
135
+ }
136
+ checkOnSuccessAction(currentActionButton, forms) {
137
+ let responce = {
138
+ actionValue: '',
139
+ index: -1
140
+ };
141
+ if (currentActionButton.onclick && currentActionButton.onclick != null && currentActionButton.onclick.action_name && currentActionButton.onclick.action_name != null) {
142
+ if (currentActionButton.onclick.action_name != '') {
143
+ responce.actionValue = currentActionButton.onclick.action_name;
144
+ if (responce.actionValue != '') {
145
+ Object.keys(forms).forEach((key, i) => {
146
+ if (key == responce.actionValue) {
147
+ responce.index = i;
148
+ }
149
+ });
150
+ }
151
+ }
152
+ }
153
+ return responce;
154
+ }
155
+ ;
156
+ setGridFilterData(gridFilterData, tabFilterData) {
157
+ let result = {
158
+ tabFilterData: tabFilterData
159
+ };
160
+ if (gridFilterData) {
161
+ if (gridFilterData.data && gridFilterData.data.length > 0) {
162
+ result.tabFilterData = JSON.parse(JSON.stringify(gridFilterData.data));
163
+ }
164
+ else {
165
+ result.tabFilterData = [];
166
+ }
167
+ }
168
+ return result.tabFilterData;
169
+ }
170
+ setTypeaheadData(data, typeAheadData) {
171
+ let result = {
172
+ typeAheadData: typeAheadData
173
+ };
174
+ if (data && data.length > 0) {
175
+ result.typeAheadData = data;
176
+ }
177
+ else {
178
+ result.typeAheadData = [];
179
+ }
180
+ return result.typeAheadData;
181
+ }
182
+ }
183
+ ApiCallResponceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiCallResponceService, deps: [{ token: i1.EnvService }, { token: i2.CoreFunctionService }, { token: i3.StorageService }], target: i0.ɵɵFactoryTarget.Injectable });
184
+ ApiCallResponceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiCallResponceService, providedIn: 'root' });
185
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiCallResponceService, decorators: [{
186
+ type: Injectable,
187
+ args: [{
188
+ providedIn: 'root'
189
+ }]
190
+ }], ctorParameters: function () { return [{ type: i1.EnvService }, { type: i2.CoreFunctionService }, { type: i3.StorageService }]; } });
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNhbGwtcmVzcG9uY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1jb3JlL3NyYy9saWIvc2VydmljZXMvYXBpL2FwaS1jYWxsLXJlc3BvbmNlL2FwaS1jYWxsLXJlc3BvbmNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRM0MsTUFBTSxPQUFPLHNCQUFzQjtJQUVqQyxZQUNVLFVBQXFCLEVBQ3JCLG1CQUF1QyxFQUN2QyxjQUE2QjtRQUY3QixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQ3JCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFDdkMsbUJBQWMsR0FBZCxjQUFjLENBQWU7SUFFbkMsQ0FBQztJQUVMLHdCQUF3QixDQUFDLG1CQUF1QixFQUFDLFVBQWtCLEVBQUMsVUFBa0IsRUFBQyxtQkFBdUIsRUFBQyxTQUFhLEVBQUMsaUJBQXFCLEVBQUMsZ0JBQW9CLEVBQUMsa0JBQXNCLEVBQUMsd0JBQTRCLEVBQUMsa0JBQXNCLEVBQUMsU0FBYSxFQUFDLDRCQUFnQyxFQUFDLElBQVE7UUFDeFMsSUFBSSxNQUFNLEdBQUU7WUFDVixPQUFPLEVBQUc7Z0JBQ1IsR0FBRyxFQUFHLEVBQUU7Z0JBQ1IsS0FBSyxFQUFHLEVBQUU7YUFDWDtZQUNELGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsVUFBVSxFQUFDLFVBQVU7WUFDckIsVUFBVSxFQUFDLFVBQVU7WUFDckIsSUFBSSxFQUFDLEtBQUs7WUFDVixTQUFTLEVBQUMsS0FBSztZQUNmLGFBQWEsRUFBQyxLQUFLO1lBQ25CLGFBQWEsRUFBQyxLQUFLO1lBQ25CLGlCQUFpQixFQUFDLGlCQUFpQjtZQUNuQyxnQkFBZ0IsRUFBQyxnQkFBZ0I7WUFDakMsa0JBQWtCLEVBQUMsa0JBQWtCO1lBQ3JDLHdCQUF3QixFQUFD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RUFBQyxhQUFpQjtRQUN6QyxJQUFJLE1BQU0sR0FBRztZQUNYLGFBQWEsRUFBQyxhQUFhO1NBQzVCLENBQUE7UUFDRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQixNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUM3QjthQUFNO1lBQ0wsTUFBTSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7U0FDM0I7UUFDRCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQzs7b0hBMUtVLHNCQUFzQjt3SEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07NEZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRW52U2VydmljZSB9IGZyb20gJy4uLy4uL2Vudi9lbnYuc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVGdW5jdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24tdXRpbHMvY29yZS1mdW5jdGlvbi9jb3JlLWZ1bmN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3N0b3JhZ2Uvc3RvcmFnZS5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwaUNhbGxSZXNwb25jZVNlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZW52U2VydmljZTpFbnZTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlRnVuY3Rpb25TZXJ2aWNlOkNvcmVGdW5jdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOlN0b3JhZ2VTZXJ2aWNlXHJcblxyXG4gICkgeyB9XHJcblxyXG4gIHNhdmVGb3JtUmVzcG9uY2VIYW5kbGluZyhzYXZlRnJvbURhdGFSc3BvbmNlOmFueSxzaG93Tm90aWZ5OmJvb2xlYW4sdXBkYXRlTW9kZTpib29sZWFuLGN1cnJlbnRBY3Rpb25CdXR0b246YW55LG5leHRJbmRleDphbnksZGF0YUxpc3RGb3JVcGxvYWQ6YW55LHNhdmVSZXNwb25jZURhdGE6YW55LGN1c3RtaXplZEZvcm1WYWx1ZTphbnksbW9kaWZ5Q3VzdG1pemVkRm9ybVZhbHVlOmFueSxkYXRhU2F2ZUluUHJvZ3Jlc3M6YW55LGlzU3RlcHBlcjphbnksY29tcGxldGVfb2JqZWN0X3BheWxvYWRfbW9kZTphbnksZm9ybTphbnkpe1xyXG4gICAgbGV0IHJlc3VsdCA9e1xyXG4gICAgICBtZXNzYWdlIDoge1xyXG4gICAgICAgIG1zZyA6IFwiXCIsXHJcbiAgICAgICAgY2xhc3MgOiBcIlwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHNhdmVEdXBsaWNhdGVEYXRhOiBmYWxzZSxcclxuICAgICAgc2hvd05vdGlmeTpzaG93Tm90aWZ5LFxyXG4gICAgICB1cGRhdGVNb2RlOnVwZGF0ZU1vZGUsXHJcbiAgICAgIG5leHQ6ZmFsc2UsXHJcbiAgICAgIHJlc2V0Rm9ybTpmYWxzZSxcclxuICAgICAgcmVzZXRSZXNwb25jZTpmYWxzZSxcclxuICAgICAgc3VjY2Vzc0FjdGlvbjpmYWxzZSxcclxuICAgICAgZGF0YUxpc3RGb3JVcGxvYWQ6ZGF0YUxpc3RGb3JVcGxvYWQsXHJcbiAgICAgIHNhdmVSZXNwb25jZURhdGE6c2F2ZVJlc3BvbmNlRGF0YSxcclxuICAgICAgY3VzdG1pemVkRm9ybVZhbHVlOmN1c3RtaXplZEZvcm1WYWx1ZSxcclxuICAgICAgbW9kaWZ5Q3VzdG1pemVkRm9ybVZhbHVlOm1vZGlmeUN1c3RtaXplZEZvcm1WYWx1ZSxcclxuICAgICAgZGF0YVNhdmVJblByb2dyZXNzOmRhdGFTYXZlSW5Qcm9ncmVzcyxcclxuICAgICAgaXNTdGVwcGVyOmlzU3RlcHBlcixcclxuICAgICAgY29tcGxldGVfb2JqZWN0X3BheWxvYWRfbW9kZTpjb21wbGV0ZV9vYmplY3RfcGF5bG9hZF9tb2RlLFxyXG4gICAgICBwdWJsaWM6e1xyXG4gICAgICAgIGNoZWNrOmZhbHNlLFxyXG4gICAgICAgIGdldEZvcm1EYXRhOnt9LFxyXG4gICAgICAgIHVybDpcIlwiXHJcbiAgICAgIH1cclxuICAgIH0gIFxyXG4gICAgaWYgKHNhdmVGcm9tRGF0YVJzcG9uY2UpIHtcclxuICAgICAgaWYgKHNhdmVGcm9tRGF0YVJzcG9uY2Uuc3VjY2VzcyAmJiBzYXZlRnJvbURhdGFSc3BvbmNlLnN1Y2Nlc3MgIT0gJycgJiYgcmVzdWx0LnNob3dOb3RpZnkpIHtcclxuICAgICAgICBpZiAoc2F2ZUZyb21EYXRhUnNwb25jZS5zdWNjZXNzID09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgaWYoY3VycmVudEFjdGlvbkJ1dHRvbiAmJiBjdXJyZW50QWN0aW9uQnV0dG9uLm9uY2xpY2sgJiYgY3VycmVudEFjdGlvbkJ1dHRvbi5vbmNsaWNrLnN1Y2Nlc3NfbXNnICYmIGN1cnJlbnRBY3Rpb25CdXR0b24ub25jbGljay5zdWNjZXNzX21zZyAhPSAnJyl7XHJcbiAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlLm1zZyA9IGN1cnJlbnRBY3Rpb25CdXR0b24ub25jbGljay5zdWNjZXNzX21zZztcclxuICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2UuY2xhc3MgPSBcImJnLXN1Y2Nlc3NcIjtcclxuICAgICAgICAgIH1lbHNlIGlmKHNhdmVGcm9tRGF0YVJzcG9uY2Uuc3VjY2Vzc19tc2cgJiYgc2F2ZUZyb21EYXRhUnNwb25jZS5zdWNjZXNzX21zZyAhPSAnJyl7XHJcbiAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlLm1zZyA9IHNhdmVGcm9tRGF0YVJzcG9uY2Uuc3VjY2Vzc19tc2c7XHJcbiAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlLmNsYXNzID0gXCJiZy1zdWNjZXNzXCI7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgaWYocmVzdWx0LnVwZGF0ZU1vZGUpe1xyXG4gICAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlLm1zZyA9IFwiIEZvcm0gRGF0YSBVcGRhdGUgc3VjY2Vzc2Z1bGwgISEhXCI7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlLm1zZyA9IFwiIEZvcm0gRGF0YSBTYXZlIHN1Y2Nlc3NmdWxsICEhIVwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlLmNsYXNzID0gXCJiZy1zdWNjZXNzXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZihyZXN1bHQudXBkYXRlTW9kZSl7XHJcbiAgICAgICAgICAgIGlmKG5leHRJbmRleCl7XHJcbiAgICAgICAgICAgICAgcmVzdWx0Lm5leHQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICByZXN1bHQucmVzZXRGb3JtID0gdHJ1ZTtcclxuICAgICAgICAgICAgICByZXN1bHQudXBkYXRlTW9kZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdC5jdXN0bWl6ZWRGb3JtVmFsdWUgPSB7fTtcclxuICAgICAgICAgICAgcmVzdWx0Lm1vZGlmeUN1c3RtaXplZEZvcm1WYWx1ZSA9IHt9O1xyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJlc3VsdC5yZXNldEZvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzdWx0LmRhdGFMaXN0Rm9yVXBsb2FkID0ge31cclxuICAgICAgICAgIHJlc3VsdC5zYXZlUmVzcG9uY2VEYXRhID0gc2F2ZUZyb21EYXRhUnNwb25jZS5kYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmVudlNlcnZpY2UuZ2V0UmVxdWVzdFR5cGUoKSA9PSAnUFVCTElDJyl7XHJcbiAgICAgICAgICByZXN1bHQuY29tcGxldGVfb2JqZWN0X3BheWxvYWRfbW9kZSA9IGZhbHNlO1xyXG4gICAgICAgICAgcmVzdWx0LnB1YmxpYy5jaGVjayA9IHRydWU7XHJcbiAgICAgICAgICBsZXQgX2lkID0gcmVzdWx0LnNhdmVSZXNwb25jZURhdGFbXCJfaWRcIl07XHJcbiAgICAgICAgICBpZih0aGlzLmNvcmVGdW5jdGlvblNlcnZpY2UuaXNOb3RCbGFuayhmb3JtW1wiZGV0YWlsc1wiXSkgJiYgdGhpcy5jb3JlRnVuY3Rpb25TZXJ2aWNlLmlzTm90QmxhbmsoZm9ybVtcImRldGFpbHNcIl1bXCJvbl9zdWNjZXNzX3VybF9rZXlcIl0gIT0gXCJcIikpe1xyXG4gICAgICAgICAgICBsZXQgcHVibGljX2tleSA9IGZvcm1bXCJkZXRhaWxzXCJdW1wib25fc3VjY2Vzc191cmxfa2V5XCJdXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgICAgXCJvYmpcIjpwdWJsaWNfa2V5LFxyXG4gICAgICAgICAgICAgIFwia2V5XCI6X2lkLFxyXG4gICAgICAgICAgICAgIFwia2V5MVwiOiBcImtleTJcIixcclxuICAgICAgICAgICAgICBcImtleTJcIiA6IFwia2V5M1wiLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBwYXlsb2FkZGF0YSA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnJlbW92ZURhdGFGb3JtU3RvcmFnZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBnZXRGb3JtRGF0YSA9IHtcclxuICAgICAgICAgICAgICBkYXRhOiBwYXlsb2FkZGF0YSxcclxuICAgICAgICAgICAgICBfaWQ6X2lkXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ2V0Rm9ybURhdGEuZGF0YT1kYXRhO1xyXG4gICAgICAgICAgICByZXN1bHQucHVibGljLmdldEZvcm1EYXRhID0gZ2V0Rm9ybURhdGE7XHJcbiAgICAgICAgICAgIC8vdGhpcy5hcGlTZXJ2aWNlLkdldEZvcm0oZ2V0Rm9ybURhdGEpO1xyXG4gICAgICAgICAgICBsZXQgbmF2aWdhdGlvbl91cmwgPSBcInBibC9cIitwdWJsaWNfa2V5K1wiL1wiK19pZCtcIi9pZTA5L2NuZjAwdlwiO1xyXG4gICAgICAgICAgICByZXN1bHQucHVibGljLnVybCA9IG5hdmlnYXRpb25fdXJsO1xyXG4gICAgICAgICAgICAvL3RoaXMucm91dGVyLm5hdmlnYXRlKFtuYXZpZ2F0aW9uX3VybF0pO1xyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdWJsaWMudXJsID0gXCJob21lX3BhZ2VcIjtcclxuICAgICAgICAgICAgLy90aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJob21lX3BhZ2VcIl0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LnNob3dOb3RpZnkgPSBmYWxzZTtcclxuICAgICAgICByZXN1bHQuZGF0YVNhdmVJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgICAgICByZXN1bHQucmVzZXRSZXNwb25jZSA9IHRydWU7XHJcbiAgICAgICAgcmVzdWx0LnN1Y2Nlc3NBY3Rpb24gPSB0cnVlO1xyXG4gICAgICB9ZWxzZSBpZiAoc2F2ZUZyb21EYXRhUnNwb25jZS5lcnJvciAmJiBzYXZlRnJvbURhdGFSc3BvbmNlLmVycm9yICE9ICcnICYmIHJlc3VsdC5zaG93Tm90aWZ5KSB7XHJcbiAgICAgICAgcmVzdWx0Lm1lc3NhZ2UubXNnID0gc2F2ZUZyb21EYXRhUnNwb25jZS5lcnJvcjtcclxuICAgICAgICByZXN1bHQubWVzc2FnZS5jbGFzcyA9IFwiYmctZGFuZ2VyXCI7XHJcbiAgICAgICAgcmVzdWx0LnNob3dOb3RpZnkgPSBmYWxzZTtcclxuICAgICAgICByZXN1bHQuZGF0YVNhdmVJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgICAgICByZXN1bHQucmVzZXRSZXNwb25jZSA9IHRydWU7XHJcbiAgICAgIH1lbHNlIGlmIChzYXZlRnJvbURhdGFSc3BvbmNlLmNvbmZpcm1hdGlvblJlcXVpcmVkICYmIHNhdmVGcm9tRGF0YVJzcG9uY2UuY29uZmlybWF0aW9uUmVxdWlyZWQgIT0gJycgJiYgcmVzdWx0LnNob3dOb3RpZnkpIHtcclxuICAgICAgICByZXN1bHQubWVzc2FnZS5tc2cgPSBzYXZlRnJvbURhdGFSc3BvbmNlLmNvbmZpcm1hdGlvblJlcXVpcmVkO1xyXG4gICAgICAgIHJlc3VsdC5tZXNzYWdlLmNsYXNzID0gXCJiZy13YXJuaW5nXCI7XHJcbiAgICAgICAgcmVzdWx0LnNob3dOb3RpZnkgPSBmYWxzZTtcclxuICAgICAgICByZXN1bHQuZGF0YVNhdmVJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgICAgICByZXN1bHQucmVzZXRSZXNwb25jZSA9IHRydWU7XHJcbiAgICAgICAgcmVzdWx0LnNhdmVEdXBsaWNhdGVEYXRhPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgaWYocmVzdWx0LnNob3dOb3RpZnkpe1xyXG4gICAgICAgICAgcmVzdWx0LnNob3dOb3RpZnkgPSBmYWxzZTtcclxuICAgICAgICAgIHJlc3VsdC5tZXNzYWdlLm1zZyA9IFwiTm8gZGF0YSByZXR1cm5cIjtcclxuICAgICAgICAgIHJlc3VsdC5tZXNzYWdlLmNsYXNzID0gXCJiZy1kYW5nZXJcIjtcclxuICAgICAgICAgIHJlc3VsdC5kYXRhU2F2ZUluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGNoZWNrT25TdWNjZXNzQWN0aW9uKGN1cnJlbnRBY3Rpb25CdXR0b246YW55LGZvcm1zOmFueSl7XHJcbiAgICBsZXQgcmVzcG9uY2UgPXtcclxuICAgICAgYWN0aW9uVmFsdWUgOiAnJyxcclxuICAgICAgaW5kZXggOiAtMVxyXG4gICAgfVxyXG5cclxuICAgIGlmKGN1cnJlbnRBY3Rpb25CdXR0b24ub25jbGljayAmJiBjdXJyZW50QWN0aW9uQnV0dG9uLm9uY2xpY2sgIT0gbnVsbCAmJiBjdXJyZW50QWN0aW9uQnV0dG9uLm9uY2xpY2suYWN0aW9uX25hbWUgJiYgY3VycmVudEFjdGlvbkJ1dHRvbi5vbmNsaWNrLmFjdGlvbl9uYW1lICE9IG51bGwpe1xyXG4gICAgICBpZihjdXJyZW50QWN0aW9uQnV0dG9uLm9uY2xpY2suYWN0aW9uX25hbWUgIT0gJycpe1xyXG4gICAgICAgIHJlc3BvbmNlLmFjdGlvblZhbHVlID0gY3VycmVudEFjdGlvbkJ1dHRvbi5vbmNsaWNrLmFjdGlvbl9uYW1lO1xyXG4gICAgICAgIGlmKHJlc3BvbmNlLmFjdGlvblZhbHVlICE9ICcnKXtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKGZvcm1zKS5mb3JFYWNoKChrZXksaSkgPT4ge1xyXG4gICAgICAgICAgICBpZihrZXkgPT0gcmVzcG9uY2UuYWN0aW9uVmFsdWUpe1xyXG4gICAgICAgICAgICAgIHJlc3BvbmNlLmluZGV4ID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzcG9uY2U7XHJcbiAgfTtcclxuICBzZXRHcmlkRmlsdGVyRGF0YShncmlkRmlsdGVyRGF0YTphbnksdGFiRmlsdGVyRGF0YTphbnkpe1xyXG4gICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgdGFiRmlsdGVyRGF0YTp0YWJGaWx0ZXJEYXRhXHJcbiAgICB9XHJcbiAgICBpZiAoZ3JpZEZpbHRlckRhdGEpIHtcclxuICAgICAgaWYgKGdyaWRGaWx0ZXJEYXRhLmRhdGEgJiYgZ3JpZEZpbHRlckRhdGEuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmVzdWx0LnRhYkZpbHRlckRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdyaWRGaWx0ZXJEYXRhLmRhdGEpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHQudGFiRmlsdGVyRGF0YSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0LnRhYkZpbHRlckRhdGE7XHJcbiAgfVxyXG4gIHNldFR5cGVhaGVhZERhdGEoZGF0YTphbnksdHlwZUFoZWFkRGF0YTphbnkpe1xyXG4gICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgdHlwZUFoZWFkRGF0YTp0eXBlQWhlYWREYXRhXHJcbiAgICB9XHJcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmVzdWx0LnR5cGVBaGVhZERhdGEgPSBkYXRhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzdWx0LnR5cGVBaGVhZERhdGEgPSBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQudHlwZUFoZWFkRGF0YTtcclxuICB9XHJcbn1cclxuIl19