tango-app-ui-manage-settings 3.0.65-dev → 3.3.0-alpha.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/esm2022/lib/components/configurations/configurations.component.mjs +1 -3
- package/esm2022/lib/components/configurations/feature-configuration/feature-configuration.component.mjs +3 -5
- package/esm2022/lib/components/payments-subscription/billing/billing-group-form/billing-group-form.component.mjs +448 -0
- package/esm2022/lib/components/payments-subscription/billing/billing-group-view/billing-group-view.component.mjs +20 -0
- package/esm2022/lib/components/payments-subscription/billing/billing.component.mjs +200 -0
- package/esm2022/lib/components/payments-subscription/billing/request-confirmation/request-confirmation.component.mjs +22 -0
- package/esm2022/lib/components/payments-subscription/invoice-credits/invoice-credits.component.mjs +340 -0
- package/esm2022/lib/components/payments-subscription/invoice-credits/paynow/paynow.component.mjs +127 -0
- package/esm2022/lib/components/payments-subscription/payments-subscription.component.mjs +61 -14
- package/esm2022/lib/components/payments-subscription/request-popups/starttrailrequest/starttrailrequest.component.mjs +25 -0
- package/esm2022/lib/components/payments-subscription/request-popups/subscribe-request/subscribe-request.component.mjs +25 -0
- package/esm2022/lib/components/payments-subscription/subscription-popups/credit-note/credit-note.component.mjs +9 -3
- package/esm2022/lib/components/payments-subscription/subscription-popups/multidropdown/multidropdown.component.mjs +6 -6
- package/esm2022/lib/components/payments-subscription/subscription-popups/needhelp/needhelp.component.mjs +23 -0
- package/esm2022/lib/components/payments-subscription/subscription-popups/unsubscribe-request/unsubscribe-request.component.mjs +8 -5
- package/esm2022/lib/components/payments-subscription/subscription-popups/unsubscribeproduct/unsubscribeproduct.component.mjs +27 -0
- package/esm2022/lib/components/payments-subscription/subscription-popups/upgrade-plan/upgrade-plan.component.mjs +336 -8
- package/esm2022/lib/components/payments-subscription/subscription-popups/viewstores/viewstores.component.mjs +299 -0
- package/esm2022/lib/components/tango-manage-settings/tango-manage-settings.component.mjs +313 -11
- package/esm2022/lib/services/payment-subscription.service.mjs +64 -3
- package/esm2022/lib/services/util.mjs +46 -0
- package/esm2022/lib/tango-manage-settings.module.mjs +48 -3
- package/fesm2022/tango-app-ui-manage-settings.mjs +4050 -1761
- package/fesm2022/tango-app-ui-manage-settings.mjs.map +1 -1
- package/lib/components/activity-logs/activity-logs.component.d.ts +1 -1
- package/lib/components/contact-directory/contact-directory.component.d.ts +1 -1
- package/lib/components/payments-subscription/billing/billing-group-form/billing-group-form.component.d.ts +65 -0
- package/lib/components/payments-subscription/billing/billing-group-view/billing-group-view.component.d.ts +9 -0
- package/lib/components/payments-subscription/billing/billing.component.d.ts +42 -0
- package/lib/components/payments-subscription/billing/request-confirmation/request-confirmation.component.d.ts +10 -0
- package/lib/components/payments-subscription/invoice-credits/invoice-credits.component.d.ts +80 -0
- package/lib/components/payments-subscription/invoice-credits/paynow/paynow.component.d.ts +29 -0
- package/lib/components/payments-subscription/payments-subscription.component.d.ts +8 -0
- package/lib/components/payments-subscription/request-popups/starttrailrequest/starttrailrequest.component.d.ts +11 -0
- package/lib/components/payments-subscription/request-popups/subscribe-request/subscribe-request.component.d.ts +11 -0
- package/lib/components/payments-subscription/subscription-popups/credit-note/credit-note.component.d.ts +3 -1
- package/lib/components/payments-subscription/subscription-popups/needhelp/needhelp.component.d.ts +10 -0
- package/lib/components/payments-subscription/subscription-popups/unsubscribe-request/unsubscribe-request.component.d.ts +3 -2
- package/lib/components/payments-subscription/subscription-popups/unsubscribeproduct/unsubscribeproduct.component.d.ts +13 -0
- package/lib/components/payments-subscription/subscription-popups/upgrade-plan/upgrade-plan.component.d.ts +43 -1
- package/lib/components/payments-subscription/subscription-popups/viewstores/viewstores.component.d.ts +44 -0
- package/lib/components/tango-manage-settings/tango-manage-settings.component.d.ts +35 -4
- package/lib/services/payment-subscription.service.d.ts +21 -0
- package/lib/services/util.d.ts +14 -0
- package/lib/tango-manage-settings.module.d.ts +23 -12
- package/package.json +1 -1
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "projects/tango-manage-settings/src/lib/services/payment-subscription.service";
|
|
5
|
+
import * as i2 from "tango-app-ui-global";
|
|
6
|
+
import * as i3 from "@angular/common";
|
|
7
|
+
import * as i4 from "@ng-bootstrap/ng-bootstrap";
|
|
8
|
+
import * as i5 from "@angular/forms";
|
|
9
|
+
import * as i6 from "tango-app-ui-shared";
|
|
10
|
+
import * as i7 from "../multidropdown/multidropdown.component";
|
|
11
|
+
export class ViewstoresComponent {
|
|
12
|
+
PaymentSubscriptionService;
|
|
13
|
+
changeDetector;
|
|
14
|
+
gs;
|
|
15
|
+
productList = [];
|
|
16
|
+
loading = true;
|
|
17
|
+
noData = false;
|
|
18
|
+
clientId = '';
|
|
19
|
+
sortBy = 1;
|
|
20
|
+
selectAll = false;
|
|
21
|
+
selectedStoreList = [];
|
|
22
|
+
storeProduct;
|
|
23
|
+
disabledAddIcon = false;
|
|
24
|
+
destroy$ = new Subject();
|
|
25
|
+
dataObject = [
|
|
26
|
+
{ Description: 'Products', Issues: [] },
|
|
27
|
+
{ Description: 'Store', Issues: [] },
|
|
28
|
+
{ Description: 'Location', Issues: [] },
|
|
29
|
+
];
|
|
30
|
+
dynamicData = {
|
|
31
|
+
limit: 10,
|
|
32
|
+
offset: 1,
|
|
33
|
+
clientId: "",
|
|
34
|
+
searchValue: "",
|
|
35
|
+
sortColumn: '',
|
|
36
|
+
sortBy: '',
|
|
37
|
+
product: [],
|
|
38
|
+
store: [],
|
|
39
|
+
location: []
|
|
40
|
+
};
|
|
41
|
+
totalCount = 0;
|
|
42
|
+
notificationDetails = [];
|
|
43
|
+
currentPlan = 'free';
|
|
44
|
+
storeList = [];
|
|
45
|
+
constructor(PaymentSubscriptionService, changeDetector, gs) {
|
|
46
|
+
this.PaymentSubscriptionService = PaymentSubscriptionService;
|
|
47
|
+
this.changeDetector = changeDetector;
|
|
48
|
+
this.gs = gs;
|
|
49
|
+
}
|
|
50
|
+
ngOnInit() {
|
|
51
|
+
this.gs.dataRangeValue.pipe(takeUntil(this.destroy$)).subscribe((data) => {
|
|
52
|
+
if (data) {
|
|
53
|
+
this.clientId = data.client;
|
|
54
|
+
this.dynamicData.clientId = this.clientId;
|
|
55
|
+
this.gs.userAccess.pipe(takeUntil(this.destroy$)).subscribe((data) => {
|
|
56
|
+
if (data) {
|
|
57
|
+
// this.userType = data.userType;
|
|
58
|
+
// if(data?.userType == 'tango') {
|
|
59
|
+
this.getProductList();
|
|
60
|
+
this.filterList();
|
|
61
|
+
this.notificationList();
|
|
62
|
+
this.getStoreList();
|
|
63
|
+
// }
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
else if (!data) {
|
|
68
|
+
const userData = JSON.parse(localStorage.getItem("user-info") || "{}");
|
|
69
|
+
this.clientId = userData.clientId;
|
|
70
|
+
this.dynamicData.clientId = this.clientId;
|
|
71
|
+
this.gs.userAccess.pipe(takeUntil(this.destroy$)).subscribe((data) => {
|
|
72
|
+
if (data) {
|
|
73
|
+
// if(data?.userType == 'tango') {
|
|
74
|
+
this.getProductList();
|
|
75
|
+
this.filterList();
|
|
76
|
+
this.notificationList();
|
|
77
|
+
this.getStoreList();
|
|
78
|
+
// }
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
ngOnDestroy() {
|
|
85
|
+
this.destroy$.next(true);
|
|
86
|
+
this.destroy$.complete();
|
|
87
|
+
}
|
|
88
|
+
getProductList() {
|
|
89
|
+
this.loading = true;
|
|
90
|
+
let data = {
|
|
91
|
+
id: this.clientId,
|
|
92
|
+
sortColumn: 'storeCount',
|
|
93
|
+
sortBy: this.sortBy
|
|
94
|
+
};
|
|
95
|
+
this.PaymentSubscriptionService.getProductList(data).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
96
|
+
if (res && res.code == 200) {
|
|
97
|
+
this.loading = false;
|
|
98
|
+
this.noData = false;
|
|
99
|
+
this.productList = res.data;
|
|
100
|
+
this.changeDetector.detectChanges();
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
this.noData = true;
|
|
104
|
+
this.loading = false;
|
|
105
|
+
}
|
|
106
|
+
}, (error) => {
|
|
107
|
+
this.loading = false;
|
|
108
|
+
this.noData = true;
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
filterList() {
|
|
112
|
+
let data = this.clientId;
|
|
113
|
+
this.PaymentSubscriptionService.getFilterDetails(data).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
114
|
+
if (res && res.code == 200) {
|
|
115
|
+
res.data.store.forEach((store) => {
|
|
116
|
+
let storesIndex = this.dataObject.findIndex((item) => item.Description == 'Store');
|
|
117
|
+
if (storesIndex != -1) {
|
|
118
|
+
this.dataObject[storesIndex].Issues.push({
|
|
119
|
+
text: store.storeName,
|
|
120
|
+
id: store.storeId
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
res.data.location.forEach((location, index) => {
|
|
125
|
+
let locationIndex = this.dataObject.findIndex((item) => item.Description == 'Location');
|
|
126
|
+
if (locationIndex != -1) {
|
|
127
|
+
this.dataObject[locationIndex].Issues.push({
|
|
128
|
+
text: location,
|
|
129
|
+
id: index
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
res.data.product.forEach((product, index) => {
|
|
134
|
+
let productIndex = this.dataObject.findIndex((item) => item.Description == 'Products');
|
|
135
|
+
if (productIndex != -1) {
|
|
136
|
+
this.dataObject[productIndex].Issues.push({
|
|
137
|
+
text: product,
|
|
138
|
+
id: index
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
this.changeDetector.detectChanges();
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
reload(event) {
|
|
147
|
+
this.selectedStoreList = [];
|
|
148
|
+
this.disabledAddIcon = false;
|
|
149
|
+
if (event == 'store') {
|
|
150
|
+
this.getStoreList();
|
|
151
|
+
this.selectAll = false;
|
|
152
|
+
}
|
|
153
|
+
if (event == 'product') {
|
|
154
|
+
this.getProductList();
|
|
155
|
+
}
|
|
156
|
+
this.notificationList();
|
|
157
|
+
}
|
|
158
|
+
notificationList() {
|
|
159
|
+
this.notificationDetails = [];
|
|
160
|
+
let data = this.clientId;
|
|
161
|
+
this.PaymentSubscriptionService.getNotification(data).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
162
|
+
if (res && res.code == 200) {
|
|
163
|
+
this.notificationDetails = res.data;
|
|
164
|
+
this.notificationDetails.notificationList.forEach((item) => {
|
|
165
|
+
item.producttraildropDown = false;
|
|
166
|
+
});
|
|
167
|
+
this.currentPlan = res.data.currentPlan;
|
|
168
|
+
this.changeDetector.detectChanges();
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
searchRecords(event) {
|
|
173
|
+
this.dynamicData.offset = 1;
|
|
174
|
+
this.dynamicData.searchValue = event.target.value;
|
|
175
|
+
this.getStoreList();
|
|
176
|
+
}
|
|
177
|
+
selectAllStore(event) {
|
|
178
|
+
this.disabledAddIcon = true;
|
|
179
|
+
let storeIdList;
|
|
180
|
+
if (event.target.checked) {
|
|
181
|
+
storeIdList = this.dataObject[1].Issues.map((item) => item.id);
|
|
182
|
+
let data = {
|
|
183
|
+
clientId: this.clientId,
|
|
184
|
+
store: []
|
|
185
|
+
};
|
|
186
|
+
this.PaymentSubscriptionService.storeProduct(data).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
187
|
+
if (res && res.code == 200) {
|
|
188
|
+
this.storeProduct = res.data;
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
storeIdList = [];
|
|
194
|
+
this.storeProduct = [];
|
|
195
|
+
}
|
|
196
|
+
this.selectAll = event.target.checked;
|
|
197
|
+
this.storeList.forEach((item) => {
|
|
198
|
+
item.checked = event.target.checked;
|
|
199
|
+
});
|
|
200
|
+
this.selectedStoreList = storeIdList;
|
|
201
|
+
}
|
|
202
|
+
getStores() {
|
|
203
|
+
return this.selectedStoreList;
|
|
204
|
+
}
|
|
205
|
+
updateCheck(event, storeId) {
|
|
206
|
+
if (event.target.checked) {
|
|
207
|
+
this.selectedStoreList.push(storeId);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
let index = this.selectedStoreList.findIndex((item) => item === storeId);
|
|
211
|
+
if (index != -1) {
|
|
212
|
+
this.selectedStoreList.splice(index, 1);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (this.selectedStoreList.length == this.totalCount)
|
|
216
|
+
this.selectAll = true;
|
|
217
|
+
else
|
|
218
|
+
this.selectAll = false;
|
|
219
|
+
if (this.selectedStoreList.length > 1)
|
|
220
|
+
this.disabledAddIcon = true;
|
|
221
|
+
else
|
|
222
|
+
this.disabledAddIcon = false;
|
|
223
|
+
let data = {
|
|
224
|
+
clientId: this.clientId,
|
|
225
|
+
store: this.selectedStoreList
|
|
226
|
+
};
|
|
227
|
+
this.PaymentSubscriptionService.storeProduct(data).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
228
|
+
if (res && res.code == 200) {
|
|
229
|
+
this.storeProduct = res.data;
|
|
230
|
+
this.changeDetector.detectChanges();
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
getProduct() {
|
|
235
|
+
if (this.selectedStoreList.length || this.selectAll) {
|
|
236
|
+
return this.storeProduct;
|
|
237
|
+
}
|
|
238
|
+
return [];
|
|
239
|
+
}
|
|
240
|
+
getStoreList() {
|
|
241
|
+
this.loading = true;
|
|
242
|
+
this.PaymentSubscriptionService.getStoreList(this.dynamicData).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
243
|
+
if (res && res.code == 200) {
|
|
244
|
+
console.log(res);
|
|
245
|
+
this.loading = false;
|
|
246
|
+
this.noData = false;
|
|
247
|
+
this.storeList = res.data.data;
|
|
248
|
+
this.storeList.forEach((item) => {
|
|
249
|
+
item.checked = this.selectAll;
|
|
250
|
+
});
|
|
251
|
+
this.totalCount = res.data.count;
|
|
252
|
+
this.changeDetector.detectChanges();
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
this.noData = true;
|
|
256
|
+
this.loading = false;
|
|
257
|
+
}
|
|
258
|
+
}, (error) => {
|
|
259
|
+
this.loading = false;
|
|
260
|
+
this.noData = true;
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
receiveData(data) {
|
|
264
|
+
data.forEach((item) => {
|
|
265
|
+
if (item.Description == 'Products') {
|
|
266
|
+
let product = item.Issues.map((product) => product.text);
|
|
267
|
+
this.dynamicData.product = product;
|
|
268
|
+
}
|
|
269
|
+
if (item.Description == 'Store') {
|
|
270
|
+
let store = item.Issues.map((store) => store.id);
|
|
271
|
+
this.dynamicData.store = store;
|
|
272
|
+
}
|
|
273
|
+
if (item.Description == 'Location') {
|
|
274
|
+
let location = item.Issues.map((location) => location.text);
|
|
275
|
+
this.dynamicData.location = location;
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
this.getStoreList();
|
|
279
|
+
}
|
|
280
|
+
showProduct(data) {
|
|
281
|
+
return data.slice(2 - data.length);
|
|
282
|
+
}
|
|
283
|
+
onStorePageChange(event) {
|
|
284
|
+
this.dynamicData.offset = parseInt(event);
|
|
285
|
+
this.getStoreList();
|
|
286
|
+
}
|
|
287
|
+
onStorePageSizeChange(event) {
|
|
288
|
+
this.dynamicData.offset = 1;
|
|
289
|
+
this.dynamicData.limit = parseInt(event);
|
|
290
|
+
this.getStoreList();
|
|
291
|
+
}
|
|
292
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ViewstoresComponent, deps: [{ token: i1.PaymentSubscriptionService }, { token: i0.ChangeDetectorRef }, { token: i2.GlobalStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
293
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ViewstoresComponent, selector: "lib-viewstores", ngImport: i0, template: "<div class=\"p-6\">\r\n<div \r\nclass=\"d-flex justify-content-between heading mt-2 cursor-pointer\">\r\n<div class=\" levelviewtext mt-4\"><span>\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\"/>\r\n <path d=\"M19.0899 22.8843L19.024 22.9873C18.3036 24.2562 19.061 25.8801 20.4646 26.0668C20.5863 26.0817 20.7011 26.0898 20.8145 26.0898C21.5525 26.0898 22.2052 25.7729 22.6595 25.2798L23.2129 24.6792L23.7643 25.2815C24.2137 25.7723 24.8652 26.0898 25.6078 26.0898C26.3471 26.0898 27.0022 25.772 27.4512 25.2815L28.0044 24.6773L28.5576 25.2815C29.0066 25.772 29.6617 26.0898 30.401 26.0898C31.1404 26.0898 31.7954 25.772 32.2445 25.2815L32.7977 24.6773L33.3508 25.2815C33.7999 25.772 34.4549 26.0898 35.1943 26.0898C35.3041 26.0898 35.4223 26.0817 35.5433 26.067C36.9772 25.8723 37.7355 24.1645 36.9155 22.8848C36.9154 22.8847 36.9154 22.8847 36.9154 22.8846L34.8056 19.5949L34.8056 19.5949L34.8046 19.5934C34.7582 19.5206 34.6649 19.4648 34.5584 19.4648H21.4431C21.3365 19.4648 21.2433 19.5206 21.1968 19.5934L21.1962 19.5944L19.0899 22.8843ZM20.8182 28.7506C20.7164 28.7506 20.616 28.7474 20.5169 28.7416V32.6434V34.9648C20.5169 35.8217 21.2266 36.5363 22.1194 36.5363H33.882C34.7748 36.5363 35.4845 35.8217 35.4845 34.9648V32.6434V28.7421C35.3874 28.7476 35.2893 28.7506 35.1906 28.7506C35.0022 28.7506 34.8157 28.7405 34.632 28.7208V32.6434V33.3934H33.882H22.1194H21.3694V32.6434V28.7216C21.1887 28.7407 21.0047 28.7506 20.8182 28.7506Z\" stroke=\"#00A3FF\" stroke-width=\"1.5\"/>\r\n </svg>\r\n \r\n</span>\r\n Store List</div>\r\n<!-- <div class=\"card-toolbar\">\r\n <div \r\n class=\" d-flex justify-content-end mt-6\">\r\n <lib-multidropdown text=\"Add Products\" [product]=\"productList\"\r\n [productList]=\"dataObject[0].Issues\" type=\"products\"\r\n [clientId]=\"clientId\" (data)=\"reload($event)\"\r\n *ngIf=\"(gs.userAccess | async)?.settings_paymentSubscriptions_isEdit\"></lib-multidropdown>\r\n </div>\r\n</div> -->\r\n<div class=\"card-toolbar mt-3\">\r\n <div class=\"d-flex justify-content-end\">\r\n <div class=\"d-flex align-items-end position-relative my-1\">\r\n <span *ngIf=\"storeList.length\"\r\n class=\"svg-icon svg-icon-1 position-absolute mb-3 ms-3\"style=\"z-index: 10;\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\"\r\n width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control ps-14 me-2\"\r\n placeholder=\"Search\" autocomplete=\"off\"\r\n (change)=\"searchRecords($event)\"\r\n *ngIf=\"storeList.length\" />\r\n <lib-filters class=\"me-2\" [dataObject]=\"dataObject\"\r\n *ngIf=\"storeList.length\"\r\n (appliedFilters)=receiveData($event)></lib-filters>\r\n <lib-multidropdown text=\"Add Products\"\r\n [productList]=\"dataObject[0].Issues\" type=\"stores\"\r\n [stores]=\"getStores()\" [product]=\"getProduct()\"\r\n [clientId]=\"clientId\" [clientProduct]=\"productList\"\r\n (data)=\"reload($event)\" [selectAll]=\"selectAll\"\r\n *ngIf=\"storeList.length && (gs.userAccess | async)?.settings_paymentSubscriptions_isEdit\" class=\"storeindex\"></lib-multidropdown>\r\n </div>\r\n </div>\r\n</div>\r\n<!-- subscription config toolbar end -->\r\n</div>\r\n\r\n<ng-container *ngIf=\"loading\">\r\n<div\r\n class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n</ng-container>\r\n<ng-container *ngIf=\"!loading && (noData || storeList.length === 0)\">\r\n<div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\"\r\n src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n</div>\r\n</ng-container>\r\n<!-- store subscription plan start -->\r\n<div *ngIf=\"!loading && storeList.length && !noData\">\r\n<div class=\"card-body p-0 mt-6\">\r\n <div *ngIf=\"storeList.length\" class=\"table-responsive\">\r\n <table class=\"table bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <div class=\"d-flex align-items-center\">\r\n <input\r\n class=\"form-check-input cursor-pointer me-4\"\r\n [(ngModel)]=\"selectAll\" type=\"checkbox\"\r\n (click)=\"selectAllStore($event)\">\r\n <label class=\"form-check-label\"\r\n for=\"flexCheckDefault\">\r\n <span>Store Info</span>\r\n </label>\r\n </div>\r\n </th>\r\n <!-- <th>Location</th> -->\r\n <th></th>\r\n <th>Products</th>\r\n <th>Actions</th>\r\n\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of storeList;let i=index;\">\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <input\r\n class=\"form-check-input cursor-pointer me-4\"\r\n type=\"checkbox\"\r\n [(ngModel)]=\"store.checked\"\r\n (change)=\"updateCheck($event,store?.storeId)\">\r\n <div\r\n class=\"d-flex justify-content-start flex-column\">\r\n <label\r\n class=\"form-check-label table-title-primary\"\r\n for=\"flexCheckDefault\">\r\n <span>{{store?.storeName ||\r\n '--'}}</span>\r\n </label>\r\n <span class=\"table-sub d-block7\">ID :\r\n {{store?.storeId || '--'}}</span>\r\n </div>\r\n </div>\r\n\r\n <div>\r\n\r\n\r\n </div>\r\n </td>\r\n <td></td>\r\n <!-- <td>\r\n <div class=\"table-title\">\r\n {{store?.storeProfile?.city || '--'}}</div>\r\n </td> -->\r\n\r\n <td *ngIf=\"store?.product && store?.product.length\">\r\n <span\r\n *ngFor=\"let product of store?.product;let i=index;\"><span\r\n *ngIf=\"i<2\"\r\n class=\"badge badge-light-primary me-1\">{{product}}</span></span><span\r\n *ngIf=\"store.product.length > 2\"\r\n [ngbTooltip]=\"showProduct(store.product)\">+{{store?.product.length-2}}</span>\r\n </td>\r\n <td\r\n *ngIf=\"!store?.product || !store?.product.length\">\r\n -- </td>\r\n <td>\r\n <lib-multidropdown\r\n [product]=\"store?.product || []\"\r\n [productList]=\"dataObject[0].Issues\"\r\n type=\"stores\" [stores]=\"[store?.storeId]\"\r\n [clientId]=\"clientId\"\r\n [clientProduct]=\"productList\"\r\n (data)=\"reload($event)\"\r\n *ngIf=\"(gs.userAccess | async)?.settings_paymentSubscriptions_isEdit\"\r\n [disabled]=\"disabledAddIcon\"\r\n [index]=\"i\"></lib-multidropdown>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n <div class=\"mb-4\">\r\n <lib-pagination [itemsPerPage]=\"dynamicData.limit\"\r\n [currentPage]=\"dynamicData.offset\"\r\n [totalItems]=\"totalCount\" [paginationSizes]=\"[10,20,30]\"\r\n [pageSize]=\"dynamicData.limit\"\r\n (pageChange)=\"onStorePageChange($event)\"\r\n (pageSizeChange)=\"onStorePageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n</div>\r\n</div>\r\n</div>\r\n<!-- store subscription plan end -->", styles: [".levelviewtext{color:var(--Gray-800, #1D2939);font-family:Inter;font-size:18px;border:none!important;font-weight:600;line-height:28px;padding-left:0!important}.table-responsive{max-height:400px;overflow-y:auto}::ng-deep .storeindex{z-index:100}::ng-deep .storeClassIndex{z-index:100;position:relative!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i6.FiltersComponent, selector: "lib-filters", inputs: ["dataObject"], outputs: ["appliedFilters"] }, { kind: "component", type: i7.MultidropdownComponent, selector: "lib-multidropdown", inputs: ["text", "product", "productList", "type", "stores", "clientId", "selectAll", "clientProduct", "disabled", "index"], outputs: ["data"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
|
|
294
|
+
}
|
|
295
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ViewstoresComponent, decorators: [{
|
|
296
|
+
type: Component,
|
|
297
|
+
args: [{ selector: 'lib-viewstores', template: "<div class=\"p-6\">\r\n<div \r\nclass=\"d-flex justify-content-between heading mt-2 cursor-pointer\">\r\n<div class=\" levelviewtext mt-4\"><span>\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\"/>\r\n <path d=\"M19.0899 22.8843L19.024 22.9873C18.3036 24.2562 19.061 25.8801 20.4646 26.0668C20.5863 26.0817 20.7011 26.0898 20.8145 26.0898C21.5525 26.0898 22.2052 25.7729 22.6595 25.2798L23.2129 24.6792L23.7643 25.2815C24.2137 25.7723 24.8652 26.0898 25.6078 26.0898C26.3471 26.0898 27.0022 25.772 27.4512 25.2815L28.0044 24.6773L28.5576 25.2815C29.0066 25.772 29.6617 26.0898 30.401 26.0898C31.1404 26.0898 31.7954 25.772 32.2445 25.2815L32.7977 24.6773L33.3508 25.2815C33.7999 25.772 34.4549 26.0898 35.1943 26.0898C35.3041 26.0898 35.4223 26.0817 35.5433 26.067C36.9772 25.8723 37.7355 24.1645 36.9155 22.8848C36.9154 22.8847 36.9154 22.8847 36.9154 22.8846L34.8056 19.5949L34.8056 19.5949L34.8046 19.5934C34.7582 19.5206 34.6649 19.4648 34.5584 19.4648H21.4431C21.3365 19.4648 21.2433 19.5206 21.1968 19.5934L21.1962 19.5944L19.0899 22.8843ZM20.8182 28.7506C20.7164 28.7506 20.616 28.7474 20.5169 28.7416V32.6434V34.9648C20.5169 35.8217 21.2266 36.5363 22.1194 36.5363H33.882C34.7748 36.5363 35.4845 35.8217 35.4845 34.9648V32.6434V28.7421C35.3874 28.7476 35.2893 28.7506 35.1906 28.7506C35.0022 28.7506 34.8157 28.7405 34.632 28.7208V32.6434V33.3934H33.882H22.1194H21.3694V32.6434V28.7216C21.1887 28.7407 21.0047 28.7506 20.8182 28.7506Z\" stroke=\"#00A3FF\" stroke-width=\"1.5\"/>\r\n </svg>\r\n \r\n</span>\r\n Store List</div>\r\n<!-- <div class=\"card-toolbar\">\r\n <div \r\n class=\" d-flex justify-content-end mt-6\">\r\n <lib-multidropdown text=\"Add Products\" [product]=\"productList\"\r\n [productList]=\"dataObject[0].Issues\" type=\"products\"\r\n [clientId]=\"clientId\" (data)=\"reload($event)\"\r\n *ngIf=\"(gs.userAccess | async)?.settings_paymentSubscriptions_isEdit\"></lib-multidropdown>\r\n </div>\r\n</div> -->\r\n<div class=\"card-toolbar mt-3\">\r\n <div class=\"d-flex justify-content-end\">\r\n <div class=\"d-flex align-items-end position-relative my-1\">\r\n <span *ngIf=\"storeList.length\"\r\n class=\"svg-icon svg-icon-1 position-absolute mb-3 ms-3\"style=\"z-index: 10;\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\"\r\n width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control ps-14 me-2\"\r\n placeholder=\"Search\" autocomplete=\"off\"\r\n (change)=\"searchRecords($event)\"\r\n *ngIf=\"storeList.length\" />\r\n <lib-filters class=\"me-2\" [dataObject]=\"dataObject\"\r\n *ngIf=\"storeList.length\"\r\n (appliedFilters)=receiveData($event)></lib-filters>\r\n <lib-multidropdown text=\"Add Products\"\r\n [productList]=\"dataObject[0].Issues\" type=\"stores\"\r\n [stores]=\"getStores()\" [product]=\"getProduct()\"\r\n [clientId]=\"clientId\" [clientProduct]=\"productList\"\r\n (data)=\"reload($event)\" [selectAll]=\"selectAll\"\r\n *ngIf=\"storeList.length && (gs.userAccess | async)?.settings_paymentSubscriptions_isEdit\" class=\"storeindex\"></lib-multidropdown>\r\n </div>\r\n </div>\r\n</div>\r\n<!-- subscription config toolbar end -->\r\n</div>\r\n\r\n<ng-container *ngIf=\"loading\">\r\n<div\r\n class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n</ng-container>\r\n<ng-container *ngIf=\"!loading && (noData || storeList.length === 0)\">\r\n<div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\"\r\n src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n</div>\r\n</ng-container>\r\n<!-- store subscription plan start -->\r\n<div *ngIf=\"!loading && storeList.length && !noData\">\r\n<div class=\"card-body p-0 mt-6\">\r\n <div *ngIf=\"storeList.length\" class=\"table-responsive\">\r\n <table class=\"table bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <div class=\"d-flex align-items-center\">\r\n <input\r\n class=\"form-check-input cursor-pointer me-4\"\r\n [(ngModel)]=\"selectAll\" type=\"checkbox\"\r\n (click)=\"selectAllStore($event)\">\r\n <label class=\"form-check-label\"\r\n for=\"flexCheckDefault\">\r\n <span>Store Info</span>\r\n </label>\r\n </div>\r\n </th>\r\n <!-- <th>Location</th> -->\r\n <th></th>\r\n <th>Products</th>\r\n <th>Actions</th>\r\n\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of storeList;let i=index;\">\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <input\r\n class=\"form-check-input cursor-pointer me-4\"\r\n type=\"checkbox\"\r\n [(ngModel)]=\"store.checked\"\r\n (change)=\"updateCheck($event,store?.storeId)\">\r\n <div\r\n class=\"d-flex justify-content-start flex-column\">\r\n <label\r\n class=\"form-check-label table-title-primary\"\r\n for=\"flexCheckDefault\">\r\n <span>{{store?.storeName ||\r\n '--'}}</span>\r\n </label>\r\n <span class=\"table-sub d-block7\">ID :\r\n {{store?.storeId || '--'}}</span>\r\n </div>\r\n </div>\r\n\r\n <div>\r\n\r\n\r\n </div>\r\n </td>\r\n <td></td>\r\n <!-- <td>\r\n <div class=\"table-title\">\r\n {{store?.storeProfile?.city || '--'}}</div>\r\n </td> -->\r\n\r\n <td *ngIf=\"store?.product && store?.product.length\">\r\n <span\r\n *ngFor=\"let product of store?.product;let i=index;\"><span\r\n *ngIf=\"i<2\"\r\n class=\"badge badge-light-primary me-1\">{{product}}</span></span><span\r\n *ngIf=\"store.product.length > 2\"\r\n [ngbTooltip]=\"showProduct(store.product)\">+{{store?.product.length-2}}</span>\r\n </td>\r\n <td\r\n *ngIf=\"!store?.product || !store?.product.length\">\r\n -- </td>\r\n <td>\r\n <lib-multidropdown\r\n [product]=\"store?.product || []\"\r\n [productList]=\"dataObject[0].Issues\"\r\n type=\"stores\" [stores]=\"[store?.storeId]\"\r\n [clientId]=\"clientId\"\r\n [clientProduct]=\"productList\"\r\n (data)=\"reload($event)\"\r\n *ngIf=\"(gs.userAccess | async)?.settings_paymentSubscriptions_isEdit\"\r\n [disabled]=\"disabledAddIcon\"\r\n [index]=\"i\"></lib-multidropdown>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n <div class=\"mb-4\">\r\n <lib-pagination [itemsPerPage]=\"dynamicData.limit\"\r\n [currentPage]=\"dynamicData.offset\"\r\n [totalItems]=\"totalCount\" [paginationSizes]=\"[10,20,30]\"\r\n [pageSize]=\"dynamicData.limit\"\r\n (pageChange)=\"onStorePageChange($event)\"\r\n (pageSizeChange)=\"onStorePageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n</div>\r\n</div>\r\n</div>\r\n<!-- store subscription plan end -->", styles: [".levelviewtext{color:var(--Gray-800, #1D2939);font-family:Inter;font-size:18px;border:none!important;font-weight:600;line-height:28px;padding-left:0!important}.table-responsive{max-height:400px;overflow-y:auto}::ng-deep .storeindex{z-index:100}::ng-deep .storeClassIndex{z-index:100;position:relative!important}\n"] }]
|
|
298
|
+
}], ctorParameters: () => [{ type: i1.PaymentSubscriptionService }, { type: i0.ChangeDetectorRef }, { type: i2.GlobalStateService }] });
|
|
299
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3N0b3Jlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL3BheW1lbnRzLXN1YnNjcmlwdGlvbi9zdWJzY3JpcHRpb24tcG9wdXBzL3ZpZXdzdG9yZXMvdmlld3N0b3Jlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL3BheW1lbnRzLXN1YnNjcmlwdGlvbi9zdWJzY3JpcHRpb24tcG9wdXBzL3ZpZXdzdG9yZXMvdmlld3N0b3Jlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVyRSxPQUFPLEVBQWMsT0FBTyxFQUFzQyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQU8xRixNQUFNLE9BQU8sbUJBQW1CO0lBZ0NWO0lBQStEO0lBQXlDO0lBL0I1SCxXQUFXLEdBQVEsRUFBRSxDQUFDO0lBQ3RCLE9BQU8sR0FBUyxJQUFJLENBQUM7SUFDckIsTUFBTSxHQUFVLEtBQUssQ0FBQztJQUN0QixRQUFRLEdBQVcsRUFBRSxDQUFDO0lBQ3RCLE1BQU0sR0FBUSxDQUFDLENBQUM7SUFDaEIsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixpQkFBaUIsR0FBUSxFQUFFLENBQUM7SUFDNUIsWUFBWSxDQUFNO0lBQ2xCLGVBQWUsR0FBVyxLQUFLLENBQUM7SUFDZixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUMxQyxVQUFVLEdBQVE7UUFDaEIsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7UUFDdkMsRUFBRSxXQUFXLEVBQUUsT0FB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QU0sR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO3dHQS9TVSxtQkFBbUI7NEZBQW5CLG1CQUFtQixzRENUaEMsb2xVQXlMb0M7OzRGRGhMdkIsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYXltZW50U3Vic2NyaXB0aW9uU2VydmljZSB9IGZyb20gJ3Byb2plY3RzL3RhbmdvLW1hbmFnZS1zZXR0aW5ncy9zcmMvbGliL3NlcnZpY2VzL3BheW1lbnQtc3Vic2NyaXB0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXZpZXdzdG9yZXMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi92aWV3c3RvcmVzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdmlld3N0b3Jlcy5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFZpZXdzdG9yZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHByb2R1Y3RMaXN0OiBhbnkgPSBbXTtcclxuICBsb2FkaW5nOmJvb2xlYW49dHJ1ZTtcclxuICBub0RhdGE6Ym9vbGVhbiA9ZmFsc2U7XHJcbiAgY2xpZW50SWQ6IHN0cmluZyA9ICcnO1xyXG4gIHNvcnRCeTpudW1iZXI9MTtcclxuICBzZWxlY3RBbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWxlY3RlZFN0b3JlTGlzdDogYW55ID0gW107XHJcbiAgc3RvcmVQcm9kdWN0OiBhbnk7XHJcbiAgZGlzYWJsZWRBZGRJY29uOmJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBkYXRhT2JqZWN0OiBhbnkgPSBbXHJcbiAgICB7IERlc2NyaXB0aW9uOiAnUHJvZHVjdHMnLCBJc3N1ZXM6IFtdIH0sXHJcbiAgICB7IERlc2NyaXB0aW9uOiAnU3RvcmUnLCBJc3N1ZXM6IFtdIH0sXHJcbiAgICB7IERlc2NyaXB0aW9uOiAnTG9jYXRpb24nLCBJc3N1ZXM6IFtdIH0sXHJcbiAgXTtcclxuICBkeW5hbWljRGF0YTogYW55ID0ge1xyXG4gICAgbGltaXQ6IDEwLFxyXG4gICAgb2Zmc2V0OiAxLFxyXG4gICAgY2xpZW50SWQ6IFwiXCIsXHJcbiAgICBzZWFyY2hWYWx1ZTogXCJcIixcclxuICAgIHNvcnRDb2x1bW46ICcnLFxyXG4gICAgc29ydEJ5OiAnJyxcclxuICAgIHByb2R1Y3Q6IFtdLFxyXG4gICAgc3RvcmU6IFtdLFxyXG4gICAgbG9jYXRpb246IFtdXHJcbiAgfVxyXG4gIHRvdGFsQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgbm90aWZpY2F0aW9uRGV0YWlsczogYW55ID0gW107XHJcbiAgY3VycmVudFBsYW46IHN0cmluZyA9ICdmcmVlJztcclxuICBzdG9yZUxpc3Q6IGFueSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIFBheW1lbnRTdWJzY3JpcHRpb25TZXJ2aWNlOiBQYXltZW50U3Vic2NyaXB0aW9uU2VydmljZSxwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixwdWJsaWMgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSkge1xyXG5cclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgIFxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YS5jbGllbnQ7XHJcbiAgICAgICAgdGhpcy5keW5hbWljRGF0YS5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWRcclxuICAgICAgICB0aGlzLmdzLnVzZXJBY2Nlc3MucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZGF0YTphbnkpID0+IHtcclxuICAgICAgICAgIGlmKGRhdGEpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy51c2VyVHlwZSA9IGRhdGEudXNlclR5cGU7XHJcbiAgICAgICAgICAgIC8vIGlmKGRhdGE/LnVzZXJUeXBlID09ICd0YW5nbycpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRQcm9kdWN0TGlzdCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyTGlzdCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uTGlzdCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmVMaXN0KClcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICB9IGVsc2UgaWYoIWRhdGEpe1xyXG4gICAgICAgIGNvbnN0IHVzZXJEYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlci1pbmZvXCIpIHx8IFwie31cIik7XHJcbiAgICAgICAgdGhpcy5jbGllbnRJZCA9IHVzZXJEYXRhLmNsaWVudElkO1xyXG4gICAgICAgIHRoaXMuZHluYW1pY0RhdGEuY2xpZW50SWQgPSB0aGlzLmNsaWVudElkXHJcbiAgICAgICAgdGhpcy5ncy51c2VyQWNjZXNzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGRhdGE6YW55KSA9PiB7XHJcbiAgICAgICAgICBpZihkYXRhKSB7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIGlmKGRhdGE/LnVzZXJUeXBlID09ICd0YW5nbycpIHtcclxuICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0UHJvZHVjdExpc3QoKTtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlckxpc3QoKTtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkxpc3QoKTtcclxuICAgICAgICAgICAgICB0aGlzLmdldFN0b3JlTGlzdCgpXHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICBcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRQcm9kdWN0TGlzdCgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgaWQ6dGhpcy5jbGllbnRJZCxcclxuICAgICAgc29ydENvbHVtbjonc3RvcmVDb3VudCcsXHJcbiAgICAgIHNvcnRCeTp0aGlzLnNvcnRCeVxyXG4gICAgfTtcclxuICAgIHRoaXMuUGF5bWVudFN1YnNjcmlwdGlvblNlcnZpY2UuZ2V0UHJvZHVjdExpc3QoZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJvZHVjdExpc3QgPSByZXMuZGF0YTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0sKGVycm9yOmFueSkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgfSlcclxuICB9XHJcbiAgZmlsdGVyTGlzdCgpIHtcclxuICAgIGxldCBkYXRhID0gdGhpcy5jbGllbnRJZDtcclxuICAgIHRoaXMuUGF5bWVudFN1YnNjcmlwdGlvblNlcnZpY2UuZ2V0RmlsdGVyRGV0YWlscyhkYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgIHJlcy5kYXRhLnN0b3JlLmZvckVhY2goKHN0b3JlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGxldCBzdG9yZXNJbmRleCA9IHRoaXMuZGF0YU9iamVjdC5maW5kSW5kZXgoKGl0ZW06IGFueSkgPT4gaXRlbS5EZXNjcmlwdGlvbiA9PSAnU3RvcmUnKTtcclxuICAgICAgICAgIGlmIChzdG9yZXNJbmRleCAhPSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFPYmplY3Rbc3RvcmVzSW5kZXhdLklzc3Vlcy5wdXNoKHtcclxuICAgICAgICAgICAgICB0ZXh0OiBzdG9yZS5zdG9yZU5hbWUsXHJcbiAgICAgICAgICAgICAgaWQ6IHN0b3JlLnN0b3JlSWRcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICByZXMuZGF0YS5sb2NhdGlvbi5mb3JFYWNoKChsb2NhdGlvbjogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBsZXQgbG9jYXRpb25JbmRleCA9IHRoaXMuZGF0YU9iamVjdC5maW5kSW5kZXgoKGl0ZW06IGFueSkgPT4gaXRlbS5EZXNjcmlwdGlvbiA9PSAnTG9jYXRpb24nKTtcclxuICAgICAgICAgIGlmIChsb2NhdGlvbkluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YU9iamVjdFtsb2NhdGlvbkluZGV4XS5Jc3N1ZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgdGV4dDogbG9jYXRpb24sXHJcbiAgICAgICAgICAgICAgaWQ6IGluZGV4XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgcmVzLmRhdGEucHJvZHVjdC5mb3JFYWNoKChwcm9kdWN0OiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGxldCBwcm9kdWN0SW5kZXggPSB0aGlzLmRhdGFPYmplY3QuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IGl0ZW0uRGVzY3JpcHRpb24gPT0gJ1Byb2R1Y3RzJyk7XHJcbiAgICAgICAgICBpZiAocHJvZHVjdEluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YU9iamVjdFtwcm9kdWN0SW5kZXhdLklzc3Vlcy5wdXNoKHtcclxuICAgICAgICAgICAgICB0ZXh0OiBwcm9kdWN0LFxyXG4gICAgICAgICAgICAgIGlkOiBpbmRleFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG5cclxuICB9XHJcbiAgcmVsb2FkKGV2ZW50OmFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5kaXNhYmxlZEFkZEljb24gPSBmYWxzZTtcclxuICAgIGlmKGV2ZW50ID09ICdzdG9yZScpIHtcclxuICAgICAgdGhpcy5nZXRTdG9yZUxpc3QoKTtcclxuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmKGV2ZW50ID09ICdwcm9kdWN0Jykge1xyXG4gICAgICB0aGlzLmdldFByb2R1Y3RMaXN0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm5vdGlmaWNhdGlvbkxpc3QoKTtcclxuICB9XHJcbiAgbm90aWZpY2F0aW9uTGlzdCgpIHtcclxuICAgIHRoaXMubm90aWZpY2F0aW9uRGV0YWlscyA9IFtdO1xyXG4gICAgbGV0IGRhdGEgPSB0aGlzLmNsaWVudElkO1xyXG4gICAgdGhpcy5QYXltZW50U3Vic2NyaXB0aW9uU2VydmljZS5nZXROb3RpZmljYXRpb24oZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkRldGFpbHMgPSByZXMuZGF0YTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkRldGFpbHMubm90aWZpY2F0aW9uTGlzdC5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgIGl0ZW0ucHJvZHVjdHRyYWlsZHJvcERvd24gPSBmYWxzZTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3VycmVudFBsYW4gPSByZXMuZGF0YS5jdXJyZW50UGxhbjtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNlYXJjaFJlY29yZHMoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5zZWFyY2hWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgIHRoaXMuZ2V0U3RvcmVMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGxTdG9yZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmRpc2FibGVkQWRkSWNvbiA9IHRydWU7XHJcbiAgICBsZXQgc3RvcmVJZExpc3Q7IFxyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIHN0b3JlSWRMaXN0ID0gdGhpcy5kYXRhT2JqZWN0WzFdLklzc3Vlcy5tYXAoKGl0ZW06YW55KSA9PiBpdGVtLmlkKTtcclxuICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgICAgICAgc3RvcmU6IFtdXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5QYXltZW50U3Vic2NyaXB0aW9uU2VydmljZS5zdG9yZVByb2R1Y3QoZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZVByb2R1Y3QgPSByZXMuZGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc3RvcmVJZExpc3QgPSBbXTtcclxuICAgICAgdGhpcy5zdG9yZVByb2R1Y3QgPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0QWxsID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XHJcbiAgICB0aGlzLnN0b3JlTGlzdC5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgaXRlbS5jaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWRcclxuICAgIH0pXHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVMaXN0ID0gc3RvcmVJZExpc3Q7XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFN0b3JlTGlzdFxyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ2hlY2soZXZlbnQ6IGFueSwgc3RvcmVJZDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlTGlzdC5wdXNoKHN0b3JlSWQpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGluZGV4ID0gdGhpcy5zZWxlY3RlZFN0b3JlTGlzdC5maW5kSW5kZXgoKGl0ZW06IGFueSkgPT4gaXRlbSA9PT0gc3RvcmVJZCk7XHJcbiAgICAgIGlmIChpbmRleCAhPSAtMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUxpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkU3RvcmVMaXN0Lmxlbmd0aCA9PSB0aGlzLnRvdGFsQ291bnQpXHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gdHJ1ZTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZih0aGlzLnNlbGVjdGVkU3RvcmVMaXN0Lmxlbmd0aCA+ICAxKVxyXG4gICAgICB0aGlzLmRpc2FibGVkQWRkSWNvbiA9IHRydWU7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuZGlzYWJsZWRBZGRJY29uID0gZmFsc2U7XHJcbiAgICBcclxuICAgIGxldCBkYXRhID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgc3RvcmU6IHRoaXMuc2VsZWN0ZWRTdG9yZUxpc3RcclxuICAgIH1cclxuICAgIHRoaXMuUGF5bWVudFN1YnNjcmlwdGlvblNlcnZpY2Uuc3RvcmVQcm9kdWN0KGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgdGhpcy5zdG9yZVByb2R1Y3QgPSByZXMuZGF0YTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldFByb2R1Y3QoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFN0b3JlTGlzdC5sZW5ndGggfHwgdGhpcy5zZWxlY3RBbGwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVQcm9kdWN0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuICBnZXRTdG9yZUxpc3QoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5QYXltZW50U3Vic2NyaXB0aW9uU2VydmljZS5nZXRTdG9yZUxpc3QodGhpcy5keW5hbWljRGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSByZXMuZGF0YS5kYXRhO1xyXG4gICAgICAgIHRoaXMuc3RvcmVMaXN0LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgaXRlbS5jaGVja2VkID0gdGhpcy5zZWxlY3RBbGw7XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXMuZGF0YS5jb3VudDtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0sIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVjZWl2ZURhdGEoZGF0YTogYW55KSB7XHJcbiAgICBkYXRhLmZvckVhY2goKGl0ZW06YW55KSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLkRlc2NyaXB0aW9uID09ICdQcm9kdWN0cycpIHtcclxuICAgICAgICBsZXQgcHJvZHVjdCA9IGl0ZW0uSXNzdWVzLm1hcCgocHJvZHVjdDphbnkpID0+IHByb2R1Y3QudGV4dCk7XHJcbiAgICAgICAgdGhpcy5keW5hbWljRGF0YS5wcm9kdWN0ID0gcHJvZHVjdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXRlbS5EZXNjcmlwdGlvbiA9PSAnU3RvcmUnKSB7XHJcbiAgICAgICAgbGV0IHN0b3JlID0gaXRlbS5Jc3N1ZXMubWFwKChzdG9yZTogYW55KSA9PiBzdG9yZS5pZCk7XHJcbiAgICAgICAgdGhpcy5keW5hbWljRGF0YS5zdG9yZSA9IHN0b3JlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtLkRlc2NyaXB0aW9uID09ICdMb2NhdGlvbicpIHtcclxuICAgICAgICBsZXQgbG9jYXRpb24gPSBpdGVtLklzc3Vlcy5tYXAoKGxvY2F0aW9uOiBhbnkpID0+IGxvY2F0aW9uLnRleHQpO1xyXG4gICAgICAgIHRoaXMuZHluYW1pY0RhdGEubG9jYXRpb24gPSBsb2NhdGlvbjtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoaXMuZ2V0U3RvcmVMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBzaG93UHJvZHVjdChkYXRhOnN0cmluZykge1xyXG4gICAgcmV0dXJuIGRhdGEuc2xpY2UoMi1kYXRhLmxlbmd0aClcclxuICB9XHJcbiAgb25TdG9yZVBhZ2VDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5vZmZzZXQgPSBwYXJzZUludChldmVudCk7XHJcbiAgICB0aGlzLmdldFN0b3JlTGlzdCgpO1xyXG4gIH1cclxuICBvblN0b3JlUGFnZVNpemVDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5saW1pdCA9IHBhcnNlSW50KGV2ZW50KTtcclxuICAgIHRoaXMuZ2V0U3RvcmVMaXN0KCk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuIiwiPGRpdiBjbGFzcz1cInAtNlwiPlxyXG48ZGl2IFxyXG5jbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBoZWFkaW5nIG10LTIgY3Vyc29yLXBvaW50ZXJcIj5cclxuPGRpdiBjbGFzcz1cIiBsZXZlbHZpZXd0ZXh0IG10LTRcIj48c3Bhbj5cclxuICAgIDxzdmcgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NiA1NlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNEQUYxRkZcIi8+XHJcbiAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRUFGOEZGXCIgc3Ryb2tlLXdpZHRoPVwiOFwiLz5cclxuICAgICAgICA8cGF0aCBkPVwiTTE5LjA4OTkgMjIuODg0M0wxOS4wMjQgMjIuOTg3M0MxOC4zMDM2IDI0LjI1NjIgMTkuMDYxIDI1Ljg4MDEgMjAuNDY0NiAyNi4wNjY4QzIwLjU4NjMgMjYuMDgxNyAyMC43MDExIDI2LjA4OTggMjAuODE0NSAyNi4wODk4QzIxLjU1MjUgMjYuMDg5OCAyMi4yMDUyIDI1Ljc3MjkgMjIuNjU5NSAyNS4yNzk4TDIzLjIxMjkgMjQuNjc5MkwyMy43NjQzIDI1LjI4MTVDMjQuMjEzNyAyNS43NzIzIDI0Ljg2NTIgMjYuMDg5OCAyNS42MDc4IDI2LjA4OThDMjYuMzQ3MSAyNi4wODk4IDI3LjAwMjIgMjUuNzcyIDI3LjQ1MTIgMjUuMjgxNUwyOC4wMDQ0IDI0LjY3NzNMMjguNTU3NiAyNS4yODE1QzI5LjAwNjYgMjUuNzcyIDI5LjY2MTcgMjYuMDg5OCAzMC40MDEgMjYuMDg5OEMzMS4xNDA0IDI2LjA4OTggMzEuNzk1NCAyNS43NzIgMzIuMjQ0NSAyNS4yODE1TDMyLjc5NzcgMjQuNjc3M0wzMy4zNTA4IDI1LjI4MTVDMzMuNzk5OSAyNS43NzIgMzQuNDU0OSAyNi4wODk4IDM1LjE5NDMgMjYuMDg5OEMzNS4zMDQxIDI2LjA4OTggMzUuNDIyMyAyNi4wODE3IDM1LjU0MzMgMjYuMDY3QzM2Ljk3NzIgMjUuODcyMyAzNy43MzU1IDI0LjE2NDUgMzYuOTE1NSAyMi44ODQ4QzM2LjkxNTQgMjIuODg0NyAzNi45MTU0IDIyLjg4NDcgMzYuOTE1NCAyMi44ODQ2TDM0LjgwNTYgMTkuNTk0OUwzNC44MDU2IDE5LjU5NDlMMzQuODA0NiAxOS41OTM0QzM0Ljc1ODIgMTkuNTIwNiAzNC42NjQ5IDE5LjQ2NDggMzQuNTU4NCAxOS40NjQ4SDIxLjQ0MzFDMjEuMzM2NSAxOS40NjQ4IDIxLjI0MzMgMTkuNTIwNiAyMS4xOTY4IDE5LjU5MzRMMjEuMTk2MiAxOS41OTQ0TDE5LjA4OTkgMjIuODg0M1pNMjAuODE4MiAyOC43NTA2QzIwLjcxNjQgMjguNzUwNiAyMC42MTYgMjguNzQ3NCAyMC41MTY5IDI4Ljc0MTZWMzIuNjQzNFYzNC45NjQ4QzIwLjUxNjkgMzUuODIxNyAyMS4yMjY2IDM2LjUzNjMgMjIuMTE5NCAzNi41MzYzSDMzLjg4MkMzNC43NzQ4IDM2LjUzNjMgMzUuNDg0NSAzNS44MjE3IDM1LjQ4NDUgMzQuOTY0OFYzMi42NDM0VjI4Ljc0MjFDMzUuMzg3NCAyOC43NDc2IDM1LjI4OTMgMjguNzUwNiAzNS4xOTA2IDI4Ljc1MDZDMzUuMDAyMiAyOC43NTA2IDM0LjgxNTcgMjguNzQwNSAzNC42MzIgMjguNzIwOFYzMi42NDM0VjMzLjM5MzRIMzMuODgySDIyLjExOTRIMjEuMzY5NFYzMi42NDM0VjI4LjcyMTZDMjEuMTg4NyAyOC43NDA3IDIxLjAwNDcgMjguNzUwNiAyMC44MTgyIDI4Ljc1MDZaXCIgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgICBcclxuPC9zcGFuPlxyXG4gICAgU3RvcmUgTGlzdDwvZGl2PlxyXG48IS0tIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgIDxkaXYgXHJcbiAgICAgICAgY2xhc3M9XCIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtNlwiPlxyXG4gICAgICAgIDxsaWItbXVsdGlkcm9wZG93biB0ZXh0PVwiQWRkIFByb2R1Y3RzXCIgW3Byb2R1Y3RdPVwicHJvZHVjdExpc3RcIlxyXG4gICAgICAgICAgICBbcHJvZHVjdExpc3RdPVwiZGF0YU9iamVjdFswXS5Jc3N1ZXNcIiB0eXBlPVwicHJvZHVjdHNcIlxyXG4gICAgICAgICAgICBbY2xpZW50SWRdPVwiY2xpZW50SWRcIiAoZGF0YSk9XCJyZWxvYWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnNldHRpbmdzX3BheW1lbnRTdWJzY3JpcHRpb25zX2lzRWRpdFwiPjwvbGliLW11bHRpZHJvcGRvd24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+IC0tPlxyXG48ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyIG10LTNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtZW5kIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzdG9yZUxpc3QubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtYi0zIG1zLTNcInN0eWxlPVwiei1pbmRleDogMTA7XCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCJcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IG9wYWNpdHk9XCIwLjVcIiB4PVwiMTcuMDM2NVwiIHk9XCIxNS4xMjIzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI4LjE1NTQ2XCIgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSAxNy4wMzY1IDE1LjEyMjMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDE5QzYuNTU1NTYgMTkgMyAxNS40NDQ0IDMgMTFDMyA2LjU1NTU2IDYuNTU1NTYgMyAxMSAzQzE1LjQ0NDQgMyAxOSA2LjU1NTU2IDE5IDExQzE5IDE1LjQ0NDQgMTUuNDQ0NCAxOSAxMSAxOVpNMTEgNUM3LjUzMzMzIDUgNSA3LjUzMzMzIDUgMTFDNSAxNC40NjY3IDcuNTMzMzMgMTcgMTEgMTdDMTQuNDY2NyAxNyAxNyAxNC40NjY3IDE3IDExQzE3IDcuNTMzMzMgMTQuNDY2NyA1IDExIDVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IG1lLTJcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWFyY2hSZWNvcmRzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzdG9yZUxpc3QubGVuZ3RoXCIgLz5cclxuICAgICAgICAgICAgPGxpYi1maWx0ZXJzIGNsYXNzPVwibWUtMlwiIFtkYXRhT2JqZWN0XT1cImRhdGFPYmplY3RcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzdG9yZUxpc3QubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgIChhcHBsaWVkRmlsdGVycyk9cmVjZWl2ZURhdGEoJGV2ZW50KT48L2xpYi1maWx0ZXJzPlxyXG4gICAgICAgICAgICA8bGliLW11bHRpZHJvcGRvd24gdGV4dD1cIkFkZCBQcm9kdWN0c1wiXHJcbiAgICAgICAgICAgICAgICBbcHJvZHVjdExpc3RdPVwiZGF0YU9iamVjdFswXS5Jc3N1ZXNcIiB0eXBlPVwic3RvcmVzXCJcclxuICAgICAgICAgICAgICAgIFtzdG9yZXNdPVwiZ2V0U3RvcmVzKClcIiBbcHJvZHVjdF09XCJnZXRQcm9kdWN0KClcIlxyXG4gICAgICAgICAgICAgICAgW2NsaWVudElkXT1cImNsaWVudElkXCIgW2NsaWVudFByb2R1Y3RdPVwicHJvZHVjdExpc3RcIlxyXG4gICAgICAgICAgICAgICAgKGRhdGEpPVwicmVsb2FkKCRldmVudClcIiBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInN0b3JlTGlzdC5sZW5ndGggJiYgKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnNldHRpbmdzX3BheW1lbnRTdWJzY3JpcHRpb25zX2lzRWRpdFwiIGNsYXNzPVwic3RvcmVpbmRleFwiPjwvbGliLW11bHRpZHJvcGRvd24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbjwhLS0gc3Vic2NyaXB0aW9uIGNvbmZpZyB0b29sYmFyIGVuZCAtLT5cclxuPC9kaXY+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1wiPlxyXG48ZGl2XHJcbiAgICBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZyAmJiAobm9EYXRhIHx8IHN0b3JlTGlzdC5sZW5ndGggPT09IDApXCI+XHJcbjxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbWItM1wiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjIHctMjVcIlxyXG4gICAgICAgICAgICAgICAgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuPCEtLSBzdG9yZSBzdWJzY3JpcHRpb24gcGxhbiBzdGFydCAtLT5cclxuPGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmIHN0b3JlTGlzdC5sZW5ndGggJiYgIW5vRGF0YVwiPlxyXG48ZGl2ICBjbGFzcz1cImNhcmQtYm9keSBwLTAgbXQtNlwiPlxyXG4gICAgPGRpdiAqbmdJZj1cInN0b3JlTGlzdC5sZW5ndGhcIiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBib3R0b20tYm9yZGVyXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXIgbWUtNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxcIiB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RBbGxTdG9yZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJmbGV4Q2hlY2tEZWZhdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+U3RvcmUgSW5mbzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8dGg+TG9jYXRpb248L3RoPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPlByb2R1Y3RzPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+QWN0aW9uczwvdGg+XHJcblxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBzdG9yZSBvZiBzdG9yZUxpc3Q7bGV0IGk9aW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyIG1lLTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzdG9yZS5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZUNoZWNrKCRldmVudCxzdG9yZT8uc3RvcmVJZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIHRhYmxlLXRpdGxlLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJmbGV4Q2hlY2tEZWZhdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7c3RvcmU/LnN0b3JlTmFtZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWJsZS1zdWIgZC1ibG9jazdcIj5JRCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c3RvcmU/LnN0b3JlSWQgfHwgJy0tJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c3RvcmU/LnN0b3JlUHJvZmlsZT8uY2l0eSB8fCAnLS0nfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwic3RvcmU/LnByb2R1Y3QgJiYgc3RvcmU/LnByb2R1Y3QubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBzdG9yZT8ucHJvZHVjdDtsZXQgaT1pbmRleDtcIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaTwyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnkgbWUtMVwiPnt7cHJvZHVjdH19PC9zcGFuPjwvc3Bhbj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdG9yZS5wcm9kdWN0Lmxlbmd0aCA+IDJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwic2hvd1Byb2R1Y3Qoc3RvcmUucHJvZHVjdClcIj4re3tzdG9yZT8ucHJvZHVjdC5sZW5ndGgtMn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXN0b3JlPy5wcm9kdWN0IHx8ICFzdG9yZT8ucHJvZHVjdC5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLS0gPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItbXVsdGlkcm9wZG93blxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2R1Y3RdPVwic3RvcmU/LnByb2R1Y3QgfHwgW11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2R1Y3RMaXN0XT1cImRhdGFPYmplY3RbMF0uSXNzdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdG9yZXNcIiBbc3RvcmVzXT1cIltzdG9yZT8uc3RvcmVJZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsaWVudElkXT1cImNsaWVudElkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGllbnRQcm9kdWN0XT1cInByb2R1Y3RMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhKT1cInJlbG9hZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnNldHRpbmdzX3BheW1lbnRTdWJzY3JpcHRpb25zX2lzRWRpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRBZGRJY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJpXCI+PC9saWItbXVsdGlkcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItNFwiPlxyXG4gICAgICAgICAgICA8bGliLXBhZ2luYXRpb24gW2l0ZW1zUGVyUGFnZV09XCJkeW5hbWljRGF0YS5saW1pdFwiXHJcbiAgICAgICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwiZHluYW1pY0RhdGEub2Zmc2V0XCJcclxuICAgICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsQ291bnRcIiBbcGFnaW5hdGlvblNpemVzXT1cIlsxMCwyMCwzMF1cIlxyXG4gICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cImR5bmFtaWNEYXRhLmxpbWl0XCJcclxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uU3RvcmVQYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uU3RvcmVQYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCI+PC9saWItcGFnaW5hdGlvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPC9kaXY+XHJcbjwvZGl2PlxyXG48IS0tIHN0b3JlIHN1YnNjcmlwdGlvbiBwbGFuIGVuZCAtLT4iXX0=
|