@colijnit/transaction 12.1.217 → 12.1.218

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/bundles/colijnit-transaction.umd.js +448 -69
  2. package/bundles/colijnit-transaction.umd.js.map +1 -1
  3. package/colijnit-transaction.d.ts +3 -1
  4. package/colijnit-transaction.metadata.json +1 -1
  5. package/esm2015/colijnit-transaction.js +4 -2
  6. package/esm2015/lib/component/add-product/add-product.component.js +38 -31
  7. package/esm2015/lib/component/dialog/transaction-line/dialog-transaction-line-warehouse-location/dialog-transaction-line-warehouse-location.module.js +5 -5
  8. package/esm2015/lib/component/transaction/transaction.module.js +4 -2
  9. package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-order-expense-dialog/transaction-cash-register-order-expense-dialog.component.js +4 -2
  10. package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-order-receipt-dialog/transaction-cash-register-order-receipt-dialog.component.js +285 -0
  11. package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-order-receipt-dialog/transaction-cash-register-order-receipt-dialog.module.js +25 -0
  12. package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/transaction-cash-register-payment-dialog.component.js +40 -37
  13. package/esm2015/lib/component/transaction-line/transaction-cash-register-order-line/transaction-cash-register-order-line.component.js +37 -26
  14. package/esm2015/lib/component/transaction-line/transaction-cash-register-order-line/transaction-cash-register-order-line.module.js +4 -2
  15. package/esm2015/lib/component/transaction-line/transaction-invoice-line/transaction-invoice-line.component.js +2 -2
  16. package/esm2015/lib/component/transaction-line/transaction-order-delivery-line/transaction-order-delivery-line.component.js +2 -2
  17. package/esm2015/lib/component/transaction-line/transaction-overview-line/transaction-overview-line.component.js +2 -2
  18. package/esm2015/lib/component/transaction-line/transaction-planning-line/transaction-planning-line.component.js +2 -2
  19. package/esm2015/lib/component/transaction-line/transaction-purchase-order-line/transaction-purchase-order-line.component.js +3 -3
  20. package/esm2015/lib/component/transaction-line/transaction-purchase-overview-line/transaction-purchase-overview-line.component.js +2 -2
  21. package/esm2015/lib/component/transaction-line/transaction-sales-order-quotation-line/transaction-sales-order-quotation-line.component.js +2 -2
  22. package/esm2015/lib/component/transaction-line-checkbox-list/transaction-line-checkbox-list.component.js +4 -4
  23. package/esm2015/lib/component/transaction-line-fields/transaction-line-confirmed-price/transaction-line-confirmed-price.component.js +2 -2
  24. package/esm2015/lib/component/transaction-line-fields/transaction-line-discount-button.component.js +2 -2
  25. package/esm2015/lib/component/transaction-line-fields/transaction-line-price/transaction-line-price.component.js +3 -2
  26. package/esm2015/lib/component/transaction-line-fields/transaction-line-warehouse-location-button.component.js +21 -14
  27. package/esm2015/lib/component/transaction-line-fields/transaction-line-warehouse-location-button.module.js +4 -2
  28. package/esm2015/lib/component/transaction-lines-popup/transaction-lines-popup.component.js +2 -2
  29. package/esm2015/lib/component/transaction-margin/transaction-margin.component.js +2 -2
  30. package/esm2015/lib/component/transaction-quick-access/transaction-quick-access/transaction-quick-access.component.js +1 -21
  31. package/esm2015/lib/service/dialog.service.js +12 -1
  32. package/esm2015/lib/service/transaction.service.js +15 -5
  33. package/esm2015/lib/transaction-version.js +3 -3
  34. package/fesm2015/colijnit-transaction.js +488 -155
  35. package/fesm2015/colijnit-transaction.js.map +1 -1
  36. package/lib/component/add-product/add-product.component.d.ts +3 -1
  37. package/lib/component/transaction-cash-register-order/transaction-cash-register-order-receipt-dialog/style/_layout.scss +3 -0
  38. package/lib/component/transaction-cash-register-order/transaction-cash-register-order-receipt-dialog/transaction-cash-register-order-receipt-dialog.component.d.ts +48 -0
  39. package/lib/component/transaction-cash-register-order/transaction-cash-register-order-receipt-dialog/transaction-cash-register-order-receipt-dialog.module.d.ts +2 -0
  40. package/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/style/_layout.scss +39 -0
  41. package/lib/component/transaction-line/transaction-cash-register-order-line/style/_layout.scss +22 -7
  42. package/lib/component/transaction-line-fields/transaction-line-warehouse-location-button.component.d.ts +1 -2
  43. package/lib/component/transaction-quick-access/transaction-quick-access/transaction-quick-access.component.d.ts +0 -2
  44. package/lib/service/dialog.service.d.ts +1 -0
  45. package/lib/service/transaction.service.d.ts +2 -1
  46. package/package.json +1 -1
