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.
- package/README.md +24 -0
- package/esm2020/client-core-services.mjs +5 -0
- package/esm2020/lib/my-lib.module.mjs +98 -0
- package/esm2020/lib/services/api/api-call/api-call.service.mjs +766 -0
- package/esm2020/lib/services/api/api-call-responce/api-call-responce.service.mjs +191 -0
- package/esm2020/lib/services/api/api.service.mjs +611 -0
- package/esm2020/lib/services/api/auth/auth-guard.service.mjs +37 -0
- package/esm2020/lib/services/api/auth/auth.service.mjs +500 -0
- package/esm2020/lib/services/api/aws-secret-manager/aws-secret-manager.service.mjs +78 -0
- package/esm2020/lib/services/api/common-api/common-api.service.mjs +97 -0
- package/esm2020/lib/services/api/doc-api/doc-api.service.mjs +221 -0
- package/esm2020/lib/services/api/public-api/public-api.service.mjs +37 -0
- package/esm2020/lib/services/chart/chart.service.mjs +166 -0
- package/esm2020/lib/services/check-if/check-if.service.mjs +830 -0
- package/esm2020/lib/services/common-utils/common-function.service.mjs +1277 -0
- package/esm2020/lib/services/common-utils/core-function/core-function.service.mjs +283 -0
- package/esm2020/lib/services/customvalidation/customvalidation.service.mjs +202 -0
- package/esm2020/lib/services/data-share/auth-data-share/auth-data-share.service.mjs +70 -0
- package/esm2020/lib/services/data-share/common-app-data-share/common-app-data-share.service.mjs +82 -0
- package/esm2020/lib/services/data-share/data-share.service.mjs +370 -0
- package/esm2020/lib/services/data-share/doc-data-share/doc-data-share.service.mjs +81 -0
- package/esm2020/lib/services/data-share/public-data-share/public-data-share.service.mjs +25 -0
- package/esm2020/lib/services/download/download.service.mjs +151 -0
- package/esm2020/lib/services/encryption/encryption.service.mjs +20 -0
- package/esm2020/lib/services/env/env.service.mjs +232 -0
- package/esm2020/lib/services/env/serverHostList.mjs +56 -0
- package/esm2020/lib/services/fileHandler/file-handler.service.mjs +136 -0
- package/esm2020/lib/services/form/form-control/form-control.service.mjs +654 -0
- package/esm2020/lib/services/form/form-creation/form-creation.service.mjs +880 -0
- package/esm2020/lib/services/form/form-value/form-value.service.mjs +464 -0
- package/esm2020/lib/services/form/multiple-form/multiple-form.service.mjs +346 -0
- package/esm2020/lib/services/grid/grid-common-function/grid-common-function.service.mjs +875 -0
- package/esm2020/lib/services/grid/grid-selection/grid-selection.service.mjs +84 -0
- package/esm2020/lib/services/lims-calculations/lims-calculations.service.mjs +2304 -0
- package/esm2020/lib/services/loader/loader.service.mjs +17 -0
- package/esm2020/lib/services/menu-or-module-common/menu-or-module-common.service.mjs +558 -0
- package/esm2020/lib/services/model/model.service.mjs +30 -0
- package/esm2020/lib/services/notify/notification.service.mjs +84 -0
- package/esm2020/lib/services/operator/operator.service.mjs +58 -0
- package/esm2020/lib/services/permission/permission.service.mjs +88 -0
- package/esm2020/lib/services/router/router.service.mjs +78 -0
- package/esm2020/lib/services/storage/cookies.service.mjs +56 -0
- package/esm2020/lib/services/storage/storage.service.mjs +749 -0
- package/esm2020/lib/services/tree-component/interface.mjs +6 -0
- package/esm2020/lib/services/tree-component/tree-component.service.mjs +394 -0
- package/esm2020/lib/services/userPrefrence/user-prefrence.service.mjs +767 -0
- package/esm2020/lib/services/voice-recognition/voice-recognition.service.mjs +97 -0
- package/esm2020/lib/shared/configuration/config.mjs +76 -0
- package/esm2020/lib/shared/configuration/editor-config.mjs +121 -0
- package/esm2020/lib/shared/enums/common.enum.mjs +18 -0
- package/esm2020/lib/shared/enums/config.enum.mjs +56 -0
- package/esm2020/lib/shared/enums/end-point.enum.mjs +69 -0
- package/esm2020/lib/shared/enums/flags.enum.mjs +20 -0
- package/esm2020/lib/shared/enums/keycodes.enum.mjs +122 -0
- package/esm2020/lib/shared/enums/operator_type.enum.mjs +13 -0
- package/esm2020/lib/shared/enums/storage-token-status.enum.mjs +10 -0
- package/esm2020/lib/shared/platform.mjs +2 -0
- package/esm2020/public-api.mjs +53 -0
- package/fesm2015/client-core-services.mjs +15487 -0
- package/fesm2015/client-core-services.mjs.map +1 -0
- package/fesm2020/client-core-services.mjs +15482 -0
- package/fesm2020/client-core-services.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/my-lib.module.d.ts +18 -0
- package/lib/services/api/api-call/api-call.service.d.ts +60 -0
- package/lib/services/api/api-call-responce/api-call-responce.service.d.ts +43 -0
- package/lib/services/api/api.service.d.ts +88 -0
- package/lib/services/api/auth/auth-guard.service.d.ts +13 -0
- package/lib/services/api/auth/auth.service.d.ts +50 -0
- package/lib/services/api/aws-secret-manager/aws-secret-manager.service.d.ts +22 -0
- package/lib/services/api/common-api/common-api.service.d.ts +22 -0
- package/lib/services/api/doc-api/doc-api.service.d.ts +35 -0
- package/lib/services/api/public-api/public-api.service.d.ts +14 -0
- package/lib/services/chart/chart.service.d.ts +21 -0
- package/lib/services/check-if/check-if.service.d.ts +50 -0
- package/lib/services/common-utils/common-function.service.d.ts +84 -0
- package/lib/services/common-utils/core-function/core-function.service.d.ts +21 -0
- package/lib/services/customvalidation/customvalidation.service.d.ts +21 -0
- package/lib/services/data-share/auth-data-share/auth-data-share.service.d.ts +33 -0
- package/lib/services/data-share/common-app-data-share/common-app-data-share.service.d.ts +36 -0
- package/lib/services/data-share/data-share.service.d.ts +174 -0
- package/lib/services/data-share/doc-data-share/doc-data-share.service.d.ts +33 -0
- package/lib/services/data-share/public-data-share/public-data-share.service.d.ts +12 -0
- package/lib/services/download/download.service.d.ts +35 -0
- package/lib/services/encryption/encryption.service.d.ts +8 -0
- package/lib/services/env/env.service.d.ts +44 -0
- package/lib/services/env/serverHostList.d.ts +9 -0
- package/lib/services/fileHandler/file-handler.service.d.ts +17 -0
- package/lib/services/form/form-control/form-control.service.d.ts +44 -0
- package/lib/services/form/form-creation/form-creation.service.d.ts +41 -0
- package/lib/services/form/form-value/form-value.service.d.ts +32 -0
- package/lib/services/form/multiple-form/multiple-form.service.d.ts +54 -0
- package/lib/services/grid/grid-common-function/grid-common-function.service.d.ts +74 -0
- package/lib/services/grid/grid-selection/grid-selection.service.d.ts +16 -0
- package/lib/services/lims-calculations/lims-calculations.service.d.ts +87 -0
- package/lib/services/loader/loader.service.d.ts +8 -0
- package/lib/services/menu-or-module-common/menu-or-module-common.service.d.ts +59 -0
- package/lib/services/model/model.service.d.ts +11 -0
- package/lib/services/notify/notification.service.d.ts +22 -0
- package/lib/services/operator/operator.service.d.ts +27 -0
- package/lib/services/permission/permission.service.d.ts +18 -0
- package/lib/services/router/router.service.d.ts +14 -0
- package/lib/services/storage/cookies.service.d.ts +11 -0
- package/lib/services/storage/storage.service.d.ts +132 -0
- package/lib/services/tree-component/interface.d.ts +13 -0
- package/lib/services/tree-component/tree-component.service.d.ts +38 -0
- package/lib/services/userPrefrence/user-prefrence.service.d.ts +75 -0
- package/lib/services/voice-recognition/voice-recognition.service.d.ts +36 -0
- package/lib/shared/configuration/config.d.ts +144 -0
- package/lib/shared/configuration/editor-config.d.ts +72 -0
- package/lib/shared/enums/common.enum.d.ts +16 -0
- package/lib/shared/enums/config.enum.d.ts +54 -0
- package/lib/shared/enums/end-point.enum.d.ts +66 -0
- package/lib/shared/enums/flags.enum.d.ts +18 -0
- package/lib/shared/enums/keycodes.enum.d.ts +120 -0
- package/lib/shared/enums/operator_type.enum.d.ts +9 -0
- package/lib/shared/enums/storage-token-status.enum.d.ts +8 -0
- package/lib/shared/platform.d.ts +1 -0
- package/package.json +40 -0
- package/public-api.d.ts +49 -0
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Operator } from '../../operator/operator.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class CoreFunctionService {
|
|
5
|
+
// commonOperators:any={
|
|
6
|
+
// eq :"EQUAL",
|
|
7
|
+
// in : "IN",
|
|
8
|
+
// neq : "NOT_EQUAL",
|
|
9
|
+
// // stwic : "STARTS_WITH_IGNORE_CASE",
|
|
10
|
+
// cnts : "CONTAINS"
|
|
11
|
+
// };
|
|
12
|
+
constructor() { }
|
|
13
|
+
isNotBlank(value) {
|
|
14
|
+
if (value && value != undefined && value != null && value != '' && JSON.stringify(value) != "{}" && JSON.stringify(value) != "[]") {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
getModulesFromMapObject(obj) {
|
|
22
|
+
let user = obj.user;
|
|
23
|
+
let permissions = obj.permission;
|
|
24
|
+
let rollList = obj.rollList;
|
|
25
|
+
let utvn = {};
|
|
26
|
+
let modules = [];
|
|
27
|
+
let permissionList = {};
|
|
28
|
+
if (permissions && Object.keys(permissions).length > 0) {
|
|
29
|
+
Object.keys(permissions).forEach((mokey, i) => {
|
|
30
|
+
let moduleObj = {};
|
|
31
|
+
let module = permissions[mokey];
|
|
32
|
+
if (module && module.details) {
|
|
33
|
+
moduleObj = module.details;
|
|
34
|
+
}
|
|
35
|
+
let menuList = [];
|
|
36
|
+
if (module && module.menuMap) {
|
|
37
|
+
let menuMap = module.menuMap;
|
|
38
|
+
if (Object.keys(menuMap).length > 0) {
|
|
39
|
+
Object.keys(menuMap).forEach((mekey, j) => {
|
|
40
|
+
let menuobj = {};
|
|
41
|
+
let menu = menuMap[mekey];
|
|
42
|
+
if (menu && menu.details) {
|
|
43
|
+
menuobj = menu.details;
|
|
44
|
+
}
|
|
45
|
+
let submenuList = [];
|
|
46
|
+
if (menu && menu.submenuMap) {
|
|
47
|
+
let submenuMap = menu.submenuMap;
|
|
48
|
+
if (Object.keys(submenuMap).length > 0) {
|
|
49
|
+
Object.keys(submenuMap).forEach((smkey, k) => {
|
|
50
|
+
let submenuObj = {};
|
|
51
|
+
let submenu = submenuMap[smkey];
|
|
52
|
+
if (submenu && submenu.details) {
|
|
53
|
+
submenuObj = submenu.details;
|
|
54
|
+
}
|
|
55
|
+
this.setTabOrPermission(submenu, permissionList, submenuObj);
|
|
56
|
+
submenuList.push(submenuObj);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this.setTabOrPermission(menu, permissionList, menuobj);
|
|
62
|
+
}
|
|
63
|
+
if (submenuList && submenuList.length > 0) {
|
|
64
|
+
menuobj['submenu'] = this.sortMenu(submenuList);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
menuobj['submenu'] = null;
|
|
68
|
+
}
|
|
69
|
+
menuList.push(menuobj);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (menuList && menuList.length > 0) {
|
|
74
|
+
moduleObj['menu_list'] = this.sortMenu(menuList);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
moduleObj['menu_list'] = null;
|
|
78
|
+
}
|
|
79
|
+
modules.push(moduleObj);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
let modifiedModules = this.setDefaultIndexForModules(modules);
|
|
83
|
+
utvn['modules'] = this.sortMenu(modifiedModules);
|
|
84
|
+
utvn['permission'] = permissionList;
|
|
85
|
+
utvn['user'] = user;
|
|
86
|
+
utvn['rollList'] = rollList;
|
|
87
|
+
return utvn;
|
|
88
|
+
}
|
|
89
|
+
setTabOrPermission(menu, permissionList, menuObj) {
|
|
90
|
+
let tabList = [];
|
|
91
|
+
if (menu && menu.templateTabMap) {
|
|
92
|
+
let tabsMap = menu.templateTabMap;
|
|
93
|
+
if (Object.keys(tabsMap).length > 0) {
|
|
94
|
+
Object.keys(tabsMap).forEach((tkey, l) => {
|
|
95
|
+
let tab = tabsMap[tkey];
|
|
96
|
+
const modifyTab = {};
|
|
97
|
+
modifyTab['field_name'] = tkey;
|
|
98
|
+
modifyTab['label'] = tab?.label;
|
|
99
|
+
modifyTab['grid'] = tab?.grid;
|
|
100
|
+
if (tab && tab.details && tab.details._id) {
|
|
101
|
+
modifyTab['_id'] = tab.details._id;
|
|
102
|
+
}
|
|
103
|
+
tabList.push(modifyTab);
|
|
104
|
+
if (tkey in permissionList) {
|
|
105
|
+
if (tab && tab.access) {
|
|
106
|
+
let oldPermissoin = permissionList[tkey];
|
|
107
|
+
let newPermission = tab.access;
|
|
108
|
+
if (newPermission && newPermission.length > 0) {
|
|
109
|
+
newPermission.forEach((permission) => {
|
|
110
|
+
if (!oldPermissoin.includes(permission)) {
|
|
111
|
+
oldPermissoin.push(permission);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
permissionList[tkey] = oldPermissoin;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
if (tab && tab.access) {
|
|
120
|
+
permissionList[tkey] = tab.access;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
menuObj['tabList'] = tabList;
|
|
127
|
+
}
|
|
128
|
+
setDefaultIndexForModules(modules) {
|
|
129
|
+
if (modules?.length > 0) {
|
|
130
|
+
let maxIndex = modules.length;
|
|
131
|
+
modules.forEach((module) => {
|
|
132
|
+
if (!module?.index) {
|
|
133
|
+
module["index"] = maxIndex;
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return modules;
|
|
138
|
+
}
|
|
139
|
+
sortMenu(menuList) {
|
|
140
|
+
let list = [];
|
|
141
|
+
let mlist = menuList.sort((a, b) => {
|
|
142
|
+
if (a.index === b.index) {
|
|
143
|
+
// If `index` is the same, sort by `name` alphabetically
|
|
144
|
+
return a.name.localeCompare(b.name);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
// Otherwise, sort by `index`
|
|
148
|
+
return a.index - b.index;
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
if (mlist && mlist.length > 0) {
|
|
152
|
+
mlist.forEach((m) => {
|
|
153
|
+
list.push(m);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
return list;
|
|
157
|
+
}
|
|
158
|
+
convertListToColonString(list, type, key) {
|
|
159
|
+
let value = "";
|
|
160
|
+
if (type.toLowerCase() == 'text') {
|
|
161
|
+
if (list && list.length > 0) {
|
|
162
|
+
for (let index = 0; index < list.length; index++) {
|
|
163
|
+
const str = list[index];
|
|
164
|
+
if ((index + 1) == list.length) {
|
|
165
|
+
value = value + str;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
value = value + str + ':';
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return value;
|
|
174
|
+
}
|
|
175
|
+
prepareTemplate(tempList, moduleName) {
|
|
176
|
+
let preParedList = {};
|
|
177
|
+
if (tempList && tempList.length > 0) {
|
|
178
|
+
tempList.forEach((temp) => {
|
|
179
|
+
let name = moduleName + "_" + temp.name;
|
|
180
|
+
preParedList[name] = temp;
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
return preParedList;
|
|
184
|
+
}
|
|
185
|
+
getTempNameFromPayload(payload) {
|
|
186
|
+
let value = '';
|
|
187
|
+
if (Object.keys(payload).length > 0) {
|
|
188
|
+
let crList = payload['crList'];
|
|
189
|
+
if (crList && crList.length > 0) {
|
|
190
|
+
let criteria = crList[0];
|
|
191
|
+
value = criteria['fValue'];
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return value;
|
|
195
|
+
}
|
|
196
|
+
getJsonSizeInKilobyte(obj) {
|
|
197
|
+
const bytes = new TextEncoder().encode(JSON.stringify(obj)).length;
|
|
198
|
+
const kiloBytes = (bytes / 1024).toFixed(2);
|
|
199
|
+
//const megaBytes = kiloBytes / 1024;
|
|
200
|
+
return Number(kiloBytes);
|
|
201
|
+
}
|
|
202
|
+
removeSpaceFromString(str) {
|
|
203
|
+
if (str && typeof str == "string") {
|
|
204
|
+
return str.trim();
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
return str;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
checkBlankProperties(data) {
|
|
211
|
+
const objWithoutNull = { ...data };
|
|
212
|
+
Object.keys(objWithoutNull).forEach(key => {
|
|
213
|
+
if (objWithoutNull[key] === "") {
|
|
214
|
+
objWithoutNull[key] = null;
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
return objWithoutNull;
|
|
218
|
+
}
|
|
219
|
+
// getOperators(type:string,dataTye?:string){
|
|
220
|
+
// let operatorList = {...this.commonOperators};
|
|
221
|
+
// switch (type){
|
|
222
|
+
// case "date":
|
|
223
|
+
// operatorList['cntsic'] = 'CONTAINS_IGNORE_CASE';
|
|
224
|
+
// operatorList['lt'] = 'LESS_THAN';
|
|
225
|
+
// operatorList['lte'] = "RANGE_BORDER_LESS_THAN_INCLUSIVE";
|
|
226
|
+
// operatorList['gt'] = 'GREATER_THAN';
|
|
227
|
+
// operatorList['gte'] = 'RANGE_BORDER_GREATER_THAN_INCLUSIVE';
|
|
228
|
+
// break;
|
|
229
|
+
// case "number":
|
|
230
|
+
// operatorList['lt'] = 'LESS_THAN';
|
|
231
|
+
// operatorList['lte'] = "RANGE_BORDER_LESS_THAN_INCLUSIVE";
|
|
232
|
+
// operatorList['gt'] = 'GREATER_THAN';
|
|
233
|
+
// operatorList['gte'] = 'RANGE_BORDER_GREATER_THAN_INCLUSIVE';
|
|
234
|
+
// break;
|
|
235
|
+
// case "string":
|
|
236
|
+
// operatorList['stw'] = "STARTS_WITH";
|
|
237
|
+
// operatorList['stwic'] = "STARTS_WITH_IGNORE_CASE";
|
|
238
|
+
// operatorList['edw'] = 'ENDS_WITH';
|
|
239
|
+
// operatorList['edwic'] = 'ENDS_WITH_IGNORE_CASE';
|
|
240
|
+
// operatorList['cntsic'] = 'CONTAINS_IGNORE_CASE';
|
|
241
|
+
// operatorList['ncnts'] = 'NOT_CONTAINS';
|
|
242
|
+
// operatorList['ncntsic'] = 'NOT_CONTAINS_IGNORE_CASE';
|
|
243
|
+
// break;
|
|
244
|
+
// default:
|
|
245
|
+
// break;
|
|
246
|
+
// }
|
|
247
|
+
// let sortValue = this.sortOperators(operatorList);
|
|
248
|
+
// if(dataTye == 'list'){
|
|
249
|
+
// return this.mapObjectToListOfString(sortValue);
|
|
250
|
+
// }else{
|
|
251
|
+
// return sortValue;
|
|
252
|
+
// }
|
|
253
|
+
// }
|
|
254
|
+
getOperators(type, name) {
|
|
255
|
+
return Operator.getOperators(type, name);
|
|
256
|
+
}
|
|
257
|
+
sortOperators(operatorList) {
|
|
258
|
+
const sortedKeys = Object.keys(operatorList).sort();
|
|
259
|
+
const sortedOperatorList = {};
|
|
260
|
+
sortedKeys.forEach(key => {
|
|
261
|
+
sortedOperatorList[key] = operatorList[key];
|
|
262
|
+
});
|
|
263
|
+
return sortedOperatorList;
|
|
264
|
+
}
|
|
265
|
+
mapObjectToListOfString(mapObject) {
|
|
266
|
+
let List = [];
|
|
267
|
+
if (mapObject && Object.keys(mapObject).length > 0) {
|
|
268
|
+
Object.keys(mapObject).forEach((key) => {
|
|
269
|
+
List.push(mapObject[key]);
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
return List;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
CoreFunctionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CoreFunctionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
276
|
+
CoreFunctionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CoreFunctionService, providedIn: 'root' });
|
|
277
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CoreFunctionService, decorators: [{
|
|
278
|
+
type: Injectable,
|
|
279
|
+
args: [{
|
|
280
|
+
providedIn: 'root'
|
|
281
|
+
}]
|
|
282
|
+
}], ctorParameters: function () { return []; } });
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1mdW5jdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9jb21tb24tdXRpbHMvY29yZS1mdW5jdGlvbi9jb3JlLWZ1bmN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBTTNELE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsd0JBQXdCO0lBQ3hCLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsdUJBQXVCO0lBQ3ZCLDBDQUEwQztJQUMxQyxzQkFBc0I7SUFDdEIsS0FBSztJQUVMLGdCQUFnQixDQUFDO0lBQ2pCLFVBQVUsQ0FBQyxLQUFTO1FBQ2xCLElBQUcsS0FBSyxJQUFJLEtBQUssSUFBSSxTQUFTLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFDO1lBQy9ILE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBSTtZQUNILE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBQ0QsdUJBQXVCLENBQUMsR0FBTztRQUM3QixJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3BCLElBQUksV0FBVyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDakMsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUM1QixJQUFJLElBQUksR0FBTyxFQUFFLENBQUM7UUFDbEIsSUFBSSxPQUFPLEdBQU8sRUFBRSxDQUFDO1FBQ3JCLElBQUksY0FB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QUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFDLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUE7U0FDSDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7aUhBelFVLG1CQUFtQjtxSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9vcGVyYXRvci9vcGVyYXRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3BlcmF0b3JUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2VudW1zL29wZXJhdG9yX3R5cGUuZW51bSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlRnVuY3Rpb25TZXJ2aWNlIHtcclxuICAvLyBjb21tb25PcGVyYXRvcnM6YW55PXtcclxuICAvLyAgIGVxIDpcIkVRVUFMXCIsXHJcbiAgLy8gICBpbiA6IFwiSU5cIixcclxuICAvLyAgIG5lcSA6IFwiTk9UX0VRVUFMXCIsXHJcbiAgLy8gICAvLyBzdHdpYyA6IFwiU1RBUlRTX1dJVEhfSUdOT1JFX0NBU0VcIixcclxuICAvLyAgIGNudHMgOiBcIkNPTlRBSU5TXCJcclxuICAvLyB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG4gIGlzTm90QmxhbmsodmFsdWU6YW55KXtcclxuICAgIGlmKHZhbHVlICYmIHZhbHVlICE9IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9ICcnICYmIEpTT04uc3RyaW5naWZ5KHZhbHVlKSAhPSBcInt9XCIgJiYgSlNPTi5zdHJpbmdpZnkodmFsdWUpICE9IFwiW11cIil7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0TW9kdWxlc0Zyb21NYXBPYmplY3Qob2JqOmFueSl7XHJcbiAgICBsZXQgdXNlciA9IG9iai51c2VyO1xyXG4gICAgbGV0IHBlcm1pc3Npb25zID0gb2JqLnBlcm1pc3Npb247XHJcbiAgICBsZXQgcm9sbExpc3QgPSBvYmoucm9sbExpc3Q7XHJcbiAgICBsZXQgdXR2bjphbnkgPSB7fTtcclxuICAgIGxldCBtb2R1bGVzOmFueSA9IFtdO1xyXG4gICAgbGV0IHBlcm1pc3Npb25MaXN0ID0ge307XHJcbiAgICBpZihwZXJtaXNzaW9ucyAmJiBPYmplY3Qua2V5cyhwZXJtaXNzaW9ucykubGVuZ3RoID4gMCl7XHJcbiAgICAgIE9iamVjdC5rZXlzKHBlcm1pc3Npb25zKS5mb3JFYWNoKChtb2tleSxpKSA9PiB7XHJcbiAgICAgICAgbGV0IG1vZHVsZU9iajphbnkgPSB7fTtcclxuICAgICAgICBsZXQgbW9kdWxlID0gcGVybWlzc2lvbnNbbW9rZXldO1xyXG4gICAgICAgIGlmKG1vZHVsZSAmJiBtb2R1bGUuZGV0YWlscyl7XHJcbiAgICAgICAgICBtb2R1bGVPYmogPSBtb2R1bGUuZGV0YWlscztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG1lbnVMaXN0OmFueSA9IFtdO1xyXG4gICAgICAgIGlmKG1vZHVsZSAmJiBtb2R1bGUubWVudU1hcCl7XHJcbiAgICAgICAgICBsZXQgbWVudU1hcCA9IG1vZHVsZS5tZW51TWFwO1xyXG4gICAgICAgICAgaWYoT2JqZWN0LmtleXMobWVudU1hcCkubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG1lbnVNYXApLmZvckVhY2goKG1la2V5LGopID0+IHtcclxuICAgICAgICAgICAgICBsZXQgbWVudW9iajphbnkgPSB7fTtcclxuICAgICAgICAgICAgICBsZXQgbWVudSA9IG1lbnVNYXBbbWVrZXldO1xyXG4gICAgICAgICAgICAgIGlmKG1lbnUgJiYgbWVudS5kZXRhaWxzKXtcclxuICAgICAgICAgICAgICAgIG1lbnVvYmogPSBtZW51LmRldGFpbHM7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxldCBzdWJtZW51TGlzdDphbnkgPSBbXTtcclxuICAgICAgICAgICAgICBpZihtZW51ICYmIG1lbnUuc3VibWVudU1hcCl7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3VibWVudU1hcCA9IG1lbnUuc3VibWVudU1hcDtcclxuICAgICAgICAgICAgICAgIGlmKE9iamVjdC5rZXlzKHN1Ym1lbnVNYXApLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhzdWJtZW51TWFwKS5mb3JFYWNoKChzbWtleSxrKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1Ym1lbnVPYmo6YW55ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1Ym1lbnUgPSBzdWJtZW51TWFwW3Nta2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBpZihzdWJtZW51ICYmIHN1Ym1lbnUuZGV0YWlscyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdWJtZW51T2JqID0gc3VibWVudS5kZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYk9yUGVybWlzc2lvbihzdWJtZW51LHBlcm1pc3Npb25MaXN0LHN1Ym1lbnVPYmopO1xyXG4gICAgICAgICAgICAgICAgICAgIHN1Ym1lbnVMaXN0LnB1c2goc3VibWVudU9iaik7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJPclBlcm1pc3Npb24obWVudSxwZXJtaXNzaW9uTGlzdCxtZW51b2JqKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYoc3VibWVudUxpc3QgJiYgc3VibWVudUxpc3QubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICBtZW51b2JqWydzdWJtZW51J10gPSB0aGlzLnNvcnRNZW51KHN1Ym1lbnVMaXN0KTtcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIG1lbnVvYmpbJ3N1Ym1lbnUnXSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG1lbnVMaXN0LnB1c2gobWVudW9iaik7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKG1lbnVMaXN0ICYmIG1lbnVMaXN0Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgbW9kdWxlT2JqWydtZW51X2xpc3QnXSA9IHRoaXMuc29ydE1lbnUobWVudUxpc3QpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgbW9kdWxlT2JqWydtZW51X2xpc3QnXSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1vZHVsZXMucHVzaChtb2R1bGVPYmopO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGxldCBtb2RpZmllZE1vZHVsZXMgPSB0aGlzLnNldERlZmF1bHRJbmRleEZvck1vZHVsZXMobW9kdWxlcyk7XHJcbiAgICB1dHZuWydtb2R1bGVzJ10gPSB0aGlzLnNvcnRNZW51KG1vZGlmaWVkTW9kdWxlcylcclxuICAgIHV0dm5bJ3Blcm1pc3Npb24nXSA9IHBlcm1pc3Npb25MaXN0O1xyXG4gICAgdXR2blsndXNlciddID0gdXNlcjtcclxuICAgIHV0dm5bJ3JvbGxMaXN0J10gPSByb2xsTGlzdDtcclxuICAgIHJldHVybiB1dHZuO1xyXG4gIH1cclxuICBzZXRUYWJPclBlcm1pc3Npb24obWVudTphbnkscGVybWlzc2lvbkxpc3Q6YW55LG1lbnVPYmo6YW55KXtcclxuICAgIGxldCB0YWJMaXN0OmFueT1bXTtcclxuICAgIGlmKG1lbnUgJiYgbWVudS50ZW1wbGF0ZVRhYk1hcCl7XHJcbiAgICAgIGxldCB0YWJzTWFwID0gbWVudS50ZW1wbGF0ZVRhYk1hcDtcclxuICAgICAgaWYoT2JqZWN0LmtleXModGFic01hcCkubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGFic01hcCkuZm9yRWFjaCgodGtleSxsKSA9PiB7XHJcbiAgICAgICAgICBsZXQgdGFiID0gdGFic01hcFt0a2V5XTtcclxuICAgICAgICAgIGNvbnN0IG1vZGlmeVRhYjphbnkgPSB7fTtcclxuICAgICAgICAgIG1vZGlmeVRhYlsnZmllbGRfbmFtZSddID0gdGtleTtcclxuICAgICAgICAgIG1vZGlmeVRhYlsnbGFiZWwnXSA9IHRhYj8ubGFiZWw7XHJcbiAgICAgICAgICBtb2RpZnlUYWJbJ2dyaWQnXSA9IHRhYj8uZ3JpZDtcclxuICAgICAgICAgIGlmKHRhYiAmJiB0YWIuZGV0YWlscyAmJiB0YWIuZGV0YWlscy5faWQpe1xyXG4gICAgICAgICAgICBtb2RpZnlUYWJbJ19pZCddID0gdGFiLmRldGFpbHMuX2lkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0YWJMaXN0LnB1c2gobW9kaWZ5VGFiKTtcclxuICAgICAgICAgIGlmKHRrZXkgaW4gcGVybWlzc2lvbkxpc3Qpe1xyXG4gICAgICAgICAgICBpZih0YWIgJiYgdGFiLmFjY2Vzcyl7XHJcbiAgICAgICAgICAgICAgbGV0IG9sZFBlcm1pc3NvaW46QXJyYXk8c3RyaW5nPiA9IHBlcm1pc3Npb25MaXN0W3RrZXldO1xyXG4gICAgICAgICAgICAgIGxldCBuZXdQZXJtaXNzaW9uID0gdGFiLmFjY2VzcztcclxuICAgICAgICAgICAgICBpZihuZXdQZXJtaXNzaW9uICYmIG5ld1Blcm1pc3Npb24ubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICBuZXdQZXJtaXNzaW9uLmZvckVhY2goKHBlcm1pc3Npb246c3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmKCFvbGRQZXJtaXNzb2luLmluY2x1ZGVzKHBlcm1pc3Npb24pKXtcclxuICAgICAgICAgICAgICAgICAgICBvbGRQZXJtaXNzb2luLnB1c2gocGVybWlzc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBwZXJtaXNzaW9uTGlzdFt0a2V5XSA9IG9sZFBlcm1pc3NvaW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBpZih0YWIgJiYgdGFiLmFjY2Vzcyl7XHJcbiAgICAgICAgICAgICAgcGVybWlzc2lvbkxpc3RbdGtleV0gPSB0YWIuYWNjZXNzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIG1lbnVPYmpbJ3RhYkxpc3QnXT10YWJMaXN0O1xyXG4gIH1cclxuICBzZXREZWZhdWx0SW5kZXhGb3JNb2R1bGVzKG1vZHVsZXM6YW55KXtcclxuICAgIGlmKG1vZHVsZXM/Lmxlbmd0aD4wKXtcclxuICAgICAgbGV0IG1heEluZGV4ID0gbW9kdWxlcy5sZW5ndGhcclxuICAgICAgbW9kdWxlcy5mb3JFYWNoKChtb2R1bGU6YW55KSA9PiB7XHJcbiAgICAgICAgaWYoIW1vZHVsZT8uaW5kZXgpe1xyXG4gICAgICAgIG1vZHVsZVtcImluZGV4XCJdID0gbWF4SW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vZHVsZXM7XHJcbiAgfVxyXG4gIHNvcnRNZW51KG1lbnVMaXN0OmFueSl7XHJcbiAgICBsZXQgbGlzdDphbnk9W107XHJcbiAgICBsZXQgbWxpc3QgPSBtZW51TGlzdC5zb3J0KChhOmFueSxiOmFueSkgPT4ge1xyXG4gICAgICBpZiAoYS5pbmRleCA9PT0gYi5pbmRleCkge1xyXG4gICAgICAgIC8vIElmIGBpbmRleGAgaXMgdGhlIHNhbWUsIHNvcnQgYnkgYG5hbWVgIGFscGhhYmV0aWNhbGx5XHJcbiAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBPdGhlcndpc2UsIHNvcnQgYnkgYGluZGV4YFxyXG4gICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmKG1saXN0ICYmIG1saXN0Lmxlbmd0aCA+IDApe1xyXG4gICAgICBtbGlzdC5mb3JFYWNoKChtOmFueSkgPT4ge1xyXG4gICAgICAgIGxpc3QucHVzaChtKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGlzdDtcclxuICB9XHJcbiAgY29udmVydExpc3RUb0NvbG9uU3RyaW5nKGxpc3Q6YW55LHR5cGU6YW55LGtleT86c3RyaW5nKXtcclxuICAgIGxldCB2YWx1ZSA9IFwiXCI7XHJcbiAgICBpZih0eXBlLnRvTG93ZXJDYXNlKCkgPT0gJ3RleHQnKXtcclxuICAgICAgaWYobGlzdCAmJiBsaXN0Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgY29uc3Qgc3RyID0gbGlzdFtpbmRleF07XHJcbiAgICAgICAgICBpZigoaW5kZXggKyAxKSA9PSBsaXN0Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKyBzdHI7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAgKyBzdHIgKyc6JztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcbiAgcHJlcGFyZVRlbXBsYXRlKHRlbXBMaXN0OmFueSxtb2R1bGVOYW1lOnN0cmluZyl7XHJcbiAgICBsZXQgcHJlUGFyZWRMaXN0OmFueSA9IHt9O1xyXG4gICAgaWYodGVtcExpc3QgJiYgdGVtcExpc3QubGVuZ3RoID4gMCl7XHJcbiAgICAgIHRlbXBMaXN0LmZvckVhY2goKHRlbXA6YW55KSA9PiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSBtb2R1bGVOYW1lK1wiX1wiK3RlbXAubmFtZTtcclxuICAgICAgICBwcmVQYXJlZExpc3RbbmFtZV0gPSB0ZW1wO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcmVQYXJlZExpc3Q7XHJcbiAgfVxyXG4gIGdldFRlbXBOYW1lRnJvbVBheWxvYWQocGF5bG9hZDphbnkpe1xyXG4gICAgbGV0IHZhbHVlID0gJyc7XHJcbiAgICBpZihPYmplY3Qua2V5cyhwYXlsb2FkKS5sZW5ndGggPiAwKXtcclxuICAgICAgbGV0IGNyTGlzdCA9IHBheWxvYWRbJ2NyTGlzdCddO1xyXG4gICAgICBpZihjckxpc3QgJiYgY3JMaXN0Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgIGxldCBjcml0ZXJpYSA9IGNyTGlzdFswXTtcclxuICAgICAgICB2YWx1ZSA9IGNyaXRlcmlhWydmVmFsdWUnXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuICBnZXRKc29uU2l6ZUluS2lsb2J5dGUob2JqOmFueSl7XHJcbiAgICBjb25zdCBieXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShvYmopKS5sZW5ndGg7XHJcbiAgICBjb25zdCBraWxvQnl0ZXMgPSAoYnl0ZXMgLyAxMDI0KS50b0ZpeGVkKDIpO1xyXG4gICAgLy9jb25zdCBtZWdhQnl0ZXMgPSBraWxvQnl0ZXMgLyAxMDI0O1xyXG4gICAgcmV0dXJuIE51bWJlcihraWxvQnl0ZXMpO1xyXG4gIH1cclxuICByZW1vdmVTcGFjZUZyb21TdHJpbmcoc3RyOnN0cmluZyl7XHJcbiAgICBpZihzdHIgJiYgdHlwZW9mIHN0ciA9PSBcInN0cmluZ1wiKXtcclxuICAgICAgcmV0dXJuIHN0ci50cmltKCk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH1cclxuICB9XHJcbiAgY2hlY2tCbGFua1Byb3BlcnRpZXMoZGF0YTphbnkpIHtcclxuICAgIGNvbnN0IG9ialdpdGhvdXROdWxsOmFueSA9IHsuLi5kYXRhfTtcclxuICAgIE9iamVjdC5rZXlzKG9ialdpdGhvdXROdWxsKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGlmIChvYmpXaXRob3V0TnVsbFtrZXldID09PSBcIlwiKSB7XHJcbiAgICAgICAgb2JqV2l0aG91dE51bGxba2V5XSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG9ialdpdGhvdXROdWxsO1xyXG4gIH1cclxuICAvLyBnZXRPcGVyYXRvcnModHlwZTpzdHJpbmcsZGF0YVR5ZT86c3RyaW5nKXtcclxuICAvLyAgIGxldCBvcGVyYXRvckxpc3QgPSB7Li4udGhpcy5jb21tb25PcGVyYXRvcnN9O1xyXG4gIC8vICAgc3dpdGNoICh0eXBlKXtcclxuICAvLyAgICAgY2FzZSBcImRhdGVcIjpcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ2NudHNpYyddID0gJ0NPTlRBSU5TX0lHTk9SRV9DQVNFJztcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ2x0J10gPSAnTEVTU19USEFOJztcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ2x0ZSddID0gXCJSQU5HRV9CT1JERVJfTEVTU19USEFOX0lOQ0xVU0lWRVwiO1xyXG4gIC8vICAgICAgIG9wZXJhdG9yTGlzdFsnZ3QnXSA9ICdHUkVBVEVSX1RIQU4nO1xyXG4gIC8vICAgICAgIG9wZXJhdG9yTGlzdFsnZ3RlJ10gPSAnUkFOR0VfQk9SREVSX0dSRUFURVJfVEhBTl9JTkNMVVNJVkUnO1xyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgLy8gICAgICAgb3BlcmF0b3JMaXN0WydsdCddID0gJ0xFU1NfVEhBTic7XHJcbiAgLy8gICAgICAgb3BlcmF0b3JMaXN0WydsdGUnXSA9IFwiUkFOR0VfQk9SREVSX0xFU1NfVEhBTl9JTkNMVVNJVkVcIjtcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ2d0J10gPSAnR1JFQVRFUl9USEFOJztcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ2d0ZSddID0gJ1JBTkdFX0JPUkRFUl9HUkVBVEVSX1RIQU5fSU5DTFVTSVZFJztcclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgICAgY2FzZSBcInN0cmluZ1wiOlxyXG4gIC8vICAgICAgIG9wZXJhdG9yTGlzdFsnc3R3J10gPSBcIlNUQVJUU19XSVRIXCI7XHJcbiAgLy8gICAgICAgb3BlcmF0b3JMaXN0WydzdHdpYyddID0gXCJTVEFSVFNfV0lUSF9JR05PUkVfQ0FTRVwiO1xyXG4gIC8vICAgICAgIG9wZXJhdG9yTGlzdFsnZWR3J10gPSAnRU5EU19XSVRIJztcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ2Vkd2ljJ10gPSAnRU5EU19XSVRIX0lHTk9SRV9DQVNFJztcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ2NudHNpYyddID0gJ0NPTlRBSU5TX0lHTk9SRV9DQVNFJztcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ25jbnRzJ10gPSAnTk9UX0NPTlRBSU5TJztcclxuICAvLyAgICAgICBvcGVyYXRvckxpc3RbJ25jbnRzaWMnXSA9ICdOT1RfQ09OVEFJTlNfSUdOT1JFX0NBU0UnO1xyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICBkZWZhdWx0OlxyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgbGV0IHNvcnRWYWx1ZSA9IHRoaXMuc29ydE9wZXJhdG9ycyhvcGVyYXRvckxpc3QpO1xyXG4gIC8vICAgaWYoZGF0YVR5ZSA9PSAnbGlzdCcpe1xyXG4gIC8vICAgICByZXR1cm4gdGhpcy5tYXBPYmplY3RUb0xpc3RPZlN0cmluZyhzb3J0VmFsdWUpO1xyXG4gIC8vICAgfWVsc2V7XHJcbiAgLy8gICAgIHJldHVybiBzb3J0VmFsdWU7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBnZXRPcGVyYXRvcnModHlwZTogT3BlcmF0b3JUeXBlLG5hbWU6c3RyaW5nKXtcclxuICAgIHJldHVybiBPcGVyYXRvci5nZXRPcGVyYXRvcnModHlwZSxuYW1lKTtcclxuICB9XHJcblxyXG4gIHNvcnRPcGVyYXRvcnMob3BlcmF0b3JMaXN0OmFueSl7XHJcbiAgICBjb25zdCBzb3J0ZWRLZXlzID0gT2JqZWN0LmtleXMob3BlcmF0b3JMaXN0KS5zb3J0KCk7XHJcbiAgICAgY29uc3Qgc29ydGVkT3BlcmF0b3JMaXN0OmFueSA9IHt9O1xyXG4gICAgIHNvcnRlZEtleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICBzb3J0ZWRPcGVyYXRvckxpc3Rba2V5XSA9IG9wZXJhdG9yTGlzdFtrZXldO1xyXG4gICAgIH0pO1xyXG5cclxuICAgICByZXR1cm4gc29ydGVkT3BlcmF0b3JMaXN0O1xyXG4gIH1cclxuICBtYXBPYmplY3RUb0xpc3RPZlN0cmluZyhtYXBPYmplY3Q6YW55KXtcclxuICAgIGxldCBMaXN0OmFueSA9IFtdO1xyXG4gICAgaWYobWFwT2JqZWN0ICYmIE9iamVjdC5rZXlzKG1hcE9iamVjdCkubGVuZ3RoID4gMCl7XHJcbiAgICAgIE9iamVjdC5rZXlzKG1hcE9iamVjdCkuZm9yRWFjaCgoa2V5KT0+e1xyXG4gICAgICAgIExpc3QucHVzaChtYXBPYmplY3Rba2V5XSk7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gTGlzdDtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../data-share/data-share.service";
|
|
4
|
+
export class CustomvalidationService {
|
|
5
|
+
constructor(dataShareService) {
|
|
6
|
+
this.dataShareService = dataShareService;
|
|
7
|
+
}
|
|
8
|
+
patternValidator() {
|
|
9
|
+
return (control) => {
|
|
10
|
+
if (!control.value) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
const regex = new RegExp('^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[~!@#$%^&*?.=()-+])(?=.*?[0-9]).{8,}$');
|
|
14
|
+
let valid = regex.test(control.value);
|
|
15
|
+
let msg = "Minimum 8 characters";
|
|
16
|
+
if (!valid) {
|
|
17
|
+
//let checkNo = new RegExp('^(?=.*?[0-9])$').test(control.value);
|
|
18
|
+
if (!new RegExp('[0-9]').test(control.value)) {
|
|
19
|
+
msg = "At least one number";
|
|
20
|
+
}
|
|
21
|
+
else if (!new RegExp('[A-Z]').test(control.value)) {
|
|
22
|
+
msg = "At least one uppercase letter";
|
|
23
|
+
}
|
|
24
|
+
else if (!new RegExp('[~!@#$%^&*?.=()-+]').test(control.value)) {
|
|
25
|
+
msg = "At least one special character";
|
|
26
|
+
}
|
|
27
|
+
else if (!new RegExp('[a-z]').test(control.value)) {
|
|
28
|
+
msg = "At least one lowercase letter";
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
msg = "Minimum 8 characters";
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else if (this.checkCommonPassword(control.value)) {
|
|
35
|
+
valid = false;
|
|
36
|
+
msg = "Common Passwords are not allowed";
|
|
37
|
+
}
|
|
38
|
+
return valid ? null : { invalidPassword: msg };
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
checkCommonPassword(value) {
|
|
42
|
+
let check = false;
|
|
43
|
+
let commonPasswordList = ['Test@123', 'Test@12345'];
|
|
44
|
+
for (let index = 0; index < commonPasswordList.length; index++) {
|
|
45
|
+
const element = commonPasswordList[index];
|
|
46
|
+
if (element === value) {
|
|
47
|
+
check = true;
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return check;
|
|
52
|
+
}
|
|
53
|
+
checkDates(endDate, startDate) {
|
|
54
|
+
return (formGroup) => {
|
|
55
|
+
const startDateControl = formGroup.controls[startDate];
|
|
56
|
+
const endDateControl = formGroup.controls[endDate];
|
|
57
|
+
const date1 = new Date(startDateControl.value);
|
|
58
|
+
const date2 = new Date(endDateControl.value);
|
|
59
|
+
if (date1 > date2) {
|
|
60
|
+
endDateControl.setErrors({ notValid: true });
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
endDateControl.setErrors(null);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
MatchPassword(password, confirmPassword) {
|
|
68
|
+
return (formGroup) => {
|
|
69
|
+
const passwordControl = formGroup.controls[password];
|
|
70
|
+
const confirmPasswordControl = formGroup.controls[confirmPassword];
|
|
71
|
+
if (!passwordControl || !confirmPasswordControl) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
if (confirmPasswordControl.errors && !confirmPasswordControl.errors.passwordMismatch) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
if (passwordControl.value !== confirmPasswordControl.value) {
|
|
78
|
+
confirmPasswordControl.setErrors({ passwordMismatch: true });
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
confirmPasswordControl.setErrors(null);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
userNameValidator(userControl) {
|
|
86
|
+
return new Promise(resolve => {
|
|
87
|
+
setTimeout(() => {
|
|
88
|
+
if (this.validateUserName(userControl.value)) {
|
|
89
|
+
resolve({ userNameNotAvailable: true });
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
resolve(null);
|
|
93
|
+
}
|
|
94
|
+
}, 1000);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
validateUserName(userName) {
|
|
98
|
+
const UserList = ['ankit', 'admin', 'user', 'superuser'];
|
|
99
|
+
return (UserList.indexOf(userName) > -1);
|
|
100
|
+
}
|
|
101
|
+
checkLimit(min, max) {
|
|
102
|
+
return (c) => {
|
|
103
|
+
if (c.value && (isNaN(c.value) || c.value < min || c.value > max)) {
|
|
104
|
+
return { 'range': true };
|
|
105
|
+
}
|
|
106
|
+
return null;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
isValidGSTNumber(control) {
|
|
110
|
+
return new Promise((resolve) => {
|
|
111
|
+
setTimeout(() => {
|
|
112
|
+
let gstin = control.value;
|
|
113
|
+
if (gstin == "" || gstin == null || gstin == undefined || (gstin.length == 2 && gstin.toUpperCase() == "NA")) {
|
|
114
|
+
resolve(null);
|
|
115
|
+
}
|
|
116
|
+
if (gstin != null && gstin.length !== 15) {
|
|
117
|
+
resolve({ invalidGSTNumber: true });
|
|
118
|
+
}
|
|
119
|
+
if (this.validatePattern(gstin)) {
|
|
120
|
+
const check = gstin[14];
|
|
121
|
+
const checkCondition = check === this.calcCheckSum(gstin.toUpperCase());
|
|
122
|
+
if (checkCondition) {
|
|
123
|
+
resolve(null);
|
|
124
|
+
const object = {
|
|
125
|
+
"name": "gst_number",
|
|
126
|
+
"value": control.value
|
|
127
|
+
};
|
|
128
|
+
this.dataShareService.setValidationCondition(object);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
resolve({ invalidGSTNumber: true });
|
|
132
|
+
const object = {
|
|
133
|
+
"name": "invalid"
|
|
134
|
+
};
|
|
135
|
+
this.dataShareService.setValidationCondition(object);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
resolve({ invalidGSTNumber: true });
|
|
139
|
+
const object = {
|
|
140
|
+
"name": "invalid"
|
|
141
|
+
};
|
|
142
|
+
this.dataShareService.setValidationCondition(object);
|
|
143
|
+
}, 1000);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
calcCheckSum(gstin) {
|
|
147
|
+
var GSTN_CODEPOINT_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
148
|
+
var factor = 2;
|
|
149
|
+
var sum = 0;
|
|
150
|
+
var checkCodePoint = 0;
|
|
151
|
+
var mod = GSTN_CODEPOINT_CHARS.length;
|
|
152
|
+
var i;
|
|
153
|
+
for (i = gstin.length - 2; i >= 0; i--) {
|
|
154
|
+
var codePoint = -1;
|
|
155
|
+
for (var j = 0; j < GSTN_CODEPOINT_CHARS.length; j++) {
|
|
156
|
+
if (GSTN_CODEPOINT_CHARS[j] === gstin[i]) {
|
|
157
|
+
codePoint = j;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
var digit = factor * codePoint;
|
|
161
|
+
factor = factor === 2 ? 1 : 2;
|
|
162
|
+
digit = Math.floor(digit / mod) + (digit % mod);
|
|
163
|
+
sum += digit;
|
|
164
|
+
}
|
|
165
|
+
checkCodePoint = (mod - (sum % mod)) % mod;
|
|
166
|
+
return GSTN_CODEPOINT_CHARS[checkCodePoint];
|
|
167
|
+
}
|
|
168
|
+
// GSTIN Regex validation result
|
|
169
|
+
validatePattern(gstin) {
|
|
170
|
+
// eslint-disable-next-line max-len
|
|
171
|
+
// var gstinRegexPattern = /^([0-2][0-9]|[3][0-8])[A-Z]{3}[ABCFGHLJPTK][A-Z]\d{4}[A-Z][A-Z0-9][Z][A-Z0-9]$/;
|
|
172
|
+
const regex = new RegExp('^[0-9]{2}[A-Z]{4}[A-Z0-9]{1}[0-9]{4}[A-Z]{1}[1-9]{1}[A-Z]{1}[A-Z0-9]{1}$');
|
|
173
|
+
const valid = regex.test(gstin);
|
|
174
|
+
return valid;
|
|
175
|
+
//return gstinRegexPattern.test(gstin);
|
|
176
|
+
}
|
|
177
|
+
isValidData(control) {
|
|
178
|
+
return new Promise(resolve => {
|
|
179
|
+
setTimeout(() => {
|
|
180
|
+
let data = control.value;
|
|
181
|
+
if (data == "" || data == null || data == undefined) {
|
|
182
|
+
resolve(null);
|
|
183
|
+
}
|
|
184
|
+
else if (typeof data == 'object') {
|
|
185
|
+
resolve(null);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
resolve({ invaliData: true });
|
|
189
|
+
}
|
|
190
|
+
}, 1000);
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
CustomvalidationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomvalidationService, deps: [{ token: i1.DataShareService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
195
|
+
CustomvalidationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomvalidationService, providedIn: 'root' });
|
|
196
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomvalidationService, decorators: [{
|
|
197
|
+
type: Injectable,
|
|
198
|
+
args: [{
|
|
199
|
+
providedIn: 'root'
|
|
200
|
+
}]
|
|
201
|
+
}], ctorParameters: function () { return [{ type: i1.DataShareService }]; } });
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tdmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9jdXN0b212YWxpZGF0aW9uL2N1c3RvbXZhbGlkYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFRM0MsTUFBTSxPQUFPLHVCQUF1QjtJQUVsQyxZQUNVLGdCQUFpQztRQUFqQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO0lBQ3ZDLENBQUM7SUFFTCxnQkFBZ0I7UUFDZCxPQUFPLENBQUMsT0FBd0IsRUFBMEIsRUFBRTtZQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDbEIsT0FBTyxJQUFLLENBQUM7YUFDZDtZQUNELE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLHNFQUFzRSxDQUFDLENBQUM7WUFDakcsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsSUFBSSxHQUFHLEdBQUcsc0JBQXNCLENBQUM7WUFDakMsSUFBRyxDQUFDLEtBQUssRUFBQztnQkFDUixpRUFBaUU7Z0JBQ2pFLElBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFDO29CQUMxQyxHQUFHLEdBQUcscUJBQXFCLENBQUM7aUJBQzdCO3FCQUFLLElBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFDO29CQUNoRCxHQUFHLEdBQUcsK0JBQStCLENBQUM7aUJBQ3ZDO3FCQUFLLElBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxvQkFBb0Is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dUJBQXVCLGNBRnRCLE1BQU07NEZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVmFsaWRhdG9yRm4sIEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRGF0YVNoYXJlU2VydmljZSB9IGZyb20gJy4uL2RhdGEtc2hhcmUvZGF0YS1zaGFyZS5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEN1c3RvbXZhbGlkYXRpb25TZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRhdGFTaGFyZVNlcnZpY2U6RGF0YVNoYXJlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIHBhdHRlcm5WYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0+IHtcclxuICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGwhO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXig/PS4qP1tBLVpdKSg/PS4qP1thLXpdKSg/PS4qP1t+IUAjJCVeJio/Lj0oKS0rXSkoPz0uKj9bMC05XSkuezgsfSQnKTtcclxuICAgICAgbGV0IHZhbGlkID0gcmVnZXgudGVzdChjb250cm9sLnZhbHVlKTtcclxuICAgICAgbGV0IG1zZyA9IFwiTWluaW11bSA4IGNoYXJhY3RlcnNcIjtcclxuICAgICAgaWYoIXZhbGlkKXtcclxuICAgICAgICAvL2xldCBjaGVja05vID0gbmV3IFJlZ0V4cCgnXig/PS4qP1swLTldKSQnKS50ZXN0KGNvbnRyb2wudmFsdWUpO1xyXG4gICAgICAgIGlmKCFuZXcgUmVnRXhwKCdbMC05XScpLnRlc3QoY29udHJvbC52YWx1ZSkpe1xyXG4gICAgICAgICAgbXNnID0gXCJBdCBsZWFzdCBvbmUgbnVtYmVyXCI7XHJcbiAgICAgICAgfWVsc2UgaWYoIW5ldyBSZWdFeHAoJ1tBLVpdJykudGVzdChjb250cm9sLnZhbHVlKSl7XHJcbiAgICAgICAgICBtc2cgPSBcIkF0IGxlYXN0IG9uZSB1cHBlcmNhc2UgbGV0dGVyXCI7XHJcbiAgICAgICAgfWVsc2UgaWYoIW5ldyBSZWdFeHAoJ1t+IUAjJCVeJio/Lj0oKS0rXScpLnRlc3QoY29udHJvbC52YWx1ZSkpe1xyXG4gICAgICAgICAgbXNnID0gXCJBdCBsZWFzdCBvbmUgc3BlY2lhbCBjaGFyYWN0ZXJcIjtcclxuICAgICAgICB9ZWxzZSBpZighbmV3IFJlZ0V4cCgnW2Etel0nKS50ZXN0KGNvbnRyb2wudmFsdWUpKXtcclxuICAgICAgICAgIG1zZyA9IFwiQXQgbGVhc3Qgb25lIGxvd2VyY2FzZSBsZXR0ZXJcIjtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIG1zZyA9IFwiTWluaW11bSA4IGNoYXJhY3RlcnNcIjtcclxuICAgICAgICB9XHJcbiAgICAgIH1lbHNlIGlmKHRoaXMuY2hlY2tDb21tb25QYXNzd29yZChjb250cm9sLnZhbHVlKSl7XHJcbiAgICAgICAgdmFsaWQgPSBmYWxzZVxyXG4gICAgICAgIG1zZyA9IFwiQ29tbW9uIFBhc3N3b3JkcyBhcmUgbm90IGFsbG93ZWRcIjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdmFsaWQgPyBudWxsISA6IHsgaW52YWxpZFBhc3N3b3JkOiBtc2cgfTtcclxuICAgIH07XHJcbiAgfVxyXG4gIGNoZWNrQ29tbW9uUGFzc3dvcmQodmFsdWU6c3RyaW5nKXtcclxuICAgIGxldCBjaGVjayA9IGZhbHNlO1xyXG4gICAgbGV0IGNvbW1vblBhc3N3b3JkTGlzdCA9IFsnVGVzdEAxMjMnLCdUZXN0QDEyMzQ1J107XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY29tbW9uUGFzc3dvcmRMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gY29tbW9uUGFzc3dvcmRMaXN0W2luZGV4XTtcclxuICAgICAgaWYoZWxlbWVudCA9PT0gdmFsdWUpe1xyXG4gICAgICAgIGNoZWNrID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNoZWNrO1xyXG4gIH1cclxuICBjaGVja0RhdGVzKGVuZERhdGU6IHN0cmluZywgc3RhcnREYXRlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZUNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbc3RhcnREYXRlXTtcclxuICAgICAgY29uc3QgZW5kRGF0ZUNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZW5kRGF0ZV07XHJcbiAgICAgIGNvbnN0IGRhdGUxID1uZXcgRGF0ZShzdGFydERhdGVDb250cm9sLnZhbHVlKTtcclxuICAgICAgY29uc3QgZGF0ZTIgPW5ldyBEYXRlKGVuZERhdGVDb250cm9sLnZhbHVlKTtcclxuICAgICAgaWYoZGF0ZTEgPiBkYXRlMikge1xyXG4gICAgICAgIGVuZERhdGVDb250cm9sLnNldEVycm9ycyh7IG5vdFZhbGlkOiB0cnVlIH0pO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBlbmREYXRlQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuIH1cclxuXHJcbiAgTWF0Y2hQYXNzd29yZChwYXNzd29yZDogYW55LCBjb25maXJtUGFzc3dvcmQ6IGFueSkge1xyXG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOmFueSA9PiB7XHJcbiAgICAgIGNvbnN0IHBhc3N3b3JkQ29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1twYXNzd29yZF07XHJcbiAgICAgIGNvbnN0IGNvbmZpcm1QYXNzd29yZENvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbY29uZmlybVBhc3N3b3JkXTtcclxuXHJcbiAgICAgIGlmICghcGFzc3dvcmRDb250cm9sIHx8ICFjb25maXJtUGFzc3dvcmRDb250cm9sKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb25maXJtUGFzc3dvcmRDb250cm9sLmVycm9ycyAmJiAhY29uZmlybVBhc3N3b3JkQ29udHJvbC5lcnJvcnMucGFzc3dvcmRNaXNtYXRjaCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocGFzc3dvcmRDb250cm9sLnZhbHVlICE9PSBjb25maXJtUGFzc3dvcmRDb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgY29uZmlybVBhc3N3b3JkQ29udHJvbC5zZXRFcnJvcnMoeyBwYXNzd29yZE1pc21hdGNoOiB0cnVlIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbmZpcm1QYXNzd29yZENvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1c2VyTmFtZVZhbGlkYXRvcih1c2VyQ29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRlVXNlck5hbWUodXNlckNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHsgdXNlck5hbWVOb3RBdmFpbGFibGU6IHRydWUgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAxMDAwKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVVc2VyTmFtZSh1c2VyTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBVc2VyTGlzdCA9IFsnYW5raXQnLCAnYWRtaW4nLCAndXNlcicsICdzdXBlcnVzZXInXTtcclxuICAgIHJldHVybiAoVXNlckxpc3QuaW5kZXhPZih1c2VyTmFtZSkgPiAtMSk7XHJcbiAgfVxyXG4gIGNoZWNrTGltaXQobWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB8IG51bGwgPT4ge1xyXG4gICAgICAgIGlmIChjLnZhbHVlICYmIChpc05hTihjLnZhbHVlKSB8fCBjLnZhbHVlIDwgbWluIHx8IGMudmFsdWUgPiBtYXgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7ICdyYW5nZSc6IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH1cclxuICBpc1ZhbGlkR1NUTnVtYmVyKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGxldCBnc3RpbiA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgICBpZiAoZ3N0aW4gPT0gXCJcIiB8fCBnc3RpbiA9PSBudWxsIHx8IGdzdGluID09IHVuZGVmaW5lZCB8fCAoZ3N0aW4ubGVuZ3RoID09IDIgJiYgZ3N0aW4udG9VcHBlckNhc2UoKSA9PSBcIk5BXCIpKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoIG51bGwgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChnc3RpbiAhPSBudWxsICYmIGdzdGluLmxlbmd0aCAhPT0gMTUpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7IGludmFsaWRHU1ROdW1iZXI6IHRydWUgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy52YWxpZGF0ZVBhdHRlcm4oZ3N0aW4pKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrID0gZ3N0aW5bMTRdO1xyXG4gICAgICAgICAgICBjb25zdCBjaGVja0NvbmRpdGlvbiA9IGNoZWNrID09PSB0aGlzLmNhbGNDaGVja1N1bShnc3Rpbi50b1VwcGVyQ2FzZSgpKVxyXG4gICAgICAgICAgICBpZihjaGVja0NvbmRpdGlvbil7XHJcbiAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcclxuICAgICAgICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgICAgICBcIm5hbWVcIiA6IFwiZ3N0X251bWJlclwiLFxyXG4gICAgICAgICAgICAgICAgXCJ2YWx1ZVwiIDogY29udHJvbC52YWx1ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmRhdGFTaGFyZVNlcnZpY2Uuc2V0VmFsaWRhdGlvbkNvbmRpdGlvbihvYmplY3QpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICByZXNvbHZlKHsgaW52YWxpZEdTVE51bWJlcjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgICAgICBcIm5hbWVcIiA6IFwiaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuZGF0YVNoYXJlU2VydmljZS5zZXRWYWxpZGF0aW9uQ29uZGl0aW9uKG9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc29sdmUoeyBpbnZhbGlkR1NUTnVtYmVyOiB0cnVlIH0pO1xyXG4gICAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICBcIm5hbWVcIiA6IFwiaW52YWxpZFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmRhdGFTaGFyZVNlcnZpY2Uuc2V0VmFsaWRhdGlvbkNvbmRpdGlvbihvYmplY3QpO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgY2FsY0NoZWNrU3VtKGdzdGluOmFueSkge1xyXG4gICAgdmFyIEdTVE5fQ09ERVBPSU5UX0NIQVJTID0gJzAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7XHJcbiAgICB2YXIgZmFjdG9yID0gMjtcclxuICAgIHZhciBzdW0gPSAwO1xyXG4gICAgdmFyIGNoZWNrQ29kZVBvaW50ID0gMDtcclxuICAgIHZhciBtb2QgPSBHU1ROX0NPREVQT0lOVF9DSEFSUy5sZW5ndGg7XHJcbiAgICB2YXIgaTtcclxuXHJcbiAgICBmb3IgKGkgPSBnc3Rpbi5sZW5ndGggLSAyOyBpID49IDA7IGktLSkge1xyXG4gICAgICB2YXIgY29kZVBvaW50ID0gLTE7XHJcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgR1NUTl9DT0RFUE9JTlRfQ0hBUlMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAoR1NUTl9DT0RFUE9JTlRfQ0hBUlNbal0gPT09IGdzdGluW2ldKSB7XHJcbiAgICAgICAgICBjb2RlUG9pbnQgPSBqO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB2YXIgZGlnaXQgPSBmYWN0b3IgKiBjb2RlUG9pbnQ7XHJcbiAgICAgIGZhY3RvciA9IGZhY3RvciA9PT0gMiA/IDEgOiAyO1xyXG4gICAgICBkaWdpdCA9IE1hdGguZmxvb3IoZGlnaXQgLyBtb2QpICsgKGRpZ2l0ICUgbW9kKTtcclxuICAgICAgc3VtICs9IGRpZ2l0O1xyXG4gICAgfVxyXG4gICAgY2hlY2tDb2RlUG9pbnQgPSAobW9kIC0gKHN1bSAlIG1vZCkpICUgbW9kO1xyXG4gICAgcmV0dXJuIEdTVE5fQ09ERVBPSU5UX0NIQVJTW2NoZWNrQ29kZVBvaW50XTtcclxuICB9XHJcblxyXG4gIC8vIEdTVElOIFJlZ2V4IHZhbGlkYXRpb24gcmVzdWx0XHJcbiAgdmFsaWRhdGVQYXR0ZXJuKGdzdGluOmFueSkge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cclxuICAgIC8vIHZhciBnc3RpblJlZ2V4UGF0dGVybiA9IC9eKFswLTJdWzAtOV18WzNdWzAtOF0pW0EtWl17M31bQUJDRkdITEpQVEtdW0EtWl1cXGR7NH1bQS1aXVtBLVowLTldW1pdW0EtWjAtOV0kLztcclxuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXlswLTldezJ9W0EtWl17NH1bQS1aMC05XXsxfVswLTldezR9W0EtWl17MX1bMS05XXsxfVtBLVpdezF9W0EtWjAtOV17MX0kJyk7XHJcbiAgICBjb25zdCB2YWxpZCA9IHJlZ2V4LnRlc3QoZ3N0aW4pO1xyXG4gICAgcmV0dXJuIHZhbGlkO1xyXG4gICAgLy9yZXR1cm4gZ3N0aW5SZWdleFBhdHRlcm4udGVzdChnc3Rpbik7XHJcbiAgfVxyXG4gIGlzVmFsaWREYXRhKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZGF0YSA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgICBpZiAoZGF0YSA9PSBcIlwiIHx8IGRhdGEgPT0gbnVsbCB8fCBkYXRhID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXNvbHZlKCBudWxsICk7XHJcbiAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgZGF0YSA9PSAnb2JqZWN0Jyl7XHJcbiAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7IGludmFsaURhdGE6IHRydWUgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class AuthDataShareService {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.signinResponse = new Subject();
|
|
7
|
+
this.authenticated = new BehaviorSubject(false);
|
|
8
|
+
this.forgot = new Subject();
|
|
9
|
+
this.settingData = new Subject();
|
|
10
|
+
this.signUpResponse = new Subject();
|
|
11
|
+
this.otpResponse = new Subject();
|
|
12
|
+
this.OtpAutoLoginData = {};
|
|
13
|
+
this.createPwd = new Subject();
|
|
14
|
+
this.userInfo = new Subject();
|
|
15
|
+
this.sessionexpired = new Subject();
|
|
16
|
+
this.resetPass = new Subject();
|
|
17
|
+
this.authResponce = new Subject();
|
|
18
|
+
}
|
|
19
|
+
setSigninResponse(responce) {
|
|
20
|
+
this.signinResponse.next(responce);
|
|
21
|
+
}
|
|
22
|
+
setAuthentication(responce) {
|
|
23
|
+
this.authenticated.next(responce);
|
|
24
|
+
}
|
|
25
|
+
getAuthentication() {
|
|
26
|
+
return this.authenticated;
|
|
27
|
+
}
|
|
28
|
+
setForgot(responce) {
|
|
29
|
+
this.forgot.next(responce);
|
|
30
|
+
}
|
|
31
|
+
restSettingModule(value) {
|
|
32
|
+
this.settingData.next(value);
|
|
33
|
+
}
|
|
34
|
+
setSignUpResponse(response) {
|
|
35
|
+
this.signUpResponse.next(response);
|
|
36
|
+
}
|
|
37
|
+
setOtpResponse(response) {
|
|
38
|
+
this.otpResponse.next(response);
|
|
39
|
+
}
|
|
40
|
+
setOtpAutoLogin(response) {
|
|
41
|
+
this.OtpAutoLoginData = response;
|
|
42
|
+
}
|
|
43
|
+
getOtpAutoLogin() {
|
|
44
|
+
return this.OtpAutoLoginData;
|
|
45
|
+
}
|
|
46
|
+
setChangePwd(responce) {
|
|
47
|
+
this.createPwd.next(responce);
|
|
48
|
+
}
|
|
49
|
+
setUserInfo(responce) {
|
|
50
|
+
this.userInfo.next(responce);
|
|
51
|
+
}
|
|
52
|
+
setSessionExpired(responce) {
|
|
53
|
+
this.sessionexpired.next(responce);
|
|
54
|
+
}
|
|
55
|
+
resetPassword(responce) {
|
|
56
|
+
this.resetPass.next(responce);
|
|
57
|
+
}
|
|
58
|
+
setAuthenticationResponce(responce) {
|
|
59
|
+
this.authResponce.next(responce);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
AuthDataShareService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthDataShareService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
63
|
+
AuthDataShareService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthDataShareService, providedIn: 'root' });
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthDataShareService, decorators: [{
|
|
65
|
+
type: Injectable,
|
|
66
|
+
args: [{
|
|
67
|
+
providedIn: 'root'
|
|
68
|
+
}]
|
|
69
|
+
}], ctorParameters: function () { return []; } });
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1kYXRhLXNoYXJlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2RhdGEtc2hhcmUvYXV0aC1kYXRhLXNoYXJlL2F1dGgtZGF0YS1zaGFyZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUtoRCxNQUFNLE9BQU8sb0JBQW9CO0lBZ0IvQjtRQWRBLG1CQUFjLEdBQWdCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUMsa0JBQWEsR0FBb0IsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDckUsV0FBTSxHQUFnQixJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQ3pDLGdCQUFXLEdBQWdCLElBQUksT0FBTyxFQUFPLENBQUM7UUFDOUMsbUJBQWMsR0FBZ0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM1QyxnQkFBVyxHQUFnQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3pDLHFCQUFnQixHQUFPLEVBQUUsQ0FBQTtRQUN6QixjQUFTLEdBQWdCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDdkMsYUFBUSxHQUFnQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLG1CQUFjLEdBQWdCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUMsY0FBUyxHQUFnQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3ZDLGlCQUFZLEdBQWdCLElBQUksT0FBTyxFQUFFLENBQUM7SUFHMUIsQ0FBQztJQUVqQixpQkFBaUIsQ0FBQyxRQUFZO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxRQUFnQjtRQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFDRCxTQUFTLENBQUMsUUFBWTtRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsS0FBUztRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM5QixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsUUFBWTtRQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsY0FBYyxDQUFDLFFBQVk7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELGVBQWUsQ0FBQyxRQUFZO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUE7SUFDbEMsQ0FBQztJQUNELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBQ0QsWUFBWSxDQUFDLFFBQVk7UUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELFdBQVcsQ0FBQyxRQUFZO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxRQUFZO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxhQUFhLENBQUMsUUFBWTtRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QseUJBQXlCLENBQUMsUUFBWTtRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDOztrSEEzRFUsb0JBQW9CO3NIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aERhdGFTaGFyZVNlcnZpY2Uge1xyXG5cclxuICBzaWduaW5SZXNwb25zZTpTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGF1dGhlbnRpY2F0ZWQ6U3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGZvcmdvdDpTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgc2V0dGluZ0RhdGE6U3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gIHNpZ25VcFJlc3BvbnNlOlN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgb3RwUmVzcG9uc2U6U3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICBPdHBBdXRvTG9naW5EYXRhOmFueSA9IHt9XHJcbiAgY3JlYXRlUHdkOlN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgdXNlckluZm86U3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICBzZXNzaW9uZXhwaXJlZDpTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHJlc2V0UGFzczpTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGF1dGhSZXNwb25jZTpTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgc2V0U2lnbmluUmVzcG9uc2UocmVzcG9uY2U6YW55KXtcclxuICAgIHRoaXMuc2lnbmluUmVzcG9uc2UubmV4dChyZXNwb25jZSk7XHJcbiAgfVxyXG4gIHNldEF1dGhlbnRpY2F0aW9uKHJlc3BvbmNlOmJvb2xlYW4pe1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGVkLm5leHQocmVzcG9uY2UpO1xyXG4gIH1cclxuICBnZXRBdXRoZW50aWNhdGlvbigpe1xyXG4gICAgcmV0dXJuIHRoaXMuYXV0aGVudGljYXRlZDtcclxuICB9XHJcbiAgc2V0Rm9yZ290KHJlc3BvbmNlOmFueSl7XHJcbiAgICB0aGlzLmZvcmdvdC5uZXh0KHJlc3BvbmNlKTtcclxuICB9XHJcbiAgcmVzdFNldHRpbmdNb2R1bGUodmFsdWU6YW55KXtcclxuICAgIHRoaXMuc2V0dGluZ0RhdGEubmV4dCh2YWx1ZSlcclxuICB9XHJcbiAgc2V0U2lnblVwUmVzcG9uc2UocmVzcG9uc2U6YW55KXtcclxuICAgIHRoaXMuc2lnblVwUmVzcG9uc2UubmV4dChyZXNwb25zZSk7XHJcbiAgfVxyXG4gIHNldE90cFJlc3BvbnNlKHJlc3BvbnNlOmFueSl7XHJcbiAgICB0aGlzLm90cFJlc3BvbnNlLm5leHQocmVzcG9uc2UpO1xyXG4gIH1cclxuICBzZXRPdHBBdXRvTG9naW4ocmVzcG9uc2U6YW55KXtcclxuICAgIHRoaXMuT3RwQXV0b0xvZ2luRGF0YSA9IHJlc3BvbnNlXHJcbiAgfVxyXG4gIGdldE90cEF1dG9Mb2dpbigpe1xyXG4gICAgcmV0dXJuIHRoaXMuT3RwQXV0b0xvZ2luRGF0YTtcclxuICB9XHJcbiAgc2V0Q2hhbmdlUHdkKHJlc3BvbmNlOmFueSl7XHJcbiAgICB0aGlzLmNyZWF0ZVB3ZC5uZXh0KHJlc3BvbmNlKTtcclxuICB9XHJcbiAgc2V0VXNlckluZm8ocmVzcG9uY2U6YW55KXtcclxuICAgIHRoaXMudXNlckluZm8ubmV4dChyZXNwb25jZSk7XHJcbiAgfVxyXG4gIHNldFNlc3Npb25FeHBpcmVkKHJlc3BvbmNlOmFueSl7XHJcbiAgICB0aGlzLnNlc3Npb25leHBpcmVkLm5leHQocmVzcG9uY2UpO1xyXG4gIH1cclxuICByZXNldFBhc3N3b3JkKHJlc3BvbmNlOmFueSl7XHJcbiAgICB0aGlzLnJlc2V0UGFzcy5uZXh0KHJlc3BvbmNlKTtcclxuICB9XHJcbiAgc2V0QXV0aGVudGljYXRpb25SZXNwb25jZShyZXNwb25jZTphbnkpe1xyXG4gICAgdGhpcy5hdXRoUmVzcG9uY2UubmV4dChyZXNwb25jZSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|