@napi-rs/cli 3.10.4 → 3.10.5

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/index.d.cts CHANGED
@@ -96,6 +96,7 @@ declare abstract class BaseBuildCommand extends Command {
96
96
  features?: string[];
97
97
  allFeatures?: boolean;
98
98
  noDefaultFeatures?: boolean;
99
+ ohosSign: boolean;
99
100
  /**
100
101
  * Return the parsed build options.
101
102
  */
@@ -133,6 +134,7 @@ declare abstract class BaseBuildCommand extends Command {
133
134
  features: string[] | undefined;
134
135
  allFeatures: boolean | undefined;
135
136
  noDefaultFeatures: boolean | undefined;
137
+ ohosSign: boolean;
136
138
  };
137
139
  }
138
140
  /**
@@ -273,6 +275,12 @@ interface BuildOptions$1 {
273
275
  * Do not activate the `default` feature
274
276
  */
275
277
  noDefaultFeatures?: boolean;
278
+ /**
279
+ * Whether to self-sign the built binary for OpenHarmony targets by injecting a `.codesign` fs-verity section, so the `.so` can be loaded on HarmonyOS devices. Only works with `*-unknown-linux-ohos` targets
280
+ *
281
+ * @default true
282
+ */
283
+ ohosSign?: boolean;
276
284
  }
277
285
  //#endregion
278
286
  //#region src/utils/log.d.ts
@@ -425,12 +433,16 @@ interface UserNapiConfig {
425
433
  * Whether the generated WASI loaders bootstrap the `napi-async-runtime`
426
434
  * CurrentThread JavaScript hosts.
427
435
  *
428
- * A binding built with the `napi-async-runtime` crate runs the
429
- * `CurrentThread` flavor on every WebAssembly target (it is the only
430
- * flavor there). Its futures make no progress until a task host is
431
- * registered, and its timers never fire until a timer host is, so the
432
- * loader must install both right after instantiation and unregister them
433
- * before the environment is destroyed.
436
+ * A binding built with the `napi-async-runtime` crate defaults to the
437
+ * `CurrentThread` flavor on every WebAssembly target. It is the only
438
+ * flavor on threadless `wasm32-wasip1`; `wasm32-wasip1-threads` also
439
+ * accepts an explicitly configured `MultiThread`. Under `CurrentThread`
440
+ * its futures make no progress until a task host is registered, and its
441
+ * timers never fire until a timer host is, so the loader must install
442
+ * both right after instantiation and unregister them before the
443
+ * environment is destroyed. A `MultiThread` binding uses neither host and
444
+ * the installed task host is unref'd, so leaving this enabled is also
445
+ * correct for an addon that picks its flavor at runtime.
434
446
  *
435
447
  * Enabling this emits that bootstrap in the node, browser and deferred
436
448
  * (workerd) loaders, and declares `@napi-rs/async-runtime` in the
@@ -1131,4 +1143,4 @@ export declare function createVersionCommand(args: string[]): VersionCommand;
1131
1143
  export declare function createNewCommand(args: string[]): NewCommand;
1132
1144
  //#endregion
1133
1145
  export type { GenerateTypeDefOptions, WriteJsBindingOptions };
1134
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5jdHMiLCJuYW1lcyI6WyJCdWlsZE9wdGlvbnMiLCJSYXdCdWlsZE9wdGlvbnMiLCJSYXdOZXdPcHRpb25zIiwidmVyc2lvbiIsInZlcnNpb24iXSwic291cmNlcyI6WyIuLi9zcmMvZGVmL2FydGlmYWN0cy5kLnRzIiwiLi4vc3JjL2FwaS9hcnRpZmFjdHMuZC50cyIsIi4uL3NyYy9kZWYvYnVpbGQuZC50cyIsIi4uL3NyYy91dGlscy9sb2cuZC50cyIsIi4uL3NyYy91dGlscy90YXJnZXQuZC50cyIsIi4uL3NyYy91dGlscy9jb25maWcuZC50cyIsIi4uL3NyYy9hcGkvYnVpbGQuZC50cyIsIi4uL3NyYy9kZWYvY3JlYXRlLW5wbS1kaXJzLmQudHMiLCIuLi9zcmMvYXBpL2NyZWF0ZS1ucG0tZGlycy5kLnRzIiwiLi4vc3JjL2RlZi9uZXcuZC50cyIsIi4uL3NyYy9hcGkvbmV3LmQudHMiLCIuLi9zcmMvZGVmL3ByZS1wdWJsaXNoLmQudHMiLCIuLi9zcmMvYXBpL3ByZS1wdWJsaXNoLmQudHMiLCIuLi9zcmMvZGVmL3JlbmFtZS5kLnRzIiwiLi4vc3JjL2FwaS9yZW5hbWUuZC50cyIsIi4uL3NyYy9kZWYvdW5pdmVyc2FsaXplLmQudHMiLCIuLi9zcmMvYXBpL3VuaXZlcnNhbGl6ZS5kLnRzIiwiLi4vc3JjL2RlZi92ZXJzaW9uLmQudHMiLCIuLi9zcmMvYXBpL3ZlcnNpb24uZC50cyIsIi4uL3NyYy9jb21tYW5kcy9hcnRpZmFjdHMuZC50cyIsIi4uL3NyYy9jb21tYW5kcy9idWlsZC5kLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS1ucG0tZGlycy5kLnRzIiwiLi4vc3JjL2NvbW1hbmRzL25ldy5kLnRzIiwiLi4vc3JjL2NvbW1hbmRzL3ByZS1wdWJsaXNoLmQudHMiLCIuLi9zcmMvY29tbWFuZHMvcmVuYW1lLmQudHMiLCIuLi9zcmMvY29tbWFuZHMvdW5pdmVyc2FsaXplLmQudHMiLCIuLi9zcmMvY29tbWFuZHMvdmVyc2lvbi5kLnRzIiwiLi4vc3JjL2luZGV4LmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlQXJ0aWZhY3RzQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG91dHB1dERpcjogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgIGJ1aWxkT3V0cHV0RGlyPzogc3RyaW5nO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICBjd2Q6IHN0cmluZztcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICAgICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgICAgIG5wbURpcjogc3RyaW5nO1xuICAgICAgICBidWlsZE91dHB1dERpcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIH07XG59XG4vKipcbiAqIENvcHkgYXJ0aWZhY3RzIGZyb20gR2l0aHViIEFjdGlvbnMgaW50byBucG0gcGFja2FnZXMgYW5kIHJlYWR5IHRvIHB1Ymxpc2hcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcnRpZmFjdHNPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIGFsbCBidWlsdCBgLm5vZGVgIGZpbGVzIHB1dCwgc2FtZSBhcyBgLS1vdXRwdXQtZGlyYCBvZiBidWlsZCBjb21tYW5kXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnLi9hcnRpZmFjdHMnXG4gICAgICovXG4gICAgb3V0cHV0RGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gdGhlIGZvbGRlciB3aGVyZSB0aGUgbnBtIHBhY2thZ2VzIHB1dFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ25wbSdcbiAgICAgKi9cbiAgICBucG1EaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgYnVpbGQgb3V0cHV0IGRpciwgb25seSBuZWVkZWQgd2hlbiB0YXJnZXRzIGNvbnRhaW4gYSBXQVNJIHRhcmdldFxuICAgICAqL1xuICAgIGJ1aWxkT3V0cHV0RGlyPzogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0QXJ0aWZhY3RzT3B0aW9ucyhvcHRpb25zOiBBcnRpZmFjdHNPcHRpb25zKToge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG91dHB1dERpcjogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gdGhlIGJ1aWxkIG91dHB1dCBkaXIsIG9ubHkgbmVlZGVkIHdoZW4gdGFyZ2V0cyBjb250YWluIGEgV0FTSSB0YXJnZXRcbiAgICAgKi9cbiAgICBidWlsZE91dHB1dERpcj86IHN0cmluZztcbn07XG4iLCJpbXBvcnQgeyB0eXBlIEFydGlmYWN0c09wdGlvbnMgfSBmcm9tICcuLi9kZWYvYXJ0aWZhY3RzLmpzJztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvbGxlY3RBcnRpZmFjdHModXNlck9wdGlvbnM6IEFydGlmYWN0c09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlQnVpbGRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIHRhcmdldD86IHN0cmluZztcbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgbWFuaWZlc3RQYXRoPzogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoPzogc3RyaW5nO1xuICAgIHRhcmdldERpcj86IHN0cmluZztcbiAgICBvdXRwdXREaXI/OiBzdHJpbmc7XG4gICAgcGxhdGZvcm0/OiBib29sZWFuO1xuICAgIGpzUGFja2FnZU5hbWU/OiBzdHJpbmc7XG4gICAgY29uc3RFbnVtPzogYm9vbGVhbjtcbiAgICBydW50aW1lU3RyaW5nRW51bT86IGJvb2xlYW47XG4gICAganNCaW5kaW5nPzogc3RyaW5nO1xuICAgIG5vSnNCaW5kaW5nPzogYm9vbGVhbjtcbiAgICBkdHM/OiBzdHJpbmc7XG4gICAgZHRzSGVhZGVyPzogc3RyaW5nO1xuICAgIG5vRHRzSGVhZGVyPzogYm9vbGVhbjtcbiAgICBkdHNDYWNoZTogYm9vbGVhbjtcbiAgICBmb3JtYXQ/OiAnZXNtJyB8ICdjb21tb25qcyc7XG4gICAgZXNtPzogYm9vbGVhbjtcbiAgICBjb21tb25qcz86IGJvb2xlYW47XG4gICAgc3RyaXA/OiBib29sZWFuO1xuICAgIHJlbGVhc2U/OiBib29sZWFuO1xuICAgIHZlcmJvc2U/OiBib29sZWFuO1xuICAgIGJpbj86IHN0cmluZztcbiAgICBwYWNrYWdlPzogc3RyaW5nO1xuICAgIHByb2ZpbGU/OiBzdHJpbmc7XG4gICAgY3Jvc3NDb21waWxlPzogYm9vbGVhbjtcbiAgICB1c2VDcm9zcz86IGJvb2xlYW47XG4gICAgdXNlTmFwaUNyb3NzPzogYm9vbGVhbjtcbiAgICB3YXRjaD86IGJvb2xlYW47XG4gICAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgICBhbGxGZWF0dXJlcz86IGJvb2xlYW47XG4gICAgbm9EZWZhdWx0RmVhdHVyZXM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgcGFyc2VkIGJ1aWxkIG9wdGlvbnMuXG4gICAgICovXG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIHRhcmdldDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBjd2Q6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbWFuaWZlc3RQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNvbmZpZ1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHRhcmdldERpcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBvdXRwdXREaXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGxhdGZvcm06IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGpzUGFja2FnZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3RFbnVtOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBydW50aW1lU3RyaW5nRW51bTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAganNCaW5kaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG5vSnNCaW5kaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBkdHM6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgZHRzSGVhZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG5vRHRzSGVhZGVyOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBkdHNDYWNoZTogYm9vbGVhbjtcbiAgICAgICAgZm9ybWF0OiBcImVzbVwiIHwgXCJjb21tb25qc1wiIHwgdW5kZWZpbmVkO1xuICAgICAgICBlc206IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGNvbW1vbmpzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBzdHJpcDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgcmVsZWFzZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgdmVyYm9zZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgYmluOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcHJvZmlsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBjcm9zc0NvbXBpbGU6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHVzZUNyb3NzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICB1c2VOYXBpQ3Jvc3M6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHdhdGNoOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBmZWF0dXJlczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgICAgIGFsbEZlYXR1cmVzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBub0RlZmF1bHRGZWF0dXJlczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICB9O1xufVxuLyoqXG4gKiBCdWlsZCB0aGUgTkFQSS1SUyBwcm9qZWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBCdWlsZCBmb3IgdGhlIHRhcmdldCB0cmlwbGUsIGJ5cGFzc2VkIHRvIGBjYXJnbyBidWlsZCAtLXRhcmdldGBcbiAgICAgKi9cbiAgICB0YXJnZXQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mIHdoZXJlIG5hcGkgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGluLCBhbGwgb3RoZXIgcGF0aHMgb3B0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhpcyBwYXRoXG4gICAgICovXG4gICAgY3dkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYENhcmdvLnRvbWxgXG4gICAgICovXG4gICAgbWFuaWZlc3RQYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYHBhY2thZ2UuanNvbmBcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogRGlyZWN0b3J5IGZvciBhbGwgY3JhdGUgZ2VuZXJhdGVkIGFydGlmYWN0cywgc2VlIGBjYXJnbyBidWlsZCAtLXRhcmdldC1kaXJgXG4gICAgICovXG4gICAgdGFyZ2V0RGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gd2hlcmUgYWxsIHRoZSBidWlsdCBmaWxlcyB3b3VsZCBiZSBwdXQuIERlZmF1bHQgdG8gdGhlIGNyYXRlIGZvbGRlclxuICAgICAqL1xuICAgIG91dHB1dERpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBZGQgcGxhdGZvcm0gdHJpcGxlIHRvIHRoZSBnZW5lcmF0ZWQgbm9kZWpzIGJpbmRpbmcgZmlsZSwgZWc6IGBbbmFtZV0ubGludXgteDY0LWdudS5ub2RlYFxuICAgICAqL1xuICAgIHBsYXRmb3JtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYWNrYWdlIG5hbWUgaW4gZ2VuZXJhdGVkIGpzIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnXG4gICAgICovXG4gICAganNQYWNrYWdlTmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGdlbmVyYXRlIGNvbnN0IGVudW0gZm9yIHR5cGVzY3JpcHQgYmluZGluZ3NcbiAgICAgKi9cbiAgICBjb25zdEVudW0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEVtaXQgYCNbbmFwaShzdHJpbmdfZW51bSldYCBlbnVtcyBhcyBydW50aW1lIGVudW1zIChgZXhwb3J0IGRlY2xhcmUgZW51bWApIHVuZGVyIGAtLW5vLWNvbnN0LWVudW1gLiBEZWZhdWx0OiB0eXBlLW9ubHkgdW5pb24uXG4gICAgICovXG4gICAgcnVudGltZVN0cmluZ0VudW0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhdGggYW5kIGZpbGVuYW1lIG9mIGdlbmVyYXRlZCBKUyBiaW5kaW5nIGZpbGUuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZy4gUmVsYXRpdmUgdG8gYC0tb3V0cHV0LWRpcmAuXG4gICAgICovXG4gICAganNCaW5kaW5nPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBKUyBiaW5kaW5nIGZpbGUuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZy5cbiAgICAgKi9cbiAgICBub0pzQmluZGluZz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUGF0aCBhbmQgZmlsZW5hbWUgb2YgZ2VuZXJhdGVkIHR5cGUgZGVmIGZpbGUuIFJlbGF0aXZlIHRvIGAtLW91dHB1dC1kaXJgXG4gICAgICovXG4gICAgZHRzPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEN1c3RvbSBmaWxlIGhlYWRlciBmb3IgZ2VuZXJhdGVkIHR5cGUgZGVmIGZpbGUuIE9ubHkgd29ya3Mgd2hlbiBgdHlwZWRlZmAgZmVhdHVyZSBlbmFibGVkLlxuICAgICAqL1xuICAgIGR0c0hlYWRlcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGRlZmF1bHQgZmlsZSBoZWFkZXIgZm9yIGdlbmVyYXRlZCB0eXBlIGRlZiBmaWxlLiBPbmx5IHdvcmtzIHdoZW4gYHR5cGVkZWZgIGZlYXR1cmUgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBub0R0c0hlYWRlcj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBlbmFibGUgdGhlIGR0cyBjYWNoZSwgZGVmYXVsdCB0byB0cnVlXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZHRzQ2FjaGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSBtb2R1bGUgZm9ybWF0IG9mIHRoZSBnZW5lcmF0ZWQgSlMgYmluZGluZyBmaWxlLiBPbmx5IHdvcmtzIHdpdGggYC0tcGxhdGZvcm1gIGZsYWcuIERlZmF1bHRzIHRvIGBjb21tb25qc2AuXG4gICAgICovXG4gICAgZm9ybWF0PzogJ2VzbScgfCAnY29tbW9uanMnO1xuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBgLS1mb3JtYXQgZXNtYC5cbiAgICAgKi9cbiAgICBlc20/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBgLS1mb3JtYXQgY29tbW9uanNgLlxuICAgICAqL1xuICAgIGNvbW1vbmpzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHN0cmlwIHRoZSBsaWJyYXJ5IHRvIGFjaGlldmUgdGhlIG1pbmltdW0gZmlsZSBzaXplXG4gICAgICovXG4gICAgc3RyaXA/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGluIHJlbGVhc2UgbW9kZVxuICAgICAqL1xuICAgIHJlbGVhc2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFZlcmJvc2VseSBsb2cgYnVpbGQgY29tbWFuZCB0cmFjZVxuICAgICAqL1xuICAgIHZlcmJvc2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIG9ubHkgdGhlIHNwZWNpZmllZCBiaW5hcnlcbiAgICAgKi9cbiAgICBiaW4/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQnVpbGQgdGhlIHNwZWNpZmllZCBsaWJyYXJ5IG9yIHRoZSBvbmUgYXQgY3dkXG4gICAgICovXG4gICAgcGFja2FnZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCdWlsZCBhcnRpZmFjdHMgd2l0aCB0aGUgc3BlY2lmaWVkIHByb2ZpbGVcbiAgICAgKi9cbiAgICBwcm9maWxlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFtleHBlcmltZW50YWxdIGNyb3NzIGNvbXBpbGUgYnkgcmVwbGFjaW5nIHRoZSBjYXJnbyBzdWJjb21tYW5kOiBXaW5kb3dzIE1TVkMgdGFyZ2V0cyBmcm9tIGEgbm9uLVdpbmRvd3MgaG9zdCBidWlsZCB3aXRoIGBjYXJnby14d2luYCAoYHdpbmRvd3MtZ251YCB0YXJnZXRzIGFyZSByZWplY3RlZCwgYGNhcmdvLXh3aW5gIGNhbm5vdCBoYW5kbGUgdGhlbSksIG5vbi1XaW5kb3dzIHRhcmdldHMgYnVpbGQgd2l0aCBgY2FyZ28temlnYnVpbGRgIChyZXF1aXJlcyBgemlnYCBvbiBQQVRIKS4gVGhlIHNlbGVjdGVkIHN1YmNvbW1hbmQgaXMgYXV0by1pbnN0YWxsZWQgb24gZmlyc3QgdXNlLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS11c2UtY3Jvc3NgLCBgLS11c2UtbmFwaS1jcm9zc2Agb3IgYC0td2F0Y2hgXG4gICAgICovXG4gICAgY3Jvc3NDb21waWxlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBbZXhwZXJpbWVudGFsXSBub3QgcmVjb21tZW5kZWQsIHByZWZlciBgLS1jcm9zcy1jb21waWxlYCBvciBgLS11c2UtbmFwaS1jcm9zc2A6IGJ1aWxkIGluIGEgRG9ja2VyIG9yIFBvZG1hbiBjb250YWluZXIgd2l0aCBbY3Jvc3NdKGh0dHBzOi8vZ2l0aHViLmNvbS9jcm9zcy1ycy9jcm9zcyksIHdoaWNoIG11c3QgYmUgaW5zdGFsbGVkIG1hbnVhbGx5IGFuZCBuZWVkcyBhIHJ1bm5pbmcgY29udGFpbmVyIGVuZ2luZS4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tY3Jvc3MtY29tcGlsZWAsIGAtLXVzZS1uYXBpLWNyb3NzYCBvciBgLS13YXRjaGBcbiAgICAgKi9cbiAgICB1c2VDcm9zcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogW2V4cGVyaW1lbnRhbF0gZG93bmxvYWQgYSBwcmVidWlsdCBnY2MgY3Jvc3MgdG9vbGNoYWluIGZyb20gYEBuYXBpLXJzL2Nyb3NzLXRvb2xjaGFpbmAgKGdsaWJjIDIuMTcpIGFuZCBzZXQgbGlua2VyIGFuZCBDIGNvbXBpbGVyIGVudmlyb25tZW50IHZhcmlhYmxlcy4gTGludXggZ2xpYmMgdGFyZ2V0cyBvbmx5ICh4NjQsIGFybTY0LCBhcm12NywgcHBjNjRsZSwgczM5MHgpIG9uIGEgTGludXggeDY0IG9yIGFybTY0IGhvc3QsIGFueSBvdGhlciB0YXJnZXQgb3IgaG9zdCBlcnJvcnMuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAtLWNyb3NzLWNvbXBpbGVgIG9yIGAtLXVzZS1jcm9zc2BcbiAgICAgKi9cbiAgICB1c2VOYXBpQ3Jvc3M/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIHdhdGNoIHRoZSBjcmF0ZSBjaGFuZ2VzIGFuZCBidWlsZCBjb250aW51b3VzbHkgd2l0aCBgY2FyZ28td2F0Y2hgIGNyYXRlc1xuICAgICAqL1xuICAgIHdhdGNoPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBTcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBmZWF0dXJlcyB0byBhY3RpdmF0ZVxuICAgICAqL1xuICAgIGZlYXR1cmVzPzogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogQWN0aXZhdGUgYWxsIGF2YWlsYWJsZSBmZWF0dXJlc1xuICAgICAqL1xuICAgIGFsbEZlYXR1cmVzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBEbyBub3QgYWN0aXZhdGUgdGhlIGBkZWZhdWx0YCBmZWF0dXJlXG4gICAgICovXG4gICAgbm9EZWZhdWx0RmVhdHVyZXM/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0QnVpbGRPcHRpb25zKG9wdGlvbnM6IEJ1aWxkT3B0aW9ucyk6IHtcbiAgICAvKipcbiAgICAgKiBCdWlsZCBmb3IgdGhlIHRhcmdldCB0cmlwbGUsIGJ5cGFzc2VkIHRvIGBjYXJnbyBidWlsZCAtLXRhcmdldGBcbiAgICAgKi9cbiAgICB0YXJnZXQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mIHdoZXJlIG5hcGkgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGluLCBhbGwgb3RoZXIgcGF0aHMgb3B0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhpcyBwYXRoXG4gICAgICovXG4gICAgY3dkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYENhcmdvLnRvbWxgXG4gICAgICovXG4gICAgbWFuaWZlc3RQYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYHBhY2thZ2UuanNvbmBcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogRGlyZWN0b3J5IGZvciBhbGwgY3JhdGUgZ2VuZXJhdGVkIGFydGlmYWN0cywgc2VlIGBjYXJnbyBidWlsZCAtLXRhcmdldC1kaXJgXG4gICAgICovXG4gICAgdGFyZ2V0RGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gd2hlcmUgYWxsIHRoZSBidWlsdCBmaWxlcyB3b3VsZCBiZSBwdXQuIERlZmF1bHQgdG8gdGhlIGNyYXRlIGZvbGRlclxuICAgICAqL1xuICAgIG91dHB1dERpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBZGQgcGxhdGZvcm0gdHJpcGxlIHRvIHRoZSBnZW5lcmF0ZWQgbm9kZWpzIGJpbmRpbmcgZmlsZSwgZWc6IGBbbmFtZV0ubGludXgteDY0LWdudS5ub2RlYFxuICAgICAqL1xuICAgIHBsYXRmb3JtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYWNrYWdlIG5hbWUgaW4gZ2VuZXJhdGVkIGpzIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnXG4gICAgICovXG4gICAganNQYWNrYWdlTmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGdlbmVyYXRlIGNvbnN0IGVudW0gZm9yIHR5cGVzY3JpcHQgYmluZGluZ3NcbiAgICAgKi9cbiAgICBjb25zdEVudW0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEVtaXQgYCNbbmFwaShzdHJpbmdfZW51bSldYCBlbnVtcyBhcyBydW50aW1lIGVudW1zIChgZXhwb3J0IGRlY2xhcmUgZW51bWApIHVuZGVyIGAtLW5vLWNvbnN0LWVudW1gLiBEZWZhdWx0OiB0eXBlLW9ubHkgdW5pb24uXG4gICAgICovXG4gICAgcnVudGltZVN0cmluZ0VudW0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhdGggYW5kIGZpbGVuYW1lIG9mIGdlbmVyYXRlZCBKUyBiaW5kaW5nIGZpbGUuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZy4gUmVsYXRpdmUgdG8gYC0tb3V0cHV0LWRpcmAuXG4gICAgICovXG4gICAganNCaW5kaW5nPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBKUyBiaW5kaW5nIGZpbGUuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZy5cbiAgICAgKi9cbiAgICBub0pzQmluZGluZz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUGF0aCBhbmQgZmlsZW5hbWUgb2YgZ2VuZXJhdGVkIHR5cGUgZGVmIGZpbGUuIFJlbGF0aXZlIHRvIGAtLW91dHB1dC1kaXJgXG4gICAgICovXG4gICAgZHRzPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEN1c3RvbSBmaWxlIGhlYWRlciBmb3IgZ2VuZXJhdGVkIHR5cGUgZGVmIGZpbGUuIE9ubHkgd29ya3Mgd2hlbiBgdHlwZWRlZmAgZmVhdHVyZSBlbmFibGVkLlxuICAgICAqL1xuICAgIGR0c0hlYWRlcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGRlZmF1bHQgZmlsZSBoZWFkZXIgZm9yIGdlbmVyYXRlZCB0eXBlIGRlZiBmaWxlLiBPbmx5IHdvcmtzIHdoZW4gYHR5cGVkZWZgIGZlYXR1cmUgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBub0R0c0hlYWRlcj86IGJvb2xlYW47XG4gICAgZHRzQ2FjaGU6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIG1vZHVsZSBmb3JtYXQgb2YgdGhlIGdlbmVyYXRlZCBKUyBiaW5kaW5nIGZpbGUuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZy4gRGVmYXVsdHMgdG8gYGNvbW1vbmpzYC5cbiAgICAgKi9cbiAgICBmb3JtYXQ/OiBcImVzbVwiIHwgXCJjb21tb25qc1wiO1xuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBgLS1mb3JtYXQgZXNtYC5cbiAgICAgKi9cbiAgICBlc20/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBgLS1mb3JtYXQgY29tbW9uanNgLlxuICAgICAqL1xuICAgIGNvbW1vbmpzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHN0cmlwIHRoZSBsaWJyYXJ5IHRvIGFjaGlldmUgdGhlIG1pbmltdW0gZmlsZSBzaXplXG4gICAgICovXG4gICAgc3RyaXA/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGluIHJlbGVhc2UgbW9kZVxuICAgICAqL1xuICAgIHJlbGVhc2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFZlcmJvc2VseSBsb2cgYnVpbGQgY29tbWFuZCB0cmFjZVxuICAgICAqL1xuICAgIHZlcmJvc2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIG9ubHkgdGhlIHNwZWNpZmllZCBiaW5hcnlcbiAgICAgKi9cbiAgICBiaW4/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQnVpbGQgdGhlIHNwZWNpZmllZCBsaWJyYXJ5IG9yIHRoZSBvbmUgYXQgY3dkXG4gICAgICovXG4gICAgcGFja2FnZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCdWlsZCBhcnRpZmFjdHMgd2l0aCB0aGUgc3BlY2lmaWVkIHByb2ZpbGVcbiAgICAgKi9cbiAgICBwcm9maWxlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFtleHBlcmltZW50YWxdIGNyb3NzIGNvbXBpbGUgYnkgcmVwbGFjaW5nIHRoZSBjYXJnbyBzdWJjb21tYW5kOiBXaW5kb3dzIE1TVkMgdGFyZ2V0cyBmcm9tIGEgbm9uLVdpbmRvd3MgaG9zdCBidWlsZCB3aXRoIGBjYXJnby14d2luYCAoYHdpbmRvd3MtZ251YCB0YXJnZXRzIGFyZSByZWplY3RlZCwgYGNhcmdvLXh3aW5gIGNhbm5vdCBoYW5kbGUgdGhlbSksIG5vbi1XaW5kb3dzIHRhcmdldHMgYnVpbGQgd2l0aCBgY2FyZ28temlnYnVpbGRgIChyZXF1aXJlcyBgemlnYCBvbiBQQVRIKS4gVGhlIHNlbGVjdGVkIHN1YmNvbW1hbmQgaXMgYXV0by1pbnN0YWxsZWQgb24gZmlyc3QgdXNlLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS11c2UtY3Jvc3NgLCBgLS11c2UtbmFwaS1jcm9zc2Agb3IgYC0td2F0Y2hgXG4gICAgICovXG4gICAgY3Jvc3NDb21waWxlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBbZXhwZXJpbWVudGFsXSBub3QgcmVjb21tZW5kZWQsIHByZWZlciBgLS1jcm9zcy1jb21waWxlYCBvciBgLS11c2UtbmFwaS1jcm9zc2A6IGJ1aWxkIGluIGEgRG9ja2VyIG9yIFBvZG1hbiBjb250YWluZXIgd2l0aCBbY3Jvc3NdKGh0dHBzOi8vZ2l0aHViLmNvbS9jcm9zcy1ycy9jcm9zcyksIHdoaWNoIG11c3QgYmUgaW5zdGFsbGVkIG1hbnVhbGx5IGFuZCBuZWVkcyBhIHJ1bm5pbmcgY29udGFpbmVyIGVuZ2luZS4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tY3Jvc3MtY29tcGlsZWAsIGAtLXVzZS1uYXBpLWNyb3NzYCBvciBgLS13YXRjaGBcbiAgICAgKi9cbiAgICB1c2VDcm9zcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogW2V4cGVyaW1lbnRhbF0gZG93bmxvYWQgYSBwcmVidWlsdCBnY2MgY3Jvc3MgdG9vbGNoYWluIGZyb20gYEBuYXBpLXJzL2Nyb3NzLXRvb2xjaGFpbmAgKGdsaWJjIDIuMTcpIGFuZCBzZXQgbGlua2VyIGFuZCBDIGNvbXBpbGVyIGVudmlyb25tZW50IHZhcmlhYmxlcy4gTGludXggZ2xpYmMgdGFyZ2V0cyBvbmx5ICh4NjQsIGFybTY0LCBhcm12NywgcHBjNjRsZSwgczM5MHgpIG9uIGEgTGludXggeDY0IG9yIGFybTY0IGhvc3QsIGFueSBvdGhlciB0YXJnZXQgb3IgaG9zdCBlcnJvcnMuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAtLWNyb3NzLWNvbXBpbGVgIG9yIGAtLXVzZS1jcm9zc2BcbiAgICAgKi9cbiAgICB1c2VOYXBpQ3Jvc3M/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIHdhdGNoIHRoZSBjcmF0ZSBjaGFuZ2VzIGFuZCBidWlsZCBjb250aW51b3VzbHkgd2l0aCBgY2FyZ28td2F0Y2hgIGNyYXRlc1xuICAgICAqL1xuICAgIHdhdGNoPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBTcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBmZWF0dXJlcyB0byBhY3RpdmF0ZVxuICAgICAqL1xuICAgIGZlYXR1cmVzPzogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogQWN0aXZhdGUgYWxsIGF2YWlsYWJsZSBmZWF0dXJlc1xuICAgICAqL1xuICAgIGFsbEZlYXR1cmVzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBEbyBub3QgYWN0aXZhdGUgdGhlIGBkZWZhdWx0YCBmZWF0dXJlXG4gICAgICovXG4gICAgbm9EZWZhdWx0RmVhdHVyZXM/OiBib29sZWFuO1xufTtcbiIsImRlY2xhcmUgbW9kdWxlICdvYnVnJyB7XG4gICAgaW50ZXJmYWNlIERlYnVnZ2VyIHtcbiAgICAgICAgaW5mbzogdHlwZW9mIGNvbnNvbGUuZXJyb3I7XG4gICAgICAgIHdhcm46IHR5cGVvZiBjb25zb2xlLmVycm9yO1xuICAgICAgICBlcnJvcjogdHlwZW9mIGNvbnNvbGUuZXJyb3I7XG4gICAgfVxufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgZGVidWdGYWN0b3J5OiAobmFtZXNwYWNlOiBzdHJpbmcpID0+IGltcG9ydChcIm9idWdcIikuRGVidWdnZXI7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBkZWJ1ZzogaW1wb3J0KFwib2J1Z1wiKS5EZWJ1Z2dlcjtcbiIsImV4cG9ydCB0eXBlIFBsYXRmb3JtID0gTm9kZUpTLlBsYXRmb3JtIHwgJ3dhc20nIHwgJ3dhc2knIHwgJ29wZW5oYXJtb255JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFVOSVZFUlNBTF9UQVJHRVRTOiB7XG4gICAgcmVhZG9ubHkgJ3VuaXZlcnNhbC1hcHBsZS1kYXJ3aW4nOiByZWFkb25seSBbXCJhYXJjaDY0LWFwcGxlLWRhcndpblwiLCBcIng4Nl82NC1hcHBsZS1kYXJ3aW5cIl07XG59O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgQVZBSUxBQkxFX1RBUkdFVFM6IHJlYWRvbmx5IFtcImFhcmNoNjQtYXBwbGUtZGFyd2luXCIsIFwiYWFyY2g2NC1saW51eC1hbmRyb2lkXCIsIFwiYWFyY2g2NC11bmtub3duLWxpbnV4LWdudVwiLCBcImFhcmNoNjQtdW5rbm93bi1saW51eC1tdXNsXCIsIFwiYWFyY2g2NC11bmtub3duLWxpbnV4LW9ob3NcIiwgXCJhYXJjaDY0LXBjLXdpbmRvd3MtbXN2Y1wiLCBcIng4Nl82NC1hcHBsZS1kYXJ3aW5cIiwgXCJ4ODZfNjQtcGMtd2luZG93cy1tc3ZjXCIsIFwieDg2XzY0LXBjLXdpbmRvd3MtZ251XCIsIFwieDg2XzY0LXVua25vd24tbGludXgtZ251XCIsIFwieDg2XzY0LXVua25vd24tbGludXgtbXVzbFwiLCBcIng4Nl82NC11bmtub3duLWxpbnV4LW9ob3NcIiwgXCJ4ODZfNjQtdW5rbm93bi1mcmVlYnNkXCIsIFwiaTY4Ni1wYy13aW5kb3dzLW1zdmNcIiwgXCJhcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZlwiLCBcImFybXY3LXVua25vd24tbGludXgtbXVzbGVhYmloZlwiLCBcImFybXY3LWxpbnV4LWFuZHJvaWRlYWJpXCIsIFwidW5pdmVyc2FsLWFwcGxlLWRhcndpblwiLCBcImxvb25nYXJjaDY0LXVua25vd24tbGludXgtZ251XCIsIFwicmlzY3Y2NGdjLXVua25vd24tbGludXgtZ251XCIsIFwicG93ZXJwYzY0bGUtdW5rbm93bi1saW51eC1nbnVcIiwgXCJzMzkweC11bmtub3duLWxpbnV4LWdudVwiLCBcIndhc20zMi13YXNpcDFcIiwgXCJ3YXNtMzItd2FzaXAxLXRocmVhZHNcIl07XG5leHBvcnQgdHlwZSBUYXJnZXRUcmlwbGUgPSAodHlwZW9mIEFWQUlMQUJMRV9UQVJHRVRTKVtudW1iZXJdO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgREVGQVVMVF9UQVJHRVRTOiByZWFkb25seSBbXCJ4ODZfNjQtYXBwbGUtZGFyd2luXCIsIFwiYWFyY2g2NC1hcHBsZS1kYXJ3aW5cIiwgXCJ4ODZfNjQtcGMtd2luZG93cy1tc3ZjXCIsIFwieDg2XzY0LXVua25vd24tbGludXgtZ251XCJdO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgVEFSR0VUX0xJTktFUjogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbnR5cGUgTm9kZUpTQXJjaCA9ICdhcm0nIHwgJ2FybTY0JyB8ICdpYTMyJyB8ICdsb29uZzY0JyB8ICdtaXBzJyB8ICdtaXBzZWwnIHwgJ3BwYycgfCAncHBjNjQnIHwgJ3Jpc2N2NjQnIHwgJ3MzOTAnIHwgJ3MzOTB4JyB8ICd4MzInIHwgJ3g2NCcgfCAndW5pdmVyc2FsJyB8ICd3YXNtMzInO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgTm9kZUFyY2hUb0NwdTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFVuaUFyY2hzQnlQbGF0Zm9ybTogUGFydGlhbDxSZWNvcmQ8UGxhdGZvcm0sIE5vZGVKU0FyY2hbXT4+O1xuZXhwb3J0IGludGVyZmFjZSBUYXJnZXQge1xuICAgIHRyaXBsZTogc3RyaW5nO1xuICAgIHBsYXRmb3JtQXJjaEFCSTogc3RyaW5nO1xuICAgIHBsYXRmb3JtOiBQbGF0Zm9ybTtcbiAgICBhcmNoOiBOb2RlSlNBcmNoO1xuICAgIGFiaTogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCB0eXBlIFdhc2lGbGF2b3IgPSAnc2luZ2xlJyB8ICd0aHJlYWRzJztcbmV4cG9ydCBpbnRlcmZhY2UgV2FzaVRhcmdldCB7XG4gICAgY2Fub25pY2FsVHJpcGxlOiBzdHJpbmc7XG4gICAgZmxhdm9yOiBXYXNpRmxhdm9yO1xuICAgIHBsYXRmb3JtQXJjaEFCSTogc3RyaW5nO1xufVxuLyoqXG4gKiBSZXNvbHZlIGhpc3RvcmljYWwgV0FTSSBzcGVsbGluZ3MgdG8gb25lIGJ1aWxkIHRhcmdldCBhbmQgb25lIGFydGlmYWN0XG4gKiBpZGVudGl0eS4gYHdhc20zMi13YXNpYCBoaXN0b3JpY2FsbHkgcHJvZHVjZWQgdGhlIHRocmVhZGVkIHBhY2thZ2UsIHNvIGl0XG4gKiBtdXN0IG5ldmVyIGJlIGluZmVycmVkIGFzIHRocmVhZGxlc3MgbWVyZWx5IGJlY2F1c2UgaXRzIG5hbWUgbGFja3MgdGhlXG4gKiBgLXRocmVhZHNgIHN1ZmZpeC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZ2V0V2FzaVRhcmdldCh0YXJnZXQ6IHN0cmluZyB8IFBpY2s8VGFyZ2V0LCAndHJpcGxlJz4pOiBXYXNpVGFyZ2V0IHwgdW5kZWZpbmVkO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gd2FzaVRhcmdldEhhc1RocmVhZHModGFyZ2V0OiBzdHJpbmcgfCBQaWNrPFRhcmdldCwgJ3RyaXBsZSc+KTogYm9vbGVhbjtcbi8qKlxuICogRGV0ZWN0IHRoZSBtYWpvciB2ZXJzaW9uIG9mIGEgd2FzaS1zZGsgaW5zdGFsbGF0aW9uLlxuICpcbiAqIHdhc2ktbGliYyBkcm9wcGVkIHRoZSB1bnVzZWQgYGludCBvcGAgcGFyYW1ldGVyIGZyb21cbiAqIGBfX3dhc2lsaWJjX2Z1dGV4X3dhaXRfYXRvbWljX3dhaXRgIGFuZCBgX193YXNpbGliY19mdXRleF93YWl0X21heWJlX2J1c3lgLFxuICogYW5kIHdhc2ktc2RrIDM0IGlzIHRoZSBmaXJzdCByZWxlYXNlIHRoYXQgc2hpcHMgdGhlIDMtYXJndW1lbnQgc2lnbmF0dXJlLlxuICogU3RhdGljIGFyY2hpdmVzIGNvbXBpbGVkIGFnYWluc3QgdGhlIHR3byBzaWduYXR1cmVzIGNhbm5vdCBiZSBtaXhlZCwgc28gdGhlXG4gKiBlbW5hcGkgYXJjaGl2ZXMgaGF2ZSB0byBiZSBwaWNrZWQgYnkgd2FzaS1zZGsgdmVyc2lvbiwgbm90IGJ5IHRhcmdldCB0cmlwbGVcbiAqIGFsb25lLlxuICpcbiAqIGA8d2FzaVNka1BhdGg+L1ZFUlNJT05gIGlzIHRoZSBwcmltYXJ5IHNpZ25hbDogZXZlcnkgcmVsZWFzZSBzaGlwcyBpdCBhbmRcbiAqIGl0cyBmaXJzdCBsaW5lIGlzIHRoZSB2ZXJzaW9uIChgMjcuMGAsIGAzMy4wK21gLCBgMzQuMGAsIC4uLikuIFRoZVxuICogYHdhc2kvdmVyc2lvbi5oYCBoZWFkZXIgY2FycnlpbmcgYF9fd2FzaV9zZGtfbWFqb3JfX2Agb25seSBhcHBlYXJzIGZyb21cbiAqIHdhc2ktc2RrIDMwIG9ud2FyZHMsIHNvIGl0IHN0YXlzIGEgZmFsbGJhY2sgZm9yIHRyZWVzIHdpdGhvdXQgYSBgVkVSU0lPTmAuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgd2hlbiBuZWl0aGVyIHNpZ25hbCBpcyByZWFkYWJsZSBvciBwYXJzZWFibGUuIERldGVjdGlvbiBtdXN0XG4gKiBuZXZlciB0aHJvdzogYW4gdW5rbm93biB3YXNpLXNkayBkZWdyYWRlcyB0byB0aGUgbGVnYWN5IGFyY2hpdmVzIGluc3RlYWQgb2ZcbiAqIGZhaWxpbmcgdGhlIGJ1aWxkLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB3YXNpU2RrTWFqb3JWZXJzaW9uKHdhc2lTZGtQYXRoOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsO1xuLyoqXG4gKiBQYXRoIHRvIHRoZSB3YXNpLWxpYmMgdGhhdCBjYXJnbyBsaW5rcyB3aGVuIG5vIHdhc2ktc2RrIGlzIGNvbmZpZ3VyZWQuXG4gKlxuICogV2l0aG91dCBgV0FTSV9TREtfUEFUSGAgdGhlIHRhcmdldCBsaW5rcyB0aHJvdWdoIGBydXN0LWxsZGAgYWdhaW5zdCB0aGVcbiAqIHdhc2ktbGliYyBidW5kbGVkIHdpdGggdGhlIFJ1c3Qgc3RhbmRhcmQgbGlicmFyeSwgc28gdGhhdCBjb3B5IOKAlCBub3QgYVxuICogd2FzaS1zZGsg4oCUIGRlY2lkZXMgdGhlIGZ1dGV4IEFCSS5cbiAqXG4gKiBgY3dkYCBtdXN0IGJlIHRoZSBkaXJlY3RvcnkgQ2FyZ28gaXMgc3Bhd25lZCBpbiwgYmVjYXVzZSB0aGF0IGlzIHdoYXRcbiAqIHNlbGVjdHMgdGhlIHRvb2xjaGFpbi5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCB3aGVuIGBydXN0Y2AgY2Fubm90IGJlIHF1ZXJpZWQgb3IgdGhlIHRhcmdldCBpcyBub3RcbiAqIGluc3RhbGxlZC4gTmV2ZXIgdGhyb3dzOiBhbiB1bmRldGVjdGFibGUgc3lzcm9vdCBkZWdyYWRlcyB0byB0aGUgbGVnYWN5XG4gKiBhcmNoaXZlcy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcnVzdEJ1bmRsZWRXYXNpTGliYyh3YXNpVGFyZ2V0OiBzdHJpbmcsIGN3ZD86IHN0cmluZyk6IHN0cmluZyB8IG51bGw7XG4vKipcbiAqIFdoZXRoZXIgYSB3YXNpLWxpYmMgYXJjaGl2ZSBjYXJyaWVzIHRoZSAzLWFyZ3VtZW50IGZ1dGV4IEFCSS5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCB3aGVuIHRoZSBhcmNoaXZlIGNhbm5vdCBiZSByZWFkLCBzbyBjYWxsZXJzIGNhbiB0ZWxsXG4gKiBcImRlZmluaXRlbHkgdGhlIGxlZ2FjeSBBQklcIiBhcGFydCBmcm9tIFwiY291bGQgbm90IHRlbGxcIi5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gd2FzaUxpYmNIYXNOZXdGdXRleEFiaShsaWJjQXJjaGl2ZVBhdGg6IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHwgbnVsbDtcbi8qKlxuICogQSB0cmlwbGUgaXMgYSBzcGVjaWZpYyBmb3JtYXQgZm9yIHNwZWNpZnlpbmcgYSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuICogVHJpcGxlcyBtYXkgYmUgcmVmZXJyZWQgdG8gYXMgYSB0YXJnZXQgdHJpcGxlIHdoaWNoIGlzIHRoZSBhcmNoaXRlY3R1cmUgZm9yIHRoZSBhcnRpZmFjdCBwcm9kdWNlZCwgYW5kIHRoZSBob3N0IHRyaXBsZSB3aGljaCBpcyB0aGUgYXJjaGl0ZWN0dXJlIHRoYXQgdGhlIGNvbXBpbGVyIGlzIHJ1bm5pbmcgb24uXG4gKiBUaGUgZ2VuZXJhbCBmb3JtYXQgb2YgdGhlIHRyaXBsZSBpcyBgPGFyY2g+PHN1Yj4tPHZlbmRvcj4tPHN5cz4tPGFiaT5gIHdoZXJlOlxuICogICAtIGBhcmNoYCA9IFRoZSBiYXNlIENQVSBhcmNoaXRlY3R1cmUsIGZvciBleGFtcGxlIGB4ODZfNjRgLCBgaTY4NmAsIGBhcm1gLCBgdGh1bWJgLCBgbWlwc2AsIGV0Yy5cbiAqICAgLSBgc3ViYCA9IFRoZSBDUFUgc3ViLWFyY2hpdGVjdHVyZSwgZm9yIGV4YW1wbGUgYGFybWAgaGFzIGB2N2AsIGB2N3NgLCBgdjV0ZWAsIGV0Yy5cbiAqICAgLSBgdmVuZG9yYCA9IFRoZSB2ZW5kb3IsIGZvciBleGFtcGxlIGB1bmtub3duYCwgYGFwcGxlYCwgYHBjYCwgYG52aWRpYWAsIGV0Yy5cbiAqICAgLSBgc3lzYCA9IFRoZSBzeXN0ZW0gbmFtZSwgZm9yIGV4YW1wbGUgYGxpbnV4YCwgYHdpbmRvd3NgLCBgZGFyd2luYCwgZXRjLiBub25lIGlzIHR5cGljYWxseSB1c2VkIGZvciBiYXJlLW1ldGFsIHdpdGhvdXQgYW4gT1MuXG4gKiAgIC0gYGFiaWAgPSBUaGUgQUJJLCBmb3IgZXhhbXBsZSBgZ251YCwgYGFuZHJvaWRgLCBgZWFiaWAsIGV0Yy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcGFyc2VUcmlwbGUocmF3VHJpcGxlOiBzdHJpbmcpOiBUYXJnZXQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXRTeXN0ZW1EZWZhdWx0VGFyZ2V0KCk6IFRhcmdldDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdldFRhcmdldExpbmtlcih0YXJnZXQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbi8qKlxuICogTG9hZGVyLWZpbGUgc3VmZml4IGZvciBhIFdBU0kgZmxhdm9yLCBkZXJpdmVkIGZyb20gaXRzIGBwbGF0Zm9ybUFyY2hBQklgOlxuICogdGhlIGxlZ2FjeSB0aHJlYWRlZCBmbGF2b3Iga2VlcHMgdGhlIGhpc3RvcmljYWwgYHdhc2lgIHN0ZW1cbiAqIChgPGJpbmFyeU5hbWU+Lndhc2kuY2pzYCwgYDxiaW5hcnlOYW1lPi53YXNpLWJyb3dzZXIuanNgKSwgd2hpbGUgZWFjaFxuICogZGlzdGluY3RseSBuYW1lZCBub24tdGhyZWFkZWQgZmxhdm9yIGRlcml2ZXMgaXRzIG93blxuICogKGA8YmluYXJ5TmFtZT4ud2FzaXAxLmNqc2AsIGA8YmluYXJ5TmFtZT4ud2FzaXAxLWJyb3dzZXIuanNgLCAuLi4pLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB3YXNpTG9hZGVyU3VmZml4KHBsYXRmb3JtQXJjaEFCSTogc3RyaW5nKTogc3RyaW5nO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdGFyZ2V0VG9FbnZWYXIodGFyZ2V0OiBzdHJpbmcpOiBzdHJpbmc7XG5leHBvcnQge307XG4iLCJpbXBvcnQgeyB0eXBlIFRhcmdldCB9IGZyb20gJy4vdGFyZ2V0LmpzJztcbmV4cG9ydCB0eXBlIFZhbHVlT2ZDb25zdEFycmF5PFQ+ID0gVFtFeGNsdWRlPGtleW9mIFQsIGtleW9mIEFycmF5PGFueT4+XTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFN1cHBvcnRlZFBhY2thZ2VNYW5hZ2VyczogcmVhZG9ubHkgW1wieWFyblwiLCBcInBucG1cIl07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBTdXBwb3J0ZWRUZXN0RnJhbWV3b3JrczogcmVhZG9ubHkgW1wiYXZhXCJdO1xuZXhwb3J0IHR5cGUgU3VwcG9ydGVkUGFja2FnZU1hbmFnZXIgPSBWYWx1ZU9mQ29uc3RBcnJheTx0eXBlb2YgU3VwcG9ydGVkUGFja2FnZU1hbmFnZXJzPjtcbmV4cG9ydCB0eXBlIFN1cHBvcnRlZFRlc3RGcmFtZXdvcmsgPSBWYWx1ZU9mQ29uc3RBcnJheTx0eXBlb2YgU3VwcG9ydGVkVGVzdEZyYW1ld29ya3M+O1xuLyoqXG4gKiBQYWNrYWdlIG1hbmFnZXJzIHRoYXQgbWF5IHB1Ymxpc2ggdGhlICoqcm9vdCoqIHBhY2thZ2UsIGRpc3Rpbmd1aXNoZWQgYnlcbiAqIHdoZXRoZXIgdGhleSByZXdyaXRlIHRoZSBtYW5pZmVzdCB3aGlsZSBwYWNraW5nIGl0LlxuICpcbiAqIGB5YXJuYCBtZWFucyB5YXJuIGJlcnJ5ICg+PSAyKTsgWWFybiBDbGFzc2ljICgxLngpIHBhY2tzIHRoZSByYXcgbWFuaWZlc3RcbiAqIGxpa2UgbnBtIGRvZXMgYW5kIGlzIHNwZWxsZWQgYHlhcm4tY2xhc3NpY2AuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFJvb3RQdWJsaXNoZXJzOiByZWFkb25seSBbXCJucG1cIiwgXCJwbnBtXCIsIFwieWFyblwiLCBcInlhcm4tY2xhc3NpY1wiXTtcbmV4cG9ydCB0eXBlIFJvb3RQdWJsaXNoZXIgPSBWYWx1ZU9mQ29uc3RBcnJheTx0eXBlb2YgUm9vdFB1Ymxpc2hlcnM+O1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTmFwaUNvbmZpZyB7XG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgYmluYXJ5IHRvIGJlIGdlbmVyYXRlZCwgZGVmYXVsdCB0byBgaW5kZXhgXG4gICAgICovXG4gICAgYmluYXJ5TmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBucG0gcGFja2FnZSwgZGVmYXVsdCB0byB0aGUgbmFtZSBvZiByb290IHBhY2thZ2UuanNvbiBuYW1lXG4gICAgICpcbiAgICAgKiBBbHdheXMgZ2l2ZW4gYEBzY29wZS9wa2dgIGFuZCBhcmNoIHN1ZmZpeCB3aWxsIGJlIGFwcGVuZGVkIGxpa2UgYEBzY29wZS9wa2ctbGludXgtZ251LXg2NGBcbiAgICAgKi9cbiAgICBwYWNrYWdlTmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBBbGwgdGFyZ2V0cyB0aGUgY3JhdGUgd2lsbCBiZSBjb21waWxlZCBmb3JcbiAgICAgKi9cbiAgICB0YXJnZXRzPzogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogVGhlIG5wbSBjbGllbnQgcHJvamVjdCB1c2VzLlxuICAgICAqL1xuICAgIG5wbUNsaWVudD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgcHVibGlzaGVzIHRoZSAqKnJvb3QqKiBwYWNrYWdlLlxuICAgICAqXG4gICAgICogYG5hcGkgcHJlLXB1Ymxpc2hgIHB1Ymxpc2hlcyBvbmx5IHRoZSBnZW5lcmF0ZWQgcGVyLXBsYXRmb3JtIHBhY2thZ2VzOyB0aGVcbiAgICAgKiByb290IHBhY2thZ2UgaXMgcGFja2VkIGFuZCBwdWJsaXNoZWQgYnkgdGhlIGNhbGxlciwgc28gdGhpcyBjYW5ub3QgYmVcbiAgICAgKiBpbmZlcnJlZCByZWxpYWJseS4gcG5wbSBhbmQgeWFybiBiZXJyeSByZXBsYWNlIGBleHBvcnRzYCB3aXRoXG4gICAgICogYHB1Ymxpc2hDb25maWcuZXhwb3J0c2Agd2hpbGUgcGFja2luZywgc28gdW5kZXIgdGhvc2UgcHVibGlzaGVyc1xuICAgICAqIGBuYXBpIHByZS1wdWJsaXNoYCB2YWxpZGF0ZXMgb25seSB0aGUgcHVibGlzaC1lZmZlY3RpdmUgZXhwb3J0IG1hcCBhbmQgdGhlXG4gICAgICogbG9jYWwgYGV4cG9ydHNgIG1heSBwb2ludCBhdCBkZXZlbG9wbWVudC1vbmx5IHNvdXJjZXMuIG5wbSBhbmQgWWFyblxuICAgICAqIENsYXNzaWMgc2hpcCBgZXhwb3J0c2AgdW50b3VjaGVkLlxuICAgICAqXG4gICAgICogVW5zZXQg4oCUIHRoZSBkZWZhdWx0IOKAlCB2YWxpZGF0ZXMgYm90aCBtYXBzLCB3aGljaCBpcyBjb3JyZWN0IGZvciBldmVyeVxuICAgICAqIHB1Ymxpc2hlciBidXQgcmVqZWN0cyBkZXZlbG9wbWVudC1vbmx5IGNvbmRpdGlvbnMgc3VjaCBhc1xuICAgICAqIGBcImRldlwiOiBcIi4vc3JjL2luZGV4LnRzXCJgLlxuICAgICAqL1xuICAgIHJvb3RQdWJsaXNoZXI/OiBSb290UHVibGlzaGVyO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZ2VuZXJhdGUgY29uc3QgZW51bSBmb3IgdHlwZXNjcmlwdCBiaW5kaW5nc1xuICAgICAqL1xuICAgIGNvbnN0RW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW1pdCBgI1tuYXBpKHN0cmluZ19lbnVtKV1gIGVudW1zIGFzIHJ1bnRpbWUgZW51bXMgKGBleHBvcnQgZGVjbGFyZSBlbnVtYCkgdW5kZXIgYC0tbm8tY29uc3QtZW51bWAuIERlZmF1bHQ6IHR5cGUtb25seSB1bmlvbi5cbiAgICAgKi9cbiAgICBydW50aW1lU3RyaW5nRW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogZHRzIGhlYWRlciBwcmVwZW5kIHRvIHRoZSBnZW5lcmF0ZWQgZHRzIGZpbGVcbiAgICAgKi9cbiAgICBkdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogZHRzIGhlYWRlciBmaWxlIHBhdGggdG8gYmUgcHJlcGVuZGVkIHRvIHRoZSBnZW5lcmF0ZWQgZHRzIGZpbGVcbiAgICAgKiBpZiBib3RoIGR0c0hlYWRlciBhbmQgZHRzSGVhZGVyRmlsZSBhcmUgcHJvdmlkZWQsIGR0c0hlYWRlckZpbGUgd2lsbCBiZSB1c2VkXG4gICAgICovXG4gICAgZHRzSGVhZGVyRmlsZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiB3YXNtIGNvbXBpbGF0aW9uIG9wdGlvbnNcbiAgICAgKi9cbiAgICB3YXNtPzoge1xuICAgICAgICAvKipcbiAgICAgICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWJBc3NlbWJseS9KYXZhU2NyaXB0X2ludGVyZmFjZS9NZW1vcnlcbiAgICAgICAgICogQGRlZmF1bHQgNDAwMCBwYWdlcyAoMjUwIE1pQiksIG9yIDEwMjQgcGFnZXMgKDY0IE1pQikgZm9yIHRoZSBkZWZlcnJlZCB3b3JrZXJkIGxvYWRlclxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdGlhbE1lbW9yeT86IG51bWJlcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluaXRpYWwgbGluZWFyIG1lbW9yeSwgaW4gNjQgS2lCIHBhZ2VzLCBmb3IgdGhlICoqdGhyZWFkbGVzcyoqXG4gICAgICAgICAqIChgd2FzbTMyLXdhc2lwMWApIGxvYWRlcnMgb25seTogdGhlIE5vZGUgQ0pTIGxvYWRlciwgdGhlIGJyb3dzZXIgbG9hZGVyXG4gICAgICAgICAqIGFuZCB0aGUgZGVmZXJyZWQgYC4vd29ya2VyZGAgbG9hZGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgdGhyZWFkZWQgbG9hZGVycyBhbGxvY2F0ZSBvbmUgYHNoYXJlZDogdHJ1ZWAgbWVtb3J5IHRoYXQgZXZlcnlcbiAgICAgICAgICogd2FzaS10aHJlYWRzIHdvcmtlciBtYXBzLCBzbyBldmVyeSB3b3JrZXIgc3RhY2sgYW5kIGV2ZXJ5IHRocmVhZCdzXG4gICAgICAgICAqIGFsbG9jYXRpb25zIGNvbWUgb3V0IG9mIGl0IGFuZCBncm93aW5nIGl0IGlzIGEgY3Jvc3MtdGhyZWFkIGV2ZW50OyBpdCBpc1xuICAgICAgICAgKiBzaXplZCBmb3IgdGhlIHdob2xlIHBvb2wgdXAgZnJvbnQuIFRoZSB0aHJlYWRsZXNzIGxvYWRlcnMgZHJpdmUgYSBzaW5nbGVcbiAgICAgICAgICogdGhyZWFkIHRocm91Z2ggYSBwbGFpbiBncm93YWJsZSBgQXJyYXlCdWZmZXJgOiB0aGV5IG9ubHkgaGF2ZSB0byBjbGVhclxuICAgICAgICAgKiB0aGUgbW9kdWxlJ3Mgb3duIGxpbmstdGltZSBmbG9vciAoYC16c3RhY2stc2l6ZWAgcGx1cyBzdGF0aWMgZGF0YSkgYW5kXG4gICAgICAgICAqIGdyb3cgb24gZGVtYW5kLCB3aGljaCBpcyB3aGF0IGxldHMgdGhlIHNhbWUgYnVpbGQgZml0IGEgaG9zdCB3aXRoIGEgaGFyZFxuICAgICAgICAgKiBpc29sYXRlIGNhcCBzdWNoIGFzIHdvcmtlcmQncyAxMjggTWlCLlxuICAgICAgICAgKlxuICAgICAgICAgKiBGYWxscyBiYWNrIHRvIGBpbml0aWFsTWVtb3J5YCB3aGVuIHVuc2V0LCBzbyBleGlzdGluZyBwcm9qZWN0cyBhcmVcbiAgICAgICAgICogdW5hZmZlY3RlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGRlZmF1bHQgYGluaXRpYWxNZW1vcnlgICg0MDAwIHBhZ2VzKSwgb3IgMTAyNCBwYWdlcyBmb3IgdGhlIGRlZmVycmVkXG4gICAgICAgICAqICAgYC4vd29ya2VyZGAgbG9hZGVyXG4gICAgICAgICAqL1xuICAgICAgICB0aHJlYWRsZXNzSW5pdGlhbE1lbW9yeT86IG51bWJlcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZWZhdWx0IDY1NTM2IHBhZ2VzICg0R2lCKVxuICAgICAgICAgKi9cbiAgICAgICAgbWF4aW11bU1lbW9yeT86IG51bWJlcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIGdlbmVyYXRlZCBgPHBhY2thZ2VOYW1lPi13YXNtMzItd2FzaWAgcGFja2FnZSBpcyBkZWNsYXJlZCBhc1xuICAgICAgICAgKiBhbiBgb3B0aW9uYWxEZXBlbmRlbmN5YCBvZiB0aGUgcm9vdCBwYWNrYWdlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBXaGVuIG5hdGl2ZSB0YXJnZXRzIGFyZSBjb25maWd1cmVkIHRoZSBXQVNJIHBhY2thZ2UgaXMgYSBmYWxsYmFjayBmb3JcbiAgICAgICAgICogaG9zdHMgdGhhdCBjYW5ub3QgbG9hZCBhIGAubm9kZWAgYmluYXJ5LCBzbyBkZWNsYXJpbmcgaXQgd291bGQgbWFrZSBldmVyeVxuICAgICAgICAgKiBjb25zdW1lciBkb3dubG9hZCB0aGUgYC53YXNtYCBiaW5hcnkgdGhleSB3aWxsIG5ldmVyIGxvYWQuIEl0IGlzXG4gICAgICAgICAqIHRoZXJlZm9yZSBvbWl0dGVkIGJ5IGRlZmF1bHQgYW5kIGlzIGV4cGVjdGVkIHRvIGJlIGluc3RhbGxlZCBvbiBkZW1hbmQgYnlcbiAgICAgICAgICogdGhlIGVudmlyb25tZW50cyB0aGF0IG5lZWQgaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFdoZW4gV0FTSSBpcyB0aGUgb25seSBjb25maWd1cmVkIHRhcmdldCBpdCBpcyB0aGUgcHJpbWFyeSBhcnRpZmFjdCBhbmQgaXNcbiAgICAgICAgICogZGVjbGFyZWQgYnkgZGVmYXVsdC5cbiAgICAgICAgICpcbiAgICAgICAgICogU2V0IHRoaXMgZXhwbGljaXRseSB0byBvdmVycmlkZSBlaXRoZXIgZGVmYXVsdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZSB3aGVuIGV2ZXJ5IGNvbmZpZ3VyZWQgdGFyZ2V0IGlzIFdBU0ksIGZhbHNlIG90aGVyd2lzZVxuICAgICAgICAgKi9cbiAgICAgICAgb3B0aW9uYWxEZXBlbmRlbmN5PzogYm9vbGVhbjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIGdlbmVyYXRlZCBXQVNJIGxvYWRlcnMgYm9vdHN0cmFwIHRoZSBgbmFwaS1hc3luYy1ydW50aW1lYFxuICAgICAgICAgKiBDdXJyZW50VGhyZWFkIEphdmFTY3JpcHQgaG9zdHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEEgYmluZGluZyBidWlsdCB3aXRoIHRoZSBgbmFwaS1hc3luYy1ydW50aW1lYCBjcmF0ZSBydW5zIHRoZVxuICAgICAgICAgKiBgQ3VycmVudFRocmVhZGAgZmxhdm9yIG9uIGV2ZXJ5IFdlYkFzc2VtYmx5IHRhcmdldCAoaXQgaXMgdGhlIG9ubHlcbiAgICAgICAgICogZmxhdm9yIHRoZXJlKS4gSXRzIGZ1dHVyZXMgbWFrZSBubyBwcm9ncmVzcyB1bnRpbCBhIHRhc2sgaG9zdCBpc1xuICAgICAgICAgKiByZWdpc3RlcmVkLCBhbmQgaXRzIHRpbWVycyBuZXZlciBmaXJlIHVudGlsIGEgdGltZXIgaG9zdCBpcywgc28gdGhlXG4gICAgICAgICAqIGxvYWRlciBtdXN0IGluc3RhbGwgYm90aCByaWdodCBhZnRlciBpbnN0YW50aWF0aW9uIGFuZCB1bnJlZ2lzdGVyIHRoZW1cbiAgICAgICAgICogYmVmb3JlIHRoZSBlbnZpcm9ubWVudCBpcyBkZXN0cm95ZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEVuYWJsaW5nIHRoaXMgZW1pdHMgdGhhdCBib290c3RyYXAgaW4gdGhlIG5vZGUsIGJyb3dzZXIgYW5kIGRlZmVycmVkXG4gICAgICAgICAqICh3b3JrZXJkKSBsb2FkZXJzLCBhbmQgZGVjbGFyZXMgYEBuYXBpLXJzL2FzeW5jLXJ1bnRpbWVgIGluIHRoZVxuICAgICAgICAgKiBnZW5lcmF0ZWQgYDxwYWNrYWdlTmFtZT4td2FzbTMyLSpgIHBhY2thZ2VzLiBUaGUgbG9hZGVyIGRlbGVnYXRlcyB0aGVcbiAgICAgICAgICogd2hvbGUgaG9zdCBjb250cmFjdCDigJQgdGhlIHNldmVuIGV4cG9ydHMsIGNvbnRyYWN0IHZlcnNpb24gNCwgdGhlXG4gICAgICAgICAqIHJlc2VydmF0aW9uIGlkZW50aXR5LCB0aGUgbGl2ZW5lc3MgcHJvYmUgYW5kIHRoZSByb2xsYmFjayDigJQgdG8gdGhhdFxuICAgICAgICAgKiBwYWNrYWdlLCBzbyBhIGJpbmRpbmcgdGhhdCBkb2VzIG5vdCBhY3R1YWxseSBleHBvc2UgdGhlIGNvbnRyYWN0IGZhaWxzXG4gICAgICAgICAqIGxvdWRseSBhdCBsb2FkIHdpdGggYEVSUl9OQVBJX0FTWU5DX1JVTlRJTUVfQklORElOR19NSVNNQVRDSGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBib290c3RyYXAgcnVucyBhZnRlciBpbnN0YW50aWF0aW9uLCBzbyBhZnRlciBgI1ttb2R1bGVfaW5pdF1gOiB0aGVcbiAgICAgICAgICogaG9zdCByZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFyZSBleHBvcnRzIG9mIHRoZSBiaW5kaW5nIGl0c2VsZi4gQ29kZSB0aGF0XG4gICAgICAgICAqIHJ1bnMgZHVyaW5nIG1vZHVsZSByZWdpc3RyYXRpb24gbXVzdCBub3QgY3JlYXRlIHRpbWVycyAoYHNsZWVwX3VudGlsYFxuICAgICAgICAgKiBmYWlscyBsb3VkIGF0IGNyZWF0aW9uIHdpdGhvdXQgYSB0aW1lciBob3N0KSBhbmQgY2Fubm90IGV4cGVjdCB0YXNrXG4gICAgICAgICAqIHByb2dyZXNzIHVudGlsIHRoZSBsb2FkZXIgaGFzIHJldHVybmVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmNSdW50aW1lPzogYm9vbGVhbjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJyb3dzZXIgd2FzbSBiaW5kaW5nIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGJyb3dzZXI/OiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdoZXRoZXIgdG8gdXNlIGZzIG1vZHVsZSBpbiBicm93c2VyXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGZzPzogYm9vbGVhbjtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2hldGhlciB0byBpbml0aWFsaXplIHdhc20gYXN5bmNocm9ub3VzbHlcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYXN5bmNJbml0PzogYm9vbGVhbjtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2hldGhlciB0byBpbmplY3QgYGJ1ZmZlcmAgdG8gZW1uYXBpIGNvbnRleHRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnVmZmVyPzogYm9vbGVhbjtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2hldGhlciB0byBlbWl0IGN1c3RvbSBldmVudHMgZm9yIGVycm9ycyBpbiB3b3JrZXJcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXJyb3JFdmVudD86IGJvb2xlYW47XG4gICAgICAgIH07XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBiaW5hcnlOYW1lIGluc3RlYWRcbiAgICAgKi9cbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBwYWNrYWdlTmFtZSBpbnN0ZWFkXG4gICAgICovXG4gICAgcGFja2FnZT86IHtcbiAgICAgICAgbmFtZT86IHN0cmluZztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSB0YXJnZXRzIGluc3RlYWRcbiAgICAgKi9cbiAgICB0cmlwbGVzPzoge1xuICAgICAgICAvKipcbiAgICAgICAgICogV2hldGhlciBlbmFibGUgZGVmYXVsdCB0YXJnZXRzXG4gICAgICAgICAqL1xuICAgICAgICBkZWZhdWx0czogYm9vbGVhbjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZGl0aW9uYWwgdGFyZ2V0cyB0byBiZSBjb21waWxlZCBmb3JcbiAgICAgICAgICovXG4gICAgICAgIGFkZGl0aW9uYWw/OiBzdHJpbmdbXTtcbiAgICB9O1xufVxuZXhwb3J0IGludGVyZmFjZSBDb21tb25QYWNrYWdlSnNvbkZpZWxkcyB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBrZXl3b3Jkcz86IHN0cmluZ1tdO1xuICAgIGF1dGhvcj86IHN0cmluZztcbiAgICBhdXRob3JzPzogc3RyaW5nW107XG4gICAgbGljZW5zZT86IHN0cmluZztcbiAgICBjcHU/OiBzdHJpbmdbXTtcbiAgICBvcz86IHN0cmluZ1tdO1xuICAgIGxpYmM/OiBzdHJpbmdbXTtcbiAgICBmaWxlcz86IHN0cmluZ1tdO1xuICAgIHJlcG9zaXRvcnk/OiBhbnk7XG4gICAgaG9tZXBhZ2U/OiBhbnk7XG4gICAgZW5naW5lcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgcHVibGlzaENvbmZpZz86IGFueTtcbiAgICBidWdzPzogYW55O1xuICAgIG5hcGk/OiBVc2VyTmFwaUNvbmZpZztcbiAgICB0eXBlPzogJ21vZHVsZScgfCAnY29tbW9uanMnO1xuICAgIHNjcmlwdHM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIG1haW4/OiBzdHJpbmc7XG4gICAgbW9kdWxlPzogc3RyaW5nO1xuICAgIHR5cGVzPzogc3RyaW5nO1xuICAgIGJyb3dzZXI/OiBzdHJpbmc7XG4gICAgZXhwb3J0cz86IGFueTtcbiAgICBkZXBlbmRlbmNpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGRldkRlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGF2YT86IHtcbiAgICAgICAgdGltZW91dD86IHN0cmluZztcbiAgICB9O1xufVxuZXhwb3J0IHR5cGUgTmFwaUNvbmZpZyA9IFJlcXVpcmVkPFBpY2s8VXNlck5hcGlDb25maWcsICdiaW5hcnlOYW1lJyB8ICdwYWNrYWdlTmFtZScgfCAnbnBtQ2xpZW50Jz4+ICYgUGljazxVc2VyTmFwaUNvbmZpZywgJ3dhc20nIHwgJ2R0c0hlYWRlcicgfCAnZHRzSGVhZGVyRmlsZScgfCAnY29uc3RFbnVtJyB8ICdydW50aW1lU3RyaW5nRW51bScgfCAncm9vdFB1Ymxpc2hlcic+ICYge1xuICAgIHRhcmdldHM6IFRhcmdldFtdO1xuICAgIHBhY2thZ2VKc29uOiBDb21tb25QYWNrYWdlSnNvbkZpZWxkcztcbn07XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZWFkTmFwaUNvbmZpZyhwYXRoOiBzdHJpbmcsIGNvbmZpZ1BhdGg/OiBzdHJpbmcpOiBQcm9taXNlPE5hcGlDb25maWc+O1xuIiwiaW1wb3J0IHR5cGUgeyBCdWlsZE9wdGlvbnMgYXMgUmF3QnVpbGRPcHRpb25zIH0gZnJvbSAnLi4vZGVmL2J1aWxkLmpzJztcbmltcG9ydCB7IHR5cGUgTmFwaUNvbmZpZywgdHlwZSBUYXJnZXQsIHR5cGUgQ2FyZ29Xb3Jrc3BhY2VNZXRhZGF0YSB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbnR5cGUgT3V0cHV0S2luZCA9ICdqcycgfCAnZHRzJyB8ICdub2RlJyB8ICdleGUnIHwgJ3dhc20nO1xudHlwZSBPdXRwdXQgPSB7XG4gICAga2luZDogT3V0cHV0S2luZDtcbiAgICBwYXRoOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgQnVpbGRGb3JtYXQgPSAnZXNtJyB8ICdjb21tb25qcyc7XG50eXBlIEJ1aWxkT3B0aW9ucyA9IFJhd0J1aWxkT3B0aW9ucyAmIHtcbiAgICBjYXJnb09wdGlvbnM/OiBzdHJpbmdbXTtcbn07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBXQVNJX0FSVElGQUNUX01FVEFEQVRBX1BSRUZJWCA9IFwiLy8gbmFwaS1ycy1hcnRpZmFjdC1tZXRhZGF0YTpcIjtcbmV4cG9ydCBpbnRlcmZhY2UgQXN5bmNSdW50aW1lSG9zdENvbnRyYWN0SW5wdXQge1xuICAgIC8qKiBUaGUgYWRkb24ncyBleHBvcnQgbmFtZXMsIGFzIHJlcG9ydGVkIGJ5IHRoZSB0eXBlIGRlZmluaXRpb24gcGFzcy4gKi9cbiAgICBpZGVudHM6IHN0cmluZ1tdO1xuICAgIC8qKiBXaGV0aGVyIGBuYXBpLndhc20uYXN5bmNSdW50aW1lYCBpcyBvbi4gKi9cbiAgICBhc3luY1J1bnRpbWU6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hldGhlciBgaWRlbnRzYCBpcyByZWFsIGV4cG9ydCBtZXRhZGF0YS4gYG5hcGktZGVyaXZlYCB3aXRob3V0IGl0c1xuICAgICAqIGB0eXBlLWRlZmAgZmVhdHVyZSBlbWl0cyBubyB0eXBlIGRlZmluaXRpb25zLCBzbyB0aGUgaWRlbnQgbGlzdCBpcyBlbXB0eVxuICAgICAqIGZvciBldmVyeSBzdWNoIGFkZG9uIOKAlCBpbmNsdWRpbmcgb25lIHRoYXQgZG9lcyBleHBvcnQgdGhlIHdob2xlIGhvc3RcbiAgICAgKiBjb250cmFjdC4gQW4gZW1wdHkgbGlzdCBpcyBvbmx5IGV2aWRlbmNlIHdoZW4gdGhpcyBpcyBgdHJ1ZWAuXG4gICAgICovXG4gICAgdHlwZURlZkF2YWlsYWJsZTogYm9vbGVhbjtcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nO1xufVxuLyoqXG4gKiBDcm9zcy1jaGVjayBgbmFwaS53YXNtLmFzeW5jUnVudGltZWAgYWdhaW5zdCB0aGUgYWRkb24ncyBleHBvcnQgbGlzdC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBtZXNzYWdlIHRvIHRocm93IChgZXJyb3JgKSBvciB0byBsb2cgKGB3YXJuaW5nYCksIGlmIGFueS4gV2l0aFxuICogbm8gdHlwZS1kZWYgbWV0YWRhdGEgdGhlcmUgaXMgbm90aGluZyB0byBjaGVjayBhZ2FpbnN0LCBzbyB0aGUgYnVpbGQgc2F5cyBzb1xuICogYW5kIGRlZmVycyB0byB0aGUgbG9hZGVyJ3Mgb3duIHJ1bnRpbWUgZGV0ZWN0aW9uLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjaGVja0FzeW5jUnVudGltZUhvc3RDb250cmFjdCh7IGlkZW50cywgYXN5bmNSdW50aW1lLCB0eXBlRGVmQXZhaWxhYmxlLCBwYWNrYWdlTmFtZSwgfTogQXN5bmNSdW50aW1lSG9zdENvbnRyYWN0SW5wdXQpOiB7XG4gICAgZXJyb3I/OiBzdHJpbmc7XG4gICAgd2FybmluZz86IHN0cmluZztcbn07XG50eXBlIENhcmdvQ29uZmlnRmluZ2VycHJpbnQgPSByZWFkb25seSBbcGF0aDogc3RyaW5nLCBoYXNoOiBzdHJpbmddO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZ2V0Q2FyZ29EZXBlbmRlbmN5R3JhcGhGaW5nZXJwcmludChtZXRhZGF0YTogQ2FyZ29Xb3Jrc3BhY2VNZXRhZGF0YSwgcm9vdFBhY2thZ2VJZDogc3RyaW5nKTogc3RyaW5nO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZ2V0VHlwZURlZkNhY2hlRm9sZGVyKG9wdGlvbnM6IHtcbiAgICB0YXJnZXREaXI6IHN0cmluZztcbiAgICBjcmF0ZU5hbWU6IHN0cmluZztcbiAgICBtYW5pZmVzdFBhdGg6IHN0cmluZztcbiAgICB0YXJnZXRUcmlwbGU6IHN0cmluZztcbiAgICBwcm9maWxlOiBzdHJpbmc7XG4gICAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgICBhbGxGZWF0dXJlcz86IGJvb2xlYW47XG4gICAgbm9EZWZhdWx0RmVhdHVyZXM/OiBib29sZWFuO1xuICAgIGNhcmdvT3B0aW9ucz86IHN0cmluZ1tdO1xuICAgIHJ1c3RGbGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD47XG4gICAgY2FyZ29Qcm9maWxlRW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPjtcbiAgICBjYXJnb0NvbmZpZz86IENhcmdvQ29uZmlnRmluZ2VycHJpbnRbXTtcbiAgICBjYXJnb0RlcGVuZGVuY3lHcmFwaD86IHN0cmluZztcbn0pOiBzdHJpbmc7XG4vKipcbiAqIE5hbWUgb2YgdGhlIGVtbmFwaSBhcmNoaXZlIGRpcmVjdG9yeSBidWlsdCBhZ2FpbnN0IHRoZSB3YXNpLXNkayAzNCBBQkkuXG4gKiBPbmx5IHRoZSB0aHJlYWRlZCB0YXJnZXQgaGFzIG9uZTogdGhlIHNpZ25hdHVyZSBjaGFuZ2UgaXQgY2FycmllcyBsaXZlcyBpblxuICogdGhlIHRocmVhZHMtb25seSBmdXRleCBjb2RlLlxuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCBFTU5BUElfV0FTSV9TREtfMzRfTElOS19ESVIgPSBcIndhc20zMi13YXNpcDEtdGhyZWFkcy13YXNpLXNkay0zNFwiO1xuZXhwb3J0IGludGVyZmFjZSBFbW5hcGlMaW5rRGlyU2VsZWN0aW9uIHtcbiAgICAvKiogRGlyZWN0b3J5IG5hbWUgdW5kZXIgYGVtbmFwaS9saWJgIHdob3NlIGFyY2hpdmVzIHNob3VsZCBiZSBsaW5rZWQuICovXG4gICAgbGlua0Rpck5hbWU6IHN0cmluZztcbiAgICAvKiogRGV0ZWN0ZWQgd2FzaS1zZGsgbWFqb3IgdmVyc2lvbiwgYG51bGxgIHdoZW4gbm8gd2FzaS1zZGsgaXMgY29uZmlndXJlZC4gKi9cbiAgICB3YXNpU2RrTWFqb3I6IG51bWJlciB8IG51bGw7XG4gICAgLyoqIGB0cnVlYCB3aGVuIHRoZSB0b29sY2hhaW4gbmVlZHMgdGhlIHdhc2ktc2RrIDM0IGFyY2hpdmVzLiAqL1xuICAgIG5lZWRzV2FzaVNkazM0OiBib29sZWFuO1xufVxuLyoqXG4gKiBQaWNrIHRoZSBlbW5hcGkgYXJjaGl2ZSBkaXJlY3RvcnkgZm9yIGEgV0FTSSBidWlsZC5cbiAqXG4gKiB3YXNpLWxpYmMgcmVtb3ZlZCB0aGUgdW51c2VkIGBpbnQgb3BgIHBhcmFtZXRlciBmcm9tXG4gKiBgX193YXNpbGliY19mdXRleF93YWl0X2F0b21pY193YWl0YCAvIGBfX3dhc2lsaWJjX2Z1dGV4X3dhaXRfbWF5YmVfYnVzeWAsXG4gKiBhbmQgd2FzaS1zZGsgMzQgaXMgdGhlIGZpcnN0IHJlbGVhc2Ugc2hpcHBpbmcgdGhlIDMtYXJndW1lbnQgc2lnbmF0dXJlLlxuICogTGlua2luZyB0aGUgbGVnYWN5IDQtYXJndW1lbnQgYXJjaGl2ZXMgYWdhaW5zdCBhIHdhc2ktc2RrID49IDM0IHN5c3Jvb3RcbiAqIG1ha2VzIGB3YXNtLWxkYCByZXBvcnQgYGZ1bmN0aW9uIHNpZ25hdHVyZSBtaXNtYXRjaGAgYW5kIGVtaXQgYW4gaW52YWxpZFxuICogd2FzbSBtb2R1bGUsIHNvIGVtbmFwaSBwdWJsaXNoZXMgYSBzZWNvbmQgYXJjaGl2ZSBzZXQgZm9yIHRoZSBuZXcgQUJJIGFuZFxuICogdGhlIGRpcmVjdG9yeSBoYXMgdG8gYmUgY2hvc2VuIGJ5IHdhc2ktc2RrIHZlcnNpb24sIG5vdCBieSB0YXJnZXQgdHJpcGxlLlxuICpcbiAqIFdpdGhvdXQgYFdBU0lfU0RLX1BBVEhgLCBjYXJnbyBsaW5rcyB0aHJvdWdoIGBydXN0LWxsZGAgYWdhaW5zdCB0aGVcbiAqIHdhc2ktbGliYyBidW5kbGVkIHdpdGggdGhlIFJ1c3Qgc3RhbmRhcmQgbGlicmFyeSwgc28gdGhhdCBhcmNoaXZlIGlzXG4gKiBwcm9iZWQgaW5zdGVhZC4gUnVzdCBwaWNrZWQgdXAgd2FzaS1zZGsgMzQgaW4gcnVzdC1sYW5nL3J1c3QjMTYxNzczLCB3aGljaFxuICogbGFuZHMgaW4gMS4xMDAsIGFuZCBhIHRvb2xjaGFpbiBjYXJyeWluZyBpdCBuZWVkcyB0aGUgbmV3IGFyY2hpdmVzIGV2ZW5cbiAqIHRob3VnaCBubyB3YXNpLXNkayBpcyBjb25maWd1cmVkLlxuICpcbiAqIFRoZSBsZWdhY3kgZGlyZWN0b3J5IHN0YXlzIHRoZSBkZWZhdWx0IHdoZW5ldmVyIHRoZSBBQkkgY2Fubm90IGJlXG4gKiBkZXRlcm1pbmVkLCBhbmQgb2xkZXIgZW1uYXBpIHJlbGVhc2VzIHNoaXAgaXQgYWxvbmUuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHNlbGVjdEVtbmFwaUxpbmtEaXIoZW1uYXBpTGliRGlyOiBzdHJpbmcsIHdhc2lUYXJnZXQ6IHN0cmluZywgaGFzVGhyZWFkczogYm9vbGVhbiwgd2FzaVNka1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCwgeyBjd2QsIHJ1c3RXYXNpTGliYywgfT86IHtcbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgcnVzdFdhc2lMaWJjPzogc3RyaW5nIHwgbnVsbDtcbn0pOiBFbW5hcGlMaW5rRGlyU2VsZWN0aW9uO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlV2FzaUNvbXBpbGVyRmxhZ3Mod2FzaVNka1BhdGg6IHN0cmluZywgd2FzaVRhcmdldDogc3RyaW5nLCBoYXNUaHJlYWRzOiBib29sZWFuLCBzaGVsbEVzY2FwZWRGbGFncz86IGJvb2xlYW4pOiB7XG4gICAgY29tcGlsZUZsYWdzOiBzdHJpbmc7XG4gICAgbGlua2VyRmxhZ3M6IHN0cmluZztcbn07XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVBcnRpZmFjdERlc3RpbmF0aW9uTmFtZShiaW5hcnlOYW1lOiBzdHJpbmcsIHRhcmdldDogVGFyZ2V0LCBzb3VyY2VOYW1lOiBzdHJpbmcsIHBsYXRmb3JtOiBib29sZWFuKTogc3RyaW5nO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc2VsZWN0V2FzaUJyb3dzZXJUYXJnZXQoYnVpbGRUYXJnZXQ6IFRhcmdldCwgY29uZmlndXJlZFRhcmdldHM6IFRhcmdldFtdLCBlbWl0dGVkVGFyZ2V0czogVGFyZ2V0W10pOiBUYXJnZXQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVXYXNpQnJvd3NlckVudHJ5KHBhY2thZ2VOYW1lOiBzdHJpbmcsIHBsYXRmb3JtQXJjaEFCSTogc3RyaW5nLCBpZGVudHM6IHN0cmluZ1tdKTogc3RyaW5nO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlV2FzaURlZmVycmVkQmluZGluZ1R5cGVEZWYoYmluZGluZ01vZHVsZVNwZWNpZmllcjogc3RyaW5nLCBoYXNUeXBlRGVmOiBib29sZWFuLCBwbGF0Zm9ybUFyY2hBQkk/OiBzdHJpbmcpOiBzdHJpbmc7XG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkV2FzbU1lbW9yeSB7XG4gICAgLyoqIGB1bmRlZmluZWRgIGtlZXBzIGVhY2ggdGVtcGxhdGUncyBvd24gZGVmYXVsdCAoNDAwMCwgb3IgMTAyNCBmb3IgYC4vd29ya2VyZGApLiAqL1xuICAgIGluaXRpYWxNZW1vcnk/OiBudW1iZXI7XG4gICAgLyoqIGB1bmRlZmluZWRgIGtlZXBzIHRoZSB0ZW1wbGF0ZSBkZWZhdWx0ICg2NTUzNikuICovXG4gICAgbWF4aW11bU1lbW9yeT86IG51bWJlcjtcbn1cbi8qKlxuICogUmVzb2x2ZSB0aGUgYFdlYkFzc2VtYmx5Lk1lbW9yeWAgZGVzY3JpcHRvciB0aGUgZ2VuZXJhdGVkIGxvYWRlcnMgZW1iZWQsIGZvclxuICogb25lIFdBU0kgZmxhdm9yLlxuICpcbiAqIFRoZSB0aHJlYWRlZCBsb2FkZXJzIHNoYXJlIG9uZSBgc2hhcmVkOiB0cnVlYCBtZW1vcnkgd2l0aCBldmVyeSB3YXNpLXRocmVhZHNcbiAqIHdvcmtlciwgc28gaXQgaXMgc2l6ZWQgZm9yIHRoZSB3aG9sZSBwb29sLiBUaGUgdGhyZWFkbGVzcyBsb2FkZXJzIGhhdmUgYVxuICogc2luZ2xlIHRocmVhZCBhbmQgYSBwbGFpbiBncm93YWJsZSBgQXJyYXlCdWZmZXJgLCBzbyB0aGV5IG9ubHkgbmVlZCB0byBjbGVhclxuICogdGhlIG1vZHVsZSdzIGxpbmstdGltZSBmbG9vciAoYC16c3RhY2stc2l6ZWAgcGx1cyBzdGF0aWMgZGF0YSkgYW5kIGdyb3cgb25cbiAqIGRlbWFuZC4gYG5hcGkud2FzbS50aHJlYWRsZXNzSW5pdGlhbE1lbW9yeWAgc2l6ZXMgdGhlIHRocmVhZGxlc3MgbG9hZGVyc1xuICogd2l0aG91dCBzaHJpbmtpbmcgdGhlIHRocmVhZGVkIG9uZTsgdW5zZXQsIGl0IGZhbGxzIGJhY2sgdG9cbiAqIGBuYXBpLndhc20uaW5pdGlhbE1lbW9yeWAgYW5kIG5vdGhpbmcgY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmVzb2x2ZVdhc21NZW1vcnkod2FzbTogTmFwaUNvbmZpZ1snd2FzbSddLCBoYXNUaHJlYWRzOiBib29sZWFuKTogUmVzb2x2ZWRXYXNtTWVtb3J5O1xuLyoqXG4gKiBXaGV0aGVyIGEgYnVpbGQncyBkZWNsYXJhdGlvbiBmaWxlIHNob3VsZCBkZWNsYXJlIGBfX25hcGlCaW5kaW5nVGFyZ2V0YC5cbiAqXG4gKiBUaGUgZXhwb3J0IGV4aXN0cyBvbmx5IG9uIGEgZ2VuZXJhdGVkIGxvYWRlciwgc28gdGhlIGRlY2xhcmF0aW9uIGhhcyB0b1xuICogZm9sbG93IHRoZSBsb2FkZXJzIGEgYnVpbGQgYWN0dWFsbHkgd3JpdGVzLiBUaGlzIG1pcnJvcnMgYm90aCB3cml0ZXJzOlxuICpcbiAqIC0ge0BsaW5rIHdyaXRlSnNCaW5kaW5nfSB3cml0ZXMgdGhlIHJvb3QgbG9hZGVyIGZvciBgLS1wbGF0Zm9ybWAgd2l0aG91dFxuICogICBgLS1uby1qcy1iaW5kaW5nYCAoYHJvb3RMb2FkZXJDYW5kaWRhdGVgKSwgYW5kIHRoZW4gb25seSB3aGVuIHRoZSBidWlsZCBoYXNcbiAqICAgcnVudGltZSBleHBvcnRzIG9yIGEgV0FTSSBmbGF2b3IgdG8gZmFsbCBiYWNrIHRvLlxuICogLSBgQnVpbGRlci53cml0ZVdhc2lCaW5kaW5nYCB3cml0ZXMgYSBmbGF2b3IncyBsb2FkZXIgc2V0IHdoZW4gdGhhdCBmbGF2b3IgaXNcbiAqICAgdGhlIGJ1aWxkIHRhcmdldCwgb3Igd2hlbiBhbiBlYXJsaWVyIGJ1aWxkIG9mIGl0IGxlZnQgbWV0YWRhdGEgb24gZGlza1xuICogICAoYGVtaXRzV2FzaUxvYWRlcmApLiBBIG1lcmVseSBjb25maWd1cmVkIGZsYXZvciBpcyBza2lwcGVkLCBhbmQgYSBidWlsZFxuICogICB0aGF0IHNraXBzIGV2ZXJ5IGZsYXZvciBlbWl0cyBubyBsb2FkZXIgdG8gY2FycnkgdGhlIGV4cG9ydC5cbiAqXG4gKiBUaGUgZXhwb3J0IGxpc3QgaXMgb25seSBrbm93biBvbmNlIHR5cGVnZW4gaGFzIHJ1biwgYW5kIHR5cGVnZW4gd3JpdGVzIHRoZVxuICogZGVjbGFyYXRpb24gZmlsZSBpdHNlbGYsIHNvIHRoZSBkZWNpc2lvbiBjb21lcyBiYWNrIGFzIGEgcHJlZGljYXRlIG92ZXIgdGhhdFxuICogbGlzdCBpbnN0ZWFkIG9mIGEgZmxhZyB0YWtlbiB1cCBmcm9udC5cbiAqXG4gKiBJdCBnYXRlcyB0aGUgKnJlc2VydmF0aW9uKiBvZiB0aGUgbmFtZSB0b28g4oCUIGBCdWlsZGVyLmdlbmVyYXRlVHlwZURlZmAgY2FsbHNcbiAqIHtAbGluayBhc3NlcnRCaW5kaW5nVGFyZ2V0SWRlbnRGcmVlfSBvbmx5IHdoZW4gdGhpcyBhbnN3ZXJzIGB0cnVlYC4gRGVjbGFyaW5nXG4gKiB0aGUgbmFtZSBhbmQgZm9yYmlkZGluZyBhbiBhZGRvbiBmcm9tIGV4cG9ydGluZyBpdCBhcmUgdGhlIHNhbWUgcXVlc3Rpb24sIGFuZFxuICogYSBidWlsZCB0aGF0IGVtaXRzIG5vIGxvYWRlciBhc2tzIG5laXRoZXIuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGJpbmRpbmdUYXJnZXREZWNsYXJhdGlvblByZWRpY2F0ZShpbnB1dDoge1xuICAgIHJvb3RMb2FkZXJDYW5kaWRhdGU6IGJvb2xlYW47XG4gICAgaGFzV2FzaUZhbGxiYWNrOiBib29sZWFuO1xuICAgIGVtaXRzV2FzaUxvYWRlcjogYm9vbGVhbjtcbn0pOiAoZXhwb3J0czogcmVhZG9ubHkgc3RyaW5nW10pID0+IGJvb2xlYW47XG4vKipcbiAqIFRoZSBgLmQuY3RzYCBjb250ZW50IGZvciBhIFdBU0kgZmxhdm9yIGxvYWRlciwgZGVyaXZlZCBmcm9tIHRoZSByb290XG4gKiBkZWNsYXJhdGlvbiB0aGlzIGJ1aWxkIHdyb3RlLlxuICpcbiAqIEFuIEVTTSBzb3VyY2UgKGAqLmQubXRzYCwgb3IgYCouZC50c2AgaW4gYSBgXCJ0eXBlXCI6IFwibW9kdWxlXCJgIHBhY2thZ2UpIGlzXG4gKiByZS1kZWNsYXJlZCB2ZXJiYXRpbSB3aGVuIG5vdGhpbmcgaW4gaXQgY2hhbmdlcyBtZWFuaW5nIHVuZGVyIENvbW1vbkpTXG4gKiBpbnRlcnByZXRhdGlvbiDigJQgd2hpY2ggaXMgZXZlcnl0aGluZyBhIGdlbmVyYXRlZCB0eXBlZGVmIGFuZCBtb3N0XG4gKiBgLS1kdHMtaGVhZGVyYHMgY29udGFpbi4ge0BsaW5rIGNvbW1vbkpzRGVjbGFyYXRpb25CYXJyaWVyfSBuYW1lcyB0aGVcbiAqIGNvbnN0cnVjdHMgdGhhdCBzdGlsbCByZWZ1c2UsIGFuZCB3aHkuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHByZXBhcmVXYXNpQmluZGluZ1R5cGVEZWYoc291cmNlOiBzdHJpbmcsIHNvdXJjZVBhdGg6IHN0cmluZywgZGVzdGluYXRpb25QYXRoOiBzdHJpbmcsIGhhc1RocmVhZHM6IGJvb2xlYW4sIHBhY2thZ2VUeXBlPzogJ21vZHVsZScgfCAnY29tbW9uanMnKTogc3RyaW5nO1xuLyoqXG4gKiBNYWtlIGEgZGVjbGFyYXRpb24gZmlsZSBkZWNsYXJlIHRoZSBgX19uYXBpQmluZGluZ1RhcmdldGAgaXRzIGxvYWRlciBleHBvcnRzLlxuICpcbiAqIGBwbGF0Zm9ybUFyY2hBQklgIG5hbWVzIHRoZSBXQVNJIGZsYXZvciB0aGUgZmlsZSB0eXBlcywgYW5kIHRoZSBkZWNsYXJhdGlvblxuICogaXMgdGhlbiB0aGF0IGZsYXZvcidzIGV4YWN0IGxpdGVyYWw7IHdpdGhvdXQgaXQgdGhlIGZpbGUgaXMgdGhlIHJvb3QgZW50cnknc1xuICogYW5kIGtlZXBzIHRoZSBmdWxsIHVuaW9uLCB3aGljaCBvbmx5IHRoZSByb290IGVudHJ5IGNhbiByZWFjaC5cbiAqXG4gKiBUd28ga2luZHMgb2YgZmlsZSBhcnJpdmUgaGVyZS4gQSBXQVNJIGRlY2xhcmF0aW9uIGRlcml2ZWQgZnJlc2ggZnJvbSB0aGUgcm9vdFxuICogYGluZGV4LmQudHNgIGluaGVyaXRzIHRoYXQgdW5pb24gYW5kIGhhcyB0byBiZSBuYXJyb3dlZC4gQSBkZWNsYXJhdGlvbiBrZXB0XG4gKiBmcm9tIGFuIGVhcmxpZXIgYnVpbGQg4oCUIGEgYnVpbGQgdGhhdCBkb2VzIG5vdCB0YXJnZXQgV0FTSSByZWdlbmVyYXRlcyBldmVyeVxuICogZGVjbGFyZWQgZmxhdm9yJ3MgbG9hZGVyIGZyb20gdGhlIG1ldGFkYXRhIHRoYXQgZmxhdm9yJ3Mgb3duIGJ1aWxkIGxlZnRcbiAqIGJlaGluZCwgYW5kIHJldXNlcyBpdHMgZGVjbGFyYXRpb24gZmlsZSB2ZXJiYXRpbSDigJQgbWF5IHByZWRhdGUgdGhlIGV4cG9ydFxuICogZW50aXJlbHksIG9yIGNhcnJ5IGEgdW5pb24gYW4gZWFybGllciB2ZXJzaW9uIG9mIHRoaXMgYnJhbmNoIHdyb3RlLlxuICpcbiAqIEVpdGhlciBtYXkgYWxzbyBjYXJyeSBhIGRlY2xhcmF0aW9uIG5vYm9keSBoZXJlIHdyb3RlLCBiZWNhdXNlIGEgcHJvamVjdCdzXG4gKiBvd24gYC0tZHRzLWhlYWRlcmAgbWF5IGRlY2xhcmUgdGhlIGV4cG9ydCB0byB3b3JrIGFyb3VuZCBsb2FkZXJzIHRoYXQgcHJlZGF0ZVxuICogaXQuIFNvIG93bmVyc2hpcCwgbm90IG1lcmUgcHJlc2VuY2UsIGRlY2lkZXMgd2hhdCBoYXBwZW5zLlxuICpcbiAqIFRocmVlIGNhc2VzLCBkZWNpZGVkIGluIHRoaXMgb3JkZXI6XG4gKlxuICogLSBUaGUgZGVjbGFyYXRpb24gdGhlIHJlbmRlcmVkIGAuZC50c2AgaGVhZGVyIG93bnMuIGByZW5kZXJlZEhlYWRlcmAgaXMgdGhhdFxuICogICBoZWFkZXIgYXMgdGhpcyBidWlsZCByZW5kZXJlZCBpdDsgaWYgaXQgZGVjbGFyZXMgdGhlIGV4cG9ydCwgdGhlIHByb2plY3Qnc1xuICogICBvd24gZGVjbGFyYXRpb24gd2luczogbm90aGluZyBpcyBhcHBlbmRlZCwgYW5kIGl0IGlzIG5ldmVyIHJld3JpdHRlbi5cbiAqICAgRGVjbGFyaW5nIGl0IGEgc2Vjb25kIHRpbWUgd291bGQgYmUgYSBUUzI0NTEgcmVkZWNsYXJhdGlvbi5cbiAqXG4gKiAgIFRoZSBoZWFkZXIgaXMgbWF0Y2hlZCBieSB0aGUgdGV4dCBvZiBpdHMgZGVjbGFyYXRpb24gYWdhaW5zdCB0aGUgZmlyc3RcbiAqICAgZGVjbGFyYXRpb24gaW4gdGhlIGZpbGUsIG5vdCBieSBhIHByZWZpeCBvZiB0aGUgZmlsZS4gQSBXQVNJIGRlY2xhcmF0aW9uIGlzXG4gKiAgIGRlcml2ZWQgdGhyb3VnaCB7QGxpbmsgcHJlcGFyZVdhc2lCaW5kaW5nVHlwZURlZn0sIHdoaWNoIHJld3JpdGVzIHJlbGF0aXZlXG4gKiAgIGltcG9ydCBzcGVjaWZpZXJzIGFuZCwgZm9yIHRoZSB0aHJlYWRsZXNzIGZsYXZvciwgZHJvcHMgYG5vZGU6c3RyZWFtL3dlYmBcbiAqICAgaW1wb3J0cyDigJQgYSBoZWFkZXIgY2FycnlpbmcgZWl0aGVyIHN0b3BzIGJlaW5nIGEgbGl0ZXJhbCBwcmVmaXggb2YgdGhlIGZpbGVcbiAqICAgZGVyaXZlZCBmcm9tIGl0LCB3aGlsZSB0aGUgZGVjbGFyYXRpb24gc3RhdGVtZW50IGl0c2VsZiBjb21lcyB0aHJvdWdoXG4gKiAgIHVudG91Y2hlZCBhbmQgc3RheXMgdGhlIGZpcnN0IG9uZSwgYmVjYXVzZSB0aG9zZSByZXdyaXRlcyBuZXZlciByZW9yZGVyXG4gKiAgIHN0YXRlbWVudHMuIE9uIHRoZSBwcmVzZXJ2ZWQgcGF0aCB0aGUgaGVhZGVyIGluIGhhbmQgaXMgdGhpcyBidWlsZCdzLCBub3RcbiAqICAgdGhlIG9uZSB0aGUga2VwdCBmaWxlIHdhcyB3cml0dGVuIHdpdGgsIGFuZCBhIGtlcHQgZGVjbGFyYXRpb24gdGhhdCByZWFkc1xuICogICBkaWZmZXJlbnRseSBpcyBjb3JyZWN0bHkgbm90IHRoZSBoZWFkZXIncy5cbiAqIC0gQSBkZWNsYXJhdGlvbiB0aGUgaGVhZGVyIGRvZXMgbm90IG93biwgYWxvbmUgaW4gaXRzIHN0YXRlbWVudCwgd2hvc2UgdHlwZVxuICogICBpcyBidWlsdCBvbmx5IG91dCBvZiB0aGUgbGl0ZXJhbHMgdGhpcyBDTEkgd3JpdGVzXG4gKiAgICh7QGxpbmsgaXNHZW5lcmF0ZWRCaW5kaW5nVGFyZ2V0VHlwZX0pLCBpcyBvbmUgb2Ygb3Vycy4gU3RhbGUg4oCUIGFuIG9sZGVyXG4gKiAgIHVuaW9uLCBvciB0aGUgb3RoZXIgZmxhdm9yJ3MgbGl0ZXJhbCDigJQgaXQgaXMgcmVwbGFjZWQgaW4gcGxhY2UsIGNvbW1lbnRcbiAqICAgYW5kIGFsbCwgc28gYSBmaWxlIGtlcHQgZnJvbSBhbiBlYXJsaWVyIGJ1aWxkIGVuZHMgdXAgc2F5aW5nIHdoYXQgdGhlXG4gKiAgIGxvYWRlciB3cml0dGVuIGJlc2lkZSBpdCBub3cgcmVwb3J0cy5cbiAqIC0gQW55IG90aGVyIGV4cG9ydCBvZiB0aGUgbmFtZSBpcyBzb21lb25lIGVsc2UncyBhbmQgaXMgcHJlc2VydmVkLCB3aXRoXG4gKiAgIG5vdGhpbmcgYXBwZW5kZWQgYmVzaWRlIGl0LiBBIGxvb3NlciBtYXRjaCB3b3VsZCByZXdyaXRlIGEgZGVjbGFyYXRpb24gYVxuICogICBgLS1kdHMtaGVhZGVyYCBjb250cmlidXRlZC4gVGhhdCBjb3ZlcnMgYSBzdGF0ZW1lbnQgZGVjbGFyaW5nIG1vcmUgbmFtZXNcbiAqICAgdGhhbiB0aGlzIG9uZSDigJQgdGhlIGJsb2NrIGEgcmVmcmVzaCByZXBsYWNlcyBzcGFucyB0aGVtIHRvbywgYW5kIHRoaXMgQ0xJXG4gKiAgIHdyaXRlcyB0aGUgZGVjbGFyYXRpb24gYWxvbmUg4oCUIGFuZCBpdCBjb3ZlcnMgZXZlcnkgb3RoZXIgd2F5IGEgaGVhZGVyIGNhblxuICogICBjbGFpbSB0aGUgbmFtZTogYXMgYSBgZnVuY3Rpb25gLCBgY2xhc3NgLCBgZW51bWAgb3IgaW5zdGFudGlhdGVkXG4gKiAgIGBuYW1lc3BhY2VgLCB0aHJvdWdoIGFuIGBleHBvcnQgeyB0YXJnZXQgYXMgX19uYXBpQmluZGluZ1RhcmdldCB9YCBvclxuICogICBgZXhwb3J0ICogYXMgX19uYXBpQmluZGluZ1RhcmdldCBmcm9tICfigKYnYCBjbGF1c2UsIG9yIHRocm91Z2hcbiAqICAgYGV4cG9ydCBpbXBvcnQgX19uYXBpQmluZGluZ1RhcmdldCA9IOKApmAuIE5vbmUgb2YgdGhvc2UgbGVhdmVzIGFcbiAqICAgZGVjbGFyYXRpb24gaGVyZSB0byByZXdyaXRlLCBhbmQgYW4gZXhwb3J0IGFkZGVkIGJlc2lkZSBhbnkgb2YgdGhlbSBpcyBhXG4gKiAgIFR5cGVTY3JpcHQgZXJyb3IgKFRTMjMwMCwgVFMyMzIzLCBUUzI0NDAgb3IgVFMyNTY3IGJ5IGZvcm0pLlxuICpcbiAqICAgQSBoZWFkZXIgdGhhdCBleHBvcnRzIHRoZSBuYW1lIGluIHR5cGUgc3BhY2Ugb25seSDigJQgYSBgdHlwZWAsIGFuXG4gKiAgIGBpbnRlcmZhY2VgLCBhIG5hbWVzcGFjZSB0aGF0IGRlY2xhcmVzIG5vIHZhbHVlIOKAlCBjbGFpbXMgbm90aGluZzogdGhlXG4gKiAgIGRlY2xhcmF0aW9uIG1lcmdlcyB3aXRoIGl0LCBhbmQgd2l0aGhvbGRpbmcgaXQgd291bGQgY29zdCBhIGNvbnN1bWVyIHRoZVxuICogICB2YWx1ZSB0aGUgbG9hZGVyIHJlYWxseSBleHBvcnRzIOKAlCBzZWUge0BsaW5rIHNjYW5FeHBvcnRlZE5hbWV9LlxuICpcbiAqIEEgZGVjbGFyYXRpb24gZmlsZSB0aGF0IGV4cG9ydHMgYnkgYXNzaWdubWVudCAoYGV4cG9ydCA9IGJpbmRpbmdgLCB3aGF0IGFcbiAqIGJ1aWxkIHdpdGhvdXQgYG5hcGktZGVyaXZlYCdzIGB0eXBlLWRlZmAgZmVhdHVyZSBlbWl0cykgY2Fubm90IGNhcnJ5IGEgbmFtZWRcbiAqIGV4cG9ydCBkZWNsYXJhdGlvbiwgc28gaXQgaXMgbGVmdCBhbG9uZTsgaXRzIGV4cG9ydHMgYXJlIHVudHlwZWQgYW55d2F5LlxuICogVGhhdCwgdG9vLCBpcyByZWFkIG9mZiB0aGUgcGFyc2Ug4oCUIGEgYmxvY2sgY29tbWVudCBkb2N1bWVudGluZyB0aGUgQ29tbW9uSlNcbiAqIGZvcm0gaXMgbm90IGFuIGV4cG9ydCBhc3NpZ25tZW50LlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBlbnN1cmVCaW5kaW5nVGFyZ2V0RGVjbGFyYXRpb24odHlwZURlZjogc3RyaW5nLCBwbGF0Zm9ybUFyY2hBQkk/OiBzdHJpbmcsIHJlbmRlcmVkSGVhZGVyPzogc3RyaW5nKTogc3RyaW5nO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29sbGVjdFN0YWxlV2FzaUJ1aWxkT3V0cHV0TmFtZXMoYmluYXJ5TmFtZTogc3RyaW5nLCBidWlsZFRhcmdldDogVGFyZ2V0LCBjb25maWd1cmVkVGFyZ2V0czogVGFyZ2V0W10pOiBTZXQ8c3RyaW5nPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlbW92ZVdhc21DdXN0b21TZWN0aW9uKGJpbmFyeTogVWludDhBcnJheSwgc2VjdGlvbk5hbWU6IHN0cmluZyk6IFVpbnQ4QXJyYXk7XG50eXBlIEJ1aWxkRm9ybWF0T3B0aW9ucyA9IHtcbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG4gICAgZXNtPzogYm9vbGVhbjtcbiAgICBjb21tb25qcz86IGJvb2xlYW47XG59O1xuLyoqXG4gKiBSZXNvbHZlIHRoZSBleHBsaWNpdCBidWlsZCBmb3JtYXQgYW5kIGl0cyBsZWdhY3kgQ0xJL0FQSSBhbGlhc2VzLlxuICpcbiAqIENvbW1vbkpTIGlzIHRoZSBoaXN0b3JpY2FsIGRlZmF1bHQuIFRoZSBhbGlhc2VzIGFyZSBpbnRlbnRpb25hbGx5IGtlcHRcbiAqIHNlcGFyYXRlIGZyb20gYGZvcm1hdGAgYmVjYXVzZSBgLS1lc21gIGFuZCBgLS1jb21tb25qc2AgYXJlIGJvb2xlYW4gZmxhZ3MsXG4gKiB3aGlsZSBgLS1mb3JtYXRgIHRha2VzIGEgdmFsdWUuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlc29sdmVCdWlsZEZvcm1hdChvcHRpb25zOiBCdWlsZEZvcm1hdE9wdGlvbnMpOiBCdWlsZEZvcm1hdDtcbi8qKiBCdWlsZCB0aGUgY29uZmlndXJlZCBOQVBJLVJTIGNyYXRlIGFuZCBnZW5lcmF0ZSBpdHMgb3V0cHV0IGFydGlmYWN0cy4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGJ1aWxkUHJvamVjdChyYXdPcHRpb25zOiBCdWlsZE9wdGlvbnMpOiBQcm9taXNlPHtcbiAgICB0YXNrOiBQcm9taXNlPE91dHB1dFtdPjtcbiAgICBhYm9ydDogKCkgPT4gdm9pZDtcbn0+O1xuLyoqXG4gKiBWYWxpZGF0ZSB0aGUgY29tYmluYXRpb24gb2YgdGhlIGNyb3NzLWNvbXBpbGF0aW9uIHJlbGF0ZWQgZmxhZ3MuXG4gKlxuICogYC0tdXNlLWNyb3NzYCwgYC0tdXNlLW5hcGktY3Jvc3NgIGFuZCBgLS1jcm9zcy1jb21waWxlYCAoYC14YCkgYXJlIHRocmVlXG4gKiBtdXR1YWxseSBleGNsdXNpdmUgY3Jvc3MtY29tcGlsYXRpb24gbWVjaGFuaXNtczsgY29tYmluaW5nIGFueSB0d28gb2YgdGhlbVxuICogbGVhdmVzIGJvdGggYWN0aXZlIGF0IG9uY2UgYW5kIHByb2R1Y2VzIGJyb2tlbiBidWlsZHMsIHNvIGl0IGlzIHJlamVjdGVkXG4gKiB1cGZyb250IGJlZm9yZSBhbnkgc2lkZSBlZmZlY3QgKGxpa2UgYXV0by1pbnN0YWxsaW5nIGNhcmdvIGJpbmFyaWVzIG9yXG4gKiBkb3dubG9hZGluZyB0b29sY2hhaW5zKSBoYXBwZW5zLlxuICpcbiAqIGAtLWNyb3NzLWNvbXBpbGVgIHdpdGggYSBgd2luZG93cy1nbnVgIHRhcmdldCBpcyByZWplY3RlZCBhcyB3ZWxsOiBvbiBhXG4gKiBub24tV2luZG93cyBob3N0IGl0IHJvdXRlcyB0aGUgYnVpbGQgdG8gYGNhcmdvIHh3aW4gYnVpbGRgLCBidXRcbiAqIGBjYXJnby14d2luYCBvbmx5IHNldHMgdXAgTVNWQyB0b29sY2hhaW5zIOKAlCBmb3IgYHdpbmRvd3MtZ251YCB0YXJnZXRzIGl0XG4gKiBzaWxlbnRseSBkb2VzIG5vdGhpbmcgYW5kIHRoZSBidWlsZCBkaWVzIG11Y2ggbGF0ZXIgd2l0aCBhIGNyeXB0aWNcbiAqIGBgZXJyb3I6IGxpbmtlciBgeDg2XzY0LXc2NC1taW5ndzMyLWdjY2Agbm90IGZvdW5kYGAgdGhhdCBuZXZlciBtZW50aW9uc1xuICogYGNhcmdvLXh3aW5gLiBPbmx5IGFuIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHRhcmdldCAoYC0tdGFyZ2V0YCBvclxuICogYENBUkdPX0JVSUxEX1RBUkdFVGApIGlzIGluc3BlY3RlZCwgc28gdGhpcyB2YWxpZGF0aW9uIG5ldmVyIGhhcyB0byBzcGF3blxuICogYHJ1c3RjIC12VmA7IGEgbm9uLVdpbmRvd3MgaG9zdCdzIGRlZmF1bHQgdGFyZ2V0IGNhbiBuZXZlciBiZVxuICogYHdpbmRvd3MtZ251YCBhbnl3YXkuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZhbGlkYXRlQ3Jvc3NDb21waWxlRmxhZ3Mob3B0aW9uczoge1xuICAgIHVzZUNyb3NzPzogYm9vbGVhbjtcbiAgICBjcm9zc0NvbXBpbGU/OiBib29sZWFuO1xuICAgIHVzZU5hcGlDcm9zcz86IGJvb2xlYW47XG4gICAgd2F0Y2g/OiBib29sZWFuO1xuICAgIHRhcmdldD86IHN0cmluZztcbn0sIGhvc3RQbGF0Zm9ybT86IHN0cmluZyk6IHZvaWQ7XG4vKipcbiAqIFZhbGlkYXRlIHRoYXQgYC0tdXNlLW5hcGktY3Jvc3NgIGNhbiBhY3R1YWxseSBoYW5kbGUgdGhlIHJlcXVlc3RlZCB0YXJnZXRcbiAqIG9uIHRoZSBjdXJyZW50IGhvc3QuIFRoZSBzdXBwb3J0ZWQgdGFyZ2V0IHNldCBpcyByZWFkIGZyb20gdGhlXG4gKiBgQG5hcGktcnMvY3Jvc3MtdG9vbGNoYWluYCBwYWNrYWdlLCBhbmQgdGhlIHByZS1idWlsdCB0b29sY2hhaW5zIG9ubHkgcnVuXG4gKiBvbiBMaW51eCB4NjQgYW5kIExpbnV4IGFybTY0IGhvc3RzLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2YWxpZGF0ZU5hcGlDcm9zc1N1cHBvcnQodGFyZ2V0VHJpcGxlOiBzdHJpbmcsIGhvc3RQbGF0Zm9ybT86IHN0cmluZywgaG9zdEFyY2g/OiBzdHJpbmcpOiB2b2lkO1xuLyoqXG4gKiBDb21wdXRlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCByb3V0ZSBhIGAtLXVzZS1uYXBpLWNyb3NzYCBidWlsZFxuICogdGhyb3VnaCB0aGUgYEBuYXBpLXJzL2Nyb3NzLXRvb2xjaGFpbmAgdG9vbGNoYWluIGV4dHJhY3RlZCBhdFxuICogYHRvb2xjaGFpblBhdGhgLlxuICpcbiAqIEZvbGxvd3MgdGhlIHNhbWUgcnVsZSBhcyBgQnVpbGRlciNzZXRFbnZJZk5vdEV4aXN0c2A6IGEgdmFyaWFibGUgdGhlIHVzZXJcbiAqIGFscmVhZHkgc2V0IGluIGBlbnZgIHdpbnMgYW5kIGlzIG5vdCByZXR1cm5lZCwgYW5kIGEgcHJlc2VudC1idXQtZW1wdHlcbiAqIHZhcmlhYmxlIGNvdW50cyBhcyB1bnNldCAoZmFsc3kgc2VtYW50aWNzKS4gVGhlIG9ubHkgZXhjZXB0aW9ucyBhcmUgdGhlXG4gKiBjbGFuZy1zcGVjaWZpYyBgVEFSR0VUX0NGTEFHU2AvYFRBUkdFVF9DWFhGTEFHU2AsIHdoaWNoIHByZXBlbmQgdGhlIHN5c3Jvb3RcbiAqIGZsYWdzIHRvIHRoZSB1c2VyJ3MgdmFsdWUsIGFuZCBgUEFUSGAsIHdoaWNoIGFsd2F5cyBnZXRzIHRoZSB0b29sY2hhaW5cbiAqIGBiaW5gIGRpcmVjdG9yeSBwcmVwZW5kZWQuXG4gKlxuICogRXhwb3J0ZWQgZm9yIHRlc3RzLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBuYXBpQ3Jvc3NUb29sY2hhaW5FbnZzKHRvb2xjaGFpblBhdGg6IHN0cmluZywgdGFyZ2V0VHJpcGxlOiBzdHJpbmcsIGVudj86IE5vZGVKUy5Qcm9jZXNzRW52KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZlcmlmeVdhc2lSZWFjdG9yKHdhc21QYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGludGVyZmFjZSBXcml0ZUpzQmluZGluZ09wdGlvbnMge1xuICAgIHBsYXRmb3JtPzogYm9vbGVhbjtcbiAgICBub0pzQmluZGluZz86IGJvb2xlYW47XG4gICAgaWRlbnRzOiBzdHJpbmdbXTtcbiAgICBqc0JpbmRpbmc/OiBzdHJpbmc7XG4gICAgZm9ybWF0PzogQnVpbGRGb3JtYXQ7XG4gICAgZXNtPzogYm9vbGVhbjtcbiAgICBjb21tb25qcz86IGJvb2xlYW47XG4gICAgYmluYXJ5TmFtZTogc3RyaW5nO1xuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIG91dHB1dERpcjogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIGBwbGF0Zm9ybUFyY2hBQklgcyBvZiB0aGUgZGVjbGFyZWQgV0FTSSB0YXJnZXRzIGluIGZhbGxiYWNrIHByZWZlcmVuY2VcbiAgICAgKiBvcmRlciAodGhyZWFkZWQgZmlyc3QpLiBEZWZhdWx0cyB0byB0aGUgbGVnYWN5IGBbJ3dhc20zMi13YXNpJ11gIGNoYWluXG4gICAgICogd2hlbiBvbWl0dGVkIG9yIGVtcHR5LiBHZW5lcmF0ZWQgbG9hZGVycyBleHBvc2UgdGhlc2UgZXhhY3QgaWRlbnRpdGllc1xuICAgICAqIHRocm91Z2ggYE5BUElfUlNfV0FTSV9GTEFWT1JgLlxuICAgICAqL1xuICAgIHdhc2lGbGF2b3JzPzogc3RyaW5nW107XG59XG4vKiogV3JpdGUgYSBwbGF0Zm9ybSBiaW5kaW5nIGxvYWRlciBpbiB0aGUgcmVxdWVzdGVkIG1vZHVsZSBmb3JtYXQuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB3cml0ZUpzQmluZGluZyhvcHRpb25zOiBXcml0ZUpzQmluZGluZ09wdGlvbnMpOiBQcm9taXNlPE91dHB1dCB8IHVuZGVmaW5lZD47XG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlVHlwZURlZk9wdGlvbnMge1xuICAgIHR5cGVEZWZEaXI6IHN0cmluZztcbiAgICBub0R0c0hlYWRlcj86IGJvb2xlYW47XG4gICAgZHRzSGVhZGVyPzogc3RyaW5nO1xuICAgIGR0c0hlYWRlckZpbGU/OiBzdHJpbmc7XG4gICAgY29uZmlnRHRzSGVhZGVyPzogc3RyaW5nO1xuICAgIGNvbmZpZ0R0c0hlYWRlckZpbGU/OiBzdHJpbmc7XG4gICAgY29uc3RFbnVtPzogYm9vbGVhbjtcbiAgICBydW50aW1lU3RyaW5nRW51bT86IGJvb2xlYW47XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogRGVjbGFyZSB0aGUgZ2VuZXJhdGVkIGxvYWRlcidzIGBfX25hcGlCaW5kaW5nVGFyZ2V0YCBleHBvcnQuIFNldCBpdCBmb3JcbiAgICAgKiBidWlsZHMgdGhhdCBlbWl0IGEgbG9hZGVyOyBhIGJ1aWxkIHRoYXQgZW1pdHMgbm9uZSBkZWNsYXJlcyBub3RoaW5nLiBUaGVcbiAgICAgKiBkZWNsYXJlZCB1bmlvbiBjb3ZlcnMgZXZlcnkgYXJ0aWZhY3QgYSBsb2FkZXIgY2FuIGhhbmQgYmFjaywgbm90IG9ubHkgdGhlXG4gICAgICogdGFyZ2V0cyB0aGlzIHBhY2thZ2UgYnVpbGRzIOKAlCBzZWUge0BsaW5rIEJJTkRJTkdfVEFSR0VUX1RZUEVfVU5JT059LlxuICAgICAqXG4gICAgICogV2hldGhlciB0aGUgcm9vdCBsb2FkZXIgaXMgd3JpdHRlbiBkZXBlbmRzIG9uIHRoZSBleHBvcnRzIHRoaXMgYnVpbGRcbiAgICAgKiBwcm9kdWNlZCwgd2hpY2ggb25seSB0eXBlZ2VuIGtub3dzLCBzbyBhIHByZWRpY2F0ZSBtYXkgYmUgcGFzc2VkIGluc3RlYWRcbiAgICAgKiBvZiBhIGZsYWc7IGl0IGlzIGNhbGxlZCB3aXRoIHRoZSBnZW5lcmF0ZWQgZXhwb3J0IGxpc3QuIFNlZVxuICAgICAqIHtAbGluayBiaW5kaW5nVGFyZ2V0RGVjbGFyYXRpb25QcmVkaWNhdGV9LlxuICAgICAqL1xuICAgIGRlY2xhcmVCaW5kaW5nVGFyZ2V0PzogYm9vbGVhbiB8ICgoZXhwb3J0czogcmVhZG9ubHkgc3RyaW5nW10pID0+IGJvb2xlYW4pO1xufVxuLyoqXG4gKiBXYWxrIHRoZSBuYXBpLWRlcml2ZSBpbnRlcm1lZGlhdGUgdHlwZS1kZWYgZGlyZWN0b3J5LCByZW5kZXIgZXZlcnkgZW50cnlcbiAqIGludG8gVHlwZVNjcmlwdCB2aWEge0BsaW5rIHByb2Nlc3NUeXBlRGVmfSwgYW5kIHJldHVybiB0aGUgY29uY2F0ZW5hdGVkXG4gKiBgLmQudHNgIHNvdXJjZSBwbHVzIHRoZSBsaXN0IG9mIGlkZW50aWZpZXJzIHRvIHJlLWV4cG9ydCBmcm9tXG4gKiBgaW5kZXguanNgLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZW5lcmF0ZVR5cGVEZWYob3B0aW9uczogR2VuZXJhdGVUeXBlRGVmT3B0aW9ucyk6IFByb21pc2U8e1xuICAgIGV4cG9ydHM6IHN0cmluZ1tdO1xuICAgIGR0czogc3RyaW5nO1xuICAgIGR0c1dpdGhUeXBlSW1wb3J0czogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBgLmQudHNgIGhlYWRlciBhcyByZW5kZXJlZCwgYmVmb3JlIGFueXRoaW5nIHRoZSBnZW5lcmF0ZWQgYm9keSBuZWVkc1xuICAgICAqIHdhcyBhcHBlbmRlZCB0byBpdC4gYGVuc3VyZUJpbmRpbmdUYXJnZXREZWNsYXJhdGlvbmAgdGFrZXMgaXQgdG8gdGVsbCBhXG4gICAgICogZGVjbGFyYXRpb24gdGhlIGhlYWRlciBvd25zIGZyb20gb25lIHRoaXMgYnVpbGQgd3JvdGUuXG4gICAgICovXG4gICAgaGVhZGVyOiBzdHJpbmc7XG59PjtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjbGlwYW5pb24nO1xuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgQmFzZUNyZWF0ZU5wbURpcnNDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICBjd2Q6IHN0cmluZztcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICAgICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgICAgIGRyeVJ1bjogYm9vbGVhbjtcbiAgICB9O1xufVxuLyoqXG4gKiBDcmVhdGUgbnBtIHBhY2thZ2UgZGlycyBmb3IgZGlmZmVyZW50IHBsYXRmb3Jtc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU5wbURpcnNPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBEcnkgcnVuIHdpdGhvdXQgdG91Y2hpbmcgZmlsZSBzeXN0ZW1cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgZHJ5UnVuPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdENyZWF0ZU5wbURpcnNPcHRpb25zKG9wdGlvbnM6IENyZWF0ZU5wbURpcnNPcHRpb25zKToge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgIGRyeVJ1bjogYm9vbGVhbjtcbn07XG4iLCJpbXBvcnQgeyB0eXBlIENyZWF0ZU5wbURpcnNPcHRpb25zIH0gZnJvbSAnLi4vZGVmL2NyZWF0ZS1ucG0tZGlycy5qcyc7XG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2VNZXRhIHtcbiAgICAnZGlzdC10YWdzJzoge1xuICAgICAgICBbaW5kZXg6IHN0cmluZ106IHN0cmluZztcbiAgICB9O1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlTnBtRGlycyh1c2VyT3B0aW9uczogQ3JlYXRlTnBtRGlyc09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlTmV3Q29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICAkJHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAkJG5hbWU/OiBzdHJpbmc7XG4gICAgbWluTm9kZUFwaVZlcnNpb246IG51bWJlcjtcbiAgICBwYWNrYWdlTWFuYWdlcjogc3RyaW5nO1xuICAgIGxpY2Vuc2U6IHN0cmluZztcbiAgICB0YXJnZXRzOiBzdHJpbmdbXTtcbiAgICBlbmFibGVEZWZhdWx0VGFyZ2V0czogYm9vbGVhbjtcbiAgICBlbmFibGVBbGxUYXJnZXRzOiBib29sZWFuO1xuICAgIGVuYWJsZVR5cGVEZWY6IGJvb2xlYW47XG4gICAgZW5hYmxlR2l0aHViQWN0aW9uczogYm9vbGVhbjtcbiAgICB0ZXN0RnJhbWV3b3JrOiBzdHJpbmc7XG4gICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICBwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbWluTm9kZUFwaVZlcnNpb246IG51bWJlcjtcbiAgICAgICAgcGFja2FnZU1hbmFnZXI6IHN0cmluZztcbiAgICAgICAgbGljZW5zZTogc3RyaW5nO1xuICAgICAgICB0YXJnZXRzOiBzdHJpbmdbXTtcbiAgICAgICAgZW5hYmxlRGVmYXVsdFRhcmdldHM6IGJvb2xlYW47XG4gICAgICAgIGVuYWJsZUFsbFRhcmdldHM6IGJvb2xlYW47XG4gICAgICAgIGVuYWJsZVR5cGVEZWY6IGJvb2xlYW47XG4gICAgICAgIGVuYWJsZUdpdGh1YkFjdGlvbnM6IGJvb2xlYW47XG4gICAgICAgIHRlc3RGcmFtZXdvcms6IHN0cmluZztcbiAgICAgICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIH07XG59XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBwcm9qZWN0IHdpdGggcHJlLWNvbmZpZ3VyZWQgYm9pbGVycGxhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXdPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGF0aCB3aGVyZSB0aGUgTkFQSS1SUyBwcm9qZWN0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICAgKi9cbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0LCBkZWZhdWx0IHRvIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgaWYgbm90IHByb3ZpZGVkXG4gICAgICovXG4gICAgbmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSBOb2RlLUFQSSB2ZXJzaW9uIHRvIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDRcbiAgICAgKi9cbiAgICBtaW5Ob2RlQXBpVmVyc2lvbj86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gT25seSBzdXBwb3J0IHlhcm4gNC54IGZvciBub3cuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAneWFybidcbiAgICAgKi9cbiAgICBwYWNrYWdlTWFuYWdlcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBMaWNlbnNlIGZvciBvcGVuLXNvdXJjZWQgcHJvamVjdFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ01JVCdcbiAgICAgKi9cbiAgICBsaWNlbnNlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFsbCB0YXJnZXRzIHRoZSBjcmF0ZSB3aWxsIGJlIGNvbXBpbGVkIGZvci5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFtdXG4gICAgICovXG4gICAgdGFyZ2V0cz86IHN0cmluZ1tdO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZW5hYmxlIGRlZmF1bHQgdGFyZ2V0c1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGVuYWJsZURlZmF1bHRUYXJnZXRzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGVuYWJsZSBhbGwgdGFyZ2V0c1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBlbmFibGVBbGxUYXJnZXRzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGVuYWJsZSB0aGUgYHR5cGUtZGVmYCBmZWF0dXJlIGZvciB0eXBlc2NyaXB0IGRlZmluaXRpb25zIGF1dG8tZ2VuZXJhdGlvblxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGVuYWJsZVR5cGVEZWY/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZ2VuZXJhdGUgcHJlY29uZmlndXJlZCBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvd1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGVuYWJsZUdpdGh1YkFjdGlvbnM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSBKYXZhU2NyaXB0IHRlc3QgZnJhbWV3b3JrIHRvIHVzZSwgb25seSBzdXBwb3J0IGBhdmFgIGZvciBub3dcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdhdmEnXG4gICAgICovXG4gICAgdGVzdEZyYW1ld29yaz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHJ1biB0aGUgY29tbWFuZCBpbiBkcnktcnVuIG1vZGVcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgZHJ5UnVuPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdE5ld09wdGlvbnMob3B0aW9uczogTmV3T3B0aW9ucyk6IHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGF0aCB3aGVyZSB0aGUgTkFQSS1SUyBwcm9qZWN0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICAgKi9cbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0LCBkZWZhdWx0IHRvIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgaWYgbm90IHByb3ZpZGVkXG4gICAgICovXG4gICAgbmFtZT86IHN0cmluZztcbiAgICBtaW5Ob2RlQXBpVmVyc2lvbjogbnVtYmVyO1xuICAgIHBhY2thZ2VNYW5hZ2VyOiBzdHJpbmc7XG4gICAgbGljZW5zZTogc3RyaW5nO1xuICAgIHRhcmdldHM6IHN0cmluZ1tdO1xuICAgIGVuYWJsZURlZmF1bHRUYXJnZXRzOiBib29sZWFuO1xuICAgIGVuYWJsZUFsbFRhcmdldHM6IGJvb2xlYW47XG4gICAgZW5hYmxlVHlwZURlZjogYm9vbGVhbjtcbiAgICBlbmFibGVHaXRodWJBY3Rpb25zOiBib29sZWFuO1xuICAgIHRlc3RGcmFtZXdvcms6IHN0cmluZztcbiAgICBkcnlSdW46IGJvb2xlYW47XG59O1xuIiwiaW1wb3J0IHsgdHlwZSBOZXdPcHRpb25zIGFzIFJhd05ld09wdGlvbnMgfSBmcm9tICcuLi9kZWYvbmV3LmpzJztcbnR5cGUgTmV3T3B0aW9ucyA9IFJlcXVpcmVkPFJhd05ld09wdGlvbnM+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgR0VORVJBVEVEX1dBU0lfQklORElORzogUmVnRXhwO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXBkYXRlQ2FyZ29Ub21sTm9kZUFwaVZlcnNpb24oZmlsZVBhdGg6IHN0cmluZywgbWluTm9kZUFwaVZlcnNpb246IG51bWJlcik6IFByb21pc2U8dm9pZD47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBuZXdQcm9qZWN0KHVzZXJPcHRpb25zOiBSYXdOZXdPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCB0eXBlIHsgTmV3T3B0aW9ucyB9O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlUHJlUHVibGlzaENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICB0YWdTdHlsZTogc3RyaW5nO1xuICAgIGdoUmVsZWFzZTogYm9vbGVhbjtcbiAgICBnaFJlbGVhc2VOYW1lPzogc3RyaW5nO1xuICAgIGdoUmVsZWFzZUlkPzogc3RyaW5nO1xuICAgIHNraXBPcHRpb25hbFB1Ymxpc2g6IGJvb2xlYW47XG4gICAgcm9vdFB1Ymxpc2hlcj86ICducG0nIHwgJ3BucG0nIHwgJ3lhcm4nIHwgJ3lhcm4tY2xhc3NpYyc7XG4gICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICBjd2Q6IHN0cmluZztcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICAgICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgICAgIHRhZ1N0eWxlOiBzdHJpbmc7XG4gICAgICAgIGdoUmVsZWFzZTogYm9vbGVhbjtcbiAgICAgICAgZ2hSZWxlYXNlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBnaFJlbGVhc2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBza2lwT3B0aW9uYWxQdWJsaXNoOiBib29sZWFuO1xuICAgICAgICByb290UHVibGlzaGVyOiBcInlhcm5cIiB8IFwicG5wbVwiIHwgXCJucG1cIiB8IFwieWFybi1jbGFzc2ljXCIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGRyeVJ1bjogYm9vbGVhbjtcbiAgICB9O1xufVxuLyoqXG4gKiBVcGRhdGUgcGFja2FnZS5qc29uIGFuZCBjb3B5IGFkZG9ucyBpbnRvIHBlciBwbGF0Zm9ybSBwYWNrYWdlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZVB1Ymxpc2hPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBnaXQgdGFnIHN0eWxlLCBgbnBtYCBvciBgbGVybmFgXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbGVybmEnXG4gICAgICovXG4gICAgdGFnU3R5bGU/OiAnbnBtJyB8ICdsZXJuYSc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBjcmVhdGUgR2l0SHViIHJlbGVhc2VcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBnaFJlbGVhc2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEdpdEh1YiByZWxlYXNlIG5hbWVcbiAgICAgKi9cbiAgICBnaFJlbGVhc2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEV4aXN0aW5nIEdpdEh1YiByZWxlYXNlIGlkXG4gICAgICovXG4gICAgZ2hSZWxlYXNlSWQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBza2lwIG9wdGlvbmFsRGVwZW5kZW5jaWVzIHBhY2thZ2VzIHB1Ymxpc2hcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgc2tpcE9wdGlvbmFsUHVibGlzaD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIHBhY2thZ2UgbWFuYWdlciB0aGF0IHB1Ymxpc2hlcyB0aGUgcm9vdCBwYWNrYWdlLiBwbnBtIGFuZCB5YXJuIGJlcnJ5IHJlcGxhY2UgYGV4cG9ydHNgIHdpdGggYHB1Ymxpc2hDb25maWcuZXhwb3J0c2Agd2hpbGUgcGFja2luZywgc28gZm9yIHRoZW0gdGhlIHJvb3QgcGFja2FnZSB2YWxpZGF0aW9uIHRhcmdldHMgdGhlIHB1Ymxpc2gtZWZmZWN0aXZlIGV4cG9ydCBtYXAuIERlZmF1bHRzIHRvIHRoZSBgbmFwaS5yb290UHVibGlzaGVyYCBjb25maWcgZmllbGQsIGFuZCB2YWxpZGF0ZXMgYm90aCBleHBvcnQgbWFwcyB3aGVuIG5laXRoZXIgaXMgc2V0XG4gICAgICovXG4gICAgcm9vdFB1Ymxpc2hlcj86ICducG0nIHwgJ3BucG0nIHwgJ3lhcm4nIHwgJ3lhcm4tY2xhc3NpYyc7XG4gICAgLyoqXG4gICAgICogRHJ5IHJ1biB3aXRob3V0IHRvdWNoaW5nIGZpbGUgc3lzdGVtXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIGRyeVJ1bj86IGJvb2xlYW47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRQcmVQdWJsaXNoT3B0aW9ucyhvcHRpb25zOiBQcmVQdWJsaXNoT3B0aW9ucyk6IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICB0YWdTdHlsZTogc3RyaW5nO1xuICAgIGdoUmVsZWFzZTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBHaXRIdWIgcmVsZWFzZSBuYW1lXG4gICAgICovXG4gICAgZ2hSZWxlYXNlTmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBFeGlzdGluZyBHaXRIdWIgcmVsZWFzZSBpZFxuICAgICAqL1xuICAgIGdoUmVsZWFzZUlkPzogc3RyaW5nO1xuICAgIHNraXBPcHRpb25hbFB1Ymxpc2g6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIHBhY2thZ2UgbWFuYWdlciB0aGF0IHB1Ymxpc2hlcyB0aGUgcm9vdCBwYWNrYWdlLiBwbnBtIGFuZCB5YXJuIGJlcnJ5IHJlcGxhY2UgYGV4cG9ydHNgIHdpdGggYHB1Ymxpc2hDb25maWcuZXhwb3J0c2Agd2hpbGUgcGFja2luZywgc28gZm9yIHRoZW0gdGhlIHJvb3QgcGFja2FnZSB2YWxpZGF0aW9uIHRhcmdldHMgdGhlIHB1Ymxpc2gtZWZmZWN0aXZlIGV4cG9ydCBtYXAuIERlZmF1bHRzIHRvIHRoZSBgbmFwaS5yb290UHVibGlzaGVyYCBjb25maWcgZmllbGQsIGFuZCB2YWxpZGF0ZXMgYm90aCBleHBvcnQgbWFwcyB3aGVuIG5laXRoZXIgaXMgc2V0XG4gICAgICovXG4gICAgcm9vdFB1Ymxpc2hlcj86IFwibnBtXCIgfCBcInBucG1cIiB8IFwieWFyblwiIHwgXCJ5YXJuLWNsYXNzaWNcIjtcbiAgICBkcnlSdW46IGJvb2xlYW47XG59O1xuIiwiaW1wb3J0IHsgdHlwZSBQcmVQdWJsaXNoT3B0aW9ucyB9IGZyb20gJy4uL2RlZi9wcmUtcHVibGlzaC5qcyc7XG5pbXBvcnQgeyB0eXBlIENvbW1vblBhY2thZ2VKc29uRmllbGRzLCB0eXBlIFJvb3RQdWJsaXNoZXIsIHR5cGUgVGFyZ2V0LCB0eXBlIFVzZXJOYXBpQ29uZmlnIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuLyoqXG4gKiBCdWlsZCB0aGUgcm9vdCBwYWNrYWdlJ3MgYG9wdGlvbmFsRGVwZW5kZW5jaWVzYCBtYXAuXG4gKlxuICogQSBXQVNJIHBhY2thZ2UgaXMgYSBmYWxsYmFjayBmb3IgaG9zdHMgdGhhdCBjYW5ub3QgbG9hZCBhIGAubm9kZWAgYmluYXJ5LCBhbmRcbiAqIHRoZSBnZW5lcmF0ZWQgYmluZGluZyBsb2FkZXIgc2VsZWN0cyBpdCBhdCByZXF1aXJlIHRpbWUgcmF0aGVyIHRoYW4gbnBtXG4gKiBzZWxlY3RpbmcgaXQgYXQgaW5zdGFsbCB0aW1lLiBEZWNsYXJpbmcgaXQgYXMgYW4gYG9wdGlvbmFsRGVwZW5kZW5jeWBcbiAqIGFsb25nc2lkZSB0aGUgbmF0aXZlIHBhY2thZ2VzIGNhbm5vdCBleHByZXNzIFwiaW5zdGFsbCB0aGlzIG9ubHkgd2hlbiBub3RoaW5nXG4gKiBlbHNlIG1hdGNoZWRcIjogbnBtIGV2YWx1YXRlcyBldmVyeSBlbnRyeSBpbmRlcGVuZGVudGx5LCBzbyBldmVyeSBjb25zdW1lclxuICogZG93bmxvYWRzIGEgYC53YXNtYCBiaW5hcnkgdGhleSB3aWxsIG5ldmVyIGxvYWQuXG4gKlxuICogSXQgaXMgdGhlcmVmb3JlIG9ubHkgZGVjbGFyZWQgd2hlbiBXQVNJIGlzIHRoZSBvbmx5IGNvbmZpZ3VyZWQgdGFyZ2V0LCB3aGljaFxuICogbWFrZXMgaXQgdGhlIHByaW1hcnkgYXJ0aWZhY3QgcmF0aGVyIHRoYW4gYSBmYWxsYmFjay5cbiAqIGBuYXBpLndhc20ub3B0aW9uYWxEZXBlbmRlbmN5YCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgaW4gYm90aCBkaXJlY3Rpb25zLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcm9sbGRvd24vcm9sbGRvd24vaXNzdWVzLzEwNTU2XG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlc29sdmVSb290T3B0aW9uYWxEZXBlbmRlbmNpZXMoeyBleGlzdGluZywgbWFuYWdlZFBhY2thZ2VOYW1lcywgcGFja2FnZU5hbWUsIHRhcmdldHMsIHZlcnNpb24sIHdhc20sIH06IHtcbiAgICBleGlzdGluZzogdW5rbm93bjtcbiAgICBtYW5hZ2VkUGFja2FnZU5hbWVzOiBJdGVyYWJsZTxzdHJpbmc+O1xuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG4gICAgdGFyZ2V0czogVGFyZ2V0W107XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIHdhc20/OiBVc2VyTmFwaUNvbmZpZ1snd2FzbSddO1xufSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcHJlUHVibGlzaCh1c2VyT3B0aW9uczogUHJlUHVibGlzaE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuaW50ZXJmYWNlIFRocmVhZGxlc3NXYXNpUm9vdEZhY2FkZSB7XG4gICAgZXhwb3J0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcHVibGlzaENvbmZpZ0V4cG9ydHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBnZW5lcmF0ZWRGaWxlczogc3RyaW5nW107XG4gICAgZmlsZXM6IFRocmVhZGxlc3NXYXNpUm9vdEZhY2FkZUZpbGVzO1xuICAgIHdhc21Tb3VyY2VQYXRoOiBzdHJpbmc7XG4gICAgbWFya2VyOiBzdHJpbmc7XG4gICAgZm9yd2FyZGluZ01vZHVsZTogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uVXBkYXRlOiB7XG4gICAgICAgIGZpbGVzPzogc3RyaW5nW107XG4gICAgfTtcbn1cbmludGVyZmFjZSBUaHJlYWRsZXNzV2FzaVJvb3RGYWNhZGVGaWxlcyB7XG4gICAgd29ya2VyZEVudHJ5OiBzdHJpbmc7XG4gICAgd29ya2VyZFR5cGVEZWY6IHN0cmluZztcbiAgICB3YXNtRW50cnk6IHN0cmluZztcbiAgICB3YXNtVHlwZURlZjogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcm9vdFB1Ymxpc2hlclJld3JpdGVzUm9vdEV4cG9ydHMocm9vdFB1Ymxpc2hlcjogUm9vdFB1Ymxpc2hlciB8IHVuZGVmaW5lZCk6IGJvb2xlYW47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZXNvbHZlUm9vdFB1Ymxpc2hlcihvcHRpb25WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb25maWdWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUm9vdFB1Ymxpc2hlciB8IHVuZGVmaW5lZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHNuaWZmUmV3cml0aW5nUHVibGlzaGVyRnJvbVVzZXJBZ2VudCh1c2VyQWdlbnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQpOiAncG5wbScgfCAneWFybicgfCB1bmRlZmluZWQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByb290UHVibGlzaGVySGludChyb290UHVibGlzaGVyOiBSb290UHVibGlzaGVyIHwgdW5kZWZpbmVkLCB1c2VyQWdlbnQ/OiBzdHJpbmcpOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb2xsZWN0Um9vdFBhY2thZ2VQYXRoUmVmZXJlbmNlcyhwYWNrYWdlSnNvbjogQ29tbW9uUGFja2FnZUpzb25GaWVsZHMsIHJvb3RQdWJsaXNoZXI/OiBSb290UHVibGlzaGVyKTogc3RyaW5nW107XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXJzZU5wbVBhY2tGaWxlcyhvdXRwdXQ6IHN0cmluZyk6IFNldDxzdHJpbmc+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmFsaWRhdGVSb290RmFjYWRlUGFja2xpc3Qocm9vdERpcjogc3RyaW5nLCByb290UGFja2FnZUZpbGVzOiBzdHJpbmdbXSwgcm9vdFB1Ymxpc2hlcj86IFJvb3RQdWJsaXNoZXIpOiB2b2lkO1xuaW50ZXJmYWNlIFJvb3RSZWxlYXNlTWF0ZXJpYWxpemF0aW9uUGxhbiB7XG4gICAgcGFja2FnZUpzb246IENvbW1vblBhY2thZ2VKc29uRmllbGRzO1xuICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBub2RlRW5naW5lPzogc3RyaW5nO1xuICAgIGZhY2FkZT86IFRocmVhZGxlc3NXYXNpUm9vdEZhY2FkZTtcbiAgICBzdGFsZUdlbmVyYXRlZEZpbGVzOiBzdHJpbmdbXTtcbiAgICByb290UHVibGlzaGVyPzogUm9vdFB1Ymxpc2hlcjtcbn1cbmludGVyZmFjZSBSZWxlYXNlUGFja2FnZVZhbGlkYXRpb25PcHRpb25zIHtcbiAgICBwa2dEaXI6IHN0cmluZztcbiAgICByb290RGlyOiBzdHJpbmc7XG4gICAgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgICBiaW5hcnlOYW1lOiBzdHJpbmc7XG4gICAgdGFyZ2V0OiBUYXJnZXQ7XG4gICAgcmVxdWlyZURpcmVjdEJ1ZmZlckRlcGVuZGVuY3k6IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgUmVsZWFzZVBhY2thZ2VNYXRlcmlhbGl6YXRpb25QbGFuIHtcbiAgICB0YXJnZXQ6IFRhcmdldDtcbiAgICBwa2dEaXI6IHN0cmluZztcbiAgICByb290RGlyOiBzdHJpbmc7XG4gICAgc3RhZ2VkUGtnRGlyPzogc3RyaW5nO1xuICAgIHBhY2thZ2VGaWxlczogc3RyaW5nW107XG4gICAgZGVjbGFyYXRpb25EZXBlbmRlbmNpZXM6IHN0cmluZ1tdO1xuICAgIHVwZGF0ZU1hbmlmZXN0OiBib29sZWFuO1xufVxuaW50ZXJmYWNlIENvbW1pdFByZVB1Ymxpc2hGaWxlU3lzdGVtVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICByZWxlYXNlUGFja2FnZVBsYW5zOiBSZWxlYXNlUGFja2FnZU1hdGVyaWFsaXphdGlvblBsYW5bXTtcbiAgICByb290RGlyOiBzdHJpbmc7XG4gICAgcm9vdFJlbGVhc2VQbGFuOiBSb290UmVsZWFzZU1hdGVyaWFsaXphdGlvblBsYW47XG4gICAgc3RhZ2VkUm9vdE1hbmlmZXN0UGF0aD86IHN0cmluZztcbiAgICBzdGFnZWRSb290RGlyOiBzdHJpbmc7XG4gICAgdHJhbnNhY3Rpb25Sb290Pzogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29tbWl0UHJlUHVibGlzaEZpbGVTeXN0ZW1UcmFuc2FjdGlvbih7IHBhY2thZ2VKc29uUGF0aCwgcmVsZWFzZVBhY2thZ2VQbGFucywgcm9vdERpciwgcm9vdFJlbGVhc2VQbGFuLCBzdGFnZWRSb290RGlyLCBzdGFnZWRSb290TWFuaWZlc3RQYXRoLCB0cmFuc2FjdGlvblJvb3QsIH06IENvbW1pdFByZVB1Ymxpc2hGaWxlU3lzdGVtVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZhbGlkYXRlUmVsZWFzZVBhY2thZ2VDb250ZW50cyh7IHBrZ0Rpciwgcm9vdERpciwgcGFja2FnZU5hbWUsIGJpbmFyeU5hbWUsIHRhcmdldCwgcmVxdWlyZURpcmVjdEJ1ZmZlckRlcGVuZGVuY3ksIH06IFJlbGVhc2VQYWNrYWdlVmFsaWRhdGlvbk9wdGlvbnMpOiBQcm9taXNlPHtcbiAgICBwYWNrYWdlRmlsZXM6IHN0cmluZ1tdO1xuICAgIGRlY2xhcmF0aW9uRGVwZW5kZW5jaWVzOiBzdHJpbmdbXTtcbiAgICB1cGRhdGVNYW5pZmVzdDogYm9vbGVhbjtcbn0+O1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlUmVuYW1lQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgICQkbmFtZT86IHN0cmluZztcbiAgICBiaW5hcnlOYW1lPzogc3RyaW5nO1xuICAgIHBhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIG1hbmlmZXN0UGF0aDogc3RyaW5nO1xuICAgIHJlcG9zaXRvcnk/OiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBucG1EaXI6IHN0cmluZztcbiAgICAgICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBiaW5hcnlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG1hbmlmZXN0UGF0aDogc3RyaW5nO1xuICAgICAgICByZXBvc2l0b3J5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgfTtcbn1cbi8qKlxuICogUmVuYW1lIHRoZSBOQVBJLVJTIHByb2plY3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5hbWVPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IG5hbWUgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgYmluYXJ5IG5hbWUgKi5ub2RlIGZpbGVzXG4gICAgICovXG4gICAgYmluYXJ5TmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IHBhY2thZ2UgbmFtZSBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIHBhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYENhcmdvLnRvbWxgXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnQ2FyZ28udG9tbCdcbiAgICAgKi9cbiAgICBtYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyByZXBvc2l0b3J5IG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgcmVwb3NpdG9yeT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRSZW5hbWVPcHRpb25zKG9wdGlvbnM6IFJlbmFtZU9wdGlvbnMpOiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyBuYW1lIG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgbmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IGJpbmFyeSBuYW1lICoubm9kZSBmaWxlc1xuICAgICAqL1xuICAgIGJpbmFyeU5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyBwYWNrYWdlIG5hbWUgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBwYWNrYWdlTmFtZT86IHN0cmluZztcbiAgICBtYW5pZmVzdFBhdGg6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IHJlcG9zaXRvcnkgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICByZXBvc2l0b3J5Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgZGVzY3JpcHRpb24gb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG4iLCJpbXBvcnQgeyB0eXBlIFJlbmFtZU9wdGlvbnMgfSBmcm9tICcuLi9kZWYvcmVuYW1lLmpzJztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlbmFtZVByb2plY3QodXNlck9wdGlvbnM6IFJlbmFtZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlVW5pdmVyc2FsaXplQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG91dHB1dERpcjogc3RyaW5nO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICBjd2Q6IHN0cmluZztcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICAgICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgfTtcbn1cbi8qKlxuICogQ29tYmlsZSBidWlsdCBiaW5hcmllcyBpbnRvIG9uZSB1bml2ZXJzYWwgYmluYXJ5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pdmVyc2FsaXplT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mIHdoZXJlIG5hcGkgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGluLCBhbGwgb3RoZXIgcGF0aHMgb3B0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhpcyBwYXRoXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBwcm9jZXNzLmN3ZCgpXG4gICAgICovXG4gICAgY3dkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYHBhY2thZ2UuanNvbmBcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdwYWNrYWdlLmpzb24nXG4gICAgICovXG4gICAgcGFja2FnZUpzb25QYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gdGhlIGZvbGRlciB3aGVyZSBhbGwgYnVpbHQgYC5ub2RlYCBmaWxlcyBwdXQsIHNhbWUgYXMgYC0tb3V0cHV0LWRpcmAgb2YgYnVpbGQgY29tbWFuZFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJy4vJ1xuICAgICAqL1xuICAgIG91dHB1dERpcj86IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdFVuaXZlcnNhbGl6ZU9wdGlvbnMob3B0aW9uczogVW5pdmVyc2FsaXplT3B0aW9ucyk6IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBvdXRwdXREaXI6IHN0cmluZztcbn07XG4iLCJpbXBvcnQgeyB0eXBlIFVuaXZlcnNhbGl6ZU9wdGlvbnMgfSBmcm9tICcuLi9kZWYvdW5pdmVyc2FsaXplLmpzJztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVuaXZlcnNhbGl6ZUJpbmFyaWVzKHVzZXJPcHRpb25zOiBVbml2ZXJzYWxpemVPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiIsImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjbGlwYW5pb24nO1xuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgQmFzZVZlcnNpb25Db21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBucG1EaXI6IHN0cmluZztcbiAgICB9O1xufVxuLyoqXG4gKiBVcGRhdGUgdmVyc2lvbiBpbiBjcmVhdGVkIG5wbSBwYWNrYWdlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25PcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdFZlcnNpb25PcHRpb25zKG9wdGlvbnM6IFZlcnNpb25PcHRpb25zKToge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xufTtcbiIsImltcG9ydCB7IHR5cGUgVmVyc2lvbk9wdGlvbnMgfSBmcm9tICcuLi9kZWYvdmVyc2lvbi5qcyc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2ZXJzaW9uKHVzZXJPcHRpb25zOiBWZXJzaW9uT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4iLCJpbXBvcnQgeyBCYXNlQXJ0aWZhY3RzQ29tbWFuZCB9IGZyb20gJy4uL2RlZi9hcnRpZmFjdHMuanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgQXJ0aWZhY3RzQ29tbWFuZCBleHRlbmRzIEJhc2VBcnRpZmFjdHNDb21tYW5kIHtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHsgQmFzZUJ1aWxkQ29tbWFuZCB9IGZyb20gJy4uL2RlZi9idWlsZC5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBCdWlsZENvbW1hbmQgZXh0ZW5kcyBCYXNlQnVpbGRDb21tYW5kIHtcbiAgICBwaXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY2FyZ29PcHRpb25zOiBzdHJpbmdbXTtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlQ3JlYXRlTnBtRGlyc0NvbW1hbmQgfSBmcm9tICcuLi9kZWYvY3JlYXRlLW5wbS1kaXJzLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIENyZWF0ZU5wbURpcnNDb21tYW5kIGV4dGVuZHMgQmFzZUNyZWF0ZU5wbURpcnNDb21tYW5kIHtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlTmV3Q29tbWFuZCB9IGZyb20gJy4uL2RlZi9uZXcuanMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZ2V0TmFwaVZlcnNpb25DaG9pY2VzKCk6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmFsdWU6IGltcG9ydChcIi4uL3V0aWxzL3ZlcnNpb24uanNcIikuTmFwaVZlcnNpb247XG59W107XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBOZXdDb21tYW5kIGV4dGVuZHMgQmFzZU5ld0NvbW1hbmQge1xuICAgIGludGVyYWN0aXZlOiBib29sZWFuO1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTwwIHwgMT47XG4gICAgcHJpdmF0ZSBmZXRjaE9wdGlvbnM7XG4gICAgcHJpdmF0ZSBmZXRjaE5hbWU7XG4gICAgcHJpdmF0ZSBmZXRjaExpY2Vuc2U7XG4gICAgcHJpdmF0ZSBmZXRjaE5hcGlWZXJzaW9uO1xuICAgIHByaXZhdGUgZmV0Y2hUYXJnZXRzO1xuICAgIHByaXZhdGUgZmV0Y2hUeXBlRGVmO1xuICAgIHByaXZhdGUgZmV0Y2hHaXRodWJBY3Rpb25zO1xufVxuIiwiaW1wb3J0IHsgQmFzZVByZVB1Ymxpc2hDb21tYW5kIH0gZnJvbSAnLi4vZGVmL3ByZS1wdWJsaXNoLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFByZVB1Ymxpc2hDb21tYW5kIGV4dGVuZHMgQmFzZVByZVB1Ymxpc2hDb21tYW5kIHtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlUmVuYW1lQ29tbWFuZCB9IGZyb20gJy4uL2RlZi9yZW5hbWUuanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgUmVuYW1lQ29tbWFuZCBleHRlbmRzIEJhc2VSZW5hbWVDb21tYW5kIHtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlVW5pdmVyc2FsaXplQ29tbWFuZCB9IGZyb20gJy4uL2RlZi91bml2ZXJzYWxpemUuanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgVW5pdmVyc2FsaXplQ29tbWFuZCBleHRlbmRzIEJhc2VVbml2ZXJzYWxpemVDb21tYW5kIHtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlVmVyc2lvbkNvbW1hbmQgfSBmcm9tICcuLi9kZWYvdmVyc2lvbi5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBWZXJzaW9uQ29tbWFuZCBleHRlbmRzIEJhc2VWZXJzaW9uQ29tbWFuZCB7XG4gICAgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHsgQ2xpIH0gZnJvbSAnY2xpcGFuaW9uJztcbmltcG9ydCB7IGNvbGxlY3RBcnRpZmFjdHMgfSBmcm9tICcuL2FwaS9hcnRpZmFjdHMuanMnO1xuaW1wb3J0IHsgYnVpbGRQcm9qZWN0IH0gZnJvbSAnLi9hcGkvYnVpbGQuanMnO1xuaW1wb3J0IHsgY3JlYXRlTnBtRGlycyB9IGZyb20gJy4vYXBpL2NyZWF0ZS1ucG0tZGlycy5qcyc7XG5pbXBvcnQgeyBuZXdQcm9qZWN0IH0gZnJvbSAnLi9hcGkvbmV3LmpzJztcbmltcG9ydCB7IHByZVB1Ymxpc2ggfSBmcm9tICcuL2FwaS9wcmUtcHVibGlzaC5qcyc7XG5pbXBvcnQgeyByZW5hbWVQcm9qZWN0IH0gZnJvbSAnLi9hcGkvcmVuYW1lLmpzJztcbmltcG9ydCB7IHVuaXZlcnNhbGl6ZUJpbmFyaWVzIH0gZnJvbSAnLi9hcGkvdW5pdmVyc2FsaXplLmpzJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuL2FwaS92ZXJzaW9uLmpzJztcbmltcG9ydCB7IEFydGlmYWN0c0NvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2FydGlmYWN0cy5qcyc7XG5pbXBvcnQgeyBCdWlsZENvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkLmpzJztcbmltcG9ydCB7IENyZWF0ZU5wbURpcnNDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUtbnBtLWRpcnMuanMnO1xuaW1wb3J0IHsgTmV3Q29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvbmV3LmpzJztcbmltcG9ydCB7IFByZVB1Ymxpc2hDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9wcmUtcHVibGlzaC5qcyc7XG5pbXBvcnQgeyBSZW5hbWVDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9yZW5hbWUuanMnO1xuaW1wb3J0IHsgVW5pdmVyc2FsaXplQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvdW5pdmVyc2FsaXplLmpzJztcbmltcG9ydCB7IFZlcnNpb25Db21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy92ZXJzaW9uLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGNsaTogQ2xpPGltcG9ydChcImNsaXBhbmlvblwiKS5CYXNlQ29udGV4dD47XG4vKipcbiAqXG4gKiBAdXNhZ2VcbiAqXG4gKiBgYGB0c1xuICogY29uc3QgY2xpID0gbmV3IE5hcGlDbGkoKVxuICpcbiAqIGNsaS5idWlsZCh7XG4gKiAgIGN3ZDogJy9wYXRoL3RvL3lvdXIvcHJvamVjdCcsXG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIE5hcGlDbGkge1xuICAgIGFydGlmYWN0czogdHlwZW9mIGNvbGxlY3RBcnRpZmFjdHM7XG4gICAgbmV3OiB0eXBlb2YgbmV3UHJvamVjdDtcbiAgICBidWlsZDogdHlwZW9mIGJ1aWxkUHJvamVjdDtcbiAgICBjcmVhdGVOcG1EaXJzOiB0eXBlb2YgY3JlYXRlTnBtRGlycztcbiAgICBwcmVQdWJsaXNoOiB0eXBlb2YgcHJlUHVibGlzaDtcbiAgICByZW5hbWU6IHR5cGVvZiByZW5hbWVQcm9qZWN0O1xuICAgIHVuaXZlcnNhbGl6ZTogdHlwZW9mIHVuaXZlcnNhbGl6ZUJpbmFyaWVzO1xuICAgIHZlcnNpb246IHR5cGVvZiB2ZXJzaW9uO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlQnVpbGRDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogQnVpbGRDb21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlQXJ0aWZhY3RzQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IEFydGlmYWN0c0NvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVDcmVhdGVOcG1EaXJzQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IENyZWF0ZU5wbURpcnNDb21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlUHJlUHVibGlzaENvbW1hbmQoYXJnczogc3RyaW5nW10pOiBQcmVQdWJsaXNoQ29tbWFuZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVJlbmFtZUNvbW1hbmQoYXJnczogc3RyaW5nW10pOiBSZW5hbWVDb21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlVW5pdmVyc2FsaXplQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IFVuaXZlcnNhbGl6ZUNvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVWZXJzaW9uQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IFZlcnNpb25Db21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlTmV3Q29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IE5ld0NvbW1hbmQ7XG5leHBvcnQgeyBwYXJzZVRyaXBsZSB9IGZyb20gJy4vdXRpbHMvdGFyZ2V0LmpzJztcbmV4cG9ydCB7IHR5cGUgR2VuZXJhdGVUeXBlRGVmT3B0aW9ucywgdHlwZSBXcml0ZUpzQmluZGluZ09wdGlvbnMsIHdyaXRlSnNCaW5kaW5nLCBnZW5lcmF0ZVR5cGVEZWYsIH0gZnJvbSAnLi9hcGkvYnVpbGQuanMnO1xuZXhwb3J0IHsgcmVhZE5hcGlDb25maWcgfSBmcm9tICcuL3V0aWxzL2NvbmZpZy5qcyc7XG4iXSwibWFwcGluZ3MiOiI7OztBQUNBLElBQVcsQ0FBQyx3QkFBd0I7Q0FBQztPQUFXLENBQUMsT0FBTztDQUFHO0VBQUM7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtDQUFFO0FBQUM7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
1146
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5jdHMiLCJuYW1lcyI6WyJCdWlsZE9wdGlvbnMiLCJSYXdCdWlsZE9wdGlvbnMiLCJSYXdOZXdPcHRpb25zIiwidmVyc2lvbiIsInZlcnNpb24iXSwic291cmNlcyI6WyIuLi9zcmMvZGVmL2FydGlmYWN0cy5kLnRzIiwiLi4vc3JjL2FwaS9hcnRpZmFjdHMuZC50cyIsIi4uL3NyYy9kZWYvYnVpbGQuZC50cyIsIi4uL3NyYy91dGlscy9sb2cuZC50cyIsIi4uL3NyYy91dGlscy90YXJnZXQuZC50cyIsIi4uL3NyYy91dGlscy9jb25maWcuZC50cyIsIi4uL3NyYy9hcGkvYnVpbGQuZC50cyIsIi4uL3NyYy9kZWYvY3JlYXRlLW5wbS1kaXJzLmQudHMiLCIuLi9zcmMvYXBpL2NyZWF0ZS1ucG0tZGlycy5kLnRzIiwiLi4vc3JjL2RlZi9uZXcuZC50cyIsIi4uL3NyYy9hcGkvbmV3LmQudHMiLCIuLi9zcmMvZGVmL3ByZS1wdWJsaXNoLmQudHMiLCIuLi9zcmMvYXBpL3ByZS1wdWJsaXNoLmQudHMiLCIuLi9zcmMvZGVmL3JlbmFtZS5kLnRzIiwiLi4vc3JjL2FwaS9yZW5hbWUuZC50cyIsIi4uL3NyYy9kZWYvdW5pdmVyc2FsaXplLmQudHMiLCIuLi9zcmMvYXBpL3VuaXZlcnNhbGl6ZS5kLnRzIiwiLi4vc3JjL2RlZi92ZXJzaW9uLmQudHMiLCIuLi9zcmMvYXBpL3ZlcnNpb24uZC50cyIsIi4uL3NyYy9jb21tYW5kcy9hcnRpZmFjdHMuZC50cyIsIi4uL3NyYy9jb21tYW5kcy9idWlsZC5kLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS1ucG0tZGlycy5kLnRzIiwiLi4vc3JjL2NvbW1hbmRzL25ldy5kLnRzIiwiLi4vc3JjL2NvbW1hbmRzL3ByZS1wdWJsaXNoLmQudHMiLCIuLi9zcmMvY29tbWFuZHMvcmVuYW1lLmQudHMiLCIuLi9zcmMvY29tbWFuZHMvdW5pdmVyc2FsaXplLmQudHMiLCIuLi9zcmMvY29tbWFuZHMvdmVyc2lvbi5kLnRzIiwiLi4vc3JjL2luZGV4LmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlQXJ0aWZhY3RzQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG91dHB1dERpcjogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgIGJ1aWxkT3V0cHV0RGlyPzogc3RyaW5nO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICBjd2Q6IHN0cmluZztcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICAgICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgICAgIG5wbURpcjogc3RyaW5nO1xuICAgICAgICBidWlsZE91dHB1dERpcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIH07XG59XG4vKipcbiAqIENvcHkgYXJ0aWZhY3RzIGZyb20gR2l0aHViIEFjdGlvbnMgaW50byBucG0gcGFja2FnZXMgYW5kIHJlYWR5IHRvIHB1Ymxpc2hcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcnRpZmFjdHNPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIGFsbCBidWlsdCBgLm5vZGVgIGZpbGVzIHB1dCwgc2FtZSBhcyBgLS1vdXRwdXQtZGlyYCBvZiBidWlsZCBjb21tYW5kXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnLi9hcnRpZmFjdHMnXG4gICAgICovXG4gICAgb3V0cHV0RGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gdGhlIGZvbGRlciB3aGVyZSB0aGUgbnBtIHBhY2thZ2VzIHB1dFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ25wbSdcbiAgICAgKi9cbiAgICBucG1EaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgYnVpbGQgb3V0cHV0IGRpciwgb25seSBuZWVkZWQgd2hlbiB0YXJnZXRzIGNvbnRhaW4gYSBXQVNJIHRhcmdldFxuICAgICAqL1xuICAgIGJ1aWxkT3V0cHV0RGlyPzogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0QXJ0aWZhY3RzT3B0aW9ucyhvcHRpb25zOiBBcnRpZmFjdHNPcHRpb25zKToge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG91dHB1dERpcjogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gdGhlIGJ1aWxkIG91dHB1dCBkaXIsIG9ubHkgbmVlZGVkIHdoZW4gdGFyZ2V0cyBjb250YWluIGEgV0FTSSB0YXJnZXRcbiAgICAgKi9cbiAgICBidWlsZE91dHB1dERpcj86IHN0cmluZztcbn07XG4iLCJpbXBvcnQgeyB0eXBlIEFydGlmYWN0c09wdGlvbnMgfSBmcm9tICcuLi9kZWYvYXJ0aWZhY3RzLmpzJztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvbGxlY3RBcnRpZmFjdHModXNlck9wdGlvbnM6IEFydGlmYWN0c09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlQnVpbGRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIHRhcmdldD86IHN0cmluZztcbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgbWFuaWZlc3RQYXRoPzogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoPzogc3RyaW5nO1xuICAgIHRhcmdldERpcj86IHN0cmluZztcbiAgICBvdXRwdXREaXI/OiBzdHJpbmc7XG4gICAgcGxhdGZvcm0/OiBib29sZWFuO1xuICAgIGpzUGFja2FnZU5hbWU/OiBzdHJpbmc7XG4gICAgY29uc3RFbnVtPzogYm9vbGVhbjtcbiAgICBydW50aW1lU3RyaW5nRW51bT86IGJvb2xlYW47XG4gICAganNCaW5kaW5nPzogc3RyaW5nO1xuICAgIG5vSnNCaW5kaW5nPzogYm9vbGVhbjtcbiAgICBkdHM/OiBzdHJpbmc7XG4gICAgZHRzSGVhZGVyPzogc3RyaW5nO1xuICAgIG5vRHRzSGVhZGVyPzogYm9vbGVhbjtcbiAgICBkdHNDYWNoZTogYm9vbGVhbjtcbiAgICBmb3JtYXQ/OiAnZXNtJyB8ICdjb21tb25qcyc7XG4gICAgZXNtPzogYm9vbGVhbjtcbiAgICBjb21tb25qcz86IGJvb2xlYW47XG4gICAgc3RyaXA/OiBib29sZWFuO1xuICAgIHJlbGVhc2U/OiBib29sZWFuO1xuICAgIHZlcmJvc2U/OiBib29sZWFuO1xuICAgIGJpbj86IHN0cmluZztcbiAgICBwYWNrYWdlPzogc3RyaW5nO1xuICAgIHByb2ZpbGU/OiBzdHJpbmc7XG4gICAgY3Jvc3NDb21waWxlPzogYm9vbGVhbjtcbiAgICB1c2VDcm9zcz86IGJvb2xlYW47XG4gICAgdXNlTmFwaUNyb3NzPzogYm9vbGVhbjtcbiAgICB3YXRjaD86IGJvb2xlYW47XG4gICAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgICBhbGxGZWF0dXJlcz86IGJvb2xlYW47XG4gICAgbm9EZWZhdWx0RmVhdHVyZXM/OiBib29sZWFuO1xuICAgIG9ob3NTaWduOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgcGFyc2VkIGJ1aWxkIG9wdGlvbnMuXG4gICAgICovXG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIHRhcmdldDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBjd2Q6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbWFuaWZlc3RQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNvbmZpZ1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHRhcmdldERpcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBvdXRwdXREaXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGxhdGZvcm06IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGpzUGFja2FnZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3RFbnVtOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBydW50aW1lU3RyaW5nRW51bTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAganNCaW5kaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG5vSnNCaW5kaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBkdHM6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgZHRzSGVhZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG5vRHRzSGVhZGVyOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBkdHNDYWNoZTogYm9vbGVhbjtcbiAgICAgICAgZm9ybWF0OiBcImVzbVwiIHwgXCJjb21tb25qc1wiIHwgdW5kZWZpbmVkO1xuICAgICAgICBlc206IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGNvbW1vbmpzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBzdHJpcDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgcmVsZWFzZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgdmVyYm9zZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgYmluOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcHJvZmlsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBjcm9zc0NvbXBpbGU6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHVzZUNyb3NzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICB1c2VOYXBpQ3Jvc3M6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHdhdGNoOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBmZWF0dXJlczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgICAgIGFsbEZlYXR1cmVzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBub0RlZmF1bHRGZWF0dXJlczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgb2hvc1NpZ246IGJvb2xlYW47XG4gICAgfTtcbn1cbi8qKlxuICogQnVpbGQgdGhlIE5BUEktUlMgcHJvamVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogQnVpbGQgZm9yIHRoZSB0YXJnZXQgdHJpcGxlLCBieXBhc3NlZCB0byBgY2FyZ28gYnVpbGQgLS10YXJnZXRgXG4gICAgICovXG4gICAgdGFyZ2V0Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBDYXJnby50b21sYFxuICAgICAqL1xuICAgIG1hbmlmZXN0UGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICovXG4gICAgcGFja2FnZUpzb25QYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIERpcmVjdG9yeSBmb3IgYWxsIGNyYXRlIGdlbmVyYXRlZCBhcnRpZmFjdHMsIHNlZSBgY2FyZ28gYnVpbGQgLS10YXJnZXQtZGlyYFxuICAgICAqL1xuICAgIHRhcmdldERpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHdoZXJlIGFsbCB0aGUgYnVpbHQgZmlsZXMgd291bGQgYmUgcHV0LiBEZWZhdWx0IHRvIHRoZSBjcmF0ZSBmb2xkZXJcbiAgICAgKi9cbiAgICBvdXRwdXREaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQWRkIHBsYXRmb3JtIHRyaXBsZSB0byB0aGUgZ2VuZXJhdGVkIG5vZGVqcyBiaW5kaW5nIGZpbGUsIGVnOiBgW25hbWVdLmxpbnV4LXg2NC1nbnUubm9kZWBcbiAgICAgKi9cbiAgICBwbGF0Zm9ybT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUGFja2FnZSBuYW1lIGluIGdlbmVyYXRlZCBqcyBiaW5kaW5nIGZpbGUuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZ1xuICAgICAqL1xuICAgIGpzUGFja2FnZU5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBnZW5lcmF0ZSBjb25zdCBlbnVtIGZvciB0eXBlc2NyaXB0IGJpbmRpbmdzXG4gICAgICovXG4gICAgY29uc3RFbnVtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBFbWl0IGAjW25hcGkoc3RyaW5nX2VudW0pXWAgZW51bXMgYXMgcnVudGltZSBlbnVtcyAoYGV4cG9ydCBkZWNsYXJlIGVudW1gKSB1bmRlciBgLS1uby1jb25zdC1lbnVtYC4gRGVmYXVsdDogdHlwZS1vbmx5IHVuaW9uLlxuICAgICAqL1xuICAgIHJ1bnRpbWVTdHJpbmdFbnVtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYXRoIGFuZCBmaWxlbmFtZSBvZiBnZW5lcmF0ZWQgSlMgYmluZGluZyBmaWxlLiBPbmx5IHdvcmtzIHdpdGggYC0tcGxhdGZvcm1gIGZsYWcuIFJlbGF0aXZlIHRvIGAtLW91dHB1dC1kaXJgLlxuICAgICAqL1xuICAgIGpzQmluZGluZz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGdlbmVyYXRpb24gSlMgYmluZGluZyBmaWxlLiBPbmx5IHdvcmtzIHdpdGggYC0tcGxhdGZvcm1gIGZsYWcuXG4gICAgICovXG4gICAgbm9Kc0JpbmRpbmc/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhdGggYW5kIGZpbGVuYW1lIG9mIGdlbmVyYXRlZCB0eXBlIGRlZiBmaWxlLiBSZWxhdGl2ZSB0byBgLS1vdXRwdXQtZGlyYFxuICAgICAqL1xuICAgIGR0cz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBDdXN0b20gZmlsZSBoZWFkZXIgZm9yIGdlbmVyYXRlZCB0eXBlIGRlZiBmaWxlLiBPbmx5IHdvcmtzIHdoZW4gYHR5cGVkZWZgIGZlYXR1cmUgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBkdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBkZWZhdWx0IGZpbGUgaGVhZGVyIGZvciBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gT25seSB3b3JrcyB3aGVuIGB0eXBlZGVmYCBmZWF0dXJlIGVuYWJsZWQuXG4gICAgICovXG4gICAgbm9EdHNIZWFkZXI/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIHRoZSBkdHMgY2FjaGUsIGRlZmF1bHQgdG8gdHJ1ZVxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGR0c0NhY2hlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBUaGUgbW9kdWxlIGZvcm1hdCBvZiB0aGUgZ2VuZXJhdGVkIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLiBEZWZhdWx0cyB0byBgY29tbW9uanNgLlxuICAgICAqL1xuICAgIGZvcm1hdD86ICdlc20nIHwgJ2NvbW1vbmpzJztcbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgYC0tZm9ybWF0IGVzbWAuXG4gICAgICovXG4gICAgZXNtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgYC0tZm9ybWF0IGNvbW1vbmpzYC5cbiAgICAgKi9cbiAgICBjb21tb25qcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hldGhlciBzdHJpcCB0aGUgbGlicmFyeSB0byBhY2hpZXZlIHRoZSBtaW5pbXVtIGZpbGUgc2l6ZVxuICAgICAqL1xuICAgIHN0cmlwPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBCdWlsZCBpbiByZWxlYXNlIG1vZGVcbiAgICAgKi9cbiAgICByZWxlYXNlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBWZXJib3NlbHkgbG9nIGJ1aWxkIGNvbW1hbmQgdHJhY2VcbiAgICAgKi9cbiAgICB2ZXJib3NlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBCdWlsZCBvbmx5IHRoZSBzcGVjaWZpZWQgYmluYXJ5XG4gICAgICovXG4gICAgYmluPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIHRoZSBzcGVjaWZpZWQgbGlicmFyeSBvciB0aGUgb25lIGF0IGN3ZFxuICAgICAqL1xuICAgIHBhY2thZ2U/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQnVpbGQgYXJ0aWZhY3RzIHdpdGggdGhlIHNwZWNpZmllZCBwcm9maWxlXG4gICAgICovXG4gICAgcHJvZmlsZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBbZXhwZXJpbWVudGFsXSBjcm9zcyBjb21waWxlIGJ5IHJlcGxhY2luZyB0aGUgY2FyZ28gc3ViY29tbWFuZDogV2luZG93cyBNU1ZDIHRhcmdldHMgZnJvbSBhIG5vbi1XaW5kb3dzIGhvc3QgYnVpbGQgd2l0aCBgY2FyZ28teHdpbmAgKGB3aW5kb3dzLWdudWAgdGFyZ2V0cyBhcmUgcmVqZWN0ZWQsIGBjYXJnby14d2luYCBjYW5ub3QgaGFuZGxlIHRoZW0pLCBub24tV2luZG93cyB0YXJnZXRzIGJ1aWxkIHdpdGggYGNhcmdvLXppZ2J1aWxkYCAocmVxdWlyZXMgYHppZ2Agb24gUEFUSCkuIFRoZSBzZWxlY3RlZCBzdWJjb21tYW5kIGlzIGF1dG8taW5zdGFsbGVkIG9uIGZpcnN0IHVzZS4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tdXNlLWNyb3NzYCwgYC0tdXNlLW5hcGktY3Jvc3NgIG9yIGAtLXdhdGNoYFxuICAgICAqL1xuICAgIGNyb3NzQ29tcGlsZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogW2V4cGVyaW1lbnRhbF0gbm90IHJlY29tbWVuZGVkLCBwcmVmZXIgYC0tY3Jvc3MtY29tcGlsZWAgb3IgYC0tdXNlLW5hcGktY3Jvc3NgOiBidWlsZCBpbiBhIERvY2tlciBvciBQb2RtYW4gY29udGFpbmVyIHdpdGggW2Nyb3NzXShodHRwczovL2dpdGh1Yi5jb20vY3Jvc3MtcnMvY3Jvc3MpLCB3aGljaCBtdXN0IGJlIGluc3RhbGxlZCBtYW51YWxseSBhbmQgbmVlZHMgYSBydW5uaW5nIGNvbnRhaW5lciBlbmdpbmUuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAtLWNyb3NzLWNvbXBpbGVgLCBgLS11c2UtbmFwaS1jcm9zc2Agb3IgYC0td2F0Y2hgXG4gICAgICovXG4gICAgdXNlQ3Jvc3M/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFtleHBlcmltZW50YWxdIGRvd25sb2FkIGEgcHJlYnVpbHQgZ2NjIGNyb3NzIHRvb2xjaGFpbiBmcm9tIGBAbmFwaS1ycy9jcm9zcy10b29sY2hhaW5gIChnbGliYyAyLjE3KSBhbmQgc2V0IGxpbmtlciBhbmQgQyBjb21waWxlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIExpbnV4IGdsaWJjIHRhcmdldHMgb25seSAoeDY0LCBhcm02NCwgYXJtdjcsIHBwYzY0bGUsIHMzOTB4KSBvbiBhIExpbnV4IHg2NCBvciBhcm02NCBob3N0LCBhbnkgb3RoZXIgdGFyZ2V0IG9yIGhvc3QgZXJyb3JzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS1jcm9zcy1jb21waWxlYCBvciBgLS11c2UtY3Jvc3NgXG4gICAgICovXG4gICAgdXNlTmFwaUNyb3NzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiB3YXRjaCB0aGUgY3JhdGUgY2hhbmdlcyBhbmQgYnVpbGQgY29udGludW91c2x5IHdpdGggYGNhcmdvLXdhdGNoYCBjcmF0ZXNcbiAgICAgKi9cbiAgICB3YXRjaD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogU3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgZmVhdHVyZXMgdG8gYWN0aXZhdGVcbiAgICAgKi9cbiAgICBmZWF0dXJlcz86IHN0cmluZ1tdO1xuICAgIC8qKlxuICAgICAqIEFjdGl2YXRlIGFsbCBhdmFpbGFibGUgZmVhdHVyZXNcbiAgICAgKi9cbiAgICBhbGxGZWF0dXJlcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRG8gbm90IGFjdGl2YXRlIHRoZSBgZGVmYXVsdGAgZmVhdHVyZVxuICAgICAqL1xuICAgIG5vRGVmYXVsdEZlYXR1cmVzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNlbGYtc2lnbiB0aGUgYnVpbHQgYmluYXJ5IGZvciBPcGVuSGFybW9ueSB0YXJnZXRzIGJ5IGluamVjdGluZyBhIGAuY29kZXNpZ25gIGZzLXZlcml0eSBzZWN0aW9uLCBzbyB0aGUgYC5zb2AgY2FuIGJlIGxvYWRlZCBvbiBIYXJtb255T1MgZGV2aWNlcy4gT25seSB3b3JrcyB3aXRoIGAqLXVua25vd24tbGludXgtb2hvc2AgdGFyZ2V0c1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIG9ob3NTaWduPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdEJ1aWxkT3B0aW9ucyhvcHRpb25zOiBCdWlsZE9wdGlvbnMpOiB7XG4gICAgLyoqXG4gICAgICogQnVpbGQgZm9yIHRoZSB0YXJnZXQgdHJpcGxlLCBieXBhc3NlZCB0byBgY2FyZ28gYnVpbGQgLS10YXJnZXRgXG4gICAgICovXG4gICAgdGFyZ2V0Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBDYXJnby50b21sYFxuICAgICAqL1xuICAgIG1hbmlmZXN0UGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICovXG4gICAgcGFja2FnZUpzb25QYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIERpcmVjdG9yeSBmb3IgYWxsIGNyYXRlIGdlbmVyYXRlZCBhcnRpZmFjdHMsIHNlZSBgY2FyZ28gYnVpbGQgLS10YXJnZXQtZGlyYFxuICAgICAqL1xuICAgIHRhcmdldERpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHdoZXJlIGFsbCB0aGUgYnVpbHQgZmlsZXMgd291bGQgYmUgcHV0LiBEZWZhdWx0IHRvIHRoZSBjcmF0ZSBmb2xkZXJcbiAgICAgKi9cbiAgICBvdXRwdXREaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQWRkIHBsYXRmb3JtIHRyaXBsZSB0byB0aGUgZ2VuZXJhdGVkIG5vZGVqcyBiaW5kaW5nIGZpbGUsIGVnOiBgW25hbWVdLmxpbnV4LXg2NC1nbnUubm9kZWBcbiAgICAgKi9cbiAgICBwbGF0Zm9ybT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUGFja2FnZSBuYW1lIGluIGdlbmVyYXRlZCBqcyBiaW5kaW5nIGZpbGUuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZ1xuICAgICAqL1xuICAgIGpzUGFja2FnZU5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBnZW5lcmF0ZSBjb25zdCBlbnVtIGZvciB0eXBlc2NyaXB0IGJpbmRpbmdzXG4gICAgICovXG4gICAgY29uc3RFbnVtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBFbWl0IGAjW25hcGkoc3RyaW5nX2VudW0pXWAgZW51bXMgYXMgcnVudGltZSBlbnVtcyAoYGV4cG9ydCBkZWNsYXJlIGVudW1gKSB1bmRlciBgLS1uby1jb25zdC1lbnVtYC4gRGVmYXVsdDogdHlwZS1vbmx5IHVuaW9uLlxuICAgICAqL1xuICAgIHJ1bnRpbWVTdHJpbmdFbnVtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYXRoIGFuZCBmaWxlbmFtZSBvZiBnZW5lcmF0ZWQgSlMgYmluZGluZyBmaWxlLiBPbmx5IHdvcmtzIHdpdGggYC0tcGxhdGZvcm1gIGZsYWcuIFJlbGF0aXZlIHRvIGAtLW91dHB1dC1kaXJgLlxuICAgICAqL1xuICAgIGpzQmluZGluZz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGdlbmVyYXRpb24gSlMgYmluZGluZyBmaWxlLiBPbmx5IHdvcmtzIHdpdGggYC0tcGxhdGZvcm1gIGZsYWcuXG4gICAgICovXG4gICAgbm9Kc0JpbmRpbmc/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhdGggYW5kIGZpbGVuYW1lIG9mIGdlbmVyYXRlZCB0eXBlIGRlZiBmaWxlLiBSZWxhdGl2ZSB0byBgLS1vdXRwdXQtZGlyYFxuICAgICAqL1xuICAgIGR0cz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBDdXN0b20gZmlsZSBoZWFkZXIgZm9yIGdlbmVyYXRlZCB0eXBlIGRlZiBmaWxlLiBPbmx5IHdvcmtzIHdoZW4gYHR5cGVkZWZgIGZlYXR1cmUgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBkdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBkZWZhdWx0IGZpbGUgaGVhZGVyIGZvciBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gT25seSB3b3JrcyB3aGVuIGB0eXBlZGVmYCBmZWF0dXJlIGVuYWJsZWQuXG4gICAgICovXG4gICAgbm9EdHNIZWFkZXI/OiBib29sZWFuO1xuICAgIGR0c0NhY2hlOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSBtb2R1bGUgZm9ybWF0IG9mIHRoZSBnZW5lcmF0ZWQgSlMgYmluZGluZyBmaWxlLiBPbmx5IHdvcmtzIHdpdGggYC0tcGxhdGZvcm1gIGZsYWcuIERlZmF1bHRzIHRvIGBjb21tb25qc2AuXG4gICAgICovXG4gICAgZm9ybWF0PzogXCJlc21cIiB8IFwiY29tbW9uanNcIjtcbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgYC0tZm9ybWF0IGVzbWAuXG4gICAgICovXG4gICAgZXNtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgYC0tZm9ybWF0IGNvbW1vbmpzYC5cbiAgICAgKi9cbiAgICBjb21tb25qcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hldGhlciBzdHJpcCB0aGUgbGlicmFyeSB0byBhY2hpZXZlIHRoZSBtaW5pbXVtIGZpbGUgc2l6ZVxuICAgICAqL1xuICAgIHN0cmlwPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBCdWlsZCBpbiByZWxlYXNlIG1vZGVcbiAgICAgKi9cbiAgICByZWxlYXNlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBWZXJib3NlbHkgbG9nIGJ1aWxkIGNvbW1hbmQgdHJhY2VcbiAgICAgKi9cbiAgICB2ZXJib3NlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBCdWlsZCBvbmx5IHRoZSBzcGVjaWZpZWQgYmluYXJ5XG4gICAgICovXG4gICAgYmluPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIHRoZSBzcGVjaWZpZWQgbGlicmFyeSBvciB0aGUgb25lIGF0IGN3ZFxuICAgICAqL1xuICAgIHBhY2thZ2U/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQnVpbGQgYXJ0aWZhY3RzIHdpdGggdGhlIHNwZWNpZmllZCBwcm9maWxlXG4gICAgICovXG4gICAgcHJvZmlsZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBbZXhwZXJpbWVudGFsXSBjcm9zcyBjb21waWxlIGJ5IHJlcGxhY2luZyB0aGUgY2FyZ28gc3ViY29tbWFuZDogV2luZG93cyBNU1ZDIHRhcmdldHMgZnJvbSBhIG5vbi1XaW5kb3dzIGhvc3QgYnVpbGQgd2l0aCBgY2FyZ28teHdpbmAgKGB3aW5kb3dzLWdudWAgdGFyZ2V0cyBhcmUgcmVqZWN0ZWQsIGBjYXJnby14d2luYCBjYW5ub3QgaGFuZGxlIHRoZW0pLCBub24tV2luZG93cyB0YXJnZXRzIGJ1aWxkIHdpdGggYGNhcmdvLXppZ2J1aWxkYCAocmVxdWlyZXMgYHppZ2Agb24gUEFUSCkuIFRoZSBzZWxlY3RlZCBzdWJjb21tYW5kIGlzIGF1dG8taW5zdGFsbGVkIG9uIGZpcnN0IHVzZS4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tdXNlLWNyb3NzYCwgYC0tdXNlLW5hcGktY3Jvc3NgIG9yIGAtLXdhdGNoYFxuICAgICAqL1xuICAgIGNyb3NzQ29tcGlsZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogW2V4cGVyaW1lbnRhbF0gbm90IHJlY29tbWVuZGVkLCBwcmVmZXIgYC0tY3Jvc3MtY29tcGlsZWAgb3IgYC0tdXNlLW5hcGktY3Jvc3NgOiBidWlsZCBpbiBhIERvY2tlciBvciBQb2RtYW4gY29udGFpbmVyIHdpdGggW2Nyb3NzXShodHRwczovL2dpdGh1Yi5jb20vY3Jvc3MtcnMvY3Jvc3MpLCB3aGljaCBtdXN0IGJlIGluc3RhbGxlZCBtYW51YWxseSBhbmQgbmVlZHMgYSBydW5uaW5nIGNvbnRhaW5lciBlbmdpbmUuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAtLWNyb3NzLWNvbXBpbGVgLCBgLS11c2UtbmFwaS1jcm9zc2Agb3IgYC0td2F0Y2hgXG4gICAgICovXG4gICAgdXNlQ3Jvc3M/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFtleHBlcmltZW50YWxdIGRvd25sb2FkIGEgcHJlYnVpbHQgZ2NjIGNyb3NzIHRvb2xjaGFpbiBmcm9tIGBAbmFwaS1ycy9jcm9zcy10b29sY2hhaW5gIChnbGliYyAyLjE3KSBhbmQgc2V0IGxpbmtlciBhbmQgQyBjb21waWxlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIExpbnV4IGdsaWJjIHRhcmdldHMgb25seSAoeDY0LCBhcm02NCwgYXJtdjcsIHBwYzY0bGUsIHMzOTB4KSBvbiBhIExpbnV4IHg2NCBvciBhcm02NCBob3N0LCBhbnkgb3RoZXIgdGFyZ2V0IG9yIGhvc3QgZXJyb3JzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS1jcm9zcy1jb21waWxlYCBvciBgLS11c2UtY3Jvc3NgXG4gICAgICovXG4gICAgdXNlTmFwaUNyb3NzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiB3YXRjaCB0aGUgY3JhdGUgY2hhbmdlcyBhbmQgYnVpbGQgY29udGludW91c2x5IHdpdGggYGNhcmdvLXdhdGNoYCBjcmF0ZXNcbiAgICAgKi9cbiAgICB3YXRjaD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogU3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgZmVhdHVyZXMgdG8gYWN0aXZhdGVcbiAgICAgKi9cbiAgICBmZWF0dXJlcz86IHN0cmluZ1tdO1xuICAgIC8qKlxuICAgICAqIEFjdGl2YXRlIGFsbCBhdmFpbGFibGUgZmVhdHVyZXNcbiAgICAgKi9cbiAgICBhbGxGZWF0dXJlcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRG8gbm90IGFjdGl2YXRlIHRoZSBgZGVmYXVsdGAgZmVhdHVyZVxuICAgICAqL1xuICAgIG5vRGVmYXVsdEZlYXR1cmVzPzogYm9vbGVhbjtcbiAgICBvaG9zU2lnbjogYm9vbGVhbjtcbn07XG4iLCJkZWNsYXJlIG1vZHVsZSAnb2J1Zycge1xuICAgIGludGVyZmFjZSBEZWJ1Z2dlciB7XG4gICAgICAgIGluZm86IHR5cGVvZiBjb25zb2xlLmVycm9yO1xuICAgICAgICB3YXJuOiB0eXBlb2YgY29uc29sZS5lcnJvcjtcbiAgICAgICAgZXJyb3I6IHR5cGVvZiBjb25zb2xlLmVycm9yO1xuICAgIH1cbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGRlYnVnRmFjdG9yeTogKG5hbWVzcGFjZTogc3RyaW5nKSA9PiBpbXBvcnQoXCJvYnVnXCIpLkRlYnVnZ2VyO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgZGVidWc6IGltcG9ydChcIm9idWdcIikuRGVidWdnZXI7XG4iLCJleHBvcnQgdHlwZSBQbGF0Zm9ybSA9IE5vZGVKUy5QbGF0Zm9ybSB8ICd3YXNtJyB8ICd3YXNpJyB8ICdvcGVuaGFybW9ueSc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBVTklWRVJTQUxfVEFSR0VUUzoge1xuICAgIHJlYWRvbmx5ICd1bml2ZXJzYWwtYXBwbGUtZGFyd2luJzogcmVhZG9ubHkgW1wiYWFyY2g2NC1hcHBsZS1kYXJ3aW5cIiwgXCJ4ODZfNjQtYXBwbGUtZGFyd2luXCJdO1xufTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IEFWQUlMQUJMRV9UQVJHRVRTOiByZWFkb25seSBbXCJhYXJjaDY0LWFwcGxlLWRhcndpblwiLCBcImFhcmNoNjQtbGludXgtYW5kcm9pZFwiLCBcImFhcmNoNjQtdW5rbm93bi1saW51eC1nbnVcIiwgXCJhYXJjaDY0LXVua25vd24tbGludXgtbXVzbFwiLCBcImFhcmNoNjQtdW5rbm93bi1saW51eC1vaG9zXCIsIFwiYWFyY2g2NC1wYy13aW5kb3dzLW1zdmNcIiwgXCJ4ODZfNjQtYXBwbGUtZGFyd2luXCIsIFwieDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1wiLCBcIng4Nl82NC1wYy13aW5kb3dzLWdudVwiLCBcIng4Nl82NC11bmtub3duLWxpbnV4LWdudVwiLCBcIng4Nl82NC11bmtub3duLWxpbnV4LW11c2xcIiwgXCJ4ODZfNjQtdW5rbm93bi1saW51eC1vaG9zXCIsIFwieDg2XzY0LXVua25vd24tZnJlZWJzZFwiLCBcImk2ODYtcGMtd2luZG93cy1tc3ZjXCIsIFwiYXJtdjctdW5rbm93bi1saW51eC1nbnVlYWJpaGZcIiwgXCJhcm12Ny11bmtub3duLWxpbnV4LW11c2xlYWJpaGZcIiwgXCJhcm12Ny1saW51eC1hbmRyb2lkZWFiaVwiLCBcInVuaXZlcnNhbC1hcHBsZS1kYXJ3aW5cIiwgXCJsb29uZ2FyY2g2NC11bmtub3duLWxpbnV4LWdudVwiLCBcInJpc2N2NjRnYy11bmtub3duLWxpbnV4LWdudVwiLCBcInBvd2VycGM2NGxlLXVua25vd24tbGludXgtZ251XCIsIFwiczM5MHgtdW5rbm93bi1saW51eC1nbnVcIiwgXCJ3YXNtMzItd2FzaXAxXCIsIFwid2FzbTMyLXdhc2lwMS10aHJlYWRzXCJdO1xuZXhwb3J0IHR5cGUgVGFyZ2V0VHJpcGxlID0gKHR5cGVvZiBBVkFJTEFCTEVfVEFSR0VUUylbbnVtYmVyXTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IERFRkFVTFRfVEFSR0VUUzogcmVhZG9ubHkgW1wieDg2XzY0LWFwcGxlLWRhcndpblwiLCBcImFhcmNoNjQtYXBwbGUtZGFyd2luXCIsIFwieDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1wiLCBcIng4Nl82NC11bmtub3duLWxpbnV4LWdudVwiXTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFRBUkdFVF9MSU5LRVI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG50eXBlIE5vZGVKU0FyY2ggPSAnYXJtJyB8ICdhcm02NCcgfCAnaWEzMicgfCAnbG9vbmc2NCcgfCAnbWlwcycgfCAnbWlwc2VsJyB8ICdwcGMnIHwgJ3BwYzY0JyB8ICdyaXNjdjY0JyB8ICdzMzkwJyB8ICdzMzkweCcgfCAneDMyJyB8ICd4NjQnIHwgJ3VuaXZlcnNhbCcgfCAnd2FzbTMyJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IE5vZGVBcmNoVG9DcHU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBVbmlBcmNoc0J5UGxhdGZvcm06IFBhcnRpYWw8UmVjb3JkPFBsYXRmb3JtLCBOb2RlSlNBcmNoW10+PjtcbmV4cG9ydCBpbnRlcmZhY2UgVGFyZ2V0IHtcbiAgICB0cmlwbGU6IHN0cmluZztcbiAgICBwbGF0Zm9ybUFyY2hBQkk6IHN0cmluZztcbiAgICBwbGF0Zm9ybTogUGxhdGZvcm07XG4gICAgYXJjaDogTm9kZUpTQXJjaDtcbiAgICBhYmk6IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQgdHlwZSBXYXNpRmxhdm9yID0gJ3NpbmdsZScgfCAndGhyZWFkcyc7XG5leHBvcnQgaW50ZXJmYWNlIFdhc2lUYXJnZXQge1xuICAgIGNhbm9uaWNhbFRyaXBsZTogc3RyaW5nO1xuICAgIGZsYXZvcjogV2FzaUZsYXZvcjtcbiAgICBwbGF0Zm9ybUFyY2hBQkk6IHN0cmluZztcbn1cbi8qKlxuICogUmVzb2x2ZSBoaXN0b3JpY2FsIFdBU0kgc3BlbGxpbmdzIHRvIG9uZSBidWlsZCB0YXJnZXQgYW5kIG9uZSBhcnRpZmFjdFxuICogaWRlbnRpdHkuIGB3YXNtMzItd2FzaWAgaGlzdG9yaWNhbGx5IHByb2R1Y2VkIHRoZSB0aHJlYWRlZCBwYWNrYWdlLCBzbyBpdFxuICogbXVzdCBuZXZlciBiZSBpbmZlcnJlZCBhcyB0aHJlYWRsZXNzIG1lcmVseSBiZWNhdXNlIGl0cyBuYW1lIGxhY2tzIHRoZVxuICogYC10aHJlYWRzYCBzdWZmaXguXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdldFdhc2lUYXJnZXQodGFyZ2V0OiBzdHJpbmcgfCBQaWNrPFRhcmdldCwgJ3RyaXBsZSc+KTogV2FzaVRhcmdldCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHdhc2lUYXJnZXRIYXNUaHJlYWRzKHRhcmdldDogc3RyaW5nIHwgUGljazxUYXJnZXQsICd0cmlwbGUnPik6IGJvb2xlYW47XG4vKipcbiAqIERldGVjdCB0aGUgbWFqb3IgdmVyc2lvbiBvZiBhIHdhc2ktc2RrIGluc3RhbGxhdGlvbi5cbiAqXG4gKiB3YXNpLWxpYmMgZHJvcHBlZCB0aGUgdW51c2VkIGBpbnQgb3BgIHBhcmFtZXRlciBmcm9tXG4gKiBgX193YXNpbGliY19mdXRleF93YWl0X2F0b21pY193YWl0YCBhbmQgYF9fd2FzaWxpYmNfZnV0ZXhfd2FpdF9tYXliZV9idXN5YCxcbiAqIGFuZCB3YXNpLXNkayAzNCBpcyB0aGUgZmlyc3QgcmVsZWFzZSB0aGF0IHNoaXBzIHRoZSAzLWFyZ3VtZW50IHNpZ25hdHVyZS5cbiAqIFN0YXRpYyBhcmNoaXZlcyBjb21waWxlZCBhZ2FpbnN0IHRoZSB0d28gc2lnbmF0dXJlcyBjYW5ub3QgYmUgbWl4ZWQsIHNvIHRoZVxuICogZW1uYXBpIGFyY2hpdmVzIGhhdmUgdG8gYmUgcGlja2VkIGJ5IHdhc2ktc2RrIHZlcnNpb24sIG5vdCBieSB0YXJnZXQgdHJpcGxlXG4gKiBhbG9uZS5cbiAqXG4gKiBgPHdhc2lTZGtQYXRoPi9WRVJTSU9OYCBpcyB0aGUgcHJpbWFyeSBzaWduYWw6IGV2ZXJ5IHJlbGVhc2Ugc2hpcHMgaXQgYW5kXG4gKiBpdHMgZmlyc3QgbGluZSBpcyB0aGUgdmVyc2lvbiAoYDI3LjBgLCBgMzMuMCttYCwgYDM0LjBgLCAuLi4pLiBUaGVcbiAqIGB3YXNpL3ZlcnNpb24uaGAgaGVhZGVyIGNhcnJ5aW5nIGBfX3dhc2lfc2RrX21ham9yX19gIG9ubHkgYXBwZWFycyBmcm9tXG4gKiB3YXNpLXNkayAzMCBvbndhcmRzLCBzbyBpdCBzdGF5cyBhIGZhbGxiYWNrIGZvciB0cmVlcyB3aXRob3V0IGEgYFZFUlNJT05gLlxuICpcbiAqIFJldHVybnMgYG51bGxgIHdoZW4gbmVpdGhlciBzaWduYWwgaXMgcmVhZGFibGUgb3IgcGFyc2VhYmxlLiBEZXRlY3Rpb24gbXVzdFxuICogbmV2ZXIgdGhyb3c6IGFuIHVua25vd24gd2FzaS1zZGsgZGVncmFkZXMgdG8gdGhlIGxlZ2FjeSBhcmNoaXZlcyBpbnN0ZWFkIG9mXG4gKiBmYWlsaW5nIHRoZSBidWlsZC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gd2FzaVNka01ham9yVmVyc2lvbih3YXNpU2RrUGF0aDogc3RyaW5nKTogbnVtYmVyIHwgbnVsbDtcbi8qKlxuICogUGF0aCB0byB0aGUgd2FzaS1saWJjIHRoYXQgY2FyZ28gbGlua3Mgd2hlbiBubyB3YXNpLXNkayBpcyBjb25maWd1cmVkLlxuICpcbiAqIFdpdGhvdXQgYFdBU0lfU0RLX1BBVEhgIHRoZSB0YXJnZXQgbGlua3MgdGhyb3VnaCBgcnVzdC1sbGRgIGFnYWluc3QgdGhlXG4gKiB3YXNpLWxpYmMgYnVuZGxlZCB3aXRoIHRoZSBSdXN0IHN0YW5kYXJkIGxpYnJhcnksIHNvIHRoYXQgY29weSDigJQgbm90IGFcbiAqIHdhc2ktc2RrIOKAlCBkZWNpZGVzIHRoZSBmdXRleCBBQkkuXG4gKlxuICogYGN3ZGAgbXVzdCBiZSB0aGUgZGlyZWN0b3J5IENhcmdvIGlzIHNwYXduZWQgaW4sIGJlY2F1c2UgdGhhdCBpcyB3aGF0XG4gKiBzZWxlY3RzIHRoZSB0b29sY2hhaW4uXG4gKlxuICogUmV0dXJucyBgbnVsbGAgd2hlbiBgcnVzdGNgIGNhbm5vdCBiZSBxdWVyaWVkIG9yIHRoZSB0YXJnZXQgaXMgbm90XG4gKiBpbnN0YWxsZWQuIE5ldmVyIHRocm93czogYW4gdW5kZXRlY3RhYmxlIHN5c3Jvb3QgZGVncmFkZXMgdG8gdGhlIGxlZ2FjeVxuICogYXJjaGl2ZXMuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJ1c3RCdW5kbGVkV2FzaUxpYmMod2FzaVRhcmdldDogc3RyaW5nLCBjd2Q/OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsO1xuLyoqXG4gKiBXaGV0aGVyIGEgd2FzaS1saWJjIGFyY2hpdmUgY2FycmllcyB0aGUgMy1hcmd1bWVudCBmdXRleCBBQkkuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgd2hlbiB0aGUgYXJjaGl2ZSBjYW5ub3QgYmUgcmVhZCwgc28gY2FsbGVycyBjYW4gdGVsbFxuICogXCJkZWZpbml0ZWx5IHRoZSBsZWdhY3kgQUJJXCIgYXBhcnQgZnJvbSBcImNvdWxkIG5vdCB0ZWxsXCIuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHdhc2lMaWJjSGFzTmV3RnV0ZXhBYmkobGliY0FyY2hpdmVQYXRoOiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiB8IG51bGw7XG4vKipcbiAqIEEgdHJpcGxlIGlzIGEgc3BlY2lmaWMgZm9ybWF0IGZvciBzcGVjaWZ5aW5nIGEgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cbiAqIFRyaXBsZXMgbWF5IGJlIHJlZmVycmVkIHRvIGFzIGEgdGFyZ2V0IHRyaXBsZSB3aGljaCBpcyB0aGUgYXJjaGl0ZWN0dXJlIGZvciB0aGUgYXJ0aWZhY3QgcHJvZHVjZWQsIGFuZCB0aGUgaG9zdCB0cmlwbGUgd2hpY2ggaXMgdGhlIGFyY2hpdGVjdHVyZSB0aGF0IHRoZSBjb21waWxlciBpcyBydW5uaW5nIG9uLlxuICogVGhlIGdlbmVyYWwgZm9ybWF0IG9mIHRoZSB0cmlwbGUgaXMgYDxhcmNoPjxzdWI+LTx2ZW5kb3I+LTxzeXM+LTxhYmk+YCB3aGVyZTpcbiAqICAgLSBgYXJjaGAgPSBUaGUgYmFzZSBDUFUgYXJjaGl0ZWN0dXJlLCBmb3IgZXhhbXBsZSBgeDg2XzY0YCwgYGk2ODZgLCBgYXJtYCwgYHRodW1iYCwgYG1pcHNgLCBldGMuXG4gKiAgIC0gYHN1YmAgPSBUaGUgQ1BVIHN1Yi1hcmNoaXRlY3R1cmUsIGZvciBleGFtcGxlIGBhcm1gIGhhcyBgdjdgLCBgdjdzYCwgYHY1dGVgLCBldGMuXG4gKiAgIC0gYHZlbmRvcmAgPSBUaGUgdmVuZG9yLCBmb3IgZXhhbXBsZSBgdW5rbm93bmAsIGBhcHBsZWAsIGBwY2AsIGBudmlkaWFgLCBldGMuXG4gKiAgIC0gYHN5c2AgPSBUaGUgc3lzdGVtIG5hbWUsIGZvciBleGFtcGxlIGBsaW51eGAsIGB3aW5kb3dzYCwgYGRhcndpbmAsIGV0Yy4gbm9uZSBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgYmFyZS1tZXRhbCB3aXRob3V0IGFuIE9TLlxuICogICAtIGBhYmlgID0gVGhlIEFCSSwgZm9yIGV4YW1wbGUgYGdudWAsIGBhbmRyb2lkYCwgYGVhYmlgLCBldGMuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHBhcnNlVHJpcGxlKHJhd1RyaXBsZTogc3RyaW5nKTogVGFyZ2V0O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZ2V0U3lzdGVtRGVmYXVsdFRhcmdldCgpOiBUYXJnZXQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXRUYXJnZXRMaW5rZXIodGFyZ2V0OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4vKipcbiAqIExvYWRlci1maWxlIHN1ZmZpeCBmb3IgYSBXQVNJIGZsYXZvciwgZGVyaXZlZCBmcm9tIGl0cyBgcGxhdGZvcm1BcmNoQUJJYDpcbiAqIHRoZSBsZWdhY3kgdGhyZWFkZWQgZmxhdm9yIGtlZXBzIHRoZSBoaXN0b3JpY2FsIGB3YXNpYCBzdGVtXG4gKiAoYDxiaW5hcnlOYW1lPi53YXNpLmNqc2AsIGA8YmluYXJ5TmFtZT4ud2FzaS1icm93c2VyLmpzYCksIHdoaWxlIGVhY2hcbiAqIGRpc3RpbmN0bHkgbmFtZWQgbm9uLXRocmVhZGVkIGZsYXZvciBkZXJpdmVzIGl0cyBvd25cbiAqIChgPGJpbmFyeU5hbWU+Lndhc2lwMS5janNgLCBgPGJpbmFyeU5hbWU+Lndhc2lwMS1icm93c2VyLmpzYCwgLi4uKS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gd2FzaUxvYWRlclN1ZmZpeChwbGF0Zm9ybUFyY2hBQkk6IHN0cmluZyk6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHRhcmdldFRvRW52VmFyKHRhcmdldDogc3RyaW5nKTogc3RyaW5nO1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgdHlwZSBUYXJnZXQgfSBmcm9tICcuL3RhcmdldC5qcyc7XG5leHBvcnQgdHlwZSBWYWx1ZU9mQ29uc3RBcnJheTxUPiA9IFRbRXhjbHVkZTxrZXlvZiBULCBrZXlvZiBBcnJheTxhbnk+Pl07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBTdXBwb3J0ZWRQYWNrYWdlTWFuYWdlcnM6IHJlYWRvbmx5IFtcInlhcm5cIiwgXCJwbnBtXCJdO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgU3VwcG9ydGVkVGVzdEZyYW1ld29ya3M6IHJlYWRvbmx5IFtcImF2YVwiXTtcbmV4cG9ydCB0eXBlIFN1cHBvcnRlZFBhY2thZ2VNYW5hZ2VyID0gVmFsdWVPZkNvbnN0QXJyYXk8dHlwZW9mIFN1cHBvcnRlZFBhY2thZ2VNYW5hZ2Vycz47XG5leHBvcnQgdHlwZSBTdXBwb3J0ZWRUZXN0RnJhbWV3b3JrID0gVmFsdWVPZkNvbnN0QXJyYXk8dHlwZW9mIFN1cHBvcnRlZFRlc3RGcmFtZXdvcmtzPjtcbi8qKlxuICogUGFja2FnZSBtYW5hZ2VycyB0aGF0IG1heSBwdWJsaXNoIHRoZSAqKnJvb3QqKiBwYWNrYWdlLCBkaXN0aW5ndWlzaGVkIGJ5XG4gKiB3aGV0aGVyIHRoZXkgcmV3cml0ZSB0aGUgbWFuaWZlc3Qgd2hpbGUgcGFja2luZyBpdC5cbiAqXG4gKiBgeWFybmAgbWVhbnMgeWFybiBiZXJyeSAoPj0gMik7IFlhcm4gQ2xhc3NpYyAoMS54KSBwYWNrcyB0aGUgcmF3IG1hbmlmZXN0XG4gKiBsaWtlIG5wbSBkb2VzIGFuZCBpcyBzcGVsbGVkIGB5YXJuLWNsYXNzaWNgLlxuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCBSb290UHVibGlzaGVyczogcmVhZG9ubHkgW1wibnBtXCIsIFwicG5wbVwiLCBcInlhcm5cIiwgXCJ5YXJuLWNsYXNzaWNcIl07XG5leHBvcnQgdHlwZSBSb290UHVibGlzaGVyID0gVmFsdWVPZkNvbnN0QXJyYXk8dHlwZW9mIFJvb3RQdWJsaXNoZXJzPjtcbmV4cG9ydCBpbnRlcmZhY2UgVXNlck5hcGlDb25maWcge1xuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIGJpbmFyeSB0byBiZSBnZW5lcmF0ZWQsIGRlZmF1bHQgdG8gYGluZGV4YFxuICAgICAqL1xuICAgIGJpbmFyeU5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgbnBtIHBhY2thZ2UsIGRlZmF1bHQgdG8gdGhlIG5hbWUgb2Ygcm9vdCBwYWNrYWdlLmpzb24gbmFtZVxuICAgICAqXG4gICAgICogQWx3YXlzIGdpdmVuIGBAc2NvcGUvcGtnYCBhbmQgYXJjaCBzdWZmaXggd2lsbCBiZSBhcHBlbmRlZCBsaWtlIGBAc2NvcGUvcGtnLWxpbnV4LWdudS14NjRgXG4gICAgICovXG4gICAgcGFja2FnZU5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQWxsIHRhcmdldHMgdGhlIGNyYXRlIHdpbGwgYmUgY29tcGlsZWQgZm9yXG4gICAgICovXG4gICAgdGFyZ2V0cz86IHN0cmluZ1tdO1xuICAgIC8qKlxuICAgICAqIFRoZSBucG0gY2xpZW50IHByb2plY3QgdXNlcy5cbiAgICAgKi9cbiAgICBucG1DbGllbnQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIHBhY2thZ2UgbWFuYWdlciB0aGF0IHB1Ymxpc2hlcyB0aGUgKipyb290KiogcGFja2FnZS5cbiAgICAgKlxuICAgICAqIGBuYXBpIHByZS1wdWJsaXNoYCBwdWJsaXNoZXMgb25seSB0aGUgZ2VuZXJhdGVkIHBlci1wbGF0Zm9ybSBwYWNrYWdlczsgdGhlXG4gICAgICogcm9vdCBwYWNrYWdlIGlzIHBhY2tlZCBhbmQgcHVibGlzaGVkIGJ5IHRoZSBjYWxsZXIsIHNvIHRoaXMgY2Fubm90IGJlXG4gICAgICogaW5mZXJyZWQgcmVsaWFibHkuIHBucG0gYW5kIHlhcm4gYmVycnkgcmVwbGFjZSBgZXhwb3J0c2Agd2l0aFxuICAgICAqIGBwdWJsaXNoQ29uZmlnLmV4cG9ydHNgIHdoaWxlIHBhY2tpbmcsIHNvIHVuZGVyIHRob3NlIHB1Ymxpc2hlcnNcbiAgICAgKiBgbmFwaSBwcmUtcHVibGlzaGAgdmFsaWRhdGVzIG9ubHkgdGhlIHB1Ymxpc2gtZWZmZWN0aXZlIGV4cG9ydCBtYXAgYW5kIHRoZVxuICAgICAqIGxvY2FsIGBleHBvcnRzYCBtYXkgcG9pbnQgYXQgZGV2ZWxvcG1lbnQtb25seSBzb3VyY2VzLiBucG0gYW5kIFlhcm5cbiAgICAgKiBDbGFzc2ljIHNoaXAgYGV4cG9ydHNgIHVudG91Y2hlZC5cbiAgICAgKlxuICAgICAqIFVuc2V0IOKAlCB0aGUgZGVmYXVsdCDigJQgdmFsaWRhdGVzIGJvdGggbWFwcywgd2hpY2ggaXMgY29ycmVjdCBmb3IgZXZlcnlcbiAgICAgKiBwdWJsaXNoZXIgYnV0IHJlamVjdHMgZGV2ZWxvcG1lbnQtb25seSBjb25kaXRpb25zIHN1Y2ggYXNcbiAgICAgKiBgXCJkZXZcIjogXCIuL3NyYy9pbmRleC50c1wiYC5cbiAgICAgKi9cbiAgICByb290UHVibGlzaGVyPzogUm9vdFB1Ymxpc2hlcjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGdlbmVyYXRlIGNvbnN0IGVudW0gZm9yIHR5cGVzY3JpcHQgYmluZGluZ3NcbiAgICAgKi9cbiAgICBjb25zdEVudW0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEVtaXQgYCNbbmFwaShzdHJpbmdfZW51bSldYCBlbnVtcyBhcyBydW50aW1lIGVudW1zIChgZXhwb3J0IGRlY2xhcmUgZW51bWApIHVuZGVyIGAtLW5vLWNvbnN0LWVudW1gLiBEZWZhdWx0OiB0eXBlLW9ubHkgdW5pb24uXG4gICAgICovXG4gICAgcnVudGltZVN0cmluZ0VudW0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIGR0cyBoZWFkZXIgcHJlcGVuZCB0byB0aGUgZ2VuZXJhdGVkIGR0cyBmaWxlXG4gICAgICovXG4gICAgZHRzSGVhZGVyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIGR0cyBoZWFkZXIgZmlsZSBwYXRoIHRvIGJlIHByZXBlbmRlZCB0byB0aGUgZ2VuZXJhdGVkIGR0cyBmaWxlXG4gICAgICogaWYgYm90aCBkdHNIZWFkZXIgYW5kIGR0c0hlYWRlckZpbGUgYXJlIHByb3ZpZGVkLCBkdHNIZWFkZXJGaWxlIHdpbGwgYmUgdXNlZFxuICAgICAqL1xuICAgIGR0c0hlYWRlckZpbGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogd2FzbSBjb21waWxhdGlvbiBvcHRpb25zXG4gICAgICovXG4gICAgd2FzbT86IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViQXNzZW1ibHkvSmF2YVNjcmlwdF9pbnRlcmZhY2UvTWVtb3J5XG4gICAgICAgICAqIEBkZWZhdWx0IDQwMDAgcGFnZXMgKDI1MCBNaUIpLCBvciAxMDI0IHBhZ2VzICg2NCBNaUIpIGZvciB0aGUgZGVmZXJyZWQgd29ya2VyZCBsb2FkZXJcbiAgICAgICAgICovXG4gICAgICAgIGluaXRpYWxNZW1vcnk/OiBudW1iZXI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbml0aWFsIGxpbmVhciBtZW1vcnksIGluIDY0IEtpQiBwYWdlcywgZm9yIHRoZSAqKnRocmVhZGxlc3MqKlxuICAgICAgICAgKiAoYHdhc20zMi13YXNpcDFgKSBsb2FkZXJzIG9ubHk6IHRoZSBOb2RlIENKUyBsb2FkZXIsIHRoZSBicm93c2VyIGxvYWRlclxuICAgICAgICAgKiBhbmQgdGhlIGRlZmVycmVkIGAuL3dvcmtlcmRgIGxvYWRlci5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIHRocmVhZGVkIGxvYWRlcnMgYWxsb2NhdGUgb25lIGBzaGFyZWQ6IHRydWVgIG1lbW9yeSB0aGF0IGV2ZXJ5XG4gICAgICAgICAqIHdhc2ktdGhyZWFkcyB3b3JrZXIgbWFwcywgc28gZXZlcnkgd29ya2VyIHN0YWNrIGFuZCBldmVyeSB0aHJlYWQnc1xuICAgICAgICAgKiBhbGxvY2F0aW9ucyBjb21lIG91dCBvZiBpdCBhbmQgZ3Jvd2luZyBpdCBpcyBhIGNyb3NzLXRocmVhZCBldmVudDsgaXQgaXNcbiAgICAgICAgICogc2l6ZWQgZm9yIHRoZSB3aG9sZSBwb29sIHVwIGZyb250LiBUaGUgdGhyZWFkbGVzcyBsb2FkZXJzIGRyaXZlIGEgc2luZ2xlXG4gICAgICAgICAqIHRocmVhZCB0aHJvdWdoIGEgcGxhaW4gZ3Jvd2FibGUgYEFycmF5QnVmZmVyYDogdGhleSBvbmx5IGhhdmUgdG8gY2xlYXJcbiAgICAgICAgICogdGhlIG1vZHVsZSdzIG93biBsaW5rLXRpbWUgZmxvb3IgKGAtenN0YWNrLXNpemVgIHBsdXMgc3RhdGljIGRhdGEpIGFuZFxuICAgICAgICAgKiBncm93IG9uIGRlbWFuZCwgd2hpY2ggaXMgd2hhdCBsZXRzIHRoZSBzYW1lIGJ1aWxkIGZpdCBhIGhvc3Qgd2l0aCBhIGhhcmRcbiAgICAgICAgICogaXNvbGF0ZSBjYXAgc3VjaCBhcyB3b3JrZXJkJ3MgMTI4IE1pQi5cbiAgICAgICAgICpcbiAgICAgICAgICogRmFsbHMgYmFjayB0byBgaW5pdGlhbE1lbW9yeWAgd2hlbiB1bnNldCwgc28gZXhpc3RpbmcgcHJvamVjdHMgYXJlXG4gICAgICAgICAqIHVuYWZmZWN0ZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZWZhdWx0IGBpbml0aWFsTWVtb3J5YCAoNDAwMCBwYWdlcyksIG9yIDEwMjQgcGFnZXMgZm9yIHRoZSBkZWZlcnJlZFxuICAgICAgICAgKiAgIGAuL3dvcmtlcmRgIGxvYWRlclxuICAgICAgICAgKi9cbiAgICAgICAgdGhyZWFkbGVzc0luaXRpYWxNZW1vcnk/OiBudW1iZXI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVmYXVsdCA2NTUzNiBwYWdlcyAoNEdpQilcbiAgICAgICAgICovXG4gICAgICAgIG1heGltdW1NZW1vcnk/OiBudW1iZXI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaGV0aGVyIHRoZSBnZW5lcmF0ZWQgYDxwYWNrYWdlTmFtZT4td2FzbTMyLXdhc2lgIHBhY2thZ2UgaXMgZGVjbGFyZWQgYXNcbiAgICAgICAgICogYW4gYG9wdGlvbmFsRGVwZW5kZW5jeWAgb2YgdGhlIHJvb3QgcGFja2FnZS5cbiAgICAgICAgICpcbiAgICAgICAgICogV2hlbiBuYXRpdmUgdGFyZ2V0cyBhcmUgY29uZmlndXJlZCB0aGUgV0FTSSBwYWNrYWdlIGlzIGEgZmFsbGJhY2sgZm9yXG4gICAgICAgICAqIGhvc3RzIHRoYXQgY2Fubm90IGxvYWQgYSBgLm5vZGVgIGJpbmFyeSwgc28gZGVjbGFyaW5nIGl0IHdvdWxkIG1ha2UgZXZlcnlcbiAgICAgICAgICogY29uc3VtZXIgZG93bmxvYWQgdGhlIGAud2FzbWAgYmluYXJ5IHRoZXkgd2lsbCBuZXZlciBsb2FkLiBJdCBpc1xuICAgICAgICAgKiB0aGVyZWZvcmUgb21pdHRlZCBieSBkZWZhdWx0IGFuZCBpcyBleHBlY3RlZCB0byBiZSBpbnN0YWxsZWQgb24gZGVtYW5kIGJ5XG4gICAgICAgICAqIHRoZSBlbnZpcm9ubWVudHMgdGhhdCBuZWVkIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBXaGVuIFdBU0kgaXMgdGhlIG9ubHkgY29uZmlndXJlZCB0YXJnZXQgaXQgaXMgdGhlIHByaW1hcnkgYXJ0aWZhY3QgYW5kIGlzXG4gICAgICAgICAqIGRlY2xhcmVkIGJ5IGRlZmF1bHQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFNldCB0aGlzIGV4cGxpY2l0bHkgdG8gb3ZlcnJpZGUgZWl0aGVyIGRlZmF1bHQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWUgd2hlbiBldmVyeSBjb25maWd1cmVkIHRhcmdldCBpcyBXQVNJLCBmYWxzZSBvdGhlcndpc2VcbiAgICAgICAgICovXG4gICAgICAgIG9wdGlvbmFsRGVwZW5kZW5jeT86IGJvb2xlYW47XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaGV0aGVyIHRoZSBnZW5lcmF0ZWQgV0FTSSBsb2FkZXJzIGJvb3RzdHJhcCB0aGUgYG5hcGktYXN5bmMtcnVudGltZWBcbiAgICAgICAgICogQ3VycmVudFRocmVhZCBKYXZhU2NyaXB0IGhvc3RzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBBIGJpbmRpbmcgYnVpbHQgd2l0aCB0aGUgYG5hcGktYXN5bmMtcnVudGltZWAgY3JhdGUgZGVmYXVsdHMgdG8gdGhlXG4gICAgICAgICAqIGBDdXJyZW50VGhyZWFkYCBmbGF2b3Igb24gZXZlcnkgV2ViQXNzZW1ibHkgdGFyZ2V0LiBJdCBpcyB0aGUgb25seVxuICAgICAgICAgKiBmbGF2b3Igb24gdGhyZWFkbGVzcyBgd2FzbTMyLXdhc2lwMWA7IGB3YXNtMzItd2FzaXAxLXRocmVhZHNgIGFsc29cbiAgICAgICAgICogYWNjZXB0cyBhbiBleHBsaWNpdGx5IGNvbmZpZ3VyZWQgYE11bHRpVGhyZWFkYC4gVW5kZXIgYEN1cnJlbnRUaHJlYWRgXG4gICAgICAgICAqIGl0cyBmdXR1cmVzIG1ha2Ugbm8gcHJvZ3Jlc3MgdW50aWwgYSB0YXNrIGhvc3QgaXMgcmVnaXN0ZXJlZCwgYW5kIGl0c1xuICAgICAgICAgKiB0aW1lcnMgbmV2ZXIgZmlyZSB1bnRpbCBhIHRpbWVyIGhvc3QgaXMsIHNvIHRoZSBsb2FkZXIgbXVzdCBpbnN0YWxsXG4gICAgICAgICAqIGJvdGggcmlnaHQgYWZ0ZXIgaW5zdGFudGlhdGlvbiBhbmQgdW5yZWdpc3RlciB0aGVtIGJlZm9yZSB0aGVcbiAgICAgICAgICogZW52aXJvbm1lbnQgaXMgZGVzdHJveWVkLiBBIGBNdWx0aVRocmVhZGAgYmluZGluZyB1c2VzIG5laXRoZXIgaG9zdCBhbmRcbiAgICAgICAgICogdGhlIGluc3RhbGxlZCB0YXNrIGhvc3QgaXMgdW5yZWYnZCwgc28gbGVhdmluZyB0aGlzIGVuYWJsZWQgaXMgYWxzb1xuICAgICAgICAgKiBjb3JyZWN0IGZvciBhbiBhZGRvbiB0aGF0IHBpY2tzIGl0cyBmbGF2b3IgYXQgcnVudGltZS5cbiAgICAgICAgICpcbiAgICAgICAgICogRW5hYmxpbmcgdGhpcyBlbWl0cyB0aGF0IGJvb3RzdHJhcCBpbiB0aGUgbm9kZSwgYnJvd3NlciBhbmQgZGVmZXJyZWRcbiAgICAgICAgICogKHdvcmtlcmQpIGxvYWRlcnMsIGFuZCBkZWNsYXJlcyBgQG5hcGktcnMvYXN5bmMtcnVudGltZWAgaW4gdGhlXG4gICAgICAgICAqIGdlbmVyYXRlZCBgPHBhY2thZ2VOYW1lPi13YXNtMzItKmAgcGFja2FnZXMuIFRoZSBsb2FkZXIgZGVsZWdhdGVzIHRoZVxuICAgICAgICAgKiB3aG9sZSBob3N0IGNvbnRyYWN0IOKAlCB0aGUgc2V2ZW4gZXhwb3J0cywgY29udHJhY3QgdmVyc2lvbiA0LCB0aGVcbiAgICAgICAgICogcmVzZXJ2YXRpb24gaWRlbnRpdHksIHRoZSBsaXZlbmVzcyBwcm9iZSBhbmQgdGhlIHJvbGxiYWNrIOKAlCB0byB0aGF0XG4gICAgICAgICAqIHBhY2thZ2UsIHNvIGEgYmluZGluZyB0aGF0IGRvZXMgbm90IGFjdHVhbGx5IGV4cG9zZSB0aGUgY29udHJhY3QgZmFpbHNcbiAgICAgICAgICogbG91ZGx5IGF0IGxvYWQgd2l0aCBgRVJSX05BUElfQVNZTkNfUlVOVElNRV9CSU5ESU5HX01JU01BVENIYC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGJvb3RzdHJhcCBydW5zIGFmdGVyIGluc3RhbnRpYXRpb24sIHNvIGFmdGVyIGAjW21vZHVsZV9pbml0XWA6IHRoZVxuICAgICAgICAgKiBob3N0IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgYXJlIGV4cG9ydHMgb2YgdGhlIGJpbmRpbmcgaXRzZWxmLiBDb2RlIHRoYXRcbiAgICAgICAgICogcnVucyBkdXJpbmcgbW9kdWxlIHJlZ2lzdHJhdGlvbiBtdXN0IG5vdCBjcmVhdGUgdGltZXJzIChgc2xlZXBfdW50aWxgXG4gICAgICAgICAqIGZhaWxzIGxvdWQgYXQgY3JlYXRpb24gd2l0aG91dCBhIHRpbWVyIGhvc3QpIGFuZCBjYW5ub3QgZXhwZWN0IHRhc2tcbiAgICAgICAgICogcHJvZ3Jlc3MgdW50aWwgdGhlIGxvYWRlciBoYXMgcmV0dXJuZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICBhc3luY1J1bnRpbWU/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgICogQnJvd3NlciB3YXNtIGJpbmRpbmcgY29uZmlndXJhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYnJvd3Nlcj86IHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2hldGhlciB0byB1c2UgZnMgbW9kdWxlIGluIGJyb3dzZXJcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZnM/OiBib29sZWFuO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGV0aGVyIHRvIGluaXRpYWxpemUgd2FzbSBhc3luY2hyb25vdXNseVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBhc3luY0luaXQ/OiBib29sZWFuO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGV0aGVyIHRvIGluamVjdCBgYnVmZmVyYCB0byBlbW5hcGkgY29udGV4dFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBidWZmZXI/OiBib29sZWFuO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGV0aGVyIHRvIGVtaXQgY3VzdG9tIGV2ZW50cyBmb3IgZXJyb3JzIGluIHdvcmtlclxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBlcnJvckV2ZW50PzogYm9vbGVhbjtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIGJpbmFyeU5hbWUgaW5zdGVhZFxuICAgICAqL1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIHBhY2thZ2VOYW1lIGluc3RlYWRcbiAgICAgKi9cbiAgICBwYWNrYWdlPzoge1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIHRhcmdldHMgaW5zdGVhZFxuICAgICAqL1xuICAgIHRyaXBsZXM/OiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaGV0aGVyIGVuYWJsZSBkZWZhdWx0IHRhcmdldHNcbiAgICAgICAgICovXG4gICAgICAgIGRlZmF1bHRzOiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgICogQWRkaXRpb25hbCB0YXJnZXRzIHRvIGJlIGNvbXBpbGVkIGZvclxuICAgICAgICAgKi9cbiAgICAgICAgYWRkaXRpb25hbD86IHN0cmluZ1tdO1xuICAgIH07XG59XG5leHBvcnQgaW50ZXJmYWNlIENvbW1vblBhY2thZ2VKc29uRmllbGRzIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGtleXdvcmRzPzogc3RyaW5nW107XG4gICAgYXV0aG9yPzogc3RyaW5nO1xuICAgIGF1dGhvcnM/OiBzdHJpbmdbXTtcbiAgICBsaWNlbnNlPzogc3RyaW5nO1xuICAgIGNwdT86IHN0cmluZ1tdO1xuICAgIG9zPzogc3RyaW5nW107XG4gICAgbGliYz86IHN0cmluZ1tdO1xuICAgIGZpbGVzPzogc3RyaW5nW107XG4gICAgcmVwb3NpdG9yeT86IGFueTtcbiAgICBob21lcGFnZT86IGFueTtcbiAgICBlbmdpbmVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBwdWJsaXNoQ29uZmlnPzogYW55O1xuICAgIGJ1Z3M/OiBhbnk7XG4gICAgbmFwaT86IFVzZXJOYXBpQ29uZmlnO1xuICAgIHR5cGU/OiAnbW9kdWxlJyB8ICdjb21tb25qcyc7XG4gICAgc2NyaXB0cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgbWFpbj86IHN0cmluZztcbiAgICBtb2R1bGU/OiBzdHJpbmc7XG4gICAgdHlwZXM/OiBzdHJpbmc7XG4gICAgYnJvd3Nlcj86IHN0cmluZztcbiAgICBleHBvcnRzPzogYW55O1xuICAgIGRlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgZGV2RGVwZW5kZW5jaWVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBvcHRpb25hbERlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgYXZhPzoge1xuICAgICAgICB0aW1lb3V0Pzogc3RyaW5nO1xuICAgIH07XG59XG5leHBvcnQgdHlwZSBOYXBpQ29uZmlnID0gUmVxdWlyZWQ8UGljazxVc2VyTmFwaUNvbmZpZywgJ2JpbmFyeU5hbWUnIHwgJ3BhY2thZ2VOYW1lJyB8ICducG1DbGllbnQnPj4gJiBQaWNrPFVzZXJOYXBpQ29uZmlnLCAnd2FzbScgfCAnZHRzSGVhZGVyJyB8ICdkdHNIZWFkZXJGaWxlJyB8ICdjb25zdEVudW0nIHwgJ3J1bnRpbWVTdHJpbmdFbnVtJyB8ICdyb290UHVibGlzaGVyJz4gJiB7XG4gICAgdGFyZ2V0czogVGFyZ2V0W107XG4gICAgcGFja2FnZUpzb246IENvbW1vblBhY2thZ2VKc29uRmllbGRzO1xufTtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlYWROYXBpQ29uZmlnKHBhdGg6IHN0cmluZywgY29uZmlnUGF0aD86IHN0cmluZyk6IFByb21pc2U8TmFwaUNvbmZpZz47XG4iLCJpbXBvcnQgdHlwZSB7IEJ1aWxkT3B0aW9ucyBhcyBSYXdCdWlsZE9wdGlvbnMgfSBmcm9tICcuLi9kZWYvYnVpbGQuanMnO1xuaW1wb3J0IHsgdHlwZSBOYXBpQ29uZmlnLCB0eXBlIFRhcmdldCwgdHlwZSBDYXJnb1dvcmtzcGFjZU1ldGFkYXRhIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xudHlwZSBPdXRwdXRLaW5kID0gJ2pzJyB8ICdkdHMnIHwgJ25vZGUnIHwgJ2V4ZScgfCAnd2FzbSc7XG50eXBlIE91dHB1dCA9IHtcbiAgICBraW5kOiBPdXRwdXRLaW5kO1xuICAgIHBhdGg6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBCdWlsZEZvcm1hdCA9ICdlc20nIHwgJ2NvbW1vbmpzJztcbnR5cGUgQnVpbGRPcHRpb25zID0gUmF3QnVpbGRPcHRpb25zICYge1xuICAgIGNhcmdvT3B0aW9ucz86IHN0cmluZ1tdO1xufTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFdBU0lfQVJUSUZBQ1RfTUVUQURBVEFfUFJFRklYID0gXCIvLyBuYXBpLXJzLWFydGlmYWN0LW1ldGFkYXRhOlwiO1xuZXhwb3J0IGludGVyZmFjZSBBc3luY1J1bnRpbWVIb3N0Q29udHJhY3RJbnB1dCB7XG4gICAgLyoqIFRoZSBhZGRvbidzIGV4cG9ydCBuYW1lcywgYXMgcmVwb3J0ZWQgYnkgdGhlIHR5cGUgZGVmaW5pdGlvbiBwYXNzLiAqL1xuICAgIGlkZW50czogc3RyaW5nW107XG4gICAgLyoqIFdoZXRoZXIgYG5hcGkud2FzbS5hc3luY1J1bnRpbWVgIGlzIG9uLiAqL1xuICAgIGFzeW5jUnVudGltZTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGBpZGVudHNgIGlzIHJlYWwgZXhwb3J0IG1ldGFkYXRhLiBgbmFwaS1kZXJpdmVgIHdpdGhvdXQgaXRzXG4gICAgICogYHR5cGUtZGVmYCBmZWF0dXJlIGVtaXRzIG5vIHR5cGUgZGVmaW5pdGlvbnMsIHNvIHRoZSBpZGVudCBsaXN0IGlzIGVtcHR5XG4gICAgICogZm9yIGV2ZXJ5IHN1Y2ggYWRkb24g4oCUIGluY2x1ZGluZyBvbmUgdGhhdCBkb2VzIGV4cG9ydCB0aGUgd2hvbGUgaG9zdFxuICAgICAqIGNvbnRyYWN0LiBBbiBlbXB0eSBsaXN0IGlzIG9ubHkgZXZpZGVuY2Ugd2hlbiB0aGlzIGlzIGB0cnVlYC5cbiAgICAgKi9cbiAgICB0eXBlRGVmQXZhaWxhYmxlOiBib29sZWFuO1xuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG59XG4vKipcbiAqIENyb3NzLWNoZWNrIGBuYXBpLndhc20uYXN5bmNSdW50aW1lYCBhZ2FpbnN0IHRoZSBhZGRvbidzIGV4cG9ydCBsaXN0LlxuICpcbiAqIFJldHVybnMgdGhlIG1lc3NhZ2UgdG8gdGhyb3cgKGBlcnJvcmApIG9yIHRvIGxvZyAoYHdhcm5pbmdgKSwgaWYgYW55LiBXaXRoXG4gKiBubyB0eXBlLWRlZiBtZXRhZGF0YSB0aGVyZSBpcyBub3RoaW5nIHRvIGNoZWNrIGFnYWluc3QsIHNvIHRoZSBidWlsZCBzYXlzIHNvXG4gKiBhbmQgZGVmZXJzIHRvIHRoZSBsb2FkZXIncyBvd24gcnVudGltZSBkZXRlY3Rpb24uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNoZWNrQXN5bmNSdW50aW1lSG9zdENvbnRyYWN0KHsgaWRlbnRzLCBhc3luY1J1bnRpbWUsIHR5cGVEZWZBdmFpbGFibGUsIHBhY2thZ2VOYW1lLCB9OiBBc3luY1J1bnRpbWVIb3N0Q29udHJhY3RJbnB1dCk6IHtcbiAgICBlcnJvcj86IHN0cmluZztcbiAgICB3YXJuaW5nPzogc3RyaW5nO1xufTtcbnR5cGUgQ2FyZ29Db25maWdGaW5nZXJwcmludCA9IHJlYWRvbmx5IFtwYXRoOiBzdHJpbmcsIGhhc2g6IHN0cmluZ107XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXRDYXJnb0RlcGVuZGVuY3lHcmFwaEZpbmdlcnByaW50KG1ldGFkYXRhOiBDYXJnb1dvcmtzcGFjZU1ldGFkYXRhLCByb290UGFja2FnZUlkOiBzdHJpbmcpOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXRUeXBlRGVmQ2FjaGVGb2xkZXIob3B0aW9uczoge1xuICAgIHRhcmdldERpcjogc3RyaW5nO1xuICAgIGNyYXRlTmFtZTogc3RyaW5nO1xuICAgIG1hbmlmZXN0UGF0aDogc3RyaW5nO1xuICAgIHRhcmdldFRyaXBsZTogc3RyaW5nO1xuICAgIHByb2ZpbGU6IHN0cmluZztcbiAgICBmZWF0dXJlcz86IHN0cmluZ1tdO1xuICAgIGFsbEZlYXR1cmVzPzogYm9vbGVhbjtcbiAgICBub0RlZmF1bHRGZWF0dXJlcz86IGJvb2xlYW47XG4gICAgY2FyZ29PcHRpb25zPzogc3RyaW5nW107XG4gICAgcnVzdEZsYWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPjtcbiAgICBjYXJnb1Byb2ZpbGVFbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICAgIGNhcmdvQ29uZmlnPzogQ2FyZ29Db25maWdGaW5nZXJwcmludFtdO1xuICAgIGNhcmdvRGVwZW5kZW5jeUdyYXBoPzogc3RyaW5nO1xufSk6IHN0cmluZztcbi8qKlxuICogTmFtZSBvZiB0aGUgZW1uYXBpIGFyY2hpdmUgZGlyZWN0b3J5IGJ1aWx0IGFnYWluc3QgdGhlIHdhc2ktc2RrIDM0IEFCSS5cbiAqIE9ubHkgdGhlIHRocmVhZGVkIHRhcmdldCBoYXMgb25lOiB0aGUgc2lnbmF0dXJlIGNoYW5nZSBpdCBjYXJyaWVzIGxpdmVzIGluXG4gKiB0aGUgdGhyZWFkcy1vbmx5IGZ1dGV4IGNvZGUuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IEVNTkFQSV9XQVNJX1NES18zNF9MSU5LX0RJUiA9IFwid2FzbTMyLXdhc2lwMS10aHJlYWRzLXdhc2ktc2RrLTM0XCI7XG5leHBvcnQgaW50ZXJmYWNlIEVtbmFwaUxpbmtEaXJTZWxlY3Rpb24ge1xuICAgIC8qKiBEaXJlY3RvcnkgbmFtZSB1bmRlciBgZW1uYXBpL2xpYmAgd2hvc2UgYXJjaGl2ZXMgc2hvdWxkIGJlIGxpbmtlZC4gKi9cbiAgICBsaW5rRGlyTmFtZTogc3RyaW5nO1xuICAgIC8qKiBEZXRlY3RlZCB3YXNpLXNkayBtYWpvciB2ZXJzaW9uLCBgbnVsbGAgd2hlbiBubyB3YXNpLXNkayBpcyBjb25maWd1cmVkLiAqL1xuICAgIHdhc2lTZGtNYWpvcjogbnVtYmVyIHwgbnVsbDtcbiAgICAvKiogYHRydWVgIHdoZW4gdGhlIHRvb2xjaGFpbiBuZWVkcyB0aGUgd2FzaS1zZGsgMzQgYXJjaGl2ZXMuICovXG4gICAgbmVlZHNXYXNpU2RrMzQ6IGJvb2xlYW47XG59XG4vKipcbiAqIFBpY2sgdGhlIGVtbmFwaSBhcmNoaXZlIGRpcmVjdG9yeSBmb3IgYSBXQVNJIGJ1aWxkLlxuICpcbiAqIHdhc2ktbGliYyByZW1vdmVkIHRoZSB1bnVzZWQgYGludCBvcGAgcGFyYW1ldGVyIGZyb21cbiAqIGBfX3dhc2lsaWJjX2Z1dGV4X3dhaXRfYXRvbWljX3dhaXRgIC8gYF9fd2FzaWxpYmNfZnV0ZXhfd2FpdF9tYXliZV9idXN5YCxcbiAqIGFuZCB3YXNpLXNkayAzNCBpcyB0aGUgZmlyc3QgcmVsZWFzZSBzaGlwcGluZyB0aGUgMy1hcmd1bWVudCBzaWduYXR1cmUuXG4gKiBMaW5raW5nIHRoZSBsZWdhY3kgNC1hcmd1bWVudCBhcmNoaXZlcyBhZ2FpbnN0IGEgd2FzaS1zZGsgPj0gMzQgc3lzcm9vdFxuICogbWFrZXMgYHdhc20tbGRgIHJlcG9ydCBgZnVuY3Rpb24gc2lnbmF0dXJlIG1pc21hdGNoYCBhbmQgZW1pdCBhbiBpbnZhbGlkXG4gKiB3YXNtIG1vZHVsZSwgc28gZW1uYXBpIHB1Ymxpc2hlcyBhIHNlY29uZCBhcmNoaXZlIHNldCBmb3IgdGhlIG5ldyBBQkkgYW5kXG4gKiB0aGUgZGlyZWN0b3J5IGhhcyB0byBiZSBjaG9zZW4gYnkgd2FzaS1zZGsgdmVyc2lvbiwgbm90IGJ5IHRhcmdldCB0cmlwbGUuXG4gKlxuICogV2l0aG91dCBgV0FTSV9TREtfUEFUSGAsIGNhcmdvIGxpbmtzIHRocm91Z2ggYHJ1c3QtbGxkYCBhZ2FpbnN0IHRoZVxuICogd2FzaS1saWJjIGJ1bmRsZWQgd2l0aCB0aGUgUnVzdCBzdGFuZGFyZCBsaWJyYXJ5LCBzbyB0aGF0IGFyY2hpdmUgaXNcbiAqIHByb2JlZCBpbnN0ZWFkLiBSdXN0IHBpY2tlZCB1cCB3YXNpLXNkayAzNCBpbiBydXN0LWxhbmcvcnVzdCMxNjE3NzMsIHdoaWNoXG4gKiBsYW5kcyBpbiAxLjEwMCwgYW5kIGEgdG9vbGNoYWluIGNhcnJ5aW5nIGl0IG5lZWRzIHRoZSBuZXcgYXJjaGl2ZXMgZXZlblxuICogdGhvdWdoIG5vIHdhc2ktc2RrIGlzIGNvbmZpZ3VyZWQuXG4gKlxuICogVGhlIGxlZ2FjeSBkaXJlY3Rvcnkgc3RheXMgdGhlIGRlZmF1bHQgd2hlbmV2ZXIgdGhlIEFCSSBjYW5ub3QgYmVcbiAqIGRldGVybWluZWQsIGFuZCBvbGRlciBlbW5hcGkgcmVsZWFzZXMgc2hpcCBpdCBhbG9uZS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc2VsZWN0RW1uYXBpTGlua0RpcihlbW5hcGlMaWJEaXI6IHN0cmluZywgd2FzaVRhcmdldDogc3RyaW5nLCBoYXNUaHJlYWRzOiBib29sZWFuLCB3YXNpU2RrUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLCB7IGN3ZCwgcnVzdFdhc2lMaWJjLCB9Pzoge1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBydXN0V2FzaUxpYmM/OiBzdHJpbmcgfCBudWxsO1xufSk6IEVtbmFwaUxpbmtEaXJTZWxlY3Rpb247XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVXYXNpQ29tcGlsZXJGbGFncyh3YXNpU2RrUGF0aDogc3RyaW5nLCB3YXNpVGFyZ2V0OiBzdHJpbmcsIGhhc1RocmVhZHM6IGJvb2xlYW4sIHNoZWxsRXNjYXBlZEZsYWdzPzogYm9vbGVhbik6IHtcbiAgICBjb21waWxlRmxhZ3M6IHN0cmluZztcbiAgICBsaW5rZXJGbGFnczogc3RyaW5nO1xufTtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZUFydGlmYWN0RGVzdGluYXRpb25OYW1lKGJpbmFyeU5hbWU6IHN0cmluZywgdGFyZ2V0OiBUYXJnZXQsIHNvdXJjZU5hbWU6IHN0cmluZywgcGxhdGZvcm06IGJvb2xlYW4pOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzZWxlY3RXYXNpQnJvd3NlclRhcmdldChidWlsZFRhcmdldDogVGFyZ2V0LCBjb25maWd1cmVkVGFyZ2V0czogVGFyZ2V0W10sIGVtaXR0ZWRUYXJnZXRzOiBUYXJnZXRbXSk6IFRhcmdldDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVdhc2lCcm93c2VyRW50cnkocGFja2FnZU5hbWU6IHN0cmluZywgcGxhdGZvcm1BcmNoQUJJOiBzdHJpbmcsIGlkZW50czogc3RyaW5nW10pOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVXYXNpRGVmZXJyZWRCaW5kaW5nVHlwZURlZihiaW5kaW5nTW9kdWxlU3BlY2lmaWVyOiBzdHJpbmcsIGhhc1R5cGVEZWY6IGJvb2xlYW4sIHBsYXRmb3JtQXJjaEFCST86IHN0cmluZyk6IHN0cmluZztcbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRXYXNtTWVtb3J5IHtcbiAgICAvKiogYHVuZGVmaW5lZGAga2VlcHMgZWFjaCB0ZW1wbGF0ZSdzIG93biBkZWZhdWx0ICg0MDAwLCBvciAxMDI0IGZvciBgLi93b3JrZXJkYCkuICovXG4gICAgaW5pdGlhbE1lbW9yeT86IG51bWJlcjtcbiAgICAvKiogYHVuZGVmaW5lZGAga2VlcHMgdGhlIHRlbXBsYXRlIGRlZmF1bHQgKDY1NTM2KS4gKi9cbiAgICBtYXhpbXVtTWVtb3J5PzogbnVtYmVyO1xufVxuLyoqXG4gKiBSZXNvbHZlIHRoZSBgV2ViQXNzZW1ibHkuTWVtb3J5YCBkZXNjcmlwdG9yIHRoZSBnZW5lcmF0ZWQgbG9hZGVycyBlbWJlZCwgZm9yXG4gKiBvbmUgV0FTSSBmbGF2b3IuXG4gKlxuICogVGhlIHRocmVhZGVkIGxvYWRlcnMgc2hhcmUgb25lIGBzaGFyZWQ6IHRydWVgIG1lbW9yeSB3aXRoIGV2ZXJ5IHdhc2ktdGhyZWFkc1xuICogd29ya2VyLCBzbyBpdCBpcyBzaXplZCBmb3IgdGhlIHdob2xlIHBvb2wuIFRoZSB0aHJlYWRsZXNzIGxvYWRlcnMgaGF2ZSBhXG4gKiBzaW5nbGUgdGhyZWFkIGFuZCBhIHBsYWluIGdyb3dhYmxlIGBBcnJheUJ1ZmZlcmAsIHNvIHRoZXkgb25seSBuZWVkIHRvIGNsZWFyXG4gKiB0aGUgbW9kdWxlJ3MgbGluay10aW1lIGZsb29yIChgLXpzdGFjay1zaXplYCBwbHVzIHN0YXRpYyBkYXRhKSBhbmQgZ3JvdyBvblxuICogZGVtYW5kLiBgbmFwaS53YXNtLnRocmVhZGxlc3NJbml0aWFsTWVtb3J5YCBzaXplcyB0aGUgdGhyZWFkbGVzcyBsb2FkZXJzXG4gKiB3aXRob3V0IHNocmlua2luZyB0aGUgdGhyZWFkZWQgb25lOyB1bnNldCwgaXQgZmFsbHMgYmFjayB0b1xuICogYG5hcGkud2FzbS5pbml0aWFsTWVtb3J5YCBhbmQgbm90aGluZyBjaGFuZ2VzLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZXNvbHZlV2FzbU1lbW9yeSh3YXNtOiBOYXBpQ29uZmlnWyd3YXNtJ10sIGhhc1RocmVhZHM6IGJvb2xlYW4pOiBSZXNvbHZlZFdhc21NZW1vcnk7XG4vKipcbiAqIFdoZXRoZXIgYSBidWlsZCdzIGRlY2xhcmF0aW9uIGZpbGUgc2hvdWxkIGRlY2xhcmUgYF9fbmFwaUJpbmRpbmdUYXJnZXRgLlxuICpcbiAqIFRoZSBleHBvcnQgZXhpc3RzIG9ubHkgb24gYSBnZW5lcmF0ZWQgbG9hZGVyLCBzbyB0aGUgZGVjbGFyYXRpb24gaGFzIHRvXG4gKiBmb2xsb3cgdGhlIGxvYWRlcnMgYSBidWlsZCBhY3R1YWxseSB3cml0ZXMuIFRoaXMgbWlycm9ycyBib3RoIHdyaXRlcnM6XG4gKlxuICogLSB7QGxpbmsgd3JpdGVKc0JpbmRpbmd9IHdyaXRlcyB0aGUgcm9vdCBsb2FkZXIgZm9yIGAtLXBsYXRmb3JtYCB3aXRob3V0XG4gKiAgIGAtLW5vLWpzLWJpbmRpbmdgIChgcm9vdExvYWRlckNhbmRpZGF0ZWApLCBhbmQgdGhlbiBvbmx5IHdoZW4gdGhlIGJ1aWxkIGhhc1xuICogICBydW50aW1lIGV4cG9ydHMgb3IgYSBXQVNJIGZsYXZvciB0byBmYWxsIGJhY2sgdG8uXG4gKiAtIGBCdWlsZGVyLndyaXRlV2FzaUJpbmRpbmdgIHdyaXRlcyBhIGZsYXZvcidzIGxvYWRlciBzZXQgd2hlbiB0aGF0IGZsYXZvciBpc1xuICogICB0aGUgYnVpbGQgdGFyZ2V0LCBvciB3aGVuIGFuIGVhcmxpZXIgYnVpbGQgb2YgaXQgbGVmdCBtZXRhZGF0YSBvbiBkaXNrXG4gKiAgIChgZW1pdHNXYXNpTG9hZGVyYCkuIEEgbWVyZWx5IGNvbmZpZ3VyZWQgZmxhdm9yIGlzIHNraXBwZWQsIGFuZCBhIGJ1aWxkXG4gKiAgIHRoYXQgc2tpcHMgZXZlcnkgZmxhdm9yIGVtaXRzIG5vIGxvYWRlciB0byBjYXJyeSB0aGUgZXhwb3J0LlxuICpcbiAqIFRoZSBleHBvcnQgbGlzdCBpcyBvbmx5IGtub3duIG9uY2UgdHlwZWdlbiBoYXMgcnVuLCBhbmQgdHlwZWdlbiB3cml0ZXMgdGhlXG4gKiBkZWNsYXJhdGlvbiBmaWxlIGl0c2VsZiwgc28gdGhlIGRlY2lzaW9uIGNvbWVzIGJhY2sgYXMgYSBwcmVkaWNhdGUgb3ZlciB0aGF0XG4gKiBsaXN0IGluc3RlYWQgb2YgYSBmbGFnIHRha2VuIHVwIGZyb250LlxuICpcbiAqIEl0IGdhdGVzIHRoZSAqcmVzZXJ2YXRpb24qIG9mIHRoZSBuYW1lIHRvbyDigJQgYEJ1aWxkZXIuZ2VuZXJhdGVUeXBlRGVmYCBjYWxsc1xuICoge0BsaW5rIGFzc2VydEJpbmRpbmdUYXJnZXRJZGVudEZyZWV9IG9ubHkgd2hlbiB0aGlzIGFuc3dlcnMgYHRydWVgLiBEZWNsYXJpbmdcbiAqIHRoZSBuYW1lIGFuZCBmb3JiaWRkaW5nIGFuIGFkZG9uIGZyb20gZXhwb3J0aW5nIGl0IGFyZSB0aGUgc2FtZSBxdWVzdGlvbiwgYW5kXG4gKiBhIGJ1aWxkIHRoYXQgZW1pdHMgbm8gbG9hZGVyIGFza3MgbmVpdGhlci5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYmluZGluZ1RhcmdldERlY2xhcmF0aW9uUHJlZGljYXRlKGlucHV0OiB7XG4gICAgcm9vdExvYWRlckNhbmRpZGF0ZTogYm9vbGVhbjtcbiAgICBoYXNXYXNpRmFsbGJhY2s6IGJvb2xlYW47XG4gICAgZW1pdHNXYXNpTG9hZGVyOiBib29sZWFuO1xufSk6IChleHBvcnRzOiByZWFkb25seSBzdHJpbmdbXSkgPT4gYm9vbGVhbjtcbi8qKlxuICogVGhlIGAuZC5jdHNgIGNvbnRlbnQgZm9yIGEgV0FTSSBmbGF2b3IgbG9hZGVyLCBkZXJpdmVkIGZyb20gdGhlIHJvb3RcbiAqIGRlY2xhcmF0aW9uIHRoaXMgYnVpbGQgd3JvdGUuXG4gKlxuICogQW4gRVNNIHNvdXJjZSAoYCouZC5tdHNgLCBvciBgKi5kLnRzYCBpbiBhIGBcInR5cGVcIjogXCJtb2R1bGVcImAgcGFja2FnZSkgaXNcbiAqIHJlLWRlY2xhcmVkIHZlcmJhdGltIHdoZW4gbm90aGluZyBpbiBpdCBjaGFuZ2VzIG1lYW5pbmcgdW5kZXIgQ29tbW9uSlNcbiAqIGludGVycHJldGF0aW9uIOKAlCB3aGljaCBpcyBldmVyeXRoaW5nIGEgZ2VuZXJhdGVkIHR5cGVkZWYgYW5kIG1vc3RcbiAqIGAtLWR0cy1oZWFkZXJgcyBjb250YWluLiB7QGxpbmsgY29tbW9uSnNEZWNsYXJhdGlvbkJhcnJpZXJ9IG5hbWVzIHRoZVxuICogY29uc3RydWN0cyB0aGF0IHN0aWxsIHJlZnVzZSwgYW5kIHdoeS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcHJlcGFyZVdhc2lCaW5kaW5nVHlwZURlZihzb3VyY2U6IHN0cmluZywgc291cmNlUGF0aDogc3RyaW5nLCBkZXN0aW5hdGlvblBhdGg6IHN0cmluZywgaGFzVGhyZWFkczogYm9vbGVhbiwgcGFja2FnZVR5cGU/OiAnbW9kdWxlJyB8ICdjb21tb25qcycpOiBzdHJpbmc7XG4vKipcbiAqIE1ha2UgYSBkZWNsYXJhdGlvbiBmaWxlIGRlY2xhcmUgdGhlIGBfX25hcGlCaW5kaW5nVGFyZ2V0YCBpdHMgbG9hZGVyIGV4cG9ydHMuXG4gKlxuICogYHBsYXRmb3JtQXJjaEFCSWAgbmFtZXMgdGhlIFdBU0kgZmxhdm9yIHRoZSBmaWxlIHR5cGVzLCBhbmQgdGhlIGRlY2xhcmF0aW9uXG4gKiBpcyB0aGVuIHRoYXQgZmxhdm9yJ3MgZXhhY3QgbGl0ZXJhbDsgd2l0aG91dCBpdCB0aGUgZmlsZSBpcyB0aGUgcm9vdCBlbnRyeSdzXG4gKiBhbmQga2VlcHMgdGhlIGZ1bGwgdW5pb24sIHdoaWNoIG9ubHkgdGhlIHJvb3QgZW50cnkgY2FuIHJlYWNoLlxuICpcbiAqIFR3byBraW5kcyBvZiBmaWxlIGFycml2ZSBoZXJlLiBBIFdBU0kgZGVjbGFyYXRpb24gZGVyaXZlZCBmcmVzaCBmcm9tIHRoZSByb290XG4gKiBgaW5kZXguZC50c2AgaW5oZXJpdHMgdGhhdCB1bmlvbiBhbmQgaGFzIHRvIGJlIG5hcnJvd2VkLiBBIGRlY2xhcmF0aW9uIGtlcHRcbiAqIGZyb20gYW4gZWFybGllciBidWlsZCDigJQgYSBidWlsZCB0aGF0IGRvZXMgbm90IHRhcmdldCBXQVNJIHJlZ2VuZXJhdGVzIGV2ZXJ5XG4gKiBkZWNsYXJlZCBmbGF2b3IncyBsb2FkZXIgZnJvbSB0aGUgbWV0YWRhdGEgdGhhdCBmbGF2b3IncyBvd24gYnVpbGQgbGVmdFxuICogYmVoaW5kLCBhbmQgcmV1c2VzIGl0cyBkZWNsYXJhdGlvbiBmaWxlIHZlcmJhdGltIOKAlCBtYXkgcHJlZGF0ZSB0aGUgZXhwb3J0XG4gKiBlbnRpcmVseSwgb3IgY2FycnkgYSB1bmlvbiBhbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhpcyBicmFuY2ggd3JvdGUuXG4gKlxuICogRWl0aGVyIG1heSBhbHNvIGNhcnJ5IGEgZGVjbGFyYXRpb24gbm9ib2R5IGhlcmUgd3JvdGUsIGJlY2F1c2UgYSBwcm9qZWN0J3NcbiAqIG93biBgLS1kdHMtaGVhZGVyYCBtYXkgZGVjbGFyZSB0aGUgZXhwb3J0IHRvIHdvcmsgYXJvdW5kIGxvYWRlcnMgdGhhdCBwcmVkYXRlXG4gKiBpdC4gU28gb3duZXJzaGlwLCBub3QgbWVyZSBwcmVzZW5jZSwgZGVjaWRlcyB3aGF0IGhhcHBlbnMuXG4gKlxuICogVGhyZWUgY2FzZXMsIGRlY2lkZWQgaW4gdGhpcyBvcmRlcjpcbiAqXG4gKiAtIFRoZSBkZWNsYXJhdGlvbiB0aGUgcmVuZGVyZWQgYC5kLnRzYCBoZWFkZXIgb3ducy4gYHJlbmRlcmVkSGVhZGVyYCBpcyB0aGF0XG4gKiAgIGhlYWRlciBhcyB0aGlzIGJ1aWxkIHJlbmRlcmVkIGl0OyBpZiBpdCBkZWNsYXJlcyB0aGUgZXhwb3J0LCB0aGUgcHJvamVjdCdzXG4gKiAgIG93biBkZWNsYXJhdGlvbiB3aW5zOiBub3RoaW5nIGlzIGFwcGVuZGVkLCBhbmQgaXQgaXMgbmV2ZXIgcmV3cml0dGVuLlxuICogICBEZWNsYXJpbmcgaXQgYSBzZWNvbmQgdGltZSB3b3VsZCBiZSBhIFRTMjQ1MSByZWRlY2xhcmF0aW9uLlxuICpcbiAqICAgVGhlIGhlYWRlciBpcyBtYXRjaGVkIGJ5IHRoZSB0ZXh0IG9mIGl0cyBkZWNsYXJhdGlvbiBhZ2FpbnN0IHRoZSBmaXJzdFxuICogICBkZWNsYXJhdGlvbiBpbiB0aGUgZmlsZSwgbm90IGJ5IGEgcHJlZml4IG9mIHRoZSBmaWxlLiBBIFdBU0kgZGVjbGFyYXRpb24gaXNcbiAqICAgZGVyaXZlZCB0aHJvdWdoIHtAbGluayBwcmVwYXJlV2FzaUJpbmRpbmdUeXBlRGVmfSwgd2hpY2ggcmV3cml0ZXMgcmVsYXRpdmVcbiAqICAgaW1wb3J0IHNwZWNpZmllcnMgYW5kLCBmb3IgdGhlIHRocmVhZGxlc3MgZmxhdm9yLCBkcm9wcyBgbm9kZTpzdHJlYW0vd2ViYFxuICogICBpbXBvcnRzIOKAlCBhIGhlYWRlciBjYXJyeWluZyBlaXRoZXIgc3RvcHMgYmVpbmcgYSBsaXRlcmFsIHByZWZpeCBvZiB0aGUgZmlsZVxuICogICBkZXJpdmVkIGZyb20gaXQsIHdoaWxlIHRoZSBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQgaXRzZWxmIGNvbWVzIHRocm91Z2hcbiAqICAgdW50b3VjaGVkIGFuZCBzdGF5cyB0aGUgZmlyc3Qgb25lLCBiZWNhdXNlIHRob3NlIHJld3JpdGVzIG5ldmVyIHJlb3JkZXJcbiAqICAgc3RhdGVtZW50cy4gT24gdGhlIHByZXNlcnZlZCBwYXRoIHRoZSBoZWFkZXIgaW4gaGFuZCBpcyB0aGlzIGJ1aWxkJ3MsIG5vdFxuICogICB0aGUgb25lIHRoZSBrZXB0IGZpbGUgd2FzIHdyaXR0ZW4gd2l0aCwgYW5kIGEga2VwdCBkZWNsYXJhdGlvbiB0aGF0IHJlYWRzXG4gKiAgIGRpZmZlcmVudGx5IGlzIGNvcnJlY3RseSBub3QgdGhlIGhlYWRlcidzLlxuICogLSBBIGRlY2xhcmF0aW9uIHRoZSBoZWFkZXIgZG9lcyBub3Qgb3duLCBhbG9uZSBpbiBpdHMgc3RhdGVtZW50LCB3aG9zZSB0eXBlXG4gKiAgIGlzIGJ1aWx0IG9ubHkgb3V0IG9mIHRoZSBsaXRlcmFscyB0aGlzIENMSSB3cml0ZXNcbiAqICAgKHtAbGluayBpc0dlbmVyYXRlZEJpbmRpbmdUYXJnZXRUeXBlfSksIGlzIG9uZSBvZiBvdXJzLiBTdGFsZSDigJQgYW4gb2xkZXJcbiAqICAgdW5pb24sIG9yIHRoZSBvdGhlciBmbGF2b3IncyBsaXRlcmFsIOKAlCBpdCBpcyByZXBsYWNlZCBpbiBwbGFjZSwgY29tbWVudFxuICogICBhbmQgYWxsLCBzbyBhIGZpbGUga2VwdCBmcm9tIGFuIGVhcmxpZXIgYnVpbGQgZW5kcyB1cCBzYXlpbmcgd2hhdCB0aGVcbiAqICAgbG9hZGVyIHdyaXR0ZW4gYmVzaWRlIGl0IG5vdyByZXBvcnRzLlxuICogLSBBbnkgb3RoZXIgZXhwb3J0IG9mIHRoZSBuYW1lIGlzIHNvbWVvbmUgZWxzZSdzIGFuZCBpcyBwcmVzZXJ2ZWQsIHdpdGhcbiAqICAgbm90aGluZyBhcHBlbmRlZCBiZXNpZGUgaXQuIEEgbG9vc2VyIG1hdGNoIHdvdWxkIHJld3JpdGUgYSBkZWNsYXJhdGlvbiBhXG4gKiAgIGAtLWR0cy1oZWFkZXJgIGNvbnRyaWJ1dGVkLiBUaGF0IGNvdmVycyBhIHN0YXRlbWVudCBkZWNsYXJpbmcgbW9yZSBuYW1lc1xuICogICB0aGFuIHRoaXMgb25lIOKAlCB0aGUgYmxvY2sgYSByZWZyZXNoIHJlcGxhY2VzIHNwYW5zIHRoZW0gdG9vLCBhbmQgdGhpcyBDTElcbiAqICAgd3JpdGVzIHRoZSBkZWNsYXJhdGlvbiBhbG9uZSDigJQgYW5kIGl0IGNvdmVycyBldmVyeSBvdGhlciB3YXkgYSBoZWFkZXIgY2FuXG4gKiAgIGNsYWltIHRoZSBuYW1lOiBhcyBhIGBmdW5jdGlvbmAsIGBjbGFzc2AsIGBlbnVtYCBvciBpbnN0YW50aWF0ZWRcbiAqICAgYG5hbWVzcGFjZWAsIHRocm91Z2ggYW4gYGV4cG9ydCB7IHRhcmdldCBhcyBfX25hcGlCaW5kaW5nVGFyZ2V0IH1gIG9yXG4gKiAgIGBleHBvcnQgKiBhcyBfX25hcGlCaW5kaW5nVGFyZ2V0IGZyb20gJ+KApidgIGNsYXVzZSwgb3IgdGhyb3VnaFxuICogICBgZXhwb3J0IGltcG9ydCBfX25hcGlCaW5kaW5nVGFyZ2V0ID0g4oCmYC4gTm9uZSBvZiB0aG9zZSBsZWF2ZXMgYVxuICogICBkZWNsYXJhdGlvbiBoZXJlIHRvIHJld3JpdGUsIGFuZCBhbiBleHBvcnQgYWRkZWQgYmVzaWRlIGFueSBvZiB0aGVtIGlzIGFcbiAqICAgVHlwZVNjcmlwdCBlcnJvciAoVFMyMzAwLCBUUzIzMjMsIFRTMjQ0MCBvciBUUzI1NjcgYnkgZm9ybSkuXG4gKlxuICogICBBIGhlYWRlciB0aGF0IGV4cG9ydHMgdGhlIG5hbWUgaW4gdHlwZSBzcGFjZSBvbmx5IOKAlCBhIGB0eXBlYCwgYW5cbiAqICAgYGludGVyZmFjZWAsIGEgbmFtZXNwYWNlIHRoYXQgZGVjbGFyZXMgbm8gdmFsdWUg4oCUIGNsYWltcyBub3RoaW5nOiB0aGVcbiAqICAgZGVjbGFyYXRpb24gbWVyZ2VzIHdpdGggaXQsIGFuZCB3aXRoaG9sZGluZyBpdCB3b3VsZCBjb3N0IGEgY29uc3VtZXIgdGhlXG4gKiAgIHZhbHVlIHRoZSBsb2FkZXIgcmVhbGx5IGV4cG9ydHMg4oCUIHNlZSB7QGxpbmsgc2NhbkV4cG9ydGVkTmFtZX0uXG4gKlxuICogQSBkZWNsYXJhdGlvbiBmaWxlIHRoYXQgZXhwb3J0cyBieSBhc3NpZ25tZW50IChgZXhwb3J0ID0gYmluZGluZ2AsIHdoYXQgYVxuICogYnVpbGQgd2l0aG91dCBgbmFwaS1kZXJpdmVgJ3MgYHR5cGUtZGVmYCBmZWF0dXJlIGVtaXRzKSBjYW5ub3QgY2FycnkgYSBuYW1lZFxuICogZXhwb3J0IGRlY2xhcmF0aW9uLCBzbyBpdCBpcyBsZWZ0IGFsb25lOyBpdHMgZXhwb3J0cyBhcmUgdW50eXBlZCBhbnl3YXkuXG4gKiBUaGF0LCB0b28sIGlzIHJlYWQgb2ZmIHRoZSBwYXJzZSDigJQgYSBibG9jayBjb21tZW50IGRvY3VtZW50aW5nIHRoZSBDb21tb25KU1xuICogZm9ybSBpcyBub3QgYW4gZXhwb3J0IGFzc2lnbm1lbnQuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGVuc3VyZUJpbmRpbmdUYXJnZXREZWNsYXJhdGlvbih0eXBlRGVmOiBzdHJpbmcsIHBsYXRmb3JtQXJjaEFCST86IHN0cmluZywgcmVuZGVyZWRIZWFkZXI/OiBzdHJpbmcpOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb2xsZWN0U3RhbGVXYXNpQnVpbGRPdXRwdXROYW1lcyhiaW5hcnlOYW1lOiBzdHJpbmcsIGJ1aWxkVGFyZ2V0OiBUYXJnZXQsIGNvbmZpZ3VyZWRUYXJnZXRzOiBUYXJnZXRbXSk6IFNldDxzdHJpbmc+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmVtb3ZlV2FzbUN1c3RvbVNlY3Rpb24oYmluYXJ5OiBVaW50OEFycmF5LCBzZWN0aW9uTmFtZTogc3RyaW5nKTogVWludDhBcnJheTtcbnR5cGUgQnVpbGRGb3JtYXRPcHRpb25zID0ge1xuICAgIGZvcm1hdD86IHN0cmluZztcbiAgICBlc20/OiBib29sZWFuO1xuICAgIGNvbW1vbmpzPzogYm9vbGVhbjtcbn07XG4vKipcbiAqIFJlc29sdmUgdGhlIGV4cGxpY2l0IGJ1aWxkIGZvcm1hdCBhbmQgaXRzIGxlZ2FjeSBDTEkvQVBJIGFsaWFzZXMuXG4gKlxuICogQ29tbW9uSlMgaXMgdGhlIGhpc3RvcmljYWwgZGVmYXVsdC4gVGhlIGFsaWFzZXMgYXJlIGludGVudGlvbmFsbHkga2VwdFxuICogc2VwYXJhdGUgZnJvbSBgZm9ybWF0YCBiZWNhdXNlIGAtLWVzbWAgYW5kIGAtLWNvbW1vbmpzYCBhcmUgYm9vbGVhbiBmbGFncyxcbiAqIHdoaWxlIGAtLWZvcm1hdGAgdGFrZXMgYSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmVzb2x2ZUJ1aWxkRm9ybWF0KG9wdGlvbnM6IEJ1aWxkRm9ybWF0T3B0aW9ucyk6IEJ1aWxkRm9ybWF0O1xuLyoqIEJ1aWxkIHRoZSBjb25maWd1cmVkIE5BUEktUlMgY3JhdGUgYW5kIGdlbmVyYXRlIGl0cyBvdXRwdXQgYXJ0aWZhY3RzLiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYnVpbGRQcm9qZWN0KHJhd09wdGlvbnM6IEJ1aWxkT3B0aW9ucyk6IFByb21pc2U8e1xuICAgIHRhc2s6IFByb21pc2U8T3V0cHV0W10+O1xuICAgIGFib3J0OiAoKSA9PiB2b2lkO1xufT47XG4vKipcbiAqIFZhbGlkYXRlIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgY3Jvc3MtY29tcGlsYXRpb24gcmVsYXRlZCBmbGFncy5cbiAqXG4gKiBgLS11c2UtY3Jvc3NgLCBgLS11c2UtbmFwaS1jcm9zc2AgYW5kIGAtLWNyb3NzLWNvbXBpbGVgIChgLXhgKSBhcmUgdGhyZWVcbiAqIG11dHVhbGx5IGV4Y2x1c2l2ZSBjcm9zcy1jb21waWxhdGlvbiBtZWNoYW5pc21zOyBjb21iaW5pbmcgYW55IHR3byBvZiB0aGVtXG4gKiBsZWF2ZXMgYm90aCBhY3RpdmUgYXQgb25jZSBhbmQgcHJvZHVjZXMgYnJva2VuIGJ1aWxkcywgc28gaXQgaXMgcmVqZWN0ZWRcbiAqIHVwZnJvbnQgYmVmb3JlIGFueSBzaWRlIGVmZmVjdCAobGlrZSBhdXRvLWluc3RhbGxpbmcgY2FyZ28gYmluYXJpZXMgb3JcbiAqIGRvd25sb2FkaW5nIHRvb2xjaGFpbnMpIGhhcHBlbnMuXG4gKlxuICogYC0tY3Jvc3MtY29tcGlsZWAgd2l0aCBhIGB3aW5kb3dzLWdudWAgdGFyZ2V0IGlzIHJlamVjdGVkIGFzIHdlbGw6IG9uIGFcbiAqIG5vbi1XaW5kb3dzIGhvc3QgaXQgcm91dGVzIHRoZSBidWlsZCB0byBgY2FyZ28geHdpbiBidWlsZGAsIGJ1dFxuICogYGNhcmdvLXh3aW5gIG9ubHkgc2V0cyB1cCBNU1ZDIHRvb2xjaGFpbnMg4oCUIGZvciBgd2luZG93cy1nbnVgIHRhcmdldHMgaXRcbiAqIHNpbGVudGx5IGRvZXMgbm90aGluZyBhbmQgdGhlIGJ1aWxkIGRpZXMgbXVjaCBsYXRlciB3aXRoIGEgY3J5cHRpY1xuICogYGBlcnJvcjogbGlua2VyIGB4ODZfNjQtdzY0LW1pbmd3MzItZ2NjYCBub3QgZm91bmRgYCB0aGF0IG5ldmVyIG1lbnRpb25zXG4gKiBgY2FyZ28teHdpbmAuIE9ubHkgYW4gZXhwbGljaXRseSByZXF1ZXN0ZWQgdGFyZ2V0IChgLS10YXJnZXRgIG9yXG4gKiBgQ0FSR09fQlVJTERfVEFSR0VUYCkgaXMgaW5zcGVjdGVkLCBzbyB0aGlzIHZhbGlkYXRpb24gbmV2ZXIgaGFzIHRvIHNwYXduXG4gKiBgcnVzdGMgLXZWYDsgYSBub24tV2luZG93cyBob3N0J3MgZGVmYXVsdCB0YXJnZXQgY2FuIG5ldmVyIGJlXG4gKiBgd2luZG93cy1nbnVgIGFueXdheS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmFsaWRhdGVDcm9zc0NvbXBpbGVGbGFncyhvcHRpb25zOiB7XG4gICAgdXNlQ3Jvc3M/OiBib29sZWFuO1xuICAgIGNyb3NzQ29tcGlsZT86IGJvb2xlYW47XG4gICAgdXNlTmFwaUNyb3NzPzogYm9vbGVhbjtcbiAgICB3YXRjaD86IGJvb2xlYW47XG4gICAgdGFyZ2V0Pzogc3RyaW5nO1xufSwgaG9zdFBsYXRmb3JtPzogc3RyaW5nKTogdm9pZDtcbi8qKlxuICogVmFsaWRhdGUgdGhhdCBgLS11c2UtbmFwaS1jcm9zc2AgY2FuIGFjdHVhbGx5IGhhbmRsZSB0aGUgcmVxdWVzdGVkIHRhcmdldFxuICogb24gdGhlIGN1cnJlbnQgaG9zdC4gVGhlIHN1cHBvcnRlZCB0YXJnZXQgc2V0IGlzIHJlYWQgZnJvbSB0aGVcbiAqIGBAbmFwaS1ycy9jcm9zcy10b29sY2hhaW5gIHBhY2thZ2UsIGFuZCB0aGUgcHJlLWJ1aWx0IHRvb2xjaGFpbnMgb25seSBydW5cbiAqIG9uIExpbnV4IHg2NCBhbmQgTGludXggYXJtNjQgaG9zdHMuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZhbGlkYXRlTmFwaUNyb3NzU3VwcG9ydCh0YXJnZXRUcmlwbGU6IHN0cmluZywgaG9zdFBsYXRmb3JtPzogc3RyaW5nLCBob3N0QXJjaD86IHN0cmluZyk6IHZvaWQ7XG4vKipcbiAqIENvbXB1dGUgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHJvdXRlIGEgYC0tdXNlLW5hcGktY3Jvc3NgIGJ1aWxkXG4gKiB0aHJvdWdoIHRoZSBgQG5hcGktcnMvY3Jvc3MtdG9vbGNoYWluYCB0b29sY2hhaW4gZXh0cmFjdGVkIGF0XG4gKiBgdG9vbGNoYWluUGF0aGAuXG4gKlxuICogRm9sbG93cyB0aGUgc2FtZSBydWxlIGFzIGBCdWlsZGVyI3NldEVudklmTm90RXhpc3RzYDogYSB2YXJpYWJsZSB0aGUgdXNlclxuICogYWxyZWFkeSBzZXQgaW4gYGVudmAgd2lucyBhbmQgaXMgbm90IHJldHVybmVkLCBhbmQgYSBwcmVzZW50LWJ1dC1lbXB0eVxuICogdmFyaWFibGUgY291bnRzIGFzIHVuc2V0IChmYWxzeSBzZW1hbnRpY3MpLiBUaGUgb25seSBleGNlcHRpb25zIGFyZSB0aGVcbiAqIGNsYW5nLXNwZWNpZmljIGBUQVJHRVRfQ0ZMQUdTYC9gVEFSR0VUX0NYWEZMQUdTYCwgd2hpY2ggcHJlcGVuZCB0aGUgc3lzcm9vdFxuICogZmxhZ3MgdG8gdGhlIHVzZXIncyB2YWx1ZSwgYW5kIGBQQVRIYCwgd2hpY2ggYWx3YXlzIGdldHMgdGhlIHRvb2xjaGFpblxuICogYGJpbmAgZGlyZWN0b3J5IHByZXBlbmRlZC5cbiAqXG4gKiBFeHBvcnRlZCBmb3IgdGVzdHMuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG5hcGlDcm9zc1Rvb2xjaGFpbkVudnModG9vbGNoYWluUGF0aDogc3RyaW5nLCB0YXJnZXRUcmlwbGU6IHN0cmluZywgZW52PzogTm9kZUpTLlByb2Nlc3NFbnYpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmVyaWZ5V2FzaVJlYWN0b3Iod2FzbVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5leHBvcnQgaW50ZXJmYWNlIFdyaXRlSnNCaW5kaW5nT3B0aW9ucyB7XG4gICAgcGxhdGZvcm0/OiBib29sZWFuO1xuICAgIG5vSnNCaW5kaW5nPzogYm9vbGVhbjtcbiAgICBpZGVudHM6IHN0cmluZ1tdO1xuICAgIGpzQmluZGluZz86IHN0cmluZztcbiAgICBmb3JtYXQ/OiBCdWlsZEZvcm1hdDtcbiAgICBlc20/OiBib29sZWFuO1xuICAgIGNvbW1vbmpzPzogYm9vbGVhbjtcbiAgICBiaW5hcnlOYW1lOiBzdHJpbmc7XG4gICAgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogYHBsYXRmb3JtQXJjaEFCSWBzIG9mIHRoZSBkZWNsYXJlZCBXQVNJIHRhcmdldHMgaW4gZmFsbGJhY2sgcHJlZmVyZW5jZVxuICAgICAqIG9yZGVyICh0aHJlYWRlZCBmaXJzdCkuIERlZmF1bHRzIHRvIHRoZSBsZWdhY3kgYFsnd2FzbTMyLXdhc2knXWAgY2hhaW5cbiAgICAgKiB3aGVuIG9taXR0ZWQgb3IgZW1wdHkuIEdlbmVyYXRlZCBsb2FkZXJzIGV4cG9zZSB0aGVzZSBleGFjdCBpZGVudGl0aWVzXG4gICAgICogdGhyb3VnaCBgTkFQSV9SU19XQVNJX0ZMQVZPUmAuXG4gICAgICovXG4gICAgd2FzaUZsYXZvcnM/OiBzdHJpbmdbXTtcbn1cbi8qKiBXcml0ZSBhIHBsYXRmb3JtIGJpbmRpbmcgbG9hZGVyIGluIHRoZSByZXF1ZXN0ZWQgbW9kdWxlIGZvcm1hdC4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHdyaXRlSnNCaW5kaW5nKG9wdGlvbnM6IFdyaXRlSnNCaW5kaW5nT3B0aW9ucyk6IFByb21pc2U8T3V0cHV0IHwgdW5kZWZpbmVkPjtcbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVUeXBlRGVmT3B0aW9ucyB7XG4gICAgdHlwZURlZkRpcjogc3RyaW5nO1xuICAgIG5vRHRzSGVhZGVyPzogYm9vbGVhbjtcbiAgICBkdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgZHRzSGVhZGVyRmlsZT86IHN0cmluZztcbiAgICBjb25maWdEdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgY29uZmlnRHRzSGVhZGVyRmlsZT86IHN0cmluZztcbiAgICBjb25zdEVudW0/OiBib29sZWFuO1xuICAgIHJ1bnRpbWVTdHJpbmdFbnVtPzogYm9vbGVhbjtcbiAgICBjd2Q6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBEZWNsYXJlIHRoZSBnZW5lcmF0ZWQgbG9hZGVyJ3MgYF9fbmFwaUJpbmRpbmdUYXJnZXRgIGV4cG9ydC4gU2V0IGl0IGZvclxuICAgICAqIGJ1aWxkcyB0aGF0IGVtaXQgYSBsb2FkZXI7IGEgYnVpbGQgdGhhdCBlbWl0cyBub25lIGRlY2xhcmVzIG5vdGhpbmcuIFRoZVxuICAgICAqIGRlY2xhcmVkIHVuaW9uIGNvdmVycyBldmVyeSBhcnRpZmFjdCBhIGxvYWRlciBjYW4gaGFuZCBiYWNrLCBub3Qgb25seSB0aGVcbiAgICAgKiB0YXJnZXRzIHRoaXMgcGFja2FnZSBidWlsZHMg4oCUIHNlZSB7QGxpbmsgQklORElOR19UQVJHRVRfVFlQRV9VTklPTn0uXG4gICAgICpcbiAgICAgKiBXaGV0aGVyIHRoZSByb290IGxvYWRlciBpcyB3cml0dGVuIGRlcGVuZHMgb24gdGhlIGV4cG9ydHMgdGhpcyBidWlsZFxuICAgICAqIHByb2R1Y2VkLCB3aGljaCBvbmx5IHR5cGVnZW4ga25vd3MsIHNvIGEgcHJlZGljYXRlIG1heSBiZSBwYXNzZWQgaW5zdGVhZFxuICAgICAqIG9mIGEgZmxhZzsgaXQgaXMgY2FsbGVkIHdpdGggdGhlIGdlbmVyYXRlZCBleHBvcnQgbGlzdC4gU2VlXG4gICAgICoge0BsaW5rIGJpbmRpbmdUYXJnZXREZWNsYXJhdGlvblByZWRpY2F0ZX0uXG4gICAgICovXG4gICAgZGVjbGFyZUJpbmRpbmdUYXJnZXQ/OiBib29sZWFuIHwgKChleHBvcnRzOiByZWFkb25seSBzdHJpbmdbXSkgPT4gYm9vbGVhbik7XG59XG4vKipcbiAqIFdhbGsgdGhlIG5hcGktZGVyaXZlIGludGVybWVkaWF0ZSB0eXBlLWRlZiBkaXJlY3RvcnksIHJlbmRlciBldmVyeSBlbnRyeVxuICogaW50byBUeXBlU2NyaXB0IHZpYSB7QGxpbmsgcHJvY2Vzc1R5cGVEZWZ9LCBhbmQgcmV0dXJuIHRoZSBjb25jYXRlbmF0ZWRcbiAqIGAuZC50c2Agc291cmNlIHBsdXMgdGhlIGxpc3Qgb2YgaWRlbnRpZmllcnMgdG8gcmUtZXhwb3J0IGZyb21cbiAqIGBpbmRleC5qc2AuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdlbmVyYXRlVHlwZURlZihvcHRpb25zOiBHZW5lcmF0ZVR5cGVEZWZPcHRpb25zKTogUHJvbWlzZTx7XG4gICAgZXhwb3J0czogc3RyaW5nW107XG4gICAgZHRzOiBzdHJpbmc7XG4gICAgZHRzV2l0aFR5cGVJbXBvcnRzOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIGAuZC50c2AgaGVhZGVyIGFzIHJlbmRlcmVkLCBiZWZvcmUgYW55dGhpbmcgdGhlIGdlbmVyYXRlZCBib2R5IG5lZWRzXG4gICAgICogd2FzIGFwcGVuZGVkIHRvIGl0LiBgZW5zdXJlQmluZGluZ1RhcmdldERlY2xhcmF0aW9uYCB0YWtlcyBpdCB0byB0ZWxsIGFcbiAgICAgKiBkZWNsYXJhdGlvbiB0aGUgaGVhZGVyIG93bnMgZnJvbSBvbmUgdGhpcyBidWlsZCB3cm90ZS5cbiAgICAgKi9cbiAgICBoZWFkZXI6IHN0cmluZztcbn0+O1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlQ3JlYXRlTnBtRGlyc0NvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICBkcnlSdW46IGJvb2xlYW47XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBucG1EaXI6IHN0cmluZztcbiAgICAgICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIH07XG59XG4vKipcbiAqIENyZWF0ZSBucG0gcGFja2FnZSBkaXJzIGZvciBkaWZmZXJlbnQgcGxhdGZvcm1zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlTnBtRGlyc09wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgdGhlIG5wbSBwYWNrYWdlcyBwdXRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICducG0nXG4gICAgICovXG4gICAgbnBtRGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIERyeSBydW4gd2l0aG91dCB0b3VjaGluZyBmaWxlIHN5c3RlbVxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBkcnlSdW4/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0Q3JlYXRlTnBtRGlyc09wdGlvbnMob3B0aW9uczogQ3JlYXRlTnBtRGlyc09wdGlvbnMpOiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgZHJ5UnVuOiBib29sZWFuO1xufTtcbiIsImltcG9ydCB7IHR5cGUgQ3JlYXRlTnBtRGlyc09wdGlvbnMgfSBmcm9tICcuLi9kZWYvY3JlYXRlLW5wbS1kaXJzLmpzJztcbmV4cG9ydCBpbnRlcmZhY2UgUGFja2FnZU1ldGEge1xuICAgICdkaXN0LXRhZ3MnOiB7XG4gICAgICAgIFtpbmRleDogc3RyaW5nXTogc3RyaW5nO1xuICAgIH07XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVOcG1EaXJzKHVzZXJPcHRpb25zOiBDcmVhdGVOcG1EaXJzT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VOZXdDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgICQkcGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICQkbmFtZT86IHN0cmluZztcbiAgICBtaW5Ob2RlQXBpVmVyc2lvbjogbnVtYmVyO1xuICAgIHBhY2thZ2VNYW5hZ2VyOiBzdHJpbmc7XG4gICAgbGljZW5zZTogc3RyaW5nO1xuICAgIHRhcmdldHM6IHN0cmluZ1tdO1xuICAgIGVuYWJsZURlZmF1bHRUYXJnZXRzOiBib29sZWFuO1xuICAgIGVuYWJsZUFsbFRhcmdldHM6IGJvb2xlYW47XG4gICAgZW5hYmxlVHlwZURlZjogYm9vbGVhbjtcbiAgICBlbmFibGVHaXRodWJBY3Rpb25zOiBib29sZWFuO1xuICAgIHRlc3RGcmFtZXdvcms6IHN0cmluZztcbiAgICBkcnlSdW46IGJvb2xlYW47XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBtaW5Ob2RlQXBpVmVyc2lvbjogbnVtYmVyO1xuICAgICAgICBwYWNrYWdlTWFuYWdlcjogc3RyaW5nO1xuICAgICAgICBsaWNlbnNlOiBzdHJpbmc7XG4gICAgICAgIHRhcmdldHM6IHN0cmluZ1tdO1xuICAgICAgICBlbmFibGVEZWZhdWx0VGFyZ2V0czogYm9vbGVhbjtcbiAgICAgICAgZW5hYmxlQWxsVGFyZ2V0czogYm9vbGVhbjtcbiAgICAgICAgZW5hYmxlVHlwZURlZjogYm9vbGVhbjtcbiAgICAgICAgZW5hYmxlR2l0aHViQWN0aW9uczogYm9vbGVhbjtcbiAgICAgICAgdGVzdEZyYW1ld29yazogc3RyaW5nO1xuICAgICAgICBkcnlSdW46IGJvb2xlYW47XG4gICAgfTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgbmV3IHByb2plY3Qgd2l0aCBwcmUtY29uZmlndXJlZCBib2lsZXJwbGF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ld09wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSBwYXRoIHdoZXJlIHRoZSBOQVBJLVJTIHByb2plY3Qgd2lsbCBiZSBjcmVhdGVkLlxuICAgICAqL1xuICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHByb2plY3QsIGRlZmF1bHQgdG8gdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSBpZiBub3QgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIE5vZGUtQVBJIHZlcnNpb24gdG8gc3VwcG9ydFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgNFxuICAgICAqL1xuICAgIG1pbk5vZGVBcGlWZXJzaW9uPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFRoZSBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlLiBPbmx5IHN1cHBvcnQgeWFybiA0LnggZm9yIG5vdy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICd5YXJuJ1xuICAgICAqL1xuICAgIHBhY2thZ2VNYW5hZ2VyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIExpY2Vuc2UgZm9yIG9wZW4tc291cmNlZCBwcm9qZWN0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnTUlUJ1xuICAgICAqL1xuICAgIGxpY2Vuc2U/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQWxsIHRhcmdldHMgdGhlIGNyYXRlIHdpbGwgYmUgY29tcGlsZWQgZm9yLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgW11cbiAgICAgKi9cbiAgICB0YXJnZXRzPzogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogV2hldGhlciBlbmFibGUgZGVmYXVsdCB0YXJnZXRzXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlRGVmYXVsdFRhcmdldHM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZW5hYmxlIGFsbCB0YXJnZXRzXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIGVuYWJsZUFsbFRhcmdldHM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZW5hYmxlIHRoZSBgdHlwZS1kZWZgIGZlYXR1cmUgZm9yIHR5cGVzY3JpcHQgZGVmaW5pdGlvbnMgYXV0by1nZW5lcmF0aW9uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlVHlwZURlZj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hldGhlciBnZW5lcmF0ZSBwcmVjb25maWd1cmVkIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlR2l0aHViQWN0aW9ucz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIEphdmFTY3JpcHQgdGVzdCBmcmFtZXdvcmsgdG8gdXNlLCBvbmx5IHN1cHBvcnQgYGF2YWAgZm9yIG5vd1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ2F2YSdcbiAgICAgKi9cbiAgICB0ZXN0RnJhbWV3b3JrPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcnVuIHRoZSBjb21tYW5kIGluIGRyeS1ydW4gbW9kZVxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBkcnlSdW4/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0TmV3T3B0aW9ucyhvcHRpb25zOiBOZXdPcHRpb25zKToge1xuICAgIC8qKlxuICAgICAqIFRoZSBwYXRoIHdoZXJlIHRoZSBOQVBJLVJTIHByb2plY3Qgd2lsbCBiZSBjcmVhdGVkLlxuICAgICAqL1xuICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHByb2plY3QsIGRlZmF1bHQgdG8gdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSBpZiBub3QgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIG1pbk5vZGVBcGlWZXJzaW9uOiBudW1iZXI7XG4gICAgcGFja2FnZU1hbmFnZXI6IHN0cmluZztcbiAgICBsaWNlbnNlOiBzdHJpbmc7XG4gICAgdGFyZ2V0czogc3RyaW5nW107XG4gICAgZW5hYmxlRGVmYXVsdFRhcmdldHM6IGJvb2xlYW47XG4gICAgZW5hYmxlQWxsVGFyZ2V0czogYm9vbGVhbjtcbiAgICBlbmFibGVUeXBlRGVmOiBib29sZWFuO1xuICAgIGVuYWJsZUdpdGh1YkFjdGlvbnM6IGJvb2xlYW47XG4gICAgdGVzdEZyYW1ld29yazogc3RyaW5nO1xuICAgIGRyeVJ1bjogYm9vbGVhbjtcbn07XG4iLCJpbXBvcnQgeyB0eXBlIE5ld09wdGlvbnMgYXMgUmF3TmV3T3B0aW9ucyB9IGZyb20gJy4uL2RlZi9uZXcuanMnO1xudHlwZSBOZXdPcHRpb25zID0gUmVxdWlyZWQ8UmF3TmV3T3B0aW9ucz47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBHRU5FUkFURURfV0FTSV9CSU5ESU5HOiBSZWdFeHA7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1cGRhdGVDYXJnb1RvbWxOb2RlQXBpVmVyc2lvbihmaWxlUGF0aDogc3RyaW5nLCBtaW5Ob2RlQXBpVmVyc2lvbjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG5ld1Byb2plY3QodXNlck9wdGlvbnM6IFJhd05ld09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IHR5cGUgeyBOZXdPcHRpb25zIH07XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VQcmVQdWJsaXNoQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgIHRhZ1N0eWxlOiBzdHJpbmc7XG4gICAgZ2hSZWxlYXNlOiBib29sZWFuO1xuICAgIGdoUmVsZWFzZU5hbWU/OiBzdHJpbmc7XG4gICAgZ2hSZWxlYXNlSWQ/OiBzdHJpbmc7XG4gICAgc2tpcE9wdGlvbmFsUHVibGlzaDogYm9vbGVhbjtcbiAgICByb290UHVibGlzaGVyPzogJ25wbScgfCAncG5wbScgfCAneWFybicgfCAneWFybi1jbGFzc2ljJztcbiAgICBkcnlSdW46IGJvb2xlYW47XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBucG1EaXI6IHN0cmluZztcbiAgICAgICAgdGFnU3R5bGU6IHN0cmluZztcbiAgICAgICAgZ2hSZWxlYXNlOiBib29sZWFuO1xuICAgICAgICBnaFJlbGVhc2VOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGdoUmVsZWFzZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHNraXBPcHRpb25hbFB1Ymxpc2g6IGJvb2xlYW47XG4gICAgICAgIHJvb3RQdWJsaXNoZXI6IFwieWFyblwiIHwgXCJwbnBtXCIgfCBcIm5wbVwiIHwgXCJ5YXJuLWNsYXNzaWNcIiB8IHVuZGVmaW5lZDtcbiAgICAgICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIH07XG59XG4vKipcbiAqIFVwZGF0ZSBwYWNrYWdlLmpzb24gYW5kIGNvcHkgYWRkb25zIGludG8gcGVyIHBsYXRmb3JtIHBhY2thZ2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJlUHVibGlzaE9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgdGhlIG5wbSBwYWNrYWdlcyBwdXRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICducG0nXG4gICAgICovXG4gICAgbnBtRGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIGdpdCB0YWcgc3R5bGUsIGBucG1gIG9yIGBsZXJuYWBcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdsZXJuYSdcbiAgICAgKi9cbiAgICB0YWdTdHlsZT86ICducG0nIHwgJ2xlcm5hJztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGNyZWF0ZSBHaXRIdWIgcmVsZWFzZVxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGdoUmVsZWFzZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogR2l0SHViIHJlbGVhc2UgbmFtZVxuICAgICAqL1xuICAgIGdoUmVsZWFzZU5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogRXhpc3RpbmcgR2l0SHViIHJlbGVhc2UgaWRcbiAgICAgKi9cbiAgICBnaFJlbGVhc2VJZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHNraXAgb3B0aW9uYWxEZXBlbmRlbmNpZXMgcGFja2FnZXMgcHVibGlzaFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBza2lwT3B0aW9uYWxQdWJsaXNoPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgcHVibGlzaGVzIHRoZSByb290IHBhY2thZ2UuIHBucG0gYW5kIHlhcm4gYmVycnkgcmVwbGFjZSBgZXhwb3J0c2Agd2l0aCBgcHVibGlzaENvbmZpZy5leHBvcnRzYCB3aGlsZSBwYWNraW5nLCBzbyBmb3IgdGhlbSB0aGUgcm9vdCBwYWNrYWdlIHZhbGlkYXRpb24gdGFyZ2V0cyB0aGUgcHVibGlzaC1lZmZlY3RpdmUgZXhwb3J0IG1hcC4gRGVmYXVsdHMgdG8gdGhlIGBuYXBpLnJvb3RQdWJsaXNoZXJgIGNvbmZpZyBmaWVsZCwgYW5kIHZhbGlkYXRlcyBib3RoIGV4cG9ydCBtYXBzIHdoZW4gbmVpdGhlciBpcyBzZXRcbiAgICAgKi9cbiAgICByb290UHVibGlzaGVyPzogJ25wbScgfCAncG5wbScgfCAneWFybicgfCAneWFybi1jbGFzc2ljJztcbiAgICAvKipcbiAgICAgKiBEcnkgcnVuIHdpdGhvdXQgdG91Y2hpbmcgZmlsZSBzeXN0ZW1cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgZHJ5UnVuPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdFByZVB1Ymxpc2hPcHRpb25zKG9wdGlvbnM6IFByZVB1Ymxpc2hPcHRpb25zKToge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgIHRhZ1N0eWxlOiBzdHJpbmc7XG4gICAgZ2hSZWxlYXNlOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEdpdEh1YiByZWxlYXNlIG5hbWVcbiAgICAgKi9cbiAgICBnaFJlbGVhc2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEV4aXN0aW5nIEdpdEh1YiByZWxlYXNlIGlkXG4gICAgICovXG4gICAgZ2hSZWxlYXNlSWQ/OiBzdHJpbmc7XG4gICAgc2tpcE9wdGlvbmFsUHVibGlzaDogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgcHVibGlzaGVzIHRoZSByb290IHBhY2thZ2UuIHBucG0gYW5kIHlhcm4gYmVycnkgcmVwbGFjZSBgZXhwb3J0c2Agd2l0aCBgcHVibGlzaENvbmZpZy5leHBvcnRzYCB3aGlsZSBwYWNraW5nLCBzbyBmb3IgdGhlbSB0aGUgcm9vdCBwYWNrYWdlIHZhbGlkYXRpb24gdGFyZ2V0cyB0aGUgcHVibGlzaC1lZmZlY3RpdmUgZXhwb3J0IG1hcC4gRGVmYXVsdHMgdG8gdGhlIGBuYXBpLnJvb3RQdWJsaXNoZXJgIGNvbmZpZyBmaWVsZCwgYW5kIHZhbGlkYXRlcyBib3RoIGV4cG9ydCBtYXBzIHdoZW4gbmVpdGhlciBpcyBzZXRcbiAgICAgKi9cbiAgICByb290UHVibGlzaGVyPzogXCJucG1cIiB8IFwicG5wbVwiIHwgXCJ5YXJuXCIgfCBcInlhcm4tY2xhc3NpY1wiO1xuICAgIGRyeVJ1bjogYm9vbGVhbjtcbn07XG4iLCJpbXBvcnQgeyB0eXBlIFByZVB1Ymxpc2hPcHRpb25zIH0gZnJvbSAnLi4vZGVmL3ByZS1wdWJsaXNoLmpzJztcbmltcG9ydCB7IHR5cGUgQ29tbW9uUGFja2FnZUpzb25GaWVsZHMsIHR5cGUgUm9vdFB1Ymxpc2hlciwgdHlwZSBUYXJnZXQsIHR5cGUgVXNlck5hcGlDb25maWcgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG4vKipcbiAqIEJ1aWxkIHRoZSByb290IHBhY2thZ2UncyBgb3B0aW9uYWxEZXBlbmRlbmNpZXNgIG1hcC5cbiAqXG4gKiBBIFdBU0kgcGFja2FnZSBpcyBhIGZhbGxiYWNrIGZvciBob3N0cyB0aGF0IGNhbm5vdCBsb2FkIGEgYC5ub2RlYCBiaW5hcnksIGFuZFxuICogdGhlIGdlbmVyYXRlZCBiaW5kaW5nIGxvYWRlciBzZWxlY3RzIGl0IGF0IHJlcXVpcmUgdGltZSByYXRoZXIgdGhhbiBucG1cbiAqIHNlbGVjdGluZyBpdCBhdCBpbnN0YWxsIHRpbWUuIERlY2xhcmluZyBpdCBhcyBhbiBgb3B0aW9uYWxEZXBlbmRlbmN5YFxuICogYWxvbmdzaWRlIHRoZSBuYXRpdmUgcGFja2FnZXMgY2Fubm90IGV4cHJlc3MgXCJpbnN0YWxsIHRoaXMgb25seSB3aGVuIG5vdGhpbmdcbiAqIGVsc2UgbWF0Y2hlZFwiOiBucG0gZXZhbHVhdGVzIGV2ZXJ5IGVudHJ5IGluZGVwZW5kZW50bHksIHNvIGV2ZXJ5IGNvbnN1bWVyXG4gKiBkb3dubG9hZHMgYSBgLndhc21gIGJpbmFyeSB0aGV5IHdpbGwgbmV2ZXIgbG9hZC5cbiAqXG4gKiBJdCBpcyB0aGVyZWZvcmUgb25seSBkZWNsYXJlZCB3aGVuIFdBU0kgaXMgdGhlIG9ubHkgY29uZmlndXJlZCB0YXJnZXQsIHdoaWNoXG4gKiBtYWtlcyBpdCB0aGUgcHJpbWFyeSBhcnRpZmFjdCByYXRoZXIgdGhhbiBhIGZhbGxiYWNrLlxuICogYG5hcGkud2FzbS5vcHRpb25hbERlcGVuZGVuY3lgIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBpbiBib3RoIGRpcmVjdGlvbnMuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yb2xsZG93bi9yb2xsZG93bi9pc3N1ZXMvMTA1NTZcbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmVzb2x2ZVJvb3RPcHRpb25hbERlcGVuZGVuY2llcyh7IGV4aXN0aW5nLCBtYW5hZ2VkUGFja2FnZU5hbWVzLCBwYWNrYWdlTmFtZSwgdGFyZ2V0cywgdmVyc2lvbiwgd2FzbSwgfToge1xuICAgIGV4aXN0aW5nOiB1bmtub3duO1xuICAgIG1hbmFnZWRQYWNrYWdlTmFtZXM6IEl0ZXJhYmxlPHN0cmluZz47XG4gICAgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgICB0YXJnZXRzOiBUYXJnZXRbXTtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgd2FzbT86IFVzZXJOYXBpQ29uZmlnWyd3YXNtJ107XG59KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwcmVQdWJsaXNoKHVzZXJPcHRpb25zOiBQcmVQdWJsaXNoT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5pbnRlcmZhY2UgVGhyZWFkbGVzc1dhc2lSb290RmFjYWRlIHtcbiAgICBleHBvcnRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBwdWJsaXNoQ29uZmlnRXhwb3J0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGdlbmVyYXRlZEZpbGVzOiBzdHJpbmdbXTtcbiAgICBmaWxlczogVGhyZWFkbGVzc1dhc2lSb290RmFjYWRlRmlsZXM7XG4gICAgd2FzbVNvdXJjZVBhdGg6IHN0cmluZztcbiAgICBtYXJrZXI6IHN0cmluZztcbiAgICBmb3J3YXJkaW5nTW9kdWxlOiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25VcGRhdGU6IHtcbiAgICAgICAgZmlsZXM/OiBzdHJpbmdbXTtcbiAgICB9O1xufVxuaW50ZXJmYWNlIFRocmVhZGxlc3NXYXNpUm9vdEZhY2FkZUZpbGVzIHtcbiAgICB3b3JrZXJkRW50cnk6IHN0cmluZztcbiAgICB3b3JrZXJkVHlwZURlZjogc3RyaW5nO1xuICAgIHdhc21FbnRyeTogc3RyaW5nO1xuICAgIHdhc21UeXBlRGVmOiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByb290UHVibGlzaGVyUmV3cml0ZXNSb290RXhwb3J0cyhyb290UHVibGlzaGVyOiBSb290UHVibGlzaGVyIHwgdW5kZWZpbmVkKTogYm9vbGVhbjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlc29sdmVSb290UHVibGlzaGVyKG9wdGlvblZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbmZpZ1ZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBSb290UHVibGlzaGVyIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc25pZmZSZXdyaXRpbmdQdWJsaXNoZXJGcm9tVXNlckFnZW50KHVzZXJBZ2VudD86IHN0cmluZyB8IHVuZGVmaW5lZCk6ICdwbnBtJyB8ICd5YXJuJyB8IHVuZGVmaW5lZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJvb3RQdWJsaXNoZXJIaW50KHJvb3RQdWJsaXNoZXI6IFJvb3RQdWJsaXNoZXIgfCB1bmRlZmluZWQsIHVzZXJBZ2VudD86IHN0cmluZyk6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvbGxlY3RSb290UGFja2FnZVBhdGhSZWZlcmVuY2VzKHBhY2thZ2VKc29uOiBDb21tb25QYWNrYWdlSnNvbkZpZWxkcywgcm9vdFB1Ymxpc2hlcj86IFJvb3RQdWJsaXNoZXIpOiBzdHJpbmdbXTtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHBhcnNlTnBtUGFja0ZpbGVzKG91dHB1dDogc3RyaW5nKTogU2V0PHN0cmluZz47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2YWxpZGF0ZVJvb3RGYWNhZGVQYWNrbGlzdChyb290RGlyOiBzdHJpbmcsIHJvb3RQYWNrYWdlRmlsZXM6IHN0cmluZ1tdLCByb290UHVibGlzaGVyPzogUm9vdFB1Ymxpc2hlcik6IHZvaWQ7XG5pbnRlcmZhY2UgUm9vdFJlbGVhc2VNYXRlcmlhbGl6YXRpb25QbGFuIHtcbiAgICBwYWNrYWdlSnNvbjogQ29tbW9uUGFja2FnZUpzb25GaWVsZHM7XG4gICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIG5vZGVFbmdpbmU/OiBzdHJpbmc7XG4gICAgZmFjYWRlPzogVGhyZWFkbGVzc1dhc2lSb290RmFjYWRlO1xuICAgIHN0YWxlR2VuZXJhdGVkRmlsZXM6IHN0cmluZ1tdO1xuICAgIHJvb3RQdWJsaXNoZXI/OiBSb290UHVibGlzaGVyO1xufVxuaW50ZXJmYWNlIFJlbGVhc2VQYWNrYWdlVmFsaWRhdGlvbk9wdGlvbnMge1xuICAgIHBrZ0Rpcjogc3RyaW5nO1xuICAgIHJvb3REaXI6IHN0cmluZztcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICAgIGJpbmFyeU5hbWU6IHN0cmluZztcbiAgICB0YXJnZXQ6IFRhcmdldDtcbiAgICByZXF1aXJlRGlyZWN0QnVmZmVyRGVwZW5kZW5jeTogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBSZWxlYXNlUGFja2FnZU1hdGVyaWFsaXphdGlvblBsYW4ge1xuICAgIHRhcmdldDogVGFyZ2V0O1xuICAgIHBrZ0Rpcjogc3RyaW5nO1xuICAgIHJvb3REaXI6IHN0cmluZztcbiAgICBzdGFnZWRQa2dEaXI/OiBzdHJpbmc7XG4gICAgcGFja2FnZUZpbGVzOiBzdHJpbmdbXTtcbiAgICBkZWNsYXJhdGlvbkRlcGVuZGVuY2llczogc3RyaW5nW107XG4gICAgdXBkYXRlTWFuaWZlc3Q6IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgQ29tbWl0UHJlUHVibGlzaEZpbGVTeXN0ZW1UcmFuc2FjdGlvbk9wdGlvbnMge1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIHJlbGVhc2VQYWNrYWdlUGxhbnM6IFJlbGVhc2VQYWNrYWdlTWF0ZXJpYWxpemF0aW9uUGxhbltdO1xuICAgIHJvb3REaXI6IHN0cmluZztcbiAgICByb290UmVsZWFzZVBsYW46IFJvb3RSZWxlYXNlTWF0ZXJpYWxpemF0aW9uUGxhbjtcbiAgICBzdGFnZWRSb290TWFuaWZlc3RQYXRoPzogc3RyaW5nO1xuICAgIHN0YWdlZFJvb3REaXI6IHN0cmluZztcbiAgICB0cmFuc2FjdGlvblJvb3Q/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb21taXRQcmVQdWJsaXNoRmlsZVN5c3RlbVRyYW5zYWN0aW9uKHsgcGFja2FnZUpzb25QYXRoLCByZWxlYXNlUGFja2FnZVBsYW5zLCByb290RGlyLCByb290UmVsZWFzZVBsYW4sIHN0YWdlZFJvb3REaXIsIHN0YWdlZFJvb3RNYW5pZmVzdFBhdGgsIHRyYW5zYWN0aW9uUm9vdCwgfTogQ29tbWl0UHJlUHVibGlzaEZpbGVTeXN0ZW1UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmFsaWRhdGVSZWxlYXNlUGFja2FnZUNvbnRlbnRzKHsgcGtnRGlyLCByb290RGlyLCBwYWNrYWdlTmFtZSwgYmluYXJ5TmFtZSwgdGFyZ2V0LCByZXF1aXJlRGlyZWN0QnVmZmVyRGVwZW5kZW5jeSwgfTogUmVsZWFzZVBhY2thZ2VWYWxpZGF0aW9uT3B0aW9ucyk6IFByb21pc2U8e1xuICAgIHBhY2thZ2VGaWxlczogc3RyaW5nW107XG4gICAgZGVjbGFyYXRpb25EZXBlbmRlbmNpZXM6IHN0cmluZ1tdO1xuICAgIHVwZGF0ZU1hbmlmZXN0OiBib29sZWFuO1xufT47XG5leHBvcnQge307XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VSZW5hbWVDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgJCRuYW1lPzogc3RyaW5nO1xuICAgIGJpbmFyeU5hbWU/OiBzdHJpbmc7XG4gICAgcGFja2FnZU5hbWU/OiBzdHJpbmc7XG4gICAgbWFuaWZlc3RQYXRoOiBzdHJpbmc7XG4gICAgcmVwb3NpdG9yeT86IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBnZXRPcHRpb25zKCk6IHtcbiAgICAgICAgY3dkOiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZ1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgICAgIG5wbURpcjogc3RyaW5nO1xuICAgICAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGJpbmFyeU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbWFuaWZlc3RQYXRoOiBzdHJpbmc7XG4gICAgICAgIHJlcG9zaXRvcnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB9O1xufVxuLyoqXG4gKiBSZW5hbWUgdGhlIE5BUEktUlMgcHJvamVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmFtZU9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgdGhlIG5wbSBwYWNrYWdlcyBwdXRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICducG0nXG4gICAgICovXG4gICAgbnBtRGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgbmFtZSBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyBiaW5hcnkgbmFtZSAqLm5vZGUgZmlsZXNcbiAgICAgKi9cbiAgICBiaW5hcnlOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgcGFja2FnZSBuYW1lIG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgcGFja2FnZU5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgQ2FyZ28udG9tbGBcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdDYXJnby50b21sJ1xuICAgICAqL1xuICAgIG1hbmlmZXN0UGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IHJlcG9zaXRvcnkgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICByZXBvc2l0b3J5Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgZGVzY3JpcHRpb24gb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdFJlbmFtZU9wdGlvbnMob3B0aW9uczogUmVuYW1lT3B0aW9ucyk6IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IG5hbWUgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgYmluYXJ5IG5hbWUgKi5ub2RlIGZpbGVzXG4gICAgICovXG4gICAgYmluYXJ5TmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IHBhY2thZ2UgbmFtZSBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIHBhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIG1hbmlmZXN0UGF0aDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgcmVwb3NpdG9yeSBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIHJlcG9zaXRvcnk/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufTtcbiIsImltcG9ydCB7IHR5cGUgUmVuYW1lT3B0aW9ucyB9IGZyb20gJy4uL2RlZi9yZW5hbWUuanMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmVuYW1lUHJvamVjdCh1c2VyT3B0aW9uczogUmVuYW1lT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VVbml2ZXJzYWxpemVDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBvdXRwdXREaXI6IHN0cmluZztcbiAgICB9O1xufVxuLyoqXG4gKiBDb21iaWxlIGJ1aWx0IGJpbmFyaWVzIGludG8gb25lIHVuaXZlcnNhbCBiaW5hcnlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbml2ZXJzYWxpemVPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIGFsbCBidWlsdCBgLm5vZGVgIGZpbGVzIHB1dCwgc2FtZSBhcyBgLS1vdXRwdXQtZGlyYCBvZiBidWlsZCBjb21tYW5kXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnLi8nXG4gICAgICovXG4gICAgb3V0cHV0RGlyPzogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0VW5pdmVyc2FsaXplT3B0aW9ucyhvcHRpb25zOiBVbml2ZXJzYWxpemVPcHRpb25zKToge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG91dHB1dERpcjogc3RyaW5nO1xufTtcbiIsImltcG9ydCB7IHR5cGUgVW5pdmVyc2FsaXplT3B0aW9ucyB9IGZyb20gJy4uL2RlZi91bml2ZXJzYWxpemUuanMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdW5pdmVyc2FsaXplQmluYXJpZXModXNlck9wdGlvbnM6IFVuaXZlcnNhbGl6ZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlVmVyc2lvbkNvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICBnZXRPcHRpb25zKCk6IHtcbiAgICAgICAgY3dkOiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZ1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgICAgIG5wbURpcjogc3RyaW5nO1xuICAgIH07XG59XG4vKipcbiAqIFVwZGF0ZSB2ZXJzaW9uIGluIGNyZWF0ZWQgbnBtIHBhY2thZ2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbk9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgdGhlIG5wbSBwYWNrYWdlcyBwdXRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICducG0nXG4gICAgICovXG4gICAgbnBtRGlyPzogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0VmVyc2lvbk9wdGlvbnMob3B0aW9uczogVmVyc2lvbk9wdGlvbnMpOiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG59O1xuIiwiaW1wb3J0IHsgdHlwZSBWZXJzaW9uT3B0aW9ucyB9IGZyb20gJy4uL2RlZi92ZXJzaW9uLmpzJztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZlcnNpb24odXNlck9wdGlvbnM6IFZlcnNpb25PcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiIsImltcG9ydCB7IEJhc2VBcnRpZmFjdHNDb21tYW5kIH0gZnJvbSAnLi4vZGVmL2FydGlmYWN0cy5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBBcnRpZmFjdHNDb21tYW5kIGV4dGVuZHMgQmFzZUFydGlmYWN0c0NvbW1hbmQge1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlQnVpbGRDb21tYW5kIH0gZnJvbSAnLi4vZGVmL2J1aWxkLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIEJ1aWxkQ29tbWFuZCBleHRlbmRzIEJhc2VCdWlsZENvbW1hbmQge1xuICAgIHBpcGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjYXJnb09wdGlvbnM6IHN0cmluZ1tdO1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEJhc2VDcmVhdGVOcG1EaXJzQ29tbWFuZCB9IGZyb20gJy4uL2RlZi9jcmVhdGUtbnBtLWRpcnMuanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgQ3JlYXRlTnBtRGlyc0NvbW1hbmQgZXh0ZW5kcyBCYXNlQ3JlYXRlTnBtRGlyc0NvbW1hbmQge1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEJhc2VOZXdDb21tYW5kIH0gZnJvbSAnLi4vZGVmL25ldy5qcyc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXROYXBpVmVyc2lvbkNob2ljZXMoKToge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogaW1wb3J0KFwiLi4vdXRpbHMvdmVyc2lvbi5qc1wiKS5OYXBpVmVyc2lvbjtcbn1bXTtcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIE5ld0NvbW1hbmQgZXh0ZW5kcyBCYXNlTmV3Q29tbWFuZCB7XG4gICAgaW50ZXJhY3RpdmU6IGJvb2xlYW47XG4gICAgZXhlY3V0ZSgpOiBQcm9taXNlPDAgfCAxPjtcbiAgICBwcml2YXRlIGZldGNoT3B0aW9ucztcbiAgICBwcml2YXRlIGZldGNoTmFtZTtcbiAgICBwcml2YXRlIGZldGNoTGljZW5zZTtcbiAgICBwcml2YXRlIGZldGNoTmFwaVZlcnNpb247XG4gICAgcHJpdmF0ZSBmZXRjaFRhcmdldHM7XG4gICAgcHJpdmF0ZSBmZXRjaFR5cGVEZWY7XG4gICAgcHJpdmF0ZSBmZXRjaEdpdGh1YkFjdGlvbnM7XG59XG4iLCJpbXBvcnQgeyBCYXNlUHJlUHVibGlzaENvbW1hbmQgfSBmcm9tICcuLi9kZWYvcHJlLXB1Ymxpc2guanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgUHJlUHVibGlzaENvbW1hbmQgZXh0ZW5kcyBCYXNlUHJlUHVibGlzaENvbW1hbmQge1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEJhc2VSZW5hbWVDb21tYW5kIH0gZnJvbSAnLi4vZGVmL3JlbmFtZS5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBSZW5hbWVDb21tYW5kIGV4dGVuZHMgQmFzZVJlbmFtZUNvbW1hbmQge1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEJhc2VVbml2ZXJzYWxpemVDb21tYW5kIH0gZnJvbSAnLi4vZGVmL3VuaXZlcnNhbGl6ZS5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBVbml2ZXJzYWxpemVDb21tYW5kIGV4dGVuZHMgQmFzZVVuaXZlcnNhbGl6ZUNvbW1hbmQge1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEJhc2VWZXJzaW9uQ29tbWFuZCB9IGZyb20gJy4uL2RlZi92ZXJzaW9uLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFZlcnNpb25Db21tYW5kIGV4dGVuZHMgQmFzZVZlcnNpb25Db21tYW5kIHtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBDbGkgfSBmcm9tICdjbGlwYW5pb24nO1xuaW1wb3J0IHsgY29sbGVjdEFydGlmYWN0cyB9IGZyb20gJy4vYXBpL2FydGlmYWN0cy5qcyc7XG5pbXBvcnQgeyBidWlsZFByb2plY3QgfSBmcm9tICcuL2FwaS9idWlsZC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVOcG1EaXJzIH0gZnJvbSAnLi9hcGkvY3JlYXRlLW5wbS1kaXJzLmpzJztcbmltcG9ydCB7IG5ld1Byb2plY3QgfSBmcm9tICcuL2FwaS9uZXcuanMnO1xuaW1wb3J0IHsgcHJlUHVibGlzaCB9IGZyb20gJy4vYXBpL3ByZS1wdWJsaXNoLmpzJztcbmltcG9ydCB7IHJlbmFtZVByb2plY3QgfSBmcm9tICcuL2FwaS9yZW5hbWUuanMnO1xuaW1wb3J0IHsgdW5pdmVyc2FsaXplQmluYXJpZXMgfSBmcm9tICcuL2FwaS91bml2ZXJzYWxpemUuanMnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4vYXBpL3ZlcnNpb24uanMnO1xuaW1wb3J0IHsgQXJ0aWZhY3RzQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvYXJ0aWZhY3RzLmpzJztcbmltcG9ydCB7IEJ1aWxkQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvYnVpbGQuanMnO1xuaW1wb3J0IHsgQ3JlYXRlTnBtRGlyc0NvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2NyZWF0ZS1ucG0tZGlycy5qcyc7XG5pbXBvcnQgeyBOZXdDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9uZXcuanMnO1xuaW1wb3J0IHsgUHJlUHVibGlzaENvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL3ByZS1wdWJsaXNoLmpzJztcbmltcG9ydCB7IFJlbmFtZUNvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL3JlbmFtZS5qcyc7XG5pbXBvcnQgeyBVbml2ZXJzYWxpemVDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy91bml2ZXJzYWxpemUuanMnO1xuaW1wb3J0IHsgVmVyc2lvbkNvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL3ZlcnNpb24uanMnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgY2xpOiBDbGk8aW1wb3J0KFwiY2xpcGFuaW9uXCIpLkJhc2VDb250ZXh0Pjtcbi8qKlxuICpcbiAqIEB1c2FnZVxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBjbGkgPSBuZXcgTmFwaUNsaSgpXG4gKlxuICogY2xpLmJ1aWxkKHtcbiAqICAgY3dkOiAnL3BhdGgvdG8veW91ci9wcm9qZWN0JyxcbiAqIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgTmFwaUNsaSB7XG4gICAgYXJ0aWZhY3RzOiB0eXBlb2YgY29sbGVjdEFydGlmYWN0cztcbiAgICBuZXc6IHR5cGVvZiBuZXdQcm9qZWN0O1xuICAgIGJ1aWxkOiB0eXBlb2YgYnVpbGRQcm9qZWN0O1xuICAgIGNyZWF0ZU5wbURpcnM6IHR5cGVvZiBjcmVhdGVOcG1EaXJzO1xuICAgIHByZVB1Ymxpc2g6IHR5cGVvZiBwcmVQdWJsaXNoO1xuICAgIHJlbmFtZTogdHlwZW9mIHJlbmFtZVByb2plY3Q7XG4gICAgdW5pdmVyc2FsaXplOiB0eXBlb2YgdW5pdmVyc2FsaXplQmluYXJpZXM7XG4gICAgdmVyc2lvbjogdHlwZW9mIHZlcnNpb247XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVCdWlsZENvbW1hbmQoYXJnczogc3RyaW5nW10pOiBCdWlsZENvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVBcnRpZmFjdHNDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogQXJ0aWZhY3RzQ29tbWFuZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZUNyZWF0ZU5wbURpcnNDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogQ3JlYXRlTnBtRGlyc0NvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVQcmVQdWJsaXNoQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IFByZVB1Ymxpc2hDb21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlUmVuYW1lQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IFJlbmFtZUNvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVVbml2ZXJzYWxpemVDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogVW5pdmVyc2FsaXplQ29tbWFuZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVZlcnNpb25Db21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogVmVyc2lvbkNvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVOZXdDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogTmV3Q29tbWFuZDtcbmV4cG9ydCB7IHBhcnNlVHJpcGxlIH0gZnJvbSAnLi91dGlscy90YXJnZXQuanMnO1xuZXhwb3J0IHsgdHlwZSBHZW5lcmF0ZVR5cGVEZWZPcHRpb25zLCB0eXBlIFdyaXRlSnNCaW5kaW5nT3B0aW9ucywgd3JpdGVKc0JpbmRpbmcsIGdlbmVyYXRlVHlwZURlZiwgfSBmcm9tICcuL2FwaS9idWlsZC5qcyc7XG5leHBvcnQgeyByZWFkTmFwaUNvbmZpZyB9IGZyb20gJy4vdXRpbHMvY29uZmlnLmpzJztcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsSUFBVyxDQUFDLHdCQUF3QjtDQUFDO09BQVcsQ0FBQyxPQUFPO0NBQUc7RUFBQztFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0NBQUU7QUFBQztBQUMvSCxJQUFXLENBQUMsb0JBQW9CO0NBQUM7T0FBVyxDQUFDO0NBQUc7RUFBQztFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7Q0FBRTtBQUFDOzs7O0FDRHhFLElBQVcsQ0FBQyxvQkFBb0I7Q0FBQztPQUFVLENBQUMsa0JBQWtCLE9BQU87Q0FBRztFQUFDO0VBQUk7RUFBSTtDQUFFO0FBQUM7Ozs7QUNBcEYsSUFBVyxDQUFDLG9CQUFvQjtDQUFDO09BQVcsQ0FBQyxPQUFPO0NBQUc7RUFBQztFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtDQUFFO0FBQUM7QUFDM1YsSUFBVyxDQUFDQSxrQkFBZ0I7Q0FBQztPQUFXLENBQUM7Q0FBRztFQUFDO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0NBQUU7QUFBQzs7OztBQ0ZwTCxJQUFJLENBQUMsTUFBTTtDQUFDO09BQVc7RUFBQztFQUFTLFFBQVE7RUFBTztFQUFTLFFBQVE7RUFBTztFQUFTLFFBQVE7Q0FBSztDQUFHO0VBQUM7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7Q0FBRTtDQUFHLFdBQVcsRUFBRTtBQUFDOzs7O0FDQXpKLElBQVcsQ0FBQyxZQUFZO0NBQUM7T0FBVSxDQUFDLFFBQVEsT0FBTyxRQUFRO0NBQUcsQ0FBQyxJQUFJLEVBQUU7QUFBQztBQU10RSxJQUFJLENBQUMsY0FBYztDQUFDO09BQVUsQ0FB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