@senior-gestao-pessoas/payroll-core 9.4.0-f9d3c09b-0079-4f7c-94cf-dd79338e7089 → 9.5.0-01923a3e-20f4-4cb3-9565-a0584abd00d1

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 (42) hide show
  1. package/bundles/senior-gestao-pessoas-payroll-core.umd.js +1214 -770
  2. package/bundles/senior-gestao-pessoas-payroll-core.umd.js.map +1 -1
  3. package/bundles/senior-gestao-pessoas-payroll-core.umd.min.js +16 -1
  4. package/bundles/senior-gestao-pessoas-payroll-core.umd.min.js.map +1 -1
  5. package/components/historical-pix-account/historical-pix-account-base.d.ts +27 -0
  6. package/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.d.ts +8 -40
  7. package/components/historical-pix-account/historical-pix-account.component.d.ts +36 -8
  8. package/components/historical-pix-account/historical-pix-account.service.d.ts +1 -0
  9. package/components/historical-pix-account-list/historical-pix-account-list.component.d.ts +10 -1
  10. package/components/shared/index.d.ts +1 -0
  11. package/components/shared/shared-state.service.d.ts +17 -0
  12. package/components/utils/format-utils/format-utils.service.d.ts +30 -3
  13. package/esm2015/components/historical-pix-account/historical-pix-account-base.js +173 -0
  14. package/esm2015/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.js +29 -187
  15. package/esm2015/components/historical-pix-account/historical-pix-account.component.js +245 -20
  16. package/esm2015/components/historical-pix-account/historical-pix-account.module.js +5 -1
  17. package/esm2015/components/historical-pix-account/historical-pix-account.service.js +8 -1
  18. package/esm2015/components/historical-pix-account-list/historical-pix-account-list.component.js +45 -4
  19. package/esm2015/components/shared/index.js +2 -0
  20. package/esm2015/components/shared/shared-state.service.js +41 -0
  21. package/esm2015/components/utils/format-utils/format-utils.service.js +88 -5
  22. package/esm2015/public_api.js +2 -1
  23. package/esm2015/senior-gestao-pessoas-payroll-core.js +3 -2
  24. package/esm5/components/historical-pix-account/historical-pix-account-base.js +186 -0
  25. package/esm5/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.js +53 -201
  26. package/esm5/components/historical-pix-account/historical-pix-account.component.js +287 -49
  27. package/esm5/components/historical-pix-account/historical-pix-account.module.js +5 -1
  28. package/esm5/components/historical-pix-account/historical-pix-account.service.js +8 -1
  29. package/esm5/components/historical-pix-account-list/historical-pix-account-list.component.js +50 -4
  30. package/esm5/components/shared/index.js +2 -0
  31. package/esm5/components/shared/shared-state.service.js +42 -0
  32. package/esm5/components/utils/format-utils/format-utils.service.js +88 -5
  33. package/esm5/public_api.js +2 -1
  34. package/esm5/senior-gestao-pessoas-payroll-core.js +3 -2
  35. package/fesm2015/senior-gestao-pessoas-payroll-core.js +880 -477
  36. package/fesm2015/senior-gestao-pessoas-payroll-core.js.map +1 -1
  37. package/fesm5/senior-gestao-pessoas-payroll-core.js +1210 -767
  38. package/fesm5/senior-gestao-pessoas-payroll-core.js.map +1 -1
  39. package/package.json +2 -32
  40. package/public_api.d.ts +1 -0
  41. package/senior-gestao-pessoas-payroll-core.d.ts +2 -1
  42. package/senior-gestao-pessoas-payroll-core.metadata.json +1 -1
