@alauda-fe/network 1.0.1 → 1.0.2

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 (62) hide show
  1. package/esm2022/index.mjs +10 -2
  2. package/esm2022/lib/components/certificate-status/component.mjs +7 -6
  3. package/esm2022/lib/components/fixed-ip/component.mjs +134 -91
  4. package/esm2022/lib/components/loadbalancer-spec-form/component.mjs +57 -57
  5. package/esm2022/lib/components/service-annotations-form/annotations.component.mjs +136 -142
  6. package/esm2022/lib/components/service-annotations-form-item/annotations.component.mjs +24 -25
  7. package/esm2022/lib/components/service-form/component.mjs +34 -33
  8. package/esm2022/lib/components/service-form/fieldset/component.mjs +92 -95
  9. package/esm2022/lib/directives/subnet-validator.directive.mjs +5 -5
  10. package/esm2022/lib/features/network-policy/components/add-peer-rule-handler/component.mjs +69 -0
  11. package/esm2022/lib/features/network-policy/components/ip-block-display/component.mjs +54 -0
  12. package/esm2022/lib/features/network-policy/components/label-selector-display/component.mjs +117 -0
  13. package/esm2022/lib/features/network-policy/components/peer-container/component.mjs +81 -0
  14. package/esm2022/lib/features/network-policy/components/pod-review/component.mjs +250 -0
  15. package/esm2022/lib/features/network-policy/components/rule-table/component.mjs +269 -0
  16. package/esm2022/lib/features/network-policy/form/network-policy/component.mjs +429 -0
  17. package/esm2022/lib/features/network-policy/form/network-policy-ip-block/component.mjs +102 -0
  18. package/esm2022/lib/features/network-policy/form/network-policy-peer/component.mjs +247 -0
  19. package/esm2022/lib/features/network-policy/form/network-policy-ports/component.mjs +161 -0
  20. package/esm2022/lib/features/network-policy/form/network-policy-remote-except-input/component.mjs +128 -0
  21. package/esm2022/lib/features/network-policy/form/network-policy-rule/component.mjs +142 -0
  22. package/esm2022/lib/services/alb-api.service.mjs +26 -6
  23. package/esm2022/lib/services/certificate-api.service.mjs +4 -4
  24. package/esm2022/lib/services/network-util.service.mjs +18 -4
  25. package/esm2022/lib/services/subnet-util.service.mjs +121 -0
  26. package/esm2022/lib/types/alb-exports.mjs +1 -1
  27. package/esm2022/lib/types/k8s-exports.mjs +2 -1
  28. package/esm2022/lib/types/metallb-exports.mjs +2 -0
  29. package/esm2022/lib/types/resource-definition.mjs +28 -2
  30. package/esm2022/lib/utils/alb-exports.mjs +1 -1
  31. package/esm2022/lib/utils/cidr-exports.mjs +3 -3
  32. package/esm2022/lib/utils/common-exports.mjs +22 -0
  33. package/esm2022/lib/utils/service-exports.mjs +1 -1
  34. package/esm2022/lib/utils/validators-exports.mjs +44 -0
  35. package/index.d.ts +9 -1
  36. package/lib/components/fixed-ip/component.d.ts +10 -3
  37. package/lib/components/service-annotations-form/annotations.component.d.ts +6 -6
  38. package/lib/components/service-annotations-form-item/annotations.component.d.ts +1 -1
  39. package/lib/components/service-form/component.d.ts +1 -1
  40. package/lib/features/network-policy/components/add-peer-rule-handler/component.d.ts +8 -0
  41. package/lib/features/network-policy/components/ip-block-display/component.d.ts +7 -0
  42. package/lib/features/network-policy/components/label-selector-display/component.d.ts +13 -0
  43. package/lib/features/network-policy/components/peer-container/component.d.ts +18 -0
  44. package/lib/features/network-policy/components/pod-review/component.d.ts +37 -0
  45. package/lib/features/network-policy/components/rule-table/component.d.ts +21 -0
  46. package/lib/features/network-policy/form/network-policy/component.d.ts +70 -0
  47. package/lib/features/network-policy/form/network-policy-ip-block/component.d.ts +23 -0
  48. package/lib/features/network-policy/form/network-policy-peer/component.d.ts +43 -0
  49. package/lib/features/network-policy/form/network-policy-ports/component.d.ts +17 -0
  50. package/lib/features/network-policy/form/network-policy-remote-except-input/component.d.ts +23 -0
  51. package/lib/features/network-policy/form/network-policy-rule/component.d.ts +28 -0
  52. package/lib/services/alb-api.service.d.ts +4 -2
  53. package/lib/services/network-util.service.d.ts +1 -0
  54. package/lib/services/subnet-util.service.d.ts +25 -0
  55. package/lib/types/alb-exports.d.ts +23 -0
  56. package/lib/types/k8s-exports.d.ts +51 -1
  57. package/lib/types/metallb-exports.d.ts +65 -0
  58. package/lib/types/resource-definition.d.ts +143 -0
  59. package/lib/utils/common-exports.d.ts +5 -0
  60. package/lib/utils/validators-exports.d.ts +16 -0
  61. package/package.json +9 -4
  62. package/styles.css +1 -0
@@ -1,5 +1,5 @@
1
1
  import { FormModule, IconModule, InputModule, RadioModule, SelectModule, TooltipModule, } from '@alauda/ui';
2
- import { CoerceNumberDirective, CoreModule, ErrorsMapperModule, TranslateModule, POSITIVE_INT_PATTERN, } from '@alauda-fe/common';
2
+ import { CoerceNumberDirective, CoreModule, POSITIVE_INT_PATTERN, TRANSLATE_MODULE, ERRORS_MAPPER_MODULE, } from '@alauda-fe/common';
3
3
  import { CommonModule } from '@angular/common';
4
4
  import { ChangeDetectionStrategy, Component } from '@angular/core';
5
5
  import { ReactiveFormsModule, Validators } from '@angular/forms';
@@ -11,6 +11,7 @@ import * as i1 from "@angular/common";
11
11
  import * as i2 from "@angular/forms";
12
12
  import * as i3 from "@alauda/ui";
13
13
  import * as i4 from "@alauda-fe/common";
14
+ const _c0 = a0 => ({ pattern: a0 });
14
15
  function LoadBalancerSpecFormComponent_aui_radio_button_6_Template(rf, ctx) { if (rf & 1) {
15
16
  i0.ɵɵelementStart(0, "aui-radio-button", 22)(1, "div", 23)(2, "div");
16
17
  i0.ɵɵtext(3);
@@ -20,12 +21,12 @@ function LoadBalancerSpecFormComponent_aui_radio_button_6_Template(rf, ctx) { if
20
21
  i0.ɵɵpipe(7, "translate");
21
22
  i0.ɵɵelementEnd()()()();
22
23
  } if (rf & 2) {
23
- const specModel_r11 = ctx.$implicit;
24
- i0.ɵɵproperty("value", specModel_r11.model);
24
+ const specModel_r2 = ctx.$implicit;
25
+ i0.ɵɵproperty("value", specModel_r2.model);
25
26
  i0.ɵɵadvance(3);
26
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 3, specModel_r11.model + "_scale"), " ");
27
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 3, "network." + specModel_r2.model + "_scale"), " ");
27
28
  i0.ɵɵadvance(3);
28
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(7, 5, specModel_r11.tip), " ");
29
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(7, 5, "network." + specModel_r2.tip), " ");
29
30
  } }
30
31
  function LoadBalancerSpecFormComponent_ng_template_8_Template(rf, ctx) { if (rf & 1) {
31
32
  i0.ɵɵelementStart(0, "ul", 25)(1, "li");
@@ -46,13 +47,13 @@ function LoadBalancerSpecFormComponent_ng_template_8_Template(rf, ctx) { if (rf
46
47
  i0.ɵɵelementEnd()();
47
48
  } if (rf & 2) {
48
49
  i0.ɵɵadvance(2);
49
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "alb_spec_model_tips_small"));
50
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "network.alb_spec_model_tips_small"));
50
51
  i0.ɵɵadvance(3);
51
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 6, "alb_spec_model_tips_medium"));
52
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 6, "network.alb_spec_model_tips_medium"));
52
53
  i0.ɵɵadvance(3);
53
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(9, 8, "alb_spec_model_tips_large"));
54
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(9, 8, "network.alb_spec_model_tips_large"));
54
55
  i0.ɵɵadvance(3);
55
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(12, 10, "alb_spec_model_tips_custom"));
56
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(12, 10, "network.alb_spec_model_tips_custom"));
56
57
  } }
