ngx-st-sap-bp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2020/lib/base-interfaces.mjs +2 -0
- package/esm2020/lib/components/sap-bp-base-create-edit.mjs +488 -0
- package/esm2020/lib/components/sap-bp-create/sap-bp-create.component.mjs +64 -0
- package/esm2020/lib/components/sap-bp-create-address/sap-bp-create-address.component.mjs +206 -0
- package/esm2020/lib/components/sap-bp-create-contact-person/sap-bp-create-contact-person.component.mjs +68 -0
- package/esm2020/lib/components/sap-bp-details/sap-bp-details.component.mjs +208 -0
- package/esm2020/lib/components/sap-bp-details-address/sap-bp-details-address.component.mjs +23 -0
- package/esm2020/lib/components/sap-bp-details-contact-person/sap-bp-details-contact-person.component.mjs +23 -0
- package/esm2020/lib/components/sap-bp-edit/sap-bp-edit.component.mjs +111 -0
- package/esm2020/lib/components/sap-bp-list/sap-bp-list.component.mjs +111 -0
- package/esm2020/lib/components/sap-bp-list-address/sap-bp-list-address.component.mjs +235 -0
- package/esm2020/lib/components/sap-bp-list-contact-person/sap-bp-list-contact-person.component.mjs +199 -0
- package/esm2020/lib/models/bp-tax-type.enum.mjs +7 -0
- package/esm2020/lib/models/sap-bp-addr-country.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-addr-sic-code.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-addr-state.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-address-dialog.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-address.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-contact-person.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-create.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-edit-auth-flags.enum.mjs +16 -0
- package/esm2020/lib/models/sap-bp-edit.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-global-id.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-group-code.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-industry.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-list.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-payment-terms.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-pricelist.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-qry-group.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-sales-employee.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-ship-type.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-tax.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-technician.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-territory.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-type-translate.enum.mjs +7 -0
- package/esm2020/lib/models/sap-bp-type.enum.mjs +7 -0
- package/esm2020/lib/models/sap-bp.model.mjs +2 -0
- package/esm2020/lib/services/sap-bp-helper.service.mjs +250 -0
- package/esm2020/lib/services/sap-bp.service.mjs +131 -0
- package/esm2020/lib/st-sap-bp.module.mjs +187 -0
- package/esm2020/ngx-st-sap-bp.mjs +5 -0
- package/esm2020/public-api.mjs +42 -0
- package/fesm2015/ngx-st-sap-bp.mjs +2192 -0
- package/fesm2015/ngx-st-sap-bp.mjs.map +1 -0
- package/fesm2020/ngx-st-sap-bp.mjs +2177 -0
- package/fesm2020/ngx-st-sap-bp.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/base-interfaces.d.ts +9 -0
- package/lib/components/sap-bp-base-create-edit.d.ts +114 -0
- package/lib/components/sap-bp-create/sap-bp-create.component.d.ts +21 -0
- package/lib/components/sap-bp-create-address/sap-bp-create-address.component.d.ts +62 -0
- package/lib/components/sap-bp-create-contact-person/sap-bp-create-contact-person.component.d.ts +20 -0
- package/lib/components/sap-bp-details/sap-bp-details.component.d.ts +66 -0
- package/lib/components/sap-bp-details-address/sap-bp-details-address.component.d.ts +16 -0
- package/lib/components/sap-bp-details-contact-person/sap-bp-details-contact-person.component.d.ts +16 -0
- package/lib/components/sap-bp-edit/sap-bp-edit.component.d.ts +33 -0
- package/lib/components/sap-bp-list/sap-bp-list.component.d.ts +40 -0
- package/lib/components/sap-bp-list-address/sap-bp-list-address.component.d.ts +48 -0
- package/lib/components/sap-bp-list-contact-person/sap-bp-list-contact-person.component.d.ts +41 -0
- package/lib/models/bp-tax-type.enum.d.ts +5 -0
- package/lib/models/sap-bp-addr-country.model.d.ts +4 -0
- package/lib/models/sap-bp-addr-sic-code.model.d.ts +6 -0
- package/lib/models/sap-bp-addr-state.model.d.ts +5 -0
- package/lib/models/sap-bp-address-dialog.model.d.ts +23 -0
- package/lib/models/sap-bp-address.model.d.ts +26 -0
- package/lib/models/sap-bp-contact-person.model.d.ts +18 -0
- package/lib/models/sap-bp-create.model.d.ts +47 -0
- package/lib/models/sap-bp-edit-auth-flags.enum.d.ts +14 -0
- package/lib/models/sap-bp-edit.model.d.ts +4 -0
- package/lib/models/sap-bp-global-id.model.d.ts +5 -0
- package/lib/models/sap-bp-group-code.model.d.ts +4 -0
- package/lib/models/sap-bp-industry.model.d.ts +4 -0
- package/lib/models/sap-bp-list.model.d.ts +9 -0
- package/lib/models/sap-bp-payment-terms.model.d.ts +6 -0
- package/lib/models/sap-bp-pricelist.model.d.ts +5 -0
- package/lib/models/sap-bp-qry-group.model.d.ts +5 -0
- package/lib/models/sap-bp-sales-employee.model.d.ts +4 -0
- package/lib/models/sap-bp-ship-type.model.d.ts +4 -0
- package/lib/models/sap-bp-tax.model.d.ts +5 -0
- package/lib/models/sap-bp-technician.model.d.ts +4 -0
- package/lib/models/sap-bp-territory.model.d.ts +4 -0
- package/lib/models/sap-bp-type-translate.enum.d.ts +5 -0
- package/lib/models/sap-bp-type.enum.d.ts +5 -0
- package/lib/models/sap-bp.model.d.ts +56 -0
- package/lib/services/sap-bp-helper.service.d.ts +15 -0
- package/lib/services/sap-bp.service.d.ts +58 -0
- package/lib/st-sap-bp.module.d.ts +47 -0
- package/package.json +35 -0
- package/public-api.d.ts +38 -0
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# NgxStSapBp
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.2.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project ngx-st-sap-bp` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-st-sap-bp`.
|
|
8
|
+
> Note: Don't forget to add `--project ngx-st-sap-bp` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build ngx-st-sap-bp` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build ngx-st-sap-bp`, go to the dist folder `cd dist/ngx-st-sap-bp` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test ngx-st-sap-bp` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1pbnRlcmZhY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXNhcC1icC9zcmMvbGliL2Jhc2UtaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJQ29uZmlnIHtcclxuICBhcGlfYmFzZV91cmk6IHN0cmluZztcclxuICBiYXNlX3VyaTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElEaXJlY3RpdmVNb2R1bGVDb25maWcge1xyXG4gIGVycm9ySW50ZXJjZXB0b3I/OiBhbnk7XHJcbiAgYXBpSW50ZXJjZXB0b3I/OiBhbnk7XHJcbiAgY29uZmlnPzogSUNvbmZpZztcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
import { UntypedFormControl, UntypedFormGroup, Validators, } from '@angular/forms';
|
|
2
|
+
import { Injectable, Input, QueryList, ViewChildren } from '@angular/core';
|
|
3
|
+
import { MatPaginator } from '@angular/material/paginator';
|
|
4
|
+
import { SapBpTypeTranslateEnum } from '../models/sap-bp-type-translate.enum';
|
|
5
|
+
import { SapBpTypeEnum } from '../models/sap-bp-type.enum';
|
|
6
|
+
import { BpTaxTypeEnum } from '../models/bp-tax-type.enum';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../services/sap-bp.service";
|
|
9
|
+
import * as i2 from "@angular/material/dialog";
|
|
10
|
+
import * as i3 from "../services/sap-bp-helper.service";
|
|
11
|
+
export class SapBpBaseCreateEdit {
|
|
12
|
+
constructor(sapBpService, dialog, sapBpHelperService) {
|
|
13
|
+
this.sapBpService = sapBpService;
|
|
14
|
+
this.dialog = dialog;
|
|
15
|
+
this.sapBpHelperService = sapBpHelperService;
|
|
16
|
+
this.paginator = new QueryList();
|
|
17
|
+
this.initContactPersonList = [];
|
|
18
|
+
this.contactPersonChanged = false;
|
|
19
|
+
this.addressChanged = false;
|
|
20
|
+
this.initBillToAddress = [];
|
|
21
|
+
this.billToAddress = [];
|
|
22
|
+
this.initShipToAddress = [];
|
|
23
|
+
this.shipToAddress = [];
|
|
24
|
+
this.showQryGroup = false;
|
|
25
|
+
this.refreshingDataFromSap = false;
|
|
26
|
+
this.submitted = false;
|
|
27
|
+
this.salesPersonOnlyOnAddress = false;
|
|
28
|
+
this.bpTaxType = BpTaxTypeEnum;
|
|
29
|
+
this.taxesList = [];
|
|
30
|
+
this.refreshingTax = false;
|
|
31
|
+
this.phoneMaxLength = 20;
|
|
32
|
+
this.phonePlaceholder = '';
|
|
33
|
+
this.phoneMask = '';
|
|
34
|
+
this.showLoader = false;
|
|
35
|
+
this.oldCardCode = '';
|
|
36
|
+
this.editMode = false;
|
|
37
|
+
this.convertNotUS = false;
|
|
38
|
+
}
|
|
39
|
+
initForm(bpDetails) {
|
|
40
|
+
if (bpDetails) {
|
|
41
|
+
this.editMode = true;
|
|
42
|
+
}
|
|
43
|
+
if (this.userSettings.phoneMask) {
|
|
44
|
+
this.phonePlaceholder = '(999) 999 9999 ext. 9999999';
|
|
45
|
+
this.phoneMask = '(000) 000 0000 ext. 0000000';
|
|
46
|
+
}
|
|
47
|
+
this.salesPersonOnlyOnAddress =
|
|
48
|
+
this.userSettings.bpEditSalesPersonOnAddress;
|
|
49
|
+
if (this.userSettings.bpTaxType === BpTaxTypeEnum.Eu) {
|
|
50
|
+
this.loadTaxes(false);
|
|
51
|
+
}
|
|
52
|
+
if (bpDetails?.cardType === SapBpTypeTranslateEnum.Lead &&
|
|
53
|
+
!this.userSettings.oracleBpEdit) {
|
|
54
|
+
this.convertNotUS = true;
|
|
55
|
+
}
|
|
56
|
+
this.form = new UntypedFormGroup({
|
|
57
|
+
cardCode: new UntypedFormControl(bpDetails?.cardCode ? bpDetails.cardCode : '', [Validators.required, Validators.pattern('^(L-|C-|S-).*$')]),
|
|
58
|
+
cardName: new UntypedFormControl(bpDetails?.cardName ? bpDetails.cardName : '', Validators.required),
|
|
59
|
+
cardType: new UntypedFormControl(bpDetails?.cardType
|
|
60
|
+
? this.convertBpType(bpDetails.cardType)
|
|
61
|
+
: this.userSettings.oracleBpEdit
|
|
62
|
+
? SapBpTypeEnum.Lead
|
|
63
|
+
: '', Validators.required),
|
|
64
|
+
cardForeignName: new UntypedFormControl(bpDetails?.cardForignName ? bpDetails.cardForignName : ''),
|
|
65
|
+
groupCode: new UntypedFormControl(bpDetails?.groupCode ? bpDetails.groupCode : null, Validators.required),
|
|
66
|
+
currency: new UntypedFormControl(bpDetails?.currency ? bpDetails.currency : this.userSettings.currency, Validators.required),
|
|
67
|
+
licTradNum: new UntypedFormControl(bpDetails?.licTradNum ? bpDetails.licTradNum : ''),
|
|
68
|
+
phone1: new UntypedFormControl(bpDetails?.phone1 ? bpDetails.phone1 : '', Validators.required),
|
|
69
|
+
phone2: new UntypedFormControl(bpDetails?.phone2 ? bpDetails.phone2 : ''),
|
|
70
|
+
cellular: new UntypedFormControl(bpDetails?.cellular ? bpDetails.cellular : ''),
|
|
71
|
+
fax: new UntypedFormControl(bpDetails?.fax ? bpDetails.fax : ''),
|
|
72
|
+
email: new UntypedFormControl(bpDetails?.email ? bpDetails.email : ''),
|
|
73
|
+
webSite: new UntypedFormControl(bpDetails?.webSite ? bpDetails.webSite : ''),
|
|
74
|
+
shipType: new UntypedFormControl(bpDetails?.shipTypeCode ? bpDetails.shipTypeCode : null),
|
|
75
|
+
industryCode: new UntypedFormControl(bpDetails?.industryCode ? bpDetails.industryCode : null),
|
|
76
|
+
addId: new UntypedFormControl(bpDetails?.addId ? bpDetails.addId : ''),
|
|
77
|
+
vatIdUnified: new UntypedFormControl(bpDetails?.vatIdUnified ? bpDetails.vatIdUnified : ''),
|
|
78
|
+
registerNo: new UntypedFormControl(bpDetails?.registerNo ? bpDetails.registerNo : ''),
|
|
79
|
+
notes: new UntypedFormControl(bpDetails?.notes ? bpDetails.notes : ''),
|
|
80
|
+
technician: new UntypedFormControl(bpDetails?.technicianCode ? bpDetails.technicianCode : null),
|
|
81
|
+
salesEmployee: new UntypedFormControl(bpDetails?.salesPersonCode ? bpDetails.salesPersonCode : null, !this.salesPersonOnlyOnAddress ? Validators.required : null),
|
|
82
|
+
territory: new UntypedFormControl(bpDetails?.territoryCode ? bpDetails.territoryCode : null),
|
|
83
|
+
globalAccount: new UntypedFormControl(bpDetails?.globalAccount ? bpDetails.globalAccount : '', Validators.required),
|
|
84
|
+
globalId: new UntypedFormControl(bpDetails?.globalId ? bpDetails.globalId : null),
|
|
85
|
+
paymentCode: new UntypedFormControl(bpDetails?.paymentCode ? bpDetails.paymentCode : ''),
|
|
86
|
+
priceList: new UntypedFormControl(bpDetails?.pricelistCode ? bpDetails.pricelistCode : ''),
|
|
87
|
+
deliveryInstructions: new UntypedFormControl(bpDetails?.deliveryInstructions ? bpDetails.deliveryInstructions : ''),
|
|
88
|
+
freeText: new UntypedFormControl(bpDetails?.freeText ? bpDetails.freeText : ''),
|
|
89
|
+
inactiveComment: new UntypedFormControl(bpDetails?.inactiveComment ? bpDetails.inactiveComment : ''),
|
|
90
|
+
status: new UntypedFormControl(bpDetails?.inactiveReason ? bpDetails.inactiveReason : 'Active'),
|
|
91
|
+
vatStatus: new UntypedFormControl(bpDetails?.vatStatus ? bpDetails.vatStatus : '', this.userSettings.bpTaxType !== BpTaxTypeEnum.NoTax
|
|
92
|
+
? Validators.required
|
|
93
|
+
: null),
|
|
94
|
+
taxCode: new UntypedFormControl(bpDetails?.taxCode ? bpDetails.taxCode : ''),
|
|
95
|
+
});
|
|
96
|
+
if (!this.editMode) {
|
|
97
|
+
this.form.addControl('countryCodePhone1', new UntypedFormControl('', Validators.required));
|
|
98
|
+
this.form.get('phone1').disable();
|
|
99
|
+
this.form.get('countryCodePhone1').valueChanges.subscribe(res => {
|
|
100
|
+
if (res) {
|
|
101
|
+
this.form.get('phone1').enable();
|
|
102
|
+
if (this.userSettings.phoneMask) {
|
|
103
|
+
this.setPhonePlaceholder(res);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
this.form.get('phone1').disable();
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
this.setBpTypeAllowed();
|
|
112
|
+
if (bpDetails) {
|
|
113
|
+
this.initContactPersonList = bpDetails.contactPersonList;
|
|
114
|
+
this.initBillToAddress = bpDetails.addressBillToList;
|
|
115
|
+
this.initShipToAddress = bpDetails.addressShipToList;
|
|
116
|
+
this.loadGroupCodeList();
|
|
117
|
+
this.loadQryGroup(false, bpDetails.qryGroupList);
|
|
118
|
+
if (this.userSettings.oracleBpEdit) {
|
|
119
|
+
this.form.get('cardType').disable();
|
|
120
|
+
this.form.get('cardCode').disable();
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
this.form.get('cardCode').disable();
|
|
124
|
+
if (this.convertNotUS) {
|
|
125
|
+
this.oldCardCode = bpDetails.cardCode;
|
|
126
|
+
if (bpDetails?.cardType === SapBpTypeTranslateEnum.Lead &&
|
|
127
|
+
!this.userSettings.bpEditAllowConvertLead) {
|
|
128
|
+
this.form.get('cardType').disable();
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
this.form.get('cardType').disable();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
this.setValidatorsInEdit(bpDetails);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
if (this.userSettings.oracleBpEdit) {
|
|
139
|
+
this.setNewBpId(SapBpTypeEnum.Lead);
|
|
140
|
+
this.loadGroupCodeList();
|
|
141
|
+
this.setDefaultPaymentTerm(SapBpTypeEnum.Lead);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
this.form.get('cardType').valueChanges.subscribe((val) => {
|
|
145
|
+
if (this.convertNotUS) {
|
|
146
|
+
this.loadGroupCodeList();
|
|
147
|
+
this.setDefaultPaymentTerm(val);
|
|
148
|
+
if (val === SapBpTypeEnum.Customer) {
|
|
149
|
+
this.form.get('cardCode').enable();
|
|
150
|
+
this.setNewBpId(SapBpTypeEnum.Customer);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
this.form.get('cardCode').setValue(this.oldCardCode);
|
|
154
|
+
this.form.get('cardCode').disable();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
if (val || val >= 0) {
|
|
159
|
+
this.setNewBpId(val);
|
|
160
|
+
this.loadGroupCodeList();
|
|
161
|
+
this.setDefaultPaymentTerm(val);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
this.form.get('globalAccount').valueChanges.subscribe(res => {
|
|
166
|
+
if (res === 'Yes') {
|
|
167
|
+
this.form.get('globalId').setValidators([Validators.required]);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
this.form.get('globalId').setValidators(null);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
this.initLoaders();
|
|
174
|
+
}
|
|
175
|
+
refreshCardCode() {
|
|
176
|
+
this.setNewBpId(this.form.get('cardType').value);
|
|
177
|
+
}
|
|
178
|
+
loadGroupCodeList(refresh = false) {
|
|
179
|
+
this.refreshingDataFromSap = true;
|
|
180
|
+
this.sapBpService
|
|
181
|
+
.getGroupCode(this.form.get('cardType').value, refresh)
|
|
182
|
+
.subscribe(res => {
|
|
183
|
+
this.groupCodeList = res;
|
|
184
|
+
this.form.get('groupCode').setValue(res ? res[0].id : null);
|
|
185
|
+
this.refreshingDataFromSap = false;
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
loadShipType(refresh = false) {
|
|
189
|
+
this.refreshingDataFromSap = true;
|
|
190
|
+
this.sapBpService.getShipType(refresh).subscribe(res => {
|
|
191
|
+
this.shipTypeList = res;
|
|
192
|
+
this.refreshingDataFromSap = false;
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
loadIndustry(refresh = false) {
|
|
196
|
+
this.refreshingDataFromSap = true;
|
|
197
|
+
this.sapBpService.getIndustry(refresh).subscribe(res => {
|
|
198
|
+
this.industryList = res;
|
|
199
|
+
this.refreshingDataFromSap = false;
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
loadTechnician(refresh = false) {
|
|
203
|
+
this.refreshingDataFromSap = true;
|
|
204
|
+
this.sapBpService.getTechnician(refresh).subscribe(res => {
|
|
205
|
+
this.technicianList = res;
|
|
206
|
+
this.refreshingDataFromSap = false;
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
loadSalesEmployee(refresh = false) {
|
|
210
|
+
this.refreshingDataFromSap = true;
|
|
211
|
+
this.sapBpService.getSalesEmployee(refresh).subscribe(res => {
|
|
212
|
+
this.salesEmployeeList = res;
|
|
213
|
+
this.refreshingDataFromSap = false;
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
loadTerritory(refresh = false) {
|
|
217
|
+
this.refreshingDataFromSap = true;
|
|
218
|
+
this.sapBpService.getTerritory(refresh).subscribe(res => {
|
|
219
|
+
this.territoryList = res;
|
|
220
|
+
this.refreshingDataFromSap = false;
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
loadGlobalId(refresh = false) {
|
|
224
|
+
this.refreshingDataFromSap = true;
|
|
225
|
+
this.sapBpService.getGlobalId(refresh).subscribe(res => {
|
|
226
|
+
this.globalIdList = res;
|
|
227
|
+
this.refreshingDataFromSap = false;
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
loadPaymentTerms(refresh = false) {
|
|
231
|
+
this.refreshingDataFromSap = true;
|
|
232
|
+
this.sapBpService.getPaymentTerms(refresh).subscribe(res => {
|
|
233
|
+
this.paymentTermsList = res;
|
|
234
|
+
this.refreshingDataFromSap = false;
|
|
235
|
+
if (!this.editMode) {
|
|
236
|
+
const type = this.form.get('cardType').value;
|
|
237
|
+
if (type) {
|
|
238
|
+
this.setDefaultPaymentTerm(type);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
loadPriceList(refresh = false) {
|
|
244
|
+
this.refreshingDataFromSap = true;
|
|
245
|
+
this.sapBpService.getPricelist(refresh).subscribe(res => {
|
|
246
|
+
this.priceList = res;
|
|
247
|
+
this.refreshingDataFromSap = false;
|
|
248
|
+
if (!this.editMode) {
|
|
249
|
+
const defaultPL = this.priceList.find(pl => pl.isDefault);
|
|
250
|
+
if (defaultPL) {
|
|
251
|
+
this.form.get('priceList').setValue(defaultPL.id);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
loadQryGroup(refresh = false, baseValues) {
|
|
257
|
+
this.refreshingDataFromSap = true;
|
|
258
|
+
this.sapBpService.getQryGroup(refresh).subscribe(res => {
|
|
259
|
+
this.qryGroupList = res.map((group, index) => {
|
|
260
|
+
group.value = baseValues ? baseValues[index].value : 'N';
|
|
261
|
+
return group;
|
|
262
|
+
});
|
|
263
|
+
this.refreshingDataFromSap = false;
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
loadCurrency(refresh = false) {
|
|
267
|
+
this.refreshingDataFromSap = true;
|
|
268
|
+
this.sapBpService.getCurrency(refresh).subscribe(res => {
|
|
269
|
+
this.currencyList = res;
|
|
270
|
+
this.refreshingDataFromSap = false;
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
loadTaxes(refresh = false) {
|
|
274
|
+
this.refreshingTax = true;
|
|
275
|
+
this.sapBpService.getTaxes(refresh).subscribe(res => {
|
|
276
|
+
this.taxesList = res;
|
|
277
|
+
this.refreshingTax = false;
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
setShipToAddress(event) {
|
|
281
|
+
this.shipToAddress = event;
|
|
282
|
+
}
|
|
283
|
+
setBillToAddress(event) {
|
|
284
|
+
this.billToAddress = event;
|
|
285
|
+
}
|
|
286
|
+
setAddressChanged(event) {
|
|
287
|
+
this.addressChanged = event;
|
|
288
|
+
}
|
|
289
|
+
disableEditInformationData(bpDetails) {
|
|
290
|
+
return this.sapBpHelperService.disableEditInformationData(this.userSettings.sapBpEditAuth, this.form, bpDetails);
|
|
291
|
+
}
|
|
292
|
+
disableEditContactPerson(bpDetails) {
|
|
293
|
+
return this.sapBpHelperService.disableEditContactPerson(this.userSettings.sapBpEditAuth, this.form, bpDetails);
|
|
294
|
+
}
|
|
295
|
+
disableEditBillToAddress(bpDetails) {
|
|
296
|
+
return this.sapBpHelperService.disableEditBillToAddress(this.userSettings.sapBpEditAuth, this.form, bpDetails);
|
|
297
|
+
}
|
|
298
|
+
disableEditShipToAddress(bpDetails) {
|
|
299
|
+
return this.sapBpHelperService.disableEditShipToAddress(this.userSettings.sapBpEditAuth, this.form, bpDetails);
|
|
300
|
+
}
|
|
301
|
+
disableAddShipToAddress(bpDetails) {
|
|
302
|
+
return this.sapBpHelperService.disableAddShipToAddress(this.userSettings.sapBpEditAuth, this.form, bpDetails);
|
|
303
|
+
}
|
|
304
|
+
disableAddContactPerson(bpDetails) {
|
|
305
|
+
return this.sapBpHelperService.disableAddContactPerson(this.userSettings.sapBpEditAuth, this.form, bpDetails);
|
|
306
|
+
}
|
|
307
|
+
disableAddBillToAddress(bpDetails) {
|
|
308
|
+
return this.sapBpHelperService.disableAddBillToAddress(this.userSettings.sapBpEditAuth, this.form, bpDetails);
|
|
309
|
+
}
|
|
310
|
+
initLoaders() {
|
|
311
|
+
// this.loadGroupCodeList();
|
|
312
|
+
this.loadShipType();
|
|
313
|
+
this.loadIndustry();
|
|
314
|
+
this.loadTechnician();
|
|
315
|
+
this.loadSalesEmployee();
|
|
316
|
+
this.loadTerritory();
|
|
317
|
+
this.loadPaymentTerms();
|
|
318
|
+
this.loadPriceList();
|
|
319
|
+
this.loadCurrency();
|
|
320
|
+
this.loadGlobalId();
|
|
321
|
+
if (!this.editMode) {
|
|
322
|
+
this.loadQryGroup();
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
setValidatorsInEdit(bpDetails) {
|
|
326
|
+
if (this.disableEditInformationData(bpDetails)) {
|
|
327
|
+
this.form.get('cardCode').setValidators(null);
|
|
328
|
+
this.form.get('cardName').setValidators(null);
|
|
329
|
+
this.form.get('cardType').setValidators(null);
|
|
330
|
+
this.form.get('groupCode').setValidators(null);
|
|
331
|
+
this.form.get('currency').setValidators(null);
|
|
332
|
+
this.form.get('phone1').setValidators(null);
|
|
333
|
+
this.form.get('salesEmployee').setValidators(null);
|
|
334
|
+
this.form.get('globalAccount').setValidators(null);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
setPhonePlaceholder(countryCode) {
|
|
338
|
+
// 20 sap length, -4 spaces, +10 extra char for visible
|
|
339
|
+
this.phoneMaxLength = 20 - countryCode.length - 4 + 10;
|
|
340
|
+
const extLength = this.phoneMaxLength - 20;
|
|
341
|
+
let phonePlaceholder = '(999) 999 9999 ext. ';
|
|
342
|
+
let phoneMask = '(000) 000 0000 ext. ';
|
|
343
|
+
for (let i = 0; i < extLength; i++) {
|
|
344
|
+
phonePlaceholder += '9';
|
|
345
|
+
phoneMask += '9';
|
|
346
|
+
}
|
|
347
|
+
this.phonePlaceholder = phonePlaceholder;
|
|
348
|
+
this.phoneMask = phoneMask;
|
|
349
|
+
}
|
|
350
|
+
prepareDataToSend() {
|
|
351
|
+
const values = this.form.value;
|
|
352
|
+
let phone1 = values.phone1;
|
|
353
|
+
if (!this.editMode && this.phoneMask) {
|
|
354
|
+
phone1 =
|
|
355
|
+
values.countryCodePhone1 +
|
|
356
|
+
'-' +
|
|
357
|
+
values.phone1.slice(0, 3) +
|
|
358
|
+
'-' +
|
|
359
|
+
values.phone1.slice(3, 6) +
|
|
360
|
+
'-' +
|
|
361
|
+
values.phone1.slice(6, 10) +
|
|
362
|
+
(values.phone1.split('t')[1] ? 'x' + values.phone1.split('t')[1] : '');
|
|
363
|
+
}
|
|
364
|
+
else if (!this.editMode) {
|
|
365
|
+
phone1 = values.countryCodePhone1 + ' ' + phone1;
|
|
366
|
+
}
|
|
367
|
+
return {
|
|
368
|
+
cardForignName: values.cardForeignName,
|
|
369
|
+
groupCode: values.groupCode,
|
|
370
|
+
currency: values.currency,
|
|
371
|
+
licTradNum: values.licTradNum,
|
|
372
|
+
phone1: phone1,
|
|
373
|
+
phone2: values.phone2,
|
|
374
|
+
cellular: values.cellular,
|
|
375
|
+
fax: values.fax,
|
|
376
|
+
email: values.email,
|
|
377
|
+
webSite: values.webSite,
|
|
378
|
+
shipTypeCode: values.shipType,
|
|
379
|
+
industryCode: values.industryCode,
|
|
380
|
+
addId: values.addId,
|
|
381
|
+
vatIdUnified: values.vatIdUnified,
|
|
382
|
+
registerNo: values.registerNo,
|
|
383
|
+
notes: values.notes,
|
|
384
|
+
technicianCode: values.technician,
|
|
385
|
+
salesPersonCode: values.salesEmployee,
|
|
386
|
+
territoryCode: values.territory,
|
|
387
|
+
globalAccount: values.globalAccount,
|
|
388
|
+
globalId: values.globalId,
|
|
389
|
+
validFor: values.status === 'Active' ? 'Y' : 'N',
|
|
390
|
+
paymentCode: values.paymentCode,
|
|
391
|
+
pricelistCode: values.priceList,
|
|
392
|
+
deliveryInstructions: values.deliveryInstructions,
|
|
393
|
+
freeText: values.freeText,
|
|
394
|
+
contactPersonList: this.contactPersons || [],
|
|
395
|
+
addressShipToList: this.shipToAddress || [],
|
|
396
|
+
addressBillToList: this.billToAddress || [],
|
|
397
|
+
qryGroupList: this.qryGroupList,
|
|
398
|
+
addressChange: this.addressChanged,
|
|
399
|
+
contactChange: this.contactPersonChanged,
|
|
400
|
+
cardCode: values.cardCode,
|
|
401
|
+
cardName: values.cardName,
|
|
402
|
+
cardType: this.convertToTranslateBpType(values.cardType),
|
|
403
|
+
oldCardCode: this.oldCardCode || null,
|
|
404
|
+
inactiveReason: values.status,
|
|
405
|
+
inactiveComment: values.status === 'Active' ? '' : values.inactiveComment,
|
|
406
|
+
vatStatus: values.vatStatus,
|
|
407
|
+
taxCode: values.taxCode,
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
setNewBpId(bpType) {
|
|
411
|
+
this.sapBpService.getNextBpId(bpType).subscribe(newBpId => {
|
|
412
|
+
this.form.get('cardCode').setValue(newBpId);
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
setDefaultPaymentTerm(val) {
|
|
416
|
+
if (this.paymentTermsList?.length > 0) {
|
|
417
|
+
if (val === SapBpTypeEnum.Supplier) {
|
|
418
|
+
const paymentTermFound = this.paymentTermsList.find(paymentTerm => paymentTerm.isDefaultForSupplier);
|
|
419
|
+
if (paymentTermFound) {
|
|
420
|
+
this.form.get('paymentCode').setValue(paymentTermFound.id);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
const paymentTermFound = this.paymentTermsList.find(paymentTerm => paymentTerm.isDefaultForCustomer);
|
|
425
|
+
if (paymentTermFound) {
|
|
426
|
+
this.form.get('paymentCode').setValue(paymentTermFound.id);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
setBpTypeAllowed() {
|
|
432
|
+
this.bpTypeAllowed = [];
|
|
433
|
+
const cardType = this.form.get('cardType').value;
|
|
434
|
+
if (this.editMode) {
|
|
435
|
+
if (this.userSettings.oracleBpEdit) {
|
|
436
|
+
this.bpTypeAllowed.push(cardType);
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
if (cardType === SapBpTypeEnum.Lead) {
|
|
440
|
+
this.bpTypeAllowed.push(SapBpTypeEnum.Lead);
|
|
441
|
+
this.bpTypeAllowed.push(SapBpTypeEnum.Customer);
|
|
442
|
+
}
|
|
443
|
+
else if (cardType === SapBpTypeEnum.Supplier) {
|
|
444
|
+
this.bpTypeAllowed.push(SapBpTypeEnum.Supplier);
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
this.bpTypeAllowed.push(SapBpTypeEnum.Customer);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
else {
|
|
452
|
+
this.userSettings.bpEditTypeAllowed.forEach(bpType => {
|
|
453
|
+
this.bpTypeAllowed.push(bpType);
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
convertBpType(type) {
|
|
458
|
+
switch (type) {
|
|
459
|
+
case SapBpTypeTranslateEnum.Customer:
|
|
460
|
+
return SapBpTypeEnum.Customer;
|
|
461
|
+
case SapBpTypeTranslateEnum.Lead:
|
|
462
|
+
return SapBpTypeEnum.Lead;
|
|
463
|
+
case SapBpTypeTranslateEnum.Supplier:
|
|
464
|
+
return SapBpTypeEnum.Supplier;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
convertToTranslateBpType(type) {
|
|
468
|
+
switch (type) {
|
|
469
|
+
case SapBpTypeEnum.Customer:
|
|
470
|
+
return SapBpTypeTranslateEnum.Customer;
|
|
471
|
+
case SapBpTypeEnum.Lead:
|
|
472
|
+
return SapBpTypeTranslateEnum.Lead;
|
|
473
|
+
case SapBpTypeEnum.Supplier:
|
|
474
|
+
return SapBpTypeTranslateEnum.Supplier;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
SapBpBaseCreateEdit.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SapBpBaseCreateEdit, deps: [{ token: i1.SapBpService }, { token: i2.MatDialog }, { token: i3.SapBpHelperService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
479
|
+
SapBpBaseCreateEdit.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SapBpBaseCreateEdit });
|
|
480
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SapBpBaseCreateEdit, decorators: [{
|
|
481
|
+
type: Injectable
|
|
482
|
+
}], ctorParameters: function () { return [{ type: i1.SapBpService }, { type: i2.MatDialog }, { type: i3.SapBpHelperService }]; }, propDecorators: { paginator: [{
|
|
483
|
+
type: ViewChildren,
|
|
484
|
+
args: [MatPaginator]
|
|
485
|
+
}], userSettings: [{
|
|
486
|
+
type: Input
|
|
487
|
+
}] } });
|
|
488
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLWJwLWJhc2UtY3JlYXRlLWVkaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3Qtc2FwLWJwL3NyYy9saWIvY29tcG9uZW50cy9zYXAtYnAtYmFzZS1jcmVhdGUtZWRpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQVd4QixPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQU8zRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7OztBQUkzRCxNQUFNLE9BQWdCLG1CQUFtQjtJQXVEdkMsWUFDWSxZQUEwQixFQUMxQixNQUFpQixFQUNqQixrQkFBc0M7UUFGdEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBekR0QixjQUFTLEdBQUcsSUFBSSxTQUFTLEVBQWdCLENBQUM7UUFvQnRFLDBCQUFxQixHQUE4QixFQUFFLENBQUM7UUFDdEQseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBRzdCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXZCLHNCQUFpQixHQUF3QixFQUFFLENBQUM7UUFDNUMsa0JBQWEsR0FBd0IsRUFBRSxDQUFDO1FBRXhDLHNCQUFpQixHQUF3QixFQUFFLENBQUM7UUFDNUMsa0JBQWEsR0FBd0IsRUFBRSxDQUFDO1FBRXhDLGlC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QUE0QjtRQUNoRCxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssc0JBQXNCLENBQUMsUUFBUTtnQkFDbEMsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDO1lBQ2hDLEtBQUssc0JBQXNCLENBQUMsSUFBSTtnQkFDOUIsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQzVCLEtBQUssc0JBQXNCLENBQUMsUUFBUTtnQkFDbEMsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QixDQUM5QixJQUFtQjtRQUVuQixRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssYUFBYSxDQUFDLFFBQVE7Z0JBQ3pCLE9BQU8sc0JBQXNCLENBQUMsUUFBUSxDQUFDO1lBQ3pDLEtBQUssYUFBYSxDQUFDLElBQUk7Z0JBQ3JCLE9BQU8sc0JBQXNCLENBQUMsSUFBSSxDQUFDO1lBQ3JDLEtBQUssYUFBYSxDQUFDLFFBQVE7Z0JBQ3pCLE9BQU8sc0JBQXNCLENBQUMsUUFBUSxDQUFDO1NBQzFDO0lBQ0gsQ0FBQzs7Z0hBdm9CbUIsbUJBQW1CO29IQUFuQixtQkFBbUI7MkZBQW5CLG1CQUFtQjtrQkFEeEMsVUFBVTs0SkFFbUIsU0FBUztzQkFBcEMsWUFBWTt1QkFBQyxZQUFZO2dCQUcxQixZQUFZO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcclxuICBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTYXBCcFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zYXAtYnAuc2VydmljZSc7XHJcbmltcG9ydCB7IFNhcEJwR3JvdXBDb2RlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLWdyb3VwLWNvZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBCcFNoaXBUeXBlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLXNoaXAtdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwSW5kdXN0cnlNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtaW5kdXN0cnkubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBCcFRlY2huaWNpYW5Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtdGVjaG5pY2lhbi5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwU2FsZXNFbXBsb3llZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC1zYWxlcy1lbXBsb3llZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwVGVycml0b3J5TW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLXRlcnJpdG9yeS5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwR2xvYmFsSWRNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtZ2xvYmFsLWlkLm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBDb250YWN0UGVyc29uTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLWNvbnRhY3QtcGVyc29uLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5wdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IFNhcEJwQWRkcmVzc01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC1hZGRyZXNzLm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBQYXltZW50VGVybXNNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtcGF5bWVudC10ZXJtcy5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwUHJpY2VsaXN0TW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLXByaWNlbGlzdC5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwUXJ5R3JvdXBNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtcXJ5LWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBDcmVhdGVNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtY3JlYXRlLm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBCcFR5cGVUcmFuc2xhdGVFbnVtIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC10eXBlLXRyYW5zbGF0ZS5lbnVtJztcclxuaW1wb3J0IHsgU2FwQnBUeXBlRW51bSB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgU2FwQnBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2FwLWJwLWhlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2FwQnBUYXggfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLXRheC5tb2RlbCc7XHJcbmltcG9ydCB7IEJwVGF4VHlwZUVudW0gfSBmcm9tICcuLi9tb2RlbHMvYnAtdGF4LXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFNhcEJwRWRpdEF1dGhGbGFnc0VudW0gfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLWVkaXQtYXV0aC1mbGFncy5lbnVtJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNhcEJwQmFzZUNyZWF0ZUVkaXQge1xyXG4gIEBWaWV3Q2hpbGRyZW4oTWF0UGFnaW5hdG9yKSBwYWdpbmF0b3IgPSBuZXcgUXVlcnlMaXN0PE1hdFBhZ2luYXRvcj4oKTtcclxuXHJcbiAgQElucHV0KClcclxuICB1c2VyU2V0dGluZ3M6IFNhcEJwVXNlclNldHRpbmdzO1xyXG5cclxuICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG5cclxuICBncm91cENvZGVMaXN0OiBTYXBCcEdyb3VwQ29kZU1vZGVsW107XHJcbiAgc2hpcFR5cGVMaXN0OiBTYXBCcFNoaXBUeXBlTW9kZWxbXTtcclxuICBpbmR1c3RyeUxpc3Q6IFNhcEJwSW5kdXN0cnlNb2RlbFtdO1xyXG4gIHRlY2huaWNpYW5MaXN0OiBTYXBCcFRlY2huaWNpYW5Nb2RlbFtdO1xyXG4gIHNhbGVzRW1wbG95ZWVMaXN0OiBTYXBCcFNhbGVzRW1wbG95ZWVNb2RlbFtdO1xyXG4gIHRlcnJpdG9yeUxpc3Q6IFNhcEJwVGVycml0b3J5TW9kZWxbXTtcclxuICBnbG9iYWxJZExpc3Q6IFNhcEJwR2xvYmFsSWRNb2RlbFtdO1xyXG4gIHBheW1lbnRUZXJtc0xpc3Q6IFNhcEJwUGF5bWVudFRlcm1zTW9kZWxbXTtcclxuICBwcmljZUxpc3Q6IFNhcEJwUHJpY2VsaXN0TW9kZWxbXTtcclxuICBxcnlHcm91cExpc3Q6IFNhcEJwUXJ5R3JvdXBNb2RlbFtdO1xyXG4gIGN1cnJlbmN5TGlzdDogc3RyaW5nW107XHJcbiAgYnBUeXBlQWxsb3dlZDogU2FwQnBUeXBlRW51bVtdO1xyXG5cclxuICBpbml0Q29udGFjdFBlcnNvbkxpc3Q6IFNhcEJwQ29udGFjdFBlcnNvbk1vZGVsW10gPSBbXTtcclxuICBjb250YWN0UGVyc29uQ2hhbmdlZCA9IGZhbHNlO1xyXG4gIGNvbnRhY3RQZXJzb25zOiBTYXBCcENvbnRhY3RQZXJzb25Nb2RlbFtdO1xyXG5cclxuICBhZGRyZXNzQ2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICBpbml0QmlsbFRvQWRkcmVzczogU2FwQnBBZGRyZXNzTW9kZWxbXSA9IFtdO1xyXG4gIGJpbGxUb0FkZHJlc3M6IFNhcEJwQWRkcmVzc01vZGVsW10gPSBbXTtcclxuXHJcbiAgaW5pdFNoaXBUb0FkZHJlc3M6IFNhcEJwQWRkcmVzc01vZGVsW10gPSBbXTtcclxuICBzaGlwVG9BZGRyZXNzOiBTYXBCcEFkZHJlc3NNb2RlbFtdID0gW107XHJcblxyXG4gIHNob3dRcnlHcm91cCA9IGZhbHNlO1xyXG5cclxuICByZWZyZXNoaW5nRGF0YUZyb21TYXAgPSBmYWxzZTtcclxuXHJcbiAgc3VibWl0dGVkID0gZmFsc2U7XHJcblxyXG4gIHNhbGVzUGVyc29uT25seU9uQWRkcmVzcyA9IGZhbHNlO1xyXG4gIGJwVGF4VHlwZSA9IEJwVGF4VHlwZUVudW07XHJcblxyXG4gIHRheGVzTGlzdDogU2FwQnBUYXhbXSA9IFtdO1xyXG4gIHJlZnJlc2hpbmdUYXggPSBmYWxzZTtcclxuXHJcbiAgcGhvbmVNYXhMZW5ndGggPSAyMDtcclxuICBwaG9uZVBsYWNlaG9sZGVyID0gJyc7XHJcbiAgcGhvbmVNYXNrID0gJyc7XHJcblxyXG4gIHNob3dMb2FkZXIgPSBmYWxzZTtcclxuXHJcbiAgcHJvdGVjdGVkIG9sZENhcmRDb2RlID0gJyc7XHJcbiAgcHJvdGVjdGVkIGVkaXRNb2RlID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIGNvbnZlcnROb3RVUyA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBzYXBCcFNlcnZpY2U6IFNhcEJwU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByb3RlY3RlZCBzYXBCcEhlbHBlclNlcnZpY2U6IFNhcEJwSGVscGVyU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgaW5pdEZvcm0oYnBEZXRhaWxzPzogU2FwQnBNb2RlbCkge1xyXG4gICAgaWYgKGJwRGV0YWlscykge1xyXG4gICAgICB0aGlzLmVkaXRNb2RlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy51c2VyU2V0dGluZ3MucGhvbmVNYXNrKSB7XHJcbiAgICAgIHRoaXMucGhvbmVQbGFjZWhvbGRlciA9ICcoOTk5KSA5OTkgOTk5OSBleHQuIDk5OTk5OTknO1xyXG4gICAgICB0aGlzLnBob25lTWFzayA9ICcoMDAwKSAwMDAgMDAwMCBleHQuIDAwMDAwMDAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zYWxlc1BlcnNvbk9ubHlPbkFkZHJlc3MgPVxyXG4gICAgICB0aGlzLnVzZXJTZXR0aW5ncy5icEVkaXRTYWxlc1BlcnNvbk9uQWRkcmVzcztcclxuXHJcbiAgICBpZiAodGhpcy51c2VyU2V0dGluZ3MuYnBUYXhUeXBlID09PSBCcFRheFR5cGVFbnVtLkV1KSB7XHJcbiAgICAgIHRoaXMubG9hZFRheGVzKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGJwRGV0YWlscz8uY2FyZFR5cGUgPT09IFNhcEJwVHlwZVRyYW5zbGF0ZUVudW0uTGVhZCAmJlxyXG4gICAgICAhdGhpcy51c2VyU2V0dGluZ3Mub3JhY2xlQnBFZGl0XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5jb252ZXJ0Tm90VVMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybSA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHtcclxuICAgICAgY2FyZENvZGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy5jYXJkQ29kZSA/IGJwRGV0YWlscy5jYXJkQ29kZSA6ICcnLFxyXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4oJ14oTC18Qy18Uy0pLiokJyldXHJcbiAgICAgICksXHJcbiAgICAgIGNhcmROYW1lOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgIGJwRGV0YWlscz8uY2FyZE5hbWUgPyBicERldGFpbHMuY2FyZE5hbWUgOiAnJyxcclxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICksXHJcbiAgICAgIGNhcmRUeXBlOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgIGJwRGV0YWlscz8uY2FyZFR5cGVcclxuICAgICAgICAgID8gdGhpcy5jb252ZXJ0QnBUeXBlKGJwRGV0YWlscy5jYXJkVHlwZSlcclxuICAgICAgICAgIDogdGhpcy51c2VyU2V0dGluZ3Mub3JhY2xlQnBFZGl0XHJcbiAgICAgICAgICAgID8gU2FwQnBUeXBlRW51bS5MZWFkXHJcbiAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICApLFxyXG4gICAgICBjYXJkRm9yZWlnbk5hbWU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy5jYXJkRm9yaWduTmFtZSA/IGJwRGV0YWlscy5jYXJkRm9yaWduTmFtZSA6ICcnXHJcbiAgICAgICksXHJcbiAgICAgIGdyb3VwQ29kZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/Lmdyb3VwQ29kZSA/IGJwRGV0YWlscy5ncm91cENvZGUgOiBudWxsLFxyXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgKSxcclxuICAgICAgY3VycmVuY3k6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy5jdXJyZW5jeSA/IGJwRGV0YWlscy5jdXJyZW5jeSA6IHRoaXMudXNlclNldHRpbmdzLmN1cnJlbmN5LFxyXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgKSxcclxuICAgICAgbGljVHJhZE51bTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LmxpY1RyYWROdW0gPyBicERldGFpbHMubGljVHJhZE51bSA6ICcnXHJcbiAgICAgICksXHJcbiAgICAgIHBob25lMTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LnBob25lMSA/IGJwRGV0YWlscy5waG9uZTEgOiAnJyxcclxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICksXHJcbiAgICAgIHBob25lMjogbmV3IFVudHlwZWRGb3JtQ29udHJvbChicERldGFpbHM/LnBob25lMiA/IGJwRGV0YWlscy5waG9uZTIgOiAnJyksXHJcbiAgICAgIGNlbGx1bGFyOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgIGJwRGV0YWlscz8uY2VsbHVsYXIgPyBicERldGFpbHMuY2VsbHVsYXIgOiAnJ1xyXG4gICAgICApLFxyXG4gICAgICBmYXg6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woYnBEZXRhaWxzPy5mYXggPyBicERldGFpbHMuZmF4IDogJycpLFxyXG4gICAgICBlbWFpbDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChicERldGFpbHM/LmVtYWlsID8gYnBEZXRhaWxzLmVtYWlsIDogJycpLFxyXG4gICAgICB3ZWJTaXRlOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgIGJwRGV0YWlscz8ud2ViU2l0ZSA/IGJwRGV0YWlscy53ZWJTaXRlIDogJydcclxuICAgICAgKSxcclxuICAgICAgc2hpcFR5cGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy5zaGlwVHlwZUNvZGUgPyBicERldGFpbHMuc2hpcFR5cGVDb2RlIDogbnVsbFxyXG4gICAgICApLFxyXG4gICAgICBpbmR1c3RyeUNvZGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy5pbmR1c3RyeUNvZGUgPyBicERldGFpbHMuaW5kdXN0cnlDb2RlIDogbnVsbFxyXG4gICAgICApLFxyXG4gICAgICBhZGRJZDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChicERldGFpbHM/LmFkZElkID8gYnBEZXRhaWxzLmFkZElkIDogJycpLFxyXG4gICAgICB2YXRJZFVuaWZpZWQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy52YXRJZFVuaWZpZWQgPyBicERldGFpbHMudmF0SWRVbmlmaWVkIDogJydcclxuICAgICAgKSxcclxuICAgICAgcmVnaXN0ZXJObzogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LnJlZ2lzdGVyTm8gPyBicERldGFpbHMucmVnaXN0ZXJObyA6ICcnXHJcbiAgICAgICksXHJcbiAgICAgIG5vdGVzOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKGJwRGV0YWlscz8ubm90ZXMgPyBicERldGFpbHMubm90ZXMgOiAnJyksXHJcbiAgICAgIHRlY2huaWNpYW46IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy50ZWNobmljaWFuQ29kZSA/IGJwRGV0YWlscy50ZWNobmljaWFuQ29kZSA6IG51bGxcclxuICAgICAgKSxcclxuICAgICAgc2FsZXNFbXBsb3llZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LnNhbGVzUGVyc29uQ29kZSA/IGJwRGV0YWlscy5zYWxlc1BlcnNvbkNvZGUgOiBudWxsLFxyXG4gICAgICAgICF0aGlzLnNhbGVzUGVyc29uT25seU9uQWRkcmVzcyA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsXHJcbiAgICAgICksXHJcbiAgICAgIHRlcnJpdG9yeTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LnRlcnJpdG9yeUNvZGUgPyBicERldGFpbHMudGVycml0b3J5Q29kZSA6IG51bGxcclxuICAgICAgKSxcclxuICAgICAgZ2xvYmFsQWNjb3VudDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/Lmdsb2JhbEFjY291bnQgPyBicERldGFpbHMuZ2xvYmFsQWNjb3VudCA6ICcnLFxyXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgKSxcclxuICAgICAgZ2xvYmFsSWQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy5nbG9iYWxJZCA/IGJwRGV0YWlscy5nbG9iYWxJZCA6IG51bGxcclxuICAgICAgKSxcclxuICAgICAgcGF5bWVudENvZGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgYnBEZXRhaWxzPy5wYXltZW50Q29kZSA/IGJwRGV0YWlscy5wYXltZW50Q29kZSA6ICcnXHJcbiAgICAgICksXHJcbiAgICAgIHByaWNlTGlzdDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LnByaWNlbGlzdENvZGUgPyBicERldGFpbHMucHJpY2VsaXN0Q29kZSA6ICcnXHJcbiAgICAgICksXHJcbiAgICAgIGRlbGl2ZXJ5SW5zdHJ1Y3Rpb25zOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgIGJwRGV0YWlscz8uZGVsaXZlcnlJbnN0cnVjdGlvbnMgPyBicERldGFpbHMuZGVsaXZlcnlJbnN0cnVjdGlvbnMgOiAnJ1xyXG4gICAgICApLFxyXG4gICAgICBmcmVlVGV4dDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LmZyZWVUZXh0ID8gYnBEZXRhaWxzLmZyZWVUZXh0IDogJydcclxuICAgICAgKSxcclxuICAgICAgaW5hY3RpdmVDb21tZW50OiBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgIGJwRGV0YWlscz8uaW5hY3RpdmVDb21tZW50ID8gYnBEZXRhaWxzLmluYWN0aXZlQ29tbWVudCA6ICcnXHJcbiAgICAgICksXHJcbiAgICAgIHN0YXR1czogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LmluYWN0aXZlUmVhc29uID8gYnBEZXRhaWxzLmluYWN0aXZlUmVhc29uIDogJ0FjdGl2ZSdcclxuICAgICAgKSxcclxuICAgICAgdmF0U3RhdHVzOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgIGJwRGV0YWlscz8udmF0U3RhdHVzID8gYnBEZXRhaWxzLnZhdFN0YXR1cyA6ICcnLFxyXG4gICAgICAgIHRoaXMudXNlclNldHRpbmdzLmJwVGF4VHlwZSAhPT0gQnBUYXhUeXBlRW51bS5Ob1RheFxyXG4gICAgICAgICAgPyBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgICA6IG51bGxcclxuICAgICAgKSxcclxuICAgICAgdGF4Q29kZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICBicERldGFpbHM/LnRheENvZGUgPyBicERldGFpbHMudGF4Q29kZSA6ICcnXHJcbiAgICAgICksXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIXRoaXMuZWRpdE1vZGUpIHtcclxuICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2woXHJcbiAgICAgICAgJ2NvdW50cnlDb2RlUGhvbmUxJyxcclxuICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdwaG9uZTEnKSEuZGlzYWJsZSgpO1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdjb3VudHJ5Q29kZVBob25lMScpIS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmdldCgncGhvbmUxJykhLmVuYWJsZSgpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnVzZXJTZXR0aW5ncy5waG9uZU1hc2spIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRQaG9uZVBsYWNlaG9sZGVyKHJlcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3Bob25lMScpIS5kaXNhYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEJwVHlwZUFsbG93ZWQoKTtcclxuXHJcbiAgICBpZiAoYnBEZXRhaWxzKSB7XHJcbiAgICAgIHRoaXMuaW5pdENvbnRhY3RQZXJzb25MaXN0ID0gYnBEZXRhaWxzLmNvbnRhY3RQZXJzb25MaXN0O1xyXG4gICAgICB0aGlzLmluaXRCaWxsVG9BZGRyZXNzID0gYnBEZXRhaWxzLmFkZHJlc3NCaWxsVG9MaXN0O1xyXG4gICAgICB0aGlzLmluaXRTaGlwVG9BZGRyZXNzID0gYnBEZXRhaWxzLmFkZHJlc3NTaGlwVG9MaXN0O1xyXG5cclxuICAgICAgdGhpcy5sb2FkR3JvdXBDb2RlTGlzdCgpO1xyXG4gICAgICB0aGlzLmxvYWRRcnlHcm91cChmYWxzZSwgYnBEZXRhaWxzLnFyeUdyb3VwTGlzdCk7XHJcblxyXG4gICAgICBpZiAodGhpcy51c2VyU2V0dGluZ3Mub3JhY2xlQnBFZGl0KSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnY2FyZFR5cGUnKSEuZGlzYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NhcmRDb2RlJykhLmRpc2FibGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjYXJkQ29kZScpIS5kaXNhYmxlKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnZlcnROb3RVUykge1xyXG4gICAgICAgICAgdGhpcy5vbGRDYXJkQ29kZSA9IGJwRGV0YWlscy5jYXJkQ29kZTtcclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGJwRGV0YWlscz8uY2FyZFR5cGUgPT09IFNhcEJwVHlwZVRyYW5zbGF0ZUVudW0uTGVhZCAmJlxyXG4gICAgICAgICAgICAhdGhpcy51c2VyU2V0dGluZ3MuYnBFZGl0QWxsb3dDb252ZXJ0TGVhZFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NhcmRUeXBlJykhLmRpc2FibGUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmdldCgnY2FyZFR5cGUnKSEuZGlzYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRWYWxpZGF0b3JzSW5FZGl0KGJwRGV0YWlscyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy51c2VyU2V0dGluZ3Mub3JhY2xlQnBFZGl0KSB7XHJcbiAgICAgICAgdGhpcy5zZXROZXdCcElkKFNhcEJwVHlwZUVudW0uTGVhZCk7XHJcbiAgICAgICAgdGhpcy5sb2FkR3JvdXBDb2RlTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFBheW1lbnRUZXJtKFNhcEJwVHlwZUVudW0uTGVhZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm0uZ2V0KCdjYXJkVHlwZScpIS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWw6IFNhcEJwVHlwZUVudW0pID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29udmVydE5vdFVTKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkR3JvdXBDb2RlTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFBheW1lbnRUZXJtKHZhbCk7XHJcblxyXG4gICAgICAgIGlmICh2YWwgPT09IFNhcEJwVHlwZUVudW0uQ3VzdG9tZXIpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NhcmRDb2RlJykhLmVuYWJsZSgpO1xyXG4gICAgICAgICAgdGhpcy5zZXROZXdCcElkKFNhcEJwVHlwZUVudW0uQ3VzdG9tZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjYXJkQ29kZScpIS5zZXRWYWx1ZSh0aGlzLm9sZENhcmRDb2RlKTtcclxuICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NhcmRDb2RlJykhLmRpc2FibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHZhbCB8fCB2YWwgPj0gMCkge1xyXG4gICAgICAgICAgdGhpcy5zZXROZXdCcElkKHZhbCk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRHcm91cENvZGVMaXN0KCk7XHJcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRQYXltZW50VGVybSh2YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5mb3JtLmdldCgnZ2xvYmFsQWNjb3VudCcpIS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIGlmIChyZXMgPT09ICdZZXMnKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnZ2xvYmFsSWQnKSEuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2dsb2JhbElkJykhLnNldFZhbGlkYXRvcnMobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaW5pdExvYWRlcnMoKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hDYXJkQ29kZSgpIHtcclxuICAgIHRoaXMuc2V0TmV3QnBJZCh0aGlzLmZvcm0uZ2V0KCdjYXJkVHlwZScpIS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBsb2FkR3JvdXBDb2RlTGlzdChyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gdHJ1ZTtcclxuICAgIHRoaXMuc2FwQnBTZXJ2aWNlXHJcbiAgICAgIC5nZXRHcm91cENvZGUodGhpcy5mb3JtLmdldCgnY2FyZFR5cGUnKSEudmFsdWUsIHJlZnJlc2gpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLmdyb3VwQ29kZUxpc3QgPSByZXM7XHJcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnZ3JvdXBDb2RlJykhLnNldFZhbHVlKHJlcyA/IHJlc1swXS5pZCA6IG51bGwpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFNoaXBUeXBlKHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSB0cnVlO1xyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0U2hpcFR5cGUocmVmcmVzaCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuc2hpcFR5cGVMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcCA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkSW5kdXN0cnkocmVmcmVzaCA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcCA9IHRydWU7XHJcbiAgICB0aGlzLnNhcEJwU2VydmljZS5nZXRJbmR1c3RyeShyZWZyZXNoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5pbmR1c3RyeUxpc3QgPSByZXM7XHJcbiAgICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRUZWNobmljaWFuKHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSB0cnVlO1xyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0VGVjaG5pY2lhbihyZWZyZXNoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy50ZWNobmljaWFuTGlzdCA9IHJlcztcclxuICAgICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFNhbGVzRW1wbG95ZWUocmVmcmVzaCA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcCA9IHRydWU7XHJcbiAgICB0aGlzLnNhcEJwU2VydmljZS5nZXRTYWxlc0VtcGxveWVlKHJlZnJlc2gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnNhbGVzRW1wbG95ZWVMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcCA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkVGVycml0b3J5KHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSB0cnVlO1xyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0VGVycml0b3J5KHJlZnJlc2gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnRlcnJpdG9yeUxpc3QgPSByZXM7XHJcbiAgICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRHbG9iYWxJZChyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gdHJ1ZTtcclxuICAgIHRoaXMuc2FwQnBTZXJ2aWNlLmdldEdsb2JhbElkKHJlZnJlc2gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLmdsb2JhbElkTGlzdCA9IHJlcztcclxuICAgICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFBheW1lbnRUZXJtcyhyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gdHJ1ZTtcclxuICAgIHRoaXMuc2FwQnBTZXJ2aWNlLmdldFBheW1lbnRUZXJtcyhyZWZyZXNoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5wYXltZW50VGVybXNMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcCA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmVkaXRNb2RlKSB7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZm9ybS5nZXQoJ2NhcmRUeXBlJykhLnZhbHVlO1xyXG4gICAgICAgIGlmICh0eXBlKSB7XHJcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRQYXltZW50VGVybSh0eXBlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFByaWNlTGlzdChyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gdHJ1ZTtcclxuICAgIHRoaXMuc2FwQnBTZXJ2aWNlLmdldFByaWNlbGlzdChyZWZyZXNoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5wcmljZUxpc3QgPSByZXM7XHJcbiAgICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuZWRpdE1vZGUpIHtcclxuICAgICAgICBjb25zdCBkZWZhdWx0UEwgPSB0aGlzLnByaWNlTGlzdC5maW5kKHBsID0+IHBsLmlzRGVmYXVsdCk7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRQTCkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmdldCgncHJpY2VMaXN0JykhLnNldFZhbHVlKGRlZmF1bHRQTC5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRRcnlHcm91cChyZWZyZXNoID0gZmFsc2UsIGJhc2VWYWx1ZXM/OiBTYXBCcFFyeUdyb3VwTW9kZWxbXSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSB0cnVlO1xyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0UXJ5R3JvdXAocmVmcmVzaCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMucXJ5R3JvdXBMaXN0ID0gcmVzLm1hcCgoZ3JvdXAsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgZ3JvdXAudmFsdWUgPSBiYXNlVmFsdWVzID8gYmFzZVZhbHVlc1tpbmRleF0udmFsdWUgOiAnTic7XHJcbiAgICAgICAgcmV0dXJuIGdyb3VwO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZEN1cnJlbmN5KHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSB0cnVlO1xyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0Q3VycmVuY3kocmVmcmVzaCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuY3VycmVuY3lMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcCA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkVGF4ZXMocmVmcmVzaCA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnJlZnJlc2hpbmdUYXggPSB0cnVlO1xyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0VGF4ZXMocmVmcmVzaCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMudGF4ZXNMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJlZnJlc2hpbmdUYXggPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0U2hpcFRvQWRkcmVzcyhldmVudDogU2FwQnBBZGRyZXNzTW9kZWxbXSkge1xyXG4gICAgdGhpcy5zaGlwVG9BZGRyZXNzID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICBzZXRCaWxsVG9BZGRyZXNzKGV2ZW50OiBTYXBCcEFkZHJlc3NNb2RlbFtdKSB7XHJcbiAgICB0aGlzLmJpbGxUb0FkZHJlc3MgPSBldmVudDtcclxuICB9XHJcblxyXG4gIHNldEFkZHJlc3NDaGFuZ2VkKGV2ZW50OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmFkZHJlc3NDaGFuZ2VkID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlRWRpdEluZm9ybWF0aW9uRGF0YShicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIHJldHVybiB0aGlzLnNhcEJwSGVscGVyU2VydmljZS5kaXNhYmxlRWRpdEluZm9ybWF0aW9uRGF0YShcclxuICAgICAgdGhpcy51c2VyU2V0dGluZ3Muc2FwQnBFZGl0QXV0aCxcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICBicERldGFpbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlRWRpdENvbnRhY3RQZXJzb24oYnBEZXRhaWxzOiBTYXBCcE1vZGVsKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zYXBCcEhlbHBlclNlcnZpY2UuZGlzYWJsZUVkaXRDb250YWN0UGVyc29uKFxyXG4gICAgICB0aGlzLnVzZXJTZXR0aW5ncy5zYXBCcEVkaXRBdXRoLFxyXG4gICAgICB0aGlzLmZvcm0sXHJcbiAgICAgIGJwRGV0YWlsc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRpc2FibGVFZGl0QmlsbFRvQWRkcmVzcyhicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIHJldHVybiB0aGlzLnNhcEJwSGVscGVyU2VydmljZS5kaXNhYmxlRWRpdEJpbGxUb0FkZHJlc3MoXHJcbiAgICAgIHRoaXMudXNlclNldHRpbmdzLnNhcEJwRWRpdEF1dGgsXHJcbiAgICAgIHRoaXMuZm9ybSxcclxuICAgICAgYnBEZXRhaWxzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZGlzYWJsZUVkaXRTaGlwVG9BZGRyZXNzKGJwRGV0YWlsczogU2FwQnBNb2RlbCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2FwQnBIZWxwZXJTZXJ2aWNlLmRpc2FibGVFZGl0U2hpcFRvQWRkcmVzcyhcclxuICAgICAgdGhpcy51c2VyU2V0dGluZ3Muc2FwQnBFZGl0QXV0aCxcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICBicERldGFpbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlQWRkU2hpcFRvQWRkcmVzcyhicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIHJldHVybiB0aGlzLnNhcEJwSGVscGVyU2VydmljZS5kaXNhYmxlQWRkU2hpcFRvQWRkcmVzcyhcclxuICAgICAgdGhpcy51c2VyU2V0dGluZ3Muc2FwQnBFZGl0QXV0aCxcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICBicERldGFpbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlQWRkQ29udGFjdFBlcnNvbihicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIHJldHVybiB0aGlzLnNhcEJwSGVscGVyU2VydmljZS5kaXNhYmxlQWRkQ29udGFjdFBlcnNvbihcclxuICAgICAgdGhpcy51c2VyU2V0dGluZ3Muc2FwQnBFZGl0QXV0aCxcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICBicERldGFpbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlQWRkQmlsbFRvQWRkcmVzcyhicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIHJldHVybiB0aGlzLnNhcEJwSGVscGVyU2VydmljZS5kaXNhYmxlQWRkQmlsbFRvQWRkcmVzcyhcclxuICAgICAgdGhpcy51c2VyU2V0dGluZ3Muc2FwQnBFZGl0QXV0aCxcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICBicERldGFpbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW5pdExvYWRlcnMoKSB7XHJcbiAgICAvLyB0aGlzLmxvYWRHcm91cENvZGVMaXN0KCk7XHJcbiAgICB0aGlzLmxvYWRTaGlwVHlwZSgpO1xyXG4gICAgdGhpcy5sb2FkSW5kdXN0cnkoKTtcclxuICAgIHRoaXMubG9hZFRlY2huaWNpYW4oKTtcclxuICAgIHRoaXMubG9hZFNhbGVzRW1wbG95ZWUoKTtcclxuICAgIHRoaXMubG9hZFRlcnJpdG9yeSgpO1xyXG4gICAgdGhpcy5sb2FkUGF5bWVudFRlcm1zKCk7XHJcbiAgICB0aGlzLmxvYWRQcmljZUxpc3QoKTtcclxuICAgIHRoaXMubG9hZEN1cnJlbmN5KCk7XHJcbiAgICB0aGlzLmxvYWRHbG9iYWxJZCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5lZGl0TW9kZSkge1xyXG4gICAgICB0aGlzLmxvYWRRcnlHcm91cCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWYWxpZGF0b3JzSW5FZGl0KGJwRGV0YWlsczogU2FwQnBNb2RlbCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZUVkaXRJbmZvcm1hdGlvbkRhdGEoYnBEZXRhaWxzKSkge1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdjYXJkQ29kZScpIS5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdjYXJkTmFtZScpIS5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdjYXJkVHlwZScpIS5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdncm91cENvZGUnKSEuc2V0VmFsaWRhdG9ycyhudWxsKTtcclxuICAgICAgdGhpcy5mb3JtLmdldCgnY3VycmVuY3knKSEuc2V0VmFsaWRhdG9ycyhudWxsKTtcclxuICAgICAgdGhpcy5mb3JtLmdldCgncGhvbmUxJykhLnNldFZhbGlkYXRvcnMobnVsbCk7XHJcbiAgICAgIHRoaXMuZm9ybS5nZXQoJ3NhbGVzRW1wbG95ZWUnKSEuc2V0VmFsaWRhdG9ycyhudWxsKTtcclxuICAgICAgdGhpcy5mb3JtLmdldCgnZ2xvYmFsQWNjb3VudCcpIS5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQaG9uZVBsYWNlaG9sZGVyKGNvdW50cnlDb2RlOiBzdHJpbmcpIHtcclxuICAgIC8vIDIwIHNhcCBsZW5ndGgsIC00IHNwYWNlcywgKzEwIGV4dHJhIGNoYXIgZm9yIHZpc2libGVcclxuICAgIHRoaXMucGhvbmVNYXhMZW5ndGggPSAyMCAtIGNvdW50cnlDb2RlLmxlbmd0aCAtIDQgKyAxMDtcclxuICAgIGNvbnN0IGV4dExlbmd0aCA9IHRoaXMucGhvbmVNYXhMZW5ndGggLSAyMDtcclxuXHJcbiAgICBsZXQgcGhvbmVQbGFjZWhvbGRlciA9ICcoOTk5KSA5OTkgOTk5OSBleHQuICc7XHJcbiAgICBsZXQgcGhvbmVNYXNrID0gJygwMDApIDAwMCAwMDAwIGV4dC4gJztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4dExlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHBob25lUGxhY2Vob2xkZXIgKz0gJzknO1xyXG4gICAgICBwaG9uZU1hc2sgKz0gJzknO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGhvbmVQbGFjZWhvbGRlciA9IHBob25lUGxhY2Vob2xkZXI7XHJcbiAgICB0aGlzLnBob25lTWFzayA9IHBob25lTWFzaztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBwcmVwYXJlRGF0YVRvU2VuZCgpOiBTYXBCcENyZWF0ZU1vZGVsIHtcclxuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZm9ybS52YWx1ZTtcclxuICAgIGxldCBwaG9uZTEgPSB2YWx1ZXMucGhvbmUxO1xyXG5cclxuICAgIGlmICghdGhpcy5lZGl0TW9kZSAmJiB0aGlzLnBob25lTWFzaykge1xyXG4gICAgICBwaG9uZTEgPVxyXG4gICAgICAgIHZhbHVlcy5jb3VudHJ5Q29kZVBob25lMSArXHJcbiAgICAgICAgJy0nICtcclxuICAgICAgICB2YWx1ZXMucGhvbmUxLnNsaWNlKDAsIDMpICtcclxuICAgICAgICAnLScgK1xyXG4gICAgICAgIHZhbHVlcy5waG9uZTEuc2xpY2UoMywgNikgK1xyXG4gICAgICAgICctJyArXHJcbiAgICAgICAgdmFsdWVzLnBob25lMS5zbGljZSg2LCAxMCkgK1xyXG4gICAgICAgICh2YWx1ZXMucGhvbmUxLnNwbGl0KCd0JylbMV0gPyAneCcgKyB2YWx1ZXMucGhvbmUxLnNwbGl0KCd0JylbMV0gOiAnJyk7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmVkaXRNb2RlKSB7XHJcbiAgICAgIHBob25lMSA9IHZhbHVlcy5jb3VudHJ5Q29kZVBob25lMSArICcgJyArIHBob25lMTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjYXJkRm9yaWduTmFtZTogdmFsdWVzLmNhcmRGb3JlaWduTmFtZSxcclxuICAgICAgZ3JvdXBDb2RlOiB2YWx1ZXMuZ3JvdXBDb2RlLFxyXG4gICAgICBjdXJyZW5jeTogdmFsdWVzLmN1cnJlbmN5LFxyXG4gICAgICBsaWNUcmFkTnVtOiB2YWx1ZXMubGljVHJhZE51bSxcclxuICAgICAgcGhvbmUxOiBwaG9uZTEsXHJcbiAgICAgIHBob25lMjogdmFsdWVzLnBob25lMixcclxuICAgICAgY2VsbHVsYXI6IHZhbHVlcy5jZWxsdWxhcixcclxuICAgICAgZmF4OiB2YWx1ZXMuZmF4LFxyXG4gICAgICBlbWFpbDogdmFsdWVzLmVtYWlsLFxyXG4gICAgICB3ZWJTaXRlOiB2YWx1ZXMud2ViU2l0ZSxcclxuICAgICAgc2hpcFR5cGVDb2RlOiB2YWx1ZXMuc2hpcFR5cGUsXHJcbiAgICAgIGluZHVzdHJ5Q29kZTogdmFsdWVzLmluZHVzdHJ5Q29kZSxcclxuICAgICAgYWRkSWQ6IHZhbHVlcy5hZGRJZCxcclxuICAgICAgdmF0SWRVbmlmaWVkOiB2YWx1ZXMudmF0SWRVbmlmaWVkLFxyXG4gICAgICByZWdpc3Rlck5vOiB2YWx1ZXMucmVnaXN0ZXJObyxcclxuICAgICAgbm90ZXM6IHZhbHVlcy5ub3RlcyxcclxuICAgICAgdGVjaG5pY2lhbkNvZGU6IHZhbHVlcy50ZWNobmljaWFuLFxyXG4gICAgICBzYWxlc1BlcnNvbkNvZGU6IHZhbHVlcy5zYWxlc0VtcGxveWVlLFxyXG4gICAgICB0ZXJyaXRvcnlDb2RlOiB2YWx1ZXMudGVycml0b3J5LFxyXG4gICAgICBnbG9iYWxBY2NvdW50OiB2YWx1ZXMuZ2xvYmFsQWNjb3VudCxcclxuICAgICAgZ2xvYmFsSWQ6IHZhbHVlcy5nbG9iYWxJZCxcclxuICAgICAgdmFsaWRGb3I6IHZhbHVlcy5zdGF0dXMgPT09ICdBY3RpdmUnID8gJ1knIDogJ04nLFxyXG4gICAgICBwYXltZW50Q29kZTogdmFsdWVzLnBheW1lbnRDb2RlLFxyXG4gICAgICBwcmljZWxpc3RDb2RlOiB2YWx1ZXMucHJpY2VMaXN0LFxyXG4gICAgICBkZWxpdmVyeUluc3RydWN0aW9uczogdmFsdWVzLmRlbGl2ZXJ5SW5zdHJ1Y3Rpb25zLFxyXG4gICAgICBmcmVlVGV4dDogdmFsdWVzLmZyZWVUZXh0LFxyXG4gICAgICBjb250YWN0UGVyc29uTGlzdDogdGhpcy5jb250YWN0UGVyc29ucyB8fCBbXSxcclxuICAgICAgYWRkcmVzc1NoaXBUb0xpc3Q6IHRoaXMuc2hpcFRvQWRkcmVzcyB8fCBbXSxcclxuICAgICAgYWRkcmVzc0JpbGxUb0xpc3Q6IHRoaXMuYmlsbFRvQWRkcmVzcyB8fCBbXSxcclxuICAgICAgcXJ5R3JvdXBMaXN0OiB0aGlzLnFyeUdyb3VwTGlzdCxcclxuICAgICAgYWRkcmVzc0NoYW5nZTogdGhpcy5hZGRyZXNzQ2hhbmdlZCxcclxuICAgICAgY29udGFjdENoYW5nZTogdGhpcy5jb250YWN0UGVyc29uQ2hhbmdlZCxcclxuICAgICAgY2FyZENvZGU6IHZhbHVlcy5jYXJkQ29kZSxcclxuICAgICAgY2FyZE5hbWU6IHZhbHVlcy5jYXJkTmFtZSxcclxuICAgICAgY2FyZFR5cGU6IHRoaXMuY29udmVydFRvVHJhbnNsYXRlQnBUeXBlKHZhbHVlcy5jYXJkVHlwZSksXHJcbiAgICAgIG9sZENhcmRDb2RlOiB0aGlzLm9sZENhcmRDb2RlIHx8IG51bGwsXHJcbiAgICAgIGluYWN0aXZlUmVhc29uOiB2YWx1ZXMuc3RhdHVzLFxyXG4gICAgICBpbmFjdGl2ZUNvbW1lbnQ6IHZhbHVlcy5zdGF0dXMgPT09ICdBY3RpdmUnID8gJycgOiB2YWx1ZXMuaW5hY3RpdmVDb21tZW50LFxyXG4gICAgICB2YXRTdGF0dXM6IHZhbHVlcy52YXRTdGF0dXMsXHJcbiAgICAgIHRheENvZGU6IHZhbHVlcy50YXhDb2RlLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TmV3QnBJZChicFR5cGU6IFNhcEJwVHlwZUVudW0pIHtcclxuICAgIHRoaXMuc2FwQnBTZXJ2aWNlLmdldE5leHRCcElkKGJwVHlwZSkuc3Vic2NyaWJlKG5ld0JwSWQgPT4ge1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdjYXJkQ29kZScpIS5zZXRWYWx1ZShuZXdCcElkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXREZWZhdWx0UGF5bWVudFRlcm0odmFsOiBTYXBCcFR5cGVFbnVtKSB7XHJcbiAgICBpZiAodGhpcy5wYXltZW50VGVybXNMaXN0Py5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmICh2YWwgPT09IFNhcEJwVHlwZUVudW0uU3VwcGxpZXIpIHtcclxuICAgICAgICBjb25zdCBwYXltZW50VGVybUZvdW5kID0gdGhpcy5wYXltZW50VGVybXNMaXN0LmZpbmQoXHJcbiAgICAgICAgICBwYXltZW50VGVybSA9PiBwYXltZW50VGVybS5pc0RlZmF1bHRGb3JTdXBwbGllclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHBheW1lbnRUZXJtRm91bmQpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3BheW1lbnRDb2RlJykhLnNldFZhbHVlKHBheW1lbnRUZXJtRm91bmQuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBwYXltZW50VGVybUZvdW5kID0gdGhpcy5wYXltZW50VGVybXNMaXN0LmZpbmQoXHJcbiAgICAgICAgICBwYXltZW50VGVybSA9PiBwYXltZW50VGVybS5pc0RlZmF1bHRGb3JDdXN0b21lclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHBheW1lbnRUZXJtRm91bmQpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3BheW1lbnRDb2RlJykhLnNldFZhbHVlKHBheW1lbnRUZXJtRm91bmQuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRCcFR5cGVBbGxvd2VkKCkge1xyXG4gICAgdGhpcy5icFR5cGVBbGxvd2VkID0gW107XHJcbiAgICBjb25zdCBjYXJkVHlwZSA9IHRoaXMuZm9ybS5nZXQoJ2NhcmRUeXBlJykhLnZhbHVlO1xyXG5cclxuICAgIGlmICh0aGlzLmVkaXRNb2RlKSB7XHJcbiAgICAgIGlmICh0aGlzLnVzZXJTZXR0aW5ncy5vcmFjbGVCcEVkaXQpIHtcclxuICAgICAgICB0aGlzLmJwVHlwZUFsbG93ZWQucHVzaChjYXJkVHlwZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGNhcmRUeXBlID09PSBTYXBCcFR5cGVFbnVtLkxlYWQpIHtcclxuICAgICAgICAgIHRoaXMuYnBUeXBlQWxsb3dlZC5wdXNoKFNhcEJwVHlwZUVudW0uTGVhZCk7XHJcbiAgICAgICAgICB0aGlzLmJwVHlwZUFsbG93ZWQucHVzaChTYXBCcFR5cGVFbnVtLkN1c3RvbWVyKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNhcmRUeXBlID09PSBTYXBCcFR5cGVFbnVtLlN1cHBsaWVyKSB7XHJcbiAgICAgICAgICB0aGlzLmJwVHlwZUFsbG93ZWQucHVzaChTYXBCcFR5cGVFbnVtLlN1cHBsaWVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5icFR5cGVBbGxvd2VkLnB1c2goU2FwQnBUeXBlRW51bS5DdXN0b21lcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVzZXJTZXR0aW5ncy5icEVkaXRUeXBlQWxsb3dlZC5mb3JFYWNoKGJwVHlwZSA9PiB7XHJcbiAgICAgICAgdGhpcy5icFR5cGVBbGxvd2VkLnB1c2goYnBUeXBlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnZlcnRCcFR5cGUodHlwZTogU2FwQnBUeXBlVHJhbnNsYXRlRW51bSk6IFNhcEJwVHlwZUVudW0ge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU2FwQnBUeXBlVHJhbnNsYXRlRW51bS5DdXN0b21lcjpcclxuICAgICAgICByZXR1cm4gU2FwQnBUeXBlRW51bS5DdXN0b21lcjtcclxuICAgICAgY2FzZSBTYXBCcFR5cGVUcmFuc2xhdGVFbnVtLkxlYWQ6XHJcbiAgICAgICAgcmV0dXJuIFNhcEJwVHlwZUVudW0uTGVhZDtcclxuICAgICAgY2FzZSBTYXBCcFR5cGVUcmFuc2xhdGVFbnVtLlN1cHBsaWVyOlxyXG4gICAgICAgIHJldHVybiBTYXBCcFR5cGVFbnVtLlN1cHBsaWVyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb252ZXJ0VG9UcmFuc2xhdGVCcFR5cGUoXHJcbiAgICB0eXBlOiBTYXBCcFR5cGVFbnVtXHJcbiAgKTogU2FwQnBUeXBlVHJhbnNsYXRlRW51bSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBTYXBCcFR5cGVFbnVtLkN1c3RvbWVyOlxyXG4gICAgICAgIHJldHVybiBTYXBCcFR5cGVUcmFuc2xhdGVFbnVtLkN1c3RvbWVyO1xyXG4gICAgICBjYXNlIFNhcEJwVHlwZUVudW0uTGVhZDpcclxuICAgICAgICByZXR1cm4gU2FwQnBUeXBlVHJhbnNsYXRlRW51bS5MZWFkO1xyXG4gICAgICBjYXNlIFNhcEJwVHlwZUVudW0uU3VwcGxpZXI6XHJcbiAgICAgICAgcmV0dXJuIFNhcEJwVHlwZVRyYW5zbGF0ZUVudW0uU3VwcGxpZXI7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNhcEJwVXNlclNldHRpbmdzIHtcclxuICBwaG9uZU1hc2s6IGJvb2xlYW47XHJcbiAgYnBFZGl0U2FsZXNQZXJzb25PbkFkZHJlc3M6IGJvb2xlYW47XHJcbiAgYnBUYXhUeXBlOiBCcFRheFR5cGVFbnVtO1xyXG4gIG9yYWNsZUJwRWRpdDogYm9vbGVhbjtcclxuICBjdXJyZW5jeTogc3RyaW5nO1xyXG4gIGJwRWRpdEFsbG93Q29udmVydExlYWQ6IGJvb2xlYW47XHJcbiAgc2FwQnBFZGl0QXV0aDogU2FwQnBFZGl0QXV0aEZsYWdzRW51bTtcclxuICBicEVkaXRUeXBlQWxsb3dlZDogU2FwQnBUeXBlRW51bVtdO1xyXG4gIGNvdW50cnk6IHN0cmluZztcclxufVxyXG4iXX0=
|