@@ -0,0 +1,186 @@
1
+ import * as tslib_1 from "tslib";
2
+ import { FormGroup, Validators, } from "@angular/forms";
3
+ import { GenericValidator } from "../utils/generic-validators";
4
+ import { FormatUtilsService } from "../utils/format-utils/format-utils.service";
5
+ var HistoricakPixAccountBase = /** @class */ (function () {
6
+ function HistoricakPixAccountBase(formBuilder) {
7
+ this._paramsForm = new FormGroup({});
8
+ this._defaultCpfNumber = null;
9
+ this.initialValidatorOfPercentage = [Validators.required, Validators.min(0.01)];
10
+ this.pixAccountList = [];
11
+ this.maxValuePercentage = 100.0;
12
+ this.isShowPixKeyFieldValidatorMessage = false;
13
+ this.formBuilder = formBuilder;
14
+ this.createFormGroupBase();
15
+ }
16
+ HistoricakPixAccountBase.prototype.phoneMask = function (event) {
17
+ FormatUtilsService.formatTelephoneInputEvent(event);
18
+ };
19
+ HistoricakPixAccountBase.prototype.cpfMask = function (event) {
20
+ FormatUtilsService.formatCpfInputEvent(event);
21
+ };
22
+ HistoricakPixAccountBase.prototype.cnpjMask = function (event) {
23
+ FormatUtilsService.formatCnpjInputEvent(event);
24
+ };
25
+ HistoricakPixAccountBase.prototype.onChangePixKeyType = function (item, form) {
26
+ if (!item || !item.key)
27
+ return;
28
+ this.pixKeyType = item.key;
29
+ var targetForm = (typeof form !== 'undefined' && form !== null)
30
+ ? form
31
+ : this.pixAccountFormGroup;
32
+ this.isShowPixKeyFieldValidatorMessage = true;
33
+ var pixKeyControl = targetForm.get("pixKey");
34
+ if (pixKeyControl) {
35
+ pixKeyControl.reset();
36
+ }
37
+ this.setPixKeyValidators(true, targetForm);
38
+ if (item.key === "CPF") {
39
+ this.setDefaultCpfPixKey(targetForm);
40
+ }
41
+ };
42
+ HistoricakPixAccountBase.prototype.onClearPixKeyType = function (form) {
43
+ var targetForm = (typeof form !== 'undefined' && form !== null)
44
+ ? form
45
+ : this.pixAccountFormGroup;
46
+ this.isShowPixKeyFieldValidatorMessage = false;
47
+ if (targetForm.get("pixKey")) {
48
+ targetForm.get("pixKey").reset();
49
+ }
50
+ };
51
+ HistoricakPixAccountBase.prototype.setDefaultCpfPixKey = function (form) {
52
+ var targetForm = (typeof form !== 'undefined' && form !== null)
53
+ ? form
54
+ : this.pixAccountFormGroup;
55
+ if (this._defaultCpfNumber) {
56
+ if (targetForm.get("pixKey")) {
57
+ targetForm.get("pixKey").setValue(this._defaultCpfNumber);
58
+ }
59
+ }
60
+ else {
61
+ var sheetDocument = this._paramsForm.get("sheetDocument");
62
+ if (sheetDocument && sheetDocument.get("cpfNumber")) {
63
+ var cpf = sheetDocument.get("cpfNumber").value;
64
+ if (cpf && targetForm.get("pixKey")) {
65
+ targetForm.get("pixKey").setValue(cpf);
66
+ }
67
+ }
68
+ }
69
+ };
70
+ HistoricakPixAccountBase.prototype.createFormGroupBase = function () {
71
+ this.pixAccountFormGroup = this.formBuilder.group({
72
+ id: this.formBuilder.control(null),
73
+ index: this.formBuilder.control(null),
74
+ employee: this.formBuilder.control({ value: { tableId: null }, disabled: true }),
75
+ dateChange: this.formBuilder.control(null),
76
+ pixKeyType: this.formBuilder.control(null, Validators.required),
77
+ pixKey: this.formBuilder.control(null),
78
+ percentage: this.formBuilder.control(null, Validators.compose(tslib_1.__spread(this.initialValidatorOfPercentage, [
79
+ Validators.max(this.maxValuePercentage),
80
+ ]))),
81
+ externalId: this.formBuilder.control(null),
82
+ customFields: this.formBuilder.control(null),
83
+ });
84
+ };
85
+ HistoricakPixAccountBase.prototype.setValidatorsAccordingList = function (pixAccountList, index, isEditMode, form) {
86
+ if (index === void 0) { index = null; }
87
+ if (isEditMode === void 0) { isEditMode = true; }
88
+ var targetForm = (typeof form !== 'undefined' && form !== null)
89
+ ? form
90
+ : this.pixAccountFormGroup;
91
+ this.pixAccountList = (pixAccountList && pixAccountList.length > 0)
92
+ ? [].concat(pixAccountList)
93
+ : [];
94
+ var percentageIncluded = [];
95
+ for (var i = 0; i < this.pixAccountList.length; i++) {
96
+ var field = this.pixAccountList[i];
97
+ if (field && field.percentage && i !== index) {
98
+ percentageIncluded.push(field.percentage);
99
+ }
100
+ }
101
+ this.beforeSetPixKeyTypeValidator(targetForm);
102
+ this.setPixKeyValidators(isEditMode, targetForm);
103
+ this.validatePercentageValid(percentageIncluded, targetForm);
104
+ };
105
+ HistoricakPixAccountBase.prototype.beforeSetPixKeyTypeValidator = function (form) {
106
+ var control = form.get("pixKeyType");
107
+ if (this.pixAccountList && this.pixAccountList.length) {
108
+ control.setValidators(Validators.compose([
109
+ Validators.required,
110
+ this.validateDuplicatePixKeyTypeBankAccount(this.pixAccountList),
111
+ ]));
112
+ }
113
+ else {
114
+ control.setValidators(Validators.required);
115
+ }
116
+ control.updateValueAndValidity();
117
+ };
118
+ HistoricakPixAccountBase.prototype.setPixKeyValidators = function (isEditMode, form) {
119
+ var pixKey = form.get("pixKey");
120
+ switch (this.pixKeyType) {
121
+ case "TELEPHONE":
122
+ pixKey.setValidators(Validators.compose([Validators.required, GenericValidator.isValidPhoneNumber]));
123
+ break;
124
+ case "EMAIL":
125
+ pixKey.setValidators(Validators.compose([Validators.required, GenericValidator.isValidEmail]));
126
+ break;
127
+ case "CPF":
128
+ pixKey.setValidators(Validators.compose([Validators.required, GenericValidator.isValidCpf]));
129
+ break;
130
+ case "CNPJ":
131
+ pixKey.setValidators(Validators.compose([Validators.required, GenericValidator.isValidCnpj]));
132
+ break;
133
+ case "RANDOM_KEY":
134
+ pixKey.setValidators(Validators.required);
135
+ break;
136
+ default:
137
+ pixKey.clearValidators();
138
+ }
139
+ if (isEditMode) {
140
+ pixKey.enable();
141
+ }
142
+ pixKey.updateValueAndValidity();
143
+ };
144
+ HistoricakPixAccountBase.prototype.validatePercentageValid = function (listValue, form) {
145
+ var percentage = form.get("percentage");
146
+ this.maxValuePercentage = listValue.reduce(function (acc, val) { return acc - val; }, 100.0);
147
+ percentage.setValidators(Validators.compose(tslib_1.__spread(this.initialValidatorOfPercentage, [
148
+ Validators.max(this.maxValuePercentage),
149
+ ])));
150
+ percentage.updateValueAndValidity();
151
+ };
152
+ HistoricakPixAccountBase.prototype.validateDuplicatePixKeyTypeBankAccount = function (listCompare) {
153
+ return function (control) {
154
+ var value = control.value;
155
+ var isDuplicate = listCompare.some(function (field) {
156
+ return value &&
157
+ field.pixKeyType.key === "BANK_ACCOUNT" &&
158
+ value.key === "BANK_ACCOUNT";
159
+ });
160
+ return isDuplicate ? { pixKeyTypeBankAccountDuplicate: true } : null;
161
+ };
162
+ };
163
+ Object.defineProperty(HistoricakPixAccountBase.prototype, "paramsForm", {
164
+ get: function () {
165
+ return this._paramsForm;
166
+ },
167
+ set: function (value) {
168
+ this._paramsForm = value;
169
+ },
170
+ enumerable: true,
171
+ configurable: true
172
+ });
173
+ Object.defineProperty(HistoricakPixAccountBase.prototype, "defaultCpfNumber", {
174
+ get: function () {
175
+ return this._defaultCpfNumber;
176
+ },
177
+ set: function (value) {
178
+ this._defaultCpfNumber = value;
179
+ },
180
+ enumerable: true,
181
+ configurable: true
182
+ });
183
+ return HistoricakPixAccountBase;
184
+ }());
185
+ export { HistoricakPixAccountBase };
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yaWNhbC1waXgtYWNjb3VudC1iYXNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tcGVzc29hcy9wYXlyb2xsLWNvcmUvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2hpc3RvcmljYWwtcGl4LWFjY291bnQvaGlzdG9yaWNhbC1waXgtYWNjb3VudC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBR0gsU0FBUyxFQUVULFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRWhGO0lBWUUsa0NBQVksV0FBd0I7UUFWMUIsZ0JBQVcsR0FBYyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQyxzQkFBaUIsR0FBVyxJQUFJLENBQUM7UUFFcEMsaUNBQTRCLEdBQWtCLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUYsbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFDOUIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRzNCLHNDQUFpQyxHQUFHLEtBQUssQ0FBQztRQUcvQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU0sNENBQVMsR0FBaEIsVUFBaUIsS0FBVTtRQUN2QixrQkFBa0IsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU0sMENBQU8sR0FBZCxVQUFlLEtBQVU7UUFDckIsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLDJDQUFRLEdBQWYsVUFBZ0IsS0FBVTtRQUN0Qixr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QUMzQixDQUFDOzs7T0FKQTtJQU1ELHNCQUFXLHNEQUFnQjthQUEzQjtZQUNFLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ2hDLENBQUM7YUFFRCxVQUE0QixLQUFhO1lBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDakMsQ0FBQzs7O09BSkE7SUFLSCwrQkFBQztBQUFELENBQUMsQUEzTkQsSUEyTkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFic3RyYWN0Q29udHJvbCxcbiAgICBGb3JtQnVpbGRlcixcbiAgICBGb3JtR3JvdXAsXG4gICAgVmFsaWRhdG9yRm4sXG4gICAgVmFsaWRhdG9ycyxcbiAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbiAgaW1wb3J0IHsgR2VuZXJpY1ZhbGlkYXRvciB9IGZyb20gXCIuLi91dGlscy9nZW5lcmljLXZhbGlkYXRvcnNcIjtcbiAgaW1wb3J0IHsgRm9ybWF0VXRpbHNTZXJ2aWNlIH0gZnJvbSBcIi4uL3V0aWxzL2Zvcm1hdC11dGlscy9mb3JtYXQtdXRpbHMuc2VydmljZVwiO1xuXG4gIGV4cG9ydCBhYnN0cmFjdCBjbGFzcyBIaXN0b3JpY2FrUGl4QWNjb3VudEJhc2Uge1xuICAgIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXI7XG4gICAgcHJvdGVjdGVkIF9wYXJhbXNGb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICBwcm90ZWN0ZWQgX2RlZmF1bHRDcGZOdW1iZXI6IHN0cmluZyA9IG51bGw7XG5cbiAgICBwdWJsaWMgaW5pdGlhbFZhbGlkYXRvck9mUGVyY2VudGFnZTogVmFsaWRhdG9yRm5bXSA9IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigwLjAxKV07XG4gICAgcHVibGljIHBpeEFjY291bnRMaXN0OiBvYmplY3RbXSA9IFtdO1xuICAgIHB1YmxpYyBtYXhWYWx1ZVBlcmNlbnRhZ2UgPSAxMDAuMDtcbiAgICBwdWJsaWMgcGl4S2V5VHlwZTogc3RyaW5nO1xuICAgIHB1YmxpYyBwaXhBY2NvdW50Rm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gICAgcHVibGljIGlzU2hvd1BpeEtleUZpZWxkVmFsaWRhdG9yTWVzc2FnZSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7XG4gICAgICB0aGlzLmZvcm1CdWlsZGVyID0gZm9ybUJ1aWxkZXI7XG4gICAgICB0aGlzLmNyZWF0ZUZvcm1Hcm91cEJhc2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGhvbmVNYXNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgRm9ybWF0VXRpbHNTZXJ2aWNlLmZvcm1hdFRlbGVwaG9uZUlucHV0RXZlbnQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcGZNYXNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgRm9ybWF0VXRpbHNTZXJ2aWNlLmZvcm1hdENwZklucHV0RXZlbnQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbnBqTWFzayhldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIEZvcm1hdFV0aWxzU2VydmljZS5mb3JtYXRDbnBqSW5wdXRFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hhbmdlUGl4S2V5VHlwZShpdGVtOiBhbnksIGZvcm0/OiBGb3JtR3JvdXApOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpdGVtIHx8ICFpdGVtLmtleSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMucGl4S2V5VHlwZSA9IGl0ZW0ua2V5O1xuXG4gICAgICAgIGNvbnN0IHRhcmdldEZvcm0gPSAodHlwZW9mIGZvcm0gIT09ICd1bmRlZmluZWQnICYmIGZvcm0gIT09IG51bGwpXG4gICAgICAgICAgPyBmb3JtXG4gICAgICAgICAgOiB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXA7XG5cbiAgICAgICAgdGhpcy5pc1Nob3dQaXhLZXlGaWVsZFZhbGlkYXRvck1lc3NhZ2UgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHBpeEtleUNvbnRyb2wgPSB0YXJnZXRGb3JtLmdldChcInBpeEtleVwiKTtcbiAgICAgICAgaWYgKHBpeEtleUNvbnRyb2wpIHtcbiAgICAgICAgICAgIHBpeEtleUNvbnRyb2wucmVzZXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0UGl4S2V5VmFsaWRhdG9ycyh0cnVlLCB0YXJnZXRGb3JtKTtcblxuICAgICAgICBpZiAoaXRlbS5rZXkgPT09IFwiQ1BGXCIpIHtcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRDcGZQaXhLZXkodGFyZ2V0Rm9ybSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25DbGVhclBpeEtleVR5cGUoZm9ybT86IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgICAgICB2YXIgdGFyZ2V0Rm9ybSA9ICh0eXBlb2YgZm9ybSAhPT0gJ3VuZGVmaW5lZCcgJiYgZm9ybSAhPT0gbnVsbClcbiAgICAgICAgICA/IGZvcm1cbiAgICAgICAgICA6IHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cDtcblxuICAgICAgICB0aGlzLmlzU2hvd1BpeEtleUZpZWxkVmFsaWRhdG9yTWVzc2FnZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0YXJnZXRGb3JtLmdldChcInBpeEtleVwiKSkge1xuICAgICAgICAgIHRhcmdldEZvcm0uZ2V0KFwicGl4S2V5XCIpLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHVibGljIHNldERlZmF1bHRDcGZQaXhLZXkoZm9ybT86IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgICAgICB2YXIgdGFyZ2V0Rm9ybSA9ICh0eXBlb2YgZm9ybSAhPT0gJ3VuZGVmaW5lZCcgJiYgZm9ybSAhPT0gbnVsbClcbiAgICAgICAgICA/IGZvcm1cbiAgICAgICAgICA6IHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cDtcblxuICAgICAgICBpZiAodGhpcy5fZGVmYXVsdENwZk51bWJlcikge1xuICAgICAgICAgIGlmICh0YXJnZXRGb3JtLmdldChcInBpeEtleVwiKSkge1xuICAgICAgICAgICAgdGFyZ2V0Rm9ybS5nZXQoXCJwaXhLZXlcIikuc2V0VmFsdWUodGhpcy5fZGVmYXVsdENwZk51bWJlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBzaGVldERvY3VtZW50ID0gdGhpcy5fcGFyYW1zRm9ybS5nZXQoXCJzaGVldERvY3VtZW50XCIpO1xuICAgICAgICAgIGlmIChzaGVldERvY3VtZW50ICYmIHNoZWV0RG9jdW1lbnQuZ2V0KFwiY3BmTnVtYmVyXCIpKSB7XG4gICAgICAgICAgICB2YXIgY3BmID0gc2hlZXREb2N1bWVudC5nZXQoXCJjcGZOdW1iZXJcIikudmFsdWU7XG4gICAgICAgICAgICBpZiAoY3BmICYmIHRhcmdldEZvcm0uZ2V0KFwicGl4S2V5XCIpKSB7XG4gICAgICAgICAgICAgIHRhcmdldEZvcm0uZ2V0KFwicGl4S2V5XCIpLnNldFZhbHVlKGNwZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUZvcm1Hcm91cEJhc2UoKTogdm9pZCB7XG4gICAgICB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgaWQ6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKSxcbiAgICAgICAgaW5kZXg6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKSxcbiAgICAgICAgZW1wbG95ZWU6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbCh7IHZhbHVlOiB7IHRhYmxlSWQ6IG51bGwgfSwgZGlzYWJsZWQ6IHRydWUgfSksXG4gICAgICAgIGRhdGVDaGFuZ2U6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKSxcbiAgICAgICAgcGl4S2V5VHlwZTogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICBwaXhLZXk6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKSxcbiAgICAgICAgcGVyY2VudGFnZTogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgICAgIC4uLnRoaXMuaW5pdGlhbFZhbGlkYXRvck9mUGVyY2VudGFnZSxcbiAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4KHRoaXMubWF4VmFsdWVQZXJjZW50YWdlKSxcbiAgICAgICAgICBdKVxuICAgICAgICApLFxuICAgICAgICBleHRlcm5hbElkOiB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCksXG4gICAgICAgIGN1c3RvbUZpZWxkczogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldFZhbGlkYXRvcnNBY2NvcmRpbmdMaXN0KFxuICAgICAgICBwaXhBY2NvdW50TGlzdDogb2JqZWN0W10sXG4gICAgICAgIGluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbCxcbiAgICAgICAgaXNFZGl0TW9kZTogYm9vbGVhbiA9IHRydWUsXG4gICAgICAgIGZvcm0/OiBGb3JtR3JvdXBcbiAgICAgICk6IHZvaWQge1xuICAgICAgICB2YXIgdGFyZ2V0Rm9ybSA9ICh0eXBlb2YgZm9ybSAhPT0gJ3VuZGVmaW5lZCcgJiYgZm9ybSAhPT0gbnVsbClcbiAgICAgICAgICA/IGZvcm1cbiAgICAgICAgICA6IHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cDtcblxuICAgICAgICB0aGlzLnBpeEFjY291bnRMaXN0ID0gKHBpeEFjY291bnRMaXN0ICYmIHBpeEFjY291bnRMaXN0Lmxlbmd0aCA+IDApXG4gICAgICAgICAgPyBbXS5jb25jYXQocGl4QWNjb3VudExpc3QpXG4gICAgICAgICAgOiBbXTtcblxuICAgICAgICB2YXIgcGVyY2VudGFnZUluY2x1ZGVkOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5waXhBY2NvdW50TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBmaWVsZDogYW55ID0gdGhpcy5waXhBY2NvdW50TGlzdFtpXTtcbiAgICAgICAgICBpZiAoZmllbGQgJiYgZmllbGQucGVyY2VudGFnZSAmJiBpICE9PSBpbmRleCkge1xuICAgICAgICAgICAgcGVyY2VudGFnZUluY2x1ZGVkLnB1c2goZmllbGQucGVyY2VudGFnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iZWZvcmVTZXRQaXhLZXlUeXBlVmFsaWRhdG9yKHRhcmdldEZvcm0pO1xuICAgICAgICB0aGlzLnNldFBpeEtleVZhbGlkYXRvcnMoaXNFZGl0TW9kZSwgdGFyZ2V0Rm9ybSk7XG4gICAgICAgIHRoaXMudmFsaWRhdGVQZXJjZW50YWdlVmFsaWQocGVyY2VudGFnZUluY2x1ZGVkLCB0YXJnZXRGb3JtKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYmVmb3JlU2V0UGl4S2V5VHlwZVZhbGlkYXRvcihmb3JtOiBGb3JtR3JvdXApOiB2b2lkIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtLmdldChcInBpeEtleVR5cGVcIik7XG5cbiAgICAgIGlmICh0aGlzLnBpeEFjY291bnRMaXN0ICYmIHRoaXMucGl4QWNjb3VudExpc3QubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhcbiAgICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVEdXBsaWNhdGVQaXhLZXlUeXBlQmFua0FjY291bnQodGhpcy5waXhBY2NvdW50TGlzdCksXG4gICAgICAgICAgXSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgIH1cbiAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXRQaXhLZXlWYWxpZGF0b3JzKGlzRWRpdE1vZGU6IGJvb2xlYW4sIGZvcm06IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgICAgY29uc3QgcGl4S2V5ID0gZm9ybS5nZXQoXCJwaXhLZXlcIik7XG4gICAgICBzd2l0Y2ggKHRoaXMucGl4S2V5VHlwZSkge1xuICAgICAgICBjYXNlIFwiVEVMRVBIT05FXCI6XG4gICAgICAgICAgcGl4S2V5LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBHZW5lcmljVmFsaWRhdG9yLmlzVmFsaWRQaG9uZU51bWJlcl0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkVNQUlMXCI6XG4gICAgICAgICAgcGl4S2V5LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBHZW5lcmljVmFsaWRhdG9yLmlzVmFsaWRFbWFpbF0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNQRlwiOlxuICAgICAgICAgIHBpeEtleS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZCwgR2VuZXJpY1ZhbGlkYXRvci5pc1ZhbGlkQ3BmXSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ05QSlwiOlxuICAgICAgICAgIHBpeEtleS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZCwgR2VuZXJpY1ZhbGlkYXRvci5pc1ZhbGlkQ25wal0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlJBTkRPTV9LRVlcIjpcbiAgICAgICAgICBwaXhLZXkuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBwaXhLZXkuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0VkaXRNb2RlKSB7XG4gICAgICAgIHBpeEtleS5lbmFibGUoKTtcbiAgICAgIH1cblxuICAgICAgcGl4S2V5LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGVQZXJjZW50YWdlVmFsaWQobGlzdFZhbHVlOiBudW1iZXJbXSwgZm9ybTogRm9ybUdyb3VwKTogdm9pZCB7XG4gICAgICBjb25zdCBwZXJjZW50YWdlID0gZm9ybS5nZXQoXCJwZXJjZW50YWdlXCIpO1xuICAgICAgdGhpcy5tYXhWYWx1ZVBlcmNlbnRhZ2UgPSBsaXN0VmFsdWUucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjIC0gdmFsLCAxMDAuMCk7XG5cbiAgICAgIHBlcmNlbnRhZ2Uuc2V0VmFsaWRhdG9ycyhcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgICAuLi50aGlzLmluaXRpYWxWYWxpZGF0b3JPZlBlcmNlbnRhZ2UsXG4gICAgICAgICAgVmFsaWRhdG9ycy5tYXgodGhpcy5tYXhWYWx1ZVBlcmNlbnRhZ2UpLFxuICAgICAgICBdKVxuICAgICAgKTtcblxuICAgICAgcGVyY2VudGFnZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUR1cGxpY2F0ZVBpeEtleVR5cGVCYW5rQWNjb3VudChsaXN0Q29tcGFyZTogb2JqZWN0W10pIHtcbiAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICAgIGNvbnN0IGlzRHVwbGljYXRlID0gbGlzdENvbXBhcmUuc29tZShcbiAgICAgICAgICAoZmllbGQ6IGFueSkgPT5cbiAgICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgICBmaWVsZC5waXhLZXlUeXBlLmtleSA9PT0gXCJCQU5LX0FDQ09VTlRcIiAmJlxuICAgICAgICAgICAgdmFsdWUua2V5ID09PSBcIkJBTktfQUNDT1VOVFwiXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBpc0R1cGxpY2F0ZSA/IHsgcGl4S2V5VHlwZUJhbmtBY2NvdW50RHVwbGljYXRlOiB0cnVlIH0gOiBudWxsO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhcmFtc0Zvcm0oKTogRm9ybUdyb3VwIHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXJhbXNGb3JtO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcGFyYW1zRm9ybSh2YWx1ZTogRm9ybUdyb3VwKSB7XG4gICAgICB0aGlzLl9wYXJhbXNGb3JtID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0Q3BmTnVtYmVyKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdENwZk51bWJlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGRlZmF1bHRDcGZOdW1iZXIodmFsdWU6IHN0cmluZykge1xuICAgICAgdGhpcy5fZGVmYXVsdENwZk51bWJlciA9IHZhbHVlO1xuICAgIH1cbiAgfVxuIl19