sonamu 0.8.13 → 0.8.14
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/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +2 -3
- package/dist/auth/auth-generator.d.ts +8 -0
- package/dist/auth/auth-generator.d.ts.map +1 -1
- package/dist/auth/auth-generator.js +33 -1
- package/dist/auth/better-auth-entities.d.ts.map +1 -1
- package/dist/auth/better-auth-entities.js +12 -2
- package/dist/bin/cli.js +18 -3
- package/dist/cone/cone-generator.js +10 -4
- package/dist/database/knex.d.ts.map +1 -1
- package/dist/database/knex.js +64 -2
- package/dist/database/puri.d.ts +9 -1
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +42 -1
- package/dist/database/puri.types.d.ts +2 -0
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +6 -2
- package/dist/entity/entity-manager.d.ts +149 -1
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +68 -4
- package/dist/migration/__tests__/code-generation.search-text.test.js +435 -0
- package/dist/migration/code-generation.d.ts.map +1 -1
- package/dist/migration/code-generation.js +696 -32
- package/dist/migration/migration-set.js +3 -1
- package/dist/migration/postgresql-schema-reader.d.ts +16 -2
- package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
- package/dist/migration/postgresql-schema-reader.js +281 -7
- package/dist/stream/sse.js +5 -3
- package/dist/template/__tests__/generated.template.search-text.test.js +99 -0
- package/dist/template/generated.template.test-d.js +24 -0
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +2 -2
- package/dist/template/implementations/init_types.template.d.ts.map +1 -1
- package/dist/template/implementations/init_types.template.js +11 -3
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +6 -2
- package/dist/testing/dev-test-routes.d.ts.map +1 -1
- package/dist/testing/dev-test-routes.js +5 -3
- package/dist/testing/fixture-generator.d.ts +13 -0
- package/dist/testing/fixture-generator.d.ts.map +1 -1
- package/dist/testing/fixture-generator.js +105 -8
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +19 -2
- package/dist/types/__tests__/entity-json-schema-search-text.test.js +256 -0
- package/dist/types/types.d.ts +494 -1
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +117 -13
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +14 -2
- package/dist/ui/cdd-service.d.ts +16 -14
- package/dist/ui/cdd-service.d.ts.map +1 -1
- package/dist/ui/cdd-service.js +145 -37
- package/dist/ui/cdd-types.d.ts +60 -0
- package/dist/ui/cdd-types.d.ts.map +1 -0
- package/dist/ui/cdd-types.js +3 -0
- package/dist/ui-web/assets/index-D4XFBV-f.css +1 -0
- package/dist/ui-web/assets/{index-CQ_S40bD.js → index-D_19-Pi4.js} +87 -87
- package/dist/ui-web/index.html +2 -2
- package/package.json +7 -3
- package/src/api/sonamu.ts +1 -2
- package/src/auth/auth-generator.ts +38 -0
- package/src/auth/better-auth-entities.ts +18 -1
- package/src/bin/cli.ts +15 -1
- package/src/cone/cone-generator.ts +9 -3
- package/src/database/knex.ts +62 -4
- package/src/database/puri.ts +71 -0
- package/src/database/puri.types.ts +2 -0
- package/src/entity/entity-manager.ts +95 -3
- package/src/migration/__tests__/code-generation.search-text.test.ts +390 -0
- package/src/migration/code-generation.ts +848 -34
- package/src/migration/migration-set.ts +2 -0
- package/src/migration/postgresql-schema-reader.ts +366 -9
- package/src/skills/sonamu/auth-migration.md +80 -0
- package/src/skills/sonamu/cdd.md +148 -28
- package/src/skills/sonamu/cone.md +16 -0
- package/src/skills/sonamu/entity-relations.md +1 -1
- package/src/skills/sonamu/fixture-cli.md +4 -0
- package/src/skills/sonamu/frontend.md +65 -0
- package/src/skills/sonamu/migration.md +3 -1
- package/src/skills/sonamu/model.md +28 -0
- package/src/skills/sonamu/workflow.md +12 -5
- package/src/stream/sse.ts +4 -2
- package/src/template/__tests__/generated.template.search-text.test.ts +89 -0
- package/src/template/generated.template.test-d.ts +46 -0
- package/src/template/implementations/generated.template.ts +4 -1
- package/src/template/implementations/init_types.template.ts +20 -5
- package/src/template/zod-converter.ts +5 -0
- package/src/testing/dev-test-routes.ts +4 -2
- package/src/testing/fixture-generator.ts +157 -9
- package/src/testing/fixture-manager.ts +15 -1
- package/src/types/__tests__/entity-json-schema-search-text.test.ts +179 -0
- package/src/types/types.ts +168 -12
- package/src/ui/api.ts +24 -1
- package/src/ui/cdd-service.ts +195 -55
- package/src/ui/cdd-types.ts +73 -0
- package/dist/ui-web/assets/index-egkMxKos.css +0 -1
package/dist/types/types.js
CHANGED
|
@@ -65,6 +65,16 @@ export const SonamuFileArraySchema = z.array(SonamuFileSchema).describe("SonamuF
|
|
|
65
65
|
"SonamuFile",
|
|
66
66
|
"SonamuFile[]"
|
|
67
67
|
];
|
|
68
|
+
export const KnownOpclassValues = [
|
|
69
|
+
"gin_trgm_ops",
|
|
70
|
+
"gist_trgm_ops",
|
|
71
|
+
"gin_bigm_ops",
|
|
72
|
+
"vector_cosine_ops",
|
|
73
|
+
"vector_ip_ops",
|
|
74
|
+
"vector_l2_ops",
|
|
75
|
+
"pgroonga_varchar_full_text_search_ops_v2",
|
|
76
|
+
"pgroonga_jsonb_full_text_search_ops_v2"
|
|
77
|
+
];
|
|
68
78
|
export function normalizeSubsetField(f) {
|
|
69
79
|
return typeof f === "string" ? f : f.field;
|
|
70
80
|
}
|
|
@@ -177,6 +187,9 @@ export function isUuidProp(p) {
|
|
|
177
187
|
export function isJsonProp(p) {
|
|
178
188
|
return p?.type === "json";
|
|
179
189
|
}
|
|
190
|
+
export function isSearchTextProp(p) {
|
|
191
|
+
return p?.type === "searchText";
|
|
192
|
+
}
|
|
180
193
|
export function isVirtualProp(p) {
|
|
181
194
|
return p?.type === "virtual";
|
|
182
195
|
}
|
|
@@ -331,6 +344,11 @@ const GeneratedColumnSchema = z.object({
|
|
|
331
344
|
]),
|
|
332
345
|
expression: z.string()
|
|
333
346
|
});
|
|
347
|
+
const FixtureCompanionSchema = z.object({
|
|
348
|
+
entity: z.string(),
|
|
349
|
+
overrides: z.record(z.string(), z.unknown()).optional(),
|
|
350
|
+
count: z.number().int().positive().optional()
|
|
351
|
+
});
|
|
334
352
|
/**
|
|
335
353
|
* Cone 스키마 검증
|
|
336
354
|
*
|
|
@@ -341,6 +359,7 @@ const GeneratedColumnSchema = z.object({
|
|
|
341
359
|
fixtureGenerator: z.string().optional(),
|
|
342
360
|
fixtureDefault: z.unknown().optional(),
|
|
343
361
|
fixtureStrategy: z.literal("sequence").optional(),
|
|
362
|
+
fixtureCompanions: z.array(FixtureCompanionSchema).optional(),
|
|
344
363
|
dataSource: z.object({
|
|
345
364
|
strategy: z.enum([
|
|
346
365
|
"sample",
|
|
@@ -455,6 +474,15 @@ const JsonPropSchema = z.object({
|
|
|
455
474
|
type: z.literal("json"),
|
|
456
475
|
id: z.string()
|
|
457
476
|
}).strict();
|
|
477
|
+
const SearchTextSourceColumnSchema = z.object({
|
|
478
|
+
name: z.string(),
|
|
479
|
+
caseInsensitive: z.boolean().optional()
|
|
480
|
+
}).strict();
|
|
481
|
+
const SearchTextPropSchema = z.object({
|
|
482
|
+
...BasePropFields,
|
|
483
|
+
type: z.literal("searchText"),
|
|
484
|
+
sourceColumns: z.array(SearchTextSourceColumnSchema).min(1)
|
|
485
|
+
}).strict();
|
|
458
486
|
const VirtualPropSchema = z.object({
|
|
459
487
|
...BasePropFields,
|
|
460
488
|
type: z.literal("virtual"),
|
|
@@ -552,6 +580,7 @@ const NormalPropTypes = [
|
|
|
552
580
|
"uuid",
|
|
553
581
|
"uuid[]",
|
|
554
582
|
"json",
|
|
583
|
+
"searchText",
|
|
555
584
|
"virtual",
|
|
556
585
|
"vector",
|
|
557
586
|
"vector[]",
|
|
@@ -585,6 +614,7 @@ export const NormalPropSchema = z.discriminatedUnion("type", [
|
|
|
585
614
|
NumericPropSchema,
|
|
586
615
|
NumericArrayPropSchema,
|
|
587
616
|
JsonPropSchema,
|
|
617
|
+
SearchTextPropSchema,
|
|
588
618
|
VirtualPropSchema,
|
|
589
619
|
VectorPropSchema,
|
|
590
620
|
VectorArrayPropSchema
|
|
@@ -650,6 +680,10 @@ const EntityIndexColumnSchema = z.object({
|
|
|
650
680
|
"vector_cosine_ops",
|
|
651
681
|
"vector_ip_ops",
|
|
652
682
|
"vector_l2_ops"
|
|
683
|
+
]).optional(),
|
|
684
|
+
opclass: z.union([
|
|
685
|
+
z.enum(KnownOpclassValues),
|
|
686
|
+
z.string().min(1)
|
|
653
687
|
]).optional()
|
|
654
688
|
});
|
|
655
689
|
// EntityIndex 스키마 정의
|
|
@@ -712,7 +746,68 @@ const EntityIndexSchema = z.object({
|
|
|
712
746
|
cone: ConeSchema.optional()
|
|
713
747
|
})
|
|
714
748
|
]);
|
|
715
|
-
|
|
749
|
+
function unwrapSearchTextJsonSourceType(zodType) {
|
|
750
|
+
let current = zodType;
|
|
751
|
+
while(current instanceof z.ZodOptional || current instanceof z.ZodNullable){
|
|
752
|
+
current = current.unwrap();
|
|
753
|
+
}
|
|
754
|
+
return current;
|
|
755
|
+
}
|
|
756
|
+
export function isSearchTextJsonSourceZodType(zodType) {
|
|
757
|
+
const baseType = unwrapSearchTextJsonSourceType(zodType);
|
|
758
|
+
if (!(baseType instanceof z.ZodArray)) {
|
|
759
|
+
return false;
|
|
760
|
+
}
|
|
761
|
+
const elementType = baseType.def.element;
|
|
762
|
+
return elementType instanceof z.ZodString;
|
|
763
|
+
}
|
|
764
|
+
function validateSearchTextSources(props, ctx, propsPath = [
|
|
765
|
+
"props"
|
|
766
|
+
]) {
|
|
767
|
+
const propsByName = new Map(props.map((prop)=>{
|
|
768
|
+
return [
|
|
769
|
+
prop.name,
|
|
770
|
+
prop
|
|
771
|
+
];
|
|
772
|
+
}));
|
|
773
|
+
props.forEach((prop, propIndex)=>{
|
|
774
|
+
if (prop.type !== "searchText") {
|
|
775
|
+
return;
|
|
776
|
+
}
|
|
777
|
+
prop.sourceColumns.forEach((source, sourceIndex)=>{
|
|
778
|
+
const sourceProp = propsByName.get(source.name);
|
|
779
|
+
const sourcePath = [
|
|
780
|
+
...propsPath,
|
|
781
|
+
propIndex,
|
|
782
|
+
"sourceColumns",
|
|
783
|
+
sourceIndex,
|
|
784
|
+
"name"
|
|
785
|
+
];
|
|
786
|
+
if (!sourceProp) {
|
|
787
|
+
ctx.addIssue({
|
|
788
|
+
code: "custom",
|
|
789
|
+
message: `searchText source column "${source.name}"을(를) 찾을 수 없습니다.`,
|
|
790
|
+
path: sourcePath
|
|
791
|
+
});
|
|
792
|
+
return;
|
|
793
|
+
}
|
|
794
|
+
if (sourceProp.type === "string" || sourceProp.type === "string[]") {
|
|
795
|
+
return;
|
|
796
|
+
}
|
|
797
|
+
if (sourceProp.type === "json") {
|
|
798
|
+
// json source의 최종 타입 유효성은 EntityManager.register() 단계에서
|
|
799
|
+
// 실제 Zod 타입을 해석하여 구조적으로 검증합니다.
|
|
800
|
+
return;
|
|
801
|
+
}
|
|
802
|
+
ctx.addIssue({
|
|
803
|
+
code: "custom",
|
|
804
|
+
message: `searchText source column "${source.name}"의 타입 "${sourceProp.type}"은(는) 지원되지 않습니다.`,
|
|
805
|
+
path: sourcePath
|
|
806
|
+
});
|
|
807
|
+
});
|
|
808
|
+
});
|
|
809
|
+
}
|
|
810
|
+
const EntityJsonBaseSchema = z.object({
|
|
716
811
|
id: z.string().describe("PascalCase로 된 Entity ID"),
|
|
717
812
|
title: z.string().describe("Entity 이름"),
|
|
718
813
|
table: z.string().describe("snake_case로 된 테이블명"),
|
|
@@ -723,18 +818,27 @@ export const EntityJsonSchema = z.object({
|
|
|
723
818
|
subsets: z.record(z.string(), SubsetDefSchema),
|
|
724
819
|
enums: z.record(z.string(), EnumDefSchema)
|
|
725
820
|
}).strict();
|
|
821
|
+
export const EntityJsonSchema = EntityJsonBaseSchema.superRefine((entity, ctx)=>{
|
|
822
|
+
validateSearchTextSources(entity.props, ctx);
|
|
823
|
+
});
|
|
824
|
+
const TemplateEntitySchema = EntityJsonBaseSchema.omit({
|
|
825
|
+
id: true
|
|
826
|
+
}).extend({
|
|
827
|
+
entityId: z.string()
|
|
828
|
+
}).partial({
|
|
829
|
+
table: true,
|
|
830
|
+
props: true,
|
|
831
|
+
indexes: true,
|
|
832
|
+
subsets: true,
|
|
833
|
+
enums: true
|
|
834
|
+
}).superRefine((entity, ctx)=>{
|
|
835
|
+
if (!entity.props) {
|
|
836
|
+
return;
|
|
837
|
+
}
|
|
838
|
+
validateSearchTextSources(entity.props, ctx);
|
|
839
|
+
});
|
|
726
840
|
export const TemplateOptions = z.object({
|
|
727
|
-
entity:
|
|
728
|
-
id: true
|
|
729
|
-
}).extend({
|
|
730
|
-
entityId: z.string()
|
|
731
|
-
}).partial({
|
|
732
|
-
table: true,
|
|
733
|
-
props: true,
|
|
734
|
-
indexes: true,
|
|
735
|
-
subsets: true,
|
|
736
|
-
enums: true
|
|
737
|
-
}),
|
|
841
|
+
entity: TemplateEntitySchema,
|
|
738
842
|
init_types: z.object({
|
|
739
843
|
entityId: z.string()
|
|
740
844
|
}),
|
|
@@ -820,4 +924,4 @@ export const PathAndCode = z.object({
|
|
|
820
924
|
});
|
|
821
925
|
export var ApiParamType;
|
|
822
926
|
|
|
823
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZhc3RpZnlSZXBseSwgRmFzdGlmeVJlcXVlc3QgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgQXBpRGVjb3JhdG9yT3B0aW9ucywgQ29udGV4dCB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgR3VhcmRLZXkgfSBmcm9tIFwiLi8uLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHR5cGUgeyBDYWNoZUNvbnRyb2xIYW5kbGVyIH0gZnJvbSBcIi4uL2NhY2hlLWNvbnRyb2wvdHlwZXNcIjtcblxuLypcbiAgVXRpbGl0eSBUeXBlc1xuKi9cbmV4cG9ydCBmdW5jdGlvbiB6QXJyYXlhYmxlPFQgZXh0ZW5kcyB6LlpvZFR5cGVBbnk+KHNoYXBlOiBUKTogei5ab2RVbmlvbjxbVCwgei5ab2RBcnJheTxUPl0+IHtcbiAgcmV0dXJuIHoudW5pb24oW3NoYXBlLCBzaGFwZS5hcnJheSgpXSk7XG59XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGFueSBpcyB1c2VkIHRvIG1ha2UgdGhlIHR5cGUgZGlzdHJpYnV0aXZlXG5leHBvcnQgdHlwZSBEaXN0cmlidXRpdmVPbWl0PFQsIEsgZXh0ZW5kcyBrZXlvZiBhbnk+ID0gVCBleHRlbmRzIGFueSA/IE9taXQ8VCwgSz4gOiBuZXZlcjtcblxuLypcbiAgTW9kZWwtRGVmaW5pdGlvblxuKi9cblxuLyoqXG4gKiBjb25lOiDrspTsmqkg66mU7YOA642w7J207YSwIOyLnOyKpO2FnFxuICpcbiAqIEVudGl0eSwgUHJvcCwgRW51bSwgU3Vic2V07JeQIFwi7IaU67Cp7Jq47J2EIOuLqOuLpFwi64qUIOqwnOuFkOycvOuhnCDrtpnsnbTripQg64uo7J28IOyEnOyIoCDrqZTtg4DrjbDsnbTthLDsnoXri4jri6QuXG4gKiBub3RlIO2VmOuCmOuhnCDruYTspojri4jsiqQg7J2Y66+47JmAIGZpeHR1cmUg7IOd7ISxIO2ejO2KuOulvCDtlajqu5gg6riw7Iig7ZWp64uI64ukLlxuICovXG5leHBvcnQgdHlwZSBDb25lID0ge1xuICBub3RlPzogc3RyaW5nOyAvLyDsnbQg64yA7IOB7J20IOustOyXh+yduOyngCDshKTrqoUgKOu5hOymiOuLiOyKpCDsnZjrr7ggKyBmaXh0dXJlIO2ejO2KuCDthrXtlakpXG4gIHRhZ3M/OiBzdHJpbmdbXTsgLy8g67aE66WYL+qygOyDieyaqSDtg5zqt7hcblxuICAvLyBGaXh0dXJlIOyDneyEsSDqtIDroKhcbiAgZml4dHVyZUdlbmVyYXRvcj86IHN0cmluZzsgLy8gRmFrZXIuanMg7L2U65OcIOuYkOuKlCDsu6TsiqTthYAg7ZWo7IiYXG4gIGZpeHR1cmVEZWZhdWx0PzogdW5rbm93bjsgLy8g6riw67O46rCSXG4gIGZpeHR1cmVTdHJhdGVneT86IFwic2VxdWVuY2VcIjsgLy8gc3RyaW5nIO2DgOyeheydtOyngOunjCBEQiBzZXF1ZW5jZeuhnCDqtIDrpqzrkJjripQgUEsgKGJldHRlci1hdXRoIOuTsSlcblxuICAvLyDssLjsobAg642w7J207YSwIOq0gOugqFxuICBkYXRhU291cmNlPzoge1xuICAgIHN0cmF0ZWd5OiBcInNhbXBsZVwiIHwgXCJpZHNcIiB8IFwicXVlcnlcIiB8IFwiZmlsZVwiIHwgXCJyZWNlbnRcIiB8IFwicmFuZG9tXCI7XG4gICAgY29uZmlnPzogdW5rbm93bjsgLy8g7KCE656167OEIOyEpOyglVxuICB9O1xuXG4gIC8vIO2ZleyepeyEsVxuICBba2V5OiBzdHJpbmddOiB1bmtub3duOyAvLyDsgqzsmqnsnpAg7KCV7J2YIOuplO2DgOuNsOydtO2EsFxufTtcblxuZXhwb3J0IHR5cGUgR2VuZXJhdGVkQ29sdW1uVHlwZSA9IFwiU1RPUkVEXCIgfCBcIlZJUlRVQUxcIjtcbmV4cG9ydCB0eXBlIEdlbmVyYXRlZENvbHVtbiA9IHtcbiAgdHlwZTogR2VuZXJhdGVkQ29sdW1uVHlwZTtcbiAgZXhwcmVzc2lvbjogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIENvbW1vblByb3AgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVsbGFibGU/OiBib29sZWFuO1xuICB0b0ZpbHRlcj86IHRydWU7XG4gIGRlc2M/OiBzdHJpbmc7XG4gIGRiRGVmYXVsdD86IHN0cmluZztcbiAgZ2VuZXJhdGVkPzogR2VuZXJhdGVkQ29sdW1uO1xuICBjb25lPzogQ29uZTsgLy8gY29uZSDrqZTtg4DrjbDsnbTthLBcbn07XG5cbi8qKlxuICogcHJvcOydmCDshKTrqoXsnYQg67CY7ZmY7ZWp64uI64ukLlxuICpcbiAqIGNvbmUubm90ZeqwgCDsnojsnLzrqbQg7Jqw7ISgIOyCrOyaqe2VmOqzoCwg7JeG7Jy866m0IHByb3AuZGVzY+ulvCDsgqzsmqntlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXNjcmlwdGlvbihpdGVtOiB7IGRlc2M/OiBzdHJpbmc7IGNvbmU/OiBDb25lIH0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gaXRlbS5jb25lPy5ub3RlIHx8IGl0ZW0uZGVzYztcbn1cbmV4cG9ydCB0eXBlIEludGVnZXJQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJpbnRlZ2VyXCI7XG59OyAvLyBQRzogaW50ZWdlciAvIFRTOiBudW1iZXIgLyBKU09OOiBudW1iZXJcbmV4cG9ydCB0eXBlIEludGVnZXJBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImludGVnZXJbXVwiO1xufTsgLy8gUEc6IGludGVnZXJbXSAvIFRTOiBudW1iZXJbXSAvIEpTT046IG51bWJlcltdXG5leHBvcnQgdHlwZSBCaWdJbnRlZ2VyUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiYmlnSW50ZWdlclwiO1xufTsgLy8gUEc6IGJpZ2ludCAvIFRTOiBiaWdpbnQgLyBKU09OOiBiaWdpbnRcbmV4cG9ydCB0eXBlIEJpZ0ludGVnZXJBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImJpZ0ludGVnZXJbXVwiO1xufTsgLy8gUEc6IGJpZ2ludFtdIC8gVFM6IGJpZ2ludFtdIC8gSlNPTjogYmlnaW50W11cblxuLyoqXG4gKiBab2QgNCBTdHJpbmcgRm9ybWF0IO2DgOyehVxuICogZW50aXR5Lmpzb27sl5DshJwgc3RyaW5nIO2DgOyeheydmCBwcm9w7JeQIHpvZEZvcm1hdCDsmLXshZjsnYQg7KeA7KCV7ZWY7JesXG4gKiBCYXNlU2NoZW1hIOyDneyEsSDsi5wgWm9k7J2YIHN0cmluZyBmb3JtYXQgdmFsaWRhdGlvbuydhCDsoIHsmqntlanri4jri6QuXG4gKi9cbmV4cG9ydCBjb25zdCBab2RTdHJpbmdGb3JtYXQgPSB6LmVudW0oW1xuICAvLyDquLDrs7gg7Y+s66e3XG4gIFwiZW1haWxcIixcbiAgXCJ1dWlkXCIsXG4gIFwidXJsXCIsXG4gIFwiaHR0cFVybFwiLFxuICBcImhvc3RuYW1lXCIsXG4gIFwiZW1vamlcIixcbiAgXCJiYXNlNjRcIixcbiAgXCJiYXNlNjR1cmxcIixcbiAgXCJoZXhcIixcbiAgXCJqd3RcIixcbiAgXCJuYW5vaWRcIixcbiAgXCJjdWlkXCIsXG4gIFwiY3VpZDJcIixcbiAgXCJ1bGlkXCIsXG4gIFwiaXB2NFwiLFxuICBcImlwdjZcIixcbiAgXCJtYWNcIixcbiAgXCJjaWRydjRcIixcbiAgXCJjaWRydjZcIixcbiAgLy8gaGFzaCDtj6zrp7cgKOyVjOqzoOumrOymmOuzhClcbiAgXCJoYXNoTWQ1XCIsXG4gIFwiaGFzaFNoYTFcIixcbiAgXCJoYXNoU2hhMjU2XCIsXG4gIFwiaGFzaFNoYTM4NFwiLFxuICBcImhhc2hTaGE1MTJcIixcbiAgLy8gSVNPIO2PrOunt1xuICBcImlzb0RhdGVcIixcbiAgXCJpc29UaW1lXCIsXG4gIFwiaXNvRGF0ZXRpbWVcIixcbiAgXCJpc29EdXJhdGlvblwiLFxuXSk7XG5leHBvcnQgdHlwZSBab2RTdHJpbmdGb3JtYXQgPSB6LmluZmVyPHR5cGVvZiBab2RTdHJpbmdGb3JtYXQ+O1xuXG5leHBvcnQgdHlwZSBTdHJpbmdQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJzdHJpbmdcIjtcbiAgbGVuZ3RoPzogbnVtYmVyOyAvLyBQRzogdmFyY2hhcihuKSwgdGV4dCAvIFRTOiBzdHJpbmcgLyBKU09OOiBzdHJpbmdcbiAgem9kRm9ybWF0PzogWm9kU3RyaW5nRm9ybWF0O1xufTsgLy8gUEc6IHRleHQgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBTdHJpbmdBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInN0cmluZ1tdXCI7XG4gIGxlbmd0aD86IG51bWJlcjsgLy8gUEc6IHZhcmNoYXIobilbXSwgdGV4dFtdIC8gVFM6IHN0cmluZ1tdIC8gSlNPTjogc3RyaW5nW11cbiAgem9kRm9ybWF0PzogWm9kU3RyaW5nRm9ybWF0O1xufTsgLy8gUEc6IHZhcmNoYXIobilbXSwgdGV4dFtdIC8gVFM6IHN0cmluZ1tdIC8gSlNPTjogc3RyaW5nW11cbmV4cG9ydCB0eXBlIEVudW1Qcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJlbnVtXCI7XG4gIGlkOiBzdHJpbmc7XG4gIGxlbmd0aD86IG51bWJlcjtcbn07IC8vIFBHOiB0ZXh0IC8gVFM6IHN0cmluZyAvIEpTT046IHN0cmluZ1xuZXhwb3J0IHR5cGUgRW51bUFycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiZW51bVtdXCI7XG4gIGlkOiBzdHJpbmc7XG59OyAvLyBQRzogdGV4dFtdIC8gVFM6IHN0cmluZ1tdIC8gSlNPTjogc3RyaW5nW11cbmV4cG9ydCB0eXBlIE51bWJlclByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcIm51bWJlclwiO1xuICBwcmVjaXNpb24/OiBudW1iZXI7IC8vIFBHOiBudW1lcmljKHAsIHMpIC8gVFM6IG51bWJlciAvIEpTT046IG51bWJlclxuICBzY2FsZT86IG51bWJlcjsgLy8gUEc6IG51bWVyaWMocCwgcykgLyBUUzogbnVtYmVyIC8gSlNPTjogbnVtYmVyXG4gIG51bWJlclR5cGU/OiBcInJlYWxcIiB8IFwiZG91YmxlIHByZWNpc2lvblwiIHwgXCJudW1lcmljXCI7IC8vIOq4sOuzuOqwkjogbnVtZXJpY1xufTsgLy8gUEc6IG51bWVyaWMocCwgcykgLyBUUzogbnVtYmVyIC8gSlNPTjogbnVtYmVyXG5leHBvcnQgdHlwZSBOdW1iZXJBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcIm51bWJlcltdXCI7XG4gIHByZWNpc2lvbj86IG51bWJlcjtcbiAgc2NhbGU/OiBudW1iZXI7XG4gIG51bWJlclR5cGU/OiBcInJlYWxcIiB8IFwiZG91YmxlIHByZWNpc2lvblwiIHwgXCJudW1lcmljXCI7IC8vIOq4sOuzuOqwkjogbnVtZXJpY1xufTsgLy8gUEc6IG51bWVyaWMocCwgcylbXSAvIFRTOiBudW1iZXJbXSAvIEpTT046IG51bWJlcltdXG5leHBvcnQgdHlwZSBOdW1lcmljUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwibnVtZXJpY1wiO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHNjYWxlPzogbnVtYmVyO1xufTsgLy8gUEc6IG51bWVyaWMocCwgcykgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBOdW1lcmljQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJudW1lcmljW11cIjtcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuICBzY2FsZT86IG51bWJlcjtcbn07IC8vIFBHOiBudW1lcmljKHAsIHMpW10gLyBUUzogc3RyaW5nW10gLyBKU09OOiBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgQm9vbGVhblByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImJvb2xlYW5cIjtcbn07IC8vIFBHOiBib29sZWFuIC8gVFM6IGJvb2xlYW4gLyBKU09OOiBib29sZWFuXG5leHBvcnQgdHlwZSBCb29sZWFuQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJib29sZWFuW11cIjtcbn07IC8vIFBHOiBib29sZWFuW10gLyBUUzogYm9vbGVhbltdIC8gSlNPTjogYm9vbGVhbltdXG5leHBvcnQgdHlwZSBEYXRlUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiZGF0ZVwiO1xuICAvLyDquLDrs7jqsJLsnYAgMywgbWljcm9zZWNvbmRz66W8IOyTsOugpOuptCA27J2EIOyNqOyVvO2VqCAoMCB+IDYpXG4gIHByZWNpc2lvbj86IG51bWJlcjtcbn07IC8vIFBHOiB0aW1lc3RhbXB6IC8gVFM6IERhdGUgLyBKU09OOiBzdHJpbmcoSVNPU3RyaW5nKVxuZXhwb3J0IHR5cGUgRGF0ZUFycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiZGF0ZVtdXCI7XG4gIC8vIOq4sOuzuOqwkuydgCAzLCBtaWNyb3NlY29uZHPrpbwg7JOw66Ck66m0IDbsnYQg7I2o7JW87ZWoICgwIH4gNilcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xufTsgLy8gUEc6IHRpbWVzdGFtcHR6W10gLyBUUzogRGF0ZVtdIC8gSlNPTjogc3RyaW5nW11cbmV4cG9ydCB0eXBlIEpzb25Qcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJqc29uXCI7XG4gIGlkOiBzdHJpbmc7XG59OyAvLyBQRzoganNvbiAvIFRTOiBhbnkoaWQpIC8gSlNPTjogYW55XG5leHBvcnQgdHlwZSBVdWlkUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwidXVpZFwiO1xufTsgLy8gUEc6IHV1aWQgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBVdWlkQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ1dWlkW11cIjtcbn07IC8vIFBHOiB1dWlkW10gLyBUUzogc3RyaW5nW10gLyBKU09OOiBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgVmlydHVhbFByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInZpcnR1YWxcIjtcbiAgaWQ6IHN0cmluZztcbiAgdmlydHVhbFR5cGU/OiBcInF1ZXJ5XCIgfCBcImNvZGVcIjsgLy8gZGVmYXVsdDogXCJjb2RlXCJcbn07IC8vIFBHOiBub25lIC8gVFM6IGFueShpZCkgLyBKU09OOiBhbnlcbmV4cG9ydCB0eXBlIFZlY3RvclByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInZlY3RvclwiO1xuICBkaW1lbnNpb25zOiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgVmVjdG9yQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ2ZWN0b3JbXVwiO1xuICBkaW1lbnNpb25zOiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgVHNWZWN0b3JQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ0c3ZlY3RvclwiO1xufTtcbmV4cG9ydCB0eXBlIFJlbGF0aW9uVHlwZSA9IFwiSGFzTWFueVwiIHwgXCJCZWxvbmdzVG9PbmVcIiB8IFwiTWFueVRvTWFueVwiIHwgXCJPbmVUb09uZVwiO1xuZXhwb3J0IHR5cGUgUmVsYXRpb25PbiA9IFwiQ0FTQ0FERVwiIHwgXCJTRVQgTlVMTFwiIHwgXCJOTyBBQ1RJT05cIiB8IFwiU0VUIERFRkFVTFRcIiB8IFwiUkVTVFJJQ1RcIjtcbnR5cGUgX1JlbGF0aW9uUHJvcCA9IHtcbiAgdHlwZTogXCJyZWxhdGlvblwiO1xuICBuYW1lOiBzdHJpbmc7XG4gIHdpdGg6IHN0cmluZztcbiAgbnVsbGFibGU/OiBib29sZWFuOyAvLyBERUZBVUxUOiBmYWxzZVxuICB0b0ZpbHRlcj86IHRydWU7IC8vIERFRkFVTFQ6IGZhbHNlXG4gIGRlc2M/OiBzdHJpbmc7XG4gIGNvbmU/OiBDb25lOyAvLyBjb25lIOuplO2DgOuNsOydtO2EsFxufTtcbmV4cG9ydCB0eXBlIE9uZVRvT25lUmVsYXRpb25Qcm9wID0gX1JlbGF0aW9uUHJvcCAmIHtcbiAgcmVsYXRpb25UeXBlOiBcIk9uZVRvT25lXCI7XG4gIGN1c3RvbUpvaW5DbGF1c2U/OiBzdHJpbmc7XG59ICYgKFxuICAgIHwge1xuICAgICAgICBoYXNKb2luQ29sdW1uOiB0cnVlO1xuICAgICAgICB1c2VDb25zdHJhaW50PzogYm9vbGVhbjsgLy8gREVGQVVMVDogdHJ1ZVxuICAgICAgICBvblVwZGF0ZT86IFJlbGF0aW9uT247IC8vIERFRkFVTFQ6IFJFU1RSSUNUXG4gICAgICAgIG9uRGVsZXRlPzogUmVsYXRpb25PbjsgLy8gREVGQVVMVDogUkVTVFJJQ1RcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgaGFzSm9pbkNvbHVtbjogZmFsc2U7XG4gICAgICB9XG4gICk7XG5leHBvcnQgdHlwZSBCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AgPSBfUmVsYXRpb25Qcm9wICYge1xuICByZWxhdGlvblR5cGU6IFwiQmVsb25nc1RvT25lXCI7XG4gIGN1c3RvbUpvaW5DbGF1c2U/OiBzdHJpbmc7XG4gIHVzZUNvbnN0cmFpbnQ/OiBib29sZWFuOyAvLyBERUZBVUxUOiB0cnVlXG4gIG9uVXBkYXRlPzogUmVsYXRpb25PbjsgLy8gREVGQVVMVDogUkVTVFJJQ1RcbiAgb25EZWxldGU/OiBSZWxhdGlvbk9uOyAvLyBERUZBVUxUOiBSRVNUUklDVFxufTtcbmV4cG9ydCB0eXBlIEhhc01hbnlSZWxhdGlvblByb3AgPSBfUmVsYXRpb25Qcm9wICYge1xuICByZWxhdGlvblR5cGU6IFwiSGFzTWFueVwiO1xuICBqb2luQ29sdW1uOiBzdHJpbmc7XG4gIGZyb21Db2x1bW4/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgTWFueVRvTWFueVJlbGF0aW9uUHJvcCA9IF9SZWxhdGlvblByb3AgJiB7XG4gIHJlbGF0aW9uVHlwZTogXCJNYW55VG9NYW55XCI7XG4gIGpvaW5UYWJsZTogYCR7c3RyaW5nfV9fJHtzdHJpbmd9YDtcbiAgb25VcGRhdGU6IFJlbGF0aW9uT247XG4gIG9uRGVsZXRlOiBSZWxhdGlvbk9uO1xufTtcbmV4cG9ydCB0eXBlIFJlbGF0aW9uUHJvcCA9XG4gIHwgT25lVG9PbmVSZWxhdGlvblByb3BcbiAgfCBCZWxvbmdzVG9PbmVSZWxhdGlvblByb3BcbiAgfCBIYXNNYW55UmVsYXRpb25Qcm9wXG4gIHwgTWFueVRvTWFueVJlbGF0aW9uUHJvcDtcblxuZXhwb3J0IHR5cGUgRW50aXR5UHJvcCA9XG4gIHwgSW50ZWdlclByb3BcbiAgfCBJbnRlZ2VyQXJyYXlQcm9wXG4gIHwgQmlnSW50ZWdlclByb3BcbiAgfCBCaWdJbnRlZ2VyQXJyYXlQcm9wXG4gIHwgU3RyaW5nUHJvcFxuICB8IFN0cmluZ0FycmF5UHJvcFxuICB8IEVudW1Qcm9wXG4gIHwgRW51bUFycmF5UHJvcFxuICB8IE51bWJlclByb3BcbiAgfCBOdW1iZXJBcnJheVByb3BcbiAgfCBOdW1lcmljUHJvcFxuICB8IE51bWVyaWNBcnJheVByb3BcbiAgfCBOdW1lcmljUHJvcFxuICB8IEJvb2xlYW5Qcm9wXG4gIHwgQm9vbGVhbkFycmF5UHJvcFxuICB8IERhdGVQcm9wXG4gIHwgRGF0ZUFycmF5UHJvcFxuICB8IFV1aWRQcm9wXG4gIHwgVXVpZEFycmF5UHJvcFxuICB8IEpzb25Qcm9wXG4gIHwgVmlydHVhbFByb3BcbiAgfCBWZWN0b3JQcm9wXG4gIHwgVmVjdG9yQXJyYXlQcm9wXG4gIHwgVHNWZWN0b3JQcm9wXG4gIHwgUmVsYXRpb25Qcm9wO1xuXG4vKipcbiAqIFNvbmFtdUZpbGUgVHlwZXNcbiAqXG4gKiDtjIzsnbwg7JeF66Gc65Oc66W8IOychO2VnCBKU09OIO2DgOyeheyeheuLiOuLpC5cbiAqIEVudGl0eeydmCBqc29uIOyGjeyEseyXkOyEnCBpZOuhnCBcIlNvbmFtdUZpbGVcIiDrmJDripQgXCJTb25hbXVGaWxlW11cIuydhCDsp4DsoJXtlZjsl6wg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbmFtdUZpbGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBtaW1lX3R5cGU6IHN0cmluZztcbiAgc2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgU29uYW11RmlsZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICB1cmw6IHouc3RyaW5nKCksXG4gICAgbWltZV90eXBlOiB6LnN0cmluZygpLFxuICAgIHNpemU6IHoubnVtYmVyKCksXG4gIH0pXG4gIC5kZXNjcmliZShcIlNvbmFtdUZpbGVcIik7XG5cbmV4cG9ydCBjb25zdCBTb25hbXVGaWxlQXJyYXlTY2hlbWEgPSB6LmFycmF5KFNvbmFtdUZpbGVTY2hlbWEpLmRlc2NyaWJlKFwiU29uYW11RmlsZVtdXCIpO1xuXG4vKipcbiAqIFNvbmFtdSDsvZTslrTsl5DshJwg7KCc6rO17ZWY64qUIOuCtOyepSBKU09OIO2DgOyehSBJRCDrqqnroZ1cbiAqIOyDiOuhnOyatCDrgrTsnqUg7YOA7J6FIOy2lOqwgCDsi5wg7J20IOuwsOyXtOyXkCDstpTqsIDtlZjrqbQg7J6Q64+Z7Jy866GcIFVJ7JeQIOuFuOy2nOuQqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNvbnN0IEJVSUxUX0lOX1RZUEVfSURTID0gW1wiU29uYW11RmlsZVwiLCBcIlNvbmFtdUZpbGVbXVwiXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWx0SW5UeXBlSWQgPSAodHlwZW9mIEJVSUxUX0lOX1RZUEVfSURTKVtudW1iZXJdO1xuXG4vKipcbiAqIHBndmVjdG9yIOqxsOumrCDsl7DsgrDsnpAg7YG0656Y7IqkXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiAtIGB2ZWN0b3JfY29zaW5lX29wc2A6IOy9lOyCrOyduCDqsbDrpqwgKENvc2luZSBEaXN0YW5jZSkgLSDqtozsnqVcbiAqICAgLSBTUUwg7Jew7IKw7J6QOiBgPD0+YFxuICogICAtIOuyoe2EsOydmCDrsKntlqXrp4wg67mE6rWQICjtgazquLAg66y07IucKSwgMSAtIGNvc2luZV9zaW1pbGFyaXR5XG4gKiAgIC0g7YWN7Iqk7Yq4IOyehOuyoOuUqSwg7Iuc66eo7YuxIOqygOyDieyXkCDqsIDsnqUg7J2867CY7KCB7Jy866GcIOyCrOyaqVxuICogICAtIOyCrOyaqSDsmIg6IE9wZW5BSSwgVm95YWdlIOuTsSDrjIDrtoDrtoTsnZgg7J6E67Kg65SpIOuqqOuNuOyXkCDqtozsnqVcbiAqXG4gKiAtIGB2ZWN0b3JfaXBfb3BzYDog64K07KCBIChJbm5lciBQcm9kdWN0KVxuICogICAtIFNRTCDsl7DsgrDsnpA6IGA8Iz5gXG4gKiAgIC0g65GQIOuyoe2EsOydmCDrgrTsoIHsnYQg6rOE7IKwIChzdW0oYVtpXSAqIGJbaV0pKVxuICogICAtIOygleq3nO2ZlOuQnCDrsqHthLDsl5DshJwg7L2U7IKs7J24IOycoOyCrOuPhOyZgCDrj5nsnbztlZwg6rKw6rO8XG4gKiAgIC0g6rCS7J20IO2BtOyImOuhnSDsnKDsgqwgKOydjOyImCDsl7DsgrDsnpDsnbTrr4DroZwgT1JERVIgQlnsl5DshJwg7KO87J2YKVxuICogICAtIOyCrOyaqSDsmIg6IOydtOuvuCDsoJXqt5ztmZTrkJwg7J6E67Kg65Sp7JeQ7IScIOqwgOyepSDruaDrpbgg7ISx64qlXG4gKlxuICogLSBgdmVjdG9yX2wyX29wc2A6IOycoO2BtOumrOuTnCDqsbDrpqwgKEwyIERpc3RhbmNlKVxuICogICAtIFNRTCDsl7DsgrDsnpA6IGA8LT5gXG4gKiAgIC0g65GQIOuyoe2EsCDqsITsnZgg7KeB7ISgIOqxsOumrOulvCDqs4TsgrAgKHNxcnQoc3VtKChhW2ldIC0gYltpXSleMikpKVxuICogICAtIOuyoe2EsOydmCDtgazquLAobWFnbml0dWRlKeqwgCDspJHsmpTtlaAg65WMIOyCrOyaqVxuICogICAtIOyCrOyaqSDsmIg6IOydtOuvuOyngCDsnKDsgqzrj4QsIOygiOuMgOyggSDqsbDrpqwg7Lih7KCV7J20IO2VhOyalO2VnCDqsr3smrBcbiAqL1xuZXhwb3J0IHR5cGUgVmVjdG9yT3BzID0gXCJ2ZWN0b3JfY29zaW5lX29wc1wiIHwgXCJ2ZWN0b3JfaXBfb3BzXCIgfCBcInZlY3Rvcl9sMl9vcHNcIjtcblxudHlwZSBFbnRpdHlJbmRleENvbHVtbiA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBudWxsc0ZpcnN0PzogYm9vbGVhbjtcbiAgc29ydE9yZGVyPzogXCJBU0NcIiB8IFwiREVTQ1wiO1xuICAvKiogcGd2ZWN0b3Ig7J24642x7Iqk7JeQ7IScIOyCrOyaqe2VoCDqsbDrpqwg7Jew7IKw7J6QICh2ZWN0b3Ig7Lus65+87JeQ66eMIOyggeyaqSkgKi9cbiAgdmVjdG9yT3BzPzogVmVjdG9yT3BzO1xufTtcbmV4cG9ydCB0eXBlIEVudGl0eUluZGV4ID0ge1xuICB0eXBlOiBcImluZGV4XCIgfCBcInVuaXF1ZVwiIHwgXCJobnN3XCIgfCBcIml2ZmZsYXRcIjtcbiAgY29sdW1uczogRW50aXR5SW5kZXhDb2x1bW5bXTtcbiAgbmFtZTogc3RyaW5nO1xuICB1c2luZz86IFwiYnRyZWVcIiB8IFwiaGFzaFwiIHwgXCJnaW5cIiB8IFwiZ2lzdFwiIHwgXCJwZ3Jvb25nYVwiO1xuICBudWxsc05vdERpc3RpbmN0PzogYm9vbGVhbjsgLy8gdW5pcXVlIGluZGV4IG9ubHlcbiAgLyoqXG4gICAqIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpIOyduOuNseyKpDog6rCBIOuFuOuTnOydmCDstZzrjIAg7Jew6rKwIOyImFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICog6re4656Y7ZSE7JeQ7IScIOqwgSDrhbjrk5zqsIAg6rCA7KeIIOyImCDsnojripQg7LWc64yAIOyXsOqysCDsiJjsnoXri4jri6QuXG4gICAqIEhOU1fripQg67mg66W4IOqygOyDiSDsho3rj4TsmYAg64aS7J2AIOygle2ZleuPhOulvCDsoJzqs7XtlZjrr4DroZwg6raM7J6l65Cp64uI64ukLlxuICAgKiAtIOq4sOuzuOqwkjogMTZcbiAgICogLSDrspTsnIQ6IDIgfiAxMDBcbiAgICogLSDrhpLsnYTsiJjroZ06IOygle2ZleuPhOKGkSwg67mM65OcIOyLnOqwhOKGkSwg66mU66qo66as4oaRXG4gICAqIC0g6raM7J6lOiDruaDrpbgg67mM65OcKDgpLCDqt6DtmJUoMTYpLCDrhpLsnYAg7KCV7ZmV64+EKDMyKSwg7LWc6rOgIOygle2ZleuPhCg2NClcbiAgICovXG4gIG0/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBITlNXIChIaWVyYXJjaGljYWwgTmF2aWdhYmxlIFNtYWxsIFdvcmxkKSDsnbjrjbHsiqQ6IOq1rOyEsSDsi5wg7YOQ7IOJIOuylOychFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICog7J24642x7IqkIOq1rOyEsSDsi5wg6rCBIOuFuOuTnOyXkOyEnCDtg5Dsg4ntlaAg67KU7JyE7J6F64uI64ukLlxuICAgKiAtIOq4sOuzuOqwkjogNjRcbiAgICogLSDrspTsnIQ6IDQgfiAxMDAwXG4gICAqIC0g64aS7J2E7IiY66GdOiDsoJXtmZXrj4TihpEsIOu5jOuTnCDsi5zqsITihpFcbiAgICogLSDqtozsnqU6IOu5oOuluCDruYzrk5woMzIpLCDqt6DtmJUoNjQpLCDrhpLsnYAg7KCV7ZmV64+EKDEyOCksIOy1nOqzoCDsoJXtmZXrj4QoMjU2KVxuICAgKi9cbiAgZWZDb25zdHJ1Y3Rpb24/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBJVkZGbGF0IChJbnZlcnRlZCBGaWxlIHdpdGggRmxhdCBDb21wcmVzc2lvbikg7J24642x7IqkOiDtgbTrn6zsiqTthLDrp4Eg66as7Iqk7Yq4IOyImFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICog67Kh7YSw66W8IO2BtOufrOyKpO2EsOunge2VoCDrsoTtgrcg7IiY66W8IOyngOygle2VqeuLiOuLpC5cbiAgICogSVZGRmxhdOydgCDruaDrpbgg67mM65Oc7JmAIOuCruydgCDrqZTrqqjrpqwg7IKs7Jqp7J20IO2VhOyalO2VoCDrlYwg7IKs7Jqp7ZWp64uI64ukLlxuICAgKiAtIOq2jOyepeqwkjogc3FydChyb3dfY291bnQpIH4gcm93X2NvdW50IC8gMTAwMFxuICAgKiAtIOyYiOyLnDogMTAsMDAw7ZaJIOKGkiAxMDAsIDEwMCwwMDDtlokg4oaSIDMwMCwgMSwwMDAsMDAw7ZaJIOKGkiAxMDAwXG4gICAqIC0g66eO7J2E7IiY66GdIOygle2ZleuPhOKGkSwg6rKA7IOJIOyGjeuPhOKGk1xuICAgKi9cbiAgbGlzdHM/OiBudW1iZXI7XG59O1xuXG4vLyBTdWJzZXRGaWVsZCDtg4DsnoU6IHN0cmluZyDrmJDripQgaW50ZXJuYWwg7Ji17IWY7J20IOyeiOuKlCDqsJ3ssrRcbmV4cG9ydCB0eXBlIFN1YnNldEZpZWxkID0gc3RyaW5nIHwgeyBmaWVsZDogc3RyaW5nOyBpbnRlcm5hbD86IGJvb2xlYW4gfTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVN1YnNldEZpZWxkKGY6IFN1YnNldEZpZWxkKTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiBmID09PSBcInN0cmluZ1wiID8gZiA6IGYuZmllbGQ7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlcm5hbFN1YnNldEZpZWxkKGY6IFN1YnNldEZpZWxkKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgZiAhPT0gXCJzdHJpbmdcIiAmJiBmLmludGVybmFsID09PSB0cnVlO1xufVxuXG4vKipcbiAqIFN1YnNldERlZjogU3Vic2V0IOygleydmFxuICpcbiAqIO2VmOychCDtmLjtmZjshLHsnYQg7JyE7ZW0IFN1YnNldEZpZWxkW10g67Cw7Je0IO2Yle2DnOuPhCDsp4Dsm5Dtlanri4jri6QuXG4gKi9cbmV4cG9ydCB0eXBlIFN1YnNldERlZiA9XG4gIHwgU3Vic2V0RmllbGRbXSAvLyDquLDsobQg67Cw7Je0IO2Yle2DnFxuICB8IHtcbiAgICAgIC8vIOyDiOuhnOyatCDqsJ3ssrQg7ZiV7YOcXG4gICAgICBmaWVsZHM6IFN1YnNldEZpZWxkW107XG4gICAgICBjb25lPzogQ29uZTtcbiAgICB9O1xuXG4vKipcbiAqIEVudW1EZWY6IEVudW0g7KCV7J2YXG4gKlxuICog7ZWY7JyEIO2YuO2ZmOyEseydhCDsnITtlbQgUmVjb3JkPHN0cmluZywgc3RyaW5nPiDtmJXtg5zrj4Qg7KeA7JuQ7ZWp64uI64ukLlxuICovXG5leHBvcnQgdHlwZSBFbnVtRGVmID1cbiAgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IC8vIOq4sOyhtCBSZWNvcmQg7ZiV7YOcXG4gIHwge1xuICAgICAgLy8g7IOI66Gc7Jq0IOqwneyytCDtmJXtg5xcbiAgICAgIHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgIGNvbmU/OiBDb25lO1xuICAgIH07XG5cbi8qKlxuICogU3Vic2V0RGVm6rCAIOyDiOuhnOyatCDqsJ3ssrQg7ZiV7YOc7J247KeAIO2ZleyduFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdWJzZXREZWZXaXRoQ29uZShkZWY6IFN1YnNldERlZik6IGRlZiBpcyB7IGZpZWxkczogU3Vic2V0RmllbGRbXTsgY29uZT86IENvbmUgfSB7XG4gIHJldHVybiAhQXJyYXkuaXNBcnJheShkZWYpICYmIFwiZmllbGRzXCIgaW4gZGVmO1xufVxuXG4vKipcbiAqIEVudW1EZWbqsIAg7IOI66Gc7Jq0IOqwneyytCDtmJXtg5zsnbjsp4Ag7ZmV7J24XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VudW1EZWZXaXRoQ29uZShcbiAgZGVmOiBFbnVtRGVmLFxuKTogZGVmIGlzIHsgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OyBjb25lPzogQ29uZSB9IHtcbiAgcmV0dXJuIChcbiAgICBcInZhbHVlc1wiIGluIGRlZiAmJiAhKFwiY29uZVwiIGluIGRlZiAmJiBkZWYuY29uZSA9PT0gdW5kZWZpbmVkICYmIE9iamVjdC5rZXlzKGRlZikubGVuZ3RoID4gMSlcbiAgKTtcbn1cblxuLyoqXG4gKiBTdWJzZXREZWbsl5DshJwgZmllbGRzIOy2lOy2nFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3Vic2V0RmllbGRzKGRlZjogU3Vic2V0RGVmKTogU3Vic2V0RmllbGRbXSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGRlZikgPyBkZWYgOiBkZWYuZmllbGRzO1xufVxuXG4vKipcbiAqIEVudW1EZWbsl5DshJwgdmFsdWVzIOy2lOy2nFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bURlZlZhbHVlcyhkZWY6IEVudW1EZWYpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIGlzRW51bURlZldpdGhDb25lKGRlZikgPyBkZWYudmFsdWVzIDogZGVmO1xufVxuXG5leHBvcnQgdHlwZSBFbnRpdHlKc29uID0ge1xuICBpZDogc3RyaW5nO1xuICBwYXJlbnRJZD86IHN0cmluZztcbiAgdGFibGU6IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGNvbmU/OiBDb25lOyAvLyBjb25lIOuplO2DgOuNsOydtO2EsFxuICBwcm9wczogRW50aXR5UHJvcFtdO1xuICBpbmRleGVzOiBFbnRpdHlJbmRleFtdO1xuICBzdWJzZXRzOiB7XG4gICAgW3N1YnNldDogc3RyaW5nXTogU3Vic2V0RGVmO1xuICB9O1xuICBlbnVtczoge1xuICAgIFtlbnVtSWQ6IHN0cmluZ106IEVudW1EZWY7XG4gIH07XG59O1xuZXhwb3J0IHR5cGUgRW50aXR5U3Vic2V0Um93ID0ge1xuICBmaWVsZDogc3RyaW5nO1xuICBoYXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBib29sZWFuO1xuICB9O1xuICBpc0ludGVybmFsOiB7XG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbiAgfTtcbiAgY2hpbGRyZW46IEVudGl0eVN1YnNldFJvd1tdO1xuICBwcmVmaXhlczogc3RyaW5nW107XG4gIHJlbGF0aW9uRW50aXR5Pzogc3RyaW5nO1xuICBpc09wZW4/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIEZsYXR0ZW5TdWJzZXRSb3cgPSBPbWl0PEVudGl0eVN1YnNldFJvdywgXCJjaGlsZHJlblwiPjtcblxuLypcbiAgUHJvcE5vZGVcbiovXG5cbi8qKlxuICog7JeU7Yuw7Yuw7J2YIO2VhOuTnCDqtazsobDrpbwg7Yq466asIO2Yle2DnOuhnCDtkZztmITtlZjripQg7KSR6rCEIOuFuOuTnOyeheuLiOuLpC5cbiAqXG4gKiAqKuuqqeyggSoqOiBFbnRpdHnsnZggc3Vic2V0IO2VhOuTnCDtkZztmITsi50o7JiIOiBcImlkXCIsIFwidXNlci5uYW1lXCIsIFwidGFnc1tdXCIp7J2EXG4gKiDsnqzqt4DsoIHsnbgg7Yq466asIOq1rOyhsOuhnCDtjIzsi7HtlZjsl6wgWm9kIOyKpO2CpOuniCDsg53shLHsnZgg7KSR6rCEIOuLqOqzhOuhnCDsgqzsmqntlanri4jri6QuXG4gKlxuICogKirrs4DtmZgg7Z2Q66aEKio6XG4gKiBFbnRpdHkgc3Vic2V0IOKGkiBFbnRpdHlQcm9wTm9kZSAo7Yq466asIOq1rOyhsCkg4oaSIFpvZCDsiqTtgqTrp4gg4oaSIFJlbmRlcmluZ05vZGUgKFVJ7JqpKVxuICpcbiAqICoqbm9kZVR5cGUqKjpcbiAqIC0gXCJwbGFpblwiOiDri6jsnbwg7ZWE65OcICjsmIg6IFwiaWRcIiwgXCJuYW1lXCIpXG4gKiAtIFwib2JqZWN0XCI6IOykkeyyqSDqsJ3ssrQgKOyYiDogXCJ1c2VyLm5hbWVcIiDihpIgdXNlciDqsJ3ssrQpXG4gKiAtIFwiYXJyYXlcIjog67Cw7Je0ICjsmIg6IFwidGFnc1tdXCIg4oaSIHRhZ3Mg67Cw7Je0KVxuICpcbiAqICoq7IKs7JqpIOychOy5mCoqOiBlbnRpdHktY29udmVydGVyLnRz7J2YIHByb3BOb2RlVG9ab2RUeXBlKClcbiAqL1xuZXhwb3J0IHR5cGUgRW50aXR5UHJvcE5vZGUgPVxuICB8IHtcbiAgICAgIG5vZGVUeXBlOiBcInBsYWluXCI7XG4gICAgICBwcm9wOiBFbnRpdHlQcm9wO1xuICAgIH1cbiAgfCB7XG4gICAgICBub2RlVHlwZTogXCJvYmplY3RcIiB8IFwiYXJyYXlcIjtcbiAgICAgIHByb3A/OiBFbnRpdHlQcm9wO1xuICAgICAgY2hpbGRyZW46IEVudGl0eVByb3BOb2RlW107XG4gICAgfTtcblxuLypcbiAgUHJvcCBUeXBlIEd1YXJkc1xuKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXJTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIEludGVnZXJQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEludGVnZXJQcm9wKT8udHlwZSA9PT0gXCJpbnRlZ2VyXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIEludGVnZXJBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgSW50ZWdlckFycmF5UHJvcCk/LnR5cGUgPT09IFwiaW50ZWdlcltdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyUHJvcChwOiB1bmtub3duKTogcCBpcyBJbnRlZ2VyUHJvcCB8IEludGVnZXJBcnJheVByb3Age1xuICByZXR1cm4gaXNJbnRlZ2VyU2luZ2xlUHJvcChwKSB8fCBpc0ludGVnZXJBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBCaWdJbnRlZ2VyUHJvcCB7XG4gIHJldHVybiAocCBhcyBCaWdJbnRlZ2VyUHJvcCk/LnR5cGUgPT09IFwiYmlnSW50ZWdlclwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQmlnSW50ZWdlckFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBCaWdJbnRlZ2VyQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEJpZ0ludGVnZXJBcnJheVByb3ApPy50eXBlID09PSBcImJpZ0ludGVnZXJbXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQmlnSW50ZWdlclByb3AocDogdW5rbm93bik6IHAgaXMgQmlnSW50ZWdlclByb3AgfCBCaWdJbnRlZ2VyQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzQmlnSW50ZWdlclNpbmdsZVByb3AocCkgfHwgaXNCaWdJbnRlZ2VyQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBTdHJpbmdQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFN0cmluZ1Byb3ApPy50eXBlID09PSBcInN0cmluZ1wiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIFN0cmluZ0FycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBTdHJpbmdBcnJheVByb3ApPy50eXBlID09PSBcInN0cmluZ1tdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmdQcm9wKHA6IHVua25vd24pOiBwIGlzIFN0cmluZ1Byb3AgfCBTdHJpbmdBcnJheVByb3Age1xuICByZXR1cm4gaXNTdHJpbmdTaW5nbGVQcm9wKHApIHx8IGlzU3RyaW5nQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW51bVNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgRW51bVByb3Age1xuICByZXR1cm4gKHAgYXMgRW51bVByb3ApPy50eXBlID09PSBcImVudW1cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VudW1BcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgRW51bUFycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBFbnVtQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJlbnVtW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VudW1Qcm9wKHA6IHVua25vd24pOiBwIGlzIEVudW1Qcm9wIHwgRW51bUFycmF5UHJvcCB7XG4gIHJldHVybiBpc0VudW1TaW5nbGVQcm9wKHApIHx8IGlzRW51bUFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlclNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgTnVtYmVyUHJvcCB7XG4gIHJldHVybiAocCBhcyBOdW1iZXJQcm9wKT8udHlwZSA9PT0gXCJudW1iZXJcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlckFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBOdW1iZXJBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgTnVtYmVyQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJudW1iZXJbXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyUHJvcChwOiB1bmtub3duKTogcCBpcyBOdW1iZXJQcm9wIHwgTnVtYmVyQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzTnVtYmVyU2luZ2xlUHJvcChwKSB8fCBpc051bWJlckFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIE51bWVyaWNQcm9wIHtcbiAgcmV0dXJuIChwIGFzIE51bWVyaWNQcm9wKT8udHlwZSA9PT0gXCJudW1lcmljXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIE51bWVyaWNBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgTnVtZXJpY0FycmF5UHJvcCk/LnR5cGUgPT09IFwibnVtZXJpY1tdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljUHJvcChwOiB1bmtub3duKTogcCBpcyBOdW1lcmljUHJvcCB8IE51bWVyaWNBcnJheVByb3Age1xuICByZXR1cm4gaXNOdW1lcmljU2luZ2xlUHJvcChwKSB8fCBpc051bWVyaWNBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBCb29sZWFuUHJvcCB7XG4gIHJldHVybiAocCBhcyBCb29sZWFuUHJvcCk/LnR5cGUgPT09IFwiYm9vbGVhblwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhbkFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBCb29sZWFuQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEJvb2xlYW5BcnJheVByb3ApPy50eXBlID09PSBcImJvb2xlYW5bXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhblByb3AocDogdW5rbm93bik6IHAgaXMgQm9vbGVhblByb3AgfCBCb29sZWFuQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzQm9vbGVhblNpbmdsZVByb3AocCkgfHwgaXNCb29sZWFuQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZVNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgRGF0ZVByb3Age1xuICByZXR1cm4gKHAgYXMgRGF0ZVByb3ApPy50eXBlID09PSBcImRhdGVcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGVBcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgRGF0ZUFycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBEYXRlQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJkYXRlW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGVQcm9wKHA6IHVua25vd24pOiBwIGlzIERhdGVQcm9wIHwgRGF0ZUFycmF5UHJvcCB7XG4gIHJldHVybiBpc0RhdGVTaW5nbGVQcm9wKHApIHx8IGlzRGF0ZUFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1V1aWRTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIFV1aWRQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFV1aWRQcm9wKT8udHlwZSA9PT0gXCJ1dWlkXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNVdWlkQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIFV1aWRBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgVXVpZEFycmF5UHJvcCk/LnR5cGUgPT09IFwidXVpZFtdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNVdWlkUHJvcChwOiB1bmtub3duKTogcCBpcyBVdWlkUHJvcCB8IFV1aWRBcnJheVByb3Age1xuICByZXR1cm4gaXNVdWlkU2luZ2xlUHJvcChwKSB8fCBpc1V1aWRBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNKc29uUHJvcChwOiB1bmtub3duKTogcCBpcyBKc29uUHJvcCB7XG4gIHJldHVybiAocCBhcyBKc29uUHJvcCk/LnR5cGUgPT09IFwianNvblwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlydHVhbFByb3AocDogdW5rbm93bik6IHAgaXMgVmlydHVhbFByb3Age1xuICByZXR1cm4gKHAgYXMgVmlydHVhbFByb3ApPy50eXBlID09PSBcInZpcnR1YWxcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpcnR1YWxDb2RlUHJvcChwOiB1bmtub3duKTogcCBpcyBWaXJ0dWFsUHJvcCB7XG4gIGlmICghaXNWaXJ0dWFsUHJvcChwKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gcC52aXJ0dWFsVHlwZSAhPT0gXCJxdWVyeVwiOyAvLyB1bmRlZmluZWTrj4QgXCJjb2RlXCLroZwg7Leo6riJXG59XG5leHBvcnQgZnVuY3Rpb24gaXNWaXJ0dWFsUXVlcnlQcm9wKHA6IHVua25vd24pOiBwIGlzIFZpcnR1YWxQcm9wIHtcbiAgaWYgKCFpc1ZpcnR1YWxQcm9wKHApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBwLnZpcnR1YWxUeXBlID09PSBcInF1ZXJ5XCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWZWN0b3JTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIFZlY3RvclByb3Age1xuICByZXR1cm4gKHAgYXMgVmVjdG9yUHJvcCk/LnR5cGUgPT09IFwidmVjdG9yXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWZWN0b3JBcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgVmVjdG9yQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFZlY3RvckFycmF5UHJvcCk/LnR5cGUgPT09IFwidmVjdG9yW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlY3RvclByb3AocDogdW5rbm93bik6IHAgaXMgVmVjdG9yUHJvcCB8IFZlY3RvckFycmF5UHJvcCB7XG4gIHJldHVybiBpc1ZlY3RvclNpbmdsZVByb3AocCkgfHwgaXNWZWN0b3JBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUc1ZlY3RvclByb3AocDogdW5rbm93bik6IHAgaXMgVHNWZWN0b3JQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFRzVmVjdG9yUHJvcCk/LnR5cGUgPT09IFwidHN2ZWN0b3JcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgUmVsYXRpb25Qcm9wKT8udHlwZSA9PT0gXCJyZWxhdGlvblwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzT25lVG9PbmVSZWxhdGlvblByb3AocDogdW5rbm93bik6IHAgaXMgT25lVG9PbmVSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgT25lVG9PbmVSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiT25lVG9PbmVcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBCZWxvbmdzVG9PbmVSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKT8ucmVsYXRpb25UeXBlID09PSBcIkJlbG9uZ3NUb09uZVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSGFzTWFueVJlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBIYXNNYW55UmVsYXRpb25Qcm9wIHtcbiAgcmV0dXJuIChwIGFzIEhhc01hbnlSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiSGFzTWFueVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBNYW55VG9NYW55UmVsYXRpb25Qcm9wIHtcbiAgcmV0dXJuIChwIGFzIE1hbnlUb01hbnlSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiTWFueVRvTWFueVwiO1xufVxuXG50eXBlIEpvaW5DbGF1c2UgPVxuICB8IHtcbiAgICAgIGZyb206IHN0cmluZztcbiAgICAgIHRvOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIGN1c3RvbTogc3RyaW5nO1xuICAgIH07XG5leHBvcnQgZnVuY3Rpb24gaXNDdXN0b21Kb2luQ2xhdXNlKHA6IHVua25vd24pOiBwIGlzIHsgY3VzdG9tOiBzdHJpbmcgfSB7XG4gIHJldHVybiAhIShwIGFzIHsgY3VzdG9tOiBzdHJpbmcgfSk/LmN1c3RvbTtcbn1cblxudHlwZSBTdWJzZXRMb2FkZXIgPSB7XG4gIGFzOiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIG1hbnlKb2luOiB7XG4gICAgZnJvbVRhYmxlOiBzdHJpbmc7XG4gICAgZnJvbUNvbDogc3RyaW5nO1xuICAgIGlkRmllbGQ6IHN0cmluZztcbiAgICB0b1RhYmxlOiBzdHJpbmc7XG4gICAgdG9Db2w6IHN0cmluZztcbiAgICB0aHJvdWdoPzoge1xuICAgICAgdGFibGU6IHN0cmluZztcbiAgICAgIGZyb21Db2w6IHN0cmluZztcbiAgICAgIHRvQ29sOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgb25lSm9pbnM6ICh7XG4gICAgYXM6IHN0cmluZztcbiAgICBqb2luOiBcImlubmVyXCIgfCBcIm91dGVyXCI7XG4gICAgdGFibGU6IHN0cmluZztcbiAgfSAmIEpvaW5DbGF1c2UpW107XG4gIHNlbGVjdDogc3RyaW5nW107XG4gIGxvYWRlcnM/OiBTdWJzZXRMb2FkZXJbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFN1YnNldFF1ZXJ5ID0ge1xuICBzZWxlY3Q6IHN0cmluZ1tdO1xuICB2aXJ0dWFsOiBzdHJpbmdbXTtcbiAgam9pbnM6ICh7XG4gICAgYXM6IHN0cmluZztcbiAgICBqb2luOiBcImlubmVyXCIgfCBcIm91dGVyXCI7XG4gICAgdGFibGU6IHN0cmluZztcbiAgfSAmIEpvaW5DbGF1c2UpW107XG4gIGxvYWRlcnM6IFN1YnNldExvYWRlcltdO1xufTtcblxuLyogQmFzZU1vZGVsICovXG5leHBvcnQgY29uc3QgU29uYW11UXVlcnlNb2RlID0gei5lbnVtKFtcImJvdGhcIiwgXCJsaXN0XCIsIFwiY291bnRcIl0pO1xuZXhwb3J0IHR5cGUgU29uYW11UXVlcnlNb2RlID0gei5pbmZlcjx0eXBlb2YgU29uYW11UXVlcnlNb2RlPjtcblxuLyogU2VtYW50aWMgUXVlcnkgKi9cbmV4cG9ydCBjb25zdCBTb25hbXVTZW1hbnRpY1BhcmFtcyA9IHoub2JqZWN0KHtcbiAgc2VtYW50aWNRdWVyeTogei5vYmplY3Qoe1xuICAgIGVtYmVkZGluZzogei5hcnJheSh6Lm51bWJlcigpKS5taW4oMTAyNCkubWF4KDEwMjQpLFxuICAgIHRocmVzaG9sZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIG1ldGhvZDogei5lbnVtKFtcImNvc2luZVwiLCBcImwyXCIsIFwiaW5uZXJfcHJvZHVjdFwiXSkub3B0aW9uYWwoKSxcbiAgfSksXG59KTtcbmV4cG9ydCB0eXBlIFNvbmFtdVNlbWFudGljUGFyYW1zID0gei5pbmZlcjx0eXBlb2YgU29uYW11U2VtYW50aWNQYXJhbXM+O1xuXG4vKiBLbmV4IE1pZ3JhdGlvbiAqL1xuZXhwb3J0IHR5cGUgS25leEVycm9yID0ge1xuICBjb2RlOiBzdHJpbmc7XG4gIGVycm5vOiBudW1iZXI7XG4gIHNxbDogc3RyaW5nO1xuICBzcWxNZXNzYWdlOiBzdHJpbmc7XG4gIHNxbFN0YXRlOiBzdHJpbmc7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzS25leEVycm9yKGU6IHVua25vd24pOiBlIGlzIEtuZXhFcnJvciB7XG4gIHJldHVybiAhIShlIGFzIEtuZXhFcnJvcik/LmNvZGUgJiYgISEoZSBhcyBLbmV4RXJyb3IpPy5zcWxNZXNzYWdlICYmICEhKGUgYXMgS25leEVycm9yKT8uc3FsU3RhdGU7XG59XG5cbmV4cG9ydCB0eXBlIEtuZXhDb2x1bW5UeXBlID1cbiAgfCBcInN0cmluZ1wiXG4gIHwgXCJ0ZXh0XCJcbiAgfCBcInNtYWxsdGV4dFwiXG4gIHwgXCJtZWRpdW10ZXh0XCJcbiAgfCBcImxvbmd0ZXh0XCJcbiAgfCBcImludGVnZXJcIlxuICB8IFwiYmlnSW50ZWdlclwiXG4gIHwgXCJkZWNpbWFsXCJcbiAgfCBcInRpbWVzdGFtcFwiXG4gIHwgXCJib29sZWFuXCJcbiAgfCBcImZvcmVpZ25cIlxuICB8IFwidXVpZFwiXG4gIHwgXCJqc29uXCJcbiAgfCBcImZsb2F0XCJcbiAgfCBcImRhdGVcIlxuICB8IFwidGltZVwiXG4gIHwgXCJkYXRldGltZVwiO1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uQ29sdW1uVHlwZSA9XG4gIHwgXCJzdHJpbmdcIlxuICB8IFwic3RyaW5nW11cIlxuICB8IFwiaW50ZWdlclwiXG4gIHwgXCJpbnRlZ2VyW11cIlxuICB8IFwiYmlnSW50ZWdlclwiXG4gIHwgXCJiaWdJbnRlZ2VyW11cIlxuICB8IFwibnVtYmVyT3JOdW1lcmljXCJcbiAgfCBcIm51bWJlck9yTnVtZXJpY1tdXCJcbiAgfCBcImJvb2xlYW5cIlxuICB8IFwiYm9vbGVhbltdXCJcbiAgfCBcImRhdGVcIlxuICB8IFwiZGF0ZVtdXCJcbiAgfCBcInV1aWRcIlxuICB8IFwidXVpZFtdXCJcbiAgfCBcImpzb25cIlxuICB8IFwidmVjdG9yXCJcbiAgfCBcInZlY3RvcltdXCJcbiAgfCBcInRzdmVjdG9yXCI7XG5leHBvcnQgdHlwZSBNaWdyYXRpb25Db2x1bW4gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogTWlncmF0aW9uQ29sdW1uVHlwZTtcbiAgbnVsbGFibGU6IGJvb2xlYW47XG4gIG51bWJlclR5cGU/OiBcInJlYWxcIiB8IFwiZG91YmxlIHByZWNpc2lvblwiIHwgXCJudW1lcmljXCI7XG4gIGxlbmd0aD86IG51bWJlcjtcbiAgZGVmYXVsdFRvPzogc3RyaW5nO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHNjYWxlPzogbnVtYmVyO1xuICBkaW1lbnNpb25zPzogbnVtYmVyO1xuICBnZW5lcmF0ZWQ/OiBHZW5lcmF0ZWRDb2x1bW47XG59O1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uSW5kZXggPSB7XG4gIHR5cGU6IFwidW5pcXVlXCIgfCBcImluZGV4XCIgfCBcImhuc3dcIiB8IFwiaXZmZmxhdFwiO1xuICBjb2x1bW5zOiBFbnRpdHlJbmRleENvbHVtbltdO1xuICBuYW1lOiBzdHJpbmc7XG4gIHVzaW5nPzogXCJidHJlZVwiIHwgXCJoYXNoXCIgfCBcImdpblwiIHwgXCJnaXN0XCIgfCBcInBncm9vbmdhXCI7XG4gIG51bGxzTm90RGlzdGluY3Q/OiBib29sZWFuO1xuICAvKiogSE5TVyAoSGllcmFyY2hpY2FsIE5hdmlnYWJsZSBTbWFsbCBXb3JsZCk6IOqwgSDrhbjrk5zsnZgg7LWc64yAIOyXsOqysCDsiJggKi9cbiAgbT86IG51bWJlcjtcbiAgLyoqIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpOiDqtazshLEg7IucIO2DkOyDiSDrspTsnIQgKi9cbiAgZWZDb25zdHJ1Y3Rpb24/OiBudW1iZXI7XG4gIC8qKiBJVkZGbGF0IChJbnZlcnRlZCBGaWxlIHdpdGggRmxhdCBDb21wcmVzc2lvbik6IO2BtOufrOyKpO2EsOungSDrpqzsiqTtirgg7IiYICovXG4gIGxpc3RzPzogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkZvcmVpZ24gPSB7XG4gIGNvbHVtbnM6IHN0cmluZ1tdO1xuICB0bzogc3RyaW5nO1xuICBvblVwZGF0ZTogUmVsYXRpb25PbjtcbiAgb25EZWxldGU6IFJlbGF0aW9uT247XG59O1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uSm9pblRhYmxlID0ge1xuICB0YWJsZTogc3RyaW5nO1xuICBpbmRleGVzOiBNaWdyYXRpb25JbmRleFtdO1xuICBjb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXTtcbiAgZm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXTtcbn07XG5leHBvcnQgdHlwZSBNaWdyYXRpb25TZXQgPSB7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIGNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdO1xuICBpbmRleGVzOiBNaWdyYXRpb25JbmRleFtdO1xuICBmb3JlaWduczogTWlncmF0aW9uRm9yZWlnbltdO1xufTtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvblNldEFuZEpvaW5UYWJsZSA9IE1pZ3JhdGlvblNldCAmIHtcbiAgam9pblRhYmxlczogTWlncmF0aW9uSm9pblRhYmxlW107XG59O1xuZXhwb3J0IHR5cGUgR2VuTWlncmF0aW9uQ29kZSA9IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgdGFibGU6IHN0cmluZztcbiAgdHlwZTogXCJub3JtYWxcIiB8IFwiZm9yZWlnblwiO1xuICBmb3JtYXR0ZWQ6IHN0cmluZyB8IG51bGw7XG59O1xuXG4vKiBBcGkgKi9cbmV4cG9ydCB0eXBlIEFwaVBhcmFtID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IEFwaVBhcmFtVHlwZTtcbiAgb3B0aW9uYWw6IGJvb2xlYW47XG4gIGRlZmF1bHREZWY/OiBzdHJpbmc7XG59O1xuZXhwb3J0IG5hbWVzcGFjZSBBcGlQYXJhbVR5cGUge1xuICBleHBvcnQgdHlwZSBGdW5jdGlvbiA9IHtcbiAgICB0OiBcImZ1bmN0aW9uXCI7XG4gICAgcGFyYW1ldGVyczogQXBpUGFyYW1bXTtcbiAgICByZXR1cm5UeXBlOiBBcGlQYXJhbVR5cGU7XG4gIH07XG4gIGV4cG9ydCB0eXBlIE9iamVjdCA9IHtcbiAgICB0OiBcIm9iamVjdFwiO1xuICAgIHByb3BzOiBBcGlQYXJhbVtdO1xuICB9O1xuICBleHBvcnQgdHlwZSBVbmlvbiA9IHtcbiAgICB0OiBcInVuaW9uXCI7XG4gICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICB9O1xuICBleHBvcnQgdHlwZSBJbnRlcnNlY3Rpb24gPSB7XG4gICAgdDogXCJpbnRlcnNlY3Rpb25cIjtcbiAgICB0eXBlczogQXBpUGFyYW1UeXBlW107XG4gIH07XG4gIGV4cG9ydCB0eXBlIFN0cmluZ0xpdGVyYWwgPSB7XG4gICAgdDogXCJzdHJpbmctbGl0ZXJhbFwiO1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gIH07XG4gIGV4cG9ydCB0eXBlIE51bWVyaWNMaXRlcmFsID0ge1xuICAgIHQ6IFwibnVtZXJpYy1saXRlcmFsXCI7XG4gICAgdmFsdWU6IG51bWJlcjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgQXJyYXkgPSB7XG4gICAgdDogXCJhcnJheVwiO1xuICAgIGVsZW1lbnRzVHlwZTogQXBpUGFyYW1UeXBlO1xuICB9O1xuICBleHBvcnQgdHlwZSBSZWYgPSB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogc3RyaW5nO1xuICAgIGFyZ3M/OiBBcGlQYXJhbVR5cGVbXTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgSW5kZXhlZEFjY2VzcyA9IHtcbiAgICB0OiBcImluZGV4ZWQtYWNjZXNzXCI7XG4gICAgb2JqZWN0OiBBcGlQYXJhbVR5cGU7XG4gICAgaW5kZXg6IEFwaVBhcmFtVHlwZTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgVHVwbGVUeXBlID0ge1xuICAgIHQ6IFwidHVwbGUtdHlwZVwiO1xuICAgIGVsZW1lbnRzOiBBcGlQYXJhbVR5cGVbXTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgUGljayA9IFJlZiAmIHtcbiAgICB0OiBcInJlZlwiO1xuICAgIGlkOiBcIlBpY2tcIjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgT21pdCA9IFJlZiAmIHtcbiAgICB0OiBcInJlZlwiO1xuICAgIGlkOiBcIk9taXRcIjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgUGFydGlhbCA9IFJlZiAmIHtcbiAgICB0OiBcInJlZlwiO1xuICAgIGlkOiBcIlBhcnRpYWxcIjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgUHJvbWlzZSA9IFJlZiAmIHtcbiAgICB0OiBcInJlZlwiO1xuICAgIGlkOiBcIlByb21pc2VcIjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgQ29udGV4dCA9IFJlZiAmIHtcbiAgICB0OiBcInJlZlwiO1xuICAgIGlkOiBcIkNvbnRleHRcIjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgVHlwZVBhcmFtID0ge1xuICAgIHQ6IFwidHlwZS1wYXJhbVwiO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY29uc3RyYWludD86IEFwaVBhcmFtVHlwZTtcbiAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gaXNPYmplY3QodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLk9iamVjdCB7XG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5PYmplY3QpPy50ID09PSBcIm9iamVjdFwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1VuaW9uKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5VbmlvbiB7XG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5Vbmlvbik/LnQgPT09IFwidW5pb25cIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNJbnRlcnNlY3Rpb24odjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLkludGVyc2VjdGlvbiB7XG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5JbnRlcnNlY3Rpb24pPy50ID09PSBcImludGVyc2VjdGlvblwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZ0xpdGVyYWwodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlN0cmluZ0xpdGVyYWwge1xuICAgIHJldHVybiAodiBhcyBBcGlQYXJhbVR5cGUuU3RyaW5nTGl0ZXJhbCk/LnQgPT09IFwic3RyaW5nLWxpdGVyYWxcIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljTGl0ZXJhbCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuTnVtZXJpY0xpdGVyYWwge1xuICAgIHJldHVybiAodiBhcyBBcGlQYXJhbVR5cGUuTnVtZXJpY0xpdGVyYWwpPy50ID09PSBcIm51bWVyaWMtbGl0ZXJhbFwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc0FycmF5KHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5BcnJheSB7XG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5BcnJheSk/LnQgPT09IFwiYXJyYXlcIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNSZWYodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlJlZiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc0luZGV4ZWRBY2Nlc3ModjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLkluZGV4ZWRBY2Nlc3Mge1xuICAgIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJpbmRleGVkLWFjY2Vzc1wiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1R1cGxlVHlwZSh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuVHVwbGVUeXBlIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPT0gbnVsbCAmJiAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwidHVwbGUtdHlwZVwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1BpY2sodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlBpY2sge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgdiAhPT0gbnVsbCAmJlxuICAgICAgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiICYmXG4gICAgICAodiBhcyB7IGlkPzogdW5rbm93biB9KS5pZCA9PT0gXCJQaWNrXCJcbiAgICApO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc09taXQodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLk9taXQge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgdiAhPT0gbnVsbCAmJlxuICAgICAgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiICYmXG4gICAgICAodiBhcyB7IGlkPzogdW5rbm93biB9KS5pZCA9PT0gXCJPbWl0XCJcbiAgICApO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1BhcnRpYWwodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlBhcnRpYWwge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgdiAhPT0gbnVsbCAmJlxuICAgICAgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiICYmXG4gICAgICAodiBhcyB7IGlkPzogdW5rbm93biB9KS5pZCA9PT0gXCJQYXJ0aWFsXCJcbiAgICApO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1Byb21pc2UodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlByb21pc2Uge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgdiAhPT0gbnVsbCAmJlxuICAgICAgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiICYmXG4gICAgICAodiBhcyB7IGlkPzogdW5rbm93biB9KS5pZCA9PT0gXCJQcm9taXNlXCJcbiAgICApO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc0NvbnRleHQodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLkNvbnRleHQge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgdiAhPT0gbnVsbCAmJlxuICAgICAgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiICYmXG4gICAgICAodiBhcyB7IGlkPzogdW5rbm93biB9KS5pZCA9PT0gXCJDb250ZXh0XCJcbiAgICApO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1JlZktuZXgodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlJlZiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIktuZXhcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzVHlwZVBhcmFtKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5UeXBlUGFyYW0ge1xuICAgIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJ0eXBlLXBhcmFtXCI7XG4gIH1cbn1cbmV4cG9ydCB0eXBlIEFwaVBhcmFtVHlwZSA9XG4gIHwgXCJzdHJpbmdcIlxuICB8IFwibnVtYmVyXCJcbiAgfCBcImJvb2xlYW5cIlxuICB8IFwibnVsbFwiXG4gIHwgXCJ1bmRlZmluZWRcIlxuICB8IFwidm9pZFwiXG4gIHwgXCJhbnlcIlxuICB8IFwidW5rbm93blwiXG4gIHwgXCJ0cnVlXCJcbiAgfCBcImZhbHNlXCJcbiAgfCBBcGlQYXJhbVR5cGUuU3RyaW5nTGl0ZXJhbFxuICB8IEFwaVBhcmFtVHlwZS5OdW1lcmljTGl0ZXJhbFxuICB8IEFwaVBhcmFtVHlwZS5PYmplY3RcbiAgfCBBcGlQYXJhbVR5cGUuVW5pb25cbiAgfCBBcGlQYXJhbVR5cGUuSW50ZXJzZWN0aW9uXG4gIHwgQXBpUGFyYW1UeXBlLkFycmF5XG4gIHwgQXBpUGFyYW1UeXBlLlJlZlxuICB8IEFwaVBhcmFtVHlwZS5JbmRleGVkQWNjZXNzXG4gIHwgQXBpUGFyYW1UeXBlLlR5cGVQYXJhbVxuICB8IEFwaVBhcmFtVHlwZS5UdXBsZVR5cGVcbiAgfCBBcGlQYXJhbVR5cGUuRnVuY3Rpb247XG5cbi8qIFRlbXBsYXRlICovXG4vKipcbiAqIFVJIOy7tO2PrOuEjO2KuCDroIzrjZTrp4HsnYQg7JyE7ZWcIOuplO2DgOuNsOydtO2EsCDrhbjrk5zsnoXri4jri6QuXG4gKlxuICogKirrqqnsoIEqKjogWm9kIOyKpO2CpOuniOuhnOu2gO2EsCDtlITroaDtirjsl5Trk5wgVUkg7Lu07Y+s64SM7Yq466W8IOyekOuPmSDsg53shLHtlZjquLAg7JyE7ZWcXG4gKiDroIzrjZTrp4Eg7KCV67O066W8IOuLtOydgCDtirjrpqwg6rWs7KGw7J6F64uI64ukLiDqsIEg7ZWE65Oc6rCAIOyWtOuWpCBVSSDsu7Ttj6zrhIztirjroZxcbiAqIO2RnO2YhOuQmOyWtOyVvCDtlZjripTsp4Ao7YWN7Iqk7Yq4LCDsnbTrr7jsp4AsIOuCoOynnCwgRW51bSDshKDtg50g65OxKeulvCDrqoXsi5ztlanri4jri6QuXG4gKlxuICogKirrs4DtmZgg7Z2Q66aEKio6XG4gKiBFbnRpdHkgc3Vic2V0IOKGkiBFbnRpdHlQcm9wTm9kZSDihpIgWm9kIOyKpO2CpOuniCDihpIgUmVuZGVyaW5nTm9kZSAoVUnsmqkpIOKGkiBSZWFjdCDsu7Ttj6zrhIztirgg7L2U65OcIOyDneyEsVxuICpcbiAqICoq7KO87JqUIO2VhOuTnCoqOlxuICogLSBgcmVuZGVyVHlwZWA6IFVJIOy7tO2PrOuEjO2KuCDsnKDtmJUgKHN0cmluZy1wbGFpbiwgbnVtYmVyLWZrX2lkLCBlbnVtcywgYXJyYXkg65OxKVxuICogLSBgem9kVHlwZWA6IOybkOuzuCBab2Qg7Iqk7YKk66eIICh2YWxpZGF0aW9uIOyaqSlcbiAqIC0gYGNoaWxkcmVuYDog7KSR7LKp65CcIOqwneyytCDtlYTrk5zrk6QgKG9iamVjdOydvCDrlYwpXG4gKiAtIGBlbGVtZW50YDog67Cw7Je0IOyalOyGjCDtg4DsnoUgKGFycmF57J28IOuVjClcbiAqXG4gKiAqKuyCrOyaqSDsnITsuZgqKjpcbiAqIC0gem9kLWNvbnZlcnRlci50c+ydmCB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKCnsl5DshJwg7IOd7ISxXG4gKiAtIHZpZXdfZm9ybS50ZW1wbGF0ZS50cywgdmlld19saXN0LnRlbXBsYXRlLnRzIOuTseyXkOyEnCBSZWFjdCDsu7Ttj6zrhIztirgg7L2U65OcIOyDneyEseyXkCDsgqzsmqlcbiAqL1xuLy8g7IWA7ZSEIOywuOyhsCDtg4DsnoXsnbTrr4DroZwgWm9kIOyDneuete2VmOqzoCDsp4HsoJEg7KCV7J2YXG5leHBvcnQgY29uc3QgUmVuZGVyaW5nTm9kZSA9IHouYW55KCk7XG5leHBvcnQgdHlwZSBSZW5kZXJpbmdOb2RlID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHJlbmRlclR5cGU6XG4gICAgfCBcInN0cmluZy1wbGFpblwiXG4gICAgfCBcInN0cmluZy1pbWFnZVwiXG4gICAgfCBcInN0cmluZy1kYXRldGltZVwiXG4gICAgfCBcInN0cmluZy1kYXRlXCJcbiAgICB8IFwic3RyaW5nLWlkXCJcbiAgICB8IFwic3RyaW5nLWZrX2lkXCJcbiAgICB8IFwiZGF0ZXRpbWVcIlxuICAgIHwgXCJudW1iZXItcGxhaW5cIlxuICAgIHwgXCJudW1iZXItaWRcIlxuICAgIHwgXCJudW1iZXItZmtfaWRcIlxuICAgIHwgXCJib29sZWFuXCJcbiAgICB8IFwiZW51bXNcIlxuICAgIHwgXCJhcnJheVwiXG4gICAgfCBcImFycmF5LWltYWdlc1wiXG4gICAgfCBcImpzb24tc29uYW11ZmlsZVwiXG4gICAgfCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXG4gICAgfCBcIm9iamVjdFwiXG4gICAgfCBcIm9iamVjdC1waWNrXCJcbiAgICB8IFwicmVjb3JkXCJcbiAgICB8IFwidmVjdG9yXCI7XG4gIHpvZFR5cGU6IHouWm9kVHlwZUFueTtcbiAgZWxlbWVudD86IFJlbmRlcmluZ05vZGU7XG4gIGNoaWxkcmVuPzogUmVuZGVyaW5nTm9kZVtdO1xuICBjb25maWc/OiB7XG4gICAgcGlja2VkOiBzdHJpbmc7XG4gIH07XG4gIG9wdGlvbmFsPzogYm9vbGVhbjtcbiAgbnVsbGFibGU/OiBib29sZWFuO1xufTtcblxuY29uc3QgR2VuZXJhdGVkQ29sdW1uU2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmVudW0oW1wiU1RPUkVEXCIsIFwiVklSVFVBTFwiXSksXG4gIGV4cHJlc3Npb246IHouc3RyaW5nKCksXG59KTtcblxuLyoqXG4gKiBDb25lIOyKpO2CpOuniCDqsoDspp1cbiAqXG4gKiBjb25lIOuplO2DgOuNsOydtO2EsOydmCDsnKDtmqjshLHsnYQg6rKA7Kad7ZWp64uI64ukLlxuICovXG5jb25zdCBDb25lU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBub3RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgdGFnczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIGZpeHR1cmVHZW5lcmF0b3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBmaXh0dXJlRGVmYXVsdDogei51bmtub3duKCkub3B0aW9uYWwoKSxcbiAgICBmaXh0dXJlU3RyYXRlZ3k6IHoubGl0ZXJhbChcInNlcXVlbmNlXCIpLm9wdGlvbmFsKCksXG4gICAgZGF0YVNvdXJjZTogelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIHN0cmF0ZWd5OiB6LmVudW0oW1wic2FtcGxlXCIsIFwiaWRzXCIsIFwicXVlcnlcIiwgXCJmaWxlXCIsIFwicmVjZW50XCIsIFwicmFuZG9tXCJdKSxcbiAgICAgICAgY29uZmlnOiB6LnVua25vd24oKS5vcHRpb25hbCgpLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb25hbCgpLFxuICB9KVxuICAuY2F0Y2hhbGwoei51bmtub3duKCkpOyAvLyDsgqzsmqnsnpAg7KCV7J2YIOuplO2DgOuNsOydtO2EsCDtl4jsmqlcblxuY29uc3QgQmFzZVByb3BGaWVsZHMgPSB7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2M6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbnVsbGFibGU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHRvRmlsdGVyOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKS5vcHRpb25hbCgpLFxuICBkYkRlZmF1bHQ6IHoudW5pb24oW3ouc3RyaW5nKCksIHoubnVtYmVyKCksIHouYm9vbGVhbigpXSkub3B0aW9uYWwoKSxcbiAgZ2VuZXJhdGVkOiBHZW5lcmF0ZWRDb2x1bW5TY2hlbWEub3B0aW9uYWwoKSxcbiAgY29uZTogQ29uZVNjaGVtYS5vcHRpb25hbCgpLFxufTtcblxuLy8g67aA6rCAIO2VhOuTnOqwgCDtlYTsmpTsl4bripQgcHJvcFxuY29uc3QgQmFzZVByb3BGaWVsZHNXaXRob3V0QWRkaXRpb25hbCA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei51bmlvbihbXG4gICAgICB6LmxpdGVyYWwoXCJpbnRlZ2VyXCIpLFxuICAgICAgei5saXRlcmFsKFwiaW50ZWdlcltdXCIpLFxuICAgICAgei5saXRlcmFsKFwiYmlnSW50ZWdlclwiKSxcbiAgICAgIHoubGl0ZXJhbChcImJpZ0ludGVnZXJbXVwiKSxcbiAgICAgIHoubGl0ZXJhbChcImJvb2xlYW5cIiksXG4gICAgICB6LmxpdGVyYWwoXCJib29sZWFuW11cIiksXG4gICAgICB6LmxpdGVyYWwoXCJ1dWlkXCIpLFxuICAgICAgei5saXRlcmFsKFwidXVpZFtdXCIpLFxuICAgICAgei5saXRlcmFsKFwidHN2ZWN0b3JcIiksXG4gICAgXSksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuLy8gcHJlY2lzaW9uL3NjYWxlIO2VhOuTnFxuY29uc3QgUHJlY2lzaW9uU2NhbGVGaWVsZHMgPSB7XG4gIHByZWNpc2lvbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBzY2FsZTogei5udW1iZXIoKS5vcHRpb25hbCgpLFxufTtcblxuLy8g6rCBIO2DgOyeheuzhCDsiqTtgqTrp4gg7KCV7J2YXG5cbmNvbnN0IFN0cmluZ1Byb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcInN0cmluZ1wiKSxcbiAgICBsZW5ndGg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICB6b2RGb3JtYXQ6IFpvZFN0cmluZ0Zvcm1hdC5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5jb25zdCBTdHJpbmdBcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcInN0cmluZ1tdXCIpLFxuICAgIGxlbmd0aDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIHpvZEZvcm1hdDogWm9kU3RyaW5nRm9ybWF0Lm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgRW51bVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImVudW1cIiksXG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAgbGVuZ3RoOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IEVudW1BcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImVudW1bXVwiKSxcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBOdW1iZXJQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1iZXJcIiksXG4gICAgLi4uUHJlY2lzaW9uU2NhbGVGaWVsZHMsXG4gICAgbnVtYmVyVHlwZTogei5lbnVtKFtcInJlYWxcIiwgXCJkb3VibGUgcHJlY2lzaW9uXCIsIFwibnVtZXJpY1wiXSkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuY29uc3QgTnVtYmVyQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1iZXJbXVwiKSxcbiAgICAuLi5QcmVjaXNpb25TY2FsZUZpZWxkcyxcbiAgICBudW1iZXJUeXBlOiB6LmVudW0oW1wicmVhbFwiLCBcImRvdWJsZSBwcmVjaXNpb25cIiwgXCJudW1lcmljXCJdKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IERhdGVQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJkYXRlXCIpLFxuICAgIHByZWNpc2lvbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5jb25zdCBEYXRlQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJkYXRlW11cIiksXG4gICAgcHJlY2lzaW9uOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgTnVtZXJpY1Byb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcIm51bWVyaWNcIiksXG4gICAgLi4uUHJlY2lzaW9uU2NhbGVGaWVsZHMsXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IE51bWVyaWNBcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcIm51bWVyaWNbXVwiKSxcbiAgICAuLi5QcmVjaXNpb25TY2FsZUZpZWxkcyxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBKc29uUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwianNvblwiKSxcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBWaXJ0dWFsUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwidmlydHVhbFwiKSxcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgICB2aXJ0dWFsVHlwZTogei5lbnVtKFtcInF1ZXJ5XCIsIFwiY29kZVwiXSkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBWZWN0b3JQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ2ZWN0b3JcIiksXG4gICAgZGltZW5zaW9uczogei5udW1iZXIoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuY29uc3QgVmVjdG9yQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ2ZWN0b3JbXVwiKSxcbiAgICBkaW1lbnNpb25zOiB6Lm51bWJlcigpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbi8vIFJlbGF0aW9uIO2DgOyeheydgCByZWxhdGlvblR5cGXsl5Ag65Sw6528IOyEuOu2hO2ZlFxuY29uc3QgQmFzZVJlbGF0aW9uRmllbGRzID0ge1xuICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgdHlwZTogei5saXRlcmFsKFwicmVsYXRpb25cIiksXG4gIHdpdGg6IHouc3RyaW5nKCksXG59O1xuXG4vLyBSZWxhdGlvbk9uIO2DgOyehVxuY29uc3QgUmVsYXRpb25PblNjaGVtYSA9IHouZW51bShbXCJDQVNDQURFXCIsIFwiU0VUIE5VTExcIiwgXCJOTyBBQ1RJT05cIiwgXCJTRVQgREVGQVVMVFwiLCBcIlJFU1RSSUNUXCJdKTtcblxuY29uc3QgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUmVsYXRpb25GaWVsZHMsXG4gICAgcmVsYXRpb25UeXBlOiB6LmxpdGVyYWwoXCJCZWxvbmdzVG9PbmVcIiksXG4gICAgY3VzdG9tSm9pbkNsYXVzZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHVzZUNvbnN0cmFpbnQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgb25VcGRhdGU6IFJlbGF0aW9uT25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBvbkRlbGV0ZTogUmVsYXRpb25PblNjaGVtYS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IEhhc01hbnlSZWxhdGlvblByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VSZWxhdGlvbkZpZWxkcyxcbiAgICByZWxhdGlvblR5cGU6IHoubGl0ZXJhbChcIkhhc01hbnlcIiksXG4gICAgam9pbkNvbHVtbjogei5zdHJpbmcoKSxcbiAgICBmcm9tQ29sdW1uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgTWFueVRvTWFueVJlbGF0aW9uUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVJlbGF0aW9uRmllbGRzLFxuICAgIHJlbGF0aW9uVHlwZTogei5saXRlcmFsKFwiTWFueVRvTWFueVwiKSxcbiAgICBqb2luVGFibGU6IHouc3RyaW5nKCksXG4gICAgb25VcGRhdGU6IFJlbGF0aW9uT25TY2hlbWEsXG4gICAgb25EZWxldGU6IFJlbGF0aW9uT25TY2hlbWEsXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgT25lVG9PbmVSZWxhdGlvblByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VSZWxhdGlvbkZpZWxkcyxcbiAgICByZWxhdGlvblR5cGU6IHoubGl0ZXJhbChcIk9uZVRvT25lXCIpLFxuICAgIGN1c3RvbUpvaW5DbGF1c2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBoYXNKb2luQ29sdW1uOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIHVzZUNvbnN0cmFpbnQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgb25VcGRhdGU6IFJlbGF0aW9uT25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBvbkRlbGV0ZTogUmVsYXRpb25PblNjaGVtYS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFJlbGF0aW9uVHlwZXMgPSBbXCJCZWxvbmdzVG9PbmVcIiwgXCJIYXNNYW55XCIsIFwiTWFueVRvTWFueVwiLCBcIk9uZVRvT25lXCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IFJlbGF0aW9uUHJvcFNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFxuICBcInJlbGF0aW9uVHlwZVwiLFxuICBbXG4gICAgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wU2NoZW1hLFxuICAgIEhhc01hbnlSZWxhdGlvblByb3BTY2hlbWEsXG4gICAgTWFueVRvTWFueVJlbGF0aW9uUHJvcFNjaGVtYSxcbiAgICBPbmVUb09uZVJlbGF0aW9uUHJvcFNjaGVtYSxcbiAgXSxcbiAge1xuICAgIGVycm9yOiAoaXNzKSA9PlxuICAgICAgYHJlbGF0aW9uVHlwZeydgCAke1JlbGF0aW9uVHlwZXMubWFwKCh0KSA9PiBgJyR7dH0nYCkuam9pbihcIiwgXCIpfSDspJEg7ZWY64KY7Jes7JW8IO2VqeuLiOuLpC4g7J6F66Cl6rCSOiBcIiR7KGlzcy5pbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LnJlbGF0aW9uVHlwZX1cImAsXG4gIH0sXG4pO1xuXG5jb25zdCBOb3JtYWxQcm9wVHlwZXMgPSBbXG4gIFwiaW50ZWdlclwiLFxuICBcImludGVnZXJbXVwiLFxuICBcImJpZ0ludGVnZXJcIixcbiAgXCJiaWdJbnRlZ2VyW11cIixcbiAgXCJzdHJpbmdcIixcbiAgXCJzdHJpbmdbXVwiLFxuICBcImVudW1cIixcbiAgXCJlbnVtW11cIixcbiAgXCJudW1iZXJcIixcbiAgXCJudW1iZXJbXVwiLFxuICBcIm51bWVyaWNcIixcbiAgXCJudW1lcmljW11cIixcbiAgXCJib29sZWFuXCIsXG4gIFwiYm9vbGVhbltdXCIsXG4gIFwiZGF0ZVwiLFxuICBcImRhdGVbXVwiLFxuICBcInV1aWRcIixcbiAgXCJ1dWlkW11cIixcbiAgXCJqc29uXCIsXG4gIFwidmlydHVhbFwiLFxuICBcInZlY3RvclwiLFxuICBcInZlY3RvcltdXCIsXG4gIFwidHN2ZWN0b3JcIixcbl0gYXMgY29uc3Q7XG5cbi8vIFZJUlRVQUwgR2VuZXJhdGVkIENvbHVtbuyXkOyEnCDsgqzsmqkg67aI6rCA64ql7ZWcIO2DgOyeheuTpFxuY29uc3QgVmlydHVhbEdlbmVyYXRlZERpc2FsbG93ZWRUeXBlcyA9IFtcbiAgXCJqc29uXCIsXG4gIFwidmVjdG9yXCIsXG4gIFwidmVjdG9yW11cIixcbiAgXCJzdHJpbmdbXVwiLFxuICBcImludGVnZXJbXVwiLFxuICBcImJpZ0ludGVnZXJbXVwiLFxuICBcImJvb2xlYW5bXVwiLFxuICBcImRhdGVbXVwiLFxuICBcInV1aWRbXVwiLFxuICBcIm51bWJlcltdXCIsXG4gIFwibnVtZXJpY1tdXCIsXG4gIFwiZW51bVtdXCIsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgTm9ybWFsUHJvcFNjaGVtYSA9IHpcbiAgLmRpc2NyaW1pbmF0ZWRVbmlvbihcbiAgICBcInR5cGVcIixcbiAgICBbXG4gICAgICBCYXNlUHJvcEZpZWxkc1dpdGhvdXRBZGRpdGlvbmFsLFxuICAgICAgU3RyaW5nUHJvcFNjaGVtYSxcbiAgICAgIFN0cmluZ0FycmF5UHJvcFNjaGVtYSxcbiAgICAgIEVudW1Qcm9wU2NoZW1hLFxuICAgICAgRW51bUFycmF5UHJvcFNjaGVtYSxcbiAgICAgIE51bWJlclByb3BTY2hlbWEsXG4gICAgICBOdW1iZXJBcnJheVByb3BTY2hlbWEsXG4gICAgICBEYXRlUHJvcFNjaGVtYSxcbiAgICAgIERhdGVBcnJheVByb3BTY2hlbWEsXG4gICAgICBOdW1lcmljUHJvcFNjaGVtYSxcbiAgICAgIE51bWVyaWNBcnJheVByb3BTY2hlbWEsXG4gICAgICBKc29uUHJvcFNjaGVtYSxcbiAgICAgIFZpcnR1YWxQcm9wU2NoZW1hLFxuICAgICAgVmVjdG9yUHJvcFNjaGVtYSxcbiAgICAgIFZlY3RvckFycmF5UHJvcFNjaGVtYSxcbiAgICBdLFxuICAgIHtcbiAgICAgIGVycm9yOiAoaXNzKSA9PlxuICAgICAgICBgdHlwZeydgCAke05vcm1hbFByb3BUeXBlcy5tYXAoKHQpID0+IGAnJHt0fSdgKS5qb2luKFwiLCBcIil9IOykkSDtlZjrgpjsl6zslbwg7ZWp64uI64ukLiDsnoXroKXqsJI6IFwiJHsoaXNzLmlucHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KT8udHlwZX1cImAsXG4gICAgfSxcbiAgKVxuICAuc3VwZXJSZWZpbmUoKGRhdGEsIGN0eCkgPT4ge1xuICAgIGlmICghZGF0YS5nZW5lcmF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBkYkRlZmF1bHTsmYAgZ2VuZXJhdGVkIOuPmeyLnCDsgqzsmqkg67aI6rCAXG4gICAgaWYgKGRhdGEuZGJEZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgIGNvZGU6IFwiY3VzdG9tXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiZGJEZWZhdWx07JmAIGdlbmVyYXRlZOuKlCDtlajqu5gg7IKs7Jqp7ZWgIOyImCDsl4bsirXri4jri6RcIixcbiAgICAgICAgcGF0aDogW1wiZ2VuZXJhdGVkXCJdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gdmlydHVhbCDtg4DsnoXsnYAgZ2VuZXJhdGVkIOu2iOqwgFxuICAgIGlmIChkYXRhLnR5cGUgPT09IFwidmlydHVhbFwiKSB7XG4gICAgICBjdHguYWRkSXNzdWUoe1xuICAgICAgICBjb2RlOiBcImN1c3RvbVwiLFxuICAgICAgICBtZXNzYWdlOiBcInZpcnR1YWwg7YOA7J6F7J2AIGdlbmVyYXRlZCBjb2x1bW7snYQg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpFwiLFxuICAgICAgICBwYXRoOiBbXCJnZW5lcmF0ZWRcIl0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBWSVJUVUFMIEdlbmVyYXRlZCBDb2x1bW4g7YOA7J6FIOygnO2VnCDqsoDspp1cbiAgICBpZiAoZGF0YS5nZW5lcmF0ZWQudHlwZSA9PT0gXCJWSVJUVUFMXCIpIHtcbiAgICAgIGlmICgoVmlydHVhbEdlbmVyYXRlZERpc2FsbG93ZWRUeXBlcyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMoZGF0YS50eXBlKSkge1xuICAgICAgICBjdHguYWRkSXNzdWUoe1xuICAgICAgICAgIGNvZGU6IFwiY3VzdG9tXCIsXG4gICAgICAgICAgbWVzc2FnZTogYFZJUlRVQUwgZ2VuZXJhdGVkIGNvbHVtbuydgCAke2RhdGEudHlwZX0g7YOA7J6F7J2EIOyngOybkO2VmOyngCDslYrsirXri4jri6QuIFNUT1JFROulvCDsgqzsmqntlZjshLjsmpQuYCxcbiAgICAgICAgICBwYXRoOiBbXCJnZW5lcmF0ZWRcIiwgXCJ0eXBlXCJdLFxuICAgICAgICAgIGZhdGFsOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG5jb25zdCBBbGxQcm9wVHlwZXMgPSBbLi4uTm9ybWFsUHJvcFR5cGVzLCBcInJlbGF0aW9uXCJdIGFzIGNvbnN0O1xuY29uc3QgRW50aXR5UHJvcFNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbTm9ybWFsUHJvcFNjaGVtYSwgUmVsYXRpb25Qcm9wU2NoZW1hXSwge1xuICBlcnJvcjogKGlzcykgPT5cbiAgICBgdHlwZeydgCAke0FsbFByb3BUeXBlcy5tYXAoKHQpID0+IGAnJHt0fSdgKS5qb2luKFwiLCBcIil9IOykkSDtlZjrgpjsl6zslbwg7ZWp64uI64ukLiDsnoXroKXqsJI6IFwiJHsoaXNzLmlucHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KT8udHlwZX1cImAsXG59KTtcblxuY29uc3QgRW50aXR5SW5kZXhDb2x1bW5TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIG51bGxzRmlyc3Q6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHNvcnRPcmRlcjogei5lbnVtKFtcIkFTQ1wiLCBcIkRFU0NcIl0pLm9wdGlvbmFsKCksXG4gIHZlY3Rvck9wczogei5lbnVtKFtcInZlY3Rvcl9jb3NpbmVfb3BzXCIsIFwidmVjdG9yX2lwX29wc1wiLCBcInZlY3Rvcl9sMl9vcHNcIl0pLm9wdGlvbmFsKCksXG59KTtcblxuLy8gRW50aXR5SW5kZXgg7Iqk7YKk66eIIOygleydmFxuY29uc3QgRW50aXR5SW5kZXhTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHR5cGU6IHouZW51bShbXCJpbmRleFwiLCBcInVuaXF1ZVwiLCBcImhuc3dcIiwgXCJpdmZmbGF0XCJdKSxcbiAgICBjb2x1bW5zOiB6LmFycmF5KEVudGl0eUluZGV4Q29sdW1uU2NoZW1hKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm1pbigxKS5tYXgoNjMpLFxuICAgIHVzaW5nOiB6LmVudW0oW1wiYnRyZWVcIiwgXCJoYXNoXCIsIFwiZ2luXCIsIFwiZ2lzdFwiLCBcInBncm9vbmdhXCJdKS5vcHRpb25hbCgpLFxuICAgIG51bGxzTm90RGlzdGluY3Q6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgbTogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGVmQ29uc3RydWN0aW9uOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgbGlzdHM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG4vKipcbiAqIFN1YnNldERlZiDsiqTtgqTrp4hcbiAqXG4gKiDtlZjsnIQg7Zi47ZmY7ISx7J2EIOychO2VtCDrsLDsl7Qg7ZiV7YOc7JmAIOqwneyytCDtmJXtg5wg65GYIOuLpCDsp4Dsm5Dtlanri4jri6QuXG4gKi9cbmNvbnN0IFN1YnNldERlZlNjaGVtYSA9IHoudW5pb24oW1xuICAvLyDquLDsobQg67Cw7Je0IO2Yle2DnFxuICB6LmFycmF5KHoudW5pb24oW3ouc3RyaW5nKCksIHoub2JqZWN0KHsgZmllbGQ6IHouc3RyaW5nKCksIGludGVybmFsOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpIH0pXSkpLFxuICAvLyDsg4jroZzsmrQg6rCd7LK0IO2Yle2DnFxuICB6Lm9iamVjdCh7XG4gICAgZmllbGRzOiB6LmFycmF5KFxuICAgICAgei51bmlvbihbei5zdHJpbmcoKSwgei5vYmplY3QoeyBmaWVsZDogei5zdHJpbmcoKSwgaW50ZXJuYWw6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkgfSldKSxcbiAgICApLFxuICAgIGNvbmU6IENvbmVTY2hlbWEub3B0aW9uYWwoKSxcbiAgfSksXG5dKTtcblxuLyoqXG4gKiBFbnVtRGVmIOyKpO2CpOuniFxuICpcbiAqIO2VmOychCDtmLjtmZjshLHsnYQg7JyE7ZW0IFJlY29yZCDtmJXtg5zsmYAg6rCd7LK0IO2Yle2DnCDrkZgg64ukIOyngOybkO2VqeuLiOuLpC5cbiAqL1xuY29uc3QgRW51bURlZlNjaGVtYSA9IHoudW5pb24oW1xuICAvLyDquLDsobQgUmVjb3JkIO2Yle2DnFxuICB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKSxcbiAgLy8g7IOI66Gc7Jq0IOqwneyytCDtmJXtg5xcbiAgei5vYmplY3Qoe1xuICAgIHZhbHVlczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSksXG4gICAgY29uZTogQ29uZVNjaGVtYS5vcHRpb25hbCgpLFxuICB9KSxcbl0pO1xuXG5leHBvcnQgY29uc3QgRW50aXR5SnNvblNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJQYXNjYWxDYXNl66GcIOuQnCBFbnRpdHkgSURcIiksXG4gICAgdGl0bGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJFbnRpdHkg7J2066aEXCIpLFxuICAgIHRhYmxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwic25ha2VfY2FzZeuhnCDrkJwg7YWM7J2067iU66qFXCIpLFxuICAgIHBhcmVudElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCLrtoDrqqggRW50aXR5IElEXCIpLFxuICAgIGNvbmU6IENvbmVTY2hlbWEub3B0aW9uYWwoKSxcbiAgICBwcm9wczogei5hcnJheShFbnRpdHlQcm9wU2NoZW1hKSxcbiAgICBpbmRleGVzOiB6LmFycmF5KEVudGl0eUluZGV4U2NoZW1hKSxcbiAgICBzdWJzZXRzOiB6LnJlY29yZCh6LnN0cmluZygpLCBTdWJzZXREZWZTY2hlbWEpLFxuICAgIGVudW1zOiB6LnJlY29yZCh6LnN0cmluZygpLCBFbnVtRGVmU2NoZW1hKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5leHBvcnQgY29uc3QgVGVtcGxhdGVPcHRpb25zID0gei5vYmplY3Qoe1xuICBlbnRpdHk6IEVudGl0eUpzb25TY2hlbWEub21pdCh7IGlkOiB0cnVlIH0pXG4gICAgLmV4dGVuZCh7XG4gICAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICB9KVxuICAgIC5wYXJ0aWFsKHtcbiAgICAgIHRhYmxlOiB0cnVlLFxuICAgICAgcHJvcHM6IHRydWUsXG4gICAgICBpbmRleGVzOiB0cnVlLFxuICAgICAgc3Vic2V0czogdHJ1ZSxcbiAgICAgIGVudW1zOiB0cnVlLFxuICAgIH0pLFxuICBpbml0X3R5cGVzOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBnZW5lcmF0ZWQ6IHoub2JqZWN0KHt9KSxcbiAgZ2VuZXJhdGVkX3Nzbzogei5vYmplY3Qoe30pLFxuICBnZW5lcmF0ZWRfaHR0cDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgbW9kZWw6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICBkZWZhdWx0U2VhcmNoRmllbGQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkZWZhdWx0T3JkZXJCeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSxcbiAgbW9kZWxfdGVzdDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgYnJpZGdlOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBzZXJ2aWNlczogei5vYmplY3Qoe30pLFxuICB2aWV3X2xpc3Q6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICBleHRyYTogei51bmtub3duKCksXG4gIH0pLFxuICB2aWV3X2xpc3RfY29sdW1uczogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICAgIGNvbHVtbnM6IHpcbiAgICAgIC5vYmplY3Qoe1xuICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgICBsYWJlbDogei5zdHJpbmcoKSxcbiAgICAgICAgdGM6IHouc3RyaW5nKCksXG4gICAgICB9KVxuICAgICAgLmFycmF5KCksXG4gICAgY29sdW1uSW1wb3J0czogei5zdHJpbmcoKSxcbiAgfSksXG4gIHZpZXdfc2VhcmNoX2lucHV0OiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X2Zvcm06IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHZpZXdfaWRfYWxsX3NlbGVjdDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgdmlld19lbnVtc19idXR0b25zZXQ6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICBlbnVtSWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBxdWVyaWVzOiB6Lm9iamVjdCh7fSksXG4gIGVudHJ5X3NlcnZlcjogei5vYmplY3Qoe30pLFxuICBzZDogei5vYmplY3Qoe1xuICAgIHRhcmdldDogei5lbnVtKFtcImFwaVwiLCBcIndlYlwiLCBcImFwcFwiXSksXG4gIH0pLFxufSk7XG5leHBvcnQgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBUZW1wbGF0ZU9wdGlvbnM+O1xuXG5leHBvcnQgY29uc3QgVGVtcGxhdGVLZXkgPSB6LmVudW0oW1xuICBcImVudGl0eVwiLFxuICBcImluaXRfdHlwZXNcIixcbiAgXCJnZW5lcmF0ZWRcIixcbiAgXCJnZW5lcmF0ZWRfc3NvXCIsXG4gIFwiZ2VuZXJhdGVkX2h0dHBcIixcbiAgXCJtb2RlbFwiLFxuICBcIm1vZGVsX3Rlc3RcIixcbiAgXCJicmlkZ2VcIixcbiAgXCJzZXJ2aWNlc1wiLFxuICBcInZpZXdfbGlzdFwiLFxuICBcInZpZXdfbGlzdF9jb2x1bW5zXCIsXG4gIFwidmlld19zZWFyY2hfaW5wdXRcIixcbiAgXCJ2aWV3X2Zvcm1cIixcbiAgXCJ2aWV3X2lkX2FsbF9zZWxlY3RcIixcbiAgXCJ2aWV3X2VudW1zX2J1dHRvbnNldFwiLFxuICBcInF1ZXJpZXNcIixcbiAgXCJlbnRyeV9zZXJ2ZXJcIixcbiAgXCJzZFwiLFxuXSk7XG5leHBvcnQgdHlwZSBUZW1wbGF0ZUtleSA9IHouaW5mZXI8dHlwZW9mIFRlbXBsYXRlS2V5PjtcblxuZXhwb3J0IGNvbnN0IEdlbmVyYXRlT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgb3ZlcndyaXRlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBHZW5lcmF0ZU9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBHZW5lcmF0ZU9wdGlvbnM+O1xuXG5leHBvcnQgY29uc3QgUGF0aEFuZENvZGUgPSB6Lm9iamVjdCh7XG4gIHBhdGg6IHouc3RyaW5nKCksXG4gIGNvZGU6IHouc3RyaW5nKCksXG59KTtcbmV4cG9ydCB0eXBlIFBhdGhBbmRDb2RlID0gei5pbmZlcjx0eXBlb2YgUGF0aEFuZENvZGU+O1xuXG5leHBvcnQgdHlwZSBGaXh0dXJlU2VhcmNoT3B0aW9ucyA9IHtcbiAgZW50aXR5SWQ6IHN0cmluZztcbiAgZmllbGQ6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgc2VhcmNoVHlwZTogXCJlcXVhbHNcIiB8IFwibGlrZVwiO1xufTtcblxudHlwZSBDb2x1bW5WYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBEYXRlIHwgbnVsbDtcbmV4cG9ydCB0eXBlIEZpeHR1cmVSZWNvcmQgPSB7XG4gIGZpeHR1cmVJZDogc3RyaW5nO1xuICBlbnRpdHlJZDogc3RyaW5nO1xuICBpZDogbnVtYmVyIHwgc3RyaW5nO1xuICBjb2x1bW5zOiB7XG4gICAgW2tleTogc3RyaW5nXToge1xuICAgICAgcHJvcDogRW50aXR5UHJvcDtcbiAgICAgIHZhbHVlOiBDb2x1bW5WYWx1ZSB8IENvbHVtblZhbHVlW107XG4gICAgfTtcbiAgfTtcbiAgZmV0Y2hlZFJlY29yZHM6IHN0cmluZ1tdO1xuICBiZWxvbmdzUmVjb3Jkczogc3RyaW5nW107XG4gIHRhcmdldD86IEZpeHR1cmVSZWNvcmQ7IC8vIEltcG9ydCDrjIDsg4EgREIg66CI7L2U65OcKGlk6rCAIOqwmeydgClcbiAgdW5pcXVlPzogRml4dHVyZVJlY29yZDsgLy8gSW1wb3J0IOuMgOyDgSBEQiDroIjsvZTrk5wodW5pcXVlIGtleeqwgCDqsJnsnYApXG4gIG92ZXJyaWRlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEZpeHR1cmVJbXBvcnRSZXN1bHQgPSB7XG4gIGVudGl0eUlkOiBzdHJpbmc7XG4gIGRhdGE6IHtcbiAgICBba2V5OiBzdHJpbmddOiBDb2x1bW5WYWx1ZTtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uTm9kZSA9IHtcbiAgZml4dHVyZUlkOiBzdHJpbmc7XG4gIGVudGl0eUlkOiBzdHJpbmc7XG4gIHJlbGF0ZWQ6IFNldDxzdHJpbmc+O1xufTtcblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0VtcHR5SW50ZXJmYWNlOiBzb25hbXUuZ2VuZXJhdGVkLnNzbyDsl5DshJwg7ZmV7J6l7J2EIOychO2VtCDspIDruYTrkJwg67mIIOyduO2EsO2OmOydtOyKpFxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZVNjaGVtYUV4dGVuZCB7fVxuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0VtcHR5SW50ZXJmYWNlOiBzb25hbXUuZ2VuZXJhdGVkLnNzbyDsl5DshJwg7ZmV7J6l7J2EIOychO2VtCDspIDruYTrkJwg67mIIOyduO2EsO2OmOydtOyKpFxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZUZvcmVpZ25LZXlzIHt9XG5leHBvcnQgdHlwZSBNYW55VG9NYW55QmFzZVNjaGVtYTxcbiAgRnJvbUlkS2V5IGV4dGVuZHMgc3RyaW5nLFxuICBUb0lkS2V5IGV4dGVuZHMgc3RyaW5nLFxuICBGcm9tUGtUeXBlID0gbnVtYmVyLFxuICBUb1BrVHlwZSA9IG51bWJlcixcbj4gPSB7XG4gIGlkOiBudW1iZXI7XG59ICYge1xuICBbSyBpbiBgJHtGcm9tSWRLZXl9X2lkYF06IEZyb21Qa1R5cGU7XG59ICYge1xuICBbSyBpbiBgJHtUb0lkS2V5fV9pZGBdOiBUb1BrVHlwZTtcbn07XG5cbi8vIOqwneyytCwg7ZWo7IiYLCDruYTrj5nquLAg7ZWo7IiY66W8IOuqqOuRkCDtj6zqtITtlZjripQg7YOA7J6FXG5leHBvcnQgdHlwZSBFeGVjdXRhYmxlPFQ+ID0gVCB8IFByb21pc2U8VD4gfCAoKCkgPT4gVCkgfCAoKCkgPT4gUHJvbWlzZTxUPik7XG5cbmV4cG9ydCB0eXBlIFNvbmFtdUZhc3RpZnlDb25maWcgPSB7XG4gIGNvbnRleHRQcm92aWRlcjogKFxuICAgIGRlZmF1bHRDb250ZXh0OiBQaWNrPFxuICAgICAgQ29udGV4dCxcbiAgICAgIFwicmVxdWVzdFwiIHwgXCJyZXBseVwiIHwgXCJoZWFkZXJzXCIgfCBcImNyZWF0ZVNTRVwiIHwgXCJuYWl0ZVN0b3JlXCIgfCBcImxvY2FsZVwiIHwgXCJ1c2VyXCIgfCBcInNlc3Npb25cIlxuICAgID4sXG4gICAgcmVxdWVzdDogRmFzdGlmeVJlcXVlc3QsXG4gICAgcmVwbHk6IEZhc3RpZnlSZXBseSxcbiAgKSA9PiBDb250ZXh0IHwgUHJvbWlzZTxDb250ZXh0PjtcbiAgZ3VhcmRIYW5kbGVyOiAoXG4gICAgZ3VhcmQ6IEd1YXJkS2V5LFxuICAgIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LFxuICAgIGFwaToge1xuICAgICAgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXTtcbiAgICAgIHBhcmFtZXRlcnM6IEFwaVBhcmFtW107XG4gICAgICByZXR1cm5UeXBlOiBBcGlQYXJhbVR5cGU7XG4gICAgICBtb2RlbE5hbWU6IHN0cmluZztcbiAgICAgIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICAgIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gICAgfSxcbiAgKSA9PiB2b2lkO1xuICAvKipcbiAgICog7KCE7JetIENhY2hlLUNvbnRyb2wg7ZW465Ok65+s7J6F64uI64ukLlxuICAgKiDsmpTssq0g7YOA7J6FKGFwaSwgYXNzZXRzLCBzc3IsIGNzcinsl5Ag65Sw6528IENhY2hlLUNvbnRyb2wg7ISk7KCV7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAgICogdW5kZWZpbmVk66W8IOuwmO2ZmO2VmOuptCDtg4DsnoXrs4Qg6riw67O46rCS7J20IOyggeyaqeuQqeuLiOuLpC5cbiAgICovXG4gIGNhY2hlQ29udHJvbEhhbmRsZXI/OiBDYWNoZUNvbnRyb2xIYW5kbGVyO1xufTtcbiJdLCJuYW1lcyI6WyJ6IiwiekFycmF5YWJsZSIsInNoYXBlIiwidW5pb24iLCJhcnJheSIsImdldERlc2NyaXB0aW9uIiwiaXRlbSIsImNvbmUiLCJub3RlIiwiZGVzYyIsIlpvZFN0cmluZ0Zvcm1hdCIsImVudW0iLCJTb25hbXVGaWxlU2NoZW1hIiwib2JqZWN0IiwibmFtZSIsInN0cmluZyIsInVybCIsIm1pbWVfdHlwZSIsInNpemUiLCJudW1iZXIiLCJkZXNjcmliZSIsIlNvbmFtdUZpbGVBcnJheVNjaGVtYSIsIkJVSUxUX0lOX1RZUEVfSURTIiwibm9ybWFsaXplU3Vic2V0RmllbGQiLCJmIiwiZmllbGQiLCJpc0ludGVybmFsU3Vic2V0RmllbGQiLCJpbnRlcm5hbCIsImlzU3Vic2V0RGVmV2l0aENvbmUiLCJkZWYiLCJBcnJheSIsImlzQXJyYXkiLCJpc0VudW1EZWZXaXRoQ29uZSIsInVuZGVmaW5lZCIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJnZXRTdWJzZXRGaWVsZHMiLCJmaWVsZHMiLCJnZXRFbnVtRGVmVmFsdWVzIiwidmFsdWVzIiwiaXNJbnRlZ2VyU2luZ2xlUHJvcCIsInAiLCJ0eXBlIiwiaXNJbnRlZ2VyQXJyYXlQcm9wIiwiaXNJbnRlZ2VyUHJvcCIsImlzQmlnSW50ZWdlclNpbmdsZVByb3AiLCJpc0JpZ0ludGVnZXJBcnJheVByb3AiLCJpc0JpZ0ludGVnZXJQcm9wIiwiaXNTdHJpbmdTaW5nbGVQcm9wIiwiaXNTdHJpbmdBcnJheVByb3AiLCJpc1N0cmluZ1Byb3AiLCJpc0VudW1TaW5nbGVQcm9wIiwiaXNFbnVtQXJyYXlQcm9wIiwiaXNFbnVtUHJvcCIsImlzTnVtYmVyU2luZ2xlUHJvcCIsImlzTnVtYmVyQXJyYXlQcm9wIiwiaXNOdW1iZXJQcm9wIiwiaXNOdW1lcmljU2luZ2xlUHJvcCIsImlzTnVtZXJpY0FycmF5UHJvcCIsImlzTnVtZXJpY1Byb3AiLCJpc0Jvb2xlYW5TaW5nbGVQcm9wIiwiaXNCb29sZWFuQXJyYXlQcm9wIiwiaXNCb29sZWFuUHJvcCIsImlzRGF0ZVNpbmdsZVByb3AiLCJpc0RhdGVBcnJheVByb3AiLCJpc0RhdGVQcm9wIiwiaXNVdWlkU2luZ2xlUHJvcCIsImlzVXVpZEFycmF5UHJvcCIsImlzVXVpZFByb3AiLCJpc0pzb25Qcm9wIiwiaXNWaXJ0dWFsUHJvcCIsImlzVmlydHVhbENvZGVQcm9wIiwidmlydHVhbFR5cGUiLCJpc1ZpcnR1YWxRdWVyeVByb3AiLCJpc1ZlY3RvclNpbmdsZVByb3AiLCJpc1ZlY3RvckFycmF5UHJvcCIsImlzVmVjdG9yUHJvcCIsImlzVHNWZWN0b3JQcm9wIiwiaXNSZWxhdGlvblByb3AiLCJpc09uZVRvT25lUmVsYXRpb25Qcm9wIiwicmVsYXRpb25UeXBlIiwiaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AiLCJpc0hhc01hbnlSZWxhdGlvblByb3AiLCJpc01hbnlUb01hbnlSZWxhdGlvblByb3AiLCJpc0N1c3RvbUpvaW5DbGF1c2UiLCJjdXN0b20iLCJTb25hbXVRdWVyeU1vZGUiLCJTb25hbXVTZW1hbnRpY1BhcmFtcyIsInNlbWFudGljUXVlcnkiLCJlbWJlZGRpbmciLCJtaW4iLCJtYXgiLCJ0aHJlc2hvbGQiLCJvcHRpb25hbCIsIm1ldGhvZCIsImlzS25leEVycm9yIiwiZSIsImNvZGUiLCJzcWxNZXNzYWdlIiwic3FsU3RhdGUiLCJBcGlQYXJhbVR5cGUiLCJpc09iamVjdCIsInYiLCJ0IiwiaXNVbmlvbiIsImlzSW50ZXJzZWN0aW9uIiwiaXNTdHJpbmdMaXRlcmFsIiwiaXNOdW1lcmljTGl0ZXJhbCIsImlzUmVmIiwiaXNJbmRleGVkQWNjZXNzIiwiaXNUdXBsZVR5cGUiLCJpc1BpY2siLCJpZCIsImlzT21pdCIsImlzUGFydGlhbCIsImlzUHJvbWlzZSIsImlzQ29udGV4dCIsImlzUmVmS25leCIsImlzVHlwZVBhcmFtIiwiUmVuZGVyaW5nTm9kZSIsImFueSIsIkdlbmVyYXRlZENvbHVtblNjaGVtYSIsImV4cHJlc3Npb24iLCJDb25lU2NoZW1hIiwidGFncyIsImZpeHR1cmVHZW5lcmF0b3IiLCJmaXh0dXJlRGVmYXVsdCIsInVua25vd24iLCJmaXh0dXJlU3RyYXRlZ3kiLCJsaXRlcmFsIiwiZGF0YVNvdXJjZSIsInN0cmF0ZWd5IiwiY29uZmlnIiwiY2F0Y2hhbGwiLCJCYXNlUHJvcEZpZWxkcyIsIm51bGxhYmxlIiwiYm9vbGVhbiIsInRvRmlsdGVyIiwiZGVmYXVsdCIsImRiRGVmYXVsdCIsImdlbmVyYXRlZCIsIkJhc2VQcm9wRmllbGRzV2l0aG91dEFkZGl0aW9uYWwiLCJzdHJpY3QiLCJQcmVjaXNpb25TY2FsZUZpZWxkcyIsInByZWNpc2lvbiIsInNjYWxlIiwiU3RyaW5nUHJvcFNjaGVtYSIsInpvZEZvcm1hdCIsIlN0cmluZ0FycmF5UHJvcFNjaGVtYSIsIkVudW1Qcm9wU2NoZW1hIiwiRW51bUFycmF5UHJvcFNjaGVtYSIsIk51bWJlclByb3BTY2hlbWEiLCJudW1iZXJUeXBlIiwiTnVtYmVyQXJyYXlQcm9wU2NoZW1hIiwiRGF0ZVByb3BTY2hlbWEiLCJEYXRlQXJyYXlQcm9wU2NoZW1hIiwiTnVtZXJpY1Byb3BTY2hlbWEiLCJOdW1lcmljQXJyYXlQcm9wU2NoZW1hIiwiSnNvblByb3BTY2hlbWEiLCJWaXJ0dWFsUHJvcFNjaGVtYSIsIlZlY3RvclByb3BTY2hlbWEiLCJkaW1lbnNpb25zIiwiVmVjdG9yQXJyYXlQcm9wU2NoZW1hIiwiQmFzZVJlbGF0aW9uRmllbGRzIiwid2l0aCIsIlJlbGF0aW9uT25TY2hlbWEiLCJCZWxvbmdzVG9PbmVSZWxhdGlvblByb3BTY2hlbWEiLCJjdXN0b21Kb2luQ2xhdXNlIiwidXNlQ29uc3RyYWludCIsIm9uVXBkYXRlIiwib25EZWxldGUiLCJIYXNNYW55UmVsYXRpb25Qcm9wU2NoZW1hIiwiam9pbkNvbHVtbiIsImZyb21Db2x1bW4iLCJNYW55VG9NYW55UmVsYXRpb25Qcm9wU2NoZW1hIiwiam9pblRhYmxlIiwiT25lVG9PbmVSZWxhdGlvblByb3BTY2hlbWEiLCJoYXNKb2luQ29sdW1uIiwiUmVsYXRpb25UeXBlcyIsIlJlbGF0aW9uUHJvcFNjaGVtYSIsImRpc2NyaW1pbmF0ZWRVbmlvbiIsImVycm9yIiwiaXNzIiwibWFwIiwiam9pbiIsImlucHV0IiwiTm9ybWFsUHJvcFR5cGVzIiwiVmlydHVhbEdlbmVyYXRlZERpc2FsbG93ZWRUeXBlcyIsIk5vcm1hbFByb3BTY2hlbWEiLCJzdXBlclJlZmluZSIsImRhdGEiLCJjdHgiLCJhZGRJc3N1ZSIsIm1lc3NhZ2UiLCJwYXRoIiwiaW5jbHVkZXMiLCJmYXRhbCIsIkFsbFByb3BUeXBlcyIsIkVudGl0eVByb3BTY2hlbWEiLCJFbnRpdHlJbmRleENvbHVtblNjaGVtYSIsIm51bGxzRmlyc3QiLCJzb3J0T3JkZXIiLCJ2ZWN0b3JPcHMiLCJFbnRpdHlJbmRleFNjaGVtYSIsImNvbHVtbnMiLCJ1c2luZyIsIm51bGxzTm90RGlzdGluY3QiLCJtIiwiZWZDb25zdHJ1Y3Rpb24iLCJsaXN0cyIsIlN1YnNldERlZlNjaGVtYSIsIkVudW1EZWZTY2hlbWEiLCJyZWNvcmQiLCJFbnRpdHlKc29uU2NoZW1hIiwidGl0bGUiLCJ0YWJsZSIsInBhcmVudElkIiwicHJvcHMiLCJpbmRleGVzIiwic3Vic2V0cyIsImVudW1zIiwiVGVtcGxhdGVPcHRpb25zIiwiZW50aXR5Iiwib21pdCIsImV4dGVuZCIsImVudGl0eUlkIiwicGFydGlhbCIsImluaXRfdHlwZXMiLCJnZW5lcmF0ZWRfc3NvIiwiZ2VuZXJhdGVkX2h0dHAiLCJtb2RlbCIsImRlZmF1bHRTZWFyY2hGaWVsZCIsImRlZmF1bHRPcmRlckJ5IiwibW9kZWxfdGVzdCIsImJyaWRnZSIsInNlcnZpY2VzIiwidmlld19saXN0IiwiZXh0cmEiLCJ2aWV3X2xpc3RfY29sdW1ucyIsImxhYmVsIiwidGMiLCJjb2x1bW5JbXBvcnRzIiwidmlld19zZWFyY2hfaW5wdXQiLCJ2aWV3X2Zvcm0iLCJ2aWV3X2lkX2FsbF9zZWxlY3QiLCJ2aWV3X2VudW1zX2J1dHRvbnNldCIsImVudW1JZCIsInF1ZXJpZXMiLCJlbnRyeV9zZXJ2ZXIiLCJzZCIsInRhcmdldCIsIlRlbXBsYXRlS2V5IiwiR2VuZXJhdGVPcHRpb25zIiwib3ZlcndyaXRlIiwiUGF0aEFuZENvZGUiXSwibWFwcGluZ3MiOiJBQUNBLFNBQVNBLENBQUMsUUFBUSxNQUFNO0FBS3hCOztBQUVBLEdBQ0EsT0FBTyxTQUFTQyxXQUFtQ0MsS0FBUTtJ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
|
|
927
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZhc3RpZnlSZXBseSwgRmFzdGlmeVJlcXVlc3QgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgQXBpRGVjb3JhdG9yT3B0aW9ucywgQ29udGV4dCB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgR3VhcmRLZXkgfSBmcm9tIFwiLi8uLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHR5cGUgeyBDYWNoZUNvbnRyb2xIYW5kbGVyIH0gZnJvbSBcIi4uL2NhY2hlLWNvbnRyb2wvdHlwZXNcIjtcblxuLypcbiAgVXRpbGl0eSBUeXBlc1xuKi9cbmV4cG9ydCBmdW5jdGlvbiB6QXJyYXlhYmxlPFQgZXh0ZW5kcyB6LlpvZFR5cGVBbnk+KHNoYXBlOiBUKTogei5ab2RVbmlvbjxbVCwgei5ab2RBcnJheTxUPl0+IHtcbiAgcmV0dXJuIHoudW5pb24oW3NoYXBlLCBzaGFwZS5hcnJheSgpXSk7XG59XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGFueSBpcyB1c2VkIHRvIG1ha2UgdGhlIHR5cGUgZGlzdHJpYnV0aXZlXG5leHBvcnQgdHlwZSBEaXN0cmlidXRpdmVPbWl0PFQsIEsgZXh0ZW5kcyBrZXlvZiBhbnk+ID0gVCBleHRlbmRzIGFueSA/IE9taXQ8VCwgSz4gOiBuZXZlcjtcblxuLypcbiAgTW9kZWwtRGVmaW5pdGlvblxuKi9cblxuLyoqXG4gKiDrtoDrqqggRW50aXR5IGZpeHR1cmUg7IOd7ISxIOyLnCDtlajqu5gg7IOd7ISx7ZWgIGNvbXBhbmlvbiBFbnRpdHkg7ISk7KCVXG4gKlxuICog7JiIOiBVc2VyIGZpeHR1cmUg7IOd7ISxIOyLnCBjcmVkZW50aWFscyBBY2NvdW5066W8IO2VqOq7mCDsg53shLFcbiAqL1xuZXhwb3J0IHR5cGUgRml4dHVyZUNvbXBhbmlvbiA9IHtcbiAgLyoqIO2VqOq7mCDsg53shLHtlaAgRW50aXR5IOydtOumhCAqL1xuICBlbnRpdHk6IHN0cmluZztcblxuICAvKipcbiAgICog6rOg7KCVIOyYpOuyhOudvOydtOuTnCDqsJIuXG4gICAqIFwie3tmaWVsZE5hbWV9fVwiIO2YleyLneycvOuhnCDrtoDrqqggZml4dHVyZeydmCDtlYTrk5wg6rCS7J2EIOywuOyhsO2VoCDsiJgg7J6I64ukLlxuICAgKiDsmIg6IHsgXCJhY2NvdW50X2lkXCI6IFwie3tlbWFpbH19XCIgfSDihpIg67aA66qoIFVzZXLsnZggZW1haWwg6rCSIOyCrOyaqVxuICAgKi9cbiAgb3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIOu2gOuqqCAx6rCc64u5IOyDneyEse2VoCBjb21wYW5pb24g6rCc7IiYLiDquLDrs7jqsJIgMS5cbiAgICog7JiIOiBjb3VudDogMiDihpIgVXNlciAx6rCc64u5IGNvbXBhbmlvbiAy6rCcIOyDneyEsVxuICAgKi9cbiAgY291bnQ/OiBudW1iZXI7XG59O1xuXG4vKipcbiAqIGNvbmU6IOuylOyaqSDrqZTtg4DrjbDsnbTthLAg7Iuc7Iqk7YWcXG4gKlxuICogRW50aXR5LCBQcm9wLCBFbnVtLCBTdWJzZXTsl5AgXCLshpTrsKnsmrjsnYQg64uo64ukXCLripQg6rCc64WQ7Jy866GcIOu2meydtOuKlCDri6jsnbwg7ISc7IigIOuplO2DgOuNsOydtO2EsOyeheuLiOuLpC5cbiAqIG5vdGUg7ZWY64KY66GcIOu5hOymiOuLiOyKpCDsnZjrr7jsmYAgZml4dHVyZSDsg53shLEg7Z6M7Yq466W8IO2VqOq7mCDquLDsiKDtlanri4jri6QuXG4gKi9cbmV4cG9ydCB0eXBlIENvbmUgPSB7XG4gIG5vdGU/OiBzdHJpbmc7IC8vIOydtCDrjIDsg4HsnbQg66y07JeH7J247KeAIOyEpOuqhSAo67mE7KaI64uI7IqkIOydmOuvuCArIGZpeHR1cmUg7Z6M7Yq4IO2Gte2VqSlcbiAgdGFncz86IHN0cmluZ1tdOyAvLyDrtoTrpZgv6rKA7IOJ7JqpIO2DnOq3uFxuXG4gIC8vIEZpeHR1cmUg7IOd7ISxIOq0gOugqFxuICBmaXh0dXJlR2VuZXJhdG9yPzogc3RyaW5nOyAvLyBGYWtlci5qcyDsvZTrk5wg65iQ64qUIOy7pOyKpO2FgCDtlajsiJhcbiAgZml4dHVyZURlZmF1bHQ/OiB1bmtub3duOyAvLyDquLDrs7jqsJJcbiAgZml4dHVyZVN0cmF0ZWd5PzogXCJzZXF1ZW5jZVwiOyAvLyBzdHJpbmcg7YOA7J6F7J207KeA66eMIERCIHNlcXVlbmNl66GcIOq0gOumrOuQmOuKlCBQSyAoYmV0dGVyLWF1dGgg65OxKVxuICBmaXh0dXJlQ29tcGFuaW9ucz86IEZpeHR1cmVDb21wYW5pb25bXTsgLy8g67aA66qoIGZpeHR1cmUg7IOd7ISxIOyLnCDtlajqu5gg7IOd7ISx7ZWgIGNvbXBhbmlvbiBFbnRpdHkg66qp66GdXG5cbiAgLy8g7LC47KGwIOuNsOydtO2EsCDqtIDroKhcbiAgZGF0YVNvdXJjZT86IHtcbiAgICBzdHJhdGVneTogXCJzYW1wbGVcIiB8IFwiaWRzXCIgfCBcInF1ZXJ5XCIgfCBcImZpbGVcIiB8IFwicmVjZW50XCIgfCBcInJhbmRvbVwiO1xuICAgIGNvbmZpZz86IHVua25vd247IC8vIOyghOueteuzhCDshKTsoJVcbiAgfTtcblxuICAvLyDtmZXsnqXshLFcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjsgLy8g7IKs7Jqp7J6QIOygleydmCDrqZTtg4DrjbDsnbTthLBcbn07XG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRlZENvbHVtblR5cGUgPSBcIlNUT1JFRFwiIHwgXCJWSVJUVUFMXCI7XG5leHBvcnQgdHlwZSBHZW5lcmF0ZWRDb2x1bW4gPSB7XG4gIHR5cGU6IEdlbmVyYXRlZENvbHVtblR5cGU7XG4gIGV4cHJlc3Npb246IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBDb21tb25Qcm9wID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bGxhYmxlPzogYm9vbGVhbjtcbiAgdG9GaWx0ZXI/OiB0cnVlO1xuICBkZXNjPzogc3RyaW5nO1xuICBkYkRlZmF1bHQ/OiBzdHJpbmc7XG4gIGdlbmVyYXRlZD86IEdlbmVyYXRlZENvbHVtbjtcbiAgY29uZT86IENvbmU7IC8vIGNvbmUg66mU7YOA642w7J207YSwXG59O1xuXG4vKipcbiAqIHByb3DsnZgg7ISk66qF7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAqXG4gKiBjb25lLm5vdGXqsIAg7J6I7Jy866m0IOyasOyEoCDsgqzsmqntlZjqs6AsIOyXhuycvOuptCBwcm9wLmRlc2Prpbwg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVzY3JpcHRpb24oaXRlbTogeyBkZXNjPzogc3RyaW5nOyBjb25lPzogQ29uZSB9KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGl0ZW0uY29uZT8ubm90ZSB8fCBpdGVtLmRlc2M7XG59XG5leHBvcnQgdHlwZSBJbnRlZ2VyUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiaW50ZWdlclwiO1xufTsgLy8gUEc6IGludGVnZXIgLyBUUzogbnVtYmVyIC8gSlNPTjogbnVtYmVyXG5leHBvcnQgdHlwZSBJbnRlZ2VyQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJpbnRlZ2VyW11cIjtcbn07IC8vIFBHOiBpbnRlZ2VyW10gLyBUUzogbnVtYmVyW10gLyBKU09OOiBudW1iZXJbXVxuZXhwb3J0IHR5cGUgQmlnSW50ZWdlclByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImJpZ0ludGVnZXJcIjtcbn07IC8vIFBHOiBiaWdpbnQgLyBUUzogYmlnaW50IC8gSlNPTjogYmlnaW50XG5leHBvcnQgdHlwZSBCaWdJbnRlZ2VyQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJiaWdJbnRlZ2VyW11cIjtcbn07IC8vIFBHOiBiaWdpbnRbXSAvIFRTOiBiaWdpbnRbXSAvIEpTT046IGJpZ2ludFtdXG5cbi8qKlxuICogWm9kIDQgU3RyaW5nIEZvcm1hdCDtg4DsnoVcbiAqIGVudGl0eS5qc29u7JeQ7IScIHN0cmluZyDtg4DsnoXsnZggcHJvcOyXkCB6b2RGb3JtYXQg7Ji17IWY7J2EIOyngOygle2VmOyXrFxuICogQmFzZVNjaGVtYSDsg53shLEg7IucIFpvZOydmCBzdHJpbmcgZm9ybWF0IHZhbGlkYXRpb27snYQg7KCB7Jqp7ZWp64uI64ukLlxuICovXG5leHBvcnQgY29uc3QgWm9kU3RyaW5nRm9ybWF0ID0gei5lbnVtKFtcbiAgLy8g6riw67O4IO2PrOunt1xuICBcImVtYWlsXCIsXG4gIFwidXVpZFwiLFxuICBcInVybFwiLFxuICBcImh0dHBVcmxcIixcbiAgXCJob3N0bmFtZVwiLFxuICBcImVtb2ppXCIsXG4gIFwiYmFzZTY0XCIsXG4gIFwiYmFzZTY0dXJsXCIsXG4gIFwiaGV4XCIsXG4gIFwiand0XCIsXG4gIFwibmFub2lkXCIsXG4gIFwiY3VpZFwiLFxuICBcImN1aWQyXCIsXG4gIFwidWxpZFwiLFxuICBcImlwdjRcIixcbiAgXCJpcHY2XCIsXG4gIFwibWFjXCIsXG4gIFwiY2lkcnY0XCIsXG4gIFwiY2lkcnY2XCIsXG4gIC8vIGhhc2gg7Y+s66e3ICjslYzqs6Drpqzsppjrs4QpXG4gIFwiaGFzaE1kNVwiLFxuICBcImhhc2hTaGExXCIsXG4gIFwiaGFzaFNoYTI1NlwiLFxuICBcImhhc2hTaGEzODRcIixcbiAgXCJoYXNoU2hhNTEyXCIsXG4gIC8vIElTTyDtj6zrp7dcbiAgXCJpc29EYXRlXCIsXG4gIFwiaXNvVGltZVwiLFxuICBcImlzb0RhdGV0aW1lXCIsXG4gIFwiaXNvRHVyYXRpb25cIixcbl0pO1xuZXhwb3J0IHR5cGUgWm9kU3RyaW5nRm9ybWF0ID0gei5pbmZlcjx0eXBlb2YgWm9kU3RyaW5nRm9ybWF0PjtcblxuZXhwb3J0IHR5cGUgU3RyaW5nUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwic3RyaW5nXCI7XG4gIGxlbmd0aD86IG51bWJlcjsgLy8gUEc6IHZhcmNoYXIobiksIHRleHQgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG4gIHpvZEZvcm1hdD86IFpvZFN0cmluZ0Zvcm1hdDtcbn07IC8vIFBHOiB0ZXh0IC8gVFM6IHN0cmluZyAvIEpTT046IHN0cmluZ1xuZXhwb3J0IHR5cGUgU3RyaW5nQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJzdHJpbmdbXVwiO1xuICBsZW5ndGg/OiBudW1iZXI7IC8vIFBHOiB2YXJjaGFyKG4pW10sIHRleHRbXSAvIFRTOiBzdHJpbmdbXSAvIEpTT046IHN0cmluZ1tdXG4gIHpvZEZvcm1hdD86IFpvZFN0cmluZ0Zvcm1hdDtcbn07IC8vIFBHOiB2YXJjaGFyKG4pW10sIHRleHRbXSAvIFRTOiBzdHJpbmdbXSAvIEpTT046IHN0cmluZ1tdXG5leHBvcnQgdHlwZSBFbnVtUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiZW51bVwiO1xuICBpZDogc3RyaW5nO1xuICBsZW5ndGg/OiBudW1iZXI7XG59OyAvLyBQRzogdGV4dCAvIFRTOiBzdHJpbmcgLyBKU09OOiBzdHJpbmdcbmV4cG9ydCB0eXBlIEVudW1BcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImVudW1bXVwiO1xuICBpZDogc3RyaW5nO1xufTsgLy8gUEc6IHRleHRbXSAvIFRTOiBzdHJpbmdbXSAvIEpTT046IHN0cmluZ1tdXG5leHBvcnQgdHlwZSBOdW1iZXJQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJudW1iZXJcIjtcbiAgcHJlY2lzaW9uPzogbnVtYmVyOyAvLyBQRzogbnVtZXJpYyhwLCBzKSAvIFRTOiBudW1iZXIgLyBKU09OOiBudW1iZXJcbiAgc2NhbGU/OiBudW1iZXI7IC8vIFBHOiBudW1lcmljKHAsIHMpIC8gVFM6IG51bWJlciAvIEpTT046IG51bWJlclxuICBudW1iZXJUeXBlPzogXCJyZWFsXCIgfCBcImRvdWJsZSBwcmVjaXNpb25cIiB8IFwibnVtZXJpY1wiOyAvLyDquLDrs7jqsJI6IG51bWVyaWNcbn07IC8vIFBHOiBudW1lcmljKHAsIHMpIC8gVFM6IG51bWJlciAvIEpTT046IG51bWJlclxuZXhwb3J0IHR5cGUgTnVtYmVyQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJudW1iZXJbXVwiO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHNjYWxlPzogbnVtYmVyO1xuICBudW1iZXJUeXBlPzogXCJyZWFsXCIgfCBcImRvdWJsZSBwcmVjaXNpb25cIiB8IFwibnVtZXJpY1wiOyAvLyDquLDrs7jqsJI6IG51bWVyaWNcbn07IC8vIFBHOiBudW1lcmljKHAsIHMpW10gLyBUUzogbnVtYmVyW10gLyBKU09OOiBudW1iZXJbXVxuZXhwb3J0IHR5cGUgTnVtZXJpY1Byb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcIm51bWVyaWNcIjtcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuICBzY2FsZT86IG51bWJlcjtcbn07IC8vIFBHOiBudW1lcmljKHAsIHMpIC8gVFM6IHN0cmluZyAvIEpTT046IHN0cmluZ1xuZXhwb3J0IHR5cGUgTnVtZXJpY0FycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwibnVtZXJpY1tdXCI7XG4gIHByZWNpc2lvbj86IG51bWJlcjtcbiAgc2NhbGU/OiBudW1iZXI7XG59OyAvLyBQRzogbnVtZXJpYyhwLCBzKVtdIC8gVFM6IHN0cmluZ1tdIC8gSlNPTjogc3RyaW5nW11cbmV4cG9ydCB0eXBlIEJvb2xlYW5Qcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJib29sZWFuXCI7XG59OyAvLyBQRzogYm9vbGVhbiAvIFRTOiBib29sZWFuIC8gSlNPTjogYm9vbGVhblxuZXhwb3J0IHR5cGUgQm9vbGVhbkFycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiYm9vbGVhbltdXCI7XG59OyAvLyBQRzogYm9vbGVhbltdIC8gVFM6IGJvb2xlYW5bXSAvIEpTT046IGJvb2xlYW5bXVxuZXhwb3J0IHR5cGUgRGF0ZVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImRhdGVcIjtcbiAgLy8g6riw67O46rCS7J2AIDMsIG1pY3Jvc2Vjb25kc+ulvCDsk7DroKTrqbQgNuydhCDsjajslbztlaggKDAgfiA2KVxuICBwcmVjaXNpb24/OiBudW1iZXI7XG59OyAvLyBQRzogdGltZXN0YW1weiAvIFRTOiBEYXRlIC8gSlNPTjogc3RyaW5nKElTT1N0cmluZylcbmV4cG9ydCB0eXBlIERhdGVBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImRhdGVbXVwiO1xuICAvLyDquLDrs7jqsJLsnYAgMywgbWljcm9zZWNvbmRz66W8IOyTsOugpOuptCA27J2EIOyNqOyVvO2VqCAoMCB+IDYpXG4gIHByZWNpc2lvbj86IG51bWJlcjtcbn07IC8vIFBHOiB0aW1lc3RhbXB0eltdIC8gVFM6IERhdGVbXSAvIEpTT046IHN0cmluZ1tdXG5leHBvcnQgdHlwZSBKc29uUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwianNvblwiO1xuICBpZDogc3RyaW5nO1xufTsgLy8gUEc6IGpzb24gLyBUUzogYW55KGlkKSAvIEpTT046IGFueVxuZXhwb3J0IHR5cGUgU2VhcmNoVGV4dFNvdXJjZUNvbHVtbiA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBjYXNlSW5zZW5zaXRpdmU/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIFNlYXJjaFRleHRQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJzZWFyY2hUZXh0XCI7XG4gIHNvdXJjZUNvbHVtbnM6IFNlYXJjaFRleHRTb3VyY2VDb2x1bW5bXTtcbn07IC8vIFBHOiB0ZXh0IChnZW5lcmF0ZWQpIC8gVFM6IHN0cmluZyAvIEpTT046IHN0cmluZ1xuZXhwb3J0IHR5cGUgVXVpZFByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInV1aWRcIjtcbn07IC8vIFBHOiB1dWlkIC8gVFM6IHN0cmluZyAvIEpTT046IHN0cmluZ1xuZXhwb3J0IHR5cGUgVXVpZEFycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwidXVpZFtdXCI7XG59OyAvLyBQRzogdXVpZFtdIC8gVFM6IHN0cmluZ1tdIC8gSlNPTjogc3RyaW5nW11cbmV4cG9ydCB0eXBlIFZpcnR1YWxQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ2aXJ0dWFsXCI7XG4gIGlkOiBzdHJpbmc7XG4gIHZpcnR1YWxUeXBlPzogXCJxdWVyeVwiIHwgXCJjb2RlXCI7IC8vIGRlZmF1bHQ6IFwiY29kZVwiXG59OyAvLyBQRzogbm9uZSAvIFRTOiBhbnkoaWQpIC8gSlNPTjogYW55XG5leHBvcnQgdHlwZSBWZWN0b3JQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ2ZWN0b3JcIjtcbiAgZGltZW5zaW9uczogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIFZlY3RvckFycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwidmVjdG9yW11cIjtcbiAgZGltZW5zaW9uczogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIFRzVmVjdG9yUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwidHN2ZWN0b3JcIjtcbn07XG5leHBvcnQgdHlwZSBSZWxhdGlvblR5cGUgPSBcIkhhc01hbnlcIiB8IFwiQmVsb25nc1RvT25lXCIgfCBcIk1hbnlUb01hbnlcIiB8IFwiT25lVG9PbmVcIjtcbmV4cG9ydCB0eXBlIFJlbGF0aW9uT24gPSBcIkNBU0NBREVcIiB8IFwiU0VUIE5VTExcIiB8IFwiTk8gQUNUSU9OXCIgfCBcIlNFVCBERUZBVUxUXCIgfCBcIlJFU1RSSUNUXCI7XG50eXBlIF9SZWxhdGlvblByb3AgPSB7XG4gIHR5cGU6IFwicmVsYXRpb25cIjtcbiAgbmFtZTogc3RyaW5nO1xuICB3aXRoOiBzdHJpbmc7XG4gIG51bGxhYmxlPzogYm9vbGVhbjsgLy8gREVGQVVMVDogZmFsc2VcbiAgdG9GaWx0ZXI/OiB0cnVlOyAvLyBERUZBVUxUOiBmYWxzZVxuICBkZXNjPzogc3RyaW5nO1xuICBjb25lPzogQ29uZTsgLy8gY29uZSDrqZTtg4DrjbDsnbTthLBcbn07XG5leHBvcnQgdHlwZSBPbmVUb09uZVJlbGF0aW9uUHJvcCA9IF9SZWxhdGlvblByb3AgJiB7XG4gIHJlbGF0aW9uVHlwZTogXCJPbmVUb09uZVwiO1xuICBjdXN0b21Kb2luQ2xhdXNlPzogc3RyaW5nO1xufSAmIChcbiAgICB8IHtcbiAgICAgICAgaGFzSm9pbkNvbHVtbjogdHJ1ZTtcbiAgICAgICAgdXNlQ29uc3RyYWludD86IGJvb2xlYW47IC8vIERFRkFVTFQ6IHRydWVcbiAgICAgICAgb25VcGRhdGU/OiBSZWxhdGlvbk9uOyAvLyBERUZBVUxUOiBSRVNUUklDVFxuICAgICAgICBvbkRlbGV0ZT86IFJlbGF0aW9uT247IC8vIERFRkFVTFQ6IFJFU1RSSUNUXG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIGhhc0pvaW5Db2x1bW46IGZhbHNlO1xuICAgICAgfVxuICApO1xuZXhwb3J0IHR5cGUgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wID0gX1JlbGF0aW9uUHJvcCAmIHtcbiAgcmVsYXRpb25UeXBlOiBcIkJlbG9uZ3NUb09uZVwiO1xuICBjdXN0b21Kb2luQ2xhdXNlPzogc3RyaW5nO1xuICB1c2VDb25zdHJhaW50PzogYm9vbGVhbjsgLy8gREVGQVVMVDogdHJ1ZVxuICBvblVwZGF0ZT86IFJlbGF0aW9uT247IC8vIERFRkFVTFQ6IFJFU1RSSUNUXG4gIG9uRGVsZXRlPzogUmVsYXRpb25PbjsgLy8gREVGQVVMVDogUkVTVFJJQ1Rcbn07XG5leHBvcnQgdHlwZSBIYXNNYW55UmVsYXRpb25Qcm9wID0gX1JlbGF0aW9uUHJvcCAmIHtcbiAgcmVsYXRpb25UeXBlOiBcIkhhc01hbnlcIjtcbiAgam9pbkNvbHVtbjogc3RyaW5nO1xuICBmcm9tQ29sdW1uPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIE1hbnlUb01hbnlSZWxhdGlvblByb3AgPSBfUmVsYXRpb25Qcm9wICYge1xuICByZWxhdGlvblR5cGU6IFwiTWFueVRvTWFueVwiO1xuICBqb2luVGFibGU6IGAke3N0cmluZ31fXyR7c3RyaW5nfWA7XG4gIG9uVXBkYXRlOiBSZWxhdGlvbk9uO1xuICBvbkRlbGV0ZTogUmVsYXRpb25Pbjtcbn07XG5leHBvcnQgdHlwZSBSZWxhdGlvblByb3AgPVxuICB8IE9uZVRvT25lUmVsYXRpb25Qcm9wXG4gIHwgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wXG4gIHwgSGFzTWFueVJlbGF0aW9uUHJvcFxuICB8IE1hbnlUb01hbnlSZWxhdGlvblByb3A7XG5cbmV4cG9ydCB0eXBlIEVudGl0eVByb3AgPVxuICB8IEludGVnZXJQcm9wXG4gIHwgSW50ZWdlckFycmF5UHJvcFxuICB8IEJpZ0ludGVnZXJQcm9wXG4gIHwgQmlnSW50ZWdlckFycmF5UHJvcFxuICB8IFN0cmluZ1Byb3BcbiAgfCBTdHJpbmdBcnJheVByb3BcbiAgfCBFbnVtUHJvcFxuICB8IEVudW1BcnJheVByb3BcbiAgfCBOdW1iZXJQcm9wXG4gIHwgTnVtYmVyQXJyYXlQcm9wXG4gIHwgTnVtZXJpY1Byb3BcbiAgfCBOdW1lcmljQXJyYXlQcm9wXG4gIHwgTnVtZXJpY1Byb3BcbiAgfCBCb29sZWFuUHJvcFxuICB8IEJvb2xlYW5BcnJheVByb3BcbiAgfCBEYXRlUHJvcFxuICB8IERhdGVBcnJheVByb3BcbiAgfCBVdWlkUHJvcFxuICB8IFV1aWRBcnJheVByb3BcbiAgfCBKc29uUHJvcFxuICB8IFNlYXJjaFRleHRQcm9wXG4gIHwgVmlydHVhbFByb3BcbiAgfCBWZWN0b3JQcm9wXG4gIHwgVmVjdG9yQXJyYXlQcm9wXG4gIHwgVHNWZWN0b3JQcm9wXG4gIHwgUmVsYXRpb25Qcm9wO1xuXG4vKipcbiAqIFNvbmFtdUZpbGUgVHlwZXNcbiAqXG4gKiDtjIzsnbwg7JeF66Gc65Oc66W8IOychO2VnCBKU09OIO2DgOyeheyeheuLiOuLpC5cbiAqIEVudGl0eeydmCBqc29uIOyGjeyEseyXkOyEnCBpZOuhnCBcIlNvbmFtdUZpbGVcIiDrmJDripQgXCJTb25hbXVGaWxlW11cIuydhCDsp4DsoJXtlZjsl6wg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbmFtdUZpbGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBtaW1lX3R5cGU6IHN0cmluZztcbiAgc2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgU29uYW11RmlsZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICB1cmw6IHouc3RyaW5nKCksXG4gICAgbWltZV90eXBlOiB6LnN0cmluZygpLFxuICAgIHNpemU6IHoubnVtYmVyKCksXG4gIH0pXG4gIC5kZXNjcmliZShcIlNvbmFtdUZpbGVcIik7XG5cbmV4cG9ydCBjb25zdCBTb25hbXVGaWxlQXJyYXlTY2hlbWEgPSB6LmFycmF5KFNvbmFtdUZpbGVTY2hlbWEpLmRlc2NyaWJlKFwiU29uYW11RmlsZVtdXCIpO1xuXG4vKipcbiAqIFNvbmFtdSDsvZTslrTsl5DshJwg7KCc6rO17ZWY64qUIOuCtOyepSBKU09OIO2DgOyehSBJRCDrqqnroZ1cbiAqIOyDiOuhnOyatCDrgrTsnqUg7YOA7J6FIOy2lOqwgCDsi5wg7J20IOuwsOyXtOyXkCDstpTqsIDtlZjrqbQg7J6Q64+Z7Jy866GcIFVJ7JeQIOuFuOy2nOuQqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNvbnN0IEJVSUxUX0lOX1RZUEVfSURTID0gW1wiU29uYW11RmlsZVwiLCBcIlNvbmFtdUZpbGVbXVwiXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWx0SW5UeXBlSWQgPSAodHlwZW9mIEJVSUxUX0lOX1RZUEVfSURTKVtudW1iZXJdO1xuXG4vKipcbiAqIHBndmVjdG9yIOqxsOumrCDsl7DsgrDsnpAg7YG0656Y7IqkXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiAtIGB2ZWN0b3JfY29zaW5lX29wc2A6IOy9lOyCrOyduCDqsbDrpqwgKENvc2luZSBEaXN0YW5jZSkgLSDqtozsnqVcbiAqICAgLSBTUUwg7Jew7IKw7J6QOiBgPD0+YFxuICogICAtIOuyoe2EsOydmCDrsKntlqXrp4wg67mE6rWQICjtgazquLAg66y07IucKSwgMSAtIGNvc2luZV9zaW1pbGFyaXR5XG4gKiAgIC0g7YWN7Iqk7Yq4IOyehOuyoOuUqSwg7Iuc66eo7YuxIOqygOyDieyXkCDqsIDsnqUg7J2867CY7KCB7Jy866GcIOyCrOyaqVxuICogICAtIOyCrOyaqSDsmIg6IE9wZW5BSSwgVm95YWdlIOuTsSDrjIDrtoDrtoTsnZgg7J6E67Kg65SpIOuqqOuNuOyXkCDqtozsnqVcbiAqXG4gKiAtIGB2ZWN0b3JfaXBfb3BzYDog64K07KCBIChJbm5lciBQcm9kdWN0KVxuICogICAtIFNRTCDsl7DsgrDsnpA6IGA8Iz5gXG4gKiAgIC0g65GQIOuyoe2EsOydmCDrgrTsoIHsnYQg6rOE7IKwIChzdW0oYVtpXSAqIGJbaV0pKVxuICogICAtIOygleq3nO2ZlOuQnCDrsqHthLDsl5DshJwg7L2U7IKs7J24IOycoOyCrOuPhOyZgCDrj5nsnbztlZwg6rKw6rO8XG4gKiAgIC0g6rCS7J20IO2BtOyImOuhnSDsnKDsgqwgKOydjOyImCDsl7DsgrDsnpDsnbTrr4DroZwgT1JERVIgQlnsl5DshJwg7KO87J2YKVxuICogICAtIOyCrOyaqSDsmIg6IOydtOuvuCDsoJXqt5ztmZTrkJwg7J6E67Kg65Sp7JeQ7IScIOqwgOyepSDruaDrpbgg7ISx64qlXG4gKlxuICogLSBgdmVjdG9yX2wyX29wc2A6IOycoO2BtOumrOuTnCDqsbDrpqwgKEwyIERpc3RhbmNlKVxuICogICAtIFNRTCDsl7DsgrDsnpA6IGA8LT5gXG4gKiAgIC0g65GQIOuyoe2EsCDqsITsnZgg7KeB7ISgIOqxsOumrOulvCDqs4TsgrAgKHNxcnQoc3VtKChhW2ldIC0gYltpXSleMikpKVxuICogICAtIOuyoe2EsOydmCDtgazquLAobWFnbml0dWRlKeqwgCDspJHsmpTtlaAg65WMIOyCrOyaqVxuICogICAtIOyCrOyaqSDsmIg6IOydtOuvuOyngCDsnKDsgqzrj4QsIOygiOuMgOyggSDqsbDrpqwg7Lih7KCV7J20IO2VhOyalO2VnCDqsr3smrBcbiAqL1xuZXhwb3J0IHR5cGUgVmVjdG9yT3BzID0gXCJ2ZWN0b3JfY29zaW5lX29wc1wiIHwgXCJ2ZWN0b3JfaXBfb3BzXCIgfCBcInZlY3Rvcl9sMl9vcHNcIjtcblxuZXhwb3J0IGNvbnN0IEtub3duT3BjbGFzc1ZhbHVlcyA9IFtcbiAgXCJnaW5fdHJnbV9vcHNcIixcbiAgXCJnaXN0X3RyZ21fb3BzXCIsXG4gIFwiZ2luX2JpZ21fb3BzXCIsXG4gIFwidmVjdG9yX2Nvc2luZV9vcHNcIixcbiAgXCJ2ZWN0b3JfaXBfb3BzXCIsXG4gIFwidmVjdG9yX2wyX29wc1wiLFxuICBcInBncm9vbmdhX3ZhcmNoYXJfZnVsbF90ZXh0X3NlYXJjaF9vcHNfdjJcIixcbiAgXCJwZ3Jvb25nYV9qc29uYl9mdWxsX3RleHRfc2VhcmNoX29wc192MlwiLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEtub3duT3BjbGFzcyA9ICh0eXBlb2YgS25vd25PcGNsYXNzVmFsdWVzKVtudW1iZXJdO1xuXG50eXBlIEVudGl0eUluZGV4Q29sdW1uID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bGxzRmlyc3Q/OiBib29sZWFuO1xuICBzb3J0T3JkZXI/OiBcIkFTQ1wiIHwgXCJERVNDXCI7XG4gIC8qKiBwZ3ZlY3RvciDsnbjrjbHsiqTsl5DshJwg7IKs7Jqp7ZWgIOqxsOumrCDsl7DsgrDsnpAgKHZlY3RvciDsu6zrn7zsl5Drp4wg7KCB7JqpKSAqL1xuICB2ZWN0b3JPcHM/OiBWZWN0b3JPcHM7XG4gIC8qKiBnZW5lcmljIOyduOuNseyKpCBvcGNsYXNzICh2ZWN0b3JPcHPripQg7ZWY7JyE7Zi47ZmYIOuqqeyggeycvOuhnCDsnKDsp4ApICovXG4gIG9wY2xhc3M/OiBLbm93bk9wY2xhc3MgfCBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRW50aXR5SW5kZXggPSB7XG4gIHR5cGU6IFwiaW5kZXhcIiB8IFwidW5pcXVlXCIgfCBcImhuc3dcIiB8IFwiaXZmZmxhdFwiO1xuICBjb2x1bW5zOiBFbnRpdHlJbmRleENvbHVtbltdO1xuICBuYW1lOiBzdHJpbmc7XG4gIHVzaW5nPzogXCJidHJlZVwiIHwgXCJoYXNoXCIgfCBcImdpblwiIHwgXCJnaXN0XCIgfCBcInBncm9vbmdhXCI7XG4gIG51bGxzTm90RGlzdGluY3Q/OiBib29sZWFuOyAvLyB1bmlxdWUgaW5kZXggb25seVxuICAvKipcbiAgICogSE5TVyAoSGllcmFyY2hpY2FsIE5hdmlnYWJsZSBTbWFsbCBXb3JsZCkg7J24642x7IqkOiDqsIEg64W465Oc7J2YIOy1nOuMgCDsl7DqsrAg7IiYXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiDqt7jrnpjtlITsl5DshJwg6rCBIOuFuOuTnOqwgCDqsIDsp4gg7IiYIOyeiOuKlCDstZzrjIAg7Jew6rKwIOyImOyeheuLiOuLpC5cbiAgICogSE5TV+uKlCDruaDrpbgg6rKA7IOJIOyGjeuPhOyZgCDrhpLsnYAg7KCV7ZmV64+E66W8IOygnOqzte2VmOuvgOuhnCDqtozsnqXrkKnri4jri6QuXG4gICAqIC0g6riw67O46rCSOiAxNlxuICAgKiAtIOuylOychDogMiB+IDEwMFxuICAgKiAtIOuGkuydhOyImOuhnTog7KCV7ZmV64+E4oaRLCDruYzrk5wg7Iuc6rCE4oaRLCDrqZTrqqjrpqzihpFcbiAgICogLSDqtozsnqU6IOu5oOuluCDruYzrk5woOCksIOq3oO2YlSgxNiksIOuGkuydgCDsoJXtmZXrj4QoMzIpLCDstZzqs6Ag7KCV7ZmV64+EKDY0KVxuICAgKi9cbiAgbT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpIOyduOuNseyKpDog6rWs7ISxIOyLnCDtg5Dsg4kg67KU7JyEXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiDsnbjrjbHsiqQg6rWs7ISxIOyLnCDqsIEg64W465Oc7JeQ7IScIO2DkOyDie2VoCDrspTsnITsnoXri4jri6QuXG4gICAqIC0g6riw67O46rCSOiA2NFxuICAgKiAtIOuylOychDogNCB+IDEwMDBcbiAgICogLSDrhpLsnYTsiJjroZ06IOygle2ZleuPhOKGkSwg67mM65OcIOyLnOqwhOKGkVxuICAgKiAtIOq2jOyepTog67mg66W4IOu5jOuTnCgzMiksIOq3oO2YlSg2NCksIOuGkuydgCDsoJXtmZXrj4QoMTI4KSwg7LWc6rOgIOygle2ZleuPhCgyNTYpXG4gICAqL1xuICBlZkNvbnN0cnVjdGlvbj86IG51bWJlcjtcbiAgLyoqXG4gICAqIElWRkZsYXQgKEludmVydGVkIEZpbGUgd2l0aCBGbGF0IENvbXByZXNzaW9uKSDsnbjrjbHsiqQ6IO2BtOufrOyKpO2EsOungSDrpqzsiqTtirgg7IiYXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiDrsqHthLDrpbwg7YG065+s7Iqk7YSw66eB7ZWgIOuyhO2CtyDsiJjrpbwg7KeA7KCV7ZWp64uI64ukLlxuICAgKiBJVkZGbGF07J2AIOu5oOuluCDruYzrk5zsmYAg64Ku7J2AIOuplOuqqOumrCDsgqzsmqnsnbQg7ZWE7JqU7ZWgIOuVjCDsgqzsmqntlanri4jri6QuXG4gICAqIC0g6raM7J6l6rCSOiBzcXJ0KHJvd19jb3VudCkgfiByb3dfY291bnQgLyAxMDAwXG4gICAqIC0g7JiI7IucOiAxMCwwMDDtlokg4oaSIDEwMCwgMTAwLDAwMO2WiSDihpIgMzAwLCAxLDAwMCwwMDDtlokg4oaSIDEwMDBcbiAgICogLSDrp47snYTsiJjroZ0g7KCV7ZmV64+E4oaRLCDqsoDsg4kg7IaN64+E4oaTXG4gICAqL1xuICBsaXN0cz86IG51bWJlcjtcbn07XG5cbi8vIFN1YnNldEZpZWxkIO2DgOyehTogc3RyaW5nIOuYkOuKlCBpbnRlcm5hbCDsmLXshZjsnbQg7J6I64qUIOqwneyytFxuZXhwb3J0IHR5cGUgU3Vic2V0RmllbGQgPSBzdHJpbmcgfCB7IGZpZWxkOiBzdHJpbmc7IGludGVybmFsPzogYm9vbGVhbiB9O1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplU3Vic2V0RmllbGQoZjogU3Vic2V0RmllbGQpOiBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIGYgPT09IFwic3RyaW5nXCIgPyBmIDogZi5maWVsZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVybmFsU3Vic2V0RmllbGQoZjogU3Vic2V0RmllbGQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBmICE9PSBcInN0cmluZ1wiICYmIGYuaW50ZXJuYWwgPT09IHRydWU7XG59XG5cbi8qKlxuICogU3Vic2V0RGVmOiBTdWJzZXQg7KCV7J2YXG4gKlxuICog7ZWY7JyEIO2YuO2ZmOyEseydhCDsnITtlbQgU3Vic2V0RmllbGRbXSDrsLDsl7Qg7ZiV7YOc64+EIOyngOybkO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IHR5cGUgU3Vic2V0RGVmID1cbiAgfCBTdWJzZXRGaWVsZFtdIC8vIOq4sOyhtCDrsLDsl7Qg7ZiV7YOcXG4gIHwge1xuICAgICAgLy8g7IOI66Gc7Jq0IOqwneyytCDtmJXtg5xcbiAgICAgIGZpZWxkczogU3Vic2V0RmllbGRbXTtcbiAgICAgIGNvbmU/OiBDb25lO1xuICAgIH07XG5cbi8qKlxuICogRW51bURlZjogRW51bSDsoJXsnZhcbiAqXG4gKiDtlZjsnIQg7Zi47ZmY7ISx7J2EIOychO2VtCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IO2Yle2DnOuPhCDsp4Dsm5Dtlanri4jri6QuXG4gKi9cbmV4cG9ydCB0eXBlIEVudW1EZWYgPVxuICB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gLy8g6riw7KG0IFJlY29yZCDtmJXtg5xcbiAgfCB7XG4gICAgICAvLyDsg4jroZzsmrQg6rCd7LK0IO2Yle2DnFxuICAgICAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgY29uZT86IENvbmU7XG4gICAgfTtcblxuLyoqXG4gKiBTdWJzZXREZWbqsIAg7IOI66Gc7Jq0IOqwneyytCDtmJXtg5zsnbjsp4Ag7ZmV7J24XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N1YnNldERlZldpdGhDb25lKGRlZjogU3Vic2V0RGVmKTogZGVmIGlzIHsgZmllbGRzOiBTdWJzZXRGaWVsZFtdOyBjb25lPzogQ29uZSB9IHtcbiAgcmV0dXJuICFBcnJheS5pc0FycmF5KGRlZikgJiYgXCJmaWVsZHNcIiBpbiBkZWY7XG59XG5cbi8qKlxuICogRW51bURlZuqwgCDsg4jroZzsmrQg6rCd7LK0IO2Yle2DnOyduOyngCDtmZXsnbhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW51bURlZldpdGhDb25lKFxuICBkZWY6IEVudW1EZWYsXG4pOiBkZWYgaXMgeyB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IGNvbmU/OiBDb25lIH0ge1xuICByZXR1cm4gKFxuICAgIFwidmFsdWVzXCIgaW4gZGVmICYmICEoXCJjb25lXCIgaW4gZGVmICYmIGRlZi5jb25lID09PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXMoZGVmKS5sZW5ndGggPiAxKVxuICApO1xufVxuXG4vKipcbiAqIFN1YnNldERlZuyXkOyEnCBmaWVsZHMg7LaU7LacXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdWJzZXRGaWVsZHMoZGVmOiBTdWJzZXREZWYpOiBTdWJzZXRGaWVsZFtdIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGVmKSA/IGRlZiA6IGRlZi5maWVsZHM7XG59XG5cbi8qKlxuICogRW51bURlZuyXkOyEnCB2YWx1ZXMg7LaU7LacXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnVtRGVmVmFsdWVzKGRlZjogRW51bURlZik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4gaXNFbnVtRGVmV2l0aENvbmUoZGVmKSA/IGRlZi52YWx1ZXMgOiBkZWY7XG59XG5cbmV4cG9ydCB0eXBlIEVudGl0eUpzb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHBhcmVudElkPzogc3RyaW5nO1xuICB0YWJsZTogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgY29uZT86IENvbmU7IC8vIGNvbmUg66mU7YOA642w7J207YSwXG4gIHByb3BzOiBFbnRpdHlQcm9wW107XG4gIGluZGV4ZXM6IEVudGl0eUluZGV4W107XG4gIHN1YnNldHM6IHtcbiAgICBbc3Vic2V0OiBzdHJpbmddOiBTdWJzZXREZWY7XG4gIH07XG4gIGVudW1zOiB7XG4gICAgW2VudW1JZDogc3RyaW5nXTogRW51bURlZjtcbiAgfTtcbn07XG5leHBvcnQgdHlwZSBFbnRpdHlTdWJzZXRSb3cgPSB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIGhhczoge1xuICAgIFtrZXk6IHN0cmluZ106IGJvb2xlYW47XG4gIH07XG4gIGlzSW50ZXJuYWw6IHtcbiAgICBba2V5OiBzdHJpbmddOiBib29sZWFuO1xuICB9O1xuICBjaGlsZHJlbjogRW50aXR5U3Vic2V0Um93W107XG4gIHByZWZpeGVzOiBzdHJpbmdbXTtcbiAgcmVsYXRpb25FbnRpdHk/OiBzdHJpbmc7XG4gIGlzT3Blbj86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgRmxhdHRlblN1YnNldFJvdyA9IE9taXQ8RW50aXR5U3Vic2V0Um93LCBcImNoaWxkcmVuXCI+O1xuXG4vKlxuICBQcm9wTm9kZVxuKi9cblxuLyoqXG4gKiDsl5Tti7Dti7DsnZgg7ZWE65OcIOq1rOyhsOulvCDtirjrpqwg7ZiV7YOc66GcIO2RnO2YhO2VmOuKlCDspJHqsIQg64W465Oc7J6F64uI64ukLlxuICpcbiAqICoq66qp7KCBKio6IEVudGl0eeydmCBzdWJzZXQg7ZWE65OcIO2RnO2YhOyLnSjsmIg6IFwiaWRcIiwgXCJ1c2VyLm5hbWVcIiwgXCJ0YWdzW11cIinsnYRcbiAqIOyerOq3gOyggeyduCDtirjrpqwg6rWs7KGw66GcIO2MjOyLse2VmOyXrCBab2Qg7Iqk7YKk66eIIOyDneyEseydmCDspJHqsIQg64uo6rOE66GcIOyCrOyaqe2VqeuLiOuLpC5cbiAqXG4gKiAqKuuzgO2ZmCDtnZDrpoQqKjpcbiAqIEVudGl0eSBzdWJzZXQg4oaSIEVudGl0eVByb3BOb2RlICjtirjrpqwg6rWs7KGwKSDihpIgWm9kIOyKpO2CpOuniCDihpIgUmVuZGVyaW5nTm9kZSAoVUnsmqkpXG4gKlxuICogKipub2RlVHlwZSoqOlxuICogLSBcInBsYWluXCI6IOuLqOydvCDtlYTrk5wgKOyYiDogXCJpZFwiLCBcIm5hbWVcIilcbiAqIC0gXCJvYmplY3RcIjog7KSR7LKpIOqwneyytCAo7JiIOiBcInVzZXIubmFtZVwiIOKGkiB1c2VyIOqwneyytClcbiAqIC0gXCJhcnJheVwiOiDrsLDsl7QgKOyYiDogXCJ0YWdzW11cIiDihpIgdGFncyDrsLDsl7QpXG4gKlxuICogKirsgqzsmqkg7JyE7LmYKio6IGVudGl0eS1jb252ZXJ0ZXIudHPsnZggcHJvcE5vZGVUb1pvZFR5cGUoKVxuICovXG5leHBvcnQgdHlwZSBFbnRpdHlQcm9wTm9kZSA9XG4gIHwge1xuICAgICAgbm9kZVR5cGU6IFwicGxhaW5cIjtcbiAgICAgIHByb3A6IEVudGl0eVByb3A7XG4gICAgfVxuICB8IHtcbiAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiIHwgXCJhcnJheVwiO1xuICAgICAgcHJvcD86IEVudGl0eVByb3A7XG4gICAgICBjaGlsZHJlbjogRW50aXR5UHJvcE5vZGVbXTtcbiAgICB9O1xuXG4vKlxuICBQcm9wIFR5cGUgR3VhcmRzXG4qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZWdlclNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgSW50ZWdlclByb3Age1xuICByZXR1cm4gKHAgYXMgSW50ZWdlclByb3ApPy50eXBlID09PSBcImludGVnZXJcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXJBcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgSW50ZWdlckFycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBJbnRlZ2VyQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJpbnRlZ2VyW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXJQcm9wKHA6IHVua25vd24pOiBwIGlzIEludGVnZXJQcm9wIHwgSW50ZWdlckFycmF5UHJvcCB7XG4gIHJldHVybiBpc0ludGVnZXJTaW5nbGVQcm9wKHApIHx8IGlzSW50ZWdlckFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIEJpZ0ludGVnZXJQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEJpZ0ludGVnZXJQcm9wKT8udHlwZSA9PT0gXCJiaWdJbnRlZ2VyXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCaWdJbnRlZ2VyQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIEJpZ0ludGVnZXJBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgQmlnSW50ZWdlckFycmF5UHJvcCk/LnR5cGUgPT09IFwiYmlnSW50ZWdlcltdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCaWdJbnRlZ2VyUHJvcChwOiB1bmtub3duKTogcCBpcyBCaWdJbnRlZ2VyUHJvcCB8IEJpZ0ludGVnZXJBcnJheVByb3Age1xuICByZXR1cm4gaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcChwKSB8fCBpc0JpZ0ludGVnZXJBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmdTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIFN0cmluZ1Byb3Age1xuICByZXR1cm4gKHAgYXMgU3RyaW5nUHJvcCk/LnR5cGUgPT09IFwic3RyaW5nXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmdBcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgU3RyaW5nQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFN0cmluZ0FycmF5UHJvcCk/LnR5cGUgPT09IFwic3RyaW5nW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZ1Byb3AocDogdW5rbm93bik6IHAgaXMgU3RyaW5nUHJvcCB8IFN0cmluZ0FycmF5UHJvcCB7XG4gIHJldHVybiBpc1N0cmluZ1NpbmdsZVByb3AocCkgfHwgaXNTdHJpbmdBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbnVtU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBFbnVtUHJvcCB7XG4gIHJldHVybiAocCBhcyBFbnVtUHJvcCk/LnR5cGUgPT09IFwiZW51bVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW51bUFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBFbnVtQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEVudW1BcnJheVByb3ApPy50eXBlID09PSBcImVudW1bXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW51bVByb3AocDogdW5rbm93bik6IHAgaXMgRW51bVByb3AgfCBFbnVtQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzRW51bVNpbmdsZVByb3AocCkgfHwgaXNFbnVtQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBOdW1iZXJQcm9wIHtcbiAgcmV0dXJuIChwIGFzIE51bWJlclByb3ApPy50eXBlID09PSBcIm51bWJlclwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIE51bWJlckFycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBOdW1iZXJBcnJheVByb3ApPy50eXBlID09PSBcIm51bWJlcltdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXJQcm9wKHA6IHVua25vd24pOiBwIGlzIE51bWJlclByb3AgfCBOdW1iZXJBcnJheVByb3Age1xuICByZXR1cm4gaXNOdW1iZXJTaW5nbGVQcm9wKHApIHx8IGlzTnVtYmVyQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtZXJpY1NpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgTnVtZXJpY1Byb3Age1xuICByZXR1cm4gKHAgYXMgTnVtZXJpY1Byb3ApPy50eXBlID09PSBcIm51bWVyaWNcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNBcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgTnVtZXJpY0FycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBOdW1lcmljQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJudW1lcmljW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNQcm9wKHA6IHVua25vd24pOiBwIGlzIE51bWVyaWNQcm9wIHwgTnVtZXJpY0FycmF5UHJvcCB7XG4gIHJldHVybiBpc051bWVyaWNTaW5nbGVQcm9wKHApIHx8IGlzTnVtZXJpY0FycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW5TaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIEJvb2xlYW5Qcm9wIHtcbiAgcmV0dXJuIChwIGFzIEJvb2xlYW5Qcm9wKT8udHlwZSA9PT0gXCJib29sZWFuXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIEJvb2xlYW5BcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgQm9vbGVhbkFycmF5UHJvcCk/LnR5cGUgPT09IFwiYm9vbGVhbltdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuUHJvcChwOiB1bmtub3duKTogcCBpcyBCb29sZWFuUHJvcCB8IEJvb2xlYW5BcnJheVByb3Age1xuICByZXR1cm4gaXNCb29sZWFuU2luZ2xlUHJvcChwKSB8fCBpc0Jvb2xlYW5BcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBEYXRlUHJvcCB7XG4gIHJldHVybiAocCBhcyBEYXRlUHJvcCk/LnR5cGUgPT09IFwiZGF0ZVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZUFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBEYXRlQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIERhdGVBcnJheVByb3ApPy50eXBlID09PSBcImRhdGVbXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZVByb3AocDogdW5rbm93bik6IHAgaXMgRGF0ZVByb3AgfCBEYXRlQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzRGF0ZVNpbmdsZVByb3AocCkgfHwgaXNEYXRlQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVXVpZFNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgVXVpZFByb3Age1xuICByZXR1cm4gKHAgYXMgVXVpZFByb3ApPy50eXBlID09PSBcInV1aWRcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1V1aWRBcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgVXVpZEFycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBVdWlkQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJ1dWlkW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1V1aWRQcm9wKHA6IHVua25vd24pOiBwIGlzIFV1aWRQcm9wIHwgVXVpZEFycmF5UHJvcCB7XG4gIHJldHVybiBpc1V1aWRTaW5nbGVQcm9wKHApIHx8IGlzVXVpZEFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0pzb25Qcm9wKHA6IHVua25vd24pOiBwIGlzIEpzb25Qcm9wIHtcbiAgcmV0dXJuIChwIGFzIEpzb25Qcm9wKT8udHlwZSA9PT0gXCJqc29uXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNTZWFyY2hUZXh0UHJvcChwOiB1bmtub3duKTogcCBpcyBTZWFyY2hUZXh0UHJvcCB7XG4gIHJldHVybiAocCBhcyBTZWFyY2hUZXh0UHJvcCk/LnR5cGUgPT09IFwic2VhcmNoVGV4dFwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlydHVhbFByb3AocDogdW5rbm93bik6IHAgaXMgVmlydHVhbFByb3Age1xuICByZXR1cm4gKHAgYXMgVmlydHVhbFByb3ApPy50eXBlID09PSBcInZpcnR1YWxcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpcnR1YWxDb2RlUHJvcChwOiB1bmtub3duKTogcCBpcyBWaXJ0dWFsUHJvcCB7XG4gIGlmICghaXNWaXJ0dWFsUHJvcChwKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gcC52aXJ0dWFsVHlwZSAhPT0gXCJxdWVyeVwiOyAvLyB1bmRlZmluZWTrj4QgXCJjb2RlXCLroZwg7Leo6riJXG59XG5leHBvcnQgZnVuY3Rpb24gaXNWaXJ0dWFsUXVlcnlQcm9wKHA6IHVua25vd24pOiBwIGlzIFZpcnR1YWxQcm9wIHtcbiAgaWYgKCFpc1ZpcnR1YWxQcm9wKHApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBwLnZpcnR1YWxUeXBlID09PSBcInF1ZXJ5XCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWZWN0b3JTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIFZlY3RvclByb3Age1xuICByZXR1cm4gKHAgYXMgVmVjdG9yUHJvcCk/LnR5cGUgPT09IFwidmVjdG9yXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWZWN0b3JBcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgVmVjdG9yQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFZlY3RvckFycmF5UHJvcCk/LnR5cGUgPT09IFwidmVjdG9yW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlY3RvclByb3AocDogdW5rbm93bik6IHAgaXMgVmVjdG9yUHJvcCB8IFZlY3RvckFycmF5UHJvcCB7XG4gIHJldHVybiBpc1ZlY3RvclNpbmdsZVByb3AocCkgfHwgaXNWZWN0b3JBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUc1ZlY3RvclByb3AocDogdW5rbm93bik6IHAgaXMgVHNWZWN0b3JQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFRzVmVjdG9yUHJvcCk/LnR5cGUgPT09IFwidHN2ZWN0b3JcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgUmVsYXRpb25Qcm9wKT8udHlwZSA9PT0gXCJyZWxhdGlvblwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzT25lVG9PbmVSZWxhdGlvblByb3AocDogdW5rbm93bik6IHAgaXMgT25lVG9PbmVSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgT25lVG9PbmVSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiT25lVG9PbmVcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBCZWxvbmdzVG9PbmVSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKT8ucmVsYXRpb25UeXBlID09PSBcIkJlbG9uZ3NUb09uZVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSGFzTWFueVJlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBIYXNNYW55UmVsYXRpb25Qcm9wIHtcbiAgcmV0dXJuIChwIGFzIEhhc01hbnlSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiSGFzTWFueVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBNYW55VG9NYW55UmVsYXRpb25Qcm9wIHtcbiAgcmV0dXJuIChwIGFzIE1hbnlUb01hbnlSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiTWFueVRvTWFueVwiO1xufVxuXG50eXBlIEpvaW5DbGF1c2UgPVxuICB8IHtcbiAgICAgIGZyb206IHN0cmluZztcbiAgICAgIHRvOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIGN1c3RvbTogc3RyaW5nO1xuICAgIH07XG5leHBvcnQgZnVuY3Rpb24gaXNDdXN0b21Kb2luQ2xhdXNlKHA6IHVua25vd24pOiBwIGlzIHsgY3VzdG9tOiBzdHJpbmcgfSB7XG4gIHJldHVybiAhIShwIGFzIHsgY3VzdG9tOiBzdHJpbmcgfSk/LmN1c3RvbTtcbn1cblxudHlwZSBTdWJzZXRMb2FkZXIgPSB7XG4gIGFzOiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIG1hbnlKb2luOiB7XG4gICAgZnJvbVRhYmxlOiBzdHJpbmc7XG4gICAgZnJvbUNvbDogc3RyaW5nO1xuICAgIGlkRmllbGQ6IHN0cmluZztcbiAgICB0b1RhYmxlOiBzdHJpbmc7XG4gICAgdG9Db2w6IHN0cmluZztcbiAgICB0aHJvdWdoPzoge1xuICAgICAgdGFibGU6IHN0cmluZztcbiAgICAgIGZyb21Db2w6IHN0cmluZztcbiAgICAgIHRvQ29sOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgb25lSm9pbnM6ICh7XG4gICAgYXM6IHN0cmluZztcbiAgICBqb2luOiBcImlubmVyXCIgfCBcIm91dGVyXCI7XG4gICAgdGFibGU6IHN0cmluZztcbiAgfSAmIEpvaW5DbGF1c2UpW107XG4gIHNlbGVjdDogc3RyaW5nW107XG4gIGxvYWRlcnM/OiBTdWJzZXRMb2FkZXJbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFN1YnNldFF1ZXJ5ID0ge1xuICBzZWxlY3Q6IHN0cmluZ1tdO1xuICB2aXJ0dWFsOiBzdHJpbmdbXTtcbiAgam9pbnM6ICh7XG4gICAgYXM6IHN0cmluZztcbiAgICBqb2luOiBcImlubmVyXCIgfCBcIm91dGVyXCI7XG4gICAgdGFibGU6IHN0cmluZztcbiAgfSAmIEpvaW5DbGF1c2UpW107XG4gIGxvYWRlcnM6IFN1YnNldExvYWRlcltdO1xufTtcblxuLyogQmFzZU1vZGVsICovXG5leHBvcnQgY29uc3QgU29uYW11UXVlcnlNb2RlID0gei5lbnVtKFtcImJvdGhcIiwgXCJsaXN0XCIsIFwiY291bnRcIl0pO1xuZXhwb3J0IHR5cGUgU29uYW11UXVlcnlNb2RlID0gei5pbmZlcjx0eXBlb2YgU29uYW11UXVlcnlNb2RlPjtcblxuLyogU2VtYW50aWMgUXVlcnkgKi9cbmV4cG9ydCBjb25zdCBTb25hbXVTZW1hbnRpY1BhcmFtcyA9IHoub2JqZWN0KHtcbiAgc2VtYW50aWNRdWVyeTogei5vYmplY3Qoe1xuICAgIGVtYmVkZGluZzogei5hcnJheSh6Lm51bWJlcigpKS5taW4oMTAyNCkubWF4KDEwMjQpLFxuICAgIHRocmVzaG9sZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIG1ldGhvZDogei5lbnVtKFtcImNvc2luZVwiLCBcImwyXCIsIFwiaW5uZXJfcHJvZHVjdFwiXSkub3B0aW9uYWwoKSxcbiAgfSksXG59KTtcbmV4cG9ydCB0eXBlIFNvbmFtdVNlbWFudGljUGFyYW1zID0gei5pbmZlcjx0eXBlb2YgU29uYW11U2VtYW50aWNQYXJhbXM+O1xuXG4vKiBLbmV4IE1pZ3JhdGlvbiAqL1xuZXhwb3J0IHR5cGUgS25leEVycm9yID0ge1xuICBjb2RlOiBzdHJpbmc7XG4gIGVycm5vOiBudW1iZXI7XG4gIHNxbDogc3RyaW5nO1xuICBzcWxNZXNzYWdlOiBzdHJpbmc7XG4gIHNxbFN0YXRlOiBzdHJpbmc7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzS25leEVycm9yKGU6IHVua25vd24pOiBlIGlzIEtuZXhFcnJvciB7XG4gIHJldHVybiAhIShlIGFzIEtuZXhFcnJvcik/LmNvZGUgJiYgISEoZSBhcyBLbmV4RXJyb3IpPy5zcWxNZXNzYWdlICYmICEhKGUgYXMgS25leEVycm9yKT8uc3FsU3RhdGU7XG59XG5cbmV4cG9ydCB0eXBlIEtuZXhDb2x1bW5UeXBlID1cbiAgfCBcInN0cmluZ1wiXG4gIHwgXCJ0ZXh0XCJcbiAgfCBcInNtYWxsdGV4dFwiXG4gIHwgXCJtZWRpdW10ZXh0XCJcbiAgfCBcImxvbmd0ZXh0XCJcbiAgfCBcImludGVnZXJcIlxuICB8IFwiYmlnSW50ZWdlclwiXG4gIHwgXCJkZWNpbWFsXCJcbiAgfCBcInRpbWVzdGFtcFwiXG4gIHwgXCJib29sZWFuXCJcbiAgfCBcImZvcmVpZ25cIlxuICB8IFwidXVpZFwiXG4gIHwgXCJqc29uXCJcbiAgfCBcImZsb2F0XCJcbiAgfCBcImRhdGVcIlxuICB8IFwidGltZVwiXG4gIHwgXCJkYXRldGltZVwiO1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uQ29sdW1uVHlwZSA9XG4gIHwgXCJzdHJpbmdcIlxuICB8IFwic3RyaW5nW11cIlxuICB8IFwiaW50ZWdlclwiXG4gIHwgXCJpbnRlZ2VyW11cIlxuICB8IFwiYmlnSW50ZWdlclwiXG4gIHwgXCJiaWdJbnRlZ2VyW11cIlxuICB8IFwibnVtYmVyT3JOdW1lcmljXCJcbiAgfCBcIm51bWJlck9yTnVtZXJpY1tdXCJcbiAgfCBcImJvb2xlYW5cIlxuICB8IFwiYm9vbGVhbltdXCJcbiAgfCBcImRhdGVcIlxuICB8IFwiZGF0ZVtdXCJcbiAgfCBcInV1aWRcIlxuICB8IFwidXVpZFtdXCJcbiAgfCBcImpzb25cIlxuICB8IFwidmVjdG9yXCJcbiAgfCBcInZlY3RvcltdXCJcbiAgfCBcInRzdmVjdG9yXCI7XG5leHBvcnQgdHlwZSBNaWdyYXRpb25Db2x1bW4gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogTWlncmF0aW9uQ29sdW1uVHlwZTtcbiAgbnVsbGFibGU6IGJvb2xlYW47XG4gIG51bWJlclR5cGU/OiBcInJlYWxcIiB8IFwiZG91YmxlIHByZWNpc2lvblwiIHwgXCJudW1lcmljXCI7XG4gIGxlbmd0aD86IG51bWJlcjtcbiAgZGVmYXVsdFRvPzogc3RyaW5nO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHNjYWxlPzogbnVtYmVyO1xuICBkaW1lbnNpb25zPzogbnVtYmVyO1xuICBnZW5lcmF0ZWQ/OiBHZW5lcmF0ZWRDb2x1bW47XG59O1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uSW5kZXggPSB7XG4gIHR5cGU6IFwidW5pcXVlXCIgfCBcImluZGV4XCIgfCBcImhuc3dcIiB8IFwiaXZmZmxhdFwiO1xuICBjb2x1bW5zOiBFbnRpdHlJbmRleENvbHVtbltdO1xuICBuYW1lOiBzdHJpbmc7XG4gIHVzaW5nPzogXCJidHJlZVwiIHwgXCJoYXNoXCIgfCBcImdpblwiIHwgXCJnaXN0XCIgfCBcInBncm9vbmdhXCI7XG4gIG51bGxzTm90RGlzdGluY3Q/OiBib29sZWFuO1xuICAvKiogSE5TVyAoSGllcmFyY2hpY2FsIE5hdmlnYWJsZSBTbWFsbCBXb3JsZCk6IOqwgSDrhbjrk5zsnZgg7LWc64yAIOyXsOqysCDsiJggKi9cbiAgbT86IG51bWJlcjtcbiAgLyoqIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpOiDqtazshLEg7IucIO2DkOyDiSDrspTsnIQgKi9cbiAgZWZDb25zdHJ1Y3Rpb24/OiBudW1iZXI7XG4gIC8qKiBJVkZGbGF0IChJbnZlcnRlZCBGaWxlIHdpdGggRmxhdCBDb21wcmVzc2lvbik6IO2BtOufrOyKpO2EsOungSDrpqzsiqTtirgg7IiYICovXG4gIGxpc3RzPzogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkZvcmVpZ24gPSB7XG4gIGNvbHVtbnM6IHN0cmluZ1tdO1xuICB0bzogc3RyaW5nO1xuICBvblVwZGF0ZTogUmVsYXRpb25PbjtcbiAgb25EZWxldGU6IFJlbGF0aW9uT247XG59O1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uSm9pblRhYmxlID0ge1xuICB0YWJsZTogc3RyaW5nO1xuICBpbmRleGVzOiBNaWdyYXRpb25JbmRleFtdO1xuICBjb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXTtcbiAgZm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXTtcbn07XG5leHBvcnQgdHlwZSBNaWdyYXRpb25TZXQgPSB7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIGNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdO1xuICBpbmRleGVzOiBNaWdyYXRpb25JbmRleFtdO1xuICBmb3JlaWduczogTWlncmF0aW9uRm9yZWlnbltdO1xufTtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvblNldEFuZEpvaW5UYWJsZSA9IE1pZ3JhdGlvblNldCAmIHtcbiAgam9pblRhYmxlczogTWlncmF0aW9uSm9pblRhYmxlW107XG59O1xuZXhwb3J0IHR5cGUgR2VuTWlncmF0aW9uQ29kZSA9IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgdGFibGU6IHN0cmluZztcbiAgdHlwZTogXCJub3JtYWxcIiB8IFwiZm9yZWlnblwiO1xuICBmb3JtYXR0ZWQ6IHN0cmluZyB8IG51bGw7XG59O1xuXG4vKiBBcGkgKi9cbmV4cG9ydCB0eXBlIEFwaVBhcmFtID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IEFwaVBhcmFtVHlwZTtcbiAgb3B0aW9uYWw6IGJvb2xlYW47XG4gIGRlZmF1bHREZWY/OiBzdHJpbmc7XG59O1xuZXhwb3J0IG5hbWVzcGFjZSBBcGlQYXJhbVR5cGUge1xuICBleHBvcnQgdHlwZSBGdW5jdGlvbiA9IHtcbiAgICB0OiBcImZ1bmN0aW9uXCI7XG4gICAgcGFyYW1ldGVyczogQXBpUGFyYW1bXTtcbiAgICByZXR1cm5UeXBlOiBBcGlQYXJhbVR5cGU7XG4gIH07XG4gIGV4cG9ydCB0eXBlIE9iamVjdCA9IHtcbiAgICB0OiBcIm9iamVjdFwiO1xuICAgIHByb3BzOiBBcGlQYXJhbVtdO1xuICB9O1xuICBleHBvcnQgdHlwZSBVbmlvbiA9IHtcbiAgICB0OiBcInVuaW9uXCI7XG4gICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICB9O1xuICBleHBvcnQgdHlwZSBJbnRlcnNlY3Rpb24gPSB7XG4gICAgdDogXCJpbnRlcnNlY3Rpb25cIjtcbiAgICB0eXBlczogQXBpUGFyYW1UeXBlW107XG4gIH07XG4gIGV4cG9ydCB0eXBlIFN0cmluZ0xpdGVyYWwgPSB7XG4gICAgdDogXCJzdHJpbmctbGl0ZXJhbFwiO1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gIH07XG4gIGV4cG9ydCB0eXBlIE51bWVyaWNMaXRlcmFsID0ge1xuICAgIHQ6IFwibnVtZXJpYy1saXRlcmFsXCI7XG4gICAgdmFsdWU6IG51bWJlcjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgQXJyYXkgPSB7XG4gICAgdDogXCJhcnJheVwiO1xuICAgIGVsZW1lbnRzVHlwZTogQXBpUGFyYW1UeXBlO1xuICB9O1xuICBleHBvcnQgdHlwZSBSZWYgPSB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogc3RyaW5nO1xuICAgIGFyZ3M/OiBBcGlQYXJhbVR5cGVbXTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgSW5kZXhlZEFjY2VzcyA9IHtcbiAgICB0OiBcImluZGV4ZWQtYWNjZXNzXCI7XG4gICAgb2JqZWN0OiBBcGlQYXJhbVR5cGU7XG4gICAgaW5kZXg6IEFwaVBhcmFtVHlwZTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgVHVwbGVUeXBlID0ge1xuICAgIHQ6IFwidHVwbGUtdHlwZVwiO1xuICAgIGVsZW1lbnRzOiBBcGlQYXJhbVR5cGVbXTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgUGljayA9IFJlZiAmIHtcbiAgICB0OiBcInJlZlwiO1xuICAgIGlkOiBcIlBpY2tcIjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgT21pdCA9IFJlZiAmIHtcbiAgICB0OiBcInJlZlwiO1xuICAgIGlkOiBcIk9taXRcIjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgUGFydGlhbCA9IFJlZiAmIHtcbiAgICB0OiBcInJlZlwiO1xuICAgIGlkOiBcIlBhcnRpYWxcIjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgUHJvbWlzZSA9IFJlZiAmIHtcbiAgICB0OiBcInJlZlwiO1xuICAgIGlkOiBcIlByb21pc2VcIjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgQ29udGV4dCA9IFJlZiAmIHtcbiAgICB0OiBcInJlZlwiO1xuICAgIGlkOiBcIkNvbnRleHRcIjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgVHlwZVBhcmFtID0ge1xuICAgIHQ6IFwidHlwZS1wYXJhbVwiO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY29uc3RyYWludD86IEFwaVBhcmFtVHlwZTtcbiAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gaXNPYmplY3QodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLk9iamVjdCB7XG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5PYmplY3QpPy50ID09PSBcIm9iamVjdFwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1VuaW9uKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5VbmlvbiB7XG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5Vbmlvbik/LnQgPT09IFwidW5pb25cIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNJbnRlcnNlY3Rpb24odjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLkludGVyc2VjdGlvbiB7XG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5JbnRlcnNlY3Rpb24pPy50ID09PSBcImludGVyc2VjdGlvblwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZ0xpdGVyYWwodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlN0cmluZ0xpdGVyYWwge1xuICAgIHJldHVybiAodiBhcyBBcGlQYXJhbVR5cGUuU3RyaW5nTGl0ZXJhbCk/LnQgPT09IFwic3RyaW5nLWxpdGVyYWxcIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljTGl0ZXJhbCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuTnVtZXJpY0xpdGVyYWwge1xuICAgIHJldHVybiAodiBhcyBBcGlQYXJhbVR5cGUuTnVtZXJpY0xpdGVyYWwpPy50ID09PSBcIm51bWVyaWMtbGl0ZXJhbFwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc0FycmF5KHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5BcnJheSB7XG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5BcnJheSk/LnQgPT09IFwiYXJyYXlcIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNSZWYodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlJlZiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc0luZGV4ZWRBY2Nlc3ModjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLkluZGV4ZWRBY2Nlc3Mge1xuICAgIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJpbmRleGVkLWFjY2Vzc1wiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1R1cGxlVHlwZSh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuVHVwbGVUeXBlIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPT0gbnVsbCAmJiAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwidHVwbGUtdHlwZVwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1BpY2sodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlBpY2sge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgdiAhPT0gbnVsbCAmJlxuICAgICAgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiICYmXG4gICAgICAodiBhcyB7IGlkPzogdW5rbm93biB9KS5pZCA9PT0gXCJQaWNrXCJcbiAgICApO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc09taXQodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLk9taXQge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgdiAhPT0gbnVsbCAmJlxuICAgICAgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiICYmXG4gICAgICAodiBhcyB7IGlkPzogdW5rbm93biB9KS5pZCA9PT0gXCJPbWl0XCJcbiAgICApO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1BhcnRpYWwodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlBhcnRpYWwge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgdiAhPT0gbnVsbCAmJlxuICAgICAgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiICYmXG4gICAgICAodiBhcyB7IGlkPzogdW5rbm93biB9KS5pZCA9PT0gXCJQYXJ0aWFsXCJcbiAgICApO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1Byb21pc2UodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlByb21pc2Uge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgdiAhPT0gbnVsbCAmJlxuICAgICAgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiICYmXG4gICAgICAodiBhcyB7IGlkPzogdW5rbm93biB9KS5pZCA9PT0gXCJQcm9taXNlXCJcbiAgICApO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc0NvbnRleHQodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLkNvbnRleHQge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgdiAhPT0gbnVsbCAmJlxuICAgICAgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiICYmXG4gICAgICAodiBhcyB7IGlkPzogdW5rbm93biB9KS5pZCA9PT0gXCJDb250ZXh0XCJcbiAgICApO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1JlZktuZXgodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlJlZiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIktuZXhcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzVHlwZVBhcmFtKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5UeXBlUGFyYW0ge1xuICAgIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJ0eXBlLXBhcmFtXCI7XG4gIH1cbn1cbmV4cG9ydCB0eXBlIEFwaVBhcmFtVHlwZSA9XG4gIHwgXCJzdHJpbmdcIlxuICB8IFwibnVtYmVyXCJcbiAgfCBcImJvb2xlYW5cIlxuICB8IFwibnVsbFwiXG4gIHwgXCJ1bmRlZmluZWRcIlxuICB8IFwidm9pZFwiXG4gIHwgXCJhbnlcIlxuICB8IFwidW5rbm93blwiXG4gIHwgXCJ0cnVlXCJcbiAgfCBcImZhbHNlXCJcbiAgfCBBcGlQYXJhbVR5cGUuU3RyaW5nTGl0ZXJhbFxuICB8IEFwaVBhcmFtVHlwZS5OdW1lcmljTGl0ZXJhbFxuICB8IEFwaVBhcmFtVHlwZS5PYmplY3RcbiAgfCBBcGlQYXJhbVR5cGUuVW5pb25cbiAgfCBBcGlQYXJhbVR5cGUuSW50ZXJzZWN0aW9uXG4gIHwgQXBpUGFyYW1UeXBlLkFycmF5XG4gIHwgQXBpUGFyYW1UeXBlLlJlZlxuICB8IEFwaVBhcmFtVHlwZS5JbmRleGVkQWNjZXNzXG4gIHwgQXBpUGFyYW1UeXBlLlR5cGVQYXJhbVxuICB8IEFwaVBhcmFtVHlwZS5UdXBsZVR5cGVcbiAgfCBBcGlQYXJhbVR5cGUuRnVuY3Rpb247XG5cbi8qIFRlbXBsYXRlICovXG4vKipcbiAqIFVJIOy7tO2PrOuEjO2KuCDroIzrjZTrp4HsnYQg7JyE7ZWcIOuplO2DgOuNsOydtO2EsCDrhbjrk5zsnoXri4jri6QuXG4gKlxuICogKirrqqnsoIEqKjogWm9kIOyKpO2CpOuniOuhnOu2gO2EsCDtlITroaDtirjsl5Trk5wgVUkg7Lu07Y+s64SM7Yq466W8IOyekOuPmSDsg53shLHtlZjquLAg7JyE7ZWcXG4gKiDroIzrjZTrp4Eg7KCV67O066W8IOuLtOydgCDtirjrpqwg6rWs7KGw7J6F64uI64ukLiDqsIEg7ZWE65Oc6rCAIOyWtOuWpCBVSSDsu7Ttj6zrhIztirjroZxcbiAqIO2RnO2YhOuQmOyWtOyVvCDtlZjripTsp4Ao7YWN7Iqk7Yq4LCDsnbTrr7jsp4AsIOuCoOynnCwgRW51bSDshKDtg50g65OxKeulvCDrqoXsi5ztlanri4jri6QuXG4gKlxuICogKirrs4DtmZgg7Z2Q66aEKio6XG4gKiBFbnRpdHkgc3Vic2V0IOKGkiBFbnRpdHlQcm9wTm9kZSDihpIgWm9kIOyKpO2CpOuniCDihpIgUmVuZGVyaW5nTm9kZSAoVUnsmqkpIOKGkiBSZWFjdCDsu7Ttj6zrhIztirgg7L2U65OcIOyDneyEsVxuICpcbiAqICoq7KO87JqUIO2VhOuTnCoqOlxuICogLSBgcmVuZGVyVHlwZWA6IFVJIOy7tO2PrOuEjO2KuCDsnKDtmJUgKHN0cmluZy1wbGFpbiwgbnVtYmVyLWZrX2lkLCBlbnVtcywgYXJyYXkg65OxKVxuICogLSBgem9kVHlwZWA6IOybkOuzuCBab2Qg7Iqk7YKk66eIICh2YWxpZGF0aW9uIOyaqSlcbiAqIC0gYGNoaWxkcmVuYDog7KSR7LKp65CcIOqwneyytCDtlYTrk5zrk6QgKG9iamVjdOydvCDrlYwpXG4gKiAtIGBlbGVtZW50YDog67Cw7Je0IOyalOyGjCDtg4DsnoUgKGFycmF57J28IOuVjClcbiAqXG4gKiAqKuyCrOyaqSDsnITsuZgqKjpcbiAqIC0gem9kLWNvbnZlcnRlci50c+ydmCB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKCnsl5DshJwg7IOd7ISxXG4gKiAtIHZpZXdfZm9ybS50ZW1wbGF0ZS50cywgdmlld19saXN0LnRlbXBsYXRlLnRzIOuTseyXkOyEnCBSZWFjdCDsu7Ttj6zrhIztirgg7L2U65OcIOyDneyEseyXkCDsgqzsmqlcbiAqL1xuLy8g7IWA7ZSEIOywuOyhsCDtg4DsnoXsnbTrr4DroZwgWm9kIOyDneuete2VmOqzoCDsp4HsoJEg7KCV7J2YXG5leHBvcnQgY29uc3QgUmVuZGVyaW5nTm9kZSA9IHouYW55KCk7XG5leHBvcnQgdHlwZSBSZW5kZXJpbmdOb2RlID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHJlbmRlclR5cGU6XG4gICAgfCBcInN0cmluZy1wbGFpblwiXG4gICAgfCBcInN0cmluZy1pbWFnZVwiXG4gICAgfCBcInN0cmluZy1kYXRldGltZVwiXG4gICAgfCBcInN0cmluZy1kYXRlXCJcbiAgICB8IFwic3RyaW5nLWlkXCJcbiAgICB8IFwic3RyaW5nLWZrX2lkXCJcbiAgICB8IFwiZGF0ZXRpbWVcIlxuICAgIHwgXCJudW1iZXItcGxhaW5cIlxuICAgIHwgXCJudW1iZXItaWRcIlxuICAgIHwgXCJudW1iZXItZmtfaWRcIlxuICAgIHwgXCJib29sZWFuXCJcbiAgICB8IFwiZW51bXNcIlxuICAgIHwgXCJhcnJheVwiXG4gICAgfCBcImFycmF5LWltYWdlc1wiXG4gICAgfCBcImpzb24tc29uYW11ZmlsZVwiXG4gICAgfCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXG4gICAgfCBcIm9iamVjdFwiXG4gICAgfCBcIm9iamVjdC1waWNrXCJcbiAgICB8IFwicmVjb3JkXCJcbiAgICB8IFwidmVjdG9yXCI7XG4gIHpvZFR5cGU6IHouWm9kVHlwZUFueTtcbiAgZWxlbWVudD86IFJlbmRlcmluZ05vZGU7XG4gIGNoaWxkcmVuPzogUmVuZGVyaW5nTm9kZVtdO1xuICBjb25maWc/OiB7XG4gICAgcGlja2VkOiBzdHJpbmc7XG4gIH07XG4gIG9wdGlvbmFsPzogYm9vbGVhbjtcbiAgbnVsbGFibGU/OiBib29sZWFuO1xufTtcblxuY29uc3QgR2VuZXJhdGVkQ29sdW1uU2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmVudW0oW1wiU1RPUkVEXCIsIFwiVklSVFVBTFwiXSksXG4gIGV4cHJlc3Npb246IHouc3RyaW5nKCksXG59KTtcblxuY29uc3QgRml4dHVyZUNvbXBhbmlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW50aXR5OiB6LnN0cmluZygpLFxuICBvdmVycmlkZXM6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxuICBjb3VudDogei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpLm9wdGlvbmFsKCksXG59KTtcblxuLyoqXG4gKiBDb25lIOyKpO2CpOuniCDqsoDspp1cbiAqXG4gKiBjb25lIOuplO2DgOuNsOydtO2EsOydmCDsnKDtmqjshLHsnYQg6rKA7Kad7ZWp64uI64ukLlxuICovXG5jb25zdCBDb25lU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBub3RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgdGFnczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIGZpeHR1cmVHZW5lcmF0b3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBmaXh0dXJlRGVmYXVsdDogei51bmtub3duKCkub3B0aW9uYWwoKSxcbiAgICBmaXh0dXJlU3RyYXRlZ3k6IHoubGl0ZXJhbChcInNlcXVlbmNlXCIpLm9wdGlvbmFsKCksXG4gICAgZml4dHVyZUNvbXBhbmlvbnM6IHouYXJyYXkoRml4dHVyZUNvbXBhbmlvblNjaGVtYSkub3B0aW9uYWwoKSxcbiAgICBkYXRhU291cmNlOiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgc3RyYXRlZ3k6IHouZW51bShbXCJzYW1wbGVcIiwgXCJpZHNcIiwgXCJxdWVyeVwiLCBcImZpbGVcIiwgXCJyZWNlbnRcIiwgXCJyYW5kb21cIl0pLFxuICAgICAgICBjb25maWc6IHoudW5rbm93bigpLm9wdGlvbmFsKCksXG4gICAgICB9KVxuICAgICAgLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5jYXRjaGFsbCh6LnVua25vd24oKSk7IC8vIOyCrOyaqeyekCDsoJXsnZgg66mU7YOA642w7J207YSwIO2XiOyaqVxuXG5jb25zdCBCYXNlUHJvcEZpZWxkcyA9IHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgZGVzYzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBudWxsYWJsZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdG9GaWx0ZXI6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLm9wdGlvbmFsKCksXG4gIGRiRGVmYXVsdDogei51bmlvbihbei5zdHJpbmcoKSwgei5udW1iZXIoKSwgei5ib29sZWFuKCldKS5vcHRpb25hbCgpLFxuICBnZW5lcmF0ZWQ6IEdlbmVyYXRlZENvbHVtblNjaGVtYS5vcHRpb25hbCgpLFxuICBjb25lOiBDb25lU2NoZW1hLm9wdGlvbmFsKCksXG59O1xuXG4vLyDrtoDqsIAg7ZWE65Oc6rCAIO2VhOyalOyXhuuKlCBwcm9wXG5jb25zdCBCYXNlUHJvcEZpZWxkc1dpdGhvdXRBZGRpdGlvbmFsID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LnVuaW9uKFtcbiAgICAgIHoubGl0ZXJhbChcImludGVnZXJcIiksXG4gICAgICB6LmxpdGVyYWwoXCJpbnRlZ2VyW11cIiksXG4gICAgICB6LmxpdGVyYWwoXCJiaWdJbnRlZ2VyXCIpLFxuICAgICAgei5saXRlcmFsKFwiYmlnSW50ZWdlcltdXCIpLFxuICAgICAgei5saXRlcmFsKFwiYm9vbGVhblwiKSxcbiAgICAgIHoubGl0ZXJhbChcImJvb2xlYW5bXVwiKSxcbiAgICAgIHoubGl0ZXJhbChcInV1aWRcIiksXG4gICAgICB6LmxpdGVyYWwoXCJ1dWlkW11cIiksXG4gICAgICB6LmxpdGVyYWwoXCJ0c3ZlY3RvclwiKSxcbiAgICBdKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG4vLyBwcmVjaXNpb24vc2NhbGUg7ZWE65OcXG5jb25zdCBQcmVjaXNpb25TY2FsZUZpZWxkcyA9IHtcbiAgcHJlY2lzaW9uOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHNjYWxlOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG59O1xuXG4vLyDqsIEg7YOA7J6F67OEIOyKpO2CpOuniCDsoJXsnZhcblxuY29uc3QgU3RyaW5nUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwic3RyaW5nXCIpLFxuICAgIGxlbmd0aDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIHpvZEZvcm1hdDogWm9kU3RyaW5nRm9ybWF0Lm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IFN0cmluZ0FycmF5UHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwic3RyaW5nW11cIiksXG4gICAgbGVuZ3RoOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgem9kRm9ybWF0OiBab2RTdHJpbmdGb3JtYXQub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBFbnVtUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwiZW51bVwiKSxcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgICBsZW5ndGg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuY29uc3QgRW51bUFycmF5UHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwiZW51bVtdXCIpLFxuICAgIGlkOiB6LnN0cmluZygpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IE51bWJlclByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcIm51bWJlclwiKSxcbiAgICAuLi5QcmVjaXNpb25TY2FsZUZpZWxkcyxcbiAgICBudW1iZXJUeXBlOiB6LmVudW0oW1wicmVhbFwiLCBcImRvdWJsZSBwcmVjaXNpb25cIiwgXCJudW1lcmljXCJdKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5jb25zdCBOdW1iZXJBcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcIm51bWJlcltdXCIpLFxuICAgIC4uLlByZWNpc2lvblNjYWxlRmllbGRzLFxuICAgIG51bWJlclR5cGU6IHouZW51bShbXCJyZWFsXCIsIFwiZG91YmxlIHByZWNpc2lvblwiLCBcIm51bWVyaWNcIl0pLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgRGF0ZVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImRhdGVcIiksXG4gICAgcHJlY2lzaW9uOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IERhdGVBcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImRhdGVbXVwiKSxcbiAgICBwcmVjaXNpb246IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBOdW1lcmljUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwibnVtZXJpY1wiKSxcbiAgICAuLi5QcmVjaXNpb25TY2FsZUZpZWxkcyxcbiAgfSlcbiAgLnN0cmljdCgpO1xuY29uc3QgTnVtZXJpY0FycmF5UHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwibnVtZXJpY1tdXCIpLFxuICAgIC4uLlByZWNpc2lvblNjYWxlRmllbGRzLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IEpzb25Qcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJqc29uXCIpLFxuICAgIGlkOiB6LnN0cmluZygpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFNlYXJjaFRleHRTb3VyY2VDb2x1bW5TY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgY2FzZUluc2Vuc2l0aXZlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFNlYXJjaFRleHRQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJzZWFyY2hUZXh0XCIpLFxuICAgIHNvdXJjZUNvbHVtbnM6IHouYXJyYXkoU2VhcmNoVGV4dFNvdXJjZUNvbHVtblNjaGVtYSkubWluKDEpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFZpcnR1YWxQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ2aXJ0dWFsXCIpLFxuICAgIGlkOiB6LnN0cmluZygpLFxuICAgIHZpcnR1YWxUeXBlOiB6LmVudW0oW1wicXVlcnlcIiwgXCJjb2RlXCJdKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFZlY3RvclByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcInZlY3RvclwiKSxcbiAgICBkaW1lbnNpb25zOiB6Lm51bWJlcigpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5jb25zdCBWZWN0b3JBcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcInZlY3RvcltdXCIpLFxuICAgIGRpbWVuc2lvbnM6IHoubnVtYmVyKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuLy8gUmVsYXRpb24g7YOA7J6F7J2AIHJlbGF0aW9uVHlwZeyXkCDrlLDrnbwg7IS467aE7ZmUXG5jb25zdCBCYXNlUmVsYXRpb25GaWVsZHMgPSB7XG4gIC4uLkJhc2VQcm9wRmllbGRzLFxuICB0eXBlOiB6LmxpdGVyYWwoXCJyZWxhdGlvblwiKSxcbiAgd2l0aDogei5zdHJpbmcoKSxcbn07XG5cbi8vIFJlbGF0aW9uT24g7YOA7J6FXG5jb25zdCBSZWxhdGlvbk9uU2NoZW1hID0gei5lbnVtKFtcIkNBU0NBREVcIiwgXCJTRVQgTlVMTFwiLCBcIk5PIEFDVElPTlwiLCBcIlNFVCBERUZBVUxUXCIsIFwiUkVTVFJJQ1RcIl0pO1xuXG5jb25zdCBCZWxvbmdzVG9PbmVSZWxhdGlvblByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VSZWxhdGlvbkZpZWxkcyxcbiAgICByZWxhdGlvblR5cGU6IHoubGl0ZXJhbChcIkJlbG9uZ3NUb09uZVwiKSxcbiAgICBjdXN0b21Kb2luQ2xhdXNlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgdXNlQ29uc3RyYWludDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBvblVwZGF0ZTogUmVsYXRpb25PblNjaGVtYS5vcHRpb25hbCgpLFxuICAgIG9uRGVsZXRlOiBSZWxhdGlvbk9uU2NoZW1hLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgSGFzTWFueVJlbGF0aW9uUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVJlbGF0aW9uRmllbGRzLFxuICAgIHJlbGF0aW9uVHlwZTogei5saXRlcmFsKFwiSGFzTWFueVwiKSxcbiAgICBqb2luQ29sdW1uOiB6LnN0cmluZygpLFxuICAgIGZyb21Db2x1bW46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBNYW55VG9NYW55UmVsYXRpb25Qcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUmVsYXRpb25GaWVsZHMsXG4gICAgcmVsYXRpb25UeXBlOiB6LmxpdGVyYWwoXCJNYW55VG9NYW55XCIpLFxuICAgIGpvaW5UYWJsZTogei5zdHJpbmcoKSxcbiAgICBvblVwZGF0ZTogUmVsYXRpb25PblNjaGVtYSxcbiAgICBvbkRlbGV0ZTogUmVsYXRpb25PblNjaGVtYSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBPbmVUb09uZVJlbGF0aW9uUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVJlbGF0aW9uRmllbGRzLFxuICAgIHJlbGF0aW9uVHlwZTogei5saXRlcmFsKFwiT25lVG9PbmVcIiksXG4gICAgY3VzdG9tSm9pbkNsYXVzZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGhhc0pvaW5Db2x1bW46IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgdXNlQ29uc3RyYWludDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBvblVwZGF0ZTogUmVsYXRpb25PblNjaGVtYS5vcHRpb25hbCgpLFxuICAgIG9uRGVsZXRlOiBSZWxhdGlvbk9uU2NoZW1hLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgUmVsYXRpb25UeXBlcyA9IFtcIkJlbG9uZ3NUb09uZVwiLCBcIkhhc01hbnlcIiwgXCJNYW55VG9NYW55XCIsIFwiT25lVG9PbmVcIl0gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgUmVsYXRpb25Qcm9wU2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oXG4gIFwicmVsYXRpb25UeXBlXCIsXG4gIFtcbiAgICBCZWxvbmdzVG9PbmVSZWxhdGlvblByb3BTY2hlbWEsXG4gICAgSGFzTWFueVJlbGF0aW9uUHJvcFNjaGVtYSxcbiAgICBNYW55VG9NYW55UmVsYXRpb25Qcm9wU2NoZW1hLFxuICAgIE9uZVRvT25lUmVsYXRpb25Qcm9wU2NoZW1hLFxuICBdLFxuICB7XG4gICAgZXJyb3I6IChpc3MpID0+XG4gICAgICBgcmVsYXRpb25UeXBl7J2AICR7UmVsYXRpb25UeXBlcy5tYXAoKHQpID0+IGAnJHt0fSdgKS5qb2luKFwiLCBcIil9IOykkSDtlZjrgpjsl6zslbwg7ZWp64uI64ukLiDsnoXroKXqsJI6IFwiJHsoaXNzLmlucHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KT8ucmVsYXRpb25UeXBlfVwiYCxcbiAgfSxcbik7XG5cbmNvbnN0IE5vcm1hbFByb3BUeXBlcyA9IFtcbiAgXCJpbnRlZ2VyXCIsXG4gIFwiaW50ZWdlcltdXCIsXG4gIFwiYmlnSW50ZWdlclwiLFxuICBcImJpZ0ludGVnZXJbXVwiLFxuICBcInN0cmluZ1wiLFxuICBcInN0cmluZ1tdXCIsXG4gIFwiZW51bVwiLFxuICBcImVudW1bXVwiLFxuICBcIm51bWJlclwiLFxuICBcIm51bWJlcltdXCIsXG4gIFwibnVtZXJpY1wiLFxuICBcIm51bWVyaWNbXVwiLFxuICBcImJvb2xlYW5cIixcbiAgXCJib29sZWFuW11cIixcbiAgXCJkYXRlXCIsXG4gIFwiZGF0ZVtdXCIsXG4gIFwidXVpZFwiLFxuICBcInV1aWRbXVwiLFxuICBcImpzb25cIixcbiAgXCJzZWFyY2hUZXh0XCIsXG4gIFwidmlydHVhbFwiLFxuICBcInZlY3RvclwiLFxuICBcInZlY3RvcltdXCIsXG4gIFwidHN2ZWN0b3JcIixcbl0gYXMgY29uc3Q7XG5cbi8vIFZJUlRVQUwgR2VuZXJhdGVkIENvbHVtbuyXkOyEnCDsgqzsmqkg67aI6rCA64ql7ZWcIO2DgOyeheuTpFxuY29uc3QgVmlydHVhbEdlbmVyYXRlZERpc2FsbG93ZWRUeXBlcyA9IFtcbiAgXCJqc29uXCIsXG4gIFwidmVjdG9yXCIsXG4gIFwidmVjdG9yW11cIixcbiAgXCJzdHJpbmdbXVwiLFxuICBcImludGVnZXJbXVwiLFxuICBcImJpZ0ludGVnZXJbXVwiLFxuICBcImJvb2xlYW5bXVwiLFxuICBcImRhdGVbXVwiLFxuICBcInV1aWRbXVwiLFxuICBcIm51bWJlcltdXCIsXG4gIFwibnVtZXJpY1tdXCIsXG4gIFwiZW51bVtdXCIsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgTm9ybWFsUHJvcFNjaGVtYSA9IHpcbiAgLmRpc2NyaW1pbmF0ZWRVbmlvbihcbiAgICBcInR5cGVcIixcbiAgICBbXG4gICAgICBCYXNlUHJvcEZpZWxkc1dpdGhvdXRBZGRpdGlvbmFsLFxuICAgICAgU3RyaW5nUHJvcFNjaGVtYSxcbiAgICAgIFN0cmluZ0FycmF5UHJvcFNjaGVtYSxcbiAgICAgIEVudW1Qcm9wU2NoZW1hLFxuICAgICAgRW51bUFycmF5UHJvcFNjaGVtYSxcbiAgICAgIE51bWJlclByb3BTY2hlbWEsXG4gICAgICBOdW1iZXJBcnJheVByb3BTY2hlbWEsXG4gICAgICBEYXRlUHJvcFNjaGVtYSxcbiAgICAgIERhdGVBcnJheVByb3BTY2hlbWEsXG4gICAgICBOdW1lcmljUHJvcFNjaGVtYSxcbiAgICAgIE51bWVyaWNBcnJheVByb3BTY2hlbWEsXG4gICAgICBKc29uUHJvcFNjaGVtYSxcbiAgICAgIFNlYXJjaFRleHRQcm9wU2NoZW1hLFxuICAgICAgVmlydHVhbFByb3BTY2hlbWEsXG4gICAgICBWZWN0b3JQcm9wU2NoZW1hLFxuICAgICAgVmVjdG9yQXJyYXlQcm9wU2NoZW1hLFxuICAgIF0sXG4gICAge1xuICAgICAgZXJyb3I6IChpc3MpID0+XG4gICAgICAgIGB0eXBl7J2AICR7Tm9ybWFsUHJvcFR5cGVzLm1hcCgodCkgPT4gYCcke3R9J2ApLmpvaW4oXCIsIFwiKX0g7KSRIO2VmOuCmOyXrOyVvCDtlanri4jri6QuIOyeheugpeqwkjogXCIkeyhpc3MuaW5wdXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pPy50eXBlfVwiYCxcbiAgICB9LFxuICApXG4gIC5zdXBlclJlZmluZSgoZGF0YSwgY3R4KSA9PiB7XG4gICAgaWYgKCFkYXRhLmdlbmVyYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGRiRGVmYXVsdOyZgCBnZW5lcmF0ZWQg64+Z7IucIOyCrOyaqSDrtojqsIBcbiAgICBpZiAoZGF0YS5kYkRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgY29kZTogXCJjdXN0b21cIixcbiAgICAgICAgbWVzc2FnZTogXCJkYkRlZmF1bHTsmYAgZ2VuZXJhdGVk64qUIO2VqOq7mCDsgqzsmqntlaAg7IiYIOyXhuyKteuLiOuLpFwiLFxuICAgICAgICBwYXRoOiBbXCJnZW5lcmF0ZWRcIl0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB2aXJ0dWFsIO2DgOyeheydgCBnZW5lcmF0ZWQg67aI6rCAXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gXCJ2aXJ0dWFsXCIpIHtcbiAgICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgIGNvZGU6IFwiY3VzdG9tXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwidmlydHVhbCDtg4DsnoXsnYAgZ2VuZXJhdGVkIGNvbHVtbuydhCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukXCIsXG4gICAgICAgIHBhdGg6IFtcImdlbmVyYXRlZFwiXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFZJUlRVQUwgR2VuZXJhdGVkIENvbHVtbiDtg4DsnoUg7KCc7ZWcIOqygOymnVxuICAgIGlmIChkYXRhLmdlbmVyYXRlZC50eXBlID09PSBcIlZJUlRVQUxcIikge1xuICAgICAgaWYgKChWaXJ0dWFsR2VuZXJhdGVkRGlzYWxsb3dlZFR5cGVzIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhkYXRhLnR5cGUpKSB7XG4gICAgICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgICAgY29kZTogXCJjdXN0b21cIixcbiAgICAgICAgICBtZXNzYWdlOiBgVklSVFVBTCBnZW5lcmF0ZWQgY29sdW1u7J2AICR7ZGF0YS50eXBlfSDtg4DsnoXsnYQg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpC4gU1RPUkVE66W8IOyCrOyaqe2VmOyEuOyalC5gLFxuICAgICAgICAgIHBhdGg6IFtcImdlbmVyYXRlZFwiLCBcInR5cGVcIl0sXG4gICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbmNvbnN0IEFsbFByb3BUeXBlcyA9IFsuLi5Ob3JtYWxQcm9wVHlwZXMsIFwicmVsYXRpb25cIl0gYXMgY29uc3Q7XG5jb25zdCBFbnRpdHlQcm9wU2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtOb3JtYWxQcm9wU2NoZW1hLCBSZWxhdGlvblByb3BTY2hlbWFdLCB7XG4gIGVycm9yOiAoaXNzKSA9PlxuICAgIGB0eXBl7J2AICR7QWxsUHJvcFR5cGVzLm1hcCgodCkgPT4gYCcke3R9J2ApLmpvaW4oXCIsIFwiKX0g7KSRIO2VmOuCmOyXrOyVvCDtlanri4jri6QuIOyeheugpeqwkjogXCIkeyhpc3MuaW5wdXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pPy50eXBlfVwiYCxcbn0pO1xuXG5jb25zdCBFbnRpdHlJbmRleENvbHVtblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgbnVsbHNGaXJzdDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgc29ydE9yZGVyOiB6LmVudW0oW1wiQVNDXCIsIFwiREVTQ1wiXSkub3B0aW9uYWwoKSxcbiAgdmVjdG9yT3BzOiB6LmVudW0oW1widmVjdG9yX2Nvc2luZV9vcHNcIiwgXCJ2ZWN0b3JfaXBfb3BzXCIsIFwidmVjdG9yX2wyX29wc1wiXSkub3B0aW9uYWwoKSxcbiAgb3BjbGFzczogei51bmlvbihbei5lbnVtKEtub3duT3BjbGFzc1ZhbHVlcyksIHouc3RyaW5nKCkubWluKDEpXSkub3B0aW9uYWwoKSxcbn0pO1xuXG4vLyBFbnRpdHlJbmRleCDsiqTtgqTrp4gg7KCV7J2YXG5jb25zdCBFbnRpdHlJbmRleFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdHlwZTogei5lbnVtKFtcImluZGV4XCIsIFwidW5pcXVlXCIsIFwiaG5zd1wiLCBcIml2ZmZsYXRcIl0pLFxuICAgIGNvbHVtbnM6IHouYXJyYXkoRW50aXR5SW5kZXhDb2x1bW5TY2hlbWEpLFxuICAgIG5hbWU6IHouc3RyaW5nKCkubWluKDEpLm1heCg2MyksXG4gICAgdXNpbmc6IHouZW51bShbXCJidHJlZVwiLCBcImhhc2hcIiwgXCJnaW5cIiwgXCJnaXN0XCIsIFwicGdyb29uZ2FcIl0pLm9wdGlvbmFsKCksXG4gICAgbnVsbHNOb3REaXN0aW5jdDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBtOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgZWZDb25zdHJ1Y3Rpb246IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBsaXN0czogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbi8qKlxuICogU3Vic2V0RGVmIOyKpO2CpOuniFxuICpcbiAqIO2VmOychCDtmLjtmZjshLHsnYQg7JyE7ZW0IOuwsOyXtCDtmJXtg5zsmYAg6rCd7LK0IO2Yle2DnCDrkZgg64ukIOyngOybkO2VqeuLiOuLpC5cbiAqL1xuY29uc3QgU3Vic2V0RGVmU2NoZW1hID0gei51bmlvbihbXG4gIC8vIOq4sOyhtCDrsLDsl7Qg7ZiV7YOcXG4gIHouYXJyYXkoei51bmlvbihbei5zdHJpbmcoKSwgei5vYmplY3QoeyBmaWVsZDogei5zdHJpbmcoKSwgaW50ZXJuYWw6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkgfSldKSksXG4gIC8vIOyDiOuhnOyatCDqsJ3ssrQg7ZiV7YOcXG4gIHoub2JqZWN0KHtcbiAgICBmaWVsZHM6IHouYXJyYXkoXG4gICAgICB6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm9iamVjdCh7IGZpZWxkOiB6LnN0cmluZygpLCBpbnRlcm5hbDogei5ib29sZWFuKCkub3B0aW9uYWwoKSB9KV0pLFxuICAgICksXG4gICAgY29uZTogQ29uZVNjaGVtYS5vcHRpb25hbCgpLFxuICB9KSxcbl0pO1xuXG4vKipcbiAqIEVudW1EZWYg7Iqk7YKk66eIXG4gKlxuICog7ZWY7JyEIO2YuO2ZmOyEseydhCDsnITtlbQgUmVjb3JkIO2Yle2DnOyZgCDqsJ3ssrQg7ZiV7YOcIOuRmCDri6Qg7KeA7JuQ7ZWp64uI64ukLlxuICovXG5jb25zdCBFbnVtRGVmU2NoZW1hID0gei51bmlvbihbXG4gIC8vIOq4sOyhtCBSZWNvcmQg7ZiV7YOcXG4gIHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLFxuICAvLyDsg4jroZzsmrQg6rCd7LK0IO2Yle2DnFxuICB6Lm9iamVjdCh7XG4gICAgdmFsdWVzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKSxcbiAgICBjb25lOiBDb25lU2NoZW1hLm9wdGlvbmFsKCksXG4gIH0pLFxuXSk7XG5cbmZ1bmN0aW9uIHVud3JhcFNlYXJjaFRleHRKc29uU291cmNlVHlwZSh6b2RUeXBlOiB6LlpvZFR5cGVBbnkpOiB6LlpvZFR5cGVBbnkge1xuICBsZXQgY3VycmVudCA9IHpvZFR5cGU7XG5cbiAgd2hpbGUgKGN1cnJlbnQgaW5zdGFuY2VvZiB6LlpvZE9wdGlvbmFsIHx8IGN1cnJlbnQgaW5zdGFuY2VvZiB6LlpvZE51bGxhYmxlKSB7XG4gICAgY3VycmVudCA9IGN1cnJlbnQudW53cmFwKCkgYXMgei5ab2RUeXBlQW55O1xuICB9XG5cbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NlYXJjaFRleHRKc29uU291cmNlWm9kVHlwZSh6b2RUeXBlOiB6LlpvZFR5cGVBbnkpOiBib29sZWFuIHtcbiAgY29uc3QgYmFzZVR5cGUgPSB1bndyYXBTZWFyY2hUZXh0SnNvblNvdXJjZVR5cGUoem9kVHlwZSk7XG4gIGlmICghKGJhc2VUeXBlIGluc3RhbmNlb2Ygei5ab2RBcnJheSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBlbGVtZW50VHlwZSA9IGJhc2VUeXBlLmRlZi5lbGVtZW50O1xuICByZXR1cm4gZWxlbWVudFR5cGUgaW5zdGFuY2VvZiB6LlpvZFN0cmluZztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTZWFyY2hUZXh0U291cmNlcyhcbiAgcHJvcHM6IHJlYWRvbmx5IHouaW5mZXI8dHlwZW9mIEVudGl0eVByb3BTY2hlbWE+W10sXG4gIGN0eDogei5SZWZpbmVtZW50Q3R4LFxuICBwcm9wc1BhdGg6IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXCJwcm9wc1wiXSxcbik6IHZvaWQge1xuICBjb25zdCBwcm9wc0J5TmFtZSA9IG5ldyBNYXAoXG4gICAgcHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICByZXR1cm4gW3Byb3AubmFtZSwgcHJvcF07XG4gICAgfSksXG4gICk7XG5cbiAgcHJvcHMuZm9yRWFjaCgocHJvcCwgcHJvcEluZGV4KSA9PiB7XG4gICAgaWYgKHByb3AudHlwZSAhPT0gXCJzZWFyY2hUZXh0XCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9wLnNvdXJjZUNvbHVtbnMuZm9yRWFjaCgoc291cmNlLCBzb3VyY2VJbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlUHJvcCA9IHByb3BzQnlOYW1lLmdldChzb3VyY2UubmFtZSk7XG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gWy4uLnByb3BzUGF0aCwgcHJvcEluZGV4LCBcInNvdXJjZUNvbHVtbnNcIiwgc291cmNlSW5kZXgsIFwibmFtZVwiXTtcblxuICAgICAgaWYgKCFzb3VyY2VQcm9wKSB7XG4gICAgICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgICAgY29kZTogXCJjdXN0b21cIixcbiAgICAgICAgICBtZXNzYWdlOiBgc2VhcmNoVGV4dCBzb3VyY2UgY29sdW1uIFwiJHtzb3VyY2UubmFtZX1cIuydhCjrpbwpIOywvuydhCDsiJgg7JeG7Iq164uI64ukLmAsXG4gICAgICAgICAgcGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHNvdXJjZVByb3AudHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBzb3VyY2VQcm9wLnR5cGUgPT09IFwic3RyaW5nW11cIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzb3VyY2VQcm9wLnR5cGUgPT09IFwianNvblwiKSB7XG4gICAgICAgIC8vIGpzb24gc291cmNl7J2YIOy1nOyihSDtg4DsnoUg7Jyg7Zqo7ISx7J2AIEVudGl0eU1hbmFnZXIucmVnaXN0ZXIoKSDri6jqs4Tsl5DshJxcbiAgICAgICAgLy8g7Iuk7KCcIFpvZCDtg4DsnoXsnYQg7ZW07ISd7ZWY7JesIOq1rOyhsOyggeycvOuhnCDqsoDspp3tlanri4jri6QuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgY29kZTogXCJjdXN0b21cIixcbiAgICAgICAgbWVzc2FnZTogYHNlYXJjaFRleHQgc291cmNlIGNvbHVtbiBcIiR7c291cmNlLm5hbWV9XCLsnZgg7YOA7J6FIFwiJHtzb3VyY2VQcm9wLnR5cGV9XCLsnYAo64qUKSDsp4Dsm5DrkJjsp4Ag7JWK7Iq164uI64ukLmAsXG4gICAgICAgIHBhdGg6IHNvdXJjZVBhdGgsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IEVudGl0eUpzb25CYXNlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBpZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlBhc2NhbENhc2XroZwg65CcIEVudGl0eSBJRFwiKSxcbiAgICB0aXRsZTogei5zdHJpbmcoKS5kZXNjcmliZShcIkVudGl0eSDsnbTrpoRcIiksXG4gICAgdGFibGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJzbmFrZV9jYXNl66GcIOuQnCDthYzsnbTruJTrqoVcIiksXG4gICAgcGFyZW50SWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIuu2gOuqqCBFbnRpdHkgSURcIiksXG4gICAgY29uZTogQ29uZVNjaGVtYS5vcHRpb25hbCgpLFxuICAgIHByb3BzOiB6LmFycmF5KEVudGl0eVByb3BTY2hlbWEpLFxuICAgIGluZGV4ZXM6IHouYXJyYXkoRW50aXR5SW5kZXhTY2hlbWEpLFxuICAgIHN1YnNldHM6IHoucmVjb3JkKHouc3RyaW5nKCksIFN1YnNldERlZlNjaGVtYSksXG4gICAgZW51bXM6IHoucmVjb3JkKHouc3RyaW5nKCksIEVudW1EZWZTY2hlbWEpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmV4cG9ydCBjb25zdCBFbnRpdHlKc29uU2NoZW1hID0gRW50aXR5SnNvbkJhc2VTY2hlbWEuc3VwZXJSZWZpbmUoKGVudGl0eSwgY3R4KSA9PiB7XG4gIHZhbGlkYXRlU2VhcmNoVGV4dFNvdXJjZXMoZW50aXR5LnByb3BzLCBjdHgpO1xufSk7XG5cbmNvbnN0IFRlbXBsYXRlRW50aXR5U2NoZW1hID0gRW50aXR5SnNvbkJhc2VTY2hlbWEub21pdCh7IGlkOiB0cnVlIH0pXG4gIC5leHRlbmQoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KVxuICAucGFydGlhbCh7XG4gICAgdGFibGU6IHRydWUsXG4gICAgcHJvcHM6IHRydWUsXG4gICAgaW5kZXhlczogdHJ1ZSxcbiAgICBzdWJzZXRzOiB0cnVlLFxuICAgIGVudW1zOiB0cnVlLFxuICB9KVxuICAuc3VwZXJSZWZpbmUoKGVudGl0eSwgY3R4KSA9PiB7XG4gICAgaWYgKCFlbnRpdHkucHJvcHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZVNlYXJjaFRleHRTb3VyY2VzKGVudGl0eS5wcm9wcywgY3R4KTtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBUZW1wbGF0ZU9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gIGVudGl0eTogVGVtcGxhdGVFbnRpdHlTY2hlbWEsXG4gIGluaXRfdHlwZXM6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGdlbmVyYXRlZDogei5vYmplY3Qoe30pLFxuICBnZW5lcmF0ZWRfc3NvOiB6Lm9iamVjdCh7fSksXG4gIGdlbmVyYXRlZF9odHRwOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBtb2RlbDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICAgIGRlZmF1bHRTZWFyY2hGaWVsZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRlZmF1bHRPcmRlckJ5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBtb2RlbF90ZXN0OiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBicmlkZ2U6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHNlcnZpY2VzOiB6Lm9iamVjdCh7fSksXG4gIHZpZXdfbGlzdDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICAgIGV4dHJhOiB6LnVua25vd24oKSxcbiAgfSksXG4gIHZpZXdfbGlzdF9jb2x1bW5zOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgY29sdW1uczogelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICAgIGxhYmVsOiB6LnN0cmluZygpLFxuICAgICAgICB0Yzogei5zdHJpbmcoKSxcbiAgICAgIH0pXG4gICAgICAuYXJyYXkoKSxcbiAgICBjb2x1bW5JbXBvcnRzOiB6LnN0cmluZygpLFxuICB9KSxcbiAgdmlld19zZWFyY2hfaW5wdXQ6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHZpZXdfZm9ybTogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgdmlld19pZF9hbGxfc2VsZWN0OiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X2VudW1zX2J1dHRvbnNldDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICAgIGVudW1JZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHF1ZXJpZXM6IHoub2JqZWN0KHt9KSxcbiAgZW50cnlfc2VydmVyOiB6Lm9iamVjdCh7fSksXG4gIHNkOiB6Lm9iamVjdCh7XG4gICAgdGFyZ2V0OiB6LmVudW0oW1wiYXBpXCIsIFwid2ViXCIsIFwiYXBwXCJdKSxcbiAgfSksXG59KTtcbmV4cG9ydCB0eXBlIFRlbXBsYXRlT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFRlbXBsYXRlT3B0aW9ucz47XG5cbmV4cG9ydCBjb25zdCBUZW1wbGF0ZUtleSA9IHouZW51bShbXG4gIFwiZW50aXR5XCIsXG4gIFwiaW5pdF90eXBlc1wiLFxuICBcImdlbmVyYXRlZFwiLFxuICBcImdlbmVyYXRlZF9zc29cIixcbiAgXCJnZW5lcmF0ZWRfaHR0cFwiLFxuICBcIm1vZGVsXCIsXG4gIFwibW9kZWxfdGVzdFwiLFxuICBcImJyaWRnZVwiLFxuICBcInNlcnZpY2VzXCIsXG4gIFwidmlld19saXN0XCIsXG4gIFwidmlld19saXN0X2NvbHVtbnNcIixcbiAgXCJ2aWV3X3NlYXJjaF9pbnB1dFwiLFxuICBcInZpZXdfZm9ybVwiLFxuICBcInZpZXdfaWRfYWxsX3NlbGVjdFwiLFxuICBcInZpZXdfZW51bXNfYnV0dG9uc2V0XCIsXG4gIFwicXVlcmllc1wiLFxuICBcImVudHJ5X3NlcnZlclwiLFxuICBcInNkXCIsXG5dKTtcbmV4cG9ydCB0eXBlIFRlbXBsYXRlS2V5ID0gei5pbmZlcjx0eXBlb2YgVGVtcGxhdGVLZXk+O1xuXG5leHBvcnQgY29uc3QgR2VuZXJhdGVPcHRpb25zID0gei5vYmplY3Qoe1xuICBvdmVyd3JpdGU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEdlbmVyYXRlT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIEdlbmVyYXRlT3B0aW9ucz47XG5cbmV4cG9ydCBjb25zdCBQYXRoQW5kQ29kZSA9IHoub2JqZWN0KHtcbiAgcGF0aDogei5zdHJpbmcoKSxcbiAgY29kZTogei5zdHJpbmcoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUGF0aEFuZENvZGUgPSB6LmluZmVyPHR5cGVvZiBQYXRoQW5kQ29kZT47XG5cbmV4cG9ydCB0eXBlIEZpeHR1cmVTZWFyY2hPcHRpb25zID0ge1xuICBlbnRpdHlJZDogc3RyaW5nO1xuICBmaWVsZDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBzZWFyY2hUeXBlOiBcImVxdWFsc1wiIHwgXCJsaWtlXCI7XG59O1xuXG50eXBlIENvbHVtblZhbHVlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IERhdGUgfCBudWxsO1xuZXhwb3J0IHR5cGUgRml4dHVyZVJlY29yZCA9IHtcbiAgZml4dHVyZUlkOiBzdHJpbmc7XG4gIGVudGl0eUlkOiBzdHJpbmc7XG4gIGlkOiBudW1iZXIgfCBzdHJpbmc7XG4gIGNvbHVtbnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICBwcm9wOiBFbnRpdHlQcm9wO1xuICAgICAgdmFsdWU6IENvbHVtblZhbHVlIHwgQ29sdW1uVmFsdWVbXTtcbiAgICB9O1xuICB9O1xuICBmZXRjaGVkUmVjb3Jkczogc3RyaW5nW107XG4gIGJlbG9uZ3NSZWNvcmRzOiBzdHJpbmdbXTtcbiAgdGFyZ2V0PzogRml4dHVyZVJlY29yZDsgLy8gSW1wb3J0IOuMgOyDgSBEQiDroIjsvZTrk5woaWTqsIAg6rCZ7J2AKVxuICB1bmlxdWU/OiBGaXh0dXJlUmVjb3JkOyAvLyBJbXBvcnQg64yA7IOBIERCIOugiOy9lOuTnCh1bmlxdWUga2V56rCAIOqwmeydgClcbiAgb3ZlcnJpZGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRml4dHVyZUltcG9ydFJlc3VsdCA9IHtcbiAgZW50aXR5SWQ6IHN0cmluZztcbiAgZGF0YToge1xuICAgIFtrZXk6IHN0cmluZ106IENvbHVtblZhbHVlO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgUmVsYXRpb25Ob2RlID0ge1xuICBmaXh0dXJlSWQ6IHN0cmluZztcbiAgZW50aXR5SWQ6IHN0cmluZztcbiAgcmVsYXRlZDogU2V0PHN0cmluZz47XG59O1xuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRW1wdHlJbnRlcmZhY2U6IHNvbmFtdS5nZW5lcmF0ZWQuc3NvIOyXkOyEnCDtmZXsnqXsnYQg7JyE7ZW0IOykgOu5hOuQnCDruYgg7J247YSw7Y6Y7J207IqkXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlU2NoZW1hRXh0ZW5kIHt9XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRW1wdHlJbnRlcmZhY2U6IHNvbmFtdS5nZW5lcmF0ZWQuc3NvIOyXkOyEnCDtmZXsnqXsnYQg7JyE7ZW0IOykgOu5hOuQnCDruYgg7J247YSw7Y6Y7J207IqkXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlRm9yZWlnbktleXMge31cbmV4cG9ydCB0eXBlIE1hbnlUb01hbnlCYXNlU2NoZW1hPFxuICBGcm9tSWRLZXkgZXh0ZW5kcyBzdHJpbmcsXG4gIFRvSWRLZXkgZXh0ZW5kcyBzdHJpbmcsXG4gIEZyb21Qa1R5cGUgPSBudW1iZXIsXG4gIFRvUGtUeXBlID0gbnVtYmVyLFxuPiA9IHtcbiAgaWQ6IG51bWJlcjtcbn0gJiB7XG4gIFtLIGluIGAke0Zyb21JZEtleX1faWRgXTogRnJvbVBrVHlwZTtcbn0gJiB7XG4gIFtLIGluIGAke1RvSWRLZXl9X2lkYF06IFRvUGtUeXBlO1xufTtcblxuLy8g6rCd7LK0LCDtlajsiJgsIOu5hOuPmeq4sCDtlajsiJjrpbwg66qo65GQIO2PrOq0hO2VmOuKlCDtg4DsnoVcbmV4cG9ydCB0eXBlIEV4ZWN1dGFibGU8VD4gPSBUIHwgUHJvbWlzZTxUPiB8ICgoKSA9PiBUKSB8ICgoKSA9PiBQcm9taXNlPFQ+KTtcblxuZXhwb3J0IHR5cGUgU29uYW11RmFzdGlmeUNvbmZpZyA9IHtcbiAgY29udGV4dFByb3ZpZGVyOiAoXG4gICAgZGVmYXVsdENvbnRleHQ6IFBpY2s8XG4gICAgICBDb250ZXh0LFxuICAgICAgXCJyZXF1ZXN0XCIgfCBcInJlcGx5XCIgfCBcImhlYWRlcnNcIiB8IFwiY3JlYXRlU1NFXCIgfCBcIm5haXRlU3RvcmVcIiB8IFwibG9jYWxlXCIgfCBcInVzZXJcIiB8IFwic2Vzc2lvblwiXG4gICAgPixcbiAgICByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCxcbiAgICByZXBseTogRmFzdGlmeVJlcGx5LFxuICApID0+IENvbnRleHQgfCBQcm9taXNlPENvbnRleHQ+O1xuICBndWFyZEhhbmRsZXI6IChcbiAgICBndWFyZDogR3VhcmRLZXksXG4gICAgcmVxdWVzdDogRmFzdGlmeVJlcXVlc3QsXG4gICAgYXBpOiB7XG4gICAgICB0eXBlUGFyYW1ldGVyczogQXBpUGFyYW1UeXBlLlR5cGVQYXJhbVtdO1xuICAgICAgcGFyYW1ldGVyczogQXBpUGFyYW1bXTtcbiAgICAgIHJldHVyblR5cGU6IEFwaVBhcmFtVHlwZTtcbiAgICAgIG1vZGVsTmFtZTogc3RyaW5nO1xuICAgICAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICAgICAgcGF0aDogc3RyaW5nO1xuICAgICAgb3B0aW9uczogQXBpRGVjb3JhdG9yT3B0aW9ucztcbiAgICB9LFxuICApID0+IHZvaWQ7XG4gIC8qKlxuICAgKiDsoITsl60gQ2FjaGUtQ29udHJvbCDtlbjrk6Trn6zsnoXri4jri6QuXG4gICAqIOyalOyyrSDtg4DsnoUoYXBpLCBhc3NldHMsIHNzciwgY3NyKeyXkCDrlLDrnbwgQ2FjaGUtQ29udHJvbCDshKTsoJXsnYQg67CY7ZmY7ZWp64uI64ukLlxuICAgKiB1bmRlZmluZWTrpbwg67CY7ZmY7ZWY66m0IO2DgOyeheuzhCDquLDrs7jqsJLsnbQg7KCB7Jqp65Cp64uI64ukLlxuICAgKi9cbiAgY2FjaGVDb250cm9sSGFuZGxlcj86IENhY2hlQ29udHJvbEhhbmRsZXI7XG59O1xuIl0sIm5hbWVzIjpbInoiLCJ6QXJyYXlhYmxlIiwic2hhcGUiLCJ1bmlvbiIsImFycmF5IiwiZ2V0RGVzY3JpcHRpb24iLCJpdGVtIiwiY29uZSIsIm5vdGUiLCJkZXNjIiwiWm9kU3RyaW5nRm9ybWF0IiwiZW51bSIsIlNvbmFtdUZpbGVTY2hlbWEiLCJvYmplY3QiLCJuYW1lIiwic3RyaW5nIiwidXJsIiwibWltZV90eXBlIiwic2l6ZSIsIm51bWJlciIsImRlc2NyaWJlIiwiU29uYW11RmlsZUFycmF5U2NoZW1hIiwiQlVJTFRfSU5fVFlQRV9JRFMiLCJLbm93bk9wY2xhc3NWYWx1ZXMiLCJub3JtYWxpemVTdWJzZXRGaWVsZCIsImYiLCJmaWVsZCIsImlzSW50ZXJuYWxTdWJzZXRGaWVsZCIsImludGVybmFsIiwiaXNTdWJzZXREZWZXaXRoQ29uZSIsImRlZiIsIkFycmF5IiwiaXNBcnJheSIsImlzRW51bURlZldpdGhDb25lIiwidW5kZWZpbmVkIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImdldFN1YnNldEZpZWxkcyIsImZpZWxkcyIsImdldEVudW1EZWZWYWx1ZXMiLCJ2YWx1ZXMiLCJpc0ludGVnZXJTaW5nbGVQcm9wIiwicCIsInR5cGUiLCJpc0ludGVnZXJBcnJheVByb3AiLCJpc0ludGVnZXJQcm9wIiwiaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcCIsImlzQmlnSW50ZWdlckFycmF5UHJvcCIsImlzQmlnSW50ZWdlclByb3AiLCJpc1N0cmluZ1NpbmdsZVByb3AiLCJpc1N0cmluZ0FycmF5UHJvcCIsImlzU3RyaW5nUHJvcCIsImlzRW51bVNpbmdsZVByb3AiLCJpc0VudW1BcnJheVByb3AiLCJpc0VudW1Qcm9wIiwiaXNOdW1iZXJTaW5nbGVQcm9wIiwiaXNOdW1iZXJBcnJheVByb3AiLCJpc051bWJlclByb3AiLCJpc051bWVyaWNTaW5nbGVQcm9wIiwiaXNOdW1lcmljQXJyYXlQcm9wIiwiaXNOdW1lcmljUHJvcCIsImlzQm9vbGVhblNpbmdsZVByb3AiLCJpc0Jvb2xlYW5BcnJheVByb3AiLCJpc0Jvb2xlYW5Qcm9wIiwiaXNEYXRlU2luZ2xlUHJvcCIsImlzRGF0ZUFycmF5UHJvcCIsImlzRGF0ZVByb3AiLCJpc1V1aWRTaW5nbGVQcm9wIiwiaXNVdWlkQXJyYXlQcm9wIiwiaXNVdWlkUHJvcCIsImlzSnNvblByb3AiLCJpc1NlYXJjaFRleHRQcm9wIiwiaXNWaXJ0dWFsUHJvcCIsImlzVmlydHVhbENvZGVQcm9wIiwidmlydHVhbFR5cGUiLCJpc1ZpcnR1YWxRdWVyeVByb3AiLCJpc1ZlY3RvclNpbmdsZVByb3AiLCJpc1ZlY3RvckFycmF5UHJvcCIsImlzVmVjdG9yUHJvcCIsImlzVHNWZWN0b3JQcm9wIiwiaXNSZWxhdGlvblByb3AiLCJpc09uZVRvT25lUmVsYXRpb25Qcm9wIiwicmVsYXRpb25UeXBlIiwiaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AiLCJpc0hhc01hbnlSZWxhdGlvblByb3AiLCJpc01hbnlUb01hbnlSZWxhdGlvblByb3AiLCJpc0N1c3RvbUpvaW5DbGF1c2UiLCJjdXN0b20iLCJTb25hbXVRdWVyeU1vZGUiLCJTb25hbXVTZW1hbnRpY1BhcmFtcyIsInNlbWFudGljUXVlcnkiLCJlbWJlZGRpbmciLCJtaW4iLCJtYXgiLCJ0aHJlc2hvbGQiLCJvcHRpb25hbCIsIm1ldGhvZCIsImlzS25leEVycm9yIiwiZSIsImNvZGUiLCJzcWxNZXNzYWdlIiwic3FsU3RhdGUiLCJBcGlQYXJhbVR5cGUiLCJpc09iamVjdCIsInYiLCJ0IiwiaXNVbmlvbiIsImlzSW50ZXJzZWN0aW9uIiwiaXNTdHJpbmdMaXRlcmFsIiwiaXNOdW1lcmljTGl0ZXJhbCIsImlzUmVmIiwiaXNJbmRleGVkQWNjZXNzIiwiaXNUdXBsZVR5cGUiLCJpc1BpY2siLCJpZCIsImlzT21pdCIsImlzUGFydGlhbCIsImlzUHJvbWlzZSIsImlzQ29udGV4dCIsImlzUmVmS25leCIsImlzVHlwZVBhcmFtIiwiUmVuZGVyaW5nTm9kZSIsImFueSIsIkdlbmVyYXRlZENvbHVtblNjaGVtYSIsImV4cHJlc3Npb24iLCJGaXh0dXJlQ29tcGFuaW9uU2NoZW1hIiwiZW50aXR5Iiwib3ZlcnJpZGVzIiwicmVjb3JkIiwidW5rbm93biIsImNvdW50IiwiaW50IiwicG9zaXRpdmUiLCJDb25lU2NoZW1hIiwidGFncyIsImZpeHR1cmVHZW5lcmF0b3IiLCJmaXh0dXJlRGVmYXVsdCIsImZpeHR1cmVTdHJhdGVneSIsImxpdGVyYWwiLCJmaXh0dXJlQ29tcGFuaW9ucyIsImRhdGFTb3VyY2UiLCJzdHJhdGVneSIsImNvbmZpZyIsImNhdGNoYWxsIiwiQmFzZVByb3BGaWVsZHMiLCJudWxsYWJsZSIsImJvb2xlYW4iLCJ0b0ZpbHRlciIsImRlZmF1bHQiLCJkYkRlZmF1bHQiLCJnZW5lcmF0ZWQiLCJCYXNlUHJvcEZpZWxkc1dpdGhvdXRBZGRpdGlvbmFsIiwic3RyaWN0IiwiUHJlY2lzaW9uU2NhbGVGaWVsZHMiLCJwcmVjaXNpb24iLCJzY2FsZSIsIlN0cmluZ1Byb3BTY2hlbWEiLCJ6b2RGb3JtYXQiLCJTdHJpbmdBcnJheVByb3BTY2hlbWEiLCJFbnVtUHJvcFNjaGVtYSIsIkVudW1BcnJheVByb3BTY2hlbWEiLCJOdW1iZXJQcm9wU2NoZW1hIiwibnVtYmVyVHlwZSIsIk51bWJlckFycmF5UHJvcFNjaGVtYSIsIkRhdGVQcm9wU2NoZW1hIiwiRGF0ZUFycmF5UHJvcFNjaGVtYSIsIk51bWVyaWNQcm9wU2NoZW1hIiwiTnVtZXJpY0FycmF5UHJvcFNjaGVtYSIsIkpzb25Qcm9wU2NoZW1hIiwiU2VhcmNoVGV4dFNvdXJjZUNvbHVtblNjaGVtYSIsImNhc2VJbnNlbnNpdGl2ZSIsIlNlYXJjaFRleHRQcm9wU2NoZW1hIiwic291cmNlQ29sdW1ucyIsIlZpcnR1YWxQcm9wU2NoZW1hIiwiVmVjdG9yUHJvcFNjaGVtYSIsImRpbWVuc2lvbnMiLCJWZWN0b3JBcnJheVByb3BTY2hlbWEiLCJCYXNlUmVsYXRpb25GaWVsZHMiLCJ3aXRoIiwiUmVsYXRpb25PblNjaGVtYSIsIkJlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcFNjaGVtYSIsImN1c3RvbUpvaW5DbGF1c2UiLCJ1c2VDb25zdHJhaW50Iiwib25VcGRhdGUiLCJvbkRlbGV0ZSIsIkhhc01hbnlSZWxhdGlvblByb3BTY2hlbWEiLCJqb2luQ29sdW1uIiwiZnJvbUNvbHVtbiIsIk1hbnlUb01hbnlSZWxhdGlvblByb3BTY2hlbWEiLCJqb2luVGFibGUiLCJPbmVUb09uZVJlbGF0aW9uUHJvcFNjaGVtYSIsImhhc0pvaW5Db2x1bW4iLCJSZWxhdGlvblR5cGVzIiwiUmVsYXRpb25Qcm9wU2NoZW1hIiwiZGlzY3JpbWluYXRlZFVuaW9uIiwiZXJyb3IiLCJpc3MiLCJtYXAiLCJqb2luIiwiaW5wdXQiLCJOb3JtYWxQcm9wVHlwZXMiLCJWaXJ0dWFsR2VuZXJhdGVkRGlzYWxsb3dlZFR5cGVzIiwiTm9ybWFsUHJvcFNjaGVtYSIsInN1cGVyUmVmaW5lIiwiZGF0YSIsImN0eCIsImFkZElzc3VlIiwibWVzc2FnZSIsInBhdGgiLCJpbmNsdWRlcyIsImZhdGFsIiwiQWxsUHJvcFR5cGVzIiwiRW50aXR5UHJvcFNjaGVtYSIsIkVudGl0eUluZGV4Q29sdW1uU2NoZW1hIiwibnVsbHNGaXJzdCIsInNvcnRPcmRlciIsInZlY3Rvck9wcyIsIm9wY2xhc3MiLCJFbnRpdHlJbmRleFNjaGVtYSIsImNvbHVtbnMiLCJ1c2luZyIsIm51bGxzTm90RGlzdGluY3QiLCJtIiwiZWZDb25zdHJ1Y3Rpb24iLCJsaXN0cyIsIlN1YnNldERlZlNjaGVtYSIsIkVudW1EZWZTY2hlbWEiLCJ1bndyYXBTZWFyY2hUZXh0SnNvblNvdXJjZVR5cGUiLCJ6b2RUeXBlIiwiY3VycmVudCIsIlpvZE9wdGlvbmFsIiwiWm9kTnVsbGFibGUiLCJ1bndyYXAiLCJpc1NlYXJjaFRleHRKc29uU291cmNlWm9kVHlwZSIsImJhc2VUeXBlIiwiWm9kQXJyYXkiLCJlbGVtZW50VHlwZSIsImVsZW1lbnQiLCJab2RTdHJpbmciLCJ2YWxpZGF0ZVNlYXJjaFRleHRTb3VyY2VzIiwicHJvcHMiLCJwcm9wc1BhdGgiLCJwcm9wc0J5TmFtZSIsIk1hcCIsInByb3AiLCJmb3JFYWNoIiwicHJvcEluZGV4Iiwic291cmNlIiwic291cmNlSW5kZXgiLCJzb3VyY2VQcm9wIiwiZ2V0Iiwic291cmNlUGF0aCIsIkVudGl0eUpzb25CYXNlU2NoZW1hIiwidGl0bGUiLCJ0YWJsZSIsInBhcmVudElkIiwiaW5kZXhlcyIsInN1YnNldHMiLCJlbnVtcyIsIkVudGl0eUpzb25TY2hlbWEiLCJUZW1wbGF0ZUVudGl0eVNjaGVtYSIsIm9taXQiLCJleHRlbmQiLCJlbnRpdHlJZCIsInBhcnRpYWwiLCJUZW1wbGF0ZU9wdGlvbnMiLCJpbml0X3R5cGVzIiwiZ2VuZXJhdGVkX3NzbyIsImdlbmVyYXRlZF9odHRwIiwibW9kZWwiLCJkZWZhdWx0U2VhcmNoRmllbGQiLCJkZWZhdWx0T3JkZXJCeSIsIm1vZGVsX3Rlc3QiLCJicmlkZ2UiLCJzZXJ2aWNlcyIsInZpZXdfbGlzdCIsImV4dHJhIiwidmlld19saXN0X2NvbHVtbnMiLCJsYWJlbCIsInRjIiwiY29sdW1uSW1wb3J0cyIsInZpZXdfc2VhcmNoX2lucHV0Iiwidmlld19mb3JtIiwidmlld19pZF9hbGxfc2VsZWN0Iiwidmlld19lbnVtc19idXR0b25zZXQiLCJlbnVtSWQiLCJxdWVyaWVzIiwiZW50cnlfc2VydmVyIiwic2QiLCJ0YXJnZXQiLCJUZW1wbGF0ZUtleSIsIkdlbmVyYXRlT3B0aW9ucyIsIm92ZXJ3cml0ZSIsIlBhdGhBbmRDb2RlIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxDQUFDLFFBQVEsTUFBTTtBQUt4Qjs7QUFFQSxHQUNBLE9BQU8sU0FBU0MsV0FBbUNDLEtBQVE7SUFDekQsT0FBT0YsRUFBRUcsS0FBSyxDQUFDO1FBQUNEO1FBQU9BLE1BQU1FLEtBQUs7S0FBRztBQUN2QztBQXdFQTs7OztDQUlDLEdBQ0Qs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
|