@ng-formworks/daisyui 16.3.0 → 17.3.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.
@@ -1,223 +1,223 @@
1
- export const cssFrameworkCfgDaisyUI = {
2
- "name": "daisyui",
3
- "text": "DaisyUI",
4
- "scripts": [],
5
- "stylesheets": [
6
- //"/assets/cssframework/daisyui-framework.css"
7
- ],
8
- "widgetstyles": {
9
- "__themes__": [
10
- { "name": "daisyui_default", "text": "default" },
11
- { "name": "light", "text": "light" },
12
- { "name": "dark", "text": "dark" },
13
- { "name": "cupcake", "text": "cupcake" },
14
- { "name": "cmyk", "text": "cmyk" },
15
- { "name": "pastel", "text": "pastel" },
16
- { "name": "daisyui_leaf", "text": "leaf" }
17
- ],
18
- "$ref": {
19
- "fieldHtmlClass": "btn btn-sm btn-accent float-right"
20
- },
21
- "__array_item_nonref__": {
22
- "htmlClass": "border shadow-md p-1"
23
- },
24
- "__form_group__": {
25
- "htmlClass": "mb-1"
26
- },
27
- "__control_label__": {
28
- "labelHtmlClass": "control-label"
29
- },
30
- "__active__": {
31
- "activeClass": "active"
32
- },
33
- "__required_asterisk__": "text-danger",
34
- "__screen_reader__": "sr-only",
35
- "__remove_item__": "float-right text-2xl opacity-50",
36
- "__help_block__": "help-block",
37
- "__field_addon_left__": "input-group-addon",
38
- "__field_addon_right__": "input-group-addon",
39
- "alt-date": {
40
- "fieldHtmlClass": "input input-md input-bordered w-full"
41
- },
42
- "alt-datetime": {
43
- "fieldHtmlClass": "input input-md input-bordered w-full"
44
- },
45
- "__array__": {
46
- "htmlClass": "border shadow-md p-1"
47
- },
48
- "array": {},
49
- "authfieldset": {},
50
- "advancedfieldset": {},
51
- "button": {
52
- "fieldHtmlClass": "btn btn-sm btn-info"
53
- },
54
- "checkbox": {
55
- "fieldHtmlClass": "checkbox"
56
- },
57
- "checkboxes": {
58
- "fieldHtmlClass": "checkbox"
59
- },
60
- "checkboxbuttons": {
61
- "fieldHtmlClass": "w-px",
62
- "labelHtmlClass": "tabs tabs-boxed",
63
- "htmlClass": "btn-group",
64
- "itemLabelHtmlClass": "btn",
65
- "activeClass": "btn-info"
66
- },
67
- "checkboxes-inline": {
68
- "fieldHtmlClass": "checkbox",
69
- "htmlClass": "inline-flex",
70
- "itemLabelHtmlClass": "checkbox-inline"
71
- },
72
- "date": {
73
- "fieldHtmlClass": "input input-md input-bordered w-full"
74
- },
75
- "datetime-local": {
76
- "fieldHtmlClass": "input input-md input-bordered w-full"
77
- },
78
- "fieldset": {},
79
- "integer": {
80
- "fieldHtmlClass": "input input-md input-bordered w-full max-w-xs"
81
- },
82
- "number": {
83
- "fieldHtmlClass": "input input-md input-bordered w-full max-w-xs"
84
- },
85
- "optionfieldset": {},
86
- "password": {
87
- "fieldHtmlClass": "input input-md input-bordered w-full"
88
- },
89
- "radiobuttons": {
90
- "fieldHtmlClass": "w-px",
91
- "labelHtmlClass": "tabs tabs-boxed",
92
- "htmlClass": "btn-group",
93
- "itemLabelHtmlClass": "btn",
94
- "activeClass": "btn-info"
95
- },
96
- "radio": {
97
- "fieldHtmlClass": "radio"
98
- },
99
- "radios": {
100
- "fieldHtmlClass": "radio"
101
- },
102
- "radios-inline": {
103
- "htmlClass": "inline-flex",
104
- "fieldHtmlClass": "radio",
105
- "itemLabelHtmlClass": "radio-inline"
106
- },
107
- "range": {
108
- "fieldHtmlClass": "range range-info"
109
- },
110
- "section": {},
111
- "selectfieldset": {},
112
- "select": {
113
- "fieldHtmlClass": "select select-md select-bordered w-full"
114
- },
115
- "submit": {
116
- "fieldHtmlClass": "btn btn-sm btn-info rounded-full"
117
- },
118
- "text": {
119
- "fieldHtmlClass": "input input-md input-bordered w-full"
120
- },
121
- "tabs": {
122
- "labelHtmlClass": "tabs-md tabs-boxed",
123
- "htmlClass": "",
124
- "itemLabelHtmlClass": "tab",
125
- "activeClass": "tab-active"
126
- },
127
- "tabarray": {
128
- "labelHtmlClass": "tabs tabs-boxed",
129
- "htmlClass": "",
130
- "itemLabelHtmlClass": "tab",
131
- "activeClass": "tab-active"
132
- },
133
- "textarea": {
134
- "fieldHtmlClass": "textarea textarea-bordered w-full"
135
- },
136
- "default": {
137
- "fieldHtmlClass": "form-control"
138
- }
139
- }
140
- };
141
- //need to classify which classnames are controlled by DaisyU and which
142
- //are controlled by tailwind
143
- //-ones controlled by tailwind will have prefix tw-{{class name}}
144
- //-ones controlled by daisyui will have prefix tw-dui-{{class name}}
145
- export function getCssFrameworkCfgPrefixed(cssFrameworkCfg, prefixDUI = "tw-dui", prefixTW = "tw") {
146
- let classNamesIgnored = [
147
- 'control-label',
148
- 'help-block', 'input-group-addon', 'checkbox-inline'
149
- ];
150
- //TODO use regexs
151
- //-regex won't work the actual prefix classname needs to be
152
- //available as string literals as tailwind seems to scans for the
153
- //actual names so for ex: 'tw-' + 'bg-primary' wont be picked up,
154
- //has to be 'tw-bg-primary'
155
- //NB this is not used in code, but need during the taiwind scanning
156
- //to output the class names
157
- let classNamesTW = [
158
- 'w-full', 'mb-1', 'shadow-md', 'p-1',
159
- 'sr-only', 'text-2xl', 'opacity-50',
160
- 'float-right',
161
- 'w-px',
162
- 'border',
163
- 'max-w-xs', 'rounded-full', 'form-control', 'inline-flex',
164
- 'tw-w-full', 'tw-mb-1', 'tw-shadow-md', 'tw-p-1',
165
- 'tw-sr-only', 'tw-text-2xl', 'tw-opacity-50',
166
- 'tw-float-right',
167
- 'tw-w-px',
168
- 'tw-max-w-xs', 'tw-rounded-full', 'tw-form-control', 'tw-inline-flex',
169
- 'tw-border'
170
- ];
171
- let classNamesDUI = [
172
- 'btn', 'btn-sm', 'btn-accent', 'btn-info', 'btn-group',
173
- 'input', 'input-md', 'input-bordered',
174
- 'checkbox', 'tab', 'tabs', 'tabs-boxed', 'tabs-md', "tab-active",
175
- 'radio', 'radio-inline',
176
- 'range', 'range-info',
177
- 'select', 'select-md', 'select-bordered',
178
- 'textarea', 'textarea-bordered'
179
- ];
180
- let replaceClasses = (classList, prefDUI, prefTW, ignoredClasses) => {
181
- if (!Array.isArray(classList)) {
182
- classList = classList.split(" ");
183
- }
184
- return classList.map(cname => {
185
- if (ignoredClasses.indexOf(cname) >= 0) {
186
- return cname;
187
- }
188
- if (classNamesDUI.indexOf(cname) >= 0) {
189
- return prefDUI + "-" + cname;
190
- }
191
- return prefTW + "-" + cname;
192
- });
193
- };
194
- let cssFrameworkCfgPrefixed = JSON.parse(JSON.stringify(cssFrameworkCfg));
195
- let widgetNamesIgnore = ["__themes__"];
196
- let widgetNamesNoSubLevel = [
197
- "__required_asterisk__",
198
- "__screen_reader__",
199
- "__remove_item__",
200
- "__help_block__",
201
- "__field_addon_left__",
202
- "__field_addon_right__",
203
- ];
204
- Object.keys(cssFrameworkCfgPrefixed.widgetstyles).forEach(widgetName => {
205
- if (widgetNamesIgnore.indexOf(widgetName) >= 0) {
206
- return;
207
- }
208
- if (widgetNamesNoSubLevel.indexOf(widgetName) >= 0) {
209
- let cnames = cssFrameworkCfgPrefixed.widgetstyles[widgetName];
210
- cnames = replaceClasses(cnames, prefixDUI, prefixTW, classNamesIgnored);
211
- cssFrameworkCfgPrefixed.widgetstyles[widgetName] = cnames;
212
- return;
213
- }
214
- let widgetClassMap = cssFrameworkCfgPrefixed.widgetstyles[widgetName];
215
- Object.keys(widgetClassMap).forEach(classListName => {
216
- let classListAsArr = widgetClassMap[classListName];
217
- classListAsArr = replaceClasses(classListAsArr, prefixDUI, prefixTW, classNamesIgnored);
218
- widgetClassMap[classListName] = classListAsArr;
219
- });
220
- });
221
- return cssFrameworkCfgPrefixed;
222
- }
1
+ export const cssFrameworkCfgDaisyUI = {
2
+ "name": "daisyui",
3
+ "text": "DaisyUI",
4
+ "scripts": [],
5
+ "stylesheets": [
6
+ //"/assets/cssframework/daisyui-framework.css"
7
+ ],
8
+ "widgetstyles": {
9
+ "__themes__": [
10
+ { "name": "daisyui_default", "text": "default" },
11
+ { "name": "light", "text": "light" },
12
+ { "name": "dark", "text": "dark" },
13
+ { "name": "cupcake", "text": "cupcake" },
14
+ { "name": "cmyk", "text": "cmyk" },
15
+ { "name": "pastel", "text": "pastel" },
16
+ { "name": "daisyui_leaf", "text": "leaf" }
17
+ ],
18
+ "$ref": {
19
+ "fieldHtmlClass": "btn btn-sm btn-accent float-right"
20
+ },
21
+ "__array_item_nonref__": {
22
+ "htmlClass": "border shadow-md p-1"
23
+ },
24
+ "__form_group__": {
25
+ "htmlClass": "mb-1"
26
+ },
27
+ "__control_label__": {
28
+ "labelHtmlClass": "control-label"
29
+ },
30
+ "__active__": {
31
+ "activeClass": "active"
32
+ },
33
+ "__required_asterisk__": "text-danger",
34
+ "__screen_reader__": "sr-only",
35
+ "__remove_item__": "float-right text-2xl opacity-50",
36
+ "__help_block__": "help-block",
37
+ "__field_addon_left__": "input-group-addon",
38
+ "__field_addon_right__": "input-group-addon",
39
+ "alt-date": {
40
+ "fieldHtmlClass": "input input-md input-bordered w-full"
41
+ },
42
+ "alt-datetime": {
43
+ "fieldHtmlClass": "input input-md input-bordered w-full"
44
+ },
45
+ "__array__": {
46
+ "htmlClass": "border shadow-md p-1"
47
+ },
48
+ "array": {},
49
+ "authfieldset": {},
50
+ "advancedfieldset": {},
51
+ "button": {
52
+ "fieldHtmlClass": "btn btn-sm btn-info"
53
+ },
54
+ "checkbox": {
55
+ "fieldHtmlClass": "checkbox"
56
+ },
57
+ "checkboxes": {
58
+ "fieldHtmlClass": "checkbox"
59
+ },
60
+ "checkboxbuttons": {
61
+ "fieldHtmlClass": "w-px",
62
+ "labelHtmlClass": "tabs tabs-boxed",
63
+ "htmlClass": "btn-group",
64
+ "itemLabelHtmlClass": "btn",
65
+ "activeClass": "btn-info"
66
+ },
67
+ "checkboxes-inline": {
68
+ "fieldHtmlClass": "checkbox",
69
+ "htmlClass": "inline-flex",
70
+ "itemLabelHtmlClass": "checkbox-inline"
71
+ },
72
+ "date": {
73
+ "fieldHtmlClass": "input input-md input-bordered w-full"
74
+ },
75
+ "datetime-local": {
76
+ "fieldHtmlClass": "input input-md input-bordered w-full"
77
+ },
78
+ "fieldset": {},
79
+ "integer": {
80
+ "fieldHtmlClass": "input input-md input-bordered w-full max-w-xs"
81
+ },
82
+ "number": {
83
+ "fieldHtmlClass": "input input-md input-bordered w-full max-w-xs"
84
+ },
85
+ "optionfieldset": {},
86
+ "password": {
87
+ "fieldHtmlClass": "input input-md input-bordered w-full"
88
+ },
89
+ "radiobuttons": {
90
+ "fieldHtmlClass": "w-px",
91
+ "labelHtmlClass": "tabs tabs-boxed",
92
+ "htmlClass": "btn-group",
93
+ "itemLabelHtmlClass": "btn",
94
+ "activeClass": "btn-info"
95
+ },
96
+ "radio": {
97
+ "fieldHtmlClass": "radio"
98
+ },
99
+ "radios": {
100
+ "fieldHtmlClass": "radio"
101
+ },
102
+ "radios-inline": {
103
+ "htmlClass": "inline-flex",
104
+ "fieldHtmlClass": "radio",
105
+ "itemLabelHtmlClass": "radio-inline"
106
+ },
107
+ "range": {
108
+ "fieldHtmlClass": "range range-info"
109
+ },
110
+ "section": {},
111
+ "selectfieldset": {},
112
+ "select": {
113
+ "fieldHtmlClass": "select select-md select-bordered w-full"
114
+ },
115
+ "submit": {
116
+ "fieldHtmlClass": "btn btn-sm btn-info rounded-full"
117
+ },
118
+ "text": {
119
+ "fieldHtmlClass": "input input-md input-bordered w-full"
120
+ },
121
+ "tabs": {
122
+ "labelHtmlClass": "tabs-md tabs-boxed",
123
+ "htmlClass": "",
124
+ "itemLabelHtmlClass": "tab",
125
+ "activeClass": "tab-active"
126
+ },
127
+ "tabarray": {
128
+ "labelHtmlClass": "tabs tabs-boxed",
129
+ "htmlClass": "",
130
+ "itemLabelHtmlClass": "tab",
131
+ "activeClass": "tab-active"
132
+ },
133
+ "textarea": {
134
+ "fieldHtmlClass": "textarea textarea-bordered w-full"
135
+ },
136
+ "default": {
137
+ "fieldHtmlClass": "form-control"
138
+ }
139
+ }
140
+ };
141
+ //need to classify which classnames are controlled by DaisyU and which
142
+ //are controlled by tailwind
143
+ //-ones controlled by tailwind will have prefix tw-{{class name}}
144
+ //-ones controlled by daisyui will have prefix tw-dui-{{class name}}
145
+ export function getCssFrameworkCfgPrefixed(cssFrameworkCfg, prefixDUI = "tw-dui", prefixTW = "tw") {
146
+ let classNamesIgnored = [
147
+ 'control-label',
148
+ 'help-block', 'input-group-addon', 'checkbox-inline'
149
+ ];
150
+ //TODO use regexs
151
+ //-regex won't work the actual prefix classname needs to be
152
+ //available as string literals as tailwind seems to scans for the
153
+ //actual names so for ex: 'tw-' + 'bg-primary' wont be picked up,
154
+ //has to be 'tw-bg-primary'
155
+ //NB this is not used in code, but need during the taiwind scanning
156
+ //to output the class names
157
+ let classNamesTW = [
158
+ 'w-full', 'mb-1', 'shadow-md', 'p-1',
159
+ 'sr-only', 'text-2xl', 'opacity-50',
160
+ 'float-right',
161
+ 'w-px',
162
+ 'border',
163
+ 'max-w-xs', 'rounded-full', 'form-control', 'inline-flex',
164
+ 'tw-w-full', 'tw-mb-1', 'tw-shadow-md', 'tw-p-1',
165
+ 'tw-sr-only', 'tw-text-2xl', 'tw-opacity-50',
166
+ 'tw-float-right',
167
+ 'tw-w-px',
168
+ 'tw-max-w-xs', 'tw-rounded-full', 'tw-form-control', 'tw-inline-flex',
169
+ 'tw-border'
170
+ ];
171
+ let classNamesDUI = [
172
+ 'btn', 'btn-sm', 'btn-accent', 'btn-info', 'btn-group',
173
+ 'input', 'input-md', 'input-bordered',
174
+ 'checkbox', 'tab', 'tabs', 'tabs-boxed', 'tabs-md', "tab-active",
175
+ 'radio', 'radio-inline',
176
+ 'range', 'range-info',
177
+ 'select', 'select-md', 'select-bordered',
178
+ 'textarea', 'textarea-bordered'
179
+ ];
180
+ let replaceClasses = (classList, prefDUI, prefTW, ignoredClasses) => {
181
+ if (!Array.isArray(classList)) {
182
+ classList = classList.split(" ");
183
+ }
184
+ return classList.map(cname => {
185
+ if (ignoredClasses.indexOf(cname) >= 0) {
186
+ return cname;
187
+ }
188
+ if (classNamesDUI.indexOf(cname) >= 0) {
189
+ return prefDUI + "-" + cname;
190
+ }
191
+ return prefTW + "-" + cname;
192
+ });
193
+ };
194
+ let cssFrameworkCfgPrefixed = JSON.parse(JSON.stringify(cssFrameworkCfg));
195
+ let widgetNamesIgnore = ["__themes__"];
196
+ let widgetNamesNoSubLevel = [
197
+ "__required_asterisk__",
198
+ "__screen_reader__",
199
+ "__remove_item__",
200
+ "__help_block__",
201
+ "__field_addon_left__",
202
+ "__field_addon_right__",
203
+ ];
204
+ Object.keys(cssFrameworkCfgPrefixed.widgetstyles).forEach(widgetName => {
205
+ if (widgetNamesIgnore.indexOf(widgetName) >= 0) {
206
+ return;
207
+ }
208
+ if (widgetNamesNoSubLevel.indexOf(widgetName) >= 0) {
209
+ let cnames = cssFrameworkCfgPrefixed.widgetstyles[widgetName];
210
+ cnames = replaceClasses(cnames, prefixDUI, prefixTW, classNamesIgnored);
211
+ cssFrameworkCfgPrefixed.widgetstyles[widgetName] = cnames;
212
+ return;
213
+ }
214
+ let widgetClassMap = cssFrameworkCfgPrefixed.widgetstyles[widgetName];
215
+ Object.keys(widgetClassMap).forEach(classListName => {
216
+ let classListAsArr = widgetClassMap[classListName];
217
+ classListAsArr = replaceClasses(classListAsArr, prefixDUI, prefixTW, classNamesIgnored);
218
+ widgetClassMap[classListName] = classListAsArr;
219
+ });
220
+ });
221
+ return cssFrameworkCfgPrefixed;
222
+ }
223
223
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFpc3VpLWNzc2ZyYW1ld29yay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZvcm13b3Jrcy1kYWlzeXVpL3NyYy9saWIvZGFpc3VpLWNzc2ZyYW1ld29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBcUI7SUFDcEQsTUFBTSxFQUFFLFNBQVM7SUFDakIsTUFBTSxFQUFDLFNBQVM7SUFDaEIsU0FBUyxFQUFFLEVBQUU7SUFDYixhQUFhLEVBQUU7SUFDWCw4Q0FBOEM7S0FDakQ7SUFDRCxjQUFjLEVBQUU7UUFDWixZQUFZLEVBQUU7WUFDVixFQUFDLE1BQU0sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFDO1lBQzNDLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDO1lBQy9CLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDO1lBQzdCLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFDO1lBQ25DLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDO1lBQzdCLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDO1lBQ2pDLEVBQUMsTUFBTSxFQUFDLGNBQWMsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDO1NBRXhDO1FBQ0QsTUFBTSxFQUFFO1lBQ0osZ0JBQWdCLEVBQUUsbUNBQW1DO1NBQ3hEO1FBQ0QsdUJBQXVCLEVBQUU7WUFDckIsV0FBVyxFQUFFLHNCQUFzQjtTQUN0QztRQUNELGdCQUFnQixFQUFFO1lBQ2QsV0FBVyxFQUFFLE1BQU07U0FDdEI7UUFDRCxtQkFBbUIsRUFBRTtZQUNqQixnQkFBZ0IsRUFBRSxlQUFlO1NBQ3BDO1FBQ0QsWUFBWSxFQUFFO1lBQ1YsYUFB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O1NBQ1Y7UUFDRCxJQUFHLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBRSxDQUFDLEVBQUM7WUFDN0MsSUFBSSxNQUFNLEdBQUUsdUJBQXVCLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdELE1BQU0sR0FBQyxjQUFjLENBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNuRSx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUMsTUFBTSxDQUFDO1lBQ3hELE9BQU87U0FDVDtRQUNELElBQUksY0FBYyxHQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUEsRUFBRTtZQUMvQyxJQUFJLGNBQWMsR0FBaUIsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2pFLGNBQWMsR0FBQyxjQUFjLENBQUMsY0FBYyxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNuRixjQUFjLENBQUMsYUFBYSxDQUFDLEdBQUMsY0FBYyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFBO0lBRU4sQ0FBQyxDQUFDLENBQUE7SUFDRixPQUFPLHVCQUF1QixDQUFDO0FBRW5DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjc3NfZncgfSBmcm9tIFwiQG5nLWZvcm13b3Jrcy9jc3NmcmFtZXdvcmtcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBjc3NGcmFtZXdvcmtDZmdEYWlzeVVJOmNzc19mdy5mcmFtZXdvcmtjZmc9e1xyXG4gICAgXCJuYW1lXCI6IFwiZGFpc3l1aVwiLFxyXG4gICAgXCJ0ZXh0XCI6XCJEYWlzeVVJXCIsXHJcbiAgICBcInNjcmlwdHNcIjogW10sXHJcbiAgICBcInN0eWxlc2hlZXRzXCI6IFtcclxuICAgICAgICAvL1wiL2Fzc2V0cy9jc3NmcmFtZXdvcmsvZGFpc3l1aS1mcmFtZXdvcmsuY3NzXCJcclxuICAgIF0sXHJcbiAgICBcIndpZGdldHN0eWxlc1wiOiB7XHJcbiAgICAgICAgXCJfX3RoZW1lc19fXCI6IFtcclxuICAgICAgICAgICAge1wibmFtZVwiOlwiZGFpc3l1aV9kZWZhdWx0XCIsXCJ0ZXh0XCI6XCJkZWZhdWx0XCJ9LFxyXG4gICAgICAgICAgICB7XCJuYW1lXCI6XCJsaWdodFwiLFwidGV4dFwiOlwibGlnaHRcIn0sIFxyXG4gICAgICAgICAgICB7XCJuYW1lXCI6XCJkYXJrXCIsXCJ0ZXh0XCI6XCJkYXJrXCJ9LCBcclxuICAgICAgICAgICAge1wibmFtZVwiOlwiY3VwY2FrZVwiLFwidGV4dFwiOlwiY3VwY2FrZVwifSwgXHJcbiAgICAgICAgICAgIHtcIm5hbWVcIjpcImNteWtcIixcInRleHRcIjpcImNteWtcIn0sIFxyXG4gICAgICAgICAgICB7XCJuYW1lXCI6XCJwYXN0ZWxcIixcInRleHRcIjpcInBhc3RlbFwifSxcclxuICAgICAgICAgICAge1wibmFtZVwiOlwiZGFpc3l1aV9sZWFmXCIsXCJ0ZXh0XCI6XCJsZWFmXCJ9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgXCIkcmVmXCI6IHtcclxuICAgICAgICAgICAgXCJmaWVsZEh0bWxDbGFzc1wiOiBcImJ0biBidG4tc20gYnRuLWFjY2VudCBmbG9hdC1yaWdodFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIl9fYXJyYXlfaXRlbV9ub25yZWZfX1wiOiB7XHJcbiAgICAgICAgICAgIFwiaHRtbENsYXNzXCI6IFwiYm9yZGVyIHNoYWRvdy1tZCBwLTFcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJfX2Zvcm1fZ3JvdXBfX1wiOiB7XHJcbiAgICAgICAgICAgIFwiaHRtbENsYXNzXCI6IFwibWItMVwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIl9fY29udHJvbF9sYWJlbF9fXCI6IHtcclxuICAgICAgICAgICAgXCJsYWJlbEh0bWxDbGFzc1wiOiBcImNvbnRyb2wtbGFiZWxcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJfX2FjdGl2ZV9fXCI6IHtcclxuICAgICAgICAgICAgXCJhY3RpdmVDbGFzc1wiOiBcImFjdGl2ZVwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIl9fcmVxdWlyZWRfYXN0ZXJpc2tfX1wiOiBcInRleHQtZGFuZ2VyXCIsXHJcbiAgICAgICAgXCJfX3NjcmVlbl9yZWFkZXJfX1wiOiBcInNyLW9ubHlcIixcclxuICAgICAgICBcIl9fcmVtb3ZlX2l0ZW1fX1wiOiBcImZsb2F0LXJpZ2h0IHRleHQtMnhsIG9wYWNpdHktNTBcIixcclxuICAgICAgICBcIl9faGVscF9ibG9ja19fXCI6IFwiaGVscC1ibG9ja1wiLFxyXG4gICAgICAgIFwiX19maWVsZF9hZGRvbl9sZWZ0X19cIjogXCJpbnB1dC1ncm91cC1hZGRvblwiLFxyXG4gICAgICAgIFwiX19maWVsZF9hZGRvbl9yaWdodF9fXCI6IFwiaW5wdXQtZ3JvdXAtYWRkb25cIixcclxuICAgICAgICBcImFsdC1kYXRlXCI6IHtcclxuICAgICAgICAgICAgXCJmaWVsZEh0bWxDbGFzc1wiOiBcImlucHV0IGlucHV0LW1kIGlucHV0LWJvcmRlcmVkIHctZnVsbFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFsdC1kYXRldGltZVwiOiB7XHJcbiAgICAgICAgICAgIFwiZmllbGRIdG1sQ2xhc3NcIjogXCJpbnB1dCBpbnB1dC1tZCBpbnB1dC1ib3JkZXJlZCB3LWZ1bGxcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJfX2FycmF5X19cIjoge1xyXG4gICAgICAgICAgICBcImh0bWxDbGFzc1wiOiBcImJvcmRlciBzaGFkb3ctbWQgcC0xXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYXJyYXlcIjoge30sXHJcbiAgICAgICAgXCJhdXRoZmllbGRzZXRcIjoge30sXHJcbiAgICAgICAgXCJhZHZhbmNlZGZpZWxkc2V0XCI6IHt9LFxyXG4gICAgICAgIFwiYnV0dG9uXCI6IHtcclxuICAgICAgICAgICAgXCJmaWVsZEh0bWxDbGFzc1wiOiBcImJ0biBidG4tc20gYnRuLWluZm9cIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJjaGVja2JveFwiOiB7XHJcbiAgICAgICAgICAgIFwiZmllbGRIdG1sQ2xhc3NcIjogXCJjaGVja2JveFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImNoZWNrYm94ZXNcIjoge1xyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwiY2hlY2tib3hcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJjaGVja2JveGJ1dHRvbnNcIjoge1xyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwidy1weFwiLFxyXG4gICAgICAgICAgICBcImxhYmVsSHRtbENsYXNzXCI6IFwidGFicyB0YWJzLWJveGVkXCIsXHJcbiAgICAgICAgICAgIFwiaHRtbENsYXNzXCI6IFwiYnRuLWdyb3VwXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbUxhYmVsSHRtbENsYXNzXCI6IFwiYnRuXCIsXHJcbiAgICAgICAgICAgIFwiYWN0aXZlQ2xhc3NcIjogXCJidG4taW5mb1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImNoZWNrYm94ZXMtaW5saW5lXCI6IHtcclxuICAgICAgICAgICAgXCJmaWVsZEh0bWxDbGFzc1wiOiBcImNoZWNrYm94XCIsXHJcbiAgICAgICAgICAgIFwiaHRtbENsYXNzXCI6IFwiaW5saW5lLWZsZXhcIixcclxuICAgICAgICAgICAgXCJpdGVtTGFiZWxIdG1sQ2xhc3NcIjogXCJjaGVja2JveC1pbmxpbmVcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJkYXRlXCI6IHtcclxuICAgICAgICAgICAgXCJmaWVsZEh0bWxDbGFzc1wiOiBcImlucHV0IGlucHV0LW1kIGlucHV0LWJvcmRlcmVkIHctZnVsbFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImRhdGV0aW1lLWxvY2FsXCI6IHtcclxuICAgICAgICAgICAgXCJmaWVsZEh0bWxDbGFzc1wiOiBcImlucHV0IGlucHV0LW1kIGlucHV0LWJvcmRlcmVkIHctZnVsbFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImZpZWxkc2V0XCI6IHt9LFxyXG4gICAgICAgIFwiaW50ZWdlclwiOiB7XHJcbiAgICAgICAgICAgIFwiZmllbGRIdG1sQ2xhc3NcIjogXCJpbnB1dCBpbnB1dC1tZCBpbnB1dC1ib3JkZXJlZCB3LWZ1bGwgbWF4LXcteHNcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJudW1iZXJcIjoge1xyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwiaW5wdXQgaW5wdXQtbWQgaW5wdXQtYm9yZGVyZWQgdy1mdWxsIG1heC13LXhzXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwib3B0aW9uZmllbGRzZXRcIjoge30sXHJcbiAgICAgICAgXCJwYXNzd29yZFwiOiB7XHJcbiAgICAgICAgICAgIFwiZmllbGRIdG1sQ2xhc3NcIjogXCJpbnB1dCBpbnB1dC1tZCBpbnB1dC1ib3JkZXJlZCB3LWZ1bGxcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJyYWRpb2J1dHRvbnNcIjoge1xyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwidy1weFwiLFxyXG4gICAgICAgICAgICBcImxhYmVsSHRtbENsYXNzXCI6IFwidGFicyB0YWJzLWJveGVkXCIsXHJcbiAgICAgICAgICAgIFwiaHRtbENsYXNzXCI6IFwiYnRuLWdyb3VwXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbUxhYmVsSHRtbENsYXNzXCI6IFwiYnRuXCIsXHJcbiAgICAgICAgICAgIFwiYWN0aXZlQ2xhc3NcIjogXCJidG4taW5mb1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcInJhZGlvXCI6IHtcclxuICAgICAgICAgICAgXCJmaWVsZEh0bWxDbGFzc1wiOiBcInJhZGlvXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwicmFkaW9zXCI6IHtcclxuICAgICAgICAgICAgXCJmaWVsZEh0bWxDbGFzc1wiOiBcInJhZGlvXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwicmFkaW9zLWlubGluZVwiOiB7XHJcbiAgICAgICAgICAgIFwiaHRtbENsYXNzXCI6IFwiaW5saW5lLWZsZXhcIixcclxuICAgICAgICAgICAgXCJmaWVsZEh0bWxDbGFzc1wiOiBcInJhZGlvXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbUxhYmVsSHRtbENsYXNzXCI6IFwicmFkaW8taW5saW5lXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwicmFuZ2VcIjoge1xyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwicmFuZ2UgcmFuZ2UtaW5mb1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcInNlY3Rpb25cIjoge30sXHJcbiAgICAgICAgXCJzZWxlY3RmaWVsZHNldFwiOiB7fSxcclxuICAgICAgICBcInNlbGVjdFwiOiB7XHJcbiAgICAgICAgICAgIFwiZmllbGRIdG1sQ2xhc3NcIjogXCJzZWxlY3Qgc2VsZWN0LW1kIHNlbGVjdC1ib3JkZXJlZCB3LWZ1bGxcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJzdWJtaXRcIjoge1xyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwiYnRuIGJ0bi1zbSBidG4taW5mbyByb3VuZGVkLWZ1bGxcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJ0ZXh0XCI6IHtcclxuICAgICAgICAgICAgXCJmaWVsZEh0bWxDbGFzc1wiOiBcImlucHV0IGlucHV0LW1kIGlucHV0LWJvcmRlcmVkIHctZnVsbFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcInRhYnNcIjoge1xyXG4gICAgICAgICAgICBcImxhYmVsSHRtbENsYXNzXCI6IFwidGFicy1tZCB0YWJzLWJveGVkXCIsXHJcbiAgICAgICAgICAgIFwiaHRtbENsYXNzXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbUxhYmVsSHRtbENsYXNzXCI6IFwidGFiXCIsXHJcbiAgICAgICAgICAgIFwiYWN0aXZlQ2xhc3NcIjogXCJ0YWItYWN0aXZlXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwidGFiYXJyYXlcIjoge1xyXG4gICAgICAgICAgICBcImxhYmVsSHRtbENsYXNzXCI6IFwidGFicyB0YWJzLWJveGVkXCIsXHJcbiAgICAgICAgICAgIFwiaHRtbENsYXNzXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbUxhYmVsSHRtbENsYXNzXCI6IFwidGFiXCIsXHJcbiAgICAgICAgICAgIFwiYWN0aXZlQ2xhc3NcIjogXCJ0YWItYWN0aXZlXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwidGV4dGFyZWFcIjoge1xyXG4gICAgICAgICAgICBcImZpZWxkSHRtbENsYXNzXCI6IFwidGV4dGFyZWEgdGV4dGFyZWEtYm9yZGVyZWQgdy1mdWxsXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiZGVmYXVsdFwiOiB7XHJcbiAgICAgICAgICAgIFwiZmllbGRIdG1sQ2xhc3NcIjogXCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vL25lZWQgdG8gY2xhc3NpZnkgd2hpY2ggY2xhc3NuYW1lcyBhcmUgY29udHJvbGxlZCBieSBEYWlzeVUgYW5kIHdoaWNoXHJcbi8vYXJlIGNvbnRyb2xsZWQgYnkgdGFpbHdpbmRcclxuLy8tb25lcyBjb250cm9sbGVkIGJ5IHRhaWx3aW5kIHdpbGwgaGF2ZSBwcmVmaXggdHcte3tjbGFzcyBuYW1lfX1cclxuLy8tb25lcyBjb250cm9sbGVkIGJ5IGRhaXN5dWkgd2lsbCBoYXZlIHByZWZpeCB0dy1kdWkte3tjbGFzcyBuYW1lfX1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENzc0ZyYW1ld29ya0NmZ1ByZWZpeGVkKGNzc0ZyYW1ld29ya0NmZzpjc3NfZncuZnJhbWV3b3JrY2ZnLHByZWZpeERVST1cInR3LWR1aVwiLHByZWZpeFRXPVwidHdcIik6Y3NzX2Z3LmZyYW1ld29ya2NmZ3tcclxuICAgIFxyXG4gICAgbGV0IGNsYXNzTmFtZXNJZ25vcmVkPVtcclxuICAgICAgICBcclxuICAgICAgICAnY29udHJvbC1sYWJlbCcsXHJcbiAgICAgICAgJ2hlbHAtYmxvY2snLCdpbnB1dC1ncm91cC1hZGRvbicsJ2NoZWNrYm94LWlubGluZSdcclxuICAgICAgICBcclxuICAgIF07XHJcblxyXG4gICAgLy9UT0RPIHVzZSByZWdleHNcclxuICAgIC8vLXJlZ2V4IHdvbid0IHdvcmsgdGhlIGFjdHVhbCBwcmVmaXggY2xhc3NuYW1lIG5lZWRzIHRvIGJlIFxyXG4gICAgLy9hdmFpbGFibGUgYXMgc3RyaW5nIGxpdGVyYWxzIGFzIHRhaWx3aW5kIHNlZW1zIHRvIHNjYW5zIGZvciB0aGVcclxuICAgIC8vYWN0dWFsIG5hbWVzIHNvIGZvciBleDogJ3R3LScgKyAnYmctcHJpbWFyeScgd29udCBiZSBwaWNrZWQgdXAsXHJcbiAgICAvL2hhcyB0byBiZSAndHctYmctcHJpbWFyeSdcclxuXHJcbiAgICAvL05CIHRoaXMgaXMgbm90IHVzZWQgaW4gY29kZSwgYnV0IG5lZWQgZHVyaW5nIHRoZSB0YWl3aW5kIHNjYW5uaW5nIFxyXG4gICAgLy90byBvdXRwdXQgdGhlIGNsYXNzIG5hbWVzXHJcbiAgICBsZXQgY2xhc3NOYW1lc1RXPVtcclxuICAgICAgICAndy1mdWxsJywnbWItMScsJ3NoYWRvdy1tZCcsJ3AtMScsXHJcbiAgICAgICAgJ3NyLW9ubHknLCd0ZXh0LTJ4bCcsICdvcGFjaXR5LTUwJyxcclxuICAgICAgICAnZmxvYXQtcmlnaHQnLFxyXG4gICAgICAgICd3LXB4JyxcclxuICAgICAgICAnYm9yZGVyJyxcclxuICAgICAgICAnbWF4LXcteHMnLCdyb3VuZGVkLWZ1bGwnLCdmb3JtLWNvbnRyb2wnLCdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgJ3R3LXctZnVsbCcsJ3R3LW1iLTEnLCd0dy1zaGFkb3ctbWQnLCd0dy1wLTEnLFxyXG4gICAgICAgICd0dy1zci1vbmx5JywndHctdGV4dC0yeGwnLCAndHctb3BhY2l0eS01MCcsXHJcbiAgICAgICAgJ3R3LWZsb2F0LXJpZ2h0JyxcclxuICAgICAgICAndHctdy1weCcsXHJcbiAgICAgICAgJ3R3LW1heC13LXhzJywndHctcm91bmRlZC1mdWxsJywndHctZm9ybS1jb250cm9sJywndHctaW5saW5lLWZsZXgnLFxyXG4gICAgICAgICd0dy1ib3JkZXInXHJcbiAgICAgICAgXHJcbiAgICBdO1xyXG5cclxuICAgIGxldCBjbGFzc05hbWVzRFVJPVtcclxuICAgICAgICAnYnRuJywgJ2J0bi1zbScsICdidG4tYWNjZW50JywnYnRuLWluZm8nLCdidG4tZ3JvdXAnLFxyXG4gICAgICAgICdpbnB1dCcsICdpbnB1dC1tZCcgLCdpbnB1dC1ib3JkZXJlZCcsXHJcbiAgICAgICAgJ2NoZWNrYm94JywndGFiJywndGFicycsICd0YWJzLWJveGVkJywndGFicy1tZCcsXCJ0YWItYWN0aXZlXCIsXHJcbiAgICAgICAgJ3JhZGlvJywncmFkaW8taW5saW5lJyxcclxuICAgICAgICAncmFuZ2UnLCAncmFuZ2UtaW5mbycsXHJcbiAgICAgICAgJ3NlbGVjdCcsICdzZWxlY3QtbWQnLCAnc2VsZWN0LWJvcmRlcmVkJyxcclxuICAgICAgICAndGV4dGFyZWEnLCd0ZXh0YXJlYS1ib3JkZXJlZCdcclxuICAgICAgICBcclxuICAgIF07XHJcbiAgICBsZXQgcmVwbGFjZUNsYXNzZXM9KGNsYXNzTGlzdDpzdHJpbmdbXXxzdHJpbmcscHJlZkRVSTpzdHJpbmcscHJlZlRXOnN0cmluZyxpZ25vcmVkQ2xhc3NlczpzdHJpbmdbXSk9PntcclxuICAgICAgICBpZighQXJyYXkuaXNBcnJheShjbGFzc0xpc3QpKXtcclxuICAgICAgICAgICAgY2xhc3NMaXN0PWNsYXNzTGlzdC5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjbGFzc0xpc3QubWFwKGNuYW1lPT57XHJcbiAgICAgICAgICAgIGlmKGlnbm9yZWRDbGFzc2VzLmluZGV4T2YoY25hbWUpPj0wKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjbmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihjbGFzc05hbWVzRFVJLmluZGV4T2YoY25hbWUpPj0wKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmVmRFVJK1wiLVwiK2NuYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBwcmVmVFcrXCItXCIrY25hbWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGxldCBjc3NGcmFtZXdvcmtDZmdQcmVmaXhlZD1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNzc0ZyYW1ld29ya0NmZykpO1xyXG4gICAgbGV0IHdpZGdldE5hbWVzSWdub3JlPVtcIl9fdGhlbWVzX19cIl07XHJcbiAgICBsZXQgd2lkZ2V0TmFtZXNOb1N1YkxldmVsPVtcclxuICAgICAgICBcIl9fcmVxdWlyZWRfYXN0ZXJpc2tfX1wiLFxyXG4gICAgICAgIFwiX19zY3JlZW5fcmVhZGVyX19cIixcclxuICAgICAgICBcIl9fcmVtb3ZlX2l0ZW1fX1wiLFxyXG4gICAgICAgIFwiX19oZWxwX2Jsb2NrX19cIixcclxuICAgICAgICBcIl9fZmllbGRfYWRkb25fbGVmdF9fXCIsXHJcbiAgICAgICAgXCJfX2ZpZWxkX2FkZG9uX3JpZ2h0X19cIixcclxuICAgIF07XHJcbiAgICBPYmplY3Qua2V5cyhjc3NGcmFtZXdvcmtDZmdQcmVmaXhlZC53aWRnZXRzdHlsZXMpLmZvckVhY2god2lkZ2V0TmFtZT0+e1xyXG4gICAgICAgIGlmKHdpZGdldE5hbWVzSWdub3JlLmluZGV4T2Yod2lkZ2V0TmFtZSk+PTApe1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHdpZGdldE5hbWVzTm9TdWJMZXZlbC5pbmRleE9mKHdpZGdldE5hbWUpPj0wKXtcclxuICAgICAgICAgICBsZXQgY25hbWVzPSBjc3NGcmFtZXdvcmtDZmdQcmVmaXhlZC53aWRnZXRzdHlsZXNbd2lkZ2V0TmFtZV07XHJcbiAgICAgICAgICAgY25hbWVzPXJlcGxhY2VDbGFzc2VzKGNuYW1lcyxwcmVmaXhEVUkscHJlZml4VFcsY2xhc3NOYW1lc0lnbm9yZWQpO1xyXG4gICAgICAgICAgIGNzc0ZyYW1ld29ya0NmZ1ByZWZpeGVkLndpZGdldHN0eWxlc1t3aWRnZXROYW1lXT1jbmFtZXM7XHJcbiAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgd2lkZ2V0Q2xhc3NNYXA9Y3NzRnJhbWV3b3JrQ2ZnUHJlZml4ZWQud2lkZ2V0c3R5bGVzW3dpZGdldE5hbWVdO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHdpZGdldENsYXNzTWFwKS5mb3JFYWNoKGNsYXNzTGlzdE5hbWU9PntcclxuICAgICAgICAgICAgbGV0IGNsYXNzTGlzdEFzQXJyOnN0cmluZ1tdfHN0cmluZz13aWRnZXRDbGFzc01hcFtjbGFzc0xpc3ROYW1lXTtcclxuICAgICAgICAgICAgY2xhc3NMaXN0QXNBcnI9cmVwbGFjZUNsYXNzZXMoY2xhc3NMaXN0QXNBcnIscHJlZml4RFVJLHByZWZpeFRXLGNsYXNzTmFtZXNJZ25vcmVkKTtcclxuICAgICAgICAgICAgd2lkZ2V0Q2xhc3NNYXBbY2xhc3NMaXN0TmFtZV09Y2xhc3NMaXN0QXNBcnI7XHJcbiAgICAgICAgfSlcclxuICAgICAgICBcclxuICAgIH0pXHJcbiAgICByZXR1cm4gY3NzRnJhbWV3b3JrQ2ZnUHJlZml4ZWQ7XHJcblxyXG59XHJcblxyXG4iXX0=