57
58
  function LoadBalancerSpecFormComponent_aui_select_21_Template(rf, ctx) { if (rf & 1) {
58
59
  i0.ɵɵelementStart(0, "aui-select", 26)(1, "aui-option", 27);
@@ -75,15 +76,15 @@ function LoadBalancerSpecFormComponent_ng_template_22_span_0_Template(rf, ctx) {
75
76
  i0.ɵɵpipe(2, "translate");
76
77
  i0.ɵɵelementEnd();
77
78
  } if (rf & 2) {
78
- const cpuUnit_r13 = ctx.ngIf;
79
- i0.ɵɵadvance(1);
80
- i0.ɵɵtextInterpolate1(" ", cpuUnit_r13 === "core" ? i0.ɵɵpipeBind1(2, 1, "core") : cpuUnit_r13, " ");
79
+ const cpuUnit_r3 = ctx.ngIf;
80
+ i0.ɵɵadvance();
81
+ i0.ɵɵtextInterpolate1(" ", cpuUnit_r3 === "core" ? i0.ɵɵpipeBind1(2, 1, "core") : cpuUnit_r3, " ");
81
82
  } }
82
83
  function LoadBalancerSpecFormComponent_ng_template_22_Template(rf, ctx) { if (rf & 1) {
83
84
  i0.ɵɵtemplate(0, LoadBalancerSpecFormComponent_ng_template_22_span_0_Template, 3, 3, "span", 29);
84
85
  } if (rf & 2) {
85
- const ctx_r5 = i0.ɵɵnextContext();
86
- i0.ɵɵproperty("ngIf", ctx_r5.form.get("resourceLimit.cpu.unit").value);
86
+ const ctx_r3 = i0.ɵɵnextContext();
87
+ i0.ɵɵproperty("ngIf", ctx_r3.form.get("resourceLimit.cpu.unit").value);
87
88
  } }
88
89
  function LoadBalancerSpecFormComponent_aui_select_33_Template(rf, ctx) { if (rf & 1) {
89
90
  i0.ɵɵelementStart(0, "aui-select", 31)(1, "aui-option", 32);
@@ -98,11 +99,10 @@ function LoadBalancerSpecFormComponent_ng_template_34_Template(rf, ctx) { if (rf
98
99
  i0.ɵɵtext(1);
99
100
  i0.ɵɵelementEnd();
100
101
  } if (rf & 2) {
101
- const ctx_r9 = i0.ɵɵnextContext();
102
- i0.ɵɵadvance(1);
103
- i0.ɵɵtextInterpolate1(" ", ctx_r9.form.get("resourceLimit.memory.unit").value, " ");
102
+ const ctx_r3 = i0.ɵɵnextContext();
103
+ i0.ɵɵadvance();
104
+ i0.ɵɵtextInterpolate1(" ", ctx_r3.form.get("resourceLimit.memory.unit").value, " ");
104
105
  } }
105
- const _c0 = function (a0) { return { pattern: a0 }; };
106
106
  const SPEC_MODEL_TIPS = [
107
107
  {
108
108
  model: SpecModel.SMALL,
@@ -164,74 +164,73 @@ export class LoadBalancerSpecFormComponent extends BaseResourceFormGroupComponen
164
164
  resourceLimitForm.patchValue(resourceLimit, { emitEvent: false });
165
165
  resourceLimitForm.disable();
166
166
  }
167
- static { this.ɵfac = /*@__PURE__*/ function () { let ɵLoadBalancerSpecFormComponent_BaseFactory; return function LoadBalancerSpecFormComponent_Factory(t) { return (ɵLoadBalancerSpecFormComponent_BaseFactory || (ɵLoadBalancerSpecFormComponent_BaseFactory = i0.ɵɵgetInheritedFactory(LoadBalancerSpecFormComponent)))(t || LoadBalancerSpecFormComponent); }; }(); }
168
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LoadBalancerSpecFormComponent, selectors: [["acl-alb-spec-form"]], standalone: true, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], decls: 38, vars: 30, consts: [[3, "formGroup"], [1, "spec-model"], ["auiFormItemLabel", ""], ["auiFormItemControl", "", "formControlName", "specModel", "required", "", 3, "ngModelChange"], [3, "value", 4, "ngFor", "ngForOf"], ["auiFormItemAddon", "", "icon", "question_circle", 1, "icon--help", 3, "auiTooltip"], ["specModelTips", ""], ["width", "large"], ["formGroupName", "resourceLimit", 1, "d-flex", "flex-1", "aui-form-item__control"], [1, "flex-1"], ["auiFormItemControl", "", "formGroupName", "cpu"], ["auiInputAddonBefore", ""], ["aui-input", "", "formControlName", "value", "aclCoerceNumber", "", 3, "pattern", "aclErrorsMapper", "aclErrorsMapperOutlet"], ["class", "vm-spec-form__cpu-unit", "auiInputAddonAfter", "", "formControlName", "unit", 4, "ngIf", "ngIfElse"], ["cUnit", ""], ["auiFormItemError", ""], ["cpuError", ""], [1, "flex-1", "ml-8"], ["auiFormItemControl", "", "formGroupName", "memory"], ["auiInputAddonAfter", "", "formControlName", "unit", 4, "ngIf", "ngIfElse"], ["mUnit", ""], ["memoryError", ""], [3, "value"], [1, "spec-model__label"], [1, "text-help"], [1, "d-list"], ["auiInputAddonAfter", "", "formControlName", "unit", 1, "vm-spec-form__cpu-unit"], ["value", "m"], ["value", "core", 3, "label"], ["auiInputAddonAfter", "", 4, "ngIf"], ["auiInputAddonAfter", ""], ["auiInputAddonAfter", "", "formControlName", "unit"], ["value", "Mi"], ["value", "Gi"]], template: function LoadBalancerSpecFormComponent_Template(rf, ctx) { if (rf & 1) {
169
- i0.ɵɵelementContainerStart(0, 0);
170
- i0.ɵɵelementStart(1, "aui-form-item", 1)(2, "label", 2);
167
+ static { this.ɵfac = /*@__PURE__*/ (() => { let ɵLoadBalancerSpecFormComponent_BaseFactory; return function LoadBalancerSpecFormComponent_Factory(t) { return (ɵLoadBalancerSpecFormComponent_BaseFactory || (ɵLoadBalancerSpecFormComponent_BaseFactory = i0.ɵɵgetInheritedFactory(LoadBalancerSpecFormComponent)))(t || LoadBalancerSpecFormComponent); }; })(); }
168
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LoadBalancerSpecFormComponent, selectors: [["acl-alb-spec-form"]], standalone: true, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], decls: 38, vars: 30, consts: [["specModelTips", ""], ["cUnit", ""], ["cpuError", ""], ["mUnit", ""], ["memoryError", ""], [3, "formGroup"], [1, "spec-model"], ["auiFormItemLabel", ""], ["auiFormItemControl", "", "formControlName", "specModel", "required", "", 3, "ngModelChange"], [3, "value", 4, "ngFor", "ngForOf"], ["auiFormItemAddon", "", "icon", "question_circle", 1, "icon--help", 3, "auiTooltip"], ["width", "large"], ["formGroupName", "resourceLimit", 1, "d-flex", "flex-1", "aui-form-item__control"], [1, "flex-1"], ["auiFormItemControl", "", "formGroupName", "cpu"], ["auiInputAddonBefore", ""], ["aui-input", "", "formControlName", "value", "aclCoerceNumber", "", 3, "pattern", "aclErrorsMapper", "aclErrorsMapperOutlet"], ["class", "vm-spec-form__cpu-unit", "auiInputAddonAfter", "", "formControlName", "unit", 4, "ngIf", "ngIfElse"], ["auiFormItemError", ""], [1, "flex-1", "ml-8"], ["auiFormItemControl", "", "formGroupName", "memory"], ["auiInputAddonAfter", "", "formControlName", "unit", 4, "ngIf", "ngIfElse"], [3, "value"], [1, "spec-model__label"], [1, "text-help"], [1, "d-list"], ["auiInputAddonAfter", "", "formControlName", "unit", 1, "vm-spec-form__cpu-unit"], ["value", "m"], ["value", "core", 3, "label"], ["auiInputAddonAfter", "", 4, "ngIf"], ["auiInputAddonAfter", ""], ["auiInputAddonAfter", "", "formControlName", "unit"], ["value", "Mi"], ["value", "Gi"]], template: function LoadBalancerSpecFormComponent_Template(rf, ctx) { if (rf & 1) {
169
+ const _r1 = i0.ɵɵgetCurrentView();
170
+ i0.ɵɵelementContainerStart(0, 5);
171
+ i0.ɵɵelementStart(1, "aui-form-item", 6)(2, "label", 7);
171
172
  i0.ɵɵtext(3);
172
173
  i0.ɵɵpipe(4, "translate");
173
174
  i0.ɵɵelementEnd();
174
- i0.ɵɵelementStart(5, "aui-radio-group", 3);
175
- i0.ɵɵlistener("ngModelChange", function LoadBalancerSpecFormComponent_Template_aui_radio_group_ngModelChange_5_listener($event) { return ctx.onSpecModelChange($event); });
176
- i0.ɵɵtemplate(6, LoadBalancerSpecFormComponent_aui_radio_button_6_Template, 8, 7, "aui-radio-button", 4);
175
+ i0.ɵɵelementStart(5, "aui-radio-group", 8);
176
+ i0.ɵɵlistener("ngModelChange", function LoadBalancerSpecFormComponent_Template_aui_radio_group_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onSpecModelChange($event)); });
177
+ i0.ɵɵtemplate(6, LoadBalancerSpecFormComponent_aui_radio_button_6_Template, 8, 7, "aui-radio-button", 9);
177
178
  i0.ɵɵelementEnd();
178
- i0.ɵɵelement(7, "aui-icon", 5);
179
- i0.ɵɵtemplate(8, LoadBalancerSpecFormComponent_ng_template_8_Template, 13, 12, "ng-template", null, 6, i0.ɵɵtemplateRefExtractor);
179
+ i0.ɵɵelement(7, "aui-icon", 10);
180
+ i0.ɵɵtemplate(8, LoadBalancerSpecFormComponent_ng_template_8_Template, 13, 12, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
180
181
  i0.ɵɵelementEnd();
181
- i0.ɵɵelementStart(10, "aui-form-item", 7)(11, "label", 2);
182
+ i0.ɵɵelementStart(10, "aui-form-item", 11)(11, "label", 7);
182
183
  i0.ɵɵtext(12);
183
184
  i0.ɵɵpipe(13, "translate");
184
185
  i0.ɵɵelementEnd();
185
- i0.ɵɵelementStart(14, "div", 8)(15, "aui-form-item", 9)(16, "aui-input-group", 10)(17, "span", 11);
186
+ i0.ɵɵelementStart(14, "div", 12)(15, "aui-form-item", 13)(16, "aui-input-group", 14)(17, "span", 15);
186
187
  i0.ɵɵtext(18, "CPU");
187
188
  i0.ɵɵelementEnd();
188
- i0.ɵɵelement(19, "input", 12);
189
+ i0.ɵɵelement(19, "input", 16);
189
190
  i0.ɵɵpipe(20, "translate");
190
- i0.ɵɵtemplate(21, LoadBalancerSpecFormComponent_aui_select_21_Template, 7, 6, "aui-select", 13);
191
- i0.ɵɵtemplate(22, LoadBalancerSpecFormComponent_ng_template_22_Template, 1, 1, "ng-template", null, 14, i0.ɵɵtemplateRefExtractor);
191
+ i0.ɵɵtemplate(21, LoadBalancerSpecFormComponent_aui_select_21_Template, 7, 6, "aui-select", 17)(22, LoadBalancerSpecFormComponent_ng_template_22_Template, 1, 1, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
192
192
  i0.ɵɵelementEnd();
193
- i0.ɵɵelement(24, "div", 15, 16);
193
+ i0.ɵɵelement(24, "div", 18, 2);
194
194
  i0.ɵɵelementEnd();
195
- i0.ɵɵelementStart(26, "aui-form-item", 17)(27, "aui-input-group", 18)(28, "span", 11);
195
+ i0.ɵɵelementStart(26, "aui-form-item", 19)(27, "aui-input-group", 20)(28, "span", 15);
196
196
  i0.ɵɵtext(29);
197
197
  i0.ɵɵpipe(30, "translate");
198
198
  i0.ɵɵelementEnd();
199
- i0.ɵɵelement(31, "input", 12);
199
+ i0.ɵɵelement(31, "input", 16);
200
200
  i0.ɵɵpipe(32, "translate");
201
- i0.ɵɵtemplate(33, LoadBalancerSpecFormComponent_aui_select_33_Template, 5, 0, "aui-select", 19);
202
- i0.ɵɵtemplate(34, LoadBalancerSpecFormComponent_ng_template_34_Template, 2, 1, "ng-template", null, 20, i0.ɵɵtemplateRefExtractor);
201
+ i0.ɵɵtemplate(33, LoadBalancerSpecFormComponent_aui_select_33_Template, 5, 0, "aui-select", 21)(34, LoadBalancerSpecFormComponent_ng_template_34_Template, 2, 1, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
203
202
  i0.ɵɵelementEnd();
204
- i0.ɵɵelement(36, "div", 15, 21);
203
+ i0.ɵɵelement(36, "div", 18, 4);
205
204
  i0.ɵɵelementEnd()()();
206
205
  i0.ɵɵelementContainerEnd();
207
206
  } if (rf & 2) {
208
- const _r1 = i0.ɵɵreference(9);
209
- const _r4 = i0.ɵɵreference(23);
210
- const _r6 = i0.ɵɵreference(25);
211
- const _r8 = i0.ɵɵreference(35);
212
- const _r10 = i0.ɵɵreference(37);
207
+ const specModelTips_r5 = i0.ɵɵreference(9);
208
+ const cUnit_r6 = i0.ɵɵreference(23);
209
+ const cpuError_r7 = i0.ɵɵreference(25);
210
+ const mUnit_r8 = i0.ɵɵreference(35);
211
+ const memoryError_r9 = i0.ɵɵreference(37);
213
212
  i0.ɵɵproperty("formGroup", ctx.form);
214
213
  i0.ɵɵadvance(3);
215
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 16, "specification"));
214
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 16, "network.specification"));
216
215
  i0.ɵɵadvance(3);
217
216
  i0.ɵɵproperty("ngForOf", ctx.SPEC_MODEL_TIPS);
218
- i0.ɵɵadvance(1);
219
- i0.ɵɵproperty("auiTooltip", _r1);
217
+ i0.ɵɵadvance();
218
+ i0.ɵɵproperty("auiTooltip", specModelTips_r5);
220
219
  i0.ɵɵadvance(5);
221
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(13, 18, "resource_limit"));
220
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(13, 18, "network.resource_limit"));
222
221
  i0.ɵɵadvance(7);
223
- i0.ɵɵproperty("pattern", ctx.POSITIVE_INT_PATTERN.pattern)("aclErrorsMapper", i0.ɵɵpureFunction1(26, _c0, i0.ɵɵpipeBind1(20, 20, ctx.POSITIVE_INT_PATTERN.tip)))("aclErrorsMapperOutlet", _r6);
222
+ i0.ɵɵproperty("pattern", ctx.POSITIVE_INT_PATTERN.pattern)("aclErrorsMapper", i0.ɵɵpureFunction1(26, _c0, i0.ɵɵpipeBind1(20, 20, ctx.POSITIVE_INT_PATTERN.tip)))("aclErrorsMapperOutlet", cpuError_r7);
224
223
  i0.ɵɵadvance(2);
225
- i0.ɵɵproperty("ngIf", ctx.form.get("specModel").value === ctx.SpecModel.CUSTOMIZE)("ngIfElse", _r4);
224
+ i0.ɵɵproperty("ngIf", ctx.form.get("specModel").value === ctx.SpecModel.CUSTOMIZE)("ngIfElse", cUnit_r6);
226
225
  i0.ɵɵadvance(8);
227
226
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(30, 22, "memory"));
228
227
  i0.ɵɵadvance(2);
