@sidekick-coder/zenith-kit 0.3.2 → 0.3.4
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/dist/client/index.es.js +14629 -0
- package/dist/components/index.es.js +34924 -45778
- package/dist/components/styles.css +1 -4926
- package/dist/server/index.d.mts +39 -2
- package/dist/server/index.mjs +4 -4
- package/dist/shared/index.d.mts +1 -1
- package/eslint.config.mts +1 -0
- package/package.json +13 -8
- package/tsdown.config.ts +57 -42
- package/vite/createViteConfig.js +7 -0
- package/vite.client.config.ts +85 -0
- package/vite.config.ts +1 -2
- package/dist/client/chunk-0Lt9GpW0.mjs +0 -1
- package/dist/client/index.d.mts +0 -1161
- package/dist/client/index.mjs +0 -2
package/dist/client/index.d.mts
DELETED
|
@@ -1,1161 +0,0 @@
|
|
|
1
|
-
import * as _$vue_sonner0 from "vue-sonner";
|
|
2
|
-
import * as v from "valibot";
|
|
3
|
-
import * as _$_casl_ability0 from "@casl/ability";
|
|
4
|
-
import { defineAbility } from "@casl/ability";
|
|
5
|
-
import * as VueRouter from "vue-router";
|
|
6
|
-
import { NavigationGuard, RouteLocationNormalized, RouteLocationNormalizedGeneric, RouteRecordRaw, Router as Router$1 } from "vue-router";
|
|
7
|
-
import * as _$vue from "vue";
|
|
8
|
-
import { ComputedRef, DefineComponent, MaybeRef, MaybeRefOrGetter, Ref, getCurrentInstance, inject } from "vue";
|
|
9
|
-
import { toTypedSchema as toTypedSchema$1 } from "@vee-validate/valibot";
|
|
10
|
-
import * as VeeValidate from "vee-validate";
|
|
11
|
-
import { FormContext, FormOptions, GenericObject } from "vee-validate";
|
|
12
|
-
import { useRouteQuery as useRouteQuery$1 } from "@vueuse/router";
|
|
13
|
-
|
|
14
|
-
//#region src/shared/utils/compose.d.ts
|
|
15
|
-
type Constructor$1<T = {}> = new (...args: any[]) => T;
|
|
16
|
-
//#endregion
|
|
17
|
-
//#region src/shared/entities/PermissionEntity.d.ts
|
|
18
|
-
declare const PermissionEntity_base: {
|
|
19
|
-
new (...args: any[]): {
|
|
20
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
21
|
-
};
|
|
22
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
23
|
-
} & Constructor$1;
|
|
24
|
-
declare class PermissionEntity extends PermissionEntity_base {
|
|
25
|
-
id: number;
|
|
26
|
-
name: string;
|
|
27
|
-
description: string | null;
|
|
28
|
-
origin: string;
|
|
29
|
-
subject: string;
|
|
30
|
-
action: string;
|
|
31
|
-
conditions: string | null | Record<string, any>;
|
|
32
|
-
get editable(): boolean;
|
|
33
|
-
get parsedConditions(): any;
|
|
34
|
-
}
|
|
35
|
-
//#endregion
|
|
36
|
-
//#region src/shared/entities/RoleEntity.d.ts
|
|
37
|
-
declare const Role_base: {
|
|
38
|
-
new (...args: any[]): {
|
|
39
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
40
|
-
};
|
|
41
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
42
|
-
} & Constructor$1 & {
|
|
43
|
-
new (...args: any[]): {
|
|
44
|
-
created_at: Date | string;
|
|
45
|
-
updated_at: Date | string;
|
|
46
|
-
};
|
|
47
|
-
} & {
|
|
48
|
-
new (...args: any[]): {
|
|
49
|
-
deleted_at: Date | string | null;
|
|
50
|
-
};
|
|
51
|
-
};
|
|
52
|
-
declare class Role extends Role_base {
|
|
53
|
-
id: number;
|
|
54
|
-
name: string;
|
|
55
|
-
description?: string;
|
|
56
|
-
}
|
|
57
|
-
//#endregion
|
|
58
|
-
//#region src/shared/entities/UserEntity.d.ts
|
|
59
|
-
declare const UserEntity_base: {
|
|
60
|
-
new (...args: any[]): {
|
|
61
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
62
|
-
};
|
|
63
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
64
|
-
} & Constructor$1 & {
|
|
65
|
-
new (...args: any[]): {
|
|
66
|
-
created_at: Date | string;
|
|
67
|
-
updated_at: Date | string;
|
|
68
|
-
};
|
|
69
|
-
} & {
|
|
70
|
-
new (...args: any[]): {
|
|
71
|
-
deleted_at: Date | string | null;
|
|
72
|
-
};
|
|
73
|
-
};
|
|
74
|
-
declare class UserEntity extends UserEntity_base {
|
|
75
|
-
id: number;
|
|
76
|
-
email: string;
|
|
77
|
-
name: string;
|
|
78
|
-
username: string;
|
|
79
|
-
password?: string;
|
|
80
|
-
verified_at?: Date | string | null;
|
|
81
|
-
permissions?: PermissionEntity[];
|
|
82
|
-
roles?: Role[];
|
|
83
|
-
get initials(): string;
|
|
84
|
-
}
|
|
85
|
-
//#endregion
|
|
86
|
-
//#region src/client/services/AuthService.d.ts
|
|
87
|
-
interface LogoutOptions {
|
|
88
|
-
redirect?: string;
|
|
89
|
-
}
|
|
90
|
-
declare class AuthService {
|
|
91
|
-
static __container_entry_key: string;
|
|
92
|
-
user: UserEntity | null;
|
|
93
|
-
constructor(data?: Partial<AuthService>);
|
|
94
|
-
logout(options?: LogoutOptions): Promise<void>;
|
|
95
|
-
}
|
|
96
|
-
//#endregion
|
|
97
|
-
//#region src/client/services/FetchService.d.ts
|
|
98
|
-
interface FetchOptions extends RequestInit {
|
|
99
|
-
query?: Record<string, any>;
|
|
100
|
-
data?: Record<string, any>;
|
|
101
|
-
}
|
|
102
|
-
declare class FetchService {
|
|
103
|
-
static __container_entry_key: string;
|
|
104
|
-
protected handleError(response: Response): Promise<any>;
|
|
105
|
-
protected buildUrl(url: string, query?: Record<string, any>): string;
|
|
106
|
-
protected buildRequestInit(options: FetchOptions): RequestInit;
|
|
107
|
-
protected parseResponse<T>(response: Response): Promise<T>;
|
|
108
|
-
fetch<T>(_url: string, _options?: FetchOptions): Promise<T>;
|
|
109
|
-
try<T = any>(url: string, options?: FetchOptions): Promise<[Error, null] | [null, Awaited<T>]>;
|
|
110
|
-
get<T = any>(url: string, options?: FetchOptions): Promise<T>;
|
|
111
|
-
post<T = any>(url: string, options?: FetchOptions): Promise<T>;
|
|
112
|
-
put<T = any>(url: string, options?: FetchOptions): Promise<T>;
|
|
113
|
-
delete<T = any>(url: string, options?: FetchOptions): Promise<T>;
|
|
114
|
-
}
|
|
115
|
-
//#endregion
|
|
116
|
-
//#region src/client/services/FetchBrowserService.d.ts
|
|
117
|
-
declare class FetchBrowserService extends FetchService {
|
|
118
|
-
fetch<T>(url: string, options?: FetchOptions): Promise<T>;
|
|
119
|
-
}
|
|
120
|
-
//#endregion
|
|
121
|
-
//#region src/client/services/FetchNodeService.d.ts
|
|
122
|
-
declare class FetchNodeService extends FetchService {
|
|
123
|
-
fetch<T>(url: string, options?: FetchOptions): Promise<T>;
|
|
124
|
-
protected fetchExternal<T>(url: string, options?: FetchOptions): Promise<T>;
|
|
125
|
-
protected fetchInternal<T>(url: string, options?: FetchOptions): Promise<T>;
|
|
126
|
-
}
|
|
127
|
-
//#endregion
|
|
128
|
-
//#region src/client/services/LayoutService.d.ts
|
|
129
|
-
declare class LayoutService {
|
|
130
|
-
static __container_entry_key: string;
|
|
131
|
-
components: Map<string, DefineComponent>;
|
|
132
|
-
options: Record<string, any>;
|
|
133
|
-
currendId: string | null;
|
|
134
|
-
setCurrent(id: string): void;
|
|
135
|
-
add(name: string, component: DefineComponent, options?: any): void;
|
|
136
|
-
has(name: string): boolean;
|
|
137
|
-
get(name: string): DefineComponent;
|
|
138
|
-
getOptions(): Record<string, any>;
|
|
139
|
-
getCurrent(): DefineComponent | null;
|
|
140
|
-
setOptions(options?: any): void;
|
|
141
|
-
}
|
|
142
|
-
//#endregion
|
|
143
|
-
//#region src/shared/services/LoggerService.d.ts
|
|
144
|
-
declare class LoggerService {
|
|
145
|
-
static __container_entry_key: string;
|
|
146
|
-
info(message: string, meta?: any): void;
|
|
147
|
-
debug(message: string, meta?: any): void;
|
|
148
|
-
warn(message: string, meta?: any): void;
|
|
149
|
-
error(message: string | Error, meta?: any): void;
|
|
150
|
-
child(options: any): LoggerService;
|
|
151
|
-
}
|
|
152
|
-
//#endregion
|
|
153
|
-
//#region src/shared/entities/LifecycleHook.d.ts
|
|
154
|
-
declare class LifecycleHook {
|
|
155
|
-
hook_id: string;
|
|
156
|
-
hook_aliases?: string[];
|
|
157
|
-
order?: number;
|
|
158
|
-
subhooks?: LifecycleHook[];
|
|
159
|
-
register(): Promise<void>;
|
|
160
|
-
load(): Promise<void>;
|
|
161
|
-
boot(): Promise<void>;
|
|
162
|
-
shutdown(): Promise<void>;
|
|
163
|
-
/** @deprecated Use register */
|
|
164
|
-
onRegister(): Promise<void>;
|
|
165
|
-
/** @deprecated Use load */
|
|
166
|
-
onLoad(): Promise<void>;
|
|
167
|
-
/** @deprecated Use boot */
|
|
168
|
-
onBoot(): Promise<void>;
|
|
169
|
-
/** @deprecated Use shutdown */
|
|
170
|
-
onShutdown(): Promise<void>;
|
|
171
|
-
}
|
|
172
|
-
//#endregion
|
|
173
|
-
//#region src/shared/services/LifecycleService.d.ts
|
|
174
|
-
type LifecycleMethod = 'register' | 'load' | 'boot' | 'shutdown';
|
|
175
|
-
interface ListOptions {
|
|
176
|
-
include?: string | string[];
|
|
177
|
-
exclude?: string | string[];
|
|
178
|
-
}
|
|
179
|
-
interface LifecycleServiceOptions {
|
|
180
|
-
debug?: boolean;
|
|
181
|
-
hooks?: Map<string, LifecycleHook>;
|
|
182
|
-
logger?: LoggerService;
|
|
183
|
-
onError?: (error: Error, context: {
|
|
184
|
-
hookId: string;
|
|
185
|
-
method: LifecycleMethod;
|
|
186
|
-
}) => void;
|
|
187
|
-
}
|
|
188
|
-
declare class LifecycleService$1 {
|
|
189
|
-
static __container_entry_key: string;
|
|
190
|
-
hooks: Map<string, LifecycleHook>;
|
|
191
|
-
logger: LoggerService;
|
|
192
|
-
debug: boolean;
|
|
193
|
-
constructor(data?: LifecycleServiceOptions);
|
|
194
|
-
setOnError(handler: Required<LifecycleServiceOptions>['onError']): void;
|
|
195
|
-
onError(error: Error, context: {
|
|
196
|
-
hookId: string;
|
|
197
|
-
method: LifecycleMethod;
|
|
198
|
-
}): void;
|
|
199
|
-
mapAliases(args: string[]): string[];
|
|
200
|
-
list(options?: ListOptions): LifecycleHook[];
|
|
201
|
-
add(...payload: (LifecycleHook | Constructor$1<LifecycleHook>)[]): void;
|
|
202
|
-
emitMethod(method: LifecycleMethod, options?: ListOptions): Promise<void>;
|
|
203
|
-
emit(payload: LifecycleMethod | LifecycleMethod[], options?: ListOptions): Promise<void>;
|
|
204
|
-
on(method: LifecycleMethod, handler: () => Promise<void>): void;
|
|
205
|
-
register(options?: ListOptions): Promise<void>;
|
|
206
|
-
load(options?: ListOptions): Promise<void>;
|
|
207
|
-
boot(options?: ListOptions): Promise<void>;
|
|
208
|
-
shutdown(options?: ListOptions): Promise<void>;
|
|
209
|
-
clear(): void;
|
|
210
|
-
}
|
|
211
|
-
//#endregion
|
|
212
|
-
//#region src/client/services/LifecycleService.d.ts
|
|
213
|
-
declare class LifecycleService extends LifecycleService$1 {
|
|
214
|
-
addImports(imports: Record<string, any>): void;
|
|
215
|
-
}
|
|
216
|
-
//#endregion
|
|
217
|
-
//#region src/client/entities/MenuItemEntity.d.ts
|
|
218
|
-
declare const MenuItem_base: {
|
|
219
|
-
new (...args: any[]): {
|
|
220
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
221
|
-
};
|
|
222
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
223
|
-
} & Constructor$1;
|
|
224
|
-
declare class MenuItem$1 extends MenuItem_base {
|
|
225
|
-
id: string;
|
|
226
|
-
label: string;
|
|
227
|
-
layout: string;
|
|
228
|
-
to?: string;
|
|
229
|
-
target?: '_blank' | '_self' | '_parent' | '_top';
|
|
230
|
-
group?: string;
|
|
231
|
-
order?: number;
|
|
232
|
-
icon?: string;
|
|
233
|
-
parent?: string;
|
|
234
|
-
}
|
|
235
|
-
//#endregion
|
|
236
|
-
//#region src/client/services/MenuService.d.ts
|
|
237
|
-
interface ListFilter {
|
|
238
|
-
layout?: string;
|
|
239
|
-
group?: string;
|
|
240
|
-
parent?: string;
|
|
241
|
-
allowed?: boolean;
|
|
242
|
-
}
|
|
243
|
-
declare class MenuService {
|
|
244
|
-
static __container_entry_key: string;
|
|
245
|
-
items: Map<string, MenuItem$1>;
|
|
246
|
-
add(...item: Omit<Partial<MenuItem$1>, 'merge' | 'from'>[]): void;
|
|
247
|
-
remove(id: MenuItem$1['id']): void;
|
|
248
|
-
list(filter?: ListFilter): MenuItem$1[];
|
|
249
|
-
clear(): void;
|
|
250
|
-
}
|
|
251
|
-
//#endregion
|
|
252
|
-
//#region src/client/services/RouterService.d.ts
|
|
253
|
-
interface Router extends Router$1 {
|
|
254
|
-
auto: typeof auto;
|
|
255
|
-
}
|
|
256
|
-
interface AutoOptions {
|
|
257
|
-
guards?: NavigationGuard[] | ((record: RouteRecordRaw) => NavigationGuard[]);
|
|
258
|
-
strip?: (string | RegExp)[];
|
|
259
|
-
exclude?: (string | RegExp)[];
|
|
260
|
-
prefix?: string;
|
|
261
|
-
refine?: (records: RouteRecordRaw[]) => RouteRecordRaw[];
|
|
262
|
-
}
|
|
263
|
-
declare function auto(imports: Record<string, DefineComponent | (() => Promise<DefineComponent>)>, options?: AutoOptions): RouteRecordRaw[];
|
|
264
|
-
declare function createRouter(): Router;
|
|
265
|
-
//#endregion
|
|
266
|
-
//#region src/client/services/ToastService.d.ts
|
|
267
|
-
declare class ToastService {
|
|
268
|
-
static __container_entry_key: string;
|
|
269
|
-
success(message: string, options?: Record<string, any>): void;
|
|
270
|
-
error(message: string, options?: Record<string, any>): void;
|
|
271
|
-
}
|
|
272
|
-
//#endregion
|
|
273
|
-
//#region node_modules/@vueuse/core/dist/index.d.ts
|
|
274
|
-
type UseBreakpointReturn<K$1 extends string = string> = Record<K$1, ComputedRef<boolean>> & {
|
|
275
|
-
greaterOrEqual: (k: MaybeRefOrGetter<K$1>) => ComputedRef<boolean>;
|
|
276
|
-
smallerOrEqual: (k: MaybeRefOrGetter<K$1>) => ComputedRef<boolean>;
|
|
277
|
-
greater: (k: MaybeRefOrGetter<K$1>) => ComputedRef<boolean>;
|
|
278
|
-
smaller: (k: MaybeRefOrGetter<K$1>) => ComputedRef<boolean>;
|
|
279
|
-
between: (a: MaybeRefOrGetter<K$1>, b: MaybeRefOrGetter<K$1>) => ComputedRef<boolean>;
|
|
280
|
-
isGreater: (k: MaybeRefOrGetter<K$1>) => boolean;
|
|
281
|
-
isGreaterOrEqual: (k: MaybeRefOrGetter<K$1>) => boolean;
|
|
282
|
-
isSmaller: (k: MaybeRefOrGetter<K$1>) => boolean;
|
|
283
|
-
isSmallerOrEqual: (k: MaybeRefOrGetter<K$1>) => boolean;
|
|
284
|
-
isInBetween: (a: MaybeRefOrGetter<K$1>, b: MaybeRefOrGetter<K$1>) => boolean;
|
|
285
|
-
current: () => ComputedRef<K$1[]>;
|
|
286
|
-
active: () => ComputedRef<K$1 | ''>;
|
|
287
|
-
};
|
|
288
|
-
/**
|
|
289
|
-
* Reactively viewport breakpoints
|
|
290
|
-
*
|
|
291
|
-
* @see https://vueuse.org/useBreakpoints
|
|
292
|
-
*
|
|
293
|
-
* @__NO_SIDE_EFFECTS__
|
|
294
|
-
*/
|
|
295
|
-
//#endregion
|
|
296
|
-
//#region src/client/composables/useBreakpoint.d.ts
|
|
297
|
-
declare function useBreakpoints(): UseBreakpointReturn<"sm" | "md" | "lg" | "xl" | "2xl">;
|
|
298
|
-
//#endregion
|
|
299
|
-
//#region src/client/composables/useColor.d.ts
|
|
300
|
-
interface RGB {
|
|
301
|
-
r: number;
|
|
302
|
-
g: number;
|
|
303
|
-
b: number;
|
|
304
|
-
}
|
|
305
|
-
interface RGBA extends RGB {
|
|
306
|
-
a: number;
|
|
307
|
-
}
|
|
308
|
-
interface HSL {
|
|
309
|
-
h: number;
|
|
310
|
-
s: number;
|
|
311
|
-
l: number;
|
|
312
|
-
}
|
|
313
|
-
interface OKLCH {
|
|
314
|
-
l: number;
|
|
315
|
-
c: number;
|
|
316
|
-
h: number;
|
|
317
|
-
}
|
|
318
|
-
declare function extracRGB(color: string): RGB;
|
|
319
|
-
declare function extractRGBA(color: string): RGBA;
|
|
320
|
-
declare function hexToRGB(hex: string): RGB;
|
|
321
|
-
declare function hslToRgb(hsl: string): RGB;
|
|
322
|
-
declare function rgbToHsl(r: number, g: number, b: number): HSL;
|
|
323
|
-
declare function rgbToHex(r: number, g: number, b: number): string;
|
|
324
|
-
declare function rgbaToString(rgba: RGBA): string;
|
|
325
|
-
declare function extractOKLCH(color: string): OKLCH;
|
|
326
|
-
declare function oklchToRgb(color: string): RGB;
|
|
327
|
-
declare function rgbToOklch(r: number, g: number, b: number): OKLCH;
|
|
328
|
-
declare function useColorType(payload?: MaybeRef<string | null | undefined>): _$vue.WritableComputedRef<string | null, string | null>;
|
|
329
|
-
declare function useRGB(payload?: MaybeRef<string | null | undefined>): _$vue.WritableComputedRef<RGB | null, RGB | null>;
|
|
330
|
-
declare function useRGBA(payload?: MaybeRef<string | null | undefined>): _$vue.WritableComputedRef<RGBA | null, RGBA | null>;
|
|
331
|
-
declare function useHSL(payload?: MaybeRef<string | null | undefined>): _$vue.WritableComputedRef<HSL | null, HSL | null>;
|
|
332
|
-
declare function useHex(payload?: MaybeRef<string | null | undefined>): _$vue.WritableComputedRef<string | null, string | null>;
|
|
333
|
-
declare function useColor(payload?: MaybeRef<string | null | undefined>): {
|
|
334
|
-
type: _$vue.WritableComputedRef<string | null, string | null>;
|
|
335
|
-
color: _$vue.Ref<string | null | undefined, string | null | undefined>;
|
|
336
|
-
hex: _$vue.WritableComputedRef<string | null, string | null>;
|
|
337
|
-
rgb: _$vue.WritableComputedRef<RGB | null, RGB | null>;
|
|
338
|
-
hsl: _$vue.WritableComputedRef<HSL | null, HSL | null>;
|
|
339
|
-
oklch: _$vue.WritableComputedRef<OKLCH | null, OKLCH | null>;
|
|
340
|
-
rgba: _$vue.WritableComputedRef<RGBA | null, RGBA | null>;
|
|
341
|
-
};
|
|
342
|
-
//#endregion
|
|
343
|
-
//#region src/shared/services/EmmitterService.d.ts
|
|
344
|
-
interface EmmitterListenerOptions {
|
|
345
|
-
event: string;
|
|
346
|
-
}
|
|
347
|
-
interface EmmitterListener {
|
|
348
|
-
(data: any, options: EmmitterListenerOptions): void;
|
|
349
|
-
}
|
|
350
|
-
interface EmmitterHandler {
|
|
351
|
-
id: string;
|
|
352
|
-
event: string;
|
|
353
|
-
listener: EmmitterListener;
|
|
354
|
-
originalListener?: EmmitterListener;
|
|
355
|
-
}
|
|
356
|
-
interface OnOptions {
|
|
357
|
-
id?: string;
|
|
358
|
-
unique?: boolean;
|
|
359
|
-
}
|
|
360
|
-
interface OnDebounceOptions extends OnOptions {
|
|
361
|
-
debounce?: number;
|
|
362
|
-
}
|
|
363
|
-
interface EmmitterServiceOptions {
|
|
364
|
-
debug?: boolean;
|
|
365
|
-
logger?: LoggerService;
|
|
366
|
-
}
|
|
367
|
-
declare class EmmitterService<Events extends Record<string, any> = Record<string, any>> {
|
|
368
|
-
static __container_entry_key: string;
|
|
369
|
-
handlers: EmmitterHandler[];
|
|
370
|
-
debug: boolean;
|
|
371
|
-
logger: LoggerService;
|
|
372
|
-
constructor(options?: EmmitterServiceOptions);
|
|
373
|
-
static create<Events extends Record<string, any> = Record<string, any>>(options?: EmmitterServiceOptions): EmmitterService<Events>;
|
|
374
|
-
setDebug(debug: boolean): void;
|
|
375
|
-
setLogger(logger: LoggerService): void;
|
|
376
|
-
on<K extends keyof Events>(event: K, listener: (args: Events[K]) => void, options?: OnOptions): EmmitterHandler;
|
|
377
|
-
on(event: string, listener: (args: any) => void, options?: OnOptions): EmmitterHandler;
|
|
378
|
-
once<K extends keyof Events>(event: K, listener: (args: Events[K]) => void, options?: OnOptions): EmmitterHandler;
|
|
379
|
-
once(event: string, listener: (args: any) => void, options?: OnOptions): EmmitterHandler;
|
|
380
|
-
onDebounce<K extends keyof Events>(event: K, listener: (args: Events[K]) => void, options?: OnDebounceOptions): EmmitterHandler;
|
|
381
|
-
onDebounce(event: string, listener: (args: any) => void, options?: OnDebounceOptions): EmmitterHandler;
|
|
382
|
-
onAnyOf<K extends keyof Events>(events: K[], listener: (args: Events[K]) => void, options?: OnOptions): EmmitterHandler[];
|
|
383
|
-
onAnyOf(events: string[], listener: (args: any) => void, options?: OnOptions): EmmitterHandler[];
|
|
384
|
-
off(event: string, listener: EmmitterHandler['listener']): void;
|
|
385
|
-
emit<K extends keyof Events>(event: K, args: Events[K]): void;
|
|
386
|
-
emit(event: string, args?: any): void;
|
|
387
|
-
emitAndWait<K extends keyof Events>(event: K, args: Events[K]): Promise<void>;
|
|
388
|
-
emitAndWait(event: string, args?: any): Promise<void>;
|
|
389
|
-
list(): EmmitterHandler[];
|
|
390
|
-
listByEvent(event: string): EmmitterHandler[];
|
|
391
|
-
remove(payload: string | string[]): void;
|
|
392
|
-
clear(): void;
|
|
393
|
-
hasHandlers(): boolean;
|
|
394
|
-
}
|
|
395
|
-
//#endregion
|
|
396
|
-
//#region src/client/entities/DashboardWidgetData.d.ts
|
|
397
|
-
interface DashboardGridUnit {
|
|
398
|
-
base?: number;
|
|
399
|
-
sm?: number;
|
|
400
|
-
md?: number;
|
|
401
|
-
lg?: number;
|
|
402
|
-
xl?: number;
|
|
403
|
-
}
|
|
404
|
-
declare class DashboardWidgetData {
|
|
405
|
-
id: string;
|
|
406
|
-
name: string;
|
|
407
|
-
definition_id: string;
|
|
408
|
-
columns: DashboardGridUnit;
|
|
409
|
-
rows: DashboardGridUnit;
|
|
410
|
-
x: DashboardGridUnit;
|
|
411
|
-
y: DashboardGridUnit;
|
|
412
|
-
order: number;
|
|
413
|
-
options: Record<string, any>;
|
|
414
|
-
constructor(data: Partial<DashboardWidgetData>);
|
|
415
|
-
}
|
|
416
|
-
//#endregion
|
|
417
|
-
//#region src/client/entities/DashboardWidgetDefinition.d.ts
|
|
418
|
-
interface DashboardWidgetAction {
|
|
419
|
-
props?: Record<string, any>;
|
|
420
|
-
component: any;
|
|
421
|
-
}
|
|
422
|
-
declare class DashboardWidgetDefinition {
|
|
423
|
-
id: string;
|
|
424
|
-
name: string;
|
|
425
|
-
description?: string;
|
|
426
|
-
icon?: string;
|
|
427
|
-
constructor();
|
|
428
|
-
component(): any;
|
|
429
|
-
actions(): DashboardWidgetAction[];
|
|
430
|
-
}
|
|
431
|
-
//#endregion
|
|
432
|
-
//#region src/client/entities/DashboardWidget.d.ts
|
|
433
|
-
declare const DASHBOARD_ROW_HEIGHT = 80;
|
|
434
|
-
interface DashboardWidgetOptions {
|
|
435
|
-
data: DashboardWidgetData;
|
|
436
|
-
definition: DashboardWidgetDefinition;
|
|
437
|
-
}
|
|
438
|
-
interface StylesOptions {
|
|
439
|
-
contianerWidth: number;
|
|
440
|
-
breakpoint?: 'base' | 'sm' | 'md' | 'xl';
|
|
441
|
-
}
|
|
442
|
-
declare class DashboardWidget {
|
|
443
|
-
data: DashboardWidgetData;
|
|
444
|
-
definition: DashboardWidgetDefinition;
|
|
445
|
-
emmitter: EmmitterService;
|
|
446
|
-
constructor({
|
|
447
|
-
data,
|
|
448
|
-
definition
|
|
449
|
-
}: DashboardWidgetOptions);
|
|
450
|
-
static fromData(data: DashboardWidgetData): DashboardWidget;
|
|
451
|
-
setEmmitter(emmitter: EmmitterService): void;
|
|
452
|
-
get id(): string;
|
|
453
|
-
get name(): string;
|
|
454
|
-
set name(value: string);
|
|
455
|
-
get options(): DashboardWidgetData['options'];
|
|
456
|
-
get definition_id(): string;
|
|
457
|
-
component(): any;
|
|
458
|
-
actions(): DashboardWidgetAction[];
|
|
459
|
-
get columns(): DashboardWidgetData['columns'];
|
|
460
|
-
set columns(payload: DashboardWidgetData['columns']);
|
|
461
|
-
get rows(): DashboardWidgetData['rows'];
|
|
462
|
-
set rows(payload: DashboardWidgetData['rows']);
|
|
463
|
-
get x(): DashboardWidgetData['x'];
|
|
464
|
-
set x(payload: DashboardWidgetData['x']);
|
|
465
|
-
get y(): DashboardWidgetData['y'];
|
|
466
|
-
set y(payload: DashboardWidgetData['y']);
|
|
467
|
-
get classes(): string;
|
|
468
|
-
computeStyles(options: StylesOptions): string;
|
|
469
|
-
update(payload: Partial<DashboardWidgetData>): void;
|
|
470
|
-
setOption(key: string, value: any): void;
|
|
471
|
-
setX(breakpoint: 'base' | 'sm' | 'md' | 'lg' | 'xl', value?: number | undefined): void;
|
|
472
|
-
setY(breakpoint: 'base' | 'sm' | 'md' | 'lg' | 'xl', value?: number | undefined): void;
|
|
473
|
-
setColumn(breakpoint: 'base' | 'sm' | 'md' | 'lg' | 'xl', value?: number | undefined): void;
|
|
474
|
-
setRow(breakpoint: 'base' | 'sm' | 'md' | 'lg' | 'xl', value?: number | undefined): void;
|
|
475
|
-
}
|
|
476
|
-
//#endregion
|
|
477
|
-
//#region src/shared/validators/urlValidator.d.ts
|
|
478
|
-
declare const number: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.TransformAction<any, number>, v.IntegerAction<number, undefined>]>;
|
|
479
|
-
declare const boolean: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.BooleanSchema<undefined>], undefined>, v.TransformAction<string | boolean, boolean>]>;
|
|
480
|
-
declare const date: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.DateSchema<undefined>], undefined>, v.TransformAction<string | Date, Date>, v.TransformAction<Date, string>]>;
|
|
481
|
-
declare const datetime: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.DateSchema<undefined>], undefined>, v.TransformAction<string | Date, string | null>]>;
|
|
482
|
-
declare const array: <T extends v.BaseSchema<any, any, any>>(schema?: T) => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<T, undefined>]>;
|
|
483
|
-
declare const arrayNumber: () => v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.BaseSchema<any, any, any>, undefined>]>, v.TransformAction<any[], number[]>]>;
|
|
484
|
-
declare const object: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.RecordSchema<v.StringSchema<undefined>, v.AnySchema, undefined>], undefined>, v.TransformAction<string | {
|
|
485
|
-
[x: string]: any;
|
|
486
|
-
}, {
|
|
487
|
-
[x: string]: any;
|
|
488
|
-
}>, v.TransformAction<{
|
|
489
|
-
[x: string]: any;
|
|
490
|
-
}, Record<string, any>>]>;
|
|
491
|
-
declare function url(): v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.RecordSchema<v.StringSchema<undefined>, v.AnySchema, undefined>], undefined>, v.TransformAction<string | {
|
|
492
|
-
[x: string]: any;
|
|
493
|
-
}, {
|
|
494
|
-
[x: string]: any;
|
|
495
|
-
}>, v.TransformAction<{
|
|
496
|
-
[x: string]: any;
|
|
497
|
-
}, Record<string, any>>]>;
|
|
498
|
-
declare namespace url {
|
|
499
|
-
var number: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.TransformAction<any, number>, v.IntegerAction<number, undefined>]>;
|
|
500
|
-
var boolean: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.BooleanSchema<undefined>], undefined>, v.TransformAction<string | boolean, boolean>]>;
|
|
501
|
-
var date: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.DateSchema<undefined>], undefined>, v.TransformAction<string | Date, Date>, v.TransformAction<Date, string>]>;
|
|
502
|
-
var datetime: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.DateSchema<undefined>], undefined>, v.TransformAction<string | Date, string | null>]>;
|
|
503
|
-
var array: <T extends v.BaseSchema<any, any, any>>(schema?: T) => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<T, undefined>]>;
|
|
504
|
-
var arrayNumber: () => v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.BaseSchema<any, any, any>, undefined>]>, v.TransformAction<any[], number[]>]>;
|
|
505
|
-
var object: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.RecordSchema<v.StringSchema<undefined>, v.AnySchema, undefined>], undefined>, v.TransformAction<string | {
|
|
506
|
-
[x: string]: any;
|
|
507
|
-
}, {
|
|
508
|
-
[x: string]: any;
|
|
509
|
-
}>, v.TransformAction<{
|
|
510
|
-
[x: string]: any;
|
|
511
|
-
}, Record<string, any>>]>;
|
|
512
|
-
}
|
|
513
|
-
//#endregion
|
|
514
|
-
//#region src/shared/validators/keyValueValidator.d.ts
|
|
515
|
-
declare const keyValue: () => v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, Record<string, any>>]>;
|
|
516
|
-
//#endregion
|
|
517
|
-
//#region src/shared/validators/paginationValidator.d.ts
|
|
518
|
-
interface PaginationParams {
|
|
519
|
-
maxLimit?: number;
|
|
520
|
-
orderFields?: string[];
|
|
521
|
-
}
|
|
522
|
-
declare const base: (options?: PaginationParams) => v.ObjectSchema<{
|
|
523
|
-
readonly page: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.TransformAction<any, number>, v.IntegerAction<number, undefined>]>, 1>;
|
|
524
|
-
readonly limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.TransformAction<any, number>, v.IntegerAction<number, undefined>]>, number>;
|
|
525
|
-
readonly orderBy: v.NullishSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.PicklistSchema<string[], undefined>, undefined>]> | v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.StringSchema<undefined>, undefined>]>, readonly []>;
|
|
526
|
-
readonly orderDirection: v.NullishSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.UnionSchema<[v.LiteralSchema<"asc", undefined>, v.LiteralSchema<"desc", undefined>], undefined>, undefined>]>, readonly []>;
|
|
527
|
-
}, undefined>;
|
|
528
|
-
declare function pagination(options?: PaginationParams): v.ObjectSchema<{
|
|
529
|
-
readonly page: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.TransformAction<any, number>, v.IntegerAction<number, undefined>]>, 1>;
|
|
530
|
-
readonly limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.TransformAction<any, number>, v.IntegerAction<number, undefined>]>, number>;
|
|
531
|
-
readonly orderBy: v.NullishSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.PicklistSchema<string[], undefined>, undefined>]> | v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.StringSchema<undefined>, undefined>]>, readonly []>;
|
|
532
|
-
readonly orderDirection: v.NullishSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.UnionSchema<[v.LiteralSchema<"asc", undefined>, v.LiteralSchema<"desc", undefined>], undefined>, undefined>]>, readonly []>;
|
|
533
|
-
}, undefined>;
|
|
534
|
-
declare namespace pagination {
|
|
535
|
-
var base: (options?: PaginationParams) => v.ObjectSchema<{
|
|
536
|
-
readonly page: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.TransformAction<any, number>, v.IntegerAction<number, undefined>]>, 1>;
|
|
537
|
-
readonly limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.TransformAction<any, number>, v.IntegerAction<number, undefined>]>, number>;
|
|
538
|
-
readonly orderBy: v.NullishSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.PicklistSchema<string[], undefined>, undefined>]> | v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.StringSchema<undefined>, undefined>]>, readonly []>;
|
|
539
|
-
readonly orderDirection: v.NullishSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.UnionSchema<[v.LiteralSchema<"asc", undefined>, v.LiteralSchema<"desc", undefined>], undefined>, undefined>]>, readonly []>;
|
|
540
|
-
}, undefined>;
|
|
541
|
-
}
|
|
542
|
-
declare namespace index_d_exports {
|
|
543
|
-
export { PaginationParams, array, arrayNumber, base, boolean, date, datetime, keyValue, number, object, pagination, url };
|
|
544
|
-
}
|
|
545
|
-
//#endregion
|
|
546
|
-
//#region src/shared/services/ValidatorService.d.ts
|
|
547
|
-
type Valibot = typeof v & {
|
|
548
|
-
extras: typeof index_d_exports;
|
|
549
|
-
};
|
|
550
|
-
type ValibotSchema = v.BaseSchema<unknown, unknown, v.BaseIssue<unknown>>;
|
|
551
|
-
type ValibotObjectSchema = v.ObjectSchema<any, any>;
|
|
552
|
-
interface ValidatorCallback<T extends ValibotSchema> {
|
|
553
|
-
(_v: Valibot): T;
|
|
554
|
-
}
|
|
555
|
-
type ValidatorResult<T extends v.BaseSchema<any, any, any>> = v.InferOutput<T>;
|
|
556
|
-
type ValidatePayload<T extends ValibotSchema = ValibotSchema> = ValidatorCallback<T> | T;
|
|
557
|
-
//#endregion
|
|
558
|
-
//#region src/shared/schemas/dashboardSchema.d.ts
|
|
559
|
-
type DashboardSchema = ValidatorResult<ReturnType<typeof dashboardSchema>>;
|
|
560
|
-
declare function dashboardSchema(): v.ObjectSchema<{
|
|
561
|
-
readonly id: v.NumberSchema<undefined>;
|
|
562
|
-
readonly name: v.StringSchema<undefined>;
|
|
563
|
-
readonly description: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
564
|
-
readonly created_at: v.StringSchema<undefined>;
|
|
565
|
-
readonly updated_at: v.StringSchema<undefined>;
|
|
566
|
-
readonly deleted_at: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
567
|
-
readonly metas: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.AnySchema, undefined>, undefined>;
|
|
568
|
-
}, undefined>;
|
|
569
|
-
declare namespace dashboardSchema {
|
|
570
|
-
var create: Omit<v.ObjectSchema<{
|
|
571
|
-
readonly id: v.NumberSchema<undefined>;
|
|
572
|
-
readonly name: v.StringSchema<undefined>;
|
|
573
|
-
readonly description: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
574
|
-
readonly created_at: v.StringSchema<undefined>;
|
|
575
|
-
readonly updated_at: v.StringSchema<undefined>;
|
|
576
|
-
readonly deleted_at: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
577
|
-
readonly metas: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.AnySchema, undefined>, undefined>;
|
|
578
|
-
}, undefined>, "entries" | "~types" | "~run" | "~standard"> & {
|
|
579
|
-
readonly entries: Pick<{
|
|
580
|
-
readonly id: v.NumberSchema<undefined>;
|
|
581
|
-
readonly name: v.StringSchema<undefined>;
|
|
582
|
-
readonly description: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
583
|
-
readonly created_at: v.StringSchema<undefined>;
|
|
584
|
-
readonly updated_at: v.StringSchema<undefined>;
|
|
585
|
-
readonly deleted_at: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
586
|
-
readonly metas: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.AnySchema, undefined>, undefined>;
|
|
587
|
-
}, "description" | "name">;
|
|
588
|
-
readonly "~standard": v.StandardProps<{
|
|
589
|
-
description: string | null;
|
|
590
|
-
name: string;
|
|
591
|
-
}, {
|
|
592
|
-
description: string | null;
|
|
593
|
-
name: string;
|
|
594
|
-
}>;
|
|
595
|
-
readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
|
|
596
|
-
description: string | null;
|
|
597
|
-
name: string;
|
|
598
|
-
}, v.ObjectIssue | v.StringIssue>;
|
|
599
|
-
readonly "~types"?: {
|
|
600
|
-
readonly input: {
|
|
601
|
-
description: string | null;
|
|
602
|
-
name: string;
|
|
603
|
-
};
|
|
604
|
-
readonly output: {
|
|
605
|
-
description: string | null;
|
|
606
|
-
name: string;
|
|
607
|
-
};
|
|
608
|
-
readonly issue: v.ObjectIssue | v.StringIssue;
|
|
609
|
-
} | undefined;
|
|
610
|
-
};
|
|
611
|
-
var update: Omit<Omit<v.ObjectSchema<{
|
|
612
|
-
readonly id: v.NumberSchema<undefined>;
|
|
613
|
-
readonly name: v.StringSchema<undefined>;
|
|
614
|
-
readonly description: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
615
|
-
readonly created_at: v.StringSchema<undefined>;
|
|
616
|
-
readonly updated_at: v.StringSchema<undefined>;
|
|
617
|
-
readonly deleted_at: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
618
|
-
readonly metas: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.AnySchema, undefined>, undefined>;
|
|
619
|
-
}, undefined>, "entries" | "~types" | "~run" | "~standard"> & {
|
|
620
|
-
readonly entries: Pick<{
|
|
621
|
-
readonly id: v.NumberSchema<undefined>;
|
|
622
|
-
readonly name: v.StringSchema<undefined>;
|
|
623
|
-
readonly description: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
624
|
-
readonly created_at: v.StringSchema<undefined>;
|
|
625
|
-
readonly updated_at: v.StringSchema<undefined>;
|
|
626
|
-
readonly deleted_at: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
627
|
-
readonly metas: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.AnySchema, undefined>, undefined>;
|
|
628
|
-
}, "description" | "name">;
|
|
629
|
-
readonly "~standard": v.StandardProps<{
|
|
630
|
-
description: string | null;
|
|
631
|
-
name: string;
|
|
632
|
-
}, {
|
|
633
|
-
description: string | null;
|
|
634
|
-
name: string;
|
|
635
|
-
}>;
|
|
636
|
-
readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
|
|
637
|
-
description: string | null;
|
|
638
|
-
name: string;
|
|
639
|
-
}, v.ObjectIssue | v.StringIssue>;
|
|
640
|
-
readonly "~types"?: {
|
|
641
|
-
readonly input: {
|
|
642
|
-
description: string | null;
|
|
643
|
-
name: string;
|
|
644
|
-
};
|
|
645
|
-
readonly output: {
|
|
646
|
-
description: string | null;
|
|
647
|
-
name: string;
|
|
648
|
-
};
|
|
649
|
-
readonly issue: v.ObjectIssue | v.StringIssue;
|
|
650
|
-
} | undefined;
|
|
651
|
-
}, "entries" | "~types" | "~run" | "~standard"> & {
|
|
652
|
-
readonly entries: {
|
|
653
|
-
readonly description: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
654
|
-
readonly name: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
655
|
-
};
|
|
656
|
-
readonly "~standard": v.StandardProps<{
|
|
657
|
-
description?: string | null | undefined;
|
|
658
|
-
name?: string | undefined;
|
|
659
|
-
}, {
|
|
660
|
-
description?: string | null | undefined;
|
|
661
|
-
name?: string | undefined;
|
|
662
|
-
}>;
|
|
663
|
-
readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
|
|
664
|
-
description?: string | null | undefined;
|
|
665
|
-
name?: string | undefined;
|
|
666
|
-
}, v.ObjectIssue | v.StringIssue>;
|
|
667
|
-
readonly "~types"?: {
|
|
668
|
-
readonly input: {
|
|
669
|
-
description?: string | null | undefined;
|
|
670
|
-
name?: string | undefined;
|
|
671
|
-
};
|
|
672
|
-
readonly output: {
|
|
673
|
-
description?: string | null | undefined;
|
|
674
|
-
name?: string | undefined;
|
|
675
|
-
};
|
|
676
|
-
readonly issue: v.ObjectIssue | v.StringIssue;
|
|
677
|
-
} | undefined;
|
|
678
|
-
};
|
|
679
|
-
}
|
|
680
|
-
//#endregion
|
|
681
|
-
//#region src/client/entities/Dashboard.d.ts
|
|
682
|
-
interface DashboardOptions {
|
|
683
|
-
dashboard: DashboardSchema;
|
|
684
|
-
widgets?: DashboardWidgetData[];
|
|
685
|
-
}
|
|
686
|
-
declare class Dashboard {
|
|
687
|
-
name: DashboardSchema['name'];
|
|
688
|
-
description: DashboardSchema['description'];
|
|
689
|
-
widgets: DashboardWidget[];
|
|
690
|
-
emmitter: EmmitterService;
|
|
691
|
-
containerWidth: number;
|
|
692
|
-
constructor();
|
|
693
|
-
setName(name: string): this;
|
|
694
|
-
setDescription(description: string): this;
|
|
695
|
-
setContainerWidth(width: number): this;
|
|
696
|
-
setWidgets(widgets: DashboardWidgetData[]): this;
|
|
697
|
-
findLastRow(): number;
|
|
698
|
-
addWidget(payload?: Partial<DashboardWidgetData>): void;
|
|
699
|
-
removeWidget(index: number): void;
|
|
700
|
-
removeWidgetById(id: string): void;
|
|
701
|
-
updateWidget(index: number, widget: DashboardWidget): void;
|
|
702
|
-
duplicateWidget(index: number): void;
|
|
703
|
-
}
|
|
704
|
-
//#endregion
|
|
705
|
-
//#region src/client/composables/useDashboard.d.ts
|
|
706
|
-
declare function provideDashboard(entity: Ref<Dashboard>): void;
|
|
707
|
-
declare function useDashboard(): Ref<Dashboard>;
|
|
708
|
-
//#endregion
|
|
709
|
-
//#region src/client/composables/useDashboardWidget.d.ts
|
|
710
|
-
declare function provideDashboardWidget(entity: Ref<DashboardWidget>): void;
|
|
711
|
-
declare function useDashboardWidget(): Ref<DashboardWidget>;
|
|
712
|
-
//#endregion
|
|
713
|
-
//#region src/client/composables/useFetchPagination.d.ts
|
|
714
|
-
interface UseFetchPaginationOptions {
|
|
715
|
-
key?: string;
|
|
716
|
-
query?: MaybeRef<Record<string, any>>;
|
|
717
|
-
page?: MaybeRef<number>;
|
|
718
|
-
serialize?: (item: any) => any;
|
|
719
|
-
refine?: (items: any[]) => any[];
|
|
720
|
-
limit?: number;
|
|
721
|
-
orderBy?: string | string[] | null;
|
|
722
|
-
orderDirection?: 'asc' | 'desc' | ('asc' | 'desc')[] | null;
|
|
723
|
-
debounce?: number;
|
|
724
|
-
immediate?: boolean;
|
|
725
|
-
}
|
|
726
|
-
declare function useFetchPagination<T = any>(url: string, options?: UseFetchPaginationOptions): {
|
|
727
|
-
page: Ref<number, number>;
|
|
728
|
-
limit: Ref<number, number>;
|
|
729
|
-
orderBy: Ref<string | string[] | null, string | string[] | null>;
|
|
730
|
-
orderDirection: Ref<"asc" | "desc" | ("asc" | "desc")[] | null, "asc" | "desc" | ("asc" | "desc")[] | null>;
|
|
731
|
-
total: _$vue.ComputedRef<number>;
|
|
732
|
-
totalPages: _$vue.ComputedRef<number>;
|
|
733
|
-
items: _$vue.ComputedRef<T[]>;
|
|
734
|
-
loading: Ref<boolean, boolean>;
|
|
735
|
-
load: () => Promise<void>;
|
|
736
|
-
reset: () => Promise<void>;
|
|
737
|
-
query: Ref<Record<string, any>, Record<string, any>>;
|
|
738
|
-
hydrate: () => Promise<void>;
|
|
739
|
-
};
|
|
740
|
-
//#endregion
|
|
741
|
-
//#region src/shared/services/ConfigService.d.ts
|
|
742
|
-
interface Entry {
|
|
743
|
-
key: string;
|
|
744
|
-
value: any;
|
|
745
|
-
source: string;
|
|
746
|
-
}
|
|
747
|
-
declare class ConfigService {
|
|
748
|
-
static __container_entry_key: string;
|
|
749
|
-
entries: Map<string, Entry>;
|
|
750
|
-
constructor();
|
|
751
|
-
list(): Entry[];
|
|
752
|
-
parseValue(value: any): any;
|
|
753
|
-
loadFromRecord(record: Record<string, any>, source?: string): void;
|
|
754
|
-
loadFromEntries(entries: [string, any][], source?: string): void;
|
|
755
|
-
toRecord(): Record<string, any>;
|
|
756
|
-
has(key: string): boolean;
|
|
757
|
-
get<T = any | undefined>(key: string, defaultValue?: any): T;
|
|
758
|
-
getOne<T = any | undefined>(keys: string[], defaultValue?: any): T;
|
|
759
|
-
set(key: string, value: any, source?: string): void;
|
|
760
|
-
unset(key: string): void;
|
|
761
|
-
clear(): void;
|
|
762
|
-
dump(): Record<string, any>;
|
|
763
|
-
}
|
|
764
|
-
//#endregion
|
|
765
|
-
//#region src/shared/services/ContainerService.d.ts
|
|
766
|
-
type Constructor<T = object> = new (...args: any[]) => T;
|
|
767
|
-
type EntryKey = string | symbol | Constructor;
|
|
768
|
-
declare class ContainerService {
|
|
769
|
-
private entries;
|
|
770
|
-
loadFromRecord(record: Record<string, any>): void;
|
|
771
|
-
toRecord(): Record<string, any>;
|
|
772
|
-
private getKey;
|
|
773
|
-
set(payload: EntryKey, value: any): this;
|
|
774
|
-
has(payload: EntryKey): boolean;
|
|
775
|
-
get<T>(payload: EntryKey): T;
|
|
776
|
-
unset(payload: EntryKey): void;
|
|
777
|
-
singleton<T>(classConstructor: Constructor<T>): T;
|
|
778
|
-
load(entries: Record<any, any>): void;
|
|
779
|
-
proxy<T = unknown>(key: EntryKey): T;
|
|
780
|
-
keys(): EntryKey[];
|
|
781
|
-
}
|
|
782
|
-
//#endregion
|
|
783
|
-
//#region src/shared/utils/createId.d.ts
|
|
784
|
-
declare function createId(prefix?: string): string;
|
|
785
|
-
//#endregion
|
|
786
|
-
//#region src/shared/entities/AclEntity.d.ts
|
|
787
|
-
declare class AclEntity {
|
|
788
|
-
static __container_entry_key: string;
|
|
789
|
-
ability: ReturnType<typeof defineAbility>;
|
|
790
|
-
permissions: PermissionEntity[];
|
|
791
|
-
debug: boolean;
|
|
792
|
-
logger: LoggerService;
|
|
793
|
-
constructor(data?: Partial<AclEntity>);
|
|
794
|
-
can(action: string, subject: any, object?: Record<string, any>): boolean;
|
|
795
|
-
cannot(action: string, subject: any, object?: Record<string, any>): boolean;
|
|
796
|
-
subject(subject: string, object: Record<string, any>): Record<string, any> & _$_casl_ability0.ForcedSubject<string>;
|
|
797
|
-
}
|
|
798
|
-
//#endregion
|
|
799
|
-
//#region src/shared/entities/ModuleManifestEntity.d.ts
|
|
800
|
-
interface ModuleManifestBuildImport {
|
|
801
|
-
from: string;
|
|
802
|
-
to?: string;
|
|
803
|
-
type: 'global_import';
|
|
804
|
-
}
|
|
805
|
-
interface ModuleManifestBuild {
|
|
806
|
-
imports?: ModuleManifestBuildImport[];
|
|
807
|
-
}
|
|
808
|
-
declare const ModuleManifest_base: {
|
|
809
|
-
new (...args: any[]): {
|
|
810
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
811
|
-
};
|
|
812
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
813
|
-
} & Constructor$1;
|
|
814
|
-
declare class ModuleManifest extends ModuleManifest_base {
|
|
815
|
-
id: string;
|
|
816
|
-
name: string;
|
|
817
|
-
version: string;
|
|
818
|
-
description?: string;
|
|
819
|
-
enabled: boolean;
|
|
820
|
-
author?: string;
|
|
821
|
-
dependencies?: Record<string, string>;
|
|
822
|
-
build?: ModuleManifestBuild;
|
|
823
|
-
[key: string]: any;
|
|
824
|
-
}
|
|
825
|
-
//#endregion
|
|
826
|
-
//#region src/shared/entities/ModuleEntity.d.ts
|
|
827
|
-
interface ModuleUpgradeInfo {
|
|
828
|
-
source: 'git' | 'zip';
|
|
829
|
-
[key: string]: any;
|
|
830
|
-
}
|
|
831
|
-
declare const Module_base$1: {
|
|
832
|
-
new (...args: any[]): {
|
|
833
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
834
|
-
};
|
|
835
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
836
|
-
} & Constructor$1 & Constructor$1<{}> & typeof LifecycleHook;
|
|
837
|
-
declare class Module$1 extends Module_base$1 {
|
|
838
|
-
id: string;
|
|
839
|
-
name: string;
|
|
840
|
-
enabled: boolean;
|
|
841
|
-
dependencies: Record<string, any>;
|
|
842
|
-
build: ModuleManifest['build'];
|
|
843
|
-
directory: string;
|
|
844
|
-
upgrade_info?: ModuleUpgradeInfo;
|
|
845
|
-
setData(data: Partial<Module$1 | ModuleManifest>): void;
|
|
846
|
-
}
|
|
847
|
-
//#endregion
|
|
848
|
-
//#region src/shared/entities/PluginEntity.d.ts
|
|
849
|
-
declare const PluginEntity_base$1: {
|
|
850
|
-
new (...args: any[]): {
|
|
851
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
852
|
-
};
|
|
853
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
854
|
-
} & Constructor$1;
|
|
855
|
-
declare class PluginEntity$1 extends PluginEntity_base$1 {
|
|
856
|
-
id: string;
|
|
857
|
-
name: string;
|
|
858
|
-
version: string;
|
|
859
|
-
enabled: boolean;
|
|
860
|
-
aliases: string[];
|
|
861
|
-
version_channel: string;
|
|
862
|
-
version_available_channels: string[];
|
|
863
|
-
}
|
|
864
|
-
//#endregion
|
|
865
|
-
//#region src/client/composables/useForm.d.ts
|
|
866
|
-
interface ValibotFormOptions<T extends ValibotSchema = ValibotSchema> extends Omit<FormOptions<ValidatePayload<T>, ValidatorResult<T>>, 'validationSchema'> {}
|
|
867
|
-
interface ValibotFormResultObject<T extends ValibotObjectSchema> extends GenericObject, FormContext<ValidatorResult<T>> {}
|
|
868
|
-
declare const useForm: typeof useValibotForm;
|
|
869
|
-
declare const toTypedSchema: typeof toTypedSchema$1;
|
|
870
|
-
declare function useValibotForm<T extends ValibotObjectSchema = ValibotObjectSchema>(schema: T, options?: ValibotFormOptions<T>): FormContext<ValidatorResult<T>>;
|
|
871
|
-
//#endregion
|
|
872
|
-
//#region src/client/composables/useLayoutOptions.d.ts
|
|
873
|
-
declare function useLayoutOptions(): _$vue.Ref<any, any>;
|
|
874
|
-
//#endregion
|
|
875
|
-
//#region src/client/composables/useLoading.d.ts
|
|
876
|
-
interface Options {
|
|
877
|
-
timeout?: number;
|
|
878
|
-
}
|
|
879
|
-
interface LoadingRef extends Ref<boolean> {
|
|
880
|
-
set: (value: boolean) => void;
|
|
881
|
-
}
|
|
882
|
-
declare function useLoading(defaultValue?: boolean, options?: Options): LoadingRef;
|
|
883
|
-
//#endregion
|
|
884
|
-
//#region src/client/composables/useMenu.d.ts
|
|
885
|
-
interface MenuBase {
|
|
886
|
-
id: string;
|
|
887
|
-
label: string;
|
|
888
|
-
order?: number;
|
|
889
|
-
}
|
|
890
|
-
interface MenuSingle extends MenuBase {
|
|
891
|
-
icon: string;
|
|
892
|
-
to: string;
|
|
893
|
-
target?: '_blank' | '_self' | '_parent' | '_top';
|
|
894
|
-
}
|
|
895
|
-
interface MenuWithChildren extends MenuBase {
|
|
896
|
-
icon: string;
|
|
897
|
-
children: Omit<MenuSingle, 'icon'>[];
|
|
898
|
-
}
|
|
899
|
-
interface MenuGroup extends MenuBase {
|
|
900
|
-
group: boolean;
|
|
901
|
-
items: MenuItem[];
|
|
902
|
-
}
|
|
903
|
-
interface MenuItem {
|
|
904
|
-
id: string;
|
|
905
|
-
label: string;
|
|
906
|
-
to?: string;
|
|
907
|
-
target?: '_blank' | '_self' | '_parent' | '_top';
|
|
908
|
-
group?: string;
|
|
909
|
-
order?: number;
|
|
910
|
-
icon?: string;
|
|
911
|
-
parent?: string;
|
|
912
|
-
layout?: string;
|
|
913
|
-
}
|
|
914
|
-
type UseMenu = ReturnType<typeof useMenu>;
|
|
915
|
-
declare function useMenu(): {
|
|
916
|
-
items: _$vue.ComputedRef<{
|
|
917
|
-
id: string;
|
|
918
|
-
label: string;
|
|
919
|
-
to?: string | undefined;
|
|
920
|
-
target?: "_blank" | "_self" | "_parent" | "_top" | undefined;
|
|
921
|
-
group?: string | undefined;
|
|
922
|
-
order?: number | undefined;
|
|
923
|
-
icon?: string | undefined;
|
|
924
|
-
parent?: string | undefined;
|
|
925
|
-
layout?: string | undefined;
|
|
926
|
-
}[]>;
|
|
927
|
-
add: (...item: MenuItem[]) => void;
|
|
928
|
-
remove: (item: MenuItem | MenuItem["id"]) => void;
|
|
929
|
-
removeGroup: (groupId: string) => void;
|
|
930
|
-
removeMany: (itemIds: string[]) => void;
|
|
931
|
-
removeManyGroup: (groupIds: string[]) => void;
|
|
932
|
-
clear: () => void;
|
|
933
|
-
};
|
|
934
|
-
//#endregion
|
|
935
|
-
//#region src/client/composables/useRouteQuery.d.ts
|
|
936
|
-
declare const useRouteQuery: typeof useRouteQuery$1;
|
|
937
|
-
//#endregion
|
|
938
|
-
//#region src/client/composables/useState.d.ts
|
|
939
|
-
interface UseStateOptions {
|
|
940
|
-
default?: () => any;
|
|
941
|
-
transform?: (value: any) => any;
|
|
942
|
-
}
|
|
943
|
-
declare function useState<T>(key: string, options?: UseStateOptions): Ref<T>;
|
|
944
|
-
//#endregion
|
|
945
|
-
//#region src/client/facades/acl.d.ts
|
|
946
|
-
declare const acl: AclEntity;
|
|
947
|
-
//#endregion
|
|
948
|
-
//#region src/client/facades/auth.d.ts
|
|
949
|
-
declare const auth: AuthService;
|
|
950
|
-
//#endregion
|
|
951
|
-
//#region src/client/facades/config.d.ts
|
|
952
|
-
declare const config: ConfigService;
|
|
953
|
-
//#endregion
|
|
954
|
-
//#region src/client/facades/container.d.ts
|
|
955
|
-
declare const _default: ContainerService;
|
|
956
|
-
//#endregion
|
|
957
|
-
//#region src/client/registry/DashboardWidgetRegistry.d.ts
|
|
958
|
-
declare class DashboardWidgetRegistry {
|
|
959
|
-
static __container_entry_key: string;
|
|
960
|
-
private definitions;
|
|
961
|
-
register(...definition: DashboardWidgetDefinition[]): void;
|
|
962
|
-
get(id: string): DashboardWidgetDefinition | null;
|
|
963
|
-
list(): DashboardWidgetDefinition[];
|
|
964
|
-
}
|
|
965
|
-
//#endregion
|
|
966
|
-
//#region src/client/facades/dashboardRegistry.d.ts
|
|
967
|
-
declare const dashboardRegistry: DashboardWidgetRegistry;
|
|
968
|
-
//#endregion
|
|
969
|
-
//#region src/client/facades/emmitter.d.ts
|
|
970
|
-
declare const emmitter: EmmitterService<Record<string, any>>;
|
|
971
|
-
//#endregion
|
|
972
|
-
//#region src/client/facades/fetcher.d.ts
|
|
973
|
-
declare const fetcher: FetchService;
|
|
974
|
-
//#endregion
|
|
975
|
-
//#region src/client/facades/layout.d.ts
|
|
976
|
-
declare const layout: any;
|
|
977
|
-
//#endregion
|
|
978
|
-
//#region src/client/facades/lifecycle.d.ts
|
|
979
|
-
declare const lifecycle: LifecycleService;
|
|
980
|
-
//#endregion
|
|
981
|
-
//#region src/client/facades/logger.d.ts
|
|
982
|
-
declare const logger: LoggerService;
|
|
983
|
-
//#endregion
|
|
984
|
-
//#region src/client/facades/menu.d.ts
|
|
985
|
-
declare const menu: MenuService;
|
|
986
|
-
//#endregion
|
|
987
|
-
//#region src/client/facades/route.d.ts
|
|
988
|
-
declare const route: RouteLocationNormalizedGeneric;
|
|
989
|
-
//#endregion
|
|
990
|
-
//#region src/client/facades/router.d.ts
|
|
991
|
-
declare const router: Router;
|
|
992
|
-
//#endregion
|
|
993
|
-
//#region src/client/facades/toast.d.ts
|
|
994
|
-
declare const toast: ToastService;
|
|
995
|
-
//#endregion
|
|
996
|
-
//#region src/client/facades/veeValidate.d.ts
|
|
997
|
-
declare const VEE_VALIDATE_CONTAINER_KEY = "vee-validate";
|
|
998
|
-
declare const veeValidate: typeof VeeValidate;
|
|
999
|
-
//#endregion
|
|
1000
|
-
//#region src/client/facades/vue.d.ts
|
|
1001
|
-
declare const VUE_CONTAINER_KEY = "Vue";
|
|
1002
|
-
declare const vue: typeof _$vue;
|
|
1003
|
-
//#endregion
|
|
1004
|
-
//#region src/client/facades/vueRouter.d.ts
|
|
1005
|
-
declare const VUE_ROUTER_CONTAINER_KEY = "VueRouter";
|
|
1006
|
-
declare const vueRouter: typeof VueRouter;
|
|
1007
|
-
//#endregion
|
|
1008
|
-
//#region src/client/entities/DashboardWidgetDefinitionChart.d.ts
|
|
1009
|
-
/**
|
|
1010
|
-
* Component to be used for chart widgets in the dashboard.
|
|
1011
|
-
* Plugins can extend this class to create their own chart widgets.
|
|
1012
|
-
* @example
|
|
1013
|
-
* class MyChartWidget extends DashboardWidgetDefinitionChart {
|
|
1014
|
-
* constructor() {
|
|
1015
|
-
* super()
|
|
1016
|
-
* this.name = 'My Chart Widget'
|
|
1017
|
-
* this.id = 'my-chart-widget'
|
|
1018
|
-
* }
|
|
1019
|
-
* }
|
|
1020
|
-
*/
|
|
1021
|
-
declare class DashboardWidgetDefinitionChart extends DashboardWidgetDefinition {
|
|
1022
|
-
private static renderer;
|
|
1023
|
-
constructor();
|
|
1024
|
-
static setRenderer(renderer: any): void;
|
|
1025
|
-
component(): any;
|
|
1026
|
-
chartOptions(payload: DashboardWidgetData['options']): Promise<any>;
|
|
1027
|
-
}
|
|
1028
|
-
//#endregion
|
|
1029
|
-
//#region src/client/entities/ModuleEntity.d.ts
|
|
1030
|
-
declare const Module_base: typeof Module$1;
|
|
1031
|
-
declare class Module extends Module_base {}
|
|
1032
|
-
//#endregion
|
|
1033
|
-
//#region src/client/entities/PluginEntity.d.ts
|
|
1034
|
-
declare const PluginEntity_base: typeof PluginEntity$1;
|
|
1035
|
-
declare class PluginEntity extends PluginEntity_base {
|
|
1036
|
-
addPagesFolder(imports: any, options?: AutoOptions): void;
|
|
1037
|
-
load(): Promise<void>;
|
|
1038
|
-
}
|
|
1039
|
-
//#endregion
|
|
1040
|
-
//#region src/client/utils/autoPages.d.ts
|
|
1041
|
-
/** @deprecated Use auto from RouterService instead */
|
|
1042
|
-
declare function autoRoutes(imports: Record<string, DefineComponent | (() => Promise<DefineComponent>)>, options?: AutoOptions): RouteRecordRaw[];
|
|
1043
|
-
//#endregion
|
|
1044
|
-
//#region src/client/utils/defineColumns.d.ts
|
|
1045
|
-
interface DataTableColumn<T extends Record<string, any> = Record<string, any>> {
|
|
1046
|
-
id?: string;
|
|
1047
|
-
label?: string;
|
|
1048
|
-
field?: keyof T | ((row: T) => any) | (string & {});
|
|
1049
|
-
sortable?: boolean;
|
|
1050
|
-
width?: string | number;
|
|
1051
|
-
}
|
|
1052
|
-
declare function defineColumns<T extends Record<string, any>>(columns: DataTableColumn<T>[]): DataTableColumn<T>[];
|
|
1053
|
-
//#endregion
|
|
1054
|
-
//#region src/client/utils/defineFormFields.d.ts
|
|
1055
|
-
interface DefineFormField {
|
|
1056
|
-
component: 'text-field' | 'textarea' | 'select' | 'autocomplete' | 'switch' | 'file-upload' | 'image-upload' | 'color-picker' | 'string-list-input' | 'json-input' | 'date-picker' | 'hidden';
|
|
1057
|
-
[key: string]: any;
|
|
1058
|
-
}
|
|
1059
|
-
declare function defineFormFields(field: Record<string, DefineFormField>): Record<string, DefineFormField>;
|
|
1060
|
-
//#endregion
|
|
1061
|
-
//#region src/client/utils/fetcher.d.ts
|
|
1062
|
-
/** @deprecated Use fetcher facade */
|
|
1063
|
-
declare const $fetch: FetchService;
|
|
1064
|
-
//#endregion
|
|
1065
|
-
//#region src/client/utils/file.d.ts
|
|
1066
|
-
interface PickOptions {
|
|
1067
|
-
accept?: string;
|
|
1068
|
-
multiple?: boolean;
|
|
1069
|
-
}
|
|
1070
|
-
type PickResult<T extends PickOptions> = T['multiple'] extends true ? File[] : File | null;
|
|
1071
|
-
declare function pick<T extends PickOptions>(options: T): Promise<PickResult<T>>;
|
|
1072
|
-
declare function toUint8Array(file: File): Promise<Uint8Array>;
|
|
1073
|
-
interface UploadOptions {
|
|
1074
|
-
driveId: string;
|
|
1075
|
-
file: File;
|
|
1076
|
-
directory?: string;
|
|
1077
|
-
}
|
|
1078
|
-
declare function upload(options: UploadOptions): Promise<any>;
|
|
1079
|
-
declare const $file: {
|
|
1080
|
-
pick: typeof pick;
|
|
1081
|
-
upload: typeof upload;
|
|
1082
|
-
toUint8Array: typeof toUint8Array;
|
|
1083
|
-
};
|
|
1084
|
-
//#endregion
|
|
1085
|
-
//#region src/client/utils/parseTo.d.ts
|
|
1086
|
-
declare function parseTo(to: string): string;
|
|
1087
|
-
//#endregion
|
|
1088
|
-
//#region src/client/utils/toast.d.ts
|
|
1089
|
-
declare const $toast: ((message: string | (() => string | _$vue.Component) | _$vue.Component, data?: _$vue_sonner0.ExternalToast) => string | number) & {
|
|
1090
|
-
success: (message: string | (() => string | _$vue.Component) | _$vue.Component, data?: _$vue_sonner0.ExternalToast) => string | number;
|
|
1091
|
-
info: (message: string | (() => string | _$vue.Component) | _$vue.Component, data?: _$vue_sonner0.ExternalToast) => string | number;
|
|
1092
|
-
warning: (message: string | (() => string | _$vue.Component) | _$vue.Component, data?: _$vue_sonner0.ExternalToast) => string | number;
|
|
1093
|
-
error: (message: string | (() => string | _$vue.Component) | _$vue.Component, data?: _$vue_sonner0.ExternalToast) => string | number;
|
|
1094
|
-
custom: (component: _$vue.Component, data?: _$vue_sonner0.ExternalToast) => string | number;
|
|
1095
|
-
message: (message: string | (() => string | _$vue.Component) | _$vue.Component, data?: _$vue_sonner0.ExternalToast) => string | number;
|
|
1096
|
-
promise: <ToastData>(promise: Promise<ToastData> | (() => Promise<ToastData>), data?: ({
|
|
1097
|
-
id?: number | string | undefined;
|
|
1098
|
-
icon?: _$vue.Component | undefined;
|
|
1099
|
-
toasterId?: string | undefined;
|
|
1100
|
-
component?: _$vue.Component | undefined;
|
|
1101
|
-
componentProps?: any;
|
|
1102
|
-
richColors?: boolean | undefined;
|
|
1103
|
-
invert?: boolean | undefined;
|
|
1104
|
-
closeButton?: boolean | undefined;
|
|
1105
|
-
dismissible?: boolean | undefined;
|
|
1106
|
-
duration?: number | undefined;
|
|
1107
|
-
important?: boolean | undefined;
|
|
1108
|
-
action?: (_$vue_sonner0.Action | _$vue.Component) | undefined;
|
|
1109
|
-
cancel?: (_$vue_sonner0.Action | _$vue.Component) | undefined;
|
|
1110
|
-
onDismiss?: ((toast: _$vue_sonner0.ToastT) => void) | undefined;
|
|
1111
|
-
onAutoClose?: ((toast: _$vue_sonner0.ToastT) => void) | undefined;
|
|
1112
|
-
cancelButtonStyle?: _$vue.CSSProperties | undefined;
|
|
1113
|
-
actionButtonStyle?: _$vue.CSSProperties | undefined;
|
|
1114
|
-
style?: _$vue.CSSProperties | undefined;
|
|
1115
|
-
unstyled?: boolean | undefined;
|
|
1116
|
-
class?: string | undefined;
|
|
1117
|
-
classes?: _$vue_sonner0.ToastClasses | undefined;
|
|
1118
|
-
descriptionClass?: string | undefined;
|
|
1119
|
-
position?: ("top-left" | "top-right" | "bottom-left" | "bottom-right" | "top-center" | "bottom-center") | undefined;
|
|
1120
|
-
closeButtonPosition?: ("top-left" | "top-right" | "bottom-left" | "bottom-right") | undefined;
|
|
1121
|
-
testId?: string | undefined;
|
|
1122
|
-
} & {
|
|
1123
|
-
loading?: string | _$vue.Component;
|
|
1124
|
-
success?: (string | _$vue.Component | ((data: ToastData) => _$vue.Component | string | Promise<_$vue.Component | string>)) | (_$vue_sonner0.PromiseIExtendedResult | ((data: ToastData) => _$vue_sonner0.PromiseIExtendedResult | Promise<_$vue_sonner0.PromiseIExtendedResult>)) | undefined;
|
|
1125
|
-
error?: (string | _$vue.Component | ((data: any) => _$vue.Component | string | Promise<_$vue.Component | string>)) | (_$vue_sonner0.PromiseIExtendedResult | ((data: any) => _$vue_sonner0.PromiseIExtendedResult | Promise<_$vue_sonner0.PromiseIExtendedResult>));
|
|
1126
|
-
description?: string | _$vue.Component | ((data: any) => _$vue.Component | string | Promise<_$vue.Component | string>);
|
|
1127
|
-
finally?: () => void | Promise<void>;
|
|
1128
|
-
}) | undefined) => (string & {
|
|
1129
|
-
unwrap: () => Promise<ToastData>;
|
|
1130
|
-
}) | (number & {
|
|
1131
|
-
unwrap: () => Promise<ToastData>;
|
|
1132
|
-
}) | {
|
|
1133
|
-
unwrap: () => Promise<ToastData>;
|
|
1134
|
-
} | undefined;
|
|
1135
|
-
dismiss: (id?: number | string) => string | number | undefined;
|
|
1136
|
-
loading: (message: string | (() => string | _$vue.Component) | _$vue.Component, data?: _$vue_sonner0.ExternalToast) => string | number;
|
|
1137
|
-
} & {
|
|
1138
|
-
getHistory: () => (_$vue_sonner0.ToastT<_$vue.Component> | _$vue_sonner0.ToastToDismiss)[];
|
|
1139
|
-
getToasts: () => (_$vue_sonner0.ToastT<_$vue.Component> | _$vue_sonner0.ToastToDismiss)[];
|
|
1140
|
-
};
|
|
1141
|
-
//#endregion
|
|
1142
|
-
//#region src/client/guards/authGuard.d.ts
|
|
1143
|
-
interface AuthGuardOptions {
|
|
1144
|
-
redirect: string | ((to: RouteLocationNormalized) => string);
|
|
1145
|
-
exclude?: string[];
|
|
1146
|
-
}
|
|
1147
|
-
declare function createAuthGuard(options: AuthGuardOptions): NavigationGuard;
|
|
1148
|
-
declare const authGuard: NavigationGuard;
|
|
1149
|
-
//#endregion
|
|
1150
|
-
//#region src/client/guards/guestGuard.d.ts
|
|
1151
|
-
interface GuestGuardOptions {
|
|
1152
|
-
redirect: string;
|
|
1153
|
-
}
|
|
1154
|
-
declare function createGuestGuard(options: GuestGuardOptions): () => string | undefined;
|
|
1155
|
-
declare const guestGuard: () => string | undefined;
|
|
1156
|
-
//#endregion
|
|
1157
|
-
//#region src/client/guards/setupGuard.d.ts
|
|
1158
|
-
declare const setupGuard: NavigationGuard;
|
|
1159
|
-
//#endregion
|
|
1160
|
-
export { $fetch, $file, $toast, AuthGuardOptions, AuthService, AutoOptions, DASHBOARD_ROW_HEIGHT, Dashboard, DashboardGridUnit, DashboardOptions, DashboardWidget, DashboardWidgetAction, DashboardWidgetData, DashboardWidgetDefinition, DashboardWidgetDefinitionChart, DashboardWidgetRegistry, DataTableColumn, DefineFormField, FetchBrowserService, FetchNodeService, FetchOptions, FetchService, GuestGuardOptions, HSL, LayoutService, LifecycleService, ListFilter, MenuBase, MenuGroup, MenuItem, MenuItem$1 as MenuItemEntity, MenuService, MenuSingle, MenuWithChildren, Module as ModuleEntity, OKLCH, PluginEntity, RGB, RGBA, Router, ToastService, UseFetchPaginationOptions, UseMenu, UseStateOptions, VEE_VALIDATE_CONTAINER_KEY, VUE_CONTAINER_KEY, VUE_ROUTER_CONTAINER_KEY, ValibotFormOptions, ValibotFormResultObject, acl, auth, authGuard, auto, autoRoutes, config, _default as container, createAuthGuard, createGuestGuard, createId, createRouter, dashboardRegistry, defineColumns, defineFormFields, emmitter, extracRGB, extractOKLCH, extractRGBA, fetcher, guestGuard, hexToRGB, hslToRgb, layout, lifecycle, logger, menu, oklchToRgb, parseTo, provideDashboard, provideDashboardWidget, rgbToHex, rgbToHsl, rgbToOklch, rgbaToString, route, router, setupGuard, toTypedSchema, toast, useBreakpoints, useColor, useColorType, useDashboard, useDashboardWidget, useFetchPagination, useForm, useHSL, useHex, useLayoutOptions, useLoading, useMenu, useRGB, useRGBA, useRouteQuery, useState, useValibotForm, veeValidate, vue, vueRouter };
|
|
1161
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5tdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NoYXJlZC91dGlscy9jb21wb3NlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL1Blcm1pc3Npb25FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvUm9sZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Vc2VyRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L3NlcnZpY2VzL0F1dGhTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L3NlcnZpY2VzL0ZldGNoU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9zZXJ2aWNlcy9GZXRjaEJyb3dzZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L3NlcnZpY2VzL0ZldGNoTm9kZVNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvc2VydmljZXMvTGF5b3V0U2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0xpZmVjeWNsZUhvb2suZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvTGlmZWN5Y2xlU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9zZXJ2aWNlcy9MaWZlY3ljbGVTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2VudGl0aWVzL01lbnVJdGVtRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L3NlcnZpY2VzL01lbnVTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L3NlcnZpY2VzL1JvdXRlclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvc2VydmljZXMvVG9hc3RTZXJ2aWNlLmQudHMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZXVzZS9jb3JlL2Rpc3QvaW5kZXguZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvY29tcG9zYWJsZXMvdXNlQnJlYWtwb2ludC5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9jb21wb3NhYmxlcy91c2VDb2xvci5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zZXJ2aWNlcy9FbW1pdHRlclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZW50aXRpZXMvRGFzaGJvYXJkV2lkZ2V0RGF0YS5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9lbnRpdGllcy9EYXNoYm9hcmRXaWRnZXREZWZpbml0aW9uLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2VudGl0aWVzL0Rhc2hib2FyZFdpZGdldC5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC92YWxpZGF0b3JzL3VybFZhbGlkYXRvci5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC92YWxpZGF0b3JzL2tleVZhbHVlVmFsaWRhdG9yLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3ZhbGlkYXRvcnMvcGFnaW5hdGlvblZhbGlkYXRvci5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC92YWxpZGF0b3JzL2luZGV4LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL1ZhbGlkYXRvclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2NoZW1hcy9kYXNoYm9hcmRTY2hlbWEuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZW50aXRpZXMvRGFzaGJvYXJkLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2NvbXBvc2FibGVzL3VzZURhc2hib2FyZC5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9jb21wb3NhYmxlcy91c2VEYXNoYm9hcmRXaWRnZXQuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvY29tcG9zYWJsZXMvdXNlRmV0Y2hQYWdpbmF0aW9uLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL0NvbmZpZ1NlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvQ29udGFpbmVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC91dGlscy9jcmVhdGVJZC5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9BY2xFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvTW9kdWxlTWFuaWZlc3RFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvTW9kdWxlRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL1BsdWdpbkVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9jb21wb3NhYmxlcy91c2VGb3JtLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2NvbXBvc2FibGVzL3VzZUxheW91dE9wdGlvbnMuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvY29tcG9zYWJsZXMvdXNlTG9hZGluZy5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9jb21wb3NhYmxlcy91c2VNZW51LmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2NvbXBvc2FibGVzL3VzZVJvdXRlUXVlcnkuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvY29tcG9zYWJsZXMvdXNlU3RhdGUuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZmFjYWRlcy9hY2wuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZmFjYWRlcy9hdXRoLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2ZhY2FkZXMvY29uZmlnLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2ZhY2FkZXMvY29udGFpbmVyLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L3JlZ2lzdHJ5L0Rhc2hib2FyZFdpZGdldFJlZ2lzdHJ5LmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2ZhY2FkZXMvZGFzaGJvYXJkUmVnaXN0cnkuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZmFjYWRlcy9lbW1pdHRlci5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9mYWNhZGVzL2ZldGNoZXIuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZmFjYWRlcy9sYXlvdXQuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZmFjYWRlcy9saWZlY3ljbGUuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZmFjYWRlcy9sb2dnZXIuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZmFjYWRlcy9tZW51LmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2ZhY2FkZXMvcm91dGUuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZmFjYWRlcy9yb3V0ZXIuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZmFjYWRlcy90b2FzdC5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9mYWNhZGVzL3ZlZVZhbGlkYXRlLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2ZhY2FkZXMvdnVlLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2ZhY2FkZXMvdnVlUm91dGVyLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2VudGl0aWVzL0Rhc2hib2FyZFdpZGdldERlZmluaXRpb25DaGFydC5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9lbnRpdGllcy9Nb2R1bGVFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZW50aXRpZXMvUGx1Z2luRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L3V0aWxzL2F1dG9QYWdlcy5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC91dGlscy9kZWZpbmVDb2x1bW5zLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L3V0aWxzL2RlZmluZUZvcm1GaWVsZHMuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvdXRpbHMvZmV0Y2hlci5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC91dGlscy9maWxlLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L3V0aWxzL3BhcnNlVG8uZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvdXRpbHMvdG9hc3QuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZ3VhcmRzL2F1dGhHdWFyZC5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9ndWFyZHMvZ3Vlc3RHdWFyZC5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9ndWFyZHMvc2V0dXBHdWFyZC5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVW5pb25Ub0ludGVyc2VjdGlvbiB9IGZyb20gJy4vdHlwaW5nLnRzJztcbmV4cG9ydCB0eXBlIEFueUNsYXNzID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xuZXhwb3J0IHR5cGUgQ29uc3RydWN0b3I8VCA9IHt9PiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5leHBvcnQgdHlwZSBNaXhpbjxUPiA9IChiYXNlOiBDb25zdHJ1Y3RvcikgPT4gQ29uc3RydWN0b3I8VD47XG4vKipcbiAqIENvbXBvc2VzIG11bHRpcGxlIG1peGlucyBpbnRvIGEgc2luZ2xlIGNsYXNzIHRoYXQgY2FuIGJlIGV4dGVuZGVkLlxuICogQWxsb3dzIGZvciBtdWx0aXBsZSBpbmhlcml0YW5jZS1saWtlIGJlaGF2aW9yIGJ5IGFwcGx5aW5nIG1peGlucyBzZXF1ZW50aWFsbHkuXG4gKlxuICogQHBhcmFtIG1peGlucyAtIEFycmF5IG9mIG1peGluIGZ1bmN0aW9ucyB0byBjb21wb3NlXG4gKiBAcmV0dXJucyBBIGNsYXNzIGNvbnN0cnVjdG9yIHRoYXQgaW5jbHVkZXMgYWxsIG1peGluIGZ1bmN0aW9uYWxpdHlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY2xhc3MgVXNlciBleHRlbmRzIGNvbXBvc2UoVGltZXN0YW1wLCBTb2Z0RGVsZXRlKSB7XG4gKiAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcbiAqICAgICBzdXBlcigpXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb21wb3NlPE0gZXh0ZW5kcyBBcnJheTwoYmFzZTogQ29uc3RydWN0b3I8YW55PikgPT4gQ29uc3RydWN0b3I8YW55Pj4+KC4uLm1peGluczogTSk6IFVuaW9uVG9JbnRlcnNlY3Rpb248UmV0dXJuVHlwZTxNW251bWJlcl0+Pjtcbi8qKlxuICogQWx0ZXJuYXRpdmUgY29tcG9zZSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB3aXRoIGEgYmFzZSBjbGFzc1xuICpcbiAqIEBwYXJhbSBiYXNlQ2xhc3MgLSBUaGUgYmFzZSBjbGFzcyB0byBzdGFydCB3aXRoXG4gKiBAcGFyYW0gbWl4aW5zIC0gQXJyYXkgb2YgbWl4aW4gZnVuY3Rpb25zIHRvIGFwcGx5XG4gKiBAcmV0dXJucyBBIGNsYXNzIGNvbnN0cnVjdG9yIHRoYXQgZXh0ZW5kcyB0aGUgYmFzZSBjbGFzcyB3aXRoIGFsbCBtaXhpbiBmdW5jdGlvbmFsaXR5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIFVzZXIgZXh0ZW5kcyBjb21wb3NlV2l0aChCYXNlRW50aXR5LCBUaW1lc3RhbXAsIFNvZnREZWxldGUpIHtcbiAqICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICogICAgIHN1cGVyKClcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvbXBvc2VXaXRoPFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3IsIE0gZXh0ZW5kcyBBcnJheTwoYmFzZTogQ29uc3RydWN0b3IpID0+IENvbnN0cnVjdG9yPGFueT4+PihiYXNlQ2xhc3M6IFRCYXNlLCAuLi5taXhpbnM6IE0pOiBUQmFzZSAmIFVuaW9uVG9JbnRlcnNlY3Rpb248UmV0dXJuVHlwZTxNW251bWJlcl0+PjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG1peGluPFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3I+KFNvdXJjZTogVEJhc2UpOiA8VFRhcmdldCBleHRlbmRzIENvbnN0cnVjdG9yPihUYXJnZXQ6IFRUYXJnZXQpID0+IFRUYXJnZXQgJiBUQmFzZTtcbiIsImRlY2xhcmUgY29uc3QgUGVybWlzc2lvbkVudGl0eV9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvcjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlcm1pc3Npb25FbnRpdHkgZXh0ZW5kcyBQZXJtaXNzaW9uRW50aXR5X2Jhc2Uge1xuICAgIGlkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICAgIG9yaWdpbjogc3RyaW5nO1xuICAgIHN1YmplY3Q6IHN0cmluZztcbiAgICBhY3Rpb246IHN0cmluZztcbiAgICBjb25kaXRpb25zOiBzdHJpbmcgfCBudWxsIHwgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBnZXQgZWRpdGFibGUoKTogYm9vbGVhbjtcbiAgICBnZXQgcGFyc2VkQ29uZGl0aW9ucygpOiBhbnk7XG59XG5leHBvcnQge307XG4iLCJkZWNsYXJlIGNvbnN0IFJvbGVfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3IgJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgY3JlYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgICAgICAgdXBkYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgICB9O1xufSAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBkZWxldGVkX2F0OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvbGUgZXh0ZW5kcyBSb2xlX2Jhc2Uge1xuICAgIGlkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgUGVybWlzc2lvbiBmcm9tICcuL1Blcm1pc3Npb25FbnRpdHkudHMnO1xuaW1wb3J0IHR5cGUgUm9sZSBmcm9tICcuL1JvbGVFbnRpdHkudHMnO1xuZGVjbGFyZSBjb25zdCBVc2VyRW50aXR5X2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGNyZWF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgICAgIHVwZGF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgfTtcbn0gJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgZGVsZXRlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVc2VyRW50aXR5IGV4dGVuZHMgVXNlckVudGl0eV9iYXNlIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gICAgdmVyaWZpZWRfYXQ/OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbiAgICBwZXJtaXNzaW9ucz86IFBlcm1pc3Npb25bXTtcbiAgICByb2xlcz86IFJvbGVbXTtcbiAgICBnZXQgaW5pdGlhbHMoKTogc3RyaW5nO1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IFVzZXIgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9Vc2VyRW50aXR5LnRzJztcbmludGVyZmFjZSBMb2dvdXRPcHRpb25zIHtcbiAgICByZWRpcmVjdD86IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgdXNlcjogVXNlciB8IG51bGw7XG4gICAgY29uc3RydWN0b3IoZGF0YT86IFBhcnRpYWw8QXV0aFNlcnZpY2U+KTtcbiAgICBsb2dvdXQob3B0aW9ucz86IExvZ291dE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xufVxuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGludGVyZmFjZSBGZXRjaE9wdGlvbnMgZXh0ZW5kcyBSZXF1ZXN0SW5pdCB7XG4gICAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmV0Y2hTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGhhbmRsZUVycm9yKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8YW55PjtcbiAgICBwcm90ZWN0ZWQgYnVpbGRVcmwodXJsOiBzdHJpbmcsIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgYnVpbGRSZXF1ZXN0SW5pdChvcHRpb25zOiBGZXRjaE9wdGlvbnMpOiBSZXF1ZXN0SW5pdDtcbiAgICBwcm90ZWN0ZWQgcGFyc2VSZXNwb25zZTxUPihyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPFQ+O1xuICAgIGZldGNoPFQ+KF91cmw6IHN0cmluZywgX29wdGlvbnM/OiBGZXRjaE9wdGlvbnMpOiBQcm9taXNlPFQ+O1xuICAgIHRyeTxUID0gYW55Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IEZldGNoT3B0aW9ucyk6IFByb21pc2U8W0Vycm9yLCBudWxsXSB8IFtudWxsLCBBd2FpdGVkPFQ+XT47XG4gICAgZ2V0PFQgPSBhbnk+KHVybDogc3RyaW5nLCBvcHRpb25zPzogRmV0Y2hPcHRpb25zKTogUHJvbWlzZTxUPjtcbiAgICBwb3N0PFQgPSBhbnk+KHVybDogc3RyaW5nLCBvcHRpb25zPzogRmV0Y2hPcHRpb25zKTogUHJvbWlzZTxUPjtcbiAgICBwdXQ8VCA9IGFueT4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBGZXRjaE9wdGlvbnMpOiBQcm9taXNlPFQ+O1xuICAgIGRlbGV0ZTxUID0gYW55Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IEZldGNoT3B0aW9ucyk6IFByb21pc2U8VD47XG59XG4iLCJpbXBvcnQgdHlwZSB7IEZldGNoT3B0aW9ucyB9IGZyb20gJy4vRmV0Y2hTZXJ2aWNlLnRzJztcbmltcG9ydCBGZXRjaFNlcnZpY2UgZnJvbSAnLi9GZXRjaFNlcnZpY2UudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmV0Y2hCcm93c2VyU2VydmljZSBleHRlbmRzIEZldGNoU2VydmljZSB7XG4gICAgZmV0Y2g8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBGZXRjaE9wdGlvbnMpOiBQcm9taXNlPFQ+O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBGZXRjaE9wdGlvbnMgfSBmcm9tICcuL0ZldGNoU2VydmljZS50cyc7XG5pbXBvcnQgRmV0Y2hTZXJ2aWNlIGZyb20gJy4vRmV0Y2hTZXJ2aWNlLnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZldGNoTm9kZVNlcnZpY2UgZXh0ZW5kcyBGZXRjaFNlcnZpY2Uge1xuICAgIGZldGNoPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogRmV0Y2hPcHRpb25zKTogUHJvbWlzZTxUPjtcbiAgICBwcm90ZWN0ZWQgZmV0Y2hFeHRlcm5hbDxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IEZldGNoT3B0aW9ucyk6IFByb21pc2U8VD47XG4gICAgcHJvdGVjdGVkIGZldGNoSW50ZXJuYWw8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBGZXRjaE9wdGlvbnMpOiBQcm9taXNlPFQ+O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBEZWZpbmVDb21wb25lbnQgfSBmcm9tIFwidnVlXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMYXlvdXRTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgY29tcG9uZW50czogTWFwPHN0cmluZywgRGVmaW5lQ29tcG9uZW50PjtcbiAgICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGN1cnJlbmRJZDogc3RyaW5nIHwgbnVsbDtcbiAgICBzZXRDdXJyZW50KGlkOiBzdHJpbmcpOiB2b2lkO1xuICAgIGFkZChuYW1lOiBzdHJpbmcsIGNvbXBvbmVudDogRGVmaW5lQ29tcG9uZW50LCBvcHRpb25zPzogYW55KTogdm9pZDtcbiAgICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBnZXQobmFtZTogc3RyaW5nKTogRGVmaW5lQ29tcG9uZW50O1xuICAgIGdldE9wdGlvbnMoKTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBnZXRDdXJyZW50KCk6IERlZmluZUNvbXBvbmVudCB8IG51bGw7XG4gICAgc2V0T3B0aW9ucyhvcHRpb25zPzogYW55KTogdm9pZDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlclNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgbWV0YT86IGFueSk6IHZvaWQ7XG4gICAgZGVidWcobWVzc2FnZTogc3RyaW5nLCBtZXRhPzogYW55KTogdm9pZDtcbiAgICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgbWV0YT86IGFueSk6IHZvaWQ7XG4gICAgZXJyb3IobWVzc2FnZTogc3RyaW5nIHwgRXJyb3IsIG1ldGE/OiBhbnkpOiB2b2lkO1xuICAgIGNoaWxkKG9wdGlvbnM6IGFueSk6IExvZ2dlclNlcnZpY2U7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBMaWZlY3ljbGVIb29rIHtcbiAgICBob29rX2lkOiBzdHJpbmc7XG4gICAgaG9va19hbGlhc2VzPzogc3RyaW5nW107XG4gICAgb3JkZXI/OiBudW1iZXI7XG4gICAgc3ViaG9va3M/OiBMaWZlY3ljbGVIb29rW107XG4gICAgcmVnaXN0ZXIoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBsb2FkKCk6IFByb21pc2U8dm9pZD47XG4gICAgYm9vdCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqIEBkZXByZWNhdGVkIFVzZSByZWdpc3RlciAqL1xuICAgIG9uUmVnaXN0ZXIoKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKiogQGRlcHJlY2F0ZWQgVXNlIGxvYWQgKi9cbiAgICBvbkxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKiogQGRlcHJlY2F0ZWQgVXNlIGJvb3QgKi9cbiAgICBvbkJvb3QoKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKiogQGRlcHJlY2F0ZWQgVXNlIHNodXRkb3duICovXG4gICAgb25TaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnLi9Mb2dnZXJTZXJ2aWNlLnRzJztcbmltcG9ydCBMaWZlY3ljbGVIb29rIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvTGlmZWN5Y2xlSG9vay50cyc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAnI3NoYXJlZC91dGlscy9jb21wb3NlLnRzJztcbnR5cGUgTGlmZWN5Y2xlTWV0aG9kID0gJ3JlZ2lzdGVyJyB8ICdsb2FkJyB8ICdib290JyB8ICdzaHV0ZG93bic7XG5pbnRlcmZhY2UgTGlzdE9wdGlvbnMge1xuICAgIGluY2x1ZGU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICBleGNsdWRlPzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5leHBvcnQgaW50ZXJmYWNlIExpZmVjeWNsZVNlcnZpY2VPcHRpb25zIHtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgaG9va3M/OiBNYXA8c3RyaW5nLCBMaWZlY3ljbGVIb29rPjtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xuICAgIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yLCBjb250ZXh0OiB7XG4gICAgICAgIGhvb2tJZDogc3RyaW5nO1xuICAgICAgICBtZXRob2Q6IExpZmVjeWNsZU1ldGhvZDtcbiAgICB9KSA9PiB2b2lkO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlmZWN5Y2xlU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGhvb2tzOiBNYXA8c3RyaW5nLCBMaWZlY3ljbGVIb29rPjtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IoZGF0YT86IExpZmVjeWNsZVNlcnZpY2VPcHRpb25zKTtcbiAgICBzZXRPbkVycm9yKGhhbmRsZXI6IFJlcXVpcmVkPExpZmVjeWNsZVNlcnZpY2VPcHRpb25zPlsnb25FcnJvciddKTogdm9pZDtcbiAgICBvbkVycm9yKGVycm9yOiBFcnJvciwgY29udGV4dDoge1xuICAgICAgICBob29rSWQ6IHN0cmluZztcbiAgICAgICAgbWV0aG9kOiBMaWZlY3ljbGVNZXRob2Q7XG4gICAgfSk6IHZvaWQ7XG4gICAgbWFwQWxpYXNlcyhhcmdzOiBzdHJpbmdbXSk6IHN0cmluZ1tdO1xuICAgIGxpc3Qob3B0aW9ucz86IExpc3RPcHRpb25zKTogTGlmZWN5Y2xlSG9va1tdO1xuICAgIGFkZCguLi5wYXlsb2FkOiAoTGlmZWN5Y2xlSG9vayB8IENvbnN0cnVjdG9yPExpZmVjeWNsZUhvb2s+KVtdKTogdm9pZDtcbiAgICBlbWl0TWV0aG9kKG1ldGhvZDogTGlmZWN5Y2xlTWV0aG9kLCBvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGVtaXQocGF5bG9hZDogTGlmZWN5Y2xlTWV0aG9kIHwgTGlmZWN5Y2xlTWV0aG9kW10sIG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgb24obWV0aG9kOiBMaWZlY3ljbGVNZXRob2QsIGhhbmRsZXI6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkO1xuICAgIHJlZ2lzdGVyKG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgbG9hZChvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGJvb3Qob3B0aW9ucz86IExpc3RPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBzaHV0ZG93bihvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGNsZWFyKCk6IHZvaWQ7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgQmFzZUxpZmVjeWNsZVNlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9MaWZlY3ljbGVTZXJ2aWNlLnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZmVjeWNsZVNlcnZpY2UgZXh0ZW5kcyBCYXNlTGlmZWN5Y2xlU2VydmljZSB7XG4gICAgYWRkSW1wb3J0cyhpbXBvcnRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZDtcbn1cbiIsImRlY2xhcmUgY29uc3QgTWVudUl0ZW1fYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZW51SXRlbSBleHRlbmRzIE1lbnVJdGVtX2Jhc2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBsYXlvdXQ6IHN0cmluZztcbiAgICB0bz86IHN0cmluZztcbiAgICB0YXJnZXQ/OiAnX2JsYW5rJyB8ICdfc2VsZicgfCAnX3BhcmVudCcgfCAnX3RvcCc7XG4gICAgZ3JvdXA/OiBzdHJpbmc7XG4gICAgb3JkZXI/OiBudW1iZXI7XG4gICAgaWNvbj86IHN0cmluZztcbiAgICBwYXJlbnQ/OiBzdHJpbmc7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgTWVudUl0ZW0gZnJvbSAnI2NsaWVudC9lbnRpdGllcy9NZW51SXRlbUVudGl0eS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIExpc3RGaWx0ZXIge1xuICAgIGxheW91dD86IHN0cmluZztcbiAgICBncm91cD86IHN0cmluZztcbiAgICBwYXJlbnQ/OiBzdHJpbmc7XG4gICAgYWxsb3dlZD86IGJvb2xlYW47XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZW51U2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGl0ZW1zOiBNYXA8c3RyaW5nLCBNZW51SXRlbT47XG4gICAgYWRkKC4uLml0ZW06IE9taXQ8UGFydGlhbDxNZW51SXRlbT4sICdtZXJnZScgfCAnZnJvbSc+W10pOiB2b2lkO1xuICAgIHJlbW92ZShpZDogTWVudUl0ZW1bJ2lkJ10pOiB2b2lkO1xuICAgIGxpc3QoZmlsdGVyPzogTGlzdEZpbHRlcik6IE1lbnVJdGVtW107XG4gICAgY2xlYXIoKTogdm9pZDtcbn1cbiIsImltcG9ydCB0eXBlIHsgTmF2aWdhdGlvbkd1YXJkLCBSb3V0ZXIgYXMgVnVlUm91dGVyIH0gZnJvbSAndnVlLXJvdXRlcic7XG5pbXBvcnQgdHlwZSB7IFJvdXRlUmVjb3JkUmF3IH0gZnJvbSAndnVlLXJvdXRlcic7XG5pbXBvcnQgdHlwZSB7IERlZmluZUNvbXBvbmVudCB9IGZyb20gJ3Z1ZSc7XG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlciBleHRlbmRzIFZ1ZVJvdXRlciB7XG4gICAgYXV0bzogdHlwZW9mIGF1dG87XG59XG5leHBvcnQgaW50ZXJmYWNlIEF1dG9PcHRpb25zIHtcbiAgICBndWFyZHM/OiBOYXZpZ2F0aW9uR3VhcmRbXSB8ICgocmVjb3JkOiBSb3V0ZVJlY29yZFJhdykgPT4gTmF2aWdhdGlvbkd1YXJkW10pO1xuICAgIHN0cmlwPzogKHN0cmluZyB8IFJlZ0V4cClbXTtcbiAgICBleGNsdWRlPzogKHN0cmluZyB8IFJlZ0V4cClbXTtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gICAgcmVmaW5lPzogKHJlY29yZHM6IFJvdXRlUmVjb3JkUmF3W10pID0+IFJvdXRlUmVjb3JkUmF3W107XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhdXRvKGltcG9ydHM6IFJlY29yZDxzdHJpbmcsIERlZmluZUNvbXBvbmVudCB8ICgoKSA9PiBQcm9taXNlPERlZmluZUNvbXBvbmVudD4pPiwgb3B0aW9ucz86IEF1dG9PcHRpb25zKTogUm91dGVSZWNvcmRSYXdbXTtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVJvdXRlcigpOiBSb3V0ZXI7XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBUb2FzdFNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBzdWNjZXNzKG1lc3NhZ2U6IHN0cmluZywgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkO1xuICAgIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkO1xufVxuIiwiaW1wb3J0ICogYXMgX3Z1ZXVzZV9zaGFyZWQwIGZyb20gXCJAdnVldXNlL3NoYXJlZFwiO1xuaW1wb3J0IHsgQXJyYXlhYmxlLCBBd2FpdGFibGUsIENvbmZpZ3VyYWJsZUV2ZW50RmlsdGVyLCBDb25maWd1cmFibGVGbHVzaCwgQ29uZmlndXJhYmxlRmx1c2hTeW5jLCBFdmVudEhvb2tPbiwgRm4sIElzQW55LCBQYXVzYWJsZSwgUmVhZG9ubHlSZWZPckdldHRlciwgUmVtb3ZhYmxlUmVmLCBTaGFsbG93T3JEZWVwUmVmLCBTdG9wcGFibGUsIFVzZVRpbWVvdXRGbk9wdGlvbnMgfSBmcm9tIFwiQHZ1ZXVzZS9zaGFyZWRcIjtcbmltcG9ydCAqIGFzIHZ1ZTAgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQXBwLCBDb21wb25lbnQsIENvbXBvbmVudE9iamVjdFByb3BzT3B0aW9ucywgQ29tcG9uZW50UHVibGljSW5zdGFuY2UsIENvbXB1dGVkUmVmLCBEZWZpbmVDb21wb25lbnQsIEluamVjdGlvbktleSwgTWF5YmVSZWYsIE1heWJlUmVmT3JHZXR0ZXIsIE11bHRpV2F0Y2hTb3VyY2VzLCBSZWYsIFNoYWxsb3dSZWYsIFNsb3QsIFN0eWxlVmFsdWUsIFRvUmVmcywgVHJhbnNpdGlvbkdyb3VwUHJvcHMsIFVud3JhcE5lc3RlZFJlZnMsIFVud3JhcFJlZiwgV2F0Y2hPcHRpb25zLCBXYXRjaE9wdGlvbnNCYXNlLCBXYXRjaFNvdXJjZSwgV2F0Y2hTdG9wSGFuZGxlLCBXcml0YWJsZUNvbXB1dGVkUmVmIH0gZnJvbSBcInZ1ZVwiO1xuZXhwb3J0ICogZnJvbSBcIkB2dWV1c2Uvc2hhcmVkXCI7XG5cbi8vI3JlZ2lvbiBjb21wdXRlZEFzeW5jL2luZGV4LmQudHNcbi8qKlxuICogSGFuZGxlIG92ZXJsYXBwaW5nIGFzeW5jIGV2YWx1YXRpb25zLlxuICpcbiAqIEBwYXJhbSBjYW5jZWxDYWxsYmFjayBUaGUgcHJvdmlkZWQgY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuIGEgcmUtZXZhbHVhdGlvbiBvZiB0aGUgY29tcHV0ZWQgdmFsdWUgaXMgdHJpZ2dlcmVkIGJlZm9yZSB0aGUgcHJldmlvdXMgb25lIGZpbmlzaGVkXG4gKi9cbnR5cGUgQXN5bmNDb21wdXRlZE9uQ2FuY2VsID0gKGNhbmNlbENhbGxiYWNrOiBGbikgPT4gdm9pZDtcbmludGVyZmFjZSBBc3luY0NvbXB1dGVkT3B0aW9uczxMYXp5ID0gYm9vbGVhbj4gZXh0ZW5kcyBDb25maWd1cmFibGVGbHVzaFN5bmMge1xuICAvKipcbiAgICogU2hvdWxkIHZhbHVlIGJlIGV2YWx1YXRlZCBsYXppbHlcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGxhenk/OiBMYXp5O1xuICAvKipcbiAgICogUmVmIHBhc3NlZCB0byByZWNlaXZlIHRoZSB1cGRhdGVkIG9mIGFzeW5jIGV2YWx1YXRpb25cbiAgICovXG4gIGV2YWx1YXRpbmc/OiBSZWY8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBVc2Ugc2hhbGxvd1JlZlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBzaGFsbG93PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENhbGxiYWNrIHdoZW4gZXJyb3IgaXMgY2F1Z2h0LlxuICAgKi9cbiAgb25FcnJvcj86IChlOiB1bmtub3duKSA9PiB2b2lkO1xufVxuLyoqXG4gKiBDcmVhdGUgYW4gYXN5bmNocm9ub3VzIGNvbXB1dGVkIGRlcGVuZGVuY3kuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvY29tcHV0ZWRBc3luY1xuICogQHBhcmFtIGV2YWx1YXRpb25DYWxsYmFjayAgICAgVGhlIHByb21pc2UtcmV0dXJuaW5nIGNhbGxiYWNrIHdoaWNoIGdlbmVyYXRlcyB0aGUgY29tcHV0ZWQgdmFsdWVcbiAqIEBwYXJhbSBpbml0aWFsU3RhdGUgICAgICAgICAgIFRoZSBpbml0aWFsIHN0YXRlLCB1c2VkIHVudGlsIHRoZSBmaXJzdCBldmFsdWF0aW9uIGZpbmlzaGVzXG4gKiBAcGFyYW0gb3B0aW9uc09yUmVmICAgICAgICAgICBBZGRpdGlvbmFsIG9wdGlvbnMgb3IgYSByZWYgcGFzc2VkIHRvIHJlY2VpdmUgdGhlIHVwZGF0ZXMgb2YgdGhlIGFzeW5jIGV2YWx1YXRpb25cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiBjb21wdXRlZEFzeW5jPFQ+KGV2YWx1YXRpb25DYWxsYmFjazogKG9uQ2FuY2VsOiBBc3luY0NvbXB1dGVkT25DYW5jZWwpID0+IFQgfCBQcm9taXNlPFQ+LCBpbml0aWFsU3RhdGU6IFQsIG9wdGlvbnNPclJlZjogQXN5bmNDb21wdXRlZE9wdGlvbnM8dHJ1ZT4pOiBDb21wdXRlZFJlZjxUPjtcbmRlY2xhcmUgZnVuY3Rpb24gY29tcHV0ZWRBc3luYzxUPihldmFsdWF0aW9uQ2FsbGJhY2s6IChvbkNhbmNlbDogQXN5bmNDb21wdXRlZE9uQ2FuY2VsKSA9PiBUIHwgUHJvbWlzZTxUPiwgaW5pdGlhbFN0YXRlOiB1bmRlZmluZWQsIG9wdGlvbnNPclJlZjogQXN5bmNDb21wdXRlZE9wdGlvbnM8dHJ1ZT4pOiBDb21wdXRlZFJlZjxUIHwgdW5kZWZpbmVkPjtcbmRlY2xhcmUgZnVuY3Rpb24gY29tcHV0ZWRBc3luYzxUPihldmFsdWF0aW9uQ2FsbGJhY2s6IChvbkNhbmNlbDogQXN5bmNDb21wdXRlZE9uQ2FuY2VsKSA9PiBUIHwgUHJvbWlzZTxUPiwgaW5pdGlhbFN0YXRlOiBULCBvcHRpb25zT3JSZWY/OiBSZWY8Ym9vbGVhbj4gfCBBc3luY0NvbXB1dGVkT3B0aW9ucyk6IFJlZjxUPjtcbmRlY2xhcmUgZnVuY3Rpb24gY29tcHV0ZWRBc3luYzxUPihldmFsdWF0aW9uQ2FsbGJhY2s6IChvbkNhbmNlbDogQXN5bmNDb21wdXRlZE9uQ2FuY2VsKSA9PiBUIHwgUHJvbWlzZTxUPiwgaW5pdGlhbFN0YXRlPzogdW5kZWZpbmVkLCBvcHRpb25zT3JSZWY/OiBSZWY8Ym9vbGVhbj4gfCBBc3luY0NvbXB1dGVkT3B0aW9ucyk6IFJlZjxUIHwgdW5kZWZpbmVkPjtcbi8qKiBAZGVwcmVjYXRlZCB1c2UgYGNvbXB1dGVkQXN5bmNgIGluc3RlYWQgKi9cbmRlY2xhcmUgY29uc3QgYXN5bmNDb21wdXRlZDogdHlwZW9mIGNvbXB1dGVkQXN5bmM7XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBjb21wdXRlZEluamVjdC9pbmRleC5kLnRzXG50eXBlIENvbXB1dGVkSW5qZWN0R2V0dGVyPFQsIEskMT4gPSAoc291cmNlOiBUIHwgdW5kZWZpbmVkLCBvbGRWYWx1ZT86IEskMSkgPT4gSyQxO1xudHlwZSBDb21wdXRlZEluamVjdEdldHRlcldpdGhEZWZhdWx0PFQsIEskMT4gPSAoc291cmNlOiBULCBvbGRWYWx1ZT86IEskMSkgPT4gSyQxO1xudHlwZSBDb21wdXRlZEluamVjdFNldHRlcjxUPiA9ICh2OiBUKSA9PiB2b2lkO1xuaW50ZXJmYWNlIFdyaXRhYmxlQ29tcHV0ZWRJbmplY3RPcHRpb25zPFQsIEskMT4ge1xuICBnZXQ6IENvbXB1dGVkSW5qZWN0R2V0dGVyPFQsIEskMT47XG4gIHNldDogQ29tcHV0ZWRJbmplY3RTZXR0ZXI8SyQxPjtcbn1cbmludGVyZmFjZSBXcml0YWJsZUNvbXB1dGVkSW5qZWN0T3B0aW9uc1dpdGhEZWZhdWx0PFQsIEskMT4ge1xuICBnZXQ6IENvbXB1dGVkSW5qZWN0R2V0dGVyV2l0aERlZmF1bHQ8VCwgSyQxPjtcbiAgc2V0OiBDb21wdXRlZEluamVjdFNldHRlcjxLJDE+O1xufVxuZGVjbGFyZSBmdW5jdGlvbiBjb21wdXRlZEluamVjdDxULCBLJDEgPSBhbnk+KGtleTogSW5qZWN0aW9uS2V5PFQ+IHwgc3RyaW5nLCBnZXR0ZXI6IENvbXB1dGVkSW5qZWN0R2V0dGVyPFQsIEskMT4pOiBDb21wdXRlZFJlZjxLJDEgfCB1bmRlZmluZWQ+O1xuZGVjbGFyZSBmdW5jdGlvbiBjb21wdXRlZEluamVjdDxULCBLJDEgPSBhbnk+KGtleTogSW5qZWN0aW9uS2V5PFQ+IHwgc3RyaW5nLCBvcHRpb25zOiBXcml0YWJsZUNvbXB1dGVkSW5qZWN0T3B0aW9uczxULCBLJDE+KTogQ29tcHV0ZWRSZWY8SyQxIHwgdW5kZWZpbmVkPjtcbmRlY2xhcmUgZnVuY3Rpb24gY29tcHV0ZWRJbmplY3Q8VCwgSyQxID0gYW55PihrZXk6IEluamVjdGlvbktleTxUPiB8IHN0cmluZywgZ2V0dGVyOiBDb21wdXRlZEluamVjdEdldHRlcldpdGhEZWZhdWx0PFQsIEskMT4sIGRlZmF1bHRTb3VyY2U6IFQsIHRyZWF0RGVmYXVsdEFzRmFjdG9yeT86IGZhbHNlKTogQ29tcHV0ZWRSZWY8SyQxPjtcbmRlY2xhcmUgZnVuY3Rpb24gY29tcHV0ZWRJbmplY3Q8VCwgSyQxID0gYW55PihrZXk6IEluamVjdGlvbktleTxUPiB8IHN0cmluZywgb3B0aW9uczogV3JpdGFibGVDb21wdXRlZEluamVjdE9wdGlvbnNXaXRoRGVmYXVsdDxULCBLJDE+LCBkZWZhdWx0U291cmNlOiBUIHwgKCgpID0+IFQpLCB0cmVhdERlZmF1bHRBc0ZhY3Rvcnk6IHRydWUpOiBDb21wdXRlZFJlZjxLJDE+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gY3JlYXRlUmV1c2FibGVUZW1wbGF0ZS9pbmRleC5kLnRzXG50eXBlIE9iamVjdExpdGVyYWxXaXRoUG90ZW50aWFsT2JqZWN0TGl0ZXJhbHMgPSBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkPjtcbnR5cGUgR2VuZXJhdGVTbG90c0Zyb21TbG90TWFwPFQgZXh0ZW5kcyBPYmplY3RMaXRlcmFsV2l0aFBvdGVudGlhbE9iamVjdExpdGVyYWxzPiA9IHsgW0sgaW4ga2V5b2YgVF06IFNsb3Q8VFtLXT4gfTtcbnR5cGUgRGVmaW5lVGVtcGxhdGVDb21wb25lbnQ8QmluZGluZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBNYXBTbG90TmFtZVRvU2xvdFByb3BzIGV4dGVuZHMgT2JqZWN0TGl0ZXJhbFdpdGhQb3RlbnRpYWxPYmplY3RMaXRlcmFscz4gPSBEZWZpbmVDb21wb25lbnQgJiB7XG4gIG5ldyAoKToge1xuICAgICRzbG90czoge1xuICAgICAgZGVmYXVsdDogKF86IEJpbmRpbmdzICYge1xuICAgICAgICAkc2xvdHM6IEdlbmVyYXRlU2xvdHNGcm9tU2xvdE1hcDxNYXBTbG90TmFtZVRvU2xvdFByb3BzPjtcbiAgICAgIH0pID0+IGFueTtcbiAgICB9O1xuICB9O1xufTtcbnR5cGUgUmV1c2VUZW1wbGF0ZUNvbXBvbmVudDxCaW5kaW5ncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sIE1hcFNsb3ROYW1lVG9TbG90UHJvcHMgZXh0ZW5kcyBPYmplY3RMaXRlcmFsV2l0aFBvdGVudGlhbE9iamVjdExpdGVyYWxzPiA9IERlZmluZUNvbXBvbmVudDxCaW5kaW5ncz4gJiB7XG4gIG5ldyAoKToge1xuICAgICRzbG90czogR2VuZXJhdGVTbG90c0Zyb21TbG90TWFwPE1hcFNsb3ROYW1lVG9TbG90UHJvcHM+O1xuICB9O1xufTtcbnR5cGUgUmV1c2FibGVUZW1wbGF0ZVBhaXI8QmluZGluZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBNYXBTbG90TmFtZVRvU2xvdFByb3BzIGV4dGVuZHMgT2JqZWN0TGl0ZXJhbFdpdGhQb3RlbnRpYWxPYmplY3RMaXRlcmFscz4gPSBbRGVmaW5lVGVtcGxhdGVDb21wb25lbnQ8QmluZGluZ3MsIE1hcFNsb3ROYW1lVG9TbG90UHJvcHM+LCBSZXVzZVRlbXBsYXRlQ29tcG9uZW50PEJpbmRpbmdzLCBNYXBTbG90TmFtZVRvU2xvdFByb3BzPl0gJiB7XG4gIGRlZmluZTogRGVmaW5lVGVtcGxhdGVDb21wb25lbnQ8QmluZGluZ3MsIE1hcFNsb3ROYW1lVG9TbG90UHJvcHM+O1xuICByZXVzZTogUmV1c2VUZW1wbGF0ZUNvbXBvbmVudDxCaW5kaW5ncywgTWFwU2xvdE5hbWVUb1Nsb3RQcm9wcz47XG59O1xuaW50ZXJmYWNlIENyZWF0ZVJldXNhYmxlVGVtcGxhdGVPcHRpb25zPFByb3BzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAvKipcbiAgICogSW5oZXJpdCBhdHRycyBmcm9tIHJldXNlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaW5oZXJpdEF0dHJzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFByb3BzIGRlZmluaXRpb24gZm9yIHJldXNlIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3BzPzogQ29tcG9uZW50T2JqZWN0UHJvcHNPcHRpb25zPFByb3BzPjtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGBkZWZpbmVgIGFuZCBgcmV1c2VgIGNvbXBvbmVudHMgaW4gcGFpcixcbiAqIEl0IGFsc28gYWxsb3cgdG8gcGFzcyBhIGdlbmVyaWMgdG8gYmluZCB3aXRoIHR5cGUuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvY3JlYXRlUmV1c2FibGVUZW1wbGF0ZVxuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlUmV1c2FibGVUZW1wbGF0ZTxCaW5kaW5ncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sIE1hcFNsb3ROYW1lVG9TbG90UHJvcHMgZXh0ZW5kcyBPYmplY3RMaXRlcmFsV2l0aFBvdGVudGlhbE9iamVjdExpdGVyYWxzID0gUmVjb3JkPCdkZWZhdWx0JywgdW5kZWZpbmVkPj4ob3B0aW9ucz86IENyZWF0ZVJldXNhYmxlVGVtcGxhdGVPcHRpb25zPEJpbmRpbmdzPik6IFJldXNhYmxlVGVtcGxhdGVQYWlyPEJpbmRpbmdzLCBNYXBTbG90TmFtZVRvU2xvdFByb3BzPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIGNyZWF0ZVRlbXBsYXRlUHJvbWlzZS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVGVtcGxhdGVQcm9taXNlUHJvcHM8UmV0dXJuLCBBcmdzIGV4dGVuZHMgYW55W10gPSBbXT4ge1xuICAvKipcbiAgICogVGhlIHByb21pc2UgaW5zdGFuY2UuXG4gICAqL1xuICBwcm9taXNlOiBQcm9taXNlPFJldHVybj4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBwcm9taXNlLlxuICAgKi9cbiAgcmVzb2x2ZTogKHY6IFJldHVybiB8IFByb21pc2U8UmV0dXJuPikgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJlamVjdCB0aGUgcHJvbWlzZS5cbiAgICovXG4gIHJlamVjdDogKHY6IGFueSkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIEFyZ3VtZW50cyBwYXNzZWQgdG8gVGVtcGxhdGVQcm9taXNlLnN0YXJ0KClcbiAgICovXG4gIGFyZ3M6IEFyZ3M7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHByb21pc2UgaXMgcmVzb2x2aW5nLlxuICAgKiBXaGVuIHBhc3NpbmcgYW5vdGhlciBwcm9taXNlIHRvIGByZXNvbHZlYCwgdGhpcyB3aWxsIGJlIHNldCB0byBgdHJ1ZWAgdW50aWwgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQuXG4gICAqL1xuICBpc1Jlc29sdmluZzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE9wdGlvbnMgcGFzc2VkIHRvIGNyZWF0ZVRlbXBsYXRlUHJvbWlzZSgpXG4gICAqL1xuICBvcHRpb25zOiBUZW1wbGF0ZVByb21pc2VPcHRpb25zO1xuICAvKipcbiAgICogVW5pcXVlIGtleSBmb3IgbGlzdCByZW5kZXJpbmcuXG4gICAqL1xuICBrZXk6IG51bWJlcjtcbn1cbmludGVyZmFjZSBUZW1wbGF0ZVByb21pc2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIHByb21pc2UgY2FuIGJlIGNhbGxlZCBvbmx5IG9uY2UgYXQgYSB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2luZ2xldG9uPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRyYW5zaXRpb24gcHJvcHMgZm9yIHRoZSBwcm9taXNlLlxuICAgKi9cbiAgdHJhbnNpdGlvbj86IFRyYW5zaXRpb25Hcm91cFByb3BzO1xufVxudHlwZSBUZW1wbGF0ZVByb21pc2U8UmV0dXJuLCBBcmdzIGV4dGVuZHMgYW55W10gPSBbXT4gPSBEZWZpbmVDb21wb25lbnQ8b2JqZWN0PiAmIHtcbiAgbmV3ICgpOiB7XG4gICAgJHNsb3RzOiB7XG4gICAgICBkZWZhdWx0OiAoXzogVGVtcGxhdGVQcm9taXNlUHJvcHM8UmV0dXJuLCBBcmdzPikgPT4gYW55O1xuICAgIH07XG4gIH07XG59ICYge1xuICBzdGFydDogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8UmV0dXJuPjtcbn07XG4vKipcbiAqIENyZWF0ZXMgYSB0ZW1wbGF0ZSBwcm9taXNlIGNvbXBvbmVudC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy9jcmVhdGVUZW1wbGF0ZVByb21pc2VcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVRlbXBsYXRlUHJvbWlzZTxSZXR1cm4sIEFyZ3MgZXh0ZW5kcyBhbnlbXSA9IFtdPihvcHRpb25zPzogVGVtcGxhdGVQcm9taXNlT3B0aW9ucyk6IFRlbXBsYXRlUHJvbWlzZTxSZXR1cm4sIEFyZ3M+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gY3JlYXRlVW5yZWZGbi9pbmRleC5kLnRzXG50eXBlIFVucmVmRm48VD4gPSBUIGV4dGVuZHMgKCguLi5hcmdzOiBpbmZlciBBKSA9PiBpbmZlciBSKSA/ICguLi5hcmdzOiB7IFtLIGluIGtleW9mIEFdOiBNYXliZVJlZjxBW0tdPiB9KSA9PiBSIDogbmV2ZXI7XG4vKipcbiAqIE1ha2UgYSBwbGFpbiBmdW5jdGlvbiBhY2NlcHRpbmcgcmVmIGFuZCByYXcgdmFsdWVzIGFzIGFyZ3VtZW50cy5cbiAqIFJldHVybnMgdGhlIHNhbWUgdmFsdWUgdGhlIHVuY29udmVydGVkIGZ1bmN0aW9uIHJldHVybnMsIHdpdGggcHJvcGVyIHR5cGluZy5cbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVVucmVmRm48VCBleHRlbmRzIEZ1bmN0aW9uPihmbjogVCk6IFVucmVmRm48VD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBfY29uZmlndXJhYmxlLmQudHNcbmludGVyZmFjZSBDb25maWd1cmFibGVXaW5kb3cge1xuICB3aW5kb3c/OiBXaW5kb3c7XG59XG5pbnRlcmZhY2UgQ29uZmlndXJhYmxlRG9jdW1lbnQge1xuICBkb2N1bWVudD86IERvY3VtZW50O1xufVxuaW50ZXJmYWNlIENvbmZpZ3VyYWJsZURvY3VtZW50T3JTaGFkb3dSb290IHtcbiAgZG9jdW1lbnQ/OiBEb2N1bWVudE9yU2hhZG93Um9vdDtcbn1cbmludGVyZmFjZSBDb25maWd1cmFibGVOYXZpZ2F0b3Ige1xuICBuYXZpZ2F0b3I/OiBOYXZpZ2F0b3I7XG59XG5pbnRlcmZhY2UgQ29uZmlndXJhYmxlTG9jYXRpb24ge1xuICBsb2NhdGlvbj86IExvY2F0aW9uO1xufVxuZGVjbGFyZSBjb25zdCBkZWZhdWx0V2luZG93OiAoV2luZG93ICYgdHlwZW9mIGdsb2JhbFRoaXMpIHwgdW5kZWZpbmVkO1xuZGVjbGFyZSBjb25zdCBkZWZhdWx0RG9jdW1lbnQ6IERvY3VtZW50IHwgdW5kZWZpbmVkO1xuZGVjbGFyZSBjb25zdCBkZWZhdWx0TmF2aWdhdG9yOiBOYXZpZ2F0b3IgfCB1bmRlZmluZWQ7XG5kZWNsYXJlIGNvbnN0IGRlZmF1bHRMb2NhdGlvbjogTG9jYXRpb24gfCB1bmRlZmluZWQ7XG5pbnRlcmZhY2UgQ29uZmlndXJhYmxlRGVlcFJlZnM8RCBleHRlbmRzIGJvb2xlYW4+IHtcbiAgLyoqXG4gICAqIFJldHVybiBkZWVwIHJlZnMgaW5zdGVhZCBvZiBzaGFsbG93IHJlZnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUgLSB3aWxsIGJlIGNoYW5nZWQgdG8gYGZhbHNlYCBieSBkZWZhdWx0IGluIHRoZSBuZXh0IG1ham9yXG4gICAqL1xuICBkZWVwUmVmcz86IEQ7XG59XG5pbnRlcmZhY2UgQ29uZmlndXJhYmxlU2NoZWR1bGVyIHtcbiAgLyoqXG4gICAqIEN1c3RvbSBzY2hlZHVsZXIgdG8gdXNlIGZvciBpbnRlcnZhbCBleGVjdXRpb24uXG4gICAqL1xuICBzY2hlZHVsZXI/OiAoY2I6IEZuKSA9PiBQYXVzYWJsZTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVucmVmRWxlbWVudC9pbmRleC5kLnRzXG50eXBlIFZ1ZUluc3RhbmNlID0gQ29tcG9uZW50UHVibGljSW5zdGFuY2U7XG50eXBlIE1heWJlRWxlbWVudFJlZjxUIGV4dGVuZHMgTWF5YmVFbGVtZW50ID0gTWF5YmVFbGVtZW50PiA9IE1heWJlUmVmPFQ+O1xudHlwZSBNYXliZUNvbXB1dGVkRWxlbWVudFJlZjxUIGV4dGVuZHMgTWF5YmVFbGVtZW50ID0gTWF5YmVFbGVtZW50PiA9IE1heWJlUmVmT3JHZXR0ZXI8VD47XG50eXBlIE1heWJlRWxlbWVudCA9IEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCB8IFZ1ZUluc3RhbmNlIHwgdW5kZWZpbmVkIHwgbnVsbDtcbnR5cGUgVW5SZWZFbGVtZW50UmV0dXJuPFQgZXh0ZW5kcyBNYXliZUVsZW1lbnQgPSBNYXliZUVsZW1lbnQ+ID0gVCBleHRlbmRzIFZ1ZUluc3RhbmNlID8gRXhjbHVkZTxNYXliZUVsZW1lbnQsIFZ1ZUluc3RhbmNlPiA6IFQgfCB1bmRlZmluZWQ7XG4vKipcbiAqIEdldCB0aGUgZG9tIGVsZW1lbnQgb2YgYSByZWYgb2YgZWxlbWVudCBvciBWdWUgY29tcG9uZW50IGluc3RhbmNlXG4gKlxuICogQHBhcmFtIGVsUmVmXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdW5yZWZFbGVtZW50PFQgZXh0ZW5kcyBNYXliZUVsZW1lbnQ+KGVsUmVmOiBNYXliZUNvbXB1dGVkRWxlbWVudFJlZjxUPik6IFVuUmVmRWxlbWVudFJldHVybjxUPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIG9uQ2xpY2tPdXRzaWRlL2luZGV4LmQudHNcbmludGVyZmFjZSBPbkNsaWNrT3V0c2lkZU9wdGlvbnM8Q29udHJvbHMgZXh0ZW5kcyBib29sZWFuID0gZmFsc2U+IGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgZWxlbWVudHMgdGhhdCBzaG91bGQgbm90IHRyaWdnZXIgdGhlIGV2ZW50LFxuICAgKiBwcm92aWRlZCBhcyBSZWZzIG9yIENTUyBTZWxlY3RvcnMuXG4gICAqL1xuICBpZ25vcmU/OiBNYXliZVJlZk9yR2V0dGVyPChNYXliZUVsZW1lbnRSZWYgfCBzdHJpbmcpW10+O1xuICAvKipcbiAgICogVXNlIGNhcHR1cmluZyBwaGFzZSBmb3IgaW50ZXJuYWwgZXZlbnQgbGlzdGVuZXIuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGNhcHR1cmU/OiBib29sZWFuO1xuICAvKipcbiAgICogUnVuIGhhbmRsZXIgZnVuY3Rpb24gaWYgZm9jdXMgbW92ZXMgdG8gYW4gaWZyYW1lLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGV0ZWN0SWZyYW1lPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFVzZSBjb250cm9scyB0byBjYW5jZWwvdHJpZ2dlciBsaXN0ZW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbnRyb2xzPzogQ29udHJvbHM7XG59XG50eXBlIE9uQ2xpY2tPdXRzaWRlSGFuZGxlcjxUIGV4dGVuZHMgT25DbGlja091dHNpZGVPcHRpb25zPGJvb2xlYW4+ID0gT25DbGlja091dHNpZGVPcHRpb25zPiA9IChldmVudDogKFRbJ2RldGVjdElmcmFtZSddIGV4dGVuZHMgdHJ1ZSA/IEZvY3VzRXZlbnQgOiBuZXZlcikgfCAoVFsnY29udHJvbHMnXSBleHRlbmRzIHRydWUgPyBFdmVudCA6IG5ldmVyKSB8IFBvaW50ZXJFdmVudCkgPT4gdm9pZDtcbnR5cGUgT25DbGlja091dHNpZGVSZXR1cm48Q29udHJvbHMgZXh0ZW5kcyBib29sZWFuID0gZmFsc2U+ID0gQ29udHJvbHMgZXh0ZW5kcyBmYWxzZSA/IEZuIDoge1xuICBzdG9wOiBGbjtcbiAgY2FuY2VsOiBGbjtcbiAgdHJpZ2dlcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbn07XG4vKipcbiAqIExpc3RlbiBmb3IgY2xpY2tzIG91dHNpZGUgb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy9vbkNsaWNrT3V0c2lkZVxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIGhhbmRsZXJcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gb25DbGlja091dHNpZGU8VCBleHRlbmRzIE9uQ2xpY2tPdXRzaWRlT3B0aW9ucz4odGFyZ2V0OiBNYXliZUNvbXB1dGVkRWxlbWVudFJlZiwgaGFuZGxlcjogT25DbGlja091dHNpZGVIYW5kbGVyPFQ+LCBvcHRpb25zPzogVCk6IEZuO1xuZGVjbGFyZSBmdW5jdGlvbiBvbkNsaWNrT3V0c2lkZTxUIGV4dGVuZHMgT25DbGlja091dHNpZGVPcHRpb25zPHRydWU+Pih0YXJnZXQ6IE1heWJlQ29tcHV0ZWRFbGVtZW50UmVmLCBoYW5kbGVyOiBPbkNsaWNrT3V0c2lkZUhhbmRsZXI8VD4sIG9wdGlvbnM6IFQpOiB7XG4gIHN0b3A6IEZuO1xuICBjYW5jZWw6IEZuO1xuICB0cmlnZ2VyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIG9uRWxlbWVudFJlbW92YWwvaW5kZXguZC50c1xuaW50ZXJmYWNlIE9uRWxlbWVudFJlbW92YWxPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93LCBDb25maWd1cmFibGVEb2N1bWVudE9yU2hhZG93Um9vdCwgV2F0Y2hPcHRpb25zQmFzZSB7fVxuLyoqXG4gKiBGaXJlcyB3aGVuIHRoZSBlbGVtZW50IG9yIGFueSBlbGVtZW50IGNvbnRhaW5pbmcgaXQgaXMgcmVtb3ZlZC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0gY2FsbGJhY2tcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gb25FbGVtZW50UmVtb3ZhbCh0YXJnZXQ6IE1heWJlRWxlbWVudFJlZiwgY2FsbGJhY2s6IChtdXRhdGlvblJlY29yZHM6IE11dGF0aW9uUmVjb3JkW10pID0+IHZvaWQsIG9wdGlvbnM/OiBPbkVsZW1lbnRSZW1vdmFsT3B0aW9ucyk6IEZuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gb25LZXlTdHJva2UvaW5kZXguZC50c1xudHlwZSBLZXlQcmVkaWNhdGUgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IGJvb2xlYW47XG50eXBlIEtleUZpbHRlciA9IHRydWUgfCBzdHJpbmcgfCBzdHJpbmdbXSB8IEtleVByZWRpY2F0ZTtcbnR5cGUgS2V5U3Ryb2tlRXZlbnROYW1lID0gJ2tleWRvd24nIHwgJ2tleXByZXNzJyB8ICdrZXl1cCc7XG5pbnRlcmZhY2UgT25LZXlTdHJva2VPcHRpb25zIHtcbiAgZXZlbnROYW1lPzogS2V5U3Ryb2tlRXZlbnROYW1lO1xuICB0YXJnZXQ/OiBNYXliZVJlZk9yR2V0dGVyPEV2ZW50VGFyZ2V0IHwgbnVsbCB8IHVuZGVmaW5lZD47XG4gIHBhc3NpdmU/OiBib29sZWFuO1xuICAvKipcbiAgICogU2V0IHRvIGB0cnVlYCB0byBpZ25vcmUgcmVwZWF0ZWQgZXZlbnRzIHdoZW4gdGhlIGtleSBpcyBiZWluZyBoZWxkIGRvd24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWR1cGU/OiBNYXliZVJlZk9yR2V0dGVyPGJvb2xlYW4+O1xufVxuLyoqXG4gKiBMaXN0ZW4gZm9yIGtleWJvYXJkIGtleXN0cm9rZXMuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvb25LZXlTdHJva2VcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiBvbktleVN0cm9rZShrZXk6IEtleUZpbHRlciwgaGFuZGxlcjogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogT25LZXlTdHJva2VPcHRpb25zKTogKCkgPT4gdm9pZDtcbmRlY2xhcmUgZnVuY3Rpb24gb25LZXlTdHJva2UoaGFuZGxlcjogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogT25LZXlTdHJva2VPcHRpb25zKTogKCkgPT4gdm9pZDtcbi8qKlxuICogTGlzdGVuIHRvIHRoZSBrZXlkb3duIGV2ZW50IG9mIHRoZSBnaXZlbiBrZXkuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvb25LZXlTdHJva2VcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBoYW5kbGVyXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIG9uS2V5RG93bihrZXk6IEtleUZpbHRlciwgaGFuZGxlcjogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogT21pdDxPbktleVN0cm9rZU9wdGlvbnMsICdldmVudE5hbWUnPik6ICgpID0+IHZvaWQ7XG4vKipcbiAqIExpc3RlbiB0byB0aGUga2V5cHJlc3MgZXZlbnQgb2YgdGhlIGdpdmVuIGtleS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy9vbktleVN0cm9rZVxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGhhbmRsZXJcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gb25LZXlQcmVzc2VkKGtleTogS2V5RmlsdGVyLCBoYW5kbGVyOiAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQsIG9wdGlvbnM/OiBPbWl0PE9uS2V5U3Ryb2tlT3B0aW9ucywgJ2V2ZW50TmFtZSc+KTogKCkgPT4gdm9pZDtcbi8qKlxuICogTGlzdGVuIHRvIHRoZSBrZXl1cCBldmVudCBvZiB0aGUgZ2l2ZW4ga2V5LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL29uS2V5U3Ryb2tlXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gaGFuZGxlclxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiBvbktleVVwKGtleTogS2V5RmlsdGVyLCBoYW5kbGVyOiAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQsIG9wdGlvbnM/OiBPbWl0PE9uS2V5U3Ryb2tlT3B0aW9ucywgJ2V2ZW50TmFtZSc+KTogKCkgPT4gdm9pZDtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIG9uTG9uZ1ByZXNzL2luZGV4LmQudHNcbmludGVyZmFjZSBPbkxvbmdQcmVzc09wdGlvbnMge1xuICAvKipcbiAgICogVGltZSBpbiBtcyB0aWxsIGBsb25ncHJlc3NgIGdldHMgY2FsbGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IDUwMFxuICAgKi9cbiAgZGVsYXk/OiBudW1iZXIgfCAoKGV2OiBQb2ludGVyRXZlbnQpID0+IG51bWJlcik7XG4gIG1vZGlmaWVycz86IE9uTG9uZ1ByZXNzTW9kaWZpZXJzO1xuICAvKipcbiAgICogQWxsb3dhbmNlIG9mIG1vdmluZyBkaXN0YW5jZSBpbiBwaXhlbHMsXG4gICAqIFRoZSBhY3Rpb24gd2lsbCBnZXQgY2FuY2VsZWQgV2hlbiBtb3ZpbmcgdG9vIGZhciBmcm9tIHRoZSBwb2ludGVyZG93biBwb3NpdGlvbi5cbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIGRpc3RhbmNlVGhyZXNob2xkPzogbnVtYmVyIHwgZmFsc2U7XG4gIC8qKlxuICAgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgcmVmIGVsZW1lbnQgaXMgcmVsZWFzZWQuXG4gICAqIEBwYXJhbSBkdXJhdGlvbiBob3cgbG9uZyB0aGUgZWxlbWVudCB3YXMgcHJlc3NlZCBpbiBtc1xuICAgKiBAcGFyYW0gZGlzdGFuY2UgZGlzdGFuY2UgZnJvbSB0aGUgcG9pbnRlcmRvd24gcG9zaXRpb25cbiAgICogQHBhcmFtIGlzTG9uZ1ByZXNzIHdoZXRoZXIgdGhlIGFjdGlvbiB3YXMgYSBsb25nIHByZXNzIG9yIG5vdFxuICAgKi9cbiAgb25Nb3VzZVVwPzogKGR1cmF0aW9uOiBudW1iZXIsIGRpc3RhbmNlOiBudW1iZXIsIGlzTG9uZ1ByZXNzOiBib29sZWFuKSA9PiB2b2lkO1xufVxuaW50ZXJmYWNlIE9uTG9uZ1ByZXNzTW9kaWZpZXJzIHtcbiAgc3RvcD86IGJvb2xlYW47XG4gIG9uY2U/OiBib29sZWFuO1xuICBwcmV2ZW50PzogYm9vbGVhbjtcbiAgY2FwdHVyZT86IGJvb2xlYW47XG4gIHNlbGY/OiBib29sZWFuO1xufVxudHlwZSBPbkxvbmdQcmVzc1JldHVybiA9ICgpID0+IHZvaWQ7XG4vKiogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBPbkxvbmdQcmVzc1JldHVybn0gaW5zdGVhZCAqL1xudHlwZSBVc2VPbkxvbmdQcmVzc1JldHVybiA9IE9uTG9uZ1ByZXNzUmV0dXJuO1xuZGVjbGFyZSBmdW5jdGlvbiBvbkxvbmdQcmVzcyh0YXJnZXQ6IE1heWJlRWxlbWVudFJlZiwgaGFuZGxlcjogKGV2dDogUG9pbnRlckV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogT25Mb25nUHJlc3NPcHRpb25zKTogT25Mb25nUHJlc3NSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBvblN0YXJ0VHlwaW5nL2luZGV4LmQudHNcbi8qKlxuICogRmlyZXMgd2hlbiB1c2VycyBzdGFydCB0eXBpbmcgb24gbm9uLWVkaXRhYmxlIGVsZW1lbnRzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL29uU3RhcnRUeXBpbmdcbiAqIEBwYXJhbSBjYWxsYmFja1xuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiBvblN0YXJ0VHlwaW5nKGNhbGxiYWNrOiAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQsIG9wdGlvbnM/OiBDb25maWd1cmFibGVEb2N1bWVudCk6IHZvaWQ7XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB0ZW1wbGF0ZVJlZi9pbmRleC5kLnRzXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBWdWUncyBidWlsdC1pbiBgdXNlVGVtcGxhdGVSZWZgIGluc3RlYWQuXG4gKlxuICogU2hvcnRoYW5kIGZvciBiaW5kaW5nIHJlZiB0byB0ZW1wbGF0ZSBlbGVtZW50LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3RlbXBsYXRlUmVmXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB0ZW1wbGF0ZVJlZjxUIGV4dGVuZHMgSFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50IHwgQ29tcG9uZW50IHwgbnVsbCwgS2V5cyBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oa2V5OiBLZXlzLCBpbml0aWFsVmFsdWU/OiBUIHwgbnVsbCk6IFJlYWRvbmx5PFJlZjxUPj47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VBY3RpdmVFbGVtZW50L2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VBY3RpdmVFbGVtZW50T3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdywgQ29uZmlndXJhYmxlRG9jdW1lbnRPclNoYWRvd1Jvb3Qge1xuICAvKipcbiAgICogU2VhcmNoIGFjdGl2ZSBlbGVtZW50IGRlZXBseSBpbnNpZGUgc2hhZG93IGRvbVxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBkZWVwPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRyYWNrIGFjdGl2ZSBlbGVtZW50IHdoZW4gaXQncyByZW1vdmVkIGZyb20gdGhlIERPTVxuICAgKiBVc2luZyBhIE11dGF0aW9uT2JzZXJ2ZXIgdW5kZXIgdGhlIGhvb2RcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHRyaWdnZXJPblJlbW92YWw/OiBib29sZWFuO1xufVxudHlwZSBVc2VBY3RpdmVFbGVtZW50UmV0dXJuPFQgZXh0ZW5kcyBIVE1MRWxlbWVudCA9IEhUTUxFbGVtZW50PiA9IFNoYWxsb3dSZWY8VCB8IG51bGwgfCB1bmRlZmluZWQ+O1xuLyoqXG4gKiBSZWFjdGl2ZSBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGBcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VBY3RpdmVFbGVtZW50XG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlQWN0aXZlRWxlbWVudDxUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KG9wdGlvbnM/OiBVc2VBY3RpdmVFbGVtZW50T3B0aW9ucyk6IFVzZUFjdGl2ZUVsZW1lbnRSZXR1cm48VD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB0eXBlcy5kLnRzXG5pbnRlcmZhY2UgUG9zaXRpb24ge1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbn1cbmludGVyZmFjZSBSZW5kZXJhYmxlQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoYXQgdGhlIGNvbXBvbmVudCBzaG91bGQgYmUgcmVuZGVyZWQgYXNcbiAgICpcbiAgICogQGRlZmF1bHQgJ2RpdidcbiAgICovXG4gIGFzPzogb2JqZWN0IHwgc3RyaW5nO1xufVxudHlwZSBQb2ludGVyVHlwZSA9ICdtb3VzZScgfCAndG91Y2gnIHwgJ3Blbic7XG5pbnRlcmZhY2UgU3VwcG9ydGFibGUge1xuICBpc1N1cHBvcnRlZDogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG59XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VBbmltYXRlL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VBbmltYXRlT3B0aW9ucyBleHRlbmRzIEtleWZyYW1lQW5pbWF0aW9uT3B0aW9ucywgQ29uZmlndXJhYmxlV2luZG93IHtcbiAgLyoqXG4gICAqIFdpbGwgYXV0b21hdGljYWxseSBydW4gcGxheSB3aGVuIGB1c2VBbmltYXRlYCBpcyB1c2VkXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGltbWVkaWF0ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNvbW1pdHMgdGhlIGVuZCBzdHlsaW5nIHN0YXRlIG9mIGFuIGFuaW1hdGlvbiB0byB0aGUgZWxlbWVudCBiZWluZyBhbmltYXRlZFxuICAgKiBJbiBnZW5lcmFsLCB5b3Ugc2hvdWxkIHVzZSBgZmlsbGAgb3B0aW9uIHdpdGggdGhpcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbW1pdFN0eWxlcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHBlcnNpc3RzIHRoZSBhbmltYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHBlcnNpc3Q/OiBib29sZWFuO1xuICAvKipcbiAgICogRXhlY3V0ZWQgYWZ0ZXIgYW5pbWF0aW9uIGluaXRpYWxpemF0aW9uXG4gICAqL1xuICBvblJlYWR5PzogKGFuaW1hdGU6IEFuaW1hdGlvbikgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENhbGxiYWNrIHdoZW4gZXJyb3IgaXMgY2F1Z2h0LlxuICAgKi9cbiAgb25FcnJvcj86IChlOiB1bmtub3duKSA9PiB2b2lkO1xufVxudHlwZSBVc2VBbmltYXRlS2V5ZnJhbWVzID0gTWF5YmVSZWY8S2V5ZnJhbWVbXSB8IFByb3BlcnR5SW5kZXhlZEtleWZyYW1lcyB8IG51bGw+O1xuaW50ZXJmYWNlIFVzZUFuaW1hdGVSZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIGFuaW1hdGU6IFNoYWxsb3dSZWY8QW5pbWF0aW9uIHwgdW5kZWZpbmVkPjtcbiAgcGxheTogKCkgPT4gdm9pZDtcbiAgcGF1c2U6ICgpID0+IHZvaWQ7XG4gIHJldmVyc2U6ICgpID0+IHZvaWQ7XG4gIGZpbmlzaDogKCkgPT4gdm9pZDtcbiAgY2FuY2VsOiAoKSA9PiB2b2lkO1xuICBwZW5kaW5nOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgcGxheVN0YXRlOiBDb21wdXRlZFJlZjxBbmltYXRpb25QbGF5U3RhdGU+O1xuICByZXBsYWNlU3RhdGU6IENvbXB1dGVkUmVmPEFuaW1hdGlvblJlcGxhY2VTdGF0ZT47XG4gIHN0YXJ0VGltZTogV3JpdGFibGVDb21wdXRlZFJlZjxDU1NOdW1iZXJpc2ggfCBudW1iZXIgfCBudWxsPjtcbiAgY3VycmVudFRpbWU6IFdyaXRhYmxlQ29tcHV0ZWRSZWY8Q1NTTnVtYmVyaXNoIHwgbnVsbD47XG4gIHRpbWVsaW5lOiBXcml0YWJsZUNvbXB1dGVkUmVmPEFuaW1hdGlvblRpbWVsaW5lIHwgbnVsbD47XG4gIHBsYXliYWNrUmF0ZTogV3JpdGFibGVDb21wdXRlZFJlZjxudW1iZXI+O1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBXZWIgQW5pbWF0aW9ucyBBUElcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VBbmltYXRlXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0ga2V5ZnJhbWVzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUFuaW1hdGUodGFyZ2V0OiBNYXliZUNvbXB1dGVkRWxlbWVudFJlZiwga2V5ZnJhbWVzOiBVc2VBbmltYXRlS2V5ZnJhbWVzLCBvcHRpb25zPzogbnVtYmVyIHwgVXNlQW5pbWF0ZU9wdGlvbnMpOiBVc2VBbmltYXRlUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQXN5bmNRdWV1ZS9pbmRleC5kLnRzXG50eXBlIFVzZUFzeW5jUXVldWVUYXNrPFQ+ID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBUIHwgUHJvbWlzZTxUPjtcbnR5cGUgTWFwUXVldWVUYXNrPFQgZXh0ZW5kcyBhbnlbXT4gPSB7IFtLIGluIGtleW9mIFRdOiBVc2VBc3luY1F1ZXVlVGFzazxUW0tdPiB9O1xuaW50ZXJmYWNlIFVzZUFzeW5jUXVldWVSZXN1bHQ8VD4ge1xuICBzdGF0ZTogJ2Fib3J0ZWQnIHwgJ2Z1bGZpbGxlZCcgfCAncGVuZGluZycgfCAncmVqZWN0ZWQnO1xuICBkYXRhOiBUIHwgbnVsbDtcbn1cbmludGVyZmFjZSBVc2VBc3luY1F1ZXVlUmV0dXJuPFQ+IHtcbiAgYWN0aXZlSW5kZXg6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgcmVzdWx0OiBUO1xufVxuaW50ZXJmYWNlIFVzZUFzeW5jUXVldWVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEludGVycnVwdCB0YXNrcyB3aGVuIGN1cnJlbnQgdGFzayBmYWlscy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaW50ZXJydXB0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRyaWdnZXIgaXQgd2hlbiB0aGUgdGFza3MgZmFpbHMuXG4gICAqXG4gICAqL1xuICBvbkVycm9yPzogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFRyaWdnZXIgaXQgd2hlbiB0aGUgdGFza3MgZW5kcy5cbiAgICpcbiAgICovXG4gIG9uRmluaXNoZWQ/OiAoKSA9PiB2b2lkO1xuICAvKipcbiAgICogQSBBYm9ydFNpZ25hbCB0aGF0IGNhbiBiZSB1c2VkIHRvIGFib3J0IHRoZSB0YXNrLlxuICAgKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG4vKipcbiAqIEFzeW5jaHJvbm91cyBxdWV1ZSB0YXNrIGNvbnRyb2xsZXIuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlQXN5bmNRdWV1ZVxuICogQHBhcmFtIHRhc2tzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUFzeW5jUXVldWU8VCBleHRlbmRzIGFueVtdLCBTID0gTWFwUXVldWVUYXNrPFQ+Pih0YXNrczogUyAmIEFycmF5PFVzZUFzeW5jUXVldWVUYXNrPGFueT4+LCBvcHRpb25zPzogVXNlQXN5bmNRdWV1ZU9wdGlvbnMpOiBVc2VBc3luY1F1ZXVlUmV0dXJuPHsgW1AgaW4ga2V5b2YgVF06IFVzZUFzeW5jUXVldWVSZXN1bHQ8VFtQXT4gfT47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VBc3luY1N0YXRlL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VBc3luY1N0YXRlUmV0dXJuQmFzZTxEYXRhLCBQYXJhbXMgZXh0ZW5kcyBhbnlbXSwgU2hhbGxvdyBleHRlbmRzIGJvb2xlYW4+IHtcbiAgc3RhdGU6IFNoYWxsb3cgZXh0ZW5kcyB0cnVlID8gUmVmPERhdGE+IDogUmVmPFVud3JhcFJlZjxEYXRhPj47XG4gIGlzUmVhZHk6IFJlZjxib29sZWFuPjtcbiAgaXNMb2FkaW5nOiBSZWY8Ym9vbGVhbj47XG4gIGVycm9yOiBSZWY8dW5rbm93bj47XG4gIGV4ZWN1dGU6IChkZWxheT86IG51bWJlciwgLi4uYXJnczogUGFyYW1zKSA9PiBQcm9taXNlPERhdGEgfCB1bmRlZmluZWQ+O1xuICBleGVjdXRlSW1tZWRpYXRlOiAoLi4uYXJnczogUGFyYW1zKSA9PiBQcm9taXNlPERhdGEgfCB1bmRlZmluZWQ+O1xufVxudHlwZSBVc2VBc3luY1N0YXRlUmV0dXJuPERhdGEsIFBhcmFtcyBleHRlbmRzIGFueVtdLCBTaGFsbG93IGV4dGVuZHMgYm9vbGVhbj4gPSBVc2VBc3luY1N0YXRlUmV0dXJuQmFzZTxEYXRhLCBQYXJhbXMsIFNoYWxsb3c+ICYgUHJvbWlzZUxpa2U8VXNlQXN5bmNTdGF0ZVJldHVybkJhc2U8RGF0YSwgUGFyYW1zLCBTaGFsbG93Pj47XG5pbnRlcmZhY2UgVXNlQXN5bmNTdGF0ZU9wdGlvbnM8U2hhbGxvdyBleHRlbmRzIGJvb2xlYW4sIEQgPSBhbnk+IHtcbiAgLyoqXG4gICAqIERlbGF5IGZvciB0aGUgZmlyc3QgZXhlY3V0aW9uIG9mIHRoZSBwcm9taXNlIHdoZW4gXCJpbW1lZGlhdGVcIiBpcyB0cnVlLiBJbiBtaWxsaXNlY29uZHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGRlbGF5PzogbnVtYmVyO1xuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgcHJvbWlzZSByaWdodCBhZnRlciB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZC5cbiAgICogV2lsbCBhcHBseSB0aGUgZGVsYXkgaWYgYW55LlxuICAgKlxuICAgKiBXaGVuIHNldCB0byBmYWxzZSwgeW91IHdpbGwgbmVlZCB0byBleGVjdXRlIGl0IG1hbnVhbGx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBpbW1lZGlhdGU/OiBib29sZWFuO1xuICAvKipcbiAgICogQ2FsbGJhY2sgd2hlbiBlcnJvciBpcyBjYXVnaHQuXG4gICAqL1xuICBvbkVycm9yPzogKGU6IHVua25vd24pID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsYmFjayB3aGVuIHN1Y2Nlc3MgaXMgY2F1Z2h0LlxuICAgKiBAcGFyYW0ge0R9IGRhdGFcbiAgICovXG4gIG9uU3VjY2Vzcz86IChkYXRhOiBEKSA9PiB2b2lkO1xuICAvKipcbiAgICogU2V0cyB0aGUgc3RhdGUgdG8gaW5pdGlhbFN0YXRlIGJlZm9yZSBleGVjdXRpbmcgdGhlIHByb21pc2UuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIGNhbGxpbmcgdGhlIGV4ZWN1dGUgZnVuY3Rpb24gbW9yZSB0aGFuIG9uY2UgKGZvclxuICAgKiBleGFtcGxlLCB0byByZWZyZXNoIGRhdGEpLiBXaGVuIHNldCB0byBmYWxzZSwgdGhlIGN1cnJlbnQgc3RhdGUgcmVtYWluc1xuICAgKiB1bmNoYW5nZWQgdW50aWwgdGhlIHByb21pc2UgcmVzb2x2ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlc2V0T25FeGVjdXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFVzZSBzaGFsbG93UmVmLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBzaGFsbG93PzogU2hhbGxvdztcbiAgLyoqXG4gICAqXG4gICAqIEFuIGVycm9yIGlzIHRocm93biB3aGVuIGV4ZWN1dGluZyB0aGUgZXhlY3V0ZSBmdW5jdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdGhyb3dFcnJvcj86IGJvb2xlYW47XG59XG4vKipcbiAqIFJlYWN0aXZlIGFzeW5jIHN0YXRlLiBXaWxsIG5vdCBibG9jayB5b3VyIHNldHVwIGZ1bmN0aW9uIGFuZCB3aWxsIHRyaWdnZXIgY2hhbmdlcyBvbmNlXG4gKiB0aGUgcHJvbWlzZSBpcyByZWFkeS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VBc3luY1N0YXRlXG4gKiBAcGFyYW0gcHJvbWlzZSAgICAgICAgIFRoZSBwcm9taXNlIC8gYXN5bmMgZnVuY3Rpb24gdG8gYmUgcmVzb2x2ZWRcbiAqIEBwYXJhbSBpbml0aWFsU3RhdGUgICAgVGhlIGluaXRpYWwgc3RhdGUsIHVzZWQgdW50aWwgdGhlIGZpcnN0IGV2YWx1YXRpb24gZmluaXNoZXNcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlQXN5bmNTdGF0ZTxEYXRhLCBQYXJhbXMgZXh0ZW5kcyBhbnlbXSA9IGFueVtdLCBTaGFsbG93IGV4dGVuZHMgYm9vbGVhbiA9IHRydWU+KHByb21pc2U6IFByb21pc2U8RGF0YT4gfCAoKC4uLmFyZ3M6IFBhcmFtcykgPT4gUHJvbWlzZTxEYXRhPiksIGluaXRpYWxTdGF0ZTogTWF5YmVSZWY8RGF0YT4sIG9wdGlvbnM/OiBVc2VBc3luY1N0YXRlT3B0aW9uczxTaGFsbG93LCBEYXRhPik6IFVzZUFzeW5jU3RhdGVSZXR1cm48RGF0YSwgUGFyYW1zLCBTaGFsbG93Pjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUJhc2U2NC9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlQmFzZTY0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPdXRwdXQgYXMgRGF0YSBVUkwgZm9ybWF0XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGRhdGFVcmw/OiBib29sZWFuO1xufVxuaW50ZXJmYWNlIFRvRGF0YVVSTE9wdGlvbnMgZXh0ZW5kcyBVc2VCYXNlNjRPcHRpb25zIHtcbiAgLyoqXG4gICAqIE1JTUUgdHlwZVxuICAgKi9cbiAgdHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEltYWdlIHF1YWxpdHkgb2YganBlZyBvciB3ZWJwXG4gICAqL1xuICBxdWFsaXR5PzogYW55O1xufVxuaW50ZXJmYWNlIFVzZUJhc2U2NE9iamVjdE9wdGlvbnM8VD4gZXh0ZW5kcyBVc2VCYXNlNjRPcHRpb25zIHtcbiAgc2VyaWFsaXplcj86ICh2OiBUKSA9PiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgVXNlQmFzZTY0UmV0dXJuIHtcbiAgYmFzZTY0OiBTaGFsbG93UmVmPHN0cmluZz47XG4gIHByb21pc2U6IFNoYWxsb3dSZWY8UHJvbWlzZTxzdHJpbmc+PjtcbiAgZXhlY3V0ZTogKCkgPT4gUHJvbWlzZTxzdHJpbmc+O1xufVxuZGVjbGFyZSBmdW5jdGlvbiB1c2VCYXNlNjQodGFyZ2V0OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZyB8IHVuZGVmaW5lZD4sIG9wdGlvbnM/OiBVc2VCYXNlNjRPcHRpb25zKTogVXNlQmFzZTY0UmV0dXJuO1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VCYXNlNjQodGFyZ2V0OiBNYXliZVJlZk9yR2V0dGVyPEJsb2IgfCB1bmRlZmluZWQ+LCBvcHRpb25zPzogVXNlQmFzZTY0T3B0aW9ucyk6IFVzZUJhc2U2NFJldHVybjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlQmFzZTY0KHRhcmdldDogTWF5YmVSZWZPckdldHRlcjxBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZD4sIG9wdGlvbnM/OiBVc2VCYXNlNjRPcHRpb25zKTogVXNlQmFzZTY0UmV0dXJuO1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VCYXNlNjQodGFyZ2V0OiBNYXliZVJlZk9yR2V0dGVyPEhUTUxDYW52YXNFbGVtZW50IHwgdW5kZWZpbmVkPiwgb3B0aW9ucz86IFRvRGF0YVVSTE9wdGlvbnMpOiBVc2VCYXNlNjRSZXR1cm47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUJhc2U2NCh0YXJnZXQ6IE1heWJlUmVmT3JHZXR0ZXI8SFRNTEltYWdlRWxlbWVudCB8IHVuZGVmaW5lZD4sIG9wdGlvbnM/OiBUb0RhdGFVUkxPcHRpb25zKTogVXNlQmFzZTY0UmV0dXJuO1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VCYXNlNjQ8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih0YXJnZXQ6IE1heWJlUmVmT3JHZXR0ZXI8VD4sIG9wdGlvbnM/OiBVc2VCYXNlNjRPYmplY3RPcHRpb25zPFQ+KTogVXNlQmFzZTY0UmV0dXJuO1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VCYXNlNjQ8VCBleHRlbmRzIE1hcDxzdHJpbmcsIHVua25vd24+Pih0YXJnZXQ6IE1heWJlUmVmT3JHZXR0ZXI8VD4sIG9wdGlvbnM/OiBVc2VCYXNlNjRPYmplY3RPcHRpb25zPFQ+KTogVXNlQmFzZTY0UmV0dXJuO1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VCYXNlNjQ8VCBleHRlbmRzIFNldDx1bmtub3duPj4odGFyZ2V0OiBNYXliZVJlZk9yR2V0dGVyPFQ+LCBvcHRpb25zPzogVXNlQmFzZTY0T2JqZWN0T3B0aW9uczxUPik6IFVzZUJhc2U2NFJldHVybjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlQmFzZTY0PFQ+KHRhcmdldDogTWF5YmVSZWZPckdldHRlcjxUW10+LCBvcHRpb25zPzogVXNlQmFzZTY0T2JqZWN0T3B0aW9uczxUW10+KTogVXNlQmFzZTY0UmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQmF0dGVyeS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlQmF0dGVyeU9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVOYXZpZ2F0b3Ige31cbmludGVyZmFjZSBVc2VCYXR0ZXJ5UmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBjaGFyZ2luZzogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgY2hhcmdpbmdUaW1lOiBTaGFsbG93UmVmPG51bWJlcj47XG4gIGRpc2NoYXJnaW5nVGltZTogU2hhbGxvd1JlZjxudW1iZXI+O1xuICBsZXZlbDogU2hhbGxvd1JlZjxudW1iZXI+O1xufVxuaW50ZXJmYWNlIEJhdHRlcnlNYW5hZ2VyIGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICBjaGFyZ2luZzogYm9vbGVhbjtcbiAgY2hhcmdpbmdUaW1lOiBudW1iZXI7XG4gIGRpc2NoYXJnaW5nVGltZTogbnVtYmVyO1xuICBsZXZlbDogbnVtYmVyO1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBCYXR0ZXJ5IFN0YXR1cyBBUEkuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlQmF0dGVyeVxuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlQmF0dGVyeShvcHRpb25zPzogVXNlQmF0dGVyeU9wdGlvbnMpOiBVc2VCYXR0ZXJ5UmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQmx1ZXRvb3RoL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VCbHVldG9vdGhSZXF1ZXN0RGV2aWNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKlxuICAgKiBBbiBhcnJheSBvZiBCbHVldG9vdGhTY2FuRmlsdGVycy4gVGhpcyBmaWx0ZXIgY29uc2lzdHMgb2YgYW4gYXJyYXlcbiAgICogb2YgQmx1ZXRvb3RoU2VydmljZVVVSURzLCBhIG5hbWUgcGFyYW1ldGVyLCBhbmQgYSBuYW1lUHJlZml4IHBhcmFtZXRlci5cbiAgICpcbiAgICovXG4gIGZpbHRlcnM/OiBCbHVldG9vdGhMRVNjYW5GaWx0ZXJbXSB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqXG4gICAqIEFuIGFycmF5IG9mIEJsdWV0b290aFNlcnZpY2VVVUlEcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQmx1ZXRvb3RoUmVtb3RlR0FUVFNlcnZpY2UvdXVpZFxuICAgKlxuICAgKi9cbiAgb3B0aW9uYWxTZXJ2aWNlcz86IEJsdWV0b290aFNlcnZpY2VVVUlEW10gfCB1bmRlZmluZWQ7XG59XG5pbnRlcmZhY2UgVXNlQmx1ZXRvb3RoT3B0aW9ucyBleHRlbmRzIFVzZUJsdWV0b290aFJlcXVlc3REZXZpY2VPcHRpb25zLCBDb25maWd1cmFibGVOYXZpZ2F0b3Ige1xuICAvKipcbiAgICpcbiAgICogQSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhhdCB0aGUgcmVxdWVzdGluZyBzY3JpcHQgY2FuIGFjY2VwdCBhbGwgQmx1ZXRvb3RoXG4gICAqIGRldmljZXMuIFRoZSBkZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiAhISBUaGlzIG1heSByZXN1bHQgaW4gYSBidW5jaCBvZiB1bnJlbGF0ZWQgZGV2aWNlcyBiZWluZyBzaG93blxuICAgKiBpbiB0aGUgY2hvb3NlciBhbmQgZW5lcmd5IGJlaW5nIHdhc3RlZCBhcyB0aGVyZSBhcmUgbm8gZmlsdGVycy5cbiAgICpcbiAgICpcbiAgICogVXNlIGl0IHdpdGggY2F1dGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICpcbiAgICovXG4gIGFjY2VwdEFsbERldmljZXM/OiBib29sZWFuO1xufVxuZGVjbGFyZSBmdW5jdGlvbiB1c2VCbHVldG9vdGgob3B0aW9ucz86IFVzZUJsdWV0b290aE9wdGlvbnMpOiBVc2VCbHVldG9vdGhSZXR1cm47XG5pbnRlcmZhY2UgVXNlQmx1ZXRvb3RoUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBpc0Nvbm5lY3RlZDogUmVhZG9ubHk8U2hhbGxvd1JlZjxib29sZWFuPj47XG4gIGRldmljZTogU2hhbGxvd1JlZjxCbHVldG9vdGhEZXZpY2UgfCB1bmRlZmluZWQ+O1xuICByZXF1ZXN0RGV2aWNlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBzZXJ2ZXI6IFNoYWxsb3dSZWY8Qmx1ZXRvb3RoUmVtb3RlR0FUVFNlcnZlciB8IHVuZGVmaW5lZD47XG4gIGVycm9yOiBTaGFsbG93UmVmPHVua25vd24gfCBudWxsPjtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUJyZWFrcG9pbnRzL2JyZWFrcG9pbnRzLmQudHNcbi8qKlxuICogQnJlYWtwb2ludHMgZnJvbSBUYWlsd2luZCBWMlxuICpcbiAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9icmVha3BvaW50c1xuICovXG5kZWNsYXJlIGNvbnN0IGJyZWFrcG9pbnRzVGFpbHdpbmQ6IHtcbiAgc206IG51bWJlcjtcbiAgbWQ6IG51bWJlcjtcbiAgbGc6IG51bWJlcjtcbiAgeGw6IG51bWJlcjtcbiAgJzJ4bCc6IG51bWJlcjtcbn07XG4vKipcbiAqIEJyZWFrcG9pbnRzIGZyb20gQm9vdHN0cmFwIFY1XG4gKlxuICogQHNlZSBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy81LjAvbGF5b3V0L2JyZWFrcG9pbnRzXG4gKi9cbmRlY2xhcmUgY29uc3QgYnJlYWtwb2ludHNCb290c3RyYXBWNToge1xuICB4czogbnVtYmVyO1xuICBzbTogbnVtYmVyO1xuICBtZDogbnVtYmVyO1xuICBsZzogbnVtYmVyO1xuICB4bDogbnVtYmVyO1xuICB4eGw6IG51bWJlcjtcbn07XG4vKipcbiAqIEJyZWFrcG9pbnRzIGZyb20gVnVldGlmeSBWMlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92Mi52dWV0aWZ5anMuY29tL2VuL2ZlYXR1cmVzL2JyZWFrcG9pbnRzL1xuICovXG5kZWNsYXJlIGNvbnN0IGJyZWFrcG9pbnRzVnVldGlmeVYyOiB7XG4gIHhzOiBudW1iZXI7XG4gIHNtOiBudW1iZXI7XG4gIG1kOiBudW1iZXI7XG4gIGxnOiBudW1iZXI7XG4gIHhsOiBudW1iZXI7XG59O1xuLyoqXG4gKiBCcmVha3BvaW50cyBmcm9tIFZ1ZXRpZnkgVjNcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldGlmeWpzLmNvbS9lbi9zdHlsZXMvZmxvYXQvI292ZXJ2aWV3XG4gKi9cbmRlY2xhcmUgY29uc3QgYnJlYWtwb2ludHNWdWV0aWZ5VjM6IHtcbiAgeHM6IG51bWJlcjtcbiAgc206IG51bWJlcjtcbiAgbWQ6IG51bWJlcjtcbiAgbGc6IG51bWJlcjtcbiAgeGw6IG51bWJlcjtcbiAgeHhsOiBudW1iZXI7XG59O1xuLyoqXG4gKiBBbGlhcyB0byBgYnJlYWtwb2ludHNWdWV0aWZ5VjJgXG4gKlxuICogQGRlcHJlY2F0ZWQgZXhwbGljdGx5IHVzZSBgYnJlYWtwb2ludHNWdWV0aWZ5VjJgIG9yIGBicmVha3BvaW50c1Z1ZXRpZnlWM2AgaW5zdGVhZFxuICovXG5kZWNsYXJlIGNvbnN0IGJyZWFrcG9pbnRzVnVldGlmeToge1xuICB4czogbnVtYmVyO1xuICBzbTogbnVtYmVyO1xuICBtZDogbnVtYmVyO1xuICBsZzogbnVtYmVyO1xuICB4bDogbnVtYmVyO1xufTtcbi8qKlxuICogQnJlYWtwb2ludHMgZnJvbSBBbnQgRGVzaWduXG4gKlxuICogQHNlZSBodHRwczovL2FudC5kZXNpZ24vY29tcG9uZW50cy9sYXlvdXQvI2JyZWFrcG9pbnQtd2lkdGhcbiAqL1xuZGVjbGFyZSBjb25zdCBicmVha3BvaW50c0FudERlc2lnbjoge1xuICB4czogbnVtYmVyO1xuICBzbTogbnVtYmVyO1xuICBtZDogbnVtYmVyO1xuICBsZzogbnVtYmVyO1xuICB4bDogbnVtYmVyO1xuICB4eGw6IG51bWJlcjtcbn07XG4vKipcbiAqIEJyZWFrcG9pbnRzIGZyb20gUXVhc2FyIFYyXG4gKlxuICogQHNlZSBodHRwczovL3F1YXNhci5kZXYvc3R5bGUvYnJlYWtwb2ludHNcbiAqL1xuZGVjbGFyZSBjb25zdCBicmVha3BvaW50c1F1YXNhcjoge1xuICB4czogbnVtYmVyO1xuICBzbTogbnVtYmVyO1xuICBtZDogbnVtYmVyO1xuICBsZzogbnVtYmVyO1xuICB4bDogbnVtYmVyO1xufTtcbi8qKlxuICogU2VtYXRpYyBCcmVha3BvaW50c1xuICovXG5kZWNsYXJlIGNvbnN0IGJyZWFrcG9pbnRzU2VtYXRpYzoge1xuICBtb2JpbGVTOiBudW1iZXI7XG4gIG1vYmlsZU06IG51bWJlcjtcbiAgbW9iaWxlTDogbnVtYmVyO1xuICB0YWJsZXQ6IG51bWJlcjtcbiAgbGFwdG9wOiBudW1iZXI7XG4gIGxhcHRvcEw6IG51bWJlcjtcbiAgZGVza3RvcDRLOiBudW1iZXI7XG59O1xuLyoqXG4gKiBCcmVha3BvaW50cyBmcm9tIE1hc3RlciBDU1NcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5tYXN0ZXIuY28vY3NzL2JyZWFrcG9pbnRzXG4gKi9cbmRlY2xhcmUgY29uc3QgYnJlYWtwb2ludHNNYXN0ZXJDc3M6IHtcbiAgJzN4cyc6IG51bWJlcjtcbiAgJzJ4cyc6IG51bWJlcjtcbiAgeHM6IG51bWJlcjtcbiAgc206IG51bWJlcjtcbiAgbWQ6IG51bWJlcjtcbiAgbGc6IG51bWJlcjtcbiAgeGw6IG51bWJlcjtcbiAgJzJ4bCc6IG51bWJlcjtcbiAgJzN4bCc6IG51bWJlcjtcbiAgJzR4bCc6IG51bWJlcjtcbn07XG4vKipcbiAqIEJyZWFrcG9pbnRzIGZyb20gUHJpbWVGbGV4XG4gKlxuICogQHNlZSBodHRwczovL3ByaW1lZmxleC5vcmcvaW5zdGFsbGF0aW9uXG4gKi9cbmRlY2xhcmUgY29uc3QgYnJlYWtwb2ludHNQcmltZUZsZXg6IHtcbiAgc206IG51bWJlcjtcbiAgbWQ6IG51bWJlcjtcbiAgbGc6IG51bWJlcjtcbiAgeGw6IG51bWJlcjtcbn07XG4vKipcbiAqIEJyZWFrcG9pbnRzIGZyb20gRWxlbWVudFVJL0VsZW1lbnRQbHVzXG4gKlxuICogQHNlZSBodHRwczovL2VsZW1lbnQuZWxlbWUuaW8vIy9lbi1VUy9jb21wb25lbnQvbGF5b3V0XG4gKiBAc2VlIGh0dHBzOi8vZWxlbWVudC1wbHVzLm9yZy9lbi1VUy9jb21wb25lbnQvbGF5b3V0Lmh0bWxcbiAqL1xuZGVjbGFyZSBjb25zdCBicmVha3BvaW50c0VsZW1lbnQ6IHtcbiAgeHM6IG51bWJlcjtcbiAgc206IG51bWJlcjtcbiAgbWQ6IG51bWJlcjtcbiAgbGc6IG51bWJlcjtcbiAgeGw6IG51bWJlcjtcbn07XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VCcmVha3BvaW50cy9pbmRleC5kLnRzXG50eXBlIEJyZWFrcG9pbnRzPEskMSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSBSZWNvcmQ8SyQxLCBNYXliZVJlZk9yR2V0dGVyPG51bWJlciB8IHN0cmluZz4+O1xuaW50ZXJmYWNlIFVzZUJyZWFrcG9pbnRzT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKlxuICAgKiBUaGUgcXVlcnkgc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgZ2VuZXJhdGVkIHNob3J0Y3V0IG1ldGhvZHMgbGlrZSBgLmxnYFxuICAgKlxuICAgKiAnbWluLXdpZHRoJyAtIC5sZyB3aWxsIGJlIHRydWUgd2hlbiB0aGUgdmlld3BvcnQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBsZyBicmVha3BvaW50IChtb2JpbGUtZmlyc3QpXG4gICAqICdtYXgtd2lkdGgnIC0gLmxnIHdpbGwgYmUgdHJ1ZSB3aGVuIHRoZSB2aWV3cG9ydCBpcyBzbWFsbGVyIHRoYW4gdGhlIHhsIGJyZWFrcG9pbnQgKGRlc2t0b3AtZmlyc3QpXG4gICAqXG4gICAqIEBkZWZhdWx0IFwibWluLXdpZHRoXCJcbiAgICovXG4gIHN0cmF0ZWd5PzogJ21pbi13aWR0aCcgfCAnbWF4LXdpZHRoJztcbiAgc3NyV2lkdGg/OiBudW1iZXI7XG59XG50eXBlIFVzZUJyZWFrcG9pbnRSZXR1cm48SyQxIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9IFJlY29yZDxLJDEsIENvbXB1dGVkUmVmPGJvb2xlYW4+PiAmIHtcbiAgZ3JlYXRlck9yRXF1YWw6IChrOiBNYXliZVJlZk9yR2V0dGVyPEskMT4pID0+IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICBzbWFsbGVyT3JFcXVhbDogKGs6IE1heWJlUmVmT3JHZXR0ZXI8SyQxPikgPT4gQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gIGdyZWF0ZXI6IChrOiBNYXliZVJlZk9yR2V0dGVyPEskMT4pID0+IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICBzbWFsbGVyOiAoazogTWF5YmVSZWZPckdldHRlcjxLJDE+KSA9PiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgYmV0d2VlbjogKGE6IE1heWJlUmVmT3JHZXR0ZXI8SyQxPiwgYjogTWF5YmVSZWZPckdldHRlcjxLJDE+KSA9PiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgaXNHcmVhdGVyOiAoazogTWF5YmVSZWZPckdldHRlcjxLJDE+KSA9PiBib29sZWFuO1xuICBpc0dyZWF0ZXJPckVxdWFsOiAoazogTWF5YmVSZWZPckdldHRlcjxLJDE+KSA9PiBib29sZWFuO1xuICBpc1NtYWxsZXI6IChrOiBNYXliZVJlZk9yR2V0dGVyPEskMT4pID0+IGJvb2xlYW47XG4gIGlzU21hbGxlck9yRXF1YWw6IChrOiBNYXliZVJlZk9yR2V0dGVyPEskMT4pID0+IGJvb2xlYW47XG4gIGlzSW5CZXR3ZWVuOiAoYTogTWF5YmVSZWZPckdldHRlcjxLJDE+LCBiOiBNYXliZVJlZk9yR2V0dGVyPEskMT4pID0+IGJvb2xlYW47XG4gIGN1cnJlbnQ6ICgpID0+IENvbXB1dGVkUmVmPEskMVtdPjtcbiAgYWN0aXZlOiAoKSA9PiBDb21wdXRlZFJlZjxLJDEgfCAnJz47XG59O1xuLyoqXG4gKiBSZWFjdGl2ZWx5IHZpZXdwb3J0IGJyZWFrcG9pbnRzXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlQnJlYWtwb2ludHNcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUJyZWFrcG9pbnRzPEskMSBleHRlbmRzIHN0cmluZz4oYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzPEskMT4sIG9wdGlvbnM/OiBVc2VCcmVha3BvaW50c09wdGlvbnMpOiBVc2VCcmVha3BvaW50UmV0dXJuPEskMT47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VCcm9hZGNhc3RDaGFubmVsL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VCcm9hZGNhc3RDaGFubmVsT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY2hhbm5lbC5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcbn1cbi8qKlxuICogUmVhY3RpdmUgQnJvYWRjYXN0Q2hhbm5lbFxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUJyb2FkY2FzdENoYW5uZWxcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0Jyb2FkY2FzdENoYW5uZWxcbiAqIEBwYXJhbSBvcHRpb25zXG4gKlxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUJyb2FkY2FzdENoYW5uZWw8RCwgUCQxPihvcHRpb25zOiBVc2VCcm9hZGNhc3RDaGFubmVsT3B0aW9ucyk6IFVzZUJyb2FkY2FzdENoYW5uZWxSZXR1cm48RCwgUCQxPjtcbmludGVyZmFjZSBVc2VCcm9hZGNhc3RDaGFubmVsUmV0dXJuPEQsIFAkMT4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIGNoYW5uZWw6IFJlZjxCcm9hZGNhc3RDaGFubmVsIHwgdW5kZWZpbmVkPjtcbiAgZGF0YTogUmVmPEQ+O1xuICBwb3N0OiAoZGF0YTogUCQxKSA9PiB2b2lkO1xuICBjbG9zZTogKCkgPT4gdm9pZDtcbiAgZXJyb3I6IFNoYWxsb3dSZWY8RXZlbnQgfCBudWxsPjtcbiAgaXNDbG9zZWQ6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG59XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VCcm93c2VyTG9jYXRpb24vaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUJyb3dzZXJMb2NhdGlvbk9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge31cbmludGVyZmFjZSBCcm93c2VyTG9jYXRpb25TdGF0ZSB7XG4gIHJlYWRvbmx5IHRyaWdnZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhdGU/OiBhbnk7XG4gIHJlYWRvbmx5IGxlbmd0aD86IG51bWJlcjtcbiAgcmVhZG9ubHkgb3JpZ2luPzogc3RyaW5nO1xuICBoYXNoPzogc3RyaW5nO1xuICBob3N0Pzogc3RyaW5nO1xuICBob3N0bmFtZT86IHN0cmluZztcbiAgaHJlZj86IHN0cmluZztcbiAgcGF0aG5hbWU/OiBzdHJpbmc7XG4gIHBvcnQ/OiBzdHJpbmc7XG4gIHByb3RvY29sPzogc3RyaW5nO1xuICBzZWFyY2g/OiBzdHJpbmc7XG59XG50eXBlIFVzZUJyb3dzZXJMb2NhdGlvblJldHVybiA9IFJlZjxCcm93c2VyTG9jYXRpb25TdGF0ZT47XG4vKipcbiAqIFJlYWN0aXZlIGJyb3dzZXIgbG9jYXRpb24uXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlQnJvd3NlckxvY2F0aW9uXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VCcm93c2VyTG9jYXRpb24ob3B0aW9ucz86IFVzZUJyb3dzZXJMb2NhdGlvbk9wdGlvbnMpOiBVc2VCcm93c2VyTG9jYXRpb25SZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VDYWNoZWQvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUNhY2hlZE9wdGlvbnM8RCBleHRlbmRzIGJvb2xlYW4gPSB0cnVlPiBleHRlbmRzIENvbmZpZ3VyYWJsZURlZXBSZWZzPEQ+LCBXYXRjaE9wdGlvbnMge31cbmRlY2xhcmUgZnVuY3Rpb24gdXNlQ2FjaGVkPFQsIEQgZXh0ZW5kcyBib29sZWFuID0gdHJ1ZT4ocmVmVmFsdWU6IFJlZjxUPiwgY29tcGFyYXRvcj86IChhOiBULCBiOiBUKSA9PiBib29sZWFuLCBvcHRpb25zPzogVXNlQ2FjaGVkT3B0aW9uczxEPik6IFVzZUNhY2hlZFJldHVybjxULCBEPjtcbnR5cGUgVXNlQ2FjaGVkUmV0dXJuPFQgPSBhbnksIEQgZXh0ZW5kcyBib29sZWFuID0gdHJ1ZT4gPSBTaGFsbG93T3JEZWVwUmVmPFQsIEQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQ2xpcGJvYXJkL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VDbGlwYm9hcmRPcHRpb25zPFNvdXJjZT4gZXh0ZW5kcyBDb25maWd1cmFibGVOYXZpZ2F0b3Ige1xuICAvKipcbiAgICogRW5hYmxlZCByZWFkaW5nIGZvciBjbGlwYm9hcmRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQ29weSBzb3VyY2VcbiAgICovXG4gIHNvdXJjZT86IFNvdXJjZTtcbiAgLyoqXG4gICAqIE1pbGxpc2Vjb25kcyB0byByZXNldCBzdGF0ZSBvZiBgY29waWVkYCByZWZcbiAgICpcbiAgICogQGRlZmF1bHQgMTUwMFxuICAgKi9cbiAgY29waWVkRHVyaW5nPzogbnVtYmVyO1xuICAvKipcbiAgICogV2hldGhlciBmYWxsYmFjayB0byBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpIGlmIGNsaXBib2FyZCBpcyB1bmRlZmluZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBsZWdhY3k/OiBib29sZWFuO1xufVxuaW50ZXJmYWNlIFVzZUNsaXBib2FyZFJldHVybjxPcHRpb25hbD4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIHRleHQ6IFJlYWRvbmx5PFNoYWxsb3dSZWY8c3RyaW5nPj47XG4gIGNvcGllZDogUmVhZG9ubHk8U2hhbGxvd1JlZjxib29sZWFuPj47XG4gIGNvcHk6IE9wdGlvbmFsIGV4dGVuZHMgdHJ1ZSA/ICh0ZXh0Pzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+IDogKHRleHQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgQ2xpcGJvYXJkIEFQSS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VDbGlwYm9hcmRcbiAqIEBwYXJhbSBvcHRpb25zXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VDbGlwYm9hcmQob3B0aW9ucz86IFVzZUNsaXBib2FyZE9wdGlvbnM8dW5kZWZpbmVkPik6IFVzZUNsaXBib2FyZFJldHVybjxmYWxzZT47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUNsaXBib2FyZChvcHRpb25zOiBVc2VDbGlwYm9hcmRPcHRpb25zPE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPj4pOiBVc2VDbGlwYm9hcmRSZXR1cm48dHJ1ZT47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VDbGlwYm9hcmRJdGVtcy9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlQ2xpcGJvYXJkSXRlbXNPcHRpb25zPFNvdXJjZT4gZXh0ZW5kcyBDb25maWd1cmFibGVOYXZpZ2F0b3Ige1xuICAvKipcbiAgICogRW5hYmxlZCByZWFkaW5nIGZvciBjbGlwYm9hcmRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQ29weSBzb3VyY2VcbiAgICovXG4gIHNvdXJjZT86IFNvdXJjZTtcbiAgLyoqXG4gICAqIE1pbGxpc2Vjb25kcyB0byByZXNldCBzdGF0ZSBvZiBgY29waWVkYCByZWZcbiAgICpcbiAgICogQGRlZmF1bHQgMTUwMFxuICAgKi9cbiAgY29waWVkRHVyaW5nPzogbnVtYmVyO1xufVxuaW50ZXJmYWNlIFVzZUNsaXBib2FyZEl0ZW1zUmV0dXJuPE9wdGlvbmFsPiBleHRlbmRzIFN1cHBvcnRhYmxlIHtcbiAgY29udGVudDogUmVhZG9ubHk8UmVmPENsaXBib2FyZEl0ZW1zPj47XG4gIGNvcGllZDogUmVhZG9ubHk8U2hhbGxvd1JlZjxib29sZWFuPj47XG4gIGNvcHk6IE9wdGlvbmFsIGV4dGVuZHMgdHJ1ZSA/IChjb250ZW50PzogQ2xpcGJvYXJkSXRlbXMpID0+IFByb21pc2U8dm9pZD4gOiAodGV4dDogQ2xpcGJvYXJkSXRlbXMpID0+IFByb21pc2U8dm9pZD47XG4gIHJlYWQ6ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIFJlYWN0aXZlIENsaXBib2FyZCBBUEkuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlQ2xpcGJvYXJkSXRlbXNcbiAqIEBwYXJhbSBvcHRpb25zXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VDbGlwYm9hcmRJdGVtcyhvcHRpb25zPzogVXNlQ2xpcGJvYXJkSXRlbXNPcHRpb25zPHVuZGVmaW5lZD4pOiBVc2VDbGlwYm9hcmRJdGVtc1JldHVybjxmYWxzZT47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUNsaXBib2FyZEl0ZW1zKG9wdGlvbnM6IFVzZUNsaXBib2FyZEl0ZW1zT3B0aW9uczxNYXliZVJlZk9yR2V0dGVyPENsaXBib2FyZEl0ZW1zPj4pOiBVc2VDbGlwYm9hcmRJdGVtc1JldHVybjx0cnVlPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUNsb25lZC9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlQ2xvbmVkT3B0aW9uczxUID0gYW55PiBleHRlbmRzIFdhdGNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDdXN0b20gY2xvbmUgZnVuY3Rpb24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGl0IHVzZSBgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpYCB0byBjbG9uZS5cbiAgICovXG4gIGNsb25lPzogKHNvdXJjZTogVCkgPT4gVDtcbiAgLyoqXG4gICAqIE1hbnVhbGx5IHN5bmMgdGhlIHJlZlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbWFudWFsPzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBVc2VDbG9uZWRSZXR1cm48VD4ge1xuICAvKipcbiAgICogQ2xvbmVkIHJlZlxuICAgKi9cbiAgY2xvbmVkOiBSZWY8VD47XG4gIC8qKlxuICAgKiBSZWYgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNsb25lZCBkYXRhIGlzIG1vZGlmaWVkXG4gICAqL1xuICBpc01vZGlmaWVkOiBSZWY8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBTeW5jIGNsb25lZCBkYXRhIHdpdGggc291cmNlIG1hbnVhbGx5XG4gICAqL1xuICBzeW5jOiAoKSA9PiB2b2lkO1xufVxudHlwZSBDbG9uZUZuPEYsIFQgPSBGPiA9ICh4OiBGKSA9PiBUO1xuZGVjbGFyZSBmdW5jdGlvbiBjbG9uZUZuSlNPTjxUPihzb3VyY2U6IFQpOiBUO1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VDbG9uZWQ8VD4oc291cmNlOiBNYXliZVJlZk9yR2V0dGVyPFQ+LCBvcHRpb25zPzogVXNlQ2xvbmVkT3B0aW9ucyk6IFVzZUNsb25lZFJldHVybjxUPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNzci1oYW5kbGVycy5kLnRzXG5pbnRlcmZhY2UgU3RvcmFnZUxpa2VBc3luYyB7XG4gIGdldEl0ZW06IChrZXk6IHN0cmluZykgPT4gQXdhaXRhYmxlPHN0cmluZyB8IG51bGw+O1xuICBzZXRJdGVtOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IEF3YWl0YWJsZTx2b2lkPjtcbiAgcmVtb3ZlSXRlbTogKGtleTogc3RyaW5nKSA9PiBBd2FpdGFibGU8dm9pZD47XG59XG5pbnRlcmZhY2UgU3RvcmFnZUxpa2Uge1xuICBnZXRJdGVtOiAoa2V5OiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGw7XG4gIHNldEl0ZW06IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgcmVtb3ZlSXRlbTogKGtleTogc3RyaW5nKSA9PiB2b2lkO1xufVxuLyoqXG4gKiBAZXhwZXJpbWVudGFsIFRoZSBBUEkgaXMgbm90IGZpbmFsaXplZCB5ZXQuIEl0IG1pZ2h0IG5vdCBmb2xsb3cgc2VtdmVyLlxuICovXG5pbnRlcmZhY2UgU1NSSGFuZGxlcnNNYXAge1xuICBnZXREZWZhdWx0U3RvcmFnZTogKCkgPT4gU3RvcmFnZUxpa2UgfCB1bmRlZmluZWQ7XG4gIGdldERlZmF1bHRTdG9yYWdlQXN5bmM6ICgpID0+IFN0b3JhZ2VMaWtlQXN5bmMgfCB1bmRlZmluZWQ7XG4gIHVwZGF0ZUhUTUxBdHRyczogKHNlbGVjdG9yOiBzdHJpbmcgfCBNYXliZUVsZW1lbnRSZWYsIGF0dHJpYnV0ZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xufVxuZGVjbGFyZSBmdW5jdGlvbiBnZXRTU1JIYW5kbGVyPFQgZXh0ZW5kcyBrZXlvZiBTU1JIYW5kbGVyc01hcD4oa2V5OiBULCBmYWxsYmFjazogU1NSSGFuZGxlcnNNYXBbVF0pOiBTU1JIYW5kbGVyc01hcFtUXTtcbmRlY2xhcmUgZnVuY3Rpb24gZ2V0U1NSSGFuZGxlcjxUIGV4dGVuZHMga2V5b2YgU1NSSGFuZGxlcnNNYXA+KGtleTogVCwgZmFsbGJhY2s6IFNTUkhhbmRsZXJzTWFwW1RdIHwgdW5kZWZpbmVkKTogU1NSSGFuZGxlcnNNYXBbVF0gfCB1bmRlZmluZWQ7XG5kZWNsYXJlIGZ1bmN0aW9uIHNldFNTUkhhbmRsZXI8VCBleHRlbmRzIGtleW9mIFNTUkhhbmRsZXJzTWFwPihrZXk6IFQsIGZuOiBTU1JIYW5kbGVyc01hcFtUXSk6IHZvaWQ7XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VTdG9yYWdlL2luZGV4LmQudHNcbmludGVyZmFjZSBTZXJpYWxpemVyPFQ+IHtcbiAgcmVhZDogKHJhdzogc3RyaW5nKSA9PiBUO1xuICB3cml0ZTogKHZhbHVlOiBUKSA9PiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgU2VyaWFsaXplckFzeW5jPFQ+IHtcbiAgcmVhZDogKHJhdzogc3RyaW5nKSA9PiBBd2FpdGFibGU8VD47XG4gIHdyaXRlOiAodmFsdWU6IFQpID0+IEF3YWl0YWJsZTxzdHJpbmc+O1xufVxuZGVjbGFyZSBjb25zdCBTdG9yYWdlU2VyaWFsaXplcnM6IFJlY29yZDwnYm9vbGVhbicgfCAnb2JqZWN0JyB8ICdudW1iZXInIHwgJ2FueScgfCAnc3RyaW5nJyB8ICdtYXAnIHwgJ3NldCcgfCAnZGF0ZScsIFNlcmlhbGl6ZXI8YW55Pj47XG5kZWNsYXJlIGNvbnN0IGN1c3RvbVN0b3JhZ2VFdmVudE5hbWUgPSBcInZ1ZXVzZS1zdG9yYWdlXCI7XG5pbnRlcmZhY2UgU3RvcmFnZUV2ZW50TGlrZSB7XG4gIHN0b3JhZ2VBcmVhOiBTdG9yYWdlTGlrZSB8IG51bGw7XG4gIGtleTogU3RvcmFnZUV2ZW50WydrZXknXTtcbiAgb2xkVmFsdWU6IFN0b3JhZ2VFdmVudFsnb2xkVmFsdWUnXTtcbiAgbmV3VmFsdWU6IFN0b3JhZ2VFdmVudFsnbmV3VmFsdWUnXTtcbn1cbmludGVyZmFjZSBVc2VTdG9yYWdlT3B0aW9uczxUPiBleHRlbmRzIENvbmZpZ3VyYWJsZUV2ZW50RmlsdGVyLCBDb25maWd1cmFibGVXaW5kb3csIENvbmZpZ3VyYWJsZUZsdXNoIHtcbiAgLyoqXG4gICAqIFdhdGNoIGZvciBkZWVwIGNoYW5nZXNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgZGVlcD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gc3RvcmFnZSBjaGFuZ2VzLCB1c2VmdWwgZm9yIG11bHRpcGxlIHRhYnMgYXBwbGljYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgbGlzdGVuVG9TdG9yYWdlQ2hhbmdlcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgZGVmYXVsdCB2YWx1ZSB0byB0aGUgc3RvcmFnZSB3aGVuIGl0IGRvZXMgbm90IGV4aXN0XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHdyaXRlRGVmYXVsdHM/OiBib29sZWFuO1xuICAvKipcbiAgICogTWVyZ2UgdGhlIGRlZmF1bHQgdmFsdWUgd2l0aCB0aGUgdmFsdWUgcmVhZCBmcm9tIHRoZSBzdG9yYWdlLlxuICAgKlxuICAgKiBXaGVuIHNldHRpbmcgaXQgdG8gdHJ1ZSwgaXQgd2lsbCBwZXJmb3JtIGEgKipzaGFsbG93IG1lcmdlKiogZm9yIG9iamVjdHMuXG4gICAqIFlvdSBjYW4gcGFzcyBhIGZ1bmN0aW9uIHRvIHBlcmZvcm0gY3VzdG9tIG1lcmdlIChlLmcuIGRlZXAgbWVyZ2UpLCBmb3IgZXhhbXBsZTpcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG1lcmdlRGVmYXVsdHM/OiBib29sZWFuIHwgKChzdG9yYWdlVmFsdWU6IFQsIGRlZmF1bHRzOiBUKSA9PiBUKTtcbiAgLyoqXG4gICAqIEN1c3RvbSBkYXRhIHNlcmlhbGl6YXRpb25cbiAgICovXG4gIHNlcmlhbGl6ZXI/OiBTZXJpYWxpemVyPFQ+O1xuICAvKipcbiAgICogT24gZXJyb3IgY2FsbGJhY2tcbiAgICpcbiAgICogRGVmYXVsdCBsb2cgZXJyb3IgdG8gYGNvbnNvbGUuZXJyb3JgXG4gICAqL1xuICBvbkVycm9yPzogKGVycm9yOiB1bmtub3duKSA9PiB2b2lkO1xuICAvKipcbiAgICogVXNlIHNoYWxsb3cgcmVmIGFzIHJlZmVyZW5jZVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2hhbGxvdz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXYWl0IGZvciB0aGUgY29tcG9uZW50IHRvIGJlIG1vdW50ZWQgYmVmb3JlIHJlYWRpbmcgdGhlIHN0b3JhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbml0T25Nb3VudGVkPzogYm9vbGVhbjtcbn1cbmRlY2xhcmUgZnVuY3Rpb24gdXNlU3RvcmFnZShrZXk6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgZGVmYXVsdHM6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgc3RvcmFnZT86IFN0b3JhZ2VMaWtlLCBvcHRpb25zPzogVXNlU3RvcmFnZU9wdGlvbnM8c3RyaW5nPik6IFJlbW92YWJsZVJlZjxzdHJpbmc+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTdG9yYWdlKGtleTogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+LCBkZWZhdWx0czogTWF5YmVSZWZPckdldHRlcjxib29sZWFuPiwgc3RvcmFnZT86IFN0b3JhZ2VMaWtlLCBvcHRpb25zPzogVXNlU3RvcmFnZU9wdGlvbnM8Ym9vbGVhbj4pOiBSZW1vdmFibGVSZWY8Ym9vbGVhbj47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVN0b3JhZ2Uoa2V5OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIGRlZmF1bHRzOiBNYXliZVJlZk9yR2V0dGVyPG51bWJlcj4sIHN0b3JhZ2U/OiBTdG9yYWdlTGlrZSwgb3B0aW9ucz86IFVzZVN0b3JhZ2VPcHRpb25zPG51bWJlcj4pOiBSZW1vdmFibGVSZWY8bnVtYmVyPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlU3RvcmFnZTxUPihrZXk6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgZGVmYXVsdHM6IE1heWJlUmVmT3JHZXR0ZXI8VD4sIHN0b3JhZ2U/OiBTdG9yYWdlTGlrZSwgb3B0aW9ucz86IFVzZVN0b3JhZ2VPcHRpb25zPFQ+KTogUmVtb3ZhYmxlUmVmPFQ+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTdG9yYWdlPFQgPSB1bmtub3duPihrZXk6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgZGVmYXVsdHM6IE1heWJlUmVmT3JHZXR0ZXI8bnVsbD4sIHN0b3JhZ2U/OiBTdG9yYWdlTGlrZSwgb3B0aW9ucz86IFVzZVN0b3JhZ2VPcHRpb25zPFQ+KTogUmVtb3ZhYmxlUmVmPFQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQ29sb3JNb2RlL2luZGV4LmQudHNcbnR5cGUgQmFzaWNDb2xvck1vZGUgPSAnbGlnaHQnIHwgJ2RhcmsnO1xudHlwZSBCYXNpY0NvbG9yU2NoZW1hID0gQmFzaWNDb2xvck1vZGUgfCAnYXV0byc7XG5pbnRlcmZhY2UgVXNlQ29sb3JNb2RlT3B0aW9uczxUIGV4dGVuZHMgc3RyaW5nID0gQmFzaWNDb2xvck1vZGU+IGV4dGVuZHMgVXNlU3RvcmFnZU9wdGlvbnM8VCB8IEJhc2ljQ29sb3JNb2RlPiB7XG4gIC8qKlxuICAgKiBDU1MgU2VsZWN0b3IgZm9yIHRoZSB0YXJnZXQgZWxlbWVudCBhcHBseWluZyB0b1xuICAgKlxuICAgKiBAZGVmYXVsdCAnaHRtbCdcbiAgICovXG4gIHNlbGVjdG9yPzogc3RyaW5nIHwgTWF5YmVFbGVtZW50UmVmO1xuICAvKipcbiAgICogSFRNTCBhdHRyaWJ1dGUgYXBwbHlpbmcgdGhlIHRhcmdldCBlbGVtZW50XG4gICAqXG4gICAqIEBkZWZhdWx0ICdjbGFzcydcbiAgICovXG4gIGF0dHJpYnV0ZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIGNvbG9yIG1vZGVcbiAgICpcbiAgICogQGRlZmF1bHQgJ2F1dG8nXG4gICAqL1xuICBpbml0aWFsVmFsdWU/OiBNYXliZVJlZk9yR2V0dGVyPFQgfCBCYXNpY0NvbG9yU2NoZW1hPjtcbiAgLyoqXG4gICAqIFByZWZpeCB3aGVuIGFkZGluZyB2YWx1ZSB0byB0aGUgYXR0cmlidXRlXG4gICAqL1xuICBtb2Rlcz86IFBhcnRpYWw8UmVjb3JkPFQgfCBCYXNpY0NvbG9yU2NoZW1hLCBzdHJpbmc+PjtcbiAgLyoqXG4gICAqIEEgY3VzdG9tIGhhbmRsZXIgZm9yIGhhbmRsZSB0aGUgdXBkYXRlcy5cbiAgICogV2hlbiBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdpbGwgYmUgb3ZlcnJpZGRlbi5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBvbkNoYW5nZWQ/OiAobW9kZTogVCB8IEJhc2ljQ29sb3JNb2RlLCBkZWZhdWx0SGFuZGxlcjogKChtb2RlOiBUIHwgQmFzaWNDb2xvck1vZGUpID0+IHZvaWQpKSA9PiB2b2lkO1xuICAvKipcbiAgICogQ3VzdG9tIHN0b3JhZ2UgcmVmXG4gICAqXG4gICAqIFdoZW4gcHJvdmlkZWQsIGB1c2VTdG9yYWdlYCB3aWxsIGJlIHNraXBwZWRcbiAgICovXG4gIHN0b3JhZ2VSZWY/OiBSZWY8VCB8IEJhc2ljQ29sb3JTY2hlbWE+O1xuICAvKipcbiAgICogS2V5IHRvIHBlcnNpc3QgdGhlIGRhdGEgaW50byBsb2NhbFN0b3JhZ2Uvc2Vzc2lvblN0b3JhZ2UuXG4gICAqXG4gICAqIFBhc3MgYG51bGxgIHRvIGRpc2FibGUgcGVyc2lzdGVuY2VcbiAgICpcbiAgICogQGRlZmF1bHQgJ3Z1ZXVzZS1jb2xvci1zY2hlbWUnXG4gICAqL1xuICBzdG9yYWdlS2V5Pzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqXG4gICAqIFN0b3JhZ2Ugb2JqZWN0LCBjYW4gYmUgbG9jYWxTdG9yYWdlIG9yIHNlc3Npb25TdG9yYWdlXG4gICAqXG4gICAqIEBkZWZhdWx0IGxvY2FsU3RvcmFnZVxuICAgKi9cbiAgc3RvcmFnZT86IFN0b3JhZ2VMaWtlO1xuICAvKipcbiAgICogRW1pdCBgYXV0b2AgbW9kZSBmcm9tIHN0YXRlXG4gICAqXG4gICAqIFdoZW4gc2V0IHRvIGB0cnVlYCwgcHJlZmVycmVkIG1vZGUgd29uJ3QgYmUgdHJhbnNsYXRlZCBpbnRvIGBsaWdodGAgb3IgYGRhcmtgLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSBmYWN0IHRoYXQgYGF1dG9gIG1vZGUgd2FzIHNlbGVjdGVkIG5lZWRzIHRvIGJlIGtub3duLlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBzdG9yZS52YWx1ZWAgd2hlbiBgYXV0b2AgbW9kZSBuZWVkcyB0byBiZSBrbm93blxuICAgKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy9jb3JlL3VzZUNvbG9yTW9kZS8jYWR2YW5jZWQtdXNhZ2VcbiAgICovXG4gIGVtaXRBdXRvPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERpc2FibGUgdHJhbnNpdGlvbiBvbiBzd2l0Y2hcbiAgICpcbiAgICogQHNlZSBodHRwczovL3BhY28ubWUvd3JpdGluZy9kaXNhYmxlLXRoZW1lLXRyYW5zaXRpb25zXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGRpc2FibGVUcmFuc2l0aW9uPzogYm9vbGVhbjtcbn1cbnR5cGUgVXNlQ29sb3JNb2RlUmV0dXJuPFQgZXh0ZW5kcyBzdHJpbmcgPSBCYXNpY0NvbG9yTW9kZT4gPSBSZWY8VCB8IEJhc2ljQ29sb3JTY2hlbWE+ICYge1xuICBzdG9yZTogUmVmPFQgfCBCYXNpY0NvbG9yU2NoZW1hPjtcbiAgc3lzdGVtOiBDb21wdXRlZFJlZjxCYXNpY0NvbG9yTW9kZT47XG4gIHN0YXRlOiBDb21wdXRlZFJlZjxUIHwgQmFzaWNDb2xvck1vZGU+O1xufTtcbi8qKlxuICogUmVhY3RpdmUgY29sb3IgbW9kZSB3aXRoIGF1dG8gZGF0YSBwZXJzaXN0ZW5jZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VDb2xvck1vZGVcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlQ29sb3JNb2RlPFQgZXh0ZW5kcyBzdHJpbmcgPSBCYXNpY0NvbG9yTW9kZT4ob3B0aW9ucz86IFVzZUNvbG9yTW9kZU9wdGlvbnM8VD4pOiBVc2VDb2xvck1vZGVSZXR1cm48VD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VDb25maXJtRGlhbG9nL2luZGV4LmQudHNcbnR5cGUgVXNlQ29uZmlybURpYWxvZ1JldmVhbFJlc3VsdDxDLCBEPiA9IHtcbiAgZGF0YT86IEM7XG4gIGlzQ2FuY2VsZWQ6IGZhbHNlO1xufSB8IHtcbiAgZGF0YT86IEQ7XG4gIGlzQ2FuY2VsZWQ6IHRydWU7XG59O1xuaW50ZXJmYWNlIFVzZUNvbmZpcm1EaWFsb2dSZXR1cm48UmV2ZWFsRGF0YSwgQ29uZmlybURhdGEsIENhbmNlbERhdGE+IHtcbiAgLyoqXG4gICAqIFJldmVhbGluZyBzdGF0ZVxuICAgKi9cbiAgaXNSZXZlYWxlZDogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBPcGVucyB0aGUgZGlhbG9nLlxuICAgKiBDcmVhdGUgcHJvbWlzZSBhbmQgcmV0dXJuIGl0LiBUcmlnZ2VycyBgb25SZXZlYWxgIGhvb2suXG4gICAqL1xuICByZXZlYWw6IChkYXRhPzogUmV2ZWFsRGF0YSkgPT4gUHJvbWlzZTxVc2VDb25maXJtRGlhbG9nUmV2ZWFsUmVzdWx0PENvbmZpcm1EYXRhLCBDYW5jZWxEYXRhPj47XG4gIC8qKlxuICAgKiBDb25maXJtcyBhbmQgY2xvc2VzIHRoZSBkaWFsb2cuIFRyaWdnZXJzIGEgY2FsbGJhY2sgaW5zaWRlIGBvbkNvbmZpcm1gIGhvb2suXG4gICAqIFJlc29sdmVzIHByb21pc2UgZnJvbSBgcmV2ZWFsKClgIHdpdGggYGRhdGFgIGFuZCBgaXNDYW5jZWxlZGAgcmVmIHdpdGggYGZhbHNlYCB2YWx1ZS5cbiAgICogQ2FuIGFjY2VwdCBhbnkgZGF0YSBhbmQgdG8gcGFzcyBpdCB0byBgb25Db25maXJtYCBob29rLlxuICAgKi9cbiAgY29uZmlybTogKGRhdGE/OiBDb25maXJtRGF0YSkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENhbmNlbHMgYW5kIGNsb3NlcyB0aGUgZGlhbG9nLiBUcmlnZ2VycyBhIGNhbGxiYWNrIGluc2lkZSBgb25DYW5jZWxgIGhvb2suXG4gICAqIFJlc29sdmVzIHByb21pc2UgZnJvbSBgcmV2ZWFsKClgIHdpdGggYGRhdGFgIGFuZCBgaXNDYW5jZWxlZGAgcmVmIHdpdGggYHRydWVgIHZhbHVlLlxuICAgKiBDYW4gYWNjZXB0IGFueSBkYXRhIGFuZCB0byBwYXNzIGl0IHRvIGBvbkNhbmNlbGAgaG9vay5cbiAgICovXG4gIGNhbmNlbDogKGRhdGE/OiBDYW5jZWxEYXRhKSA9PiB2b2lkO1xuICAvKipcbiAgICogRXZlbnQgSG9vayB0byBiZSB0cmlnZ2VyZWQgcmlnaHQgYmVmb3JlIGRpYWxvZyBjcmVhdGluZy5cbiAgICovXG4gIG9uUmV2ZWFsOiBFdmVudEhvb2tPbjxSZXZlYWxEYXRhPjtcbiAgLyoqXG4gICAqIEV2ZW50IEhvb2sgdG8gYmUgY2FsbGVkIG9uIGBjb25maXJtKClgLlxuICAgKiBHZXRzIGRhdGEgb2JqZWN0IGZyb20gYGNvbmZpcm1gIGZ1bmN0aW9uLlxuICAgKi9cbiAgb25Db25maXJtOiBFdmVudEhvb2tPbjxDb25maXJtRGF0YT47XG4gIC8qKlxuICAgKiBFdmVudCBIb29rIHRvIGJlIGNhbGxlZCBvbiBgY2FuY2VsKClgLlxuICAgKiBHZXRzIGRhdGEgb2JqZWN0IGZyb20gYGNhbmNlbGAgZnVuY3Rpb24uXG4gICAqL1xuICBvbkNhbmNlbDogRXZlbnRIb29rT248Q2FuY2VsRGF0YT47XG59XG4vKipcbiAqIEhvb2tzIGZvciBjcmVhdGluZyBjb25maXJtIGRpYWxvZ3MuIFVzZWZ1bCBmb3IgbW9kYWwgd2luZG93cywgcG9wdXBzIGFuZCBsb2dpbnMuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlQ29uZmlybURpYWxvZy9cbiAqIEBwYXJhbSByZXZlYWxlZCBgYm9vbGVhbmAgYHJlZmAgdGhhdCBoYW5kbGVzIGEgbW9kYWwgd2luZG93XG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VDb25maXJtRGlhbG9nPFJldmVhbERhdGEgPSBhbnksIENvbmZpcm1EYXRhID0gYW55LCBDYW5jZWxEYXRhID0gYW55PihyZXZlYWxlZD86IFNoYWxsb3dSZWY8Ym9vbGVhbj4pOiBVc2VDb25maXJtRGlhbG9nUmV0dXJuPFJldmVhbERhdGEsIENvbmZpcm1EYXRhLCBDYW5jZWxEYXRhPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUNvdW50ZG93bi9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlQ291bnRkb3duT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVNjaGVkdWxlciB7XG4gIC8qKlxuICAgKiAgSW50ZXJ2YWwgZm9yIHRoZSBjb3VudGRvd24gaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0IGlzIDEwMDBtcy5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBgc2NoZWR1bGVyYCBvcHRpb24gaW5zdGVhZFxuICAgKi9cbiAgaW50ZXJ2YWw/OiBNYXliZVJlZk9yR2V0dGVyPG51bWJlcj47XG4gIC8qKlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgY291bnRkb3duIHJlYWNoZXMgMC5cbiAgICovXG4gIG9uQ29tcGxldGU/OiAoKSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIG9uIGVhY2ggdGljayBvZiB0aGUgY291bnRkb3duLlxuICAgKi9cbiAgb25UaWNrPzogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBjb3VudGRvd24gaW1tZWRpYXRlbHlcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBgc2NoZWR1bGVyYCBvcHRpb24gaW5zdGVhZFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW1tZWRpYXRlPzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBVc2VDb3VudGRvd25SZXR1cm4gZXh0ZW5kcyBQYXVzYWJsZSB7XG4gIC8qKlxuICAgKiBDdXJyZW50IGNvdW50ZG93biB2YWx1ZS5cbiAgICovXG4gIHJlbWFpbmluZzogU2hhbGxvd1JlZjxudW1iZXI+O1xuICAvKipcbiAgICogUmVzZXRzIHRoZSBjb3VudGRvd24gYW5kIHJlcGVhdHNMZWZ0IHRvIHRoZWlyIGluaXRpYWwgdmFsdWVzLlxuICAgKi9cbiAgcmVzZXQ6IChjb3VudGRvd24/OiBNYXliZVJlZk9yR2V0dGVyPG51bWJlcj4pID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBTdG9wcyB0aGUgY291bnRkb3duIGFuZCByZXNldHMgaXRzIHN0YXRlLlxuICAgKi9cbiAgc3RvcDogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBjb3VudGRvd24gYW5kIHN0YXJ0IGl0IGFnYWluLlxuICAgKi9cbiAgc3RhcnQ6IChjb3VudGRvd24/OiBNYXliZVJlZk9yR2V0dGVyPG51bWJlcj4pID0+IHZvaWQ7XG59XG4vKipcbiAqIFJlYWN0aXZlIGNvdW50ZG93biB0aW1lciBpbiBzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSBpbml0aWFsQ291bnRkb3duXG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUNvdW50ZG93blxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUNvdW50ZG93bihpbml0aWFsQ291bnRkb3duOiBNYXliZVJlZk9yR2V0dGVyPG51bWJlcj4sIG9wdGlvbnM/OiBVc2VDb3VudGRvd25PcHRpb25zKTogVXNlQ291bnRkb3duUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQ3NzU3VwcG9ydHMvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUNzc1N1cHBvcnRzT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIHNzclZhbHVlPzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBVc2VDc3NTdXBwb3J0c1JldHVybiBleHRlbmRzIFN1cHBvcnRhYmxlIHt9XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUNzc1N1cHBvcnRzKHByb3BlcnR5OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIHZhbHVlOiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIG9wdGlvbnM/OiBVc2VDc3NTdXBwb3J0c09wdGlvbnMpOiBVc2VDc3NTdXBwb3J0c1JldHVybjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlQ3NzU3VwcG9ydHMoY29uZGl0aW9uVGV4dDogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+LCBvcHRpb25zPzogVXNlQ3NzU3VwcG9ydHNPcHRpb25zKTogVXNlQ3NzU3VwcG9ydHNSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VDc3NWYXIvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUNzc1Zhck9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge1xuICBpbml0aWFsVmFsdWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVc2UgTXV0YXRpb25PYnNlcnZlciB0byBtb25pdG9yIHZhcmlhYmxlIGNoYW5nZXNcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG9ic2VydmU/OiBib29sZWFuO1xufVxuLyoqXG4gKiBNYW5pcHVsYXRlIENTUyB2YXJpYWJsZXMuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlQ3NzVmFyXG4gKiBAcGFyYW0gcHJvcFxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VDc3NWYXIocHJvcDogTWF5YmVSZWZPckdldHRlcjxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiwgdGFyZ2V0PzogTWF5YmVFbGVtZW50UmVmLCBvcHRpb25zPzogVXNlQ3NzVmFyT3B0aW9ucyk6IHZ1ZTAuU2hhbGxvd1JlZjxzdHJpbmcgfCB1bmRlZmluZWQsIHN0cmluZyB8IHVuZGVmaW5lZD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VDdXJyZW50RWxlbWVudC9pbmRleC5kLnRzXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUN1cnJlbnRFbGVtZW50PFQgZXh0ZW5kcyBNYXliZUVsZW1lbnQgPSBNYXliZUVsZW1lbnQsIFIkMSBleHRlbmRzIFZ1ZUluc3RhbmNlID0gVnVlSW5zdGFuY2UsIEUgZXh0ZW5kcyBNYXliZUVsZW1lbnQgPSAoTWF5YmVFbGVtZW50IGV4dGVuZHMgVCA/IElzQW55PFIkMVsnJGVsJ10+IGV4dGVuZHMgZmFsc2UgPyBSJDFbJyRlbCddIDogVCA6IFQpPihyb290Q29tcG9uZW50PzogTWF5YmVFbGVtZW50UmVmPFIkMT4pOiBfdnVldXNlX3NoYXJlZDAuQ29tcHV0ZWRSZWZXaXRoQ29udHJvbDxFPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUN5Y2xlTGlzdC9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlQ3ljbGVMaXN0T3B0aW9uczxUPiB7XG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc3RhdGUuXG4gICAqIEEgcmVmIGNhbiBiZSBwcm92aWRlZCB0byByZXVzZS5cbiAgICovXG4gIGluaXRpYWxWYWx1ZT86IE1heWJlUmVmPFQ+O1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgaW5kZXggd2hlblxuICAgKi9cbiAgZmFsbGJhY2tJbmRleD86IG51bWJlcjtcbiAgLyoqXG4gICAqIEN1c3RvbSBmdW5jdGlvbiB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHZhbHVlLlxuICAgKi9cbiAgZ2V0SW5kZXhPZj86ICh2YWx1ZTogVCwgbGlzdDogVFtdKSA9PiBudW1iZXI7XG59XG4vKipcbiAqIEN5Y2xlIHRocm91Z2ggYSBsaXN0IG9mIGl0ZW1zXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlQ3ljbGVMaXN0XG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlQ3ljbGVMaXN0PFQ+KGxpc3Q6IE1heWJlUmVmT3JHZXR0ZXI8VFtdPiwgb3B0aW9ucz86IFVzZUN5Y2xlTGlzdE9wdGlvbnM8VD4pOiBVc2VDeWNsZUxpc3RSZXR1cm48VD47XG5pbnRlcmZhY2UgVXNlQ3ljbGVMaXN0UmV0dXJuPFQ+IHtcbiAgc3RhdGU6IFNoYWxsb3dSZWY8VD47XG4gIGluZGV4OiBXcml0YWJsZUNvbXB1dGVkUmVmPG51bWJlcj47XG4gIG5leHQ6IChuPzogbnVtYmVyKSA9PiBUO1xuICBwcmV2OiAobj86IG51bWJlcikgPT4gVDtcbiAgLyoqXG4gICAqIEdvIHRvIGEgc3BlY2lmaWMgaW5kZXhcbiAgICovXG4gIGdvOiAoaTogbnVtYmVyKSA9PiBUO1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlRGFyay9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlRGFya09wdGlvbnMgZXh0ZW5kcyBPbWl0PFVzZUNvbG9yTW9kZU9wdGlvbnM8QmFzaWNDb2xvclNjaGVtYT4sICdtb2RlcycgfCAnb25DaGFuZ2VkJz4ge1xuICAvKipcbiAgICogVmFsdWUgYXBwbHlpbmcgdG8gdGhlIHRhcmdldCBlbGVtZW50IHdoZW4gaXNEYXJrPXRydWVcbiAgICpcbiAgICogQGRlZmF1bHQgJ2RhcmsnXG4gICAqL1xuICB2YWx1ZURhcms/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBWYWx1ZSBhcHBseWluZyB0byB0aGUgdGFyZ2V0IGVsZW1lbnQgd2hlbiBpc0Rhcms9ZmFsc2VcbiAgICpcbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIHZhbHVlTGlnaHQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBIGN1c3RvbSBoYW5kbGVyIGZvciBoYW5kbGUgdGhlIHVwZGF0ZXMuXG4gICAqIFdoZW4gc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aWxsIGJlIG92ZXJyaWRkZW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgb25DaGFuZ2VkPzogKGlzRGFyazogYm9vbGVhbiwgZGVmYXVsdEhhbmRsZXI6ICgobW9kZTogQmFzaWNDb2xvclNjaGVtYSkgPT4gdm9pZCksIG1vZGU6IEJhc2ljQ29sb3JTY2hlbWEpID0+IHZvaWQ7XG59XG50eXBlIFVzZURhcmtSZXR1cm4gPSBXcml0YWJsZUNvbXB1dGVkUmVmPGJvb2xlYW4+O1xuLyoqXG4gKiBSZWFjdGl2ZSBkYXJrIG1vZGUgd2l0aCBhdXRvIGRhdGEgcGVyc2lzdGVuY2UuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRGFya1xuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VEYXJrKG9wdGlvbnM/OiBVc2VEYXJrT3B0aW9ucyk6IFVzZURhcmtSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VNYW51YWxSZWZIaXN0b3J5L2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VSZWZIaXN0b3J5UmVjb3JkPFQ+IHtcbiAgc25hcHNob3Q6IFQ7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xufVxuaW50ZXJmYWNlIFVzZU1hbnVhbFJlZkhpc3RvcnlPcHRpb25zPFJhdywgU2VyaWFsaXplZCA9IFJhdz4ge1xuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgaGlzdG9yeSB0byBiZSBrZXB0LiBEZWZhdWx0IHRvIHVubGltaXRlZC5cbiAgICovXG4gIGNhcGFjaXR5PzogbnVtYmVyO1xuICAvKipcbiAgICogQ2xvbmUgd2hlbiB0YWtpbmcgYSBzbmFwc2hvdCwgc2hvcnRjdXQgZm9yIGR1bXA6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKS5cbiAgICogRGVmYXVsdCB0byBmYWxzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2xvbmU/OiBib29sZWFuIHwgQ2xvbmVGbjxSYXc+O1xuICAvKipcbiAgICogU2VyaWFsaXplIGRhdGEgaW50byB0aGUgaGlzdG9yeVxuICAgKi9cbiAgZHVtcD86ICh2OiBSYXcpID0+IFNlcmlhbGl6ZWQ7XG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBkYXRhIGZyb20gdGhlIGhpc3RvcnlcbiAgICovXG4gIHBhcnNlPzogKHY6IFNlcmlhbGl6ZWQpID0+IFJhdztcbiAgLyoqXG4gICAqIHNldCBkYXRhIHNvdXJjZVxuICAgKi9cbiAgc2V0U291cmNlPzogKHNvdXJjZTogUmVmPFJhdz4sIHY6IFJhdykgPT4gdm9pZDtcbn1cbmludGVyZmFjZSBVc2VNYW51YWxSZWZIaXN0b3J5UmV0dXJuPFJhdywgU2VyaWFsaXplZD4ge1xuICAvKipcbiAgICogQnlwYXNzZWQgdHJhY2tpbmcgcmVmIGZyb20gdGhlIGFyZ3VtZW50XG4gICAqL1xuICBzb3VyY2U6IFJlZjxSYXc+O1xuICAvKipcbiAgICogQW4gYXJyYXkgb2YgaGlzdG9yeSByZWNvcmRzIGZvciB1bmRvLCBuZXdlc3QgY29tZXMgdG8gZmlyc3RcbiAgICovXG4gIGhpc3Rvcnk6IFJlZjxVc2VSZWZIaXN0b3J5UmVjb3JkPFNlcmlhbGl6ZWQ+W10+O1xuICAvKipcbiAgICogTGFzdCBoaXN0b3J5IHBvaW50LCBzb3VyY2UgY2FuIGJlIGRpZmZlcmVudCBpZiBwYXVzZWRcbiAgICovXG4gIGxhc3Q6IFJlZjxVc2VSZWZIaXN0b3J5UmVjb3JkPFNlcmlhbGl6ZWQ+PjtcbiAgLyoqXG4gICAqIFNhbWUgYXMge0BsaW5rIFVzZU1hbnVhbFJlZkhpc3RvcnlSZXR1cm4uaGlzdG9yeSB8IGhpc3Rvcnl9XG4gICAqL1xuICB1bmRvU3RhY2s6IFJlZjxVc2VSZWZIaXN0b3J5UmVjb3JkPFNlcmlhbGl6ZWQ+W10+O1xuICAvKipcbiAgICogUmVjb3JkcyBhcnJheSBmb3IgcmVkb1xuICAgKi9cbiAgcmVkb1N0YWNrOiBSZWY8VXNlUmVmSGlzdG9yeVJlY29yZDxTZXJpYWxpemVkPltdPjtcbiAgLyoqXG4gICAqIEEgcmVmIHJlcHJlc2VudGluZyBpZiB1bmRvIGlzIHBvc3NpYmxlIChub24gZW1wdHkgdW5kb1N0YWNrKVxuICAgKi9cbiAgY2FuVW5kbzogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBBIHJlZiByZXByZXNlbnRpbmcgaWYgcmVkbyBpcyBwb3NzaWJsZSAobm9uIGVtcHR5IHJlZG9TdGFjaylcbiAgICovXG4gIGNhblJlZG86IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAvKipcbiAgICogVW5kbyBjaGFuZ2VzXG4gICAqL1xuICB1bmRvOiAoKSA9PiB2b2lkO1xuICAvKipcbiAgICogUmVkbyBjaGFuZ2VzXG4gICAqL1xuICByZWRvOiAoKSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2xlYXIgYWxsIHRoZSBoaXN0b3J5XG4gICAqL1xuICBjbGVhcjogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBoaXN0b3J5IHJlY29yZFxuICAgKi9cbiAgY29tbWl0OiAoKSA9PiB2b2lkO1xuICAvKipcbiAgICogUmVzZXQgcmVmJ3MgdmFsdWUgd2l0aCBsYXRlc3QgaGlzdG9yeVxuICAgKi9cbiAgcmVzZXQ6ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIFRyYWNrIHRoZSBjaGFuZ2UgaGlzdG9yeSBvZiBhIHJlZiwgYWxzbyBwcm92aWRlcyB1bmRvIGFuZCByZWRvIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlTWFudWFsUmVmSGlzdG9yeVxuICogQHBhcmFtIHNvdXJjZVxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VNYW51YWxSZWZIaXN0b3J5PFJhdywgU2VyaWFsaXplZCA9IFJhdz4oc291cmNlOiBSZWY8UmF3Piwgb3B0aW9ucz86IFVzZU1hbnVhbFJlZkhpc3RvcnlPcHRpb25zPFJhdywgU2VyaWFsaXplZD4pOiBVc2VNYW51YWxSZWZIaXN0b3J5UmV0dXJuPFJhdywgU2VyaWFsaXplZD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VSZWZIaXN0b3J5L2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VSZWZIaXN0b3J5T3B0aW9uczxSYXcsIFNlcmlhbGl6ZWQgPSBSYXc+IGV4dGVuZHMgQ29uZmlndXJhYmxlRXZlbnRGaWx0ZXIsIENvbmZpZ3VyYWJsZUZsdXNoIHtcbiAgLyoqXG4gICAqIFdhdGNoIGZvciBkZWVwIGNoYW5nZXMsIGRlZmF1bHQgdG8gZmFsc2VcbiAgICpcbiAgICogV2hlbiBzZXQgdG8gdHJ1ZSwgaXQgd2lsbCBhbHNvIGNyZWF0ZSBjbG9uZXMgZm9yIHZhbHVlcyBzdG9yZSBpbiB0aGUgaGlzdG9yeVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVlcD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBoaXN0b3J5IHRvIGJlIGtlcHQuIERlZmF1bHQgdG8gdW5saW1pdGVkLlxuICAgKi9cbiAgY2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBDbG9uZSB3aGVuIHRha2luZyBhIHNuYXBzaG90LCBzaG9ydGN1dCBmb3IgZHVtcDogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpLlxuICAgKiBEZWZhdWx0IHRvIGZhbHNlXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjbG9uZT86IGJvb2xlYW4gfCBDbG9uZUZuPFJhdz47XG4gIC8qKlxuICAgKiBTZXJpYWxpemUgZGF0YSBpbnRvIHRoZSBoaXN0b3J5XG4gICAqL1xuICBkdW1wPzogKHY6IFJhdykgPT4gU2VyaWFsaXplZDtcbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGRhdGEgZnJvbSB0aGUgaGlzdG9yeVxuICAgKi9cbiAgcGFyc2U/OiAodjogU2VyaWFsaXplZCkgPT4gUmF3O1xuICAvKipcbiAgICogRnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIHRoZSBjb21taXQgc2hvdWxkIHByb2NlZWRcbiAgICogQHBhcmFtIG9sZFZhbHVlIFByZXZpb3VzIHZhbHVlXG4gICAqIEBwYXJhbSBuZXdWYWx1ZSBOZXcgdmFsdWVcbiAgICogQHJldHVybnMgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGNvbW1pdCBzaG91bGQgcHJvY2VlZFxuICAgKi9cbiAgc2hvdWxkQ29tbWl0PzogKG9sZFZhbHVlOiBSYXcgfCB1bmRlZmluZWQsIG5ld1ZhbHVlOiBSYXcpID0+IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgVXNlUmVmSGlzdG9yeVJldHVybjxSYXcsIFNlcmlhbGl6ZWQ+IGV4dGVuZHMgVXNlTWFudWFsUmVmSGlzdG9yeVJldHVybjxSYXcsIFNlcmlhbGl6ZWQ+IHtcbiAgLyoqXG4gICAqIEEgcmVmIHJlcHJlc2VudGluZyBpZiB0aGUgdHJhY2tpbmcgaXMgZW5hYmxlZFxuICAgKi9cbiAgaXNUcmFja2luZzogUmVmPGJvb2xlYW4+O1xuICAvKipcbiAgICogUGF1c2UgY2hhbmdlIHRyYWNraW5nXG4gICAqL1xuICBwYXVzZTogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJlc3VtZSBjaGFuZ2UgdHJhY2tpbmdcbiAgICpcbiAgICogQHBhcmFtIFtjb21taXRdIGlmIHRydWUsIGEgaGlzdG9yeSByZWNvcmQgd2lsbCBiZSBjcmVhdGUgYWZ0ZXIgcmVzdW1pbmdcbiAgICovXG4gIHJlc3VtZTogKGNvbW1pdD86IGJvb2xlYW4pID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBBIHN1Z2FyIGZvciBhdXRvIHBhdXNlIGFuZCBhdXRvIHJlc3VtaW5nIHdpdGhpbiBhIGZ1bmN0aW9uIHNjb3BlXG4gICAqXG4gICAqIEBwYXJhbSBmblxuICAgKi9cbiAgYmF0Y2g6IChmbjogKGNhbmNlbDogRm4pID0+IHZvaWQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDbGVhciB0aGUgZGF0YSBhbmQgc3RvcCB0aGUgd2F0Y2hcbiAgICovXG4gIGRpc3Bvc2U6ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIFRyYWNrIHRoZSBjaGFuZ2UgaGlzdG9yeSBvZiBhIHJlZiwgYWxzbyBwcm92aWRlcyB1bmRvIGFuZCByZWRvIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlUmVmSGlzdG9yeVxuICogQHBhcmFtIHNvdXJjZVxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VSZWZIaXN0b3J5PFJhdywgU2VyaWFsaXplZCA9IFJhdz4oc291cmNlOiBSZWY8UmF3Piwgb3B0aW9ucz86IFVzZVJlZkhpc3RvcnlPcHRpb25zPFJhdywgU2VyaWFsaXplZD4pOiBVc2VSZWZIaXN0b3J5UmV0dXJuPFJhdywgU2VyaWFsaXplZD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VEZWJvdW5jZWRSZWZIaXN0b3J5L2luZGV4LmQudHNcbi8qKlxuICogU2hvcnRoYW5kIGZvciBbdXNlUmVmSGlzdG9yeV0oaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVJlZkhpc3RvcnkpIHdpdGggZGVib3VuY2UgZmlsdGVyLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZURlYm91bmNlZFJlZkhpc3RvcnlcbiAqIEBwYXJhbSBzb3VyY2VcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRGVib3VuY2VkUmVmSGlzdG9yeTxSYXcsIFNlcmlhbGl6ZWQgPSBSYXc+KHNvdXJjZTogUmVmPFJhdz4sIG9wdGlvbnM/OiBPbWl0PFVzZVJlZkhpc3RvcnlPcHRpb25zPFJhdywgU2VyaWFsaXplZD4sICdldmVudEZpbHRlcic+ICYge1xuICBkZWJvdW5jZT86IE1heWJlUmVmT3JHZXR0ZXI8bnVtYmVyPjtcbn0pOiBVc2VSZWZIaXN0b3J5UmV0dXJuPFJhdywgU2VyaWFsaXplZD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VEZXZpY2VNb3Rpb24vaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZURldmljZU1vdGlvbk9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3csIENvbmZpZ3VyYWJsZUV2ZW50RmlsdGVyIHtcbiAgLyoqXG4gICAqIFJlcXVlc3QgZm9yIHBlcm1pc3Npb25zIGltbWVkaWF0ZWx5IGlmIGl0J3Mgbm90IGdyYW50ZWQsXG4gICAqIG90aGVyd2lzZSBsYWJlbCBhbmQgZGV2aWNlSWRzIGNvdWxkIGJlIGVtcHR5XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXF1ZXN0UGVybWlzc2lvbnM/OiBib29sZWFuO1xufVxuLyoqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgVXNlRGV2aWNlTW90aW9uT3B0aW9uc30gaW5zdGVhZCAqL1xudHlwZSBEZXZpY2VNb3Rpb25PcHRpb25zID0gVXNlRGV2aWNlTW90aW9uT3B0aW9ucztcbmludGVyZmFjZSBVc2VEZXZpY2VNb3Rpb25SZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIGFjY2VsZXJhdGlvbjogUmVmPERldmljZU1vdGlvbkV2ZW50QWNjZWxlcmF0aW9uIHwgbnVsbD47XG4gIGFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHk6IFJlZjxEZXZpY2VNb3Rpb25FdmVudEFjY2VsZXJhdGlvbiB8IG51bGw+O1xuICByb3RhdGlvblJhdGU6IFJlZjxEZXZpY2VNb3Rpb25FdmVudFJvdGF0aW9uUmF0ZSB8IG51bGw+O1xuICBpbnRlcnZhbDogU2hhbGxvd1JlZjxudW1iZXI+O1xuICByZXF1aXJlUGVybWlzc2lvbnM6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICBlbnN1cmVQZXJtaXNzaW9uczogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcGVybWlzc2lvbkdyYW50ZWQ6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG59XG4vKipcbiAqIFJlYWN0aXZlIERldmljZU1vdGlvbkV2ZW50LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZURldmljZU1vdGlvblxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VEZXZpY2VNb3Rpb24ob3B0aW9ucz86IFVzZURldmljZU1vdGlvbk9wdGlvbnMpOiBVc2VEZXZpY2VNb3Rpb25SZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VEZXZpY2VPcmllbnRhdGlvbi9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlRGV2aWNlT3JpZW50YXRpb25PcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHt9XG5pbnRlcmZhY2UgVXNlRGV2aWNlT3JpZW50YXRpb25SZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIGlzQWJzb2x1dGU6IFNoYWxsb3dSZWY8Ym9vbGVhbiwgYm9vbGVhbj47XG4gIGFscGhhOiBSZWY8bnVtYmVyIHwgbnVsbCwgbnVtYmVyIHwgbnVsbD47XG4gIGJldGE6IFJlZjxudW1iZXIgfCBudWxsLCBudW1iZXIgfCBudWxsPjtcbiAgZ2FtbWE6IFJlZjxudW1iZXIgfCBudWxsLCBudW1iZXIgfCBudWxsPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgRGV2aWNlT3JpZW50YXRpb25FdmVudC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VEZXZpY2VPcmllbnRhdGlvblxuICogQHBhcmFtIG9wdGlvbnNcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZURldmljZU9yaWVudGF0aW9uKG9wdGlvbnM/OiBVc2VEZXZpY2VPcmllbnRhdGlvbk9wdGlvbnMpOiBVc2VEZXZpY2VPcmllbnRhdGlvblJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZURldmljZVBpeGVsUmF0aW8vaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZURldmljZVBpeGVsUmF0aW9PcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHt9XG5pbnRlcmZhY2UgVXNlRGV2aWNlUGl4ZWxSYXRpb1JldHVybiB7XG4gIHBpeGVsUmF0aW86IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgc3RvcDogV2F0Y2hTdG9wSGFuZGxlO1xufVxuLyoqXG4gKiBSZWFjdGl2ZWx5IHRyYWNrIGB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb2AuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRGV2aWNlUGl4ZWxSYXRpb1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRGV2aWNlUGl4ZWxSYXRpbyhvcHRpb25zPzogVXNlRGV2aWNlUGl4ZWxSYXRpb09wdGlvbnMpOiBVc2VEZXZpY2VQaXhlbFJhdGlvUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlRGV2aWNlc0xpc3QvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZURldmljZXNMaXN0T3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZU5hdmlnYXRvciB7XG4gIG9uVXBkYXRlZD86IChkZXZpY2VzOiBNZWRpYURldmljZUluZm9bXSkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJlcXVlc3QgZm9yIHBlcm1pc3Npb25zIGltbWVkaWF0ZWx5IGlmIGl0J3Mgbm90IGdyYW50ZWQsXG4gICAqIG90aGVyd2lzZSBsYWJlbCBhbmQgZGV2aWNlSWRzIGNvdWxkIGJlIGVtcHR5XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXF1ZXN0UGVybWlzc2lvbnM/OiBib29sZWFuO1xuICAvKipcbiAgICogUmVxdWVzdCBmb3IgdHlwZXMgb2YgbWVkaWEgcGVybWlzc2lvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgeyBhdWRpbzogdHJ1ZSwgdmlkZW86IHRydWUgfVxuICAgKi9cbiAgY29uc3RyYWludHM/OiBNZWRpYVN0cmVhbUNvbnN0cmFpbnRzO1xufVxuaW50ZXJmYWNlIFVzZURldmljZXNMaXN0UmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICAvKipcbiAgICogQWxsIGRldmljZXNcbiAgICovXG4gIGRldmljZXM6IFJlZjxNZWRpYURldmljZUluZm9bXT47XG4gIHZpZGVvSW5wdXRzOiBDb21wdXRlZFJlZjxNZWRpYURldmljZUluZm9bXT47XG4gIGF1ZGlvSW5wdXRzOiBDb21wdXRlZFJlZjxNZWRpYURldmljZUluZm9bXT47XG4gIGF1ZGlvT3V0cHV0czogQ29tcHV0ZWRSZWY8TWVkaWFEZXZpY2VJbmZvW10+O1xuICBwZXJtaXNzaW9uR3JhbnRlZDogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgZW5zdXJlUGVybWlzc2lvbnM6ICgpID0+IFByb21pc2U8Ym9vbGVhbj47XG59XG4vKipcbiAqIFJlYWN0aXZlIGBlbnVtZXJhdGVEZXZpY2VzYCBsaXN0aW5nIGF2YWlsYWJsZSBpbnB1dC9vdXRwdXQgZGV2aWNlc1xuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZURldmljZXNMaXN0XG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZURldmljZXNMaXN0KG9wdGlvbnM/OiBVc2VEZXZpY2VzTGlzdE9wdGlvbnMpOiBVc2VEZXZpY2VzTGlzdFJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZURpc3BsYXlNZWRpYS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlRGlzcGxheU1lZGlhT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZU5hdmlnYXRvciB7XG4gIC8qKlxuICAgKiBJZiB0aGUgc3RyZWFtIGlzIGVuYWJsZWRcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGVuYWJsZWQ/OiBNYXliZVJlZjxib29sZWFuPjtcbiAgLyoqXG4gICAqIElmIHRoZSBzdHJlYW0gdmlkZW8gbWVkaWEgY29uc3RyYWludHNcbiAgICovXG4gIHZpZGVvPzogYm9vbGVhbiB8IE1lZGlhVHJhY2tDb25zdHJhaW50cyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIElmIHRoZSBzdHJlYW0gYXVkaW8gbWVkaWEgY29uc3RyYWludHNcbiAgICovXG4gIGF1ZGlvPzogYm9vbGVhbiB8IE1lZGlhVHJhY2tDb25zdHJhaW50cyB8IHVuZGVmaW5lZDtcbn1cbmludGVyZmFjZSBVc2VEaXNwbGF5TWVkaWFSZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIHN0cmVhbTogU2hhbGxvd1JlZjxNZWRpYVN0cmVhbSB8IHVuZGVmaW5lZD47XG4gIHN0YXJ0OiAoKSA9PiBQcm9taXNlPE1lZGlhU3RyZWFtIHwgdW5kZWZpbmVkPjtcbiAgc3RvcDogKCkgPT4gdm9pZDtcbiAgZW5hYmxlZDogU2hhbGxvd1JlZjxib29sZWFuPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgYG1lZGlhRGV2aWNlcy5nZXREaXNwbGF5TWVkaWFgIHN0cmVhbWluZ1xuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZURpc3BsYXlNZWRpYVxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VEaXNwbGF5TWVkaWEob3B0aW9ucz86IFVzZURpc3BsYXlNZWRpYU9wdGlvbnMpOiBVc2VEaXNwbGF5TWVkaWFSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VEb2N1bWVudFZpc2liaWxpdHkvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZURvY3VtZW50VmlzaWJpbGl0eU9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVEb2N1bWVudCB7fVxudHlwZSBVc2VEb2N1bWVudFZpc2liaWxpdHlSZXR1cm4gPSBTaGFsbG93UmVmPERvY3VtZW50VmlzaWJpbGl0eVN0YXRlPjtcbi8qKlxuICogUmVhY3RpdmVseSB0cmFjayBgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlYC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VEb2N1bWVudFZpc2liaWxpdHlcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZURvY3VtZW50VmlzaWJpbGl0eShvcHRpb25zPzogVXNlRG9jdW1lbnRWaXNpYmlsaXR5T3B0aW9ucyk6IFVzZURvY3VtZW50VmlzaWJpbGl0eVJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZURyYWdnYWJsZS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlRHJhZ2dhYmxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPbmx5IHN0YXJ0IHRoZSBkcmFnZ2luZyB3aGVuIGNsaWNrIG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBleGFjdD86IE1heWJlUmVmT3JHZXR0ZXI8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBQcmV2ZW50IGV2ZW50cyBkZWZhdWx0c1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHJldmVudERlZmF1bHQ/OiBNYXliZVJlZk9yR2V0dGVyPGJvb2xlYW4+O1xuICAvKipcbiAgICogUHJldmVudCBldmVudHMgcHJvcGFnYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHN0b3BQcm9wYWdhdGlvbj86IE1heWJlUmVmT3JHZXR0ZXI8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBXaGV0aGVyIGRpc3BhdGNoIGV2ZW50cyBpbiBjYXB0dXJpbmcgcGhhc2VcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgY2FwdHVyZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFbGVtZW50IHRvIGF0dGFjaCBgcG9pbnRlcm1vdmVgIGFuZCBgcG9pbnRlcnVwYCBldmVudHMgdG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IHdpbmRvd1xuICAgKi9cbiAgZHJhZ2dpbmdFbGVtZW50PzogTWF5YmVSZWZPckdldHRlcjxIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQgfCBXaW5kb3cgfCBEb2N1bWVudCB8IG51bGwgfCB1bmRlZmluZWQ+O1xuICAvKipcbiAgICogRWxlbWVudCBmb3IgY2FsY3VsYXRpbmcgYm91bmRzIChJZiBub3Qgc2V0LCBpdCB3aWxsIHVzZSB0aGUgZXZlbnQncyB0YXJnZXQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIGNvbnRhaW5lckVsZW1lbnQ/OiBNYXliZVJlZk9yR2V0dGVyPEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQ+O1xuICAvKipcbiAgICogSGFuZGxlIHRoYXQgdHJpZ2dlcnMgdGhlIGRyYWcgZXZlbnRcbiAgICpcbiAgICogQGRlZmF1bHQgdGFyZ2V0XG4gICAqL1xuICBoYW5kbGU/OiBNYXliZVJlZk9yR2V0dGVyPEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQ+O1xuICAvKipcbiAgICogUG9pbnRlciB0eXBlcyB0aGF0IGxpc3RlbiB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgWydtb3VzZScsICd0b3VjaCcsICdwZW4nXVxuICAgKi9cbiAgcG9pbnRlclR5cGVzPzogUG9pbnRlclR5cGVbXTtcbiAgLyoqXG4gICAqIEluaXRpYWwgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHsgeDogMCwgeTogMCB9XG4gICAqL1xuICBpbml0aWFsVmFsdWU/OiBNYXliZVJlZk9yR2V0dGVyPFBvc2l0aW9uPjtcbiAgLyoqXG4gICAqIENhbGxiYWNrIHdoZW4gdGhlIGRyYWdnaW5nIHN0YXJ0cy4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCBkcmFnZ2luZy5cbiAgICovXG4gIG9uU3RhcnQ/OiAocG9zaXRpb246IFBvc2l0aW9uLCBldmVudDogUG9pbnRlckV2ZW50KSA9PiB2b2lkIHwgZmFsc2U7XG4gIC8qKlxuICAgKiBDYWxsYmFjayBkdXJpbmcgZHJhZ2dpbmcuXG4gICAqL1xuICBvbk1vdmU/OiAocG9zaXRpb246IFBvc2l0aW9uLCBldmVudDogUG9pbnRlckV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGJhY2sgd2hlbiBkcmFnZ2luZyBlbmQuXG4gICAqL1xuICBvbkVuZD86IChwb3NpdGlvbjogUG9zaXRpb24sIGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBBeGlzIHRvIGRyYWcgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0ICdib3RoJ1xuICAgKi9cbiAgYXhpcz86ICd4JyB8ICd5JyB8ICdib3RoJztcbiAgLyoqXG4gICAqIERpc2FibGVkIGRyYWcgYW5kIGRyb3AuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZD86IE1heWJlUmVmT3JHZXR0ZXI8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBNb3VzZSBidXR0b25zIHRoYXQgYXJlIGFsbG93ZWQgdG8gdHJpZ2dlciBkcmFnIGV2ZW50cy5cbiAgICpcbiAgICogLSBgMGA6IE1haW4gYnV0dG9uLCB1c3VhbGx5IHRoZSBsZWZ0IGJ1dHRvbiBvciB0aGUgdW4taW5pdGlhbGl6ZWQgc3RhdGVcbiAgICogLSBgMWA6IEF1eGlsaWFyeSBidXR0b24sIHVzdWFsbHkgdGhlIHdoZWVsIGJ1dHRvbiBvciB0aGUgbWlkZGxlIGJ1dHRvbiAoaWYgcHJlc2VudClcbiAgICogLSBgMmA6IFNlY29uZGFyeSBidXR0b24sIHVzdWFsbHkgdGhlIHJpZ2h0IGJ1dHRvblxuICAgKiAtIGAzYDogRm91cnRoIGJ1dHRvbiwgdHlwaWNhbGx5IHRoZSBCcm93c2VyIEJhY2sgYnV0dG9uXG4gICAqIC0gYDRgOiBGaWZ0aCBidXR0b24sIHR5cGljYWxseSB0aGUgQnJvd3NlciBGb3J3YXJkIGJ1dHRvblxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Nb3VzZUV2ZW50L2J1dHRvbiN2YWx1ZVxuICAgKiBAZGVmYXVsdCBbMF1cbiAgICovXG4gIGJ1dHRvbnM/OiBNYXliZVJlZk9yR2V0dGVyPG51bWJlcltdPjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVzdHJpY3QgZHJhZ2dpbmcgd2l0aGluIHRoZSB2aXNpYmxlIGFyZWEgb2YgdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogSWYgZW5hYmxlZCwgdGhlIGRyYWdnYWJsZSBlbGVtZW50IHdpbGwgbm90IGxlYXZlIHRoZSB2aXNpYmxlIGFyZWEgb2YgaXRzIGNvbnRhaW5lcixcbiAgICogZW5zdXJpbmcgaXQgcmVtYWlucyB3aXRoaW4gdGhlIHZpZXdwb3J0IG9mIHRoZSBjb250YWluZXIgZHVyaW5nIHRoZSBkcmFnLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVzdHJpY3RJblZpZXc/OiBNYXliZVJlZk9yR2V0dGVyPGJvb2xlYW4+O1xuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgYXV0by1zY3JvbGwgd2hlbiBkcmFnZ2luZyBuZWFyIHRoZSBlZGdlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9TY3JvbGw/OiBNYXliZVJlZk9yR2V0dGVyPGJvb2xlYW4gfCB7XG4gICAgLyoqXG4gICAgICogU3BlZWQgb2YgYXV0by1zY3JvbGwuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgc3BlZWQ/OiBNYXliZVJlZk9yR2V0dGVyPG51bWJlciB8IFBvc2l0aW9uPjtcbiAgICAvKipcbiAgICAgKiBNYXJnaW4gZnJvbSB0aGUgZWRnZSB0byB0cmlnZ2VyIGF1dG8tc2Nyb2xsLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgMzBcbiAgICAgKi9cbiAgICBtYXJnaW4/OiBNYXliZVJlZk9yR2V0dGVyPG51bWJlciB8IFBvc2l0aW9uPjtcbiAgICAvKipcbiAgICAgKiBEaXJlY3Rpb24gb2YgYXV0by1zY3JvbGwuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnYm90aCdcbiAgICAgKi9cbiAgICBkaXJlY3Rpb24/OiAneCcgfCAneScgfCAnYm90aCc7XG4gIH0+O1xufVxuaW50ZXJmYWNlIFVzZURyYWdnYWJsZVJldHVybiB7XG4gIHg6IFJlZjxudW1iZXI+O1xuICB5OiBSZWY8bnVtYmVyPjtcbiAgcG9zaXRpb246IFJlZjxQb3NpdGlvbj47XG4gIGlzRHJhZ2dpbmc6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICBzdHlsZTogQ29tcHV0ZWRSZWY8c3RyaW5nPjtcbn1cbi8qKlxuICogTWFrZSBlbGVtZW50cyBkcmFnZ2FibGUuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRHJhZ2dhYmxlXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZURyYWdnYWJsZSh0YXJnZXQ6IE1heWJlUmVmT3JHZXR0ZXI8SFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZD4sIG9wdGlvbnM/OiBVc2VEcmFnZ2FibGVPcHRpb25zKTogVXNlRHJhZ2dhYmxlUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlRHJvcFpvbmUvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZURyb3Bab25lUmV0dXJuIHtcbiAgZmlsZXM6IFNoYWxsb3dSZWY8RmlsZVtdIHwgbnVsbD47XG4gIGlzT3ZlckRyb3Bab25lOiBTaGFsbG93UmVmPGJvb2xlYW4+O1xufVxuaW50ZXJmYWNlIFVzZURyb3Bab25lT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbGxvd2VkIGRhdGEgdHlwZXMsIGlmIG5vdCBzZXQsIGFsbCBkYXRhIHR5cGVzIGFyZSBhbGxvd2VkLlxuICAgKiBBbHNvIGNhbiBiZSBhIGZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBkYXRhIHR5cGVzLlxuICAgKi9cbiAgZGF0YVR5cGVzPzogTWF5YmVSZWY8cmVhZG9ubHkgc3RyaW5nW10+IHwgKCh0eXBlczogcmVhZG9ubHkgc3RyaW5nW10pID0+IGJvb2xlYW4pO1xuICAvKipcbiAgICogU2ltaWxhciB0byBkYXRhVHlwZXMsIGJ1dCBleHBvc2VzIHRoZSBEYXRhVHJhbnNmZXJJdGVtTGlzdCBmb3IgY3VzdG9tIHZhbGlkYXRpb24uXG4gICAqIElmIHByb3ZpZGVkLCB0aGlzIGZ1bmN0aW9uIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBkYXRhVHlwZXMuXG4gICAqL1xuICBjaGVja1ZhbGlkaXR5PzogKGl0ZW1zOiBEYXRhVHJhbnNmZXJJdGVtTGlzdCkgPT4gYm9vbGVhbjtcbiAgb25Ecm9wPzogKGZpbGVzOiBGaWxlW10gfCBudWxsLCBldmVudDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICBvbkVudGVyPzogKGZpbGVzOiBGaWxlW10gfCBudWxsLCBldmVudDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICBvbkxlYXZlPzogKGZpbGVzOiBGaWxlW10gfCBudWxsLCBldmVudDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICBvbk92ZXI/OiAoZmlsZXM6IEZpbGVbXSB8IG51bGwsIGV2ZW50OiBEcmFnRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBBbGxvdyBtdWx0aXBsZSBmaWxlcyB0byBiZSBkcm9wcGVkLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICAvKipcbiAgICogUHJldmVudCBkZWZhdWx0IGJlaGF2aW9yIGZvciB1bmhhbmRsZWQgZXZlbnRzLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICovXG4gIHByZXZlbnREZWZhdWx0Rm9yVW5oYW5kbGVkPzogYm9vbGVhbjtcbn1cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRHJvcFpvbmUodGFyZ2V0OiBNYXliZVJlZk9yR2V0dGVyPEhUTUxFbGVtZW50IHwgRG9jdW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkPiwgb3B0aW9ucz86IFVzZURyb3Bab25lT3B0aW9ucyB8IFVzZURyb3Bab25lT3B0aW9uc1snb25Ecm9wJ10pOiBVc2VEcm9wWm9uZVJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUVsZW1lbnRCb3VuZGluZy9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlRWxlbWVudEJvdW5kaW5nT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBSZXNldCB2YWx1ZXMgdG8gMCBvbiBjb21wb25lbnQgdW5tb3VudGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlc2V0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIExpc3RlbiB0byB3aW5kb3cgcmVzaXplIGV2ZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHdpbmRvd1Jlc2l6ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gd2luZG93IHNjcm9sbCBldmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICB3aW5kb3dTY3JvbGw/OiBib29sZWFuO1xuICAvKipcbiAgICogSW1tZWRpYXRlbHkgY2FsbCB1cGRhdGUgb24gY29tcG9uZW50IG1vdW50ZWRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaW1tZWRpYXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRpbWluZyB0byByZWNhbGN1bGF0ZSB0aGUgYm91bmRpbmcgYm94XG4gICAqXG4gICAqIFNldHRpbmcgdG8gYG5leHQtZnJhbWVgIGNhbiBiZSB1c2VmdWwgd2hlbiB1c2luZyB0aGlzIHRvZ2V0aGVyIHdpdGggc29tZXRoaW5nIGxpa2Uge0BsaW5rIHVzZUJyZWFrcG9pbnRzfVxuICAgKiBhbmQgdGhlcmVmb3JlIHRoZSBsYXlvdXQgKHdoaWNoIGluZmx1ZW5jZXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgb2JzZXJ2ZWQgZWxlbWVudCkgaXMgbm90IHVwZGF0ZWQgb24gdGhlIGN1cnJlbnQgdGljay5cbiAgICpcbiAgICogQGRlZmF1bHQgJ3N5bmMnXG4gICAqL1xuICB1cGRhdGVUaW1pbmc/OiAnc3luYycgfCAnbmV4dC1mcmFtZSc7XG59XG5pbnRlcmZhY2UgVXNlRWxlbWVudEJvdW5kaW5nUmV0dXJuIHtcbiAgaGVpZ2h0OiBTaGFsbG93UmVmPG51bWJlcj47XG4gIGJvdHRvbTogU2hhbGxvd1JlZjxudW1iZXI+O1xuICBsZWZ0OiBTaGFsbG93UmVmPG51bWJlcj47XG4gIHJpZ2h0OiBTaGFsbG93UmVmPG51bWJlcj47XG4gIHRvcDogU2hhbGxvd1JlZjxudW1iZXI+O1xuICB3aWR0aDogU2hhbGxvd1JlZjxudW1iZXI+O1xuICB4OiBTaGFsbG93UmVmPG51bWJlcj47XG4gIHk6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgdXBkYXRlOiAoKSA9PiB2b2lkO1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBib3VuZGluZyBib3ggb2YgYW4gSFRNTCBlbGVtZW50LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUVsZW1lbnRCb3VuZGluZ1xuICogQHBhcmFtIHRhcmdldFxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUVsZW1lbnRCb3VuZGluZyh0YXJnZXQ6IE1heWJlQ29tcHV0ZWRFbGVtZW50UmVmLCBvcHRpb25zPzogVXNlRWxlbWVudEJvdW5kaW5nT3B0aW9ucyk6IFVzZUVsZW1lbnRCb3VuZGluZ1JldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUVsZW1lbnRCeVBvaW50L2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VFbGVtZW50QnlQb2ludE9wdGlvbnM8TXVsdGlwbGUgZXh0ZW5kcyBib29sZWFuID0gZmFsc2U+IGV4dGVuZHMgQ29uZmlndXJhYmxlRG9jdW1lbnQsIENvbmZpZ3VyYWJsZVNjaGVkdWxlciB7XG4gIHg6IE1heWJlUmVmT3JHZXR0ZXI8bnVtYmVyPjtcbiAgeTogTWF5YmVSZWZPckdldHRlcjxudW1iZXI+O1xuICBtdWx0aXBsZT86IE1heWJlUmVmT3JHZXR0ZXI8TXVsdGlwbGU+O1xuICAvKiogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBgc2NoZWR1bGVyYCBvcHRpb24gaW5zdGVhZCAqL1xuICBpbW1lZGlhdGU/OiBib29sZWFuO1xuICAvKiogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBgc2NoZWR1bGVyYCBvcHRpb24gaW5zdGVhZCAqL1xuICBpbnRlcnZhbD86ICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnIHwgbnVtYmVyO1xufVxuaW50ZXJmYWNlIFVzZUVsZW1lbnRCeVBvaW50UmV0dXJuPE11bHRpcGxlIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlPiBleHRlbmRzIFN1cHBvcnRhYmxlLCBQYXVzYWJsZSB7XG4gIGVsZW1lbnQ6IFNoYWxsb3dSZWY8TXVsdGlwbGUgZXh0ZW5kcyB0cnVlID8gSFRNTEVsZW1lbnRbXSA6IEhUTUxFbGVtZW50IHwgbnVsbD47XG59XG4vKipcbiAqIFJlYWN0aXZlIGVsZW1lbnQgYnkgcG9pbnQuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRWxlbWVudEJ5UG9pbnRcbiAqIEBwYXJhbSBvcHRpb25zIC0gVXNlRWxlbWVudEJ5UG9pbnRPcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRWxlbWVudEJ5UG9pbnQ8TSBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZT4ob3B0aW9uczogVXNlRWxlbWVudEJ5UG9pbnRPcHRpb25zPE0+KTogVXNlRWxlbWVudEJ5UG9pbnRSZXR1cm48TT47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VFbGVtZW50SG92ZXIvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUVsZW1lbnRIb3Zlck9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge1xuICBkZWxheUVudGVyPzogbnVtYmVyO1xuICBkZWxheUxlYXZlPzogbnVtYmVyO1xuICB0cmlnZ2VyT25SZW1vdmFsPzogYm9vbGVhbjtcbn1cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRWxlbWVudEhvdmVyKGVsOiBNYXliZVJlZk9yR2V0dGVyPEV2ZW50VGFyZ2V0IHwgbnVsbCB8IHVuZGVmaW5lZD4sIG9wdGlvbnM/OiBVc2VFbGVtZW50SG92ZXJPcHRpb25zKTogU2hhbGxvd1JlZjxib29sZWFuPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVJlc2l6ZU9ic2VydmVyL2luZGV4LmQudHNcbi8qKlxuICogQGRlcHJlY2F0ZWQgVGhpcyBpbnRlcmZhY2UgaXMgbm93IGF2YWlsYWJsZSBpbiB0aGUgRE9NIGxpYi5cbiAqIFVzZSB0aGUgZ2xvYmFsIHtAbGluayBnbG9iYWxUaGlzLlJlc2l6ZU9ic2VydmVyU2l6ZX0gaW5zdGVhZC5cbiAqL1xuaW50ZXJmYWNlIFJlc2l6ZU9ic2VydmVyU2l6ZSB7XG4gIHJlYWRvbmx5IGlubGluZVNpemU6IG51bWJlcjtcbiAgcmVhZG9ubHkgYmxvY2tTaXplOiBudW1iZXI7XG59XG4vKipcbiAqIEBkZXByZWNhdGVkIFRoaXMgaW50ZXJmYWNlIGlzIG5vdyBhdmFpbGFibGUgaW4gdGhlIERPTSBsaWIuXG4gKiBVc2UgdGhlIGdsb2JhbCB7QGxpbmsgZ2xvYmFsVGhpcy5SZXNpemVPYnNlcnZlckVudHJ5fSBpbnN0ZWFkLlxuICovXG5pbnRlcmZhY2UgUmVzaXplT2JzZXJ2ZXJFbnRyeSB7XG4gIHJlYWRvbmx5IHRhcmdldDogRWxlbWVudDtcbiAgcmVhZG9ubHkgY29udGVudFJlY3Q6IERPTVJlY3RSZWFkT25seTtcbiAgcmVhZG9ubHkgYm9yZGVyQm94U2l6ZTogUmVhZG9ubHlBcnJheTxSZXNpemVPYnNlcnZlclNpemU+O1xuICByZWFkb25seSBjb250ZW50Qm94U2l6ZTogUmVhZG9ubHlBcnJheTxSZXNpemVPYnNlcnZlclNpemU+O1xuICByZWFkb25seSBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplOiBSZWFkb25seUFycmF5PFJlc2l6ZU9ic2VydmVyU2l6ZT47XG59XG4vKipcbiAqIEBkZXByZWNhdGVkIFRoaXMgaW50ZXJmYWNlIGlzIG5vdyBhdmFpbGFibGUgaW4gdGhlIERPTSBsaWIuXG4gKiBVc2UgdGhlIGdsb2JhbCB7QGxpbmsgZ2xvYmFsVGhpcy5SZXNpemVPYnNlcnZlckNhbGxiYWNrfSBpbnN0ZWFkLlxuICovXG50eXBlIFJlc2l6ZU9ic2VydmVyQ2FsbGJhY2sgPSAoZW50cmllczogUmVhZG9ubHlBcnJheTxSZXNpemVPYnNlcnZlckVudHJ5Piwgb2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyKSA9PiB2b2lkO1xuaW50ZXJmYWNlIFVzZVJlc2l6ZU9ic2VydmVyT3B0aW9ucyBleHRlbmRzIFJlc2l6ZU9ic2VydmVyT3B0aW9ucywgQ29uZmlndXJhYmxlV2luZG93IHt9XG5pbnRlcmZhY2UgVXNlUmVzaXplT2JzZXJ2ZXJSZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIFJlcG9ydHMgY2hhbmdlcyB0byB0aGUgZGltZW5zaW9ucyBvZiBhbiBFbGVtZW50J3MgY29udGVudCBvciB0aGUgYm9yZGVyLWJveFxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVJlc2l6ZU9ic2VydmVyXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0gY2FsbGJhY2tcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlUmVzaXplT2JzZXJ2ZXIodGFyZ2V0OiBNYXliZUNvbXB1dGVkRWxlbWVudFJlZiB8IE1heWJlQ29tcHV0ZWRFbGVtZW50UmVmW10gfCBNYXliZVJlZk9yR2V0dGVyPE1heWJlRWxlbWVudFtdPiwgY2FsbGJhY2s6IGdsb2JhbFRoaXMuUmVzaXplT2JzZXJ2ZXJDYWxsYmFjaywgb3B0aW9ucz86IFVzZVJlc2l6ZU9ic2VydmVyT3B0aW9ucyk6IFVzZVJlc2l6ZU9ic2VydmVyUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlRWxlbWVudFNpemUvaW5kZXguZC50c1xuaW50ZXJmYWNlIEVsZW1lbnRTaXplIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5pbnRlcmZhY2UgVXNlRWxlbWVudFNpemVPcHRpb25zIGV4dGVuZHMgVXNlUmVzaXplT2JzZXJ2ZXJPcHRpb25zIHt9XG5pbnRlcmZhY2UgVXNlRWxlbWVudFNpemVSZXR1cm4ge1xuICB3aWR0aDogU2hhbGxvd1JlZjxudW1iZXI+O1xuICBoZWlnaHQ6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgc3RvcDogKCkgPT4gdm9pZDtcbn1cbi8qKlxuICogUmVhY3RpdmUgc2l6ZSBvZiBhbiBIVE1MIGVsZW1lbnQuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRWxlbWVudFNpemVcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VFbGVtZW50U2l6ZSh0YXJnZXQ6IE1heWJlQ29tcHV0ZWRFbGVtZW50UmVmLCBpbml0aWFsU2l6ZT86IEVsZW1lbnRTaXplLCBvcHRpb25zPzogVXNlRWxlbWVudFNpemVPcHRpb25zKTogVXNlRWxlbWVudFNpemVSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VJbnRlcnNlY3Rpb25PYnNlcnZlci9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHtcbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlciBpbW1lZGlhdGVseSBvbiBjcmVhdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBpbW1lZGlhdGU/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIEVsZW1lbnQgb3IgRG9jdW1lbnQgd2hvc2UgYm91bmRzIGFyZSB1c2VkIGFzIHRoZSBib3VuZGluZyBib3ggd2hlbiB0ZXN0aW5nIGZvciBpbnRlcnNlY3Rpb24uXG4gICAqL1xuICByb290PzogTWF5YmVDb21wdXRlZEVsZW1lbnRSZWYgfCBEb2N1bWVudDtcbiAgLyoqXG4gICAqIEEgc3RyaW5nIHdoaWNoIHNwZWNpZmllcyBhIHNldCBvZiBvZmZzZXRzIHRvIGFkZCB0byB0aGUgcm9vdCdzIGJvdW5kaW5nX2JveCB3aGVuIGNhbGN1bGF0aW5nIGludGVyc2VjdGlvbnMuXG4gICAqL1xuICByb290TWFyZ2luPzogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+O1xuICAvKipcbiAgICogRWl0aGVyIGEgc2luZ2xlIG51bWJlciBvciBhbiBhcnJheSBvZiBudW1iZXJzIGJldHdlZW4gMC4wIGFuZCAxLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICB0aHJlc2hvbGQ/OiBudW1iZXIgfCBudW1iZXJbXTtcbn1cbmludGVyZmFjZSBVc2VJbnRlcnNlY3Rpb25PYnNlcnZlclJldHVybiBleHRlbmRzIFN1cHBvcnRhYmxlLCBQYXVzYWJsZSB7XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIERldGVjdHMgdGhhdCBhIHRhcmdldCBlbGVtZW50J3MgdmlzaWJpbGl0eS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VJbnRlcnNlY3Rpb25PYnNlcnZlclxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIGNhbGxiYWNrXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUludGVyc2VjdGlvbk9ic2VydmVyKHRhcmdldDogTWF5YmVDb21wdXRlZEVsZW1lbnRSZWYgfCBNYXliZVJlZk9yR2V0dGVyPE1heWJlRWxlbWVudFtdPiB8IE1heWJlQ29tcHV0ZWRFbGVtZW50UmVmW10sIGNhbGxiYWNrOiBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLCBvcHRpb25zPzogVXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJPcHRpb25zKTogVXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VFbGVtZW50VmlzaWJpbGl0eS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlRWxlbWVudFZpc2liaWxpdHlPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93LCBQaWNrPFVzZUludGVyc2VjdGlvbk9ic2VydmVyT3B0aW9ucywgJ3Jvb3RNYXJnaW4nIHwgJ3RocmVzaG9sZCc+IHtcbiAgLyoqXG4gICAqIEluaXRpYWwgdmFsdWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbml0aWFsVmFsdWU/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhhdCBpcyB1c2VkIGFzIHRoZSB2aWV3cG9ydCBmb3IgY2hlY2tpbmcgdmlzaWJpbGl0eSBvZiB0aGUgdGFyZ2V0LlxuICAgKi9cbiAgc2Nyb2xsVGFyZ2V0PzogVXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJPcHRpb25zWydyb290J107XG4gIC8qKlxuICAgKiBTdG9wIHRyYWNraW5nIHdoZW4gZWxlbWVudCB2aXNpYmlsaXR5IGNoYW5nZXMgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBvbmNlPzogYm9vbGVhbjtcbn1cbnR5cGUgVXNlRWxlbWVudFZpc2liaWxpdHlSZXR1cm4gPSBTaGFsbG93UmVmPGJvb2xlYW4+O1xuLyoqXG4gKiBUcmFja3MgdGhlIHZpc2liaWxpdHkgb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHZpZXdwb3J0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUVsZW1lbnRWaXNpYmlsaXR5XG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRWxlbWVudFZpc2liaWxpdHkoZWxlbWVudDogTWF5YmVDb21wdXRlZEVsZW1lbnRSZWYsIG9wdGlvbnM/OiBVc2VFbGVtZW50VmlzaWJpbGl0eU9wdGlvbnMpOiBVc2VFbGVtZW50VmlzaWJpbGl0eVJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUV2ZW50QnVzL2luZGV4LmQudHNcbnR5cGUgRXZlbnRCdXNMaXN0ZW5lcjxUID0gdW5rbm93biwgUCQxID0gYW55PiA9IChldmVudDogVCwgcGF5bG9hZD86IFAkMSkgPT4gdm9pZDtcbnR5cGUgRXZlbnRCdXNFdmVudHM8VCwgUCQxID0gYW55PiA9IFNldDxFdmVudEJ1c0xpc3RlbmVyPFQsIFAkMT4+O1xuaW50ZXJmYWNlIEV2ZW50QnVzS2V5PFQ+IGV4dGVuZHMgU3ltYm9sIHt9XG50eXBlIEV2ZW50QnVzSWRlbnRpZmllcjxUID0gdW5rbm93bj4gPSBFdmVudEJ1c0tleTxUPiB8IHN0cmluZyB8IG51bWJlcjtcbmludGVyZmFjZSBVc2VFdmVudEJ1c1JldHVybjxULCBQJDE+IHtcbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBhbiBldmVudC4gV2hlbiBjYWxsaW5nIGVtaXQsIHRoZSBsaXN0ZW5lcnMgd2lsbCBleGVjdXRlLlxuICAgKiBAcGFyYW0gbGlzdGVuZXIgd2F0Y2ggbGlzdGVuZXIuXG4gICAqIEByZXR1cm5zIGEgc3RvcCBmdW5jdGlvbiB0byByZW1vdmUgdGhlIGN1cnJlbnQgY2FsbGJhY2suXG4gICAqL1xuICBvbjogKGxpc3RlbmVyOiBFdmVudEJ1c0xpc3RlbmVyPFQsIFAkMT4pID0+IEZuO1xuICAvKipcbiAgICogU2ltaWxhciB0byBgb25gLCBidXQgb25seSBmaXJlcyBvbmNlXG4gICAqIEBwYXJhbSBsaXN0ZW5lciB3YXRjaCBsaXN0ZW5lci5cbiAgICogQHJldHVybnMgYSBzdG9wIGZ1bmN0aW9uIHRvIHJlbW92ZSB0aGUgY3VycmVudCBjYWxsYmFjay5cbiAgICovXG4gIG9uY2U6IChsaXN0ZW5lcjogRXZlbnRCdXNMaXN0ZW5lcjxULCBQJDE+KSA9PiBGbjtcbiAgLyoqXG4gICAqIEVtaXQgYW4gZXZlbnQsIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50IGxpc3RlbmVycyB3aWxsIGV4ZWN1dGUuXG4gICAqIEBwYXJhbSBldmVudCBkYXRhIHNlbnQuXG4gICAqL1xuICBlbWl0OiAoZXZlbnQ/OiBULCBwYXlsb2FkPzogUCQxKSA9PiB2b2lkO1xuICAvKipcbiAgICogUmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIGxpc3RlbmVyLlxuICAgKiBAcGFyYW0gbGlzdGVuZXIgd2F0Y2ggbGlzdGVuZXIuXG4gICAqL1xuICBvZmY6IChsaXN0ZW5lcjogRXZlbnRCdXNMaXN0ZW5lcjxUPikgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENsZWFyIGFsbCBldmVudHNcbiAgICovXG4gIHJlc2V0OiAoKSA9PiB2b2lkO1xufVxuZGVjbGFyZSBmdW5jdGlvbiB1c2VFdmVudEJ1czxUID0gdW5rbm93biwgUCQxID0gYW55PihrZXk6IEV2ZW50QnVzSWRlbnRpZmllcjxUPik6IFVzZUV2ZW50QnVzUmV0dXJuPFQsIFAkMT47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VFdmVudExpc3RlbmVyL2luZGV4LmQudHNcbmludGVyZmFjZSBJbmZlckV2ZW50VGFyZ2V0PEV2ZW50cz4ge1xuICBhZGRFdmVudExpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50cywgZm4/OiBhbnksIG9wdGlvbnM/OiBhbnkpID0+IGFueTtcbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogKGV2ZW50OiBFdmVudHMsIGZuPzogYW55LCBvcHRpb25zPzogYW55KSA9PiBhbnk7XG59XG50eXBlIFdpbmRvd0V2ZW50TmFtZSA9IGtleW9mIFdpbmRvd0V2ZW50TWFwO1xudHlwZSBEb2N1bWVudEV2ZW50TmFtZSA9IGtleW9mIERvY3VtZW50RXZlbnRNYXA7XG50eXBlIFNoYWRvd1Jvb3RFdmVudE5hbWUgPSBrZXlvZiBTaGFkb3dSb290RXZlbnRNYXA7XG5pbnRlcmZhY2UgR2VuZXJhbEV2ZW50TGlzdGVuZXI8RSA9IEV2ZW50PiB7XG4gIChldnQ6IEUpOiB2b2lkO1xufVxuLyoqXG4gKiBSZWdpc3RlciB1c2luZyBhZGRFdmVudExpc3RlbmVyIG9uIG1vdW50ZWQsIGFuZCByZW1vdmVFdmVudExpc3RlbmVyIGF1dG9tYXRpY2FsbHkgb24gdW5tb3VudGVkLlxuICpcbiAqIE92ZXJsb2FkIDE6IE9taXR0ZWQgV2luZG93IHRhcmdldFxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUV2ZW50TGlzdGVuZXJcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VFdmVudExpc3RlbmVyPEUgZXh0ZW5kcyBrZXlvZiBXaW5kb3dFdmVudE1hcD4oZXZlbnQ6IE1heWJlUmVmT3JHZXR0ZXI8QXJyYXlhYmxlPEU+PiwgbGlzdGVuZXI6IE1heWJlUmVmPEFycmF5YWJsZTwodGhpczogV2luZG93LCBldjogV2luZG93RXZlbnRNYXBbRV0pID0+IGFueT4+LCBvcHRpb25zPzogTWF5YmVSZWZPckdldHRlcjxib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnM+KTogRm47XG4vKipcbiAqIFJlZ2lzdGVyIHVzaW5nIGFkZEV2ZW50TGlzdGVuZXIgb24gbW91bnRlZCwgYW5kIHJlbW92ZUV2ZW50TGlzdGVuZXIgYXV0b21hdGljYWxseSBvbiB1bm1vdW50ZWQuXG4gKlxuICogT3ZlcmxvYWQgMjogRXhwbGljaXRseSBXaW5kb3cgdGFyZ2V0XG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRXZlbnRMaXN0ZW5lclxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIGV2ZW50XG4gKiBAcGFyYW0gbGlzdGVuZXJcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRXZlbnRMaXN0ZW5lcjxFIGV4dGVuZHMga2V5b2YgV2luZG93RXZlbnRNYXA+KHRhcmdldDogV2luZG93LCBldmVudDogTWF5YmVSZWZPckdldHRlcjxBcnJheWFibGU8RT4+LCBsaXN0ZW5lcjogTWF5YmVSZWY8QXJyYXlhYmxlPCh0aGlzOiBXaW5kb3csIGV2OiBXaW5kb3dFdmVudE1hcFtFXSkgPT4gYW55Pj4sIG9wdGlvbnM/OiBNYXliZVJlZk9yR2V0dGVyPGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucz4pOiBGbjtcbi8qKlxuICogUmVnaXN0ZXIgdXNpbmcgYWRkRXZlbnRMaXN0ZW5lciBvbiBtb3VudGVkLCBhbmQgcmVtb3ZlRXZlbnRMaXN0ZW5lciBhdXRvbWF0aWNhbGx5IG9uIHVubW91bnRlZC5cbiAqXG4gKiBPdmVybG9hZCAzOiBFeHBsaWNpdGx5IERvY3VtZW50IHRhcmdldFxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUV2ZW50TGlzdGVuZXJcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VFdmVudExpc3RlbmVyPEUgZXh0ZW5kcyBrZXlvZiBEb2N1bWVudEV2ZW50TWFwPih0YXJnZXQ6IERvY3VtZW50LCBldmVudDogTWF5YmVSZWZPckdldHRlcjxBcnJheWFibGU8RT4+LCBsaXN0ZW5lcjogTWF5YmVSZWY8QXJyYXlhYmxlPCh0aGlzOiBEb2N1bWVudCwgZXY6IERvY3VtZW50RXZlbnRNYXBbRV0pID0+IGFueT4+LCBvcHRpb25zPzogTWF5YmVSZWZPckdldHRlcjxib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnM+KTogRm47XG4vKipcbiAqIFJlZ2lzdGVyIHVzaW5nIGFkZEV2ZW50TGlzdGVuZXIgb24gbW91bnRlZCwgYW5kIHJlbW92ZUV2ZW50TGlzdGVuZXIgYXV0b21hdGljYWxseSBvbiB1bm1vdW50ZWQuXG4gKlxuICogT3ZlcmxvYWQgNDogRXhwbGljaXRseSBTaGFkb3dSb290IHRhcmdldFxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUV2ZW50TGlzdGVuZXJcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VFdmVudExpc3RlbmVyPEUgZXh0ZW5kcyBrZXlvZiBTaGFkb3dSb290RXZlbnRNYXA+KHRhcmdldDogTWF5YmVSZWZPckdldHRlcjxBcnJheWFibGU8U2hhZG93Um9vdD4gfCBudWxsIHwgdW5kZWZpbmVkPiwgZXZlbnQ6IE1heWJlUmVmT3JHZXR0ZXI8QXJyYXlhYmxlPEU+PiwgbGlzdGVuZXI6IE1heWJlUmVmPEFycmF5YWJsZTwodGhpczogU2hhZG93Um9vdCwgZXY6IFNoYWRvd1Jvb3RFdmVudE1hcFtFXSkgPT4gYW55Pj4sIG9wdGlvbnM/OiBNYXliZVJlZk9yR2V0dGVyPGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucz4pOiBGbjtcbi8qKlxuICogUmVnaXN0ZXIgdXNpbmcgYWRkRXZlbnRMaXN0ZW5lciBvbiBtb3VudGVkLCBhbmQgcmVtb3ZlRXZlbnRMaXN0ZW5lciBhdXRvbWF0aWNhbGx5IG9uIHVubW91bnRlZC5cbiAqXG4gKiBPdmVybG9hZCA1OiBFeHBsaWNpdGx5IEhUTUxFbGVtZW50IHRhcmdldFxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUV2ZW50TGlzdGVuZXJcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VFdmVudExpc3RlbmVyPEUgZXh0ZW5kcyBrZXlvZiBIVE1MRWxlbWVudEV2ZW50TWFwPih0YXJnZXQ6IE1heWJlUmVmT3JHZXR0ZXI8QXJyYXlhYmxlPEhUTUxFbGVtZW50PiB8IG51bGwgfCB1bmRlZmluZWQ+LCBldmVudDogTWF5YmVSZWZPckdldHRlcjxBcnJheWFibGU8RT4+LCBsaXN0ZW5lcjogTWF5YmVSZWY8KHRoaXM6IEhUTUxFbGVtZW50LCBldjogSFRNTEVsZW1lbnRFdmVudE1hcFtFXSkgPT4gYW55Piwgb3B0aW9ucz86IE1heWJlUmVmT3JHZXR0ZXI8Ym9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zPik6IEZuO1xuLyoqXG4gKiBSZWdpc3RlciB1c2luZyBhZGRFdmVudExpc3RlbmVyIG9uIG1vdW50ZWQsIGFuZCByZW1vdmVFdmVudExpc3RlbmVyIGF1dG9tYXRpY2FsbHkgb24gdW5tb3VudGVkLlxuICpcbiAqIE92ZXJsb2FkIDY6IEN1c3RvbSBldmVudCB0YXJnZXQgd2l0aCBldmVudCB0eXBlIGluZmVyXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRXZlbnRMaXN0ZW5lclxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUV2ZW50TGlzdGVuZXI8TmFtZXMgZXh0ZW5kcyBzdHJpbmcsIEV2ZW50VHlwZSA9IEV2ZW50Pih0YXJnZXQ6IE1heWJlUmVmT3JHZXR0ZXI8QXJyYXlhYmxlPEluZmVyRXZlbnRUYXJnZXQ8TmFtZXM+PiB8IG51bGwgfCB1bmRlZmluZWQ+LCBldmVudDogTWF5YmVSZWZPckdldHRlcjxBcnJheWFibGU8TmFtZXM+PiwgbGlzdGVuZXI6IE1heWJlUmVmPEFycmF5YWJsZTxHZW5lcmFsRXZlbnRMaXN0ZW5lcjxFdmVudFR5cGU+Pj4sIG9wdGlvbnM/OiBNYXliZVJlZk9yR2V0dGVyPGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucz4pOiBGbjtcbi8qKlxuICogUmVnaXN0ZXIgdXNpbmcgYWRkRXZlbnRMaXN0ZW5lciBvbiBtb3VudGVkLCBhbmQgcmVtb3ZlRXZlbnRMaXN0ZW5lciBhdXRvbWF0aWNhbGx5IG9uIHVubW91bnRlZC5cbiAqXG4gKiBPdmVybG9hZCA3OiBDdXN0b20gZXZlbnQgdGFyZ2V0IGZhbGxiYWNrXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRXZlbnRMaXN0ZW5lclxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUV2ZW50TGlzdGVuZXI8RXZlbnRUeXBlID0gRXZlbnQ+KHRhcmdldDogTWF5YmVSZWZPckdldHRlcjxBcnJheWFibGU8RXZlbnRUYXJnZXQ+IHwgbnVsbCB8IHVuZGVmaW5lZD4sIGV2ZW50OiBNYXliZVJlZk9yR2V0dGVyPEFycmF5YWJsZTxzdHJpbmc+PiwgbGlzdGVuZXI6IE1heWJlUmVmPEFycmF5YWJsZTxHZW5lcmFsRXZlbnRMaXN0ZW5lcjxFdmVudFR5cGU+Pj4sIG9wdGlvbnM/OiBNYXliZVJlZk9yR2V0dGVyPGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucz4pOiBGbjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUV2ZW50U291cmNlL2luZGV4LmQudHNcbnR5cGUgRXZlbnRTb3VyY2VTdGF0dXMgPSAnQ09OTkVDVElORycgfCAnT1BFTicgfCAnQ0xPU0VEJztcbmludGVyZmFjZSBVc2VFdmVudFNvdXJjZU9wdGlvbnM8RGF0YT4gZXh0ZW5kcyBFdmVudFNvdXJjZUluaXQge1xuICAvKipcbiAgICogRW5hYmxlZCBhdXRvIHJlY29ubmVjdFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b1JlY29ubmVjdD86IGJvb2xlYW4gfCB7XG4gICAgLyoqXG4gICAgICogTWF4aW11bSByZXRyeSB0aW1lcy5cbiAgICAgKlxuICAgICAqIE9yIHlvdSBjYW4gcGFzcyBhIHByZWRpY2F0ZSBmdW5jdGlvbiAod2hpY2ggcmV0dXJucyB0cnVlIGlmIHlvdSB3YW50IHRvIHJldHJ5KS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IC0xXG4gICAgICovXG4gICAgcmV0cmllcz86IG51bWJlciB8ICgoKSA9PiBib29sZWFuKTtcbiAgICAvKipcbiAgICAgKiBEZWxheSBmb3IgcmVjb25uZWN0LCBpbiBtaWxsaXNlY29uZHNcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDEwMDBcbiAgICAgKi9cbiAgICBkZWxheT86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBPbiBtYXhpbXVtIHJldHJ5IHRpbWVzIHJlYWNoZWQuXG4gICAgICovXG4gICAgb25GYWlsZWQ/OiBGbjtcbiAgfTtcbiAgLyoqXG4gICAqIEltbWVkaWF0ZWx5IG9wZW4gdGhlIGNvbm5lY3Rpb24gd2hlbiBjYWxsaW5nIHRoaXMgY29tcG9zYWJsZVxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBpbW1lZGlhdGU/OiBib29sZWFuO1xuICAvKipcbiAgICogQXV0b21hdGljYWxseSBjb25uZWN0IHRvIHRoZSB3ZWJzb2NrZXQgd2hlbiBVUkwgY2hhbmdlc1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhdXRvQ29ubmVjdD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gZGF0YSBzZXJpYWxpemF0aW9uXG4gICAqL1xuICBzZXJpYWxpemVyPzoge1xuICAgIHJlYWQ6ICh2Pzogc3RyaW5nKSA9PiBEYXRhO1xuICB9O1xufVxuaW50ZXJmYWNlIFVzZUV2ZW50U291cmNlUmV0dXJuPEV2ZW50cyBleHRlbmRzIHN0cmluZ1tdLCBEYXRhID0gYW55PiB7XG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGxhdGVzdCBkYXRhIHJlY2VpdmVkIHZpYSB0aGUgRXZlbnRTb3VyY2UsXG4gICAqIGNhbiBiZSB3YXRjaGVkIHRvIHJlc3BvbmQgdG8gaW5jb21pbmcgbWVzc2FnZXNcbiAgICovXG4gIGRhdGE6IFNoYWxsb3dSZWY8RGF0YSB8IG51bGw+O1xuICAvKipcbiAgICogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGNvbm5lY3Rpb24sIGNhbiBiZSBvbmx5IG9uZSBvZjpcbiAgICogJ0NPTk5FQ1RJTkcnLCAnT1BFTicgJ0NMT1NFRCdcbiAgICovXG4gIHN0YXR1czogU2hhbGxvd1JlZjxFdmVudFNvdXJjZVN0YXR1cz47XG4gIC8qKlxuICAgKiBUaGUgbGF0ZXN0IG5hbWVkIGV2ZW50XG4gICAqL1xuICBldmVudDogU2hhbGxvd1JlZjxFdmVudHNbbnVtYmVyXSB8IG51bGw+O1xuICAvKipcbiAgICogVGhlIGN1cnJlbnQgZXJyb3JcbiAgICovXG4gIGVycm9yOiBTaGFsbG93UmVmPEV2ZW50IHwgbnVsbD47XG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIEV2ZW50U291cmNlIGNvbm5lY3Rpb24gZ3JhY2VmdWxseS5cbiAgICovXG4gIGNsb3NlOiBFdmVudFNvdXJjZVsnY2xvc2UnXTtcbiAgLyoqXG4gICAqIFJlb3BlbiB0aGUgRXZlbnRTb3VyY2UgY29ubmVjdGlvbi5cbiAgICogSWYgdGhlcmUgdGhlIGN1cnJlbnQgb25lIGlzIGFjdGl2ZSwgd2lsbCBjbG9zZSBpdCBiZWZvcmUgb3BlbmluZyBhIG5ldyBvbmUuXG4gICAqL1xuICBvcGVuOiBGbjtcbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBFdmVudFNvdXJjZSBpbnN0YW5jZS5cbiAgICovXG4gIGV2ZW50U291cmNlOiBSZWY8RXZlbnRTb3VyY2UgfCBudWxsPjtcbiAgLyoqXG4gICAqIFRoZSBsYXN0IGV2ZW50IElEIHN0cmluZywgZm9yIHNlcnZlci1zZW50IGV2ZW50cy5cbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTWVzc2FnZUV2ZW50L2xhc3RFdmVudElkXG4gICAqL1xuICBsYXN0RXZlbnRJZDogU2hhbGxvd1JlZjxzdHJpbmcgfCBudWxsPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgd3JhcHBlciBmb3IgRXZlbnRTb3VyY2UuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRXZlbnRTb3VyY2VcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50U291cmNlL0V2ZW50U291cmNlIEV2ZW50U291cmNlXG4gKiBAcGFyYW0gdXJsXG4gKiBAcGFyYW0gZXZlbnRzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUV2ZW50U291cmNlPEV2ZW50cyBleHRlbmRzIHN0cmluZ1tdLCBEYXRhID0gYW55Pih1cmw6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nIHwgVVJMIHwgdW5kZWZpbmVkPiwgZXZlbnRzPzogRXZlbnRzLCBvcHRpb25zPzogVXNlRXZlbnRTb3VyY2VPcHRpb25zPERhdGE+KTogVXNlRXZlbnRTb3VyY2VSZXR1cm48RXZlbnRzLCBEYXRhPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUV5ZURyb3BwZXIvaW5kZXguZC50c1xuaW50ZXJmYWNlIEV5ZURyb3BwZXJPcGVuT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9BYm9ydFNpZ25hbFxuICAgKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5pbnRlcmZhY2UgRXllRHJvcHBlciB7XG4gIG5ldyAoKTogRXllRHJvcHBlcjtcbiAgb3BlbjogKG9wdGlvbnM/OiBFeWVEcm9wcGVyT3Blbk9wdGlvbnMpID0+IFByb21pc2U8e1xuICAgIHNSR0JIZXg6IHN0cmluZztcbiAgfT47XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiAnRXllRHJvcHBlcic7XG59XG5pbnRlcmZhY2UgVXNlRXllRHJvcHBlck9wdGlvbnMge1xuICAvKipcbiAgICogSW5pdGlhbCBzUkdCSGV4LlxuICAgKlxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgaW5pdGlhbFZhbHVlPzogc3RyaW5nO1xufVxuaW50ZXJmYWNlIFVzZUV5ZURyb3BwZXJSZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIHNSR0JIZXg6IFNoYWxsb3dSZWY8c3RyaW5nPjtcbiAgb3BlbjogKG9wZW5PcHRpb25zPzogRXllRHJvcHBlck9wZW5PcHRpb25zKSA9PiBQcm9taXNlPHtcbiAgICBzUkdCSGV4OiBzdHJpbmc7XG4gIH0gfCB1bmRlZmluZWQ+O1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBbRXllRHJvcHBlciBBUEldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FeWVEcm9wcGVyX0FQSSlcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VFeWVEcm9wcGVyXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VFeWVEcm9wcGVyKG9wdGlvbnM/OiBVc2VFeWVEcm9wcGVyT3B0aW9ucyk6IFVzZUV5ZURyb3BwZXJSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VGYXZpY29uL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VGYXZpY29uT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZURvY3VtZW50IHtcbiAgYmFzZVVybD86IHN0cmluZztcbiAgcmVsPzogc3RyaW5nO1xufVxudHlwZSBVc2VGYXZpY29uUmV0dXJuID0gQ29tcHV0ZWRSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfCBSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD47XG4vKipcbiAqIFJlYWN0aXZlIGZhdmljb24uXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRmF2aWNvblxuICogQHBhcmFtIG5ld0ljb25cbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRmF2aWNvbihuZXdJY29uOiBSZWFkb25seVJlZk9yR2V0dGVyPHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+LCBvcHRpb25zPzogVXNlRmF2aWNvbk9wdGlvbnMpOiBDb21wdXRlZFJlZjxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlRmF2aWNvbihuZXdJY29uPzogTWF5YmVSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4sIG9wdGlvbnM/OiBVc2VGYXZpY29uT3B0aW9ucyk6IFJlZjxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUZldGNoL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VGZXRjaFJldHVybjxUPiB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGZldGNoIHJlcXVlc3QgaGFzIGZpbmlzaGVkXG4gICAqL1xuICBpc0ZpbmlzaGVkOiBSZWFkb25seTxTaGFsbG93UmVmPGJvb2xlYW4+PjtcbiAgLyoqXG4gICAqIFRoZSBzdGF0dXNDb2RlIG9mIHRoZSBIVFRQIGZldGNoIHJlc3BvbnNlXG4gICAqL1xuICBzdGF0dXNDb2RlOiBTaGFsbG93UmVmPG51bWJlciB8IG51bGw+O1xuICAvKipcbiAgICogVGhlIHJhdyByZXNwb25zZSBvZiB0aGUgZmV0Y2ggcmVzcG9uc2VcbiAgICovXG4gIHJlc3BvbnNlOiBTaGFsbG93UmVmPFJlc3BvbnNlIHwgbnVsbD47XG4gIC8qKlxuICAgKiBBbnkgZmV0Y2ggZXJyb3JzIHRoYXQgbWF5IGhhdmUgb2NjdXJyZWRcbiAgICovXG4gIGVycm9yOiBTaGFsbG93UmVmPGFueT47XG4gIC8qKlxuICAgKiBUaGUgZmV0Y2ggcmVzcG9uc2UgYm9keSBvbiBzdWNjZXNzLCBtYXkgZWl0aGVyIGJlIEpTT04gb3IgdGV4dFxuICAgKi9cbiAgZGF0YTogU2hhbGxvd1JlZjxUIHwgbnVsbD47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHJlcXVlc3QgaXMgY3VycmVudGx5IGJlaW5nIGZldGNoZWQuXG4gICAqL1xuICBpc0ZldGNoaW5nOiBSZWFkb25seTxTaGFsbG93UmVmPGJvb2xlYW4+PjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgZmV0Y2ggcmVxdWVzdCBpcyBhYmxlIHRvIGJlIGFib3J0ZWRcbiAgICovXG4gIGNhbkFib3J0OiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgZmV0Y2ggcmVxdWVzdCB3YXMgYWJvcnRlZFxuICAgKi9cbiAgYWJvcnRlZDogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgLyoqXG4gICAqIEFib3J0IHRoZSBmZXRjaCByZXF1ZXN0XG4gICAqL1xuICBhYm9ydDogKHJlYXNvbj86IGFueSkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIE1hbnVhbGx5IGNhbGwgdGhlIGZldGNoXG4gICAqIChkZWZhdWx0IG5vdCB0aHJvd2luZyBlcnJvcilcbiAgICovXG4gIGV4ZWN1dGU6ICh0aHJvd09uRmFpbGVkPzogYm9vbGVhbikgPT4gUHJvbWlzZTxhbnk+O1xuICAvKipcbiAgICogRmlyZXMgYWZ0ZXIgdGhlIGZldGNoIHJlcXVlc3QgaGFzIGZpbmlzaGVkXG4gICAqL1xuICBvbkZldGNoUmVzcG9uc2U6IEV2ZW50SG9va09uPFJlc3BvbnNlPjtcbiAgLyoqXG4gICAqIEZpcmVzIGFmdGVyIGEgZmV0Y2ggcmVxdWVzdCBlcnJvclxuICAgKi9cbiAgb25GZXRjaEVycm9yOiBFdmVudEhvb2tPbjtcbiAgLyoqXG4gICAqIEZpcmVzIGFmdGVyIGEgZmV0Y2ggaGFzIGNvbXBsZXRlZFxuICAgKi9cbiAgb25GZXRjaEZpbmFsbHk6IEV2ZW50SG9va09uO1xuICBnZXQ6ICgpID0+IFVzZUZldGNoUmV0dXJuPFQ+ICYgUHJvbWlzZUxpa2U8VXNlRmV0Y2hSZXR1cm48VD4+O1xuICBwb3N0OiAocGF5bG9hZD86IE1heWJlUmVmT3JHZXR0ZXI8dW5rbm93bj4sIHR5cGU/OiBzdHJpbmcpID0+IFVzZUZldGNoUmV0dXJuPFQ+ICYgUHJvbWlzZUxpa2U8VXNlRmV0Y2hSZXR1cm48VD4+O1xuICBwdXQ6IChwYXlsb2FkPzogTWF5YmVSZWZPckdldHRlcjx1bmtub3duPiwgdHlwZT86IHN0cmluZykgPT4gVXNlRmV0Y2hSZXR1cm48VD4gJiBQcm9taXNlTGlrZTxVc2VGZXRjaFJldHVybjxUPj47XG4gIGRlbGV0ZTogKHBheWxvYWQ/OiBNYXliZVJlZk9yR2V0dGVyPHVua25vd24+LCB0eXBlPzogc3RyaW5nKSA9PiBVc2VGZXRjaFJldHVybjxUPiAmIFByb21pc2VMaWtlPFVzZUZldGNoUmV0dXJuPFQ+PjtcbiAgcGF0Y2g6IChwYXlsb2FkPzogTWF5YmVSZWZPckdldHRlcjx1bmtub3duPiwgdHlwZT86IHN0cmluZykgPT4gVXNlRmV0Y2hSZXR1cm48VD4gJiBQcm9taXNlTGlrZTxVc2VGZXRjaFJldHVybjxUPj47XG4gIGhlYWQ6IChwYXlsb2FkPzogTWF5YmVSZWZPckdldHRlcjx1bmtub3duPiwgdHlwZT86IHN0cmluZykgPT4gVXNlRmV0Y2hSZXR1cm48VD4gJiBQcm9taXNlTGlrZTxVc2VGZXRjaFJldHVybjxUPj47XG4gIG9wdGlvbnM6IChwYXlsb2FkPzogTWF5YmVSZWZPckdldHRlcjx1bmtub3duPiwgdHlwZT86IHN0cmluZykgPT4gVXNlRmV0Y2hSZXR1cm48VD4gJiBQcm9taXNlTGlrZTxVc2VGZXRjaFJldHVybjxUPj47XG4gIGpzb246IDxKU09OID0gYW55PigpID0+IFVzZUZldGNoUmV0dXJuPEpTT04+ICYgUHJvbWlzZUxpa2U8VXNlRmV0Y2hSZXR1cm48SlNPTj4+O1xuICB0ZXh0OiAoKSA9PiBVc2VGZXRjaFJldHVybjxzdHJpbmc+ICYgUHJvbWlzZUxpa2U8VXNlRmV0Y2hSZXR1cm48c3RyaW5nPj47XG4gIGJsb2I6ICgpID0+IFVzZUZldGNoUmV0dXJuPEJsb2I+ICYgUHJvbWlzZUxpa2U8VXNlRmV0Y2hSZXR1cm48QmxvYj4+O1xuICBhcnJheUJ1ZmZlcjogKCkgPT4gVXNlRmV0Y2hSZXR1cm48QXJyYXlCdWZmZXI+ICYgUHJvbWlzZUxpa2U8VXNlRmV0Y2hSZXR1cm48QXJyYXlCdWZmZXI+PjtcbiAgZm9ybURhdGE6ICgpID0+IFVzZUZldGNoUmV0dXJuPEZvcm1EYXRhPiAmIFByb21pc2VMaWtlPFVzZUZldGNoUmV0dXJuPEZvcm1EYXRhPj47XG59XG50eXBlIENvbWJpbmF0aW9uID0gJ292ZXJ3cml0ZScgfCAnY2hhaW4nO1xuaW50ZXJmYWNlIEJlZm9yZUZldGNoQ29udGV4dCB7XG4gIC8qKlxuICAgKiBUaGUgY29tcHV0ZWQgdXJsIG9mIHRoZSBjdXJyZW50IHJlcXVlc3RcbiAgICovXG4gIHVybDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHJlcXVlc3Qgb3B0aW9ucyBvZiB0aGUgY3VycmVudCByZXF1ZXN0XG4gICAqL1xuICBvcHRpb25zOiBSZXF1ZXN0SW5pdDtcbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIGN1cnJlbnQgcmVxdWVzdFxuICAgKi9cbiAgY2FuY2VsOiBGbjtcbn1cbmludGVyZmFjZSBBZnRlckZldGNoQ29udGV4dDxUID0gYW55PiB7XG4gIHJlc3BvbnNlOiBSZXNwb25zZTtcbiAgZGF0YTogVCB8IG51bGw7XG4gIGNvbnRleHQ6IEJlZm9yZUZldGNoQ29udGV4dDtcbiAgZXhlY3V0ZTogKHRocm93T25GYWlsZWQ/OiBib29sZWFuKSA9PiBQcm9taXNlPGFueT47XG59XG5pbnRlcmZhY2UgT25GZXRjaEVycm9yQ29udGV4dDxUID0gYW55LCBFID0gYW55PiB7XG4gIGVycm9yOiBFO1xuICBkYXRhOiBUIHwgbnVsbDtcbiAgcmVzcG9uc2U6IFJlc3BvbnNlIHwgbnVsbDtcbiAgY29udGV4dDogQmVmb3JlRmV0Y2hDb250ZXh0O1xuICBleGVjdXRlOiAodGhyb3dPbkZhaWxlZD86IGJvb2xlYW4pID0+IFByb21pc2U8YW55Pjtcbn1cbmludGVyZmFjZSBVc2VGZXRjaE9wdGlvbnMge1xuICAvKipcbiAgICogRmV0Y2ggZnVuY3Rpb25cbiAgICovXG4gIGZldGNoPzogdHlwZW9mIHdpbmRvdy5mZXRjaDtcbiAgLyoqXG4gICAqIFdpbGwgYXV0b21hdGljYWxseSBydW4gZmV0Y2ggd2hlbiBgdXNlRmV0Y2hgIGlzIHVzZWRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaW1tZWRpYXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdpbGwgYXV0b21hdGljYWxseSByZWZldGNoIHdoZW46XG4gICAqIC0gdGhlIFVSTCBpcyBjaGFuZ2VkIGlmIHRoZSBVUkwgaXMgYSByZWZcbiAgICogLSB0aGUgcGF5bG9hZCBpcyBjaGFuZ2VkIGlmIHRoZSBwYXlsb2FkIGlzIGEgcmVmXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWZldGNoPzogTWF5YmVSZWZPckdldHRlcjxib29sZWFuPjtcbiAgLyoqXG4gICAqIEluaXRpYWwgZGF0YSBiZWZvcmUgdGhlIHJlcXVlc3QgZmluaXNoZWRcbiAgICpcbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5pdGlhbERhdGE/OiBhbnk7XG4gIC8qKlxuICAgKiBUaW1lb3V0IGZvciBhYm9ydCByZXF1ZXN0IGFmdGVyIG51bWJlciBvZiBtaWxsaXNlY29uZFxuICAgKiBgMGAgbWVhbnMgdXNlIGJyb3dzZXIgZGVmYXVsdFxuICAgKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvKipcbiAgICogQWxsb3cgdXBkYXRlIHRoZSBgZGF0YWAgcmVmIHdoZW4gZmV0Y2ggZXJyb3Igd2hlbmV2ZXIgcHJvdmlkZWQsIG9yIG11dGF0ZWQgaW4gdGhlIGBvbkZldGNoRXJyb3JgIGNhbGxiYWNrXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB1cGRhdGVEYXRhT25FcnJvcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaWxsIHJ1biBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGZldGNoIHJlcXVlc3QgaXMgZGlzcGF0Y2hlZFxuICAgKi9cbiAgYmVmb3JlRmV0Y2g/OiAoY3R4OiBCZWZvcmVGZXRjaENvbnRleHQpID0+IFByb21pc2U8UGFydGlhbDxCZWZvcmVGZXRjaENvbnRleHQ+IHwgdm9pZD4gfCBQYXJ0aWFsPEJlZm9yZUZldGNoQ29udGV4dD4gfCB2b2lkO1xuICAvKipcbiAgICogV2lsbCBydW4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGZldGNoIHJlcXVlc3QgaXMgcmV0dXJuZWQuXG4gICAqIFJ1bnMgYWZ0ZXIgYW55IDJ4eCByZXNwb25zZVxuICAgKi9cbiAgYWZ0ZXJGZXRjaD86IChjdHg6IEFmdGVyRmV0Y2hDb250ZXh0KSA9PiBQcm9taXNlPFBhcnRpYWw8QWZ0ZXJGZXRjaENvbnRleHQ+PiB8IFBhcnRpYWw8QWZ0ZXJGZXRjaENvbnRleHQ+O1xuICAvKipcbiAgICogV2lsbCBydW4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGZldGNoIHJlcXVlc3QgaXMgcmV0dXJuZWQuXG4gICAqIFJ1bnMgYWZ0ZXIgYW55IDR4eCBhbmQgNXh4IHJlc3BvbnNlXG4gICAqL1xuICBvbkZldGNoRXJyb3I/OiAoY3R4OiBPbkZldGNoRXJyb3JDb250ZXh0KSA9PiBQcm9taXNlPFBhcnRpYWw8T25GZXRjaEVycm9yQ29udGV4dD4+IHwgUGFydGlhbDxPbkZldGNoRXJyb3JDb250ZXh0Pjtcbn1cbmludGVyZmFjZSBDcmVhdGVGZXRjaE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGJhc2UgVVJMIHRoYXQgd2lsbCBiZSBwcmVmaXhlZCB0byBhbGwgdXJscyB1bmxlc3MgdXJscyBhcmUgYWJzb2x1dGVcbiAgICovXG4gIGJhc2VVcmw/OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz47XG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGluaGVyaXQgYmVoYXZpb3IgZm9yIGJlZm9yZUZldGNoLCBhZnRlckZldGNoLCBvbkZldGNoRXJyb3JcbiAgICogQGRlZmF1bHQgJ2NoYWluJ1xuICAgKi9cbiAgY29tYmluYXRpb24/OiBDb21iaW5hdGlvbjtcbiAgLyoqXG4gICAqIERlZmF1bHQgT3B0aW9ucyBmb3IgdGhlIHVzZUZldGNoIGZ1bmN0aW9uXG4gICAqL1xuICBvcHRpb25zPzogVXNlRmV0Y2hPcHRpb25zO1xuICAvKipcbiAgICogT3B0aW9ucyBmb3IgdGhlIGZldGNoIHJlcXVlc3RcbiAgICovXG4gIGZldGNoT3B0aW9ucz86IFJlcXVlc3RJbml0O1xufVxuZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVGZXRjaChjb25maWc/OiBDcmVhdGVGZXRjaE9wdGlvbnMpOiB0eXBlb2YgdXNlRmV0Y2g7XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUZldGNoPFQ+KHVybDogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+KTogVXNlRmV0Y2hSZXR1cm48VD4gJiBQcm9taXNlTGlrZTxVc2VGZXRjaFJldHVybjxUPj47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUZldGNoPFQ+KHVybDogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+LCB1c2VGZXRjaE9wdGlvbnM6IFVzZUZldGNoT3B0aW9ucyk6IFVzZUZldGNoUmV0dXJuPFQ+ICYgUHJvbWlzZUxpa2U8VXNlRmV0Y2hSZXR1cm48VD4+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VGZXRjaDxUPih1cmw6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgb3B0aW9uczogUmVxdWVzdEluaXQsIHVzZUZldGNoT3B0aW9ucz86IFVzZUZldGNoT3B0aW9ucyk6IFVzZUZldGNoUmV0dXJuPFQ+ICYgUHJvbWlzZUxpa2U8VXNlRmV0Y2hSZXR1cm48VD4+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlRmlsZURpYWxvZy9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlRmlsZURpYWxvZ09wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVEb2N1bWVudCB7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBtdWx0aXBsZT86IE1heWJlUmVmPGJvb2xlYW4+O1xuICAvKipcbiAgICogQGRlZmF1bHQgJyonXG4gICAqL1xuICBhY2NlcHQ/OiBNYXliZVJlZjxzdHJpbmc+O1xuICAvKipcbiAgICogU2VsZWN0IHRoZSBpbnB1dCBzb3VyY2UgZm9yIHRoZSBjYXB0dXJlIGZpbGUuXG4gICAqIEBzZWUgW0hUTUxJbnB1dEVsZW1lbnQgQ2FwdHVyZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9BdHRyaWJ1dGVzL2NhcHR1cmUpXG4gICAqL1xuICBjYXB0dXJlPzogTWF5YmVSZWY8c3RyaW5nPjtcbiAgLyoqXG4gICAqIFJlc2V0IHdoZW4gb3BlbiBmaWxlIGRpYWxvZy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlc2V0PzogTWF5YmVSZWY8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBTZWxlY3QgZGlyZWN0b3JpZXMgaW5zdGVhZCBvZiBmaWxlcy5cbiAgICogQHNlZSBbSFRNTElucHV0RWxlbWVudCB3ZWJraXRkaXJlY3RvcnldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSW5wdXRFbGVtZW50L3dlYmtpdGRpcmVjdG9yeSlcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpcmVjdG9yeT86IE1heWJlUmVmPGJvb2xlYW4+O1xuICAvKipcbiAgICogSW5pdGlhbCBmaWxlcyB0byBzZXQuXG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGluaXRpYWxGaWxlcz86IEFycmF5PEZpbGU+IHwgRmlsZUxpc3Q7XG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgZWxlbWVudCB0byB1c2UgZm9yIGZpbGUgZGlhbG9nLlxuICAgKiBAZGVmYXVsdCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXG4gICAqL1xuICBpbnB1dD86IE1heWJlRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pjtcbn1cbmludGVyZmFjZSBVc2VGaWxlRGlhbG9nUmV0dXJuIHtcbiAgZmlsZXM6IFJlZjxGaWxlTGlzdCB8IG51bGw+O1xuICBvcGVuOiAobG9jYWxPcHRpb25zPzogUGFydGlhbDxVc2VGaWxlRGlhbG9nT3B0aW9ucz4pID0+IHZvaWQ7XG4gIHJlc2V0OiAoKSA9PiB2b2lkO1xuICBvbkNoYW5nZTogRXZlbnRIb29rT248RmlsZUxpc3QgfCBudWxsPjtcbiAgb25DYW5jZWw6IEV2ZW50SG9va09uO1xufVxuLyoqXG4gKiBPcGVuIGZpbGUgZGlhbG9nIHdpdGggZWFzZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VGaWxlRGlhbG9nXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUZpbGVEaWFsb2cob3B0aW9ucz86IFVzZUZpbGVEaWFsb2dPcHRpb25zKTogVXNlRmlsZURpYWxvZ1JldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUZpbGVTeXN0ZW1BY2Nlc3MvaW5kZXguZC50c1xuLyoqXG4gKiB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyIHBhcmFtZXRlcnNcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL3dpbmRvdy9zaG93T3BlbkZpbGVQaWNrZXIjcGFyYW1ldGVyc1xuICovXG5pbnRlcmZhY2UgRmlsZVN5c3RlbUFjY2Vzc1Nob3dPcGVuRmlsZU9wdGlvbnMge1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIHR5cGVzPzogQXJyYXk8e1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGFjY2VwdDogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuICB9PjtcbiAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbj86IGJvb2xlYW47XG59XG4vKipcbiAqIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIgcGFyYW1ldGVyc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvd2luZG93L3Nob3dTYXZlRmlsZVBpY2tlciNwYXJhbWV0ZXJzXG4gKi9cbmludGVyZmFjZSBGaWxlU3lzdGVtQWNjZXNzU2hvd1NhdmVGaWxlT3B0aW9ucyB7XG4gIHN1Z2dlc3RlZE5hbWU/OiBzdHJpbmc7XG4gIHR5cGVzPzogQXJyYXk8e1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGFjY2VwdDogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuICB9PjtcbiAgZXhjbHVkZUFjY2VwdEFsbE9wdGlvbj86IGJvb2xlYW47XG59XG4vKipcbiAqIEZpbGVIYW5kbGVcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVTeXN0ZW1GaWxlSGFuZGxlXG4gKi9cbmludGVyZmFjZSBGaWxlU3lzdGVtRmlsZUhhbmRsZSB7XG4gIGdldEZpbGU6ICgpID0+IFByb21pc2U8RmlsZT47XG4gIGNyZWF0ZVdyaXRhYmxlOiAoKSA9PiBGaWxlU3lzdGVtV3JpdGFibGVGaWxlU3RyZWFtO1xufVxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtV3JpdGFibGVGaWxlU3RyZWFtXG4gKi9cbmludGVyZmFjZSBGaWxlU3lzdGVtV3JpdGFibGVGaWxlU3RyZWFtIGV4dGVuZHMgV3JpdGFibGVTdHJlYW0ge1xuICAvKipcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbS93cml0ZVxuICAgKi9cbiAgd3JpdGU6IEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW1Xcml0ZTtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0vc2Vla1xuICAgKi9cbiAgc2VlazogKHBvc2l0aW9uOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtV3JpdGFibGVGaWxlU3RyZWFtL3RydW5jYXRlXG4gICAqL1xuICB0cnVuY2F0ZTogKHNpemU6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPjtcbn1cbi8qKlxuICogRmlsZVN0cmVhbS53cml0ZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbS93cml0ZVxuICovXG5pbnRlcmZhY2UgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbVdyaXRlIHtcbiAgKGRhdGE6IHN0cmluZyB8IEJ1ZmZlclNvdXJjZSB8IEJsb2IpOiBQcm9taXNlPHZvaWQ+O1xuICAob3B0aW9uczoge1xuICAgIHR5cGU6ICd3cml0ZSc7XG4gICAgcG9zaXRpb246IG51bWJlcjtcbiAgICBkYXRhOiBzdHJpbmcgfCBCdWZmZXJTb3VyY2UgfCBCbG9iO1xuICB9KTogUHJvbWlzZTx2b2lkPjtcbiAgKG9wdGlvbnM6IHtcbiAgICB0eXBlOiAnc2Vlayc7XG4gICAgcG9zaXRpb246IG51bWJlcjtcbiAgfSk6IFByb21pc2U8dm9pZD47XG4gIChvcHRpb25zOiB7XG4gICAgdHlwZTogJ3RydW5jYXRlJztcbiAgICBzaXplOiBudW1iZXI7XG4gIH0pOiBQcm9taXNlPHZvaWQ+O1xufVxuLyoqXG4gKiBGaWxlU3RyZWFtLndyaXRlXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtV3JpdGFibGVGaWxlU3RyZWFtL3dyaXRlXG4gKi9cbnR5cGUgRmlsZVN5c3RlbUFjY2Vzc1dpbmRvdyA9IFdpbmRvdyAmIHtcbiAgc2hvd1NhdmVGaWxlUGlja2VyOiAob3B0aW9uczogRmlsZVN5c3RlbUFjY2Vzc1Nob3dTYXZlRmlsZU9wdGlvbnMpID0+IFByb21pc2U8RmlsZVN5c3RlbUZpbGVIYW5kbGU+O1xuICBzaG93T3BlbkZpbGVQaWNrZXI6IChvcHRpb25zOiBGaWxlU3lzdGVtQWNjZXNzU2hvd09wZW5GaWxlT3B0aW9ucykgPT4gUHJvbWlzZTxGaWxlU3lzdGVtRmlsZUhhbmRsZVtdPjtcbn07XG50eXBlIFVzZUZpbGVTeXN0ZW1BY2Nlc3NDb21tb25PcHRpb25zID0gUGljazxGaWxlU3lzdGVtQWNjZXNzU2hvd09wZW5GaWxlT3B0aW9ucywgJ3R5cGVzJyB8ICdleGNsdWRlQWNjZXB0QWxsT3B0aW9uJz47XG50eXBlIFVzZUZpbGVTeXN0ZW1BY2Nlc3NTaG93U2F2ZUZpbGVPcHRpb25zID0gUGljazxGaWxlU3lzdGVtQWNjZXNzU2hvd1NhdmVGaWxlT3B0aW9ucywgJ3N1Z2dlc3RlZE5hbWUnPjtcbnR5cGUgVXNlRmlsZVN5c3RlbUFjY2Vzc09wdGlvbnMgPSBDb25maWd1cmFibGVXaW5kb3cgJiBVc2VGaWxlU3lzdGVtQWNjZXNzQ29tbW9uT3B0aW9ucyAmIHtcbiAgLyoqXG4gICAqIGZpbGUgZGF0YSB0eXBlXG4gICAqL1xuICBkYXRhVHlwZT86IE1heWJlUmVmT3JHZXR0ZXI8J1RleHQnIHwgJ0FycmF5QnVmZmVyJyB8ICdCbG9iJz47XG59O1xuLyoqXG4gKiBDcmVhdGUgYW5kIHJlYWQgYW5kIHdyaXRlIGxvY2FsIGZpbGVzLlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRmlsZVN5c3RlbUFjY2Vzc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUZpbGVTeXN0ZW1BY2Nlc3MoKTogVXNlRmlsZVN5c3RlbUFjY2Vzc1JldHVybjxzdHJpbmcgfCBBcnJheUJ1ZmZlciB8IEJsb2I+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VGaWxlU3lzdGVtQWNjZXNzKG9wdGlvbnM6IFVzZUZpbGVTeXN0ZW1BY2Nlc3NPcHRpb25zICYge1xuICBkYXRhVHlwZTogJ1RleHQnO1xufSk6IFVzZUZpbGVTeXN0ZW1BY2Nlc3NSZXR1cm48c3RyaW5nPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlRmlsZVN5c3RlbUFjY2VzcyhvcHRpb25zOiBVc2VGaWxlU3lzdGVtQWNjZXNzT3B0aW9ucyAmIHtcbiAgZGF0YVR5cGU6ICdBcnJheUJ1ZmZlcic7XG59KTogVXNlRmlsZVN5c3RlbUFjY2Vzc1JldHVybjxBcnJheUJ1ZmZlcj47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUZpbGVTeXN0ZW1BY2Nlc3Mob3B0aW9uczogVXNlRmlsZVN5c3RlbUFjY2Vzc09wdGlvbnMgJiB7XG4gIGRhdGFUeXBlOiAnQmxvYic7XG59KTogVXNlRmlsZVN5c3RlbUFjY2Vzc1JldHVybjxCbG9iPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlRmlsZVN5c3RlbUFjY2VzcyhvcHRpb25zOiBVc2VGaWxlU3lzdGVtQWNjZXNzT3B0aW9ucyk6IFVzZUZpbGVTeXN0ZW1BY2Nlc3NSZXR1cm48c3RyaW5nIHwgQXJyYXlCdWZmZXIgfCBCbG9iPjtcbmludGVyZmFjZSBVc2VGaWxlU3lzdGVtQWNjZXNzUmV0dXJuPFQgPSBzdHJpbmc+IGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBkYXRhOiBTaGFsbG93UmVmPFQgfCB1bmRlZmluZWQ+O1xuICBmaWxlOiBTaGFsbG93UmVmPEZpbGUgfCB1bmRlZmluZWQ+O1xuICBmaWxlTmFtZTogQ29tcHV0ZWRSZWY8c3RyaW5nPjtcbiAgZmlsZU1JTUU6IENvbXB1dGVkUmVmPHN0cmluZz47XG4gIGZpbGVTaXplOiBDb21wdXRlZFJlZjxudW1iZXI+O1xuICBmaWxlTGFzdE1vZGlmaWVkOiBDb21wdXRlZFJlZjxudW1iZXI+O1xuICBvcGVuOiAoX29wdGlvbnM/OiBVc2VGaWxlU3lzdGVtQWNjZXNzQ29tbW9uT3B0aW9ucykgPT4gQXdhaXRhYmxlPHZvaWQ+O1xuICBjcmVhdGU6IChfb3B0aW9ucz86IFVzZUZpbGVTeXN0ZW1BY2Nlc3NTaG93U2F2ZUZpbGVPcHRpb25zKSA9PiBBd2FpdGFibGU8dm9pZD47XG4gIHNhdmU6IChfb3B0aW9ucz86IFVzZUZpbGVTeXN0ZW1BY2Nlc3NTaG93U2F2ZUZpbGVPcHRpb25zKSA9PiBBd2FpdGFibGU8dm9pZD47XG4gIHNhdmVBczogKF9vcHRpb25zPzogVXNlRmlsZVN5c3RlbUFjY2Vzc1Nob3dTYXZlRmlsZU9wdGlvbnMpID0+IEF3YWl0YWJsZTx2b2lkPjtcbiAgdXBkYXRlRGF0YTogKCkgPT4gQXdhaXRhYmxlPHZvaWQ+O1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlRm9jdXMvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUZvY3VzT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKlxuICAgKiBJbml0aWFsIHZhbHVlLiBJZiBzZXQgdHJ1ZSwgdGhlbiBmb2N1cyB3aWxsIGJlIHNldCBvbiB0aGUgdGFyZ2V0XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbml0aWFsVmFsdWU/OiBib29sZWFuO1xuICAvKipcbiAgICogUmVwbGljYXRlIHRoZSA6Zm9jdXMtdmlzaWJsZSBiZWhhdmlvciBvZiBDU1NcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZvY3VzVmlzaWJsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBQcmV2ZW50IHNjcm9sbGluZyB0byB0aGUgZWxlbWVudCB3aGVuIGl0IGlzIGZvY3VzZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwcmV2ZW50U2Nyb2xsPzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBVc2VGb2N1c1JldHVybiB7XG4gIC8qKlxuICAgKiBJZiByZWFkIGFzIHRydWUsIHRoZW4gdGhlIGVsZW1lbnQgaGFzIGZvY3VzLiBJZiByZWFkIGFzIGZhbHNlLCB0aGVuIHRoZSBlbGVtZW50IGRvZXMgbm90IGhhdmUgZm9jdXNcbiAgICogSWYgc2V0IHRvIHRydWUsIHRoZW4gdGhlIGVsZW1lbnQgd2lsbCBiZSBmb2N1c2VkLiBJZiBzZXQgdG8gZmFsc2UsIHRoZSBlbGVtZW50IHdpbGwgYmUgYmx1cnJlZC5cbiAgICovXG4gIGZvY3VzZWQ6IFdyaXRhYmxlQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG59XG4vKipcbiAqIFRyYWNrIG9yIHNldCB0aGUgZm9jdXMgc3RhdGUgb2YgYSBET00gZWxlbWVudC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VGb2N1c1xuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IGVsZW1lbnQgZm9yIHRoZSBmb2N1cyBhbmQgYmx1ciBldmVudHMuXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUZvY3VzKHRhcmdldDogTWF5YmVFbGVtZW50UmVmLCBvcHRpb25zPzogVXNlRm9jdXNPcHRpb25zKTogVXNlRm9jdXNSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VGb2N1c1dpdGhpbi9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlRm9jdXNXaXRoaW5SZXR1cm4ge1xuICAvKipcbiAgICogVHJ1ZSBpZiB0aGUgZWxlbWVudCBvciBhbnkgb2YgaXRzIGRlc2NlbmRhbnRzIGFyZSBmb2N1c2VkXG4gICAqL1xuICBmb2N1c2VkOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbn1cbi8qKlxuICogVHJhY2sgaWYgZm9jdXMgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgdGFyZ2V0IGVsZW1lbnRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VGb2N1c1dpdGhpblxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IGVsZW1lbnQgdG8gdHJhY2tcbiAqIEBwYXJhbSBvcHRpb25zIEZvY3VzIHdpdGhpbiBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRm9jdXNXaXRoaW4odGFyZ2V0OiBNYXliZUVsZW1lbnRSZWYsIG9wdGlvbnM/OiBDb25maWd1cmFibGVXaW5kb3cpOiBVc2VGb2N1c1dpdGhpblJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUZwcy9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlRnBzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIEZQUyBvbiBldmVyeSB4IGZyYW1lcy5cbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIGV2ZXJ5PzogbnVtYmVyO1xufVxuZGVjbGFyZSBmdW5jdGlvbiB1c2VGcHMob3B0aW9ucz86IFVzZUZwc09wdGlvbnMpOiBTaGFsbG93UmVmPG51bWJlcj47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VGdWxsc2NyZWVuL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VGdWxsc2NyZWVuT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZURvY3VtZW50IHtcbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgZXhpdCBmdWxsc2NyZWVuIHdoZW4gY29tcG9uZW50IGlzIHVubW91bnRlZFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0V4aXQ/OiBib29sZWFuO1xufVxuaW50ZXJmYWNlIFVzZUZ1bGxzY3JlZW5SZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIGlzRnVsbHNjcmVlbjogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgZW50ZXI6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIGV4aXQ6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHRvZ2dsZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgRnVsbHNjcmVlbiBBUEkuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRnVsbHNjcmVlblxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VGdWxsc2NyZWVuKHRhcmdldD86IE1heWJlRWxlbWVudFJlZiwgb3B0aW9ucz86IFVzZUZ1bGxzY3JlZW5PcHRpb25zKTogVXNlRnVsbHNjcmVlblJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUdhbWVwYWQvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUdhbWVwYWRPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93LCBDb25maWd1cmFibGVOYXZpZ2F0b3Ige31cbmludGVyZmFjZSBVc2VHYW1lcGFkUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUsIFBhdXNhYmxlIHtcbiAgb25Db25uZWN0ZWQ6IEV2ZW50SG9va09uPG51bWJlcj47XG4gIG9uRGlzY29ubmVjdGVkOiBFdmVudEhvb2tPbjxudW1iZXI+O1xuICBnYW1lcGFkczogUmVmPEdhbWVwYWRbXT47XG59XG4vKipcbiAqIE1hcHMgYSBzdGFuZGFyZCBzdGFuZGFyZCBnYW1lcGFkIHRvIGFuIFhib3ggMzYwIENvbnRyb2xsZXIuXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gbWFwR2FtZXBhZFRvWGJveDM2MENvbnRyb2xsZXIoZ2FtZXBhZDogUmVmPEdhbWVwYWQgfCB1bmRlZmluZWQ+KTogdnVlMC5Db21wdXRlZFJlZjx7XG4gIGJ1dHRvbnM6IHtcbiAgICBhOiBHYW1lcGFkQnV0dG9uO1xuICAgIGI6IEdhbWVwYWRCdXR0b247XG4gICAgeDogR2FtZXBhZEJ1dHRvbjtcbiAgICB5OiBHYW1lcGFkQnV0dG9uO1xuICB9O1xuICBidW1wZXI6IHtcbiAgICBsZWZ0OiBHYW1lcGFkQnV0dG9uO1xuICAgIHJpZ2h0OiBHYW1lcGFkQnV0dG9uO1xuICB9O1xuICB0cmlnZ2Vyczoge1xuICAgIGxlZnQ6IEdhbWVwYWRCdXR0b247XG4gICAgcmlnaHQ6IEdhbWVwYWRCdXR0b247XG4gIH07XG4gIHN0aWNrOiB7XG4gICAgbGVmdDoge1xuICAgICAgaG9yaXpvbnRhbDogbnVtYmVyO1xuICAgICAgdmVydGljYWw6IG51bWJlcjtcbiAgICAgIGJ1dHRvbjogR2FtZXBhZEJ1dHRvbjtcbiAgICB9O1xuICAgIHJpZ2h0OiB7XG4gICAgICBob3Jpem9udGFsOiBudW1iZXI7XG4gICAgICB2ZXJ0aWNhbDogbnVtYmVyO1xuICAgICAgYnV0dG9uOiBHYW1lcGFkQnV0dG9uO1xuICAgIH07XG4gIH07XG4gIGRwYWQ6IHtcbiAgICB1cDogR2FtZXBhZEJ1dHRvbjtcbiAgICBkb3duOiBHYW1lcGFkQnV0dG9uO1xuICAgIGxlZnQ6IEdhbWVwYWRCdXR0b247XG4gICAgcmlnaHQ6IEdhbWVwYWRCdXR0b247XG4gIH07XG4gIGJhY2s6IEdhbWVwYWRCdXR0b247XG4gIHN0YXJ0OiBHYW1lcGFkQnV0dG9uO1xufSB8IG51bGw+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VHYW1lcGFkKG9wdGlvbnM/OiBVc2VHYW1lcGFkT3B0aW9ucyk6IFVzZUdhbWVwYWRSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VHZW9sb2NhdGlvbi9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlR2VvbG9jYXRpb25PcHRpb25zIGV4dGVuZHMgUGFydGlhbDxQb3NpdGlvbk9wdGlvbnM+LCBDb25maWd1cmFibGVOYXZpZ2F0b3Ige1xuICBpbW1lZGlhdGU/OiBib29sZWFuO1xufVxuaW50ZXJmYWNlIFVzZUdlb2xvY2F0aW9uUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBjb29yZHM6IFJlZjxPbWl0PEdlb2xvY2F0aW9uUG9zaXRpb25bJ2Nvb3JkcyddLCAndG9KU09OJz4+O1xuICBsb2NhdGVkQXQ6IFNoYWxsb3dSZWY8bnVtYmVyIHwgbnVsbD47XG4gIGVycm9yOiBTaGFsbG93UmVmPEdlb2xvY2F0aW9uUG9zaXRpb25FcnJvciB8IG51bGw+O1xuICByZXN1bWU6ICgpID0+IHZvaWQ7XG4gIHBhdXNlOiAoKSA9PiB2b2lkO1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBHZW9sb2NhdGlvbiBBUEkuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlR2VvbG9jYXRpb25cbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlR2VvbG9jYXRpb24ob3B0aW9ucz86IFVzZUdlb2xvY2F0aW9uT3B0aW9ucyk6IFVzZUdlb2xvY2F0aW9uUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlSWRsZS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlSWRsZU9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3csIENvbmZpZ3VyYWJsZUV2ZW50RmlsdGVyIHtcbiAgLyoqXG4gICAqIEV2ZW50IG5hbWVzIHRoYXQgbGlzdGVuIHRvIGZvciBkZXRlY3RlZCB1c2VyIGFjdGl2aXR5XG4gICAqXG4gICAqIEBkZWZhdWx0IFsnbW91c2Vtb3ZlJywgJ21vdXNlZG93bicsICdyZXNpemUnLCAna2V5ZG93bicsICd0b3VjaHN0YXJ0JywgJ3doZWVsJ11cbiAgICovXG4gIGV2ZW50cz86IFdpbmRvd0V2ZW50TmFtZVtdO1xuICAvKipcbiAgICogTGlzdGVuIGZvciBkb2N1bWVudCB2aXNpYmlsaXR5IGNoYW5nZVxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBsaXN0ZW5Gb3JWaXNpYmlsaXR5Q2hhbmdlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluaXRpYWwgc3RhdGUgb2YgdGhlIHJlZiBpZGxlXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbml0aWFsU3RhdGU/OiBib29sZWFuO1xufVxuaW50ZXJmYWNlIFVzZUlkbGVSZXR1cm4gZXh0ZW5kcyBTdG9wcGFibGUge1xuICBpZGxlOiBTaGFsbG93UmVmPGJvb2xlYW4+O1xuICBsYXN0QWN0aXZlOiBTaGFsbG93UmVmPG51bWJlcj47XG4gIHJlc2V0OiAoKSA9PiB2b2lkO1xufVxuLyoqXG4gKiBUcmFja3Mgd2hldGhlciB0aGUgdXNlciBpcyBiZWluZyBpbmFjdGl2ZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VJZGxlXG4gKiBAcGFyYW0gdGltZW91dCBkZWZhdWx0IHRvIDEgbWludXRlXG4gKiBAcGFyYW0gb3B0aW9ucyBJZGxlT3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUlkbGUodGltZW91dD86IG51bWJlciwgb3B0aW9ucz86IFVzZUlkbGVPcHRpb25zKTogVXNlSWRsZVJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUltYWdlL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VJbWFnZU9wdGlvbnMge1xuICAvKiogQWRkcmVzcyBvZiB0aGUgcmVzb3VyY2UgKi9cbiAgc3JjOiBzdHJpbmc7XG4gIC8qKiBJbWFnZXMgdG8gdXNlIGluIGRpZmZlcmVudCBzaXR1YXRpb25zLCBlLmcuLCBoaWdoLXJlc29sdXRpb24gZGlzcGxheXMsIHNtYWxsIG1vbml0b3JzLCBldGMuICovXG4gIHNyY3NldD86IHN0cmluZztcbiAgLyoqIEltYWdlIHNpemVzIGZvciBkaWZmZXJlbnQgcGFnZSBsYXlvdXRzICovXG4gIHNpemVzPzogc3RyaW5nO1xuICAvKiogSW1hZ2UgYWx0ZXJuYXRpdmUgaW5mb3JtYXRpb24gKi9cbiAgYWx0Pzogc3RyaW5nO1xuICAvKiogSW1hZ2UgY2xhc3NlcyAqL1xuICBjbGFzcz86IHN0cmluZztcbiAgLyoqIEltYWdlIGxvYWRpbmcgKi9cbiAgbG9hZGluZz86IEhUTUxJbWFnZUVsZW1lbnRbJ2xvYWRpbmcnXTtcbiAgLyoqIEltYWdlIENPUlMgc2V0dGluZ3MgKi9cbiAgY3Jvc3NvcmlnaW4/OiBzdHJpbmc7XG4gIC8qKiBSZWZlcnJlciBwb2xpY3kgZm9yIGZldGNoIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcnJlci1Qb2xpY3kgKi9cbiAgcmVmZXJyZXJQb2xpY3k/OiBIVE1MSW1hZ2VFbGVtZW50WydyZWZlcnJlclBvbGljeSddO1xuICAvKiogSW1hZ2Ugd2lkdGggKi9cbiAgd2lkdGg/OiBIVE1MSW1hZ2VFbGVtZW50Wyd3aWR0aCddO1xuICAvKiogSW1hZ2UgaGVpZ2h0ICovXG4gIGhlaWdodD86IEhUTUxJbWFnZUVsZW1lbnRbJ2hlaWdodCddO1xuICAvKiogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ltZyNkZWNvZGluZyAqL1xuICBkZWNvZGluZz86IEhUTUxJbWFnZUVsZW1lbnRbJ2RlY29kaW5nJ107XG4gIC8qKiBQcm92aWRlcyBhIGhpbnQgb2YgdGhlIHJlbGF0aXZlIHByaW9yaXR5IHRvIHVzZSB3aGVuIGZldGNoaW5nIHRoZSBpbWFnZSAqL1xuICBmZXRjaFByaW9yaXR5PzogSFRNTEltYWdlRWxlbWVudFsnZmV0Y2hQcmlvcml0eSddO1xuICAvKiogUHJvdmlkZXMgYSBoaW50IG9mIHRoZSBpbXBvcnRhbmNlIG9mIHRoZSBpbWFnZSAqL1xuICBpc21hcD86IEhUTUxJbWFnZUVsZW1lbnRbJ2lzTWFwJ107XG4gIC8qKiBUaGUgcGFydGlhbCBVUkwgKHN0YXJ0aW5nIHdpdGggIykgb2YgYW4gaW1hZ2UgbWFwIGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudCAqL1xuICB1c2VtYXA/OiBIVE1MSW1hZ2VFbGVtZW50Wyd1c2VNYXAnXTtcbn1cbnR5cGUgVXNlSW1hZ2VSZXR1cm4gPSBVc2VBc3luY1N0YXRlUmV0dXJuPEhUTUxJbWFnZUVsZW1lbnQgfCB1bmRlZmluZWQsIGFueVtdLCB0cnVlPjtcbi8qKlxuICogUmVhY3RpdmUgbG9hZCBhbiBpbWFnZSBpbiB0aGUgYnJvd3NlciwgeW91IGNhbiB3YWl0IHRoZSByZXN1bHQgdG8gZGlzcGxheSBpdCBvciBzaG93IGEgZmFsbGJhY2suXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlSW1hZ2VcbiAqIEBwYXJhbSBvcHRpb25zIEltYWdlIGF0dHJpYnV0ZXMsIGFzIHVzZWQgaW4gdGhlIDxpbWc+IHRhZ1xuICogQHBhcmFtIGFzeW5jU3RhdGVPcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlSW1hZ2U8U2hhbGxvdyBleHRlbmRzIHRydWU+KG9wdGlvbnM6IE1heWJlUmVmT3JHZXR0ZXI8VXNlSW1hZ2VPcHRpb25zPiwgYXN5bmNTdGF0ZU9wdGlvbnM/OiBVc2VBc3luY1N0YXRlT3B0aW9uczxTaGFsbG93Pik6IFVzZUltYWdlUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlU2Nyb2xsL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VTY3JvbGxPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHtcbiAgLyoqXG4gICAqIFRocm90dGxlIHRpbWUgZm9yIHNjcm9sbCBldmVudCwgaXTigJlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHRocm90dGxlPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGNoZWNrIHRpbWUgd2hlbiBzY3JvbGxpbmcgZW5kcy5cbiAgICogVGhpcyBjb25maWd1cmF0aW9uIHdpbGwgYmUgc2V0dGluZyB0byAodGhyb3R0bGUgKyBpZGxlKSB3aGVuIHRoZSBgdGhyb3R0bGVgIGlzIGNvbmZpZ3VyZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDIwMFxuICAgKi9cbiAgaWRsZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIE9mZnNldCBhcnJpdmVkIHN0YXRlcyBieSB4IHBpeGVsc1xuICAgKlxuICAgKi9cbiAgb2Zmc2V0Pzoge1xuICAgIGxlZnQ/OiBudW1iZXI7XG4gICAgcmlnaHQ/OiBudW1iZXI7XG4gICAgdG9wPzogbnVtYmVyO1xuICAgIGJvdHRvbT86IG51bWJlcjtcbiAgfTtcbiAgLyoqXG4gICAqIFVzZSBNdXRhdGlvbk9ic2VydmVyIHRvIG1vbml0b3Igc3BlY2lmaWMgRE9NIGNoYW5nZXMsXG4gICAqIHN1Y2ggYXMgYXR0cmlidXRlIG1vZGlmaWNhdGlvbnMsIGNoaWxkIG5vZGUgYWRkaXRpb25zIG9yIHJlbW92YWxzLCBvciBzdWJ0cmVlIGNoYW5nZXMuXG4gICAqIEBkZWZhdWx0IHsgbXV0YXRpb246IGJvb2xlYW4gfVxuICAgKi9cbiAgb2JzZXJ2ZT86IGJvb2xlYW4gfCB7XG4gICAgbXV0YXRpb24/OiBib29sZWFuO1xuICB9O1xuICAvKipcbiAgICogVHJpZ2dlciBpdCB3aGVuIHNjcm9sbGluZy5cbiAgICpcbiAgICovXG4gIG9uU2Nyb2xsPzogKGU6IEV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogVHJpZ2dlciBpdCB3aGVuIHNjcm9sbGluZyBlbmRzLlxuICAgKlxuICAgKi9cbiAgb25TdG9wPzogKGU6IEV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogTGlzdGVuZXIgb3B0aW9ucyBmb3Igc2Nyb2xsIGV2ZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7Y2FwdHVyZTogZmFsc2UsIHBhc3NpdmU6IHRydWV9XG4gICAqL1xuICBldmVudExpc3RlbmVyT3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucztcbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgc3BlY2lmeSBhIHNjcm9sbCBiZWhhdmlvciBvZiBgYXV0b2AgKGRlZmF1bHQsIG5vdCBzbW9vdGggc2Nyb2xsaW5nKSBvclxuICAgKiBgc21vb3RoYCAoZm9yIHNtb290aCBzY3JvbGxpbmcpIHdoaWNoIHRha2VzIGVmZmVjdCB3aGVuIGNoYW5naW5nIHRoZSBgeGAgb3IgYHlgIHJlZnMuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgYmVoYXZpb3I/OiBNYXliZVJlZk9yR2V0dGVyPFNjcm9sbEJlaGF2aW9yPjtcbiAgLyoqXG4gICAqIE9uIGVycm9yIGNhbGxiYWNrXG4gICAqXG4gICAqIERlZmF1bHQgbG9nIGVycm9yIHRvIGBjb25zb2xlLmVycm9yYFxuICAgKi9cbiAgb25FcnJvcj86IChlcnJvcjogdW5rbm93bikgPT4gdm9pZDtcbn1cbmludGVyZmFjZSBVc2VTY3JvbGxSZXR1cm4ge1xuICB4OiBXcml0YWJsZUNvbXB1dGVkUmVmPG51bWJlcj47XG4gIHk6IFdyaXRhYmxlQ29tcHV0ZWRSZWY8bnVtYmVyPjtcbiAgaXNTY3JvbGxpbmc6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4gIGFycml2ZWRTdGF0ZToge1xuICAgIGxlZnQ6IGJvb2xlYW47XG4gICAgcmlnaHQ6IGJvb2xlYW47XG4gICAgdG9wOiBib29sZWFuO1xuICAgIGJvdHRvbTogYm9vbGVhbjtcbiAgfTtcbiAgZGlyZWN0aW9uczoge1xuICAgIGxlZnQ6IGJvb2xlYW47XG4gICAgcmlnaHQ6IGJvb2xlYW47XG4gICAgdG9wOiBib29sZWFuO1xuICAgIGJvdHRvbTogYm9vbGVhbjtcbiAgfTtcbiAgbWVhc3VyZTogKCkgPT4gdm9pZDtcbn1cbi8qKlxuICogUmVhY3RpdmUgc2Nyb2xsLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVNjcm9sbFxuICogQHBhcmFtIGVsZW1lbnRcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlU2Nyb2xsKGVsZW1lbnQ6IE1heWJlUmVmT3JHZXR0ZXI8SFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50IHwgV2luZG93IHwgRG9jdW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkPiwgb3B0aW9ucz86IFVzZVNjcm9sbE9wdGlvbnMpOiBVc2VTY3JvbGxSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VJbmZpbml0ZVNjcm9sbC9pbmRleC5kLnRzXG50eXBlIEluZmluaXRlU2Nyb2xsRWxlbWVudCA9IEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCB8IFdpbmRvdyB8IERvY3VtZW50IHwgbnVsbCB8IHVuZGVmaW5lZDtcbmludGVyZmFjZSBVc2VJbmZpbml0ZVNjcm9sbE9wdGlvbnM8VCBleHRlbmRzIEluZmluaXRlU2Nyb2xsRWxlbWVudCA9IEluZmluaXRlU2Nyb2xsRWxlbWVudD4gZXh0ZW5kcyBVc2VTY3JvbGxPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIGJvdHRvbSBvZiB0aGUgZWxlbWVudCBhbmQgdGhlIGJvdHRvbSBvZiB0aGUgdmlld3BvcnRcbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgZGlzdGFuY2U/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0aW9uIGluIHdoaWNoIHRvIGxpc3RlbiB0aGUgc2Nyb2xsLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnYm90dG9tJ1xuICAgKi9cbiAgZGlyZWN0aW9uPzogJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCc7XG4gIC8qKlxuICAgKiBUaGUgaW50ZXJ2YWwgdGltZSBiZXR3ZWVuIHR3byBsb2FkIG1vcmUgKHRvIGF2b2lkIHRvbyBtYW55IGludm9rZXMpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMDBcbiAgICovXG4gIGludGVydmFsPzogbnVtYmVyO1xuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciBtb3JlIGNvbnRlbnQgY2FuIGJlIGxvYWRlZCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LlxuICAgKiBTaG91bGQgcmV0dXJuIGB0cnVlYCBpZiBsb2FkaW5nIG1vcmUgY29udGVudCBpcyBhbGxvd2VkIGZvciB0aGUgZ2l2ZW4gZWxlbWVudCxcbiAgICogYW5kIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgY2FuTG9hZE1vcmU/OiAoZWw6IFQpID0+IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgVXNlSW5maW5pdGVTY3JvbGxSZXR1cm4ge1xuICBpc0xvYWRpbmc6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICByZXNldDogKCkgPT4gdm9pZDtcbn1cbi8qKlxuICogUmVhY3RpdmUgaW5maW5pdGUgc2Nyb2xsLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUluZmluaXRlU2Nyb2xsXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlSW5maW5pdGVTY3JvbGw8VCBleHRlbmRzIEluZmluaXRlU2Nyb2xsRWxlbWVudD4oZWxlbWVudDogTWF5YmVSZWZPckdldHRlcjxUPiwgb25Mb2FkTW9yZTogKHN0YXRlOiBVbndyYXBOZXN0ZWRSZWZzPFVzZVNjcm9sbFJldHVybj4pID0+IEF3YWl0YWJsZTx2b2lkPiwgb3B0aW9ucz86IFVzZUluZmluaXRlU2Nyb2xsT3B0aW9uczxUPik6IFVzZUluZmluaXRlU2Nyb2xsUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlS2V5TW9kaWZpZXIvaW5kZXguZC50c1xudHlwZSBLZXlNb2RpZmllciA9ICdBbHQnIHwgJ0FsdEdyYXBoJyB8ICdDYXBzTG9jaycgfCAnQ29udHJvbCcgfCAnRm4nIHwgJ0ZuTG9jaycgfCAnTWV0YScgfCAnTnVtTG9jaycgfCAnU2Nyb2xsTG9jaycgfCAnU2hpZnQnIHwgJ1N5bWJvbCcgfCAnU3ltYm9sTG9jayc7XG5pbnRlcmZhY2UgVXNlTW9kaWZpZXJPcHRpb25zPEluaXRpYWw+IGV4dGVuZHMgQ29uZmlndXJhYmxlRG9jdW1lbnQge1xuICAvKipcbiAgICogRXZlbnQgbmFtZXMgdGhhdCB3aWxsIHByb21wdCB1cGRhdGUgdG8gbW9kaWZpZXIgc3RhdGVzXG4gICAqXG4gICAqIEBkZWZhdWx0IFsnbW91c2Vkb3duJywgJ21vdXNldXAnLCAna2V5ZG93bicsICdrZXl1cCddXG4gICAqL1xuICBldmVudHM/OiBXaW5kb3dFdmVudE5hbWVbXTtcbiAgLyoqXG4gICAqIEluaXRpYWwgdmFsdWUgb2YgdGhlIHJldHVybmVkIHJlZlxuICAgKlxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBpbml0aWFsPzogSW5pdGlhbDtcbn1cbnR5cGUgVXNlS2V5TW9kaWZpZXJSZXR1cm48SW5pdGlhbD4gPSBTaGFsbG93UmVmPEluaXRpYWwgZXh0ZW5kcyBib29sZWFuID8gYm9vbGVhbiA6IGJvb2xlYW4gfCBudWxsPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlS2V5TW9kaWZpZXI8SW5pdGlhbCBleHRlbmRzIGJvb2xlYW4gfCBudWxsPihtb2RpZmllcjogS2V5TW9kaWZpZXIsIG9wdGlvbnM/OiBVc2VNb2RpZmllck9wdGlvbnM8SW5pdGlhbD4pOiBVc2VLZXlNb2RpZmllclJldHVybjxJbml0aWFsPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUxvY2FsU3RvcmFnZS9pbmRleC5kLnRzXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUxvY2FsU3RvcmFnZShrZXk6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgaW5pdGlhbFZhbHVlOiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIG9wdGlvbnM/OiBVc2VTdG9yYWdlT3B0aW9uczxzdHJpbmc+KTogUmVtb3ZhYmxlUmVmPHN0cmluZz47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUxvY2FsU3RvcmFnZShrZXk6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgaW5pdGlhbFZhbHVlOiBNYXliZVJlZk9yR2V0dGVyPGJvb2xlYW4+LCBvcHRpb25zPzogVXNlU3RvcmFnZU9wdGlvbnM8Ym9vbGVhbj4pOiBSZW1vdmFibGVSZWY8Ym9vbGVhbj47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUxvY2FsU3RvcmFnZShrZXk6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgaW5pdGlhbFZhbHVlOiBNYXliZVJlZk9yR2V0dGVyPG51bWJlcj4sIG9wdGlvbnM/OiBVc2VTdG9yYWdlT3B0aW9uczxudW1iZXI+KTogUmVtb3ZhYmxlUmVmPG51bWJlcj47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUxvY2FsU3RvcmFnZTxUPihrZXk6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgaW5pdGlhbFZhbHVlOiBNYXliZVJlZk9yR2V0dGVyPFQ+LCBvcHRpb25zPzogVXNlU3RvcmFnZU9wdGlvbnM8VD4pOiBSZW1vdmFibGVSZWY8VD47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUxvY2FsU3RvcmFnZTxUID0gdW5rbm93bj4oa2V5OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIGluaXRpYWxWYWx1ZTogTWF5YmVSZWZPckdldHRlcjxudWxsPiwgb3B0aW9ucz86IFVzZVN0b3JhZ2VPcHRpb25zPFQ+KTogUmVtb3ZhYmxlUmVmPFQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlTWFnaWNLZXlzL2FsaWFzTWFwLmQudHNcbmRlY2xhcmUgY29uc3QgRGVmYXVsdE1hZ2ljS2V5c0FsaWFzTWFwOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZU1hZ2ljS2V5cy9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlTWFnaWNLZXlzT3B0aW9uczxSZWFjdGl2ZSBleHRlbmRzIGJvb2xlYW4+IHtcbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFjdGl2ZSBvYmplY3QgaW5zdGVhZCBvZiBhbiBvYmplY3Qgb2YgcmVmc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhY3RpdmU/OiBSZWFjdGl2ZTtcbiAgLyoqXG4gICAqIFRhcmdldCBmb3IgbGlzdGVuaW5nIGV2ZW50c1xuICAgKlxuICAgKiBAZGVmYXVsdCB3aW5kb3dcbiAgICovXG4gIHRhcmdldD86IE1heWJlUmVmT3JHZXR0ZXI8RXZlbnRUYXJnZXQ+O1xuICAvKipcbiAgICogQWxpYXMgbWFwIGZvciBrZXlzLCBhbGwgdGhlIGtleXMgc2hvdWxkIGJlIGxvd2VyY2FzZVxuICAgKiB7IHRhcmdldDoga2V5Y29kZSB9XG4gICAqXG4gICAqIEBleGFtcGxlIHsgY3RybDogXCJjb250cm9sXCIgfVxuICAgKiBAZGVmYXVsdCA8cHJlZGVmaW5lZC1tYXA+XG4gICAqL1xuICBhbGlhc01hcD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKlxuICAgKiBSZWdpc3RlciBwYXNzaXZlIGxpc3RlbmVyXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHBhc3NpdmU/OiBib29sZWFuO1xuICAvKipcbiAgICogQ3VzdG9tIGV2ZW50IGhhbmRsZXIgZm9yIGtleWRvd24va2V5dXAgZXZlbnQuXG4gICAqIFVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIGFwcGx5IGN1c3RvbSBsb2dpYy5cbiAgICpcbiAgICogV2hlbiB1c2luZyBgZS5wcmV2ZW50RGVmYXVsdCgpYCwgeW91IHdpbGwgbmVlZCB0byBwYXNzIGBwYXNzaXZlOiBmYWxzZWAgdG8gdXNlTWFnaWNLZXlzKCkuXG4gICAqL1xuICBvbkV2ZW50RmlyZWQ/OiAoZTogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCB8IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgTWFnaWNLZXlzSW50ZXJuYWwge1xuICAvKipcbiAgICogQSBTZXQgb2YgY3VycmVudGx5IHByZXNzZWQga2V5cyxcbiAgICogU3RvcmVzIHJhdyBrZXlDb2Rlcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9rZXlcbiAgICovXG4gIGN1cnJlbnQ6IFNldDxzdHJpbmc+O1xufVxudHlwZSBVc2VNYWdpY0tleXNSZXR1cm48UmVhY3RpdmUgZXh0ZW5kcyBib29sZWFuPiA9IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFJlYWN0aXZlIGV4dGVuZHMgdHJ1ZSA/IGJvb2xlYW4gOiBDb21wdXRlZFJlZjxib29sZWFuPj4gJiBNYWdpY0tleXNJbnRlcm5hbD47XG4vKipcbiAqIFJlYWN0aXZlIGtleXMgcHJlc3NlZCBzdGF0ZSwgd2l0aCBtYWdpY2FsIGtleXMgY29tYmluYXRpb24gc3VwcG9ydC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VNYWdpY0tleXNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VNYWdpY0tleXM8VCBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZT4ob3B0aW9ucz86IFVzZU1hZ2ljS2V5c09wdGlvbnM8VD4pOiBVc2VNYWdpY0tleXNSZXR1cm48VD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VNZWRpYUNvbnRyb2xzL2luZGV4LmQudHNcbi8qKlxuICogTWFueSBvZiB0aGUganNkb2MgZGVmaW5pdGlvbnMgaGVyZSBhcmUgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGVcbiAqIGRvY3VtZW50YXRpb24gZnJvbSBNRE4oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxNZWRpYUVsZW1lbnQpXG4gKi9cbmludGVyZmFjZSBVc2VNZWRpYVNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHVybCBmb3IgdGhlIG1lZGlhXG4gICAqL1xuICBzcmM6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBtZWRpYSBjb2RlYyB0eXBlXG4gICAqL1xuICB0eXBlPzogc3RyaW5nO1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBtZWRpYSBxdWVyeSBmb3IgdGhlIHJlc291cmNlJ3MgaW50ZW5kZWQgbWVkaWEuXG4gICAqL1xuICBtZWRpYT86IHN0cmluZztcbn1cbmludGVyZmFjZSBVc2VNZWRpYVRleHRUcmFja1NvdXJjZSB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgdHJhY2sgc2hvdWxkIGJlIGVuYWJsZWQgdW5sZXNzIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZXMgaW5kaWNhdGVcbiAgICogdGhhdCBhbm90aGVyIHRyYWNrIGlzIG1vcmUgYXBwcm9wcmlhdGVcbiAgICovXG4gIGRlZmF1bHQ/OiBib29sZWFuO1xuICAvKipcbiAgICogSG93IHRoZSB0ZXh0IHRyYWNrIGlzIG1lYW50IHRvIGJlIHVzZWQuIElmIG9taXR0ZWQgdGhlIGRlZmF1bHQga2luZCBpcyBzdWJ0aXRsZXMuXG4gICAqL1xuICBraW5kOiBUZXh0VHJhY2tLaW5kO1xuICAvKipcbiAgICogQSB1c2VyLXJlYWRhYmxlIHRpdGxlIG9mIHRoZSB0ZXh0IHRyYWNrIHdoaWNoIGlzIHVzZWQgYnkgdGhlIGJyb3dzZXJcbiAgICogd2hlbiBsaXN0aW5nIGF2YWlsYWJsZSB0ZXh0IHRyYWNrcy5cbiAgICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGRyZXNzIG9mIHRoZSB0cmFjayAoLnZ0dCBmaWxlKS4gTXVzdCBiZSBhIHZhbGlkIFVSTC4gVGhpcyBhdHRyaWJ1dGVcbiAgICogbXVzdCBiZSBzcGVjaWZpZWQgYW5kIGl0cyBVUkwgdmFsdWUgbXVzdCBoYXZlIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgZG9jdW1lbnRcbiAgICovXG4gIHNyYzogc3RyaW5nO1xuICAvKipcbiAgICogTGFuZ3VhZ2Ugb2YgdGhlIHRyYWNrIHRleHQgZGF0YS4gSXQgbXVzdCBiZSBhIHZhbGlkIEJDUCA0NyBsYW5ndWFnZSB0YWcuXG4gICAqIElmIHRoZSBraW5kIGF0dHJpYnV0ZSBpcyBzZXQgdG8gc3VidGl0bGVzLCB0aGVuIHNyY2xhbmcgbXVzdCBiZSBkZWZpbmVkLlxuICAgKi9cbiAgc3JjTGFuZzogc3RyaW5nO1xufVxuaW50ZXJmYWNlIFVzZU1lZGlhQ29udHJvbHNPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlRG9jdW1lbnQge1xuICAvKipcbiAgICogVGhlIHNvdXJjZSBmb3IgdGhlIG1lZGlhLCBtYXkgZWl0aGVyIGJlIGEgc3RyaW5nLCBhIGBVc2VNZWRpYVNvdXJjZWAgb2JqZWN0LCBvciBhIGxpc3RcbiAgICogb2YgYFVzZU1lZGlhU291cmNlYCBvYmplY3RzLlxuICAgKi9cbiAgc3JjPzogTWF5YmVSZWZPckdldHRlcjxzdHJpbmcgfCBVc2VNZWRpYVNvdXJjZSB8IFVzZU1lZGlhU291cmNlW10+O1xuICAvKipcbiAgICogQSBsaXN0IG9mIHRleHQgdHJhY2tzIGZvciB0aGUgbWVkaWFcbiAgICovXG4gIHRyYWNrcz86IE1heWJlUmVmT3JHZXR0ZXI8VXNlTWVkaWFUZXh0VHJhY2tTb3VyY2VbXT47XG59XG5pbnRlcmZhY2UgVXNlTWVkaWFUZXh0VHJhY2sge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSB0ZXh0IHRyYWNrXG4gICAqL1xuICBpZDogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHRleHQgdHJhY2sgbGFiZWxcbiAgICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBMYW5ndWFnZSBvZiB0aGUgdHJhY2sgdGV4dCBkYXRhLiBJdCBtdXN0IGJlIGEgdmFsaWQgQkNQIDQ3IGxhbmd1YWdlIHRhZy5cbiAgICogSWYgdGhlIGtpbmQgYXR0cmlidXRlIGlzIHNldCB0byBzdWJ0aXRsZXMsIHRoZW4gc3JjbGFuZyBtdXN0IGJlIGRlZmluZWQuXG4gICAqL1xuICBsYW5ndWFnZTogc3RyaW5nO1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkaXNwbGF5IG1vZGUgb2YgdGhlIHRleHQgdHJhY2ssIGVpdGhlciBgZGlzYWJsZWRgLFxuICAgKiBgaGlkZGVuYCwgb3IgYHNob3dpbmdgXG4gICAqL1xuICBtb2RlOiBUZXh0VHJhY2tNb2RlO1xuICAvKipcbiAgICogSG93IHRoZSB0ZXh0IHRyYWNrIGlzIG1lYW50IHRvIGJlIHVzZWQuIElmIG9taXR0ZWQgdGhlIGRlZmF1bHQga2luZCBpcyBzdWJ0aXRsZXMuXG4gICAqL1xuICBraW5kOiBUZXh0VHJhY2tLaW5kO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSB0cmFjaydzIGluLWJhbmQgbWV0YWRhdGEgdHJhY2sgZGlzcGF0Y2ggdHlwZS5cbiAgICovXG4gIGluQmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGU6IHN0cmluZztcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiB0ZXh0IHRyYWNrIGN1ZXNcbiAgICovXG4gIGN1ZXM6IFRleHRUcmFja0N1ZUxpc3QgfCBudWxsO1xuICAvKipcbiAgICogQSBsaXN0IG9mIGFjdGl2ZSB0ZXh0IHRyYWNrIGN1ZXNcbiAgICovXG4gIGFjdGl2ZUN1ZXM6IFRleHRUcmFja0N1ZUxpc3QgfCBudWxsO1xufVxuaW50ZXJmYWNlIFVzZU1lZGlhQ29udHJvbHNSZXR1cm4ge1xuICBjdXJyZW50VGltZTogU2hhbGxvd1JlZjxudW1iZXI+O1xuICBkdXJhdGlvbjogU2hhbGxvd1JlZjxudW1iZXI+O1xuICB3YWl0aW5nOiBTaGFsbG93UmVmPGJvb2xlYW4+O1xuICBzZWVraW5nOiBTaGFsbG93UmVmPGJvb2xlYW4+O1xuICBlbmRlZDogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgc3RhbGxlZDogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgYnVmZmVyZWQ6IFJlZjxbbnVtYmVyLCBudW1iZXJdW10+O1xuICBwbGF5aW5nOiBTaGFsbG93UmVmPGJvb2xlYW4+O1xuICByYXRlOiBTaGFsbG93UmVmPG51bWJlcj47XG4gIHZvbHVtZTogU2hhbGxvd1JlZjxudW1iZXI+O1xuICBtdXRlZDogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgdHJhY2tzOiBSZWY8VXNlTWVkaWFUZXh0VHJhY2tbXT47XG4gIHNlbGVjdGVkVHJhY2s6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgZW5hYmxlVHJhY2s6ICh0cmFjazogbnVtYmVyIHwgVXNlTWVkaWFUZXh0VHJhY2ssIGRpc2FibGVUcmFja3M/OiBib29sZWFuKSA9PiB2b2lkO1xuICBkaXNhYmxlVHJhY2s6ICh0cmFjaz86IG51bWJlciB8IFVzZU1lZGlhVGV4dFRyYWNrKSA9PiB2b2lkO1xuICBzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmU6IGJvb2xlYW47XG4gIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmU6ICgpID0+IFByb21pc2U8UGljdHVyZUluUGljdHVyZVdpbmRvdyB8IHZvaWQ+O1xuICBpc1BpY3R1cmVJblBpY3R1cmU6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4gIG9uU291cmNlRXJyb3I6IEV2ZW50SG9va09uPEV2ZW50PjtcbiAgb25QbGF5YmFja0Vycm9yOiBFdmVudEhvb2tPbjxFdmVudD47XG59XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZU1lZGlhQ29udHJvbHModGFyZ2V0OiBNYXliZVJlZjxIVE1MTWVkaWFFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZD4sIG9wdGlvbnM/OiBVc2VNZWRpYUNvbnRyb2xzT3B0aW9ucyk6IFVzZU1lZGlhQ29udHJvbHNSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VNZWRpYVF1ZXJ5L2luZGV4LmQudHNcbi8qKlxuICogUmVhY3RpdmUgTWVkaWEgUXVlcnkuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlTWVkaWFRdWVyeVxuICogQHBhcmFtIHF1ZXJ5XG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZU1lZGlhUXVlcnkocXVlcnk6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgb3B0aW9ucz86IENvbmZpZ3VyYWJsZVdpbmRvdyAmIHtcbiAgc3NyV2lkdGg/OiBudW1iZXI7XG59KTogdnVlMC5Db21wdXRlZFJlZjxib29sZWFuPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZU1lbW9pemUvaW5kZXguZC50c1xudHlwZSBDYWNoZUtleSA9IGFueTtcbi8qKlxuICogQ3VzdG9tIG1lbW9pemUgY2FjaGUgaGFuZGxlclxuICovXG5pbnRlcmZhY2UgVXNlTWVtb2l6ZUNhY2hlPEtleSwgVmFsdWU+IHtcbiAgLyoqXG4gICAqIEdldCB2YWx1ZSBmb3Iga2V5XG4gICAqL1xuICBnZXQ6IChrZXk6IEtleSkgPT4gVmFsdWUgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBTZXQgdmFsdWUgZm9yIGtleVxuICAgKi9cbiAgc2V0OiAoa2V5OiBLZXksIHZhbHVlOiBWYWx1ZSkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJldHVybiBmbGFnIGlmIGtleSBleGlzdHNcbiAgICovXG4gIGhhczogKGtleTogS2V5KSA9PiBib29sZWFuO1xuICAvKipcbiAgICogRGVsZXRlIHZhbHVlIGZvciBrZXlcbiAgICovXG4gIGRlbGV0ZTogKGtleTogS2V5KSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2xlYXIgY2FjaGVcbiAgICovXG4gIGNsZWFyOiAoKSA9PiB2b2lkO1xufVxuLyoqXG4gKiBNZW1vaXplZCBmdW5jdGlvblxuICovXG5pbnRlcmZhY2UgVXNlTWVtb2l6ZVJldHVybjxSZXN1bHQsIEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+IHtcbiAgLyoqXG4gICAqIEdldCByZXN1bHQgZnJvbSBjYWNoZSBvciBjYWxsIG1lbW9pemVkIGZ1bmN0aW9uXG4gICAqL1xuICAoLi4uYXJnczogQXJncyk6IFJlc3VsdDtcbiAgLyoqXG4gICAqIENhbGwgbWVtb2l6ZWQgZnVuY3Rpb24gYW5kIHVwZGF0ZSBjYWNoZVxuICAgKi9cbiAgbG9hZDogKC4uLmFyZ3M6IEFyZ3MpID0+IFJlc3VsdDtcbiAgLyoqXG4gICAqIERlbGV0ZSBjYWNoZSBvZiBnaXZlbiBhcmd1bWVudHNcbiAgICovXG4gIGRlbGV0ZTogKC4uLmFyZ3M6IEFyZ3MpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDbGVhciBjYWNoZVxuICAgKi9cbiAgY2xlYXI6ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBjYWNoZSBrZXkgZm9yIGdpdmVuIGFyZ3VtZW50c1xuICAgKi9cbiAgZ2VuZXJhdGVLZXk6ICguLi5hcmdzOiBBcmdzKSA9PiBDYWNoZUtleTtcbiAgLyoqXG4gICAqIENhY2hlIGNvbnRhaW5lclxuICAgKi9cbiAgY2FjaGU6IFVzZU1lbW9pemVDYWNoZTxDYWNoZUtleSwgUmVzdWx0Pjtcbn1cbmludGVyZmFjZSBVc2VNZW1vaXplT3B0aW9uczxSZXN1bHQsIEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+IHtcbiAgZ2V0S2V5PzogKC4uLmFyZ3M6IEFyZ3MpID0+IHN0cmluZyB8IG51bWJlcjtcbiAgY2FjaGU/OiBVc2VNZW1vaXplQ2FjaGU8Q2FjaGVLZXksIFJlc3VsdD47XG59XG4vKipcbiAqIFJlYWN0aXZlIGZ1bmN0aW9uIHJlc3VsdCBjYWNoZSBiYXNlZCBvbiBhcmd1bWVudHNcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZU1lbW9pemU8UmVzdWx0LCBBcmdzIGV4dGVuZHMgdW5rbm93bltdPihyZXNvbHZlcjogKC4uLmFyZ3M6IEFyZ3MpID0+IFJlc3VsdCwgb3B0aW9ucz86IFVzZU1lbW9pemVPcHRpb25zPFJlc3VsdCwgQXJncz4pOiBVc2VNZW1vaXplUmV0dXJuPFJlc3VsdCwgQXJncz47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VNZW1vcnkvaW5kZXguZC50c1xuLyoqXG4gKiBQZXJmb3JtYW5jZS5tZW1vcnlcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9QZXJmb3JtYW5jZS9tZW1vcnlcbiAqL1xuaW50ZXJmYWNlIE1lbW9yeUluZm8ge1xuICAvKipcbiAgICogVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgaGVhcCwgaW4gYnl0ZXMsIHRoYXQgaXMgYXZhaWxhYmxlIHRvIHRoZSBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkganNIZWFwU2l6ZUxpbWl0OiBudW1iZXI7XG4gIC8qKlxuICAgKiAgVGhlIHRvdGFsIGFsbG9jYXRlZCBoZWFwIHNpemUsIGluIGJ5dGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgdG90YWxKU0hlYXBTaXplOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBzZWdtZW50IG9mIEpTIGhlYXAsIGluIGJ5dGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlZEpTSGVhcFNpemU6IG51bWJlcjtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106ICdNZW1vcnlJbmZvJztcbn1cbmludGVyZmFjZSBVc2VNZW1vcnlPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlU2NoZWR1bGVyIHtcbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSB0aW1lciBpbW1lZGlhdGVseVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIGBzY2hlZHVsZXJgIG9wdGlvbiBpbnN0ZWFkXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGltbWVkaWF0ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBjYWxsYmFjayBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIGByZXN1bWVgXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgYHNjaGVkdWxlcmAgb3B0aW9uIGluc3RlYWRcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGltbWVkaWF0ZUNhbGxiYWNrPzogYm9vbGVhbjtcbiAgLyoqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgYHNjaGVkdWxlcmAgb3B0aW9uIGluc3RlYWQgKi9cbiAgaW50ZXJ2YWw/OiBudW1iZXI7XG59XG5pbnRlcmZhY2UgVXNlTWVtb3J5UmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBtZW1vcnk6IFJlZjxNZW1vcnlJbmZvIHwgdW5kZWZpbmVkPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgTWVtb3J5IEluZm8uXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlTWVtb3J5XG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlTWVtb3J5KG9wdGlvbnM/OiBVc2VNZW1vcnlPcHRpb25zKTogVXNlTWVtb3J5UmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlTW91bnRlZC9pbmRleC5kLnRzXG4vKipcbiAqIE1vdW50ZWQgc3RhdGUgaW4gcmVmLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZU1vdW50ZWRcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZU1vdW50ZWQoKTogdnVlMC5TaGFsbG93UmVmPGJvb2xlYW4sIGJvb2xlYW4+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlTW91c2UvaW5kZXguZC50c1xudHlwZSBVc2VNb3VzZUNvb3JkVHlwZSA9ICdwYWdlJyB8ICdjbGllbnQnIHwgJ3NjcmVlbicgfCAnbW92ZW1lbnQnO1xudHlwZSBVc2VNb3VzZVNvdXJjZVR5cGUgPSAnbW91c2UnIHwgJ3RvdWNoJyB8IG51bGw7XG50eXBlIFVzZU1vdXNlRXZlbnRFeHRyYWN0b3IgPSAoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaCkgPT4gW3g6IG51bWJlciwgeTogbnVtYmVyXSB8IG51bGwgfCB1bmRlZmluZWQ7XG5pbnRlcmZhY2UgVXNlTW91c2VPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93LCBDb25maWd1cmFibGVFdmVudEZpbHRlciB7XG4gIC8qKlxuICAgKiBNb3VzZSBwb3NpdGlvbiBiYXNlZCBieSBwYWdlLCBjbGllbnQsIHNjcmVlbiwgb3IgcmVsYXRpdmUgdG8gcHJldmlvdXMgcG9zaXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgJ3BhZ2UnXG4gICAqL1xuICB0eXBlPzogVXNlTW91c2VDb29yZFR5cGUgfCBVc2VNb3VzZUV2ZW50RXh0cmFjdG9yO1xuICAvKipcbiAgICogTGlzdGVuIGV2ZW50cyBvbiBgdGFyZ2V0YCBlbGVtZW50XG4gICAqXG4gICAqIEBkZWZhdWx0ICdXaW5kb3cnXG4gICAqL1xuICB0YXJnZXQ/OiBNYXliZVJlZk9yR2V0dGVyPFdpbmRvdyB8IEV2ZW50VGFyZ2V0IHwgbnVsbCB8IHVuZGVmaW5lZD47XG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gYHRvdWNobW92ZWAgZXZlbnRzXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHRvdWNoPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIExpc3RlbiB0byBgc2Nyb2xsYCBldmVudHMgb24gd2luZG93LCBvbmx5IGVmZmVjdGl2ZSBvbiB0eXBlIGBwYWdlYFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBzY3JvbGw/OiBib29sZWFuO1xuICAvKipcbiAgICogUmVzZXQgdG8gaW5pdGlhbCB2YWx1ZSB3aGVuIGB0b3VjaGVuZGAgZXZlbnQgZmlyZWRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlc2V0T25Ub3VjaEVuZHM/OiBib29sZWFuO1xuICAvKipcbiAgICogSW5pdGlhbCB2YWx1ZXNcbiAgICovXG4gIGluaXRpYWxWYWx1ZT86IFBvc2l0aW9uO1xufVxuaW50ZXJmYWNlIFVzZU1vdXNlUmV0dXJuIHtcbiAgeDogU2hhbGxvd1JlZjxudW1iZXI+O1xuICB5OiBTaGFsbG93UmVmPG51bWJlcj47XG4gIHNvdXJjZVR5cGU6IFNoYWxsb3dSZWY8VXNlTW91c2VTb3VyY2VUeXBlPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgbW91c2UgcG9zaXRpb24uXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlTW91c2VcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlTW91c2Uob3B0aW9ucz86IFVzZU1vdXNlT3B0aW9ucyk6IFVzZU1vdXNlUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlTW91c2VJbkVsZW1lbnQvaW5kZXguZC50c1xuaW50ZXJmYWNlIE1vdXNlSW5FbGVtZW50T3B0aW9ucyBleHRlbmRzIFVzZU1vdXNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGhhbmRsZSBtb3VzZSBldmVudHMgd2hlbiB0aGUgY3Vyc29yIGlzIG91dHNpZGUgdGhlIHRhcmdldCBlbGVtZW50LlxuICAgKiBXaGVuIGVuYWJsZWQsIG1vdXNlIHBvc2l0aW9uIHdpbGwgY29udGludWUgdG8gYmUgdHJhY2tlZCBldmVuIHdoZW4gb3V0c2lkZSB0aGUgZWxlbWVudCBib3VuZHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGhhbmRsZU91dHNpZGU/OiBib29sZWFuO1xuICAvKipcbiAgICogTGlzdGVuIHRvIHdpbmRvdyByZXNpemUgZXZlbnRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgd2luZG93U2Nyb2xsPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIExpc3RlbiB0byB3aW5kb3cgc2Nyb2xsIGV2ZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHdpbmRvd1Jlc2l6ZT86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgVXNlTW91c2VJbkVsZW1lbnRSZXR1cm4gZXh0ZW5kcyBVc2VNb3VzZVJldHVybiB7XG4gIGVsZW1lbnRYOiBTaGFsbG93UmVmPG51bWJlcj47XG4gIGVsZW1lbnRZOiBTaGFsbG93UmVmPG51bWJlcj47XG4gIGVsZW1lbnRQb3NpdGlvblg6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgZWxlbWVudFBvc2l0aW9uWTogU2hhbGxvd1JlZjxudW1iZXI+O1xuICBlbGVtZW50SGVpZ2h0OiBTaGFsbG93UmVmPG51bWJlcj47XG4gIGVsZW1lbnRXaWR0aDogU2hhbGxvd1JlZjxudW1iZXI+O1xuICBpc091dHNpZGU6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIFJlYWN0aXZlIG1vdXNlIHBvc2l0aW9uIHJlbGF0ZWQgdG8gYW4gZWxlbWVudC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VNb3VzZUluRWxlbWVudFxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VNb3VzZUluRWxlbWVudCh0YXJnZXQ/OiBNYXliZUVsZW1lbnRSZWYsIG9wdGlvbnM/OiBNb3VzZUluRWxlbWVudE9wdGlvbnMpOiB7XG4gIHg6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgeTogU2hhbGxvd1JlZjxudW1iZXI+O1xuICBzb3VyY2VUeXBlOiBTaGFsbG93UmVmPFVzZU1vdXNlU291cmNlVHlwZT47XG4gIGVsZW1lbnRYOiBTaGFsbG93UmVmPG51bWJlciwgbnVtYmVyPjtcbiAgZWxlbWVudFk6IFNoYWxsb3dSZWY8bnVtYmVyLCBudW1iZXI+O1xuICBlbGVtZW50UG9zaXRpb25YOiBTaGFsbG93UmVmPG51bWJlciwgbnVtYmVyPjtcbiAgZWxlbWVudFBvc2l0aW9uWTogU2hhbGxvd1JlZjxudW1iZXIsIG51bWJlcj47XG4gIGVsZW1lbnRIZWlnaHQ6IFNoYWxsb3dSZWY8bnVtYmVyLCBudW1iZXI+O1xuICBlbGVtZW50V2lkdGg6IFNoYWxsb3dSZWY8bnVtYmVyLCBudW1iZXI+O1xuICBpc091dHNpZGU6IFNoYWxsb3dSZWY8Ym9vbGVhbiwgYm9vbGVhbj47XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG59O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlTW91c2VQcmVzc2VkL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VNb3VzZVByZXNzZWRPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHtcbiAgLyoqXG4gICAqIExpc3RlbiB0byBgdG91Y2hzdGFydGAgYHRvdWNoZW5kYCBldmVudHNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgdG91Y2g/OiBib29sZWFuO1xuICAvKipcbiAgICogTGlzdGVuIHRvIGBkcmFnc3RhcnRgIGBkcm9wYCBhbmQgYGRyYWdlbmRgIGV2ZW50c1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBkcmFnPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFkZCBldmVudCBsaXN0ZW5lcnMgd2l0aCB0aGUgYGNhcHR1cmVgIG9wdGlvbiBzZXQgdG8gYHRydWVgXG4gICAqIChzZWUgW01ETl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXIjY2FwdHVyZSkpXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjYXB0dXJlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluaXRpYWwgdmFsdWVzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbml0aWFsVmFsdWU/OiBib29sZWFuO1xuICAvKipcbiAgICogRWxlbWVudCB0YXJnZXQgdG8gYmUgY2FwdHVyZSB0aGUgY2xpY2tcbiAgICovXG4gIHRhcmdldD86IE1heWJlQ29tcHV0ZWRFbGVtZW50UmVmO1xuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGlzIHByZXNzZWRcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICBvblByZXNzZWQ/OiAoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50IHwgRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGlzIHJlbGVhc2VkXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgb25SZWxlYXNlZD86IChldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQgfCBEcmFnRXZlbnQpID0+IHZvaWQ7XG59XG4vKiogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBVc2VNb3VzZVByZXNzZWRPcHRpb25zfSBpbnN0ZWFkICovXG50eXBlIE1vdXNlUHJlc3NlZE9wdGlvbnMgPSBVc2VNb3VzZVByZXNzZWRPcHRpb25zO1xuaW50ZXJmYWNlIFVzZU1vdXNlUHJlc3NlZFJldHVybiB7XG4gIHByZXNzZWQ6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4gIHNvdXJjZVR5cGU6IFNoYWxsb3dSZWY8VXNlTW91c2VTb3VyY2VUeXBlPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgbW91c2UgcHJlc3Npbmcgc3RhdGUuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlTW91c2VQcmVzc2VkXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZU1vdXNlUHJlc3NlZChvcHRpb25zPzogVXNlTW91c2VQcmVzc2VkT3B0aW9ucyk6IFVzZU1vdXNlUHJlc3NlZFJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZU11dGF0aW9uT2JzZXJ2ZXIvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZU11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIGV4dGVuZHMgTXV0YXRpb25PYnNlcnZlckluaXQsIENvbmZpZ3VyYWJsZVdpbmRvdyB7fVxuaW50ZXJmYWNlIFVzZU11dGF0aW9uT2JzZXJ2ZXJSZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG4gIHRha2VSZWNvcmRzOiAoKSA9PiBNdXRhdGlvblJlY29yZFtdIHwgdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBXYXRjaCBmb3IgY2hhbmdlcyBiZWluZyBtYWRlIHRvIHRoZSBET00gdHJlZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VNdXRhdGlvbk9ic2VydmVyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9NdXRhdGlvbk9ic2VydmVyIE11dGF0aW9uT2JzZXJ2ZXIgTUROXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0gY2FsbGJhY2tcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcih0YXJnZXQ6IE1heWJlQ29tcHV0ZWRFbGVtZW50UmVmIHwgTWF5YmVDb21wdXRlZEVsZW1lbnRSZWZbXSB8IE1heWJlUmVmT3JHZXR0ZXI8TWF5YmVFbGVtZW50W10+LCBjYWxsYmFjazogTXV0YXRpb25DYWxsYmFjaywgb3B0aW9ucz86IFVzZU11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zKTogVXNlTXV0YXRpb25PYnNlcnZlclJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZU5hdmlnYXRvckxhbmd1YWdlL2luZGV4LmQudHNcbmludGVyZmFjZSBOYXZpZ2F0b3JMYW5ndWFnZVN0YXRlIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICAvKipcbiAgICpcbiAgICogSVNPIDYzOS0xIHN0YW5kYXJkIExhbmd1YWdlIENvZGVcbiAgICpcbiAgICogQGluZm8gVGhlIGRldGVjdGVkIHVzZXIgYWdlbnQgbGFuZ3VhZ2UgcHJlZmVyZW5jZSBhcyBhIGxhbmd1YWdlIHRhZ1xuICAgKiAod2hpY2ggaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIGEgXCJsb2NhbGUgaWRlbnRpZmllclwiKS5cbiAgICogVGhpcyBjb25zaXN0cyBvZiBhIDItMyBsZXR0ZXIgYmFzZSBsYW5ndWFnZSB0YWcgdGhhdCBpbmRpY2F0ZXMgYVxuICAgKiBsYW5ndWFnZSwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhZGRpdGlvbmFsIHN1YnRhZ3Mgc2VwYXJhdGVkIGJ5XG4gICAqICctJy4gVGhlIG1vc3QgY29tbW9uIGV4dHJhIGluZm9ybWF0aW9uIGlzIHRoZSBjb3VudHJ5IG9yIHJlZ2lvblxuICAgKiB2YXJpYW50IChsaWtlICdlbi1VUycgb3IgJ2ZyLUNBJykuXG4gICAqXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cuaXNvLm9yZy9pc28tNjM5LWxhbmd1YWdlLWNvZGVzLmh0bWxcbiAgICogQHNlZSBodHRwczovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9pc282MzktMi9waHAvY29kZV9saXN0LnBocFxuICAgKlxuICAgKi9cbiAgbGFuZ3VhZ2U6IFNoYWxsb3dSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbn1cbmludGVyZmFjZSBVc2VOYXZpZ2F0b3JMYW5ndWFnZU9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge31cbnR5cGUgVXNlTmF2aWdhdG9yTGFuZ3VhZ2VSZXR1cm4gPSBSZWFkb25seTxOYXZpZ2F0b3JMYW5ndWFnZVN0YXRlPjtcbi8qKlxuICpcbiAqIFJlYWN0aXZlIHVzZU5hdmlnYXRvckxhbmd1YWdlXG4gKlxuICogRGV0ZWN0cyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHVzZXIgbGFuZ3VhZ2UgYW5kIHJldHVybnMgYSByZWFjdGl2ZSBsYW5ndWFnZVxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlTmF2aWdhdG9yTGFuZ3VhZ2VcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZU5hdmlnYXRvckxhbmd1YWdlKG9wdGlvbnM/OiBVc2VOYXZpZ2F0b3JMYW5ndWFnZU9wdGlvbnMpOiBVc2VOYXZpZ2F0b3JMYW5ndWFnZVJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZU5ldHdvcmsvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZU5ldHdvcmtPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHt9XG50eXBlIE5ldHdvcmtUeXBlID0gJ2JsdWV0b290aCcgfCAnY2VsbHVsYXInIHwgJ2V0aGVybmV0JyB8ICdub25lJyB8ICd3aWZpJyB8ICd3aW1heCcgfCAnb3RoZXInIHwgJ3Vua25vd24nO1xudHlwZSBOZXR3b3JrRWZmZWN0aXZlVHlwZSA9ICdzbG93LTJnJyB8ICcyZycgfCAnM2cnIHwgJzRnJyB8IHVuZGVmaW5lZDtcbmludGVyZmFjZSBOZXR3b3JrU3RhdGUgZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIC8qKlxuICAgKiBJZiB0aGUgdXNlciBpcyBjdXJyZW50bHkgY29ubmVjdGVkLlxuICAgKi9cbiAgaXNPbmxpbmU6IFJlYWRvbmx5PFNoYWxsb3dSZWY8Ym9vbGVhbj4+O1xuICAvKipcbiAgICogVGhlIHRpbWUgc2luY2UgdGhlIHVzZXIgd2FzIGxhc3QgY29ubmVjdGVkLlxuICAgKi9cbiAgb2ZmbGluZUF0OiBSZWFkb25seTxTaGFsbG93UmVmPG51bWJlciB8IHVuZGVmaW5lZD4+O1xuICAvKipcbiAgICogQXQgdGhpcyB0aW1lLCBpZiB0aGUgdXNlciBpcyBvZmZsaW5lIGFuZCByZWNvbm5lY3RzXG4gICAqL1xuICBvbmxpbmVBdDogUmVhZG9ubHk8U2hhbGxvd1JlZjxudW1iZXIgfCB1bmRlZmluZWQ+PjtcbiAgLyoqXG4gICAqIFRoZSBkb3dubG9hZCBzcGVlZCBpbiBNYnBzLlxuICAgKi9cbiAgZG93bmxpbms6IFJlYWRvbmx5PFNoYWxsb3dSZWY8bnVtYmVyIHwgdW5kZWZpbmVkPj47XG4gIC8qKlxuICAgKiBUaGUgbWF4IHJlYWNoYWJsZSBkb3dubG9hZCBzcGVlZCBpbiBNYnBzLlxuICAgKi9cbiAgZG93bmxpbmtNYXg6IFJlYWRvbmx5PFNoYWxsb3dSZWY8bnVtYmVyIHwgdW5kZWZpbmVkPj47XG4gIC8qKlxuICAgKiBUaGUgZGV0ZWN0ZWQgZWZmZWN0aXZlIHNwZWVkIHR5cGUuXG4gICAqL1xuICBlZmZlY3RpdmVUeXBlOiBSZWFkb25seTxTaGFsbG93UmVmPE5ldHdvcmtFZmZlY3RpdmVUeXBlIHwgdW5kZWZpbmVkPj47XG4gIC8qKlxuICAgKiBUaGUgZXN0aW1hdGVkIGVmZmVjdGl2ZSByb3VuZC10cmlwIHRpbWUgb2YgdGhlIGN1cnJlbnQgY29ubmVjdGlvbi5cbiAgICovXG4gIHJ0dDogUmVhZG9ubHk8U2hhbGxvd1JlZjxudW1iZXIgfCB1bmRlZmluZWQ+PjtcbiAgLyoqXG4gICAqIElmIHRoZSB1c2VyIGFjdGl2YXRlZCBkYXRhIHNhdmVyIG1vZGUuXG4gICAqL1xuICBzYXZlRGF0YTogUmVhZG9ubHk8U2hhbGxvd1JlZjxib29sZWFuIHwgdW5kZWZpbmVkPj47XG4gIC8qKlxuICAgKiBUaGUgZGV0ZWN0ZWQgY29ubmVjdGlvbi9uZXR3b3JrIHR5cGUuXG4gICAqL1xuICB0eXBlOiBSZWFkb25seTxTaGFsbG93UmVmPE5ldHdvcmtUeXBlPj47XG59XG50eXBlIFVzZU5ldHdvcmtSZXR1cm4gPSBSZWFkb25seTxOZXR3b3JrU3RhdGU+O1xuLyoqXG4gKiBSZWFjdGl2ZSBOZXR3b3JrIHN0YXR1cy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VOZXR3b3JrXG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlTmV0d29yayhvcHRpb25zPzogVXNlTmV0d29ya09wdGlvbnMpOiBVc2VOZXR3b3JrUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlTm93L2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VOb3dPcHRpb25zPENvbnRyb2xzIGV4dGVuZHMgYm9vbGVhbj4gZXh0ZW5kcyBDb25maWd1cmFibGVTY2hlZHVsZXIge1xuICAvKipcbiAgICogRXhwb3NlIG1vcmUgY29udHJvbHNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbnRyb2xzPzogQ29udHJvbHM7XG4gIC8qKlxuICAgKiBTdGFydCB0aGUgY2xvY2sgaW1tZWRpYXRlbHlcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBgc2NoZWR1bGVyYCBvcHRpb24gaW5zdGVhZFxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBpbW1lZGlhdGU/OiBib29sZWFuO1xuICAvKipcbiAgICogVXBkYXRlIGludGVydmFsIGluIG1pbGxpc2Vjb25kcywgb3IgdXNlIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIGBzY2hlZHVsZXJgIG9wdGlvbiBpbnN0ZWFkXG4gICAqIEBkZWZhdWx0IHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgKi9cbiAgaW50ZXJ2YWw/OiAncmVxdWVzdEFuaW1hdGlvbkZyYW1lJyB8IG51bWJlcjtcbn1cbnR5cGUgVXNlTm93UmV0dXJuPENvbnRyb2xzIGV4dGVuZHMgYm9vbGVhbj4gPSBDb250cm9scyBleHRlbmRzIHRydWUgPyAoe1xuICBub3c6IFJlZjxEYXRlPjtcbn0gJiBQYXVzYWJsZSkgOiBSZWY8RGF0ZT47XG4vKipcbiAqIFJlYWN0aXZlIGN1cnJlbnQgRGF0ZSBpbnN0YW5jZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VOb3dcbiAqIEBwYXJhbSBvcHRpb25zXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VOb3cob3B0aW9ucz86IFVzZU5vd09wdGlvbnM8ZmFsc2U+KTogUmVmPERhdGU+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VOb3cob3B0aW9uczogVXNlTm93T3B0aW9uczx0cnVlPik6IHtcbiAgbm93OiBSZWY8RGF0ZT47XG59ICYgUGF1c2FibGU7XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VPYmplY3RVcmwvaW5kZXguZC50c1xuLyoqXG4gKiBSZWFjdGl2ZSBVUkwgcmVwcmVzZW50aW5nIGFuIG9iamVjdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VPYmplY3RVcmxcbiAqIEBwYXJhbSBvYmplY3RcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VPYmplY3RVcmwob2JqZWN0OiBNYXliZVJlZk9yR2V0dGVyPEJsb2IgfCBNZWRpYVNvdXJjZSB8IG51bGwgfCB1bmRlZmluZWQ+KTogUmVhZG9ubHk8dnVlMC5SZWY8c3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJpbmcgfCB1bmRlZmluZWQ+Pjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZU9mZnNldFBhZ2luYXRpb24vaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZU9mZnNldFBhZ2luYXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRvdGFsIG51bWJlciBvZiBpdGVtcy5cbiAgICovXG4gIHRvdGFsPzogTWF5YmVSZWZPckdldHRlcjxudW1iZXI+O1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBpdGVtcyB0byBkaXNwbGF5IHBlciBwYWdlLlxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgcGFnZVNpemU/OiBNYXliZVJlZk9yR2V0dGVyPG51bWJlcj47XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBwYWdlIG51bWJlci5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcGFnZT86IE1heWJlUmVmPG51bWJlcj47XG4gIC8qKlxuICAgKiBDYWxsYmFjayB3aGVuIHRoZSBgcGFnZWAgY2hhbmdlLlxuICAgKi9cbiAgb25QYWdlQ2hhbmdlPzogKHJldHVyblZhbHVlOiBVbndyYXBOZXN0ZWRSZWZzPFVzZU9mZnNldFBhZ2luYXRpb25SZXR1cm4+KSA9PiB1bmtub3duO1xuICAvKipcbiAgICogQ2FsbGJhY2sgd2hlbiB0aGUgYHBhZ2VTaXplYCBjaGFuZ2UuXG4gICAqL1xuICBvblBhZ2VTaXplQ2hhbmdlPzogKHJldHVyblZhbHVlOiBVbndyYXBOZXN0ZWRSZWZzPFVzZU9mZnNldFBhZ2luYXRpb25SZXR1cm4+KSA9PiB1bmtub3duO1xuICAvKipcbiAgICogQ2FsbGJhY2sgd2hlbiB0aGUgYHBhZ2VDb3VudGAgY2hhbmdlLlxuICAgKi9cbiAgb25QYWdlQ291bnRDaGFuZ2U/OiAocmV0dXJuVmFsdWU6IFVud3JhcE5lc3RlZFJlZnM8VXNlT2Zmc2V0UGFnaW5hdGlvblJldHVybj4pID0+IHVua25vd247XG59XG5pbnRlcmZhY2UgVXNlT2Zmc2V0UGFnaW5hdGlvblJldHVybiB7XG4gIGN1cnJlbnRQYWdlOiBSZWY8bnVtYmVyPjtcbiAgY3VycmVudFBhZ2VTaXplOiBSZWY8bnVtYmVyPjtcbiAgcGFnZUNvdW50OiBDb21wdXRlZFJlZjxudW1iZXI+O1xuICBpc0ZpcnN0UGFnZTogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gIGlzTGFzdFBhZ2U6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICBwcmV2OiAoKSA9PiB2b2lkO1xuICBuZXh0OiAoKSA9PiB2b2lkO1xufVxudHlwZSBVc2VPZmZzZXRQYWdpbmF0aW9uSW5maW5pdHlQYWdlUmV0dXJuID0gT21pdDxVc2VPZmZzZXRQYWdpbmF0aW9uUmV0dXJuLCAnaXNMYXN0UGFnZSc+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VPZmZzZXRQYWdpbmF0aW9uKG9wdGlvbnM6IE9taXQ8VXNlT2Zmc2V0UGFnaW5hdGlvbk9wdGlvbnMsICd0b3RhbCc+KTogVXNlT2Zmc2V0UGFnaW5hdGlvbkluZmluaXR5UGFnZVJldHVybjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlT2Zmc2V0UGFnaW5hdGlvbihvcHRpb25zOiBVc2VPZmZzZXRQYWdpbmF0aW9uT3B0aW9ucyk6IFVzZU9mZnNldFBhZ2luYXRpb25SZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VPbmxpbmUvaW5kZXguZC50c1xuLyoqXG4gKiBSZWFjdGl2ZSBvbmxpbmUgc3RhdGUuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlT25saW5lXG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlT25saW5lKG9wdGlvbnM/OiBDb25maWd1cmFibGVXaW5kb3cpOiBSZWFkb25seTx2dWUwLlNoYWxsb3dSZWY8Ym9vbGVhbj4+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlUGFnZUxlYXZlL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VQYWdlTGVhdmVPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHt9XG50eXBlIFVzZVBhZ2VMZWF2ZVJldHVybiA9IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4vKipcbiAqIFJlYWN0aXZlIHN0YXRlIHRvIHNob3cgd2hldGhlciBtb3VzZSBsZWF2ZXMgdGhlIHBhZ2UuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlUGFnZUxlYXZlXG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlUGFnZUxlYXZlKG9wdGlvbnM/OiBVc2VQYWdlTGVhdmVPcHRpb25zKTogVXNlUGFnZUxlYXZlUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlUGFyYWxsYXgvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVBhcmFsbGF4T3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIGRldmljZU9yaWVudGF0aW9uVGlsdEFkanVzdD86IChpOiBudW1iZXIpID0+IG51bWJlcjtcbiAgZGV2aWNlT3JpZW50YXRpb25Sb2xsQWRqdXN0PzogKGk6IG51bWJlcikgPT4gbnVtYmVyO1xuICBtb3VzZVRpbHRBZGp1c3Q/OiAoaTogbnVtYmVyKSA9PiBudW1iZXI7XG4gIG1vdXNlUm9sbEFkanVzdD86IChpOiBudW1iZXIpID0+IG51bWJlcjtcbn1cbmludGVyZmFjZSBVc2VQYXJhbGxheFJldHVybiB7XG4gIC8qKlxuICAgKiBSb2xsIHZhbHVlLiBTY2FsZWQgdG8gYC0wLjUgfiAwLjVgXG4gICAqL1xuICByb2xsOiBDb21wdXRlZFJlZjxudW1iZXI+O1xuICAvKipcbiAgICogVGlsdCB2YWx1ZS4gU2NhbGVkIHRvIGAtMC41IH4gMC41YFxuICAgKi9cbiAgdGlsdDogQ29tcHV0ZWRSZWY8bnVtYmVyPjtcbiAgLyoqXG4gICAqIFNlbnNvciBzb3VyY2UsIGNhbiBiZSBgbW91c2VgIG9yIGBkZXZpY2VPcmllbnRhdGlvbmBcbiAgICovXG4gIHNvdXJjZTogQ29tcHV0ZWRSZWY8J2RldmljZU9yaWVudGF0aW9uJyB8ICdtb3VzZSc+O1xufVxuLyoqXG4gKiBDcmVhdGUgcGFyYWxsYXggZWZmZWN0IGVhc2lseS4gSXQgdXNlcyBgdXNlRGV2aWNlT3JpZW50YXRpb25gIGFuZCBmYWxsYmFjayB0byBgdXNlTW91c2VgXG4gKiBpZiBvcmllbnRhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlUGFyYWxsYXgodGFyZ2V0OiBNYXliZUVsZW1lbnRSZWYsIG9wdGlvbnM/OiBVc2VQYXJhbGxheE9wdGlvbnMpOiBVc2VQYXJhbGxheFJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVBhcmVudEVsZW1lbnQvaW5kZXguZC50c1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VQYXJlbnRFbGVtZW50KGVsZW1lbnQ/OiBNYXliZVJlZk9yR2V0dGVyPEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQ+KTogUmVhZG9ubHk8U2hhbGxvd1JlZjxIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkPj47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VQZXJmb3JtYW5jZU9ic2VydmVyL2luZGV4LmQudHNcbnR5cGUgVXNlUGVyZm9ybWFuY2VPYnNlcnZlck9wdGlvbnMgPSBQZXJmb3JtYW5jZU9ic2VydmVySW5pdCAmIENvbmZpZ3VyYWJsZVdpbmRvdyAmIHtcbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBvYnNlcnZlciBpbW1lZGlhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGltbWVkaWF0ZT86IGJvb2xlYW47XG59O1xuLyoqXG4gKiBPYnNlcnZlIHBlcmZvcm1hbmNlIG1ldHJpY3MuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlUGVyZm9ybWFuY2VPYnNlcnZlclxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VQZXJmb3JtYW5jZU9ic2VydmVyKG9wdGlvbnM6IFVzZVBlcmZvcm1hbmNlT2JzZXJ2ZXJPcHRpb25zLCBjYWxsYmFjazogUGVyZm9ybWFuY2VPYnNlcnZlckNhbGxiYWNrKToge1xuICBpc1N1cHBvcnRlZDogVXNlU3VwcG9ydGVkUmV0dXJuO1xuICBzdGFydDogKCkgPT4gdm9pZDtcbiAgc3RvcDogKCkgPT4gdm9pZDtcbn07XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VQZXJtaXNzaW9uL2luZGV4LmQudHNcbnR5cGUgRGVzY3JpcHRvck5hbWVQb2x5ZmlsbCA9ICdhY2NlbGVyb21ldGVyJyB8ICdhY2Nlc3NpYmlsaXR5LWV2ZW50cycgfCAnYW1iaWVudC1saWdodC1zZW5zb3InIHwgJ2JhY2tncm91bmQtc3luYycgfCAnY2FtZXJhJyB8ICdjbGlwYm9hcmQtcmVhZCcgfCAnY2xpcGJvYXJkLXdyaXRlJyB8ICdneXJvc2NvcGUnIHwgJ21hZ25ldG9tZXRlcicgfCAnbWljcm9waG9uZScgfCAnbm90aWZpY2F0aW9ucycgfCAncGF5bWVudC1oYW5kbGVyJyB8ICdwZXJzaXN0ZW50LXN0b3JhZ2UnIHwgJ3B1c2gnIHwgJ3NwZWFrZXInIHwgJ2xvY2FsLWZvbnRzJztcbnR5cGUgR2VuZXJhbFBlcm1pc3Npb25EZXNjcmlwdG9yID0gUGVybWlzc2lvbkRlc2NyaXB0b3IgfCB7XG4gIG5hbWU6IERlc2NyaXB0b3JOYW1lUG9seWZpbGw7XG59O1xuaW50ZXJmYWNlIFVzZVBlcm1pc3Npb25PcHRpb25zPENvbnRyb2xzIGV4dGVuZHMgYm9vbGVhbj4gZXh0ZW5kcyBDb25maWd1cmFibGVOYXZpZ2F0b3Ige1xuICAvKipcbiAgICogRXhwb3NlIG1vcmUgY29udHJvbHNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbnRyb2xzPzogQ29udHJvbHM7XG59XG50eXBlIFVzZVBlcm1pc3Npb25SZXR1cm4gPSBSZWFkb25seTxTaGFsbG93UmVmPFBlcm1pc3Npb25TdGF0ZSB8IHVuZGVmaW5lZD4+O1xuaW50ZXJmYWNlIFVzZVBlcm1pc3Npb25SZXR1cm5XaXRoQ29udHJvbHMgZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIHN0YXRlOiBVc2VQZXJtaXNzaW9uUmV0dXJuO1xuICBxdWVyeTogKCkgPT4gUHJvbWlzZTxQZXJtaXNzaW9uU3RhdHVzIHwgdW5kZWZpbmVkPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgUGVybWlzc2lvbnMgQVBJLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVBlcm1pc3Npb25cbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVBlcm1pc3Npb24ocGVybWlzc2lvbkRlc2M6IEdlbmVyYWxQZXJtaXNzaW9uRGVzY3JpcHRvciB8IEdlbmVyYWxQZXJtaXNzaW9uRGVzY3JpcHRvclsnbmFtZSddLCBvcHRpb25zPzogVXNlUGVybWlzc2lvbk9wdGlvbnM8ZmFsc2U+KTogVXNlUGVybWlzc2lvblJldHVybjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlUGVybWlzc2lvbihwZXJtaXNzaW9uRGVzYzogR2VuZXJhbFBlcm1pc3Npb25EZXNjcmlwdG9yIHwgR2VuZXJhbFBlcm1pc3Npb25EZXNjcmlwdG9yWyduYW1lJ10sIG9wdGlvbnM6IFVzZVBlcm1pc3Npb25PcHRpb25zPHRydWU+KTogVXNlUGVybWlzc2lvblJldHVybldpdGhDb250cm9scztcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVBvaW50ZXIvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVBvaW50ZXJTdGF0ZSBleHRlbmRzIFBvc2l0aW9uIHtcbiAgcHJlc3N1cmU6IG51bWJlcjtcbiAgcG9pbnRlcklkOiBudW1iZXI7XG4gIHRpbHRYOiBudW1iZXI7XG4gIHRpbHRZOiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICB0d2lzdDogbnVtYmVyO1xuICBwb2ludGVyVHlwZTogUG9pbnRlclR5cGUgfCBudWxsO1xufVxuaW50ZXJmYWNlIFVzZVBvaW50ZXJPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHtcbiAgLyoqXG4gICAqIFBvaW50ZXIgdHlwZXMgdGhhdCBsaXN0ZW4gdG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IFsnbW91c2UnLCAndG91Y2gnLCAncGVuJ11cbiAgICovXG4gIHBvaW50ZXJUeXBlcz86IFBvaW50ZXJUeXBlW107XG4gIC8qKlxuICAgKiBJbml0aWFsIHZhbHVlc1xuICAgKi9cbiAgaW5pdGlhbFZhbHVlPzogTWF5YmVSZWY8UGFydGlhbDxVc2VQb2ludGVyU3RhdGU+PjtcbiAgLyoqXG4gICAqIEBkZWZhdWx0IHdpbmRvd1xuICAgKi9cbiAgdGFyZ2V0PzogTWF5YmVSZWY8RXZlbnRUYXJnZXQgfCBudWxsIHwgdW5kZWZpbmVkPiB8IERvY3VtZW50IHwgV2luZG93O1xufVxuaW50ZXJmYWNlIFVzZVBvaW50ZXJSZXR1cm4ge1xuICBwcmVzc3VyZTogUmVmPG51bWJlcj47XG4gIHBvaW50ZXJJZDogUmVmPG51bWJlcj47XG4gIHRpbHRYOiBSZWY8bnVtYmVyPjtcbiAgdGlsdFk6IFJlZjxudW1iZXI+O1xuICB3aWR0aDogUmVmPG51bWJlcj47XG4gIGhlaWdodDogUmVmPG51bWJlcj47XG4gIHR3aXN0OiBSZWY8bnVtYmVyPjtcbiAgcG9pbnRlclR5cGU6IFJlZjxQb2ludGVyVHlwZSB8IG51bGw+O1xuICB4OiBSZWY8bnVtYmVyPjtcbiAgeTogUmVmPG51bWJlcj47XG4gIGlzSW5zaWRlOiBTaGFsbG93UmVmPGJvb2xlYW4+O1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBwb2ludGVyIHN0YXRlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVBvaW50ZXJcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlUG9pbnRlcihvcHRpb25zPzogVXNlUG9pbnRlck9wdGlvbnMpOiBVc2VQb2ludGVyUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlUG9pbnRlckxvY2svaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVBvaW50ZXJMb2NrT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZURvY3VtZW50IHt9XG5pbnRlcmZhY2UgVXNlUG9pbnRlckxvY2tSZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIGVsZW1lbnQ6IFNoYWxsb3dSZWY8TWF5YmVFbGVtZW50PjtcbiAgdHJpZ2dlckVsZW1lbnQ6IFNoYWxsb3dSZWY8TWF5YmVFbGVtZW50PjtcbiAgbG9jazogKGU6IE1heWJlRWxlbWVudFJlZiB8IEV2ZW50KSA9PiBQcm9taXNlPE1heWJlRWxlbWVudD47XG4gIHVubG9jazogKCkgPT4gUHJvbWlzZTxib29sZWFuPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgcG9pbnRlciBsb2NrLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVBvaW50ZXJMb2NrXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlUG9pbnRlckxvY2sodGFyZ2V0PzogTWF5YmVFbGVtZW50UmVmLCBvcHRpb25zPzogVXNlUG9pbnRlckxvY2tPcHRpb25zKTogVXNlUG9pbnRlckxvY2tSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VTd2lwZS9pbmRleC5kLnRzXG50eXBlIFVzZVN3aXBlRGlyZWN0aW9uID0gJ3VwJyB8ICdkb3duJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnbm9uZSc7XG5pbnRlcmZhY2UgVXNlU3dpcGVPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHtcbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGV2ZW50cyBhcyBwYXNzaXZlXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHBhc3NpdmU/OiBib29sZWFuO1xuICAvKipcbiAgICogQGRlZmF1bHQgNTBcbiAgICovXG4gIHRocmVzaG9sZD86IG51bWJlcjtcbiAgLyoqXG4gICAqIENhbGxiYWNrIG9uIHN3aXBlIHN0YXJ0XG4gICAqL1xuICBvblN3aXBlU3RhcnQ/OiAoZTogVG91Y2hFdmVudCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENhbGxiYWNrIG9uIHN3aXBlIG1vdmVzXG4gICAqL1xuICBvblN3aXBlPzogKGU6IFRvdWNoRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsYmFjayBvbiBzd2lwZSBlbmRzXG4gICAqL1xuICBvblN3aXBlRW5kPzogKGU6IFRvdWNoRXZlbnQsIGRpcmVjdGlvbjogVXNlU3dpcGVEaXJlY3Rpb24pID0+IHZvaWQ7XG59XG5pbnRlcmZhY2UgVXNlU3dpcGVSZXR1cm4ge1xuICBpc1N3aXBpbmc6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4gIGRpcmVjdGlvbjogQ29tcHV0ZWRSZWY8VXNlU3dpcGVEaXJlY3Rpb24+O1xuICBjb29yZHNTdGFydDogUmVhZG9ubHk8UG9zaXRpb24+O1xuICBjb29yZHNFbmQ6IFJlYWRvbmx5PFBvc2l0aW9uPjtcbiAgbGVuZ3RoWDogQ29tcHV0ZWRSZWY8bnVtYmVyPjtcbiAgbGVuZ3RoWTogQ29tcHV0ZWRSZWY8bnVtYmVyPjtcbiAgc3RvcDogKCkgPT4gdm9pZDtcbn1cbi8qKlxuICogUmVhY3RpdmUgc3dpcGUgZGV0ZWN0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVN3aXBlXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVN3aXBlKHRhcmdldDogTWF5YmVSZWZPckdldHRlcjxFdmVudFRhcmdldCB8IG51bGwgfCB1bmRlZmluZWQ+LCBvcHRpb25zPzogVXNlU3dpcGVPcHRpb25zKTogVXNlU3dpcGVSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VQb2ludGVyU3dpcGUvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVBvaW50ZXJTd2lwZU9wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgNTBcbiAgICovXG4gIHRocmVzaG9sZD86IG51bWJlcjtcbiAgLyoqXG4gICAqIENhbGxiYWNrIG9uIHN3aXBlIHN0YXJ0LlxuICAgKi9cbiAgb25Td2lwZVN0YXJ0PzogKGU6IFBvaW50ZXJFdmVudCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENhbGxiYWNrIG9uIHN3aXBlIG1vdmUuXG4gICAqL1xuICBvblN3aXBlPzogKGU6IFBvaW50ZXJFdmVudCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENhbGxiYWNrIG9uIHN3aXBlIGVuZC5cbiAgICovXG4gIG9uU3dpcGVFbmQ/OiAoZTogUG9pbnRlckV2ZW50LCBkaXJlY3Rpb246IFVzZVN3aXBlRGlyZWN0aW9uKSA9PiB2b2lkO1xuICAvKipcbiAgICogUG9pbnRlciB0eXBlcyB0byBsaXN0ZW4gdG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IFsnbW91c2UnLCAndG91Y2gnLCAncGVuJ11cbiAgICovXG4gIHBvaW50ZXJUeXBlcz86IFBvaW50ZXJUeXBlW107XG4gIC8qKlxuICAgKiBEaXNhYmxlIHRleHQgc2VsZWN0aW9uIG9uIHN3aXBlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVRleHRTZWxlY3Q/OiBib29sZWFuO1xufVxuaW50ZXJmYWNlIFVzZVBvaW50ZXJTd2lwZVJldHVybiB7XG4gIHJlYWRvbmx5IGlzU3dpcGluZzogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgZGlyZWN0aW9uOiBSZWFkb25seTxTaGFsbG93UmVmPFVzZVN3aXBlRGlyZWN0aW9uPj47XG4gIHJlYWRvbmx5IHBvc1N0YXJ0OiBQb3NpdGlvbjtcbiAgcmVhZG9ubHkgcG9zRW5kOiBQb3NpdGlvbjtcbiAgZGlzdGFuY2VYOiBSZWFkb25seTxDb21wdXRlZFJlZjxudW1iZXI+PjtcbiAgZGlzdGFuY2VZOiBSZWFkb25seTxDb21wdXRlZFJlZjxudW1iZXI+PjtcbiAgc3RvcDogKCkgPT4gdm9pZDtcbn1cbi8qKlxuICogUmVhY3RpdmUgc3dpcGUgZGV0ZWN0aW9uIGJhc2VkIG9uIFBvaW50ZXJFdmVudHMuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlUG9pbnRlclN3aXBlXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVBvaW50ZXJTd2lwZSh0YXJnZXQ6IE1heWJlUmVmT3JHZXR0ZXI8SFRNTEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkPiwgb3B0aW9ucz86IFVzZVBvaW50ZXJTd2lwZU9wdGlvbnMpOiBVc2VQb2ludGVyU3dpcGVSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VQcmVmZXJyZWRDb2xvclNjaGVtZS9pbmRleC5kLnRzXG50eXBlIENvbG9yU2NoZW1lVHlwZSA9ICdkYXJrJyB8ICdsaWdodCcgfCAnbm8tcHJlZmVyZW5jZSc7XG4vKipcbiAqIFJlYWN0aXZlIHByZWZlcnMtY29sb3Itc2NoZW1lIG1lZGlhIHF1ZXJ5LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVByZWZlcnJlZENvbG9yU2NoZW1lXG4gKiBAcGFyYW0gW29wdGlvbnNdXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VQcmVmZXJyZWRDb2xvclNjaGVtZShvcHRpb25zPzogQ29uZmlndXJhYmxlV2luZG93KTogdnVlMC5Db21wdXRlZFJlZjxDb2xvclNjaGVtZVR5cGU+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlUHJlZmVycmVkQ29udHJhc3QvaW5kZXguZC50c1xudHlwZSBDb250cmFzdFR5cGUgPSAnbW9yZScgfCAnbGVzcycgfCAnY3VzdG9tJyB8ICduby1wcmVmZXJlbmNlJztcbi8qKlxuICogUmVhY3RpdmUgcHJlZmVycy1jb250cmFzdCBtZWRpYSBxdWVyeS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VQcmVmZXJyZWRDb250cmFzdFxuICogQHBhcmFtIFtvcHRpb25zXVxuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlUHJlZmVycmVkQ29udHJhc3Qob3B0aW9ucz86IENvbmZpZ3VyYWJsZVdpbmRvdyk6IHZ1ZTAuQ29tcHV0ZWRSZWY8Q29udHJhc3RUeXBlPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVByZWZlcnJlZERhcmsvaW5kZXguZC50c1xuLyoqXG4gKiBSZWFjdGl2ZSBkYXJrIHRoZW1lIHByZWZlcmVuY2UuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlUHJlZmVycmVkRGFya1xuICogQHBhcmFtIFtvcHRpb25zXVxuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlUHJlZmVycmVkRGFyayhvcHRpb25zPzogQ29uZmlndXJhYmxlV2luZG93KTogdnVlMC5Db21wdXRlZFJlZjxib29sZWFuPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVByZWZlcnJlZExhbmd1YWdlcy9pbmRleC5kLnRzXG4vKipcbiAqIFJlYWN0aXZlIE5hdmlnYXRvciBMYW5ndWFnZXMuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlUHJlZmVycmVkTGFuZ3VhZ2VzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlUHJlZmVycmVkTGFuZ3VhZ2VzKG9wdGlvbnM/OiBDb25maWd1cmFibGVXaW5kb3cpOiBTaGFsbG93UmVmPHJlYWRvbmx5IHN0cmluZ1tdPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVByZWZlcnJlZFJlZHVjZWRNb3Rpb24vaW5kZXguZC50c1xudHlwZSBSZWR1Y2VkTW90aW9uVHlwZSA9ICdyZWR1Y2UnIHwgJ25vLXByZWZlcmVuY2UnO1xuLyoqXG4gKiBSZWFjdGl2ZSBwcmVmZXJzLXJlZHVjZWQtbW90aW9uIG1lZGlhIHF1ZXJ5LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVByZWZlcnJlZFJlZHVjZWRNb3Rpb25cbiAqIEBwYXJhbSBbb3B0aW9uc11cbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVByZWZlcnJlZFJlZHVjZWRNb3Rpb24ob3B0aW9ucz86IENvbmZpZ3VyYWJsZVdpbmRvdyk6IHZ1ZTAuQ29tcHV0ZWRSZWY8UmVkdWNlZE1vdGlvblR5cGU+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlUHJlZmVycmVkUmVkdWNlZFRyYW5zcGFyZW5jeS9pbmRleC5kLnRzXG50eXBlIFJlZHVjZWRUcmFuc3BhcmVuY3lUeXBlID0gJ3JlZHVjZScgfCAnbm8tcHJlZmVyZW5jZSc7XG4vKipcbiAqIFJlYWN0aXZlIHByZWZlcnMtcmVkdWNlZC10cmFuc3BhcmVuY3kgbWVkaWEgcXVlcnkuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlUHJlZmVycmVkUmVkdWNlZFRyYW5zcGFyZW5jeVxuICogQHBhcmFtIFtvcHRpb25zXVxuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlUHJlZmVycmVkUmVkdWNlZFRyYW5zcGFyZW5jeShvcHRpb25zPzogQ29uZmlndXJhYmxlV2luZG93KTogdnVlMC5Db21wdXRlZFJlZjxSZWR1Y2VkVHJhbnNwYXJlbmN5VHlwZT47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VQcmV2aW91cy9pbmRleC5kLnRzXG4vKipcbiAqIEhvbGRzIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiBhIHJlZi5cbiAqXG4gKiBAc2VlICAge0BsaW5rIGh0dHBzOi8vdnVldXNlLm9yZy91c2VQcmV2aW91c31cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VQcmV2aW91czxUPih2YWx1ZTogTWF5YmVSZWZPckdldHRlcjxUPik6IFJlYWRvbmx5PFNoYWxsb3dSZWY8VCB8IHVuZGVmaW5lZD4+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VQcmV2aW91czxUPih2YWx1ZTogTWF5YmVSZWZPckdldHRlcjxUPiwgaW5pdGlhbFZhbHVlOiBUKTogUmVhZG9ubHk8U2hhbGxvd1JlZjxUPj47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VSYWZGbi9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlUmFmRm5DYWxsYmFja0FyZ3VtZW50cyB7XG4gIC8qKlxuICAgKiBUaW1lIGVsYXBzZWQgYmV0d2VlbiB0aGlzIGFuZCB0aGUgbGFzdCBmcmFtZS5cbiAgICovXG4gIGRlbHRhOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaW1lIGVsYXBzZWQgc2luY2UgdGhlIGNyZWF0aW9uIG9mIHRoZSB3ZWIgcGFnZS4gU2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRE9NSGlnaFJlc1RpbWVTdGFtcCN0aGVfdGltZV9vcmlnaW4gVGltZSBvcmlnaW59LlxuICAgKi9cbiAgdGltZXN0YW1wOiBET01IaWdoUmVzVGltZVN0YW1wO1xufVxuaW50ZXJmYWNlIFVzZVJhZkZuT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKlxuICAgKiBTdGFydCB0aGUgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGxvb3AgaW1tZWRpYXRlbHkgb24gY3JlYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaW1tZWRpYXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGZyYW1lIHBlciBzZWNvbmQgdG8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24uXG4gICAqIFNldCB0byBgbnVsbGAgdG8gZGlzYWJsZSB0aGUgbGltaXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGZwc0xpbWl0PzogTWF5YmVSZWZPckdldHRlcjxudW1iZXIgfCBudWxsPjtcbiAgLyoqXG4gICAqIEFmdGVyIHRoZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgbG9vcCBleGVjdXRlZCBvbmNlLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RvcHBlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG9uY2U/OiBib29sZWFuO1xufVxuLyoqXG4gKiBDYWxsIGZ1bmN0aW9uIG9uIGV2ZXJ5IGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLiBXaXRoIGNvbnRyb2xzIG9mIHBhdXNpbmcgYW5kIHJlc3VtaW5nLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVJhZkZuXG4gKiBAcGFyYW0gZm5cbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlUmFmRm4oZm46IChhcmdzOiBVc2VSYWZGbkNhbGxiYWNrQXJndW1lbnRzKSA9PiB2b2lkLCBvcHRpb25zPzogVXNlUmFmRm5PcHRpb25zKTogUGF1c2FibGU7XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VTU1JXaWR0aC9pbmRleC5kLnRzXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVNTUldpZHRoKCk6IG51bWJlciB8IHVuZGVmaW5lZDtcbmRlY2xhcmUgZnVuY3Rpb24gcHJvdmlkZVNTUldpZHRoKHdpZHRoOiBudW1iZXIgfCBudWxsLCBhcHA/OiBBcHA8dW5rbm93bj4pOiB2b2lkO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlU2NyZWVuT3JpZW50YXRpb24vaW5kZXguZC50c1xudHlwZSBPcmllbnRhdGlvblR5cGUgPSAncG9ydHJhaXQtcHJpbWFyeScgfCAncG9ydHJhaXQtc2Vjb25kYXJ5JyB8ICdsYW5kc2NhcGUtcHJpbWFyeScgfCAnbGFuZHNjYXBlLXNlY29uZGFyeSc7XG50eXBlIE9yaWVudGF0aW9uTG9ja1R5cGUgPSAnYW55JyB8ICduYXR1cmFsJyB8ICdsYW5kc2NhcGUnIHwgJ3BvcnRyYWl0JyB8ICdwb3J0cmFpdC1wcmltYXJ5JyB8ICdwb3J0cmFpdC1zZWNvbmRhcnknIHwgJ2xhbmRzY2FwZS1wcmltYXJ5JyB8ICdsYW5kc2NhcGUtc2Vjb25kYXJ5JztcbmludGVyZmFjZSBTY3JlZW5PcmllbnRhdGlvbiBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgbG9jazogKG9yaWVudGF0aW9uOiBPcmllbnRhdGlvbkxvY2tUeXBlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICB1bmxvY2s6ICgpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IHR5cGU6IE9yaWVudGF0aW9uVHlwZTtcbiAgcmVhZG9ubHkgYW5nbGU6IG51bWJlcjtcbiAgYWRkRXZlbnRMaXN0ZW5lcjogKHR5cGU6ICdjaGFuZ2UnLCBsaXN0ZW5lcjogKHRoaXM6IHRoaXMsIGV2OiBFdmVudCkgPT4gYW55LCB1c2VDYXB0dXJlPzogYm9vbGVhbikgPT4gdm9pZDtcbn1cbmludGVyZmFjZSBVc2VTY3JlZW5PcmllbnRhdGlvbk9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge31cbmludGVyZmFjZSBVc2VTY3JlZW5PcmllbnRhdGlvblJldHVybiBleHRlbmRzIFN1cHBvcnRhYmxlIHtcbiAgb3JpZW50YXRpb246IFJlZjxPcmllbnRhdGlvblR5cGUgfCB1bmRlZmluZWQ+O1xuICBhbmdsZTogU2hhbGxvd1JlZjxudW1iZXI+O1xuICBsb2NrT3JpZW50YXRpb246ICh0eXBlOiBPcmllbnRhdGlvbkxvY2tUeXBlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICB1bmxvY2tPcmllbnRhdGlvbjogKCkgPT4gdm9pZDtcbn1cbi8qKlxuICogUmVhY3RpdmUgc2NyZWVuIG9yaWVudGF0aW9uXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlU2NyZWVuT3JpZW50YXRpb25cbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVNjcmVlbk9yaWVudGF0aW9uKG9wdGlvbnM/OiBVc2VTY3JlZW5PcmllbnRhdGlvbk9wdGlvbnMpOiBVc2VTY3JlZW5PcmllbnRhdGlvblJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVNjcmVlblNhZmVBcmVhL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VTY3JlZW5TYWZlQXJlYVJldHVybiB7XG4gIHRvcDogU2hhbGxvd1JlZjxzdHJpbmc+O1xuICByaWdodDogU2hhbGxvd1JlZjxzdHJpbmc+O1xuICBib3R0b206IFNoYWxsb3dSZWY8c3RyaW5nPjtcbiAgbGVmdDogU2hhbGxvd1JlZjxzdHJpbmc+O1xuICB1cGRhdGU6ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIFJlYWN0aXZlIGBlbnYoc2FmZS1hcmVhLWluc2V0LSopYFxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVNjcmVlblNhZmVBcmVhXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlU2NyZWVuU2FmZUFyZWEoKTogVXNlU2NyZWVuU2FmZUFyZWFSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VTY3JpcHRUYWcvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVNjcmlwdFRhZ09wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVEb2N1bWVudCB7XG4gIC8qKlxuICAgKiBMb2FkIHRoZSBzY3JpcHQgaW1tZWRpYXRlbHlcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaW1tZWRpYXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFkZCBgYXN5bmNgIGF0dHJpYnV0ZSB0byB0aGUgc2NyaXB0IHRhZ1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhc3luYz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTY3JpcHQgdHlwZVxuICAgKlxuICAgKiBAZGVmYXVsdCAndGV4dC9qYXZhc2NyaXB0J1xuICAgKi9cbiAgdHlwZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE1hbnVhbCBjb250cm9scyB0aGUgdGltaW5nIG9mIGxvYWRpbmcgYW5kIHVubG9hZGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbWFudWFsPzogYm9vbGVhbjtcbiAgY3Jvc3NPcmlnaW4/OiAnYW5vbnltb3VzJyB8ICd1c2UtY3JlZGVudGlhbHMnO1xuICByZWZlcnJlclBvbGljeT86ICduby1yZWZlcnJlcicgfCAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnIHwgJ29yaWdpbicgfCAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyB8ICdzYW1lLW9yaWdpbicgfCAnc3RyaWN0LW9yaWdpbicgfCAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbicgfCAndW5zYWZlLXVybCc7XG4gIG5vTW9kdWxlPzogYm9vbGVhbjtcbiAgZGVmZXI/OiBib29sZWFuO1xuICAvKipcbiAgICogQWRkIGN1c3RvbSBhdHRyaWJ1dGUgdG8gdGhlIHNjcmlwdCB0YWdcbiAgICpcbiAgICovXG4gIGF0dHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqXG4gICAqIE5vbmNlIHZhbHVlIGZvciBDU1AgKENvbnRlbnQgU2VjdXJpdHkgUG9saWN5KVxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIG5vbmNlPzogc3RyaW5nO1xufVxuaW50ZXJmYWNlIFVzZVNjcmlwdFRhZ1JldHVybiB7XG4gIHNjcmlwdFRhZzogU2hhbGxvd1JlZjxIVE1MU2NyaXB0RWxlbWVudCB8IG51bGw+O1xuICBsb2FkOiAod2FpdEZvclNjcmlwdExvYWQ/OiBib29sZWFuKSA9PiBQcm9taXNlPEhUTUxTY3JpcHRFbGVtZW50IHwgYm9vbGVhbj47XG4gIHVubG9hZDogKCkgPT4gdm9pZDtcbn1cbi8qKlxuICogQXN5bmMgc2NyaXB0IHRhZyBsb2FkaW5nLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVNjcmlwdFRhZ1xuICogQHBhcmFtIHNyY1xuICogQHBhcmFtIG9uTG9hZGVkXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVNjcmlwdFRhZyhzcmM6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgb25Mb2FkZWQ/OiAoZWw6IEhUTUxTY3JpcHRFbGVtZW50KSA9PiB2b2lkLCBvcHRpb25zPzogVXNlU2NyaXB0VGFnT3B0aW9ucyk6IFVzZVNjcmlwdFRhZ1JldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVNjcm9sbExvY2svaW5kZXguZC50c1xuLyoqXG4gKiBMb2NrIHNjcm9sbGluZyBvZiB0aGUgZWxlbWVudC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VTY3JvbGxMb2NrXG4gKiBAcGFyYW0gZWxlbWVudFxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVNjcm9sbExvY2soZWxlbWVudDogTWF5YmVSZWZPckdldHRlcjxIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQgfCBXaW5kb3cgfCBEb2N1bWVudCB8IG51bGwgfCB1bmRlZmluZWQ+LCBpbml0aWFsU3RhdGU/OiBib29sZWFuKTogdnVlMC5Xcml0YWJsZUNvbXB1dGVkUmVmPGJvb2xlYW4sIGJvb2xlYW4+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlU2Vzc2lvblN0b3JhZ2UvaW5kZXguZC50c1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTZXNzaW9uU3RvcmFnZShrZXk6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgaW5pdGlhbFZhbHVlOiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIG9wdGlvbnM/OiBVc2VTdG9yYWdlT3B0aW9uczxzdHJpbmc+KTogUmVtb3ZhYmxlUmVmPHN0cmluZz47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVNlc3Npb25TdG9yYWdlKGtleTogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+LCBpbml0aWFsVmFsdWU6IE1heWJlUmVmT3JHZXR0ZXI8Ym9vbGVhbj4sIG9wdGlvbnM/OiBVc2VTdG9yYWdlT3B0aW9uczxib29sZWFuPik6IFJlbW92YWJsZVJlZjxib29sZWFuPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlU2Vzc2lvblN0b3JhZ2Uoa2V5OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIGluaXRpYWxWYWx1ZTogTWF5YmVSZWZPckdldHRlcjxudW1iZXI+LCBvcHRpb25zPzogVXNlU3RvcmFnZU9wdGlvbnM8bnVtYmVyPik6IFJlbW92YWJsZVJlZjxudW1iZXI+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTZXNzaW9uU3RvcmFnZTxUPihrZXk6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgaW5pdGlhbFZhbHVlOiBNYXliZVJlZk9yR2V0dGVyPFQ+LCBvcHRpb25zPzogVXNlU3RvcmFnZU9wdGlvbnM8VD4pOiBSZW1vdmFibGVSZWY8VD47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVNlc3Npb25TdG9yYWdlPFQgPSB1bmtub3duPihrZXk6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgaW5pdGlhbFZhbHVlOiBNYXliZVJlZk9yR2V0dGVyPG51bGw+LCBvcHRpb25zPzogVXNlU3RvcmFnZU9wdGlvbnM8VD4pOiBSZW1vdmFibGVSZWY8VD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VTaGFyZS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlU2hhcmVPcHRpb25zIHtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGZpbGVzPzogRmlsZVtdO1xuICB0ZXh0Pzogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgVXNlU2hhcmVSZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIHNoYXJlOiAob3ZlcnJpZGVPcHRpb25zPzogTWF5YmVSZWZPckdldHRlcjxVc2VTaGFyZU9wdGlvbnM+KSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBXZWIgU2hhcmUgQVBJLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVNoYXJlXG4gKiBAcGFyYW0gc2hhcmVPcHRpb25zXG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlU2hhcmUoc2hhcmVPcHRpb25zPzogTWF5YmVSZWZPckdldHRlcjxVc2VTaGFyZU9wdGlvbnM+LCBvcHRpb25zPzogQ29uZmlndXJhYmxlTmF2aWdhdG9yKTogVXNlU2hhcmVSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VTb3J0ZWQvaW5kZXguZC50c1xudHlwZSBVc2VTb3J0ZWRDb21wYXJlRm48VCA9IGFueT4gPSAoYTogVCwgYjogVCkgPT4gbnVtYmVyO1xudHlwZSBVc2VTb3J0ZWRGbjxUID0gYW55PiA9IChhcnI6IFRbXSwgY29tcGFyZUZuOiBVc2VTb3J0ZWRDb21wYXJlRm48VD4pID0+IFRbXTtcbmludGVyZmFjZSBVc2VTb3J0ZWRPcHRpb25zPFQgPSBhbnk+IHtcbiAgLyoqXG4gICAqIHNvcnQgYWxnb3JpdGhtXG4gICAqL1xuICBzb3J0Rm4/OiBVc2VTb3J0ZWRGbjxUPjtcbiAgLyoqXG4gICAqIGNvbXBhcmUgZnVuY3Rpb25cbiAgICovXG4gIGNvbXBhcmVGbj86IFVzZVNvcnRlZENvbXBhcmVGbjxUPjtcbiAgLyoqXG4gICAqIGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhlIHNvdXJjZSBhcnJheVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlydHk/OiBib29sZWFuO1xufVxuLyoqXG4gKiByZWFjdGl2ZSBzb3J0IGFycmF5XG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlU29ydGVkXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlU29ydGVkPFQgPSBhbnk+KHNvdXJjZTogTWF5YmVSZWZPckdldHRlcjxUW10+LCBjb21wYXJlRm4/OiBVc2VTb3J0ZWRDb21wYXJlRm48VD4pOiBSZWY8VFtdPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlU29ydGVkPFQgPSBhbnk+KHNvdXJjZTogTWF5YmVSZWZPckdldHRlcjxUW10+LCBvcHRpb25zPzogVXNlU29ydGVkT3B0aW9uczxUPik6IFJlZjxUW10+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTb3J0ZWQ8VCA9IGFueT4oc291cmNlOiBNYXliZVJlZk9yR2V0dGVyPFRbXT4sIGNvbXBhcmVGbj86IFVzZVNvcnRlZENvbXBhcmVGbjxUPiwgb3B0aW9ucz86IE9taXQ8VXNlU29ydGVkT3B0aW9uczxUPiwgJ2NvbXBhcmVGbic+KTogUmVmPFRbXT47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VTcGVlY2hSZWNvZ25pdGlvbi90eXBlcy5kLnRzXG50eXBlIFNwZWVjaFJlY29nbml0aW9uRXJyb3JDb2RlID0gJ2Fib3J0ZWQnIHwgJ2F1ZGlvLWNhcHR1cmUnIHwgJ2JhZC1ncmFtbWFyJyB8ICdsYW5ndWFnZS1ub3Qtc3VwcG9ydGVkJyB8ICduZXR3b3JrJyB8ICduby1zcGVlY2gnIHwgJ25vdC1hbGxvd2VkJyB8ICdzZXJ2aWNlLW5vdC1hbGxvd2VkJztcbmludGVyZmFjZSBTcGVlY2hHcmFtbWFyIHtcbiAgc3JjOiBzdHJpbmc7XG4gIHdlaWdodDogbnVtYmVyO1xufVxuaW50ZXJmYWNlIFNwZWVjaEdyYW1tYXJMaXN0IHtcbiAgcmVhZG9ubHkgbGVuZ3RoOiBudW1iZXI7XG4gIGFkZEZyb21TdHJpbmc6IChzdHJpbmc6IHN0cmluZywgd2VpZ2h0PzogbnVtYmVyKSA9PiB2b2lkO1xuICBhZGRGcm9tVVJJOiAoc3JjOiBzdHJpbmcsIHdlaWdodD86IG51bWJlcikgPT4gdm9pZDtcbiAgaXRlbTogKGluZGV4OiBudW1iZXIpID0+IFNwZWVjaEdyYW1tYXI7XG4gIFtpbmRleDogbnVtYmVyXTogU3BlZWNoR3JhbW1hcjtcbn1cbmludGVyZmFjZSBTcGVlY2hSZWNvZ25pdGlvbkVycm9yRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIHJlYWRvbmx5IGVycm9yOiBTcGVlY2hSZWNvZ25pdGlvbkVycm9yQ29kZTtcbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xufVxuaW50ZXJmYWNlIFNwZWVjaFJlY29nbml0aW9uRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIHJlYWRvbmx5IHJlc3VsdEluZGV4OiBudW1iZXI7XG4gIHJlYWRvbmx5IHJlc3VsdHM6IFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdDtcbn1cbmludGVyZmFjZSBTcGVlY2hSZWNvZ25pdGlvbkV2ZW50TWFwIHtcbiAgYXVkaW9lbmQ6IEV2ZW50O1xuICBhdWRpb3N0YXJ0OiBFdmVudDtcbiAgZW5kOiBFdmVudDtcbiAgZXJyb3I6IFNwZWVjaFJlY29nbml0aW9uRXJyb3JFdmVudDtcbiAgbm9tYXRjaDogU3BlZWNoUmVjb2duaXRpb25FdmVudDtcbiAgcmVzdWx0OiBTcGVlY2hSZWNvZ25pdGlvbkV2ZW50O1xuICBzb3VuZGVuZDogRXZlbnQ7XG4gIHNvdW5kc3RhcnQ6IEV2ZW50O1xuICBzcGVlY2hlbmQ6IEV2ZW50O1xuICBzcGVlY2hzdGFydDogRXZlbnQ7XG4gIHN0YXJ0OiBFdmVudDtcbn1cbmludGVyZmFjZSBTcGVlY2hSZWNvZ25pdGlvbiBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgY29udGludW91czogYm9vbGVhbjtcbiAgZ3JhbW1hcnM6IFNwZWVjaEdyYW1tYXJMaXN0O1xuICBpbnRlcmltUmVzdWx0czogYm9vbGVhbjtcbiAgbGFuZzogc3RyaW5nO1xuICBtYXhBbHRlcm5hdGl2ZXM6IG51bWJlcjtcbiAgb25hdWRpb2VuZDogKCh0aGlzOiBTcGVlY2hSZWNvZ25pdGlvbiwgZXY6IEV2ZW50KSA9PiBhbnkpIHwgbnVsbDtcbiAgb25hdWRpb3N0YXJ0OiAoKHRoaXM6IFNwZWVjaFJlY29nbml0aW9uLCBldjogRXZlbnQpID0+IGFueSkgfCBudWxsO1xuICBvbmVuZDogKCh0aGlzOiBTcGVlY2hSZWNvZ25pdGlvbiwgZXY6IEV2ZW50KSA9PiBhbnkpIHwgbnVsbDtcbiAgb25lcnJvcjogKCh0aGlzOiBTcGVlY2hSZWNvZ25pdGlvbiwgZXY6IFNwZWVjaFJlY29nbml0aW9uRXJyb3JFdmVudCkgPT4gYW55KSB8IG51bGw7XG4gIG9ubm9tYXRjaDogKCh0aGlzOiBTcGVlY2hSZWNvZ25pdGlvbiwgZXY6IFNwZWVjaFJlY29nbml0aW9uRXZlbnQpID0+IGFueSkgfCBudWxsO1xuICBvbnJlc3VsdDogKCh0aGlzOiBTcGVlY2hSZWNvZ25pdGlvbiwgZXY6IFNwZWVjaFJlY29nbml0aW9uRXZlbnQpID0+IGFueSkgfCBudWxsO1xuICBvbnNvdW5kZW5kOiAoKHRoaXM6IFNwZWVjaFJlY29nbml0aW9uLCBldjogRXZlbnQpID0+IGFueSkgfCBudWxsO1xuICBvbnNvdW5kc3RhcnQ6ICgodGhpczogU3BlZWNoUmVjb2duaXRpb24sIGV2OiBFdmVudCkgPT4gYW55KSB8IG51bGw7XG4gIG9uc3BlZWNoZW5kOiAoKHRoaXM6IFNwZWVjaFJlY29nbml0aW9uLCBldjogRXZlbnQpID0+IGFueSkgfCBudWxsO1xuICBvbnNwZWVjaHN0YXJ0OiAoKHRoaXM6IFNwZWVjaFJlY29nbml0aW9uLCBldjogRXZlbnQpID0+IGFueSkgfCBudWxsO1xuICBvbnN0YXJ0OiAoKHRoaXM6IFNwZWVjaFJlY29nbml0aW9uLCBldjogRXZlbnQpID0+IGFueSkgfCBudWxsO1xuICBhYm9ydDogKCkgPT4gdm9pZDtcbiAgc3RhcnQ6ICgpID0+IHZvaWQ7XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG4gIGFkZEV2ZW50TGlzdGVuZXI6ICg8SyQxIGV4dGVuZHMga2V5b2YgU3BlZWNoUmVjb2duaXRpb25FdmVudE1hcD4odHlwZTogSyQxLCBsaXN0ZW5lcjogKHRoaXM6IFNwZWVjaFJlY29nbml0aW9uLCBldjogU3BlZWNoUmVjb2duaXRpb25FdmVudE1hcFtLJDFdKSA9PiBhbnksIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpID0+IHZvaWQpICYgKCh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKSA9PiB2b2lkKTtcbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogKDxLJDEgZXh0ZW5kcyBrZXlvZiBTcGVlY2hSZWNvZ25pdGlvbkV2ZW50TWFwPih0eXBlOiBLJDEsIGxpc3RlbmVyOiAodGhpczogU3BlZWNoUmVjb2duaXRpb24sIGV2OiBTcGVlY2hSZWNvZ25pdGlvbkV2ZW50TWFwW0skMV0pID0+IGFueSwgb3B0aW9ucz86IGJvb2xlYW4gfCBFdmVudExpc3RlbmVyT3B0aW9ucykgPT4gdm9pZCkgJiAoKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMpID0+IHZvaWQpO1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlU3BlZWNoUmVjb2duaXRpb24vaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVNwZWVjaFJlY29nbml0aW9uT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIGNvbnRpbnVvdXMgcmVzdWx0cyBhcmUgcmV0dXJuZWQgZm9yIGVhY2ggcmVjb2duaXRpb24sIG9yIG9ubHkgYSBzaW5nbGUgcmVzdWx0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBjb250aW51b3VzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgaW50ZXJpbSByZXN1bHRzIHNob3VsZCBiZSByZXR1cm5lZCAodHJ1ZSkgb3Igbm90IChmYWxzZS4pIEludGVyaW0gcmVzdWx0cyBhcmUgcmVzdWx0cyB0aGF0IGFyZSBub3QgeWV0IGZpbmFsXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGludGVyaW1SZXN1bHRzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIExhbmd1YWdlIGZvciBTcGVlY2hSZWNvZ25pdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAnZW4tVVMnXG4gICAqL1xuICBsYW5nPzogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+O1xuICAvKipcbiAgICogQSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBtYXhpbXVtIHJldHVybmVkIGFsdGVybmF0aXZlcyBmb3IgZWFjaCByZXN1bHQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NwZWVjaFJlY29nbml0aW9uL21heEFsdGVybmF0aXZlc1xuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBtYXhBbHRlcm5hdGl2ZXM/OiBudW1iZXI7XG59XG5pbnRlcmZhY2UgVXNlU3BlZWNoUmVjb2duaXRpb25SZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIGlzTGlzdGVuaW5nOiBTaGFsbG93UmVmPGJvb2xlYW4+O1xuICBpc0ZpbmFsOiBTaGFsbG93UmVmPGJvb2xlYW4+O1xuICByZWNvZ25pdGlvbjogU3BlZWNoUmVjb2duaXRpb24gfCB1bmRlZmluZWQ7XG4gIHJlc3VsdDogU2hhbGxvd1JlZjxzdHJpbmc+O1xuICBlcnJvcjogU2hhbGxvd1JlZjxTcGVlY2hSZWNvZ25pdGlvbkVycm9yRXZlbnQgfCBFcnJvciB8IHVuZGVmaW5lZD47XG4gIHRvZ2dsZTogKHZhbHVlPzogYm9vbGVhbikgPT4gdm9pZDtcbiAgc3RhcnQ6ICgpID0+IHZvaWQ7XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIFJlYWN0aXZlIFNwZWVjaFJlY29nbml0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVNwZWVjaFJlY29nbml0aW9uXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TcGVlY2hSZWNvZ25pdGlvbiBTcGVlY2hSZWNvZ25pdGlvblxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTcGVlY2hSZWNvZ25pdGlvbihvcHRpb25zPzogVXNlU3BlZWNoUmVjb2duaXRpb25PcHRpb25zKTogVXNlU3BlZWNoUmVjb2duaXRpb25SZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VTcGVlY2hTeW50aGVzaXMvaW5kZXguZC50c1xudHlwZSBVc2VTcGVlY2hTeW50aGVzaXNTdGF0dXMgPSAnaW5pdCcgfCAncGxheScgfCAncGF1c2UnIHwgJ2VuZCc7XG5pbnRlcmZhY2UgVXNlU3BlZWNoU3ludGhlc2lzT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKlxuICAgKiBMYW5ndWFnZSBmb3IgU3BlZWNoU3ludGhlc2lzXG4gICAqXG4gICAqIEBkZWZhdWx0ICdlbi1VUydcbiAgICovXG4gIGxhbmc/OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz47XG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBwaXRjaCBhdCB3aGljaCB0aGUgdXR0ZXJhbmNlIHdpbGwgYmUgc3Bva2VuIGF0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBwaXRjaD86IE1heWJlUmVmT3JHZXR0ZXI8U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlWydwaXRjaCddPjtcbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIHNwZWVkIGF0IHdoaWNoIHRoZSB1dHRlcmFuY2Ugd2lsbCBiZSBzcG9rZW4gYXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHJhdGU/OiBNYXliZVJlZk9yR2V0dGVyPFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVsncmF0ZSddPjtcbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIHZvaWNlIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNwZWFrIHRoZSB1dHRlcmFuY2UuXG4gICAqL1xuICB2b2ljZT86IE1heWJlUmVmPFNwZWVjaFN5bnRoZXNpc1ZvaWNlPjtcbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIHZvbHVtZSB0aGF0IHRoZSB1dHRlcmFuY2Ugd2lsbCBiZSBzcG9rZW4gYXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHZvbHVtZT86IE1heWJlUmVmT3JHZXR0ZXI8U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlWyd2b2x1bWUnXT47XG4gIC8qKlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBib3VuZGFyeSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAqL1xuICBvbkJvdW5kYXJ5PzogKGV2ZW50OiBTcGVlY2hTeW50aGVzaXNFdmVudCkgPT4gdm9pZDtcbn1cbmludGVyZmFjZSBVc2VTcGVlY2hTeW50aGVzaXNSZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIGlzUGxheWluZzogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgc3RhdHVzOiBTaGFsbG93UmVmPFVzZVNwZWVjaFN5bnRoZXNpc1N0YXR1cz47XG4gIHV0dGVyYW5jZTogQ29tcHV0ZWRSZWY8U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlPjtcbiAgZXJyb3I6IFNoYWxsb3dSZWY8U3BlZWNoU3ludGhlc2lzRXJyb3JFdmVudCB8IHVuZGVmaW5lZD47XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG4gIHRvZ2dsZTogKHZhbHVlPzogYm9vbGVhbikgPT4gdm9pZDtcbiAgc3BlYWs6ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIFJlYWN0aXZlIFNwZWVjaFN5bnRoZXNpcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VTcGVlY2hTeW50aGVzaXNcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NwZWVjaFN5bnRoZXNpcyBTcGVlY2hTeW50aGVzaXNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTcGVlY2hTeW50aGVzaXModGV4dDogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+LCBvcHRpb25zPzogVXNlU3BlZWNoU3ludGhlc2lzT3B0aW9ucyk6IFVzZVNwZWVjaFN5bnRoZXNpc1JldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVN0ZXBwZXIvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVN0ZXBwZXJSZXR1cm48U3RlcE5hbWUsIFN0ZXBzLCBTdGVwPiB7XG4gIC8qKiBMaXN0IG9mIHN0ZXBzLiAqL1xuICBzdGVwczogUmVhZG9ubHk8UmVmPFN0ZXBzPj47XG4gIC8qKiBMaXN0IG9mIHN0ZXAgbmFtZXMuICovXG4gIHN0ZXBOYW1lczogUmVhZG9ubHk8UmVmPFN0ZXBOYW1lW10+PjtcbiAgLyoqIEluZGV4IG9mIHRoZSBjdXJyZW50IHN0ZXAuICovXG4gIGluZGV4OiBSZWY8bnVtYmVyPjtcbiAgLyoqIEN1cnJlbnQgc3RlcC4gKi9cbiAgY3VycmVudDogQ29tcHV0ZWRSZWY8U3RlcD47XG4gIC8qKiBOZXh0IHN0ZXAsIG9yIHVuZGVmaW5lZCBpZiB0aGUgY3VycmVudCBzdGVwIGlzIHRoZSBsYXN0IG9uZS4gKi9cbiAgbmV4dDogQ29tcHV0ZWRSZWY8U3RlcE5hbWUgfCB1bmRlZmluZWQ+O1xuICAvKiogUHJldmlvdXMgc3RlcCwgb3IgdW5kZWZpbmVkIGlmIHRoZSBjdXJyZW50IHN0ZXAgaXMgdGhlIGZpcnN0IG9uZS4gKi9cbiAgcHJldmlvdXM6IENvbXB1dGVkUmVmPFN0ZXBOYW1lIHwgdW5kZWZpbmVkPjtcbiAgLyoqIFdoZXRoZXIgdGhlIGN1cnJlbnQgc3RlcCBpcyB0aGUgZmlyc3Qgb25lLiAqL1xuICBpc0ZpcnN0OiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgLyoqIFdoZXRoZXIgdGhlIGN1cnJlbnQgc3RlcCBpcyB0aGUgbGFzdCBvbmUuICovXG4gIGlzTGFzdDogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gIC8qKiBHZXQgdGhlIHN0ZXAgYXQgdGhlIHNwZWNpZmllZCBpbmRleC4gKi9cbiAgYXQ6IChpbmRleDogbnVtYmVyKSA9PiBTdGVwIHwgdW5kZWZpbmVkO1xuICAvKiogR2V0IGEgc3RlcCBieSB0aGUgc3BlY2lmaWVkIG5hbWUuICovXG4gIGdldDogKHN0ZXA6IFN0ZXBOYW1lKSA9PiBTdGVwIHwgdW5kZWZpbmVkO1xuICAvKiogR28gdG8gdGhlIHNwZWNpZmllZCBzdGVwLiAqL1xuICBnb1RvOiAoc3RlcDogU3RlcE5hbWUpID0+IHZvaWQ7XG4gIC8qKiBHbyB0byB0aGUgbmV4dCBzdGVwLiBEb2VzIG5vdGhpbmcgaWYgdGhlIGN1cnJlbnQgc3RlcCBpcyB0aGUgbGFzdCBvbmUuICovXG4gIGdvVG9OZXh0OiAoKSA9PiB2b2lkO1xuICAvKiogR28gdG8gdGhlIHByZXZpb3VzIHN0ZXAuIERvZXMgbm90aGluZyBpZiB0aGUgY3VycmVudCBzdGVwIGlzIHRoZSBwcmV2aW91cyBvbmUuICovXG4gIGdvVG9QcmV2aW91czogKCkgPT4gdm9pZDtcbiAgLyoqIEdvIGJhY2sgdG8gdGhlIGdpdmVuIHN0ZXAsIG9ubHkgaWYgdGhlIGN1cnJlbnQgc3RlcCBpcyBhZnRlci4gKi9cbiAgZ29CYWNrVG86IChzdGVwOiBTdGVwTmFtZSkgPT4gdm9pZDtcbiAgLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBzdGVwIGlzIHRoZSBuZXh0IHN0ZXAuICovXG4gIGlzTmV4dDogKHN0ZXA6IFN0ZXBOYW1lKSA9PiBib29sZWFuO1xuICAvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIHN0ZXAgaXMgdGhlIHByZXZpb3VzIHN0ZXAuICovXG4gIGlzUHJldmlvdXM6IChzdGVwOiBTdGVwTmFtZSkgPT4gYm9vbGVhbjtcbiAgLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBzdGVwIGlzIHRoZSBjdXJyZW50IHN0ZXAuICovXG4gIGlzQ3VycmVudDogKHN0ZXA6IFN0ZXBOYW1lKSA9PiBib29sZWFuO1xuICAvKiogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IHN0ZXAgaXMgYmVmb3JlIHRoZSBnaXZlbiBzdGVwLiAqL1xuICBpc0JlZm9yZTogKHN0ZXA6IFN0ZXBOYW1lKSA9PiBib29sZWFuO1xuICAvKiogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IHN0ZXAgaXMgYWZ0ZXIgdGhlIGdpdmVuIHN0ZXAuICovXG4gIGlzQWZ0ZXI6IChzdGVwOiBTdGVwTmFtZSkgPT4gYm9vbGVhbjtcbn1cbmRlY2xhcmUgZnVuY3Rpb24gdXNlU3RlcHBlcjxUIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyPihzdGVwczogTWF5YmVSZWY8VFtdPiwgaW5pdGlhbFN0ZXA/OiBUKTogVXNlU3RlcHBlclJldHVybjxULCBUW10sIFQ+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTdGVwcGVyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihzdGVwczogTWF5YmVSZWY8VD4sIGluaXRpYWxTdGVwPzoga2V5b2YgVCk6IFVzZVN0ZXBwZXJSZXR1cm48RXhjbHVkZTxrZXlvZiBULCBzeW1ib2w+LCBULCBUW2tleW9mIFRdPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVN0b3JhZ2VBc3luYy9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlU3RvcmFnZUFzeW5jT3B0aW9uczxUPiBleHRlbmRzIE9taXQ8VXNlU3RvcmFnZU9wdGlvbnM8VD4sICdzZXJpYWxpemVyJz4ge1xuICAvKipcbiAgICogQ3VzdG9tIGRhdGEgc2VyaWFsaXphdGlvblxuICAgKi9cbiAgc2VyaWFsaXplcj86IFNlcmlhbGl6ZXJBc3luYzxUPjtcbiAgLyoqXG4gICAqIE9uIGZpcnN0IHZhbHVlIGxvYWRlZCBob29rLlxuICAgKi9cbiAgb25SZWFkeT86ICh2YWx1ZTogVCkgPT4gdm9pZDtcbn1cbmRlY2xhcmUgZnVuY3Rpb24gdXNlU3RvcmFnZUFzeW5jKGtleTogc3RyaW5nLCBpbml0aWFsVmFsdWU6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgc3RvcmFnZT86IFN0b3JhZ2VMaWtlQXN5bmMsIG9wdGlvbnM/OiBVc2VTdG9yYWdlQXN5bmNPcHRpb25zPHN0cmluZz4pOiBSZW1vdmFibGVSZWY8c3RyaW5nPiAmIFByb21pc2U8UmVtb3ZhYmxlUmVmPHN0cmluZz4+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTdG9yYWdlQXN5bmMoa2V5OiBzdHJpbmcsIGluaXRpYWxWYWx1ZTogTWF5YmVSZWZPckdldHRlcjxib29sZWFuPiwgc3RvcmFnZT86IFN0b3JhZ2VMaWtlQXN5bmMsIG9wdGlvbnM/OiBVc2VTdG9yYWdlQXN5bmNPcHRpb25zPGJvb2xlYW4+KTogUmVtb3ZhYmxlUmVmPGJvb2xlYW4+ICYgUHJvbWlzZTxSZW1vdmFibGVSZWY8Ym9vbGVhbj4+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTdG9yYWdlQXN5bmMoa2V5OiBzdHJpbmcsIGluaXRpYWxWYWx1ZTogTWF5YmVSZWZPckdldHRlcjxudW1iZXI+LCBzdG9yYWdlPzogU3RvcmFnZUxpa2VBc3luYywgb3B0aW9ucz86IFVzZVN0b3JhZ2VBc3luY09wdGlvbnM8bnVtYmVyPik6IFJlbW92YWJsZVJlZjxudW1iZXI+ICYgUHJvbWlzZTxSZW1vdmFibGVSZWY8bnVtYmVyPj47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVN0b3JhZ2VBc3luYzxUPihrZXk6IHN0cmluZywgaW5pdGlhbFZhbHVlOiBNYXliZVJlZk9yR2V0dGVyPFQ+LCBzdG9yYWdlPzogU3RvcmFnZUxpa2VBc3luYywgb3B0aW9ucz86IFVzZVN0b3JhZ2VBc3luY09wdGlvbnM8VD4pOiBSZW1vdmFibGVSZWY8VD4gJiBQcm9taXNlPFJlbW92YWJsZVJlZjxUPj47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVN0b3JhZ2VBc3luYzxUID0gdW5rbm93bj4oa2V5OiBzdHJpbmcsIGluaXRpYWxWYWx1ZTogTWF5YmVSZWZPckdldHRlcjxudWxsPiwgc3RvcmFnZT86IFN0b3JhZ2VMaWtlQXN5bmMsIG9wdGlvbnM/OiBVc2VTdG9yYWdlQXN5bmNPcHRpb25zPFQ+KTogUmVtb3ZhYmxlUmVmPFQ+ICYgUHJvbWlzZTxSZW1vdmFibGVSZWY8VD4+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlU3R5bGVUYWcvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVN0eWxlVGFnT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZURvY3VtZW50IHtcbiAgLyoqXG4gICAqIE1lZGlhIHF1ZXJ5IGZvciBzdHlsZXMgdG8gYXBwbHlcbiAgICovXG4gIG1lZGlhPzogc3RyaW5nO1xuICAvKipcbiAgICogTG9hZCB0aGUgc3R5bGUgaW1tZWRpYXRlbHlcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaW1tZWRpYXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE1hbnVhbCBjb250cm9scyB0aGUgdGltaW5nIG9mIGxvYWRpbmcgYW5kIHVubG9hZGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbWFudWFsPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERPTSBpZCBvZiB0aGUgc3R5bGUgdGFnXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG8taW5jcmVtZW50ZWRcbiAgICovXG4gIGlkPzogc3RyaW5nO1xuICAvKipcbiAgICogTm9uY2UgdmFsdWUgZm9yIENTUCAoQ29udGVudCBTZWN1cml0eSBQb2xpY3kpXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgbm9uY2U/OiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgVXNlU3R5bGVUYWdSZXR1cm4ge1xuICBpZDogc3RyaW5nO1xuICBjc3M6IFNoYWxsb3dSZWY8c3RyaW5nPjtcbiAgbG9hZDogKCkgPT4gdm9pZDtcbiAgdW5sb2FkOiAoKSA9PiB2b2lkO1xuICBpc0xvYWRlZDogUmVhZG9ubHk8U2hhbGxvd1JlZjxib29sZWFuPj47XG59XG4vKipcbiAqIEluamVjdCA8c3R5bGU+IGVsZW1lbnQgaW4gaGVhZC5cbiAqXG4gKiBPdmVybG9hZDogT21pdHRlZCBpZFxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVN0eWxlVGFnXG4gKiBAcGFyYW0gY3NzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVN0eWxlVGFnKGNzczogTWF5YmVSZWY8c3RyaW5nPiwgb3B0aW9ucz86IFVzZVN0eWxlVGFnT3B0aW9ucyk6IFVzZVN0eWxlVGFnUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlU3VwcG9ydGVkL2luZGV4LmQudHNcbnR5cGUgVXNlU3VwcG9ydGVkUmV0dXJuID0gQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVN1cHBvcnRlZChjYWxsYmFjazogKCkgPT4gdW5rbm93bik6IFVzZVN1cHBvcnRlZFJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVRlbXBsYXRlUmVmc0xpc3QvaW5kZXguZC50c1xudHlwZSBUZW1wbGF0ZVJlZnNMaXN0PFQ+ID0gVFtdICYge1xuICBzZXQ6IChlbDogb2JqZWN0IHwgbnVsbCkgPT4gdm9pZDtcbn07XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVRlbXBsYXRlUmVmc0xpc3Q8VCA9IEVsZW1lbnQ+KCk6IFJlYWRvbmx5PFJlZjxSZWFkb25seTxUZW1wbGF0ZVJlZnNMaXN0PFQ+Pj4+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlVGV4dERpcmVjdGlvbi9pbmRleC5kLnRzXG50eXBlIFVzZVRleHREaXJlY3Rpb25WYWx1ZSA9ICdsdHInIHwgJ3J0bCcgfCAnYXV0byc7XG5pbnRlcmZhY2UgVXNlVGV4dERpcmVjdGlvbk9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVEb2N1bWVudCB7XG4gIC8qKlxuICAgKiBDU1MgU2VsZWN0b3IgZm9yIHRoZSB0YXJnZXQgZWxlbWVudCBhcHBseWluZyB0b1xuICAgKlxuICAgKiBAZGVmYXVsdCAnaHRtbCdcbiAgICovXG4gIHNlbGVjdG9yPzogc3RyaW5nO1xuICAvKipcbiAgICogT2JzZXJ2ZSBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcilgIGNoYW5nZXMgdXNpbmcgTXV0YXRpb25PYnNlcnZlXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBvYnNlcnZlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluaXRpYWwgdmFsdWVcbiAgICpcbiAgICogQGRlZmF1bHQgJ2x0cidcbiAgICovXG4gIGluaXRpYWxWYWx1ZT86IFVzZVRleHREaXJlY3Rpb25WYWx1ZTtcbn1cbi8qKlxuICogUmVhY3RpdmUgZGlyIG9mIHRoZSBlbGVtZW50J3MgdGV4dC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VUZXh0RGlyZWN0aW9uXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VUZXh0RGlyZWN0aW9uKG9wdGlvbnM/OiBVc2VUZXh0RGlyZWN0aW9uT3B0aW9ucyk6IHZ1ZTAuV3JpdGFibGVDb21wdXRlZFJlZjxVc2VUZXh0RGlyZWN0aW9uVmFsdWUsIFVzZVRleHREaXJlY3Rpb25WYWx1ZT47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VUZXh0U2VsZWN0aW9uL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VUZXh0U2VsZWN0aW9uT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7fVxuaW50ZXJmYWNlIFVzZVRleHRTZWxlY3Rpb25SZXR1cm4ge1xuICB0ZXh0OiBDb21wdXRlZFJlZjxzdHJpbmc+O1xuICByZWN0czogQ29tcHV0ZWRSZWY8RE9NUmVjdFtdPjtcbiAgcmFuZ2VzOiBDb21wdXRlZFJlZjxSYW5nZVtdPjtcbiAgc2VsZWN0aW9uOiBTaGFsbG93UmVmPFNlbGVjdGlvbiB8IG51bGw+O1xufVxuLyoqXG4gKiBSZWFjdGl2ZWx5IHRyYWNrIHVzZXIgdGV4dCBzZWxlY3Rpb24gYmFzZWQgb24gW2BXaW5kb3cuZ2V0U2VsZWN0aW9uYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvdy9nZXRTZWxlY3Rpb24pLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVRleHRTZWxlY3Rpb25cbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVRleHRTZWxlY3Rpb24ob3B0aW9ucz86IFVzZVRleHRTZWxlY3Rpb25PcHRpb25zKTogVXNlVGV4dFNlbGVjdGlvblJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVRleHRhcmVhQXV0b3NpemUvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVRleHRhcmVhQXV0b3NpemVPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHtcbiAgLyoqIFRleHRhcmVhIGVsZW1lbnQgdG8gYXV0b3NpemUuICovXG4gIGVsZW1lbnQ/OiBNYXliZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50IHwgdW5kZWZpbmVkIHwgbnVsbD47XG4gIC8qKiBUZXh0YXJlYSBjb250ZW50LiAqL1xuICBpbnB1dD86IE1heWJlUmVmPHN0cmluZz47XG4gIC8qKiBXYXRjaCBzb3VyY2VzIHRoYXQgc2hvdWxkIHRyaWdnZXIgYSB0ZXh0YXJlYSByZXNpemUuICovXG4gIHdhdGNoPzogV2F0Y2hTb3VyY2UgfCBNdWx0aVdhdGNoU291cmNlcztcbiAgLyoqIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSB0ZXh0YXJlYSBzaXplIGNoYW5nZXMuICovXG4gIG9uUmVzaXplPzogKCkgPT4gdm9pZDtcbiAgLyoqIFNwZWNpZnkgc3R5bGUgdGFyZ2V0IHRvIGFwcGx5IHRoZSBoZWlnaHQgYmFzZWQgb24gdGV4dGFyZWEgY29udGVudC4gSWYgbm90IHByb3ZpZGVkIGl0IHdpbGwgdXNlIHRleHRhcmVhIGl0IHNlbGYuICAqL1xuICBzdHlsZVRhcmdldD86IE1heWJlUmVmPEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkPjtcbiAgLyoqIFNwZWNpZnkgdGhlIHN0eWxlIHByb3BlcnR5IHRoYXQgd2lsbCBiZSB1c2VkIHRvIG1hbmlwdWxhdGUgaGVpZ2h0LiBDYW4gYmUgYGhlaWdodCB8IG1pbkhlaWdodGAuIERlZmF1bHQgdmFsdWUgaXMgYGhlaWdodGAuICovXG4gIHN0eWxlUHJvcD86ICdoZWlnaHQnIHwgJ21pbkhlaWdodCc7XG59XG5pbnRlcmZhY2UgVXNlVGV4dGFyZWFBdXRvc2l6ZVJldHVybiB7XG4gIHRleHRhcmVhOiBSZWY8SFRNTFRleHRBcmVhRWxlbWVudCB8IHVuZGVmaW5lZCB8IG51bGw+O1xuICBpbnB1dDogUmVmPHN0cmluZz47XG4gIHRyaWdnZXJSZXNpemU6ICgpID0+IHZvaWQ7XG59XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVRleHRhcmVhQXV0b3NpemUob3B0aW9ucz86IFVzZVRleHRhcmVhQXV0b3NpemVPcHRpb25zKTogVXNlVGV4dGFyZWFBdXRvc2l6ZVJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVRocm90dGxlZFJlZkhpc3RvcnkvaW5kZXguZC50c1xudHlwZSBVc2VUaHJvdHRsZWRSZWZIaXN0b3J5T3B0aW9uczxSYXcsIFNlcmlhbGl6ZWQgPSBSYXc+ID0gT21pdDxVc2VSZWZIaXN0b3J5T3B0aW9uczxSYXcsIFNlcmlhbGl6ZWQ+LCAnZXZlbnRGaWx0ZXInPiAmIHtcbiAgdGhyb3R0bGU/OiBNYXliZVJlZjxudW1iZXI+O1xuICB0cmFpbGluZz86IGJvb2xlYW47XG59O1xudHlwZSBVc2VUaHJvdHRsZWRSZWZIaXN0b3J5UmV0dXJuPFJhdywgU2VyaWFsaXplZCA9IFJhdz4gPSBVc2VSZWZIaXN0b3J5UmV0dXJuPFJhdywgU2VyaWFsaXplZD47XG4vKipcbiAqIFNob3J0aGFuZCBmb3IgW3VzZVJlZkhpc3RvcnldKGh0dHBzOi8vdnVldXNlLm9yZy91c2VSZWZIaXN0b3J5KSB3aXRoIHRocm90dGxlZCBmaWx0ZXIuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlVGhyb3R0bGVkUmVmSGlzdG9yeVxuICogQHBhcmFtIHNvdXJjZVxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VUaHJvdHRsZWRSZWZIaXN0b3J5PFJhdywgU2VyaWFsaXplZCA9IFJhdz4oc291cmNlOiBSZWY8UmF3Piwgb3B0aW9ucz86IFVzZVRocm90dGxlZFJlZkhpc3RvcnlPcHRpb25zPFJhdywgU2VyaWFsaXplZD4pOiBVc2VUaHJvdHRsZWRSZWZIaXN0b3J5UmV0dXJuPFJhdywgU2VyaWFsaXplZD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VUaW1lQWdvL2luZGV4LmQudHNcbnR5cGUgVXNlVGltZUFnb0Zvcm1hdHRlcjxUID0gbnVtYmVyPiA9ICh2YWx1ZTogVCwgaXNQYXN0OiBib29sZWFuKSA9PiBzdHJpbmc7XG50eXBlIFVzZVRpbWVBZ29Vbml0TmFtZXNEZWZhdWx0ID0gJ3NlY29uZCcgfCAnbWludXRlJyB8ICdob3VyJyB8ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJztcbmludGVyZmFjZSBVc2VUaW1lQWdvTWVzc2FnZXNCdWlsdEluIHtcbiAganVzdE5vdzogc3RyaW5nO1xuICBwYXN0OiBzdHJpbmcgfCBVc2VUaW1lQWdvRm9ybWF0dGVyPHN0cmluZz47XG4gIGZ1dHVyZTogc3RyaW5nIHwgVXNlVGltZUFnb0Zvcm1hdHRlcjxzdHJpbmc+O1xuICBpbnZhbGlkOiBzdHJpbmc7XG59XG50eXBlIFVzZVRpbWVBZ29NZXNzYWdlczxVbml0TmFtZXMgZXh0ZW5kcyBzdHJpbmcgPSBVc2VUaW1lQWdvVW5pdE5hbWVzRGVmYXVsdD4gPSBVc2VUaW1lQWdvTWVzc2FnZXNCdWlsdEluICYgUmVjb3JkPFVuaXROYW1lcywgc3RyaW5nIHwgVXNlVGltZUFnb0Zvcm1hdHRlcjxudW1iZXI+PjtcbmludGVyZmFjZSBGb3JtYXRUaW1lQWdvT3B0aW9uczxVbml0TmFtZXMgZXh0ZW5kcyBzdHJpbmcgPSBVc2VUaW1lQWdvVW5pdE5hbWVzRGVmYXVsdD4ge1xuICAvKipcbiAgICogTWF4aW11bSB1bml0IChvZiBkaWZmIGluIG1pbGxpc2Vjb25kcykgdG8gZGlzcGxheSB0aGUgZnVsbCBkYXRlIGluc3RlYWQgb2YgcmVsYXRpdmVcbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBtYXg/OiBVbml0TmFtZXMgfCBudW1iZXI7XG4gIC8qKlxuICAgKiBGb3JtYXR0ZXIgZm9yIGZ1bGwgZGF0ZVxuICAgKi9cbiAgZnVsbERhdGVGb3JtYXR0ZXI/OiAoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nO1xuICAvKipcbiAgICogTWVzc2FnZXMgZm9yIGZvcm1hdHRpbmcgdGhlIHN0cmluZ1xuICAgKi9cbiAgbWVzc2FnZXM/OiBVc2VUaW1lQWdvTWVzc2FnZXM8VW5pdE5hbWVzPjtcbiAgLyoqXG4gICAqIE1pbmltdW0gZGlzcGxheSB0aW1lIHVuaXQgKGRlZmF1bHQgaXMgbWludXRlKVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2hvd1NlY29uZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSb3VuZGluZyBtZXRob2QgdG8gYXBwbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdyb3VuZCdcbiAgICovXG4gIHJvdW5kaW5nPzogJ3JvdW5kJyB8ICdjZWlsJyB8ICdmbG9vcicgfCBudW1iZXI7XG4gIC8qKlxuICAgKiBDdXN0b20gdW5pdHNcbiAgICovXG4gIHVuaXRzPzogVXNlVGltZUFnb1VuaXQ8VW5pdE5hbWVzPltdO1xufVxuaW50ZXJmYWNlIFVzZVRpbWVBZ29PcHRpb25zPENvbnRyb2xzIGV4dGVuZHMgYm9vbGVhbiwgVW5pdE5hbWVzIGV4dGVuZHMgc3RyaW5nID0gVXNlVGltZUFnb1VuaXROYW1lc0RlZmF1bHQ+IGV4dGVuZHMgRm9ybWF0VGltZUFnb09wdGlvbnM8VW5pdE5hbWVzPiwgQ29uZmlndXJhYmxlU2NoZWR1bGVyIHtcbiAgLyoqXG4gICAqIEV4cG9zZSBtb3JlIGNvbnRyb2xzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjb250cm9scz86IENvbnRyb2xzO1xuICAvKipcbiAgICogSW50ZXJ2YWxzIHRvIHVwZGF0ZSwgc2V0IDAgdG8gZGlzYWJsZSBhdXRvIHVwZGF0ZVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIGBzY2hlZHVsZXJgIG9wdGlvbiBpbnN0ZWFkXG4gICAqIEBkZWZhdWx0IDMwXzAwMFxuICAgKi9cbiAgdXBkYXRlSW50ZXJ2YWw/OiBudW1iZXI7XG59XG5pbnRlcmZhY2UgVXNlVGltZUFnb1VuaXQ8VW5pdCBleHRlbmRzIHN0cmluZyA9IFVzZVRpbWVBZ29Vbml0TmFtZXNEZWZhdWx0PiB7XG4gIG1heDogbnVtYmVyO1xuICB2YWx1ZTogbnVtYmVyO1xuICBuYW1lOiBVbml0O1xufVxudHlwZSBVc2VUaW1lQWdvUmV0dXJuPENvbnRyb2xzIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlPiA9IENvbnRyb2xzIGV4dGVuZHMgdHJ1ZSA/IHtcbiAgdGltZUFnbzogQ29tcHV0ZWRSZWY8c3RyaW5nPjtcbn0gJiBQYXVzYWJsZSA6IENvbXB1dGVkUmVmPHN0cmluZz47XG4vKipcbiAqIFJlYWN0aXZlIHRpbWUgYWdvIGZvcm1hdHRlci5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VUaW1lQWdvXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VUaW1lQWdvPFVuaXROYW1lcyBleHRlbmRzIHN0cmluZyA9IFVzZVRpbWVBZ29Vbml0TmFtZXNEZWZhdWx0Pih0aW1lOiBNYXliZVJlZk9yR2V0dGVyPERhdGUgfCBudW1iZXIgfCBzdHJpbmc+LCBvcHRpb25zPzogVXNlVGltZUFnb09wdGlvbnM8ZmFsc2UsIFVuaXROYW1lcz4pOiBVc2VUaW1lQWdvUmV0dXJuPGZhbHNlPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlVGltZUFnbzxVbml0TmFtZXMgZXh0ZW5kcyBzdHJpbmcgPSBVc2VUaW1lQWdvVW5pdE5hbWVzRGVmYXVsdD4odGltZTogTWF5YmVSZWZPckdldHRlcjxEYXRlIHwgbnVtYmVyIHwgc3RyaW5nPiwgb3B0aW9uczogVXNlVGltZUFnb09wdGlvbnM8dHJ1ZSwgVW5pdE5hbWVzPik6IFVzZVRpbWVBZ29SZXR1cm48dHJ1ZT47XG5kZWNsYXJlIGZ1bmN0aW9uIGZvcm1hdFRpbWVBZ288VW5pdE5hbWVzIGV4dGVuZHMgc3RyaW5nID0gVXNlVGltZUFnb1VuaXROYW1lc0RlZmF1bHQ+KGZyb206IERhdGUsIG9wdGlvbnM/OiBGb3JtYXRUaW1lQWdvT3B0aW9uczxVbml0TmFtZXM+LCBub3c/OiBEYXRlIHwgbnVtYmVyKTogc3RyaW5nO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlVGltZUFnb0ludGwvaW5kZXguZC50c1xudHlwZSBMb2NhbGUgPSBJbnRsLlVuaWNvZGVCQ1A0N0xvY2FsZUlkZW50aWZpZXIgfCBJbnRsLkxvY2FsZTtcbmludGVyZmFjZSBGb3JtYXRUaW1lQWdvSW50bE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGxvY2FsZSB0byBmb3JtYXQgd2l0aFxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL1JlbGF0aXZlVGltZUZvcm1hdC9SZWxhdGl2ZVRpbWVGb3JtYXQjbG9jYWxlc1xuICAgKi9cbiAgbG9jYWxlPzogTG9jYWxlO1xuICAvKipcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL1JlbGF0aXZlVGltZUZvcm1hdC9SZWxhdGl2ZVRpbWVGb3JtYXQjb3B0aW9uc1xuICAgKi9cbiAgcmVsYXRpdmVUaW1lRm9ybWF0T3B0aW9ucz86IEludGwuUmVsYXRpdmVUaW1lRm9ybWF0T3B0aW9ucztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5zZXJ0IHNwYWNlcyBiZXR3ZWVuIHBhcnRzLlxuICAgKlxuICAgKiBJZ25vcmVkIGlmIGBqb2luUGFydHNgIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBpbnNlcnRTcGFjZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gZnVuY3Rpb24gdG8gam9pbiB0aGUgcGFydHMgcmV0dXJuZWQgYnkgYEludGwuUmVsYXRpdmVUaW1lRm9ybWF0LmZvcm1hdFRvUGFydHNgLlxuICAgKlxuICAgKiBJZiBwcm92aWRlZCwgaXQgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgam9pbiBsb2dpYy5cbiAgICovXG4gIGpvaW5QYXJ0cz86IChwYXJ0czogSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXRQYXJ0W10sIGxvY2FsZT86IEludGwuVW5pY29kZUJDUDQ3TG9jYWxlSWRlbnRpZmllciB8IEludGwuTG9jYWxlKSA9PiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDdXN0b20gdW5pdHNcbiAgICovXG4gIHVuaXRzPzogVGltZUFnb1VuaXRbXTtcbn1cbmludGVyZmFjZSBVc2VUaW1lQWdvSW50bE9wdGlvbnM8Q29udHJvbHMgZXh0ZW5kcyBib29sZWFuPiBleHRlbmRzIEZvcm1hdFRpbWVBZ29JbnRsT3B0aW9ucywgQ29uZmlndXJhYmxlU2NoZWR1bGVyIHtcbiAgLyoqXG4gICAqIEV4cG9zZSBtb3JlIGNvbnRyb2xzIGFuZCB0aGUgcmF3IGBwYXJ0c2AgcmVzdWx0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY29udHJvbHM/OiBDb250cm9scztcbiAgLyoqXG4gICAqIFVwZGF0ZSBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMsIHNldCAwIHRvIGRpc2FibGUgYXV0byB1cGRhdGVcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBgc2NoZWR1bGVyYCBvcHRpb24gaW5zdGVhZFxuICAgKiBAZGVmYXVsdCAzMF8wMDBcbiAgICovXG4gIHVwZGF0ZUludGVydmFsPzogbnVtYmVyO1xufVxudHlwZSBVc2VUaW1lQWdvUmV0dXJuJDE8Q29udHJvbHMgZXh0ZW5kcyBib29sZWFuID0gZmFsc2U+ID0gQ29udHJvbHMgZXh0ZW5kcyB0cnVlID8ge1xuICB0aW1lQWdvSW50bDogQ29tcHV0ZWRSZWY8c3RyaW5nPjtcbiAgcGFydHM6IENvbXB1dGVkUmVmPEludGwuUmVsYXRpdmVUaW1lRm9ybWF0UGFydFtdPjtcbn0gJiBQYXVzYWJsZSA6IENvbXB1dGVkUmVmPHN0cmluZz47XG5pbnRlcmZhY2UgVGltZUFnb1VuaXQge1xuICBuYW1lOiBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdFVuaXQ7XG4gIG1zOiBudW1iZXI7XG59XG4vKipcbiAqIEEgcmVhY3RpdmUgd3JhcHBlciBmb3IgYEludGwuUmVsYXRpdmVUaW1lRm9ybWF0YC5cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VUaW1lQWdvSW50bCh0aW1lOiBNYXliZVJlZk9yR2V0dGVyPERhdGUgfCBudW1iZXIgfCBzdHJpbmc+LCBvcHRpb25zPzogVXNlVGltZUFnb0ludGxPcHRpb25zPGZhbHNlPik6IFVzZVRpbWVBZ29SZXR1cm4kMTxmYWxzZT47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVRpbWVBZ29JbnRsKHRpbWU6IE1heWJlUmVmT3JHZXR0ZXI8RGF0ZSB8IG51bWJlciB8IHN0cmluZz4sIG9wdGlvbnM6IFVzZVRpbWVBZ29JbnRsT3B0aW9uczx0cnVlPik6IFVzZVRpbWVBZ29SZXR1cm4kMTx0cnVlPjtcbi8qKlxuICogTm9uLXJlYWN0aXZlIHZlcnNpb24gb2YgdXNlVGltZUFnb0ludGxcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiBmb3JtYXRUaW1lQWdvSW50bChmcm9tOiBEYXRlLCBvcHRpb25zPzogRm9ybWF0VGltZUFnb0ludGxPcHRpb25zLCBub3c/OiBEYXRlIHwgbnVtYmVyKTogc3RyaW5nO1xuLyoqXG4gKiBGb3JtYXQgcGFydHMgaW50byBhIHN0cmluZ1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIGZvcm1hdFRpbWVBZ29JbnRsUGFydHMocGFydHM6IEludGwuUmVsYXRpdmVUaW1lRm9ybWF0UGFydFtdLCBvcHRpb25zPzogRm9ybWF0VGltZUFnb0ludGxPcHRpb25zKTogc3RyaW5nO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlVGltZW91dFBvbGwvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVRpbWVvdXRQb2xsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTdGFydCB0aGUgdGltZXIgaW1tZWRpYXRlbHlcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaW1tZWRpYXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgdGhlIGNhbGxiYWNrIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxpbmcgYHJlc3VtZWBcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGltbWVkaWF0ZUNhbGxiYWNrPzogYm9vbGVhbjtcbn1cbmRlY2xhcmUgZnVuY3Rpb24gdXNlVGltZW91dFBvbGwoZm46ICgpID0+IEF3YWl0YWJsZTx2b2lkPiwgaW50ZXJ2YWw6IE1heWJlUmVmT3JHZXR0ZXI8bnVtYmVyPiwgb3B0aW9ucz86IFVzZVRpbWVvdXRGbk9wdGlvbnMpOiBQYXVzYWJsZTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVRpbWVzdGFtcC9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlVGltZXN0YW1wT3B0aW9uczxDb250cm9scyBleHRlbmRzIGJvb2xlYW4+IGV4dGVuZHMgQ29uZmlndXJhYmxlU2NoZWR1bGVyIHtcbiAgLyoqXG4gICAqIEV4cG9zZSBtb3JlIGNvbnRyb2xzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjb250cm9scz86IENvbnRyb2xzO1xuICAvKipcbiAgICogT2Zmc2V0IHZhbHVlIGFkZGluZyB0byB0aGUgdmFsdWVcbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgb2Zmc2V0PzogbnVtYmVyO1xuICAvKipcbiAgICogVXBkYXRlIHRoZSB0aW1lc3RhbXAgaW1tZWRpYXRlbHlcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBgc2NoZWR1bGVyYCBvcHRpb24gaW5zdGVhZFxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBpbW1lZGlhdGU/OiBib29sZWFuO1xuICAvKipcbiAgICogVXBkYXRlIGludGVydmFsLCBvciB1c2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgYHNjaGVkdWxlcmAgb3B0aW9uIGluc3RlYWRcbiAgICogQGRlZmF1bHQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAqL1xuICBpbnRlcnZhbD86ICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnIHwgbnVtYmVyO1xuICAvKipcbiAgICogQ2FsbGJhY2sgb24gZWFjaCB1cGRhdGVcbiAgICovXG4gIGNhbGxiYWNrPzogKHRpbWVzdGFtcDogbnVtYmVyKSA9PiB2b2lkO1xufVxudHlwZSBVc2VUaW1lc3RhbXBSZXR1cm48Q29udHJvbHMgZXh0ZW5kcyBib29sZWFuPiA9IENvbnRyb2xzIGV4dGVuZHMgdHJ1ZSA/ICh7XG4gIHRpbWVzdGFtcDogU2hhbGxvd1JlZjxudW1iZXI+O1xufSAmIFBhdXNhYmxlKSA6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbi8qKlxuICogUmVhY3RpdmUgY3VycmVudCB0aW1lc3RhbXAuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlVGltZXN0YW1wXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVRpbWVzdGFtcChvcHRpb25zPzogVXNlVGltZXN0YW1wT3B0aW9uczxmYWxzZT4pOiBTaGFsbG93UmVmPG51bWJlcj47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVRpbWVzdGFtcChvcHRpb25zOiBVc2VUaW1lc3RhbXBPcHRpb25zPHRydWU+KToge1xuICB0aW1lc3RhbXA6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbn0gJiBQYXVzYWJsZTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVRpdGxlL2luZGV4LmQudHNcbnR5cGUgVXNlVGl0bGVPcHRpb25zQmFzZSA9IHtcbiAgLyoqXG4gICAqIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHRpdGxlIHdoZW4gdW5tb3VudGVkXG4gICAqIEBwYXJhbSBvcmlnaW5UaXRsZSBvcmlnaW5hbCB0aXRsZVxuICAgKiBAcmV0dXJucyByZXN0b3JlZCB0aXRsZVxuICAgKi9cbiAgcmVzdG9yZU9uVW5tb3VudD86IGZhbHNlIHwgKChvcmlnaW5hbFRpdGxlOiBzdHJpbmcsIGN1cnJlbnRUaXRsZTogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTtcbn0gJiAoe1xuICAvKipcbiAgICogT2JzZXJ2ZSBgZG9jdW1lbnQudGl0bGVgIGNoYW5nZXMgdXNpbmcgTXV0YXRpb25PYnNlcnZlXG4gICAqIENhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggYHRpdGxlVGVtcGxhdGVgIG9wdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG9ic2VydmU/OiBib29sZWFuO1xufSB8IHtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBzdHJpbmcgdG8gcGFyc2UgdGhlIHRpdGxlIChlLmcuLCAnJXMgfCBNeSBXZWJzaXRlJylcbiAgICogQ2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBgb2JzZXJ2ZWAgb3B0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnJXMnXG4gICAqL1xuICB0aXRsZVRlbXBsYXRlPzogTWF5YmVSZWY8c3RyaW5nPiB8ICgodGl0bGU6IHN0cmluZykgPT4gc3RyaW5nKTtcbn0pO1xudHlwZSBVc2VUaXRsZU9wdGlvbnMgPSBDb25maWd1cmFibGVEb2N1bWVudCAmIFVzZVRpdGxlT3B0aW9uc0Jhc2U7XG50eXBlIFVzZVRpdGxlUmV0dXJuID0gQ29tcHV0ZWRSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfCBSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD47XG4vKipcbiAqIFJlYWN0aXZlIGRvY3VtZW50IHRpdGxlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVRpdGxlXG4gKiBAcGFyYW0gbmV3VGl0bGVcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAZGVzY3JpcHRpb24gSXQncyBub3QgU1NSIGNvbXBhdGlibGUuIFlvdXIgdmFsdWUgd2lsbCBiZSBhcHBsaWVkIG9ubHkgb24gY2xpZW50LXNpZGUuXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlVGl0bGUobmV3VGl0bGU6IFJlYWRvbmx5UmVmT3JHZXR0ZXI8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4sIG9wdGlvbnM/OiBVc2VUaXRsZU9wdGlvbnMpOiBDb21wdXRlZFJlZjxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlVGl0bGUobmV3VGl0bGU/OiBNYXliZVJlZjxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiwgb3B0aW9ucz86IFVzZVRpdGxlT3B0aW9ucyk6IFJlZjxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVRyYW5zaXRpb24vaW5kZXguZC50c1xuLyoqXG4gKiBDdWJpYyBiZXppZXIgcG9pbnRzXG4gKi9cbnR5cGUgQ3ViaWNCZXppZXJQb2ludHMgPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbi8qKlxuICogRWFzaW5nIGZ1bmN0aW9uXG4gKi9cbnR5cGUgRWFzaW5nRnVuY3Rpb24gPSAobjogbnVtYmVyKSA9PiBudW1iZXI7XG4vKipcbiAqIEludGVycG9sYXRpb24gZnVuY3Rpb25cbiAqL1xudHlwZSBJbnRlcnBvbGF0aW9uRnVuY3Rpb248VD4gPSAoZnJvbTogVCwgdG86IFQsIHQ6IG51bWJlcikgPT4gVDtcbi8qKlxuICogVHJhbnNpdGlvbiBvcHRpb25zXG4gKi9cbmludGVyZmFjZSBUcmFuc2l0aW9uT3B0aW9uczxUPiBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKlxuICAgKiBNYW51YWxseSBhYm9ydCBhIHRyYW5zaXRpb25cbiAgICovXG4gIGFib3J0PzogKCkgPT4gYW55O1xuICAvKipcbiAgICogVHJhbnNpdGlvbiBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHNcbiAgICovXG4gIGR1cmF0aW9uPzogTWF5YmVSZWY8bnVtYmVyPjtcbiAgLyoqXG4gICAqIEVhc2luZyBmdW5jdGlvbiBvciBjdWJpYyBiZXppZXIgcG9pbnRzIHRvIGNhbGN1bGF0ZSB0cmFuc2l0aW9uIHByb2dyZXNzXG4gICAqL1xuICBlYXNpbmc/OiBNYXliZVJlZjxFYXNpbmdGdW5jdGlvbiB8IEN1YmljQmV6aWVyUG9pbnRzPjtcbiAgLyoqXG4gICAqIEN1c3RvbSBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uXG4gICAqL1xuICBpbnRlcnBvbGF0aW9uPzogSW50ZXJwb2xhdGlvbkZ1bmN0aW9uPFQ+O1xuICAvKipcbiAgICogRWFzaW5nIGZ1bmN0aW9uIG9yIGN1YmljIGJlemllciBwb2ludHMgdG8gY2FsY3VsYXRlIHRyYW5zaXRpb24gcHJvZ3Jlc3NcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGB0cmFuc2l0aW9uYCBvcHRpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGBlYXNpbmdgIGluc3RlYWQuXG4gICAqL1xuICB0cmFuc2l0aW9uPzogTWF5YmVSZWY8RWFzaW5nRnVuY3Rpb24gfCBDdWJpY0JlemllclBvaW50cz47XG59XG5pbnRlcmZhY2UgVXNlVHJhbnNpdGlvbk9wdGlvbnM8VD4gZXh0ZW5kcyBUcmFuc2l0aW9uT3B0aW9uczxUPiB7XG4gIC8qKlxuICAgKiBNaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgc3RhcnRpbmcgdHJhbnNpdGlvblxuICAgKi9cbiAgZGVsYXk/OiBNYXliZVJlZjxudW1iZXI+O1xuICAvKipcbiAgICogRGlzYWJsZXMgdGhlIHRyYW5zaXRpb25cbiAgICovXG4gIGRpc2FibGVkPzogTWF5YmVSZWY8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBleGVjdXRlIGFmdGVyIHRyYW5zaXRpb24gZmluaXNoZXNcbiAgICovXG4gIG9uRmluaXNoZWQ/OiAoKSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gZXhlY3V0ZSBhZnRlciB0cmFuc2l0aW9uIHN0YXJ0c1xuICAgKi9cbiAgb25TdGFydGVkPzogKCkgPT4gdm9pZDtcbn1cbmRlY2xhcmUgY29uc3QgX1RyYW5zaXRpb25QcmVzZXRzOiB7XG4gIHJlYWRvbmx5IGVhc2VJblNpbmU6IHJlYWRvbmx5IFswLjEyLCAwLCAwLjM5LCAwXTtcbiAgcmVhZG9ubHkgZWFzZU91dFNpbmU6IHJlYWRvbmx5IFswLjYxLCAxLCAwLjg4LCAxXTtcbiAgcmVhZG9ubHkgZWFzZUluT3V0U2luZTogcmVhZG9ubHkgWzAuMzcsIDAsIDAuNjMsIDFdO1xuICByZWFkb25seSBlYXNlSW5RdWFkOiByZWFkb25seSBbMC4xMSwgMCwgMC41LCAwXTtcbiAgcmVhZG9ubHkgZWFzZU91dFF1YWQ6IHJlYWRvbmx5IFswLjUsIDEsIDAuODksIDFdO1xuICByZWFkb25seSBlYXNlSW5PdXRRdWFkOiByZWFkb25seSBbMC40NSwgMCwgMC41NSwgMV07XG4gIHJlYWRvbmx5IGVhc2VJbkN1YmljOiByZWFkb25seSBbMC4zMiwgMCwgMC42NywgMF07XG4gIHJlYWRvbmx5IGVhc2VPdXRDdWJpYzogcmVhZG9ubHkgWzAuMzMsIDEsIDAuNjgsIDFdO1xuICByZWFkb25seSBlYXNlSW5PdXRDdWJpYzogcmVhZG9ubHkgWzAuNjUsIDAsIDAuMzUsIDFdO1xuICByZWFkb25seSBlYXNlSW5RdWFydDogcmVhZG9ubHkgWzAuNSwgMCwgMC43NSwgMF07XG4gIHJlYWRvbmx5IGVhc2VPdXRRdWFydDogcmVhZG9ubHkgWzAuMjUsIDEsIDAuNSwgMV07XG4gIHJlYWRvbmx5IGVhc2VJbk91dFF1YXJ0OiByZWFkb25seSBbMC43NiwgMCwgMC4yNCwgMV07XG4gIHJlYWRvbmx5IGVhc2VJblF1aW50OiByZWFkb25seSBbMC42NCwgMCwgMC43OCwgMF07XG4gIHJlYWRvbmx5IGVhc2VPdXRRdWludDogcmVhZG9ubHkgWzAuMjIsIDEsIDAuMzYsIDFdO1xuICByZWFkb25seSBlYXNlSW5PdXRRdWludDogcmVhZG9ubHkgWzAuODMsIDAsIDAuMTcsIDFdO1xuICByZWFkb25seSBlYXNlSW5FeHBvOiByZWFkb25seSBbMC43LCAwLCAwLjg0LCAwXTtcbiAgcmVhZG9ubHkgZWFzZU91dEV4cG86IHJlYWRvbmx5IFswLjE2LCAxLCAwLjMsIDFdO1xuICByZWFkb25seSBlYXNlSW5PdXRFeHBvOiByZWFkb25seSBbMC44NywgMCwgMC4xMywgMV07XG4gIHJlYWRvbmx5IGVhc2VJbkNpcmM6IHJlYWRvbmx5IFswLjU1LCAwLCAxLCAwLjQ1XTtcbiAgcmVhZG9ubHkgZWFzZU91dENpcmM6IHJlYWRvbmx5IFswLCAwLjU1LCAwLjQ1LCAxXTtcbiAgcmVhZG9ubHkgZWFzZUluT3V0Q2lyYzogcmVhZG9ubHkgWzAuODUsIDAsIDAuMTUsIDFdO1xuICByZWFkb25seSBlYXNlSW5CYWNrOiByZWFkb25seSBbMC4zNiwgMCwgMC42NiwgLTAuNTZdO1xuICByZWFkb25seSBlYXNlT3V0QmFjazogcmVhZG9ubHkgWzAuMzQsIDEuNTYsIDAuNjQsIDFdO1xuICByZWFkb25seSBlYXNlSW5PdXRCYWNrOiByZWFkb25seSBbMC42OCwgLTAuNiwgMC4zMiwgMS42XTtcbn07XG4vKipcbiAqIENvbW1vbiB0cmFuc2l0aW9uc1xuICpcbiAqIEBzZWUgaHR0cHM6Ly9lYXNpbmdzLm5ldFxuICovXG5kZWNsYXJlIGNvbnN0IFRyYW5zaXRpb25QcmVzZXRzOiBSZWNvcmQ8a2V5b2YgdHlwZW9mIF9UcmFuc2l0aW9uUHJlc2V0cywgQ3ViaWNCZXppZXJQb2ludHM+ICYge1xuICBsaW5lYXI6IEVhc2luZ0Z1bmN0aW9uO1xufTtcbi8qKlxuICogVHJhbnNpdGlvbiBmcm9tIG9uZSB2YWx1ZSB0byBhbm90aGVyLlxuICpcbiAqIEBwYXJhbSBzb3VyY2VcbiAqIEBwYXJhbSBmcm9tXG4gKiBAcGFyYW0gdG9cbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdHJhbnNpdGlvbjxUPihzb3VyY2U6IFJlZjxUPiwgZnJvbTogTWF5YmVSZWZPckdldHRlcjxUPiwgdG86IE1heWJlUmVmT3JHZXR0ZXI8VD4sIG9wdGlvbnM/OiBUcmFuc2l0aW9uT3B0aW9uczxUPik6IFByb21pc2VMaWtlPHZvaWQ+O1xuLyoqXG4gKiBUcmFuc2l0aW9uIGZyb20gb25lIHZhbHVlIHRvIGFub3RoZXIuXG4gKiBAZGVwcmVjYXRlZCBUaGUgYGV4ZWN1dGVUcmFuc2l0aW9uYCBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgYHRyYW5zaXRpb25gIGluc3RlYWQuXG4gKlxuICogQHBhcmFtIHNvdXJjZVxuICogQHBhcmFtIGZyb21cbiAqIEBwYXJhbSB0b1xuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiBleGVjdXRlVHJhbnNpdGlvbjxUPihzb3VyY2U6IFJlZjxUPiwgZnJvbTogTWF5YmVSZWZPckdldHRlcjxUPiwgdG86IE1heWJlUmVmT3JHZXR0ZXI8VD4sIG9wdGlvbnM/OiBUcmFuc2l0aW9uT3B0aW9uczxUPik6IFByb21pc2VMaWtlPHZvaWQ+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VUcmFuc2l0aW9uPFQgZXh0ZW5kcyBNYXliZVJlZk9yR2V0dGVyPG51bWJlcj5bXT4oc291cmNlOiBbLi4uVF0sIG9wdGlvbnM/OiBVc2VUcmFuc2l0aW9uT3B0aW9uczxUPik6IENvbXB1dGVkUmVmPHsgW0sgaW4ga2V5b2YgVF06IG51bWJlciB9PjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlVHJhbnNpdGlvbjxUIGV4dGVuZHMgTWF5YmVSZWZPckdldHRlcjxudW1iZXJbXT4+KHNvdXJjZTogVCwgb3B0aW9ucz86IFVzZVRyYW5zaXRpb25PcHRpb25zPFQ+KTogQ29tcHV0ZWRSZWY8bnVtYmVyW10+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VUcmFuc2l0aW9uPFQ+KHNvdXJjZTogTWF5YmVSZWZPckdldHRlcjxUPiwgb3B0aW9ucz86IFVzZVRyYW5zaXRpb25PcHRpb25zPFQ+KTogQ29tcHV0ZWRSZWY8VD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VVcmxTZWFyY2hQYXJhbXMvaW5kZXguZC50c1xudHlwZSBVcmxQYXJhbXMgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXSB8IHN0cmluZz47XG5pbnRlcmZhY2UgVXNlVXJsU2VhcmNoUGFyYW1zT3B0aW9uczxUPiBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZW1vdmVOdWxsaXNoVmFsdWVzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZW1vdmVGYWxzeVZhbHVlcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgaW5pdGlhbFZhbHVlPzogVDtcbiAgLyoqXG4gICAqIFdyaXRlIGJhY2sgdG8gYHdpbmRvdy5oaXN0b3J5YCBhdXRvbWF0aWNhbGx5XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHdyaXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdyaXRlIG1vZGUgZm9yIGB3aW5kb3cuaGlzdG9yeWAgd2hlbiBgd3JpdGVgIGlzIGVuYWJsZWRcbiAgICogLSBgcmVwbGFjZWA6IHJlcGxhY2UgdGhlIGN1cnJlbnQgaGlzdG9yeSBlbnRyeVxuICAgKiAtIGBwdXNoYDogcHVzaCBhIG5ldyBoaXN0b3J5IGVudHJ5XG4gICAqIEBkZWZhdWx0ICdyZXBsYWNlJ1xuICAgKi9cbiAgd3JpdGVNb2RlPzogJ3JlcGxhY2UnIHwgJ3B1c2gnO1xuICAvKipcbiAgICogQ3VzdG9tIGZ1bmN0aW9uIHRvIHNlcmlhbGl6ZSBVUkwgcGFyYW1ldGVyc1xuICAgKiBXaGVuIHByb3ZpZGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IFVSTFNlYXJjaFBhcmFtcy50b1N0cmluZygpXG4gICAqIEBwYXJhbSBwYXJhbXMgVGhlIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QgdG8gc2VyaWFsaXplXG4gICAqIEByZXR1cm5zIFRoZSBzZXJpYWxpemVkIHF1ZXJ5IHN0cmluZyAoc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBsZWFkaW5nICc/JyBvciAnIycpXG4gICAqL1xuICBzdHJpbmdpZnk/OiAocGFyYW1zOiBVUkxTZWFyY2hQYXJhbXMpID0+IHN0cmluZztcbn1cbi8qKlxuICogUmVhY3RpdmUgVVJMU2VhcmNoUGFyYW1zXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlVXJsU2VhcmNoUGFyYW1zXG4gKiBAcGFyYW0gbW9kZVxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VVcmxTZWFyY2hQYXJhbXM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBVcmxQYXJhbXM+KG1vZGU/OiAnaGlzdG9yeScgfCAnaGFzaCcgfCAnaGFzaC1wYXJhbXMnLCBvcHRpb25zPzogVXNlVXJsU2VhcmNoUGFyYW1zT3B0aW9uczxUPik6IFQ7XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VVc2VyTWVkaWEvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVVzZXJNZWRpYU9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVOYXZpZ2F0b3Ige1xuICAvKipcbiAgICogSWYgdGhlIHN0cmVhbSBpcyBlbmFibGVkXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlbmFibGVkPzogTWF5YmVSZWY8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBSZWNyZWF0ZSBzdHJlYW0gd2hlbiBkZXZpY2VJZHMgb3IgY29uc3RyYWludHMgY2hhbmdlZFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhdXRvU3dpdGNoPzogTWF5YmVSZWY8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBNZWRpYVN0cmVhbUNvbnN0cmFpbnRzIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHJlcXVlc3RlZCBNZWRpYVN0cmVhbVxuICAgKiBJZiBwcm92aWRlZCwgdGhlIGNvbnN0cmFpbnRzIHdpbGwgb3ZlcnJpZGUgdmlkZW9EZXZpY2VJZCBhbmQgYXVkaW9EZXZpY2VJZFxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29uc3RyYWludHM/OiBNYXliZVJlZjxNZWRpYVN0cmVhbUNvbnN0cmFpbnRzPjtcbn1cbmludGVyZmFjZSBVc2VVc2VyTWVkaWFSZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIHN0cmVhbTogUmVmPE1lZGlhU3RyZWFtIHwgdW5kZWZpbmVkPjtcbiAgc3RhcnQ6ICgpID0+IFByb21pc2U8TWVkaWFTdHJlYW0gfCB1bmRlZmluZWQ+O1xuICBzdG9wOiAoKSA9PiB2b2lkO1xuICByZXN0YXJ0OiAoKSA9PiBQcm9taXNlPE1lZGlhU3RyZWFtIHwgdW5kZWZpbmVkPjtcbiAgY29uc3RyYWludHM6IFJlZjxNZWRpYVN0cmVhbUNvbnN0cmFpbnRzIHwgdW5kZWZpbmVkPjtcbiAgZW5hYmxlZDogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgYXV0b1N3aXRjaDogU2hhbGxvd1JlZjxib29sZWFuPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgYG1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWFgIHN0cmVhbWluZ1xuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVVzZXJNZWRpYVxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VVc2VyTWVkaWEob3B0aW9ucz86IFVzZVVzZXJNZWRpYU9wdGlvbnMpOiBVc2VVc2VyTWVkaWFSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VWTW9kZWwvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVZNb2RlbE9wdGlvbnM8VCwgUGFzc2l2ZSBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZT4ge1xuICAvKipcbiAgICogV2hlbiBwYXNzaXZlIGlzIHNldCB0byBgdHJ1ZWAsIGl0IHdpbGwgdXNlIGB3YXRjaGAgdG8gc3luYyB3aXRoIHByb3BzIGFuZCByZWYuXG4gICAqIEluc3RlYWQgb2YgcmVseWluZyBvbiB0aGUgYHYtbW9kZWxgIG9yIGAuc3luY2AgdG8gd29yay5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHBhc3NpdmU/OiBQYXNzaXZlO1xuICAvKipcbiAgICogV2hlbiBldmVudE5hbWUgaXMgc2V0LCBpdCdzIHZhbHVlIHdpbGwgYmUgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGVtaXQgZXZlbnQgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBldmVudE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBdHRlbXB0aW5nIHRvIGNoZWNrIGZvciBjaGFuZ2VzIG9mIHByb3BlcnRpZXMgaW4gYSBkZWVwbHkgbmVzdGVkIG9iamVjdCBvciBhcnJheS5cbiAgICogQXBwbHkgb25seSB3aGVuIGBwYXNzaXZlYCBvcHRpb24gaXMgc2V0IHRvIGB0cnVlYFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVlcD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBEZWZpbmluZyBkZWZhdWx0IHZhbHVlIGZvciByZXR1cm4gcmVmIHdoZW4gbm8gdmFsdWUgaXMgcGFzc2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IFQ7XG4gIC8qKlxuICAgKiBDbG9uZSB0aGUgcHJvcHMuXG4gICAqIEFjY2VwdHMgYSBjdXN0b20gY2xvbmUgZnVuY3Rpb24uXG4gICAqIFdoZW4gc2V0dGluZyB0byBgdHJ1ZWAsIGl0IHdpbGwgdXNlIGBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSlgIHRvIGNsb25lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2xvbmU/OiBib29sZWFuIHwgQ2xvbmVGbjxUPjtcbiAgLyoqXG4gICAqIFRoZSBob29rIGJlZm9yZSB0cmlnZ2VyaW5nIHRoZSBlbWl0IGV2ZW50IGNhbiBiZSB1c2VkIGZvciBmb3JtIHZhbGlkYXRpb24uXG4gICAqIGlmIGZhbHNlIGlzIHJldHVybmVkLCB0aGUgZW1pdCBldmVudCB3aWxsIG5vdCBiZSB0cmlnZ2VyZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgc2hvdWxkRW1pdD86ICh2OiBUKSA9PiBib29sZWFuO1xufVxuLyoqXG4gKiBTaG9ydGhhbmQgZm9yIHYtbW9kZWwgYmluZGluZywgcHJvcHMgKyBlbWl0IC0+IHJlZlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVZNb2RlbFxuICogQHBhcmFtIHByb3BzXG4gKiBAcGFyYW0ga2V5IChkZWZhdWx0ICdtb2RlbFZhbHVlJylcbiAqIEBwYXJhbSBlbWl0XG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlVk1vZGVsPFAkMSBleHRlbmRzIG9iamVjdCwgSyQxIGV4dGVuZHMga2V5b2YgUCQxLCBOYW1lIGV4dGVuZHMgc3RyaW5nPihwcm9wczogUCQxLCBrZXk/OiBLJDEsIGVtaXQ/OiAobmFtZTogTmFtZSwgLi4uYXJnczogYW55W10pID0+IHZvaWQsIG9wdGlvbnM/OiBVc2VWTW9kZWxPcHRpb25zPFAkMVtLJDFdLCBmYWxzZT4pOiBXcml0YWJsZUNvbXB1dGVkUmVmPFAkMVtLJDFdPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlVk1vZGVsPFAkMSBleHRlbmRzIG9iamVjdCwgSyQxIGV4dGVuZHMga2V5b2YgUCQxLCBOYW1lIGV4dGVuZHMgc3RyaW5nPihwcm9wczogUCQxLCBrZXk/OiBLJDEsIGVtaXQ/OiAobmFtZTogTmFtZSwgLi4uYXJnczogYW55W10pID0+IHZvaWQsIG9wdGlvbnM/OiBVc2VWTW9kZWxPcHRpb25zPFAkMVtLJDFdLCB0cnVlPik6IFJlZjxVbndyYXBSZWY8UCQxW0skMV0+Pjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVZNb2RlbHMvaW5kZXguZC50c1xuLyoqXG4gKiBTaG9ydGhhbmQgZm9yIHByb3BzIHYtbW9kZWwgYmluZGluZy4gVGhpbmsgbGlrZSBgdG9SZWZzKHByb3BzKWAgYnV0IGNoYW5nZXMgd2lsbCBhbHNvIGVtaXQgb3V0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVZNb2RlbHNcbiAqIEBwYXJhbSBwcm9wc1xuICogQHBhcmFtIGVtaXRcbiAqIEBwYXJhbSBvcHRpb25zXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VWTW9kZWxzPFAkMSBleHRlbmRzIG9iamVjdCwgTmFtZSBleHRlbmRzIHN0cmluZz4ocHJvcHM6IFAkMSwgZW1pdD86IChuYW1lOiBOYW1lLCAuLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCwgb3B0aW9ucz86IFVzZVZNb2RlbE9wdGlvbnM8YW55LCB0cnVlPik6IFRvUmVmczxQJDE+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VWTW9kZWxzPFAkMSBleHRlbmRzIG9iamVjdCwgTmFtZSBleHRlbmRzIHN0cmluZz4ocHJvcHM6IFAkMSwgZW1pdD86IChuYW1lOiBOYW1lLCAuLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCwgb3B0aW9ucz86IFVzZVZNb2RlbE9wdGlvbnM8YW55LCBmYWxzZT4pOiBUb1JlZnM8UCQxPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVZpYnJhdGUvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVZpYnJhdGVPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlTmF2aWdhdG9yLCBDb25maWd1cmFibGVTY2hlZHVsZXIge1xuICAvKipcbiAgICpcbiAgICogVmlicmF0aW9uIFBhdHRlcm5cbiAgICpcbiAgICogQW4gYXJyYXkgb2YgdmFsdWVzIGRlc2NyaWJlcyBhbHRlcm5hdGluZyBwZXJpb2RzIGluIHdoaWNoIHRoZVxuICAgKiBkZXZpY2UgaXMgdmlicmF0aW5nIGFuZCBub3QgdmlicmF0aW5nLiBFYWNoIHZhbHVlIGluIHRoZSBhcnJheVxuICAgKiBpcyBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciwgdGhlbiBpbnRlcnByZXRlZCBhbHRlcm5hdGVseSBhc1xuICAgKiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGUgZGV2aWNlIHNob3VsZCB2aWJyYXRlIGFuZCB0aGVcbiAgICogbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCBzaG91bGQgbm90IGJlIHZpYnJhdGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKlxuICAgKi9cbiAgcGF0dGVybj86IE1heWJlUmVmT3JHZXR0ZXI8QXJyYXlhYmxlPG51bWJlcj4+O1xuICAvKipcbiAgICogSW50ZXJ2YWwgdG8gcnVuIGEgcGVyc2lzdGVudCB2aWJyYXRpb24sIGluIG1zXG4gICAqXG4gICAqIFBhc3MgYDBgIHRvIGRpc2FibGVcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBgc2NoZWR1bGVyYCBvcHRpb24gaW5zdGVhZFxuICAgKiBAZGVmYXVsdCAwXG4gICAqXG4gICAqL1xuICBpbnRlcnZhbDogbnVtYmVyO1xufVxuaW50ZXJmYWNlIFVzZVZpYnJhdGVSZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIHBhdHRlcm46IE1heWJlUmVmT3JHZXR0ZXI8QXJyYXlhYmxlPG51bWJlcj4+O1xuICBpbnRlcnZhbENvbnRyb2xzPzogUGF1c2FibGU7XG4gIHZpYnJhdGU6IChwYXR0ZXJuPzogQXJyYXlhYmxlPG51bWJlcj4pID0+IHZvaWQ7XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIFJlYWN0aXZlIHZpYnJhdGVcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VWaWJyYXRlXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9WaWJyYXRpb25fQVBJXG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlVmlicmF0ZShvcHRpb25zPzogVXNlVmlicmF0ZU9wdGlvbnMpOiBVc2VWaWJyYXRlUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlVmlydHVhbExpc3QvaW5kZXguZC50c1xudHlwZSBVc2VWaXJ0dWFsTGlzdEl0ZW1TaXplID0gbnVtYmVyIHwgKChpbmRleDogbnVtYmVyKSA9PiBudW1iZXIpO1xuaW50ZXJmYWNlIFVzZUhvcml6b250YWxWaXJ0dWFsTGlzdE9wdGlvbnMgZXh0ZW5kcyBVc2VWaXJ0dWFsTGlzdE9wdGlvbnNCYXNlIHtcbiAgLyoqXG4gICAqIGl0ZW0gd2lkdGgsIGFjY2VwdCBhIHBpeGVsIHZhbHVlIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB3aWR0aFxuICAgKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBpdGVtV2lkdGg6IFVzZVZpcnR1YWxMaXN0SXRlbVNpemU7XG59XG5pbnRlcmZhY2UgVXNlVmVydGljYWxWaXJ0dWFsTGlzdE9wdGlvbnMgZXh0ZW5kcyBVc2VWaXJ0dWFsTGlzdE9wdGlvbnNCYXNlIHtcbiAgLyoqXG4gICAqIGl0ZW0gaGVpZ2h0LCBhY2NlcHQgYSBwaXhlbCB2YWx1ZSBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgaGVpZ2h0XG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGl0ZW1IZWlnaHQ6IFVzZVZpcnR1YWxMaXN0SXRlbVNpemU7XG59XG5pbnRlcmZhY2UgVXNlVmlydHVhbExpc3RPcHRpb25zQmFzZSB7XG4gIC8qKlxuICAgKiB0aGUgZXh0cmEgYnVmZmVyIGl0ZW1zIG91dHNpZGUgb2YgdGhlIHZpZXcgYXJlYVxuICAgKlxuICAgKiBAZGVmYXVsdCA1XG4gICAqL1xuICBvdmVyc2Nhbj86IG51bWJlcjtcbn1cbnR5cGUgVXNlVmlydHVhbExpc3RPcHRpb25zID0gVXNlSG9yaXpvbnRhbFZpcnR1YWxMaXN0T3B0aW9ucyB8IFVzZVZlcnRpY2FsVmlydHVhbExpc3RPcHRpb25zO1xuaW50ZXJmYWNlIFVzZVZpcnR1YWxMaXN0SXRlbTxUPiB7XG4gIGRhdGE6IFQ7XG4gIGluZGV4OiBudW1iZXI7XG59XG5pbnRlcmZhY2UgVXNlVmlydHVhbExpc3RSZXR1cm48VD4ge1xuICBsaXN0OiBSZWY8VXNlVmlydHVhbExpc3RJdGVtPFQ+W10+O1xuICBzY3JvbGxUbzogKGluZGV4OiBudW1iZXIpID0+IHZvaWQ7XG4gIGNvbnRhaW5lclByb3BzOiB7XG4gICAgcmVmOiBSZWY8SFRNTEVsZW1lbnQgfCBudWxsPjtcbiAgICBvblNjcm9sbDogKCkgPT4gdm9pZDtcbiAgICBzdHlsZTogU3R5bGVWYWx1ZTtcbiAgfTtcbiAgd3JhcHBlclByb3BzOiBDb21wdXRlZFJlZjx7XG4gICAgc3R5bGU6IHtcbiAgICAgIHdpZHRoOiBzdHJpbmc7XG4gICAgICBoZWlnaHQ6IHN0cmluZztcbiAgICAgIG1hcmdpblRvcDogc3RyaW5nO1xuICAgIH0gfCB7XG4gICAgICB3aWR0aDogc3RyaW5nO1xuICAgICAgaGVpZ2h0OiBzdHJpbmc7XG4gICAgICBtYXJnaW5MZWZ0OiBzdHJpbmc7XG4gICAgICBkaXNwbGF5OiBzdHJpbmc7XG4gICAgfTtcbiAgfT47XG59XG4vKipcbiAqIFBsZWFzZSBjb25zaWRlciB1c2luZyBbYHZ1ZS12aXJ0dWFsLXNjcm9sbGVyYF0oaHR0cHM6Ly9naXRodWIuY29tL0Frcnl1bS92dWUtdmlydHVhbC1zY3JvbGxlcikgaWYgeW91IGFyZSBsb29raW5nIGZvciBtb3JlIGZlYXR1cmVzLlxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVZpcnR1YWxMaXN0PFQgPSBhbnk+KGxpc3Q6IE1heWJlUmVmPHJlYWRvbmx5IFRbXT4sIG9wdGlvbnM6IFVzZVZpcnR1YWxMaXN0T3B0aW9ucyk6IFVzZVZpcnR1YWxMaXN0UmV0dXJuPFQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlV2FrZUxvY2svaW5kZXguZC50c1xudHlwZSBXYWtlTG9ja1R5cGUgPSAnc2NyZWVuJztcbmludGVyZmFjZSBXYWtlTG9ja1NlbnRpbmVsIGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICB0eXBlOiBXYWtlTG9ja1R5cGU7XG4gIHJlbGVhc2VkOiBib29sZWFuO1xuICByZWxlYXNlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxudHlwZSBVc2VXYWtlTG9ja09wdGlvbnMgPSBDb25maWd1cmFibGVOYXZpZ2F0b3IgJiBDb25maWd1cmFibGVEb2N1bWVudDtcbmludGVyZmFjZSBVc2VXYWtlTG9ja1JldHVybiBleHRlbmRzIFN1cHBvcnRhYmxlIHtcbiAgc2VudGluZWw6IFNoYWxsb3dSZWY8V2FrZUxvY2tTZW50aW5lbCB8IG51bGw+O1xuICBpc0FjdGl2ZTogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gIHJlcXVlc3Q6ICh0eXBlOiBXYWtlTG9ja1R5cGUpID0+IFByb21pc2U8dm9pZD47XG4gIGZvcmNlUmVxdWVzdDogKHR5cGU6IFdha2VMb2NrVHlwZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcmVsZWFzZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgU2NyZWVuIFdha2UgTG9jayBBUEkuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlV2FrZUxvY2tcbiAqIEBwYXJhbSBvcHRpb25zXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VXYWtlTG9jayhvcHRpb25zPzogVXNlV2FrZUxvY2tPcHRpb25zKTogVXNlV2FrZUxvY2tSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VXZWJOb3RpZmljYXRpb24vaW5kZXguZC50c1xuaW50ZXJmYWNlIFdlYk5vdGlmaWNhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHRpdGxlIHJlYWQtb25seSBwcm9wZXJ0eSBvZiB0aGUgTm90aWZpY2F0aW9uIGludGVyZmFjZSBpbmRpY2F0ZXNcbiAgICogdGhlIHRpdGxlIG9mIHRoZSBub3RpZmljYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIHRpdGxlPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGJvZHkgc3RyaW5nIG9mIHRoZSBub3RpZmljYXRpb24gYXMgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3RvcidzXG4gICAqIG9wdGlvbnMgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgYm9keT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGRpcmVjdGlvbiBvZiB0aGUgbm90aWZpY2F0aW9uIGFzIHNwZWNpZmllZCBpbiB0aGUgY29uc3RydWN0b3Inc1xuICAgKiBvcHRpb25zIHBhcmFtZXRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIGRpcj86ICdhdXRvJyB8ICdsdHInIHwgJ3J0bCc7XG4gIC8qKlxuICAgKiBUaGUgbGFuZ3VhZ2UgY29kZSBvZiB0aGUgbm90aWZpY2F0aW9uIGFzIHNwZWNpZmllZCBpbiB0aGUgY29uc3RydWN0b3Inc1xuICAgKiBvcHRpb25zIHBhcmFtZXRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgRE9NU3RyaW5nXG4gICAqL1xuICBsYW5nPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBub3RpZmljYXRpb24oaWYgYW55KSBhcyBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yJ3Mgb3B0aW9uc1xuICAgKiBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICB0YWc/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgVVJMIG9mIHRoZSBpbWFnZSB1c2VkIGFzIGFuIGljb24gb2YgdGhlIG5vdGlmaWNhdGlvbiBhcyBzcGVjaWZpZWRcbiAgICogaW4gdGhlIGNvbnN0cnVjdG9yJ3Mgb3B0aW9ucyBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBpY29uPzogc3RyaW5nO1xuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHVzZXIgc2hvdWxkIGJlIG5vdGlmaWVkIGFmdGVyIGEgbmV3IG5vdGlmaWNhdGlvblxuICAgKiByZXBsYWNlcyBhbiBvbGQgb25lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVub3RpZnk/OiBib29sZWFuO1xuICAvKipcbiAgICogQSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhhdCBhIG5vdGlmaWNhdGlvbiBzaG91bGQgcmVtYWluIGFjdGl2ZSB1bnRpbCB0aGVcbiAgICogdXNlciBjbGlja3Mgb3IgZGlzbWlzc2VzIGl0LCByYXRoZXIgdGhhbiBjbG9zaW5nIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXF1aXJlSW50ZXJhY3Rpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIHNpbGVudCByZWFkLW9ubHkgcHJvcGVydHkgb2YgdGhlIE5vdGlmaWNhdGlvbiBpbnRlcmZhY2Ugc3BlY2lmaWVzXG4gICAqIHdoZXRoZXIgdGhlIG5vdGlmaWNhdGlvbiBzaG91bGQgYmUgc2lsZW50LCBpLmUuLCBubyBzb3VuZHMgb3IgdmlicmF0aW9uc1xuICAgKiBzaG91bGQgYmUgaXNzdWVkLCByZWdhcmRsZXNzIG9mIHRoZSBkZXZpY2Ugc2V0dGluZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzaWxlbnQ/OiBib29sZWFuO1xuICAvKipcbiAgICogU3BlY2lmaWVzIGEgdmlicmF0aW9uIHBhdHRlcm4gZm9yIGRldmljZXMgd2l0aCB2aWJyYXRpb24gaGFyZHdhcmUgdG8gZW1pdC5cbiAgICogQSB2aWJyYXRpb24gcGF0dGVybiwgYXMgc3BlY2lmaWVkIGluIHRoZSBWaWJyYXRpb24gQVBJIHNwZWNcbiAgICpcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vdmlicmF0aW9uL1xuICAgKi9cbiAgdmlicmF0ZT86IG51bWJlcltdO1xufVxuaW50ZXJmYWNlIFVzZVdlYk5vdGlmaWNhdGlvbk9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3csIFdlYk5vdGlmaWNhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogUmVxdWVzdCBmb3IgcGVybWlzc2lvbnMgb25Nb3VudGVkIGlmIGl0J3Mgbm90IGdyYW50ZWQuXG4gICAqXG4gICAqIENhbiBiZSBkaXNhYmxlZCBhbmQgY2FsbGluZyBgZW5zdXJlUGVybWlzc2lvbnNgIHRvIGdyYW50IGFmdGVyd29yZHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlcXVlc3RQZXJtaXNzaW9ucz86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgVXNlV2ViTm90aWZpY2F0aW9uUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBub3RpZmljYXRpb246IFJlZjxOb3RpZmljYXRpb24gfCBudWxsPjtcbiAgZW5zdXJlUGVybWlzc2lvbnM6ICgpID0+IFByb21pc2U8Ym9vbGVhbiB8IHVuZGVmaW5lZD47XG4gIHBlcm1pc3Npb25HcmFudGVkOiBTaGFsbG93UmVmPGJvb2xlYW4+O1xuICBzaG93OiAob3ZlcnJpZGVzPzogV2ViTm90aWZpY2F0aW9uT3B0aW9ucykgPT4gUHJvbWlzZTxOb3RpZmljYXRpb24gfCB1bmRlZmluZWQ+O1xuICBjbG9zZTogKCkgPT4gdm9pZDtcbiAgb25DbGljazogRXZlbnRIb29rT248RXZlbnQ+O1xuICBvblNob3c6IEV2ZW50SG9va09uPEV2ZW50PjtcbiAgb25FcnJvcjogRXZlbnRIb29rT248RXZlbnQ+O1xuICBvbkNsb3NlOiBFdmVudEhvb2tPbjxFdmVudD47XG59XG4vKipcbiAqIFJlYWN0aXZlIHVzZVdlYk5vdGlmaWNhdGlvblxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVdlYk5vdGlmaWNhdGlvblxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvbm90aWZpY2F0aW9uXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlV2ViTm90aWZpY2F0aW9uKG9wdGlvbnM/OiBVc2VXZWJOb3RpZmljYXRpb25PcHRpb25zKTogVXNlV2ViTm90aWZpY2F0aW9uUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlV2ViU29ja2V0L2luZGV4LmQudHNcbnR5cGUgV2ViU29ja2V0U3RhdHVzID0gJ09QRU4nIHwgJ0NPTk5FQ1RJTkcnIHwgJ0NMT1NFRCc7XG50eXBlIFdlYlNvY2tldEhlYXJ0YmVhdE1lc3NhZ2UgPSBzdHJpbmcgfCBBcnJheUJ1ZmZlciB8IEJsb2I7XG5pbnRlcmZhY2UgVXNlV2ViU29ja2V0T3B0aW9ucyB7XG4gIG9uQ29ubmVjdGVkPzogKHdzOiBXZWJTb2NrZXQpID0+IHZvaWQ7XG4gIG9uRGlzY29ubmVjdGVkPzogKHdzOiBXZWJTb2NrZXQsIGV2ZW50OiBDbG9zZUV2ZW50KSA9PiB2b2lkO1xuICBvbkVycm9yPzogKHdzOiBXZWJTb2NrZXQsIGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgb25NZXNzYWdlPzogKHdzOiBXZWJTb2NrZXQsIGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBTZW5kIGhlYXJ0YmVhdCBmb3IgZXZlcnkgeCBtaWxsaXNlY29uZHMgcGFzc2VkXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoZWFydGJlYXQ/OiBib29sZWFuIHwgQ29uZmlndXJhYmxlU2NoZWR1bGVyICYge1xuICAgIC8qKlxuICAgICAqIE1lc3NhZ2UgZm9yIHRoZSBoZWFydGJlYXRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdwaW5nJ1xuICAgICAqL1xuICAgIG1lc3NhZ2U/OiBNYXliZVJlZk9yR2V0dGVyPFdlYlNvY2tldEhlYXJ0YmVhdE1lc3NhZ2U+O1xuICAgIC8qKlxuICAgICAqIFJlc3BvbnNlIG1lc3NhZ2UgZm9yIHRoZSBoZWFydGJlYXQsIGlmIHVuZGVmaW5lZCB0aGUgbWVzc2FnZSB3aWxsIGJlIHVzZWRcbiAgICAgKi9cbiAgICByZXNwb25zZU1lc3NhZ2U/OiBNYXliZVJlZk9yR2V0dGVyPFdlYlNvY2tldEhlYXJ0YmVhdE1lc3NhZ2U+O1xuICAgIC8qKlxuICAgICAqIEludGVydmFsLCBpbiBtaWxsaXNlY29uZHNcbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgYHNjaGVkdWxlcmAgb3B0aW9uIGluc3RlYWRcbiAgICAgKiBAZGVmYXVsdCAxMDAwXG4gICAgICovXG4gICAgaW50ZXJ2YWw/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogSGVhcnRiZWF0IHJlc3BvbnNlIHRpbWVvdXQsIGluIG1pbGxpc2Vjb25kc1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgMTAwMFxuICAgICAqL1xuICAgIHBvbmdUaW1lb3V0PzogbnVtYmVyO1xuICB9O1xuICAvKipcbiAgICogRW5hYmxlZCBhdXRvIHJlY29ubmVjdFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b1JlY29ubmVjdD86IGJvb2xlYW4gfCB7XG4gICAgLyoqXG4gICAgICogTWF4aW11bSByZXRyeSB0aW1lcy5cbiAgICAgKlxuICAgICAqIE9yIHlvdSBjYW4gcGFzcyBhIHByZWRpY2F0ZSBmdW5jdGlvbiAod2hpY2ggcmV0dXJucyB0cnVlIGlmIHlvdSB3YW50IHRvIHJldHJ5KS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IC0xXG4gICAgICovXG4gICAgcmV0cmllcz86IG51bWJlciB8ICgocmV0cmllZDogbnVtYmVyKSA9PiBib29sZWFuKTtcbiAgICAvKipcbiAgICAgKiBEZWxheSBmb3IgcmVjb25uZWN0LCBpbiBtaWxsaXNlY29uZHNcbiAgICAgKlxuICAgICAqIE9yIHlvdSBjYW4gcGFzcyBhIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgZGVsYXkgYmFzZWQgb24gdGhlIG51bWJlciBvZiByZXRyaWVzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgMTAwMFxuICAgICAqL1xuICAgIGRlbGF5PzogbnVtYmVyIHwgKChyZXRyaWVzOiBudW1iZXIpID0+IG51bWJlcik7XG4gICAgLyoqXG4gICAgICogT24gbWF4aW11bSByZXRyeSB0aW1lcyByZWFjaGVkLlxuICAgICAqL1xuICAgIG9uRmFpbGVkPzogRm47XG4gIH07XG4gIC8qKlxuICAgKiBJbW1lZGlhdGVseSBvcGVuIHRoZSBjb25uZWN0aW9uIHdoZW4gY2FsbGluZyB0aGlzIGNvbXBvc2FibGVcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaW1tZWRpYXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgY29ubmVjdCB0byB0aGUgd2Vic29ja2V0IHdoZW4gVVJMIGNoYW5nZXNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b0Nvbm5lY3Q/OiBib29sZWFuO1xuICAvKipcbiAgICogQXV0b21hdGljYWxseSBjbG9zZSBhIGNvbm5lY3Rpb25cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b0Nsb3NlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIExpc3Qgb2Ygb25lIG9yIG1vcmUgc3ViLXByb3RvY29sIHN0cmluZ3NcbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHByb3RvY29scz86IHN0cmluZ1tdO1xufVxuaW50ZXJmYWNlIFVzZVdlYlNvY2tldFJldHVybjxUPiB7XG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGxhdGVzdCBkYXRhIHJlY2VpdmVkIHZpYSB0aGUgd2Vic29ja2V0LFxuICAgKiBjYW4gYmUgd2F0Y2hlZCB0byByZXNwb25kIHRvIGluY29taW5nIG1lc3NhZ2VzXG4gICAqL1xuICBkYXRhOiBSZWY8VCB8IG51bGw+O1xuICAvKipcbiAgICogVGhlIGN1cnJlbnQgd2Vic29ja2V0IHN0YXR1cywgY2FuIGJlIG9ubHkgb25lIG9mOlxuICAgKiAnT1BFTicsICdDT05ORUNUSU5HJywgJ0NMT1NFRCdcbiAgICovXG4gIHN0YXR1czogU2hhbGxvd1JlZjxXZWJTb2NrZXRTdGF0dXM+O1xuICAvKipcbiAgICogQ2xvc2VzIHRoZSB3ZWJzb2NrZXQgY29ubmVjdGlvbiBncmFjZWZ1bGx5LlxuICAgKi9cbiAgY2xvc2U6IFdlYlNvY2tldFsnY2xvc2UnXTtcbiAgLyoqXG4gICAqIFJlb3BlbiB0aGUgd2Vic29ja2V0IGNvbm5lY3Rpb24uXG4gICAqIElmIHRoZXJlIHRoZSBjdXJyZW50IG9uZSBpcyBhY3RpdmUsIHdpbGwgY2xvc2UgaXQgYmVmb3JlIG9wZW5pbmcgYSBuZXcgb25lLlxuICAgKi9cbiAgb3BlbjogRm47XG4gIC8qKlxuICAgKiBTZW5kcyBkYXRhIHRocm91Z2ggdGhlIHdlYnNvY2tldCBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gdXNlQnVmZmVyIHdoZW4gdGhlIHNvY2tldCBpcyBub3QgeWV0IG9wZW4sIHN0b3JlIHRoZSBkYXRhIGludG8gdGhlIGJ1ZmZlciBhbmQgc2VudCB0aGVtIG9uZSBjb25uZWN0ZWQuIERlZmF1bHQgdG8gdHJ1ZS5cbiAgICovXG4gIHNlbmQ6IChkYXRhOiBzdHJpbmcgfCBBcnJheUJ1ZmZlciB8IEJsb2IsIHVzZUJ1ZmZlcj86IGJvb2xlYW4pID0+IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIFdlYlNvY2tldCBpbnN0YW5jZS5cbiAgICovXG4gIHdzOiBSZWY8V2ViU29ja2V0IHwgdW5kZWZpbmVkPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgV2ViU29ja2V0IGNsaWVudC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VXZWJTb2NrZXRcbiAqIEBwYXJhbSB1cmxcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VXZWJTb2NrZXQ8RGF0YSA9IGFueT4odXJsOiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZyB8IFVSTCB8IHVuZGVmaW5lZD4sIG9wdGlvbnM/OiBVc2VXZWJTb2NrZXRPcHRpb25zKTogVXNlV2ViU29ja2V0UmV0dXJuPERhdGE+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlV2ViV29ya2VyL2luZGV4LmQudHNcbnR5cGUgUG9zdE1lc3NhZ2UgPSB0eXBlb2YgV29ya2VyLnByb3RvdHlwZVsncG9zdE1lc3NhZ2UnXTtcbmludGVyZmFjZSBVc2VXZWJXb3JrZXJSZXR1cm48RGF0YSA9IGFueT4ge1xuICBkYXRhOiBSZWY8RGF0YT47XG4gIHBvc3Q6IFBvc3RNZXNzYWdlO1xuICB0ZXJtaW5hdGU6ICgpID0+IHZvaWQ7XG4gIHdvcmtlcjogU2hhbGxvd1JlZjxXb3JrZXIgfCB1bmRlZmluZWQ+O1xufVxudHlwZSBXb3JrZXJGbiA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IFdvcmtlcjtcbi8qKlxuICogU2ltcGxlIFdlYiBXb3JrZXJzIHJlZ2lzdHJhdGlvbiBhbmQgY29tbXVuaWNhdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VXZWJXb3JrZXJcbiAqIEBwYXJhbSB1cmxcbiAqIEBwYXJhbSB3b3JrZXJPcHRpb25zXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVdlYldvcmtlcjxUID0gYW55Pih1cmw6IHN0cmluZywgd29ya2VyT3B0aW9ucz86IFdvcmtlck9wdGlvbnMsIG9wdGlvbnM/OiBDb25maWd1cmFibGVXaW5kb3cpOiBVc2VXZWJXb3JrZXJSZXR1cm48VD47XG4vKipcbiAqIFNpbXBsZSBXZWIgV29ya2VycyByZWdpc3RyYXRpb24gYW5kIGNvbW11bmljYXRpb24uXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlV2ViV29ya2VyXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlV2ViV29ya2VyPFQgPSBhbnk+KHdvcmtlcjogV29ya2VyIHwgV29ya2VyRm4pOiBVc2VXZWJXb3JrZXJSZXR1cm48VD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VXZWJXb3JrZXJGbi9pbmRleC5kLnRzXG50eXBlIFdlYldvcmtlclN0YXR1cyA9ICdQRU5ESU5HJyB8ICdTVUNDRVNTJyB8ICdSVU5OSU5HJyB8ICdFUlJPUicgfCAnVElNRU9VVF9FWFBJUkVEJztcbmludGVyZmFjZSBVc2VXZWJXb3JrZXJPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHtcbiAgLyoqXG4gICAqIE51bWJlciBvZiBtaWxsaXNlY29uZHMgYmVmb3JlIGtpbGxpbmcgdGhlIHdvcmtlclxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBBbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBleHRlcm5hbCBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIHJ1biB0aGUgd29ya2VyXG4gICAqL1xuICBkZXBlbmRlbmNpZXM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIGxvY2FsIGRlcGVuZGVuY2llcyBuZWVkZWQgdG8gcnVuIHRoZSB3b3JrZXJcbiAgICovXG4gIGxvY2FsRGVwZW5kZW5jaWVzPzogRnVuY3Rpb25bXTtcbn1cbmludGVyZmFjZSBVc2VXZWJXb3JrZXJGblJldHVybjxUIGV4dGVuZHMgKC4uLmZuQXJnczogYW55W10pID0+IGFueT4ge1xuICB3b3JrZXJGbjogKC4uLmZuQXJnczogUGFyYW1ldGVyczxUPikgPT4gUHJvbWlzZTxSZXR1cm5UeXBlPFQ+PjtcbiAgd29ya2VyU3RhdHVzOiBTaGFsbG93UmVmPFdlYldvcmtlclN0YXR1cz47XG4gIHdvcmtlclRlcm1pbmF0ZTogKHN0YXR1cz86IFdlYldvcmtlclN0YXR1cykgPT4gdm9pZDtcbn1cbi8qKlxuICogUnVuIGV4cGVuc2l2ZSBmdW5jdGlvbiB3aXRob3V0IGJsb2NraW5nIHRoZSBVSSwgdXNpbmcgYSBzaW1wbGUgc3ludGF4IHRoYXQgbWFrZXMgdXNlIG9mIFByb21pc2UuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlV2ViV29ya2VyRm5cbiAqIEBwYXJhbSBmblxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VXZWJXb3JrZXJGbjxUIGV4dGVuZHMgKC4uLmZuQXJnczogYW55W10pID0+IGFueT4oZm46IFQsIG9wdGlvbnM/OiBVc2VXZWJXb3JrZXJPcHRpb25zKTogVXNlV2ViV29ya2VyRm5SZXR1cm48VD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VXaW5kb3dGb2N1cy9pbmRleC5kLnRzXG4vKipcbiAqIFJlYWN0aXZlbHkgdHJhY2sgd2luZG93IGZvY3VzIHdpdGggYHdpbmRvdy5vbmZvY3VzYCBhbmQgYHdpbmRvdy5vbmJsdXJgLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVdpbmRvd0ZvY3VzXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VXaW5kb3dGb2N1cyhvcHRpb25zPzogQ29uZmlndXJhYmxlV2luZG93KTogU2hhbGxvd1JlZjxib29sZWFuPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVdpbmRvd1Njcm9sbC9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlV2luZG93U2Nyb2xsT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdywgVXNlU2Nyb2xsT3B0aW9ucyB7fVxuaW50ZXJmYWNlIFVzZVdpbmRvd1Njcm9sbFJldHVybiBleHRlbmRzIFVzZVNjcm9sbFJldHVybiB7fVxuLyoqXG4gKiBSZWFjdGl2ZSB3aW5kb3cgc2Nyb2xsLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVdpbmRvd1Njcm9sbFxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VXaW5kb3dTY3JvbGwob3B0aW9ucz86IFVzZVdpbmRvd1Njcm9sbE9wdGlvbnMpOiBVc2VXaW5kb3dTY3JvbGxSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VXaW5kb3dTaXplL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VXaW5kb3dTaXplT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIGluaXRpYWxXaWR0aD86IG51bWJlcjtcbiAgaW5pdGlhbEhlaWdodD86IG51bWJlcjtcbiAgLyoqXG4gICAqIExpc3RlbiB0byB3aW5kb3cgYG9yaWVudGF0aW9uY2hhbmdlYCBldmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBsaXN0ZW5PcmllbnRhdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzY3JvbGxiYXIgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSB3aWR0aCBhbmQgaGVpZ2h0XG4gICAqIE9ubHkgZWZmZWN0aXZlIHdoZW4gYHR5cGVgIGlzIGAnaW5uZXInYFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBpbmNsdWRlU2Nyb2xsYmFyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFVzZSBgd2luZG93LmlubmVyV2lkdGhgIG9yIGB3aW5kb3cub3V0ZXJXaWR0aGAgb3IgYHdpbmRvdy52aXN1YWxWaWV3cG9ydGBcbiAgICogdmlzdWFsVmlld3BvcnQgZG9jdW1lbnRhdGlvbiBmcm9tIE1ETihodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy96aC1DTi9kb2NzL1dlYi9BUEkvVmlzdWFsVmlld3BvcnQpXG4gICAqIEBkZWZhdWx0ICdpbm5lcidcbiAgICovXG4gIHR5cGU/OiAnaW5uZXInIHwgJ291dGVyJyB8ICd2aXN1YWwnO1xufVxuaW50ZXJmYWNlIFVzZVdpbmRvd1NpemVSZXR1cm4ge1xuICB3aWR0aDogU2hhbGxvd1JlZjxudW1iZXI+O1xuICBoZWlnaHQ6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgd2luZG93IHNpemUuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlV2luZG93U2l6ZVxuICogQHBhcmFtIG9wdGlvbnNcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVdpbmRvd1NpemUob3B0aW9ucz86IFVzZVdpbmRvd1NpemVPcHRpb25zKTogVXNlV2luZG93U2l6ZVJldHVybjtcbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgQWZ0ZXJGZXRjaENvbnRleHQsIEFzeW5jQ29tcHV0ZWRPbkNhbmNlbCwgQXN5bmNDb21wdXRlZE9wdGlvbnMsIEJhc2ljQ29sb3JNb2RlLCBCYXNpY0NvbG9yU2NoZW1hLCBCYXR0ZXJ5TWFuYWdlciwgQmVmb3JlRmV0Y2hDb250ZXh0LCBCcmVha3BvaW50cywgQnJvd3NlckxvY2F0aW9uU3RhdGUsIENsb25lRm4sIENvbG9yU2NoZW1lVHlwZSwgQ29tcHV0ZWRJbmplY3RHZXR0ZXIsIENvbXB1dGVkSW5qZWN0R2V0dGVyV2l0aERlZmF1bHQsIENvbXB1dGVkSW5qZWN0U2V0dGVyLCBDb25maWd1cmFibGVEZWVwUmVmcywgQ29uZmlndXJhYmxlRG9jdW1lbnQsIENvbmZpZ3VyYWJsZURvY3VtZW50T3JTaGFkb3dSb290LCBDb25maWd1cmFibGVMb2NhdGlvbiwgQ29uZmlndXJhYmxlTmF2aWdhdG9yLCBDb25maWd1cmFibGVTY2hlZHVsZXIsIENvbmZpZ3VyYWJsZVdpbmRvdywgQ29udHJhc3RUeXBlLCBDcmVhdGVGZXRjaE9wdGlvbnMsIENyZWF0ZVJldXNhYmxlVGVtcGxhdGVPcHRpb25zLCBDdWJpY0JlemllclBvaW50cywgRGVmYXVsdE1hZ2ljS2V5c0FsaWFzTWFwLCBEZWZpbmVUZW1wbGF0ZUNvbXBvbmVudCwgRGV2aWNlTW90aW9uT3B0aW9ucywgRG9jdW1lbnRFdmVudE5hbWUsIEVhc2luZ0Z1bmN0aW9uLCBFbGVtZW50U2l6ZSwgRXZlbnRCdXNFdmVudHMsIEV2ZW50QnVzSWRlbnRpZmllciwgRXZlbnRCdXNLZXksIEV2ZW50QnVzTGlzdGVuZXIsIEV2ZW50U291cmNlU3RhdHVzLCBFeWVEcm9wcGVyLCBFeWVEcm9wcGVyT3Blbk9wdGlvbnMsIEZpbGVTeXN0ZW1BY2Nlc3NTaG93T3BlbkZpbGVPcHRpb25zLCBGaWxlU3lzdGVtQWNjZXNzU2hvd1NhdmVGaWxlT3B0aW9ucywgRmlsZVN5c3RlbUFjY2Vzc1dpbmRvdywgRmlsZVN5c3RlbUZpbGVIYW5kbGUsIEZvcm1hdFRpbWVBZ29JbnRsT3B0aW9ucywgRm9ybWF0VGltZUFnb09wdGlvbnMsIEdlbmVyYWxFdmVudExpc3RlbmVyLCBHZW5lcmFsUGVybWlzc2lvbkRlc2NyaXB0b3IsIEludGVycG9sYXRpb25GdW5jdGlvbiwgS2V5RmlsdGVyLCBLZXlNb2RpZmllciwgS2V5UHJlZGljYXRlLCBLZXlTdHJva2VFdmVudE5hbWUsIE1hZ2ljS2V5c0ludGVybmFsLCBNYXliZUNvbXB1dGVkRWxlbWVudFJlZiwgTWF5YmVFbGVtZW50LCBNYXliZUVsZW1lbnRSZWYsIE1lbW9yeUluZm8sIE1vdXNlSW5FbGVtZW50T3B0aW9ucywgTW91c2VQcmVzc2VkT3B0aW9ucywgTmF2aWdhdG9yTGFuZ3VhZ2VTdGF0ZSwgTmV0d29ya0VmZmVjdGl2ZVR5cGUsIE5ldHdvcmtTdGF0ZSwgTmV0d29ya1R5cGUsIE9uQ2xpY2tPdXRzaWRlSGFuZGxlciwgT25DbGlja091dHNpZGVPcHRpb25zLCBPbkNsaWNrT3V0c2lkZVJldHVybiwgT25FbGVtZW50UmVtb3ZhbE9wdGlvbnMsIE9uRmV0Y2hFcnJvckNvbnRleHQsIE9uS2V5U3Ryb2tlT3B0aW9ucywgT25Mb25nUHJlc3NNb2RpZmllcnMsIE9uTG9uZ1ByZXNzT3B0aW9ucywgT25Mb25nUHJlc3NSZXR1cm4sIE9yaWVudGF0aW9uTG9ja1R5cGUsIE9yaWVudGF0aW9uVHlwZSwgUG9pbnRlclR5cGUsIFBvc2l0aW9uLCBSZWR1Y2VkTW90aW9uVHlwZSwgUmVkdWNlZFRyYW5zcGFyZW5jeVR5cGUsIFJlbmRlcmFibGVDb21wb25lbnQsIFJlc2l6ZU9ic2VydmVyQ2FsbGJhY2ssIFJlc2l6ZU9ic2VydmVyRW50cnksIFJlc2l6ZU9ic2VydmVyU2l6ZSwgUmV1c2FibGVUZW1wbGF0ZVBhaXIsIFJldXNlVGVtcGxhdGVDb21wb25lbnQsIFNTUkhhbmRsZXJzTWFwLCBTY3JlZW5PcmllbnRhdGlvbiwgU2VyaWFsaXplciwgU2VyaWFsaXplckFzeW5jLCBTaGFkb3dSb290RXZlbnROYW1lLCBTdG9yYWdlRXZlbnRMaWtlLCBTdG9yYWdlTGlrZSwgU3RvcmFnZUxpa2VBc3luYywgU3RvcmFnZVNlcmlhbGl6ZXJzLCBTdXBwb3J0YWJsZSwgVGVtcGxhdGVQcm9taXNlLCBUZW1wbGF0ZVByb21pc2VPcHRpb25zLCBUZW1wbGF0ZVByb21pc2VQcm9wcywgVGVtcGxhdGVSZWZzTGlzdCwgVGltZUFnb1VuaXQsIFRvRGF0YVVSTE9wdGlvbnMsIFRyYW5zaXRpb25PcHRpb25zLCBUcmFuc2l0aW9uUHJlc2V0cywgVW5SZWZFbGVtZW50UmV0dXJuLCBVbnJlZkZuLCBVcmxQYXJhbXMsIFVzZUFjdGl2ZUVsZW1lbnRPcHRpb25zLCBVc2VBY3RpdmVFbGVtZW50UmV0dXJuLCBVc2VBbmltYXRlS2V5ZnJhbWVzLCBVc2VBbmltYXRlT3B0aW9ucywgVXNlQW5pbWF0ZVJldHVybiwgVXNlQXN5bmNRdWV1ZU9wdGlvbnMsIFVzZUFzeW5jUXVldWVSZXN1bHQsIFVzZUFzeW5jUXVldWVSZXR1cm4sIFVzZUFzeW5jUXVldWVUYXNrLCBVc2VBc3luY1N0YXRlT3B0aW9ucywgVXNlQXN5bmNTdGF0ZVJldHVybiwgVXNlQXN5bmNTdGF0ZVJldHVybkJhc2UsIFVzZUJhc2U2NE9iamVjdE9wdGlvbnMsIFVzZUJhc2U2NE9wdGlvbnMsIFVzZUJhc2U2NFJldHVybiwgVXNlQmF0dGVyeU9wdGlvbnMsIFVzZUJhdHRlcnlSZXR1cm4sIFVzZUJsdWV0b290aE9wdGlvbnMsIFVzZUJsdWV0b290aFJlcXVlc3REZXZpY2VPcHRpb25zLCBVc2VCbHVldG9vdGhSZXR1cm4sIFVzZUJyZWFrcG9pbnRSZXR1cm4sIFVzZUJyZWFrcG9pbnRzT3B0aW9ucywgVXNlQnJvYWRjYXN0Q2hhbm5lbE9wdGlvbnMsIFVzZUJyb2FkY2FzdENoYW5uZWxSZXR1cm4sIFVzZUJyb3dzZXJMb2NhdGlvbk9wdGlvbnMsIFVzZUJyb3dzZXJMb2NhdGlvblJldHVybiwgVXNlQ2FjaGVkT3B0aW9ucywgVXNlQ2FjaGVkUmV0dXJuLCBVc2VDbGlwYm9hcmRJdGVtc09wdGlvbnMsIFVzZUNsaXBib2FyZEl0ZW1zUmV0dXJuLCBVc2VDbGlwYm9hcmRPcHRpb25zLCBVc2VDbGlwYm9hcmRSZXR1cm4sIFVzZUNsb25lZE9wdGlvbnMsIFVzZUNsb25lZFJldHVybiwgVXNlQ29sb3JNb2RlT3B0aW9ucywgVXNlQ29sb3JNb2RlUmV0dXJuLCBVc2VDb25maXJtRGlhbG9nUmV0dXJuLCBVc2VDb25maXJtRGlhbG9nUmV2ZWFsUmVzdWx0LCBVc2VDb3VudGRvd25PcHRpb25zLCBVc2VDb3VudGRvd25SZXR1cm4sIFVzZUNzc1N1cHBvcnRzT3B0aW9ucywgVXNlQ3NzU3VwcG9ydHNSZXR1cm4sIFVzZUNzc1Zhck9wdGlvbnMsIFVzZUN5Y2xlTGlzdE9wdGlvbnMsIFVzZUN5Y2xlTGlzdFJldHVybiwgVXNlRGFya09wdGlvbnMsIFVzZURhcmtSZXR1cm4sIFVzZURldmljZU1vdGlvbk9wdGlvbnMsIFVzZURldmljZU1vdGlvblJldHVybiwgVXNlRGV2aWNlT3JpZW50YXRpb25PcHRpb25zLCBVc2VEZXZpY2VPcmllbnRhdGlvblJldHVybiwgVXNlRGV2aWNlUGl4ZWxSYXRpb09wdGlvbnMsIFVzZURldmljZVBpeGVsUmF0aW9SZXR1cm4sIFVzZURldmljZXNMaXN0T3B0aW9ucywgVXNlRGV2aWNlc0xpc3RSZXR1cm4sIFVzZURpc3BsYXlNZWRpYU9wdGlvbnMsIFVzZURpc3BsYXlNZWRpYVJldHVybiwgVXNlRG9jdW1lbnRWaXNpYmlsaXR5T3B0aW9ucywgVXNlRG9jdW1lbnRWaXNpYmlsaXR5UmV0dXJuLCBVc2VEcmFnZ2FibGVPcHRpb25zLCBVc2VEcmFnZ2FibGVSZXR1cm4sIFVzZURyb3Bab25lT3B0aW9ucywgVXNlRHJvcFpvbmVSZXR1cm4sIFVzZUVsZW1lbnRCb3VuZGluZ09wdGlvbnMsIFVzZUVsZW1lbnRCb3VuZGluZ1JldHVybiwgVXNlRWxlbWVudEJ5UG9pbnRPcHRpb25zLCBVc2VFbGVtZW50QnlQb2ludFJldHVybiwgVXNlRWxlbWVudEhvdmVyT3B0aW9ucywgVXNlRWxlbWVudFNpemVPcHRpb25zLCBVc2VFbGVtZW50U2l6ZVJldHVybiwgVXNlRWxlbWVudFZpc2liaWxpdHlPcHRpb25zLCBVc2VFbGVtZW50VmlzaWJpbGl0eVJldHVybiwgVXNlRXZlbnRCdXNSZXR1cm4sIFVzZUV2ZW50U291cmNlT3B0aW9ucywgVXNlRXZlbnRTb3VyY2VSZXR1cm4sIFVzZUV5ZURyb3BwZXJPcHRpb25zLCBVc2VFeWVEcm9wcGVyUmV0dXJuLCBVc2VGYXZpY29uT3B0aW9ucywgVXNlRmF2aWNvblJldHVybiwgVXNlRmV0Y2hPcHRpb25zLCBVc2VGZXRjaFJldHVybiwgVXNlRmlsZURpYWxvZ09wdGlvbnMsIFVzZUZpbGVEaWFsb2dSZXR1cm4sIFVzZUZpbGVTeXN0ZW1BY2Nlc3NDb21tb25PcHRpb25zLCBVc2VGaWxlU3lzdGVtQWNjZXNzT3B0aW9ucywgVXNlRmlsZVN5c3RlbUFjY2Vzc1JldHVybiwgVXNlRmlsZVN5c3RlbUFjY2Vzc1Nob3dTYXZlRmlsZU9wdGlvbnMsIFVzZUZvY3VzT3B0aW9ucywgVXNlRm9jdXNSZXR1cm4sIFVzZUZvY3VzV2l0aGluUmV0dXJuLCBVc2VGcHNPcHRpb25zLCBVc2VGdWxsc2NyZWVuT3B0aW9ucywgVXNlRnVsbHNjcmVlblJldHVybiwgVXNlR2FtZXBhZE9wdGlvbnMsIFVzZUdhbWVwYWRSZXR1cm4sIFVzZUdlb2xvY2F0aW9uT3B0aW9ucywgVXNlR2VvbG9jYXRpb25SZXR1cm4sIFVzZUhvcml6b250YWxWaXJ0dWFsTGlzdE9wdGlvbnMsIFVzZUlkbGVPcHRpb25zLCBVc2VJZGxlUmV0dXJuLCBVc2VJbWFnZU9wdGlvbnMsIFVzZUltYWdlUmV0dXJuLCBVc2VJbmZpbml0ZVNjcm9sbE9wdGlvbnMsIFVzZUluZmluaXRlU2Nyb2xsUmV0dXJuLCBVc2VJbnRlcnNlY3Rpb25PYnNlcnZlck9wdGlvbnMsIFVzZUludGVyc2VjdGlvbk9ic2VydmVyUmV0dXJuLCBVc2VLZXlNb2RpZmllclJldHVybiwgVXNlTWFnaWNLZXlzT3B0aW9ucywgVXNlTWFnaWNLZXlzUmV0dXJuLCBVc2VNYW51YWxSZWZIaXN0b3J5T3B0aW9ucywgVXNlTWFudWFsUmVmSGlzdG9yeVJldHVybiwgVXNlTWVkaWFDb250cm9sc1JldHVybiwgVXNlTWVkaWFTb3VyY2UsIFVzZU1lZGlhVGV4dFRyYWNrLCBVc2VNZWRpYVRleHRUcmFja1NvdXJjZSwgVXNlTWVtb2l6ZUNhY2hlLCBVc2VNZW1vaXplT3B0aW9ucywgVXNlTWVtb2l6ZVJldHVybiwgVXNlTWVtb3J5T3B0aW9ucywgVXNlTWVtb3J5UmV0dXJuLCBVc2VNb2RpZmllck9wdGlvbnMsIFVzZU1vdXNlQ29vcmRUeXBlLCBVc2VNb3VzZUV2ZW50RXh0cmFjdG9yLCBVc2VNb3VzZUluRWxlbWVudFJldHVybiwgVXNlTW91c2VPcHRpb25zLCBVc2VNb3VzZVByZXNzZWRPcHRpb25zLCBVc2VNb3VzZVByZXNzZWRSZXR1cm4sIFVzZU1vdXNlUmV0dXJuLCBVc2VNb3VzZVNvdXJjZVR5cGUsIFVzZU11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zLCBVc2VNdXRhdGlvbk9ic2VydmVyUmV0dXJuLCBVc2VOYXZpZ2F0b3JMYW5ndWFnZU9wdGlvbnMsIFVzZU5hdmlnYXRvckxhbmd1YWdlUmV0dXJuLCBVc2VOZXR3b3JrT3B0aW9ucywgVXNlTmV0d29ya1JldHVybiwgVXNlTm93T3B0aW9ucywgVXNlTm93UmV0dXJuLCBVc2VPZmZzZXRQYWdpbmF0aW9uSW5maW5pdHlQYWdlUmV0dXJuLCBVc2VPZmZzZXRQYWdpbmF0aW9uT3B0aW9ucywgVXNlT2Zmc2V0UGFnaW5hdGlvblJldHVybiwgVXNlT25Mb25nUHJlc3NSZXR1cm4sIFVzZVBhZ2VMZWF2ZU9wdGlvbnMsIFVzZVBhZ2VMZWF2ZVJldHVybiwgVXNlUGFyYWxsYXhPcHRpb25zLCBVc2VQYXJhbGxheFJldHVybiwgVXNlUGVyZm9ybWFuY2VPYnNlcnZlck9wdGlvbnMsIFVzZVBlcm1pc3Npb25PcHRpb25zLCBVc2VQZXJtaXNzaW9uUmV0dXJuLCBVc2VQZXJtaXNzaW9uUmV0dXJuV2l0aENvbnRyb2xzLCBVc2VQb2ludGVyTG9ja09wdGlvbnMsIFVzZVBvaW50ZXJMb2NrUmV0dXJuLCBVc2VQb2ludGVyT3B0aW9ucywgVXNlUG9pbnRlclJldHVybiwgVXNlUG9pbnRlclN0YXRlLCBVc2VQb2ludGVyU3dpcGVPcHRpb25zLCBVc2VQb2ludGVyU3dpcGVSZXR1cm4sIFVzZVJhZkZuQ2FsbGJhY2tBcmd1bWVudHMsIFVzZVJhZkZuT3B0aW9ucywgVXNlUmVmSGlzdG9yeU9wdGlvbnMsIFVzZVJlZkhpc3RvcnlSZWNvcmQsIFVzZVJlZkhpc3RvcnlSZXR1cm4sIFVzZVJlc2l6ZU9ic2VydmVyT3B0aW9ucywgVXNlUmVzaXplT2JzZXJ2ZXJSZXR1cm4sIFVzZVNjcmVlbk9yaWVudGF0aW9uT3B0aW9ucywgVXNlU2NyZWVuT3JpZW50YXRpb25SZXR1cm4sIFVzZVNjcmVlblNhZmVBcmVhUmV0dXJuLCBVc2VTY3JpcHRUYWdPcHRpb25zLCBVc2VTY3JpcHRUYWdSZXR1cm4sIFVzZVNjcm9sbE9wdGlvbnMsIFVzZVNjcm9sbFJldHVybiwgVXNlU2hhcmVPcHRpb25zLCBVc2VTaGFyZVJldHVybiwgVXNlU29ydGVkQ29tcGFyZUZuLCBVc2VTb3J0ZWRGbiwgVXNlU29ydGVkT3B0aW9ucywgVXNlU3BlZWNoUmVjb2duaXRpb25PcHRpb25zLCBVc2VTcGVlY2hSZWNvZ25pdGlvblJldHVybiwgVXNlU3BlZWNoU3ludGhlc2lzT3B0aW9ucywgVXNlU3BlZWNoU3ludGhlc2lzUmV0dXJuLCBVc2VTcGVlY2hTeW50aGVzaXNTdGF0dXMsIFVzZVN0ZXBwZXJSZXR1cm4sIFVzZVN0b3JhZ2VBc3luY09wdGlvbnMsIFVzZVN0b3JhZ2VPcHRpb25zLCBVc2VTdHlsZVRhZ09wdGlvbnMsIFVzZVN0eWxlVGFnUmV0dXJuLCBVc2VTdXBwb3J0ZWRSZXR1cm4sIFVzZVN3aXBlRGlyZWN0aW9uLCBVc2VTd2lwZU9wdGlvbnMsIFVzZVN3aXBlUmV0dXJuLCBVc2VUZXh0RGlyZWN0aW9uT3B0aW9ucywgVXNlVGV4dERpcmVjdGlvblZhbHVlLCBVc2VUZXh0U2VsZWN0aW9uT3B0aW9ucywgVXNlVGV4dFNlbGVjdGlvblJldHVybiwgVXNlVGV4dGFyZWFBdXRvc2l6ZU9wdGlvbnMsIFVzZVRleHRhcmVhQXV0b3NpemVSZXR1cm4sIFVzZVRocm90dGxlZFJlZkhpc3RvcnlPcHRpb25zLCBVc2VUaHJvdHRsZWRSZWZIaXN0b3J5UmV0dXJuLCBVc2VUaW1lQWdvRm9ybWF0dGVyLCBVc2VUaW1lQWdvSW50bE9wdGlvbnMsIFVzZVRpbWVBZ29NZXNzYWdlcywgVXNlVGltZUFnb01lc3NhZ2VzQnVpbHRJbiwgVXNlVGltZUFnb09wdGlvbnMsIFVzZVRpbWVBZ29SZXR1cm4sIFVzZVRpbWVBZ29Vbml0LCBVc2VUaW1lQWdvVW5pdE5hbWVzRGVmYXVsdCwgVXNlVGltZW91dFBvbGxPcHRpb25zLCBVc2VUaW1lc3RhbXBPcHRpb25zLCBVc2VUaW1lc3RhbXBSZXR1cm4sIFVzZVRpdGxlT3B0aW9ucywgVXNlVGl0bGVPcHRpb25zQmFzZSwgVXNlVGl0bGVSZXR1cm4sIFVzZVRyYW5zaXRpb25PcHRpb25zLCBVc2VVcmxTZWFyY2hQYXJhbXNPcHRpb25zLCBVc2VVc2VyTWVkaWFPcHRpb25zLCBVc2VVc2VyTWVkaWFSZXR1cm4sIFVzZVZNb2RlbE9wdGlvbnMsIFVzZVZlcnRpY2FsVmlydHVhbExpc3RPcHRpb25zLCBVc2VWaWJyYXRlT3B0aW9ucywgVXNlVmlicmF0ZVJldHVybiwgVXNlVmlydHVhbExpc3RJdGVtLCBVc2VWaXJ0dWFsTGlzdE9wdGlvbnMsIFVzZVZpcnR1YWxMaXN0T3B0aW9uc0Jhc2UsIFVzZVZpcnR1YWxMaXN0UmV0dXJuLCBVc2VXYWtlTG9ja09wdGlvbnMsIFVzZVdha2VMb2NrUmV0dXJuLCBVc2VXZWJOb3RpZmljYXRpb25PcHRpb25zLCBVc2VXZWJOb3RpZmljYXRpb25SZXR1cm4sIFVzZVdlYlNvY2tldE9wdGlvbnMsIFVzZVdlYlNvY2tldFJldHVybiwgVXNlV2ViV29ya2VyRm5SZXR1cm4sIFVzZVdlYldvcmtlck9wdGlvbnMsIFVzZVdlYldvcmtlclJldHVybiwgVXNlV2luZG93U2Nyb2xsT3B0aW9ucywgVXNlV2luZG93U2Nyb2xsUmV0dXJuLCBVc2VXaW5kb3dTaXplT3B0aW9ucywgVXNlV2luZG93U2l6ZVJldHVybiwgVnVlSW5zdGFuY2UsIFdha2VMb2NrU2VudGluZWwsIFdlYk5vdGlmaWNhdGlvbk9wdGlvbnMsIFdlYlNvY2tldEhlYXJ0YmVhdE1lc3NhZ2UsIFdlYlNvY2tldFN0YXR1cywgV2ViV29ya2VyU3RhdHVzLCBXaW5kb3dFdmVudE5hbWUsIFdyaXRhYmxlQ29tcHV0ZWRJbmplY3RPcHRpb25zLCBXcml0YWJsZUNvbXB1dGVkSW5qZWN0T3B0aW9uc1dpdGhEZWZhdWx0LCBhc3luY0NvbXB1dGVkLCBicmVha3BvaW50c0FudERlc2lnbiwgYnJlYWtwb2ludHNCb290c3RyYXBWNSwgYnJlYWtwb2ludHNFbGVtZW50LCBicmVha3BvaW50c01hc3RlckNzcywgYnJlYWtwb2ludHNQcmltZUZsZXgsIGJyZWFrcG9pbnRzUXVhc2FyLCBicmVha3BvaW50c1NlbWF0aWMsIGJyZWFrcG9pbnRzVGFpbHdpbmQsIGJyZWFrcG9pbnRzVnVldGlmeSwgYnJlYWtwb2ludHNWdWV0aWZ5VjIsIGJyZWFrcG9pbnRzVnVldGlmeVYzLCBjbG9uZUZuSlNPTiwgY29tcHV0ZWRBc3luYywgY29tcHV0ZWRJbmplY3QsIGNyZWF0ZUZldGNoLCBjcmVhdGVSZXVzYWJsZVRlbXBsYXRlLCBjcmVhdGVUZW1wbGF0ZVByb21pc2UsIGNyZWF0ZVVucmVmRm4sIGN1c3RvbVN0b3JhZ2VFdmVudE5hbWUsIGRlZmF1bHREb2N1bWVudCwgZGVmYXVsdExvY2F0aW9uLCBkZWZhdWx0TmF2aWdhdG9yLCBkZWZhdWx0V2luZG93LCBleGVjdXRlVHJhbnNpdGlvbiwgZm9ybWF0VGltZUFnbywgZm9ybWF0VGltZUFnb0ludGwsIGZvcm1hdFRpbWVBZ29JbnRsUGFydHMsIGdldFNTUkhhbmRsZXIsIG1hcEdhbWVwYWRUb1hib3gzNjBDb250cm9sbGVyLCBvbkNsaWNrT3V0c2lkZSwgb25FbGVtZW50UmVtb3ZhbCwgb25LZXlEb3duLCBvbktleVByZXNzZWQsIG9uS2V5U3Ryb2tlLCBvbktleVVwLCBvbkxvbmdQcmVzcywgb25TdGFydFR5cGluZywgcHJvdmlkZVNTUldpZHRoLCBzZXRTU1JIYW5kbGVyLCB0ZW1wbGF0ZVJlZiwgdHJhbnNpdGlvbiwgdW5yZWZFbGVtZW50LCB1c2VBY3RpdmVFbGVtZW50LCB1c2VBbmltYXRlLCB1c2VBc3luY1F1ZXVlLCB1c2VBc3luY1N0YXRlLCB1c2VCYXNlNjQsIHVzZUJhdHRlcnksIHVzZUJsdWV0b290aCwgdXNlQnJlYWtwb2ludHMsIHVzZUJyb2FkY2FzdENoYW5uZWwsIHVzZUJyb3dzZXJMb2NhdGlvbiwgdXNlQ2FjaGVkLCB1c2VDbGlwYm9hcmQsIHVzZUNsaXBib2FyZEl0ZW1zLCB1c2VDbG9uZWQsIHVzZUNvbG9yTW9kZSwgdXNlQ29uZmlybURpYWxvZywgdXNlQ291bnRkb3duLCB1c2VDc3NTdXBwb3J0cywgdXNlQ3NzVmFyLCB1c2VDdXJyZW50RWxlbWVudCwgdXNlQ3ljbGVMaXN0LCB1c2VEYXJrLCB1c2VEZWJvdW5jZWRSZWZIaXN0b3J5LCB1c2VEZXZpY2VNb3Rpb24sIHVzZURldmljZU9yaWVudGF0aW9uLCB1c2VEZXZpY2VQaXhlbFJhdGlvLCB1c2VEZXZpY2VzTGlzdCwgdXNlRGlzcGxheU1lZGlhLCB1c2VEb2N1bWVudFZpc2liaWxpdHksIHVzZURyYWdnYWJsZSwgdXNlRHJvcFpvbmUsIHVzZUVsZW1lbnRCb3VuZGluZywgdXNlRWxlbWVudEJ5UG9pbnQsIHVzZUVsZW1lbnRIb3ZlciwgdXNlRWxlbWVudFNpemUsIHVzZUVsZW1lbnRWaXNpYmlsaXR5LCB1c2VFdmVudEJ1cywgdXNlRXZlbnRMaXN0ZW5lciwgdXNlRXZlbnRTb3VyY2UsIHVzZUV5ZURyb3BwZXIsIHVzZUZhdmljb24sIHVzZUZldGNoLCB1c2VGaWxlRGlhbG9nLCB1c2VGaWxlU3lzdGVtQWNjZXNzLCB1c2VGb2N1cywgdXNlRm9jdXNXaXRoaW4sIHVzZUZwcywgdXNlRnVsbHNjcmVlbiwgdXNlR2FtZXBhZCwgdXNlR2VvbG9jYXRpb24sIHVzZUlkbGUsIHVzZUltYWdlLCB1c2VJbmZpbml0ZVNjcm9sbCwgdXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIsIHVzZUtleU1vZGlmaWVyLCB1c2VMb2NhbFN0b3JhZ2UsIHVzZU1hZ2ljS2V5cywgdXNlTWFudWFsUmVmSGlzdG9yeSwgdXNlTWVkaWFDb250cm9scywgdXNlTWVkaWFRdWVyeSwgdXNlTWVtb2l6ZSwgdXNlTWVtb3J5LCB1c2VNb3VudGVkLCB1c2VNb3VzZSwgdXNlTW91c2VJbkVsZW1lbnQsIHVzZU1vdXNlUHJlc3NlZCwgdXNlTXV0YXRpb25PYnNlcnZlciwgdXNlTmF2aWdhdG9yTGFuZ3VhZ2UsIHVzZU5ldHdvcmssIHVzZU5vdywgdXNlT2JqZWN0VXJsLCB1c2VPZmZzZXRQYWdpbmF0aW9uLCB1c2VPbmxpbmUsIHVzZVBhZ2VMZWF2ZSwgdXNlUGFyYWxsYXgsIHVzZVBhcmVudEVsZW1lbnQsIHVzZVBlcmZvcm1hbmNlT2JzZXJ2ZXIsIHVzZVBlcm1pc3Npb24sIHVzZVBvaW50ZXIsIHVzZVBvaW50ZXJMb2NrLCB1c2VQb2ludGVyU3dpcGUsIHVzZVByZWZlcnJlZENvbG9yU2NoZW1lLCB1c2VQcmVmZXJyZWRDb250cmFzdCwgdXNlUHJlZmVycmVkRGFyaywgdXNlUHJlZmVycmVkTGFuZ3VhZ2VzLCB1c2VQcmVmZXJyZWRSZWR1Y2VkTW90aW9uLCB1c2VQcmVmZXJyZWRSZWR1Y2VkVHJhbnNwYXJlbmN5LCB1c2VQcmV2aW91cywgdXNlUmFmRm4sIHVzZVJlZkhpc3RvcnksIHVzZVJlc2l6ZU9ic2VydmVyLCB1c2VTU1JXaWR0aCwgdXNlU2NyZWVuT3JpZW50YXRpb24sIHVzZVNjcmVlblNhZmVBcmVhLCB1c2VTY3JpcHRUYWcsIHVzZVNjcm9sbCwgdXNlU2Nyb2xsTG9jaywgdXNlU2Vzc2lvblN0b3JhZ2UsIHVzZVNoYXJlLCB1c2VTb3J0ZWQsIHVzZVNwZWVjaFJlY29nbml0aW9uLCB1c2VTcGVlY2hTeW50aGVzaXMsIHVzZVN0ZXBwZXIsIHVzZVN0b3JhZ2UsIHVzZVN0b3JhZ2VBc3luYywgdXNlU3R5bGVUYWcsIHVzZVN1cHBvcnRlZCwgdXNlU3dpcGUsIHVzZVRlbXBsYXRlUmVmc0xpc3QsIHVzZVRleHREaXJlY3Rpb24sIHVzZVRleHRTZWxlY3Rpb24sIHVzZVRleHRhcmVhQXV0b3NpemUsIHVzZVRocm90dGxlZFJlZkhpc3RvcnksIHVzZVRpbWVBZ28sIHVzZVRpbWVBZ29JbnRsLCB1c2VUaW1lb3V0UG9sbCwgdXNlVGltZXN0YW1wLCB1c2VUaXRsZSwgdXNlVHJhbnNpdGlvbiwgdXNlVXJsU2VhcmNoUGFyYW1zLCB1c2VVc2VyTWVkaWEsIHVzZVZNb2RlbCwgdXNlVk1vZGVscywgdXNlVmlicmF0ZSwgdXNlVmlydHVhbExpc3QsIHVzZVdha2VMb2NrLCB1c2VXZWJOb3RpZmljYXRpb24sIHVzZVdlYlNvY2tldCwgdXNlV2ViV29ya2VyLCB1c2VXZWJXb3JrZXJGbiwgdXNlV2luZG93Rm9jdXMsIHVzZVdpbmRvd1Njcm9sbCwgdXNlV2luZG93U2l6ZSB9OyIsImV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVzZUJyZWFrcG9pbnRzKCk6IGltcG9ydChcIkB2dWV1c2UvY29yZVwiKS5Vc2VCcmVha3BvaW50UmV0dXJuPFwic21cIiB8IFwibWRcIiB8IFwibGdcIiB8IFwieGxcIiB8IFwiMnhsXCI+O1xuIiwiaW1wb3J0IHR5cGUgeyBNYXliZVJlZiB9IGZyb20gJ3Z1ZSc7XG5leHBvcnQgaW50ZXJmYWNlIFJHQiB7XG4gICAgcjogbnVtYmVyO1xuICAgIGc6IG51bWJlcjtcbiAgICBiOiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIFJHQkEgZXh0ZW5kcyBSR0Ige1xuICAgIGE6IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSFNMIHtcbiAgICBoOiBudW1iZXI7XG4gICAgczogbnVtYmVyO1xuICAgIGw6IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT0tMQ0gge1xuICAgIGw6IG51bWJlcjtcbiAgICBjOiBudW1iZXI7XG4gICAgaDogbnVtYmVyO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZXh0cmFjUkdCKGNvbG9yOiBzdHJpbmcpOiBSR0I7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBleHRyYWN0UkdCQShjb2xvcjogc3RyaW5nKTogUkdCQTtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGhleFRvUkdCKGhleDogc3RyaW5nKTogUkdCO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaHNsVG9SZ2IoaHNsOiBzdHJpbmcpOiBSR0I7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZ2JUb0hzbChyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyKTogSFNMO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmdiVG9IZXgocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcik6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJnYmFUb1N0cmluZyhyZ2JhOiBSR0JBKTogc3RyaW5nO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZXh0cmFjdE9LTENIKGNvbG9yOiBzdHJpbmcpOiBPS0xDSDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG9rbGNoVG9SZ2IoY29sb3I6IHN0cmluZyk6IFJHQjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJnYlRvT2tsY2gocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcik6IE9LTENIO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXNlQ29sb3JUeXBlKHBheWxvYWQ/OiBNYXliZVJlZjxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPik6IGltcG9ydChcInZ1ZVwiKS5Xcml0YWJsZUNvbXB1dGVkUmVmPHN0cmluZyB8IG51bGwsIHN0cmluZyB8IG51bGw+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXNlUkdCKHBheWxvYWQ/OiBNYXliZVJlZjxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPik6IGltcG9ydChcInZ1ZVwiKS5Xcml0YWJsZUNvbXB1dGVkUmVmPFJHQiB8IG51bGwsIFJHQiB8IG51bGw+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXNlUkdCQShwYXlsb2FkPzogTWF5YmVSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4pOiBpbXBvcnQoXCJ2dWVcIikuV3JpdGFibGVDb21wdXRlZFJlZjxSR0JBIHwgbnVsbCwgUkdCQSB8IG51bGw+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXNlSFNMKHBheWxvYWQ/OiBNYXliZVJlZjxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPik6IGltcG9ydChcInZ1ZVwiKS5Xcml0YWJsZUNvbXB1dGVkUmVmPEhTTCB8IG51bGwsIEhTTCB8IG51bGw+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXNlSGV4KHBheWxvYWQ/OiBNYXliZVJlZjxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPik6IGltcG9ydChcInZ1ZVwiKS5Xcml0YWJsZUNvbXB1dGVkUmVmPHN0cmluZyB8IG51bGwsIHN0cmluZyB8IG51bGw+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXNlQ29sb3IocGF5bG9hZD86IE1heWJlUmVmPHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+KToge1xuICAgIHR5cGU6IGltcG9ydChcInZ1ZVwiKS5Xcml0YWJsZUNvbXB1dGVkUmVmPHN0cmluZyB8IG51bGwsIHN0cmluZyB8IG51bGw+O1xuICAgIGNvbG9yOiBpbXBvcnQoXCJ2dWVcIikuUmVmPHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+O1xuICAgIGhleDogaW1wb3J0KFwidnVlXCIpLldyaXRhYmxlQ29tcHV0ZWRSZWY8c3RyaW5nIHwgbnVsbCwgc3RyaW5nIHwgbnVsbD47XG4gICAgcmdiOiBpbXBvcnQoXCJ2dWVcIikuV3JpdGFibGVDb21wdXRlZFJlZjxSR0IgfCBudWxsLCBSR0IgfCBudWxsPjtcbiAgICBoc2w6IGltcG9ydChcInZ1ZVwiKS5Xcml0YWJsZUNvbXB1dGVkUmVmPEhTTCB8IG51bGwsIEhTTCB8IG51bGw+O1xuICAgIG9rbGNoOiBpbXBvcnQoXCJ2dWVcIikuV3JpdGFibGVDb21wdXRlZFJlZjxPS0xDSCB8IG51bGwsIE9LTENIIHwgbnVsbD47XG4gICAgcmdiYTogaW1wb3J0KFwidnVlXCIpLldyaXRhYmxlQ29tcHV0ZWRSZWY8UkdCQSB8IG51bGwsIFJHQkEgfCBudWxsPjtcbn07XG4iLCJpbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcuL0xvZ2dlclNlcnZpY2UudHMnO1xuZXhwb3J0IGludGVyZmFjZSBFbW1pdHRlckxpc3RlbmVyT3B0aW9ucyB7XG4gICAgZXZlbnQ6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRW1taXR0ZXJMaXN0ZW5lciB7XG4gICAgKGRhdGE6IGFueSwgb3B0aW9uczogRW1taXR0ZXJMaXN0ZW5lck9wdGlvbnMpOiB2b2lkO1xufVxuaW50ZXJmYWNlIEVtbWl0dGVySGFuZGxlciB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBldmVudDogc3RyaW5nO1xuICAgIGxpc3RlbmVyOiBFbW1pdHRlckxpc3RlbmVyO1xuICAgIG9yaWdpbmFsTGlzdGVuZXI/OiBFbW1pdHRlckxpc3RlbmVyO1xufVxuaW50ZXJmYWNlIE9uT3B0aW9ucyB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgdW5pcXVlPzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBPbkRlYm91bmNlT3B0aW9ucyBleHRlbmRzIE9uT3B0aW9ucyB7XG4gICAgZGVib3VuY2U/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIEVtbWl0dGVyU2VydmljZU9wdGlvbnMge1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW1taXR0ZXJTZXJ2aWNlPEV2ZW50cyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGhhbmRsZXJzOiBFbW1pdHRlckhhbmRsZXJbXTtcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucz86IEVtbWl0dGVyU2VydmljZU9wdGlvbnMpO1xuICAgIHN0YXRpYyBjcmVhdGU8RXZlbnRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KG9wdGlvbnM/OiBFbW1pdHRlclNlcnZpY2VPcHRpb25zKTogRW1taXR0ZXJTZXJ2aWNlPEV2ZW50cz47XG4gICAgc2V0RGVidWcoZGVidWc6IGJvb2xlYW4pOiB2b2lkO1xuICAgIHNldExvZ2dlcihsb2dnZXI6IExvZ2dlclNlcnZpY2UpOiB2b2lkO1xuICAgIG9uPEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBsaXN0ZW5lcjogKGFyZ3M6IEV2ZW50c1tLXSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKGFyZ3M6IGFueSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbmNlPEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBsaXN0ZW5lcjogKGFyZ3M6IEV2ZW50c1tLXSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbmNlKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoYXJnczogYW55KSA9PiB2b2lkLCBvcHRpb25zPzogT25PcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyO1xuICAgIG9uRGVib3VuY2U8SyBleHRlbmRzIGtleW9mIEV2ZW50cz4oZXZlbnQ6IEssIGxpc3RlbmVyOiAoYXJnczogRXZlbnRzW0tdKSA9PiB2b2lkLCBvcHRpb25zPzogT25EZWJvdW5jZU9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXI7XG4gICAgb25EZWJvdW5jZShldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKGFyZ3M6IGFueSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uRGVib3VuY2VPcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyO1xuICAgIG9uQW55T2Y8SyBleHRlbmRzIGtleW9mIEV2ZW50cz4oZXZlbnRzOiBLW10sIGxpc3RlbmVyOiAoYXJnczogRXZlbnRzW0tdKSA9PiB2b2lkLCBvcHRpb25zPzogT25PcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyW107XG4gICAgb25BbnlPZihldmVudHM6IHN0cmluZ1tdLCBsaXN0ZW5lcjogKGFyZ3M6IGFueSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcltdO1xuICAgIG9mZihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogRW1taXR0ZXJIYW5kbGVyWydsaXN0ZW5lciddKTogdm9pZDtcbiAgICBlbWl0PEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBhcmdzOiBFdmVudHNbS10pOiB2b2lkO1xuICAgIGVtaXQoZXZlbnQ6IHN0cmluZywgYXJncz86IGFueSk6IHZvaWQ7XG4gICAgZW1pdEFuZFdhaXQ8SyBleHRlbmRzIGtleW9mIEV2ZW50cz4oZXZlbnQ6IEssIGFyZ3M6IEV2ZW50c1tLXSk6IFByb21pc2U8dm9pZD47XG4gICAgZW1pdEFuZFdhaXQoZXZlbnQ6IHN0cmluZywgYXJncz86IGFueSk6IFByb21pc2U8dm9pZD47XG4gICAgbGlzdCgpOiBFbW1pdHRlckhhbmRsZXJbXTtcbiAgICBsaXN0QnlFdmVudChldmVudDogc3RyaW5nKTogRW1taXR0ZXJIYW5kbGVyW107XG4gICAgcmVtb3ZlKHBheWxvYWQ6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZDtcbiAgICBjbGVhcigpOiB2b2lkO1xuICAgIGhhc0hhbmRsZXJzKCk6IGJvb2xlYW47XG59XG5leHBvcnQge307XG4iLCJleHBvcnQgaW50ZXJmYWNlIERhc2hib2FyZEdyaWRVbml0IHtcbiAgICBiYXNlPzogbnVtYmVyO1xuICAgIHNtPzogbnVtYmVyO1xuICAgIG1kPzogbnVtYmVyO1xuICAgIGxnPzogbnVtYmVyO1xuICAgIHhsPzogbnVtYmVyO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGFzaGJvYXJkV2lkZ2V0RGF0YSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVmaW5pdGlvbl9pZDogc3RyaW5nO1xuICAgIGNvbHVtbnM6IERhc2hib2FyZEdyaWRVbml0O1xuICAgIHJvd3M6IERhc2hib2FyZEdyaWRVbml0O1xuICAgIHg6IERhc2hib2FyZEdyaWRVbml0O1xuICAgIHk6IERhc2hib2FyZEdyaWRVbml0O1xuICAgIG9yZGVyOiBudW1iZXI7XG4gICAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBQYXJ0aWFsPERhc2hib2FyZFdpZGdldERhdGE+KTtcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkV2lkZ2V0QWN0aW9uIHtcbiAgICBwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgY29tcG9uZW50OiBhbnk7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXNoYm9hcmRXaWRnZXREZWZpbml0aW9uIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBpY29uPzogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKCk7XG4gICAgY29tcG9uZW50KCk6IGFueTtcbiAgICBhY3Rpb25zKCk6IERhc2hib2FyZFdpZGdldEFjdGlvbltdO1xufVxuIiwiaW1wb3J0IEVtbWl0dGVyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0VtbWl0dGVyU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSBEYXNoYm9hcmRXaWRnZXREYXRhIGZyb20gJy4vRGFzaGJvYXJkV2lkZ2V0RGF0YSc7XG5pbXBvcnQgRGFzaGJvYXJkV2lkZ2V0RGVmaW5pdGlvbiBmcm9tICcuL0Rhc2hib2FyZFdpZGdldERlZmluaXRpb24nO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgREFTSEJPQVJEX1JPV19IRUlHSFQgPSA4MDtcbmludGVyZmFjZSBEYXNoYm9hcmRXaWRnZXRPcHRpb25zIHtcbiAgICBkYXRhOiBEYXNoYm9hcmRXaWRnZXREYXRhO1xuICAgIGRlZmluaXRpb246IERhc2hib2FyZFdpZGdldERlZmluaXRpb247XG59XG5pbnRlcmZhY2UgU3R5bGVzT3B0aW9ucyB7XG4gICAgY29udGlhbmVyV2lkdGg6IG51bWJlcjtcbiAgICBicmVha3BvaW50PzogJ2Jhc2UnIHwgJ3NtJyB8ICdtZCcgfCAneGwnO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGFzaGJvYXJkV2lkZ2V0IHtcbiAgICBkYXRhOiBEYXNoYm9hcmRXaWRnZXREYXRhO1xuICAgIGRlZmluaXRpb246IERhc2hib2FyZFdpZGdldERlZmluaXRpb247XG4gICAgZW1taXR0ZXI6IEVtbWl0dGVyU2VydmljZTtcbiAgICBjb25zdHJ1Y3Rvcih7IGRhdGEsIGRlZmluaXRpb24gfTogRGFzaGJvYXJkV2lkZ2V0T3B0aW9ucyk7XG4gICAgc3RhdGljIGZyb21EYXRhKGRhdGE6IERhc2hib2FyZFdpZGdldERhdGEpOiBEYXNoYm9hcmRXaWRnZXQ7XG4gICAgc2V0RW1taXR0ZXIoZW1taXR0ZXI6IEVtbWl0dGVyU2VydmljZSk6IHZvaWQ7XG4gICAgZ2V0IGlkKCk6IHN0cmluZztcbiAgICBnZXQgbmFtZSgpOiBzdHJpbmc7XG4gICAgc2V0IG5hbWUodmFsdWU6IHN0cmluZyk7XG4gICAgZ2V0IG9wdGlvbnMoKTogRGFzaGJvYXJkV2lkZ2V0RGF0YVsnb3B0aW9ucyddO1xuICAgIGdldCBkZWZpbml0aW9uX2lkKCk6IHN0cmluZztcbiAgICBjb21wb25lbnQoKTogYW55O1xuICAgIGFjdGlvbnMoKTogaW1wb3J0KFwiLi9EYXNoYm9hcmRXaWRnZXREZWZpbml0aW9uXCIpLkRhc2hib2FyZFdpZGdldEFjdGlvbltdO1xuICAgIGdldCBjb2x1bW5zKCk6IERhc2hib2FyZFdpZGdldERhdGFbJ2NvbHVtbnMnXTtcbiAgICBzZXQgY29sdW1ucyhwYXlsb2FkOiBEYXNoYm9hcmRXaWRnZXREYXRhWydjb2x1bW5zJ10pO1xuICAgIGdldCByb3dzKCk6IERhc2hib2FyZFdpZGdldERhdGFbJ3Jvd3MnXTtcbiAgICBzZXQgcm93cyhwYXlsb2FkOiBEYXNoYm9hcmRXaWRnZXREYXRhWydyb3dzJ10pO1xuICAgIGdldCB4KCk6IERhc2hib2FyZFdpZGdldERhdGFbJ3gnXTtcbiAgICBzZXQgeChwYXlsb2FkOiBEYXNoYm9hcmRXaWRnZXREYXRhWyd4J10pO1xuICAgIGdldCB5KCk6IERhc2hib2FyZFdpZGdldERhdGFbJ3knXTtcbiAgICBzZXQgeShwYXlsb2FkOiBEYXNoYm9hcmRXaWRnZXREYXRhWyd5J10pO1xuICAgIGdldCBjbGFzc2VzKCk6IHN0cmluZztcbiAgICBjb21wdXRlU3R5bGVzKG9wdGlvbnM6IFN0eWxlc09wdGlvbnMpOiBzdHJpbmc7XG4gICAgdXBkYXRlKHBheWxvYWQ6IFBhcnRpYWw8RGFzaGJvYXJkV2lkZ2V0RGF0YT4pOiB2b2lkO1xuICAgIHNldE9wdGlvbihrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgc2V0WChicmVha3BvaW50OiAnYmFzZScgfCAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnLCB2YWx1ZT86IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQ7XG4gICAgc2V0WShicmVha3BvaW50OiAnYmFzZScgfCAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnLCB2YWx1ZT86IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQ7XG4gICAgc2V0Q29sdW1uKGJyZWFrcG9pbnQ6ICdiYXNlJyB8ICdzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCcsIHZhbHVlPzogbnVtYmVyIHwgdW5kZWZpbmVkKTogdm9pZDtcbiAgICBzZXRSb3coYnJlYWtwb2ludDogJ2Jhc2UnIHwgJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJ3hsJywgdmFsdWU/OiBudW1iZXIgfCB1bmRlZmluZWQpOiB2b2lkO1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0ICogYXMgdiBmcm9tICd2YWxpYm90JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IG51bWJlcjogKCkgPT4gdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPGFueSwgbnVtYmVyPiwgdi5JbnRlZ2VyQWN0aW9uPG51bWJlciwgdW5kZWZpbmVkPl0+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgYm9vbGVhbjogKCkgPT4gdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5Cb29sZWFuU2NoZW1hPHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBib29sZWFuLCBib29sZWFuPl0+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgZGF0ZTogKCkgPT4gdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5EYXRlU2NoZW1hPHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBEYXRlLCBEYXRlPiwgdi5UcmFuc2Zvcm1BY3Rpb248RGF0ZSwgc3RyaW5nPl0+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgZGF0ZXRpbWU6ICgpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuRGF0ZVNjaGVtYTx1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgRGF0ZSwgc3RyaW5nIHwgbnVsbD5dPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGFycmF5OiA8VCBleHRlbmRzIHYuQmFzZVNjaGVtYTxhbnksIGFueSwgYW55Pj4oc2NoZW1hPzogVCkgPT4gdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5BcnJheVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgc3RyaW5nW10sIHN0cmluZ1tdPiwgdi5BcnJheVNjaGVtYTxULCB1bmRlZmluZWQ+XT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBhcnJheU51bWJlcjogKCkgPT4gdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5BcnJheVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgc3RyaW5nW10sIHN0cmluZ1tdPiwgdi5BcnJheVNjaGVtYTx2LkJhc2VTY2hlbWE8YW55LCBhbnksIGFueT4sIHVuZGVmaW5lZD5dPiwgdi5UcmFuc2Zvcm1BY3Rpb248YW55W10sIG51bWJlcltdPl0+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3Qgb2JqZWN0OiAoKSA9PiB2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LlJlY29yZFNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkFueVNjaGVtYSwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHtcbiAgICBbeDogc3RyaW5nXTogYW55O1xufSwge1xuICAgIFt4OiBzdHJpbmddOiBhbnk7XG59Piwgdi5UcmFuc2Zvcm1BY3Rpb248e1xuICAgIFt4OiBzdHJpbmddOiBhbnk7XG59LCBSZWNvcmQ8c3RyaW5nLCBhbnk+Pl0+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXJsKCk6IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuUmVjb3JkU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQW55U2NoZW1hLCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwge1xuICAgIFt4OiBzdHJpbmddOiBhbnk7XG59LCB7XG4gICAgW3g6IHN0cmluZ106IGFueTtcbn0+LCB2LlRyYW5zZm9ybUFjdGlvbjx7XG4gICAgW3g6IHN0cmluZ106IGFueTtcbn0sIFJlY29yZDxzdHJpbmcsIGFueT4+XT47XG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgdXJsIHtcbiAgICB2YXIgbnVtYmVyOiAoKSA9PiB2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2Lk51bWJlclNjaGVtYTx1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248YW55LCBudW1iZXI+LCB2LkludGVnZXJBY3Rpb248bnVtYmVyLCB1bmRlZmluZWQ+XT47XG4gICAgdmFyIGJvb2xlYW46ICgpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQm9vbGVhblNjaGVtYTx1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgYm9vbGVhbiwgYm9vbGVhbj5dPjtcbiAgICB2YXIgZGF0ZTogKCkgPT4gdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5EYXRlU2NoZW1hPHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBEYXRlLCBEYXRlPiwgdi5UcmFuc2Zvcm1BY3Rpb248RGF0ZSwgc3RyaW5nPl0+O1xuICAgIHZhciBkYXRldGltZTogKCkgPT4gdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5EYXRlU2NoZW1hPHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBEYXRlLCBzdHJpbmcgfCBudWxsPl0+O1xuICAgIHZhciBhcnJheTogPFQgZXh0ZW5kcyB2LkJhc2VTY2hlbWE8YW55LCBhbnksIGFueT4+KHNjaGVtYT86IFQpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQXJyYXlTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHN0cmluZ1tdLCBzdHJpbmdbXT4sIHYuQXJyYXlTY2hlbWE8VCwgdW5kZWZpbmVkPl0+O1xuICAgIHZhciBhcnJheU51bWJlcjogKCkgPT4gdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5BcnJheVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgc3RyaW5nW10sIHN0cmluZ1tdPiwgdi5BcnJheVNjaGVtYTx2LkJhc2VTY2hlbWE8YW55LCBhbnksIGFueT4sIHVuZGVmaW5lZD5dPiwgdi5UcmFuc2Zvcm1BY3Rpb248YW55W10sIG51bWJlcltdPl0+O1xuICAgIHZhciBvYmplY3Q6ICgpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuUmVjb3JkU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQW55U2NoZW1hLCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwge1xuICAgICAgICBbeDogc3RyaW5nXTogYW55O1xuICAgIH0sIHtcbiAgICAgICAgW3g6IHN0cmluZ106IGFueTtcbiAgICB9Piwgdi5UcmFuc2Zvcm1BY3Rpb248e1xuICAgICAgICBbeDogc3RyaW5nXTogYW55O1xuICAgIH0sIFJlY29yZDxzdHJpbmcsIGFueT4+XT47XG59XG4iLCJpbXBvcnQgKiBhcyB2IGZyb20gJ3ZhbGlib3QnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3Qga2V5VmFsdWU6ICgpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj5dPjtcbiIsImltcG9ydCAqIGFzIHYgZnJvbSAndmFsaWJvdCc7XG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25QYXJhbXMge1xuICAgIG1heExpbWl0PzogbnVtYmVyO1xuICAgIG9yZGVyRmllbGRzPzogc3RyaW5nW107XG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBiYXNlOiAob3B0aW9ucz86IFBhZ2luYXRpb25QYXJhbXMpID0+IHYuT2JqZWN0U2NoZW1hPHtcbiAgICByZWFkb25seSBwYWdlOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxhbnksIG51bWJlcj4sIHYuSW50ZWdlckFjdGlvbjxudW1iZXIsIHVuZGVmaW5lZD5dPiwgMT47XG4gICAgcmVhZG9ubHkgbGltaXQ6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPGFueSwgbnVtYmVyPiwgdi5JbnRlZ2VyQWN0aW9uPG51bWJlciwgdW5kZWZpbmVkPl0+LCBudW1iZXI+O1xuICAgIHJlYWRvbmx5IG9yZGVyQnk6IHYuTnVsbGlzaFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkFycmF5U2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBzdHJpbmdbXSwgc3RyaW5nW10+LCB2LkFycmF5U2NoZW1hPHYuUGlja2xpc3RTY2hlbWE8c3RyaW5nW10sIHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dPiB8IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQXJyYXlTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHN0cmluZ1tdLCBzdHJpbmdbXT4sIHYuQXJyYXlTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0+LCByZWFkb25seSBbXT47XG4gICAgcmVhZG9ubHkgb3JkZXJEaXJlY3Rpb246IHYuTnVsbGlzaFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkFycmF5U2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBzdHJpbmdbXSwgc3RyaW5nW10+LCB2LkFycmF5U2NoZW1hPHYuVW5pb25TY2hlbWE8W3YuTGl0ZXJhbFNjaGVtYTxcImFzY1wiLCB1bmRlZmluZWQ+LCB2LkxpdGVyYWxTY2hlbWE8XCJkZXNjXCIsIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XT4sIHJlYWRvbmx5IFtdPjtcbn0sIHVuZGVmaW5lZD47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYWdpbmF0aW9uKG9wdGlvbnM/OiBQYWdpbmF0aW9uUGFyYW1zKTogdi5PYmplY3RTY2hlbWE8e1xuICAgIHJlYWRvbmx5IHBhZ2U6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPGFueSwgbnVtYmVyPiwgdi5JbnRlZ2VyQWN0aW9uPG51bWJlciwgdW5kZWZpbmVkPl0+LCAxPjtcbiAgICByZWFkb25seSBsaW1pdDogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2Lk51bWJlclNjaGVtYTx1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248YW55LCBudW1iZXI+LCB2LkludGVnZXJBY3Rpb248bnVtYmVyLCB1bmRlZmluZWQ+XT4sIG51bWJlcj47XG4gICAgcmVhZG9ubHkgb3JkZXJCeTogdi5OdWxsaXNoU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQXJyYXlTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHN0cmluZ1tdLCBzdHJpbmdbXT4sIHYuQXJyYXlTY2hlbWE8di5QaWNrbGlzdFNjaGVtYTxzdHJpbmdbXSwgdW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0+IHwgdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5BcnJheVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgc3RyaW5nW10sIHN0cmluZ1tdPiwgdi5BcnJheVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XT4sIHJlYWRvbmx5IFtdPjtcbiAgICByZWFkb25seSBvcmRlckRpcmVjdGlvbjogdi5OdWxsaXNoU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQXJyYXlTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHN0cmluZ1tdLCBzdHJpbmdbXT4sIHYuQXJyYXlTY2hlbWE8di5VbmlvblNjaGVtYTxbdi5MaXRlcmFsU2NoZW1hPFwiYXNjXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcImRlc2NcIiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dPiwgcmVhZG9ubHkgW10+O1xufSwgdW5kZWZpbmVkPjtcbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBwYWdpbmF0aW9uIHtcbiAgICB2YXIgYmFzZTogKG9wdGlvbnM/OiBQYWdpbmF0aW9uUGFyYW1zKSA9PiB2Lk9iamVjdFNjaGVtYTx7XG4gICAgICAgIHJlYWRvbmx5IHBhZ2U6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPGFueSwgbnVtYmVyPiwgdi5JbnRlZ2VyQWN0aW9uPG51bWJlciwgdW5kZWZpbmVkPl0+LCAxPjtcbiAgICAgICAgcmVhZG9ubHkgbGltaXQ6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPGFueSwgbnVtYmVyPiwgdi5JbnRlZ2VyQWN0aW9uPG51bWJlciwgdW5kZWZpbmVkPl0+LCBudW1iZXI+O1xuICAgICAgICByZWFkb25seSBvcmRlckJ5OiB2Lk51bGxpc2hTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5BcnJheVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgc3RyaW5nW10sIHN0cmluZ1tdPiwgdi5BcnJheVNjaGVtYTx2LlBpY2tsaXN0U2NoZW1hPHN0cmluZ1tdLCB1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XT4gfCB2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkFycmF5U2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBzdHJpbmdbXSwgc3RyaW5nW10+LCB2LkFycmF5U2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dPiwgcmVhZG9ubHkgW10+O1xuICAgICAgICByZWFkb25seSBvcmRlckRpcmVjdGlvbjogdi5OdWxsaXNoU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQXJyYXlTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHN0cmluZ1tdLCBzdHJpbmdbXT4sIHYuQXJyYXlTY2hlbWE8di5VbmlvblNjaGVtYTxbdi5MaXRlcmFsU2NoZW1hPFwiYXNjXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcImRlc2NcIiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dPiwgcmVhZG9ubHkgW10+O1xuICAgIH0sIHVuZGVmaW5lZD47XG59XG4iLCJleHBvcnQgKiBmcm9tICcuL3VybFZhbGlkYXRvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2tleVZhbHVlVmFsaWRhdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vcGFnaW5hdGlvblZhbGlkYXRvci50cyc7XG4iLCJpbXBvcnQgKiBhcyB2IGZyb20gJ3ZhbGlib3QnO1xuaW1wb3J0ICogYXMgZXh0cmFzIGZyb20gJyNzaGFyZWQvdmFsaWRhdG9ycy9pbmRleC50cyc7XG5leHBvcnQgdHlwZSBWYWxpYm90ID0gdHlwZW9mIHYgJiB7XG4gICAgZXh0cmFzOiB0eXBlb2YgZXh0cmFzO1xufTtcbmV4cG9ydCB0eXBlIFZhbGlib3RTY2hlbWEgPSB2LkJhc2VTY2hlbWE8dW5rbm93biwgdW5rbm93biwgdi5CYXNlSXNzdWU8dW5rbm93bj4+O1xuZXhwb3J0IHR5cGUgVmFsaWJvdE9iamVjdFNjaGVtYSA9IHYuT2JqZWN0U2NoZW1hPGFueSwgYW55PjtcbmV4cG9ydCB0eXBlIFZhbGlib3RTY2hlbWFBc3luYyA9IHYuQmFzZVNjaGVtYUFzeW5jPHVua25vd24sIHVua25vd24sIHYuQmFzZUlzc3VlPHVua25vd24+PjtcbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdG9yQ2FsbGJhY2s8VCBleHRlbmRzIFZhbGlib3RTY2hlbWE+IHtcbiAgICAoX3Y6IFZhbGlib3QpOiBUO1xufVxuZXhwb3J0IHR5cGUgVmFsaWRhdG9yQ2FsbGJhY2tBc3luYzxUIGV4dGVuZHMgVmFsaWJvdFNjaGVtYUFzeW5jPiA9IHtcbiAgICAoX3Y6IFZhbGlib3QpOiBUO1xufTtcbmV4cG9ydCB0eXBlIFZhbGlkYXRvclJlc3VsdDxUIGV4dGVuZHMgdi5CYXNlU2NoZW1hPGFueSwgYW55LCBhbnk+PiA9IHYuSW5mZXJPdXRwdXQ8VD47XG5leHBvcnQgdHlwZSBWYWxpZGF0ZVBheWxvYWQ8VCBleHRlbmRzIFZhbGlib3RTY2hlbWEgPSBWYWxpYm90U2NoZW1hPiA9IFZhbGlkYXRvckNhbGxiYWNrPFQ+IHwgVDtcbmV4cG9ydCB0eXBlIFZhbGlkYXRlUmVzdWx0PFQgZXh0ZW5kcyBWYWxpZGF0ZVBheWxvYWQ+ID0gVCBleHRlbmRzIFZhbGlib3RTY2hlbWEgPyB2LkluZmVyT3V0cHV0PFQ+IDogVCBleHRlbmRzIFZhbGlkYXRvckNhbGxiYWNrPGluZmVyIFU+ID8gdi5JbmZlck91dHB1dDxVPiA6IHVua25vd247XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWYWxpZGF0b3JTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgdjogVmFsaWJvdDtcbiAgICBjcmVhdGU8VCBleHRlbmRzIFZhbGlib3RTY2hlbWE+KGNiOiBWYWxpZGF0b3JDYWxsYmFjazxUPik6IFQ7XG4gICAgdmFsaWRhdGU8VCBleHRlbmRzIFZhbGlib3RTY2hlbWE+KHBheWxvYWQ6IGFueSwgY2I6IFZhbGlkYXRlUGF5bG9hZDxUPik6IHYuSW5mZXJPdXRwdXQ8VD47XG4gICAgdmFsaWRhdGVBc3luYzxUIGV4dGVuZHMgVmFsaWJvdFNjaGVtYUFzeW5jPihwYXlsb2FkOiBhbnksIGNiOiBWYWxpZGF0b3JDYWxsYmFja0FzeW5jPFQ+IHwgVCk6IFByb21pc2U8di5JbmZlck91dHB1dDxUPj47XG4gICAgaXNWYWxpZDxUIGV4dGVuZHMgVmFsaWJvdFNjaGVtYT4ocGF5bG9hZDogYW55LCBjYjogVmFsaWRhdGVQYXlsb2FkPFQ+KTogYm9vbGVhbjtcbn1cbiIsImltcG9ydCB0eXBlIHsgVmFsaWRhdG9yUmVzdWx0IH0gZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9WYWxpZGF0b3JTZXJ2aWNlLnRzJztcbmV4cG9ydCB0eXBlIERhc2hib2FyZFNjaGVtYSA9IFZhbGlkYXRvclJlc3VsdDxSZXR1cm5UeXBlPHR5cGVvZiBkYXNoYm9hcmRTY2hlbWE+PjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGRhc2hib2FyZFNjaGVtYSgpOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk9iamVjdFNjaGVtYTx7XG4gICAgcmVhZG9ubHkgaWQ6IGltcG9ydChcInZhbGlib3RcIikuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgbmFtZTogaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBkZXNjcmlwdGlvbjogaW1wb3J0KFwidmFsaWJvdFwiKS5OdWxsYWJsZVNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGNyZWF0ZWRfYXQ6IGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgdXBkYXRlZF9hdDogaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBkZWxldGVkX2F0OiBpbXBvcnQoXCJ2YWxpYm90XCIpLk51bGxhYmxlU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgbWV0YXM6IGltcG9ydChcInZhbGlib3RcIikuT3B0aW9uYWxTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5SZWNvcmRTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgaW1wb3J0KFwidmFsaWJvdFwiKS5BbnlTY2hlbWEsIHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG59LCB1bmRlZmluZWQ+O1xuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIGRhc2hib2FyZFNjaGVtYSB7XG4gICAgdmFyIGNyZWF0ZTogT21pdDxpbXBvcnQoXCJ2YWxpYm90XCIpLk9iamVjdFNjaGVtYTx7XG4gICAgICAgIHJlYWRvbmx5IGlkOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk51bWJlclNjaGVtYTx1bmRlZmluZWQ+O1xuICAgICAgICByZWFkb25seSBuYW1lOiBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgICAgICByZWFkb25seSBkZXNjcmlwdGlvbjogaW1wb3J0KFwidmFsaWJvdFwiKS5OdWxsYWJsZVNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgICAgICByZWFkb25seSBjcmVhdGVkX2F0OiBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgICAgICByZWFkb25seSB1cGRhdGVkX2F0OiBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgICAgICByZWFkb25seSBkZWxldGVkX2F0OiBpbXBvcnQoXCJ2YWxpYm90XCIpLk51bGxhYmxlU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgICAgIHJlYWRvbmx5IG1ldGFzOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk9wdGlvbmFsU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuUmVjb3JkU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIGltcG9ydChcInZhbGlib3RcIikuQW55U2NoZW1hLCB1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIH0sIHVuZGVmaW5lZD4sIFwiZW50cmllc1wiIHwgXCJ+dHlwZXNcIiB8IFwifnJ1blwiIHwgXCJ+c3RhbmRhcmRcIj4gJiB7XG4gICAgICAgIHJlYWRvbmx5IGVudHJpZXM6IFBpY2s8e1xuICAgICAgICAgICAgcmVhZG9ubHkgaWQ6IGltcG9ydChcInZhbGlib3RcIikuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgICAgICAgICByZWFkb25seSBuYW1lOiBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgICAgICAgICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IGltcG9ydChcInZhbGlib3RcIikuTnVsbGFibGVTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICAgICAgICAgIHJlYWRvbmx5IGNyZWF0ZWRfYXQ6IGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgICAgICAgICByZWFkb25seSB1cGRhdGVkX2F0OiBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgICAgICAgICAgcmVhZG9ubHkgZGVsZXRlZF9hdDogaW1wb3J0KFwidmFsaWJvdFwiKS5OdWxsYWJsZVNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgICAgICAgICAgcmVhZG9ubHkgbWV0YXM6IGltcG9ydChcInZhbGlib3RcIikuT3B0aW9uYWxTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5SZWNvcmRTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgaW1wb3J0KFwidmFsaWJvdFwiKS5BbnlTY2hlbWEsIHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgICAgIH0sIFwiZGVzY3JpcHRpb25cIiB8IFwibmFtZVwiPjtcbiAgICAgICAgcmVhZG9ubHkgXCJ+c3RhbmRhcmRcIjogaW1wb3J0KFwidmFsaWJvdFwiKS5TdGFuZGFyZFByb3BzPHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICB9LCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgfT47XG4gICAgICAgIHJlYWRvbmx5IFwifnJ1blwiOiAoZGF0YXNldDogaW1wb3J0KFwidmFsaWJvdFwiKS5Vbmtub3duRGF0YXNldCwgY29uZmlnOiBpbXBvcnQoXCJ2YWxpYm90XCIpLkNvbmZpZzxpbXBvcnQoXCJ2YWxpYm90XCIpLkJhc2VJc3N1ZTx1bmtub3duPj4pID0+IGltcG9ydChcInZhbGlib3RcIikuT3V0cHV0RGF0YXNldDx7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgfSwgaW1wb3J0KFwidmFsaWJvdFwiKS5PYmplY3RJc3N1ZSB8IGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nSXNzdWU+O1xuICAgICAgICByZWFkb25seSBcIn50eXBlc1wiPzoge1xuICAgICAgICAgICAgcmVhZG9ubHkgaW5wdXQ6IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVhZG9ubHkgb3V0cHV0OiB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRvbmx5IGlzc3VlOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk9iamVjdElzc3VlIHwgaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdJc3N1ZTtcbiAgICAgICAgfSB8IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIHZhciB1cGRhdGU6IE9taXQ8T21pdDxpbXBvcnQoXCJ2YWxpYm90XCIpLk9iamVjdFNjaGVtYTx7XG4gICAgICAgIHJlYWRvbmx5IGlkOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk51bWJlclNjaGVtYTx1bmRlZmluZWQ+O1xuICAgICAgICByZWFkb25seSBuYW1lOiBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgICAgICByZWFkb25seSBkZXNjcmlwdGlvbjogaW1wb3J0KFwidmFsaWJvdFwiKS5OdWxsYWJsZVNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgICAgICByZWFkb25seSBjcmVhdGVkX2F0OiBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgICAgICByZWFkb25seSB1cGRhdGVkX2F0OiBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgICAgICByZWFkb25seSBkZWxldGVkX2F0OiBpbXBvcnQoXCJ2YWxpYm90XCIpLk51bGxhYmxlU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgICAgIHJlYWRvbmx5IG1ldGFzOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk9wdGlvbmFsU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuUmVjb3JkU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIGltcG9ydChcInZhbGlib3RcIikuQW55U2NoZW1hLCB1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIH0sIHVuZGVmaW5lZD4sIFwiZW50cmllc1wiIHwgXCJ+dHlwZXNcIiB8IFwifnJ1blwiIHwgXCJ+c3RhbmRhcmRcIj4gJiB7XG4gICAgICAgIHJlYWRvbmx5IGVudHJpZXM6IFBpY2s8e1xuICAgICAgICAgICAgcmVhZG9ubHkgaWQ6IGltcG9ydChcInZhbGlib3RcIikuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgICAgICAgICByZWFkb25seSBuYW1lOiBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgICAgICAgICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IGltcG9ydChcInZhbGlib3RcIikuTnVsbGFibGVTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICAgICAgICAgIHJlYWRvbmx5IGNyZWF0ZWRfYXQ6IGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgICAgICAgICByZWFkb25seSB1cGRhdGVkX2F0OiBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgICAgICAgICAgcmVhZG9ubHkgZGVsZXRlZF9hdDogaW1wb3J0KFwidmFsaWJvdFwiKS5OdWxsYWJsZVNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgICAgICAgICAgcmVhZG9ubHkgbWV0YXM6IGltcG9ydChcInZhbGlib3RcIikuT3B0aW9uYWxTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5SZWNvcmRTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgaW1wb3J0KFwidmFsaWJvdFwiKS5BbnlTY2hlbWEsIHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgICAgIH0sIFwiZGVzY3JpcHRpb25cIiB8IFwibmFtZVwiPjtcbiAgICAgICAgcmVhZG9ubHkgXCJ+c3RhbmRhcmRcIjogaW1wb3J0KFwidmFsaWJvdFwiKS5TdGFuZGFyZFByb3BzPHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICB9LCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgfT47XG4gICAgICAgIHJlYWRvbmx5IFwifnJ1blwiOiAoZGF0YXNldDogaW1wb3J0KFwidmFsaWJvdFwiKS5Vbmtub3duRGF0YXNldCwgY29uZmlnOiBpbXBvcnQoXCJ2YWxpYm90XCIpLkNvbmZpZzxpbXBvcnQoXCJ2YWxpYm90XCIpLkJhc2VJc3N1ZTx1bmtub3duPj4pID0+IGltcG9ydChcInZhbGlib3RcIikuT3V0cHV0RGF0YXNldDx7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgfSwgaW1wb3J0KFwidmFsaWJvdFwiKS5PYmplY3RJc3N1ZSB8IGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nSXNzdWU+O1xuICAgICAgICByZWFkb25seSBcIn50eXBlc1wiPzoge1xuICAgICAgICAgICAgcmVhZG9ubHkgaW5wdXQ6IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVhZG9ubHkgb3V0cHV0OiB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRvbmx5IGlzc3VlOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk9iamVjdElzc3VlIHwgaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdJc3N1ZTtcbiAgICAgICAgfSB8IHVuZGVmaW5lZDtcbiAgICB9LCBcImVudHJpZXNcIiB8IFwifnR5cGVzXCIgfCBcIn5ydW5cIiB8IFwifnN0YW5kYXJkXCI+ICYge1xuICAgICAgICByZWFkb25seSBlbnRyaWVzOiB7XG4gICAgICAgICAgICByZWFkb25seSBkZXNjcmlwdGlvbjogaW1wb3J0KFwidmFsaWJvdFwiKS5PcHRpb25hbFNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLk51bGxhYmxlU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgICAgICAgICByZWFkb25seSBuYW1lOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk9wdGlvbmFsU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRvbmx5IFwifnN0YW5kYXJkXCI6IGltcG9ydChcInZhbGlib3RcIikuU3RhbmRhcmRQcm9wczx7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB9LCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB9PjtcbiAgICAgICAgcmVhZG9ubHkgXCJ+cnVuXCI6IChkYXRhc2V0OiBpbXBvcnQoXCJ2YWxpYm90XCIpLlVua25vd25EYXRhc2V0LCBjb25maWc6IGltcG9ydChcInZhbGlib3RcIikuQ29uZmlnPGltcG9ydChcInZhbGlib3RcIikuQmFzZUlzc3VlPHVua25vd24+PikgPT4gaW1wb3J0KFwidmFsaWJvdFwiKS5PdXRwdXREYXRhc2V0PHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH0sIGltcG9ydChcInZhbGlib3RcIikuT2JqZWN0SXNzdWUgfCBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ0lzc3VlPjtcbiAgICAgICAgcmVhZG9ubHkgXCJ+dHlwZXNcIj86IHtcbiAgICAgICAgICAgIHJlYWRvbmx5IGlucHV0OiB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVhZG9ubHkgb3V0cHV0OiB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVhZG9ubHkgaXNzdWU6IGltcG9ydChcInZhbGlib3RcIikuT2JqZWN0SXNzdWUgfCBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ0lzc3VlO1xuICAgICAgICB9IHwgdW5kZWZpbmVkO1xuICAgIH07XG59XG4iLCJpbXBvcnQgRW1taXR0ZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvRW1taXR0ZXJTZXJ2aWNlLnRzJztcbmltcG9ydCBEYXNoYm9hcmRXaWRnZXREYXRhIGZyb20gJy4vRGFzaGJvYXJkV2lkZ2V0RGF0YSc7XG5pbXBvcnQgRGFzaGJvYXJkV2lkZ2V0IGZyb20gJy4vRGFzaGJvYXJkV2lkZ2V0JztcbmltcG9ydCB0eXBlIHsgRGFzaGJvYXJkU2NoZW1hIH0gZnJvbSAnI3NoYXJlZC9zY2hlbWFzL2Rhc2hib2FyZFNjaGVtYS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIERhc2hib2FyZE9wdGlvbnMge1xuICAgIGRhc2hib2FyZDogRGFzaGJvYXJkU2NoZW1hO1xuICAgIHdpZGdldHM/OiBEYXNoYm9hcmRXaWRnZXREYXRhW107XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXNoYm9hcmQge1xuICAgIG5hbWU6IERhc2hib2FyZFNjaGVtYVsnbmFtZSddO1xuICAgIGRlc2NyaXB0aW9uOiBEYXNoYm9hcmRTY2hlbWFbJ2Rlc2NyaXB0aW9uJ107XG4gICAgd2lkZ2V0czogRGFzaGJvYXJkV2lkZ2V0W107XG4gICAgZW1taXR0ZXI6IEVtbWl0dGVyU2VydmljZTtcbiAgICBjb250YWluZXJXaWR0aDogbnVtYmVyO1xuICAgIGNvbnN0cnVjdG9yKCk7XG4gICAgc2V0TmFtZShuYW1lOiBzdHJpbmcpOiB0aGlzO1xuICAgIHNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiB0aGlzO1xuICAgIHNldENvbnRhaW5lcldpZHRoKHdpZHRoOiBudW1iZXIpOiB0aGlzO1xuICAgIHNldFdpZGdldHMod2lkZ2V0czogRGFzaGJvYXJkV2lkZ2V0RGF0YVtdKTogdGhpcztcbiAgICBmaW5kTGFzdFJvdygpOiBudW1iZXI7XG4gICAgYWRkV2lkZ2V0KHBheWxvYWQ/OiBQYXJ0aWFsPERhc2hib2FyZFdpZGdldERhdGE+KTogdm9pZDtcbiAgICByZW1vdmVXaWRnZXQoaW5kZXg6IG51bWJlcik6IHZvaWQ7XG4gICAgcmVtb3ZlV2lkZ2V0QnlJZChpZDogc3RyaW5nKTogdm9pZDtcbiAgICB1cGRhdGVXaWRnZXQoaW5kZXg6IG51bWJlciwgd2lkZ2V0OiBEYXNoYm9hcmRXaWRnZXQpOiB2b2lkO1xuICAgIGR1cGxpY2F0ZVdpZGdldChpbmRleDogbnVtYmVyKTogdm9pZDtcbn1cbiIsImltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB0eXBlIERhc2hib2FyZEVudGl0eSBmcm9tICcjY2xpZW50L2VudGl0aWVzL0Rhc2hib2FyZC50cyc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwcm92aWRlRGFzaGJvYXJkKGVudGl0eTogUmVmPERhc2hib2FyZEVudGl0eT4pOiB2b2lkO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXNlRGFzaGJvYXJkKCk6IFJlZjxEYXNoYm9hcmRFbnRpdHk+O1xuIiwiaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHR5cGUgRGFzaGJvYXJkV2lkZ2V0IGZyb20gJyNjbGllbnQvZW50aXRpZXMvRGFzaGJvYXJkV2lkZ2V0LnRzJztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHByb3ZpZGVEYXNoYm9hcmRXaWRnZXQoZW50aXR5OiBSZWY8RGFzaGJvYXJkV2lkZ2V0Pik6IHZvaWQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1c2VEYXNoYm9hcmRXaWRnZXQoKTogUmVmPERhc2hib2FyZFdpZGdldD47XG4iLCJpbXBvcnQgdHlwZSB7IE1heWJlUmVmLCBSZWYgfSBmcm9tICd2dWUnO1xuZXhwb3J0IGludGVyZmFjZSBVc2VGZXRjaFBhZ2luYXRpb25PcHRpb25zIHtcbiAgICBrZXk/OiBzdHJpbmc7XG4gICAgcXVlcnk/OiBNYXliZVJlZjxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcbiAgICBwYWdlPzogTWF5YmVSZWY8bnVtYmVyPjtcbiAgICBzZXJpYWxpemU/OiAoaXRlbTogYW55KSA9PiBhbnk7XG4gICAgcmVmaW5lPzogKGl0ZW1zOiBhbnlbXSkgPT4gYW55W107XG4gICAgbGltaXQ/OiBudW1iZXI7XG4gICAgb3JkZXJCeT86IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbDtcbiAgICBvcmRlckRpcmVjdGlvbj86ICdhc2MnIHwgJ2Rlc2MnIHwgKCdhc2MnIHwgJ2Rlc2MnKVtdIHwgbnVsbDtcbiAgICBkZWJvdW5jZT86IG51bWJlcjtcbiAgICBpbW1lZGlhdGU/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXNlRmV0Y2hQYWdpbmF0aW9uPFQgPSBhbnk+KHVybDogc3RyaW5nLCBvcHRpb25zPzogVXNlRmV0Y2hQYWdpbmF0aW9uT3B0aW9ucyk6IHtcbiAgICBwYWdlOiBSZWY8bnVtYmVyLCBudW1iZXI+O1xuICAgIGxpbWl0OiBSZWY8bnVtYmVyLCBudW1iZXI+O1xuICAgIG9yZGVyQnk6IFJlZjxzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwsIHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbD47XG4gICAgb3JkZXJEaXJlY3Rpb246IFJlZjxcImFzY1wiIHwgXCJkZXNjXCIgfCAoXCJhc2NcIiB8IFwiZGVzY1wiKVtdIHwgbnVsbCwgXCJhc2NcIiB8IFwiZGVzY1wiIHwgKFwiYXNjXCIgfCBcImRlc2NcIilbXSB8IG51bGw+O1xuICAgIHRvdGFsOiBpbXBvcnQoXCJ2dWVcIikuQ29tcHV0ZWRSZWY8bnVtYmVyPjtcbiAgICB0b3RhbFBhZ2VzOiBpbXBvcnQoXCJ2dWVcIikuQ29tcHV0ZWRSZWY8bnVtYmVyPjtcbiAgICBpdGVtczogaW1wb3J0KFwidnVlXCIpLkNvbXB1dGVkUmVmPFRbXT47XG4gICAgbG9hZGluZzogUmVmPGJvb2xlYW4sIGJvb2xlYW4+O1xuICAgIGxvYWQ6ICgpID0+IFByb21pc2U8dm9pZD47XG4gICAgcmVzZXQ6ICgpID0+IFByb21pc2U8dm9pZD47XG4gICAgcXVlcnk6IFJlZjxSZWNvcmQ8c3RyaW5nLCBhbnk+LCBSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcbiAgICBoeWRyYXRlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufTtcbiIsImludGVyZmFjZSBFbnRyeSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IGFueTtcbiAgICBzb3VyY2U6IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmZpZ1NlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBlbnRyaWVzOiBNYXA8c3RyaW5nLCBFbnRyeT47XG4gICAgY29uc3RydWN0b3IoKTtcbiAgICBsaXN0KCk6IEVudHJ5W107XG4gICAgcGFyc2VWYWx1ZSh2YWx1ZTogYW55KTogYW55O1xuICAgIGxvYWRGcm9tUmVjb3JkKHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55Piwgc291cmNlPzogc3RyaW5nKTogdm9pZDtcbiAgICBsb2FkRnJvbUVudHJpZXMoZW50cmllczogW3N0cmluZywgYW55XVtdLCBzb3VyY2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIHRvUmVjb3JkKCk6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgaGFzKGtleTogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBnZXQ8VCA9IGFueSB8IHVuZGVmaW5lZD4oa2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGFueSk6IFQ7XG4gICAgZ2V0T25lPFQgPSBhbnkgfCB1bmRlZmluZWQ+KGtleXM6IHN0cmluZ1tdLCBkZWZhdWx0VmFsdWU/OiBhbnkpOiBUO1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgc291cmNlPzogc3RyaW5nKTogdm9pZDtcbiAgICB1bnNldChrZXk6IHN0cmluZyk6IHZvaWQ7XG4gICAgY2xlYXIoKTogdm9pZDtcbiAgICBkdW1wKCk6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5leHBvcnQge307XG4iLCJ0eXBlIENvbnN0cnVjdG9yPFQgPSBvYmplY3Q+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcbnR5cGUgRW50cnlLZXkgPSBzdHJpbmcgfCBzeW1ib2wgfCBDb25zdHJ1Y3RvcjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRhaW5lclNlcnZpY2Uge1xuICAgIHByaXZhdGUgZW50cmllcztcbiAgICBsb2FkRnJvbVJlY29yZChyZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkO1xuICAgIHRvUmVjb3JkKCk6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgcHJpdmF0ZSBnZXRLZXk7XG4gICAgc2V0KHBheWxvYWQ6IEVudHJ5S2V5LCB2YWx1ZTogYW55KTogdGhpcztcbiAgICBoYXMocGF5bG9hZDogRW50cnlLZXkpOiBib29sZWFuO1xuICAgIGdldDxUPihwYXlsb2FkOiBFbnRyeUtleSk6IFQ7XG4gICAgdW5zZXQocGF5bG9hZDogRW50cnlLZXkpOiB2b2lkO1xuICAgIHNpbmdsZXRvbjxUPihjbGFzc0NvbnN0cnVjdG9yOiBDb25zdHJ1Y3RvcjxUPik6IFQ7XG4gICAgbG9hZChlbnRyaWVzOiBSZWNvcmQ8YW55LCBhbnk+KTogdm9pZDtcbiAgICBwcm94eTxUID0gdW5rbm93bj4oa2V5OiBFbnRyeUtleSk6IFQ7XG4gICAga2V5cygpOiBFbnRyeUtleVtdO1xufVxuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlSWQocHJlZml4Pzogc3RyaW5nKTogc3RyaW5nO1xuIiwiaW1wb3J0IHsgZGVmaW5lQWJpbGl0eSB9IGZyb20gJ0BjYXNsL2FiaWxpdHknO1xuaW1wb3J0IFBlcm1pc3Npb24gZnJvbSAnLi9QZXJtaXNzaW9uRW50aXR5LnRzJztcbmltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY2xFbnRpdHkge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBhYmlsaXR5OiBSZXR1cm5UeXBlPHR5cGVvZiBkZWZpbmVBYmlsaXR5PjtcbiAgICBwZXJtaXNzaW9uczogUGVybWlzc2lvbltdO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogUGFydGlhbDxBY2xFbnRpdHk+KTtcbiAgICBjYW4oYWN0aW9uOiBzdHJpbmcsIHN1YmplY3Q6IGFueSwgb2JqZWN0PzogUmVjb3JkPHN0cmluZywgYW55Pik6IGJvb2xlYW47XG4gICAgY2Fubm90KGFjdGlvbjogc3RyaW5nLCBzdWJqZWN0OiBhbnksIG9iamVjdD86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBib29sZWFuO1xuICAgIHN1YmplY3Qoc3ViamVjdDogc3RyaW5nLCBvYmplY3Q6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ICYgaW1wb3J0KFwiQGNhc2wvYWJpbGl0eVwiKS5Gb3JjZWRTdWJqZWN0PHN0cmluZz47XG59XG4iLCJleHBvcnQgaW50ZXJmYWNlIE1vZHVsZU1hbmlmZXN0QnVpbGRJbXBvcnQge1xuICAgIGZyb206IHN0cmluZztcbiAgICB0bz86IHN0cmluZztcbiAgICB0eXBlOiAnZ2xvYmFsX2ltcG9ydCc7XG59XG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZU1hbmlmZXN0QnVpbGQge1xuICAgIGltcG9ydHM/OiBNb2R1bGVNYW5pZmVzdEJ1aWxkSW1wb3J0W107XG59XG5kZWNsYXJlIGNvbnN0IE1vZHVsZU1hbmlmZXN0X2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kdWxlTWFuaWZlc3QgZXh0ZW5kcyBNb2R1bGVNYW5pZmVzdF9iYXNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBhdXRob3I/OiBzdHJpbmc7XG4gICAgZGVwZW5kZW5jaWVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBidWlsZD86IE1vZHVsZU1hbmlmZXN0QnVpbGQ7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgTW9kdWxlTWFuaWZlc3QgZnJvbSAnLi9Nb2R1bGVNYW5pZmVzdEVudGl0eS50cyc7XG5pbXBvcnQgTGlmZWN5Y2xlSG9vayBmcm9tICcjc2hhcmVkL2VudGl0aWVzL0xpZmVjeWNsZUhvb2sudHMnO1xuaW50ZXJmYWNlIE1vZHVsZVVwZ3JhZGVJbmZvIHtcbiAgICBzb3VyY2U6ICdnaXQnIHwgJ3ppcCc7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuZGVjbGFyZSBjb25zdCBNb2R1bGVfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3IgJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I8e30+ICYgdHlwZW9mIExpZmVjeWNsZUhvb2s7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2R1bGUgZXh0ZW5kcyBNb2R1bGVfYmFzZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBkZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgYnVpbGQ6IE1vZHVsZU1hbmlmZXN0WydidWlsZCddO1xuICAgIGRpcmVjdG9yeTogc3RyaW5nO1xuICAgIHVwZ3JhZGVfaW5mbz86IE1vZHVsZVVwZ3JhZGVJbmZvO1xuICAgIHNldERhdGEoZGF0YTogUGFydGlhbDxNb2R1bGUgfCBNb2R1bGVNYW5pZmVzdD4pOiB2b2lkO1xufVxuZXhwb3J0IHt9O1xuIiwiZGVjbGFyZSBjb25zdCBQbHVnaW5FbnRpdHlfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbHVnaW5FbnRpdHkgZXh0ZW5kcyBQbHVnaW5FbnRpdHlfYmFzZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgYWxpYXNlczogc3RyaW5nW107XG4gICAgdmVyc2lvbl9jaGFubmVsOiBzdHJpbmc7XG4gICAgdmVyc2lvbl9hdmFpbGFibGVfY2hhbm5lbHM6IHN0cmluZ1tdO1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgdHlwZSBWYWxpYm90T2JqZWN0U2NoZW1hLCB0eXBlIFZhbGlib3RTY2hlbWEsIHR5cGUgVmFsaWRhdGVQYXlsb2FkLCB0eXBlIFZhbGlkYXRvclJlc3VsdCB9IGZyb20gJyNzaGFyZWQvaW5kZXgudHMnO1xuaW1wb3J0IHsgdG9UeXBlZFNjaGVtYSBhcyB2ZWVWYWxpZGF0ZVRvVHlwZWRTY2hlbWEgfSBmcm9tICdAdmVlLXZhbGlkYXRlL3ZhbGlib3QnO1xuaW1wb3J0IHsgdHlwZSBGb3JtQ29udGV4dCwgdHlwZSBGb3JtT3B0aW9ucywgdHlwZSBHZW5lcmljT2JqZWN0IH0gZnJvbSAndmVlLXZhbGlkYXRlJztcbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWJvdEZvcm1PcHRpb25zPFQgZXh0ZW5kcyBWYWxpYm90U2NoZW1hID0gVmFsaWJvdFNjaGVtYT4gZXh0ZW5kcyBPbWl0PEZvcm1PcHRpb25zPFZhbGlkYXRlUGF5bG9hZDxUPiwgVmFsaWRhdG9yUmVzdWx0PFQ+PiwgJ3ZhbGlkYXRpb25TY2hlbWEnPiB7XG59XG5leHBvcnQgaW50ZXJmYWNlIFZhbGlib3RGb3JtUmVzdWx0T2JqZWN0PFQgZXh0ZW5kcyBWYWxpYm90T2JqZWN0U2NoZW1hPiBleHRlbmRzIEdlbmVyaWNPYmplY3QsIEZvcm1Db250ZXh0PFZhbGlkYXRvclJlc3VsdDxUPj4ge1xufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgdXNlRm9ybTogdHlwZW9mIHVzZVZhbGlib3RGb3JtO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdG9UeXBlZFNjaGVtYTogdHlwZW9mIHZlZVZhbGlkYXRlVG9UeXBlZFNjaGVtYTtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVzZVZhbGlib3RGb3JtPFQgZXh0ZW5kcyBWYWxpYm90T2JqZWN0U2NoZW1hID0gVmFsaWJvdE9iamVjdFNjaGVtYT4oc2NoZW1hOiBULCBvcHRpb25zPzogVmFsaWJvdEZvcm1PcHRpb25zPFQ+KTogRm9ybUNvbnRleHQ8VmFsaWRhdG9yUmVzdWx0PFQ+PjtcbiIsImV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVzZUxheW91dE9wdGlvbnMoKTogaW1wb3J0KFwidnVlXCIpLlJlZjxhbnksIGFueT47XG4iLCJpbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gJ3Z1ZSc7XG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gICAgdGltZW91dD86IG51bWJlcjtcbn1cbmludGVyZmFjZSBMb2FkaW5nUmVmIGV4dGVuZHMgUmVmPGJvb2xlYW4+IHtcbiAgICBzZXQ6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVzZUxvYWRpbmcoZGVmYXVsdFZhbHVlPzogYm9vbGVhbiwgb3B0aW9ucz86IE9wdGlvbnMpOiBMb2FkaW5nUmVmO1xuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGludGVyZmFjZSBNZW51QmFzZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIG9yZGVyPzogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBNZW51U2luZ2xlIGV4dGVuZHMgTWVudUJhc2Uge1xuICAgIGljb246IHN0cmluZztcbiAgICB0bzogc3RyaW5nO1xuICAgIHRhcmdldD86ICdfYmxhbmsnIHwgJ19zZWxmJyB8ICdfcGFyZW50JyB8ICdfdG9wJztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWVudVdpdGhDaGlsZHJlbiBleHRlbmRzIE1lbnVCYXNlIHtcbiAgICBpY29uOiBzdHJpbmc7XG4gICAgY2hpbGRyZW46IE9taXQ8TWVudVNpbmdsZSwgJ2ljb24nPltdO1xufVxuZXhwb3J0IGludGVyZmFjZSBNZW51R3JvdXAgZXh0ZW5kcyBNZW51QmFzZSB7XG4gICAgZ3JvdXA6IGJvb2xlYW47XG4gICAgaXRlbXM6IE1lbnVJdGVtW107XG59XG5leHBvcnQgaW50ZXJmYWNlIE1lbnVJdGVtIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdG8/OiBzdHJpbmc7XG4gICAgdGFyZ2V0PzogJ19ibGFuaycgfCAnX3NlbGYnIHwgJ19wYXJlbnQnIHwgJ190b3AnO1xuICAgIGdyb3VwPzogc3RyaW5nO1xuICAgIG9yZGVyPzogbnVtYmVyO1xuICAgIGljb24/OiBzdHJpbmc7XG4gICAgcGFyZW50Pzogc3RyaW5nO1xuICAgIGxheW91dD86IHN0cmluZztcbn1cbmV4cG9ydCB0eXBlIFVzZU1lbnUgPSBSZXR1cm5UeXBlPHR5cGVvZiB1c2VNZW51PjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVzZU1lbnUoKToge1xuICAgIGl0ZW1zOiBpbXBvcnQoXCJ2dWVcIikuQ29tcHV0ZWRSZWY8e1xuICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICBsYWJlbDogc3RyaW5nO1xuICAgICAgICB0bz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgdGFyZ2V0PzogXCJfYmxhbmtcIiB8IFwiX3NlbGZcIiB8IFwiX3BhcmVudFwiIHwgXCJfdG9wXCIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGdyb3VwPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBvcmRlcj86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWNvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFyZW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBsYXlvdXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgfVtdPjtcbiAgICBhZGQ6ICguLi5pdGVtOiBNZW51SXRlbVtdKSA9PiB2b2lkO1xuICAgIHJlbW92ZTogKGl0ZW06IE1lbnVJdGVtIHwgTWVudUl0ZW1bXCJpZFwiXSkgPT4gdm9pZDtcbiAgICByZW1vdmVHcm91cDogKGdyb3VwSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgICByZW1vdmVNYW55OiAoaXRlbUlkczogc3RyaW5nW10pID0+IHZvaWQ7XG4gICAgcmVtb3ZlTWFueUdyb3VwOiAoZ3JvdXBJZHM6IHN0cmluZ1tdKSA9PiB2b2lkO1xuICAgIGNsZWFyOiAoKSA9PiB2b2lkO1xufTtcbiIsImltcG9ydCB7IHVzZVJvdXRlUXVlcnkgYXMgdnVlVXNlclJvdXRlUXVlcnkgfSBmcm9tICdAdnVldXNlL3JvdXRlcic7XG5leHBvcnQgZGVjbGFyZSBjb25zdCB1c2VSb3V0ZVF1ZXJ5OiB0eXBlb2YgdnVlVXNlclJvdXRlUXVlcnk7XG4iLCJpbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gJ3Z1ZSc7XG5leHBvcnQgaW50ZXJmYWNlIFVzZVN0YXRlT3B0aW9ucyB7XG4gICAgZGVmYXVsdD86ICgpID0+IGFueTtcbiAgICB0cmFuc2Zvcm0/OiAodmFsdWU6IGFueSkgPT4gYW55O1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXNlU3RhdGU8VD4oa2V5OiBzdHJpbmcsIG9wdGlvbnM/OiBVc2VTdGF0ZU9wdGlvbnMpOiBSZWY8VD47XG4iLCJpbXBvcnQgQWNsRW50aXR5IGZyb20gJyNzaGFyZWQvZW50aXRpZXMvQWNsRW50aXR5LnRzJztcbmRlY2xhcmUgY29uc3QgYWNsOiBBY2xFbnRpdHk7XG5leHBvcnQgZGVmYXVsdCBhY2w7XG4iLCJpbXBvcnQgQXV0aFNlcnZpY2UgZnJvbSAnI2NsaWVudC9zZXJ2aWNlcy9BdXRoU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IGF1dGg6IEF1dGhTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgYXV0aDtcbiIsImltcG9ydCBDb25maWdTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvQ29uZmlnU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IGNvbmZpZzogQ29uZmlnU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IGNvbmZpZztcbiIsImltcG9ydCBDb250YWluZXJTZXJ2aWNlIGZyb20gXCIjc2hhcmVkL3NlcnZpY2VzL0NvbnRhaW5lclNlcnZpY2UudHNcIjtcbmRlY2xhcmUgY29uc3QgX2RlZmF1bHQ6IENvbnRhaW5lclNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBfZGVmYXVsdDtcbiIsImltcG9ydCB0eXBlIERhc2hib2FyZFdpZGdldERlZmluaXRpb24gZnJvbSAnI2NsaWVudC9lbnRpdGllcy9EYXNoYm9hcmRXaWRnZXREZWZpbml0aW9uLnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhc2hib2FyZFdpZGdldFJlZ2lzdHJ5IHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBkZWZpbml0aW9ucztcbiAgICByZWdpc3RlciguLi5kZWZpbml0aW9uOiBEYXNoYm9hcmRXaWRnZXREZWZpbml0aW9uW10pOiB2b2lkO1xuICAgIGdldChpZDogc3RyaW5nKTogRGFzaGJvYXJkV2lkZ2V0RGVmaW5pdGlvbiB8IG51bGw7XG4gICAgbGlzdCgpOiBEYXNoYm9hcmRXaWRnZXREZWZpbml0aW9uW107XG59XG4iLCJpbXBvcnQgRGFzaGJvYXJkV2lkZ2V0UmVnaXN0cnkgZnJvbSAnI2NsaWVudC9yZWdpc3RyeS9EYXNoYm9hcmRXaWRnZXRSZWdpc3RyeS50cyc7XG5kZWNsYXJlIGNvbnN0IGRhc2hib2FyZFJlZ2lzdHJ5OiBEYXNoYm9hcmRXaWRnZXRSZWdpc3RyeTtcbmV4cG9ydCBkZWZhdWx0IGRhc2hib2FyZFJlZ2lzdHJ5O1xuIiwiaW1wb3J0IHsgRW1taXR0ZXJTZXJ2aWNlIH0gZnJvbSAnI3NoYXJlZC9pbmRleC50cyc7XG5kZWNsYXJlIGNvbnN0IGVtbWl0dGVyOiBFbW1pdHRlclNlcnZpY2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5leHBvcnQgZGVmYXVsdCBlbW1pdHRlcjtcbiIsImltcG9ydCBGZXRjaFNlcnZpY2UgZnJvbSAnI2NsaWVudC9zZXJ2aWNlcy9GZXRjaFNlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCBmZXRjaGVyOiBGZXRjaFNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBmZXRjaGVyO1xuIiwiZGVjbGFyZSBjb25zdCBsYXlvdXQ6IGFueTtcbmV4cG9ydCBkZWZhdWx0IGxheW91dDtcbiIsImltcG9ydCBMaWZlY3ljbGVTZXJ2aWNlIGZyb20gJyNjbGllbnQvc2VydmljZXMvTGlmZWN5Y2xlU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IGxpZmVjeWNsZTogTGlmZWN5Y2xlU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IGxpZmVjeWNsZTtcbiIsImltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IGxvZ2dlcjtcbiIsImltcG9ydCBNZW51U2VydmljZSBmcm9tICcjY2xpZW50L3NlcnZpY2VzL01lbnVTZXJ2aWNlLnRzJztcbmRlY2xhcmUgY29uc3QgbWVudTogTWVudVNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBtZW51O1xuIiwiaW1wb3J0IHR5cGUgeyBSb3V0ZUxvY2F0aW9uTm9ybWFsaXplZEdlbmVyaWMgfSBmcm9tICd2dWUtcm91dGVyJztcbmRlY2xhcmUgY29uc3Qgcm91dGU6IFJvdXRlTG9jYXRpb25Ob3JtYWxpemVkR2VuZXJpYztcbmV4cG9ydCBkZWZhdWx0IHJvdXRlO1xuIiwiaW1wb3J0IHR5cGUgeyBSb3V0ZXIgfSBmcm9tICcjY2xpZW50L3NlcnZpY2VzL1JvdXRlclNlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCByb3V0ZXI6IFJvdXRlcjtcbmV4cG9ydCBkZWZhdWx0IHJvdXRlcjtcbiIsImltcG9ydCBUb2FzdFNlcnZpY2UgZnJvbSAnI2NsaWVudC9zZXJ2aWNlcy9Ub2FzdFNlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCB0b2FzdDogVG9hc3RTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgdG9hc3Q7XG4iLCJpbXBvcnQgKiBhcyBWZWVWYWxpZGF0ZSBmcm9tICd2ZWUtdmFsaWRhdGUnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgVkVFX1ZBTElEQVRFX0NPTlRBSU5FUl9LRVkgPSBcInZlZS12YWxpZGF0ZVwiO1xuZGVjbGFyZSBjb25zdCB2ZWVWYWxpZGF0ZTogdHlwZW9mIFZlZVZhbGlkYXRlO1xuZXhwb3J0IGRlZmF1bHQgdmVlVmFsaWRhdGU7XG4iLCJpbXBvcnQgKiBhcyBWdWUgZnJvbSAndnVlJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFZVRV9DT05UQUlORVJfS0VZID0gXCJWdWVcIjtcbmRlY2xhcmUgY29uc3QgdnVlOiB0eXBlb2YgVnVlO1xuZXhwb3J0IGRlZmF1bHQgdnVlO1xuIiwiaW1wb3J0ICogYXMgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgVlVFX1JPVVRFUl9DT05UQUlORVJfS0VZID0gXCJWdWVSb3V0ZXJcIjtcbmRlY2xhcmUgY29uc3QgdnVlUm91dGVyOiB0eXBlb2YgVnVlUm91dGVyO1xuZXhwb3J0IGRlZmF1bHQgdnVlUm91dGVyO1xuIiwiaW1wb3J0IERhc2hib2FyZFdpZGdldERlZmluaXRpb24gZnJvbSAnLi9EYXNoYm9hcmRXaWRnZXREZWZpbml0aW9uJztcbmltcG9ydCB0eXBlIERhc2hib2FyZFdpZGdldERhdGEgZnJvbSAnLi9EYXNoYm9hcmRXaWRnZXREYXRhJztcbi8qKlxuICAgICogQ29tcG9uZW50IHRvIGJlIHVzZWQgZm9yIGNoYXJ0IHdpZGdldHMgaW4gdGhlIGRhc2hib2FyZC5cbiAgICAqIFBsdWdpbnMgY2FuIGV4dGVuZCB0aGlzIGNsYXNzIHRvIGNyZWF0ZSB0aGVpciBvd24gY2hhcnQgd2lkZ2V0cy5cbiAgICAqIEBleGFtcGxlXG4gICAgKiBjbGFzcyBNeUNoYXJ0V2lkZ2V0IGV4dGVuZHMgRGFzaGJvYXJkV2lkZ2V0RGVmaW5pdGlvbkNoYXJ0IHtcbiAgICAqICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAqICAgICAgICAgc3VwZXIoKVxuICAgICogICAgICAgICB0aGlzLm5hbWUgPSAnTXkgQ2hhcnQgV2lkZ2V0J1xuICAgICogICAgICAgICB0aGlzLmlkID0gJ215LWNoYXJ0LXdpZGdldCdcbiAgICAqICAgICB9XG4gICAgKiB9XG4gICAgKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhc2hib2FyZFdpZGdldERlZmluaXRpb25DaGFydCBleHRlbmRzIERhc2hib2FyZFdpZGdldERlZmluaXRpb24ge1xuICAgIHByaXZhdGUgc3RhdGljIHJlbmRlcmVyO1xuICAgIGNvbnN0cnVjdG9yKCk7XG4gICAgc3RhdGljIHNldFJlbmRlcmVyKHJlbmRlcmVyOiBhbnkpOiB2b2lkO1xuICAgIGNvbXBvbmVudCgpOiBhbnk7XG4gICAgY2hhcnRPcHRpb25zKHBheWxvYWQ6IERhc2hib2FyZFdpZGdldERhdGFbJ29wdGlvbnMnXSk6IFByb21pc2U8YW55Pjtcbn1cbiIsImltcG9ydCBCYXNlIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvTW9kdWxlRW50aXR5LnRzJztcbmRlY2xhcmUgY29uc3QgTW9kdWxlX2Jhc2U6IHR5cGVvZiBCYXNlO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kdWxlIGV4dGVuZHMgTW9kdWxlX2Jhc2Uge1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9QbHVnaW5FbnRpdHkudHMnO1xuaW1wb3J0IHR5cGUgeyBBdXRvT3B0aW9ucyB9IGZyb20gJyNjbGllbnQvc2VydmljZXMvUm91dGVyU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IFBsdWdpbkVudGl0eV9iYXNlOiB0eXBlb2YgQmFzZTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsdWdpbkVudGl0eSBleHRlbmRzIFBsdWdpbkVudGl0eV9iYXNlIHtcbiAgICBhZGRQYWdlc0ZvbGRlcihpbXBvcnRzOiBhbnksIG9wdGlvbnM/OiBBdXRvT3B0aW9ucyk6IHZvaWQ7XG4gICAgbG9hZCgpOiBQcm9taXNlPHZvaWQ+O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBBdXRvT3B0aW9ucyB9IGZyb20gJyNjbGllbnQvc2VydmljZXMvUm91dGVyU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSB7IERlZmluZUNvbXBvbmVudCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgdHlwZSB7IFJvdXRlUmVjb3JkUmF3IH0gZnJvbSAndnVlLXJvdXRlcic7XG4vKiogQGRlcHJlY2F0ZWQgVXNlIGF1dG8gZnJvbSBSb3V0ZXJTZXJ2aWNlIGluc3RlYWQgKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGF1dG9Sb3V0ZXMoaW1wb3J0czogUmVjb3JkPHN0cmluZywgRGVmaW5lQ29tcG9uZW50IHwgKCgpID0+IFByb21pc2U8RGVmaW5lQ29tcG9uZW50Pik+LCBvcHRpb25zPzogQXV0b09wdGlvbnMpOiBSb3V0ZVJlY29yZFJhd1tdO1xuIiwiZXhwb3J0IGludGVyZmFjZSBEYXRhVGFibGVDb2x1bW48VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgZmllbGQ/OiBrZXlvZiBUIHwgKChyb3c6IFQpID0+IGFueSkgfCAoc3RyaW5nICYge30pO1xuICAgIHNvcnRhYmxlPzogYm9vbGVhbjtcbiAgICB3aWR0aD86IHN0cmluZyB8IG51bWJlcjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGRlZmluZUNvbHVtbnM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KGNvbHVtbnM6IERhdGFUYWJsZUNvbHVtbjxUPltdKTogRGF0YVRhYmxlQ29sdW1uPFQ+W107XG4iLCJleHBvcnQgaW50ZXJmYWNlIERlZmluZUZvcm1GaWVsZCB7XG4gICAgY29tcG9uZW50OiAndGV4dC1maWVsZCcgfCAndGV4dGFyZWEnIHwgJ3NlbGVjdCcgfCAnYXV0b2NvbXBsZXRlJyB8ICdzd2l0Y2gnIHwgJ2ZpbGUtdXBsb2FkJyB8ICdpbWFnZS11cGxvYWQnIHwgJ2NvbG9yLXBpY2tlcicgfCAnc3RyaW5nLWxpc3QtaW5wdXQnIHwgJ2pzb24taW5wdXQnIHwgJ2RhdGUtcGlja2VyJyB8ICdoaWRkZW4nO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGRlZmluZUZvcm1GaWVsZHMoZmllbGQ6IFJlY29yZDxzdHJpbmcsIERlZmluZUZvcm1GaWVsZD4pOiBSZWNvcmQ8c3RyaW5nLCBEZWZpbmVGb3JtRmllbGQ+O1xuIiwiLyoqIEBkZXByZWNhdGVkIFVzZSBmZXRjaGVyIGZhY2FkZSAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgJGZldGNoOiBpbXBvcnQoXCIuLlwiKS5GZXRjaFNlcnZpY2U7XG4iLCJpbnRlcmZhY2UgUGlja09wdGlvbnMge1xuICAgIGFjY2VwdD86IHN0cmluZztcbiAgICBtdWx0aXBsZT86IGJvb2xlYW47XG59XG50eXBlIFBpY2tSZXN1bHQ8VCBleHRlbmRzIFBpY2tPcHRpb25zPiA9IFRbJ211bHRpcGxlJ10gZXh0ZW5kcyB0cnVlID8gRmlsZVtdIDogRmlsZSB8IG51bGw7XG5kZWNsYXJlIGZ1bmN0aW9uIHBpY2s8VCBleHRlbmRzIFBpY2tPcHRpb25zPihvcHRpb25zOiBUKTogUHJvbWlzZTxQaWNrUmVzdWx0PFQ+PjtcbmRlY2xhcmUgZnVuY3Rpb24gdG9VaW50OEFycmF5KGZpbGU6IEZpbGUpOiBQcm9taXNlPFVpbnQ4QXJyYXk+O1xuaW50ZXJmYWNlIFVwbG9hZE9wdGlvbnMge1xuICAgIGRyaXZlSWQ6IHN0cmluZztcbiAgICBmaWxlOiBGaWxlO1xuICAgIGRpcmVjdG9yeT86IHN0cmluZztcbn1cbmRlY2xhcmUgZnVuY3Rpb24gdXBsb2FkKG9wdGlvbnM6IFVwbG9hZE9wdGlvbnMpOiBQcm9taXNlPGFueT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCAkZmlsZToge1xuICAgIHBpY2s6IHR5cGVvZiBwaWNrO1xuICAgIHVwbG9hZDogdHlwZW9mIHVwbG9hZDtcbiAgICB0b1VpbnQ4QXJyYXk6IHR5cGVvZiB0b1VpbnQ4QXJyYXk7XG59O1xuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcGFyc2VUbyh0bzogc3RyaW5nKTogc3RyaW5nO1xuIiwiZXhwb3J0IGRlY2xhcmUgY29uc3QgJHRvYXN0OiAoKG1lc3NhZ2U6IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcgfCBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50KSB8IGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQsIGRhdGE/OiBpbXBvcnQoXCJ2dWUtc29ubmVyXCIpLkV4dGVybmFsVG9hc3QpID0+IHN0cmluZyB8IG51bWJlcikgJiB7XG4gICAgc3VjY2VzczogKG1lc3NhZ2U6IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcgfCBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50KSB8IGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQsIGRhdGE/OiBpbXBvcnQoXCJ2dWUtc29ubmVyXCIpLkV4dGVybmFsVG9hc3QpID0+IHN0cmluZyB8IG51bWJlcjtcbiAgICBpbmZvOiAobWVzc2FnZTogc3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQpIHwgaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCwgZGF0YT86IGltcG9ydChcInZ1ZS1zb25uZXJcIikuRXh0ZXJuYWxUb2FzdCkgPT4gc3RyaW5nIHwgbnVtYmVyO1xuICAgIHdhcm5pbmc6IChtZXNzYWdlOiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCkgfCBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50LCBkYXRhPzogaW1wb3J0KFwidnVlLXNvbm5lclwiKS5FeHRlcm5hbFRvYXN0KSA9PiBzdHJpbmcgfCBudW1iZXI7XG4gICAgZXJyb3I6IChtZXNzYWdlOiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCkgfCBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50LCBkYXRhPzogaW1wb3J0KFwidnVlLXNvbm5lclwiKS5FeHRlcm5hbFRvYXN0KSA9PiBzdHJpbmcgfCBudW1iZXI7XG4gICAgY3VzdG9tOiAoY29tcG9uZW50OiBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50LCBkYXRhPzogaW1wb3J0KFwidnVlLXNvbm5lclwiKS5FeHRlcm5hbFRvYXN0KSA9PiBzdHJpbmcgfCBudW1iZXI7XG4gICAgbWVzc2FnZTogKG1lc3NhZ2U6IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcgfCBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50KSB8IGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQsIGRhdGE/OiBpbXBvcnQoXCJ2dWUtc29ubmVyXCIpLkV4dGVybmFsVG9hc3QpID0+IHN0cmluZyB8IG51bWJlcjtcbiAgICBwcm9taXNlOiA8VG9hc3REYXRhPihwcm9taXNlOiBQcm9taXNlPFRvYXN0RGF0YT4gfCAoKCkgPT4gUHJvbWlzZTxUb2FzdERhdGE+KSwgZGF0YT86ICh7XG4gICAgICAgIGlkPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBpY29uPzogaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCB8IHVuZGVmaW5lZDtcbiAgICAgICAgdG9hc3RlcklkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBjb21wb25lbnQ/OiBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuICAgICAgICBjb21wb25lbnRQcm9wcz86IGFueTtcbiAgICAgICAgcmljaENvbG9ycz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGludmVydD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGNsb3NlQnV0dG9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgZGlzbWlzc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBkdXJhdGlvbj86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgaW1wb3J0YW50PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgYWN0aW9uPzogKGltcG9ydChcInZ1ZS1zb25uZXJcIikuQWN0aW9uIHwgaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCkgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNhbmNlbD86IChpbXBvcnQoXCJ2dWUtc29ubmVyXCIpLkFjdGlvbiB8IGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQpIHwgdW5kZWZpbmVkO1xuICAgICAgICBvbkRpc21pc3M/OiAoKHRvYXN0OiBpbXBvcnQoXCJ2dWUtc29ubmVyXCIpLlRvYXN0VCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICAgIG9uQXV0b0Nsb3NlPzogKCh0b2FzdDogaW1wb3J0KFwidnVlLXNvbm5lclwiKS5Ub2FzdFQpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAgICAgICBjYW5jZWxCdXR0b25TdHlsZT86IGltcG9ydChcInZ1ZVwiKS5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICAgICAgICBhY3Rpb25CdXR0b25TdHlsZT86IGltcG9ydChcInZ1ZVwiKS5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICAgICAgICBzdHlsZT86IGltcG9ydChcInZ1ZVwiKS5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICAgICAgICB1bnN0eWxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGNsYXNzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBjbGFzc2VzPzogaW1wb3J0KFwidnVlLXNvbm5lclwiKS5Ub2FzdENsYXNzZXMgfCB1bmRlZmluZWQ7XG4gICAgICAgIGRlc2NyaXB0aW9uQ2xhc3M/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBvc2l0aW9uPzogKFwidG9wLWxlZnRcIiB8IFwidG9wLXJpZ2h0XCIgfCBcImJvdHRvbS1sZWZ0XCIgfCBcImJvdHRvbS1yaWdodFwiIHwgXCJ0b3AtY2VudGVyXCIgfCBcImJvdHRvbS1jZW50ZXJcIikgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNsb3NlQnV0dG9uUG9zaXRpb24/OiAoXCJ0b3AtbGVmdFwiIHwgXCJ0b3AtcmlnaHRcIiB8IFwiYm90dG9tLWxlZnRcIiB8IFwiYm90dG9tLXJpZ2h0XCIpIHwgdW5kZWZpbmVkO1xuICAgICAgICB0ZXN0SWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgfSAmIHtcbiAgICAgICAgbG9hZGluZz86IHN0cmluZyB8IGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQ7XG4gICAgICAgIHN1Y2Nlc3M/OiAoc3RyaW5nIHwgaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCB8ICgoZGF0YTogVG9hc3REYXRhKSA9PiBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50IHwgc3RyaW5nIHwgUHJvbWlzZTxpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50IHwgc3RyaW5nPikpIHwgKGltcG9ydChcInZ1ZS1zb25uZXJcIikuUHJvbWlzZUlFeHRlbmRlZFJlc3VsdCB8ICgoZGF0YTogVG9hc3REYXRhKSA9PiBpbXBvcnQoXCJ2dWUtc29ubmVyXCIpLlByb21pc2VJRXh0ZW5kZWRSZXN1bHQgfCBQcm9taXNlPGltcG9ydChcInZ1ZS1zb25uZXJcIikuUHJvbWlzZUlFeHRlbmRlZFJlc3VsdD4pKSB8IHVuZGVmaW5lZDtcbiAgICAgICAgZXJyb3I/OiAoc3RyaW5nIHwgaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCB8ICgoZGF0YTogYW55KSA9PiBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50IHwgc3RyaW5nIHwgUHJvbWlzZTxpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50IHwgc3RyaW5nPikpIHwgKGltcG9ydChcInZ1ZS1zb25uZXJcIikuUHJvbWlzZUlFeHRlbmRlZFJlc3VsdCB8ICgoZGF0YTogYW55KSA9PiBpbXBvcnQoXCJ2dWUtc29ubmVyXCIpLlByb21pc2VJRXh0ZW5kZWRSZXN1bHQgfCBQcm9taXNlPGltcG9ydChcInZ1ZS1zb25uZXJcIikuUHJvbWlzZUlFeHRlbmRlZFJlc3VsdD4pKTtcbiAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50IHwgKChkYXRhOiBhbnkpID0+IGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQgfCBzdHJpbmcgfCBQcm9taXNlPGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQgfCBzdHJpbmc+KTtcbiAgICAgICAgZmluYWxseT86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIH0pIHwgdW5kZWZpbmVkKSA9PiAoc3RyaW5nICYge1xuICAgICAgICB1bndyYXA6ICgpID0+IFByb21pc2U8VG9hc3REYXRhPjtcbiAgICB9KSB8IChudW1iZXIgJiB7XG4gICAgICAgIHVud3JhcDogKCkgPT4gUHJvbWlzZTxUb2FzdERhdGE+O1xuICAgIH0pIHwge1xuICAgICAgICB1bndyYXA6ICgpID0+IFByb21pc2U8VG9hc3REYXRhPjtcbiAgICB9IHwgdW5kZWZpbmVkO1xuICAgIGRpc21pc3M6IChpZD86IG51bWJlciB8IHN0cmluZykgPT4gc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGxvYWRpbmc6IChtZXNzYWdlOiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCkgfCBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50LCBkYXRhPzogaW1wb3J0KFwidnVlLXNvbm5lclwiKS5FeHRlcm5hbFRvYXN0KSA9PiBzdHJpbmcgfCBudW1iZXI7XG59ICYge1xuICAgIGdldEhpc3Rvcnk6ICgpID0+IChpbXBvcnQoXCJ2dWUtc29ubmVyXCIpLlRvYXN0VDxpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50PiB8IGltcG9ydChcInZ1ZS1zb25uZXJcIikuVG9hc3RUb0Rpc21pc3MpW107XG4gICAgZ2V0VG9hc3RzOiAoKSA9PiAoaW1wb3J0KFwidnVlLXNvbm5lclwiKS5Ub2FzdFQ8aW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudD4gfCBpbXBvcnQoXCJ2dWUtc29ubmVyXCIpLlRvYXN0VG9EaXNtaXNzKVtdO1xufTtcbiIsImltcG9ydCB0eXBlIHsgTmF2aWdhdGlvbkd1YXJkLCBSb3V0ZUxvY2F0aW9uTm9ybWFsaXplZCB9IGZyb20gJ3Z1ZS1yb3V0ZXInO1xuZXhwb3J0IGludGVyZmFjZSBBdXRoR3VhcmRPcHRpb25zIHtcbiAgICByZWRpcmVjdDogc3RyaW5nIHwgKCh0bzogUm91dGVMb2NhdGlvbk5vcm1hbGl6ZWQpID0+IHN0cmluZyk7XG4gICAgZXhjbHVkZT86IHN0cmluZ1tdO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlQXV0aEd1YXJkKG9wdGlvbnM6IEF1dGhHdWFyZE9wdGlvbnMpOiBOYXZpZ2F0aW9uR3VhcmQ7XG5kZWNsYXJlIGNvbnN0IGF1dGhHdWFyZDogTmF2aWdhdGlvbkd1YXJkO1xuZXhwb3J0IGRlZmF1bHQgYXV0aEd1YXJkO1xuIiwiZXhwb3J0IGludGVyZmFjZSBHdWVzdEd1YXJkT3B0aW9ucyB7XG4gICAgcmVkaXJlY3Q6IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZUd1ZXN0R3VhcmQob3B0aW9uczogR3Vlc3RHdWFyZE9wdGlvbnMpOiAoKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5kZWNsYXJlIGNvbnN0IGd1ZXN0R3VhcmQ6ICgpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcbmV4cG9ydCBkZWZhdWx0IGd1ZXN0R3VhcmQ7XG4iLCJpbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25HdWFyZCB9IGZyb20gJ3Z1ZS1yb3V0ZXInO1xuZGVjbGFyZSBjb25zdCBzZXR1cEd1YXJkOiBOYXZpZ2F0aW9uR3VhcmQ7XG5leHBvcnQgZGVmYXVsdCBzZXR1cEd1YXJkO1xuIl0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlsxN10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFXLGdCQUFjO0NBQUM7RUFBSyxNQUFHLENBQUcsRUFBRTtDQUFFO0VBQUM7RUFBSTtFQUFFO0VBQUs7Q0FBQzs7OztBQ0R0RCxJQUFJLHdCQUFzQjtDQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDMUIsSUFBSSxtQkFBZ0I7Q0FBQTtPQUFVLENBQU0sUUFBUSxzQkFBZ0I7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRDVELElBQUksWUFBWTtDQUFDO0VBQUssTUFBSTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzFCLElBQUksT0FBSTtDQUFBO09BQVksQ0FBQSxVQUFVO0NBQU07RUFBQztFQUFFO0VBQU07RUFBRztFQUFBO0NBQUE7Ozs7QUNDaEQsSUFBSSxrQkFBa0I7Q0FBQztFQUFHLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMxQixJQUFJLGFBQVU7Q0FBSTtPQUFXO0VBQUM7RUFBTTtFQUFZO0VBQU07RUFBTTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDSDVELElBQUEsZ0JBQVU7Q0FBQTtPQUFjLEVBQUE7Q0FBQSxDQUFBLEdBQUE7Q0FBQTtBQUN4QixJQUFJLGNBQVc7Q0FBQTtPQUFNO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0ZyQixJQUFPLGVBQVU7Q0FBQTtPQUFhO0VBQU87RUFBQztFQUFZO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2xELElBQUksZUFBZTtDQUFBO0VBQUEsTUFBUTtFQUFBO0VBQUk7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNDL0IsSUFBQSxzQkFBcUI7Q0FBQTtFQUFBLE1BQUE7RUFBQTtFQUE0QjtFQUFBO0VBQWE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNBOUQsSUFBQSxtQkFBcUI7Q0FBQTtFQUFBLE1BQUE7RUFBQTtFQUF5QjtFQUFBO0VBQWE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRDNELElBQUEsZ0JBQW9CO0NBQUM7T0FBQTtFQUFBO0VBQWM7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFB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QUFDMUMsSUFBVSxjQUFXO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3JCLElBQUEsT0FBQTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDQSxJQUFPLGVBQVU7Q0FBQTtPQUFZLENBQUEsT0FBQTtDQUFBLENBQUEsR0FBQTtDQUFBOzs7O0FDTjdCLElBQUEsZUFBZTtDQUFLO09BQUMsQ0FBQSxRQUFhLE9BQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNpSWxDLElBQUksc0JBQWtCO0NBQUE7RUFBVSxRQUFDO0VBQUE7RUFBUztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VB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QVk7RUFBQyxFQUFFO0VBQUMsRUFBZTtFQUFZLEVBQUE7RUFBZSxFQUFBO0VBQWEsRUFBQTtFQUFjLEVBQUE7RUFBZTtFQUFhLEVBQUE7RUFBYyxFQUFVO0VBQWM7Q0FBQTtFQUFBO0VBQUE7RUFBWTtFQUFFO0VBQUE7RUFBQTtFQUFBO0VBQWdCO0VBQU07RUFBRztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNuTixJQUFRLE1BQVM7Q0FBQTtPQUFHO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNwQixJQUFHLE1BQUE7Q0FBQTtFQUFBLE1BQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0VBQUE7RUFBQSxFQUFBO0VBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNSSCxJQUFPLFdBQWM7Q0FBQTtPQUFjO0VBQUMsRUFBRTtFQUFDO0VBQWUsRUFBUTtFQUFpQixFQUFBO0VBQWM7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFnQjtFQUFNO0VBQUU7RUFBTTtFQUFDO0NBQUE7Ozs7QUNBNUgsSUFBTyxtQkFBVTtDQUFBO09BQWlCLEVBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ2xDLElBQUksT0FBVztDQUFBO09BQU07RUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDckIsSUFBSSxhQUFvQjtDQUFDO09BQUM7RUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDMUIsSUFBQSxhQUFBO0NBQUE7T0FBQTtFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUVGQSxJQUFXLFVBQVU7Q0FBQztPQUFXLENBQUEsR0FBQSxnQkFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNqQyxJQUFXLGdCQUFjO0NBQUE7T0FBQSxDQUFBLEVBQUEsV0FBQSxFQUFBLFdBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN6QixJQUFDLHNCQUFBO0NBQUE7T0FBQSxDQUFBLEVBQUEsYUFBQTtDQUFBLENBQUEsSUFBQSxHQUFBO0NBQUE7QUFFRCxJQUFXLG9CQUFvQjtDQUFDO0VBQUksTUFBQTtFQUFBO0VBQXNCO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFFMUQsSUFBTyxrQkFBVTtDQUFBO0VBQWtCLE1BQUU7RUFBQSxFQUFBO0VBQVE7RUFBYSxFQUFFO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDNUQsSUFBUyxrQkFBVztDQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ1BwQixJQUFPLGtCQUFpQjtDQUFBO09BQWlCO0VBQUM7RUFBaUI7RUFBRTtFQUFhO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzFFLElBQUksa0JBQXFCO0NBQUE7T0FBVTtFQUFBLEVBQWE7RUFBVSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDMUQsSUFBSSxrQkFBdUI7Q0FBQTtPQUFVO0VBQUEsRUFBYTtFQUFVLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VB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QSxNQUFBO0VBQUEsTUFBQTtFQUFBLGNBQUE7RUFBQSxNQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUEsTUFBQTtFQUFBLE1BQUE7RUFBQTtFQUFBLGNBQUE7RUFBQTtFQUFBLGNBQUE7RUFBQSxjQUFBO0VBQUE7RUFBQSxNQUFBO0VBQUEsTUFBQTtFQUFBLE1BQUE7RUFBQTtFQUFBLGNBQUE7RUFBQSxjQUFBO0VBQUEsY0FBQTtFQUFBO0VBQUEsTUFBQTtFQUFBLE1BQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBLE1BQUE7RUFBQSxNQUFBO0VBQUEsY0FBQTtFQUFBLE1BQUE7RUFBQSxjQUFBO0VBQUEsY0FBQTtFQUFBLE1BQUE7RUFBQSxjQUFBO0VBQUEsY0FBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0Q5SixJQUFPLG1CQUFVO0NBQUE7T0FBaUIsQ0FBQSx3QkFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2xDLElBQUksa0JBQXlCO0NBQUE7T0FBQSxDQUFBLGtCQUE0QixnQkFBTztDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNoRSxJQUFJLFlBQVU7Q0FBQTtPQUFRLENBQUEsZ0JBQUE7Q0FBQSxDQUFBLEdBQUE7Q0FBQTs7OztBQ0h0QixJQUFPLG9CQUFVO0NBQUE7T0FBa0IsRUFBQTtDQUFBLENBQUEsR0FBQTtDQUFBO0FBQ25DLElBQUksbUJBQWdCO0NBQUE7T0FBQSxDQUFBLGtCQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUNwQixJQUFBLGFBQUE7Q0FBQTtPQUFBLEVBQUE7Q0FBQSxFQUFBO0NBQUE7Ozs7QUNEQSxJQUFBLGFBQWM7Q0FBQTtPQUFZLENBQUEsZ0JBQWU7Q0FBQSxDQUFBLEdBQUE7Q0FBQSJ9
|