@alauda-fe/crd-form 0.0.8 → 1.0.1-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/fesm2022/alauda-fe-crd-form.mjs +3088 -0
- package/fesm2022/alauda-fe-crd-form.mjs.map +1 -0
- package/package.json +12 -14
- package/types/alauda-fe-crd-form.d.ts +934 -0
- package/esm2022/alauda-fe-crd-form.mjs +0 -5
- package/esm2022/lib/abstract/base-array.mjs +0 -117
- package/esm2022/lib/crd-form/component.mjs +0 -325
- package/esm2022/lib/crd-form/helper.mjs +0 -32
- package/esm2022/lib/crd-form.module.mjs +0 -115
- package/esm2022/lib/field-controls/expressions/expression-core.mjs +0 -2
- package/esm2022/lib/field-controls/expressions/props-expression.mjs +0 -58
- package/esm2022/lib/field-controls/form-item.component.mjs +0 -215
- package/esm2022/lib/field-controls/index.mjs +0 -8
- package/esm2022/lib/field-controls/module.mjs +0 -143
- package/esm2022/lib/field-controls/operand-advanced-field-group.component.mjs +0 -80
- package/esm2022/lib/field-controls/operand-array-field-group.component.mjs +0 -112
- package/esm2022/lib/field-controls/operand-field-group.component.mjs +0 -88
- package/esm2022/lib/field-controls/operand-field.component.mjs +0 -877
- package/esm2022/lib/field-controls/widgets/array-table/component.mjs +0 -109
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/component.mjs +0 -116
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/create/component.mjs +0 -211
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/type.mjs +0 -2
- package/esm2022/lib/field-controls/widgets/index.mjs +0 -8
- package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/component.mjs +0 -169
- package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/util.mjs +0 -40
- package/esm2022/lib/field-controls/widgets/link/component.mjs +0 -68
- package/esm2022/lib/field-controls/widgets/resource-requirements/resource-requirements.component.mjs +0 -521
- package/esm2022/lib/field-controls/widgets/utils.mjs +0 -73
- package/esm2022/lib/field-controls/widgets/yaml-editor/yaml-editor.component.mjs +0 -94
- package/esm2022/lib/field-widgets/htpasswd/component.mjs +0 -40
- package/esm2022/lib/field-widgets/htpasswd/form.mjs +0 -240
- package/esm2022/lib/field-widgets/htpasswd/index.mjs +0 -4
- package/esm2022/lib/field-widgets/htpasswd/module.mjs +0 -54
- package/esm2022/lib/field-widgets/htpasswd/utils.mjs +0 -38
- package/esm2022/lib/field-widgets/index.mjs +0 -2
- package/esm2022/lib/remote-widgets/constants.mjs +0 -4
- package/esm2022/lib/remote-widgets/index.mjs +0 -4
- package/esm2022/lib/remote-widgets/remote-widget.service.mjs +0 -42
- package/esm2022/lib/remote-widgets/token.mjs +0 -7
- package/esm2022/lib/spec-descriptors/capability/capability.component.mjs +0 -139
- package/esm2022/lib/spec-descriptors/capability-list/capability-list.component.mjs +0 -189
- package/esm2022/lib/spec-descriptors/index.mjs +0 -4
- package/esm2022/lib/spec-descriptors/util.mjs +0 -13
- package/esm2022/lib/types/index.mjs +0 -89
- package/esm2022/lib/utils/capability.mjs +0 -306
- package/esm2022/lib/utils/constant.mjs +0 -22
- package/esm2022/lib/utils/helper.mjs +0 -196
- package/esm2022/lib/utils/index.mjs +0 -6
- package/esm2022/lib/utils/service-model.mjs +0 -12
- package/esm2022/lib/utils/util.mjs +0 -307
- package/esm2022/public-api.mjs +0 -13
- package/index.d.ts +0 -5
- package/lib/abstract/base-array.d.ts +0 -31
- package/lib/crd-form/component.d.ts +0 -58
- package/lib/crd-form/helper.d.ts +0 -7
- package/lib/crd-form.module.d.ts +0 -15
- package/lib/field-controls/expressions/expression-core.d.ts +0 -6
- package/lib/field-controls/expressions/props-expression.d.ts +0 -36
- package/lib/field-controls/form-item.component.d.ts +0 -19
- package/lib/field-controls/index.d.ts +0 -7
- package/lib/field-controls/module.d.ts +0 -23
- package/lib/field-controls/operand-advanced-field-group.component.d.ts +0 -16
- package/lib/field-controls/operand-array-field-group.component.d.ts +0 -8
- package/lib/field-controls/operand-field-group.component.d.ts +0 -21
- package/lib/field-controls/operand-field.component.d.ts +0 -109
- package/lib/field-controls/widgets/array-table/component.d.ts +0 -8
- package/lib/field-controls/widgets/basic-auth-secret/component.d.ts +0 -26
- package/lib/field-controls/widgets/basic-auth-secret/create/component.d.ts +0 -45
- package/lib/field-controls/widgets/basic-auth-secret/type.d.ts +0 -11
- package/lib/field-controls/widgets/index.d.ts +0 -7
- package/lib/field-controls/widgets/k8s-resource-prefix/component.d.ts +0 -35
- package/lib/field-controls/widgets/k8s-resource-prefix/util.d.ts +0 -3
- package/lib/field-controls/widgets/link/component.d.ts +0 -20
- package/lib/field-controls/widgets/resource-requirements/resource-requirements.component.d.ts +0 -85
- package/lib/field-controls/widgets/utils.d.ts +0 -17
- package/lib/field-controls/widgets/yaml-editor/yaml-editor.component.d.ts +0 -36
- package/lib/field-widgets/htpasswd/component.d.ts +0 -9
- package/lib/field-widgets/htpasswd/form.d.ts +0 -34
- package/lib/field-widgets/htpasswd/index.d.ts +0 -3
- package/lib/field-widgets/htpasswd/module.d.ts +0 -13
- package/lib/field-widgets/htpasswd/utils.d.ts +0 -15
- package/lib/field-widgets/index.d.ts +0 -1
- package/lib/remote-widgets/constants.d.ts +0 -3
- package/lib/remote-widgets/index.d.ts +0 -3
- package/lib/remote-widgets/remote-widget.service.d.ts +0 -28
- package/lib/remote-widgets/token.d.ts +0 -3
- package/lib/spec-descriptors/capability/capability.component.d.ts +0 -20
- package/lib/spec-descriptors/capability-list/capability-list.component.d.ts +0 -34
- package/lib/spec-descriptors/index.d.ts +0 -3
- package/lib/spec-descriptors/util.d.ts +0 -4
- package/lib/types/index.d.ts +0 -136
- package/lib/utils/capability.d.ts +0 -62
- package/lib/utils/constant.d.ts +0 -12
- package/lib/utils/helper.d.ts +0 -58
- package/lib/utils/index.d.ts +0 -5
- package/lib/utils/service-model.d.ts +0 -44
- package/lib/utils/util.d.ts +0 -44
- package/public-api.d.ts +0 -9
package/esm2022/lib/field-controls/widgets/resource-requirements/resource-requirements.component.mjs
DELETED
|
@@ -1,521 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { bind, formatCPU, formatMemory, getResourceValue, getResourceViewModel, initGreaterValidator, RESOURCE_MAC_TYPES, resourceUnits, transferResource, TranslateService, } from '@alauda-fe/common';
|
|
3
|
-
import { ChangeDetectionStrategy, Component, Injector, Input, Optional, } from '@angular/core';
|
|
4
|
-
import { ControlContainer, } from '@angular/forms';
|
|
5
|
-
import { merge, omit, isEmpty } from 'lodash-es';
|
|
6
|
-
import { BaseResourceFormGroupComponent } from 'ng-resource-form-util';
|
|
7
|
-
import { OperandFieldComponent } from '../../operand-field.component';
|
|
8
|
-
import { resolveRequirementsRequiredOptions, resolveRequirementsMinOrMaxOptions, } from '../utils';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "../../operand-field.component";
|
|
11
|
-
import * as i2 from "@angular/forms";
|
|
12
|
-
import * as i3 from "@alauda-fe/common";
|
|
13
|
-
import * as i4 from "@angular/common";
|
|
14
|
-
import * as i5 from "@alauda/ui";
|
|
15
|
-
const _c0 = a0 => ({ "tw-required-mark": a0 });
|
|
16
|
-
const _c1 = (a0, a1, a2) => [a0, a1, "min", "cpu", a2];
|
|
17
|
-
const _c2 = (a0, a1, a2) => [a0, a1, "max", "cpu", a2];
|
|
18
|
-
const _c3 = (a0, a1) => ({ min: a0, max: a1 });
|
|
19
|
-
const _c4 = (a0, a1, a2) => [a0, a1, "min", "memory", a2];
|
|
20
|
-
const _c5 = (a0, a1, a2) => [a0, a1, "max", "memory", a2];
|
|
21
|
-
const _c6 = (a0, a1, a2) => ({ cpu_max: a0, min: a1, max: a2 });
|
|
22
|
-
const _c7 = (a0, a1, a2) => ({ memory_max: a0, min: a1, max: a2 });
|
|
23
|
-
function ResourceRequirementsComponent_form_0_aui_option_13_Template(rf, ctx) { if (rf & 1) {
|
|
24
|
-
i0.ɵɵelementStart(0, "aui-option", 17);
|
|
25
|
-
i0.ɵɵpipe(1, "translate");
|
|
26
|
-
i0.ɵɵtext(2);
|
|
27
|
-
i0.ɵɵpipe(3, "translate");
|
|
28
|
-
i0.ɵɵelementEnd();
|
|
29
|
-
} if (rf & 2) {
|
|
30
|
-
const unit_r1 = ctx.$implicit;
|
|
31
|
-
i0.ɵɵproperty("value", unit_r1.value)("label", i0.ɵɵpipeBind1(1, 3, unit_r1.label));
|
|
32
|
-
i0.ɵɵadvance(2);
|
|
33
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 5, unit_r1.label), " ");
|
|
34
|
-
} }
|
|
35
|
-
function ResourceRequirementsComponent_form_0_acl_errors_mapper_14_Template(rf, ctx) { if (rf & 1) {
|
|
36
|
-
i0.ɵɵelement(0, "acl-errors-mapper", 18);
|
|
37
|
-
i0.ɵɵpipe(1, "pure");
|
|
38
|
-
i0.ɵɵpipe(2, "pure");
|
|
39
|
-
} if (rf & 2) {
|
|
40
|
-
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
41
|
-
i0.ɵɵproperty("errors", ctx_r1.form.get("requests.cpu.value").errors)("errorsMapper", i0.ɵɵpureFunction2(22, _c3, i0.ɵɵpipeBindV(1, 2, i0.ɵɵpureFunction3(14, _c1, ctx_r1.requestCpuMin, ctx_r1.getMinOrMaxErrorsMapper, ctx_r1.translate.locale)), i0.ɵɵpipeBindV(2, 8, i0.ɵɵpureFunction3(18, _c2, ctx_r1.requestCpuMax, ctx_r1.getMinOrMaxErrorsMapper, ctx_r1.translate.locale))));
|
|
42
|
-
} }
|
|
43
|
-
function ResourceRequirementsComponent_form_0_aui_option_23_Template(rf, ctx) { if (rf & 1) {
|
|
44
|
-
i0.ɵɵelementStart(0, "aui-option", 19);
|
|
45
|
-
i0.ɵɵtext(1);
|
|
46
|
-
i0.ɵɵelementEnd();
|
|
47
|
-
} if (rf & 2) {
|
|
48
|
-
const unit_r3 = ctx.$implicit;
|
|
49
|
-
i0.ɵɵproperty("value", unit_r3);
|
|
50
|
-
i0.ɵɵadvance();
|
|
51
|
-
i0.ɵɵtextInterpolate1(" ", unit_r3, " ");
|
|
52
|
-
} }
|
|
53
|
-
function ResourceRequirementsComponent_form_0_acl_errors_mapper_24_Template(rf, ctx) { if (rf & 1) {
|
|
54
|
-
i0.ɵɵelement(0, "acl-errors-mapper", 18);
|
|
55
|
-
i0.ɵɵpipe(1, "pure");
|
|
56
|
-
i0.ɵɵpipe(2, "pure");
|
|
57
|
-
} if (rf & 2) {
|
|
58
|
-
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
59
|
-
i0.ɵɵproperty("errors", ctx_r1.form.get("requests.memory.value").errors)("errorsMapper", i0.ɵɵpureFunction2(22, _c3, i0.ɵɵpipeBindV(1, 2, i0.ɵɵpureFunction3(14, _c4, ctx_r1.requestMemoryMin, ctx_r1.getMinOrMaxErrorsMapper, ctx_r1.translate.locale)), i0.ɵɵpipeBindV(2, 8, i0.ɵɵpureFunction3(18, _c5, ctx_r1.requestMemoryMax, ctx_r1.getMinOrMaxErrorsMapper, ctx_r1.translate.locale))));
|
|
60
|
-
} }
|
|
61
|
-
function ResourceRequirementsComponent_form_0_aui_option_37_Template(rf, ctx) { if (rf & 1) {
|
|
62
|
-
i0.ɵɵelementStart(0, "aui-option", 17);
|
|
63
|
-
i0.ɵɵpipe(1, "translate");
|
|
64
|
-
i0.ɵɵtext(2);
|
|
65
|
-
i0.ɵɵpipe(3, "translate");
|
|
66
|
-
i0.ɵɵelementEnd();
|
|
67
|
-
} if (rf & 2) {
|
|
68
|
-
const unit_r4 = ctx.$implicit;
|
|
69
|
-
i0.ɵɵproperty("value", unit_r4.value)("label", i0.ɵɵpipeBind1(1, 3, unit_r4.label));
|
|
70
|
-
i0.ɵɵadvance(2);
|
|
71
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 5, unit_r4.label), " ");
|
|
72
|
-
} }
|
|
73
|
-
function ResourceRequirementsComponent_form_0_acl_errors_mapper_38_Template(rf, ctx) { if (rf & 1) {
|
|
74
|
-
i0.ɵɵelement(0, "acl-errors-mapper", 18);
|
|
75
|
-
i0.ɵɵpipe(1, "translate");
|
|
76
|
-
i0.ɵɵpipe(2, "pure");
|
|
77
|
-
i0.ɵɵpipe(3, "pure");
|
|
78
|
-
} if (rf & 2) {
|
|
79
|
-
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
80
|
-
i0.ɵɵproperty("errors", ctx_r1.form.get("limits.cpu.value").errors)("errorsMapper", i0.ɵɵpureFunction3(24, _c6, i0.ɵɵpipeBind1(1, 2, "request_greater_than_limits_error"), i0.ɵɵpipeBindV(2, 4, i0.ɵɵpureFunction3(16, _c1, ctx_r1.limitCpuMin, ctx_r1.getMinOrMaxErrorsMapper, ctx_r1.translate.locale)), i0.ɵɵpipeBindV(3, 10, i0.ɵɵpureFunction3(20, _c2, ctx_r1.limitCpuMax, ctx_r1.getMinOrMaxErrorsMapper, ctx_r1.translate.locale))));
|
|
81
|
-
} }
|
|
82
|
-
function ResourceRequirementsComponent_form_0_aui_option_47_Template(rf, ctx) { if (rf & 1) {
|
|
83
|
-
i0.ɵɵelementStart(0, "aui-option", 19);
|
|
84
|
-
i0.ɵɵtext(1);
|
|
85
|
-
i0.ɵɵelementEnd();
|
|
86
|
-
} if (rf & 2) {
|
|
87
|
-
const unit_r5 = ctx.$implicit;
|
|
88
|
-
i0.ɵɵproperty("value", unit_r5);
|
|
89
|
-
i0.ɵɵadvance();
|
|
90
|
-
i0.ɵɵtextInterpolate1(" ", unit_r5, " ");
|
|
91
|
-
} }
|
|
92
|
-
function ResourceRequirementsComponent_form_0_acl_errors_mapper_48_Template(rf, ctx) { if (rf & 1) {
|
|
93
|
-
i0.ɵɵelement(0, "acl-errors-mapper", 18);
|
|
94
|
-
i0.ɵɵpipe(1, "translate");
|
|
95
|
-
i0.ɵɵpipe(2, "pure");
|
|
96
|
-
i0.ɵɵpipe(3, "pure");
|
|
97
|
-
} if (rf & 2) {
|
|
98
|
-
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
99
|
-
i0.ɵɵproperty("errors", ctx_r1.form.get("limits.memory.value").errors)("errorsMapper", i0.ɵɵpureFunction3(24, _c7, i0.ɵɵpipeBind1(1, 2, "request_greater_than_limits_error"), i0.ɵɵpipeBindV(2, 4, i0.ɵɵpureFunction3(16, _c4, ctx_r1.limitMemoryMin, ctx_r1.getMinOrMaxErrorsMapper, ctx_r1.translate.locale)), i0.ɵɵpipeBindV(3, 10, i0.ɵɵpureFunction3(20, _c5, ctx_r1.limitMemoryMax, ctx_r1.getMinOrMaxErrorsMapper, ctx_r1.translate.locale))));
|
|
100
|
-
} }
|
|
101
|
-
function ResourceRequirementsComponent_form_0_Template(rf, ctx) { if (rf & 1) {
|
|
102
|
-
i0.ɵɵelementStart(0, "form", 2)(1, "div", 3)(2, "div", 4);
|
|
103
|
-
i0.ɵɵtext(3);
|
|
104
|
-
i0.ɵɵpipe(4, "translate");
|
|
105
|
-
i0.ɵɵelementEnd();
|
|
106
|
-
i0.ɵɵelementStart(5, "div", 5)(6, "div", 6)(7, "div", 7)(8, "aui-input-group")(9, "div", 8);
|
|
107
|
-
i0.ɵɵtext(10, " CPU ");
|
|
108
|
-
i0.ɵɵelementEnd();
|
|
109
|
-
i0.ɵɵelement(11, "input", 9);
|
|
110
|
-
i0.ɵɵelementStart(12, "aui-select", 10);
|
|
111
|
-
i0.ɵɵtemplate(13, ResourceRequirementsComponent_form_0_aui_option_13_Template, 4, 7, "aui-option", 11);
|
|
112
|
-
i0.ɵɵelementEnd()()();
|
|
113
|
-
i0.ɵɵtemplate(14, ResourceRequirementsComponent_form_0_acl_errors_mapper_14_Template, 3, 25, "acl-errors-mapper", 12);
|
|
114
|
-
i0.ɵɵelementEnd();
|
|
115
|
-
i0.ɵɵelementStart(15, "div", 6)(16, "div", 13)(17, "aui-input-group")(18, "div", 8);
|
|
116
|
-
i0.ɵɵtext(19);
|
|
117
|
-
i0.ɵɵpipe(20, "translate");
|
|
118
|
-
i0.ɵɵelementEnd();
|
|
119
|
-
i0.ɵɵelement(21, "input", 9);
|
|
120
|
-
i0.ɵɵelementStart(22, "aui-select", 10);
|
|
121
|
-
i0.ɵɵtemplate(23, ResourceRequirementsComponent_form_0_aui_option_23_Template, 2, 2, "aui-option", 14);
|
|
122
|
-
i0.ɵɵelementEnd()()();
|
|
123
|
-
i0.ɵɵtemplate(24, ResourceRequirementsComponent_form_0_acl_errors_mapper_24_Template, 3, 25, "acl-errors-mapper", 12);
|
|
124
|
-
i0.ɵɵelementEnd()()();
|
|
125
|
-
i0.ɵɵelementStart(25, "div", 3)(26, "div", 4);
|
|
126
|
-
i0.ɵɵtext(27);
|
|
127
|
-
i0.ɵɵpipe(28, "translate");
|
|
128
|
-
i0.ɵɵelementEnd();
|
|
129
|
-
i0.ɵɵelementStart(29, "div", 15)(30, "div", 6)(31, "div", 16)(32, "aui-input-group")(33, "div", 8);
|
|
130
|
-
i0.ɵɵtext(34, " CPU ");
|
|
131
|
-
i0.ɵɵelementEnd();
|
|
132
|
-
i0.ɵɵelement(35, "input", 9);
|
|
133
|
-
i0.ɵɵelementStart(36, "aui-select", 10);
|
|
134
|
-
i0.ɵɵtemplate(37, ResourceRequirementsComponent_form_0_aui_option_37_Template, 4, 7, "aui-option", 11);
|
|
135
|
-
i0.ɵɵelementEnd()()();
|
|
136
|
-
i0.ɵɵtemplate(38, ResourceRequirementsComponent_form_0_acl_errors_mapper_38_Template, 4, 28, "acl-errors-mapper", 12);
|
|
137
|
-
i0.ɵɵelementEnd();
|
|
138
|
-
i0.ɵɵelementStart(39, "div", 6)(40, "div", 13)(41, "aui-input-group")(42, "div", 8);
|
|
139
|
-
i0.ɵɵtext(43);
|
|
140
|
-
i0.ɵɵpipe(44, "translate");
|
|
141
|
-
i0.ɵɵelementEnd();
|
|
142
|
-
i0.ɵɵelement(45, "input", 9);
|
|
143
|
-
i0.ɵɵelementStart(46, "aui-select", 10);
|
|
144
|
-
i0.ɵɵtemplate(47, ResourceRequirementsComponent_form_0_aui_option_47_Template, 2, 2, "aui-option", 14);
|
|
145
|
-
i0.ɵɵelementEnd()()();
|
|
146
|
-
i0.ɵɵtemplate(48, ResourceRequirementsComponent_form_0_acl_errors_mapper_48_Template, 4, 28, "acl-errors-mapper", 12);
|
|
147
|
-
i0.ɵɵelementEnd()()()();
|
|
148
|
-
} if (rf & 2) {
|
|
149
|
-
let tmp_7_0;
|
|
150
|
-
let tmp_13_0;
|
|
151
|
-
let tmp_19_0;
|
|
152
|
-
let tmp_25_0;
|
|
153
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
154
|
-
i0.ɵɵproperty("formGroup", ctx_r1.form);
|
|
155
|
-
i0.ɵɵadvance(3);
|
|
156
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 24, "resource_requirements_requests"), " ");
|
|
157
|
-
i0.ɵɵadvance(6);
|
|
158
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(32, _c0, ctx_r1.requestCpuRequired));
|
|
159
|
-
i0.ɵɵadvance(2);
|
|
160
|
-
i0.ɵɵproperty("required", ctx_r1.requestCpuRequired);
|
|
161
|
-
i0.ɵɵadvance(2);
|
|
162
|
-
i0.ɵɵproperty("ngForOf", ctx_r1.resourceUnits["cpu"]);
|
|
163
|
-
i0.ɵɵadvance();
|
|
164
|
-
i0.ɵɵproperty("ngIf", ((tmp_7_0 = ctx_r1.form.get("requests.cpu.value")) == null ? null : tmp_7_0.dirty) || (ctx_r1.controlContainer == null ? null : ctx_r1.controlContainer.formDirective == null ? null : ctx_r1.controlContainer.formDirective.submitted));
|
|
165
|
-
i0.ɵɵadvance(2);
|
|
166
|
-
i0.ɵɵproperty("formGroupName", "memory");
|
|
167
|
-
i0.ɵɵadvance(2);
|
|
168
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(34, _c0, ctx_r1.requestMemoryRequired));
|
|
169
|
-
i0.ɵɵadvance();
|
|
170
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(20, 26, "memory"), " ");
|
|
171
|
-
i0.ɵɵadvance(2);
|
|
172
|
-
i0.ɵɵproperty("required", ctx_r1.requestMemoryRequired);
|
|
173
|
-
i0.ɵɵadvance(2);
|
|
174
|
-
i0.ɵɵproperty("ngForOf", ctx_r1.resourceUnits["memory"]);
|
|
175
|
-
i0.ɵɵadvance();
|
|
176
|
-
i0.ɵɵproperty("ngIf", ((tmp_13_0 = ctx_r1.form.get("requests.memory.value")) == null ? null : tmp_13_0.dirty) || (ctx_r1.controlContainer == null ? null : ctx_r1.controlContainer.formDirective == null ? null : ctx_r1.controlContainer.formDirective.submitted));
|
|
177
|
-
i0.ɵɵadvance(3);
|
|
178
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(28, 28, "resource_requirements_limits"), " ");
|
|
179
|
-
i0.ɵɵadvance(4);
|
|
180
|
-
i0.ɵɵproperty("formGroupName", "cpu");
|
|
181
|
-
i0.ɵɵadvance(2);
|
|
182
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(36, _c0, ctx_r1.limitCpuRequired));
|
|
183
|
-
i0.ɵɵadvance(2);
|
|
184
|
-
i0.ɵɵproperty("required", ctx_r1.limitCpuRequired);
|
|
185
|
-
i0.ɵɵadvance(2);
|
|
186
|
-
i0.ɵɵproperty("ngForOf", ctx_r1.resourceUnits["cpu"]);
|
|
187
|
-
i0.ɵɵadvance();
|
|
188
|
-
i0.ɵɵproperty("ngIf", ((tmp_19_0 = ctx_r1.form.get("limits.cpu.value")) == null ? null : tmp_19_0.dirty) || (ctx_r1.controlContainer == null ? null : ctx_r1.controlContainer.formDirective == null ? null : ctx_r1.controlContainer.formDirective.submitted));
|
|
189
|
-
i0.ɵɵadvance(2);
|
|
190
|
-
i0.ɵɵproperty("formGroupName", "memory");
|
|
191
|
-
i0.ɵɵadvance(2);
|
|
192
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(38, _c0, ctx_r1.limitMemoryRequired));
|
|
193
|
-
i0.ɵɵadvance();
|
|
194
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(44, 30, "memory"), " ");
|
|
195
|
-
i0.ɵɵadvance(2);
|
|
196
|
-
i0.ɵɵproperty("required", ctx_r1.limitMemoryRequired);
|
|
197
|
-
i0.ɵɵadvance(2);
|
|
198
|
-
i0.ɵɵproperty("ngForOf", ctx_r1.resourceUnits["memory"]);
|
|
199
|
-
i0.ɵɵadvance();
|
|
200
|
-
i0.ɵɵproperty("ngIf", ((tmp_25_0 = ctx_r1.form.get("limits.memory.value")) == null ? null : tmp_25_0.dirty) || (ctx_r1.controlContainer == null ? null : ctx_r1.controlContainer.formDirective == null ? null : ctx_r1.controlContainer.formDirective.submitted));
|
|
201
|
-
} }
|
|
202
|
-
function ResourceRequirementsComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
203
|
-
i0.ɵɵelementStart(0, "div", 20)(1, "div", 21)(2, "label", 22);
|
|
204
|
-
i0.ɵɵtext(3);
|
|
205
|
-
i0.ɵɵpipe(4, "translate");
|
|
206
|
-
i0.ɵɵelementEnd();
|
|
207
|
-
i0.ɵɵelement(5, "aui-icon", 23);
|
|
208
|
-
i0.ɵɵpipe(6, "translate");
|
|
209
|
-
i0.ɵɵelementStart(7, "span", 24);
|
|
210
|
-
i0.ɵɵtext(8);
|
|
211
|
-
i0.ɵɵpipe(9, "pure");
|
|
212
|
-
i0.ɵɵpipe(10, "aclFieldNotAvailable");
|
|
213
|
-
i0.ɵɵpipe(11, "pure");
|
|
214
|
-
i0.ɵɵpipe(12, "translate");
|
|
215
|
-
i0.ɵɵelementEnd();
|
|
216
|
-
i0.ɵɵelement(13, "aui-icon", 25);
|
|
217
|
-
i0.ɵɵpipe(14, "translate");
|
|
218
|
-
i0.ɵɵtext(15);
|
|
219
|
-
i0.ɵɵpipe(16, "pure");
|
|
220
|
-
i0.ɵɵpipe(17, "aclFieldNotAvailable");
|
|
221
|
-
i0.ɵɵelementEnd();
|
|
222
|
-
i0.ɵɵelementStart(18, "div", 21)(19, "label", 22);
|
|
223
|
-
i0.ɵɵtext(20);
|
|
224
|
-
i0.ɵɵpipe(21, "translate");
|
|
225
|
-
i0.ɵɵelementEnd();
|
|
226
|
-
i0.ɵɵelement(22, "aui-icon", 23);
|
|
227
|
-
i0.ɵɵpipe(23, "translate");
|
|
228
|
-
i0.ɵɵelementStart(24, "span", 24);
|
|
229
|
-
i0.ɵɵtext(25);
|
|
230
|
-
i0.ɵɵpipe(26, "pure");
|
|
231
|
-
i0.ɵɵpipe(27, "aclFieldNotAvailable");
|
|
232
|
-
i0.ɵɵpipe(28, "pure");
|
|
233
|
-
i0.ɵɵpipe(29, "translate");
|
|
234
|
-
i0.ɵɵelementEnd();
|
|
235
|
-
i0.ɵɵelement(30, "aui-icon", 25);
|
|
236
|
-
i0.ɵɵpipe(31, "translate");
|
|
237
|
-
i0.ɵɵtext(32);
|
|
238
|
-
i0.ɵɵpipe(33, "pure");
|
|
239
|
-
i0.ɵɵpipe(34, "aclFieldNotAvailable");
|
|
240
|
-
i0.ɵɵelementEnd()();
|
|
241
|
-
} if (rf & 2) {
|
|
242
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
243
|
-
i0.ɵɵadvance(3);
|
|
244
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 12, "resource_requirements_requests"));
|
|
245
|
-
i0.ɵɵadvance(2);
|
|
246
|
-
i0.ɵɵproperty("title", i0.ɵɵpipeBind1(6, 14, "cpu"));
|
|
247
|
-
i0.ɵɵadvance(3);
|
|
248
|
-
i0.ɵɵtextInterpolate2("", i0.ɵɵpipeBind1(10, 19, i0.ɵɵpipeBind2(9, 16, ctx_r1.form.get("requests").get("cpu").value, ctx_r1.getResourceValue)), "", i0.ɵɵpipeBind1(12, 24, i0.ɵɵpipeBind2(11, 21, ctx_r1.form.get("requests").get("cpu.unit").value, ctx_r1.getCpuUnitLabel)), " ");
|
|
249
|
-
i0.ɵɵadvance(5);
|
|
250
|
-
i0.ɵɵproperty("title", i0.ɵɵpipeBind1(14, 26, "memory"));
|
|
251
|
-
i0.ɵɵadvance(2);
|
|
252
|
-
i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(17, 31, i0.ɵɵpipeBind2(16, 28, ctx_r1.form.get("requests").get("memory").value, ctx_r1.getResourceValue)), " ");
|
|
253
|
-
i0.ɵɵadvance(5);
|
|
254
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(21, 33, "resource_requirements_limits"));
|
|
255
|
-
i0.ɵɵadvance(2);
|
|
256
|
-
i0.ɵɵproperty("title", i0.ɵɵpipeBind1(23, 35, "cpu"));
|
|
257
|
-
i0.ɵɵadvance(3);
|
|
258
|
-
i0.ɵɵtextInterpolate2("", i0.ɵɵpipeBind1(27, 40, i0.ɵɵpipeBind2(26, 37, ctx_r1.form.get("limits").get("cpu").value, ctx_r1.getResourceValue)), "", i0.ɵɵpipeBind1(29, 45, i0.ɵɵpipeBind2(28, 42, ctx_r1.form.get("limits").get("cpu.unit").value, ctx_r1.getCpuUnitLabel)), " ");
|
|
259
|
-
i0.ɵɵadvance(5);
|
|
260
|
-
i0.ɵɵproperty("title", i0.ɵɵpipeBind1(31, 47, "memory"));
|
|
261
|
-
i0.ɵɵadvance(2);
|
|
262
|
-
i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(34, 52, i0.ɵɵpipeBind2(33, 49, ctx_r1.form.get("limits").get("memory").value, ctx_r1.getResourceValue)), " ");
|
|
263
|
-
} }
|
|
264
|
-
function handleValidationErrors(valueCtrl, errors) {
|
|
265
|
-
// 这里避免覆盖其它 errors
|
|
266
|
-
const combinedErrors = { ...valueCtrl.errors, ...errors };
|
|
267
|
-
valueCtrl.setErrors(combinedErrors);
|
|
268
|
-
return combinedErrors;
|
|
269
|
-
}
|
|
270
|
-
function valueFormat(type, value) {
|
|
271
|
-
return type === 'cpu' ? formatCPU(value) : formatMemory(value);
|
|
272
|
-
}
|
|
273
|
-
function getCurrentValue(group, type) {
|
|
274
|
-
const valueCtrl = group.get('value');
|
|
275
|
-
const value = valueCtrl.value;
|
|
276
|
-
const unit = group.get('unit').value;
|
|
277
|
-
return valueFormat(type, (value || 0) + unit);
|
|
278
|
-
}
|
|
279
|
-
export class ResourceRequirementsComponent extends BaseResourceFormGroupComponent {
|
|
280
|
-
get requiredOptions() {
|
|
281
|
-
return resolveRequirementsRequiredOptions(this.fieldComponent?.field);
|
|
282
|
-
}
|
|
283
|
-
get limitMemoryRequired() {
|
|
284
|
-
return this.requiredOptions.required?.limit?.includes('memory');
|
|
285
|
-
}
|
|
286
|
-
get limitCpuRequired() {
|
|
287
|
-
return this.requiredOptions.required?.limit?.includes('cpu');
|
|
288
|
-
}
|
|
289
|
-
get requestMemoryRequired() {
|
|
290
|
-
return this.requiredOptions.required?.request?.includes('memory');
|
|
291
|
-
}
|
|
292
|
-
get requestCpuRequired() {
|
|
293
|
-
return this.requiredOptions.required?.request?.includes('cpu');
|
|
294
|
-
}
|
|
295
|
-
get minMaxOptions() {
|
|
296
|
-
return resolveRequirementsMinOrMaxOptions(this.fieldComponent?.field);
|
|
297
|
-
}
|
|
298
|
-
get limitMemoryMin() {
|
|
299
|
-
return this.minMaxOptions.min.limits?.memory;
|
|
300
|
-
}
|
|
301
|
-
get limitCpuMin() {
|
|
302
|
-
return this.minMaxOptions.min.limits?.cpu;
|
|
303
|
-
}
|
|
304
|
-
get requestMemoryMin() {
|
|
305
|
-
return this.minMaxOptions.min.requests?.memory;
|
|
306
|
-
}
|
|
307
|
-
get requestCpuMin() {
|
|
308
|
-
return this.minMaxOptions.min.requests?.cpu;
|
|
309
|
-
}
|
|
310
|
-
get limitMemoryMax() {
|
|
311
|
-
return this.minMaxOptions.max.limits?.memory;
|
|
312
|
-
}
|
|
313
|
-
get limitCpuMax() {
|
|
314
|
-
return this.minMaxOptions.max.limits?.cpu;
|
|
315
|
-
}
|
|
316
|
-
get requestMemoryMax() {
|
|
317
|
-
return this.minMaxOptions.max.requests?.memory;
|
|
318
|
-
}
|
|
319
|
-
get requestCpuMax() {
|
|
320
|
-
return this.minMaxOptions.max.requests?.cpu;
|
|
321
|
-
}
|
|
322
|
-
constructor(injector, fieldComponent, controlContainer, translate) {
|
|
323
|
-
super(injector);
|
|
324
|
-
this.fieldComponent = fieldComponent;
|
|
325
|
-
this.controlContainer = controlContainer;
|
|
326
|
-
this.translate = translate;
|
|
327
|
-
this.resourceUnits = resourceUnits;
|
|
328
|
-
this.getResourceValue = getResourceValue;
|
|
329
|
-
this.getResourceViewModel = getResourceViewModel;
|
|
330
|
-
}
|
|
331
|
-
ngOnInit() {
|
|
332
|
-
super.ngOnInit();
|
|
333
|
-
const greaterValidatorSubscriptions = [
|
|
334
|
-
initGreaterValidator('cpu', this.form),
|
|
335
|
-
initGreaterValidator('memory', this.form),
|
|
336
|
-
];
|
|
337
|
-
this.destroy$.subscribe(() => {
|
|
338
|
-
greaterValidatorSubscriptions.forEach(sub => sub.unsubscribe());
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
createForm() {
|
|
342
|
-
return this.fb.group({
|
|
343
|
-
limits: this.fb.group({
|
|
344
|
-
cpu: this.fb.group({
|
|
345
|
-
value: '',
|
|
346
|
-
unit: 'c',
|
|
347
|
-
}, {
|
|
348
|
-
validators: [
|
|
349
|
-
this.minValidator(this.limitCpuMin, 'cpu'),
|
|
350
|
-
this.maxValidator(this.limitCpuMax, 'cpu'),
|
|
351
|
-
],
|
|
352
|
-
}),
|
|
353
|
-
memory: this.fb.group({
|
|
354
|
-
value: '',
|
|
355
|
-
unit: 'Mi',
|
|
356
|
-
}, {
|
|
357
|
-
validators: [
|
|
358
|
-
this.minValidator(this.limitMemoryMin, 'memory'),
|
|
359
|
-
this.maxValidator(this.limitMemoryMax, 'memory'),
|
|
360
|
-
],
|
|
361
|
-
}),
|
|
362
|
-
}),
|
|
363
|
-
requests: this.fb.group({
|
|
364
|
-
cpu: this.fb.group({
|
|
365
|
-
value: '',
|
|
366
|
-
unit: 'c',
|
|
367
|
-
}, {
|
|
368
|
-
validators: [
|
|
369
|
-
this.minValidator(this.requestCpuMin, 'cpu'),
|
|
370
|
-
this.maxValidator(this.requestCpuMax, 'cpu'),
|
|
371
|
-
],
|
|
372
|
-
}),
|
|
373
|
-
memory: this.fb.group({
|
|
374
|
-
value: '',
|
|
375
|
-
unit: 'Mi',
|
|
376
|
-
}, {
|
|
377
|
-
validators: [
|
|
378
|
-
this.minValidator(this.requestMemoryMin, 'memory'),
|
|
379
|
-
this.maxValidator(this.requestMemoryMax, 'memory'),
|
|
380
|
-
],
|
|
381
|
-
}),
|
|
382
|
-
}),
|
|
383
|
-
});
|
|
384
|
-
}
|
|
385
|
-
getDefaultFormModel() {
|
|
386
|
-
return {
|
|
387
|
-
limits: {
|
|
388
|
-
cpu: {
|
|
389
|
-
value: '',
|
|
390
|
-
unit: 'c',
|
|
391
|
-
},
|
|
392
|
-
memory: {
|
|
393
|
-
value: '',
|
|
394
|
-
unit: 'Mi',
|
|
395
|
-
},
|
|
396
|
-
},
|
|
397
|
-
requests: {
|
|
398
|
-
cpu: {
|
|
399
|
-
value: '',
|
|
400
|
-
unit: 'c',
|
|
401
|
-
},
|
|
402
|
-
memory: {
|
|
403
|
-
value: '',
|
|
404
|
-
unit: 'Mi',
|
|
405
|
-
},
|
|
406
|
-
},
|
|
407
|
-
};
|
|
408
|
-
}
|
|
409
|
-
adaptFormModel(formModel) {
|
|
410
|
-
this.formatFormModel(formModel);
|
|
411
|
-
return {
|
|
412
|
-
requests: transferResource(formModel.requests),
|
|
413
|
-
limits: transferResource(formModel.limits),
|
|
414
|
-
};
|
|
415
|
-
}
|
|
416
|
-
minValidator(min, type) {
|
|
417
|
-
return (group) => {
|
|
418
|
-
if (!min) {
|
|
419
|
-
return null;
|
|
420
|
-
}
|
|
421
|
-
const valueCtrl = group.get('value');
|
|
422
|
-
const currentValue = getCurrentValue(group, type);
|
|
423
|
-
const minThreshold = valueFormat(type, min);
|
|
424
|
-
if (currentValue < minThreshold) {
|
|
425
|
-
return handleValidationErrors(valueCtrl, { min: true });
|
|
426
|
-
}
|
|
427
|
-
const errors = omit(valueCtrl.errors, 'min');
|
|
428
|
-
valueCtrl.setErrors(isEmpty(errors) ? null : errors);
|
|
429
|
-
return null;
|
|
430
|
-
};
|
|
431
|
-
}
|
|
432
|
-
maxValidator(max, type) {
|
|
433
|
-
return (group) => {
|
|
434
|
-
if (!max) {
|
|
435
|
-
return null;
|
|
436
|
-
}
|
|
437
|
-
const valueCtrl = group.get('value');
|
|
438
|
-
const currentValue = getCurrentValue(group, type);
|
|
439
|
-
const maxThreshold = valueFormat(type, max);
|
|
440
|
-
if (currentValue > maxThreshold) {
|
|
441
|
-
return handleValidationErrors(valueCtrl, { max: true });
|
|
442
|
-
}
|
|
443
|
-
const errors = omit(valueCtrl.errors, 'max');
|
|
444
|
-
valueCtrl.setErrors(isEmpty(errors) ? null : errors);
|
|
445
|
-
return null;
|
|
446
|
-
};
|
|
447
|
-
}
|
|
448
|
-
formatFormModel(formModel) {
|
|
449
|
-
Object.values(formModel).forEach(modelValue => {
|
|
450
|
-
Object.values(modelValue).forEach(v => {
|
|
451
|
-
v.value = `${v.value}`;
|
|
452
|
-
});
|
|
453
|
-
});
|
|
454
|
-
}
|
|
455
|
-
getCpuUnitLabel(value) {
|
|
456
|
-
return value === 'm'
|
|
457
|
-
? ''
|
|
458
|
-
: resourceUnits.cpu.find(unit => unit.value === value).label;
|
|
459
|
-
}
|
|
460
|
-
adaptResourceModel(resources) {
|
|
461
|
-
const resourcesModel = {};
|
|
462
|
-
if (resources) {
|
|
463
|
-
Object.keys(resources).forEach(kind => {
|
|
464
|
-
const resourceKind = kind;
|
|
465
|
-
resourcesModel[resourceKind] = Object.keys(resources[resourceKind])
|
|
466
|
-
.filter(key => RESOURCE_MAC_TYPES.includes(key))
|
|
467
|
-
.reduce((item, type) => {
|
|
468
|
-
const resourceType = type;
|
|
469
|
-
item[resourceType] = getResourceViewModel(resources[resourceKind][resourceType], resourceType);
|
|
470
|
-
return item;
|
|
471
|
-
}, {});
|
|
472
|
-
});
|
|
473
|
-
}
|
|
474
|
-
return merge(this.getDefaultFormModel(), resourcesModel);
|
|
475
|
-
}
|
|
476
|
-
getMinOrMaxErrorsMapper(value, kind, type, _locale) {
|
|
477
|
-
const resourceCtrl = getResourceViewModel(value, type);
|
|
478
|
-
return this.translate.get(`warning_${kind}`, {
|
|
479
|
-
value: resourceCtrl.value + this.translate.get(resourceCtrl.unit),
|
|
480
|
-
});
|
|
481
|
-
}
|
|
482
|
-
static { this.ɵfac = function ResourceRequirementsComponent_Factory(t) { return new (t || ResourceRequirementsComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.OperandFieldComponent, 8), i0.ɵɵdirectiveInject(i2.ControlContainer, 8), i0.ɵɵdirectiveInject(i3.TranslateService)); }; }
|
|
483
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ResourceRequirementsComponent, selectors: [["acl-crd-resource-requirements"]], inputs: { readOnly: "readOnly", field: "field" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 2, consts: [["readOnlyTemplate", ""], [3, "formGroup", 4, "ngIf", "ngIfElse"], [3, "formGroup"], [1, "resource_requirements"], [1, "input-group-label"], ["formGroupName", "requests", 1, "input-group-wrapper", "tw-items-start"], [1, "tw-flex", "tw-flex-col", "tw-flex-1"], ["formGroupName", "cpu", 1, "input-groups-wrapper", "cpu"], ["auiInputAddonBefore", "", 1, "addon-label", 3, "ngClass"], ["aui-input", "", "type", "number", "auiFormItemControl", "", "formControlName", "value", 3, "required"], ["auiInputAddonAfter", "", "auiFormItemControl", "", "formControlName", "unit"], [3, "value", "label", 4, "ngFor", "ngForOf"], ["class", "tw-text-s tw-text-red", 3, "errors", "errorsMapper", 4, "ngIf"], [1, "input-groups-wrapper", "memory", 3, "formGroupName"], [3, "value", 4, "ngFor", "ngForOf"], ["formGroupName", "limits", 1, "input-group-wrapper", "tw-items-start"], [1, "input-groups-wrapper", "cpu", 3, "formGroupName"], [3, "value", "label"], [1, "tw-text-s", "tw-text-red", 3, "errors", "errorsMapper"], [3, "value"], [1, "resource_requirements-display"], [1, "resource_requirements-display-item"], [1, "resource_requirements-display-item__label"], ["icon", "prod:cpu", "size", "16px", "color", "#6359b4", "margin", "right", 3, "title"], [1, "tw-mr-16"], ["icon", "prod:memory", "size", "16px", "color", "#007cb5", "margin", "right", 3, "title"]], template: function ResourceRequirementsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
484
|
-
i0.ɵɵtemplate(0, ResourceRequirementsComponent_form_0_Template, 49, 40, "form", 1)(1, ResourceRequirementsComponent_ng_template_1_Template, 35, 54, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
485
|
-
} if (rf & 2) {
|
|
486
|
-
const readOnlyTemplate_r6 = i0.ɵɵreference(2);
|
|
487
|
-
i0.ɵɵproperty("ngIf", !ctx.readOnly)("ngIfElse", readOnlyTemplate_r6);
|
|
488
|
-
} }, dependencies: [i4.NgClass, i4.NgForOf, i4.NgIf, i2.ɵNgNoValidate, i2.DefaultValueAccessor, i2.NumberValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.RequiredValidator, i2.FormGroupDirective, i2.FormControlName, i2.FormGroupName, i5.FormItemControlDirective, i5.IconComponent, i5.InputComponent, i5.InputGroupComponent, i5.InputAddonBeforeDirective, i5.InputAddonAfterDirective, i5.SelectComponent, i5.OptionComponent, i3.ErrorsMapperComponent, i3.ValidatorsDirective, i3.TranslatePipe, i3.FieldNotAvailablePipe, i3.PurePipe], styles: ["[_nghost-%COMP%] .resource_requirements[_ngcontent-%COMP%]:not(:last-of-type){margin-bottom:8px}[_nghost-%COMP%] .input-group-wrapper[_ngcontent-%COMP%]{display:flex}[_nghost-%COMP%] .input-group-label[_ngcontent-%COMP%]{line-height:var(--aui-inline-height-m)}[_nghost-%COMP%] aui-input-group[_ngcontent-%COMP%]{flex:1}[_nghost-%COMP%] aui-input-group[_ngcontent-%COMP%] .aui-input-group__addon--after{padding:0}[_nghost-%COMP%] aui-input-group[_ngcontent-%COMP%] .aui-input-group__addon--after aui-select{width:60px}[_nghost-%COMP%] aui-input-group[_ngcontent-%COMP%] .aui-input-group__addon--after aui-select .aui-input-group{width:62px}html:not([lang|=zh]) [_nghost-%COMP%] aui-input-group[_ngcontent-%COMP%] .aui-input-group__addon--after aui-select{width:78px}html:not([lang|=zh]) [_nghost-%COMP%] aui-input-group[_ngcontent-%COMP%] .aui-input-group__addon--after aui-select .aui-input-group{width:80px}[_nghost-%COMP%] aui-input-group[_ngcontent-%COMP%] .aui-input-group__addon--after aui-select .aui-input{border:0;background-color:transparent!important;border-top-right-radius:var(--aui-border-radius-m);border-bottom-right-radius:var(--aui-border-radius-m)}[_nghost-%COMP%] .addon-label[_ngcontent-%COMP%]{white-space:nowrap}[_nghost-%COMP%] .input-groups-wrapper[_ngcontent-%COMP%]{display:flex;flex:1;align-items:center}[_nghost-%COMP%] .input-groups-wrapper[_ngcontent-%COMP%]:first-child{margin-right:8px}[_nghost-%COMP%] .resource_requirements-display-item[_ngcontent-%COMP%]{display:flex;font-size:14px;line-height:20px;color:rgb(var(--aui-color-main-text));align-items:center;margin-top:8px}[_nghost-%COMP%] .resource_requirements-display-item[_ngcontent-%COMP%]:first-child{margin-top:0}[_nghost-%COMP%] .resource_requirements-display-item__label[_ngcontent-%COMP%]{white-space:nowrap;margin-right:8px}[_nghost-%COMP%] .resource_requirements-display-item__value[_ngcontent-%COMP%]{min-width:0;flex:1;white-space:nowrap;display:flex}[_nghost-%COMP%] .resource_requirements-display-item__value__overflow[_ngcontent-%COMP%]{display:block;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .resource_requirements-display-item__value__wrap[_ngcontent-%COMP%]{white-space:pre-wrap;flex-wrap:wrap}[_nghost-%COMP%] .resource_requirements-display-item__label[_ngcontent-%COMP%], [_nghost-%COMP%] .resource_requirements-display-item__value[_ngcontent-%COMP%]{height:100%;align-items:flex-start}[_nghost-%COMP%] .aui-input-group__addon--before{width:70px}html:not([lang|=zh]) [_nghost-%COMP%] .memory .aui-input-group__addon--before{width:82px}"], changeDetection: 0 }); }
|
|
489
|
-
}
|
|
490
|
-
__decorate([
|
|
491
|
-
bind,
|
|
492
|
-
__metadata("design:type", Function),
|
|
493
|
-
__metadata("design:paramtypes", [String, String]),
|
|
494
|
-
__metadata("design:returntype", void 0)
|
|
495
|
-
], ResourceRequirementsComponent.prototype, "minValidator", null);
|
|
496
|
-
__decorate([
|
|
497
|
-
bind,
|
|
498
|
-
__metadata("design:type", Function),
|
|
499
|
-
__metadata("design:paramtypes", [String, String]),
|
|
500
|
-
__metadata("design:returntype", void 0)
|
|
501
|
-
], ResourceRequirementsComponent.prototype, "maxValidator", null);
|
|
502
|
-
__decorate([
|
|
503
|
-
bind,
|
|
504
|
-
__metadata("design:type", Function),
|
|
505
|
-
__metadata("design:paramtypes", [String, String, String, String]),
|
|
506
|
-
__metadata("design:returntype", void 0)
|
|
507
|
-
], ResourceRequirementsComponent.prototype, "getMinOrMaxErrorsMapper", null);
|
|
508
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ResourceRequirementsComponent, [{
|
|
509
|
-
type: Component,
|
|
510
|
-
args: [{ selector: 'acl-crd-resource-requirements', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n [formGroup]=\"form\"\n *ngIf=\"!readOnly; else readOnlyTemplate\"\n>\n <div class=\"resource_requirements\">\n <div class=\"input-group-label\">\n {{ 'resource_requirements_requests' | translate }}\n </div>\n <div\n class=\"input-group-wrapper tw-items-start\"\n formGroupName=\"requests\"\n >\n <div class=\"tw-flex tw-flex-col tw-flex-1\">\n <div\n class=\"input-groups-wrapper cpu\"\n formGroupName=\"cpu\"\n >\n <aui-input-group>\n <div\n auiInputAddonBefore\n class=\"addon-label\"\n [ngClass]=\"{\n 'tw-required-mark': requestCpuRequired,\n }\"\n >\n CPU\n </div>\n <input\n aui-input\n type=\"number\"\n [required]=\"requestCpuRequired\"\n auiFormItemControl\n formControlName=\"value\"\n />\n <aui-select\n auiInputAddonAfter\n auiFormItemControl\n formControlName=\"unit\"\n >\n <aui-option\n *ngFor=\"let unit of resourceUnits['cpu']\"\n [value]=\"unit.value\"\n [label]=\"unit.label | translate\"\n >\n {{ unit.label | translate }}\n </aui-option>\n </aui-select>\n </aui-input-group>\n </div>\n <acl-errors-mapper\n *ngIf=\"\n form.get('requests.cpu.value')?.dirty ||\n $any(controlContainer?.formDirective)?.submitted\n \"\n [errors]=\"form.get('requests.cpu.value').errors\"\n [errorsMapper]=\"{\n min:\n requestCpuMin\n | pure\n : getMinOrMaxErrorsMapper\n : 'min'\n : 'cpu'\n : translate.locale,\n max:\n requestCpuMax\n | pure\n : getMinOrMaxErrorsMapper\n : 'max'\n : 'cpu'\n : translate.locale,\n }\"\n class=\"tw-text-s tw-text-red\"\n >\n </acl-errors-mapper>\n </div>\n\n <div class=\"tw-flex tw-flex-col tw-flex-1\">\n <div\n class=\"input-groups-wrapper memory\"\n [formGroupName]=\"'memory'\"\n >\n <aui-input-group>\n <div\n auiInputAddonBefore\n class=\"addon-label\"\n [ngClass]=\"{\n 'tw-required-mark': requestMemoryRequired,\n }\"\n >\n {{ 'memory' | translate }}\n </div>\n <input\n aui-input\n type=\"number\"\n auiFormItemControl\n formControlName=\"value\"\n [required]=\"requestMemoryRequired\"\n />\n <aui-select\n auiInputAddonAfter\n auiFormItemControl\n formControlName=\"unit\"\n >\n <aui-option\n *ngFor=\"let unit of resourceUnits['memory']\"\n [value]=\"unit\"\n >\n {{ unit }}\n </aui-option>\n </aui-select>\n </aui-input-group>\n </div>\n <acl-errors-mapper\n *ngIf=\"\n form.get('requests.memory.value')?.dirty ||\n $any(controlContainer?.formDirective)?.submitted\n \"\n [errors]=\"form.get('requests.memory.value').errors\"\n [errorsMapper]=\"{\n min:\n requestMemoryMin\n | pure\n : getMinOrMaxErrorsMapper\n : 'min'\n : 'memory'\n : translate.locale,\n max:\n requestMemoryMax\n | pure\n : getMinOrMaxErrorsMapper\n : 'max'\n : 'memory'\n : translate.locale,\n }\"\n class=\"tw-text-s tw-text-red\"\n >\n </acl-errors-mapper>\n </div>\n </div>\n </div>\n <div class=\"resource_requirements\">\n <div class=\"input-group-label\">\n {{ 'resource_requirements_limits' | translate }}\n </div>\n <div\n class=\"input-group-wrapper tw-items-start\"\n formGroupName=\"limits\"\n >\n <div class=\"tw-flex tw-flex-col tw-flex-1\">\n <div\n class=\"input-groups-wrapper cpu\"\n [formGroupName]=\"'cpu'\"\n >\n <aui-input-group>\n <div\n auiInputAddonBefore\n class=\"addon-label\"\n [ngClass]=\"{\n 'tw-required-mark': limitCpuRequired,\n }\"\n >\n CPU\n </div>\n <input\n aui-input\n type=\"number\"\n auiFormItemControl\n formControlName=\"value\"\n [required]=\"limitCpuRequired\"\n />\n <aui-select\n auiInputAddonAfter\n auiFormItemControl\n formControlName=\"unit\"\n >\n <aui-option\n *ngFor=\"let unit of resourceUnits['cpu']\"\n [value]=\"unit.value\"\n [label]=\"unit.label | translate\"\n >\n {{ unit.label | translate }}\n </aui-option>\n </aui-select>\n </aui-input-group>\n </div>\n <acl-errors-mapper\n *ngIf=\"\n form.get('limits.cpu.value')?.dirty ||\n $any(controlContainer?.formDirective)?.submitted\n \"\n [errors]=\"form.get('limits.cpu.value').errors\"\n [errorsMapper]=\"{\n cpu_max: 'request_greater_than_limits_error' | translate,\n min:\n limitCpuMin\n | pure\n : getMinOrMaxErrorsMapper\n : 'min'\n : 'cpu'\n : translate.locale,\n max:\n limitCpuMax\n | pure\n : getMinOrMaxErrorsMapper\n : 'max'\n : 'cpu'\n : translate.locale,\n }\"\n class=\"tw-text-s tw-text-red\"\n >\n </acl-errors-mapper>\n </div>\n\n <div class=\"tw-flex tw-flex-col tw-flex-1\">\n <div\n class=\"input-groups-wrapper memory\"\n [formGroupName]=\"'memory'\"\n >\n <aui-input-group>\n <div\n auiInputAddonBefore\n class=\"addon-label\"\n [ngClass]=\"{\n 'tw-required-mark': limitMemoryRequired,\n }\"\n >\n {{ 'memory' | translate }}\n </div>\n <input\n aui-input\n type=\"number\"\n auiFormItemControl\n formControlName=\"value\"\n [required]=\"limitMemoryRequired\"\n />\n <aui-select\n auiInputAddonAfter\n auiFormItemControl\n formControlName=\"unit\"\n >\n <aui-option\n *ngFor=\"let unit of resourceUnits['memory']\"\n [value]=\"unit\"\n >\n {{ unit }}\n </aui-option>\n </aui-select>\n </aui-input-group>\n </div>\n <acl-errors-mapper\n *ngIf=\"\n form.get('limits.memory.value')?.dirty ||\n $any(controlContainer?.formDirective)?.submitted\n \"\n [errors]=\"form.get('limits.memory.value').errors\"\n [errorsMapper]=\"{\n memory_max: 'request_greater_than_limits_error' | translate,\n min:\n limitMemoryMin\n | pure\n : getMinOrMaxErrorsMapper\n : 'min'\n : 'memory'\n : translate.locale,\n max:\n limitMemoryMax\n | pure\n : getMinOrMaxErrorsMapper\n : 'max'\n : 'memory'\n : translate.locale,\n }\"\n class=\"tw-text-s tw-text-red\"\n >\n </acl-errors-mapper>\n </div>\n </div>\n </div>\n</form>\n\n<ng-template #readOnlyTemplate>\n <div class=\"resource_requirements-display\">\n <div class=\"resource_requirements-display-item\">\n <label class=\"resource_requirements-display-item__label\">{{\n 'resource_requirements_requests' | translate\n }}</label>\n <aui-icon\n icon=\"prod:cpu\"\n size=\"16px\"\n color=\"#6359b4\"\n margin=\"right\"\n [title]=\"'cpu' | translate\"\n ></aui-icon\n ><span class=\"tw-mr-16\"\n >{{\n form.get('requests').get('cpu').value\n | pure: getResourceValue\n | aclFieldNotAvailable\n }}{{\n form.get('requests').get('cpu.unit').value\n | pure: getCpuUnitLabel\n | translate\n }}\n </span>\n <aui-icon\n icon=\"prod:memory\"\n size=\"16px\"\n color=\"#007cb5\"\n margin=\"right\"\n [title]=\"'memory' | translate\"\n ></aui-icon\n >{{\n form.get('requests').get('memory').value\n | pure: getResourceValue\n | aclFieldNotAvailable\n }}\n </div>\n <div class=\"resource_requirements-display-item\">\n <label class=\"resource_requirements-display-item__label\">{{\n 'resource_requirements_limits' | translate\n }}</label>\n <aui-icon\n icon=\"prod:cpu\"\n size=\"16px\"\n color=\"#6359b4\"\n margin=\"right\"\n [title]=\"'cpu' | translate\"\n ></aui-icon\n ><span class=\"tw-mr-16\"\n >{{\n form.get('limits').get('cpu').value\n | pure: getResourceValue\n | aclFieldNotAvailable\n }}{{\n form.get('limits').get('cpu.unit').value\n | pure: getCpuUnitLabel\n | translate\n }}\n </span>\n <aui-icon\n icon=\"prod:memory\"\n size=\"16px\"\n color=\"#007cb5\"\n margin=\"right\"\n [title]=\"'memory' | translate\"\n ></aui-icon\n >{{\n form.get('limits').get('memory').value\n | pure: getResourceValue\n | aclFieldNotAvailable\n }}\n </div>\n </div>\n</ng-template>\n", styles: [":host .resource_requirements:not(:last-of-type){margin-bottom:8px}:host .input-group-wrapper{display:flex}:host .input-group-label{line-height:var(--aui-inline-height-m)}:host aui-input-group{flex:1}:host aui-input-group ::ng-deep .aui-input-group__addon--after{padding:0}:host aui-input-group ::ng-deep .aui-input-group__addon--after aui-select{width:60px}:host aui-input-group ::ng-deep .aui-input-group__addon--after aui-select .aui-input-group{width:62px}html:not([lang|=zh]) :host aui-input-group ::ng-deep .aui-input-group__addon--after aui-select{width:78px}html:not([lang|=zh]) :host aui-input-group ::ng-deep .aui-input-group__addon--after aui-select .aui-input-group{width:80px}:host aui-input-group ::ng-deep .aui-input-group__addon--after aui-select .aui-input{border:0;background-color:transparent!important;border-top-right-radius:var(--aui-border-radius-m);border-bottom-right-radius:var(--aui-border-radius-m)}:host .addon-label{white-space:nowrap}:host .input-groups-wrapper{display:flex;flex:1;align-items:center}:host .input-groups-wrapper:first-child{margin-right:8px}:host .resource_requirements-display-item{display:flex;font-size:14px;line-height:20px;color:rgb(var(--aui-color-main-text));align-items:center;margin-top:8px}:host .resource_requirements-display-item:first-child{margin-top:0}:host .resource_requirements-display-item__label{white-space:nowrap;margin-right:8px}:host .resource_requirements-display-item__value{min-width:0;flex:1;white-space:nowrap;display:flex}:host .resource_requirements-display-item__value__overflow{display:block;overflow:hidden;text-overflow:ellipsis}:host .resource_requirements-display-item__value__wrap{white-space:pre-wrap;flex-wrap:wrap}:host .resource_requirements-display-item__label,:host .resource_requirements-display-item__value{height:100%;align-items:flex-start}:host ::ng-deep .aui-input-group__addon--before{width:70px}html:not([lang|=zh]) :host ::ng-deep .memory .aui-input-group__addon--before{width:82px}\n"] }]
|
|
511
|
-
}], () => [{ type: i0.Injector }, { type: i1.OperandFieldComponent, decorators: [{
|
|
512
|
-
type: Optional
|
|
513
|
-
}] }, { type: i2.ControlContainer, decorators: [{
|
|
514
|
-
type: Optional
|
|
515
|
-
}] }, { type: i3.TranslateService }], { readOnly: [{
|
|
516
|
-
type: Input
|
|
517
|
-
}], field: [{
|
|
518
|
-
type: Input
|
|
519
|
-
}], minValidator: [], maxValidator: [], getMinOrMaxErrorsMapper: [] }); })();
|
|
520
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ResourceRequirementsComponent, { className: "ResourceRequirementsComponent", filePath: "lib/field-controls/widgets/resource-requirements/resource-requirements.component.ts", lineNumber: 81 }); })();
|
|
521
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcmVxdWlyZW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3JkLWZvcm0vc3JjL2xpYi9maWVsZC1jb250cm9scy93aWRnZXRzL3Jlc291cmNlLXJlcXVpcmVtZW50cy9yZXNvdXJjZS1yZXF1aXJlbWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jcmQtZm9ybS9zcmMvbGliL2ZpZWxkLWNvbnRyb2xzL3dpZGdldHMvcmVzb3VyY2UtcmVxdWlyZW1lbnRzL3Jlc291cmNlLXJlcXVpcmVtZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLElBQUksRUFDSixTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUdsQixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGdCQUFnQixHQUNqQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBRUwsUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxnQkFBZ0IsR0FJakIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHdkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxFQUNMLGtDQUFrQyxFQUNsQyxrQ0FBa0MsR0FDbkMsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7SUNFSixzQ0FJQzs7SUFDQyxZQUNGOztJQUFBLGlC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RUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUU7WUFDM0MsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztTQUNsRSxDQUFDLENBQUM7SUFDTCxDQUFDOzhGQWxTVSw2QkFBNkI7b0VBQTdCLDZCQUE2QjtZQ3dNMUMsQUF4UkEsa0ZBR0Msb0hBcVI4Qjs7O1lBdFJYLEFBQWpCLG9DQUFpQixpQ0FBcUI7OztBRDBRL0I7SUFEUCxJQUFJOzs7O2lFQXVCSjtBQUdPO0lBRFAsSUFBSTs7OztpRUF3Qko7QUE0Q0Q7SUFEQyxJQUFJOzs7OzRFQVdKO2lGQWxTVSw2QkFBNkI7Y0FOekMsU0FBUzsyQkFDRSwrQkFBK0IsbUJBR3hCLHVCQUF1QixDQUFDLE1BQU07O3NCQTZFNUMsUUFBUTs7c0JBRVIsUUFBUTtvREFyRVgsUUFBUTtrQkFEUCxLQUFLO1lBSU4sS0FBSztrQkFESixLQUFLO1lBa0xFLFlBQVksTUF5QlosWUFBWSxNQW1FcEIsdUJBQXVCO2tGQXhSWiw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBiaW5kLFxuICBmb3JtYXRDUFUsXG4gIGZvcm1hdE1lbW9yeSxcbiAgZ2V0UmVzb3VyY2VWYWx1ZSxcbiAgZ2V0UmVzb3VyY2VWaWV3TW9kZWwsXG4gIGluaXRHcmVhdGVyVmFsaWRhdG9yLFxuICBSRVNPVVJDRV9NQUNfVFlQRVMsXG4gIFJlc291cmNlUmVxdWlyZW1lbnRGb3JtTW9kYWwsXG4gIFJlc291cmNlUmVxdWlyZW1lbnRTdHJpY3QsXG4gIHJlc291cmNlVW5pdHMsXG4gIHRyYW5zZmVyUmVzb3VyY2UsXG4gIFRyYW5zbGF0ZVNlcnZpY2UsXG59IGZyb20gJ0BhbGF1ZGEtZmUvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xDb250YWluZXIsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG1lcmdlLCBvbWl0LCBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJhc2VSZXNvdXJjZUZvcm1Hcm91cENvbXBvbmVudCB9IGZyb20gJ25nLXJlc291cmNlLWZvcm0tdXRpbCc7XG5cbmltcG9ydCB7IE9wZXJhbmRGaWVsZCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9wZXJhbmRGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL29wZXJhbmQtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIHJlc29sdmVSZXF1aXJlbWVudHNSZXF1aXJlZE9wdGlvbnMsXG4gIHJlc29sdmVSZXF1aXJlbWVudHNNaW5Pck1heE9wdGlvbnMsXG59IGZyb20gJy4uL3V0aWxzJztcblxudHlwZSBBdmFpbGFibGVSZXNvdXJjZVR5cGUgPSAodHlwZW9mIFJFU09VUkNFX01BQ19UWVBFUylbbnVtYmVyXTtcbnR5cGUgUmVzb3VyY2VLaW5kID0ga2V5b2YgUmVzb3VyY2VSZXF1aXJlbWVudEZvcm1Nb2RhbDtcblxuaW50ZXJmYWNlIFJlc291cmNlQ29udHJvbCB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHVuaXQ6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGlvbkVycm9ycyhcbiAgdmFsdWVDdHJsOiBBYnN0cmFjdENvbnRyb2wsXG4gIGVycm9yczogVmFsaWRhdGlvbkVycm9ycyxcbik6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgLy8g6L+Z6YeM6YG/5YWN6KaG55uW5YW25a6DIGVycm9yc1xuICBjb25zdCBjb21iaW5lZEVycm9ycyA9IHsgLi4udmFsdWVDdHJsLmVycm9ycywgLi4uZXJyb3JzIH07XG4gIHZhbHVlQ3RybC5zZXRFcnJvcnMoY29tYmluZWRFcnJvcnMpO1xuICByZXR1cm4gY29tYmluZWRFcnJvcnM7XG59XG5cbmZ1bmN0aW9uIHZhbHVlRm9ybWF0KHR5cGU6ICdjcHUnIHwgJ21lbW9yeScsIHZhbHVlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHR5cGUgPT09ICdjcHUnID8gZm9ybWF0Q1BVKHZhbHVlKSA6IGZvcm1hdE1lbW9yeSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRWYWx1ZShcbiAgZ3JvdXA6IEZvcm1Hcm91cDx7XG4gICAgdmFsdWU6IEZvcm1Db250cm9sPHN0cmluZz47XG4gICAgdW5pdDogRm9ybUNvbnRyb2w8c3RyaW5nPjtcbiAgfT4sXG4gIHR5cGU6ICdjcHUnIHwgJ21lbW9yeScsXG4pOiBudW1iZXIge1xuICBjb25zdCB2YWx1ZUN0cmwgPSBncm91cC5nZXQoJ3ZhbHVlJyk7XG4gIGNvbnN0IHZhbHVlID0gdmFsdWVDdHJsLnZhbHVlO1xuICBjb25zdCB1bml0ID0gZ3JvdXAuZ2V0KCd1bml0JykudmFsdWU7XG4gIHJldHVybiB2YWx1ZUZvcm1hdCh0eXBlLCAodmFsdWUgfHwgMCkgKyB1bml0KTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNsLWNyZC1yZXNvdXJjZS1yZXF1aXJlbWVudHMnLFxuICB0ZW1wbGF0ZVVybDogJ3Jlc291cmNlLXJlcXVpcmVtZW50cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydyZXNvdXJjZS1yZXF1aXJlbWVudHMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFJlc291cmNlUmVxdWlyZW1lbnRzQ29tcG9uZW50XG4gIGV4dGVuZHMgQmFzZVJlc291cmNlRm9ybUdyb3VwQ29tcG9uZW50PFxuICAgIFJlc291cmNlUmVxdWlyZW1lbnRTdHJpY3QsXG4gICAgUmVzb3VyY2VSZXF1aXJlbWVudEZvcm1Nb2RhbFxuICA+XG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIEBJbnB1dCgpXG4gIHJlYWRPbmx5OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIGZpZWxkOiBPcGVyYW5kRmllbGQ7XG5cbiAgZ2V0IHJlcXVpcmVkT3B0aW9ucygpIHtcbiAgICByZXR1cm4gcmVzb2x2ZVJlcXVpcmVtZW50c1JlcXVpcmVkT3B0aW9ucyh0aGlzLmZpZWxkQ29tcG9uZW50Py5maWVsZCk7XG4gIH1cblxuICBnZXQgbGltaXRNZW1vcnlSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlZE9wdGlvbnMucmVxdWlyZWQ/LmxpbWl0Py5pbmNsdWRlcygnbWVtb3J5Jyk7XG4gIH1cblxuICBnZXQgbGltaXRDcHVSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlZE9wdGlvbnMucmVxdWlyZWQ/LmxpbWl0Py5pbmNsdWRlcygnY3B1Jyk7XG4gIH1cblxuICBnZXQgcmVxdWVzdE1lbW9yeVJlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLnJlcXVpcmVkT3B0aW9ucy5yZXF1aXJlZD8ucmVxdWVzdD8uaW5jbHVkZXMoJ21lbW9yeScpO1xuICB9XG5cbiAgZ2V0IHJlcXVlc3RDcHVSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlZE9wdGlvbnMucmVxdWlyZWQ/LnJlcXVlc3Q/LmluY2x1ZGVzKCdjcHUnKTtcbiAgfVxuXG4gIGdldCBtaW5NYXhPcHRpb25zKCkge1xuICAgIHJldHVybiByZXNvbHZlUmVxdWlyZW1lbnRzTWluT3JNYXhPcHRpb25zKHRoaXMuZmllbGRDb21wb25lbnQ/LmZpZWxkKTtcbiAgfVxuXG4gIGdldCBsaW1pdE1lbW9yeU1pbigpIHtcbiAgICByZXR1cm4gdGhpcy5taW5NYXhPcHRpb25zLm1pbi5saW1pdHM/Lm1lbW9yeTtcbiAgfVxuXG4gIGdldCBsaW1pdENwdU1pbigpIHtcbiAgICByZXR1cm4gdGhpcy5taW5NYXhPcHRpb25zLm1pbi5saW1pdHM/LmNwdTtcbiAgfVxuXG4gIGdldCByZXF1ZXN0TWVtb3J5TWluKCkge1xuICAgIHJldHVybiB0aGlzLm1pbk1heE9wdGlvbnMubWluLnJlcXVlc3RzPy5tZW1vcnk7XG4gIH1cblxuICBnZXQgcmVxdWVzdENwdU1pbigpIHtcbiAgICByZXR1cm4gdGhpcy5taW5NYXhPcHRpb25zLm1pbi5yZXF1ZXN0cz8uY3B1O1xuICB9XG5cbiAgZ2V0IGxpbWl0TWVtb3J5TWF4KCkge1xuICAgIHJldHVybiB0aGlzLm1pbk1heE9wdGlvbnMubWF4LmxpbWl0cz8ubWVtb3J5O1xuICB9XG5cbiAgZ2V0IGxpbWl0Q3B1TWF4KCkge1xuICAgIHJldHVybiB0aGlzLm1pbk1heE9wdGlvbnMubWF4LmxpbWl0cz8uY3B1O1xuICB9XG5cbiAgZ2V0IHJlcXVlc3RNZW1vcnlNYXgoKSB7XG4gICAgcmV0dXJuIHRoaXMubWluTWF4T3B0aW9ucy5tYXgucmVxdWVzdHM/Lm1lbW9yeTtcbiAgfVxuXG4gIGdldCByZXF1ZXN0Q3B1TWF4KCkge1xuICAgIHJldHVybiB0aGlzLm1pbk1heE9wdGlvbnMubWF4LnJlcXVlc3RzPy5jcHU7XG4gIH1cblxuICByZXNvdXJjZVVuaXRzID0gcmVzb3VyY2VVbml0cztcbiAgZ2V0UmVzb3VyY2VWYWx1ZSA9IGdldFJlc291cmNlVmFsdWU7XG4gIGdldFJlc291cmNlVmlld01vZGVsID0gZ2V0UmVzb3VyY2VWaWV3TW9kZWw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBPcHRpb25hbCgpXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWVsZENvbXBvbmVudDogT3BlcmFuZEZpZWxkQ29tcG9uZW50LFxuICAgIEBPcHRpb25hbCgpXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgcHVibGljIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICBjb25zdCBncmVhdGVyVmFsaWRhdG9yU3Vic2NyaXB0aW9ucyA9IFtcbiAgICAgIGluaXRHcmVhdGVyVmFsaWRhdG9yKCdjcHUnLCB0aGlzLmZvcm0pLFxuICAgICAgaW5pdEdyZWF0ZXJWYWxpZGF0b3IoJ21lbW9yeScsIHRoaXMuZm9ybSksXG4gICAgXTtcbiAgICB0aGlzLmRlc3Ryb3kkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBncmVhdGVyVmFsaWRhdG9yU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVGb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGxpbWl0czogdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIGNwdTogdGhpcy5mYi5ncm91cChcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgICB1bml0OiAnYycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWxpZGF0b3JzOiBbXG4gICAgICAgICAgICAgIHRoaXMubWluVmFsaWRhdG9yKHRoaXMubGltaXRDcHVNaW4sICdjcHUnKSxcbiAgICAgICAgICAgICAgdGhpcy5tYXhWYWxpZGF0b3IodGhpcy5saW1pdENwdU1heCwgJ2NwdScpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICBtZW1vcnk6IHRoaXMuZmIuZ3JvdXAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgdW5pdDogJ01pJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtcbiAgICAgICAgICAgICAgdGhpcy5taW5WYWxpZGF0b3IodGhpcy5saW1pdE1lbW9yeU1pbiwgJ21lbW9yeScpLFxuICAgICAgICAgICAgICB0aGlzLm1heFZhbGlkYXRvcih0aGlzLmxpbWl0TWVtb3J5TWF4LCAnbWVtb3J5JyksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICAgIHJlcXVlc3RzOiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgY3B1OiB0aGlzLmZiLmdyb3VwKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICAgIHVuaXQ6ICdjJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtcbiAgICAgICAgICAgICAgdGhpcy5taW5WYWxpZGF0b3IodGhpcy5yZXF1ZXN0Q3B1TWluLCAnY3B1JyksXG4gICAgICAgICAgICAgIHRoaXMubWF4VmFsaWRhdG9yKHRoaXMucmVxdWVzdENwdU1heCwgJ2NwdScpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICBtZW1vcnk6IHRoaXMuZmIuZ3JvdXAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgdW5pdDogJ01pJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtcbiAgICAgICAgICAgICAgdGhpcy5taW5WYWxpZGF0b3IodGhpcy5yZXF1ZXN0TWVtb3J5TWluLCAnbWVtb3J5JyksXG4gICAgICAgICAgICAgIHRoaXMubWF4VmFsaWRhdG9yKHRoaXMucmVxdWVzdE1lbW9yeU1heCwgJ21lbW9yeScpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBnZXREZWZhdWx0Rm9ybU1vZGVsKCk6IFJlc291cmNlUmVxdWlyZW1lbnRGb3JtTW9kYWwge1xuICAgIHJldHVybiB7XG4gICAgICBsaW1pdHM6IHtcbiAgICAgICAgY3B1OiB7XG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIHVuaXQ6ICdjJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVtb3J5OiB7XG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIHVuaXQ6ICdNaScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcmVxdWVzdHM6IHtcbiAgICAgICAgY3B1OiB7XG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIHVuaXQ6ICdjJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVtb3J5OiB7XG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIHVuaXQ6ICdNaScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSBhZGFwdEZvcm1Nb2RlbChcbiAgICBmb3JtTW9kZWw6IFJlc291cmNlUmVxdWlyZW1lbnRGb3JtTW9kYWwsXG4gICk6IFJlc291cmNlUmVxdWlyZW1lbnRTdHJpY3Qge1xuICAgIHRoaXMuZm9ybWF0Rm9ybU1vZGVsKGZvcm1Nb2RlbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVlc3RzOiB0cmFuc2ZlclJlc291cmNlKGZvcm1Nb2RlbC5yZXF1ZXN0cyksXG4gICAgICBsaW1pdHM6IHRyYW5zZmVyUmVzb3VyY2UoZm9ybU1vZGVsLmxpbWl0cyksXG4gICAgfTtcbiAgfVxuXG4gIEBiaW5kXG4gIHByaXZhdGUgbWluVmFsaWRhdG9yKG1pbjogc3RyaW5nLCB0eXBlOiAnY3B1JyB8ICdtZW1vcnknKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGdyb3VwOiBGb3JtR3JvdXA8e1xuICAgICAgICB2YWx1ZTogRm9ybUNvbnRyb2w8c3RyaW5nPjtcbiAgICAgICAgdW5pdDogRm9ybUNvbnRyb2w8c3RyaW5nPjtcbiAgICAgIH0+LFxuICAgICk6IFZhbGlkYXRpb25FcnJvcnMgPT4ge1xuICAgICAgaWYgKCFtaW4pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlQ3RybCA9IGdyb3VwLmdldCgndmFsdWUnKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGdldEN1cnJlbnRWYWx1ZShncm91cCwgdHlwZSk7XG4gICAgICBjb25zdCBtaW5UaHJlc2hvbGQgPSB2YWx1ZUZvcm1hdCh0eXBlLCBtaW4pO1xuXG4gICAgICBpZiAoY3VycmVudFZhbHVlIDwgbWluVGhyZXNob2xkKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVWYWxpZGF0aW9uRXJyb3JzKHZhbHVlQ3RybCwgeyBtaW46IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBlcnJvcnMgPSBvbWl0KHZhbHVlQ3RybC5lcnJvcnMsICdtaW4nKTtcbiAgICAgIHZhbHVlQ3RybC5zZXRFcnJvcnMoaXNFbXB0eShlcnJvcnMpID8gbnVsbCA6IGVycm9ycyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgQGJpbmRcbiAgcHJpdmF0ZSBtYXhWYWxpZGF0b3IobWF4OiBzdHJpbmcsIHR5cGU6ICdjcHUnIHwgJ21lbW9yeScpIHtcbiAgICByZXR1cm4gKFxuICAgICAgZ3JvdXA6IEZvcm1Hcm91cDx7XG4gICAgICAgIHZhbHVlOiBGb3JtQ29udHJvbDxzdHJpbmc+O1xuICAgICAgICB1bml0OiBGb3JtQ29udHJvbDxzdHJpbmc+O1xuICAgICAgfT4sXG4gICAgKTogVmFsaWRhdGlvbkVycm9ycyA9PiB7XG4gICAgICBpZiAoIW1heCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWVDdHJsID0gZ3JvdXAuZ2V0KCd2YWx1ZScpO1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZ2V0Q3VycmVudFZhbHVlKGdyb3VwLCB0eXBlKTtcbiAgICAgIGNvbnN0IG1heFRocmVzaG9sZCA9IHZhbHVlRm9ybWF0KHR5cGUsIG1heCk7XG5cbiAgICAgIGlmIChjdXJyZW50VmFsdWUgPiBtYXhUaHJlc2hvbGQpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVZhbGlkYXRpb25FcnJvcnModmFsdWVDdHJsLCB7IG1heDogdHJ1ZSB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXJyb3JzID0gb21pdCh2YWx1ZUN0cmwuZXJyb3JzLCAnbWF4Jyk7XG4gICAgICB2YWx1ZUN0cmwuc2V0RXJyb3JzKGlzRW1wdHkoZXJyb3JzKSA/IG51bGwgOiBlcnJvcnMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIGZvcm1hdEZvcm1Nb2RlbChmb3JtTW9kZWw6IFJlc291cmNlUmVxdWlyZW1lbnRGb3JtTW9kYWwpIHtcbiAgICBPYmplY3QudmFsdWVzKGZvcm1Nb2RlbCkuZm9yRWFjaChtb2RlbFZhbHVlID0+IHtcbiAgICAgIE9iamVjdC52YWx1ZXMobW9kZWxWYWx1ZSkuZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgdi52YWx1ZSA9IGAke3YudmFsdWV9YDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q3B1VW5pdExhYmVsKHZhbHVlOiAnbScgfCAnYycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09ICdtJ1xuICAgICAgPyAnJ1xuICAgICAgOiByZXNvdXJjZVVuaXRzLmNwdS5maW5kKHVuaXQgPT4gdW5pdC52YWx1ZSA9PT0gdmFsdWUpLmxhYmVsO1xuICB9XG5cbiAgb3ZlcnJpZGUgYWRhcHRSZXNvdXJjZU1vZGVsKFxuICAgIHJlc291cmNlczogUmVzb3VyY2VSZXF1aXJlbWVudFN0cmljdCxcbiAgKTogUmVzb3VyY2VSZXF1aXJlbWVudEZvcm1Nb2RhbCB7XG4gICAgY29uc3QgcmVzb3VyY2VzTW9kZWwgPSB7fSBhcyBSZXNvdXJjZVJlcXVpcmVtZW50Rm9ybU1vZGFsO1xuICAgIGlmIChyZXNvdXJjZXMpIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlc291cmNlcykuZm9yRWFjaChraW5kID0+IHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VLaW5kID0ga2luZCBhcyBSZXNvdXJjZUtpbmQ7XG4gICAgICAgIHJlc291cmNlc01vZGVsW3Jlc291cmNlS2luZF0gPSBPYmplY3Qua2V5cyhyZXNvdXJjZXNbcmVzb3VyY2VLaW5kXSlcbiAgICAgICAgICAuZmlsdGVyKGtleSA9PlxuICAgICAgICAgICAgUkVTT1VSQ0VfTUFDX1RZUEVTLmluY2x1ZGVzKGtleSBhcyBBdmFpbGFibGVSZXNvdXJjZVR5cGUpLFxuICAgICAgICAgIClcbiAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgKGl0ZW0sIHR5cGUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VUeXBlID0gdHlwZSBhcyBBdmFpbGFibGVSZXNvdXJjZVR5cGU7XG4gICAgICAgICAgICAgIGl0ZW1bcmVzb3VyY2VUeXBlXSA9IGdldFJlc291cmNlVmlld01vZGVsKFxuICAgICAgICAgICAgICAgIHJlc291cmNlc1tyZXNvdXJjZUtpbmRdW3Jlc291cmNlVHlwZV0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VUeXBlLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7fSBhcyBSZWNvcmQ8QXZhaWxhYmxlUmVzb3VyY2VUeXBlLCBSZXNvdXJjZUNvbnRyb2w+LFxuICAgICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlKHRoaXMuZ2V0RGVmYXVsdEZvcm1Nb2RlbCgpLCByZXNvdXJjZXNNb2RlbCk7XG4gIH1cblxuICBAYmluZFxuICBnZXRNaW5Pck1heEVycm9yc01hcHBlcihcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIGtpbmQ6ICdtaW4nIHwgJ21heCcsXG4gICAgdHlwZTogJ2NwdScgfCAnbWVtb3J5JyxcbiAgICBfbG9jYWxlOiBzdHJpbmcsXG4gICkge1xuICAgIGNvbnN0IHJlc291cmNlQ3RybCA9IGdldFJlc291cmNlVmlld01vZGVsKHZhbHVlLCB0eXBlKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZ2V0KGB3YXJuaW5nXyR7a2luZH1gLCB7XG4gICAgICB2YWx1ZTogcmVzb3VyY2VDdHJsLnZhbHVlICsgdGhpcy50cmFuc2xhdGUuZ2V0KHJlc291cmNlQ3RybC51bml0KSxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGZvcm1cbiAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgKm5nSWY9XCIhcmVhZE9ubHk7IGVsc2UgcmVhZE9ubHlUZW1wbGF0ZVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJyZXNvdXJjZV9yZXF1aXJlbWVudHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtbGFiZWxcIj5cbiAgICAgIHt7ICdyZXNvdXJjZV9yZXF1aXJlbWVudHNfcmVxdWVzdHMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJpbnB1dC1ncm91cC13cmFwcGVyIHR3LWl0ZW1zLXN0YXJ0XCJcbiAgICAgIGZvcm1Hcm91cE5hbWU9XCJyZXF1ZXN0c1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInR3LWZsZXggdHctZmxleC1jb2wgdHctZmxleC0xXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImlucHV0LWdyb3Vwcy13cmFwcGVyIGNwdVwiXG4gICAgICAgICAgZm9ybUdyb3VwTmFtZT1cImNwdVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXVpLWlucHV0LWdyb3VwPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBhdWlJbnB1dEFkZG9uQmVmb3JlXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWRkb24tbGFiZWxcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ3R3LXJlcXVpcmVkLW1hcmsnOiByZXF1ZXN0Q3B1UmVxdWlyZWQsXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBDUFVcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGF1aS1pbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVlc3RDcHVSZXF1aXJlZFwiXG4gICAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGF1aS1zZWxlY3RcbiAgICAgICAgICAgICAgYXVpSW5wdXRBZGRvbkFmdGVyXG4gICAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ1bml0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF1aS1vcHRpb25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdW5pdCBvZiByZXNvdXJjZVVuaXRzWydjcHUnXVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInVuaXQudmFsdWVcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ1bml0LmxhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHVuaXQubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9hdWktb3B0aW9uPlxuICAgICAgICAgICAgPC9hdWktc2VsZWN0PlxuICAgICAgICAgIDwvYXVpLWlucHV0LWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGFjbC1lcnJvcnMtbWFwcGVyXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIGZvcm0uZ2V0KCdyZXF1ZXN0cy5jcHUudmFsdWUnKT8uZGlydHkgfHxcbiAgICAgICAgICAgICRhbnkoY29udHJvbENvbnRhaW5lcj8uZm9ybURpcmVjdGl2ZSk/LnN1Ym1pdHRlZFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2Vycm9yc109XCJmb3JtLmdldCgncmVxdWVzdHMuY3B1LnZhbHVlJykuZXJyb3JzXCJcbiAgICAgICAgICBbZXJyb3JzTWFwcGVyXT1cIntcbiAgICAgICAgICAgIG1pbjpcbiAgICAgICAgICAgICAgcmVxdWVzdENwdU1pblxuICAgICAgICAgICAgICB8IHB1cmVcbiAgICAgICAgICAgICAgICA6IGdldE1pbk9yTWF4RXJyb3JzTWFwcGVyXG4gICAgICAgICAgICAgICAgOiAnbWluJ1xuICAgICAgICAgICAgICAgIDogJ2NwdSdcbiAgICAgICAgICAgICAgICA6IHRyYW5zbGF0ZS5sb2NhbGUsXG4gICAgICAgICAgICBtYXg6XG4gICAgICAgICAgICAgIHJlcXVlc3RDcHVNYXhcbiAgICAgICAgICAgICAgfCBwdXJlXG4gICAgICAgICAgICAgICAgOiBnZXRNaW5Pck1heEVycm9yc01hcHBlclxuICAgICAgICAgICAgICAgIDogJ21heCdcbiAgICAgICAgICAgICAgICA6ICdjcHUnXG4gICAgICAgICAgICAgICAgOiB0cmFuc2xhdGUubG9jYWxlLFxuICAgICAgICAgIH1cIlxuICAgICAgICAgIGNsYXNzPVwidHctdGV4dC1zIHR3LXRleHQtcmVkXCJcbiAgICAgICAgPlxuICAgICAgICA8L2FjbC1lcnJvcnMtbWFwcGVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0dy1mbGV4IHR3LWZsZXgtY29sIHR3LWZsZXgtMVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJpbnB1dC1ncm91cHMtd3JhcHBlciBtZW1vcnlcIlxuICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cIidtZW1vcnknXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxhdWktaW5wdXQtZ3JvdXA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGF1aUlucHV0QWRkb25CZWZvcmVcbiAgICAgICAgICAgICAgY2xhc3M9XCJhZGRvbi1sYWJlbFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAndHctcmVxdWlyZWQtbWFyayc6IHJlcXVlc3RNZW1vcnlSZXF1aXJlZCxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdtZW1vcnknIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBhdWktaW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1ZXN0TWVtb3J5UmVxdWlyZWRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxhdWktc2VsZWN0XG4gICAgICAgICAgICAgIGF1aUlucHV0QWRkb25BZnRlclxuICAgICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidW5pdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxhdWktb3B0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHVuaXQgb2YgcmVzb3VyY2VVbml0c1snbWVtb3J5J11cIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ1bml0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHVuaXQgfX1cbiAgICAgICAgICAgICAgPC9hdWktb3B0aW9uPlxuICAgICAgICAgICAgPC9hdWktc2VsZWN0PlxuICAgICAgICAgIDwvYXVpLWlucHV0LWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGFjbC1lcnJvcnMtbWFwcGVyXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIGZvcm0uZ2V0KCdyZXF1ZXN0cy5tZW1vcnkudmFsdWUnKT8uZGlydHkgfHxcbiAgICAgICAgICAgICRhbnkoY29udHJvbENvbnRhaW5lcj8uZm9ybURpcmVjdGl2ZSk/LnN1Ym1pdHRlZFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2Vycm9yc109XCJmb3JtLmdldCgncmVxdWVzdHMubWVtb3J5LnZhbHVlJykuZXJyb3JzXCJcbiAgICAgICAgICBbZXJyb3JzTWFwcGVyXT1cIntcbiAgICAgICAgICAgIG1pbjpcbiAgICAgICAgICAgICAgcmVxdWVzdE1lbW9yeU1pblxuICAgICAgICAgICAgICB8IHB1cmVcbiAgICAgICAgICAgICAgICA6IGdldE1pbk9yTWF4RXJyb3JzTWFwcGVyXG4gICAgICAgICAgICAgICAgOiAnbWluJ1xuICAgICAgICAgICAgICAgIDogJ21lbW9yeSdcbiAgICAgICAgICAgICAgICA6IHRyYW5zbGF0ZS5sb2NhbGUsXG4gICAgICAgICAgICBtYXg6XG4gICAgICAgICAgICAgIHJlcXVlc3RNZW1vcnlNYXhcbiAgICAgICAgICAgICAgfCBwdXJlXG4gICAgICAgICAgICAgICAgOiBnZXRNaW5Pck1heEVycm9yc01hcHBlclxuICAgICAgICAgICAgICAgIDogJ21heCdcbiAgICAgICAgICAgICAgICA6ICdtZW1vcnknXG4gICAgICAgICAgICAgICAgOiB0cmFuc2xhdGUubG9jYWxlLFxuICAgICAgICAgIH1cIlxuICAgICAgICAgIGNsYXNzPVwidHctdGV4dC1zIHR3LXRleHQtcmVkXCJcbiAgICAgICAgPlxuICAgICAgICA8L2FjbC1lcnJvcnMtbWFwcGVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwicmVzb3VyY2VfcmVxdWlyZW1lbnRzXCI+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWxhYmVsXCI+XG4gICAgICB7eyAncmVzb3VyY2VfcmVxdWlyZW1lbnRzX2xpbWl0cycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImlucHV0LWdyb3VwLXdyYXBwZXIgdHctaXRlbXMtc3RhcnRcIlxuICAgICAgZm9ybUdyb3VwTmFtZT1cImxpbWl0c1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInR3LWZsZXggdHctZmxleC1jb2wgdHctZmxleC0xXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImlucHV0LWdyb3Vwcy13cmFwcGVyIGNwdVwiXG4gICAgICAgICAgW2Zvcm1Hcm91cE5hbWVdPVwiJ2NwdSdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGF1aS1pbnB1dC1ncm91cD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgYXVpSW5wdXRBZGRvbkJlZm9yZVxuICAgICAgICAgICAgICBjbGFzcz1cImFkZG9uLWxhYmVsXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICd0dy1yZXF1aXJlZC1tYXJrJzogbGltaXRDcHVSZXF1aXJlZCxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENQVVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgYXVpLWlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwibGltaXRDcHVSZXF1aXJlZFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGF1aS1zZWxlY3RcbiAgICAgICAgICAgICAgYXVpSW5wdXRBZGRvbkFmdGVyXG4gICAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ1bml0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF1aS1vcHRpb25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdW5pdCBvZiByZXNvdXJjZVVuaXRzWydjcHUnXVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInVuaXQudmFsdWVcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ1bml0LmxhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHVuaXQubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9hdWktb3B0aW9uPlxuICAgICAgICAgICAgPC9hdWktc2VsZWN0PlxuICAgICAgICAgIDwvYXVpLWlucHV0LWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGFjbC1lcnJvcnMtbWFwcGVyXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIGZvcm0uZ2V0KCdsaW1pdHMuY3B1LnZhbHVlJyk/LmRpcnR5IHx8XG4gICAgICAgICAgICAkYW55KGNvbnRyb2xDb250YWluZXI/LmZvcm1EaXJlY3RpdmUpPy5zdWJtaXR0ZWRcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtlcnJvcnNdPVwiZm9ybS5nZXQoJ2xpbWl0cy5jcHUudmFsdWUnKS5lcnJvcnNcIlxuICAgICAgICAgIFtlcnJvcnNNYXBwZXJdPVwie1xuICAgICAgICAgICAgY3B1X21heDogJ3JlcXVlc3RfZ3JlYXRlcl90aGFuX2xpbWl0c19lcnJvcicgfCB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtaW46XG4gICAgICAgICAgICAgIGxpbWl0Q3B1TWluXG4gICAgICAgICAgICAgIHwgcHVyZVxuICAgICAgICAgICAgICAgIDogZ2V0TWluT3JNYXhFcnJvcnNNYXBwZXJcbiAgICAgICAgICAgICAgICA6ICdtaW4nXG4gICAgICAgICAgICAgICAgOiAnY3B1J1xuICAgICAgICAgICAgICAgIDogdHJhbnNsYXRlLmxvY2FsZSxcbiAgICAgICAgICAgIG1heDpcbiAgICAgICAgICAgICAgbGltaXRDcHVNYXhcbiAgICAgICAgICAgICAgfCBwdXJlXG4gICAgICAgICAgICAgICAgOiBnZXRNaW5Pck1heEVycm9yc01hcHBlclxuICAgICAgICAgICAgICAgIDogJ21heCdcbiAgICAgICAgICAgICAgICA6ICdjcHUnXG4gICAgICAgICAgICAgICAgOiB0cmFuc2xhdGUubG9jYWxlLFxuICAgICAgICAgIH1cIlxuICAgICAgICAgIGNsYXNzPVwidHctdGV4dC1zIHR3LXRleHQtcmVkXCJcbiAgICAgICAgPlxuICAgICAgICA8L2FjbC1lcnJvcnMtbWFwcGVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0dy1mbGV4IHR3LWZsZXgtY29sIHR3LWZsZXgtMVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJpbnB1dC1ncm91cHMtd3JhcHBlciBtZW1vcnlcIlxuICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cIidtZW1vcnknXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxhdWktaW5wdXQtZ3JvdXA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGF1aUlucHV0QWRkb25CZWZvcmVcbiAgICAgICAgICAgICAgY2xhc3M9XCJhZGRvbi1sYWJlbFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAndHctcmVxdWlyZWQtbWFyayc6IGxpbWl0TWVtb3J5UmVxdWlyZWQsXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnbWVtb3J5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgYXVpLWlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwibGltaXRNZW1vcnlSZXF1aXJlZFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGF1aS1zZWxlY3RcbiAgICAgICAgICAgICAgYXVpSW5wdXRBZGRvbkFmdGVyXG4gICAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ1bml0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF1aS1vcHRpb25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdW5pdCBvZiByZXNvdXJjZVVuaXRzWydtZW1vcnknXVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInVuaXRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgdW5pdCB9fVxuICAgICAgICAgICAgICA8L2F1aS1vcHRpb24+XG4gICAgICAgICAgICA8L2F1aS1zZWxlY3Q+XG4gICAgICAgICAgPC9hdWktaW5wdXQtZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YWNsLWVycm9ycy1tYXBwZXJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgZm9ybS5nZXQoJ2xpbWl0cy5tZW1vcnkudmFsdWUnKT8uZGlydHkgfHxcbiAgICAgICAgICAgICRhbnkoY29udHJvbENvbnRhaW5lcj8uZm9ybURpcmVjdGl2ZSk/LnN1Ym1pdHRlZFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2Vycm9yc109XCJmb3JtLmdldCgnbGltaXRzLm1lbW9yeS52YWx1ZScpLmVycm9yc1wiXG4gICAgICAgICAgW2Vycm9yc01hcHBlcl09XCJ7XG4gICAgICAgICAgICBtZW1vcnlfbWF4OiAncmVxdWVzdF9ncmVhdGVyX3RoYW5fbGltaXRzX2Vycm9yJyB8IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1pbjpcbiAgICAgICAgICAgICAgbGltaXRNZW1vcnlNaW5cbiAgICAgICAgICAgICAgfCBwdXJlXG4gICAgICAgICAgICAgICAgOiBnZXRNaW5Pck1heEVycm9yc01hcHBlclxuICAgICAgICAgICAgICAgIDogJ21pbidcbiAgICAgICAgICAgICAgICA6ICdtZW1vcnknXG4gICAgICAgICAgICAgICAgOiB0cmFuc2xhdGUubG9jYWxlLFxuICAgICAgICAgICAgbWF4OlxuICAgICAgICAgICAgICBsaW1pdE1lbW9yeU1heFxuICAgICAgICAgICAgICB8IHB1cmVcbiAgICAgICAgICAgICAgICA6IGdldE1pbk9yTWF4RXJyb3JzTWFwcGVyXG4gICAgICAgICAgICAgICAgOiAnbWF4J1xuICAgICAgICAgICAgICAgIDogJ21lbW9yeSdcbiAgICAgICAgICAgICAgICA6IHRyYW5zbGF0ZS5sb2NhbGUsXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgY2xhc3M9XCJ0dy10ZXh0LXMgdHctdGV4dC1yZWRcIlxuICAgICAgICA+XG4gICAgICAgIDwvYWNsLWVycm9ycy1tYXBwZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+XG5cbjxuZy10ZW1wbGF0ZSAjcmVhZE9ubHlUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInJlc291cmNlX3JlcXVpcmVtZW50cy1kaXNwbGF5XCI+XG4gICAgPGRpdiBjbGFzcz1cInJlc291cmNlX3JlcXVpcmVtZW50cy1kaXNwbGF5LWl0ZW1cIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cInJlc291cmNlX3JlcXVpcmVtZW50cy1kaXNwbGF5LWl0ZW1fX2xhYmVsXCI+e3tcbiAgICAgICAgJ3Jlc291cmNlX3JlcXVpcmVtZW50c19yZXF1ZXN0cycgfCB0cmFuc2xhdGVcbiAgICAgIH19PC9sYWJlbD5cbiAgICAgIDxhdWktaWNvblxuICAgICAgICBpY29uPVwicHJvZDpjcHVcIlxuICAgICAgICBzaXplPVwiMTZweFwiXG4gICAgICAgIGNvbG9yPVwiIzYzNTliNFwiXG4gICAgICAgIG1hcmdpbj1cInJpZ2h0XCJcbiAgICAgICAgW3RpdGxlXT1cIidjcHUnIHwgdHJhbnNsYXRlXCJcbiAgICAgID48L2F1aS1pY29uXG4gICAgICA+PHNwYW4gY2xhc3M9XCJ0dy1tci0xNlwiXG4gICAgICAgID57e1xuICAgICAgICAgIGZvcm0uZ2V0KCdyZXF1ZXN0cycpLmdldCgnY3B1JykudmFsdWVcbiAgICAgICAgICAgIHwgcHVyZTogZ2V0UmVzb3VyY2VWYWx1ZVxuICAgICAgICAgICAgfCBhY2xGaWVsZE5vdEF2YWlsYWJsZVxuICAgICAgICB9fXt7XG4gICAgICAgICAgZm9ybS5nZXQoJ3JlcXVlc3RzJykuZ2V0KCdjcHUudW5pdCcpLnZhbHVlXG4gICAgICAgICAgICB8IHB1cmU6IGdldENwdVVuaXRMYWJlbFxuICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxhdWktaWNvblxuICAgICAgICBpY29uPVwicHJvZDptZW1vcnlcIlxuICAgICAgICBzaXplPVwiMTZweFwiXG4gICAgICAgIGNvbG9yPVwiIzAwN2NiNVwiXG4gICAgICAgIG1hcmdpbj1cInJpZ2h0XCJcbiAgICAgICAgW3RpdGxlXT1cIidtZW1vcnknIHwgdHJhbnNsYXRlXCJcbiAgICAgID48L2F1aS1pY29uXG4gICAgICA+e3tcbiAgICAgICAgZm9ybS5nZXQoJ3JlcXVlc3RzJykuZ2V0KCdtZW1vcnknKS52YWx1ZVxuICAgICAgICAgIHwgcHVyZTogZ2V0UmVzb3VyY2VWYWx1ZVxuICAgICAgICAgIHwgYWNsRmllbGROb3RBdmFpbGFibGVcbiAgICAgIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJlc291cmNlX3JlcXVpcmVtZW50cy1kaXNwbGF5LWl0ZW1cIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cInJlc291cmNlX3JlcXVpcmVtZW50cy1kaXNwbGF5LWl0ZW1fX2xhYmVsXCI+e3tcbiAgICAgICAgJ3Jlc291cmNlX3JlcXVpcmVtZW50c19saW1pdHMnIHwgdHJhbnNsYXRlXG4gICAgICB9fTwvbGFiZWw+XG4gICAgICA8YXVpLWljb25cbiAgICAgICAgaWNvbj1cInByb2Q6Y3B1XCJcbiAgICAgICAgc2l6ZT1cIjE2cHhcIlxuICAgICAgICBjb2xvcj1cIiM2MzU5YjRcIlxuICAgICAgICBtYXJnaW49XCJyaWdodFwiXG4gICAgICAgIFt0aXRsZV09XCInY3B1JyB8IHRyYW5zbGF0ZVwiXG4gICAgICA+PC9hdWktaWNvblxuICAgICAgPjxzcGFuIGNsYXNzPVwidHctbXItMTZcIlxuICAgICAgICA+e3tcbiAgICAgICAgICBmb3JtLmdldCgnbGltaXRzJykuZ2V0KCdjcHUnKS52YWx1ZVxuICAgICAgICAgICAgfCBwdXJlOiBnZXRSZXNvdXJjZVZhbHVlXG4gICAgICAgICAgICB8IGFjbEZpZWxkTm90QXZhaWxhYmxlXG4gICAgICAgIH19e3tcbiAgICAgICAgICBmb3JtLmdldCgnbGltaXRzJykuZ2V0KCdjcHUudW5pdCcpLnZhbHVlXG4gICAgICAgICAgICB8IHB1cmU6IGdldENwdVVuaXRMYWJlbFxuICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxhdWktaWNvblxuICAgICAgICBpY29uPVwicHJvZDptZW1vcnlcIlxuICAgICAgICBzaXplPVwiMTZweFwiXG4gICAgICAgIGNvbG9yPVwiIzAwN2NiNVwiXG4gICAgICAgIG1hcmdpbj1cInJpZ2h0XCJcbiAgICAgICAgW3RpdGxlXT1cIidtZW1vcnknIHwgdHJhbnNsYXRlXCJcbiAgICAgID48L2F1aS1pY29uXG4gICAgICA+e3tcbiAgICAgICAgZm9ybS5nZXQoJ2xpbWl0cycpLmdldCgnbWVtb3J5JykudmFsdWVcbiAgICAgICAgICB8IHB1cmU6IGdldFJlc291cmNlVmFsdWVcbiAgICAgICAgICB8IGFjbEZpZWxkTm90QXZhaWxhYmxlXG4gICAgICB9fVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|