229
- i0.ɵɵproperty("pattern", ctx.POSITIVE_INT_PATTERN.pattern)("aclErrorsMapper", i0.ɵɵpureFunction1(28, _c0, i0.ɵɵpipeBind1(32, 24, ctx.POSITIVE_INT_PATTERN.tip)))("aclErrorsMapperOutlet", _r10);
228
+ i0.ɵɵproperty("pattern", ctx.POSITIVE_INT_PATTERN.pattern)("aclErrorsMapper", i0.ɵɵpureFunction1(28, _c0, i0.ɵɵpipeBind1(32, 24, ctx.POSITIVE_INT_PATTERN.tip)))("aclErrorsMapperOutlet", memoryError_r9);
230
229
  i0.ɵɵadvance(2);
231
- i0.ɵɵproperty("ngIf", ctx.form.get("specModel").value === ctx.SpecModel.CUSTOMIZE)("ngIfElse", _r8);
232
- } }, dependencies: [CommonModule, i1.NgForOf, i1.NgIf, ReactiveFormsModule, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.RequiredValidator, i2.PatternValidator, i2.FormGroupDirective, i2.FormControlName, i2.FormGroupName, FormModule, i3.FormItemComponent, i3.FormItemAddonDirective, i3.FormItemErrorDirective, i3.FormItemLabelDirective, i3.FormItemControlDirective, IconModule, i3.IconComponent, InputModule, i3.InputComponent, i3.InputGroupComponent, i3.InputAddonBeforeDirective, i3.InputAddonAfterDirective, RadioModule, i3.RadioGroupComponent, i3.RadioButtonComponent, SelectModule, i3.SelectComponent, i3.OptionComponent, TooltipModule, i3.TooltipDirective, TranslateModule, i4.TranslatePipe, ErrorsMapperModule, i4.ErrorsMapperDirective, CoreModule, i4.E2eAttributeBindingDirective, i4.ValidatorsDirective, CoerceNumberDirective], styles: ["aui-form-item[_ngcontent-%COMP%] aui-form-item[_ngcontent-%COMP%] .aui-form-item{margin-bottom:0}.spec-model[_ngcontent-%COMP%] .aui-form-item__label-wrapper{height:64px}.spec-model[_ngcontent-%COMP%] .aui-form-item__label-wrapper.hasLabel:after{align-self:center}.spec-model[_ngcontent-%COMP%] .aui-form-item__addon-wrapper{align-self:center}.spec-model[_ngcontent-%COMP%] .aui-radio-button__label{height:64px;min-width:132px;padding:0}.spec-model[_ngcontent-%COMP%] .aui-radio-button__label>span{flex:1;height:100%}.spec-model[_ngcontent-%COMP%] .aui-radio-button__label .text-help{margin-top:2px;font-size:12px}.spec-model__label[_ngcontent-%COMP%]{display:flex;text-align:center;justify-content:center;align-items:center;height:100%;padding:0 15px}[_nghost-%COMP%] .aui-form-item__label-wrapper:empty{display:none}[_nghost-%COMP%] .aui-input-group__input-wrapper:focus-within+.aui-input-group__addon .aui-select__input, [_nghost-%COMP%] .aui-input-group__input-wrapper:hover+.aui-input-group__addon .aui-select__input{border-left-color:rgb(var(--aui-color-primary))}[_nghost-%COMP%] aui-input-group.ng-invalid .aui-input-group__input-wrapper+.aui-input-group__addon .aui-select__input{border-left-color:rgb(var(--aui-color-red))}[_nghost-%COMP%] .aui-input-group__addon--after aui-select{margin-left:-8px;margin-right:-8px;width:56px} html[lang=en] .vm-spec-form__cpu-unit{width:72px}"], changeDetection: 0 }); }
230
+ i0.ɵɵproperty("ngIf", ctx.form.get("specModel").value === ctx.SpecModel.CUSTOMIZE)("ngIfElse", mUnit_r8);
231
+ } }, dependencies: [CommonModule, i1.NgForOf, i1.NgIf, ReactiveFormsModule, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.RequiredValidator, i2.PatternValidator, i2.FormGroupDirective, i2.FormControlName, i2.FormGroupName, FormModule, i3.FormItemComponent, i3.FormItemAddonDirective, i3.FormItemErrorDirective, i3.FormItemLabelDirective, i3.FormItemControlDirective, IconModule, i3.IconComponent, InputModule, i3.InputComponent, i3.InputGroupComponent, i3.InputAddonBeforeDirective, i3.InputAddonAfterDirective, RadioModule, i3.RadioGroupComponent, i3.RadioButtonComponent, SelectModule, i3.SelectComponent, i3.OptionComponent, TooltipModule, i3.TooltipDirective, i4.TranslatePipe, i4.ErrorsMapperDirective, CoreModule, i4.E2eAttributeBindingDirective, i4.ValidatorsDirective, CoerceNumberDirective], styles: ["aui-form-item[_ngcontent-%COMP%] aui-form-item[_ngcontent-%COMP%] .aui-form-item{margin-bottom:0}.spec-model[_ngcontent-%COMP%] .aui-form-item__label-wrapper{height:64px}.spec-model[_ngcontent-%COMP%] .aui-form-item__label-wrapper.hasLabel:after{align-self:center}.spec-model[_ngcontent-%COMP%] .aui-form-item__addon-wrapper{align-self:center}.spec-model[_ngcontent-%COMP%] .aui-radio-button__label{height:64px;min-width:132px;padding:0}.spec-model[_ngcontent-%COMP%] .aui-radio-button__label>span{flex:1;height:100%}.spec-model[_ngcontent-%COMP%] .aui-radio-button__label .text-help{margin-top:2px;font-size:12px}.spec-model__label[_ngcontent-%COMP%]{display:flex;text-align:center;justify-content:center;align-items:center;height:100%;padding:0 15px}[_nghost-%COMP%] .aui-form-item__label-wrapper:empty{display:none}[_nghost-%COMP%] .aui-input-group__input-wrapper:focus-within+.aui-input-group__addon .aui-select__input, [_nghost-%COMP%] .aui-input-group__input-wrapper:hover+.aui-input-group__addon .aui-select__input{border-left-color:rgb(var(--aui-color-primary))}[_nghost-%COMP%] aui-input-group.ng-invalid .aui-input-group__input-wrapper+.aui-input-group__addon .aui-select__input{border-left-color:rgb(var(--aui-color-red))}[_nghost-%COMP%] .aui-input-group__addon--after aui-select{margin-left:-8px;margin-right:-8px;width:56px} html:not([lang|=zh]) .vm-spec-form__cpu-unit{width:78px}"], changeDetection: 0 }); }
233
232
  }