@@ -0,0 +1,285 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Component, EventEmitter, HostBinding, Input, Output, ViewEncapsulation } from "@angular/core";
3
+ import { TransactionBaseComponent } from "../../core/base/transaction-base.component";
4
+ import { EmailPosReceiptRequest } from "@colijnit/transactionapi/build/model/email-pos-receipt-request";
5
+ import { PrintPosReceiptRequest } from "@colijnit/transactionapi/build/model/print-pos-receipt-request";
6
+ import { AppPopupButtonType } from "../../core/enum/app-popup-button-type.enum";
7
+ export class TransactionCashRegisterOrderReceiptDialogComponent extends TransactionBaseComponent {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.buttonType = AppPopupButtonType;
11
+ this.isReprint = false;
12
+ this.showClose = false;
13
+ this.handleReceiptOptionSelected = new EventEmitter();
14
+ this.close = new EventEmitter();
15
+ this.disableInput = false;
16
+ this.emailAddressList = [];
17
+ this.printerList = [];
18
+ this.printerLayouts = [];
19
+ this.emailLayouts = [];
20
+ this.showEmailLayoutOption = true;
21
+ }
22
+ showClass() {
23
+ return true;
24
+ }
25
+ ngOnInit() {
26
+ super.ngOnInit();
27
+ if (this.isReprint) {
28
+ this._prepareDialogData();
29
+ this._getDefaultEmailAddressListForPosReprintReceipt();
30
+ }
31
+ else {
32
+ this._getDefaultEmailAddressListForPosReceipt();
33
+ }
34
+ this.receiptOptions = this._prepareReceiptOptions();
35
+ }
36
+ emailReceipt() {
37
+ const request = new EmailPosReceiptRequest();
38
+ if (this.isReprint) {
39
+ if (this.selectedEmailLayout !== undefined) {
40
+ request.transId = this.currentTransaction.transactionInfo.id;
41
+ request.toAddresses = this.emailAddressList.join(';');
42
+ request.reportId = this.selectedEmailLayout.reportId;
43
+ this.transactionService.emailHistoricPosReceipt(request).then((success) => {
44
+ if (success) {
45
+ this.handleReceiptOptionSelected.next();
46
+ this.handleClose(this.buttonType.Ok);
47
+ }
48
+ else {
49
+ this.disableInput = false;
50
+ }
51
+ });
52
+ }
53
+ else {
54
+ this.disableInput = false;
55
+ }
56
+ }
57
+ else {
58
+ request.transId = this.transactionInfo.id;
59
+ request.toAddresses = this.emailAddressList.join(';');
60
+ request.reportId = this.cashRegisterPaymentDetails.emailLayout.reportId;
61
+ this.transactionService.emailPosReceipt(request).then((success) => {
62
+ if (success) {
63
+ this.handleReceiptOptionSelected.next();
64
+ }
65
+ else {
66
+ this.disableInput = false;
67
+ }
68
+ });
69
+ }
70
+ }
71
+ printReceipt() {
72
+ const request = new PrintPosReceiptRequest();
73
+ if (this.isReprint) {
74
+ if (this.activePrinter !== undefined && this.selectedPrinterLayout !== undefined) {
75
+ request.transId = this.currentTransaction.transactionInfo.id;
76
+ request.copies = 1;
77
+ request.printerName = this.activePrinter.name;
78
+ request.reportId = this.selectedPrinterLayout.reportId;
79
+ this.transactionService.printHistoricPosReceipt(request).then((success) => {
80
+ if (success) {
81
+ this.handleReceiptOptionSelected.next();
82
+ this.handleClose(this.buttonType.Ok);
83
+ }
84
+ else {
85
+ this.disableInput = false;
86
+ }
87
+ });
88
+ }
89
+ else {
90
+ this.disableInput = false;
91
+ }
92
+ }
93
+ else {
94
+ request.transId = this.transactionInfo.id;
95
+ request.copies = 1;
96
+ request.printerName = this.cashRegisterPaymentDetails.printer.name;
97
+ request.reportId = this.cashRegisterPaymentDetails.printerLayout.reportId;
98
+ this.transactionService.printPosReceipt(request).then((success) => {
99
+ if (success) {
100
+ this.handleReceiptOptionSelected.next();
101
+ }
102
+ else {
103
+ this.disableInput = false;
104
+ }
105
+ });
106
+ }
107
+ }
108
+ noPrintReceipt() {
109
+ this.handleReceiptOptionSelected.next();
110
+ this.disableInput = false;
111
+ }
112
+ handleClickReceipt(title) {
113
+ if (!this.disableInput) {
114
+ this.disableInput = true;
115
+ switch (title) {
116
+ case 'EMAIL':
117
+ this.emailReceipt();
118
+ break;
119
+ case 'PRINT':
120
+ this.printReceipt();
121
+ break;
122
+ case 'NO_RECEIPT':
123
+ this.noPrintReceipt();
124
+ break;
125
+ }
126
+ }
127
+ }
128
+ handlePrinterChanged(printer) {
129
+ this.activePrinter = printer;
130
+ }
131
+ handleCloseDialog(event, type) {
132
+ if (event) {
133
+ event.preventDefault();
134
+ event.stopPropagation();
135
+ }
136
+ this.handleClose(type);
137
+ }
138
+ handleClose(type) {
139
+ if (type === AppPopupButtonType.Cancel) {
140
+ this.rollback();
141
+ }
142
+ this.close.emit();
143
+ this.onClose(type);
144
+ }
145
+ onClose(eventType, output) {
146
+ return;
147
+ }
148
+ _getDefaultEmailAddressListForPosReceipt() {
149
+ return __awaiter(this, void 0, void 0, function* () {
150
+ this.transactionService.getDefaultEmailAddressListForPosReceipt(this.transactionInfo.uuid)
151
+ .then((emailAddressList) => {
152
+ this.emailAddressList = emailAddressList;
153
+ });
154
+ });
155
+ }
156
+ _getDefaultEmailAddressListForPosReprintReceipt() {
157
+ return __awaiter(this, void 0, void 0, function* () {
158
+ if (this.currentTransaction.transactionInfo.relation !== undefined) {
159
+ this.transactionService.getDefaultEmailAddressListForPosReceipt(this.currentTransaction.transactionInfo.uuid)
160
+ .then((emailAddressList) => {
161
+ this.emailAddressList = emailAddressList;
162
+ });
163
+ }
164
+ });
165
+ }
166
+ _prepareDialogData() {
167
+ return __awaiter(this, void 0, void 0, function* () {
168
+ const promises = [
169
+ this._getPrinters(),
170
+ this._getPrinterLayouts(),
171
+ this._getEmailLayouts()
172
+ ];
173
+ yield Promise.all(promises);
174
+ });
175
+ }
176
+ _getPrinters() {
177
+ return __awaiter(this, void 0, void 0, function* () {
178
+ this.printerList = yield this.transactionService.getPrinters();
179
+ });
180
+ }
181
+ _getPrinterLayouts() {
182
+ return __awaiter(this, void 0, void 0, function* () {
183
+ this.printerLayouts = yield this.transactionService.getPosReceiptPrintLayouts(this.transactionInfo.uuid);
184
+ });
185
+ }
186
+ _getEmailLayouts() {
187
+ return __awaiter(this, void 0, void 0, function* () {
188
+ this.emailLayouts = yield this.transactionService.getPosReceiptEmailLayouts(this.transactionInfo.uuid);
189
+ });
190
+ }
191
+ _prepareReceiptOptions() {
192
+ let output;
193
+ if (this.isReprint) {
194
+ if (this.currentTransaction.transactionInfo.relation !== undefined) {
195
+ output = [
196
+ { title: 'EMAIL', iconData: this.iconCacheService.getIcon(this.icons.AtSolid) },
197
+ { title: 'PRINT', iconData: this.iconCacheService.getIcon(this.icons.PrintSolid) }
198
+ ];
199
+ }
200
+ else {
201
+ this.showEmailLayoutOption = false;
202
+ output = [
203
+ { title: 'PRINT', iconData: this.iconCacheService.getIcon(this.icons.PrintSolid) }
204
+ ];
205
+ }
206
+ }
207
+ else {
208
+ output = [
209
+ { title: 'EMAIL', iconData: this.iconCacheService.getIcon(this.icons.AtSolid) },
210
+ { title: 'PRINT', iconData: this.iconCacheService.getIcon(this.icons.PrintSolid) },
211
+ { title: 'NO_RECEIPT', iconData: this.iconCacheService.getIcon(this.icons.RegularReceiptSlash) }
212
+ ];
213
+ }
214
+ return output;
215
+ }
216
+ }
217
+ TransactionCashRegisterOrderReceiptDialogComponent.decorators = [
218
+ { type: Component, args: [{
219
+ selector: "co-transaction-cash-register-order-receipt-dialog",
220
+ template: `
221
+ <co-dialog [showCloseIcon]="showClose" [headerTemplate]="headerTemplate"
222
+ (closeClick)="handleCloseDialog($event, buttonType.Cancel)">
223
+ <div class="dialog-content-wrapper">
224
+ <ng-container *ngIf="isReprint">
225
+ <co-list-of-values [label]="'PRINTER' | localize"
226
+ [(model)]="activePrinter"
227
+ [displayField]="'name'"
228
+ [collection]="printerList"
229
+ [multiselect]="false"
230
+ [required]="false"
231
+ [readonly]="headerReadonly"
232
+ [searchDisabled]="true"
233
+ (modelChange)="handlePrinterChanged($event)"
234
+ ></co-list-of-values>
235
+ <co-list-of-values [label]="'PRINTER_LAYOUT' | localize"
236
+ [(model)]="selectedPrinterLayout"
237
+ [displayField]="'name'"
238
+ [collection]="printerLayouts"
239
+ [multiselect]="false"
240
+ [required]="false"
241
+ [readonly]="headerReadonly"
242
+ [searchDisabled]="true"
243
+ ></co-list-of-values>
244
+ <co-list-of-values *ngIf="showEmailLayoutOption"
245
+ [label]="'EMAIL_LAYOUT' | localize"
246
+ [(model)]="selectedEmailLayout"
247
+ [displayField]="'name'"
248
+ [collection]="emailLayouts"
249
+ [multiselect]="false"
250
+ [required]="false"
251
+ [readonly]="headerReadonly"
252
+ [searchDisabled]="true"
253
+ ></co-list-of-values>
254
+ </ng-container>
255
+
256
+ <div class="receipt-option-wrapper">
257
+ <div class="receipt-option" [class.disabled]="disableInput" *ngFor="let receiptOption of receiptOptions"
258
+ (click)="handleClickReceipt(receiptOption.title)">
259
+ <co-icon [iconData]="receiptOption.iconData"></co-icon>
260
+ <span [textContent]="receiptOption.title | localize"></span>
261
+ </div>
262
+ </div>
263
+ </div>
264
+ </co-dialog>
265
+
266
+ <ng-template #headerTemplate>
267
+ <div class="title-wrapper">
268
+ <co-icon [iconData]="iconCacheService.getIcon(icons.CashRegister)"></co-icon>
269
+ <span class="co-dialog-header-title" [textContent]="'CASH_REGISTER_RECEIPT' | localize"></span>
270
+ </div>
271
+ </ng-template>
272
+ `,
273
+ encapsulation: ViewEncapsulation.None
274
+ },] }
275
+ ];
276
+ TransactionCashRegisterOrderReceiptDialogComponent.propDecorators = {
277
+ cashRegisterPaymentDetails: [{ type: Input }],
278
+ isReprint: [{ type: Input }],
279
+ currentTransaction: [{ type: Input }],
280
+ showClose: [{ type: Input }],
281
+ handleReceiptOptionSelected: [{ type: Output }],
282
+ close: [{ type: Output }],
283
+ showClass: [{ type: HostBinding, args: ["class.co-transaction-cash-register-order-receipt-dialog",] }]
284
+ };
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24tY2FzaC1yZWdpc3Rlci1vcmRlci1yZWNlaXB0LWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cmFuc2FjdGlvbi9zcmMvbGliL2NvbXBvbmVudC90cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLW9yZGVyL3RyYW5zYWN0aW9uLWNhc2gtcmVnaXN0ZXItb3JkZXItcmVjZWlwdC1kaWFsb2cvdHJhbnNhY3Rpb24tY2FzaC1yZWdpc3Rlci1vcmRlci1yZWNlaXB0LWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBRXBGLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBQ3RHLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBTXRHLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBMkQ5RSxNQUFNLE9BQU8sa0RBQW1ELFNBQVEsd0JBQXdCO0lBekRoRzs7UUEwRGtCLGVBQVUsR0FBOEIsa0JBQWtCLENBQUM7UUFNcEUsY0FBUyxHQUFZLEtBQUssQ0FBQztRQU0zQixjQUFTLEdBQVksS0FBSyxDQUFDO1FBRzNCLGdDQUEyQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRzNFLFVBQUssR0FBNkIsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUVqRSxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixxQkFBZ0IsR0FBYSxFQUFFLENBQUM7UUFDaEMsZ0JBQVcsR0FBYyxFQUFFLENBQUM7UUFFNUIsbUJB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QUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFDO2dCQUNoRixFQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUFDO2FBQy9GLENBQUE7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7OztZQXJSRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG1EQUFtRDtnQkFDN0QsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0RUO2dCQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3RDOzs7eUNBSUUsS0FBSzt3QkFHTCxLQUFLO2lDQUdMLEtBQUs7d0JBR0wsS0FBSzswQ0FHTCxNQUFNO29CQUdOLE1BQU07d0JBY04sV0FBVyxTQUFDLHlEQUF5RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uQmFzZUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL2NvcmUvYmFzZS90cmFuc2FjdGlvbi1iYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge1NhZmVIdG1sfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQge0VtYWlsUG9zUmVjZWlwdFJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZW1haWwtcG9zLXJlY2VpcHQtcmVxdWVzdFwiO1xyXG5pbXBvcnQge1ByaW50UG9zUmVjZWlwdFJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtcG9zLXJlY2VpcHQtcmVxdWVzdFwiO1xyXG5pbXBvcnQge1BheW1lbnRUcmFuc2FjdGlvblZpZXdNb2RlbH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL3BheW1lbnQtdHJhbnNhY3Rpb24tdmlldy1tb2RlbFwiO1xyXG5pbXBvcnQge1ByaW50ZXJ9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9wcmludGVyLmJvXCI7XHJcbmltcG9ydCB7UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnR9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9yZXBvcnQtbGF5b3V0LXNlbGVjdGlvbi1wcmludC5ib1wiO1xyXG5pbXBvcnQge1JlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsfSBmcm9tIFwiQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcmVwb3J0LWxheW91dC1zZWxlY3Rpb24tZW1haWwuYm9cIjtcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm9SZXNwb25zZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLXJlc3BvbnNlLmJvXCI7XHJcbmltcG9ydCB7QXBwUG9wdXBCdXR0b25UeXBlfSBmcm9tIFwiLi4vLi4vY29yZS9lbnVtL2FwcC1wb3B1cC1idXR0b24tdHlwZS5lbnVtXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJjby10cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLW9yZGVyLXJlY2VpcHQtZGlhbG9nXCIsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxjby1kaWFsb2cgW3Nob3dDbG9zZUljb25dPVwic2hvd0Nsb3NlXCIgW2hlYWRlclRlbXBsYXRlXT1cImhlYWRlclRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgKGNsb3NlQ2xpY2spPVwiaGFuZGxlQ2xvc2VEaWFsb2coJGV2ZW50LCBidXR0b25UeXBlLkNhbmNlbClcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRpYWxvZy1jb250ZW50LXdyYXBwZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNSZXByaW50XCI+XHJcbiAgICAgICAgICA8Y28tbGlzdC1vZi12YWx1ZXMgW2xhYmVsXT1cIidQUklOVEVSJyB8IGxvY2FsaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJhY3RpdmVQcmludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheUZpZWxkXT1cIiduYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbGxlY3Rpb25dPVwicHJpbnRlckxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXNlbGVjdF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiaGVhZGVyUmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hEaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiaGFuZGxlUHJpbnRlckNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICA+PC9jby1saXN0LW9mLXZhbHVlcz5cclxuICAgICAgICAgIDxjby1saXN0LW9mLXZhbHVlcyBbbGFiZWxdPVwiJ1BSSU5URVJfTEFZT1VUJyB8IGxvY2FsaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJzZWxlY3RlZFByaW50ZXJMYXlvdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5RmllbGRdPVwiJ25hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sbGVjdGlvbl09XCJwcmludGVyTGF5b3V0c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpc2VsZWN0XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJoZWFkZXJSZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaERpc2FibGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgPjwvY28tbGlzdC1vZi12YWx1ZXM+XHJcbiAgICAgICAgICA8Y28tbGlzdC1vZi12YWx1ZXMgKm5nSWY9XCJzaG93RW1haWxMYXlvdXRPcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInRU1BSUxfTEFZT1VUJyB8IGxvY2FsaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJzZWxlY3RlZEVtYWlsTGF5b3V0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheUZpZWxkXT1cIiduYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbGxlY3Rpb25dPVwiZW1haWxMYXlvdXRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlzZWxlY3RdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImhlYWRlclJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoRGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICA+PC9jby1saXN0LW9mLXZhbHVlcz5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY2VpcHQtb3B0aW9uLXdyYXBwZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNlaXB0LW9wdGlvblwiIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlSW5wdXRcIiAqbmdGb3I9XCJsZXQgcmVjZWlwdE9wdGlvbiBvZiByZWNlaXB0T3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGlja1JlY2VpcHQocmVjZWlwdE9wdGlvbi50aXRsZSlcIj5cclxuICAgICAgICAgICAgPGNvLWljb24gW2ljb25EYXRhXT1cInJlY2VpcHRPcHRpb24uaWNvbkRhdGFcIj48L2NvLWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJyZWNlaXB0T3B0aW9uLnRpdGxlIHwgbG9jYWxpemVcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2NvLWRpYWxvZz5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2hlYWRlclRlbXBsYXRlPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtd3JhcHBlclwiPlxyXG4gICAgICAgIDxjby1pY29uIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24oaWNvbnMuQ2FzaFJlZ2lzdGVyKVwiPjwvY28taWNvbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImNvLWRpYWxvZy1oZWFkZXItdGl0bGVcIiBbdGV4dENvbnRlbnRdPVwiJ0NBU0hfUkVHSVNURVJfUkVDRUlQVCcgfCBsb2NhbGl6ZVwiPjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIGAsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25DYXNoUmVnaXN0ZXJPcmRlclJlY2VpcHREaWFsb2dDb21wb25lbnQgZXh0ZW5kcyBUcmFuc2FjdGlvbkJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHB1YmxpYyByZWFkb25seSBidXR0b25UeXBlOiB0eXBlb2YgQXBwUG9wdXBCdXR0b25UeXBlID0gQXBwUG9wdXBCdXR0b25UeXBlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjYXNoUmVnaXN0ZXJQYXltZW50RGV0YWlsczogUGF5bWVudFRyYW5zYWN0aW9uVmlld01vZGVsO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBpc1JlcHJpbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY3VycmVudFRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2hvd0Nsb3NlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBoYW5kbGVSZWNlaXB0T3B0aW9uU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGNsb3NlOiBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XHJcblxyXG4gIHB1YmxpYyBkaXNhYmxlSW5wdXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZW1haWxBZGRyZXNzTGlzdDogc3RyaW5nW10gPSBbXTtcclxuICBwdWJsaWMgcHJpbnRlckxpc3Q6IFByaW50ZXJbXSA9IFtdO1xyXG4gIHB1YmxpYyBhY3RpdmVQcmludGVyOiBQcmludGVyO1xyXG4gIHB1YmxpYyBwcmludGVyTGF5b3V0czogUmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnRbXSA9IFtdO1xyXG4gIHB1YmxpYyBlbWFpbExheW91dHM6IFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsW10gPSBbXTtcclxuICBwdWJsaWMgc2VsZWN0ZWRQcmludGVyTGF5b3V0OiBSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludDtcclxuICBwdWJsaWMgc2VsZWN0ZWRFbWFpbExheW91dDogUmVwb3J0TGF5b3V0U2VsZWN0aW9uRW1haWw7XHJcbiAgcHVibGljIHJlY2VpcHRPcHRpb25zOiB7IHRpdGxlOiBzdHJpbmcsIGljb25EYXRhOiBTYWZlSHRtbCB9W107XHJcbiAgcHVibGljIHNob3dFbWFpbExheW91dE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLmNvLXRyYW5zYWN0aW9uLWNhc2gtcmVnaXN0ZXItb3JkZXItcmVjZWlwdC1kaWFsb2dcIilcclxuICBwdWJsaWMgc2hvd0NsYXNzKCkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgaWYgKHRoaXMuaXNSZXByaW50KSB7XHJcbiAgICAgIHRoaXMuX3ByZXBhcmVEaWFsb2dEYXRhKCk7XHJcbiAgICAgIHRoaXMuX2dldERlZmF1bHRFbWFpbEFkZHJlc3NMaXN0Rm9yUG9zUmVwcmludFJlY2VpcHQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2dldERlZmF1bHRFbWFpbEFkZHJlc3NMaXN0Rm9yUG9zUmVjZWlwdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWNlaXB0T3B0aW9ucyA9IHRoaXMuX3ByZXBhcmVSZWNlaXB0T3B0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVtYWlsUmVjZWlwdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlcXVlc3Q6IEVtYWlsUG9zUmVjZWlwdFJlcXVlc3QgPSBuZXcgRW1haWxQb3NSZWNlaXB0UmVxdWVzdCgpO1xyXG4gICAgaWYgKHRoaXMuaXNSZXByaW50KSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRW1haWxMYXlvdXQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJlcXVlc3QudHJhbnNJZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZDtcclxuICAgICAgICByZXF1ZXN0LnRvQWRkcmVzc2VzID0gdGhpcy5lbWFpbEFkZHJlc3NMaXN0LmpvaW4oJzsnKTtcclxuICAgICAgICByZXF1ZXN0LnJlcG9ydElkID0gdGhpcy5zZWxlY3RlZEVtYWlsTGF5b3V0LnJlcG9ydElkO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25TZXJ2aWNlLmVtYWlsSGlzdG9yaWNQb3NSZWNlaXB0KHJlcXVlc3QpLnRoZW4oKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgIGlmIChzdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVjZWlwdE9wdGlvblNlbGVjdGVkLm5leHQoKTtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDbG9zZSh0aGlzLmJ1dHRvblR5cGUuT2spO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlSW5wdXQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVJbnB1dCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXF1ZXN0LnRyYW5zSWQgPSB0aGlzLnRyYW5zYWN0aW9uSW5mby5pZDtcclxuICAgICAgcmVxdWVzdC50b0FkZHJlc3NlcyA9IHRoaXMuZW1haWxBZGRyZXNzTGlzdC5qb2luKCc7Jyk7XHJcbiAgICAgIHJlcXVlc3QucmVwb3J0SWQgPSB0aGlzLmNhc2hSZWdpc3RlclBheW1lbnREZXRhaWxzLmVtYWlsTGF5b3V0LnJlcG9ydElkO1xyXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uU2VydmljZS5lbWFpbFBvc1JlY2VpcHQocmVxdWVzdCkudGhlbigoc3VjY2VzczogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlY2VpcHRPcHRpb25TZWxlY3RlZC5uZXh0KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGlzYWJsZUlucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmludFJlY2VpcHQoKTogdm9pZCB7XHJcbiAgICBjb25zdCByZXF1ZXN0OiBQcmludFBvc1JlY2VpcHRSZXF1ZXN0ID0gbmV3IFByaW50UG9zUmVjZWlwdFJlcXVlc3QoKTtcclxuICAgIGlmICh0aGlzLmlzUmVwcmludCkge1xyXG4gICAgICBpZiAodGhpcy5hY3RpdmVQcmludGVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZWxlY3RlZFByaW50ZXJMYXlvdXQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJlcXVlc3QudHJhbnNJZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZDtcclxuICAgICAgICByZXF1ZXN0LmNvcGllcyA9IDE7XHJcbiAgICAgICAgcmVxdWVzdC5wcmludGVyTmFtZSA9IHRoaXMuYWN0aXZlUHJpbnRlci5uYW1lO1xyXG4gICAgICAgIHJlcXVlc3QucmVwb3J0SWQgPSB0aGlzLnNlbGVjdGVkUHJpbnRlckxheW91dC5yZXBvcnRJZDtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uU2VydmljZS5wcmludEhpc3RvcmljUG9zUmVjZWlwdChyZXF1ZXN0KS50aGVuKChzdWNjZXNzOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAoc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlY2VpcHRPcHRpb25TZWxlY3RlZC5uZXh0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xvc2UodGhpcy5idXR0b25UeXBlLk9rKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUlucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlSW5wdXQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVxdWVzdC50cmFuc0lkID0gdGhpcy50cmFuc2FjdGlvbkluZm8uaWQ7XHJcbiAgICAgIHJlcXVlc3QuY29waWVzID0gMTtcclxuICAgICAgcmVxdWVzdC5wcmludGVyTmFtZSA9IHRoaXMuY2FzaFJlZ2lzdGVyUGF5bWVudERldGFpbHMucHJpbnRlci5uYW1lO1xyXG4gICAgICByZXF1ZXN0LnJlcG9ydElkID0gdGhpcy5jYXNoUmVnaXN0ZXJQYXltZW50RGV0YWlscy5wcmludGVyTGF5b3V0LnJlcG9ydElkO1xyXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uU2VydmljZS5wcmludFBvc1JlY2VpcHQocmVxdWVzdCkudGhlbigoc3VjY2VzczogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlY2VpcHRPcHRpb25TZWxlY3RlZC5uZXh0KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGlzYWJsZUlucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBub1ByaW50UmVjZWlwdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlUmVjZWlwdE9wdGlvblNlbGVjdGVkLm5leHQoKTtcclxuICAgIHRoaXMuZGlzYWJsZUlucHV0ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ2xpY2tSZWNlaXB0KHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlSW5wdXQpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlSW5wdXQgPSB0cnVlO1xyXG5cclxuICAgICAgc3dpdGNoICh0aXRsZSkge1xyXG4gICAgICAgIGNhc2UgJ0VNQUlMJzpcclxuICAgICAgICAgIHRoaXMuZW1haWxSZWNlaXB0KCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdQUklOVCc6XHJcbiAgICAgICAgICB0aGlzLnByaW50UmVjZWlwdCgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnTk9fUkVDRUlQVCc6XHJcbiAgICAgICAgICB0aGlzLm5vUHJpbnRSZWNlaXB0KCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZVByaW50ZXJDaGFuZ2VkKHByaW50ZXI6IFByaW50ZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuYWN0aXZlUHJpbnRlciA9IHByaW50ZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ2xvc2VEaWFsb2coZXZlbnQ6IE1vdXNlRXZlbnQsIHR5cGU6IEFwcFBvcHVwQnV0dG9uVHlwZSk6IHZvaWQge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oYW5kbGVDbG9zZSh0eXBlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVDbG9zZSh0eXBlOiBBcHBQb3B1cEJ1dHRvblR5cGUpOiB2b2lkIHtcclxuICAgIGlmICh0eXBlID09PSBBcHBQb3B1cEJ1dHRvblR5cGUuQ2FuY2VsKSB7XHJcbiAgICAgIHRoaXMucm9sbGJhY2soKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xyXG4gICAgdGhpcy5vbkNsb3NlKHR5cGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2xvc2UoZXZlbnRUeXBlOiBBcHBQb3B1cEJ1dHRvblR5cGUsIG91dHB1dD86IGFueSk6IHZvaWQge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZ2V0RGVmYXVsdEVtYWlsQWRkcmVzc0xpc3RGb3JQb3NSZWNlaXB0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy50cmFuc2FjdGlvblNlcnZpY2UuZ2V0RGVmYXVsdEVtYWlsQWRkcmVzc0xpc3RGb3JQb3NSZWNlaXB0KHRoaXMudHJhbnNhY3Rpb25JbmZvLnV1aWQpXHJcbiAgICAgIC50aGVuKChlbWFpbEFkZHJlc3NMaXN0OiBzdHJpbmdbXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZW1haWxBZGRyZXNzTGlzdCA9IGVtYWlsQWRkcmVzc0xpc3Q7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZ2V0RGVmYXVsdEVtYWlsQWRkcmVzc0xpc3RGb3JQb3NSZXByaW50UmVjZWlwdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucmVsYXRpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uU2VydmljZS5nZXREZWZhdWx0RW1haWxBZGRyZXNzTGlzdEZvclBvc1JlY2VpcHQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQpXHJcbiAgICAgICAgLnRoZW4oKGVtYWlsQWRkcmVzc0xpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVtYWlsQWRkcmVzc0xpc3QgPSBlbWFpbEFkZHJlc3NMaXN0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcHJlcGFyZURpYWxvZ0RhdGEoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBwcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW1xyXG4gICAgICB0aGlzLl9nZXRQcmludGVycygpLFxyXG4gICAgICB0aGlzLl9nZXRQcmludGVyTGF5b3V0cygpLFxyXG4gICAgICB0aGlzLl9nZXRFbWFpbExheW91dHMoKVxyXG4gICAgXTtcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2dldFByaW50ZXJzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5wcmludGVyTGlzdCA9IGF3YWl0IHRoaXMudHJhbnNhY3Rpb25TZXJ2aWNlLmdldFByaW50ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9nZXRQcmludGVyTGF5b3V0cygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMucHJpbnRlckxheW91dHMgPSBhd2FpdCB0aGlzLnRyYW5zYWN0aW9uU2VydmljZS5nZXRQb3NSZWNlaXB0UHJpbnRMYXlvdXRzKHRoaXMudHJhbnNhY3Rpb25JbmZvLnV1aWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZ2V0RW1haWxMYXlvdXRzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5lbWFpbExheW91dHMgPSBhd2FpdCB0aGlzLnRyYW5zYWN0aW9uU2VydmljZS5nZXRQb3NSZWNlaXB0RW1haWxMYXlvdXRzKHRoaXMudHJhbnNhY3Rpb25JbmZvLnV1aWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZVJlY2VpcHRPcHRpb25zKCkge1xyXG4gICAgbGV0IG91dHB1dDtcclxuICAgIGlmICh0aGlzLmlzUmVwcmludCkge1xyXG4gICAgICBpZiAodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnJlbGF0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBvdXRwdXQgPSBbXHJcbiAgICAgICAgICB7dGl0bGU6ICdFTUFJTCcsIGljb25EYXRhOiB0aGlzLmljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbih0aGlzLmljb25zLkF0U29saWQpfSxcclxuICAgICAgICAgIHt0aXRsZTogJ1BSSU5UJywgaWNvbkRhdGE6IHRoaXMuaWNvbkNhY2hlU2VydmljZS5nZXRJY29uKHRoaXMuaWNvbnMuUHJpbnRTb2xpZCl9XHJcbiAgICAgICAgXVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd0VtYWlsTGF5b3V0T3B0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgb3V0cHV0ID0gW1xyXG4gICAgICAgICAge3RpdGxlOiAnUFJJTlQnLCBpY29uRGF0YTogdGhpcy5pY29uQ2FjaGVTZXJ2aWNlLmdldEljb24odGhpcy5pY29ucy5QcmludFNvbGlkKX1cclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG91dHB1dCA9IFtcclxuICAgICAgICB7dGl0bGU6ICdFTUFJTCcsIGljb25EYXRhOiB0aGlzLmljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbih0aGlzLmljb25zLkF0U29saWQpfSxcclxuICAgICAgICB7dGl0bGU6ICdQUklOVCcsIGljb25EYXRhOiB0aGlzLmljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbih0aGlzLmljb25zLlByaW50U29saWQpfSxcclxuICAgICAgICB7dGl0bGU6ICdOT19SRUNFSVBUJywgaWNvbkRhdGE6IHRoaXMuaWNvbkNhY2hlU2VydmljZS5nZXRJY29uKHRoaXMuaWNvbnMuUmVndWxhclJlY2VpcHRTbGFzaCl9XHJcbiAgICAgIF1cclxuICAgIH1cclxuICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,25 @@
1
+ import { NgModule } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { TransactionCashRegisterOrderReceiptDialogComponent } from "./transaction-cash-register-order-receipt-dialog.component";
4
+ import { CoDialogModule, IconModule, ListOfValuesModule } from "@colijnit/corecomponents_v12";
5
+ import { PipeModule } from "../../../pipe/pipe.module";
6
+ export class TransactionCashRegisterOrderReceiptDialogModule {
7
+ }
8
+ TransactionCashRegisterOrderReceiptDialogModule.decorators = [
9
+ { type: NgModule, args: [{
10
+ imports: [
11
+ CommonModule,
12
+ PipeModule,
13
+ IconModule,
14
+ CoDialogModule,
15
+ ListOfValuesModule
16
+ ],
17
+ declarations: [
18
+ TransactionCashRegisterOrderReceiptDialogComponent
19
+ ],
20
+ exports: [
21
+ TransactionCashRegisterOrderReceiptDialogComponent
22
+ ]
23
+ },] }
24
+ ];
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24tY2FzaC1yZWdpc3Rlci1vcmRlci1yZWNlaXB0LWRpYWxvZy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cmFuc2FjdGlvbi9zcmMvbGliL2NvbXBvbmVudC90cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLW9yZGVyL3RyYW5zYWN0aW9uLWNhc2gtcmVnaXN0ZXItb3JkZXItcmVjZWlwdC1kaWFsb2cvdHJhbnNhY3Rpb24tY2FzaC1yZWdpc3Rlci1vcmRlci1yZWNlaXB0LWRpYWxvZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGtEQUFrRCxFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDOUgsT0FBTyxFQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFpQnJELE1BQU0sT0FBTywrQ0FBK0M7OztZQWYzRCxRQUFRLFNBQUM7Z0JBQ1IsT0FBTyxFQUFFO29CQUNQLFlBQVk7b0JBQ1osVUFBVTtvQkFDVixVQUFVO29CQUNWLGNBQWM7b0JBQ2Qsa0JBQWtCO2lCQUNuQjtnQkFDQyxZQUFZLEVBQUU7b0JBQ1Ysa0RBQWtEO2lCQUNyRDtnQkFDRCxPQUFPLEVBQUU7b0JBQ0wsa0RBQWtEO2lCQUNyRDthQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkNhc2hSZWdpc3Rlck9yZGVyUmVjZWlwdERpYWxvZ0NvbXBvbmVudH0gZnJvbSBcIi4vdHJhbnNhY3Rpb24tY2FzaC1yZWdpc3Rlci1vcmRlci1yZWNlaXB0LWRpYWxvZy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtDb0RpYWxvZ01vZHVsZSwgSWNvbk1vZHVsZSwgTGlzdE9mVmFsdWVzTW9kdWxlfSBmcm9tIFwiQGNvbGlqbml0L2NvcmVjb21wb25lbnRzX3YxMlwiO1xyXG5pbXBvcnQge1BpcGVNb2R1bGV9IGZyb20gXCIuLi8uLi8uLi9waXBlL3BpcGUubW9kdWxlXCI7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFBpcGVNb2R1bGUsXHJcbiAgICBJY29uTW9kdWxlLFxyXG4gICAgQ29EaWFsb2dNb2R1bGUsXHJcbiAgICBMaXN0T2ZWYWx1ZXNNb2R1bGVcclxuICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgICAgVHJhbnNhY3Rpb25DYXNoUmVnaXN0ZXJPcmRlclJlY2VpcHREaWFsb2dDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgICAgVHJhbnNhY3Rpb25DYXNoUmVnaXN0ZXJPcmRlclJlY2VpcHREaWFsb2dDb21wb25lbnRcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQ2FzaFJlZ2lzdGVyT3JkZXJSZWNlaXB0RGlhbG9nTW9kdWxlIHtcclxufVxyXG4iXX0=
@@ -95,42 +95,45 @@ TransactionCashRegisterPaymentDialogComponent.decorators = [
95
95
  { type: Component, args: [{
96
96
  selector: "co-transaction-cash-register-payment-dialog",
97
97
  template: `
98
- <co-dialog [showCloseIcon]=true [headerTemplate]="headerTemplate" (closeClick)="closeDialog.emit()">
99
- <div class="dialog-content-wrapper">
100
- <div class="image-wrapper">
101
- <img class="payment-image">
102
- </div>
103
- <div class="payment-wrapper" *ngIf="transactionSaved">
104
- <co-transaction-cash-register-payment-pin *ngIf="paymentState === paymentStates.Pin" @showHideContent
105
- (toCashRegisterOrderClicked)="closeDialog.next()"
106
- (changePaymentMethodClicked)="changePaymentMethodClicked()"
107
- ></co-transaction-cash-register-payment-pin>
108
- <co-transaction-cash-register-payment-cash *ngIf="paymentState === paymentStates.Cash" @showHideContent
109
- (toCashRegisterOrderClicked)="closeDialog.next()"
110
- (changePaymentMethodClicked)="changePaymentMethodClicked()"
111
- (confirmPaymentClicked)="handlePayment()"
112
- ></co-transaction-cash-register-payment-cash>
113
- <co-transaction-cash-register-payment-qr-code *ngIf="paymentState === paymentStates.QR" @showHideContent
114
- (toCashRegisterOrderClicked)="closeDialog.next()"
115
- (changePaymentMethodClicked)="changePaymentMethodClicked()"
116
- ></co-transaction-cash-register-payment-qr-code>
117
- <co-transaction-cash-register-payment-method *ngIf="paymentState === paymentStates.ChangeMethod" @showHideContent
118
- (paymentMethodChanged)="handleChangePaymentMethod($event)"
119
- ></co-transaction-cash-register-payment-method>
120
- <co-transaction-cash-register-payment-done *ngIf="paymentState === paymentStates.Done" @showHideContent
121
- [relation]="relation"
122
- (handleReceiptOptionSelected)="handleCloseDialog()"
123
- ></co-transaction-cash-register-payment-done>
124
- <span class="payment-status-message" *ngIf="paymentService.statusMessage" [textContent]="paymentService.statusMessage"></span>
125
- </div>
126
- </div>
127
- </co-dialog>
128
- <ng-template #headerTemplate>
129
- <div class="title-wrapper">
130
- <span [textContent]="'POS_ORDER2' | localize | append: ' ' | append: transactionNr"></span>
131
- <span class="title-date" [textContent]="(currentDate | date: 'dd MMMM yyy') + ' | ' + (currentDate | date: 'HH:mm')"></span>
132
- </div>
133
- </ng-template>
98
+ <co-dialog [showCloseIcon]=true [headerTemplate]="headerTemplate" (closeClick)="closeDialog.emit()">
99
+ <div class="dialog-content-wrapper">
100
+ <div class="image-wrapper">
101
+ <img class="payment-image">
102
+ </div>
103
+ <div class="payment-wrapper" *ngIf="transactionSaved">
104
+ <co-transaction-cash-register-payment-pin *ngIf="paymentState === paymentStates.Pin" @showHideContent
105
+ (toCashRegisterOrderClicked)="closeDialog.next()"
106
+ (changePaymentMethodClicked)="changePaymentMethodClicked()"
107
+ ></co-transaction-cash-register-payment-pin>
108
+ <co-transaction-cash-register-payment-cash *ngIf="paymentState === paymentStates.Cash" @showHideContent
109
+ (toCashRegisterOrderClicked)="closeDialog.next()"
110
+ (changePaymentMethodClicked)="changePaymentMethodClicked()"
111
+ (confirmPaymentClicked)="handlePayment()"
112
+ ></co-transaction-cash-register-payment-cash>
113
+ <co-transaction-cash-register-payment-qr-code *ngIf="paymentState === paymentStates.QR" @showHideContent
114
+ (toCashRegisterOrderClicked)="closeDialog.next()"
115
+ (changePaymentMethodClicked)="changePaymentMethodClicked()"
116
+ ></co-transaction-cash-register-payment-qr-code>
117
+ <co-transaction-cash-register-payment-method *ngIf="paymentState === paymentStates.ChangeMethod"
118
+ @showHideContent
119
+ (paymentMethodChanged)="handleChangePaymentMethod($event)"
120
+ ></co-transaction-cash-register-payment-method>
121
+ <co-transaction-cash-register-payment-done *ngIf="paymentState === paymentStates.Done" @showHideContent
122
+ [relation]="relation"
123
+ (handleReceiptOptionSelected)="handleCloseDialog()"
124
+ ></co-transaction-cash-register-payment-done>
125
+ <span class="payment-status-message" *ngIf="paymentService.statusMessage"
126
+ [textContent]="paymentService.statusMessage"></span>
127
+ </div>
128
+ </div>
129
+ </co-dialog>
130
+ <ng-template #headerTemplate>
131
+ <div class="title-wrapper">
132
+ <span [textContent]="'POS_ORDER2' | localize | append: ' ' | append: transactionNr"></span>
133
+ <span class="title-date"
134
+ [textContent]="(currentDate | date: 'dd MMMM yyy') + ' | ' + (currentDate | date: 'HH:mm')"></span>
135
+ </div>
136
+ </ng-template>
134
137
  `,
135
138
  providers: [
136
139
  TransactionPaymentService
@@ -162,4 +165,4 @@ TransactionCashRegisterPaymentDialogComponent.propDecorators = {
162
165
  posOrderPayed: [{ type: Output }],
163
166
  showClass: [{ type: HostBinding, args: ["class.co-transaction-cash-register-payment-dialog",] }]
164
167
  };
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24tY2FzaC1yZWdpc3Rlci1wYXltZW50LWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cmFuc2FjdGlvbi9zcmMvbGliL2NvbXBvbmVudC90cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLW9yZGVyL3RyYW5zYWN0aW9uLWNhc2gtcmVnaXN0ZXItcGF5bWVudC1kaWFsb2cvdHJhbnNhY3Rpb24tY2FzaC1yZWdpc3Rlci1wYXltZW50LWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWhJLE9BQU8sRUFBQyxtQ0FBbUMsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ25HLE9BQU8sRUFBQyxrQ0FBa0MsRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBQzFHLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ25GLE9BQU8sRUFBQywrQkFBK0IsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQ25HLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBRXJFLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUF3RC9FLE1BQU0sT0FBTyw2Q0FBOEMsU0FBUSwrQkFBK0I7SUEwQ2hHLFlBQ1ksa0JBQXNDLEVBQ3RDLHVCQUEyRCxFQUMzRCx1QkFBZ0Qs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LEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUMsU0FBUyxFQUFFLGtCQUFrQixFQUFDLENBQUMsQ0FBQzt3QkFDckQsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBQyxTQUFTLEVBQUUsZUFBZSxFQUFDLENBQUMsQ0FBQzt3QkFDL0MsVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQzt3QkFDM0QsVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztxQkFDbkQsQ0FBQztpQkFDSDtnQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN0Qzs7O1lBN0RPLGtCQUFrQjtZQURsQixrQ0FBa0M7WUFFbEMsdUJBQXVCO1lBTHZCLGlCQUFpQjtZQVNqQix5QkFBeUI7WUFGekIsZ0JBQWdCOzs7dUJBOERyQixLQUFLOzRCQUdMLEtBQUs7K0JBR0wsS0FBSzswQkFnQkwsTUFBTTs0QkFHTixNQUFNO3dCQUdOLFdBQVcsU0FBQyxtREFBbUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1BheW1lbnRWaWV3bW9kZWx9IGZyb20gJy4uLy4uLy4uL21vZGVsL3BheW1lbnQudmlld21vZGVsJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkNhc2hSZWdpc3RlclBheW1lbnRTdGF0ZX0gZnJvbSAnLi90cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLXBheW1lbnQtc3RhdGUuZW51bSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25QYXltZW50Q29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS90cmFuc2FjdGlvbi1wYXltZW50LWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvdHJhbnNhY3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25FdmVudFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvdHJhbnNhY3Rpb24tZXZlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25QYXltZW50QmFzZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vY29yZS9iYXNlL3RyYW5zYWN0aW9uLXBheW1lbnQtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge0ljb25DYWNoZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvaWNvbi1jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm9SZXNwb25zZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWluZm8tcmVzcG9uc2UuYm8nO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uUGF5bWVudFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvdHJhbnNhY3Rpb24tcGF5bWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQge1JlbGF0aW9uQW55VHlwZX0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLWFueS10eXBlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImNvLXRyYW5zYWN0aW9uLWNhc2gtcmVnaXN0ZXItcGF5bWVudC1kaWFsb2dcIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgICA8Y28tZGlhbG9nIFtzaG93Q2xvc2VJY29uXT10cnVlIFtoZWFkZXJUZW1wbGF0ZV09XCJoZWFkZXJUZW1wbGF0ZVwiIChjbG9zZUNsaWNrKT1cImNsb3NlRGlhbG9nLmVtaXQoKVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRpYWxvZy1jb250ZW50LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2Utd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwicGF5bWVudC1pbWFnZVwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXltZW50LXdyYXBwZXJcIiAqbmdJZj1cInRyYW5zYWN0aW9uU2F2ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgPGNvLXRyYW5zYWN0aW9uLWNhc2gtcmVnaXN0ZXItcGF5bWVudC1waW4gKm5nSWY9XCJwYXltZW50U3RhdGUgPT09IHBheW1lbnRTdGF0ZXMuUGluXCIgQHNob3dIaWRlQ29udGVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG9DYXNoUmVnaXN0ZXJPcmRlckNsaWNrZWQpPVwiY2xvc2VEaWFsb2cubmV4dCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZVBheW1lbnRNZXRob2RDbGlja2VkKT1cImNoYW5nZVBheW1lbnRNZXRob2RDbGlja2VkKClcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9jby10cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLXBheW1lbnQtcGluPlxyXG4gICAgICAgICAgICAgICAgICA8Y28tdHJhbnNhY3Rpb24tY2FzaC1yZWdpc3Rlci1wYXltZW50LWNhc2ggKm5nSWY9XCJwYXltZW50U3RhdGUgPT09IHBheW1lbnRTdGF0ZXMuQ2FzaFwiIEBzaG93SGlkZUNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b0Nhc2hSZWdpc3Rlck9yZGVyQ2xpY2tlZCk9XCJjbG9zZURpYWxvZy5uZXh0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZVBheW1lbnRNZXRob2RDbGlja2VkKT1cImNoYW5nZVBheW1lbnRNZXRob2RDbGlja2VkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmZpcm1QYXltZW50Q2xpY2tlZCk9XCJoYW5kbGVQYXltZW50KClcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9jby10cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLXBheW1lbnQtY2FzaD5cclxuICAgICAgICAgICAgICAgICAgPGNvLXRyYW5zYWN0aW9uLWNhc2gtcmVnaXN0ZXItcGF5bWVudC1xci1jb2RlICpuZ0lmPVwicGF5bWVudFN0YXRlID09PSBwYXltZW50U3RhdGVzLlFSXCIgQHNob3dIaWRlQ29udGVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvQ2FzaFJlZ2lzdGVyT3JkZXJDbGlja2VkKT1cImNsb3NlRGlhbG9nLm5leHQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlUGF5bWVudE1ldGhvZENsaWNrZWQpPVwiY2hhbmdlUGF5bWVudE1ldGhvZENsaWNrZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgID48L2NvLXRyYW5zYWN0aW9uLWNhc2gtcmVnaXN0ZXItcGF5bWVudC1xci1jb2RlPlxyXG4gICAgICAgICAgICAgICAgICA8Y28tdHJhbnNhY3Rpb24tY2FzaC1yZWdpc3Rlci1wYXltZW50LW1ldGhvZCAqbmdJZj1cInBheW1lbnRTdGF0ZSA9PT0gcGF5bWVudFN0YXRlcy5DaGFuZ2VNZXRob2RcIiBAc2hvd0hpZGVDb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXltZW50TWV0aG9kQ2hhbmdlZCk9XCJoYW5kbGVDaGFuZ2VQYXltZW50TWV0aG9kKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9jby10cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLXBheW1lbnQtbWV0aG9kPlxyXG4gICAgICAgICAgICAgICAgICA8Y28tdHJhbnNhY3Rpb24tY2FzaC1yZWdpc3Rlci1wYXltZW50LWRvbmUgKm5nSWY9XCJwYXltZW50U3RhdGUgPT09IHBheW1lbnRTdGF0ZXMuRG9uZVwiIEBzaG93SGlkZUNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWxhdGlvbl09XCJyZWxhdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGFuZGxlUmVjZWlwdE9wdGlvblNlbGVjdGVkKT1cImhhbmRsZUNsb3NlRGlhbG9nKClcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9jby10cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLXBheW1lbnQtZG9uZT5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYXltZW50LXN0YXR1cy1tZXNzYWdlXCIgKm5nSWY9XCJwYXltZW50U2VydmljZS5zdGF0dXNNZXNzYWdlXCIgW3RleHRDb250ZW50XT1cInBheW1lbnRTZXJ2aWNlLnN0YXR1c01lc3NhZ2VcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9jby1kaWFsb2c+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGU+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCInUE9TX09SREVSMicgfCBsb2NhbGl6ZSB8IGFwcGVuZDogJyAnIHwgYXBwZW5kOiB0cmFuc2FjdGlvbk5yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGUtZGF0ZVwiIFt0ZXh0Q29udGVudF09XCIoY3VycmVudERhdGUgfCBkYXRlOiAnZGQgTU1NTSB5eXknKSArICcgfCAnICsgKGN1cnJlbnREYXRlIHwgZGF0ZTogJ0hIOm1tJylcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICBgLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgVHJhbnNhY3Rpb25QYXltZW50U2VydmljZVxyXG4gIF0sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignc2hvd0hpZGVDb250ZW50JywgW1xyXG4gICAgICBzdGF0ZSgndm9pZCcsIHN0eWxlKHt0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDEwMCUpJ30pKSxcclxuICAgICAgc3RhdGUoJyonLCBzdHlsZSh7dHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKSd9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIGFuaW1hdGUoJzIwMG1zIDIwMG1zIGVhc2UtaW4tb3V0JykpLFxyXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBhbmltYXRlKCcyMDBtcyBlYXNlLW91dCcpKVxyXG4gICAgXSlcclxuICBdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQ2FzaFJlZ2lzdGVyUGF5bWVudERpYWxvZ0NvbXBvbmVudCBleHRlbmRzIFRyYW5zYWN0aW9uUGF5bWVudEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHB1YmxpYyByZWFkb25seSBwYXltZW50U3RhdGVzOiB0eXBlb2YgVHJhbnNhY3Rpb25DYXNoUmVnaXN0ZXJQYXltZW50U3RhdGUgPSBUcmFuc2FjdGlvbkNhc2hSZWdpc3RlclBheW1lbnRTdGF0ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcmVsYXRpb246IFJlbGF0aW9uQW55VHlwZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdHJhbnNhY3Rpb25OcjogbnVtYmVyO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgcGF5bWVudFZpZXdNb2RlbChwYXltZW50Vmlld01vZGVsOiBQYXltZW50Vmlld21vZGVsKSB7XHJcbiAgICB0aGlzLnBheW1lbnRTZXJ2aWNlLnN0YXR1c01lc3NhZ2UgPSBcIlwiO1xyXG4gICAgdGhpcy5fcGF5bWVudFZpZXdNb2RlbCA9IHBheW1lbnRWaWV3TW9kZWw7XHJcbiAgICB0aGlzLmN1cnJlbnRQYXltZW50TWV0aG9kID0gdGhpcy5fcGF5bWVudFZpZXdNb2RlbC5wYXltZW50O1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBheW1lbnRNZXRob2QuZXh0ZXJuYWxTb3VyY2VJZCkge1xyXG4gICAgICBpZiAodGhpcy5jdXJyZW50UGF5bWVudE1ldGhvZC5waW5UZXJtaW5hbCkge1xyXG4gICAgICAgIHRoaXMuX2NoYW5nZVBheW1lbnRTdGF0ZShUcmFuc2FjdGlvbkNhc2hSZWdpc3RlclBheW1lbnRTdGF0ZS5QaW4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NoYW5nZVBheW1lbnRTdGF0ZShUcmFuc2FjdGlvbkNhc2hSZWdpc3RlclBheW1lbnRTdGF0ZS5RUik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50UGF5bWVudE1ldGhvZC5jYXNoKSB7XHJcbiAgICAgIHRoaXMuX2NoYW5nZVBheW1lbnRTdGF0ZShUcmFuc2FjdGlvbkNhc2hSZWdpc3RlclBheW1lbnRTdGF0ZS5DYXNoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBjbG9zZURpYWxvZzogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgcG9zT3JkZXJQYXllZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBASG9zdEJpbmRpbmcoXCJjbGFzcy5jby10cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLXBheW1lbnQtZGlhbG9nXCIpXHJcbiAgcHVibGljIHNob3dDbGFzczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgcHVibGljIHBheW1lbnREb25lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGFtb3VudFBheWVkOiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBwYXltZW50U3RhdGU6IFRyYW5zYWN0aW9uQ2FzaFJlZ2lzdGVyUGF5bWVudFN0YXRlID0gVHJhbnNhY3Rpb25DYXNoUmVnaXN0ZXJQYXltZW50U3RhdGUuUGluO1xyXG4gIHB1YmxpYyB0cmFuc2FjdGlvblNhdmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX3BheW1lbnRWaWV3TW9kZWw6IFBheW1lbnRWaWV3bW9kZWw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHRyYW5zYWN0aW9uU2VydmljZTogVHJhbnNhY3Rpb25TZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHBheW1lbnRDb25uZWN0b3JTZXJ2aWNlOiBUcmFuc2FjdGlvblBheW1lbnRDb25uZWN0b3JTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlOiBUcmFuc2FjdGlvbkV2ZW50U2VydmljZSxcclxuICAgIHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgcGF5bWVudFNlcnZpY2U6IFRyYW5zYWN0aW9uUGF5bWVudFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgaWNvbkNhY2hlU2VydmljZTogSWNvbkNhY2hlU2VydmljZSxcclxuICApe1xyXG4gICAgc3VwZXIodHJhbnNhY3Rpb25TZXJ2aWNlLCBwYXltZW50Q29ubmVjdG9yU2VydmljZSwgdHJhbnNhY3Rpb25FdmVudFNlcnZpY2UsIGNoYW5nZURldGVjdG9yLCBwYXltZW50U2VydmljZSwgaWNvbkNhY2hlU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLnBheW1lbnRTZXJ2aWNlLnBheWVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmhhbmRsZVBheWVkKCkpLFxyXG4gICAgICB0aGlzLnBheW1lbnRTZXJ2aWNlLnBheW1lbnRGYWlsZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMucGF5bWVudFN0YXRlID0gVHJhbnNhY3Rpb25DYXNoUmVnaXN0ZXJQYXltZW50U3RhdGUuQ2hhbmdlTWV0aG9kKVxyXG4gICAgKVxyXG4gICAgdGhpcy5wYXltZW50U2VydmljZS5nZXREZXBvc2l0QW1vdW50ID0gZmFsc2U7XHJcbiAgICB0aGlzLnVzZUNhc2hSZWdpc3RlcnMgPSBmYWxzZTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMudHJhbnNhY3Rpb25TZXJ2aWNlLnNhdmVUcmFuc2FjdGlvbigpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmlzU3VjY2Vzcykge1xyXG4gICAgICB0aGlzLnRyYW5zSWQgPSByZXNwb25zZS50cmFuc2FjdGlvbkluZm8uaWQ7XHJcbiAgICB9XHJcbiAgICBhd2FpdCBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvblNhdmVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGFuZ2VQYXltZW50TWV0aG9kQ2xpY2tlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NoYW5nZVBheW1lbnRTdGF0ZShUcmFuc2FjdGlvbkNhc2hSZWdpc3RlclBheW1lbnRTdGF0ZS5DaGFuZ2VNZXRob2QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNoYW5nZVBheW1lbnRNZXRob2QocGF5bWVudFZpZXdNb2RlbDogUGF5bWVudFZpZXdtb2RlbCk6IHZvaWQge1xyXG4gICAgdGhpcy5wYXltZW50Vmlld01vZGVsID0gcGF5bWVudFZpZXdNb2RlbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVLZXlQYWRNb2RlbENoYW5nZShtb2RlbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmFtb3VudFBheWVkID0gbW9kZWw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaGFuZGxlUGF5ZWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnBheW1lbnREb25lID0gdHJ1ZTtcclxuICAgIGNvbnN0IHByb2Nlc3NlZDogYm9vbGVhbiA9IGF3YWl0IHRoaXMucGF5bWVudENvbm5lY3RvclNlcnZpY2UucHJvY2Vzc1Bvc1RyYW5zYWN0aW9uQnlVdWlkKHRoaXMudHJhbnNhY3Rpb25VdWlkKTtcclxuICAgIGlmIChwcm9jZXNzZWQpIHtcclxuICAgICAgY29uc3Qgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJhbnNhY3Rpb25TZXJ2aWNlLmNvbW1pdCgpO1xyXG4gICAgICBpZiAoc3VjY2Vzcykge1xyXG4gICAgICAgIHRoaXMuX2NoYW5nZVBheW1lbnRTdGF0ZShUcmFuc2FjdGlvbkNhc2hSZWdpc3RlclBheW1lbnRTdGF0ZS5Eb25lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNsb3NlRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbG9zZURpYWxvZy5uZXh0KCk7XHJcbiAgICB0aGlzLnBvc09yZGVyUGF5ZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2hhbmdlUGF5bWVudFN0YXRlKG5ld1N0YXRlOiBUcmFuc2FjdGlvbkNhc2hSZWdpc3RlclBheW1lbnRTdGF0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5wYXltZW50U3RhdGUgPSB1bmRlZmluZWQ7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wYXltZW50U3RhdGUgPSBuZXdTdGF0ZTtcclxuICAgIH0sIDIwMClcclxuICB9XHJcbn1cclxuIl19
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24tY2FzaC1yZWdpc3Rlci1wYXltZW50LWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cmFuc2FjdGlvbi9zcmMvbGliL2NvbXBvbmVudC90cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLW9yZGVyL3RyYW5zYWN0aW9uLWNhc2gtcmVnaXN0ZXItcGF5bWVudC1kaWFsb2cvdHJhbnNhY3Rpb24tY2FzaC1yZWdpc3Rlci1wYXltZW50LWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFDTixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLG1DQUFtQyxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDbkcsT0FBTyxFQUFDLGtDQUFrQyxFQUFDLE1BQU0sd0RBQXdELENBQUM7QUFDMUcsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDbkYsT0FBTyxFQUFDLCtCQUErQixFQUFDLE1BQU0sb0RBQW9ELENBQUM7QUFDbkcsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFFckUsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQTREL0UsTUFBTSxPQUFPLDZDQUE4QyxTQUFRLCtCQUErQjtJQTBDaEcsWUFDWSxrQkFBc0MsRUFDdEMsdUJBQTJELEVBQzNELHVCQUFn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QkFDekIsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBQyxTQUFTLEVBQUUsa0JBQWtCLEVBQUMsQ0FBQyxDQUFDO3dCQUNyRCxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUMsQ0FBQyxDQUFDO3dCQUMvQyxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO3dCQUMzRCxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3FCQUNuRCxDQUFDO2lCQUNIO2dCQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3RDOzs7WUFoRU8sa0JBQWtCO1lBRGxCLGtDQUFrQztZQUVsQyx1QkFBdUI7WUFiN0IsaUJBQWlCO1lBaUJYLHlCQUF5QjtZQUZ6QixnQkFBZ0I7Ozt1QkFrRXJCLEtBQUs7NEJBR0wsS0FBSzsrQkFHTCxLQUFLOzBCQWdCTCxNQUFNOzRCQUdOLE1BQU07d0JBR04sV0FBVyxTQUFDLG1EQUFtRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0QmluZGluZyxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7UGF5bWVudFZpZXdtb2RlbH0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvcGF5bWVudC52aWV3bW9kZWwnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uQ2FzaFJlZ2lzdGVyUGF5bWVudFN0YXRlfSBmcm9tICcuL3RyYW5zYWN0aW9uLWNhc2gtcmVnaXN0ZXItcGF5bWVudC1zdGF0ZS5lbnVtJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvblBheW1lbnRDb25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL3RyYW5zYWN0aW9uLXBheW1lbnQtY29ubmVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS90cmFuc2FjdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkV2ZW50U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS90cmFuc2FjdGlvbi1ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvblBheW1lbnRCYXNlQ29tcG9uZW50fSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UvdHJhbnNhY3Rpb24tcGF5bWVudC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7SWNvbkNhY2hlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9pY29uLWNhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24taW5mby1yZXNwb25zZS5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25QYXltZW50U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS90cmFuc2FjdGlvbi1wYXltZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge2FuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlcn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7UmVsYXRpb25BbnlUeXBlfSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tYW55LXR5cGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiY28tdHJhbnNhY3Rpb24tY2FzaC1yZWdpc3Rlci1wYXltZW50LWRpYWxvZ1wiLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8Y28tZGlhbG9nIFtzaG93Q2xvc2VJY29uXT10cnVlIFtoZWFkZXJUZW1wbGF0ZV09XCJoZWFkZXJUZW1wbGF0ZVwiIChjbG9zZUNsaWNrKT1cImNsb3NlRGlhbG9nLmVtaXQoKVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWNvbnRlbnQtd3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS13cmFwcGVyXCI+XHJcbiAgICAgICAgICA8aW1nIGNsYXNzPVwicGF5bWVudC1pbWFnZVwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYXltZW50LXdyYXBwZXJcIiAqbmdJZj1cInRyYW5zYWN0aW9uU2F2ZWRcIj5cclxuICAgICAgICAgIDxjby10cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLXBheW1lbnQtcGluICpuZ0lmPVwicGF5bWVudFN0YXRlID09PSBwYXltZW50U3RhdGVzLlBpblwiIEBzaG93SGlkZUNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b0Nhc2hSZWdpc3Rlck9yZGVyQ2xpY2tlZCk9XCJjbG9zZURpYWxvZy5uZXh0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZVBheW1lbnRNZXRob2RDbGlja2VkKT1cImNoYW5nZVBheW1lbnRNZXRob2RDbGlja2VkKClcIlxyXG4gICAgICAgICAgPjwvY28tdHJhbnNhY3Rpb24tY2FzaC1yZWdpc3Rlci1wYXltZW50LXBpbj5cclxuICAgICAgICAgIDxjby10cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLXBheW1lbnQtY2FzaCAqbmdJZj1cInBheW1lbnRTdGF0ZSA9PT0gcGF5bWVudFN0YXRlcy5DYXNoXCIgQHNob3dIaWRlQ29udGVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b0Nhc2hSZWdpc3Rlck9yZGVyQ2xpY2tlZCk9XCJjbG9zZURpYWxvZy5uZXh0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2VQYXltZW50TWV0aG9kQ2xpY2tlZCk9XCJjaGFuZ2VQYXltZW50TWV0aG9kQ2xpY2tlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZmlybVBheW1lbnRDbGlja2VkKT1cImhhbmRsZVBheW1lbnQoKVwiXHJcbiAgICAgICAgICA+PC9jby10cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLXBheW1lbnQtY2FzaD5cclxuICAgICAgICAgIDxjby10cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLXBheW1lbnQtcXItY29kZSAqbmdJZj1cInBheW1lbnRTdGF0ZSA9PT0gcGF5bWVudFN0YXRlcy5RUlwiIEBzaG93SGlkZUNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG9DYXNoUmVnaXN0ZXJPcmRlckNsaWNrZWQpPVwiY2xvc2VEaWFsb2cubmV4dCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlUGF5bWVudE1ldGhvZENsaWNrZWQpPVwiY2hhbmdlUGF5bWVudE1ldGhvZENsaWNrZWQoKVwiXHJcbiAgICAgICAgICA+PC9jby10cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLXBheW1lbnQtcXItY29kZT5cclxuICAgICAgICAgIDxjby10cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLXBheW1lbnQtbWV0aG9kICpuZ0lmPVwicGF5bWVudFN0YXRlID09PSBwYXltZW50U3RhdGVzLkNoYW5nZU1ldGhvZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc2hvd0hpZGVDb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF5bWVudE1ldGhvZENoYW5nZWQpPVwiaGFuZGxlQ2hhbmdlUGF5bWVudE1ldGhvZCgkZXZlbnQpXCJcclxuICAgICAgICAgID48L2NvLXRyYW5zYWN0aW9uLWNhc2gtcmVnaXN0ZXItcGF5bWVudC1tZXRob2Q+XHJcbiAgICAgICAgICA8Y28tdHJhbnNhY3Rpb24tY2FzaC1yZWdpc3Rlci1wYXltZW50LWRvbmUgKm5nSWY9XCJwYXltZW50U3RhdGUgPT09IHBheW1lbnRTdGF0ZXMuRG9uZVwiIEBzaG93SGlkZUNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVsYXRpb25dPVwicmVsYXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYW5kbGVSZWNlaXB0T3B0aW9uU2VsZWN0ZWQpPVwiaGFuZGxlQ2xvc2VEaWFsb2coKVwiXHJcbiAgICAgICAgICA+PC9jby10cmFuc2FjdGlvbi1jYXNoLXJlZ2lzdGVyLXBheW1lbnQtZG9uZT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGF5bWVudC1zdGF0dXMtbWVzc2FnZVwiICpuZ0lmPVwicGF5bWVudFNlcnZpY2Uuc3RhdHVzTWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICBbdGV4dENvbnRlbnRdPVwicGF5bWVudFNlcnZpY2Uuc3RhdHVzTWVzc2FnZVwiPjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2NvLWRpYWxvZz5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGU+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS13cmFwcGVyXCI+XHJcbiAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cIidQT1NfT1JERVIyJyB8IGxvY2FsaXplIHwgYXBwZW5kOiAnICcgfCBhcHBlbmQ6IHRyYW5zYWN0aW9uTnJcIj48L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZS1kYXRlXCJcclxuICAgICAgICAgICAgICBbdGV4dENvbnRlbnRdPVwiKGN1cnJlbnREYXRlIHwgZGF0ZTogJ2RkIE1NTU0geXl5JykgKyAnIHwgJyArIChjdXJyZW50RGF0ZSB8IGRhdGU6ICdISDptbScpXCI+PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgYCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIFRyYW5zYWN0aW9uUGF5bWVudFNlcnZpY2VcclxuICBdLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ3Nob3dIaWRlQ29udGVudCcsIFtcclxuICAgICAgc3RhdGUoJ3ZvaWQnLCBzdHlsZSh7dHJhbnNmb3JtOiAndHJhbnNsYXRlWCgxMDAlKSd9KSksXHJcbiAgICAgIHN0YXRlKCcqJywgc3R5bGUoe3RyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMCknfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBhbmltYXRlKCcyMDBtcyAyMDBtcyBlYXNlLWluLW91dCcpKSxcclxuICAgICAgdHJhbnNpdGlvbignKiA9PiB2b2lkJywgYW5pbWF0ZSgnMjAwbXMgZWFzZS1vdXQnKSlcclxuICAgIF0pXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25DYXNoUmVnaXN0ZXJQYXltZW50RGlhbG9nQ29tcG9uZW50IGV4dGVuZHMgVHJhbnNhY3Rpb25QYXltZW50QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHVibGljIHJlYWRvbmx5IHBheW1lbnRTdGF0ZXM6IHR5cGVvZiBUcmFuc2FjdGlvbkNhc2hSZWdpc3RlclBheW1lbnRTdGF0ZSA9IFRyYW5zYWN0aW9uQ2FzaFJlZ2lzdGVyUGF5bWVudFN0YXRlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByZWxhdGlvbjogUmVsYXRpb25BbnlUeXBlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB0cmFuc2FjdGlvbk5yOiBudW1iZXI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBwYXltZW50Vmlld01vZGVsKHBheW1lbnRWaWV3TW9kZWw6IFBheW1lbnRWaWV3bW9kZWwpIHtcclxuICAgIHRoaXMucGF5bWVudFNlcnZpY2Uuc3RhdHVzTWVzc2FnZSA9IFwiXCI7XHJcbiAgICB0aGlzLl9wYXltZW50Vmlld01vZGVsID0gcGF5bWVudFZpZXdNb2RlbDtcclxuICAgIHRoaXMuY3VycmVudFBheW1lbnRNZXRob2QgPSB0aGlzLl9wYXltZW50Vmlld01vZGVsLnBheW1lbnQ7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UGF5bWVudE1ldGhvZC5leHRlcm5hbFNvdXJjZUlkKSB7XHJcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXltZW50TWV0aG9kLnBpblRlcm1pbmFsKSB7XHJcbiAgICAgICAgdGhpcy5fY2hhbmdlUGF5bWVudFN0YXRlKFRyYW5zYWN0aW9uQ2FzaFJlZ2lzdGVyUGF5bWVudFN0YXRlLlBpbik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY2hhbmdlUGF5bWVudFN0YXRlKFRyYW5zYWN0aW9uQ2FzaFJlZ2lzdGVyUGF5bWVudFN0YXRlLlFSKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRQYXltZW50TWV0aG9kLmNhc2gpIHtcclxuICAgICAgdGhpcy5fY2hhbmdlUGF5bWVudFN0YXRlKFRyYW5zYWN0aW9uQ2FzaFJlZ2lzdGVyUGF5bWVudFN0YXRlLkNhc2gpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGNsb3NlRGlhbG9nOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBwb3NPcmRlclBheWVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLmNvLXRyYW5zYWN0aW9uLWNhc2gtcmVnaXN0ZXItcGF5bWVudC1kaWFsb2dcIilcclxuICBwdWJsaWMgc2hvd0NsYXNzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgcHVibGljIGN1cnJlbnREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcclxuICBwdWJsaWMgcGF5bWVudERvbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgYW1vdW50UGF5ZWQ6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIHBheW1lbnRTdGF0ZTogVHJhbnNhY3Rpb25DYXNoUmVnaXN0ZXJQYXltZW50U3RhdGUgPSBUcmFuc2FjdGlvbkNhc2hSZWdpc3RlclBheW1lbnRTdGF0ZS5QaW47XHJcbiAgcHVibGljIHRyYW5zYWN0aW9uU2F2ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfcGF5bWVudFZpZXdNb2RlbDogUGF5bWVudFZpZXdtb2RlbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgdHJhbnNhY3Rpb25TZXJ2aWNlOiBUcmFuc2FjdGlvblNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgcGF5bWVudENvbm5lY3RvclNlcnZpY2U6IFRyYW5zYWN0aW9uUGF5bWVudENvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgdHJhbnNhY3Rpb25FdmVudFNlcnZpY2U6IFRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyBwYXltZW50U2VydmljZTogVHJhbnNhY3Rpb25QYXltZW50U2VydmljZSxcclxuICAgIHB1YmxpYyBpY29uQ2FjaGVTZXJ2aWNlOiBJY29uQ2FjaGVTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgc3VwZXIodHJhbnNhY3Rpb25TZXJ2aWNlLCBwYXltZW50Q29ubmVjdG9yU2VydmljZSwgdHJhbnNhY3Rpb25FdmVudFNlcnZpY2UsIGNoYW5nZURldGVjdG9yLCBwYXltZW50U2VydmljZSwgaWNvbkNhY2hlU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLnBheW1lbnRTZXJ2aWNlLnBheWVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmhhbmRsZVBheWVkKCkpLFxyXG4gICAgICB0aGlzLnBheW1lbnRTZXJ2aWNlLnBheW1lbnRGYWlsZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMucGF5bWVudFN0YXRlID0gVHJhbnNhY3Rpb25DYXNoUmVnaXN0ZXJQYXltZW50U3RhdGUuQ2hhbmdlTWV0aG9kKVxyXG4gICAgKVxyXG4gICAgdGhpcy5wYXltZW50U2VydmljZS5nZXREZXBvc2l0QW1vdW50ID0gZmFsc2U7XHJcbiAgICB0aGlzLnVzZUNhc2hSZWdpc3RlcnMgPSBmYWxzZTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMudHJhbnNhY3Rpb25TZXJ2aWNlLnNhdmVUcmFuc2FjdGlvbigpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmlzU3VjY2Vzcykge1xyXG4gICAgICB0aGlzLnRyYW5zSWQgPSByZXNwb25zZS50cmFuc2FjdGlvbkluZm8uaWQ7XHJcbiAgICB9XHJcbiAgICBhd2FpdCBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvblNhdmVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGFuZ2VQYXltZW50TWV0aG9kQ2xpY2tlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NoYW5nZVBheW1lbnRTdGF0ZShUcmFuc2FjdGlvbkNhc2hSZWdpc3RlclBheW1lbnRTdGF0ZS5DaGFuZ2VNZXRob2QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNoYW5nZVBheW1lbnRNZXRob2QocGF5bWVudFZpZXdNb2RlbDogUGF5bWVudFZpZXdtb2RlbCk6IHZvaWQge1xyXG4gICAgdGhpcy5wYXltZW50Vmlld01vZGVsID0gcGF5bWVudFZpZXdNb2RlbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVLZXlQYWRNb2RlbENoYW5nZShtb2RlbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmFtb3VudFBheWVkID0gbW9kZWw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaGFuZGxlUGF5ZWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnBheW1lbnREb25lID0gdHJ1ZTtcclxuICAgIGNvbnN0IHByb2Nlc3NlZDogYm9vbGVhbiA9IGF3YWl0IHRoaXMucGF5bWVudENvbm5lY3RvclNlcnZpY2UucHJvY2Vzc1Bvc1RyYW5zYWN0aW9uQnlVdWlkKHRoaXMudHJhbnNhY3Rpb25VdWlkKTtcclxuICAgIGlmIChwcm9jZXNzZWQpIHtcclxuICAgICAgY29uc3Qgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJhbnNhY3Rpb25TZXJ2aWNlLmNvbW1pdCgpO1xyXG4gICAgICBpZiAoc3VjY2Vzcykge1xyXG4gICAgICAgIHRoaXMuX2NoYW5nZVBheW1lbnRTdGF0ZShUcmFuc2FjdGlvbkNhc2hSZWdpc3RlclBheW1lbnRTdGF0ZS5Eb25lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNsb3NlRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbG9zZURpYWxvZy5uZXh0KCk7XHJcbiAgICB0aGlzLnBvc09yZGVyUGF5ZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2hhbmdlUGF5bWVudFN0YXRlKG5ld1N0YXRlOiBUcmFuc2FjdGlvbkNhc2hSZWdpc3RlclBheW1lbnRTdGF0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5wYXltZW50U3RhdGUgPSB1bmRlZmluZWQ7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wYXltZW50U3RhdGUgPSBuZXdTdGF0ZTtcclxuICAgIH0sIDIwMClcclxuICB9XHJcbn1cclxuIl19