@libs-ui/components-drag-drop 0.2.304 → 0.2.306-10
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 +51 -45
- package/drag-drop.directive.d.ts +5 -4
- package/drag-drop.service.d.ts +3 -3
- package/drag-item-in-container-virtual-scroll.directive.d.ts +5 -5
- package/drag-item.directive.d.ts +3 -3
- package/drag-scroll.directive.d.ts +5 -5
- package/esm2022/defines/css.define.mjs +18 -16
- package/esm2022/demo/demo.component.mjs +184 -157
- package/esm2022/drag-drop.directive.mjs +65 -47
- package/esm2022/drag-drop.service.mjs +9 -5
- package/esm2022/drag-item-in-container-virtual-scroll.directive.mjs +21 -20
- package/esm2022/drag-item.directive.mjs +27 -22
- package/esm2022/drag-scroll.directive.mjs +21 -15
- package/esm2022/index.mjs +1 -1
- package/esm2022/interfaces/event.interface.mjs +1 -1
- package/fesm2022/libs-ui-components-drag-drop.mjs +319 -256
- package/fesm2022/libs-ui-components-drag-drop.mjs.map +1 -1
- package/interfaces/event.interface.d.ts +1 -1
- package/package.json +3 -3
|
@@ -6,13 +6,7 @@ import { LibsUiDragItemDirective } from '../drag-item.directive';
|
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
export class LibsUiDragDropDemoComponent {
|
|
8
8
|
// Basic List Items
|
|
9
|
-
basicItems = [
|
|
10
|
-
'Task 1',
|
|
11
|
-
'Task 2',
|
|
12
|
-
'Task 3',
|
|
13
|
-
'Task 4',
|
|
14
|
-
'Task 5'
|
|
15
|
-
];
|
|
9
|
+
basicItems = ['Task 1', 'Task 2', 'Task 3', 'Task 4', 'Task 5'];
|
|
16
10
|
// Kanban Board Columns
|
|
17
11
|
columnsIds = ['todo', 'in-progress', 'done'];
|
|
18
12
|
columns = [
|
|
@@ -24,15 +18,15 @@ export class LibsUiDragDropDemoComponent {
|
|
|
24
18
|
id: 1,
|
|
25
19
|
title: 'Implement drag and drop',
|
|
26
20
|
description: 'Add drag and drop functionality to the component',
|
|
27
|
-
status: 'todo'
|
|
21
|
+
status: 'todo',
|
|
28
22
|
},
|
|
29
23
|
{
|
|
30
24
|
id: 2,
|
|
31
25
|
title: 'Add animations',
|
|
32
26
|
description: 'Implement smooth animations for drag and drop',
|
|
33
|
-
status: 'todo'
|
|
34
|
-
}
|
|
35
|
-
]
|
|
27
|
+
status: 'todo',
|
|
28
|
+
},
|
|
29
|
+
],
|
|
36
30
|
},
|
|
37
31
|
{
|
|
38
32
|
id: 'in-progress',
|
|
@@ -42,9 +36,9 @@ export class LibsUiDragDropDemoComponent {
|
|
|
42
36
|
id: 3,
|
|
43
37
|
title: 'Fix styling issues',
|
|
44
38
|
description: 'Resolve CSS conflicts in the component',
|
|
45
|
-
status: 'in-progress'
|
|
46
|
-
}
|
|
47
|
-
]
|
|
39
|
+
status: 'in-progress',
|
|
40
|
+
},
|
|
41
|
+
],
|
|
48
42
|
},
|
|
49
43
|
{
|
|
50
44
|
id: 'done',
|
|
@@ -54,28 +48,28 @@ export class LibsUiDragDropDemoComponent {
|
|
|
54
48
|
id: 4,
|
|
55
49
|
title: 'Setup project structure',
|
|
56
50
|
description: 'Initialize the project with necessary configurations',
|
|
57
|
-
status: 'done'
|
|
58
|
-
}
|
|
59
|
-
]
|
|
60
|
-
}
|
|
51
|
+
status: 'done',
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
},
|
|
61
55
|
];
|
|
62
56
|
// Nested Items
|
|
63
57
|
nestedItems = [
|
|
64
58
|
{
|
|
65
59
|
id: 1,
|
|
66
60
|
title: 'Project A',
|
|
67
|
-
subItems: ['Task 1', 'Task 2', 'Task 3']
|
|
61
|
+
subItems: ['Task 1', 'Task 2', 'Task 3'],
|
|
68
62
|
},
|
|
69
63
|
{
|
|
70
64
|
id: 2,
|
|
71
65
|
title: 'Project B',
|
|
72
|
-
subItems: ['Task 4', 'Task 5']
|
|
66
|
+
subItems: ['Task 4', 'Task 5'],
|
|
73
67
|
},
|
|
74
68
|
{
|
|
75
69
|
id: 3,
|
|
76
70
|
title: 'Project C',
|
|
77
|
-
subItems: ['Task 6', 'Task 7', 'Task 8']
|
|
78
|
-
}
|
|
71
|
+
subItems: ['Task 6', 'Task 7', 'Task 8'],
|
|
72
|
+
},
|
|
79
73
|
];
|
|
80
74
|
// API Documentation
|
|
81
75
|
inputsDoc = [
|
|
@@ -83,99 +77,99 @@ export class LibsUiDragDropDemoComponent {
|
|
|
83
77
|
name: 'items',
|
|
84
78
|
type: 'Array<unknown>',
|
|
85
79
|
default: '[]',
|
|
86
|
-
description: 'Array of items to be displayed in the container'
|
|
80
|
+
description: 'Array of items to be displayed in the container',
|
|
87
81
|
},
|
|
88
82
|
{
|
|
89
83
|
name: 'mode',
|
|
90
84
|
type: "'move' | 'copy' | 'deepCopy'",
|
|
91
85
|
default: "'move'",
|
|
92
|
-
description: 'Mode for drag and drop operations'
|
|
86
|
+
description: 'Mode for drag and drop operations',
|
|
93
87
|
},
|
|
94
88
|
{
|
|
95
89
|
name: 'directionDrag',
|
|
96
90
|
type: "'horizontal' | 'vertical'",
|
|
97
91
|
default: 'undefined',
|
|
98
|
-
description: 'Direction of drag movement'
|
|
92
|
+
description: 'Direction of drag movement',
|
|
99
93
|
},
|
|
100
94
|
{
|
|
101
95
|
name: 'viewEncapsulation',
|
|
102
96
|
type: "'emulated' | 'none'",
|
|
103
97
|
default: "'emulated'",
|
|
104
|
-
description: 'View encapsulation mode for styling'
|
|
98
|
+
description: 'View encapsulation mode for styling',
|
|
105
99
|
},
|
|
106
100
|
{
|
|
107
101
|
name: 'disableDragContainer',
|
|
108
102
|
type: 'boolean',
|
|
109
103
|
default: 'undefined',
|
|
110
|
-
description: 'Whether to disable drag operations for the container'
|
|
104
|
+
description: 'Whether to disable drag operations for the container',
|
|
111
105
|
},
|
|
112
106
|
{
|
|
113
107
|
name: 'acceptDragSameGroup',
|
|
114
108
|
type: 'boolean',
|
|
115
109
|
default: 'false',
|
|
116
|
-
description: 'Whether to accept drag operations within the same group'
|
|
110
|
+
description: 'Whether to accept drag operations within the same group',
|
|
117
111
|
},
|
|
118
112
|
{
|
|
119
113
|
name: 'placeholder',
|
|
120
114
|
type: 'boolean',
|
|
121
115
|
default: 'true',
|
|
122
|
-
description: 'Whether to show placeholder during drag'
|
|
116
|
+
description: 'Whether to show placeholder during drag',
|
|
123
117
|
},
|
|
124
118
|
{
|
|
125
119
|
name: 'groupName',
|
|
126
120
|
type: 'string',
|
|
127
121
|
default: "'groupDragAndDropDefault'",
|
|
128
|
-
description: 'Name of the group for drag and drop operations'
|
|
122
|
+
description: 'Name of the group for drag and drop operations',
|
|
129
123
|
},
|
|
130
124
|
{
|
|
131
125
|
name: 'dropToGroupName',
|
|
132
126
|
type: 'Array<string> | null',
|
|
133
127
|
default: 'null',
|
|
134
|
-
description: 'List of group names that can accept drops from this container'
|
|
128
|
+
description: 'List of group names that can accept drops from this container',
|
|
135
129
|
},
|
|
136
130
|
{
|
|
137
131
|
name: 'stylesOverride',
|
|
138
132
|
type: 'Array<{ className: string, styles: string }>',
|
|
139
133
|
default: 'undefined',
|
|
140
|
-
description: 'Custom styles to override default drag-drop styling'
|
|
141
|
-
}
|
|
134
|
+
description: 'Custom styles to override default drag-drop styling',
|
|
135
|
+
},
|
|
142
136
|
];
|
|
143
137
|
outputsDoc = [
|
|
144
138
|
{
|
|
145
139
|
name: 'outDragStartContainer',
|
|
146
140
|
type: 'IDragStart',
|
|
147
|
-
description: 'Event emitted when dragging starts in the container'
|
|
141
|
+
description: 'Event emitted when dragging starts in the container',
|
|
148
142
|
},
|
|
149
143
|
{
|
|
150
144
|
name: 'outDragOverContainer',
|
|
151
145
|
type: 'IDragOver',
|
|
152
|
-
description: 'Event emitted when dragging over the container'
|
|
146
|
+
description: 'Event emitted when dragging over the container',
|
|
153
147
|
},
|
|
154
148
|
{
|
|
155
149
|
name: 'outDragLeaveContainer',
|
|
156
150
|
type: 'IDragLeave',
|
|
157
|
-
description: 'Event emitted when dragging leaves the container'
|
|
151
|
+
description: 'Event emitted when dragging leaves the container',
|
|
158
152
|
},
|
|
159
153
|
{
|
|
160
154
|
name: 'outDragEndContainer',
|
|
161
155
|
type: 'IDragEnd',
|
|
162
|
-
description: 'Event emitted when dragging ends in the container'
|
|
156
|
+
description: 'Event emitted when dragging ends in the container',
|
|
163
157
|
},
|
|
164
158
|
{
|
|
165
159
|
name: 'outDroppedContainer',
|
|
166
160
|
type: 'IDrop',
|
|
167
|
-
description: 'Event emitted when an item is dropped in the container'
|
|
161
|
+
description: 'Event emitted when an item is dropped in the container',
|
|
168
162
|
},
|
|
169
163
|
{
|
|
170
164
|
name: 'outDroppedContainerEmpty',
|
|
171
165
|
type: 'IDrop',
|
|
172
|
-
description: 'Event emitted when an item is dropped in an empty container'
|
|
166
|
+
description: 'Event emitted when an item is dropped in an empty container',
|
|
173
167
|
},
|
|
174
168
|
{
|
|
175
169
|
name: 'outFunctionControl',
|
|
176
170
|
type: 'IDragDropFunctionControlEvent',
|
|
177
|
-
description: 'Event emitted to control drag-drop functionality'
|
|
178
|
-
}
|
|
171
|
+
description: 'Event emitted to control drag-drop functionality',
|
|
172
|
+
},
|
|
179
173
|
];
|
|
180
174
|
// Interface Documentation
|
|
181
175
|
interfacesDoc = [
|
|
@@ -187,7 +181,7 @@ export class LibsUiDragDropDemoComponent {
|
|
|
187
181
|
elementKeepContainer?: boolean;
|
|
188
182
|
itemDragInfo?: IItemDragInfo;
|
|
189
183
|
}`,
|
|
190
|
-
description: 'Interface for drag operation events, containing information about the dragged element and mouse position'
|
|
184
|
+
description: 'Interface for drag operation events, containing information about the dragged element and mouse position',
|
|
191
185
|
},
|
|
192
186
|
{
|
|
193
187
|
name: 'IDragStart',
|
|
@@ -196,7 +190,7 @@ export class LibsUiDragDropDemoComponent {
|
|
|
196
190
|
elementDrag: HTMLElement;
|
|
197
191
|
itemDragInfo?: IItemDragInfo;
|
|
198
192
|
}`,
|
|
199
|
-
description: 'Interface for drag start events, triggered when dragging begins'
|
|
193
|
+
description: 'Interface for drag start events, triggered when dragging begins',
|
|
200
194
|
},
|
|
201
195
|
{
|
|
202
196
|
name: 'IDragOver',
|
|
@@ -206,7 +200,7 @@ export class LibsUiDragDropDemoComponent {
|
|
|
206
200
|
elementDragOver: HTMLElement;
|
|
207
201
|
itemDragInfo?: IItemDragInfo;
|
|
208
202
|
}`,
|
|
209
|
-
description: 'Interface for drag over events, triggered when an element is dragged over another element'
|
|
203
|
+
description: 'Interface for drag over events, triggered when an element is dragged over another element',
|
|
210
204
|
},
|
|
211
205
|
{
|
|
212
206
|
name: 'IDragLeave',
|
|
@@ -215,7 +209,7 @@ export class LibsUiDragDropDemoComponent {
|
|
|
215
209
|
elementDragLeave: HTMLElement;
|
|
216
210
|
itemDragInfo?: IItemDragInfo;
|
|
217
211
|
}`,
|
|
218
|
-
description: 'Interface for drag leave events, triggered when a dragged element leaves another element'
|
|
212
|
+
description: 'Interface for drag leave events, triggered when a dragged element leaves another element',
|
|
219
213
|
},
|
|
220
214
|
{
|
|
221
215
|
name: 'IDragEnd',
|
|
@@ -224,7 +218,7 @@ export class LibsUiDragDropDemoComponent {
|
|
|
224
218
|
elementDrag: HTMLElement;
|
|
225
219
|
itemDragInfo?: IItemDragInfo;
|
|
226
220
|
}`,
|
|
227
|
-
description: 'Interface for drag end events, triggered when dragging ends'
|
|
221
|
+
description: 'Interface for drag end events, triggered when dragging ends',
|
|
228
222
|
},
|
|
229
223
|
{
|
|
230
224
|
name: 'IDrop',
|
|
@@ -233,7 +227,7 @@ export class LibsUiDragDropDemoComponent {
|
|
|
233
227
|
elementDrop: HTMLElement;
|
|
234
228
|
itemDragInfo?: IItemDragInfo;
|
|
235
229
|
}`,
|
|
236
|
-
description: 'Interface for drop events, triggered when an element is dropped'
|
|
230
|
+
description: 'Interface for drop events, triggered when an element is dropped',
|
|
237
231
|
},
|
|
238
232
|
{
|
|
239
233
|
name: 'IItemDragInfo',
|
|
@@ -247,7 +241,7 @@ export class LibsUiDragDropDemoComponent {
|
|
|
247
241
|
containerDrag?: HTMLElement;
|
|
248
242
|
containerDrop?: HTMLElement;
|
|
249
243
|
}`,
|
|
250
|
-
description: 'Interface containing information about the dragged item and its containers'
|
|
244
|
+
description: 'Interface containing information about the dragged item and its containers',
|
|
251
245
|
},
|
|
252
246
|
{
|
|
253
247
|
name: 'IDragItemInContainerVirtualScroll',
|
|
@@ -261,7 +255,7 @@ export class LibsUiDragDropDemoComponent {
|
|
|
261
255
|
dragBoundaryAcceptMouseLeaveContainer?: boolean;
|
|
262
256
|
ignoreStopEvent?: boolean;
|
|
263
257
|
}`,
|
|
264
|
-
description: 'Interface for virtual scrolling drag operations, containing information about drag boundaries and container elements'
|
|
258
|
+
description: 'Interface for virtual scrolling drag operations, containing information about drag boundaries and container elements',
|
|
265
259
|
},
|
|
266
260
|
{
|
|
267
261
|
name: 'IMousePosition',
|
|
@@ -269,15 +263,15 @@ export class LibsUiDragDropDemoComponent {
|
|
|
269
263
|
clientX: number;
|
|
270
264
|
clientY: number;
|
|
271
265
|
}`,
|
|
272
|
-
description: 'Interface representing mouse position coordinates'
|
|
266
|
+
description: 'Interface representing mouse position coordinates',
|
|
273
267
|
},
|
|
274
268
|
{
|
|
275
269
|
name: 'IDragDropFunctionControlEvent',
|
|
276
270
|
code: `interface IDragDropFunctionControlEvent {
|
|
277
271
|
setAttributeElementAndItemDrag: () => Promise<void>;
|
|
278
272
|
}`,
|
|
279
|
-
description: 'Interface for drag and drop control functions'
|
|
280
|
-
}
|
|
273
|
+
description: 'Interface for drag and drop control functions',
|
|
274
|
+
},
|
|
281
275
|
];
|
|
282
276
|
// Features
|
|
283
277
|
features = [
|
|
@@ -285,26 +279,26 @@ export class LibsUiDragDropDemoComponent {
|
|
|
285
279
|
id: 1,
|
|
286
280
|
icon: '🔄',
|
|
287
281
|
title: 'Flexible Drag and Drop',
|
|
288
|
-
description: 'Support for container-to-container dragging with customizable group names and drop zones'
|
|
282
|
+
description: 'Support for container-to-container dragging with customizable group names and drop zones',
|
|
289
283
|
},
|
|
290
284
|
{
|
|
291
285
|
id: 2,
|
|
292
286
|
icon: '📜',
|
|
293
287
|
title: 'Virtual Scrolling',
|
|
294
|
-
description: 'Efficient handling of large lists with virtual scrolling support'
|
|
288
|
+
description: 'Efficient handling of large lists with virtual scrolling support',
|
|
295
289
|
},
|
|
296
290
|
{
|
|
297
291
|
id: 3,
|
|
298
292
|
icon: '🎯',
|
|
299
293
|
title: 'Custom Boundaries',
|
|
300
|
-
description: 'Define custom drag boundaries and drop zones for precise control'
|
|
294
|
+
description: 'Define custom drag boundaries and drop zones for precise control',
|
|
301
295
|
},
|
|
302
296
|
{
|
|
303
297
|
id: 4,
|
|
304
298
|
icon: '🎨',
|
|
305
299
|
title: 'Styling Options',
|
|
306
|
-
description: 'Customizable styles for drag items and containers'
|
|
307
|
-
}
|
|
300
|
+
description: 'Customizable styles for drag items and containers',
|
|
301
|
+
},
|
|
308
302
|
];
|
|
309
303
|
// Code Examples
|
|
310
304
|
codeExamples = [
|
|
@@ -320,7 +314,7 @@ export class LibsUiDragDropDemoComponent {
|
|
|
320
314
|
{{ item }}
|
|
321
315
|
</div>
|
|
322
316
|
}
|
|
323
|
-
</div>
|
|
317
|
+
</div>`,
|
|
324
318
|
},
|
|
325
319
|
{
|
|
326
320
|
id: 2,
|
|
@@ -344,8 +338,8 @@ export class LibsUiDragDropDemoComponent {
|
|
|
344
338
|
{{ item }}
|
|
345
339
|
</div>
|
|
346
340
|
}
|
|
347
|
-
</div>
|
|
348
|
-
}
|
|
341
|
+
</div>`,
|
|
342
|
+
},
|
|
349
343
|
];
|
|
350
344
|
/**
|
|
351
345
|
* Copy text to clipboard
|
|
@@ -369,14 +363,15 @@ export class LibsUiDragDropDemoComponent {
|
|
|
369
363
|
<section class="intro-section">
|
|
370
364
|
<h2>Introduction</h2>
|
|
371
365
|
<p>
|
|
372
|
-
<code>@libs-ui/components-drag-drop</code>
|
|
366
|
+
<code>@libs-ui/components-drag-drop</code>
|
|
367
|
+
is a powerful Angular component that enables drag and drop functionality with features like virtual scrolling, multi-selection, and custom boundaries.
|
|
373
368
|
</p>
|
|
374
369
|
</section>
|
|
375
370
|
|
|
376
371
|
<section class="installation-section">
|
|
377
372
|
<h2>Installation</h2>
|
|
378
373
|
<p>To install the library, use npm or yarn:</p>
|
|
379
|
-
|
|
374
|
+
|
|
380
375
|
<div class="install-command">
|
|
381
376
|
<pre>
|
|
382
377
|
<code>npm install @libs-ui/components-drag-drop</code>
|
|
@@ -385,9 +380,9 @@ export class LibsUiDragDropDemoComponent {
|
|
|
385
380
|
(outClick)="copyToClipboard('npm install @libs-ui/components-drag-drop')" />
|
|
386
381
|
</pre>
|
|
387
382
|
</div>
|
|
388
|
-
|
|
383
|
+
|
|
389
384
|
<p>Or with yarn:</p>
|
|
390
|
-
|
|
385
|
+
|
|
391
386
|
<div class="install-command">
|
|
392
387
|
<pre>
|
|
393
388
|
<code>yarn add @libs-ui/components-drag-drop</code>
|
|
@@ -405,12 +400,14 @@ export class LibsUiDragDropDemoComponent {
|
|
|
405
400
|
<div class="demo-example">
|
|
406
401
|
<h3>Basic List</h3>
|
|
407
402
|
<div class="list-container">
|
|
408
|
-
<div
|
|
409
|
-
|
|
410
|
-
|
|
403
|
+
<div
|
|
404
|
+
LibsUiComponentsDragContainerDirective
|
|
405
|
+
[(items)]="basicItems"
|
|
406
|
+
[acceptDragSameGroup]="true">
|
|
411
407
|
@for (item of basicItems; track item) {
|
|
412
|
-
<div
|
|
413
|
-
|
|
408
|
+
<div
|
|
409
|
+
class="list-item"
|
|
410
|
+
LibsUiDragItemDirective>
|
|
414
411
|
<span class="item-icon">📋</span>
|
|
415
412
|
<span class="item-text">{{ item }}</span>
|
|
416
413
|
</div>
|
|
@@ -424,19 +421,23 @@ export class LibsUiDragDropDemoComponent {
|
|
|
424
421
|
<h3>Kanban Board</h3>
|
|
425
422
|
<div class="kanban-board">
|
|
426
423
|
@for (column of columns; track column) {
|
|
427
|
-
<div
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
424
|
+
<div
|
|
425
|
+
class="kanban-column"
|
|
426
|
+
LibsUiComponentsDragContainerDirective
|
|
427
|
+
[(items)]="column.items"
|
|
428
|
+
[groupName]="column.id"
|
|
429
|
+
[dropToGroupName]="columnsIds"
|
|
430
|
+
[acceptDragSameGroup]="true">
|
|
433
431
|
<h4>{{ column.title }}</h4>
|
|
434
432
|
@for (item of column.items; track item) {
|
|
435
|
-
<div
|
|
436
|
-
|
|
433
|
+
<div
|
|
434
|
+
class="kanban-item"
|
|
435
|
+
LibsUiDragItemDirective>
|
|
437
436
|
<div class="kanban-item-header">
|
|
438
437
|
<span class="item-title">{{ item.title }}</span>
|
|
439
|
-
<span
|
|
438
|
+
<span
|
|
439
|
+
class="item-status"
|
|
440
|
+
[class]="'status-' + item.status">
|
|
440
441
|
{{ item.status }}
|
|
441
442
|
</span>
|
|
442
443
|
</div>
|
|
@@ -452,25 +453,29 @@ export class LibsUiDragDropDemoComponent {
|
|
|
452
453
|
<div class="demo-example">
|
|
453
454
|
<h3>Nested Containers copy</h3>
|
|
454
455
|
<div class="nested-container">
|
|
455
|
-
<div
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
456
|
+
<div
|
|
457
|
+
LibsUiComponentsDragContainerDirective
|
|
458
|
+
[(items)]="nestedItems"
|
|
459
|
+
[groupName]="'parent'"
|
|
460
|
+
[mode]="'copy'"
|
|
461
|
+
[acceptDragSameGroup]="true">
|
|
460
462
|
@for (item of nestedItems; track item) {
|
|
461
|
-
<div
|
|
462
|
-
|
|
463
|
+
<div
|
|
464
|
+
class="nested-item"
|
|
465
|
+
LibsUiDragItemDirective>
|
|
463
466
|
<div class="nested-item-header">
|
|
464
467
|
<span class="item-title">{{ item.title }}</span>
|
|
465
468
|
</div>
|
|
466
469
|
<div class="nested-item-content">
|
|
467
|
-
<div
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
470
|
+
<div
|
|
471
|
+
LibsUiComponentsDragContainerDirective
|
|
472
|
+
[(items)]="item.subItems"
|
|
473
|
+
[groupName]="'child'"
|
|
474
|
+
[acceptDragSameGroup]="true">
|
|
471
475
|
@for (subItem of item.subItems; track subItem) {
|
|
472
|
-
<div
|
|
473
|
-
|
|
476
|
+
<div
|
|
477
|
+
class="sub-item"
|
|
478
|
+
LibsUiDragItemDirective>
|
|
474
479
|
{{ subItem }}
|
|
475
480
|
</div>
|
|
476
481
|
}
|
|
@@ -486,7 +491,7 @@ export class LibsUiDragDropDemoComponent {
|
|
|
486
491
|
|
|
487
492
|
<section class="api-doc-section">
|
|
488
493
|
<h2>API Documentation</h2>
|
|
489
|
-
|
|
494
|
+
|
|
490
495
|
<h3>Inputs</h3>
|
|
491
496
|
<div class="table-container">
|
|
492
497
|
<table class="api-table">
|
|
@@ -501,10 +506,14 @@ export class LibsUiDragDropDemoComponent {
|
|
|
501
506
|
<tbody>
|
|
502
507
|
@for (input of inputsDoc; track input.name) {
|
|
503
508
|
<tr>
|
|
504
|
-
<td
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
<td>
|
|
509
|
+
<td>
|
|
510
|
+
<code>{{ input.name }}</code>
|
|
511
|
+
</td>
|
|
512
|
+
<td>
|
|
513
|
+
<code>{{ input.type }}</code>
|
|
514
|
+
</td>
|
|
515
|
+
<td>{{ input.default }}</td>
|
|
516
|
+
<td>{{ input.description }}</td>
|
|
508
517
|
</tr>
|
|
509
518
|
}
|
|
510
519
|
</tbody>
|
|
@@ -524,9 +533,13 @@ export class LibsUiDragDropDemoComponent {
|
|
|
524
533
|
<tbody>
|
|
525
534
|
@for (output of outputsDoc; track output.name) {
|
|
526
535
|
<tr>
|
|
527
|
-
<td
|
|
528
|
-
|
|
529
|
-
|
|
536
|
+
<td>
|
|
537
|
+
<code>{{ output.name }}</code>
|
|
538
|
+
</td>
|
|
539
|
+
<td>
|
|
540
|
+
<code>{{ output.type }}</code>
|
|
541
|
+
</td>
|
|
542
|
+
<td>{{ output.description }}</td>
|
|
530
543
|
</tr>
|
|
531
544
|
}
|
|
532
545
|
</tbody>
|
|
@@ -539,9 +552,9 @@ export class LibsUiDragDropDemoComponent {
|
|
|
539
552
|
<div class="interface-docs">
|
|
540
553
|
@for (interfaceItem of interfacesDoc; track interfaceItem.name) {
|
|
541
554
|
<div class="interface-item">
|
|
542
|
-
<h3>{{interfaceItem.name}}</h3>
|
|
555
|
+
<h3>{{ interfaceItem.name }}</h3>
|
|
543
556
|
<pre><code>{{interfaceItem.code}}</code></pre>
|
|
544
|
-
<p>{{interfaceItem.description}}</p>
|
|
557
|
+
<p>{{ interfaceItem.description }}</p>
|
|
545
558
|
</div>
|
|
546
559
|
}
|
|
547
560
|
</div>
|
|
@@ -552,10 +565,10 @@ export class LibsUiDragDropDemoComponent {
|
|
|
552
565
|
<ul>
|
|
553
566
|
@for (feature of features; track feature.id) {
|
|
554
567
|
<li>
|
|
555
|
-
<span class="feature-icon">{{feature.icon}}</span>
|
|
568
|
+
<span class="feature-icon">{{ feature.icon }}</span>
|
|
556
569
|
<div class="feature-info">
|
|
557
|
-
<h3>{{feature.title}}</h3>
|
|
558
|
-
<p>{{feature.description}}</p>
|
|
570
|
+
<h3>{{ feature.title }}</h3>
|
|
571
|
+
<p>{{ feature.description }}</p>
|
|
559
572
|
</div>
|
|
560
573
|
</li>
|
|
561
574
|
}
|
|
@@ -567,7 +580,7 @@ export class LibsUiDragDropDemoComponent {
|
|
|
567
580
|
<div class="code-examples">
|
|
568
581
|
@for (example of codeExamples; track example.id) {
|
|
569
582
|
<div class="code-example">
|
|
570
|
-
<h3>{{example.title}}</h3>
|
|
583
|
+
<h3>{{ example.title }}</h3>
|
|
571
584
|
<pre><code [innerHTML]="example.code"></code></pre>
|
|
572
585
|
</div>
|
|
573
586
|
}
|
|
@@ -579,12 +592,7 @@ export class LibsUiDragDropDemoComponent {
|
|
|
579
592
|
}
|
|
580
593
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiDragDropDemoComponent, decorators: [{
|
|
581
594
|
type: Component,
|
|
582
|
-
args: [{ selector: 'lib-drag-drop-demo', standalone: true, imports: [
|
|
583
|
-
CommonModule,
|
|
584
|
-
LibsUiComponentsDragContainerDirective,
|
|
585
|
-
LibsUiDragItemDirective,
|
|
586
|
-
LibsUiComponentsButtonsButtonComponent
|
|
587
|
-
], template: `
|
|
595
|
+
args: [{ selector: 'lib-drag-drop-demo', standalone: true, imports: [CommonModule, LibsUiComponentsDragContainerDirective, LibsUiDragItemDirective, LibsUiComponentsButtonsButtonComponent], template: `
|
|
588
596
|
<div class="page-container">
|
|
589
597
|
<header>
|
|
590
598
|
<h1>Demo Drag and Drop Component</h1>
|
|
@@ -595,14 +603,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
595
603
|
<section class="intro-section">
|
|
596
604
|
<h2>Introduction</h2>
|
|
597
605
|
<p>
|
|
598
|
-
<code>@libs-ui/components-drag-drop</code>
|
|
606
|
+
<code>@libs-ui/components-drag-drop</code>
|
|
607
|
+
is a powerful Angular component that enables drag and drop functionality with features like virtual scrolling, multi-selection, and custom boundaries.
|
|
599
608
|
</p>
|
|
600
609
|
</section>
|
|
601
610
|
|
|
602
611
|
<section class="installation-section">
|
|
603
612
|
<h2>Installation</h2>
|
|
604
613
|
<p>To install the library, use npm or yarn:</p>
|
|
605
|
-
|
|
614
|
+
|
|
606
615
|
<div class="install-command">
|
|
607
616
|
<pre>
|
|
608
617
|
<code>npm install @libs-ui/components-drag-drop</code>
|
|
@@ -611,9 +620,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
611
620
|
(outClick)="copyToClipboard('npm install @libs-ui/components-drag-drop')" />
|
|
612
621
|
</pre>
|
|
613
622
|
</div>
|
|
614
|
-
|
|
623
|
+
|
|
615
624
|
<p>Or with yarn:</p>
|
|
616
|
-
|
|
625
|
+
|
|
617
626
|
<div class="install-command">
|
|
618
627
|
<pre>
|
|
619
628
|
<code>yarn add @libs-ui/components-drag-drop</code>
|
|
@@ -631,12 +640,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
631
640
|
<div class="demo-example">
|
|
632
641
|
<h3>Basic List</h3>
|
|
633
642
|
<div class="list-container">
|
|
634
|
-
<div
|
|
635
|
-
|
|
636
|
-
|
|
643
|
+
<div
|
|
644
|
+
LibsUiComponentsDragContainerDirective
|
|
645
|
+
[(items)]="basicItems"
|
|
646
|
+
[acceptDragSameGroup]="true">
|
|
637
647
|
@for (item of basicItems; track item) {
|
|
638
|
-
<div
|
|
639
|
-
|
|
648
|
+
<div
|
|
649
|
+
class="list-item"
|
|
650
|
+
LibsUiDragItemDirective>
|
|
640
651
|
<span class="item-icon">📋</span>
|
|
641
652
|
<span class="item-text">{{ item }}</span>
|
|
642
653
|
</div>
|
|
@@ -650,19 +661,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
650
661
|
<h3>Kanban Board</h3>
|
|
651
662
|
<div class="kanban-board">
|
|
652
663
|
@for (column of columns; track column) {
|
|
653
|
-
<div
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
664
|
+
<div
|
|
665
|
+
class="kanban-column"
|
|
666
|
+
LibsUiComponentsDragContainerDirective
|
|
667
|
+
[(items)]="column.items"
|
|
668
|
+
[groupName]="column.id"
|
|
669
|
+
[dropToGroupName]="columnsIds"
|
|
670
|
+
[acceptDragSameGroup]="true">
|
|
659
671
|
<h4>{{ column.title }}</h4>
|
|
660
672
|
@for (item of column.items; track item) {
|
|
661
|
-
<div
|
|
662
|
-
|
|
673
|
+
<div
|
|
674
|
+
class="kanban-item"
|
|
675
|
+
LibsUiDragItemDirective>
|
|
663
676
|
<div class="kanban-item-header">
|
|
664
677
|
<span class="item-title">{{ item.title }}</span>
|
|
665
|
-
<span
|
|
678
|
+
<span
|
|
679
|
+
class="item-status"
|
|
680
|
+
[class]="'status-' + item.status">
|
|
666
681
|
{{ item.status }}
|
|
667
682
|
</span>
|
|
668
683
|
</div>
|
|
@@ -678,25 +693,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
678
693
|
<div class="demo-example">
|
|
679
694
|
<h3>Nested Containers copy</h3>
|
|
680
695
|
<div class="nested-container">
|
|
681
|
-
<div
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
696
|
+
<div
|
|
697
|
+
LibsUiComponentsDragContainerDirective
|
|
698
|
+
[(items)]="nestedItems"
|
|
699
|
+
[groupName]="'parent'"
|
|
700
|
+
[mode]="'copy'"
|
|
701
|
+
[acceptDragSameGroup]="true">
|
|
686
702
|
@for (item of nestedItems; track item) {
|
|
687
|
-
<div
|
|
688
|
-
|
|
703
|
+
<div
|
|
704
|
+
class="nested-item"
|
|
705
|
+
LibsUiDragItemDirective>
|
|
689
706
|
<div class="nested-item-header">
|
|
690
707
|
<span class="item-title">{{ item.title }}</span>
|
|
691
708
|
</div>
|
|
692
709
|
<div class="nested-item-content">
|
|
693
|
-
<div
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
710
|
+
<div
|
|
711
|
+
LibsUiComponentsDragContainerDirective
|
|
712
|
+
[(items)]="item.subItems"
|
|
713
|
+
[groupName]="'child'"
|
|
714
|
+
[acceptDragSameGroup]="true">
|
|
697
715
|
@for (subItem of item.subItems; track subItem) {
|
|
698
|
-
<div
|
|
699
|
-
|
|
716
|
+
<div
|
|
717
|
+
class="sub-item"
|
|
718
|
+
LibsUiDragItemDirective>
|
|
700
719
|
{{ subItem }}
|
|
701
720
|
</div>
|
|
702
721
|
}
|
|
@@ -712,7 +731,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
712
731
|
|
|
713
732
|
<section class="api-doc-section">
|
|
714
733
|
<h2>API Documentation</h2>
|
|
715
|
-
|
|
734
|
+
|
|
716
735
|
<h3>Inputs</h3>
|
|
717
736
|
<div class="table-container">
|
|
718
737
|
<table class="api-table">
|
|
@@ -727,10 +746,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
727
746
|
<tbody>
|
|
728
747
|
@for (input of inputsDoc; track input.name) {
|
|
729
748
|
<tr>
|
|
730
|
-
<td
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
<td>
|
|
749
|
+
<td>
|
|
750
|
+
<code>{{ input.name }}</code>
|
|
751
|
+
</td>
|
|
752
|
+
<td>
|
|
753
|
+
<code>{{ input.type }}</code>
|
|
754
|
+
</td>
|
|
755
|
+
<td>{{ input.default }}</td>
|
|
756
|
+
<td>{{ input.description }}</td>
|
|
734
757
|
</tr>
|
|
735
758
|
}
|
|
736
759
|
</tbody>
|
|
@@ -750,9 +773,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
750
773
|
<tbody>
|
|
751
774
|
@for (output of outputsDoc; track output.name) {
|
|
752
775
|
<tr>
|
|
753
|
-
<td
|
|
754
|
-
|
|
755
|
-
|
|
776
|
+
<td>
|
|
777
|
+
<code>{{ output.name }}</code>
|
|
778
|
+
</td>
|
|
779
|
+
<td>
|
|
780
|
+
<code>{{ output.type }}</code>
|
|
781
|
+
</td>
|
|
782
|
+
<td>{{ output.description }}</td>
|
|
756
783
|
</tr>
|
|
757
784
|
}
|
|
758
785
|
</tbody>
|
|
@@ -765,9 +792,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
765
792
|
<div class="interface-docs">
|
|
766
793
|
@for (interfaceItem of interfacesDoc; track interfaceItem.name) {
|
|
767
794
|
<div class="interface-item">
|
|
768
|
-
<h3>{{interfaceItem.name}}</h3>
|
|
795
|
+
<h3>{{ interfaceItem.name }}</h3>
|
|
769
796
|
<pre><code>{{interfaceItem.code}}</code></pre>
|
|
770
|
-
<p>{{interfaceItem.description}}</p>
|
|
797
|
+
<p>{{ interfaceItem.description }}</p>
|
|
771
798
|
</div>
|
|
772
799
|
}
|
|
773
800
|
</div>
|
|
@@ -778,10 +805,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
778
805
|
<ul>
|
|
779
806
|
@for (feature of features; track feature.id) {
|
|
780
807
|
<li>
|
|
781
|
-
<span class="feature-icon">{{feature.icon}}</span>
|
|
808
|
+
<span class="feature-icon">{{ feature.icon }}</span>
|
|
782
809
|
<div class="feature-info">
|
|
783
|
-
<h3>{{feature.title}}</h3>
|
|
784
|
-
<p>{{feature.description}}</p>
|
|
810
|
+
<h3>{{ feature.title }}</h3>
|
|
811
|
+
<p>{{ feature.description }}</p>
|
|
785
812
|
</div>
|
|
786
813
|
</li>
|
|
787
814
|
}
|
|
@@ -793,7 +820,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
793
820
|
<div class="code-examples">
|
|
794
821
|
@for (example of codeExamples; track example.id) {
|
|
795
822
|
<div class="code-example">
|
|
796
|
-
<h3>{{example.title}}</h3>
|
|
823
|
+
<h3>{{ example.title }}</h3>
|
|
797
824
|
<pre><code [innerHTML]="example.code"></code></pre>
|
|
798
825
|
</div>
|
|
799
826
|
}
|
|
@@ -803,4 +830,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
803
830
|
</div>
|
|
804
831
|
`, styles: [".page-container{max-width:1200px;margin:0 auto;padding:20px;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;line-height:1.6;color:#333}header{text-align:center;padding:40px 0;background-color:#fff;border-radius:8px;margin-bottom:30px;box-shadow:0 2px 5px #0000001a}header h1{font-size:2.5rem;color:#2c3e50;margin-bottom:10px}header p{font-size:1.2rem;color:#7f8c8d}section{background-color:#fff;border-radius:8px;padding:30px;margin-bottom:30px;box-shadow:0 2px 5px #0000001a}h2{font-size:1.8rem;color:#2c3e50;margin-bottom:20px;padding-bottom:10px;border-bottom:2px solid #ecf0f1}h3{font-size:1.4rem;color:#34495e;margin-bottom:15px}h4{font-size:1.2rem;color:#34495e;margin-bottom:10px}p{margin-bottom:15px}code{font-family:Courier New,Courier,monospace;background-color:#f7f7f7;padding:2px 5px;border-radius:3px;font-size:.9em}pre{background-color:#f7f7f7;padding:15px;border-radius:5px;overflow-x:auto;margin-bottom:20px;display:flex;align-items:center;justify-content:space-between}pre code{background-color:transparent;padding:0}.installation-section .install-command{position:relative;margin-bottom:20px}.installation-section .copy-button{position:absolute;top:10px;right:10px;background:#3498db;color:#fff;border:none;border-radius:4px;padding:5px 10px;font-size:.9rem;cursor:pointer;transition:background .2s}.installation-section .copy-button:hover{background:#2980b9}.demo-container{display:grid;grid-template-columns:1fr;gap:30px}.demo-example{background:#f7f7f7;padding:20px;border-radius:8px;margin-bottom:20px}.list-container{max-width:400px;margin:20px auto}.list-item{padding:12px;margin:8px 0;background:#fff;border:1px solid #e0e0e0;border-radius:6px;display:flex;align-items:center;transition:transform .2s,box-shadow .2s}.list-item:hover{transform:translateY(-2px);box-shadow:0 4px 8px #0000001a}.item-icon{margin-right:12px;font-size:1.2em}.kanban-board{display:flex;gap:20px;padding:20px;overflow-x:auto}.kanban-column{flex:1;min-width:300px;background:#f5f5f5;padding:15px;border-radius:8px}.kanban-item{background:#fff;padding:12px;margin:8px 0;border-radius:6px;box-shadow:0 1px 3px #0000001a}.kanban-item-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.item-title{font-weight:500}.item-status{padding:4px 8px;border-radius:4px;font-size:.8em}.status-todo{background:#ffebee;color:#c62828}.status-in-progress{background:#fff3e0;color:#ef6c00}.status-done{background:#e8f5e9;color:#2e7d32}.item-description{font-size:.9em;color:#666}.nested-container{max-width:800px;margin:0 auto}.nested-item{background:#fff;border:1px solid #e0e0e0;border-radius:8px;margin:12px 0;overflow:hidden}.nested-item-header{padding:12px;background:#f5f5f5;border-bottom:1px solid #e0e0e0}.nested-item-content{padding:12px}.sub-item{padding:8px;margin:4px 0;background:#f9f9f9;border:1px solid #e0e0e0;border-radius:4px}.api-doc-section{margin-bottom:40px}.table-container{overflow-x:auto;margin-bottom:30px}.api-table{width:100%;border-collapse:collapse;margin-bottom:20px}.api-table th,.api-table td{padding:12px 15px;text-align:left;border-bottom:1px solid #e1e1e1}.api-table th{background-color:#f5f5f5;font-weight:700}.api-table tbody tr:hover{background-color:#f9f9f9}.features-section ul{list-style:none}.features-section li{display:flex;margin-bottom:25px;align-items:flex-start}.feature-icon{font-size:2rem;margin-right:20px;min-width:40px;text-align:center}.feature-info{flex:1}.code-examples{display:grid;grid-template-columns:1fr;gap:20px}@media (min-width: 768px){.code-examples{grid-template-columns:repeat(2,1fr)}}@media (min-width: 992px){.code-examples{grid-template-columns:repeat(3,1fr)}}.code-example{border:1px solid #ecf0f1;border-radius:5px;padding:15px}@media (max-width: 768px){header{padding:30px 0}header h1{font-size:2rem}section{padding:20px}.kanban-board{flex-direction:column}.kanban-column{min-width:100%}.feature-icon{font-size:1.5rem;margin-right:15px}}\n"] }]
|
|
805
832
|
}] });
|
|
806
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVtby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZHJhZy1kcm9wL3NyYy9kZW1vL2RlbW8uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQWtsQmpFLE1BQU0sT0FBTywyQkFBMkI7SUFDdEMsbUJBQW1CO0lBQ25CLFVBQVUsR0FBRztRQUNYLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO0tBQ1QsQ0FBQztJQUVGLHVCQUF1QjtJQUN2QixVQUFVLEdBQUcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLE9BQU8sR0FBYTtRQUNsQjtZQUNFLEVBQUUsRUFBRSxNQUFNO1lBQ1YsS0FBSyxFQUFFLE9BQU87WUFDZCxLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsRUFBRSxFQUFFLENBQUM7b0JBQ0wsS0FBSyxFQUFFLHlCQUF5QjtvQkFDaEMsV0FBVyxFQUFFLGtEQUFrRDtvQkFDL0QsTUFBTSxFQUFFLE1BQU07aUJBQ2Y7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLENBQUM7b0JBQ0wsS0FBSyxFQUFFLGdCQUFnQjtvQkFDdkIsV0FBVyxFQUFFLCtDQUErQztvQkFDNUQsTUFBTSxFQUFFLE1BQU07aUJBQ2Y7YUFDRjtTQUNGO1FBQ0Q7WUFDRSxFQUFFLEVBQUUsYUFBYTtZQUNqQixLQUFLLEVBQUUs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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5TlQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kcmFnLWRyb3AuZGlyZWN0aXZlJztcbmltcG9ydCB7IExpYnNVaURyYWdJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZHJhZy1pdGVtLmRpcmVjdGl2ZSc7XG5cbmludGVyZmFjZSBUYXNrIHtcbiAgaWQ6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhdHVzOiAndG9kbycgfCAnaW4tcHJvZ3Jlc3MnIHwgJ2RvbmUnO1xufVxuXG5pbnRlcmZhY2UgQ29sdW1uIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgaXRlbXM6IFRhc2tbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRyYWctZHJvcC1kZW1vJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSxcbiAgICBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJwYWdlLWNvbnRhaW5lclwiPlxuICAgICAgPGhlYWRlcj5cbiAgICAgICAgPGgxPkRlbW8gRHJhZyBhbmQgRHJvcCBDb21wb25lbnQ8L2gxPlxuICAgICAgICA8cD5Bbmd1bGFyIGNvbXBvbmVudCBsaWJyYXJ5IGZvciBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHk8L3A+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgPG1haW4+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiaW50cm8tc2VjdGlvblwiPlxuICAgICAgICAgIDxoMj5JbnRyb2R1Y3Rpb248L2gyPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAgPGNvZGU+JiM2NDtsaWJzLXVpL2NvbXBvbmVudHMtZHJhZy1kcm9wPC9jb2RlPiBpcyBhIHBvd2VyZnVsIEFuZ3VsYXIgY29tcG9uZW50IHRoYXQgZW5hYmxlcyBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHkgd2l0aCBmZWF0dXJlcyBsaWtlIHZpcnR1YWwgc2Nyb2xsaW5nLCBtdWx0aS1zZWxlY3Rpb24sIGFuZCBjdXN0b20gYm91bmRhcmllcy5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImluc3RhbGxhdGlvbi1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkluc3RhbGxhdGlvbjwvaDI+XG4gICAgICAgICAgPHA+VG8gaW5zdGFsbCB0aGUgbGlicmFyeSwgdXNlIG5wbSBvciB5YXJuOjwvcD5cbiAgICAgICAgICBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zdGFsbC1jb21tYW5kXCI+XG4gICAgICAgICAgICA8cHJlPlxuICAgICAgICAgICAgICA8Y29kZT5ucG0gaW5zdGFsbCAmIzY0O2xpYnMtdWkvY29tcG9uZW50cy1kcmFnLWRyb3A8L2NvZGU+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NvcHknXCJcbiAgICAgICAgICAgICAgICAob3V0Q2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKCducG0gaW5zdGFsbCBAbGlicy11aS9jb21wb25lbnRzLWRyYWctZHJvcCcpXCIgLz5cbiAgICAgICAgICAgIDwvcHJlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgIDxwPk9yIHdpdGggeWFybjo8L3A+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluc3RhbGwtY29tbWFuZFwiPlxuICAgICAgICAgICAgPHByZT5cbiAgICAgICAgICAgICAgPGNvZGU+eWFybiBhZGQgJiM2NDtsaWJzLXVpL2NvbXBvbmVudHMtZHJhZy1kcm9wPC9jb2RlPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidDb3B5J1wiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImNvcHlUb0NsaXBib2FyZCgneWFybiBhZGQgQGxpYnMtdWkvY29tcG9uZW50cy1kcmFnLWRyb3AnKVwiIC8+XG4gICAgICAgICAgICA8L3ByZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZGVtby1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkxpdmUgRGVtbzwvaDI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRlbW8tY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8IS0tIEJhc2ljIExpc3QgRGVtbyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZW1vLWV4YW1wbGVcIj5cbiAgICAgICAgICAgICAgPGgzPkJhc2ljIExpc3Q8L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlIFxuICAgICAgICAgICAgICAgICAgICAgWyhpdGVtcyldPVwiYmFzaWNJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgICBbYWNjZXB0RHJhZ1NhbWVHcm91cF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGJhc2ljSXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmU+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLWljb25cIj7wn5OLPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS10ZXh0XCI+e3sgaXRlbSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gS2FuYmFuIEJvYXJkIERlbW8gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVtby1leGFtcGxlXCI+XG4gICAgICAgICAgICAgIDxoMz5LYW5iYW4gQm9hcmQ8L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2FuYmFuLWJvYXJkXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrIGNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImthbmJhbi1jb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSBcbiAgICAgICAgICAgICAgICAgICAgICAgWyhpdGVtcyldPVwiY29sdW1uLml0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwTmFtZV09XCJjb2x1bW4uaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICBbZHJvcFRvR3JvdXBOYW1lXT1cImNvbHVtbnNJZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXB0RHJhZ1NhbWVHcm91cF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoND57eyBjb2x1bW4udGl0bGUgfX08L2g0PlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGNvbHVtbi5pdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYW5iYW4taXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYW5iYW4taXRlbS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLXRpdGxlXCI+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLXN0YXR1c1wiIFtjbGFzc109XCInc3RhdHVzLScgKyBpdGVtLnN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uc3RhdHVzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJpdGVtLWRlc2NyaXB0aW9uXCI+e3sgaXRlbS5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIE5lc3RlZCBDb250YWluZXJzIERlbW8gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVtby1leGFtcGxlXCI+XG4gICAgICAgICAgICAgIDxoMz5OZXN0ZWQgQ29udGFpbmVycyBjb3B5PC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5lc3RlZC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlIFxuICAgICAgICAgICAgICAgICAgICAgWyhpdGVtcyldPVwibmVzdGVkSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICAgW2dyb3VwTmFtZV09XCIncGFyZW50J1wiXG4gICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCInY29weSdcIlxuICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBuZXN0ZWRJdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmVzdGVkLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIExpYnNVaURyYWdJdGVtRGlyZWN0aXZlPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXN0ZWQtaXRlbS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS10aXRsZVwiPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5lc3RlZC1pdGVtLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoaXRlbXMpXT1cIml0ZW0uc3ViSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBOYW1lXT1cIidjaGlsZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXB0RHJhZ1NhbWVHcm91cF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKHN1Ykl0ZW0gb2YgaXRlbS5zdWJJdGVtczsgdHJhY2sgc3ViSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN1Ykl0ZW0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJhcGktZG9jLXNlY3Rpb25cIj5cbiAgICAgICAgICA8aDI+QVBJIERvY3VtZW50YXRpb248L2gyPlxuICAgICAgICAgIFxuICAgICAgICAgIDxoMz5JbnB1dHM8L2gzPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImFwaS10YWJsZVwiPlxuICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoPlR5cGU8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoPkRlZmF1bHQ8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoPkRlc2NyaXB0aW9uPC90aD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgQGZvciAoaW5wdXQgb2YgaW5wdXRzRG9jOyB0cmFjayBpbnB1dC5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD48Y29kZT57e2lucHV0Lm5hbWV9fTwvY29kZT48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+e3tpbnB1dC50eXBlfX08L2NvZGU+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7aW5wdXQuZGVmYXVsdH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7aW5wdXQuZGVzY3JpcHRpb259fTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8aDM+T3V0cHV0czwvaDM+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiYXBpLXRhYmxlXCI+XG4gICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICA8dGg+TmFtZTwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGg+VHlwZTwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICBAZm9yIChvdXRwdXQgb2Ygb3V0cHV0c0RvYzsgdHJhY2sgb3V0cHV0Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkPjxjb2RlPnt7b3V0cHV0Lm5hbWV9fTwvY29kZT48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+e3tvdXRwdXQudHlwZX19PC9jb2RlPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD57e291dHB1dC5kZXNjcmlwdGlvbn19PC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiaW50ZXJmYWNlcy1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkludGVyZmFjZXM8L2gyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnRlcmZhY2UtZG9jc1wiPlxuICAgICAgICAgICAgQGZvciAoaW50ZXJmYWNlSXRlbSBvZiBpbnRlcmZhY2VzRG9jOyB0cmFjayBpbnRlcmZhY2VJdGVtLm5hbWUpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludGVyZmFjZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGgzPnt7aW50ZXJmYWNlSXRlbS5uYW1lfX08L2gzPlxuICAgICAgICAgICAgICAgIDxwcmU+PGNvZGU+e3tpbnRlcmZhY2VJdGVtLmNvZGV9fTwvY29kZT48L3ByZT5cbiAgICAgICAgICAgICAgICA8cD57e2ludGVyZmFjZUl0ZW0uZGVzY3JpcHRpb259fTwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImZlYXR1cmVzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8aDI+RmVhdHVyZXM8L2gyPlxuICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgIEBmb3IgKGZlYXR1cmUgb2YgZmVhdHVyZXM7IHRyYWNrIGZlYXR1cmUuaWQpIHtcbiAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmVhdHVyZS1pY29uXCI+e3tmZWF0dXJlLmljb259fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmVhdHVyZS1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICA8aDM+e3tmZWF0dXJlLnRpdGxlfX08L2gzPlxuICAgICAgICAgICAgICAgICAgPHA+e3tmZWF0dXJlLmRlc2NyaXB0aW9ufX08L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwidXNhZ2Utc2VjdGlvblwiPlxuICAgICAgICAgIDxoMj5Vc2FnZTwvaDI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvZGUtZXhhbXBsZXNcIj5cbiAgICAgICAgICAgIEBmb3IgKGV4YW1wbGUgb2YgY29kZUV4YW1wbGVzOyB0cmFjayBleGFtcGxlLmlkKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2RlLWV4YW1wbGVcIj5cbiAgICAgICAgICAgICAgICA8aDM+e3tleGFtcGxlLnRpdGxlfX08L2gzPlxuICAgICAgICAgICAgICAgIDxwcmU+PGNvZGUgW2lubmVySFRNTF09XCJleGFtcGxlLmNvZGVcIj48L2NvZGU+PC9wcmU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L21haW4+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAucGFnZS1jb250YWluZXIge1xuICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgVGFob21hLCBHZW5ldmEsIFZlcmRhbmEsIHNhbnMtc2VyaWY7XG4gICAgICBsaW5lLWhlaWdodDogMS42O1xuICAgICAgY29sb3I6ICMzMzM7XG4gICAgfVxuICAgIFxuICAgIGhlYWRlciB7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiA0MHB4IDA7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgfVxuICAgIFxuICAgIGhlYWRlciBoMSB7XG4gICAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICAgIGNvbG9yOiAjMmMzZTUwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICB9XG4gICAgXG4gICAgaGVhZGVyIHAge1xuICAgICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgICBjb2xvcjogIzdmOGM4ZDtcbiAgICB9XG4gICAgXG4gICAgc2VjdGlvbiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgcGFkZGluZzogMzBweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gICAgICBib3gtc2hhZG93OiAwIDJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIH1cbiAgICBcbiAgICBoMiB7XG4gICAgICBmb250LXNpemU6IDEuOHJlbTtcbiAgICAgIGNvbG9yOiAjMmMzZTUwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNlY2YwZjE7XG4gICAgfVxuICAgIFxuICAgIGgzIHtcbiAgICAgIGZvbnQtc2l6ZTogMS40cmVtO1xuICAgICAgY29sb3I6ICMzNDQ5NWU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgIH1cblxuICAgIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICAgICAgY29sb3I6ICMzNDQ5NWU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgIH1cbiAgICBcbiAgICBwIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgfVxuICAgIFxuICAgIGNvZGUge1xuICAgICAgZm9udC1mYW1pbHk6ICdDb3VyaWVyIE5ldycsIENvdXJpZXIsIG1vbm9zcGFjZTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG4gICAgICBwYWRkaW5nOiAycHggNXB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgZm9udC1zaXplOiAwLjllbTtcbiAgICB9XG4gICAgXG4gICAgcHJlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG4gICAgICBwYWRkaW5nOiAxNXB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB9XG4gICAgXG4gICAgcHJlIGNvZGUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cblxuICAgIC8qIEluc3RhbGxhdGlvbiBzZWN0aW9uIHN0eWxlcyAqL1xuICAgIC5pbnN0YWxsYXRpb24tc2VjdGlvbiAuaW5zdGFsbC1jb21tYW5kIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgfVxuICAgIFxuICAgIC5pbnN0YWxsYXRpb24tc2VjdGlvbiAuY29weS1idXR0b24ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAxMHB4O1xuICAgICAgcmlnaHQ6IDEwcHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjMzQ5OGRiO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgcGFkZGluZzogNXB4IDEwcHg7XG4gICAgICBmb250LXNpemU6IDAuOXJlbTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycztcbiAgICB9XG4gICAgXG4gICAgLmluc3RhbGxhdGlvbi1zZWN0aW9uIC5jb3B5LWJ1dHRvbjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMjk4MGI5O1xuICAgIH1cblxuICAgIC8qIERlbW8gc2VjdGlvbiBzdHlsZXMgKi9cbiAgICAuZGVtby1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuICAgICAgZ2FwOiAzMHB4O1xuICAgIH1cblxuICAgIC5kZW1vLWV4YW1wbGUge1xuICAgICAgYmFja2dyb3VuZDogI2Y3ZjdmNztcbiAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIH1cblxuICAgIC8qIExpc3Qgc3R5bGVzICovXG4gICAgLmxpc3QtY29udGFpbmVyIHtcbiAgICAgIG1heC13aWR0aDogNDAwcHg7XG4gICAgICBtYXJnaW46IDIwcHggYXV0bztcbiAgICB9XG5cbiAgICAubGlzdC1pdGVtIHtcbiAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICBtYXJnaW46IDhweCAwO1xuICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycywgYm94LXNoYWRvdyAwLjJzO1xuICAgIH1cblxuICAgIC5saXN0LWl0ZW06aG92ZXIge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICAgICAgYm94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoMCwwLDAsMC4xKTtcbiAgICB9XG5cbiAgICAuaXRlbS1pY29uIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMTJweDtcbiAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgfVxuXG4gICAgLyogS2FuYmFuIHN0eWxlcyAqL1xuICAgIC5rYW5iYW4tYm9hcmQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGdhcDogMjBweDtcbiAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIH1cblxuICAgIC5rYW5iYW4tY29sdW1uIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4td2lkdGg6IDMwMHB4O1xuICAgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcbiAgICAgIHBhZGRpbmc6IDE1cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgfVxuXG4gICAgLmthbmJhbi1pdGVtIHtcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgcGFkZGluZzogMTJweDtcbiAgICAgIG1hcmdpbjogOHB4IDA7XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjEpO1xuICAgIH1cblxuICAgIC5rYW5iYW4taXRlbS1oZWFkZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgfVxuXG4gICAgLml0ZW0tdGl0bGUge1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB9XG5cbiAgICAuaXRlbS1zdGF0dXMge1xuICAgICAgcGFkZGluZzogNHB4IDhweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIGZvbnQtc2l6ZTogMC44ZW07XG4gICAgfVxuXG4gICAgLnN0YXR1cy10b2RvIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmViZWU7XG4gICAgICBjb2xvcjogI2M2MjgyODtcbiAgICB9XG5cbiAgICAuc3RhdHVzLWluLXByb2dyZXNzIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmYzZTA7XG4gICAgICBjb2xvcjogI2VmNmMwMDtcbiAgICB9XG5cbiAgICAuc3RhdHVzLWRvbmUge1xuICAgICAgYmFja2dyb3VuZDogI2U4ZjVlOTtcbiAgICAgIGNvbG9yOiAjMmU3ZDMyO1xuICAgIH1cblxuICAgIC5pdGVtLWRlc2NyaXB0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMC45ZW07XG4gICAgICBjb2xvcjogIzY2NjtcbiAgICB9XG5cbiAgICAvKiBOZXN0ZWQgY29udGFpbmVycyBzdHlsZXMgKi9cbiAgICAubmVzdGVkLWNvbnRhaW5lciB7XG4gICAgICBtYXgtd2lkdGg6IDgwMHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgfVxuXG4gICAgLm5lc3RlZC1pdGVtIHtcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIG1hcmdpbjogMTJweCAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG5cbiAgICAubmVzdGVkLWl0ZW0taGVhZGVyIHtcbiAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMGUwZTA7XG4gICAgfVxuXG4gICAgLm5lc3RlZC1pdGVtLWNvbnRlbnQge1xuICAgICAgcGFkZGluZzogMTJweDtcbiAgICB9XG5cbiAgICAuc3ViLWl0ZW0ge1xuICAgICAgcGFkZGluZzogOHB4O1xuICAgICAgbWFyZ2luOiA0cHggMDtcbiAgICAgIGJhY2tncm91bmQ6ICNmOWY5Zjk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIH1cblxuICAgIC8qIEFQSSBkb2N1bWVudGF0aW9uIHN0eWxlcyAqL1xuICAgIC5hcGktZG9jLXNlY3Rpb24ge1xuICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDtcbiAgICB9XG4gICAgXG4gICAgLnRhYmxlLWNvbnRhaW5lciB7XG4gICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgICB9XG4gICAgXG4gICAgLmFwaS10YWJsZSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIH1cbiAgICBcbiAgICAuYXBpLXRhYmxlIHRoLFxuICAgIC5hcGktdGFibGUgdGQge1xuICAgICAgcGFkZGluZzogMTJweCAxNXB4O1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTFlMWUxO1xuICAgIH1cbiAgICBcbiAgICAuYXBpLXRhYmxlIHRoIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG4gICAgXG4gICAgLmFwaS10YWJsZSB0Ym9keSB0cjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5O1xuICAgIH1cblxuICAgIC8qIEZlYXR1cmVzIHNlY3Rpb24gKi9cbiAgICAuZmVhdHVyZXMtc2VjdGlvbiB1bCB7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIH1cbiAgICBcbiAgICAuZmVhdHVyZXMtc2VjdGlvbiBsaSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIH1cbiAgICBcbiAgICAuZmVhdHVyZS1pY29uIHtcbiAgICAgIGZvbnQtc2l6ZTogMnJlbTtcbiAgICAgIG1hcmdpbi1yaWdodDogMjBweDtcbiAgICAgIG1pbi13aWR0aDogNDBweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG4gICAgXG4gICAgLmZlYXR1cmUtaW5mbyB7XG4gICAgICBmbGV4OiAxO1xuICAgIH1cblxuICAgIC8qIENvZGUgZXhhbXBsZXMgKi9cbiAgICAuY29kZS1leGFtcGxlcyB7XG4gICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gICAgICBnYXA6IDIwcHg7XG4gICAgfVxuICAgIFxuICAgIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgICAgLmNvZGUtZXhhbXBsZXMge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgICAgIC5jb2RlLWV4YW1wbGVzIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgMWZyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLmNvZGUtZXhhbXBsZSB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWNmMGYxO1xuICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgcGFkZGluZzogMTVweDtcbiAgICB9XG5cbiAgICAvKiBSZXNwb25zaXZlIGFkanVzdG1lbnRzICovXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICBoZWFkZXIge1xuICAgICAgICBwYWRkaW5nOiAzMHB4IDA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGhlYWRlciBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgc2VjdGlvbiB7XG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC5rYW5iYW4tYm9hcmQge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfVxuICAgICAgXG4gICAgICAua2FuYmFuLWNvbHVtbiB7XG4gICAgICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLmZlYXR1cmUtaWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7XG4gICAgICB9XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlEcmFnRHJvcERlbW9Db21wb25lbnQge1xuICAvLyBCYXNpYyBMaXN0IEl0ZW1zXG4gIGJhc2ljSXRlbXMgPSBbXG4gICAgJ1Rhc2sgMScsXG4gICAgJ1Rhc2sgMicsXG4gICAgJ1Rhc2sgMycsXG4gICAgJ1Rhc2sgNCcsXG4gICAgJ1Rhc2sgNSdcbiAgXTtcblxuICAvLyBLYW5iYW4gQm9hcmQgQ29sdW1uc1xuICBjb2x1bW5zSWRzID0gWyd0b2RvJywgJ2luLXByb2dyZXNzJywgJ2RvbmUnXTtcbiAgY29sdW1uczogQ29sdW1uW10gPSBbXG4gICAge1xuICAgICAgaWQ6ICd0b2RvJyxcbiAgICAgIHRpdGxlOiAnVG8gRG8nLFxuICAgICAgaXRlbXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAxLFxuICAgICAgICAgIHRpdGxlOiAnSW1wbGVtZW50IGRyYWcgYW5kIGRyb3AnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQWRkIGRyYWcgYW5kIGRyb3AgZnVuY3Rpb25hbGl0eSB0byB0aGUgY29tcG9uZW50JyxcbiAgICAgICAgICBzdGF0dXM6ICd0b2RvJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IDIsXG4gICAgICAgICAgdGl0bGU6ICdBZGQgYW5pbWF0aW9ucycsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdJbXBsZW1lbnQgc21vb3RoIGFuaW1hdGlvbnMgZm9yIGRyYWcgYW5kIGRyb3AnLFxuICAgICAgICAgIHN0YXR1czogJ3RvZG8nXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnaW4tcHJvZ3Jlc3MnLFxuICAgICAgdGl0bGU6ICdJbiBQcm9ncmVzcycsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6IDMsXG4gICAgICAgICAgdGl0bGU6ICdGaXggc3R5bGluZyBpc3N1ZXMnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmVzb2x2ZSBDU1MgY29uZmxpY3RzIGluIHRoZSBjb21wb25lbnQnLFxuICAgICAgICAgIHN0YXR1czogJ2luLXByb2dyZXNzJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ2RvbmUnLFxuICAgICAgdGl0bGU6ICdEb25lJyxcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogNCxcbiAgICAgICAgICB0aXRsZTogJ1NldHVwIHByb2plY3Qgc3RydWN0dXJlJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0luaXRpYWxpemUgdGhlIHByb2plY3Qgd2l0aCBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMnLFxuICAgICAgICAgIHN0YXR1czogJ2RvbmUnXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIF07XG5cbiAgLy8gTmVzdGVkIEl0ZW1zXG4gIG5lc3RlZEl0ZW1zID0gW1xuICAgIHtcbiAgICAgIGlkOiAxLFxuICAgICAgdGl0bGU6ICdQcm9qZWN0IEEnLFxuICAgICAgc3ViSXRlbXM6IFsnVGFzayAxJywgJ1Rhc2sgMicsICdUYXNrIDMnXVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDIsXG4gICAgICB0aXRsZTogJ1Byb2plY3QgQicsXG4gICAgICBzdWJJdGVtczogWydUYXNrIDQnLCAnVGFzayA1J11cbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAzLFxuICAgICAgdGl0bGU6ICdQcm9qZWN0IEMnLFxuICAgICAgc3ViSXRlbXM6IFsnVGFzayA2JywgJ1Rhc2sgNycsICdUYXNrIDgnXVxuICAgIH1cbiAgXTtcblxuICAvLyBBUEkgRG9jdW1lbnRhdGlvblxuICBpbnB1dHNEb2MgPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2l0ZW1zJyxcbiAgICAgIHR5cGU6ICdBcnJheTx1bmtub3duPicsXG4gICAgICBkZWZhdWx0OiAnW10nLFxuICAgICAgZGVzY3JpcHRpb246ICdBcnJheSBvZiBpdGVtcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbnRhaW5lcidcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdtb2RlJyxcbiAgICAgIHR5cGU6IFwiJ21vdmUnIHwgJ2NvcHknIHwgJ2RlZXBDb3B5J1wiLFxuICAgICAgZGVmYXVsdDogXCInbW92ZSdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiAnTW9kZSBmb3IgZHJhZyBhbmQgZHJvcCBvcGVyYXRpb25zJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2RpcmVjdGlvbkRyYWcnLFxuICAgICAgdHlwZTogXCInaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXCIsXG4gICAgICBkZWZhdWx0OiAndW5kZWZpbmVkJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGlyZWN0aW9uIG9mIGRyYWcgbW92ZW1lbnQnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndmlld0VuY2Fwc3VsYXRpb24nLFxuICAgICAgdHlwZTogXCInZW11bGF0ZWQnIHwgJ25vbmUnXCIsXG4gICAgICBkZWZhdWx0OiBcIidlbXVsYXRlZCdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiAnVmlldyBlbmNhcHN1bGF0aW9uIG1vZGUgZm9yIHN0eWxpbmcnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZGlzYWJsZURyYWdDb250YWluZXInLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogJ3VuZGVmaW5lZCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgdG8gZGlzYWJsZSBkcmFnIG9wZXJhdGlvbnMgZm9yIHRoZSBjb250YWluZXInXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYWNjZXB0RHJhZ1NhbWVHcm91cCcsXG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZWZhdWx0OiAnZmFsc2UnLFxuICAgICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIGFjY2VwdCBkcmFnIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBzYW1lIGdyb3VwJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BsYWNlaG9sZGVyJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgIGRlZmF1bHQ6ICd0cnVlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciB0byBzaG93IHBsYWNlaG9sZGVyIGR1cmluZyBkcmFnJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2dyb3VwTmFtZScsXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIGRlZmF1bHQ6IFwiJ2dyb3VwRHJhZ0FuZERyb3BEZWZhdWx0J1wiLFxuICAgICAgZGVzY3JpcHRpb246ICdOYW1lIG9mIHRoZSBncm91cCBmb3IgZHJhZyBhbmQgZHJvcCBvcGVyYXRpb25zJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2Ryb3BUb0dyb3VwTmFtZScsXG4gICAgICB0eXBlOiAnQXJyYXk8c3RyaW5nPiB8IG51bGwnLFxuICAgICAgZGVmYXVsdDogJ251bGwnLFxuICAgICAgZGVzY3JpcHRpb246ICdMaXN0IG9mIGdyb3VwIG5hbWVzIHRoYXQgY2FuIGFjY2VwdCBkcm9wcyBmcm9tIHRoaXMgY29udGFpbmVyJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3N0eWxlc092ZXJyaWRlJyxcbiAgICAgIHR5cGU6ICdBcnJheTx7IGNsYXNzTmFtZTogc3RyaW5nLCBzdHlsZXM6IHN0cmluZyB9PicsXG4gICAgICBkZWZhdWx0OiAndW5kZWZpbmVkJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ3VzdG9tIHN0eWxlcyB0byBvdmVycmlkZSBkZWZhdWx0IGRyYWctZHJvcCBzdHlsaW5nJ1xuICAgIH1cbiAgXTtcblxuICBvdXRwdXRzRG9jID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdvdXREcmFnU3RhcnRDb250YWluZXInLFxuICAgICAgdHlwZTogJ0lEcmFnU3RhcnQnLFxuICAgICAgZGVzY3JpcHRpb246ICdFdmVudCBlbWl0dGVkIHdoZW4gZHJhZ2dpbmcgc3RhcnRzIGluIHRoZSBjb250YWluZXInXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3V0RHJhZ092ZXJDb250YWluZXInLFxuICAgICAgdHlwZTogJ0lEcmFnT3ZlcicsXG4gICAgICBkZXNjcmlwdGlvbjogJ0V2ZW50IGVtaXR0ZWQgd2hlbiBkcmFnZ2luZyBvdmVyIHRoZSBjb250YWluZXInXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3V0RHJhZ0xlYXZlQ29udGFpbmVyJyxcbiAgICAgIHR5cGU6ICdJRHJhZ0xlYXZlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGRyYWdnaW5nIGxlYXZlcyB0aGUgY29udGFpbmVyJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ291dERyYWdFbmRDb250YWluZXInLFxuICAgICAgdHlwZTogJ0lEcmFnRW5kJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGRyYWdnaW5nIGVuZHMgaW4gdGhlIGNvbnRhaW5lcidcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvdXREcm9wcGVkQ29udGFpbmVyJyxcbiAgICAgIHR5cGU6ICdJRHJvcCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0V2ZW50IGVtaXR0ZWQgd2hlbiBhbiBpdGVtIGlzIGRyb3BwZWQgaW4gdGhlIGNvbnRhaW5lcidcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvdXREcm9wcGVkQ29udGFpbmVyRW1wdHknLFxuICAgICAgdHlwZTogJ0lEcm9wJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGl0ZW0gaXMgZHJvcHBlZCBpbiBhbiBlbXB0eSBjb250YWluZXInXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3V0RnVuY3Rpb25Db250cm9sJyxcbiAgICAgIHR5cGU6ICdJRHJhZ0Ryb3BGdW5jdGlvbkNvbnRyb2xFdmVudCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0V2ZW50IGVtaXR0ZWQgdG8gY29udHJvbCBkcmFnLWRyb3AgZnVuY3Rpb25hbGl0eSdcbiAgICB9XG4gIF07XG5cbiAgLy8gSW50ZXJmYWNlIERvY3VtZW50YXRpb25cbiAgaW50ZXJmYWNlc0RvYyA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnSURyYWdnaW5nJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdnaW5nIHtcbiAgbW91c2VQb3NpdGlvbjogSU1vdXNlUG9zaXRpb247XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgZWxlbWVudEtlZXBDb250YWluZXI/OiBib29sZWFuO1xuICBpdGVtRHJhZ0luZm8/OiBJSXRlbURyYWdJbmZvO1xufWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyZmFjZSBmb3IgZHJhZyBvcGVyYXRpb24gZXZlbnRzLCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkcmFnZ2VkIGVsZW1lbnQgYW5kIG1vdXNlIHBvc2l0aW9uJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0lEcmFnU3RhcnQnLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJRHJhZ1N0YXJ0IHtcbiAgbW91c2VQb3NpdGlvbjogSU1vdXNlUG9zaXRpb247XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZm9yIGRyYWcgc3RhcnQgZXZlbnRzLCB0cmlnZ2VyZWQgd2hlbiBkcmFnZ2luZyBiZWdpbnMnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSURyYWdPdmVyJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdPdmVyIHtcbiAgbW91c2VQb3NpdGlvbjogSU1vdXNlUG9zaXRpb247XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgZWxlbWVudERyYWdPdmVyOiBIVE1MRWxlbWVudDtcbiAgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZm9yIGRyYWcgb3ZlciBldmVudHMsIHRyaWdnZXJlZCB3aGVuIGFuIGVsZW1lbnQgaXMgZHJhZ2dlZCBvdmVyIGFub3RoZXIgZWxlbWVudCdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ0xlYXZlJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdMZWF2ZSB7XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgZWxlbWVudERyYWdMZWF2ZTogSFRNTEVsZW1lbnQ7XG4gIGl0ZW1EcmFnSW5mbz86IElJdGVtRHJhZ0luZm87XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciBkcmFnIGxlYXZlIGV2ZW50cywgdHJpZ2dlcmVkIHdoZW4gYSBkcmFnZ2VkIGVsZW1lbnQgbGVhdmVzIGFub3RoZXIgZWxlbWVudCdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ0VuZCcsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElEcmFnRW5kIHtcbiAgbW91c2VQb3NpdGlvbjogSU1vdXNlUG9zaXRpb247XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZm9yIGRyYWcgZW5kIGV2ZW50cywgdHJpZ2dlcmVkIHdoZW4gZHJhZ2dpbmcgZW5kcydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJvcCcsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElEcm9wIHtcbiAgZWxlbWVudERyYWc6IEhUTUxFbGVtZW50O1xuICBlbGVtZW50RHJvcDogSFRNTEVsZW1lbnQ7XG4gIGl0ZW1EcmFnSW5mbz86IElJdGVtRHJhZ0luZm87XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciBkcm9wIGV2ZW50cywgdHJpZ2dlcmVkIHdoZW4gYW4gZWxlbWVudCBpcyBkcm9wcGVkJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0lJdGVtRHJhZ0luZm8nLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJSXRlbURyYWdJbmZvIHtcbiAgaXRlbTogb2JqZWN0O1xuICBpdGVtc01vdmU/OiBXcml0YWJsZVNpZ25hbDxBcnJheTx1bmtub3duPj47XG4gIGluZGV4RHJhZz86IG51bWJlcjtcbiAgaW5kZXhEcm9wPzogbnVtYmVyO1xuICBpdGVtc0RyYWc6IFdyaXRhYmxlU2lnbmFsPEFycmF5PHVua25vd24+PjtcbiAgaXRlbXNEcm9wPzogV3JpdGFibGVTaWduYWw8QXJyYXk8dW5rbm93bj4+O1xuICBjb250YWluZXJEcmFnPzogSFRNTEVsZW1lbnQ7XG4gIGNvbnRhaW5lckRyb3A/OiBIVE1MRWxlbWVudDtcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJhZ2dlZCBpdGVtIGFuZCBpdHMgY29udGFpbmVycydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwnLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwge1xuICBpdGVtRHJhZ0luZm8/OiBJSXRlbURyYWdJbmZvO1xuICBlbGVtZW50RHJhZzogSFRNTEVsZW1lbnQ7XG4gIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VUb3A6IG51bWJlcjtcbiAgZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZUxlZnQ6IG51bWJlcjtcbiAgZWxlbWVudENvbnRhaW5lcj86IEhUTUxFbGVtZW50O1xuICBkcmFnQm91bmRhcnk/OiBib29sZWFuO1xuICBkcmFnQm91bmRhcnlBY2NlcHRNb3VzZUxlYXZlQ29udGFpbmVyPzogYm9vbGVhbjtcbiAgaWdub3JlU3RvcEV2ZW50PzogYm9vbGVhbjtcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZm9yIHZpcnR1YWwgc2Nyb2xsaW5nIGRyYWcgb3BlcmF0aW9ucywgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBkcmFnIGJvdW5kYXJpZXMgYW5kIGNvbnRhaW5lciBlbGVtZW50cydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJTW91c2VQb3NpdGlvbicsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElNb3VzZVBvc2l0aW9uIHtcbiAgY2xpZW50WDogbnVtYmVyO1xuICBjbGllbnRZOiBudW1iZXI7XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIHJlcHJlc2VudGluZyBtb3VzZSBwb3NpdGlvbiBjb29yZGluYXRlcydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ0Ryb3BGdW5jdGlvbkNvbnRyb2xFdmVudCcsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElEcmFnRHJvcEZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgc2V0QXR0cmlidXRlRWxlbWVudEFuZEl0ZW1EcmFnOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyZmFjZSBmb3IgZHJhZyBhbmQgZHJvcCBjb250cm9sIGZ1bmN0aW9ucydcbiAgICB9XG4gIF07XG5cbiAgLy8gRmVhdHVyZXNcbiAgZmVhdHVyZXMgPSBbXG4gICAge1xuICAgICAgaWQ6IDEsXG4gICAgICBpY29uOiAn8J+UhCcsXG4gICAgICB0aXRsZTogJ0ZsZXhpYmxlIERyYWcgYW5kIERyb3AnLFxuICAgICAgZGVzY3JpcHRpb246ICdTdXBwb3J0IGZvciBjb250YWluZXItdG8tY29udGFpbmVyIGRyYWdnaW5nIHdpdGggY3VzdG9taXphYmxlIGdyb3VwIG5hbWVzIGFuZCBkcm9wIHpvbmVzJ1xuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDIsXG4gICAgICBpY29uOiAn8J+TnCcsXG4gICAgICB0aXRsZTogJ1ZpcnR1YWwgU2Nyb2xsaW5nJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRWZmaWNpZW50IGhhbmRsaW5nIG9mIGxhcmdlIGxpc3RzIHdpdGggdmlydHVhbCBzY3JvbGxpbmcgc3VwcG9ydCdcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAzLFxuICAgICAgaWNvbjogJ/Cfjq8nLFxuICAgICAgdGl0bGU6ICdDdXN0b20gQm91bmRhcmllcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0RlZmluZSBjdXN0b20gZHJhZyBib3VuZGFyaWVzIGFuZCBkcm9wIHpvbmVzIGZvciBwcmVjaXNlIGNvbnRyb2wnXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogNCxcbiAgICAgIGljb246ICfwn46oJyxcbiAgICAgIHRpdGxlOiAnU3R5bGluZyBPcHRpb25zJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ3VzdG9taXphYmxlIHN0eWxlcyBmb3IgZHJhZyBpdGVtcyBhbmQgY29udGFpbmVycydcbiAgICB9XG4gIF07XG5cbiAgLy8gQ29kZSBFeGFtcGxlc1xuICBjb2RlRXhhbXBsZXMgPSBbXG4gICAge1xuICAgICAgaWQ6IDEsXG4gICAgICB0aXRsZTogJ0Jhc2ljIFVzYWdlJyxcbiAgICAgIGNvZGU6IGAmbHQ7ZGl2IExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlIFxuICBbKGl0ZW1zKV09XCJpdGVtc1wiXG4gIFtncm91cE5hbWVdPVwiJ215R3JvdXAnXCJcbiAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwidHJ1ZVwiJmd0O1xuICBAZm9yIChpdGVtIG9mIGl0ZW1zOyB0cmFjayBpdGVtKSB7XG4gICAgJmx0O2RpdiBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSZndDtcbiAgICAgIHt7IGl0ZW0gfX1cbiAgICAmbHQ7L2RpdiZndDtcbiAgfVxuJmx0Oy9kaXYmZ3Q7YFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDIsXG4gICAgICB0aXRsZTogJ0NvbnRhaW5lci10by1Db250YWluZXInLFxuICAgICAgY29kZTogYCZsdDtkaXYgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgXG4gIFsoaXRlbXMpXT1cInNvdXJjZUl0ZW1zXCJcbiAgW2dyb3VwTmFtZV09XCInc291cmNlJ1wiJmd0O1xuICBAZm9yIChpdGVtIG9mIHNvdXJjZUl0ZW1zOyB0cmFjayBpdGVtKSB7XG4gICAgJmx0O2RpdiBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSZndDtcbiAgICAgIHt7IGl0ZW0gfX1cbiAgICAmbHQ7L2RpdiZndDtcbiAgfVxuJmx0Oy9kaXYmZ3Q7XG5cbiZsdDtkaXYgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgXG4gIFsoaXRlbXMpXT1cInRhcmdldEl0ZW1zXCJcbiAgW2dyb3VwTmFtZV09XCIndGFyZ2V0J1wiXG4gIFtkcm9wVG9Hcm91cE5hbWVdPVwiWydzb3VyY2UnXVwiJmd0O1xuICBAZm9yIChpdGVtIG9mIHRhcmdldEl0ZW1zOyB0cmFjayBpdGVtKSB7XG4gICAgJmx0O2RpdiBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSZndDtcbiAgICAgIHt7IGl0ZW0gfX1cbiAgICAmbHQ7L2RpdiZndDtcbiAgfVxuJmx0Oy9kaXYmZ3Q7YFxuICAgIH1dO1xuXG4gIC8qKlxuICAgKiBDb3B5IHRleHQgdG8gY2xpcGJvYXJkXG4gICAqL1xuICBjb3B5VG9DbGlwYm9hcmQodGV4dDogc3RyaW5nKSB7XG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkudGhlbihcbiAgICAgICgpID0+IHtcbiAgICAgICAgYWxlcnQoJ0NvcGllZCB0byBjbGlwYm9hcmQnKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBjb3B5IHRleHQ6ICcsIGVycik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufSAiXX0=
|
|
833
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVtby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZHJhZy1kcm9wL3NyYy9kZW1vL2RlbW8uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQW9tQmpFLE1BQU0sT0FBTywyQkFBMkI7SUFDdEMsbUJBQW1CO0lBQ25CLFVBQVUsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUVoRSx1QkFBdUI7SUFDdkIsVUFBVSxHQUFHLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3QyxPQUFPLEdBQWE7UUFDbEI7WUFDRSxFQUFFLEVBQUUsTUFBTTtZQUNWLEtBQUssRUFBRSxPQUFPO1lBQ2QsS0FBSyxFQUFFO2dCQUNMO29CQUNFLEVBQUUsRUFBRSxDQUFDO29CQUNMLEtBQUssRUFBRSx5QkFBeUI7b0JBQ2hDLFdBQVcsRUFBRSxrREFBa0Q7b0JBQy9ELE1BQU0sRUFBRSxNQUFNO2lCQUNmO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxDQUFDO29CQUNMLEtBQUssRUFBRSxnQkFBZ0I7b0JBQ3ZCLFdBQVcsRUFBRSwrQ0FBK0M7b0JBQzVELE1BQU0sRUFBRSxNQUFNO2lCQUNmO2FBQ0Y7U0FDRjtRQUNEO1lBQ0UsRUFBRSxFQUFFLGFBQWE7WUFDakIsS0FBSyxFQUFF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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0T1QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kcmFnLWRyb3AuZGlyZWN0aXZlJztcbmltcG9ydCB7IExpYnNVaURyYWdJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZHJhZy1pdGVtLmRpcmVjdGl2ZSc7XG5cbmludGVyZmFjZSBUYXNrIHtcbiAgaWQ6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhdHVzOiAndG9kbycgfCAnaW4tcHJvZ3Jlc3MnIHwgJ2RvbmUnO1xufVxuXG5pbnRlcmZhY2UgQ29sdW1uIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgaXRlbXM6IFRhc2tbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRyYWctZHJvcC1kZW1vJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUsIExpYnNVaURyYWdJdGVtRGlyZWN0aXZlLCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInBhZ2UtY29udGFpbmVyXCI+XG4gICAgICA8aGVhZGVyPlxuICAgICAgICA8aDE+RGVtbyBEcmFnIGFuZCBEcm9wIENvbXBvbmVudDwvaDE+XG4gICAgICAgIDxwPkFuZ3VsYXIgY29tcG9uZW50IGxpYnJhcnkgZm9yIGRyYWcgYW5kIGRyb3AgZnVuY3Rpb25hbGl0eTwvcD5cbiAgICAgIDwvaGVhZGVyPlxuXG4gICAgICA8bWFpbj5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJpbnRyby1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkludHJvZHVjdGlvbjwvaDI+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8Y29kZT4mIzY0O2xpYnMtdWkvY29tcG9uZW50cy1kcmFnLWRyb3A8L2NvZGU+XG4gICAgICAgICAgICBpcyBhIHBvd2VyZnVsIEFuZ3VsYXIgY29tcG9uZW50IHRoYXQgZW5hYmxlcyBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHkgd2l0aCBmZWF0dXJlcyBsaWtlIHZpcnR1YWwgc2Nyb2xsaW5nLCBtdWx0aS1zZWxlY3Rpb24sIGFuZCBjdXN0b20gYm91bmRhcmllcy5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImluc3RhbGxhdGlvbi1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkluc3RhbGxhdGlvbjwvaDI+XG4gICAgICAgICAgPHA+VG8gaW5zdGFsbCB0aGUgbGlicmFyeSwgdXNlIG5wbSBvciB5YXJuOjwvcD5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnN0YWxsLWNvbW1hbmRcIj5cbiAgICAgICAgICAgIDxwcmU+XG4gICAgICAgICAgICAgIDxjb2RlPm5wbSBpbnN0YWxsICYjNjQ7bGlicy11aS9jb21wb25lbnRzLWRyYWctZHJvcDwvY29kZT5cbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQ29weSdcIlxuICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoJ25wbSBpbnN0YWxsIEBsaWJzLXVpL2NvbXBvbmVudHMtZHJhZy1kcm9wJylcIiAvPlxuICAgICAgICAgICAgPC9wcmU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8cD5PciB3aXRoIHlhcm46PC9wPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluc3RhbGwtY29tbWFuZFwiPlxuICAgICAgICAgICAgPHByZT5cbiAgICAgICAgICAgICAgPGNvZGU+eWFybiBhZGQgJiM2NDtsaWJzLXVpL2NvbXBvbmVudHMtZHJhZy1kcm9wPC9jb2RlPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidDb3B5J1wiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImNvcHlUb0NsaXBib2FyZCgneWFybiBhZGQgQGxpYnMtdWkvY29tcG9uZW50cy1kcmFnLWRyb3AnKVwiIC8+XG4gICAgICAgICAgICA8L3ByZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZGVtby1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkxpdmUgRGVtbzwvaDI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRlbW8tY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8IS0tIEJhc2ljIExpc3QgRGVtbyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZW1vLWV4YW1wbGVcIj5cbiAgICAgICAgICAgICAgPGgzPkJhc2ljIExpc3Q8L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZVxuICAgICAgICAgICAgICAgICAgWyhpdGVtcyldPVwiYmFzaWNJdGVtc1wiXG4gICAgICAgICAgICAgICAgICBbYWNjZXB0RHJhZ1NhbWVHcm91cF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGJhc2ljSXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZT5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIml0ZW0taWNvblwiPvCfk4s8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLXRleHRcIj57eyBpdGVtIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBLYW5iYW4gQm9hcmQgRGVtbyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZW1vLWV4YW1wbGVcIj5cbiAgICAgICAgICAgICAgPGgzPkthbmJhbiBCb2FyZDwvaDM+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYW5iYW4tYm9hcmRcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwia2FuYmFuLWNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgIExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlXG4gICAgICAgICAgICAgICAgICAgIFsoaXRlbXMpXT1cImNvbHVtbi5pdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgIFtncm91cE5hbWVdPVwiY29sdW1uLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgW2Ryb3BUb0dyb3VwTmFtZV09XCJjb2x1bW5zSWRzXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aDQ+e3sgY29sdW1uLnRpdGxlIH19PC9oND5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBjb2x1bW4uaXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImthbmJhbi1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIExpYnNVaURyYWdJdGVtRGlyZWN0aXZlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImthbmJhbi1pdGVtLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIml0ZW0tdGl0bGVcIj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbS1zdGF0dXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCInc3RhdHVzLScgKyBpdGVtLnN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uc3RhdHVzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJpdGVtLWRlc2NyaXB0aW9uXCI+e3sgaXRlbS5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIE5lc3RlZCBDb250YWluZXJzIERlbW8gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVtby1leGFtcGxlXCI+XG4gICAgICAgICAgICAgIDxoMz5OZXN0ZWQgQ29udGFpbmVycyBjb3B5PC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5lc3RlZC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZVxuICAgICAgICAgICAgICAgICAgWyhpdGVtcyldPVwibmVzdGVkSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgW2dyb3VwTmFtZV09XCIncGFyZW50J1wiXG4gICAgICAgICAgICAgICAgICBbbW9kZV09XCInY29weSdcIlxuICAgICAgICAgICAgICAgICAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBuZXN0ZWRJdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuZXN0ZWQtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmU+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5lc3RlZC1pdGVtLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLXRpdGxlXCI+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmVzdGVkLWl0ZW0tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKGl0ZW1zKV09XCJpdGVtLnN1Ykl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwTmFtZV09XCInY2hpbGQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChzdWJJdGVtIG9mIGl0ZW0uc3ViSXRlbXM7IHRyYWNrIHN1Ykl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN1Yi1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpYnNVaURyYWdJdGVtRGlyZWN0aXZlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3ViSXRlbSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImFwaS1kb2Mtc2VjdGlvblwiPlxuICAgICAgICAgIDxoMj5BUEkgRG9jdW1lbnRhdGlvbjwvaDI+XG5cbiAgICAgICAgICA8aDM+SW5wdXRzPC9oMz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJhcGktdGFibGVcIj5cbiAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIDx0aD5OYW1lPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aD5UeXBlPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aD5EZWZhdWx0PC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgIEBmb3IgKGlucHV0IG9mIGlucHV0c0RvYzsgdHJhY2sgaW5wdXQubmFtZSkge1xuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPGNvZGU+e3sgaW5wdXQubmFtZSB9fTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPnt7IGlucHV0LnR5cGUgfX08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD57eyBpbnB1dC5kZWZhdWx0IH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGlucHV0LmRlc2NyaXB0aW9uIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxoMz5PdXRwdXRzPC9oMz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJhcGktdGFibGVcIj5cbiAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIDx0aD5OYW1lPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aD5UeXBlPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgIEBmb3IgKG91dHB1dCBvZiBvdXRwdXRzRG9jOyB0cmFjayBvdXRwdXQubmFtZSkge1xuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPGNvZGU+e3sgb3V0cHV0Lm5hbWUgfX08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8Y29kZT57eyBvdXRwdXQudHlwZSB9fTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7IG91dHB1dC5kZXNjcmlwdGlvbiB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImludGVyZmFjZXMtc2VjdGlvblwiPlxuICAgICAgICAgIDxoMj5JbnRlcmZhY2VzPC9oMj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW50ZXJmYWNlLWRvY3NcIj5cbiAgICAgICAgICAgIEBmb3IgKGludGVyZmFjZUl0ZW0gb2YgaW50ZXJmYWNlc0RvYzsgdHJhY2sgaW50ZXJmYWNlSXRlbS5uYW1lKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnRlcmZhY2UtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxoMz57eyBpbnRlcmZhY2VJdGVtLm5hbWUgfX08L2gzPlxuICAgICAgICAgICAgICAgIDxwcmU+PGNvZGU+e3tpbnRlcmZhY2VJdGVtLmNvZGV9fTwvY29kZT48L3ByZT5cbiAgICAgICAgICAgICAgICA8cD57eyBpbnRlcmZhY2VJdGVtLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZmVhdHVyZXMtc2VjdGlvblwiPlxuICAgICAgICAgIDxoMj5GZWF0dXJlczwvaDI+XG4gICAgICAgICAgPHVsPlxuICAgICAgICAgICAgQGZvciAoZmVhdHVyZSBvZiBmZWF0dXJlczsgdHJhY2sgZmVhdHVyZS5pZCkge1xuICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmZWF0dXJlLWljb25cIj57eyBmZWF0dXJlLmljb24gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZlYXR1cmUtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgPGgzPnt7IGZlYXR1cmUudGl0bGUgfX08L2gzPlxuICAgICAgICAgICAgICAgICAgPHA+e3sgZmVhdHVyZS5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJ1c2FnZS1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPlVzYWdlPC9oMj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29kZS1leGFtcGxlc1wiPlxuICAgICAgICAgICAgQGZvciAoZXhhbXBsZSBvZiBjb2RlRXhhbXBsZXM7IHRyYWNrIGV4YW1wbGUuaWQpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvZGUtZXhhbXBsZVwiPlxuICAgICAgICAgICAgICAgIDxoMz57eyBleGFtcGxlLnRpdGxlIH19PC9oMz5cbiAgICAgICAgICAgICAgICA8cHJlPjxjb2RlIFtpbm5lckhUTUxdPVwiZXhhbXBsZS5jb2RlXCI+PC9jb2RlPjwvcHJlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9tYWluPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAucGFnZS1jb250YWluZXIge1xuICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknLCBUYWhvbWEsIEdlbmV2YSwgVmVyZGFuYSwgc2Fucy1zZXJpZjtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICAgICAgY29sb3I6ICMzMzM7XG4gICAgICB9XG5cbiAgICAgIGhlYWRlciB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogNDBweCAwO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIGhlYWRlciBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtO1xuICAgICAgICBjb2xvcjogIzJjM2U1MDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICAgIH1cblxuICAgICAgaGVhZGVyIHAge1xuICAgICAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgICAgICAgY29sb3I6ICM3ZjhjOGQ7XG4gICAgICB9XG5cbiAgICAgIHNlY3Rpb24ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIHBhZGRpbmc6IDMwcHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIGgyIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjhyZW07XG4gICAgICAgIGNvbG9yOiAjMmMzZTUwO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTBweDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNlY2YwZjE7XG4gICAgICB9XG5cbiAgICAgIGgzIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjRyZW07XG4gICAgICAgIGNvbG9yOiAjMzQ0OTVlO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgICAgfVxuXG4gICAgICBoNCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICAgICAgICBjb2xvcjogIzM0NDk1ZTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICAgIH1cblxuICAgICAgcCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgICB9XG5cbiAgICAgIGNvZGUge1xuICAgICAgICBmb250LWZhbWlseTogJ0NvdXJpZXIgTmV3JywgQ291cmllciwgbW9ub3NwYWNlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xuICAgICAgICBwYWRkaW5nOiAycHggNXB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45ZW07XG4gICAgICB9XG5cbiAgICAgIHByZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG4gICAgICAgIHBhZGRpbmc6IDE1cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgfVxuXG4gICAgICBwcmUgY29kZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgfVxuXG4gICAgICAvKiBJbnN0YWxsYXRpb24gc2VjdGlvbiBzdHlsZXMgKi9cbiAgICAgIC5pbnN0YWxsYXRpb24tc2VjdGlvbiAuaW5zdGFsbC1jb21tYW5kIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgfVxuXG4gICAgICAuaW5zdGFsbGF0aW9uLXNlY3Rpb24gLmNvcHktYnV0dG9uIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDEwcHg7XG4gICAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMzQ5OGRiO1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBwYWRkaW5nOiA1cHggMTBweDtcbiAgICAgICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzO1xuICAgICAgfVxuXG4gICAgICAuaW5zdGFsbGF0aW9uLXNlY3Rpb24gLmNvcHktYnV0dG9uOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzI5ODBiOTtcbiAgICAgIH1cblxuICAgICAgLyogRGVtbyBzZWN0aW9uIHN0eWxlcyAqL1xuICAgICAgLmRlbW8tY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gICAgICAgIGdhcDogMzBweDtcbiAgICAgIH1cblxuICAgICAgLmRlbW8tZXhhbXBsZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmN2Y3Zjc7XG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgIH1cblxuICAgICAgLyogTGlzdCBzdHlsZXMgKi9cbiAgICAgIC5saXN0LWNvbnRhaW5lciB7XG4gICAgICAgIG1heC13aWR0aDogNDAwcHg7XG4gICAgICAgIG1hcmdpbjogMjBweCBhdXRvO1xuICAgICAgfVxuXG4gICAgICAubGlzdC1pdGVtIHtcbiAgICAgICAgcGFkZGluZzogMTJweDtcbiAgICAgICAgbWFyZ2luOiA4cHggMDtcbiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICB0cmFuc2Zvcm0gMC4ycyxcbiAgICAgICAgICBib3gtc2hhZG93IDAuMnM7XG4gICAgICB9XG5cbiAgICAgIC5saXN0LWl0ZW06aG92ZXIge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIC5pdGVtLWljb24ge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEycHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICB9XG5cbiAgICAgIC8qIEthbmJhbiBzdHlsZXMgKi9cbiAgICAgIC5rYW5iYW4tYm9hcmQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDIwcHg7XG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICB9XG5cbiAgICAgIC5rYW5iYW4tY29sdW1uIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLXdpZHRoOiAzMDBweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcbiAgICAgICAgcGFkZGluZzogMTVweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgfVxuXG4gICAgICAua2FuYmFuLWl0ZW0ge1xuICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgcGFkZGluZzogMTJweDtcbiAgICAgICAgbWFyZ2luOiA4cHggMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgICAgfVxuXG4gICAgICAua2FuYmFuLWl0ZW0taGVhZGVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgICB9XG5cbiAgICAgIC5pdGVtLXRpdGxlIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIH1cblxuICAgICAgLml0ZW0tc3RhdHVzIHtcbiAgICAgICAgcGFkZGluZzogNHB4IDhweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBmb250LXNpemU6IDAuOGVtO1xuICAgICAgfVxuXG4gICAgICAuc3RhdHVzLXRvZG8ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZlYmVlO1xuICAgICAgICBjb2xvcjogI2M2MjgyODtcbiAgICAgIH1cblxuICAgICAgLnN0YXR1cy1pbi1wcm9ncmVzcyB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmYzZTA7XG4gICAgICAgIGNvbG9yOiAjZWY2YzAwO1xuICAgICAgfVxuXG4gICAgICAuc3RhdHVzLWRvbmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZThmNWU5O1xuICAgICAgICBjb2xvcjogIzJlN2QzMjtcbiAgICAgIH1cblxuICAgICAgLml0ZW0tZGVzY3JpcHRpb24ge1xuICAgICAgICBmb250LXNpemU6IDAuOWVtO1xuICAgICAgICBjb2xvcjogIzY2NjtcbiAgICAgIH1cblxuICAgICAgLyogTmVzdGVkIGNvbnRhaW5lcnMgc3R5bGVzICovXG4gICAgICAubmVzdGVkLWNvbnRhaW5lciB7XG4gICAgICAgIG1heC13aWR0aDogODAwcHg7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgfVxuXG4gICAgICAubmVzdGVkLWl0ZW0ge1xuICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBtYXJnaW46IDEycHggMDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgLm5lc3RlZC1pdGVtLWhlYWRlciB7XG4gICAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBlMGUwO1xuICAgICAgfVxuXG4gICAgICAubmVzdGVkLWl0ZW0tY29udGVudCB7XG4gICAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICB9XG5cbiAgICAgIC5zdWItaXRlbSB7XG4gICAgICAgIHBhZGRpbmc6IDhweDtcbiAgICAgICAgbWFyZ2luOiA0cHggMDtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y5ZjlmOTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgfVxuXG4gICAgICAvKiBBUEkgZG9jdW1lbnRhdGlvbiBzdHlsZXMgKi9cbiAgICAgIC5hcGktZG9jLXNlY3Rpb24ge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuICAgICAgfVxuXG4gICAgICAudGFibGUtY29udGFpbmVyIHtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgICAgIH1cblxuICAgICAgLmFwaS10YWJsZSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgfVxuXG4gICAgICAuYXBpLXRhYmxlIHRoLFxuICAgICAgLmFwaS10YWJsZSB0ZCB7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTVweDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMWUxZTE7XG4gICAgICB9XG5cbiAgICAgIC5hcGktdGFibGUgdGgge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIH1cblxuICAgICAgLmFwaS10YWJsZSB0Ym9keSB0cjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7XG4gICAgICB9XG5cbiAgICAgIC8qIEZlYXR1cmVzIHNlY3Rpb24gKi9cbiAgICAgIC5mZWF0dXJlcy1zZWN0aW9uIHVsIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIH1cblxuICAgICAgLmZlYXR1cmVzLXNlY3Rpb24gbGkge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyNXB4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgIH1cblxuICAgICAgLmZlYXR1cmUtaWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4O1xuICAgICAgICBtaW4td2lkdGg6IDQwcHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLmZlYXR1cmUtaW5mbyB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG5cbiAgICAgIC8qIENvZGUgZXhhbXBsZXMgKi9cbiAgICAgIC5jb2RlLWV4YW1wbGVzIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gICAgICAgIGdhcDogMjBweDtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgICAgIC5jb2RlLWV4YW1wbGVzIHtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAgICAgICAuY29kZS1leGFtcGxlcyB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgMWZyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuY29kZS1leGFtcGxlIHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VjZjBmMTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgICBwYWRkaW5nOiAxNXB4O1xuICAgICAgfVxuXG4gICAgICAvKiBSZXNwb25zaXZlIGFkanVzdG1lbnRzICovXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICAgaGVhZGVyIHtcbiAgICAgICAgICBwYWRkaW5nOiAzMHB4IDA7XG4gICAgICAgIH1cblxuICAgICAgICBoZWFkZXIgaDEge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMnJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlY3Rpb24ge1xuICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAua2FuYmFuLWJvYXJkIHtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgLmthbmJhbi1jb2x1bW4ge1xuICAgICAgICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mZWF0dXJlLWljb24ge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMTVweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaURyYWdEcm9wRGVtb0NvbXBvbmVudCB7XG4gIC8vIEJhc2ljIExpc3QgSXRlbXNcbiAgYmFzaWNJdGVtcyA9IFsnVGFzayAxJywgJ1Rhc2sgMicsICdUYXNrIDMnLCAnVGFzayA0JywgJ1Rhc2sgNSddO1xuXG4gIC8vIEthbmJhbiBCb2FyZCBDb2x1bW5zXG4gIGNvbHVtbnNJZHMgPSBbJ3RvZG8nLCAnaW4tcHJvZ3Jlc3MnLCAnZG9uZSddO1xuICBjb2x1bW5zOiBDb2x1bW5bXSA9IFtcbiAgICB7XG4gICAgICBpZDogJ3RvZG8nLFxuICAgICAgdGl0bGU6ICdUbyBEbycsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6IDEsXG4gICAgICAgICAgdGl0bGU6ICdJbXBsZW1lbnQgZHJhZyBhbmQgZHJvcCcsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdBZGQgZHJhZyBhbmQgZHJvcCBmdW5jdGlvbmFsaXR5IHRvIHRoZSBjb21wb25lbnQnLFxuICAgICAgICAgIHN0YXR1czogJ3RvZG8nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IDIsXG4gICAgICAgICAgdGl0bGU6ICdBZGQgYW5pbWF0aW9ucycsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdJbXBsZW1lbnQgc21vb3RoIGFuaW1hdGlvbnMgZm9yIGRyYWcgYW5kIGRyb3AnLFxuICAgICAgICAgIHN0YXR1czogJ3RvZG8nLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnaW4tcHJvZ3Jlc3MnLFxuICAgICAgdGl0bGU6ICdJbiBQcm9ncmVzcycsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6IDMsXG4gICAgICAgICAgdGl0bGU6ICdGaXggc3R5bGluZyBpc3N1ZXMnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmVzb2x2ZSBDU1MgY29uZmxpY3RzIGluIHRoZSBjb21wb25lbnQnLFxuICAgICAgICAgIHN0YXR1czogJ2luLXByb2dyZXNzJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ2RvbmUnLFxuICAgICAgdGl0bGU6ICdEb25lJyxcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogNCxcbiAgICAgICAgICB0aXRsZTogJ1NldHVwIHByb2plY3Qgc3RydWN0dXJlJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0luaXRpYWxpemUgdGhlIHByb2plY3Qgd2l0aCBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMnLFxuICAgICAgICAgIHN0YXR1czogJ2RvbmUnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xuXG4gIC8vIE5lc3RlZCBJdGVtc1xuICBuZXN0ZWRJdGVtcyA9IFtcbiAgICB7XG4gICAgICBpZDogMSxcbiAgICAgIHRpdGxlOiAnUHJvamVjdCBBJyxcbiAgICAgIHN1Ykl0ZW1zOiBbJ1Rhc2sgMScsICdUYXNrIDInLCAnVGFzayAzJ10sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMixcbiAgICAgIHRpdGxlOiAnUHJvamVjdCBCJyxcbiAgICAgIHN1Ykl0ZW1zOiBbJ1Rhc2sgNCcsICdUYXNrIDUnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAzLFxuICAgICAgdGl0bGU6ICdQcm9qZWN0IEMnLFxuICAgICAgc3ViSXRlbXM6IFsnVGFzayA2JywgJ1Rhc2sgNycsICdUYXNrIDgnXSxcbiAgICB9LFxuICBdO1xuXG4gIC8vIEFQSSBEb2N1bWVudGF0aW9uXG4gIGlucHV0c0RvYyA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnaXRlbXMnLFxuICAgICAgdHlwZTogJ0FycmF5PHVua25vd24+JyxcbiAgICAgIGRlZmF1bHQ6ICdbXScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0FycmF5IG9mIGl0ZW1zIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgY29udGFpbmVyJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdtb2RlJyxcbiAgICAgIHR5cGU6IFwiJ21vdmUnIHwgJ2NvcHknIHwgJ2RlZXBDb3B5J1wiLFxuICAgICAgZGVmYXVsdDogXCInbW92ZSdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiAnTW9kZSBmb3IgZHJhZyBhbmQgZHJvcCBvcGVyYXRpb25zJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdkaXJlY3Rpb25EcmFnJyxcbiAgICAgIHR5cGU6IFwiJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1wiLFxuICAgICAgZGVmYXVsdDogJ3VuZGVmaW5lZCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0RpcmVjdGlvbiBvZiBkcmFnIG1vdmVtZW50JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd2aWV3RW5jYXBzdWxhdGlvbicsXG4gICAgICB0eXBlOiBcIidlbXVsYXRlZCcgfCAnbm9uZSdcIixcbiAgICAgIGRlZmF1bHQ6IFwiJ2VtdWxhdGVkJ1wiLFxuICAgICAgZGVzY3JpcHRpb246ICdWaWV3IGVuY2Fwc3VsYXRpb24gbW9kZSBmb3Igc3R5bGluZycsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZGlzYWJsZURyYWdDb250YWluZXInLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogJ3VuZGVmaW5lZCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgdG8gZGlzYWJsZSBkcmFnIG9wZXJhdGlvbnMgZm9yIHRoZSBjb250YWluZXInLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FjY2VwdERyYWdTYW1lR3JvdXAnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogJ2ZhbHNlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciB0byBhY2NlcHQgZHJhZyBvcGVyYXRpb25zIHdpdGhpbiB0aGUgc2FtZSBncm91cCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGxhY2Vob2xkZXInLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogJ3RydWUnLFxuICAgICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIHNob3cgcGxhY2Vob2xkZXIgZHVyaW5nIGRyYWcnLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2dyb3VwTmFtZScsXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIGRlZmF1bHQ6IFwiJ2dyb3VwRHJhZ0FuZERyb3BEZWZhdWx0J1wiLFxuICAgICAgZGVzY3JpcHRpb246ICdOYW1lIG9mIHRoZSBncm91cCBmb3IgZHJhZyBhbmQgZHJvcCBvcGVyYXRpb25zJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdkcm9wVG9Hcm91cE5hbWUnLFxuICAgICAgdHlwZTogJ0FycmF5PHN0cmluZz4gfCBudWxsJyxcbiAgICAgIGRlZmF1bHQ6ICdudWxsJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnTGlzdCBvZiBncm91cCBuYW1lcyB0aGF0IGNhbiBhY2NlcHQgZHJvcHMgZnJvbSB0aGlzIGNvbnRhaW5lcicsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc3R5bGVzT3ZlcnJpZGUnLFxuICAgICAgdHlwZTogJ0FycmF5PHsgY2xhc3NOYW1lOiBzdHJpbmcsIHN0eWxlczogc3RyaW5nIH0+JyxcbiAgICAgIGRlZmF1bHQ6ICd1bmRlZmluZWQnLFxuICAgICAgZGVzY3JpcHRpb246ICdDdXN0b20gc3R5bGVzIHRvIG92ZXJyaWRlIGRlZmF1bHQgZHJhZy1kcm9wIHN0eWxpbmcnLFxuICAgIH0sXG4gIF07XG5cbiAgb3V0cHV0c0RvYyA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnb3V0RHJhZ1N0YXJ0Q29udGFpbmVyJyxcbiAgICAgIHR5cGU6ICdJRHJhZ1N0YXJ0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGRyYWdnaW5nIHN0YXJ0cyBpbiB0aGUgY29udGFpbmVyJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvdXREcmFnT3ZlckNvbnRhaW5lcicsXG4gICAgICB0eXBlOiAnSURyYWdPdmVyJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGRyYWdnaW5nIG92ZXIgdGhlIGNvbnRhaW5lcicsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3V0RHJhZ0xlYXZlQ29udGFpbmVyJyxcbiAgICAgIHR5cGU6ICdJRHJhZ0xlYXZlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGRyYWdnaW5nIGxlYXZlcyB0aGUgY29udGFpbmVyJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvdXREcmFnRW5kQ29udGFpbmVyJyxcbiAgICAgIHR5cGU6ICdJRHJhZ0VuZCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0V2ZW50IGVtaXR0ZWQgd2hlbiBkcmFnZ2luZyBlbmRzIGluIHRoZSBjb250YWluZXInLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ291dERyb3BwZWRDb250YWluZXInLFxuICAgICAgdHlwZTogJ0lEcm9wJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGl0ZW0gaXMgZHJvcHBlZCBpbiB0aGUgY29udGFpbmVyJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvdXREcm9wcGVkQ29udGFpbmVyRW1wdHknLFxuICAgICAgdHlwZTogJ0lEcm9wJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGl0ZW0gaXMgZHJvcHBlZCBpbiBhbiBlbXB0eSBjb250YWluZXInLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ291dEZ1bmN0aW9uQ29udHJvbCcsXG4gICAgICB0eXBlOiAnSURyYWdEcm9wRnVuY3Rpb25Db250cm9sRXZlbnQnLFxuICAgICAgZGVzY3JpcHRpb246ICdFdmVudCBlbWl0dGVkIHRvIGNvbnRyb2wgZHJhZy1kcm9wIGZ1bmN0aW9uYWxpdHknLFxuICAgIH0sXG4gIF07XG5cbiAgLy8gSW50ZXJmYWNlIERvY3VtZW50YXRpb25cbiAgaW50ZXJmYWNlc0RvYyA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnSURyYWdnaW5nJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdnaW5nIHtcbiAgbW91c2VQb3NpdGlvbjogSU1vdXNlUG9zaXRpb247XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgZWxlbWVudEtlZXBDb250YWluZXI/OiBib29sZWFuO1xuICBpdGVtRHJhZ0luZm8/OiBJSXRlbURyYWdJbmZvO1xufWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyZmFjZSBmb3IgZHJhZyBvcGVyYXRpb24gZXZlbnRzLCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkcmFnZ2VkIGVsZW1lbnQgYW5kIG1vdXNlIHBvc2l0aW9uJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ1N0YXJ0JyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdTdGFydCB7XG4gIG1vdXNlUG9zaXRpb246IElNb3VzZVBvc2l0aW9uO1xuICBlbGVtZW50RHJhZzogSFRNTEVsZW1lbnQ7XG4gIGl0ZW1EcmFnSW5mbz86IElJdGVtRHJhZ0luZm87XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciBkcmFnIHN0YXJ0IGV2ZW50cywgdHJpZ2dlcmVkIHdoZW4gZHJhZ2dpbmcgYmVnaW5zJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ092ZXInLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJRHJhZ092ZXIge1xuICBtb3VzZVBvc2l0aW9uOiBJTW91c2VQb3NpdGlvbjtcbiAgZWxlbWVudERyYWc6IEhUTUxFbGVtZW50O1xuICBlbGVtZW50RHJhZ092ZXI6IEhUTUxFbGVtZW50O1xuICBpdGVtRHJhZ0luZm8/OiBJSXRlbURyYWdJbmZvO1xufWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyZmFjZSBmb3IgZHJhZyBvdmVyIGV2ZW50cywgdHJpZ2dlcmVkIHdoZW4gYW4gZWxlbWVudCBpcyBkcmFnZ2VkIG92ZXIgYW5vdGhlciBlbGVtZW50JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ0xlYXZlJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdMZWF2ZSB7XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgZWxlbWVudERyYWdMZWF2ZTogSFRNTEVsZW1lbnQ7XG4gIGl0ZW1EcmFnSW5mbz86IElJdGVtRHJhZ0luZm87XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciBkcmFnIGxlYXZlIGV2ZW50cywgdHJpZ2dlcmVkIHdoZW4gYSBkcmFnZ2VkIGVsZW1lbnQgbGVhdmVzIGFub3RoZXIgZWxlbWVudCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSURyYWdFbmQnLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJRHJhZ0VuZCB7XG4gIG1vdXNlUG9zaXRpb246IElNb3VzZVBvc2l0aW9uO1xuICBlbGVtZW50RHJhZzogSFRNTEVsZW1lbnQ7XG4gIGl0ZW1EcmFnSW5mbz86IElJdGVtRHJhZ0luZm87XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciBkcmFnIGVuZCBldmVudHMsIHRyaWdnZXJlZCB3aGVuIGRyYWdnaW5nIGVuZHMnLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0lEcm9wJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyb3Age1xuICBlbGVtZW50RHJhZzogSFRNTEVsZW1lbnQ7XG4gIGVsZW1lbnREcm9wOiBIVE1MRWxlbWVudDtcbiAgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZm9yIGRyb3AgZXZlbnRzLCB0cmlnZ2VyZWQgd2hlbiBhbiBlbGVtZW50IGlzIGRyb3BwZWQnLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0lJdGVtRHJhZ0luZm8nLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJSXRlbURyYWdJbmZvIHtcbiAgaXRlbTogb2JqZWN0O1xuICBpdGVtc01vdmU/OiBXcml0YWJsZVNpZ25hbDxBcnJheTx1bmtub3duPj47XG4gIGluZGV4RHJhZz86IG51bWJlcjtcbiAgaW5kZXhEcm9wPzogbnVtYmVyO1xuICBpdGVtc0RyYWc6IFdyaXRhYmxlU2lnbmFsPEFycmF5PHVua25vd24+PjtcbiAgaXRlbXNEcm9wPzogV3JpdGFibGVTaWduYWw8QXJyYXk8dW5rbm93bj4+O1xuICBjb250YWluZXJEcmFnPzogSFRNTEVsZW1lbnQ7XG4gIGNvbnRhaW5lckRyb3A/OiBIVE1MRWxlbWVudDtcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJhZ2dlZCBpdGVtIGFuZCBpdHMgY29udGFpbmVycycsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSURyYWdJdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdJdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsIHtcbiAgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbiAgZWxlbWVudERyYWc6IEhUTUxFbGVtZW50O1xuICBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wOiBudW1iZXI7XG4gIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0OiBudW1iZXI7XG4gIGVsZW1lbnRDb250YWluZXI/OiBIVE1MRWxlbWVudDtcbiAgZHJhZ0JvdW5kYXJ5PzogYm9vbGVhbjtcbiAgZHJhZ0JvdW5kYXJ5QWNjZXB0TW91c2VMZWF2ZUNvbnRhaW5lcj86IGJvb2xlYW47XG4gIGlnbm9yZVN0b3BFdmVudD86IGJvb2xlYW47XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciB2aXJ0dWFsIHNjcm9sbGluZyBkcmFnIG9wZXJhdGlvbnMsIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgZHJhZyBib3VuZGFyaWVzIGFuZCBjb250YWluZXIgZWxlbWVudHMnLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0lNb3VzZVBvc2l0aW9uJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSU1vdXNlUG9zaXRpb24ge1xuICBjbGllbnRYOiBudW1iZXI7XG4gIGNsaWVudFk6IG51bWJlcjtcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgcmVwcmVzZW50aW5nIG1vdXNlIHBvc2l0aW9uIGNvb3JkaW5hdGVzJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ0Ryb3BGdW5jdGlvbkNvbnRyb2xFdmVudCcsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElEcmFnRHJvcEZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgc2V0QXR0cmlidXRlRWxlbWVudEFuZEl0ZW1EcmFnOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyZmFjZSBmb3IgZHJhZyBhbmQgZHJvcCBjb250cm9sIGZ1bmN0aW9ucycsXG4gICAgfSxcbiAgXTtcblxuICAvLyBGZWF0dXJlc1xuICBmZWF0dXJlcyA9IFtcbiAgICB7XG4gICAgICBpZDogMSxcbiAgICAgIGljb246ICfwn5SEJyxcbiAgICAgIHRpdGxlOiAnRmxleGlibGUgRHJhZyBhbmQgRHJvcCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ1N1cHBvcnQgZm9yIGNvbnRhaW5lci10by1jb250YWluZXIgZHJhZ2dpbmcgd2l0aCBjdXN0b21pemFibGUgZ3JvdXAgbmFtZXMgYW5kIGRyb3Agem9uZXMnLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDIsXG4gICAgICBpY29uOiAn8J+TnCcsXG4gICAgICB0aXRsZTogJ1ZpcnR1YWwgU2Nyb2xsaW5nJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRWZmaWNpZW50IGhhbmRsaW5nIG9mIGxhcmdlIGxpc3RzIHdpdGggdmlydHVhbCBzY3JvbGxpbmcgc3VwcG9ydCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMyxcbiAgICAgIGljb246ICfwn46vJyxcbiAgICAgIHRpdGxlOiAnQ3VzdG9tIEJvdW5kYXJpZXMnLFxuICAgICAgZGVzY3JpcHRpb246ICdEZWZpbmUgY3VzdG9tIGRyYWcgYm91bmRhcmllcyBhbmQgZHJvcCB6b25lcyBmb3IgcHJlY2lzZSBjb250cm9sJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiA0LFxuICAgICAgaWNvbjogJ/CfjqgnLFxuICAgICAgdGl0bGU6ICdTdHlsaW5nIE9wdGlvbnMnLFxuICAgICAgZGVzY3JpcHRpb246ICdDdXN0b21pemFibGUgc3R5bGVzIGZvciBkcmFnIGl0ZW1zIGFuZCBjb250YWluZXJzJyxcbiAgICB9LFxuICBdO1xuXG4gIC8vIENvZGUgRXhhbXBsZXNcbiAgY29kZUV4YW1wbGVzID0gW1xuICAgIHtcbiAgICAgIGlkOiAxLFxuICAgICAgdGl0bGU6ICdCYXNpYyBVc2FnZScsXG4gICAgICBjb2RlOiBgJmx0O2RpdiBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSBcbiAgWyhpdGVtcyldPVwiaXRlbXNcIlxuICBbZ3JvdXBOYW1lXT1cIidteUdyb3VwJ1wiXG4gIFthY2NlcHREcmFnU2FtZUdyb3VwXT1cInRydWVcIiZndDtcbiAgQGZvciAoaXRlbSBvZiBpdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICZsdDtkaXYgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmUmZ3Q7XG4gICAgICB7eyBpdGVtIH19XG4gICAgJmx0Oy9kaXYmZ3Q7XG4gIH1cbiZsdDsvZGl2Jmd0O2AsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMixcbiAgICAgIHRpdGxlOiAnQ29udGFpbmVyLXRvLUNvbnRhaW5lcicsXG4gICAgICBjb2RlOiBgJmx0O2RpdiBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSBcbiAgWyhpdGVtcyldPVwic291cmNlSXRlbXNcIlxuICBbZ3JvdXBOYW1lXT1cIidzb3VyY2UnXCImZ3Q7XG4gIEBmb3IgKGl0ZW0gb2Ygc291cmNlSXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAmbHQ7ZGl2IExpYnNVaURyYWdJdGVtRGlyZWN0aXZlJmd0O1xuICAgICAge3sgaXRlbSB9fVxuICAgICZsdDsvZGl2Jmd0O1xuICB9XG4mbHQ7L2RpdiZndDtcblxuJmx0O2RpdiBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSBcbiAgWyhpdGVtcyldPVwidGFyZ2V0SXRlbXNcIlxuICBbZ3JvdXBOYW1lXT1cIid0YXJnZXQnXCJcbiAgW2Ryb3BUb0dyb3VwTmFtZV09XCJbJ3NvdXJjZSddXCImZ3Q7XG4gIEBmb3IgKGl0ZW0gb2YgdGFyZ2V0SXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAmbHQ7ZGl2IExpYnNVaURyYWdJdGVtRGlyZWN0aXZlJmd0O1xuICAgICAge3sgaXRlbSB9fVxuICAgICZsdDsvZGl2Jmd0O1xuICB9XG4mbHQ7L2RpdiZndDtgLFxuICAgIH0sXG4gIF07XG5cbiAgLyoqXG4gICAqIENvcHkgdGV4dCB0byBjbGlwYm9hcmRcbiAgICovXG4gIGNvcHlUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpIHtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBhbGVydCgnQ29waWVkIHRvIGNsaXBib2FyZCcpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGNvcHkgdGV4dDogJywgZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iXX0=
|