234
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LoadBalancerSpecFormComponent, [{
233
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LoadBalancerSpecFormComponent, [{
235
234
  type: Component,
236
235
  args: [{ selector: 'acl-alb-spec-form', standalone: true, imports: [
237
236
  CommonModule,
@@ -242,10 +241,11 @@ export class LoadBalancerSpecFormComponent extends BaseResourceFormGroupComponen
242
241
  RadioModule,
243
242
  SelectModule,
244
243
  TooltipModule,
245
- TranslateModule,
246
- ErrorsMapperModule,
244
+ TRANSLATE_MODULE,
245
+ ERRORS_MAPPER_MODULE,
247
246
  CoreModule,
248
247
  CoerceNumberDirective,
249
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container [formGroup]=\"form\">\n <aui-form-item class=\"spec-model\">\n <label auiFormItemLabel>{{ 'specification' | translate }}</label>\n <aui-radio-group\n auiFormItemControl\n formControlName=\"specModel\"\n (ngModelChange)=\"onSpecModelChange($event)\"\n required\n >\n <aui-radio-button\n *ngFor=\"let specModel of SPEC_MODEL_TIPS\"\n [value]=\"specModel.model\"\n >\n <div class=\"spec-model__label\">\n <div>\n {{ specModel.model + '_scale' | translate }}\n <div class=\"text-help\">\n {{ specModel.tip | translate }}\n </div>\n </div>\n </div>\n </aui-radio-button>\n </aui-radio-group>\n <aui-icon\n auiFormItemAddon\n [auiTooltip]=\"specModelTips\"\n icon=\"question_circle\"\n class=\"icon--help\"\n ></aui-icon>\n <ng-template #specModelTips>\n <ul class=\"d-list\">\n <li>{{ 'alb_spec_model_tips_small' | translate }}</li>\n <li>{{ 'alb_spec_model_tips_medium' | translate }}</li>\n <li>{{ 'alb_spec_model_tips_large' | translate }}</li>\n <li>{{ 'alb_spec_model_tips_custom' | translate }}</li>\n </ul>\n </ng-template>\n </aui-form-item>\n <aui-form-item width=\"large\">\n <label auiFormItemLabel>{{ 'resource_limit' | translate }}</label>\n <div\n formGroupName=\"resourceLimit\"\n class=\"d-flex flex-1 aui-form-item__control\"\n >\n <aui-form-item class=\"flex-1\">\n <aui-input-group\n auiFormItemControl\n formGroupName=\"cpu\"\n >\n <span auiInputAddonBefore>CPU</span>\n <input\n aui-input\n formControlName=\"value\"\n aclCoerceNumber\n [pattern]=\"POSITIVE_INT_PATTERN.pattern\"\n [aclErrorsMapper]=\"{\n pattern: POSITIVE_INT_PATTERN.tip | translate\n }\"\n [aclErrorsMapperOutlet]=\"cpuError\"\n />\n <aui-select\n *ngIf=\"\n form.get('specModel').value === SpecModel.CUSTOMIZE;\n else cUnit\n \"\n class=\"vm-spec-form__cpu-unit\"\n auiInputAddonAfter\n formControlName=\"unit\"\n >\n <aui-option value=\"m\">m</aui-option>\n <aui-option\n value=\"core\"\n [label]=\"'core' | translate\"\n >\n {{ 'core' | translate }}\n </aui-option>\n </aui-select>\n <ng-template #cUnit>\n <span\n *ngIf=\"form.get('resourceLimit.cpu.unit').value as cpuUnit\"\n auiInputAddonAfter\n >\n {{ cpuUnit === 'core' ? ('core' | translate) : cpuUnit }}\n </span>\n </ng-template>\n </aui-input-group>\n <div\n auiFormItemError\n #cpuError\n ></div>\n </aui-form-item>\n <aui-form-item class=\"flex-1 ml-8\">\n <aui-input-group\n auiFormItemControl\n formGroupName=\"memory\"\n >\n <span auiInputAddonBefore>{{ 'memory' | translate }}</span>\n <input\n aui-input\n formControlName=\"value\"\n aclCoerceNumber\n [pattern]=\"POSITIVE_INT_PATTERN.pattern\"\n [aclErrorsMapper]=\"{\n pattern: POSITIVE_INT_PATTERN.tip | translate\n }\"\n [aclErrorsMapperOutlet]=\"memoryError\"\n />\n <aui-select\n *ngIf=\"\n form.get('specModel').value === SpecModel.CUSTOMIZE;\n else mUnit\n \"\n auiInputAddonAfter\n formControlName=\"unit\"\n >\n <aui-option value=\"Mi\">Mi</aui-option>\n <aui-option value=\"Gi\">Gi</aui-option>\n </aui-select>\n <ng-template #mUnit>\n <span auiInputAddonAfter>\n {{ form.get('resourceLimit.memory.unit').value }}\n </span>\n </ng-template>\n </aui-input-group>\n <div\n auiFormItemError\n #memoryError\n ></div>\n </aui-form-item>\n </div>\n </aui-form-item>\n</ng-container>\n", styles: ["aui-form-item aui-form-item ::ng-deep .aui-form-item{margin-bottom:0}.spec-model ::ng-deep .aui-form-item__label-wrapper{height:64px}.spec-model ::ng-deep .aui-form-item__label-wrapper.hasLabel:after{align-self:center}.spec-model ::ng-deep .aui-form-item__addon-wrapper{align-self:center}.spec-model ::ng-deep .aui-radio-button__label{height:64px;min-width:132px;padding:0}.spec-model ::ng-deep .aui-radio-button__label>span{flex:1;height:100%}.spec-model ::ng-deep .aui-radio-button__label .text-help{margin-top:2px;font-size:12px}.spec-model__label{display:flex;text-align:center;justify-content:center;align-items:center;height:100%;padding:0 15px}:host ::ng-deep .aui-form-item__label-wrapper:empty{display:none}:host ::ng-deep .aui-input-group__input-wrapper:focus-within+.aui-input-group__addon .aui-select__input,:host ::ng-deep .aui-input-group__input-wrapper:hover+.aui-input-group__addon .aui-select__input{border-left-color:rgb(var(--aui-color-primary))}:host ::ng-deep aui-input-group.ng-invalid .aui-input-group__input-wrapper+.aui-input-group__addon .aui-select__input{border-left-color:rgb(var(--aui-color-red))}:host ::ng-deep .aui-input-group__addon--after aui-select{margin-left:-8px;margin-right:-8px;width:56px}::ng-deep html[lang=en] .vm-spec-form__cpu-unit{width:72px}\n"] }]
248
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container [formGroup]=\"form\">\n <aui-form-item class=\"spec-model\">\n <label auiFormItemLabel>{{ 'network.specification' | translate }}</label>\n <aui-radio-group\n auiFormItemControl\n formControlName=\"specModel\"\n (ngModelChange)=\"onSpecModelChange($event)\"\n required\n >\n <aui-radio-button\n *ngFor=\"let specModel of SPEC_MODEL_TIPS\"\n [value]=\"specModel.model\"\n >\n <div class=\"spec-model__label\">\n <div>\n {{ 'network.' + specModel.model + '_scale' | translate }}\n <div class=\"text-help\">\n {{ 'network.' + specModel.tip | translate }}\n </div>\n </div>\n </div>\n </aui-radio-button>\n </aui-radio-group>\n <aui-icon\n auiFormItemAddon\n [auiTooltip]=\"specModelTips\"\n icon=\"question_circle\"\n class=\"icon--help\"\n ></aui-icon>\n <ng-template #specModelTips>\n <ul class=\"d-list\">\n <li>{{ 'network.alb_spec_model_tips_small' | translate }}</li>\n <li>{{ 'network.alb_spec_model_tips_medium' | translate }}</li>\n <li>{{ 'network.alb_spec_model_tips_large' | translate }}</li>\n <li>{{ 'network.alb_spec_model_tips_custom' | translate }}</li>\n </ul>\n </ng-template>\n </aui-form-item>\n <aui-form-item width=\"large\">\n <label auiFormItemLabel>{{ 'network.resource_limit' | translate }}</label>\n <div\n formGroupName=\"resourceLimit\"\n class=\"d-flex flex-1 aui-form-item__control\"\n >\n <aui-form-item class=\"flex-1\">\n <aui-input-group\n auiFormItemControl\n formGroupName=\"cpu\"\n >\n <span auiInputAddonBefore>CPU</span>\n <input\n aui-input\n formControlName=\"value\"\n aclCoerceNumber\n [pattern]=\"POSITIVE_INT_PATTERN.pattern\"\n [aclErrorsMapper]=\"{\n pattern: POSITIVE_INT_PATTERN.tip | translate\n }\"\n [aclErrorsMapperOutlet]=\"cpuError\"\n />\n <aui-select\n *ngIf=\"\n form.get('specModel').value === SpecModel.CUSTOMIZE;\n else cUnit\n \"\n class=\"vm-spec-form__cpu-unit\"\n auiInputAddonAfter\n formControlName=\"unit\"\n >\n <aui-option value=\"m\">m</aui-option>\n <aui-option\n value=\"core\"\n [label]=\"'core' | translate\"\n >\n {{ 'core' | translate }}\n </aui-option>\n </aui-select>\n <ng-template #cUnit>\n <span\n *ngIf=\"form.get('resourceLimit.cpu.unit').value as cpuUnit\"\n auiInputAddonAfter\n >\n {{ cpuUnit === 'core' ? ('core' | translate) : cpuUnit }}\n </span>\n </ng-template>\n </aui-input-group>\n <div\n auiFormItemError\n #cpuError\n ></div>\n </aui-form-item>\n <aui-form-item class=\"flex-1 ml-8\">\n <aui-input-group\n auiFormItemControl\n formGroupName=\"memory\"\n >\n <span auiInputAddonBefore>{{ 'memory' | translate }}</span>\n <input\n aui-input\n formControlName=\"value\"\n aclCoerceNumber\n [pattern]=\"POSITIVE_INT_PATTERN.pattern\"\n [aclErrorsMapper]=\"{\n pattern: POSITIVE_INT_PATTERN.tip | translate\n }\"\n [aclErrorsMapperOutlet]=\"memoryError\"\n />\n <aui-select\n *ngIf=\"\n form.get('specModel').value === SpecModel.CUSTOMIZE;\n else mUnit\n \"\n auiInputAddonAfter\n formControlName=\"unit\"\n >\n <aui-option value=\"Mi\">Mi</aui-option>\n <aui-option value=\"Gi\">Gi</aui-option>\n </aui-select>\n <ng-template #mUnit>\n <span auiInputAddonAfter>\n {{ form.get('resourceLimit.memory.unit').value }}\n </span>\n </ng-template>\n </aui-input-group>\n <div\n auiFormItemError\n #memoryError\n ></div>\n </aui-form-item>\n </div>\n </aui-form-item>\n</ng-container>\n", styles: ["aui-form-item aui-form-item ::ng-deep .aui-form-item{margin-bottom:0}.spec-model ::ng-deep .aui-form-item__label-wrapper{height:64px}.spec-model ::ng-deep .aui-form-item__label-wrapper.hasLabel:after{align-self:center}.spec-model ::ng-deep .aui-form-item__addon-wrapper{align-self:center}.spec-model ::ng-deep .aui-radio-button__label{height:64px;min-width:132px;padding:0}.spec-model ::ng-deep .aui-radio-button__label>span{flex:1;height:100%}.spec-model ::ng-deep .aui-radio-button__label .text-help{margin-top:2px;font-size:12px}.spec-model__label{display:flex;text-align:center;justify-content:center;align-items:center;height:100%;padding:0 15px}:host ::ng-deep .aui-form-item__label-wrapper:empty{display:none}:host ::ng-deep .aui-input-group__input-wrapper:focus-within+.aui-input-group__addon .aui-select__input,:host ::ng-deep .aui-input-group__input-wrapper:hover+.aui-input-group__addon .aui-select__input{border-left-color:rgb(var(--aui-color-primary))}:host ::ng-deep aui-input-group.ng-invalid .aui-input-group__input-wrapper+.aui-input-group__addon .aui-select__input{border-left-color:rgb(var(--aui-color-red))}:host ::ng-deep .aui-input-group__addon--after aui-select{margin-left:-8px;margin-right:-8px;width:56px}::ng-deep html:not([lang|=zh]) .vm-spec-form__cpu-unit{width:78px}\n"] }]
250
249
  }], null, null); })();
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9uZXR3b3JrL3NyYy9saWIvY29tcG9uZW50cy9sb2FkYmFsYW5jZXItc3BlYy1mb3JtL2NvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvbmV0d29yay9zcmMvbGliL2NvbXBvbmVudHMvbG9hZGJhbGFuY2VyLXNwZWMtZm9ybS90ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxXQUFXLEVBQ1gsWUFBWSxFQUNaLGFBQWEsR0FDZCxNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLFVBQVUsRUFDVixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLG9CQUFvQixHQUNyQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RSxPQUFPLEVBQXlCLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7O0lDWjFELDRDQUdDLGNBQUEsVUFBQTtJQUdLLFlBQ0E7O0lBQUEsK0JBQXVCO0lBQ3JCLFlBQ0Y7O0lBQUEsaUJBQU0sRUFBQSxFQUFBLEVBQUE7OztJQVBWLDJDQUF5QjtJQUlyQixlQUNBO0lBREEscUZBQ0E7SUFDRSxlQUNGO0lBREUsd0VBQ0Y7OztJQVlOLDhCQUFt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QywyQkFBQSxnQkFBQTtZQUtMLGFBQTBCOztZQUFBLGlCQUFPO1lBQzNELDZCQVNFOztZQUNGLCtGQVVhO1lBQ2Isa0lBSWM7WUFDaEIsaUJBQWtCO1lBQ2xCLCtCQUdPO1lBQ1QsaUJBQWdCLEVBQUEsRUFBQTtZQUd0QiwwQkFBZTs7Ozs7OztZQW5JRCxvQ0FBa0I7WUFFSixlQUFpQztZQUFqQyw0REFBaUM7WUFRL0IsZUFBa0I7WUFBbEIsNkNBQWtCO1lBZTFDLGVBQTRCO1lBQTVCLGdDQUE0QjtZQWNOLGVBQWtDO1lBQWxDLDhEQUFrQztZQWVsRCxlQUF3QztZQUF4QywwREFBd0Msc0dBQUEsOEJBQUE7WUFPdkMsZUFHVDtZQUhTLGtGQUdULGlCQUFBO1lBZ0NnQyxlQUEwQjtZQUExQixzREFBMEI7WUFLbEQsZUFBd0M7WUFBeEMsMERBQXdDLHNHQUFBLCtCQUFBO1lBT3ZDLGVBR1Q7WUFIUyxrRkFHVCxpQkFBQTs0QkQvREEsWUFBWSx1QkFDWixtQkFBbUIsZ0xBQ25CLFVBQVUsc0lBQ1YsVUFBVSxvQkFDVixXQUFXLHdHQUNYLFdBQVcsbURBQ1gsWUFBWSwwQ0FDWixhQUFhLHVCQUNiLGVBQWUsb0JBQ2Ysa0JBQWtCLDRCQUNsQixVQUFVLDJEQUNWLHFCQUFxQjs7dUZBSVosNkJBQTZCO2NBckJ6QyxTQUFTOzJCQUNFLG1CQUFtQixjQUdqQixJQUFJLFdBQ1A7b0JBQ1AsWUFBWTtvQkFDWixtQkFBbUI7b0JBQ25CLFVBQVU7b0JBQ1YsVUFBVTtvQkFDVixXQUFXO29CQUNYLFdBQVc7b0JBQ1gsWUFBWTtvQkFDWixhQUFhO29CQUNiLGVBQWU7b0JBQ2Ysa0JBQWtCO29CQUNsQixVQUFVO29CQUNWLHFCQUFxQjtpQkFDdEIsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBGb3JtTW9kdWxlLFxuICBJY29uTW9kdWxlLFxuICBJbnB1dE1vZHVsZSxcbiAgUmFkaW9Nb2R1bGUsXG4gIFNlbGVjdE1vZHVsZSxcbiAgVG9vbHRpcE1vZHVsZSxcbn0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQge1xuICBDb2VyY2VOdW1iZXJEaXJlY3RpdmUsXG4gIENvcmVNb2R1bGUsXG4gIEVycm9yc01hcHBlck1vZHVsZSxcbiAgVHJhbnNsYXRlTW9kdWxlLFxuICBQT1NJVElWRV9JTlRfUEFUVEVSTixcbn0gZnJvbSAnQGFsYXVkYS1mZS9jb21tb24nO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCYXNlUmVzb3VyY2VGb3JtR3JvdXBDb21wb25lbnQgfSBmcm9tICduZy1yZXNvdXJjZS1mb3JtLXV0aWwnO1xuXG5pbXBvcnQgeyBBbGJSZXNvdXJjZUxpbWl0TW9kZWwsIFNwZWNNb2RlbCB9IGZyb20gJy4uLy4uL3R5cGVzL2FsYi1leHBvcnRzJztcbmltcG9ydCB7IFJFU09VUkNFX0xJTUlUX01BUFBFUiB9IGZyb20gJy4uLy4uL3V0aWxzL2FsYi1leHBvcnRzJztcblxuY29uc3QgU1BFQ19NT0RFTF9USVBTID0gW1xuICB7XG4gICAgbW9kZWw6IFNwZWNNb2RlbC5TTUFMTCxcbiAgICB0aXA6ICdhbGJfc3BlY19zbWFsbF90aXBzJyxcbiAgfSxcbiAge1xuICAgIG1vZGVsOiBTcGVjTW9kZWwuTUVESVVNLFxuICAgIHRpcDogJ2FsYl9zcGVjX21lZGl1bV90aXBzJyxcbiAgfSxcbiAge1xuICAgIG1vZGVsOiBTcGVjTW9kZWwuTEFSR0UsXG4gICAgdGlwOiAnYWxiX3NwZWNfbGFyZ2VfdGlwcycsXG4gIH0sXG4gIHtcbiAgICBtb2RlbDogU3BlY01vZGVsLkNVU1RPTUlaRSxcbiAgICB0aXA6ICdzdWl0YWJsZV9mb3JfcHJvZmVzc2lvbmFsX3VzZXJzJyxcbiAgfSxcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjbC1hbGItc3BlYy1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICd0ZW1wbGF0ZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3N0eWxlcy5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3JtTW9kdWxlLFxuICAgIEljb25Nb2R1bGUsXG4gICAgSW5wdXRNb2R1bGUsXG4gICAgUmFkaW9Nb2R1bGUsXG4gICAgU2VsZWN0TW9kdWxlLFxuICAgIFRvb2x0aXBNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIEVycm9yc01hcHBlck1vZHVsZSxcbiAgICBDb3JlTW9kdWxlLFxuICAgIENvZXJjZU51bWJlckRpcmVjdGl2ZSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIExvYWRCYWxhbmNlclNwZWNGb3JtQ29tcG9uZW50IGV4dGVuZHMgQmFzZVJlc291cmNlRm9ybUdyb3VwQ29tcG9uZW50PEFsYlJlc291cmNlTGltaXRNb2RlbD4ge1xuICBTcGVjTW9kZWwgPSBTcGVjTW9kZWw7XG4gIFNQRUNfTU9ERUxfVElQUyA9IFNQRUNfTU9ERUxfVElQUztcbiAgUE9TSVRJVkVfSU5UX1BBVFRFUk4gPSBQT1NJVElWRV9JTlRfUEFUVEVSTjtcblxuICBjcmVhdGVGb3JtKCkge1xuICAgIGNvbnN0IHsgY3B1LCBtZW1vcnkgfSA9IFJFU09VUkNFX0xJTUlUX01BUFBFUltTcGVjTW9kZWwuU01BTExdO1xuICAgIGNvbnN0IHJlc291cmNlTGltaXRGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBjcHU6IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICB2YWx1ZTogdGhpcy5mYi5jb250cm9sKGNwdS52YWx1ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICAgICAgdW5pdDogdGhpcy5mYi5jb250cm9sKGNwdS51bml0KSxcbiAgICAgIH0pLFxuICAgICAgbWVtb3J5OiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgdmFsdWU6IHRoaXMuZmIuY29udHJvbChtZW1vcnkudmFsdWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgICAgIHVuaXQ6IHRoaXMuZmIuY29udHJvbChtZW1vcnkudW5pdCksXG4gICAgICB9KSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5yZXNvdXJjZU1vZGVsPy5zcGVjTW9kZWwgIT09IFNwZWNNb2RlbC5DVVNUT01JWkUpIHtcbiAgICAgIHJlc291cmNlTGltaXRGb3JtLmRpc2FibGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgc3BlY01vZGVsOiB0aGlzLmZiLmNvbnRyb2woU3BlY01vZGVsLlNNQUxMKSxcbiAgICAgIHJlc291cmNlTGltaXQ6IHJlc291cmNlTGltaXRGb3JtLFxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0RGVmYXVsdEZvcm1Nb2RlbCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3BlY01vZGVsOiBTcGVjTW9kZWwuU01BTEwsXG4gICAgICByZXNvdXJjZUxpbWl0OiBSRVNPVVJDRV9MSU1JVF9NQVBQRVJbU3BlY01vZGVsLlNNQUxMXSxcbiAgICB9O1xuICB9XG5cbiAgb25TcGVjTW9kZWxDaGFuZ2Uoc3BlY01vZGVsOiBTcGVjTW9kZWwpIHtcbiAgICBjb25zdCByZXNvdXJjZUxpbWl0ID0gUkVTT1VSQ0VfTElNSVRfTUFQUEVSW3NwZWNNb2RlbF07XG4gICAgY29uc3QgcmVzb3VyY2VMaW1pdEZvcm0gPSB0aGlzLmZvcm0uZ2V0KCdyZXNvdXJjZUxpbWl0Jyk7XG5cbiAgICBpZiAoIXJlc291cmNlTGltaXQpIHtcbiAgICAgIHJlc291cmNlTGltaXRGb3JtLmVuYWJsZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlc291cmNlTGltaXRGb3JtLnBhdGNoVmFsdWUocmVzb3VyY2VMaW1pdCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHJlc291cmNlTGltaXRGb3JtLmRpc2FibGUoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgPGF1aS1mb3JtLWl0ZW0gY2xhc3M9XCJzcGVjLW1vZGVsXCI+XG4gICAgPGxhYmVsIGF1aUZvcm1JdGVtTGFiZWw+e3sgJ3NwZWNpZmljYXRpb24nIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICA8YXVpLXJhZGlvLWdyb3VwXG4gICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cInNwZWNNb2RlbFwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNwZWNNb2RlbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgIHJlcXVpcmVkXG4gICAgPlxuICAgICAgPGF1aS1yYWRpby1idXR0b25cbiAgICAgICAgKm5nRm9yPVwibGV0IHNwZWNNb2RlbCBvZiBTUEVDX01PREVMX1RJUFNcIlxuICAgICAgICBbdmFsdWVdPVwic3BlY01vZGVsLm1vZGVsXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNwZWMtbW9kZWxfX2xhYmVsXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIHt7IHNwZWNNb2RlbC5tb2RlbCArICdfc2NhbGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1oZWxwXCI+XG4gICAgICAgICAgICAgIHt7IHNwZWNNb2RlbC50aXAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYXVpLXJhZGlvLWJ1dHRvbj5cbiAgICA8L2F1aS1yYWRpby1ncm91cD5cbiAgICA8YXVpLWljb25cbiAgICAgIGF1aUZvcm1JdGVtQWRkb25cbiAgICAgIFthdWlUb29sdGlwXT1cInNwZWNNb2RlbFRpcHNcIlxuICAgICAgaWNvbj1cInF1ZXN0aW9uX2NpcmNsZVwiXG4gICAgICBjbGFzcz1cImljb24tLWhlbHBcIlxuICAgID48L2F1aS1pY29uPlxuICAgIDxuZy10ZW1wbGF0ZSAjc3BlY01vZGVsVGlwcz5cbiAgICAgIDx1bCBjbGFzcz1cImQtbGlzdFwiPlxuICAgICAgICA8bGk+e3sgJ2FsYl9zcGVjX21vZGVsX3RpcHNfc21hbGwnIHwgdHJhbnNsYXRlIH19PC9saT5cbiAgICAgICAgPGxpPnt7ICdhbGJfc3BlY19tb2RlbF90aXBzX21lZGl1bScgfCB0cmFuc2xhdGUgfX08L2xpPlxuICAgICAgICA8bGk+e3sgJ2FsYl9zcGVjX21vZGVsX3RpcHNfbGFyZ2UnIHwgdHJhbnNsYXRlIH19PC9saT5cbiAgICAgICAgPGxpPnt7ICdhbGJfc3BlY19tb2RlbF90aXBzX2N1c3RvbScgfCB0cmFuc2xhdGUgfX08L2xpPlxuICAgICAgPC91bD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2F1aS1mb3JtLWl0ZW0+XG4gIDxhdWktZm9ybS1pdGVtIHdpZHRoPVwibGFyZ2VcIj5cbiAgICA8bGFiZWwgYXVpRm9ybUl0ZW1MYWJlbD57eyAncmVzb3VyY2VfbGltaXQnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICA8ZGl2XG4gICAgICBmb3JtR3JvdXBOYW1lPVwicmVzb3VyY2VMaW1pdFwiXG4gICAgICBjbGFzcz1cImQtZmxleCBmbGV4LTEgYXVpLWZvcm0taXRlbV9fY29udHJvbFwiXG4gICAgPlxuICAgICAgPGF1aS1mb3JtLWl0ZW0gY2xhc3M9XCJmbGV4LTFcIj5cbiAgICAgICAgPGF1aS1pbnB1dC1ncm91cFxuICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgIGZvcm1Hcm91cE5hbWU9XCJjcHVcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gYXVpSW5wdXRBZGRvbkJlZm9yZT5DUFU8L3NwYW4+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBhdWktaW5wdXRcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInZhbHVlXCJcbiAgICAgICAgICAgIGFjbENvZXJjZU51bWJlclxuICAgICAgICAgICAgW3BhdHRlcm5dPVwiUE9TSVRJVkVfSU5UX1BBVFRFUk4ucGF0dGVyblwiXG4gICAgICAgICAgICBbYWNsRXJyb3JzTWFwcGVyXT1cIntcbiAgICAgICAgICAgICAgcGF0dGVybjogUE9TSVRJVkVfSU5UX1BBVFRFUk4udGlwIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIFthY2xFcnJvcnNNYXBwZXJPdXRsZXRdPVwiY3B1RXJyb3JcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGF1aS1zZWxlY3RcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIGZvcm0uZ2V0KCdzcGVjTW9kZWwnKS52YWx1ZSA9PT0gU3BlY01vZGVsLkNVU1RPTUlaRTtcbiAgICAgICAgICAgICAgZWxzZSBjVW5pdFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwidm0tc3BlYy1mb3JtX19jcHUtdW5pdFwiXG4gICAgICAgICAgICBhdWlJbnB1dEFkZG9uQWZ0ZXJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInVuaXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxhdWktb3B0aW9uIHZhbHVlPVwibVwiPm08L2F1aS1vcHRpb24+XG4gICAgICAgICAgICA8YXVpLW9wdGlvblxuICAgICAgICAgICAgICB2YWx1ZT1cImNvcmVcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NvcmUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ2NvcmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2F1aS1vcHRpb24+XG4gICAgICAgICAgPC9hdWktc2VsZWN0PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY1VuaXQ+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdJZj1cImZvcm0uZ2V0KCdyZXNvdXJjZUxpbWl0LmNwdS51bml0JykudmFsdWUgYXMgY3B1VW5pdFwiXG4gICAgICAgICAgICAgIGF1aUlucHV0QWRkb25BZnRlclxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBjcHVVbml0ID09PSAnY29yZScgPyAoJ2NvcmUnIHwgdHJhbnNsYXRlKSA6IGNwdVVuaXQgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2F1aS1pbnB1dC1ncm91cD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF1aUZvcm1JdGVtRXJyb3JcbiAgICAgICAgICAjY3B1RXJyb3JcbiAgICAgICAgPjwvZGl2PlxuICAgICAgPC9hdWktZm9ybS1pdGVtPlxuICAgICAgPGF1aS1mb3JtLWl0ZW0gY2xhc3M9XCJmbGV4LTEgbWwtOFwiPlxuICAgICAgICA8YXVpLWlucHV0LWdyb3VwXG4gICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgZm9ybUdyb3VwTmFtZT1cIm1lbW9yeVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBhdWlJbnB1dEFkZG9uQmVmb3JlPnt7ICdtZW1vcnknIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgYXVpLWlucHV0XG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBhY2xDb2VyY2VOdW1iZXJcbiAgICAgICAgICAgIFtwYXR0ZXJuXT1cIlBPU0lUSVZFX0lOVF9QQVRURVJOLnBhdHRlcm5cIlxuICAgICAgICAgICAgW2FjbEVycm9yc01hcHBlcl09XCJ7XG4gICAgICAgICAgICAgIHBhdHRlcm46IFBPU0lUSVZFX0lOVF9QQVRURVJOLnRpcCB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBbYWNsRXJyb3JzTWFwcGVyT3V0bGV0XT1cIm1lbW9yeUVycm9yXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxhdWktc2VsZWN0XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBmb3JtLmdldCgnc3BlY01vZGVsJykudmFsdWUgPT09IFNwZWNNb2RlbC5DVVNUT01JWkU7XG4gICAgICAgICAgICAgIGVsc2UgbVVuaXRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBhdWlJbnB1dEFkZG9uQWZ0ZXJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInVuaXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxhdWktb3B0aW9uIHZhbHVlPVwiTWlcIj5NaTwvYXVpLW9wdGlvbj5cbiAgICAgICAgICAgIDxhdWktb3B0aW9uIHZhbHVlPVwiR2lcIj5HaTwvYXVpLW9wdGlvbj5cbiAgICAgICAgICA8L2F1aS1zZWxlY3Q+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNtVW5pdD5cbiAgICAgICAgICAgIDxzcGFuIGF1aUlucHV0QWRkb25BZnRlcj5cbiAgICAgICAgICAgICAge3sgZm9ybS5nZXQoJ3Jlc291cmNlTGltaXQubWVtb3J5LnVuaXQnKS52YWx1ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYXVpLWlucHV0LWdyb3VwPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXVpRm9ybUl0ZW1FcnJvclxuICAgICAgICAgICNtZW1vcnlFcnJvclxuICAgICAgICA+PC9kaXY+XG4gICAgICA8L2F1aS1mb3JtLWl0ZW0+XG4gICAgPC9kaXY+XG4gIDwvYXVpLWZvcm0taXRlbT5cbjwvbmctY29udGFpbmVyPlxuIl19
250
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LoadBalancerSpecFormComponent, { className: "LoadBalancerSpecFormComponent", filePath: "lib/components/loadbalancer-spec-form/component.ts", lineNumber: 64 }); })();
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9uZXR3b3JrL3NyYy9saWIvY29tcG9uZW50cy9sb2FkYmFsYW5jZXItc3BlYy1mb3JtL2NvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvbmV0d29yay9zcmMvbGliL2NvbXBvbmVudHMvbG9hZGJhbGFuY2VyLXNwZWMtZm9ybS90ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxXQUFXLEVBQ1gsWUFBWSxFQUNaLGFBQWEsR0FDZCxNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLFVBQVUsRUFDVixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixHQUNyQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RSxPQUFPLEVBQXlCLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7OztJQ1B0RCxBQURGLEFBSkYsNENBR0MsY0FDZ0MsVUFDeEI7SUFDSCxZQUNBOztJQUFBLCtCQUF1QjtJQUNyQixZQUNGOztJQUdOLEFBREUsQUFERSxBQURFLGlCQUFNLEVBQ0YsRUFDRixFQUNXOzs7SUFWakIsMENBQXlCO0lBSXJCLGVBQ0E7SUFEQSxpR0FDQTtJ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QyxNQUFNOztrRkFFcEMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRm9ybU1vZHVsZSxcbiAgSWNvbk1vZHVsZSxcbiAgSW5wdXRNb2R1bGUsXG4gIFJhZGlvTW9kdWxlLFxuICBTZWxlY3RNb2R1bGUsXG4gIFRvb2x0aXBNb2R1bGUsXG59IGZyb20gJ0BhbGF1ZGEvdWknO1xuaW1wb3J0IHtcbiAgQ29lcmNlTnVtYmVyRGlyZWN0aXZlLFxuICBDb3JlTW9kdWxlLFxuICBQT1NJVElWRV9JTlRfUEFUVEVSTixcbiAgVFJBTlNMQVRFX01PRFVMRSxcbiAgRVJST1JTX01BUFBFUl9NT0RVTEUsXG59IGZyb20gJ0BhbGF1ZGEtZmUvY29tbW9uJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmFzZVJlc291cmNlRm9ybUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnbmctcmVzb3VyY2UtZm9ybS11dGlsJztcblxuaW1wb3J0IHsgQWxiUmVzb3VyY2VMaW1pdE1vZGVsLCBTcGVjTW9kZWwgfSBmcm9tICcuLi8uLi90eXBlcy9hbGItZXhwb3J0cyc7XG5pbXBvcnQgeyBSRVNPVVJDRV9MSU1JVF9NQVBQRVIgfSBmcm9tICcuLi8uLi91dGlscy9hbGItZXhwb3J0cyc7XG5cbmNvbnN0IFNQRUNfTU9ERUxfVElQUyA9IFtcbiAge1xuICAgIG1vZGVsOiBTcGVjTW9kZWwuU01BTEwsXG4gICAgdGlwOiAnYWxiX3NwZWNfc21hbGxfdGlwcycsXG4gIH0sXG4gIHtcbiAgICBtb2RlbDogU3BlY01vZGVsLk1FRElVTSxcbiAgICB0aXA6ICdhbGJfc3BlY19tZWRpdW1fdGlwcycsXG4gIH0sXG4gIHtcbiAgICBtb2RlbDogU3BlY01vZGVsLkxBUkdFLFxuICAgIHRpcDogJ2FsYl9zcGVjX2xhcmdlX3RpcHMnLFxuICB9LFxuICB7XG4gICAgbW9kZWw6IFNwZWNNb2RlbC5DVVNUT01JWkUsXG4gICAgdGlwOiAnc3VpdGFibGVfZm9yX3Byb2Zlc3Npb25hbF91c2VycycsXG4gIH0sXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtYWxiLXNwZWMtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAndGVtcGxhdGUuaHRtbCcsXG4gIHN0eWxlVXJsczogWydzdHlsZXMuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybU1vZHVsZSxcbiAgICBJY29uTW9kdWxlLFxuICAgIElucHV0TW9kdWxlLFxuICAgIFJhZGlvTW9kdWxlLFxuICAgIFNlbGVjdE1vZHVsZSxcbiAgICBUb29sdGlwTW9kdWxlLFxuICAgIFRSQU5TTEFURV9NT0RVTEUsXG4gICAgRVJST1JTX01BUFBFUl9NT0RVTEUsXG4gICAgQ29yZU1vZHVsZSxcbiAgICBDb2VyY2VOdW1iZXJEaXJlY3RpdmUsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBMb2FkQmFsYW5jZXJTcGVjRm9ybUNvbXBvbmVudCBleHRlbmRzIEJhc2VSZXNvdXJjZUZvcm1Hcm91cENvbXBvbmVudDxBbGJSZXNvdXJjZUxpbWl0TW9kZWw+IHtcbiAgU3BlY01vZGVsID0gU3BlY01vZGVsO1xuICBTUEVDX01PREVMX1RJUFMgPSBTUEVDX01PREVMX1RJUFM7XG4gIFBPU0lUSVZFX0lOVF9QQVRURVJOID0gUE9TSVRJVkVfSU5UX1BBVFRFUk47XG5cbiAgY3JlYXRlRm9ybSgpIHtcbiAgICBjb25zdCB7IGNwdSwgbWVtb3J5IH0gPSBSRVNPVVJDRV9MSU1JVF9NQVBQRVJbU3BlY01vZGVsLlNNQUxMXTtcbiAgICBjb25zdCByZXNvdXJjZUxpbWl0Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgY3B1OiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgdmFsdWU6IHRoaXMuZmIuY29udHJvbChjcHUudmFsdWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgICAgIHVuaXQ6IHRoaXMuZmIuY29udHJvbChjcHUudW5pdCksXG4gICAgICB9KSxcbiAgICAgIG1lbW9yeTogdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLmZiLmNvbnRyb2wobWVtb3J5LnZhbHVlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxuICAgICAgICB1bml0OiB0aGlzLmZiLmNvbnRyb2wobWVtb3J5LnVuaXQpLFxuICAgICAgfSksXG4gICAgfSk7XG4gICAgaWYgKHRoaXMucmVzb3VyY2VNb2RlbD8uc3BlY01vZGVsICE9PSBTcGVjTW9kZWwuQ1VTVE9NSVpFKSB7XG4gICAgICByZXNvdXJjZUxpbWl0Rm9ybS5kaXNhYmxlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHNwZWNNb2RlbDogdGhpcy5mYi5jb250cm9sKFNwZWNNb2RlbC5TTUFMTCksXG4gICAgICByZXNvdXJjZUxpbWl0OiByZXNvdXJjZUxpbWl0Rm9ybSxcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldERlZmF1bHRGb3JtTW9kZWwoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNwZWNNb2RlbDogU3BlY01vZGVsLlNNQUxMLFxuICAgICAgcmVzb3VyY2VMaW1pdDogUkVTT1VSQ0VfTElNSVRfTUFQUEVSW1NwZWNNb2RlbC5TTUFMTF0sXG4gICAgfTtcbiAgfVxuXG4gIG9uU3BlY01vZGVsQ2hhbmdlKHNwZWNNb2RlbDogU3BlY01vZGVsKSB7XG4gICAgY29uc3QgcmVzb3VyY2VMaW1pdCA9IFJFU09VUkNFX0xJTUlUX01BUFBFUltzcGVjTW9kZWxdO1xuICAgIGNvbnN0IHJlc291cmNlTGltaXRGb3JtID0gdGhpcy5mb3JtLmdldCgncmVzb3VyY2VMaW1pdCcpO1xuXG4gICAgaWYgKCFyZXNvdXJjZUxpbWl0KSB7XG4gICAgICByZXNvdXJjZUxpbWl0Rm9ybS5lbmFibGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXNvdXJjZUxpbWl0Rm9ybS5wYXRjaFZhbHVlKHJlc291cmNlTGltaXQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICByZXNvdXJjZUxpbWl0Rm9ybS5kaXNhYmxlKCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gIDxhdWktZm9ybS1pdGVtIGNsYXNzPVwic3BlYy1tb2RlbFwiPlxuICAgIDxsYWJlbCBhdWlGb3JtSXRlbUxhYmVsPnt7ICduZXR3b3JrLnNwZWNpZmljYXRpb24nIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICA8YXVpLXJhZGlvLWdyb3VwXG4gICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cInNwZWNNb2RlbFwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNwZWNNb2RlbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgIHJlcXVpcmVkXG4gICAgPlxuICAgICAgPGF1aS1yYWRpby1idXR0b25cbiAgICAgICAgKm5nRm9yPVwibGV0IHNwZWNNb2RlbCBvZiBTUEVDX01PREVMX1RJUFNcIlxuICAgICAgICBbdmFsdWVdPVwic3BlY01vZGVsLm1vZGVsXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNwZWMtbW9kZWxfX2xhYmVsXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIHt7ICduZXR3b3JrLicgKyBzcGVjTW9kZWwubW9kZWwgKyAnX3NjYWxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtaGVscFwiPlxuICAgICAgICAgICAgICB7eyAnbmV0d29yay4nICsgc3BlY01vZGVsLnRpcCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hdWktcmFkaW8tYnV0dG9uPlxuICAgIDwvYXVpLXJhZGlvLWdyb3VwPlxuICAgIDxhdWktaWNvblxuICAgICAgYXVpRm9ybUl0ZW1BZGRvblxuICAgICAgW2F1aVRvb2x0aXBdPVwic3BlY01vZGVsVGlwc1wiXG4gICAgICBpY29uPVwicXVlc3Rpb25fY2lyY2xlXCJcbiAgICAgIGNsYXNzPVwiaWNvbi0taGVscFwiXG4gICAgPjwvYXVpLWljb24+XG4gICAgPG5nLXRlbXBsYXRlICNzcGVjTW9kZWxUaXBzPlxuICAgICAgPHVsIGNsYXNzPVwiZC1saXN0XCI+XG4gICAgICAgIDxsaT57eyAnbmV0d29yay5hbGJfc3BlY19tb2RlbF90aXBzX3NtYWxsJyB8IHRyYW5zbGF0ZSB9fTwvbGk+XG4gICAgICAgIDxsaT57eyAnbmV0d29yay5hbGJfc3BlY19tb2RlbF90aXBzX21lZGl1bScgfCB0cmFuc2xhdGUgfX08L2xpPlxuICAgICAgICA8bGk+e3sgJ25ldHdvcmsuYWxiX3NwZWNfbW9kZWxfdGlwc19sYXJnZScgfCB0cmFuc2xhdGUgfX08L2xpPlxuICAgICAgICA8bGk+e3sgJ25ldHdvcmsuYWxiX3NwZWNfbW9kZWxfdGlwc19jdXN0b20nIHwgdHJhbnNsYXRlIH19PC9saT5cbiAgICAgIDwvdWw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9hdWktZm9ybS1pdGVtPlxuICA8YXVpLWZvcm0taXRlbSB3aWR0aD1cImxhcmdlXCI+XG4gICAgPGxhYmVsIGF1aUZvcm1JdGVtTGFiZWw+e3sgJ25ldHdvcmsucmVzb3VyY2VfbGltaXQnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICA8ZGl2XG4gICAgICBmb3JtR3JvdXBOYW1lPVwicmVzb3VyY2VMaW1pdFwiXG4gICAgICBjbGFzcz1cImQtZmxleCBmbGV4LTEgYXVpLWZvcm0taXRlbV9fY29udHJvbFwiXG4gICAgPlxuICAgICAgPGF1aS1mb3JtLWl0ZW0gY2xhc3M9XCJmbGV4LTFcIj5cbiAgICAgICAgPGF1aS1pbnB1dC1ncm91cFxuICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgIGZvcm1Hcm91cE5hbWU9XCJjcHVcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gYXVpSW5wdXRBZGRvbkJlZm9yZT5DUFU8L3NwYW4+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBhdWktaW5wdXRcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInZhbHVlXCJcbiAgICAgICAgICAgIGFjbENvZXJjZU51bWJlclxuICAgICAgICAgICAgW3BhdHRlcm5dPVwiUE9TSVRJVkVfSU5UX1BBVFRFUk4ucGF0dGVyblwiXG4gICAgICAgICAgICBbYWNsRXJyb3JzTWFwcGVyXT1cIntcbiAgICAgICAgICAgICAgcGF0dGVybjogUE9TSVRJVkVfSU5UX1BBVFRFUk4udGlwIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIFthY2xFcnJvcnNNYXBwZXJPdXRsZXRdPVwiY3B1RXJyb3JcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGF1aS1zZWxlY3RcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIGZvcm0uZ2V0KCdzcGVjTW9kZWwnKS52YWx1ZSA9PT0gU3BlY01vZGVsLkNVU1RPTUlaRTtcbiAgICAgICAgICAgICAgZWxzZSBjVW5pdFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwidm0tc3BlYy1mb3JtX19jcHUtdW5pdFwiXG4gICAgICAgICAgICBhdWlJbnB1dEFkZG9uQWZ0ZXJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInVuaXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxhdWktb3B0aW9uIHZhbHVlPVwibVwiPm08L2F1aS1vcHRpb24+XG4gICAgICAgICAgICA8YXVpLW9wdGlvblxuICAgICAgICAgICAgICB2YWx1ZT1cImNvcmVcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NvcmUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ2NvcmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2F1aS1vcHRpb24+XG4gICAgICAgICAgPC9hdWktc2VsZWN0PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY1VuaXQ+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdJZj1cImZvcm0uZ2V0KCdyZXNvdXJjZUxpbWl0LmNwdS51bml0JykudmFsdWUgYXMgY3B1VW5pdFwiXG4gICAgICAgICAgICAgIGF1aUlucHV0QWRkb25BZnRlclxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBjcHVVbml0ID09PSAnY29yZScgPyAoJ2NvcmUnIHwgdHJhbnNsYXRlKSA6IGNwdVVuaXQgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2F1aS1pbnB1dC1ncm91cD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF1aUZvcm1JdGVtRXJyb3JcbiAgICAgICAgICAjY3B1RXJyb3JcbiAgICAgICAgPjwvZGl2PlxuICAgICAgPC9hdWktZm9ybS1pdGVtPlxuICAgICAgPGF1aS1mb3JtLWl0ZW0gY2xhc3M9XCJmbGV4LTEgbWwtOFwiPlxuICAgICAgICA8YXVpLWlucHV0LWdyb3VwXG4gICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgZm9ybUdyb3VwTmFtZT1cIm1lbW9yeVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBhdWlJbnB1dEFkZG9uQmVmb3JlPnt7ICdtZW1vcnknIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgYXVpLWlucHV0XG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBhY2xDb2VyY2VOdW1iZXJcbiAgICAgICAgICAgIFtwYXR0ZXJuXT1cIlBPU0lUSVZFX0lOVF9QQVRURVJOLnBhdHRlcm5cIlxuICAgICAgICAgICAgW2FjbEVycm9yc01hcHBlcl09XCJ7XG4gICAgICAgICAgICAgIHBhdHRlcm46IFBPU0lUSVZFX0lOVF9QQVRURVJOLnRpcCB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBbYWNsRXJyb3JzTWFwcGVyT3V0bGV0XT1cIm1lbW9yeUVycm9yXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxhdWktc2VsZWN0XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBmb3JtLmdldCgnc3BlY01vZGVsJykudmFsdWUgPT09IFNwZWNNb2RlbC5DVVNUT01JWkU7XG4gICAgICAgICAgICAgIGVsc2UgbVVuaXRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBhdWlJbnB1dEFkZG9uQWZ0ZXJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInVuaXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxhdWktb3B0aW9uIHZhbHVlPVwiTWlcIj5NaTwvYXVpLW9wdGlvbj5cbiAgICAgICAgICAgIDxhdWktb3B0aW9uIHZhbHVlPVwiR2lcIj5HaTwvYXVpLW9wdGlvbj5cbiAgICAgICAgICA8L2F1aS1zZWxlY3Q+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNtVW5pdD5cbiAgICAgICAgICAgIDxzcGFuIGF1aUlucHV0QWRkb25BZnRlcj5cbiAgICAgICAgICAgICAge3sgZm9ybS5nZXQoJ3Jlc291cmNlTGltaXQubWVtb3J5LnVuaXQnKS52YWx1ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYXVpLWlucHV0LWdyb3VwPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXVpRm9ybUl0ZW1FcnJvclxuICAgICAgICAgICNtZW1vcnlFcnJvclxuICAgICAgICA+PC9kaXY+XG4gICAgICA8L2F1aS1mb3JtLWl0ZW0+XG4gICAgPC9kaXY+XG4gIDwvYXVpLWZvcm0taXRlbT5cbjwvbmctY29udGFpbmVyPlxuIl19