@tscircuit/fake-snippets 0.0.157 → 0.0.159
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/bundle.js +174 -309
- package/dist/index.d.ts +5 -0
- package/dist/index.js +1 -0
- package/dist/schema.d.ts +8 -0
- package/dist/schema.js +1 -0
- package/package.json +1 -2
package/dist/bundle.js
CHANGED
|
@@ -298,6 +298,7 @@ var packageSchema = z.object({
|
|
|
298
298
|
creator_account_id: z.string(),
|
|
299
299
|
owner_org_id: z.string(),
|
|
300
300
|
owner_github_username: z.string().nullable(),
|
|
301
|
+
org_owner_tscircuit_handle: z.string().nullable().optional(),
|
|
301
302
|
github_repo_full_name: z.string().nullable(),
|
|
302
303
|
name: z.string(),
|
|
303
304
|
unscoped_name: z.string(),
|
|
@@ -8835,117 +8836,22 @@ var fork_default = withRouteSpec({
|
|
|
8835
8836
|
});
|
|
8836
8837
|
});
|
|
8837
8838
|
|
|
8838
|
-
// fake-snippets-api/routes/api/packages/generate_from_jlcpcb.ts
|
|
8839
|
-
import { z as z68 } from "zod";
|
|
8840
|
-
import {
|
|
8841
|
-
fetchEasyEDAComponent,
|
|
8842
|
-
convertRawEasyEdaToTs,
|
|
8843
|
-
normalizeManufacturerPartNumber,
|
|
8844
|
-
EasyEdaJsonSchema
|
|
8845
|
-
} from "easyeda";
|
|
8846
|
-
var generate_from_jlcpcb_default = withRouteSpec({
|
|
8847
|
-
methods: ["POST"],
|
|
8848
|
-
auth: "session",
|
|
8849
|
-
jsonBody: z68.object({
|
|
8850
|
-
jlcpcb_part_number: z68.string().min(1, "JLCPCB part number is required")
|
|
8851
|
-
}),
|
|
8852
|
-
jsonResponse: z68.object({
|
|
8853
|
-
ok: z68.boolean(),
|
|
8854
|
-
package: packageSchema
|
|
8855
|
-
})
|
|
8856
|
-
})(async (req, ctx) => {
|
|
8857
|
-
const { jlcpcb_part_number } = req.jsonBody;
|
|
8858
|
-
try {
|
|
8859
|
-
const rawEasyJson = await fetchEasyEDAComponent(jlcpcb_part_number);
|
|
8860
|
-
if (!rawEasyJson) {
|
|
8861
|
-
return ctx.error(404, {
|
|
8862
|
-
error_code: "component_not_found",
|
|
8863
|
-
message: `Component with JLCPCB part number ${jlcpcb_part_number} not found`
|
|
8864
|
-
});
|
|
8865
|
-
}
|
|
8866
|
-
const betterEasy = await EasyEdaJsonSchema.parse(rawEasyJson);
|
|
8867
|
-
const tsxComponent = await convertRawEasyEdaToTs(rawEasyJson);
|
|
8868
|
-
const componentName = normalizeManufacturerPartNumber(
|
|
8869
|
-
betterEasy.dataStr.head.c_para["Manufacturer Part"] ?? ""
|
|
8870
|
-
).replace(/[^a-zA-Z0-9-_]/g, "-").replace(/--/g, "-");
|
|
8871
|
-
const packageName = `${ctx.auth.github_username}/${componentName}`;
|
|
8872
|
-
const existingPackage = ctx.db.packages.find((p) => p.name === packageName);
|
|
8873
|
-
if (existingPackage) {
|
|
8874
|
-
return ctx.error(409, {
|
|
8875
|
-
error_code: "package_already_exists",
|
|
8876
|
-
message: componentName
|
|
8877
|
-
});
|
|
8878
|
-
}
|
|
8879
|
-
const newPackage = {
|
|
8880
|
-
name: packageName,
|
|
8881
|
-
unscoped_name: componentName,
|
|
8882
|
-
owner_name: ctx.auth.github_username,
|
|
8883
|
-
code: tsxComponent,
|
|
8884
|
-
created_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
8885
|
-
updated_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
8886
|
-
description: `Generated from JLCPCB part number ${jlcpcb_part_number}`,
|
|
8887
|
-
creator_account_id: ctx.auth.account_id,
|
|
8888
|
-
owner_org_id: ctx.auth.personal_org_id,
|
|
8889
|
-
owner_github_username: ctx.auth.github_username,
|
|
8890
|
-
latest_package_release_id: null,
|
|
8891
|
-
latest_package_release_fs_sha: null,
|
|
8892
|
-
latest_version: null,
|
|
8893
|
-
license: null,
|
|
8894
|
-
ai_description: "placeholder ai description",
|
|
8895
|
-
ai_usage_instructions: "placeholder ai usage instructions"
|
|
8896
|
-
};
|
|
8897
|
-
const createdPackage = ctx.db.addPackage(newPackage);
|
|
8898
|
-
const createdPackageRelease = ctx.db.addPackageRelease({
|
|
8899
|
-
package_id: createdPackage.package_id,
|
|
8900
|
-
version: "1.0.0",
|
|
8901
|
-
created_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
8902
|
-
is_latest: true,
|
|
8903
|
-
is_locked: false
|
|
8904
|
-
});
|
|
8905
|
-
ctx.db.updatePackage(createdPackage.package_id, {
|
|
8906
|
-
latest_package_release_id: createdPackageRelease.package_release_id
|
|
8907
|
-
});
|
|
8908
|
-
ctx.db.addPackageFile({
|
|
8909
|
-
package_release_id: createdPackageRelease.package_release_id,
|
|
8910
|
-
file_path: "index.tsx",
|
|
8911
|
-
content_text: String(tsxComponent),
|
|
8912
|
-
created_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
8913
|
-
});
|
|
8914
|
-
return ctx.json({
|
|
8915
|
-
ok: true,
|
|
8916
|
-
package: createdPackage
|
|
8917
|
-
});
|
|
8918
|
-
} catch (error) {
|
|
8919
|
-
if (String(error).includes("Component not found")) {
|
|
8920
|
-
return ctx.error(404, {
|
|
8921
|
-
error_code: "component_not_found",
|
|
8922
|
-
message: `Component with JLCPCB part number ${jlcpcb_part_number} not found`
|
|
8923
|
-
});
|
|
8924
|
-
}
|
|
8925
|
-
return ctx.error(500, {
|
|
8926
|
-
error_code: "package_generation_failed",
|
|
8927
|
-
message: `Failed to generate package from JLCPCB part: ${error.message || String(error)}`
|
|
8928
|
-
});
|
|
8929
|
-
}
|
|
8930
|
-
});
|
|
8931
|
-
|
|
8932
8839
|
// fake-snippets-api/routes/api/packages/get.ts
|
|
8933
|
-
import { z as
|
|
8840
|
+
import { z as z68 } from "zod";
|
|
8934
8841
|
var get_default12 = withRouteSpec({
|
|
8935
8842
|
methods: ["GET", "POST"],
|
|
8936
8843
|
auth: "optional_session",
|
|
8937
|
-
commonParams:
|
|
8938
|
-
package_id:
|
|
8939
|
-
name:
|
|
8844
|
+
commonParams: z68.object({
|
|
8845
|
+
package_id: z68.string().optional(),
|
|
8846
|
+
name: z68.string().optional()
|
|
8940
8847
|
}),
|
|
8941
|
-
jsonBody:
|
|
8942
|
-
jsonResponse:
|
|
8943
|
-
ok:
|
|
8848
|
+
jsonBody: z68.any().optional(),
|
|
8849
|
+
jsonResponse: z68.object({
|
|
8850
|
+
ok: z68.boolean(),
|
|
8944
8851
|
package: packageSchema.extend({
|
|
8945
|
-
is_starred:
|
|
8946
|
-
|
|
8947
|
-
|
|
8948
|
-
can_manage_packages: z69.boolean()
|
|
8852
|
+
is_starred: z68.boolean(),
|
|
8853
|
+
user_permissions: z68.object({
|
|
8854
|
+
can_manage_packages: z68.boolean()
|
|
8949
8855
|
}).optional()
|
|
8950
8856
|
}).optional()
|
|
8951
8857
|
})
|
|
@@ -8993,7 +8899,7 @@ import {
|
|
|
8993
8899
|
convertCircuitJsonToSchematicSvg
|
|
8994
8900
|
} from "circuit-to-svg";
|
|
8995
8901
|
import { convertCircuitJsonToSimple3dSvg } from "circuit-json-to-simple-3d";
|
|
8996
|
-
import { z as
|
|
8902
|
+
import { z as z69 } from "zod";
|
|
8997
8903
|
import { renderAsync } from "@resvg/resvg-js";
|
|
8998
8904
|
var VIEW_TYPES = ["schematic", "pcb", "assembly", "3d"];
|
|
8999
8905
|
var EXTENSIONS = ["svg", "png"];
|
|
@@ -9003,15 +8909,15 @@ var viewFormatPattern = new RegExp(
|
|
|
9003
8909
|
var view_format_default = withRouteSpec({
|
|
9004
8910
|
methods: ["GET"],
|
|
9005
8911
|
auth: "none",
|
|
9006
|
-
routeParams:
|
|
9007
|
-
owner_github_username:
|
|
9008
|
-
unscoped_name:
|
|
9009
|
-
view_format:
|
|
8912
|
+
routeParams: z69.object({
|
|
8913
|
+
owner_github_username: z69.string(),
|
|
8914
|
+
unscoped_name: z69.string(),
|
|
8915
|
+
view_format: z69.string().regex(viewFormatPattern, {
|
|
9010
8916
|
message: `Invalid view format. Must be one of: ${VIEW_TYPES.join(", ")} with optional width suffix (e.g. -800w).${EXTENSIONS.join(" or ")}`
|
|
9011
8917
|
})
|
|
9012
8918
|
}),
|
|
9013
|
-
queryParams:
|
|
9014
|
-
fs_sha:
|
|
8919
|
+
queryParams: z69.object({
|
|
8920
|
+
fs_sha: z69.string().optional()
|
|
9015
8921
|
}),
|
|
9016
8922
|
rawResponse: true
|
|
9017
8923
|
})(async (req, ctx) => {
|
|
@@ -9080,15 +8986,15 @@ var view_format_default = withRouteSpec({
|
|
|
9080
8986
|
});
|
|
9081
8987
|
|
|
9082
8988
|
// fake-snippets-api/routes/api/packages/list_latest.ts
|
|
9083
|
-
import { z as
|
|
8989
|
+
import { z as z70 } from "zod";
|
|
9084
8990
|
var list_latest_default = withRouteSpec({
|
|
9085
8991
|
methods: ["GET"],
|
|
9086
8992
|
auth: "none",
|
|
9087
|
-
queryParams:
|
|
9088
|
-
limit:
|
|
8993
|
+
queryParams: z70.object({
|
|
8994
|
+
limit: z70.string().regex(/^\d+$/).transform(Number).optional()
|
|
9089
8995
|
}),
|
|
9090
|
-
jsonResponse:
|
|
9091
|
-
packages:
|
|
8996
|
+
jsonResponse: z70.object({
|
|
8997
|
+
packages: z70.array(packageSchema)
|
|
9092
8998
|
})
|
|
9093
8999
|
})(async (req, ctx) => {
|
|
9094
9000
|
const limit = req.query.limit || 50;
|
|
@@ -9099,14 +9005,14 @@ var list_latest_default = withRouteSpec({
|
|
|
9099
9005
|
});
|
|
9100
9006
|
|
|
9101
9007
|
// fake-snippets-api/routes/api/packages/list_trending.ts
|
|
9102
|
-
import { z as
|
|
9008
|
+
import { z as z71 } from "zod";
|
|
9103
9009
|
var list_trending_default = withRouteSpec({
|
|
9104
9010
|
methods: ["GET", "POST"],
|
|
9105
9011
|
auth: "none",
|
|
9106
|
-
commonParams:
|
|
9107
|
-
jsonResponse:
|
|
9108
|
-
ok:
|
|
9109
|
-
packages:
|
|
9012
|
+
commonParams: z71.object({}),
|
|
9013
|
+
jsonResponse: z71.object({
|
|
9014
|
+
ok: z71.boolean(),
|
|
9015
|
+
packages: z71.array(packageSchema)
|
|
9110
9016
|
})
|
|
9111
9017
|
})(async (req, ctx) => {
|
|
9112
9018
|
const packagesWithStars = ctx.db.packages.map((pkg) => {
|
|
@@ -9131,26 +9037,26 @@ var list_trending_default = withRouteSpec({
|
|
|
9131
9037
|
});
|
|
9132
9038
|
|
|
9133
9039
|
// fake-snippets-api/routes/api/packages/list.ts
|
|
9134
|
-
import { z as
|
|
9040
|
+
import { z as z72 } from "zod";
|
|
9135
9041
|
var list_default9 = withRouteSpec({
|
|
9136
9042
|
methods: ["GET", "POST"],
|
|
9137
9043
|
auth: "optional_session",
|
|
9138
|
-
commonParams:
|
|
9139
|
-
creator_account_id:
|
|
9140
|
-
owner_github_username:
|
|
9141
|
-
owner_tscircuit_handle:
|
|
9142
|
-
is_writable:
|
|
9143
|
-
owner_org_id:
|
|
9144
|
-
name:
|
|
9145
|
-
limit:
|
|
9044
|
+
commonParams: z72.object({
|
|
9045
|
+
creator_account_id: z72.string().optional(),
|
|
9046
|
+
owner_github_username: z72.string().optional(),
|
|
9047
|
+
owner_tscircuit_handle: z72.string().optional(),
|
|
9048
|
+
is_writable: z72.boolean().optional(),
|
|
9049
|
+
owner_org_id: z72.string().optional(),
|
|
9050
|
+
name: z72.string().optional(),
|
|
9051
|
+
limit: z72.number().int().min(1).optional()
|
|
9146
9052
|
}),
|
|
9147
|
-
jsonResponse:
|
|
9148
|
-
ok:
|
|
9149
|
-
packages:
|
|
9053
|
+
jsonResponse: z72.object({
|
|
9054
|
+
ok: z72.boolean(),
|
|
9055
|
+
packages: z72.array(
|
|
9150
9056
|
packageSchema.extend({
|
|
9151
|
-
starred_at:
|
|
9152
|
-
user_permissions:
|
|
9153
|
-
can_manage_packages:
|
|
9057
|
+
starred_at: z72.string().nullable(),
|
|
9058
|
+
user_permissions: z72.object({
|
|
9059
|
+
can_manage_packages: z72.boolean()
|
|
9154
9060
|
}).optional()
|
|
9155
9061
|
})
|
|
9156
9062
|
)
|
|
@@ -9233,15 +9139,15 @@ var list_default9 = withRouteSpec({
|
|
|
9233
9139
|
});
|
|
9234
9140
|
|
|
9235
9141
|
// fake-snippets-api/routes/api/packages/remove_star.ts
|
|
9236
|
-
import { z as
|
|
9142
|
+
import { z as z73 } from "zod";
|
|
9237
9143
|
var remove_star_default = withRouteSpec({
|
|
9238
9144
|
methods: ["POST"],
|
|
9239
9145
|
auth: "session",
|
|
9240
|
-
jsonBody:
|
|
9241
|
-
package_id:
|
|
9242
|
-
}).or(
|
|
9243
|
-
jsonResponse:
|
|
9244
|
-
ok:
|
|
9146
|
+
jsonBody: z73.object({
|
|
9147
|
+
package_id: z73.string()
|
|
9148
|
+
}).or(z73.object({ name: z73.string() })),
|
|
9149
|
+
jsonResponse: z73.object({
|
|
9150
|
+
ok: z73.boolean()
|
|
9245
9151
|
})
|
|
9246
9152
|
})(async (req, ctx) => {
|
|
9247
9153
|
let packageId;
|
|
@@ -9284,16 +9190,16 @@ var remove_star_default = withRouteSpec({
|
|
|
9284
9190
|
});
|
|
9285
9191
|
|
|
9286
9192
|
// fake-snippets-api/routes/api/packages/search.ts
|
|
9287
|
-
import { z as
|
|
9193
|
+
import { z as z74 } from "zod";
|
|
9288
9194
|
var search_default2 = withRouteSpec({
|
|
9289
9195
|
methods: ["POST"],
|
|
9290
9196
|
auth: "none",
|
|
9291
|
-
jsonBody:
|
|
9292
|
-
query:
|
|
9197
|
+
jsonBody: z74.object({
|
|
9198
|
+
query: z74.string()
|
|
9293
9199
|
}),
|
|
9294
|
-
jsonResponse:
|
|
9295
|
-
ok:
|
|
9296
|
-
packages:
|
|
9200
|
+
jsonResponse: z74.object({
|
|
9201
|
+
ok: z74.boolean(),
|
|
9202
|
+
packages: z74.array(packageSchema)
|
|
9297
9203
|
})
|
|
9298
9204
|
})(async (req, ctx) => {
|
|
9299
9205
|
const { query } = req.jsonBody;
|
|
@@ -9302,15 +9208,15 @@ var search_default2 = withRouteSpec({
|
|
|
9302
9208
|
});
|
|
9303
9209
|
|
|
9304
9210
|
// fake-snippets-api/routes/api/packages/update_ai_description.ts
|
|
9305
|
-
import { z as
|
|
9211
|
+
import { z as z75 } from "zod";
|
|
9306
9212
|
var update_ai_description_default = withRouteSpec({
|
|
9307
9213
|
methods: ["POST"],
|
|
9308
9214
|
auth: "session",
|
|
9309
|
-
jsonBody:
|
|
9310
|
-
package_id:
|
|
9215
|
+
jsonBody: z75.object({
|
|
9216
|
+
package_id: z75.string()
|
|
9311
9217
|
}),
|
|
9312
|
-
jsonResponse:
|
|
9313
|
-
success:
|
|
9218
|
+
jsonResponse: z75.object({
|
|
9219
|
+
success: z75.boolean()
|
|
9314
9220
|
})
|
|
9315
9221
|
})(async (req, ctx) => {
|
|
9316
9222
|
const { package_id } = req.jsonBody;
|
|
@@ -9335,29 +9241,29 @@ var update_ai_description_default = withRouteSpec({
|
|
|
9335
9241
|
});
|
|
9336
9242
|
|
|
9337
9243
|
// fake-snippets-api/routes/api/packages/update.ts
|
|
9338
|
-
import { z as
|
|
9244
|
+
import { z as z76 } from "zod";
|
|
9339
9245
|
var update_default4 = withRouteSpec({
|
|
9340
9246
|
methods: ["POST"],
|
|
9341
9247
|
auth: "session",
|
|
9342
|
-
jsonBody:
|
|
9343
|
-
package_id:
|
|
9344
|
-
name:
|
|
9248
|
+
jsonBody: z76.object({
|
|
9249
|
+
package_id: z76.string(),
|
|
9250
|
+
name: z76.string().regex(
|
|
9345
9251
|
/^[@a-zA-Z0-9-_\/]+$/,
|
|
9346
9252
|
"Package name can only contain letters, numbers, hyphens, underscores, and forward slashes"
|
|
9347
9253
|
).transform((name) => name.replace(/^@/, "")).optional(),
|
|
9348
|
-
description:
|
|
9349
|
-
website:
|
|
9350
|
-
github_repo_full_name:
|
|
9351
|
-
is_private:
|
|
9352
|
-
is_unlisted:
|
|
9353
|
-
default_view:
|
|
9354
|
-
allow_pr_previews:
|
|
9254
|
+
description: z76.string().optional(),
|
|
9255
|
+
website: z76.string().optional(),
|
|
9256
|
+
github_repo_full_name: z76.string().nullable().optional(),
|
|
9257
|
+
is_private: z76.boolean().optional(),
|
|
9258
|
+
is_unlisted: z76.boolean().optional(),
|
|
9259
|
+
default_view: z76.enum(["files", "3d", "pcb", "schematic"]).optional(),
|
|
9260
|
+
allow_pr_previews: z76.boolean().optional()
|
|
9355
9261
|
}).transform((data) => ({
|
|
9356
9262
|
...data,
|
|
9357
9263
|
is_unlisted: data.is_private ? true : data.is_unlisted
|
|
9358
9264
|
})),
|
|
9359
|
-
jsonResponse:
|
|
9360
|
-
ok:
|
|
9265
|
+
jsonResponse: z76.object({
|
|
9266
|
+
ok: z76.boolean(),
|
|
9361
9267
|
package: packageSchema
|
|
9362
9268
|
})
|
|
9363
9269
|
})(async (req, ctx) => {
|
|
@@ -9426,7 +9332,7 @@ var update_default4 = withRouteSpec({
|
|
|
9426
9332
|
});
|
|
9427
9333
|
|
|
9428
9334
|
// fake-snippets-api/routes/api/proxy.ts
|
|
9429
|
-
import { z as
|
|
9335
|
+
import { z as z77 } from "zod";
|
|
9430
9336
|
var PROXY_HEADERS = [
|
|
9431
9337
|
"X-Target-Url",
|
|
9432
9338
|
"X-Sender-Origin",
|
|
@@ -9456,7 +9362,7 @@ function isAllowedDomain(url) {
|
|
|
9456
9362
|
}
|
|
9457
9363
|
var proxy_default = withRouteSpec({
|
|
9458
9364
|
methods: ["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"],
|
|
9459
|
-
jsonResponse:
|
|
9365
|
+
jsonResponse: z77.any(),
|
|
9460
9366
|
auth: "session"
|
|
9461
9367
|
})(async (req, ctx) => {
|
|
9462
9368
|
if (req.headers.get("X-proxied")) {
|
|
@@ -9531,12 +9437,12 @@ var proxy_default = withRouteSpec({
|
|
|
9531
9437
|
});
|
|
9532
9438
|
|
|
9533
9439
|
// fake-snippets-api/routes/api/sessions/delete.ts
|
|
9534
|
-
import { z as
|
|
9440
|
+
import { z as z78 } from "zod";
|
|
9535
9441
|
var delete_default4 = withRouteSpec({
|
|
9536
9442
|
auth: "session",
|
|
9537
9443
|
methods: ["POST", "DELETE"],
|
|
9538
|
-
jsonResponse:
|
|
9539
|
-
ok:
|
|
9444
|
+
jsonResponse: z78.object({
|
|
9445
|
+
ok: z78.boolean()
|
|
9540
9446
|
})
|
|
9541
9447
|
})(async (req, ctx) => {
|
|
9542
9448
|
const { session_id } = ctx.auth;
|
|
@@ -9553,15 +9459,15 @@ var delete_default4 = withRouteSpec({
|
|
|
9553
9459
|
});
|
|
9554
9460
|
|
|
9555
9461
|
// fake-snippets-api/routes/api/snippets/add_star.ts
|
|
9556
|
-
import { z as
|
|
9462
|
+
import { z as z79 } from "zod";
|
|
9557
9463
|
var add_star_default2 = withRouteSpec({
|
|
9558
9464
|
methods: ["POST"],
|
|
9559
9465
|
auth: "session",
|
|
9560
|
-
jsonBody:
|
|
9561
|
-
snippet_id:
|
|
9466
|
+
jsonBody: z79.object({
|
|
9467
|
+
snippet_id: z79.string()
|
|
9562
9468
|
}),
|
|
9563
|
-
jsonResponse:
|
|
9564
|
-
ok:
|
|
9469
|
+
jsonResponse: z79.object({
|
|
9470
|
+
ok: z79.boolean()
|
|
9565
9471
|
})
|
|
9566
9472
|
})(async (req, ctx) => {
|
|
9567
9473
|
const { snippet_id } = req.jsonBody;
|
|
@@ -9602,24 +9508,24 @@ var add_star_default2 = withRouteSpec({
|
|
|
9602
9508
|
});
|
|
9603
9509
|
|
|
9604
9510
|
// fake-snippets-api/routes/api/snippets/create.ts
|
|
9605
|
-
import { z as
|
|
9511
|
+
import { z as z80 } from "zod";
|
|
9606
9512
|
var create_default11 = withRouteSpec({
|
|
9607
9513
|
methods: ["POST"],
|
|
9608
9514
|
auth: "session",
|
|
9609
|
-
jsonBody:
|
|
9610
|
-
unscoped_name:
|
|
9611
|
-
code:
|
|
9612
|
-
snippet_type:
|
|
9613
|
-
description:
|
|
9614
|
-
compiled_js:
|
|
9615
|
-
circuit_json:
|
|
9616
|
-
dts:
|
|
9617
|
-
is_private:
|
|
9618
|
-
is_public:
|
|
9619
|
-
is_unlisted:
|
|
9515
|
+
jsonBody: z80.object({
|
|
9516
|
+
unscoped_name: z80.string().optional(),
|
|
9517
|
+
code: z80.string().optional(),
|
|
9518
|
+
snippet_type: z80.enum(["board", "package", "model", "footprint"]),
|
|
9519
|
+
description: z80.string().optional(),
|
|
9520
|
+
compiled_js: z80.string().optional(),
|
|
9521
|
+
circuit_json: z80.array(z80.record(z80.any())).optional().nullable(),
|
|
9522
|
+
dts: z80.string().optional(),
|
|
9523
|
+
is_private: z80.boolean().optional(),
|
|
9524
|
+
is_public: z80.boolean().optional(),
|
|
9525
|
+
is_unlisted: z80.boolean().optional()
|
|
9620
9526
|
}),
|
|
9621
|
-
jsonResponse:
|
|
9622
|
-
ok:
|
|
9527
|
+
jsonResponse: z80.object({
|
|
9528
|
+
ok: z80.boolean(),
|
|
9623
9529
|
snippet: snippetSchema.optional()
|
|
9624
9530
|
})
|
|
9625
9531
|
})(async (req, ctx) => {
|
|
@@ -9756,15 +9662,15 @@ var create_default11 = withRouteSpec({
|
|
|
9756
9662
|
});
|
|
9757
9663
|
|
|
9758
9664
|
// fake-snippets-api/routes/api/snippets/delete.ts
|
|
9759
|
-
import { z as
|
|
9665
|
+
import { z as z81 } from "zod";
|
|
9760
9666
|
var delete_default5 = withRouteSpec({
|
|
9761
9667
|
methods: ["POST"],
|
|
9762
9668
|
auth: "session",
|
|
9763
|
-
jsonBody:
|
|
9764
|
-
snippet_id:
|
|
9669
|
+
jsonBody: z81.object({
|
|
9670
|
+
snippet_id: z81.string()
|
|
9765
9671
|
}),
|
|
9766
|
-
jsonResponse:
|
|
9767
|
-
ok:
|
|
9672
|
+
jsonResponse: z81.object({
|
|
9673
|
+
ok: z81.boolean()
|
|
9768
9674
|
})
|
|
9769
9675
|
})(async (req, ctx) => {
|
|
9770
9676
|
const { snippet_id } = req.jsonBody;
|
|
@@ -9791,15 +9697,15 @@ var delete_default5 = withRouteSpec({
|
|
|
9791
9697
|
});
|
|
9792
9698
|
|
|
9793
9699
|
// fake-snippets-api/routes/api/snippets/download.ts
|
|
9794
|
-
import { z as
|
|
9700
|
+
import { z as z82 } from "zod";
|
|
9795
9701
|
var download_default2 = withRouteSpec({
|
|
9796
9702
|
methods: ["GET"],
|
|
9797
9703
|
auth: "none",
|
|
9798
|
-
queryParams:
|
|
9799
|
-
jsdelivr_resolve:
|
|
9800
|
-
jsdelivr_path:
|
|
9704
|
+
queryParams: z82.object({
|
|
9705
|
+
jsdelivr_resolve: z82.enum(["true", "false"]).optional().transform((v) => v === "true"),
|
|
9706
|
+
jsdelivr_path: z82.string()
|
|
9801
9707
|
}),
|
|
9802
|
-
jsonResponse:
|
|
9708
|
+
jsonResponse: z82.any()
|
|
9803
9709
|
})(async (req, ctx) => {
|
|
9804
9710
|
const { jsdelivr_path, jsdelivr_resolve } = req.query;
|
|
9805
9711
|
const [owner, packageWithVersion, ...rest] = jsdelivr_path.split("/");
|
|
@@ -9925,47 +9831,8 @@ var download_default2 = withRouteSpec({
|
|
|
9925
9831
|
});
|
|
9926
9832
|
});
|
|
9927
9833
|
|
|
9928
|
-
// fake-snippets-api/routes/api/snippets/generate_from_jlcpcb.ts
|
|
9929
|
-
import { z as z84 } from "zod";
|
|
9930
|
-
import { fetchEasyEDAComponent as fetchEasyEDAComponent2, convertRawEasyEdaToTs as convertRawEasyEdaToTs2 } from "easyeda";
|
|
9931
|
-
var generate_from_jlcpcb_default2 = withRouteSpec({
|
|
9932
|
-
methods: ["POST"],
|
|
9933
|
-
auth: "session",
|
|
9934
|
-
jsonBody: z84.object({
|
|
9935
|
-
jlcpcb_part_number: z84.string()
|
|
9936
|
-
}),
|
|
9937
|
-
jsonResponse: z84.object({
|
|
9938
|
-
snippet: snippetSchema
|
|
9939
|
-
})
|
|
9940
|
-
})(async (req, ctx) => {
|
|
9941
|
-
const { jlcpcb_part_number } = req.jsonBody;
|
|
9942
|
-
try {
|
|
9943
|
-
const rawEasyJson = await fetchEasyEDAComponent2(jlcpcb_part_number);
|
|
9944
|
-
const tsxComponent = await convertRawEasyEdaToTs2(rawEasyJson);
|
|
9945
|
-
const newSnippet = {
|
|
9946
|
-
name: `${ctx.auth.github_username}/${jlcpcb_part_number}`,
|
|
9947
|
-
unscoped_name: jlcpcb_part_number,
|
|
9948
|
-
owner_name: ctx.auth.github_username,
|
|
9949
|
-
code: tsxComponent,
|
|
9950
|
-
created_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
9951
|
-
updated_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
9952
|
-
snippet_type: "package",
|
|
9953
|
-
description: `Generated from JLCPCB part number ${jlcpcb_part_number}`
|
|
9954
|
-
};
|
|
9955
|
-
const createdPackage = ctx.db.addSnippet(newSnippet);
|
|
9956
|
-
return ctx.json({
|
|
9957
|
-
snippet: createdPackage
|
|
9958
|
-
});
|
|
9959
|
-
} catch (error) {
|
|
9960
|
-
return ctx.error(500, {
|
|
9961
|
-
error_code: "jlcpcb_generation_failed",
|
|
9962
|
-
message: `Failed to generate package from JLCPCB part: ${error.message}`
|
|
9963
|
-
});
|
|
9964
|
-
}
|
|
9965
|
-
});
|
|
9966
|
-
|
|
9967
9834
|
// fake-snippets-api/routes/api/snippets/get_image.ts
|
|
9968
|
-
import { z as
|
|
9835
|
+
import { z as z83 } from "zod";
|
|
9969
9836
|
import {
|
|
9970
9837
|
convertCircuitJsonToSchematicSvg as convertCircuitJsonToSchematicSvg2,
|
|
9971
9838
|
convertCircuitJsonToPcbSvg as convertCircuitJsonToPcbSvg2
|
|
@@ -9973,14 +9840,14 @@ import {
|
|
|
9973
9840
|
var get_image_default = withRouteSpec({
|
|
9974
9841
|
methods: ["GET"],
|
|
9975
9842
|
auth: "none",
|
|
9976
|
-
queryParams:
|
|
9977
|
-
snippetId:
|
|
9978
|
-
image_of:
|
|
9979
|
-
format:
|
|
9843
|
+
queryParams: z83.object({
|
|
9844
|
+
snippetId: z83.string(),
|
|
9845
|
+
image_of: z83.enum(["schematic", "pcb"]),
|
|
9846
|
+
format: z83.enum(["svg"])
|
|
9980
9847
|
}),
|
|
9981
|
-
jsonResponse:
|
|
9982
|
-
ok:
|
|
9983
|
-
svg:
|
|
9848
|
+
jsonResponse: z83.object({
|
|
9849
|
+
ok: z83.boolean(),
|
|
9850
|
+
svg: z83.string()
|
|
9984
9851
|
})
|
|
9985
9852
|
})(async (req, ctx) => {
|
|
9986
9853
|
const { snippetId, image_of, format } = req.query;
|
|
@@ -10021,19 +9888,19 @@ var get_image_default = withRouteSpec({
|
|
|
10021
9888
|
});
|
|
10022
9889
|
|
|
10023
9890
|
// fake-snippets-api/routes/api/snippets/get.ts
|
|
10024
|
-
import { z as
|
|
9891
|
+
import { z as z84 } from "zod";
|
|
10025
9892
|
var get_default13 = withRouteSpec({
|
|
10026
9893
|
methods: ["GET", "POST"],
|
|
10027
9894
|
auth: "optional_session",
|
|
10028
|
-
commonParams:
|
|
10029
|
-
snippet_id:
|
|
10030
|
-
name:
|
|
10031
|
-
owner_name:
|
|
10032
|
-
unscoped_name:
|
|
9895
|
+
commonParams: z84.object({
|
|
9896
|
+
snippet_id: z84.string().optional(),
|
|
9897
|
+
name: z84.string().optional(),
|
|
9898
|
+
owner_name: z84.string().optional(),
|
|
9899
|
+
unscoped_name: z84.string().optional()
|
|
10033
9900
|
}),
|
|
10034
|
-
jsonBody:
|
|
10035
|
-
jsonResponse:
|
|
10036
|
-
ok:
|
|
9901
|
+
jsonBody: z84.any().optional(),
|
|
9902
|
+
jsonResponse: z84.object({
|
|
9903
|
+
ok: z84.boolean(),
|
|
10037
9904
|
snippet: snippetSchema
|
|
10038
9905
|
})
|
|
10039
9906
|
})(async (req, ctx) => {
|
|
@@ -10095,14 +9962,14 @@ import {
|
|
|
10095
9962
|
convertCircuitJsonToPcbSvg as convertCircuitJsonToPcbSvg3,
|
|
10096
9963
|
convertCircuitJsonToSchematicSvg as convertCircuitJsonToSchematicSvg3
|
|
10097
9964
|
} from "circuit-to-svg";
|
|
10098
|
-
import { z as
|
|
9965
|
+
import { z as z85 } from "zod";
|
|
10099
9966
|
var typeFormat_default = withRouteSpec({
|
|
10100
9967
|
methods: ["GET"],
|
|
10101
9968
|
auth: "none",
|
|
10102
|
-
routeParams:
|
|
10103
|
-
author:
|
|
10104
|
-
snippet_name:
|
|
10105
|
-
typeFormat:
|
|
9969
|
+
routeParams: z85.object({
|
|
9970
|
+
author: z85.string(),
|
|
9971
|
+
snippet_name: z85.string(),
|
|
9972
|
+
typeFormat: z85.string()
|
|
10106
9973
|
}),
|
|
10107
9974
|
rawResponse: true
|
|
10108
9975
|
})(async (req, ctx) => {
|
|
@@ -10158,11 +10025,11 @@ var typeFormat_default = withRouteSpec({
|
|
|
10158
10025
|
});
|
|
10159
10026
|
|
|
10160
10027
|
// fake-snippets-api/routes/api/snippets/list_latest.ts
|
|
10161
|
-
import { z as
|
|
10028
|
+
import { z as z86 } from "zod";
|
|
10162
10029
|
var list_latest_default2 = withRouteSpec({
|
|
10163
10030
|
methods: ["GET"],
|
|
10164
|
-
jsonResponse:
|
|
10165
|
-
snippets:
|
|
10031
|
+
jsonResponse: z86.object({
|
|
10032
|
+
snippets: z86.array(snippetSchema)
|
|
10166
10033
|
})
|
|
10167
10034
|
})(async (req, ctx) => {
|
|
10168
10035
|
const latestSnippets = ctx.db.getLatestSnippets(20);
|
|
@@ -10170,16 +10037,16 @@ var list_latest_default2 = withRouteSpec({
|
|
|
10170
10037
|
});
|
|
10171
10038
|
|
|
10172
10039
|
// fake-snippets-api/routes/api/snippets/list_trending.ts
|
|
10173
|
-
import { z as
|
|
10040
|
+
import { z as z87 } from "zod";
|
|
10174
10041
|
var list_trending_default2 = withRouteSpec({
|
|
10175
10042
|
methods: ["GET"],
|
|
10176
10043
|
auth: "none",
|
|
10177
|
-
jsonResponse:
|
|
10178
|
-
snippets:
|
|
10044
|
+
jsonResponse: z87.object({
|
|
10045
|
+
snippets: z87.array(snippetSchema)
|
|
10179
10046
|
}),
|
|
10180
|
-
queryParams:
|
|
10181
|
-
time_period:
|
|
10182
|
-
tag:
|
|
10047
|
+
queryParams: z87.object({
|
|
10048
|
+
time_period: z87.enum(["7days", "30days", "all"]).optional().default("all"),
|
|
10049
|
+
tag: z87.string().optional()
|
|
10183
10050
|
})
|
|
10184
10051
|
})(async (req, ctx) => {
|
|
10185
10052
|
const { time_period, tag } = req.query;
|
|
@@ -10200,19 +10067,19 @@ var list_trending_default2 = withRouteSpec({
|
|
|
10200
10067
|
});
|
|
10201
10068
|
|
|
10202
10069
|
// fake-snippets-api/routes/api/snippets/list.ts
|
|
10203
|
-
import { z as
|
|
10070
|
+
import { z as z88 } from "zod";
|
|
10204
10071
|
var list_default10 = withRouteSpec({
|
|
10205
10072
|
methods: ["GET", "POST"],
|
|
10206
10073
|
auth: "optional_session",
|
|
10207
|
-
commonParams:
|
|
10208
|
-
owner_name:
|
|
10209
|
-
unscoped_name:
|
|
10210
|
-
starred_by:
|
|
10074
|
+
commonParams: z88.object({
|
|
10075
|
+
owner_name: z88.string().optional(),
|
|
10076
|
+
unscoped_name: z88.string().optional(),
|
|
10077
|
+
starred_by: z88.string().optional()
|
|
10211
10078
|
}),
|
|
10212
|
-
jsonBody:
|
|
10213
|
-
jsonResponse:
|
|
10214
|
-
ok:
|
|
10215
|
-
snippets:
|
|
10079
|
+
jsonBody: z88.any().optional(),
|
|
10080
|
+
jsonResponse: z88.object({
|
|
10081
|
+
ok: z88.boolean(),
|
|
10082
|
+
snippets: z88.array(snippetSchema)
|
|
10216
10083
|
})
|
|
10217
10084
|
})(async (req, ctx) => {
|
|
10218
10085
|
const { owner_name, unscoped_name, starred_by } = req.commonParams;
|
|
@@ -10320,16 +10187,16 @@ var list_default10 = withRouteSpec({
|
|
|
10320
10187
|
});
|
|
10321
10188
|
|
|
10322
10189
|
// fake-snippets-api/routes/api/snippets/remove_star.ts
|
|
10323
|
-
import { z as
|
|
10190
|
+
import { z as z89 } from "zod";
|
|
10324
10191
|
var remove_star_default2 = withRouteSpec({
|
|
10325
10192
|
methods: ["POST"],
|
|
10326
10193
|
auth: "session",
|
|
10327
|
-
jsonBody:
|
|
10328
|
-
snippet_id:
|
|
10194
|
+
jsonBody: z89.object({
|
|
10195
|
+
snippet_id: z89.string()
|
|
10329
10196
|
}),
|
|
10330
|
-
jsonResponse:
|
|
10331
|
-
ok:
|
|
10332
|
-
is_starred:
|
|
10197
|
+
jsonResponse: z89.object({
|
|
10198
|
+
ok: z89.boolean(),
|
|
10199
|
+
is_starred: z89.boolean()
|
|
10333
10200
|
})
|
|
10334
10201
|
})(async (req, ctx) => {
|
|
10335
10202
|
const { snippet_id } = req.jsonBody;
|
|
@@ -10354,15 +10221,15 @@ var remove_star_default2 = withRouteSpec({
|
|
|
10354
10221
|
});
|
|
10355
10222
|
|
|
10356
10223
|
// fake-snippets-api/routes/api/snippets/search.ts
|
|
10357
|
-
import { z as
|
|
10224
|
+
import { z as z90 } from "zod";
|
|
10358
10225
|
var search_default3 = withRouteSpec({
|
|
10359
10226
|
methods: ["GET"],
|
|
10360
10227
|
auth: "none",
|
|
10361
|
-
queryParams:
|
|
10362
|
-
q:
|
|
10228
|
+
queryParams: z90.object({
|
|
10229
|
+
q: z90.string()
|
|
10363
10230
|
}),
|
|
10364
|
-
jsonResponse:
|
|
10365
|
-
snippets:
|
|
10231
|
+
jsonResponse: z90.object({
|
|
10232
|
+
snippets: z90.array(snippetSchema)
|
|
10366
10233
|
})
|
|
10367
10234
|
})(async (req, ctx) => {
|
|
10368
10235
|
const { q } = req.query;
|
|
@@ -10371,25 +10238,25 @@ var search_default3 = withRouteSpec({
|
|
|
10371
10238
|
});
|
|
10372
10239
|
|
|
10373
10240
|
// fake-snippets-api/routes/api/snippets/update.ts
|
|
10374
|
-
import { z as
|
|
10241
|
+
import { z as z91 } from "zod";
|
|
10375
10242
|
var update_default5 = withRouteSpec({
|
|
10376
10243
|
methods: ["POST"],
|
|
10377
10244
|
auth: "session",
|
|
10378
|
-
jsonBody:
|
|
10379
|
-
snippet_id:
|
|
10380
|
-
code:
|
|
10381
|
-
description:
|
|
10382
|
-
unscoped_name:
|
|
10383
|
-
dts:
|
|
10384
|
-
compiled_js:
|
|
10385
|
-
circuit_json:
|
|
10386
|
-
manual_edits_json_content:
|
|
10387
|
-
snippet_type:
|
|
10388
|
-
is_private:
|
|
10389
|
-
is_unlisted:
|
|
10245
|
+
jsonBody: z91.object({
|
|
10246
|
+
snippet_id: z91.string(),
|
|
10247
|
+
code: z91.string().optional(),
|
|
10248
|
+
description: z91.string().optional(),
|
|
10249
|
+
unscoped_name: z91.string().optional(),
|
|
10250
|
+
dts: z91.string().optional(),
|
|
10251
|
+
compiled_js: z91.string().optional().nullable(),
|
|
10252
|
+
circuit_json: z91.array(z91.record(z91.any())).optional().nullable(),
|
|
10253
|
+
manual_edits_json_content: z91.string().optional().nullable(),
|
|
10254
|
+
snippet_type: z91.enum(["board", "package", "model", "footprint"]).optional(),
|
|
10255
|
+
is_private: z91.boolean().optional(),
|
|
10256
|
+
is_unlisted: z91.boolean().optional()
|
|
10390
10257
|
}),
|
|
10391
|
-
jsonResponse:
|
|
10392
|
-
ok:
|
|
10258
|
+
jsonResponse: z91.object({
|
|
10259
|
+
ok: z91.boolean(),
|
|
10393
10260
|
snippet: snippetSchema
|
|
10394
10261
|
})
|
|
10395
10262
|
})(async (req, ctx) => {
|
|
@@ -10539,7 +10406,6 @@ var routeMapWithHandlers = {
|
|
|
10539
10406
|
"/api/packages/create": create_default10,
|
|
10540
10407
|
"/api/packages/delete": delete_default3,
|
|
10541
10408
|
"/api/packages/fork": fork_default,
|
|
10542
|
-
"/api/packages/generate_from_jlcpcb": generate_from_jlcpcb_default,
|
|
10543
10409
|
"/api/packages/get": get_default12,
|
|
10544
10410
|
"/api/packages/images/[owner_github_username]/[unscoped_name]/[view_format]": view_format_default,
|
|
10545
10411
|
"/api/packages/list_latest": list_latest_default,
|
|
@@ -10555,7 +10421,6 @@ var routeMapWithHandlers = {
|
|
|
10555
10421
|
"/api/snippets/create": create_default11,
|
|
10556
10422
|
"/api/snippets/delete": delete_default5,
|
|
10557
10423
|
"/api/snippets/download": download_default2,
|
|
10558
|
-
"/api/snippets/generate_from_jlcpcb": generate_from_jlcpcb_default2,
|
|
10559
10424
|
"/api/snippets/get_image": get_image_default,
|
|
10560
10425
|
"/api/snippets/get": get_default13,
|
|
10561
10426
|
"/api/snippets/images/[author]/[snippet_name]/[typeFormat]": typeFormat_default,
|
|
@@ -10575,4 +10440,4 @@ var stdin_default = winterSpec;
|
|
|
10575
10440
|
export {
|
|
10576
10441
|
stdin_default as default
|
|
10577
10442
|
};
|
|
10578
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiIsICJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjLnRzIiwgImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9kYi1jbGllbnQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvYXV0b2xvYWQtZGV2LXBhY2thZ2VzLnRzIiwgImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zZWVkLnRzIiwgImZha2Utc25pcHBldHMtYXBpL2xpYi9wYWNrYWdlX2ZpbGUvZ2VuZXJhdGUtZnMtc2hhLnRzIiwgImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtZGIudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC1jdHgtZXJyb3IudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC1zZXNzaW9uLWF1dGgudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC1vcHRpb25hbC1zZXNzaW9uLWF1dGgudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC1lcnJvci1oYW5kbGluZy50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXJlcXVlc3QtbG9nZ2luZy50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL19mYWtlL2FpX3Jldmlld3MvcHJvY2Vzc19yZXZpZXcudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9fZmFrZS9kYXRhc2hlZXRzL3Byb2Nlc3NfYWxsX2RhdGFzaGVldHMudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9fZmFrZS9kYi50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL19mYWtlL21vdmVfb3JkZXJzX2ZvcndhcmQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvdXRpbHMvb3JkZXItc3RlcHMudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9fZmFrZS9yZWNlaXZlZF9xdW90ZXMudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9fZmFrZS9ydW5fYXN5bmNfdGFza3MudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9fZmFrZS9zZWVkLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvYWNjb3VudHMvZ2V0X2FjY291bnRfYmFsYW5jZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2FjY291bnRzL2dldC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2FjY291bnRzL3NlYXJjaC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2FjY291bnRzL3VwZGF0ZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2FpX3Jldmlld3MvY3JlYXRlLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvYWlfcmV2aWV3cy9nZXQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9haV9yZXZpZXdzL2xpc3QudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9haS9bLi4uYW55cm91dGVdLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvYWkudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9haXN0cmVhbS9bLi4uYW55cm91dGVdLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvYXV0b2NvbXBsZXRlL2NyZWF0ZV9hdXRvY29tcGxldGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9idWdfcmVwb3J0cy9jcmVhdGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9idWdfcmVwb3J0cy9kb3dubG9hZF96aXAudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9idWdfcmVwb3J0cy91cGxvYWRfZmlsZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS91dGlscy9ub3JtYWxpemVQcm9qZWN0RmlsZVBhdGgudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9kYXRhc2hlZXRzL2NyZWF0ZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2RhdGFzaGVldHMvZ2V0LnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvZGF0YXNoZWV0cy9saXN0LnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvZ2l0aHViL2luc3RhbGxhdGlvbnMvY3JlYXRlX25ld19pbnN0YWxsYXRpb25fcmVkaXJlY3QudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9naXRodWIvcmVwb3MvbGlzdF9hdmFpbGFibGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9naXRodWIvcmVwb3MvcmVmcmVzaC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2hlYWx0aC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2ludGVybmFsL3Nlc3Npb25zL2NyZWF0ZV93aXRob3V0X2F1dGgudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmRlcl9maWxlcy9nZXQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmRlcl9maWxlcy91cGxvYWQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmRlcl9xdW90ZXMvY3JlYXRlX2FsbF92ZW5kb3JfcXVvdGVzLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3JkZXJfcXVvdGVzL2NyZWF0ZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZGVyX3F1b3Rlcy9nZXQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmRlcnMvY3JlYXRlLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3JkZXJzL2dldC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZGVycy9saXN0LnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9hZGRfbWVtYmVyLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9jcmVhdGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3B1YmxpYy1tYXBwaW5nL3B1YmxpYy1tYXAtb3JnLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9kZWxldGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL2dldF9tZW1iZXIudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL2dldC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvaW52aXRhdGlvbnMvYWNjZXB0LnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9pbnZpdGF0aW9ucy9jcmVhdGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL2ludml0YXRpb25zL2dldC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvaW52aXRhdGlvbnMvbGlzdC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvaW52aXRhdGlvbnMvcmV2b2tlLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9saXN0X21lbWJlcnMudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL2xpc3QudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL3JlbW92ZV9tZW1iZXIudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL3VwZGF0ZV9tZW1iZXIudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL3VwZGF0ZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvdXBsb2FkX2F2YXRhci50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VfYnVpbGRzL2dldC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcHVibGljLW1hcHBpbmcvcHVibGljLW1hcC1wYWNrYWdlLWJ1aWxkLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9idWlsZHMvbGlzdC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcGFja2FnZV9yZWxlYXNlL2ZpbmQtcGFja2FnZS1yZWxlYXNlLWlkLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9maWxlcy9jcmVhdGVfb3JfdXBkYXRlLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9maWxlcy9jcmVhdGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlX2ZpbGVzL2RlbGV0ZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcGFja2FnZV9maWxlL2dldC1wYWNrYWdlLWZpbGUtaWQtZnJvbS1maWxlLWRlc2NyaXB0b3IudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlX2ZpbGVzL2Rvd25sb2FkLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9maWxlcy9nZXQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlX2ZpbGVzL2xpc3QudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3B1YmxpYy1tYXBwaW5nL3B1YmxpYy1tYXAtcGFja2FnZS1yZWxlYXNlLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9yZWxlYXNlcy9jcmVhdGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlX3JlbGVhc2VzL2dldC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VfcmVsZWFzZXMvbGlzdC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VfcmVsZWFzZXMvcmVidWlsZC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VfcmVsZWFzZXMvdXBkYXRlLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZXMvYWRkX3N0YXIudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3B1YmxpYy1tYXBwaW5nL3B1YmxpYy1tYXAtcGFja2FnZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2NyZWF0ZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2RlbGV0ZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2ZvcmsudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy9nZW5lcmF0ZV9mcm9tX2psY3BjYi50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2dldC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2ltYWdlcy9bb3duZXJfZ2l0aHViX3VzZXJuYW1lXS9bdW5zY29wZWRfbmFtZV0vW3ZpZXdfZm9ybWF0XS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2xpc3RfbGF0ZXN0LnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZXMvbGlzdF90cmVuZGluZy50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2xpc3QudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy9yZW1vdmVfc3Rhci50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL3NlYXJjaC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL3VwZGF0ZV9haV9kZXNjcmlwdGlvbi50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL3VwZGF0ZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3Byb3h5LnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc2Vzc2lvbnMvZGVsZXRlLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvYWRkX3N0YXIudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9jcmVhdGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9kZWxldGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9kb3dubG9hZC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL2dlbmVyYXRlX2Zyb21famxjcGNiLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvZ2V0X2ltYWdlLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvZ2V0LnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvaW1hZ2VzL1thdXRob3JdL1tzbmlwcGV0X25hbWVdL1t0eXBlRm9ybWF0XS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL2xpc3RfbGF0ZXN0LnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvbGlzdF90cmVuZGluZy50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL2xpc3QudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9yZW1vdmVfc3Rhci50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL3NlYXJjaC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL3VwZGF0ZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHtnZXRSb3V0ZU1hdGNoZXJ9IGZyb20gXCJuZXh0LXJvdXRlLW1hdGNoZXJcIlxuaW1wb3J0IHsgbWFrZVJlcXVlc3RBZ2FpbnN0V2ludGVyU3BlYyB9IGZyb20gXCJ3aW50ZXJzcGVjXCJcblxuaW1wb3J0ICogYXMgcHZtZWZhbXZhcGRjeHdlayBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvX2Zha2UvYWlfcmV2aWV3cy9wcm9jZXNzX3Jldmlldy50c1wiXG5pbXBvcnQgKiBhcyB4emt3Z2pjYWpnd2Z2YW56IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9fZmFrZS9kYXRhc2hlZXRzL3Byb2Nlc3NfYWxsX2RhdGFzaGVldHMudHNcIlxuaW1wb3J0ICogYXMgcmpvYWNmb3hzbWRmenhoaiBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvX2Zha2UvZGIudHNcIlxuaW1wb3J0ICogYXMgbGViY2ludW5icXJraWFwaiBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvX2Zha2UvbW92ZV9vcmRlcnNfZm9yd2FyZC50c1wiXG5pbXBvcnQgKiBhcyB4cmxteWNzZWpqa3duamVmIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9fZmFrZS9yZWNlaXZlZF9xdW90ZXMudHNcIlxuaW1wb3J0ICogYXMgcXlwcmdvdm1rdGJodHljbSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvX2Zha2UvcnVuX2FzeW5jX3Rhc2tzLnRzXCJcbmltcG9ydCAqIGFzIGhuZnFocHpta3hjbGZpaWggZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL19mYWtlL3NlZWQudHNcIlxuaW1wb3J0ICogYXMgZ2hvZ29xbXhjaHRzZXVhciBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvYWNjb3VudHMvZ2V0X2FjY291bnRfYmFsYW5jZS50c1wiXG5pbXBvcnQgKiBhcyBweWNvdWdidXV0emJqYmtwIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9hY2NvdW50cy9nZXQudHNcIlxuaW1wb3J0ICogYXMga2FtanZscGllamVoc2xycSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvYWNjb3VudHMvc2VhcmNoLnRzXCJcbmltcG9ydCAqIGFzIHB0a2F5bmpoc3FjZWJlYWogZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2FjY291bnRzL3VwZGF0ZS50c1wiXG5pbXBvcnQgKiBhcyB3ZWFhbnJjaGttYXRieWVuIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9haV9yZXZpZXdzL2NyZWF0ZS50c1wiXG5pbXBvcnQgKiBhcyBtd3BpaHB5eGtqYWdvb2ZqIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9haV9yZXZpZXdzL2dldC50c1wiXG5pbXBvcnQgKiBhcyBnc29lZ3BqcXN0YXJqdXVuIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9haV9yZXZpZXdzL2xpc3QudHNcIlxuaW1wb3J0ICogYXMgdnRhZGludm1oemlhenBtcCBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvYWkudHNcIlxuaW1wb3J0ICogYXMgYWxjaGZ6Y2h2ZmdobXZraCBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvYWkvWy4uLmFueXJvdXRlXS50c1wiXG5pbXBvcnQgKiBhcyBidGh3eGpmam1zZGJyZHVmIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9haXN0cmVhbS9bLi4uYW55cm91dGVdLnRzXCJcbmltcG9ydCAqIGFzIHNpdXBhYndpdndwdGNtZmUgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2F1dG9jb21wbGV0ZS9jcmVhdGVfYXV0b2NvbXBsZXRlLnRzXCJcbmltcG9ydCAqIGFzIHpuemJoeWdyZmFka2t3enYgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2J1Z19yZXBvcnRzL2NyZWF0ZS50c1wiXG5pbXBvcnQgKiBhcyBocHRxcWJwYnpucWJoemF5IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9idWdfcmVwb3J0cy9kb3dubG9hZF96aXAudHNcIlxuaW1wb3J0ICogYXMgcW5xeW9idGZyYmRjaWhhcCBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvYnVnX3JlcG9ydHMvdXBsb2FkX2ZpbGUudHNcIlxuaW1wb3J0ICogYXMgZnRsc2djaGRpcHVyZXBodSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvZGF0YXNoZWV0cy9jcmVhdGUudHNcIlxuaW1wb3J0ICogYXMgc3lxY3V2b3praGJ6bHhzYSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvZGF0YXNoZWV0cy9nZXQudHNcIlxuaW1wb3J0ICogYXMgZWp4dmdseHpzZHlqZ21sciBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvZGF0YXNoZWV0cy9saXN0LnRzXCJcbmltcG9ydCAqIGFzIHd6b2Nvb3BxcWF2cmxrYnIgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2dpdGh1Yi9pbnN0YWxsYXRpb25zL2NyZWF0ZV9uZXdfaW5zdGFsbGF0aW9uX3JlZGlyZWN0LnRzXCJcbmltcG9ydCAqIGFzIHVka2xzc3hyaHFicW5idG0gZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2dpdGh1Yi9yZXBvcy9saXN0X2F2YWlsYWJsZS50c1wiXG5pbXBvcnQgKiBhcyBqb2FnY2ZjaGJsYnV4bHpkIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9naXRodWIvcmVwb3MvcmVmcmVzaC50c1wiXG5pbXBvcnQgKiBhcyBlem9qbHZibWdpZGd4bXZtIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9oZWFsdGgudHNcIlxuaW1wb3J0ICogYXMgY21xb3NzZnJqZ2twb2ZjeSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvaW50ZXJuYWwvc2Vzc2lvbnMvY3JlYXRlX3dpdGhvdXRfYXV0aC50c1wiXG5pbXBvcnQgKiBhcyBtdHVpdXFsb3d6eXFvZWFsIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmRlcl9maWxlcy9nZXQudHNcIlxuaW1wb3J0ICogYXMgcmF2YXl3Y29teWlnaWZ0ZyBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3JkZXJfZmlsZXMvdXBsb2FkLnRzXCJcbmltcG9ydCAqIGFzIGR3em93YnBweXdncGVpZWQgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZGVyX3F1b3Rlcy9jcmVhdGVfYWxsX3ZlbmRvcl9xdW90ZXMudHNcIlxuaW1wb3J0ICogYXMgaWV6cGttcnh4bGlpYXB2aSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3JkZXJfcXVvdGVzL2NyZWF0ZS50c1wiXG5pbXBvcnQgKiBhcyByaGpwenNlZWlzeGFmY2V4IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmRlcl9xdW90ZXMvZ2V0LnRzXCJcbmltcG9ydCAqIGFzIHptZnhrbGthaW5qY3lmeXogZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZGVycy9jcmVhdGUudHNcIlxuaW1wb3J0ICogYXMgYWZqZXRuc2R2ZWplYndrZyBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3JkZXJzL2dldC50c1wiXG5pbXBvcnQgKiBhcyB3bWx3end4YWVyaWx5bnJiIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmRlcnMvbGlzdC50c1wiXG5pbXBvcnQgKiBhcyBocGpuZGtkeXpncWZwbWRzIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL2FkZF9tZW1iZXIudHNcIlxuaW1wb3J0ICogYXMgc3BkdXBha256dWtqaXhpayBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9jcmVhdGUudHNcIlxuaW1wb3J0ICogYXMgdmx5aXR2ZmRlYnNvYXNvaiBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9kZWxldGUudHNcIlxuaW1wb3J0ICogYXMgb2Vsd29jY2pvdmxxZ2F1byBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9nZXRfbWVtYmVyLnRzXCJcbmltcG9ydCAqIGFzIGJpanFuaGNjdG1mbnV0eXYgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvZ2V0LnRzXCJcbmltcG9ydCAqIGFzIGJybHJ0ZnRnb3F5Y256ZGwgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvaW52aXRhdGlvbnMvYWNjZXB0LnRzXCJcbmltcG9ydCAqIGFzIHRkYmp1a3FsemlodHBob2ggZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvaW52aXRhdGlvbnMvY3JlYXRlLnRzXCJcbmltcG9ydCAqIGFzIGRhaWZyamRndHp2c25qbmogZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvaW52aXRhdGlvbnMvZ2V0LnRzXCJcbmltcG9ydCAqIGFzIGhqbXNkbXFjZmt4enVhbmMgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvaW52aXRhdGlvbnMvbGlzdC50c1wiXG5pbXBvcnQgKiBhcyByaXVnbndjdHFubXFwbWV2IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL2ludml0YXRpb25zL3Jldm9rZS50c1wiXG5pbXBvcnQgKiBhcyBmemhkam92bmhlYXJlam1iIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL2xpc3RfbWVtYmVycy50c1wiXG5pbXBvcnQgKiBhcyBkamhucm1iYW94YnlrdGpjIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL2xpc3QudHNcIlxuaW1wb3J0ICogYXMgaHBkcG13eWJhaXhwcmVyaCBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9yZW1vdmVfbWVtYmVyLnRzXCJcbmltcG9ydCAqIGFzIHp4Y3NxcGtucWZnd21paXQgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvdXBkYXRlX21lbWJlci50c1wiXG5pbXBvcnQgKiBhcyB4d3NoZGRmcG1xa25tbmh1IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL3VwZGF0ZS50c1wiXG5pbXBvcnQgKiBhcyB3cXhjZWt3aWVndXJ2cnJsIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL3VwbG9hZF9hdmF0YXIudHNcIlxuaW1wb3J0ICogYXMgZm53dHVqc2xidmJ1dWN6YyBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9idWlsZHMvZ2V0LnRzXCJcbmltcG9ydCAqIGFzIG9zbmtnY3RwbnRmZmZvZm4gZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VfYnVpbGRzL2xpc3QudHNcIlxuaW1wb3J0ICogYXMgendoY3R3YWxtZGdoYXJwZyBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9maWxlcy9jcmVhdGVfb3JfdXBkYXRlLnRzXCJcbmltcG9ydCAqIGFzIGxheWdsbGpkam9jbnpveXEgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VfZmlsZXMvY3JlYXRlLnRzXCJcbmltcG9ydCAqIGFzIG11ZHJlcWJqYXBnZ3phaXQgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VfZmlsZXMvZGVsZXRlLnRzXCJcbmltcG9ydCAqIGFzIHhkYmh5b3BoZmhiaGh2a3kgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VfZmlsZXMvZG93bmxvYWQudHNcIlxuaW1wb3J0ICogYXMgZ2twbnR6Y2dya3NtdXZ5aCBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9maWxlcy9nZXQudHNcIlxuaW1wb3J0ICogYXMgcm5vcmhnaWptaHJvbXpqYyBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9maWxlcy9saXN0LnRzXCJcbmltcG9ydCAqIGFzIHpqZXVmc216ZGV2d2V1aGQgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VfcmVsZWFzZXMvY3JlYXRlLnRzXCJcbmltcG9ydCAqIGFzIHhld2pkb3F6aXJqdnN1bnggZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VfcmVsZWFzZXMvZ2V0LnRzXCJcbmltcG9ydCAqIGFzIHdmcGN5eXVqY253Z2J5aXUgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VfcmVsZWFzZXMvbGlzdC50c1wiXG5pbXBvcnQgKiBhcyBpdm92cmNtcGNzdGN4dGluIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlX3JlbGVhc2VzL3JlYnVpbGQudHNcIlxuaW1wb3J0ICogYXMgc3FvaGN5ZGVqd2V3bnZ6dyBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9yZWxlYXNlcy91cGRhdGUudHNcIlxuaW1wb3J0ICogYXMgYWtpcmVpYnNuam51bHN4YiBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZXMvYWRkX3N0YXIudHNcIlxuaW1wb3J0ICogYXMgeWloanl3eG56aWZrbmF3bCBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZXMvY3JlYXRlLnRzXCJcbmltcG9ydCAqIGFzIGRnc3hnb3h0cG5hcHZqcWsgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2RlbGV0ZS50c1wiXG5pbXBvcnQgKiBhcyBrYnh5cGRnaHJhZXhtdXl5IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy9mb3JrLnRzXCJcbmltcG9ydCAqIGFzIGdiaWxuY253cGRncG5sY3kgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2dlbmVyYXRlX2Zyb21famxjcGNiLnRzXCJcbmltcG9ydCAqIGFzIHdpanFieWR3aGdqb2JkaGkgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2dldC50c1wiXG5pbXBvcnQgKiBhcyB0b2t2dndqbW51c2tjeGZqIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy9pbWFnZXMvW293bmVyX2dpdGh1Yl91c2VybmFtZV0vW3Vuc2NvcGVkX25hbWVdL1t2aWV3X2Zvcm1hdF0udHNcIlxuaW1wb3J0ICogYXMgcGRhaXZoZWxoZHFkbXZ2dCBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZXMvbGlzdF9sYXRlc3QudHNcIlxuaW1wb3J0ICogYXMgeHpwd2J1bnJicWlra3FkaiBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZXMvbGlzdF90cmVuZGluZy50c1wiXG5pbXBvcnQgKiBhcyBqZ3h2aGhiZGNlcmdobXh0IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy9saXN0LnRzXCJcbmltcG9ydCAqIGFzIHpxa3ZqeHJ6bHFobHJ3eWUgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL3JlbW92ZV9zdGFyLnRzXCJcbmltcG9ydCAqIGFzIGVsdXNvdGprcWJnbWdmemggZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL3NlYXJjaC50c1wiXG5pbXBvcnQgKiBhcyBoeWVycXRvdmhpZnN6ZnRmIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy91cGRhdGVfYWlfZGVzY3JpcHRpb24udHNcIlxuaW1wb3J0ICogYXMgdnFxcHppZHlka2x2a2ZudCBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZXMvdXBkYXRlLnRzXCJcbmltcG9ydCAqIGFzIGVpYmVidHpuam56bHp4Y3EgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3Byb3h5LnRzXCJcbmltcG9ydCAqIGFzIGpzd290ZWliaG9hamp5b20gZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3Nlc3Npb25zL2RlbGV0ZS50c1wiXG5pbXBvcnQgKiBhcyBnbnNkZm5rcm52dXZuZWRrIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9hZGRfc3Rhci50c1wiXG5pbXBvcnQgKiBhcyBpaG5nbm52dmR6aXh3aXR0IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9jcmVhdGUudHNcIlxuaW1wb3J0ICogYXMgZ2xkZWRkdmJrc3JhZHJhayBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvZGVsZXRlLnRzXCJcbmltcG9ydCAqIGFzIGt3bXF5bXRudmtwb21yd20gZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL2Rvd25sb2FkLnRzXCJcbmltcG9ydCAqIGFzIHhmaHV1ZmxraXdveXh6dGYgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL2dlbmVyYXRlX2Zyb21famxjcGNiLnRzXCJcbmltcG9ydCAqIGFzIHJuc3VjcXpmb3F5b2FmYWIgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL2dldF9pbWFnZS50c1wiXG5pbXBvcnQgKiBhcyB2aWpvd3Fya2J3dGJhdnR4IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9nZXQudHNcIlxuaW1wb3J0ICogYXMgeGN2Znp6a2N4d2ZkenhtaSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvaW1hZ2VzL1thdXRob3JdL1tzbmlwcGV0X25hbWVdL1t0eXBlRm9ybWF0XS50c1wiXG5pbXBvcnQgKiBhcyB6bHJqdmdjbGZldGlmYmdpIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9saXN0X2xhdGVzdC50c1wiXG5pbXBvcnQgKiBhcyBsZnZiYWVlamhtZ3BlcXdvIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9saXN0X3RyZW5kaW5nLnRzXCJcbmltcG9ydCAqIGFzIGRnY3lyaHltZWFnemZwd3UgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL2xpc3QudHNcIlxuaW1wb3J0ICogYXMgbnZ1bXFlcGloZnB1Z3ZseCBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvcmVtb3ZlX3N0YXIudHNcIlxuaW1wb3J0ICogYXMgdGx0YWJkcmt3bGNtb2RlbyBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvc2VhcmNoLnRzXCJcbmltcG9ydCAqIGFzIHJkdGhkeXN2cWF0Y3F4d3EgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL3VwZGF0ZS50c1wiXG5cbmNvbnN0IHJvdXRlTWFwV2l0aEhhbmRsZXJzID0ge1xuICBcIi9hcGkvX2Zha2UvYWlfcmV2aWV3cy9wcm9jZXNzX3Jldmlld1wiOiBwdm1lZmFtdmFwZGN4d2VrLmRlZmF1bHQsXCIvYXBpL19mYWtlL2RhdGFzaGVldHMvcHJvY2Vzc19hbGxfZGF0YXNoZWV0c1wiOiB4emt3Z2pjYWpnd2Z2YW56LmRlZmF1bHQsXCIvYXBpL19mYWtlL2RiXCI6IHJqb2FjZm94c21kZnp4aGouZGVmYXVsdCxcIi9hcGkvX2Zha2UvbW92ZV9vcmRlcnNfZm9yd2FyZFwiOiBsZWJjaW51bmJxcmtpYXBqLmRlZmF1bHQsXCIvYXBpL19mYWtlL3JlY2VpdmVkX3F1b3Rlc1wiOiB4cmxteWNzZWpqa3duamVmLmRlZmF1bHQsXCIvYXBpL19mYWtlL3J1bl9hc3luY190YXNrc1wiOiBxeXByZ292bWt0Ymh0eWNtLmRlZmF1bHQsXCIvYXBpL19mYWtlL3NlZWRcIjogaG5mcWhwem1reGNsZmlpaC5kZWZhdWx0LFwiL2FwaS9hY2NvdW50cy9nZXRfYWNjb3VudF9iYWxhbmNlXCI6IGdob2dvcW14Y2h0c2V1YXIuZGVmYXVsdCxcIi9hcGkvYWNjb3VudHMvZ2V0XCI6IHB5Y291Z2J1dXR6Ympia3AuZGVmYXVsdCxcIi9hcGkvYWNjb3VudHMvc2VhcmNoXCI6IGthbWp2bHBpZWplaHNscnEuZGVmYXVsdCxcIi9hcGkvYWNjb3VudHMvdXBkYXRlXCI6IHB0a2F5bmpoc3FjZWJlYWouZGVmYXVsdCxcIi9hcGkvYWlfcmV2aWV3cy9jcmVhdGVcIjogd2VhYW5yY2hrbWF0Ynllbi5kZWZhdWx0LFwiL2FwaS9haV9yZXZpZXdzL2dldFwiOiBtd3BpaHB5eGtqYWdvb2ZqLmRlZmF1bHQsXCIvYXBpL2FpX3Jldmlld3MvbGlzdFwiOiBnc29lZ3BqcXN0YXJqdXVuLmRlZmF1bHQsXCIvYXBpL2FpXCI6IHZ0YWRpbnZtaHppYXpwbXAuZGVmYXVsdCxcIi9hcGkvYWkvWy4uLmFueXJvdXRlXVwiOiBhbGNoZnpjaHZmZ2htdmtoLmRlZmF1bHQsXCIvYXBpL2Fpc3RyZWFtL1suLi5hbnlyb3V0ZV1cIjogYnRod3hqZmptc2RicmR1Zi5kZWZhdWx0LFwiL2FwaS9hdXRvY29tcGxldGUvY3JlYXRlX2F1dG9jb21wbGV0ZVwiOiBzaXVwYWJ3aXZ3cHRjbWZlLmRlZmF1bHQsXCIvYXBpL2J1Z19yZXBvcnRzL2NyZWF0ZVwiOiB6bnpiaHlncmZhZGtrd3p2LmRlZmF1bHQsXCIvYXBpL2J1Z19yZXBvcnRzL2Rvd25sb2FkX3ppcFwiOiBocHRxcWJwYnpucWJoemF5LmRlZmF1bHQsXCIvYXBpL2J1Z19yZXBvcnRzL3VwbG9hZF9maWxlXCI6IHFucXlvYnRmcmJkY2loYXAuZGVmYXVsdCxcIi9hcGkvZGF0YXNoZWV0cy9jcmVhdGVcIjogZnRsc2djaGRpcHVyZXBodS5kZWZhdWx0LFwiL2FwaS9kYXRhc2hlZXRzL2dldFwiOiBzeXFjdXZvemtoYnpseHNhLmRlZmF1bHQsXCIvYXBpL2RhdGFzaGVldHMvbGlzdFwiOiBlanh2Z2x4enNkeWpnbWxyLmRlZmF1bHQsXCIvYXBpL2dpdGh1Yi9pbnN0YWxsYXRpb25zL2NyZWF0ZV9uZXdfaW5zdGFsbGF0aW9uX3JlZGlyZWN0XCI6IHd6b2Nvb3BxcWF2cmxrYnIuZGVmYXVsdCxcIi9hcGkvZ2l0aHViL3JlcG9zL2xpc3RfYXZhaWxhYmxlXCI6IHVka2xzc3hyaHFicW5idG0uZGVmYXVsdCxcIi9hcGkvZ2l0aHViL3JlcG9zL3JlZnJlc2hcIjogam9hZ2NmY2hibGJ1eGx6ZC5kZWZhdWx0LFwiL2FwaS9oZWFsdGhcIjogZXpvamx2Ym1naWRneG12bS5kZWZhdWx0LFwiL2FwaS9pbnRlcm5hbC9zZXNzaW9ucy9jcmVhdGVfd2l0aG91dF9hdXRoXCI6IGNtcW9zc2ZyamdrcG9mY3kuZGVmYXVsdCxcIi9hcGkvb3JkZXJfZmlsZXMvZ2V0XCI6IG10dWl1cWxvd3p5cW9lYWwuZGVmYXVsdCxcIi9hcGkvb3JkZXJfZmlsZXMvdXBsb2FkXCI6IHJhdmF5d2NvbXlpZ2lmdGcuZGVmYXVsdCxcIi9hcGkvb3JkZXJfcXVvdGVzL2NyZWF0ZV9hbGxfdmVuZG9yX3F1b3Rlc1wiOiBkd3pvd2JwcHl3Z3BlaWVkLmRlZmF1bHQsXCIvYXBpL29yZGVyX3F1b3Rlcy9jcmVhdGVcIjogaWV6cGttcnh4bGlpYXB2aS5kZWZhdWx0LFwiL2FwaS9vcmRlcl9xdW90ZXMvZ2V0XCI6IHJoanB6c2VlaXN4YWZjZXguZGVmYXVsdCxcIi9hcGkvb3JkZXJzL2NyZWF0ZVwiOiB6bWZ4a2xrYWluamN5Znl6LmRlZmF1bHQsXCIvYXBpL29yZGVycy9nZXRcIjogYWZqZXRuc2R2ZWplYndrZy5kZWZhdWx0LFwiL2FwaS9vcmRlcnMvbGlzdFwiOiB3bWx3end4YWVyaWx5bnJiLmRlZmF1bHQsXCIvYXBpL29yZ3MvYWRkX21lbWJlclwiOiBocGpuZGtkeXpncWZwbWRzLmRlZmF1bHQsXCIvYXBpL29yZ3MvY3JlYXRlXCI6IHNwZHVwYWtuenVraml4aWsuZGVmYXVsdCxcIi9hcGkvb3Jncy9kZWxldGVcIjogdmx5aXR2ZmRlYnNvYXNvai5kZWZhdWx0LFwiL2FwaS9vcmdzL2dldF9tZW1iZXJcIjogb2Vsd29jY2pvdmxxZ2F1by5kZWZhdWx0LFwiL2FwaS9vcmdzL2dldFwiOiBiaWpxbmhjY3RtZm51dHl2LmRlZmF1bHQsXCIvYXBpL29yZ3MvaW52aXRhdGlvbnMvYWNjZXB0XCI6IGJybHJ0ZnRnb3F5Y256ZGwuZGVmYXVsdCxcIi9hcGkvb3Jncy9pbnZpdGF0aW9ucy9jcmVhdGVcIjogdGRianVrcWx6aWh0cGhvaC5kZWZhdWx0LFwiL2FwaS9vcmdzL2ludml0YXRpb25zL2dldFwiOiBkYWlmcmpkZ3R6dnNuam5qLmRlZmF1bHQsXCIvYXBpL29yZ3MvaW52aXRhdGlvbnMvbGlzdFwiOiBoam1zZG1xY2ZreHp1YW5jLmRlZmF1bHQsXCIvYXBpL29yZ3MvaW52aXRhdGlvbnMvcmV2b2tlXCI6IHJpdWdud2N0cW5tcXBtZXYuZGVmYXVsdCxcIi9hcGkvb3Jncy9saXN0X21lbWJlcnNcIjogZnpoZGpvdm5oZWFyZWptYi5kZWZhdWx0LFwiL2FwaS9vcmdzL2xpc3RcIjogZGpobnJtYmFveGJ5a3RqYy5kZWZhdWx0LFwiL2FwaS9vcmdzL3JlbW92ZV9tZW1iZXJcIjogaHBkcG13eWJhaXhwcmVyaC5kZWZhdWx0LFwiL2FwaS9vcmdzL3VwZGF0ZV9tZW1iZXJcIjogenhjc3Fwa25xZmd3bWlpdC5kZWZhdWx0LFwiL2FwaS9vcmdzL3VwZGF0ZVwiOiB4d3NoZGRmcG1xa25tbmh1LmRlZmF1bHQsXCIvYXBpL29yZ3MvdXBsb2FkX2F2YXRhclwiOiB3cXhjZWt3aWVndXJ2cnJsLmRlZmF1bHQsXCIvYXBpL3BhY2thZ2VfYnVpbGRzL2dldFwiOiBmbnd0dWpzbGJ2YnV1Y3pjLmRlZmF1bHQsXCIvYXBpL3BhY2thZ2VfYnVpbGRzL2xpc3RcIjogb3Nua2djdHBudGZmZm9mbi5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlX2ZpbGVzL2NyZWF0ZV9vcl91cGRhdGVcIjogendoY3R3YWxtZGdoYXJwZy5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlX2ZpbGVzL2NyZWF0ZVwiOiBsYXlnbGxqZGpvY256b3lxLmRlZmF1bHQsXCIvYXBpL3BhY2thZ2VfZmlsZXMvZGVsZXRlXCI6IG11ZHJlcWJqYXBnZ3phaXQuZGVmYXVsdCxcIi9hcGkvcGFja2FnZV9maWxlcy9kb3dubG9hZFwiOiB4ZGJoeW9waGZoYmhodmt5LmRlZmF1bHQsXCIvYXBpL3BhY2thZ2VfZmlsZXMvZ2V0XCI6IGdrcG50emNncmtzbXV2eWguZGVmYXVsdCxcIi9hcGkvcGFja2FnZV9maWxlcy9saXN0XCI6IHJub3JoZ2lqbWhyb216amMuZGVmYXVsdCxcIi9hcGkvcGFja2FnZV9yZWxlYXNlcy9jcmVhdGVcIjogempldWZzbXpkZXZ3ZXVoZC5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlX3JlbGVhc2VzL2dldFwiOiB4ZXdqZG9xemlyanZzdW54LmRlZmF1bHQsXCIvYXBpL3BhY2thZ2VfcmVsZWFzZXMvbGlzdFwiOiB3ZnBjeXl1amNud2dieWl1LmRlZmF1bHQsXCIvYXBpL3BhY2thZ2VfcmVsZWFzZXMvcmVidWlsZFwiOiBpdm92cmNtcGNzdGN4dGluLmRlZmF1bHQsXCIvYXBpL3BhY2thZ2VfcmVsZWFzZXMvdXBkYXRlXCI6IHNxb2hjeWRlandld252encuZGVmYXVsdCxcIi9hcGkvcGFja2FnZXMvYWRkX3N0YXJcIjogYWtpcmVpYnNuam51bHN4Yi5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy9jcmVhdGVcIjogeWloanl3eG56aWZrbmF3bC5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy9kZWxldGVcIjogZGdzeGdveHRwbmFwdmpxay5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy9mb3JrXCI6IGtieHlwZGdocmFleG11eXkuZGVmYXVsdCxcIi9hcGkvcGFja2FnZXMvZ2VuZXJhdGVfZnJvbV9qbGNwY2JcIjogZ2JpbG5jbndwZGdwbmxjeS5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy9nZXRcIjogd2lqcWJ5ZHdoZ2pvYmRoaS5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy9pbWFnZXMvW293bmVyX2dpdGh1Yl91c2VybmFtZV0vW3Vuc2NvcGVkX25hbWVdL1t2aWV3X2Zvcm1hdF1cIjogdG9rdnZ3am1udXNrY3hmai5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy9saXN0X2xhdGVzdFwiOiBwZGFpdmhlbGhkcWRtdnZ0LmRlZmF1bHQsXCIvYXBpL3BhY2thZ2VzL2xpc3RfdHJlbmRpbmdcIjogeHpwd2J1bnJicWlra3Fkai5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy9saXN0XCI6IGpneHZoaGJkY2VyZ2hteHQuZGVmYXVsdCxcIi9hcGkvcGFja2FnZXMvcmVtb3ZlX3N0YXJcIjogenFrdmp4cnpscWhscnd5ZS5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy9zZWFyY2hcIjogZWx1c290amtxYmdtZ2Z6aC5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy91cGRhdGVfYWlfZGVzY3JpcHRpb25cIjogaHllcnF0b3ZoaWZzemZ0Zi5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy91cGRhdGVcIjogdnFxcHppZHlka2x2a2ZudC5kZWZhdWx0LFwiL2FwaS9wcm94eVwiOiBlaWJlYnR6bmpuemx6eGNxLmRlZmF1bHQsXCIvYXBpL3Nlc3Npb25zL2RlbGV0ZVwiOiBqc3dvdGVpYmhvYWpqeW9tLmRlZmF1bHQsXCIvYXBpL3NuaXBwZXRzL2FkZF9zdGFyXCI6IGduc2RmbmtybnZ1dm5lZGsuZGVmYXVsdCxcIi9hcGkvc25pcHBldHMvY3JlYXRlXCI6IGlobmdubnZ2ZHppeHdpdHQuZGVmYXVsdCxcIi9hcGkvc25pcHBldHMvZGVsZXRlXCI6IGdsZGVkZHZia3NyYWRyYWsuZGVmYXVsdCxcIi9hcGkvc25pcHBldHMvZG93bmxvYWRcIjoga3dtcXltdG52a3BvbXJ3bS5kZWZhdWx0LFwiL2FwaS9zbmlwcGV0cy9nZW5lcmF0ZV9mcm9tX2psY3BjYlwiOiB4Zmh1dWZsa2l3b3l4enRmLmRlZmF1bHQsXCIvYXBpL3NuaXBwZXRzL2dldF9pbWFnZVwiOiBybnN1Y3F6Zm9xeW9hZmFiLmRlZmF1bHQsXCIvYXBpL3NuaXBwZXRzL2dldFwiOiB2aWpvd3Fya2J3dGJhdnR4LmRlZmF1bHQsXCIvYXBpL3NuaXBwZXRzL2ltYWdlcy9bYXV0aG9yXS9bc25pcHBldF9uYW1lXS9bdHlwZUZvcm1hdF1cIjogeGN2Znp6a2N4d2ZkenhtaS5kZWZhdWx0LFwiL2FwaS9zbmlwcGV0cy9saXN0X2xhdGVzdFwiOiB6bHJqdmdjbGZldGlmYmdpLmRlZmF1bHQsXCIvYXBpL3NuaXBwZXRzL2xpc3RfdHJlbmRpbmdcIjogbGZ2YmFlZWpobWdwZXF3by5kZWZhdWx0LFwiL2FwaS9zbmlwcGV0cy9saXN0XCI6IGRnY3lyaHltZWFnemZwd3UuZGVmYXVsdCxcIi9hcGkvc25pcHBldHMvcmVtb3ZlX3N0YXJcIjogbnZ1bXFlcGloZnB1Z3ZseC5kZWZhdWx0LFwiL2FwaS9zbmlwcGV0cy9zZWFyY2hcIjogdGx0YWJkcmt3bGNtb2Rlby5kZWZhdWx0LFwiL2FwaS9zbmlwcGV0cy91cGRhdGVcIjogcmR0aGR5c3ZxYXRjcXh3cS5kZWZhdWx0XG59XG5cbmNvbnN0IHdpbnRlclNwZWMgPSB7XG4gIHJvdXRlTWF0Y2hlcjogZ2V0Um91dGVNYXRjaGVyKE9iamVjdC5rZXlzKHJvdXRlTWFwV2l0aEhhbmRsZXJzKSksXG4gIHJvdXRlTWFwV2l0aEhhbmRsZXJzLFxuICBtYWtlUmVxdWVzdDogYXN5bmMgKHJlcSwgb3B0aW9ucykgPT4gbWFrZVJlcXVlc3RBZ2FpbnN0V2ludGVyU3BlYyh3aW50ZXJTcGVjLCBvcHRpb25zKShyZXEpXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpbnRlclNwZWMiLCAiaW1wb3J0IHsgY3JlYXRlV2l0aFdpbnRlclNwZWMgfSBmcm9tIFwid2ludGVyc3BlY1wiXG5pbXBvcnQgeyB3aXRoRGIgfSBmcm9tIFwiLi93aXRoLWRiXCJcbmltcG9ydCB7IGNyZWF0ZVdpdGhEZWZhdWx0RXhjZXB0aW9uSGFuZGxpbmcgfSBmcm9tIFwid2ludGVyc3BlYy9taWRkbGV3YXJlXCJcbmltcG9ydCB7IHdpdGhDdHhFcnJvciB9IGZyb20gXCIuL3dpdGgtY3R4LWVycm9yXCJcbmltcG9ydCB7IHdpdGhTZXNzaW9uQXV0aCB9IGZyb20gXCIuL3dpdGgtc2Vzc2lvbi1hdXRoXCJcbmltcG9ydCB7IHdpdGhPcHRpb25hbFNlc3Npb25BdXRoIH0gZnJvbSBcIi4vd2l0aC1vcHRpb25hbC1zZXNzaW9uLWF1dGhcIlxuaW1wb3J0IHsgd2l0aEVycm9ySGFuZGxpbmcgfSBmcm9tIFwiLi93aXRoLWVycm9yLWhhbmRsaW5nXCJcbmltcG9ydCB7IHdpdGhSZXF1ZXN0TG9nZ2luZyB9IGZyb20gXCIuL3dpdGgtcmVxdWVzdC1sb2dnaW5nXCJcblxuZXhwb3J0IGNvbnN0IHdpdGhSb3V0ZVNwZWMgPSBjcmVhdGVXaXRoV2ludGVyU3BlYyh7XG4gIGFwaU5hbWU6IFwidHNjaXJjdWl0IFNuaXBwZXRzIEFQSVwiLFxuICBwcm9kdWN0aW9uU2VydmVyVXJsOiBcImh0dHBzOi8vc25pcHBldHMudHNjaXJjdWl0LmNvbS9hcGlcIixcbiAgYmVmb3JlQXV0aE1pZGRsZXdhcmU6IFt3aXRoUmVxdWVzdExvZ2dpbmcsIHdpdGhFcnJvckhhbmRsaW5nLCB3aXRoQ3R4RXJyb3JdLFxuICBhdXRoTWlkZGxld2FyZToge1xuICAgIHNlc3Npb246IHdpdGhTZXNzaW9uQXV0aCxcbiAgICBvcHRpb25hbF9zZXNzaW9uOiB3aXRoT3B0aW9uYWxTZXNzaW9uQXV0aCxcbiAgfSxcbiAgYWZ0ZXJBdXRoTWlkZGxld2FyZTogW1xuICAgIHdpdGhEYixcbiAgICBjcmVhdGVXaXRoRGVmYXVsdEV4Y2VwdGlvbkhhbmRsaW5nKHtcbiAgICAgIGluY2x1ZGVTdGFja1RyYWNlSW5SZXNwb25zZTogdHJ1ZSxcbiAgICB9KSxcbiAgXSxcbn0pXG4iLCAiaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJub2RlOmNyeXB0b1wiXG5pbXBvcnQgdHlwZSB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IGhvaXN0IH0gZnJvbSBcInp1c3RhbmQtaG9pc3RcIlxuaW1wb3J0IHsgY3JlYXRlU3RvcmUgfSBmcm9tIFwienVzdGFuZC92YW5pbGxhXCJcblxuaW1wb3J0IHsgY29tYmluZSB9IGZyb20gXCJ6dXN0YW5kL21pZGRsZXdhcmVcIlxuaW1wb3J0IHtcbiAgdHlwZSBBY2NvdW50LFxuICB0eXBlIEFjY291bnRQYWNrYWdlLFxuICB0eXBlIEpsY3BjYk9yZGVyU3RhdGUsXG4gIHR5cGUgSmxjcGNiT3JkZXJTdGVwUnVuLFxuICB0eXBlIExvZ2luUGFnZSxcbiAgdHlwZSBPcmRlcixcbiAgdHlwZSBPcmRlckZpbGUsXG4gIE9yZGVyUXVvdGUsXG4gIHR5cGUgQnVnUmVwb3J0LFxuICBidWdSZXBvcnRTY2hlbWEsXG4gIHR5cGUgQnVnUmVwb3J0RmlsZSxcbiAgYnVnUmVwb3J0RmlsZVNjaGVtYSxcbiAgdHlwZSBQYWNrYWdlLFxuICB0eXBlIFBhY2thZ2VGaWxlLFxuICB0eXBlIFBhY2thZ2VSZWxlYXNlLFxuICBwYWNrYWdlUmVsZWFzZVNjaGVtYSxcbiAgdHlwZSBQYWNrYWdlQnVpbGQsXG4gIHBhY2thZ2VCdWlsZFNjaGVtYSxcbiAgdHlwZSBBaVJldmlldyxcbiAgYWlSZXZpZXdTY2hlbWEsXG4gIHR5cGUgRGF0YXNoZWV0LFxuICBkYXRhc2hlZXRTY2hlbWEsXG4gIHR5cGUgU2Vzc2lvbixcbiAgdHlwZSBTbmlwcGV0LFxuICBkYXRhYmFzZVNjaGVtYSxcbiAgdHlwZSBwYWNrYWdlU2NoZW1hLFxuICB0eXBlIHNuaXBwZXRTY2hlbWEsXG4gIE9yZ2FuaXphdGlvbixcbiAgT3JnQWNjb3VudCxcbiAgT3JnSW52aXRhdGlvbixcbiAgVXNlclBlcm1pc3Npb25zLFxufSBmcm9tIFwiLi9zY2hlbWEudHNcIlxuaW1wb3J0IHsgc2VlZCBhcyBzZWVkRm4gfSBmcm9tIFwiLi9zZWVkXCJcbmltcG9ydCB7IGdlbmVyYXRlRnNTaGEgfSBmcm9tIFwiLi4vcGFja2FnZV9maWxlL2dlbmVyYXRlLWZzLXNoYVwiXG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEYXRhYmFzZSA9ICh7IHNlZWQgfTogeyBzZWVkPzogYm9vbGVhbiB9ID0ge30pID0+IHtcbiAgY29uc3QgZGIgPSBob2lzdChjcmVhdGVTdG9yZShpbml0aWFsaXplcikpXG4gIGlmIChzZWVkKSB7XG4gICAgc2VlZEZuKGRiKVxuICB9XG4gIHJldHVybiBkYlxufVxuXG5leHBvcnQgdHlwZSBEYkNsaWVudCA9IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZURhdGFiYXNlPlxuXG5jb25zdCBpbml0aWFsaXplciA9IGNvbWJpbmUoZGF0YWJhc2VTY2hlbWEucGFyc2Uoe30pLCAoc2V0LCBnZXQpID0+ICh7XG4gIGFkZE9yZGVyOiAob3JkZXI6IE9taXQ8T3JkZXIsIFwib3JkZXJfaWRcIj4pOiBPcmRlciA9PiB7XG4gICAgY29uc3QgbmV3T3JkZXIgPSB7IG9yZGVyX2lkOiBgb3JkZXJfJHtnZXQoKS5pZENvdW50ZXIgKyAxfWAsIC4uLm9yZGVyIH1cbiAgICBzZXQoKHN0YXRlKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcmRlcnM6IFsuLi5zdGF0ZS5vcmRlcnMsIG5ld09yZGVyXSxcbiAgICAgICAgaWRDb3VudGVyOiBzdGF0ZS5pZENvdW50ZXIgKyAxLFxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIG5ld09yZGVyXG4gIH0sXG4gIGdldE9yZGVyQnlJZDogKG9yZGVySWQ6IHN0cmluZyk6IE9yZGVyIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLm9yZGVycy5maW5kKChvcmRlcikgPT4gb3JkZXIub3JkZXJfaWQgPT09IG9yZGVySWQpXG4gIH0sXG4gIGdldE9yZGVyRmlsZXNCeU9yZGVySWQ6IChvcmRlcklkOiBzdHJpbmcpOiBPcmRlckZpbGVbXSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5vcmRlckZpbGVzLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5vcmRlcl9pZCA9PT0gb3JkZXJJZClcbiAgfSxcbiAgYWRkT3JkZXJRdW90ZTogKHtcbiAgICBhY2NvdW50X2lkLFxuICAgIHBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICB2ZW5kb3JfbmFtZSxcbiAgfToge1xuICAgIGFjY291bnRfaWQ6IHN0cmluZ1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZD86IHN0cmluZ1xuICAgIHZlbmRvcl9uYW1lOiBzdHJpbmdcbiAgfSk6IHN0cmluZyA9PiB7XG4gICAgLy8gRGV0YWlscyBmb3IgdGhlIG9yZGVyIHF1b3RlIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgam9iIHdpdGggdGhlIGNvc3RcbiAgICBjb25zdCBuZXdPcmRlclF1b3RlID0ge1xuICAgICAgb3JkZXJfcXVvdGVfaWQ6IGBvcmRlcl9xdW90ZV8ke2dldCgpLmlkQ291bnRlciArIDF9YCxcbiAgICAgIGFjY291bnRfaWQsXG4gICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHBhY2thZ2VfcmVsZWFzZV9pZCA/PyBudWxsLFxuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgY29tcGxldGVkX2F0OiBudWxsLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBoYXNfZXJyb3I6IGZhbHNlLFxuICAgICAgaXNfY29tcGxldGVkOiBmYWxzZSxcbiAgICAgIGlzX3Byb2Nlc3Npbmc6IHRydWUsXG4gICAgICB2ZW5kb3JfbmFtZSxcbiAgICAgIHF1b3RlZF9jb21wb25lbnRzOiBbXSxcbiAgICAgIGJhcmVfcGNiX2Nvc3Q6IDAsXG4gICAgICBzaGlwcGluZ19vcHRpb25zOiBbXSxcbiAgICAgIHRvdGFsX2Nvc3Rfd2l0aG91dF9zaGlwcGluZzogMCxcbiAgICB9XG4gICAgc2V0KChzdGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3JkZXJRdW90ZXM6IFsuLi5zdGF0ZS5vcmRlclF1b3RlcywgbmV3T3JkZXJRdW90ZV0sXG4gICAgICAgIGlkQ291bnRlcjogc3RhdGUuaWRDb3VudGVyICsgMSxcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBuZXdPcmRlclF1b3RlLm9yZGVyX3F1b3RlX2lkXG4gIH0sXG4gIGdldE9yZGVyUXVvdGVCeUlkOiAob3JkZXJRdW90ZUlkOiBzdHJpbmcpOiBPcmRlclF1b3RlIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLm9yZGVyUXVvdGVzLmZpbmQoXG4gICAgICAocXVvdGUpID0+IHF1b3RlLm9yZGVyX3F1b3RlX2lkID09PSBvcmRlclF1b3RlSWQsXG4gICAgKVxuICB9LFxuICBnZXRKbGNwY2JPcmRlclN0YXRlc0J5T3JkZXJJZDogKFxuICAgIG9yZGVySWQ6IHN0cmluZyxcbiAgKTogSmxjcGNiT3JkZXJTdGF0ZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5qbGNwY2JPcmRlclN0YXRlLmZpbmQoKHN0YXRlKSA9PiBzdGF0ZS5vcmRlcl9pZCA9PT0gb3JkZXJJZClcbiAgfSxcbiAgZ2V0SmxjcGNiT3JkZXJTdGVwUnVuc0J5SmxjcGNiT3JkZXJTdGF0ZUlkOiAoXG4gICAgamxjcGNiT3JkZXJTdGF0ZUlkOiBzdHJpbmcsXG4gICk6IEpsY3BjYk9yZGVyU3RlcFJ1bltdID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLmpsY3BjYk9yZGVyU3RlcFJ1bnNcbiAgICAgIC5maWx0ZXIoKHN0ZXBSdW4pID0+IHtcbiAgICAgICAgY29uc3Qgb3JkZXJTdGF0ZSA9IHN0YXRlLmpsY3BjYk9yZGVyU3RhdGUuZmluZChcbiAgICAgICAgICAoc3RhdGUpID0+XG4gICAgICAgICAgICBzdGF0ZS5qbGNwY2Jfb3JkZXJfc3RhdGVfaWQgPT09IHN0ZXBSdW4uamxjcGNiX29yZGVyX3N0YXRlX2lkLFxuICAgICAgICApXG4gICAgICAgIHJldHVybiBvcmRlclN0YXRlPy5vcmRlcl9pZCA9PT0gamxjcGNiT3JkZXJTdGF0ZUlkXG4gICAgICB9KVxuICAgICAgLnNvcnQoXG4gICAgICAgIChhLCBiKSA9PlxuICAgICAgICAgIG5ldyBEYXRlKGEuY3JlYXRlZF9hdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYi5jcmVhdGVkX2F0KS5nZXRUaW1lKCksXG4gICAgICApXG4gIH0sXG4gIHVwZGF0ZU9yZGVyOiAob3JkZXJJZDogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPE9yZGVyPikgPT4ge1xuICAgIHNldCgoc3RhdGUpID0+ICh7XG4gICAgICBvcmRlcnM6IHN0YXRlLm9yZGVycy5tYXAoKG9yZGVyKSA9PlxuICAgICAgICBvcmRlci5vcmRlcl9pZCA9PT0gb3JkZXJJZCA/IHsgLi4ub3JkZXIsIC4uLnVwZGF0ZXMgfSA6IG9yZGVyLFxuICAgICAgKSxcbiAgICB9KSlcbiAgfSxcbiAgYWRkSmxjcGNiT3JkZXJTdGF0ZTogKFxuICAgIG9yZGVyU3RhdGU6IE9taXQ8SmxjcGNiT3JkZXJTdGF0ZSwgXCJqbGNwY2Jfb3JkZXJfc3RhdGVfaWRcIj4sXG4gICk6IEpsY3BjYk9yZGVyU3RhdGUgPT4ge1xuICAgIGNvbnN0IG5ld09yZGVyU3RhdGUgPSB7XG4gICAgICBqbGNwY2Jfb3JkZXJfc3RhdGVfaWQ6IGBvcmRlcl9zdGF0ZV8ke2dldCgpLmlkQ291bnRlciArIDF9YCxcbiAgICAgIC4uLm9yZGVyU3RhdGUsXG4gICAgfVxuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYk9yZGVyU3RhdGU6IFsuLi5zdGF0ZS5qbGNwY2JPcmRlclN0YXRlLCBuZXdPcmRlclN0YXRlXSxcbiAgICAgICAgaWRDb3VudGVyOiBzdGF0ZS5pZENvdW50ZXIgKyAxLFxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIG5ld09yZGVyU3RhdGVcbiAgfSxcbiAgdXBkYXRlSmxjcGNiT3JkZXJTdGF0ZTogKFxuICAgIG9yZGVySWQ6IHN0cmluZyxcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPEpsY3BjYk9yZGVyU3RhdGU+LFxuICApID0+IHtcbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgamxjcGNiT3JkZXJTdGF0ZTogc3RhdGUuamxjcGNiT3JkZXJTdGF0ZS5tYXAoKG9yZGVyU3RhdGUpID0+XG4gICAgICAgIG9yZGVyU3RhdGUub3JkZXJfaWQgPT09IG9yZGVySWRcbiAgICAgICAgICA/IHsgLi4ub3JkZXJTdGF0ZSwgLi4udXBkYXRlcyB9XG4gICAgICAgICAgOiBvcmRlclN0YXRlLFxuICAgICAgKSxcbiAgICB9KSlcbiAgfSxcbiAgYWRkT3JkZXJGaWxlOiAob3JkZXJGaWxlOiBPbWl0PE9yZGVyRmlsZSwgXCJvcmRlcl9maWxlX2lkXCI+KTogT3JkZXJGaWxlID0+IHtcbiAgICBjb25zdCBuZXdPcmRlckZpbGUgPSB7XG4gICAgICBvcmRlcl9maWxlX2lkOiBgb3JkZXJfZmlsZV8ke2dldCgpLmlkQ291bnRlciArIDF9YCxcbiAgICAgIC4uLm9yZGVyRmlsZSxcbiAgICB9XG4gICAgc2V0KChzdGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3JkZXJGaWxlczogWy4uLnN0YXRlLm9yZGVyRmlsZXMsIG5ld09yZGVyRmlsZV0sXG4gICAgICAgIGlkQ291bnRlcjogc3RhdGUuaWRDb3VudGVyICsgMSxcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBuZXdPcmRlckZpbGVcbiAgfSxcbiAgZ2V0T3JkZXJGaWxlQnlJZDogKG9yZGVyRmlsZUlkOiBzdHJpbmcpOiBPcmRlckZpbGUgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUub3JkZXJGaWxlcy5maW5kKChmaWxlKSA9PiBmaWxlLm9yZGVyX2ZpbGVfaWQgPT09IG9yZGVyRmlsZUlkKVxuICB9LFxuICBhZGRCdWdSZXBvcnQ6ICh7XG4gICAgcmVwb3J0ZXJfYWNjb3VudF9pZCxcbiAgICB0ZXh0LFxuICAgIGlzX2F1dG9fZGVsZXRlZCxcbiAgICBkZWxldGVfYXQsXG4gIH06IHtcbiAgICByZXBvcnRlcl9hY2NvdW50X2lkOiBzdHJpbmdcbiAgICB0ZXh0Pzogc3RyaW5nIHwgbnVsbFxuICAgIGlzX2F1dG9fZGVsZXRlZD86IGJvb2xlYW5cbiAgICBkZWxldGVfYXQ/OiBzdHJpbmcgfCBudWxsXG4gIH0pOiBCdWdSZXBvcnQgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRJc0F1dG9EZWxldGVkID0gQm9vbGVhbihpc19hdXRvX2RlbGV0ZWQpXG4gICAgaWYgKG5vcm1hbGl6ZWRJc0F1dG9EZWxldGVkICYmICFkZWxldGVfYXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImRlbGV0ZV9hdCBpcyByZXF1aXJlZCB3aGVuIGlzX2F1dG9fZGVsZXRlZCBpcyB0cnVlXCIpXG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWREZWxldGVBdCA9IG5vcm1hbGl6ZWRJc0F1dG9EZWxldGVkXG4gICAgICA/IChkZWxldGVfYXQgPz8gbnVsbClcbiAgICAgIDogbnVsbFxuXG4gICAgY29uc3QgYnVnUmVwb3J0ID0gYnVnUmVwb3J0U2NoZW1hLnBhcnNlKHtcbiAgICAgIGJ1Z19yZXBvcnRfaWQ6IHJhbmRvbVVVSUQoKSxcbiAgICAgIHJlcG9ydGVyX2FjY291bnRfaWQsXG4gICAgICB0ZXh0OiB0ZXh0ID8/IG51bGwsXG4gICAgICBpc19hdXRvX2RlbGV0ZWQ6IG5vcm1hbGl6ZWRJc0F1dG9EZWxldGVkLFxuICAgICAgZGVsZXRlX2F0OiBub3JtYWxpemVkRGVsZXRlQXQsXG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBmaWxlX2NvdW50OiAwLFxuICAgIH0pXG5cbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgYnVnUmVwb3J0czogWy4uLnN0YXRlLmJ1Z1JlcG9ydHMsIGJ1Z1JlcG9ydF0sXG4gICAgfSkpXG5cbiAgICByZXR1cm4gYnVnUmVwb3J0XG4gIH0sXG4gIGdldEJ1Z1JlcG9ydEJ5SWQ6IChidWdSZXBvcnRJZDogc3RyaW5nKTogQnVnUmVwb3J0IHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLmJ1Z1JlcG9ydHMuZmluZChcbiAgICAgIChidWdSZXBvcnQpID0+IGJ1Z1JlcG9ydC5idWdfcmVwb3J0X2lkID09PSBidWdSZXBvcnRJZCxcbiAgICApXG4gIH0sXG4gIGFkZEJ1Z1JlcG9ydEZpbGU6ICh7XG4gICAgYnVnX3JlcG9ydF9pZCxcbiAgICBmaWxlX3BhdGgsXG4gICAgY29udGVudF9taW1ldHlwZSxcbiAgICBpc190ZXh0LFxuICAgIGNvbnRlbnRfdGV4dCxcbiAgICBjb250ZW50X2J5dGVzLFxuICB9OiB7XG4gICAgYnVnX3JlcG9ydF9pZDogc3RyaW5nXG4gICAgZmlsZV9wYXRoOiBzdHJpbmdcbiAgICBjb250ZW50X21pbWV0eXBlOiBzdHJpbmdcbiAgICBpc190ZXh0OiBib29sZWFuXG4gICAgY29udGVudF90ZXh0OiBzdHJpbmcgfCBudWxsXG4gICAgY29udGVudF9ieXRlczogVWludDhBcnJheSB8IG51bGxcbiAgfSk6IEJ1Z1JlcG9ydEZpbGUgPT4ge1xuICAgIGNvbnN0IGJ1Z1JlcG9ydEZpbGUgPSBidWdSZXBvcnRGaWxlU2NoZW1hLnBhcnNlKHtcbiAgICAgIGJ1Z19yZXBvcnRfZmlsZV9pZDogcmFuZG9tVVVJRCgpLFxuICAgICAgYnVnX3JlcG9ydF9pZCxcbiAgICAgIGZpbGVfcGF0aCxcbiAgICAgIGNvbnRlbnRfbWltZXR5cGUsXG4gICAgICBpc190ZXh0LFxuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgY29udGVudF90ZXh0LFxuICAgICAgY29udGVudF9ieXRlcyxcbiAgICB9KVxuXG4gICAgc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgIGJ1Z1JlcG9ydEZpbGVzOiBbLi4uc3RhdGUuYnVnUmVwb3J0RmlsZXMsIGJ1Z1JlcG9ydEZpbGVdLFxuICAgICAgYnVnUmVwb3J0czogc3RhdGUuYnVnUmVwb3J0cy5tYXAoKGJ1Z1JlcG9ydCkgPT5cbiAgICAgICAgYnVnUmVwb3J0LmJ1Z19yZXBvcnRfaWQgPT09IGJ1Z19yZXBvcnRfaWRcbiAgICAgICAgICA/IHsgLi4uYnVnUmVwb3J0LCBmaWxlX2NvdW50OiBidWdSZXBvcnQuZmlsZV9jb3VudCArIDEgfVxuICAgICAgICAgIDogYnVnUmVwb3J0LFxuICAgICAgKSxcbiAgICB9KSlcblxuICAgIHJldHVybiBidWdSZXBvcnRGaWxlXG4gIH0sXG4gIGdldEJ1Z1JlcG9ydEZpbGVzQnlCdWdSZXBvcnRJZDogKGJ1Z1JlcG9ydElkOiBzdHJpbmcpOiBCdWdSZXBvcnRGaWxlW10gPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUuYnVnUmVwb3J0RmlsZXMuZmlsdGVyKFxuICAgICAgKGZpbGUpID0+IGZpbGUuYnVnX3JlcG9ydF9pZCA9PT0gYnVnUmVwb3J0SWQsXG4gICAgKVxuICB9LFxuICBhZGRBY2NvdW50OiAoXG4gICAgYWNjb3VudDogT21pdDxcbiAgICAgIEFjY291bnQsXG4gICAgICBcImFjY291bnRfaWRcIiB8IFwiaXNfdHNjaXJjdWl0X3N0YWZmXCIgfCBcImNyZWF0ZWRfYXRcIiB8IFwicGVyc29uYWxfb3JnX2lkXCJcbiAgICA+ICZcbiAgICAgIFBhcnRpYWw8XG4gICAgICAgIFBpY2s8QWNjb3VudCwgXCJhY2NvdW50X2lkXCIgfCBcImlzX3RzY2lyY3VpdF9zdGFmZlwiIHwgXCJwZXJzb25hbF9vcmdfaWRcIj5cbiAgICAgID4sXG4gICkgPT4ge1xuICAgIGNvbnN0IG5ld0FjY291bnQgPSB7XG4gICAgICBhY2NvdW50X2lkOiBhY2NvdW50LmFjY291bnRfaWQgfHwgYGFjY291bnRfJHtnZXQoKS5pZENvdW50ZXIgKyAxfWAsXG4gICAgICAuLi5hY2NvdW50LFxuICAgICAgaXNfdHNjaXJjdWl0X3N0YWZmOiBCb29sZWFuKGFjY291bnQuaXNfdHNjaXJjdWl0X3N0YWZmKSxcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCksXG4gICAgICBwZXJzb25hbF9vcmdfaWQ6IGFjY291bnQucGVyc29uYWxfb3JnX2lkIHx8IGBwb3JnXyR7Z2V0KCkuaWRDb3VudGVyICsgMX1gLFxuICAgIH1cblxuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFjY291bnRzOiBbLi4uc3RhdGUuYWNjb3VudHMsIG5ld0FjY291bnRdLFxuICAgICAgICBpZENvdW50ZXI6IHN0YXRlLmlkQ291bnRlciArIDEsXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBuZXdBY2NvdW50XG4gIH0sXG4gIGFkZEFjY291bnRQYWNrYWdlOiAoXG4gICAgYWNjb3VudFBhY2thZ2U6IE9taXQ8QWNjb3VudFBhY2thZ2UsIFwiYWNjb3VudF9wYWNrYWdlX2lkXCI+LFxuICApOiBBY2NvdW50UGFja2FnZSA9PiB7XG4gICAgY29uc3QgbmV3QWNjb3VudFBhY2thZ2UgPSB7XG4gICAgICBhY2NvdW50X3BhY2thZ2VfaWQ6IGBhcF8ke2dldCgpLmlkQ291bnRlciArIDF9YCxcbiAgICAgIC4uLmFjY291bnRQYWNrYWdlLFxuICAgIH1cbiAgICBzZXQoKHN0YXRlKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY2NvdW50UGFja2FnZXM6IFsuLi5zdGF0ZS5hY2NvdW50UGFja2FnZXMsIG5ld0FjY291bnRQYWNrYWdlXSxcbiAgICAgICAgaWRDb3VudGVyOiBzdGF0ZS5pZENvdW50ZXIgKyAxLFxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIG5ld0FjY291bnRQYWNrYWdlXG4gIH0sXG4gIGdldEFjY291bnRQYWNrYWdlQnlJZDogKFxuICAgIGFjY291bnRQYWNrYWdlSWQ6IHN0cmluZyxcbiAgKTogQWNjb3VudFBhY2thZ2UgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUuYWNjb3VudFBhY2thZ2VzLmZpbmQoXG4gICAgICAoYXApID0+IGFwLmFjY291bnRfcGFja2FnZV9pZCA9PT0gYWNjb3VudFBhY2thZ2VJZCxcbiAgICApXG4gIH0sXG4gIHVwZGF0ZUFjY291bnRQYWNrYWdlOiAoXG4gICAgYWNjb3VudFBhY2thZ2VJZDogc3RyaW5nLFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8QWNjb3VudFBhY2thZ2U+LFxuICApOiB2b2lkID0+IHtcbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgYWNjb3VudFBhY2thZ2VzOiBzdGF0ZS5hY2NvdW50UGFja2FnZXMubWFwKChhcCkgPT5cbiAgICAgICAgYXAuYWNjb3VudF9wYWNrYWdlX2lkID09PSBhY2NvdW50UGFja2FnZUlkID8geyAuLi5hcCwgLi4udXBkYXRlcyB9IDogYXAsXG4gICAgICApLFxuICAgIH0pKVxuICB9LFxuICBkZWxldGVBY2NvdW50UGFja2FnZTogKGFjY291bnRQYWNrYWdlSWQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIGxldCBkZWxldGVkID0gZmFsc2VcbiAgICBzZXQoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHN0YXRlLmFjY291bnRQYWNrYWdlcy5maW5kSW5kZXgoXG4gICAgICAgIChhcCkgPT4gYXAuYWNjb3VudF9wYWNrYWdlX2lkID09PSBhY2NvdW50UGFja2FnZUlkLFxuICAgICAgKVxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBzdGF0ZS5hY2NvdW50UGFja2FnZXMuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICBkZWxldGVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfSlcbiAgICByZXR1cm4gZGVsZXRlZFxuICB9LFxuICBhZGRTbmlwcGV0OiAoXG4gICAgc25pcHBldDogT21pdDxcbiAgICAgIHouaW5wdXQ8dHlwZW9mIHNuaXBwZXRTY2hlbWE+LFxuICAgICAgXCJzbmlwcGV0X2lkXCIgfCBcInBhY2thZ2VfcmVsZWFzZV9pZFwiXG4gICAgPiAmIHtcbiAgICAgIGNyZWF0b3JfYWNjb3VudF9pZD86IHN0cmluZ1xuICAgICAgZ2l0aHViX3JlcG9fZnVsbF9uYW1lPzogc3RyaW5nXG4gICAgICBicmFuY2hfbmFtZT86IHN0cmluZ1xuICAgICAgY29tbWl0X21lc3NhZ2U/OiBzdHJpbmdcbiAgICAgIGNvbW1pdF9hdXRob3I/OiBzdHJpbmdcbiAgICB9LFxuICApOiBTbmlwcGV0ID0+IHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSh0aW1lc3RhbXApLnRvSVNPU3RyaW5nKClcblxuICAgIGNvbnN0IG5ld1N0YXRlID0gZ2V0KClcbiAgICBjb25zdCBuZXh0SWQgPSBuZXdTdGF0ZS5pZENvdW50ZXIgKyAxXG5cbiAgICAvLyBDcmVhdGUgdGhlIHBhY2thZ2UgdGhhdCB3aWxsIHNlcnZlIGFzIG91ciBzbmlwcGV0XG4gICAgY29uc3QgbmV3UGFja2FnZSA9IHtcbiAgICAgIHBhY2thZ2VfaWQ6IGBwa2dfJHtuZXh0SWR9YCxcbiAgICAgIGNyZWF0b3JfYWNjb3VudF9pZDogc25pcHBldC5jcmVhdG9yX2FjY291bnRfaWQgPz8gc25pcHBldC5vd25lcl9uYW1lLCAvLyBVc2luZyBvd25lcl9uYW1lIGFzIGFjY291bnRfaWQgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBjb250ZXh0XG4gICAgICBvd25lcl9vcmdfaWQ6IFwiXCIsIC8vIEVtcHR5IHN0cmluZyBpbnN0ZWFkIG9mIG51bGwgdG8gbWF0Y2ggdHlwZVxuICAgICAgb3duZXJfZ2l0aHViX3VzZXJuYW1lOiBzbmlwcGV0Lm93bmVyX25hbWUsXG4gICAgICBpc19zb3VyY2VfZnJvbV9naXRodWI6IGZhbHNlLFxuICAgICAgZGVzY3JpcHRpb246IHNuaXBwZXQuZGVzY3JpcHRpb24gfHwgXCJcIixcbiAgICAgIG5hbWU6IGAke3NuaXBwZXQub3duZXJfbmFtZX0vJHtzbmlwcGV0LnVuc2NvcGVkX25hbWV9YCxcbiAgICAgIHVuc2NvcGVkX25hbWU6IHNuaXBwZXQudW5zY29wZWRfbmFtZSxcbiAgICAgIGxhdGVzdF92ZXJzaW9uOiBcIjAuMC4xXCIsXG4gICAgICBsaWNlbnNlOiBudWxsLFxuICAgICAgd2Vic2l0ZTogbnVsbCxcbiAgICAgIHN0YXJfY291bnQ6IDAsXG4gICAgICBjcmVhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgIHVwZGF0ZWRfYXQ6IGN1cnJlbnRUaW1lLFxuICAgICAgZ2l0aHViX3JlcG9fZnVsbF9uYW1lOiBzbmlwcGV0LmdpdGh1Yl9yZXBvX2Z1bGxfbmFtZSB8fCBudWxsLFxuICAgICAgYWlfZGVzY3JpcHRpb246IFwicGxhY2Vob2xkZXIgYWkgZGVzY3JpcHRpb25cIixcbiAgICAgIGFpX3VzYWdlX2luc3RydWN0aW9uczogXCJwbGFjZWhvbGRlciBhaSB1c2FnZSBpbnN0cnVjdGlvbnNcIixcbiAgICAgIGlzX3NuaXBwZXQ6IHRydWUsXG4gICAgICBpc19ib2FyZDogc25pcHBldC5zbmlwcGV0X3R5cGUgPT09IFwiYm9hcmRcIixcbiAgICAgIGlzX3BhY2thZ2U6IHNuaXBwZXQuc25pcHBldF90eXBlID09PSBcInBhY2thZ2VcIixcbiAgICAgIGlzX21vZGVsOiBzbmlwcGV0LnNuaXBwZXRfdHlwZSA9PT0gXCJtb2RlbFwiLFxuICAgICAgaXNfZm9vdHByaW50OiBzbmlwcGV0LnNuaXBwZXRfdHlwZSA9PT0gXCJmb290cHJpbnRcIixcbiAgICAgIHNuaXBwZXRfdHlwZTogc25pcHBldC5zbmlwcGV0X3R5cGUsXG4gICAgICBpc19wcml2YXRlOiBmYWxzZSxcbiAgICAgIGlzX3B1YmxpYzogdHJ1ZSxcbiAgICAgIGlzX3VubGlzdGVkOiBmYWxzZSxcbiAgICAgIGxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQ6IGBwYWNrYWdlX3JlbGVhc2VfJHtuZXh0SWR9YCxcbiAgICAgIGxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfZnNfc2hhOiBudWxsLFxuICAgIH1cblxuICAgIC8vIENyZWF0ZSBwYWNrYWdlIHJlbGVhc2VcbiAgICBjb25zdCBuZXdQYWNrYWdlUmVsZWFzZSA9IHBhY2thZ2VSZWxlYXNlU2NoZW1hLnBhcnNlKHtcbiAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogYHBhY2thZ2VfcmVsZWFzZV8ke25leHRJZH1gLFxuICAgICAgcGFja2FnZV9pZDogbmV3UGFja2FnZS5wYWNrYWdlX2lkLFxuICAgICAgdmVyc2lvbjogXCIwLjAuMVwiLFxuICAgICAgaXNfbGF0ZXN0OiB0cnVlLFxuICAgICAgaXNfbG9ja2VkOiBmYWxzZSxcbiAgICAgIGNyZWF0ZWRfYXQ6IGN1cnJlbnRUaW1lLFxuICAgICAgdXBkYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICBicmFuY2hfbmFtZTogc25pcHBldC5icmFuY2hfbmFtZSxcbiAgICAgIGNvbW1pdF9tZXNzYWdlOiBzbmlwcGV0LmNvbW1pdF9tZXNzYWdlLFxuICAgICAgY29tbWl0X2F1dGhvcjogc25pcHBldC5jb21taXRfYXV0aG9yLFxuICAgICAgaGFzX3RyYW5zcGlsZWQ6IHRydWUsXG4gICAgICB0cmFuc3BpbGF0aW9uX2Vycm9yOiBudWxsLFxuICAgICAgLi4uKHNuaXBwZXQubmFtZSA9PSBcInRlc3R1c2VyL215LXRlc3QtYm9hcmRcIlxuICAgICAgICA/IHsgaXNfcHJfcHJldmlldzogdHJ1ZSwgZ2l0aHViX3ByX251bWJlcjogNjkgfVxuICAgICAgICA6IHt9KSxcbiAgICB9KVxuXG4gICAgLy8gQWRkIGFsbCB0aGUgZmlsZXNcbiAgICBjb25zdCBwYWNrYWdlRmlsZXM6IFBhY2thZ2VGaWxlW10gPSBbXVxuICAgIGxldCBmaWxlSWRDb3VudGVyID0gbmV4dElkXG5cbiAgICAvLyBBZGQgbWFpbiBjb2RlIGZpbGVcbiAgICBwYWNrYWdlRmlsZXMucHVzaCh7XG4gICAgICBwYWNrYWdlX2ZpbGVfaWQ6IGBwYWNrYWdlX2ZpbGVfJHtmaWxlSWRDb3VudGVyKyt9YCxcbiAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogbmV3UGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgZmlsZV9wYXRoOiBcImluZGV4LnRzeFwiLFxuICAgICAgY29udGVudF90ZXh0OiBzbmlwcGV0LmNvZGUgfHwgXCJcIixcbiAgICAgIGNyZWF0ZWRfYXQ6IGN1cnJlbnRUaW1lLFxuICAgIH0pXG5cbiAgICAvLyBBZGQgRFRTIGZpbGUgaWYgcHJvdmlkZWRcbiAgICBpZiAoc25pcHBldC5kdHMpIHtcbiAgICAgIHBhY2thZ2VGaWxlcy5wdXNoKHtcbiAgICAgICAgcGFja2FnZV9maWxlX2lkOiBgcGFja2FnZV9maWxlXyR7ZmlsZUlkQ291bnRlcisrfWAsXG4gICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogbmV3UGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgICBmaWxlX3BhdGg6IFwiL2Rpc3QvaW5kZXguZC50c1wiLFxuICAgICAgICBjb250ZW50X3RleHQ6IHNuaXBwZXQuZHRzLFxuICAgICAgICBjcmVhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gQWRkIGNvbXBpbGVkIEpTIGlmIHByb3ZpZGVkXG4gICAgaWYgKHNuaXBwZXQuY29tcGlsZWRfanMpIHtcbiAgICAgIHBhY2thZ2VGaWxlcy5wdXNoKHtcbiAgICAgICAgcGFja2FnZV9maWxlX2lkOiBgcGFja2FnZV9maWxlXyR7ZmlsZUlkQ291bnRlcisrfWAsXG4gICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogbmV3UGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgICBmaWxlX3BhdGg6IFwiL2Rpc3QvaW5kZXguanNcIixcbiAgICAgICAgY29udGVudF90ZXh0OiBzbmlwcGV0LmNvbXBpbGVkX2pzLFxuICAgICAgICBjcmVhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gQWRkIGNpcmN1aXQgSlNPTiBpZiBwcm92aWRlZFxuICAgIGlmIChzbmlwcGV0LmNpcmN1aXRfanNvbiAmJiBzbmlwcGV0LmNpcmN1aXRfanNvbi5sZW5ndGggPiAwKSB7XG4gICAgICBwYWNrYWdlRmlsZXMucHVzaCh7XG4gICAgICAgIHBhY2thZ2VfZmlsZV9pZDogYHBhY2thZ2VfZmlsZV8ke2ZpbGVJZENvdW50ZXIrK31gLFxuICAgICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IG5ld1BhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgICAgZmlsZV9wYXRoOiBcIi9kaXN0L2NpcmN1aXQuanNvblwiLFxuICAgICAgICBjb250ZW50X3RleHQ6IEpTT04uc3RyaW5naWZ5KHNuaXBwZXQuY2lyY3VpdF9qc29uKSxcbiAgICAgICAgY3JlYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgZGF0YWJhc2Ugc3RhdGUgYXRvbWljYWxseVxuICAgIHNldCgoc3RhdGUpID0+ICh7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHBhY2thZ2VzOiBbLi4uc3RhdGUucGFja2FnZXMsIG5ld1BhY2thZ2VdLFxuICAgICAgcGFja2FnZVJlbGVhc2VzOiBbLi4uc3RhdGUucGFja2FnZVJlbGVhc2VzLCBuZXdQYWNrYWdlUmVsZWFzZV0sXG4gICAgICBwYWNrYWdlRmlsZXM6IFsuLi5zdGF0ZS5wYWNrYWdlRmlsZXMsIC4uLnBhY2thZ2VGaWxlc10sXG4gICAgICBpZENvdW50ZXI6IGZpbGVJZENvdW50ZXIsXG4gICAgfSkpXG5cbiAgICAvLyBVcGRhdGUgZnNfc2hhIGZvciB0aGUgbmV3IHBhY2thZ2UgcmVsZWFzZVxuICAgIGNvbnN0IGRiU3RhdGUgPSBnZXQoKVxuICAgIGNvbnN0IHJlbGVhc2VGaWxlcyA9IGRiU3RhdGUucGFja2FnZUZpbGVzLmZpbHRlcihcbiAgICAgIChwZikgPT4gcGYucGFja2FnZV9yZWxlYXNlX2lkID09PSBuZXdQYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgKVxuICAgIGNvbnN0IGZzU2hhID0gZ2VuZXJhdGVGc1NoYShyZWxlYXNlRmlsZXMpXG5cbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBwYWNrYWdlUmVsZWFzZXM6IHN0YXRlLnBhY2thZ2VSZWxlYXNlcy5tYXAoKHByKSA9PlxuICAgICAgICBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IG5ld1BhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZFxuICAgICAgICAgID8geyAuLi5wciwgZnNfc2hhOiBmc1NoYSB9XG4gICAgICAgICAgOiBwcixcbiAgICAgICksXG4gICAgICBwYWNrYWdlczogc3RhdGUucGFja2FnZXMubWFwKChwa2cpID0+XG4gICAgICAgIHBrZy5sYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkID09PSBuZXdQYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWRcbiAgICAgICAgICA/IHsgLi4ucGtnLCBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2ZzX3NoYTogZnNTaGEgfVxuICAgICAgICAgIDogcGtnLFxuICAgICAgKSxcbiAgICB9KSlcblxuICAgIC8vIFJldHVybiBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgY3JlYXRlIGVuZHBvaW50XG4gICAgcmV0dXJuIHtcbiAgICAgIHNuaXBwZXRfaWQ6IG5ld1BhY2thZ2UucGFja2FnZV9pZCxcbiAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogbmV3UGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgbmFtZTogbmV3UGFja2FnZS5uYW1lLFxuICAgICAgdW5zY29wZWRfbmFtZTogbmV3UGFja2FnZS51bnNjb3BlZF9uYW1lLFxuICAgICAgb3duZXJfbmFtZTogc25pcHBldC5vd25lcl9uYW1lLFxuICAgICAgY29kZTogc25pcHBldC5jb2RlIHx8IFwiXCIsXG4gICAgICBkdHM6IHNuaXBwZXQuZHRzLFxuICAgICAgY29tcGlsZWRfanM6IHNuaXBwZXQuY29tcGlsZWRfanMsXG4gICAgICBzdGFyX2NvdW50OiAwLFxuICAgICAgY3JlYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICB1cGRhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgIHNuaXBwZXRfdHlwZTogc25pcHBldC5zbmlwcGV0X3R5cGUsXG4gICAgICBjaXJjdWl0X2pzb246IHNuaXBwZXQuY2lyY3VpdF9qc29uIHx8IFtdLFxuICAgICAgZGVzY3JpcHRpb246IHNuaXBwZXQuZGVzY3JpcHRpb24gfHwgXCJcIixcbiAgICAgIGlzX3N0YXJyZWQ6IGZhbHNlLFxuICAgICAgdmVyc2lvbjogXCIwLjAuMVwiLFxuICAgICAgaXNfcHJpdmF0ZTogZmFsc2UsXG4gICAgICBpc19wdWJsaWM6IHRydWUsXG4gICAgICBpc191bmxpc3RlZDogZmFsc2UsXG4gICAgfVxuICB9LFxuICBnZXRMYXRlc3RTbmlwcGV0czogKGxpbWl0OiBudW1iZXIpOiBTbmlwcGV0W10gPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcblxuICAgIC8vIEdldCBhbGwgcGFja2FnZXMgdGhhdCBhcmUgc25pcHBldHNcbiAgICBjb25zdCBzbmlwcGV0UGFja2FnZXMgPSBzdGF0ZS5wYWNrYWdlc1xuICAgICAgLmZpbHRlcigocGtnKSA9PiBwa2cuaXNfc25pcHBldCA9PT0gdHJ1ZSlcbiAgICAgIC5tYXAoKHBrZykgPT4ge1xuICAgICAgICAvLyBHZXQgdGhlIHBhY2thZ2UgcmVsZWFzZVxuICAgICAgICBjb25zdCBwYWNrYWdlUmVsZWFzZSA9IHN0YXRlLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgICAgICAgIChwcikgPT5cbiAgICAgICAgICAgIHByLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGtnLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgJiZcbiAgICAgICAgICAgIHByLmlzX2xhdGVzdCA9PT0gdHJ1ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoIXBhY2thZ2VSZWxlYXNlKSByZXR1cm4gbnVsbFxuXG4gICAgICAgIC8vIEdldCB0aGUgcGFja2FnZSBmaWxlc1xuICAgICAgICBjb25zdCBwYWNrYWdlRmlsZXMgPSBzdGF0ZS5wYWNrYWdlRmlsZXMuZmlsdGVyKFxuICAgICAgICAgIChmaWxlKSA9PlxuICAgICAgICAgICAgZmlsZS5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIEdldCB0aGUgY29kZSBmaWxlXG4gICAgICAgIGNvbnN0IGNvZGVGaWxlID0gcGFja2FnZUZpbGVzLmZpbmQoXG4gICAgICAgICAgKGZpbGUpID0+XG4gICAgICAgICAgICBmaWxlLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c1wiIHx8IGZpbGUuZmlsZV9wYXRoID09PSBcImluZGV4LnRzeFwiLFxuICAgICAgICApXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgc3RhcnJlZFxuICAgICAgICBjb25zdCBpc1N0YXJyZWQgPSBzdGF0ZS5hY2NvdW50UGFja2FnZXMuc29tZShcbiAgICAgICAgICAoYXApID0+IGFwLnBhY2thZ2VfaWQgPT09IHBrZy5wYWNrYWdlX2lkICYmIGFwLmlzX3N0YXJyZWQsXG4gICAgICAgIClcblxuICAgICAgICAvLyBDb252ZXJ0IHRvIHNuaXBwZXQgZm9ybWF0XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc25pcHBldF9pZDogcGtnLnBhY2thZ2VfaWQsXG4gICAgICAgICAgcGFja2FnZV9yZWxlYXNlX2lkOiBwa2cubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCB8fCBcIlwiLFxuICAgICAgICAgIHVuc2NvcGVkX25hbWU6IHBrZy51bnNjb3BlZF9uYW1lLFxuICAgICAgICAgIG5hbWU6IHBrZy5uYW1lLFxuICAgICAgICAgIG93bmVyX25hbWU6IHBrZy5vd25lcl9naXRodWJfdXNlcm5hbWUgfHwgXCJcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogcGtnLmRlc2NyaXB0aW9uIHx8IFwiXCIsXG4gICAgICAgICAgc25pcHBldF90eXBlOiBwa2cuc25pcHBldF90eXBlIHx8IFwiYm9hcmRcIixcbiAgICAgICAgICBjb2RlOiBjb2RlRmlsZT8uY29udGVudF90ZXh0IHx8IFwiXCIsXG4gICAgICAgICAgZHRzOlxuICAgICAgICAgICAgcGFja2FnZUZpbGVzLmZpbmQoKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcIi9kaXN0L2luZGV4LmQudHNcIilcbiAgICAgICAgICAgICAgPy5jb250ZW50X3RleHQgfHwgXCJcIixcbiAgICAgICAgICBjb21waWxlZF9qczpcbiAgICAgICAgICAgIHBhY2thZ2VGaWxlcy5maW5kKChmaWxlKSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9pbmRleC5qc1wiKVxuICAgICAgICAgICAgICA/LmNvbnRlbnRfdGV4dCB8fCBcIlwiLFxuICAgICAgICAgIGNyZWF0ZWRfYXQ6IHBrZy5jcmVhdGVkX2F0LFxuICAgICAgICAgIHVwZGF0ZWRfYXQ6IHBrZy51cGRhdGVkX2F0LFxuICAgICAgICAgIHN0YXJfY291bnQ6IHBrZy5zdGFyX2NvdW50IHx8IDAsXG4gICAgICAgICAgaXNfc3RhcnJlZDogaXNTdGFycmVkLFxuICAgICAgICAgIHZlcnNpb246IHBrZy5sYXRlc3RfdmVyc2lvbiB8fCBcIjAuMC4xXCIsXG4gICAgICAgICAgY2lyY3VpdF9qc29uOlxuICAgICAgICAgICAgcGFja2FnZUZpbGVzXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcIi9kaXN0L2NpcmN1aXQuanNvblwiKVxuICAgICAgICAgICAgICAuZmxhdE1hcCgoZmlsZSkgPT4gSlNPTi5wYXJzZShmaWxlLmNvbnRlbnRfdGV4dCB8fCBcIltdXCIpKSB8fCBbXSxcbiAgICAgICAgICBpc19wcml2YXRlOiBwa2cuaXNfcHJpdmF0ZSB8fCBmYWxzZSxcbiAgICAgICAgICBpc19wdWJsaWM6IHBrZy5pc19wdWJsaWMgfHwgdHJ1ZSxcbiAgICAgICAgICBpc191bmxpc3RlZDogcGtnLmlzX3VubGlzdGVkIHx8IGZhbHNlLFxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHNuaXBwZXQpOiBzbmlwcGV0IGlzIE5vbk51bGxhYmxlPHR5cGVvZiBzbmlwcGV0PiA9PiBzbmlwcGV0ICE9PSBudWxsLFxuICAgICAgKVxuICAgICAgLm1hcCgoc25pcHBldCkgPT4gKHtcbiAgICAgICAgLi4uc25pcHBldCxcbiAgICAgICAgZGVzY3JpcHRpb246IHNuaXBwZXQuZGVzY3JpcHRpb24gfHwgXCJcIixcbiAgICAgIH0pKVxuICAgICAgLnNvcnQoXG4gICAgICAgIChhLCBiKSA9PlxuICAgICAgICAgIG5ldyBEYXRlKGIuY3JlYXRlZF9hdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYS5jcmVhdGVkX2F0KS5nZXRUaW1lKCksXG4gICAgICApXG4gICAgICAuc2xpY2UoMCwgbGltaXQpXG5cbiAgICByZXR1cm4gc25pcHBldFBhY2thZ2VzXG4gIH0sXG4gIGdldFRyZW5kaW5nU25pcHBldHM6IChsaW1pdDogbnVtYmVyLCBzaW5jZTogc3RyaW5nKTogU25pcHBldFtdID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgY29uc3Qgc2luY2VEYXRlID0gbmV3IERhdGUoc2luY2UpLmdldFRpbWUoKVxuXG4gICAgLy8gR2V0IHN0YXIgY291bnRzIHdpdGhpbiB0aW1lIHBlcmlvZFxuICAgIGNvbnN0IHJlY2VudFN0YXJzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKVxuICAgIHN0YXRlLmFjY291bnRQYWNrYWdlcy5mb3JFYWNoKChhcCkgPT4ge1xuICAgICAgaWYgKGFwLmlzX3N0YXJyZWQgJiYgbmV3IERhdGUoYXAuY3JlYXRlZF9hdCkuZ2V0VGltZSgpID49IHNpbmNlRGF0ZSkge1xuICAgICAgICByZWNlbnRTdGFycy5zZXQoXG4gICAgICAgICAgYXAucGFja2FnZV9pZCxcbiAgICAgICAgICAocmVjZW50U3RhcnMuZ2V0KGFwLnBhY2thZ2VfaWQpIHx8IDApICsgMSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBwYWNrYWdlc1dpdGhTdGFyQ291bnQgPSBbLi4uc3RhdGUucGFja2FnZXNdXG4gICAgICAubWFwKChwa2cpID0+ICh7XG4gICAgICAgIC4uLnBrZyxcbiAgICAgICAgc3Rhcl9jb3VudDogcmVjZW50U3RhcnMuZ2V0KHBrZy5wYWNrYWdlX2lkKSB8fCAwLFxuICAgICAgfSkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYi5zdGFyX2NvdW50IC0gYS5zdGFyX2NvdW50KVxuICAgICAgLnNsaWNlKDAsIGxpbWl0KVxuXG4gICAgY29uc3QgdHJlbmRpbmdTbmlwcGV0cyA9IHBhY2thZ2VzV2l0aFN0YXJDb3VudFxuICAgICAgLm1hcCgocGtnKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VSZWxlYXNlID0gc3RhdGUucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgICAgICAgKHByKSA9PlxuICAgICAgICAgICAgcHIucGFja2FnZV9yZWxlYXNlX2lkID09PSBwa2cubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCAmJlxuICAgICAgICAgICAgcHIuaXNfbGF0ZXN0ID09PSB0cnVlLFxuICAgICAgICApXG4gICAgICAgIGlmICghcGFja2FnZVJlbGVhc2UpIHJldHVybiBudWxsXG5cbiAgICAgICAgY29uc3QgcGFja2FnZUZpbGVzID0gc3RhdGUucGFja2FnZUZpbGVzLmZpbHRlcihcbiAgICAgICAgICAoZmlsZSkgPT5cbiAgICAgICAgICAgIGZpbGUucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBjb2RlRmlsZSA9IHBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgICAgIChmaWxlKSA9PlxuICAgICAgICAgICAgZmlsZS5maWxlX3BhdGggPT09IFwiaW5kZXgudHNcIiB8fCBmaWxlLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c3hcIixcbiAgICAgICAgKVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc25pcHBldF9pZDogcGtnLnBhY2thZ2VfaWQsXG4gICAgICAgICAgcGFja2FnZV9yZWxlYXNlX2lkOiBwa2cubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCB8fCBcIlwiLFxuICAgICAgICAgIHVuc2NvcGVkX25hbWU6IHBrZy51bnNjb3BlZF9uYW1lLFxuICAgICAgICAgIG5hbWU6IHBrZy5uYW1lLFxuICAgICAgICAgIG93bmVyX25hbWU6IHBrZy5vd25lcl9naXRodWJfdXNlcm5hbWUgfHwgXCJcIixcbiAgICAgICAgICBjb2RlOiBjb2RlRmlsZSA/IGNvZGVGaWxlLmNvbnRlbnRfdGV4dCB8fCBcIlwiIDogXCJcIixcbiAgICAgICAgICBjcmVhdGVkX2F0OiBwa2cuY3JlYXRlZF9hdCxcbiAgICAgICAgICB1cGRhdGVkX2F0OiBwa2cudXBkYXRlZF9hdCxcbiAgICAgICAgICBzbmlwcGV0X3R5cGU6IHBrZy5pc19zbmlwcGV0ID8gXCJib2FyZFwiIDogXCJwYWNrYWdlXCIsXG4gICAgICAgICAgc3Rhcl9jb3VudDogcGtnLnN0YXJfY291bnQsXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChzbmlwcGV0KSA9PiBzbmlwcGV0ICE9PSBudWxsKVxuXG4gICAgcmV0dXJuIHRyZW5kaW5nU25pcHBldHMgYXMgU25pcHBldFtdXG4gIH0sXG4gIGdldFBhY2thZ2VzQnlBdXRob3I6IChhdXRob3JOYW1lPzogc3RyaW5nKTogUGFja2FnZVtdID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgY29uc3QgcGFja2FnZXMgPSBhdXRob3JOYW1lXG4gICAgICA/IHN0YXRlLnBhY2thZ2VzLmZpbHRlcigocGtnKSA9PiBwa2cub3duZXJfZ2l0aHViX3VzZXJuYW1lID09PSBhdXRob3JOYW1lKVxuICAgICAgOiBzdGF0ZS5wYWNrYWdlc1xuICAgIHJldHVybiBwYWNrYWdlcy5tYXAoKHBrZykgPT4gKHtcbiAgICAgIC4uLnBrZyxcbiAgICAgIHN0YXJfY291bnQ6IHN0YXRlLmFjY291bnRQYWNrYWdlcy5maWx0ZXIoXG4gICAgICAgIChhcCkgPT4gYXAucGFja2FnZV9pZCA9PT0gcGtnLnBhY2thZ2VfaWQgJiYgYXAuaXNfc3RhcnJlZCxcbiAgICAgICkubGVuZ3RoLFxuICAgIH0pKVxuICB9LFxuICBnZXRTbmlwcGV0QnlBdXRob3JBbmROYW1lOiAoXG4gICAgYXV0aG9yTmFtZTogc3RyaW5nLFxuICAgIHNuaXBwZXROYW1lOiBzdHJpbmcsXG4gICk6IFNuaXBwZXQgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICAvLyBMb29rIGZvciB0aGUgcGFja2FnZSB0aGF0IHJlcHJlc2VudHMgdGhpcyBzbmlwcGV0IHdpdGggY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGluZ1xuICAgIGNvbnN0IF9wYWNrYWdlID0gc3RhdGUucGFja2FnZXMuZmluZChcbiAgICAgIChwa2cpID0+XG4gICAgICAgIHBrZy5vd25lcl9naXRodWJfdXNlcm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IGF1dGhvck5hbWUudG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICBwa2cubmFtZS50b0xvd2VyQ2FzZSgpID09PSBzbmlwcGV0TmFtZS50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgIHBrZy5pc19zbmlwcGV0ID09PSB0cnVlLFxuICAgIClcbiAgICBpZiAoIV9wYWNrYWdlKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICAvLyBHZXQgdGhlIHBhY2thZ2UgcmVsZWFzZVxuICAgIGNvbnN0IHBhY2thZ2VSZWxlYXNlID0gc3RhdGUucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgICAocHIpID0+XG4gICAgICAgIHByLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gX3BhY2thZ2UubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCAmJlxuICAgICAgICBwci5pc19sYXRlc3QgPT09IHRydWUsXG4gICAgKVxuICAgIGlmICghcGFja2FnZVJlbGVhc2UpIHJldHVybiB1bmRlZmluZWRcblxuICAgIC8vIEdldCB0aGUgcGFja2FnZSBmaWxlc1xuICAgIGNvbnN0IHBhY2thZ2VGaWxlcyA9IHN0YXRlLnBhY2thZ2VGaWxlcy5maWx0ZXIoXG4gICAgICAoZmlsZSkgPT4gZmlsZS5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICApXG5cbiAgICAvLyBHZXQgdGhlIGNvZGUgZmlsZSAoaW5kZXgudHMgb3IgaW5kZXgudHN4KVxuICAgIGNvbnN0IGNvZGVGaWxlID0gcGFja2FnZUZpbGVzLmZpbmQoXG4gICAgICAoZmlsZSkgPT4gZmlsZS5maWxlX3BhdGggPT09IFwiaW5kZXgudHNcIiB8fCBmaWxlLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c3hcIixcbiAgICApXG5cbiAgICAvLyBNYXAgdGhlIHBhY2thZ2UgZGF0YSB0byBtYXRjaCB0aGUgU25pcHBldCBzdHJ1Y3R1cmVcbiAgICByZXR1cm4ge1xuICAgICAgc25pcHBldF9pZDogX3BhY2thZ2UucGFja2FnZV9pZCxcbiAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogX3BhY2thZ2UubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCB8fCBcIlwiLFxuICAgICAgdW5zY29wZWRfbmFtZTogX3BhY2thZ2UudW5zY29wZWRfbmFtZSxcbiAgICAgIG5hbWU6IF9wYWNrYWdlLm5hbWUsXG4gICAgICBvd25lcl9uYW1lOiBfcGFja2FnZS5vd25lcl9naXRodWJfdXNlcm5hbWUgfHwgXCJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBfcGFja2FnZS5kZXNjcmlwdGlvbiB8fCBcIlwiLFxuICAgICAgc25pcHBldF90eXBlOiBfcGFja2FnZS5zbmlwcGV0X3R5cGUgfHwgXCJib2FyZFwiLFxuICAgICAgY29kZTogY29kZUZpbGU/LmNvbnRlbnRfdGV4dCB8fCBcIlwiLFxuICAgICAgZHRzOlxuICAgICAgICBwYWNrYWdlRmlsZXMuZmluZCgoZmlsZSkgPT4gZmlsZS5maWxlX3BhdGggPT09IFwiL2Rpc3QvaW5kZXguZC50c1wiKVxuICAgICAgICAgID8uY29udGVudF90ZXh0IHx8IFwiXCIsXG4gICAgICBjb21waWxlZF9qczpcbiAgICAgICAgcGFja2FnZUZpbGVzLmZpbmQoKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcIi9kaXN0L2luZGV4LmpzXCIpXG4gICAgICAgICAgPy5jb250ZW50X3RleHQgfHwgXCJcIixcbiAgICAgIGNyZWF0ZWRfYXQ6IF9wYWNrYWdlLmNyZWF0ZWRfYXQsXG4gICAgICB1cGRhdGVkX2F0OiBfcGFja2FnZS51cGRhdGVkX2F0LFxuICAgICAgc3Rhcl9jb3VudDogX3BhY2thZ2Uuc3Rhcl9jb3VudCB8fCAwLFxuICAgICAgaXNfc3RhcnJlZDogZmFsc2UsXG4gICAgICB2ZXJzaW9uOiBfcGFja2FnZS5sYXRlc3RfdmVyc2lvbiB8fCBcIjAuMC4xXCIsXG4gICAgICBjaXJjdWl0X2pzb246IHBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgICAoZmlsZSkgPT4gZmlsZS5maWxlX3BhdGggPT09IFwiL2Rpc3QvY2lyY3VpdC5qc29uXCIsXG4gICAgICApPy5jb250ZW50X3RleHRcbiAgICAgICAgPyBKU09OLnBhcnNlKFxuICAgICAgICAgICAgcGFja2FnZUZpbGVzLmZpbmQoKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcIi9kaXN0L2NpcmN1aXQuanNvblwiKVxuICAgICAgICAgICAgICA/LmNvbnRlbnRfdGV4dCB8fCBcIltdXCIsXG4gICAgICAgICAgKVxuICAgICAgICA6IFtdLFxuICAgICAgaXNfcHJpdmF0ZTogX3BhY2thZ2UuaXNfcHJpdmF0ZSB8fCBmYWxzZSxcbiAgICAgIGlzX3B1YmxpYzogX3BhY2thZ2UuaXNfcHVibGljIHx8IHRydWUsXG4gICAgICBpc191bmxpc3RlZDogX3BhY2thZ2UuaXNfdW5saXN0ZWQgfHwgZmFsc2UsXG4gICAgfVxuICB9LFxuICB1cGRhdGVTbmlwcGV0OiAoXG4gICAgc25pcHBldElkOiBzdHJpbmcsXG4gICAgdXBkYXRlczogUGFydGlhbDxTbmlwcGV0PixcbiAgKTogU25pcHBldCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgc2V0KChzdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgcGFja2FnZUluZGV4ID0gc3RhdGUucGFja2FnZXMuZmluZEluZGV4KFxuICAgICAgICAocGtnKSA9PiBwa2cucGFja2FnZV9pZCA9PT0gc25pcHBldElkICYmIHBrZy5pc19zbmlwcGV0ID09PSB0cnVlLFxuICAgICAgKVxuICAgICAgaWYgKHBhY2thZ2VJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KClcbiAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbmV3IERhdGUodGltZXN0YW1wKS50b0lTT1N0cmluZygpXG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgcGFja2FnZVxuICAgICAgY29uc3QgdXBkYXRlZFBhY2thZ2VzID0gWy4uLnN0YXRlLnBhY2thZ2VzXVxuICAgICAgY29uc3QgY3VycmVudFBhY2thZ2UgPSB1cGRhdGVkUGFja2FnZXNbcGFja2FnZUluZGV4XVxuICAgICAgdXBkYXRlZFBhY2thZ2VzW3BhY2thZ2VJbmRleF0gPSB7XG4gICAgICAgIC4uLmN1cnJlbnRQYWNrYWdlLFxuICAgICAgICBkZXNjcmlwdGlvbjogdXBkYXRlcy5kZXNjcmlwdGlvbiA/PyBjdXJyZW50UGFja2FnZS5kZXNjcmlwdGlvbixcbiAgICAgICAgaXNfcHJpdmF0ZTogdXBkYXRlcy5pc19wcml2YXRlID8/IGN1cnJlbnRQYWNrYWdlLmlzX3ByaXZhdGUsXG4gICAgICAgIGlzX3B1YmxpYzpcbiAgICAgICAgICB1cGRhdGVzLmlzX3ByaXZhdGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAhdXBkYXRlcy5pc19wcml2YXRlXG4gICAgICAgICAgICA6IGN1cnJlbnRQYWNrYWdlLmlzX3B1YmxpYyxcbiAgICAgICAgaXNfdW5saXN0ZWQ6IHVwZGF0ZXMuaXNfcHJpdmF0ZVxuICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgIDogKHVwZGF0ZXMuaXNfdW5saXN0ZWQgPz8gY3VycmVudFBhY2thZ2UuaXNfdW5saXN0ZWQpLFxuICAgICAgICB1cGRhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgIH1cblxuICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHBhY2thZ2UgcmVsZWFzZVxuICAgICAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBzdGF0ZS5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgICAgKHByKSA9PlxuICAgICAgICAgIHByLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gY3VycmVudFBhY2thZ2UubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgIClcbiAgICAgIGlmICghcGFja2FnZVJlbGVhc2UpIHJldHVybiBzdGF0ZVxuXG4gICAgICAvLyBVcGRhdGUgcGFja2FnZSBmaWxlcyBpZiBjb2RlL2R0cy9qcyBjaGFuZ2VkXG4gICAgICBjb25zdCB1cGRhdGVkRmlsZXMgPSBbLi4uc3RhdGUucGFja2FnZUZpbGVzXVxuICAgICAgY29uc3QgcGFja2FnZUZpbGVzID0gdXBkYXRlZEZpbGVzLmZpbHRlcihcbiAgICAgICAgKGZpbGUpID0+IGZpbGUucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgICApXG5cbiAgICAgIGlmICh1cGRhdGVzLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBjb2RlRmlsZUluZGV4ID0gcGFja2FnZUZpbGVzLmZpbmRJbmRleChcbiAgICAgICAgICAoZmlsZSkgPT5cbiAgICAgICAgICAgIGZpbGUuZmlsZV9wYXRoID09PSBcImluZGV4LnRzeFwiIHx8IGZpbGUuZmlsZV9wYXRoID09PSBcImluZGV4LnRzXCIsXG4gICAgICAgIClcbiAgICAgICAgaWYgKGNvZGVGaWxlSW5kZXggPj0gMCkge1xuICAgICAgICAgIHVwZGF0ZWRGaWxlc1tjb2RlRmlsZUluZGV4XSA9IHtcbiAgICAgICAgICAgIC4uLnBhY2thZ2VGaWxlc1tjb2RlRmlsZUluZGV4XSxcbiAgICAgICAgICAgIGNvbnRlbnRfdGV4dDogdXBkYXRlcy5jb2RlLFxuICAgICAgICAgICAgY3JlYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVwZGF0ZWRGaWxlcy5wdXNoKHtcbiAgICAgICAgICAgIHBhY2thZ2VfZmlsZV9pZDogYHBhY2thZ2VfZmlsZV8ke3RpbWVzdGFtcH1gLFxuICAgICAgICAgICAgcGFja2FnZV9yZWxlYXNlX2lkOiBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgICAgICAgICBmaWxlX3BhdGg6IFwiaW5kZXgudHN4XCIsXG4gICAgICAgICAgICBjb250ZW50X3RleHQ6IHVwZGF0ZXMuY29kZSxcbiAgICAgICAgICAgIGNyZWF0ZWRfYXQ6IGN1cnJlbnRUaW1lLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHVwZGF0ZXMuZHRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZHRzRmlsZUluZGV4ID0gcGFja2FnZUZpbGVzLmZpbmRJbmRleChcbiAgICAgICAgICAoZmlsZSkgPT4gZmlsZS5maWxlX3BhdGggPT09IFwiL2Rpc3QvaW5kZXguZC50c1wiLFxuICAgICAgICApXG4gICAgICAgIGlmIChkdHNGaWxlSW5kZXggPj0gMCkge1xuICAgICAgICAgIHVwZGF0ZWRGaWxlc1tkdHNGaWxlSW5kZXhdID0ge1xuICAgICAgICAgICAgLi4ucGFja2FnZUZpbGVzW2R0c0ZpbGVJbmRleF0sXG4gICAgICAgICAgICBjb250ZW50X3RleHQ6IHVwZGF0ZXMuZHRzLFxuICAgICAgICAgICAgY3JlYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVwZGF0ZWRGaWxlcy5wdXNoKHtcbiAgICAgICAgICAgIHBhY2thZ2VfZmlsZV9pZDogYHBhY2thZ2VfZmlsZV8ke3RpbWVzdGFtcH1gLFxuICAgICAgICAgICAgcGFja2FnZV9yZWxlYXNlX2lkOiBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgICAgICAgICBmaWxlX3BhdGg6IFwiL2Rpc3QvaW5kZXguZC50c1wiLFxuICAgICAgICAgICAgY29udGVudF90ZXh0OiB1cGRhdGVzLmR0cyxcbiAgICAgICAgICAgIGNyZWF0ZWRfYXQ6IGN1cnJlbnRUaW1lLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHVwZGF0ZXMuY29tcGlsZWRfanMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBqc0ZpbGVJbmRleCA9IHBhY2thZ2VGaWxlcy5maW5kSW5kZXgoXG4gICAgICAgICAgKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcIi9kaXN0L2luZGV4LmpzXCIsXG4gICAgICAgIClcbiAgICAgICAgaWYgKGpzRmlsZUluZGV4ID49IDApIHtcbiAgICAgICAgICB1cGRhdGVkRmlsZXNbanNGaWxlSW5kZXhdID0ge1xuICAgICAgICAgICAgLi4ucGFja2FnZUZpbGVzW2pzRmlsZUluZGV4XSxcbiAgICAgICAgICAgIGNvbnRlbnRfdGV4dDogdXBkYXRlcy5jb21waWxlZF9qcyxcbiAgICAgICAgICAgIGNyZWF0ZWRfYXQ6IGN1cnJlbnRUaW1lLFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cGRhdGVkRmlsZXMucHVzaCh7XG4gICAgICAgICAgICBwYWNrYWdlX2ZpbGVfaWQ6IGBwYWNrYWdlX2ZpbGVfJHt0aW1lc3RhbXB9YCxcbiAgICAgICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogcGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgICAgICAgZmlsZV9wYXRoOiBcIi9kaXN0L2luZGV4LmpzXCIsXG4gICAgICAgICAgICBjb250ZW50X3RleHQ6IHVwZGF0ZXMuY29tcGlsZWRfanMsXG4gICAgICAgICAgICBjcmVhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBjaXJjdWl0IEpTT04gaWYgcHJvdmlkZWRcbiAgICAgIGlmICh1cGRhdGVzLmNpcmN1aXRfanNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGNpcmN1aXRGaWxlSW5kZXggPSBwYWNrYWdlRmlsZXMuZmluZEluZGV4KFxuICAgICAgICAgIChmaWxlKSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9jaXJjdWl0Lmpzb25cIixcbiAgICAgICAgKVxuICAgICAgICBpZiAoY2lyY3VpdEZpbGVJbmRleCA+PSAwKSB7XG4gICAgICAgICAgdXBkYXRlZEZpbGVzW2NpcmN1aXRGaWxlSW5kZXhdID0ge1xuICAgICAgICAgICAgLi4ucGFja2FnZUZpbGVzW2NpcmN1aXRGaWxlSW5kZXhdLFxuICAgICAgICAgICAgY29udGVudF90ZXh0OiBKU09OLnN0cmluZ2lmeSh1cGRhdGVzLmNpcmN1aXRfanNvbiksXG4gICAgICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJldHVybiB1cGRhdGVkIHN0YXRlXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgcGFja2FnZXM6IHVwZGF0ZWRQYWNrYWdlcyxcbiAgICAgICAgcGFja2FnZUZpbGVzOiB1cGRhdGVkRmlsZXMsXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIEdldCB0aGUgdXBkYXRlZCBzbmlwcGV0IHRvIHJldHVyblxuICAgIGNvbnN0IHVwZGF0ZWRQYWNrYWdlID0gZ2V0KCkucGFja2FnZXMuZmluZChcbiAgICAgIChwa2cpID0+IHBrZy5wYWNrYWdlX2lkID09PSBzbmlwcGV0SWQsXG4gICAgKVxuICAgIGlmICghdXBkYXRlZFBhY2thZ2UpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IHBhY2thZ2VSZWxlYXNlID0gZ2V0KCkucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgICAocHIpID0+XG4gICAgICAgIHByLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gdXBkYXRlZFBhY2thZ2UubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICApXG4gICAgaWYgKCFwYWNrYWdlUmVsZWFzZSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3QgcGFja2FnZUZpbGVzID0gZ2V0KCkucGFja2FnZUZpbGVzLmZpbHRlcihcbiAgICAgIChmaWxlKSA9PiBmaWxlLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgIClcblxuICAgIGNvbnN0IGNvZGVGaWxlID0gcGFja2FnZUZpbGVzLmZpbmQoXG4gICAgICAoZmlsZSkgPT4gZmlsZS5maWxlX3BhdGggPT09IFwiaW5kZXgudHNcIiB8fCBmaWxlLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c3hcIixcbiAgICApXG4gICAgY29uc3QgZHRzRmlsZSA9IHBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcIi9kaXN0L2luZGV4LmQudHNcIixcbiAgICApXG4gICAgY29uc3QganNGaWxlID0gcGFja2FnZUZpbGVzLmZpbmQoXG4gICAgICAoZmlsZSkgPT4gZmlsZS5maWxlX3BhdGggPT09IFwiL2Rpc3QvaW5kZXguanNcIixcbiAgICApXG4gICAgY29uc3QgY2lyY3VpdEZpbGUgPSBwYWNrYWdlRmlsZXMuZmluZChcbiAgICAgIChmaWxlKSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9jaXJjdWl0Lmpzb25cIixcbiAgICApXG5cbiAgICAvLyBSZXR1cm4gaW4gc25pcHBldCBmb3JtYXRcbiAgICByZXR1cm4ge1xuICAgICAgc25pcHBldF9pZDogdXBkYXRlZFBhY2thZ2UucGFja2FnZV9pZCxcbiAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogdXBkYXRlZFBhY2thZ2UubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCB8fCBcIlwiLFxuICAgICAgdW5zY29wZWRfbmFtZTogdXBkYXRlZFBhY2thZ2UudW5zY29wZWRfbmFtZSxcbiAgICAgIG5hbWU6IHVwZGF0ZWRQYWNrYWdlLm5hbWUsXG4gICAgICBvd25lcl9uYW1lOiB1cGRhdGVkUGFja2FnZS5vd25lcl9naXRodWJfdXNlcm5hbWUgfHwgXCJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiB1cGRhdGVkUGFja2FnZS5kZXNjcmlwdGlvbiB8fCBcIlwiLFxuICAgICAgc25pcHBldF90eXBlOiB1cGRhdGVkUGFja2FnZS5zbmlwcGV0X3R5cGUgfHwgXCJib2FyZFwiLFxuICAgICAgY29kZTogY29kZUZpbGU/LmNvbnRlbnRfdGV4dCB8fCBcIlwiLFxuICAgICAgZHRzOiBkdHNGaWxlPy5jb250ZW50X3RleHQgfHwgXCJcIixcbiAgICAgIGNvbXBpbGVkX2pzOiBqc0ZpbGU/LmNvbnRlbnRfdGV4dCB8fCBcIlwiLFxuICAgICAgY3JlYXRlZF9hdDogdXBkYXRlZFBhY2thZ2UuY3JlYXRlZF9hdCxcbiAgICAgIHVwZGF0ZWRfYXQ6IHVwZGF0ZWRQYWNrYWdlLnVwZGF0ZWRfYXQsXG4gICAgICBzdGFyX2NvdW50OiB1cGRhdGVkUGFja2FnZS5zdGFyX2NvdW50IHx8IDAsXG4gICAgICBpc19zdGFycmVkOiBmYWxzZSxcbiAgICAgIHZlcnNpb246IHVwZGF0ZWRQYWNrYWdlLmxhdGVzdF92ZXJzaW9uIHx8IFwiMC4wLjFcIixcbiAgICAgIGNpcmN1aXRfanNvbjogY2lyY3VpdEZpbGVcbiAgICAgICAgPyBKU09OLnBhcnNlKGNpcmN1aXRGaWxlLmNvbnRlbnRfdGV4dCB8fCBcIltdXCIpXG4gICAgICAgIDogW10sXG4gICAgICBpc19wcml2YXRlOiB1cGRhdGVkUGFja2FnZS5pc19wcml2YXRlID8/IGZhbHNlLFxuICAgICAgaXNfcHVibGljOiB1cGRhdGVkUGFja2FnZS5pc19wdWJsaWMgPz8gdHJ1ZSxcbiAgICAgIGlzX3VubGlzdGVkOiB1cGRhdGVkUGFja2FnZS5pc191bmxpc3RlZCA/PyBmYWxzZSxcbiAgICB9XG4gIH0sXG4gIGdldFNuaXBwZXRCeUlkOiAoXG4gICAgc25pcHBldElkOiBzdHJpbmcsXG4gICAgYXV0aD86IHsgZ2l0aHViX3VzZXJuYW1lOiBzdHJpbmcgfSxcbiAgKTogU25pcHBldCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIC8vIExvb2sgZm9yIHRoZSBwYWNrYWdlIHRoYXQgcmVwcmVzZW50cyB0aGlzIHNuaXBwZXRcbiAgICBjb25zdCBfcGFja2FnZSA9IHN0YXRlLnBhY2thZ2VzLmZpbmQoXG4gICAgICAocGtnKSA9PiBwa2cucGFja2FnZV9pZCA9PT0gc25pcHBldElkICYmIHBrZy5pc19zbmlwcGV0ID09PSB0cnVlLFxuICAgIClcbiAgICBpZiAoIV9wYWNrYWdlKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICAvLyBIYW5kbGUgdmlzaWJpbGl0eSBiYXNlZCBvbiBhdXRoZW50aWNhdGlvblxuICAgIGlmICghYXV0aCkge1xuICAgICAgLy8gVW5hdXRoZW50aWNhdGVkIHVzZXJzIGNhbiBvbmx5IHNlZSBwdWJsaWMgYW5kIG5vbi11bmxpc3RlZCBwYWNrYWdlc1xuICAgICAgaWYgKCFfcGFja2FnZS5pc19wdWJsaWMgfHwgX3BhY2thZ2UuaXNfdW5saXN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBdXRoZW50aWNhdGVkIHVzZXJzIGNhbiBzZWU6XG4gICAgICAvLyAxLiBQdWJsaWMgYW5kIG5vbi11bmxpc3RlZCBwYWNrYWdlc1xuICAgICAgLy8gMi4gVGhlaXIgb3duIHVubGlzdGVkIHBhY2thZ2VzXG4gICAgICAvLyAzLiBUaGVpciBvd24gcHJpdmF0ZSBwYWNrYWdlc1xuICAgICAgY29uc3QgaXNPd25QYWNrYWdlID1cbiAgICAgICAgX3BhY2thZ2Uub3duZXJfZ2l0aHViX3VzZXJuYW1lID09PSBhdXRoPy5naXRodWJfdXNlcm5hbWVcbiAgICAgIGNvbnN0IGlzUHVibGljQW5kTm90VW5saXN0ZWQgPSBfcGFja2FnZS5pc19wdWJsaWMgJiYgIV9wYWNrYWdlLmlzX3VubGlzdGVkXG4gICAgICBjb25zdCBpc093blVubGlzdGVkID0gX3BhY2thZ2UuaXNfdW5saXN0ZWQgJiYgaXNPd25QYWNrYWdlXG4gICAgICBjb25zdCBpc093blByaXZhdGUgPSBfcGFja2FnZS5pc19wcml2YXRlICYmIGlzT3duUGFja2FnZVxuXG4gICAgICBpZiAoIWlzUHVibGljQW5kTm90VW5saXN0ZWQgJiYgIWlzT3duVW5saXN0ZWQgJiYgIWlzT3duUHJpdmF0ZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBwYWNrYWdlIHJlbGVhc2VcbiAgICBjb25zdCBwYWNrYWdlUmVsZWFzZSA9IHN0YXRlLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgICAgKHByKSA9PlxuICAgICAgICBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IF9wYWNrYWdlLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgJiZcbiAgICAgICAgcHIuaXNfbGF0ZXN0ID09PSB0cnVlLFxuICAgIClcbiAgICBpZiAoIXBhY2thZ2VSZWxlYXNlKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICAvLyBHZXQgdGhlIHBhY2thZ2UgZmlsZXNcbiAgICBjb25zdCBwYWNrYWdlRmlsZXMgPSBzdGF0ZS5wYWNrYWdlRmlsZXMuZmlsdGVyKFxuICAgICAgKGZpbGUpID0+IGZpbGUucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgKVxuXG4gICAgLy8gR2V0IHRoZSBjb2RlIGZpbGUgKGluZGV4LnRzIG9yIGluZGV4LnRzeClcbiAgICBjb25zdCBjb2RlRmlsZSA9IHBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcImluZGV4LnRzXCIgfHwgZmlsZS5maWxlX3BhdGggPT09IFwiaW5kZXgudHN4XCIsXG4gICAgKVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdXNlciBoYXMgc3RhcnJlZCB0aGlzIHNuaXBwZXRcbiAgICBjb25zdCBpc1N0YXJyZWQgPSBzdGF0ZS5hY2NvdW50UGFja2FnZXMuc29tZShcbiAgICAgIChhcCkgPT4gYXAucGFja2FnZV9pZCA9PT0gc25pcHBldElkICYmIGFwLmlzX3N0YXJyZWQsXG4gICAgKVxuXG4gICAgLy8gTWFwIHRoZSBwYWNrYWdlIGRhdGEgdG8gbWF0Y2ggdGhlIFNuaXBwZXQgc3RydWN0dXJlXG4gICAgcmV0dXJuIHtcbiAgICAgIHNuaXBwZXRfaWQ6IF9wYWNrYWdlLnBhY2thZ2VfaWQsXG4gICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IF9wYWNrYWdlLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgfHwgXCJcIixcbiAgICAgIHVuc2NvcGVkX25hbWU6IF9wYWNrYWdlLnVuc2NvcGVkX25hbWUsXG4gICAgICBuYW1lOiBfcGFja2FnZS5uYW1lLFxuICAgICAgb3duZXJfbmFtZTogX3BhY2thZ2Uub3duZXJfZ2l0aHViX3VzZXJuYW1lIHx8IFwiXCIsXG4gICAgICBkZXNjcmlwdGlvbjogX3BhY2thZ2UuZGVzY3JpcHRpb24gfHwgXCJcIixcbiAgICAgIHNuaXBwZXRfdHlwZTogX3BhY2thZ2Uuc25pcHBldF90eXBlIHx8IFwiYm9hcmRcIixcbiAgICAgIGNvZGU6IGNvZGVGaWxlPy5jb250ZW50X3RleHQgfHwgXCJcIixcbiAgICAgIGR0czpcbiAgICAgICAgcGFja2FnZUZpbGVzLmZpbmQoKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcIi9kaXN0L2luZGV4LmQudHNcIilcbiAgICAgICAgICA/LmNvbnRlbnRfdGV4dCB8fCBcIlwiLFxuICAgICAgY29tcGlsZWRfanM6XG4gICAgICAgIHBhY2thZ2VGaWxlcy5maW5kKChmaWxlKSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9pbmRleC5qc1wiKVxuICAgICAgICAgID8uY29udGVudF90ZXh0IHx8IFwiXCIsXG4gICAgICBjcmVhdGVkX2F0OiBfcGFja2FnZS5jcmVhdGVkX2F0LFxuICAgICAgdXBkYXRlZF9hdDogX3BhY2thZ2UudXBkYXRlZF9hdCxcbiAgICAgIHN0YXJfY291bnQ6IF9wYWNrYWdlLnN0YXJfY291bnQgfHwgMCxcbiAgICAgIGlzX3N0YXJyZWQ6IGlzU3RhcnJlZCxcbiAgICAgIHZlcnNpb246IF9wYWNrYWdlLmxhdGVzdF92ZXJzaW9uIHx8IFwiMC4wLjFcIixcbiAgICAgIGNpcmN1aXRfanNvbjogcGFja2FnZUZpbGVzLmZpbmQoXG4gICAgICAgIChmaWxlKSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9jaXJjdWl0Lmpzb25cIixcbiAgICAgICk/LmNvbnRlbnRfdGV4dFxuICAgICAgICA/IEpTT04ucGFyc2UoXG4gICAgICAgICAgICBwYWNrYWdlRmlsZXMuZmluZCgoZmlsZSkgPT4gZmlsZS5maWxlX3BhdGggPT09IFwiL2Rpc3QvY2lyY3VpdC5qc29uXCIpXG4gICAgICAgICAgICAgID8uY29udGVudF90ZXh0IHx8IFwiW11cIixcbiAgICAgICAgICApXG4gICAgICAgIDogW10sXG4gICAgICBpc19wcml2YXRlOiBfcGFja2FnZS5pc19wcml2YXRlIHx8IGZhbHNlLFxuICAgICAgaXNfcHVibGljOiBfcGFja2FnZS5pc19wdWJsaWMgfHwgdHJ1ZSxcbiAgICAgIGlzX3VubGlzdGVkOiBfcGFja2FnZS5pc191bmxpc3RlZCB8fCBmYWxzZSxcbiAgICB9XG4gIH0sXG4gIHNlYXJjaFNuaXBwZXRzOiAocXVlcnk6IHN0cmluZyk6IFNuaXBwZXRbXSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIGNvbnN0IGxvd2VyY2FzZVF1ZXJ5ID0gcXVlcnkudG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gR2V0IGFsbCBwYWNrYWdlcyB0aGF0IGFyZSBzbmlwcGV0c1xuICAgIGNvbnN0IHBhY2thZ2VzID0gc3RhdGUucGFja2FnZXMuZmlsdGVyKChwa2cpID0+IHBrZy5pc19zbmlwcGV0ID09PSB0cnVlKVxuXG4gICAgLy8gRmluZCBwYWNrYWdlcyB0aGF0IG1hdGNoIGJ5IG5hbWUgb3IgZGVzY3JpcHRpb25cbiAgICBjb25zdCBtYXRjaGluZ1BhY2thZ2VzQnlNZXRhZGF0YSA9IHBhY2thZ2VzLmZpbHRlcihcbiAgICAgIChwa2cpID0+XG4gICAgICAgIHBrZy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJjYXNlUXVlcnkpIHx8XG4gICAgICAgIHBrZy5kZXNjcmlwdGlvbj8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlcmNhc2VRdWVyeSksXG4gICAgKVxuXG4gICAgLy8gRmluZCBwYWNrYWdlcyB0aGF0IG1hdGNoIGJ5IGNvZGUgY29udGVudCBpbiBhbnkgZmlsZVxuICAgIGNvbnN0IG1hdGNoaW5nRmlsZXNCeUNvbnRlbnQgPSBzdGF0ZS5wYWNrYWdlRmlsZXMuZmlsdGVyKFxuICAgICAgKGZpbGUpID0+XG4gICAgICAgIGZpbGUuY29udGVudF90ZXh0Py50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyY2FzZVF1ZXJ5KSA/PyBmYWxzZSxcbiAgICApXG5cbiAgICAvLyBHZXQgdGhlIHBhY2thZ2VzIGZvciBtYXRjaGluZyBmaWxlc1xuICAgIGNvbnN0IG1hdGNoaW5nUGFja2FnZXNCeUNvbnRlbnQgPSBtYXRjaGluZ0ZpbGVzQnlDb250ZW50XG4gICAgICAubWFwKChmaWxlKSA9PiB7XG4gICAgICAgIC8vIEZpbmQgdGhlIHBhY2thZ2UgcmVsZWFzZSBmb3IgdGhpcyBmaWxlXG4gICAgICAgIGNvbnN0IHBhY2thZ2VSZWxlYXNlID0gc3RhdGUucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgICAgICAgKHByKSA9PiBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IGZpbGUucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgICApXG4gICAgICAgIGlmICghcGFja2FnZVJlbGVhc2UpIHJldHVybiBudWxsXG5cbiAgICAgICAgLy8gRmluZCB0aGUgcGFja2FnZSBmb3IgdGhpcyByZWxlYXNlXG4gICAgICAgIHJldHVybiBwYWNrYWdlcy5maW5kKFxuICAgICAgICAgIChwa2cpID0+XG4gICAgICAgICAgICBwa2cubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgICApXG4gICAgICB9KVxuICAgICAgLmZpbHRlcigocGtnKTogcGtnIGlzIE5vbk51bGxhYmxlPHR5cGVvZiBwa2c+ID0+IHBrZyAhPT0gbnVsbClcblxuICAgIC8vIENvbWJpbmUgYm90aCBzZXRzIG9mIG1hdGNoaW5nIHBhY2thZ2VzIGFuZCByZW1vdmUgZHVwbGljYXRlc1xuICAgIGNvbnN0IG1hdGNoaW5nUGFja2FnZXMgPSBbXG4gICAgICAuLi5uZXcgU2V0KFsuLi5tYXRjaGluZ1BhY2thZ2VzQnlNZXRhZGF0YSwgLi4ubWF0Y2hpbmdQYWNrYWdlc0J5Q29udGVudF0pLFxuICAgIF1cblxuICAgIC8vIENvbnZlcnQgbWF0Y2hpbmcgcGFja2FnZXMgdG8gc25pcHBldCBmb3JtYXRcbiAgICByZXR1cm4gbWF0Y2hpbmdQYWNrYWdlc1xuICAgICAgLm1hcCgocGtnKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VSZWxlYXNlID0gc3RhdGUucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgICAgICAgKHByKSA9PlxuICAgICAgICAgICAgcHIucGFja2FnZV9yZWxlYXNlX2lkID09PSBwa2cubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCAmJlxuICAgICAgICAgICAgcHIuaXNfbGF0ZXN0ID09PSB0cnVlLFxuICAgICAgICApXG4gICAgICAgIGlmICghcGFja2FnZVJlbGVhc2UpIHJldHVybiBudWxsXG5cbiAgICAgICAgY29uc3QgcGFja2FnZUZpbGVzID0gc3RhdGUucGFja2FnZUZpbGVzLmZpbHRlcihcbiAgICAgICAgICAoZmlsZSkgPT5cbiAgICAgICAgICAgIGZpbGUucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBjb2RlRmlsZSA9IHBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgICAgIChmaWxlKSA9PlxuICAgICAgICAgICAgZmlsZS5maWxlX3BhdGggPT09IFwiaW5kZXgudHNcIiB8fCBmaWxlLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c3hcIixcbiAgICAgICAgKVxuXG4gICAgICAgIGNvbnN0IGlzU3RhcnJlZCA9IHN0YXRlLmFjY291bnRQYWNrYWdlcy5zb21lKFxuICAgICAgICAgIChhcCkgPT4gYXAucGFja2FnZV9pZCA9PT0gcGtnLnBhY2thZ2VfaWQgJiYgYXAuaXNfc3RhcnJlZCxcbiAgICAgICAgKVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc25pcHBldF9pZDogcGtnLnBhY2thZ2VfaWQsXG4gICAgICAgICAgcGFja2FnZV9yZWxlYXNlX2lkOiBwa2cubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCB8fCBcIlwiLFxuICAgICAgICAgIHVuc2NvcGVkX25hbWU6IHBrZy51bnNjb3BlZF9uYW1lLFxuICAgICAgICAgIG5hbWU6IHBrZy5uYW1lLFxuICAgICAgICAgIG93bmVyX25hbWU6IHBrZy5vd25lcl9naXRodWJfdXNlcm5hbWUgfHwgXCJcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogcGtnLmRlc2NyaXB0aW9uIHx8IFwiXCIsXG4gICAgICAgICAgc25pcHBldF90eXBlOiBwa2cuc25pcHBldF90eXBlIHx8IFwiYm9hcmRcIixcbiAgICAgICAgICBjb2RlOiBjb2RlRmlsZT8uY29udGVudF90ZXh0IHx8IFwiXCIsXG4gICAgICAgICAgZHRzOlxuICAgICAgICAgICAgcGFja2FnZUZpbGVzLmZpbmQoKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcIi9kaXN0L2luZGV4LmQudHNcIilcbiAgICAgICAgICAgICAgPy5jb250ZW50X3RleHQgfHwgXCJcIixcbiAgICAgICAgICBjb21waWxlZF9qczpcbiAgICAgICAgICAgIHBhY2thZ2VGaWxlcy5maW5kKChmaWxlKSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9pbmRleC5qc1wiKVxuICAgICAgICAgICAgICA/LmNvbnRlbnRfdGV4dCB8fCBcIlwiLFxuICAgICAgICAgIGNyZWF0ZWRfYXQ6IHBrZy5jcmVhdGVkX2F0LFxuICAgICAgICAgIHVwZGF0ZWRfYXQ6IHBrZy51cGRhdGVkX2F0LFxuICAgICAgICAgIHN0YXJfY291bnQ6IHBrZy5zdGFyX2NvdW50IHx8IDAsXG4gICAgICAgICAgaXNfc3RhcnJlZDogaXNTdGFycmVkLFxuICAgICAgICAgIHZlcnNpb246IHBrZy5sYXRlc3RfdmVyc2lvbiB8fCBcIjAuMC4xXCIsXG4gICAgICAgICAgY2lyY3VpdF9qc29uOlxuICAgICAgICAgICAgcGFja2FnZUZpbGVzXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcIi9kaXN0L2NpcmN1aXQuanNvblwiKVxuICAgICAgICAgICAgICAuZmxhdE1hcCgoZmlsZSkgPT4gSlNPTi5wYXJzZShmaWxlLmNvbnRlbnRfdGV4dCB8fCBcIltdXCIpKSB8fCBbXSxcbiAgICAgICAgfSBhcyBTbmlwcGV0XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoc25pcHBldCk6IHNuaXBwZXQgaXMgU25pcHBldCA9PiBzbmlwcGV0ICE9PSBudWxsKVxuICB9LFxuICBzZWFyY2hQYWNrYWdlczogKHF1ZXJ5OiBzdHJpbmcpOiBQYWNrYWdlW10gPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICBjb25zdCBsb3dlcmNhc2VRdWVyeSA9IHF1ZXJ5LnRvTG93ZXJDYXNlKClcblxuICAgIC8vIEdldCBhbGwgcGFja2FnZXMgdGhhdCBhcmUgcHVibGljXG4gICAgY29uc3QgcGFja2FnZXMgPSBzdGF0ZS5wYWNrYWdlcy5maWx0ZXIoKHBrZykgPT4gcGtnLmlzX3B1YmxpYyA9PT0gdHJ1ZSlcblxuICAgIC8vIEZpbmQgcGFja2FnZXMgdGhhdCBtYXRjaCBieSBuYW1lIG9yIGRlc2NyaXB0aW9uXG4gICAgY29uc3QgbWF0Y2hpbmdQYWNrYWdlc0J5TWV0YWRhdGEgPSBwYWNrYWdlcy5maWx0ZXIoXG4gICAgICAocGtnKSA9PlxuICAgICAgICBwa2cubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyY2FzZVF1ZXJ5KSB8fFxuICAgICAgICBwa2cuZGVzY3JpcHRpb24/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJjYXNlUXVlcnkpLFxuICAgIClcblxuICAgIC8vIEZpbmQgcGFja2FnZXMgdGhhdCBtYXRjaCBieSBjb2RlIGNvbnRlbnQgaW4gYW55IGZpbGVcbiAgICBjb25zdCBtYXRjaGluZ0ZpbGVzQnlDb250ZW50ID0gc3RhdGUucGFja2FnZUZpbGVzLmZpbHRlcihcbiAgICAgIChmaWxlKSA9PlxuICAgICAgICBmaWxlLmNvbnRlbnRfdGV4dD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlcmNhc2VRdWVyeSkgPz8gZmFsc2UsXG4gICAgKVxuXG4gICAgLy8gR2V0IHRoZSBwYWNrYWdlcyBmb3IgbWF0Y2hpbmcgZmlsZXNcbiAgICBjb25zdCBtYXRjaGluZ1BhY2thZ2VzQnlDb250ZW50ID0gbWF0Y2hpbmdGaWxlc0J5Q29udGVudFxuICAgICAgLm1hcCgoZmlsZSkgPT4ge1xuICAgICAgICAvLyBGaW5kIHRoZSBwYWNrYWdlIHJlbGVhc2UgZm9yIHRoaXMgZmlsZVxuICAgICAgICBjb25zdCBwYWNrYWdlUmVsZWFzZSA9IHN0YXRlLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgICAgICAgIChwcikgPT4gcHIucGFja2FnZV9yZWxlYXNlX2lkID09PSBmaWxlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgICAgKVxuICAgICAgICBpZiAoIXBhY2thZ2VSZWxlYXNlKSByZXR1cm4gbnVsbFxuXG4gICAgICAgIC8vIEZpbmQgdGhlIHBhY2thZ2UgZm9yIHRoaXMgcmVsZWFzZVxuICAgICAgICByZXR1cm4gcGFja2FnZXMuZmluZChcbiAgICAgICAgICAocGtnKSA9PlxuICAgICAgICAgICAgcGtnLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHBrZyk6IHBrZyBpcyBOb25OdWxsYWJsZTx0eXBlb2YgcGtnPiA9PiBwa2cgIT09IG51bGwpXG5cbiAgICAvLyBDb21iaW5lIGJvdGggc2V0cyBvZiBtYXRjaGluZyBwYWNrYWdlcyBhbmQgcmVtb3ZlIGR1cGxpY2F0ZXNcbiAgICBjb25zdCBtYXRjaGluZ1BhY2thZ2VzID0gW1xuICAgICAgLi4ubmV3IFNldChbLi4ubWF0Y2hpbmdQYWNrYWdlc0J5TWV0YWRhdGEsIC4uLm1hdGNoaW5nUGFja2FnZXNCeUNvbnRlbnRdKSxcbiAgICBdXG5cbiAgICByZXR1cm4gbWF0Y2hpbmdQYWNrYWdlc1xuICB9LFxuICBzZWFyY2hBY2NvdW50czogKHF1ZXJ5OiBzdHJpbmcsIGxpbWl0PzogbnVtYmVyKTogQWNjb3VudFtdID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgY29uc3QgbG93ZXJjYXNlUXVlcnkgPSBxdWVyeS50b0xvd2VyQ2FzZSgpXG5cbiAgICBjb25zdCBhY2NvdW50c1dpdGhQdWJsaWNQYWNrYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gICAgc3RhdGUucGFja2FnZXNcbiAgICAgIC5maWx0ZXIoKHBrZykgPT4gcGtnLmlzX3B1YmxpYyA9PT0gdHJ1ZSlcbiAgICAgIC5mb3JFYWNoKChwa2cpID0+IHtcbiAgICAgICAgaWYgKHBrZy5jcmVhdG9yX2FjY291bnRfaWQpIHtcbiAgICAgICAgICBhY2NvdW50c1dpdGhQdWJsaWNQYWNrYWdlcy5hZGQocGtnLmNyZWF0b3JfYWNjb3VudF9pZClcbiAgICAgICAgfVxuICAgICAgICBpZiAocGtnLm93bmVyX2dpdGh1Yl91c2VybmFtZSkge1xuICAgICAgICAgIGNvbnN0IGFjY291bnQgPSBzdGF0ZS5hY2NvdW50cy5maW5kKFxuICAgICAgICAgICAgKGFjYykgPT4gYWNjLmdpdGh1Yl91c2VybmFtZSA9PT0gcGtnLm93bmVyX2dpdGh1Yl91c2VybmFtZSxcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKGFjY291bnQpIHtcbiAgICAgICAgICAgIGFjY291bnRzV2l0aFB1YmxpY1BhY2thZ2VzLmFkZChhY2NvdW50LmFjY291bnRfaWQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgY29uc3QgbWF0Y2hpbmdBY2NvdW50cyA9IHN0YXRlLmFjY291bnRzXG4gICAgICAuZmlsdGVyKChhY2NvdW50KSA9PiB7XG4gICAgICAgIGlmICghYWNjb3VudHNXaXRoUHVibGljUGFja2FnZXMuaGFzKGFjY291bnQuYWNjb3VudF9pZCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGFjY291bnQuZ2l0aHViX3VzZXJuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJjYXNlUXVlcnkpIHx8XG4gICAgICAgICAgKGFjY291bnQudHNjaXJjdWl0X2hhbmRsZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlcmNhc2VRdWVyeSkgPz9cbiAgICAgICAgICAgIGZhbHNlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgICAgLnNsaWNlKDAsIGxpbWl0IHx8IDUwKVxuXG4gICAgcmV0dXJuIG1hdGNoaW5nQWNjb3VudHNcbiAgfSxcbiAgZGVsZXRlU25pcHBldDogKHNuaXBwZXRJZDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZVxuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gc3RhdGUuc25pcHBldHMuZmluZEluZGV4KChzKSA9PiBzLnNuaXBwZXRfaWQgPT09IHNuaXBwZXRJZClcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgc3RhdGUuc25pcHBldHMuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICBkZWxldGVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfSlcbiAgICByZXR1cm4gZGVsZXRlZFxuICB9LFxuICBhZGRTZXNzaW9uOiAoc2Vzc2lvbjogT21pdDxTZXNzaW9uLCBcInNlc3Npb25faWRcIj4pOiBTZXNzaW9uID0+IHtcbiAgICBjb25zdCBuZXdTZXNzaW9uID0geyBzZXNzaW9uX2lkOiBgc2Vzc2lvbl8ke0RhdGUubm93KCl9YCwgLi4uc2Vzc2lvbiB9XG4gICAgc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgIHNlc3Npb25zOiBbLi4uc3RhdGUuc2Vzc2lvbnMsIG5ld1Nlc3Npb25dLFxuICAgIH0pKVxuICAgIHJldHVybiBuZXdTZXNzaW9uXG4gIH0sXG4gIGdldFNlc3Npb25zOiAoe1xuICAgIGFjY291bnRfaWQsXG4gICAgaXNfY2xpX3Nlc3Npb24sXG4gIH06IHsgYWNjb3VudF9pZDogc3RyaW5nOyBpc19jbGlfc2Vzc2lvbj86IGJvb2xlYW4gfSk6IFNlc3Npb25bXSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5zZXNzaW9ucy5maWx0ZXIoXG4gICAgICAoc2Vzc2lvbikgPT5cbiAgICAgICAgc2Vzc2lvbi5hY2NvdW50X2lkID09PSBhY2NvdW50X2lkICYmXG4gICAgICAgIChpc19jbGlfc2Vzc2lvbiA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgc2Vzc2lvbi5pc19jbGlfc2Vzc2lvbiA9PT0gaXNfY2xpX3Nlc3Npb24pLFxuICAgIClcbiAgfSxcbiAgY3JlYXRlTG9naW5QYWdlOiAoKTogTG9naW5QYWdlID0+IHtcbiAgICBjb25zdCBuZXdMb2dpblBhZ2U6IExvZ2luUGFnZSA9IHtcbiAgICAgIGxvZ2luX3BhZ2VfaWQ6IGBsb2dpbl9wYWdlXyR7RGF0ZS5ub3coKX1gLFxuICAgICAgbG9naW5fcGFnZV9hdXRoX3Rva2VuOiBgdG9rZW5fJHtEYXRlLm5vdygpfWAsXG4gICAgICB3YXNfbG9naW5fc3VjY2Vzc2Z1bDogZmFsc2UsXG4gICAgICBoYXNfYmVlbl91c2VkX3RvX2NyZWF0ZV9zZXNzaW9uOiBmYWxzZSxcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGV4cGlyZXNfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgKyAzMCAqIDYwICogMTAwMCkudG9JU09TdHJpbmcoKSwgLy8gMzAgbWludXRlcyBleHBpcmF0aW9uXG4gICAgfVxuICAgIHNldCgoc3RhdGUpID0+ICh7XG4gICAgICBsb2dpblBhZ2VzOiBbLi4uc3RhdGUubG9naW5QYWdlcywgbmV3TG9naW5QYWdlXSxcbiAgICB9KSlcbiAgICByZXR1cm4gbmV3TG9naW5QYWdlXG4gIH0sXG4gIGdldExvZ2luUGFnZTogKGxvZ2luUGFnZUlkOiBzdHJpbmcpOiBMb2dpblBhZ2UgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUubG9naW5QYWdlcy5maW5kKChscCkgPT4gbHAubG9naW5fcGFnZV9pZCA9PT0gbG9naW5QYWdlSWQpXG4gIH0sXG4gIHVwZGF0ZUxvZ2luUGFnZTogKGxvZ2luUGFnZUlkOiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8TG9naW5QYWdlPik6IHZvaWQgPT4ge1xuICAgIHNldCgoc3RhdGUpID0+ICh7XG4gICAgICBsb2dpblBhZ2VzOiBzdGF0ZS5sb2dpblBhZ2VzLm1hcCgobHApID0+XG4gICAgICAgIGxwLmxvZ2luX3BhZ2VfaWQgPT09IGxvZ2luUGFnZUlkID8geyAuLi5scCwgLi4udXBkYXRlcyB9IDogbHAsXG4gICAgICApLFxuICAgIH0pKVxuICB9LFxuICBnZXRBY2NvdW50OiAoYWNjb3VudElkOiBzdHJpbmcpOiBBY2NvdW50IHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLmFjY291bnRzLmZpbmQoKGFjY291bnQpID0+IGFjY291bnQuYWNjb3VudF9pZCA9PT0gYWNjb3VudElkKVxuICB9LFxuICB1cGRhdGVBY2NvdW50OiAoXG4gICAgYWNjb3VudElkOiBzdHJpbmcsXG4gICAgdXBkYXRlczogUGFydGlhbDxBY2NvdW50PixcbiAgKTogQWNjb3VudCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgbGV0IHVwZGF0ZWRBY2NvdW50OiBBY2NvdW50IHwgdW5kZWZpbmVkXG4gICAgc2V0KChzdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgYWNjb3VudEluZGV4ID0gc3RhdGUuYWNjb3VudHMuZmluZEluZGV4KFxuICAgICAgICAoYWNjb3VudCkgPT4gYWNjb3VudC5hY2NvdW50X2lkID09PSBhY2NvdW50SWQsXG4gICAgICApXG4gICAgICBpZiAoYWNjb3VudEluZGV4ICE9PSAtMSkge1xuICAgICAgICB1cGRhdGVkQWNjb3VudCA9IHsgLi4uc3RhdGUuYWNjb3VudHNbYWNjb3VudEluZGV4XSB9XG4gICAgICAgIGlmICh1cGRhdGVzLnRzY2lyY3VpdF9oYW5kbGUpIHtcbiAgICAgICAgICB1cGRhdGVkQWNjb3VudC50c2NpcmN1aXRfaGFuZGxlID0gdXBkYXRlcy50c2NpcmN1aXRfaGFuZGxlXG4gICAgICAgICAgZGVsZXRlIHVwZGF0ZXMudHNjaXJjdWl0X2hhbmRsZVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVzLnNoaXBwaW5nSW5mbykge1xuICAgICAgICAgIHVwZGF0ZWRBY2NvdW50LnNoaXBwaW5nSW5mbyA9IHtcbiAgICAgICAgICAgIC4uLnVwZGF0ZWRBY2NvdW50LnNoaXBwaW5nSW5mbyxcbiAgICAgICAgICAgIC4uLnVwZGF0ZXMuc2hpcHBpbmdJbmZvLFxuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgdXBkYXRlcy5zaGlwcGluZ0luZm9cbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVkQWNjb3VudCA9IHsgLi4udXBkYXRlZEFjY291bnQsIC4uLnVwZGF0ZXMgfVxuICAgICAgICBjb25zdCB1cGRhdGVkQWNjb3VudHMgPSBbLi4uc3RhdGUuYWNjb3VudHNdXG4gICAgICAgIHVwZGF0ZWRBY2NvdW50c1thY2NvdW50SW5kZXhdID0gdXBkYXRlZEFjY291bnRcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGFjY291bnRzOiB1cGRhdGVkQWNjb3VudHMgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfSlcbiAgICByZXR1cm4gdXBkYXRlZEFjY291bnRcbiAgfSxcbiAgY3JlYXRlU2Vzc2lvbjogKHNlc3Npb246IE9taXQ8U2Vzc2lvbiwgXCJzZXNzaW9uX2lkXCI+KTogU2Vzc2lvbiA9PiB7XG4gICAgY29uc3QgbmV3U2Vzc2lvbiA9IHsgc2Vzc2lvbl9pZDogYHNlc3Npb25fJHtEYXRlLm5vdygpfWAsIC4uLnNlc3Npb24gfVxuICAgIHNldCgoc3RhdGUpID0+ICh7XG4gICAgICBzZXNzaW9uczogWy4uLnN0YXRlLnNlc3Npb25zLCBuZXdTZXNzaW9uXSxcbiAgICB9KSlcbiAgICByZXR1cm4gbmV3U2Vzc2lvblxuICB9LFxuICBkZWxldGVTZXNzaW9uOiAoc2Vzc2lvbklkOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlXG4gICAgc2V0KChzdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSBzdGF0ZS5zZXNzaW9ucy5maW5kSW5kZXgoXG4gICAgICAgIChzZXNzaW9uKSA9PiBzZXNzaW9uLnNlc3Npb25faWQgPT09IHNlc3Npb25JZCxcbiAgICAgIClcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgc3RhdGUuc2Vzc2lvbnMuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICBkZWxldGVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfSlcbiAgICByZXR1cm4gZGVsZXRlZFxuICB9LFxuICBhZGRTdGFyOiAoYWNjb3VudElkOiBzdHJpbmcsIHBhY2thZ2VJZDogc3RyaW5nKTogQWNjb3VudFBhY2thZ2UgPT4ge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgIGNvbnN0IGFjY291bnRQYWNrYWdlID0ge1xuICAgICAgYWNjb3VudF9wYWNrYWdlX2lkOiBgYXBfJHtEYXRlLm5vdygpfWAsXG4gICAgICBhY2NvdW50X2lkOiBhY2NvdW50SWQsXG4gICAgICBwYWNrYWdlX2lkOiBwYWNrYWdlSWQsXG4gICAgICBpc19zdGFycmVkOiB0cnVlLFxuICAgICAgY3JlYXRlZF9hdDogbm93LFxuICAgICAgdXBkYXRlZF9hdDogbm93LFxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgcGFja2FnZSdzIHN0YXIgY291bnRcbiAgICBzZXQoKHN0YXRlKSA9PiB7XG4gICAgICAvLyBGaW5kIHRoZSBwYWNrYWdlIGFuZCBpbmNyZW1lbnQgaXRzIHN0YXIgY291bnRcbiAgICAgIGNvbnN0IHBhY2thZ2VJbmRleCA9IHN0YXRlLnBhY2thZ2VzLmZpbmRJbmRleChcbiAgICAgICAgKHBrZykgPT4gcGtnLnBhY2thZ2VfaWQgPT09IHBhY2thZ2VJZCxcbiAgICAgIClcbiAgICAgIGlmIChwYWNrYWdlSW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCB1cGRhdGVkUGFja2FnZXMgPSBbLi4uc3RhdGUucGFja2FnZXNdXG4gICAgICAgIHVwZGF0ZWRQYWNrYWdlc1twYWNrYWdlSW5kZXhdID0ge1xuICAgICAgICAgIC4uLnVwZGF0ZWRQYWNrYWdlc1twYWNrYWdlSW5kZXhdLFxuICAgICAgICAgIHN0YXJfY291bnQ6ICh1cGRhdGVkUGFja2FnZXNbcGFja2FnZUluZGV4XS5zdGFyX2NvdW50IHx8IDApICsgMSxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGFja2FnZXM6IHVwZGF0ZWRQYWNrYWdlcyxcbiAgICAgICAgICBhY2NvdW50UGFja2FnZXM6IFsuLi5zdGF0ZS5hY2NvdW50UGFja2FnZXMsIGFjY291bnRQYWNrYWdlXSxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY2NvdW50UGFja2FnZXM6IFsuLi5zdGF0ZS5hY2NvdW50UGFja2FnZXMsIGFjY291bnRQYWNrYWdlXSxcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGFjY291bnRQYWNrYWdlXG4gIH0sXG4gIHJlbW92ZVN0YXI6IChhY2NvdW50SWQ6IHN0cmluZywgcGFja2FnZUlkOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICBzZXQoKHN0YXRlKSA9PiB7XG4gICAgICAvLyBGaW5kIHRoZSBwYWNrYWdlIGFuZCBkZWNyZW1lbnQgaXRzIHN0YXIgY291bnRcbiAgICAgIGNvbnN0IHBhY2thZ2VJbmRleCA9IHN0YXRlLnBhY2thZ2VzLmZpbmRJbmRleChcbiAgICAgICAgKHBrZykgPT4gcGtnLnBhY2thZ2VfaWQgPT09IHBhY2thZ2VJZCxcbiAgICAgIClcblxuICAgICAgaWYgKHBhY2thZ2VJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRQYWNrYWdlcyA9IFsuLi5zdGF0ZS5wYWNrYWdlc11cbiAgICAgICAgdXBkYXRlZFBhY2thZ2VzW3BhY2thZ2VJbmRleF0gPSB7XG4gICAgICAgICAgLi4udXBkYXRlZFBhY2thZ2VzW3BhY2thZ2VJbmRleF0sXG4gICAgICAgICAgc3Rhcl9jb3VudDogTWF0aC5tYXgoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgKHVwZGF0ZWRQYWNrYWdlc1twYWNrYWdlSW5kZXhdLnN0YXJfY291bnQgfHwgMCkgLSAxLFxuICAgICAgICAgICksXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBhY2thZ2VzOiB1cGRhdGVkUGFja2FnZXMsXG4gICAgICAgICAgYWNjb3VudFBhY2thZ2VzOiBzdGF0ZS5hY2NvdW50UGFja2FnZXMuZmlsdGVyKFxuICAgICAgICAgICAgKGFwKSA9PlxuICAgICAgICAgICAgICAhKGFwLmFjY291bnRfaWQgPT09IGFjY291bnRJZCAmJiBhcC5wYWNrYWdlX2lkID09PSBwYWNrYWdlSWQpLFxuICAgICAgICAgICksXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWNjb3VudFBhY2thZ2VzOiBzdGF0ZS5hY2NvdW50UGFja2FnZXMuZmlsdGVyKFxuICAgICAgICAgIChhcCkgPT4gIShhcC5hY2NvdW50X2lkID09PSBhY2NvdW50SWQgJiYgYXAucGFja2FnZV9pZCA9PT0gcGFja2FnZUlkKSxcbiAgICAgICAgKSxcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuICBoYXNTdGFycmVkOiAoYWNjb3VudElkOiBzdHJpbmcsIHBhY2thZ2VJZDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5hY2NvdW50UGFja2FnZXMuc29tZShcbiAgICAgIChhcCkgPT5cbiAgICAgICAgYXAuYWNjb3VudF9pZCA9PT0gYWNjb3VudElkICYmXG4gICAgICAgIGFwLnBhY2thZ2VfaWQgPT09IHBhY2thZ2VJZCAmJlxuICAgICAgICBhcC5pc19zdGFycmVkLFxuICAgIClcbiAgfSxcbiAgYWRkUGFja2FnZTogKFxuICAgIF9wYWNrYWdlOiBPbWl0PFxuICAgICAgei5pbnB1dDx0eXBlb2YgcGFja2FnZVNjaGVtYT4sXG4gICAgICBcInBhY2thZ2VfaWRcIiB8IFwiZ2l0aHViX3JlcG9fZnVsbF9uYW1lXCJcbiAgICA+LFxuICApOiBQYWNrYWdlID0+IHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpXG4gICAgY29uc3QgbmV3UGFja2FnZSA9IHtcbiAgICAgIHBhY2thZ2VfaWQ6IGBwYWNrYWdlXyR7dGltZXN0YW1wfWAsXG4gICAgICBnaXRodWJfcmVwb19mdWxsX25hbWU6IG51bGwsXG4gICAgICBsYXRlc3RfcGNiX3ByZXZpZXdfaW1hZ2VfdXJsOlxuICAgICAgICBfcGFja2FnZS5sYXRlc3RfcGNiX3ByZXZpZXdfaW1hZ2VfdXJsID8/XG4gICAgICAgIGAvYXBpL3BhY2thZ2VzL2ltYWdlcy8ke19wYWNrYWdlLm5hbWV9YCxcbiAgICAgIGxhdGVzdF9jYWRfcHJldmlld19pbWFnZV91cmw6XG4gICAgICAgIF9wYWNrYWdlLmxhdGVzdF9jYWRfcHJldmlld19pbWFnZV91cmwgPz9cbiAgICAgICAgYC9hcGkvcGFja2FnZXMvaW1hZ2VzLyR7X3BhY2thZ2UubmFtZX1gLFxuICAgICAgbGF0ZXN0X3NjaF9wcmV2aWV3X2ltYWdlX3VybDpcbiAgICAgICAgX3BhY2thZ2UubGF0ZXN0X3NjaF9wcmV2aWV3X2ltYWdlX3VybCA/P1xuICAgICAgICBgL2FwaS9wYWNrYWdlcy9pbWFnZXMvJHtfcGFja2FnZS5uYW1lfWAsXG4gICAgICAuLi5fcGFja2FnZSxcbiAgICB9XG4gICAgc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgIHBhY2thZ2VzOiBbLi4uc3RhdGUucGFja2FnZXMsIG5ld1BhY2thZ2UgYXMgUGFja2FnZV0sXG4gICAgfSkpXG4gICAgcmV0dXJuIG5ld1BhY2thZ2UgYXMgUGFja2FnZVxuICB9LFxuICB1cGRhdGVQYWNrYWdlOiAoXG4gICAgcGFja2FnZUlkOiBzdHJpbmcsXG4gICAgdXBkYXRlczogUGFydGlhbDxQYWNrYWdlPixcbiAgKTogUGFja2FnZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgbGV0IHVwZGF0ZWRQYWNrYWdlOiBQYWNrYWdlIHwgdW5kZWZpbmVkXG4gICAgc2V0KChzdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgcGFja2FnZUluZGV4ID0gc3RhdGUucGFja2FnZXMuZmluZEluZGV4KFxuICAgICAgICAocGtnKSA9PiBwa2cucGFja2FnZV9pZCA9PT0gcGFja2FnZUlkLFxuICAgICAgKVxuICAgICAgaWYgKHBhY2thZ2VJbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZVxuXG4gICAgICBjb25zdCB1cGRhdGVkUGFja2FnZXMgPSBbLi4uc3RhdGUucGFja2FnZXNdXG4gICAgICB1cGRhdGVkUGFja2FnZXNbcGFja2FnZUluZGV4XSA9IHtcbiAgICAgICAgLi4udXBkYXRlZFBhY2thZ2VzW3BhY2thZ2VJbmRleF0sXG4gICAgICAgIC4uLnVwZGF0ZXMsXG4gICAgICB9XG4gICAgICB1cGRhdGVkUGFja2FnZSA9IHVwZGF0ZWRQYWNrYWdlc1twYWNrYWdlSW5kZXhdXG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgcGFja2FnZXM6IHVwZGF0ZWRQYWNrYWdlcyB9XG4gICAgfSlcbiAgICByZXR1cm4gdXBkYXRlZFBhY2thZ2VcbiAgfSxcbiAgZ2V0UGFja2FnZUJ5SWQ6IChwYWNrYWdlSWQ6IHN0cmluZyk6IFBhY2thZ2UgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICBjb25zdCBwa2cgPSBzdGF0ZS5wYWNrYWdlcy5maW5kKChwa2cpID0+IHBrZy5wYWNrYWdlX2lkID09PSBwYWNrYWdlSWQpXG4gICAgaWYgKCFwa2cpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucGtnLFxuICAgIH1cbiAgfSxcbiAgZ2V0UGFja2FnZVJlbGVhc2VCeUlkOiAoXG4gICAgcGFja2FnZVJlbGVhc2VJZDogc3RyaW5nLFxuICApOiBQYWNrYWdlUmVsZWFzZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgIChwcikgPT4gcHIucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZUlkLFxuICAgIClcbiAgfSxcbiAgYWRkUGFja2FnZVJlbGVhc2U6IChcbiAgICBwYWNrYWdlUmVsZWFzZTogT21pdDxcbiAgICAgIHouaW5wdXQ8dHlwZW9mIHBhY2thZ2VSZWxlYXNlU2NoZW1hPixcbiAgICAgIFwicGFja2FnZV9yZWxlYXNlX2lkXCJcbiAgICA+LFxuICApOiBQYWNrYWdlUmVsZWFzZSA9PiB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFja2FnZVJlbGVhc2VTY2hlbWEucGFyc2Uoe1xuICAgICAgcGFja2FnZV9yZWxlYXNlX2lkOiBgcGFja2FnZV9yZWxlYXNlXyR7RGF0ZS5ub3coKX1gLFxuICAgICAgLi4ucGFja2FnZVJlbGVhc2UsXG4gICAgfSlcbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgcGFja2FnZVJlbGVhc2VzOiBbLi4uc3RhdGUucGFja2FnZVJlbGVhc2VzLCBwYXJzZWRdLFxuICAgIH0pKVxuICAgIHJldHVybiBwYXJzZWRcbiAgfSxcbiAgdXBkYXRlUGFja2FnZVJlbGVhc2U6IChwYWNrYWdlUmVsZWFzZTogUGFja2FnZVJlbGVhc2UpOiB2b2lkID0+IHtcbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgcGFja2FnZVJlbGVhc2VzOiBzdGF0ZS5wYWNrYWdlUmVsZWFzZXMubWFwKChwcikgPT5cbiAgICAgICAgcHIucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWRcbiAgICAgICAgICA/IHBhY2thZ2VSZWxlYXNlXG4gICAgICAgICAgOiBwcixcbiAgICAgICksXG4gICAgfSkpXG4gIH0sXG4gIGRlbGV0ZVBhY2thZ2VGaWxlOiAocGFja2FnZUZpbGVJZDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZVxuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gc3RhdGUucGFja2FnZUZpbGVzLmZpbmRJbmRleChcbiAgICAgICAgKGZpbGUpID0+IGZpbGUucGFja2FnZV9maWxlX2lkID09PSBwYWNrYWdlRmlsZUlkLFxuICAgICAgKVxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBzdGF0ZS5wYWNrYWdlRmlsZXMuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICBkZWxldGVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfSlcbiAgICByZXR1cm4gZGVsZXRlZFxuICB9LFxuICBhZGRQYWNrYWdlRmlsZTogKFxuICAgIHBhY2thZ2VGaWxlOiBPbWl0PFBhY2thZ2VGaWxlLCBcInBhY2thZ2VfZmlsZV9pZFwiPixcbiAgKTogUGFja2FnZUZpbGUgPT4ge1xuICAgIGNvbnN0IG5ld1BhY2thZ2VGaWxlID0ge1xuICAgICAgcGFja2FnZV9maWxlX2lkOiBgcGFja2FnZV9maWxlXyR7Z2V0KCkuaWRDb3VudGVyICsgMX1gLFxuICAgICAgLi4ucGFja2FnZUZpbGUsXG4gICAgfVxuICAgIHNldCgoc3RhdGUpID0+ICh7XG4gICAgICBpZENvdW50ZXI6IHN0YXRlLmlkQ291bnRlciArIDEsXG4gICAgICBwYWNrYWdlRmlsZXM6IFsuLi5zdGF0ZS5wYWNrYWdlRmlsZXMsIG5ld1BhY2thZ2VGaWxlXSxcbiAgICB9KSlcbiAgICByZXR1cm4gbmV3UGFja2FnZUZpbGVcbiAgfSxcbiAgdXBkYXRlUGFja2FnZUZpbGU6IChcbiAgICBwYWNrYWdlRmlsZUlkOiBzdHJpbmcsXG4gICAgdXBkYXRlczogUGFydGlhbDxPbWl0PFBhY2thZ2VGaWxlLCBcInBhY2thZ2VfZmlsZV9pZFwiPj4sXG4gICk6IFBhY2thZ2VGaWxlID0+IHtcbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgcGFja2FnZUZpbGVzOiBzdGF0ZS5wYWNrYWdlRmlsZXMubWFwKChmaWxlKSA9PlxuICAgICAgICBmaWxlLnBhY2thZ2VfZmlsZV9pZCA9PT0gcGFja2FnZUZpbGVJZCA/IHsgLi4uZmlsZSwgLi4udXBkYXRlcyB9IDogZmlsZSxcbiAgICAgICksXG4gICAgfSkpXG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5wYWNrYWdlRmlsZXMuZmluZChcbiAgICAgIChmaWxlKSA9PiBmaWxlLnBhY2thZ2VfZmlsZV9pZCA9PT0gcGFja2FnZUZpbGVJZCxcbiAgICApIVxuICB9LFxuICBnZXRTdGFyQ291bnQ6IChwYWNrYWdlSWQ6IHN0cmluZyk6IG51bWJlciA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5hY2NvdW50UGFja2FnZXMuZmlsdGVyKFxuICAgICAgKGFwKSA9PiBhcC5wYWNrYWdlX2lkID09PSBwYWNrYWdlSWQgJiYgYXAuaXNfc3RhcnJlZCxcbiAgICApLmxlbmd0aFxuICB9LFxuICBnZXRQYWNrYWdlRmlsZXNCeVJlbGVhc2VJZDogKHBhY2thZ2VSZWxlYXNlSWQ6IHN0cmluZyk6IFBhY2thZ2VGaWxlW10gPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUucGFja2FnZUZpbGVzLmZpbHRlcihcbiAgICAgIChwZikgPT4gcGYucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZUlkLFxuICAgIClcbiAgfSxcbiAgLyoqXG4gICAqIFVwZGF0ZSBmc19zaGEgZm9yIGEgcGFja2FnZSByZWxlYXNlIGJhc2VkIG9uIGl0cyBmaWxlc1xuICAgKi9cbiAgdXBkYXRlUGFja2FnZVJlbGVhc2VGc1NoYTogKHBhY2thZ2VSZWxlYXNlSWQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICBjb25zdCBwYWNrYWdlRmlsZXMgPSBzdGF0ZS5wYWNrYWdlRmlsZXMuZmlsdGVyKFxuICAgICAgKHBmKSA9PiBwZi5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlSWQsXG4gICAgKVxuICAgIGNvbnN0IGZzU2hhID0gZ2VuZXJhdGVGc1NoYShwYWNrYWdlRmlsZXMpXG5cbiAgICBzZXQoKGN1cnJlbnRTdGF0ZSkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnRTdGF0ZSxcbiAgICAgIHBhY2thZ2VSZWxlYXNlczogY3VycmVudFN0YXRlLnBhY2thZ2VSZWxlYXNlcy5tYXAoKHByKSA9PlxuICAgICAgICBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlSWRcbiAgICAgICAgICA/IHsgLi4ucHIsIGZzX3NoYTogZnNTaGEgfVxuICAgICAgICAgIDogcHIsXG4gICAgICApLFxuICAgICAgcGFja2FnZXM6IGN1cnJlbnRTdGF0ZS5wYWNrYWdlcy5tYXAoKHBrZykgPT5cbiAgICAgICAgcGtnLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlSWRcbiAgICAgICAgICA/IHsgLi4ucGtnLCBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2ZzX3NoYTogZnNTaGEgfVxuICAgICAgICAgIDogcGtnLFxuICAgICAgKSxcbiAgICB9KSlcbiAgfSxcblxuICBhZGRBaVJldmlldzogKHJldmlldzogT21pdDxBaVJldmlldywgXCJhaV9yZXZpZXdfaWRcIj4pOiBBaVJldmlldyA9PiB7XG4gICAgY29uc3QgYmFzZSA9IGFpUmV2aWV3U2NoZW1hLm9taXQoeyBhaV9yZXZpZXdfaWQ6IHRydWUgfSkucGFyc2UocmV2aWV3KVxuICAgIGNvbnN0IG5ld1JldmlldyA9IHtcbiAgICAgIGFpX3Jldmlld19pZDogY3J5cHRvLnJhbmRvbVVVSUQoKSxcbiAgICAgIC4uLmJhc2UsXG4gICAgfVxuICAgIHNldCgoc3RhdGUpID0+ICh7XG4gICAgICBhaVJldmlld3M6IFsuLi5zdGF0ZS5haVJldmlld3MsIG5ld1Jldmlld10sXG4gICAgICBpZENvdW50ZXI6IHN0YXRlLmlkQ291bnRlciArIDEsXG4gICAgfSkpXG4gICAgcmV0dXJuIG5ld1Jldmlld1xuICB9LFxuICB1cGRhdGVBaVJldmlldzogKFxuICAgIGFpUmV2aWV3SWQ6IHN0cmluZyxcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPEFpUmV2aWV3PixcbiAgKTogQWlSZXZpZXcgfCB1bmRlZmluZWQgPT4ge1xuICAgIGxldCB1cGRhdGVkOiBBaVJldmlldyB8IHVuZGVmaW5lZFxuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gc3RhdGUuYWlSZXZpZXdzLmZpbmRJbmRleChcbiAgICAgICAgKGFyKSA9PiBhci5haV9yZXZpZXdfaWQgPT09IGFpUmV2aWV3SWQsXG4gICAgICApXG4gICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGVcbiAgICAgIGNvbnN0IGFpUmV2aWV3cyA9IFsuLi5zdGF0ZS5haVJldmlld3NdXG4gICAgICBhaVJldmlld3NbaW5kZXhdID0geyAuLi5haVJldmlld3NbaW5kZXhdLCAuLi51cGRhdGVzIH1cbiAgICAgIHVwZGF0ZWQgPSBhaVJldmlld3NbaW5kZXhdXG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgYWlSZXZpZXdzIH1cbiAgICB9KVxuICAgIHJldHVybiB1cGRhdGVkXG4gIH0sXG4gIGdldEFpUmV2aWV3QnlJZDogKGFpUmV2aWV3SWQ6IHN0cmluZyk6IEFpUmV2aWV3IHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLmFpUmV2aWV3cy5maW5kKChhcikgPT4gYXIuYWlfcmV2aWV3X2lkID09PSBhaVJldmlld0lkKVxuICB9LFxuICBsaXN0QWlSZXZpZXdzOiAoKTogQWlSZXZpZXdbXSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5haVJldmlld3NcbiAgfSxcbiAgYWRkRGF0YXNoZWV0OiAoeyBjaGlwX25hbWUgfTogeyBjaGlwX25hbWU6IHN0cmluZyB9KTogRGF0YXNoZWV0ID0+IHtcbiAgICBjb25zdCBuZXdEYXRhc2hlZXQgPSBkYXRhc2hlZXRTY2hlbWEucGFyc2Uoe1xuICAgICAgZGF0YXNoZWV0X2lkOiBjcnlwdG8ucmFuZG9tVVVJRCgpLFxuICAgICAgY2hpcF9uYW1lLFxuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgcGluX2luZm9ybWF0aW9uOiBudWxsLFxuICAgICAgZGF0YXNoZWV0X3BkZl91cmxzOiBudWxsLFxuICAgICAgYWlfZGVzY3JpcHRpb246IG51bGwsXG4gICAgfSlcbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgZGF0YXNoZWV0czogWy4uLnN0YXRlLmRhdGFzaGVldHMsIG5ld0RhdGFzaGVldF0sXG4gICAgfSkpXG4gICAgcmV0dXJuIG5ld0RhdGFzaGVldFxuICB9LFxuICBnZXREYXRhc2hlZXRCeUlkOiAoZGF0YXNoZWV0SWQ6IHN0cmluZyk6IERhdGFzaGVldCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5kYXRhc2hlZXRzLmZpbmQoKGQpID0+IGQuZGF0YXNoZWV0X2lkID09PSBkYXRhc2hlZXRJZClcbiAgfSxcbiAgZ2V0RGF0YXNoZWV0QnlDaGlwTmFtZTogKGNoaXBOYW1lOiBzdHJpbmcpOiBEYXRhc2hlZXQgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUuZGF0YXNoZWV0cy5maW5kKFxuICAgICAgKGQpID0+IGQuY2hpcF9uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGNoaXBOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgKVxuICB9LFxuICBsaXN0RGF0YXNoZWV0czogKHtcbiAgICBjaGlwX25hbWUsXG4gICAgaXNfcG9wdWxhcixcbiAgfTogeyBjaGlwX25hbWU/OiBzdHJpbmc7IGlzX3BvcHVsYXI/OiBib29sZWFuIH0gPSB7fSk6IERhdGFzaGVldFtdID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgaWYgKGlzX3BvcHVsYXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5kYXRhc2hlZXRzXG4gICAgfVxuXG4gICAgaWYgKGNoaXBfbmFtZSkge1xuICAgICAgcmV0dXJuIHN0YXRlLmRhdGFzaGVldHMuZmlsdGVyKFxuICAgICAgICAoZCkgPT4gZC5jaGlwX25hbWUudG9Mb3dlckNhc2UoKSA9PT0gY2hpcF9uYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlLmRhdGFzaGVldHNcbiAgfSxcbiAgdXBkYXRlRGF0YXNoZWV0OiAoXG4gICAgZGF0YXNoZWV0SWQ6IHN0cmluZyxcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPERhdGFzaGVldD4sXG4gICk6IERhdGFzaGVldCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgbGV0IHVwZGF0ZWQ6IERhdGFzaGVldCB8IHVuZGVmaW5lZFxuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gc3RhdGUuZGF0YXNoZWV0cy5maW5kSW5kZXgoXG4gICAgICAgIChkKSA9PiBkLmRhdGFzaGVldF9pZCA9PT0gZGF0YXNoZWV0SWQsXG4gICAgICApXG4gICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGVcbiAgICAgIGNvbnN0IGRhdGFzaGVldHMgPSBbLi4uc3RhdGUuZGF0YXNoZWV0c11cbiAgICAgIGRhdGFzaGVldHNbaW5kZXhdID0geyAuLi5kYXRhc2hlZXRzW2luZGV4XSwgLi4udXBkYXRlcyB9XG4gICAgICB1cGRhdGVkID0gZGF0YXNoZWV0c1tpbmRleF1cbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBkYXRhc2hlZXRzIH1cbiAgICB9KVxuICAgIHJldHVybiB1cGRhdGVkXG4gIH0sXG4gIGFkZFBhY2thZ2VCdWlsZDogKFxuICAgIHBhY2thZ2VCdWlsZDogUGFydGlhbDxcbiAgICAgIE9taXQ8ei5pbnB1dDx0eXBlb2YgcGFja2FnZUJ1aWxkU2NoZW1hPiwgXCJwYWNrYWdlX2J1aWxkX2lkXCI+XG4gICAgPiAmIHtcbiAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogc3RyaW5nXG4gICAgfSxcbiAgKTogUGFja2FnZUJ1aWxkID0+IHtcbiAgICBjb25zdCBuZXdQYWNrYWdlQnVpbGQgPSBwYWNrYWdlQnVpbGRTY2hlbWEucGFyc2Uoe1xuICAgICAgcGFja2FnZV9idWlsZF9pZDogY3J5cHRvLnJhbmRvbVVVSUQoKSxcbiAgICAgIHVzZXJfY29kZV9idWlsZF9sb2dzOiBudWxsLFxuICAgICAgaW1hZ2VfZ2VuZXJhdGlvbl9sb2dzOiBudWxsLFxuICAgICAgLi4ucGFja2FnZUJ1aWxkLFxuICAgIH0pXG4gICAgc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgIHBhY2thZ2VCdWlsZHM6IFsuLi5zdGF0ZS5wYWNrYWdlQnVpbGRzLCBuZXdQYWNrYWdlQnVpbGRdLFxuICAgICAgLy8gQXV0b21hdGljYWxseSB1cGRhdGUgdGhlIHBhY2thZ2UgcmVsZWFzZSB0byByZWZlcmVuY2UgdGhpcyBhcyB0aGUgbGF0ZXN0IGJ1aWxkXG4gICAgICBwYWNrYWdlUmVsZWFzZXM6IHN0YXRlLnBhY2thZ2VSZWxlYXNlcy5tYXAoKHJlbGVhc2UpID0+XG4gICAgICAgIHJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlQnVpbGQucGFja2FnZV9yZWxlYXNlX2lkXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnJlbGVhc2UsXG4gICAgICAgICAgICAgIGxhdGVzdF9wYWNrYWdlX2J1aWxkX2lkOiBuZXdQYWNrYWdlQnVpbGQucGFja2FnZV9idWlsZF9pZCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHJlbGVhc2UsXG4gICAgICApLFxuICAgIH0pKVxuICAgIHJldHVybiBuZXdQYWNrYWdlQnVpbGRcbiAgfSxcbiAgZ2V0UGFja2FnZUJ1aWxkQnlJZDogKHBhY2thZ2VCdWlsZElkOiBzdHJpbmcpOiBQYWNrYWdlQnVpbGQgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUucGFja2FnZUJ1aWxkcy5maW5kKFxuICAgICAgKHBiKSA9PiBwYi5wYWNrYWdlX2J1aWxkX2lkID09PSBwYWNrYWdlQnVpbGRJZCxcbiAgICApXG4gIH0sXG4gIGdldFBhY2thZ2VCdWlsZHNCeVJlbGVhc2VJZDogKHBhY2thZ2VSZWxlYXNlSWQ6IHN0cmluZyk6IFBhY2thZ2VCdWlsZFtdID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLnBhY2thZ2VCdWlsZHNcbiAgICAgIC5maWx0ZXIoKHBiKSA9PiBwYi5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlSWQpXG4gICAgICAuc29ydChcbiAgICAgICAgKGEsIGIpID0+XG4gICAgICAgICAgbmV3IERhdGUoYi5jcmVhdGVkX2F0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhLmNyZWF0ZWRfYXQpLmdldFRpbWUoKSxcbiAgICAgIClcbiAgfSxcbiAgdXBkYXRlUGFja2FnZUJ1aWxkOiAoXG4gICAgcGFja2FnZUJ1aWxkSWQ6IHN0cmluZyxcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPFBhY2thZ2VCdWlsZD4sXG4gICk6IFBhY2thZ2VCdWlsZCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgbGV0IHVwZGF0ZWQ6IFBhY2thZ2VCdWlsZCB8IHVuZGVmaW5lZFxuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gc3RhdGUucGFja2FnZUJ1aWxkcy5maW5kSW5kZXgoXG4gICAgICAgIChwYikgPT4gcGIucGFja2FnZV9idWlsZF9pZCA9PT0gcGFja2FnZUJ1aWxkSWQsXG4gICAgICApXG4gICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGVcbiAgICAgIGNvbnN0IHBhY2thZ2VCdWlsZHMgPSBbLi4uc3RhdGUucGFja2FnZUJ1aWxkc11cbiAgICAgIHBhY2thZ2VCdWlsZHNbaW5kZXhdID0geyAuLi5wYWNrYWdlQnVpbGRzW2luZGV4XSwgLi4udXBkYXRlcyB9XG4gICAgICB1cGRhdGVkID0gcGFja2FnZUJ1aWxkc1tpbmRleF1cbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBwYWNrYWdlQnVpbGRzIH1cbiAgICB9KVxuICAgIHJldHVybiB1cGRhdGVkXG4gIH0sXG4gIGFkZE9yZ2FuaXphdGlvbjogKG9yZ2FuaXphdGlvbjoge1xuICAgIG5hbWU/OiBzdHJpbmdcbiAgICBvcmdfaWQ/OiBzdHJpbmdcbiAgICBpc19wZXJzb25hbF9vcmc/OiBib29sZWFuXG4gICAgb3duZXJfYWNjb3VudF9pZDogc3RyaW5nXG4gICAgZ2l0aHViX2hhbmRsZT86IHN0cmluZ1xuICAgIG9yZ19kaXNwbGF5X25hbWU/OiBzdHJpbmdcbiAgICB0c2NpcmN1aXRfaGFuZGxlPzogc3RyaW5nXG4gICAgYXZhdGFyX3VybD86IHN0cmluZyB8IG51bGxcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5ld09yZ2FuaXphdGlvbjogT3JnYW5pemF0aW9uID0ge1xuICAgICAgb3JnX2lkOiBvcmdhbml6YXRpb24ub3JnX2lkIHx8IGBvcmdfJHtnZXQoKS5pZENvdW50ZXIgKyAxfWAsXG4gICAgICBnaXRodWJfaGFuZGxlOiBvcmdhbml6YXRpb24uZ2l0aHViX2hhbmRsZSA/PyBudWxsLFxuICAgICAgaXNfcGVyc29uYWxfb3JnOiBvcmdhbml6YXRpb24uaXNfcGVyc29uYWxfb3JnIHx8IGZhbHNlLFxuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgb3JnX2Rpc3BsYXlfbmFtZTpcbiAgICAgICAgb3JnYW5pemF0aW9uLm9yZ19kaXNwbGF5X25hbWUgPz9cbiAgICAgICAgb3JnYW5pemF0aW9uLnRzY2lyY3VpdF9oYW5kbGUgPz9cbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgYXZhdGFyX3VybDogb3JnYW5pemF0aW9uLmF2YXRhcl91cmwgPz8gbnVsbCxcbiAgICAgIHRzY2lyY3VpdF9oYW5kbGU6XG4gICAgICAgIG9yZ2FuaXphdGlvbi50c2NpcmN1aXRfaGFuZGxlIHx8IG9yZ2FuaXphdGlvbi5uYW1lIHx8IG51bGwsXG4gICAgICAuLi5vcmdhbml6YXRpb24sXG4gICAgfVxuICAgIHNldCgoc3RhdGUpID0+ICh7XG4gICAgICBpZENvdW50ZXI6IHN0YXRlLmlkQ291bnRlciArIDEsXG4gICAgICBvcmdhbml6YXRpb25zOiBbLi4uc3RhdGUub3JnYW5pemF0aW9ucywgbmV3T3JnYW5pemF0aW9uIGFzIE9yZ2FuaXphdGlvbl0sXG4gICAgICAvLyBBZGQgdGhlIGNyZWF0b3IgYXMgYSBtZW1iZXIgb2YgdGhlIG5ldyBvcmcgYnkgc2V0dGluZyB0aGVpciBwZXJzb25hbF9vcmdfaWRcbiAgICAgIGFjY291bnRzOiBzdGF0ZS5hY2NvdW50cy5tYXAoKGFjY291bnQpID0+XG4gICAgICAgIGFjY291bnQuYWNjb3VudF9pZCA9PT0gb3JnYW5pemF0aW9uLm93bmVyX2FjY291bnRfaWRcbiAgICAgICAgICA/IHsgLi4uYWNjb3VudCwgcGVyc29uYWxfb3JnX2lkOiBuZXdPcmdhbml6YXRpb24ub3JnX2lkIH1cbiAgICAgICAgICA6IGFjY291bnQsXG4gICAgICApLFxuICAgIH0pKVxuICAgIHJldHVybiBuZXdPcmdhbml6YXRpb25cbiAgfSxcbiAgZ2V0T3JnczogKFxuICAgIGZpbHRlcnM/OiB7XG4gICAgICBvd25lcl9hY2NvdW50X2lkPzogc3RyaW5nXG4gICAgICBhY2NvdW50X2lkPzogc3RyaW5nXG4gICAgICBnaXRodWJfaGFuZGxlPzogc3RyaW5nXG4gICAgICB0c2NpcmN1aXRfaGFuZGxlPzogc3RyaW5nXG4gICAgICBuYW1lPzogc3RyaW5nXG4gICAgfSxcbiAgICBhdXRoPzogeyBhY2NvdW50X2lkPzogc3RyaW5nIH0sXG4gICkgPT4ge1xuICAgIGxldCBvcmdzID0gZ2V0KCkub3JnYW5pemF0aW9uc1xuICAgIGlmIChmaWx0ZXJzPy5vd25lcl9hY2NvdW50X2lkKSB7XG4gICAgICBvcmdzID0gb3Jncy5maWx0ZXIoXG4gICAgICAgIChvcmcpID0+IG9yZy5vd25lcl9hY2NvdW50X2lkID09PSBmaWx0ZXJzLm93bmVyX2FjY291bnRfaWQsXG4gICAgICApXG4gICAgfVxuICAgIGlmIChmaWx0ZXJzPy5hY2NvdW50X2lkKSB7XG4gICAgICBvcmdzID0gb3Jncy5maWx0ZXIoKG9yZykgPT4ge1xuICAgICAgICBjb25zdCBpc01lbWJlclZpYU9yZ0FjY291bnRzID0gZ2V0KCkub3JnQWNjb3VudHMuc29tZShcbiAgICAgICAgICAob2EpID0+XG4gICAgICAgICAgICBvYS5vcmdfaWQgPT09IG9yZy5vcmdfaWQgJiYgb2EuYWNjb3VudF9pZCA9PT0gZmlsdGVycy5hY2NvdW50X2lkLFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IGlzUGVyc29uYWxPcmcgPVxuICAgICAgICAgIG9yZy5pc19wZXJzb25hbF9vcmcgJiYgb3JnLm93bmVyX2FjY291bnRfaWQgPT09IGZpbHRlcnMuYWNjb3VudF9pZFxuICAgICAgICByZXR1cm4gaXNNZW1iZXJWaWFPcmdBY2NvdW50cyB8fCBpc1BlcnNvbmFsT3JnXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoZmlsdGVycz8uZ2l0aHViX2hhbmRsZSkge1xuICAgICAgb3JncyA9IG9yZ3MuZmlsdGVyKChvcmcpID0+IHtcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IGdldCgpLmFjY291bnRzLmZpbmQoXG4gICAgICAgICAgKGFjY291bnQpID0+IGFjY291bnQuYWNjb3VudF9pZCA9PT0gb3JnLm93bmVyX2FjY291bnRfaWQsXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGFjY291bnQ/LmdpdGh1Yl91c2VybmFtZSA9PT0gZmlsdGVycy5naXRodWJfaGFuZGxlXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoZmlsdGVycz8udHNjaXJjdWl0X2hhbmRsZSkge1xuICAgICAgY29uc3QgYWNjb3VudCA9IGdldCgpLmFjY291bnRzLmZpbmQoXG4gICAgICAgIChhY2NvdW50KSA9PiBhY2NvdW50LnRzY2lyY3VpdF9oYW5kbGUgPT09IGZpbHRlcnMudHNjaXJjdWl0X2hhbmRsZSxcbiAgICAgIClcbiAgICAgIG9yZ3MgPSBvcmdzLmZpbHRlcigob3JnKSA9PiB7XG4gICAgICAgIGNvbnN0IG9yZ0FjY291bnQgPSBnZXQoKS5vcmdBY2NvdW50cy5maW5kKFxuICAgICAgICAgIChvYSkgPT5cbiAgICAgICAgICAgIG9hLm9yZ19pZCA9PT0gb3JnLm9yZ19pZCAmJiBvYS5hY2NvdW50X2lkID09PSBhY2NvdW50Py5hY2NvdW50X2lkLFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IGlzUGVyc29uYWxPcmcgPVxuICAgICAgICAgIG9yZy5pc19wZXJzb25hbF9vcmcgJiYgb3JnLm93bmVyX2FjY291bnRfaWQgPT09IGFjY291bnQ/LmFjY291bnRfaWRcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3JnQWNjb3VudCkgfHwgaXNQZXJzb25hbE9yZ1xuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKGZpbHRlcnM/Lm5hbWUpIHtcbiAgICAgIG9yZ3MgPSBvcmdzLmZpbHRlcihcbiAgICAgICAgKG9yZykgPT5cbiAgICAgICAgICBvcmcuZ2l0aHViX2hhbmRsZSA9PT0gZmlsdGVycy5uYW1lIHx8XG4gICAgICAgICAgb3JnLnRzY2lyY3VpdF9oYW5kbGUgPT09IGZpbHRlcnMubmFtZSxcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gb3Jncy5tYXAoKG9yZykgPT4ge1xuICAgICAgY29uc3QgbWVtYmVyX2NvdW50ID0gZ2V0KCkuYWNjb3VudHMuZmlsdGVyKFxuICAgICAgICAoYWNjb3VudCkgPT4gYWNjb3VudC5wZXJzb25hbF9vcmdfaWQgPT09IG9yZy5vcmdfaWQsXG4gICAgICApLmxlbmd0aFxuXG4gICAgICBjb25zdCBwYWNrYWdlX2NvdW50ID0gZ2V0KCkucGFja2FnZXMuZmlsdGVyKFxuICAgICAgICAocGtnKSA9PiBwa2cub3duZXJfb3JnX2lkID09PSBvcmcub3JnX2lkLFxuICAgICAgKS5sZW5ndGhcblxuICAgICAgY29uc3QgY2FuX21hbmFnZV9vcmcgPSBhdXRoXG4gICAgICAgID8gb3JnLm93bmVyX2FjY291bnRfaWQgPT09IGF1dGguYWNjb3VudF9pZFxuICAgICAgICA6IGZhbHNlXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9yZyxcbiAgICAgICAgbWVtYmVyX2NvdW50LFxuICAgICAgICBwYWNrYWdlX2NvdW50LFxuICAgICAgICBjYW5fbWFuYWdlX29yZyxcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuICBnZXRPcmc6IChcbiAgICBmaWx0ZXJzOiB7XG4gICAgICBvcmdfaWQ/OiBzdHJpbmdcbiAgICAgIGdpdGh1Yl9oYW5kbGU/OiBzdHJpbmdcbiAgICAgIHRzY2lyY3VpdF9oYW5kbGU/OiBzdHJpbmdcbiAgICB9LFxuICAgIGF1dGg/OiB7IGFjY291bnRfaWQ6IHN0cmluZyB9LFxuICApID0+IHtcbiAgICBsZXQgb3JncyA9IGdldCgpLm9yZ2FuaXphdGlvbnNcblxuICAgIGlmIChmaWx0ZXJzPy5vcmdfaWQpIHtcbiAgICAgIG9yZ3MgPSBvcmdzLmZpbHRlcigob3JnKSA9PiBvcmcub3JnX2lkID09PSBmaWx0ZXJzLm9yZ19pZClcbiAgICB9XG4gICAgLy8gaWYgKGZpbHRlcnM/Lm9yZ19uYW1lICYmIGF1dGg/LmFjY291bnRfaWQpIHtcbiAgICAvLyAgIGNvbnN0IGFjY291bnQgPSBnZXQoKS5hY2NvdW50cy5maW5kKHggPT4geC5hY2NvdW50X2lkID09IGF1dGg/LmFjY291bnRfaWQpXG4gICAgLy8gICBvcmdzID0gb3Jncy5maWx0ZXIoKG9yZykgPT4gb3JnLmdpdGh1Yl9oYW5kbGUgPT09IGFjY291bnQ/LmdpdGh1Yl91c2VybmFtZSlcbiAgICAvLyB9XG4gICAgaWYgKGZpbHRlcnM/LmdpdGh1Yl9oYW5kbGUpIHtcbiAgICAgIG9yZ3MgPSBvcmdzLmZpbHRlcigob3JnKSA9PiBvcmcuZ2l0aHViX2hhbmRsZSA9PT0gZmlsdGVycy5naXRodWJfaGFuZGxlKVxuICAgIH1cbiAgICBpZiAoZmlsdGVycz8udHNjaXJjdWl0X2hhbmRsZSkge1xuICAgICAgb3JncyA9IG9yZ3MuZmlsdGVyKFxuICAgICAgICAob3JnKSA9PiBvcmcudHNjaXJjdWl0X2hhbmRsZSA9PT0gZmlsdGVycy50c2NpcmN1aXRfaGFuZGxlLFxuICAgICAgKVxuICAgIH1cbiAgICBpZiAob3Jncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3Qgb3JnID0gb3Jnc1swXVxuICAgIGNvbnN0IG9yZ0FjY291bnQgPSBnZXQoKS5vcmdBY2NvdW50cy5maW5kKFxuICAgICAgKG9hKSA9PiBvYS5vcmdfaWQgPT09IG9yZy5vcmdfaWQgJiYgb2EuYWNjb3VudF9pZCA9PT0gYXV0aD8uYWNjb3VudF9pZCxcbiAgICApXG4gICAgY29uc3QgaXNPd25lciA9IG9yZy5vd25lcl9hY2NvdW50X2lkID09PSBhdXRoPy5hY2NvdW50X2lkXG5cbiAgICBjb25zdCBtZW1iZXJfY291bnQgPSBnZXQoKS5hY2NvdW50cy5maWx0ZXIoXG4gICAgICAoYWNjb3VudCkgPT4gYWNjb3VudC5wZXJzb25hbF9vcmdfaWQgPT09IG9yZy5vcmdfaWQsXG4gICAgKS5sZW5ndGhcblxuICAgIGNvbnN0IHBhY2thZ2VfY291bnQgPSBnZXQoKS5wYWNrYWdlcy5maWx0ZXIoXG4gICAgICAocGtnKSA9PiBwa2cub3duZXJfb3JnX2lkID09PSBvcmcub3JnX2lkLFxuICAgICkubGVuZ3RoXG5cbiAgICBjb25zdCBjYW5fbWFuYWdlX29yZyA9IGlzT3duZXIgPyB0cnVlIDogb3JnQWNjb3VudD8uY2FuX21hbmFnZV9vcmcgfHwgZmFsc2VcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5vcmcsXG4gICAgICBtZW1iZXJfY291bnQsXG4gICAgICBwYWNrYWdlX2NvdW50LFxuICAgICAgY2FuX21hbmFnZV9vcmcsXG4gICAgfVxuICB9LFxuICBhZGRPcmdhbml6YXRpb25BY2NvdW50OiAob3JnYW5pemF0aW9uQWNjb3VudDoge1xuICAgIG9yZ19pZDogc3RyaW5nXG4gICAgYWNjb3VudF9pZDogc3RyaW5nXG4gICAgaXNfb3duZXI/OiBib29sZWFuXG4gIH0pID0+IHtcbiAgICBjb25zdCBjYW5fbWFuYWdlX29yZyA9IG9yZ2FuaXphdGlvbkFjY291bnQuaXNfb3duZXIgfHwgZmFsc2VcbiAgICBjb25zdCBuZXdPcmdBY2NvdW50OiBPcmdBY2NvdW50ID0ge1xuICAgICAgb3JnX2FjY291bnRfaWQ6IGBvcmdfYWNjb3VudF8ke2dldCgpLmlkQ291bnRlciArIDF9YCxcbiAgICAgIG9yZ19pZDogb3JnYW5pemF0aW9uQWNjb3VudC5vcmdfaWQsXG4gICAgICBhY2NvdW50X2lkOiBvcmdhbml6YXRpb25BY2NvdW50LmFjY291bnRfaWQsXG4gICAgICBpc19vd25lcjogb3JnYW5pemF0aW9uQWNjb3VudC5pc19vd25lciB8fCBmYWxzZSxcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGNhbl9tYW5hZ2Vfb3JnLFxuICAgIH1cbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgb3JnQWNjb3VudHM6IFsuLi5zdGF0ZS5vcmdBY2NvdW50cywgbmV3T3JnQWNjb3VudF0sXG4gICAgICBpZENvdW50ZXI6IHN0YXRlLmlkQ291bnRlciArIDEsXG4gICAgfSkpXG4gICAgcmV0dXJuIG5ld09yZ0FjY291bnRcbiAgfSxcbiAgZ2V0T3JnYW5pemF0aW9uQWNjb3VudDogKGZpbHRlcnM6IHtcbiAgICBvcmdfaWQ/OiBzdHJpbmdcbiAgICBhY2NvdW50X2lkPzogc3RyaW5nXG4gIH0pOiBPcmdBY2NvdW50IHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLm9yZ0FjY291bnRzLmZpbmQoKG9yZ0FjY291bnQpID0+IHtcbiAgICAgIGlmIChmaWx0ZXJzLm9yZ19pZCAmJiBvcmdBY2NvdW50Lm9yZ19pZCAhPT0gZmlsdGVycy5vcmdfaWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAoZmlsdGVycy5hY2NvdW50X2lkICYmIG9yZ0FjY291bnQuYWNjb3VudF9pZCAhPT0gZmlsdGVycy5hY2NvdW50X2lkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9KVxuICB9LFxuICBnZXRPcmdhbml6YXRpb25BY2NvdW50czogKGZpbHRlcnM/OiB7XG4gICAgb3JnX2lkPzogc3RyaW5nXG4gICAgYWNjb3VudF9pZD86IHN0cmluZ1xuICB9KTogT3JnQWNjb3VudFtdID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLm9yZ0FjY291bnRzLmZpbHRlcigob3JnQWNjb3VudCkgPT4ge1xuICAgICAgaWYgKGZpbHRlcnM/Lm9yZ19pZCAmJiBvcmdBY2NvdW50Lm9yZ19pZCAhPT0gZmlsdGVycy5vcmdfaWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAoZmlsdGVycz8uYWNjb3VudF9pZCAmJiBvcmdBY2NvdW50LmFjY291bnRfaWQgIT09IGZpbHRlcnMuYWNjb3VudF9pZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSlcbiAgfSxcbiAgcmVtb3ZlT3JnYW5pemF0aW9uQWNjb3VudDogKGZpbHRlcnM6IHtcbiAgICBvcmdfaWQ6IHN0cmluZ1xuICAgIGFjY291bnRfaWQ6IHN0cmluZ1xuICB9KTogYm9vbGVhbiA9PiB7XG4gICAgbGV0IHJlbW92ZWQgPSBmYWxzZVxuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gc3RhdGUub3JnQWNjb3VudHMuZmluZEluZGV4KFxuICAgICAgICAob3JnQWNjb3VudCkgPT5cbiAgICAgICAgICBvcmdBY2NvdW50Lm9yZ19pZCA9PT0gZmlsdGVycy5vcmdfaWQgJiZcbiAgICAgICAgICBvcmdBY2NvdW50LmFjY291bnRfaWQgPT09IGZpbHRlcnMuYWNjb3VudF9pZCxcbiAgICAgIClcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgc3RhdGUub3JnQWNjb3VudHMuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICByZW1vdmVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfSlcbiAgICByZXR1cm4gcmVtb3ZlZFxuICB9LFxuICB1cGRhdGVPcmdhbml6YXRpb25BY2NvdW50OiAoXG4gICAgZmlsdGVyczoge1xuICAgICAgb3JnX2lkOiBzdHJpbmdcbiAgICAgIGFjY291bnRfaWQ6IHN0cmluZ1xuICAgIH0sXG4gICAgdXBkYXRlczogUGFydGlhbDxVc2VyUGVybWlzc2lvbnM+LFxuICApOiBPcmdBY2NvdW50IHwgdW5kZWZpbmVkID0+IHtcbiAgICBsZXQgdXBkYXRlZE9yZ0FjY291bnQ6IE9yZ0FjY291bnQgfCB1bmRlZmluZWRcbiAgICBzZXQoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHN0YXRlLm9yZ0FjY291bnRzLmZpbmRJbmRleChcbiAgICAgICAgKG9yZ0FjY291bnQpID0+XG4gICAgICAgICAgb3JnQWNjb3VudC5vcmdfaWQgPT09IGZpbHRlcnMub3JnX2lkICYmXG4gICAgICAgICAgb3JnQWNjb3VudC5hY2NvdW50X2lkID09PSBmaWx0ZXJzLmFjY291bnRfaWQsXG4gICAgICApXG4gICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGVcbiAgICAgIGNvbnN0IHVwZGF0ZWRPcmdBY2NvdW50cyA9IFsuLi5zdGF0ZS5vcmdBY2NvdW50c11cbiAgICAgIHVwZGF0ZWRPcmdBY2NvdW50c1tpbmRleF0gPSB7XG4gICAgICAgIC4uLnVwZGF0ZWRPcmdBY2NvdW50c1tpbmRleF0sXG4gICAgICAgIC4uLnVwZGF0ZXMsXG4gICAgICB9XG4gICAgICB1cGRhdGVkT3JnQWNjb3VudCA9IHVwZGF0ZWRPcmdBY2NvdW50c1tpbmRleF1cbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBvcmdBY2NvdW50czogdXBkYXRlZE9yZ0FjY291bnRzIH1cbiAgICB9KVxuICAgIHJldHVybiB1cGRhdGVkT3JnQWNjb3VudFxuICB9LFxuICB1cGRhdGVPcmdhbml6YXRpb246IChcbiAgICBvcmdJZDogc3RyaW5nLFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8T3JnYW5pemF0aW9uPixcbiAgKTogT3JnYW5pemF0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgICBsZXQgdXBkYXRlZE9yZzogT3JnYW5pemF0aW9uIHwgdW5kZWZpbmVkXG4gICAgc2V0KChzdGF0ZSkgPT4ge1xuICAgICAgY29uc3Qgb3JnSW5kZXggPSBzdGF0ZS5vcmdhbml6YXRpb25zLmZpbmRJbmRleChcbiAgICAgICAgKG9yZykgPT4gb3JnLm9yZ19pZCA9PT0gb3JnSWQsXG4gICAgICApXG4gICAgICBpZiAob3JnSW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGVcbiAgICAgIGNvbnN0IHVwZGF0ZWRPcmdhbml6YXRpb25zID0gWy4uLnN0YXRlLm9yZ2FuaXphdGlvbnNdXG4gICAgICB1cGRhdGVkT3JnYW5pemF0aW9uc1tvcmdJbmRleF0gPSB7XG4gICAgICAgIC4uLnVwZGF0ZWRPcmdhbml6YXRpb25zW29yZ0luZGV4XSxcbiAgICAgICAgLi4udXBkYXRlcyxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRPcmcgPSB1cGRhdGVkT3JnYW5pemF0aW9uc1tvcmdJbmRleF1cbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBvcmdhbml6YXRpb25zOiB1cGRhdGVkT3JnYW5pemF0aW9ucyB9XG4gICAgfSlcbiAgICByZXR1cm4gdXBkYXRlZE9yZ1xuICB9LFxuICBkZWxldGVPcmdhbml6YXRpb246IChvcmdJZDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZVxuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IG9yZ0luZGV4ID0gc3RhdGUub3JnYW5pemF0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgIChvcmcpID0+IG9yZy5vcmdfaWQgPT09IG9yZ0lkLFxuICAgICAgKVxuICAgICAgaWYgKG9yZ0luZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlXG5cbiAgICAgIGNvbnN0IHVwZGF0ZWRPcmdhbml6YXRpb25zID0gWy4uLnN0YXRlLm9yZ2FuaXphdGlvbnNdXG4gICAgICB1cGRhdGVkT3JnYW5pemF0aW9ucy5zcGxpY2Uob3JnSW5kZXgsIDEpXG5cbiAgICAgIGNvbnN0IHVwZGF0ZWRPcmdBY2NvdW50cyA9IHN0YXRlLm9yZ0FjY291bnRzLmZpbHRlcihcbiAgICAgICAgKG9yZ0FjY291bnQpID0+IG9yZ0FjY291bnQub3JnX2lkICE9PSBvcmdJZCxcbiAgICAgIClcblxuICAgICAgZGVsZXRlZCA9IHRydWVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBvcmdhbml6YXRpb25zOiB1cGRhdGVkT3JnYW5pemF0aW9ucyxcbiAgICAgICAgb3JnQWNjb3VudHM6IHVwZGF0ZWRPcmdBY2NvdW50cyxcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBkZWxldGVkXG4gIH0sXG4gIGRlbGV0ZUFjY291bnQ6IChhY2NvdW50SWQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIGxldCBkZWxldGVkID0gZmFsc2VcbiAgICBzZXQoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHN0YXRlLmFjY291bnRzLmZpbmRJbmRleChcbiAgICAgICAgKGFjY291bnQpID0+IGFjY291bnQuYWNjb3VudF9pZCA9PT0gYWNjb3VudElkLFxuICAgICAgKVxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBzdGF0ZS5hY2NvdW50cy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGVcbiAgICB9KVxuICAgIHJldHVybiBkZWxldGVkXG4gIH0sXG4gIGFkZE9yZ0ludml0YXRpb246IChpbnZpdGF0aW9uOiB7XG4gICAgb3JnX2lkOiBzdHJpbmdcbiAgICBpbnZpdGVlX2VtYWlsOiBzdHJpbmdcbiAgICBpbnZpdGVyX2FjY291bnRfaWQ6IHN0cmluZ1xuICAgIGludml0YXRpb25fdG9rZW46IHN0cmluZ1xuICB9KTogT3JnSW52aXRhdGlvbiA9PiB7XG4gICAgY29uc3QgZXhwaXJlc0F0ID0gbmV3IERhdGUoKVxuICAgIGV4cGlyZXNBdC5zZXREYXRlKGV4cGlyZXNBdC5nZXREYXRlKCkgKyA3KSAvLyA3IGRheXMgZnJvbSBub3dcblxuICAgIGNvbnN0IG5ld0ludml0YXRpb246IE9yZ0ludml0YXRpb24gPSB7XG4gICAgICBvcmdfaW52aXRhdGlvbl9pZDogYG9yZ19pbnZpdGF0aW9uXyR7Z2V0KCkuaWRDb3VudGVyICsgMX1gLFxuICAgICAgb3JnX2lkOiBpbnZpdGF0aW9uLm9yZ19pZCxcbiAgICAgIGludml0ZWVfZW1haWw6IGludml0YXRpb24uaW52aXRlZV9lbWFpbCxcbiAgICAgIGludml0ZXJfYWNjb3VudF9pZDogaW52aXRhdGlvbi5pbnZpdGVyX2FjY291bnRfaWQsXG4gICAgICBpbnZpdGF0aW9uX3Rva2VuOiBpbnZpdGF0aW9uLmludml0YXRpb25fdG9rZW4sXG4gICAgICBpc19saW5rX2ludml0ZTogZmFsc2UsXG4gICAgICBpc19wZW5kaW5nOiB0cnVlLFxuICAgICAgaXNfYWNjZXB0ZWQ6IGZhbHNlLFxuICAgICAgaXNfZXhwaXJlZDogZmFsc2UsXG4gICAgICBpc19yZXZva2VkOiBmYWxzZSxcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGV4cGlyZXNfYXQ6IGV4cGlyZXNBdC50b0lTT1N0cmluZygpLFxuICAgICAgYWNjZXB0ZWRfYXQ6IG51bGwsXG4gICAgICBhY2NlcHRlZF9ieV9hY2NvdW50X2lkOiBudWxsLFxuICAgIH1cbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgb3JnSW52aXRhdGlvbnM6IFsuLi5zdGF0ZS5vcmdJbnZpdGF0aW9ucywgbmV3SW52aXRhdGlvbl0sXG4gICAgICBpZENvdW50ZXI6IHN0YXRlLmlkQ291bnRlciArIDEsXG4gICAgfSkpXG4gICAgcmV0dXJuIG5ld0ludml0YXRpb25cbiAgfSxcbiAgZ2V0T3JnSW52aXRhdGlvbkJ5VG9rZW46ICh0b2tlbjogc3RyaW5nKTogT3JnSW52aXRhdGlvbiB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5vcmdJbnZpdGF0aW9ucy5maW5kKFxuICAgICAgKGludml0YXRpb24pID0+IGludml0YXRpb24uaW52aXRhdGlvbl90b2tlbiA9PT0gdG9rZW4sXG4gICAgKVxuICB9LFxuICBsaXN0T3JnSW52aXRhdGlvbnM6IChvcmdJZDogc3RyaW5nKTogT3JnSW52aXRhdGlvbltdID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLm9yZ0ludml0YXRpb25zLmZpbHRlcihcbiAgICAgIChpbnZpdGF0aW9uKSA9PiBpbnZpdGF0aW9uLm9yZ19pZCA9PT0gb3JnSWQsXG4gICAgKVxuICB9LFxuICB1cGRhdGVPcmdJbnZpdGF0aW9uOiAoXG4gICAgaW52aXRhdGlvbklkOiBzdHJpbmcsXG4gICAgdXBkYXRlczogUGFydGlhbDxPcmdJbnZpdGF0aW9uPixcbiAgKTogT3JnSW52aXRhdGlvbiB8IHVuZGVmaW5lZCA9PiB7XG4gICAgbGV0IHVwZGF0ZWRJbnZpdGF0aW9uOiBPcmdJbnZpdGF0aW9uIHwgdW5kZWZpbmVkXG4gICAgc2V0KChzdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSBzdGF0ZS5vcmdJbnZpdGF0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgIChpbnYpID0+IGludi5vcmdfaW52aXRhdGlvbl9pZCA9PT0gaW52aXRhdGlvbklkLFxuICAgICAgKVxuICAgICAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlXG4gICAgICBjb25zdCB1cGRhdGVkSW52aXRhdGlvbnMgPSBbLi4uc3RhdGUub3JnSW52aXRhdGlvbnNdXG4gICAgICB1cGRhdGVkSW52aXRhdGlvbnNbaW5kZXhdID0ge1xuICAgICAgICAuLi51cGRhdGVkSW52aXRhdGlvbnNbaW5kZXhdLFxuICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgfVxuICAgICAgdXBkYXRlZEludml0YXRpb24gPSB1cGRhdGVkSW52aXRhdGlvbnNbaW5kZXhdXG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgb3JnSW52aXRhdGlvbnM6IHVwZGF0ZWRJbnZpdGF0aW9ucyB9XG4gICAgfSlcbiAgICByZXR1cm4gdXBkYXRlZEludml0YXRpb25cbiAgfSxcbn0pKVxuIiwgImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGNvbnN0IGVycm9yU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBlcnJvcl9jb2RlOiB6LnN0cmluZygpLFxuICAgIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIH0pXG4gIC5wYXNzdGhyb3VnaCgpXG5cbmV4cG9ydCBjb25zdCBlcnJvclJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBlcnJvcjogZXJyb3JTY2hlbWEsXG59KVxuXG5leHBvcnQgY29uc3QgbG9nID0gei5hbnkoKVxuXG5leHBvcnQgY29uc3Qgc25pcHBldFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgc25pcHBldF9pZDogei5zdHJpbmcoKSxcbiAgcGFja2FnZV9yZWxlYXNlX2lkOiB6LnN0cmluZygpLFxuICBuYW1lOiB6LnN0cmluZygpLFxuICB1bnNjb3BlZF9uYW1lOiB6LnN0cmluZygpLFxuICBvd25lcl9uYW1lOiB6LnN0cmluZygpLFxuICBpc19zdGFycmVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgZHRzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvbXBpbGVkX2pzOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgY2lyY3VpdF9qc29uOiB6LmFycmF5KHoucmVjb3JkKHouYW55KCkpKS5vcHRpb25hbCgpLm51bGxhYmxlKCksXG4gIG1hbnVhbF9lZGl0c19qc29uX2NvbnRlbnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICBjcmVhdGVkX2F0OiB6LnN0cmluZygpLFxuICB1cGRhdGVkX2F0OiB6LnN0cmluZygpLFxuICBzdGFycmVkX2F0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHNuaXBwZXRfdHlwZTogei5lbnVtKFtcImJvYXJkXCIsIFwicGFja2FnZVwiLCBcIm1vZGVsXCIsIFwiZm9vdHByaW50XCJdKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdmVyc2lvbjogei5zdHJpbmcoKS5kZWZhdWx0KFwiMC4wLjFcIiksXG4gIHN0YXJfY291bnQ6IHoubnVtYmVyKCkuZGVmYXVsdCgwKSxcbiAgaXNfcHJpdmF0ZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGlzX3B1YmxpYzogei5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbiAgaXNfdW5saXN0ZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICB0YWdzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG59KVxuZXhwb3J0IHR5cGUgU25pcHBldCA9IHouaW5mZXI8dHlwZW9mIHNuaXBwZXRTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBzZXNzaW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBhY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICBleHBpcmVzX2F0OiB6LnN0cmluZygpLFxuICBpc19jbGlfc2Vzc2lvbjogei5ib29sZWFuKCksXG59KVxuZXhwb3J0IHR5cGUgU2Vzc2lvbiA9IHouaW5mZXI8dHlwZW9mIHNlc3Npb25TY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBsb2dpblBhZ2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGxvZ2luX3BhZ2VfaWQ6IHouc3RyaW5nKCksXG4gIGxvZ2luX3BhZ2VfYXV0aF90b2tlbjogei5zdHJpbmcoKSxcbiAgd2FzX2xvZ2luX3N1Y2Nlc3NmdWw6IHouYm9vbGVhbigpLFxuICBoYXNfYmVlbl91c2VkX3RvX2NyZWF0ZV9zZXNzaW9uOiB6LmJvb2xlYW4oKSxcbiAgY3JlYXRlZF9hdDogei5zdHJpbmcoKSxcbiAgZXhwaXJlc19hdDogei5zdHJpbmcoKSxcbn0pXG5leHBvcnQgdHlwZSBMb2dpblBhZ2UgPSB6LmluZmVyPHR5cGVvZiBsb2dpblBhZ2VTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBzaGlwcGluZ0luZm9TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGZpcnN0TmFtZTogei5zdHJpbmcoKSxcbiAgbGFzdE5hbWU6IHouc3RyaW5nKCksXG4gIGNvbXBhbnlOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGFkZHJlc3M6IHouc3RyaW5nKCksXG4gIGFwYXJ0bWVudDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjaXR5OiB6LnN0cmluZygpLFxuICBzdGF0ZTogei5zdHJpbmcoKSxcbiAgemlwQ29kZTogei5zdHJpbmcoKSxcbiAgY291bnRyeTogei5zdHJpbmcoKSxcbiAgcGhvbmU6IHouc3RyaW5nKCksXG59KVxuZXhwb3J0IGNvbnN0IGFjY291bnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGFjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gIGdpdGh1Yl91c2VybmFtZTogei5zdHJpbmcoKSxcbiAgdHNjaXJjdWl0X2hhbmRsZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBzaGlwcGluZ0luZm86IHNoaXBwaW5nSW5mb1NjaGVtYS5vcHRpb25hbCgpLFxuICBwZXJzb25hbF9vcmdfaWQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgaXNfdHNjaXJjdWl0X3N0YWZmOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgZW1haWw6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBjcmVhdGVkX2F0OiB6LmRhdGUoKSxcbn0pXG5leHBvcnQgdHlwZSBBY2NvdW50ID0gei5pbmZlcjx0eXBlb2YgYWNjb3VudFNjaGVtYT5cblxuZXhwb3J0IGNvbnN0IHB1YmxpY0FjY291bnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGFjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gIGdpdGh1Yl91c2VybmFtZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICB0c2NpcmN1aXRfaGFuZGxlOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHBlcnNvbmFsX29yZ19pZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBjcmVhdGVkX2F0OiB6LmRhdGUoKSxcbn0pXG5cbmV4cG9ydCB0eXBlIFB1YmxpY0FjY291bnQgPSB6LmluZmVyPHR5cGVvZiBwdWJsaWNBY2NvdW50U2NoZW1hPlxuXG5leHBvcnQgY29uc3Qgb3JkZXJTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG9yZGVyX2lkOiB6LnN0cmluZygpLFxuICBhY2NvdW50X2lkOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGlzX3J1bm5pbmc6IHouYm9vbGVhbigpLFxuICBpc19zdGFydGVkOiB6LmJvb2xlYW4oKSxcbiAgaXNfZmluaXNoZWQ6IHouYm9vbGVhbigpLFxuICBlcnJvcjogZXJyb3JTY2hlbWEubnVsbGFibGUoKSxcbiAgaGFzX2Vycm9yOiB6LmJvb2xlYW4oKSxcbiAgY3JlYXRlZF9hdDogei5zdHJpbmcoKSxcbiAgc3RhcnRlZF9hdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBjb21wbGV0ZWRfYXQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgY2lyY3VpdF9qc29uOiB6LmFueSgpLFxufSlcbmV4cG9ydCB0eXBlIE9yZGVyID0gei5pbmZlcjx0eXBlb2Ygb3JkZXJTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBvcmRlckZpbGVTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG9yZGVyX2ZpbGVfaWQ6IHouc3RyaW5nKCksXG4gIG9yZGVyX2lkOiB6LnN0cmluZygpLFxuICBpc19nZXJiZXJzX3ppcDogei5ib29sZWFuKCksXG4gIGNvbnRlbnRfdHlwZTogei5zdHJpbmcoKSxcbiAgZm9yX3Byb3ZpZGVyOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHVwbG9hZGVkX2F0OiB6LnN0cmluZygpLFxuICBjb250ZW50X3RleHQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgY29udGVudF9ieXRlczogei5pbnN0YW5jZW9mKFVpbnQ4QXJyYXkpLm51bGxhYmxlKCksXG59KVxuZXhwb3J0IHR5cGUgT3JkZXJGaWxlID0gei5pbmZlcjx0eXBlb2Ygb3JkZXJGaWxlU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgYnVnUmVwb3J0U2NoZW1hID0gei5vYmplY3Qoe1xuICBidWdfcmVwb3J0X2lkOiB6LnN0cmluZygpLnV1aWQoKSxcbiAgcmVwb3J0ZXJfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgdGV4dDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBpc19hdXRvX2RlbGV0ZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBkZWxldGVfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLFxuICBjcmVhdGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCksXG4gIGZpbGVfY291bnQ6IHoubnVtYmVyKCkuaW50KCksXG59KVxuZXhwb3J0IHR5cGUgQnVnUmVwb3J0ID0gei5pbmZlcjx0eXBlb2YgYnVnUmVwb3J0U2NoZW1hPlxuXG5leHBvcnQgY29uc3QgYnVnUmVwb3J0RmlsZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgYnVnX3JlcG9ydF9maWxlX2lkOiB6LnN0cmluZygpLnV1aWQoKSxcbiAgYnVnX3JlcG9ydF9pZDogei5zdHJpbmcoKS51dWlkKCksXG4gIGZpbGVfcGF0aDogei5zdHJpbmcoKSxcbiAgY29udGVudF9taW1ldHlwZTogei5zdHJpbmcoKSxcbiAgaXNfdGV4dDogei5ib29sZWFuKCksXG4gIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKSxcbiAgY29udGVudF90ZXh0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGNvbnRlbnRfYnl0ZXM6IHouaW5zdGFuY2VvZihVaW50OEFycmF5KS5udWxsYWJsZSgpLFxufSlcbmV4cG9ydCBjb25zdCBidWdSZXBvcnRGaWxlUmVzcG9uc2VTY2hlbWEgPSBidWdSZXBvcnRGaWxlU2NoZW1hLm9taXQoe1xuICBjb250ZW50X3RleHQ6IHRydWUsXG4gIGNvbnRlbnRfYnl0ZXM6IHRydWUsXG59KVxuZXhwb3J0IHR5cGUgQnVnUmVwb3J0RmlsZSA9IHouaW5mZXI8dHlwZW9mIGJ1Z1JlcG9ydEZpbGVTY2hlbWE+XG5cbmNvbnN0IHNoaXBwaW5nT3B0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICBjYXJyaWVyOiB6LnN0cmluZygpLFxuICBzZXJ2aWNlOiB6LnN0cmluZygpLFxuICBjb3N0OiB6Lm51bWJlcigpLFxufSlcbmV4cG9ydCB0eXBlIFNoaXBwaW5nT3B0aW9uID0gei5pbmZlcjx0eXBlb2Ygc2hpcHBpbmdPcHRpb25TY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBxdW90ZWRDb21wb25lbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG1hbnVmYWN0dXJlcl9wYXJ0X251bWJlcjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBzdXBwbGllcl9wYXJ0X251bWJlcjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5kZWZhdWx0KDApLFxuICB1bml0X3ByaWNlOiB6Lm51bWJlcigpLmRlZmF1bHQoMCksXG4gIHRvdGFsX3ByaWNlOiB6Lm51bWJlcigpLmRlZmF1bHQoMCksXG4gIGF2YWlsYWJsZTogei5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbn0pXG5leHBvcnQgdHlwZSBRdW90ZWRDb21wb25lbnQgPSB6LmluZmVyPHR5cGVvZiBxdW90ZWRDb21wb25lbnRTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBvcmRlclF1b3RlU2NoZW1hID0gei5vYmplY3Qoe1xuICBvcmRlcl9xdW90ZV9pZDogei5zdHJpbmcoKSxcbiAgYWNjb3VudF9pZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgaXNfY29tcGxldGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgaXNfcHJvY2Vzc2luZzogei5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbiAgdmVuZG9yX25hbWU6IHouc3RyaW5nKCksXG4gIGVycm9yOiBlcnJvclNjaGVtYS5udWxsYWJsZSgpLFxuICBoYXNfZXJyb3I6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBjcmVhdGVkX2F0OiB6LnN0cmluZygpLFxuICB1cGRhdGVkX2F0OiB6LnN0cmluZygpLFxuICBjb21wbGV0ZWRfYXQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgcXVvdGVkX2NvbXBvbmVudHM6IHouYXJyYXkocXVvdGVkQ29tcG9uZW50U2NoZW1hKS5udWxsYWJsZSgpLFxuICBiYXJlX3BjYl9jb3N0OiB6Lm51bWJlcigpLmRlZmF1bHQoMCksXG4gIHNoaXBwaW5nX29wdGlvbnM6IHouYXJyYXkoc2hpcHBpbmdPcHRpb25TY2hlbWEpLFxuICB0b3RhbF9jb3N0X3dpdGhvdXRfc2hpcHBpbmc6IHoubnVtYmVyKCkuZGVmYXVsdCgwKSxcbn0pXG5leHBvcnQgdHlwZSBPcmRlclF1b3RlID0gei5pbmZlcjx0eXBlb2Ygb3JkZXJRdW90ZVNjaGVtYT5cblxuZXhwb3J0IGNvbnN0IGFpUmV2aWV3U2NoZW1hID0gei5vYmplY3Qoe1xuICBhaV9yZXZpZXdfaWQ6IHouc3RyaW5nKCkudXVpZCgpLFxuICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgYWlfcmV2aWV3X3RleHQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgc3RhcnRfcHJvY2Vzc2luZ19hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm51bGxhYmxlKCksXG4gIGZpbmlzaGVkX3Byb2Nlc3NpbmdfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLFxuICBwcm9jZXNzaW5nX2Vycm9yOiB6LmFueSgpLm51bGxhYmxlKCksXG4gIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKSxcbiAgZGlzcGxheV9zdGF0dXM6IHouZW51bShbXCJwZW5kaW5nXCIsIFwiY29tcGxldGVkXCIsIFwiZmFpbGVkXCJdKSxcbn0pXG5leHBvcnQgdHlwZSBBaVJldmlldyA9IHouaW5mZXI8dHlwZW9mIGFpUmV2aWV3U2NoZW1hPlxuXG5leHBvcnQgY29uc3QgZGF0YXNoZWV0UGluSW5mb3JtYXRpb25TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHBpbl9udW1iZXI6IHouc3RyaW5nKCksXG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLFxuICBjYXBhYmlsaXRpZXM6IHouYXJyYXkoei5zdHJpbmcoKSksXG59KVxuXG5leHBvcnQgY29uc3QgZGF0YXNoZWV0U2NoZW1hID0gei5vYmplY3Qoe1xuICBkYXRhc2hlZXRfaWQ6IHouc3RyaW5nKCksXG4gIGNoaXBfbmFtZTogei5zdHJpbmcoKSxcbiAgY3JlYXRlZF9hdDogei5zdHJpbmcoKSxcbiAgcGluX2luZm9ybWF0aW9uOiBkYXRhc2hlZXRQaW5JbmZvcm1hdGlvblNjaGVtYS5hcnJheSgpLm51bGxhYmxlKCksXG4gIGRhdGFzaGVldF9wZGZfdXJsczogei5hcnJheSh6LnN0cmluZygpKS5udWxsYWJsZSgpLFxuICBhaV9kZXNjcmlwdGlvbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxufSlcbmV4cG9ydCB0eXBlIERhdGFzaGVldCA9IHouaW5mZXI8dHlwZW9mIGRhdGFzaGVldFNjaGVtYT5cblxuZXhwb3J0IGNvbnN0IGdpdGh1Ykluc3RhbGxhdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZ2l0aHViX2luc3RhbGxhdGlvbl9pZDogei5zdHJpbmcoKSxcbiAgYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgaW5zdGFsbGF0aW9uX2lkOiB6LnN0cmluZygpLCAvLyBHaXRIdWIgQXBwIGluc3RhbGxhdGlvbiBJRFxuICBnaXRodWJfdXNlcm5hbWU6IHouc3RyaW5nKCksXG4gIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKSxcbiAgdXBkYXRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLFxuICBpc19hY3RpdmU6IHouYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG4gIGFjY2Vzc190b2tlbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksIC8vIEZvciBzdG9yaW5nIEdpdEh1YiBhY2Nlc3MgdG9rZW5cbiAgYWNjZXNzX3Rva2VuX2V4cGlyZXNfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG59KVxuZXhwb3J0IHR5cGUgR2l0aHViSW5zdGFsbGF0aW9uID0gei5pbmZlcjx0eXBlb2YgZ2l0aHViSW5zdGFsbGF0aW9uU2NoZW1hPlxuXG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBzY2hlbWEgYWZ0ZXIgbWlncmF0aW9uIHRvIGFjY291bnRQYWNrYWdlcyBpcyBjb21wbGV0ZVxuZXhwb3J0IGNvbnN0IGFjY291bnRTbmlwcGV0U2NoZW1hID0gei5vYmplY3Qoe1xuICBhY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICBzbmlwcGV0X2lkOiB6LnN0cmluZygpLFxuICBoYXNfc3RhcnJlZDogei5ib29sZWFuKCksXG4gIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCksXG4gIHVwZGF0ZWRfYXQ6IHouc3RyaW5nKCksXG59KVxuZXhwb3J0IHR5cGUgQWNjb3VudFNuaXBwZXQgPSB6LmluZmVyPHR5cGVvZiBhY2NvdW50U25pcHBldFNjaGVtYT5cblxuZXhwb3J0IGNvbnN0IGFjY291bnRQYWNrYWdlU2NoZW1hID0gei5vYmplY3Qoe1xuICBhY2NvdW50X3BhY2thZ2VfaWQ6IHouc3RyaW5nKCksXG4gIGFjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gIHBhY2thZ2VfaWQ6IHouc3RyaW5nKCksXG4gIGlzX3N0YXJyZWQ6IHouYm9vbGVhbigpLFxuICBjcmVhdGVkX2F0OiB6LnN0cmluZygpLFxuICB1cGRhdGVkX2F0OiB6LnN0cmluZygpLFxufSlcbmV4cG9ydCB0eXBlIEFjY291bnRQYWNrYWdlID0gei5pbmZlcjx0eXBlb2YgYWNjb3VudFBhY2thZ2VTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBwYWNrYWdlUmVsZWFzZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgcGFja2FnZV9yZWxlYXNlX2lkOiB6LnN0cmluZygpLFxuICBwYWNrYWdlX2lkOiB6LnN0cmluZygpLFxuICB2ZXJzaW9uOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGlzX2xvY2tlZDogei5ib29sZWFuKCksXG4gIGlzX2xhdGVzdDogei5ib29sZWFuKCksXG4gIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKSxcbiAgY29tbWl0X3NoYTogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGxpY2Vuc2U6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBjaXJjdWl0X2pzb25fYnVpbGRfZXJyb3I6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBjaXJjdWl0X2pzb25fYnVpbGRfZXJyb3JfbGFzdF91cGRhdGVkX2F0OiB6XG4gICAgLnN0cmluZygpXG4gICAgLmRhdGV0aW1lKClcbiAgICAubnVsbGFibGUoKVxuICAgIC5vcHRpb25hbCgpLFxuICBoYXNfdHJhbnNwaWxlZDogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIHRyYW5zcGlsYXRpb25fZXJyb3I6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBmc19zaGE6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICAvLyBCdWlsZCBTdGF0dXMgYW5kIERpc3BsYXlcbiAgZGlzcGxheV9zdGF0dXM6IHpcbiAgICAuZW51bShbXCJwZW5kaW5nXCIsIFwiYnVpbGRpbmdcIiwgXCJjb21wbGV0ZVwiLCBcImVycm9yXCJdKVxuICAgIC5kZWZhdWx0KFwicGVuZGluZ1wiKSxcbiAgdG90YWxfYnVpbGRfZHVyYXRpb25fbXM6IHoubnVtYmVyKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuXG4gIC8vIFRyYW5zcGlsYXRpb24gUHJvY2Vzc1xuICB0cmFuc3BpbGF0aW9uX2Rpc3BsYXlfc3RhdHVzOiB6XG4gICAgLmVudW0oW1wicGVuZGluZ1wiLCBcImJ1aWxkaW5nXCIsIFwiY29tcGxldGVcIiwgXCJlcnJvclwiXSlcbiAgICAuZGVmYXVsdChcInBlbmRpbmdcIiksXG4gIHRyYW5zcGlsYXRpb25faW5fcHJvZ3Jlc3M6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICB0cmFuc3BpbGF0aW9uX3N0YXJ0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIHRyYW5zcGlsYXRpb25fY29tcGxldGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICB0cmFuc3BpbGF0aW9uX2xvZ3M6IHouYXJyYXkoei5hbnkoKSkuZGVmYXVsdChbXSksXG4gIHRyYW5zcGlsYXRpb25faXNfc3RhbGU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuXG4gIC8vIFVzZXIgQ29kZSBKb2IgUHJvY2Vzc1xuICBleHRfdXNlcl9jb2RlX2pvYl9pZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLmRlZmF1bHQobnVsbCksXG4gIHVzZXJfY29kZV9zdGFydGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICB1c2VyX2NvZGVfY29tcGxldGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICB1c2VyX2NvZGVfYnVpbGRfbG9nczogei5hcnJheSh6LmFueSgpKS5udWxsYWJsZSgpLmRlZmF1bHQobnVsbCksXG4gIHVzZXJfY29kZV9lcnJvcjogZXJyb3JTY2hlbWEubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICB1c2VyX2NvZGVfbG9nX3N0cmVhbV91cmw6IHouc3RyaW5nKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuXG4gIC8vIENpcmN1aXQgSlNPTiBCdWlsZCBQcm9jZXNzXG4gIGNpcmN1aXRfanNvbl9idWlsZF9kaXNwbGF5X3N0YXR1czogelxuICAgIC5lbnVtKFtcInBlbmRpbmdcIiwgXCJidWlsZGluZ1wiLCBcImNvbXBsZXRlXCIsIFwiZXJyb3JcIl0pXG4gICAgLmRlZmF1bHQoXCJwZW5kaW5nXCIpLFxuICBjaXJjdWl0X2pzb25fYnVpbGRfaW5fcHJvZ3Jlc3M6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBjaXJjdWl0X2pzb25fYnVpbGRfc3RhcnRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgY2lyY3VpdF9qc29uX2J1aWxkX2NvbXBsZXRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgY2lyY3VpdF9qc29uX2J1aWxkX2xvZ3M6IHouYXJyYXkoei5hbnkoKSkuZGVmYXVsdChbXSksXG4gIGNpcmN1aXRfanNvbl9idWlsZF9pc19zdGFsZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG5cbiAgLy8gSW1hZ2UgR2VuZXJhdGlvbiBQcm9jZXNzXG4gIGltYWdlX2dlbmVyYXRpb25fZGlzcGxheV9zdGF0dXM6IHpcbiAgICAuZW51bShbXCJwZW5kaW5nXCIsIFwiYnVpbGRpbmdcIiwgXCJjb21wbGV0ZVwiLCBcImVycm9yXCJdKVxuICAgIC5kZWZhdWx0KFwicGVuZGluZ1wiKSxcbiAgaW1hZ2VfZ2VuZXJhdGlvbl9pbl9wcm9ncmVzczogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGltYWdlX2dlbmVyYXRpb25fc3RhcnRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgaW1hZ2VfZ2VuZXJhdGlvbl9jb21wbGV0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGltYWdlX2dlbmVyYXRpb25fbG9nczogei5hcnJheSh6LmFueSgpKS5udWxsYWJsZSgpLmRlZmF1bHQobnVsbCksXG4gIGltYWdlX2dlbmVyYXRpb25faXNfc3RhbGU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpbWFnZV9nZW5lcmF0aW9uX2Vycm9yOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgaW1hZ2VfZ2VuZXJhdGlvbl9lcnJvcl9sYXN0X3VwZGF0ZWRfYXQ6IHpcbiAgICAuc3RyaW5nKClcbiAgICAuZGF0ZXRpbWUoKVxuICAgIC5udWxsYWJsZSgpXG4gICAgLm9wdGlvbmFsKCksXG5cbiAgLy8gQUkgUmV2aWV3XG4gIGFpX3Jldmlld190ZXh0OiB6LnN0cmluZygpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKS5vcHRpb25hbCgpLFxuICBhaV9yZXZpZXdfc3RhcnRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgYWlfcmV2aWV3X2NvbXBsZXRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgYWlfcmV2aWV3X2Vycm9yOiB6LmFueSgpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgYWlfcmV2aWV3X2xvZ3M6IHouYXJyYXkoei5hbnkoKSkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICBhaV9yZXZpZXdfcmVxdWVzdGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcblxuICAvLyBQcmV2aWV3XG4gIGlzX3ByX3ByZXZpZXc6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBnaXRodWJfcHJfbnVtYmVyOiB6Lm51bWJlcigpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcblxuICAvLyBMYXRlc3QgQnVpbGQgUmVmZXJlbmNlXG4gIGxhdGVzdF9wYWNrYWdlX2J1aWxkX2lkOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgYnJhbmNoX25hbWU6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBjb21taXRfbWVzc2FnZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGNvbW1pdF9hdXRob3I6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuXG4gIC8vIFByZXZpZXcgaW1hZ2VzIHVybFxuICBwY2JfcHJldmlld19pbWFnZV91cmw6IHouc3RyaW5nKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICBzY2hfcHJldmlld19pbWFnZV91cmw6IHouc3RyaW5nKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICBjYWRfcHJldmlld19pbWFnZV91cmw6IHouc3RyaW5nKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxufSlcbmV4cG9ydCB0eXBlIFBhY2thZ2VSZWxlYXNlID0gei5pbmZlcjx0eXBlb2YgcGFja2FnZVJlbGVhc2VTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBwYWNrYWdlRmlsZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgcGFja2FnZV9maWxlX2lkOiB6LnN0cmluZygpLFxuICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHouc3RyaW5nKCksXG4gIGZpbGVfcGF0aDogei5zdHJpbmcoKSxcbiAgY29udGVudF90ZXh0OiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgY3JlYXRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLFxuICBjb250ZW50X21pbWV0eXBlOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgaXNfcmVsZWFzZV90YXJiYWxsOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBucG1fcGFja19vdXRwdXQ6IHouYW55KCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxufSlcbmV4cG9ydCB0eXBlIFBhY2thZ2VGaWxlID0gei5pbmZlcjx0eXBlb2YgcGFja2FnZUZpbGVTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBwYWNrYWdlU2NoZW1hID0gei5vYmplY3Qoe1xuICBwYWNrYWdlX2lkOiB6LnN0cmluZygpLFxuICBjcmVhdG9yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gIG93bmVyX29yZ19pZDogei5zdHJpbmcoKSxcbiAgb3duZXJfZ2l0aHViX3VzZXJuYW1lOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGdpdGh1Yl9yZXBvX2Z1bGxfbmFtZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBuYW1lOiB6LnN0cmluZygpLFxuICB1bnNjb3BlZF9uYW1lOiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBjcmVhdGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCksXG4gIHVwZGF0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKSxcbiAgaXNfc25pcHBldDogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGlzX2JvYXJkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgaXNfcGFja2FnZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGlzX21vZGVsOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgaXNfZm9vdHByaW50OiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgaXNfcHJpdmF0ZTogei5ib29sZWFuKCkubnVsbGFibGUoKS5kZWZhdWx0KGZhbHNlKSxcbiAgaXNfcHVibGljOiB6LmJvb2xlYW4oKS5udWxsYWJsZSgpLmRlZmF1bHQodHJ1ZSksXG4gIGlzX3VubGlzdGVkOiB6LmJvb2xlYW4oKS5udWxsYWJsZSgpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19zb3VyY2VfZnJvbV9naXRodWI6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBzbmlwcGV0X3R5cGU6IHouZW51bShbXCJib2FyZFwiLCBcInBhY2thZ2VcIiwgXCJtb2RlbFwiLCBcImZvb3RwcmludFwiXSkub3B0aW9uYWwoKSxcbiAgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBsYXRlc3RfdmVyc2lvbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBsaWNlbnNlOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHdlYnNpdGU6IHouc3RyaW5nKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICBzdGFyX2NvdW50OiB6Lm51bWJlcigpLmRlZmF1bHQoMCksXG4gIGFpX2Rlc2NyaXB0aW9uOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGxhdGVzdF9saWNlbnNlOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgYWlfdXNhZ2VfaW5zdHJ1Y3Rpb25zOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfZnNfc2hhOiB6LnN0cmluZygpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgZGVmYXVsdF92aWV3OiB6XG4gICAgLmVudW0oW1wiZmlsZXNcIiwgXCIzZFwiLCBcInBjYlwiLCBcInNjaGVtYXRpY1wiXSlcbiAgICAuZGVmYXVsdChcImZpbGVzXCIpXG4gICAgLm9wdGlvbmFsKCksXG4gIGFsbG93X3ByX3ByZXZpZXdzOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKS5vcHRpb25hbCgpLFxuICBpc19zdGFycmVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKS5vcHRpb25hbCgpLFxuICBsYXRlc3RfcGNiX3ByZXZpZXdfaW1hZ2VfdXJsOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgbGF0ZXN0X3NjaF9wcmV2aWV3X2ltYWdlX3VybDogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGxhdGVzdF9jYWRfcHJldmlld19pbWFnZV91cmw6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxufSlcbmV4cG9ydCB0eXBlIFBhY2thZ2UgPSB6LmluZmVyPHR5cGVvZiBwYWNrYWdlU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgamxjcGNiT3JkZXJTdGF0ZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgamxjcGNiX29yZGVyX3N0YXRlX2lkOiB6LnN0cmluZygpLFxuICBvcmRlcl9pZDogei5zdHJpbmcoKSxcbiAgYXJlX2dlcmJlcnNfdXBsb2FkZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19nZXJiZXJfYW5hbHl6ZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBhcmVfaW5pdGlhbF9jb3N0c19jYWxjdWxhdGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgaXNfcGNiX2FkZGVkX3RvX2NhcnQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19ib21fdXBsb2FkZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19wbnBfdXBsb2FkZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19ib21fcG5wX2FuYWx5emVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgaXNfYm9tX3BhcnNpbmdfY29tcGxldGU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBhcmVfY29tcG9uZW50c19hdmFpbGFibGU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19wYXRjaF9tYXBfZ2VuZXJhdGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgaXNfanNvbl9tZXJnZV9maWxlX2NyZWF0ZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19kZm1fcmVzdWx0X2dlbmVyYXRlZDogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGFyZV9maWxlc19kb3dubG9hZGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgYXJlX3Byb2R1Y3RfY2F0ZWdvcmllc19mZXRjaGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgYXJlX2ZpbmFsX2Nvc3RzX2NhbGN1bGF0ZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19qc29uX21lcmdlX2ZpbGVfdXBkYXRlZDogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGlzX2FkZGVkX3RvX2NhcnQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICB1cGxvYWRlZF9nZXJiZXJfbWV0YWRhdGE6IHouYW55KCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICBnZXJiZXJfYW5hbHlzaXM6IHouYW55KCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICBjcmVhdGVkX2F0OiB6LnN0cmluZygpLFxuICBhcmVfZ2VyYmVyc19nZW5lcmF0ZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBjdXJyZW50X3N0ZXA6IHouc3RyaW5nKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxufSlcbmV4cG9ydCB0eXBlIEpsY3BjYk9yZGVyU3RhdGUgPSB6LmluZmVyPHR5cGVvZiBqbGNwY2JPcmRlclN0YXRlU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgamxjcGNiT3JkZXJTdGVwUnVuU2NoZW1hID0gei5vYmplY3Qoe1xuICBqbGNwY2Jfb3JkZXJfc3RlcF9ydW5faWQ6IHouc3RyaW5nKCksXG4gIGlzX3J1bm5pbmc6IHouYm9vbGVhbigpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgc3RlcF9mdW5jdGlvbl9uYW1lOiB6LnN0cmluZygpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgamxjcGNiX29yZGVyX3N0YXRlX2lkOiB6LnN0cmluZygpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgZXJyb3JfbWVzc2FnZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLmRlZmF1bHQobnVsbCksXG4gIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCksXG59KVxuZXhwb3J0IHR5cGUgSmxjcGNiT3JkZXJTdGVwUnVuID0gei5pbmZlcjx0eXBlb2YgamxjcGNiT3JkZXJTdGVwUnVuU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgcGFja2FnZUJ1aWxkU2NoZW1hID0gei5vYmplY3Qoe1xuICBwYWNrYWdlX2J1aWxkX2lkOiB6LnN0cmluZygpLnV1aWQoKSxcbiAgcGFja2FnZV9yZWxlYXNlX2lkOiB6LnN0cmluZygpLFxuICBjcmVhdGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCksXG4gIHRyYW5zcGlsYXRpb25faW5fcHJvZ3Jlc3M6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICB0cmFuc3BpbGF0aW9uX3N0YXJ0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIHRyYW5zcGlsYXRpb25fY29tcGxldGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICB0cmFuc3BpbGF0aW9uX2xvZ3M6IHouYXJyYXkobG9nKS5udWxsYWJsZSgpLFxuICB0cmFuc3BpbGF0aW9uX2Vycm9yOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgY2lyY3VpdF9qc29uX2J1aWxkX2luX3Byb2dyZXNzOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgY2lyY3VpdF9qc29uX2J1aWxkX3N0YXJ0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGNpcmN1aXRfanNvbl9idWlsZF9jb21wbGV0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGNpcmN1aXRfanNvbl9idWlsZF9sb2dzOiB6LmFycmF5KGxvZykubnVsbGFibGUoKSxcbiAgY2lyY3VpdF9qc29uX2J1aWxkX2Vycm9yOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgaW1hZ2VfZ2VuZXJhdGlvbl9pbl9wcm9ncmVzczogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGltYWdlX2dlbmVyYXRpb25fc3RhcnRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgaW1hZ2VfZ2VuZXJhdGlvbl9jb21wbGV0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGltYWdlX2dlbmVyYXRpb25fbG9nczogei5hcnJheShsb2cpLm51bGxhYmxlKCksXG4gIGltYWdlX2dlbmVyYXRpb25fZXJyb3I6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBidWlsZF9pbl9wcm9ncmVzczogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGJ1aWxkX3N0YXJ0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGJ1aWxkX2NvbXBsZXRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgYnVpbGRfZXJyb3I6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBidWlsZF9lcnJvcl9sYXN0X3VwZGF0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKSxcbiAgcHJldmlld191cmw6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBidWlsZF9sb2dzOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgdXNlcl9jb2RlX3N0YXJ0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIHVzZXJfY29kZV9jb21wbGV0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIHVzZXJfY29kZV9lcnJvcjogei5hbnkoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIHVzZXJfY29kZV9idWlsZF9sb2dzOiB6LmFycmF5KGxvZykubnVsbGFibGUoKSxcbiAgdXNlcl9jb2RlX2xvZ19zdHJlYW1fdXJsOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbn0pXG5leHBvcnQgdHlwZSBQYWNrYWdlQnVpbGQgPSB6LmluZmVyPHR5cGVvZiBwYWNrYWdlQnVpbGRTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBvcmdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG9yZ19pZDogei5zdHJpbmcoKSxcbiAgb3duZXJfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgaXNfcGVyc29uYWxfb3JnOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgY3JlYXRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLFxuICBvcmdfZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGF2YXRhcl91cmw6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBnaXRodWJfaGFuZGxlOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHRzY2lyY3VpdF9oYW5kbGU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbn0pXG5leHBvcnQgdHlwZSBPcmdhbml6YXRpb24gPSB6LmluZmVyPHR5cGVvZiBvcmdTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBvcmdBY2NvdW50U2NoZW1hID0gei5vYmplY3Qoe1xuICBvcmdfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgb3JnX2lkOiB6LnN0cmluZygpLFxuICBhY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICBpc19vd25lcjogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKSxcbiAgY2FuX21hbmFnZV9vcmc6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxufSlcbmV4cG9ydCB0eXBlIE9yZ0FjY291bnQgPSB6LmluZmVyPHR5cGVvZiBvcmdBY2NvdW50U2NoZW1hPlxuXG5leHBvcnQgY29uc3Qgb3JnSW52aXRhdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgb3JnX2ludml0YXRpb25faWQ6IHouc3RyaW5nKCksXG4gIG9yZ19pZDogei5zdHJpbmcoKSxcbiAgaW52aXRlZV9lbWFpbDogei5zdHJpbmcoKS5lbWFpbCgpLm51bGxhYmxlKCksXG4gIGludml0ZXJfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgaW52aXRhdGlvbl90b2tlbjogei5zdHJpbmcoKSxcbiAgaXNfbGlua19pbnZpdGU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19wZW5kaW5nOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICBpc19hY2NlcHRlZDogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGlzX2V4cGlyZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19yZXZva2VkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgY3JlYXRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLFxuICBleHBpcmVzX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCksXG4gIGFjY2VwdGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCkubnVsbGFibGUoKSxcbiAgYWNjZXB0ZWRfYnlfYWNjb3VudF9pZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxufSlcbmV4cG9ydCB0eXBlIE9yZ0ludml0YXRpb24gPSB6LmluZmVyPHR5cGVvZiBvcmdJbnZpdGF0aW9uU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgdXNlclBlcm1pc3Npb25zU2NoZW1hID0gei5vYmplY3Qoe1xuICBjYW5fbWFuYWdlX29yZzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgY2FuX21hbmFnZV9wYWNrYWdlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSlcbmV4cG9ydCB0eXBlIFVzZXJQZXJtaXNzaW9ucyA9IHouaW5mZXI8dHlwZW9mIHVzZXJQZXJtaXNzaW9uc1NjaGVtYT5cblxuZXhwb3J0IGNvbnN0IHB1YmxpY09yZ1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgb3JnX2lkOiB6LnN0cmluZygpLCAvLy51dWlkKCksXG4gIG93bmVyX2FjY291bnRfaWQ6IHouc3RyaW5nKCksIC8vLnV1aWQoKSxcbiAgbmFtZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBtZW1iZXJfY291bnQ6IHoubnVtYmVyKCksXG4gIGlzX3BlcnNvbmFsX29yZzogei5ib29sZWFuKCksXG4gIGRpc3BsYXlfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwYWNrYWdlX2NvdW50OiB6Lm51bWJlcigpLFxuICBhdmF0YXJfdXJsOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgZ2l0aHViX2hhbmRsZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICB0c2NpcmN1aXRfaGFuZGxlOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCksXG4gIHVzZXJfcGVybWlzc2lvbnM6IHVzZXJQZXJtaXNzaW9uc1NjaGVtYS5vcHRpb25hbCgpLFxufSlcbmV4cG9ydCB0eXBlIFB1YmxpY09yZ1NjaGVtYSA9IHouaW5mZXI8dHlwZW9mIHB1YmxpY09yZ1NjaGVtYT5cblxuZXhwb3J0IGNvbnN0IGRhdGFiYXNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZENvdW50ZXI6IHoubnVtYmVyKCkuZGVmYXVsdCgwKSxcbiAgc25pcHBldHM6IHouYXJyYXkoc25pcHBldFNjaGVtYSkuZGVmYXVsdChbXSksXG4gIHBhY2thZ2VSZWxlYXNlczogei5hcnJheShwYWNrYWdlUmVsZWFzZVNjaGVtYSkuZGVmYXVsdChbXSksXG4gIHBhY2thZ2VGaWxlczogei5hcnJheShwYWNrYWdlRmlsZVNjaGVtYSkuZGVmYXVsdChbXSksXG4gIHNlc3Npb25zOiB6LmFycmF5KHNlc3Npb25TY2hlbWEpLmRlZmF1bHQoW10pLFxuICBsb2dpblBhZ2VzOiB6LmFycmF5KGxvZ2luUGFnZVNjaGVtYSkuZGVmYXVsdChbXSksXG4gIGFjY291bnRzOiB6LmFycmF5KGFjY291bnRTY2hlbWEpLmRlZmF1bHQoW10pLFxuICBwYWNrYWdlczogei5hcnJheShwYWNrYWdlU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgb3JkZXJzOiB6LmFycmF5KG9yZGVyU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgb3JnYW5pemF0aW9uczogei5hcnJheShvcmdTY2hlbWEpLmRlZmF1bHQoW10pLFxuICBvcmdBY2NvdW50czogei5hcnJheShvcmdBY2NvdW50U2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgb3JnSW52aXRhdGlvbnM6IHouYXJyYXkob3JnSW52aXRhdGlvblNjaGVtYSkuZGVmYXVsdChbXSksXG4gIG9yZGVyRmlsZXM6IHouYXJyYXkob3JkZXJGaWxlU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgYWNjb3VudFNuaXBwZXRzOiB6LmFycmF5KGFjY291bnRTbmlwcGV0U2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgYWNjb3VudFBhY2thZ2VzOiB6LmFycmF5KGFjY291bnRQYWNrYWdlU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgamxjcGNiT3JkZXJTdGF0ZTogei5hcnJheShqbGNwY2JPcmRlclN0YXRlU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgamxjcGNiT3JkZXJTdGVwUnVuczogei5hcnJheShqbGNwY2JPcmRlclN0ZXBSdW5TY2hlbWEpLmRlZmF1bHQoW10pLFxuICBvcmRlclF1b3Rlczogei5hcnJheShvcmRlclF1b3RlU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgYWlSZXZpZXdzOiB6LmFycmF5KGFpUmV2aWV3U2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgZGF0YXNoZWV0czogei5hcnJheShkYXRhc2hlZXRTY2hlbWEpLmRlZmF1bHQoW10pLFxuICBnaXRodWJJbnN0YWxsYXRpb25zOiB6LmFycmF5KGdpdGh1Ykluc3RhbGxhdGlvblNjaGVtYSkuZGVmYXVsdChbXSksXG4gIHBhY2thZ2VCdWlsZHM6IHouYXJyYXkocGFja2FnZUJ1aWxkU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgYnVnUmVwb3J0czogei5hcnJheShidWdSZXBvcnRTY2hlbWEpLmRlZmF1bHQoW10pLFxuICBidWdSZXBvcnRGaWxlczogei5hcnJheShidWdSZXBvcnRGaWxlU2NoZW1hKS5kZWZhdWx0KFtdKSxcbn0pXG5leHBvcnQgdHlwZSBEYXRhYmFzZVNjaGVtYSA9IHouaW5mZXI8dHlwZW9mIGRhdGFiYXNlU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgdHNjaXJjdWl0SGFuZGxlU2NoZW1hID0gelxuICAuc3RyaW5nKClcbiAgLm1pbig1KVxuICAubWF4KDQwKVxuICAucmVnZXgoXG4gICAgL15bMC05QS1aYS16XVswLTlBLVphLXpfLV0qWzAtOUEtWmEtel0kLyxcbiAgICBcInRzY2lyY3VpdF9oYW5kbGUgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGggYSBsZXR0ZXIgb3IgbnVtYmVyLCBhbmQgbWF5IG9ubHkgY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcywgYW5kIGh5cGhlbnNcIixcbiAgKVxuIiwgImltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuaW1wb3J0IGF4aW9zIGZyb20gXCJyZWRheGlvc1wiXG5pbXBvcnQgdHlwZSB7IERiQ2xpZW50IH0gZnJvbSBcIi4vZGItY2xpZW50XCJcbmltcG9ydCB0eXBlIHsgUGFja2FnZSwgUGFja2FnZUZpbGUsIFBhY2thZ2VSZWxlYXNlIH0gZnJvbSBcIi4vc2NoZW1hXCJcblxuY29uc3QgZXh0cmFjdFRzY2lEZXBlbmRlbmNpZXMgPSAoXG4gIGNvZGU6IHN0cmluZyxcbik6IEFycmF5PHsgb3duZXI6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+ID0+IHtcbiAgY29uc3QgcmVnZXggPSAvQHRzY2lcXC8oW14uXSspXFwuKFteXCInXFxzXSspL2dcbiAgY29uc3QgbWF0Y2hlcyA9IEFycmF5LmZyb20oY29kZS5tYXRjaEFsbChyZWdleCkpXG4gIHJldHVybiBtYXRjaGVzLm1hcCgobWF0Y2gpID0+ICh7XG4gICAgb3duZXI6IG1hdGNoWzFdLFxuICAgIG5hbWU6IG1hdGNoWzJdLFxuICB9KSlcbn1cblxuY29uc3QgcmVnaXN0cnlBcGkgPSBheGlvcy5jcmVhdGUoe1xuICBiYXNlVVJMOiBcImh0dHBzOi8vYXBpLnRzY2lyY3VpdC5jb21cIixcbiAgaGVhZGVyczoge1xuICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gIH0sXG59KVxuXG5jb25zdCBmZXRjaFBhY2thZ2VGcm9tUmVnaXN0cnkgPSBhc3luYyAob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGZ1bGxOYW1lID0gYCR7b3duZXJ9LyR7bmFtZX1gXG4gIGNvbnNvbGUubG9nKGBbYXV0b2xvYWQtZGV2LXBrZ3NdIFx1RDgzRFx1RENFNiBGZXRjaGluZyBwYWNrYWdlICR7ZnVsbE5hbWV9Li4uYClcblxuICBsZXQgcGFja2FnZURhdGFcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlZ2lzdHJ5QXBpLnBvc3QoXCIvcGFja2FnZXMvZ2V0XCIsIHtcbiAgICAgIG5hbWU6IGZ1bGxOYW1lLFxuICAgIH0pXG4gICAgcGFja2FnZURhdGEgPSByZXNwb25zZS5kYXRhXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggcGFja2FnZSBkYXRhIGZvciAke2Z1bGxOYW1lfTpgLCBlKVxuICAgIHRocm93IGVcbiAgfVxuXG4gIGxldCByZWxlYXNlRGF0YVxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVnaXN0cnlBcGkucG9zdChcIi9wYWNrYWdlX3JlbGVhc2VzL2dldFwiLCB7XG4gICAgICBwYWNrYWdlX2lkOiBwYWNrYWdlRGF0YS5wYWNrYWdlLnBhY2thZ2VfaWQsXG4gICAgICBpc19sYXRlc3Q6IHRydWUsXG4gICAgfSlcbiAgICByZWxlYXNlRGF0YSA9IHJlc3BvbnNlLmRhdGFcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgW2F1dG9sb2FkLWRldi1wa2dzXSBcdTI3NEMgRmFpbGVkIHRvIGZldGNoIHJlbGVhc2UgZGF0YSBmb3IgJHtmdWxsTmFtZX06YCxcbiAgICAgIGUsXG4gICAgKVxuICAgIHRocm93IGVcbiAgfVxuXG4gIGxldCBmaWxlc0RhdGFcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlZ2lzdHJ5QXBpLnBvc3QoXG4gICAgICBgcGFja2FnZV9maWxlcy9saXN0P3BhY2thZ2VfcmVsZWFzZV9pZD0ke3JlbGVhc2VEYXRhLnBhY2thZ2VfcmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWR9YCxcbiAgICAgIHt9LFxuICAgIClcbiAgICBmaWxlc0RhdGEgPSByZXNwb25zZS5kYXRhXG5cbiAgICAvLyBGZXRjaCBjb250ZW50X3RleHQgZm9yIGVhY2ggZmlsZSBpbmRpdmlkdWFsbHlcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXNEYXRhLnBhY2thZ2VfZmlsZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpbGVSZXNwb25zZSA9IGF3YWl0IHJlZ2lzdHJ5QXBpLnBvc3QoXG4gICAgICAgICAgYC9wYWNrYWdlX2ZpbGVzL2dldD9wYWNrYWdlX2ZpbGVfaWQ9JHtmaWxlLnBhY2thZ2VfZmlsZV9pZH1gLFxuICAgICAgICAgIHt9LFxuICAgICAgICApXG4gICAgICAgIGZpbGUuY29udGVudF90ZXh0ID0gZmlsZVJlc3BvbnNlLmRhdGEucGFja2FnZV9maWxlLmNvbnRlbnRfdGV4dFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBbYXV0b2xvYWQtZGV2LXBrZ3NdIFx1Mjc0QyBGYWlsZWQgdG8gZmV0Y2ggY29udGVudCBmb3IgZmlsZSAke2ZpbGUuZmlsZV9wYXRofSBpbiBwYWNrYWdlICR7ZnVsbE5hbWV9OmAsXG4gICAgICAgICAgZSxcbiAgICAgICAgKVxuICAgICAgICB0aHJvdyBlXG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBbYXV0b2xvYWQtZGV2LXBrZ3NdIFx1Mjc0QyBGYWlsZWQgdG8gZmV0Y2ggZmlsZXMgZGF0YSBmb3IgJHtmdWxsTmFtZX06YCxcbiAgICAgIGUsXG4gICAgKVxuICAgIHRocm93IGVcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGFja2FnZTogcGFja2FnZURhdGEucGFja2FnZSBhcyBQYWNrYWdlLFxuICAgIHJlbGVhc2U6IHJlbGVhc2VEYXRhLnBhY2thZ2VfcmVsZWFzZSBhcyBQYWNrYWdlUmVsZWFzZSxcbiAgICBmaWxlczogZmlsZXNEYXRhLnBhY2thZ2VfZmlsZXMgYXMgUGFja2FnZUZpbGVbXSxcbiAgfVxufVxuXG5jb25zdCBsb2FkUGFja2FnZVdpdGhEZXBlbmRlbmNpZXMgPSBhc3luYyAoXG4gIGRiOiBEYkNsaWVudCxcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBsb2FkZWRQYWNrYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpLFxuKSA9PiB7XG4gIGNvbnN0IHBhY2thZ2VLZXkgPSBgJHtvd25lcn0vJHtuYW1lfWBcbiAgaWYgKGxvYWRlZFBhY2thZ2VzLmhhcyhwYWNrYWdlS2V5KSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBsZXQgcmVzdWx0XG4gIHRyeSB7XG4gICAgcmVzdWx0ID0gYXdhaXQgZmV0Y2hQYWNrYWdlRnJvbVJlZ2lzdHJ5KG93bmVyLCBuYW1lKVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgW2F1dG9sb2FkLWRldi1wa2dzXSBcdTI3NEMgRmFpbGVkIHRvIGxvYWQgJHtwYWNrYWdlS2V5fWApXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCB7IHBhY2thZ2U6IHBrZywgcmVsZWFzZSwgZmlsZXMgfSA9IHJlc3VsdFxuXG4gIC8vIENoZWNrIGlmIHBhY2thZ2UgYWxyZWFkeSBleGlzdHNcbiAgaWYgKGRiLmdldFBhY2thZ2VCeUlkKHBrZy5wYWNrYWdlX2lkKSkge1xuICAgIGNvbnNvbGUubG9nKGBbYXV0b2xvYWQtZGV2LXBrZ3NdIFx1MjZBMSBQYWNrYWdlICR7cGFja2FnZUtleX0gYWxyZWFkeSBleGlzdHNgKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBBZGQgcGFja2FnZSwgcmVsZWFzZSwgYW5kIGZpbGVzIHRvIGRiXG4gIGRiLmFkZFBhY2thZ2Uoe1xuICAgIC4uLnBrZyxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIGxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQ6IHJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgIHN0YXJfY291bnQ6IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDExKSxcbiAgfSlcblxuICBkYi5hZGRQYWNrYWdlUmVsZWFzZSh7XG4gICAgLi4ucmVsZWFzZSxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgdHJhbnNwaWxhdGlvbl9sb2dzOiBBcnJheS5pc0FycmF5KHJlbGVhc2UudHJhbnNwaWxhdGlvbl9sb2dzKVxuICAgICAgPyByZWxlYXNlLnRyYW5zcGlsYXRpb25fbG9nc1xuICAgICAgOiBbXSxcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfbG9nczogQXJyYXkuaXNBcnJheShyZWxlYXNlLmNpcmN1aXRfanNvbl9idWlsZF9sb2dzKVxuICAgICAgPyByZWxlYXNlLmNpcmN1aXRfanNvbl9idWlsZF9sb2dzXG4gICAgICA6IFtdLFxuICAgIHRyYW5zcGlsYXRpb25fZGlzcGxheV9zdGF0dXM6XG4gICAgICByZWxlYXNlLnRyYW5zcGlsYXRpb25fZGlzcGxheV9zdGF0dXMgPz8gXCJwZW5kaW5nXCIsXG4gIH0pXG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgZGIuYWRkUGFja2FnZUZpbGUoe1xuICAgICAgLi4uZmlsZSxcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9KVxuICB9XG5cbiAgbG9hZGVkUGFja2FnZXMuYWRkKHBhY2thZ2VLZXkpXG4gIGNvbnNvbGUubG9nKGBbYXV0b2xvYWQtZGV2LXBrZ3NdIFx1RDgzRFx1RENFNiBMb2FkZWQgJHtwYWNrYWdlS2V5fWApXG5cbiAgLy8gTG9hZCBkZXBlbmRlbmNpZXNcbiAgY29uc3QgbWFpbkZpbGUgPSBmaWxlcy5maW5kKFxuICAgIChmKSA9PiBmLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c3hcIiB8fCBmLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c1wiLFxuICApXG4gIGlmICghbWFpbkZpbGU/LmNvbnRlbnRfdGV4dCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBjb25zdCBkZXBlbmRlbmNpZXMgPSBleHRyYWN0VHNjaURlcGVuZGVuY2llcyhtYWluRmlsZS5jb250ZW50X3RleHQpXG4gIGxldCBhbGxEZXBzTG9hZGVkID0gdHJ1ZVxuXG4gIGZvciAoY29uc3QgZGVwIG9mIGRlcGVuZGVuY2llcykge1xuICAgIGNvbnN0IGRlcExvYWRlZCA9IGF3YWl0IGxvYWRQYWNrYWdlV2l0aERlcGVuZGVuY2llcyhcbiAgICAgIGRiLFxuICAgICAgZGVwLm93bmVyLFxuICAgICAgZGVwLm5hbWUsXG4gICAgICBsb2FkZWRQYWNrYWdlcyxcbiAgICApXG4gICAgaWYgKCFkZXBMb2FkZWQpIHtcbiAgICAgIGFsbERlcHNMb2FkZWQgPSBmYWxzZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2F1dG9sb2FkLWRldi1wa2dzXSBcdTI2QTBcdUZFMEYgRmFpbGVkIHRvIGxvYWQgZGVwZW5kZW5jeSAke2RlcC5vd25lcn0vJHtkZXAubmFtZX0gZm9yICR7cGFja2FnZUtleX1gLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhbGxEZXBzTG9hZGVkXG59XG5cbmV4cG9ydCBjb25zdCBsb2FkQXV0b2xvYWRQYWNrYWdlcyA9IGFzeW5jIChkYjogRGJDbGllbnQpID0+IHtcbiAgY29uc3QgYXV0b2xvYWRQYXRoID0gcGF0aC5qb2luKFxuICAgIHBhdGguZGlybmFtZShfX2Rpcm5hbWUpLFxuICAgIFwiZGJcIixcbiAgICBcImF1dG9sb2FkLXBhY2thZ2VzLmpzb25cIixcbiAgKVxuICBpZiAoIWZzLmV4aXN0c1N5bmMoYXV0b2xvYWRQYXRoKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbYXV0b2xvYWQtZGV2LXBrZ3NdIFx1Mjc0QyBObyBhdXRvbG9hZC1wYWNrYWdlcy5qc29uIGZvdW5kXCIpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBhdXRvbG9hZENvbnRlbnQgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhhdXRvbG9hZFBhdGgsIFwidXRmOFwiKSlcbiAgY29uc3QgbG9hZGVkUGFja2FnZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBsZXQgc3VjY2Vzc0NvdW50ID0gMFxuICBsZXQgZmFpbHVyZUNvdW50ID0gMFxuXG4gIGZvciAoY29uc3QgcGFja2FnZVJlZiBvZiBhdXRvbG9hZENvbnRlbnQucGFja2FnZXMpIHtcbiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgbG9hZFBhY2thZ2VXaXRoRGVwZW5kZW5jaWVzKFxuICAgICAgZGIsXG4gICAgICBwYWNrYWdlUmVmLm93bmVyLFxuICAgICAgcGFja2FnZVJlZi5uYW1lLFxuICAgICAgbG9hZGVkUGFja2FnZXMsXG4gICAgKVxuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBzdWNjZXNzQ291bnQrK1xuICAgIH0gZWxzZSB7XG4gICAgICBmYWlsdXJlQ291bnQrK1xuICAgIH1cbiAgfVxuXG4gIGNvbnNvbGUubG9nKGBcXG5bYXV0b2xvYWQtZGV2LXBrZ3NdIFx1RDgzRFx1RENDQiBQYWNrYWdlIGxvYWRpbmcgY29tcGxldGU6YClcbiAgY29uc29sZS5sb2coXG4gICAgYFthdXRvbG9hZC1kZXYtcGtnc10gXHUyNzA1IFN1Y2Nlc3NmdWxseSBsb2FkZWQ6ICR7c3VjY2Vzc0NvdW50fSBwYWNrYWdlc2AsXG4gIClcbiAgaWYgKGZhaWx1cmVDb3VudCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBbYXV0b2xvYWQtZGV2LXBrZ3NdIFx1Mjc0QyBGYWlsZWQgdG8gbG9hZDogJHtmYWlsdXJlQ291bnR9IHBhY2thZ2VzYCxcbiAgICApXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBEYkNsaWVudCB9IGZyb20gXCIuL2RiLWNsaWVudFwiXG5pbXBvcnQgeyBsb2FkQXV0b2xvYWRQYWNrYWdlcyB9IGZyb20gXCIuL2F1dG9sb2FkLWRldi1wYWNrYWdlc1wiXG5cbmV4cG9ydCBjb25zdCBzZWVkID0gKGRiOiBEYkNsaWVudCkgPT4ge1xuICBjb25zdCB7IGFjY291bnRfaWQgfSA9IGRiLmFkZEFjY291bnQoe1xuICAgIGFjY291bnRfaWQ6IFwiYWNjb3VudC0xMjM0XCIsXG4gICAgcGVyc29uYWxfb3JnX2lkOiBcIm9yZy0xMjM0XCIsXG4gICAgZ2l0aHViX3VzZXJuYW1lOiBcInRlc3R1c2VyXCIsXG4gICAgdHNjaXJjdWl0X2hhbmRsZTogXCJ0ZXN0dXNlclwiLFxuICAgIHNoaXBwaW5nSW5mbzoge1xuICAgICAgZmlyc3ROYW1lOiBcIlRlc3RcIixcbiAgICAgIGxhc3ROYW1lOiBcIlVzZXJcIixcbiAgICAgIGNvbXBhbnlOYW1lOiBcIlRlc3QgQ29tcGFueVwiLFxuICAgICAgYWRkcmVzczogXCIxMjMgVGVzdCBTdFwiLFxuICAgICAgYXBhcnRtZW50OiBcIkFwdCA0QlwiLFxuICAgICAgY2l0eTogXCJUZXN0dmlsbGVcIixcbiAgICAgIHN0YXRlOiBcIk5ZXCIsXG4gICAgICB6aXBDb2RlOiBcIjEwMDAxXCIsXG4gICAgICBjb3VudHJ5OiBcIlVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYVwiLFxuICAgICAgcGhvbmU6IFwiNTU1LTEyMy00NTY3XCIsXG4gICAgfSxcbiAgfSlcbiAgY29uc3Qgc2V2ZWliYXJBY2MgPSBkYi5hZGRBY2NvdW50KHtcbiAgICBnaXRodWJfdXNlcm5hbWU6IFwic2V2ZWliYXJcIixcbiAgICB0c2NpcmN1aXRfaGFuZGxlOiBcInNldmVpYmFyXCIsXG4gIH0pXG5cbiAgaWYgKHByb2Nlc3MuZW52LkFVVE9MT0FEX1BBQ0tBR0VTID09PSBcInRydWVcIikge1xuICAgIGxvYWRBdXRvbG9hZFBhY2thZ2VzKGRiKVxuICB9XG5cbiAgY29uc3QgeyBwYWNrYWdlX3JlbGVhc2VfaWQ6IHBhY2thZ2VSZWxlYXNlSWQxIH0gPSBkYi5hZGRTbmlwcGV0KHtcbiAgICBuYW1lOiBcInRlc3R1c2VyL215LXRlc3QtYm9hcmRcIixcbiAgICB1bnNjb3BlZF9uYW1lOiBcIm15LXRlc3QtYm9hcmRcIixcbiAgICBnaXRodWJfcmVwb19mdWxsX25hbWU6IFwidGVzdHVzZXIvbXktdGVzdC1ib2FyZFwiLFxuICAgIG93bmVyX25hbWU6IFwidGVzdHVzZXJcIixcbiAgICBicmFuY2hfbmFtZTogXCJtYWluXCIsXG4gICAgY29tbWl0X21lc3NhZ2U6IFwiQXR0ZW1wdGVkIGJ1aWxkIG9mIGE1NTV0aW1lci1zcXVhcmUtd2F2ZSBwYWNrYWdlXCIsXG4gICAgY29tbWl0X2F1dGhvcjogXCJ0ZXN0dXNlclwiLFxuICAgIGNyZWF0b3JfYWNjb3VudF9pZDogYWNjb3VudF9pZCxcbiAgICBjb2RlOiBgXG5pbXBvcnQgeyBBNTU1VGltZXIgfSBmcm9tIFwiQHRzY2kvc2V2ZWliYXIuYTU1NXRpbWVyXCJcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4gKFxuICA8Ym9hcmQgd2lkdGg9XCIxMG1tXCIgaGVpZ2h0PVwiMTBtbVwiPlxuICAgIDxBNTU1VGltZXIgbmFtZT1cIlUxXCIgLz5cbiAgPC9ib2FyZD5cbilgLnRyaW0oKSxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHNuaXBwZXRfdHlwZTogXCJib2FyZFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkEgc2ltcGxlIGJvYXJkIHdpdGggYW4gQTU1NSBUaW1lciBjb21wb25lbnRcIixcbiAgICBjaXJjdWl0X2pzb246IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8wXCIsXG4gICAgICAgIG5hbWU6IFwicGluMVwiLFxuICAgICAgICBwaW5fbnVtYmVyOiAxLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW4xXCIsIFwiMVwiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX3BvcnRcIixcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMVwiLFxuICAgICAgICBuYW1lOiBcInBpbjJcIixcbiAgICAgICAgcGluX251bWJlcjogMixcbiAgICAgICAgcG9ydF9oaW50czogW1wicGluMlwiLCBcIjJcIl0sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9wb3J0XCIsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzJcIixcbiAgICAgICAgbmFtZTogXCJwaW4zXCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDMsXG4gICAgICAgIHBvcnRfaGludHM6IFtcInBpbjNcIiwgXCIzXCJdLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8zXCIsXG4gICAgICAgIG5hbWU6IFwicGluNFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA0LFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW40XCIsIFwiNFwiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX3BvcnRcIixcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfNFwiLFxuICAgICAgICBuYW1lOiBcInBpbjVcIixcbiAgICAgICAgcGluX251bWJlcjogNSxcbiAgICAgICAgcG9ydF9oaW50czogW1wicGluNVwiLCBcIjVcIl0sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9wb3J0XCIsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzVcIixcbiAgICAgICAgbmFtZTogXCJwaW42XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDYsXG4gICAgICAgIHBvcnRfaGludHM6IFtcInBpbjZcIiwgXCI2XCJdLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF82XCIsXG4gICAgICAgIG5hbWU6IFwicGluN1wiLFxuICAgICAgICBwaW5fbnVtYmVyOiA3LFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW43XCIsIFwiN1wiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX3BvcnRcIixcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfN1wiLFxuICAgICAgICBuYW1lOiBcInBpbjhcIixcbiAgICAgICAgcGluX251bWJlcjogOCxcbiAgICAgICAgcG9ydF9oaW50czogW1wicGluOFwiLCBcIjhcIl0sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9jb21wb25lbnRcIixcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgICAgZnR5cGU6IFwic2ltcGxlX2NoaXBcIixcbiAgICAgICAgbmFtZTogXCJVMVwiLFxuICAgICAgICBzdXBwbGllcl9wYXJ0X251bWJlcnM6IHt9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfY29tcG9uZW50XCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMCxcbiAgICAgICAgfSxcbiAgICAgICAgcm90YXRpb246IDAsXG4gICAgICAgIHNpemU6IHtcbiAgICAgICAgICB3aWR0aDogMS4xLFxuICAgICAgICAgIGhlaWdodDogMSxcbiAgICAgICAgfSxcbiAgICAgICAgcGluX3NwYWNpbmc6IDAuMixcbiAgICAgICAgcG9ydF9sYWJlbHM6IHt9LFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF8wXCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IC0wLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogMC4zMDAwMDAwMDAwMDAwMDAwNCxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMFwiLFxuICAgICAgICBmYWNpbmdfZGlyZWN0aW9uOiBcImxlZnRcIixcbiAgICAgICAgZGlzdGFuY2VfZnJvbV9jb21wb25lbnRfZWRnZTogMC40LFxuICAgICAgICBzaWRlX29mX2NvbXBvbmVudDogXCJsZWZ0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDEsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiAwLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF8xXCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IC0wLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogMC4xMDAwMDAwMDAwMDAwMDAwMyxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMVwiLFxuICAgICAgICBmYWNpbmdfZGlyZWN0aW9uOiBcImxlZnRcIixcbiAgICAgICAgZGlzdGFuY2VfZnJvbV9jb21wb25lbnRfZWRnZTogMC40LFxuICAgICAgICBzaWRlX29mX2NvbXBvbmVudDogXCJsZWZ0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDIsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiAxLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF8yXCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IC0wLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogLTAuMDk5OTk5OTk5OTk5OTk5OTgsXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzJcIixcbiAgICAgICAgZmFjaW5nX2RpcmVjdGlvbjogXCJsZWZ0XCIsXG4gICAgICAgIGRpc3RhbmNlX2Zyb21fY29tcG9uZW50X2VkZ2U6IDAuNCxcbiAgICAgICAgc2lkZV9vZl9jb21wb25lbnQ6IFwibGVmdFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiAzLFxuICAgICAgICB0cnVlX2Njd19pbmRleDogMixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic2NoZW1hdGljX3BvcnRcIixcbiAgICAgICAgc2NoZW1hdGljX3BvcnRfaWQ6IFwic2NoZW1hdGljX3BvcnRfM1wiLFxuICAgICAgICBzY2hlbWF0aWNfY29tcG9uZW50X2lkOiBcInNjaGVtYXRpY19jb21wb25lbnRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAtMC45NTAwMDAwMDAwMDAwMDAxLFxuICAgICAgICAgIHk6IC0wLjMwMDAwMDAwMDAwMDAwMDA0LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8zXCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwibGVmdFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcImxlZnRcIixcbiAgICAgICAgcGluX251bWJlcjogNCxcbiAgICAgICAgdHJ1ZV9jY3dfaW5kZXg6IDMsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzRcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogMC45NTAwMDAwMDAwMDAwMDAxLFxuICAgICAgICAgIHk6IC0wLjMwMDAwMDAwMDAwMDAwMDA0LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF80XCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwicmlnaHRcIixcbiAgICAgICAgZGlzdGFuY2VfZnJvbV9jb21wb25lbnRfZWRnZTogMC40LFxuICAgICAgICBzaWRlX29mX2NvbXBvbmVudDogXCJyaWdodFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA1LFxuICAgICAgICB0cnVlX2Njd19pbmRleDogNCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic2NoZW1hdGljX3BvcnRcIixcbiAgICAgICAgc2NoZW1hdGljX3BvcnRfaWQ6IFwic2NoZW1hdGljX3BvcnRfNVwiLFxuICAgICAgICBzY2hlbWF0aWNfY29tcG9uZW50X2lkOiBcInNjaGVtYXRpY19jb21wb25lbnRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAwLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogLTAuMTAwMDAwMDAwMDAwMDAwMDMsXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzVcIixcbiAgICAgICAgZmFjaW5nX2RpcmVjdGlvbjogXCJyaWdodFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcInJpZ2h0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDYsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiA1LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF82XCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IDAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAwLjA5OTk5OTk5OTk5OTk5OTk4LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF82XCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwicmlnaHRcIixcbiAgICAgICAgZGlzdGFuY2VfZnJvbV9jb21wb25lbnRfZWRnZTogMC40LFxuICAgICAgICBzaWRlX29mX2NvbXBvbmVudDogXCJyaWdodFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA3LFxuICAgICAgICB0cnVlX2Njd19pbmRleDogNixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic2NoZW1hdGljX3BvcnRcIixcbiAgICAgICAgc2NoZW1hdGljX3BvcnRfaWQ6IFwic2NoZW1hdGljX3BvcnRfN1wiLFxuICAgICAgICBzY2hlbWF0aWNfY29tcG9uZW50X2lkOiBcInNjaGVtYXRpY19jb21wb25lbnRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAwLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogMC4zMDAwMDAwMDAwMDAwMDAwNCxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfN1wiLFxuICAgICAgICBmYWNpbmdfZGlyZWN0aW9uOiBcInJpZ2h0XCIsXG4gICAgICAgIGRpc3RhbmNlX2Zyb21fY29tcG9uZW50X2VkZ2U6IDAuNCxcbiAgICAgICAgc2lkZV9vZl9jb21wb25lbnQ6IFwicmlnaHRcIixcbiAgICAgICAgcGluX251bWJlcjogOCxcbiAgICAgICAgdHJ1ZV9jY3dfaW5kZXg6IDcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9jb21wb25lbnRcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICB9LFxuICAgICAgICB3aWR0aDogOC44MixcbiAgICAgICAgaGVpZ2h0OiA4LjgyLFxuICAgICAgICBsYXllcjogXCJ0b3BcIixcbiAgICAgICAgcm90YXRpb246IDAsXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9ib2FyZFwiLFxuICAgICAgICBwY2JfYm9hcmRfaWQ6IFwicGNiX2JvYXJkXzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICB9LFxuICAgICAgICB0aGlja25lc3M6IDEuNCxcbiAgICAgICAgbnVtX2xheWVyczogNCxcbiAgICAgICAgd2lkdGg6IDEwLFxuICAgICAgICBoZWlnaHQ6IDEwLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcGxhdGVkX2hvbGVcIixcbiAgICAgICAgcGNiX3BsYXRlZF9ob2xlX2lkOiBcInBjYl9wbGF0ZWRfaG9sZV8wXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzBcIixcbiAgICAgICAgb3V0ZXJfZGlhbWV0ZXI6IDEuMixcbiAgICAgICAgaG9sZV9kaWFtZXRlcjogMSxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBvcnRfaGludHM6IFtcIjFcIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAzLjgxLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfMVwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8xXCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCIyXCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogMS4yNyxcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wbGF0ZWRfaG9sZVwiLFxuICAgICAgICBwY2JfcGxhdGVkX2hvbGVfaWQ6IFwicGNiX3BsYXRlZF9ob2xlXzJcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfMlwiLFxuICAgICAgICBvdXRlcl9kaWFtZXRlcjogMS4yLFxuICAgICAgICBob2xlX2RpYW1ldGVyOiAxLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcG9ydF9oaW50czogW1wiM1wiXSxcbiAgICAgICAgeDogLTMuODEsXG4gICAgICAgIHk6IC0xLjI3LFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfM1wiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8zXCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCI0XCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogLTMuODEsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiYm90dG9tXCJdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcGxhdGVkX2hvbGVcIixcbiAgICAgICAgcGNiX3BsYXRlZF9ob2xlX2lkOiBcInBjYl9wbGF0ZWRfaG9sZV80XCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzRcIixcbiAgICAgICAgb3V0ZXJfZGlhbWV0ZXI6IDEuMixcbiAgICAgICAgaG9sZV9kaWFtZXRlcjogMSxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBvcnRfaGludHM6IFtcIjVcIl0sXG4gICAgICAgIHg6IDMuODEsXG4gICAgICAgIHk6IC0zLjgxLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfNVwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF81XCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCI2XCJdLFxuICAgICAgICB4OiAzLjgxLFxuICAgICAgICB5OiAtMS4yNyxcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wbGF0ZWRfaG9sZVwiLFxuICAgICAgICBwY2JfcGxhdGVkX2hvbGVfaWQ6IFwicGNiX3BsYXRlZF9ob2xlXzZcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNlwiLFxuICAgICAgICBvdXRlcl9kaWFtZXRlcjogMS4yLFxuICAgICAgICBob2xlX2RpYW1ldGVyOiAxLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcG9ydF9oaW50czogW1wiN1wiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogMS4yNyxcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wbGF0ZWRfaG9sZVwiLFxuICAgICAgICBwY2JfcGxhdGVkX2hvbGVfaWQ6IFwicGNiX3BsYXRlZF9ob2xlXzdcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfN1wiLFxuICAgICAgICBvdXRlcl9kaWFtZXRlcjogMS4yLFxuICAgICAgICBob2xlX2RpYW1ldGVyOiAxLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcG9ydF9oaW50czogW1wiOFwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogMy44MSxcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9zaWxrc2NyZWVuX3BhdGhcIixcbiAgICAgICAgcGNiX3NpbGtzY3JlZW5fcGF0aF9pZDogXCJwY2Jfc2lsa3NjcmVlbl9wYXRoXzBcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXI6IFwidG9wXCIsXG4gICAgICAgIHJvdXRlOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTMuMDEsXG4gICAgICAgICAgICB5OiAtNC42MSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IC0zLjAxLFxuICAgICAgICAgICAgeTogNC42MSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IC0xLjAwMzMzMzMzMzMzMzMzMzIsXG4gICAgICAgICAgICB5OiA0LjYxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTAuOTI2OTU5MTMwOTUyOTkwOSxcbiAgICAgICAgICAgIHk6IDQuMjI2MDQwOTU2MTkzNjkzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTAuNzA5NDYzODAzNzkwNTAyNixcbiAgICAgICAgICAgIHk6IDMuOTAwNTM2MTk2MjA5NDk3OCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IC0wLjM4Mzk1OTA0MzgwNjMwNjcsXG4gICAgICAgICAgICB5OiAzLjY4MzA0MDg2OTA0NzAwOTYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiA2LjE0MzY0NDc3NTcyMjU1NmUtMTcsXG4gICAgICAgICAgICB5OiAzLjYwNjY2NjY2NjY2NjY2NzQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAwLjM4Mzk1OTA0MzgwNjMwNjc0LFxuICAgICAgICAgICAgeTogMy42ODMwNDA4NjkwNDcwMDk2LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogMC43MDk0NjM4MDM3OTA1MDI3LFxuICAgICAgICAgICAgeTogMy45MDA1MzYxOTYyMDk0OTc4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogMC45MjY5NTkxMzA5NTI5OTA5LFxuICAgICAgICAgICAgeTogNC4yMjYwNDA5NTYxOTM2OTMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAxLjAwMzMzMzMzMzMzMzMzMzIsXG4gICAgICAgICAgICB5OiA0LjYxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogMy4wMSxcbiAgICAgICAgICAgIHk6IDQuNjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAzLjAxLFxuICAgICAgICAgICAgeTogLTQuNjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAtMy4wMSxcbiAgICAgICAgICAgIHk6IC00LjYxLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHN0cm9rZV93aWR0aDogMC4xLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcG9ydFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8wXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiaW5uZXIxXCIsIFwiaW5uZXIyXCIsIFwiYm90dG9tXCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogMy44MSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcG9ydFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8xXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiaW5uZXIxXCIsIFwiaW5uZXIyXCIsIFwiYm90dG9tXCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogMS4yNyxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMVwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcG9ydFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8yXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiaW5uZXIxXCIsIFwiaW5uZXIyXCIsIFwiYm90dG9tXCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogLTEuMjcsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzJcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BvcnRcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfM1wiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImlubmVyMVwiLCBcImlubmVyMlwiLCBcImJvdHRvbVwiXSxcbiAgICAgICAgeDogLTMuODEsXG4gICAgICAgIHk6IC0zLjgxLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8zXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzRcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IDMuODEsXG4gICAgICAgIHk6IC0zLjgxLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF80XCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzVcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IDMuODEsXG4gICAgICAgIHk6IC0xLjI3LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF81XCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzZcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IDMuODEsXG4gICAgICAgIHk6IDEuMjcsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzZcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BvcnRcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfN1wiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImlubmVyMVwiLCBcImlubmVyMlwiLCBcImJvdHRvbVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogMy44MSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfN1wiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJjYWRfY29tcG9uZW50XCIsXG4gICAgICAgIGNhZF9jb21wb25lbnRfaWQ6IFwiY2FkX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICAgIHo6IDAuNyxcbiAgICAgICAgfSxcbiAgICAgICAgcm90YXRpb246IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgejogMCxcbiAgICAgICAgfSxcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgICAgZm9vdHByaW50ZXJfc3RyaW5nOiBcImRpcDhcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgfSlcblxuICBjb25zdCBmaXJzdEJ1aWxkID0gZGIuYWRkUGFja2FnZUJ1aWxkKHtcbiAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHBhY2thZ2VSZWxlYXNlSWQxLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxNTAwMCkudG9JU09TdHJpbmcoKSwgLy8gMTUgc2Vjb25kcyBhZ29cbiAgICB0cmFuc3BpbGF0aW9uX2luX3Byb2dyZXNzOiBmYWxzZSxcbiAgICB0cmFuc3BpbGF0aW9uX3N0YXJ0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxNTAwMCkudG9JU09TdHJpbmcoKSxcbiAgICB0cmFuc3BpbGF0aW9uX2NvbXBsZXRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDE0MDAwKS50b0lTT1N0cmluZygpLFxuICAgIHRyYW5zcGlsYXRpb25fbG9nczogW1xuICAgICAgXCJbSU5GT10gU3RhcnRpbmcgdHJhbnNwaWxhdGlvbi4uLlwiLFxuICAgICAgXCJbSU5GT10gUGFyc2luZyBwYWNrYWdlIGNvZGVcIixcbiAgICAgIFwiW0VSUk9SXSBGYWlsZWQgdG8gcGFyc2UgVHlwZVNjcmlwdCBkZWZpbml0aW9uc1wiLFxuICAgICAgXCJbRVJST1JdIEludmFsaWQgc3ludGF4IGluIGNvbXBvbmVudCBkZWNsYXJhdGlvblwiLFxuICAgIF0sXG4gICAgdHJhbnNwaWxhdGlvbl9lcnJvcjpcbiAgICAgIFwiVHlwZVNjcmlwdCBjb21waWxhdGlvbiBmYWlsZWQ6IFN5bnRheCBlcnJvciBpbiBjb21wb25lbnQgZGVjbGFyYXRpb25cIixcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfaW5fcHJvZ3Jlc3M6IGZhbHNlLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9zdGFydGVkX2F0OiBudWxsLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9jb21wbGV0ZWRfYXQ6IG51bGwsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2xvZ3M6IFtdLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9lcnJvcjogXCJCdWlsZCBjYW5jZWxsZWQgZHVlIHRvIHRyYW5zcGlsYXRpb24gZmFpbHVyZVwiLFxuICAgIGJ1aWxkX2luX3Byb2dyZXNzOiBmYWxzZSxcbiAgICBidWlsZF9zdGFydGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTUwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgYnVpbGRfY29tcGxldGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTQwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgYnVpbGRfZXJyb3I6IFwiQnVpbGQgZmFpbGVkOiBVbmFibGUgdG8gY29tcGxldGUgdHJhbnNwaWxhdGlvbiBzdGVwXCIsXG4gICAgYnVpbGRfZXJyb3JfbGFzdF91cGRhdGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTQwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgcHJldmlld191cmw6IG51bGwsXG4gICAgYnVpbGRfbG9nczpcbiAgICAgIFwiQnVpbGQgcHJvY2VzczpcXG5cIiArXG4gICAgICBcIjEuIEVudmlyb25tZW50IHNldHVwIC0gT0tcXG5cIiArXG4gICAgICBcIjIuIERlcGVuZGVuY3kgcmVzb2x1dGlvbiAtIE9LXFxuXCIgK1xuICAgICAgXCIzLiBDb2RlIGNvbXBpbGF0aW9uIC0gRkFJTEVEXFxuXCIgK1xuICAgICAgXCJFcnJvcjogSW52YWxpZCBzeW50YXggaW4gY29tcG9uZW50IGRlY2xhcmF0aW9uXFxuXCIgK1xuICAgICAgXCJCdWlsZCB0ZXJtaW5hdGVkIHdpdGggZXJyb3JzXCIsXG4gIH0pXG5cbiAgLy8gVXBkYXRlIHRoZSBwYWNrYWdlIHJlbGVhc2Ugd2l0aCB0aGUgbGF0ZXN0IGJ1aWxkIElEXG4gIGNvbnN0IHJlbGVhc2UxID0gZGIuZ2V0UGFja2FnZVJlbGVhc2VCeUlkKHBhY2thZ2VSZWxlYXNlSWQxKSFcbiAgZGIudXBkYXRlUGFja2FnZVJlbGVhc2Uoe1xuICAgIC4uLnJlbGVhc2UxLFxuICAgIGxhdGVzdF9wYWNrYWdlX2J1aWxkX2lkOiBmaXJzdEJ1aWxkLnBhY2thZ2VfYnVpbGRfaWQsXG4gIH0pXG5cbiAgLy8gVGVzdCBQYWNrYWdlIGFkZGl0aW9uXG4gIGNvbnN0IHRlc3QyUGFja2FnZSA9IGRiLmFkZFBhY2thZ2Uoe1xuICAgIG5hbWU6IFwidGVzdHVzZXIvdGVzdDItcGFja2FnZVwiLFxuICAgIHVuc2NvcGVkX25hbWU6IFwidGVzdDItcGFja2FnZVwiLFxuICAgIGNyZWF0b3JfYWNjb3VudF9pZDogYWNjb3VudF9pZCxcbiAgICBvd25lcl9vcmdfaWQ6IFwib3JnLTEyMzRcIixcbiAgICBvd25lcl9naXRodWJfdXNlcm5hbWU6IFwidGVzdHVzZXJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJBIHRlc3QgcGFja2FnZSBmb3IgZGV2ZWxvcG1lbnRcIixcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIGlzX3NvdXJjZV9mcm9tX2dpdGh1YjogZmFsc2UsXG4gICAgc25pcHBldF90eXBlOiBcInBhY2thZ2VcIixcbiAgICBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkOiBudWxsLFxuICAgIGxhdGVzdF92ZXJzaW9uOiBcIjAuMC4xXCIsXG4gICAgbGljZW5zZTogXCJNSVRcIixcbiAgICB3ZWJzaXRlOiBcImh0dHBzOi8vdHNjaXJjdWl0LmNvbVwiLFxuICAgIHN0YXJfY291bnQ6IDEwLFxuICAgIGFpX2Rlc2NyaXB0aW9uOlxuICAgICAgXCJBIGNvbXByZWhlbnNpdmUgdGVzdCBwYWNrYWdlIGRlc2lnbmVkIGZvciBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyBwdXJwb3Nlcy4gVGhpcyBwYWNrYWdlIGluY2x1ZGVzIHZhcmlvdXMgY29tcG9uZW50cyBhbmQgdXRpbGl0aWVzIGNvbW1vbmx5IHVzZWQgaW4gY2lyY3VpdCBkZXNpZ24gYW5kIHNpbXVsYXRpb24gd29ya2Zsb3dzLlwiLFxuICAgIGFpX3VzYWdlX2luc3RydWN0aW9uczpcbiAgICAgIFwiSW1wb3J0IHRoZSBwYWNrYWdlIHVzaW5nIGBpbXBvcnQgeyBUZXN0Q29tcG9uZW50IH0gZnJvbSAnQHRzY2kvdGVzdHVzZXIudGVzdDItcGFja2FnZSdgLiBVc2UgdGhlIFRlc3RDb21wb25lbnQgaW4geW91ciBjaXJjdWl0IGRlc2lnbnMgYnkgcHJvdmlkaW5nIHRoZSByZXF1aXJlZCBwcm9wcy4gRXhhbXBsZTogYDxUZXN0Q29tcG9uZW50IG5hbWU9J215LXRlc3QnIHZhbHVlPXs0Mn0gLz5gXCIsXG4gICAgZGVmYXVsdF92aWV3OiBcImZpbGVzXCIsXG4gICAgbGF0ZXN0X3BjYl9wcmV2aWV3X2ltYWdlX3VybDogYC9hcGkvcGFja2FnZXMvaW1hZ2VzL3Rlc3R1c2VyL3Rlc3QyLXBhY2thZ2UvcGNiLnBuZ2AsXG4gICAgbGF0ZXN0X2NhZF9wcmV2aWV3X2ltYWdlX3VybDogYC9hcGkvcGFja2FnZXMvaW1hZ2VzL3Rlc3R1c2VyL3Rlc3QyLXBhY2thZ2UvM2QucG5nYCxcbiAgICBsYXRlc3Rfc2NoX3ByZXZpZXdfaW1hZ2VfdXJsOiBgL2FwaS9wYWNrYWdlcy9pbWFnZXMvdGVzdHVzZXIvdGVzdDItcGFja2FnZS9zY2hlbWF0aWMucG5nYCxcbiAgfSlcbiAgY29uc3QgeyBwYWNrYWdlX3JlbGVhc2VfaWQ6IHRlc3QyUGFja2FnZVJlbGVhc2VJZCB9ID0gZGIuYWRkUGFja2FnZVJlbGVhc2Uoe1xuICAgIHBhY2thZ2VfaWQ6IHRlc3QyUGFja2FnZS5wYWNrYWdlX2lkLFxuICAgIHZlcnNpb246IFwiMC4wLjFcIixcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgaXNfbGF0ZXN0OiB0cnVlLFxuICAgIGlzX2xvY2tlZDogZmFsc2UsXG4gICAgaGFzX3RyYW5zcGlsZWQ6IHRydWUsXG4gICAgdHJhbnNwaWxhdGlvbl9lcnJvcjogbnVsbCxcbiAgICBwY2JfcHJldmlld19pbWFnZV91cmw6IGAvYXBpL3BhY2thZ2VzL2ltYWdlcy90ZXN0dXNlci90ZXN0Mi1wYWNrYWdlL3BjYi5wbmdgLFxuICAgIGNhZF9wcmV2aWV3X2ltYWdlX3VybDogYC9hcGkvcGFja2FnZXMvaW1hZ2VzL3Rlc3R1c2VyL3Rlc3QyLXBhY2thZ2UvM2QucG5nYCxcbiAgICBzY2hfcHJldmlld19pbWFnZV91cmw6IGAvYXBpL3BhY2thZ2VzL2ltYWdlcy90ZXN0dXNlci90ZXN0Mi1wYWNrYWdlL3NjaGVtYXRpYy5wbmdgLFxuICB9KVxuICBkYi5hZGRQYWNrYWdlRmlsZSh7XG4gICAgcGFja2FnZV9yZWxlYXNlX2lkOiB0ZXN0MlBhY2thZ2VSZWxlYXNlSWQsXG4gICAgZmlsZV9wYXRoOiBcImluZGV4LnRzeFwiLFxuICAgIGNvbnRlbnRfdGV4dDogYFxuZXhwb3J0IGNvbnN0IFRlc3RDb21wb25lbnQgPSAoeyBuYW1lIH06IHsgbmFtZTogc3RyaW5nIH0pID0+IChcbiAgPHJlc2lzdG9yIG5hbWU9e25hbWV9IHJlc2lzdGFuY2U9XCIxMGtcIiAvPlxuKVxuYC50cmltKCksXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICB9KVxuICBkYi5hZGRQYWNrYWdlRmlsZSh7XG4gICAgcGFja2FnZV9yZWxlYXNlX2lkOiB0ZXN0MlBhY2thZ2VSZWxlYXNlSWQsXG4gICAgZmlsZV9wYXRoOiBcIi9kaXN0L2NpcmN1aXQuanNvblwiLFxuICAgIGNvbnRlbnRfdGV4dDogYFtcbiAge1xuICAgIFwidHlwZVwiOiBcInNvdXJjZV9wcm9qZWN0X21ldGFkYXRhXCIsXG4gICAgXCJzb3VyY2VfcHJvamVjdF9tZXRhZGF0YV9pZFwiOiBcInNvdXJjZV9wcm9qZWN0X21ldGFkYXRhXzBcIixcbiAgICBcInNvZnR3YXJlX3VzZWRfc3RyaW5nXCI6IFwiQHRzY2lyY3VpdC9jb3JlQDAuMC44MTNcIlxuICB9LFxuICB7XG4gICAgXCJ0eXBlXCI6IFwic291cmNlX2dyb3VwXCIsXG4gICAgXCJzb3VyY2VfZ3JvdXBfaWRcIjogXCJzb3VyY2VfZ3JvdXBfMFwiLFxuICAgIFwiaXNfc3ViY2lyY3VpdFwiOiB0cnVlLFxuICAgIFwid2FzX2F1dG9tYXRpY2FsbHlfbmFtZWRcIjogdHJ1ZSxcbiAgICBcInN1YmNpcmN1aXRfaWRcIjogXCJzdWJjaXJjdWl0X3NvdXJjZV9ncm91cF8wXCJcbiAgfSxcbiAge1xuICAgIFwidHlwZVwiOiBcInNvdXJjZV9ib2FyZFwiLFxuICAgIFwic291cmNlX2JvYXJkX2lkXCI6IFwic291cmNlX2JvYXJkXzBcIixcbiAgICBcInNvdXJjZV9ncm91cF9pZFwiOiBcInNvdXJjZV9ncm91cF8wXCJcbiAgfSxcbiAge1xuICAgIFwidHlwZVwiOiBcInNjaGVtYXRpY19ncm91cFwiLFxuICAgIFwic2NoZW1hdGljX2dyb3VwX2lkXCI6IFwic2NoZW1hdGljX2dyb3VwXzBcIixcbiAgICBcImlzX3N1YmNpcmN1aXRcIjogdHJ1ZSxcbiAgICBcInN1YmNpcmN1aXRfaWRcIjogXCJzdWJjaXJjdWl0X3NvdXJjZV9ncm91cF8wXCIsXG4gICAgXCJuYW1lXCI6IFwidW5uYW1lZF9ib2FyZDFcIixcbiAgICBcImNlbnRlclwiOiB7XG4gICAgICBcInhcIjogMCxcbiAgICAgIFwieVwiOiAwXG4gICAgfSxcbiAgICBcIndpZHRoXCI6IDAsXG4gICAgXCJoZWlnaHRcIjogMCxcbiAgICBcInNjaGVtYXRpY19jb21wb25lbnRfaWRzXCI6IFtdLFxuICAgIFwic291cmNlX2dyb3VwX2lkXCI6IFwic291cmNlX2dyb3VwXzBcIlxuICB9LFxuICB7XG4gICAgXCJ0eXBlXCI6IFwicGNiX2JvYXJkXCIsXG4gICAgXCJwY2JfYm9hcmRfaWRcIjogXCJwY2JfYm9hcmRfMFwiLFxuICAgIFwiY2VudGVyXCI6IHtcbiAgICAgIFwieFwiOiAwLFxuICAgICAgXCJ5XCI6IDBcbiAgICB9LFxuICAgIFwidGhpY2tuZXNzXCI6IDEuNCxcbiAgICBcIm51bV9sYXllcnNcIjogMixcbiAgICBcIndpZHRoXCI6IDEwLFxuICAgIFwiaGVpZ2h0XCI6IDEwLFxuICAgIFwibWF0ZXJpYWxcIjogXCJmcjRcIlxuICB9XG5dYC50cmltKCksXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICB9KVxuICBkYi5hZGRQYWNrYWdlQnVpbGQoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogdGVzdDJQYWNrYWdlUmVsZWFzZUlkLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB0cmFuc3BpbGF0aW9uX2luX3Byb2dyZXNzOiBmYWxzZSxcbiAgICB0cmFuc3BpbGF0aW9uX3N0YXJ0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSA1MDAwKS50b0lTT1N0cmluZygpLCAvLyBTdGFydGVkIDUgc2Vjb25kcyBhZ29cbiAgICB0cmFuc3BpbGF0aW9uX2NvbXBsZXRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDMwMDApLnRvSVNPU3RyaW5nKCksIC8vIENvbXBsZXRlZCAzIHNlY29uZHMgYWdvXG4gICAgdHJhbnNwaWxhdGlvbl9sb2dzOiBbXG4gICAgICBcIltJTkZPXSBTdGFydGluZyB0cmFuc3BpbGF0aW9uLi4uXCIsXG4gICAgICBcIltJTkZPXSBQYXJzaW5nIHBhY2thZ2UgY29kZVwiLFxuICAgICAgXCJbSU5GT10gR2VuZXJhdGluZyBUeXBlU2NyaXB0IGRlZmluaXRpb25zXCIsXG4gICAgICBcIltJTkZPXSBDb21waWxpbmcgdG8gSmF2YVNjcmlwdFwiLFxuICAgICAgXCJbU1VDQ0VTU10gVHJhbnNwaWxhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIsXG4gICAgXSxcbiAgICB0cmFuc3BpbGF0aW9uX2Vycm9yOiBudWxsLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9pbl9wcm9ncmVzczogZmFsc2UsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX3N0YXJ0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzMDAwKS50b0lTT1N0cmluZygpLCAvLyBTdGFydGVkIGFmdGVyIHRyYW5zcGlsYXRpb25cbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfY29tcGxldGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTAwMCkudG9JU09TdHJpbmcoKSwgLy8gQ29tcGxldGVkIDEgc2Vjb25kIGFnb1xuICAgIGNpcmN1aXRfanNvbl9idWlsZF9sb2dzOiBbXG4gICAgICBcIltJTkZPXSBTdGFydGluZyBjaXJjdWl0IEpTT04gYnVpbGQuLi5cIixcbiAgICAgIFwiW0lORk9dIEFuYWx5emluZyBjb21wb25lbnQgc3RydWN0dXJlXCIsXG4gICAgICBcIltJTkZPXSBHZW5lcmF0aW5nIHBvcnQgY29uZmlndXJhdGlvbnNcIixcbiAgICAgIFwiW0lORk9dIFZhbGlkYXRpbmcgY2lyY3VpdCBjb25uZWN0aW9uc1wiLFxuICAgICAgXCJbU1VDQ0VTU10gQ2lyY3VpdCBKU09OIGJ1aWxkIGNvbXBsZXRlZFwiLFxuICAgIF0sXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2Vycm9yOiBudWxsLFxuICAgIGJ1aWxkX2luX3Byb2dyZXNzOiBmYWxzZSxcbiAgICBidWlsZF9zdGFydGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTAwMDApLnRvSVNPU3RyaW5nKCksIC8vIFN0YXJ0ZWQgMTAgc2Vjb25kcyBhZ29cbiAgICBidWlsZF9jb21wbGV0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwgLy8gSnVzdCBjb21wbGV0ZWRcbiAgICBidWlsZF9lcnJvcjogbnVsbCxcbiAgICBidWlsZF9lcnJvcl9sYXN0X3VwZGF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBidWlsZF9sb2dzOlxuICAgICAgXCJCdWlsZCBwcm9jZXNzOlxcblwiICtcbiAgICAgIFwiMS4gRW52aXJvbm1lbnQgc2V0dXAgLSBPS1xcblwiICtcbiAgICAgIFwiMi4gRGVwZW5kZW5jeSByZXNvbHV0aW9uIC0gT0tcXG5cIiArXG4gICAgICBcIjMuIENvZGUgY29tcGlsYXRpb24gLSBPS1xcblwiICtcbiAgICAgIFwiNC4gQ2lyY3VpdCB2YWxpZGF0aW9uIC0gT0tcXG5cIiArXG4gICAgICBcIjUuIFBhY2thZ2UgYXNzZW1ibHkgLSBPS1xcblwiICtcbiAgICAgIFwiQnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiLFxuICB9KVxuXG4gIC8vIERlZmluZSB0aGUgQHRzY2kvc2V2ZWliYXIuYTU1NXRpbWVyIHBhY2thZ2VcbiAgZGIuYWRkU25pcHBldCh7XG4gICAgbmFtZTogXCJzZXZlaWJhci9hNTU1dGltZXJcIixcbiAgICB1bnNjb3BlZF9uYW1lOiBcImE1NTV0aW1lclwiLFxuICAgIG93bmVyX25hbWU6IFwic2V2ZWliYXJcIixcbiAgICBjb2RlOiBgXG5leHBvcnQgY29uc3QgQTU1NVRpbWVyID0gKHsgbmFtZSB9OiB7IG5hbWU6IHN0cmluZyB9KSA9PiAoXG4gIDxjaGlwIG5hbWU9e25hbWV9IGZvb3RwcmludD1cImRpcDhcIiAvPlxuKVxuYC50cmltKCksXG4gICAgZHRzOiBgXG5kZWNsYXJlIG1vZHVsZSBcIkB0c2NpL3NldmVpYmFyLmE1NTV0aW1lclwiIHtcbiAgZXhwb3J0IGNvbnN0IEE1NTVUaW1lcjogKHsgbmFtZSB9OiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICB9KSA9PiBhbnk7XG59XG5gLnRyaW0oKSxcbiAgICBjb21waWxlZF9qczogYFxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkE1NTVUaW1lciA9IHZvaWQgMDtcbmNvbnN0IEE1NTVUaW1lciA9ICh7XG4gIG5hbWVcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2hpcFwiLCB7XG4gIG5hbWU6IG5hbWUsXG4gIGZvb3RwcmludDogXCJkaXA4XCJcbn0pO1xuZXhwb3J0cy5BNTU1VGltZXIgPSBBNTU1VGltZXI7XG4gICAgYC50cmltKCksXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBzbmlwcGV0X3R5cGU6IFwicGFja2FnZVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkEgc2ltcGxlIHBhY2thZ2Ugd2l0aCBhbiBBNTU1IFRpbWVyIGNvbXBvbmVudFwiLFxuICAgIGNpcmN1aXRfanNvbjogW1xuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9wb3J0XCIsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzBcIixcbiAgICAgICAgbmFtZTogXCJwaW4xXCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDEsXG4gICAgICAgIHBvcnRfaGludHM6IFtcInBpbjFcIiwgXCIxXCJdLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8xXCIsXG4gICAgICAgIG5hbWU6IFwicGluMlwiLFxuICAgICAgICBwaW5fbnVtYmVyOiAyLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW4yXCIsIFwiMlwiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX3BvcnRcIixcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMlwiLFxuICAgICAgICBuYW1lOiBcInBpbjNcIixcbiAgICAgICAgcGluX251bWJlcjogMyxcbiAgICAgICAgcG9ydF9oaW50czogW1wicGluM1wiLCBcIjNcIl0sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9wb3J0XCIsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzNcIixcbiAgICAgICAgbmFtZTogXCJwaW40XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDQsXG4gICAgICAgIHBvcnRfaGludHM6IFtcInBpbjRcIiwgXCI0XCJdLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF80XCIsXG4gICAgICAgIG5hbWU6IFwicGluNVwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA1LFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW41XCIsIFwiNVwiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX3BvcnRcIixcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfNVwiLFxuICAgICAgICBuYW1lOiBcInBpbjZcIixcbiAgICAgICAgcGluX251bWJlcjogNixcbiAgICAgICAgcG9ydF9oaW50czogW1wicGluNlwiLCBcIjZcIl0sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9wb3J0XCIsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzZcIixcbiAgICAgICAgbmFtZTogXCJwaW43XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDcsXG4gICAgICAgIHBvcnRfaGludHM6IFtcInBpbjdcIiwgXCI3XCJdLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF83XCIsXG4gICAgICAgIG5hbWU6IFwicGluOFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA4LFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW44XCIsIFwiOFwiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX2NvbXBvbmVudFwiLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgICBmdHlwZTogXCJzaW1wbGVfY2hpcFwiLFxuICAgICAgICBuYW1lOiBcIlUxXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19jb21wb25lbnRcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICB9LFxuICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgc2l6ZToge1xuICAgICAgICAgIHdpZHRoOiAxLjEsXG4gICAgICAgICAgaGVpZ2h0OiAxLFxuICAgICAgICB9LFxuICAgICAgICBwaW5fc3BhY2luZzogMC4yLFxuICAgICAgICBwb3J0X2xhYmVsczoge30sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzBcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogLTAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAwLjMwMDAwMDAwMDAwMDAwMDA0LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8wXCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwibGVmdFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcImxlZnRcIixcbiAgICAgICAgcGluX251bWJlcjogMSxcbiAgICAgICAgdHJ1ZV9jY3dfaW5kZXg6IDAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzFcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogLTAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAwLjEwMDAwMDAwMDAwMDAwMDAzLFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8xXCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwibGVmdFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcImxlZnRcIixcbiAgICAgICAgcGluX251bWJlcjogMixcbiAgICAgICAgdHJ1ZV9jY3dfaW5kZXg6IDEsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzJcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogLTAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAtMC4wOTk5OTk5OTk5OTk5OTk5OCxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMlwiLFxuICAgICAgICBmYWNpbmdfZGlyZWN0aW9uOiBcImxlZnRcIixcbiAgICAgICAgZGlzdGFuY2VfZnJvbV9jb21wb25lbnRfZWRnZTogMC40LFxuICAgICAgICBzaWRlX29mX2NvbXBvbmVudDogXCJsZWZ0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDMsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiAyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF8zXCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IC0wLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogLTAuMzAwMDAwMDAwMDAwMDAwMDQsXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzNcIixcbiAgICAgICAgZmFjaW5nX2RpcmVjdGlvbjogXCJsZWZ0XCIsXG4gICAgICAgIGRpc3RhbmNlX2Zyb21fY29tcG9uZW50X2VkZ2U6IDAuNCxcbiAgICAgICAgc2lkZV9vZl9jb21wb25lbnQ6IFwibGVmdFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA0LFxuICAgICAgICB0cnVlX2Njd19pbmRleDogMyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic2NoZW1hdGljX3BvcnRcIixcbiAgICAgICAgc2NoZW1hdGljX3BvcnRfaWQ6IFwic2NoZW1hdGljX3BvcnRfNFwiLFxuICAgICAgICBzY2hlbWF0aWNfY29tcG9uZW50X2lkOiBcInNjaGVtYXRpY19jb21wb25lbnRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAwLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogLTAuMzAwMDAwMDAwMDAwMDAwMDQsXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzRcIixcbiAgICAgICAgZmFjaW5nX2RpcmVjdGlvbjogXCJyaWdodFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcInJpZ2h0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDUsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiA0LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF81XCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IDAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAtMC4xMDAwMDAwMDAwMDAwMDAwMyxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfNVwiLFxuICAgICAgICBmYWNpbmdfZGlyZWN0aW9uOiBcInJpZ2h0XCIsXG4gICAgICAgIGRpc3RhbmNlX2Zyb21fY29tcG9uZW50X2VkZ2U6IDAuNCxcbiAgICAgICAgc2lkZV9vZl9jb21wb25lbnQ6IFwicmlnaHRcIixcbiAgICAgICAgcGluX251bWJlcjogNixcbiAgICAgICAgdHJ1ZV9jY3dfaW5kZXg6IDUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzZcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogMC45NTAwMDAwMDAwMDAwMDAxLFxuICAgICAgICAgIHk6IDAuMDk5OTk5OTk5OTk5OTk5OTgsXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzZcIixcbiAgICAgICAgZmFjaW5nX2RpcmVjdGlvbjogXCJyaWdodFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcInJpZ2h0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDcsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiA2LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF83XCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IDAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAwLjMwMDAwMDAwMDAwMDAwMDA0LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF83XCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwicmlnaHRcIixcbiAgICAgICAgZGlzdGFuY2VfZnJvbV9jb21wb25lbnRfZWRnZTogMC40LFxuICAgICAgICBzaWRlX29mX2NvbXBvbmVudDogXCJyaWdodFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA4LFxuICAgICAgICB0cnVlX2Njd19pbmRleDogNyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX2NvbXBvbmVudFwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIHdpZHRoOiA4LjgyLFxuICAgICAgICBoZWlnaHQ6IDguODIsXG4gICAgICAgIGxheWVyOiBcInRvcFwiLFxuICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX2JvYXJkXCIsXG4gICAgICAgIHBjYl9ib2FyZF9pZDogXCJwY2JfYm9hcmRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIHRoaWNrbmVzczogMS40LFxuICAgICAgICBudW1fbGF5ZXJzOiA0LFxuICAgICAgICB3aWR0aDogNTAsXG4gICAgICAgIGhlaWdodDogNTAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wbGF0ZWRfaG9sZVwiLFxuICAgICAgICBwY2JfcGxhdGVkX2hvbGVfaWQ6IFwicGNiX3BsYXRlZF9ob2xlXzBcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfMFwiLFxuICAgICAgICBvdXRlcl9kaWFtZXRlcjogMS4yLFxuICAgICAgICBob2xlX2RpYW1ldGVyOiAxLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcG9ydF9oaW50czogW1wiMVwiXSxcbiAgICAgICAgeDogLTMuODEsXG4gICAgICAgIHk6IDMuODEsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiYm90dG9tXCJdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcGxhdGVkX2hvbGVcIixcbiAgICAgICAgcGNiX3BsYXRlZF9ob2xlX2lkOiBcInBjYl9wbGF0ZWRfaG9sZV8xXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzFcIixcbiAgICAgICAgb3V0ZXJfZGlhbWV0ZXI6IDEuMixcbiAgICAgICAgaG9sZV9kaWFtZXRlcjogMSxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBvcnRfaGludHM6IFtcIjJcIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAxLjI3LFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfMlwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8yXCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCIzXCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogLTEuMjcsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiYm90dG9tXCJdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcGxhdGVkX2hvbGVcIixcbiAgICAgICAgcGNiX3BsYXRlZF9ob2xlX2lkOiBcInBjYl9wbGF0ZWRfaG9sZV8zXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzNcIixcbiAgICAgICAgb3V0ZXJfZGlhbWV0ZXI6IDEuMixcbiAgICAgICAgaG9sZV9kaWFtZXRlcjogMSxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBvcnRfaGludHM6IFtcIjRcIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAtMy44MSxcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wbGF0ZWRfaG9sZVwiLFxuICAgICAgICBwY2JfcGxhdGVkX2hvbGVfaWQ6IFwicGNiX3BsYXRlZF9ob2xlXzRcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNFwiLFxuICAgICAgICBvdXRlcl9kaWFtZXRlcjogMS4yLFxuICAgICAgICBob2xlX2RpYW1ldGVyOiAxLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcG9ydF9oaW50czogW1wiNVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogLTMuODEsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiYm90dG9tXCJdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcGxhdGVkX2hvbGVcIixcbiAgICAgICAgcGNiX3BsYXRlZF9ob2xlX2lkOiBcInBjYl9wbGF0ZWRfaG9sZV81XCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzVcIixcbiAgICAgICAgb3V0ZXJfZGlhbWV0ZXI6IDEuMixcbiAgICAgICAgaG9sZV9kaWFtZXRlcjogMSxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBvcnRfaGludHM6IFtcIjZcIl0sXG4gICAgICAgIHg6IDMuODEsXG4gICAgICAgIHk6IC0xLjI3LFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfNlwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF82XCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCI3XCJdLFxuICAgICAgICB4OiAzLjgxLFxuICAgICAgICB5OiAxLjI3LFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfN1wiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF83XCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCI4XCJdLFxuICAgICAgICB4OiAzLjgxLFxuICAgICAgICB5OiAzLjgxLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3NpbGtzY3JlZW5fcGF0aFwiLFxuICAgICAgICBwY2Jfc2lsa3NjcmVlbl9wYXRoX2lkOiBcInBjYl9zaWxrc2NyZWVuX3BhdGhfMFwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcjogXCJ0b3BcIixcbiAgICAgICAgcm91dGU6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAtMy4wMSxcbiAgICAgICAgICAgIHk6IC00LjYxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTMuMDEsXG4gICAgICAgICAgICB5OiA0LjYxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTEuMDAzMzMzMzMzMzMzMzMzMixcbiAgICAgICAgICAgIHk6IDQuNjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAtMC45MjY5NTkxMzA5NTI5OTA5LFxuICAgICAgICAgICAgeTogNC4yMjYwNDA5NTYxOTM2OTMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAtMC43MDk0NjM4MDM3OTA1MDI2LFxuICAgICAgICAgICAgeTogMy45MDA1MzYxOTYyMDk0OTc4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTAuMzgzOTU5MDQzODA2MzA2NyxcbiAgICAgICAgICAgIHk6IDMuNjgzMDQwODY5MDQ3MDA5NixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDYuMTQzNjQ0Nzc1NzIyNTU2ZS0xNyxcbiAgICAgICAgICAgIHk6IDMuNjA2NjY2NjY2NjY2NjY3NCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDAuMzgzOTU5MDQzODA2MzA2NzQsXG4gICAgICAgICAgICB5OiAzLjY4MzA0MDg2OTA0NzAwOTYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAwLjcwOTQ2MzgwMzc5MDUwMjcsXG4gICAgICAgICAgICB5OiAzLjkwMDUzNjE5NjIwOTQ5NzgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAwLjkyNjk1OTEzMDk1Mjk5MDksXG4gICAgICAgICAgICB5OiA0LjIyNjA0MDk1NjE5MzY5MyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDEuMDAzMzMzMzMzMzMzMzMzMixcbiAgICAgICAgICAgIHk6IDQuNjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAzLjAxLFxuICAgICAgICAgICAgeTogNC42MSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDMuMDEsXG4gICAgICAgICAgICB5OiAtNC42MSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IC0zLjAxLFxuICAgICAgICAgICAgeTogLTQuNjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc3Ryb2tlX3dpZHRoOiAwLjEsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzBcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAzLjgxLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzFcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAxLjI3LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8xXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzJcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAtMS4yNyxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMlwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcG9ydFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8zXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiaW5uZXIxXCIsIFwiaW5uZXIyXCIsIFwiYm90dG9tXCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogLTMuODEsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzNcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BvcnRcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNFwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImlubmVyMVwiLCBcImlubmVyMlwiLCBcImJvdHRvbVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogLTMuODEsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzRcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BvcnRcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNVwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImlubmVyMVwiLCBcImlubmVyMlwiLCBcImJvdHRvbVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogLTEuMjcsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzVcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BvcnRcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNlwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImlubmVyMVwiLCBcImlubmVyMlwiLCBcImJvdHRvbVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogMS4yNyxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfNlwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcG9ydFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF83XCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiaW5uZXIxXCIsIFwiaW5uZXIyXCIsIFwiYm90dG9tXCJdLFxuICAgICAgICB4OiAzLjgxLFxuICAgICAgICB5OiAzLjgxLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF83XCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImNhZF9jb21wb25lbnRcIixcbiAgICAgICAgY2FkX2NvbXBvbmVudF9pZDogXCJjYWRfY29tcG9uZW50XzBcIixcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgejogMC43LFxuICAgICAgICB9LFxuICAgICAgICByb3RhdGlvbjoge1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMCxcbiAgICAgICAgICB6OiAwLFxuICAgICAgICB9LFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgICBmb290cHJpbnRlcl9zdHJpbmc6IFwiZGlwOFwiLFxuICAgICAgfSxcbiAgICBdLFxuICB9KVxuXG4gIC8vIEFkZCBhIHNuaXBwZXQgdGhhdCBvdXRwdXRzIGEgc3F1YXJlIHdhdmVmb3JtIHVzaW5nIHRoZSBhNTU1dGltZXJcblxuICBjb25zdCB7IHBhY2thZ2VfcmVsZWFzZV9pZDogcGFja2FnZVJlbGVhc2VJZDIgfSA9IGRiLmFkZFNuaXBwZXQoe1xuICAgIG5hbWU6IFwidGVzdHVzZXIvYTU1NXRpbWVyLXNxdWFyZS13YXZlXCIsXG4gICAgdW5zY29wZWRfbmFtZTogXCJhNTU1dGltZXItc3F1YXJlLXdhdmVcIixcbiAgICBvd25lcl9uYW1lOiBcInRlc3R1c2VyXCIsXG4gICAgYnJhbmNoX25hbWU6IFwibWFpblwiLFxuICAgIGNvbW1pdF9tZXNzYWdlOiBcIkF0dGVtcHRlZCBidWlsZCBvZiBhNTU1dGltZXItc3F1YXJlLXdhdmUgcGFja2FnZVwiLFxuICAgIGNvbW1pdF9hdXRob3I6IFwidGVzdHVzZXJcIixcbiAgICBjcmVhdG9yX2FjY291bnRfaWQ6IGFjY291bnRfaWQsXG4gICAgY29kZTogYFxuaW1wb3J0IHsgQTU1NVRpbWVyIH0gZnJvbSBcIkB0c2NpL3NldmVpYmFyLmE1NTV0aW1lclwiXG5cbmV4cG9ydCBjb25zdCBTcXVhcmVXYXZlTW9kdWxlID0gKCkgPT4gKFxuICA8QTU1NVRpbWVyIG5hbWU9XCJVMVwiIC8+XG4pXG5gLnRyaW0oKSxcbiAgICBkdHM6ICdleHBvcnQgZGVjbGFyZSBjb25zdCBTcXVhcmVXYXZlTW9kdWxlOiAoKSA9PiBpbXBvcnQoXCJyZWFjdC9qc3gtcnVudGltZVwiKS5KU1guRWxlbWVudDtcXG4nLFxuICAgIGNvbXBpbGVkX2pzOlxuICAgICAgJ1widXNlIHN0cmljdFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xcbiAgdmFsdWU6IHRydWVcXG59KTtcXG5leHBvcnRzLlNxdWFyZVdhdmVNb2R1bGUgPSB2b2lkIDA7XFxudmFyIF9zZXZlaWJhciA9IHJlcXVpcmUoXCJAdHNjaS9zZXZlaWJhci5hNTU1dGltZXJcIik7XFxuY29uc3QgU3F1YXJlV2F2ZU1vZHVsZSA9ICgpID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KF9zZXZlaWJhci5BNTU1VGltZXIsIHtcXG4gIG5hbWU6IFwiVTFcIlxcbn0pO1xcbmV4cG9ydHMuU3F1YXJlV2F2ZU1vZHVsZSA9IFNxdWFyZVdhdmVNb2R1bGU7JyxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHNuaXBwZXRfdHlwZTogXCJwYWNrYWdlXCIsXG4gICAgZ2l0aHViX3JlcG9fZnVsbF9uYW1lOiBcInRlc3R1c2VyL3Rlc3RcIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiQSBzaW1wbGUgcGFja2FnZSB0aGF0IG91dHB1dHMgYSBzcXVhcmUgd2F2ZWZvcm0gdXNpbmcgdGhlIGE1NTV0aW1lclwiLFxuICAgIGNpcmN1aXRfanNvbjogW1xuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9wb3J0XCIsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzBcIixcbiAgICAgICAgbmFtZTogXCJwaW4xXCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDEsXG4gICAgICAgIHBvcnRfaGludHM6IFtcInBpbjFcIiwgXCIxXCJdLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8xXCIsXG4gICAgICAgIG5hbWU6IFwicGluMlwiLFxuICAgICAgICBwaW5fbnVtYmVyOiAyLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW4yXCIsIFwiMlwiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX3BvcnRcIixcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMlwiLFxuICAgICAgICBuYW1lOiBcInBpbjNcIixcbiAgICAgICAgcGluX251bWJlcjogMyxcbiAgICAgICAgcG9ydF9oaW50czogW1wicGluM1wiLCBcIjNcIl0sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9wb3J0XCIsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzNcIixcbiAgICAgICAgbmFtZTogXCJwaW40XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDQsXG4gICAgICAgIHBvcnRfaGludHM6IFtcInBpbjRcIiwgXCI0XCJdLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF80XCIsXG4gICAgICAgIG5hbWU6IFwicGluNVwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA1LFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW41XCIsIFwiNVwiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX3BvcnRcIixcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfNVwiLFxuICAgICAgICBuYW1lOiBcInBpbjZcIixcbiAgICAgICAgcGluX251bWJlcjogNixcbiAgICAgICAgcG9ydF9oaW50czogW1wicGluNlwiLCBcIjZcIl0sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9wb3J0XCIsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzZcIixcbiAgICAgICAgbmFtZTogXCJwaW43XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDcsXG4gICAgICAgIHBvcnRfaGludHM6IFtcInBpbjdcIiwgXCI3XCJdLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF83XCIsXG4gICAgICAgIG5hbWU6IFwicGluOFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA4LFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW44XCIsIFwiOFwiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX2NvbXBvbmVudFwiLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgICBmdHlwZTogXCJzaW1wbGVfY2hpcFwiLFxuICAgICAgICBuYW1lOiBcIlUxXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19jb21wb25lbnRcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICB9LFxuICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgc2l6ZToge1xuICAgICAgICAgIHdpZHRoOiAxLjEsXG4gICAgICAgICAgaGVpZ2h0OiAxLFxuICAgICAgICB9LFxuICAgICAgICBwaW5fc3BhY2luZzogMC4yLFxuICAgICAgICBwb3J0X2xhYmVsczoge30sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzBcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogLTAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAwLjMwMDAwMDAwMDAwMDAwMDA0LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8wXCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwibGVmdFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcImxlZnRcIixcbiAgICAgICAgcGluX251bWJlcjogMSxcbiAgICAgICAgdHJ1ZV9jY3dfaW5kZXg6IDAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzFcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogLTAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAwLjEwMDAwMDAwMDAwMDAwMDAzLFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8xXCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwibGVmdFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcImxlZnRcIixcbiAgICAgICAgcGluX251bWJlcjogMixcbiAgICAgICAgdHJ1ZV9jY3dfaW5kZXg6IDEsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzJcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogLTAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAtMC4wOTk5OTk5OTk5OTk5OTk5OCxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMlwiLFxuICAgICAgICBmYWNpbmdfZGlyZWN0aW9uOiBcImxlZnRcIixcbiAgICAgICAgZGlzdGFuY2VfZnJvbV9jb21wb25lbnRfZWRnZTogMC40LFxuICAgICAgICBzaWRlX29mX2NvbXBvbmVudDogXCJsZWZ0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDMsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiAyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF8zXCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IC0wLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogLTAuMzAwMDAwMDAwMDAwMDAwMDQsXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzNcIixcbiAgICAgICAgZmFjaW5nX2RpcmVjdGlvbjogXCJsZWZ0XCIsXG4gICAgICAgIGRpc3RhbmNlX2Zyb21fY29tcG9uZW50X2VkZ2U6IDAuNCxcbiAgICAgICAgc2lkZV9vZl9jb21wb25lbnQ6IFwibGVmdFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA0LFxuICAgICAgICB0cnVlX2Njd19pbmRleDogMyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic2NoZW1hdGljX3BvcnRcIixcbiAgICAgICAgc2NoZW1hdGljX3BvcnRfaWQ6IFwic2NoZW1hdGljX3BvcnRfNFwiLFxuICAgICAgICBzY2hlbWF0aWNfY29tcG9uZW50X2lkOiBcInNjaGVtYXRpY19jb21wb25lbnRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAwLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogLTAuMzAwMDAwMDAwMDAwMDAwMDQsXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzRcIixcbiAgICAgICAgZmFjaW5nX2RpcmVjdGlvbjogXCJyaWdodFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcInJpZ2h0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDUsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiA0LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF81XCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IDAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAtMC4xMDAwMDAwMDAwMDAwMDAwMyxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfNVwiLFxuICAgICAgICBmYWNpbmdfZGlyZWN0aW9uOiBcInJpZ2h0XCIsXG4gICAgICAgIGRpc3RhbmNlX2Zyb21fY29tcG9uZW50X2VkZ2U6IDAuNCxcbiAgICAgICAgc2lkZV9vZl9jb21wb25lbnQ6IFwicmlnaHRcIixcbiAgICAgICAgcGluX251bWJlcjogNixcbiAgICAgICAgdHJ1ZV9jY3dfaW5kZXg6IDUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzZcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogMC45NTAwMDAwMDAwMDAwMDAxLFxuICAgICAgICAgIHk6IDAuMDk5OTk5OTk5OTk5OTk5OTgsXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzZcIixcbiAgICAgICAgZmFjaW5nX2RpcmVjdGlvbjogXCJyaWdodFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcInJpZ2h0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDcsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiA2LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF83XCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IDAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAwLjMwMDAwMDAwMDAwMDAwMDA0LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF83XCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwicmlnaHRcIixcbiAgICAgICAgZGlzdGFuY2VfZnJvbV9jb21wb25lbnRfZWRnZTogMC40LFxuICAgICAgICBzaWRlX29mX2NvbXBvbmVudDogXCJyaWdodFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA4LFxuICAgICAgICB0cnVlX2Njd19pbmRleDogNyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX2NvbXBvbmVudFwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIHdpZHRoOiA4LjgyLFxuICAgICAgICBoZWlnaHQ6IDguODIsXG4gICAgICAgIGxheWVyOiBcInRvcFwiLFxuICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX2JvYXJkXCIsXG4gICAgICAgIHBjYl9ib2FyZF9pZDogXCJwY2JfYm9hcmRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIHRoaWNrbmVzczogMS40LFxuICAgICAgICBudW1fbGF5ZXJzOiA0LFxuICAgICAgICB3aWR0aDogNTAsXG4gICAgICAgIGhlaWdodDogNTAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wbGF0ZWRfaG9sZVwiLFxuICAgICAgICBwY2JfcGxhdGVkX2hvbGVfaWQ6IFwicGNiX3BsYXRlZF9ob2xlXzBcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfMFwiLFxuICAgICAgICBvdXRlcl9kaWFtZXRlcjogMS4yLFxuICAgICAgICBob2xlX2RpYW1ldGVyOiAxLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcG9ydF9oaW50czogW1wiMVwiXSxcbiAgICAgICAgeDogLTMuODEsXG4gICAgICAgIHk6IDMuODEsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiYm90dG9tXCJdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcGxhdGVkX2hvbGVcIixcbiAgICAgICAgcGNiX3BsYXRlZF9ob2xlX2lkOiBcInBjYl9wbGF0ZWRfaG9sZV8xXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzFcIixcbiAgICAgICAgb3V0ZXJfZGlhbWV0ZXI6IDEuMixcbiAgICAgICAgaG9sZV9kaWFtZXRlcjogMSxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBvcnRfaGludHM6IFtcIjJcIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAxLjI3LFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfMlwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8yXCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCIzXCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogLTEuMjcsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiYm90dG9tXCJdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcGxhdGVkX2hvbGVcIixcbiAgICAgICAgcGNiX3BsYXRlZF9ob2xlX2lkOiBcInBjYl9wbGF0ZWRfaG9sZV8zXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzNcIixcbiAgICAgICAgb3V0ZXJfZGlhbWV0ZXI6IDEuMixcbiAgICAgICAgaG9sZV9kaWFtZXRlcjogMSxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBvcnRfaGludHM6IFtcIjRcIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAtMy44MSxcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wbGF0ZWRfaG9sZVwiLFxuICAgICAgICBwY2JfcGxhdGVkX2hvbGVfaWQ6IFwicGNiX3BsYXRlZF9ob2xlXzRcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNFwiLFxuICAgICAgICBvdXRlcl9kaWFtZXRlcjogMS4yLFxuICAgICAgICBob2xlX2RpYW1ldGVyOiAxLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcG9ydF9oaW50czogW1wiNVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogLTMuODEsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiYm90dG9tXCJdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcGxhdGVkX2hvbGVcIixcbiAgICAgICAgcGNiX3BsYXRlZF9ob2xlX2lkOiBcInBjYl9wbGF0ZWRfaG9sZV81XCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzVcIixcbiAgICAgICAgb3V0ZXJfZGlhbWV0ZXI6IDEuMixcbiAgICAgICAgaG9sZV9kaWFtZXRlcjogMSxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBvcnRfaGludHM6IFtcIjZcIl0sXG4gICAgICAgIHg6IDMuODEsXG4gICAgICAgIHk6IC0xLjI3LFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfNlwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF82XCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCI3XCJdLFxuICAgICAgICB4OiAzLjgxLFxuICAgICAgICB5OiAxLjI3LFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfN1wiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF83XCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCI4XCJdLFxuICAgICAgICB4OiAzLjgxLFxuICAgICAgICB5OiAzLjgxLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3NpbGtzY3JlZW5fcGF0aFwiLFxuICAgICAgICBwY2Jfc2lsa3NjcmVlbl9wYXRoX2lkOiBcInBjYl9zaWxrc2NyZWVuX3BhdGhfMFwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcjogXCJ0b3BcIixcbiAgICAgICAgcm91dGU6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAtMy4wMSxcbiAgICAgICAgICAgIHk6IC00LjYxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTMuMDEsXG4gICAgICAgICAgICB5OiA0LjYxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTEuMDAzMzMzMzMzMzMzMzMzMixcbiAgICAgICAgICAgIHk6IDQuNjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAtMC45MjY5NTkxMzA5NTI5OTA5LFxuICAgICAgICAgICAgeTogNC4yMjYwNDA5NTYxOTM2OTMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAtMC43MDk0NjM4MDM3OTA1MDI2LFxuICAgICAgICAgICAgeTogMy45MDA1MzYxOTYyMDk0OTc4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTAuMzgzOTU5MDQzODA2MzA2NyxcbiAgICAgICAgICAgIHk6IDMuNjgzMDQwODY5MDQ3MDA5NixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDYuMTQzNjQ0Nzc1NzIyNTU2ZS0xNyxcbiAgICAgICAgICAgIHk6IDMuNjA2NjY2NjY2NjY2NjY3NCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDAuMzgzOTU5MDQzODA2MzA2NzQsXG4gICAgICAgICAgICB5OiAzLjY4MzA0MDg2OTA0NzAwOTYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAwLjcwOTQ2MzgwMzc5MDUwMjcsXG4gICAgICAgICAgICB5OiAzLjkwMDUzNjE5NjIwOTQ5NzgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAwLjkyNjk1OTEzMDk1Mjk5MDksXG4gICAgICAgICAgICB5OiA0LjIyNjA0MDk1NjE5MzY5MyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDEuMDAzMzMzMzMzMzMzMzMzMixcbiAgICAgICAgICAgIHk6IDQuNjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAzLjAxLFxuICAgICAgICAgICAgeTogNC42MSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDMuMDEsXG4gICAgICAgICAgICB5OiAtNC42MSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IC0zLjAxLFxuICAgICAgICAgICAgeTogLTQuNjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc3Ryb2tlX3dpZHRoOiAwLjEsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzBcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAzLjgxLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzFcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAxLjI3LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8xXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzJcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAtMS4yNyxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMlwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcG9ydFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8zXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiaW5uZXIxXCIsIFwiaW5uZXIyXCIsIFwiYm90dG9tXCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogLTMuODEsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzNcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BvcnRcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNFwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImlubmVyMVwiLCBcImlubmVyMlwiLCBcImJvdHRvbVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogLTMuODEsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzRcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BvcnRcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNVwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImlubmVyMVwiLCBcImlubmVyMlwiLCBcImJvdHRvbVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogLTEuMjcsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzVcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BvcnRcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNlwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImlubmVyMVwiLCBcImlubmVyMlwiLCBcImJvdHRvbVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogMS4yNyxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfNlwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcG9ydFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF83XCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiaW5uZXIxXCIsIFwiaW5uZXIyXCIsIFwiYm90dG9tXCJdLFxuICAgICAgICB4OiAzLjgxLFxuICAgICAgICB5OiAzLjgxLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF83XCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImNhZF9jb21wb25lbnRcIixcbiAgICAgICAgY2FkX2NvbXBvbmVudF9pZDogXCJjYWRfY29tcG9uZW50XzBcIixcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgejogMC43LFxuICAgICAgICB9LFxuICAgICAgICByb3RhdGlvbjoge1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMCxcbiAgICAgICAgICB6OiAwLFxuICAgICAgICB9LFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgICBmb290cHJpbnRlcl9zdHJpbmc6IFwiZGlwOFwiLFxuICAgICAgfSxcbiAgICBdLFxuICB9KVxuXG4gIC8vIEFkZCBmYWlsZWQgYnVpbGQgZmlyc3RcbiAgY29uc3QgZmFpbGVkQnVpbGQgPSBkYi5hZGRQYWNrYWdlQnVpbGQoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogcGFja2FnZVJlbGVhc2VJZDIsXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDE1MDAwKS50b0lTT1N0cmluZygpLCAvLyAxNSBzZWNvbmRzIGFnb1xuICAgIHRyYW5zcGlsYXRpb25faW5fcHJvZ3Jlc3M6IGZhbHNlLFxuICAgIHRyYW5zcGlsYXRpb25fc3RhcnRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDE1MDAwKS50b0lTT1N0cmluZygpLFxuICAgIHRyYW5zcGlsYXRpb25fY29tcGxldGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTQwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgdHJhbnNwaWxhdGlvbl9sb2dzOiBbXG4gICAgICBcIltJTkZPXSBTdGFydGluZyB0cmFuc3BpbGF0aW9uLi4uXCIsXG4gICAgICBcIltJTkZPXSBQYXJzaW5nIHBhY2thZ2UgY29kZVwiLFxuICAgICAgXCJbRVJST1JdIEZhaWxlZCB0byBwYXJzZSBUeXBlU2NyaXB0IGRlZmluaXRpb25zXCIsXG4gICAgICBcIltFUlJPUl0gSW52YWxpZCBzeW50YXggaW4gY29tcG9uZW50IGRlY2xhcmF0aW9uXCIsXG4gICAgXSxcbiAgICB0cmFuc3BpbGF0aW9uX2Vycm9yOlxuICAgICAgXCJUeXBlU2NyaXB0IGNvbXBpbGF0aW9uIGZhaWxlZDogU3ludGF4IGVycm9yIGluIGNvbXBvbmVudCBkZWNsYXJhdGlvblwiLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9pbl9wcm9ncmVzczogZmFsc2UsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX3N0YXJ0ZWRfYXQ6IG51bGwsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2NvbXBsZXRlZF9hdDogbnVsbCxcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfbG9nczogW10sXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2Vycm9yOiBcIkJ1aWxkIGNhbmNlbGxlZCBkdWUgdG8gdHJhbnNwaWxhdGlvbiBmYWlsdXJlXCIsXG4gICAgYnVpbGRfaW5fcHJvZ3Jlc3M6IGZhbHNlLFxuICAgIGJ1aWxkX3N0YXJ0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxNTAwMCkudG9JU09TdHJpbmcoKSxcbiAgICBidWlsZF9jb21wbGV0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxNDAwMCkudG9JU09TdHJpbmcoKSxcbiAgICBidWlsZF9lcnJvcjogXCJCdWlsZCBmYWlsZWQ6IFVuYWJsZSB0byBjb21wbGV0ZSB0cmFuc3BpbGF0aW9uIHN0ZXBcIixcbiAgICBidWlsZF9lcnJvcl9sYXN0X3VwZGF0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxNDAwMCkudG9JU09TdHJpbmcoKSxcbiAgICBwcmV2aWV3X3VybDogbnVsbCxcbiAgICBidWlsZF9sb2dzOlxuICAgICAgXCJCdWlsZCBwcm9jZXNzOlxcblwiICtcbiAgICAgIFwiMS4gRW52aXJvbm1lbnQgc2V0dXAgLSBPS1xcblwiICtcbiAgICAgIFwiMi4gRGVwZW5kZW5jeSByZXNvbHV0aW9uIC0gT0tcXG5cIiArXG4gICAgICBcIjMuIENvZGUgY29tcGlsYXRpb24gLSBGQUlMRURcXG5cIiArXG4gICAgICBcIkVycm9yOiBJbnZhbGlkIHN5bnRheCBpbiBjb21wb25lbnQgZGVjbGFyYXRpb25cXG5cIiArXG4gICAgICBcIkJ1aWxkIHRlcm1pbmF0ZWQgd2l0aCBlcnJvcnNcIixcbiAgfSlcblxuICAvLyBBZGQgc3VjY2Vzc2Z1bCBidWlsZFxuICBjb25zdCBzdWNjZXNzZnVsQnVpbGQgPSBkYi5hZGRQYWNrYWdlQnVpbGQoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogcGFja2FnZVJlbGVhc2VJZDIsXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHRyYW5zcGlsYXRpb25faW5fcHJvZ3Jlc3M6IGZhbHNlLFxuICAgIHRyYW5zcGlsYXRpb25fc3RhcnRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDUwMDApLnRvSVNPU3RyaW5nKCksIC8vIFN0YXJ0ZWQgNSBzZWNvbmRzIGFnb1xuICAgIHRyYW5zcGlsYXRpb25fY29tcGxldGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMzAwMCkudG9JU09TdHJpbmcoKSwgLy8gQ29tcGxldGVkIDMgc2Vjb25kcyBhZ29cbiAgICB0cmFuc3BpbGF0aW9uX2xvZ3M6IFtcbiAgICAgIFwiW0lORk9dIFN0YXJ0aW5nIHRyYW5zcGlsYXRpb24uLi5cIixcbiAgICAgIFwiW0lORk9dIFBhcnNpbmcgcGFja2FnZSBjb2RlXCIsXG4gICAgICBcIltJTkZPXSBHZW5lcmF0aW5nIFR5cGVTY3JpcHQgZGVmaW5pdGlvbnNcIixcbiAgICAgIFwiW0lORk9dIENvbXBpbGluZyB0byBKYXZhU2NyaXB0XCIsXG4gICAgICBcIltTVUNDRVNTXSBUcmFuc3BpbGF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIixcbiAgICBdLFxuICAgIHRyYW5zcGlsYXRpb25fZXJyb3I6IG51bGwsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2luX3Byb2dyZXNzOiBmYWxzZSxcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfc3RhcnRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDMwMDApLnRvSVNPU3RyaW5nKCksIC8vIFN0YXJ0ZWQgYWZ0ZXIgdHJhbnNwaWxhdGlvblxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9jb21wbGV0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxMDAwKS50b0lTT1N0cmluZygpLCAvLyBDb21wbGV0ZWQgMSBzZWNvbmQgYWdvXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2xvZ3M6IFtcbiAgICAgIFwiW0lORk9dIFN0YXJ0aW5nIGNpcmN1aXQgSlNPTiBidWlsZC4uLlwiLFxuICAgICAgXCJbSU5GT10gQW5hbHl6aW5nIGNvbXBvbmVudCBzdHJ1Y3R1cmVcIixcbiAgICAgIFwiW0lORk9dIEdlbmVyYXRpbmcgcG9ydCBjb25maWd1cmF0aW9uc1wiLFxuICAgICAgXCJbSU5GT10gVmFsaWRhdGluZyBjaXJjdWl0IGNvbm5lY3Rpb25zXCIsXG4gICAgICBcIltTVUNDRVNTXSBDaXJjdWl0IEpTT04gYnVpbGQgY29tcGxldGVkXCIsXG4gICAgXSxcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfZXJyb3I6IG51bGwsXG4gICAgYnVpbGRfaW5fcHJvZ3Jlc3M6IGZhbHNlLFxuICAgIGJ1aWxkX3N0YXJ0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxMDAwMCkudG9JU09TdHJpbmcoKSwgLy8gU3RhcnRlZCAxMCBzZWNvbmRzIGFnb1xuICAgIGJ1aWxkX2NvbXBsZXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLCAvLyBKdXN0IGNvbXBsZXRlZFxuICAgIGJ1aWxkX2Vycm9yOiBudWxsLFxuICAgIGJ1aWxkX2Vycm9yX2xhc3RfdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHByZXZpZXdfdXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9wcmV2aWV3L3BhY2thZ2VfYnVpbGRfMVwiLFxuICAgIGJ1aWxkX2xvZ3M6XG4gICAgICBcIkJ1aWxkIHByb2Nlc3M6XFxuXCIgK1xuICAgICAgXCIxLiBFbnZpcm9ubWVudCBzZXR1cCAtIE9LXFxuXCIgK1xuICAgICAgXCIyLiBEZXBlbmRlbmN5IHJlc29sdXRpb24gLSBPS1xcblwiICtcbiAgICAgIFwiMy4gQ29kZSBjb21waWxhdGlvbiAtIE9LXFxuXCIgK1xuICAgICAgXCI0LiBDaXJjdWl0IHZhbGlkYXRpb24gLSBPS1xcblwiICtcbiAgICAgIFwiNS4gUGFja2FnZSBhc3NlbWJseSAtIE9LXFxuXCIgK1xuICAgICAgXCJCdWlsZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIsXG4gIH0pXG5cbiAgLy8gVXBkYXRlIHRoZSBwYWNrYWdlIHJlbGVhc2Ugd2l0aCB0aGUgbGF0ZXN0IChzdWNjZXNzZnVsKSBidWlsZCBJRFxuICBjb25zdCByZWxlYXNlMiA9IGRiLmdldFBhY2thZ2VSZWxlYXNlQnlJZChwYWNrYWdlUmVsZWFzZUlkMikhXG4gIGRiLnVwZGF0ZVBhY2thZ2VSZWxlYXNlKHtcbiAgICAuLi5yZWxlYXNlMixcbiAgICBsYXRlc3RfcGFja2FnZV9idWlsZF9pZDogc3VjY2Vzc2Z1bEJ1aWxkLnBhY2thZ2VfYnVpbGRfaWQsXG4gIH0pXG5cbiAgZGIuYWRkT3JkZXIoe1xuICAgIGFjY291bnRfaWQsXG4gICAgaXNfcnVubmluZzogZmFsc2UsXG4gICAgaXNfc3RhcnRlZDogZmFsc2UsXG4gICAgaXNfZmluaXNoZWQ6IGZhbHNlLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGhhc19lcnJvcjogZmFsc2UsXG4gICAgY2lyY3VpdF9qc29uOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX2NvbXBvbmVudFwiLFxuICAgICAgICBmdHlwZTogXCJzaW1wbGVfcmVzaXN0b3JcIixcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzFcIixcbiAgICAgICAgbmFtZTogXCJSMVwiLFxuICAgICAgICByZXNpc3RhbmU6IFwiMWtcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgc3RhcnRlZF9hdDogbnVsbCxcbiAgICBjb21wbGV0ZWRfYXQ6IG51bGwsXG4gIH0pXG5cbiAgY29uc3QgdGVzdE9yZyA9IGRiLmFkZE9yZ2FuaXphdGlvbih7XG4gICAgb3JnX2Rpc3BsYXlfbmFtZTogXCJUZXN0IE9yZ2FuaXphdGlvblwiLFxuICAgIHRzY2lyY3VpdF9oYW5kbGU6IFwidGVzdC1vcmdhbml6YXRpb25cIixcbiAgICBnaXRodWJfaGFuZGxlOiBcInRzY2lyY3VpdFwiLFxuICAgIG93bmVyX2FjY291bnRfaWQ6IGFjY291bnRfaWQsXG4gIH0pXG5cbiAgLy8gQWRkIG9yZyBtZW1iZXJcbiAgZGIuYWRkT3JnYW5pemF0aW9uQWNjb3VudCh7XG4gICAgb3JnX2lkOiB0ZXN0T3JnLm9yZ19pZCxcbiAgICBhY2NvdW50X2lkOiBhY2NvdW50X2lkLFxuICAgIGlzX293bmVyOiB0cnVlLFxuICB9KVxuXG4gIC8vIFRlc3QgIE9yZyBQYWNrYWdlIGFkZGl0aW9uXG4gIGNvbnN0IHRlc3RPcmdQYWNrYWdlID0gZGIuYWRkUGFja2FnZSh7XG4gICAgbmFtZTogXCJ0ZXN0LW9yZ2FuaXphdGlvbi90ZXN0LW9yZy1wYWNrYWdlXCIsXG4gICAgdW5zY29wZWRfbmFtZTogXCJ0ZXN0LW9yZy1wYWNrYWdlXCIsXG4gICAgY3JlYXRvcl9hY2NvdW50X2lkOiBhY2NvdW50X2lkLFxuICAgIG93bmVyX29yZ19pZDogdGVzdE9yZy5vcmdfaWQsXG4gICAgb3duZXJfZ2l0aHViX3VzZXJuYW1lOiB0ZXN0T3JnLmdpdGh1Yl9oYW5kbGUsXG4gICAgZGVzY3JpcHRpb246IFwiQSB0ZXN0IHBhY2thZ2UgZm9yIGRldmVsb3BtZW50XCIsXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBpc19zb3VyY2VfZnJvbV9naXRodWI6IGZhbHNlLFxuICAgIHNuaXBwZXRfdHlwZTogXCJwYWNrYWdlXCIsXG4gICAgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZDogbnVsbCxcbiAgICBsYXRlc3RfdmVyc2lvbjogXCIwLjAuMVwiLFxuICAgIGxpY2Vuc2U6IFwiTUlUXCIsXG4gICAgd2Vic2l0ZTogXCJodHRwczovL3RzY2lyY3VpdC5jb21cIixcbiAgICBzdGFyX2NvdW50OiAxMCxcbiAgICBhaV9kZXNjcmlwdGlvbjpcbiAgICAgIFwiQSBjb21wcmVoZW5zaXZlIHRlc3QgcGFja2FnZSBkZXNpZ25lZCBmb3IgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgcHVycG9zZXMuIFRoaXMgcGFja2FnZSBpbmNsdWRlcyB2YXJpb3VzIGNvbXBvbmVudHMgYW5kIHV0aWxpdGllcyBjb21tb25seSB1c2VkIGluIGNpcmN1aXQgZGVzaWduIGFuZCBzaW11bGF0aW9uIHdvcmtmbG93cy5cIixcbiAgICBhaV91c2FnZV9pbnN0cnVjdGlvbnM6XG4gICAgICBcIkltcG9ydCB0aGUgcGFja2FnZSB1c2luZyBgaW1wb3J0IHsgVGVzdENvbXBvbmVudCB9IGZyb20gJ0B0c2NpL3Rlc3Qtb3JnYW5pemF0aW9uLnRlc3Qtb3JnLXBhY2thZ2UnYC4gVXNlIHRoZSBUZXN0Q29tcG9uZW50IGluIHlvdXIgY2lyY3VpdCBkZXNpZ25zIGJ5IHByb3ZpZGluZyB0aGUgcmVxdWlyZWQgcHJvcHMuIEV4YW1wbGU6IGA8VGVzdENvbXBvbmVudCBuYW1lPSdteS10ZXN0JyB2YWx1ZT17NDJ9IC8+YFwiLFxuICAgIGRlZmF1bHRfdmlldzogXCJmaWxlc1wiLFxuICAgIGxhdGVzdF9wY2JfcHJldmlld19pbWFnZV91cmw6IGAvYXBpL3BhY2thZ2VzL2ltYWdlcy90ZXN0LW9yZ2FuaXphdGlvbi90ZXN0LW9yZy1wYWNrYWdlL3BjYi5wbmdgLFxuICAgIGxhdGVzdF9jYWRfcHJldmlld19pbWFnZV91cmw6IGAvYXBpL3BhY2thZ2VzL2ltYWdlcy90ZXN0LW9yZ2FuaXphdGlvbi90ZXN0LW9yZy1wYWNrYWdlLzNkLnBuZ2AsXG4gICAgbGF0ZXN0X3NjaF9wcmV2aWV3X2ltYWdlX3VybDogYC9hcGkvcGFja2FnZXMvaW1hZ2VzL3Rlc3Qtb3JnYW5pemF0aW9uL3Rlc3Qtb3JnLXBhY2thZ2Uvc2NoZW1hdGljLnBuZ2AsXG4gIH0pXG4gIGNvbnN0IHsgcGFja2FnZV9yZWxlYXNlX2lkOiB0ZXN0T3JnUGFja2FnZVJlbGVhc2VJZCB9ID0gZGIuYWRkUGFja2FnZVJlbGVhc2Uoe1xuICAgIHBhY2thZ2VfaWQ6IHRlc3RPcmdQYWNrYWdlLnBhY2thZ2VfaWQsXG4gICAgdmVyc2lvbjogXCIwLjAuMVwiLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBpc19sYXRlc3Q6IHRydWUsXG4gICAgaXNfbG9ja2VkOiBmYWxzZSxcbiAgICBoYXNfdHJhbnNwaWxlZDogdHJ1ZSxcbiAgICB0cmFuc3BpbGF0aW9uX2Vycm9yOiBudWxsLFxuXG4gICAgcGNiX3ByZXZpZXdfaW1hZ2VfdXJsOiBgL2FwaS9wYWNrYWdlcy9pbWFnZXMvdGVzdC1vcmdhbml6YXRpb24vdGVzdC1vcmctcGFja2FnZS9wY2IucG5nYCxcbiAgICBjYWRfcHJldmlld19pbWFnZV91cmw6IGAvYXBpL3BhY2thZ2VzL2ltYWdlcy90ZXN0LW9yZ2FuaXphdGlvbi90ZXN0LW9yZy1wYWNrYWdlLzNkLnBuZ2AsXG4gICAgc2NoX3ByZXZpZXdfaW1hZ2VfdXJsOiBgL2FwaS9wYWNrYWdlcy9pbWFnZXMvdGVzdC1vcmdhbml6YXRpb24vdGVzdC1vcmctcGFja2FnZS9zY2hlbWF0aWMucG5nYCxcbiAgfSlcbiAgZGIuYWRkUGFja2FnZUZpbGUoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogdGVzdE9yZ1BhY2thZ2VSZWxlYXNlSWQsXG4gICAgZmlsZV9wYXRoOiBcImluZGV4LnRzeFwiLFxuICAgIGNvbnRlbnRfdGV4dDogYFxuICAgIGV4cG9ydCBjb25zdCBUZXN0Q29tcG9uZW50ID0gKHsgbmFtZSB9OiB7IG5hbWU6IHN0cmluZyB9KSA9PiAoXG4gICAgICA8cmVzaXN0b3IgbmFtZT17bmFtZX0gcmVzaXN0YW5jZT1cIjEwa1wiIC8+XG4gICAgKVxuICAgIGAudHJpbSgpLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgfSlcbiAgZGIuYWRkUGFja2FnZUZpbGUoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogdGVzdE9yZ1BhY2thZ2VSZWxlYXNlSWQsXG4gICAgZmlsZV9wYXRoOiBcIi9kaXN0L2NpcmN1aXQuanNvblwiLFxuICAgIGNvbnRlbnRfdGV4dDogYFtcbiAgICAgIHtcbiAgICAgICAgXCJ0eXBlXCI6IFwic291cmNlX3Byb2plY3RfbWV0YWRhdGFcIixcbiAgICAgICAgXCJzb3VyY2VfcHJvamVjdF9tZXRhZGF0YV9pZFwiOiBcInNvdXJjZV9wcm9qZWN0X21ldGFkYXRhXzBcIixcbiAgICAgICAgXCJzb2Z0d2FyZV91c2VkX3N0cmluZ1wiOiBcIkB0c2NpcmN1aXQvY29yZUAwLjAuODEzXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwidHlwZVwiOiBcInNvdXJjZV9ncm91cFwiLFxuICAgICAgICBcInNvdXJjZV9ncm91cF9pZFwiOiBcInNvdXJjZV9ncm91cF8wXCIsXG4gICAgICAgIFwiaXNfc3ViY2lyY3VpdFwiOiB0cnVlLFxuICAgICAgICBcIndhc19hdXRvbWF0aWNhbGx5X25hbWVkXCI6IHRydWUsXG4gICAgICAgIFwic3ViY2lyY3VpdF9pZFwiOiBcInN1YmNpcmN1aXRfc291cmNlX2dyb3VwXzBcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJ0eXBlXCI6IFwic291cmNlX2JvYXJkXCIsXG4gICAgICAgIFwic291cmNlX2JvYXJkX2lkXCI6IFwic291cmNlX2JvYXJkXzBcIixcbiAgICAgICAgXCJzb3VyY2VfZ3JvdXBfaWRcIjogXCJzb3VyY2VfZ3JvdXBfMFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcInR5cGVcIjogXCJzY2hlbWF0aWNfZ3JvdXBcIixcbiAgICAgICAgXCJzY2hlbWF0aWNfZ3JvdXBfaWRcIjogXCJzY2hlbWF0aWNfZ3JvdXBfMFwiLFxuICAgICAgICBcImlzX3N1YmNpcmN1aXRcIjogdHJ1ZSxcbiAgICAgICAgXCJzdWJjaXJjdWl0X2lkXCI6IFwic3ViY2lyY3VpdF9zb3VyY2VfZ3JvdXBfMFwiLFxuICAgICAgICBcIm5hbWVcIjogXCJ1bm5hbWVkX2JvYXJkMVwiLFxuICAgICAgICBcImNlbnRlclwiOiB7XG4gICAgICAgICAgXCJ4XCI6IDAsXG4gICAgICAgICAgXCJ5XCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3aWR0aFwiOiAwLFxuICAgICAgICBcImhlaWdodFwiOiAwLFxuICAgICAgICBcInNjaGVtYXRpY19jb21wb25lbnRfaWRzXCI6IFtdLFxuICAgICAgICBcInNvdXJjZV9ncm91cF9pZFwiOiBcInNvdXJjZV9ncm91cF8wXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwidHlwZVwiOiBcInBjYl9ib2FyZFwiLFxuICAgICAgICBcInBjYl9ib2FyZF9pZFwiOiBcInBjYl9ib2FyZF8wXCIsXG4gICAgICAgIFwiY2VudGVyXCI6IHtcbiAgICAgICAgICBcInhcIjogMCxcbiAgICAgICAgICBcInlcIjogMFxuICAgICAgICB9LFxuICAgICAgICBcInRoaWNrbmVzc1wiOiAxLjQsXG4gICAgICAgIFwibnVtX2xheWVyc1wiOiAyLFxuICAgICAgICBcIndpZHRoXCI6IDEwLFxuICAgICAgICBcImhlaWdodFwiOiAxMCxcbiAgICAgICAgXCJtYXRlcmlhbFwiOiBcImZyNFwiXG4gICAgICB9XG4gICAgXWAudHJpbSgpLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgfSlcbiAgZGIuYWRkUGFja2FnZUJ1aWxkKHtcbiAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHRlc3RPcmdQYWNrYWdlUmVsZWFzZUlkLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB0cmFuc3BpbGF0aW9uX2luX3Byb2dyZXNzOiBmYWxzZSxcbiAgICB0cmFuc3BpbGF0aW9uX3N0YXJ0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSA1MDAwKS50b0lTT1N0cmluZygpLCAvLyBTdGFydGVkIDUgc2Vjb25kcyBhZ29cbiAgICB0cmFuc3BpbGF0aW9uX2NvbXBsZXRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDMwMDApLnRvSVNPU3RyaW5nKCksIC8vIENvbXBsZXRlZCAzIHNlY29uZHMgYWdvXG4gICAgdHJhbnNwaWxhdGlvbl9sb2dzOiBbXG4gICAgICBcIltJTkZPXSBTdGFydGluZyB0cmFuc3BpbGF0aW9uLi4uXCIsXG4gICAgICBcIltJTkZPXSBQYXJzaW5nIHBhY2thZ2UgY29kZVwiLFxuICAgICAgXCJbSU5GT10gR2VuZXJhdGluZyBUeXBlU2NyaXB0IGRlZmluaXRpb25zXCIsXG4gICAgICBcIltJTkZPXSBDb21waWxpbmcgdG8gSmF2YVNjcmlwdFwiLFxuICAgICAgXCJbU1VDQ0VTU10gVHJhbnNwaWxhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIsXG4gICAgXSxcbiAgICB0cmFuc3BpbGF0aW9uX2Vycm9yOiBudWxsLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9pbl9wcm9ncmVzczogZmFsc2UsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX3N0YXJ0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzMDAwKS50b0lTT1N0cmluZygpLCAvLyBTdGFydGVkIGFmdGVyIHRyYW5zcGlsYXRpb25cbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfY29tcGxldGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTAwMCkudG9JU09TdHJpbmcoKSwgLy8gQ29tcGxldGVkIDEgc2Vjb25kIGFnb1xuICAgIGNpcmN1aXRfanNvbl9idWlsZF9sb2dzOiBbXG4gICAgICBcIltJTkZPXSBTdGFydGluZyBjaXJjdWl0IEpTT04gYnVpbGQuLi5cIixcbiAgICAgIFwiW0lORk9dIEFuYWx5emluZyBjb21wb25lbnQgc3RydWN0dXJlXCIsXG4gICAgICBcIltJTkZPXSBHZW5lcmF0aW5nIHBvcnQgY29uZmlndXJhdGlvbnNcIixcbiAgICAgIFwiW0lORk9dIFZhbGlkYXRpbmcgY2lyY3VpdCBjb25uZWN0aW9uc1wiLFxuICAgICAgXCJbU1VDQ0VTU10gQ2lyY3VpdCBKU09OIGJ1aWxkIGNvbXBsZXRlZFwiLFxuICAgIF0sXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2Vycm9yOiBudWxsLFxuICAgIGJ1aWxkX2luX3Byb2dyZXNzOiBmYWxzZSxcbiAgICBidWlsZF9zdGFydGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTAwMDApLnRvSVNPU3RyaW5nKCksIC8vIFN0YXJ0ZWQgMTAgc2Vjb25kcyBhZ29cbiAgICBidWlsZF9jb21wbGV0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwgLy8gSnVzdCBjb21wbGV0ZWRcbiAgICBidWlsZF9lcnJvcjogbnVsbCxcbiAgICBidWlsZF9lcnJvcl9sYXN0X3VwZGF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBidWlsZF9sb2dzOlxuICAgICAgXCJCdWlsZCBwcm9jZXNzOlxcblwiICtcbiAgICAgIFwiMS4gRW52aXJvbm1lbnQgc2V0dXAgLSBPS1xcblwiICtcbiAgICAgIFwiMi4gRGVwZW5kZW5jeSByZXNvbHV0aW9uIC0gT0tcXG5cIiArXG4gICAgICBcIjMuIENvZGUgY29tcGlsYXRpb24gLSBPS1xcblwiICtcbiAgICAgIFwiNC4gQ2lyY3VpdCB2YWxpZGF0aW9uIC0gT0tcXG5cIiArXG4gICAgICBcIjUuIFBhY2thZ2UgYXNzZW1ibHkgLSBPS1xcblwiICtcbiAgICAgIFwiQnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiLFxuICB9KVxuXG4gIGNvbnN0IHsgcGFja2FnZV9yZWxlYXNlX2lkOiBvcmdQYWNrYWdlUmVsZWFzZUlkIH0gPSBkYi5hZGRTbmlwcGV0KHtcbiAgICBuYW1lOiBcInRlc3Qtb3JnYW5pemF0aW9uL3Rlc3QtcGFja2FnZVwiLFxuICAgIHVuc2NvcGVkX25hbWU6IFwidGVzdC1wYWNrYWdlXCIsXG4gICAgb3duZXJfbmFtZTogXCJ0ZXN0LW9yZ2FuaXphdGlvblwiLFxuICAgIGNvZGU6IGBcbmV4cG9ydCBjb25zdCBUZXN0Q29tcG9uZW50ID0gKHsgbmFtZSB9OiB7IG5hbWU6IHN0cmluZyB9KSA9PiAoXG4gIDxyZXNpc3RvciBuYW1lPXtuYW1lfSByZXNpc3RhbmNlPVwiMTBrXCIgLz5cbilcbmAudHJpbSgpLFxuICAgIGR0czogYFxuZGVjbGFyZSBtb2R1bGUgXCJAdHNjaS90ZXN0LW9yZ2FuaXphdGlvbi50ZXN0LXBhY2thZ2VcIiB7XG4gIGV4cG9ydCBjb25zdCBUZXN0Q29tcG9uZW50OiAoeyBuYW1lIH06IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gIH0pID0+IGFueTtcbn1cbmAudHJpbSgpLFxuICAgIGNvbXBpbGVkX2pzOiBgXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVGVzdENvbXBvbmVudCA9IHZvaWQgMDtcbmNvbnN0IFRlc3RDb21wb25lbnQgPSAoe1xuICBuYW1lXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlc2lzdG9yXCIsIHtcbiAgbmFtZTogbmFtZSxcbiAgcmVzaXN0YW5jZTogXCIxMGtcIlxufSk7XG5leHBvcnRzLlRlc3RDb21wb25lbnQgPSBUZXN0Q29tcG9uZW50O1xuICAgIGAudHJpbSgpLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB1cGRhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgc25pcHBldF90eXBlOiBcInBhY2thZ2VcIixcbiAgICBkZXNjcmlwdGlvbjogXCJUZXN0IHBhY2thZ2UgZm9yIG9yZ2FuaXphdGlvblwiLFxuICAgIGNpcmN1aXRfanNvbjogW1xuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9jb21wb25lbnRcIixcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgICAgZnR5cGU6IFwic2ltcGxlX3Jlc2lzdG9yXCIsXG4gICAgICAgIG5hbWU6IFwiUjFcIixcbiAgICAgICAgcmVzaXN0YW5jZTogXCIxMGtcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgfSlcblxuICAvLyBBZGQgc3VjY2Vzc2Z1bCBidWlsZCBmb3Igb3JnIHBhY2thZ2VcbiAgY29uc3Qgb3JnUGFja2FnZUJ1aWxkID0gZGIuYWRkUGFja2FnZUJ1aWxkKHtcbiAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IG9yZ1BhY2thZ2VSZWxlYXNlSWQsXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHRyYW5zcGlsYXRpb25faW5fcHJvZ3Jlc3M6IGZhbHNlLFxuICAgIHRyYW5zcGlsYXRpb25fc3RhcnRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDUwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgdHJhbnNwaWxhdGlvbl9jb21wbGV0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzMDAwKS50b0lTT1N0cmluZygpLFxuICAgIHRyYW5zcGlsYXRpb25fbG9nczogW1xuICAgICAgXCJbSU5GT10gU3RhcnRpbmcgdHJhbnNwaWxhdGlvbi4uLlwiLFxuICAgICAgXCJbU1VDQ0VTU10gVHJhbnNwaWxhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIsXG4gICAgXSxcbiAgICB0cmFuc3BpbGF0aW9uX2Vycm9yOiBudWxsLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9pbl9wcm9ncmVzczogZmFsc2UsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX3N0YXJ0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzMDAwKS50b0lTT1N0cmluZygpLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9jb21wbGV0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxMDAwKS50b0lTT1N0cmluZygpLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9sb2dzOiBbXG4gICAgICBcIltJTkZPXSBTdGFydGluZyBjaXJjdWl0IEpTT04gYnVpbGQuLi5cIixcbiAgICAgIFwiW1NVQ0NFU1NdIENpcmN1aXQgSlNPTiBidWlsZCBjb21wbGV0ZWRcIixcbiAgICBdLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9lcnJvcjogbnVsbCxcbiAgICBidWlsZF9pbl9wcm9ncmVzczogZmFsc2UsXG4gICAgYnVpbGRfc3RhcnRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDEwMDAwKS50b0lTT1N0cmluZygpLFxuICAgIGJ1aWxkX2NvbXBsZXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIGJ1aWxkX2Vycm9yOiBudWxsLFxuICAgIGJ1aWxkX2Vycm9yX2xhc3RfdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHByZXZpZXdfdXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9wcmV2aWV3L29yZ19wYWNrYWdlX2J1aWxkXCIsXG4gICAgYnVpbGRfbG9nczogXCJCdWlsZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIsXG4gIH0pXG5cbiAgLy8gVXBkYXRlIHRoZSBvcmcgcGFja2FnZSByZWxlYXNlIHdpdGggdGhlIGJ1aWxkIElEXG4gIGNvbnN0IG9yZ1JlbGVhc2UgPSBkYi5nZXRQYWNrYWdlUmVsZWFzZUJ5SWQob3JnUGFja2FnZVJlbGVhc2VJZCkhXG4gIGRiLnVwZGF0ZVBhY2thZ2VSZWxlYXNlKHtcbiAgICAuLi5vcmdSZWxlYXNlLFxuICAgIGxhdGVzdF9wYWNrYWdlX2J1aWxkX2lkOiBvcmdQYWNrYWdlQnVpbGQucGFja2FnZV9idWlsZF9pZCxcbiAgfSlcblxuICBkYi5hZGRPcmdhbml6YXRpb24oe1xuICAgIG5hbWU6IFwidGVzdHVzZXJcIixcbiAgICBvd25lcl9hY2NvdW50X2lkOiBhY2NvdW50X2lkLFxuICAgIGdpdGh1Yl9oYW5kbGU6IFwidHNjaXJjdWl0XCIsXG4gICAgaXNfcGVyc29uYWxfb3JnOiB0cnVlLFxuICAgIG9yZ19pZDogXCJvcmctMTIzNFwiLFxuICB9KVxuXG4gIGRiLmFkZE9yZ2FuaXphdGlvbkFjY291bnQoe1xuICAgIG9yZ19pZDogdGVzdE9yZy5vcmdfaWQsXG4gICAgYWNjb3VudF9pZDogc2V2ZWliYXJBY2MuYWNjb3VudF9pZCxcbiAgfSlcbn1cbiIsICJpbXBvcnQgbWQ1IGZyb20gXCJtZDVcIlxuaW1wb3J0IHR5cGUgeyBQYWNrYWdlRmlsZSB9IGZyb20gXCIuLi9kYi9zY2hlbWFcIlxuXG4vKipcbiAqIEdlbmVyYXRlIGFuIE1ENSBoYXNoIGZyb20gcGFja2FnZSBmaWxlcyBjb250ZW50XG4gKiBVc2VzIHRoZSBzYW1lIGZvcm1hdCBhcyBleGlzdGluZyB0ZXN0czogY3JlYXRlcyBhIG1hcCBvZiBmaWxlX3BhdGggLT4gY29udGVudF90ZXh0XG4gKiBhbmQgZ2VuZXJhdGVzIGFuIE1ENSBoYXNoIG9mIHRoZSBKU09OIHN0cmluZ2lmaWVkIG1hcFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVGc1NoYShwYWNrYWdlRmlsZXM6IFBhY2thZ2VGaWxlW10pOiBzdHJpbmcge1xuICBjb25zdCBmc01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9XG5cbiAgcGFja2FnZUZpbGVzXG4gICAgLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5jb250ZW50X3RleHQpIC8vIE9ubHkgaW5jbHVkZSBmaWxlcyB3aXRoIGNvbnRlbnRcbiAgICAuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgZnNNYXBbZmlsZS5maWxlX3BhdGhdID0gZmlsZS5jb250ZW50X3RleHQgfHwgXCJcIlxuICAgIH0pXG5cbiAgY29uc3QgaGFzaCA9IG1kNShKU09OLnN0cmluZ2lmeShmc01hcCkpXG4gIHJldHVybiBgbWQ1LSR7aGFzaH1gXG59XG4iLCAiaW1wb3J0IHR5cGUgeyBEYkNsaWVudCB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvZGItY2xpZW50XCJcbmltcG9ydCB7IGNyZWF0ZURhdGFiYXNlIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9kYi1jbGllbnRcIlxuaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlIH0gZnJvbSBcIndpbnRlcnNwZWNcIlxuXG5leHBvcnQgY29uc3Qgd2l0aERiOiBNaWRkbGV3YXJlPFxuICB7fSxcbiAge1xuICAgIGRiOiBEYkNsaWVudFxuICB9XG4+ID0gYXN5bmMgKHJlcSwgY3R4LCBuZXh0KSA9PiB7XG4gIGlmICghY3R4LmRiKSB7XG4gICAgY3R4LmRiID0gY3JlYXRlRGF0YWJhc2UoKVxuICB9XG4gIHJldHVybiBuZXh0KHJlcSwgY3R4KVxufVxuIiwgImltcG9ydCB7IE1pZGRsZXdhcmUgfSBmcm9tIFwid2ludGVyc3BlYy9taWRkbGV3YXJlXCJcblxuZXhwb3J0IHR5cGUgQ3R4RXJyb3JGbiA9IChcbiAgc3RhdHVzOiBudW1iZXIsXG4gIGVycm9yX3BheWxvYWQ6IHtcbiAgICBlcnJvcl9jb2RlOiBzdHJpbmdcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgfSxcbikgPT4gUmVzcG9uc2VcblxuZXhwb3J0IGNvbnN0IHdpdGhDdHhFcnJvcjogTWlkZGxld2FyZTxcbiAge30sXG4gIHtcbiAgICBlcnJvcjogQ3R4RXJyb3JGblxuICB9XG4+ID0gYXN5bmMgKHJlcSwgY3R4LCBuZXh0KSA9PiB7XG4gIGN0eC5lcnJvciA9IChzdGF0dXMsIGVycm9yX3BheWxvYWQpID0+IHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KHsgZXJyb3I6IGVycm9yX3BheWxvYWQgfSksIHtcbiAgICAgIHN0YXR1cyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIG5leHQocmVxLCBjdHgpXG59XG4iLCAiaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlIH0gZnJvbSBcIndpbnRlcnNwZWMvbWlkZGxld2FyZVwiXG5pbXBvcnQgdHlwZSB7IEN0eEVycm9yRm4gfSBmcm9tIFwiLi93aXRoLWN0eC1lcnJvclwiXG5pbXBvcnQgdHlwZSB7IERiQ2xpZW50IH0gZnJvbSBcIi4uL2RiL2RiLWNsaWVudFwiXG5pbXBvcnQgeyBkZWNvZGVKd3QgfSBmcm9tIFwiam9zZVwiXG5cbmV4cG9ydCBjb25zdCB3aXRoU2Vzc2lvbkF1dGg6IE1pZGRsZXdhcmU8XG4gIHtcbiAgICBlcnJvcjogQ3R4RXJyb3JGblxuICAgIGRiOiBEYkNsaWVudFxuICB9LFxuICB7XG4gICAgYXV0aDoge1xuICAgICAgdHlwZTogXCJzZXNzaW9uXCJcbiAgICAgIGFjY291bnRfaWQ6IHN0cmluZ1xuICAgICAgcGVyc29uYWxfb3JnX2lkOiBzdHJpbmdcbiAgICAgIGdpdGh1Yl91c2VybmFtZTogc3RyaW5nXG4gICAgICB0c2NpcmN1aXRfaGFuZGxlOiBzdHJpbmcgfCBudWxsXG4gICAgICBzZXNzaW9uX2lkOiBzdHJpbmdcbiAgICAgIG9yZ3M6IEFycmF5PHtcbiAgICAgICAgb3JnX2lkOiBzdHJpbmdcbiAgICAgICAgbmFtZTogc3RyaW5nXG4gICAgICAgIHVzZXJfcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBjYW5fbWFuYWdlX3BhY2thZ2VzOiBib29sZWFuXG4gICAgICAgIH1cbiAgICAgIH0+XG4gICAgfVxuICB9LFxuICB7fVxuPiA9IGFzeW5jIChyZXEsIGN0eCwgbmV4dCkgPT4ge1xuICBpZiAocmVxLm1ldGhvZCA9PT0gXCJPUFRJT05TXCIpIHJldHVybiBuZXh0KHJlcSwgY3R4KVxuICBjb25zdCB0b2tlbiA9IHJlcS5oZWFkZXJzLmdldChcImF1dGhvcml6YXRpb25cIik/LnNwbGl0KFwiQmVhcmVyIFwiKT8uWzFdXG5cbiAgLy8gVHJ5IHRvIGRlY29kZSBKV1QgdG9rZW4gYW5kIHZlcmlmeSBzZXNzaW9uIGV4aXN0c1xuICBpZiAodG9rZW4gJiYgY3R4LmRiPy5nZXRTdGF0ZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlSnd0KHRva2VuKVxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gZGVjb2RlZC5zZXNzaW9uX2lkIGFzIHN0cmluZ1xuXG4gICAgICBpZiAoc2Vzc2lvbklkKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gY3R4LmRiLmdldFN0YXRlKClcblxuICAgICAgICAvLyBDaGVjayBpZiBzZXNzaW9uIHN0aWxsIGV4aXN0cyBpbiB0aGUgZGF0YWJhc2VcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHN0YXRlLnNlc3Npb25zLmZpbmQoXG4gICAgICAgICAgKHM6IGFueSkgPT4gcy5zZXNzaW9uX2lkID09PSBzZXNzaW9uSWQsXG4gICAgICAgIClcblxuICAgICAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgICAgICAvLyBTZXNzaW9uIGhhcyBiZWVuIGRlbGV0ZWQgKGxvZ2dlZCBvdXQpLCByZWplY3QgdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXR1cm4gY3R4LmVycm9yKDQwMSwge1xuICAgICAgICAgICAgZXJyb3JfY29kZTogXCJzZXNzaW9uX2V4cGlyZWRcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiU2Vzc2lvbiBoYXMgYmVlbiBpbnZhbGlkYXRlZC4gUGxlYXNlIGxvZyBpbiBhZ2Fpbi5cIixcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmluZCBhY2NvdW50IGZyb20gdGhlIGRlY29kZWQgdG9rZW5cbiAgICAgICAgY29uc3QgYWNjb3VudElkID0gZGVjb2RlZC5hY2NvdW50X2lkIGFzIHN0cmluZ1xuICAgICAgICBjb25zdCBhY2NvdW50ID0gc3RhdGUuYWNjb3VudHMuZmluZChcbiAgICAgICAgICAoYWNjOiBhbnkpID0+IGFjYy5hY2NvdW50X2lkID09PSBhY2NvdW50SWQsXG4gICAgICAgIClcblxuICAgICAgICBpZiAoYWNjb3VudCkge1xuICAgICAgICAgIC8vIEZldGNoIG9yZ3MgZm9yIHRoaXMgYWNjb3VudFxuICAgICAgICAgIGNvbnN0IG9yZ0FjY291bnRzID0gc3RhdGUub3JnQWNjb3VudHMuZmlsdGVyKFxuICAgICAgICAgICAgKG9hOiBhbnkpID0+IG9hLmFjY291bnRfaWQgPT09IGFjY291bnQuYWNjb3VudF9pZCxcbiAgICAgICAgICApXG5cbiAgICAgICAgICBjb25zdCBvcmdzID0gb3JnQWNjb3VudHMubWFwKChvYTogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmcgPSBzdGF0ZS5vcmdhbml6YXRpb25zLmZpbmQoXG4gICAgICAgICAgICAgIChvOiBhbnkpID0+IG8ub3JnX2lkID09PSBvYS5vcmdfaWQsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBvcmdfaWQ6IG9hLm9yZ19pZCxcbiAgICAgICAgICAgICAgbmFtZTogb3JnPy5vcmdfZGlzcGxheV9uYW1lIHx8IG9yZz8uZ2l0aHViX2hhbmRsZSB8fCBvYS5vcmdfaWQsXG4gICAgICAgICAgICAgIHVzZXJfcGVybWlzc2lvbnM6IHsgY2FuX21hbmFnZV9wYWNrYWdlczogdHJ1ZSB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBjb25zdCB0c2NpcmN1aXRfaGFuZGxlID1cbiAgICAgICAgICAgIGRlY29kZWQ/LnRzY2lyY3VpdF9oYW5kbGUgPz8gYWNjb3VudD8udHNjaXJjdWl0X2hhbmRsZSA/PyBudWxsXG5cbiAgICAgICAgICBpZiAoIXRzY2lyY3VpdF9oYW5kbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICAgICAgICAgIGVycm9yX2NvZGU6IFwidHNjaXJjdWl0X2hhbmRsZV9yZXF1aXJlZFwiLFxuICAgICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAgIFwiUGxlYXNlIHNldCBhIHRzY2lyY3VpdCBoYW5kbGUgYmVmb3JlIHVzaW5nIHRoaXMgZmVhdHVyZS4gVmlzaXQgYWNjb3VudCBzZXR0aW5ncyB0byBhZGQgb25lLlwiLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdHguYXV0aCA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwic2Vzc2lvblwiLFxuICAgICAgICAgICAgYWNjb3VudF9pZDogYWNjb3VudC5hY2NvdW50X2lkLFxuICAgICAgICAgICAgcGVyc29uYWxfb3JnX2lkOlxuICAgICAgICAgICAgICBhY2NvdW50LnBlcnNvbmFsX29yZ19pZCB8fCBgb3JnLSR7YWNjb3VudC5hY2NvdW50X2lkfWAsXG4gICAgICAgICAgICBnaXRodWJfdXNlcm5hbWU6IGFjY291bnQuZ2l0aHViX3VzZXJuYW1lLFxuICAgICAgICAgICAgdHNjaXJjdWl0X2hhbmRsZTogYWNjb3VudC50c2NpcmN1aXRfaGFuZGxlLFxuICAgICAgICAgICAgc2Vzc2lvbl9pZDogc2Vzc2lvbklkLFxuICAgICAgICAgICAgb3JnczpcbiAgICAgICAgICAgICAgb3Jncy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBvcmdzXG4gICAgICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBvcmdfaWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50LnBlcnNvbmFsX29yZ19pZCB8fCBgb3JnLSR7YWNjb3VudC5hY2NvdW50X2lkfWAsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQuZ2l0aHViX3VzZXJuYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50LnBlcnNvbmFsX29yZ19pZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgYG9yZy0ke2FjY291bnQuYWNjb3VudF9pZH1gLFxuICAgICAgICAgICAgICAgICAgICAgIHVzZXJfcGVybWlzc2lvbnM6IHsgY2FuX21hbmFnZV9wYWNrYWdlczogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5leHQocmVxLCBjdHgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSldUIGRlY29kZSBmYWlsZWQsIGNvbnRpbnVlIHRvIGZhbGxiYWNrXG4gICAgfVxuICB9XG5cbiAgLy8gTGVnYWN5OiBPbmx5IGNoZWNrIGRhdGFiYXNlIGFjY291bnRzIHdoZW4gd2UncmUgaW4gYSBCdW4gdGVzdCBlbnZpcm9ubWVudFxuICBpZiAocHJvY2Vzcy5lbnYuQlVOX1RFU1QgPT09IFwidHJ1ZVwiICYmIHRva2VuICYmIGN0eC5kYj8uZ2V0U3RhdGUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGN0eC5kYi5nZXRTdGF0ZSgpXG4gICAgY29uc3QgYWNjb3VudCA9IHN0YXRlLmFjY291bnRzLmZpbmQoKGFjYzogYW55KSA9PiBhY2MuYWNjb3VudF9pZCA9PT0gdG9rZW4pXG4gICAgaWYgKGFjY291bnQpIHtcbiAgICAgIC8vIEZldGNoIG9yZ3MgZm9yIHRoaXMgYWNjb3VudFxuICAgICAgY29uc3Qgb3JnQWNjb3VudHMgPSBzdGF0ZS5vcmdBY2NvdW50cy5maWx0ZXIoXG4gICAgICAgIChvYTogYW55KSA9PiBvYS5hY2NvdW50X2lkID09PSBhY2NvdW50LmFjY291bnRfaWQsXG4gICAgICApXG5cbiAgICAgIGNvbnN0IG9yZ3MgPSBvcmdBY2NvdW50cy5tYXAoKG9hOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgb3JnID0gc3RhdGUub3JnYW5pemF0aW9ucy5maW5kKChvOiBhbnkpID0+IG8ub3JnX2lkID09PSBvYS5vcmdfaWQpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb3JnX2lkOiBvYS5vcmdfaWQsXG4gICAgICAgICAgbmFtZTogb3JnPy5vcmdfZGlzcGxheV9uYW1lIHx8IG9yZz8uZ2l0aHViX2hhbmRsZSB8fCBvYS5vcmdfaWQsXG4gICAgICAgICAgdXNlcl9wZXJtaXNzaW9uczogeyBjYW5fbWFuYWdlX3BhY2thZ2VzOiB0cnVlIH0sXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIGN0eC5hdXRoID0ge1xuICAgICAgICB0eXBlOiBcInNlc3Npb25cIixcbiAgICAgICAgYWNjb3VudF9pZDogYWNjb3VudC5hY2NvdW50X2lkLFxuICAgICAgICBwZXJzb25hbF9vcmdfaWQ6IGFjY291bnQucGVyc29uYWxfb3JnX2lkIHx8IGBvcmctJHthY2NvdW50LmFjY291bnRfaWR9YCxcbiAgICAgICAgZ2l0aHViX3VzZXJuYW1lOiBhY2NvdW50LmdpdGh1Yl91c2VybmFtZSxcbiAgICAgICAgdHNjaXJjdWl0X2hhbmRsZTogYWNjb3VudC50c2NpcmN1aXRfaGFuZGxlLFxuICAgICAgICBzZXNzaW9uX2lkOiBgc2Vzc2lvbi0ke2FjY291bnQuYWNjb3VudF9pZH1gLFxuICAgICAgICBvcmdzOlxuICAgICAgICAgIG9yZ3MubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBvcmdzXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBvcmdfaWQ6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnQucGVyc29uYWxfb3JnX2lkIHx8IGBvcmctJHthY2NvdW50LmFjY291bnRfaWR9YCxcbiAgICAgICAgICAgICAgICAgIG5hbWU6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnQuZ2l0aHViX3VzZXJuYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnQucGVyc29uYWxfb3JnX2lkIHx8XG4gICAgICAgICAgICAgICAgICAgIGBvcmctJHthY2NvdW50LmFjY291bnRfaWR9YCxcbiAgICAgICAgICAgICAgICAgIHVzZXJfcGVybWlzc2lvbnM6IHsgY2FuX21hbmFnZV9wYWNrYWdlczogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dChyZXEsIGN0eClcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjayBhdXRoIGZvciBub24tdGVzdCBlbnZpcm9ubWVudHMgb3Igd2hlbiBubyB0b2tlbiBpcyBmb3VuZFxuICBjb25zdCBmYWxsYmFja0FjY291bnRJZCA9IFwiYWNjb3VudC0xMjM0XCJcbiAgY29uc3QgZmFsbGJhY2tPcmdJZCA9IFwib3JnLTEyMzRcIlxuXG4gIGNvbnN0IGZhbGxiYWNrT3JncyA9IFtcbiAgICB7XG4gICAgICBvcmdfaWQ6IGZhbGxiYWNrT3JnSWQsXG4gICAgICBuYW1lOiBcIm9yZy0xMjM0XCIsXG4gICAgICB1c2VyX3Blcm1pc3Npb25zOiB7IGNhbl9tYW5hZ2VfcGFja2FnZXM6IHRydWUgfSxcbiAgICB9LFxuICBdXG5cbiAgY3R4LmF1dGggPSB7XG4gICAgdHlwZTogXCJzZXNzaW9uXCIsXG4gICAgYWNjb3VudF9pZDogZmFsbGJhY2tBY2NvdW50SWQsXG4gICAgcGVyc29uYWxfb3JnX2lkOiBmYWxsYmFja09yZ0lkLFxuICAgIGdpdGh1Yl91c2VybmFtZTogXCJ0ZXN0dXNlclwiLFxuICAgIHRzY2lyY3VpdF9oYW5kbGU6IFwidGVzdHVzZXJcIixcbiAgICBzZXNzaW9uX2lkOiBcInNlc3Npb24tMTIzNFwiLFxuICAgIG9yZ3M6IGZhbGxiYWNrT3JncyxcbiAgfVxuXG4gIHJldHVybiBuZXh0KHJlcSwgY3R4KVxufVxuIiwgImltcG9ydCB0eXBlIHsgTWlkZGxld2FyZSB9IGZyb20gXCJ3aW50ZXJzcGVjL21pZGRsZXdhcmVcIlxuaW1wb3J0IHR5cGUgeyBDdHhFcnJvckZuIH0gZnJvbSBcIi4vd2l0aC1jdHgtZXJyb3JcIlxuaW1wb3J0IHsgZGVjb2RlSnd0IH0gZnJvbSBcImpvc2VcIlxuXG5leHBvcnQgY29uc3Qgd2l0aE9wdGlvbmFsU2Vzc2lvbkF1dGg6IE1pZGRsZXdhcmU8XG4gIHtcbiAgICBlcnJvcjogQ3R4RXJyb3JGblxuICAgIGRiOiBhbnlcbiAgfSxcbiAge1xuICAgIGF1dGg/OiB7XG4gICAgICB0eXBlOiBcInNlc3Npb25cIlxuICAgICAgYWNjb3VudF9pZDogc3RyaW5nXG4gICAgICBwZXJzb25hbF9vcmdfaWQ6IHN0cmluZ1xuICAgICAgZ2l0aHViX3VzZXJuYW1lOiBzdHJpbmdcbiAgICAgIHRzY2lyY3VpdF9oYW5kbGU6IHN0cmluZyB8IG51bGxcbiAgICAgIHNlc3Npb25faWQ6IHN0cmluZ1xuICAgIH1cbiAgfSxcbiAge31cbj4gPSBhc3luYyAocmVxLCBjdHgsIG5leHQpID0+IHtcbiAgaWYgKHJlcS5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSByZXR1cm4gbmV4dChyZXEsIGN0eClcblxuICBjb25zdCB0b2tlbiA9IHJlcS5oZWFkZXJzLmdldChcImF1dGhvcml6YXRpb25cIik/LnNwbGl0KFwiQmVhcmVyIFwiKT8uWzFdXG5cbiAgaWYgKCF0b2tlbikge1xuICAgIHJldHVybiBuZXh0KHJlcSwgY3R4KVxuICB9XG5cbiAgLy8gVHJ5IHRvIGRlY29kZSBKV1QgdG9rZW4gYW5kIHZlcmlmeSBzZXNzaW9uIGV4aXN0c1xuICBpZiAoY3R4LmRiPy5nZXRTdGF0ZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlSnd0KHRva2VuKVxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gZGVjb2RlZC5zZXNzaW9uX2lkIGFzIHN0cmluZ1xuXG4gICAgICBpZiAoc2Vzc2lvbklkKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gY3R4LmRiLmdldFN0YXRlKClcblxuICAgICAgICAvLyBDaGVjayBpZiBzZXNzaW9uIHN0aWxsIGV4aXN0cyBpbiB0aGUgZGF0YWJhc2VcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHN0YXRlLnNlc3Npb25zLmZpbmQoXG4gICAgICAgICAgKHM6IGFueSkgPT4gcy5zZXNzaW9uX2lkID09PSBzZXNzaW9uSWQsXG4gICAgICAgIClcblxuICAgICAgICAvLyBJZiBzZXNzaW9uIGRvZXNuJ3QgZXhpc3QsIHRyZWF0IGFzIHVuYXV0aGVudGljYXRlZCAobm8gYXV0aCBjb250ZXh0KVxuICAgICAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgICAgICByZXR1cm4gbmV4dChyZXEsIGN0eClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpbmQgYWNjb3VudCBmcm9tIHRoZSBkZWNvZGVkIHRva2VuXG4gICAgICAgIGNvbnN0IGFjY291bnRJZCA9IGRlY29kZWQuYWNjb3VudF9pZCBhcyBzdHJpbmdcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IHN0YXRlLmFjY291bnRzLmZpbmQoXG4gICAgICAgICAgKGFjYzogYW55KSA9PiBhY2MuYWNjb3VudF9pZCA9PT0gYWNjb3VudElkLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKGFjY291bnQpIHtcbiAgICAgICAgICBjdHguYXV0aCA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwic2Vzc2lvblwiLFxuICAgICAgICAgICAgYWNjb3VudF9pZDogYWNjb3VudC5hY2NvdW50X2lkLFxuICAgICAgICAgICAgcGVyc29uYWxfb3JnX2lkOlxuICAgICAgICAgICAgICBhY2NvdW50LnBlcnNvbmFsX29yZ19pZCB8fCBgb3JnLSR7YWNjb3VudC5hY2NvdW50X2lkfWAsXG4gICAgICAgICAgICBnaXRodWJfdXNlcm5hbWU6IGFjY291bnQuZ2l0aHViX3VzZXJuYW1lLFxuICAgICAgICAgICAgdHNjaXJjdWl0X2hhbmRsZTogYWNjb3VudC50c2NpcmN1aXRfaGFuZGxlLFxuICAgICAgICAgICAgc2Vzc2lvbl9pZDogc2Vzc2lvbklkLFxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV4dChyZXEsIGN0eClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBKV1QgZGVjb2RlIGZhaWxlZCwgY29udGludWUgdG8gZmFsbGJhY2tcbiAgICB9XG4gIH1cblxuICAvLyBMZWdhY3k6IE9ubHkgY2hlY2sgZGF0YWJhc2UgYWNjb3VudHMgd2hlbiB3ZSdyZSBpbiBhIEJ1biB0ZXN0IGVudmlyb25tZW50XG4gIGlmIChwcm9jZXNzLmVudi5CVU5fVEVTVCA9PT0gXCJ0cnVlXCIgJiYgY3R4LmRiPy5hY2NvdW50cykge1xuICAgIGNvbnN0IGFjY291bnQgPSBjdHguZGIuYWNjb3VudHMuZmluZCgoYWNjOiBhbnkpID0+IGFjYy5hY2NvdW50X2lkID09PSB0b2tlbilcblxuICAgIGlmIChhY2NvdW50KSB7XG4gICAgICBjdHguYXV0aCA9IHtcbiAgICAgICAgdHlwZTogXCJzZXNzaW9uXCIsXG4gICAgICAgIGFjY291bnRfaWQ6IGFjY291bnQuYWNjb3VudF9pZCxcbiAgICAgICAgcGVyc29uYWxfb3JnX2lkOiBgb3JnLSR7YWNjb3VudC5hY2NvdW50X2lkfWAsXG4gICAgICAgIGdpdGh1Yl91c2VybmFtZTogYWNjb3VudC5naXRodWJfdXNlcm5hbWUsXG4gICAgICAgIHRzY2lyY3VpdF9oYW5kbGU6IGFjY291bnQudHNjaXJjdWl0X2hhbmRsZSxcbiAgICAgICAgc2Vzc2lvbl9pZDogYHNlc3Npb24tJHthY2NvdW50LmFjY291bnRfaWR9YCxcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dChyZXEsIGN0eClcbiAgfVxuXG4gIGN0eC5hdXRoID0ge1xuICAgIHR5cGU6IFwic2Vzc2lvblwiLFxuICAgIGFjY291bnRfaWQ6IFwiYWNjb3VudC0xMjM0XCIsXG4gICAgcGVyc29uYWxfb3JnX2lkOiBcIm9yZy0xMjM0XCIsXG4gICAgZ2l0aHViX3VzZXJuYW1lOiBcInRlc3R1c2VyXCIsXG4gICAgdHNjaXJjdWl0X2hhbmRsZTogXCJ0ZXN0dXNlclwiLFxuICAgIHNlc3Npb25faWQ6IFwic2Vzc2lvbi0xMjM0XCIsXG4gIH1cblxuICByZXR1cm4gbmV4dChyZXEsIGN0eClcbn1cbiIsICJpbXBvcnQgeyBNaWRkbGV3YXJlIH0gZnJvbSBcIndpbnRlcnNwZWMvbWlkZGxld2FyZVwiXG5pbXBvcnQga2xldXIgZnJvbSBcImtsZXVyXCJcblxuZXhwb3J0IGNvbnN0IHdpdGhFcnJvckhhbmRsaW5nOiBNaWRkbGV3YXJlPHt9LCB7fT4gPSBhc3luYyAocmVxLCBjdHgsIG5leHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbmV4dChyZXEsIGN0eClcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGNvbnNvbGUuZXJyb3Ioa2xldXIucmVkKFwiSW50ZXJjZXB0ZWQgZXJyb3I6XCIpLCBlcnJvcilcbiAgICAvLyBJZiBlcnJvciBpcyBhIFJlc3BvbnNlLCByZXR1cm4gaXRcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIGVycm9yXG4gICAgfVxuICAgIHJldHVybiAoY3R4IGFzIGFueSkuanNvbihcbiAgICAgIHtcbiAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yPy5tZXNzYWdlLFxuICAgICAgICAgIGVycm9yX2NvZGU6IGVycm9yPy5lcnJvcl9jb2RlID8/IFwiaW50ZXJuYWxfc2VydmVyX2Vycm9yXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgeyBzdGF0dXM6IGVycm9yPy5zdGF0dXMgfHwgNTAwIH0sXG4gICAgKVxuICB9XG59XG4iLCAiaW1wb3J0IHsgTWlkZGxld2FyZSB9IGZyb20gXCJ3aW50ZXJzcGVjL21pZGRsZXdhcmVcIlxuaW1wb3J0IGtsZXVyIGZyb20gXCJrbGV1clwiXG5cbi8vIEVOQUJMRSBDT0xPUlMgQUxXQVlTXG5rbGV1ci5lbmFibGVkID0gdHJ1ZVxuXG5jb25zdCBjb2xvclN0YXR1cyA9IChzdGF0dXM6IG51bWJlcikgPT4ge1xuICBpZiAoc3RhdHVzID49IDUwMCkge1xuICAgIHJldHVybiBrbGV1ci5yZWQoc3RhdHVzLnRvU3RyaW5nKCkpXG4gIH1cbiAgaWYgKHN0YXR1cyA+PSA0MDApIHtcbiAgICByZXR1cm4ga2xldXIueWVsbG93KHN0YXR1cy50b1N0cmluZygpKVxuICB9XG4gIHJldHVybiBrbGV1ci5ncmVlbihzdGF0dXMudG9TdHJpbmcoKSlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXIge1xuICBlcnJvcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkXG4gIGluZm86ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZFxuICB3YXJuOiAoLi4uYXJnczogYW55W10pID0+IHZvaWRcbiAgZGVidWc6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3Qgd2l0aFJlcXVlc3RMb2dnaW5nOiBNaWRkbGV3YXJlPFxuICB7fSxcbiAge1xuICAgIGxvZ2dlcjogTG9nZ2VyXG4gIH1cbj4gPSBhc3luYyAocmVxLCBjdHgsIG5leHQpID0+IHtcbiAgaWYgKCFjdHgubG9nZ2VyKSB7XG4gICAgY3R4LmxvZ2dlciA9IHtcbiAgICAgIGVycm9yOiAoLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZXJyb3IoLi4uYXJncyksXG4gICAgICBpbmZvOiAoLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUubG9nKC4uLmFyZ3MpLFxuICAgICAgd2FybjogKC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLndhcm4oLi4uYXJncyksXG4gICAgICBkZWJ1ZzogKC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmxvZyguLi5hcmdzKSxcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICBjdHgubG9nZ2VyLmluZm8oa2xldXIuYmx1ZShgPiAke3JlcS5tZXRob2R9ICR7cmVxLnVybH1gKSlcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5leHQocmVxLCBjdHgpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGF3YWl0IHJlc3BvbnNlLmNsb25lKCkudGV4dCgpXG4gICAgICBjdHgubG9nZ2VyLmluZm8oXG4gICAgICAgIGA8ICR7Y29sb3JTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKX0gJHtrbGV1ci5ncmF5KHJlc3BvbnNlQm9keS5zbGljZSgwLCA0MCkucmVwbGFjZSgvKFxcclxcbnxcXG58XFxyKS9nbSwgXCJcIikpfWAsXG4gICAgICApXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY3R4LmxvZ2dlci5pbmZvKGA8ICR7Y29sb3JTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKX1gKVxuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgY3R4LmxvZ2dlci5pbmZvKGtsZXVyLnJlZChgPCBFUlJPUiAke2UudG9TdHJpbmcoKS5zbGljZSgwLCA1MCl9Li4uYCkpXG4gICAgdGhyb3cgZVxuICB9XG59XG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IGFpUmV2aWV3U2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25Cb2R5OiB6Lm9iamVjdCh7XG4gICAgYWlfcmV2aWV3X2lkOiB6LnN0cmluZygpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgYWlfcmV2aWV3OiBhaVJldmlld1NjaGVtYSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBhaV9yZXZpZXdfaWQgfSA9IHJlcS5qc29uQm9keVxuICBjb25zdCBleGlzdGluZyA9IGN0eC5kYi5nZXRBaVJldmlld0J5SWQoYWlfcmV2aWV3X2lkKVxuICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiYWlfcmV2aWV3X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJBSSByZXZpZXcgbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgY29uc3QgdXBkYXRlZCA9IGN0eC5kYi51cGRhdGVBaVJldmlldyhhaV9yZXZpZXdfaWQsIHtcbiAgICBhaV9yZXZpZXdfdGV4dDogXCJQbGFjZWhvbGRlciBBSSBSZXZpZXdcIixcbiAgICBzdGFydF9wcm9jZXNzaW5nX2F0OiBleGlzdGluZy5zdGFydF9wcm9jZXNzaW5nX2F0ID8/IG5vdyxcbiAgICBmaW5pc2hlZF9wcm9jZXNzaW5nX2F0OiBub3csXG4gICAgZGlzcGxheV9zdGF0dXM6IFwiY29tcGxldGVkXCIsXG4gIH0pIVxuICByZXR1cm4gY3R4Lmpzb24oeyBhaV9yZXZpZXc6IHVwZGF0ZWQgfSlcbn0pXG4iLCAiaW1wb3J0IHsgZGF0YXNoZWV0U2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGNvbnN0IHByb2Nlc3NBbGxEYXRhc2hlZXRzID0gKGN0eDogYW55KSA9PiB7XG4gIGNvbnN0IHByb2Nlc3NlZCA9IFtdIGFzIHouaW5mZXI8dHlwZW9mIGRhdGFzaGVldFNjaGVtYT5bXVxuICBjdHguZGIuZGF0YXNoZWV0cy5mb3JFYWNoKChkczogYW55KSA9PiB7XG4gICAgaWYgKCFkcy5waW5faW5mb3JtYXRpb24gfHwgIWRzLmRhdGFzaGVldF9wZGZfdXJscyB8fCAhZHMuYWlfZGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSBjdHguZGIudXBkYXRlRGF0YXNoZWV0KGRzLmRhdGFzaGVldF9pZCwge1xuICAgICAgICBwaW5faW5mb3JtYXRpb246IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwaW5fbnVtYmVyOiBcIjFcIixcbiAgICAgICAgICAgIG5hbWU6IFwiUElOMVwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiUGxhY2Vob2xkZXIgcGluXCIsXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IFtcImRpZ2l0YWxcIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZGF0YXNoZWV0X3BkZl91cmxzOiBbXCJodHRwczovL2V4YW1wbGUuY29tL2RhdGFzaGVldC5wZGZcIl0sXG4gICAgICAgIGFpX2Rlc2NyaXB0aW9uOiBcIlBsYWNlaG9sZGVyIGFpIGRlc2NyaXB0aW9uXCIsXG4gICAgICB9KVxuICAgICAgcHJvY2Vzc2VkLnB1c2godXBkYXRlZCEpXG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Nlc3NlZC5wdXNoKGRzKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHByb2Nlc3NlZFxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJub25lXCIsXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIGRhdGFzaGVldHM6IGRhdGFzaGVldFNjaGVtYS5hcnJheSgpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCBkYXRhc2hlZXRzID0gcHJvY2Vzc0FsbERhdGFzaGVldHMoY3R4KVxuICByZXR1cm4gY3R4Lmpzb24oeyBkYXRhc2hlZXRzIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBzZWVkIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zZWVkXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgYXV0aDogXCJub25lXCIsXG4gIGpzb25SZXNwb25zZTogei5hbnkoKSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICByZXR1cm4gY3R4Lmpzb24oY3R4LmRiLmdldFN0YXRlKCkpXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBvcmRlclN0ZXBzIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL3V0aWxzL29yZGVyLXN0ZXBzXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIHN1Y2Nlc3M6IHouYm9vbGVhbigpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICAvLyBHZXQgYWxsIG9yZGVycyB0aGF0IGFyZW4ndCBmaW5pc2hlZFxuICBjb25zdCBvcmRlcnMgPSBjdHguZGIub3JkZXJzLmZpbHRlcigob3JkZXIpID0+ICFvcmRlci5pc19maW5pc2hlZClcbiAgY29uc3QgdXBkYXRlZE9yZGVycyA9IFtdXG5cbiAgZm9yIChjb25zdCBvcmRlciBvZiBvcmRlcnMpIHtcbiAgICBjb25zdCBvcmRlclN0YXRlID0gY3R4LmRiLmdldEpsY3BjYk9yZGVyU3RhdGVzQnlPcmRlcklkKG9yZGVyLm9yZGVyX2lkKVxuICAgIGlmICghb3JkZXJTdGF0ZSkgY29udGludWVcblxuICAgIC8vIEZpbmQgdGhlIG5leHQgc3RlcCB0byBjb21wbGV0ZVxuICAgIGxldCBuZXh0U3RlcEluZGV4ID0gLTFcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyU3RlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSBvcmRlclN0ZXBzW2ldXG4gICAgICBpZiAoIW9yZGVyU3RhdGVbc3RlcF0pIHtcbiAgICAgICAgbmV4dFN0ZXBJbmRleCA9IGlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBhbGwgc3RlcHMgYXJlIGNvbXBsZXRlZCBvciBubyBuZXh0IHN0ZXAgZm91bmRcbiAgICBpZiAobmV4dFN0ZXBJbmRleCA9PT0gLTEpIHtcbiAgICAgIHVwZGF0ZWRPcmRlcnMucHVzaCh7XG4gICAgICAgIG9yZGVyX2lkOiBvcmRlci5vcmRlcl9pZCxcbiAgICAgICAgY3VycmVudF9zdGVwOiBudWxsLFxuICAgICAgfSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBuZXh0IHN0ZXAgdG8gdHJ1ZVxuICAgIGNvbnN0IG5leHRTdGVwID0gb3JkZXJTdGVwc1tuZXh0U3RlcEluZGV4XVxuICAgIGNvbnN0IHVwZGF0ZXMgPSB7XG4gICAgICBbbmV4dFN0ZXBdOiB0cnVlLFxuICAgICAgY3VycmVudF9zdGVwOiBuZXh0U3RlcCxcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIGlzIHRoZSBsYXN0IHN0ZXAsIGFsc28gdXBkYXRlIHRoZSBvcmRlciBzdGF0dXNcbiAgICBpZiAobmV4dFN0ZXBJbmRleCA9PT0gb3JkZXJTdGVwcy5sZW5ndGggLSAxKSB7XG4gICAgICBjdHguZGIudXBkYXRlT3JkZXIob3JkZXIub3JkZXJfaWQsIHtcbiAgICAgICAgaXNfZmluaXNoZWQ6IHRydWUsXG4gICAgICAgIGNvbXBsZXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjdHguZGIudXBkYXRlSmxjcGNiT3JkZXJTdGF0ZShvcmRlci5vcmRlcl9pZCwgdXBkYXRlcylcblxuICAgIHVwZGF0ZWRPcmRlcnMucHVzaCh7XG4gICAgICBvcmRlcl9pZDogb3JkZXIub3JkZXJfaWQsXG4gICAgICBjdXJyZW50X3N0ZXA6IG5leHRTdGVwLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gIH0pXG59KVxuIiwgImV4cG9ydCBjb25zdCBvcmRlclN0ZXBzID0gW1xuICBcImFyZV9nZXJiZXJzX2dlbmVyYXRlZFwiLFxuICBcImFyZV9nZXJiZXJzX3VwbG9hZGVkXCIsXG4gIFwiaXNfZ2VyYmVyX2FuYWx5emVkXCIsXG4gIFwiYXJlX2luaXRpYWxfY29zdHNfY2FsY3VsYXRlZFwiLFxuICBcImlzX3BjYl9hZGRlZF90b19jYXJ0XCIsXG4gIFwiaXNfYm9tX3VwbG9hZGVkXCIsXG4gIFwiaXNfcG5wX3VwbG9hZGVkXCIsXG4gIFwiaXNfYm9tX3BucF9hbmFseXplZFwiLFxuICBcImlzX2JvbV9wYXJzaW5nX2NvbXBsZXRlXCIsXG4gIFwiYXJlX2NvbXBvbmVudHNfYXZhaWxhYmxlXCIsXG4gIFwiaXNfcGF0Y2hfbWFwX2dlbmVyYXRlZFwiLFxuICBcImlzX2pzb25fbWVyZ2VfZmlsZV9jcmVhdGVkXCIsXG4gIFwiaXNfZGZtX3Jlc3VsdF9nZW5lcmF0ZWRcIixcbiAgXCJhcmVfZmlsZXNfZG93bmxvYWRlZFwiLFxuICBcImFyZV9wcm9kdWN0X2NhdGVnb3JpZXNfZmV0Y2hlZFwiLFxuICBcImFyZV9maW5hbF9jb3N0c19jYWxjdWxhdGVkXCIsXG4gIFwiaXNfanNvbl9tZXJnZV9maWxlX3VwZGF0ZWRcIixcbiAgXCJpc19hZGRlZF90b19jYXJ0XCIsXG5dIGFzIGNvbnN0XG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IG9yZGVyUXVvdGVTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBvcmRlcl9xdW90ZV9pZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9yZGVyX3F1b3Rlczogb3JkZXJRdW90ZVNjaGVtYS5hcnJheSgpLm9wdGlvbmFsKCksXG4gICAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBvcmRlcl9xdW90ZV9pZCB9ID0gcmVxLmpzb25Cb2R5XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvcmRlcl9xdW90ZXM6IFtcbiAgICAgIHtcbiAgICAgICAgb3JkZXJfcXVvdGVfaWQsXG4gICAgICAgIGFjY291bnRfaWQ6IFwiMTIzXCIsXG4gICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogXCIxMjNcIixcbiAgICAgICAgaXNfY29tcGxldGVkOiB0cnVlLFxuICAgICAgICBpc19wcm9jZXNzaW5nOiBmYWxzZSxcbiAgICAgICAgdmVuZG9yX25hbWU6IFwiSkxDUENCXCIsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBoYXNfZXJyb3I6IGZhbHNlLFxuICAgICAgICBjcmVhdGVkX2F0OiBcIjIwMjUtMDQtMjFcIixcbiAgICAgICAgdXBkYXRlZF9hdDogXCIyMDI1LTA0LTIxXCIsXG4gICAgICAgIGNvbXBsZXRlZF9hdDogXCIyMDI1LTA0LTIxXCIsXG4gICAgICAgIHF1b3RlZF9jb21wb25lbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWFudWZhY3R1cmVyX3BhcnRfbnVtYmVyOiBcIjEyM1wiLFxuICAgICAgICAgICAgc3VwcGxpZXJfcGFydF9udW1iZXI6IFwiMTIzXCIsXG4gICAgICAgICAgICBxdWFudGl0eTogMSxcbiAgICAgICAgICAgIHVuaXRfcHJpY2U6IDEwMCxcbiAgICAgICAgICAgIHRvdGFsX3ByaWNlOiAxMDAsXG4gICAgICAgICAgICBhdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtYW51ZmFjdHVyZXJfcGFydF9udW1iZXI6IFwiMTIzNFwiLFxuICAgICAgICAgICAgc3VwcGxpZXJfcGFydF9udW1iZXI6IFwiMTIzNFwiLFxuICAgICAgICAgICAgcXVhbnRpdHk6IDEsXG4gICAgICAgICAgICB1bml0X3ByaWNlOiAyMDAsXG4gICAgICAgICAgICB0b3RhbF9wcmljZTogMjAwLFxuICAgICAgICAgICAgYXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGJhcmVfcGNiX2Nvc3Q6IDMwMCxcbiAgICAgICAgc2hpcHBpbmdfb3B0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhcnJpZXI6IFwiREhMXCIsXG4gICAgICAgICAgICBzZXJ2aWNlOiBcIkV4cHJlc3NcIixcbiAgICAgICAgICAgIGNvc3Q6IDEwMCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhcnJpZXI6IFwiRmVkRXhcIixcbiAgICAgICAgICAgIHNlcnZpY2U6IFwiRXhwcmVzc1wiLFxuICAgICAgICAgICAgY29zdDogMjAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHRvdGFsX2Nvc3Rfd2l0aG91dF9zaGlwcGluZzogMTAwLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3JkZXJfcXVvdGVfaWQsXG4gICAgICAgIGFjY291bnRfaWQ6IFwiMTIzXCIsXG4gICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogXCIxMjNcIixcbiAgICAgICAgaXNfY29tcGxldGVkOiB0cnVlLFxuICAgICAgICBpc19wcm9jZXNzaW5nOiBmYWxzZSxcbiAgICAgICAgdmVuZG9yX25hbWU6IFwiREtSZWRcIixcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIGhhc19lcnJvcjogZmFsc2UsXG4gICAgICAgIGNyZWF0ZWRfYXQ6IFwiMjAyNS0wNC0yMVwiLFxuICAgICAgICB1cGRhdGVkX2F0OiBcIjIwMjUtMDQtMjFcIixcbiAgICAgICAgY29tcGxldGVkX2F0OiBcIjIwMjUtMDQtMjFcIixcbiAgICAgICAgcXVvdGVkX2NvbXBvbmVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtYW51ZmFjdHVyZXJfcGFydF9udW1iZXI6IFwiMTIzXCIsXG4gICAgICAgICAgICBzdXBwbGllcl9wYXJ0X251bWJlcjogXCIxMjNcIixcbiAgICAgICAgICAgIHF1YW50aXR5OiAxLFxuICAgICAgICAgICAgdW5pdF9wcmljZTogMTAwLFxuICAgICAgICAgICAgdG90YWxfcHJpY2U6IDEwMCxcbiAgICAgICAgICAgIGF2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hbnVmYWN0dXJlcl9wYXJ0X251bWJlcjogXCIxMjM0XCIsXG4gICAgICAgICAgICBzdXBwbGllcl9wYXJ0X251bWJlcjogXCIxMjM0XCIsXG4gICAgICAgICAgICBxdWFudGl0eTogMSxcbiAgICAgICAgICAgIHVuaXRfcHJpY2U6IDIwMCxcbiAgICAgICAgICAgIHRvdGFsX3ByaWNlOiAyMDAsXG4gICAgICAgICAgICBhdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgYmFyZV9wY2JfY29zdDogMzAwLFxuICAgICAgICBzaGlwcGluZ19vcHRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FycmllcjogXCJESExcIixcbiAgICAgICAgICAgIHNlcnZpY2U6IFwiRXhwcmVzc1wiLFxuICAgICAgICAgICAgY29zdDogMTAwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FycmllcjogXCJGZWRFeFwiLFxuICAgICAgICAgICAgc2VydmljZTogXCJFeHByZXNzXCIsXG4gICAgICAgICAgICBjb3N0OiAyMDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdG90YWxfY29zdF93aXRob3V0X3NoaXBwaW5nOiAxMDAsXG4gICAgICB9LFxuICAgIF0sXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBwcm9jZXNzQWxsRGF0YXNoZWV0cyB9IGZyb20gXCIuL2RhdGFzaGVldHMvcHJvY2Vzc19hbGxfZGF0YXNoZWV0c1wiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIl0sXG4gIGF1dGg6IFwibm9uZVwiLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHsgb2s6IHouYm9vbGVhbigpIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIHByb2Nlc3NBbGxEYXRhc2hlZXRzKGN0eClcbiAgcmV0dXJuIGN0eC5qc29uKHsgb2s6IHRydWUgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHNlZWQgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NlZWRcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJub25lXCIsXG4gIGpzb25SZXNwb25zZTogei5vYmplY3QoeyBvazogei5ib29sZWFuKCkgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgc2VlZChjdHguZGIpXG5cbiAgcmV0dXJuIGN0eC5qc29uKHsgb2s6IHRydWUgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIGFjY291bnRfYmFsYW5jZTogei5vYmplY3Qoe1xuICAgICAgbW9udGhseV9haV9idWRnZXRfdXNlZF91c2Q6IHoubnVtYmVyKCksXG4gICAgfSksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIC8vIEZvciB0aGlzIGV4YW1wbGUsIHdlJ2xsIHJldHVybiBhIG1vY2sgYmFsYW5jZVxuICAvLyBJbiBhIHJlYWwgaW1wbGVtZW50YXRpb24sIHlvdSB3b3VsZCBmZXRjaCB0aGlzIGZyb20gYSBkYXRhYmFzZSBvciBleHRlcm5hbCBzZXJ2aWNlXG4gIGNvbnN0IG1vY2tCYWxhbmNlID0ge1xuICAgIG1vbnRobHlfYWlfYnVkZ2V0X3VzZWRfdXNkOiAyLjUsXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIGFjY291bnRfYmFsYW5jZTogbW9ja0JhbGFuY2UsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQge1xuICBBY2NvdW50LFxuICBhY2NvdW50U2NoZW1hLFxuICBwdWJsaWNBY2NvdW50U2NoZW1hLFxufSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIiwgXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgdHNjaXJjdWl0X2hhbmRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGdpdGh1Yl91c2VybmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgYWNjb3VudDogcHVibGljQWNjb3VudFNjaGVtYS5leHRlbmQoe1xuICAgICAgZW1haWw6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBsZXQgYWNjb3VudDogQWNjb3VudCB8IHVuZGVmaW5lZFxuICBjb25zdCB7IGdpdGh1Yl91c2VybmFtZSwgdHNjaXJjdWl0X2hhbmRsZSB9ID0gcmVxLmNvbW1vblBhcmFtc1xuICBpZiAodHNjaXJjdWl0X2hhbmRsZSkge1xuICAgIGNvbnN0IGZvdW5kQWNjb3VudCA9IGN0eC5kYi5hY2NvdW50cy5maW5kKFxuICAgICAgKGFjYzogQWNjb3VudCkgPT5cbiAgICAgICAgYWNjLnRzY2lyY3VpdF9oYW5kbGU/LnRvTG93ZXJDYXNlKCkgPT09IHRzY2lyY3VpdF9oYW5kbGUudG9Mb3dlckNhc2UoKSxcbiAgICApXG4gICAgaWYgKGZvdW5kQWNjb3VudCkge1xuICAgICAgYWNjb3VudCA9IHsgLi4uZm91bmRBY2NvdW50LCBlbWFpbDogdW5kZWZpbmVkIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoZ2l0aHViX3VzZXJuYW1lKSB7XG4gICAgY29uc3QgZm91bmRBY2NvdW50ID0gY3R4LmRiLmFjY291bnRzLmZpbmQoXG4gICAgICAoYWNjOiBBY2NvdW50KSA9PlxuICAgICAgICBhY2MuZ2l0aHViX3VzZXJuYW1lPy50b0xvd2VyQ2FzZSgpID09PSBnaXRodWJfdXNlcm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICApXG4gICAgaWYgKGZvdW5kQWNjb3VudCkge1xuICAgICAgYWNjb3VudCA9IHsgLi4uZm91bmRBY2NvdW50LCBlbWFpbDogdW5kZWZpbmVkIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYWNjb3VudCA9IGN0eC5kYi5nZXRBY2NvdW50KGN0eC5hdXRoLmFjY291bnRfaWQpXG4gIH1cblxuICBpZiAoIWFjY291bnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhY2NvdW50X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJBY2NvdW50IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oeyBhY2NvdW50IH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBhY2NvdW50U2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25Cb2R5OiB6Lm9iamVjdCh7XG4gICAgcXVlcnk6IHouc3RyaW5nKCksXG4gICAgbGltaXQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZWZhdWx0KDUwKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgICBhY2NvdW50czogei5hcnJheShhY2NvdW50U2NoZW1hKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBxdWVyeSwgbGltaXQgfSA9IHJlcS5qc29uQm9keVxuICBjb25zdCBhY2NvdW50cyA9IGN0eC5kYi5zZWFyY2hBY2NvdW50cyhxdWVyeSwgbGltaXQpXG4gIHJldHVybiBjdHguanNvbih7IGFjY291bnRzLCBvazogdHJ1ZSB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHtcbiAgYWNjb3VudFNjaGVtYSxcbiAgdHNjaXJjdWl0SGFuZGxlU2NoZW1hLFxufSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCIsIFwiUEFUQ0hcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIHRzY2lyY3VpdF9oYW5kbGU6IHRzY2lyY3VpdEhhbmRsZVNjaGVtYSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIGFjY291bnQ6IGFjY291bnRTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgdHNjaXJjdWl0X2hhbmRsZSB9ID0gcmVxLmpzb25Cb2R5XG5cbiAgY29uc3QgcmVxdWVzdGVkSGFuZGxlID0gdHNjaXJjdWl0X2hhbmRsZS50cmltKClcblxuICBpZiAoIXJlcXVlc3RlZEhhbmRsZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludmFsaWRfdHNjaXJjdWl0X2hhbmRsZVwiLFxuICAgICAgbWVzc2FnZTogXCJ0c2NpcmN1aXRfaGFuZGxlIGNhbm5vdCBiZSBlbXB0eVwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBhY2NvdW50ID0gY3R4LmRiLmdldEFjY291bnQoY3R4LmF1dGguYWNjb3VudF9pZClcblxuICBpZiAoIWFjY291bnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhY2NvdW50X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJBY2NvdW50IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBleGlzdGluZ0hhbmRsZUxvd2VyID0gYWNjb3VudC50c2NpcmN1aXRfaGFuZGxlPy50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHJlcXVlc3RlZEhhbmRsZUxvd2VyID0gcmVxdWVzdGVkSGFuZGxlLnRvTG93ZXJDYXNlKClcblxuICBpZiAoZXhpc3RpbmdIYW5kbGVMb3dlciA9PT0gcmVxdWVzdGVkSGFuZGxlTG93ZXIpIHtcbiAgICByZXR1cm4gY3R4Lmpzb24oeyBhY2NvdW50IH0pXG4gIH1cblxuICBjb25zdCBkdXBsaWNhdGVBY2NvdW50ID0gY3R4LmRiXG4gICAgLmdldFN0YXRlKClcbiAgICAuYWNjb3VudHMuZmluZChcbiAgICAgIChhKSA9PlxuICAgICAgICBhLnRzY2lyY3VpdF9oYW5kbGU/LnRvTG93ZXJDYXNlKCkgPT09IHJlcXVlc3RlZEhhbmRsZUxvd2VyICYmXG4gICAgICAgIGEuYWNjb3VudF9pZCAhPT0gY3R4LmF1dGguYWNjb3VudF9pZCxcbiAgICApXG5cbiAgaWYgKGR1cGxpY2F0ZUFjY291bnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhY2NvdW50X3RzY2lyY3VpdF9oYW5kbGVfYWxyZWFkeV9leGlzdHNcIixcbiAgICAgIG1lc3NhZ2U6IFwiQW5vdGhlciBhY2NvdW50IGFscmVhZHkgdXNlcyB0aGlzIHRzY2lyY3VpdCBoYW5kbGVcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgdXBkYXRlZEFjY291bnQgPSBjdHguZGIudXBkYXRlQWNjb3VudChjdHguYXV0aC5hY2NvdW50X2lkLCB7XG4gICAgdHNjaXJjdWl0X2hhbmRsZTogcmVxdWVzdGVkSGFuZGxlLFxuICB9KVxuXG4gIGlmICghdXBkYXRlZEFjY291bnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhY2NvdW50X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJBY2NvdW50IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cbiAgaWYgKGFjY291bnQucGVyc29uYWxfb3JnX2lkKSB7XG4gICAgY29uc3QgcGVyc29uYWxPcmcgPSBjdHguZGJcbiAgICAgIC5nZXRTdGF0ZSgpXG4gICAgICAub3JnYW5pemF0aW9ucy5maW5kKChvcmcpID0+IG9yZy5vcmdfaWQgPT09IGFjY291bnQucGVyc29uYWxfb3JnX2lkKVxuICAgIGlmIChwZXJzb25hbE9yZyAmJiBwZXJzb25hbE9yZy5pc19wZXJzb25hbF9vcmcpIHtcbiAgICAgIGN0eC5kYi51cGRhdGVPcmdhbml6YXRpb24oYWNjb3VudC5wZXJzb25hbF9vcmdfaWQsIHtcbiAgICAgICAgdHNjaXJjdWl0X2hhbmRsZTogcmVxdWVzdGVkSGFuZGxlLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oeyBhY2NvdW50OiB1cGRhdGVkQWNjb3VudCB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgYWlSZXZpZXdTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKCksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIGFpX3JldmlldzogYWlSZXZpZXdTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgcGFja2FnZV9yZWxlYXNlX2lkIH0gPSByZXEuanNvbkJvZHkgPz8ge31cblxuICBpZiAocGFja2FnZV9yZWxlYXNlX2lkKSB7XG4gICAgY29uc3QgcmVsZWFzZSA9IGN0eC5kYi5nZXRQYWNrYWdlUmVsZWFzZUJ5SWQocGFja2FnZV9yZWxlYXNlX2lkKVxuICAgIGlmICghcmVsZWFzZSkge1xuICAgICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX3JlbGVhc2Vfbm90X2ZvdW5kXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgICAgfSlcbiAgICB9XG4gICAgY3R4LmRiLnVwZGF0ZVBhY2thZ2VSZWxlYXNlKHtcbiAgICAgIC4uLnJlbGVhc2UsXG4gICAgICBhaV9yZXZpZXdfcmVxdWVzdGVkOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBhaV9yZXZpZXcgPSBjdHguZGIuYWRkQWlSZXZpZXcoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogcGFja2FnZV9yZWxlYXNlX2lkLFxuICAgIGFpX3Jldmlld190ZXh0OiBudWxsLFxuICAgIHN0YXJ0X3Byb2Nlc3NpbmdfYXQ6IG51bGwsXG4gICAgZmluaXNoZWRfcHJvY2Vzc2luZ19hdDogbnVsbCxcbiAgICBwcm9jZXNzaW5nX2Vycm9yOiBudWxsLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBkaXNwbGF5X3N0YXR1czogXCJwZW5kaW5nXCIsXG4gIH0pXG5cbiAgcmV0dXJuIGN0eC5qc29uKHsgYWlfcmV2aWV3IH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBhaVJldmlld1NjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIHF1ZXJ5UGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgYWlfcmV2aWV3X2lkOiB6LnN0cmluZygpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgYWlfcmV2aWV3OiBhaVJldmlld1NjaGVtYSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBhaV9yZXZpZXdfaWQgfSA9IHJlcS5xdWVyeVxuICBjb25zdCBhaV9yZXZpZXcgPSBjdHguZGIuZ2V0QWlSZXZpZXdCeUlkKGFpX3Jldmlld19pZClcbiAgaWYgKCFhaV9yZXZpZXcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhaV9yZXZpZXdfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIkFJIHJldmlldyBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG4gIHJldHVybiBjdHguanNvbih7IGFpX3JldmlldyB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgYWlSZXZpZXdTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBhaV9yZXZpZXdzOiB6LmFycmF5KGFpUmV2aWV3U2NoZW1hKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgYWlfcmV2aWV3cyA9IGN0eC5kYi5saXN0QWlSZXZpZXdzKClcbiAgcmV0dXJuIGN0eC5qc29uKHsgYWlfcmV2aWV3cyB9KVxufSlcbiIsICIvKipcbiAqIEZvcndhcmQgcmVxdWVzdCB0byBhbnRocm9waWNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgYXN5bmMgKHJlcTogUmVxdWVzdCkgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpXG4gIGNvbnN0IGFudGhyb3BpY0FwaUtleSA9IHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZXG5cbiAgaWYgKCFhbnRocm9waWNBcGlLZXkpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiQW50aHJvcGljIEFQSSBrZXkgaXMgbm90IHNldFwiLCB7IHN0YXR1czogNTAwIH0pXG4gIH1cblxuICBjb25zdCBhbnRocm9waWNVcmwgPVxuICAgIFwiaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbVwiICsgdXJsLnBhdGhuYW1lLnJlcGxhY2UoL15cXC9hcGlcXC9haS8sIFwiXCIpXG5cbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHJlcS5oZWFkZXJzKVxuICBoZWFkZXJzLnNldChcIngtYXBpLWtleVwiLCBgJHthbnRocm9waWNBcGlLZXl9YClcblxuICBjb25zb2xlLmxvZyhcInNlbmRpbmcgcmVxdWVzdCB0byBhbnRocm9waWNcIilcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhbnRocm9waWNVcmwsIHtcbiAgICBtZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgaGVhZGVyczogaGVhZGVycyxcbiAgICBib2R5OiByZXEuYm9keSxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZHVwbGV4OiBcImhhbGZcIixcbiAgfSkudGhlbigocikgPT4gci5qc29uKCkpXG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeShyZXNwb25zZSksIHtcbiAgICBzdGF0dXM6IDIwMCxcbiAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gIH0pXG59XG4iLCAiaW1wb3J0IGFpIGZyb20gXCIuL2FpL1suLi5hbnlyb3V0ZV1cIlxuZXhwb3J0IGRlZmF1bHQgYWlcbiIsICJpbXBvcnQgeyBSZWFkYWJsZVN0cmVhbSB9IGZyb20gXCJzdHJlYW0vd2ViXCJcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgKHJlcTogUmVxdWVzdCkgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpXG4gIGNvbnN0IGFudGhyb3BpY0FwaUtleSA9IHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZXG5cbiAgaWYgKCFhbnRocm9waWNBcGlLZXkpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiQW50aHJvcGljIEFQSSBrZXkgaXMgbm90IHNldFwiLCB7IHN0YXR1czogNTAwIH0pXG4gIH1cblxuICBjb25zdCBhbnRocm9waWNVcmwgPVxuICAgIFwiaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbVwiICsgdXJsLnBhdGhuYW1lLnJlcGxhY2UoL15cXC9hcGlcXC9haS8sIFwiXCIpXG5cbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHJlcS5oZWFkZXJzKVxuICBoZWFkZXJzLnNldChcIngtYXBpLWtleVwiLCBgJHthbnRocm9waWNBcGlLZXl9YClcbiAgaGVhZGVycy5zZXQoXCJBY2NlcHRcIiwgXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiKVxuICBoZWFkZXJzLnNldChcIkNhY2hlLUNvbnRyb2xcIiwgXCJuby1jYWNoZVwiKVxuICBoZWFkZXJzLnNldChcIkNvbm5lY3Rpb25cIiwgXCJrZWVwLWFsaXZlXCIpXG5cbiAgY29uc29sZS5sb2coXCJzZW5kaW5nIHJlcXVlc3QgdG8gYW50aHJvcGljXCIpXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYW50aHJvcGljVXJsLCB7XG4gICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgYm9keTogcmVxLmJvZHksXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGR1cGxleDogXCJoYWxmXCIsXG4gIH0pXG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIGlzIHN1Y2Nlc3NmdWxcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoXG4gICAgICBgQW50aHJvcGljIEFQSSByZXR1cm5lZCBhbiBlcnJvcjogJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gLFxuICAgICAge1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIH0sXG4gICAgKVxuICB9XG5cbiAgLy8gQ3JlYXRlIGEgUmVhZGFibGVTdHJlYW0gdG8gcHJvY2VzcyB0aGUgcmVzcG9uc2VcbiAgY29uc3Qgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBzdGFydChjb250cm9sbGVyKSB7XG4gICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5IS5nZXRSZWFkZXIoKVxuXG4gICAgICB0cnkge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICAgICAgICBpZiAoZG9uZSkgYnJlYWtcbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUodmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpXG4gICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgICAgfVxuICAgIH0sXG4gIH0pXG5cbiAgLy8gUmV0dXJuIGEgc3RyZWFtaW5nIHJlc3BvbnNlXG4gIHJldHVybiBuZXcgUmVzcG9uc2Uoc3RyZWFtIGFzIGFueSwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwidGV4dC9ldmVudC1zdHJlYW1cIixcbiAgICAgIFwiQ2FjaGUtQ29udHJvbFwiOiBcIm5vLWNhY2hlXCIsXG4gICAgICBDb25uZWN0aW9uOiBcImtlZXAtYWxpdmVcIixcbiAgICB9LFxuICB9KVxufVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBwcmVmaXg6IHouc3RyaW5nKCksXG4gICAgc3VmZml4OiB6LnN0cmluZygpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgcHJlZGljdGlvbjogei5zdHJpbmcoKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgcmV0dXJuIGN0eC5qc29uKHsgcHJlZGljdGlvbjogXCJ7LyogbW9jayBhdXRvY29tcGxldGUgcHJlZGljdGlvbiAqL31cIiB9KVxufSlcbiIsICJpbXBvcnQgeyBidWdSZXBvcnRTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5jb25zdCByZXF1ZXN0U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0ZXh0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaXNfYXV0b19kZWxldGVkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIGRlbGV0ZV9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdXBlclJlZmluZSgoZGF0YSwgY3R4KSA9PiB7XG4gICAgaWYgKGRhdGEuaXNfYXV0b19kZWxldGVkICYmICFkYXRhLmRlbGV0ZV9hdCkge1xuICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgY29kZTogei5ab2RJc3N1ZUNvZGUuY3VzdG9tLFxuICAgICAgICBtZXNzYWdlOiBcImRlbGV0ZV9hdCBpcyByZXF1aXJlZCB3aGVuIGlzX2F1dG9fZGVsZXRlZCBpcyB0cnVlXCIsXG4gICAgICAgIHBhdGg6IFtcImRlbGV0ZV9hdFwiXSxcbiAgICAgIH0pXG4gICAgfVxuICB9KVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25Cb2R5OiByZXF1ZXN0U2NoZW1hLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5saXRlcmFsKHRydWUpLFxuICAgIGJ1Z19yZXBvcnQ6IGJ1Z1JlcG9ydFNjaGVtYSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyB0ZXh0LCBpc19hdXRvX2RlbGV0ZWQgPSBmYWxzZSwgZGVsZXRlX2F0IH0gPSByZXEuanNvbkJvZHlcblxuICBjb25zdCBidWdSZXBvcnQgPSBjdHguZGIuYWRkQnVnUmVwb3J0KHtcbiAgICByZXBvcnRlcl9hY2NvdW50X2lkOiBjdHguYXV0aC5hY2NvdW50X2lkLFxuICAgIHRleHQ6IHRleHQgPz8gbnVsbCxcbiAgICBpc19hdXRvX2RlbGV0ZWQsXG4gICAgZGVsZXRlX2F0OiBpc19hdXRvX2RlbGV0ZWQgPyBkZWxldGVfYXQgOiBudWxsLFxuICB9KVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb2s6IHRydWUsXG4gICAgYnVnX3JlcG9ydDogYnVnUmVwb3J0LFxuICB9KVxufSlcbiIsICJpbXBvcnQgSlNaaXAgZnJvbSBcImpzemlwXCJcbmltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBxdWVyeVBhcmFtczogei5vYmplY3Qoe1xuICAgIGJ1Z19yZXBvcnRfaWQ6IHouc3RyaW5nKCkudXVpZCgpLFxuICB9KSxcbiAgcmF3UmVzcG9uc2U6IHRydWUsXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBidWdfcmVwb3J0X2lkIH0gPSByZXEucXVlcnlcblxuICBjb25zdCBidWdSZXBvcnQgPSBjdHguZGIuZ2V0QnVnUmVwb3J0QnlJZChidWdfcmVwb3J0X2lkKVxuICBpZiAoIWJ1Z1JlcG9ydCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImJ1Z19yZXBvcnRfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIkJ1ZyByZXBvcnQgbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGlmIChidWdSZXBvcnQucmVwb3J0ZXJfYWNjb3VudF9pZCAhPT0gY3R4LmF1dGguYWNjb3VudF9pZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImJ1Z19yZXBvcnRfZm9yYmlkZGVuXCIsXG4gICAgICBtZXNzYWdlOiBcIllvdSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhpcyBidWcgcmVwb3J0XCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGJ1Z1JlcG9ydEZpbGVzID0gY3R4LmRiLmdldEJ1Z1JlcG9ydEZpbGVzQnlCdWdSZXBvcnRJZChidWdfcmVwb3J0X2lkKVxuXG4gIGNvbnN0IHppcCA9IG5ldyBKU1ppcCgpXG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGJ1Z1JlcG9ydEZpbGVzKSB7XG4gICAgaWYgKGZpbGUuaXNfdGV4dCkge1xuICAgICAgemlwLmZpbGUoZmlsZS5maWxlX3BhdGgsIGZpbGUuY29udGVudF90ZXh0ID8/IFwiXCIsIHsgYmluYXJ5OiBmYWxzZSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBieXRlcyA9IGZpbGUuY29udGVudF9ieXRlcyA/PyBuZXcgVWludDhBcnJheSgpXG4gICAgICB6aXAuZmlsZShmaWxlLmZpbGVfcGF0aCwgYnl0ZXMsIHsgYmluYXJ5OiB0cnVlIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgemlwQ29udGVudCA9IGF3YWl0IHppcC5nZW5lcmF0ZUFzeW5jKHsgdHlwZTogXCJhcnJheWJ1ZmZlclwiIH0pXG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZSh6aXBDb250ZW50LCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi96aXBcIixcbiAgICAgIFwiQ29udGVudC1EaXNwb3NpdGlvblwiOiBgYXR0YWNobWVudDsgZmlsZW5hbWU9XCJidWctcmVwb3J0LSR7YnVnX3JlcG9ydF9pZH0uemlwXCJgLFxuICAgIH0sXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCJub2RlOmJ1ZmZlclwiXG5pbXBvcnQgeyBidWdSZXBvcnRGaWxlUmVzcG9uc2VTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgbm9ybWFsaXplUHJvamVjdEZpbGVQYXRoQW5kVmFsaWRhdGUgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvdXRpbHMvbm9ybWFsaXplUHJvamVjdEZpbGVQYXRoXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuY29uc3QgcmVxdWVzdFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgYnVnX3JlcG9ydF9pZDogei5zdHJpbmcoKS51dWlkKCksXG4gICAgZmlsZV9wYXRoOiB6LnN0cmluZygpLFxuICAgIGNvbnRlbnRfbWltZXR5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBjb250ZW50X3RleHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBjb250ZW50X2Jhc2U2NDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3VwZXJSZWZpbmUoKGRhdGEsIGN0eCkgPT4ge1xuICAgIGlmIChkYXRhLmNvbnRlbnRfdGV4dCAhPT0gdW5kZWZpbmVkICYmIGRhdGEuY29udGVudF9iYXNlNjQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgY29kZTogei5ab2RJc3N1ZUNvZGUuY3VzdG9tLFxuICAgICAgICBtZXNzYWdlOiBcIlByb3ZpZGUgZWl0aGVyIGNvbnRlbnRfdGV4dCBvciBjb250ZW50X2Jhc2U2NCwgbm90IGJvdGhcIixcbiAgICAgICAgcGF0aDogW1wiY29udGVudF90ZXh0XCJdLFxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbmNvbnN0IGluZmVyTWltZXR5cGUgPSAoZmlsZVBhdGg6IHN0cmluZywgcHJvdmlkZWQ/OiBzdHJpbmcpID0+IHtcbiAgaWYgKHByb3ZpZGVkKSByZXR1cm4gcHJvdmlkZWRcblxuICBjb25zdCBsb3dlclBhdGggPSBmaWxlUGF0aC50b0xvd2VyQ2FzZSgpXG4gIGlmIChsb3dlclBhdGguZW5kc1dpdGgoXCIudHNcIikgfHwgbG93ZXJQYXRoLmVuZHNXaXRoKFwiLnRzeFwiKSkge1xuICAgIHJldHVybiBcInRleHQvdHlwZXNjcmlwdFwiXG4gIH1cbiAgaWYgKGxvd2VyUGF0aC5lbmRzV2l0aChcIi5qc1wiKSkgcmV0dXJuIFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiXG4gIGlmIChsb3dlclBhdGguZW5kc1dpdGgoXCIuanNvblwiKSkgcmV0dXJuIFwiYXBwbGljYXRpb24vanNvblwiXG4gIGlmIChsb3dlclBhdGguZW5kc1dpdGgoXCIubWRcIikpIHJldHVybiBcInRleHQvbWFya2Rvd25cIlxuICBpZiAobG93ZXJQYXRoLmVuZHNXaXRoKFwiLmh0bWxcIikpIHJldHVybiBcInRleHQvaHRtbFwiXG4gIGlmIChsb3dlclBhdGguZW5kc1dpdGgoXCIuY3NzXCIpKSByZXR1cm4gXCJ0ZXh0L2Nzc1wiXG4gIGlmIChsb3dlclBhdGguZW5kc1dpdGgoXCIudHh0XCIpKSByZXR1cm4gXCJ0ZXh0L3BsYWluXCJcbiAgcmV0dXJuIFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCJcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogcmVxdWVzdFNjaGVtYSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHoubGl0ZXJhbCh0cnVlKSxcbiAgICBidWdfcmVwb3J0X2ZpbGU6IGJ1Z1JlcG9ydEZpbGVSZXNwb25zZVNjaGVtYSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3Qge1xuICAgIGJ1Z19yZXBvcnRfaWQsXG4gICAgZmlsZV9wYXRoLFxuICAgIGNvbnRlbnRfbWltZXR5cGUsXG4gICAgY29udGVudF90ZXh0LFxuICAgIGNvbnRlbnRfYmFzZTY0LFxuICB9ID0gcmVxLmpzb25Cb2R5XG5cbiAgY29uc3QgYnVnUmVwb3J0ID0gY3R4LmRiLmdldEJ1Z1JlcG9ydEJ5SWQoYnVnX3JlcG9ydF9pZClcbiAgaWYgKCFidWdSZXBvcnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJidWdfcmVwb3J0X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJCdWcgcmVwb3J0IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBpZiAoYnVnUmVwb3J0LnJlcG9ydGVyX2FjY291bnRfaWQgIT09IGN0eC5hdXRoLmFjY291bnRfaWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMywge1xuICAgICAgZXJyb3JfY29kZTogXCJidWdfcmVwb3J0X2ZvcmJpZGRlblwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG8gbm90IGhhdmUgYWNjZXNzIHRvIG1vZGlmeSB0aGlzIGJ1ZyByZXBvcnRcIixcbiAgICB9KVxuICB9XG5cbiAgbGV0IG5vcm1hbGl6ZWRQYXRoOiBzdHJpbmdcbiAgdHJ5IHtcbiAgICBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZVByb2plY3RGaWxlUGF0aEFuZFZhbGlkYXRlKGZpbGVfcGF0aClcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJpbnZhbGlkX2ZpbGVfcGF0aFwiLFxuICAgICAgbWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkludmFsaWQgZmlsZSBwYXRoXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IG1pbWVUeXBlID0gaW5mZXJNaW1ldHlwZShub3JtYWxpemVkUGF0aCwgY29udGVudF9taW1ldHlwZSlcbiAgY29uc3QgaGFzQmFzZTY0ID0gY29udGVudF9iYXNlNjQgIT09IHVuZGVmaW5lZFxuICBjb25zdCBoYXNUZXh0ID0gY29udGVudF90ZXh0ICE9PSB1bmRlZmluZWRcbiAgY29uc3QgaXNUZXh0VXBsb2FkID0gaGFzVGV4dCB8fCAhaGFzQmFzZTY0XG4gIGNvbnN0IHN0b3JlZFRleHQgPSBpc1RleHRVcGxvYWQgPyAoY29udGVudF90ZXh0ID8/IFwiXCIpIDogbnVsbFxuICBjb25zdCBzdG9yZWRCeXRlcyA9XG4gICAgaXNUZXh0VXBsb2FkIHx8ICFoYXNCYXNlNjRcbiAgICAgID8gbnVsbFxuICAgICAgOiBCdWZmZXIuZnJvbShjb250ZW50X2Jhc2U2NCA/PyBcIlwiLCBcImJhc2U2NFwiKVxuXG4gIGNvbnN0IGJ1Z1JlcG9ydEZpbGUgPSBjdHguZGIuYWRkQnVnUmVwb3J0RmlsZSh7XG4gICAgYnVnX3JlcG9ydF9pZCxcbiAgICBmaWxlX3BhdGg6IG5vcm1hbGl6ZWRQYXRoLFxuICAgIGNvbnRlbnRfbWltZXR5cGU6IG1pbWVUeXBlLFxuICAgIGlzX3RleHQ6IGlzVGV4dFVwbG9hZCxcbiAgICBjb250ZW50X3RleHQ6IHN0b3JlZFRleHQsXG4gICAgY29udGVudF9ieXRlczogc3RvcmVkQnl0ZXMsXG4gIH0pXG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgICBidWdfcmVwb3J0X2ZpbGU6IHtcbiAgICAgIGJ1Z19yZXBvcnRfZmlsZV9pZDogYnVnUmVwb3J0RmlsZS5idWdfcmVwb3J0X2ZpbGVfaWQsXG4gICAgICBidWdfcmVwb3J0X2lkOiBidWdSZXBvcnRGaWxlLmJ1Z19yZXBvcnRfaWQsXG4gICAgICBmaWxlX3BhdGg6IGJ1Z1JlcG9ydEZpbGUuZmlsZV9wYXRoLFxuICAgICAgY29udGVudF9taW1ldHlwZTogYnVnUmVwb3J0RmlsZS5jb250ZW50X21pbWV0eXBlLFxuICAgICAgaXNfdGV4dDogYnVnUmVwb3J0RmlsZS5pc190ZXh0LFxuICAgICAgY3JlYXRlZF9hdDogYnVnUmVwb3J0RmlsZS5jcmVhdGVkX2F0LFxuICAgIH0sXG4gIH0pXG59KVxuIiwgImNvbnN0IFJFU1RSSUNURURfRElSUyA9IFtcIi9ub2RlX21vZHVsZXMvXCIsIFwiL2Rpc3QvXCIsIFwiLy5naXQvXCJdXG5cbi8qKlxuICogQSBub3JtYWxpemVkIHByb2plY3QgcGF0aCBhbHdheXMgc3RhcnRzIHdpdGggXCIuL1wiIGFuZCBuZXZlciBlbmRzIHdpdGggYSBzbGFzaC5cbiAqIEl0IGhhcyBubyBiYWNrd2FyZHMgc2xhc2hlcyBhbmQgbm8gZG91YmxlIHNsYXNoZXMuIEl0IGRvZXMgbm90IGdvIHRvIHBhcmVudFxuICogZGlyZWN0b3JpZXMuIEl0IGlzIG5vdCBhIGRpcmVjdG9yeSAobXVzdCBoYXZlIGEgZmlsZSBleHRlbnNpb24pXG4gKlxuICogR09PRDpcbiAqICAtIHNyYy9pbmRleC50c1xuICogIC0gUkVBRE1FLm1kXG4gKlxuICogQkFEOlxuICogLSAuL1JFQURNRS5tZFxuICogLSAuL3NyYy9pbmRleC50c1xuICogLSBzcmNcXGluZGV4LnRzXG4gKiAtIC4uL1JFQURNRS5tZFxuICogLSAuL3NyYy9cbiAqIC0gLi9zcmNcbiAqXG4gKiBBZGRpdGlvbmFsbHksIHRocm93IG9uIGRpcmVjdG9yaWVzIHRoYXQgc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkLCBlLmcuXG4gKiAtIG5vZGVfbW9kdWxlc1xuICogLSBkaXN0XG4gKiAtIC5naXRcbiAqL1xuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVByb2plY3RGaWxlUGF0aEFuZFZhbGlkYXRlID0gKHJhd1BhdGg6IHN0cmluZykgPT4ge1xuICBjb25zdCBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZVByb2plY3RGaWxlUGF0aChyYXdQYXRoKVxuXG4gIGlmIChub3JtYWxpemVkUGF0aC5pbmNsdWRlcyhcIi4uL1wiKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiSW52YWxpZCBwcm9qZWN0IGZpbGUgcGF0aC4gUGFyZW50IGRpcmVjdG9yaWVzIGFyZSBub3QgYWxsb3dlZC5cIixcbiAgICApXG4gIH1cblxuICBpZiAoUkVTVFJJQ1RFRF9ESVJTLnNvbWUoKGRpcikgPT4gbm9ybWFsaXplZFBhdGguaW5jbHVkZXMoZGlyKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBwcm9qZWN0IGZpbGUgcGF0aC4gUmVzdHJpY3RlZCBkaXJlY3RvcmllcyAoJHtSRVNUUklDVEVEX0RJUlMubWFwKFxuICAgICAgICAocmQpID0+IHJkLnNsaWNlKDEsIC0xKSxcbiAgICAgICkuam9pbihcIiwgXCIpfSkgYXJlIG5vdCBhbGxvd2VkLmAsXG4gICAgKVxuICB9XG5cbiAgaWYgKCFub3JtYWxpemVkUGF0aC5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBwcm9qZWN0IGZpbGUgcGF0aC4gTXVzdCBoYXZlIGEgZmlsZSBleHRlbnNpb24uIEdpdmVuIFwiJHtyYXdQYXRofVwiYCxcbiAgICApXG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZFBhdGhcbn1cblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVByb2plY3RGaWxlUGF0aCA9IChyYXdQYXRoOiBzdHJpbmcpID0+IHtcbiAgbGV0IG5vcm1hbGl6ZWRQYXRoID0gcmF3UGF0aC50cmltKCkgLy8gUmVtb3ZlIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZVxuICBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnJlcGxhY2UoL1xcLysvZywgXCIvXCIpIC8vIFJlcGxhY2UgbXVsdGlwbGUgY29uc2VjdXRpdmUgc2xhc2hlcyB3aXRoIGEgc2luZ2xlIHNsYXNoXG4gIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZFBhdGgucmVwbGFjZSgvXlxcLlxcLy8sIFwiXCIpIC8vIFJlbW92ZSBsZWFkaW5nIFwiLi9cIlxuICBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnJlcGxhY2UoL1xcLyQvLCBcIlwiKSAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVkUGF0aC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKSAvLyBSZXBsYWNlIGJhY2tzbGFzaGVzIHdpdGggZm9yd2FyZCBzbGFzaGVzXG4gIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZFBhdGgucmVwbGFjZSgvXlxcLy8sIFwiXCIpIC8vIFJlbW92ZSBsZWFkaW5nIFwiL1wiXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoXG59XG4iLCAiaW1wb3J0IHsgZGF0YXNoZWV0U2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIGNoaXBfbmFtZTogei5zdHJpbmcoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIGRhdGFzaGVldDogZGF0YXNoZWV0U2NoZW1hLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IGNoaXBfbmFtZSB9ID0gcmVxLmpzb25Cb2R5XG4gIGNvbnN0IGRhdGFzaGVldCA9IGN0eC5kYi5hZGREYXRhc2hlZXQoeyBjaGlwX25hbWUgfSlcbiAgcmV0dXJuIGN0eC5qc29uKHsgZGF0YXNoZWV0IH0pXG59KVxuIiwgImltcG9ydCB7IGRhdGFzaGVldFNjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcbmltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIiwgXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAgcXVlcnlQYXJhbXM6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIGRhdGFzaGVldF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgY2hpcF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAucmVmaW5lKCh2YWwpID0+IHZhbC5kYXRhc2hlZXRfaWQgfHwgdmFsLmNoaXBfbmFtZSwge1xuICAgICAgbWVzc2FnZTogXCJkYXRhc2hlZXRfaWQgb3IgY2hpcF9uYW1lIHJlcXVpcmVkXCIsXG4gICAgfSksXG4gIGpzb25Cb2R5OiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIGRhdGFzaGVldDogZGF0YXNoZWV0U2NoZW1hLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IGRhdGFzaGVldF9pZCwgY2hpcF9uYW1lIH0gPSByZXEucXVlcnlcbiAgbGV0IGRhdGFzaGVldFxuICBpZiAoZGF0YXNoZWV0X2lkKSB7XG4gICAgZGF0YXNoZWV0ID0gY3R4LmRiLmdldERhdGFzaGVldEJ5SWQoZGF0YXNoZWV0X2lkKVxuICB9IGVsc2UgaWYgKGNoaXBfbmFtZSkge1xuICAgIGRhdGFzaGVldCA9IGN0eC5kYi5nZXREYXRhc2hlZXRCeUNoaXBOYW1lKGNoaXBfbmFtZSlcbiAgfVxuICBpZiAoIWRhdGFzaGVldCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImRhdGFzaGVldF9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiRGF0YXNoZWV0IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGN0eC5qc29uKHsgZGF0YXNoZWV0IH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIiwgXCJQT1NUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgY2hpcF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaXNfcG9wdWxhcjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIGRhdGFzaGVldHM6IHouYXJyYXkoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIGRhdGFzaGVldF9pZDogei5zdHJpbmcoKS51dWlkKCksXG4gICAgICAgIGNoaXBfbmFtZTogei5zdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgICksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgY2hpcF9uYW1lLCBpc19wb3B1bGFyIH0gPSByZXEuY29tbW9uUGFyYW1zXG4gIGNvbnN0IGRhdGFzaGVldHMgPSBjdHguZGJcbiAgICAubGlzdERhdGFzaGVldHMoeyBjaGlwX25hbWUsIGlzX3BvcHVsYXIgfSlcbiAgICAubWFwKChkcykgPT4gKHtcbiAgICAgIGRhdGFzaGVldF9pZDogZHMuZGF0YXNoZWV0X2lkLFxuICAgICAgY2hpcF9uYW1lOiBkcy5jaGlwX25hbWUsXG4gICAgfSkpXG5cbiAgcmV0dXJuIGN0eC5qc29uKHsgZGF0YXNoZWV0cyB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCBhY2NvdW50ID0gY3R4LmRiLmdldEFjY291bnQoY3R4LmF1dGguYWNjb3VudF9pZClcblxuICBpZiAoIWFjY291bnQpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiQWNjb3VudCBub3QgZm91bmRcIiwgeyBzdGF0dXM6IDQwMSB9KVxuICB9XG5cbiAgLy8gR2V0IHJldHVybl90b19wYWdlIGZyb20gcXVlcnkgcGFyYW1zXG4gIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybClcbiAgY29uc3QgcmV0dXJuVG9QYWdlID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJyZXR1cm5fdG9fcGFnZVwiKSB8fCBcIi9cIlxuXG4gIC8vIENoZWNrIGlmIHVzZXIgYWxyZWFkeSBoYXMgYW4gYWN0aXZlIEdpdEh1YiBpbnN0YWxsYXRpb25cbiAgY29uc3QgZXhpc3RpbmdJbnN0YWxsYXRpb24gPSBjdHguZGIuZ2l0aHViSW5zdGFsbGF0aW9ucy5maW5kKFxuICAgIChpbnN0YWxsYXRpb24pID0+XG4gICAgICBpbnN0YWxsYXRpb24uYWNjb3VudF9pZCA9PT0gY3R4LmF1dGguYWNjb3VudF9pZCAmJiBpbnN0YWxsYXRpb24uaXNfYWN0aXZlLFxuICApXG5cbiAgaWYgKGV4aXN0aW5nSW5zdGFsbGF0aW9uKSB7XG4gICAgLy8gSWYgaW5zdGFsbGF0aW9uIGFscmVhZHkgZXhpc3RzLCByZWRpcmVjdCBiYWNrXG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShcIlwiLCB7XG4gICAgICBzdGF0dXM6IDMwMixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgTG9jYXRpb246IHJldHVyblRvUGFnZSxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIG5ldyBHaXRIdWIgaW5zdGFsbGF0aW9uIChzaW11bGF0aW5nIHRoZSB1c2VyIGNvbXBsZXRpbmcgdGhlIEdpdEh1YiBBcHAgaW5zdGFsbGF0aW9uKVxuICBjb25zdCBnaXRodWJJbnN0YWxsYXRpb25JZCA9IGBmYWtlX2doX2luc3RhbGxhdGlvbl8ke0RhdGUubm93KCl9YFxuICBjb25zdCBtb2NrSW5zdGFsbGF0aW9uSWQgPSBgJHtEYXRlLm5vdygpfWAgLy8gTW9jayBHaXRIdWIgQXBwIGluc3RhbGxhdGlvbiBJRFxuXG4gIGNvbnN0IG5ld0luc3RhbGxhdGlvbiA9IHtcbiAgICBnaXRodWJfaW5zdGFsbGF0aW9uX2lkOiBnaXRodWJJbnN0YWxsYXRpb25JZCxcbiAgICBhY2NvdW50X2lkOiBjdHguYXV0aC5hY2NvdW50X2lkLFxuICAgIGluc3RhbGxhdGlvbl9pZDogbW9ja0luc3RhbGxhdGlvbklkLFxuICAgIGdpdGh1Yl91c2VybmFtZTogYWNjb3VudC5naXRodWJfdXNlcm5hbWUsXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBpc19hY3RpdmU6IHRydWUsXG4gICAgYWNjZXNzX3Rva2VuOiBgZ2hzX21vY2tfdG9rZW5fJHtEYXRlLm5vdygpfWAsIC8vIE1vY2sgYWNjZXNzIHRva2VuXG4gICAgYWNjZXNzX3Rva2VuX2V4cGlyZXNfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgKyAzNjAwMDAwKS50b0lTT1N0cmluZygpLCAvLyAxIGhvdXIgZnJvbSBub3dcbiAgfVxuXG4gIGN0eC5kYi5naXRodWJJbnN0YWxsYXRpb25zLnB1c2gobmV3SW5zdGFsbGF0aW9uKVxuXG4gIC8vIFJldHVybiBIVE1MIHBhZ2UgdGhhdCBzaG93cyBpbnN0YWxsYXRpb24gc3VjY2VzcyBhbmQgcmVkaXJlY3RzIGJhY2tcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShcbiAgICBgXG4gICAgPGh0bWw+XG4gICAgICA8aGVhZD5cbiAgICAgICAgPHRpdGxlPkdpdEh1YiBJbnN0YWxsYXRpb24gQ29tcGxldGU8L3RpdGxlPlxuICAgICAgICA8bWV0YSBodHRwLWVxdWl2PVwicmVmcmVzaFwiIGNvbnRlbnQ9XCIzO3VybD0ke3JldHVyblRvUGFnZX1cIj5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5IHN0eWxlPVwiZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBwYWRkaW5nOiA0MHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XG4gICAgICAgIDxoMT5cdTI3MDUgR2l0SHViIEluc3RhbGxhdGlvbiBDb21wbGV0ZSE8L2gxPlxuICAgICAgICA8cD5Zb3VyIEdpdEh1YiBhY2NvdW50IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQgdG8gdHNjaXJjdWl0LjwvcD5cbiAgICAgICAgPHA+WW91IGNhbiBub3cgYWNjZXNzIHlvdXIgcmVwb3NpdG9yaWVzIGluIHRoZSBwYWNrYWdlIHNldHRpbmdzLjwvcD5cbiAgICAgICAgPHA+UmVkaXJlY3RpbmcgeW91IGJhY2sgaW4gMyBzZWNvbmRzLi4uPC9wPlxuICAgICAgICA8YSBocmVmPVwiJHtyZXR1cm5Ub1BhZ2V9XCIgc3R5bGU9XCJjb2xvcjogIzAwNjZjYzsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZDtcIj5DbGljayBoZXJlIGlmIHlvdSdyZSBub3QgcmVkaXJlY3RlZCBhdXRvbWF0aWNhbGx5PC9hPlxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgICBgLFxuICAgIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgKVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgcmVwb3M6IHouYXJyYXkoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHVuc2NvcGVkX25hbWU6IHouc3RyaW5nKCksXG4gICAgICAgIGZ1bGxfbmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgcHJpdmF0ZTogei5ib29sZWFuKCksXG4gICAgICAgIG93bmVyOiB6Lm9iamVjdCh7XG4gICAgICAgICAgbG9naW46IHouc3RyaW5nKCksXG4gICAgICAgIH0pLFxuICAgICAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgICAgICBkZWZhdWx0X2JyYW5jaDogei5zdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgICksXG4gIH0pLFxufSkoYXN5bmMgKF9yZXEsIGN0eCkgPT4ge1xuICBjb25zdCBhY2NvdW50ID0gY3R4LmRiLmdldEFjY291bnQoY3R4LmF1dGguYWNjb3VudF9pZClcblxuICBpZiAoIWFjY291bnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMSwge1xuICAgICAgZXJyb3JfY29kZTogXCJhY2NvdW50X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJBY2NvdW50IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDaGVjayBpZiB1c2VyIGhhcyBHaXRIdWIgYWNjb3VudCBjb25uZWN0ZWRcbiAgaWYgKCFhY2NvdW50LmdpdGh1Yl91c2VybmFtZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImdpdGh1Yl9ub3RfY29ubmVjdGVkXCIsXG4gICAgICBtZXNzYWdlOlxuICAgICAgICBcIkdpdEh1YiBhY2NvdW50IG5vdCBjb25uZWN0ZWQuIFBsZWFzZSBjb25uZWN0IHlvdXIgR2l0SHViIGFjY291bnQgZmlyc3QuXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHVzZXIgaGFzIGEgR2l0SHViIGluc3RhbGxhdGlvblxuICBjb25zdCBnaXRodWJJbnN0YWxsYXRpb24gPSBjdHguZGIuZ2l0aHViSW5zdGFsbGF0aW9ucy5maW5kKFxuICAgIChpbnN0YWxsYXRpb24pID0+XG4gICAgICBpbnN0YWxsYXRpb24uYWNjb3VudF9pZCA9PT0gY3R4LmF1dGguYWNjb3VudF9pZCAmJiBpbnN0YWxsYXRpb24uaXNfYWN0aXZlLFxuICApXG5cbiAgaWYgKCFnaXRodWJJbnN0YWxsYXRpb24pIHtcbiAgICAvLyBSZXR1cm4gZW1wdHkgYXJyYXkgaWYgbm8gR2l0SHViIGluc3RhbGxhdGlvbiBmb3VuZFxuICAgIHJldHVybiBjdHguanNvbih7XG4gICAgICByZXBvczogW10sXG4gICAgfSlcbiAgfVxuXG4gIC8vIE1vY2sgcmVwb3NpdG9yaWVzIGZvciBkZW1vbnN0cmF0aW9uXG4gIC8vIEluIGEgcmVhbCBpbXBsZW1lbnRhdGlvbiwgdGhpcyB3b3VsZCBmZXRjaCBmcm9tIEdpdEh1YiBBUEkgdXNpbmcgdGhlIGluc3RhbGxhdGlvbiBhY2Nlc3MgdG9rZW5cbiAgY29uc3QgbW9ja1JlcG9zID0gW1xuICAgIHtcbiAgICAgIHVuc2NvcGVkX25hbWU6IFwibXktZWxlY3Ryb25pY3MtcHJvamVjdFwiLFxuICAgICAgZnVsbF9uYW1lOiBgJHthY2NvdW50LmdpdGh1Yl91c2VybmFtZX0vbXktZWxlY3Ryb25pY3MtcHJvamVjdGAsXG4gICAgICBvd25lcjoge1xuICAgICAgICBsb2dpbjogYWNjb3VudC5naXRodWJfdXNlcm5hbWUsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IFwiQXJkdWluby1iYXNlZCBzZW5zb3IgbW9uaXRvcmluZyBzeXN0ZW1cIixcbiAgICAgIHByaXZhdGU6IGZhbHNlLFxuICAgICAgZGVmYXVsdF9icmFuY2g6IFwibWFpblwiLFxuICAgIH0sXG4gICAge1xuICAgICAgdW5zY29wZWRfbmFtZTogXCJwY2ItZGVzaWduc1wiLFxuICAgICAgZnVsbF9uYW1lOiBgJHthY2NvdW50LmdpdGh1Yl91c2VybmFtZX0vcGNiLWRlc2lnbnNgLFxuICAgICAgb3duZXI6IHtcbiAgICAgICAgbG9naW46IGFjY291bnQuZ2l0aHViX3VzZXJuYW1lLFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbGxlY3Rpb24gb2YgUENCIGRlc2lnbnMgZm9yIHZhcmlvdXMgcHJvamVjdHNcIixcbiAgICAgIHByaXZhdGU6IHRydWUsXG4gICAgICBkZWZhdWx0X2JyYW5jaDogXCJtYWluXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICB1bnNjb3BlZF9uYW1lOiBcInRzY2lyY3VpdC1leGFtcGxlc1wiLFxuICAgICAgZnVsbF9uYW1lOiBgJHthY2NvdW50LmdpdGh1Yl91c2VybmFtZX0vdHNjaXJjdWl0LWV4YW1wbGVzYCxcbiAgICAgIG93bmVyOiB7XG4gICAgICAgIGxvZ2luOiBhY2NvdW50LmdpdGh1Yl91c2VybmFtZSxcbiAgICAgIH0sXG4gICAgICBkZXNjcmlwdGlvbjogXCJFeGFtcGxlcyBhbmQgdHV0b3JpYWxzIGZvciB0c2NpcmN1aXRcIixcbiAgICAgIHByaXZhdGU6IGZhbHNlLFxuICAgICAgZGVmYXVsdF9icmFuY2g6IFwibWFpblwiLFxuICAgIH0sXG4gIF1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIHJlcG9zOiBtb2NrUmVwb3MsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgc3VjY2Vzczogei5ib29sZWFuKCksXG4gICAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgICByZXBvc19yZWZyZXNoZWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgYWNjb3VudCA9IGN0eC5kYi5nZXRBY2NvdW50KGN0eC5hdXRoLmFjY291bnRfaWQpXG5cbiAgaWYgKCFhY2NvdW50KSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDEsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiYWNjb3VudF9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiQWNjb3VudCBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgR2l0SHViIGluc3RhbGxhdGlvblxuICBjb25zdCBnaXRodWJJbnN0YWxsYXRpb24gPSBjdHguZGIuZ2l0aHViSW5zdGFsbGF0aW9ucy5maW5kKFxuICAgIChpbnN0YWxsYXRpb24pID0+XG4gICAgICBpbnN0YWxsYXRpb24uYWNjb3VudF9pZCA9PT0gY3R4LmF1dGguYWNjb3VudF9pZCAmJiBpbnN0YWxsYXRpb24uaXNfYWN0aXZlLFxuICApXG5cbiAgaWYgKCFnaXRodWJJbnN0YWxsYXRpb24pIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJnaXRodWJfbm90X2Nvbm5lY3RlZFwiLFxuICAgICAgbWVzc2FnZTogXCJHaXRIdWIgYWNjb3VudCBub3QgY29ubmVjdGVkXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIEluIGEgcmVhbCBpbXBsZW1lbnRhdGlvbiwgdGhpcyB3b3VsZCByZWZyZXNoIHJlcG9zIGZyb20gR2l0SHViIEFQSVxuICAvLyBGb3IgZmFrZSBBUEksIHNpbXVsYXRlIHJlZnJlc2hpbmcgYnkgdXBkYXRpbmcgdGhlIGluc3RhbGxhdGlvbiB0aW1lc3RhbXBcbiAgZ2l0aHViSW5zdGFsbGF0aW9uLnVwZGF0ZWRfYXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgbWVzc2FnZTogXCJHaXRIdWIgcmVwb3NpdG9yaWVzIHJlZnJlc2hlZCBzdWNjZXNzZnVsbHlcIixcbiAgICByZXBvc19yZWZyZXNoZWQ6IDMsIC8vIE1vY2sgbnVtYmVyXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIl0sXG4gIGpzb25SZXNwb25zZTogei5vYmplY3QoeyBvazogei5ib29sZWFuKCkgfSksXG59KShhc3luYyAocmVxOiBhbnksIGN0eDogYW55KSA9PiB7XG4gIHJldHVybiBjdHguanNvbih7IG9rOiB0cnVlIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgbXMgZnJvbSBcIm1zXCJcbmltcG9ydCB7IFNpZ25KV1QgfSBmcm9tIFwiam9zZVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAganNvbkJvZHk6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIGFjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgfSlcbiAgICAub3IoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIGdpdGh1Yl91c2VybmFtZTogei5zdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgICksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIHNlc3Npb246IHoub2JqZWN0KHtcbiAgICAgIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gICAgICBhY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgICAgZXhwaXJlc19hdDogei5zdHJpbmcoKSxcbiAgICAgIGlzX2NsaV9zZXNzaW9uOiB6LmJvb2xlYW4oKSxcbiAgICAgIHRva2VuOiB6LnN0cmluZygpLFxuICAgIH0pLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBsZXQgYWNjb3VudFxuICBpZiAoXCJhY2NvdW50X2lkXCIgaW4gcmVxLmpzb25Cb2R5KSB7XG4gICAgYWNjb3VudCA9IGN0eC5kYi5nZXRBY2NvdW50KHJlcS5qc29uQm9keS5hY2NvdW50X2lkKVxuICB9IGVsc2Uge1xuICAgIGFjY291bnQgPSBjdHguZGIuZ2V0QWNjb3VudChyZXEuanNvbkJvZHkuZ2l0aHViX3VzZXJuYW1lKVxuICB9XG5cbiAgaWYgKCFhY2NvdW50KSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiYWNjb3VudF9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiQWNjb3VudCBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgbmV3X3Nlc3Npb24gPSBjdHguZGIuY3JlYXRlU2Vzc2lvbih7XG4gICAgZXhwaXJlc19hdDogbmV3IERhdGUoRGF0ZS5ub3coKSArIG1zKFwiNjAgZGF5XCIpKS50b0lTT1N0cmluZygpLFxuICAgIGFjY291bnRfaWQ6IGFjY291bnQuYWNjb3VudF9pZCxcbiAgICBpc19jbGlfc2Vzc2lvbjogZmFsc2UsXG4gIH0pXG5cbiAgY29uc3QgdG9rZW4gPSBhd2FpdCBuZXcgU2lnbkpXVCh7XG4gICAgYWNjb3VudF9pZDogYWNjb3VudC5hY2NvdW50X2lkLFxuICAgIHNlc3Npb25faWQ6IG5ld19zZXNzaW9uLnNlc3Npb25faWQsXG4gICAgZ2l0aHViX3VzZXJuYW1lOiBhY2NvdW50LmdpdGh1Yl91c2VybmFtZSxcbiAgfSlcbiAgICAuc2V0UHJvdGVjdGVkSGVhZGVyKHsgYWxnOiBcIkhTMjU2XCIgfSlcbiAgICAuc2V0RXhwaXJhdGlvblRpbWUobmV3IERhdGUoRGF0ZS5ub3coKSArIG1zKFwiNjAgZGF5XCIpKS50b0lTT1N0cmluZygpKVxuICAgIC5zaWduKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShwcm9jZXNzLmVudi5KV1RfU0VDUkVUIHx8IFwiXCIpKVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgc2Vzc2lvbjoge1xuICAgICAgLi4ubmV3X3Nlc3Npb24sXG4gICAgICB0b2tlbixcbiAgICB9LFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgb3JkZXJGaWxlU2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAgcXVlcnlQYXJhbXM6IHoub2JqZWN0KHtcbiAgICBvcmRlcl9maWxlX2lkOiB6LnN0cmluZygpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb3JkZXJfZmlsZTogb3JkZXJGaWxlU2NoZW1hLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IG9yZGVyX2ZpbGVfaWQgfSA9IHJlcS5xdWVyeVxuXG4gIGNvbnN0IG9yZGVyRmlsZSA9IGN0eC5kYi5nZXRPcmRlckZpbGVCeUlkKG9yZGVyX2ZpbGVfaWQpXG4gIGlmICghb3JkZXJGaWxlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JkZXJfZmlsZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiT3JkZXIgZmlsZSBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvcmRlcl9maWxlOiBvcmRlckZpbGUsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBvcmRlckZpbGVTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBvcmRlcl9pZDogei5zdHJpbmcoKSxcbiAgICBjb250ZW50X2Jhc2U2NDogei5zdHJpbmcoKSxcbiAgICBpc19nZXJiZXJzX3ppcDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBmb3JfcHJvdmlkZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9yZGVyX2ZpbGU6IG9yZGVyRmlsZVNjaGVtYSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBvcmRlcl9pZCwgY29udGVudF9iYXNlNjQsIGlzX2dlcmJlcnNfemlwLCBmb3JfcHJvdmlkZXIgfSA9XG4gICAgcmVxLmpzb25Cb2R5XG5cbiAgY29uc3Qgb3JkZXIgPSBjdHguZGIuZ2V0T3JkZXJCeUlkKG9yZGVyX2lkKVxuICBpZiAoIW9yZGVyKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JkZXJfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIk9yZGVyIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBuZXdPcmRlckZpbGUgPSB7XG4gICAgb3JkZXJfaWQsXG4gICAgaXNfZ2VyYmVyc196aXA6IGlzX2dlcmJlcnNfemlwIHx8IGZhbHNlLFxuICAgIGNvbnRlbnRfdHlwZTogXCJiYXNlNjRcIixcbiAgICBmb3JfcHJvdmlkZXI6IGZvcl9wcm92aWRlciB8fCBudWxsLFxuICAgIHVwbG9hZGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgY29udGVudF90ZXh0OiBCdWZmZXIuZnJvbShjb250ZW50X2Jhc2U2NCwgXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGYtOFwiKSxcbiAgICBjb250ZW50X2J5dGVzOiBVaW50OEFycmF5LmZyb20oYXRvYihjb250ZW50X2Jhc2U2NCksIChjKSA9PlxuICAgICAgYy5jaGFyQ29kZUF0KDApLFxuICAgICksXG4gIH1cblxuICBjb25zdCBvcmRlckZpbGUgPSBjdHguZGIuYWRkT3JkZXJGaWxlKG5ld09yZGVyRmlsZSlcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9yZGVyX2ZpbGU6IG9yZGVyRmlsZSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9yZGVyX3F1b3RlX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBwYWNrYWdlX3JlbGVhc2VfaWQgfSA9IHJlcS5qc29uQm9keVxuICBjb25zdCB2ZW5kb3JOYW1lcyA9IFtcIkpMQ1BDQlwiLCBcIk1hY3JvRmFiXCJdXG5cbiAgbGV0IG9yZGVyUXVvdGVJZHMgPSBbXVxuICBmb3IgKGNvbnN0IHZlbmRvck5hbWUgb2YgdmVuZG9yTmFtZXMpIHtcbiAgICBjb25zdCBvcmRlclF1b3RlSWQgPSBjdHguZGIuYWRkT3JkZXJRdW90ZSh7XG4gICAgICBhY2NvdW50X2lkOiBjdHguYXV0aC5hY2NvdW50X2lkLFxuICAgICAgcGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgdmVuZG9yX25hbWU6IHZlbmRvck5hbWUsXG4gICAgfSlcbiAgICBvcmRlclF1b3RlSWRzLnB1c2gob3JkZXJRdW90ZUlkKVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvcmRlcl9xdW90ZV9pZHM6IG9yZGVyUXVvdGVJZHMsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHouc3RyaW5nKCksXG4gICAgdmVuZG9yX25hbWU6IHoubGl0ZXJhbChcImpsY3BjYlwiKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9yZGVyX3F1b3RlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZXJyb3I6IHpcbiAgICAgIC5vYmplY3Qoe1xuICAgICAgICBlcnJvcl9jb2RlOiB6LnN0cmluZygpLFxuICAgICAgICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb25hbCgpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IHBhY2thZ2VfcmVsZWFzZV9pZCwgdmVuZG9yX25hbWUgfSA9IHJlcS5qc29uQm9keVxuXG4gIC8vIGNoZWNrIHBhY2thZ2UgcmVsZWFzZSBleGlzdHNcbiAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIuZ2V0UGFja2FnZVJlbGVhc2VCeUlkKHBhY2thZ2VfcmVsZWFzZV9pZClcbiAgaWYgKCFwYWNrYWdlUmVsZWFzZSkge1xuICAgIHJldHVybiBjdHguanNvbihcbiAgICAgIHtcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgICAgICBtZXNzYWdlOiBcIlBhY2thZ2UgcmVsZWFzZSBub3QgZm91bmRcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7IHN0YXR1czogNDA0IH0sXG4gICAgKVxuICB9XG5cbiAgY29uc3QgcGFja2FnZVJlbGVhc2VGaWxlcyA9XG4gICAgY3R4LmRiLmdldFBhY2thZ2VGaWxlc0J5UmVsZWFzZUlkKHBhY2thZ2VfcmVsZWFzZV9pZClcbiAgaWYgKHBhY2thZ2VSZWxlYXNlRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGN0eC5qc29uKFxuICAgICAge1xuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX2ZpbGVzX25vdF9mb3VuZFwiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIGZpbGVzIG5vdCBmb3VuZFwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHsgc3RhdHVzOiA0MDQgfSxcbiAgICApXG4gIH1cblxuICBjb25zdCBvcmRlclF1b3RlSWQgPSBjdHguZGIuYWRkT3JkZXJRdW90ZSh7XG4gICAgYWNjb3VudF9pZDogY3R4LmF1dGguYWNjb3VudF9pZCxcbiAgICBwYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgdmVuZG9yX25hbWUsXG4gIH0pXG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvcmRlcl9xdW90ZV9pZDogb3JkZXJRdW90ZUlkLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgb3JkZXJRdW90ZVNjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiLCBcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBjb21tb25QYXJhbXM6IHoub2JqZWN0KHtcbiAgICBvcmRlcl9xdW90ZV9pZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9yZGVyX3F1b3RlOiBvcmRlclF1b3RlU2NoZW1hLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IG9yZGVyX3F1b3RlX2lkIH0gPSByZXEuY29tbW9uUGFyYW1zXG5cbiAgY29uc3Qgb3JkZXJRdW90ZSA9IGN0eC5kYi5nZXRPcmRlclF1b3RlQnlJZChvcmRlcl9xdW90ZV9pZClcblxuICBpZiAoIW9yZGVyUXVvdGUpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJvcmRlcl9xdW90ZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiT3JkZXIgcXVvdGUgbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb3JkZXJfcXVvdGU6IG9yZGVyUXVvdGUsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7XG4gIEpsY3BjYk9yZGVyU3RhdGUsXG4gIHR5cGUgT3JkZXIsXG4gIG9yZGVyU2NoZW1hLFxufSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25Cb2R5OiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHouc3RyaW5nKCkudXVpZCgpLm9wdGlvbmFsKCksXG4gICAgICBjaXJjdWl0X2pzb246IHouYXJyYXkoei5yZWNvcmQoei5hbnkoKSkpLFxuICAgIH0pXG4gICAgLnJlZmluZSgoZGF0YSkgPT4gZGF0YS5wYWNrYWdlX3JlbGVhc2VfaWQgfHwgZGF0YS5jaXJjdWl0X2pzb24sIHtcbiAgICAgIG1lc3NhZ2U6IFwiRWl0aGVyIHBhY2thZ2VfcmVsZWFzZV9pZCBvciBjaXJjdWl0X2pzb24gbXVzdCBiZSBwcm92aWRlZFwiLFxuICAgIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvcmRlcjogb3JkZXJTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgY2lyY3VpdF9qc29uIH0gPSByZXEuanNvbkJvZHlcblxuICBjb25zdCBuZXdPcmRlciA9IHtcbiAgICBhY2NvdW50X2lkOiBjdHguYXV0aC5hY2NvdW50X2lkLFxuICAgIGlzX3J1bm5pbmc6IGZhbHNlLFxuICAgIGlzX3N0YXJ0ZWQ6IGZhbHNlLFxuICAgIGlzX2ZpbmlzaGVkOiBmYWxzZSxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBoYXNfZXJyb3I6IGZhbHNlLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBzdGFydGVkX2F0OiBudWxsLFxuICAgIGNvbXBsZXRlZF9hdDogbnVsbCxcbiAgICBjaXJjdWl0X2pzb24sXG4gIH1cblxuICBjb25zdCBvcmRlciA9IGN0eC5kYi5hZGRPcmRlcihuZXdPcmRlcilcblxuICBjb25zdCBuZXdKbGNwY2JPcmRlclN0YXRlID0ge1xuICAgIG9yZGVyX2lkOiBvcmRlci5vcmRlcl9pZCxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgYXJlX2dlcmJlcnNfdXBsb2FkZWQ6IGZhbHNlLFxuICAgIGlzX2dlcmJlcl9hbmFseXplZDogZmFsc2UsXG4gICAgYXJlX2luaXRpYWxfY29zdHNfY2FsY3VsYXRlZDogZmFsc2UsXG4gICAgaXNfcGNiX2FkZGVkX3RvX2NhcnQ6IGZhbHNlLFxuICAgIGlzX2JvbV91cGxvYWRlZDogZmFsc2UsXG4gICAgaXNfcG5wX3VwbG9hZGVkOiBmYWxzZSxcbiAgICBpc19ib21fcG5wX2FuYWx5emVkOiBmYWxzZSxcbiAgICBpc19ib21fcGFyc2luZ19jb21wbGV0ZTogZmFsc2UsXG4gICAgYXJlX2NvbXBvbmVudHNfYXZhaWxhYmxlOiBmYWxzZSxcbiAgICBpc19wYXRjaF9tYXBfZ2VuZXJhdGVkOiBmYWxzZSxcbiAgICBpc19qc29uX21lcmdlX2ZpbGVfY3JlYXRlZDogZmFsc2UsXG4gICAgaXNfZGZtX3Jlc3VsdF9nZW5lcmF0ZWQ6IGZhbHNlLFxuICAgIGFyZV9maWxlc19kb3dubG9hZGVkOiBmYWxzZSxcbiAgICBhcmVfcHJvZHVjdF9jYXRlZ29yaWVzX2ZldGNoZWQ6IGZhbHNlLFxuICAgIGFyZV9maW5hbF9jb3N0c19jYWxjdWxhdGVkOiBmYWxzZSxcbiAgICBpc19qc29uX21lcmdlX2ZpbGVfdXBkYXRlZDogZmFsc2UsXG4gICAgaXNfYWRkZWRfdG9fY2FydDogZmFsc2UsXG4gICAgYXJlX2dlcmJlcnNfZ2VuZXJhdGVkOiBmYWxzZSxcbiAgICBjdXJyZW50X3N0ZXA6IG51bGwsXG4gIH1cblxuICBjdHguZGIuYWRkSmxjcGNiT3JkZXJTdGF0ZShuZXdKbGNwY2JPcmRlclN0YXRlKVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb3JkZXIsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7XG4gIGVycm9yU2NoZW1hLFxuICBqbGNwY2JPcmRlclN0YXRlU2NoZW1hLFxuICBvcmRlclNjaGVtYSxcbn0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IG9yZGVyU3RlcHMgYXMgc2ltdWxhdGVTY2VuYXJpb3MgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvdXRpbHMvb3JkZXItc3RlcHNcIlxuXG5jb25zdCBkZWZhdWx0T3JkZXJTdGF0ZSA9IHtcbiAgYXJlX2dlcmJlcnNfdXBsb2FkZWQ6IGZhbHNlLFxuICBpc19nZXJiZXJfYW5hbHl6ZWQ6IGZhbHNlLFxuICBhcmVfaW5pdGlhbF9jb3N0c19jYWxjdWxhdGVkOiBmYWxzZSxcbiAgaXNfcGNiX2FkZGVkX3RvX2NhcnQ6IGZhbHNlLFxuICBpc19ib21fdXBsb2FkZWQ6IGZhbHNlLFxuICBpc19wbnBfdXBsb2FkZWQ6IGZhbHNlLFxuICBpc19ib21fcG5wX2FuYWx5emVkOiBmYWxzZSxcbiAgaXNfYm9tX3BhcnNpbmdfY29tcGxldGU6IGZhbHNlLFxuICBhcmVfY29tcG9uZW50c19hdmFpbGFibGU6IGZhbHNlLFxuICBpc19wYXRjaF9tYXBfZ2VuZXJhdGVkOiBmYWxzZSxcbiAgaXNfanNvbl9tZXJnZV9maWxlX2NyZWF0ZWQ6IGZhbHNlLFxuICBpc19kZm1fcmVzdWx0X2dlbmVyYXRlZDogZmFsc2UsXG4gIGFyZV9maWxlc19kb3dubG9hZGVkOiBmYWxzZSxcbiAgYXJlX3Byb2R1Y3RfY2F0ZWdvcmllc19mZXRjaGVkOiBmYWxzZSxcbiAgYXJlX2ZpbmFsX2Nvc3RzX2NhbGN1bGF0ZWQ6IGZhbHNlLFxuICBpc19qc29uX21lcmdlX2ZpbGVfdXBkYXRlZDogZmFsc2UsXG4gIGlzX2FkZGVkX3RvX2NhcnQ6IGZhbHNlLFxuICB1cGxvYWRlZF9nZXJiZXJfbWV0YWRhdGE6IG51bGwsXG4gIGdlcmJlcl9hbmFseXNpczogbnVsbCxcbiAgYXJlX2dlcmJlcnNfZ2VuZXJhdGVkOiBmYWxzZSxcbiAgY3VycmVudF9zdGVwOiBudWxsIGFzIG51bGwgfCAodHlwZW9mIHNpbXVsYXRlU2NlbmFyaW9zKVtudW1iZXJdLFxufVxuXG5jb25zdCBlcnJvck1hcCA9IHtcbiAgYXJlX2dlcmJlcnNfZ2VuZXJhdGVkOiB7XG4gICAgZXJyb3JfY29kZTogXCJHRVJCRVJfR0VORVJBVElPTl9GQUlMRURcIixcbiAgICBtZXNzYWdlOiBcIkdlcmJlciBnZW5lcmF0aW9uIGZhaWxlZFwiLFxuICB9LFxuICBhcmVfZ2VyYmVyc191cGxvYWRlZDoge1xuICAgIGVycm9yX2NvZGU6IFwiR0VSQkVSX1VQTE9BRF9GQUlMRURcIixcbiAgICBtZXNzYWdlOiBcIkdlcmJlciB1cGxvYWQgZmFpbGVkXCIsXG4gIH0sXG4gIGlzX2dlcmJlcl9hbmFseXplZDoge1xuICAgIGVycm9yX2NvZGU6IFwiQU5BTFlaRV9HRVJCRVJfRkFJTEVEXCIsXG4gICAgbWVzc2FnZTogXCJBbmFseXplIGdlcmJlciBmYWlsZWRcIixcbiAgfSxcbiAgaXNfYm9tX3VwbG9hZGVkOiB7XG4gICAgZXJyb3JfY29kZTogXCJCT01fVVBMT0FEX0ZBSUxFRFwiLFxuICAgIG1lc3NhZ2U6IFwiQm9tIHVwbG9hZCBmYWlsZWRcIixcbiAgfSxcbiAgaXNfcG5wX3VwbG9hZGVkOiB7XG4gICAgZXJyb3JfY29kZTogXCJQTlBfVVBMT0FEX0ZBSUxFRFwiLFxuICAgIG1lc3NhZ2U6IFwiUG5wIHVwbG9hZCBmYWlsZWRcIixcbiAgfSxcbiAgaXNfYm9tX3BucF9hbmFseXplZDoge1xuICAgIGVycm9yX2NvZGU6IFwiQU5BTFlaRV9CT01fQU5EX1BOUF9GQUlMRURcIixcbiAgICBtZXNzYWdlOiBcIkFuYWx5emUgYm9tIGFuZCBwbnAgZmFpbGVkXCIsXG4gIH0sXG4gIGlzX2JvbV9wYXJzaW5nX2NvbXBsZXRlOiB7XG4gICAgZXJyb3JfY29kZTogXCJCT01fUEFSU0lOR19GQUlMRURcIixcbiAgICBtZXNzYWdlOiBcIkJvbSBwYXJzaW5nIGZhaWxlZFwiLFxuICB9LFxuICBhcmVfY29tcG9uZW50c19hdmFpbGFibGU6IHtcbiAgICBlcnJvcl9jb2RlOiBcIkNPTVBPTkVOVFNfQVZBSUxBQklMSVRZX0ZBSUxFRFwiLFxuICAgIG1lc3NhZ2U6IFwiQ29tcG9uZW50cyBhdmFpbGFiaWxpdHkgZmFpbGVkXCIsXG4gIH0sXG4gIGlzX3BhdGNoX21hcF9nZW5lcmF0ZWQ6IHtcbiAgICBlcnJvcl9jb2RlOiBcIkdFTkVSQVRFX1BBVENIX01BUF9GQUlMRURcIixcbiAgICBtZXNzYWdlOiBcIkdlbmVyYXRlIHBhdGNoIG1hcCBmYWlsZWRcIixcbiAgfSxcbiAgaXNfanNvbl9tZXJnZV9maWxlX2NyZWF0ZWQ6IHtcbiAgICBlcnJvcl9jb2RlOiBcIkNSRUFUSU9OX0pTT05fTUVSR0VfRklMRV9GQUlMRURcIixcbiAgICBtZXNzYWdlOiBcIkNyZWF0aW9uIGpzb24gbWVyZ2UgZmlsZSBmYWlsZWRcIixcbiAgfSxcbiAgaXNfZGZtX3Jlc3VsdF9nZW5lcmF0ZWQ6IHtcbiAgICBlcnJvcl9jb2RlOiBcIkdFTkVSQVRFX0RGTV9SRVNVTFRfRkFJTEVEXCIsXG4gICAgbWVzc2FnZTogXCJHZW5lcmF0ZSBkZm0gcmVzdWx0IGZhaWxlZFwiLFxuICB9LFxuICBhcmVfZmlsZXNfZG93bmxvYWRlZDoge1xuICAgIGVycm9yX2NvZGU6IFwiRE9XTkxPQURfRklMRVNfRkFJTEVEXCIsXG4gICAgbWVzc2FnZTogXCJEb3dubG9hZCBmaWxlcyBmYWlsZWRcIixcbiAgfSxcbiAgYXJlX3Byb2R1Y3RfY2F0ZWdvcmllc19mZXRjaGVkOiB7XG4gICAgZXJyb3JfY29kZTogXCJGRVRDSF9QUk9EVUNUX0NBVEVHT1JJRVNfRkFJTEVEXCIsXG4gICAgbWVzc2FnZTogXCJGZXRjaCBwcm9kdWN0IGNhdGVnb3JpZXMgZmFpbGVkXCIsXG4gIH0sXG4gIGFyZV9maW5hbF9jb3N0c19jYWxjdWxhdGVkOiB7XG4gICAgZXJyb3JfY29kZTogXCJGSU5BTF9DT1NUX0NBTENVTEFUSU9OX0ZBSUxFRFwiLFxuICAgIG1lc3NhZ2U6IFwiRmluYWwgY29zdCBjYWxjdWxhdGlvbiBmYWlsZWRcIixcbiAgfSxcbiAgaXNfanNvbl9tZXJnZV9maWxlX3VwZGF0ZWQ6IHtcbiAgICBlcnJvcl9jb2RlOiBcIlVQREFURV9KU09OX01FUkdFX0ZJTEVfRkFJTEVEXCIsXG4gICAgbWVzc2FnZTogXCJVcGRhdGUganNvbiBtZXJnZSBmaWxlIGZhaWxlZFwiLFxuICB9LFxuICBpc19wY2JfYWRkZWRfdG9fY2FydDoge1xuICAgIGVycm9yX2NvZGU6IFwiQUREX1BDQl9UT19DQVJUX0ZBSUxFRFwiLFxuICAgIG1lc3NhZ2U6IFwiQWRkIHBjYiB0byBjYXJ0IGZhaWxlZFwiLFxuICB9LFxuICBpc19hZGRlZF90b19jYXJ0OiB7XG4gICAgZXJyb3JfY29kZTogXCJBRERfVE9fQ0FSVF9GQUlMRURcIixcbiAgICBtZXNzYWdlOiBcIkFkZCB0byBjYXJ0IGZhaWxlZFwiLFxuICB9LFxuICBhcmVfaW5pdGlhbF9jb3N0c19jYWxjdWxhdGVkOiB7XG4gICAgZXJyb3JfY29kZTogXCJJTklUSUFMX0NPU1RfQ0FMQ1VMQVRJT05fRkFJTEVEXCIsXG4gICAgbWVzc2FnZTogXCJJbml0aWFsIGNvc3QgY2FsY3VsYXRpb24gZmFpbGVkXCIsXG4gIH0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBxdWVyeVBhcmFtczogei5vYmplY3Qoe1xuICAgIG9yZGVyX2lkOiB6LnN0cmluZygpLFxuICAgIF9zaW11bGF0ZV9zY2VuYXJpbzogei5lbnVtKHNpbXVsYXRlU2NlbmFyaW9zKS5vcHRpb25hbCgpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb3JkZXI6IG9yZGVyU2NoZW1hLFxuICAgIG9yZGVyU3RhdGU6IGpsY3BjYk9yZGVyU3RhdGVTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgb3JkZXJfaWQsIF9zaW11bGF0ZV9zY2VuYXJpbyB9ID0gcmVxLnF1ZXJ5XG5cbiAgY29uc3Qgb3JkZXIgPSBjdHguZGIuZ2V0T3JkZXJCeUlkKG9yZGVyX2lkKVxuICBpZiAoIW9yZGVyKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JkZXJfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIk9yZGVyIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCB1cGRhdGVkT3JkZXJTdGF0ZSA9IHtcbiAgICAuLi5kZWZhdWx0T3JkZXJTdGF0ZSxcbiAgICBvcmRlcl9pZCxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIH1cblxuICBpZiAoX3NpbXVsYXRlX3NjZW5hcmlvKSB7XG4gICAgY29uc3QgZXJyb3IgPSBlcnJvck1hcFtfc2ltdWxhdGVfc2NlbmFyaW9dXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBvcmRlci5lcnJvciA9IGVycm9yU2NoZW1hLnBhcnNlKGVycm9yKVxuICAgICAgb3JkZXIuaGFzX2Vycm9yID0gdHJ1ZVxuICAgICAgY3R4LmRiLnVwZGF0ZU9yZGVyKG9yZGVyX2lkLCB7IGVycm9yOiBvcmRlci5lcnJvciwgaGFzX2Vycm9yOiB0cnVlIH0pXG5cbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHNpbXVsYXRlU2NlbmFyaW9zLmluZGV4T2YoX3NpbXVsYXRlX3NjZW5hcmlvKVxuICAgICAgc2ltdWxhdGVTY2VuYXJpb3Muc2xpY2UoMCwgY3VycmVudEluZGV4KS5mb3JFYWNoKChzY2VuYXJpbykgPT4ge1xuICAgICAgICB1cGRhdGVkT3JkZXJTdGF0ZVtzY2VuYXJpb10gPSB0cnVlXG4gICAgICB9KVxuICAgICAgdXBkYXRlZE9yZGVyU3RhdGUuY3VycmVudF9zdGVwID0gc2ltdWxhdGVTY2VuYXJpb3NbY3VycmVudEluZGV4XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBleGlzdGluZ1N0YXRlID0gY3R4LmRiLmdldEpsY3BjYk9yZGVyU3RhdGVzQnlPcmRlcklkKG9yZGVyX2lkKVxuICAgIGlmIChleGlzdGluZ1N0YXRlKSB7XG4gICAgICByZXR1cm4gY3R4Lmpzb24oe1xuICAgICAgICBvcmRlcixcbiAgICAgICAgb3JkZXJTdGF0ZTogZXhpc3RpbmdTdGF0ZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY3R4LmRiLnVwZGF0ZUpsY3BjYk9yZGVyU3RhdGUob3JkZXJfaWQsIHVwZGF0ZWRPcmRlclN0YXRlKVxuXG4gIGNvbnN0IG9yZGVyU3RhdGUgPSBjdHguZGIuZ2V0SmxjcGNiT3JkZXJTdGF0ZXNCeU9yZGVySWQob3JkZXJfaWQpIVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb3JkZXIsXG4gICAgb3JkZXJTdGF0ZSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IG9yZGVyU2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb3JkZXJzOiB6LmFycmF5KG9yZGVyU2NoZW1hKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvcmRlcnM6IGN0eC5kYi5vcmRlcnMuZmlsdGVyKChvKSA9PiBvLmFjY291bnRfaWQgPT09IGN0eC5hdXRoLmFjY291bnRfaWQpLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCIsIFwiUE9TVFwiXSxcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgb3JnX2lkOiB6LnN0cmluZygpLFxuICAgIGFjY291bnRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB0c2NpcmN1aXRfaGFuZGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7fSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBvcmdfaWQsIGFjY291bnRfaWQsIHRzY2lyY3VpdF9oYW5kbGUgfSA9IHJlcS5jb21tb25QYXJhbXNcblxuICBjb25zdCBvcmcgPSBjdHguZGIuZ2V0T3JnKHsgb3JnX2lkIH0sIGN0eC5hdXRoKVxuXG4gIGlmICghb3JnKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JnX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJPcmdhbml6YXRpb24gbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGlmICghb3JnLmNhbl9tYW5hZ2Vfb3JnKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDMsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwibm90X2F1dGhvcml6ZWRcIixcbiAgICAgIG1lc3NhZ2U6IFwiWW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gbWFuYWdlIHRoaXMgb3JnYW5pemF0aW9uXCIsXG4gICAgfSlcbiAgfVxuXG4gIGxldCBhY2NvdW50ID0gY3R4LmRiLmFjY291bnRzLmZpbmQoKGFjYykgPT4gYWNjLmFjY291bnRfaWQgPT09IGFjY291bnRfaWQpXG4gIGlmICghYWNjb3VudCkge1xuICAgIGFjY291bnQgPSBjdHguZGIuYWNjb3VudHMuZmluZChcbiAgICAgIChhY2MpID0+IGFjYy50c2NpcmN1aXRfaGFuZGxlID09PSB0c2NpcmN1aXRfaGFuZGxlLFxuICAgIClcbiAgfVxuXG4gIGlmICghYWNjb3VudCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImFjY291bnRfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIkFjY291bnQgbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGN0eC5kYi5hZGRPcmdhbml6YXRpb25BY2NvdW50KHtcbiAgICBvcmdfaWQsXG4gICAgYWNjb3VudF9pZDogYWNjb3VudC5hY2NvdW50X2lkLFxuICB9KVxuXG4gIHJldHVybiBjdHguanNvbih7fSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHB1YmxpY01hcE9yZyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcHVibGljLW1hcHBpbmcvcHVibGljLW1hcC1vcmdcIlxuaW1wb3J0IHtcbiAgcHVibGljT3JnU2NoZW1hLFxuICB0c2NpcmN1aXRIYW5kbGVTY2hlbWEsXG59IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiLCBcIlBPU1RcIl0sXG4gIGNvbW1vblBhcmFtczogelxuICAgIC5vYmplY3Qoe1xuICAgICAgZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLm1pbig1KS5tYXgoNDApLm9wdGlvbmFsKCksXG4gICAgICB0c2NpcmN1aXRfaGFuZGxlOiB0c2NpcmN1aXRIYW5kbGVTY2hlbWEub3B0aW9uYWwoKSxcbiAgICAgIG5hbWU6IHRzY2lyY3VpdEhhbmRsZVNjaGVtYS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLnJlZmluZSgoZGF0YSkgPT4gZGF0YS50c2NpcmN1aXRfaGFuZGxlIHx8IGRhdGEubmFtZSwge1xuICAgICAgbWVzc2FnZTogXCJFaXRoZXIgdHNjaXJjdWl0X2hhbmRsZSBvciBuYW1lIGlzIHJlcXVpcmVkXCIsXG4gICAgfSksXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvcmc6IHB1YmxpY09yZ1NjaGVtYSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBkaXNwbGF5X25hbWUsIHRzY2lyY3VpdF9oYW5kbGUsIG5hbWUgfSA9IHJlcS5jb21tb25QYXJhbXNcbiAgY29uc3QgaGFuZGxlID0gdHNjaXJjdWl0X2hhbmRsZSB8fCBuYW1lXG5cbiAgY29uc3QgZXhpc3RpbmcgPSBjdHguZGIuZ2V0T3JnKHsgdHNjaXJjdWl0X2hhbmRsZTogaGFuZGxlIH0pXG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JnX2FscmVhZHlfZXhpc3RzXCIsXG4gICAgICBtZXNzYWdlOiBcIkFuIG9yZ2FuaXphdGlvbiB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0c1wiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBuZXdPcmcgPSB7XG4gICAgb3duZXJfYWNjb3VudF9pZDogY3R4LmF1dGguYWNjb3VudF9pZCxcbiAgICBvcmdfZGlzcGxheV9uYW1lOiBkaXNwbGF5X25hbWUsXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKSxcbiAgICBjYW5fbWFuYWdlX29yZzogdHJ1ZSxcbiAgICB0c2NpcmN1aXRfaGFuZGxlOiBoYW5kbGUsXG4gIH1cblxuICBjb25zdCBvcmcgPSBjdHguZGIuYWRkT3JnYW5pemF0aW9uKG5ld09yZylcblxuICBjdHguZGIuYWRkT3JnYW5pemF0aW9uQWNjb3VudCh7XG4gICAgb3JnX2lkOiBvcmcub3JnX2lkLFxuICAgIGFjY291bnRfaWQ6IGN0eC5hdXRoLmFjY291bnRfaWQsXG4gICAgaXNfb3duZXI6IHRydWUsXG4gIH0pXG5cbiAgY29uc3QgZnVsbE9yZyA9IGN0eC5kYi5nZXRPcmcoeyBvcmdfaWQ6IG9yZy5vcmdfaWQgfSwgY3R4LmF1dGgpXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb3JnOiBwdWJsaWNNYXBPcmcoZnVsbE9yZyEpLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgKiBhcyBaVCBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBjb25zdCBwdWJsaWNNYXBPcmcgPSAoXG4gIGludGVybmFsX29yZzogWlQuT3JnYW5pemF0aW9uICYge1xuICAgIG1lbWJlcl9jb3VudDogbnVtYmVyXG4gICAgcGFja2FnZV9jb3VudDogbnVtYmVyXG4gICAgY2FuX21hbmFnZV9vcmc6IGJvb2xlYW5cbiAgfSxcbik6IHouaW5mZXI8dHlwZW9mIFpULnB1YmxpY09yZ1NjaGVtYT4gPT4ge1xuICBjb25zdCB7XG4gICAgY2FuX21hbmFnZV9vcmcsXG4gICAgZ2l0aHViX2hhbmRsZSxcbiAgICBtZW1iZXJfY291bnQsXG4gICAgcGFja2FnZV9jb3VudCxcbiAgICBjcmVhdGVkX2F0LFxuICAgIGlzX3BlcnNvbmFsX29yZyxcbiAgICBvcmdfZGlzcGxheV9uYW1lLFxuICAgIHRzY2lyY3VpdF9oYW5kbGUsXG4gICAgYXZhdGFyX3VybCxcbiAgICAuLi5vcmdcbiAgfSA9IGludGVybmFsX29yZ1xuICByZXR1cm4ge1xuICAgIG9yZ19pZDogb3JnLm9yZ19pZCxcbiAgICBkaXNwbGF5X25hbWU6IG9yZ19kaXNwbGF5X25hbWUgPz8gdHNjaXJjdWl0X2hhbmRsZSA/PyB1bmRlZmluZWQsXG4gICAgb3duZXJfYWNjb3VudF9pZDogb3JnLm93bmVyX2FjY291bnRfaWQsXG4gICAgbmFtZTogdHNjaXJjdWl0X2hhbmRsZSxcbiAgICBhdmF0YXJfdXJsOiBhdmF0YXJfdXJsID8/IG51bGwsXG4gICAgbWVtYmVyX2NvdW50OiBOdW1iZXIobWVtYmVyX2NvdW50KSB8fCAwLFxuICAgIHBhY2thZ2VfY291bnQ6IE51bWJlcihwYWNrYWdlX2NvdW50KSB8fCAwLFxuICAgIGlzX3BlcnNvbmFsX29yZzogQm9vbGVhbihpc19wZXJzb25hbF9vcmcpLFxuICAgIGNyZWF0ZWRfYXQ6IFN0cmluZyhjcmVhdGVkX2F0KSxcbiAgICBnaXRodWJfaGFuZGxlLFxuICAgIHRzY2lyY3VpdF9oYW5kbGUsXG4gICAgLi4uKGNhbl9tYW5hZ2Vfb3JnID8geyB1c2VyX3Blcm1pc3Npb25zOiB7IGNhbl9tYW5hZ2Vfb3JnOiB0cnVlIH0gfSA6IHt9KSxcbiAgfVxufVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCIsIFwiREVMRVRFXCJdLFxuICBjb21tb25QYXJhbXM6IHoub2JqZWN0KHtcbiAgICBvcmdfaWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IG9yZ19pZCB9ID0gcmVxLmNvbW1vblBhcmFtc1xuXG4gIGNvbnN0IG9yZyA9IGN0eC5kYi5nZXRPcmcoeyBvcmdfaWQgfSwgY3R4LmF1dGgpXG5cbiAgaWYgKCFvcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJvcmdfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIk9yZ2FuaXphdGlvbiBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgaWYgKCFvcmcuY2FuX21hbmFnZV9vcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMywge1xuICAgICAgZXJyb3JfY29kZTogXCJub3RfYXV0aG9yaXplZFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byBtYW5hZ2UgdGhpcyBvcmdhbml6YXRpb25cIixcbiAgICB9KVxuICB9XG5cbiAgaWYgKG9yZy5pc19wZXJzb25hbF9vcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJjYW5ub3RfZGVsZXRlX3BlcnNvbmFsX29yZ1wiLFxuICAgICAgbWVzc2FnZTogXCJQZXJzb25hbCBvcmdhbml6YXRpb25zIGNhbm5vdCBiZSBkZWxldGVkXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VDb3VudCA9IGN0eC5kYi5wYWNrYWdlcy5maWx0ZXIoXG4gICAgKHBrZykgPT4gcGtnLm93bmVyX29yZ19pZCA9PT0gb3JnX2lkLFxuICApLmxlbmd0aFxuXG4gIGlmIChwYWNrYWdlQ291bnQgPiAwKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JnX2hhc19wYWNrYWdlc1wiLFxuICAgICAgbWVzc2FnZTogXCJDYW5ub3QgZGVsZXRlIG9yZ2FuaXphdGlvbiB3aXRoIGV4aXN0aW5nIHBhY2thZ2VzXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGRlbGV0ZWQgPSBjdHguZGIuZGVsZXRlT3JnYW5pemF0aW9uKG9yZ19pZClcblxuICBpZiAoIWRlbGV0ZWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDUwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJkZWxldGVfZmFpbGVkXCIsXG4gICAgICBtZXNzYWdlOiBcIkZhaWxlZCB0byBkZWxldGUgb3JnYW5pemF0aW9uXCIsXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb2s6IHRydWUsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQge1xuICBvcmdBY2NvdW50U2NoZW1hLFxuICB1c2VyUGVybWlzc2lvbnNTY2hlbWEsXG59IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgb3JnX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGF1dGg6IFwib3B0aW9uYWxfc2Vzc2lvblwiLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvcmdfbWVtYmVyOiBvcmdBY2NvdW50U2NoZW1hLm1lcmdlKFxuICAgICAgei5vYmplY3QoeyBvcmdfbWVtYmVyX3Blcm1pc3Npb25zOiB1c2VyUGVybWlzc2lvbnNTY2hlbWEubnVsbGFibGUoKSB9KSxcbiAgICApLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IG9yZ19pZCwgYWNjb3VudF9pZCB9ID0gcmVxLmNvbW1vblBhcmFtc1xuXG4gIGNvbnN0IG9yZyA9IGN0eC5kYi5nZXRPcmcoXG4gICAge1xuICAgICAgb3JnX2lkLFxuICAgIH0sXG4gICAgY3R4LmF1dGgsXG4gIClcblxuICBpZiAoIW9yZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm9yZ19ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiT3JnYW5pemF0aW9uIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBtZW1iZXJPcmdBY2NvdW50ID0gY3R4LmRiLmdldE9yZ2FuaXphdGlvbkFjY291bnQoe1xuICAgIG9yZ19pZDogb3JnLm9yZ19pZCxcbiAgICBhY2NvdW50X2lkOiBhY2NvdW50X2lkLFxuICB9KVxuXG4gIGNvbnN0IG1lbWJlck9yZyA9IGN0eC5kYi5nZXRPcmcoXG4gICAge1xuICAgICAgb3JnX2lkLFxuICAgIH0sXG4gICAge1xuICAgICAgYWNjb3VudF9pZDogYWNjb3VudF9pZCEsXG4gICAgfSxcbiAgKVxuXG4gIGlmICghbWVtYmVyT3JnQWNjb3VudCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm1lbWJlcl9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiTWVtYmVyIG5vdCBmb3VuZCBpbiBvcmdhbml6YXRpb25cIixcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvcmdfbWVtYmVyOiB7XG4gICAgICAuLi5tZW1iZXJPcmdBY2NvdW50LFxuICAgICAgb3JnX21lbWJlcl9wZXJtaXNzaW9uczogbWVtYmVyT3JnLFxuICAgIH0sXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBwdWJsaWNNYXBPcmcgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3B1YmxpYy1tYXBwaW5nL3B1YmxpYy1tYXAtb3JnXCJcbmltcG9ydCB7IHB1YmxpY09yZ1NjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiLCBcIlBPU1RcIl0sXG4gIGNvbW1vblBhcmFtczogelxuICAgIC5vYmplY3QoeyBvcmdfaWQ6IHouc3RyaW5nKCkgfSlcbiAgICAub3Ioei5vYmplY3QoeyBnaXRodWJfaGFuZGxlOiB6LnN0cmluZygpIH0pKVxuICAgIC5vcih6Lm9iamVjdCh7IHRzY2lyY3VpdF9oYW5kbGU6IHouc3RyaW5nKCkgfSkpLFxuICBhdXRoOiBcIm9wdGlvbmFsX3Nlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb3JnOiBwdWJsaWNPcmdTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHBhcmFtcyA9IHJlcS5jb21tb25QYXJhbXMgYXMge1xuICAgIG9yZ19pZD86IHN0cmluZ1xuICAgIGdpdGh1Yl9oYW5kbGU/OiBzdHJpbmdcbiAgICB0c2NpcmN1aXRfaGFuZGxlPzogc3RyaW5nXG4gIH1cblxuICBjb25zdCBvcmcgPSBjdHguZGIuZ2V0T3JnKFxuICAgIHtcbiAgICAgIG9yZ19pZDogcGFyYW1zLm9yZ19pZCxcbiAgICAgIGdpdGh1Yl9oYW5kbGU6IHBhcmFtcy5naXRodWJfaGFuZGxlLFxuICAgICAgdHNjaXJjdWl0X2hhbmRsZTogcGFyYW1zLnRzY2lyY3VpdF9oYW5kbGUsXG4gICAgfSxcbiAgICBjdHguYXV0aCxcbiAgKVxuXG4gIGlmICghb3JnKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JnX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJPcmdhbml6YXRpb24gbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuICByZXR1cm4gY3R4Lmpzb24oeyBvcmc6IHB1YmxpY01hcE9yZyhvcmcpIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBjb21tb25QYXJhbXM6IHoub2JqZWN0KHtcbiAgICBpbnZpdGF0aW9uX3Rva2VuOiB6LnN0cmluZygpLFxuICB9KSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9yZ19hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIG9yZzogei5vYmplY3Qoe1xuICAgICAgb3JnX2lkOiB6LnN0cmluZygpLFxuICAgICAgb3JnX25hbWU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICAgIG9yZ19kaXNwbGF5X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBpbnZpdGF0aW9uX3Rva2VuIH0gPSByZXEuY29tbW9uUGFyYW1zXG5cbiAgLy8gRmluZCB0aGUgaW52aXRhdGlvblxuICBjb25zdCBpbnZpdGF0aW9uID0gY3R4LmRiLmdldE9yZ0ludml0YXRpb25CeVRva2VuKGludml0YXRpb25fdG9rZW4pXG5cbiAgaWYgKCFpbnZpdGF0aW9uKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiaW52aXRhdGlvbl9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiSW52YWxpZCBpbnZpdGF0aW9uIGxpbmtcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgaW52aXRhdGlvbiBpcyByZXZva2VkXG4gIGlmIChpbnZpdGF0aW9uLmlzX3Jldm9rZWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJpbnZpdGF0aW9uX3Jldm9rZWRcIixcbiAgICAgIG1lc3NhZ2U6IFwiVGhpcyBpbnZpdGF0aW9uIHdhcyBjYW5jZWxsZWRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgaW52aXRhdGlvbiBpcyBhbHJlYWR5IGFjY2VwdGVkXG4gIGlmIChpbnZpdGF0aW9uLmlzX2FjY2VwdGVkKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiaW52aXRhdGlvbl9hbHJlYWR5X2FjY2VwdGVkXCIsXG4gICAgICBtZXNzYWdlOiBcIllvdSd2ZSBhbHJlYWR5IGpvaW5lZCB0aGlzIG9yZ2FuaXphdGlvblwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDaGVjayBpZiBpbnZpdGF0aW9uIGlzIGV4cGlyZWRcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKVxuICBpZiAobmV3IERhdGUoaW52aXRhdGlvbi5leHBpcmVzX2F0KSA8IG5vdykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludml0YXRpb25fZXhwaXJlZFwiLFxuICAgICAgbWVzc2FnZTogYFRoaXMgaW52aXRhdGlvbiBleHBpcmVkIG9uICR7bmV3IERhdGUoaW52aXRhdGlvbi5leHBpcmVzX2F0KS50b0xvY2FsZURhdGVTdHJpbmcoKX1gLFxuICAgIH0pXG4gIH1cblxuICAvLyBHZXQgY3VycmVudCB1c2VyJ3MgYWNjb3VudFxuICBjb25zdCBjdXJyZW50QWNjb3VudCA9IGN0eC5kYi5hY2NvdW50cy5maW5kKFxuICAgIChhY2MpID0+IGFjYy5hY2NvdW50X2lkID09PSBjdHguYXV0aCEuYWNjb3VudF9pZCxcbiAgKVxuXG4gIGlmICghY3VycmVudEFjY291bnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhY2NvdW50X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3VyIGFjY291bnQgd2FzIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDaGVjayBpZiB1c2VyJ3MgZW1haWwgbWF0Y2hlcyBpbnZpdGF0aW9uIGVtYWlsXG4gIGlmIChcbiAgICBpbnZpdGF0aW9uLmludml0ZWVfZW1haWwgJiZcbiAgICBjdXJyZW50QWNjb3VudC5lbWFpbCAhPT0gaW52aXRhdGlvbi5pbnZpdGVlX2VtYWlsXG4gICkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImVtYWlsX21pc21hdGNoXCIsXG4gICAgICBtZXNzYWdlOiBgVGhpcyBpbnZpdGUgaXMgZm9yICR7aW52aXRhdGlvbi5pbnZpdGVlX2VtYWlsfS4gUGxlYXNlIGxvZyBpbiB3aXRoIHRoYXQgZW1haWwuYCxcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdXNlciBpcyBhbHJlYWR5IGEgbWVtYmVyXG4gIGNvbnN0IGV4aXN0aW5nTWVtYmVyID0gY3R4LmRiLmdldE9yZ2FuaXphdGlvbkFjY291bnQoe1xuICAgIG9yZ19pZDogaW52aXRhdGlvbi5vcmdfaWQsXG4gICAgYWNjb3VudF9pZDogY3VycmVudEFjY291bnQuYWNjb3VudF9pZCxcbiAgfSlcblxuICBpZiAoZXhpc3RpbmdNZW1iZXIpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhbHJlYWR5X21lbWJlclwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UncmUgYWxyZWFkeSBhIG1lbWJlciBvZiB0aGlzIG9yZ2FuaXphdGlvblwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBHZXQgb3JnYW5pemF0aW9uIGRldGFpbHNcbiAgY29uc3Qgb3JnID0gY3R4LmRiLm9yZ2FuaXphdGlvbnMuZmluZCgobykgPT4gby5vcmdfaWQgPT09IGludml0YXRpb24ub3JnX2lkKVxuICBpZiAoIW9yZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm9yZ19ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiT3JnYW5pemF0aW9uIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBBZGQgdXNlciB0byBvcmdhbml6YXRpb25cbiAgY29uc3Qgb3JnQWNjb3VudCA9IGN0eC5kYi5hZGRPcmdhbml6YXRpb25BY2NvdW50KHtcbiAgICBvcmdfaWQ6IGludml0YXRpb24ub3JnX2lkLFxuICAgIGFjY291bnRfaWQ6IGN1cnJlbnRBY2NvdW50LmFjY291bnRfaWQsXG4gICAgaXNfb3duZXI6IGZhbHNlLFxuICB9KVxuXG4gIC8vIE1hcmsgaW52aXRhdGlvbiBhcyBhY2NlcHRlZFxuICBjdHguZGIudXBkYXRlT3JnSW52aXRhdGlvbihpbnZpdGF0aW9uLm9yZ19pbnZpdGF0aW9uX2lkLCB7XG4gICAgaXNfcGVuZGluZzogZmFsc2UsXG4gICAgaXNfYWNjZXB0ZWQ6IHRydWUsXG4gICAgYWNjZXB0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBhY2NlcHRlZF9ieV9hY2NvdW50X2lkOiBjdXJyZW50QWNjb3VudC5hY2NvdW50X2lkLFxuICB9KVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb3JnX2FjY291bnRfaWQ6IG9yZ0FjY291bnQub3JnX2FjY291bnRfaWQsXG4gICAgb3JnOiB7XG4gICAgICBvcmdfaWQ6IG9yZy5vcmdfaWQsXG4gICAgICBvcmdfbmFtZTogb3JnLnRzY2lyY3VpdF9oYW5kbGUsXG4gICAgICBvcmdfZGlzcGxheV9uYW1lOiBvcmcub3JnX2Rpc3BsYXlfbmFtZSxcbiAgICB9LFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgb3JnX2lkOiB6LnN0cmluZygpLFxuICAgIGludml0ZWVfZW1haWw6IHouc3RyaW5nKCkuZW1haWwoKSxcbiAgfSksXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvcmdfaW52aXRhdGlvbl9pZDogei5zdHJpbmcoKSxcbiAgICBpbnZpdGF0aW9uX3Rva2VuOiB6LnN0cmluZygpLFxuICAgIGludml0ZWVfZW1haWw6IHouc3RyaW5nKCksXG4gICAgZXhwaXJlc19hdDogei5zdHJpbmcoKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBvcmdfaWQsIGludml0ZWVfZW1haWwgfSA9IHJlcS5jb21tb25QYXJhbXNcblxuICAvLyBDaGVjayBpZiBvcmcgZXhpc3RzIGFuZCB1c2VyIGhhcyBwZXJtaXNzaW9uXG4gIGNvbnN0IG9yZyA9IGN0eC5kYi5nZXRPcmcoeyBvcmdfaWQgfSwgY3R4LmF1dGgpXG5cbiAgaWYgKCFvcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJvcmdfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIk9yZ2FuaXphdGlvbiBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgaWYgKCFvcmcuY2FuX21hbmFnZV9vcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMywge1xuICAgICAgZXJyb3JfY29kZTogXCJub3RfYXV0aG9yaXplZFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byBtYW5hZ2UgdGhpcyBvcmdhbml6YXRpb25cIixcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBwZW5kaW5nIGludml0YXRpb25cbiAgY29uc3QgZXhpc3RpbmdJbnZpdGF0aW9ucyA9IGN0eC5kYi5saXN0T3JnSW52aXRhdGlvbnMob3JnX2lkKVxuICBjb25zdCBkdXBsaWNhdGVQZW5kaW5nID0gZXhpc3RpbmdJbnZpdGF0aW9ucy5maW5kKFxuICAgIChpbnYpID0+XG4gICAgICBpbnYuaW52aXRlZV9lbWFpbCA9PT0gaW52aXRlZV9lbWFpbCAmJlxuICAgICAgaW52LmlzX3BlbmRpbmcgJiZcbiAgICAgICFpbnYuaXNfcmV2b2tlZCAmJlxuICAgICAgbmV3IERhdGUoaW52LmV4cGlyZXNfYXQpID4gbmV3IERhdGUoKSxcbiAgKVxuXG4gIGlmIChkdXBsaWNhdGVQZW5kaW5nKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiZHVwbGljYXRlX3BlbmRpbmdfaW52aXRhdGlvblwiLFxuICAgICAgbWVzc2FnZTogXCJBIHBlbmRpbmcgaW52aXRhdGlvbiBmb3IgdGhpcyBlbWFpbCBhbHJlYWR5IGV4aXN0c1wiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDaGVjayBpZiB1c2VyIGlzIGFscmVhZHkgYSBtZW1iZXJcbiAgY29uc3QgaW52aXRlZUFjY291bnQgPSBjdHguZGIuYWNjb3VudHMuZmluZChcbiAgICAoYWNjKSA9PiBhY2MuZW1haWwgPT09IGludml0ZWVfZW1haWwsXG4gIClcbiAgaWYgKGludml0ZWVBY2NvdW50KSB7XG4gICAgY29uc3QgZXhpc3RpbmdNZW1iZXIgPSBjdHguZGIuZ2V0T3JnYW5pemF0aW9uQWNjb3VudCh7XG4gICAgICBvcmdfaWQsXG4gICAgICBhY2NvdW50X2lkOiBpbnZpdGVlQWNjb3VudC5hY2NvdW50X2lkLFxuICAgIH0pXG4gICAgaWYgKGV4aXN0aW5nTWVtYmVyKSB7XG4gICAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgICBlcnJvcl9jb2RlOiBcImFscmVhZHlfbWVtYmVyXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiVGhpcyB1c2VyIGlzIGFscmVhZHkgYSBtZW1iZXIgb2YgdGhlIG9yZ2FuaXphdGlvblwiLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvLyBHZW5lcmF0ZSBzZWN1cmUgdG9rZW5cbiAgY29uc3QgaW52aXRhdGlvbl90b2tlbiA9IHJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZyhcImhleFwiKVxuXG4gIC8vIENyZWF0ZSBpbnZpdGF0aW9uXG4gIGNvbnN0IGludml0YXRpb24gPSBjdHguZGIuYWRkT3JnSW52aXRhdGlvbih7XG4gICAgb3JnX2lkLFxuICAgIGludml0ZWVfZW1haWwsXG4gICAgaW52aXRlcl9hY2NvdW50X2lkOiBjdHguYXV0aCEuYWNjb3VudF9pZCxcbiAgICBpbnZpdGF0aW9uX3Rva2VuLFxuICB9KVxuXG4gIC8vIExvZyBlbWFpbCBzZW5kaW5nIChmYWtlIEFQSSBkb2Vzbid0IGFjdHVhbGx5IHNlbmQgZW1haWxzKVxuICBjb25zdCBvcmlnaW4gPSByZXEuaGVhZGVycy5nZXQoXCJvcmlnaW5cIikgfHwgXCJodHRwOi8vbG9jYWxob3N0OjUxNzNcIlxuICBjb25zdCBpbnZpdGVVcmwgPSBgJHtvcmlnaW59L29yZ3MvaW52aXRlP3Rva2VuPSR7aW52aXRhdGlvbl90b2tlbn1gXG4gIGNvbnNvbGUubG9nKGBbRkFLRSBFTUFJTF0gU2VuZGluZyBpbnZpdGF0aW9uIHRvICR7aW52aXRlZV9lbWFpbH1gKVxuICBjb25zb2xlLmxvZyhcbiAgICBgW0ZBS0UgRU1BSUxdIE9yZ2FuaXphdGlvbjogJHtvcmcudHNjaXJjdWl0X2hhbmRsZSB8fCBvcmcub3JnX2lkfWAsXG4gIClcbiAgY29uc29sZS5sb2coYFtGQUtFIEVNQUlMXSBJbnZpdGF0aW9uIFVSTDogJHtpbnZpdGVVcmx9YClcbiAgY29uc29sZS5sb2coYFtGQUtFIEVNQUlMXSBFeHBpcmVzOiAke2ludml0YXRpb24uZXhwaXJlc19hdH1gKVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb3JnX2ludml0YXRpb25faWQ6IGludml0YXRpb24ub3JnX2ludml0YXRpb25faWQsXG4gICAgaW52aXRhdGlvbl90b2tlbjogaW52aXRhdGlvbi5pbnZpdGF0aW9uX3Rva2VuLFxuICAgIGludml0ZWVfZW1haWw6IGludml0ZWVfZW1haWwsXG4gICAgZXhwaXJlc19hdDogaW52aXRhdGlvbi5leHBpcmVzX2F0LFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBjb21tb25QYXJhbXM6IHoub2JqZWN0KHtcbiAgICB0b2tlbjogei5zdHJpbmcoKSxcbiAgfSksXG4gIGF1dGg6IFwibm9uZVwiLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBpbnZpdGF0aW9uOiB6Lm9iamVjdCh7XG4gICAgICBvcmdfaW52aXRhdGlvbl9pZDogei5zdHJpbmcoKSxcbiAgICAgIGludml0ZWVfZW1haWw6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICAgIGlzX3BlbmRpbmc6IHouYm9vbGVhbigpLFxuICAgICAgaXNfYWNjZXB0ZWQ6IHouYm9vbGVhbigpLFxuICAgICAgaXNfcmV2b2tlZDogei5ib29sZWFuKCksXG4gICAgICBpc19leHBpcmVkOiB6LmJvb2xlYW4oKSxcbiAgICAgIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCksXG4gICAgICBleHBpcmVzX2F0OiB6LnN0cmluZygpLFxuICAgICAgb3JnOiB6Lm9iamVjdCh7XG4gICAgICAgIG9yZ19pZDogei5zdHJpbmcoKSxcbiAgICAgICAgb3JnX25hbWU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICAgICAgb3JnX2Rpc3BsYXlfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgfSksXG4gICAgICBpbnZpdGVyOiB6Lm9iamVjdCh7XG4gICAgICAgIGdpdGh1Yl91c2VybmFtZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgICAgICB0c2NpcmN1aXRfaGFuZGxlOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgICB9KSxcbiAgICB9KSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyB0b2tlbiB9ID0gcmVxLmNvbW1vblBhcmFtc1xuXG4gIGNvbnN0IGludml0YXRpb24gPSBjdHguZGIuZ2V0T3JnSW52aXRhdGlvbkJ5VG9rZW4odG9rZW4pXG5cbiAgaWYgKCFpbnZpdGF0aW9uKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiaW52aXRhdGlvbl9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiSW52aXRhdGlvbiBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gR2V0IG9yZ2FuaXphdGlvbiBkZXRhaWxzXG4gIGNvbnN0IG9yZyA9IGN0eC5kYi5vcmdhbml6YXRpb25zLmZpbmQoKG8pID0+IG8ub3JnX2lkID09PSBpbnZpdGF0aW9uLm9yZ19pZClcbiAgaWYgKCFvcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJvcmdfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIk9yZ2FuaXphdGlvbiBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gR2V0IGludml0ZXIgZGV0YWlsc1xuICBjb25zdCBpbnZpdGVyID0gY3R4LmRiLmFjY291bnRzLmZpbmQoXG4gICAgKGFjYykgPT4gYWNjLmFjY291bnRfaWQgPT09IGludml0YXRpb24uaW52aXRlcl9hY2NvdW50X2lkLFxuICApXG5cbiAgLy8gQ29tcHV0ZSBpc19leHBpcmVkIGR5bmFtaWNhbGx5XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcbiAgY29uc3QgaXNfZXhwaXJlZCA9XG4gICAgaW52aXRhdGlvbi5pc19wZW5kaW5nICYmXG4gICAgIWludml0YXRpb24uaXNfcmV2b2tlZCAmJlxuICAgIG5ldyBEYXRlKGludml0YXRpb24uZXhwaXJlc19hdCkgPCBub3dcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIGludml0YXRpb246IHtcbiAgICAgIG9yZ19pbnZpdGF0aW9uX2lkOiBpbnZpdGF0aW9uLm9yZ19pbnZpdGF0aW9uX2lkLFxuICAgICAgaW52aXRlZV9lbWFpbDogaW52aXRhdGlvbi5pbnZpdGVlX2VtYWlsLFxuICAgICAgaXNfcGVuZGluZzogaW52aXRhdGlvbi5pc19wZW5kaW5nLFxuICAgICAgaXNfYWNjZXB0ZWQ6IGludml0YXRpb24uaXNfYWNjZXB0ZWQsXG4gICAgICBpc19yZXZva2VkOiBpbnZpdGF0aW9uLmlzX3Jldm9rZWQsXG4gICAgICBpc19leHBpcmVkLFxuICAgICAgY3JlYXRlZF9hdDogaW52aXRhdGlvbi5jcmVhdGVkX2F0LFxuICAgICAgZXhwaXJlc19hdDogaW52aXRhdGlvbi5leHBpcmVzX2F0LFxuICAgICAgb3JnOiB7XG4gICAgICAgIG9yZ19pZDogb3JnLm9yZ19pZCxcbiAgICAgICAgb3JnX25hbWU6IG9yZy50c2NpcmN1aXRfaGFuZGxlLFxuICAgICAgICBvcmdfZGlzcGxheV9uYW1lOiBvcmcub3JnX2Rpc3BsYXlfbmFtZSxcbiAgICAgIH0sXG4gICAgICBpbnZpdGVyOiB7XG4gICAgICAgIGdpdGh1Yl91c2VybmFtZTogaW52aXRlcj8uZ2l0aHViX3VzZXJuYW1lIHx8IG51bGwsXG4gICAgICAgIHRzY2lyY3VpdF9oYW5kbGU6IGludml0ZXI/LnRzY2lyY3VpdF9oYW5kbGUgfHwgbnVsbCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgb3JnX2lkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIGludml0YXRpb25zOiB6LmFycmF5KFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBvcmdfaW52aXRhdGlvbl9pZDogei5zdHJpbmcoKSxcbiAgICAgICAgaW52aXRlZV9lbWFpbDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgICAgICBpc19wZW5kaW5nOiB6LmJvb2xlYW4oKSxcbiAgICAgICAgaXNfYWNjZXB0ZWQ6IHouYm9vbGVhbigpLFxuICAgICAgICBpc19leHBpcmVkOiB6LmJvb2xlYW4oKSxcbiAgICAgICAgaXNfcmV2b2tlZDogei5ib29sZWFuKCksXG4gICAgICAgIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCksXG4gICAgICAgIGV4cGlyZXNfYXQ6IHouc3RyaW5nKCksXG4gICAgICAgIGFjY2VwdGVkX2F0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgICAgIGludml0ZXI6IHoub2JqZWN0KHtcbiAgICAgICAgICBhY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgICAgICAgIGdpdGh1Yl91c2VybmFtZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgICAgICAgIHRzY2lyY3VpdF9oYW5kbGU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICApLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IG9yZ19pZCB9ID0gcmVxLmNvbW1vblBhcmFtc1xuXG4gIC8vIENoZWNrIGlmIG9yZyBleGlzdHMgYW5kIHVzZXIgaGFzIHBlcm1pc3Npb25cbiAgY29uc3Qgb3JnID0gY3R4LmRiLmdldE9yZyh7IG9yZ19pZCB9LCBjdHguYXV0aClcblxuICBpZiAoIW9yZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm9yZ19ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiT3JnYW5pemF0aW9uIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBpZiAoIW9yZy5jYW5fbWFuYWdlX29yZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm5vdF9hdXRob3JpemVkXCIsXG4gICAgICBtZXNzYWdlOiBcIllvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG1hbmFnZSB0aGlzIG9yZ2FuaXphdGlvblwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBHZXQgYWxsIGludml0YXRpb25zIGZvciB0aGlzIG9yZ1xuICBjb25zdCBpbnZpdGF0aW9ucyA9IGN0eC5kYi5saXN0T3JnSW52aXRhdGlvbnMob3JnX2lkKVxuXG4gIC8vIENvbXB1dGUgaXNfZXhwaXJlZCBmb3IgZWFjaCBpbnZpdGF0aW9uXG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcbiAgY29uc3QgaW52aXRhdGlvbnNXaXRoRXhwaXJ5ID0gaW52aXRhdGlvbnMubWFwKChpbnYpID0+IHtcbiAgICBjb25zdCBpc19leHBpcmVkID0gbmV3IERhdGUoaW52LmV4cGlyZXNfYXQpIDwgbm93ICYmIGludi5pc19wZW5kaW5nXG5cbiAgICAvLyBHZXQgaW52aXRlciBkZXRhaWxzXG4gICAgY29uc3QgaW52aXRlciA9IGN0eC5kYi5hY2NvdW50cy5maW5kKFxuICAgICAgKGFjYykgPT4gYWNjLmFjY291bnRfaWQgPT09IGludi5pbnZpdGVyX2FjY291bnRfaWQsXG4gICAgKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9yZ19pbnZpdGF0aW9uX2lkOiBpbnYub3JnX2ludml0YXRpb25faWQsXG4gICAgICBpbnZpdGVlX2VtYWlsOiBpbnYuaW52aXRlZV9lbWFpbCxcbiAgICAgIGlzX3BlbmRpbmc6IGludi5pc19wZW5kaW5nLFxuICAgICAgaXNfYWNjZXB0ZWQ6IGludi5pc19hY2NlcHRlZCxcbiAgICAgIGlzX2V4cGlyZWQsXG4gICAgICBpc19yZXZva2VkOiBpbnYuaXNfcmV2b2tlZCxcbiAgICAgIGNyZWF0ZWRfYXQ6IGludi5jcmVhdGVkX2F0LFxuICAgICAgZXhwaXJlc19hdDogaW52LmV4cGlyZXNfYXQsXG4gICAgICBhY2NlcHRlZF9hdDogaW52LmFjY2VwdGVkX2F0LFxuICAgICAgaW52aXRlcjoge1xuICAgICAgICBhY2NvdW50X2lkOiBpbnYuaW52aXRlcl9hY2NvdW50X2lkLFxuICAgICAgICBnaXRodWJfdXNlcm5hbWU6IGludml0ZXI/LmdpdGh1Yl91c2VybmFtZSB8fCBudWxsLFxuICAgICAgICB0c2NpcmN1aXRfaGFuZGxlOiBpbnZpdGVyPy50c2NpcmN1aXRfaGFuZGxlIHx8IG51bGwsXG4gICAgICB9LFxuICAgIH1cbiAgfSlcblxuICAvLyBTb3J0IGJ5IGNyZWF0ZWRfYXQgREVTQyAobmV3ZXN0IGZpcnN0KVxuICBpbnZpdGF0aW9uc1dpdGhFeHBpcnkuc29ydCgoYSwgYikgPT4ge1xuICAgIHJldHVybiBuZXcgRGF0ZShiLmNyZWF0ZWRfYXQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEuY3JlYXRlZF9hdCkuZ2V0VGltZSgpXG4gIH0pXG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBpbnZpdGF0aW9uczogaW52aXRhdGlvbnNXaXRoRXhwaXJ5LFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiREVMRVRFXCIsIFwiUE9TVFwiXSxcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgb3JnX2ludml0YXRpb25faWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IG9yZ19pbnZpdGF0aW9uX2lkIH0gPSByZXEuY29tbW9uUGFyYW1zXG5cbiAgLy8gRmluZCB0aGUgaW52aXRhdGlvblxuICBjb25zdCBpbnZpdGF0aW9uID0gY3R4LmRiLm9yZ0ludml0YXRpb25zLmZpbmQoXG4gICAgKGludikgPT4gaW52Lm9yZ19pbnZpdGF0aW9uX2lkID09PSBvcmdfaW52aXRhdGlvbl9pZCxcbiAgKVxuXG4gIGlmICghaW52aXRhdGlvbikge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludml0YXRpb25fbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIkludml0YXRpb24gbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGlmIG9yZyBleGlzdHMgYW5kIHVzZXIgaGFzIHBlcm1pc3Npb25cbiAgY29uc3Qgb3JnID0gY3R4LmRiLmdldE9yZyh7IG9yZ19pZDogaW52aXRhdGlvbi5vcmdfaWQgfSwgY3R4LmF1dGgpXG5cbiAgaWYgKCFvcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJvcmdfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIk9yZ2FuaXphdGlvbiBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgaWYgKCFvcmcuY2FuX21hbmFnZV9vcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMywge1xuICAgICAgZXJyb3JfY29kZTogXCJub3RfYXV0aG9yaXplZFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byBtYW5hZ2UgdGhpcyBvcmdhbml6YXRpb25cIixcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgaW52aXRhdGlvbiBpcyBhbHJlYWR5IGFjY2VwdGVkXG4gIGlmIChpbnZpdGF0aW9uLmlzX2FjY2VwdGVkKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiaW52aXRhdGlvbl9hbHJlYWR5X2FjY2VwdGVkXCIsXG4gICAgICBtZXNzYWdlOiBcIkNhbm5vdCByZXZva2UgYW4gaW52aXRhdGlvbiB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gYWNjZXB0ZWRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gUmV2b2tlIHRoZSBpbnZpdGF0aW9uXG4gIGN0eC5kYi51cGRhdGVPcmdJbnZpdGF0aW9uKG9yZ19pbnZpdGF0aW9uX2lkLCB7XG4gICAgaXNfcmV2b2tlZDogdHJ1ZSxcbiAgICBpc19wZW5kaW5nOiBmYWxzZSxcbiAgfSlcblxuICByZXR1cm4gY3R4Lmpzb24oeyBvazogdHJ1ZSB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHtcbiAgYWNjb3VudFNjaGVtYSxcbiAgdXNlclBlcm1pc3Npb25zU2NoZW1hLFxufSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIiwgXCJQT1NUXCJdLFxuICBjb21tb25QYXJhbXM6IHoub2JqZWN0KHtcbiAgICBvcmdfaWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBhdXRoOiBcIm9wdGlvbmFsX3Nlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb3JnX21lbWJlcnM6IHouYXJyYXkoXG4gICAgICBhY2NvdW50U2NoZW1hLm9taXQoeyBzaGlwcGluZ0luZm86IHRydWUgfSkuZXh0ZW5kKHtcbiAgICAgICAgam9pbmVkX2F0OiB6LnN0cmluZygpLFxuICAgICAgICBvcmdfbWVtYmVyX3Blcm1pc3Npb25zOiB1c2VyUGVybWlzc2lvbnNTY2hlbWEsXG4gICAgICB9KSxcbiAgICApLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSByZXEuY29tbW9uUGFyYW1zIGFzIHsgb3JnX2lkPzogc3RyaW5nIH1cblxuICBjb25zdCBvcmcgPSBjdHguZGIuZ2V0T3JnKFxuICAgIHtcbiAgICAgIG9yZ19pZDogcGFyYW1zLm9yZ19pZCxcbiAgICB9LFxuICAgIGN0eC5hdXRoLFxuICApXG5cbiAgaWYgKCFvcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJvcmdfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIk9yZ2FuaXphdGlvbiBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgY3VycmVudEFjY291bnRJZCA9IGN0eC5hdXRoPy5hY2NvdW50X2lkXG4gIGNvbnN0IGlzQ3VycmVudFVzZXJNZW1iZXIgPVxuICAgIGN1cnJlbnRBY2NvdW50SWQgJiZcbiAgICAoY3VycmVudEFjY291bnRJZCA9PT0gb3JnLm93bmVyX2FjY291bnRfaWQgfHxcbiAgICAgIGN0eC5kYi5vcmdBY2NvdW50cy5zb21lKFxuICAgICAgICAobSkgPT4gbS5vcmdfaWQgPT09IG9yZy5vcmdfaWQgJiYgbS5hY2NvdW50X2lkID09PSBjdXJyZW50QWNjb3VudElkLFxuICAgICAgKSlcblxuICBjb25zdCBtZW1iZXJzID0gY3R4LmRiLm9yZ0FjY291bnRzXG4gICAgLm1hcCgobSkgPT4ge1xuICAgICAgaWYgKG0ub3JnX2lkICE9PSBvcmcub3JnX2lkKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgICBjb25zdCBhY2NvdW50ID0gY3R4LmRiLmdldEFjY291bnQobS5hY2NvdW50X2lkKVxuICAgICAgaWYgKCFhY2NvdW50KSByZXR1cm4gdW5kZWZpbmVkXG4gICAgICBjb25zdCBtZW1iZXJPcmcgPSBjdHguZGIuZ2V0T3JnKFxuICAgICAgICB7XG4gICAgICAgICAgb3JnX2lkOiBvcmcub3JnX2lkLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWNjb3VudF9pZDogYWNjb3VudC5hY2NvdW50X2lkLFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2NvdW50LFxuICAgICAgICB1c2VyX3Blcm1pc3Npb25zOiBtZW1iZXJPcmcsXG4gICAgICAgIGpvaW5lZF9hdDogbS5jcmVhdGVkX2F0LFxuICAgICAgfVxuICAgIH0pXG4gICAgLmZpbHRlcihcbiAgICAgIChtZW1iZXIpOiBtZW1iZXIgaXMgTm9uTnVsbGFibGU8dHlwZW9mIG1lbWJlcj4gPT4gbWVtYmVyICE9PSB1bmRlZmluZWQsXG4gICAgKVxuICBjb25zdCBoYXNPd25lciA9IG1lbWJlcnMuc29tZSgobSkgPT4gbT8uYWNjb3VudF9pZCA9PT0gb3JnLm93bmVyX2FjY291bnRfaWQpXG4gIGxldCBmdWxsTWVtYmVycyA9IG1lbWJlcnNcblxuICBpZiAoIWhhc093bmVyKSB7XG4gICAgY29uc3Qgb3duZXIgPSBjdHguZGIuYWNjb3VudHMuZmluZChcbiAgICAgIChhY2MpID0+IGFjYy5hY2NvdW50X2lkID09PSBvcmcub3duZXJfYWNjb3VudF9pZCxcbiAgICApXG4gICAgaWYgKG93bmVyKSB7XG4gICAgICBjb25zdCBtZW1iZXJPcmcgPSBjdHguZGIuZ2V0T3JnKFxuICAgICAgICB7XG4gICAgICAgICAgb3JnX2lkOiBvcmcub3JnX2lkLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWNjb3VudF9pZDogb3duZXIuYWNjb3VudF9pZCxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIGZ1bGxNZW1iZXJzID0gW1xuICAgICAgICAuLi5tZW1iZXJzLFxuICAgICAgICB7XG4gICAgICAgICAgLi4ub3duZXIsXG4gICAgICAgICAgdXNlcl9wZXJtaXNzaW9uczogbWVtYmVyT3JnLFxuICAgICAgICAgIGpvaW5lZF9hdDogb3JnLmNyZWF0ZWRfYXQsXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgfVxuICB9XG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb3JnX21lbWJlcnM6IGZ1bGxNZW1iZXJzLm1hcCgobSkgPT4gKHtcbiAgICAgIC4uLm0sXG4gICAgICBlbWFpbDogaXNDdXJyZW50VXNlck1lbWJlciA/IG0uZW1haWwgOiB1bmRlZmluZWQsXG4gICAgICBvcmdfbWVtYmVyX3Blcm1pc3Npb25zOiBtLnVzZXJfcGVybWlzc2lvbnMgPz8ge1xuICAgICAgICBjYW5fbWFuYWdlX29yZzogZmFsc2UsXG4gICAgICAgIGNhbl9tYW5hZ2VfcGFja2FnZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pKSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgcHVibGljT3JnU2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHB1YmxpY01hcE9yZyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcHVibGljLW1hcHBpbmcvcHVibGljLW1hcC1vcmdcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCIsIFwiUE9TVFwiXSxcbiAgYXV0aDogXCJvcHRpb25hbF9zZXNzaW9uXCIsXG4gIGNvbW1vblBhcmFtczogei5vYmplY3Qoe1xuICAgIGFjY291bnRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB0c2NpcmN1aXRfaGFuZGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gICAgb3Jnczogei5hcnJheShwdWJsaWNPcmdTY2hlbWEpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IGFjY291bnRfaWQsIHRzY2lyY3VpdF9oYW5kbGUgfSA9IHJlcS5jb21tb25QYXJhbXNcbiAgaWYgKCFjdHguYXV0aCAmJiAhYWNjb3VudF9pZCAmJiAhdHNjaXJjdWl0X2hhbmRsZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludmFsaWRfcmVxdWVzdFwiLFxuICAgICAgbWVzc2FnZTpcbiAgICAgICAgXCJZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhY2NvdW50X2lkIG9yIHRzY2lyY3VpdF9oYW5kbGUgd2hlbiBub3QgYXV0aGVudGljYXRlZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBvcmdzID0gY3R4LmRiLmdldE9yZ3MoXG4gICAge1xuICAgICAgYWNjb3VudF9pZDogYWNjb3VudF9pZCxcbiAgICAgIHRzY2lyY3VpdF9oYW5kbGUsXG4gICAgICAuLi4oIWFjY291bnRfaWQgJiYgIXRzY2lyY3VpdF9oYW5kbGVcbiAgICAgICAgPyB7IG93bmVyX2FjY291bnRfaWQ6IGN0eC5hdXRoPy5hY2NvdW50X2lkIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSxcbiAgICB7XG4gICAgICBhY2NvdW50X2lkOiBjdHguYXV0aD8uYWNjb3VudF9pZCxcbiAgICB9LFxuICApXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb2s6IHRydWUsXG4gICAgb3Jnczogb3Jncy5tYXAoKG9yZykgPT4gcHVibGljTWFwT3JnKG9yZykpLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCIsIFwiUE9TVFwiXSxcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgb3JnX2lkOiB6LnN0cmluZygpLFxuICAgIGFjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7fSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBvcmdfaWQsIGFjY291bnRfaWQgfSA9IHJlcS5jb21tb25QYXJhbXNcblxuICBjb25zdCBvcmcgPSBjdHguZGIuZ2V0T3JnKHsgb3JnX2lkIH0sIGN0eC5hdXRoKVxuXG4gIGlmICghb3JnKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JnX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJPcmdhbml6YXRpb24gbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGlmICghb3JnLmNhbl9tYW5hZ2Vfb3JnKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDMsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwibm90X2F1dGhvcml6ZWRcIixcbiAgICAgIG1lc3NhZ2U6IFwiWW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gbWFuYWdlIHRoaXMgb3JnYW5pemF0aW9uXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGFjY291bnQgPSBjdHguZGIuYWNjb3VudHMuZmluZCgoYWNjKSA9PiBhY2MuYWNjb3VudF9pZCA9PT0gYWNjb3VudF9pZClcblxuICBpZiAoIWFjY291bnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhY2NvdW50X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJBY2NvdW50IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBjdHguZGIucmVtb3ZlT3JnYW5pemF0aW9uQWNjb3VudCh7XG4gICAgb3JnX2lkLFxuICAgIGFjY291bnRfaWQsXG4gIH0pXG5cbiAgcmV0dXJuIGN0eC5qc29uKHt9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgdXNlclBlcm1pc3Npb25zU2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiLCBcIlBVVFwiXSxcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgb3JnX2lkOiB6LnN0cmluZygpLFxuICAgIGFjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgb3JnX21lbWJlcl9wZXJtaXNzaW9uczogdXNlclBlcm1pc3Npb25zU2NoZW1hLFxuICB9KSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe30pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgb3JnX2lkLCBhY2NvdW50X2lkLCBvcmdfbWVtYmVyX3Blcm1pc3Npb25zIH0gPSByZXEuY29tbW9uUGFyYW1zXG5cbiAgY29uc3Qgb3JnID0gY3R4LmRiLmdldE9yZyh7IG9yZ19pZCB9LCBjdHguYXV0aClcblxuICBpZiAoIW9yZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm9yZ19ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiT3JnYW5pemF0aW9uIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBpZiAoIW9yZy5jYW5fbWFuYWdlX29yZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm5vdF9hdXRob3JpemVkXCIsXG4gICAgICBtZXNzYWdlOiBcIllvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG1hbmFnZSB0aGlzIG9yZ2FuaXphdGlvblwiLFxuICAgIH0pXG4gIH1cblxuICBpZiAoYWNjb3VudF9pZCA9PT0gY3R4LmF1dGguYWNjb3VudF9pZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImNhbm5vdF91cGRhdGVfc2VsZlwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgY2Fubm90IHVwZGF0ZSB5b3VyIG93biBwZXJtaXNzaW9uc1wiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBleGlzdGluZ01lbWJlciA9IGN0eC5kYi5nZXRPcmdhbml6YXRpb25BY2NvdW50KHtcbiAgICBvcmdfaWQsXG4gICAgYWNjb3VudF9pZCxcbiAgfSlcblxuICBpZiAoIWV4aXN0aW5nTWVtYmVyKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwibWVtYmVyX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJNZW1iZXIgbm90IGZvdW5kIGluIHRoaXMgb3JnYW5pemF0aW9uXCIsXG4gICAgfSlcbiAgfVxuXG4gIGN0eC5kYi51cGRhdGVPcmdhbml6YXRpb25BY2NvdW50KFxuICAgIHsgb3JnX2lkLCBhY2NvdW50X2lkIH0sXG4gICAgb3JnX21lbWJlcl9wZXJtaXNzaW9ucyxcbiAgKVxuXG4gIHJldHVybiBjdHguanNvbih7fSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7XG4gIHB1YmxpY09yZ1NjaGVtYSxcbiAgdHNjaXJjdWl0SGFuZGxlU2NoZW1hLFxufSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyBwdWJsaWNNYXBPcmcgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3B1YmxpYy1tYXBwaW5nL3B1YmxpYy1tYXAtb3JnXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIiwgXCJQQVRDSFwiXSxcbiAgY29tbW9uUGFyYW1zOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBvcmdfaWQ6IHouc3RyaW5nKCksXG4gICAgfSlcbiAgICAuYW5kKFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBkaXNwbGF5X25hbWU6IHouc3RyaW5nKCkubWF4KDUwKS5vcHRpb25hbCgpLFxuICAgICAgICB0c2NpcmN1aXRfaGFuZGxlOiB0c2NpcmN1aXRIYW5kbGVTY2hlbWEub3B0aW9uYWwoKSxcbiAgICAgIH0pLFxuICAgICksXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvcmc6IHB1YmxpY09yZ1NjaGVtYSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBvcmdfaWQsIGRpc3BsYXlfbmFtZSwgdHNjaXJjdWl0X2hhbmRsZSB9ID0gcmVxLmNvbW1vblBhcmFtcyBhcyB7XG4gICAgb3JnX2lkOiBzdHJpbmdcbiAgICBkaXNwbGF5X25hbWU/OiBzdHJpbmdcbiAgICB0c2NpcmN1aXRfaGFuZGxlPzogc3RyaW5nIHwgbnVsbFxuICB9XG5cbiAgY29uc3Qgb3JnID0gY3R4LmRiLmdldE9yZyh7IG9yZ19pZCB9LCBjdHguYXV0aClcblxuICBpZiAoIW9yZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm9yZ19ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiT3JnYW5pemF0aW9uIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBpZiAoIW9yZy5jYW5fbWFuYWdlX29yZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm5vdF9hdXRob3JpemVkXCIsXG4gICAgICBtZXNzYWdlOiBcIllvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG1hbmFnZSB0aGlzIG9yZ2FuaXphdGlvblwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBObyBjaGFuZ2VzIHByb3ZpZGVkXG4gIGlmIChkaXNwbGF5X25hbWUgPT09IHVuZGVmaW5lZCAmJiB0c2NpcmN1aXRfaGFuZGxlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY3R4Lmpzb24oeyBvcmc6IHB1YmxpY01hcE9yZyhvcmcpIH0pXG4gIH1cblxuICBpZiAodHNjaXJjdWl0X2hhbmRsZSAmJiB0c2NpcmN1aXRfaGFuZGxlICE9PSBvcmcudHNjaXJjdWl0X2hhbmRsZSkge1xuICAgIGNvbnN0IGR1cGxpY2F0ZSA9IGN0eC5kYi5nZXRPcmcoeyB0c2NpcmN1aXRfaGFuZGxlIH0pXG5cbiAgICBpZiAoZHVwbGljYXRlICYmIGR1cGxpY2F0ZS5vcmdfaWQgIT09IG9yZ19pZCkge1xuICAgICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgICAgZXJyb3JfY29kZTogXCJvcmdfdHNjaXJjdWl0X2hhbmRsZV9hbHJlYWR5X2V4aXN0c1wiLFxuICAgICAgICBtZXNzYWdlOiBcIkFuIG9yZ2FuaXphdGlvbiB3aXRoIHRoaXMgdHNjaXJjdWl0X2hhbmRsZSBhbHJlYWR5IGV4aXN0c1wiLFxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgY29uc3QgdXBkYXRlczoge1xuICAgIG9yZ19kaXNwbGF5X25hbWU/OiBzdHJpbmdcbiAgICB0c2NpcmN1aXRfaGFuZGxlPzogc3RyaW5nIHwgbnVsbFxuICB9ID0ge31cblxuICBpZiAodHNjaXJjdWl0X2hhbmRsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdXBkYXRlcy50c2NpcmN1aXRfaGFuZGxlID0gdHNjaXJjdWl0X2hhbmRsZVxuICB9XG5cbiAgaWYgKGRpc3BsYXlfbmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgdHJpbW1lZERpc3BsYXlOYW1lID0gZGlzcGxheV9uYW1lLnRyaW0oKVxuICAgIGNvbnN0IGZhbGxiYWNrRGlzcGxheU5hbWUgPSBvcmcudHNjaXJjdWl0X2hhbmRsZSA/PyB1bmRlZmluZWRcbiAgICB1cGRhdGVzLm9yZ19kaXNwbGF5X25hbWUgPVxuICAgICAgdHJpbW1lZERpc3BsYXlOYW1lLmxlbmd0aCA+IDAgPyB0cmltbWVkRGlzcGxheU5hbWUgOiBmYWxsYmFja0Rpc3BsYXlOYW1lXG4gIH1cblxuICBjb25zdCB1cGRhdGVkID0gY3R4LmRiLnVwZGF0ZU9yZ2FuaXphdGlvbihvcmdfaWQsIHVwZGF0ZXMpXG5cbiAgaWYgKCF1cGRhdGVkKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig1MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwidXBkYXRlX2ZhaWxlZFwiLFxuICAgICAgbWVzc2FnZTogXCJGYWlsZWQgdG8gdXBkYXRlIG9yZ2FuaXphdGlvblwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCB1cGRhdGVkT3JnV2l0aFBlcm1pc3Npb25zID0gY3R4LmRiLmdldE9yZyh7IG9yZ19pZCB9LCBjdHguYXV0aClcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9yZzogcHVibGljTWFwT3JnKHVwZGF0ZWRPcmdXaXRoUGVybWlzc2lvbnMhKSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHB1YmxpY09yZ1NjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcbmltcG9ydCB7IHB1YmxpY01hcE9yZyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcHVibGljLW1hcHBpbmcvcHVibGljLW1hcC1vcmdcIlxuXG5jb25zdCBNQVhfQVZBVEFSX0JZVEVTID0gNSAqIDEwMjQgKiAxMDI0IC8vIDVNQlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9yZzogcHVibGljT3JnU2NoZW1hLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCBmb3JtRGF0YSA9IGF3YWl0IHJlcS5mb3JtRGF0YSgpLmNhdGNoKCgpID0+IG51bGwpXG5cbiAgaWYgKCFmb3JtRGF0YSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludmFsaWRfZm9ybV9kYXRhXCIsXG4gICAgICBtZXNzYWdlOiBcIkV4cGVjdGVkIG11bHRpcGFydCBmb3JtIGRhdGFcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3Qgb3JnSWRWYWx1ZSA9IGZvcm1EYXRhLmdldChcIm9yZ19pZFwiKVxuICBjb25zdCBhdmF0YXJGaWxlID0gZm9ybURhdGEuZ2V0KFwiYXZhdGFyXCIpXG5cbiAgaWYgKCFvcmdJZFZhbHVlIHx8IHR5cGVvZiBvcmdJZFZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwibWlzc2luZ19vcmdfaWRcIixcbiAgICAgIG1lc3NhZ2U6IFwib3JnX2lkIGlzIHJlcXVpcmVkXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IG9yZyA9IGN0eC5kYi5nZXRPcmcoeyBvcmdfaWQ6IG9yZ0lkVmFsdWUgfSwgY3R4LmF1dGgpXG5cbiAgaWYgKCFvcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJvcmdfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIk9yZ2FuaXphdGlvbiBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgaWYgKCFvcmcuY2FuX21hbmFnZV9vcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMywge1xuICAgICAgZXJyb3JfY29kZTogXCJub3RfYXV0aG9yaXplZFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byBtYW5hZ2UgdGhpcyBvcmdhbml6YXRpb25cIixcbiAgICB9KVxuICB9XG5cbiAgaWYgKCEoYXZhdGFyRmlsZSBpbnN0YW5jZW9mIEZpbGUpKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwibWlzc2luZ19hdmF0YXJcIixcbiAgICAgIG1lc3NhZ2U6IFwiQW4gYXZhdGFyIGZpbGUgaXMgcmVxdWlyZWRcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgbWltZVR5cGUgPSAoYXZhdGFyRmlsZS50eXBlICYmIGF2YXRhckZpbGUudHlwZS50cmltKCkpIHx8IFwiaW1hZ2UvcG5nXCJcblxuICBpZiAoIW1pbWVUeXBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9cIikpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJpbnZhbGlkX2F2YXRhcl90eXBlXCIsXG4gICAgICBtZXNzYWdlOiBcIkF2YXRhciBtdXN0IGJlIGFuIGltYWdlXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGF2YXRhckJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGF3YWl0IGF2YXRhckZpbGUuYXJyYXlCdWZmZXIoKSlcblxuICBpZiAoYXZhdGFyQnVmZmVyLmJ5dGVMZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJlbXB0eV9hdmF0YXJcIixcbiAgICAgIG1lc3NhZ2U6IFwiQXZhdGFyIGZpbGUgaXMgZW1wdHlcIixcbiAgICB9KVxuICB9XG5cbiAgaWYgKGF2YXRhckJ1ZmZlci5ieXRlTGVuZ3RoID4gTUFYX0FWQVRBUl9CWVRFUykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDEzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImF2YXRhcl90b29fbGFyZ2VcIixcbiAgICAgIG1lc3NhZ2U6IFwiQXZhdGFyIGZpbGUgaXMgdG9vIGxhcmdlXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGJhc2U2NCA9IGF2YXRhckJ1ZmZlci50b1N0cmluZyhcImJhc2U2NFwiKVxuICBjb25zdCBkYXRhVXJsID0gYGRhdGE6JHttaW1lVHlwZX07YmFzZTY0LCR7YmFzZTY0fWBcblxuICBjb25zdCB1cGRhdGVkID0gY3R4LmRiLnVwZGF0ZU9yZ2FuaXphdGlvbihvcmdJZFZhbHVlLCB7XG4gICAgYXZhdGFyX3VybDogZGF0YVVybCxcbiAgfSlcblxuICBpZiAoIXVwZGF0ZWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDUwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJ1cGRhdGVfZmFpbGVkXCIsXG4gICAgICBtZXNzYWdlOiBcIkZhaWxlZCB0byB1cGRhdGUgb3JnYW5pemF0aW9uXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZWRPcmcgPSBjdHguZGIuZ2V0T3JnKHsgb3JnX2lkOiBvcmdJZFZhbHVlIH0sIGN0eC5hdXRoKVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb3JnOiBwdWJsaWNNYXBPcmcodXBkYXRlZE9yZyEpLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcHVibGljTWFwUGFja2FnZUJ1aWxkIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9wdWJsaWMtbWFwcGluZy9wdWJsaWMtbWFwLXBhY2thZ2UtYnVpbGRcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAgcXVlcnlQYXJhbXM6IHoub2JqZWN0KHtcbiAgICBwYWNrYWdlX2J1aWxkX2lkOiB6LnN0cmluZygpLFxuICAgIGluY2x1ZGVfbG9nczogei5ib29sZWFuKCkub3B0aW9uYWwoKS5kZWZhdWx0KGZhbHNlKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIHBhY2thZ2VfYnVpbGQ6IHouYW55KCksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgcGFja2FnZV9idWlsZF9pZCwgaW5jbHVkZV9sb2dzIH0gPSByZXEucXVlcnlcblxuICBpZiAoIXBhY2thZ2VfYnVpbGRfaWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJpbnZhbGlkX3JlcXVlc3RcIixcbiAgICAgIG1lc3NhZ2U6IFwicGFja2FnZV9idWlsZF9pZCBpcyByZXF1aXJlZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBwYWNrYWdlQnVpbGQgPSBjdHguZGIucGFja2FnZUJ1aWxkcy5maW5kKFxuICAgIChidWlsZCkgPT4gYnVpbGQucGFja2FnZV9idWlsZF9pZCA9PT0gcGFja2FnZV9idWlsZF9pZCxcbiAgKVxuXG4gIGlmICghcGFja2FnZUJ1aWxkKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9idWlsZF9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSBidWlsZCBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgKHByKSA9PiBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VCdWlsZC5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gIClcblxuICBpZiAoIXBhY2thZ2VSZWxlYXNlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIHJlbGVhc2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHBrZyA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKFxuICAgIChwKSA9PiBwLnBhY2thZ2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlLnBhY2thZ2VfaWQsXG4gIClcbiAgaWYgKCFwa2cpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBpZiAocGtnLmNyZWF0b3JfYWNjb3VudF9pZCAhPT0gY3R4LmF1dGguYWNjb3VudF9pZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInVuYXV0aG9yaXplZFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgYXJlIG5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyB0aGlzIHBhY2thZ2UgYnVpbGRcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgcHVibGljQnVpbGQgPSBwdWJsaWNNYXBQYWNrYWdlQnVpbGQocGFja2FnZUJ1aWxkLCB7XG4gICAgaW5jbHVkZV9sb2dzLFxuICB9KVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgcGFja2FnZV9idWlsZDogcHVibGljQnVpbGQsXG4gIH0pXG59KVxuIiwgImltcG9ydCAqIGFzIFpUIGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcblxuZXhwb3J0IGNvbnN0IHB1YmxpY01hcFBhY2thZ2VCdWlsZCA9IChcbiAgaW50ZXJuYWxQYWNrYWdlQnVpbGQ6IFpULlBhY2thZ2VCdWlsZCAmIHtcbiAgICB1c2VyX2NvZGVfam9iX2Vycm9yPzogYW55IHwgbnVsbFxuICAgIHVzZXJfY29kZV9qb2JfY29tcGxldGVkX2F0Pzogc3RyaW5nIHwgbnVsbFxuICAgIHVzZXJfY29kZV9qb2JfY29tcGxldGVkX2xvZ3M/OiBhbnkgfCBudWxsXG4gICAgdXNlcl9jb2RlX2pvYl9sb2dfc3RyZWFtX3VybD86IHN0cmluZyB8IG51bGxcbiAgICB1c2VyX2NvZGVfam9iX3N0YXJ0ZWRfYXQ/OiBzdHJpbmcgfCBudWxsXG4gIH0sXG4gIG9wdGlvbnM6IHtcbiAgICBpbmNsdWRlX2xvZ3M/OiBib29sZWFuXG4gIH0gPSB7XG4gICAgaW5jbHVkZV9sb2dzOiBmYWxzZSxcbiAgfSxcbik6IFpULlBhY2thZ2VCdWlsZCA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAuLi5pbnRlcm5hbFBhY2thZ2VCdWlsZCxcbiAgICBjcmVhdGVkX2F0OiBpbnRlcm5hbFBhY2thZ2VCdWlsZC5jcmVhdGVkX2F0LFxuICAgIHRyYW5zcGlsYXRpb25fc3RhcnRlZF9hdDogaW50ZXJuYWxQYWNrYWdlQnVpbGQudHJhbnNwaWxhdGlvbl9zdGFydGVkX2F0LFxuICAgIHRyYW5zcGlsYXRpb25fY29tcGxldGVkX2F0OiBpbnRlcm5hbFBhY2thZ2VCdWlsZC50cmFuc3BpbGF0aW9uX2NvbXBsZXRlZF9hdCxcbiAgICB0cmFuc3BpbGF0aW9uX2xvZ3M6IG9wdGlvbnMuaW5jbHVkZV9sb2dzXG4gICAgICA/IGludGVybmFsUGFja2FnZUJ1aWxkLnRyYW5zcGlsYXRpb25fbG9nc1xuICAgICAgOiBudWxsLFxuICAgIHRyYW5zcGlsYXRpb25fZXJyb3I6IGludGVybmFsUGFja2FnZUJ1aWxkLnRyYW5zcGlsYXRpb25fZXJyb3IsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX3N0YXJ0ZWRfYXQ6XG4gICAgICBpbnRlcm5hbFBhY2thZ2VCdWlsZC5jaXJjdWl0X2pzb25fYnVpbGRfc3RhcnRlZF9hdCxcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfY29tcGxldGVkX2F0OlxuICAgICAgaW50ZXJuYWxQYWNrYWdlQnVpbGQuY2lyY3VpdF9qc29uX2J1aWxkX2NvbXBsZXRlZF9hdCxcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfbG9nczogb3B0aW9ucy5pbmNsdWRlX2xvZ3NcbiAgICAgID8gaW50ZXJuYWxQYWNrYWdlQnVpbGQuY2lyY3VpdF9qc29uX2J1aWxkX2xvZ3NcbiAgICAgIDogbnVsbCxcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfZXJyb3I6IGludGVybmFsUGFja2FnZUJ1aWxkLmNpcmN1aXRfanNvbl9idWlsZF9lcnJvcixcbiAgICBpbWFnZV9nZW5lcmF0aW9uX2luX3Byb2dyZXNzOlxuICAgICAgaW50ZXJuYWxQYWNrYWdlQnVpbGQuaW1hZ2VfZ2VuZXJhdGlvbl9pbl9wcm9ncmVzcyxcbiAgICBpbWFnZV9nZW5lcmF0aW9uX3N0YXJ0ZWRfYXQ6XG4gICAgICBpbnRlcm5hbFBhY2thZ2VCdWlsZC5pbWFnZV9nZW5lcmF0aW9uX3N0YXJ0ZWRfYXQsXG4gICAgaW1hZ2VfZ2VuZXJhdGlvbl9jb21wbGV0ZWRfYXQ6XG4gICAgICBpbnRlcm5hbFBhY2thZ2VCdWlsZC5pbWFnZV9nZW5lcmF0aW9uX2NvbXBsZXRlZF9hdCxcbiAgICBpbWFnZV9nZW5lcmF0aW9uX2xvZ3M6IG9wdGlvbnMuaW5jbHVkZV9sb2dzXG4gICAgICA/IGludGVybmFsUGFja2FnZUJ1aWxkLmltYWdlX2dlbmVyYXRpb25fbG9nc1xuICAgICAgOiBudWxsLFxuICAgIGltYWdlX2dlbmVyYXRpb25fZXJyb3I6IGludGVybmFsUGFja2FnZUJ1aWxkLmltYWdlX2dlbmVyYXRpb25fZXJyb3IsXG4gICAgYnVpbGRfc3RhcnRlZF9hdDogaW50ZXJuYWxQYWNrYWdlQnVpbGQuYnVpbGRfc3RhcnRlZF9hdCxcbiAgICBidWlsZF9jb21wbGV0ZWRfYXQ6IGludGVybmFsUGFja2FnZUJ1aWxkLmJ1aWxkX2NvbXBsZXRlZF9hdCxcbiAgICBidWlsZF9lcnJvcjogaW50ZXJuYWxQYWNrYWdlQnVpbGQuYnVpbGRfZXJyb3IsXG4gICAgYnVpbGRfZXJyb3JfbGFzdF91cGRhdGVkX2F0OlxuICAgICAgaW50ZXJuYWxQYWNrYWdlQnVpbGQuYnVpbGRfZXJyb3JfbGFzdF91cGRhdGVkX2F0LFxuICAgIHByZXZpZXdfdXJsOiBpbnRlcm5hbFBhY2thZ2VCdWlsZC5wcmV2aWV3X3VybCxcbiAgICBidWlsZF9sb2dzOiBvcHRpb25zLmluY2x1ZGVfbG9ncyA/IGludGVybmFsUGFja2FnZUJ1aWxkLmJ1aWxkX2xvZ3MgOiBudWxsLFxuICAgIHVzZXJfY29kZV9zdGFydGVkX2F0OiBpbnRlcm5hbFBhY2thZ2VCdWlsZC51c2VyX2NvZGVfam9iX3N0YXJ0ZWRfYXQgPz8gbnVsbCxcbiAgICB1c2VyX2NvZGVfY29tcGxldGVkX2F0OlxuICAgICAgaW50ZXJuYWxQYWNrYWdlQnVpbGQudXNlcl9jb2RlX2pvYl9jb21wbGV0ZWRfYXQgPz8gbnVsbCxcbiAgICB1c2VyX2NvZGVfZXJyb3I6IGludGVybmFsUGFja2FnZUJ1aWxkLnVzZXJfY29kZV9qb2JfZXJyb3IgPz8gbnVsbCxcbiAgICB1c2VyX2NvZGVfYnVpbGRfbG9nczogb3B0aW9ucy5pbmNsdWRlX2xvZ3NcbiAgICAgID8gaW50ZXJuYWxQYWNrYWdlQnVpbGQudXNlcl9jb2RlX2pvYl9jb21wbGV0ZWRfbG9nc1xuICAgICAgOiBudWxsLFxuICAgIHVzZXJfY29kZV9sb2dfc3RyZWFtX3VybDpcbiAgICAgIGludGVybmFsUGFja2FnZUJ1aWxkLnVzZXJfY29kZV9qb2JfbG9nX3N0cmVhbV91cmwgPz8gbnVsbCxcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcHVibGljTWFwUGFja2FnZUJ1aWxkIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9wdWJsaWMtbWFwcGluZy9wdWJsaWMtbWFwLXBhY2thZ2UtYnVpbGRcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAgcXVlcnlQYXJhbXM6IHoub2JqZWN0KHtcbiAgICBwYWNrYWdlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcGFja2FnZV9yZWxlYXNlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBwYWNrYWdlX2J1aWxkczogei5hcnJheSh6LmFueSgpKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBwYWNrYWdlX2lkLCBwYWNrYWdlX3JlbGVhc2VfaWQgfSA9IHJlcS5xdWVyeVxuICBpZiAoIXBhY2thZ2VfaWQgJiYgIXBhY2thZ2VfcmVsZWFzZV9pZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludmFsaWRfcmVxdWVzdFwiLFxuICAgICAgbWVzc2FnZTogXCJFaXRoZXIgcGFja2FnZV9pZCBvciBwYWNrYWdlX3JlbGVhc2VfaWQgbXVzdCBiZSBwcm92aWRlZFwiLFxuICAgIH0pXG4gIH1cblxuICBsZXQgdGFyZ2V0UGFja2FnZUlkID0gcGFja2FnZV9pZFxuXG4gIGlmIChwYWNrYWdlX3JlbGVhc2VfaWQpIHtcbiAgICBjb25zdCBwYWNrYWdlUmVsZWFzZSA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgIChwcikgPT4gcHIucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgKVxuICAgIGlmICghcGFja2FnZVJlbGVhc2UpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX25vdF9mb3VuZFwiLFxuICAgICAgICBtZXNzYWdlOiBcIlBhY2thZ2UgcmVsZWFzZSBub3QgZm91bmRcIixcbiAgICAgIH0pXG4gICAgfVxuICAgIHRhcmdldFBhY2thZ2VJZCA9IHBhY2thZ2VSZWxlYXNlLnBhY2thZ2VfaWRcbiAgfVxuXG4gIGlmICh0YXJnZXRQYWNrYWdlSWQpIHtcbiAgICBjb25zdCBwa2cgPSBjdHguZGIucGFja2FnZXMuZmluZCgocCkgPT4gcC5wYWNrYWdlX2lkID09PSB0YXJnZXRQYWNrYWdlSWQpXG4gICAgaWYgKCFwa2cpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9ub3RfZm91bmRcIixcbiAgICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIG5vdCBmb3VuZFwiLFxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKHBrZy5jcmVhdG9yX2FjY291bnRfaWQgIT09IGN0eC5hdXRoLmFjY291bnRfaWQpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwidW5hdXRob3JpemVkXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiWW91IGFyZSBub3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgdGhpcyBwYWNrYWdlXCIsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGxldCBidWlsZHMgPSBjdHguZGIucGFja2FnZUJ1aWxkc1xuXG4gIGlmIChwYWNrYWdlX2lkKSB7XG4gICAgY29uc3QgcGFja2FnZVJlbGVhc2VzID0gY3R4LmRiLnBhY2thZ2VSZWxlYXNlcy5maWx0ZXIoXG4gICAgICAoeCkgPT4geC5wYWNrYWdlX2lkID09PSBwYWNrYWdlX2lkLFxuICAgIClcbiAgICBpZiAocGFja2FnZVJlbGVhc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX25vdF9mb3VuZFwiLFxuICAgICAgICBtZXNzYWdlOiBcIlBhY2thZ2Ugbm90IGZvdW5kXCIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHBhY2thZ2VSZWxlYXNlSWRzID0gcGFja2FnZVJlbGVhc2VzXG4gICAgICAuZmlsdGVyKChwcikgPT4gcHIucGFja2FnZV9pZCA9PT0gcGFja2FnZV9pZClcbiAgICAgIC5tYXAoKHByKSA9PiBwci5wYWNrYWdlX3JlbGVhc2VfaWQpXG5cbiAgICBidWlsZHMgPSBidWlsZHMuZmlsdGVyKChidWlsZCkgPT5cbiAgICAgIHBhY2thZ2VSZWxlYXNlSWRzLmluY2x1ZGVzKGJ1aWxkLnBhY2thZ2VfcmVsZWFzZV9pZCksXG4gICAgKVxuICB9XG5cbiAgaWYgKHBhY2thZ2VfcmVsZWFzZV9pZCkge1xuICAgIGJ1aWxkcyA9IGJ1aWxkcy5maWx0ZXIoXG4gICAgICAoYnVpbGQpID0+IGJ1aWxkLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGFja2FnZV9yZWxlYXNlX2lkLFxuICAgIClcbiAgfVxuXG4gIGJ1aWxkcyA9IGJ1aWxkcy5zb3J0KFxuICAgIChhLCBiKSA9PlxuICAgICAgbmV3IERhdGUoYi5jcmVhdGVkX2F0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhLmNyZWF0ZWRfYXQpLmdldFRpbWUoKSxcbiAgKVxuXG4gIGNvbnN0IHB1YmxpY0J1aWxkcyA9IGJ1aWxkcy5tYXAoKGJ1aWxkKSA9PlxuICAgIHB1YmxpY01hcFBhY2thZ2VCdWlsZChidWlsZCwge1xuICAgICAgaW5jbHVkZV9sb2dzOiBmYWxzZSxcbiAgICB9KSxcbiAgKVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgcGFja2FnZV9idWlsZHM6IHB1YmxpY0J1aWxkcyxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgUGFja2FnZSwgUGFja2FnZVJlbGVhc2UgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBjb25zdCBmaW5kUGFja2FnZVJlbGVhc2VJZCA9IGFzeW5jIChcbiAgcGFyYW1zOlxuICAgIHwgc3RyaW5nXG4gICAgfCB7XG4gICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogc3RyaW5nXG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHBhY2thZ2VfbmFtZTogc3RyaW5nXG4gICAgICAgIHVzZV9sYXRlc3RfdmVyc2lvbjogdHJ1ZVxuICAgICAgfVxuICAgIHwge1xuICAgICAgICBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uOiBzdHJpbmdcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgcGFja2FnZV9yZWxlYXNlX2lkPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgICAgIHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICAgIH0sXG4gIGN0eDogeyBkYjogYW55IH0sXG4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+ID0+IHtcbiAgaWYgKHR5cGVvZiBwYXJhbXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gZmluZFBhY2thZ2VSZWxlYXNlSWRGcm9tUGFja2FnZU5hbWVXaXRoVmVyc2lvbihwYXJhbXMsIGN0eC5kYilcbiAgfVxuXG4gIGlmIChcbiAgICBcInBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb25cIiBpbiBwYXJhbXMgJiZcbiAgICBwYXJhbXMucGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvblxuICApIHtcbiAgICBjb25zdCB7IHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24gfSA9IHBhcmFtc1xuXG4gICAgaWYgKHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24uZW5kc1dpdGgoXCJAbGF0ZXN0XCIpKSB7XG4gICAgICBjb25zdCBbcGFja2FnZU5hbWVdID0gcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbi5zcGxpdChcIkBcIilcbiAgICAgIHJldHVybiBmaW5kUGFja2FnZVJlbGVhc2VJZChcbiAgICAgICAge1xuICAgICAgICAgIHBhY2thZ2VfbmFtZTogcGFja2FnZU5hbWUhLFxuICAgICAgICAgIHVzZV9sYXRlc3RfdmVyc2lvbjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY3R4LFxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gZmluZFBhY2thZ2VSZWxlYXNlSWRGcm9tUGFja2FnZU5hbWVXaXRoVmVyc2lvbihcbiAgICAgIHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24hLFxuICAgICAgY3R4LmRiLFxuICAgIClcbiAgfVxuXG4gIGlmIChcInBhY2thZ2VfcmVsZWFzZV9pZFwiIGluIHBhcmFtcyAmJiBwYXJhbXMucGFja2FnZV9yZWxlYXNlX2lkKSB7XG4gICAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgICAocHI6IFBhY2thZ2VSZWxlYXNlKSA9PlxuICAgICAgICBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhcmFtcy5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgKVxuICAgIGlmICghcGFja2FnZVJlbGVhc2UpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiBwYXJhbXMucGFja2FnZV9yZWxlYXNlX2lkXG4gIH1cblxuICBpZiAoXCJwYWNrYWdlX25hbWVcIiBpbiBwYXJhbXMpIHtcbiAgICBjb25zdCB7IHBhY2thZ2VfbmFtZSwgdXNlX2xhdGVzdF92ZXJzaW9uIH0gPSBwYXJhbXNcblxuICAgIGlmICghdXNlX2xhdGVzdF92ZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VfbGF0ZXN0X3ZlcnNpb24gbXVzdCBiZSB0cnVlXCIpXG4gICAgfVxuXG4gICAgY29uc3QgcGtnID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoXG4gICAgICAocDogUGFja2FnZSkgPT4gcC5uYW1lID09PSBwYWNrYWdlX25hbWUucmVwbGFjZSgvXkAvLCBcIlwiKSxcbiAgICApXG4gICAgaWYgKCFwa2cpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgICAocHI6IFBhY2thZ2VSZWxlYXNlKSA9PiBwci5wYWNrYWdlX2lkID09PSBwa2cucGFja2FnZV9pZCAmJiBwci5pc19sYXRlc3QsXG4gICAgKVxuXG4gICAgaWYgKCFwYWNrYWdlUmVsZWFzZSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gcGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgY29uc3QgZmluZFBhY2thZ2VSZWxlYXNlSWRGcm9tUGFja2FnZU5hbWVXaXRoVmVyc2lvbiA9IChcbiAgcGFja2FnZU5hbWVXaXRoVmVyc2lvbjogc3RyaW5nLFxuICBkYjogYW55LFxuKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGlmICghcGFja2FnZU5hbWVXaXRoVmVyc2lvbikgcmV0dXJuIG51bGxcblxuICBjb25zdCBbcGFja2FnZU5hbWUsIHZlcnNpb25dID0gcGFja2FnZU5hbWVXaXRoVmVyc2lvblxuICAgIC5yZXBsYWNlKC9eQC8sIFwiXCIpXG4gICAgLnNwbGl0KFwiQFwiKVxuXG4gIGNvbnN0IHBrZyA9IGRiLnBhY2thZ2VzLmZpbmQoKHA6IFBhY2thZ2UpID0+IHAubmFtZSA9PT0gcGFja2FnZU5hbWUpXG4gIGlmICghcGtnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBwYWNrYWdlUmVsZWFzZVxuXG4gIGlmICghdmVyc2lvbiB8fCB2ZXJzaW9uID09PSBcImxhdGVzdFwiKSB7XG4gICAgcGFja2FnZVJlbGVhc2UgPSBkYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgIChwcjogUGFja2FnZVJlbGVhc2UpID0+IHByLnBhY2thZ2VfaWQgPT09IHBrZy5wYWNrYWdlX2lkICYmIHByLmlzX2xhdGVzdCxcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgcGFja2FnZVJlbGVhc2UgPSBkYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgIChwcjogUGFja2FnZVJlbGVhc2UpID0+XG4gICAgICAgIHByLnBhY2thZ2VfaWQgPT09IHBrZy5wYWNrYWdlX2lkICYmIHByLnZlcnNpb24gPT09IHZlcnNpb24sXG4gICAgKVxuICB9XG5cbiAgaWYgKCFwYWNrYWdlUmVsZWFzZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gcGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkXG59XG4iLCAiaW1wb3J0ICogYXMgenQgZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgZmluZFBhY2thZ2VSZWxlYXNlSWQgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3BhY2thZ2VfcmVsZWFzZS9maW5kLXBhY2thZ2UtcmVsZWFzZS1pZFwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuY29uc3Qgcm91dGVTcGVjID0ge1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIGZpbGVfcGF0aDogei5zdHJpbmcoKSxcbiAgICAgIGlzX3JlbGVhc2VfdGFyYmFsbDogei5ib29sZWFuKCkub3B0aW9uYWwoKS5kZWZhdWx0KGZhbHNlKSxcbiAgICAgIGNvbnRlbnRfbWltZXR5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRlbnRfdGV4dDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgY29udGVudF9iYXNlNjQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgbnBtX3BhY2tfb3V0cHV0OiB6LmFueSgpLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAucmVmaW5lKCh2KSA9PiB7XG4gICAgICBpZiAodi5wYWNrYWdlX3JlbGVhc2VfaWQpIHJldHVybiB0cnVlXG4gICAgICBpZiAodi5wYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uKSByZXR1cm4gdHJ1ZVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSwgXCJNdXN0IHNwZWNpZnkgZWl0aGVyIHBhY2thZ2VfcmVsZWFzZV9pZCBvciBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uXCIpXG4gICAgLnJlZmluZSgodikgPT4ge1xuICAgICAgaWYgKHYucGFja2FnZV9yZWxlYXNlX2lkICYmIHYucGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbikgcmV0dXJuIGZhbHNlXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sIFwiQ2Fubm90IHNwZWNpZnkgYm90aCBwYWNrYWdlX3JlbGVhc2VfaWQgYW5kIHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb25cIilcbiAgICAucmVmaW5lKCh2KSA9PiB7XG4gICAgICBpZiAodi5jb250ZW50X2Jhc2U2NCAmJiB2LmNvbnRlbnRfdGV4dCkgcmV0dXJuIGZhbHNlXG4gICAgICBpZiAoIXYuY29udGVudF9iYXNlNjQgJiYgdi5jb250ZW50X3RleHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sIFwiRWl0aGVyIGNvbnRlbnRfYmFzZTY0IG9yIGNvbnRlbnRfdGV4dCBpcyByZXF1aXJlZFwiKSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICAgIHBhY2thZ2VfZmlsZTogenQucGFja2FnZUZpbGVTY2hlbWEsXG4gIH0pLFxufSBhcyBjb25zdFxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHJvdXRlU3BlYykoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmaWxlX3BhdGgsXG4gICAgY29udGVudF9taW1ldHlwZTogcHJvdmlkZWRDb250ZW50TWltZXR5cGUsXG4gICAgY29udGVudF9iYXNlNjQsXG4gICAgY29udGVudF90ZXh0LFxuICAgIGlzX3JlbGVhc2VfdGFyYmFsbCxcbiAgICBucG1fcGFja19vdXRwdXQsXG4gIH0gPSByZXEuanNvbkJvZHlcblxuICBpZiAoaXNfcmVsZWFzZV90YXJiYWxsICYmICFucG1fcGFja19vdXRwdXQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJtaXNzaW5nX29wdGlvbnNcIixcbiAgICAgIG1lc3NhZ2U6IFwibnBtX3BhY2tfb3V0cHV0IGlzIHJlcXVpcmVkIGZvciByZWxlYXNlIHRhcmJhbGxzXCIsXG4gICAgfSlcbiAgfVxuXG4gIGlmICghaXNfcmVsZWFzZV90YXJiYWxsICYmIG5wbV9wYWNrX291dHB1dCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludmFsaWRfb3B0aW9uc1wiLFxuICAgICAgbWVzc2FnZTogXCJucG1fcGFja19vdXRwdXQgaXMgb25seSB2YWxpZCBmb3IgcmVsZWFzZSB0YXJiYWxsc1wiLFxuICAgIH0pXG4gIH1cblxuICBsZXQgcGFja2FnZVJlbGVhc2VJZCA9IHJlcS5qc29uQm9keS5wYWNrYWdlX3JlbGVhc2VfaWRcblxuICBpZiAoIXBhY2thZ2VSZWxlYXNlSWQgJiYgcmVxLmpzb25Cb2R5LnBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24pIHtcbiAgICBjb25zdCBmb3VuZFBhY2thZ2VSZWxlYXNlSWQgPSBhd2FpdCBmaW5kUGFja2FnZVJlbGVhc2VJZChcbiAgICAgIHsgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbjogcmVxLmpzb25Cb2R5LnBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24gfSxcbiAgICAgIGN0eCxcbiAgICApXG4gICAgaWYgKGZvdW5kUGFja2FnZVJlbGVhc2VJZCkge1xuICAgICAgcGFja2FnZVJlbGVhc2VJZCA9IGZvdW5kUGFja2FnZVJlbGVhc2VJZFxuICAgIH1cbiAgfVxuXG4gIGlmICghcGFja2FnZVJlbGVhc2VJZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBWZXJpZnkgdGhlIHBhY2thZ2UgcmVsZWFzZSBleGlzdHNcbiAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgKHByKSA9PiBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlSWQsXG4gIClcblxuICBpZiAoIXBhY2thZ2VSZWxlYXNlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIHJlbGVhc2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIEdldCB0aGUgcGFja2FnZSB0byBjaGVjayBwZXJtaXNzaW9uc1xuICBjb25zdCBleGlzdGluZ1BhY2thZ2UgPSBjdHguZGIucGFja2FnZXMuZmluZChcbiAgICAocCkgPT4gcC5wYWNrYWdlX2lkID09PSBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX2lkLFxuICApXG5cbiAgaWYgKCFleGlzdGluZ1BhY2thZ2UpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDaGVjayBpZiB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZS91cGRhdGUgdGhlIGZpbGVcbiAgaWYgKGV4aXN0aW5nUGFja2FnZS5jcmVhdG9yX2FjY291bnRfaWQgIT09IGN0eC5hdXRoLmFjY291bnRfaWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMywge1xuICAgICAgZXJyb3JfY29kZTogXCJmb3JiaWRkZW5cIixcbiAgICAgIG1lc3NhZ2U6IFwiWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBtb2RpZnkgZmlsZXMgaW4gdGhpcyBwYWNrYWdlXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGZpbGUgZXhpc3RzXG4gIGNvbnN0IGV4aXNpdGluZ0ZpbGUgPSBjdHguZGIucGFja2FnZUZpbGVzLmZpbmQoXG4gICAgKHBmKSA9PlxuICAgICAgcGYucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZUlkICYmIHBmLmZpbGVfcGF0aCA9PT0gZmlsZV9wYXRoLFxuICApXG5cbiAgLy8gRGV0ZXJtaW5lIGNvbnRlbnQgbWltZXR5cGVcbiAgY29uc3QgY29udGVudE1pbWV0eXBlID1cbiAgICBwcm92aWRlZENvbnRlbnRNaW1ldHlwZSB8fFxuICAgIChmaWxlX3BhdGguZW5kc1dpdGgoXCIudHNcIikgfHwgZmlsZV9wYXRoLmVuZHNXaXRoKFwiLnRzeFwiKVxuICAgICAgPyBcInRleHQvdHlwZXNjcmlwdFwiXG4gICAgICA6IG51bGwpIHx8XG4gICAgKGZpbGVfcGF0aC5lbmRzV2l0aChcIi5qc1wiKSA/IFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiIDogbnVsbCkgfHxcbiAgICAoZmlsZV9wYXRoLmVuZHNXaXRoKFwiLmpzb25cIikgPyBcImFwcGxpY2F0aW9uL2pzb25cIiA6IG51bGwpIHx8XG4gICAgKGZpbGVfcGF0aC5lbmRzV2l0aChcIi5tZFwiKSA/IFwidGV4dC9tYXJrZG93blwiIDogbnVsbCkgfHxcbiAgICAoZmlsZV9wYXRoLmVuZHNXaXRoKFwiLmh0bWxcIikgPyBcInRleHQvaHRtbFwiIDogbnVsbCkgfHxcbiAgICAoZmlsZV9wYXRoLmVuZHNXaXRoKFwiLmNzc1wiKSA/IFwidGV4dC9jc3NcIiA6IG51bGwpIHx8XG4gICAgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIlxuXG4gIGlmIChleGlzaXRpbmdGaWxlKSB7XG4gICAgY29uc3QgcGFja2FnZV9maWxlID0gY3R4LmRiLnVwZGF0ZVBhY2thZ2VGaWxlKFxuICAgICAgZXhpc2l0aW5nRmlsZS5wYWNrYWdlX2ZpbGVfaWQsXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnRfdGV4dDpcbiAgICAgICAgICBjb250ZW50X3RleHQgPz9cbiAgICAgICAgICAoY29udGVudF9iYXNlNjRcbiAgICAgICAgICAgID8gQnVmZmVyLmZyb20oY29udGVudF9iYXNlNjQsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKClcbiAgICAgICAgICAgIDogbnVsbCksXG4gICAgICAgIGNvbnRlbnRfbWltZXR5cGU6IGNvbnRlbnRNaW1ldHlwZSxcbiAgICAgICAgaXNfcmVsZWFzZV90YXJiYWxsOiBpc19yZWxlYXNlX3RhcmJhbGwgfHwgZmFsc2UsXG4gICAgICAgIG5wbV9wYWNrX291dHB1dDogbnBtX3BhY2tfb3V0cHV0IHx8IG51bGwsXG4gICAgICB9LFxuICAgIClcblxuICAgIC8vIFVwZGF0ZSBmc19zaGEgZm9yIHRoZSBwYWNrYWdlIHJlbGVhc2VcbiAgICBjdHguZGIudXBkYXRlUGFja2FnZVJlbGVhc2VGc1NoYShwYWNrYWdlUmVsZWFzZUlkKVxuXG4gICAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICAgIG9rOiB0cnVlLFxuICAgICAgcGFja2FnZV9maWxlLFxuICAgIH0pXG4gIH1cblxuICBpZiAoXG4gICAgIXJlcS5qc29uQm9keS5wYWNrYWdlX3JlbGVhc2VfaWQgJiZcbiAgICAhcmVxLmpzb25Cb2R5LnBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb25cbiAgKVxuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm1pc3Npbmdfb3B0aW9uc1wiLFxuICAgICAgbWVzc2FnZTpcbiAgICAgICAgXCJNdXN0IHNwZWNpZnkgZWl0aGVyIHBhY2thZ2VfcmVsZWFzZV9pZCBvciBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uXCIsXG4gICAgfSlcbiAgLy8gQ3JlYXRlIHRoZSBwYWNrYWdlIGZpbGVcbiAgY29uc3QgbmV3UGFja2FnZUZpbGUgPSB7XG4gICAgcGFja2FnZV9maWxlX2lkOiBjcnlwdG8ucmFuZG9tVVVJRCgpLFxuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogcGFja2FnZVJlbGVhc2VJZCxcbiAgICBmaWxlX3BhdGgsXG4gICAgY29udGVudF90ZXh0OlxuICAgICAgY29udGVudF90ZXh0ID8/XG4gICAgICAoY29udGVudF9iYXNlNjRcbiAgICAgICAgPyBCdWZmZXIuZnJvbShjb250ZW50X2Jhc2U2NCwgXCJiYXNlNjRcIikudG9TdHJpbmcoKVxuICAgICAgICA6IG51bGwpLFxuICAgIGNvbnRlbnRfbWltZXR5cGU6IGNvbnRlbnRNaW1ldHlwZSxcbiAgICBpc19kaXJlY3Rvcnk6IGZhbHNlLFxuICAgIGlzX3JlbGVhc2VfdGFyYmFsbDogaXNfcmVsZWFzZV90YXJiYWxsIHx8IGZhbHNlLFxuICAgIG5wbV9wYWNrX291dHB1dDogbnBtX3BhY2tfb3V0cHV0IHx8IG51bGwsXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICB9XG5cbiAgLy8gQWRkIHRvIHRoZSB0ZXN0IGRhdGFiYXNlXG4gIGN0eC5kYi5hZGRQYWNrYWdlRmlsZShuZXdQYWNrYWdlRmlsZSlcblxuICAvLyBVcGRhdGUgZnNfc2hhIGZvciB0aGUgcGFja2FnZSByZWxlYXNlXG4gIGN0eC5kYi51cGRhdGVQYWNrYWdlUmVsZWFzZUZzU2hhKHBhY2thZ2VSZWxlYXNlSWQpXG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgICBwYWNrYWdlX2ZpbGU6IG5ld1BhY2thZ2VGaWxlLFxuICB9KVxufSlcbiIsICJpbXBvcnQgKiBhcyB6dCBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyBmaW5kUGFja2FnZVJlbGVhc2VJZCB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcGFja2FnZV9yZWxlYXNlL2ZpbmQtcGFja2FnZS1yZWxlYXNlLWlkXCJcbmltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5jb25zdCByb3V0ZVNwZWMgPSB7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwibm9uZVwiLFxuICBqc29uQm9keTogelxuICAgIC5vYmplY3Qoe1xuICAgICAgZmlsZV9wYXRoOiB6LnN0cmluZygpLFxuICAgICAgaXNfcmVsZWFzZV90YXJiYWxsOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlZmF1bHQoZmFsc2UpLFxuICAgICAgY29udGVudF9taW1ldHlwZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgY29udGVudF90ZXh0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBjb250ZW50X2Jhc2U2NDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgcGFja2FnZV9yZWxlYXNlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBucG1fcGFja19vdXRwdXQ6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgICB9KVxuICAgIC5yZWZpbmUoKHYpID0+IHtcbiAgICAgIGlmICh2LnBhY2thZ2VfcmVsZWFzZV9pZCkgcmV0dXJuIHRydWVcbiAgICAgIGlmICh2LnBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24pIHJldHVybiB0cnVlXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LCBcIk11c3Qgc3BlY2lmeSBlaXRoZXIgcGFja2FnZV9yZWxlYXNlX2lkIG9yIHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb25cIilcbiAgICAucmVmaW5lKCh2KSA9PiB7XG4gICAgICBpZiAodi5wYWNrYWdlX3JlbGVhc2VfaWQgJiYgdi5wYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uKSByZXR1cm4gZmFsc2VcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSwgXCJDYW5ub3Qgc3BlY2lmeSBib3RoIHBhY2thZ2VfcmVsZWFzZV9pZCBhbmQgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvblwiKVxuICAgIC5yZWZpbmUoKHYpID0+IHtcbiAgICAgIGlmICh2LmNvbnRlbnRfYmFzZTY0ICYmIHYuY29udGVudF90ZXh0KSByZXR1cm4gZmFsc2VcbiAgICAgIGlmICghdi5jb250ZW50X2Jhc2U2NCAmJiAhdi5jb250ZW50X3RleHQpIHJldHVybiBmYWxzZVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LCBcIkVpdGhlciBjb250ZW50X2Jhc2U2NCBvciBjb250ZW50X3RleHQgaXMgcmVxdWlyZWRcIiksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgICBwYWNrYWdlX2ZpbGU6IHp0LnBhY2thZ2VGaWxlU2NoZW1hLFxuICB9KSxcbn0gYXMgY29uc3RcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyhyb3V0ZVNwZWMpKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7XG4gICAgZmlsZV9wYXRoLFxuICAgIGNvbnRlbnRfbWltZXR5cGU6IHByb3ZpZGVkQ29udGVudE1pbWV0eXBlLFxuICAgIGNvbnRlbnRfYmFzZTY0LFxuICAgIGNvbnRlbnRfdGV4dCxcbiAgICBpc19yZWxlYXNlX3RhcmJhbGwsXG4gICAgbnBtX3BhY2tfb3V0cHV0LFxuICB9ID0gcmVxLmpzb25Cb2R5XG5cbiAgaWYgKGlzX3JlbGVhc2VfdGFyYmFsbCAmJiAhbnBtX3BhY2tfb3V0cHV0KSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwibWlzc2luZ19vcHRpb25zXCIsXG4gICAgICBtZXNzYWdlOiBcIm5wbV9wYWNrX291dHB1dCBpcyByZXF1aXJlZCBmb3IgcmVsZWFzZSB0YXJiYWxsc1wiLFxuICAgIH0pXG4gIH1cblxuICBpZiAoIWlzX3JlbGVhc2VfdGFyYmFsbCAmJiBucG1fcGFja19vdXRwdXQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJpbnZhbGlkX29wdGlvbnNcIixcbiAgICAgIG1lc3NhZ2U6IFwibnBtX3BhY2tfb3V0cHV0IGlzIG9ubHkgdmFsaWQgZm9yIHJlbGVhc2UgdGFyYmFsbHNcIixcbiAgICB9KVxuICB9XG5cbiAgbGV0IHBhY2thZ2VSZWxlYXNlSWQgPSByZXEuanNvbkJvZHkucGFja2FnZV9yZWxlYXNlX2lkXG5cbiAgaWYgKCFwYWNrYWdlUmVsZWFzZUlkICYmIHJlcS5qc29uQm9keS5wYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uKSB7XG4gICAgY29uc3QgZm91bmRQYWNrYWdlUmVsZWFzZUlkID0gYXdhaXQgZmluZFBhY2thZ2VSZWxlYXNlSWQoXG4gICAgICByZXEuanNvbkJvZHkucGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbixcbiAgICAgIGN0eCxcbiAgICApXG4gICAgaWYgKGZvdW5kUGFja2FnZVJlbGVhc2VJZCkge1xuICAgICAgcGFja2FnZVJlbGVhc2VJZCA9IGZvdW5kUGFja2FnZVJlbGVhc2VJZFxuICAgIH1cbiAgfVxuXG4gIGlmICghcGFja2FnZVJlbGVhc2VJZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBWZXJpZnkgdGhlIHBhY2thZ2UgcmVsZWFzZSBleGlzdHNcbiAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgKHByKSA9PiBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlSWQsXG4gIClcblxuICBpZiAoIXBhY2thZ2VSZWxlYXNlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIHJlbGVhc2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIERldGVybWluZSBjb250ZW50IG1pbWV0eXBlXG4gIGNvbnN0IGNvbnRlbnRNaW1ldHlwZSA9XG4gICAgcHJvdmlkZWRDb250ZW50TWltZXR5cGUgfHxcbiAgICAoZmlsZV9wYXRoLmVuZHNXaXRoKFwiLnRzXCIpIHx8IGZpbGVfcGF0aC5lbmRzV2l0aChcIi50c3hcIilcbiAgICAgID8gXCJ0ZXh0L3R5cGVzY3JpcHRcIlxuICAgICAgOiBudWxsKSB8fFxuICAgIChmaWxlX3BhdGguZW5kc1dpdGgoXCIuanNcIikgPyBcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiA6IG51bGwpIHx8XG4gICAgKGZpbGVfcGF0aC5lbmRzV2l0aChcIi5qc29uXCIpID8gXCJhcHBsaWNhdGlvbi9qc29uXCIgOiBudWxsKSB8fFxuICAgIChmaWxlX3BhdGguZW5kc1dpdGgoXCIubWRcIikgPyBcInRleHQvbWFya2Rvd25cIiA6IG51bGwpIHx8XG4gICAgKGZpbGVfcGF0aC5lbmRzV2l0aChcIi5odG1sXCIpID8gXCJ0ZXh0L2h0bWxcIiA6IG51bGwpIHx8XG4gICAgKGZpbGVfcGF0aC5lbmRzV2l0aChcIi5jc3NcIikgPyBcInRleHQvY3NzXCIgOiBudWxsKSB8fFxuICAgIFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCJcblxuICAvLyBDcmVhdGUgdGhlIHBhY2thZ2UgZmlsZVxuICBjb25zdCBuZXdQYWNrYWdlRmlsZSA9IHtcbiAgICBwYWNrYWdlX2ZpbGVfaWQ6IGNyeXB0by5yYW5kb21VVUlEKCksXG4gICAgcGFja2FnZV9yZWxlYXNlX2lkOiBwYWNrYWdlUmVsZWFzZUlkLFxuICAgIGZpbGVfcGF0aCxcbiAgICBjb250ZW50X3RleHQ6XG4gICAgICBjb250ZW50X3RleHQgfHxcbiAgICAgIChjb250ZW50X2Jhc2U2NFxuICAgICAgICA/IEJ1ZmZlci5mcm9tKGNvbnRlbnRfYmFzZTY0LCBcImJhc2U2NFwiKS50b1N0cmluZygpXG4gICAgICAgIDogbnVsbCksXG4gICAgY29udGVudF9taW1ldHlwZTogY29udGVudE1pbWV0eXBlLFxuICAgIGlzX2RpcmVjdG9yeTogZmFsc2UsXG4gICAgaXNfcmVsZWFzZV90YXJiYWxsOiBpc19yZWxlYXNlX3RhcmJhbGwgfHwgZmFsc2UsXG4gICAgbnBtX3BhY2tfb3V0cHV0OiBucG1fcGFja19vdXRwdXQgfHwgbnVsbCxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIH1cblxuICAvLyBBZGQgdG8gdGhlIHRlc3QgZGF0YWJhc2VcbiAgY3R4LmRiLmFkZFBhY2thZ2VGaWxlKG5ld1BhY2thZ2VGaWxlKVxuXG4gIC8vIFVwZGF0ZSBmc19zaGEgZm9yIHRoZSBwYWNrYWdlIHJlbGVhc2VcbiAgY3R4LmRiLnVwZGF0ZVBhY2thZ2VSZWxlYXNlRnNTaGEocGFja2FnZVJlbGVhc2VJZClcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICAgIHBhY2thZ2VfZmlsZTogbmV3UGFja2FnZUZpbGUsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBmaW5kUGFja2FnZVJlbGVhc2VJZCB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcGFja2FnZV9yZWxlYXNlL2ZpbmQtcGFja2FnZS1yZWxlYXNlLWlkXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogelxuICAgIC5vYmplY3Qoe1xuICAgICAgcGFja2FnZV9yZWxlYXNlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBmaWxlX3BhdGg6IHouc3RyaW5nKCksXG4gICAgfSlcbiAgICAucmVmaW5lKCh2KSA9PiB7XG4gICAgICBpZiAodi5wYWNrYWdlX3JlbGVhc2VfaWQpIHJldHVybiB0cnVlXG4gICAgICBpZiAodi5wYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uKSByZXR1cm4gdHJ1ZVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSwgXCJNdXN0IHNwZWNpZnkgZWl0aGVyIHBhY2thZ2VfcmVsZWFzZV9pZCBvciBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uXCIpXG4gICAgLnJlZmluZSgodikgPT4ge1xuICAgICAgaWYgKHYucGFja2FnZV9yZWxlYXNlX2lkICYmIHYucGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbikgcmV0dXJuIGZhbHNlXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sIFwiQ2Fubm90IHNwZWNpZnkgYm90aCBwYWNrYWdlX3JlbGVhc2VfaWQgYW5kIHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb25cIiksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBmaWxlX3BhdGggfSA9IHJlcS5qc29uQm9keVxuXG4gIGxldCBwYWNrYWdlUmVsZWFzZUlkID0gcmVxLmpzb25Cb2R5LnBhY2thZ2VfcmVsZWFzZV9pZFxuXG4gIGlmICghcGFja2FnZVJlbGVhc2VJZCAmJiByZXEuanNvbkJvZHkucGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbikge1xuICAgIGNvbnN0IGZvdW5kUGFja2FnZVJlbGVhc2VJZCA9IGF3YWl0IGZpbmRQYWNrYWdlUmVsZWFzZUlkKFxuICAgICAgcmVxLmpzb25Cb2R5LnBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24sXG4gICAgICBjdHgsXG4gICAgKVxuICAgIGlmIChmb3VuZFBhY2thZ2VSZWxlYXNlSWQpIHtcbiAgICAgIHBhY2thZ2VSZWxlYXNlSWQgPSBmb3VuZFBhY2thZ2VSZWxlYXNlSWRcbiAgICB9XG4gIH1cblxuICBpZiAoIXBhY2thZ2VSZWxlYXNlSWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX3JlbGVhc2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlBhY2thZ2UgcmVsZWFzZSBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gR2V0IHRoZSBwYWNrYWdlIHJlbGVhc2UgdG8gY2hlY2sgcGVybWlzc2lvbnNcbiAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgKHByKSA9PiBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlSWQsXG4gIClcblxuICBpZiAoIXBhY2thZ2VSZWxlYXNlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIHJlbGVhc2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIEdldCB0aGUgcGFja2FnZSB0byBjaGVjayBwZXJtaXNzaW9uc1xuICBjb25zdCBleGlzdGluZ3BhY2thZ2UgPSBjdHguZGIucGFja2FnZXMuZmluZChcbiAgICAocCkgPT4gcC5wYWNrYWdlX2lkID09PSBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX2lkLFxuICApXG5cbiAgaWYgKCFleGlzdGluZ3BhY2thZ2UpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDaGVjayBpZiB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSB0aGUgZmlsZVxuICBpZiAoZXhpc3RpbmdwYWNrYWdlLmNyZWF0b3JfYWNjb3VudF9pZCAhPT0gY3R4LmF1dGguYWNjb3VudF9pZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImZvcmJpZGRlblwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBmaWxlcyBpbiB0aGlzIHBhY2thZ2VcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gRmluZCB0aGUgZmlsZVxuICBjb25zdCBwYWNrYWdlRmlsZSA9IGN0eC5kYi5wYWNrYWdlRmlsZXMuZmluZChcbiAgICAoZikgPT5cbiAgICAgIGYuZmlsZV9wYXRoID09PSBmaWxlX3BhdGggJiYgZi5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlSWQsXG4gIClcblxuICBpZiAoIXBhY2thZ2VGaWxlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiZmlsZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSBmaWxlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBEZWxldGUgdGhlIGZpbGUgdXNpbmcgZGVsZXRlUGFja2FnZUZpbGUgbWV0aG9kXG4gIGNvbnN0IGRlbGV0ZWQgPSBjdHguZGIuZGVsZXRlUGFja2FnZUZpbGUocGFja2FnZUZpbGUucGFja2FnZV9maWxlX2lkKVxuXG4gIGlmICghZGVsZXRlZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNTAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImZpbGVfZGVsZXRpb25fZmFpbGVkXCIsXG4gICAgICBtZXNzYWdlOiBcIkZhaWxlZCB0byBkZWxldGUgcGFja2FnZSBmaWxlXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIFVwZGF0ZSBmc19zaGEgZm9yIHRoZSBwYWNrYWdlIHJlbGVhc2VcbiAgY3R4LmRiLnVwZGF0ZVBhY2thZ2VSZWxlYXNlRnNTaGEocGFja2FnZVJlbGVhc2VJZClcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyBOb3RGb3VuZEVycm9yIH0gZnJvbSBcIndpbnRlcnNwZWMvbWlkZGxld2FyZVwiXG5pbXBvcnQgKiBhcyBaVCBmcm9tIFwiLi4vZGIvc2NoZW1hXCJcbmltcG9ydCB7IG5vcm1hbGl6ZVByb2plY3RGaWxlUGF0aCB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS91dGlscy9ub3JtYWxpemVQcm9qZWN0RmlsZVBhdGhcIlxuZXhwb3J0IGNvbnN0IGdldFBhY2thZ2VGaWxlSWRGcm9tRmlsZURlc2NyaXB0b3IgPSBhc3luYyAoXG4gIGRlc2NyaXB0b3I6XG4gICAgfCB7IHBhY2thZ2VfZmlsZV9pZDogc3RyaW5nIH1cbiAgICB8IHsgcGFja2FnZV9yZWxlYXNlX2lkOiBzdHJpbmc7IGZpbGVfcGF0aDogc3RyaW5nIH1cbiAgICB8IHsgcGFja2FnZV9pZDogc3RyaW5nOyB2ZXJzaW9uPzogc3RyaW5nOyBmaWxlX3BhdGg6IHN0cmluZyB9XG4gICAgfCB7IHBhY2thZ2VfbmFtZTogc3RyaW5nOyB2ZXJzaW9uPzogc3RyaW5nOyBmaWxlX3BhdGg6IHN0cmluZyB9XG4gICAgfCB7IHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb246IHN0cmluZzsgZmlsZV9wYXRoOiBzdHJpbmcgfSxcbiAgY3R4OiB7IGRiOiBhbnkgfSxcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGlmIChcInBhY2thZ2VfZmlsZV9pZFwiIGluIGRlc2NyaXB0b3IpIHtcbiAgICBjb25zdCBwYWNrYWdlRmlsZSA9IGN0eC5kYi5wYWNrYWdlRmlsZXMuZmluZChcbiAgICAgIChwZjogWlQuUGFja2FnZUZpbGUpID0+IHBmLnBhY2thZ2VfZmlsZV9pZCA9PT0gZGVzY3JpcHRvci5wYWNrYWdlX2ZpbGVfaWQsXG4gICAgKVxuXG4gICAgaWYgKCFwYWNrYWdlRmlsZSkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXCJQYWNrYWdlIGZpbGUgbm90IGZvdW5kXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc2NyaXB0b3IucGFja2FnZV9maWxlX2lkXG4gIH1cblxuICBpZiAoXCJwYWNrYWdlX3JlbGVhc2VfaWRcIiBpbiBkZXNjcmlwdG9yKSB7XG4gICAgY29uc3QgeyBwYWNrYWdlX3JlbGVhc2VfaWQsIGZpbGVfcGF0aCB9ID0gZGVzY3JpcHRvclxuICAgIGNvbnN0IHBhY2thZ2VGaWxlID0gY3R4LmRiLnBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgKHBmOiBaVC5QYWNrYWdlRmlsZSkgPT5cbiAgICAgICAgcGYucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlX3JlbGVhc2VfaWQgJiZcbiAgICAgICAgbm9ybWFsaXplUHJvamVjdEZpbGVQYXRoKHBmLmZpbGVfcGF0aCkgPT09XG4gICAgICAgICAgbm9ybWFsaXplUHJvamVjdEZpbGVQYXRoKGZpbGVfcGF0aCksXG4gICAgKVxuXG4gICAgaWYgKCFwYWNrYWdlRmlsZSkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXCJQYWNrYWdlIGZpbGUgbm90IGZvdW5kXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhY2thZ2VGaWxlLnBhY2thZ2VfZmlsZV9pZFxuICB9XG5cbiAgaWYgKFwicGFja2FnZV9pZFwiIGluIGRlc2NyaXB0b3IpIHtcbiAgICBjb25zdCB7IHBhY2thZ2VfaWQsIHZlcnNpb24sIGZpbGVfcGF0aCB9ID0gZGVzY3JpcHRvclxuXG4gICAgLy8gVmVyaWZ5IHBhY2thZ2UgZXhpc3RzXG4gICAgY29uc3QgcGtnID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoXG4gICAgICAocDogWlQuUGFja2FnZSkgPT4gcC5wYWNrYWdlX2lkID09PSBwYWNrYWdlX2lkLFxuICAgIClcbiAgICBpZiAoIXBrZykge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXCJQYWNrYWdlIG5vdCBmb3VuZFwiKVxuICAgIH1cblxuICAgIC8vIEZpbmQgdGhlIHBhY2thZ2UgcmVsZWFzZVxuICAgIGxldCBwYWNrYWdlUmVsZWFzZVxuICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICBwYWNrYWdlUmVsZWFzZSA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgICAgKHByOiBaVC5QYWNrYWdlUmVsZWFzZSkgPT5cbiAgICAgICAgICBwci5wYWNrYWdlX2lkID09PSBwYWNrYWdlX2lkICYmIHByLnZlcnNpb24gPT09IHZlcnNpb24sXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHBhY2thZ2VSZWxlYXNlID0gY3R4LmRiLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgICAgICAocHI6IFpULlBhY2thZ2VSZWxlYXNlKSA9PiBwci5wYWNrYWdlX2lkID09PSBwYWNrYWdlX2lkICYmIHByLmlzX2xhdGVzdCxcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAoIXBhY2thZ2VSZWxlYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihcIlBhY2thZ2UgcmVsZWFzZSBub3QgZm91bmRcIilcbiAgICB9XG5cbiAgICAvLyBGaW5kIHRoZSBmaWxlXG4gICAgY29uc3QgcGFja2FnZUZpbGUgPSBjdHguZGIucGFja2FnZUZpbGVzLmZpbmQoXG4gICAgICAocGY6IFpULlBhY2thZ2VGaWxlKSA9PlxuICAgICAgICBwZi5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCAmJlxuICAgICAgICBub3JtYWxpemVQcm9qZWN0RmlsZVBhdGgocGYuZmlsZV9wYXRoKSA9PT1cbiAgICAgICAgICBub3JtYWxpemVQcm9qZWN0RmlsZVBhdGgoZmlsZV9wYXRoKSxcbiAgICApXG5cbiAgICBpZiAoIXBhY2thZ2VGaWxlKSB7XG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihcIlBhY2thZ2UgZmlsZSBub3QgZm91bmRcIilcbiAgICB9XG5cbiAgICByZXR1cm4gcGFja2FnZUZpbGUucGFja2FnZV9maWxlX2lkXG4gIH1cblxuICBpZiAoXCJwYWNrYWdlX25hbWVcIiBpbiBkZXNjcmlwdG9yKSB7XG4gICAgY29uc3QgeyBwYWNrYWdlX25hbWUsIHZlcnNpb24sIGZpbGVfcGF0aCB9ID0gZGVzY3JpcHRvclxuXG4gICAgLy8gRmluZCB0aGUgcGFja2FnZSBmaXJzdFxuICAgIGNvbnN0IHBrZyA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKChwOiBaVC5QYWNrYWdlKSA9PiBwLm5hbWUgPT09IHBhY2thZ2VfbmFtZSlcbiAgICBpZiAoIXBrZykge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYFBhY2thZ2Ugbm90IGZvdW5kOiAke3BhY2thZ2VfbmFtZX1gKVxuICAgIH1cblxuICAgIC8vIEZpbmQgdGhlIHBhY2thZ2UgcmVsZWFzZVxuICAgIGxldCBwYWNrYWdlUmVsZWFzZVxuICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICBwYWNrYWdlUmVsZWFzZSA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgICAgKHByOiBaVC5QYWNrYWdlUmVsZWFzZSkgPT5cbiAgICAgICAgICBwci5wYWNrYWdlX2lkID09PSBwa2cucGFja2FnZV9pZCAmJiBwci52ZXJzaW9uID09PSB2ZXJzaW9uLFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBwYWNrYWdlUmVsZWFzZSA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgICAgKHByOiBaVC5QYWNrYWdlUmVsZWFzZSkgPT5cbiAgICAgICAgICBwci5wYWNrYWdlX2lkID09PSBwa2cucGFja2FnZV9pZCAmJiBwci5pc19sYXRlc3QsXG4gICAgICApXG4gICAgfVxuXG4gICAgaWYgKCFwYWNrYWdlUmVsZWFzZSkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXCJQYWNrYWdlIHJlbGVhc2Ugbm90IGZvdW5kXCIpXG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgZmlsZVxuICAgIGNvbnN0IHBhY2thZ2VGaWxlID0gY3R4LmRiLnBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgKHBmOiBaVC5QYWNrYWdlRmlsZSkgPT5cbiAgICAgICAgcGYucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQgJiZcbiAgICAgICAgbm9ybWFsaXplUHJvamVjdEZpbGVQYXRoKHBmLmZpbGVfcGF0aCkgPT09XG4gICAgICAgICAgbm9ybWFsaXplUHJvamVjdEZpbGVQYXRoKGZpbGVfcGF0aCksXG4gICAgKVxuXG4gICAgaWYgKCFwYWNrYWdlRmlsZSkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXCJQYWNrYWdlIGZpbGUgbm90IGZvdW5kXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhY2thZ2VGaWxlLnBhY2thZ2VfZmlsZV9pZFxuICB9XG5cbiAgaWYgKFwicGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvblwiIGluIGRlc2NyaXB0b3IpIHtcbiAgICBjb25zdCB7IHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24sIGZpbGVfcGF0aCB9ID0gZGVzY3JpcHRvclxuICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbi5zcGxpdChcIkBcIilbMF1cbiAgICBjb25zdCB2ZXJzaW9uID0gcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbi5zcGxpdChcIkBcIilbMV1cblxuICAgIC8vIEZpbmQgdGhlIHBhY2thZ2VcbiAgICBjb25zdCBwa2cgPSBjdHguZGIucGFja2FnZXMuZmluZCgocDogWlQuUGFja2FnZSkgPT4gcC5uYW1lID09PSBwYWNrYWdlTmFtZSlcbiAgICBpZiAoIXBrZykge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYFBhY2thZ2Ugbm90IGZvdW5kOiAke3BhY2thZ2VOYW1lfWApXG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgcGFja2FnZSByZWxlYXNlXG4gICAgbGV0IHBhY2thZ2VSZWxlYXNlXG4gICAgaWYgKCF2ZXJzaW9uIHx8IHZlcnNpb24gPT09IFwibGF0ZXN0XCIpIHtcbiAgICAgIHBhY2thZ2VSZWxlYXNlID0gY3R4LmRiLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgICAgICAocHI6IFpULlBhY2thZ2VSZWxlYXNlKSA9PlxuICAgICAgICAgIHByLnBhY2thZ2VfaWQgPT09IHBrZy5wYWNrYWdlX2lkICYmIHByLmlzX2xhdGVzdCxcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgICAgIChwcjogWlQuUGFja2FnZVJlbGVhc2UpID0+XG4gICAgICAgICAgcHIucGFja2FnZV9pZCA9PT0gcGtnLnBhY2thZ2VfaWQgJiYgcHIudmVyc2lvbiA9PT0gdmVyc2lvbixcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAoIXBhY2thZ2VSZWxlYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihcbiAgICAgICAgYFBhY2thZ2UgcmVsZWFzZSBub3QgZm91bmQgZm9yIHZlcnNpb246ICR7dmVyc2lvbiB8fCBcImxhdGVzdFwifWAsXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgZmlsZVxuICAgIGNvbnN0IHBhY2thZ2VGaWxlID0gY3R4LmRiLnBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgKHBmOiBaVC5QYWNrYWdlRmlsZSkgPT5cbiAgICAgICAgcGYucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQgJiZcbiAgICAgICAgbm9ybWFsaXplUHJvamVjdEZpbGVQYXRoKHBmLmZpbGVfcGF0aCkgPT09XG4gICAgICAgICAgbm9ybWFsaXplUHJvamVjdEZpbGVQYXRoKGZpbGVfcGF0aCksXG4gICAgKVxuXG4gICAgaWYgKCFwYWNrYWdlRmlsZSkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYFBhY2thZ2UgZmlsZSBub3QgZm91bmQ6ICR7ZmlsZV9wYXRofWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhY2thZ2VGaWxlLnBhY2thZ2VfZmlsZV9pZFxuICB9XG5cbiAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXCJJbnZhbGlkIHBhY2thZ2UgZmlsZSBkZXNjcmlwdG9yXCIpXG59XG4iLCAiaW1wb3J0IHsgZ2V0UGFja2FnZUZpbGVJZEZyb21GaWxlRGVzY3JpcHRvciB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcGFja2FnZV9maWxlL2dldC1wYWNrYWdlLWZpbGUtaWQtZnJvbS1maWxlLWRlc2NyaXB0b3JcIlxuaW1wb3J0IHsgZmluZFBhY2thZ2VSZWxlYXNlSWQgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3BhY2thZ2VfcmVsZWFzZS9maW5kLXBhY2thZ2UtcmVsZWFzZS1pZFwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuY29uc3Qgcm91dGVTcGVjID0ge1xuICBtZXRob2RzOiBbXCJHRVRcIiwgXCJQT1NUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAgcXVlcnlQYXJhbXM6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIHBhY2thZ2VfZmlsZV9pZDogei5zdHJpbmcoKSxcbiAgICB9KVxuICAgIC5vcihcbiAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbjogei5zdHJpbmcoKSxcbiAgICAgICAgZmlsZV9wYXRoOiB6LnN0cmluZygpLFxuICAgICAgfSksXG4gICAgKSxcbiAganNvblJlc3BvbnNlOiB6LmFueSgpLCAvLyBVc2luZyBhbnkgYmVjYXVzZSB3ZSdyZSByZXR1cm5pbmcgYmluYXJ5IGRhdGFcbn0gYXMgY29uc3RcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyhyb3V0ZVNwZWMpKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBsZXQgcGFja2FnZUZpbGVJZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGNvbnN0IHBhcmFtcyA9IHJlcS5xdWVyeVxuXG4gIGlmIChcInBhY2thZ2VfZmlsZV9pZFwiIGluIHBhcmFtcykge1xuICAgIHBhY2thZ2VGaWxlSWQgPSBwYXJhbXMucGFja2FnZV9maWxlX2lkXG4gIH0gZWxzZSBpZiAoXCJwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uXCIgaW4gcGFyYW1zKSB7XG4gICAgY29uc3QgeyBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uLCBmaWxlX3BhdGggfSA9IHBhcmFtc1xuXG4gICAgY29uc3QgcGFja2FnZVJlbGVhc2VJZCA9IGF3YWl0IGZpbmRQYWNrYWdlUmVsZWFzZUlkKFxuICAgICAgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbixcbiAgICAgIGN0eCxcbiAgICApXG5cbiAgICBpZiAoIXBhY2thZ2VSZWxlYXNlSWQpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwibm90X2ZvdW5kXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcGFja2FnZUZpbGVJZCA9IGF3YWl0IGdldFBhY2thZ2VGaWxlSWRGcm9tRmlsZURlc2NyaXB0b3IoXG4gICAgICAgIHtcbiAgICAgICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHBhY2thZ2VSZWxlYXNlSWQsXG4gICAgICAgICAgZmlsZV9wYXRoOiBmaWxlX3BhdGgsXG4gICAgICAgIH0sXG4gICAgICAgIGN0eCxcbiAgICAgIClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgICAgZXJyb3JfY29kZTogXCJub3RfZm91bmRcIixcbiAgICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIGZpbGUgbm90IGZvdW5kXCIsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGlmICghcGFja2FnZUZpbGVJZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImJhZF9yZXF1ZXN0XCIsXG4gICAgICBtZXNzYWdlOiBcIkNvdWxkIG5vdCBkZXRlcm1pbmUgcGFja2FnZV9maWxlX2lkXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VGaWxlID0gY3R4LmRiLnBhY2thZ2VGaWxlcy5maW5kKFxuICAgIChwZikgPT4gcGYucGFja2FnZV9maWxlX2lkID09PSBwYWNrYWdlRmlsZUlkLFxuICApXG5cbiAgaWYgKCFwYWNrYWdlRmlsZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm5vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIGZpbGUgbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gXCJ0ZXh0L3BsYWluXCJcblxuICBjb25zdCBoZWFkZXJzID0ge1xuICAgIFwiQ29udGVudC1UeXBlXCI6IGNvbnRlbnRUeXBlLFxuICAgIFwiQ29udGVudC1EaXNwb3NpdGlvblwiOiBgYXR0YWNobWVudDsgZmlsZW5hbWU9XCIke3BhY2thZ2VGaWxlLmZpbGVfcGF0aC5zcGxpdChcIi9cIikucG9wKCl9XCJgLFxuICAgIFwiQ2FjaGUtQ29udHJvbFwiOiBcInB1YmxpYywgbWF4LWFnZT04NjQwMCwgc3RhbGUtd2hpbGUtcmV2YWxpZGF0ZT02MDQ4MDBcIixcbiAgICBFeHBpcmVzOiBuZXcgRGF0ZShEYXRlLm5vdygpICsgODY0MDAwMDApLnRvVVRDU3RyaW5nKCksXG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3BvbnNlKHBhY2thZ2VGaWxlLmNvbnRlbnRfdGV4dCwgeyBoZWFkZXJzIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0ICogYXMgWlQgZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgZ2V0UGFja2FnZUZpbGVJZEZyb21GaWxlRGVzY3JpcHRvciB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcGFja2FnZV9maWxlL2dldC1wYWNrYWdlLWZpbGUtaWQtZnJvbS1maWxlLWRlc2NyaXB0b3JcIlxuXG5jb25zdCByb3V0ZVNwZWMgPSB7XG4gIG1ldGhvZHM6IFtcIkdFVFwiLCBcIlBPU1RcIl0sXG4gIGF1dGg6IFwibm9uZVwiLFxuICBxdWVyeVBhcmFtczogelxuICAgIC5vYmplY3Qoe1xuICAgICAgcGFja2FnZV9maWxlX2lkOiB6LnN0cmluZygpLFxuICAgIH0pXG4gICAgLm9yKFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHouc3RyaW5nKCksXG4gICAgICAgIGZpbGVfcGF0aDogei5zdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgIClcbiAgICAub3IoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHBhY2thZ2VfaWQ6IHouc3RyaW5nKCksXG4gICAgICAgIHZlcnNpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgICAgZmlsZV9wYXRoOiB6LnN0cmluZygpLFxuICAgICAgfSksXG4gICAgKVxuICAgIC5vcihcbiAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgcGFja2FnZV9uYW1lOiB6LnN0cmluZygpLFxuICAgICAgICB2ZXJzaW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAgIGZpbGVfcGF0aDogei5zdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgIClcbiAgICAub3IoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb246IHouc3RyaW5nKCksXG4gICAgICAgIGZpbGVfcGF0aDogei5zdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgICksXG4gIGpzb25SZXNwb25zZTogelxuICAgIC5vYmplY3Qoe1xuICAgICAgb2s6IHouYm9vbGVhbigpLFxuICAgICAgcGFja2FnZV9maWxlOiBaVC5wYWNrYWdlRmlsZVNjaGVtYS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm9yKFpULmVycm9yUmVzcG9uc2VTY2hlbWEpLFxufSBhcyBjb25zdFxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHJvdXRlU3BlYykoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHBhY2thZ2VGaWxlSWQgPSBhd2FpdCBnZXRQYWNrYWdlRmlsZUlkRnJvbUZpbGVEZXNjcmlwdG9yKHJlcS5xdWVyeSwgY3R4KVxuXG4gIGNvbnN0IHBhY2thZ2VGaWxlID0gY3R4LmRiLnBhY2thZ2VGaWxlcy5maW5kKFxuICAgIChwZjogWlQuUGFja2FnZUZpbGUpID0+IHBmLnBhY2thZ2VfZmlsZV9pZCA9PT0gcGFja2FnZUZpbGVJZCxcbiAgKVxuXG4gIGlmICghcGFja2FnZUZpbGUpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX2ZpbGVfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlBhY2thZ2UgZmlsZSBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgICBwYWNrYWdlX2ZpbGU6IHtcbiAgICAgIC4uLnBhY2thZ2VGaWxlLFxuICAgICAgY3JlYXRlZF9hdDogcGFja2FnZUZpbGUuY3JlYXRlZF9hdC50b1N0cmluZygpLFxuICAgIH0sXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0ICogYXMgWlQgZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgZmluZFBhY2thZ2VSZWxlYXNlSWQgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3BhY2thZ2VfcmVsZWFzZS9maW5kLXBhY2thZ2UtcmVsZWFzZS1pZFwiXG5cbmNvbnN0IHJvdXRlU3BlYyA9IHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAgcXVlcnlQYXJhbXM6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogei5zdHJpbmcoKSxcbiAgICB9KVxuICAgIC5vcihcbiAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgcGFja2FnZV9uYW1lOiB6LnN0cmluZygpLFxuICAgICAgICB1c2VfbGF0ZXN0X3ZlcnNpb246IHoucHJlcHJvY2VzcyhcbiAgICAgICAgICAodmFsKSA9PiAodmFsID09PSBcInRydWVcIiA/IHRydWUgOiB2YWwpLFxuICAgICAgICAgIHoubGl0ZXJhbCh0cnVlKSxcbiAgICAgICAgKSxcbiAgICAgIH0pLFxuICAgIClcbiAgICAub3IoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb246IHouc3RyaW5nKCksXG4gICAgICB9KSxcbiAgICApLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gICAgcGFja2FnZV9maWxlczogei5hcnJheShaVC5wYWNrYWdlRmlsZVNjaGVtYSksXG4gIH0pLFxufSBhcyBjb25zdFxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHJvdXRlU3BlYykoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHBhY2thZ2VSZWxlYXNlSWQgPSBhd2FpdCBmaW5kUGFja2FnZVJlbGVhc2VJZChyZXEucXVlcnksIGN0eClcblxuICBpZiAoIXBhY2thZ2VSZWxlYXNlSWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX3JlbGVhc2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlBhY2thZ2UgcmVsZWFzZSBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gT21pdCB0aGUgY29udGVudF90ZXh0IGZpZWxkXG4gIGNvbnN0IHBhY2thZ2VGaWxlcyA9IGN0eC5kYi5wYWNrYWdlRmlsZXNcbiAgICAuZmlsdGVyKChmaWxlKSA9PiBmaWxlLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGFja2FnZVJlbGVhc2VJZClcbiAgICAubWFwKCh7IGNvbnRlbnRfdGV4dCwgLi4uZmlsZSB9KSA9PiAoe1xuICAgICAgLi4uZmlsZSxcbiAgICB9KSlcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICAgIHBhY2thZ2VfZmlsZXM6IHBhY2thZ2VGaWxlcyxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0ICogYXMgWlQgZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHR5cGUgeyBEYkNsaWVudCB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvZGItY2xpZW50XCJcblxuZXhwb3J0IGNvbnN0IHB1YmxpY01hcFBhY2thZ2VSZWxlYXNlID0gKFxuICBpbnRlcm5hbF9wYWNrYWdlX3JlbGVhc2U6IFpULlBhY2thZ2VSZWxlYXNlLFxuICBvcHRpb25zOiB7XG4gICAgaW5jbHVkZV9sb2dzPzogYm9vbGVhblxuICAgIGluY2x1ZGVfYWlfcmV2aWV3PzogYm9vbGVhblxuICAgIGRiPzogRGJDbGllbnRcbiAgfSA9IHtcbiAgICBpbmNsdWRlX2xvZ3M6IGZhbHNlLFxuICAgIGluY2x1ZGVfYWlfcmV2aWV3OiBmYWxzZSxcbiAgfSxcbik6IFpULlBhY2thZ2VSZWxlYXNlID0+IHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIC4uLmludGVybmFsX3BhY2thZ2VfcmVsZWFzZSxcbiAgICBjcmVhdGVkX2F0OiBpbnRlcm5hbF9wYWNrYWdlX3JlbGVhc2UuY3JlYXRlZF9hdCxcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfZXJyb3JfbGFzdF91cGRhdGVkX2F0OlxuICAgICAgaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLmNpcmN1aXRfanNvbl9idWlsZF9lcnJvcl9sYXN0X3VwZGF0ZWRfYXQsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2Vycm9yOiBpbnRlcm5hbF9wYWNrYWdlX3JlbGVhc2UuY2lyY3VpdF9qc29uX2J1aWxkX2Vycm9yLFxuICAgIHRyYW5zcGlsYXRpb25fbG9nczogb3B0aW9ucy5pbmNsdWRlX2xvZ3NcbiAgICAgID8gaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLnRyYW5zcGlsYXRpb25fbG9nc1xuICAgICAgOiBbXSxcbiAgICB1c2VyX2NvZGVfYnVpbGRfbG9nczogb3B0aW9ucy5pbmNsdWRlX2xvZ3NcbiAgICAgID8gaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLnVzZXJfY29kZV9idWlsZF9sb2dzXG4gICAgICA6IG51bGwsXG4gICAgdXNlcl9jb2RlX2xvZ19zdHJlYW1fdXJsOiBvcHRpb25zLmluY2x1ZGVfbG9nc1xuICAgICAgPyBpbnRlcm5hbF9wYWNrYWdlX3JlbGVhc2UudXNlcl9jb2RlX2xvZ19zdHJlYW1fdXJsXG4gICAgICA6IG51bGwsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2xvZ3M6IG9wdGlvbnMuaW5jbHVkZV9sb2dzXG4gICAgICA/IGludGVybmFsX3BhY2thZ2VfcmVsZWFzZS5jaXJjdWl0X2pzb25fYnVpbGRfbG9nc1xuICAgICAgOiBbXSxcbiAgICBpbWFnZV9nZW5lcmF0aW9uX2xvZ3M6IG9wdGlvbnMuaW5jbHVkZV9sb2dzXG4gICAgICA/IGludGVybmFsX3BhY2thZ2VfcmVsZWFzZS5pbWFnZV9nZW5lcmF0aW9uX2xvZ3NcbiAgICAgIDogbnVsbCxcbiAgICBpbWFnZV9nZW5lcmF0aW9uX2luX3Byb2dyZXNzOlxuICAgICAgaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLmltYWdlX2dlbmVyYXRpb25faW5fcHJvZ3Jlc3MsXG4gICAgaW1hZ2VfZ2VuZXJhdGlvbl9zdGFydGVkX2F0OlxuICAgICAgaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLmltYWdlX2dlbmVyYXRpb25fc3RhcnRlZF9hdCA/PyBudWxsLFxuICAgIGltYWdlX2dlbmVyYXRpb25fY29tcGxldGVkX2F0OlxuICAgICAgaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLmltYWdlX2dlbmVyYXRpb25fY29tcGxldGVkX2F0ID8/IG51bGwsXG4gICAgaW1hZ2VfZ2VuZXJhdGlvbl9pc19zdGFsZTpcbiAgICAgIGludGVybmFsX3BhY2thZ2VfcmVsZWFzZS5pbWFnZV9nZW5lcmF0aW9uX2lzX3N0YWxlLFxuICAgIGltYWdlX2dlbmVyYXRpb25fZXJyb3I6XG4gICAgICBpbnRlcm5hbF9wYWNrYWdlX3JlbGVhc2UuaW1hZ2VfZ2VuZXJhdGlvbl9lcnJvciA/PyBudWxsLFxuICAgIGltYWdlX2dlbmVyYXRpb25fZXJyb3JfbGFzdF91cGRhdGVkX2F0OlxuICAgICAgaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLmltYWdlX2dlbmVyYXRpb25fZXJyb3JfbGFzdF91cGRhdGVkX2F0ID8/IG51bGwsXG4gICAgaW1hZ2VfZ2VuZXJhdGlvbl9kaXNwbGF5X3N0YXR1czpcbiAgICAgIGludGVybmFsX3BhY2thZ2VfcmVsZWFzZS5pbWFnZV9nZW5lcmF0aW9uX2Rpc3BsYXlfc3RhdHVzLFxuICAgIGlzX3ByX3ByZXZpZXc6IEJvb2xlYW4oaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLmlzX3ByX3ByZXZpZXcpLFxuICAgIGdpdGh1Yl9wcl9udW1iZXI6IGludGVybmFsX3BhY2thZ2VfcmVsZWFzZS5naXRodWJfcHJfbnVtYmVyLFxuICAgIGJyYW5jaF9uYW1lOiBpbnRlcm5hbF9wYWNrYWdlX3JlbGVhc2UuYnJhbmNoX25hbWUsXG4gICAgY29tbWl0X21lc3NhZ2U6IGludGVybmFsX3BhY2thZ2VfcmVsZWFzZS5jb21taXRfbWVzc2FnZSA/PyBudWxsLFxuICAgIGNvbW1pdF9hdXRob3I6IGludGVybmFsX3BhY2thZ2VfcmVsZWFzZS5jb21taXRfYXV0aG9yID8/IG51bGwsXG4gICAgcGNiX3ByZXZpZXdfaW1hZ2VfdXJsOlxuICAgICAgaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLnBjYl9wcmV2aWV3X2ltYWdlX3VybCA/PyBudWxsLFxuICAgIHNjaF9wcmV2aWV3X2ltYWdlX3VybDpcbiAgICAgIGludGVybmFsX3BhY2thZ2VfcmVsZWFzZS5zY2hfcHJldmlld19pbWFnZV91cmwgPz8gbnVsbCxcbiAgICBjYWRfcHJldmlld19pbWFnZV91cmw6XG4gICAgICBpbnRlcm5hbF9wYWNrYWdlX3JlbGVhc2UuY2FkX3ByZXZpZXdfaW1hZ2VfdXJsID8/IG51bGwsXG4gIH1cblxuICBpZiAob3B0aW9ucy5pbmNsdWRlX2FpX3JldmlldyAmJiBvcHRpb25zLmRiKSB7XG4gICAgY29uc3QgcmV2aWV3cyA9IG9wdGlvbnMuZGJcbiAgICAgIC5saXN0QWlSZXZpZXdzKClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChyKSA9PlxuICAgICAgICAgIHIucGFja2FnZV9yZWxlYXNlX2lkID09PSBpbnRlcm5hbF9wYWNrYWdlX3JlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgKVxuICAgICAgLnNvcnQoXG4gICAgICAgIChhLCBiKSA9PlxuICAgICAgICAgIG5ldyBEYXRlKGIuY3JlYXRlZF9hdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYS5jcmVhdGVkX2F0KS5nZXRUaW1lKCksXG4gICAgICApXG5cbiAgICBpZiAocmV2aWV3cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBsYXRlc3QgPSByZXZpZXdzWzBdXG4gICAgICByZXN1bHQuYWlfcmV2aWV3X3RleHQgPSBsYXRlc3QuYWlfcmV2aWV3X3RleHQgPz8gbnVsbFxuICAgICAgcmVzdWx0LmFpX3Jldmlld19zdGFydGVkX2F0ID0gbGF0ZXN0LnN0YXJ0X3Byb2Nlc3NpbmdfYXQgPz8gbnVsbFxuICAgICAgcmVzdWx0LmFpX3Jldmlld19jb21wbGV0ZWRfYXQgPSBsYXRlc3QuZmluaXNoZWRfcHJvY2Vzc2luZ19hdCA/PyBudWxsXG4gICAgICByZXN1bHQuYWlfcmV2aWV3X2Vycm9yID0gbGF0ZXN0LnByb2Nlc3NpbmdfZXJyb3IgPz8gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8vIE9ubHkgaW5jbHVkZSBBSSByZXZpZXcgZmllbGRzIHdoZW4gaW5jbHVkZV9haV9yZXZpZXcgaXMgdHJ1ZVxuICBpZiAoIW9wdGlvbnMuaW5jbHVkZV9haV9yZXZpZXcpIHtcbiAgICBkZWxldGUgcmVzdWx0LmFpX3Jldmlld190ZXh0XG4gICAgZGVsZXRlIHJlc3VsdC5haV9yZXZpZXdfc3RhcnRlZF9hdFxuICAgIGRlbGV0ZSByZXN1bHQuYWlfcmV2aWV3X2NvbXBsZXRlZF9hdFxuICAgIGRlbGV0ZSByZXN1bHQuYWlfcmV2aWV3X2Vycm9yXG4gICAgZGVsZXRlIHJlc3VsdC5haV9yZXZpZXdfbG9nc1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuIiwgImltcG9ydCB7IHBhY2thZ2VSZWxlYXNlU2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHB1YmxpY01hcFBhY2thZ2VSZWxlYXNlIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9wdWJsaWMtbWFwcGluZy9wdWJsaWMtbWFwLXBhY2thZ2UtcmVsZWFzZVwiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBwYWNrYWdlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcGFja2FnZV9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgdmVyc2lvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGlzX2xhdGVzdDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBjb21taXRfc2hhOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICAgIHBhY2thZ2VfcmVsZWFzZTogcGFja2FnZVJlbGVhc2VTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGxldCB7XG4gICAgcGFja2FnZV9pZCxcbiAgICBwYWNrYWdlX25hbWUsXG4gICAgaXNfbGF0ZXN0ID0gdHJ1ZSxcbiAgICB2ZXJzaW9uLFxuICAgIGNvbW1pdF9zaGEsXG4gICAgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbixcbiAgfSA9IHJlcS5qc29uQm9keVxuXG4gIGlmIChwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uICYmICFwYWNrYWdlX2lkKSB7XG4gICAgY29uc3QgW3BhY2thZ2VOYW1lLCBwYXJzZWRWZXJzaW9uXSA9IHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24uc3BsaXQoXCJAXCIpXG4gICAgY29uc3QgcGtnID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gcGFja2FnZU5hbWUpXG5cbiAgICBpZiAoIXBrZykge1xuICAgICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX25vdF9mb3VuZFwiLFxuICAgICAgICBtZXNzYWdlOiBgUGFja2FnZSBub3QgZm91bmQ6ICR7cGFja2FnZU5hbWV9YCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcGFja2FnZV9pZCA9IHBrZy5wYWNrYWdlX2lkXG4gICAgdmVyc2lvbiA9IHBhcnNlZFZlcnNpb25cbiAgfVxuXG4gIGlmICghcGFja2FnZV9pZCAmJiBwYWNrYWdlX25hbWUpIHtcbiAgICBjb25zdCBwa2cgPSBjdHguZGIucGFja2FnZXMuZmluZCgocCkgPT4gcC5uYW1lID09PSBwYWNrYWdlX25hbWUpXG4gICAgaWYgKCFwa2cpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9ub3RfZm91bmRcIixcbiAgICAgICAgbWVzc2FnZTogYFBhY2thZ2Ugbm90IGZvdW5kOiAke3BhY2thZ2VfbmFtZX1gLFxuICAgICAgfSlcbiAgICB9XG4gICAgcGFja2FnZV9pZCA9IHBrZy5wYWNrYWdlX2lkXG4gIH1cblxuICBpZiAoIXBhY2thZ2VfaWQgfHwgIXZlcnNpb24pIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJtaXNzaW5nX29wdGlvbnNcIixcbiAgICAgIG1lc3NhZ2U6IFwicGFja2FnZV9pZCBvciBwYWNrYWdlX25hbWUgYW5kIHZlcnNpb24gYXJlIHJlcXVpcmVkXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHZlcnNpb24gYWxyZWFkeSBleGlzdHNcbiAgY29uc3QgZXhpc3RpbmdSZWxlYXNlID0gY3R4LmRiLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgIChwcikgPT4gcHIucGFja2FnZV9pZCA9PT0gcGFja2FnZV9pZCAmJiBwci52ZXJzaW9uID09PSB2ZXJzaW9uLFxuICApXG5cbiAgaWYgKGV4aXN0aW5nUmVsZWFzZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInZlcnNpb25fYWxyZWFkeV9leGlzdHNcIixcbiAgICAgIG1lc3NhZ2U6IGBWZXJzaW9uICR7dmVyc2lvbn0gYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgcGFja2FnZWAsXG4gICAgfSlcbiAgfVxuXG4gIC8vIFVwZGF0ZSBwcmV2aW91cyBsYXRlc3QgaWYgbmVlZGVkXG4gIGlmIChpc19sYXRlc3QpIHtcbiAgICBjdHguZGIucGFja2FnZVJlbGVhc2VzXG4gICAgICAuZmlsdGVyKChwcikgPT4gcHIucGFja2FnZV9pZCA9PT0gcGFja2FnZV9pZCAmJiBwci5pc19sYXRlc3QpXG4gICAgICAuZm9yRWFjaCgocHIpID0+IChwci5pc19sYXRlc3QgPSBmYWxzZSkpXG4gIH1cblxuICBjb25zdCBuZXdQYWNrYWdlUmVsZWFzZSA9IGN0eC5kYi5hZGRQYWNrYWdlUmVsZWFzZSh7XG4gICAgcGFja2FnZV9pZCxcbiAgICBpc19sYXRlc3QsXG4gICAgdmVyc2lvbixcbiAgICBpc19sb2NrZWQ6IGZhbHNlLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBjb21taXRfc2hhOiBjb21taXRfc2hhID8/IG51bGwsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2Vycm9yOiBudWxsLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9lcnJvcl9sYXN0X3VwZGF0ZWRfYXQ6IG51bGwsXG4gICAgLy8gU2V0dGluZyB0aGUgdHJhbnNwaWxlZCBhcyB0cnVlIG9uIGNyZWF0aW9uXG4gICAgaGFzX3RyYW5zcGlsZWQ6IHRydWUsXG4gICAgdHJhbnNwaWxhdGlvbl9lcnJvcjogbnVsbCxcbiAgfSlcblxuICAvLyBVcGRhdGUgdGhlIHBhY2thZ2UncyBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkIGlmIHRoaXMgaXMgdGhlIGxhdGVzdCByZWxlYXNlXG4gIGlmIChpc19sYXRlc3QpIHtcbiAgICBjdHguZGIudXBkYXRlUGFja2FnZShwYWNrYWdlX2lkLCB7XG4gICAgICBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkOiBuZXdQYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgICBsYXRlc3RfdmVyc2lvbjogdmVyc2lvbixcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgICBwYWNrYWdlX3JlbGVhc2U6IHB1YmxpY01hcFBhY2thZ2VSZWxlYXNlKG5ld1BhY2thZ2VSZWxlYXNlLCB7IGRiOiBjdHguZGIgfSksXG4gIH0pXG59KVxuIiwgImltcG9ydCAqIGFzIHp0IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcbmltcG9ydCB7IHB1YmxpY01hcFBhY2thZ2VSZWxlYXNlIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9wdWJsaWMtbWFwcGluZy9wdWJsaWMtbWFwLXBhY2thZ2UtcmVsZWFzZVwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwibm9uZVwiLFxuICBjb21tb25QYXJhbXM6IHoub2JqZWN0KHtcbiAgICBpbmNsdWRlX2xvZ3M6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVmYXVsdChmYWxzZSksXG4gICAgaW5jbHVkZV9haV9yZXZpZXc6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVmYXVsdChmYWxzZSksXG4gIH0pLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBwYWNrYWdlX25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBwYWNrYWdlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaXNfbGF0ZXN0OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICAgIHBhY2thZ2VfcmVsZWFzZTogenQucGFja2FnZVJlbGVhc2VTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBwYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbixcbiAgICBwYWNrYWdlX25hbWUsXG4gICAgcGFja2FnZV9pZCxcbiAgICBpc19sYXRlc3QsXG4gIH0gPSByZXEuanNvbkJvZHlcblxuICAvLyBIYW5kbGUgcGFja2FnZV9uYW1lIHdpdGggaXNfbGF0ZXN0XG4gIGlmIChwYWNrYWdlX25hbWUgJiYgaXNfbGF0ZXN0ID09PSB0cnVlKSB7XG4gICAgY29uc3QgcGtnID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoKHgpID0+IHgubmFtZSA9PT0gcGFja2FnZV9uYW1lKVxuXG4gICAgaWYgKCFwa2cpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9ub3RfZm91bmRcIixcbiAgICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIG5vdCBmb3VuZFwiLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBTb3J0IHJlbGVhc2VzIGJ5IHZlcnNpb24gdG8gZmluZCB0aGUgbGF0ZXN0IG9uZVxuICAgIGNvbnN0IHBhY2thZ2VSZWxlYXNlcyA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXNcbiAgICAgIC5maWx0ZXIoKHgpID0+IHgucGFja2FnZV9pZCA9PT0gcGtnLnBhY2thZ2VfaWQpXG4gICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG5ldyBEYXRlKGIuY3JlYXRlZF9hdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYS5jcmVhdGVkX2F0KS5nZXRUaW1lKClcbiAgICAgICAgKVxuICAgICAgfSlcblxuICAgIGlmIChwYWNrYWdlUmVsZWFzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgICAgbWVzc2FnZTogXCJObyByZWxlYXNlcyBmb3VuZCBmb3IgdGhpcyBwYWNrYWdlXCIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBjdHguanNvbih7XG4gICAgICBvazogdHJ1ZSxcbiAgICAgIHBhY2thZ2VfcmVsZWFzZTogcHVibGljTWFwUGFja2FnZVJlbGVhc2UocGFja2FnZVJlbGVhc2VzWzBdLCB7XG4gICAgICAgIGluY2x1ZGVfYWlfcmV2aWV3OiByZXEuY29tbW9uUGFyYW1zPy5pbmNsdWRlX2FpX3JldmlldyxcbiAgICAgICAgZGI6IGN0eC5kYixcbiAgICAgIH0pLFxuICAgIH0pXG4gIH1cblxuICAvLyBIYW5kbGUgcGFja2FnZV9pZCB3aXRoIGlzX2xhdGVzdFxuICBpZiAocGFja2FnZV9pZCAmJiBpc19sYXRlc3QgPT09IHRydWUpIHtcbiAgICAvLyBTb3J0IHJlbGVhc2VzIGJ5IHZlcnNpb24gdG8gZmluZCB0aGUgbGF0ZXN0IG9uZVxuICAgIGNvbnN0IHBhY2thZ2VSZWxlYXNlcyA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXNcbiAgICAgIC5maWx0ZXIoKHgpID0+IHgucGFja2FnZV9pZCA9PT0gcGFja2FnZV9pZClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbmV3IERhdGUoYi5jcmVhdGVkX2F0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhLmNyZWF0ZWRfYXQpLmdldFRpbWUoKVxuICAgICAgICApXG4gICAgICB9KVxuXG4gICAgaWYgKHBhY2thZ2VSZWxlYXNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX25vdF9mb3VuZFwiLFxuICAgICAgICBtZXNzYWdlOiBcIk5vIHJlbGVhc2VzIGZvdW5kIGZvciB0aGlzIHBhY2thZ2VcIixcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICAgIG9rOiB0cnVlLFxuICAgICAgcGFja2FnZV9yZWxlYXNlOiBwdWJsaWNNYXBQYWNrYWdlUmVsZWFzZShwYWNrYWdlUmVsZWFzZXNbMF0sIHtcbiAgICAgICAgaW5jbHVkZV9haV9yZXZpZXc6IHJlcS5jb21tb25QYXJhbXM/LmluY2x1ZGVfYWlfcmV2aWV3LFxuICAgICAgICBkYjogY3R4LmRiLFxuICAgICAgfSksXG4gICAgfSlcbiAgfVxuXG4gIGlmIChwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uICYmICFwYWNrYWdlX3JlbGVhc2VfaWQpIHtcbiAgICBjb25zdCBbcGFja2FnZU5hbWUsIHBhcnNlZFZlcnNpb25dID0gcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbi5zcGxpdChcIkBcIilcbiAgICBjb25zdCBwa2cgPSBjdHguZGIucGFja2FnZXMuZmluZCgoeCkgPT4geC5uYW1lID09PSBwYWNrYWdlTmFtZSlcbiAgICBjb25zdCBwa2dSZWxlYXNlID0gY3R4LmRiLnBhY2thZ2VSZWxlYXNlcy5maW5kKCh4KSA9PiB7XG4gICAgICByZXR1cm4geC52ZXJzaW9uID09IHBhcnNlZFZlcnNpb24gJiYgeC5wYWNrYWdlX2lkID09IHBrZz8ucGFja2FnZV9pZFxuICAgIH0pXG5cbiAgICBpZiAoIXBrZ1JlbGVhc2UpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX25vdF9mb3VuZFwiLFxuICAgICAgICBtZXNzYWdlOiBcIlBhY2thZ2UgcmVsZWFzZSBub3QgZm91bmRcIixcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICAgIG9rOiB0cnVlLFxuICAgICAgcGFja2FnZV9yZWxlYXNlOiBwdWJsaWNNYXBQYWNrYWdlUmVsZWFzZShwa2dSZWxlYXNlLCB7XG4gICAgICAgIGluY2x1ZGVfYWlfcmV2aWV3OiByZXEuY29tbW9uUGFyYW1zPy5pbmNsdWRlX2FpX3JldmlldyxcbiAgICAgICAgZGI6IGN0eC5kYixcbiAgICAgIH0pLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBmb3VuZFJlbGVhc2UgPVxuICAgIHBhY2thZ2VfcmVsZWFzZV9pZCAmJiBjdHguZGIuZ2V0UGFja2FnZVJlbGVhc2VCeUlkKHBhY2thZ2VfcmVsZWFzZV9pZClcblxuICBpZiAoIWZvdW5kUmVsZWFzZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICAgIHBhY2thZ2VfcmVsZWFzZTogcHVibGljTWFwUGFja2FnZVJlbGVhc2UoZm91bmRSZWxlYXNlLCB7XG4gICAgICBpbmNsdWRlX2xvZ3M6IHJlcS5jb21tb25QYXJhbXM/LmluY2x1ZGVfbG9ncyxcbiAgICAgIGluY2x1ZGVfYWlfcmV2aWV3OiByZXEuY29tbW9uUGFyYW1zPy5pbmNsdWRlX2FpX3JldmlldyxcbiAgICAgIGRiOiBjdHguZGIsXG4gICAgfSksXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHBhY2thZ2VSZWxlYXNlU2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHB1YmxpY01hcFBhY2thZ2VSZWxlYXNlIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9wdWJsaWMtbWFwcGluZy9wdWJsaWMtbWFwLXBhY2thZ2UtcmVsZWFzZVwiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgaW5jbHVkZV9haV9yZXZpZXc6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVmYXVsdChmYWxzZSksXG4gIH0pLFxuICBqc29uQm9keTogelxuICAgIC5vYmplY3Qoe1xuICAgICAgcGFja2FnZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgcGFja2FnZV9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBpc19sYXRlc3Q6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgICB2ZXJzaW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBjb21taXRfc2hhOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAucmVmaW5lKCh7IHBhY2thZ2VfaWQsIHBhY2thZ2VfbmFtZSB9KSA9PiB7XG4gICAgICBpZiAocGFja2FnZV9pZCAmJiBwYWNrYWdlX25hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sIFwicGFja2FnZV9pZCBhbmQgcGFja2FnZV9uYW1lIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcIilcbiAgICAucmVmaW5lKCh7IHBhY2thZ2VfaWQsIHBhY2thZ2VfbmFtZSB9KSA9PiB7XG4gICAgICBpZiAoIXBhY2thZ2VfaWQgJiYgIXBhY2thZ2VfbmFtZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSwgXCJwYWNrYWdlX2lkIG9yIHBhY2thZ2VfbmFtZSBpcyByZXF1aXJlZFwiKSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICAgIHBhY2thZ2VfcmVsZWFzZXM6IHouYXJyYXkocGFja2FnZVJlbGVhc2VTY2hlbWEpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IHBhY2thZ2VfaWQsIHBhY2thZ2VfbmFtZSwgaXNfbGF0ZXN0LCB2ZXJzaW9uLCBjb21taXRfc2hhIH0gPVxuICAgIHJlcS5qc29uQm9keVxuXG4gIGlmICghcGFja2FnZV9pZCAmJiAhcGFja2FnZV9uYW1lICYmICFpc19sYXRlc3QgJiYgIXZlcnNpb24gJiYgIWNvbW1pdF9zaGEpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJpbnZhbGlkX3F1ZXJ5XCIsXG4gICAgICBtZXNzYWdlOlxuICAgICAgICBcIkF0IGxlYXN0IG9uZSBvZiBwYWNrYWdlX2lkLCBwYWNrYWdlX25hbWUsIGlzX2xhdGVzdCwgdmVyc2lvbiBvciBjb21taXRfc2hhIGlzIHJlcXVpcmVkXCIsXG4gICAgfSlcbiAgfVxuXG4gIGxldCByZWxlYXNlcyA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXNcblxuICAvLyBBcHBseSBmaWx0ZXJzXG4gIGlmIChwYWNrYWdlX2lkKSB7XG4gICAgcmVsZWFzZXMgPSByZWxlYXNlcy5maWx0ZXIoKHByKSA9PiBwci5wYWNrYWdlX2lkID09PSBwYWNrYWdlX2lkKVxuICB9XG5cbiAgaWYgKHBhY2thZ2VfbmFtZSkge1xuICAgIGNvbnN0IHBrZyA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKChwKSA9PiBwLm5hbWUgPT09IHBhY2thZ2VfbmFtZSlcbiAgICBpZiAocGtnKSB7XG4gICAgICByZWxlYXNlcyA9IHJlbGVhc2VzLmZpbHRlcigocHIpID0+IHByLnBhY2thZ2VfaWQgPT09IHBrZy5wYWNrYWdlX2lkKVxuICAgIH0gZWxzZSB7XG4gICAgICByZWxlYXNlcyA9IFtdXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzX2xhdGVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVsZWFzZXMgPSByZWxlYXNlcy5maWx0ZXIoKHByKSA9PiBwci5pc19sYXRlc3QgPT09IGlzX2xhdGVzdClcbiAgfVxuXG4gIGlmICh2ZXJzaW9uKSB7XG4gICAgcmVsZWFzZXMgPSByZWxlYXNlcy5maWx0ZXIoKHByKSA9PiBwci52ZXJzaW9uID09PSB2ZXJzaW9uKVxuICB9XG5cbiAgaWYgKGNvbW1pdF9zaGEpIHtcbiAgICByZWxlYXNlcyA9IHJlbGVhc2VzLmZpbHRlcigocHIpID0+IHByLmNvbW1pdF9zaGEgPT09IGNvbW1pdF9zaGEpXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICAgIHBhY2thZ2VfcmVsZWFzZXM6IHJlbGVhc2VzLm1hcCgocHIpID0+XG4gICAgICBwdWJsaWNNYXBQYWNrYWdlUmVsZWFzZShwciwge1xuICAgICAgICBpbmNsdWRlX2FpX3JldmlldzogcmVxLmNvbW1vblBhcmFtcz8uaW5jbHVkZV9haV9yZXZpZXcsXG4gICAgICAgIGRiOiBjdHguZGIsXG4gICAgICB9KSxcbiAgICApLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IERlYnVnIGZyb20gXCJkZWJ1Z1wiXG5cbmNvbnN0IGRlYnVnID0gRGVidWcoXCJmYWtlLXNuaXBwZXRzLWFwaTpyZWJ1aWxkLXBhY2thZ2VcIilcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogei5zdHJpbmcoKSxcbiAgICByZWJ1aWxkX3RyYW5zcGlsYXRpb246IHouYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG4gICAgcmVidWlsZF9jaXJjdWl0X2pzb246IHouYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgcGFja2FnZV9yZWxlYXNlX2lkLCByZWJ1aWxkX3RyYW5zcGlsYXRpb24sIHJlYnVpbGRfY2lyY3VpdF9qc29uIH0gPVxuICAgIHJlcS5qc29uQm9keVxuXG4gIC8vIEdldCB0aGUgcGFja2FnZSByZWxlYXNlIGluZm8gZm9yIGxvZ2dpbmdcbiAgY29uc3QgcmVsZWFzZSA9IGN0eC5kYi5nZXRQYWNrYWdlUmVsZWFzZUJ5SWQocGFja2FnZV9yZWxlYXNlX2lkKVxuXG4gIGlmICghcmVsZWFzZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBwYWNrYWdlSW5mbyA9IGN0eC5kYi5nZXRQYWNrYWdlQnlJZChyZWxlYXNlLnBhY2thZ2VfaWQpXG5cbiAgaWYgKCFwYWNrYWdlSW5mbykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlBhY2thZ2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGlmIChwYWNrYWdlSW5mby5vd25lcl9vcmdfaWQgIT09IGN0eC5hdXRoLnBlcnNvbmFsX29yZ19pZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImZvcmJpZGRlblwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byByZWJ1aWxkIHRoaXMgcGFja2FnZSByZWxlYXNlXCIsXG4gICAgfSlcbiAgfVxuXG4gIGRlYnVnKFxuICAgIGBSZWJ1aWxkaW5nIHBhY2thZ2UgcmVsZWFzZSAke3BhY2thZ2VfcmVsZWFzZV9pZH0gZm9yICR7cGFja2FnZUluZm8ubmFtZX1AJHtyZWxlYXNlLnZlcnNpb259YCxcbiAgKVxuXG4gIC8vIFRyaWdnZXIgdHJhbnNwaWxhdGlvbiBpZiByZXF1ZXN0ZWRcbiAgaWYgKHJlYnVpbGRfdHJhbnNwaWxhdGlvbikge1xuICAgIGRlYnVnKFwiUmVzZXR0aW5nIHRyYW5zcGlsYXRpb24gc3RhdGVcIilcbiAgfVxuXG4gIC8vIFNldCBjaXJjdWl0IEpTT04gYnVpbGQgc3RhdGUgdG8gcGVuZGluZyBmb3Igd29ya2VyIHBpY2t1cCBpZiByZXF1ZXN0ZWRcbiAgaWYgKHJlYnVpbGRfY2lyY3VpdF9qc29uKSB7XG4gICAgZGVidWcoXCJSZXNldHRpbmcgY2lyY3VpdCBKU09OIGJ1aWxkIHN0YXRlXCIpXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJub25lXCIsXG4gIGpzb25Cb2R5OiB6Lm9iamVjdCh7XG4gICAgcGFja2FnZV9yZWxlYXNlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGlzX2xvY2tlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBpc19sYXRlc3Q6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgbGljZW5zZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGZzX3NoYTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHJlYWR5X3RvX2J1aWxkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIGFpX3Jldmlld19yZXF1ZXN0ZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBwYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbixcbiAgICBpc19sb2NrZWQsXG4gICAgaXNfbGF0ZXN0LFxuICAgIGxpY2Vuc2UsXG4gICAgZnNfc2hhLFxuICAgIHJlYWR5X3RvX2J1aWxkLFxuICAgIGFpX3Jldmlld19yZXF1ZXN0ZWQsXG4gIH0gPSByZXEuanNvbkJvZHlcbiAgbGV0IHJlbGVhc2VJZCA9IHBhY2thZ2VfcmVsZWFzZV9pZFxuXG4gIC8vIEhhbmRsZSBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uIGxvb2t1cFxuICBpZiAoIXJlbGVhc2VJZCAmJiBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uKSB7XG4gICAgY29uc3QgW3BhY2thZ2VOYW1lLCB2ZXJzaW9uXSA9IHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24uc3BsaXQoXCJAXCIpXG4gICAgY29uc3QgcGtnID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gcGFja2FnZU5hbWUpXG4gICAgaWYgKHBrZykge1xuICAgICAgY29uc3QgcmVsZWFzZSA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgICAgKHByKSA9PiBwci5wYWNrYWdlX2lkID09PSBwa2cucGFja2FnZV9pZCAmJiBwci52ZXJzaW9uID09PSB2ZXJzaW9uLFxuICAgICAgKVxuICAgICAgaWYgKHJlbGVhc2UpIHtcbiAgICAgICAgcmVsZWFzZUlkID0gcmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIXJlbGVhc2VJZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBkZWx0YSA9IHtcbiAgICBpc19sb2NrZWQsXG4gICAgaXNfbGF0ZXN0LFxuICAgIGxpY2Vuc2UsXG4gICAgZnNfc2hhLFxuICAgIHJlYWR5X3RvX2J1aWxkLFxuICAgIGFpX3Jldmlld19yZXF1ZXN0ZWQsXG4gIH1cbiAgaWYgKFxuICAgIE9iamVjdC5rZXlzKGRlbHRhKS5maWx0ZXIoXG4gICAgICAoaykgPT4gZGVsdGFbayBhcyBrZXlvZiB0eXBlb2YgZGVsdGFdICE9PSB1bmRlZmluZWQsXG4gICAgKS5sZW5ndGggPT09IDBcbiAgKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwibm9fZmllbGRzX3Byb3ZpZGVkXCIsXG4gICAgICBtZXNzYWdlOiBcIk5vIGZpZWxkcyBwcm92aWRlZCB0byB1cGRhdGVcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgcmVsZWFzZSA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAocHIpID0+IHByLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcmVsZWFzZUlkLFxuICApXG4gIGlmICghcmVsZWFzZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDcmVhdGUgdXBkYXRlZCByZWxlYXNlIG9iamVjdFxuICBjb25zdCB1cGRhdGVkUmVsZWFzZSA9IHtcbiAgICAuLi5yZWxlYXNlLFxuICAgIC4uLihpc19sb2NrZWQgIT09IHVuZGVmaW5lZCAmJiB7IGlzX2xvY2tlZCB9KSxcbiAgICAuLi4oaXNfbGF0ZXN0ICE9PSB1bmRlZmluZWQgJiYgeyBpc19sYXRlc3QgfSksXG4gICAgLi4uKGxpY2Vuc2UgIT09IHVuZGVmaW5lZCAmJiB7IGxpY2Vuc2UgfSksXG4gICAgLi4uKGZzX3NoYSAhPT0gdW5kZWZpbmVkICYmIHsgZnNfc2hhIH0pLFxuICAgIC4uLihyZWFkeV90b19idWlsZCAhPT0gdW5kZWZpbmVkICYmIHsgcmVhZHlfdG9fYnVpbGQgfSksXG4gICAgLi4uKGFpX3Jldmlld19yZXF1ZXN0ZWQgIT09IHVuZGVmaW5lZCAmJiB7IGFpX3Jldmlld19yZXF1ZXN0ZWQgfSksXG4gICAgLi4uKGFpX3Jldmlld19yZXF1ZXN0ZWQgPT09IHRydWUgJiYge1xuICAgICAgYWlfcmV2aWV3X3RleHQ6IFwiUGxhY2Vob2xkZXIgQUkgUmV2aWV3IFRleHRcIixcbiAgICB9KSxcbiAgfVxuXG4gIC8vIEhhbmRsZSBpc19sYXRlc3QgdXBkYXRlcyBhdG9taWNhbGx5XG4gIGlmIChpc19sYXRlc3QgIT09IHVuZGVmaW5lZCAmJiBpc19sYXRlc3QpIHtcbiAgICAvLyBHZXQgYWxsIHJlbGVhc2VzIGZvciB0aGlzIHBhY2thZ2UgdGhhdCBhcmUgY3VycmVudGx5IG1hcmtlZCBhcyBsYXRlc3RcbiAgICBjb25zdCBvdGhlckxhdGVzdFJlbGVhc2VzID0gY3R4LmRiLnBhY2thZ2VSZWxlYXNlcy5maWx0ZXIoXG4gICAgICAocHIpID0+XG4gICAgICAgIHByLnBhY2thZ2VfaWQgPT09IHJlbGVhc2UucGFja2FnZV9pZCAmJlxuICAgICAgICBwci5wYWNrYWdlX3JlbGVhc2VfaWQgIT09IHJlbGVhc2VJZCAmJlxuICAgICAgICBwci5pc19sYXRlc3QsXG4gICAgKVxuXG4gICAgLy8gVXBkYXRlIGFsbCByZWxlYXNlcyBpbiBhIHNpbmdsZSBvcGVyYXRpb25cbiAgICBmb3IgKGNvbnN0IGxhdGVzdFJlbGVhc2Ugb2Ygb3RoZXJMYXRlc3RSZWxlYXNlcykge1xuICAgICAgY3R4LmRiLnVwZGF0ZVBhY2thZ2VSZWxlYXNlKHtcbiAgICAgICAgLi4ubGF0ZXN0UmVsZWFzZSxcbiAgICAgICAgaXNfbGF0ZXN0OiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIHRoZSB0YXJnZXQgcmVsZWFzZVxuICBjdHguZGIudXBkYXRlUGFja2FnZVJlbGVhc2UodXBkYXRlZFJlbGVhc2UpXG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogelxuICAgIC5vYmplY3Qoe1xuICAgICAgcGFja2FnZV9pZDogei5zdHJpbmcoKSxcbiAgICB9KVxuICAgIC5vcih6Lm9iamVjdCh7IG5hbWU6IHouc3RyaW5nKCkgfSkpLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGxldCBwYWNrYWdlSWQ6IHN0cmluZ1xuXG4gIC8vIEdldCBwYWNrYWdlIElEIGVpdGhlciBkaXJlY3RseSBvciBieSBuYW1lXG4gIGlmIChcInBhY2thZ2VfaWRcIiBpbiByZXEuanNvbkJvZHkpIHtcbiAgICBjb25zdCBib2R5ID0gcmVxLmpzb25Cb2R5XG4gICAgcGFja2FnZUlkID0gYm9keS5wYWNrYWdlX2lkXG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgbmFtZSBpcyBwcm92aWRlZCwgbG9vayB1cCB0aGUgcGFja2FnZV9pZFxuICAgIGNvbnN0IGJvZHkgPSByZXEuanNvbkJvZHlcbiAgICBjb25zdCBwYWNrYWdlRGF0YSA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKChwa2cpID0+IHBrZy5uYW1lID09PSBib2R5Lm5hbWUpXG5cbiAgICBpZiAoIXBhY2thZ2VEYXRhKSB7XG4gICAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2Vfbm90X2ZvdW5kXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSBub3QgZm91bmRcIixcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcGFja2FnZUlkID0gcGFja2FnZURhdGEucGFja2FnZV9pZFxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgcGFja2FnZSBleGlzdHMgKGV4dHJhIGNoZWNrIGZvciBJRC1iYXNlZCBsb29rdXApXG4gIGNvbnN0IHBrZyA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKChwKSA9PiBwLnBhY2thZ2VfaWQgPT09IHBhY2thZ2VJZClcblxuICBpZiAoIXBrZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlBhY2thZ2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGFscmVhZHkgc3RhcnJlZFxuICBjb25zdCBleGlzdGluZyA9IGN0eC5kYi5hY2NvdW50UGFja2FnZXMuZmluZChcbiAgICAoYXApID0+XG4gICAgICBhcC5hY2NvdW50X2lkID09PSBjdHguYXV0aC5hY2NvdW50X2lkICYmIGFwLnBhY2thZ2VfaWQgPT09IHBhY2thZ2VJZCxcbiAgKVxuXG4gIGlmIChleGlzdGluZz8uaXNfc3RhcnJlZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImFscmVhZHlfc3RhcnJlZFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgaGF2ZSBhbHJlYWR5IHN0YXJyZWQgdGhpcyBwYWNrYWdlXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIFVwZGF0ZSB0aGUgcGFja2FnZSdzIHN0YXIgY291bnRcbiAgcGtnLnN0YXJfY291bnQgPSAocGtnLnN0YXJfY291bnQgfHwgMCkgKyAxXG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgLy8gSWYgcmVjb3JkIGV4aXN0cyBidXQgaXNfc3RhcnJlZCBpcyBmYWxzZSwgdXBkYXRlIHRvIGlzX3N0YXJyZWQ9dHJ1ZVxuICAgIGV4aXN0aW5nLmlzX3N0YXJyZWQgPSB0cnVlXG4gICAgZXhpc3RpbmcudXBkYXRlZF9hdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICB9IGVsc2Uge1xuICAgIC8vIEFkZCBzdGFyIGJ5IGNyZWF0aW5nIGEgbmV3IGFjY291bnRfcGFja2FnZSByZWNvcmRcbiAgICBjb25zdCBuZXdUaW1lc3RhbXAgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICBjb25zdCBuZXdBY2NvdW50UGFja2FnZSA9IHtcbiAgICAgIGFjY291bnRfcGFja2FnZV9pZDogYGFwXyR7RGF0ZS5ub3coKX1gLFxuICAgICAgYWNjb3VudF9pZDogY3R4LmF1dGguYWNjb3VudF9pZCxcbiAgICAgIHBhY2thZ2VfaWQ6IHBhY2thZ2VJZCxcbiAgICAgIGlzX3N0YXJyZWQ6IHRydWUsXG4gICAgICBjcmVhdGVkX2F0OiBuZXdUaW1lc3RhbXAsXG4gICAgICB1cGRhdGVkX2F0OiBuZXdUaW1lc3RhbXAsXG4gICAgfVxuICAgIGN0eC5kYi5hZGRBY2NvdW50UGFja2FnZShuZXdBY2NvdW50UGFja2FnZSlcbiAgfVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb2s6IHRydWUsXG4gIH0pXG59KVxuIiwgImltcG9ydCB0eXBlICogYXMgenQgZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuXG5leHBvcnQgY29uc3QgcHVibGljTWFwUGFja2FnZSA9IChpbnRlcm5hbFBhY2thZ2U6IHtcbiAgcGFja2FnZV9pZDogc3RyaW5nXG4gIGNyZWF0b3JfYWNjb3VudF9pZDogc3RyaW5nXG4gIG93bmVyX29yZ19pZDogc3RyaW5nXG4gIG93bmVyX2dpdGh1Yl91c2VybmFtZTogc3RyaW5nIHwgbnVsbFxuICBpc19zb3VyY2VfZnJvbV9naXRodWI6IGJvb2xlYW5cbiAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGxcbiAgbGF0ZXN0X3ZlcnNpb24/OiBzdHJpbmcgfCBudWxsXG4gIGxhdGVzdF9saWNlbnNlPzogc3RyaW5nIHwgbnVsbFxuICBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkPzogc3RyaW5nIHwgbnVsbFxuICBzdGFyX2NvdW50PzogbnVtYmVyIHwgbnVsbFxuICBuYW1lOiBzdHJpbmdcbiAgd2Vic2l0ZTogc3RyaW5nIHwgbnVsbFxuICB1bnNjb3BlZF9uYW1lOiBzdHJpbmdcbiAgdXBkYXRlZF9hdDogc3RyaW5nXG4gIGNyZWF0ZWRfYXQ6IHN0cmluZ1xuICBhaV9kZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbFxuICBhaV91c2FnZV9pbnN0cnVjdGlvbnM6IHN0cmluZyB8IG51bGxcbiAgaXNfc25pcHBldDogYm9vbGVhblxuICBpc19ib2FyZDogYm9vbGVhblxuICBpc19wYWNrYWdlOiBib29sZWFuXG4gIGlzX21vZGVsOiBib29sZWFuXG4gIGlzX2Zvb3RwcmludDogYm9vbGVhblxuICBpc19wcml2YXRlOiBib29sZWFuIHwgbnVsbFxuICBpc191bmxpc3RlZDogYm9vbGVhbiB8IG51bGxcbiAgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9mc19zaGE6IHN0cmluZyB8IG51bGxcbiAgZ2l0aHViX3JlcG9fZnVsbF9uYW1lPzogc3RyaW5nIHwgbnVsbFxuICBhbGxvd19wcl9wcmV2aWV3cz86IGJvb2xlYW5cbiAgbGF0ZXN0X3BjYl9wcmV2aWV3X2ltYWdlX3VybD86IHN0cmluZyB8IG51bGxcbiAgbGF0ZXN0X3NjaF9wcmV2aWV3X2ltYWdlX3VybD86IHN0cmluZyB8IG51bGxcbiAgbGF0ZXN0X2NhZF9wcmV2aWV3X2ltYWdlX3VybD86IHN0cmluZyB8IG51bGxcbn0pOiB6dC5QYWNrYWdlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5pbnRlcm5hbFBhY2thZ2UsXG4gICAgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZDpcbiAgICAgIGludGVybmFsUGFja2FnZS5sYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkID8/IG51bGwsXG4gICAgbGF0ZXN0X3ZlcnNpb246IGludGVybmFsUGFja2FnZS5sYXRlc3RfdmVyc2lvbiA/PyBudWxsLFxuICAgIGxpY2Vuc2U6IGludGVybmFsUGFja2FnZS5sYXRlc3RfbGljZW5zZSA/PyBudWxsLFxuICAgIHdlYnNpdGU6IGludGVybmFsUGFja2FnZS53ZWJzaXRlID8/IG51bGwsXG4gICAgc3Rhcl9jb3VudDogaW50ZXJuYWxQYWNrYWdlLnN0YXJfY291bnQgPz8gMCxcbiAgICBjcmVhdGVkX2F0OiBpbnRlcm5hbFBhY2thZ2UuY3JlYXRlZF9hdCxcbiAgICB1cGRhdGVkX2F0OiBpbnRlcm5hbFBhY2thZ2UudXBkYXRlZF9hdCxcbiAgICBnaXRodWJfcmVwb19mdWxsX25hbWU6IGludGVybmFsUGFja2FnZS5naXRodWJfcmVwb19mdWxsX25hbWUgPz8gbnVsbCxcbiAgICBpc19wcml2YXRlOiBpbnRlcm5hbFBhY2thZ2UuaXNfcHJpdmF0ZSA/PyBmYWxzZSxcbiAgICBpc19wdWJsaWM6IGludGVybmFsUGFja2FnZS5pc19wcml2YXRlID09PSB0cnVlID8gZmFsc2UgOiB0cnVlLFxuICAgIGlzX3VubGlzdGVkOlxuICAgICAgaW50ZXJuYWxQYWNrYWdlLmlzX3ByaXZhdGUgPT09IHRydWVcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogKGludGVybmFsUGFja2FnZS5pc191bmxpc3RlZCA/PyBmYWxzZSksXG4gICAgYWxsb3dfcHJfcHJldmlld3M6IEJvb2xlYW4oaW50ZXJuYWxQYWNrYWdlLmFsbG93X3ByX3ByZXZpZXdzKSxcbiAgICBsYXRlc3RfcGNiX3ByZXZpZXdfaW1hZ2VfdXJsOlxuICAgICAgaW50ZXJuYWxQYWNrYWdlLmxhdGVzdF9wY2JfcHJldmlld19pbWFnZV91cmwgPz8gbnVsbCxcbiAgICBsYXRlc3Rfc2NoX3ByZXZpZXdfaW1hZ2VfdXJsOlxuICAgICAgaW50ZXJuYWxQYWNrYWdlLmxhdGVzdF9zY2hfcHJldmlld19pbWFnZV91cmwgPz8gbnVsbCxcbiAgICBsYXRlc3RfY2FkX3ByZXZpZXdfaW1hZ2VfdXJsOlxuICAgICAgaW50ZXJuYWxQYWNrYWdlLmxhdGVzdF9jYWRfcHJldmlld19pbWFnZV91cmwgPz8gbnVsbCxcbiAgfVxufVxuIiwgImltcG9ydCB7IHBhY2thZ2VTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgcHVibGljTWFwUGFja2FnZSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcHVibGljLW1hcHBpbmcvcHVibGljLW1hcC1wYWNrYWdlXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIG5hbWU6IHpcbiAgICAgIC5zdHJpbmcoKVxuICAgICAgLnJlZ2V4KFxuICAgICAgICAvXltAYS16QS1aMC05LV9cXC9dKyQvLFxuICAgICAgICBcIlBhY2thZ2UgbmFtZSBjYW4gb25seSBjb250YWluIGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBhbmQgZm9yd2FyZCBzbGFzaGVzXCIsXG4gICAgICApXG4gICAgICAudHJhbnNmb3JtKChuYW1lKSA9PiBuYW1lLnJlcGxhY2UoL15ALywgXCJcIikpXG4gICAgICAub3B0aW9uYWwoKSxcbiAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGlzX3ByaXZhdGU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVmYXVsdChmYWxzZSksXG4gICAgaXNfdW5saXN0ZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVmYXVsdChmYWxzZSksXG4gICAgb3JnX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBwYWNrYWdlOiBwYWNrYWdlU2NoZW1hLm9wdGlvbmFsKCksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgbmFtZSwgZGVzY3JpcHRpb24sIGlzX3ByaXZhdGUsIGlzX3VubGlzdGVkLCBvcmdfaWQgfSA9IHJlcS5qc29uQm9keVxuICBsZXQgb3duZXJfc2VnbWVudCA9IG5hbWU/LnNwbGl0KFwiL1wiKVswXVxuICBsZXQgdW5zY29wZWRfbmFtZSA9IG5hbWU/LnNwbGl0KFwiL1wiKVsxXVxuXG4gIGlmIChuYW1lICYmICF1bnNjb3BlZF9uYW1lKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiaW52YWxpZF9wYWNrYWdlX25hbWVcIixcbiAgICAgIG1lc3NhZ2U6XG4gICAgICAgIFwiUGFja2FnZSBuYW1lIG11c3QgaW5jbHVkZSBhbiBhdXRob3Igc2VnbWVudCAoZS5nLiBhdXRob3IvcGFja2FnZV9uYW1lKVwiLFxuICAgIH0pXG4gIH1cbiAgY29uc3Qgb3JnID0gY3R4LmRiLmdldE9yZyh7IG9yZ19pZCB9KVxuICBpZiAoQm9vbGVhbihvcmdfaWQpICYmICFCb29sZWFuKG9yZykpXG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JnX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJPcmdhbml6YXRpb24gbm90IGZvdW5kXCIsXG4gICAgfSlcblxuICBpZiAoIXVuc2NvcGVkX25hbWUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGN0eC5kYi5nZXRTdGF0ZSgpXG5cbiAgICBjb25zdCBjb3VudCA9IG9yZ19pZFxuICAgICAgPyBzdGF0ZS5wYWNrYWdlcy5maWx0ZXIoKHBrZykgPT4gcGtnLm93bmVyX29yZ19pZCA9PT0gb3JnX2lkKS5sZW5ndGhcbiAgICAgIDogc3RhdGUucGFja2FnZXMuZmlsdGVyKFxuICAgICAgICAgIChwa2cpID0+IHBrZy5jcmVhdG9yX2FjY291bnRfaWQgPT09IGN0eC5hdXRoLmFjY291bnRfaWQsXG4gICAgICAgICkubGVuZ3RoXG5cbiAgICB1bnNjb3BlZF9uYW1lID0gYHVudGl0bGVkLXBhY2thZ2UtJHtjb3VudH1gXG4gIH1cblxuICBpZiAoIW93bmVyX3NlZ21lbnQpIHtcbiAgICBvd25lcl9zZWdtZW50ID0gb3JnX2lkXG4gICAgICA/IChvcmchLnRzY2lyY3VpdF9oYW5kbGUgPz8gdW5kZWZpbmVkKVxuICAgICAgOiAoY3R4LmF1dGgudHNjaXJjdWl0X2hhbmRsZSA/PyB1bmRlZmluZWQpXG4gIH1cblxuICBpZiAoIW93bmVyX3NlZ21lbnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJtaXNzaW5nX293bmVyX3NlZ21lbnRcIixcbiAgICAgIG1lc3NhZ2U6IFwiT3duZXIgc2VnbWVudCBpcyByZXF1aXJlZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBmaW5hbF9uYW1lID0gbmFtZSA/PyBgJHtvd25lcl9zZWdtZW50fS8ke3Vuc2NvcGVkX25hbWV9YFxuXG4gIGNvbnN0IHJlcXVlc3RlZF9vd25lcl9sb3dlciA9IG93bmVyX3NlZ21lbnQudG9Mb3dlckNhc2UoKVxuICBjb25zdCBwZXJzb25hbF9vd25lcl9sb3dlciA9IGN0eC5hdXRoLmdpdGh1Yl91c2VybmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgbGV0IG93bmVyX29yZ19pZCA9IGN0eC5hdXRoLnBlcnNvbmFsX29yZ19pZFxuICBsZXQgb3duZXJfZ2l0aHViX3VzZXJuYW1lID0gY3R4LmF1dGguZ2l0aHViX3VzZXJuYW1lXG5cbiAgaWYgKHJlcXVlc3RlZF9vd25lcl9sb3dlciAhPT0gcGVyc29uYWxfb3duZXJfbG93ZXIpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGN0eC5kYi5nZXRTdGF0ZSgpXG4gICAgY29uc3QgbWVtYmVyT3JnID0gc3RhdGUub3JnQWNjb3VudHNcbiAgICAgIC5maWx0ZXIoKG9hKSA9PiBvYS5hY2NvdW50X2lkID09PSBjdHguYXV0aC5hY2NvdW50X2lkKVxuICAgICAgLm1hcCgob2EpID0+IHN0YXRlLm9yZ2FuaXphdGlvbnMuZmluZCgobykgPT4gby5vcmdfaWQgPT09IG9hLm9yZ19pZCkpXG4gICAgICAuZmlsdGVyKChvKTogbyBpcyBOb25OdWxsYWJsZTx0eXBlb2Ygbz4gPT4gbyAhPT0gdW5kZWZpbmVkKVxuICAgICAgLmZpbmQoKG8pID0+IG8udHNjaXJjdWl0X2hhbmRsZT8udG9Mb3dlckNhc2UoKSA9PT0gcmVxdWVzdGVkX293bmVyX2xvd2VyKVxuXG4gICAgaWYgKCFtZW1iZXJPcmcpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwiZm9yYmlkZGVuXCIsXG4gICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgXCJZb3UgbXVzdCBiZSBhIG1lbWJlciBvZiB0aGUgb3JnYW5pemF0aW9uIHRvIGNyZWF0ZSBhIHBhY2thZ2UgdW5kZXIgaXRcIixcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgb3duZXJfb3JnX2lkID0gbWVtYmVyT3JnLm9yZ19pZFxuICAgIG93bmVyX2dpdGh1Yl91c2VybmFtZSA9XG4gICAgICBtZW1iZXJPcmcuZ2l0aHViX2hhbmRsZSA/PyBtZW1iZXJPcmcudHNjaXJjdWl0X2hhbmRsZSA/PyBcIlwiXG4gIH1cblxuICBjb25zdCBleGlzdGluZ1BhY2thZ2UgPSBjdHguZGJcbiAgICAuZ2V0U3RhdGUoKVxuICAgIC5wYWNrYWdlcy5maW5kKChwa2cpID0+IHBrZy5uYW1lID09PSBmaW5hbF9uYW1lKVxuXG4gIGlmIChleGlzdGluZ1BhY2thZ2UpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX2FscmVhZHlfZXhpc3RzXCIsXG4gICAgICBtZXNzYWdlOiBcIkEgcGFja2FnZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0c1wiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBuZXdQYWNrYWdlID0gY3R4LmRiLmFkZFBhY2thZ2Uoe1xuICAgIG5hbWU6IGZpbmFsX25hbWUsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uID8/IG51bGwsXG4gICAgY3JlYXRvcl9hY2NvdW50X2lkOiBjdHguYXV0aC5hY2NvdW50X2lkLFxuICAgIG93bmVyX29yZ19pZCxcbiAgICBvd25lcl9naXRodWJfdXNlcm5hbWUsXG4gICAgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZDogbnVsbCxcbiAgICBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2ZzX3NoYTogbnVsbCxcbiAgICBsYXRlc3RfdmVyc2lvbjogbnVsbCxcbiAgICBsaWNlbnNlOiBudWxsLFxuICAgIHdlYnNpdGU6IG51bGwsXG4gICAgaXNfc291cmNlX2Zyb21fZ2l0aHViOiBmYWxzZSxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHVuc2NvcGVkX25hbWUsXG4gICAgc3Rhcl9jb3VudDogMCxcbiAgICBhaV9kZXNjcmlwdGlvbjogXCJwbGFjZWhvbGRlciBhaSBkZXNjcmlwdGlvblwiLFxuICAgIGlzX3ByaXZhdGU6IGlzX3ByaXZhdGUgPz8gZmFsc2UsXG4gICAgaXNfcHVibGljOiBpc19wcml2YXRlID09PSB0cnVlID8gZmFsc2UgOiB0cnVlLFxuICAgIGlzX3VubGlzdGVkOiBpc19wcml2YXRlID09PSB0cnVlID8gdHJ1ZSA6IChpc191bmxpc3RlZCA/PyBmYWxzZSksXG4gICAgYWlfdXNhZ2VfaW5zdHJ1Y3Rpb25zOiBcInBsYWNlaG9sZGVyIGFpIHVzYWdlIGluc3RydWN0aW9uc1wiLFxuICAgIGRlZmF1bHRfdmlldzogXCJmaWxlc1wiLFxuICB9KVxuXG4gIGlmICghbmV3UGFja2FnZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgcGFja2FnZVwiKVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBwYWNrYWdlOiBwdWJsaWNNYXBQYWNrYWdlKG5ld1BhY2thZ2UpLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25Cb2R5OiB6Lm9iamVjdCh7XG4gICAgcGFja2FnZV9pZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBwYWNrYWdlX2lkIH0gPSByZXEuanNvbkJvZHlcblxuICBjb25zdCBwYWNrYWdlSW5kZXggPSBjdHguZGIucGFja2FnZXMuZmluZEluZGV4KFxuICAgIChwKSA9PiBwLnBhY2thZ2VfaWQgPT09IHBhY2thZ2VfaWQsXG4gIClcblxuICBpZiAocGFja2FnZUluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlBhY2thZ2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHBrZyA9IGN0eC5kYi5wYWNrYWdlc1twYWNrYWdlSW5kZXhdXG5cbiAgaWYgKHBrZy5vd25lcl9naXRodWJfdXNlcm5hbWUgIT09IGN0eC5hdXRoLmdpdGh1Yl91c2VybmFtZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImZvcmJpZGRlblwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGRlbGV0ZSB0aGlzIHBhY2thZ2VcIixcbiAgICB9KVxuICB9XG5cbiAgY3R4LmRiLnBhY2thZ2VzLnNwbGljZShwYWNrYWdlSW5kZXgsIDEpXG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgcGFja2FnZVNjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcbmltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyBwdWJsaWNNYXBQYWNrYWdlIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9wdWJsaWMtbWFwcGluZy9wdWJsaWMtbWFwLXBhY2thZ2VcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25Cb2R5OiB6XG4gICAgLm9iamVjdCh7XG4gICAgICAvLyBBY2NlcHQgZWl0aGVyIHBhY2thZ2VfaWQgb3IgcGFja2FnZV9uYW1lIHRvIGZpbmQgdGhlIHBhY2thZ2UgdG8gZm9ya1xuICAgICAgcGFja2FnZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgcGFja2FnZV9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAvLyBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGN1c3RvbWl6ZSB0aGUgZm9ya2VkIHBhY2thZ2VcbiAgICAgIGlzX3ByaXZhdGU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVmYXVsdChmYWxzZSksXG4gICAgICBpc191bmxpc3RlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKS5kZWZhdWx0KGZhbHNlKSxcbiAgICB9KVxuICAgIC5yZWZpbmUoXG4gICAgICAoZGF0YSkgPT5cbiAgICAgICAgZGF0YS5wYWNrYWdlX2lkICE9PSB1bmRlZmluZWQgfHwgZGF0YS5wYWNrYWdlX25hbWUgIT09IHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgbWVzc2FnZTogXCJFaXRoZXIgcGFja2FnZV9pZCBvciBwYWNrYWdlX25hbWUgbXVzdCBiZSBwcm92aWRlZFwiLFxuICAgICAgfSxcbiAgICApXG4gICAgLnRyYW5zZm9ybSgoZGF0YSkgPT4gKHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICAvLyBJZiB0aGUgcGFja2FnZSBpcyBwcml2YXRlLCBpdCBzaG91bGQgYmUgdW5saXN0ZWRcbiAgICAgIGlzX3VubGlzdGVkOiBkYXRhLmlzX3ByaXZhdGUgPyB0cnVlIDogZGF0YS5pc191bmxpc3RlZCxcbiAgICB9KSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIHBhY2thZ2U6IHBhY2thZ2VTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgcGFja2FnZV9pZCwgcGFja2FnZV9uYW1lLCBpc19wcml2YXRlLCBpc191bmxpc3RlZCB9ID0gcmVxLmpzb25Cb2R5XG5cbiAgLy8gRmluZCB0aGUgcGFja2FnZSB0byBmb3JrXG4gIGxldCBzb3VyY2VQYWNrYWdlID0gbnVsbFxuICBpZiAocGFja2FnZV9pZCkge1xuICAgIHNvdXJjZVBhY2thZ2UgPSBjdHguZGIucGFja2FnZXMuZmluZCgocGtnKSA9PiBwa2cucGFja2FnZV9pZCA9PT0gcGFja2FnZV9pZClcbiAgfSBlbHNlIGlmIChwYWNrYWdlX25hbWUpIHtcbiAgICBzb3VyY2VQYWNrYWdlID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoKHBrZykgPT4gcGtnLm5hbWUgPT09IHBhY2thZ2VfbmFtZSlcbiAgfVxuXG4gIGlmICghc291cmNlUGFja2FnZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlRoZSBwYWNrYWdlIHRvIGZvcmsgd2FzIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBpZiAoc291cmNlUGFja2FnZS5jcmVhdG9yX2FjY291bnRfaWQgPT09IGN0eC5hdXRoLmFjY291bnRfaWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJjYW5ub3RfZm9ya19vd25fcGFja2FnZVwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgY2Fubm90IGZvcmsgeW91ciBvd24gcGFja2FnZVwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDaGVjayBpZiBmb3JrIGFscmVhZHkgZXhpc3RzICh1c2VyIGFscmVhZHkgaGFzIGEgcGFja2FnZSB3aXRoIHRoZSBzYW1lIG5hbWUpXG4gIGNvbnN0IGZvcmtOYW1lID0gYCR7Y3R4LmF1dGguZ2l0aHViX3VzZXJuYW1lfS8ke3NvdXJjZVBhY2thZ2UudW5zY29wZWRfbmFtZX1gXG4gIGNvbnN0IGV4aXN0aW5nRm9yayA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKFxuICAgIChwa2cpID0+XG4gICAgICBwa2cuY3JlYXRvcl9hY2NvdW50X2lkID09PSBjdHguYXV0aC5hY2NvdW50X2lkICYmIHBrZy5uYW1lID09PSBmb3JrTmFtZSxcbiAgKVxuXG4gIGlmIChleGlzdGluZ0ZvcmspIHtcbiAgICByZXR1cm4gY3R4Lmpzb24oe1xuICAgICAgcGFja2FnZTogcHVibGljTWFwUGFja2FnZShleGlzdGluZ0ZvcmspLFxuICAgIH0pXG4gIH1cblxuICAvLyBGaW5kIHRoZSBsYXRlc3QgcmVsZWFzZSBvZiB0aGUgc291cmNlIHBhY2thZ2VcbiAgY29uc3Qgc291cmNlUGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgKHJlbGVhc2UpID0+XG4gICAgICByZWxlYXNlLnBhY2thZ2VfaWQgPT09IHNvdXJjZVBhY2thZ2UucGFja2FnZV9pZCAmJlxuICAgICAgcmVsZWFzZS5pc19sYXRlc3QgPT09IHRydWUsXG4gIClcblxuICBpZiAoIXNvdXJjZVBhY2thZ2VSZWxlYXNlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwic291cmNlX3BhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiVGhlIHNvdXJjZSBwYWNrYWdlIGRvZXMgbm90IGhhdmUgYW55IHJlbGVhc2VzIHRvIGZvcmtcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gR2V0IHRoZSBmaWxlcyBmcm9tIHRoZSBzb3VyY2UgcGFja2FnZSByZWxlYXNlXG4gIGNvbnN0IHNvdXJjZUZpbGVzID0gY3R4LmRiLnBhY2thZ2VGaWxlcy5maWx0ZXIoXG4gICAgKGZpbGUpID0+XG4gICAgICBmaWxlLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gc291cmNlUGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICApXG5cbiAgaWYgKHNvdXJjZUZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInNvdXJjZV9wYWNrYWdlX2ZpbGVzX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJUaGUgc291cmNlIHBhY2thZ2UgcmVsZWFzZSBkb2VzIG5vdCBoYXZlIGFueSBmaWxlcyB0byBmb3JrXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENyZWF0ZSB0aGUgZm9ya2VkIHBhY2thZ2VcbiAgY29uc3QgZm9ya2VkUGFja2FnZSA9IGN0eC5kYi5hZGRQYWNrYWdlKHtcbiAgICBuYW1lOiBmb3JrTmFtZSxcbiAgICBkZXNjcmlwdGlvbjogc291cmNlUGFja2FnZS5kZXNjcmlwdGlvbixcbiAgICBjcmVhdG9yX2FjY291bnRfaWQ6IGN0eC5hdXRoLmFjY291bnRfaWQsXG4gICAgb3duZXJfb3JnX2lkOiBjdHguYXV0aC5wZXJzb25hbF9vcmdfaWQsXG4gICAgb3duZXJfZ2l0aHViX3VzZXJuYW1lOiBjdHguYXV0aC5naXRodWJfdXNlcm5hbWUsXG4gICAgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZDogbnVsbCxcbiAgICBsYXRlc3RfdmVyc2lvbjogbnVsbCxcbiAgICBsaWNlbnNlOiBudWxsLFxuICAgIHdlYnNpdGU6IG51bGwsXG4gICAgaXNfc291cmNlX2Zyb21fZ2l0aHViOiBmYWxzZSxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHVuc2NvcGVkX25hbWU6IHNvdXJjZVBhY2thZ2UudW5zY29wZWRfbmFtZSxcbiAgICBzdGFyX2NvdW50OiAwLFxuICAgIGFpX2Rlc2NyaXB0aW9uOiBzb3VyY2VQYWNrYWdlLmFpX2Rlc2NyaXB0aW9uIHx8IFwiZm9ya2VkIHBhY2thZ2VcIixcbiAgICBpc19wcml2YXRlOiBpc19wcml2YXRlLFxuICAgIGlzX3B1YmxpYzogIWlzX3ByaXZhdGUsXG4gICAgaXNfdW5saXN0ZWQsXG4gICAgYWlfdXNhZ2VfaW5zdHJ1Y3Rpb25zOiBcImZvcmtlZCBwYWNrYWdlIHVzYWdlXCIsXG4gICAgaXNfYm9hcmQ6IEJvb2xlYW4oc291cmNlUGFja2FnZS5pc19ib2FyZCksXG4gICAgaXNfcGFja2FnZTogdHJ1ZSxcbiAgICBpc19tb2RlbDogQm9vbGVhbihzb3VyY2VQYWNrYWdlLmlzX21vZGVsKSxcbiAgICBpc19mb290cHJpbnQ6IEJvb2xlYW4oc291cmNlUGFja2FnZS5pc19mb290cHJpbnQpLFxuICAgIGlzX3NuaXBwZXQ6IEJvb2xlYW4oc291cmNlUGFja2FnZS5pc19zbmlwcGV0KSxcbiAgfSlcblxuICBpZiAoIWZvcmtlZFBhY2thZ2UpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDUwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJmYWlsZWRfdG9fY3JlYXRlX2ZvcmtlZF9wYWNrYWdlXCIsXG4gICAgICBtZXNzYWdlOiBcIkZhaWxlZCB0byBjcmVhdGUgZm9ya2VkIHBhY2thZ2VcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gQ3JlYXRlIGEgbmV3IHBhY2thZ2UgcmVsZWFzZSBmb3IgdGhlIGZvcmtlZCBwYWNrYWdlXG4gIGNvbnN0IGZvcmtlZFBhY2thZ2VSZWxlYXNlID0gY3R4LmRiLmFkZFBhY2thZ2VSZWxlYXNlKHtcbiAgICBwYWNrYWdlX2lkOiBmb3JrZWRQYWNrYWdlLnBhY2thZ2VfaWQsXG4gICAgdmVyc2lvbjogc291cmNlUGFja2FnZVJlbGVhc2UudmVyc2lvbixcbiAgICBpc19sb2NrZWQ6IGZhbHNlLFxuICAgIGlzX2xhdGVzdDogdHJ1ZSxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgY29tbWl0X3NoYTogbnVsbCxcbiAgICBsaWNlbnNlOiBzb3VyY2VQYWNrYWdlUmVsZWFzZS5saWNlbnNlIHx8IG51bGwsXG4gICAgLy8gU2V0dGluZyB0aGUgdHJhbnNwaWxlZCBhcyB0cnVlIG9uIGNyZWF0aW9uXG4gICAgaGFzX3RyYW5zcGlsZWQ6IHRydWUsXG4gICAgdHJhbnNwaWxhdGlvbl9lcnJvcjogbnVsbCxcbiAgfSlcblxuICAvLyBVcGRhdGUgdGhlIGZvcmtlZCBwYWNrYWdlIHdpdGggcmVsZWFzZSBpbmZvXG4gIGZvcmtlZFBhY2thZ2UubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCA9XG4gICAgZm9ya2VkUGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkXG4gIGZvcmtlZFBhY2thZ2UubGF0ZXN0X3ZlcnNpb24gPSBmb3JrZWRQYWNrYWdlUmVsZWFzZS52ZXJzaW9uIHx8IG51bGxcblxuICAvLyBDb3B5IGFsbCBmaWxlcyBmcm9tIHRoZSBzb3VyY2UgcGFja2FnZSByZWxlYXNlIHRvIHRoZSBmb3JrZWQgcGFja2FnZSByZWxlYXNlXG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBzb3VyY2VGaWxlcykge1xuICAgIGN0eC5kYi5hZGRQYWNrYWdlRmlsZSh7XG4gICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IGZvcmtlZFBhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgIGZpbGVfcGF0aDogc291cmNlRmlsZS5maWxlX3BhdGgsXG4gICAgICBjb250ZW50X3RleHQ6IHNvdXJjZUZpbGUuY29udGVudF90ZXh0LFxuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIHBhY2thZ2U6IHB1YmxpY01hcFBhY2thZ2UoZm9ya2VkUGFja2FnZSksXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBwYWNrYWdlU2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHtcbiAgZmV0Y2hFYXN5RURBQ29tcG9uZW50LFxuICBjb252ZXJ0UmF3RWFzeUVkYVRvVHMsXG4gIG5vcm1hbGl6ZU1hbnVmYWN0dXJlclBhcnROdW1iZXIsXG4gIEVhc3lFZGFKc29uU2NoZW1hLFxufSBmcm9tIFwiZWFzeWVkYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBqbGNwY2JfcGFydF9udW1iZXI6IHouc3RyaW5nKCkubWluKDEsIFwiSkxDUENCIHBhcnQgbnVtYmVyIGlzIHJlcXVpcmVkXCIpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICAgIHBhY2thZ2U6IHBhY2thZ2VTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgamxjcGNiX3BhcnRfbnVtYmVyIH0gPSByZXEuanNvbkJvZHlcblxuICB0cnkge1xuICAgIGNvbnN0IHJhd0Vhc3lKc29uID0gYXdhaXQgZmV0Y2hFYXN5RURBQ29tcG9uZW50KGpsY3BjYl9wYXJ0X251bWJlcilcblxuICAgIGlmICghcmF3RWFzeUpzb24pIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwiY29tcG9uZW50X25vdF9mb3VuZFwiLFxuICAgICAgICBtZXNzYWdlOiBgQ29tcG9uZW50IHdpdGggSkxDUENCIHBhcnQgbnVtYmVyICR7amxjcGNiX3BhcnRfbnVtYmVyfSBub3QgZm91bmRgLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCBiZXR0ZXJFYXN5ID0gYXdhaXQgRWFzeUVkYUpzb25TY2hlbWEucGFyc2UocmF3RWFzeUpzb24pXG5cbiAgICBjb25zdCB0c3hDb21wb25lbnQgPSBhd2FpdCBjb252ZXJ0UmF3RWFzeUVkYVRvVHMocmF3RWFzeUpzb24pXG5cbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gbm9ybWFsaXplTWFudWZhY3R1cmVyUGFydE51bWJlcihcbiAgICAgIGJldHRlckVhc3kuZGF0YVN0ci5oZWFkLmNfcGFyYVtcIk1hbnVmYWN0dXJlciBQYXJ0XCJdID8/IFwiXCIsXG4gICAgKVxuICAgICAgLnJlcGxhY2UoL1teYS16QS1aMC05LV9dL2csIFwiLVwiKVxuICAgICAgLnJlcGxhY2UoLy0tL2csIFwiLVwiKVxuXG4gICAgY29uc3QgcGFja2FnZU5hbWUgPSBgJHtjdHguYXV0aC5naXRodWJfdXNlcm5hbWV9LyR7Y29tcG9uZW50TmFtZX1gXG5cbiAgICBjb25zdCBleGlzdGluZ1BhY2thZ2UgPSBjdHguZGIucGFja2FnZXMuZmluZCgocCkgPT4gcC5uYW1lID09PSBwYWNrYWdlTmFtZSlcblxuICAgIGlmIChleGlzdGluZ1BhY2thZ2UpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA5LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9hbHJlYWR5X2V4aXN0c1wiLFxuICAgICAgICBtZXNzYWdlOiBjb21wb25lbnROYW1lLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCBuZXdQYWNrYWdlID0ge1xuICAgICAgbmFtZTogcGFja2FnZU5hbWUsXG4gICAgICB1bnNjb3BlZF9uYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgb3duZXJfbmFtZTogY3R4LmF1dGguZ2l0aHViX3VzZXJuYW1lLFxuICAgICAgY29kZTogdHN4Q29tcG9uZW50LFxuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgZGVzY3JpcHRpb246IGBHZW5lcmF0ZWQgZnJvbSBKTENQQ0IgcGFydCBudW1iZXIgJHtqbGNwY2JfcGFydF9udW1iZXJ9YCxcbiAgICAgIGNyZWF0b3JfYWNjb3VudF9pZDogY3R4LmF1dGguYWNjb3VudF9pZCxcbiAgICAgIG93bmVyX29yZ19pZDogY3R4LmF1dGgucGVyc29uYWxfb3JnX2lkLFxuICAgICAgb3duZXJfZ2l0aHViX3VzZXJuYW1lOiBjdHguYXV0aC5naXRodWJfdXNlcm5hbWUsXG4gICAgICBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkOiBudWxsLFxuICAgICAgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9mc19zaGE6IG51bGwsXG4gICAgICBsYXRlc3RfdmVyc2lvbjogbnVsbCxcbiAgICAgIGxpY2Vuc2U6IG51bGwsXG4gICAgICBhaV9kZXNjcmlwdGlvbjogXCJwbGFjZWhvbGRlciBhaSBkZXNjcmlwdGlvblwiLFxuICAgICAgYWlfdXNhZ2VfaW5zdHJ1Y3Rpb25zOiBcInBsYWNlaG9sZGVyIGFpIHVzYWdlIGluc3RydWN0aW9uc1wiLFxuICAgIH1cblxuICAgIGNvbnN0IGNyZWF0ZWRQYWNrYWdlID0gY3R4LmRiLmFkZFBhY2thZ2UobmV3UGFja2FnZSlcblxuICAgIGNvbnN0IGNyZWF0ZWRQYWNrYWdlUmVsZWFzZSA9IGN0eC5kYi5hZGRQYWNrYWdlUmVsZWFzZSh7XG4gICAgICBwYWNrYWdlX2lkOiBjcmVhdGVkUGFja2FnZS5wYWNrYWdlX2lkLFxuICAgICAgdmVyc2lvbjogXCIxLjAuMFwiLFxuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgaXNfbGF0ZXN0OiB0cnVlLFxuICAgICAgaXNfbG9ja2VkOiBmYWxzZSxcbiAgICB9KVxuXG4gICAgY3R4LmRiLnVwZGF0ZVBhY2thZ2UoY3JlYXRlZFBhY2thZ2UucGFja2FnZV9pZCwge1xuICAgICAgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZDogY3JlYXRlZFBhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICB9KVxuXG4gICAgY3R4LmRiLmFkZFBhY2thZ2VGaWxlKHtcbiAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogY3JlYXRlZFBhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgIGZpbGVfcGF0aDogXCJpbmRleC50c3hcIixcbiAgICAgIGNvbnRlbnRfdGV4dDogU3RyaW5nKHRzeENvbXBvbmVudCksXG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfSlcblxuICAgIHJldHVybiBjdHguanNvbih7XG4gICAgICBvazogdHJ1ZSxcbiAgICAgIHBhY2thZ2U6IGNyZWF0ZWRQYWNrYWdlIGFzIGFueSxcbiAgICB9KVxuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgaWYgKFN0cmluZyhlcnJvcikuaW5jbHVkZXMoXCJDb21wb25lbnQgbm90IGZvdW5kXCIpKSB7XG4gICAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgICBlcnJvcl9jb2RlOiBcImNvbXBvbmVudF9ub3RfZm91bmRcIixcbiAgICAgICAgbWVzc2FnZTogYENvbXBvbmVudCB3aXRoIEpMQ1BDQiBwYXJ0IG51bWJlciAke2psY3BjYl9wYXJ0X251bWJlcn0gbm90IGZvdW5kYCxcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBjdHguZXJyb3IoNTAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfZ2VuZXJhdGlvbl9mYWlsZWRcIixcbiAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZ2VuZXJhdGUgcGFja2FnZSBmcm9tIEpMQ1BDQiBwYXJ0OiAke2Vycm9yLm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKX1gLFxuICAgIH0pXG4gIH1cbn0pXG4iLCAiaW1wb3J0IHsgcGFja2FnZVNjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcbmltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyBwdWJsaWNNYXBQYWNrYWdlIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9wdWJsaWMtbWFwcGluZy9wdWJsaWMtbWFwLXBhY2thZ2VcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCIsIFwiUE9TVFwiXSxcbiAgYXV0aDogXCJvcHRpb25hbF9zZXNzaW9uXCIsXG4gIGNvbW1vblBhcmFtczogei5vYmplY3Qoe1xuICAgIHBhY2thZ2VfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBqc29uQm9keTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gICAgcGFja2FnZTogcGFja2FnZVNjaGVtYVxuICAgICAgLmV4dGVuZCh7XG4gICAgICAgIGlzX3N0YXJyZWQ6IHouYm9vbGVhbigpLFxuICAgICAgICBvcmdfb3duZXJfdHNjaXJjdWl0X2hhbmRsZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gICAgICAgIHVzZXJfcGVybWlzc2lvbnM6IHpcbiAgICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICAgIGNhbl9tYW5hZ2VfcGFja2FnZXM6IHouYm9vbGVhbigpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgICB9KVxuICAgICAgLm9wdGlvbmFsKCksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgcGFja2FnZV9pZCwgbmFtZSB9ID0gcmVxLmNvbW1vblBhcmFtc1xuICBjb25zdCBhdXRoID0gXCJhdXRoXCIgaW4gY3R4ICYmIGN0eC5hdXRoID8gY3R4LmF1dGggOiBudWxsXG5cbiAgY29uc3QgZm91bmRQYWNrYWdlID1cbiAgICAocGFja2FnZV9pZCAmJiBjdHguZGIuZ2V0UGFja2FnZUJ5SWQocGFja2FnZV9pZCkpIHx8XG4gICAgY3R4LmRiLnBhY2thZ2VzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gbmFtZSlcblxuICBpZiAoIWZvdW5kUGFja2FnZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBgUGFja2FnZSBub3QgZm91bmQgKHNlYXJjaGVkIHVzaW5nICR7SlNPTi5zdHJpbmdpZnkocmVxLmNvbW1vblBhcmFtcyl9KWAsXG4gICAgfSlcbiAgfVxuXG4gIGlmIChcbiAgICBmb3VuZFBhY2thZ2UuaXNfcHJpdmF0ZSAmJlxuICAgIGF1dGg/LmdpdGh1Yl91c2VybmFtZSAhPT0gZm91bmRQYWNrYWdlLm93bmVyX2dpdGh1Yl91c2VybmFtZVxuICApIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogYFBhY2thZ2Ugbm90IGZvdW5kIChzZWFyY2hlZCB1c2luZyAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICByZXEuY29tbW9uUGFyYW1zLFxuICAgICAgKX0pYCxcbiAgICB9KVxuICB9XG5cbiAgY29uc3Qgb3duZXJPcmcgPSBjdHguZGIuZ2V0T3JnKHsgb3JnX2lkOiBmb3VuZFBhY2thZ2Uub3duZXJfb3JnX2lkIH0pXG5cbiAgY29uc3QgY2FuTWFuYWdlUGFja2FnZSA9XG4gICAgYXV0aCAmJlxuICAgIGN0eC5kYlxuICAgICAgLmdldFN0YXRlKClcbiAgICAgIC5vcmdBY2NvdW50cy5zb21lKFxuICAgICAgICAob3JnX2FjY291bnQpID0+XG4gICAgICAgICAgb3JnX2FjY291bnQuYWNjb3VudF9pZCA9PT0gYXV0aC5hY2NvdW50X2lkICYmXG4gICAgICAgICAgb3JnX2FjY291bnQub3JnX2lkID09PSBmb3VuZFBhY2thZ2Uub3duZXJfb3JnX2lkLFxuICAgICAgKVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb2s6IHRydWUsXG4gICAgcGFja2FnZToge1xuICAgICAgLi4ucHVibGljTWFwUGFja2FnZShmb3VuZFBhY2thZ2UpLFxuICAgICAgaXNfc3RhcnJlZDogYXV0aFxuICAgICAgICA/IGN0eC5kYi5oYXNTdGFycmVkKGF1dGguYWNjb3VudF9pZCwgZm91bmRQYWNrYWdlLnBhY2thZ2VfaWQpXG4gICAgICAgIDogZmFsc2UsXG4gICAgICBvcmdfb3duZXJfdHNjaXJjdWl0X2hhbmRsZTogb3duZXJPcmc/LnRzY2lyY3VpdF9oYW5kbGUgPz8gbnVsbCxcbiAgICAgIC4uLihhdXRoXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdXNlcl9wZXJtaXNzaW9uczoge1xuICAgICAgICAgICAgICBjYW5fbWFuYWdlX3BhY2thZ2VzOiBjYW5NYW5hZ2VQYWNrYWdlID8/IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH0sXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IEFueUNpcmN1aXRFbGVtZW50IH0gZnJvbSBcImNpcmN1aXQtanNvblwiXG5pbXBvcnQge1xuICBjb252ZXJ0Q2lyY3VpdEpzb25Ub0Fzc2VtYmx5U3ZnLFxuICBjb252ZXJ0Q2lyY3VpdEpzb25Ub1BjYlN2ZyxcbiAgY29udmVydENpcmN1aXRKc29uVG9TY2hlbWF0aWNTdmcsXG59IGZyb20gXCJjaXJjdWl0LXRvLXN2Z1wiXG5pbXBvcnQgeyBjb252ZXJ0Q2lyY3VpdEpzb25Ub1NpbXBsZTNkU3ZnIH0gZnJvbSBcImNpcmN1aXQtanNvbi10by1zaW1wbGUtM2RcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHJlbmRlckFzeW5jIH0gZnJvbSBcIkByZXN2Zy9yZXN2Zy1qc1wiXG5cbi8vIERlZmluZSB0aGUgdmlldyB0eXBlcyBhbmQgZXh0ZW5zaW9uc1xuY29uc3QgVklFV19UWVBFUyA9IFtcInNjaGVtYXRpY1wiLCBcInBjYlwiLCBcImFzc2VtYmx5XCIsIFwiM2RcIl0gYXMgY29uc3RcbmNvbnN0IEVYVEVOU0lPTlMgPSBbXCJzdmdcIiwgXCJwbmdcIl0gYXMgY29uc3RcblxuLy8gQ3JlYXRlIGEgcmVnZXggcGF0dGVybiBmb3IgdGhlIHZpZXcgZm9ybWF0IHRoYXQgaW5jbHVkZXMgb3B0aW9uYWwgd2lkdGggc3VmZml4XG5jb25zdCB2aWV3Rm9ybWF0UGF0dGVybiA9IG5ldyBSZWdFeHAoXG4gIGBeKCR7VklFV19UWVBFUy5qb2luKFwifFwiKX0pLT8oXFxcXGQrdyk/XFxcXC4oJHtFWFRFTlNJT05TLmpvaW4oXCJ8XCIpfSkkYCxcbilcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgYXV0aDogXCJub25lXCIsXG4gIHJvdXRlUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgb3duZXJfZ2l0aHViX3VzZXJuYW1lOiB6LnN0cmluZygpLFxuICAgIHVuc2NvcGVkX25hbWU6IHouc3RyaW5nKCksXG4gICAgdmlld19mb3JtYXQ6IHouc3RyaW5nKCkucmVnZXgodmlld0Zvcm1hdFBhdHRlcm4sIHtcbiAgICAgIG1lc3NhZ2U6IGBJbnZhbGlkIHZpZXcgZm9ybWF0LiBNdXN0IGJlIG9uZSBvZjogJHtWSUVXX1RZUEVTLmpvaW4oXCIsIFwiKX0gd2l0aCBvcHRpb25hbCB3aWR0aCBzdWZmaXggKGUuZy4gLTgwMHcpLiR7RVhURU5TSU9OUy5qb2luKFwiIG9yIFwiKX1gLFxuICAgIH0pLFxuICB9KSxcbiAgcXVlcnlQYXJhbXM6IHoub2JqZWN0KHtcbiAgICBmc19zaGE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIHJhd1Jlc3BvbnNlOiB0cnVlLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgb3duZXJfZ2l0aHViX3VzZXJuYW1lLCB1bnNjb3BlZF9uYW1lLCB2aWV3X2Zvcm1hdCB9ID0gcmVxLnJvdXRlUGFyYW1zXG4gIGNvbnN0IHsgZnNfc2hhIH0gPSByZXEucXVlcnlcblxuICAvLyBQYXJzZSB0aGUgdmlldyBmb3JtYXRcbiAgY29uc3QgW291dHB1dFR5cGUsIGZvcm1hdF0gPSB2aWV3X2Zvcm1hdC5zcGxpdChcIi5cIilcblxuICAvLyBHZXQgdGhlIHBhY2thZ2VcbiAgY29uc3QgcGtnID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoXG4gICAgKHApID0+XG4gICAgICBwLm93bmVyX2dpdGh1Yl91c2VybmFtZSA9PT0gb3duZXJfZ2l0aHViX3VzZXJuYW1lICYmXG4gICAgICBwLnVuc2NvcGVkX25hbWUgPT09IHVuc2NvcGVkX25hbWUsXG4gIClcblxuICAvLyBJZiBwYWNrYWdlIGlzIG5vdCBmb3VuZCwgcmV0dXJuIDQwNFxuICBpZiAoIXBrZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlBhY2thZ2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIEdldCB0aGUgcGFja2FnZSByZWxlYXNlIGZvciB0aGUgZ2l2ZW4gaGFzaCB2YWx1ZVxuICBjb25zdCBwa2dfcmVsZWFzZSA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAocHIpID0+IHByLnBhY2thZ2VfaWQgPT09IHBrZy5wYWNrYWdlX2lkICYmIHByLmZzX3NoYSA9PT0gZnNfc2hhLFxuICApXG5cbiAgaWYgKCFwa2dfcmVsZWFzZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBHZXQgdGhlIGNpcmN1aXQgSlNPTiBmcm9tIHRoZSBwYWNrYWdlIGZpbGVzXG4gIGNvbnN0IGNpcmN1aXRfanNvbl9maWxlID0gY3R4LmRiLnBhY2thZ2VGaWxlcy5maW5kKFxuICAgIChwZikgPT5cbiAgICAgIHBmLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGtnX3JlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkICYmXG4gICAgICAocGYuZmlsZV9wYXRoID09PSBcImNpcmN1aXQuanNvblwiIHx8XG4gICAgICAgIHBmLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9jaXJjdWl0Lmpzb25cIiksXG4gIClcblxuICBpZiAoIWNpcmN1aXRfanNvbl9maWxlPy5jb250ZW50X3RleHQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJjaXJjdWl0X2pzb25fbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIkNpcmN1aXQgSlNPTiBub3QgZm91bmQgZm9yIHBhY2thZ2VcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgY2lyY3VpdF9qc29uID0gSlNPTi5wYXJzZShjaXJjdWl0X2pzb25fZmlsZS5jb250ZW50X3RleHQpXG5cbiAgLy8gQ29udmVydCBjaXJjdWl0IGpzb24gdG8gc3ZnXG4gIGxldCBzdmcgPSBcIlwiXG4gIGlmIChvdXRwdXRUeXBlID09PSBcInNjaGVtYXRpY1wiKSB7XG4gICAgc3ZnID0gY29udmVydENpcmN1aXRKc29uVG9TY2hlbWF0aWNTdmcoY2lyY3VpdF9qc29uIGFzIEFueUNpcmN1aXRFbGVtZW50W10pXG4gIH0gZWxzZSBpZiAob3V0cHV0VHlwZSA9PT0gXCJwY2JcIikge1xuICAgIHN2ZyA9IGNvbnZlcnRDaXJjdWl0SnNvblRvUGNiU3ZnKGNpcmN1aXRfanNvbiBhcyBBbnlDaXJjdWl0RWxlbWVudFtdKVxuICB9IGVsc2UgaWYgKG91dHB1dFR5cGUgPT09IFwiYXNzZW1ibHlcIikge1xuICAgIHN2ZyA9IGNvbnZlcnRDaXJjdWl0SnNvblRvQXNzZW1ibHlTdmcoY2lyY3VpdF9qc29uIGFzIEFueUNpcmN1aXRFbGVtZW50W10pXG4gIH0gZWxzZSBpZiAob3V0cHV0VHlwZSA9PT0gXCIzZFwiKSB7XG4gICAgc3ZnID0gYXdhaXQgY29udmVydENpcmN1aXRKc29uVG9TaW1wbGUzZFN2ZyhjaXJjdWl0X2pzb24sIHtcbiAgICAgIGJhY2tncm91bmQ6IHtcbiAgICAgICAgY29sb3I6IFwiI2ZmZlwiLFxuICAgICAgICBvcGFjaXR5OiAwLjAsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdFpvb21NdWx0aXBsaWVyOiAxLjEsXG4gICAgfSlcbiAgfVxuICBpZiAoZm9ybWF0ID09PSBcInN2Z1wiKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShzdmcsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJpbWFnZS9zdmcreG1sXCIsXG4gICAgICAgIFwiQ2FjaGUtQ29udHJvbFwiOiBcInB1YmxpYywgbWF4LWFnZT04NjQwMCwgcy1tYXhhZ2U9ODY0MDBcIixcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHBuZ0J1ZmZlciA9IGF3YWl0IHJlbmRlckFzeW5jKHN2ZylcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShwbmdCdWZmZXIuYXNQbmcoKS5idWZmZXIgYXMgQXJyYXlCdWZmZXIsIHtcbiAgICBoZWFkZXJzOiB7XG4gICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImltYWdlL3BuZ1wiLFxuICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwicHVibGljLCBtYXgtYWdlPTg2NDAwLCBzLW1heGFnZT04NjQwMFwiLFxuICAgIH0sXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBwYWNrYWdlU2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgcHVibGljTWFwUGFja2FnZSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcHVibGljLW1hcHBpbmcvcHVibGljLW1hcC1wYWNrYWdlXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgYXV0aDogXCJub25lXCIsXG4gIHF1ZXJ5UGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgbGltaXQ6IHouc3RyaW5nKCkucmVnZXgoL15cXGQrJC8pLnRyYW5zZm9ybShOdW1iZXIpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBwYWNrYWdlczogei5hcnJheShwYWNrYWdlU2NoZW1hKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgbGltaXQgPSByZXEucXVlcnkubGltaXQgfHwgNTBcblxuICAvLyBHZXQgYWxsIHBhY2thZ2VzIHRoYXQgYXJlIG5vdCBzbmlwcGV0c1xuICBjb25zdCBwYWNrYWdlcyA9IGN0eC5kYi5wYWNrYWdlc1xuICAgIC5maWx0ZXIoKHBrZykgPT4gIXBrZy5pc19zbmlwcGV0KVxuICAgIC5zb3J0KFxuICAgICAgKGEsIGIpID0+XG4gICAgICAgIG5ldyBEYXRlKGIuY3JlYXRlZF9hdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYS5jcmVhdGVkX2F0KS5nZXRUaW1lKCksXG4gICAgKVxuICAgIC5zbGljZSgwLCBsaW1pdClcbiAgICAubWFwKChwa2cpID0+IHB1YmxpY01hcFBhY2thZ2UocGtnKSlcblxuICByZXR1cm4gY3R4Lmpzb24oeyBwYWNrYWdlcyB9KVxufSlcbiIsICJpbXBvcnQgeyBwYWNrYWdlU2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiLCBcIlBPU1RcIl0sXG4gIGF1dGg6IFwibm9uZVwiLFxuICBjb21tb25QYXJhbXM6IHoub2JqZWN0KHt9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICAgIHBhY2thZ2VzOiB6LmFycmF5KHBhY2thZ2VTY2hlbWEpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICAvLyBHZXQgYWxsIHBhY2thZ2VzIGFuZCB0aGVpciBzdGFyIGNvdW50c1xuICBjb25zdCBwYWNrYWdlc1dpdGhTdGFycyA9IGN0eC5kYi5wYWNrYWdlcy5tYXAoKHBrZykgPT4ge1xuICAgIGNvbnN0IHN0YXJDb3VudCA9IGN0eC5kYi5hY2NvdW50UGFja2FnZXMuZmlsdGVyKFxuICAgICAgKGFwKSA9PiBhcC5wYWNrYWdlX2lkID09PSBwa2cucGFja2FnZV9pZCAmJiBhcC5pc19zdGFycmVkLFxuICAgICkubGVuZ3RoXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucGtnLFxuICAgICAgc3Rhcl9jb3VudDogc3RhckNvdW50LFxuICAgIH1cbiAgfSlcblxuICAvLyBGaWx0ZXIgb3V0IHBhY2thZ2VzIHdpdGggbm8gc3RhcnMgYW5kIHNvcnQgYnkgc3RhciBjb3VudFxuICBjb25zdCB0cmVuZGluZ1BhY2thZ2VzID0gY3R4LmRiLnBhY2thZ2VzXG4gICAgLmZpbHRlcigocCkgPT4gcC5zdGFyX2NvdW50ID4gMClcbiAgICAuc29ydCgoYSwgYikgPT4gYi5zdGFyX2NvdW50IC0gYS5zdGFyX2NvdW50KVxuICAgIC5zbGljZSgwLCA1MClcblxuICAvLyBSYW5kb21pemUgdGhlIG9yZGVyIG9mIHRoZSBwYWNrYWdlcywgdGhlbiBwaWNrIHRoZSBmaXJzdCAxMFxuICBjb25zdCByYW5kb21pemVkUGFja2FnZXMgPSB0cmVuZGluZ1BhY2thZ2VzLnNvcnQoKCkgPT4gTWF0aC5yYW5kb20oKSAtIDAuNSlcbiAgY29uc3Qgc2VsZWN0ZWRQYWNrYWdlcyA9IHJhbmRvbWl6ZWRQYWNrYWdlcy5zbGljZSgwLCAxMClcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICAgIHBhY2thZ2VzOiBzZWxlY3RlZFBhY2thZ2VzLm1hcCgocCkgPT4gKHtcbiAgICAgIC4uLnAsXG4gICAgICBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkOiBwLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgfHwgbnVsbCxcbiAgICB9KSksXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHBhY2thZ2VTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCIsIFwiUE9TVFwiXSxcbiAgYXV0aDogXCJvcHRpb25hbF9zZXNzaW9uXCIsXG4gIGNvbW1vblBhcmFtczogei5vYmplY3Qoe1xuICAgIGNyZWF0b3JfYWNjb3VudF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG93bmVyX2dpdGh1Yl91c2VybmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG93bmVyX3RzY2lyY3VpdF9oYW5kbGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBpc193cml0YWJsZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBvd25lcl9vcmdfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgbGltaXQ6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gICAgcGFja2FnZXM6IHouYXJyYXkoXG4gICAgICBwYWNrYWdlU2NoZW1hLmV4dGVuZCh7XG4gICAgICAgIHN0YXJyZWRfYXQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICAgICAgdXNlcl9wZXJtaXNzaW9uczogelxuICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgY2FuX21hbmFnZV9wYWNrYWdlczogei5ib29sZWFuKCksXG4gICAgICAgICAgfSlcbiAgICAgICAgICAub3B0aW9uYWwoKSxcbiAgICAgIH0pLFxuICAgICksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjcmVhdG9yX2FjY291bnRfaWQsXG4gICAgb3duZXJfZ2l0aHViX3VzZXJuYW1lLFxuICAgIG93bmVyX3RzY2lyY3VpdF9oYW5kbGUsXG4gICAgbmFtZSxcbiAgICBpc193cml0YWJsZSxcbiAgICBvd25lcl9vcmdfaWQsXG4gICAgbGltaXQsXG4gIH0gPSByZXEuY29tbW9uUGFyYW1zXG5cbiAgY29uc3QgYXV0aCA9IFwiYXV0aFwiIGluIGN0eCAmJiBjdHguYXV0aCA/IGN0eC5hdXRoIDogbnVsbFxuXG4gIGlmIChcbiAgICAhYXV0aCAmJlxuICAgICFpc193cml0YWJsZSAmJlxuICAgICFjcmVhdG9yX2FjY291bnRfaWQgJiZcbiAgICAhb3duZXJfZ2l0aHViX3VzZXJuYW1lICYmXG4gICAgIW93bmVyX3RzY2lyY3VpdF9oYW5kbGUgJiZcbiAgICAhb3duZXJfb3JnX2lkXG4gICkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludmFsaWRfcmVxdWVzdFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgbXVzdCBwcm92aWRlIHNvbWUgZmlsdGVyaW5nIHBhcmFtZXRlcnMgb3IgYmUgbG9nZ2VkIGluXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIEhlbHBlciB0byBjaGVjayBpZiB1c2VyIGNhbiBtYW5hZ2UgYSBwYWNrYWdlXG4gIGNvbnN0IGNhbk1hbmFnZVBhY2thZ2UgPSAocGtnOiBhbnkpID0+IHtcbiAgICBpZiAoIWF1dGgpIHJldHVybiBmYWxzZVxuICAgIC8vIENoZWNrIGlmIHVzZXIgaXMgYSBtZW1iZXIgb2YgdGhlIHBhY2thZ2UncyBvd25lciBvcmdcbiAgICBjb25zdCBzdGF0ZSA9IGN0eC5kYi5nZXRTdGF0ZSgpXG4gICAgcmV0dXJuIHN0YXRlLm9yZ0FjY291bnRzLnNvbWUoXG4gICAgICAob2EpID0+XG4gICAgICAgIG9hLmFjY291bnRfaWQgPT09IGF1dGguYWNjb3VudF9pZCAmJiBvYS5vcmdfaWQgPT09IHBrZy5vd25lcl9vcmdfaWQsXG4gICAgKVxuICB9XG5cbiAgbGV0IHBhY2thZ2VzID0gY3R4LmRiLnBhY2thZ2VzXG5cbiAgLy8gQXBwbHkgZmlsdGVyc1xuICBpZiAoY3JlYXRvcl9hY2NvdW50X2lkKSB7XG4gICAgcGFja2FnZXMgPSBwYWNrYWdlcy5maWx0ZXIoXG4gICAgICAocCkgPT4gcC5jcmVhdG9yX2FjY291bnRfaWQgPT09IGNyZWF0b3JfYWNjb3VudF9pZCxcbiAgICApXG4gIH1cbiAgaWYgKG93bmVyX2dpdGh1Yl91c2VybmFtZSkge1xuICAgIHBhY2thZ2VzID0gcGFja2FnZXMuZmlsdGVyKFxuICAgICAgKHApID0+IHAub3duZXJfZ2l0aHViX3VzZXJuYW1lID09PSBvd25lcl9naXRodWJfdXNlcm5hbWUsXG4gICAgKVxuICB9XG4gIGlmIChvd25lcl90c2NpcmN1aXRfaGFuZGxlKSB7XG4gICAgY29uc3Qgb3JnID0gY3R4LmRiLm9yZ2FuaXphdGlvbnMuZmluZChcbiAgICAgIChvKSA9PiBvLnRzY2lyY3VpdF9oYW5kbGUgPT09IG93bmVyX3RzY2lyY3VpdF9oYW5kbGUsXG4gICAgKVxuICAgIGlmIChvcmcpIHtcbiAgICAgIHBhY2thZ2VzID0gcGFja2FnZXMuZmlsdGVyKChwKSA9PiBwLm93bmVyX29yZ19pZCA9PT0gb3JnLm9yZ19pZClcbiAgICB9XG4gIH1cbiAgaWYgKG5hbWUpIHtcbiAgICBwYWNrYWdlcyA9IHBhY2thZ2VzLmZpbHRlcigocCkgPT4gcC5uYW1lID09PSBuYW1lKVxuICB9XG4gIGlmIChvd25lcl9vcmdfaWQpIHtcbiAgICBwYWNrYWdlcyA9IHBhY2thZ2VzLmZpbHRlcigocCkgPT4gcC5vd25lcl9vcmdfaWQgPT09IG93bmVyX29yZ19pZClcbiAgfVxuICBpZiAobGltaXQpIHtcbiAgICBwYWNrYWdlcyA9IHBhY2thZ2VzLnNsaWNlKDAsIGxpbWl0KVxuICB9XG4gIGlmIChpc193cml0YWJsZSAmJiBhdXRoKSB7XG4gICAgcGFja2FnZXMgPSBwYWNrYWdlcy5maWx0ZXIoY2FuTWFuYWdlUGFja2FnZSlcbiAgfVxuXG4gIC8vIEdldCBzdGFyIHRpbWVzdGFtcHMgZm9yIGF1dGhlbnRpY2F0ZWQgdXNlclxuICBjb25zdCBzdGFyVGltZXN0YW1wcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KClcbiAgaWYgKGF1dGgpIHtcbiAgICBjdHguZGIuYWNjb3VudFBhY2thZ2VzXG4gICAgICAuZmlsdGVyKChhcCkgPT4gYXAuYWNjb3VudF9pZCA9PT0gYXV0aC5hY2NvdW50X2lkICYmIGFwLmlzX3N0YXJyZWQpXG4gICAgICAuZm9yRWFjaCgoYXApID0+IHtcbiAgICAgICAgc3RhclRpbWVzdGFtcHMuc2V0KGFwLnBhY2thZ2VfaWQsIGFwLnVwZGF0ZWRfYXQpXG4gICAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgICBwYWNrYWdlczogcGFja2FnZXMubWFwKChwKSA9PiAoe1xuICAgICAgLi4ucCxcbiAgICAgIGxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQ6IHAubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCB8fCBudWxsLFxuICAgICAgc3RhcnJlZF9hdDogc3RhclRpbWVzdGFtcHMuZ2V0KHAucGFja2FnZV9pZCkgfHwgbnVsbCxcbiAgICAgIC4uLihhdXRoXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdXNlcl9wZXJtaXNzaW9uczoge1xuICAgICAgICAgICAgICBjYW5fbWFuYWdlX3BhY2thZ2VzOiBjYW5NYW5hZ2VQYWNrYWdlKHApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH0pKSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogelxuICAgIC5vYmplY3Qoe1xuICAgICAgcGFja2FnZV9pZDogei5zdHJpbmcoKSxcbiAgICB9KVxuICAgIC5vcih6Lm9iamVjdCh7IG5hbWU6IHouc3RyaW5nKCkgfSkpLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGxldCBwYWNrYWdlSWQ6IHN0cmluZ1xuXG4gIC8vIEdldCBwYWNrYWdlIElEIGVpdGhlciBkaXJlY3RseSBvciBieSBuYW1lXG4gIGlmIChcInBhY2thZ2VfaWRcIiBpbiByZXEuanNvbkJvZHkpIHtcbiAgICBjb25zdCBib2R5ID0gcmVxLmpzb25Cb2R5XG4gICAgcGFja2FnZUlkID0gYm9keS5wYWNrYWdlX2lkXG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgbmFtZSBpcyBwcm92aWRlZCwgbG9vayB1cCB0aGUgcGFja2FnZV9pZFxuICAgIGNvbnN0IGJvZHkgPSByZXEuanNvbkJvZHlcbiAgICBjb25zdCBwYWNrYWdlRGF0YSA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKChwa2cpID0+IHBrZy5uYW1lID09PSBib2R5Lm5hbWUpXG5cbiAgICBpZiAoIXBhY2thZ2VEYXRhKSB7XG4gICAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2Vfbm90X2ZvdW5kXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSBub3QgZm91bmRcIixcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcGFja2FnZUlkID0gcGFja2FnZURhdGEucGFja2FnZV9pZFxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgcGFja2FnZSBleGlzdHMgKGV4dHJhIGNoZWNrIGZvciBJRC1iYXNlZCBsb29rdXApXG4gIGNvbnN0IHBrZyA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKChwKSA9PiBwLnBhY2thZ2VfaWQgPT09IHBhY2thZ2VJZClcblxuICBpZiAoIXBrZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlBhY2thZ2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGFscmVhZHkgc3RhcnJlZFxuICBjb25zdCBleGlzdGluZyA9IGN0eC5kYi5hY2NvdW50UGFja2FnZXMuZmluZChcbiAgICAoYXApID0+XG4gICAgICBhcC5hY2NvdW50X2lkID09PSBjdHguYXV0aC5hY2NvdW50X2lkICYmIGFwLnBhY2thZ2VfaWQgPT09IHBhY2thZ2VJZCxcbiAgKVxuXG4gIGlmICghZXhpc3Rpbmc/LmlzX3N0YXJyZWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJub3Rfc3RhcnJlZFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgaGF2ZSBub3Qgc3RhcnJlZCB0aGlzIHBhY2thZ2VcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gVXBkYXRlIHRoZSBwYWNrYWdlJ3Mgc3RhciBjb3VudFxuICBwa2cuc3Rhcl9jb3VudCA9IE1hdGgubWF4KDAsIChwa2cuc3Rhcl9jb3VudCB8fCAwKSAtIDEpXG5cbiAgLy8gUmVtb3ZlIHN0YXIgYnkgdXBkYXRpbmcgaXNfc3RhcnJlZCB0byBmYWxzZVxuICBleGlzdGluZy5pc19zdGFycmVkID0gZmFsc2VcbiAgZXhpc3RpbmcudXBkYXRlZF9hdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb2s6IHRydWUsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBwYWNrYWdlU2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJub25lXCIsXG4gIGpzb25Cb2R5OiB6Lm9iamVjdCh7XG4gICAgcXVlcnk6IHouc3RyaW5nKCksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gICAgcGFja2FnZXM6IHouYXJyYXkocGFja2FnZVNjaGVtYSksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgcXVlcnkgfSA9IHJlcS5qc29uQm9keVxuICBjb25zdCBwYWNrYWdlcyA9IGN0eC5kYi5zZWFyY2hQYWNrYWdlcyhxdWVyeSlcbiAgcmV0dXJuIGN0eC5qc29uKHsgcGFja2FnZXMsIG9rOiB0cnVlIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBwYWNrYWdlX2lkOiB6LnN0cmluZygpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgc3VjY2Vzczogei5ib29sZWFuKCksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgcGFja2FnZV9pZCB9ID0gcmVxLmpzb25Cb2R5XG5cbiAgY29uc3QgcGFja2FnZV9pbmZvID0gY3R4LmRiLmdldFBhY2thZ2VCeUlkKHBhY2thZ2VfaWQpXG4gIGlmICghcGFja2FnZV9pbmZvKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgaWYgKHBhY2thZ2VfaW5mby5vd25lcl9naXRodWJfdXNlcm5hbWUgIT09IGN0eC5hdXRoLmdpdGh1Yl91c2VybmFtZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInVuYXV0aG9yaXplZFwiLFxuICAgICAgbWVzc2FnZTogXCJPbmx5IHRoZSBwYWNrYWdlIG93bmVyIGNhbiB1cGRhdGUgQUkgZGVzY3JpcHRpb25cIixcbiAgICB9KVxuICB9XG5cbiAgY3R4LmRiLnVwZGF0ZVBhY2thZ2UocGFja2FnZV9pZCwge1xuICAgIGFpX2Rlc2NyaXB0aW9uOiBcIk5ldyBhaSBkZXNjcmlwdGlvblwiLFxuICAgIGFpX3VzYWdlX2luc3RydWN0aW9uczogXCJOZXcgYWkgdXNhZ2UgaW5zdHJ1Y3Rpb25zXCIsXG4gIH0pXG5cbiAgcmV0dXJuIGN0eC5qc29uKHsgc3VjY2VzczogdHJ1ZSB9KVxufSlcbiIsICJpbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBwYWNrYWdlU2NoZW1hIH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCIuLi8uLi8uLi9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogelxuICAgIC5vYmplY3Qoe1xuICAgICAgcGFja2FnZV9pZDogei5zdHJpbmcoKSxcbiAgICAgIG5hbWU6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5yZWdleChcbiAgICAgICAgICAvXltAYS16QS1aMC05LV9cXC9dKyQvLFxuICAgICAgICAgIFwiUGFja2FnZSBuYW1lIGNhbiBvbmx5IGNvbnRhaW4gbGV0dGVycywgbnVtYmVycywgaHlwaGVucywgdW5kZXJzY29yZXMsIGFuZCBmb3J3YXJkIHNsYXNoZXNcIixcbiAgICAgICAgKVxuICAgICAgICAudHJhbnNmb3JtKChuYW1lKSA9PiBuYW1lLnJlcGxhY2UoL15ALywgXCJcIikpXG4gICAgICAgIC5vcHRpb25hbCgpLFxuICAgICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgIHdlYnNpdGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgIGdpdGh1Yl9yZXBvX2Z1bGxfbmFtZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gICAgICBpc19wcml2YXRlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgICAgaXNfdW5saXN0ZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgICBkZWZhdWx0X3ZpZXc6IHouZW51bShbXCJmaWxlc1wiLCBcIjNkXCIsIFwicGNiXCIsIFwic2NoZW1hdGljXCJdKS5vcHRpb25hbCgpLFxuICAgICAgYWxsb3dfcHJfcHJldmlld3M6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAudHJhbnNmb3JtKChkYXRhKSA9PiAoe1xuICAgICAgLi4uZGF0YSxcbiAgICAgIGlzX3VubGlzdGVkOiBkYXRhLmlzX3ByaXZhdGUgPyB0cnVlIDogZGF0YS5pc191bmxpc3RlZCxcbiAgICB9KSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgICBwYWNrYWdlOiBwYWNrYWdlU2NoZW1hLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7XG4gICAgcGFja2FnZV9pZCxcbiAgICBuYW1lLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIHdlYnNpdGUsXG4gICAgaXNfcHJpdmF0ZSxcbiAgICBpc191bmxpc3RlZCxcbiAgICBnaXRodWJfcmVwb19mdWxsX25hbWUsXG4gICAgZGVmYXVsdF92aWV3LFxuICAgIGFsbG93X3ByX3ByZXZpZXdzLFxuICB9ID0gcmVxLmpzb25Cb2R5XG5cbiAgY29uc3QgcGFja2FnZUluZGV4ID0gY3R4LmRiLnBhY2thZ2VzLmZpbmRJbmRleChcbiAgICAocCkgPT4gcC5wYWNrYWdlX2lkID09PSBwYWNrYWdlX2lkLFxuICApXG5cbiAgaWYgKHBhY2thZ2VJbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBleGlzdGluZ1BhY2thZ2UgPSBjdHguZGIucGFja2FnZXNbcGFja2FnZUluZGV4XVxuXG4gIC8vIENoZWNrIGlmIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gdXBkYXRlIHRoZSBwYWNrYWdlXG4gIGlmIChleGlzdGluZ1BhY2thZ2Uub3duZXJfZ2l0aHViX3VzZXJuYW1lICE9PSBjdHguYXV0aC5naXRodWJfdXNlcm5hbWUpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMywge1xuICAgICAgZXJyb3JfY29kZTogXCJmb3JiaWRkZW5cIixcbiAgICAgIG1lc3NhZ2U6IFwiWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byB1cGRhdGUgdGhpcyBwYWNrYWdlXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBkdXBsaWNhdGUgcGFja2FnZSBuYW1lIGlmIG5hbWUgaXMgYmVpbmcgdXBkYXRlZFxuICBpZiAobmFtZSkge1xuICAgIGNvbnN0IG5ld0Z1bGxOYW1lID0gYCR7Y3R4LmF1dGguZ2l0aHViX3VzZXJuYW1lfS8ke25hbWV9YFxuICAgIGNvbnN0IGR1cGxpY2F0ZVBhY2thZ2UgPSBjdHguZGIucGFja2FnZXMuZmluZChcbiAgICAgIChwKSA9PiBwLm5hbWUgPT09IG5ld0Z1bGxOYW1lICYmIHAucGFja2FnZV9pZCAhPT0gcGFja2FnZV9pZCxcbiAgICApXG4gICAgaWYgKGR1cGxpY2F0ZVBhY2thZ2UpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9hbHJlYWR5X2V4aXN0c1wiLFxuICAgICAgICBtZXNzYWdlOiBcIkEgcGFja2FnZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0c1wiLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBjb25zdCB1cGRhdGVkUGFja2FnZSA9IGN0eC5kYi51cGRhdGVQYWNrYWdlKHBhY2thZ2VfaWQsIHtcbiAgICBuYW1lOiBuYW1lID8gYCR7Y3R4LmF1dGguZ2l0aHViX3VzZXJuYW1lfS8ke25hbWV9YCA6IGV4aXN0aW5nUGFja2FnZS5uYW1lLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiA/PyBleGlzdGluZ1BhY2thZ2UuZGVzY3JpcHRpb24sXG4gICAgdW5zY29wZWRfbmFtZTogbmFtZSA/PyBleGlzdGluZ1BhY2thZ2UudW5zY29wZWRfbmFtZSxcbiAgICB3ZWJzaXRlOiB3ZWJzaXRlID8/IGV4aXN0aW5nUGFja2FnZS53ZWJzaXRlLFxuICAgIGdpdGh1Yl9yZXBvX2Z1bGxfbmFtZTpcbiAgICAgIGdpdGh1Yl9yZXBvX2Z1bGxfbmFtZSA9PT0gbnVsbFxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiAoZ2l0aHViX3JlcG9fZnVsbF9uYW1lID8/IGV4aXN0aW5nUGFja2FnZS5naXRodWJfcmVwb19mdWxsX25hbWUpLFxuICAgIGlzX3ByaXZhdGU6IGlzX3ByaXZhdGUgPz8gZXhpc3RpbmdQYWNrYWdlLmlzX3ByaXZhdGUsXG4gICAgaXNfcHVibGljOlxuICAgICAgaXNfcHJpdmF0ZSAhPT0gdW5kZWZpbmVkID8gIWlzX3ByaXZhdGUgOiBleGlzdGluZ1BhY2thZ2UuaXNfcHVibGljLFxuICAgIGlzX3VubGlzdGVkOiBpc191bmxpc3RlZCA/PyBleGlzdGluZ1BhY2thZ2UuaXNfdW5saXN0ZWQsXG4gICAgZGVmYXVsdF92aWV3OiBkZWZhdWx0X3ZpZXcgPz8gZXhpc3RpbmdQYWNrYWdlLmRlZmF1bHRfdmlldyxcbiAgICB1cGRhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgYWxsb3dfcHJfcHJldmlld3M6IGFsbG93X3ByX3ByZXZpZXdzID8/IGV4aXN0aW5nUGFja2FnZS5hbGxvd19wcl9wcmV2aWV3cyxcbiAgfSlcblxuICBpZiAoIXVwZGF0ZWRQYWNrYWdlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig1MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwidXBkYXRlX2ZhaWxlZFwiLFxuICAgICAgbWVzc2FnZTogXCJGYWlsZWQgdG8gdXBkYXRlIHBhY2thZ2VcIixcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgICBwYWNrYWdlOiB1cGRhdGVkUGFja2FnZSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuY29uc3QgUFJPWFlfSEVBREVSUyA9IFtcbiAgXCJYLVRhcmdldC1VcmxcIixcbiAgXCJYLVNlbmRlci1PcmlnaW5cIixcbiAgXCJYLVNlbmRlci1Ib3N0XCIsXG4gIFwiWC1TZW5kZXItUmVmZXJlclwiLFxuICBcIlgtU2VuZGVyLVVzZXItQWdlbnRcIixcbiAgXCJYLVNlbmRlci1Db29raWVcIixcbl1cblxuY29uc3QgQUxMT1dFRF9ET01BSU5TOiBBcnJheTx7IGRvbWFpbjogc3RyaW5nOyByb3V0ZXM/OiBzdHJpbmdbXSB9PiA9IFtcbiAgeyBkb21haW46IFwiZWFzeWVkYS5jb21cIiB9LFxuXVxuXG5mdW5jdGlvbiBpc0FsbG93ZWREb21haW4odXJsOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IGhvc3RuYW1lLCBwYXRobmFtZSwgcG9ydCB9ID0gbmV3IFVSTCh1cmwpXG4gICAgY29uc3QgYWxsb3dlZERvbWFpbiA9IEFMTE9XRURfRE9NQUlOUy5maW5kKFxuICAgICAgKGRvbWFpbikgPT4gZG9tYWluLmRvbWFpbiA9PT0gaG9zdG5hbWUsXG4gICAgKVxuXG4gICAgaWYgKGFsbG93ZWREb21haW4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgIWFsbG93ZWREb21haW4ucm91dGVzIHx8XG4gICAgICAgIGFsbG93ZWREb21haW4ucm91dGVzLnNvbWUoKHJvdXRlKSA9PiBwYXRobmFtZS5zdGFydHNXaXRoKHJvdXRlKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBob3N0bmFtZSA9PT0gXCJsb2NhbGhvc3RcIiB8fCAoaG9zdG5hbWUgPT09IFwiMTI3LjAuMC4xXCIgJiYgcG9ydClcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiLCBcIlBPU1RcIiwgXCJQVVRcIiwgXCJERUxFVEVcIiwgXCJQQVRDSFwiLCBcIkhFQURcIiwgXCJPUFRJT05TXCJdLFxuICBqc29uUmVzcG9uc2U6IHouYW55KCksXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGlmIChyZXEuaGVhZGVycy5nZXQoXCJYLXByb3hpZWRcIikpIHtcbiAgICByZXR1cm4gY3R4Lmpzb24oXG4gICAgICB7IGVycm9yOiBcIlJlY3Vyc2l2ZSBwcm94eSBjYWxscyBhcmUgbm90IGFsbG93ZWRcIiB9LFxuICAgICAgeyBzdGF0dXM6IDQwMyB9LFxuICAgIClcbiAgfVxuXG4gIGNvbnN0IHRhcmdldFVybCA9IHJlcS5oZWFkZXJzLmdldChcIlgtVGFyZ2V0LVVybFwiKVxuXG4gIGlmICghdGFyZ2V0VXJsKSB7XG4gICAgcmV0dXJuIGN0eC5qc29uKFxuICAgICAgeyBlcnJvcjogXCJYLVRhcmdldC1VcmwgaGVhZGVyIGlzIHJlcXVpcmVkXCIgfSxcbiAgICAgIHsgc3RhdHVzOiA0MDAgfSxcbiAgICApXG4gIH1cblxuICBpZiAoIWlzQWxsb3dlZERvbWFpbih0YXJnZXRVcmwpKSB7XG4gICAgcmV0dXJuIGN0eC5qc29uKHsgZXJyb3I6IFwiRG9tYWluIG5vdCBhbGxvd2VkXCIgfSwgeyBzdGF0dXM6IDQwMyB9KVxuICB9XG5cbiAgbGV0IGJvZHk6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBpZiAoW1wiUE9TVFwiLCBcIlBVVFwiLCBcIlBBVENIXCJdLmluY2x1ZGVzKHJlcS5tZXRob2QpKSB7XG4gICAgYm9keSA9IGF3YWl0IHJlcS5jbG9uZSgpLnRleHQoKVxuICB9XG5cbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHJlcS5oZWFkZXJzKVxuXG4gIGNvbnN0IHNlbmRlck9yaWdpbiA9IHJlcS5oZWFkZXJzLmdldChcIlgtU2VuZGVyLU9yaWdpblwiKVxuICBpZiAoc2VuZGVyT3JpZ2luKSB7XG4gICAgaGVhZGVycy5zZXQoXCJPcmlnaW5cIiwgc2VuZGVyT3JpZ2luKVxuICB9XG5cbiAgY29uc3Qgc2VuZGVySG9zdCA9IHJlcS5oZWFkZXJzLmdldChcIlgtU2VuZGVyLUhvc3RcIilcbiAgaWYgKHNlbmRlckhvc3QpIHtcbiAgICBjb25zdCBob3N0VmFsdWUgPSBzZW5kZXJIb3N0LnJlcGxhY2UoL15odHRwcz86XFwvXFwvLywgXCJcIilcbiAgICBoZWFkZXJzLnNldChcIkhvc3RcIiwgaG9zdFZhbHVlKVxuICAgIGhlYWRlcnMuc2V0KFwiYXV0aG9yaXR5XCIsIGhvc3RWYWx1ZSlcbiAgfVxuXG4gIGNvbnN0IHNlbmRlclJlZmVyZXIgPSByZXEuaGVhZGVycy5nZXQoXCJYLVNlbmRlci1SZWZlcmVyXCIpXG4gIGlmIChzZW5kZXJSZWZlcmVyKSB7XG4gICAgaGVhZGVycy5zZXQoXCJSZWZlcmVyXCIsIHNlbmRlclJlZmVyZXIpXG4gIH1cblxuICBjb25zdCBzZW5kZXJVc2VyQWdlbnQgPSByZXEuaGVhZGVycy5nZXQoXCJYLVNlbmRlci1Vc2VyLUFnZW50XCIpXG4gIGlmIChzZW5kZXJVc2VyQWdlbnQpIHtcbiAgICBoZWFkZXJzLnNldChcIlVzZXItQWdlbnRcIiwgc2VuZGVyVXNlckFnZW50KVxuICB9XG5cbiAgY29uc3Qgc2VuZGVyQ29va2llID0gcmVxLmhlYWRlcnMuZ2V0KFwiWC1TZW5kZXItQ29va2llXCIpXG4gIGlmIChzZW5kZXJDb29raWUpIHtcbiAgICBoZWFkZXJzLnNldChcIkNvb2tpZVwiLCBzZW5kZXJDb29raWUpXG4gIH1cblxuICBmb3IgKGNvbnN0IGhlYWRlciBvZiBQUk9YWV9IRUFERVJTKSB7XG4gICAgaGVhZGVycy5kZWxldGUoaGVhZGVyKVxuICB9XG5cbiAgaGVhZGVycy5kZWxldGUoXCJjb250ZW50LWVuY29kaW5nXCIpXG4gIGhlYWRlcnMuZGVsZXRlKFwiYWNjZXB0LWVuY29kaW5nXCIpXG4gIGhlYWRlcnMuc2V0KFwiWC1wcm94aWVkXCIsIFwidHJ1ZVwiKVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0YXJnZXRVcmwsIHtcbiAgICAgIG1ldGhvZDogcmVxLm1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICBib2R5OiBbXCJHRVRcIiwgXCJIRUFEXCJdLmluY2x1ZGVzKHJlcS5tZXRob2QpID8gdW5kZWZpbmVkIDogYm9keSxcbiAgICB9KVxuXG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gbmV3IEhlYWRlcnMocmVzcG9uc2UuaGVhZGVycylcbiAgICByZXNwb25zZUhlYWRlcnMuZGVsZXRlKFwiY29udGVudC1lbmNvZGluZ1wiKVxuXG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShyZXNwb25zZS5ib2R5LCB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiUHJveHkgZXJyb3I6XCIsIGVycm9yKVxuICAgIHJldHVybiBjdHguanNvbihcbiAgICAgIHsgZXJyb3I6IHsgbWVzc2FnZTogXCJGYWlsZWQgdG8gcHJveHkgcmVxdWVzdFwiIH0gfSxcbiAgICAgIHsgc3RhdHVzOiA1MDIgfSxcbiAgICApXG4gIH1cbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBtZXRob2RzOiBbXCJQT1NUXCIsIFwiREVMRVRFXCJdLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgc2Vzc2lvbl9pZCB9ID0gY3R4LmF1dGhcblxuICBjb25zdCBkZWxldGVkID0gY3R4LmRiLmRlbGV0ZVNlc3Npb24oc2Vzc2lvbl9pZClcblxuICBpZiAoIWRlbGV0ZWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJzZXNzaW9uX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJTZXNzaW9uIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25Cb2R5OiB6Lm9iamVjdCh7XG4gICAgc25pcHBldF9pZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBzbmlwcGV0X2lkIH0gPSByZXEuanNvbkJvZHlcblxuICAvLyBDaGVjayBpZiBzbmlwcGV0IGV4aXN0cyAoYXMgYSBwYWNrYWdlKVxuICBjb25zdCBzbmlwcGV0ID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoXG4gICAgKHBrZykgPT4gcGtnLnBhY2thZ2VfaWQgPT09IHNuaXBwZXRfaWQgJiYgcGtnLmlzX3NuaXBwZXQgPT09IHRydWUsXG4gIClcblxuICBpZiAoIXNuaXBwZXQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJzbmlwcGV0X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJTbmlwcGV0IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDaGVjayBpZiBhbHJlYWR5IHN0YXJyZWRcbiAgY29uc3QgZXhpc3RpbmcgPSBjdHguZGIuYWNjb3VudFBhY2thZ2VzLmZpbmQoXG4gICAgKGFwKSA9PlxuICAgICAgYXAuYWNjb3VudF9pZCA9PT0gY3R4LmF1dGguYWNjb3VudF9pZCAmJiBhcC5wYWNrYWdlX2lkID09PSBzbmlwcGV0X2lkLFxuICApXG5cbiAgaWYgKGV4aXN0aW5nPy5pc19zdGFycmVkKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiYWxyZWFkeV9zdGFycmVkXCIsXG4gICAgICBtZXNzYWdlOiBcIllvdSBoYXZlIGFscmVhZHkgc3RhcnJlZCB0aGlzIHNuaXBwZXRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gVXBkYXRlIHRoZSBwYWNrYWdlJ3Mgc3RhciBjb3VudFxuICBzbmlwcGV0LnN0YXJfY291bnQgPSAoc25pcHBldC5zdGFyX2NvdW50IHx8IDApICsgMVxuXG4gIGlmIChleGlzdGluZykge1xuICAgIC8vIElmIHJlY29yZCBleGlzdHMgYnV0IGlzX3N0YXJyZWQgaXMgZmFsc2UsIHVwZGF0ZSB0byBpc19zdGFycmVkPXRydWVcbiAgICBleGlzdGluZy5pc19zdGFycmVkID0gdHJ1ZVxuICAgIGV4aXN0aW5nLnVwZGF0ZWRfYXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgfSBlbHNlIHtcbiAgICAvLyBBZGQgc3RhciBieSBjcmVhdGluZyBhIG5ldyBhY2NvdW50X3BhY2thZ2UgcmVjb3JkXG4gICAgY3R4LmRiLmFkZEFjY291bnRQYWNrYWdlKHtcbiAgICAgIGFjY291bnRfaWQ6IGN0eC5hdXRoLmFjY291bnRfaWQsXG4gICAgICBwYWNrYWdlX2lkOiBzbmlwcGV0X2lkLFxuICAgICAgaXNfc3RhcnJlZDogdHJ1ZSxcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgc25pcHBldFNjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcbmltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICB1bnNjb3BlZF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHNuaXBwZXRfdHlwZTogei5lbnVtKFtcImJvYXJkXCIsIFwicGFja2FnZVwiLCBcIm1vZGVsXCIsIFwiZm9vdHByaW50XCJdKSxcbiAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNvbXBpbGVkX2pzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgY2lyY3VpdF9qc29uOiB6LmFycmF5KHoucmVjb3JkKHouYW55KCkpKS5vcHRpb25hbCgpLm51bGxhYmxlKCksXG4gICAgZHRzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaXNfcHJpdmF0ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBpc19wdWJsaWM6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgaXNfdW5saXN0ZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gICAgc25pcHBldDogc25pcHBldFNjaGVtYS5vcHRpb25hbCgpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBsZXQge1xuICAgIHVuc2NvcGVkX25hbWUsXG4gICAgY29kZSA9IFwiXCIsXG4gICAgc25pcHBldF90eXBlLFxuICAgIGRlc2NyaXB0aW9uID0gXCJcIixcbiAgICBjb21waWxlZF9qcyxcbiAgICBjaXJjdWl0X2pzb24sXG4gICAgZHRzLFxuICAgIGlzX3ByaXZhdGUsXG4gICAgaXNfcHVibGljLFxuICAgIGlzX3VubGlzdGVkLFxuICB9ID0gcmVxLmpzb25Cb2R5XG5cbiAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKVxuICBjb25zdCBjdXJyZW50VGltZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuXG4gIGlmICghdW5zY29wZWRfbmFtZSkge1xuICAgIC8vIENvdW50IHNuaXBwZXRzIG9mIHRoaXMgdHlwZSBmb3IgdGhpcyB1c2VyXG4gICAgY29uc3QgdXNlclNuaXBwZXRzID0gY3R4LmRiLnBhY2thZ2VzLmZpbHRlcihcbiAgICAgIChwKSA9PlxuICAgICAgICBwLm93bmVyX2dpdGh1Yl91c2VybmFtZSA9PT0gY3R4LmF1dGguZ2l0aHViX3VzZXJuYW1lICYmXG4gICAgICAgIHAuaXNfc25pcHBldCA9PT0gdHJ1ZSAmJlxuICAgICAgICAoKHAuaXNfYm9hcmQgJiYgc25pcHBldF90eXBlID09PSBcImJvYXJkXCIpIHx8XG4gICAgICAgICAgKHAuaXNfcGFja2FnZSAmJiBzbmlwcGV0X3R5cGUgPT09IFwicGFja2FnZVwiKSB8fFxuICAgICAgICAgIChwLmlzX21vZGVsICYmIHNuaXBwZXRfdHlwZSA9PT0gXCJtb2RlbFwiKSB8fFxuICAgICAgICAgIChwLmlzX2Zvb3RwcmludCAmJiBzbmlwcGV0X3R5cGUgPT09IFwiZm9vdHByaW50XCIpKSxcbiAgICApXG4gICAgdW5zY29wZWRfbmFtZSA9IGB1bnRpdGxlZC0ke3NuaXBwZXRfdHlwZX0tJHt1c2VyU25pcHBldHMubGVuZ3RoICsgMX1gXG4gIH1cblxuICBjb25zdCBleGlzdGluZ1BhY2thZ2UgPSBjdHguZGIucGFja2FnZXMuZmluZChcbiAgICAocGtnKSA9PlxuICAgICAgcGtnLnVuc2NvcGVkX25hbWUgPT09IHVuc2NvcGVkX25hbWUgJiZcbiAgICAgIHBrZy5vd25lcl9naXRodWJfdXNlcm5hbWUgPT09IGN0eC5hdXRoLmdpdGh1Yl91c2VybmFtZSxcbiAgKVxuXG4gIGlmIChleGlzdGluZ1BhY2thZ2UpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJzbmlwcGV0X2FscmVhZHlfZXhpc3RzXCIsXG4gICAgICBtZXNzYWdlOiBcIllvdSBoYXZlIGFscmVhZHkgZm9ya2VkIHRoaXMgc25pcHBldCBpbiB5b3VyIGFjY291bnQuXCIsXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gQ3JlYXRlIHRoZSBwYWNrYWdlIGRpcmVjdGx5ICh3aGljaCB3aWxsIHNlcnZlIGFzIG91ciBzbmlwcGV0KVxuICAgIGNvbnN0IG5ld1BhY2thZ2UgPSBjdHguZGIuYWRkUGFja2FnZSh7XG4gICAgICBjcmVhdG9yX2FjY291bnRfaWQ6IGN0eC5hdXRoLmFjY291bnRfaWQsXG4gICAgICBvd25lcl9vcmdfaWQ6IGN0eC5hdXRoLnBlcnNvbmFsX29yZ19pZCxcbiAgICAgIG93bmVyX2dpdGh1Yl91c2VybmFtZTogY3R4LmF1dGguZ2l0aHViX3VzZXJuYW1lLFxuICAgICAgaXNfc291cmNlX2Zyb21fZ2l0aHViOiBmYWxzZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICAgIG5hbWU6IGAke2N0eC5hdXRoLmdpdGh1Yl91c2VybmFtZX0vJHt1bnNjb3BlZF9uYW1lfWAsXG4gICAgICB1bnNjb3BlZF9uYW1lOiB1bnNjb3BlZF9uYW1lLFxuICAgICAgbGF0ZXN0X3ZlcnNpb246IFwiMC4wLjFcIixcbiAgICAgIGxpY2Vuc2U6IG51bGwsXG4gICAgICBzdGFyX2NvdW50OiAwLFxuICAgICAgY3JlYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICB1cGRhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgIGFpX2Rlc2NyaXB0aW9uOiBudWxsLFxuICAgICAgaXNfc25pcHBldDogdHJ1ZSxcbiAgICAgIGlzX2JvYXJkOiBzbmlwcGV0X3R5cGUgPT09IFwiYm9hcmRcIixcbiAgICAgIGlzX3BhY2thZ2U6IHNuaXBwZXRfdHlwZSA9PT0gXCJwYWNrYWdlXCIsXG4gICAgICBpc19tb2RlbDogc25pcHBldF90eXBlID09PSBcIm1vZGVsXCIsXG4gICAgICBpc19mb290cHJpbnQ6IHNuaXBwZXRfdHlwZSA9PT0gXCJmb290cHJpbnRcIixcbiAgICAgIHNuaXBwZXRfdHlwZTogc25pcHBldF90eXBlLFxuICAgICAgaXNfcHJpdmF0ZTogaXNfcHJpdmF0ZSB8fCBmYWxzZSxcbiAgICAgIGlzX3B1YmxpYzogaXNfcHVibGljIHx8IHRydWUsXG4gICAgICBpc191bmxpc3RlZDogaXNfdW5saXN0ZWQgfHwgZmFsc2UsXG4gICAgICBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkOiBudWxsLFxuICAgICAgYWlfdXNhZ2VfaW5zdHJ1Y3Rpb25zOiBcInBsYWNlaG9sZGVyIGFpIHVzYWdlIGluc3RydWN0aW9uc1wiLFxuICAgIH0pXG5cbiAgICBjb25zdCBuZXdQYWNrYWdlUmVsZWFzZSA9IGN0eC5kYi5hZGRQYWNrYWdlUmVsZWFzZSh7XG4gICAgICBwYWNrYWdlX2lkOiBuZXdQYWNrYWdlLnBhY2thZ2VfaWQsXG4gICAgICB2ZXJzaW9uOiBcIjAuMC4xXCIsXG4gICAgICBpc19sYXRlc3Q6IHRydWUsXG4gICAgICBpc19sb2NrZWQ6IGZhbHNlLFxuICAgICAgY3JlYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICAvLyBTZXR0aW5nIHRoZSB0cmFuc3BpbGVkIGFzIHRydWUgb24gY3JlYXRpb25cbiAgICAgIGhhc190cmFuc3BpbGVkOiB0cnVlLFxuICAgICAgdHJhbnNwaWxhdGlvbl9lcnJvcjogbnVsbCxcbiAgICB9KVxuXG4gICAgY3R4LmRiLnVwZGF0ZVBhY2thZ2UobmV3UGFja2FnZS5wYWNrYWdlX2lkLCB7XG4gICAgICBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkOiBuZXdQYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgfSlcblxuICAgIC8vIEFkZCBwYWNrYWdlIGZpbGVzXG4gICAgLy8gQWRkIGluZGV4LnRzeCBmaWxlIHdpdGggdGhlIGNvZGUgY29udGVudFxuICAgIGN0eC5kYi5hZGRQYWNrYWdlRmlsZSh7XG4gICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IG5ld1BhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgIGZpbGVfcGF0aDogXCJpbmRleC50c3hcIixcbiAgICAgIGNvbnRlbnRfdGV4dDogY29kZSxcbiAgICAgIGNyZWF0ZWRfYXQ6IGN1cnJlbnRUaW1lLFxuICAgIH0pXG5cbiAgICAvLyBBZGQgRFRTIGZpbGUgaWYgcHJvdmlkZWRcbiAgICBpZiAoZHRzKSB7XG4gICAgICBjdHguZGIuYWRkUGFja2FnZUZpbGUoe1xuICAgICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IG5ld1BhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgICAgZmlsZV9wYXRoOiBcIi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgICAgY29udGVudF90ZXh0OiBkdHMsXG4gICAgICAgIGNyZWF0ZWRfYXQ6IGN1cnJlbnRUaW1lLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBBZGQgY29tcGlsZWQgSlMgaWYgcHJvdmlkZWRcbiAgICBpZiAoY29tcGlsZWRfanMpIHtcbiAgICAgIGN0eC5kYi5hZGRQYWNrYWdlRmlsZSh7XG4gICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogbmV3UGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgICBmaWxlX3BhdGg6IFwiL2Rpc3QvaW5kZXguanNcIixcbiAgICAgICAgY29udGVudF90ZXh0OiBjb21waWxlZF9qcyxcbiAgICAgICAgY3JlYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIEFkZCBjaXJjdWl0IEpTT04gaWYgcHJvdmlkZWRcbiAgICBpZiAoY2lyY3VpdF9qc29uKSB7XG4gICAgICBjdHguZGIuYWRkUGFja2FnZUZpbGUoe1xuICAgICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IG5ld1BhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgICAgZmlsZV9wYXRoOiBcIi9kaXN0L2NpcmN1aXQuanNvblwiLFxuICAgICAgICBjb250ZW50X3RleHQ6IEpTT04uc3RyaW5naWZ5KGNpcmN1aXRfanNvbiksXG4gICAgICAgIGNyZWF0ZWRfYXQ6IGN1cnJlbnRUaW1lLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHNuaXBwZXQgcmVzcG9uc2Ugb2JqZWN0XG4gICAgY29uc3Qgc25pcHBldFJlc3BvbnNlID0ge1xuICAgICAgc25pcHBldF9pZDogbmV3UGFja2FnZS5wYWNrYWdlX2lkLFxuICAgICAgcGFja2FnZV9yZWxlYXNlX2lkOiBuZXdQYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgICBuYW1lOiBuZXdQYWNrYWdlLm5hbWUsXG4gICAgICB1bnNjb3BlZF9uYW1lOiBuZXdQYWNrYWdlLnVuc2NvcGVkX25hbWUsXG4gICAgICBvd25lcl9uYW1lOiBjdHguYXV0aC5naXRodWJfdXNlcm5hbWUsXG4gICAgICBjb2RlLFxuICAgICAgZHRzLFxuICAgICAgY29tcGlsZWRfanMsXG4gICAgICBzdGFyX2NvdW50OiAwLFxuICAgICAgY3JlYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICB1cGRhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgIHNuaXBwZXRfdHlwZTogc25pcHBldF90eXBlLFxuICAgICAgY2lyY3VpdF9qc29uOiBjaXJjdWl0X2pzb24gfHwgW10sXG4gICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICBpc19zdGFycmVkOiBmYWxzZSxcbiAgICAgIHZlcnNpb246IFwiMC4wLjFcIixcbiAgICAgIGlzX3ByaXZhdGU6IGlzX3ByaXZhdGUgfHwgZmFsc2UsXG4gICAgICBpc19wdWJsaWM6IGlzX3B1YmxpYyB8fCB0cnVlLFxuICAgICAgaXNfdW5saXN0ZWQ6IGlzX3VubGlzdGVkIHx8IGZhbHNlLFxuICAgIH1cblxuICAgIHJldHVybiBjdHguanNvbih7XG4gICAgICBvazogdHJ1ZSxcbiAgICAgIHNuaXBwZXQ6IHNuaXBwZXRSZXNwb25zZSxcbiAgICB9KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBjdHguZXJyb3IoNTAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInNuaXBwZXRfY3JlYXRpb25fZmFpbGVkXCIsXG4gICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBzbmlwcGV0OiAke2Vycm9yfWAsXG4gICAgfSlcbiAgfVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25Cb2R5OiB6Lm9iamVjdCh7XG4gICAgc25pcHBldF9pZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBzbmlwcGV0X2lkIH0gPSByZXEuanNvbkJvZHlcblxuICBjb25zdCBzbmlwcGV0SW5kZXggPSBjdHguZGIucGFja2FnZXMuZmluZEluZGV4KFxuICAgIChzKSA9PiBzLnBhY2thZ2VfaWQgPT09IHNuaXBwZXRfaWQsXG4gIClcblxuICBpZiAoc25pcHBldEluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInNuaXBwZXRfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlNuaXBwZXQgbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHNuaXBwZXQgPSBjdHguZGIucGFja2FnZXNbc25pcHBldEluZGV4XVxuXG4gIGlmIChzbmlwcGV0LmNyZWF0b3JfYWNjb3VudF9pZCAhPT0gY3R4LmF1dGguZ2l0aHViX3VzZXJuYW1lKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDMsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiZm9yYmlkZGVuXCIsXG4gICAgICBtZXNzYWdlOiBcIllvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gZGVsZXRlIHRoaXMgc25pcHBldFwiLFxuICAgIH0pXG4gIH1cblxuICBjdHguZGIucGFja2FnZXMuc3BsaWNlKHNuaXBwZXRJbmRleCwgMSlcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAgcXVlcnlQYXJhbXM6IHoub2JqZWN0KHtcbiAgICBqc2RlbGl2cl9yZXNvbHZlOiB6XG4gICAgICAuZW51bShbXCJ0cnVlXCIsIFwiZmFsc2VcIl0pXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLnRyYW5zZm9ybSgodikgPT4gdiA9PT0gXCJ0cnVlXCIpLFxuICAgIGpzZGVsaXZyX3BhdGg6IHouc3RyaW5nKCksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHouYW55KCksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBqc2RlbGl2cl9wYXRoLCBqc2RlbGl2cl9yZXNvbHZlIH0gPSByZXEucXVlcnlcblxuICAvLyBQYXJzZSB0aGUgZmlsZSBwYXRoXG4gIGNvbnN0IFtvd25lciwgcGFja2FnZVdpdGhWZXJzaW9uLCAuLi5yZXN0XSA9IGpzZGVsaXZyX3BhdGguc3BsaXQoXCIvXCIpXG4gIGNvbnN0IFtwYWNrYWdlTmFtZSwgdmVyc2lvbl0gPSBwYWNrYWdlV2l0aFZlcnNpb24uc3BsaXQoXCJAXCIpXG4gIGNvbnN0IGZpbGVOYW1lID0gcmVzdC5qb2luKFwiL1wiKVxuXG4gIC8vIEZpbmQgdGhlIHNuaXBwZXRcbiAgY29uc3QgX3BhY2thZ2UgPSBjdHguZGIucGFja2FnZXMuZmluZChcbiAgICAocykgPT4gcy5vd25lcl9naXRodWJfdXNlcm5hbWUgPT09IG93bmVyICYmIHMudW5zY29wZWRfbmFtZSA9PT0gcGFja2FnZU5hbWUsXG4gIClcblxuICBjb25zdCBwYWNrYWdlUmVsZWFzZSA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAocCkgPT4gcC5wYWNrYWdlX2lkID09PSBfcGFja2FnZT8ucGFja2FnZV9pZCxcbiAgKVxuXG4gIGNvbnN0IHBhY2thZ2VGaWxlcyA9IGN0eC5kYi5wYWNrYWdlRmlsZXMuZmlsdGVyKFxuICAgIChwKSA9PiBwLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGFja2FnZVJlbGVhc2U/LnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgKVxuXG4gIGlmICghX3BhY2thZ2UpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJzbmlwcGV0X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJTbmlwcGV0IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBpZiAoIWZpbGVOYW1lICYmICFqc2RlbGl2cl9yZXNvbHZlKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdGFnczoge1xuICAgICAgICAgIGxhdGVzdDogXCIwLjAuMVwiLFxuICAgICAgICB9LFxuICAgICAgICB2ZXJzaW9uczogW1wiMC4wLjFcIl0sXG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgIH0sXG4gICAgKVxuICB9IGVsc2UgaWYgKCFmaWxlTmFtZSAmJiBqc2RlbGl2cl9yZXNvbHZlKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdmVyc2lvbjogXCIwLjAuMVwiLFxuICAgICAgfSksXG4gICAgICB7XG4gICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICB9LFxuICAgIClcbiAgfVxuXG4gIC8vIElmIG5vIGZpbGVOYW1lIGlzIHByb3ZpZGVkLCByZXR1cm4gdGhlIGRpcmVjdG9yeSBsaXN0aW5nXG4gIGlmICghZmlsZU5hbWUgfHwgZmlsZU5hbWUgPT09IFwiZmxhdFwiKSB7XG4gICAgY29uc3QgZmlsZXMgPSBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICBuYW1lOiBcImluZGV4LnRzXCIsXG4gICAgICAgIGhhc2g6IFwicGxhY2Vob2xkZXJfaGFzaFwiLFxuICAgICAgICB0aW1lOiBwYWNrYWdlUmVsZWFzZT8uY3JlYXRlZF9hdCxcbiAgICAgICAgc2l6ZTogcGFja2FnZUZpbGVzLmZpbmQoKGYpID0+IGYuZmlsZV9wYXRoID09PSBcImluZGV4LnRzXCIpPy5jb250ZW50X3RleHRcbiAgICAgICAgICA/Lmxlbmd0aCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICBuYW1lOiBcImluZGV4LmQudHNcIixcbiAgICAgICAgaGFzaDogXCJwbGFjZWhvbGRlcl9oYXNoXCIsXG4gICAgICAgIHRpbWU6IHBhY2thZ2VSZWxlYXNlPy5jcmVhdGVkX2F0LFxuICAgICAgICBzaXplOiBwYWNrYWdlRmlsZXMuZmluZCgoZikgPT4gZi5maWxlX3BhdGggPT09IFwiaW5kZXguZC50c1wiKVxuICAgICAgICAgID8uY29udGVudF90ZXh0Py5sZW5ndGgsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImZpbGVcIixcbiAgICAgICAgbmFtZTogXCJwYWNrYWdlLmpzb25cIixcbiAgICAgICAgaGFzaDogXCJwbGFjZWhvbGRlcl9oYXNoXCIsXG4gICAgICAgIHRpbWU6IHBhY2thZ2VSZWxlYXNlPy5jcmVhdGVkX2F0LFxuICAgICAgICBzaXplOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgbmFtZTogYEB0c2NpLyR7b3duZXJ9LiR7cGFja2FnZU5hbWV9YCxcbiAgICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uIHx8IFwiMC4wLjFcIixcbiAgICAgICAgICBtYWluOiBcImluZGV4LnRzXCIsXG4gICAgICAgICAgdHlwZXM6IFwiaW5kZXguZC50c1wiLFxuICAgICAgICB9KS5sZW5ndGgsXG4gICAgICB9LFxuICAgIF1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgZGVmYXVsdDogXCIvaW5kZXgudHNcIixcbiAgICAgIGZpbGVzOlxuICAgICAgICBmaWxlTmFtZSA9PT0gXCJmbGF0XCJcbiAgICAgICAgICA/IGZpbGVzLm1hcCgoZikgPT4gKHtcbiAgICAgICAgICAgICAgbmFtZTogYC8ke2YubmFtZX1gLFxuICAgICAgICAgICAgICBoYXNoOiBmLmhhc2gsXG4gICAgICAgICAgICAgIHRpbWU6IGYudGltZSxcbiAgICAgICAgICAgICAgc2l6ZTogZi5zaXplLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImRpcmVjdG9yeVwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiLlwiLFxuICAgICAgICAgICAgICAgIGZpbGVzOiBmaWxlcyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeShyZXNwb25zZSwgbnVsbCwgMiksIHtcbiAgICAgIHN0YXR1czogMjAwLFxuICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgIH0pXG4gIH1cblxuICAvLyBIYW5kbGUgZmlsZSBkb3dubG9hZHNcbiAgbGV0IGNvbnRlbnQ6IHN0cmluZ1xuICBzd2l0Y2ggKGZpbGVOYW1lKSB7XG4gICAgY2FzZSBcImluZGV4LnRzXCI6XG4gICAgICBjb250ZW50ID1cbiAgICAgICAgcGFja2FnZUZpbGVzLmZpbmQoKGYpID0+IGYuZmlsZV9wYXRoID09PSBcImluZGV4LnRzeFwiKT8uY29udGVudF90ZXh0IHx8XG4gICAgICAgIFwiXCJcbiAgICAgIGJyZWFrXG4gICAgY2FzZSBcImluZGV4LmQudHNcIjpcbiAgICAgIGNvbnRlbnQgPVxuICAgICAgICBwYWNrYWdlRmlsZXMuZmluZCgoZikgPT4gZi5maWxlX3BhdGggPT09IFwiL2Rpc3QvaW5kZXguZC50c1wiKVxuICAgICAgICAgID8uY29udGVudF90ZXh0IHx8IFwiXCJcbiAgICAgIGJyZWFrXG4gICAgY2FzZSBcInBhY2thZ2UuanNvblwiOlxuICAgICAgY29udGVudCA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogYEB0c2NpLyR7b3duZXJ9LiR7cGFja2FnZU5hbWV9YCxcbiAgICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uIHx8IFwiMC4wLjFcIixcbiAgICAgICAgICBtYWluOiBcImluZGV4LnRzXCIsXG4gICAgICAgICAgdHlwZXM6IFwiaW5kZXguZC50c1wiLFxuICAgICAgICB9LFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKVxuICAgICAgYnJlYWtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgICAgZXJyb3JfY29kZTogXCJmaWxlX25vdF9mb3VuZFwiLFxuICAgICAgICBtZXNzYWdlOiBcIlJlcXVlc3RlZCBmaWxlIG5vdCBmb3VuZFwiLFxuICAgICAgfSlcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzcG9uc2UoY29udGVudCwge1xuICAgIHN0YXR1czogMjAwLFxuICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJ0ZXh0L3BsYWluXCIgfSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHNuaXBwZXRTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyBmZXRjaEVhc3lFREFDb21wb25lbnQsIGNvbnZlcnRSYXdFYXN5RWRhVG9UcyB9IGZyb20gXCJlYXN5ZWRhXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIGpsY3BjYl9wYXJ0X251bWJlcjogei5zdHJpbmcoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIHNuaXBwZXQ6IHNuaXBwZXRTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgamxjcGNiX3BhcnRfbnVtYmVyIH0gPSByZXEuanNvbkJvZHlcblxuICB0cnkge1xuICAgIC8vIEZldGNoIHRoZSBFYXN5RURBIGNvbXBvbmVudCBkYXRhXG4gICAgY29uc3QgcmF3RWFzeUpzb24gPSBhd2FpdCBmZXRjaEVhc3lFREFDb21wb25lbnQoamxjcGNiX3BhcnRfbnVtYmVyKVxuXG4gICAgLy8gQ29udmVydCB0byBUeXBlU2NyaXB0IFJlYWN0IGNvbXBvbmVudFxuICAgIGNvbnN0IHRzeENvbXBvbmVudCA9IGF3YWl0IGNvbnZlcnRSYXdFYXN5RWRhVG9UcyhyYXdFYXN5SnNvbilcblxuICAgIC8vIENyZWF0ZSBhIG5ldyBzbmlwcGV0XG4gICAgY29uc3QgbmV3U25pcHBldCA9IHtcbiAgICAgIG5hbWU6IGAke2N0eC5hdXRoLmdpdGh1Yl91c2VybmFtZX0vJHtqbGNwY2JfcGFydF9udW1iZXJ9YCxcbiAgICAgIHVuc2NvcGVkX25hbWU6IGpsY3BjYl9wYXJ0X251bWJlcixcbiAgICAgIG93bmVyX25hbWU6IGN0eC5hdXRoLmdpdGh1Yl91c2VybmFtZSxcbiAgICAgIGNvZGU6IHRzeENvbXBvbmVudCxcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHNuaXBwZXRfdHlwZTogXCJwYWNrYWdlXCIsXG4gICAgICBkZXNjcmlwdGlvbjogYEdlbmVyYXRlZCBmcm9tIEpMQ1BDQiBwYXJ0IG51bWJlciAke2psY3BjYl9wYXJ0X251bWJlcn1gLFxuICAgIH1cblxuICAgIGNvbnN0IGNyZWF0ZWRQYWNrYWdlID0gY3R4LmRiLmFkZFNuaXBwZXQobmV3U25pcHBldCBhcyBhbnkpXG5cbiAgICByZXR1cm4gY3R4Lmpzb24oe1xuICAgICAgc25pcHBldDogY3JlYXRlZFBhY2thZ2UgYXMgYW55LFxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDUwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJqbGNwY2JfZ2VuZXJhdGlvbl9mYWlsZWRcIixcbiAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZ2VuZXJhdGUgcGFja2FnZSBmcm9tIEpMQ1BDQiBwYXJ0OiAke2Vycm9yLm1lc3NhZ2V9YCxcbiAgICB9KVxuICB9XG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQge1xuICBjb252ZXJ0Q2lyY3VpdEpzb25Ub1NjaGVtYXRpY1N2ZyxcbiAgY29udmVydENpcmN1aXRKc29uVG9QY2JTdmcsXG59IGZyb20gXCJjaXJjdWl0LXRvLXN2Z1wiXG5pbXBvcnQgeyBBbnlDaXJjdWl0RWxlbWVudCB9IGZyb20gXCJjaXJjdWl0LWpzb25cIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAgcXVlcnlQYXJhbXM6IHoub2JqZWN0KHtcbiAgICBzbmlwcGV0SWQ6IHouc3RyaW5nKCksXG4gICAgaW1hZ2Vfb2Y6IHouZW51bShbXCJzY2hlbWF0aWNcIiwgXCJwY2JcIl0pLFxuICAgIGZvcm1hdDogei5lbnVtKFtcInN2Z1wiXSksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gICAgc3ZnOiB6LnN0cmluZygpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IHNuaXBwZXRJZCwgaW1hZ2Vfb2YsIGZvcm1hdCB9ID0gcmVxLnF1ZXJ5XG5cbiAgY29uc3Qgc25pcHBldCA9IGN0eC5kYi5nZXRTbmlwcGV0QnlJZChzbmlwcGV0SWQpXG5cbiAgLy8gY2hlY2sgaWYgdGhlIHNuaXBwZXQgZXhpc3RzXG4gIGlmICghc25pcHBldCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInNuaXBwZXRfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlNuaXBwZXQgbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgdmFsaWRcbiAgaWYgKGZvcm1hdCAhPT0gXCJzdmdcIikge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICBtZXNzYWdlOiBcIkZvcm1hdCBtdXN0IGJlICdzdmcnXCIsXG4gICAgfSlcbiAgfVxuXG4gIGlmIChpbWFnZV9vZiA9PT0gXCJzY2hlbWF0aWNcIikge1xuICAgIGNvbnN0IGNpcmN1aXRKc29uID0gc25pcHBldC5jaXJjdWl0X2pzb24gYXMgQW55Q2lyY3VpdEVsZW1lbnRbXVxuICAgIGNvbnN0IHN2ZyA9IGNvbnZlcnRDaXJjdWl0SnNvblRvU2NoZW1hdGljU3ZnKGNpcmN1aXRKc29uKVxuICAgIHJldHVybiBjdHguanNvbih7XG4gICAgICBvazogdHJ1ZSxcbiAgICAgIHN2ZyxcbiAgICB9KVxuICB9XG5cbiAgaWYgKGltYWdlX29mID09PSBcInBjYlwiKSB7XG4gICAgY29uc3Qgc3ZnID0gY29udmVydENpcmN1aXRKc29uVG9QY2JTdmcoXG4gICAgICBzbmlwcGV0LmNpcmN1aXRfanNvbiBhcyBBbnlDaXJjdWl0RWxlbWVudFtdLFxuICAgIClcbiAgICByZXR1cm4gY3R4Lmpzb24oe1xuICAgICAgb2s6IHRydWUsXG4gICAgICBzdmcsXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgZXJyb3JfY29kZTogXCJJTlZBTElEX1JFUVVFU1RfVFlQRVwiLFxuICAgIG1lc3NhZ2U6IFwiUmVxdWVzdCB0eXBlIG11c3QgYmUgZWl0aGVyICdzY2hlbWF0aWMnIG9yICdwY2InXCIsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHNuaXBwZXRTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCIsIFwiUE9TVFwiXSxcbiAgYXV0aDogXCJvcHRpb25hbF9zZXNzaW9uXCIsXG4gIGNvbW1vblBhcmFtczogei5vYmplY3Qoe1xuICAgIHNuaXBwZXRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgb3duZXJfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHVuc2NvcGVkX25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIGpzb25Cb2R5OiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgICBzbmlwcGV0OiBzbmlwcGV0U2NoZW1hLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IHNuaXBwZXRfaWQsIG5hbWUsIG93bmVyX25hbWUsIHVuc2NvcGVkX25hbWUgfSA9IHJlcS5jb21tb25QYXJhbXNcblxuICAvLyBGaXJzdCB0cnkgdG8gZmluZCBieSBzbmlwcGV0X2lkXG4gIGlmIChzbmlwcGV0X2lkKSB7XG4gICAgY29uc3QgZm91bmRTbmlwcGV0ID0gY3R4LmRiLmdldFNuaXBwZXRCeUlkKHNuaXBwZXRfaWQsIGN0eC5hdXRoKVxuICAgIGlmIChmb3VuZFNuaXBwZXQpIHtcbiAgICAgIGlmIChjdHguYXV0aCkge1xuICAgICAgICBmb3VuZFNuaXBwZXQuaXNfc3RhcnJlZCA9IGN0eC5kYi5oYXNTdGFycmVkKFxuICAgICAgICAgIGN0eC5hdXRoLmFjY291bnRfaWQsXG4gICAgICAgICAgZm91bmRTbmlwcGV0LnNuaXBwZXRfaWQsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBjdHguanNvbih7XG4gICAgICAgIG9rOiB0cnVlLFxuICAgICAgICBzbmlwcGV0OiBmb3VuZFNuaXBwZXQsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIG5vdCBmb3VuZCBieSBJRCwgdHJ5IHRvIGZpbmQgYnkgb3RoZXIgcGFyYW1ldGVyc1xuICBjb25zdCBmb3VuZFBhY2thZ2UgPSBjdHguZGIucGFja2FnZXMuZmluZCgocGtnKSA9PiB7XG4gICAgaWYgKCFwa2cuaXNfc25pcHBldCkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKG5hbWUgJiYgcGtnLm5hbWUudG9Mb3dlckNhc2UoKSAhPT0gbmFtZS50b0xvd2VyQ2FzZSgpKSByZXR1cm4gZmFsc2VcbiAgICBpZiAoXG4gICAgICBvd25lcl9uYW1lICYmXG4gICAgICBwa2cub3duZXJfZ2l0aHViX3VzZXJuYW1lPy50b0xvd2VyQ2FzZSgpICE9PSBvd25lcl9uYW1lLnRvTG93ZXJDYXNlKClcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICBpZiAoXG4gICAgICB1bnNjb3BlZF9uYW1lICYmXG4gICAgICBwa2cudW5zY29wZWRfbmFtZS50b0xvd2VyQ2FzZSgpICE9PSB1bnNjb3BlZF9uYW1lLnRvTG93ZXJDYXNlKClcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gdHJ1ZVxuICB9KVxuXG4gIGlmICghZm91bmRQYWNrYWdlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwic25pcHBldF9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IGBTbmlwcGV0IG5vdCBmb3VuZCAoc2VhcmNoZWQgdXNpbmcgJHtKU09OLnN0cmluZ2lmeShyZXEuY29tbW9uUGFyYW1zKX0pYCxcbiAgICB9KVxuICB9XG5cbiAgLy8gQ29udmVydCBwYWNrYWdlIHRvIHNuaXBwZXQgZm9ybWF0XG4gIGNvbnN0IHNuaXBwZXQgPSBjdHguZGIuZ2V0U25pcHBldEJ5SWQoZm91bmRQYWNrYWdlLnBhY2thZ2VfaWQpXG4gIGlmICghc25pcHBldCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInNuaXBwZXRfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBgU25pcHBldCBub3QgZm91bmQgKHNlYXJjaGVkIHVzaW5nICR7SlNPTi5zdHJpbmdpZnkocmVxLmNvbW1vblBhcmFtcyl9KWAsXG4gICAgfSlcbiAgfVxuXG4gIGlmIChjdHguYXV0aCkge1xuICAgIHNuaXBwZXQuaXNfc3RhcnJlZCA9IGN0eC5kYi5oYXNTdGFycmVkKFxuICAgICAgY3R4LmF1dGguYWNjb3VudF9pZCxcbiAgICAgIHNuaXBwZXQuc25pcHBldF9pZCxcbiAgICApXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICAgIHNuaXBwZXQsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IEFueUNpcmN1aXRFbGVtZW50IH0gZnJvbSBcImNpcmN1aXQtanNvblwiXG5pbXBvcnQge1xuICBjb252ZXJ0Q2lyY3VpdEpzb25Ub0Fzc2VtYmx5U3ZnLFxuICBjb252ZXJ0Q2lyY3VpdEpzb25Ub1BjYlN2ZyxcbiAgY29udmVydENpcmN1aXRKc29uVG9TY2hlbWF0aWNTdmcsXG59IGZyb20gXCJjaXJjdWl0LXRvLXN2Z1wiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAgcm91dGVQYXJhbXM6IHoub2JqZWN0KHtcbiAgICBhdXRob3I6IHouc3RyaW5nKCksXG4gICAgc25pcHBldF9uYW1lOiB6LnN0cmluZygpLFxuICAgIHR5cGVGb3JtYXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICByYXdSZXNwb25zZTogdHJ1ZSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IGF1dGhvciwgc25pcHBldF9uYW1lLCB0eXBlRm9ybWF0IH0gPSByZXEucm91dGVQYXJhbXNcblxuICAvLyBHZXQgdGhlIHNuaXBwZXRcbiAgY29uc3QgbmFtZSA9IGF1dGhvciArIFwiL1wiICsgc25pcHBldF9uYW1lXG4gIGNvbnN0IHNuaXBwZXQgPSBjdHguZGIuZ2V0U25pcHBldEJ5QXV0aG9yQW5kTmFtZShhdXRob3IsIG5hbWUpXG5cbiAgLy8gSWYgc25pcHBldCBpcyBub3QgZm91bmQsIHJldHVybiA0MDRcbiAgaWYgKCFzbmlwcGV0KSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwic25pcHBldF9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiU25pcHBldCBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyB2YWxpZFxuICBjb25zdCBmb3JtYXQgPSB0eXBlRm9ybWF0LnNwbGl0KFwiLlwiKVsxXVxuICBpZiAoZm9ybWF0ICE9PSBcInN2Z1wiKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgIG1lc3NhZ2U6IFwiRm9ybWF0IG11c3QgYmUgJ3N2ZydcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHR5cGUgaXMgdmFsaWRcbiAgY29uc3QgdHlwZSA9IHR5cGVGb3JtYXQuc3BsaXQoXCIuXCIpWzBdXG4gIGNvbnN0IHR5cGVzVmFsaWQgPSBbXCJzY2hlbWF0aWNcIiwgXCJwY2JcIiwgXCJhc3NlbWJseVwiXVxuICBpZiAoIXR5cGVzVmFsaWQuaW5jbHVkZXModHlwZSkpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgIG1lc3NhZ2U6IGBUeXBlIG11c3QgYmUgJyR7dHlwZXNWYWxpZC5qb2luKFwiJyBvciAnXCIpfSdgLFxuICAgIH0pXG4gIH1cblxuICAvLyBDb252ZXJ0IGNpcmN1aXQganNvbiB0byBzdmdcbiAgbGV0IHN2Zzogc3RyaW5nXG4gIGlmICh0eXBlID09PSBcInNjaGVtYXRpY1wiKSB7XG4gICAgc3ZnID0gY29udmVydENpcmN1aXRKc29uVG9TY2hlbWF0aWNTdmcoXG4gICAgICBzbmlwcGV0LmNpcmN1aXRfanNvbiBhcyBBbnlDaXJjdWl0RWxlbWVudFtdLFxuICAgIClcbiAgfSBlbHNlIGlmICh0eXBlID09PSBcInBjYlwiKSB7XG4gICAgc3ZnID0gY29udmVydENpcmN1aXRKc29uVG9QY2JTdmcoXG4gICAgICBzbmlwcGV0LmNpcmN1aXRfanNvbiBhcyBBbnlDaXJjdWl0RWxlbWVudFtdLFxuICAgIClcbiAgfSBlbHNlIGlmICh0eXBlID09PSBcImFzc2VtYmx5XCIpIHtcbiAgICBzdmcgPSBjb252ZXJ0Q2lyY3VpdEpzb25Ub0Fzc2VtYmx5U3ZnKFxuICAgICAgc25pcHBldC5jaXJjdWl0X2pzb24gYXMgQW55Q2lyY3VpdEVsZW1lbnRbXSxcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig1MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwidW5rbm93bl9lcnJvclwiLFxuICAgICAgbWVzc2FnZTogXCJVbmtub3duIGVycm9yXCIsXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzcG9uc2Uoc3ZnLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJpbWFnZS9zdmcreG1sXCIsXG4gICAgICBcIkNhY2hlLUNvbnRyb2xcIjogXCJwdWJsaWMsIG1heC1hZ2U9MzE1MzYwMDBcIixcbiAgICB9LFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgc25pcHBldFNjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgc25pcHBldHM6IHouYXJyYXkoc25pcHBldFNjaGVtYSksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IGxhdGVzdFNuaXBwZXRzID0gY3R4LmRiLmdldExhdGVzdFNuaXBwZXRzKDIwKVxuICByZXR1cm4gY3R4Lmpzb24oeyBzbmlwcGV0czogbGF0ZXN0U25pcHBldHMgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHNuaXBwZXRTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIl0sXG4gIGF1dGg6IFwibm9uZVwiLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBzbmlwcGV0czogei5hcnJheShzbmlwcGV0U2NoZW1hKSxcbiAgfSksXG4gIHF1ZXJ5UGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgdGltZV9wZXJpb2Q6IHouZW51bShbXCI3ZGF5c1wiLCBcIjMwZGF5c1wiLCBcImFsbFwiXSkub3B0aW9uYWwoKS5kZWZhdWx0KFwiYWxsXCIpLFxuICAgIHRhZzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IHRpbWVfcGVyaW9kLCB0YWcgfSA9IHJlcS5xdWVyeVxuXG4gIGxldCBzaW5jZURhdGUgPSBuZXcgRGF0ZSgpXG4gIGlmICh0aW1lX3BlcmlvZCA9PT0gXCI3ZGF5c1wiKSB7XG4gICAgc2luY2VEYXRlLnNldERhdGUoc2luY2VEYXRlLmdldERhdGUoKSAtIDcpXG4gIH0gZWxzZSBpZiAodGltZV9wZXJpb2QgPT09IFwiMzBkYXlzXCIpIHtcbiAgICBzaW5jZURhdGUuc2V0RGF0ZShzaW5jZURhdGUuZ2V0RGF0ZSgpIC0gMzApXG4gIH0gZWxzZSB7XG4gICAgc2luY2VEYXRlID0gbmV3IERhdGUoMCkgLy8gRm9yIFwiYWxsXCIsIHVzZSBlYXJsaWVzdCBwb3NzaWJsZSBkYXRlXG4gIH1cblxuICBjb25zdCB0cmVuZGluZ1NuaXBwZXRzID0gY3R4LmRiLmdldFRyZW5kaW5nU25pcHBldHMoXG4gICAgMjAsXG4gICAgc2luY2VEYXRlLnRvSVNPU3RyaW5nKCksXG4gIClcblxuICAvLyBGaWx0ZXIgYnkgdGFnIGlmIHByb3ZpZGVkXG4gIGNvbnN0IGZpbHRlcmVkU25pcHBldHMgPSB0YWdcbiAgICA/IHRyZW5kaW5nU25pcHBldHMuZmlsdGVyKChzbmlwcGV0KSA9PiBzbmlwcGV0LnNuaXBwZXRfdHlwZSA9PT0gdGFnKVxuICAgIDogdHJlbmRpbmdTbmlwcGV0c1xuXG4gIHJldHVybiBjdHguanNvbih7IHNuaXBwZXRzOiBmaWx0ZXJlZFNuaXBwZXRzIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBzbmlwcGV0U2NoZW1hLCB0eXBlIEFjY291bnQgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIiwgXCJQT1NUXCJdLFxuICBhdXRoOiBcIm9wdGlvbmFsX3Nlc3Npb25cIixcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgb3duZXJfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHVuc2NvcGVkX25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBzdGFycmVkX2J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBqc29uQm9keTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gICAgc25pcHBldHM6IHouYXJyYXkoc25pcHBldFNjaGVtYSksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgb3duZXJfbmFtZSwgdW5zY29wZWRfbmFtZSwgc3RhcnJlZF9ieSB9ID0gcmVxLmNvbW1vblBhcmFtc1xuICBsZXQgc3RhcnJlZEJ5QWNjb3VudDogQWNjb3VudCB8IG51bGwgPSBudWxsXG4gIC8vIEdldCBhbGwgcGFja2FnZXMgdGhhdCBhcmUgc25pcHBldHNcbiAgbGV0IHBhY2thZ2VzID0gY3R4LmRiLnBhY2thZ2VzLmZpbHRlcigocGtnKSA9PiBwa2cuaXNfc25pcHBldCA9PT0gdHJ1ZSlcblxuICAvLyBGaWx0ZXIgYnkgb3duZXJfbmFtZSBpZiBwcm92aWRlZFxuICBpZiAob3duZXJfbmFtZSkge1xuICAgIHBhY2thZ2VzID0gcGFja2FnZXMuZmlsdGVyKFxuICAgICAgKHBrZykgPT5cbiAgICAgICAgcGtnLm93bmVyX2dpdGh1Yl91c2VybmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gb3duZXJfbmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgIClcbiAgfVxuXG4gIC8vIEZpbHRlciBieSB1bnNjb3BlZF9uYW1lIGlmIHByb3ZpZGVkXG4gIGlmICh1bnNjb3BlZF9uYW1lKSB7XG4gICAgcGFja2FnZXMgPSBwYWNrYWdlcy5maWx0ZXIoXG4gICAgICAocGtnKSA9PiBwa2cudW5zY29wZWRfbmFtZS50b0xvd2VyQ2FzZSgpID09PSB1bnNjb3BlZF9uYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgKVxuICB9XG5cbiAgLy8gRmlsdGVyIGJ5IHN0YXJyZWRfYnkgaWYgcHJvdmlkZWRcbiAgaWYgKHN0YXJyZWRfYnkpIHtcbiAgICBzdGFycmVkQnlBY2NvdW50ID1cbiAgICAgIGN0eC5kYi5hY2NvdW50cy5maW5kKFxuICAgICAgICAoYWNjKSA9PiBhY2MuZ2l0aHViX3VzZXJuYW1lLnRvTG93ZXJDYXNlKCkgPT09IHN0YXJyZWRfYnkudG9Mb3dlckNhc2UoKSxcbiAgICAgICkgfHwgbnVsbFxuXG4gICAgaWYgKHN0YXJyZWRCeUFjY291bnQpIHtcbiAgICAgIGNvbnN0IGFjY291bnRQYWNrYWdlcyA9IGN0eC5kYi5hY2NvdW50UGFja2FnZXMuZmlsdGVyKFxuICAgICAgICAoYXApID0+IGFwLmFjY291bnRfaWQgPT09IHN0YXJyZWRCeUFjY291bnQ/LmFjY291bnRfaWQgJiYgYXAuaXNfc3RhcnJlZCxcbiAgICAgIClcblxuICAgICAgY29uc3Qgc3RhclRpbWVzdGFtcHMgPSBuZXcgTWFwKFxuICAgICAgICBhY2NvdW50UGFja2FnZXMubWFwKChhcCkgPT4gW2FwLnBhY2thZ2VfaWQsIGFwLnVwZGF0ZWRfYXRdKSxcbiAgICAgIClcblxuICAgICAgLy8gRmlsdGVyIHBhY2thZ2VzIHRvIG9ubHkgaW5jbHVkZSBzdGFycmVkIG9uZXNcbiAgICAgIHBhY2thZ2VzID0gcGFja2FnZXMuZmlsdGVyKChwa2cpID0+IHN0YXJUaW1lc3RhbXBzLmhhcyhwa2cucGFja2FnZV9pZCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHBhY2thZ2VzID0gW11cbiAgICB9XG4gIH1cblxuICAvLyBDb252ZXJ0IHBhY2thZ2VzIHRvIHNuaXBwZXRzXG4gIGNvbnN0IHNuaXBwZXRzID0gcGFja2FnZXMubWFwKChwa2cpID0+IHtcbiAgICBjb25zdCBwYWNrYWdlUmVsZWFzZSA9IGN0eC5kYi5nZXRQYWNrYWdlUmVsZWFzZUJ5SWQoXG4gICAgICBwa2cubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCB8fCBcIlwiLFxuICAgIClcblxuICAgIGxldCBzdGFyVGltZXN0YW1wXG4gICAgaWYgKHN0YXJyZWRfYnkgJiYgc3RhcnJlZEJ5QWNjb3VudCkge1xuICAgICAgY29uc3QgYWNjb3VudFBhY2thZ2UgPSBjdHguZGIuYWNjb3VudFBhY2thZ2VzLmZpbmQoXG4gICAgICAgIChhcCkgPT5cbiAgICAgICAgICBhcC5hY2NvdW50X2lkID09PSBzdGFycmVkQnlBY2NvdW50LmFjY291bnRfaWQgJiZcbiAgICAgICAgICBhcC5wYWNrYWdlX2lkID09PSBwa2cucGFja2FnZV9pZCAmJlxuICAgICAgICAgIGFwLmlzX3N0YXJyZWQsXG4gICAgICApXG4gICAgICBzdGFyVGltZXN0YW1wID0gYWNjb3VudFBhY2thZ2U/LnVwZGF0ZWRfYXRcbiAgICB9XG5cbiAgICBpZiAoIXBhY2thZ2VSZWxlYXNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzbmlwcGV0X2lkOiBwa2cucGFja2FnZV9pZCxcbiAgICAgICAgcGFja2FnZV9yZWxlYXNlX2lkOiBwa2cubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCB8fCBcIlwiLFxuICAgICAgICB1bnNjb3BlZF9uYW1lOiBwa2cudW5zY29wZWRfbmFtZSxcbiAgICAgICAgbmFtZTogcGtnLm5hbWUsXG4gICAgICAgIG93bmVyX25hbWU6IHBrZy5vd25lcl9naXRodWJfdXNlcm5hbWUgfHwgXCJcIixcbiAgICAgICAgZGVzY3JpcHRpb246IHBrZy5kZXNjcmlwdGlvbiB8fCBcIlwiLFxuICAgICAgICBzbmlwcGV0X3R5cGU6IHBrZy5zbmlwcGV0X3R5cGUgfHwgXCJib2FyZFwiLFxuICAgICAgICBjb2RlOiBcIlwiLFxuICAgICAgICBkdHM6IFwiXCIsXG4gICAgICAgIGNvbXBpbGVkX2pzOiBcIlwiLFxuICAgICAgICBjcmVhdGVkX2F0OiBwa2cuY3JlYXRlZF9hdCxcbiAgICAgICAgdXBkYXRlZF9hdDogcGtnLnVwZGF0ZWRfYXQsXG4gICAgICAgIHN0YXJyZWRfYXQ6IHN0YXJUaW1lc3RhbXAsIC8vIEFkZCBzdGFyIHRpbWVzdGFtcFxuICAgICAgICBzdGFyX2NvdW50OiBjdHguZGIuZ2V0U3RhckNvdW50KHBrZy5wYWNrYWdlX2lkKSxcbiAgICAgICAgaXNfc3RhcnJlZDogY3R4LmF1dGhcbiAgICAgICAgICA/IGN0eC5kYi5oYXNTdGFycmVkKGN0eC5hdXRoLmFjY291bnRfaWQsIHBrZy5wYWNrYWdlX2lkKVxuICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgIHZlcnNpb246IHBrZy5sYXRlc3RfdmVyc2lvbiB8fCBcIjAuMC4xXCIsXG4gICAgICAgIGlzX3ByaXZhdGU6IHBrZy5pc19wcml2YXRlIHx8IGZhbHNlLFxuICAgICAgICBpc19wdWJsaWM6IHBrZy5pc19wdWJsaWMgfHwgdHJ1ZSxcbiAgICAgICAgaXNfdW5saXN0ZWQ6IHBrZy5pc191bmxpc3RlZCB8fCBmYWxzZSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYWNrYWdlRmlsZXMgPSBjdHguZGIuZ2V0UGFja2FnZUZpbGVzQnlSZWxlYXNlSWQoXG4gICAgICBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgKVxuICAgIGNvbnN0IGNvZGVGaWxlID0gcGFja2FnZUZpbGVzLmZpbmQoXG4gICAgICAoZmlsZTogeyBmaWxlX3BhdGg6IHN0cmluZyB9KSA9PlxuICAgICAgICBmaWxlLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c1wiIHx8IGZpbGUuZmlsZV9wYXRoID09PSBcImluZGV4LnRzeFwiLFxuICAgIClcblxuICAgIGNvbnN0IHNuaXBwZXQgPSB7XG4gICAgICBzbmlwcGV0X2lkOiBwa2cucGFja2FnZV9pZCxcbiAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogcGtnLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgfHwgXCJcIixcbiAgICAgIHVuc2NvcGVkX25hbWU6IHBrZy51bnNjb3BlZF9uYW1lLFxuICAgICAgbmFtZTogcGtnLm5hbWUsXG4gICAgICBvd25lcl9uYW1lOiBwa2cub3duZXJfZ2l0aHViX3VzZXJuYW1lIHx8IFwiXCIsXG4gICAgICBkZXNjcmlwdGlvbjogcGtnLmRlc2NyaXB0aW9uIHx8IFwiXCIsXG4gICAgICBzbmlwcGV0X3R5cGU6IHBrZy5zbmlwcGV0X3R5cGUgfHwgXCJib2FyZFwiLFxuICAgICAgY29kZTogY29kZUZpbGU/LmNvbnRlbnRfdGV4dCB8fCBcIlwiLFxuICAgICAgZHRzOlxuICAgICAgICBwYWNrYWdlRmlsZXMuZmluZChcbiAgICAgICAgICAoZmlsZTogeyBmaWxlX3BhdGg6IHN0cmluZyB9KSA9PlxuICAgICAgICAgICAgZmlsZS5maWxlX3BhdGggPT09IFwiL2Rpc3QvaW5kZXguZC50c1wiLFxuICAgICAgICApPy5jb250ZW50X3RleHQgfHwgXCJcIixcbiAgICAgIGNvbXBpbGVkX2pzOlxuICAgICAgICBwYWNrYWdlRmlsZXMuZmluZChcbiAgICAgICAgICAoZmlsZTogeyBmaWxlX3BhdGg6IHN0cmluZyB9KSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9pbmRleC5qc1wiLFxuICAgICAgICApPy5jb250ZW50X3RleHQgfHwgXCJcIixcbiAgICAgIGNyZWF0ZWRfYXQ6IHBrZy5jcmVhdGVkX2F0LFxuICAgICAgdXBkYXRlZF9hdDogcGtnLnVwZGF0ZWRfYXQsXG4gICAgICBzdGFycmVkX2F0OiBzdGFyVGltZXN0YW1wLCAvLyBBZGQgc3RhciB0aW1lc3RhbXBcbiAgICAgIHN0YXJfY291bnQ6IGN0eC5kYi5nZXRTdGFyQ291bnQocGtnLnBhY2thZ2VfaWQpLFxuICAgICAgaXNfc3RhcnJlZDogY3R4LmF1dGhcbiAgICAgICAgPyBjdHguZGIuaGFzU3RhcnJlZChjdHguYXV0aC5hY2NvdW50X2lkLCBwa2cucGFja2FnZV9pZClcbiAgICAgICAgOiBmYWxzZSxcbiAgICAgIHZlcnNpb246IHBrZy5sYXRlc3RfdmVyc2lvbiB8fCBcIjAuMC4xXCIsXG4gICAgICBpc19wcml2YXRlOiBwa2cuaXNfcHJpdmF0ZSB8fCBmYWxzZSxcbiAgICAgIGlzX3B1YmxpYzogcGtnLmlzX3B1YmxpYyB8fCB0cnVlLFxuICAgICAgaXNfdW5saXN0ZWQ6IHBrZy5pc191bmxpc3RlZCB8fCBmYWxzZSxcbiAgICB9XG5cbiAgICByZXR1cm4gc25pcHBldFxuICB9KVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb2s6IHRydWUsXG4gICAgc25pcHBldHMsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IGFjY291bnRTbmlwcGV0U2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIHNuaXBwZXRfaWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gICAgaXNfc3RhcnJlZDogei5ib29sZWFuKCksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgc25pcHBldF9pZCB9ID0gcmVxLmpzb25Cb2R5XG5cbiAgLy8gQ2hlY2sgaWYgc25pcHBldCBleGlzdHNcbiAgY29uc3Qgc25pcHBldCA9IGN0eC5kYi5nZXRTbmlwcGV0QnlJZChzbmlwcGV0X2lkKVxuICBpZiAoIXNuaXBwZXQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJzbmlwcGV0X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJTbmlwcGV0IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBjaGVjayBpZiBub3QgYWxyZWFkeSBzdGFycmVkXG4gIGlmICghY3R4LmRiLmhhc1N0YXJyZWQoY3R4LmF1dGguYWNjb3VudF9pZCwgc25pcHBldF9pZCkpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJub3Rfc3RhcnJlZFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgaGF2ZSBub3Qgc3RhcnJlZCB0aGlzIHNuaXBwZXRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gUmVtb3ZlIHN0YXJcbiAgY3R4LmRiLnJlbW92ZVN0YXIoY3R4LmF1dGguYWNjb3VudF9pZCwgc25pcHBldF9pZClcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICAgIGlzX3N0YXJyZWQ6IGZhbHNlLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgc25pcHBldFNjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgYXV0aDogXCJub25lXCIsXG4gIHF1ZXJ5UGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgcTogei5zdHJpbmcoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIHNuaXBwZXRzOiB6LmFycmF5KHNuaXBwZXRTY2hlbWEpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IHEgfSA9IHJlcS5xdWVyeVxuICBjb25zdCBzbmlwcGV0cyA9IGN0eC5kYi5zZWFyY2hTbmlwcGV0cyhxKVxuICByZXR1cm4gY3R4Lmpzb24oeyBzbmlwcGV0cyB9KVxufSlcbiIsICJpbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBzbmlwcGV0U2NoZW1hIH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCIuLi8uLi8uLi9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIHNuaXBwZXRfaWQ6IHouc3RyaW5nKCksXG4gICAgY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgdW5zY29wZWRfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGR0czogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNvbXBpbGVkX2pzOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICBjaXJjdWl0X2pzb246IHouYXJyYXkoei5yZWNvcmQoei5hbnkoKSkpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICBtYW51YWxfZWRpdHNfanNvbl9jb250ZW50OiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICBzbmlwcGV0X3R5cGU6IHouZW51bShbXCJib2FyZFwiLCBcInBhY2thZ2VcIiwgXCJtb2RlbFwiLCBcImZvb3RwcmludFwiXSkub3B0aW9uYWwoKSxcbiAgICBpc19wcml2YXRlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIGlzX3VubGlzdGVkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICAgIHNuaXBwZXQ6IHNuaXBwZXRTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBzbmlwcGV0X2lkLFxuICAgIGNvZGUsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgdW5zY29wZWRfbmFtZSxcbiAgICBkdHMsXG4gICAgY29tcGlsZWRfanMsXG4gICAgY2lyY3VpdF9qc29uLFxuICAgIHNuaXBwZXRfdHlwZSxcbiAgICBtYW51YWxfZWRpdHNfanNvbl9jb250ZW50LFxuICAgIGlzX3ByaXZhdGUsXG4gICAgaXNfdW5saXN0ZWQsXG4gIH0gPSByZXEuanNvbkJvZHlcblxuICBjb25zdCBwYWNrYWdlSW5kZXggPSBjdHguZGIucGFja2FnZXMuZmluZEluZGV4KFxuICAgIChzKSA9PiBzLnBhY2thZ2VfaWQgPT09IHNuaXBwZXRfaWQsXG4gIClcblxuICBpZiAocGFja2FnZUluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInNuaXBwZXRfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlNuaXBwZXQgbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IF9wYWNrYWdlID0gY3R4LmRiLnBhY2thZ2VzW3BhY2thZ2VJbmRleF1cbiAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgKHIpID0+IHIucGFja2FnZV9yZWxlYXNlX2lkID09PSBfcGFja2FnZS5sYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkLFxuICApXG4gIGNvbnN0IHBhY2thZ2VGaWxlcyA9IGN0eC5kYi5wYWNrYWdlRmlsZXMuZmlsdGVyKFxuICAgIChmKSA9PiBmLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGFja2FnZVJlbGVhc2U/LnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgKVxuICBjb25zdCBjb2RlRmlsZSA9IHBhY2thZ2VGaWxlcy5maW5kKFxuICAgIChmKSA9PiBmLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c3hcIiB8fCBmLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c1wiLFxuICApXG4gIGNvbnN0IGR0c0ZpbGUgPSBwYWNrYWdlRmlsZXMuZmluZCgoZikgPT4gZi5maWxlX3BhdGggPT09IFwiL2Rpc3QvaW5kZXguZC50c1wiKVxuICBjb25zdCBjb21waWxlZEpzRmlsZSA9IHBhY2thZ2VGaWxlcy5maW5kKFxuICAgIChmKSA9PiBmLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9pbmRleC5qc1wiLFxuICApXG4gIGNvbnN0IG1hbnVhbEVkaXRzSnNvbkZpbGUgPSBwYWNrYWdlRmlsZXMuZmluZChcbiAgICAoZikgPT4gZi5maWxlX3BhdGggPT09IFwibWFudWFsLWVkaXRzLmpzb25cIixcbiAgKVxuICBjb25zdCBjaXJjdWl0SnNvbkZpbGUgPSBwYWNrYWdlRmlsZXMuZmluZChcbiAgICAoZikgPT4gZi5maWxlX3BhdGggPT09IFwiL2Rpc3QvY2lyY3VpdC5qc29uXCIsXG4gIClcblxuICBpZiAoX3BhY2thZ2Uub3duZXJfZ2l0aHViX3VzZXJuYW1lICE9PSBjdHguYXV0aC5naXRodWJfdXNlcm5hbWUpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMywge1xuICAgICAgZXJyb3JfY29kZTogXCJmb3JiaWRkZW5cIixcbiAgICAgIG1lc3NhZ2U6IFwiWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byB1cGRhdGUgdGhpcyBzbmlwcGV0XCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZWRTbmlwcGV0ID0gY3R4LmRiLnVwZGF0ZVNuaXBwZXQoc25pcHBldF9pZCwge1xuICAgIGNvZGU6IGNvZGUgPz8gY29kZUZpbGU/LmNvbnRlbnRfdGV4dCA/PyBcIlwiLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiA/PyBfcGFja2FnZS5kZXNjcmlwdGlvbiA/PyBcIlwiLFxuICAgIHVuc2NvcGVkX25hbWU6IHVuc2NvcGVkX25hbWUgPz8gX3BhY2thZ2UudW5zY29wZWRfbmFtZSxcbiAgICBuYW1lOiB1bnNjb3BlZF9uYW1lXG4gICAgICA/IGAke2N0eC5hdXRoLmdpdGh1Yl91c2VybmFtZX0vJHt1bnNjb3BlZF9uYW1lfWBcbiAgICAgIDogX3BhY2thZ2UubmFtZSxcbiAgICBkdHM6IGR0cyA/PyBkdHNGaWxlPy5jb250ZW50X3RleHQgPz8gXCJcIixcbiAgICBjb21waWxlZF9qczogY29tcGlsZWRfanMgPz8gY29tcGlsZWRKc0ZpbGU/LmNvbnRlbnRfdGV4dCA/PyBcIlwiLFxuICAgIG1hbnVhbF9lZGl0c19qc29uX2NvbnRlbnQ6XG4gICAgICBtYW51YWxfZWRpdHNfanNvbl9jb250ZW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBtYW51YWxfZWRpdHNfanNvbl9jb250ZW50XG4gICAgICAgIDogKG1hbnVhbEVkaXRzSnNvbkZpbGU/LmNvbnRlbnRfdGV4dCA/PyBcIlwiKSxcbiAgICBjaXJjdWl0X2pzb246XG4gICAgICBjaXJjdWl0X2pzb24gPz9cbiAgICAgIChjaXJjdWl0SnNvbkZpbGU/LmNvbnRlbnRfdGV4dFxuICAgICAgICA/IEpTT04ucGFyc2UoY2lyY3VpdEpzb25GaWxlLmNvbnRlbnRfdGV4dClcbiAgICAgICAgOiBbXSksXG4gICAgc25pcHBldF90eXBlOiBzbmlwcGV0X3R5cGUgPz8gX3BhY2thZ2Uuc25pcHBldF90eXBlLFxuICAgIGlzX3ByaXZhdGU6IGlzX3ByaXZhdGUgPz8gX3BhY2thZ2UuaXNfcHJpdmF0ZSA/PyBmYWxzZSxcbiAgICBpc191bmxpc3RlZDogaXNfdW5saXN0ZWQgPz8gX3BhY2thZ2UuaXNfdW5saXN0ZWQgPz8gZmFsc2UsXG4gICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICB9KVxuXG4gIGlmICghdXBkYXRlZFNuaXBwZXQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDUwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJ1cGRhdGVfZmFpbGVkXCIsXG4gICAgICBtZXNzYWdlOiBcIkZhaWxlZCB0byB1cGRhdGUgc25pcHBldFwiLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICAgIHNuaXBwZXQ6IHVwZGF0ZWRTbmlwcGV0LFxuICB9KVxufSlcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFRLHVCQUFzQjtBQUM5QixTQUFTLG9DQUFvQzs7O0FDRDdDLFNBQVMsNEJBQTRCOzs7QUNBckMsU0FBUyxrQkFBa0I7QUFFM0IsU0FBUyxhQUFhO0FBQ3RCLFNBQVMsbUJBQW1CO0FBRTVCLFNBQVMsZUFBZTs7O0FDTHhCLFNBQVMsU0FBUztBQUVYLElBQU0sY0FBYyxFQUN4QixPQUFPO0FBQUEsRUFDTixZQUFZLEVBQUUsT0FBTztBQUFBLEVBQ3JCLFNBQVMsRUFBRSxPQUFPO0FBQ3BCLENBQUMsRUFDQSxZQUFZO0FBRVIsSUFBTSxzQkFBc0IsRUFBRSxPQUFPO0FBQUEsRUFDMUMsT0FBTztBQUNULENBQUM7QUFFTSxJQUFNLE1BQU0sRUFBRSxJQUFJO0FBRWxCLElBQU0sZ0JBQWdCLEVBQUUsT0FBTztBQUFBLEVBQ3BDLFlBQVksRUFBRSxPQUFPO0FBQUEsRUFDckIsb0JBQW9CLEVBQUUsT0FBTztBQUFBLEVBQzdCLE1BQU0sRUFBRSxPQUFPO0FBQUEsRUFDZixlQUFlLEVBQUUsT0FBTztBQUFBLEVBQ3hCLFlBQVksRUFBRSxPQUFPO0FBQUEsRUFDckIsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEtBQUs7QUFBQSxFQUNyQyxNQUFNLEVBQUUsT0FBTztBQUFBLEVBQ2YsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDekIsYUFBYSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUztBQUFBLEVBQzVDLGNBQWMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVB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QixxQkFBcUI7QUFBQSxNQUN2QjtBQUFBLE1BQ0E7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLGdCQUFnQjtBQUFBLFFBQ2hCLE1BQU07QUFBQSxRQUNOLFlBQVk7QUFBQSxRQUNaLFlBQVksQ0FBQyxRQUFRLEdBQUc7QUFBQSxRQUN4QixxQkFBcUI7QUFBQSxNQUN2QjtBQUFBLE1BQ0E7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLGdCQUFnQjtBQUFBLFFBQ2hCLE1BQU07QUFBQSxRQUNOLFlBQVk7QUFBQSxRQUNaLFlBQVksQ0FBQyxRQUFRLEdBQUc7QUFBQSxRQUN4QixxQkFBcUI7QUFBQSxNQUN2QjtBQUFBLE1BQ0E7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLGdCQUFnQjtBQUFBLFFBQ2hCLE1BQU07QUFBQSxRQUNOLFlBQVk7QUFBQSxRQUNaLFlBQVksQ0FBQyxRQUFRLEdBQUc7QUFBQSxRQUN4QixxQkFBcUI7QUFBQSxNQUN2QjtBQUFBLE1BQ0E7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLGdCQUFnQjtBQUFBLFFBQ2hCLE1BQU07QUFBQSxRQUNOLFlBQVk7QUFBQSxRQUNaLFlBQVksQ0FBQyxRQUFRLEdBQUc7QUFBQSxRQUN4QixxQkFBcUI7QUFBQSxNQUN2QjtBQUFBLE1BQ0E7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLGdCQUFnQjtBQUFBLFFBQ2hCLE1BQU07QUFBQSxRQUNOLFlBQVk7QUFBQSxRQUNaLFlBQVksQ0FBQyxRQUFRLEdBQUc7QUFBQSxRQUN4QixxQkFBcUI7QUFBQSxNQUN2QjtBQUFBLE1BQ0E7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLGdCQUFnQjtBQUFBLFFBQ2hCLE1BQU07QUFBQSxRQUNOLFlBQVk7QUFBQSxRQUNaLFlBQVksQ0FBQyxRQUFRLEdBQUc7QUFBQSxRQUN4QixxQkFBcUI7QUFBQSxNQUN2QjtBQUFBLE1BQ0E7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLHFCQUFxQjtBQUFBLFFBQ3JCLE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxRQUNOLHVCQUF1QixDQUFDO0FBQUEsTUFDMUI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFFBQ1YsTUFBTTtBQUFBLFVBQ0osT0FBTztBQUFBLFVBQ1AsUUFBUTtBQUFBLFFBQ1Y7QUFBQSxRQUNBLGFBQWE7QUFBQSxRQUNiLGFBQWEsQ0FBQztBQUFBLFFBQ2QscUJBQXFCO0FBQUEsTUFDdkI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJB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R0FBRztBQUFBLFFBQ3hCLHFCQUFxQjtBQUFBLE1BQ3ZCO0FBQUEsTUFDQTtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sZ0JBQWdCO0FBQUEsUUFDaEIsTUFBTTtBQUFBLFFBQ04sWUFBWTtBQUFBLFFBQ1osWUFBWSxDQUFDLFFBQVEsR0FBRztBQUFBLFFBQ3hCLHFCQUFxQjtBQUFBLE1BQ3ZCO0FBQUEsTUFDQTtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sZ0JBQWdCO0FBQUEsUUFDaEIsTUFBTTtBQUFBLFFBQ04sWUFBWTtBQUFBLFFBQ1osWUFBWSxDQUFDLFFBQVEsR0FBRztBQUFBLFFBQ3hCLHFCQUFxQjtBQUFBLE1BQ3ZCO0FBQUEsTUFDQTtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sZ0JBQWdCO0FBQUEsUUFDaEIsTUFBTTtBQUFBLFFBQ04sWUFBWTtBQUFBLFFBQ1osWUFBWSxDQUFDLFFBQVEsR0FBRztBQUFBLFFBQ3hCLHFCQUFxQjtBQUFBLE1BQ3ZCO0FBQUEsTUFDQTtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sZ0JBQWdCO0FBQUEsUUFDaEIsTUFBTTtBQUFBLFFBQ04sWUFBWTtBQUFBLFFBQ1osWUFBWSxDQUFDLFFBQVEsR0FBRztBQUFBLFFBQ3hCLHFCQUFxQjtBQUFBLE1BQ3ZCO0FBQUEsTUFDQTtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sZ0JBQWdCO0FBQUEsUUFDaEIsTUFBTTtBQUFBLFFBQ04sWUFBWTtBQUFBLFFBQ1osWUFBWSxDQUFDLFFBQVEsR0FBRztBQUFBLFFBQ3hCLHFCQUFxQjtBQUFBLE1BQ3ZCO0FBQUEsTUFDQTtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sZ0JBQWdCO0FBQUEsUUFDaEIsTUFBTTtBQUFBLFFBQ04sWUFBWTtBQUFBLFFBQ1osWUFBWSxDQUFDLFFBQVEsR0FBRztBQUFBLFFBQ3hCLHFCQUFxQjtBQUFBLE1BQ3ZCO0FBQUEsTUFDQTtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04scUJBQXFCO0FBQUEsUUFDckIsT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLE1BQ1I7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFFBQ1YsTUFBTTtBQUFBLFVBQ0osT0FBTztBQUFBLFVBQ1AsUUFBUTtBQUFBLFFBQ1Y7QUFBQSxRQUNBLGFBQWE7QUFBQSxRQUNiLGFBQWEsQ0FBQztBQUFBLFFBQ2QscUJBQXFCO0FBQUEsTUFDdkI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEs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Q3ZCO0FBQUEsTUFDQTtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sZ0JBQWdCO0FBQUEsUUFDaEIsTUFBTTtBQUFBLFFBQ04sWUFBWTtBQUFBLFFBQ1osWUFBWSxDQUFDLFFBQVEsR0FBRztBQUFBLFFBQ3hCLHFCQUFxQjtBQUFBLE1BQ3ZCO0FBQUEsTUFDQTtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sZ0JBQWdCO0FBQUEsUUFDaEIsTUFBTTtBQUFBLFFBQ04sWUFBWTtBQUFBLFFBQ1osWUFBWSxDQUFDLFFBQVEsR0FBRztBQUFBLFFBQ3hCLHFCQUFxQjtBQUFBLE1BQ3ZCO0FBQUEsTUFDQTtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sZ0JBQWdCO0FBQUEsUUFDaEIsTUFBTTtBQUFBLFFBQ04sWUFBWTtBQUFBLFFBQ1osWUFBWSxDQUFDLFFBQVEsR0FBRztBQUFBLFFBQ3hCLHFCQUFxQjtBQUFBLE1BQ3ZCO0FBQUEsTUFDQTtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sZ0JBQWdCO0FBQUEsUUFDaEIsTUFBTTtBQUFBLFFBQ04sWUFBWTtBQUFBLFFBQ1osWUFBWSxDQUFDLFFBQVEsR0FBRztBQUFBLFFBQ3hCLHFCQUFxQjtBQUFBLE1BQ3ZCO0FBQUEsTUFDQTtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sZ0JBQWdCO0FBQUEsUUFDaEIsTUFBTTtBQUFBLFFBQ04sWUFBWTtBQUFBLFFBQ1osWUFBWSxDQUFDLFFBQVEsR0FBRztBQUFBLFFBQ3hCLHFCQUFxQjtBQUFBLE1BQ3ZCO0FBQUEsTUFDQTtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sZ0JBQWdCO0FBQUEsUUFDaEIsTUFBTTtBQUFBLFFBQ04sWUFBWTtBQUFBLFFBQ1osWUFBWSxDQUFDLFFBQVEsR0FBRztBQUFBLFFBQ3hCLHFCQUFxQjtBQUFBLE1BQ3ZCO0FBQUEsTUFDQTtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04scUJBQXFCO0FBQUEsUUFDckIsT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLE1BQ1I7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFFBQ1YsTUFBTTtBQUFBLFVBQ0osT0FBTztBQUFBLFVBQ1AsUUFBUTtBQUFBLFFBQ1Y7QUFBQSxRQUNBLGFBQWE7QUFBQSxRQUNiLGFBQWEsQ0FBQztBQUFBLFFBQ2QscUJBQXFCO0FBQUEsTUFDdkI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixRQUFRO0FBQUEsVUFDTixHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDTDtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsUUFDbEIsOEJBQThCO0FBQUEsUUFDOUIsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWTtB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RUFBUSw2QkFBOEM7QUFBQSxFQUFRLCtCQUFnRDtBQUFBLEVBQVEsc0JBQXVDRztBQUFBLEVBQVEsNkJBQThDO0FBQUEsRUFBUSx3QkFBeUNHO0FBQUEsRUFBUSx1Q0FBd0Q7QUFBQSxFQUFRLHdCQUF5Q0Y7QUFBQSxFQUFRLGNBQStCO0FBQUEsRUFBUSx3QkFBeUNDO0FBQUEsRUFBUSwwQkFBMkNFO0FBQUEsRUFBUSx3QkFBeUNMO0FBQUEsRUFBUSx3QkFBeUNHO0FBQUEsRUFBUSwwQkFBMkNHO0FBQUEsRUFBUSxzQ0FBdURDO0FBQUEsRUFBUSwyQkFBNEM7QUFBQSxFQUFRLHFCQUFzQ1Q7QUFBQSxFQUFRLDZEQUE4RTtBQUFBLEVBQVEsNkJBQThDVTtBQUFBLEVBQVEsK0JBQWdEQztBQUFBLEVBQVEsc0JBQXVDUjtBQUFBLEVBQVEsNkJBQThDUztBQUFBLEVBQVEsd0JBQXlDTjtBQUFBLEVBQVEsd0JBQXlDRjtBQUMvZ0s7QUFFQSxJQUFNLGFBQWE7QUFBQSxFQUNqQixjQUFjLGdCQUFnQixPQUFPLEtBQUssb0JBQW9CLENBQUM7QUFBQSxFQUMvRDtBQUFBLEVBQ0EsYUFBYSxPQUFPLEtBQUssWUFBWSw2QkFBNkIsWUFBWSxPQUFPLEVBQUUsR0FBRztBQUM1RjtBQUVBLElBQU8sZ0JBQVE7IiwKICAibmFtZXMiOiBbInNlZWQiLCAic3RhdGUiLCAicGFja2FnZVJlbGVhc2UiLCAicGFja2FnZUZpbGVzIiwgInBrZyIsICJhY2NvdW50IiwgIm9yZyIsICJkZWNvZGVKd3QiLCAia2xldXIiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJnZXRfZGVmYXVsdCIsICJ6IiwgInoiLCAieiIsICJhbnlyb3V0ZV9kZWZhdWx0IiwgInoiLCAieiIsICJjcmVhdGVfZGVmYXVsdCIsICJ6IiwgIkJ1ZmZlciIsICJ6IiwgInJlcXVlc3RTY2hlbWEiLCAiQnVmZmVyIiwgInoiLCAiY3JlYXRlX2RlZmF1bHQiLCAieiIsICJnZXRfZGVmYXVsdCIsICJ6IiwgImxpc3RfZGVmYXVsdCIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAiZ2V0X2RlZmF1bHQiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgImNyZWF0ZV9kZWZhdWx0IiwgInoiLCAiZ2V0X2RlZmF1bHQiLCAieiIsICJ6IiwgImNyZWF0ZV9kZWZhdWx0IiwgInoiLCAiZ2V0X2RlZmF1bHQiLCAieiIsICJ6IiwgImxpc3RfZGVmYXVsdCIsICJ6IiwgInoiLCAieiIsICJjcmVhdGVfZGVmYXVsdCIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAiZ2V0X2RlZmF1bHQiLCAieiIsICJ6IiwgInoiLCAiY3JlYXRlX2RlZmF1bHQiLCAieiIsICJnZXRfZGVmYXVsdCIsICJ6IiwgImxpc3RfZGVmYXVsdCIsICJ6IiwgInoiLCAieiIsICJ6IiwgImxpc3RfZGVmYXVsdCIsICJ6IiwgInoiLCAieiIsICJ6IiwgInVwZGF0ZV9kZWZhdWx0IiwgInoiLCAieiIsICJ6IiwgInoiLCAiZ2V0X2RlZmF1bHQiLCAieiIsICJ6IiwgImxpc3RfZGVmYXVsdCIsICJ6IiwgInoiLCAieiIsICJyb3V0ZVNwZWMiLCAiY3JlYXRlX2RlZmF1bHQiLCAieiIsICJkZWxldGVfZGVmYXVsdCIsICJ6IiwgInoiLCAicm91dGVTcGVjIiwgInoiLCAicm91dGVTcGVjIiwgInoiLCAiZ2V0X2RlZmF1bHQiLCAieiIsICJyb3V0ZVNwZWMiLCAieiIsICJsaXN0X2RlZmF1bHQiLCAieiIsICJjcmVhdGVfZGVmYXVsdCIsICJ6IiwgImdldF9kZWZhdWx0IiwgInoiLCAibGlzdF9kZWZhdWx0IiwgInoiLCAieiIsICJ1cGRhdGVfZGVmYXVsdCIsICJyZWxlYXNlIiwgInoiLCAicGtnIiwgInoiLCAiY3JlYXRlX2RlZmF1bHQiLCAieiIsICJkZWxldGVfZGVmYXVsdCIsICJ6IiwgInoiLCAieiIsICJ6IiwgImdldF9kZWZhdWx0IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJsaXN0X2RlZmF1bHQiLCAieiIsICJwa2ciLCAieiIsICJzZWFyY2hfZGVmYXVsdCIsICJ6IiwgInoiLCAieiIsICJ1cGRhdGVfZGVmYXVsdCIsICJ6IiwgInoiLCAieiIsICJkZWxldGVfZGVmYXVsdCIsICJ6IiwgImFkZF9zdGFyX2RlZmF1bHQiLCAieiIsICJjcmVhdGVfZGVmYXVsdCIsICJ6IiwgImRlbGV0ZV9kZWZhdWx0IiwgInoiLCAiZG93bmxvYWRfZGVmYXVsdCIsICJ6IiwgImZldGNoRWFzeUVEQUNvbXBvbmVudCIsICJjb252ZXJ0UmF3RWFzeUVkYVRvVHMiLCAiZ2VuZXJhdGVfZnJvbV9qbGNwY2JfZGVmYXVsdCIsICJ6IiwgInoiLCAiY29udmVydENpcmN1aXRKc29uVG9TY2hlbWF0aWNTdmciLCAiY29udmVydENpcmN1aXRKc29uVG9QY2JTdmciLCAieiIsICJnZXRfZGVmYXVsdCIsICJjb252ZXJ0Q2lyY3VpdEpzb25Ub0Fzc2VtYmx5U3ZnIiwgImNvbnZlcnRDaXJjdWl0SnNvblRvUGNiU3ZnIiwgImNvbnZlcnRDaXJjdWl0SnNvblRvU2NoZW1hdGljU3ZnIiwgInoiLCAiY29udmVydENpcmN1aXRKc29uVG9TY2hlbWF0aWNTdmciLCAiY29udmVydENpcmN1aXRKc29uVG9QY2JTdmciLCAiY29udmVydENpcmN1aXRKc29uVG9Bc3NlbWJseVN2ZyIsICJ6IiwgImxpc3RfbGF0ZXN0X2RlZmF1bHQiLCAieiIsICJ6IiwgImxpc3RfdHJlbmRpbmdfZGVmYXVsdCIsICJ6IiwgInoiLCAibGlzdF9kZWZhdWx0IiwgInoiLCAieiIsICJyZW1vdmVfc3Rhcl9kZWZhdWx0IiwgInoiLCAic2VhcmNoX2RlZmF1bHQiLCAieiIsICJ6IiwgInVwZGF0ZV9kZWZhdWx0IiwgInoiLCAiZ2V0X2RlZmF1bHQiLCAiYW55cm91dGVfZGVmYXVsdCIsICJjcmVhdGVfZGVmYXVsdCIsICJsaXN0X2RlZmF1bHQiLCAidXBkYXRlX2RlZmF1bHQiLCAiZGVsZXRlX2RlZmF1bHQiLCAic2VhcmNoX2RlZmF1bHQiLCAiYWRkX3N0YXJfZGVmYXVsdCIsICJkb3dubG9hZF9kZWZhdWx0IiwgImdlbmVyYXRlX2Zyb21famxjcGNiX2RlZmF1bHQiLCAibGlzdF9sYXRlc3RfZGVmYXVsdCIsICJsaXN0X3RyZW5kaW5nX2RlZmF1bHQiLCAicmVtb3ZlX3N0YXJfZGVmYXVsdCJdCn0K
|
|
10443
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiIsICJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjLnRzIiwgImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9kYi1jbGllbnQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvYXV0b2xvYWQtZGV2LXBhY2thZ2VzLnRzIiwgImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zZWVkLnRzIiwgImZha2Utc25pcHBldHMtYXBpL2xpYi9wYWNrYWdlX2ZpbGUvZ2VuZXJhdGUtZnMtc2hhLnRzIiwgImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtZGIudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC1jdHgtZXJyb3IudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC1zZXNzaW9uLWF1dGgudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC1vcHRpb25hbC1zZXNzaW9uLWF1dGgudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC1lcnJvci1oYW5kbGluZy50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXJlcXVlc3QtbG9nZ2luZy50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL19mYWtlL2FpX3Jldmlld3MvcHJvY2Vzc19yZXZpZXcudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9fZmFrZS9kYXRhc2hlZXRzL3Byb2Nlc3NfYWxsX2RhdGFzaGVldHMudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9fZmFrZS9kYi50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL19mYWtlL21vdmVfb3JkZXJzX2ZvcndhcmQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvdXRpbHMvb3JkZXItc3RlcHMudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9fZmFrZS9yZWNlaXZlZF9xdW90ZXMudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9fZmFrZS9ydW5fYXN5bmNfdGFza3MudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9fZmFrZS9zZWVkLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvYWNjb3VudHMvZ2V0X2FjY291bnRfYmFsYW5jZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2FjY291bnRzL2dldC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2FjY291bnRzL3NlYXJjaC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2FjY291bnRzL3VwZGF0ZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2FpX3Jldmlld3MvY3JlYXRlLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvYWlfcmV2aWV3cy9nZXQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9haV9yZXZpZXdzL2xpc3QudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9haS9bLi4uYW55cm91dGVdLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvYWkudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9haXN0cmVhbS9bLi4uYW55cm91dGVdLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvYXV0b2NvbXBsZXRlL2NyZWF0ZV9hdXRvY29tcGxldGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9idWdfcmVwb3J0cy9jcmVhdGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9idWdfcmVwb3J0cy9kb3dubG9hZF96aXAudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9idWdfcmVwb3J0cy91cGxvYWRfZmlsZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS91dGlscy9ub3JtYWxpemVQcm9qZWN0RmlsZVBhdGgudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9kYXRhc2hlZXRzL2NyZWF0ZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2RhdGFzaGVldHMvZ2V0LnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvZGF0YXNoZWV0cy9saXN0LnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvZ2l0aHViL2luc3RhbGxhdGlvbnMvY3JlYXRlX25ld19pbnN0YWxsYXRpb25fcmVkaXJlY3QudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9naXRodWIvcmVwb3MvbGlzdF9hdmFpbGFibGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9naXRodWIvcmVwb3MvcmVmcmVzaC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2hlYWx0aC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2ludGVybmFsL3Nlc3Npb25zL2NyZWF0ZV93aXRob3V0X2F1dGgudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmRlcl9maWxlcy9nZXQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmRlcl9maWxlcy91cGxvYWQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmRlcl9xdW90ZXMvY3JlYXRlX2FsbF92ZW5kb3JfcXVvdGVzLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3JkZXJfcXVvdGVzL2NyZWF0ZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZGVyX3F1b3Rlcy9nZXQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmRlcnMvY3JlYXRlLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3JkZXJzL2dldC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZGVycy9saXN0LnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9hZGRfbWVtYmVyLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9jcmVhdGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3B1YmxpYy1tYXBwaW5nL3B1YmxpYy1tYXAtb3JnLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9kZWxldGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL2dldF9tZW1iZXIudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL2dldC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvaW52aXRhdGlvbnMvYWNjZXB0LnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9pbnZpdGF0aW9ucy9jcmVhdGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL2ludml0YXRpb25zL2dldC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvaW52aXRhdGlvbnMvbGlzdC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvaW52aXRhdGlvbnMvcmV2b2tlLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9saXN0X21lbWJlcnMudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL2xpc3QudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL3JlbW92ZV9tZW1iZXIudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL3VwZGF0ZV9tZW1iZXIudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL3VwZGF0ZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvdXBsb2FkX2F2YXRhci50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VfYnVpbGRzL2dldC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcHVibGljLW1hcHBpbmcvcHVibGljLW1hcC1wYWNrYWdlLWJ1aWxkLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9idWlsZHMvbGlzdC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcGFja2FnZV9yZWxlYXNlL2ZpbmQtcGFja2FnZS1yZWxlYXNlLWlkLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9maWxlcy9jcmVhdGVfb3JfdXBkYXRlLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9maWxlcy9jcmVhdGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlX2ZpbGVzL2RlbGV0ZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcGFja2FnZV9maWxlL2dldC1wYWNrYWdlLWZpbGUtaWQtZnJvbS1maWxlLWRlc2NyaXB0b3IudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlX2ZpbGVzL2Rvd25sb2FkLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9maWxlcy9nZXQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlX2ZpbGVzL2xpc3QudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3B1YmxpYy1tYXBwaW5nL3B1YmxpYy1tYXAtcGFja2FnZS1yZWxlYXNlLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9yZWxlYXNlcy9jcmVhdGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlX3JlbGVhc2VzL2dldC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VfcmVsZWFzZXMvbGlzdC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VfcmVsZWFzZXMvcmVidWlsZC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VfcmVsZWFzZXMvdXBkYXRlLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZXMvYWRkX3N0YXIudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3B1YmxpYy1tYXBwaW5nL3B1YmxpYy1tYXAtcGFja2FnZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2NyZWF0ZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2RlbGV0ZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2ZvcmsudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy9nZXQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy9pbWFnZXMvW293bmVyX2dpdGh1Yl91c2VybmFtZV0vW3Vuc2NvcGVkX25hbWVdL1t2aWV3X2Zvcm1hdF0udHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy9saXN0X2xhdGVzdC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2xpc3RfdHJlbmRpbmcudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy9saXN0LnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZXMvcmVtb3ZlX3N0YXIudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy9zZWFyY2gudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy91cGRhdGVfYWlfZGVzY3JpcHRpb24udHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy91cGRhdGUudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wcm94eS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3Nlc3Npb25zL2RlbGV0ZS50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL2FkZF9zdGFyLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvY3JlYXRlLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvZGVsZXRlLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvZG93bmxvYWQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9nZXRfaW1hZ2UudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9nZXQudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9pbWFnZXMvW2F1dGhvcl0vW3NuaXBwZXRfbmFtZV0vW3R5cGVGb3JtYXRdLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvbGlzdF9sYXRlc3QudHMiLCAiZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9saXN0X3RyZW5kaW5nLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvbGlzdC50cyIsICJmYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL3JlbW92ZV9zdGFyLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvc2VhcmNoLnRzIiwgImZha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvdXBkYXRlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge2dldFJvdXRlTWF0Y2hlcn0gZnJvbSBcIm5leHQtcm91dGUtbWF0Y2hlclwiXG5pbXBvcnQgeyBtYWtlUmVxdWVzdEFnYWluc3RXaW50ZXJTcGVjIH0gZnJvbSBcIndpbnRlcnNwZWNcIlxuXG5pbXBvcnQgKiBhcyB2anNpcnZueGh0d3VyeHNiIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9fZmFrZS9haV9yZXZpZXdzL3Byb2Nlc3NfcmV2aWV3LnRzXCJcbmltcG9ydCAqIGFzIHhwemVvb2x2cHp2ZnhzZGsgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL19mYWtlL2RhdGFzaGVldHMvcHJvY2Vzc19hbGxfZGF0YXNoZWV0cy50c1wiXG5pbXBvcnQgKiBhcyB4eGpqeGZha2p4cndsc2NwIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9fZmFrZS9kYi50c1wiXG5pbXBvcnQgKiBhcyBpanN3cXVlbGtoZmRrdWZ1IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9fZmFrZS9tb3ZlX29yZGVyc19mb3J3YXJkLnRzXCJcbmltcG9ydCAqIGFzIHRyeW5uaWhpbmp0cWhhaHAgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL19mYWtlL3JlY2VpdmVkX3F1b3Rlcy50c1wiXG5pbXBvcnQgKiBhcyBqY2Fxd3F3ZHhxcWNmcnRxIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9fZmFrZS9ydW5fYXN5bmNfdGFza3MudHNcIlxuaW1wb3J0ICogYXMgem5rcnd3cm9seXF4bWt6aSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvX2Zha2Uvc2VlZC50c1wiXG5pbXBvcnQgKiBhcyB2dmhveW9zendocnRla29pIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9hY2NvdW50cy9nZXRfYWNjb3VudF9iYWxhbmNlLnRzXCJcbmltcG9ydCAqIGFzIHd3d3B6dWtvcWx1cHNtZ2EgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2FjY291bnRzL2dldC50c1wiXG5pbXBvcnQgKiBhcyBmbnlrbHRtbG16eWVwcnV2IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9hY2NvdW50cy9zZWFyY2gudHNcIlxuaW1wb3J0ICogYXMgZXRvdWpxYWR2YXZrbGpibyBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvYWNjb3VudHMvdXBkYXRlLnRzXCJcbmltcG9ydCAqIGFzIGNlZHd1cmRma3lnZmNudm0gZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2FpX3Jldmlld3MvY3JlYXRlLnRzXCJcbmltcG9ydCAqIGFzIHVmemlkZ29ubGt1Y3JkcmggZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2FpX3Jldmlld3MvZ2V0LnRzXCJcbmltcG9ydCAqIGFzIHNzdmZzcWFnaG1jaWp5d20gZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2FpX3Jldmlld3MvbGlzdC50c1wiXG5pbXBvcnQgKiBhcyB3dWVmb2F4aGJsdGRyeGFoIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9haS50c1wiXG5pbXBvcnQgKiBhcyBvZHh5eHVuemFwd2ZvaWJoIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9haS9bLi4uYW55cm91dGVdLnRzXCJcbmltcG9ydCAqIGFzIG5maXN0cXpyYmd1amJseXggZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2Fpc3RyZWFtL1suLi5hbnlyb3V0ZV0udHNcIlxuaW1wb3J0ICogYXMgZ292ZHNndnppZmlzdnJ3ZSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvYXV0b2NvbXBsZXRlL2NyZWF0ZV9hdXRvY29tcGxldGUudHNcIlxuaW1wb3J0ICogYXMgcmtvcXRkeW1wY2poZGdyeSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvYnVnX3JlcG9ydHMvY3JlYXRlLnRzXCJcbmltcG9ydCAqIGFzIHRkd2ZqYm1pb3ZicHNraGMgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2J1Z19yZXBvcnRzL2Rvd25sb2FkX3ppcC50c1wiXG5pbXBvcnQgKiBhcyBnaWdzZWt1dnRjenZlcWJkIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9idWdfcmVwb3J0cy91cGxvYWRfZmlsZS50c1wiXG5pbXBvcnQgKiBhcyBteHR1aHdmc3lqam55a21oIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9kYXRhc2hlZXRzL2NyZWF0ZS50c1wiXG5pbXBvcnQgKiBhcyBwZnl2ZXV0bGprZGlxZHV2IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9kYXRhc2hlZXRzL2dldC50c1wiXG5pbXBvcnQgKiBhcyB0Z3Jua2d4bXFtcmZkaW1pIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9kYXRhc2hlZXRzL2xpc3QudHNcIlxuaW1wb3J0ICogYXMgdGlyZ3VveXN6cmZpc2poYiBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvZ2l0aHViL2luc3RhbGxhdGlvbnMvY3JlYXRlX25ld19pbnN0YWxsYXRpb25fcmVkaXJlY3QudHNcIlxuaW1wb3J0ICogYXMgeHZkYWllc3RyeG5nbGZ6byBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvZ2l0aHViL3JlcG9zL2xpc3RfYXZhaWxhYmxlLnRzXCJcbmltcG9ydCAqIGFzIGxocWh0a3VlZXppdnB6a20gZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2dpdGh1Yi9yZXBvcy9yZWZyZXNoLnRzXCJcbmltcG9ydCAqIGFzIGFkbnllb3ZhY3hxd2ZuamMgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL2hlYWx0aC50c1wiXG5pbXBvcnQgKiBhcyB0Y2VjeHdxdnJqdmdod2ZhIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9pbnRlcm5hbC9zZXNzaW9ucy9jcmVhdGVfd2l0aG91dF9hdXRoLnRzXCJcbmltcG9ydCAqIGFzIHpldHBld2hudWh3dGJpd3IgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZGVyX2ZpbGVzL2dldC50c1wiXG5pbXBvcnQgKiBhcyBqZ2Nuem1kYXhxZWRoaHJ3IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmRlcl9maWxlcy91cGxvYWQudHNcIlxuaW1wb3J0ICogYXMgYm9pamtneHRuZmd3cnN3eCBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3JkZXJfcXVvdGVzL2NyZWF0ZV9hbGxfdmVuZG9yX3F1b3Rlcy50c1wiXG5pbXBvcnQgKiBhcyBvZ3Z1c3lrdmxmc2V6a25tIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmRlcl9xdW90ZXMvY3JlYXRlLnRzXCJcbmltcG9ydCAqIGFzIG90Z2Z2cmNheWxqbW1pZnAgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZGVyX3F1b3Rlcy9nZXQudHNcIlxuaW1wb3J0ICogYXMga3pyaXBkdHZ6bmVjZXF3ZyBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3JkZXJzL2NyZWF0ZS50c1wiXG5pbXBvcnQgKiBhcyBrZnl6Z2R5d2FnbXNxaHNiIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmRlcnMvZ2V0LnRzXCJcbmltcG9ydCAqIGFzIHpqeHpuc2R1dXR1cHlsYWQgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZGVycy9saXN0LnRzXCJcbmltcG9ydCAqIGFzIGNlb3NqbXJoeWt4Zndla3UgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvYWRkX21lbWJlci50c1wiXG5pbXBvcnQgKiBhcyBia3VoenV6eHBzb2J6ZHhqIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL2NyZWF0ZS50c1wiXG5pbXBvcnQgKiBhcyB1b3Nxamprc2djc2t6bHZ3IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL2RlbGV0ZS50c1wiXG5pbXBvcnQgKiBhcyB0cWtwaXd0dWltZnByaHBtIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL2dldF9tZW1iZXIudHNcIlxuaW1wb3J0ICogYXMgYXNsdG9zcnlsZWlpbHZydCBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9nZXQudHNcIlxuaW1wb3J0ICogYXMgYXZ3dnN0dGxnYmxsdXhucCBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9pbnZpdGF0aW9ucy9hY2NlcHQudHNcIlxuaW1wb3J0ICogYXMgbHVka2RyZnNzaXdtcnFkaSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9pbnZpdGF0aW9ucy9jcmVhdGUudHNcIlxuaW1wb3J0ICogYXMgaWl1Y3N1ZG9ydWtpY3d5dCBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9pbnZpdGF0aW9ucy9nZXQudHNcIlxuaW1wb3J0ICogYXMgcXd6Z2hhaGx0dnd2c2x0YyBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy9pbnZpdGF0aW9ucy9saXN0LnRzXCJcbmltcG9ydCAqIGFzIG9ibmt1ZG1kbGV6bmRvcHAgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvaW52aXRhdGlvbnMvcmV2b2tlLnRzXCJcbmltcG9ydCAqIGFzIHNpYXp4bmVmeHRpY3dlenQgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvbGlzdF9tZW1iZXJzLnRzXCJcbmltcG9ydCAqIGFzIGZkanlvZG90Y2J0b2Nra3UgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvbGlzdC50c1wiXG5pbXBvcnQgKiBhcyBjcXNsa2RpaWNvZHBtaXd3IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9vcmdzL3JlbW92ZV9tZW1iZXIudHNcIlxuaW1wb3J0ICogYXMgenpjZ2Nzd2VtZHp4anZjbSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvb3Jncy91cGRhdGVfbWVtYmVyLnRzXCJcbmltcG9ydCAqIGFzIGtiYWF1dXR6enVrbWl6ankgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvdXBkYXRlLnRzXCJcbmltcG9ydCAqIGFzIHNsaXVqcHB0cWhubmlwb3kgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL29yZ3MvdXBsb2FkX2F2YXRhci50c1wiXG5pbXBvcnQgKiBhcyBuYXF0anh3Z3F5ZmRkZ2RrIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlX2J1aWxkcy9nZXQudHNcIlxuaW1wb3J0ICogYXMgcWdyYXRydWxndGxtc2dzciBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9idWlsZHMvbGlzdC50c1wiXG5pbXBvcnQgKiBhcyB5YWd2ZGVlZGVleXhubWRsIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlX2ZpbGVzL2NyZWF0ZV9vcl91cGRhdGUudHNcIlxuaW1wb3J0ICogYXMgd3J5YnNrYm11dGx6ZGJ2ciBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9maWxlcy9jcmVhdGUudHNcIlxuaW1wb3J0ICogYXMgYmlqZnVjdmF0bnVjd2NsbCBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9maWxlcy9kZWxldGUudHNcIlxuaW1wb3J0ICogYXMgdGtmaHlidHRwZXhzbWhjZiBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9maWxlcy9kb3dubG9hZC50c1wiXG5pbXBvcnQgKiBhcyBweWRubHVqeGZidWticGliIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlX2ZpbGVzL2dldC50c1wiXG5pbXBvcnQgKiBhcyByenV1YnZnam1oc2dic2ZzIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlX2ZpbGVzL2xpc3QudHNcIlxuaW1wb3J0ICogYXMgd2NkcGRvYWdqb2pyc3BxaSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9yZWxlYXNlcy9jcmVhdGUudHNcIlxuaW1wb3J0ICogYXMgbnh4emZpbmhxcHRicXZpaCBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9yZWxlYXNlcy9nZXQudHNcIlxuaW1wb3J0ICogYXMgZWF1cndwamV2d2t3eHJqdiBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZV9yZWxlYXNlcy9saXN0LnRzXCJcbmltcG9ydCAqIGFzIG1oaXN0ZWl4eWV1ZWN4c24gZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VfcmVsZWFzZXMvcmVidWlsZC50c1wiXG5pbXBvcnQgKiBhcyB4dnpzY3drd3ZlamhuemJmIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlX3JlbGVhc2VzL3VwZGF0ZS50c1wiXG5pbXBvcnQgKiBhcyBheGhmbG5yZXNxY3pxdXBvIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy9hZGRfc3Rhci50c1wiXG5pbXBvcnQgKiBhcyBhdXJhc3J5cXZvZ250aW5sIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy9jcmVhdGUudHNcIlxuaW1wb3J0ICogYXMgcGVrb21mem5iZ3FubW1oaSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZXMvZGVsZXRlLnRzXCJcbmltcG9ydCAqIGFzIGl3Z2d4ZG1vbXh3c3Z0dWsgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2ZvcmsudHNcIlxuaW1wb3J0ICogYXMgcWhvZ2FzbXFuYXBtdXZ4YiBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZXMvZ2V0LnRzXCJcbmltcG9ydCAqIGFzIGt1Y296emlnaXBmamZkemIgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2ltYWdlcy9bb3duZXJfZ2l0aHViX3VzZXJuYW1lXS9bdW5zY29wZWRfbmFtZV0vW3ZpZXdfZm9ybWF0XS50c1wiXG5pbXBvcnQgKiBhcyB1eGRzZnNybmZkeXhicWZmIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy9saXN0X2xhdGVzdC50c1wiXG5pbXBvcnQgKiBhcyBvcWhjaXNyYnZpZHBkaHBhIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy9saXN0X3RyZW5kaW5nLnRzXCJcbmltcG9ydCAqIGFzIGJjZW5xb3Z2bWVrd2Zqb2MgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL2xpc3QudHNcIlxuaW1wb3J0ICogYXMgYW1idnF6cXZobWJ0cHpnaSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZXMvcmVtb3ZlX3N0YXIudHNcIlxuaW1wb3J0ICogYXMgcXZyaXJjem5ta3FyZXRybiBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcGFja2FnZXMvc2VhcmNoLnRzXCJcbmltcG9ydCAqIGFzIGZraXVscW9rdm1lenlja2cgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3BhY2thZ2VzL3VwZGF0ZV9haV9kZXNjcmlwdGlvbi50c1wiXG5pbXBvcnQgKiBhcyByaGR5bGhza3ZjYnl4eHd3IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9wYWNrYWdlcy91cGRhdGUudHNcIlxuaW1wb3J0ICogYXMgbm1uampuenZoa2d5eXBqaSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvcHJveHkudHNcIlxuaW1wb3J0ICogYXMgeGFoaHZjb2FkZGZ6cXlxaiBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc2Vzc2lvbnMvZGVsZXRlLnRzXCJcbmltcG9ydCAqIGFzIGNmd3BidGxpd2V6emdpem0gZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL2FkZF9zdGFyLnRzXCJcbmltcG9ydCAqIGFzIHZpZmFvYXhtbmZzdmtkdmQgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL2NyZWF0ZS50c1wiXG5pbXBvcnQgKiBhcyBoeG94Y3pkeXNocGNsdmFiIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9kZWxldGUudHNcIlxuaW1wb3J0ICogYXMgZ2Vyd216a2VncnJkd3R5cyBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvZG93bmxvYWQudHNcIlxuaW1wb3J0ICogYXMgbWpjZ2VsY2xnanRmdWlmYSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvZ2V0X2ltYWdlLnRzXCJcbmltcG9ydCAqIGFzIGNvdW5sbnpmeXJ2ZHlycWwgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL2dldC50c1wiXG5pbXBvcnQgKiBhcyBoZHdqemt5dmJpcWdla3RsIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9pbWFnZXMvW2F1dGhvcl0vW3NuaXBwZXRfbmFtZV0vW3R5cGVGb3JtYXRdLnRzXCJcbmltcG9ydCAqIGFzIG5rcGpzcmNycHlyc2x3Y2YgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL2xpc3RfbGF0ZXN0LnRzXCJcbmltcG9ydCAqIGFzIHNma3l1ZXBqZHZxdG5icnkgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL3RzY2lyY3VpdC5jb20vdHNjaXJjdWl0LmNvbS9mYWtlLXNuaXBwZXRzLWFwaS9yb3V0ZXMvYXBpL3NuaXBwZXRzL2xpc3RfdHJlbmRpbmcudHNcIlxuaW1wb3J0ICogYXMgbXVudWZvdXBkdmxlaGlhYSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvbGlzdC50c1wiXG5pbXBvcnQgKiBhcyBua2p6am1rbWhia3BxdXpjIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9yZW1vdmVfc3Rhci50c1wiXG5pbXBvcnQgKiBhcyB4aWJqYXV6ZWZvZmx1c2VuIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay90c2NpcmN1aXQuY29tL3RzY2lyY3VpdC5jb20vZmFrZS1zbmlwcGV0cy1hcGkvcm91dGVzL2FwaS9zbmlwcGV0cy9zZWFyY2gudHNcIlxuaW1wb3J0ICogYXMgZW9tZnFqZ292YmN3eXF6YSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvdHNjaXJjdWl0LmNvbS90c2NpcmN1aXQuY29tL2Zha2Utc25pcHBldHMtYXBpL3JvdXRlcy9hcGkvc25pcHBldHMvdXBkYXRlLnRzXCJcblxuY29uc3Qgcm91dGVNYXBXaXRoSGFuZGxlcnMgPSB7XG4gIFwiL2FwaS9fZmFrZS9haV9yZXZpZXdzL3Byb2Nlc3NfcmV2aWV3XCI6IHZqc2lydm54aHR3dXJ4c2IuZGVmYXVsdCxcIi9hcGkvX2Zha2UvZGF0YXNoZWV0cy9wcm9jZXNzX2FsbF9kYXRhc2hlZXRzXCI6IHhwemVvb2x2cHp2ZnhzZGsuZGVmYXVsdCxcIi9hcGkvX2Zha2UvZGJcIjogeHhqanhmYWtqeHJ3bHNjcC5kZWZhdWx0LFwiL2FwaS9fZmFrZS9tb3ZlX29yZGVyc19mb3J3YXJkXCI6IGlqc3dxdWVsa2hmZGt1ZnUuZGVmYXVsdCxcIi9hcGkvX2Zha2UvcmVjZWl2ZWRfcXVvdGVzXCI6IHRyeW5uaWhpbmp0cWhhaHAuZGVmYXVsdCxcIi9hcGkvX2Zha2UvcnVuX2FzeW5jX3Rhc2tzXCI6IGpjYXF3cXdkeHFxY2ZydHEuZGVmYXVsdCxcIi9hcGkvX2Zha2Uvc2VlZFwiOiB6bmtyd3dyb2x5cXhta3ppLmRlZmF1bHQsXCIvYXBpL2FjY291bnRzL2dldF9hY2NvdW50X2JhbGFuY2VcIjogdnZob3lvc3p3aHJ0ZWtvaS5kZWZhdWx0LFwiL2FwaS9hY2NvdW50cy9nZXRcIjogd3d3cHp1a29xbHVwc21nYS5kZWZhdWx0LFwiL2FwaS9hY2NvdW50cy9zZWFyY2hcIjogZm55a2x0bWxtenllcHJ1di5kZWZhdWx0LFwiL2FwaS9hY2NvdW50cy91cGRhdGVcIjogZXRvdWpxYWR2YXZrbGpiby5kZWZhdWx0LFwiL2FwaS9haV9yZXZpZXdzL2NyZWF0ZVwiOiBjZWR3dXJkZmt5Z2ZjbnZtLmRlZmF1bHQsXCIvYXBpL2FpX3Jldmlld3MvZ2V0XCI6IHVmemlkZ29ubGt1Y3JkcmguZGVmYXVsdCxcIi9hcGkvYWlfcmV2aWV3cy9saXN0XCI6IHNzdmZzcWFnaG1jaWp5d20uZGVmYXVsdCxcIi9hcGkvYWlcIjogd3VlZm9heGhibHRkcnhhaC5kZWZhdWx0LFwiL2FwaS9haS9bLi4uYW55cm91dGVdXCI6IG9keHl4dW56YXB3Zm9pYmguZGVmYXVsdCxcIi9hcGkvYWlzdHJlYW0vWy4uLmFueXJvdXRlXVwiOiBuZmlzdHF6cmJndWpibHl4LmRlZmF1bHQsXCIvYXBpL2F1dG9jb21wbGV0ZS9jcmVhdGVfYXV0b2NvbXBsZXRlXCI6IGdvdmRzZ3Z6aWZpc3Zyd2UuZGVmYXVsdCxcIi9hcGkvYnVnX3JlcG9ydHMvY3JlYXRlXCI6IHJrb3F0ZHltcGNqaGRncnkuZGVmYXVsdCxcIi9hcGkvYnVnX3JlcG9ydHMvZG93bmxvYWRfemlwXCI6IHRkd2ZqYm1pb3ZicHNraGMuZGVmYXVsdCxcIi9hcGkvYnVnX3JlcG9ydHMvdXBsb2FkX2ZpbGVcIjogZ2lnc2VrdXZ0Y3p2ZXFiZC5kZWZhdWx0LFwiL2FwaS9kYXRhc2hlZXRzL2NyZWF0ZVwiOiBteHR1aHdmc3lqam55a21oLmRlZmF1bHQsXCIvYXBpL2RhdGFzaGVldHMvZ2V0XCI6IHBmeXZldXRsamtkaXFkdXYuZGVmYXVsdCxcIi9hcGkvZGF0YXNoZWV0cy9saXN0XCI6IHRncm5rZ3htcW1yZmRpbWkuZGVmYXVsdCxcIi9hcGkvZ2l0aHViL2luc3RhbGxhdGlvbnMvY3JlYXRlX25ld19pbnN0YWxsYXRpb25fcmVkaXJlY3RcIjogdGlyZ3VveXN6cmZpc2poYi5kZWZhdWx0LFwiL2FwaS9naXRodWIvcmVwb3MvbGlzdF9hdmFpbGFibGVcIjogeHZkYWllc3RyeG5nbGZ6by5kZWZhdWx0LFwiL2FwaS9naXRodWIvcmVwb3MvcmVmcmVzaFwiOiBsaHFodGt1ZWV6aXZwemttLmRlZmF1bHQsXCIvYXBpL2hlYWx0aFwiOiBhZG55ZW92YWN4cXdmbmpjLmRlZmF1bHQsXCIvYXBpL2ludGVybmFsL3Nlc3Npb25zL2NyZWF0ZV93aXRob3V0X2F1dGhcIjogdGNlY3h3cXZyanZnaHdmYS5kZWZhdWx0LFwiL2FwaS9vcmRlcl9maWxlcy9nZXRcIjogemV0cGV3aG51aHd0Yml3ci5kZWZhdWx0LFwiL2FwaS9vcmRlcl9maWxlcy91cGxvYWRcIjogamdjbnptZGF4cWVkaGhydy5kZWZhdWx0LFwiL2FwaS9vcmRlcl9xdW90ZXMvY3JlYXRlX2FsbF92ZW5kb3JfcXVvdGVzXCI6IGJvaWprZ3h0bmZnd3Jzd3guZGVmYXVsdCxcIi9hcGkvb3JkZXJfcXVvdGVzL2NyZWF0ZVwiOiBvZ3Z1c3lrdmxmc2V6a25tLmRlZmF1bHQsXCIvYXBpL29yZGVyX3F1b3Rlcy9nZXRcIjogb3RnZnZyY2F5bGptbWlmcC5kZWZhdWx0LFwiL2FwaS9vcmRlcnMvY3JlYXRlXCI6IGt6cmlwZHR2em5lY2Vxd2cuZGVmYXVsdCxcIi9hcGkvb3JkZXJzL2dldFwiOiBrZnl6Z2R5d2FnbXNxaHNiLmRlZmF1bHQsXCIvYXBpL29yZGVycy9saXN0XCI6IHpqeHpuc2R1dXR1cHlsYWQuZGVmYXVsdCxcIi9hcGkvb3Jncy9hZGRfbWVtYmVyXCI6IGNlb3NqbXJoeWt4Zndla3UuZGVmYXVsdCxcIi9hcGkvb3Jncy9jcmVhdGVcIjogYmt1aHp1enhwc29iemR4ai5kZWZhdWx0LFwiL2FwaS9vcmdzL2RlbGV0ZVwiOiB1b3Nxamprc2djc2t6bHZ3LmRlZmF1bHQsXCIvYXBpL29yZ3MvZ2V0X21lbWJlclwiOiB0cWtwaXd0dWltZnByaHBtLmRlZmF1bHQsXCIvYXBpL29yZ3MvZ2V0XCI6IGFzbHRvc3J5bGVpaWx2cnQuZGVmYXVsdCxcIi9hcGkvb3Jncy9pbnZpdGF0aW9ucy9hY2NlcHRcIjogYXZ3dnN0dGxnYmxsdXhucC5kZWZhdWx0LFwiL2FwaS9vcmdzL2ludml0YXRpb25zL2NyZWF0ZVwiOiBsdWRrZHJmc3Npd21ycWRpLmRlZmF1bHQsXCIvYXBpL29yZ3MvaW52aXRhdGlvbnMvZ2V0XCI6IGlpdWNzdWRvcnVraWN3eXQuZGVmYXVsdCxcIi9hcGkvb3Jncy9pbnZpdGF0aW9ucy9saXN0XCI6IHF3emdoYWhsdHZ3dnNsdGMuZGVmYXVsdCxcIi9hcGkvb3Jncy9pbnZpdGF0aW9ucy9yZXZva2VcIjogb2Jua3VkbWRsZXpuZG9wcC5kZWZhdWx0LFwiL2FwaS9vcmdzL2xpc3RfbWVtYmVyc1wiOiBzaWF6eG5lZnh0aWN3ZXp0LmRlZmF1bHQsXCIvYXBpL29yZ3MvbGlzdFwiOiBmZGp5b2RvdGNidG9ja2t1LmRlZmF1bHQsXCIvYXBpL29yZ3MvcmVtb3ZlX21lbWJlclwiOiBjcXNsa2RpaWNvZHBtaXd3LmRlZmF1bHQsXCIvYXBpL29yZ3MvdXBkYXRlX21lbWJlclwiOiB6emNnY3N3ZW1kenhqdmNtLmRlZmF1bHQsXCIvYXBpL29yZ3MvdXBkYXRlXCI6IGtiYWF1dXR6enVrbWl6ankuZGVmYXVsdCxcIi9hcGkvb3Jncy91cGxvYWRfYXZhdGFyXCI6IHNsaXVqcHB0cWhubmlwb3kuZGVmYXVsdCxcIi9hcGkvcGFja2FnZV9idWlsZHMvZ2V0XCI6IG5hcXRqeHdncXlmZGRnZGsuZGVmYXVsdCxcIi9hcGkvcGFja2FnZV9idWlsZHMvbGlzdFwiOiBxZ3JhdHJ1bGd0bG1zZ3NyLmRlZmF1bHQsXCIvYXBpL3BhY2thZ2VfZmlsZXMvY3JlYXRlX29yX3VwZGF0ZVwiOiB5YWd2ZGVlZGVleXhubWRsLmRlZmF1bHQsXCIvYXBpL3BhY2thZ2VfZmlsZXMvY3JlYXRlXCI6IHdyeWJza2JtdXRsemRidnIuZGVmYXVsdCxcIi9hcGkvcGFja2FnZV9maWxlcy9kZWxldGVcIjogYmlqZnVjdmF0bnVjd2NsbC5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlX2ZpbGVzL2Rvd25sb2FkXCI6IHRrZmh5YnR0cGV4c21oY2YuZGVmYXVsdCxcIi9hcGkvcGFja2FnZV9maWxlcy9nZXRcIjogcHlkbmx1anhmYnVrYnBpYi5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlX2ZpbGVzL2xpc3RcIjogcnp1dWJ2Z2ptaHNnYnNmcy5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlX3JlbGVhc2VzL2NyZWF0ZVwiOiB3Y2RwZG9hZ2pvanJzcHFpLmRlZmF1bHQsXCIvYXBpL3BhY2thZ2VfcmVsZWFzZXMvZ2V0XCI6IG54eHpmaW5ocXB0YnF2aWguZGVmYXVsdCxcIi9hcGkvcGFja2FnZV9yZWxlYXNlcy9saXN0XCI6IGVhdXJ3cGpldndrd3hyanYuZGVmYXVsdCxcIi9hcGkvcGFja2FnZV9yZWxlYXNlcy9yZWJ1aWxkXCI6IG1oaXN0ZWl4eWV1ZWN4c24uZGVmYXVsdCxcIi9hcGkvcGFja2FnZV9yZWxlYXNlcy91cGRhdGVcIjogeHZ6c2N3a3d2ZWpobnpiZi5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy9hZGRfc3RhclwiOiBheGhmbG5yZXNxY3pxdXBvLmRlZmF1bHQsXCIvYXBpL3BhY2thZ2VzL2NyZWF0ZVwiOiBhdXJhc3J5cXZvZ250aW5sLmRlZmF1bHQsXCIvYXBpL3BhY2thZ2VzL2RlbGV0ZVwiOiBwZWtvbWZ6bmJncW5tbWhpLmRlZmF1bHQsXCIvYXBpL3BhY2thZ2VzL2ZvcmtcIjogaXdnZ3hkbW9teHdzdnR1ay5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy9nZXRcIjogcWhvZ2FzbXFuYXBtdXZ4Yi5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy9pbWFnZXMvW293bmVyX2dpdGh1Yl91c2VybmFtZV0vW3Vuc2NvcGVkX25hbWVdL1t2aWV3X2Zvcm1hdF1cIjoga3Vjb3p6aWdpcGZqZmR6Yi5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy9saXN0X2xhdGVzdFwiOiB1eGRzZnNybmZkeXhicWZmLmRlZmF1bHQsXCIvYXBpL3BhY2thZ2VzL2xpc3RfdHJlbmRpbmdcIjogb3FoY2lzcmJ2aWRwZGhwYS5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy9saXN0XCI6IGJjZW5xb3Z2bWVrd2Zqb2MuZGVmYXVsdCxcIi9hcGkvcGFja2FnZXMvcmVtb3ZlX3N0YXJcIjogYW1idnF6cXZobWJ0cHpnaS5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy9zZWFyY2hcIjogcXZyaXJjem5ta3FyZXRybi5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy91cGRhdGVfYWlfZGVzY3JpcHRpb25cIjogZmtpdWxxb2t2bWV6eWNrZy5kZWZhdWx0LFwiL2FwaS9wYWNrYWdlcy91cGRhdGVcIjogcmhkeWxoc2t2Y2J5eHh3dy5kZWZhdWx0LFwiL2FwaS9wcm94eVwiOiBubW5qam56dmhrZ3l5cGppLmRlZmF1bHQsXCIvYXBpL3Nlc3Npb25zL2RlbGV0ZVwiOiB4YWhodmNvYWRkZnpxeXFqLmRlZmF1bHQsXCIvYXBpL3NuaXBwZXRzL2FkZF9zdGFyXCI6IGNmd3BidGxpd2V6emdpem0uZGVmYXVsdCxcIi9hcGkvc25pcHBldHMvY3JlYXRlXCI6IHZpZmFvYXhtbmZzdmtkdmQuZGVmYXVsdCxcIi9hcGkvc25pcHBldHMvZGVsZXRlXCI6IGh4b3hjemR5c2hwY2x2YWIuZGVmYXVsdCxcIi9hcGkvc25pcHBldHMvZG93bmxvYWRcIjogZ2Vyd216a2VncnJkd3R5cy5kZWZhdWx0LFwiL2FwaS9zbmlwcGV0cy9nZXRfaW1hZ2VcIjogbWpjZ2VsY2xnanRmdWlmYS5kZWZhdWx0LFwiL2FwaS9zbmlwcGV0cy9nZXRcIjogY291bmxuemZ5cnZkeXJxbC5kZWZhdWx0LFwiL2FwaS9zbmlwcGV0cy9pbWFnZXMvW2F1dGhvcl0vW3NuaXBwZXRfbmFtZV0vW3R5cGVGb3JtYXRdXCI6IGhkd2p6a3l2YmlxZ2VrdGwuZGVmYXVsdCxcIi9hcGkvc25pcHBldHMvbGlzdF9sYXRlc3RcIjogbmtwanNyY3JweXJzbHdjZi5kZWZhdWx0LFwiL2FwaS9zbmlwcGV0cy9saXN0X3RyZW5kaW5nXCI6IHNma3l1ZXBqZHZxdG5icnkuZGVmYXVsdCxcIi9hcGkvc25pcHBldHMvbGlzdFwiOiBtdW51Zm91cGR2bGVoaWFhLmRlZmF1bHQsXCIvYXBpL3NuaXBwZXRzL3JlbW92ZV9zdGFyXCI6IG5ranpqbWttaGJrcHF1emMuZGVmYXVsdCxcIi9hcGkvc25pcHBldHMvc2VhcmNoXCI6IHhpYmphdXplZm9mbHVzZW4uZGVmYXVsdCxcIi9hcGkvc25pcHBldHMvdXBkYXRlXCI6IGVvbWZxamdvdmJjd3lxemEuZGVmYXVsdFxufVxuXG5jb25zdCB3aW50ZXJTcGVjID0ge1xuICByb3V0ZU1hdGNoZXI6IGdldFJvdXRlTWF0Y2hlcihPYmplY3Qua2V5cyhyb3V0ZU1hcFdpdGhIYW5kbGVycykpLFxuICByb3V0ZU1hcFdpdGhIYW5kbGVycyxcbiAgbWFrZVJlcXVlc3Q6IGFzeW5jIChyZXEsIG9wdGlvbnMpID0+IG1ha2VSZXF1ZXN0QWdhaW5zdFdpbnRlclNwZWMod2ludGVyU3BlYywgb3B0aW9ucykocmVxKVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aW50ZXJTcGVjIiwgImltcG9ydCB7IGNyZWF0ZVdpdGhXaW50ZXJTcGVjIH0gZnJvbSBcIndpbnRlcnNwZWNcIlxuaW1wb3J0IHsgd2l0aERiIH0gZnJvbSBcIi4vd2l0aC1kYlwiXG5pbXBvcnQgeyBjcmVhdGVXaXRoRGVmYXVsdEV4Y2VwdGlvbkhhbmRsaW5nIH0gZnJvbSBcIndpbnRlcnNwZWMvbWlkZGxld2FyZVwiXG5pbXBvcnQgeyB3aXRoQ3R4RXJyb3IgfSBmcm9tIFwiLi93aXRoLWN0eC1lcnJvclwiXG5pbXBvcnQgeyB3aXRoU2Vzc2lvbkF1dGggfSBmcm9tIFwiLi93aXRoLXNlc3Npb24tYXV0aFwiXG5pbXBvcnQgeyB3aXRoT3B0aW9uYWxTZXNzaW9uQXV0aCB9IGZyb20gXCIuL3dpdGgtb3B0aW9uYWwtc2Vzc2lvbi1hdXRoXCJcbmltcG9ydCB7IHdpdGhFcnJvckhhbmRsaW5nIH0gZnJvbSBcIi4vd2l0aC1lcnJvci1oYW5kbGluZ1wiXG5pbXBvcnQgeyB3aXRoUmVxdWVzdExvZ2dpbmcgfSBmcm9tIFwiLi93aXRoLXJlcXVlc3QtbG9nZ2luZ1wiXG5cbmV4cG9ydCBjb25zdCB3aXRoUm91dGVTcGVjID0gY3JlYXRlV2l0aFdpbnRlclNwZWMoe1xuICBhcGlOYW1lOiBcInRzY2lyY3VpdCBTbmlwcGV0cyBBUElcIixcbiAgcHJvZHVjdGlvblNlcnZlclVybDogXCJodHRwczovL3NuaXBwZXRzLnRzY2lyY3VpdC5jb20vYXBpXCIsXG4gIGJlZm9yZUF1dGhNaWRkbGV3YXJlOiBbd2l0aFJlcXVlc3RMb2dnaW5nLCB3aXRoRXJyb3JIYW5kbGluZywgd2l0aEN0eEVycm9yXSxcbiAgYXV0aE1pZGRsZXdhcmU6IHtcbiAgICBzZXNzaW9uOiB3aXRoU2Vzc2lvbkF1dGgsXG4gICAgb3B0aW9uYWxfc2Vzc2lvbjogd2l0aE9wdGlvbmFsU2Vzc2lvbkF1dGgsXG4gIH0sXG4gIGFmdGVyQXV0aE1pZGRsZXdhcmU6IFtcbiAgICB3aXRoRGIsXG4gICAgY3JlYXRlV2l0aERlZmF1bHRFeGNlcHRpb25IYW5kbGluZyh7XG4gICAgICBpbmNsdWRlU3RhY2tUcmFjZUluUmVzcG9uc2U6IHRydWUsXG4gICAgfSksXG4gIF0sXG59KVxuIiwgImltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IHR5cGUgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBob2lzdCB9IGZyb20gXCJ6dXN0YW5kLWhvaXN0XCJcbmltcG9ydCB7IGNyZWF0ZVN0b3JlIH0gZnJvbSBcInp1c3RhbmQvdmFuaWxsYVwiXG5cbmltcG9ydCB7IGNvbWJpbmUgfSBmcm9tIFwienVzdGFuZC9taWRkbGV3YXJlXCJcbmltcG9ydCB7XG4gIHR5cGUgQWNjb3VudCxcbiAgdHlwZSBBY2NvdW50UGFja2FnZSxcbiAgdHlwZSBKbGNwY2JPcmRlclN0YXRlLFxuICB0eXBlIEpsY3BjYk9yZGVyU3RlcFJ1bixcbiAgdHlwZSBMb2dpblBhZ2UsXG4gIHR5cGUgT3JkZXIsXG4gIHR5cGUgT3JkZXJGaWxlLFxuICBPcmRlclF1b3RlLFxuICB0eXBlIEJ1Z1JlcG9ydCxcbiAgYnVnUmVwb3J0U2NoZW1hLFxuICB0eXBlIEJ1Z1JlcG9ydEZpbGUsXG4gIGJ1Z1JlcG9ydEZpbGVTY2hlbWEsXG4gIHR5cGUgUGFja2FnZSxcbiAgdHlwZSBQYWNrYWdlRmlsZSxcbiAgdHlwZSBQYWNrYWdlUmVsZWFzZSxcbiAgcGFja2FnZVJlbGVhc2VTY2hlbWEsXG4gIHR5cGUgUGFja2FnZUJ1aWxkLFxuICBwYWNrYWdlQnVpbGRTY2hlbWEsXG4gIHR5cGUgQWlSZXZpZXcsXG4gIGFpUmV2aWV3U2NoZW1hLFxuICB0eXBlIERhdGFzaGVldCxcbiAgZGF0YXNoZWV0U2NoZW1hLFxuICB0eXBlIFNlc3Npb24sXG4gIHR5cGUgU25pcHBldCxcbiAgZGF0YWJhc2VTY2hlbWEsXG4gIHR5cGUgcGFja2FnZVNjaGVtYSxcbiAgdHlwZSBzbmlwcGV0U2NoZW1hLFxuICBPcmdhbml6YXRpb24sXG4gIE9yZ0FjY291bnQsXG4gIE9yZ0ludml0YXRpb24sXG4gIFVzZXJQZXJtaXNzaW9ucyxcbn0gZnJvbSBcIi4vc2NoZW1hLnRzXCJcbmltcG9ydCB7IHNlZWQgYXMgc2VlZEZuIH0gZnJvbSBcIi4vc2VlZFwiXG5pbXBvcnQgeyBnZW5lcmF0ZUZzU2hhIH0gZnJvbSBcIi4uL3BhY2thZ2VfZmlsZS9nZW5lcmF0ZS1mcy1zaGFcIlxuXG5leHBvcnQgY29uc3QgY3JlYXRlRGF0YWJhc2UgPSAoeyBzZWVkIH06IHsgc2VlZD86IGJvb2xlYW4gfSA9IHt9KSA9PiB7XG4gIGNvbnN0IGRiID0gaG9pc3QoY3JlYXRlU3RvcmUoaW5pdGlhbGl6ZXIpKVxuICBpZiAoc2VlZCkge1xuICAgIHNlZWRGbihkYilcbiAgfVxuICByZXR1cm4gZGJcbn1cblxuZXhwb3J0IHR5cGUgRGJDbGllbnQgPSBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVEYXRhYmFzZT5cblxuY29uc3QgaW5pdGlhbGl6ZXIgPSBjb21iaW5lKGRhdGFiYXNlU2NoZW1hLnBhcnNlKHt9KSwgKHNldCwgZ2V0KSA9PiAoe1xuICBhZGRPcmRlcjogKG9yZGVyOiBPbWl0PE9yZGVyLCBcIm9yZGVyX2lkXCI+KTogT3JkZXIgPT4ge1xuICAgIGNvbnN0IG5ld09yZGVyID0geyBvcmRlcl9pZDogYG9yZGVyXyR7Z2V0KCkuaWRDb3VudGVyICsgMX1gLCAuLi5vcmRlciB9XG4gICAgc2V0KChzdGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3JkZXJzOiBbLi4uc3RhdGUub3JkZXJzLCBuZXdPcmRlcl0sXG4gICAgICAgIGlkQ291bnRlcjogc3RhdGUuaWRDb3VudGVyICsgMSxcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBuZXdPcmRlclxuICB9LFxuICBnZXRPcmRlckJ5SWQ6IChvcmRlcklkOiBzdHJpbmcpOiBPcmRlciB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5vcmRlcnMuZmluZCgob3JkZXIpID0+IG9yZGVyLm9yZGVyX2lkID09PSBvcmRlcklkKVxuICB9LFxuICBnZXRPcmRlckZpbGVzQnlPcmRlcklkOiAob3JkZXJJZDogc3RyaW5nKTogT3JkZXJGaWxlW10gPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUub3JkZXJGaWxlcy5maWx0ZXIoKGZpbGUpID0+IGZpbGUub3JkZXJfaWQgPT09IG9yZGVySWQpXG4gIH0sXG4gIGFkZE9yZGVyUXVvdGU6ICh7XG4gICAgYWNjb3VudF9pZCxcbiAgICBwYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgdmVuZG9yX25hbWUsXG4gIH06IHtcbiAgICBhY2NvdW50X2lkOiBzdHJpbmdcbiAgICBwYWNrYWdlX3JlbGVhc2VfaWQ/OiBzdHJpbmdcbiAgICB2ZW5kb3JfbmFtZTogc3RyaW5nXG4gIH0pOiBzdHJpbmcgPT4ge1xuICAgIC8vIERldGFpbHMgZm9yIHRoZSBvcmRlciBxdW90ZSB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlIGpvYiB3aXRoIHRoZSBjb3N0XG4gICAgY29uc3QgbmV3T3JkZXJRdW90ZSA9IHtcbiAgICAgIG9yZGVyX3F1b3RlX2lkOiBgb3JkZXJfcXVvdGVfJHtnZXQoKS5pZENvdW50ZXIgKyAxfWAsXG4gICAgICBhY2NvdW50X2lkLFxuICAgICAgcGFja2FnZV9yZWxlYXNlX2lkOiBwYWNrYWdlX3JlbGVhc2VfaWQgPz8gbnVsbCxcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGNvbXBsZXRlZF9hdDogbnVsbCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgaGFzX2Vycm9yOiBmYWxzZSxcbiAgICAgIGlzX2NvbXBsZXRlZDogZmFsc2UsXG4gICAgICBpc19wcm9jZXNzaW5nOiB0cnVlLFxuICAgICAgdmVuZG9yX25hbWUsXG4gICAgICBxdW90ZWRfY29tcG9uZW50czogW10sXG4gICAgICBiYXJlX3BjYl9jb3N0OiAwLFxuICAgICAgc2hpcHBpbmdfb3B0aW9uczogW10sXG4gICAgICB0b3RhbF9jb3N0X3dpdGhvdXRfc2hpcHBpbmc6IDAsXG4gICAgfVxuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9yZGVyUXVvdGVzOiBbLi4uc3RhdGUub3JkZXJRdW90ZXMsIG5ld09yZGVyUXVvdGVdLFxuICAgICAgICBpZENvdW50ZXI6IHN0YXRlLmlkQ291bnRlciArIDEsXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gbmV3T3JkZXJRdW90ZS5vcmRlcl9xdW90ZV9pZFxuICB9LFxuICBnZXRPcmRlclF1b3RlQnlJZDogKG9yZGVyUXVvdGVJZDogc3RyaW5nKTogT3JkZXJRdW90ZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5vcmRlclF1b3Rlcy5maW5kKFxuICAgICAgKHF1b3RlKSA9PiBxdW90ZS5vcmRlcl9xdW90ZV9pZCA9PT0gb3JkZXJRdW90ZUlkLFxuICAgIClcbiAgfSxcbiAgZ2V0SmxjcGNiT3JkZXJTdGF0ZXNCeU9yZGVySWQ6IChcbiAgICBvcmRlcklkOiBzdHJpbmcsXG4gICk6IEpsY3BjYk9yZGVyU3RhdGUgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUuamxjcGNiT3JkZXJTdGF0ZS5maW5kKChzdGF0ZSkgPT4gc3RhdGUub3JkZXJfaWQgPT09IG9yZGVySWQpXG4gIH0sXG4gIGdldEpsY3BjYk9yZGVyU3RlcFJ1bnNCeUpsY3BjYk9yZGVyU3RhdGVJZDogKFxuICAgIGpsY3BjYk9yZGVyU3RhdGVJZDogc3RyaW5nLFxuICApOiBKbGNwY2JPcmRlclN0ZXBSdW5bXSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5qbGNwY2JPcmRlclN0ZXBSdW5zXG4gICAgICAuZmlsdGVyKChzdGVwUnVuKSA9PiB7XG4gICAgICAgIGNvbnN0IG9yZGVyU3RhdGUgPSBzdGF0ZS5qbGNwY2JPcmRlclN0YXRlLmZpbmQoXG4gICAgICAgICAgKHN0YXRlKSA9PlxuICAgICAgICAgICAgc3RhdGUuamxjcGNiX29yZGVyX3N0YXRlX2lkID09PSBzdGVwUnVuLmpsY3BjYl9vcmRlcl9zdGF0ZV9pZCxcbiAgICAgICAgKVxuICAgICAgICByZXR1cm4gb3JkZXJTdGF0ZT8ub3JkZXJfaWQgPT09IGpsY3BjYk9yZGVyU3RhdGVJZFxuICAgICAgfSlcbiAgICAgIC5zb3J0KFxuICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICBuZXcgRGF0ZShhLmNyZWF0ZWRfYXQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGIuY3JlYXRlZF9hdCkuZ2V0VGltZSgpLFxuICAgICAgKVxuICB9LFxuICB1cGRhdGVPcmRlcjogKG9yZGVySWQ6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxPcmRlcj4pID0+IHtcbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgb3JkZXJzOiBzdGF0ZS5vcmRlcnMubWFwKChvcmRlcikgPT5cbiAgICAgICAgb3JkZXIub3JkZXJfaWQgPT09IG9yZGVySWQgPyB7IC4uLm9yZGVyLCAuLi51cGRhdGVzIH0gOiBvcmRlcixcbiAgICAgICksXG4gICAgfSkpXG4gIH0sXG4gIGFkZEpsY3BjYk9yZGVyU3RhdGU6IChcbiAgICBvcmRlclN0YXRlOiBPbWl0PEpsY3BjYk9yZGVyU3RhdGUsIFwiamxjcGNiX29yZGVyX3N0YXRlX2lkXCI+LFxuICApOiBKbGNwY2JPcmRlclN0YXRlID0+IHtcbiAgICBjb25zdCBuZXdPcmRlclN0YXRlID0ge1xuICAgICAgamxjcGNiX29yZGVyX3N0YXRlX2lkOiBgb3JkZXJfc3RhdGVfJHtnZXQoKS5pZENvdW50ZXIgKyAxfWAsXG4gICAgICAuLi5vcmRlclN0YXRlLFxuICAgIH1cbiAgICBzZXQoKHN0YXRlKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2JPcmRlclN0YXRlOiBbLi4uc3RhdGUuamxjcGNiT3JkZXJTdGF0ZSwgbmV3T3JkZXJTdGF0ZV0sXG4gICAgICAgIGlkQ291bnRlcjogc3RhdGUuaWRDb3VudGVyICsgMSxcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBuZXdPcmRlclN0YXRlXG4gIH0sXG4gIHVwZGF0ZUpsY3BjYk9yZGVyU3RhdGU6IChcbiAgICBvcmRlcklkOiBzdHJpbmcsXG4gICAgdXBkYXRlczogUGFydGlhbDxKbGNwY2JPcmRlclN0YXRlPixcbiAgKSA9PiB7XG4gICAgc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgIGpsY3BjYk9yZGVyU3RhdGU6IHN0YXRlLmpsY3BjYk9yZGVyU3RhdGUubWFwKChvcmRlclN0YXRlKSA9PlxuICAgICAgICBvcmRlclN0YXRlLm9yZGVyX2lkID09PSBvcmRlcklkXG4gICAgICAgICAgPyB7IC4uLm9yZGVyU3RhdGUsIC4uLnVwZGF0ZXMgfVxuICAgICAgICAgIDogb3JkZXJTdGF0ZSxcbiAgICAgICksXG4gICAgfSkpXG4gIH0sXG4gIGFkZE9yZGVyRmlsZTogKG9yZGVyRmlsZTogT21pdDxPcmRlckZpbGUsIFwib3JkZXJfZmlsZV9pZFwiPik6IE9yZGVyRmlsZSA9PiB7XG4gICAgY29uc3QgbmV3T3JkZXJGaWxlID0ge1xuICAgICAgb3JkZXJfZmlsZV9pZDogYG9yZGVyX2ZpbGVfJHtnZXQoKS5pZENvdW50ZXIgKyAxfWAsXG4gICAgICAuLi5vcmRlckZpbGUsXG4gICAgfVxuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9yZGVyRmlsZXM6IFsuLi5zdGF0ZS5vcmRlckZpbGVzLCBuZXdPcmRlckZpbGVdLFxuICAgICAgICBpZENvdW50ZXI6IHN0YXRlLmlkQ291bnRlciArIDEsXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gbmV3T3JkZXJGaWxlXG4gIH0sXG4gIGdldE9yZGVyRmlsZUJ5SWQ6IChvcmRlckZpbGVJZDogc3RyaW5nKTogT3JkZXJGaWxlIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLm9yZGVyRmlsZXMuZmluZCgoZmlsZSkgPT4gZmlsZS5vcmRlcl9maWxlX2lkID09PSBvcmRlckZpbGVJZClcbiAgfSxcbiAgYWRkQnVnUmVwb3J0OiAoe1xuICAgIHJlcG9ydGVyX2FjY291bnRfaWQsXG4gICAgdGV4dCxcbiAgICBpc19hdXRvX2RlbGV0ZWQsXG4gICAgZGVsZXRlX2F0LFxuICB9OiB7XG4gICAgcmVwb3J0ZXJfYWNjb3VudF9pZDogc3RyaW5nXG4gICAgdGV4dD86IHN0cmluZyB8IG51bGxcbiAgICBpc19hdXRvX2RlbGV0ZWQ/OiBib29sZWFuXG4gICAgZGVsZXRlX2F0Pzogc3RyaW5nIHwgbnVsbFxuICB9KTogQnVnUmVwb3J0ID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkSXNBdXRvRGVsZXRlZCA9IEJvb2xlYW4oaXNfYXV0b19kZWxldGVkKVxuICAgIGlmIChub3JtYWxpemVkSXNBdXRvRGVsZXRlZCAmJiAhZGVsZXRlX2F0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkZWxldGVfYXQgaXMgcmVxdWlyZWQgd2hlbiBpc19hdXRvX2RlbGV0ZWQgaXMgdHJ1ZVwiKVxuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkRGVsZXRlQXQgPSBub3JtYWxpemVkSXNBdXRvRGVsZXRlZFxuICAgICAgPyAoZGVsZXRlX2F0ID8/IG51bGwpXG4gICAgICA6IG51bGxcblxuICAgIGNvbnN0IGJ1Z1JlcG9ydCA9IGJ1Z1JlcG9ydFNjaGVtYS5wYXJzZSh7XG4gICAgICBidWdfcmVwb3J0X2lkOiByYW5kb21VVUlEKCksXG4gICAgICByZXBvcnRlcl9hY2NvdW50X2lkLFxuICAgICAgdGV4dDogdGV4dCA/PyBudWxsLFxuICAgICAgaXNfYXV0b19kZWxldGVkOiBub3JtYWxpemVkSXNBdXRvRGVsZXRlZCxcbiAgICAgIGRlbGV0ZV9hdDogbm9ybWFsaXplZERlbGV0ZUF0LFxuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgZmlsZV9jb3VudDogMCxcbiAgICB9KVxuXG4gICAgc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgIGJ1Z1JlcG9ydHM6IFsuLi5zdGF0ZS5idWdSZXBvcnRzLCBidWdSZXBvcnRdLFxuICAgIH0pKVxuXG4gICAgcmV0dXJuIGJ1Z1JlcG9ydFxuICB9LFxuICBnZXRCdWdSZXBvcnRCeUlkOiAoYnVnUmVwb3J0SWQ6IHN0cmluZyk6IEJ1Z1JlcG9ydCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5idWdSZXBvcnRzLmZpbmQoXG4gICAgICAoYnVnUmVwb3J0KSA9PiBidWdSZXBvcnQuYnVnX3JlcG9ydF9pZCA9PT0gYnVnUmVwb3J0SWQsXG4gICAgKVxuICB9LFxuICBhZGRCdWdSZXBvcnRGaWxlOiAoe1xuICAgIGJ1Z19yZXBvcnRfaWQsXG4gICAgZmlsZV9wYXRoLFxuICAgIGNvbnRlbnRfbWltZXR5cGUsXG4gICAgaXNfdGV4dCxcbiAgICBjb250ZW50X3RleHQsXG4gICAgY29udGVudF9ieXRlcyxcbiAgfToge1xuICAgIGJ1Z19yZXBvcnRfaWQ6IHN0cmluZ1xuICAgIGZpbGVfcGF0aDogc3RyaW5nXG4gICAgY29udGVudF9taW1ldHlwZTogc3RyaW5nXG4gICAgaXNfdGV4dDogYm9vbGVhblxuICAgIGNvbnRlbnRfdGV4dDogc3RyaW5nIHwgbnVsbFxuICAgIGNvbnRlbnRfYnl0ZXM6IFVpbnQ4QXJyYXkgfCBudWxsXG4gIH0pOiBCdWdSZXBvcnRGaWxlID0+IHtcbiAgICBjb25zdCBidWdSZXBvcnRGaWxlID0gYnVnUmVwb3J0RmlsZVNjaGVtYS5wYXJzZSh7XG4gICAgICBidWdfcmVwb3J0X2ZpbGVfaWQ6IHJhbmRvbVVVSUQoKSxcbiAgICAgIGJ1Z19yZXBvcnRfaWQsXG4gICAgICBmaWxlX3BhdGgsXG4gICAgICBjb250ZW50X21pbWV0eXBlLFxuICAgICAgaXNfdGV4dCxcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGNvbnRlbnRfdGV4dCxcbiAgICAgIGNvbnRlbnRfYnl0ZXMsXG4gICAgfSlcblxuICAgIHNldCgoc3RhdGUpID0+ICh7XG4gICAgICBidWdSZXBvcnRGaWxlczogWy4uLnN0YXRlLmJ1Z1JlcG9ydEZpbGVzLCBidWdSZXBvcnRGaWxlXSxcbiAgICAgIGJ1Z1JlcG9ydHM6IHN0YXRlLmJ1Z1JlcG9ydHMubWFwKChidWdSZXBvcnQpID0+XG4gICAgICAgIGJ1Z1JlcG9ydC5idWdfcmVwb3J0X2lkID09PSBidWdfcmVwb3J0X2lkXG4gICAgICAgICAgPyB7IC4uLmJ1Z1JlcG9ydCwgZmlsZV9jb3VudDogYnVnUmVwb3J0LmZpbGVfY291bnQgKyAxIH1cbiAgICAgICAgICA6IGJ1Z1JlcG9ydCxcbiAgICAgICksXG4gICAgfSkpXG5cbiAgICByZXR1cm4gYnVnUmVwb3J0RmlsZVxuICB9LFxuICBnZXRCdWdSZXBvcnRGaWxlc0J5QnVnUmVwb3J0SWQ6IChidWdSZXBvcnRJZDogc3RyaW5nKTogQnVnUmVwb3J0RmlsZVtdID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLmJ1Z1JlcG9ydEZpbGVzLmZpbHRlcihcbiAgICAgIChmaWxlKSA9PiBmaWxlLmJ1Z19yZXBvcnRfaWQgPT09IGJ1Z1JlcG9ydElkLFxuICAgIClcbiAgfSxcbiAgYWRkQWNjb3VudDogKFxuICAgIGFjY291bnQ6IE9taXQ8XG4gICAgICBBY2NvdW50LFxuICAgICAgXCJhY2NvdW50X2lkXCIgfCBcImlzX3RzY2lyY3VpdF9zdGFmZlwiIHwgXCJjcmVhdGVkX2F0XCIgfCBcInBlcnNvbmFsX29yZ19pZFwiXG4gICAgPiAmXG4gICAgICBQYXJ0aWFsPFxuICAgICAgICBQaWNrPEFjY291bnQsIFwiYWNjb3VudF9pZFwiIHwgXCJpc190c2NpcmN1aXRfc3RhZmZcIiB8IFwicGVyc29uYWxfb3JnX2lkXCI+XG4gICAgICA+LFxuICApID0+IHtcbiAgICBjb25zdCBuZXdBY2NvdW50ID0ge1xuICAgICAgYWNjb3VudF9pZDogYWNjb3VudC5hY2NvdW50X2lkIHx8IGBhY2NvdW50XyR7Z2V0KCkuaWRDb3VudGVyICsgMX1gLFxuICAgICAgLi4uYWNjb3VudCxcbiAgICAgIGlzX3RzY2lyY3VpdF9zdGFmZjogQm9vbGVhbihhY2NvdW50LmlzX3RzY2lyY3VpdF9zdGFmZiksXG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLFxuICAgICAgcGVyc29uYWxfb3JnX2lkOiBhY2NvdW50LnBlcnNvbmFsX29yZ19pZCB8fCBgcG9yZ18ke2dldCgpLmlkQ291bnRlciArIDF9YCxcbiAgICB9XG5cbiAgICBzZXQoKHN0YXRlKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY2NvdW50czogWy4uLnN0YXRlLmFjY291bnRzLCBuZXdBY2NvdW50XSxcbiAgICAgICAgaWRDb3VudGVyOiBzdGF0ZS5pZENvdW50ZXIgKyAxLFxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gbmV3QWNjb3VudFxuICB9LFxuICBhZGRBY2NvdW50UGFja2FnZTogKFxuICAgIGFjY291bnRQYWNrYWdlOiBPbWl0PEFjY291bnRQYWNrYWdlLCBcImFjY291bnRfcGFja2FnZV9pZFwiPixcbiAgKTogQWNjb3VudFBhY2thZ2UgPT4ge1xuICAgIGNvbnN0IG5ld0FjY291bnRQYWNrYWdlID0ge1xuICAgICAgYWNjb3VudF9wYWNrYWdlX2lkOiBgYXBfJHtnZXQoKS5pZENvdW50ZXIgKyAxfWAsXG4gICAgICAuLi5hY2NvdW50UGFja2FnZSxcbiAgICB9XG4gICAgc2V0KChzdGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWNjb3VudFBhY2thZ2VzOiBbLi4uc3RhdGUuYWNjb3VudFBhY2thZ2VzLCBuZXdBY2NvdW50UGFja2FnZV0sXG4gICAgICAgIGlkQ291bnRlcjogc3RhdGUuaWRDb3VudGVyICsgMSxcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBuZXdBY2NvdW50UGFja2FnZVxuICB9LFxuICBnZXRBY2NvdW50UGFja2FnZUJ5SWQ6IChcbiAgICBhY2NvdW50UGFja2FnZUlkOiBzdHJpbmcsXG4gICk6IEFjY291bnRQYWNrYWdlIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLmFjY291bnRQYWNrYWdlcy5maW5kKFxuICAgICAgKGFwKSA9PiBhcC5hY2NvdW50X3BhY2thZ2VfaWQgPT09IGFjY291bnRQYWNrYWdlSWQsXG4gICAgKVxuICB9LFxuICB1cGRhdGVBY2NvdW50UGFja2FnZTogKFxuICAgIGFjY291bnRQYWNrYWdlSWQ6IHN0cmluZyxcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPEFjY291bnRQYWNrYWdlPixcbiAgKTogdm9pZCA9PiB7XG4gICAgc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgIGFjY291bnRQYWNrYWdlczogc3RhdGUuYWNjb3VudFBhY2thZ2VzLm1hcCgoYXApID0+XG4gICAgICAgIGFwLmFjY291bnRfcGFja2FnZV9pZCA9PT0gYWNjb3VudFBhY2thZ2VJZCA/IHsgLi4uYXAsIC4uLnVwZGF0ZXMgfSA6IGFwLFxuICAgICAgKSxcbiAgICB9KSlcbiAgfSxcbiAgZGVsZXRlQWNjb3VudFBhY2thZ2U6IChhY2NvdW50UGFja2FnZUlkOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlXG4gICAgc2V0KChzdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSBzdGF0ZS5hY2NvdW50UGFja2FnZXMuZmluZEluZGV4KFxuICAgICAgICAoYXApID0+IGFwLmFjY291bnRfcGFja2FnZV9pZCA9PT0gYWNjb3VudFBhY2thZ2VJZCxcbiAgICAgIClcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgc3RhdGUuYWNjb3VudFBhY2thZ2VzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgZGVsZXRlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH0pXG4gICAgcmV0dXJuIGRlbGV0ZWRcbiAgfSxcbiAgYWRkU25pcHBldDogKFxuICAgIHNuaXBwZXQ6IE9taXQ8XG4gICAgICB6LmlucHV0PHR5cGVvZiBzbmlwcGV0U2NoZW1hPixcbiAgICAgIFwic25pcHBldF9pZFwiIHwgXCJwYWNrYWdlX3JlbGVhc2VfaWRcIlxuICAgID4gJiB7XG4gICAgICBjcmVhdG9yX2FjY291bnRfaWQ/OiBzdHJpbmdcbiAgICAgIGdpdGh1Yl9yZXBvX2Z1bGxfbmFtZT86IHN0cmluZ1xuICAgICAgYnJhbmNoX25hbWU/OiBzdHJpbmdcbiAgICAgIGNvbW1pdF9tZXNzYWdlPzogc3RyaW5nXG4gICAgICBjb21taXRfYXV0aG9yPzogc3RyaW5nXG4gICAgfSxcbiAgKTogU25pcHBldCA9PiB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKVxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbmV3IERhdGUodGltZXN0YW1wKS50b0lTT1N0cmluZygpXG5cbiAgICBjb25zdCBuZXdTdGF0ZSA9IGdldCgpXG4gICAgY29uc3QgbmV4dElkID0gbmV3U3RhdGUuaWRDb3VudGVyICsgMVxuXG4gICAgLy8gQ3JlYXRlIHRoZSBwYWNrYWdlIHRoYXQgd2lsbCBzZXJ2ZSBhcyBvdXIgc25pcHBldFxuICAgIGNvbnN0IG5ld1BhY2thZ2UgPSB7XG4gICAgICBwYWNrYWdlX2lkOiBgcGtnXyR7bmV4dElkfWAsXG4gICAgICBjcmVhdG9yX2FjY291bnRfaWQ6IHNuaXBwZXQuY3JlYXRvcl9hY2NvdW50X2lkID8/IHNuaXBwZXQub3duZXJfbmFtZSwgLy8gVXNpbmcgb3duZXJfbmFtZSBhcyBhY2NvdW50X2lkIHNpbmNlIHdlIGRvbid0IGhhdmUgY29udGV4dFxuICAgICAgb3duZXJfb3JnX2lkOiBcIlwiLCAvLyBFbXB0eSBzdHJpbmcgaW5zdGVhZCBvZiBudWxsIHRvIG1hdGNoIHR5cGVcbiAgICAgIG93bmVyX2dpdGh1Yl91c2VybmFtZTogc25pcHBldC5vd25lcl9uYW1lLFxuICAgICAgaXNfc291cmNlX2Zyb21fZ2l0aHViOiBmYWxzZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBzbmlwcGV0LmRlc2NyaXB0aW9uIHx8IFwiXCIsXG4gICAgICBuYW1lOiBgJHtzbmlwcGV0Lm93bmVyX25hbWV9LyR7c25pcHBldC51bnNjb3BlZF9uYW1lfWAsXG4gICAgICB1bnNjb3BlZF9uYW1lOiBzbmlwcGV0LnVuc2NvcGVkX25hbWUsXG4gICAgICBsYXRlc3RfdmVyc2lvbjogXCIwLjAuMVwiLFxuICAgICAgbGljZW5zZTogbnVsbCxcbiAgICAgIHdlYnNpdGU6IG51bGwsXG4gICAgICBzdGFyX2NvdW50OiAwLFxuICAgICAgY3JlYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICB1cGRhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgIGdpdGh1Yl9yZXBvX2Z1bGxfbmFtZTogc25pcHBldC5naXRodWJfcmVwb19mdWxsX25hbWUgfHwgbnVsbCxcbiAgICAgIGFpX2Rlc2NyaXB0aW9uOiBcInBsYWNlaG9sZGVyIGFpIGRlc2NyaXB0aW9uXCIsXG4gICAgICBhaV91c2FnZV9pbnN0cnVjdGlvbnM6IFwicGxhY2Vob2xkZXIgYWkgdXNhZ2UgaW5zdHJ1Y3Rpb25zXCIsXG4gICAgICBpc19zbmlwcGV0OiB0cnVlLFxuICAgICAgaXNfYm9hcmQ6IHNuaXBwZXQuc25pcHBldF90eXBlID09PSBcImJvYXJkXCIsXG4gICAgICBpc19wYWNrYWdlOiBzbmlwcGV0LnNuaXBwZXRfdHlwZSA9PT0gXCJwYWNrYWdlXCIsXG4gICAgICBpc19tb2RlbDogc25pcHBldC5zbmlwcGV0X3R5cGUgPT09IFwibW9kZWxcIixcbiAgICAgIGlzX2Zvb3RwcmludDogc25pcHBldC5zbmlwcGV0X3R5cGUgPT09IFwiZm9vdHByaW50XCIsXG4gICAgICBzbmlwcGV0X3R5cGU6IHNuaXBwZXQuc25pcHBldF90eXBlLFxuICAgICAgaXNfcHJpdmF0ZTogZmFsc2UsXG4gICAgICBpc19wdWJsaWM6IHRydWUsXG4gICAgICBpc191bmxpc3RlZDogZmFsc2UsXG4gICAgICBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkOiBgcGFja2FnZV9yZWxlYXNlXyR7bmV4dElkfWAsXG4gICAgICBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2ZzX3NoYTogbnVsbCxcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgcGFja2FnZSByZWxlYXNlXG4gICAgY29uc3QgbmV3UGFja2FnZVJlbGVhc2UgPSBwYWNrYWdlUmVsZWFzZVNjaGVtYS5wYXJzZSh7XG4gICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IGBwYWNrYWdlX3JlbGVhc2VfJHtuZXh0SWR9YCxcbiAgICAgIHBhY2thZ2VfaWQ6IG5ld1BhY2thZ2UucGFja2FnZV9pZCxcbiAgICAgIHZlcnNpb246IFwiMC4wLjFcIixcbiAgICAgIGlzX2xhdGVzdDogdHJ1ZSxcbiAgICAgIGlzX2xvY2tlZDogZmFsc2UsXG4gICAgICBjcmVhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgIHVwZGF0ZWRfYXQ6IGN1cnJlbnRUaW1lLFxuICAgICAgYnJhbmNoX25hbWU6IHNuaXBwZXQuYnJhbmNoX25hbWUsXG4gICAgICBjb21taXRfbWVzc2FnZTogc25pcHBldC5jb21taXRfbWVzc2FnZSxcbiAgICAgIGNvbW1pdF9hdXRob3I6IHNuaXBwZXQuY29tbWl0X2F1dGhvcixcbiAgICAgIGhhc190cmFuc3BpbGVkOiB0cnVlLFxuICAgICAgdHJhbnNwaWxhdGlvbl9lcnJvcjogbnVsbCxcbiAgICAgIC4uLihzbmlwcGV0Lm5hbWUgPT0gXCJ0ZXN0dXNlci9teS10ZXN0LWJvYXJkXCJcbiAgICAgICAgPyB7IGlzX3ByX3ByZXZpZXc6IHRydWUsIGdpdGh1Yl9wcl9udW1iZXI6IDY5IH1cbiAgICAgICAgOiB7fSksXG4gICAgfSlcblxuICAgIC8vIEFkZCBhbGwgdGhlIGZpbGVzXG4gICAgY29uc3QgcGFja2FnZUZpbGVzOiBQYWNrYWdlRmlsZVtdID0gW11cbiAgICBsZXQgZmlsZUlkQ291bnRlciA9IG5leHRJZFxuXG4gICAgLy8gQWRkIG1haW4gY29kZSBmaWxlXG4gICAgcGFja2FnZUZpbGVzLnB1c2goe1xuICAgICAgcGFja2FnZV9maWxlX2lkOiBgcGFja2FnZV9maWxlXyR7ZmlsZUlkQ291bnRlcisrfWAsXG4gICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IG5ld1BhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgIGZpbGVfcGF0aDogXCJpbmRleC50c3hcIixcbiAgICAgIGNvbnRlbnRfdGV4dDogc25pcHBldC5jb2RlIHx8IFwiXCIsXG4gICAgICBjcmVhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICB9KVxuXG4gICAgLy8gQWRkIERUUyBmaWxlIGlmIHByb3ZpZGVkXG4gICAgaWYgKHNuaXBwZXQuZHRzKSB7XG4gICAgICBwYWNrYWdlRmlsZXMucHVzaCh7XG4gICAgICAgIHBhY2thZ2VfZmlsZV9pZDogYHBhY2thZ2VfZmlsZV8ke2ZpbGVJZENvdW50ZXIrK31gLFxuICAgICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IG5ld1BhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgICAgZmlsZV9wYXRoOiBcIi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgICAgY29udGVudF90ZXh0OiBzbmlwcGV0LmR0cyxcbiAgICAgICAgY3JlYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIEFkZCBjb21waWxlZCBKUyBpZiBwcm92aWRlZFxuICAgIGlmIChzbmlwcGV0LmNvbXBpbGVkX2pzKSB7XG4gICAgICBwYWNrYWdlRmlsZXMucHVzaCh7XG4gICAgICAgIHBhY2thZ2VfZmlsZV9pZDogYHBhY2thZ2VfZmlsZV8ke2ZpbGVJZENvdW50ZXIrK31gLFxuICAgICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IG5ld1BhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgICAgZmlsZV9wYXRoOiBcIi9kaXN0L2luZGV4LmpzXCIsXG4gICAgICAgIGNvbnRlbnRfdGV4dDogc25pcHBldC5jb21waWxlZF9qcyxcbiAgICAgICAgY3JlYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIEFkZCBjaXJjdWl0IEpTT04gaWYgcHJvdmlkZWRcbiAgICBpZiAoc25pcHBldC5jaXJjdWl0X2pzb24gJiYgc25pcHBldC5jaXJjdWl0X2pzb24ubGVuZ3RoID4gMCkge1xuICAgICAgcGFja2FnZUZpbGVzLnB1c2goe1xuICAgICAgICBwYWNrYWdlX2ZpbGVfaWQ6IGBwYWNrYWdlX2ZpbGVfJHtmaWxlSWRDb3VudGVyKyt9YCxcbiAgICAgICAgcGFja2FnZV9yZWxlYXNlX2lkOiBuZXdQYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgICAgIGZpbGVfcGF0aDogXCIvZGlzdC9jaXJjdWl0Lmpzb25cIixcbiAgICAgICAgY29udGVudF90ZXh0OiBKU09OLnN0cmluZ2lmeShzbmlwcGV0LmNpcmN1aXRfanNvbiksXG4gICAgICAgIGNyZWF0ZWRfYXQ6IGN1cnJlbnRUaW1lLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIGRhdGFiYXNlIHN0YXRlIGF0b21pY2FsbHlcbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBwYWNrYWdlczogWy4uLnN0YXRlLnBhY2thZ2VzLCBuZXdQYWNrYWdlXSxcbiAgICAgIHBhY2thZ2VSZWxlYXNlczogWy4uLnN0YXRlLnBhY2thZ2VSZWxlYXNlcywgbmV3UGFja2FnZVJlbGVhc2VdLFxuICAgICAgcGFja2FnZUZpbGVzOiBbLi4uc3RhdGUucGFja2FnZUZpbGVzLCAuLi5wYWNrYWdlRmlsZXNdLFxuICAgICAgaWRDb3VudGVyOiBmaWxlSWRDb3VudGVyLFxuICAgIH0pKVxuXG4gICAgLy8gVXBkYXRlIGZzX3NoYSBmb3IgdGhlIG5ldyBwYWNrYWdlIHJlbGVhc2VcbiAgICBjb25zdCBkYlN0YXRlID0gZ2V0KClcbiAgICBjb25zdCByZWxlYXNlRmlsZXMgPSBkYlN0YXRlLnBhY2thZ2VGaWxlcy5maWx0ZXIoXG4gICAgICAocGYpID0+IHBmLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gbmV3UGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgIClcbiAgICBjb25zdCBmc1NoYSA9IGdlbmVyYXRlRnNTaGEocmVsZWFzZUZpbGVzKVxuXG4gICAgc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgcGFja2FnZVJlbGVhc2VzOiBzdGF0ZS5wYWNrYWdlUmVsZWFzZXMubWFwKChwcikgPT5cbiAgICAgICAgcHIucGFja2FnZV9yZWxlYXNlX2lkID09PSBuZXdQYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWRcbiAgICAgICAgICA/IHsgLi4ucHIsIGZzX3NoYTogZnNTaGEgfVxuICAgICAgICAgIDogcHIsXG4gICAgICApLFxuICAgICAgcGFja2FnZXM6IHN0YXRlLnBhY2thZ2VzLm1hcCgocGtnKSA9PlxuICAgICAgICBwa2cubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCA9PT0gbmV3UGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkXG4gICAgICAgICAgPyB7IC4uLnBrZywgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9mc19zaGE6IGZzU2hhIH1cbiAgICAgICAgICA6IHBrZyxcbiAgICAgICksXG4gICAgfSkpXG5cbiAgICAvLyBSZXR1cm4gaW4gdGhlIHNhbWUgZm9ybWF0IGFzIGNyZWF0ZSBlbmRwb2ludFxuICAgIHJldHVybiB7XG4gICAgICBzbmlwcGV0X2lkOiBuZXdQYWNrYWdlLnBhY2thZ2VfaWQsXG4gICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IG5ld1BhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgIG5hbWU6IG5ld1BhY2thZ2UubmFtZSxcbiAgICAgIHVuc2NvcGVkX25hbWU6IG5ld1BhY2thZ2UudW5zY29wZWRfbmFtZSxcbiAgICAgIG93bmVyX25hbWU6IHNuaXBwZXQub3duZXJfbmFtZSxcbiAgICAgIGNvZGU6IHNuaXBwZXQuY29kZSB8fCBcIlwiLFxuICAgICAgZHRzOiBzbmlwcGV0LmR0cyxcbiAgICAgIGNvbXBpbGVkX2pzOiBzbmlwcGV0LmNvbXBpbGVkX2pzLFxuICAgICAgc3Rhcl9jb3VudDogMCxcbiAgICAgIGNyZWF0ZWRfYXQ6IGN1cnJlbnRUaW1lLFxuICAgICAgdXBkYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICBzbmlwcGV0X3R5cGU6IHNuaXBwZXQuc25pcHBldF90eXBlLFxuICAgICAgY2lyY3VpdF9qc29uOiBzbmlwcGV0LmNpcmN1aXRfanNvbiB8fCBbXSxcbiAgICAgIGRlc2NyaXB0aW9uOiBzbmlwcGV0LmRlc2NyaXB0aW9uIHx8IFwiXCIsXG4gICAgICBpc19zdGFycmVkOiBmYWxzZSxcbiAgICAgIHZlcnNpb246IFwiMC4wLjFcIixcbiAgICAgIGlzX3ByaXZhdGU6IGZhbHNlLFxuICAgICAgaXNfcHVibGljOiB0cnVlLFxuICAgICAgaXNfdW5saXN0ZWQ6IGZhbHNlLFxuICAgIH1cbiAgfSxcbiAgZ2V0TGF0ZXN0U25pcHBldHM6IChsaW1pdDogbnVtYmVyKTogU25pcHBldFtdID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG5cbiAgICAvLyBHZXQgYWxsIHBhY2thZ2VzIHRoYXQgYXJlIHNuaXBwZXRzXG4gICAgY29uc3Qgc25pcHBldFBhY2thZ2VzID0gc3RhdGUucGFja2FnZXNcbiAgICAgIC5maWx0ZXIoKHBrZykgPT4gcGtnLmlzX3NuaXBwZXQgPT09IHRydWUpXG4gICAgICAubWFwKChwa2cpID0+IHtcbiAgICAgICAgLy8gR2V0IHRoZSBwYWNrYWdlIHJlbGVhc2VcbiAgICAgICAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBzdGF0ZS5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgICAgICAocHIpID0+XG4gICAgICAgICAgICBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBrZy5sYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkICYmXG4gICAgICAgICAgICBwci5pc19sYXRlc3QgPT09IHRydWUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKCFwYWNrYWdlUmVsZWFzZSkgcmV0dXJuIG51bGxcblxuICAgICAgICAvLyBHZXQgdGhlIHBhY2thZ2UgZmlsZXNcbiAgICAgICAgY29uc3QgcGFja2FnZUZpbGVzID0gc3RhdGUucGFja2FnZUZpbGVzLmZpbHRlcihcbiAgICAgICAgICAoZmlsZSkgPT5cbiAgICAgICAgICAgIGZpbGUucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgICAgIClcblxuICAgICAgICAvLyBHZXQgdGhlIGNvZGUgZmlsZVxuICAgICAgICBjb25zdCBjb2RlRmlsZSA9IHBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgICAgIChmaWxlKSA9PlxuICAgICAgICAgICAgZmlsZS5maWxlX3BhdGggPT09IFwiaW5kZXgudHNcIiB8fCBmaWxlLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c3hcIixcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIENoZWNrIGlmIHN0YXJyZWRcbiAgICAgICAgY29uc3QgaXNTdGFycmVkID0gc3RhdGUuYWNjb3VudFBhY2thZ2VzLnNvbWUoXG4gICAgICAgICAgKGFwKSA9PiBhcC5wYWNrYWdlX2lkID09PSBwa2cucGFja2FnZV9pZCAmJiBhcC5pc19zdGFycmVkLFxuICAgICAgICApXG5cbiAgICAgICAgLy8gQ29udmVydCB0byBzbmlwcGV0IGZvcm1hdFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNuaXBwZXRfaWQ6IHBrZy5wYWNrYWdlX2lkLFxuICAgICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogcGtnLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgfHwgXCJcIixcbiAgICAgICAgICB1bnNjb3BlZF9uYW1lOiBwa2cudW5zY29wZWRfbmFtZSxcbiAgICAgICAgICBuYW1lOiBwa2cubmFtZSxcbiAgICAgICAgICBvd25lcl9uYW1lOiBwa2cub3duZXJfZ2l0aHViX3VzZXJuYW1lIHx8IFwiXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHBrZy5kZXNjcmlwdGlvbiB8fCBcIlwiLFxuICAgICAgICAgIHNuaXBwZXRfdHlwZTogcGtnLnNuaXBwZXRfdHlwZSB8fCBcImJvYXJkXCIsXG4gICAgICAgICAgY29kZTogY29kZUZpbGU/LmNvbnRlbnRfdGV4dCB8fCBcIlwiLFxuICAgICAgICAgIGR0czpcbiAgICAgICAgICAgIHBhY2thZ2VGaWxlcy5maW5kKChmaWxlKSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9pbmRleC5kLnRzXCIpXG4gICAgICAgICAgICAgID8uY29udGVudF90ZXh0IHx8IFwiXCIsXG4gICAgICAgICAgY29tcGlsZWRfanM6XG4gICAgICAgICAgICBwYWNrYWdlRmlsZXMuZmluZCgoZmlsZSkgPT4gZmlsZS5maWxlX3BhdGggPT09IFwiL2Rpc3QvaW5kZXguanNcIilcbiAgICAgICAgICAgICAgPy5jb250ZW50X3RleHQgfHwgXCJcIixcbiAgICAgICAgICBjcmVhdGVkX2F0OiBwa2cuY3JlYXRlZF9hdCxcbiAgICAgICAgICB1cGRhdGVkX2F0OiBwa2cudXBkYXRlZF9hdCxcbiAgICAgICAgICBzdGFyX2NvdW50OiBwa2cuc3Rhcl9jb3VudCB8fCAwLFxuICAgICAgICAgIGlzX3N0YXJyZWQ6IGlzU3RhcnJlZCxcbiAgICAgICAgICB2ZXJzaW9uOiBwa2cubGF0ZXN0X3ZlcnNpb24gfHwgXCIwLjAuMVwiLFxuICAgICAgICAgIGNpcmN1aXRfanNvbjpcbiAgICAgICAgICAgIHBhY2thZ2VGaWxlc1xuICAgICAgICAgICAgICAuZmlsdGVyKChmaWxlKSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9jaXJjdWl0Lmpzb25cIilcbiAgICAgICAgICAgICAgLmZsYXRNYXAoKGZpbGUpID0+IEpTT04ucGFyc2UoZmlsZS5jb250ZW50X3RleHQgfHwgXCJbXVwiKSkgfHwgW10sXG4gICAgICAgICAgaXNfcHJpdmF0ZTogcGtnLmlzX3ByaXZhdGUgfHwgZmFsc2UsXG4gICAgICAgICAgaXNfcHVibGljOiBwa2cuaXNfcHVibGljIHx8IHRydWUsXG4gICAgICAgICAgaXNfdW5saXN0ZWQ6IHBrZy5pc191bmxpc3RlZCB8fCBmYWxzZSxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChzbmlwcGV0KTogc25pcHBldCBpcyBOb25OdWxsYWJsZTx0eXBlb2Ygc25pcHBldD4gPT4gc25pcHBldCAhPT0gbnVsbCxcbiAgICAgIClcbiAgICAgIC5tYXAoKHNuaXBwZXQpID0+ICh7XG4gICAgICAgIC4uLnNuaXBwZXQsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzbmlwcGV0LmRlc2NyaXB0aW9uIHx8IFwiXCIsXG4gICAgICB9KSlcbiAgICAgIC5zb3J0KFxuICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICBuZXcgRGF0ZShiLmNyZWF0ZWRfYXQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEuY3JlYXRlZF9hdCkuZ2V0VGltZSgpLFxuICAgICAgKVxuICAgICAgLnNsaWNlKDAsIGxpbWl0KVxuXG4gICAgcmV0dXJuIHNuaXBwZXRQYWNrYWdlc1xuICB9LFxuICBnZXRUcmVuZGluZ1NuaXBwZXRzOiAobGltaXQ6IG51bWJlciwgc2luY2U6IHN0cmluZyk6IFNuaXBwZXRbXSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIGNvbnN0IHNpbmNlRGF0ZSA9IG5ldyBEYXRlKHNpbmNlKS5nZXRUaW1lKClcblxuICAgIC8vIEdldCBzdGFyIGNvdW50cyB3aXRoaW4gdGltZSBwZXJpb2RcbiAgICBjb25zdCByZWNlbnRTdGFycyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KClcbiAgICBzdGF0ZS5hY2NvdW50UGFja2FnZXMuZm9yRWFjaCgoYXApID0+IHtcbiAgICAgIGlmIChhcC5pc19zdGFycmVkICYmIG5ldyBEYXRlKGFwLmNyZWF0ZWRfYXQpLmdldFRpbWUoKSA+PSBzaW5jZURhdGUpIHtcbiAgICAgICAgcmVjZW50U3RhcnMuc2V0KFxuICAgICAgICAgIGFwLnBhY2thZ2VfaWQsXG4gICAgICAgICAgKHJlY2VudFN0YXJzLmdldChhcC5wYWNrYWdlX2lkKSB8fCAwKSArIDEsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY29uc3QgcGFja2FnZXNXaXRoU3RhckNvdW50ID0gWy4uLnN0YXRlLnBhY2thZ2VzXVxuICAgICAgLm1hcCgocGtnKSA9PiAoe1xuICAgICAgICAuLi5wa2csXG4gICAgICAgIHN0YXJfY291bnQ6IHJlY2VudFN0YXJzLmdldChwa2cucGFja2FnZV9pZCkgfHwgMCxcbiAgICAgIH0pKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIuc3Rhcl9jb3VudCAtIGEuc3Rhcl9jb3VudClcbiAgICAgIC5zbGljZSgwLCBsaW1pdClcblxuICAgIGNvbnN0IHRyZW5kaW5nU25pcHBldHMgPSBwYWNrYWdlc1dpdGhTdGFyQ291bnRcbiAgICAgIC5tYXAoKHBrZykgPT4ge1xuICAgICAgICBjb25zdCBwYWNrYWdlUmVsZWFzZSA9IHN0YXRlLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgICAgICAgIChwcikgPT5cbiAgICAgICAgICAgIHByLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGtnLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgJiZcbiAgICAgICAgICAgIHByLmlzX2xhdGVzdCA9PT0gdHJ1ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoIXBhY2thZ2VSZWxlYXNlKSByZXR1cm4gbnVsbFxuXG4gICAgICAgIGNvbnN0IHBhY2thZ2VGaWxlcyA9IHN0YXRlLnBhY2thZ2VGaWxlcy5maWx0ZXIoXG4gICAgICAgICAgKGZpbGUpID0+XG4gICAgICAgICAgICBmaWxlLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgICApXG5cbiAgICAgICAgY29uc3QgY29kZUZpbGUgPSBwYWNrYWdlRmlsZXMuZmluZChcbiAgICAgICAgICAoZmlsZSkgPT5cbiAgICAgICAgICAgIGZpbGUuZmlsZV9wYXRoID09PSBcImluZGV4LnRzXCIgfHwgZmlsZS5maWxlX3BhdGggPT09IFwiaW5kZXgudHN4XCIsXG4gICAgICAgIClcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNuaXBwZXRfaWQ6IHBrZy5wYWNrYWdlX2lkLFxuICAgICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogcGtnLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgfHwgXCJcIixcbiAgICAgICAgICB1bnNjb3BlZF9uYW1lOiBwa2cudW5zY29wZWRfbmFtZSxcbiAgICAgICAgICBuYW1lOiBwa2cubmFtZSxcbiAgICAgICAgICBvd25lcl9uYW1lOiBwa2cub3duZXJfZ2l0aHViX3VzZXJuYW1lIHx8IFwiXCIsXG4gICAgICAgICAgY29kZTogY29kZUZpbGUgPyBjb2RlRmlsZS5jb250ZW50X3RleHQgfHwgXCJcIiA6IFwiXCIsXG4gICAgICAgICAgY3JlYXRlZF9hdDogcGtnLmNyZWF0ZWRfYXQsXG4gICAgICAgICAgdXBkYXRlZF9hdDogcGtnLnVwZGF0ZWRfYXQsXG4gICAgICAgICAgc25pcHBldF90eXBlOiBwa2cuaXNfc25pcHBldCA/IFwiYm9hcmRcIiA6IFwicGFja2FnZVwiLFxuICAgICAgICAgIHN0YXJfY291bnQ6IHBrZy5zdGFyX2NvdW50LFxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoc25pcHBldCkgPT4gc25pcHBldCAhPT0gbnVsbClcblxuICAgIHJldHVybiB0cmVuZGluZ1NuaXBwZXRzIGFzIFNuaXBwZXRbXVxuICB9LFxuICBnZXRQYWNrYWdlc0J5QXV0aG9yOiAoYXV0aG9yTmFtZT86IHN0cmluZyk6IFBhY2thZ2VbXSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIGNvbnN0IHBhY2thZ2VzID0gYXV0aG9yTmFtZVxuICAgICAgPyBzdGF0ZS5wYWNrYWdlcy5maWx0ZXIoKHBrZykgPT4gcGtnLm93bmVyX2dpdGh1Yl91c2VybmFtZSA9PT0gYXV0aG9yTmFtZSlcbiAgICAgIDogc3RhdGUucGFja2FnZXNcbiAgICByZXR1cm4gcGFja2FnZXMubWFwKChwa2cpID0+ICh7XG4gICAgICAuLi5wa2csXG4gICAgICBzdGFyX2NvdW50OiBzdGF0ZS5hY2NvdW50UGFja2FnZXMuZmlsdGVyKFxuICAgICAgICAoYXApID0+IGFwLnBhY2thZ2VfaWQgPT09IHBrZy5wYWNrYWdlX2lkICYmIGFwLmlzX3N0YXJyZWQsXG4gICAgICApLmxlbmd0aCxcbiAgICB9KSlcbiAgfSxcbiAgZ2V0U25pcHBldEJ5QXV0aG9yQW5kTmFtZTogKFxuICAgIGF1dGhvck5hbWU6IHN0cmluZyxcbiAgICBzbmlwcGV0TmFtZTogc3RyaW5nLFxuICApOiBTbmlwcGV0IHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgLy8gTG9vayBmb3IgdGhlIHBhY2thZ2UgdGhhdCByZXByZXNlbnRzIHRoaXMgc25pcHBldCB3aXRoIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hpbmdcbiAgICBjb25zdCBfcGFja2FnZSA9IHN0YXRlLnBhY2thZ2VzLmZpbmQoXG4gICAgICAocGtnKSA9PlxuICAgICAgICBwa2cub3duZXJfZ2l0aHViX3VzZXJuYW1lPy50b0xvd2VyQ2FzZSgpID09PSBhdXRob3JOYW1lLnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgcGtnLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gc25pcHBldE5hbWUudG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICBwa2cuaXNfc25pcHBldCA9PT0gdHJ1ZSxcbiAgICApXG4gICAgaWYgKCFfcGFja2FnZSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgLy8gR2V0IHRoZSBwYWNrYWdlIHJlbGVhc2VcbiAgICBjb25zdCBwYWNrYWdlUmVsZWFzZSA9IHN0YXRlLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgICAgKHByKSA9PlxuICAgICAgICBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IF9wYWNrYWdlLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgJiZcbiAgICAgICAgcHIuaXNfbGF0ZXN0ID09PSB0cnVlLFxuICAgIClcbiAgICBpZiAoIXBhY2thZ2VSZWxlYXNlKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICAvLyBHZXQgdGhlIHBhY2thZ2UgZmlsZXNcbiAgICBjb25zdCBwYWNrYWdlRmlsZXMgPSBzdGF0ZS5wYWNrYWdlRmlsZXMuZmlsdGVyKFxuICAgICAgKGZpbGUpID0+IGZpbGUucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgKVxuXG4gICAgLy8gR2V0IHRoZSBjb2RlIGZpbGUgKGluZGV4LnRzIG9yIGluZGV4LnRzeClcbiAgICBjb25zdCBjb2RlRmlsZSA9IHBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcImluZGV4LnRzXCIgfHwgZmlsZS5maWxlX3BhdGggPT09IFwiaW5kZXgudHN4XCIsXG4gICAgKVxuXG4gICAgLy8gTWFwIHRoZSBwYWNrYWdlIGRhdGEgdG8gbWF0Y2ggdGhlIFNuaXBwZXQgc3RydWN0dXJlXG4gICAgcmV0dXJuIHtcbiAgICAgIHNuaXBwZXRfaWQ6IF9wYWNrYWdlLnBhY2thZ2VfaWQsXG4gICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IF9wYWNrYWdlLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgfHwgXCJcIixcbiAgICAgIHVuc2NvcGVkX25hbWU6IF9wYWNrYWdlLnVuc2NvcGVkX25hbWUsXG4gICAgICBuYW1lOiBfcGFja2FnZS5uYW1lLFxuICAgICAgb3duZXJfbmFtZTogX3BhY2thZ2Uub3duZXJfZ2l0aHViX3VzZXJuYW1lIHx8IFwiXCIsXG4gICAgICBkZXNjcmlwdGlvbjogX3BhY2thZ2UuZGVzY3JpcHRpb24gfHwgXCJcIixcbiAgICAgIHNuaXBwZXRfdHlwZTogX3BhY2thZ2Uuc25pcHBldF90eXBlIHx8IFwiYm9hcmRcIixcbiAgICAgIGNvZGU6IGNvZGVGaWxlPy5jb250ZW50X3RleHQgfHwgXCJcIixcbiAgICAgIGR0czpcbiAgICAgICAgcGFja2FnZUZpbGVzLmZpbmQoKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcIi9kaXN0L2luZGV4LmQudHNcIilcbiAgICAgICAgICA/LmNvbnRlbnRfdGV4dCB8fCBcIlwiLFxuICAgICAgY29tcGlsZWRfanM6XG4gICAgICAgIHBhY2thZ2VGaWxlcy5maW5kKChmaWxlKSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9pbmRleC5qc1wiKVxuICAgICAgICAgID8uY29udGVudF90ZXh0IHx8IFwiXCIsXG4gICAgICBjcmVhdGVkX2F0OiBfcGFja2FnZS5jcmVhdGVkX2F0LFxuICAgICAgdXBkYXRlZF9hdDogX3BhY2thZ2UudXBkYXRlZF9hdCxcbiAgICAgIHN0YXJfY291bnQ6IF9wYWNrYWdlLnN0YXJfY291bnQgfHwgMCxcbiAgICAgIGlzX3N0YXJyZWQ6IGZhbHNlLFxuICAgICAgdmVyc2lvbjogX3BhY2thZ2UubGF0ZXN0X3ZlcnNpb24gfHwgXCIwLjAuMVwiLFxuICAgICAgY2lyY3VpdF9qc29uOiBwYWNrYWdlRmlsZXMuZmluZChcbiAgICAgICAgKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcIi9kaXN0L2NpcmN1aXQuanNvblwiLFxuICAgICAgKT8uY29udGVudF90ZXh0XG4gICAgICAgID8gSlNPTi5wYXJzZShcbiAgICAgICAgICAgIHBhY2thZ2VGaWxlcy5maW5kKChmaWxlKSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9jaXJjdWl0Lmpzb25cIilcbiAgICAgICAgICAgICAgPy5jb250ZW50X3RleHQgfHwgXCJbXVwiLFxuICAgICAgICAgIClcbiAgICAgICAgOiBbXSxcbiAgICAgIGlzX3ByaXZhdGU6IF9wYWNrYWdlLmlzX3ByaXZhdGUgfHwgZmFsc2UsXG4gICAgICBpc19wdWJsaWM6IF9wYWNrYWdlLmlzX3B1YmxpYyB8fCB0cnVlLFxuICAgICAgaXNfdW5saXN0ZWQ6IF9wYWNrYWdlLmlzX3VubGlzdGVkIHx8IGZhbHNlLFxuICAgIH1cbiAgfSxcbiAgdXBkYXRlU25pcHBldDogKFxuICAgIHNuaXBwZXRJZDogc3RyaW5nLFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8U25pcHBldD4sXG4gICk6IFNuaXBwZXQgfCB1bmRlZmluZWQgPT4ge1xuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VJbmRleCA9IHN0YXRlLnBhY2thZ2VzLmZpbmRJbmRleChcbiAgICAgICAgKHBrZykgPT4gcGtnLnBhY2thZ2VfaWQgPT09IHNuaXBwZXRJZCAmJiBwa2cuaXNfc25pcHBldCA9PT0gdHJ1ZSxcbiAgICAgIClcbiAgICAgIGlmIChwYWNrYWdlSW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpXG4gICAgICBjb25zdCBjdXJyZW50VGltZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuXG4gICAgICAvLyBVcGRhdGUgdGhlIHBhY2thZ2VcbiAgICAgIGNvbnN0IHVwZGF0ZWRQYWNrYWdlcyA9IFsuLi5zdGF0ZS5wYWNrYWdlc11cbiAgICAgIGNvbnN0IGN1cnJlbnRQYWNrYWdlID0gdXBkYXRlZFBhY2thZ2VzW3BhY2thZ2VJbmRleF1cbiAgICAgIHVwZGF0ZWRQYWNrYWdlc1twYWNrYWdlSW5kZXhdID0ge1xuICAgICAgICAuLi5jdXJyZW50UGFja2FnZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHVwZGF0ZXMuZGVzY3JpcHRpb24gPz8gY3VycmVudFBhY2thZ2UuZGVzY3JpcHRpb24sXG4gICAgICAgIGlzX3ByaXZhdGU6IHVwZGF0ZXMuaXNfcHJpdmF0ZSA/PyBjdXJyZW50UGFja2FnZS5pc19wcml2YXRlLFxuICAgICAgICBpc19wdWJsaWM6XG4gICAgICAgICAgdXBkYXRlcy5pc19wcml2YXRlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gIXVwZGF0ZXMuaXNfcHJpdmF0ZVxuICAgICAgICAgICAgOiBjdXJyZW50UGFja2FnZS5pc19wdWJsaWMsXG4gICAgICAgIGlzX3VubGlzdGVkOiB1cGRhdGVzLmlzX3ByaXZhdGVcbiAgICAgICAgICA/IHRydWVcbiAgICAgICAgICA6ICh1cGRhdGVzLmlzX3VubGlzdGVkID8/IGN1cnJlbnRQYWNrYWdlLmlzX3VubGlzdGVkKSxcbiAgICAgICAgdXBkYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICB9XG5cbiAgICAgIC8vIEdldCB0aGUgY3VycmVudCBwYWNrYWdlIHJlbGVhc2VcbiAgICAgIGNvbnN0IHBhY2thZ2VSZWxlYXNlID0gc3RhdGUucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgICAgIChwcikgPT5cbiAgICAgICAgICBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IGN1cnJlbnRQYWNrYWdlLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgICApXG4gICAgICBpZiAoIXBhY2thZ2VSZWxlYXNlKSByZXR1cm4gc3RhdGVcblxuICAgICAgLy8gVXBkYXRlIHBhY2thZ2UgZmlsZXMgaWYgY29kZS9kdHMvanMgY2hhbmdlZFxuICAgICAgY29uc3QgdXBkYXRlZEZpbGVzID0gWy4uLnN0YXRlLnBhY2thZ2VGaWxlc11cbiAgICAgIGNvbnN0IHBhY2thZ2VGaWxlcyA9IHVwZGF0ZWRGaWxlcy5maWx0ZXIoXG4gICAgICAgIChmaWxlKSA9PiBmaWxlLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgKVxuXG4gICAgICBpZiAodXBkYXRlcy5jb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgY29kZUZpbGVJbmRleCA9IHBhY2thZ2VGaWxlcy5maW5kSW5kZXgoXG4gICAgICAgICAgKGZpbGUpID0+XG4gICAgICAgICAgICBmaWxlLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c3hcIiB8fCBmaWxlLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c1wiLFxuICAgICAgICApXG4gICAgICAgIGlmIChjb2RlRmlsZUluZGV4ID49IDApIHtcbiAgICAgICAgICB1cGRhdGVkRmlsZXNbY29kZUZpbGVJbmRleF0gPSB7XG4gICAgICAgICAgICAuLi5wYWNrYWdlRmlsZXNbY29kZUZpbGVJbmRleF0sXG4gICAgICAgICAgICBjb250ZW50X3RleHQ6IHVwZGF0ZXMuY29kZSxcbiAgICAgICAgICAgIGNyZWF0ZWRfYXQ6IGN1cnJlbnRUaW1lLFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cGRhdGVkRmlsZXMucHVzaCh7XG4gICAgICAgICAgICBwYWNrYWdlX2ZpbGVfaWQ6IGBwYWNrYWdlX2ZpbGVfJHt0aW1lc3RhbXB9YCxcbiAgICAgICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogcGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgICAgICAgZmlsZV9wYXRoOiBcImluZGV4LnRzeFwiLFxuICAgICAgICAgICAgY29udGVudF90ZXh0OiB1cGRhdGVzLmNvZGUsXG4gICAgICAgICAgICBjcmVhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh1cGRhdGVzLmR0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGR0c0ZpbGVJbmRleCA9IHBhY2thZ2VGaWxlcy5maW5kSW5kZXgoXG4gICAgICAgICAgKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcIi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgICAgKVxuICAgICAgICBpZiAoZHRzRmlsZUluZGV4ID49IDApIHtcbiAgICAgICAgICB1cGRhdGVkRmlsZXNbZHRzRmlsZUluZGV4XSA9IHtcbiAgICAgICAgICAgIC4uLnBhY2thZ2VGaWxlc1tkdHNGaWxlSW5kZXhdLFxuICAgICAgICAgICAgY29udGVudF90ZXh0OiB1cGRhdGVzLmR0cyxcbiAgICAgICAgICAgIGNyZWF0ZWRfYXQ6IGN1cnJlbnRUaW1lLFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cGRhdGVkRmlsZXMucHVzaCh7XG4gICAgICAgICAgICBwYWNrYWdlX2ZpbGVfaWQ6IGBwYWNrYWdlX2ZpbGVfJHt0aW1lc3RhbXB9YCxcbiAgICAgICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogcGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgICAgICAgZmlsZV9wYXRoOiBcIi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgICAgICAgIGNvbnRlbnRfdGV4dDogdXBkYXRlcy5kdHMsXG4gICAgICAgICAgICBjcmVhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh1cGRhdGVzLmNvbXBpbGVkX2pzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QganNGaWxlSW5kZXggPSBwYWNrYWdlRmlsZXMuZmluZEluZGV4KFxuICAgICAgICAgIChmaWxlKSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9pbmRleC5qc1wiLFxuICAgICAgICApXG4gICAgICAgIGlmIChqc0ZpbGVJbmRleCA+PSAwKSB7XG4gICAgICAgICAgdXBkYXRlZEZpbGVzW2pzRmlsZUluZGV4XSA9IHtcbiAgICAgICAgICAgIC4uLnBhY2thZ2VGaWxlc1tqc0ZpbGVJbmRleF0sXG4gICAgICAgICAgICBjb250ZW50X3RleHQ6IHVwZGF0ZXMuY29tcGlsZWRfanMsXG4gICAgICAgICAgICBjcmVhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXBkYXRlZEZpbGVzLnB1c2goe1xuICAgICAgICAgICAgcGFja2FnZV9maWxlX2lkOiBgcGFja2FnZV9maWxlXyR7dGltZXN0YW1wfWAsXG4gICAgICAgICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHBhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgICAgICAgIGZpbGVfcGF0aDogXCIvZGlzdC9pbmRleC5qc1wiLFxuICAgICAgICAgICAgY29udGVudF90ZXh0OiB1cGRhdGVzLmNvbXBpbGVkX2pzLFxuICAgICAgICAgICAgY3JlYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgY2lyY3VpdCBKU09OIGlmIHByb3ZpZGVkXG4gICAgICBpZiAodXBkYXRlcy5jaXJjdWl0X2pzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBjaXJjdWl0RmlsZUluZGV4ID0gcGFja2FnZUZpbGVzLmZpbmRJbmRleChcbiAgICAgICAgICAoZmlsZSkgPT4gZmlsZS5maWxlX3BhdGggPT09IFwiL2Rpc3QvY2lyY3VpdC5qc29uXCIsXG4gICAgICAgIClcbiAgICAgICAgaWYgKGNpcmN1aXRGaWxlSW5kZXggPj0gMCkge1xuICAgICAgICAgIHVwZGF0ZWRGaWxlc1tjaXJjdWl0RmlsZUluZGV4XSA9IHtcbiAgICAgICAgICAgIC4uLnBhY2thZ2VGaWxlc1tjaXJjdWl0RmlsZUluZGV4XSxcbiAgICAgICAgICAgIGNvbnRlbnRfdGV4dDogSlNPTi5zdHJpbmdpZnkodXBkYXRlcy5jaXJjdWl0X2pzb24pLFxuICAgICAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZXR1cm4gdXBkYXRlZCBzdGF0ZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHBhY2thZ2VzOiB1cGRhdGVkUGFja2FnZXMsXG4gICAgICAgIHBhY2thZ2VGaWxlczogdXBkYXRlZEZpbGVzLFxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBHZXQgdGhlIHVwZGF0ZWQgc25pcHBldCB0byByZXR1cm5cbiAgICBjb25zdCB1cGRhdGVkUGFja2FnZSA9IGdldCgpLnBhY2thZ2VzLmZpbmQoXG4gICAgICAocGtnKSA9PiBwa2cucGFja2FnZV9pZCA9PT0gc25pcHBldElkLFxuICAgIClcbiAgICBpZiAoIXVwZGF0ZWRQYWNrYWdlKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCBwYWNrYWdlUmVsZWFzZSA9IGdldCgpLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgICAgKHByKSA9PlxuICAgICAgICBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHVwZGF0ZWRQYWNrYWdlLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgKVxuICAgIGlmICghcGFja2FnZVJlbGVhc2UpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IHBhY2thZ2VGaWxlcyA9IGdldCgpLnBhY2thZ2VGaWxlcy5maWx0ZXIoXG4gICAgICAoZmlsZSkgPT4gZmlsZS5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICApXG5cbiAgICBjb25zdCBjb2RlRmlsZSA9IHBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcImluZGV4LnRzXCIgfHwgZmlsZS5maWxlX3BhdGggPT09IFwiaW5kZXgudHN4XCIsXG4gICAgKVxuICAgIGNvbnN0IGR0c0ZpbGUgPSBwYWNrYWdlRmlsZXMuZmluZChcbiAgICAgIChmaWxlKSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9pbmRleC5kLnRzXCIsXG4gICAgKVxuICAgIGNvbnN0IGpzRmlsZSA9IHBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcIi9kaXN0L2luZGV4LmpzXCIsXG4gICAgKVxuICAgIGNvbnN0IGNpcmN1aXRGaWxlID0gcGFja2FnZUZpbGVzLmZpbmQoXG4gICAgICAoZmlsZSkgPT4gZmlsZS5maWxlX3BhdGggPT09IFwiL2Rpc3QvY2lyY3VpdC5qc29uXCIsXG4gICAgKVxuXG4gICAgLy8gUmV0dXJuIGluIHNuaXBwZXQgZm9ybWF0XG4gICAgcmV0dXJuIHtcbiAgICAgIHNuaXBwZXRfaWQ6IHVwZGF0ZWRQYWNrYWdlLnBhY2thZ2VfaWQsXG4gICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHVwZGF0ZWRQYWNrYWdlLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgfHwgXCJcIixcbiAgICAgIHVuc2NvcGVkX25hbWU6IHVwZGF0ZWRQYWNrYWdlLnVuc2NvcGVkX25hbWUsXG4gICAgICBuYW1lOiB1cGRhdGVkUGFja2FnZS5uYW1lLFxuICAgICAgb3duZXJfbmFtZTogdXBkYXRlZFBhY2thZ2Uub3duZXJfZ2l0aHViX3VzZXJuYW1lIHx8IFwiXCIsXG4gICAgICBkZXNjcmlwdGlvbjogdXBkYXRlZFBhY2thZ2UuZGVzY3JpcHRpb24gfHwgXCJcIixcbiAgICAgIHNuaXBwZXRfdHlwZTogdXBkYXRlZFBhY2thZ2Uuc25pcHBldF90eXBlIHx8IFwiYm9hcmRcIixcbiAgICAgIGNvZGU6IGNvZGVGaWxlPy5jb250ZW50X3RleHQgfHwgXCJcIixcbiAgICAgIGR0czogZHRzRmlsZT8uY29udGVudF90ZXh0IHx8IFwiXCIsXG4gICAgICBjb21waWxlZF9qczoganNGaWxlPy5jb250ZW50X3RleHQgfHwgXCJcIixcbiAgICAgIGNyZWF0ZWRfYXQ6IHVwZGF0ZWRQYWNrYWdlLmNyZWF0ZWRfYXQsXG4gICAgICB1cGRhdGVkX2F0OiB1cGRhdGVkUGFja2FnZS51cGRhdGVkX2F0LFxuICAgICAgc3Rhcl9jb3VudDogdXBkYXRlZFBhY2thZ2Uuc3Rhcl9jb3VudCB8fCAwLFxuICAgICAgaXNfc3RhcnJlZDogZmFsc2UsXG4gICAgICB2ZXJzaW9uOiB1cGRhdGVkUGFja2FnZS5sYXRlc3RfdmVyc2lvbiB8fCBcIjAuMC4xXCIsXG4gICAgICBjaXJjdWl0X2pzb246IGNpcmN1aXRGaWxlXG4gICAgICAgID8gSlNPTi5wYXJzZShjaXJjdWl0RmlsZS5jb250ZW50X3RleHQgfHwgXCJbXVwiKVxuICAgICAgICA6IFtdLFxuICAgICAgaXNfcHJpdmF0ZTogdXBkYXRlZFBhY2thZ2UuaXNfcHJpdmF0ZSA/PyBmYWxzZSxcbiAgICAgIGlzX3B1YmxpYzogdXBkYXRlZFBhY2thZ2UuaXNfcHVibGljID8/IHRydWUsXG4gICAgICBpc191bmxpc3RlZDogdXBkYXRlZFBhY2thZ2UuaXNfdW5saXN0ZWQgPz8gZmFsc2UsXG4gICAgfVxuICB9LFxuICBnZXRTbmlwcGV0QnlJZDogKFxuICAgIHNuaXBwZXRJZDogc3RyaW5nLFxuICAgIGF1dGg/OiB7IGdpdGh1Yl91c2VybmFtZTogc3RyaW5nIH0sXG4gICk6IFNuaXBwZXQgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICAvLyBMb29rIGZvciB0aGUgcGFja2FnZSB0aGF0IHJlcHJlc2VudHMgdGhpcyBzbmlwcGV0XG4gICAgY29uc3QgX3BhY2thZ2UgPSBzdGF0ZS5wYWNrYWdlcy5maW5kKFxuICAgICAgKHBrZykgPT4gcGtnLnBhY2thZ2VfaWQgPT09IHNuaXBwZXRJZCAmJiBwa2cuaXNfc25pcHBldCA9PT0gdHJ1ZSxcbiAgICApXG4gICAgaWYgKCFfcGFja2FnZSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgLy8gSGFuZGxlIHZpc2liaWxpdHkgYmFzZWQgb24gYXV0aGVudGljYXRpb25cbiAgICBpZiAoIWF1dGgpIHtcbiAgICAgIC8vIFVuYXV0aGVudGljYXRlZCB1c2VycyBjYW4gb25seSBzZWUgcHVibGljIGFuZCBub24tdW5saXN0ZWQgcGFja2FnZXNcbiAgICAgIGlmICghX3BhY2thZ2UuaXNfcHVibGljIHx8IF9wYWNrYWdlLmlzX3VubGlzdGVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXV0aGVudGljYXRlZCB1c2VycyBjYW4gc2VlOlxuICAgICAgLy8gMS4gUHVibGljIGFuZCBub24tdW5saXN0ZWQgcGFja2FnZXNcbiAgICAgIC8vIDIuIFRoZWlyIG93biB1bmxpc3RlZCBwYWNrYWdlc1xuICAgICAgLy8gMy4gVGhlaXIgb3duIHByaXZhdGUgcGFja2FnZXNcbiAgICAgIGNvbnN0IGlzT3duUGFja2FnZSA9XG4gICAgICAgIF9wYWNrYWdlLm93bmVyX2dpdGh1Yl91c2VybmFtZSA9PT0gYXV0aD8uZ2l0aHViX3VzZXJuYW1lXG4gICAgICBjb25zdCBpc1B1YmxpY0FuZE5vdFVubGlzdGVkID0gX3BhY2thZ2UuaXNfcHVibGljICYmICFfcGFja2FnZS5pc191bmxpc3RlZFxuICAgICAgY29uc3QgaXNPd25Vbmxpc3RlZCA9IF9wYWNrYWdlLmlzX3VubGlzdGVkICYmIGlzT3duUGFja2FnZVxuICAgICAgY29uc3QgaXNPd25Qcml2YXRlID0gX3BhY2thZ2UuaXNfcHJpdmF0ZSAmJiBpc093blBhY2thZ2VcblxuICAgICAgaWYgKCFpc1B1YmxpY0FuZE5vdFVubGlzdGVkICYmICFpc093blVubGlzdGVkICYmICFpc093blByaXZhdGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCB0aGUgcGFja2FnZSByZWxlYXNlXG4gICAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBzdGF0ZS5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgIChwcikgPT5cbiAgICAgICAgcHIucGFja2FnZV9yZWxlYXNlX2lkID09PSBfcGFja2FnZS5sYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkICYmXG4gICAgICAgIHByLmlzX2xhdGVzdCA9PT0gdHJ1ZSxcbiAgICApXG4gICAgaWYgKCFwYWNrYWdlUmVsZWFzZSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgLy8gR2V0IHRoZSBwYWNrYWdlIGZpbGVzXG4gICAgY29uc3QgcGFja2FnZUZpbGVzID0gc3RhdGUucGFja2FnZUZpbGVzLmZpbHRlcihcbiAgICAgIChmaWxlKSA9PiBmaWxlLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgIClcblxuICAgIC8vIEdldCB0aGUgY29kZSBmaWxlIChpbmRleC50cyBvciBpbmRleC50c3gpXG4gICAgY29uc3QgY29kZUZpbGUgPSBwYWNrYWdlRmlsZXMuZmluZChcbiAgICAgIChmaWxlKSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c1wiIHx8IGZpbGUuZmlsZV9wYXRoID09PSBcImluZGV4LnRzeFwiLFxuICAgIClcblxuICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IHVzZXIgaGFzIHN0YXJyZWQgdGhpcyBzbmlwcGV0XG4gICAgY29uc3QgaXNTdGFycmVkID0gc3RhdGUuYWNjb3VudFBhY2thZ2VzLnNvbWUoXG4gICAgICAoYXApID0+IGFwLnBhY2thZ2VfaWQgPT09IHNuaXBwZXRJZCAmJiBhcC5pc19zdGFycmVkLFxuICAgIClcblxuICAgIC8vIE1hcCB0aGUgcGFja2FnZSBkYXRhIHRvIG1hdGNoIHRoZSBTbmlwcGV0IHN0cnVjdHVyZVxuICAgIHJldHVybiB7XG4gICAgICBzbmlwcGV0X2lkOiBfcGFja2FnZS5wYWNrYWdlX2lkLFxuICAgICAgcGFja2FnZV9yZWxlYXNlX2lkOiBfcGFja2FnZS5sYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkIHx8IFwiXCIsXG4gICAgICB1bnNjb3BlZF9uYW1lOiBfcGFja2FnZS51bnNjb3BlZF9uYW1lLFxuICAgICAgbmFtZTogX3BhY2thZ2UubmFtZSxcbiAgICAgIG93bmVyX25hbWU6IF9wYWNrYWdlLm93bmVyX2dpdGh1Yl91c2VybmFtZSB8fCBcIlwiLFxuICAgICAgZGVzY3JpcHRpb246IF9wYWNrYWdlLmRlc2NyaXB0aW9uIHx8IFwiXCIsXG4gICAgICBzbmlwcGV0X3R5cGU6IF9wYWNrYWdlLnNuaXBwZXRfdHlwZSB8fCBcImJvYXJkXCIsXG4gICAgICBjb2RlOiBjb2RlRmlsZT8uY29udGVudF90ZXh0IHx8IFwiXCIsXG4gICAgICBkdHM6XG4gICAgICAgIHBhY2thZ2VGaWxlcy5maW5kKChmaWxlKSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9pbmRleC5kLnRzXCIpXG4gICAgICAgICAgPy5jb250ZW50X3RleHQgfHwgXCJcIixcbiAgICAgIGNvbXBpbGVkX2pzOlxuICAgICAgICBwYWNrYWdlRmlsZXMuZmluZCgoZmlsZSkgPT4gZmlsZS5maWxlX3BhdGggPT09IFwiL2Rpc3QvaW5kZXguanNcIilcbiAgICAgICAgICA/LmNvbnRlbnRfdGV4dCB8fCBcIlwiLFxuICAgICAgY3JlYXRlZF9hdDogX3BhY2thZ2UuY3JlYXRlZF9hdCxcbiAgICAgIHVwZGF0ZWRfYXQ6IF9wYWNrYWdlLnVwZGF0ZWRfYXQsXG4gICAgICBzdGFyX2NvdW50OiBfcGFja2FnZS5zdGFyX2NvdW50IHx8IDAsXG4gICAgICBpc19zdGFycmVkOiBpc1N0YXJyZWQsXG4gICAgICB2ZXJzaW9uOiBfcGFja2FnZS5sYXRlc3RfdmVyc2lvbiB8fCBcIjAuMC4xXCIsXG4gICAgICBjaXJjdWl0X2pzb246IHBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgICAoZmlsZSkgPT4gZmlsZS5maWxlX3BhdGggPT09IFwiL2Rpc3QvY2lyY3VpdC5qc29uXCIsXG4gICAgICApPy5jb250ZW50X3RleHRcbiAgICAgICAgPyBKU09OLnBhcnNlKFxuICAgICAgICAgICAgcGFja2FnZUZpbGVzLmZpbmQoKGZpbGUpID0+IGZpbGUuZmlsZV9wYXRoID09PSBcIi9kaXN0L2NpcmN1aXQuanNvblwiKVxuICAgICAgICAgICAgICA/LmNvbnRlbnRfdGV4dCB8fCBcIltdXCIsXG4gICAgICAgICAgKVxuICAgICAgICA6IFtdLFxuICAgICAgaXNfcHJpdmF0ZTogX3BhY2thZ2UuaXNfcHJpdmF0ZSB8fCBmYWxzZSxcbiAgICAgIGlzX3B1YmxpYzogX3BhY2thZ2UuaXNfcHVibGljIHx8IHRydWUsXG4gICAgICBpc191bmxpc3RlZDogX3BhY2thZ2UuaXNfdW5saXN0ZWQgfHwgZmFsc2UsXG4gICAgfVxuICB9LFxuICBzZWFyY2hTbmlwcGV0czogKHF1ZXJ5OiBzdHJpbmcpOiBTbmlwcGV0W10gPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICBjb25zdCBsb3dlcmNhc2VRdWVyeSA9IHF1ZXJ5LnRvTG93ZXJDYXNlKClcblxuICAgIC8vIEdldCBhbGwgcGFja2FnZXMgdGhhdCBhcmUgc25pcHBldHNcbiAgICBjb25zdCBwYWNrYWdlcyA9IHN0YXRlLnBhY2thZ2VzLmZpbHRlcigocGtnKSA9PiBwa2cuaXNfc25pcHBldCA9PT0gdHJ1ZSlcblxuICAgIC8vIEZpbmQgcGFja2FnZXMgdGhhdCBtYXRjaCBieSBuYW1lIG9yIGRlc2NyaXB0aW9uXG4gICAgY29uc3QgbWF0Y2hpbmdQYWNrYWdlc0J5TWV0YWRhdGEgPSBwYWNrYWdlcy5maWx0ZXIoXG4gICAgICAocGtnKSA9PlxuICAgICAgICBwa2cubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyY2FzZVF1ZXJ5KSB8fFxuICAgICAgICBwa2cuZGVzY3JpcHRpb24/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJjYXNlUXVlcnkpLFxuICAgIClcblxuICAgIC8vIEZpbmQgcGFja2FnZXMgdGhhdCBtYXRjaCBieSBjb2RlIGNvbnRlbnQgaW4gYW55IGZpbGVcbiAgICBjb25zdCBtYXRjaGluZ0ZpbGVzQnlDb250ZW50ID0gc3RhdGUucGFja2FnZUZpbGVzLmZpbHRlcihcbiAgICAgIChmaWxlKSA9PlxuICAgICAgICBmaWxlLmNvbnRlbnRfdGV4dD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlcmNhc2VRdWVyeSkgPz8gZmFsc2UsXG4gICAgKVxuXG4gICAgLy8gR2V0IHRoZSBwYWNrYWdlcyBmb3IgbWF0Y2hpbmcgZmlsZXNcbiAgICBjb25zdCBtYXRjaGluZ1BhY2thZ2VzQnlDb250ZW50ID0gbWF0Y2hpbmdGaWxlc0J5Q29udGVudFxuICAgICAgLm1hcCgoZmlsZSkgPT4ge1xuICAgICAgICAvLyBGaW5kIHRoZSBwYWNrYWdlIHJlbGVhc2UgZm9yIHRoaXMgZmlsZVxuICAgICAgICBjb25zdCBwYWNrYWdlUmVsZWFzZSA9IHN0YXRlLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgICAgICAgIChwcikgPT4gcHIucGFja2FnZV9yZWxlYXNlX2lkID09PSBmaWxlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgICAgKVxuICAgICAgICBpZiAoIXBhY2thZ2VSZWxlYXNlKSByZXR1cm4gbnVsbFxuXG4gICAgICAgIC8vIEZpbmQgdGhlIHBhY2thZ2UgZm9yIHRoaXMgcmVsZWFzZVxuICAgICAgICByZXR1cm4gcGFja2FnZXMuZmluZChcbiAgICAgICAgICAocGtnKSA9PlxuICAgICAgICAgICAgcGtnLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHBrZyk6IHBrZyBpcyBOb25OdWxsYWJsZTx0eXBlb2YgcGtnPiA9PiBwa2cgIT09IG51bGwpXG5cbiAgICAvLyBDb21iaW5lIGJvdGggc2V0cyBvZiBtYXRjaGluZyBwYWNrYWdlcyBhbmQgcmVtb3ZlIGR1cGxpY2F0ZXNcbiAgICBjb25zdCBtYXRjaGluZ1BhY2thZ2VzID0gW1xuICAgICAgLi4ubmV3IFNldChbLi4ubWF0Y2hpbmdQYWNrYWdlc0J5TWV0YWRhdGEsIC4uLm1hdGNoaW5nUGFja2FnZXNCeUNvbnRlbnRdKSxcbiAgICBdXG5cbiAgICAvLyBDb252ZXJ0IG1hdGNoaW5nIHBhY2thZ2VzIHRvIHNuaXBwZXQgZm9ybWF0XG4gICAgcmV0dXJuIG1hdGNoaW5nUGFja2FnZXNcbiAgICAgIC5tYXAoKHBrZykgPT4ge1xuICAgICAgICBjb25zdCBwYWNrYWdlUmVsZWFzZSA9IHN0YXRlLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgICAgICAgIChwcikgPT5cbiAgICAgICAgICAgIHByLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGtnLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgJiZcbiAgICAgICAgICAgIHByLmlzX2xhdGVzdCA9PT0gdHJ1ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoIXBhY2thZ2VSZWxlYXNlKSByZXR1cm4gbnVsbFxuXG4gICAgICAgIGNvbnN0IHBhY2thZ2VGaWxlcyA9IHN0YXRlLnBhY2thZ2VGaWxlcy5maWx0ZXIoXG4gICAgICAgICAgKGZpbGUpID0+XG4gICAgICAgICAgICBmaWxlLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgICApXG5cbiAgICAgICAgY29uc3QgY29kZUZpbGUgPSBwYWNrYWdlRmlsZXMuZmluZChcbiAgICAgICAgICAoZmlsZSkgPT5cbiAgICAgICAgICAgIGZpbGUuZmlsZV9wYXRoID09PSBcImluZGV4LnRzXCIgfHwgZmlsZS5maWxlX3BhdGggPT09IFwiaW5kZXgudHN4XCIsXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBpc1N0YXJyZWQgPSBzdGF0ZS5hY2NvdW50UGFja2FnZXMuc29tZShcbiAgICAgICAgICAoYXApID0+IGFwLnBhY2thZ2VfaWQgPT09IHBrZy5wYWNrYWdlX2lkICYmIGFwLmlzX3N0YXJyZWQsXG4gICAgICAgIClcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNuaXBwZXRfaWQ6IHBrZy5wYWNrYWdlX2lkLFxuICAgICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogcGtnLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgfHwgXCJcIixcbiAgICAgICAgICB1bnNjb3BlZF9uYW1lOiBwa2cudW5zY29wZWRfbmFtZSxcbiAgICAgICAgICBuYW1lOiBwa2cubmFtZSxcbiAgICAgICAgICBvd25lcl9uYW1lOiBwa2cub3duZXJfZ2l0aHViX3VzZXJuYW1lIHx8IFwiXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHBrZy5kZXNjcmlwdGlvbiB8fCBcIlwiLFxuICAgICAgICAgIHNuaXBwZXRfdHlwZTogcGtnLnNuaXBwZXRfdHlwZSB8fCBcImJvYXJkXCIsXG4gICAgICAgICAgY29kZTogY29kZUZpbGU/LmNvbnRlbnRfdGV4dCB8fCBcIlwiLFxuICAgICAgICAgIGR0czpcbiAgICAgICAgICAgIHBhY2thZ2VGaWxlcy5maW5kKChmaWxlKSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9pbmRleC5kLnRzXCIpXG4gICAgICAgICAgICAgID8uY29udGVudF90ZXh0IHx8IFwiXCIsXG4gICAgICAgICAgY29tcGlsZWRfanM6XG4gICAgICAgICAgICBwYWNrYWdlRmlsZXMuZmluZCgoZmlsZSkgPT4gZmlsZS5maWxlX3BhdGggPT09IFwiL2Rpc3QvaW5kZXguanNcIilcbiAgICAgICAgICAgICAgPy5jb250ZW50X3RleHQgfHwgXCJcIixcbiAgICAgICAgICBjcmVhdGVkX2F0OiBwa2cuY3JlYXRlZF9hdCxcbiAgICAgICAgICB1cGRhdGVkX2F0OiBwa2cudXBkYXRlZF9hdCxcbiAgICAgICAgICBzdGFyX2NvdW50OiBwa2cuc3Rhcl9jb3VudCB8fCAwLFxuICAgICAgICAgIGlzX3N0YXJyZWQ6IGlzU3RhcnJlZCxcbiAgICAgICAgICB2ZXJzaW9uOiBwa2cubGF0ZXN0X3ZlcnNpb24gfHwgXCIwLjAuMVwiLFxuICAgICAgICAgIGNpcmN1aXRfanNvbjpcbiAgICAgICAgICAgIHBhY2thZ2VGaWxlc1xuICAgICAgICAgICAgICAuZmlsdGVyKChmaWxlKSA9PiBmaWxlLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9jaXJjdWl0Lmpzb25cIilcbiAgICAgICAgICAgICAgLmZsYXRNYXAoKGZpbGUpID0+IEpTT04ucGFyc2UoZmlsZS5jb250ZW50X3RleHQgfHwgXCJbXVwiKSkgfHwgW10sXG4gICAgICAgIH0gYXMgU25pcHBldFxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHNuaXBwZXQpOiBzbmlwcGV0IGlzIFNuaXBwZXQgPT4gc25pcHBldCAhPT0gbnVsbClcbiAgfSxcbiAgc2VhcmNoUGFja2FnZXM6IChxdWVyeTogc3RyaW5nKTogUGFja2FnZVtdID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgY29uc3QgbG93ZXJjYXNlUXVlcnkgPSBxdWVyeS50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyBHZXQgYWxsIHBhY2thZ2VzIHRoYXQgYXJlIHB1YmxpY1xuICAgIGNvbnN0IHBhY2thZ2VzID0gc3RhdGUucGFja2FnZXMuZmlsdGVyKChwa2cpID0+IHBrZy5pc19wdWJsaWMgPT09IHRydWUpXG5cbiAgICAvLyBGaW5kIHBhY2thZ2VzIHRoYXQgbWF0Y2ggYnkgbmFtZSBvciBkZXNjcmlwdGlvblxuICAgIGNvbnN0IG1hdGNoaW5nUGFja2FnZXNCeU1ldGFkYXRhID0gcGFja2FnZXMuZmlsdGVyKFxuICAgICAgKHBrZykgPT5cbiAgICAgICAgcGtnLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlcmNhc2VRdWVyeSkgfHxcbiAgICAgICAgcGtnLmRlc2NyaXB0aW9uPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyY2FzZVF1ZXJ5KSxcbiAgICApXG5cbiAgICAvLyBGaW5kIHBhY2thZ2VzIHRoYXQgbWF0Y2ggYnkgY29kZSBjb250ZW50IGluIGFueSBmaWxlXG4gICAgY29uc3QgbWF0Y2hpbmdGaWxlc0J5Q29udGVudCA9IHN0YXRlLnBhY2thZ2VGaWxlcy5maWx0ZXIoXG4gICAgICAoZmlsZSkgPT5cbiAgICAgICAgZmlsZS5jb250ZW50X3RleHQ/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJjYXNlUXVlcnkpID8/IGZhbHNlLFxuICAgIClcblxuICAgIC8vIEdldCB0aGUgcGFja2FnZXMgZm9yIG1hdGNoaW5nIGZpbGVzXG4gICAgY29uc3QgbWF0Y2hpbmdQYWNrYWdlc0J5Q29udGVudCA9IG1hdGNoaW5nRmlsZXNCeUNvbnRlbnRcbiAgICAgIC5tYXAoKGZpbGUpID0+IHtcbiAgICAgICAgLy8gRmluZCB0aGUgcGFja2FnZSByZWxlYXNlIGZvciB0aGlzIGZpbGVcbiAgICAgICAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBzdGF0ZS5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgICAgICAocHIpID0+IHByLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gZmlsZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgICAgIClcbiAgICAgICAgaWYgKCFwYWNrYWdlUmVsZWFzZSkgcmV0dXJuIG51bGxcblxuICAgICAgICAvLyBGaW5kIHRoZSBwYWNrYWdlIGZvciB0aGlzIHJlbGVhc2VcbiAgICAgICAgcmV0dXJuIHBhY2thZ2VzLmZpbmQoXG4gICAgICAgICAgKHBrZykgPT5cbiAgICAgICAgICAgIHBrZy5sYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChwa2cpOiBwa2cgaXMgTm9uTnVsbGFibGU8dHlwZW9mIHBrZz4gPT4gcGtnICE9PSBudWxsKVxuXG4gICAgLy8gQ29tYmluZSBib3RoIHNldHMgb2YgbWF0Y2hpbmcgcGFja2FnZXMgYW5kIHJlbW92ZSBkdXBsaWNhdGVzXG4gICAgY29uc3QgbWF0Y2hpbmdQYWNrYWdlcyA9IFtcbiAgICAgIC4uLm5ldyBTZXQoWy4uLm1hdGNoaW5nUGFja2FnZXNCeU1ldGFkYXRhLCAuLi5tYXRjaGluZ1BhY2thZ2VzQnlDb250ZW50XSksXG4gICAgXVxuXG4gICAgcmV0dXJuIG1hdGNoaW5nUGFja2FnZXNcbiAgfSxcbiAgc2VhcmNoQWNjb3VudHM6IChxdWVyeTogc3RyaW5nLCBsaW1pdD86IG51bWJlcik6IEFjY291bnRbXSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIGNvbnN0IGxvd2VyY2FzZVF1ZXJ5ID0gcXVlcnkudG9Mb3dlckNhc2UoKVxuXG4gICAgY29uc3QgYWNjb3VudHNXaXRoUHVibGljUGFja2FnZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICAgIHN0YXRlLnBhY2thZ2VzXG4gICAgICAuZmlsdGVyKChwa2cpID0+IHBrZy5pc19wdWJsaWMgPT09IHRydWUpXG4gICAgICAuZm9yRWFjaCgocGtnKSA9PiB7XG4gICAgICAgIGlmIChwa2cuY3JlYXRvcl9hY2NvdW50X2lkKSB7XG4gICAgICAgICAgYWNjb3VudHNXaXRoUHVibGljUGFja2FnZXMuYWRkKHBrZy5jcmVhdG9yX2FjY291bnRfaWQpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBrZy5vd25lcl9naXRodWJfdXNlcm5hbWUpIHtcbiAgICAgICAgICBjb25zdCBhY2NvdW50ID0gc3RhdGUuYWNjb3VudHMuZmluZChcbiAgICAgICAgICAgIChhY2MpID0+IGFjYy5naXRodWJfdXNlcm5hbWUgPT09IHBrZy5vd25lcl9naXRodWJfdXNlcm5hbWUsXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChhY2NvdW50KSB7XG4gICAgICAgICAgICBhY2NvdW50c1dpdGhQdWJsaWNQYWNrYWdlcy5hZGQoYWNjb3VudC5hY2NvdW50X2lkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIGNvbnN0IG1hdGNoaW5nQWNjb3VudHMgPSBzdGF0ZS5hY2NvdW50c1xuICAgICAgLmZpbHRlcigoYWNjb3VudCkgPT4ge1xuICAgICAgICBpZiAoIWFjY291bnRzV2l0aFB1YmxpY1BhY2thZ2VzLmhhcyhhY2NvdW50LmFjY291bnRfaWQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBhY2NvdW50LmdpdGh1Yl91c2VybmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyY2FzZVF1ZXJ5KSB8fFxuICAgICAgICAgIChhY2NvdW50LnRzY2lyY3VpdF9oYW5kbGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJjYXNlUXVlcnkpID8/XG4gICAgICAgICAgICBmYWxzZSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICAgIC5zbGljZSgwLCBsaW1pdCB8fCA1MClcblxuICAgIHJldHVybiBtYXRjaGluZ0FjY291bnRzXG4gIH0sXG4gIGRlbGV0ZVNuaXBwZXQ6IChzbmlwcGV0SWQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIGxldCBkZWxldGVkID0gZmFsc2VcbiAgICBzZXQoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHN0YXRlLnNuaXBwZXRzLmZpbmRJbmRleCgocykgPT4gcy5zbmlwcGV0X2lkID09PSBzbmlwcGV0SWQpXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHN0YXRlLnNuaXBwZXRzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgZGVsZXRlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH0pXG4gICAgcmV0dXJuIGRlbGV0ZWRcbiAgfSxcbiAgYWRkU2Vzc2lvbjogKHNlc3Npb246IE9taXQ8U2Vzc2lvbiwgXCJzZXNzaW9uX2lkXCI+KTogU2Vzc2lvbiA9PiB7XG4gICAgY29uc3QgbmV3U2Vzc2lvbiA9IHsgc2Vzc2lvbl9pZDogYHNlc3Npb25fJHtEYXRlLm5vdygpfWAsIC4uLnNlc3Npb24gfVxuICAgIHNldCgoc3RhdGUpID0+ICh7XG4gICAgICBzZXNzaW9uczogWy4uLnN0YXRlLnNlc3Npb25zLCBuZXdTZXNzaW9uXSxcbiAgICB9KSlcbiAgICByZXR1cm4gbmV3U2Vzc2lvblxuICB9LFxuICBnZXRTZXNzaW9uczogKHtcbiAgICBhY2NvdW50X2lkLFxuICAgIGlzX2NsaV9zZXNzaW9uLFxuICB9OiB7IGFjY291bnRfaWQ6IHN0cmluZzsgaXNfY2xpX3Nlc3Npb24/OiBib29sZWFuIH0pOiBTZXNzaW9uW10gPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUuc2Vzc2lvbnMuZmlsdGVyKFxuICAgICAgKHNlc3Npb24pID0+XG4gICAgICAgIHNlc3Npb24uYWNjb3VudF9pZCA9PT0gYWNjb3VudF9pZCAmJlxuICAgICAgICAoaXNfY2xpX3Nlc3Npb24gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIHNlc3Npb24uaXNfY2xpX3Nlc3Npb24gPT09IGlzX2NsaV9zZXNzaW9uKSxcbiAgICApXG4gIH0sXG4gIGNyZWF0ZUxvZ2luUGFnZTogKCk6IExvZ2luUGFnZSA9PiB7XG4gICAgY29uc3QgbmV3TG9naW5QYWdlOiBMb2dpblBhZ2UgPSB7XG4gICAgICBsb2dpbl9wYWdlX2lkOiBgbG9naW5fcGFnZV8ke0RhdGUubm93KCl9YCxcbiAgICAgIGxvZ2luX3BhZ2VfYXV0aF90b2tlbjogYHRva2VuXyR7RGF0ZS5ub3coKX1gLFxuICAgICAgd2FzX2xvZ2luX3N1Y2Nlc3NmdWw6IGZhbHNlLFxuICAgICAgaGFzX2JlZW5fdXNlZF90b19jcmVhdGVfc2Vzc2lvbjogZmFsc2UsXG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBleHBpcmVzX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpICsgMzAgKiA2MCAqIDEwMDApLnRvSVNPU3RyaW5nKCksIC8vIDMwIG1pbnV0ZXMgZXhwaXJhdGlvblxuICAgIH1cbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgbG9naW5QYWdlczogWy4uLnN0YXRlLmxvZ2luUGFnZXMsIG5ld0xvZ2luUGFnZV0sXG4gICAgfSkpXG4gICAgcmV0dXJuIG5ld0xvZ2luUGFnZVxuICB9LFxuICBnZXRMb2dpblBhZ2U6IChsb2dpblBhZ2VJZDogc3RyaW5nKTogTG9naW5QYWdlIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLmxvZ2luUGFnZXMuZmluZCgobHApID0+IGxwLmxvZ2luX3BhZ2VfaWQgPT09IGxvZ2luUGFnZUlkKVxuICB9LFxuICB1cGRhdGVMb2dpblBhZ2U6IChsb2dpblBhZ2VJZDogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPExvZ2luUGFnZT4pOiB2b2lkID0+IHtcbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgbG9naW5QYWdlczogc3RhdGUubG9naW5QYWdlcy5tYXAoKGxwKSA9PlxuICAgICAgICBscC5sb2dpbl9wYWdlX2lkID09PSBsb2dpblBhZ2VJZCA/IHsgLi4ubHAsIC4uLnVwZGF0ZXMgfSA6IGxwLFxuICAgICAgKSxcbiAgICB9KSlcbiAgfSxcbiAgZ2V0QWNjb3VudDogKGFjY291bnRJZDogc3RyaW5nKTogQWNjb3VudCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5hY2NvdW50cy5maW5kKChhY2NvdW50KSA9PiBhY2NvdW50LmFjY291bnRfaWQgPT09IGFjY291bnRJZClcbiAgfSxcbiAgdXBkYXRlQWNjb3VudDogKFxuICAgIGFjY291bnRJZDogc3RyaW5nLFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8QWNjb3VudD4sXG4gICk6IEFjY291bnQgfCB1bmRlZmluZWQgPT4ge1xuICAgIGxldCB1cGRhdGVkQWNjb3VudDogQWNjb3VudCB8IHVuZGVmaW5lZFxuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGFjY291bnRJbmRleCA9IHN0YXRlLmFjY291bnRzLmZpbmRJbmRleChcbiAgICAgICAgKGFjY291bnQpID0+IGFjY291bnQuYWNjb3VudF9pZCA9PT0gYWNjb3VudElkLFxuICAgICAgKVxuICAgICAgaWYgKGFjY291bnRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdXBkYXRlZEFjY291bnQgPSB7IC4uLnN0YXRlLmFjY291bnRzW2FjY291bnRJbmRleF0gfVxuICAgICAgICBpZiAodXBkYXRlcy50c2NpcmN1aXRfaGFuZGxlKSB7XG4gICAgICAgICAgdXBkYXRlZEFjY291bnQudHNjaXJjdWl0X2hhbmRsZSA9IHVwZGF0ZXMudHNjaXJjdWl0X2hhbmRsZVxuICAgICAgICAgIGRlbGV0ZSB1cGRhdGVzLnRzY2lyY3VpdF9oYW5kbGVcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlcy5zaGlwcGluZ0luZm8pIHtcbiAgICAgICAgICB1cGRhdGVkQWNjb3VudC5zaGlwcGluZ0luZm8gPSB7XG4gICAgICAgICAgICAuLi51cGRhdGVkQWNjb3VudC5zaGlwcGluZ0luZm8sXG4gICAgICAgICAgICAuLi51cGRhdGVzLnNoaXBwaW5nSW5mbyxcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIHVwZGF0ZXMuc2hpcHBpbmdJbmZvXG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlZEFjY291bnQgPSB7IC4uLnVwZGF0ZWRBY2NvdW50LCAuLi51cGRhdGVzIH1cbiAgICAgICAgY29uc3QgdXBkYXRlZEFjY291bnRzID0gWy4uLnN0YXRlLmFjY291bnRzXVxuICAgICAgICB1cGRhdGVkQWNjb3VudHNbYWNjb3VudEluZGV4XSA9IHVwZGF0ZWRBY2NvdW50XG4gICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBhY2NvdW50czogdXBkYXRlZEFjY291bnRzIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH0pXG4gICAgcmV0dXJuIHVwZGF0ZWRBY2NvdW50XG4gIH0sXG4gIGNyZWF0ZVNlc3Npb246IChzZXNzaW9uOiBPbWl0PFNlc3Npb24sIFwic2Vzc2lvbl9pZFwiPik6IFNlc3Npb24gPT4ge1xuICAgIGNvbnN0IG5ld1Nlc3Npb24gPSB7IHNlc3Npb25faWQ6IGBzZXNzaW9uXyR7RGF0ZS5ub3coKX1gLCAuLi5zZXNzaW9uIH1cbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgc2Vzc2lvbnM6IFsuLi5zdGF0ZS5zZXNzaW9ucywgbmV3U2Vzc2lvbl0sXG4gICAgfSkpXG4gICAgcmV0dXJuIG5ld1Nlc3Npb25cbiAgfSxcbiAgZGVsZXRlU2Vzc2lvbjogKHNlc3Npb25JZDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZVxuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gc3RhdGUuc2Vzc2lvbnMuZmluZEluZGV4KFxuICAgICAgICAoc2Vzc2lvbikgPT4gc2Vzc2lvbi5zZXNzaW9uX2lkID09PSBzZXNzaW9uSWQsXG4gICAgICApXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHN0YXRlLnNlc3Npb25zLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgZGVsZXRlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH0pXG4gICAgcmV0dXJuIGRlbGV0ZWRcbiAgfSxcbiAgYWRkU3RhcjogKGFjY291bnRJZDogc3RyaW5nLCBwYWNrYWdlSWQ6IHN0cmluZyk6IEFjY291bnRQYWNrYWdlID0+IHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICBjb25zdCBhY2NvdW50UGFja2FnZSA9IHtcbiAgICAgIGFjY291bnRfcGFja2FnZV9pZDogYGFwXyR7RGF0ZS5ub3coKX1gLFxuICAgICAgYWNjb3VudF9pZDogYWNjb3VudElkLFxuICAgICAgcGFja2FnZV9pZDogcGFja2FnZUlkLFxuICAgICAgaXNfc3RhcnJlZDogdHJ1ZSxcbiAgICAgIGNyZWF0ZWRfYXQ6IG5vdyxcbiAgICAgIHVwZGF0ZWRfYXQ6IG5vdyxcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIHBhY2thZ2UncyBzdGFyIGNvdW50XG4gICAgc2V0KChzdGF0ZSkgPT4ge1xuICAgICAgLy8gRmluZCB0aGUgcGFja2FnZSBhbmQgaW5jcmVtZW50IGl0cyBzdGFyIGNvdW50XG4gICAgICBjb25zdCBwYWNrYWdlSW5kZXggPSBzdGF0ZS5wYWNrYWdlcy5maW5kSW5kZXgoXG4gICAgICAgIChwa2cpID0+IHBrZy5wYWNrYWdlX2lkID09PSBwYWNrYWdlSWQsXG4gICAgICApXG4gICAgICBpZiAocGFja2FnZUluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZFBhY2thZ2VzID0gWy4uLnN0YXRlLnBhY2thZ2VzXVxuICAgICAgICB1cGRhdGVkUGFja2FnZXNbcGFja2FnZUluZGV4XSA9IHtcbiAgICAgICAgICAuLi51cGRhdGVkUGFja2FnZXNbcGFja2FnZUluZGV4XSxcbiAgICAgICAgICBzdGFyX2NvdW50OiAodXBkYXRlZFBhY2thZ2VzW3BhY2thZ2VJbmRleF0uc3Rhcl9jb3VudCB8fCAwKSArIDEsXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBhY2thZ2VzOiB1cGRhdGVkUGFja2FnZXMsXG4gICAgICAgICAgYWNjb3VudFBhY2thZ2VzOiBbLi4uc3RhdGUuYWNjb3VudFBhY2thZ2VzLCBhY2NvdW50UGFja2FnZV0sXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWNjb3VudFBhY2thZ2VzOiBbLi4uc3RhdGUuYWNjb3VudFBhY2thZ2VzLCBhY2NvdW50UGFja2FnZV0sXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBhY2NvdW50UGFja2FnZVxuICB9LFxuICByZW1vdmVTdGFyOiAoYWNjb3VudElkOiBzdHJpbmcsIHBhY2thZ2VJZDogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgc2V0KChzdGF0ZSkgPT4ge1xuICAgICAgLy8gRmluZCB0aGUgcGFja2FnZSBhbmQgZGVjcmVtZW50IGl0cyBzdGFyIGNvdW50XG4gICAgICBjb25zdCBwYWNrYWdlSW5kZXggPSBzdGF0ZS5wYWNrYWdlcy5maW5kSW5kZXgoXG4gICAgICAgIChwa2cpID0+IHBrZy5wYWNrYWdlX2lkID09PSBwYWNrYWdlSWQsXG4gICAgICApXG5cbiAgICAgIGlmIChwYWNrYWdlSW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCB1cGRhdGVkUGFja2FnZXMgPSBbLi4uc3RhdGUucGFja2FnZXNdXG4gICAgICAgIHVwZGF0ZWRQYWNrYWdlc1twYWNrYWdlSW5kZXhdID0ge1xuICAgICAgICAgIC4uLnVwZGF0ZWRQYWNrYWdlc1twYWNrYWdlSW5kZXhdLFxuICAgICAgICAgIHN0YXJfY291bnQ6IE1hdGgubWF4KFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICh1cGRhdGVkUGFja2FnZXNbcGFja2FnZUluZGV4XS5zdGFyX2NvdW50IHx8IDApIC0gMSxcbiAgICAgICAgICApLFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwYWNrYWdlczogdXBkYXRlZFBhY2thZ2VzLFxuICAgICAgICAgIGFjY291bnRQYWNrYWdlczogc3RhdGUuYWNjb3VudFBhY2thZ2VzLmZpbHRlcihcbiAgICAgICAgICAgIChhcCkgPT5cbiAgICAgICAgICAgICAgIShhcC5hY2NvdW50X2lkID09PSBhY2NvdW50SWQgJiYgYXAucGFja2FnZV9pZCA9PT0gcGFja2FnZUlkKSxcbiAgICAgICAgICApLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFjY291bnRQYWNrYWdlczogc3RhdGUuYWNjb3VudFBhY2thZ2VzLmZpbHRlcihcbiAgICAgICAgICAoYXApID0+ICEoYXAuYWNjb3VudF9pZCA9PT0gYWNjb3VudElkICYmIGFwLnBhY2thZ2VfaWQgPT09IHBhY2thZ2VJZCksXG4gICAgICAgICksXG4gICAgICB9XG4gICAgfSlcbiAgfSxcbiAgaGFzU3RhcnJlZDogKGFjY291bnRJZDogc3RyaW5nLCBwYWNrYWdlSWQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUuYWNjb3VudFBhY2thZ2VzLnNvbWUoXG4gICAgICAoYXApID0+XG4gICAgICAgIGFwLmFjY291bnRfaWQgPT09IGFjY291bnRJZCAmJlxuICAgICAgICBhcC5wYWNrYWdlX2lkID09PSBwYWNrYWdlSWQgJiZcbiAgICAgICAgYXAuaXNfc3RhcnJlZCxcbiAgICApXG4gIH0sXG4gIGFkZFBhY2thZ2U6IChcbiAgICBfcGFja2FnZTogT21pdDxcbiAgICAgIHouaW5wdXQ8dHlwZW9mIHBhY2thZ2VTY2hlbWE+LFxuICAgICAgXCJwYWNrYWdlX2lkXCIgfCBcImdpdGh1Yl9yZXBvX2Z1bGxfbmFtZVwiXG4gICAgPixcbiAgKTogUGFja2FnZSA9PiB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKVxuICAgIGNvbnN0IG5ld1BhY2thZ2UgPSB7XG4gICAgICBwYWNrYWdlX2lkOiBgcGFja2FnZV8ke3RpbWVzdGFtcH1gLFxuICAgICAgZ2l0aHViX3JlcG9fZnVsbF9uYW1lOiBudWxsLFxuICAgICAgbGF0ZXN0X3BjYl9wcmV2aWV3X2ltYWdlX3VybDpcbiAgICAgICAgX3BhY2thZ2UubGF0ZXN0X3BjYl9wcmV2aWV3X2ltYWdlX3VybCA/P1xuICAgICAgICBgL2FwaS9wYWNrYWdlcy9pbWFnZXMvJHtfcGFja2FnZS5uYW1lfWAsXG4gICAgICBsYXRlc3RfY2FkX3ByZXZpZXdfaW1hZ2VfdXJsOlxuICAgICAgICBfcGFja2FnZS5sYXRlc3RfY2FkX3ByZXZpZXdfaW1hZ2VfdXJsID8/XG4gICAgICAgIGAvYXBpL3BhY2thZ2VzL2ltYWdlcy8ke19wYWNrYWdlLm5hbWV9YCxcbiAgICAgIGxhdGVzdF9zY2hfcHJldmlld19pbWFnZV91cmw6XG4gICAgICAgIF9wYWNrYWdlLmxhdGVzdF9zY2hfcHJldmlld19pbWFnZV91cmwgPz9cbiAgICAgICAgYC9hcGkvcGFja2FnZXMvaW1hZ2VzLyR7X3BhY2thZ2UubmFtZX1gLFxuICAgICAgLi4uX3BhY2thZ2UsXG4gICAgfVxuICAgIHNldCgoc3RhdGUpID0+ICh7XG4gICAgICBwYWNrYWdlczogWy4uLnN0YXRlLnBhY2thZ2VzLCBuZXdQYWNrYWdlIGFzIFBhY2thZ2VdLFxuICAgIH0pKVxuICAgIHJldHVybiBuZXdQYWNrYWdlIGFzIFBhY2thZ2VcbiAgfSxcbiAgdXBkYXRlUGFja2FnZTogKFxuICAgIHBhY2thZ2VJZDogc3RyaW5nLFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8UGFja2FnZT4sXG4gICk6IFBhY2thZ2UgfCB1bmRlZmluZWQgPT4ge1xuICAgIGxldCB1cGRhdGVkUGFja2FnZTogUGFja2FnZSB8IHVuZGVmaW5lZFxuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VJbmRleCA9IHN0YXRlLnBhY2thZ2VzLmZpbmRJbmRleChcbiAgICAgICAgKHBrZykgPT4gcGtnLnBhY2thZ2VfaWQgPT09IHBhY2thZ2VJZCxcbiAgICAgIClcbiAgICAgIGlmIChwYWNrYWdlSW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGVcblxuICAgICAgY29uc3QgdXBkYXRlZFBhY2thZ2VzID0gWy4uLnN0YXRlLnBhY2thZ2VzXVxuICAgICAgdXBkYXRlZFBhY2thZ2VzW3BhY2thZ2VJbmRleF0gPSB7XG4gICAgICAgIC4uLnVwZGF0ZWRQYWNrYWdlc1twYWNrYWdlSW5kZXhdLFxuICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgfVxuICAgICAgdXBkYXRlZFBhY2thZ2UgPSB1cGRhdGVkUGFja2FnZXNbcGFja2FnZUluZGV4XVxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHBhY2thZ2VzOiB1cGRhdGVkUGFja2FnZXMgfVxuICAgIH0pXG4gICAgcmV0dXJuIHVwZGF0ZWRQYWNrYWdlXG4gIH0sXG4gIGdldFBhY2thZ2VCeUlkOiAocGFja2FnZUlkOiBzdHJpbmcpOiBQYWNrYWdlIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgY29uc3QgcGtnID0gc3RhdGUucGFja2FnZXMuZmluZCgocGtnKSA9PiBwa2cucGFja2FnZV9pZCA9PT0gcGFja2FnZUlkKVxuICAgIGlmICghcGtnKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBrZyxcbiAgICB9XG4gIH0sXG4gIGdldFBhY2thZ2VSZWxlYXNlQnlJZDogKFxuICAgIHBhY2thZ2VSZWxlYXNlSWQ6IHN0cmluZyxcbiAgKTogUGFja2FnZVJlbGVhc2UgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgICAocHIpID0+IHByLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGFja2FnZVJlbGVhc2VJZCxcbiAgICApXG4gIH0sXG4gIGFkZFBhY2thZ2VSZWxlYXNlOiAoXG4gICAgcGFja2FnZVJlbGVhc2U6IE9taXQ8XG4gICAgICB6LmlucHV0PHR5cGVvZiBwYWNrYWdlUmVsZWFzZVNjaGVtYT4sXG4gICAgICBcInBhY2thZ2VfcmVsZWFzZV9pZFwiXG4gICAgPixcbiAgKTogUGFja2FnZVJlbGVhc2UgPT4ge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhY2thZ2VSZWxlYXNlU2NoZW1hLnBhcnNlKHtcbiAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogYHBhY2thZ2VfcmVsZWFzZV8ke0RhdGUubm93KCl9YCxcbiAgICAgIC4uLnBhY2thZ2VSZWxlYXNlLFxuICAgIH0pXG4gICAgc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgIHBhY2thZ2VSZWxlYXNlczogWy4uLnN0YXRlLnBhY2thZ2VSZWxlYXNlcywgcGFyc2VkXSxcbiAgICB9KSlcbiAgICByZXR1cm4gcGFyc2VkXG4gIH0sXG4gIHVwZGF0ZVBhY2thZ2VSZWxlYXNlOiAocGFja2FnZVJlbGVhc2U6IFBhY2thZ2VSZWxlYXNlKTogdm9pZCA9PiB7XG4gICAgc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgIHBhY2thZ2VSZWxlYXNlczogc3RhdGUucGFja2FnZVJlbGVhc2VzLm1hcCgocHIpID0+XG4gICAgICAgIHByLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkXG4gICAgICAgICAgPyBwYWNrYWdlUmVsZWFzZVxuICAgICAgICAgIDogcHIsXG4gICAgICApLFxuICAgIH0pKVxuICB9LFxuICBkZWxldGVQYWNrYWdlRmlsZTogKHBhY2thZ2VGaWxlSWQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIGxldCBkZWxldGVkID0gZmFsc2VcbiAgICBzZXQoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHN0YXRlLnBhY2thZ2VGaWxlcy5maW5kSW5kZXgoXG4gICAgICAgIChmaWxlKSA9PiBmaWxlLnBhY2thZ2VfZmlsZV9pZCA9PT0gcGFja2FnZUZpbGVJZCxcbiAgICAgIClcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgc3RhdGUucGFja2FnZUZpbGVzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgZGVsZXRlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH0pXG4gICAgcmV0dXJuIGRlbGV0ZWRcbiAgfSxcbiAgYWRkUGFja2FnZUZpbGU6IChcbiAgICBwYWNrYWdlRmlsZTogT21pdDxQYWNrYWdlRmlsZSwgXCJwYWNrYWdlX2ZpbGVfaWRcIj4sXG4gICk6IFBhY2thZ2VGaWxlID0+IHtcbiAgICBjb25zdCBuZXdQYWNrYWdlRmlsZSA9IHtcbiAgICAgIHBhY2thZ2VfZmlsZV9pZDogYHBhY2thZ2VfZmlsZV8ke2dldCgpLmlkQ291bnRlciArIDF9YCxcbiAgICAgIC4uLnBhY2thZ2VGaWxlLFxuICAgIH1cbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgaWRDb3VudGVyOiBzdGF0ZS5pZENvdW50ZXIgKyAxLFxuICAgICAgcGFja2FnZUZpbGVzOiBbLi4uc3RhdGUucGFja2FnZUZpbGVzLCBuZXdQYWNrYWdlRmlsZV0sXG4gICAgfSkpXG4gICAgcmV0dXJuIG5ld1BhY2thZ2VGaWxlXG4gIH0sXG4gIHVwZGF0ZVBhY2thZ2VGaWxlOiAoXG4gICAgcGFja2FnZUZpbGVJZDogc3RyaW5nLFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8T21pdDxQYWNrYWdlRmlsZSwgXCJwYWNrYWdlX2ZpbGVfaWRcIj4+LFxuICApOiBQYWNrYWdlRmlsZSA9PiB7XG4gICAgc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgIHBhY2thZ2VGaWxlczogc3RhdGUucGFja2FnZUZpbGVzLm1hcCgoZmlsZSkgPT5cbiAgICAgICAgZmlsZS5wYWNrYWdlX2ZpbGVfaWQgPT09IHBhY2thZ2VGaWxlSWQgPyB7IC4uLmZpbGUsIC4uLnVwZGF0ZXMgfSA6IGZpbGUsXG4gICAgICApLFxuICAgIH0pKVxuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUucGFja2FnZUZpbGVzLmZpbmQoXG4gICAgICAoZmlsZSkgPT4gZmlsZS5wYWNrYWdlX2ZpbGVfaWQgPT09IHBhY2thZ2VGaWxlSWQsXG4gICAgKSFcbiAgfSxcbiAgZ2V0U3RhckNvdW50OiAocGFja2FnZUlkOiBzdHJpbmcpOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUuYWNjb3VudFBhY2thZ2VzLmZpbHRlcihcbiAgICAgIChhcCkgPT4gYXAucGFja2FnZV9pZCA9PT0gcGFja2FnZUlkICYmIGFwLmlzX3N0YXJyZWQsXG4gICAgKS5sZW5ndGhcbiAgfSxcbiAgZ2V0UGFja2FnZUZpbGVzQnlSZWxlYXNlSWQ6IChwYWNrYWdlUmVsZWFzZUlkOiBzdHJpbmcpOiBQYWNrYWdlRmlsZVtdID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLnBhY2thZ2VGaWxlcy5maWx0ZXIoXG4gICAgICAocGYpID0+IHBmLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGFja2FnZVJlbGVhc2VJZCxcbiAgICApXG4gIH0sXG4gIC8qKlxuICAgKiBVcGRhdGUgZnNfc2hhIGZvciBhIHBhY2thZ2UgcmVsZWFzZSBiYXNlZCBvbiBpdHMgZmlsZXNcbiAgICovXG4gIHVwZGF0ZVBhY2thZ2VSZWxlYXNlRnNTaGE6IChwYWNrYWdlUmVsZWFzZUlkOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgY29uc3QgcGFja2FnZUZpbGVzID0gc3RhdGUucGFja2FnZUZpbGVzLmZpbHRlcihcbiAgICAgIChwZikgPT4gcGYucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZUlkLFxuICAgIClcbiAgICBjb25zdCBmc1NoYSA9IGdlbmVyYXRlRnNTaGEocGFja2FnZUZpbGVzKVxuXG4gICAgc2V0KChjdXJyZW50U3RhdGUpID0+ICh7XG4gICAgICAuLi5jdXJyZW50U3RhdGUsXG4gICAgICBwYWNrYWdlUmVsZWFzZXM6IGN1cnJlbnRTdGF0ZS5wYWNrYWdlUmVsZWFzZXMubWFwKChwcikgPT5cbiAgICAgICAgcHIucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZUlkXG4gICAgICAgICAgPyB7IC4uLnByLCBmc19zaGE6IGZzU2hhIH1cbiAgICAgICAgICA6IHByLFxuICAgICAgKSxcbiAgICAgIHBhY2thZ2VzOiBjdXJyZW50U3RhdGUucGFja2FnZXMubWFwKChwa2cpID0+XG4gICAgICAgIHBrZy5sYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZUlkXG4gICAgICAgICAgPyB7IC4uLnBrZywgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9mc19zaGE6IGZzU2hhIH1cbiAgICAgICAgICA6IHBrZyxcbiAgICAgICksXG4gICAgfSkpXG4gIH0sXG5cbiAgYWRkQWlSZXZpZXc6IChyZXZpZXc6IE9taXQ8QWlSZXZpZXcsIFwiYWlfcmV2aWV3X2lkXCI+KTogQWlSZXZpZXcgPT4ge1xuICAgIGNvbnN0IGJhc2UgPSBhaVJldmlld1NjaGVtYS5vbWl0KHsgYWlfcmV2aWV3X2lkOiB0cnVlIH0pLnBhcnNlKHJldmlldylcbiAgICBjb25zdCBuZXdSZXZpZXcgPSB7XG4gICAgICBhaV9yZXZpZXdfaWQ6IGNyeXB0by5yYW5kb21VVUlEKCksXG4gICAgICAuLi5iYXNlLFxuICAgIH1cbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgYWlSZXZpZXdzOiBbLi4uc3RhdGUuYWlSZXZpZXdzLCBuZXdSZXZpZXddLFxuICAgICAgaWRDb3VudGVyOiBzdGF0ZS5pZENvdW50ZXIgKyAxLFxuICAgIH0pKVxuICAgIHJldHVybiBuZXdSZXZpZXdcbiAgfSxcbiAgdXBkYXRlQWlSZXZpZXc6IChcbiAgICBhaVJldmlld0lkOiBzdHJpbmcsXG4gICAgdXBkYXRlczogUGFydGlhbDxBaVJldmlldz4sXG4gICk6IEFpUmV2aWV3IHwgdW5kZWZpbmVkID0+IHtcbiAgICBsZXQgdXBkYXRlZDogQWlSZXZpZXcgfCB1bmRlZmluZWRcbiAgICBzZXQoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHN0YXRlLmFpUmV2aWV3cy5maW5kSW5kZXgoXG4gICAgICAgIChhcikgPT4gYXIuYWlfcmV2aWV3X2lkID09PSBhaVJldmlld0lkLFxuICAgICAgKVxuICAgICAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlXG4gICAgICBjb25zdCBhaVJldmlld3MgPSBbLi4uc3RhdGUuYWlSZXZpZXdzXVxuICAgICAgYWlSZXZpZXdzW2luZGV4XSA9IHsgLi4uYWlSZXZpZXdzW2luZGV4XSwgLi4udXBkYXRlcyB9XG4gICAgICB1cGRhdGVkID0gYWlSZXZpZXdzW2luZGV4XVxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGFpUmV2aWV3cyB9XG4gICAgfSlcbiAgICByZXR1cm4gdXBkYXRlZFxuICB9LFxuICBnZXRBaVJldmlld0J5SWQ6IChhaVJldmlld0lkOiBzdHJpbmcpOiBBaVJldmlldyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5haVJldmlld3MuZmluZCgoYXIpID0+IGFyLmFpX3Jldmlld19pZCA9PT0gYWlSZXZpZXdJZClcbiAgfSxcbiAgbGlzdEFpUmV2aWV3czogKCk6IEFpUmV2aWV3W10gPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUuYWlSZXZpZXdzXG4gIH0sXG4gIGFkZERhdGFzaGVldDogKHsgY2hpcF9uYW1lIH06IHsgY2hpcF9uYW1lOiBzdHJpbmcgfSk6IERhdGFzaGVldCA9PiB7XG4gICAgY29uc3QgbmV3RGF0YXNoZWV0ID0gZGF0YXNoZWV0U2NoZW1hLnBhcnNlKHtcbiAgICAgIGRhdGFzaGVldF9pZDogY3J5cHRvLnJhbmRvbVVVSUQoKSxcbiAgICAgIGNoaXBfbmFtZSxcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHBpbl9pbmZvcm1hdGlvbjogbnVsbCxcbiAgICAgIGRhdGFzaGVldF9wZGZfdXJsczogbnVsbCxcbiAgICAgIGFpX2Rlc2NyaXB0aW9uOiBudWxsLFxuICAgIH0pXG4gICAgc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgIGRhdGFzaGVldHM6IFsuLi5zdGF0ZS5kYXRhc2hlZXRzLCBuZXdEYXRhc2hlZXRdLFxuICAgIH0pKVxuICAgIHJldHVybiBuZXdEYXRhc2hlZXRcbiAgfSxcbiAgZ2V0RGF0YXNoZWV0QnlJZDogKGRhdGFzaGVldElkOiBzdHJpbmcpOiBEYXRhc2hlZXQgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUuZGF0YXNoZWV0cy5maW5kKChkKSA9PiBkLmRhdGFzaGVldF9pZCA9PT0gZGF0YXNoZWV0SWQpXG4gIH0sXG4gIGdldERhdGFzaGVldEJ5Q2hpcE5hbWU6IChjaGlwTmFtZTogc3RyaW5nKTogRGF0YXNoZWV0IHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLmRhdGFzaGVldHMuZmluZChcbiAgICAgIChkKSA9PiBkLmNoaXBfbmFtZS50b0xvd2VyQ2FzZSgpID09PSBjaGlwTmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgIClcbiAgfSxcbiAgbGlzdERhdGFzaGVldHM6ICh7XG4gICAgY2hpcF9uYW1lLFxuICAgIGlzX3BvcHVsYXIsXG4gIH06IHsgY2hpcF9uYW1lPzogc3RyaW5nOyBpc19wb3B1bGFyPzogYm9vbGVhbiB9ID0ge30pOiBEYXRhc2hlZXRbXSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIGlmIChpc19wb3B1bGFyKSB7XG4gICAgICByZXR1cm4gc3RhdGUuZGF0YXNoZWV0c1xuICAgIH1cblxuICAgIGlmIChjaGlwX25hbWUpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5kYXRhc2hlZXRzLmZpbHRlcihcbiAgICAgICAgKGQpID0+IGQuY2hpcF9uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGNoaXBfbmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZS5kYXRhc2hlZXRzXG4gIH0sXG4gIHVwZGF0ZURhdGFzaGVldDogKFxuICAgIGRhdGFzaGVldElkOiBzdHJpbmcsXG4gICAgdXBkYXRlczogUGFydGlhbDxEYXRhc2hlZXQ+LFxuICApOiBEYXRhc2hlZXQgfCB1bmRlZmluZWQgPT4ge1xuICAgIGxldCB1cGRhdGVkOiBEYXRhc2hlZXQgfCB1bmRlZmluZWRcbiAgICBzZXQoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHN0YXRlLmRhdGFzaGVldHMuZmluZEluZGV4KFxuICAgICAgICAoZCkgPT4gZC5kYXRhc2hlZXRfaWQgPT09IGRhdGFzaGVldElkLFxuICAgICAgKVxuICAgICAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlXG4gICAgICBjb25zdCBkYXRhc2hlZXRzID0gWy4uLnN0YXRlLmRhdGFzaGVldHNdXG4gICAgICBkYXRhc2hlZXRzW2luZGV4XSA9IHsgLi4uZGF0YXNoZWV0c1tpbmRleF0sIC4uLnVwZGF0ZXMgfVxuICAgICAgdXBkYXRlZCA9IGRhdGFzaGVldHNbaW5kZXhdXG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgZGF0YXNoZWV0cyB9XG4gICAgfSlcbiAgICByZXR1cm4gdXBkYXRlZFxuICB9LFxuICBhZGRQYWNrYWdlQnVpbGQ6IChcbiAgICBwYWNrYWdlQnVpbGQ6IFBhcnRpYWw8XG4gICAgICBPbWl0PHouaW5wdXQ8dHlwZW9mIHBhY2thZ2VCdWlsZFNjaGVtYT4sIFwicGFja2FnZV9idWlsZF9pZFwiPlxuICAgID4gJiB7XG4gICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHN0cmluZ1xuICAgIH0sXG4gICk6IFBhY2thZ2VCdWlsZCA9PiB7XG4gICAgY29uc3QgbmV3UGFja2FnZUJ1aWxkID0gcGFja2FnZUJ1aWxkU2NoZW1hLnBhcnNlKHtcbiAgICAgIHBhY2thZ2VfYnVpbGRfaWQ6IGNyeXB0by5yYW5kb21VVUlEKCksXG4gICAgICB1c2VyX2NvZGVfYnVpbGRfbG9nczogbnVsbCxcbiAgICAgIGltYWdlX2dlbmVyYXRpb25fbG9nczogbnVsbCxcbiAgICAgIC4uLnBhY2thZ2VCdWlsZCxcbiAgICB9KVxuICAgIHNldCgoc3RhdGUpID0+ICh7XG4gICAgICBwYWNrYWdlQnVpbGRzOiBbLi4uc3RhdGUucGFja2FnZUJ1aWxkcywgbmV3UGFja2FnZUJ1aWxkXSxcbiAgICAgIC8vIEF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSBwYWNrYWdlIHJlbGVhc2UgdG8gcmVmZXJlbmNlIHRoaXMgYXMgdGhlIGxhdGVzdCBidWlsZFxuICAgICAgcGFja2FnZVJlbGVhc2VzOiBzdGF0ZS5wYWNrYWdlUmVsZWFzZXMubWFwKChyZWxlYXNlKSA9PlxuICAgICAgICByZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGFja2FnZUJ1aWxkLnBhY2thZ2VfcmVsZWFzZV9pZFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5yZWxlYXNlLFxuICAgICAgICAgICAgICBsYXRlc3RfcGFja2FnZV9idWlsZF9pZDogbmV3UGFja2FnZUJ1aWxkLnBhY2thZ2VfYnVpbGRfaWQsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiByZWxlYXNlLFxuICAgICAgKSxcbiAgICB9KSlcbiAgICByZXR1cm4gbmV3UGFja2FnZUJ1aWxkXG4gIH0sXG4gIGdldFBhY2thZ2VCdWlsZEJ5SWQ6IChwYWNrYWdlQnVpbGRJZDogc3RyaW5nKTogUGFja2FnZUJ1aWxkIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldCgpXG4gICAgcmV0dXJuIHN0YXRlLnBhY2thZ2VCdWlsZHMuZmluZChcbiAgICAgIChwYikgPT4gcGIucGFja2FnZV9idWlsZF9pZCA9PT0gcGFja2FnZUJ1aWxkSWQsXG4gICAgKVxuICB9LFxuICBnZXRQYWNrYWdlQnVpbGRzQnlSZWxlYXNlSWQ6IChwYWNrYWdlUmVsZWFzZUlkOiBzdHJpbmcpOiBQYWNrYWdlQnVpbGRbXSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5wYWNrYWdlQnVpbGRzXG4gICAgICAuZmlsdGVyKChwYikgPT4gcGIucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZUlkKVxuICAgICAgLnNvcnQoXG4gICAgICAgIChhLCBiKSA9PlxuICAgICAgICAgIG5ldyBEYXRlKGIuY3JlYXRlZF9hdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYS5jcmVhdGVkX2F0KS5nZXRUaW1lKCksXG4gICAgICApXG4gIH0sXG4gIHVwZGF0ZVBhY2thZ2VCdWlsZDogKFxuICAgIHBhY2thZ2VCdWlsZElkOiBzdHJpbmcsXG4gICAgdXBkYXRlczogUGFydGlhbDxQYWNrYWdlQnVpbGQ+LFxuICApOiBQYWNrYWdlQnVpbGQgfCB1bmRlZmluZWQgPT4ge1xuICAgIGxldCB1cGRhdGVkOiBQYWNrYWdlQnVpbGQgfCB1bmRlZmluZWRcbiAgICBzZXQoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHN0YXRlLnBhY2thZ2VCdWlsZHMuZmluZEluZGV4KFxuICAgICAgICAocGIpID0+IHBiLnBhY2thZ2VfYnVpbGRfaWQgPT09IHBhY2thZ2VCdWlsZElkLFxuICAgICAgKVxuICAgICAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlXG4gICAgICBjb25zdCBwYWNrYWdlQnVpbGRzID0gWy4uLnN0YXRlLnBhY2thZ2VCdWlsZHNdXG4gICAgICBwYWNrYWdlQnVpbGRzW2luZGV4XSA9IHsgLi4ucGFja2FnZUJ1aWxkc1tpbmRleF0sIC4uLnVwZGF0ZXMgfVxuICAgICAgdXBkYXRlZCA9IHBhY2thZ2VCdWlsZHNbaW5kZXhdXG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgcGFja2FnZUJ1aWxkcyB9XG4gICAgfSlcbiAgICByZXR1cm4gdXBkYXRlZFxuICB9LFxuICBhZGRPcmdhbml6YXRpb246IChvcmdhbml6YXRpb246IHtcbiAgICBuYW1lPzogc3RyaW5nXG4gICAgb3JnX2lkPzogc3RyaW5nXG4gICAgaXNfcGVyc29uYWxfb3JnPzogYm9vbGVhblxuICAgIG93bmVyX2FjY291bnRfaWQ6IHN0cmluZ1xuICAgIGdpdGh1Yl9oYW5kbGU/OiBzdHJpbmdcbiAgICBvcmdfZGlzcGxheV9uYW1lPzogc3RyaW5nXG4gICAgdHNjaXJjdWl0X2hhbmRsZT86IHN0cmluZ1xuICAgIGF2YXRhcl91cmw/OiBzdHJpbmcgfCBudWxsXG4gIH0pID0+IHtcbiAgICBjb25zdCBuZXdPcmdhbml6YXRpb246IE9yZ2FuaXphdGlvbiA9IHtcbiAgICAgIG9yZ19pZDogb3JnYW5pemF0aW9uLm9yZ19pZCB8fCBgb3JnXyR7Z2V0KCkuaWRDb3VudGVyICsgMX1gLFxuICAgICAgZ2l0aHViX2hhbmRsZTogb3JnYW5pemF0aW9uLmdpdGh1Yl9oYW5kbGUgPz8gbnVsbCxcbiAgICAgIGlzX3BlcnNvbmFsX29yZzogb3JnYW5pemF0aW9uLmlzX3BlcnNvbmFsX29yZyB8fCBmYWxzZSxcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIG9yZ19kaXNwbGF5X25hbWU6XG4gICAgICAgIG9yZ2FuaXphdGlvbi5vcmdfZGlzcGxheV9uYW1lID8/XG4gICAgICAgIG9yZ2FuaXphdGlvbi50c2NpcmN1aXRfaGFuZGxlID8/XG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGF2YXRhcl91cmw6IG9yZ2FuaXphdGlvbi5hdmF0YXJfdXJsID8/IG51bGwsXG4gICAgICB0c2NpcmN1aXRfaGFuZGxlOlxuICAgICAgICBvcmdhbml6YXRpb24udHNjaXJjdWl0X2hhbmRsZSB8fCBvcmdhbml6YXRpb24ubmFtZSB8fCBudWxsLFxuICAgICAgLi4ub3JnYW5pemF0aW9uLFxuICAgIH1cbiAgICBzZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgaWRDb3VudGVyOiBzdGF0ZS5pZENvdW50ZXIgKyAxLFxuICAgICAgb3JnYW5pemF0aW9uczogWy4uLnN0YXRlLm9yZ2FuaXphdGlvbnMsIG5ld09yZ2FuaXphdGlvbiBhcyBPcmdhbml6YXRpb25dLFxuICAgICAgLy8gQWRkIHRoZSBjcmVhdG9yIGFzIGEgbWVtYmVyIG9mIHRoZSBuZXcgb3JnIGJ5IHNldHRpbmcgdGhlaXIgcGVyc29uYWxfb3JnX2lkXG4gICAgICBhY2NvdW50czogc3RhdGUuYWNjb3VudHMubWFwKChhY2NvdW50KSA9PlxuICAgICAgICBhY2NvdW50LmFjY291bnRfaWQgPT09IG9yZ2FuaXphdGlvbi5vd25lcl9hY2NvdW50X2lkXG4gICAgICAgICAgPyB7IC4uLmFjY291bnQsIHBlcnNvbmFsX29yZ19pZDogbmV3T3JnYW5pemF0aW9uLm9yZ19pZCB9XG4gICAgICAgICAgOiBhY2NvdW50LFxuICAgICAgKSxcbiAgICB9KSlcbiAgICByZXR1cm4gbmV3T3JnYW5pemF0aW9uXG4gIH0sXG4gIGdldE9yZ3M6IChcbiAgICBmaWx0ZXJzPzoge1xuICAgICAgb3duZXJfYWNjb3VudF9pZD86IHN0cmluZ1xuICAgICAgYWNjb3VudF9pZD86IHN0cmluZ1xuICAgICAgZ2l0aHViX2hhbmRsZT86IHN0cmluZ1xuICAgICAgdHNjaXJjdWl0X2hhbmRsZT86IHN0cmluZ1xuICAgICAgbmFtZT86IHN0cmluZ1xuICAgIH0sXG4gICAgYXV0aD86IHsgYWNjb3VudF9pZD86IHN0cmluZyB9LFxuICApID0+IHtcbiAgICBsZXQgb3JncyA9IGdldCgpLm9yZ2FuaXphdGlvbnNcbiAgICBpZiAoZmlsdGVycz8ub3duZXJfYWNjb3VudF9pZCkge1xuICAgICAgb3JncyA9IG9yZ3MuZmlsdGVyKFxuICAgICAgICAob3JnKSA9PiBvcmcub3duZXJfYWNjb3VudF9pZCA9PT0gZmlsdGVycy5vd25lcl9hY2NvdW50X2lkLFxuICAgICAgKVxuICAgIH1cbiAgICBpZiAoZmlsdGVycz8uYWNjb3VudF9pZCkge1xuICAgICAgb3JncyA9IG9yZ3MuZmlsdGVyKChvcmcpID0+IHtcbiAgICAgICAgY29uc3QgaXNNZW1iZXJWaWFPcmdBY2NvdW50cyA9IGdldCgpLm9yZ0FjY291bnRzLnNvbWUoXG4gICAgICAgICAgKG9hKSA9PlxuICAgICAgICAgICAgb2Eub3JnX2lkID09PSBvcmcub3JnX2lkICYmIG9hLmFjY291bnRfaWQgPT09IGZpbHRlcnMuYWNjb3VudF9pZCxcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBpc1BlcnNvbmFsT3JnID1cbiAgICAgICAgICBvcmcuaXNfcGVyc29uYWxfb3JnICYmIG9yZy5vd25lcl9hY2NvdW50X2lkID09PSBmaWx0ZXJzLmFjY291bnRfaWRcbiAgICAgICAgcmV0dXJuIGlzTWVtYmVyVmlhT3JnQWNjb3VudHMgfHwgaXNQZXJzb25hbE9yZ1xuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKGZpbHRlcnM/LmdpdGh1Yl9oYW5kbGUpIHtcbiAgICAgIG9yZ3MgPSBvcmdzLmZpbHRlcigob3JnKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjY291bnQgPSBnZXQoKS5hY2NvdW50cy5maW5kKFxuICAgICAgICAgIChhY2NvdW50KSA9PiBhY2NvdW50LmFjY291bnRfaWQgPT09IG9yZy5vd25lcl9hY2NvdW50X2lkLFxuICAgICAgICApXG4gICAgICAgIHJldHVybiBhY2NvdW50Py5naXRodWJfdXNlcm5hbWUgPT09IGZpbHRlcnMuZ2l0aHViX2hhbmRsZVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKGZpbHRlcnM/LnRzY2lyY3VpdF9oYW5kbGUpIHtcbiAgICAgIGNvbnN0IGFjY291bnQgPSBnZXQoKS5hY2NvdW50cy5maW5kKFxuICAgICAgICAoYWNjb3VudCkgPT4gYWNjb3VudC50c2NpcmN1aXRfaGFuZGxlID09PSBmaWx0ZXJzLnRzY2lyY3VpdF9oYW5kbGUsXG4gICAgICApXG4gICAgICBvcmdzID0gb3Jncy5maWx0ZXIoKG9yZykgPT4ge1xuICAgICAgICBjb25zdCBvcmdBY2NvdW50ID0gZ2V0KCkub3JnQWNjb3VudHMuZmluZChcbiAgICAgICAgICAob2EpID0+XG4gICAgICAgICAgICBvYS5vcmdfaWQgPT09IG9yZy5vcmdfaWQgJiYgb2EuYWNjb3VudF9pZCA9PT0gYWNjb3VudD8uYWNjb3VudF9pZCxcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBpc1BlcnNvbmFsT3JnID1cbiAgICAgICAgICBvcmcuaXNfcGVyc29uYWxfb3JnICYmIG9yZy5vd25lcl9hY2NvdW50X2lkID09PSBhY2NvdW50Py5hY2NvdW50X2lkXG4gICAgICAgIHJldHVybiBCb29sZWFuKG9yZ0FjY291bnQpIHx8IGlzUGVyc29uYWxPcmdcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChmaWx0ZXJzPy5uYW1lKSB7XG4gICAgICBvcmdzID0gb3Jncy5maWx0ZXIoXG4gICAgICAgIChvcmcpID0+XG4gICAgICAgICAgb3JnLmdpdGh1Yl9oYW5kbGUgPT09IGZpbHRlcnMubmFtZSB8fFxuICAgICAgICAgIG9yZy50c2NpcmN1aXRfaGFuZGxlID09PSBmaWx0ZXJzLm5hbWUsXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIG9yZ3MubWFwKChvcmcpID0+IHtcbiAgICAgIGNvbnN0IG1lbWJlcl9jb3VudCA9IGdldCgpLmFjY291bnRzLmZpbHRlcihcbiAgICAgICAgKGFjY291bnQpID0+IGFjY291bnQucGVyc29uYWxfb3JnX2lkID09PSBvcmcub3JnX2lkLFxuICAgICAgKS5sZW5ndGhcblxuICAgICAgY29uc3QgcGFja2FnZV9jb3VudCA9IGdldCgpLnBhY2thZ2VzLmZpbHRlcihcbiAgICAgICAgKHBrZykgPT4gcGtnLm93bmVyX29yZ19pZCA9PT0gb3JnLm9yZ19pZCxcbiAgICAgICkubGVuZ3RoXG5cbiAgICAgIGNvbnN0IGNhbl9tYW5hZ2Vfb3JnID0gYXV0aFxuICAgICAgICA/IG9yZy5vd25lcl9hY2NvdW50X2lkID09PSBhdXRoLmFjY291bnRfaWRcbiAgICAgICAgOiBmYWxzZVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vcmcsXG4gICAgICAgIG1lbWJlcl9jb3VudCxcbiAgICAgICAgcGFja2FnZV9jb3VudCxcbiAgICAgICAgY2FuX21hbmFnZV9vcmcsXG4gICAgICB9XG4gICAgfSlcbiAgfSxcbiAgZ2V0T3JnOiAoXG4gICAgZmlsdGVyczoge1xuICAgICAgb3JnX2lkPzogc3RyaW5nXG4gICAgICBnaXRodWJfaGFuZGxlPzogc3RyaW5nXG4gICAgICB0c2NpcmN1aXRfaGFuZGxlPzogc3RyaW5nXG4gICAgfSxcbiAgICBhdXRoPzogeyBhY2NvdW50X2lkOiBzdHJpbmcgfSxcbiAgKSA9PiB7XG4gICAgbGV0IG9yZ3MgPSBnZXQoKS5vcmdhbml6YXRpb25zXG5cbiAgICBpZiAoZmlsdGVycz8ub3JnX2lkKSB7XG4gICAgICBvcmdzID0gb3Jncy5maWx0ZXIoKG9yZykgPT4gb3JnLm9yZ19pZCA9PT0gZmlsdGVycy5vcmdfaWQpXG4gICAgfVxuICAgIC8vIGlmIChmaWx0ZXJzPy5vcmdfbmFtZSAmJiBhdXRoPy5hY2NvdW50X2lkKSB7XG4gICAgLy8gICBjb25zdCBhY2NvdW50ID0gZ2V0KCkuYWNjb3VudHMuZmluZCh4ID0+IHguYWNjb3VudF9pZCA9PSBhdXRoPy5hY2NvdW50X2lkKVxuICAgIC8vICAgb3JncyA9IG9yZ3MuZmlsdGVyKChvcmcpID0+IG9yZy5naXRodWJfaGFuZGxlID09PSBhY2NvdW50Py5naXRodWJfdXNlcm5hbWUpXG4gICAgLy8gfVxuICAgIGlmIChmaWx0ZXJzPy5naXRodWJfaGFuZGxlKSB7XG4gICAgICBvcmdzID0gb3Jncy5maWx0ZXIoKG9yZykgPT4gb3JnLmdpdGh1Yl9oYW5kbGUgPT09IGZpbHRlcnMuZ2l0aHViX2hhbmRsZSlcbiAgICB9XG4gICAgaWYgKGZpbHRlcnM/LnRzY2lyY3VpdF9oYW5kbGUpIHtcbiAgICAgIG9yZ3MgPSBvcmdzLmZpbHRlcihcbiAgICAgICAgKG9yZykgPT4gb3JnLnRzY2lyY3VpdF9oYW5kbGUgPT09IGZpbHRlcnMudHNjaXJjdWl0X2hhbmRsZSxcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG9yZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IG9yZyA9IG9yZ3NbMF1cbiAgICBjb25zdCBvcmdBY2NvdW50ID0gZ2V0KCkub3JnQWNjb3VudHMuZmluZChcbiAgICAgIChvYSkgPT4gb2Eub3JnX2lkID09PSBvcmcub3JnX2lkICYmIG9hLmFjY291bnRfaWQgPT09IGF1dGg/LmFjY291bnRfaWQsXG4gICAgKVxuICAgIGNvbnN0IGlzT3duZXIgPSBvcmcub3duZXJfYWNjb3VudF9pZCA9PT0gYXV0aD8uYWNjb3VudF9pZFxuXG4gICAgY29uc3QgbWVtYmVyX2NvdW50ID0gZ2V0KCkuYWNjb3VudHMuZmlsdGVyKFxuICAgICAgKGFjY291bnQpID0+IGFjY291bnQucGVyc29uYWxfb3JnX2lkID09PSBvcmcub3JnX2lkLFxuICAgICkubGVuZ3RoXG5cbiAgICBjb25zdCBwYWNrYWdlX2NvdW50ID0gZ2V0KCkucGFja2FnZXMuZmlsdGVyKFxuICAgICAgKHBrZykgPT4gcGtnLm93bmVyX29yZ19pZCA9PT0gb3JnLm9yZ19pZCxcbiAgICApLmxlbmd0aFxuXG4gICAgY29uc3QgY2FuX21hbmFnZV9vcmcgPSBpc093bmVyID8gdHJ1ZSA6IG9yZ0FjY291bnQ/LmNhbl9tYW5hZ2Vfb3JnIHx8IGZhbHNlXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3JnLFxuICAgICAgbWVtYmVyX2NvdW50LFxuICAgICAgcGFja2FnZV9jb3VudCxcbiAgICAgIGNhbl9tYW5hZ2Vfb3JnLFxuICAgIH1cbiAgfSxcbiAgYWRkT3JnYW5pemF0aW9uQWNjb3VudDogKG9yZ2FuaXphdGlvbkFjY291bnQ6IHtcbiAgICBvcmdfaWQ6IHN0cmluZ1xuICAgIGFjY291bnRfaWQ6IHN0cmluZ1xuICAgIGlzX293bmVyPzogYm9vbGVhblxuICB9KSA9PiB7XG4gICAgY29uc3QgY2FuX21hbmFnZV9vcmcgPSBvcmdhbml6YXRpb25BY2NvdW50LmlzX293bmVyIHx8IGZhbHNlXG4gICAgY29uc3QgbmV3T3JnQWNjb3VudDogT3JnQWNjb3VudCA9IHtcbiAgICAgIG9yZ19hY2NvdW50X2lkOiBgb3JnX2FjY291bnRfJHtnZXQoKS5pZENvdW50ZXIgKyAxfWAsXG4gICAgICBvcmdfaWQ6IG9yZ2FuaXphdGlvbkFjY291bnQub3JnX2lkLFxuICAgICAgYWNjb3VudF9pZDogb3JnYW5pemF0aW9uQWNjb3VudC5hY2NvdW50X2lkLFxuICAgICAgaXNfb3duZXI6IG9yZ2FuaXphdGlvbkFjY291bnQuaXNfb3duZXIgfHwgZmFsc2UsXG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBjYW5fbWFuYWdlX29yZyxcbiAgICB9XG4gICAgc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgIG9yZ0FjY291bnRzOiBbLi4uc3RhdGUub3JnQWNjb3VudHMsIG5ld09yZ0FjY291bnRdLFxuICAgICAgaWRDb3VudGVyOiBzdGF0ZS5pZENvdW50ZXIgKyAxLFxuICAgIH0pKVxuICAgIHJldHVybiBuZXdPcmdBY2NvdW50XG4gIH0sXG4gIGdldE9yZ2FuaXphdGlvbkFjY291bnQ6IChmaWx0ZXJzOiB7XG4gICAgb3JnX2lkPzogc3RyaW5nXG4gICAgYWNjb3VudF9pZD86IHN0cmluZ1xuICB9KTogT3JnQWNjb3VudCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5vcmdBY2NvdW50cy5maW5kKChvcmdBY2NvdW50KSA9PiB7XG4gICAgICBpZiAoZmlsdGVycy5vcmdfaWQgJiYgb3JnQWNjb3VudC5vcmdfaWQgIT09IGZpbHRlcnMub3JnX2lkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKGZpbHRlcnMuYWNjb3VudF9pZCAmJiBvcmdBY2NvdW50LmFjY291bnRfaWQgIT09IGZpbHRlcnMuYWNjb3VudF9pZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSlcbiAgfSxcbiAgZ2V0T3JnYW5pemF0aW9uQWNjb3VudHM6IChmaWx0ZXJzPzoge1xuICAgIG9yZ19pZD86IHN0cmluZ1xuICAgIGFjY291bnRfaWQ/OiBzdHJpbmdcbiAgfSk6IE9yZ0FjY291bnRbXSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5vcmdBY2NvdW50cy5maWx0ZXIoKG9yZ0FjY291bnQpID0+IHtcbiAgICAgIGlmIChmaWx0ZXJzPy5vcmdfaWQgJiYgb3JnQWNjb3VudC5vcmdfaWQgIT09IGZpbHRlcnMub3JnX2lkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKGZpbHRlcnM/LmFjY291bnRfaWQgJiYgb3JnQWNjb3VudC5hY2NvdW50X2lkICE9PSBmaWx0ZXJzLmFjY291bnRfaWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0pXG4gIH0sXG4gIHJlbW92ZU9yZ2FuaXphdGlvbkFjY291bnQ6IChmaWx0ZXJzOiB7XG4gICAgb3JnX2lkOiBzdHJpbmdcbiAgICBhY2NvdW50X2lkOiBzdHJpbmdcbiAgfSk6IGJvb2xlYW4gPT4ge1xuICAgIGxldCByZW1vdmVkID0gZmFsc2VcbiAgICBzZXQoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHN0YXRlLm9yZ0FjY291bnRzLmZpbmRJbmRleChcbiAgICAgICAgKG9yZ0FjY291bnQpID0+XG4gICAgICAgICAgb3JnQWNjb3VudC5vcmdfaWQgPT09IGZpbHRlcnMub3JnX2lkICYmXG4gICAgICAgICAgb3JnQWNjb3VudC5hY2NvdW50X2lkID09PSBmaWx0ZXJzLmFjY291bnRfaWQsXG4gICAgICApXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHN0YXRlLm9yZ0FjY291bnRzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgcmVtb3ZlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH0pXG4gICAgcmV0dXJuIHJlbW92ZWRcbiAgfSxcbiAgdXBkYXRlT3JnYW5pemF0aW9uQWNjb3VudDogKFxuICAgIGZpbHRlcnM6IHtcbiAgICAgIG9yZ19pZDogc3RyaW5nXG4gICAgICBhY2NvdW50X2lkOiBzdHJpbmdcbiAgICB9LFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8VXNlclBlcm1pc3Npb25zPixcbiAgKTogT3JnQWNjb3VudCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgbGV0IHVwZGF0ZWRPcmdBY2NvdW50OiBPcmdBY2NvdW50IHwgdW5kZWZpbmVkXG4gICAgc2V0KChzdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSBzdGF0ZS5vcmdBY2NvdW50cy5maW5kSW5kZXgoXG4gICAgICAgIChvcmdBY2NvdW50KSA9PlxuICAgICAgICAgIG9yZ0FjY291bnQub3JnX2lkID09PSBmaWx0ZXJzLm9yZ19pZCAmJlxuICAgICAgICAgIG9yZ0FjY291bnQuYWNjb3VudF9pZCA9PT0gZmlsdGVycy5hY2NvdW50X2lkLFxuICAgICAgKVxuICAgICAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlXG4gICAgICBjb25zdCB1cGRhdGVkT3JnQWNjb3VudHMgPSBbLi4uc3RhdGUub3JnQWNjb3VudHNdXG4gICAgICB1cGRhdGVkT3JnQWNjb3VudHNbaW5kZXhdID0ge1xuICAgICAgICAuLi51cGRhdGVkT3JnQWNjb3VudHNbaW5kZXhdLFxuICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgfVxuICAgICAgdXBkYXRlZE9yZ0FjY291bnQgPSB1cGRhdGVkT3JnQWNjb3VudHNbaW5kZXhdXG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgb3JnQWNjb3VudHM6IHVwZGF0ZWRPcmdBY2NvdW50cyB9XG4gICAgfSlcbiAgICByZXR1cm4gdXBkYXRlZE9yZ0FjY291bnRcbiAgfSxcbiAgdXBkYXRlT3JnYW5pemF0aW9uOiAoXG4gICAgb3JnSWQ6IHN0cmluZyxcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPE9yZ2FuaXphdGlvbj4sXG4gICk6IE9yZ2FuaXphdGlvbiB8IHVuZGVmaW5lZCA9PiB7XG4gICAgbGV0IHVwZGF0ZWRPcmc6IE9yZ2FuaXphdGlvbiB8IHVuZGVmaW5lZFxuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IG9yZ0luZGV4ID0gc3RhdGUub3JnYW5pemF0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgIChvcmcpID0+IG9yZy5vcmdfaWQgPT09IG9yZ0lkLFxuICAgICAgKVxuICAgICAgaWYgKG9yZ0luZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlXG4gICAgICBjb25zdCB1cGRhdGVkT3JnYW5pemF0aW9ucyA9IFsuLi5zdGF0ZS5vcmdhbml6YXRpb25zXVxuICAgICAgdXBkYXRlZE9yZ2FuaXphdGlvbnNbb3JnSW5kZXhdID0ge1xuICAgICAgICAuLi51cGRhdGVkT3JnYW5pemF0aW9uc1tvcmdJbmRleF0sXG4gICAgICAgIC4uLnVwZGF0ZXMsXG4gICAgICB9XG4gICAgICB1cGRhdGVkT3JnID0gdXBkYXRlZE9yZ2FuaXphdGlvbnNbb3JnSW5kZXhdXG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgb3JnYW5pemF0aW9uczogdXBkYXRlZE9yZ2FuaXphdGlvbnMgfVxuICAgIH0pXG4gICAgcmV0dXJuIHVwZGF0ZWRPcmdcbiAgfSxcbiAgZGVsZXRlT3JnYW5pemF0aW9uOiAob3JnSWQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIGxldCBkZWxldGVkID0gZmFsc2VcbiAgICBzZXQoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBvcmdJbmRleCA9IHN0YXRlLm9yZ2FuaXphdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAob3JnKSA9PiBvcmcub3JnX2lkID09PSBvcmdJZCxcbiAgICAgIClcbiAgICAgIGlmIChvcmdJbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZVxuXG4gICAgICBjb25zdCB1cGRhdGVkT3JnYW5pemF0aW9ucyA9IFsuLi5zdGF0ZS5vcmdhbml6YXRpb25zXVxuICAgICAgdXBkYXRlZE9yZ2FuaXphdGlvbnMuc3BsaWNlKG9yZ0luZGV4LCAxKVxuXG4gICAgICBjb25zdCB1cGRhdGVkT3JnQWNjb3VudHMgPSBzdGF0ZS5vcmdBY2NvdW50cy5maWx0ZXIoXG4gICAgICAgIChvcmdBY2NvdW50KSA9PiBvcmdBY2NvdW50Lm9yZ19pZCAhPT0gb3JnSWQsXG4gICAgICApXG5cbiAgICAgIGRlbGV0ZWQgPSB0cnVlXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgb3JnYW5pemF0aW9uczogdXBkYXRlZE9yZ2FuaXphdGlvbnMsXG4gICAgICAgIG9yZ0FjY291bnRzOiB1cGRhdGVkT3JnQWNjb3VudHMsXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gZGVsZXRlZFxuICB9LFxuICBkZWxldGVBY2NvdW50OiAoYWNjb3VudElkOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlXG4gICAgc2V0KChzdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSBzdGF0ZS5hY2NvdW50cy5maW5kSW5kZXgoXG4gICAgICAgIChhY2NvdW50KSA9PiBhY2NvdW50LmFjY291bnRfaWQgPT09IGFjY291bnRJZCxcbiAgICAgIClcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgc3RhdGUuYWNjb3VudHMuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICBkZWxldGVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfSlcbiAgICByZXR1cm4gZGVsZXRlZFxuICB9LFxuICBhZGRPcmdJbnZpdGF0aW9uOiAoaW52aXRhdGlvbjoge1xuICAgIG9yZ19pZDogc3RyaW5nXG4gICAgaW52aXRlZV9lbWFpbDogc3RyaW5nXG4gICAgaW52aXRlcl9hY2NvdW50X2lkOiBzdHJpbmdcbiAgICBpbnZpdGF0aW9uX3Rva2VuOiBzdHJpbmdcbiAgfSk6IE9yZ0ludml0YXRpb24gPT4ge1xuICAgIGNvbnN0IGV4cGlyZXNBdCA9IG5ldyBEYXRlKClcbiAgICBleHBpcmVzQXQuc2V0RGF0ZShleHBpcmVzQXQuZ2V0RGF0ZSgpICsgNykgLy8gNyBkYXlzIGZyb20gbm93XG5cbiAgICBjb25zdCBuZXdJbnZpdGF0aW9uOiBPcmdJbnZpdGF0aW9uID0ge1xuICAgICAgb3JnX2ludml0YXRpb25faWQ6IGBvcmdfaW52aXRhdGlvbl8ke2dldCgpLmlkQ291bnRlciArIDF9YCxcbiAgICAgIG9yZ19pZDogaW52aXRhdGlvbi5vcmdfaWQsXG4gICAgICBpbnZpdGVlX2VtYWlsOiBpbnZpdGF0aW9uLmludml0ZWVfZW1haWwsXG4gICAgICBpbnZpdGVyX2FjY291bnRfaWQ6IGludml0YXRpb24uaW52aXRlcl9hY2NvdW50X2lkLFxuICAgICAgaW52aXRhdGlvbl90b2tlbjogaW52aXRhdGlvbi5pbnZpdGF0aW9uX3Rva2VuLFxuICAgICAgaXNfbGlua19pbnZpdGU6IGZhbHNlLFxuICAgICAgaXNfcGVuZGluZzogdHJ1ZSxcbiAgICAgIGlzX2FjY2VwdGVkOiBmYWxzZSxcbiAgICAgIGlzX2V4cGlyZWQ6IGZhbHNlLFxuICAgICAgaXNfcmV2b2tlZDogZmFsc2UsXG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBleHBpcmVzX2F0OiBleHBpcmVzQXQudG9JU09TdHJpbmcoKSxcbiAgICAgIGFjY2VwdGVkX2F0OiBudWxsLFxuICAgICAgYWNjZXB0ZWRfYnlfYWNjb3VudF9pZDogbnVsbCxcbiAgICB9XG4gICAgc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgIG9yZ0ludml0YXRpb25zOiBbLi4uc3RhdGUub3JnSW52aXRhdGlvbnMsIG5ld0ludml0YXRpb25dLFxuICAgICAgaWRDb3VudGVyOiBzdGF0ZS5pZENvdW50ZXIgKyAxLFxuICAgIH0pKVxuICAgIHJldHVybiBuZXdJbnZpdGF0aW9uXG4gIH0sXG4gIGdldE9yZ0ludml0YXRpb25CeVRva2VuOiAodG9rZW46IHN0cmluZyk6IE9yZ0ludml0YXRpb24gfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZ2V0KClcbiAgICByZXR1cm4gc3RhdGUub3JnSW52aXRhdGlvbnMuZmluZChcbiAgICAgIChpbnZpdGF0aW9uKSA9PiBpbnZpdGF0aW9uLmludml0YXRpb25fdG9rZW4gPT09IHRva2VuLFxuICAgIClcbiAgfSxcbiAgbGlzdE9yZ0ludml0YXRpb25zOiAob3JnSWQ6IHN0cmluZyk6IE9yZ0ludml0YXRpb25bXSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXQoKVxuICAgIHJldHVybiBzdGF0ZS5vcmdJbnZpdGF0aW9ucy5maWx0ZXIoXG4gICAgICAoaW52aXRhdGlvbikgPT4gaW52aXRhdGlvbi5vcmdfaWQgPT09IG9yZ0lkLFxuICAgIClcbiAgfSxcbiAgdXBkYXRlT3JnSW52aXRhdGlvbjogKFxuICAgIGludml0YXRpb25JZDogc3RyaW5nLFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8T3JnSW52aXRhdGlvbj4sXG4gICk6IE9yZ0ludml0YXRpb24gfCB1bmRlZmluZWQgPT4ge1xuICAgIGxldCB1cGRhdGVkSW52aXRhdGlvbjogT3JnSW52aXRhdGlvbiB8IHVuZGVmaW5lZFxuICAgIHNldCgoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gc3RhdGUub3JnSW52aXRhdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAoaW52KSA9PiBpbnYub3JnX2ludml0YXRpb25faWQgPT09IGludml0YXRpb25JZCxcbiAgICAgIClcbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZVxuICAgICAgY29uc3QgdXBkYXRlZEludml0YXRpb25zID0gWy4uLnN0YXRlLm9yZ0ludml0YXRpb25zXVxuICAgICAgdXBkYXRlZEludml0YXRpb25zW2luZGV4XSA9IHtcbiAgICAgICAgLi4udXBkYXRlZEludml0YXRpb25zW2luZGV4XSxcbiAgICAgICAgLi4udXBkYXRlcyxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRJbnZpdGF0aW9uID0gdXBkYXRlZEludml0YXRpb25zW2luZGV4XVxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIG9yZ0ludml0YXRpb25zOiB1cGRhdGVkSW52aXRhdGlvbnMgfVxuICAgIH0pXG4gICAgcmV0dXJuIHVwZGF0ZWRJbnZpdGF0aW9uXG4gIH0sXG59KSlcbiIsICJpbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBjb25zdCBlcnJvclNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgZXJyb3JfY29kZTogei5zdHJpbmcoKSxcbiAgICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICB9KVxuICAucGFzc3Rocm91Z2goKVxuXG5leHBvcnQgY29uc3QgZXJyb3JSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZXJyb3I6IGVycm9yU2NoZW1hLFxufSlcblxuZXhwb3J0IGNvbnN0IGxvZyA9IHouYW55KClcblxuZXhwb3J0IGNvbnN0IHNuaXBwZXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHNuaXBwZXRfaWQ6IHouc3RyaW5nKCksXG4gIHBhY2thZ2VfcmVsZWFzZV9pZDogei5zdHJpbmcoKSxcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgdW5zY29wZWRfbmFtZTogei5zdHJpbmcoKSxcbiAgb3duZXJfbmFtZTogei5zdHJpbmcoKSxcbiAgaXNfc3RhcnJlZDogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGNvZGU6IHouc3RyaW5nKCksXG4gIGR0czogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb21waWxlZF9qczogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKCksXG4gIGNpcmN1aXRfanNvbjogei5hcnJheSh6LnJlY29yZCh6LmFueSgpKSkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICBtYW51YWxfZWRpdHNfanNvbl9jb250ZW50OiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgY3JlYXRlZF9hdDogei5zdHJpbmcoKSxcbiAgdXBkYXRlZF9hdDogei5zdHJpbmcoKSxcbiAgc3RhcnJlZF9hdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzbmlwcGV0X3R5cGU6IHouZW51bShbXCJib2FyZFwiLCBcInBhY2thZ2VcIiwgXCJtb2RlbFwiLCBcImZvb3RwcmludFwiXSksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHZlcnNpb246IHouc3RyaW5nKCkuZGVmYXVsdChcIjAuMC4xXCIpLFxuICBzdGFyX2NvdW50OiB6Lm51bWJlcigpLmRlZmF1bHQoMCksXG4gIGlzX3ByaXZhdGU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19wdWJsaWM6IHouYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG4gIGlzX3VubGlzdGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgdGFnczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxufSlcbmV4cG9ydCB0eXBlIFNuaXBwZXQgPSB6LmluZmVyPHR5cGVvZiBzbmlwcGV0U2NoZW1hPlxuXG5leHBvcnQgY29uc3Qgc2Vzc2lvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgZXhwaXJlc19hdDogei5zdHJpbmcoKSxcbiAgaXNfY2xpX3Nlc3Npb246IHouYm9vbGVhbigpLFxufSlcbmV4cG9ydCB0eXBlIFNlc3Npb24gPSB6LmluZmVyPHR5cGVvZiBzZXNzaW9uU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgbG9naW5QYWdlU2NoZW1hID0gei5vYmplY3Qoe1xuICBsb2dpbl9wYWdlX2lkOiB6LnN0cmluZygpLFxuICBsb2dpbl9wYWdlX2F1dGhfdG9rZW46IHouc3RyaW5nKCksXG4gIHdhc19sb2dpbl9zdWNjZXNzZnVsOiB6LmJvb2xlYW4oKSxcbiAgaGFzX2JlZW5fdXNlZF90b19jcmVhdGVfc2Vzc2lvbjogei5ib29sZWFuKCksXG4gIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCksXG4gIGV4cGlyZXNfYXQ6IHouc3RyaW5nKCksXG59KVxuZXhwb3J0IHR5cGUgTG9naW5QYWdlID0gei5pbmZlcjx0eXBlb2YgbG9naW5QYWdlU2NoZW1hPlxuXG5leHBvcnQgY29uc3Qgc2hpcHBpbmdJbmZvU2NoZW1hID0gei5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IHouc3RyaW5nKCksXG4gIGxhc3ROYW1lOiB6LnN0cmluZygpLFxuICBjb21wYW55TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBhZGRyZXNzOiB6LnN0cmluZygpLFxuICBhcGFydG1lbnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogei5zdHJpbmcoKSxcbiAgc3RhdGU6IHouc3RyaW5nKCksXG4gIHppcENvZGU6IHouc3RyaW5nKCksXG4gIGNvdW50cnk6IHouc3RyaW5nKCksXG4gIHBob25lOiB6LnN0cmluZygpLFxufSlcbmV4cG9ydCBjb25zdCBhY2NvdW50U2NoZW1hID0gei5vYmplY3Qoe1xuICBhY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICBnaXRodWJfdXNlcm5hbWU6IHouc3RyaW5nKCksXG4gIHRzY2lyY3VpdF9oYW5kbGU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgc2hpcHBpbmdJbmZvOiBzaGlwcGluZ0luZm9TY2hlbWEub3B0aW9uYWwoKSxcbiAgcGVyc29uYWxfb3JnX2lkOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGlzX3RzY2lyY3VpdF9zdGFmZjogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGVtYWlsOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG59KVxuZXhwb3J0IHR5cGUgQWNjb3VudCA9IHouaW5mZXI8dHlwZW9mIGFjY291bnRTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBwdWJsaWNBY2NvdW50U2NoZW1hID0gei5vYmplY3Qoe1xuICBhY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICBnaXRodWJfdXNlcm5hbWU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgdHNjaXJjdWl0X2hhbmRsZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBwZXJzb25hbF9vcmdfaWQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG59KVxuXG5leHBvcnQgdHlwZSBQdWJsaWNBY2NvdW50ID0gei5pbmZlcjx0eXBlb2YgcHVibGljQWNjb3VudFNjaGVtYT5cblxuZXhwb3J0IGNvbnN0IG9yZGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICBvcmRlcl9pZDogei5zdHJpbmcoKSxcbiAgYWNjb3VudF9pZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBpc19ydW5uaW5nOiB6LmJvb2xlYW4oKSxcbiAgaXNfc3RhcnRlZDogei5ib29sZWFuKCksXG4gIGlzX2ZpbmlzaGVkOiB6LmJvb2xlYW4oKSxcbiAgZXJyb3I6IGVycm9yU2NoZW1hLm51bGxhYmxlKCksXG4gIGhhc19lcnJvcjogei5ib29sZWFuKCksXG4gIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCksXG4gIHN0YXJ0ZWRfYXQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgY29tcGxldGVkX2F0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGNpcmN1aXRfanNvbjogei5hbnkoKSxcbn0pXG5leHBvcnQgdHlwZSBPcmRlciA9IHouaW5mZXI8dHlwZW9mIG9yZGVyU2NoZW1hPlxuXG5leHBvcnQgY29uc3Qgb3JkZXJGaWxlU2NoZW1hID0gei5vYmplY3Qoe1xuICBvcmRlcl9maWxlX2lkOiB6LnN0cmluZygpLFxuICBvcmRlcl9pZDogei5zdHJpbmcoKSxcbiAgaXNfZ2VyYmVyc196aXA6IHouYm9vbGVhbigpLFxuICBjb250ZW50X3R5cGU6IHouc3RyaW5nKCksXG4gIGZvcl9wcm92aWRlcjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICB1cGxvYWRlZF9hdDogei5zdHJpbmcoKSxcbiAgY29udGVudF90ZXh0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGNvbnRlbnRfYnl0ZXM6IHouaW5zdGFuY2VvZihVaW50OEFycmF5KS5udWxsYWJsZSgpLFxufSlcbmV4cG9ydCB0eXBlIE9yZGVyRmlsZSA9IHouaW5mZXI8dHlwZW9mIG9yZGVyRmlsZVNjaGVtYT5cblxuZXhwb3J0IGNvbnN0IGJ1Z1JlcG9ydFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgYnVnX3JlcG9ydF9pZDogei5zdHJpbmcoKS51dWlkKCksXG4gIHJlcG9ydGVyX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gIHRleHQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgaXNfYXV0b19kZWxldGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgZGVsZXRlX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCkubnVsbGFibGUoKSxcbiAgY3JlYXRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLFxuICBmaWxlX2NvdW50OiB6Lm51bWJlcigpLmludCgpLFxufSlcbmV4cG9ydCB0eXBlIEJ1Z1JlcG9ydCA9IHouaW5mZXI8dHlwZW9mIGJ1Z1JlcG9ydFNjaGVtYT5cblxuZXhwb3J0IGNvbnN0IGJ1Z1JlcG9ydEZpbGVTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGJ1Z19yZXBvcnRfZmlsZV9pZDogei5zdHJpbmcoKS51dWlkKCksXG4gIGJ1Z19yZXBvcnRfaWQ6IHouc3RyaW5nKCkudXVpZCgpLFxuICBmaWxlX3BhdGg6IHouc3RyaW5nKCksXG4gIGNvbnRlbnRfbWltZXR5cGU6IHouc3RyaW5nKCksXG4gIGlzX3RleHQ6IHouYm9vbGVhbigpLFxuICBjcmVhdGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCksXG4gIGNvbnRlbnRfdGV4dDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBjb250ZW50X2J5dGVzOiB6Lmluc3RhbmNlb2YoVWludDhBcnJheSkubnVsbGFibGUoKSxcbn0pXG5leHBvcnQgY29uc3QgYnVnUmVwb3J0RmlsZVJlc3BvbnNlU2NoZW1hID0gYnVnUmVwb3J0RmlsZVNjaGVtYS5vbWl0KHtcbiAgY29udGVudF90ZXh0OiB0cnVlLFxuICBjb250ZW50X2J5dGVzOiB0cnVlLFxufSlcbmV4cG9ydCB0eXBlIEJ1Z1JlcG9ydEZpbGUgPSB6LmluZmVyPHR5cGVvZiBidWdSZXBvcnRGaWxlU2NoZW1hPlxuXG5jb25zdCBzaGlwcGluZ09wdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY2Fycmllcjogei5zdHJpbmcoKSxcbiAgc2VydmljZTogei5zdHJpbmcoKSxcbiAgY29zdDogei5udW1iZXIoKSxcbn0pXG5leHBvcnQgdHlwZSBTaGlwcGluZ09wdGlvbiA9IHouaW5mZXI8dHlwZW9mIHNoaXBwaW5nT3B0aW9uU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgcXVvdGVkQ29tcG9uZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICBtYW51ZmFjdHVyZXJfcGFydF9udW1iZXI6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgc3VwcGxpZXJfcGFydF9udW1iZXI6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgcXVhbnRpdHk6IHoubnVtYmVyKCkuZGVmYXVsdCgwKSxcbiAgdW5pdF9wcmljZTogei5udW1iZXIoKS5kZWZhdWx0KDApLFxuICB0b3RhbF9wcmljZTogei5udW1iZXIoKS5kZWZhdWx0KDApLFxuICBhdmFpbGFibGU6IHouYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG59KVxuZXhwb3J0IHR5cGUgUXVvdGVkQ29tcG9uZW50ID0gei5pbmZlcjx0eXBlb2YgcXVvdGVkQ29tcG9uZW50U2NoZW1hPlxuXG5leHBvcnQgY29uc3Qgb3JkZXJRdW90ZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgb3JkZXJfcXVvdGVfaWQ6IHouc3RyaW5nKCksXG4gIGFjY291bnRfaWQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgcGFja2FnZV9yZWxlYXNlX2lkOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGlzX2NvbXBsZXRlZDogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGlzX3Byb2Nlc3Npbmc6IHouYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG4gIHZlbmRvcl9uYW1lOiB6LnN0cmluZygpLFxuICBlcnJvcjogZXJyb3JTY2hlbWEubnVsbGFibGUoKSxcbiAgaGFzX2Vycm9yOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgY3JlYXRlZF9hdDogei5zdHJpbmcoKSxcbiAgdXBkYXRlZF9hdDogei5zdHJpbmcoKSxcbiAgY29tcGxldGVkX2F0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHF1b3RlZF9jb21wb25lbnRzOiB6LmFycmF5KHF1b3RlZENvbXBvbmVudFNjaGVtYSkubnVsbGFibGUoKSxcbiAgYmFyZV9wY2JfY29zdDogei5udW1iZXIoKS5kZWZhdWx0KDApLFxuICBzaGlwcGluZ19vcHRpb25zOiB6LmFycmF5KHNoaXBwaW5nT3B0aW9uU2NoZW1hKSxcbiAgdG90YWxfY29zdF93aXRob3V0X3NoaXBwaW5nOiB6Lm51bWJlcigpLmRlZmF1bHQoMCksXG59KVxuZXhwb3J0IHR5cGUgT3JkZXJRdW90ZSA9IHouaW5mZXI8dHlwZW9mIG9yZGVyUXVvdGVTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBhaVJldmlld1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgYWlfcmV2aWV3X2lkOiB6LnN0cmluZygpLnV1aWQoKSxcbiAgcGFja2FnZV9yZWxlYXNlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGFpX3Jldmlld190ZXh0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHN0YXJ0X3Byb2Nlc3NpbmdfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLFxuICBmaW5pc2hlZF9wcm9jZXNzaW5nX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCkubnVsbGFibGUoKSxcbiAgcHJvY2Vzc2luZ19lcnJvcjogei5hbnkoKS5udWxsYWJsZSgpLFxuICBjcmVhdGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCksXG4gIGRpc3BsYXlfc3RhdHVzOiB6LmVudW0oW1wicGVuZGluZ1wiLCBcImNvbXBsZXRlZFwiLCBcImZhaWxlZFwiXSksXG59KVxuZXhwb3J0IHR5cGUgQWlSZXZpZXcgPSB6LmluZmVyPHR5cGVvZiBhaVJldmlld1NjaGVtYT5cblxuZXhwb3J0IGNvbnN0IGRhdGFzaGVldFBpbkluZm9ybWF0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICBwaW5fbnVtYmVyOiB6LnN0cmluZygpLFxuICBuYW1lOiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKSxcbiAgY2FwYWJpbGl0aWVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxufSlcblxuZXhwb3J0IGNvbnN0IGRhdGFzaGVldFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZGF0YXNoZWV0X2lkOiB6LnN0cmluZygpLFxuICBjaGlwX25hbWU6IHouc3RyaW5nKCksXG4gIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCksXG4gIHBpbl9pbmZvcm1hdGlvbjogZGF0YXNoZWV0UGluSW5mb3JtYXRpb25TY2hlbWEuYXJyYXkoKS5udWxsYWJsZSgpLFxuICBkYXRhc2hlZXRfcGRmX3VybHM6IHouYXJyYXkoei5zdHJpbmcoKSkubnVsbGFibGUoKSxcbiAgYWlfZGVzY3JpcHRpb246IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbn0pXG5leHBvcnQgdHlwZSBEYXRhc2hlZXQgPSB6LmluZmVyPHR5cGVvZiBkYXRhc2hlZXRTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBnaXRodWJJbnN0YWxsYXRpb25TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGdpdGh1Yl9pbnN0YWxsYXRpb25faWQ6IHouc3RyaW5nKCksXG4gIGFjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gIGluc3RhbGxhdGlvbl9pZDogei5zdHJpbmcoKSwgLy8gR2l0SHViIEFwcCBpbnN0YWxsYXRpb24gSURcbiAgZ2l0aHViX3VzZXJuYW1lOiB6LnN0cmluZygpLFxuICBjcmVhdGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCksXG4gIHVwZGF0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKSxcbiAgaXNfYWN0aXZlOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICBhY2Nlc3NfdG9rZW46IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLCAvLyBGb3Igc3RvcmluZyBHaXRIdWIgYWNjZXNzIHRva2VuXG4gIGFjY2Vzc190b2tlbl9leHBpcmVzX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxufSlcbmV4cG9ydCB0eXBlIEdpdGh1Ykluc3RhbGxhdGlvbiA9IHouaW5mZXI8dHlwZW9mIGdpdGh1Ykluc3RhbGxhdGlvblNjaGVtYT5cblxuLy8gVE9ETzogUmVtb3ZlIHRoaXMgc2NoZW1hIGFmdGVyIG1pZ3JhdGlvbiB0byBhY2NvdW50UGFja2FnZXMgaXMgY29tcGxldGVcbmV4cG9ydCBjb25zdCBhY2NvdW50U25pcHBldFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgc25pcHBldF9pZDogei5zdHJpbmcoKSxcbiAgaGFzX3N0YXJyZWQ6IHouYm9vbGVhbigpLFxuICBjcmVhdGVkX2F0OiB6LnN0cmluZygpLFxuICB1cGRhdGVkX2F0OiB6LnN0cmluZygpLFxufSlcbmV4cG9ydCB0eXBlIEFjY291bnRTbmlwcGV0ID0gei5pbmZlcjx0eXBlb2YgYWNjb3VudFNuaXBwZXRTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBhY2NvdW50UGFja2FnZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgYWNjb3VudF9wYWNrYWdlX2lkOiB6LnN0cmluZygpLFxuICBhY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICBwYWNrYWdlX2lkOiB6LnN0cmluZygpLFxuICBpc19zdGFycmVkOiB6LmJvb2xlYW4oKSxcbiAgY3JlYXRlZF9hdDogei5zdHJpbmcoKSxcbiAgdXBkYXRlZF9hdDogei5zdHJpbmcoKSxcbn0pXG5leHBvcnQgdHlwZSBBY2NvdW50UGFja2FnZSA9IHouaW5mZXI8dHlwZW9mIGFjY291bnRQYWNrYWdlU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgcGFja2FnZVJlbGVhc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHBhY2thZ2VfcmVsZWFzZV9pZDogei5zdHJpbmcoKSxcbiAgcGFja2FnZV9pZDogei5zdHJpbmcoKSxcbiAgdmVyc2lvbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBpc19sb2NrZWQ6IHouYm9vbGVhbigpLFxuICBpc19sYXRlc3Q6IHouYm9vbGVhbigpLFxuICBjcmVhdGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCksXG4gIGNvbW1pdF9zaGE6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBsaWNlbnNlOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgY2lyY3VpdF9qc29uX2J1aWxkX2Vycm9yOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgY2lyY3VpdF9qc29uX2J1aWxkX2Vycm9yX2xhc3RfdXBkYXRlZF9hdDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5kYXRldGltZSgpXG4gICAgLm51bGxhYmxlKClcbiAgICAub3B0aW9uYWwoKSxcbiAgaGFzX3RyYW5zcGlsZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICB0cmFuc3BpbGF0aW9uX2Vycm9yOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgZnNfc2hhOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgLy8gQnVpbGQgU3RhdHVzIGFuZCBEaXNwbGF5XG4gIGRpc3BsYXlfc3RhdHVzOiB6XG4gICAgLmVudW0oW1wicGVuZGluZ1wiLCBcImJ1aWxkaW5nXCIsIFwiY29tcGxldGVcIiwgXCJlcnJvclwiXSlcbiAgICAuZGVmYXVsdChcInBlbmRpbmdcIiksXG4gIHRvdGFsX2J1aWxkX2R1cmF0aW9uX21zOiB6Lm51bWJlcigpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcblxuICAvLyBUcmFuc3BpbGF0aW9uIFByb2Nlc3NcbiAgdHJhbnNwaWxhdGlvbl9kaXNwbGF5X3N0YXR1czogelxuICAgIC5lbnVtKFtcInBlbmRpbmdcIiwgXCJidWlsZGluZ1wiLCBcImNvbXBsZXRlXCIsIFwiZXJyb3JcIl0pXG4gICAgLmRlZmF1bHQoXCJwZW5kaW5nXCIpLFxuICB0cmFuc3BpbGF0aW9uX2luX3Byb2dyZXNzOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgdHJhbnNwaWxhdGlvbl9zdGFydGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICB0cmFuc3BpbGF0aW9uX2NvbXBsZXRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgdHJhbnNwaWxhdGlvbl9sb2dzOiB6LmFycmF5KHouYW55KCkpLmRlZmF1bHQoW10pLFxuICB0cmFuc3BpbGF0aW9uX2lzX3N0YWxlOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcblxuICAvLyBVc2VyIENvZGUgSm9iIFByb2Nlc3NcbiAgZXh0X3VzZXJfY29kZV9qb2JfaWQ6IHouc3RyaW5nKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICB1c2VyX2NvZGVfc3RhcnRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgdXNlcl9jb2RlX2NvbXBsZXRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgdXNlcl9jb2RlX2J1aWxkX2xvZ3M6IHouYXJyYXkoei5hbnkoKSkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICB1c2VyX2NvZGVfZXJyb3I6IGVycm9yU2NoZW1hLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgdXNlcl9jb2RlX2xvZ19zdHJlYW1fdXJsOiB6LnN0cmluZygpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcblxuICAvLyBDaXJjdWl0IEpTT04gQnVpbGQgUHJvY2Vzc1xuICBjaXJjdWl0X2pzb25fYnVpbGRfZGlzcGxheV9zdGF0dXM6IHpcbiAgICAuZW51bShbXCJwZW5kaW5nXCIsIFwiYnVpbGRpbmdcIiwgXCJjb21wbGV0ZVwiLCBcImVycm9yXCJdKVxuICAgIC5kZWZhdWx0KFwicGVuZGluZ1wiKSxcbiAgY2lyY3VpdF9qc29uX2J1aWxkX2luX3Byb2dyZXNzOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgY2lyY3VpdF9qc29uX2J1aWxkX3N0YXJ0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGNpcmN1aXRfanNvbl9idWlsZF9jb21wbGV0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGNpcmN1aXRfanNvbl9idWlsZF9sb2dzOiB6LmFycmF5KHouYW55KCkpLmRlZmF1bHQoW10pLFxuICBjaXJjdWl0X2pzb25fYnVpbGRfaXNfc3RhbGU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuXG4gIC8vIEltYWdlIEdlbmVyYXRpb24gUHJvY2Vzc1xuICBpbWFnZV9nZW5lcmF0aW9uX2Rpc3BsYXlfc3RhdHVzOiB6XG4gICAgLmVudW0oW1wicGVuZGluZ1wiLCBcImJ1aWxkaW5nXCIsIFwiY29tcGxldGVcIiwgXCJlcnJvclwiXSlcbiAgICAuZGVmYXVsdChcInBlbmRpbmdcIiksXG4gIGltYWdlX2dlbmVyYXRpb25faW5fcHJvZ3Jlc3M6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpbWFnZV9nZW5lcmF0aW9uX3N0YXJ0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGltYWdlX2dlbmVyYXRpb25fY29tcGxldGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBpbWFnZV9nZW5lcmF0aW9uX2xvZ3M6IHouYXJyYXkoei5hbnkoKSkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICBpbWFnZV9nZW5lcmF0aW9uX2lzX3N0YWxlOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgaW1hZ2VfZ2VuZXJhdGlvbl9lcnJvcjogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGltYWdlX2dlbmVyYXRpb25fZXJyb3JfbGFzdF91cGRhdGVkX2F0OiB6XG4gICAgLnN0cmluZygpXG4gICAgLmRhdGV0aW1lKClcbiAgICAubnVsbGFibGUoKVxuICAgIC5vcHRpb25hbCgpLFxuXG4gIC8vIEFJIFJldmlld1xuICBhaV9yZXZpZXdfdGV4dDogei5zdHJpbmcoKS5udWxsYWJsZSgpLmRlZmF1bHQobnVsbCkub3B0aW9uYWwoKSxcbiAgYWlfcmV2aWV3X3N0YXJ0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGFpX3Jldmlld19jb21wbGV0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGFpX3Jldmlld19lcnJvcjogei5hbnkoKS5vcHRpb25hbCgpLm51bGxhYmxlKCksXG4gIGFpX3Jldmlld19sb2dzOiB6LmFycmF5KHouYW55KCkpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgYWlfcmV2aWV3X3JlcXVlc3RlZDogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG5cbiAgLy8gUHJldmlld1xuICBpc19wcl9wcmV2aWV3OiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgZ2l0aHViX3ByX251bWJlcjogei5udW1iZXIoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG5cbiAgLy8gTGF0ZXN0IEJ1aWxkIFJlZmVyZW5jZVxuICBsYXRlc3RfcGFja2FnZV9idWlsZF9pZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGJyYW5jaF9uYW1lOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgY29tbWl0X21lc3NhZ2U6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBjb21taXRfYXV0aG9yOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcblxuICAvLyBQcmV2aWV3IGltYWdlcyB1cmxcbiAgcGNiX3ByZXZpZXdfaW1hZ2VfdXJsOiB6LnN0cmluZygpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgc2NoX3ByZXZpZXdfaW1hZ2VfdXJsOiB6LnN0cmluZygpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgY2FkX3ByZXZpZXdfaW1hZ2VfdXJsOiB6LnN0cmluZygpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbn0pXG5leHBvcnQgdHlwZSBQYWNrYWdlUmVsZWFzZSA9IHouaW5mZXI8dHlwZW9mIHBhY2thZ2VSZWxlYXNlU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgcGFja2FnZUZpbGVTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHBhY2thZ2VfZmlsZV9pZDogei5zdHJpbmcoKSxcbiAgcGFja2FnZV9yZWxlYXNlX2lkOiB6LnN0cmluZygpLFxuICBmaWxlX3BhdGg6IHouc3RyaW5nKCksXG4gIGNvbnRlbnRfdGV4dDogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKSxcbiAgY29udGVudF9taW1ldHlwZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGlzX3JlbGVhc2VfdGFyYmFsbDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgbnBtX3BhY2tfb3V0cHV0OiB6LmFueSgpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbn0pXG5leHBvcnQgdHlwZSBQYWNrYWdlRmlsZSA9IHouaW5mZXI8dHlwZW9mIHBhY2thZ2VGaWxlU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgcGFja2FnZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgcGFja2FnZV9pZDogei5zdHJpbmcoKSxcbiAgY3JlYXRvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICBvd25lcl9vcmdfaWQ6IHouc3RyaW5nKCksXG4gIG93bmVyX2dpdGh1Yl91c2VybmFtZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBvcmdfb3duZXJfdHNjaXJjdWl0X2hhbmRsZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGdpdGh1Yl9yZXBvX2Z1bGxfbmFtZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBuYW1lOiB6LnN0cmluZygpLFxuICB1bnNjb3BlZF9uYW1lOiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBjcmVhdGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCksXG4gIHVwZGF0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKSxcbiAgaXNfc25pcHBldDogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGlzX2JvYXJkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgaXNfcGFja2FnZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGlzX21vZGVsOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgaXNfZm9vdHByaW50OiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgaXNfcHJpdmF0ZTogei5ib29sZWFuKCkubnVsbGFibGUoKS5kZWZhdWx0KGZhbHNlKSxcbiAgaXNfcHVibGljOiB6LmJvb2xlYW4oKS5udWxsYWJsZSgpLmRlZmF1bHQodHJ1ZSksXG4gIGlzX3VubGlzdGVkOiB6LmJvb2xlYW4oKS5udWxsYWJsZSgpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19zb3VyY2VfZnJvbV9naXRodWI6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBzbmlwcGV0X3R5cGU6IHouZW51bShbXCJib2FyZFwiLCBcInBhY2thZ2VcIiwgXCJtb2RlbFwiLCBcImZvb3RwcmludFwiXSkub3B0aW9uYWwoKSxcbiAgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBsYXRlc3RfdmVyc2lvbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBsaWNlbnNlOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHdlYnNpdGU6IHouc3RyaW5nKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICBzdGFyX2NvdW50OiB6Lm51bWJlcigpLmRlZmF1bHQoMCksXG4gIGFpX2Rlc2NyaXB0aW9uOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGxhdGVzdF9saWNlbnNlOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgYWlfdXNhZ2VfaW5zdHJ1Y3Rpb25zOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfZnNfc2hhOiB6LnN0cmluZygpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgZGVmYXVsdF92aWV3OiB6XG4gICAgLmVudW0oW1wiZmlsZXNcIiwgXCIzZFwiLCBcInBjYlwiLCBcInNjaGVtYXRpY1wiXSlcbiAgICAuZGVmYXVsdChcImZpbGVzXCIpXG4gICAgLm9wdGlvbmFsKCksXG4gIGFsbG93X3ByX3ByZXZpZXdzOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKS5vcHRpb25hbCgpLFxuICBpc19zdGFycmVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKS5vcHRpb25hbCgpLFxuICBsYXRlc3RfcGNiX3ByZXZpZXdfaW1hZ2VfdXJsOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgbGF0ZXN0X3NjaF9wcmV2aWV3X2ltYWdlX3VybDogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGxhdGVzdF9jYWRfcHJldmlld19pbWFnZV91cmw6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxufSlcbmV4cG9ydCB0eXBlIFBhY2thZ2UgPSB6LmluZmVyPHR5cGVvZiBwYWNrYWdlU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgamxjcGNiT3JkZXJTdGF0ZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgamxjcGNiX29yZGVyX3N0YXRlX2lkOiB6LnN0cmluZygpLFxuICBvcmRlcl9pZDogei5zdHJpbmcoKSxcbiAgYXJlX2dlcmJlcnNfdXBsb2FkZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19nZXJiZXJfYW5hbHl6ZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBhcmVfaW5pdGlhbF9jb3N0c19jYWxjdWxhdGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgaXNfcGNiX2FkZGVkX3RvX2NhcnQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19ib21fdXBsb2FkZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19wbnBfdXBsb2FkZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19ib21fcG5wX2FuYWx5emVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgaXNfYm9tX3BhcnNpbmdfY29tcGxldGU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBhcmVfY29tcG9uZW50c19hdmFpbGFibGU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19wYXRjaF9tYXBfZ2VuZXJhdGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgaXNfanNvbl9tZXJnZV9maWxlX2NyZWF0ZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19kZm1fcmVzdWx0X2dlbmVyYXRlZDogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGFyZV9maWxlc19kb3dubG9hZGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgYXJlX3Byb2R1Y3RfY2F0ZWdvcmllc19mZXRjaGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgYXJlX2ZpbmFsX2Nvc3RzX2NhbGN1bGF0ZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19qc29uX21lcmdlX2ZpbGVfdXBkYXRlZDogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGlzX2FkZGVkX3RvX2NhcnQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICB1cGxvYWRlZF9nZXJiZXJfbWV0YWRhdGE6IHouYW55KCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICBnZXJiZXJfYW5hbHlzaXM6IHouYW55KCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICBjcmVhdGVkX2F0OiB6LnN0cmluZygpLFxuICBhcmVfZ2VyYmVyc19nZW5lcmF0ZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBjdXJyZW50X3N0ZXA6IHouc3RyaW5nKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxufSlcbmV4cG9ydCB0eXBlIEpsY3BjYk9yZGVyU3RhdGUgPSB6LmluZmVyPHR5cGVvZiBqbGNwY2JPcmRlclN0YXRlU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgamxjcGNiT3JkZXJTdGVwUnVuU2NoZW1hID0gei5vYmplY3Qoe1xuICBqbGNwY2Jfb3JkZXJfc3RlcF9ydW5faWQ6IHouc3RyaW5nKCksXG4gIGlzX3J1bm5pbmc6IHouYm9vbGVhbigpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgc3RlcF9mdW5jdGlvbl9uYW1lOiB6LnN0cmluZygpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgamxjcGNiX29yZGVyX3N0YXRlX2lkOiB6LnN0cmluZygpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgZXJyb3JfbWVzc2FnZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLmRlZmF1bHQobnVsbCksXG4gIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCksXG59KVxuZXhwb3J0IHR5cGUgSmxjcGNiT3JkZXJTdGVwUnVuID0gei5pbmZlcjx0eXBlb2YgamxjcGNiT3JkZXJTdGVwUnVuU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgcGFja2FnZUJ1aWxkU2NoZW1hID0gei5vYmplY3Qoe1xuICBwYWNrYWdlX2J1aWxkX2lkOiB6LnN0cmluZygpLnV1aWQoKSxcbiAgcGFja2FnZV9yZWxlYXNlX2lkOiB6LnN0cmluZygpLFxuICBjcmVhdGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCksXG4gIHRyYW5zcGlsYXRpb25faW5fcHJvZ3Jlc3M6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICB0cmFuc3BpbGF0aW9uX3N0YXJ0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIHRyYW5zcGlsYXRpb25fY29tcGxldGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICB0cmFuc3BpbGF0aW9uX2xvZ3M6IHouYXJyYXkobG9nKS5udWxsYWJsZSgpLFxuICB0cmFuc3BpbGF0aW9uX2Vycm9yOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgY2lyY3VpdF9qc29uX2J1aWxkX2luX3Byb2dyZXNzOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgY2lyY3VpdF9qc29uX2J1aWxkX3N0YXJ0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGNpcmN1aXRfanNvbl9idWlsZF9jb21wbGV0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGNpcmN1aXRfanNvbl9idWlsZF9sb2dzOiB6LmFycmF5KGxvZykubnVsbGFibGUoKSxcbiAgY2lyY3VpdF9qc29uX2J1aWxkX2Vycm9yOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgaW1hZ2VfZ2VuZXJhdGlvbl9pbl9wcm9ncmVzczogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGltYWdlX2dlbmVyYXRpb25fc3RhcnRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgaW1hZ2VfZ2VuZXJhdGlvbl9jb21wbGV0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGltYWdlX2dlbmVyYXRpb25fbG9nczogei5hcnJheShsb2cpLm51bGxhYmxlKCksXG4gIGltYWdlX2dlbmVyYXRpb25fZXJyb3I6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBidWlsZF9pbl9wcm9ncmVzczogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGJ1aWxkX3N0YXJ0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGJ1aWxkX2NvbXBsZXRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgYnVpbGRfZXJyb3I6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBidWlsZF9lcnJvcl9sYXN0X3VwZGF0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKSxcbiAgcHJldmlld191cmw6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBidWlsZF9sb2dzOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgdXNlcl9jb2RlX3N0YXJ0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIHVzZXJfY29kZV9jb21wbGV0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIHVzZXJfY29kZV9lcnJvcjogei5hbnkoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIHVzZXJfY29kZV9idWlsZF9sb2dzOiB6LmFycmF5KGxvZykubnVsbGFibGUoKSxcbiAgdXNlcl9jb2RlX2xvZ19zdHJlYW1fdXJsOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbn0pXG5leHBvcnQgdHlwZSBQYWNrYWdlQnVpbGQgPSB6LmluZmVyPHR5cGVvZiBwYWNrYWdlQnVpbGRTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBvcmdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG9yZ19pZDogei5zdHJpbmcoKSxcbiAgb3duZXJfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgaXNfcGVyc29uYWxfb3JnOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgY3JlYXRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLFxuICBvcmdfZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGF2YXRhcl91cmw6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBnaXRodWJfaGFuZGxlOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHRzY2lyY3VpdF9oYW5kbGU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbn0pXG5leHBvcnQgdHlwZSBPcmdhbml6YXRpb24gPSB6LmluZmVyPHR5cGVvZiBvcmdTY2hlbWE+XG5cbmV4cG9ydCBjb25zdCBvcmdBY2NvdW50U2NoZW1hID0gei5vYmplY3Qoe1xuICBvcmdfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgb3JnX2lkOiB6LnN0cmluZygpLFxuICBhY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICBpc19vd25lcjogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKSxcbiAgY2FuX21hbmFnZV9vcmc6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxufSlcbmV4cG9ydCB0eXBlIE9yZ0FjY291bnQgPSB6LmluZmVyPHR5cGVvZiBvcmdBY2NvdW50U2NoZW1hPlxuXG5leHBvcnQgY29uc3Qgb3JnSW52aXRhdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgb3JnX2ludml0YXRpb25faWQ6IHouc3RyaW5nKCksXG4gIG9yZ19pZDogei5zdHJpbmcoKSxcbiAgaW52aXRlZV9lbWFpbDogei5zdHJpbmcoKS5lbWFpbCgpLm51bGxhYmxlKCksXG4gIGludml0ZXJfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgaW52aXRhdGlvbl90b2tlbjogei5zdHJpbmcoKSxcbiAgaXNfbGlua19pbnZpdGU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19wZW5kaW5nOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICBpc19hY2NlcHRlZDogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGlzX2V4cGlyZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpc19yZXZva2VkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgY3JlYXRlZF9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLFxuICBleHBpcmVzX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCksXG4gIGFjY2VwdGVkX2F0OiB6LnN0cmluZygpLmRhdGV0aW1lKCkubnVsbGFibGUoKSxcbiAgYWNjZXB0ZWRfYnlfYWNjb3VudF9pZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxufSlcbmV4cG9ydCB0eXBlIE9yZ0ludml0YXRpb24gPSB6LmluZmVyPHR5cGVvZiBvcmdJbnZpdGF0aW9uU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgdXNlclBlcm1pc3Npb25zU2NoZW1hID0gei5vYmplY3Qoe1xuICBjYW5fbWFuYWdlX29yZzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgY2FuX21hbmFnZV9wYWNrYWdlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSlcbmV4cG9ydCB0eXBlIFVzZXJQZXJtaXNzaW9ucyA9IHouaW5mZXI8dHlwZW9mIHVzZXJQZXJtaXNzaW9uc1NjaGVtYT5cblxuZXhwb3J0IGNvbnN0IHB1YmxpY09yZ1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgb3JnX2lkOiB6LnN0cmluZygpLCAvLy51dWlkKCksXG4gIG93bmVyX2FjY291bnRfaWQ6IHouc3RyaW5nKCksIC8vLnV1aWQoKSxcbiAgbmFtZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBtZW1iZXJfY291bnQ6IHoubnVtYmVyKCksXG4gIGlzX3BlcnNvbmFsX29yZzogei5ib29sZWFuKCksXG4gIGRpc3BsYXlfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwYWNrYWdlX2NvdW50OiB6Lm51bWJlcigpLFxuICBhdmF0YXJfdXJsOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgZ2l0aHViX2hhbmRsZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICB0c2NpcmN1aXRfaGFuZGxlOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCksXG4gIHVzZXJfcGVybWlzc2lvbnM6IHVzZXJQZXJtaXNzaW9uc1NjaGVtYS5vcHRpb25hbCgpLFxufSlcbmV4cG9ydCB0eXBlIFB1YmxpY09yZ1NjaGVtYSA9IHouaW5mZXI8dHlwZW9mIHB1YmxpY09yZ1NjaGVtYT5cblxuZXhwb3J0IGNvbnN0IGRhdGFiYXNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZENvdW50ZXI6IHoubnVtYmVyKCkuZGVmYXVsdCgwKSxcbiAgc25pcHBldHM6IHouYXJyYXkoc25pcHBldFNjaGVtYSkuZGVmYXVsdChbXSksXG4gIHBhY2thZ2VSZWxlYXNlczogei5hcnJheShwYWNrYWdlUmVsZWFzZVNjaGVtYSkuZGVmYXVsdChbXSksXG4gIHBhY2thZ2VGaWxlczogei5hcnJheShwYWNrYWdlRmlsZVNjaGVtYSkuZGVmYXVsdChbXSksXG4gIHNlc3Npb25zOiB6LmFycmF5KHNlc3Npb25TY2hlbWEpLmRlZmF1bHQoW10pLFxuICBsb2dpblBhZ2VzOiB6LmFycmF5KGxvZ2luUGFnZVNjaGVtYSkuZGVmYXVsdChbXSksXG4gIGFjY291bnRzOiB6LmFycmF5KGFjY291bnRTY2hlbWEpLmRlZmF1bHQoW10pLFxuICBwYWNrYWdlczogei5hcnJheShwYWNrYWdlU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgb3JkZXJzOiB6LmFycmF5KG9yZGVyU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgb3JnYW5pemF0aW9uczogei5hcnJheShvcmdTY2hlbWEpLmRlZmF1bHQoW10pLFxuICBvcmdBY2NvdW50czogei5hcnJheShvcmdBY2NvdW50U2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgb3JnSW52aXRhdGlvbnM6IHouYXJyYXkob3JnSW52aXRhdGlvblNjaGVtYSkuZGVmYXVsdChbXSksXG4gIG9yZGVyRmlsZXM6IHouYXJyYXkob3JkZXJGaWxlU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgYWNjb3VudFNuaXBwZXRzOiB6LmFycmF5KGFjY291bnRTbmlwcGV0U2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgYWNjb3VudFBhY2thZ2VzOiB6LmFycmF5KGFjY291bnRQYWNrYWdlU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgamxjcGNiT3JkZXJTdGF0ZTogei5hcnJheShqbGNwY2JPcmRlclN0YXRlU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgamxjcGNiT3JkZXJTdGVwUnVuczogei5hcnJheShqbGNwY2JPcmRlclN0ZXBSdW5TY2hlbWEpLmRlZmF1bHQoW10pLFxuICBvcmRlclF1b3Rlczogei5hcnJheShvcmRlclF1b3RlU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgYWlSZXZpZXdzOiB6LmFycmF5KGFpUmV2aWV3U2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgZGF0YXNoZWV0czogei5hcnJheShkYXRhc2hlZXRTY2hlbWEpLmRlZmF1bHQoW10pLFxuICBnaXRodWJJbnN0YWxsYXRpb25zOiB6LmFycmF5KGdpdGh1Ykluc3RhbGxhdGlvblNjaGVtYSkuZGVmYXVsdChbXSksXG4gIHBhY2thZ2VCdWlsZHM6IHouYXJyYXkocGFja2FnZUJ1aWxkU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgYnVnUmVwb3J0czogei5hcnJheShidWdSZXBvcnRTY2hlbWEpLmRlZmF1bHQoW10pLFxuICBidWdSZXBvcnRGaWxlczogei5hcnJheShidWdSZXBvcnRGaWxlU2NoZW1hKS5kZWZhdWx0KFtdKSxcbn0pXG5leHBvcnQgdHlwZSBEYXRhYmFzZVNjaGVtYSA9IHouaW5mZXI8dHlwZW9mIGRhdGFiYXNlU2NoZW1hPlxuXG5leHBvcnQgY29uc3QgdHNjaXJjdWl0SGFuZGxlU2NoZW1hID0gelxuICAuc3RyaW5nKClcbiAgLm1pbig1KVxuICAubWF4KDQwKVxuICAucmVnZXgoXG4gICAgL15bMC05QS1aYS16XVswLTlBLVphLXpfLV0qWzAtOUEtWmEtel0kLyxcbiAgICBcInRzY2lyY3VpdF9oYW5kbGUgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGggYSBsZXR0ZXIgb3IgbnVtYmVyLCBhbmQgbWF5IG9ubHkgY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcywgYW5kIGh5cGhlbnNcIixcbiAgKVxuIiwgImltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuaW1wb3J0IGF4aW9zIGZyb20gXCJyZWRheGlvc1wiXG5pbXBvcnQgdHlwZSB7IERiQ2xpZW50IH0gZnJvbSBcIi4vZGItY2xpZW50XCJcbmltcG9ydCB0eXBlIHsgUGFja2FnZSwgUGFja2FnZUZpbGUsIFBhY2thZ2VSZWxlYXNlIH0gZnJvbSBcIi4vc2NoZW1hXCJcblxuY29uc3QgZXh0cmFjdFRzY2lEZXBlbmRlbmNpZXMgPSAoXG4gIGNvZGU6IHN0cmluZyxcbik6IEFycmF5PHsgb3duZXI6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+ID0+IHtcbiAgY29uc3QgcmVnZXggPSAvQHRzY2lcXC8oW14uXSspXFwuKFteXCInXFxzXSspL2dcbiAgY29uc3QgbWF0Y2hlcyA9IEFycmF5LmZyb20oY29kZS5tYXRjaEFsbChyZWdleCkpXG4gIHJldHVybiBtYXRjaGVzLm1hcCgobWF0Y2gpID0+ICh7XG4gICAgb3duZXI6IG1hdGNoWzFdLFxuICAgIG5hbWU6IG1hdGNoWzJdLFxuICB9KSlcbn1cblxuY29uc3QgcmVnaXN0cnlBcGkgPSBheGlvcy5jcmVhdGUoe1xuICBiYXNlVVJMOiBcImh0dHBzOi8vYXBpLnRzY2lyY3VpdC5jb21cIixcbiAgaGVhZGVyczoge1xuICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gIH0sXG59KVxuXG5jb25zdCBmZXRjaFBhY2thZ2VGcm9tUmVnaXN0cnkgPSBhc3luYyAob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGZ1bGxOYW1lID0gYCR7b3duZXJ9LyR7bmFtZX1gXG4gIGNvbnNvbGUubG9nKGBbYXV0b2xvYWQtZGV2LXBrZ3NdIFx1RDgzRFx1RENFNiBGZXRjaGluZyBwYWNrYWdlICR7ZnVsbE5hbWV9Li4uYClcblxuICBsZXQgcGFja2FnZURhdGFcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlZ2lzdHJ5QXBpLnBvc3QoXCIvcGFja2FnZXMvZ2V0XCIsIHtcbiAgICAgIG5hbWU6IGZ1bGxOYW1lLFxuICAgIH0pXG4gICAgcGFja2FnZURhdGEgPSByZXNwb25zZS5kYXRhXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggcGFja2FnZSBkYXRhIGZvciAke2Z1bGxOYW1lfTpgLCBlKVxuICAgIHRocm93IGVcbiAgfVxuXG4gIGxldCByZWxlYXNlRGF0YVxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVnaXN0cnlBcGkucG9zdChcIi9wYWNrYWdlX3JlbGVhc2VzL2dldFwiLCB7XG4gICAgICBwYWNrYWdlX2lkOiBwYWNrYWdlRGF0YS5wYWNrYWdlLnBhY2thZ2VfaWQsXG4gICAgICBpc19sYXRlc3Q6IHRydWUsXG4gICAgfSlcbiAgICByZWxlYXNlRGF0YSA9IHJlc3BvbnNlLmRhdGFcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgW2F1dG9sb2FkLWRldi1wa2dzXSBcdTI3NEMgRmFpbGVkIHRvIGZldGNoIHJlbGVhc2UgZGF0YSBmb3IgJHtmdWxsTmFtZX06YCxcbiAgICAgIGUsXG4gICAgKVxuICAgIHRocm93IGVcbiAgfVxuXG4gIGxldCBmaWxlc0RhdGFcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlZ2lzdHJ5QXBpLnBvc3QoXG4gICAgICBgcGFja2FnZV9maWxlcy9saXN0P3BhY2thZ2VfcmVsZWFzZV9pZD0ke3JlbGVhc2VEYXRhLnBhY2thZ2VfcmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWR9YCxcbiAgICAgIHt9LFxuICAgIClcbiAgICBmaWxlc0RhdGEgPSByZXNwb25zZS5kYXRhXG5cbiAgICAvLyBGZXRjaCBjb250ZW50X3RleHQgZm9yIGVhY2ggZmlsZSBpbmRpdmlkdWFsbHlcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXNEYXRhLnBhY2thZ2VfZmlsZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpbGVSZXNwb25zZSA9IGF3YWl0IHJlZ2lzdHJ5QXBpLnBvc3QoXG4gICAgICAgICAgYC9wYWNrYWdlX2ZpbGVzL2dldD9wYWNrYWdlX2ZpbGVfaWQ9JHtmaWxlLnBhY2thZ2VfZmlsZV9pZH1gLFxuICAgICAgICAgIHt9LFxuICAgICAgICApXG4gICAgICAgIGZpbGUuY29udGVudF90ZXh0ID0gZmlsZVJlc3BvbnNlLmRhdGEucGFja2FnZV9maWxlLmNvbnRlbnRfdGV4dFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBbYXV0b2xvYWQtZGV2LXBrZ3NdIFx1Mjc0QyBGYWlsZWQgdG8gZmV0Y2ggY29udGVudCBmb3IgZmlsZSAke2ZpbGUuZmlsZV9wYXRofSBpbiBwYWNrYWdlICR7ZnVsbE5hbWV9OmAsXG4gICAgICAgICAgZSxcbiAgICAgICAgKVxuICAgICAgICB0aHJvdyBlXG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBbYXV0b2xvYWQtZGV2LXBrZ3NdIFx1Mjc0QyBGYWlsZWQgdG8gZmV0Y2ggZmlsZXMgZGF0YSBmb3IgJHtmdWxsTmFtZX06YCxcbiAgICAgIGUsXG4gICAgKVxuICAgIHRocm93IGVcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGFja2FnZTogcGFja2FnZURhdGEucGFja2FnZSBhcyBQYWNrYWdlLFxuICAgIHJlbGVhc2U6IHJlbGVhc2VEYXRhLnBhY2thZ2VfcmVsZWFzZSBhcyBQYWNrYWdlUmVsZWFzZSxcbiAgICBmaWxlczogZmlsZXNEYXRhLnBhY2thZ2VfZmlsZXMgYXMgUGFja2FnZUZpbGVbXSxcbiAgfVxufVxuXG5jb25zdCBsb2FkUGFja2FnZVdpdGhEZXBlbmRlbmNpZXMgPSBhc3luYyAoXG4gIGRiOiBEYkNsaWVudCxcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBsb2FkZWRQYWNrYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpLFxuKSA9PiB7XG4gIGNvbnN0IHBhY2thZ2VLZXkgPSBgJHtvd25lcn0vJHtuYW1lfWBcbiAgaWYgKGxvYWRlZFBhY2thZ2VzLmhhcyhwYWNrYWdlS2V5KSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBsZXQgcmVzdWx0XG4gIHRyeSB7XG4gICAgcmVzdWx0ID0gYXdhaXQgZmV0Y2hQYWNrYWdlRnJvbVJlZ2lzdHJ5KG93bmVyLCBuYW1lKVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgW2F1dG9sb2FkLWRldi1wa2dzXSBcdTI3NEMgRmFpbGVkIHRvIGxvYWQgJHtwYWNrYWdlS2V5fWApXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCB7IHBhY2thZ2U6IHBrZywgcmVsZWFzZSwgZmlsZXMgfSA9IHJlc3VsdFxuXG4gIC8vIENoZWNrIGlmIHBhY2thZ2UgYWxyZWFkeSBleGlzdHNcbiAgaWYgKGRiLmdldFBhY2thZ2VCeUlkKHBrZy5wYWNrYWdlX2lkKSkge1xuICAgIGNvbnNvbGUubG9nKGBbYXV0b2xvYWQtZGV2LXBrZ3NdIFx1MjZBMSBQYWNrYWdlICR7cGFja2FnZUtleX0gYWxyZWFkeSBleGlzdHNgKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBBZGQgcGFja2FnZSwgcmVsZWFzZSwgYW5kIGZpbGVzIHRvIGRiXG4gIGRiLmFkZFBhY2thZ2Uoe1xuICAgIC4uLnBrZyxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIGxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQ6IHJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgIHN0YXJfY291bnQ6IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDExKSxcbiAgfSlcblxuICBkYi5hZGRQYWNrYWdlUmVsZWFzZSh7XG4gICAgLi4ucmVsZWFzZSxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgdHJhbnNwaWxhdGlvbl9sb2dzOiBBcnJheS5pc0FycmF5KHJlbGVhc2UudHJhbnNwaWxhdGlvbl9sb2dzKVxuICAgICAgPyByZWxlYXNlLnRyYW5zcGlsYXRpb25fbG9nc1xuICAgICAgOiBbXSxcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfbG9nczogQXJyYXkuaXNBcnJheShyZWxlYXNlLmNpcmN1aXRfanNvbl9idWlsZF9sb2dzKVxuICAgICAgPyByZWxlYXNlLmNpcmN1aXRfanNvbl9idWlsZF9sb2dzXG4gICAgICA6IFtdLFxuICAgIHRyYW5zcGlsYXRpb25fZGlzcGxheV9zdGF0dXM6XG4gICAgICByZWxlYXNlLnRyYW5zcGlsYXRpb25fZGlzcGxheV9zdGF0dXMgPz8gXCJwZW5kaW5nXCIsXG4gIH0pXG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgZGIuYWRkUGFja2FnZUZpbGUoe1xuICAgICAgLi4uZmlsZSxcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9KVxuICB9XG5cbiAgbG9hZGVkUGFja2FnZXMuYWRkKHBhY2thZ2VLZXkpXG4gIGNvbnNvbGUubG9nKGBbYXV0b2xvYWQtZGV2LXBrZ3NdIFx1RDgzRFx1RENFNiBMb2FkZWQgJHtwYWNrYWdlS2V5fWApXG5cbiAgLy8gTG9hZCBkZXBlbmRlbmNpZXNcbiAgY29uc3QgbWFpbkZpbGUgPSBmaWxlcy5maW5kKFxuICAgIChmKSA9PiBmLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c3hcIiB8fCBmLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c1wiLFxuICApXG4gIGlmICghbWFpbkZpbGU/LmNvbnRlbnRfdGV4dCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBjb25zdCBkZXBlbmRlbmNpZXMgPSBleHRyYWN0VHNjaURlcGVuZGVuY2llcyhtYWluRmlsZS5jb250ZW50X3RleHQpXG4gIGxldCBhbGxEZXBzTG9hZGVkID0gdHJ1ZVxuXG4gIGZvciAoY29uc3QgZGVwIG9mIGRlcGVuZGVuY2llcykge1xuICAgIGNvbnN0IGRlcExvYWRlZCA9IGF3YWl0IGxvYWRQYWNrYWdlV2l0aERlcGVuZGVuY2llcyhcbiAgICAgIGRiLFxuICAgICAgZGVwLm93bmVyLFxuICAgICAgZGVwLm5hbWUsXG4gICAgICBsb2FkZWRQYWNrYWdlcyxcbiAgICApXG4gICAgaWYgKCFkZXBMb2FkZWQpIHtcbiAgICAgIGFsbERlcHNMb2FkZWQgPSBmYWxzZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2F1dG9sb2FkLWRldi1wa2dzXSBcdTI2QTBcdUZFMEYgRmFpbGVkIHRvIGxvYWQgZGVwZW5kZW5jeSAke2RlcC5vd25lcn0vJHtkZXAubmFtZX0gZm9yICR7cGFja2FnZUtleX1gLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhbGxEZXBzTG9hZGVkXG59XG5cbmV4cG9ydCBjb25zdCBsb2FkQXV0b2xvYWRQYWNrYWdlcyA9IGFzeW5jIChkYjogRGJDbGllbnQpID0+IHtcbiAgY29uc3QgYXV0b2xvYWRQYXRoID0gcGF0aC5qb2luKFxuICAgIHBhdGguZGlybmFtZShfX2Rpcm5hbWUpLFxuICAgIFwiZGJcIixcbiAgICBcImF1dG9sb2FkLXBhY2thZ2VzLmpzb25cIixcbiAgKVxuICBpZiAoIWZzLmV4aXN0c1N5bmMoYXV0b2xvYWRQYXRoKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbYXV0b2xvYWQtZGV2LXBrZ3NdIFx1Mjc0QyBObyBhdXRvbG9hZC1wYWNrYWdlcy5qc29uIGZvdW5kXCIpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBhdXRvbG9hZENvbnRlbnQgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhhdXRvbG9hZFBhdGgsIFwidXRmOFwiKSlcbiAgY29uc3QgbG9hZGVkUGFja2FnZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBsZXQgc3VjY2Vzc0NvdW50ID0gMFxuICBsZXQgZmFpbHVyZUNvdW50ID0gMFxuXG4gIGZvciAoY29uc3QgcGFja2FnZVJlZiBvZiBhdXRvbG9hZENvbnRlbnQucGFja2FnZXMpIHtcbiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgbG9hZFBhY2thZ2VXaXRoRGVwZW5kZW5jaWVzKFxuICAgICAgZGIsXG4gICAgICBwYWNrYWdlUmVmLm93bmVyLFxuICAgICAgcGFja2FnZVJlZi5uYW1lLFxuICAgICAgbG9hZGVkUGFja2FnZXMsXG4gICAgKVxuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBzdWNjZXNzQ291bnQrK1xuICAgIH0gZWxzZSB7XG4gICAgICBmYWlsdXJlQ291bnQrK1xuICAgIH1cbiAgfVxuXG4gIGNvbnNvbGUubG9nKGBcXG5bYXV0b2xvYWQtZGV2LXBrZ3NdIFx1RDgzRFx1RENDQiBQYWNrYWdlIGxvYWRpbmcgY29tcGxldGU6YClcbiAgY29uc29sZS5sb2coXG4gICAgYFthdXRvbG9hZC1kZXYtcGtnc10gXHUyNzA1IFN1Y2Nlc3NmdWxseSBsb2FkZWQ6ICR7c3VjY2Vzc0NvdW50fSBwYWNrYWdlc2AsXG4gIClcbiAgaWYgKGZhaWx1cmVDb3VudCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBbYXV0b2xvYWQtZGV2LXBrZ3NdIFx1Mjc0QyBGYWlsZWQgdG8gbG9hZDogJHtmYWlsdXJlQ291bnR9IHBhY2thZ2VzYCxcbiAgICApXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBEYkNsaWVudCB9IGZyb20gXCIuL2RiLWNsaWVudFwiXG5pbXBvcnQgeyBsb2FkQXV0b2xvYWRQYWNrYWdlcyB9IGZyb20gXCIuL2F1dG9sb2FkLWRldi1wYWNrYWdlc1wiXG5cbmV4cG9ydCBjb25zdCBzZWVkID0gKGRiOiBEYkNsaWVudCkgPT4ge1xuICBjb25zdCB7IGFjY291bnRfaWQgfSA9IGRiLmFkZEFjY291bnQoe1xuICAgIGFjY291bnRfaWQ6IFwiYWNjb3VudC0xMjM0XCIsXG4gICAgcGVyc29uYWxfb3JnX2lkOiBcIm9yZy0xMjM0XCIsXG4gICAgZ2l0aHViX3VzZXJuYW1lOiBcInRlc3R1c2VyXCIsXG4gICAgdHNjaXJjdWl0X2hhbmRsZTogXCJ0ZXN0dXNlclwiLFxuICAgIHNoaXBwaW5nSW5mbzoge1xuICAgICAgZmlyc3ROYW1lOiBcIlRlc3RcIixcbiAgICAgIGxhc3ROYW1lOiBcIlVzZXJcIixcbiAgICAgIGNvbXBhbnlOYW1lOiBcIlRlc3QgQ29tcGFueVwiLFxuICAgICAgYWRkcmVzczogXCIxMjMgVGVzdCBTdFwiLFxuICAgICAgYXBhcnRtZW50OiBcIkFwdCA0QlwiLFxuICAgICAgY2l0eTogXCJUZXN0dmlsbGVcIixcbiAgICAgIHN0YXRlOiBcIk5ZXCIsXG4gICAgICB6aXBDb2RlOiBcIjEwMDAxXCIsXG4gICAgICBjb3VudHJ5OiBcIlVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYVwiLFxuICAgICAgcGhvbmU6IFwiNTU1LTEyMy00NTY3XCIsXG4gICAgfSxcbiAgfSlcbiAgY29uc3Qgc2V2ZWliYXJBY2MgPSBkYi5hZGRBY2NvdW50KHtcbiAgICBnaXRodWJfdXNlcm5hbWU6IFwic2V2ZWliYXJcIixcbiAgICB0c2NpcmN1aXRfaGFuZGxlOiBcInNldmVpYmFyXCIsXG4gIH0pXG5cbiAgaWYgKHByb2Nlc3MuZW52LkFVVE9MT0FEX1BBQ0tBR0VTID09PSBcInRydWVcIikge1xuICAgIGxvYWRBdXRvbG9hZFBhY2thZ2VzKGRiKVxuICB9XG5cbiAgY29uc3QgeyBwYWNrYWdlX3JlbGVhc2VfaWQ6IHBhY2thZ2VSZWxlYXNlSWQxIH0gPSBkYi5hZGRTbmlwcGV0KHtcbiAgICBuYW1lOiBcInRlc3R1c2VyL215LXRlc3QtYm9hcmRcIixcbiAgICB1bnNjb3BlZF9uYW1lOiBcIm15LXRlc3QtYm9hcmRcIixcbiAgICBnaXRodWJfcmVwb19mdWxsX25hbWU6IFwidGVzdHVzZXIvbXktdGVzdC1ib2FyZFwiLFxuICAgIG93bmVyX25hbWU6IFwidGVzdHVzZXJcIixcbiAgICBicmFuY2hfbmFtZTogXCJtYWluXCIsXG4gICAgY29tbWl0X21lc3NhZ2U6IFwiQXR0ZW1wdGVkIGJ1aWxkIG9mIGE1NTV0aW1lci1zcXVhcmUtd2F2ZSBwYWNrYWdlXCIsXG4gICAgY29tbWl0X2F1dGhvcjogXCJ0ZXN0dXNlclwiLFxuICAgIGNyZWF0b3JfYWNjb3VudF9pZDogYWNjb3VudF9pZCxcbiAgICBjb2RlOiBgXG5pbXBvcnQgeyBBNTU1VGltZXIgfSBmcm9tIFwiQHRzY2kvc2V2ZWliYXIuYTU1NXRpbWVyXCJcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4gKFxuICA8Ym9hcmQgd2lkdGg9XCIxMG1tXCIgaGVpZ2h0PVwiMTBtbVwiPlxuICAgIDxBNTU1VGltZXIgbmFtZT1cIlUxXCIgLz5cbiAgPC9ib2FyZD5cbilgLnRyaW0oKSxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHNuaXBwZXRfdHlwZTogXCJib2FyZFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkEgc2ltcGxlIGJvYXJkIHdpdGggYW4gQTU1NSBUaW1lciBjb21wb25lbnRcIixcbiAgICBjaXJjdWl0X2pzb246IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8wXCIsXG4gICAgICAgIG5hbWU6IFwicGluMVwiLFxuICAgICAgICBwaW5fbnVtYmVyOiAxLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW4xXCIsIFwiMVwiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX3BvcnRcIixcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMVwiLFxuICAgICAgICBuYW1lOiBcInBpbjJcIixcbiAgICAgICAgcGluX251bWJlcjogMixcbiAgICAgICAgcG9ydF9oaW50czogW1wicGluMlwiLCBcIjJcIl0sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9wb3J0XCIsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzJcIixcbiAgICAgICAgbmFtZTogXCJwaW4zXCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDMsXG4gICAgICAgIHBvcnRfaGludHM6IFtcInBpbjNcIiwgXCIzXCJdLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8zXCIsXG4gICAgICAgIG5hbWU6IFwicGluNFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA0LFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW40XCIsIFwiNFwiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX3BvcnRcIixcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfNFwiLFxuICAgICAgICBuYW1lOiBcInBpbjVcIixcbiAgICAgICAgcGluX251bWJlcjogNSxcbiAgICAgICAgcG9ydF9oaW50czogW1wicGluNVwiLCBcIjVcIl0sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9wb3J0XCIsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzVcIixcbiAgICAgICAgbmFtZTogXCJwaW42XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDYsXG4gICAgICAgIHBvcnRfaGludHM6IFtcInBpbjZcIiwgXCI2XCJdLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF82XCIsXG4gICAgICAgIG5hbWU6IFwicGluN1wiLFxuICAgICAgICBwaW5fbnVtYmVyOiA3LFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW43XCIsIFwiN1wiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX3BvcnRcIixcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfN1wiLFxuICAgICAgICBuYW1lOiBcInBpbjhcIixcbiAgICAgICAgcGluX251bWJlcjogOCxcbiAgICAgICAgcG9ydF9oaW50czogW1wicGluOFwiLCBcIjhcIl0sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9jb21wb25lbnRcIixcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgICAgZnR5cGU6IFwic2ltcGxlX2NoaXBcIixcbiAgICAgICAgbmFtZTogXCJVMVwiLFxuICAgICAgICBzdXBwbGllcl9wYXJ0X251bWJlcnM6IHt9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfY29tcG9uZW50XCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMCxcbiAgICAgICAgfSxcbiAgICAgICAgcm90YXRpb246IDAsXG4gICAgICAgIHNpemU6IHtcbiAgICAgICAgICB3aWR0aDogMS4xLFxuICAgICAgICAgIGhlaWdodDogMSxcbiAgICAgICAgfSxcbiAgICAgICAgcGluX3NwYWNpbmc6IDAuMixcbiAgICAgICAgcG9ydF9sYWJlbHM6IHt9LFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF8wXCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IC0wLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogMC4zMDAwMDAwMDAwMDAwMDAwNCxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMFwiLFxuICAgICAgICBmYWNpbmdfZGlyZWN0aW9uOiBcImxlZnRcIixcbiAgICAgICAgZGlzdGFuY2VfZnJvbV9jb21wb25lbnRfZWRnZTogMC40LFxuICAgICAgICBzaWRlX29mX2NvbXBvbmVudDogXCJsZWZ0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDEsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiAwLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF8xXCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IC0wLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogMC4xMDAwMDAwMDAwMDAwMDAwMyxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMVwiLFxuICAgICAgICBmYWNpbmdfZGlyZWN0aW9uOiBcImxlZnRcIixcbiAgICAgICAgZGlzdGFuY2VfZnJvbV9jb21wb25lbnRfZWRnZTogMC40LFxuICAgICAgICBzaWRlX29mX2NvbXBvbmVudDogXCJsZWZ0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDIsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiAxLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF8yXCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IC0wLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogLTAuMDk5OTk5OTk5OTk5OTk5OTgsXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzJcIixcbiAgICAgICAgZmFjaW5nX2RpcmVjdGlvbjogXCJsZWZ0XCIsXG4gICAgICAgIGRpc3RhbmNlX2Zyb21fY29tcG9uZW50X2VkZ2U6IDAuNCxcbiAgICAgICAgc2lkZV9vZl9jb21wb25lbnQ6IFwibGVmdFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiAzLFxuICAgICAgICB0cnVlX2Njd19pbmRleDogMixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic2NoZW1hdGljX3BvcnRcIixcbiAgICAgICAgc2NoZW1hdGljX3BvcnRfaWQ6IFwic2NoZW1hdGljX3BvcnRfM1wiLFxuICAgICAgICBzY2hlbWF0aWNfY29tcG9uZW50X2lkOiBcInNjaGVtYXRpY19jb21wb25lbnRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAtMC45NTAwMDAwMDAwMDAwMDAxLFxuICAgICAgICAgIHk6IC0wLjMwMDAwMDAwMDAwMDAwMDA0LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8zXCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwibGVmdFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcImxlZnRcIixcbiAgICAgICAgcGluX251bWJlcjogNCxcbiAgICAgICAgdHJ1ZV9jY3dfaW5kZXg6IDMsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzRcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogMC45NTAwMDAwMDAwMDAwMDAxLFxuICAgICAgICAgIHk6IC0wLjMwMDAwMDAwMDAwMDAwMDA0LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF80XCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwicmlnaHRcIixcbiAgICAgICAgZGlzdGFuY2VfZnJvbV9jb21wb25lbnRfZWRnZTogMC40LFxuICAgICAgICBzaWRlX29mX2NvbXBvbmVudDogXCJyaWdodFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA1LFxuICAgICAgICB0cnVlX2Njd19pbmRleDogNCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic2NoZW1hdGljX3BvcnRcIixcbiAgICAgICAgc2NoZW1hdGljX3BvcnRfaWQ6IFwic2NoZW1hdGljX3BvcnRfNVwiLFxuICAgICAgICBzY2hlbWF0aWNfY29tcG9uZW50X2lkOiBcInNjaGVtYXRpY19jb21wb25lbnRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAwLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogLTAuMTAwMDAwMDAwMDAwMDAwMDMsXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzVcIixcbiAgICAgICAgZmFjaW5nX2RpcmVjdGlvbjogXCJyaWdodFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcInJpZ2h0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDYsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiA1LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF82XCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IDAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAwLjA5OTk5OTk5OTk5OTk5OTk4LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF82XCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwicmlnaHRcIixcbiAgICAgICAgZGlzdGFuY2VfZnJvbV9jb21wb25lbnRfZWRnZTogMC40LFxuICAgICAgICBzaWRlX29mX2NvbXBvbmVudDogXCJyaWdodFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA3LFxuICAgICAgICB0cnVlX2Njd19pbmRleDogNixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic2NoZW1hdGljX3BvcnRcIixcbiAgICAgICAgc2NoZW1hdGljX3BvcnRfaWQ6IFwic2NoZW1hdGljX3BvcnRfN1wiLFxuICAgICAgICBzY2hlbWF0aWNfY29tcG9uZW50X2lkOiBcInNjaGVtYXRpY19jb21wb25lbnRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAwLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogMC4zMDAwMDAwMDAwMDAwMDAwNCxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfN1wiLFxuICAgICAgICBmYWNpbmdfZGlyZWN0aW9uOiBcInJpZ2h0XCIsXG4gICAgICAgIGRpc3RhbmNlX2Zyb21fY29tcG9uZW50X2VkZ2U6IDAuNCxcbiAgICAgICAgc2lkZV9vZl9jb21wb25lbnQ6IFwicmlnaHRcIixcbiAgICAgICAgcGluX251bWJlcjogOCxcbiAgICAgICAgdHJ1ZV9jY3dfaW5kZXg6IDcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9jb21wb25lbnRcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICB9LFxuICAgICAgICB3aWR0aDogOC44MixcbiAgICAgICAgaGVpZ2h0OiA4LjgyLFxuICAgICAgICBsYXllcjogXCJ0b3BcIixcbiAgICAgICAgcm90YXRpb246IDAsXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9ib2FyZFwiLFxuICAgICAgICBwY2JfYm9hcmRfaWQ6IFwicGNiX2JvYXJkXzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICB9LFxuICAgICAgICB0aGlja25lc3M6IDEuNCxcbiAgICAgICAgbnVtX2xheWVyczogNCxcbiAgICAgICAgd2lkdGg6IDEwLFxuICAgICAgICBoZWlnaHQ6IDEwLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcGxhdGVkX2hvbGVcIixcbiAgICAgICAgcGNiX3BsYXRlZF9ob2xlX2lkOiBcInBjYl9wbGF0ZWRfaG9sZV8wXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzBcIixcbiAgICAgICAgb3V0ZXJfZGlhbWV0ZXI6IDEuMixcbiAgICAgICAgaG9sZV9kaWFtZXRlcjogMSxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBvcnRfaGludHM6IFtcIjFcIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAzLjgxLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfMVwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8xXCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCIyXCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogMS4yNyxcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wbGF0ZWRfaG9sZVwiLFxuICAgICAgICBwY2JfcGxhdGVkX2hvbGVfaWQ6IFwicGNiX3BsYXRlZF9ob2xlXzJcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfMlwiLFxuICAgICAgICBvdXRlcl9kaWFtZXRlcjogMS4yLFxuICAgICAgICBob2xlX2RpYW1ldGVyOiAxLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcG9ydF9oaW50czogW1wiM1wiXSxcbiAgICAgICAgeDogLTMuODEsXG4gICAgICAgIHk6IC0xLjI3LFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfM1wiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8zXCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCI0XCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogLTMuODEsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiYm90dG9tXCJdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcGxhdGVkX2hvbGVcIixcbiAgICAgICAgcGNiX3BsYXRlZF9ob2xlX2lkOiBcInBjYl9wbGF0ZWRfaG9sZV80XCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzRcIixcbiAgICAgICAgb3V0ZXJfZGlhbWV0ZXI6IDEuMixcbiAgICAgICAgaG9sZV9kaWFtZXRlcjogMSxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBvcnRfaGludHM6IFtcIjVcIl0sXG4gICAgICAgIHg6IDMuODEsXG4gICAgICAgIHk6IC0zLjgxLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfNVwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF81XCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCI2XCJdLFxuICAgICAgICB4OiAzLjgxLFxuICAgICAgICB5OiAtMS4yNyxcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wbGF0ZWRfaG9sZVwiLFxuICAgICAgICBwY2JfcGxhdGVkX2hvbGVfaWQ6IFwicGNiX3BsYXRlZF9ob2xlXzZcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNlwiLFxuICAgICAgICBvdXRlcl9kaWFtZXRlcjogMS4yLFxuICAgICAgICBob2xlX2RpYW1ldGVyOiAxLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcG9ydF9oaW50czogW1wiN1wiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogMS4yNyxcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wbGF0ZWRfaG9sZVwiLFxuICAgICAgICBwY2JfcGxhdGVkX2hvbGVfaWQ6IFwicGNiX3BsYXRlZF9ob2xlXzdcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfN1wiLFxuICAgICAgICBvdXRlcl9kaWFtZXRlcjogMS4yLFxuICAgICAgICBob2xlX2RpYW1ldGVyOiAxLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcG9ydF9oaW50czogW1wiOFwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogMy44MSxcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9zaWxrc2NyZWVuX3BhdGhcIixcbiAgICAgICAgcGNiX3NpbGtzY3JlZW5fcGF0aF9pZDogXCJwY2Jfc2lsa3NjcmVlbl9wYXRoXzBcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXI6IFwidG9wXCIsXG4gICAgICAgIHJvdXRlOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTMuMDEsXG4gICAgICAgICAgICB5OiAtNC42MSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IC0zLjAxLFxuICAgICAgICAgICAgeTogNC42MSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IC0xLjAwMzMzMzMzMzMzMzMzMzIsXG4gICAgICAgICAgICB5OiA0LjYxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTAuOTI2OTU5MTMwOTUyOTkwOSxcbiAgICAgICAgICAgIHk6IDQuMjI2MDQwOTU2MTkzNjkzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTAuNzA5NDYzODAzNzkwNTAyNixcbiAgICAgICAgICAgIHk6IDMuOTAwNTM2MTk2MjA5NDk3OCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IC0wLjM4Mzk1OTA0MzgwNjMwNjcsXG4gICAgICAgICAgICB5OiAzLjY4MzA0MDg2OTA0NzAwOTYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiA2LjE0MzY0NDc3NTcyMjU1NmUtMTcsXG4gICAgICAgICAgICB5OiAzLjYwNjY2NjY2NjY2NjY2NzQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAwLjM4Mzk1OTA0MzgwNjMwNjc0LFxuICAgICAgICAgICAgeTogMy42ODMwNDA4NjkwNDcwMDk2LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogMC43MDk0NjM4MDM3OTA1MDI3LFxuICAgICAgICAgICAgeTogMy45MDA1MzYxOTYyMDk0OTc4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogMC45MjY5NTkxMzA5NTI5OTA5LFxuICAgICAgICAgICAgeTogNC4yMjYwNDA5NTYxOTM2OTMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAxLjAwMzMzMzMzMzMzMzMzMzIsXG4gICAgICAgICAgICB5OiA0LjYxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogMy4wMSxcbiAgICAgICAgICAgIHk6IDQuNjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAzLjAxLFxuICAgICAgICAgICAgeTogLTQuNjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAtMy4wMSxcbiAgICAgICAgICAgIHk6IC00LjYxLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHN0cm9rZV93aWR0aDogMC4xLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcG9ydFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8wXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiaW5uZXIxXCIsIFwiaW5uZXIyXCIsIFwiYm90dG9tXCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogMy44MSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcG9ydFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8xXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiaW5uZXIxXCIsIFwiaW5uZXIyXCIsIFwiYm90dG9tXCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogMS4yNyxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMVwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcG9ydFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8yXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiaW5uZXIxXCIsIFwiaW5uZXIyXCIsIFwiYm90dG9tXCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogLTEuMjcsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzJcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BvcnRcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfM1wiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImlubmVyMVwiLCBcImlubmVyMlwiLCBcImJvdHRvbVwiXSxcbiAgICAgICAgeDogLTMuODEsXG4gICAgICAgIHk6IC0zLjgxLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8zXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzRcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IDMuODEsXG4gICAgICAgIHk6IC0zLjgxLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF80XCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzVcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IDMuODEsXG4gICAgICAgIHk6IC0xLjI3LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF81XCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzZcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IDMuODEsXG4gICAgICAgIHk6IDEuMjcsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzZcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BvcnRcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfN1wiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImlubmVyMVwiLCBcImlubmVyMlwiLCBcImJvdHRvbVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogMy44MSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfN1wiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJjYWRfY29tcG9uZW50XCIsXG4gICAgICAgIGNhZF9jb21wb25lbnRfaWQ6IFwiY2FkX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICAgIHo6IDAuNyxcbiAgICAgICAgfSxcbiAgICAgICAgcm90YXRpb246IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgejogMCxcbiAgICAgICAgfSxcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgICAgZm9vdHByaW50ZXJfc3RyaW5nOiBcImRpcDhcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgfSlcblxuICBjb25zdCBmaXJzdEJ1aWxkID0gZGIuYWRkUGFja2FnZUJ1aWxkKHtcbiAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHBhY2thZ2VSZWxlYXNlSWQxLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxNTAwMCkudG9JU09TdHJpbmcoKSwgLy8gMTUgc2Vjb25kcyBhZ29cbiAgICB0cmFuc3BpbGF0aW9uX2luX3Byb2dyZXNzOiBmYWxzZSxcbiAgICB0cmFuc3BpbGF0aW9uX3N0YXJ0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxNTAwMCkudG9JU09TdHJpbmcoKSxcbiAgICB0cmFuc3BpbGF0aW9uX2NvbXBsZXRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDE0MDAwKS50b0lTT1N0cmluZygpLFxuICAgIHRyYW5zcGlsYXRpb25fbG9nczogW1xuICAgICAgXCJbSU5GT10gU3RhcnRpbmcgdHJhbnNwaWxhdGlvbi4uLlwiLFxuICAgICAgXCJbSU5GT10gUGFyc2luZyBwYWNrYWdlIGNvZGVcIixcbiAgICAgIFwiW0VSUk9SXSBGYWlsZWQgdG8gcGFyc2UgVHlwZVNjcmlwdCBkZWZpbml0aW9uc1wiLFxuICAgICAgXCJbRVJST1JdIEludmFsaWQgc3ludGF4IGluIGNvbXBvbmVudCBkZWNsYXJhdGlvblwiLFxuICAgIF0sXG4gICAgdHJhbnNwaWxhdGlvbl9lcnJvcjpcbiAgICAgIFwiVHlwZVNjcmlwdCBjb21waWxhdGlvbiBmYWlsZWQ6IFN5bnRheCBlcnJvciBpbiBjb21wb25lbnQgZGVjbGFyYXRpb25cIixcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfaW5fcHJvZ3Jlc3M6IGZhbHNlLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9zdGFydGVkX2F0OiBudWxsLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9jb21wbGV0ZWRfYXQ6IG51bGwsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2xvZ3M6IFtdLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9lcnJvcjogXCJCdWlsZCBjYW5jZWxsZWQgZHVlIHRvIHRyYW5zcGlsYXRpb24gZmFpbHVyZVwiLFxuICAgIGJ1aWxkX2luX3Byb2dyZXNzOiBmYWxzZSxcbiAgICBidWlsZF9zdGFydGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTUwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgYnVpbGRfY29tcGxldGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTQwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgYnVpbGRfZXJyb3I6IFwiQnVpbGQgZmFpbGVkOiBVbmFibGUgdG8gY29tcGxldGUgdHJhbnNwaWxhdGlvbiBzdGVwXCIsXG4gICAgYnVpbGRfZXJyb3JfbGFzdF91cGRhdGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTQwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgcHJldmlld191cmw6IG51bGwsXG4gICAgYnVpbGRfbG9nczpcbiAgICAgIFwiQnVpbGQgcHJvY2VzczpcXG5cIiArXG4gICAgICBcIjEuIEVudmlyb25tZW50IHNldHVwIC0gT0tcXG5cIiArXG4gICAgICBcIjIuIERlcGVuZGVuY3kgcmVzb2x1dGlvbiAtIE9LXFxuXCIgK1xuICAgICAgXCIzLiBDb2RlIGNvbXBpbGF0aW9uIC0gRkFJTEVEXFxuXCIgK1xuICAgICAgXCJFcnJvcjogSW52YWxpZCBzeW50YXggaW4gY29tcG9uZW50IGRlY2xhcmF0aW9uXFxuXCIgK1xuICAgICAgXCJCdWlsZCB0ZXJtaW5hdGVkIHdpdGggZXJyb3JzXCIsXG4gIH0pXG5cbiAgLy8gVXBkYXRlIHRoZSBwYWNrYWdlIHJlbGVhc2Ugd2l0aCB0aGUgbGF0ZXN0IGJ1aWxkIElEXG4gIGNvbnN0IHJlbGVhc2UxID0gZGIuZ2V0UGFja2FnZVJlbGVhc2VCeUlkKHBhY2thZ2VSZWxlYXNlSWQxKSFcbiAgZGIudXBkYXRlUGFja2FnZVJlbGVhc2Uoe1xuICAgIC4uLnJlbGVhc2UxLFxuICAgIGxhdGVzdF9wYWNrYWdlX2J1aWxkX2lkOiBmaXJzdEJ1aWxkLnBhY2thZ2VfYnVpbGRfaWQsXG4gIH0pXG5cbiAgLy8gVGVzdCBQYWNrYWdlIGFkZGl0aW9uXG4gIGNvbnN0IHRlc3QyUGFja2FnZSA9IGRiLmFkZFBhY2thZ2Uoe1xuICAgIG5hbWU6IFwidGVzdHVzZXIvdGVzdDItcGFja2FnZVwiLFxuICAgIHVuc2NvcGVkX25hbWU6IFwidGVzdDItcGFja2FnZVwiLFxuICAgIGNyZWF0b3JfYWNjb3VudF9pZDogYWNjb3VudF9pZCxcbiAgICBvd25lcl9vcmdfaWQ6IFwib3JnLTEyMzRcIixcbiAgICBvd25lcl9naXRodWJfdXNlcm5hbWU6IFwidGVzdHVzZXJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJBIHRlc3QgcGFja2FnZSBmb3IgZGV2ZWxvcG1lbnRcIixcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIGlzX3NvdXJjZV9mcm9tX2dpdGh1YjogZmFsc2UsXG4gICAgc25pcHBldF90eXBlOiBcInBhY2thZ2VcIixcbiAgICBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkOiBudWxsLFxuICAgIGxhdGVzdF92ZXJzaW9uOiBcIjAuMC4xXCIsXG4gICAgbGljZW5zZTogXCJNSVRcIixcbiAgICB3ZWJzaXRlOiBcImh0dHBzOi8vdHNjaXJjdWl0LmNvbVwiLFxuICAgIHN0YXJfY291bnQ6IDEwLFxuICAgIGFpX2Rlc2NyaXB0aW9uOlxuICAgICAgXCJBIGNvbXByZWhlbnNpdmUgdGVzdCBwYWNrYWdlIGRlc2lnbmVkIGZvciBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyBwdXJwb3Nlcy4gVGhpcyBwYWNrYWdlIGluY2x1ZGVzIHZhcmlvdXMgY29tcG9uZW50cyBhbmQgdXRpbGl0aWVzIGNvbW1vbmx5IHVzZWQgaW4gY2lyY3VpdCBkZXNpZ24gYW5kIHNpbXVsYXRpb24gd29ya2Zsb3dzLlwiLFxuICAgIGFpX3VzYWdlX2luc3RydWN0aW9uczpcbiAgICAgIFwiSW1wb3J0IHRoZSBwYWNrYWdlIHVzaW5nIGBpbXBvcnQgeyBUZXN0Q29tcG9uZW50IH0gZnJvbSAnQHRzY2kvdGVzdHVzZXIudGVzdDItcGFja2FnZSdgLiBVc2UgdGhlIFRlc3RDb21wb25lbnQgaW4geW91ciBjaXJjdWl0IGRlc2lnbnMgYnkgcHJvdmlkaW5nIHRoZSByZXF1aXJlZCBwcm9wcy4gRXhhbXBsZTogYDxUZXN0Q29tcG9uZW50IG5hbWU9J215LXRlc3QnIHZhbHVlPXs0Mn0gLz5gXCIsXG4gICAgZGVmYXVsdF92aWV3OiBcImZpbGVzXCIsXG4gICAgbGF0ZXN0X3BjYl9wcmV2aWV3X2ltYWdlX3VybDogYC9hcGkvcGFja2FnZXMvaW1hZ2VzL3Rlc3R1c2VyL3Rlc3QyLXBhY2thZ2UvcGNiLnBuZ2AsXG4gICAgbGF0ZXN0X2NhZF9wcmV2aWV3X2ltYWdlX3VybDogYC9hcGkvcGFja2FnZXMvaW1hZ2VzL3Rlc3R1c2VyL3Rlc3QyLXBhY2thZ2UvM2QucG5nYCxcbiAgICBsYXRlc3Rfc2NoX3ByZXZpZXdfaW1hZ2VfdXJsOiBgL2FwaS9wYWNrYWdlcy9pbWFnZXMvdGVzdHVzZXIvdGVzdDItcGFja2FnZS9zY2hlbWF0aWMucG5nYCxcbiAgfSlcbiAgY29uc3QgeyBwYWNrYWdlX3JlbGVhc2VfaWQ6IHRlc3QyUGFja2FnZVJlbGVhc2VJZCB9ID0gZGIuYWRkUGFja2FnZVJlbGVhc2Uoe1xuICAgIHBhY2thZ2VfaWQ6IHRlc3QyUGFja2FnZS5wYWNrYWdlX2lkLFxuICAgIHZlcnNpb246IFwiMC4wLjFcIixcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgaXNfbGF0ZXN0OiB0cnVlLFxuICAgIGlzX2xvY2tlZDogZmFsc2UsXG4gICAgaGFzX3RyYW5zcGlsZWQ6IHRydWUsXG4gICAgdHJhbnNwaWxhdGlvbl9lcnJvcjogbnVsbCxcbiAgICBwY2JfcHJldmlld19pbWFnZV91cmw6IGAvYXBpL3BhY2thZ2VzL2ltYWdlcy90ZXN0dXNlci90ZXN0Mi1wYWNrYWdlL3BjYi5wbmdgLFxuICAgIGNhZF9wcmV2aWV3X2ltYWdlX3VybDogYC9hcGkvcGFja2FnZXMvaW1hZ2VzL3Rlc3R1c2VyL3Rlc3QyLXBhY2thZ2UvM2QucG5nYCxcbiAgICBzY2hfcHJldmlld19pbWFnZV91cmw6IGAvYXBpL3BhY2thZ2VzL2ltYWdlcy90ZXN0dXNlci90ZXN0Mi1wYWNrYWdlL3NjaGVtYXRpYy5wbmdgLFxuICB9KVxuICBkYi5hZGRQYWNrYWdlRmlsZSh7XG4gICAgcGFja2FnZV9yZWxlYXNlX2lkOiB0ZXN0MlBhY2thZ2VSZWxlYXNlSWQsXG4gICAgZmlsZV9wYXRoOiBcImluZGV4LnRzeFwiLFxuICAgIGNvbnRlbnRfdGV4dDogYFxuZXhwb3J0IGNvbnN0IFRlc3RDb21wb25lbnQgPSAoeyBuYW1lIH06IHsgbmFtZTogc3RyaW5nIH0pID0+IChcbiAgPHJlc2lzdG9yIG5hbWU9e25hbWV9IHJlc2lzdGFuY2U9XCIxMGtcIiAvPlxuKVxuYC50cmltKCksXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICB9KVxuICBkYi5hZGRQYWNrYWdlRmlsZSh7XG4gICAgcGFja2FnZV9yZWxlYXNlX2lkOiB0ZXN0MlBhY2thZ2VSZWxlYXNlSWQsXG4gICAgZmlsZV9wYXRoOiBcIi9kaXN0L2NpcmN1aXQuanNvblwiLFxuICAgIGNvbnRlbnRfdGV4dDogYFtcbiAge1xuICAgIFwidHlwZVwiOiBcInNvdXJjZV9wcm9qZWN0X21ldGFkYXRhXCIsXG4gICAgXCJzb3VyY2VfcHJvamVjdF9tZXRhZGF0YV9pZFwiOiBcInNvdXJjZV9wcm9qZWN0X21ldGFkYXRhXzBcIixcbiAgICBcInNvZnR3YXJlX3VzZWRfc3RyaW5nXCI6IFwiQHRzY2lyY3VpdC9jb3JlQDAuMC44MTNcIlxuICB9LFxuICB7XG4gICAgXCJ0eXBlXCI6IFwic291cmNlX2dyb3VwXCIsXG4gICAgXCJzb3VyY2VfZ3JvdXBfaWRcIjogXCJzb3VyY2VfZ3JvdXBfMFwiLFxuICAgIFwiaXNfc3ViY2lyY3VpdFwiOiB0cnVlLFxuICAgIFwid2FzX2F1dG9tYXRpY2FsbHlfbmFtZWRcIjogdHJ1ZSxcbiAgICBcInN1YmNpcmN1aXRfaWRcIjogXCJzdWJjaXJjdWl0X3NvdXJjZV9ncm91cF8wXCJcbiAgfSxcbiAge1xuICAgIFwidHlwZVwiOiBcInNvdXJjZV9ib2FyZFwiLFxuICAgIFwic291cmNlX2JvYXJkX2lkXCI6IFwic291cmNlX2JvYXJkXzBcIixcbiAgICBcInNvdXJjZV9ncm91cF9pZFwiOiBcInNvdXJjZV9ncm91cF8wXCJcbiAgfSxcbiAge1xuICAgIFwidHlwZVwiOiBcInNjaGVtYXRpY19ncm91cFwiLFxuICAgIFwic2NoZW1hdGljX2dyb3VwX2lkXCI6IFwic2NoZW1hdGljX2dyb3VwXzBcIixcbiAgICBcImlzX3N1YmNpcmN1aXRcIjogdHJ1ZSxcbiAgICBcInN1YmNpcmN1aXRfaWRcIjogXCJzdWJjaXJjdWl0X3NvdXJjZV9ncm91cF8wXCIsXG4gICAgXCJuYW1lXCI6IFwidW5uYW1lZF9ib2FyZDFcIixcbiAgICBcImNlbnRlclwiOiB7XG4gICAgICBcInhcIjogMCxcbiAgICAgIFwieVwiOiAwXG4gICAgfSxcbiAgICBcIndpZHRoXCI6IDAsXG4gICAgXCJoZWlnaHRcIjogMCxcbiAgICBcInNjaGVtYXRpY19jb21wb25lbnRfaWRzXCI6IFtdLFxuICAgIFwic291cmNlX2dyb3VwX2lkXCI6IFwic291cmNlX2dyb3VwXzBcIlxuICB9LFxuICB7XG4gICAgXCJ0eXBlXCI6IFwicGNiX2JvYXJkXCIsXG4gICAgXCJwY2JfYm9hcmRfaWRcIjogXCJwY2JfYm9hcmRfMFwiLFxuICAgIFwiY2VudGVyXCI6IHtcbiAgICAgIFwieFwiOiAwLFxuICAgICAgXCJ5XCI6IDBcbiAgICB9LFxuICAgIFwidGhpY2tuZXNzXCI6IDEuNCxcbiAgICBcIm51bV9sYXllcnNcIjogMixcbiAgICBcIndpZHRoXCI6IDEwLFxuICAgIFwiaGVpZ2h0XCI6IDEwLFxuICAgIFwibWF0ZXJpYWxcIjogXCJmcjRcIlxuICB9XG5dYC50cmltKCksXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICB9KVxuICBkYi5hZGRQYWNrYWdlQnVpbGQoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogdGVzdDJQYWNrYWdlUmVsZWFzZUlkLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB0cmFuc3BpbGF0aW9uX2luX3Byb2dyZXNzOiBmYWxzZSxcbiAgICB0cmFuc3BpbGF0aW9uX3N0YXJ0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSA1MDAwKS50b0lTT1N0cmluZygpLCAvLyBTdGFydGVkIDUgc2Vjb25kcyBhZ29cbiAgICB0cmFuc3BpbGF0aW9uX2NvbXBsZXRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDMwMDApLnRvSVNPU3RyaW5nKCksIC8vIENvbXBsZXRlZCAzIHNlY29uZHMgYWdvXG4gICAgdHJhbnNwaWxhdGlvbl9sb2dzOiBbXG4gICAgICBcIltJTkZPXSBTdGFydGluZyB0cmFuc3BpbGF0aW9uLi4uXCIsXG4gICAgICBcIltJTkZPXSBQYXJzaW5nIHBhY2thZ2UgY29kZVwiLFxuICAgICAgXCJbSU5GT10gR2VuZXJhdGluZyBUeXBlU2NyaXB0IGRlZmluaXRpb25zXCIsXG4gICAgICBcIltJTkZPXSBDb21waWxpbmcgdG8gSmF2YVNjcmlwdFwiLFxuICAgICAgXCJbU1VDQ0VTU10gVHJhbnNwaWxhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIsXG4gICAgXSxcbiAgICB0cmFuc3BpbGF0aW9uX2Vycm9yOiBudWxsLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9pbl9wcm9ncmVzczogZmFsc2UsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX3N0YXJ0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzMDAwKS50b0lTT1N0cmluZygpLCAvLyBTdGFydGVkIGFmdGVyIHRyYW5zcGlsYXRpb25cbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfY29tcGxldGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTAwMCkudG9JU09TdHJpbmcoKSwgLy8gQ29tcGxldGVkIDEgc2Vjb25kIGFnb1xuICAgIGNpcmN1aXRfanNvbl9idWlsZF9sb2dzOiBbXG4gICAgICBcIltJTkZPXSBTdGFydGluZyBjaXJjdWl0IEpTT04gYnVpbGQuLi5cIixcbiAgICAgIFwiW0lORk9dIEFuYWx5emluZyBjb21wb25lbnQgc3RydWN0dXJlXCIsXG4gICAgICBcIltJTkZPXSBHZW5lcmF0aW5nIHBvcnQgY29uZmlndXJhdGlvbnNcIixcbiAgICAgIFwiW0lORk9dIFZhbGlkYXRpbmcgY2lyY3VpdCBjb25uZWN0aW9uc1wiLFxuICAgICAgXCJbU1VDQ0VTU10gQ2lyY3VpdCBKU09OIGJ1aWxkIGNvbXBsZXRlZFwiLFxuICAgIF0sXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2Vycm9yOiBudWxsLFxuICAgIGJ1aWxkX2luX3Byb2dyZXNzOiBmYWxzZSxcbiAgICBidWlsZF9zdGFydGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTAwMDApLnRvSVNPU3RyaW5nKCksIC8vIFN0YXJ0ZWQgMTAgc2Vjb25kcyBhZ29cbiAgICBidWlsZF9jb21wbGV0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwgLy8gSnVzdCBjb21wbGV0ZWRcbiAgICBidWlsZF9lcnJvcjogbnVsbCxcbiAgICBidWlsZF9lcnJvcl9sYXN0X3VwZGF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBidWlsZF9sb2dzOlxuICAgICAgXCJCdWlsZCBwcm9jZXNzOlxcblwiICtcbiAgICAgIFwiMS4gRW52aXJvbm1lbnQgc2V0dXAgLSBPS1xcblwiICtcbiAgICAgIFwiMi4gRGVwZW5kZW5jeSByZXNvbHV0aW9uIC0gT0tcXG5cIiArXG4gICAgICBcIjMuIENvZGUgY29tcGlsYXRpb24gLSBPS1xcblwiICtcbiAgICAgIFwiNC4gQ2lyY3VpdCB2YWxpZGF0aW9uIC0gT0tcXG5cIiArXG4gICAgICBcIjUuIFBhY2thZ2UgYXNzZW1ibHkgLSBPS1xcblwiICtcbiAgICAgIFwiQnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiLFxuICB9KVxuXG4gIC8vIERlZmluZSB0aGUgQHRzY2kvc2V2ZWliYXIuYTU1NXRpbWVyIHBhY2thZ2VcbiAgZGIuYWRkU25pcHBldCh7XG4gICAgbmFtZTogXCJzZXZlaWJhci9hNTU1dGltZXJcIixcbiAgICB1bnNjb3BlZF9uYW1lOiBcImE1NTV0aW1lclwiLFxuICAgIG93bmVyX25hbWU6IFwic2V2ZWliYXJcIixcbiAgICBjb2RlOiBgXG5leHBvcnQgY29uc3QgQTU1NVRpbWVyID0gKHsgbmFtZSB9OiB7IG5hbWU6IHN0cmluZyB9KSA9PiAoXG4gIDxjaGlwIG5hbWU9e25hbWV9IGZvb3RwcmludD1cImRpcDhcIiAvPlxuKVxuYC50cmltKCksXG4gICAgZHRzOiBgXG5kZWNsYXJlIG1vZHVsZSBcIkB0c2NpL3NldmVpYmFyLmE1NTV0aW1lclwiIHtcbiAgZXhwb3J0IGNvbnN0IEE1NTVUaW1lcjogKHsgbmFtZSB9OiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICB9KSA9PiBhbnk7XG59XG5gLnRyaW0oKSxcbiAgICBjb21waWxlZF9qczogYFxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkE1NTVUaW1lciA9IHZvaWQgMDtcbmNvbnN0IEE1NTVUaW1lciA9ICh7XG4gIG5hbWVcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2hpcFwiLCB7XG4gIG5hbWU6IG5hbWUsXG4gIGZvb3RwcmludDogXCJkaXA4XCJcbn0pO1xuZXhwb3J0cy5BNTU1VGltZXIgPSBBNTU1VGltZXI7XG4gICAgYC50cmltKCksXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBzbmlwcGV0X3R5cGU6IFwicGFja2FnZVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkEgc2ltcGxlIHBhY2thZ2Ugd2l0aCBhbiBBNTU1IFRpbWVyIGNvbXBvbmVudFwiLFxuICAgIGNpcmN1aXRfanNvbjogW1xuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9wb3J0XCIsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzBcIixcbiAgICAgICAgbmFtZTogXCJwaW4xXCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDEsXG4gICAgICAgIHBvcnRfaGludHM6IFtcInBpbjFcIiwgXCIxXCJdLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8xXCIsXG4gICAgICAgIG5hbWU6IFwicGluMlwiLFxuICAgICAgICBwaW5fbnVtYmVyOiAyLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW4yXCIsIFwiMlwiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX3BvcnRcIixcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMlwiLFxuICAgICAgICBuYW1lOiBcInBpbjNcIixcbiAgICAgICAgcGluX251bWJlcjogMyxcbiAgICAgICAgcG9ydF9oaW50czogW1wicGluM1wiLCBcIjNcIl0sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9wb3J0XCIsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzNcIixcbiAgICAgICAgbmFtZTogXCJwaW40XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDQsXG4gICAgICAgIHBvcnRfaGludHM6IFtcInBpbjRcIiwgXCI0XCJdLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF80XCIsXG4gICAgICAgIG5hbWU6IFwicGluNVwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA1LFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW41XCIsIFwiNVwiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX3BvcnRcIixcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfNVwiLFxuICAgICAgICBuYW1lOiBcInBpbjZcIixcbiAgICAgICAgcGluX251bWJlcjogNixcbiAgICAgICAgcG9ydF9oaW50czogW1wicGluNlwiLCBcIjZcIl0sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9wb3J0XCIsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzZcIixcbiAgICAgICAgbmFtZTogXCJwaW43XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDcsXG4gICAgICAgIHBvcnRfaGludHM6IFtcInBpbjdcIiwgXCI3XCJdLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF83XCIsXG4gICAgICAgIG5hbWU6IFwicGluOFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA4LFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW44XCIsIFwiOFwiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX2NvbXBvbmVudFwiLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgICBmdHlwZTogXCJzaW1wbGVfY2hpcFwiLFxuICAgICAgICBuYW1lOiBcIlUxXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19jb21wb25lbnRcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICB9LFxuICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgc2l6ZToge1xuICAgICAgICAgIHdpZHRoOiAxLjEsXG4gICAgICAgICAgaGVpZ2h0OiAxLFxuICAgICAgICB9LFxuICAgICAgICBwaW5fc3BhY2luZzogMC4yLFxuICAgICAgICBwb3J0X2xhYmVsczoge30sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzBcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogLTAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAwLjMwMDAwMDAwMDAwMDAwMDA0LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8wXCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwibGVmdFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcImxlZnRcIixcbiAgICAgICAgcGluX251bWJlcjogMSxcbiAgICAgICAgdHJ1ZV9jY3dfaW5kZXg6IDAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzFcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogLTAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAwLjEwMDAwMDAwMDAwMDAwMDAzLFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8xXCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwibGVmdFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcImxlZnRcIixcbiAgICAgICAgcGluX251bWJlcjogMixcbiAgICAgICAgdHJ1ZV9jY3dfaW5kZXg6IDEsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzJcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogLTAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAtMC4wOTk5OTk5OTk5OTk5OTk5OCxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMlwiLFxuICAgICAgICBmYWNpbmdfZGlyZWN0aW9uOiBcImxlZnRcIixcbiAgICAgICAgZGlzdGFuY2VfZnJvbV9jb21wb25lbnRfZWRnZTogMC40LFxuICAgICAgICBzaWRlX29mX2NvbXBvbmVudDogXCJsZWZ0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDMsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiAyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF8zXCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IC0wLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogLTAuMzAwMDAwMDAwMDAwMDAwMDQsXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzNcIixcbiAgICAgICAgZmFjaW5nX2RpcmVjdGlvbjogXCJsZWZ0XCIsXG4gICAgICAgIGRpc3RhbmNlX2Zyb21fY29tcG9uZW50X2VkZ2U6IDAuNCxcbiAgICAgICAgc2lkZV9vZl9jb21wb25lbnQ6IFwibGVmdFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA0LFxuICAgICAgICB0cnVlX2Njd19pbmRleDogMyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic2NoZW1hdGljX3BvcnRcIixcbiAgICAgICAgc2NoZW1hdGljX3BvcnRfaWQ6IFwic2NoZW1hdGljX3BvcnRfNFwiLFxuICAgICAgICBzY2hlbWF0aWNfY29tcG9uZW50X2lkOiBcInNjaGVtYXRpY19jb21wb25lbnRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAwLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogLTAuMzAwMDAwMDAwMDAwMDAwMDQsXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzRcIixcbiAgICAgICAgZmFjaW5nX2RpcmVjdGlvbjogXCJyaWdodFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcInJpZ2h0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDUsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiA0LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF81XCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IDAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAtMC4xMDAwMDAwMDAwMDAwMDAwMyxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfNVwiLFxuICAgICAgICBmYWNpbmdfZGlyZWN0aW9uOiBcInJpZ2h0XCIsXG4gICAgICAgIGRpc3RhbmNlX2Zyb21fY29tcG9uZW50X2VkZ2U6IDAuNCxcbiAgICAgICAgc2lkZV9vZl9jb21wb25lbnQ6IFwicmlnaHRcIixcbiAgICAgICAgcGluX251bWJlcjogNixcbiAgICAgICAgdHJ1ZV9jY3dfaW5kZXg6IDUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzZcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogMC45NTAwMDAwMDAwMDAwMDAxLFxuICAgICAgICAgIHk6IDAuMDk5OTk5OTk5OTk5OTk5OTgsXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzZcIixcbiAgICAgICAgZmFjaW5nX2RpcmVjdGlvbjogXCJyaWdodFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcInJpZ2h0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDcsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiA2LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF83XCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IDAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAwLjMwMDAwMDAwMDAwMDAwMDA0LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF83XCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwicmlnaHRcIixcbiAgICAgICAgZGlzdGFuY2VfZnJvbV9jb21wb25lbnRfZWRnZTogMC40LFxuICAgICAgICBzaWRlX29mX2NvbXBvbmVudDogXCJyaWdodFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA4LFxuICAgICAgICB0cnVlX2Njd19pbmRleDogNyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX2NvbXBvbmVudFwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIHdpZHRoOiA4LjgyLFxuICAgICAgICBoZWlnaHQ6IDguODIsXG4gICAgICAgIGxheWVyOiBcInRvcFwiLFxuICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX2JvYXJkXCIsXG4gICAgICAgIHBjYl9ib2FyZF9pZDogXCJwY2JfYm9hcmRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIHRoaWNrbmVzczogMS40LFxuICAgICAgICBudW1fbGF5ZXJzOiA0LFxuICAgICAgICB3aWR0aDogNTAsXG4gICAgICAgIGhlaWdodDogNTAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wbGF0ZWRfaG9sZVwiLFxuICAgICAgICBwY2JfcGxhdGVkX2hvbGVfaWQ6IFwicGNiX3BsYXRlZF9ob2xlXzBcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfMFwiLFxuICAgICAgICBvdXRlcl9kaWFtZXRlcjogMS4yLFxuICAgICAgICBob2xlX2RpYW1ldGVyOiAxLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcG9ydF9oaW50czogW1wiMVwiXSxcbiAgICAgICAgeDogLTMuODEsXG4gICAgICAgIHk6IDMuODEsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiYm90dG9tXCJdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcGxhdGVkX2hvbGVcIixcbiAgICAgICAgcGNiX3BsYXRlZF9ob2xlX2lkOiBcInBjYl9wbGF0ZWRfaG9sZV8xXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzFcIixcbiAgICAgICAgb3V0ZXJfZGlhbWV0ZXI6IDEuMixcbiAgICAgICAgaG9sZV9kaWFtZXRlcjogMSxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBvcnRfaGludHM6IFtcIjJcIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAxLjI3LFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfMlwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8yXCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCIzXCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogLTEuMjcsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiYm90dG9tXCJdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcGxhdGVkX2hvbGVcIixcbiAgICAgICAgcGNiX3BsYXRlZF9ob2xlX2lkOiBcInBjYl9wbGF0ZWRfaG9sZV8zXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzNcIixcbiAgICAgICAgb3V0ZXJfZGlhbWV0ZXI6IDEuMixcbiAgICAgICAgaG9sZV9kaWFtZXRlcjogMSxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBvcnRfaGludHM6IFtcIjRcIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAtMy44MSxcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wbGF0ZWRfaG9sZVwiLFxuICAgICAgICBwY2JfcGxhdGVkX2hvbGVfaWQ6IFwicGNiX3BsYXRlZF9ob2xlXzRcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNFwiLFxuICAgICAgICBvdXRlcl9kaWFtZXRlcjogMS4yLFxuICAgICAgICBob2xlX2RpYW1ldGVyOiAxLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcG9ydF9oaW50czogW1wiNVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogLTMuODEsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiYm90dG9tXCJdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcGxhdGVkX2hvbGVcIixcbiAgICAgICAgcGNiX3BsYXRlZF9ob2xlX2lkOiBcInBjYl9wbGF0ZWRfaG9sZV81XCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzVcIixcbiAgICAgICAgb3V0ZXJfZGlhbWV0ZXI6IDEuMixcbiAgICAgICAgaG9sZV9kaWFtZXRlcjogMSxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBvcnRfaGludHM6IFtcIjZcIl0sXG4gICAgICAgIHg6IDMuODEsXG4gICAgICAgIHk6IC0xLjI3LFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfNlwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF82XCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCI3XCJdLFxuICAgICAgICB4OiAzLjgxLFxuICAgICAgICB5OiAxLjI3LFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfN1wiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF83XCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCI4XCJdLFxuICAgICAgICB4OiAzLjgxLFxuICAgICAgICB5OiAzLjgxLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3NpbGtzY3JlZW5fcGF0aFwiLFxuICAgICAgICBwY2Jfc2lsa3NjcmVlbl9wYXRoX2lkOiBcInBjYl9zaWxrc2NyZWVuX3BhdGhfMFwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcjogXCJ0b3BcIixcbiAgICAgICAgcm91dGU6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAtMy4wMSxcbiAgICAgICAgICAgIHk6IC00LjYxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTMuMDEsXG4gICAgICAgICAgICB5OiA0LjYxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTEuMDAzMzMzMzMzMzMzMzMzMixcbiAgICAgICAgICAgIHk6IDQuNjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAtMC45MjY5NTkxMzA5NTI5OTA5LFxuICAgICAgICAgICAgeTogNC4yMjYwNDA5NTYxOTM2OTMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAtMC43MDk0NjM4MDM3OTA1MDI2LFxuICAgICAgICAgICAgeTogMy45MDA1MzYxOTYyMDk0OTc4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTAuMzgzOTU5MDQzODA2MzA2NyxcbiAgICAgICAgICAgIHk6IDMuNjgzMDQwODY5MDQ3MDA5NixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDYuMTQzNjQ0Nzc1NzIyNTU2ZS0xNyxcbiAgICAgICAgICAgIHk6IDMuNjA2NjY2NjY2NjY2NjY3NCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDAuMzgzOTU5MDQzODA2MzA2NzQsXG4gICAgICAgICAgICB5OiAzLjY4MzA0MDg2OTA0NzAwOTYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAwLjcwOTQ2MzgwMzc5MDUwMjcsXG4gICAgICAgICAgICB5OiAzLjkwMDUzNjE5NjIwOTQ5NzgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAwLjkyNjk1OTEzMDk1Mjk5MDksXG4gICAgICAgICAgICB5OiA0LjIyNjA0MDk1NjE5MzY5MyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDEuMDAzMzMzMzMzMzMzMzMzMixcbiAgICAgICAgICAgIHk6IDQuNjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAzLjAxLFxuICAgICAgICAgICAgeTogNC42MSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDMuMDEsXG4gICAgICAgICAgICB5OiAtNC42MSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IC0zLjAxLFxuICAgICAgICAgICAgeTogLTQuNjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc3Ryb2tlX3dpZHRoOiAwLjEsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzBcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAzLjgxLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzFcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAxLjI3LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8xXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzJcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAtMS4yNyxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMlwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcG9ydFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8zXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiaW5uZXIxXCIsIFwiaW5uZXIyXCIsIFwiYm90dG9tXCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogLTMuODEsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzNcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BvcnRcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNFwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImlubmVyMVwiLCBcImlubmVyMlwiLCBcImJvdHRvbVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogLTMuODEsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzRcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BvcnRcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNVwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImlubmVyMVwiLCBcImlubmVyMlwiLCBcImJvdHRvbVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogLTEuMjcsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzVcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BvcnRcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNlwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImlubmVyMVwiLCBcImlubmVyMlwiLCBcImJvdHRvbVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogMS4yNyxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfNlwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcG9ydFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF83XCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiaW5uZXIxXCIsIFwiaW5uZXIyXCIsIFwiYm90dG9tXCJdLFxuICAgICAgICB4OiAzLjgxLFxuICAgICAgICB5OiAzLjgxLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF83XCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImNhZF9jb21wb25lbnRcIixcbiAgICAgICAgY2FkX2NvbXBvbmVudF9pZDogXCJjYWRfY29tcG9uZW50XzBcIixcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgejogMC43LFxuICAgICAgICB9LFxuICAgICAgICByb3RhdGlvbjoge1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMCxcbiAgICAgICAgICB6OiAwLFxuICAgICAgICB9LFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgICBmb290cHJpbnRlcl9zdHJpbmc6IFwiZGlwOFwiLFxuICAgICAgfSxcbiAgICBdLFxuICB9KVxuXG4gIC8vIEFkZCBhIHNuaXBwZXQgdGhhdCBvdXRwdXRzIGEgc3F1YXJlIHdhdmVmb3JtIHVzaW5nIHRoZSBhNTU1dGltZXJcblxuICBjb25zdCB7IHBhY2thZ2VfcmVsZWFzZV9pZDogcGFja2FnZVJlbGVhc2VJZDIgfSA9IGRiLmFkZFNuaXBwZXQoe1xuICAgIG5hbWU6IFwidGVzdHVzZXIvYTU1NXRpbWVyLXNxdWFyZS13YXZlXCIsXG4gICAgdW5zY29wZWRfbmFtZTogXCJhNTU1dGltZXItc3F1YXJlLXdhdmVcIixcbiAgICBvd25lcl9uYW1lOiBcInRlc3R1c2VyXCIsXG4gICAgYnJhbmNoX25hbWU6IFwibWFpblwiLFxuICAgIGNvbW1pdF9tZXNzYWdlOiBcIkF0dGVtcHRlZCBidWlsZCBvZiBhNTU1dGltZXItc3F1YXJlLXdhdmUgcGFja2FnZVwiLFxuICAgIGNvbW1pdF9hdXRob3I6IFwidGVzdHVzZXJcIixcbiAgICBjcmVhdG9yX2FjY291bnRfaWQ6IGFjY291bnRfaWQsXG4gICAgY29kZTogYFxuaW1wb3J0IHsgQTU1NVRpbWVyIH0gZnJvbSBcIkB0c2NpL3NldmVpYmFyLmE1NTV0aW1lclwiXG5cbmV4cG9ydCBjb25zdCBTcXVhcmVXYXZlTW9kdWxlID0gKCkgPT4gKFxuICA8QTU1NVRpbWVyIG5hbWU9XCJVMVwiIC8+XG4pXG5gLnRyaW0oKSxcbiAgICBkdHM6ICdleHBvcnQgZGVjbGFyZSBjb25zdCBTcXVhcmVXYXZlTW9kdWxlOiAoKSA9PiBpbXBvcnQoXCJyZWFjdC9qc3gtcnVudGltZVwiKS5KU1guRWxlbWVudDtcXG4nLFxuICAgIGNvbXBpbGVkX2pzOlxuICAgICAgJ1widXNlIHN0cmljdFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xcbiAgdmFsdWU6IHRydWVcXG59KTtcXG5leHBvcnRzLlNxdWFyZVdhdmVNb2R1bGUgPSB2b2lkIDA7XFxudmFyIF9zZXZlaWJhciA9IHJlcXVpcmUoXCJAdHNjaS9zZXZlaWJhci5hNTU1dGltZXJcIik7XFxuY29uc3QgU3F1YXJlV2F2ZU1vZHVsZSA9ICgpID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KF9zZXZlaWJhci5BNTU1VGltZXIsIHtcXG4gIG5hbWU6IFwiVTFcIlxcbn0pO1xcbmV4cG9ydHMuU3F1YXJlV2F2ZU1vZHVsZSA9IFNxdWFyZVdhdmVNb2R1bGU7JyxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHNuaXBwZXRfdHlwZTogXCJwYWNrYWdlXCIsXG4gICAgZ2l0aHViX3JlcG9fZnVsbF9uYW1lOiBcInRlc3R1c2VyL3Rlc3RcIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiQSBzaW1wbGUgcGFja2FnZSB0aGF0IG91dHB1dHMgYSBzcXVhcmUgd2F2ZWZvcm0gdXNpbmcgdGhlIGE1NTV0aW1lclwiLFxuICAgIGNpcmN1aXRfanNvbjogW1xuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9wb3J0XCIsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzBcIixcbiAgICAgICAgbmFtZTogXCJwaW4xXCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDEsXG4gICAgICAgIHBvcnRfaGludHM6IFtcInBpbjFcIiwgXCIxXCJdLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8xXCIsXG4gICAgICAgIG5hbWU6IFwicGluMlwiLFxuICAgICAgICBwaW5fbnVtYmVyOiAyLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW4yXCIsIFwiMlwiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX3BvcnRcIixcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMlwiLFxuICAgICAgICBuYW1lOiBcInBpbjNcIixcbiAgICAgICAgcGluX251bWJlcjogMyxcbiAgICAgICAgcG9ydF9oaW50czogW1wicGluM1wiLCBcIjNcIl0sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9wb3J0XCIsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzNcIixcbiAgICAgICAgbmFtZTogXCJwaW40XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDQsXG4gICAgICAgIHBvcnRfaGludHM6IFtcInBpbjRcIiwgXCI0XCJdLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF80XCIsXG4gICAgICAgIG5hbWU6IFwicGluNVwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA1LFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW41XCIsIFwiNVwiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX3BvcnRcIixcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfNVwiLFxuICAgICAgICBuYW1lOiBcInBpbjZcIixcbiAgICAgICAgcGluX251bWJlcjogNixcbiAgICAgICAgcG9ydF9oaW50czogW1wicGluNlwiLCBcIjZcIl0sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9wb3J0XCIsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzZcIixcbiAgICAgICAgbmFtZTogXCJwaW43XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDcsXG4gICAgICAgIHBvcnRfaGludHM6IFtcInBpbjdcIiwgXCI3XCJdLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzb3VyY2VfcG9ydFwiLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF83XCIsXG4gICAgICAgIG5hbWU6IFwicGluOFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA4LFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCJwaW44XCIsIFwiOFwiXSxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX2NvbXBvbmVudFwiLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgICBmdHlwZTogXCJzaW1wbGVfY2hpcFwiLFxuICAgICAgICBuYW1lOiBcIlUxXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19jb21wb25lbnRcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICB9LFxuICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgc2l6ZToge1xuICAgICAgICAgIHdpZHRoOiAxLjEsXG4gICAgICAgICAgaGVpZ2h0OiAxLFxuICAgICAgICB9LFxuICAgICAgICBwaW5fc3BhY2luZzogMC4yLFxuICAgICAgICBwb3J0X2xhYmVsczoge30sXG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IFwic291cmNlX2NvbXBvbmVudF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzBcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogLTAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAwLjMwMDAwMDAwMDAwMDAwMDA0LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8wXCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwibGVmdFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcImxlZnRcIixcbiAgICAgICAgcGluX251bWJlcjogMSxcbiAgICAgICAgdHJ1ZV9jY3dfaW5kZXg6IDAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzFcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogLTAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAwLjEwMDAwMDAwMDAwMDAwMDAzLFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8xXCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwibGVmdFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcImxlZnRcIixcbiAgICAgICAgcGluX251bWJlcjogMixcbiAgICAgICAgdHJ1ZV9jY3dfaW5kZXg6IDEsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzJcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogLTAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAtMC4wOTk5OTk5OTk5OTk5OTk5OCxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMlwiLFxuICAgICAgICBmYWNpbmdfZGlyZWN0aW9uOiBcImxlZnRcIixcbiAgICAgICAgZGlzdGFuY2VfZnJvbV9jb21wb25lbnRfZWRnZTogMC40LFxuICAgICAgICBzaWRlX29mX2NvbXBvbmVudDogXCJsZWZ0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDMsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiAyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF8zXCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IC0wLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogLTAuMzAwMDAwMDAwMDAwMDAwMDQsXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzNcIixcbiAgICAgICAgZmFjaW5nX2RpcmVjdGlvbjogXCJsZWZ0XCIsXG4gICAgICAgIGRpc3RhbmNlX2Zyb21fY29tcG9uZW50X2VkZ2U6IDAuNCxcbiAgICAgICAgc2lkZV9vZl9jb21wb25lbnQ6IFwibGVmdFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA0LFxuICAgICAgICB0cnVlX2Njd19pbmRleDogMyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic2NoZW1hdGljX3BvcnRcIixcbiAgICAgICAgc2NoZW1hdGljX3BvcnRfaWQ6IFwic2NoZW1hdGljX3BvcnRfNFwiLFxuICAgICAgICBzY2hlbWF0aWNfY29tcG9uZW50X2lkOiBcInNjaGVtYXRpY19jb21wb25lbnRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAwLjk1MDAwMDAwMDAwMDAwMDEsXG4gICAgICAgICAgeTogLTAuMzAwMDAwMDAwMDAwMDAwMDQsXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzRcIixcbiAgICAgICAgZmFjaW5nX2RpcmVjdGlvbjogXCJyaWdodFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcInJpZ2h0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDUsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiA0LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF81XCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IDAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAtMC4xMDAwMDAwMDAwMDAwMDAwMyxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfNVwiLFxuICAgICAgICBmYWNpbmdfZGlyZWN0aW9uOiBcInJpZ2h0XCIsXG4gICAgICAgIGRpc3RhbmNlX2Zyb21fY29tcG9uZW50X2VkZ2U6IDAuNCxcbiAgICAgICAgc2lkZV9vZl9jb21wb25lbnQ6IFwicmlnaHRcIixcbiAgICAgICAgcGluX251bWJlcjogNixcbiAgICAgICAgdHJ1ZV9jY3dfaW5kZXg6IDUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNjaGVtYXRpY19wb3J0XCIsXG4gICAgICAgIHNjaGVtYXRpY19wb3J0X2lkOiBcInNjaGVtYXRpY19wb3J0XzZcIixcbiAgICAgICAgc2NoZW1hdGljX2NvbXBvbmVudF9pZDogXCJzY2hlbWF0aWNfY29tcG9uZW50XzBcIixcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogMC45NTAwMDAwMDAwMDAwMDAxLFxuICAgICAgICAgIHk6IDAuMDk5OTk5OTk5OTk5OTk5OTgsXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzZcIixcbiAgICAgICAgZmFjaW5nX2RpcmVjdGlvbjogXCJyaWdodFwiLFxuICAgICAgICBkaXN0YW5jZV9mcm9tX2NvbXBvbmVudF9lZGdlOiAwLjQsXG4gICAgICAgIHNpZGVfb2ZfY29tcG9uZW50OiBcInJpZ2h0XCIsXG4gICAgICAgIHBpbl9udW1iZXI6IDcsXG4gICAgICAgIHRydWVfY2N3X2luZGV4OiA2LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzY2hlbWF0aWNfcG9ydFwiLFxuICAgICAgICBzY2hlbWF0aWNfcG9ydF9pZDogXCJzY2hlbWF0aWNfcG9ydF83XCIsXG4gICAgICAgIHNjaGVtYXRpY19jb21wb25lbnRfaWQ6IFwic2NoZW1hdGljX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgIHg6IDAuOTUwMDAwMDAwMDAwMDAwMSxcbiAgICAgICAgICB5OiAwLjMwMDAwMDAwMDAwMDAwMDA0LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF83XCIsXG4gICAgICAgIGZhY2luZ19kaXJlY3Rpb246IFwicmlnaHRcIixcbiAgICAgICAgZGlzdGFuY2VfZnJvbV9jb21wb25lbnRfZWRnZTogMC40LFxuICAgICAgICBzaWRlX29mX2NvbXBvbmVudDogXCJyaWdodFwiLFxuICAgICAgICBwaW5fbnVtYmVyOiA4LFxuICAgICAgICB0cnVlX2Njd19pbmRleDogNyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX2NvbXBvbmVudFwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIHdpZHRoOiA4LjgyLFxuICAgICAgICBoZWlnaHQ6IDguODIsXG4gICAgICAgIGxheWVyOiBcInRvcFwiLFxuICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX2JvYXJkXCIsXG4gICAgICAgIHBjYl9ib2FyZF9pZDogXCJwY2JfYm9hcmRfMFwiLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIHRoaWNrbmVzczogMS40LFxuICAgICAgICBudW1fbGF5ZXJzOiA0LFxuICAgICAgICB3aWR0aDogNTAsXG4gICAgICAgIGhlaWdodDogNTAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wbGF0ZWRfaG9sZVwiLFxuICAgICAgICBwY2JfcGxhdGVkX2hvbGVfaWQ6IFwicGNiX3BsYXRlZF9ob2xlXzBcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfMFwiLFxuICAgICAgICBvdXRlcl9kaWFtZXRlcjogMS4yLFxuICAgICAgICBob2xlX2RpYW1ldGVyOiAxLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcG9ydF9oaW50czogW1wiMVwiXSxcbiAgICAgICAgeDogLTMuODEsXG4gICAgICAgIHk6IDMuODEsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiYm90dG9tXCJdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcGxhdGVkX2hvbGVcIixcbiAgICAgICAgcGNiX3BsYXRlZF9ob2xlX2lkOiBcInBjYl9wbGF0ZWRfaG9sZV8xXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzFcIixcbiAgICAgICAgb3V0ZXJfZGlhbWV0ZXI6IDEuMixcbiAgICAgICAgaG9sZV9kaWFtZXRlcjogMSxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBvcnRfaGludHM6IFtcIjJcIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAxLjI3LFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfMlwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8yXCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCIzXCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogLTEuMjcsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiYm90dG9tXCJdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcGxhdGVkX2hvbGVcIixcbiAgICAgICAgcGNiX3BsYXRlZF9ob2xlX2lkOiBcInBjYl9wbGF0ZWRfaG9sZV8zXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzNcIixcbiAgICAgICAgb3V0ZXJfZGlhbWV0ZXI6IDEuMixcbiAgICAgICAgaG9sZV9kaWFtZXRlcjogMSxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBvcnRfaGludHM6IFtcIjRcIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAtMy44MSxcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wbGF0ZWRfaG9sZVwiLFxuICAgICAgICBwY2JfcGxhdGVkX2hvbGVfaWQ6IFwicGNiX3BsYXRlZF9ob2xlXzRcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNFwiLFxuICAgICAgICBvdXRlcl9kaWFtZXRlcjogMS4yLFxuICAgICAgICBob2xlX2RpYW1ldGVyOiAxLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcG9ydF9oaW50czogW1wiNVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogLTMuODEsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiYm90dG9tXCJdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcGxhdGVkX2hvbGVcIixcbiAgICAgICAgcGNiX3BsYXRlZF9ob2xlX2lkOiBcInBjYl9wbGF0ZWRfaG9sZV81XCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzVcIixcbiAgICAgICAgb3V0ZXJfZGlhbWV0ZXI6IDEuMixcbiAgICAgICAgaG9sZV9kaWFtZXRlcjogMSxcbiAgICAgICAgc2hhcGU6IFwiY2lyY2xlXCIsXG4gICAgICAgIHBvcnRfaGludHM6IFtcIjZcIl0sXG4gICAgICAgIHg6IDMuODEsXG4gICAgICAgIHk6IC0xLjI3LFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfNlwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF82XCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCI3XCJdLFxuICAgICAgICB4OiAzLjgxLFxuICAgICAgICB5OiAxLjI3LFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BsYXRlZF9ob2xlXCIsXG4gICAgICAgIHBjYl9wbGF0ZWRfaG9sZV9pZDogXCJwY2JfcGxhdGVkX2hvbGVfN1wiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF83XCIsXG4gICAgICAgIG91dGVyX2RpYW1ldGVyOiAxLjIsXG4gICAgICAgIGhvbGVfZGlhbWV0ZXI6IDEsXG4gICAgICAgIHNoYXBlOiBcImNpcmNsZVwiLFxuICAgICAgICBwb3J0X2hpbnRzOiBbXCI4XCJdLFxuICAgICAgICB4OiAzLjgxLFxuICAgICAgICB5OiAzLjgxLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3NpbGtzY3JlZW5fcGF0aFwiLFxuICAgICAgICBwY2Jfc2lsa3NjcmVlbl9wYXRoX2lkOiBcInBjYl9zaWxrc2NyZWVuX3BhdGhfMFwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcjogXCJ0b3BcIixcbiAgICAgICAgcm91dGU6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAtMy4wMSxcbiAgICAgICAgICAgIHk6IC00LjYxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTMuMDEsXG4gICAgICAgICAgICB5OiA0LjYxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTEuMDAzMzMzMzMzMzMzMzMzMixcbiAgICAgICAgICAgIHk6IDQuNjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAtMC45MjY5NTkxMzA5NTI5OTA5LFxuICAgICAgICAgICAgeTogNC4yMjYwNDA5NTYxOTM2OTMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAtMC43MDk0NjM4MDM3OTA1MDI2LFxuICAgICAgICAgICAgeTogMy45MDA1MzYxOTYyMDk0OTc4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeDogLTAuMzgzOTU5MDQzODA2MzA2NyxcbiAgICAgICAgICAgIHk6IDMuNjgzMDQwODY5MDQ3MDA5NixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDYuMTQzNjQ0Nzc1NzIyNTU2ZS0xNyxcbiAgICAgICAgICAgIHk6IDMuNjA2NjY2NjY2NjY2NjY3NCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDAuMzgzOTU5MDQzODA2MzA2NzQsXG4gICAgICAgICAgICB5OiAzLjY4MzA0MDg2OTA0NzAwOTYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAwLjcwOTQ2MzgwMzc5MDUwMjcsXG4gICAgICAgICAgICB5OiAzLjkwMDUzNjE5NjIwOTQ5NzgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAwLjkyNjk1OTEzMDk1Mjk5MDksXG4gICAgICAgICAgICB5OiA0LjIyNjA0MDk1NjE5MzY5MyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDEuMDAzMzMzMzMzMzMzMzMzMixcbiAgICAgICAgICAgIHk6IDQuNjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAzLjAxLFxuICAgICAgICAgICAgeTogNC42MSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDMuMDEsXG4gICAgICAgICAgICB5OiAtNC42MSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IC0zLjAxLFxuICAgICAgICAgICAgeTogLTQuNjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc3Ryb2tlX3dpZHRoOiAwLjEsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzBcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAzLjgxLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8wXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzFcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAxLjI3LFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF8xXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInBjYl9wb3J0XCIsXG4gICAgICAgIHBjYl9wb3J0X2lkOiBcInBjYl9wb3J0XzJcIixcbiAgICAgICAgcGNiX2NvbXBvbmVudF9pZDogXCJwY2JfY29tcG9uZW50XzBcIixcbiAgICAgICAgbGF5ZXJzOiBbXCJ0b3BcIiwgXCJpbm5lcjFcIiwgXCJpbm5lcjJcIiwgXCJib3R0b21cIl0sXG4gICAgICAgIHg6IC0zLjgxLFxuICAgICAgICB5OiAtMS4yNyxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfMlwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcG9ydFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF8zXCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiaW5uZXIxXCIsIFwiaW5uZXIyXCIsIFwiYm90dG9tXCJdLFxuICAgICAgICB4OiAtMy44MSxcbiAgICAgICAgeTogLTMuODEsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzNcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BvcnRcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNFwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImlubmVyMVwiLCBcImlubmVyMlwiLCBcImJvdHRvbVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogLTMuODEsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzRcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BvcnRcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNVwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImlubmVyMVwiLCBcImlubmVyMlwiLCBcImJvdHRvbVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogLTEuMjcsXG4gICAgICAgIHNvdXJjZV9wb3J0X2lkOiBcInNvdXJjZV9wb3J0XzVcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwicGNiX3BvcnRcIixcbiAgICAgICAgcGNiX3BvcnRfaWQ6IFwicGNiX3BvcnRfNlwiLFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBsYXllcnM6IFtcInRvcFwiLCBcImlubmVyMVwiLCBcImlubmVyMlwiLCBcImJvdHRvbVwiXSxcbiAgICAgICAgeDogMy44MSxcbiAgICAgICAgeTogMS4yNyxcbiAgICAgICAgc291cmNlX3BvcnRfaWQ6IFwic291cmNlX3BvcnRfNlwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJwY2JfcG9ydFwiLFxuICAgICAgICBwY2JfcG9ydF9pZDogXCJwY2JfcG9ydF83XCIsXG4gICAgICAgIHBjYl9jb21wb25lbnRfaWQ6IFwicGNiX2NvbXBvbmVudF8wXCIsXG4gICAgICAgIGxheWVyczogW1widG9wXCIsIFwiaW5uZXIxXCIsIFwiaW5uZXIyXCIsIFwiYm90dG9tXCJdLFxuICAgICAgICB4OiAzLjgxLFxuICAgICAgICB5OiAzLjgxLFxuICAgICAgICBzb3VyY2VfcG9ydF9pZDogXCJzb3VyY2VfcG9ydF83XCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImNhZF9jb21wb25lbnRcIixcbiAgICAgICAgY2FkX2NvbXBvbmVudF9pZDogXCJjYWRfY29tcG9uZW50XzBcIixcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgejogMC43LFxuICAgICAgICB9LFxuICAgICAgICByb3RhdGlvbjoge1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMCxcbiAgICAgICAgICB6OiAwLFxuICAgICAgICB9LFxuICAgICAgICBwY2JfY29tcG9uZW50X2lkOiBcInBjYl9jb21wb25lbnRfMFwiLFxuICAgICAgICBzb3VyY2VfY29tcG9uZW50X2lkOiBcInNvdXJjZV9jb21wb25lbnRfMFwiLFxuICAgICAgICBmb290cHJpbnRlcl9zdHJpbmc6IFwiZGlwOFwiLFxuICAgICAgfSxcbiAgICBdLFxuICB9KVxuXG4gIC8vIEFkZCBmYWlsZWQgYnVpbGQgZmlyc3RcbiAgY29uc3QgZmFpbGVkQnVpbGQgPSBkYi5hZGRQYWNrYWdlQnVpbGQoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogcGFja2FnZVJlbGVhc2VJZDIsXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDE1MDAwKS50b0lTT1N0cmluZygpLCAvLyAxNSBzZWNvbmRzIGFnb1xuICAgIHRyYW5zcGlsYXRpb25faW5fcHJvZ3Jlc3M6IGZhbHNlLFxuICAgIHRyYW5zcGlsYXRpb25fc3RhcnRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDE1MDAwKS50b0lTT1N0cmluZygpLFxuICAgIHRyYW5zcGlsYXRpb25fY29tcGxldGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTQwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgdHJhbnNwaWxhdGlvbl9sb2dzOiBbXG4gICAgICBcIltJTkZPXSBTdGFydGluZyB0cmFuc3BpbGF0aW9uLi4uXCIsXG4gICAgICBcIltJTkZPXSBQYXJzaW5nIHBhY2thZ2UgY29kZVwiLFxuICAgICAgXCJbRVJST1JdIEZhaWxlZCB0byBwYXJzZSBUeXBlU2NyaXB0IGRlZmluaXRpb25zXCIsXG4gICAgICBcIltFUlJPUl0gSW52YWxpZCBzeW50YXggaW4gY29tcG9uZW50IGRlY2xhcmF0aW9uXCIsXG4gICAgXSxcbiAgICB0cmFuc3BpbGF0aW9uX2Vycm9yOlxuICAgICAgXCJUeXBlU2NyaXB0IGNvbXBpbGF0aW9uIGZhaWxlZDogU3ludGF4IGVycm9yIGluIGNvbXBvbmVudCBkZWNsYXJhdGlvblwiLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9pbl9wcm9ncmVzczogZmFsc2UsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX3N0YXJ0ZWRfYXQ6IG51bGwsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2NvbXBsZXRlZF9hdDogbnVsbCxcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfbG9nczogW10sXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2Vycm9yOiBcIkJ1aWxkIGNhbmNlbGxlZCBkdWUgdG8gdHJhbnNwaWxhdGlvbiBmYWlsdXJlXCIsXG4gICAgYnVpbGRfaW5fcHJvZ3Jlc3M6IGZhbHNlLFxuICAgIGJ1aWxkX3N0YXJ0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxNTAwMCkudG9JU09TdHJpbmcoKSxcbiAgICBidWlsZF9jb21wbGV0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxNDAwMCkudG9JU09TdHJpbmcoKSxcbiAgICBidWlsZF9lcnJvcjogXCJCdWlsZCBmYWlsZWQ6IFVuYWJsZSB0byBjb21wbGV0ZSB0cmFuc3BpbGF0aW9uIHN0ZXBcIixcbiAgICBidWlsZF9lcnJvcl9sYXN0X3VwZGF0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxNDAwMCkudG9JU09TdHJpbmcoKSxcbiAgICBwcmV2aWV3X3VybDogbnVsbCxcbiAgICBidWlsZF9sb2dzOlxuICAgICAgXCJCdWlsZCBwcm9jZXNzOlxcblwiICtcbiAgICAgIFwiMS4gRW52aXJvbm1lbnQgc2V0dXAgLSBPS1xcblwiICtcbiAgICAgIFwiMi4gRGVwZW5kZW5jeSByZXNvbHV0aW9uIC0gT0tcXG5cIiArXG4gICAgICBcIjMuIENvZGUgY29tcGlsYXRpb24gLSBGQUlMRURcXG5cIiArXG4gICAgICBcIkVycm9yOiBJbnZhbGlkIHN5bnRheCBpbiBjb21wb25lbnQgZGVjbGFyYXRpb25cXG5cIiArXG4gICAgICBcIkJ1aWxkIHRlcm1pbmF0ZWQgd2l0aCBlcnJvcnNcIixcbiAgfSlcblxuICAvLyBBZGQgc3VjY2Vzc2Z1bCBidWlsZFxuICBjb25zdCBzdWNjZXNzZnVsQnVpbGQgPSBkYi5hZGRQYWNrYWdlQnVpbGQoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogcGFja2FnZVJlbGVhc2VJZDIsXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHRyYW5zcGlsYXRpb25faW5fcHJvZ3Jlc3M6IGZhbHNlLFxuICAgIHRyYW5zcGlsYXRpb25fc3RhcnRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDUwMDApLnRvSVNPU3RyaW5nKCksIC8vIFN0YXJ0ZWQgNSBzZWNvbmRzIGFnb1xuICAgIHRyYW5zcGlsYXRpb25fY29tcGxldGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMzAwMCkudG9JU09TdHJpbmcoKSwgLy8gQ29tcGxldGVkIDMgc2Vjb25kcyBhZ29cbiAgICB0cmFuc3BpbGF0aW9uX2xvZ3M6IFtcbiAgICAgIFwiW0lORk9dIFN0YXJ0aW5nIHRyYW5zcGlsYXRpb24uLi5cIixcbiAgICAgIFwiW0lORk9dIFBhcnNpbmcgcGFja2FnZSBjb2RlXCIsXG4gICAgICBcIltJTkZPXSBHZW5lcmF0aW5nIFR5cGVTY3JpcHQgZGVmaW5pdGlvbnNcIixcbiAgICAgIFwiW0lORk9dIENvbXBpbGluZyB0byBKYXZhU2NyaXB0XCIsXG4gICAgICBcIltTVUNDRVNTXSBUcmFuc3BpbGF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIixcbiAgICBdLFxuICAgIHRyYW5zcGlsYXRpb25fZXJyb3I6IG51bGwsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2luX3Byb2dyZXNzOiBmYWxzZSxcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfc3RhcnRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDMwMDApLnRvSVNPU3RyaW5nKCksIC8vIFN0YXJ0ZWQgYWZ0ZXIgdHJhbnNwaWxhdGlvblxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9jb21wbGV0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxMDAwKS50b0lTT1N0cmluZygpLCAvLyBDb21wbGV0ZWQgMSBzZWNvbmQgYWdvXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2xvZ3M6IFtcbiAgICAgIFwiW0lORk9dIFN0YXJ0aW5nIGNpcmN1aXQgSlNPTiBidWlsZC4uLlwiLFxuICAgICAgXCJbSU5GT10gQW5hbHl6aW5nIGNvbXBvbmVudCBzdHJ1Y3R1cmVcIixcbiAgICAgIFwiW0lORk9dIEdlbmVyYXRpbmcgcG9ydCBjb25maWd1cmF0aW9uc1wiLFxuICAgICAgXCJbSU5GT10gVmFsaWRhdGluZyBjaXJjdWl0IGNvbm5lY3Rpb25zXCIsXG4gICAgICBcIltTVUNDRVNTXSBDaXJjdWl0IEpTT04gYnVpbGQgY29tcGxldGVkXCIsXG4gICAgXSxcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfZXJyb3I6IG51bGwsXG4gICAgYnVpbGRfaW5fcHJvZ3Jlc3M6IGZhbHNlLFxuICAgIGJ1aWxkX3N0YXJ0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxMDAwMCkudG9JU09TdHJpbmcoKSwgLy8gU3RhcnRlZCAxMCBzZWNvbmRzIGFnb1xuICAgIGJ1aWxkX2NvbXBsZXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLCAvLyBKdXN0IGNvbXBsZXRlZFxuICAgIGJ1aWxkX2Vycm9yOiBudWxsLFxuICAgIGJ1aWxkX2Vycm9yX2xhc3RfdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHByZXZpZXdfdXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9wcmV2aWV3L3BhY2thZ2VfYnVpbGRfMVwiLFxuICAgIGJ1aWxkX2xvZ3M6XG4gICAgICBcIkJ1aWxkIHByb2Nlc3M6XFxuXCIgK1xuICAgICAgXCIxLiBFbnZpcm9ubWVudCBzZXR1cCAtIE9LXFxuXCIgK1xuICAgICAgXCIyLiBEZXBlbmRlbmN5IHJlc29sdXRpb24gLSBPS1xcblwiICtcbiAgICAgIFwiMy4gQ29kZSBjb21waWxhdGlvbiAtIE9LXFxuXCIgK1xuICAgICAgXCI0LiBDaXJjdWl0IHZhbGlkYXRpb24gLSBPS1xcblwiICtcbiAgICAgIFwiNS4gUGFja2FnZSBhc3NlbWJseSAtIE9LXFxuXCIgK1xuICAgICAgXCJCdWlsZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIsXG4gIH0pXG5cbiAgLy8gVXBkYXRlIHRoZSBwYWNrYWdlIHJlbGVhc2Ugd2l0aCB0aGUgbGF0ZXN0IChzdWNjZXNzZnVsKSBidWlsZCBJRFxuICBjb25zdCByZWxlYXNlMiA9IGRiLmdldFBhY2thZ2VSZWxlYXNlQnlJZChwYWNrYWdlUmVsZWFzZUlkMikhXG4gIGRiLnVwZGF0ZVBhY2thZ2VSZWxlYXNlKHtcbiAgICAuLi5yZWxlYXNlMixcbiAgICBsYXRlc3RfcGFja2FnZV9idWlsZF9pZDogc3VjY2Vzc2Z1bEJ1aWxkLnBhY2thZ2VfYnVpbGRfaWQsXG4gIH0pXG5cbiAgZGIuYWRkT3JkZXIoe1xuICAgIGFjY291bnRfaWQsXG4gICAgaXNfcnVubmluZzogZmFsc2UsXG4gICAgaXNfc3RhcnRlZDogZmFsc2UsXG4gICAgaXNfZmluaXNoZWQ6IGZhbHNlLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGhhc19lcnJvcjogZmFsc2UsXG4gICAgY2lyY3VpdF9qc29uOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic291cmNlX2NvbXBvbmVudFwiLFxuICAgICAgICBmdHlwZTogXCJzaW1wbGVfcmVzaXN0b3JcIixcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzFcIixcbiAgICAgICAgbmFtZTogXCJSMVwiLFxuICAgICAgICByZXNpc3RhbmU6IFwiMWtcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgc3RhcnRlZF9hdDogbnVsbCxcbiAgICBjb21wbGV0ZWRfYXQ6IG51bGwsXG4gIH0pXG5cbiAgY29uc3QgdGVzdE9yZyA9IGRiLmFkZE9yZ2FuaXphdGlvbih7XG4gICAgb3JnX2Rpc3BsYXlfbmFtZTogXCJUZXN0IE9yZ2FuaXphdGlvblwiLFxuICAgIHRzY2lyY3VpdF9oYW5kbGU6IFwidGVzdC1vcmdhbml6YXRpb25cIixcbiAgICBnaXRodWJfaGFuZGxlOiBcInRzY2lyY3VpdFwiLFxuICAgIG93bmVyX2FjY291bnRfaWQ6IGFjY291bnRfaWQsXG4gIH0pXG5cbiAgLy8gQWRkIG9yZyBtZW1iZXJcbiAgZGIuYWRkT3JnYW5pemF0aW9uQWNjb3VudCh7XG4gICAgb3JnX2lkOiB0ZXN0T3JnLm9yZ19pZCxcbiAgICBhY2NvdW50X2lkOiBhY2NvdW50X2lkLFxuICAgIGlzX293bmVyOiB0cnVlLFxuICB9KVxuXG4gIC8vIFRlc3QgIE9yZyBQYWNrYWdlIGFkZGl0aW9uXG4gIGNvbnN0IHRlc3RPcmdQYWNrYWdlID0gZGIuYWRkUGFja2FnZSh7XG4gICAgbmFtZTogXCJ0ZXN0LW9yZ2FuaXphdGlvbi90ZXN0LW9yZy1wYWNrYWdlXCIsXG4gICAgdW5zY29wZWRfbmFtZTogXCJ0ZXN0LW9yZy1wYWNrYWdlXCIsXG4gICAgY3JlYXRvcl9hY2NvdW50X2lkOiBhY2NvdW50X2lkLFxuICAgIG93bmVyX29yZ19pZDogdGVzdE9yZy5vcmdfaWQsXG4gICAgb3duZXJfZ2l0aHViX3VzZXJuYW1lOiB0ZXN0T3JnLmdpdGh1Yl9oYW5kbGUsXG4gICAgZGVzY3JpcHRpb246IFwiQSB0ZXN0IHBhY2thZ2UgZm9yIGRldmVsb3BtZW50XCIsXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBpc19zb3VyY2VfZnJvbV9naXRodWI6IGZhbHNlLFxuICAgIHNuaXBwZXRfdHlwZTogXCJwYWNrYWdlXCIsXG4gICAgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZDogbnVsbCxcbiAgICBsYXRlc3RfdmVyc2lvbjogXCIwLjAuMVwiLFxuICAgIGxpY2Vuc2U6IFwiTUlUXCIsXG4gICAgd2Vic2l0ZTogXCJodHRwczovL3RzY2lyY3VpdC5jb21cIixcbiAgICBzdGFyX2NvdW50OiAxMCxcbiAgICBhaV9kZXNjcmlwdGlvbjpcbiAgICAgIFwiQSBjb21wcmVoZW5zaXZlIHRlc3QgcGFja2FnZSBkZXNpZ25lZCBmb3IgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgcHVycG9zZXMuIFRoaXMgcGFja2FnZSBpbmNsdWRlcyB2YXJpb3VzIGNvbXBvbmVudHMgYW5kIHV0aWxpdGllcyBjb21tb25seSB1c2VkIGluIGNpcmN1aXQgZGVzaWduIGFuZCBzaW11bGF0aW9uIHdvcmtmbG93cy5cIixcbiAgICBhaV91c2FnZV9pbnN0cnVjdGlvbnM6XG4gICAgICBcIkltcG9ydCB0aGUgcGFja2FnZSB1c2luZyBgaW1wb3J0IHsgVGVzdENvbXBvbmVudCB9IGZyb20gJ0B0c2NpL3Rlc3Qtb3JnYW5pemF0aW9uLnRlc3Qtb3JnLXBhY2thZ2UnYC4gVXNlIHRoZSBUZXN0Q29tcG9uZW50IGluIHlvdXIgY2lyY3VpdCBkZXNpZ25zIGJ5IHByb3ZpZGluZyB0aGUgcmVxdWlyZWQgcHJvcHMuIEV4YW1wbGU6IGA8VGVzdENvbXBvbmVudCBuYW1lPSdteS10ZXN0JyB2YWx1ZT17NDJ9IC8+YFwiLFxuICAgIGRlZmF1bHRfdmlldzogXCJmaWxlc1wiLFxuICAgIGxhdGVzdF9wY2JfcHJldmlld19pbWFnZV91cmw6IGAvYXBpL3BhY2thZ2VzL2ltYWdlcy90ZXN0LW9yZ2FuaXphdGlvbi90ZXN0LW9yZy1wYWNrYWdlL3BjYi5wbmdgLFxuICAgIGxhdGVzdF9jYWRfcHJldmlld19pbWFnZV91cmw6IGAvYXBpL3BhY2thZ2VzL2ltYWdlcy90ZXN0LW9yZ2FuaXphdGlvbi90ZXN0LW9yZy1wYWNrYWdlLzNkLnBuZ2AsXG4gICAgbGF0ZXN0X3NjaF9wcmV2aWV3X2ltYWdlX3VybDogYC9hcGkvcGFja2FnZXMvaW1hZ2VzL3Rlc3Qtb3JnYW5pemF0aW9uL3Rlc3Qtb3JnLXBhY2thZ2Uvc2NoZW1hdGljLnBuZ2AsXG4gIH0pXG4gIGNvbnN0IHsgcGFja2FnZV9yZWxlYXNlX2lkOiB0ZXN0T3JnUGFja2FnZVJlbGVhc2VJZCB9ID0gZGIuYWRkUGFja2FnZVJlbGVhc2Uoe1xuICAgIHBhY2thZ2VfaWQ6IHRlc3RPcmdQYWNrYWdlLnBhY2thZ2VfaWQsXG4gICAgdmVyc2lvbjogXCIwLjAuMVwiLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBpc19sYXRlc3Q6IHRydWUsXG4gICAgaXNfbG9ja2VkOiBmYWxzZSxcbiAgICBoYXNfdHJhbnNwaWxlZDogdHJ1ZSxcbiAgICB0cmFuc3BpbGF0aW9uX2Vycm9yOiBudWxsLFxuXG4gICAgcGNiX3ByZXZpZXdfaW1hZ2VfdXJsOiBgL2FwaS9wYWNrYWdlcy9pbWFnZXMvdGVzdC1vcmdhbml6YXRpb24vdGVzdC1vcmctcGFja2FnZS9wY2IucG5nYCxcbiAgICBjYWRfcHJldmlld19pbWFnZV91cmw6IGAvYXBpL3BhY2thZ2VzL2ltYWdlcy90ZXN0LW9yZ2FuaXphdGlvbi90ZXN0LW9yZy1wYWNrYWdlLzNkLnBuZ2AsXG4gICAgc2NoX3ByZXZpZXdfaW1hZ2VfdXJsOiBgL2FwaS9wYWNrYWdlcy9pbWFnZXMvdGVzdC1vcmdhbml6YXRpb24vdGVzdC1vcmctcGFja2FnZS9zY2hlbWF0aWMucG5nYCxcbiAgfSlcbiAgZGIuYWRkUGFja2FnZUZpbGUoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogdGVzdE9yZ1BhY2thZ2VSZWxlYXNlSWQsXG4gICAgZmlsZV9wYXRoOiBcImluZGV4LnRzeFwiLFxuICAgIGNvbnRlbnRfdGV4dDogYFxuICAgIGV4cG9ydCBjb25zdCBUZXN0Q29tcG9uZW50ID0gKHsgbmFtZSB9OiB7IG5hbWU6IHN0cmluZyB9KSA9PiAoXG4gICAgICA8cmVzaXN0b3IgbmFtZT17bmFtZX0gcmVzaXN0YW5jZT1cIjEwa1wiIC8+XG4gICAgKVxuICAgIGAudHJpbSgpLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgfSlcbiAgZGIuYWRkUGFja2FnZUZpbGUoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogdGVzdE9yZ1BhY2thZ2VSZWxlYXNlSWQsXG4gICAgZmlsZV9wYXRoOiBcIi9kaXN0L2NpcmN1aXQuanNvblwiLFxuICAgIGNvbnRlbnRfdGV4dDogYFtcbiAgICAgIHtcbiAgICAgICAgXCJ0eXBlXCI6IFwic291cmNlX3Byb2plY3RfbWV0YWRhdGFcIixcbiAgICAgICAgXCJzb3VyY2VfcHJvamVjdF9tZXRhZGF0YV9pZFwiOiBcInNvdXJjZV9wcm9qZWN0X21ldGFkYXRhXzBcIixcbiAgICAgICAgXCJzb2Z0d2FyZV91c2VkX3N0cmluZ1wiOiBcIkB0c2NpcmN1aXQvY29yZUAwLjAuODEzXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwidHlwZVwiOiBcInNvdXJjZV9ncm91cFwiLFxuICAgICAgICBcInNvdXJjZV9ncm91cF9pZFwiOiBcInNvdXJjZV9ncm91cF8wXCIsXG4gICAgICAgIFwiaXNfc3ViY2lyY3VpdFwiOiB0cnVlLFxuICAgICAgICBcIndhc19hdXRvbWF0aWNhbGx5X25hbWVkXCI6IHRydWUsXG4gICAgICAgIFwic3ViY2lyY3VpdF9pZFwiOiBcInN1YmNpcmN1aXRfc291cmNlX2dyb3VwXzBcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJ0eXBlXCI6IFwic291cmNlX2JvYXJkXCIsXG4gICAgICAgIFwic291cmNlX2JvYXJkX2lkXCI6IFwic291cmNlX2JvYXJkXzBcIixcbiAgICAgICAgXCJzb3VyY2VfZ3JvdXBfaWRcIjogXCJzb3VyY2VfZ3JvdXBfMFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcInR5cGVcIjogXCJzY2hlbWF0aWNfZ3JvdXBcIixcbiAgICAgICAgXCJzY2hlbWF0aWNfZ3JvdXBfaWRcIjogXCJzY2hlbWF0aWNfZ3JvdXBfMFwiLFxuICAgICAgICBcImlzX3N1YmNpcmN1aXRcIjogdHJ1ZSxcbiAgICAgICAgXCJzdWJjaXJjdWl0X2lkXCI6IFwic3ViY2lyY3VpdF9zb3VyY2VfZ3JvdXBfMFwiLFxuICAgICAgICBcIm5hbWVcIjogXCJ1bm5hbWVkX2JvYXJkMVwiLFxuICAgICAgICBcImNlbnRlclwiOiB7XG4gICAgICAgICAgXCJ4XCI6IDAsXG4gICAgICAgICAgXCJ5XCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3aWR0aFwiOiAwLFxuICAgICAgICBcImhlaWdodFwiOiAwLFxuICAgICAgICBcInNjaGVtYXRpY19jb21wb25lbnRfaWRzXCI6IFtdLFxuICAgICAgICBcInNvdXJjZV9ncm91cF9pZFwiOiBcInNvdXJjZV9ncm91cF8wXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwidHlwZVwiOiBcInBjYl9ib2FyZFwiLFxuICAgICAgICBcInBjYl9ib2FyZF9pZFwiOiBcInBjYl9ib2FyZF8wXCIsXG4gICAgICAgIFwiY2VudGVyXCI6IHtcbiAgICAgICAgICBcInhcIjogMCxcbiAgICAgICAgICBcInlcIjogMFxuICAgICAgICB9LFxuICAgICAgICBcInRoaWNrbmVzc1wiOiAxLjQsXG4gICAgICAgIFwibnVtX2xheWVyc1wiOiAyLFxuICAgICAgICBcIndpZHRoXCI6IDEwLFxuICAgICAgICBcImhlaWdodFwiOiAxMCxcbiAgICAgICAgXCJtYXRlcmlhbFwiOiBcImZyNFwiXG4gICAgICB9XG4gICAgXWAudHJpbSgpLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgfSlcbiAgZGIuYWRkUGFja2FnZUJ1aWxkKHtcbiAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHRlc3RPcmdQYWNrYWdlUmVsZWFzZUlkLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB0cmFuc3BpbGF0aW9uX2luX3Byb2dyZXNzOiBmYWxzZSxcbiAgICB0cmFuc3BpbGF0aW9uX3N0YXJ0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSA1MDAwKS50b0lTT1N0cmluZygpLCAvLyBTdGFydGVkIDUgc2Vjb25kcyBhZ29cbiAgICB0cmFuc3BpbGF0aW9uX2NvbXBsZXRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDMwMDApLnRvSVNPU3RyaW5nKCksIC8vIENvbXBsZXRlZCAzIHNlY29uZHMgYWdvXG4gICAgdHJhbnNwaWxhdGlvbl9sb2dzOiBbXG4gICAgICBcIltJTkZPXSBTdGFydGluZyB0cmFuc3BpbGF0aW9uLi4uXCIsXG4gICAgICBcIltJTkZPXSBQYXJzaW5nIHBhY2thZ2UgY29kZVwiLFxuICAgICAgXCJbSU5GT10gR2VuZXJhdGluZyBUeXBlU2NyaXB0IGRlZmluaXRpb25zXCIsXG4gICAgICBcIltJTkZPXSBDb21waWxpbmcgdG8gSmF2YVNjcmlwdFwiLFxuICAgICAgXCJbU1VDQ0VTU10gVHJhbnNwaWxhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIsXG4gICAgXSxcbiAgICB0cmFuc3BpbGF0aW9uX2Vycm9yOiBudWxsLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9pbl9wcm9ncmVzczogZmFsc2UsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX3N0YXJ0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzMDAwKS50b0lTT1N0cmluZygpLCAvLyBTdGFydGVkIGFmdGVyIHRyYW5zcGlsYXRpb25cbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfY29tcGxldGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTAwMCkudG9JU09TdHJpbmcoKSwgLy8gQ29tcGxldGVkIDEgc2Vjb25kIGFnb1xuICAgIGNpcmN1aXRfanNvbl9idWlsZF9sb2dzOiBbXG4gICAgICBcIltJTkZPXSBTdGFydGluZyBjaXJjdWl0IEpTT04gYnVpbGQuLi5cIixcbiAgICAgIFwiW0lORk9dIEFuYWx5emluZyBjb21wb25lbnQgc3RydWN0dXJlXCIsXG4gICAgICBcIltJTkZPXSBHZW5lcmF0aW5nIHBvcnQgY29uZmlndXJhdGlvbnNcIixcbiAgICAgIFwiW0lORk9dIFZhbGlkYXRpbmcgY2lyY3VpdCBjb25uZWN0aW9uc1wiLFxuICAgICAgXCJbU1VDQ0VTU10gQ2lyY3VpdCBKU09OIGJ1aWxkIGNvbXBsZXRlZFwiLFxuICAgIF0sXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2Vycm9yOiBudWxsLFxuICAgIGJ1aWxkX2luX3Byb2dyZXNzOiBmYWxzZSxcbiAgICBidWlsZF9zdGFydGVkX2F0OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTAwMDApLnRvSVNPU3RyaW5nKCksIC8vIFN0YXJ0ZWQgMTAgc2Vjb25kcyBhZ29cbiAgICBidWlsZF9jb21wbGV0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwgLy8gSnVzdCBjb21wbGV0ZWRcbiAgICBidWlsZF9lcnJvcjogbnVsbCxcbiAgICBidWlsZF9lcnJvcl9sYXN0X3VwZGF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBidWlsZF9sb2dzOlxuICAgICAgXCJCdWlsZCBwcm9jZXNzOlxcblwiICtcbiAgICAgIFwiMS4gRW52aXJvbm1lbnQgc2V0dXAgLSBPS1xcblwiICtcbiAgICAgIFwiMi4gRGVwZW5kZW5jeSByZXNvbHV0aW9uIC0gT0tcXG5cIiArXG4gICAgICBcIjMuIENvZGUgY29tcGlsYXRpb24gLSBPS1xcblwiICtcbiAgICAgIFwiNC4gQ2lyY3VpdCB2YWxpZGF0aW9uIC0gT0tcXG5cIiArXG4gICAgICBcIjUuIFBhY2thZ2UgYXNzZW1ibHkgLSBPS1xcblwiICtcbiAgICAgIFwiQnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiLFxuICB9KVxuXG4gIGNvbnN0IHsgcGFja2FnZV9yZWxlYXNlX2lkOiBvcmdQYWNrYWdlUmVsZWFzZUlkIH0gPSBkYi5hZGRTbmlwcGV0KHtcbiAgICBuYW1lOiBcInRlc3Qtb3JnYW5pemF0aW9uL3Rlc3QtcGFja2FnZVwiLFxuICAgIHVuc2NvcGVkX25hbWU6IFwidGVzdC1wYWNrYWdlXCIsXG4gICAgb3duZXJfbmFtZTogXCJ0ZXN0LW9yZ2FuaXphdGlvblwiLFxuICAgIGNvZGU6IGBcbmV4cG9ydCBjb25zdCBUZXN0Q29tcG9uZW50ID0gKHsgbmFtZSB9OiB7IG5hbWU6IHN0cmluZyB9KSA9PiAoXG4gIDxyZXNpc3RvciBuYW1lPXtuYW1lfSByZXNpc3RhbmNlPVwiMTBrXCIgLz5cbilcbmAudHJpbSgpLFxuICAgIGR0czogYFxuZGVjbGFyZSBtb2R1bGUgXCJAdHNjaS90ZXN0LW9yZ2FuaXphdGlvbi50ZXN0LXBhY2thZ2VcIiB7XG4gIGV4cG9ydCBjb25zdCBUZXN0Q29tcG9uZW50OiAoeyBuYW1lIH06IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gIH0pID0+IGFueTtcbn1cbmAudHJpbSgpLFxuICAgIGNvbXBpbGVkX2pzOiBgXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVGVzdENvbXBvbmVudCA9IHZvaWQgMDtcbmNvbnN0IFRlc3RDb21wb25lbnQgPSAoe1xuICBuYW1lXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlc2lzdG9yXCIsIHtcbiAgbmFtZTogbmFtZSxcbiAgcmVzaXN0YW5jZTogXCIxMGtcIlxufSk7XG5leHBvcnRzLlRlc3RDb21wb25lbnQgPSBUZXN0Q29tcG9uZW50O1xuICAgIGAudHJpbSgpLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB1cGRhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgc25pcHBldF90eXBlOiBcInBhY2thZ2VcIixcbiAgICBkZXNjcmlwdGlvbjogXCJUZXN0IHBhY2thZ2UgZm9yIG9yZ2FuaXphdGlvblwiLFxuICAgIGNpcmN1aXRfanNvbjogW1xuICAgICAge1xuICAgICAgICB0eXBlOiBcInNvdXJjZV9jb21wb25lbnRcIixcbiAgICAgICAgc291cmNlX2NvbXBvbmVudF9pZDogXCJzb3VyY2VfY29tcG9uZW50XzBcIixcbiAgICAgICAgZnR5cGU6IFwic2ltcGxlX3Jlc2lzdG9yXCIsXG4gICAgICAgIG5hbWU6IFwiUjFcIixcbiAgICAgICAgcmVzaXN0YW5jZTogXCIxMGtcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgfSlcblxuICAvLyBBZGQgc3VjY2Vzc2Z1bCBidWlsZCBmb3Igb3JnIHBhY2thZ2VcbiAgY29uc3Qgb3JnUGFja2FnZUJ1aWxkID0gZGIuYWRkUGFja2FnZUJ1aWxkKHtcbiAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IG9yZ1BhY2thZ2VSZWxlYXNlSWQsXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHRyYW5zcGlsYXRpb25faW5fcHJvZ3Jlc3M6IGZhbHNlLFxuICAgIHRyYW5zcGlsYXRpb25fc3RhcnRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDUwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgdHJhbnNwaWxhdGlvbl9jb21wbGV0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzMDAwKS50b0lTT1N0cmluZygpLFxuICAgIHRyYW5zcGlsYXRpb25fbG9nczogW1xuICAgICAgXCJbSU5GT10gU3RhcnRpbmcgdHJhbnNwaWxhdGlvbi4uLlwiLFxuICAgICAgXCJbU1VDQ0VTU10gVHJhbnNwaWxhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIsXG4gICAgXSxcbiAgICB0cmFuc3BpbGF0aW9uX2Vycm9yOiBudWxsLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9pbl9wcm9ncmVzczogZmFsc2UsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX3N0YXJ0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzMDAwKS50b0lTT1N0cmluZygpLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9jb21wbGV0ZWRfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxMDAwKS50b0lTT1N0cmluZygpLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9sb2dzOiBbXG4gICAgICBcIltJTkZPXSBTdGFydGluZyBjaXJjdWl0IEpTT04gYnVpbGQuLi5cIixcbiAgICAgIFwiW1NVQ0NFU1NdIENpcmN1aXQgSlNPTiBidWlsZCBjb21wbGV0ZWRcIixcbiAgICBdLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9lcnJvcjogbnVsbCxcbiAgICBidWlsZF9pbl9wcm9ncmVzczogZmFsc2UsXG4gICAgYnVpbGRfc3RhcnRlZF9hdDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDEwMDAwKS50b0lTT1N0cmluZygpLFxuICAgIGJ1aWxkX2NvbXBsZXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIGJ1aWxkX2Vycm9yOiBudWxsLFxuICAgIGJ1aWxkX2Vycm9yX2xhc3RfdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHByZXZpZXdfdXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9wcmV2aWV3L29yZ19wYWNrYWdlX2J1aWxkXCIsXG4gICAgYnVpbGRfbG9nczogXCJCdWlsZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIsXG4gIH0pXG5cbiAgLy8gVXBkYXRlIHRoZSBvcmcgcGFja2FnZSByZWxlYXNlIHdpdGggdGhlIGJ1aWxkIElEXG4gIGNvbnN0IG9yZ1JlbGVhc2UgPSBkYi5nZXRQYWNrYWdlUmVsZWFzZUJ5SWQob3JnUGFja2FnZVJlbGVhc2VJZCkhXG4gIGRiLnVwZGF0ZVBhY2thZ2VSZWxlYXNlKHtcbiAgICAuLi5vcmdSZWxlYXNlLFxuICAgIGxhdGVzdF9wYWNrYWdlX2J1aWxkX2lkOiBvcmdQYWNrYWdlQnVpbGQucGFja2FnZV9idWlsZF9pZCxcbiAgfSlcblxuICBkYi5hZGRPcmdhbml6YXRpb24oe1xuICAgIG5hbWU6IFwidGVzdHVzZXJcIixcbiAgICBvd25lcl9hY2NvdW50X2lkOiBhY2NvdW50X2lkLFxuICAgIGdpdGh1Yl9oYW5kbGU6IFwidHNjaXJjdWl0XCIsXG4gICAgaXNfcGVyc29uYWxfb3JnOiB0cnVlLFxuICAgIG9yZ19pZDogXCJvcmctMTIzNFwiLFxuICB9KVxuXG4gIGRiLmFkZE9yZ2FuaXphdGlvbkFjY291bnQoe1xuICAgIG9yZ19pZDogdGVzdE9yZy5vcmdfaWQsXG4gICAgYWNjb3VudF9pZDogc2V2ZWliYXJBY2MuYWNjb3VudF9pZCxcbiAgfSlcbn1cbiIsICJpbXBvcnQgbWQ1IGZyb20gXCJtZDVcIlxuaW1wb3J0IHR5cGUgeyBQYWNrYWdlRmlsZSB9IGZyb20gXCIuLi9kYi9zY2hlbWFcIlxuXG4vKipcbiAqIEdlbmVyYXRlIGFuIE1ENSBoYXNoIGZyb20gcGFja2FnZSBmaWxlcyBjb250ZW50XG4gKiBVc2VzIHRoZSBzYW1lIGZvcm1hdCBhcyBleGlzdGluZyB0ZXN0czogY3JlYXRlcyBhIG1hcCBvZiBmaWxlX3BhdGggLT4gY29udGVudF90ZXh0XG4gKiBhbmQgZ2VuZXJhdGVzIGFuIE1ENSBoYXNoIG9mIHRoZSBKU09OIHN0cmluZ2lmaWVkIG1hcFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVGc1NoYShwYWNrYWdlRmlsZXM6IFBhY2thZ2VGaWxlW10pOiBzdHJpbmcge1xuICBjb25zdCBmc01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9XG5cbiAgcGFja2FnZUZpbGVzXG4gICAgLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5jb250ZW50X3RleHQpIC8vIE9ubHkgaW5jbHVkZSBmaWxlcyB3aXRoIGNvbnRlbnRcbiAgICAuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgZnNNYXBbZmlsZS5maWxlX3BhdGhdID0gZmlsZS5jb250ZW50X3RleHQgfHwgXCJcIlxuICAgIH0pXG5cbiAgY29uc3QgaGFzaCA9IG1kNShKU09OLnN0cmluZ2lmeShmc01hcCkpXG4gIHJldHVybiBgbWQ1LSR7aGFzaH1gXG59XG4iLCAiaW1wb3J0IHR5cGUgeyBEYkNsaWVudCB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvZGItY2xpZW50XCJcbmltcG9ydCB7IGNyZWF0ZURhdGFiYXNlIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9kYi1jbGllbnRcIlxuaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlIH0gZnJvbSBcIndpbnRlcnNwZWNcIlxuXG5leHBvcnQgY29uc3Qgd2l0aERiOiBNaWRkbGV3YXJlPFxuICB7fSxcbiAge1xuICAgIGRiOiBEYkNsaWVudFxuICB9XG4+ID0gYXN5bmMgKHJlcSwgY3R4LCBuZXh0KSA9PiB7XG4gIGlmICghY3R4LmRiKSB7XG4gICAgY3R4LmRiID0gY3JlYXRlRGF0YWJhc2UoKVxuICB9XG4gIHJldHVybiBuZXh0KHJlcSwgY3R4KVxufVxuIiwgImltcG9ydCB7IE1pZGRsZXdhcmUgfSBmcm9tIFwid2ludGVyc3BlYy9taWRkbGV3YXJlXCJcblxuZXhwb3J0IHR5cGUgQ3R4RXJyb3JGbiA9IChcbiAgc3RhdHVzOiBudW1iZXIsXG4gIGVycm9yX3BheWxvYWQ6IHtcbiAgICBlcnJvcl9jb2RlOiBzdHJpbmdcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgfSxcbikgPT4gUmVzcG9uc2VcblxuZXhwb3J0IGNvbnN0IHdpdGhDdHhFcnJvcjogTWlkZGxld2FyZTxcbiAge30sXG4gIHtcbiAgICBlcnJvcjogQ3R4RXJyb3JGblxuICB9XG4+ID0gYXN5bmMgKHJlcSwgY3R4LCBuZXh0KSA9PiB7XG4gIGN0eC5lcnJvciA9IChzdGF0dXMsIGVycm9yX3BheWxvYWQpID0+IHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KHsgZXJyb3I6IGVycm9yX3BheWxvYWQgfSksIHtcbiAgICAgIHN0YXR1cyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIG5leHQocmVxLCBjdHgpXG59XG4iLCAiaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlIH0gZnJvbSBcIndpbnRlcnNwZWMvbWlkZGxld2FyZVwiXG5pbXBvcnQgdHlwZSB7IEN0eEVycm9yRm4gfSBmcm9tIFwiLi93aXRoLWN0eC1lcnJvclwiXG5pbXBvcnQgdHlwZSB7IERiQ2xpZW50IH0gZnJvbSBcIi4uL2RiL2RiLWNsaWVudFwiXG5pbXBvcnQgeyBkZWNvZGVKd3QgfSBmcm9tIFwiam9zZVwiXG5cbmV4cG9ydCBjb25zdCB3aXRoU2Vzc2lvbkF1dGg6IE1pZGRsZXdhcmU8XG4gIHtcbiAgICBlcnJvcjogQ3R4RXJyb3JGblxuICAgIGRiOiBEYkNsaWVudFxuICB9LFxuICB7XG4gICAgYXV0aDoge1xuICAgICAgdHlwZTogXCJzZXNzaW9uXCJcbiAgICAgIGFjY291bnRfaWQ6IHN0cmluZ1xuICAgICAgcGVyc29uYWxfb3JnX2lkOiBzdHJpbmdcbiAgICAgIGdpdGh1Yl91c2VybmFtZTogc3RyaW5nXG4gICAgICB0c2NpcmN1aXRfaGFuZGxlOiBzdHJpbmcgfCBudWxsXG4gICAgICBzZXNzaW9uX2lkOiBzdHJpbmdcbiAgICAgIG9yZ3M6IEFycmF5PHtcbiAgICAgICAgb3JnX2lkOiBzdHJpbmdcbiAgICAgICAgbmFtZTogc3RyaW5nXG4gICAgICAgIHVzZXJfcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBjYW5fbWFuYWdlX3BhY2thZ2VzOiBib29sZWFuXG4gICAgICAgIH1cbiAgICAgIH0+XG4gICAgfVxuICB9LFxuICB7fVxuPiA9IGFzeW5jIChyZXEsIGN0eCwgbmV4dCkgPT4ge1xuICBpZiAocmVxLm1ldGhvZCA9PT0gXCJPUFRJT05TXCIpIHJldHVybiBuZXh0KHJlcSwgY3R4KVxuICBjb25zdCB0b2tlbiA9IHJlcS5oZWFkZXJzLmdldChcImF1dGhvcml6YXRpb25cIik/LnNwbGl0KFwiQmVhcmVyIFwiKT8uWzFdXG5cbiAgLy8gVHJ5IHRvIGRlY29kZSBKV1QgdG9rZW4gYW5kIHZlcmlmeSBzZXNzaW9uIGV4aXN0c1xuICBpZiAodG9rZW4gJiYgY3R4LmRiPy5nZXRTdGF0ZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlSnd0KHRva2VuKVxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gZGVjb2RlZC5zZXNzaW9uX2lkIGFzIHN0cmluZ1xuXG4gICAgICBpZiAoc2Vzc2lvbklkKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gY3R4LmRiLmdldFN0YXRlKClcblxuICAgICAgICAvLyBDaGVjayBpZiBzZXNzaW9uIHN0aWxsIGV4aXN0cyBpbiB0aGUgZGF0YWJhc2VcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHN0YXRlLnNlc3Npb25zLmZpbmQoXG4gICAgICAgICAgKHM6IGFueSkgPT4gcy5zZXNzaW9uX2lkID09PSBzZXNzaW9uSWQsXG4gICAgICAgIClcblxuICAgICAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgICAgICAvLyBTZXNzaW9uIGhhcyBiZWVuIGRlbGV0ZWQgKGxvZ2dlZCBvdXQpLCByZWplY3QgdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXR1cm4gY3R4LmVycm9yKDQwMSwge1xuICAgICAgICAgICAgZXJyb3JfY29kZTogXCJzZXNzaW9uX2V4cGlyZWRcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiU2Vzc2lvbiBoYXMgYmVlbiBpbnZhbGlkYXRlZC4gUGxlYXNlIGxvZyBpbiBhZ2Fpbi5cIixcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmluZCBhY2NvdW50IGZyb20gdGhlIGRlY29kZWQgdG9rZW5cbiAgICAgICAgY29uc3QgYWNjb3VudElkID0gZGVjb2RlZC5hY2NvdW50X2lkIGFzIHN0cmluZ1xuICAgICAgICBjb25zdCBhY2NvdW50ID0gc3RhdGUuYWNjb3VudHMuZmluZChcbiAgICAgICAgICAoYWNjOiBhbnkpID0+IGFjYy5hY2NvdW50X2lkID09PSBhY2NvdW50SWQsXG4gICAgICAgIClcblxuICAgICAgICBpZiAoYWNjb3VudCkge1xuICAgICAgICAgIC8vIEZldGNoIG9yZ3MgZm9yIHRoaXMgYWNjb3VudFxuICAgICAgICAgIGNvbnN0IG9yZ0FjY291bnRzID0gc3RhdGUub3JnQWNjb3VudHMuZmlsdGVyKFxuICAgICAgICAgICAgKG9hOiBhbnkpID0+IG9hLmFjY291bnRfaWQgPT09IGFjY291bnQuYWNjb3VudF9pZCxcbiAgICAgICAgICApXG5cbiAgICAgICAgICBjb25zdCBvcmdzID0gb3JnQWNjb3VudHMubWFwKChvYTogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmcgPSBzdGF0ZS5vcmdhbml6YXRpb25zLmZpbmQoXG4gICAgICAgICAgICAgIChvOiBhbnkpID0+IG8ub3JnX2lkID09PSBvYS5vcmdfaWQsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBvcmdfaWQ6IG9hLm9yZ19pZCxcbiAgICAgICAgICAgICAgbmFtZTogb3JnPy5vcmdfZGlzcGxheV9uYW1lIHx8IG9yZz8uZ2l0aHViX2hhbmRsZSB8fCBvYS5vcmdfaWQsXG4gICAgICAgICAgICAgIHVzZXJfcGVybWlzc2lvbnM6IHsgY2FuX21hbmFnZV9wYWNrYWdlczogdHJ1ZSB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBjb25zdCB0c2NpcmN1aXRfaGFuZGxlID1cbiAgICAgICAgICAgIGRlY29kZWQ/LnRzY2lyY3VpdF9oYW5kbGUgPz8gYWNjb3VudD8udHNjaXJjdWl0X2hhbmRsZSA/PyBudWxsXG5cbiAgICAgICAgICBpZiAoIXRzY2lyY3VpdF9oYW5kbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICAgICAgICAgIGVycm9yX2NvZGU6IFwidHNjaXJjdWl0X2hhbmRsZV9yZXF1aXJlZFwiLFxuICAgICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAgIFwiUGxlYXNlIHNldCBhIHRzY2lyY3VpdCBoYW5kbGUgYmVmb3JlIHVzaW5nIHRoaXMgZmVhdHVyZS4gVmlzaXQgYWNjb3VudCBzZXR0aW5ncyB0byBhZGQgb25lLlwiLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdHguYXV0aCA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwic2Vzc2lvblwiLFxuICAgICAgICAgICAgYWNjb3VudF9pZDogYWNjb3VudC5hY2NvdW50X2lkLFxuICAgICAgICAgICAgcGVyc29uYWxfb3JnX2lkOlxuICAgICAgICAgICAgICBhY2NvdW50LnBlcnNvbmFsX29yZ19pZCB8fCBgb3JnLSR7YWNjb3VudC5hY2NvdW50X2lkfWAsXG4gICAgICAgICAgICBnaXRodWJfdXNlcm5hbWU6IGFjY291bnQuZ2l0aHViX3VzZXJuYW1lLFxuICAgICAgICAgICAgdHNjaXJjdWl0X2hhbmRsZTogYWNjb3VudC50c2NpcmN1aXRfaGFuZGxlLFxuICAgICAgICAgICAgc2Vzc2lvbl9pZDogc2Vzc2lvbklkLFxuICAgICAgICAgICAgb3JnczpcbiAgICAgICAgICAgICAgb3Jncy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBvcmdzXG4gICAgICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBvcmdfaWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50LnBlcnNvbmFsX29yZ19pZCB8fCBgb3JnLSR7YWNjb3VudC5hY2NvdW50X2lkfWAsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQuZ2l0aHViX3VzZXJuYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50LnBlcnNvbmFsX29yZ19pZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgYG9yZy0ke2FjY291bnQuYWNjb3VudF9pZH1gLFxuICAgICAgICAgICAgICAgICAgICAgIHVzZXJfcGVybWlzc2lvbnM6IHsgY2FuX21hbmFnZV9wYWNrYWdlczogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5leHQocmVxLCBjdHgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSldUIGRlY29kZSBmYWlsZWQsIGNvbnRpbnVlIHRvIGZhbGxiYWNrXG4gICAgfVxuICB9XG5cbiAgLy8gTGVnYWN5OiBPbmx5IGNoZWNrIGRhdGFiYXNlIGFjY291bnRzIHdoZW4gd2UncmUgaW4gYSBCdW4gdGVzdCBlbnZpcm9ubWVudFxuICBpZiAocHJvY2Vzcy5lbnYuQlVOX1RFU1QgPT09IFwidHJ1ZVwiICYmIHRva2VuICYmIGN0eC5kYj8uZ2V0U3RhdGUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGN0eC5kYi5nZXRTdGF0ZSgpXG4gICAgY29uc3QgYWNjb3VudCA9IHN0YXRlLmFjY291bnRzLmZpbmQoKGFjYzogYW55KSA9PiBhY2MuYWNjb3VudF9pZCA9PT0gdG9rZW4pXG4gICAgaWYgKGFjY291bnQpIHtcbiAgICAgIC8vIEZldGNoIG9yZ3MgZm9yIHRoaXMgYWNjb3VudFxuICAgICAgY29uc3Qgb3JnQWNjb3VudHMgPSBzdGF0ZS5vcmdBY2NvdW50cy5maWx0ZXIoXG4gICAgICAgIChvYTogYW55KSA9PiBvYS5hY2NvdW50X2lkID09PSBhY2NvdW50LmFjY291bnRfaWQsXG4gICAgICApXG5cbiAgICAgIGNvbnN0IG9yZ3MgPSBvcmdBY2NvdW50cy5tYXAoKG9hOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgb3JnID0gc3RhdGUub3JnYW5pemF0aW9ucy5maW5kKChvOiBhbnkpID0+IG8ub3JnX2lkID09PSBvYS5vcmdfaWQpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb3JnX2lkOiBvYS5vcmdfaWQsXG4gICAgICAgICAgbmFtZTogb3JnPy5vcmdfZGlzcGxheV9uYW1lIHx8IG9yZz8uZ2l0aHViX2hhbmRsZSB8fCBvYS5vcmdfaWQsXG4gICAgICAgICAgdXNlcl9wZXJtaXNzaW9uczogeyBjYW5fbWFuYWdlX3BhY2thZ2VzOiB0cnVlIH0sXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIGN0eC5hdXRoID0ge1xuICAgICAgICB0eXBlOiBcInNlc3Npb25cIixcbiAgICAgICAgYWNjb3VudF9pZDogYWNjb3VudC5hY2NvdW50X2lkLFxuICAgICAgICBwZXJzb25hbF9vcmdfaWQ6IGFjY291bnQucGVyc29uYWxfb3JnX2lkIHx8IGBvcmctJHthY2NvdW50LmFjY291bnRfaWR9YCxcbiAgICAgICAgZ2l0aHViX3VzZXJuYW1lOiBhY2NvdW50LmdpdGh1Yl91c2VybmFtZSxcbiAgICAgICAgdHNjaXJjdWl0X2hhbmRsZTogYWNjb3VudC50c2NpcmN1aXRfaGFuZGxlLFxuICAgICAgICBzZXNzaW9uX2lkOiBgc2Vzc2lvbi0ke2FjY291bnQuYWNjb3VudF9pZH1gLFxuICAgICAgICBvcmdzOlxuICAgICAgICAgIG9yZ3MubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBvcmdzXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBvcmdfaWQ6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnQucGVyc29uYWxfb3JnX2lkIHx8IGBvcmctJHthY2NvdW50LmFjY291bnRfaWR9YCxcbiAgICAgICAgICAgICAgICAgIG5hbWU6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnQuZ2l0aHViX3VzZXJuYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnQucGVyc29uYWxfb3JnX2lkIHx8XG4gICAgICAgICAgICAgICAgICAgIGBvcmctJHthY2NvdW50LmFjY291bnRfaWR9YCxcbiAgICAgICAgICAgICAgICAgIHVzZXJfcGVybWlzc2lvbnM6IHsgY2FuX21hbmFnZV9wYWNrYWdlczogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dChyZXEsIGN0eClcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjayBhdXRoIGZvciBub24tdGVzdCBlbnZpcm9ubWVudHMgb3Igd2hlbiBubyB0b2tlbiBpcyBmb3VuZFxuICBjb25zdCBmYWxsYmFja0FjY291bnRJZCA9IFwiYWNjb3VudC0xMjM0XCJcbiAgY29uc3QgZmFsbGJhY2tPcmdJZCA9IFwib3JnLTEyMzRcIlxuXG4gIGNvbnN0IGZhbGxiYWNrT3JncyA9IFtcbiAgICB7XG4gICAgICBvcmdfaWQ6IGZhbGxiYWNrT3JnSWQsXG4gICAgICBuYW1lOiBcIm9yZy0xMjM0XCIsXG4gICAgICB1c2VyX3Blcm1pc3Npb25zOiB7IGNhbl9tYW5hZ2VfcGFja2FnZXM6IHRydWUgfSxcbiAgICB9LFxuICBdXG5cbiAgY3R4LmF1dGggPSB7XG4gICAgdHlwZTogXCJzZXNzaW9uXCIsXG4gICAgYWNjb3VudF9pZDogZmFsbGJhY2tBY2NvdW50SWQsXG4gICAgcGVyc29uYWxfb3JnX2lkOiBmYWxsYmFja09yZ0lkLFxuICAgIGdpdGh1Yl91c2VybmFtZTogXCJ0ZXN0dXNlclwiLFxuICAgIHRzY2lyY3VpdF9oYW5kbGU6IFwidGVzdHVzZXJcIixcbiAgICBzZXNzaW9uX2lkOiBcInNlc3Npb24tMTIzNFwiLFxuICAgIG9yZ3M6IGZhbGxiYWNrT3JncyxcbiAgfVxuXG4gIHJldHVybiBuZXh0KHJlcSwgY3R4KVxufVxuIiwgImltcG9ydCB0eXBlIHsgTWlkZGxld2FyZSB9IGZyb20gXCJ3aW50ZXJzcGVjL21pZGRsZXdhcmVcIlxuaW1wb3J0IHR5cGUgeyBDdHhFcnJvckZuIH0gZnJvbSBcIi4vd2l0aC1jdHgtZXJyb3JcIlxuaW1wb3J0IHsgZGVjb2RlSnd0IH0gZnJvbSBcImpvc2VcIlxuXG5leHBvcnQgY29uc3Qgd2l0aE9wdGlvbmFsU2Vzc2lvbkF1dGg6IE1pZGRsZXdhcmU8XG4gIHtcbiAgICBlcnJvcjogQ3R4RXJyb3JGblxuICAgIGRiOiBhbnlcbiAgfSxcbiAge1xuICAgIGF1dGg/OiB7XG4gICAgICB0eXBlOiBcInNlc3Npb25cIlxuICAgICAgYWNjb3VudF9pZDogc3RyaW5nXG4gICAgICBwZXJzb25hbF9vcmdfaWQ6IHN0cmluZ1xuICAgICAgZ2l0aHViX3VzZXJuYW1lOiBzdHJpbmdcbiAgICAgIHRzY2lyY3VpdF9oYW5kbGU6IHN0cmluZyB8IG51bGxcbiAgICAgIHNlc3Npb25faWQ6IHN0cmluZ1xuICAgIH1cbiAgfSxcbiAge31cbj4gPSBhc3luYyAocmVxLCBjdHgsIG5leHQpID0+IHtcbiAgaWYgKHJlcS5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSByZXR1cm4gbmV4dChyZXEsIGN0eClcblxuICBjb25zdCB0b2tlbiA9IHJlcS5oZWFkZXJzLmdldChcImF1dGhvcml6YXRpb25cIik/LnNwbGl0KFwiQmVhcmVyIFwiKT8uWzFdXG5cbiAgaWYgKCF0b2tlbikge1xuICAgIHJldHVybiBuZXh0KHJlcSwgY3R4KVxuICB9XG5cbiAgLy8gVHJ5IHRvIGRlY29kZSBKV1QgdG9rZW4gYW5kIHZlcmlmeSBzZXNzaW9uIGV4aXN0c1xuICBpZiAoY3R4LmRiPy5nZXRTdGF0ZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlSnd0KHRva2VuKVxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gZGVjb2RlZC5zZXNzaW9uX2lkIGFzIHN0cmluZ1xuXG4gICAgICBpZiAoc2Vzc2lvbklkKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gY3R4LmRiLmdldFN0YXRlKClcblxuICAgICAgICAvLyBDaGVjayBpZiBzZXNzaW9uIHN0aWxsIGV4aXN0cyBpbiB0aGUgZGF0YWJhc2VcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHN0YXRlLnNlc3Npb25zLmZpbmQoXG4gICAgICAgICAgKHM6IGFueSkgPT4gcy5zZXNzaW9uX2lkID09PSBzZXNzaW9uSWQsXG4gICAgICAgIClcblxuICAgICAgICAvLyBJZiBzZXNzaW9uIGRvZXNuJ3QgZXhpc3QsIHRyZWF0IGFzIHVuYXV0aGVudGljYXRlZCAobm8gYXV0aCBjb250ZXh0KVxuICAgICAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgICAgICByZXR1cm4gbmV4dChyZXEsIGN0eClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpbmQgYWNjb3VudCBmcm9tIHRoZSBkZWNvZGVkIHRva2VuXG4gICAgICAgIGNvbnN0IGFjY291bnRJZCA9IGRlY29kZWQuYWNjb3VudF9pZCBhcyBzdHJpbmdcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IHN0YXRlLmFjY291bnRzLmZpbmQoXG4gICAgICAgICAgKGFjYzogYW55KSA9PiBhY2MuYWNjb3VudF9pZCA9PT0gYWNjb3VudElkLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKGFjY291bnQpIHtcbiAgICAgICAgICBjdHguYXV0aCA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwic2Vzc2lvblwiLFxuICAgICAgICAgICAgYWNjb3VudF9pZDogYWNjb3VudC5hY2NvdW50X2lkLFxuICAgICAgICAgICAgcGVyc29uYWxfb3JnX2lkOlxuICAgICAgICAgICAgICBhY2NvdW50LnBlcnNvbmFsX29yZ19pZCB8fCBgb3JnLSR7YWNjb3VudC5hY2NvdW50X2lkfWAsXG4gICAgICAgICAgICBnaXRodWJfdXNlcm5hbWU6IGFjY291bnQuZ2l0aHViX3VzZXJuYW1lLFxuICAgICAgICAgICAgdHNjaXJjdWl0X2hhbmRsZTogYWNjb3VudC50c2NpcmN1aXRfaGFuZGxlLFxuICAgICAgICAgICAgc2Vzc2lvbl9pZDogc2Vzc2lvbklkLFxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV4dChyZXEsIGN0eClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBKV1QgZGVjb2RlIGZhaWxlZCwgY29udGludWUgdG8gZmFsbGJhY2tcbiAgICB9XG4gIH1cblxuICAvLyBMZWdhY3k6IE9ubHkgY2hlY2sgZGF0YWJhc2UgYWNjb3VudHMgd2hlbiB3ZSdyZSBpbiBhIEJ1biB0ZXN0IGVudmlyb25tZW50XG4gIGlmIChwcm9jZXNzLmVudi5CVU5fVEVTVCA9PT0gXCJ0cnVlXCIgJiYgY3R4LmRiPy5hY2NvdW50cykge1xuICAgIGNvbnN0IGFjY291bnQgPSBjdHguZGIuYWNjb3VudHMuZmluZCgoYWNjOiBhbnkpID0+IGFjYy5hY2NvdW50X2lkID09PSB0b2tlbilcblxuICAgIGlmIChhY2NvdW50KSB7XG4gICAgICBjdHguYXV0aCA9IHtcbiAgICAgICAgdHlwZTogXCJzZXNzaW9uXCIsXG4gICAgICAgIGFjY291bnRfaWQ6IGFjY291bnQuYWNjb3VudF9pZCxcbiAgICAgICAgcGVyc29uYWxfb3JnX2lkOiBgb3JnLSR7YWNjb3VudC5hY2NvdW50X2lkfWAsXG4gICAgICAgIGdpdGh1Yl91c2VybmFtZTogYWNjb3VudC5naXRodWJfdXNlcm5hbWUsXG4gICAgICAgIHRzY2lyY3VpdF9oYW5kbGU6IGFjY291bnQudHNjaXJjdWl0X2hhbmRsZSxcbiAgICAgICAgc2Vzc2lvbl9pZDogYHNlc3Npb24tJHthY2NvdW50LmFjY291bnRfaWR9YCxcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dChyZXEsIGN0eClcbiAgfVxuXG4gIGN0eC5hdXRoID0ge1xuICAgIHR5cGU6IFwic2Vzc2lvblwiLFxuICAgIGFjY291bnRfaWQ6IFwiYWNjb3VudC0xMjM0XCIsXG4gICAgcGVyc29uYWxfb3JnX2lkOiBcIm9yZy0xMjM0XCIsXG4gICAgZ2l0aHViX3VzZXJuYW1lOiBcInRlc3R1c2VyXCIsXG4gICAgdHNjaXJjdWl0X2hhbmRsZTogXCJ0ZXN0dXNlclwiLFxuICAgIHNlc3Npb25faWQ6IFwic2Vzc2lvbi0xMjM0XCIsXG4gIH1cblxuICByZXR1cm4gbmV4dChyZXEsIGN0eClcbn1cbiIsICJpbXBvcnQgeyBNaWRkbGV3YXJlIH0gZnJvbSBcIndpbnRlcnNwZWMvbWlkZGxld2FyZVwiXG5pbXBvcnQga2xldXIgZnJvbSBcImtsZXVyXCJcblxuZXhwb3J0IGNvbnN0IHdpdGhFcnJvckhhbmRsaW5nOiBNaWRkbGV3YXJlPHt9LCB7fT4gPSBhc3luYyAocmVxLCBjdHgsIG5leHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbmV4dChyZXEsIGN0eClcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGNvbnNvbGUuZXJyb3Ioa2xldXIucmVkKFwiSW50ZXJjZXB0ZWQgZXJyb3I6XCIpLCBlcnJvcilcbiAgICAvLyBJZiBlcnJvciBpcyBhIFJlc3BvbnNlLCByZXR1cm4gaXRcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIGVycm9yXG4gICAgfVxuICAgIHJldHVybiAoY3R4IGFzIGFueSkuanNvbihcbiAgICAgIHtcbiAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yPy5tZXNzYWdlLFxuICAgICAgICAgIGVycm9yX2NvZGU6IGVycm9yPy5lcnJvcl9jb2RlID8/IFwiaW50ZXJuYWxfc2VydmVyX2Vycm9yXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgeyBzdGF0dXM6IGVycm9yPy5zdGF0dXMgfHwgNTAwIH0sXG4gICAgKVxuICB9XG59XG4iLCAiaW1wb3J0IHsgTWlkZGxld2FyZSB9IGZyb20gXCJ3aW50ZXJzcGVjL21pZGRsZXdhcmVcIlxuaW1wb3J0IGtsZXVyIGZyb20gXCJrbGV1clwiXG5cbi8vIEVOQUJMRSBDT0xPUlMgQUxXQVlTXG5rbGV1ci5lbmFibGVkID0gdHJ1ZVxuXG5jb25zdCBjb2xvclN0YXR1cyA9IChzdGF0dXM6IG51bWJlcikgPT4ge1xuICBpZiAoc3RhdHVzID49IDUwMCkge1xuICAgIHJldHVybiBrbGV1ci5yZWQoc3RhdHVzLnRvU3RyaW5nKCkpXG4gIH1cbiAgaWYgKHN0YXR1cyA+PSA0MDApIHtcbiAgICByZXR1cm4ga2xldXIueWVsbG93KHN0YXR1cy50b1N0cmluZygpKVxuICB9XG4gIHJldHVybiBrbGV1ci5ncmVlbihzdGF0dXMudG9TdHJpbmcoKSlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXIge1xuICBlcnJvcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkXG4gIGluZm86ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZFxuICB3YXJuOiAoLi4uYXJnczogYW55W10pID0+IHZvaWRcbiAgZGVidWc6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3Qgd2l0aFJlcXVlc3RMb2dnaW5nOiBNaWRkbGV3YXJlPFxuICB7fSxcbiAge1xuICAgIGxvZ2dlcjogTG9nZ2VyXG4gIH1cbj4gPSBhc3luYyAocmVxLCBjdHgsIG5leHQpID0+IHtcbiAgaWYgKCFjdHgubG9nZ2VyKSB7XG4gICAgY3R4LmxvZ2dlciA9IHtcbiAgICAgIGVycm9yOiAoLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZXJyb3IoLi4uYXJncyksXG4gICAgICBpbmZvOiAoLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUubG9nKC4uLmFyZ3MpLFxuICAgICAgd2FybjogKC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLndhcm4oLi4uYXJncyksXG4gICAgICBkZWJ1ZzogKC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmxvZyguLi5hcmdzKSxcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICBjdHgubG9nZ2VyLmluZm8oa2xldXIuYmx1ZShgPiAke3JlcS5tZXRob2R9ICR7cmVxLnVybH1gKSlcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5leHQocmVxLCBjdHgpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGF3YWl0IHJlc3BvbnNlLmNsb25lKCkudGV4dCgpXG4gICAgICBjdHgubG9nZ2VyLmluZm8oXG4gICAgICAgIGA8ICR7Y29sb3JTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKX0gJHtrbGV1ci5ncmF5KHJlc3BvbnNlQm9keS5zbGljZSgwLCA0MCkucmVwbGFjZSgvKFxcclxcbnxcXG58XFxyKS9nbSwgXCJcIikpfWAsXG4gICAgICApXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY3R4LmxvZ2dlci5pbmZvKGA8ICR7Y29sb3JTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKX1gKVxuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgY3R4LmxvZ2dlci5pbmZvKGtsZXVyLnJlZChgPCBFUlJPUiAke2UudG9TdHJpbmcoKS5zbGljZSgwLCA1MCl9Li4uYCkpXG4gICAgdGhyb3cgZVxuICB9XG59XG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IGFpUmV2aWV3U2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25Cb2R5OiB6Lm9iamVjdCh7XG4gICAgYWlfcmV2aWV3X2lkOiB6LnN0cmluZygpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgYWlfcmV2aWV3OiBhaVJldmlld1NjaGVtYSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBhaV9yZXZpZXdfaWQgfSA9IHJlcS5qc29uQm9keVxuICBjb25zdCBleGlzdGluZyA9IGN0eC5kYi5nZXRBaVJldmlld0J5SWQoYWlfcmV2aWV3X2lkKVxuICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiYWlfcmV2aWV3X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJBSSByZXZpZXcgbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgY29uc3QgdXBkYXRlZCA9IGN0eC5kYi51cGRhdGVBaVJldmlldyhhaV9yZXZpZXdfaWQsIHtcbiAgICBhaV9yZXZpZXdfdGV4dDogXCJQbGFjZWhvbGRlciBBSSBSZXZpZXdcIixcbiAgICBzdGFydF9wcm9jZXNzaW5nX2F0OiBleGlzdGluZy5zdGFydF9wcm9jZXNzaW5nX2F0ID8/IG5vdyxcbiAgICBmaW5pc2hlZF9wcm9jZXNzaW5nX2F0OiBub3csXG4gICAgZGlzcGxheV9zdGF0dXM6IFwiY29tcGxldGVkXCIsXG4gIH0pIVxuICByZXR1cm4gY3R4Lmpzb24oeyBhaV9yZXZpZXc6IHVwZGF0ZWQgfSlcbn0pXG4iLCAiaW1wb3J0IHsgZGF0YXNoZWV0U2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGNvbnN0IHByb2Nlc3NBbGxEYXRhc2hlZXRzID0gKGN0eDogYW55KSA9PiB7XG4gIGNvbnN0IHByb2Nlc3NlZCA9IFtdIGFzIHouaW5mZXI8dHlwZW9mIGRhdGFzaGVldFNjaGVtYT5bXVxuICBjdHguZGIuZGF0YXNoZWV0cy5mb3JFYWNoKChkczogYW55KSA9PiB7XG4gICAgaWYgKCFkcy5waW5faW5mb3JtYXRpb24gfHwgIWRzLmRhdGFzaGVldF9wZGZfdXJscyB8fCAhZHMuYWlfZGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSBjdHguZGIudXBkYXRlRGF0YXNoZWV0KGRzLmRhdGFzaGVldF9pZCwge1xuICAgICAgICBwaW5faW5mb3JtYXRpb246IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwaW5fbnVtYmVyOiBcIjFcIixcbiAgICAgICAgICAgIG5hbWU6IFwiUElOMVwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiUGxhY2Vob2xkZXIgcGluXCIsXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IFtcImRpZ2l0YWxcIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZGF0YXNoZWV0X3BkZl91cmxzOiBbXCJodHRwczovL2V4YW1wbGUuY29tL2RhdGFzaGVldC5wZGZcIl0sXG4gICAgICAgIGFpX2Rlc2NyaXB0aW9uOiBcIlBsYWNlaG9sZGVyIGFpIGRlc2NyaXB0aW9uXCIsXG4gICAgICB9KVxuICAgICAgcHJvY2Vzc2VkLnB1c2godXBkYXRlZCEpXG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Nlc3NlZC5wdXNoKGRzKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHByb2Nlc3NlZFxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJub25lXCIsXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIGRhdGFzaGVldHM6IGRhdGFzaGVldFNjaGVtYS5hcnJheSgpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCBkYXRhc2hlZXRzID0gcHJvY2Vzc0FsbERhdGFzaGVldHMoY3R4KVxuICByZXR1cm4gY3R4Lmpzb24oeyBkYXRhc2hlZXRzIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBzZWVkIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zZWVkXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgYXV0aDogXCJub25lXCIsXG4gIGpzb25SZXNwb25zZTogei5hbnkoKSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICByZXR1cm4gY3R4Lmpzb24oY3R4LmRiLmdldFN0YXRlKCkpXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBvcmRlclN0ZXBzIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL3V0aWxzL29yZGVyLXN0ZXBzXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIHN1Y2Nlc3M6IHouYm9vbGVhbigpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICAvLyBHZXQgYWxsIG9yZGVycyB0aGF0IGFyZW4ndCBmaW5pc2hlZFxuICBjb25zdCBvcmRlcnMgPSBjdHguZGIub3JkZXJzLmZpbHRlcigob3JkZXIpID0+ICFvcmRlci5pc19maW5pc2hlZClcbiAgY29uc3QgdXBkYXRlZE9yZGVycyA9IFtdXG5cbiAgZm9yIChjb25zdCBvcmRlciBvZiBvcmRlcnMpIHtcbiAgICBjb25zdCBvcmRlclN0YXRlID0gY3R4LmRiLmdldEpsY3BjYk9yZGVyU3RhdGVzQnlPcmRlcklkKG9yZGVyLm9yZGVyX2lkKVxuICAgIGlmICghb3JkZXJTdGF0ZSkgY29udGludWVcblxuICAgIC8vIEZpbmQgdGhlIG5leHQgc3RlcCB0byBjb21wbGV0ZVxuICAgIGxldCBuZXh0U3RlcEluZGV4ID0gLTFcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyU3RlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSBvcmRlclN0ZXBzW2ldXG4gICAgICBpZiAoIW9yZGVyU3RhdGVbc3RlcF0pIHtcbiAgICAgICAgbmV4dFN0ZXBJbmRleCA9IGlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBhbGwgc3RlcHMgYXJlIGNvbXBsZXRlZCBvciBubyBuZXh0IHN0ZXAgZm91bmRcbiAgICBpZiAobmV4dFN0ZXBJbmRleCA9PT0gLTEpIHtcbiAgICAgIHVwZGF0ZWRPcmRlcnMucHVzaCh7XG4gICAgICAgIG9yZGVyX2lkOiBvcmRlci5vcmRlcl9pZCxcbiAgICAgICAgY3VycmVudF9zdGVwOiBudWxsLFxuICAgICAgfSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBuZXh0IHN0ZXAgdG8gdHJ1ZVxuICAgIGNvbnN0IG5leHRTdGVwID0gb3JkZXJTdGVwc1tuZXh0U3RlcEluZGV4XVxuICAgIGNvbnN0IHVwZGF0ZXMgPSB7XG4gICAgICBbbmV4dFN0ZXBdOiB0cnVlLFxuICAgICAgY3VycmVudF9zdGVwOiBuZXh0U3RlcCxcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIGlzIHRoZSBsYXN0IHN0ZXAsIGFsc28gdXBkYXRlIHRoZSBvcmRlciBzdGF0dXNcbiAgICBpZiAobmV4dFN0ZXBJbmRleCA9PT0gb3JkZXJTdGVwcy5sZW5ndGggLSAxKSB7XG4gICAgICBjdHguZGIudXBkYXRlT3JkZXIob3JkZXIub3JkZXJfaWQsIHtcbiAgICAgICAgaXNfZmluaXNoZWQ6IHRydWUsXG4gICAgICAgIGNvbXBsZXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjdHguZGIudXBkYXRlSmxjcGNiT3JkZXJTdGF0ZShvcmRlci5vcmRlcl9pZCwgdXBkYXRlcylcblxuICAgIHVwZGF0ZWRPcmRlcnMucHVzaCh7XG4gICAgICBvcmRlcl9pZDogb3JkZXIub3JkZXJfaWQsXG4gICAgICBjdXJyZW50X3N0ZXA6IG5leHRTdGVwLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gIH0pXG59KVxuIiwgImV4cG9ydCBjb25zdCBvcmRlclN0ZXBzID0gW1xuICBcImFyZV9nZXJiZXJzX2dlbmVyYXRlZFwiLFxuICBcImFyZV9nZXJiZXJzX3VwbG9hZGVkXCIsXG4gIFwiaXNfZ2VyYmVyX2FuYWx5emVkXCIsXG4gIFwiYXJlX2luaXRpYWxfY29zdHNfY2FsY3VsYXRlZFwiLFxuICBcImlzX3BjYl9hZGRlZF90b19jYXJ0XCIsXG4gIFwiaXNfYm9tX3VwbG9hZGVkXCIsXG4gIFwiaXNfcG5wX3VwbG9hZGVkXCIsXG4gIFwiaXNfYm9tX3BucF9hbmFseXplZFwiLFxuICBcImlzX2JvbV9wYXJzaW5nX2NvbXBsZXRlXCIsXG4gIFwiYXJlX2NvbXBvbmVudHNfYXZhaWxhYmxlXCIsXG4gIFwiaXNfcGF0Y2hfbWFwX2dlbmVyYXRlZFwiLFxuICBcImlzX2pzb25fbWVyZ2VfZmlsZV9jcmVhdGVkXCIsXG4gIFwiaXNfZGZtX3Jlc3VsdF9nZW5lcmF0ZWRcIixcbiAgXCJhcmVfZmlsZXNfZG93bmxvYWRlZFwiLFxuICBcImFyZV9wcm9kdWN0X2NhdGVnb3JpZXNfZmV0Y2hlZFwiLFxuICBcImFyZV9maW5hbF9jb3N0c19jYWxjdWxhdGVkXCIsXG4gIFwiaXNfanNvbl9tZXJnZV9maWxlX3VwZGF0ZWRcIixcbiAgXCJpc19hZGRlZF90b19jYXJ0XCIsXG5dIGFzIGNvbnN0XG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IG9yZGVyUXVvdGVTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBvcmRlcl9xdW90ZV9pZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9yZGVyX3F1b3Rlczogb3JkZXJRdW90ZVNjaGVtYS5hcnJheSgpLm9wdGlvbmFsKCksXG4gICAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBvcmRlcl9xdW90ZV9pZCB9ID0gcmVxLmpzb25Cb2R5XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvcmRlcl9xdW90ZXM6IFtcbiAgICAgIHtcbiAgICAgICAgb3JkZXJfcXVvdGVfaWQsXG4gICAgICAgIGFjY291bnRfaWQ6IFwiMTIzXCIsXG4gICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogXCIxMjNcIixcbiAgICAgICAgaXNfY29tcGxldGVkOiB0cnVlLFxuICAgICAgICBpc19wcm9jZXNzaW5nOiBmYWxzZSxcbiAgICAgICAgdmVuZG9yX25hbWU6IFwiSkxDUENCXCIsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBoYXNfZXJyb3I6IGZhbHNlLFxuICAgICAgICBjcmVhdGVkX2F0OiBcIjIwMjUtMDQtMjFcIixcbiAgICAgICAgdXBkYXRlZF9hdDogXCIyMDI1LTA0LTIxXCIsXG4gICAgICAgIGNvbXBsZXRlZF9hdDogXCIyMDI1LTA0LTIxXCIsXG4gICAgICAgIHF1b3RlZF9jb21wb25lbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWFudWZhY3R1cmVyX3BhcnRfbnVtYmVyOiBcIjEyM1wiLFxuICAgICAgICAgICAgc3VwcGxpZXJfcGFydF9udW1iZXI6IFwiMTIzXCIsXG4gICAgICAgICAgICBxdWFudGl0eTogMSxcbiAgICAgICAgICAgIHVuaXRfcHJpY2U6IDEwMCxcbiAgICAgICAgICAgIHRvdGFsX3ByaWNlOiAxMDAsXG4gICAgICAgICAgICBhdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtYW51ZmFjdHVyZXJfcGFydF9udW1iZXI6IFwiMTIzNFwiLFxuICAgICAgICAgICAgc3VwcGxpZXJfcGFydF9udW1iZXI6IFwiMTIzNFwiLFxuICAgICAgICAgICAgcXVhbnRpdHk6IDEsXG4gICAgICAgICAgICB1bml0X3ByaWNlOiAyMDAsXG4gICAgICAgICAgICB0b3RhbF9wcmljZTogMjAwLFxuICAgICAgICAgICAgYXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGJhcmVfcGNiX2Nvc3Q6IDMwMCxcbiAgICAgICAgc2hpcHBpbmdfb3B0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhcnJpZXI6IFwiREhMXCIsXG4gICAgICAgICAgICBzZXJ2aWNlOiBcIkV4cHJlc3NcIixcbiAgICAgICAgICAgIGNvc3Q6IDEwMCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhcnJpZXI6IFwiRmVkRXhcIixcbiAgICAgICAgICAgIHNlcnZpY2U6IFwiRXhwcmVzc1wiLFxuICAgICAgICAgICAgY29zdDogMjAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHRvdGFsX2Nvc3Rfd2l0aG91dF9zaGlwcGluZzogMTAwLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3JkZXJfcXVvdGVfaWQsXG4gICAgICAgIGFjY291bnRfaWQ6IFwiMTIzXCIsXG4gICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogXCIxMjNcIixcbiAgICAgICAgaXNfY29tcGxldGVkOiB0cnVlLFxuICAgICAgICBpc19wcm9jZXNzaW5nOiBmYWxzZSxcbiAgICAgICAgdmVuZG9yX25hbWU6IFwiREtSZWRcIixcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIGhhc19lcnJvcjogZmFsc2UsXG4gICAgICAgIGNyZWF0ZWRfYXQ6IFwiMjAyNS0wNC0yMVwiLFxuICAgICAgICB1cGRhdGVkX2F0OiBcIjIwMjUtMDQtMjFcIixcbiAgICAgICAgY29tcGxldGVkX2F0OiBcIjIwMjUtMDQtMjFcIixcbiAgICAgICAgcXVvdGVkX2NvbXBvbmVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtYW51ZmFjdHVyZXJfcGFydF9udW1iZXI6IFwiMTIzXCIsXG4gICAgICAgICAgICBzdXBwbGllcl9wYXJ0X251bWJlcjogXCIxMjNcIixcbiAgICAgICAgICAgIHF1YW50aXR5OiAxLFxuICAgICAgICAgICAgdW5pdF9wcmljZTogMTAwLFxuICAgICAgICAgICAgdG90YWxfcHJpY2U6IDEwMCxcbiAgICAgICAgICAgIGF2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hbnVmYWN0dXJlcl9wYXJ0X251bWJlcjogXCIxMjM0XCIsXG4gICAgICAgICAgICBzdXBwbGllcl9wYXJ0X251bWJlcjogXCIxMjM0XCIsXG4gICAgICAgICAgICBxdWFudGl0eTogMSxcbiAgICAgICAgICAgIHVuaXRfcHJpY2U6IDIwMCxcbiAgICAgICAgICAgIHRvdGFsX3ByaWNlOiAyMDAsXG4gICAgICAgICAgICBhdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgYmFyZV9wY2JfY29zdDogMzAwLFxuICAgICAgICBzaGlwcGluZ19vcHRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FycmllcjogXCJESExcIixcbiAgICAgICAgICAgIHNlcnZpY2U6IFwiRXhwcmVzc1wiLFxuICAgICAgICAgICAgY29zdDogMTAwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FycmllcjogXCJGZWRFeFwiLFxuICAgICAgICAgICAgc2VydmljZTogXCJFeHByZXNzXCIsXG4gICAgICAgICAgICBjb3N0OiAyMDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdG90YWxfY29zdF93aXRob3V0X3NoaXBwaW5nOiAxMDAsXG4gICAgICB9LFxuICAgIF0sXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBwcm9jZXNzQWxsRGF0YXNoZWV0cyB9IGZyb20gXCIuL2RhdGFzaGVldHMvcHJvY2Vzc19hbGxfZGF0YXNoZWV0c1wiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIl0sXG4gIGF1dGg6IFwibm9uZVwiLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHsgb2s6IHouYm9vbGVhbigpIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIHByb2Nlc3NBbGxEYXRhc2hlZXRzKGN0eClcbiAgcmV0dXJuIGN0eC5qc29uKHsgb2s6IHRydWUgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHNlZWQgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NlZWRcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJub25lXCIsXG4gIGpzb25SZXNwb25zZTogei5vYmplY3QoeyBvazogei5ib29sZWFuKCkgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgc2VlZChjdHguZGIpXG5cbiAgcmV0dXJuIGN0eC5qc29uKHsgb2s6IHRydWUgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIGFjY291bnRfYmFsYW5jZTogei5vYmplY3Qoe1xuICAgICAgbW9udGhseV9haV9idWRnZXRfdXNlZF91c2Q6IHoubnVtYmVyKCksXG4gICAgfSksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIC8vIEZvciB0aGlzIGV4YW1wbGUsIHdlJ2xsIHJldHVybiBhIG1vY2sgYmFsYW5jZVxuICAvLyBJbiBhIHJlYWwgaW1wbGVtZW50YXRpb24sIHlvdSB3b3VsZCBmZXRjaCB0aGlzIGZyb20gYSBkYXRhYmFzZSBvciBleHRlcm5hbCBzZXJ2aWNlXG4gIGNvbnN0IG1vY2tCYWxhbmNlID0ge1xuICAgIG1vbnRobHlfYWlfYnVkZ2V0X3VzZWRfdXNkOiAyLjUsXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIGFjY291bnRfYmFsYW5jZTogbW9ja0JhbGFuY2UsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQge1xuICBBY2NvdW50LFxuICBhY2NvdW50U2NoZW1hLFxuICBwdWJsaWNBY2NvdW50U2NoZW1hLFxufSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIiwgXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgdHNjaXJjdWl0X2hhbmRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGdpdGh1Yl91c2VybmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgYWNjb3VudDogcHVibGljQWNjb3VudFNjaGVtYS5leHRlbmQoe1xuICAgICAgZW1haWw6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBsZXQgYWNjb3VudDogQWNjb3VudCB8IHVuZGVmaW5lZFxuICBjb25zdCB7IGdpdGh1Yl91c2VybmFtZSwgdHNjaXJjdWl0X2hhbmRsZSB9ID0gcmVxLmNvbW1vblBhcmFtc1xuICBpZiAodHNjaXJjdWl0X2hhbmRsZSkge1xuICAgIGNvbnN0IGZvdW5kQWNjb3VudCA9IGN0eC5kYi5hY2NvdW50cy5maW5kKFxuICAgICAgKGFjYzogQWNjb3VudCkgPT5cbiAgICAgICAgYWNjLnRzY2lyY3VpdF9oYW5kbGU/LnRvTG93ZXJDYXNlKCkgPT09IHRzY2lyY3VpdF9oYW5kbGUudG9Mb3dlckNhc2UoKSxcbiAgICApXG4gICAgaWYgKGZvdW5kQWNjb3VudCkge1xuICAgICAgYWNjb3VudCA9IHsgLi4uZm91bmRBY2NvdW50LCBlbWFpbDogdW5kZWZpbmVkIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoZ2l0aHViX3VzZXJuYW1lKSB7XG4gICAgY29uc3QgZm91bmRBY2NvdW50ID0gY3R4LmRiLmFjY291bnRzLmZpbmQoXG4gICAgICAoYWNjOiBBY2NvdW50KSA9PlxuICAgICAgICBhY2MuZ2l0aHViX3VzZXJuYW1lPy50b0xvd2VyQ2FzZSgpID09PSBnaXRodWJfdXNlcm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICApXG4gICAgaWYgKGZvdW5kQWNjb3VudCkge1xuICAgICAgYWNjb3VudCA9IHsgLi4uZm91bmRBY2NvdW50LCBlbWFpbDogdW5kZWZpbmVkIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYWNjb3VudCA9IGN0eC5kYi5nZXRBY2NvdW50KGN0eC5hdXRoLmFjY291bnRfaWQpXG4gIH1cblxuICBpZiAoIWFjY291bnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhY2NvdW50X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJBY2NvdW50IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oeyBhY2NvdW50IH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBhY2NvdW50U2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25Cb2R5OiB6Lm9iamVjdCh7XG4gICAgcXVlcnk6IHouc3RyaW5nKCksXG4gICAgbGltaXQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZWZhdWx0KDUwKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgICBhY2NvdW50czogei5hcnJheShhY2NvdW50U2NoZW1hKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBxdWVyeSwgbGltaXQgfSA9IHJlcS5qc29uQm9keVxuICBjb25zdCBhY2NvdW50cyA9IGN0eC5kYi5zZWFyY2hBY2NvdW50cyhxdWVyeSwgbGltaXQpXG4gIHJldHVybiBjdHguanNvbih7IGFjY291bnRzLCBvazogdHJ1ZSB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHtcbiAgYWNjb3VudFNjaGVtYSxcbiAgdHNjaXJjdWl0SGFuZGxlU2NoZW1hLFxufSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCIsIFwiUEFUQ0hcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIHRzY2lyY3VpdF9oYW5kbGU6IHRzY2lyY3VpdEhhbmRsZVNjaGVtYSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIGFjY291bnQ6IGFjY291bnRTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgdHNjaXJjdWl0X2hhbmRsZSB9ID0gcmVxLmpzb25Cb2R5XG5cbiAgY29uc3QgcmVxdWVzdGVkSGFuZGxlID0gdHNjaXJjdWl0X2hhbmRsZS50cmltKClcblxuICBpZiAoIXJlcXVlc3RlZEhhbmRsZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludmFsaWRfdHNjaXJjdWl0X2hhbmRsZVwiLFxuICAgICAgbWVzc2FnZTogXCJ0c2NpcmN1aXRfaGFuZGxlIGNhbm5vdCBiZSBlbXB0eVwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBhY2NvdW50ID0gY3R4LmRiLmdldEFjY291bnQoY3R4LmF1dGguYWNjb3VudF9pZClcblxuICBpZiAoIWFjY291bnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhY2NvdW50X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJBY2NvdW50IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBleGlzdGluZ0hhbmRsZUxvd2VyID0gYWNjb3VudC50c2NpcmN1aXRfaGFuZGxlPy50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHJlcXVlc3RlZEhhbmRsZUxvd2VyID0gcmVxdWVzdGVkSGFuZGxlLnRvTG93ZXJDYXNlKClcblxuICBpZiAoZXhpc3RpbmdIYW5kbGVMb3dlciA9PT0gcmVxdWVzdGVkSGFuZGxlTG93ZXIpIHtcbiAgICByZXR1cm4gY3R4Lmpzb24oeyBhY2NvdW50IH0pXG4gIH1cblxuICBjb25zdCBkdXBsaWNhdGVBY2NvdW50ID0gY3R4LmRiXG4gICAgLmdldFN0YXRlKClcbiAgICAuYWNjb3VudHMuZmluZChcbiAgICAgIChhKSA9PlxuICAgICAgICBhLnRzY2lyY3VpdF9oYW5kbGU/LnRvTG93ZXJDYXNlKCkgPT09IHJlcXVlc3RlZEhhbmRsZUxvd2VyICYmXG4gICAgICAgIGEuYWNjb3VudF9pZCAhPT0gY3R4LmF1dGguYWNjb3VudF9pZCxcbiAgICApXG5cbiAgaWYgKGR1cGxpY2F0ZUFjY291bnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhY2NvdW50X3RzY2lyY3VpdF9oYW5kbGVfYWxyZWFkeV9leGlzdHNcIixcbiAgICAgIG1lc3NhZ2U6IFwiQW5vdGhlciBhY2NvdW50IGFscmVhZHkgdXNlcyB0aGlzIHRzY2lyY3VpdCBoYW5kbGVcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgdXBkYXRlZEFjY291bnQgPSBjdHguZGIudXBkYXRlQWNjb3VudChjdHguYXV0aC5hY2NvdW50X2lkLCB7XG4gICAgdHNjaXJjdWl0X2hhbmRsZTogcmVxdWVzdGVkSGFuZGxlLFxuICB9KVxuXG4gIGlmICghdXBkYXRlZEFjY291bnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhY2NvdW50X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJBY2NvdW50IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cbiAgaWYgKGFjY291bnQucGVyc29uYWxfb3JnX2lkKSB7XG4gICAgY29uc3QgcGVyc29uYWxPcmcgPSBjdHguZGJcbiAgICAgIC5nZXRTdGF0ZSgpXG4gICAgICAub3JnYW5pemF0aW9ucy5maW5kKChvcmcpID0+IG9yZy5vcmdfaWQgPT09IGFjY291bnQucGVyc29uYWxfb3JnX2lkKVxuICAgIGlmIChwZXJzb25hbE9yZyAmJiBwZXJzb25hbE9yZy5pc19wZXJzb25hbF9vcmcpIHtcbiAgICAgIGN0eC5kYi51cGRhdGVPcmdhbml6YXRpb24oYWNjb3VudC5wZXJzb25hbF9vcmdfaWQsIHtcbiAgICAgICAgdHNjaXJjdWl0X2hhbmRsZTogcmVxdWVzdGVkSGFuZGxlLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oeyBhY2NvdW50OiB1cGRhdGVkQWNjb3VudCB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgYWlSZXZpZXdTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKCksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIGFpX3JldmlldzogYWlSZXZpZXdTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgcGFja2FnZV9yZWxlYXNlX2lkIH0gPSByZXEuanNvbkJvZHkgPz8ge31cblxuICBpZiAocGFja2FnZV9yZWxlYXNlX2lkKSB7XG4gICAgY29uc3QgcmVsZWFzZSA9IGN0eC5kYi5nZXRQYWNrYWdlUmVsZWFzZUJ5SWQocGFja2FnZV9yZWxlYXNlX2lkKVxuICAgIGlmICghcmVsZWFzZSkge1xuICAgICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX3JlbGVhc2Vfbm90X2ZvdW5kXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgICAgfSlcbiAgICB9XG4gICAgY3R4LmRiLnVwZGF0ZVBhY2thZ2VSZWxlYXNlKHtcbiAgICAgIC4uLnJlbGVhc2UsXG4gICAgICBhaV9yZXZpZXdfcmVxdWVzdGVkOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBhaV9yZXZpZXcgPSBjdHguZGIuYWRkQWlSZXZpZXcoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogcGFja2FnZV9yZWxlYXNlX2lkLFxuICAgIGFpX3Jldmlld190ZXh0OiBudWxsLFxuICAgIHN0YXJ0X3Byb2Nlc3NpbmdfYXQ6IG51bGwsXG4gICAgZmluaXNoZWRfcHJvY2Vzc2luZ19hdDogbnVsbCxcbiAgICBwcm9jZXNzaW5nX2Vycm9yOiBudWxsLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBkaXNwbGF5X3N0YXR1czogXCJwZW5kaW5nXCIsXG4gIH0pXG5cbiAgcmV0dXJuIGN0eC5qc29uKHsgYWlfcmV2aWV3IH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBhaVJldmlld1NjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIHF1ZXJ5UGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgYWlfcmV2aWV3X2lkOiB6LnN0cmluZygpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgYWlfcmV2aWV3OiBhaVJldmlld1NjaGVtYSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBhaV9yZXZpZXdfaWQgfSA9IHJlcS5xdWVyeVxuICBjb25zdCBhaV9yZXZpZXcgPSBjdHguZGIuZ2V0QWlSZXZpZXdCeUlkKGFpX3Jldmlld19pZClcbiAgaWYgKCFhaV9yZXZpZXcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhaV9yZXZpZXdfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIkFJIHJldmlldyBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG4gIHJldHVybiBjdHguanNvbih7IGFpX3JldmlldyB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgYWlSZXZpZXdTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBhaV9yZXZpZXdzOiB6LmFycmF5KGFpUmV2aWV3U2NoZW1hKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgYWlfcmV2aWV3cyA9IGN0eC5kYi5saXN0QWlSZXZpZXdzKClcbiAgcmV0dXJuIGN0eC5qc29uKHsgYWlfcmV2aWV3cyB9KVxufSlcbiIsICIvKipcbiAqIEZvcndhcmQgcmVxdWVzdCB0byBhbnRocm9waWNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgYXN5bmMgKHJlcTogUmVxdWVzdCkgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpXG4gIGNvbnN0IGFudGhyb3BpY0FwaUtleSA9IHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZXG5cbiAgaWYgKCFhbnRocm9waWNBcGlLZXkpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiQW50aHJvcGljIEFQSSBrZXkgaXMgbm90IHNldFwiLCB7IHN0YXR1czogNTAwIH0pXG4gIH1cblxuICBjb25zdCBhbnRocm9waWNVcmwgPVxuICAgIFwiaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbVwiICsgdXJsLnBhdGhuYW1lLnJlcGxhY2UoL15cXC9hcGlcXC9haS8sIFwiXCIpXG5cbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHJlcS5oZWFkZXJzKVxuICBoZWFkZXJzLnNldChcIngtYXBpLWtleVwiLCBgJHthbnRocm9waWNBcGlLZXl9YClcblxuICBjb25zb2xlLmxvZyhcInNlbmRpbmcgcmVxdWVzdCB0byBhbnRocm9waWNcIilcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhbnRocm9waWNVcmwsIHtcbiAgICBtZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgaGVhZGVyczogaGVhZGVycyxcbiAgICBib2R5OiByZXEuYm9keSxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZHVwbGV4OiBcImhhbGZcIixcbiAgfSkudGhlbigocikgPT4gci5qc29uKCkpXG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeShyZXNwb25zZSksIHtcbiAgICBzdGF0dXM6IDIwMCxcbiAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gIH0pXG59XG4iLCAiaW1wb3J0IGFpIGZyb20gXCIuL2FpL1suLi5hbnlyb3V0ZV1cIlxuZXhwb3J0IGRlZmF1bHQgYWlcbiIsICJpbXBvcnQgeyBSZWFkYWJsZVN0cmVhbSB9IGZyb20gXCJzdHJlYW0vd2ViXCJcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgKHJlcTogUmVxdWVzdCkgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpXG4gIGNvbnN0IGFudGhyb3BpY0FwaUtleSA9IHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZXG5cbiAgaWYgKCFhbnRocm9waWNBcGlLZXkpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiQW50aHJvcGljIEFQSSBrZXkgaXMgbm90IHNldFwiLCB7IHN0YXR1czogNTAwIH0pXG4gIH1cblxuICBjb25zdCBhbnRocm9waWNVcmwgPVxuICAgIFwiaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbVwiICsgdXJsLnBhdGhuYW1lLnJlcGxhY2UoL15cXC9hcGlcXC9haS8sIFwiXCIpXG5cbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHJlcS5oZWFkZXJzKVxuICBoZWFkZXJzLnNldChcIngtYXBpLWtleVwiLCBgJHthbnRocm9waWNBcGlLZXl9YClcbiAgaGVhZGVycy5zZXQoXCJBY2NlcHRcIiwgXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiKVxuICBoZWFkZXJzLnNldChcIkNhY2hlLUNvbnRyb2xcIiwgXCJuby1jYWNoZVwiKVxuICBoZWFkZXJzLnNldChcIkNvbm5lY3Rpb25cIiwgXCJrZWVwLWFsaXZlXCIpXG5cbiAgY29uc29sZS5sb2coXCJzZW5kaW5nIHJlcXVlc3QgdG8gYW50aHJvcGljXCIpXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYW50aHJvcGljVXJsLCB7XG4gICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgYm9keTogcmVxLmJvZHksXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGR1cGxleDogXCJoYWxmXCIsXG4gIH0pXG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIGlzIHN1Y2Nlc3NmdWxcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoXG4gICAgICBgQW50aHJvcGljIEFQSSByZXR1cm5lZCBhbiBlcnJvcjogJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gLFxuICAgICAge1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIH0sXG4gICAgKVxuICB9XG5cbiAgLy8gQ3JlYXRlIGEgUmVhZGFibGVTdHJlYW0gdG8gcHJvY2VzcyB0aGUgcmVzcG9uc2VcbiAgY29uc3Qgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBzdGFydChjb250cm9sbGVyKSB7XG4gICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5IS5nZXRSZWFkZXIoKVxuXG4gICAgICB0cnkge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICAgICAgICBpZiAoZG9uZSkgYnJlYWtcbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUodmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpXG4gICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgICAgfVxuICAgIH0sXG4gIH0pXG5cbiAgLy8gUmV0dXJuIGEgc3RyZWFtaW5nIHJlc3BvbnNlXG4gIHJldHVybiBuZXcgUmVzcG9uc2Uoc3RyZWFtIGFzIGFueSwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwidGV4dC9ldmVudC1zdHJlYW1cIixcbiAgICAgIFwiQ2FjaGUtQ29udHJvbFwiOiBcIm5vLWNhY2hlXCIsXG4gICAgICBDb25uZWN0aW9uOiBcImtlZXAtYWxpdmVcIixcbiAgICB9LFxuICB9KVxufVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBwcmVmaXg6IHouc3RyaW5nKCksXG4gICAgc3VmZml4OiB6LnN0cmluZygpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgcHJlZGljdGlvbjogei5zdHJpbmcoKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgcmV0dXJuIGN0eC5qc29uKHsgcHJlZGljdGlvbjogXCJ7LyogbW9jayBhdXRvY29tcGxldGUgcHJlZGljdGlvbiAqL31cIiB9KVxufSlcbiIsICJpbXBvcnQgeyBidWdSZXBvcnRTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5jb25zdCByZXF1ZXN0U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0ZXh0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaXNfYXV0b19kZWxldGVkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIGRlbGV0ZV9hdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdXBlclJlZmluZSgoZGF0YSwgY3R4KSA9PiB7XG4gICAgaWYgKGRhdGEuaXNfYXV0b19kZWxldGVkICYmICFkYXRhLmRlbGV0ZV9hdCkge1xuICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgY29kZTogei5ab2RJc3N1ZUNvZGUuY3VzdG9tLFxuICAgICAgICBtZXNzYWdlOiBcImRlbGV0ZV9hdCBpcyByZXF1aXJlZCB3aGVuIGlzX2F1dG9fZGVsZXRlZCBpcyB0cnVlXCIsXG4gICAgICAgIHBhdGg6IFtcImRlbGV0ZV9hdFwiXSxcbiAgICAgIH0pXG4gICAgfVxuICB9KVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25Cb2R5OiByZXF1ZXN0U2NoZW1hLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5saXRlcmFsKHRydWUpLFxuICAgIGJ1Z19yZXBvcnQ6IGJ1Z1JlcG9ydFNjaGVtYSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyB0ZXh0LCBpc19hdXRvX2RlbGV0ZWQgPSBmYWxzZSwgZGVsZXRlX2F0IH0gPSByZXEuanNvbkJvZHlcblxuICBjb25zdCBidWdSZXBvcnQgPSBjdHguZGIuYWRkQnVnUmVwb3J0KHtcbiAgICByZXBvcnRlcl9hY2NvdW50X2lkOiBjdHguYXV0aC5hY2NvdW50X2lkLFxuICAgIHRleHQ6IHRleHQgPz8gbnVsbCxcbiAgICBpc19hdXRvX2RlbGV0ZWQsXG4gICAgZGVsZXRlX2F0OiBpc19hdXRvX2RlbGV0ZWQgPyBkZWxldGVfYXQgOiBudWxsLFxuICB9KVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb2s6IHRydWUsXG4gICAgYnVnX3JlcG9ydDogYnVnUmVwb3J0LFxuICB9KVxufSlcbiIsICJpbXBvcnQgSlNaaXAgZnJvbSBcImpzemlwXCJcbmltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBxdWVyeVBhcmFtczogei5vYmplY3Qoe1xuICAgIGJ1Z19yZXBvcnRfaWQ6IHouc3RyaW5nKCkudXVpZCgpLFxuICB9KSxcbiAgcmF3UmVzcG9uc2U6IHRydWUsXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBidWdfcmVwb3J0X2lkIH0gPSByZXEucXVlcnlcblxuICBjb25zdCBidWdSZXBvcnQgPSBjdHguZGIuZ2V0QnVnUmVwb3J0QnlJZChidWdfcmVwb3J0X2lkKVxuICBpZiAoIWJ1Z1JlcG9ydCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImJ1Z19yZXBvcnRfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIkJ1ZyByZXBvcnQgbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGlmIChidWdSZXBvcnQucmVwb3J0ZXJfYWNjb3VudF9pZCAhPT0gY3R4LmF1dGguYWNjb3VudF9pZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImJ1Z19yZXBvcnRfZm9yYmlkZGVuXCIsXG4gICAgICBtZXNzYWdlOiBcIllvdSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhpcyBidWcgcmVwb3J0XCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGJ1Z1JlcG9ydEZpbGVzID0gY3R4LmRiLmdldEJ1Z1JlcG9ydEZpbGVzQnlCdWdSZXBvcnRJZChidWdfcmVwb3J0X2lkKVxuXG4gIGNvbnN0IHppcCA9IG5ldyBKU1ppcCgpXG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGJ1Z1JlcG9ydEZpbGVzKSB7XG4gICAgaWYgKGZpbGUuaXNfdGV4dCkge1xuICAgICAgemlwLmZpbGUoZmlsZS5maWxlX3BhdGgsIGZpbGUuY29udGVudF90ZXh0ID8/IFwiXCIsIHsgYmluYXJ5OiBmYWxzZSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBieXRlcyA9IGZpbGUuY29udGVudF9ieXRlcyA/PyBuZXcgVWludDhBcnJheSgpXG4gICAgICB6aXAuZmlsZShmaWxlLmZpbGVfcGF0aCwgYnl0ZXMsIHsgYmluYXJ5OiB0cnVlIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgemlwQ29udGVudCA9IGF3YWl0IHppcC5nZW5lcmF0ZUFzeW5jKHsgdHlwZTogXCJhcnJheWJ1ZmZlclwiIH0pXG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZSh6aXBDb250ZW50LCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi96aXBcIixcbiAgICAgIFwiQ29udGVudC1EaXNwb3NpdGlvblwiOiBgYXR0YWNobWVudDsgZmlsZW5hbWU9XCJidWctcmVwb3J0LSR7YnVnX3JlcG9ydF9pZH0uemlwXCJgLFxuICAgIH0sXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCJub2RlOmJ1ZmZlclwiXG5pbXBvcnQgeyBidWdSZXBvcnRGaWxlUmVzcG9uc2VTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgbm9ybWFsaXplUHJvamVjdEZpbGVQYXRoQW5kVmFsaWRhdGUgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvdXRpbHMvbm9ybWFsaXplUHJvamVjdEZpbGVQYXRoXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuY29uc3QgcmVxdWVzdFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgYnVnX3JlcG9ydF9pZDogei5zdHJpbmcoKS51dWlkKCksXG4gICAgZmlsZV9wYXRoOiB6LnN0cmluZygpLFxuICAgIGNvbnRlbnRfbWltZXR5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBjb250ZW50X3RleHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBjb250ZW50X2Jhc2U2NDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3VwZXJSZWZpbmUoKGRhdGEsIGN0eCkgPT4ge1xuICAgIGlmIChkYXRhLmNvbnRlbnRfdGV4dCAhPT0gdW5kZWZpbmVkICYmIGRhdGEuY29udGVudF9iYXNlNjQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgY29kZTogei5ab2RJc3N1ZUNvZGUuY3VzdG9tLFxuICAgICAgICBtZXNzYWdlOiBcIlByb3ZpZGUgZWl0aGVyIGNvbnRlbnRfdGV4dCBvciBjb250ZW50X2Jhc2U2NCwgbm90IGJvdGhcIixcbiAgICAgICAgcGF0aDogW1wiY29udGVudF90ZXh0XCJdLFxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbmNvbnN0IGluZmVyTWltZXR5cGUgPSAoZmlsZVBhdGg6IHN0cmluZywgcHJvdmlkZWQ/OiBzdHJpbmcpID0+IHtcbiAgaWYgKHByb3ZpZGVkKSByZXR1cm4gcHJvdmlkZWRcblxuICBjb25zdCBsb3dlclBhdGggPSBmaWxlUGF0aC50b0xvd2VyQ2FzZSgpXG4gIGlmIChsb3dlclBhdGguZW5kc1dpdGgoXCIudHNcIikgfHwgbG93ZXJQYXRoLmVuZHNXaXRoKFwiLnRzeFwiKSkge1xuICAgIHJldHVybiBcInRleHQvdHlwZXNjcmlwdFwiXG4gIH1cbiAgaWYgKGxvd2VyUGF0aC5lbmRzV2l0aChcIi5qc1wiKSkgcmV0dXJuIFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiXG4gIGlmIChsb3dlclBhdGguZW5kc1dpdGgoXCIuanNvblwiKSkgcmV0dXJuIFwiYXBwbGljYXRpb24vanNvblwiXG4gIGlmIChsb3dlclBhdGguZW5kc1dpdGgoXCIubWRcIikpIHJldHVybiBcInRleHQvbWFya2Rvd25cIlxuICBpZiAobG93ZXJQYXRoLmVuZHNXaXRoKFwiLmh0bWxcIikpIHJldHVybiBcInRleHQvaHRtbFwiXG4gIGlmIChsb3dlclBhdGguZW5kc1dpdGgoXCIuY3NzXCIpKSByZXR1cm4gXCJ0ZXh0L2Nzc1wiXG4gIGlmIChsb3dlclBhdGguZW5kc1dpdGgoXCIudHh0XCIpKSByZXR1cm4gXCJ0ZXh0L3BsYWluXCJcbiAgcmV0dXJuIFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCJcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogcmVxdWVzdFNjaGVtYSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHoubGl0ZXJhbCh0cnVlKSxcbiAgICBidWdfcmVwb3J0X2ZpbGU6IGJ1Z1JlcG9ydEZpbGVSZXNwb25zZVNjaGVtYSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3Qge1xuICAgIGJ1Z19yZXBvcnRfaWQsXG4gICAgZmlsZV9wYXRoLFxuICAgIGNvbnRlbnRfbWltZXR5cGUsXG4gICAgY29udGVudF90ZXh0LFxuICAgIGNvbnRlbnRfYmFzZTY0LFxuICB9ID0gcmVxLmpzb25Cb2R5XG5cbiAgY29uc3QgYnVnUmVwb3J0ID0gY3R4LmRiLmdldEJ1Z1JlcG9ydEJ5SWQoYnVnX3JlcG9ydF9pZClcbiAgaWYgKCFidWdSZXBvcnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJidWdfcmVwb3J0X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJCdWcgcmVwb3J0IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBpZiAoYnVnUmVwb3J0LnJlcG9ydGVyX2FjY291bnRfaWQgIT09IGN0eC5hdXRoLmFjY291bnRfaWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMywge1xuICAgICAgZXJyb3JfY29kZTogXCJidWdfcmVwb3J0X2ZvcmJpZGRlblwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG8gbm90IGhhdmUgYWNjZXNzIHRvIG1vZGlmeSB0aGlzIGJ1ZyByZXBvcnRcIixcbiAgICB9KVxuICB9XG5cbiAgbGV0IG5vcm1hbGl6ZWRQYXRoOiBzdHJpbmdcbiAgdHJ5IHtcbiAgICBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZVByb2plY3RGaWxlUGF0aEFuZFZhbGlkYXRlKGZpbGVfcGF0aClcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJpbnZhbGlkX2ZpbGVfcGF0aFwiLFxuICAgICAgbWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkludmFsaWQgZmlsZSBwYXRoXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IG1pbWVUeXBlID0gaW5mZXJNaW1ldHlwZShub3JtYWxpemVkUGF0aCwgY29udGVudF9taW1ldHlwZSlcbiAgY29uc3QgaGFzQmFzZTY0ID0gY29udGVudF9iYXNlNjQgIT09IHVuZGVmaW5lZFxuICBjb25zdCBoYXNUZXh0ID0gY29udGVudF90ZXh0ICE9PSB1bmRlZmluZWRcbiAgY29uc3QgaXNUZXh0VXBsb2FkID0gaGFzVGV4dCB8fCAhaGFzQmFzZTY0XG4gIGNvbnN0IHN0b3JlZFRleHQgPSBpc1RleHRVcGxvYWQgPyAoY29udGVudF90ZXh0ID8/IFwiXCIpIDogbnVsbFxuICBjb25zdCBzdG9yZWRCeXRlcyA9XG4gICAgaXNUZXh0VXBsb2FkIHx8ICFoYXNCYXNlNjRcbiAgICAgID8gbnVsbFxuICAgICAgOiBCdWZmZXIuZnJvbShjb250ZW50X2Jhc2U2NCA/PyBcIlwiLCBcImJhc2U2NFwiKVxuXG4gIGNvbnN0IGJ1Z1JlcG9ydEZpbGUgPSBjdHguZGIuYWRkQnVnUmVwb3J0RmlsZSh7XG4gICAgYnVnX3JlcG9ydF9pZCxcbiAgICBmaWxlX3BhdGg6IG5vcm1hbGl6ZWRQYXRoLFxuICAgIGNvbnRlbnRfbWltZXR5cGU6IG1pbWVUeXBlLFxuICAgIGlzX3RleHQ6IGlzVGV4dFVwbG9hZCxcbiAgICBjb250ZW50X3RleHQ6IHN0b3JlZFRleHQsXG4gICAgY29udGVudF9ieXRlczogc3RvcmVkQnl0ZXMsXG4gIH0pXG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgICBidWdfcmVwb3J0X2ZpbGU6IHtcbiAgICAgIGJ1Z19yZXBvcnRfZmlsZV9pZDogYnVnUmVwb3J0RmlsZS5idWdfcmVwb3J0X2ZpbGVfaWQsXG4gICAgICBidWdfcmVwb3J0X2lkOiBidWdSZXBvcnRGaWxlLmJ1Z19yZXBvcnRfaWQsXG4gICAgICBmaWxlX3BhdGg6IGJ1Z1JlcG9ydEZpbGUuZmlsZV9wYXRoLFxuICAgICAgY29udGVudF9taW1ldHlwZTogYnVnUmVwb3J0RmlsZS5jb250ZW50X21pbWV0eXBlLFxuICAgICAgaXNfdGV4dDogYnVnUmVwb3J0RmlsZS5pc190ZXh0LFxuICAgICAgY3JlYXRlZF9hdDogYnVnUmVwb3J0RmlsZS5jcmVhdGVkX2F0LFxuICAgIH0sXG4gIH0pXG59KVxuIiwgImNvbnN0IFJFU1RSSUNURURfRElSUyA9IFtcIi9ub2RlX21vZHVsZXMvXCIsIFwiL2Rpc3QvXCIsIFwiLy5naXQvXCJdXG5cbi8qKlxuICogQSBub3JtYWxpemVkIHByb2plY3QgcGF0aCBhbHdheXMgc3RhcnRzIHdpdGggXCIuL1wiIGFuZCBuZXZlciBlbmRzIHdpdGggYSBzbGFzaC5cbiAqIEl0IGhhcyBubyBiYWNrd2FyZHMgc2xhc2hlcyBhbmQgbm8gZG91YmxlIHNsYXNoZXMuIEl0IGRvZXMgbm90IGdvIHRvIHBhcmVudFxuICogZGlyZWN0b3JpZXMuIEl0IGlzIG5vdCBhIGRpcmVjdG9yeSAobXVzdCBoYXZlIGEgZmlsZSBleHRlbnNpb24pXG4gKlxuICogR09PRDpcbiAqICAtIHNyYy9pbmRleC50c1xuICogIC0gUkVBRE1FLm1kXG4gKlxuICogQkFEOlxuICogLSAuL1JFQURNRS5tZFxuICogLSAuL3NyYy9pbmRleC50c1xuICogLSBzcmNcXGluZGV4LnRzXG4gKiAtIC4uL1JFQURNRS5tZFxuICogLSAuL3NyYy9cbiAqIC0gLi9zcmNcbiAqXG4gKiBBZGRpdGlvbmFsbHksIHRocm93IG9uIGRpcmVjdG9yaWVzIHRoYXQgc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkLCBlLmcuXG4gKiAtIG5vZGVfbW9kdWxlc1xuICogLSBkaXN0XG4gKiAtIC5naXRcbiAqL1xuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVByb2plY3RGaWxlUGF0aEFuZFZhbGlkYXRlID0gKHJhd1BhdGg6IHN0cmluZykgPT4ge1xuICBjb25zdCBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZVByb2plY3RGaWxlUGF0aChyYXdQYXRoKVxuXG4gIGlmIChub3JtYWxpemVkUGF0aC5pbmNsdWRlcyhcIi4uL1wiKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiSW52YWxpZCBwcm9qZWN0IGZpbGUgcGF0aC4gUGFyZW50IGRpcmVjdG9yaWVzIGFyZSBub3QgYWxsb3dlZC5cIixcbiAgICApXG4gIH1cblxuICBpZiAoUkVTVFJJQ1RFRF9ESVJTLnNvbWUoKGRpcikgPT4gbm9ybWFsaXplZFBhdGguaW5jbHVkZXMoZGlyKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBwcm9qZWN0IGZpbGUgcGF0aC4gUmVzdHJpY3RlZCBkaXJlY3RvcmllcyAoJHtSRVNUUklDVEVEX0RJUlMubWFwKFxuICAgICAgICAocmQpID0+IHJkLnNsaWNlKDEsIC0xKSxcbiAgICAgICkuam9pbihcIiwgXCIpfSkgYXJlIG5vdCBhbGxvd2VkLmAsXG4gICAgKVxuICB9XG5cbiAgaWYgKCFub3JtYWxpemVkUGF0aC5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBwcm9qZWN0IGZpbGUgcGF0aC4gTXVzdCBoYXZlIGEgZmlsZSBleHRlbnNpb24uIEdpdmVuIFwiJHtyYXdQYXRofVwiYCxcbiAgICApXG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZFBhdGhcbn1cblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVByb2plY3RGaWxlUGF0aCA9IChyYXdQYXRoOiBzdHJpbmcpID0+IHtcbiAgbGV0IG5vcm1hbGl6ZWRQYXRoID0gcmF3UGF0aC50cmltKCkgLy8gUmVtb3ZlIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZVxuICBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnJlcGxhY2UoL1xcLysvZywgXCIvXCIpIC8vIFJlcGxhY2UgbXVsdGlwbGUgY29uc2VjdXRpdmUgc2xhc2hlcyB3aXRoIGEgc2luZ2xlIHNsYXNoXG4gIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZFBhdGgucmVwbGFjZSgvXlxcLlxcLy8sIFwiXCIpIC8vIFJlbW92ZSBsZWFkaW5nIFwiLi9cIlxuICBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnJlcGxhY2UoL1xcLyQvLCBcIlwiKSAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVkUGF0aC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKSAvLyBSZXBsYWNlIGJhY2tzbGFzaGVzIHdpdGggZm9yd2FyZCBzbGFzaGVzXG4gIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZFBhdGgucmVwbGFjZSgvXlxcLy8sIFwiXCIpIC8vIFJlbW92ZSBsZWFkaW5nIFwiL1wiXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoXG59XG4iLCAiaW1wb3J0IHsgZGF0YXNoZWV0U2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIGNoaXBfbmFtZTogei5zdHJpbmcoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIGRhdGFzaGVldDogZGF0YXNoZWV0U2NoZW1hLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IGNoaXBfbmFtZSB9ID0gcmVxLmpzb25Cb2R5XG4gIGNvbnN0IGRhdGFzaGVldCA9IGN0eC5kYi5hZGREYXRhc2hlZXQoeyBjaGlwX25hbWUgfSlcbiAgcmV0dXJuIGN0eC5qc29uKHsgZGF0YXNoZWV0IH0pXG59KVxuIiwgImltcG9ydCB7IGRhdGFzaGVldFNjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcbmltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIiwgXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAgcXVlcnlQYXJhbXM6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIGRhdGFzaGVldF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgY2hpcF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAucmVmaW5lKCh2YWwpID0+IHZhbC5kYXRhc2hlZXRfaWQgfHwgdmFsLmNoaXBfbmFtZSwge1xuICAgICAgbWVzc2FnZTogXCJkYXRhc2hlZXRfaWQgb3IgY2hpcF9uYW1lIHJlcXVpcmVkXCIsXG4gICAgfSksXG4gIGpzb25Cb2R5OiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIGRhdGFzaGVldDogZGF0YXNoZWV0U2NoZW1hLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IGRhdGFzaGVldF9pZCwgY2hpcF9uYW1lIH0gPSByZXEucXVlcnlcbiAgbGV0IGRhdGFzaGVldFxuICBpZiAoZGF0YXNoZWV0X2lkKSB7XG4gICAgZGF0YXNoZWV0ID0gY3R4LmRiLmdldERhdGFzaGVldEJ5SWQoZGF0YXNoZWV0X2lkKVxuICB9IGVsc2UgaWYgKGNoaXBfbmFtZSkge1xuICAgIGRhdGFzaGVldCA9IGN0eC5kYi5nZXREYXRhc2hlZXRCeUNoaXBOYW1lKGNoaXBfbmFtZSlcbiAgfVxuICBpZiAoIWRhdGFzaGVldCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImRhdGFzaGVldF9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiRGF0YXNoZWV0IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGN0eC5qc29uKHsgZGF0YXNoZWV0IH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIiwgXCJQT1NUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgY2hpcF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaXNfcG9wdWxhcjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIGRhdGFzaGVldHM6IHouYXJyYXkoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIGRhdGFzaGVldF9pZDogei5zdHJpbmcoKS51dWlkKCksXG4gICAgICAgIGNoaXBfbmFtZTogei5zdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgICksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgY2hpcF9uYW1lLCBpc19wb3B1bGFyIH0gPSByZXEuY29tbW9uUGFyYW1zXG4gIGNvbnN0IGRhdGFzaGVldHMgPSBjdHguZGJcbiAgICAubGlzdERhdGFzaGVldHMoeyBjaGlwX25hbWUsIGlzX3BvcHVsYXIgfSlcbiAgICAubWFwKChkcykgPT4gKHtcbiAgICAgIGRhdGFzaGVldF9pZDogZHMuZGF0YXNoZWV0X2lkLFxuICAgICAgY2hpcF9uYW1lOiBkcy5jaGlwX25hbWUsXG4gICAgfSkpXG5cbiAgcmV0dXJuIGN0eC5qc29uKHsgZGF0YXNoZWV0cyB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCBhY2NvdW50ID0gY3R4LmRiLmdldEFjY291bnQoY3R4LmF1dGguYWNjb3VudF9pZClcblxuICBpZiAoIWFjY291bnQpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiQWNjb3VudCBub3QgZm91bmRcIiwgeyBzdGF0dXM6IDQwMSB9KVxuICB9XG5cbiAgLy8gR2V0IHJldHVybl90b19wYWdlIGZyb20gcXVlcnkgcGFyYW1zXG4gIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybClcbiAgY29uc3QgcmV0dXJuVG9QYWdlID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJyZXR1cm5fdG9fcGFnZVwiKSB8fCBcIi9cIlxuXG4gIC8vIENoZWNrIGlmIHVzZXIgYWxyZWFkeSBoYXMgYW4gYWN0aXZlIEdpdEh1YiBpbnN0YWxsYXRpb25cbiAgY29uc3QgZXhpc3RpbmdJbnN0YWxsYXRpb24gPSBjdHguZGIuZ2l0aHViSW5zdGFsbGF0aW9ucy5maW5kKFxuICAgIChpbnN0YWxsYXRpb24pID0+XG4gICAgICBpbnN0YWxsYXRpb24uYWNjb3VudF9pZCA9PT0gY3R4LmF1dGguYWNjb3VudF9pZCAmJiBpbnN0YWxsYXRpb24uaXNfYWN0aXZlLFxuICApXG5cbiAgaWYgKGV4aXN0aW5nSW5zdGFsbGF0aW9uKSB7XG4gICAgLy8gSWYgaW5zdGFsbGF0aW9uIGFscmVhZHkgZXhpc3RzLCByZWRpcmVjdCBiYWNrXG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShcIlwiLCB7XG4gICAgICBzdGF0dXM6IDMwMixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgTG9jYXRpb246IHJldHVyblRvUGFnZSxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIG5ldyBHaXRIdWIgaW5zdGFsbGF0aW9uIChzaW11bGF0aW5nIHRoZSB1c2VyIGNvbXBsZXRpbmcgdGhlIEdpdEh1YiBBcHAgaW5zdGFsbGF0aW9uKVxuICBjb25zdCBnaXRodWJJbnN0YWxsYXRpb25JZCA9IGBmYWtlX2doX2luc3RhbGxhdGlvbl8ke0RhdGUubm93KCl9YFxuICBjb25zdCBtb2NrSW5zdGFsbGF0aW9uSWQgPSBgJHtEYXRlLm5vdygpfWAgLy8gTW9jayBHaXRIdWIgQXBwIGluc3RhbGxhdGlvbiBJRFxuXG4gIGNvbnN0IG5ld0luc3RhbGxhdGlvbiA9IHtcbiAgICBnaXRodWJfaW5zdGFsbGF0aW9uX2lkOiBnaXRodWJJbnN0YWxsYXRpb25JZCxcbiAgICBhY2NvdW50X2lkOiBjdHguYXV0aC5hY2NvdW50X2lkLFxuICAgIGluc3RhbGxhdGlvbl9pZDogbW9ja0luc3RhbGxhdGlvbklkLFxuICAgIGdpdGh1Yl91c2VybmFtZTogYWNjb3VudC5naXRodWJfdXNlcm5hbWUsXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBpc19hY3RpdmU6IHRydWUsXG4gICAgYWNjZXNzX3Rva2VuOiBgZ2hzX21vY2tfdG9rZW5fJHtEYXRlLm5vdygpfWAsIC8vIE1vY2sgYWNjZXNzIHRva2VuXG4gICAgYWNjZXNzX3Rva2VuX2V4cGlyZXNfYXQ6IG5ldyBEYXRlKERhdGUubm93KCkgKyAzNjAwMDAwKS50b0lTT1N0cmluZygpLCAvLyAxIGhvdXIgZnJvbSBub3dcbiAgfVxuXG4gIGN0eC5kYi5naXRodWJJbnN0YWxsYXRpb25zLnB1c2gobmV3SW5zdGFsbGF0aW9uKVxuXG4gIC8vIFJldHVybiBIVE1MIHBhZ2UgdGhhdCBzaG93cyBpbnN0YWxsYXRpb24gc3VjY2VzcyBhbmQgcmVkaXJlY3RzIGJhY2tcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShcbiAgICBgXG4gICAgPGh0bWw+XG4gICAgICA8aGVhZD5cbiAgICAgICAgPHRpdGxlPkdpdEh1YiBJbnN0YWxsYXRpb24gQ29tcGxldGU8L3RpdGxlPlxuICAgICAgICA8bWV0YSBodHRwLWVxdWl2PVwicmVmcmVzaFwiIGNvbnRlbnQ9XCIzO3VybD0ke3JldHVyblRvUGFnZX1cIj5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5IHN0eWxlPVwiZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBwYWRkaW5nOiA0MHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XG4gICAgICAgIDxoMT5cdTI3MDUgR2l0SHViIEluc3RhbGxhdGlvbiBDb21wbGV0ZSE8L2gxPlxuICAgICAgICA8cD5Zb3VyIEdpdEh1YiBhY2NvdW50IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQgdG8gdHNjaXJjdWl0LjwvcD5cbiAgICAgICAgPHA+WW91IGNhbiBub3cgYWNjZXNzIHlvdXIgcmVwb3NpdG9yaWVzIGluIHRoZSBwYWNrYWdlIHNldHRpbmdzLjwvcD5cbiAgICAgICAgPHA+UmVkaXJlY3RpbmcgeW91IGJhY2sgaW4gMyBzZWNvbmRzLi4uPC9wPlxuICAgICAgICA8YSBocmVmPVwiJHtyZXR1cm5Ub1BhZ2V9XCIgc3R5bGU9XCJjb2xvcjogIzAwNjZjYzsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZDtcIj5DbGljayBoZXJlIGlmIHlvdSdyZSBub3QgcmVkaXJlY3RlZCBhdXRvbWF0aWNhbGx5PC9hPlxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgICBgLFxuICAgIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgKVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgcmVwb3M6IHouYXJyYXkoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHVuc2NvcGVkX25hbWU6IHouc3RyaW5nKCksXG4gICAgICAgIGZ1bGxfbmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgcHJpdmF0ZTogei5ib29sZWFuKCksXG4gICAgICAgIG93bmVyOiB6Lm9iamVjdCh7XG4gICAgICAgICAgbG9naW46IHouc3RyaW5nKCksXG4gICAgICAgIH0pLFxuICAgICAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgICAgICBkZWZhdWx0X2JyYW5jaDogei5zdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgICksXG4gIH0pLFxufSkoYXN5bmMgKF9yZXEsIGN0eCkgPT4ge1xuICBjb25zdCBhY2NvdW50ID0gY3R4LmRiLmdldEFjY291bnQoY3R4LmF1dGguYWNjb3VudF9pZClcblxuICBpZiAoIWFjY291bnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMSwge1xuICAgICAgZXJyb3JfY29kZTogXCJhY2NvdW50X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJBY2NvdW50IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDaGVjayBpZiB1c2VyIGhhcyBHaXRIdWIgYWNjb3VudCBjb25uZWN0ZWRcbiAgaWYgKCFhY2NvdW50LmdpdGh1Yl91c2VybmFtZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImdpdGh1Yl9ub3RfY29ubmVjdGVkXCIsXG4gICAgICBtZXNzYWdlOlxuICAgICAgICBcIkdpdEh1YiBhY2NvdW50IG5vdCBjb25uZWN0ZWQuIFBsZWFzZSBjb25uZWN0IHlvdXIgR2l0SHViIGFjY291bnQgZmlyc3QuXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHVzZXIgaGFzIGEgR2l0SHViIGluc3RhbGxhdGlvblxuICBjb25zdCBnaXRodWJJbnN0YWxsYXRpb24gPSBjdHguZGIuZ2l0aHViSW5zdGFsbGF0aW9ucy5maW5kKFxuICAgIChpbnN0YWxsYXRpb24pID0+XG4gICAgICBpbnN0YWxsYXRpb24uYWNjb3VudF9pZCA9PT0gY3R4LmF1dGguYWNjb3VudF9pZCAmJiBpbnN0YWxsYXRpb24uaXNfYWN0aXZlLFxuICApXG5cbiAgaWYgKCFnaXRodWJJbnN0YWxsYXRpb24pIHtcbiAgICAvLyBSZXR1cm4gZW1wdHkgYXJyYXkgaWYgbm8gR2l0SHViIGluc3RhbGxhdGlvbiBmb3VuZFxuICAgIHJldHVybiBjdHguanNvbih7XG4gICAgICByZXBvczogW10sXG4gICAgfSlcbiAgfVxuXG4gIC8vIE1vY2sgcmVwb3NpdG9yaWVzIGZvciBkZW1vbnN0cmF0aW9uXG4gIC8vIEluIGEgcmVhbCBpbXBsZW1lbnRhdGlvbiwgdGhpcyB3b3VsZCBmZXRjaCBmcm9tIEdpdEh1YiBBUEkgdXNpbmcgdGhlIGluc3RhbGxhdGlvbiBhY2Nlc3MgdG9rZW5cbiAgY29uc3QgbW9ja1JlcG9zID0gW1xuICAgIHtcbiAgICAgIHVuc2NvcGVkX25hbWU6IFwibXktZWxlY3Ryb25pY3MtcHJvamVjdFwiLFxuICAgICAgZnVsbF9uYW1lOiBgJHthY2NvdW50LmdpdGh1Yl91c2VybmFtZX0vbXktZWxlY3Ryb25pY3MtcHJvamVjdGAsXG4gICAgICBvd25lcjoge1xuICAgICAgICBsb2dpbjogYWNjb3VudC5naXRodWJfdXNlcm5hbWUsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IFwiQXJkdWluby1iYXNlZCBzZW5zb3IgbW9uaXRvcmluZyBzeXN0ZW1cIixcbiAgICAgIHByaXZhdGU6IGZhbHNlLFxuICAgICAgZGVmYXVsdF9icmFuY2g6IFwibWFpblwiLFxuICAgIH0sXG4gICAge1xuICAgICAgdW5zY29wZWRfbmFtZTogXCJwY2ItZGVzaWduc1wiLFxuICAgICAgZnVsbF9uYW1lOiBgJHthY2NvdW50LmdpdGh1Yl91c2VybmFtZX0vcGNiLWRlc2lnbnNgLFxuICAgICAgb3duZXI6IHtcbiAgICAgICAgbG9naW46IGFjY291bnQuZ2l0aHViX3VzZXJuYW1lLFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbGxlY3Rpb24gb2YgUENCIGRlc2lnbnMgZm9yIHZhcmlvdXMgcHJvamVjdHNcIixcbiAgICAgIHByaXZhdGU6IHRydWUsXG4gICAgICBkZWZhdWx0X2JyYW5jaDogXCJtYWluXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICB1bnNjb3BlZF9uYW1lOiBcInRzY2lyY3VpdC1leGFtcGxlc1wiLFxuICAgICAgZnVsbF9uYW1lOiBgJHthY2NvdW50LmdpdGh1Yl91c2VybmFtZX0vdHNjaXJjdWl0LWV4YW1wbGVzYCxcbiAgICAgIG93bmVyOiB7XG4gICAgICAgIGxvZ2luOiBhY2NvdW50LmdpdGh1Yl91c2VybmFtZSxcbiAgICAgIH0sXG4gICAgICBkZXNjcmlwdGlvbjogXCJFeGFtcGxlcyBhbmQgdHV0b3JpYWxzIGZvciB0c2NpcmN1aXRcIixcbiAgICAgIHByaXZhdGU6IGZhbHNlLFxuICAgICAgZGVmYXVsdF9icmFuY2g6IFwibWFpblwiLFxuICAgIH0sXG4gIF1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIHJlcG9zOiBtb2NrUmVwb3MsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgc3VjY2Vzczogei5ib29sZWFuKCksXG4gICAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgICByZXBvc19yZWZyZXNoZWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgYWNjb3VudCA9IGN0eC5kYi5nZXRBY2NvdW50KGN0eC5hdXRoLmFjY291bnRfaWQpXG5cbiAgaWYgKCFhY2NvdW50KSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDEsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiYWNjb3VudF9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiQWNjb3VudCBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgR2l0SHViIGluc3RhbGxhdGlvblxuICBjb25zdCBnaXRodWJJbnN0YWxsYXRpb24gPSBjdHguZGIuZ2l0aHViSW5zdGFsbGF0aW9ucy5maW5kKFxuICAgIChpbnN0YWxsYXRpb24pID0+XG4gICAgICBpbnN0YWxsYXRpb24uYWNjb3VudF9pZCA9PT0gY3R4LmF1dGguYWNjb3VudF9pZCAmJiBpbnN0YWxsYXRpb24uaXNfYWN0aXZlLFxuICApXG5cbiAgaWYgKCFnaXRodWJJbnN0YWxsYXRpb24pIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJnaXRodWJfbm90X2Nvbm5lY3RlZFwiLFxuICAgICAgbWVzc2FnZTogXCJHaXRIdWIgYWNjb3VudCBub3QgY29ubmVjdGVkXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIEluIGEgcmVhbCBpbXBsZW1lbnRhdGlvbiwgdGhpcyB3b3VsZCByZWZyZXNoIHJlcG9zIGZyb20gR2l0SHViIEFQSVxuICAvLyBGb3IgZmFrZSBBUEksIHNpbXVsYXRlIHJlZnJlc2hpbmcgYnkgdXBkYXRpbmcgdGhlIGluc3RhbGxhdGlvbiB0aW1lc3RhbXBcbiAgZ2l0aHViSW5zdGFsbGF0aW9uLnVwZGF0ZWRfYXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgbWVzc2FnZTogXCJHaXRIdWIgcmVwb3NpdG9yaWVzIHJlZnJlc2hlZCBzdWNjZXNzZnVsbHlcIixcbiAgICByZXBvc19yZWZyZXNoZWQ6IDMsIC8vIE1vY2sgbnVtYmVyXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIl0sXG4gIGpzb25SZXNwb25zZTogei5vYmplY3QoeyBvazogei5ib29sZWFuKCkgfSksXG59KShhc3luYyAocmVxOiBhbnksIGN0eDogYW55KSA9PiB7XG4gIHJldHVybiBjdHguanNvbih7IG9rOiB0cnVlIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgbXMgZnJvbSBcIm1zXCJcbmltcG9ydCB7IFNpZ25KV1QgfSBmcm9tIFwiam9zZVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAganNvbkJvZHk6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIGFjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgfSlcbiAgICAub3IoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIGdpdGh1Yl91c2VybmFtZTogei5zdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgICksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIHNlc3Npb246IHoub2JqZWN0KHtcbiAgICAgIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gICAgICBhY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgICAgZXhwaXJlc19hdDogei5zdHJpbmcoKSxcbiAgICAgIGlzX2NsaV9zZXNzaW9uOiB6LmJvb2xlYW4oKSxcbiAgICAgIHRva2VuOiB6LnN0cmluZygpLFxuICAgIH0pLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBsZXQgYWNjb3VudFxuICBpZiAoXCJhY2NvdW50X2lkXCIgaW4gcmVxLmpzb25Cb2R5KSB7XG4gICAgYWNjb3VudCA9IGN0eC5kYi5nZXRBY2NvdW50KHJlcS5qc29uQm9keS5hY2NvdW50X2lkKVxuICB9IGVsc2Uge1xuICAgIGFjY291bnQgPSBjdHguZGIuZ2V0QWNjb3VudChyZXEuanNvbkJvZHkuZ2l0aHViX3VzZXJuYW1lKVxuICB9XG5cbiAgaWYgKCFhY2NvdW50KSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiYWNjb3VudF9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiQWNjb3VudCBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgbmV3X3Nlc3Npb24gPSBjdHguZGIuY3JlYXRlU2Vzc2lvbih7XG4gICAgZXhwaXJlc19hdDogbmV3IERhdGUoRGF0ZS5ub3coKSArIG1zKFwiNjAgZGF5XCIpKS50b0lTT1N0cmluZygpLFxuICAgIGFjY291bnRfaWQ6IGFjY291bnQuYWNjb3VudF9pZCxcbiAgICBpc19jbGlfc2Vzc2lvbjogZmFsc2UsXG4gIH0pXG5cbiAgY29uc3QgdG9rZW4gPSBhd2FpdCBuZXcgU2lnbkpXVCh7XG4gICAgYWNjb3VudF9pZDogYWNjb3VudC5hY2NvdW50X2lkLFxuICAgIHNlc3Npb25faWQ6IG5ld19zZXNzaW9uLnNlc3Npb25faWQsXG4gICAgZ2l0aHViX3VzZXJuYW1lOiBhY2NvdW50LmdpdGh1Yl91c2VybmFtZSxcbiAgfSlcbiAgICAuc2V0UHJvdGVjdGVkSGVhZGVyKHsgYWxnOiBcIkhTMjU2XCIgfSlcbiAgICAuc2V0RXhwaXJhdGlvblRpbWUobmV3IERhdGUoRGF0ZS5ub3coKSArIG1zKFwiNjAgZGF5XCIpKS50b0lTT1N0cmluZygpKVxuICAgIC5zaWduKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShwcm9jZXNzLmVudi5KV1RfU0VDUkVUIHx8IFwiXCIpKVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgc2Vzc2lvbjoge1xuICAgICAgLi4ubmV3X3Nlc3Npb24sXG4gICAgICB0b2tlbixcbiAgICB9LFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgb3JkZXJGaWxlU2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAgcXVlcnlQYXJhbXM6IHoub2JqZWN0KHtcbiAgICBvcmRlcl9maWxlX2lkOiB6LnN0cmluZygpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb3JkZXJfZmlsZTogb3JkZXJGaWxlU2NoZW1hLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IG9yZGVyX2ZpbGVfaWQgfSA9IHJlcS5xdWVyeVxuXG4gIGNvbnN0IG9yZGVyRmlsZSA9IGN0eC5kYi5nZXRPcmRlckZpbGVCeUlkKG9yZGVyX2ZpbGVfaWQpXG4gIGlmICghb3JkZXJGaWxlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JkZXJfZmlsZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiT3JkZXIgZmlsZSBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvcmRlcl9maWxlOiBvcmRlckZpbGUsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBvcmRlckZpbGVTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBvcmRlcl9pZDogei5zdHJpbmcoKSxcbiAgICBjb250ZW50X2Jhc2U2NDogei5zdHJpbmcoKSxcbiAgICBpc19nZXJiZXJzX3ppcDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBmb3JfcHJvdmlkZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9yZGVyX2ZpbGU6IG9yZGVyRmlsZVNjaGVtYSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBvcmRlcl9pZCwgY29udGVudF9iYXNlNjQsIGlzX2dlcmJlcnNfemlwLCBmb3JfcHJvdmlkZXIgfSA9XG4gICAgcmVxLmpzb25Cb2R5XG5cbiAgY29uc3Qgb3JkZXIgPSBjdHguZGIuZ2V0T3JkZXJCeUlkKG9yZGVyX2lkKVxuICBpZiAoIW9yZGVyKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JkZXJfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIk9yZGVyIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBuZXdPcmRlckZpbGUgPSB7XG4gICAgb3JkZXJfaWQsXG4gICAgaXNfZ2VyYmVyc196aXA6IGlzX2dlcmJlcnNfemlwIHx8IGZhbHNlLFxuICAgIGNvbnRlbnRfdHlwZTogXCJiYXNlNjRcIixcbiAgICBmb3JfcHJvdmlkZXI6IGZvcl9wcm92aWRlciB8fCBudWxsLFxuICAgIHVwbG9hZGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgY29udGVudF90ZXh0OiBCdWZmZXIuZnJvbShjb250ZW50X2Jhc2U2NCwgXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGYtOFwiKSxcbiAgICBjb250ZW50X2J5dGVzOiBVaW50OEFycmF5LmZyb20oYXRvYihjb250ZW50X2Jhc2U2NCksIChjKSA9PlxuICAgICAgYy5jaGFyQ29kZUF0KDApLFxuICAgICksXG4gIH1cblxuICBjb25zdCBvcmRlckZpbGUgPSBjdHguZGIuYWRkT3JkZXJGaWxlKG5ld09yZGVyRmlsZSlcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9yZGVyX2ZpbGU6IG9yZGVyRmlsZSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9yZGVyX3F1b3RlX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBwYWNrYWdlX3JlbGVhc2VfaWQgfSA9IHJlcS5qc29uQm9keVxuICBjb25zdCB2ZW5kb3JOYW1lcyA9IFtcIkpMQ1BDQlwiLCBcIk1hY3JvRmFiXCJdXG5cbiAgbGV0IG9yZGVyUXVvdGVJZHMgPSBbXVxuICBmb3IgKGNvbnN0IHZlbmRvck5hbWUgb2YgdmVuZG9yTmFtZXMpIHtcbiAgICBjb25zdCBvcmRlclF1b3RlSWQgPSBjdHguZGIuYWRkT3JkZXJRdW90ZSh7XG4gICAgICBhY2NvdW50X2lkOiBjdHguYXV0aC5hY2NvdW50X2lkLFxuICAgICAgcGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgdmVuZG9yX25hbWU6IHZlbmRvck5hbWUsXG4gICAgfSlcbiAgICBvcmRlclF1b3RlSWRzLnB1c2gob3JkZXJRdW90ZUlkKVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvcmRlcl9xdW90ZV9pZHM6IG9yZGVyUXVvdGVJZHMsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHouc3RyaW5nKCksXG4gICAgdmVuZG9yX25hbWU6IHoubGl0ZXJhbChcImpsY3BjYlwiKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9yZGVyX3F1b3RlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZXJyb3I6IHpcbiAgICAgIC5vYmplY3Qoe1xuICAgICAgICBlcnJvcl9jb2RlOiB6LnN0cmluZygpLFxuICAgICAgICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb25hbCgpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IHBhY2thZ2VfcmVsZWFzZV9pZCwgdmVuZG9yX25hbWUgfSA9IHJlcS5qc29uQm9keVxuXG4gIC8vIGNoZWNrIHBhY2thZ2UgcmVsZWFzZSBleGlzdHNcbiAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIuZ2V0UGFja2FnZVJlbGVhc2VCeUlkKHBhY2thZ2VfcmVsZWFzZV9pZClcbiAgaWYgKCFwYWNrYWdlUmVsZWFzZSkge1xuICAgIHJldHVybiBjdHguanNvbihcbiAgICAgIHtcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgICAgICBtZXNzYWdlOiBcIlBhY2thZ2UgcmVsZWFzZSBub3QgZm91bmRcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7IHN0YXR1czogNDA0IH0sXG4gICAgKVxuICB9XG5cbiAgY29uc3QgcGFja2FnZVJlbGVhc2VGaWxlcyA9XG4gICAgY3R4LmRiLmdldFBhY2thZ2VGaWxlc0J5UmVsZWFzZUlkKHBhY2thZ2VfcmVsZWFzZV9pZClcbiAgaWYgKHBhY2thZ2VSZWxlYXNlRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGN0eC5qc29uKFxuICAgICAge1xuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX2ZpbGVzX25vdF9mb3VuZFwiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIGZpbGVzIG5vdCBmb3VuZFwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHsgc3RhdHVzOiA0MDQgfSxcbiAgICApXG4gIH1cblxuICBjb25zdCBvcmRlclF1b3RlSWQgPSBjdHguZGIuYWRkT3JkZXJRdW90ZSh7XG4gICAgYWNjb3VudF9pZDogY3R4LmF1dGguYWNjb3VudF9pZCxcbiAgICBwYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgdmVuZG9yX25hbWUsXG4gIH0pXG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvcmRlcl9xdW90ZV9pZDogb3JkZXJRdW90ZUlkLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgb3JkZXJRdW90ZVNjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiLCBcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBjb21tb25QYXJhbXM6IHoub2JqZWN0KHtcbiAgICBvcmRlcl9xdW90ZV9pZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9yZGVyX3F1b3RlOiBvcmRlclF1b3RlU2NoZW1hLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IG9yZGVyX3F1b3RlX2lkIH0gPSByZXEuY29tbW9uUGFyYW1zXG5cbiAgY29uc3Qgb3JkZXJRdW90ZSA9IGN0eC5kYi5nZXRPcmRlclF1b3RlQnlJZChvcmRlcl9xdW90ZV9pZClcblxuICBpZiAoIW9yZGVyUXVvdGUpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJvcmRlcl9xdW90ZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiT3JkZXIgcXVvdGUgbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb3JkZXJfcXVvdGU6IG9yZGVyUXVvdGUsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7XG4gIEpsY3BjYk9yZGVyU3RhdGUsXG4gIHR5cGUgT3JkZXIsXG4gIG9yZGVyU2NoZW1hLFxufSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25Cb2R5OiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHouc3RyaW5nKCkudXVpZCgpLm9wdGlvbmFsKCksXG4gICAgICBjaXJjdWl0X2pzb246IHouYXJyYXkoei5yZWNvcmQoei5hbnkoKSkpLFxuICAgIH0pXG4gICAgLnJlZmluZSgoZGF0YSkgPT4gZGF0YS5wYWNrYWdlX3JlbGVhc2VfaWQgfHwgZGF0YS5jaXJjdWl0X2pzb24sIHtcbiAgICAgIG1lc3NhZ2U6IFwiRWl0aGVyIHBhY2thZ2VfcmVsZWFzZV9pZCBvciBjaXJjdWl0X2pzb24gbXVzdCBiZSBwcm92aWRlZFwiLFxuICAgIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvcmRlcjogb3JkZXJTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgY2lyY3VpdF9qc29uIH0gPSByZXEuanNvbkJvZHlcblxuICBjb25zdCBuZXdPcmRlciA9IHtcbiAgICBhY2NvdW50X2lkOiBjdHguYXV0aC5hY2NvdW50X2lkLFxuICAgIGlzX3J1bm5pbmc6IGZhbHNlLFxuICAgIGlzX3N0YXJ0ZWQ6IGZhbHNlLFxuICAgIGlzX2ZpbmlzaGVkOiBmYWxzZSxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBoYXNfZXJyb3I6IGZhbHNlLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBzdGFydGVkX2F0OiBudWxsLFxuICAgIGNvbXBsZXRlZF9hdDogbnVsbCxcbiAgICBjaXJjdWl0X2pzb24sXG4gIH1cblxuICBjb25zdCBvcmRlciA9IGN0eC5kYi5hZGRPcmRlcihuZXdPcmRlcilcblxuICBjb25zdCBuZXdKbGNwY2JPcmRlclN0YXRlID0ge1xuICAgIG9yZGVyX2lkOiBvcmRlci5vcmRlcl9pZCxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgYXJlX2dlcmJlcnNfdXBsb2FkZWQ6IGZhbHNlLFxuICAgIGlzX2dlcmJlcl9hbmFseXplZDogZmFsc2UsXG4gICAgYXJlX2luaXRpYWxfY29zdHNfY2FsY3VsYXRlZDogZmFsc2UsXG4gICAgaXNfcGNiX2FkZGVkX3RvX2NhcnQ6IGZhbHNlLFxuICAgIGlzX2JvbV91cGxvYWRlZDogZmFsc2UsXG4gICAgaXNfcG5wX3VwbG9hZGVkOiBmYWxzZSxcbiAgICBpc19ib21fcG5wX2FuYWx5emVkOiBmYWxzZSxcbiAgICBpc19ib21fcGFyc2luZ19jb21wbGV0ZTogZmFsc2UsXG4gICAgYXJlX2NvbXBvbmVudHNfYXZhaWxhYmxlOiBmYWxzZSxcbiAgICBpc19wYXRjaF9tYXBfZ2VuZXJhdGVkOiBmYWxzZSxcbiAgICBpc19qc29uX21lcmdlX2ZpbGVfY3JlYXRlZDogZmFsc2UsXG4gICAgaXNfZGZtX3Jlc3VsdF9nZW5lcmF0ZWQ6IGZhbHNlLFxuICAgIGFyZV9maWxlc19kb3dubG9hZGVkOiBmYWxzZSxcbiAgICBhcmVfcHJvZHVjdF9jYXRlZ29yaWVzX2ZldGNoZWQ6IGZhbHNlLFxuICAgIGFyZV9maW5hbF9jb3N0c19jYWxjdWxhdGVkOiBmYWxzZSxcbiAgICBpc19qc29uX21lcmdlX2ZpbGVfdXBkYXRlZDogZmFsc2UsXG4gICAgaXNfYWRkZWRfdG9fY2FydDogZmFsc2UsXG4gICAgYXJlX2dlcmJlcnNfZ2VuZXJhdGVkOiBmYWxzZSxcbiAgICBjdXJyZW50X3N0ZXA6IG51bGwsXG4gIH1cblxuICBjdHguZGIuYWRkSmxjcGNiT3JkZXJTdGF0ZShuZXdKbGNwY2JPcmRlclN0YXRlKVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb3JkZXIsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7XG4gIGVycm9yU2NoZW1hLFxuICBqbGNwY2JPcmRlclN0YXRlU2NoZW1hLFxuICBvcmRlclNjaGVtYSxcbn0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IG9yZGVyU3RlcHMgYXMgc2ltdWxhdGVTY2VuYXJpb3MgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvdXRpbHMvb3JkZXItc3RlcHNcIlxuXG5jb25zdCBkZWZhdWx0T3JkZXJTdGF0ZSA9IHtcbiAgYXJlX2dlcmJlcnNfdXBsb2FkZWQ6IGZhbHNlLFxuICBpc19nZXJiZXJfYW5hbHl6ZWQ6IGZhbHNlLFxuICBhcmVfaW5pdGlhbF9jb3N0c19jYWxjdWxhdGVkOiBmYWxzZSxcbiAgaXNfcGNiX2FkZGVkX3RvX2NhcnQ6IGZhbHNlLFxuICBpc19ib21fdXBsb2FkZWQ6IGZhbHNlLFxuICBpc19wbnBfdXBsb2FkZWQ6IGZhbHNlLFxuICBpc19ib21fcG5wX2FuYWx5emVkOiBmYWxzZSxcbiAgaXNfYm9tX3BhcnNpbmdfY29tcGxldGU6IGZhbHNlLFxuICBhcmVfY29tcG9uZW50c19hdmFpbGFibGU6IGZhbHNlLFxuICBpc19wYXRjaF9tYXBfZ2VuZXJhdGVkOiBmYWxzZSxcbiAgaXNfanNvbl9tZXJnZV9maWxlX2NyZWF0ZWQ6IGZhbHNlLFxuICBpc19kZm1fcmVzdWx0X2dlbmVyYXRlZDogZmFsc2UsXG4gIGFyZV9maWxlc19kb3dubG9hZGVkOiBmYWxzZSxcbiAgYXJlX3Byb2R1Y3RfY2F0ZWdvcmllc19mZXRjaGVkOiBmYWxzZSxcbiAgYXJlX2ZpbmFsX2Nvc3RzX2NhbGN1bGF0ZWQ6IGZhbHNlLFxuICBpc19qc29uX21lcmdlX2ZpbGVfdXBkYXRlZDogZmFsc2UsXG4gIGlzX2FkZGVkX3RvX2NhcnQ6IGZhbHNlLFxuICB1cGxvYWRlZF9nZXJiZXJfbWV0YWRhdGE6IG51bGwsXG4gIGdlcmJlcl9hbmFseXNpczogbnVsbCxcbiAgYXJlX2dlcmJlcnNfZ2VuZXJhdGVkOiBmYWxzZSxcbiAgY3VycmVudF9zdGVwOiBudWxsIGFzIG51bGwgfCAodHlwZW9mIHNpbXVsYXRlU2NlbmFyaW9zKVtudW1iZXJdLFxufVxuXG5jb25zdCBlcnJvck1hcCA9IHtcbiAgYXJlX2dlcmJlcnNfZ2VuZXJhdGVkOiB7XG4gICAgZXJyb3JfY29kZTogXCJHRVJCRVJfR0VORVJBVElPTl9GQUlMRURcIixcbiAgICBtZXNzYWdlOiBcIkdlcmJlciBnZW5lcmF0aW9uIGZhaWxlZFwiLFxuICB9LFxuICBhcmVfZ2VyYmVyc191cGxvYWRlZDoge1xuICAgIGVycm9yX2NvZGU6IFwiR0VSQkVSX1VQTE9BRF9GQUlMRURcIixcbiAgICBtZXNzYWdlOiBcIkdlcmJlciB1cGxvYWQgZmFpbGVkXCIsXG4gIH0sXG4gIGlzX2dlcmJlcl9hbmFseXplZDoge1xuICAgIGVycm9yX2NvZGU6IFwiQU5BTFlaRV9HRVJCRVJfRkFJTEVEXCIsXG4gICAgbWVzc2FnZTogXCJBbmFseXplIGdlcmJlciBmYWlsZWRcIixcbiAgfSxcbiAgaXNfYm9tX3VwbG9hZGVkOiB7XG4gICAgZXJyb3JfY29kZTogXCJCT01fVVBMT0FEX0ZBSUxFRFwiLFxuICAgIG1lc3NhZ2U6IFwiQm9tIHVwbG9hZCBmYWlsZWRcIixcbiAgfSxcbiAgaXNfcG5wX3VwbG9hZGVkOiB7XG4gICAgZXJyb3JfY29kZTogXCJQTlBfVVBMT0FEX0ZBSUxFRFwiLFxuICAgIG1lc3NhZ2U6IFwiUG5wIHVwbG9hZCBmYWlsZWRcIixcbiAgfSxcbiAgaXNfYm9tX3BucF9hbmFseXplZDoge1xuICAgIGVycm9yX2NvZGU6IFwiQU5BTFlaRV9CT01fQU5EX1BOUF9GQUlMRURcIixcbiAgICBtZXNzYWdlOiBcIkFuYWx5emUgYm9tIGFuZCBwbnAgZmFpbGVkXCIsXG4gIH0sXG4gIGlzX2JvbV9wYXJzaW5nX2NvbXBsZXRlOiB7XG4gICAgZXJyb3JfY29kZTogXCJCT01fUEFSU0lOR19GQUlMRURcIixcbiAgICBtZXNzYWdlOiBcIkJvbSBwYXJzaW5nIGZhaWxlZFwiLFxuICB9LFxuICBhcmVfY29tcG9uZW50c19hdmFpbGFibGU6IHtcbiAgICBlcnJvcl9jb2RlOiBcIkNPTVBPTkVOVFNfQVZBSUxBQklMSVRZX0ZBSUxFRFwiLFxuICAgIG1lc3NhZ2U6IFwiQ29tcG9uZW50cyBhdmFpbGFiaWxpdHkgZmFpbGVkXCIsXG4gIH0sXG4gIGlzX3BhdGNoX21hcF9nZW5lcmF0ZWQ6IHtcbiAgICBlcnJvcl9jb2RlOiBcIkdFTkVSQVRFX1BBVENIX01BUF9GQUlMRURcIixcbiAgICBtZXNzYWdlOiBcIkdlbmVyYXRlIHBhdGNoIG1hcCBmYWlsZWRcIixcbiAgfSxcbiAgaXNfanNvbl9tZXJnZV9maWxlX2NyZWF0ZWQ6IHtcbiAgICBlcnJvcl9jb2RlOiBcIkNSRUFUSU9OX0pTT05fTUVSR0VfRklMRV9GQUlMRURcIixcbiAgICBtZXNzYWdlOiBcIkNyZWF0aW9uIGpzb24gbWVyZ2UgZmlsZSBmYWlsZWRcIixcbiAgfSxcbiAgaXNfZGZtX3Jlc3VsdF9nZW5lcmF0ZWQ6IHtcbiAgICBlcnJvcl9jb2RlOiBcIkdFTkVSQVRFX0RGTV9SRVNVTFRfRkFJTEVEXCIsXG4gICAgbWVzc2FnZTogXCJHZW5lcmF0ZSBkZm0gcmVzdWx0IGZhaWxlZFwiLFxuICB9LFxuICBhcmVfZmlsZXNfZG93bmxvYWRlZDoge1xuICAgIGVycm9yX2NvZGU6IFwiRE9XTkxPQURfRklMRVNfRkFJTEVEXCIsXG4gICAgbWVzc2FnZTogXCJEb3dubG9hZCBmaWxlcyBmYWlsZWRcIixcbiAgfSxcbiAgYXJlX3Byb2R1Y3RfY2F0ZWdvcmllc19mZXRjaGVkOiB7XG4gICAgZXJyb3JfY29kZTogXCJGRVRDSF9QUk9EVUNUX0NBVEVHT1JJRVNfRkFJTEVEXCIsXG4gICAgbWVzc2FnZTogXCJGZXRjaCBwcm9kdWN0IGNhdGVnb3JpZXMgZmFpbGVkXCIsXG4gIH0sXG4gIGFyZV9maW5hbF9jb3N0c19jYWxjdWxhdGVkOiB7XG4gICAgZXJyb3JfY29kZTogXCJGSU5BTF9DT1NUX0NBTENVTEFUSU9OX0ZBSUxFRFwiLFxuICAgIG1lc3NhZ2U6IFwiRmluYWwgY29zdCBjYWxjdWxhdGlvbiBmYWlsZWRcIixcbiAgfSxcbiAgaXNfanNvbl9tZXJnZV9maWxlX3VwZGF0ZWQ6IHtcbiAgICBlcnJvcl9jb2RlOiBcIlVQREFURV9KU09OX01FUkdFX0ZJTEVfRkFJTEVEXCIsXG4gICAgbWVzc2FnZTogXCJVcGRhdGUganNvbiBtZXJnZSBmaWxlIGZhaWxlZFwiLFxuICB9LFxuICBpc19wY2JfYWRkZWRfdG9fY2FydDoge1xuICAgIGVycm9yX2NvZGU6IFwiQUREX1BDQl9UT19DQVJUX0ZBSUxFRFwiLFxuICAgIG1lc3NhZ2U6IFwiQWRkIHBjYiB0byBjYXJ0IGZhaWxlZFwiLFxuICB9LFxuICBpc19hZGRlZF90b19jYXJ0OiB7XG4gICAgZXJyb3JfY29kZTogXCJBRERfVE9fQ0FSVF9GQUlMRURcIixcbiAgICBtZXNzYWdlOiBcIkFkZCB0byBjYXJ0IGZhaWxlZFwiLFxuICB9LFxuICBhcmVfaW5pdGlhbF9jb3N0c19jYWxjdWxhdGVkOiB7XG4gICAgZXJyb3JfY29kZTogXCJJTklUSUFMX0NPU1RfQ0FMQ1VMQVRJT05fRkFJTEVEXCIsXG4gICAgbWVzc2FnZTogXCJJbml0aWFsIGNvc3QgY2FsY3VsYXRpb24gZmFpbGVkXCIsXG4gIH0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBxdWVyeVBhcmFtczogei5vYmplY3Qoe1xuICAgIG9yZGVyX2lkOiB6LnN0cmluZygpLFxuICAgIF9zaW11bGF0ZV9zY2VuYXJpbzogei5lbnVtKHNpbXVsYXRlU2NlbmFyaW9zKS5vcHRpb25hbCgpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb3JkZXI6IG9yZGVyU2NoZW1hLFxuICAgIG9yZGVyU3RhdGU6IGpsY3BjYk9yZGVyU3RhdGVTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgb3JkZXJfaWQsIF9zaW11bGF0ZV9zY2VuYXJpbyB9ID0gcmVxLnF1ZXJ5XG5cbiAgY29uc3Qgb3JkZXIgPSBjdHguZGIuZ2V0T3JkZXJCeUlkKG9yZGVyX2lkKVxuICBpZiAoIW9yZGVyKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JkZXJfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIk9yZGVyIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCB1cGRhdGVkT3JkZXJTdGF0ZSA9IHtcbiAgICAuLi5kZWZhdWx0T3JkZXJTdGF0ZSxcbiAgICBvcmRlcl9pZCxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIH1cblxuICBpZiAoX3NpbXVsYXRlX3NjZW5hcmlvKSB7XG4gICAgY29uc3QgZXJyb3IgPSBlcnJvck1hcFtfc2ltdWxhdGVfc2NlbmFyaW9dXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBvcmRlci5lcnJvciA9IGVycm9yU2NoZW1hLnBhcnNlKGVycm9yKVxuICAgICAgb3JkZXIuaGFzX2Vycm9yID0gdHJ1ZVxuICAgICAgY3R4LmRiLnVwZGF0ZU9yZGVyKG9yZGVyX2lkLCB7IGVycm9yOiBvcmRlci5lcnJvciwgaGFzX2Vycm9yOiB0cnVlIH0pXG5cbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHNpbXVsYXRlU2NlbmFyaW9zLmluZGV4T2YoX3NpbXVsYXRlX3NjZW5hcmlvKVxuICAgICAgc2ltdWxhdGVTY2VuYXJpb3Muc2xpY2UoMCwgY3VycmVudEluZGV4KS5mb3JFYWNoKChzY2VuYXJpbykgPT4ge1xuICAgICAgICB1cGRhdGVkT3JkZXJTdGF0ZVtzY2VuYXJpb10gPSB0cnVlXG4gICAgICB9KVxuICAgICAgdXBkYXRlZE9yZGVyU3RhdGUuY3VycmVudF9zdGVwID0gc2ltdWxhdGVTY2VuYXJpb3NbY3VycmVudEluZGV4XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBleGlzdGluZ1N0YXRlID0gY3R4LmRiLmdldEpsY3BjYk9yZGVyU3RhdGVzQnlPcmRlcklkKG9yZGVyX2lkKVxuICAgIGlmIChleGlzdGluZ1N0YXRlKSB7XG4gICAgICByZXR1cm4gY3R4Lmpzb24oe1xuICAgICAgICBvcmRlcixcbiAgICAgICAgb3JkZXJTdGF0ZTogZXhpc3RpbmdTdGF0ZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY3R4LmRiLnVwZGF0ZUpsY3BjYk9yZGVyU3RhdGUob3JkZXJfaWQsIHVwZGF0ZWRPcmRlclN0YXRlKVxuXG4gIGNvbnN0IG9yZGVyU3RhdGUgPSBjdHguZGIuZ2V0SmxjcGNiT3JkZXJTdGF0ZXNCeU9yZGVySWQob3JkZXJfaWQpIVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb3JkZXIsXG4gICAgb3JkZXJTdGF0ZSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IG9yZGVyU2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb3JkZXJzOiB6LmFycmF5KG9yZGVyU2NoZW1hKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvcmRlcnM6IGN0eC5kYi5vcmRlcnMuZmlsdGVyKChvKSA9PiBvLmFjY291bnRfaWQgPT09IGN0eC5hdXRoLmFjY291bnRfaWQpLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCIsIFwiUE9TVFwiXSxcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgb3JnX2lkOiB6LnN0cmluZygpLFxuICAgIGFjY291bnRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB0c2NpcmN1aXRfaGFuZGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7fSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBvcmdfaWQsIGFjY291bnRfaWQsIHRzY2lyY3VpdF9oYW5kbGUgfSA9IHJlcS5jb21tb25QYXJhbXNcblxuICBjb25zdCBvcmcgPSBjdHguZGIuZ2V0T3JnKHsgb3JnX2lkIH0sIGN0eC5hdXRoKVxuXG4gIGlmICghb3JnKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JnX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJPcmdhbml6YXRpb24gbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGlmICghb3JnLmNhbl9tYW5hZ2Vfb3JnKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDMsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwibm90X2F1dGhvcml6ZWRcIixcbiAgICAgIG1lc3NhZ2U6IFwiWW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gbWFuYWdlIHRoaXMgb3JnYW5pemF0aW9uXCIsXG4gICAgfSlcbiAgfVxuXG4gIGxldCBhY2NvdW50ID0gY3R4LmRiLmFjY291bnRzLmZpbmQoKGFjYykgPT4gYWNjLmFjY291bnRfaWQgPT09IGFjY291bnRfaWQpXG4gIGlmICghYWNjb3VudCkge1xuICAgIGFjY291bnQgPSBjdHguZGIuYWNjb3VudHMuZmluZChcbiAgICAgIChhY2MpID0+IGFjYy50c2NpcmN1aXRfaGFuZGxlID09PSB0c2NpcmN1aXRfaGFuZGxlLFxuICAgIClcbiAgfVxuXG4gIGlmICghYWNjb3VudCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImFjY291bnRfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIkFjY291bnQgbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGN0eC5kYi5hZGRPcmdhbml6YXRpb25BY2NvdW50KHtcbiAgICBvcmdfaWQsXG4gICAgYWNjb3VudF9pZDogYWNjb3VudC5hY2NvdW50X2lkLFxuICB9KVxuXG4gIHJldHVybiBjdHguanNvbih7fSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHB1YmxpY01hcE9yZyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcHVibGljLW1hcHBpbmcvcHVibGljLW1hcC1vcmdcIlxuaW1wb3J0IHtcbiAgcHVibGljT3JnU2NoZW1hLFxuICB0c2NpcmN1aXRIYW5kbGVTY2hlbWEsXG59IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiLCBcIlBPU1RcIl0sXG4gIGNvbW1vblBhcmFtczogelxuICAgIC5vYmplY3Qoe1xuICAgICAgZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLm1pbig1KS5tYXgoNDApLm9wdGlvbmFsKCksXG4gICAgICB0c2NpcmN1aXRfaGFuZGxlOiB0c2NpcmN1aXRIYW5kbGVTY2hlbWEub3B0aW9uYWwoKSxcbiAgICAgIG5hbWU6IHRzY2lyY3VpdEhhbmRsZVNjaGVtYS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLnJlZmluZSgoZGF0YSkgPT4gZGF0YS50c2NpcmN1aXRfaGFuZGxlIHx8IGRhdGEubmFtZSwge1xuICAgICAgbWVzc2FnZTogXCJFaXRoZXIgdHNjaXJjdWl0X2hhbmRsZSBvciBuYW1lIGlzIHJlcXVpcmVkXCIsXG4gICAgfSksXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvcmc6IHB1YmxpY09yZ1NjaGVtYSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBkaXNwbGF5X25hbWUsIHRzY2lyY3VpdF9oYW5kbGUsIG5hbWUgfSA9IHJlcS5jb21tb25QYXJhbXNcbiAgY29uc3QgaGFuZGxlID0gdHNjaXJjdWl0X2hhbmRsZSB8fCBuYW1lXG5cbiAgY29uc3QgZXhpc3RpbmcgPSBjdHguZGIuZ2V0T3JnKHsgdHNjaXJjdWl0X2hhbmRsZTogaGFuZGxlIH0pXG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JnX2FscmVhZHlfZXhpc3RzXCIsXG4gICAgICBtZXNzYWdlOiBcIkFuIG9yZ2FuaXphdGlvbiB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0c1wiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBuZXdPcmcgPSB7XG4gICAgb3duZXJfYWNjb3VudF9pZDogY3R4LmF1dGguYWNjb3VudF9pZCxcbiAgICBvcmdfZGlzcGxheV9uYW1lOiBkaXNwbGF5X25hbWUsXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKSxcbiAgICBjYW5fbWFuYWdlX29yZzogdHJ1ZSxcbiAgICB0c2NpcmN1aXRfaGFuZGxlOiBoYW5kbGUsXG4gIH1cblxuICBjb25zdCBvcmcgPSBjdHguZGIuYWRkT3JnYW5pemF0aW9uKG5ld09yZylcblxuICBjdHguZGIuYWRkT3JnYW5pemF0aW9uQWNjb3VudCh7XG4gICAgb3JnX2lkOiBvcmcub3JnX2lkLFxuICAgIGFjY291bnRfaWQ6IGN0eC5hdXRoLmFjY291bnRfaWQsXG4gICAgaXNfb3duZXI6IHRydWUsXG4gIH0pXG5cbiAgY29uc3QgZnVsbE9yZyA9IGN0eC5kYi5nZXRPcmcoeyBvcmdfaWQ6IG9yZy5vcmdfaWQgfSwgY3R4LmF1dGgpXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb3JnOiBwdWJsaWNNYXBPcmcoZnVsbE9yZyEpLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgKiBhcyBaVCBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBjb25zdCBwdWJsaWNNYXBPcmcgPSAoXG4gIGludGVybmFsX29yZzogWlQuT3JnYW5pemF0aW9uICYge1xuICAgIG1lbWJlcl9jb3VudDogbnVtYmVyXG4gICAgcGFja2FnZV9jb3VudDogbnVtYmVyXG4gICAgY2FuX21hbmFnZV9vcmc6IGJvb2xlYW5cbiAgfSxcbik6IHouaW5mZXI8dHlwZW9mIFpULnB1YmxpY09yZ1NjaGVtYT4gPT4ge1xuICBjb25zdCB7XG4gICAgY2FuX21hbmFnZV9vcmcsXG4gICAgZ2l0aHViX2hhbmRsZSxcbiAgICBtZW1iZXJfY291bnQsXG4gICAgcGFja2FnZV9jb3VudCxcbiAgICBjcmVhdGVkX2F0LFxuICAgIGlzX3BlcnNvbmFsX29yZyxcbiAgICBvcmdfZGlzcGxheV9uYW1lLFxuICAgIHRzY2lyY3VpdF9oYW5kbGUsXG4gICAgYXZhdGFyX3VybCxcbiAgICAuLi5vcmdcbiAgfSA9IGludGVybmFsX29yZ1xuICByZXR1cm4ge1xuICAgIG9yZ19pZDogb3JnLm9yZ19pZCxcbiAgICBkaXNwbGF5X25hbWU6IG9yZ19kaXNwbGF5X25hbWUgPz8gdHNjaXJjdWl0X2hhbmRsZSA/PyB1bmRlZmluZWQsXG4gICAgb3duZXJfYWNjb3VudF9pZDogb3JnLm93bmVyX2FjY291bnRfaWQsXG4gICAgbmFtZTogdHNjaXJjdWl0X2hhbmRsZSxcbiAgICBhdmF0YXJfdXJsOiBhdmF0YXJfdXJsID8/IG51bGwsXG4gICAgbWVtYmVyX2NvdW50OiBOdW1iZXIobWVtYmVyX2NvdW50KSB8fCAwLFxuICAgIHBhY2thZ2VfY291bnQ6IE51bWJlcihwYWNrYWdlX2NvdW50KSB8fCAwLFxuICAgIGlzX3BlcnNvbmFsX29yZzogQm9vbGVhbihpc19wZXJzb25hbF9vcmcpLFxuICAgIGNyZWF0ZWRfYXQ6IFN0cmluZyhjcmVhdGVkX2F0KSxcbiAgICBnaXRodWJfaGFuZGxlLFxuICAgIHRzY2lyY3VpdF9oYW5kbGUsXG4gICAgLi4uKGNhbl9tYW5hZ2Vfb3JnID8geyB1c2VyX3Blcm1pc3Npb25zOiB7IGNhbl9tYW5hZ2Vfb3JnOiB0cnVlIH0gfSA6IHt9KSxcbiAgfVxufVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCIsIFwiREVMRVRFXCJdLFxuICBjb21tb25QYXJhbXM6IHoub2JqZWN0KHtcbiAgICBvcmdfaWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IG9yZ19pZCB9ID0gcmVxLmNvbW1vblBhcmFtc1xuXG4gIGNvbnN0IG9yZyA9IGN0eC5kYi5nZXRPcmcoeyBvcmdfaWQgfSwgY3R4LmF1dGgpXG5cbiAgaWYgKCFvcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJvcmdfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIk9yZ2FuaXphdGlvbiBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgaWYgKCFvcmcuY2FuX21hbmFnZV9vcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMywge1xuICAgICAgZXJyb3JfY29kZTogXCJub3RfYXV0aG9yaXplZFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byBtYW5hZ2UgdGhpcyBvcmdhbml6YXRpb25cIixcbiAgICB9KVxuICB9XG5cbiAgaWYgKG9yZy5pc19wZXJzb25hbF9vcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJjYW5ub3RfZGVsZXRlX3BlcnNvbmFsX29yZ1wiLFxuICAgICAgbWVzc2FnZTogXCJQZXJzb25hbCBvcmdhbml6YXRpb25zIGNhbm5vdCBiZSBkZWxldGVkXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VDb3VudCA9IGN0eC5kYi5wYWNrYWdlcy5maWx0ZXIoXG4gICAgKHBrZykgPT4gcGtnLm93bmVyX29yZ19pZCA9PT0gb3JnX2lkLFxuICApLmxlbmd0aFxuXG4gIGlmIChwYWNrYWdlQ291bnQgPiAwKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JnX2hhc19wYWNrYWdlc1wiLFxuICAgICAgbWVzc2FnZTogXCJDYW5ub3QgZGVsZXRlIG9yZ2FuaXphdGlvbiB3aXRoIGV4aXN0aW5nIHBhY2thZ2VzXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGRlbGV0ZWQgPSBjdHguZGIuZGVsZXRlT3JnYW5pemF0aW9uKG9yZ19pZClcblxuICBpZiAoIWRlbGV0ZWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDUwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJkZWxldGVfZmFpbGVkXCIsXG4gICAgICBtZXNzYWdlOiBcIkZhaWxlZCB0byBkZWxldGUgb3JnYW5pemF0aW9uXCIsXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb2s6IHRydWUsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQge1xuICBvcmdBY2NvdW50U2NoZW1hLFxuICB1c2VyUGVybWlzc2lvbnNTY2hlbWEsXG59IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgb3JnX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGF1dGg6IFwib3B0aW9uYWxfc2Vzc2lvblwiLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvcmdfbWVtYmVyOiBvcmdBY2NvdW50U2NoZW1hLm1lcmdlKFxuICAgICAgei5vYmplY3QoeyBvcmdfbWVtYmVyX3Blcm1pc3Npb25zOiB1c2VyUGVybWlzc2lvbnNTY2hlbWEubnVsbGFibGUoKSB9KSxcbiAgICApLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IG9yZ19pZCwgYWNjb3VudF9pZCB9ID0gcmVxLmNvbW1vblBhcmFtc1xuXG4gIGNvbnN0IG9yZyA9IGN0eC5kYi5nZXRPcmcoXG4gICAge1xuICAgICAgb3JnX2lkLFxuICAgIH0sXG4gICAgY3R4LmF1dGgsXG4gIClcblxuICBpZiAoIW9yZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm9yZ19ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiT3JnYW5pemF0aW9uIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBtZW1iZXJPcmdBY2NvdW50ID0gY3R4LmRiLmdldE9yZ2FuaXphdGlvbkFjY291bnQoe1xuICAgIG9yZ19pZDogb3JnLm9yZ19pZCxcbiAgICBhY2NvdW50X2lkOiBhY2NvdW50X2lkLFxuICB9KVxuXG4gIGNvbnN0IG1lbWJlck9yZyA9IGN0eC5kYi5nZXRPcmcoXG4gICAge1xuICAgICAgb3JnX2lkLFxuICAgIH0sXG4gICAge1xuICAgICAgYWNjb3VudF9pZDogYWNjb3VudF9pZCEsXG4gICAgfSxcbiAgKVxuXG4gIGlmICghbWVtYmVyT3JnQWNjb3VudCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm1lbWJlcl9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiTWVtYmVyIG5vdCBmb3VuZCBpbiBvcmdhbml6YXRpb25cIixcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvcmdfbWVtYmVyOiB7XG4gICAgICAuLi5tZW1iZXJPcmdBY2NvdW50LFxuICAgICAgb3JnX21lbWJlcl9wZXJtaXNzaW9uczogbWVtYmVyT3JnLFxuICAgIH0sXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBwdWJsaWNNYXBPcmcgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3B1YmxpYy1tYXBwaW5nL3B1YmxpYy1tYXAtb3JnXCJcbmltcG9ydCB7IHB1YmxpY09yZ1NjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiLCBcIlBPU1RcIl0sXG4gIGNvbW1vblBhcmFtczogelxuICAgIC5vYmplY3QoeyBvcmdfaWQ6IHouc3RyaW5nKCkgfSlcbiAgICAub3Ioei5vYmplY3QoeyBnaXRodWJfaGFuZGxlOiB6LnN0cmluZygpIH0pKVxuICAgIC5vcih6Lm9iamVjdCh7IHRzY2lyY3VpdF9oYW5kbGU6IHouc3RyaW5nKCkgfSkpLFxuICBhdXRoOiBcIm9wdGlvbmFsX3Nlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb3JnOiBwdWJsaWNPcmdTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHBhcmFtcyA9IHJlcS5jb21tb25QYXJhbXMgYXMge1xuICAgIG9yZ19pZD86IHN0cmluZ1xuICAgIGdpdGh1Yl9oYW5kbGU/OiBzdHJpbmdcbiAgICB0c2NpcmN1aXRfaGFuZGxlPzogc3RyaW5nXG4gIH1cblxuICBjb25zdCBvcmcgPSBjdHguZGIuZ2V0T3JnKFxuICAgIHtcbiAgICAgIG9yZ19pZDogcGFyYW1zLm9yZ19pZCxcbiAgICAgIGdpdGh1Yl9oYW5kbGU6IHBhcmFtcy5naXRodWJfaGFuZGxlLFxuICAgICAgdHNjaXJjdWl0X2hhbmRsZTogcGFyYW1zLnRzY2lyY3VpdF9oYW5kbGUsXG4gICAgfSxcbiAgICBjdHguYXV0aCxcbiAgKVxuXG4gIGlmICghb3JnKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JnX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJPcmdhbml6YXRpb24gbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuICByZXR1cm4gY3R4Lmpzb24oeyBvcmc6IHB1YmxpY01hcE9yZyhvcmcpIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBjb21tb25QYXJhbXM6IHoub2JqZWN0KHtcbiAgICBpbnZpdGF0aW9uX3Rva2VuOiB6LnN0cmluZygpLFxuICB9KSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9yZ19hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIG9yZzogei5vYmplY3Qoe1xuICAgICAgb3JnX2lkOiB6LnN0cmluZygpLFxuICAgICAgb3JnX25hbWU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICAgIG9yZ19kaXNwbGF5X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBpbnZpdGF0aW9uX3Rva2VuIH0gPSByZXEuY29tbW9uUGFyYW1zXG5cbiAgLy8gRmluZCB0aGUgaW52aXRhdGlvblxuICBjb25zdCBpbnZpdGF0aW9uID0gY3R4LmRiLmdldE9yZ0ludml0YXRpb25CeVRva2VuKGludml0YXRpb25fdG9rZW4pXG5cbiAgaWYgKCFpbnZpdGF0aW9uKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiaW52aXRhdGlvbl9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiSW52YWxpZCBpbnZpdGF0aW9uIGxpbmtcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgaW52aXRhdGlvbiBpcyByZXZva2VkXG4gIGlmIChpbnZpdGF0aW9uLmlzX3Jldm9rZWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJpbnZpdGF0aW9uX3Jldm9rZWRcIixcbiAgICAgIG1lc3NhZ2U6IFwiVGhpcyBpbnZpdGF0aW9uIHdhcyBjYW5jZWxsZWRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgaW52aXRhdGlvbiBpcyBhbHJlYWR5IGFjY2VwdGVkXG4gIGlmIChpbnZpdGF0aW9uLmlzX2FjY2VwdGVkKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiaW52aXRhdGlvbl9hbHJlYWR5X2FjY2VwdGVkXCIsXG4gICAgICBtZXNzYWdlOiBcIllvdSd2ZSBhbHJlYWR5IGpvaW5lZCB0aGlzIG9yZ2FuaXphdGlvblwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDaGVjayBpZiBpbnZpdGF0aW9uIGlzIGV4cGlyZWRcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKVxuICBpZiAobmV3IERhdGUoaW52aXRhdGlvbi5leHBpcmVzX2F0KSA8IG5vdykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludml0YXRpb25fZXhwaXJlZFwiLFxuICAgICAgbWVzc2FnZTogYFRoaXMgaW52aXRhdGlvbiBleHBpcmVkIG9uICR7bmV3IERhdGUoaW52aXRhdGlvbi5leHBpcmVzX2F0KS50b0xvY2FsZURhdGVTdHJpbmcoKX1gLFxuICAgIH0pXG4gIH1cblxuICAvLyBHZXQgY3VycmVudCB1c2VyJ3MgYWNjb3VudFxuICBjb25zdCBjdXJyZW50QWNjb3VudCA9IGN0eC5kYi5hY2NvdW50cy5maW5kKFxuICAgIChhY2MpID0+IGFjYy5hY2NvdW50X2lkID09PSBjdHguYXV0aCEuYWNjb3VudF9pZCxcbiAgKVxuXG4gIGlmICghY3VycmVudEFjY291bnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhY2NvdW50X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3VyIGFjY291bnQgd2FzIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDaGVjayBpZiB1c2VyJ3MgZW1haWwgbWF0Y2hlcyBpbnZpdGF0aW9uIGVtYWlsXG4gIGlmIChcbiAgICBpbnZpdGF0aW9uLmludml0ZWVfZW1haWwgJiZcbiAgICBjdXJyZW50QWNjb3VudC5lbWFpbCAhPT0gaW52aXRhdGlvbi5pbnZpdGVlX2VtYWlsXG4gICkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImVtYWlsX21pc21hdGNoXCIsXG4gICAgICBtZXNzYWdlOiBgVGhpcyBpbnZpdGUgaXMgZm9yICR7aW52aXRhdGlvbi5pbnZpdGVlX2VtYWlsfS4gUGxlYXNlIGxvZyBpbiB3aXRoIHRoYXQgZW1haWwuYCxcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdXNlciBpcyBhbHJlYWR5IGEgbWVtYmVyXG4gIGNvbnN0IGV4aXN0aW5nTWVtYmVyID0gY3R4LmRiLmdldE9yZ2FuaXphdGlvbkFjY291bnQoe1xuICAgIG9yZ19pZDogaW52aXRhdGlvbi5vcmdfaWQsXG4gICAgYWNjb3VudF9pZDogY3VycmVudEFjY291bnQuYWNjb3VudF9pZCxcbiAgfSlcblxuICBpZiAoZXhpc3RpbmdNZW1iZXIpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhbHJlYWR5X21lbWJlclwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UncmUgYWxyZWFkeSBhIG1lbWJlciBvZiB0aGlzIG9yZ2FuaXphdGlvblwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBHZXQgb3JnYW5pemF0aW9uIGRldGFpbHNcbiAgY29uc3Qgb3JnID0gY3R4LmRiLm9yZ2FuaXphdGlvbnMuZmluZCgobykgPT4gby5vcmdfaWQgPT09IGludml0YXRpb24ub3JnX2lkKVxuICBpZiAoIW9yZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm9yZ19ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiT3JnYW5pemF0aW9uIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBBZGQgdXNlciB0byBvcmdhbml6YXRpb25cbiAgY29uc3Qgb3JnQWNjb3VudCA9IGN0eC5kYi5hZGRPcmdhbml6YXRpb25BY2NvdW50KHtcbiAgICBvcmdfaWQ6IGludml0YXRpb24ub3JnX2lkLFxuICAgIGFjY291bnRfaWQ6IGN1cnJlbnRBY2NvdW50LmFjY291bnRfaWQsXG4gICAgaXNfb3duZXI6IGZhbHNlLFxuICB9KVxuXG4gIC8vIE1hcmsgaW52aXRhdGlvbiBhcyBhY2NlcHRlZFxuICBjdHguZGIudXBkYXRlT3JnSW52aXRhdGlvbihpbnZpdGF0aW9uLm9yZ19pbnZpdGF0aW9uX2lkLCB7XG4gICAgaXNfcGVuZGluZzogZmFsc2UsXG4gICAgaXNfYWNjZXB0ZWQ6IHRydWUsXG4gICAgYWNjZXB0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBhY2NlcHRlZF9ieV9hY2NvdW50X2lkOiBjdXJyZW50QWNjb3VudC5hY2NvdW50X2lkLFxuICB9KVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb3JnX2FjY291bnRfaWQ6IG9yZ0FjY291bnQub3JnX2FjY291bnRfaWQsXG4gICAgb3JnOiB7XG4gICAgICBvcmdfaWQ6IG9yZy5vcmdfaWQsXG4gICAgICBvcmdfbmFtZTogb3JnLnRzY2lyY3VpdF9oYW5kbGUsXG4gICAgICBvcmdfZGlzcGxheV9uYW1lOiBvcmcub3JnX2Rpc3BsYXlfbmFtZSxcbiAgICB9LFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgb3JnX2lkOiB6LnN0cmluZygpLFxuICAgIGludml0ZWVfZW1haWw6IHouc3RyaW5nKCkuZW1haWwoKSxcbiAgfSksXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvcmdfaW52aXRhdGlvbl9pZDogei5zdHJpbmcoKSxcbiAgICBpbnZpdGF0aW9uX3Rva2VuOiB6LnN0cmluZygpLFxuICAgIGludml0ZWVfZW1haWw6IHouc3RyaW5nKCksXG4gICAgZXhwaXJlc19hdDogei5zdHJpbmcoKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBvcmdfaWQsIGludml0ZWVfZW1haWwgfSA9IHJlcS5jb21tb25QYXJhbXNcblxuICAvLyBDaGVjayBpZiBvcmcgZXhpc3RzIGFuZCB1c2VyIGhhcyBwZXJtaXNzaW9uXG4gIGNvbnN0IG9yZyA9IGN0eC5kYi5nZXRPcmcoeyBvcmdfaWQgfSwgY3R4LmF1dGgpXG5cbiAgaWYgKCFvcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJvcmdfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIk9yZ2FuaXphdGlvbiBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgaWYgKCFvcmcuY2FuX21hbmFnZV9vcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMywge1xuICAgICAgZXJyb3JfY29kZTogXCJub3RfYXV0aG9yaXplZFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byBtYW5hZ2UgdGhpcyBvcmdhbml6YXRpb25cIixcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBwZW5kaW5nIGludml0YXRpb25cbiAgY29uc3QgZXhpc3RpbmdJbnZpdGF0aW9ucyA9IGN0eC5kYi5saXN0T3JnSW52aXRhdGlvbnMob3JnX2lkKVxuICBjb25zdCBkdXBsaWNhdGVQZW5kaW5nID0gZXhpc3RpbmdJbnZpdGF0aW9ucy5maW5kKFxuICAgIChpbnYpID0+XG4gICAgICBpbnYuaW52aXRlZV9lbWFpbCA9PT0gaW52aXRlZV9lbWFpbCAmJlxuICAgICAgaW52LmlzX3BlbmRpbmcgJiZcbiAgICAgICFpbnYuaXNfcmV2b2tlZCAmJlxuICAgICAgbmV3IERhdGUoaW52LmV4cGlyZXNfYXQpID4gbmV3IERhdGUoKSxcbiAgKVxuXG4gIGlmIChkdXBsaWNhdGVQZW5kaW5nKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiZHVwbGljYXRlX3BlbmRpbmdfaW52aXRhdGlvblwiLFxuICAgICAgbWVzc2FnZTogXCJBIHBlbmRpbmcgaW52aXRhdGlvbiBmb3IgdGhpcyBlbWFpbCBhbHJlYWR5IGV4aXN0c1wiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDaGVjayBpZiB1c2VyIGlzIGFscmVhZHkgYSBtZW1iZXJcbiAgY29uc3QgaW52aXRlZUFjY291bnQgPSBjdHguZGIuYWNjb3VudHMuZmluZChcbiAgICAoYWNjKSA9PiBhY2MuZW1haWwgPT09IGludml0ZWVfZW1haWwsXG4gIClcbiAgaWYgKGludml0ZWVBY2NvdW50KSB7XG4gICAgY29uc3QgZXhpc3RpbmdNZW1iZXIgPSBjdHguZGIuZ2V0T3JnYW5pemF0aW9uQWNjb3VudCh7XG4gICAgICBvcmdfaWQsXG4gICAgICBhY2NvdW50X2lkOiBpbnZpdGVlQWNjb3VudC5hY2NvdW50X2lkLFxuICAgIH0pXG4gICAgaWYgKGV4aXN0aW5nTWVtYmVyKSB7XG4gICAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgICBlcnJvcl9jb2RlOiBcImFscmVhZHlfbWVtYmVyXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiVGhpcyB1c2VyIGlzIGFscmVhZHkgYSBtZW1iZXIgb2YgdGhlIG9yZ2FuaXphdGlvblwiLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvLyBHZW5lcmF0ZSBzZWN1cmUgdG9rZW5cbiAgY29uc3QgaW52aXRhdGlvbl90b2tlbiA9IHJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZyhcImhleFwiKVxuXG4gIC8vIENyZWF0ZSBpbnZpdGF0aW9uXG4gIGNvbnN0IGludml0YXRpb24gPSBjdHguZGIuYWRkT3JnSW52aXRhdGlvbih7XG4gICAgb3JnX2lkLFxuICAgIGludml0ZWVfZW1haWwsXG4gICAgaW52aXRlcl9hY2NvdW50X2lkOiBjdHguYXV0aCEuYWNjb3VudF9pZCxcbiAgICBpbnZpdGF0aW9uX3Rva2VuLFxuICB9KVxuXG4gIC8vIExvZyBlbWFpbCBzZW5kaW5nIChmYWtlIEFQSSBkb2Vzbid0IGFjdHVhbGx5IHNlbmQgZW1haWxzKVxuICBjb25zdCBvcmlnaW4gPSByZXEuaGVhZGVycy5nZXQoXCJvcmlnaW5cIikgfHwgXCJodHRwOi8vbG9jYWxob3N0OjUxNzNcIlxuICBjb25zdCBpbnZpdGVVcmwgPSBgJHtvcmlnaW59L29yZ3MvaW52aXRlP3Rva2VuPSR7aW52aXRhdGlvbl90b2tlbn1gXG4gIGNvbnNvbGUubG9nKGBbRkFLRSBFTUFJTF0gU2VuZGluZyBpbnZpdGF0aW9uIHRvICR7aW52aXRlZV9lbWFpbH1gKVxuICBjb25zb2xlLmxvZyhcbiAgICBgW0ZBS0UgRU1BSUxdIE9yZ2FuaXphdGlvbjogJHtvcmcudHNjaXJjdWl0X2hhbmRsZSB8fCBvcmcub3JnX2lkfWAsXG4gIClcbiAgY29uc29sZS5sb2coYFtGQUtFIEVNQUlMXSBJbnZpdGF0aW9uIFVSTDogJHtpbnZpdGVVcmx9YClcbiAgY29uc29sZS5sb2coYFtGQUtFIEVNQUlMXSBFeHBpcmVzOiAke2ludml0YXRpb24uZXhwaXJlc19hdH1gKVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb3JnX2ludml0YXRpb25faWQ6IGludml0YXRpb24ub3JnX2ludml0YXRpb25faWQsXG4gICAgaW52aXRhdGlvbl90b2tlbjogaW52aXRhdGlvbi5pbnZpdGF0aW9uX3Rva2VuLFxuICAgIGludml0ZWVfZW1haWw6IGludml0ZWVfZW1haWwsXG4gICAgZXhwaXJlc19hdDogaW52aXRhdGlvbi5leHBpcmVzX2F0LFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBjb21tb25QYXJhbXM6IHoub2JqZWN0KHtcbiAgICB0b2tlbjogei5zdHJpbmcoKSxcbiAgfSksXG4gIGF1dGg6IFwibm9uZVwiLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBpbnZpdGF0aW9uOiB6Lm9iamVjdCh7XG4gICAgICBvcmdfaW52aXRhdGlvbl9pZDogei5zdHJpbmcoKSxcbiAgICAgIGludml0ZWVfZW1haWw6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICAgIGlzX3BlbmRpbmc6IHouYm9vbGVhbigpLFxuICAgICAgaXNfYWNjZXB0ZWQ6IHouYm9vbGVhbigpLFxuICAgICAgaXNfcmV2b2tlZDogei5ib29sZWFuKCksXG4gICAgICBpc19leHBpcmVkOiB6LmJvb2xlYW4oKSxcbiAgICAgIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCksXG4gICAgICBleHBpcmVzX2F0OiB6LnN0cmluZygpLFxuICAgICAgb3JnOiB6Lm9iamVjdCh7XG4gICAgICAgIG9yZ19pZDogei5zdHJpbmcoKSxcbiAgICAgICAgb3JnX25hbWU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICAgICAgb3JnX2Rpc3BsYXlfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgfSksXG4gICAgICBpbnZpdGVyOiB6Lm9iamVjdCh7XG4gICAgICAgIGdpdGh1Yl91c2VybmFtZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgICAgICB0c2NpcmN1aXRfaGFuZGxlOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgICB9KSxcbiAgICB9KSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyB0b2tlbiB9ID0gcmVxLmNvbW1vblBhcmFtc1xuXG4gIGNvbnN0IGludml0YXRpb24gPSBjdHguZGIuZ2V0T3JnSW52aXRhdGlvbkJ5VG9rZW4odG9rZW4pXG5cbiAgaWYgKCFpbnZpdGF0aW9uKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiaW52aXRhdGlvbl9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiSW52aXRhdGlvbiBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gR2V0IG9yZ2FuaXphdGlvbiBkZXRhaWxzXG4gIGNvbnN0IG9yZyA9IGN0eC5kYi5vcmdhbml6YXRpb25zLmZpbmQoKG8pID0+IG8ub3JnX2lkID09PSBpbnZpdGF0aW9uLm9yZ19pZClcbiAgaWYgKCFvcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJvcmdfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIk9yZ2FuaXphdGlvbiBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gR2V0IGludml0ZXIgZGV0YWlsc1xuICBjb25zdCBpbnZpdGVyID0gY3R4LmRiLmFjY291bnRzLmZpbmQoXG4gICAgKGFjYykgPT4gYWNjLmFjY291bnRfaWQgPT09IGludml0YXRpb24uaW52aXRlcl9hY2NvdW50X2lkLFxuICApXG5cbiAgLy8gQ29tcHV0ZSBpc19leHBpcmVkIGR5bmFtaWNhbGx5XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcbiAgY29uc3QgaXNfZXhwaXJlZCA9XG4gICAgaW52aXRhdGlvbi5pc19wZW5kaW5nICYmXG4gICAgIWludml0YXRpb24uaXNfcmV2b2tlZCAmJlxuICAgIG5ldyBEYXRlKGludml0YXRpb24uZXhwaXJlc19hdCkgPCBub3dcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIGludml0YXRpb246IHtcbiAgICAgIG9yZ19pbnZpdGF0aW9uX2lkOiBpbnZpdGF0aW9uLm9yZ19pbnZpdGF0aW9uX2lkLFxuICAgICAgaW52aXRlZV9lbWFpbDogaW52aXRhdGlvbi5pbnZpdGVlX2VtYWlsLFxuICAgICAgaXNfcGVuZGluZzogaW52aXRhdGlvbi5pc19wZW5kaW5nLFxuICAgICAgaXNfYWNjZXB0ZWQ6IGludml0YXRpb24uaXNfYWNjZXB0ZWQsXG4gICAgICBpc19yZXZva2VkOiBpbnZpdGF0aW9uLmlzX3Jldm9rZWQsXG4gICAgICBpc19leHBpcmVkLFxuICAgICAgY3JlYXRlZF9hdDogaW52aXRhdGlvbi5jcmVhdGVkX2F0LFxuICAgICAgZXhwaXJlc19hdDogaW52aXRhdGlvbi5leHBpcmVzX2F0LFxuICAgICAgb3JnOiB7XG4gICAgICAgIG9yZ19pZDogb3JnLm9yZ19pZCxcbiAgICAgICAgb3JnX25hbWU6IG9yZy50c2NpcmN1aXRfaGFuZGxlLFxuICAgICAgICBvcmdfZGlzcGxheV9uYW1lOiBvcmcub3JnX2Rpc3BsYXlfbmFtZSxcbiAgICAgIH0sXG4gICAgICBpbnZpdGVyOiB7XG4gICAgICAgIGdpdGh1Yl91c2VybmFtZTogaW52aXRlcj8uZ2l0aHViX3VzZXJuYW1lIHx8IG51bGwsXG4gICAgICAgIHRzY2lyY3VpdF9oYW5kbGU6IGludml0ZXI/LnRzY2lyY3VpdF9oYW5kbGUgfHwgbnVsbCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgb3JnX2lkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIGludml0YXRpb25zOiB6LmFycmF5KFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBvcmdfaW52aXRhdGlvbl9pZDogei5zdHJpbmcoKSxcbiAgICAgICAgaW52aXRlZV9lbWFpbDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgICAgICBpc19wZW5kaW5nOiB6LmJvb2xlYW4oKSxcbiAgICAgICAgaXNfYWNjZXB0ZWQ6IHouYm9vbGVhbigpLFxuICAgICAgICBpc19leHBpcmVkOiB6LmJvb2xlYW4oKSxcbiAgICAgICAgaXNfcmV2b2tlZDogei5ib29sZWFuKCksXG4gICAgICAgIGNyZWF0ZWRfYXQ6IHouc3RyaW5nKCksXG4gICAgICAgIGV4cGlyZXNfYXQ6IHouc3RyaW5nKCksXG4gICAgICAgIGFjY2VwdGVkX2F0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgICAgIGludml0ZXI6IHoub2JqZWN0KHtcbiAgICAgICAgICBhY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgICAgICAgIGdpdGh1Yl91c2VybmFtZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgICAgICAgIHRzY2lyY3VpdF9oYW5kbGU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICApLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IG9yZ19pZCB9ID0gcmVxLmNvbW1vblBhcmFtc1xuXG4gIC8vIENoZWNrIGlmIG9yZyBleGlzdHMgYW5kIHVzZXIgaGFzIHBlcm1pc3Npb25cbiAgY29uc3Qgb3JnID0gY3R4LmRiLmdldE9yZyh7IG9yZ19pZCB9LCBjdHguYXV0aClcblxuICBpZiAoIW9yZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm9yZ19ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiT3JnYW5pemF0aW9uIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBpZiAoIW9yZy5jYW5fbWFuYWdlX29yZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm5vdF9hdXRob3JpemVkXCIsXG4gICAgICBtZXNzYWdlOiBcIllvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG1hbmFnZSB0aGlzIG9yZ2FuaXphdGlvblwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBHZXQgYWxsIGludml0YXRpb25zIGZvciB0aGlzIG9yZ1xuICBjb25zdCBpbnZpdGF0aW9ucyA9IGN0eC5kYi5saXN0T3JnSW52aXRhdGlvbnMob3JnX2lkKVxuXG4gIC8vIENvbXB1dGUgaXNfZXhwaXJlZCBmb3IgZWFjaCBpbnZpdGF0aW9uXG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcbiAgY29uc3QgaW52aXRhdGlvbnNXaXRoRXhwaXJ5ID0gaW52aXRhdGlvbnMubWFwKChpbnYpID0+IHtcbiAgICBjb25zdCBpc19leHBpcmVkID0gbmV3IERhdGUoaW52LmV4cGlyZXNfYXQpIDwgbm93ICYmIGludi5pc19wZW5kaW5nXG5cbiAgICAvLyBHZXQgaW52aXRlciBkZXRhaWxzXG4gICAgY29uc3QgaW52aXRlciA9IGN0eC5kYi5hY2NvdW50cy5maW5kKFxuICAgICAgKGFjYykgPT4gYWNjLmFjY291bnRfaWQgPT09IGludi5pbnZpdGVyX2FjY291bnRfaWQsXG4gICAgKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9yZ19pbnZpdGF0aW9uX2lkOiBpbnYub3JnX2ludml0YXRpb25faWQsXG4gICAgICBpbnZpdGVlX2VtYWlsOiBpbnYuaW52aXRlZV9lbWFpbCxcbiAgICAgIGlzX3BlbmRpbmc6IGludi5pc19wZW5kaW5nLFxuICAgICAgaXNfYWNjZXB0ZWQ6IGludi5pc19hY2NlcHRlZCxcbiAgICAgIGlzX2V4cGlyZWQsXG4gICAgICBpc19yZXZva2VkOiBpbnYuaXNfcmV2b2tlZCxcbiAgICAgIGNyZWF0ZWRfYXQ6IGludi5jcmVhdGVkX2F0LFxuICAgICAgZXhwaXJlc19hdDogaW52LmV4cGlyZXNfYXQsXG4gICAgICBhY2NlcHRlZF9hdDogaW52LmFjY2VwdGVkX2F0LFxuICAgICAgaW52aXRlcjoge1xuICAgICAgICBhY2NvdW50X2lkOiBpbnYuaW52aXRlcl9hY2NvdW50X2lkLFxuICAgICAgICBnaXRodWJfdXNlcm5hbWU6IGludml0ZXI/LmdpdGh1Yl91c2VybmFtZSB8fCBudWxsLFxuICAgICAgICB0c2NpcmN1aXRfaGFuZGxlOiBpbnZpdGVyPy50c2NpcmN1aXRfaGFuZGxlIHx8IG51bGwsXG4gICAgICB9LFxuICAgIH1cbiAgfSlcblxuICAvLyBTb3J0IGJ5IGNyZWF0ZWRfYXQgREVTQyAobmV3ZXN0IGZpcnN0KVxuICBpbnZpdGF0aW9uc1dpdGhFeHBpcnkuc29ydCgoYSwgYikgPT4ge1xuICAgIHJldHVybiBuZXcgRGF0ZShiLmNyZWF0ZWRfYXQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEuY3JlYXRlZF9hdCkuZ2V0VGltZSgpXG4gIH0pXG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBpbnZpdGF0aW9uczogaW52aXRhdGlvbnNXaXRoRXhwaXJ5LFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiREVMRVRFXCIsIFwiUE9TVFwiXSxcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgb3JnX2ludml0YXRpb25faWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IG9yZ19pbnZpdGF0aW9uX2lkIH0gPSByZXEuY29tbW9uUGFyYW1zXG5cbiAgLy8gRmluZCB0aGUgaW52aXRhdGlvblxuICBjb25zdCBpbnZpdGF0aW9uID0gY3R4LmRiLm9yZ0ludml0YXRpb25zLmZpbmQoXG4gICAgKGludikgPT4gaW52Lm9yZ19pbnZpdGF0aW9uX2lkID09PSBvcmdfaW52aXRhdGlvbl9pZCxcbiAgKVxuXG4gIGlmICghaW52aXRhdGlvbikge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludml0YXRpb25fbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIkludml0YXRpb24gbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGlmIG9yZyBleGlzdHMgYW5kIHVzZXIgaGFzIHBlcm1pc3Npb25cbiAgY29uc3Qgb3JnID0gY3R4LmRiLmdldE9yZyh7IG9yZ19pZDogaW52aXRhdGlvbi5vcmdfaWQgfSwgY3R4LmF1dGgpXG5cbiAgaWYgKCFvcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJvcmdfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIk9yZ2FuaXphdGlvbiBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgaWYgKCFvcmcuY2FuX21hbmFnZV9vcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMywge1xuICAgICAgZXJyb3JfY29kZTogXCJub3RfYXV0aG9yaXplZFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byBtYW5hZ2UgdGhpcyBvcmdhbml6YXRpb25cIixcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgaW52aXRhdGlvbiBpcyBhbHJlYWR5IGFjY2VwdGVkXG4gIGlmIChpbnZpdGF0aW9uLmlzX2FjY2VwdGVkKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiaW52aXRhdGlvbl9hbHJlYWR5X2FjY2VwdGVkXCIsXG4gICAgICBtZXNzYWdlOiBcIkNhbm5vdCByZXZva2UgYW4gaW52aXRhdGlvbiB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gYWNjZXB0ZWRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gUmV2b2tlIHRoZSBpbnZpdGF0aW9uXG4gIGN0eC5kYi51cGRhdGVPcmdJbnZpdGF0aW9uKG9yZ19pbnZpdGF0aW9uX2lkLCB7XG4gICAgaXNfcmV2b2tlZDogdHJ1ZSxcbiAgICBpc19wZW5kaW5nOiBmYWxzZSxcbiAgfSlcblxuICByZXR1cm4gY3R4Lmpzb24oeyBvazogdHJ1ZSB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHtcbiAgYWNjb3VudFNjaGVtYSxcbiAgdXNlclBlcm1pc3Npb25zU2NoZW1hLFxufSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIiwgXCJQT1NUXCJdLFxuICBjb21tb25QYXJhbXM6IHoub2JqZWN0KHtcbiAgICBvcmdfaWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBhdXRoOiBcIm9wdGlvbmFsX3Nlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb3JnX21lbWJlcnM6IHouYXJyYXkoXG4gICAgICBhY2NvdW50U2NoZW1hLm9taXQoeyBzaGlwcGluZ0luZm86IHRydWUgfSkuZXh0ZW5kKHtcbiAgICAgICAgam9pbmVkX2F0OiB6LnN0cmluZygpLFxuICAgICAgICBvcmdfbWVtYmVyX3Blcm1pc3Npb25zOiB1c2VyUGVybWlzc2lvbnNTY2hlbWEsXG4gICAgICB9KSxcbiAgICApLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSByZXEuY29tbW9uUGFyYW1zIGFzIHsgb3JnX2lkPzogc3RyaW5nIH1cblxuICBjb25zdCBvcmcgPSBjdHguZGIuZ2V0T3JnKFxuICAgIHtcbiAgICAgIG9yZ19pZDogcGFyYW1zLm9yZ19pZCxcbiAgICB9LFxuICAgIGN0eC5hdXRoLFxuICApXG5cbiAgaWYgKCFvcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJvcmdfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIk9yZ2FuaXphdGlvbiBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgY3VycmVudEFjY291bnRJZCA9IGN0eC5hdXRoPy5hY2NvdW50X2lkXG4gIGNvbnN0IGlzQ3VycmVudFVzZXJNZW1iZXIgPVxuICAgIGN1cnJlbnRBY2NvdW50SWQgJiZcbiAgICAoY3VycmVudEFjY291bnRJZCA9PT0gb3JnLm93bmVyX2FjY291bnRfaWQgfHxcbiAgICAgIGN0eC5kYi5vcmdBY2NvdW50cy5zb21lKFxuICAgICAgICAobSkgPT4gbS5vcmdfaWQgPT09IG9yZy5vcmdfaWQgJiYgbS5hY2NvdW50X2lkID09PSBjdXJyZW50QWNjb3VudElkLFxuICAgICAgKSlcblxuICBjb25zdCBtZW1iZXJzID0gY3R4LmRiLm9yZ0FjY291bnRzXG4gICAgLm1hcCgobSkgPT4ge1xuICAgICAgaWYgKG0ub3JnX2lkICE9PSBvcmcub3JnX2lkKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgICBjb25zdCBhY2NvdW50ID0gY3R4LmRiLmdldEFjY291bnQobS5hY2NvdW50X2lkKVxuICAgICAgaWYgKCFhY2NvdW50KSByZXR1cm4gdW5kZWZpbmVkXG4gICAgICBjb25zdCBtZW1iZXJPcmcgPSBjdHguZGIuZ2V0T3JnKFxuICAgICAgICB7XG4gICAgICAgICAgb3JnX2lkOiBvcmcub3JnX2lkLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWNjb3VudF9pZDogYWNjb3VudC5hY2NvdW50X2lkLFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2NvdW50LFxuICAgICAgICB1c2VyX3Blcm1pc3Npb25zOiBtZW1iZXJPcmcsXG4gICAgICAgIGpvaW5lZF9hdDogbS5jcmVhdGVkX2F0LFxuICAgICAgfVxuICAgIH0pXG4gICAgLmZpbHRlcihcbiAgICAgIChtZW1iZXIpOiBtZW1iZXIgaXMgTm9uTnVsbGFibGU8dHlwZW9mIG1lbWJlcj4gPT4gbWVtYmVyICE9PSB1bmRlZmluZWQsXG4gICAgKVxuICBjb25zdCBoYXNPd25lciA9IG1lbWJlcnMuc29tZSgobSkgPT4gbT8uYWNjb3VudF9pZCA9PT0gb3JnLm93bmVyX2FjY291bnRfaWQpXG4gIGxldCBmdWxsTWVtYmVycyA9IG1lbWJlcnNcblxuICBpZiAoIWhhc093bmVyKSB7XG4gICAgY29uc3Qgb3duZXIgPSBjdHguZGIuYWNjb3VudHMuZmluZChcbiAgICAgIChhY2MpID0+IGFjYy5hY2NvdW50X2lkID09PSBvcmcub3duZXJfYWNjb3VudF9pZCxcbiAgICApXG4gICAgaWYgKG93bmVyKSB7XG4gICAgICBjb25zdCBtZW1iZXJPcmcgPSBjdHguZGIuZ2V0T3JnKFxuICAgICAgICB7XG4gICAgICAgICAgb3JnX2lkOiBvcmcub3JnX2lkLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWNjb3VudF9pZDogb3duZXIuYWNjb3VudF9pZCxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIGZ1bGxNZW1iZXJzID0gW1xuICAgICAgICAuLi5tZW1iZXJzLFxuICAgICAgICB7XG4gICAgICAgICAgLi4ub3duZXIsXG4gICAgICAgICAgdXNlcl9wZXJtaXNzaW9uczogbWVtYmVyT3JnLFxuICAgICAgICAgIGpvaW5lZF9hdDogb3JnLmNyZWF0ZWRfYXQsXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgfVxuICB9XG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb3JnX21lbWJlcnM6IGZ1bGxNZW1iZXJzLm1hcCgobSkgPT4gKHtcbiAgICAgIC4uLm0sXG4gICAgICBlbWFpbDogaXNDdXJyZW50VXNlck1lbWJlciA/IG0uZW1haWwgOiB1bmRlZmluZWQsXG4gICAgICBvcmdfbWVtYmVyX3Blcm1pc3Npb25zOiBtLnVzZXJfcGVybWlzc2lvbnMgPz8ge1xuICAgICAgICBjYW5fbWFuYWdlX29yZzogZmFsc2UsXG4gICAgICAgIGNhbl9tYW5hZ2VfcGFja2FnZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pKSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgcHVibGljT3JnU2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHB1YmxpY01hcE9yZyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcHVibGljLW1hcHBpbmcvcHVibGljLW1hcC1vcmdcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCIsIFwiUE9TVFwiXSxcbiAgYXV0aDogXCJvcHRpb25hbF9zZXNzaW9uXCIsXG4gIGNvbW1vblBhcmFtczogei5vYmplY3Qoe1xuICAgIGFjY291bnRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB0c2NpcmN1aXRfaGFuZGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gICAgb3Jnczogei5hcnJheShwdWJsaWNPcmdTY2hlbWEpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IGFjY291bnRfaWQsIHRzY2lyY3VpdF9oYW5kbGUgfSA9IHJlcS5jb21tb25QYXJhbXNcbiAgaWYgKCFjdHguYXV0aCAmJiAhYWNjb3VudF9pZCAmJiAhdHNjaXJjdWl0X2hhbmRsZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludmFsaWRfcmVxdWVzdFwiLFxuICAgICAgbWVzc2FnZTpcbiAgICAgICAgXCJZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhY2NvdW50X2lkIG9yIHRzY2lyY3VpdF9oYW5kbGUgd2hlbiBub3QgYXV0aGVudGljYXRlZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBvcmdzID0gY3R4LmRiLmdldE9yZ3MoXG4gICAge1xuICAgICAgYWNjb3VudF9pZDogYWNjb3VudF9pZCxcbiAgICAgIHRzY2lyY3VpdF9oYW5kbGUsXG4gICAgICAuLi4oIWFjY291bnRfaWQgJiYgIXRzY2lyY3VpdF9oYW5kbGVcbiAgICAgICAgPyB7IG93bmVyX2FjY291bnRfaWQ6IGN0eC5hdXRoPy5hY2NvdW50X2lkIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSxcbiAgICB7XG4gICAgICBhY2NvdW50X2lkOiBjdHguYXV0aD8uYWNjb3VudF9pZCxcbiAgICB9LFxuICApXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb2s6IHRydWUsXG4gICAgb3Jnczogb3Jncy5tYXAoKG9yZykgPT4gcHVibGljTWFwT3JnKG9yZykpLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCIsIFwiUE9TVFwiXSxcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgb3JnX2lkOiB6LnN0cmluZygpLFxuICAgIGFjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7fSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBvcmdfaWQsIGFjY291bnRfaWQgfSA9IHJlcS5jb21tb25QYXJhbXNcblxuICBjb25zdCBvcmcgPSBjdHguZGIuZ2V0T3JnKHsgb3JnX2lkIH0sIGN0eC5hdXRoKVxuXG4gIGlmICghb3JnKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JnX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJPcmdhbml6YXRpb24gbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGlmICghb3JnLmNhbl9tYW5hZ2Vfb3JnKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDMsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwibm90X2F1dGhvcml6ZWRcIixcbiAgICAgIG1lc3NhZ2U6IFwiWW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gbWFuYWdlIHRoaXMgb3JnYW5pemF0aW9uXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGFjY291bnQgPSBjdHguZGIuYWNjb3VudHMuZmluZCgoYWNjKSA9PiBhY2MuYWNjb3VudF9pZCA9PT0gYWNjb3VudF9pZClcblxuICBpZiAoIWFjY291bnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhY2NvdW50X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJBY2NvdW50IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBjdHguZGIucmVtb3ZlT3JnYW5pemF0aW9uQWNjb3VudCh7XG4gICAgb3JnX2lkLFxuICAgIGFjY291bnRfaWQsXG4gIH0pXG5cbiAgcmV0dXJuIGN0eC5qc29uKHt9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgdXNlclBlcm1pc3Npb25zU2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiLCBcIlBVVFwiXSxcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgb3JnX2lkOiB6LnN0cmluZygpLFxuICAgIGFjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgb3JnX21lbWJlcl9wZXJtaXNzaW9uczogdXNlclBlcm1pc3Npb25zU2NoZW1hLFxuICB9KSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe30pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgb3JnX2lkLCBhY2NvdW50X2lkLCBvcmdfbWVtYmVyX3Blcm1pc3Npb25zIH0gPSByZXEuY29tbW9uUGFyYW1zXG5cbiAgY29uc3Qgb3JnID0gY3R4LmRiLmdldE9yZyh7IG9yZ19pZCB9LCBjdHguYXV0aClcblxuICBpZiAoIW9yZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm9yZ19ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiT3JnYW5pemF0aW9uIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBpZiAoIW9yZy5jYW5fbWFuYWdlX29yZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm5vdF9hdXRob3JpemVkXCIsXG4gICAgICBtZXNzYWdlOiBcIllvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG1hbmFnZSB0aGlzIG9yZ2FuaXphdGlvblwiLFxuICAgIH0pXG4gIH1cblxuICBpZiAoYWNjb3VudF9pZCA9PT0gY3R4LmF1dGguYWNjb3VudF9pZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImNhbm5vdF91cGRhdGVfc2VsZlwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgY2Fubm90IHVwZGF0ZSB5b3VyIG93biBwZXJtaXNzaW9uc1wiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBleGlzdGluZ01lbWJlciA9IGN0eC5kYi5nZXRPcmdhbml6YXRpb25BY2NvdW50KHtcbiAgICBvcmdfaWQsXG4gICAgYWNjb3VudF9pZCxcbiAgfSlcblxuICBpZiAoIWV4aXN0aW5nTWVtYmVyKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwibWVtYmVyX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJNZW1iZXIgbm90IGZvdW5kIGluIHRoaXMgb3JnYW5pemF0aW9uXCIsXG4gICAgfSlcbiAgfVxuXG4gIGN0eC5kYi51cGRhdGVPcmdhbml6YXRpb25BY2NvdW50KFxuICAgIHsgb3JnX2lkLCBhY2NvdW50X2lkIH0sXG4gICAgb3JnX21lbWJlcl9wZXJtaXNzaW9ucyxcbiAgKVxuXG4gIHJldHVybiBjdHguanNvbih7fSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7XG4gIHB1YmxpY09yZ1NjaGVtYSxcbiAgdHNjaXJjdWl0SGFuZGxlU2NoZW1hLFxufSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyBwdWJsaWNNYXBPcmcgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3B1YmxpYy1tYXBwaW5nL3B1YmxpYy1tYXAtb3JnXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIiwgXCJQQVRDSFwiXSxcbiAgY29tbW9uUGFyYW1zOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBvcmdfaWQ6IHouc3RyaW5nKCksXG4gICAgfSlcbiAgICAuYW5kKFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBkaXNwbGF5X25hbWU6IHouc3RyaW5nKCkubWF4KDUwKS5vcHRpb25hbCgpLFxuICAgICAgICB0c2NpcmN1aXRfaGFuZGxlOiB0c2NpcmN1aXRIYW5kbGVTY2hlbWEub3B0aW9uYWwoKSxcbiAgICAgIH0pLFxuICAgICksXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvcmc6IHB1YmxpY09yZ1NjaGVtYSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBvcmdfaWQsIGRpc3BsYXlfbmFtZSwgdHNjaXJjdWl0X2hhbmRsZSB9ID0gcmVxLmNvbW1vblBhcmFtcyBhcyB7XG4gICAgb3JnX2lkOiBzdHJpbmdcbiAgICBkaXNwbGF5X25hbWU/OiBzdHJpbmdcbiAgICB0c2NpcmN1aXRfaGFuZGxlPzogc3RyaW5nIHwgbnVsbFxuICB9XG5cbiAgY29uc3Qgb3JnID0gY3R4LmRiLmdldE9yZyh7IG9yZ19pZCB9LCBjdHguYXV0aClcblxuICBpZiAoIW9yZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm9yZ19ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiT3JnYW5pemF0aW9uIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBpZiAoIW9yZy5jYW5fbWFuYWdlX29yZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm5vdF9hdXRob3JpemVkXCIsXG4gICAgICBtZXNzYWdlOiBcIllvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG1hbmFnZSB0aGlzIG9yZ2FuaXphdGlvblwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBObyBjaGFuZ2VzIHByb3ZpZGVkXG4gIGlmIChkaXNwbGF5X25hbWUgPT09IHVuZGVmaW5lZCAmJiB0c2NpcmN1aXRfaGFuZGxlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY3R4Lmpzb24oeyBvcmc6IHB1YmxpY01hcE9yZyhvcmcpIH0pXG4gIH1cblxuICBpZiAodHNjaXJjdWl0X2hhbmRsZSAmJiB0c2NpcmN1aXRfaGFuZGxlICE9PSBvcmcudHNjaXJjdWl0X2hhbmRsZSkge1xuICAgIGNvbnN0IGR1cGxpY2F0ZSA9IGN0eC5kYi5nZXRPcmcoeyB0c2NpcmN1aXRfaGFuZGxlIH0pXG5cbiAgICBpZiAoZHVwbGljYXRlICYmIGR1cGxpY2F0ZS5vcmdfaWQgIT09IG9yZ19pZCkge1xuICAgICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgICAgZXJyb3JfY29kZTogXCJvcmdfdHNjaXJjdWl0X2hhbmRsZV9hbHJlYWR5X2V4aXN0c1wiLFxuICAgICAgICBtZXNzYWdlOiBcIkFuIG9yZ2FuaXphdGlvbiB3aXRoIHRoaXMgdHNjaXJjdWl0X2hhbmRsZSBhbHJlYWR5IGV4aXN0c1wiLFxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgY29uc3QgdXBkYXRlczoge1xuICAgIG9yZ19kaXNwbGF5X25hbWU/OiBzdHJpbmdcbiAgICB0c2NpcmN1aXRfaGFuZGxlPzogc3RyaW5nIHwgbnVsbFxuICB9ID0ge31cblxuICBpZiAodHNjaXJjdWl0X2hhbmRsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdXBkYXRlcy50c2NpcmN1aXRfaGFuZGxlID0gdHNjaXJjdWl0X2hhbmRsZVxuICB9XG5cbiAgaWYgKGRpc3BsYXlfbmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgdHJpbW1lZERpc3BsYXlOYW1lID0gZGlzcGxheV9uYW1lLnRyaW0oKVxuICAgIGNvbnN0IGZhbGxiYWNrRGlzcGxheU5hbWUgPSBvcmcudHNjaXJjdWl0X2hhbmRsZSA/PyB1bmRlZmluZWRcbiAgICB1cGRhdGVzLm9yZ19kaXNwbGF5X25hbWUgPVxuICAgICAgdHJpbW1lZERpc3BsYXlOYW1lLmxlbmd0aCA+IDAgPyB0cmltbWVkRGlzcGxheU5hbWUgOiBmYWxsYmFja0Rpc3BsYXlOYW1lXG4gIH1cblxuICBjb25zdCB1cGRhdGVkID0gY3R4LmRiLnVwZGF0ZU9yZ2FuaXphdGlvbihvcmdfaWQsIHVwZGF0ZXMpXG5cbiAgaWYgKCF1cGRhdGVkKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig1MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwidXBkYXRlX2ZhaWxlZFwiLFxuICAgICAgbWVzc2FnZTogXCJGYWlsZWQgdG8gdXBkYXRlIG9yZ2FuaXphdGlvblwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCB1cGRhdGVkT3JnV2l0aFBlcm1pc3Npb25zID0gY3R4LmRiLmdldE9yZyh7IG9yZ19pZCB9LCBjdHguYXV0aClcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9yZzogcHVibGljTWFwT3JnKHVwZGF0ZWRPcmdXaXRoUGVybWlzc2lvbnMhKSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHB1YmxpY09yZ1NjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcbmltcG9ydCB7IHB1YmxpY01hcE9yZyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcHVibGljLW1hcHBpbmcvcHVibGljLW1hcC1vcmdcIlxuXG5jb25zdCBNQVhfQVZBVEFSX0JZVEVTID0gNSAqIDEwMjQgKiAxMDI0IC8vIDVNQlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9yZzogcHVibGljT3JnU2NoZW1hLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCBmb3JtRGF0YSA9IGF3YWl0IHJlcS5mb3JtRGF0YSgpLmNhdGNoKCgpID0+IG51bGwpXG5cbiAgaWYgKCFmb3JtRGF0YSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludmFsaWRfZm9ybV9kYXRhXCIsXG4gICAgICBtZXNzYWdlOiBcIkV4cGVjdGVkIG11bHRpcGFydCBmb3JtIGRhdGFcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3Qgb3JnSWRWYWx1ZSA9IGZvcm1EYXRhLmdldChcIm9yZ19pZFwiKVxuICBjb25zdCBhdmF0YXJGaWxlID0gZm9ybURhdGEuZ2V0KFwiYXZhdGFyXCIpXG5cbiAgaWYgKCFvcmdJZFZhbHVlIHx8IHR5cGVvZiBvcmdJZFZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwibWlzc2luZ19vcmdfaWRcIixcbiAgICAgIG1lc3NhZ2U6IFwib3JnX2lkIGlzIHJlcXVpcmVkXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IG9yZyA9IGN0eC5kYi5nZXRPcmcoeyBvcmdfaWQ6IG9yZ0lkVmFsdWUgfSwgY3R4LmF1dGgpXG5cbiAgaWYgKCFvcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJvcmdfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIk9yZ2FuaXphdGlvbiBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgaWYgKCFvcmcuY2FuX21hbmFnZV9vcmcpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMywge1xuICAgICAgZXJyb3JfY29kZTogXCJub3RfYXV0aG9yaXplZFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byBtYW5hZ2UgdGhpcyBvcmdhbml6YXRpb25cIixcbiAgICB9KVxuICB9XG5cbiAgaWYgKCEoYXZhdGFyRmlsZSBpbnN0YW5jZW9mIEZpbGUpKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwibWlzc2luZ19hdmF0YXJcIixcbiAgICAgIG1lc3NhZ2U6IFwiQW4gYXZhdGFyIGZpbGUgaXMgcmVxdWlyZWRcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgbWltZVR5cGUgPSAoYXZhdGFyRmlsZS50eXBlICYmIGF2YXRhckZpbGUudHlwZS50cmltKCkpIHx8IFwiaW1hZ2UvcG5nXCJcblxuICBpZiAoIW1pbWVUeXBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9cIikpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJpbnZhbGlkX2F2YXRhcl90eXBlXCIsXG4gICAgICBtZXNzYWdlOiBcIkF2YXRhciBtdXN0IGJlIGFuIGltYWdlXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGF2YXRhckJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGF3YWl0IGF2YXRhckZpbGUuYXJyYXlCdWZmZXIoKSlcblxuICBpZiAoYXZhdGFyQnVmZmVyLmJ5dGVMZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJlbXB0eV9hdmF0YXJcIixcbiAgICAgIG1lc3NhZ2U6IFwiQXZhdGFyIGZpbGUgaXMgZW1wdHlcIixcbiAgICB9KVxuICB9XG5cbiAgaWYgKGF2YXRhckJ1ZmZlci5ieXRlTGVuZ3RoID4gTUFYX0FWQVRBUl9CWVRFUykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDEzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImF2YXRhcl90b29fbGFyZ2VcIixcbiAgICAgIG1lc3NhZ2U6IFwiQXZhdGFyIGZpbGUgaXMgdG9vIGxhcmdlXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGJhc2U2NCA9IGF2YXRhckJ1ZmZlci50b1N0cmluZyhcImJhc2U2NFwiKVxuICBjb25zdCBkYXRhVXJsID0gYGRhdGE6JHttaW1lVHlwZX07YmFzZTY0LCR7YmFzZTY0fWBcblxuICBjb25zdCB1cGRhdGVkID0gY3R4LmRiLnVwZGF0ZU9yZ2FuaXphdGlvbihvcmdJZFZhbHVlLCB7XG4gICAgYXZhdGFyX3VybDogZGF0YVVybCxcbiAgfSlcblxuICBpZiAoIXVwZGF0ZWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDUwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJ1cGRhdGVfZmFpbGVkXCIsXG4gICAgICBtZXNzYWdlOiBcIkZhaWxlZCB0byB1cGRhdGUgb3JnYW5pemF0aW9uXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZWRPcmcgPSBjdHguZGIuZ2V0T3JnKHsgb3JnX2lkOiBvcmdJZFZhbHVlIH0sIGN0eC5hdXRoKVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb3JnOiBwdWJsaWNNYXBPcmcodXBkYXRlZE9yZyEpLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcHVibGljTWFwUGFja2FnZUJ1aWxkIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9wdWJsaWMtbWFwcGluZy9wdWJsaWMtbWFwLXBhY2thZ2UtYnVpbGRcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAgcXVlcnlQYXJhbXM6IHoub2JqZWN0KHtcbiAgICBwYWNrYWdlX2J1aWxkX2lkOiB6LnN0cmluZygpLFxuICAgIGluY2x1ZGVfbG9nczogei5ib29sZWFuKCkub3B0aW9uYWwoKS5kZWZhdWx0KGZhbHNlKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIHBhY2thZ2VfYnVpbGQ6IHouYW55KCksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgcGFja2FnZV9idWlsZF9pZCwgaW5jbHVkZV9sb2dzIH0gPSByZXEucXVlcnlcblxuICBpZiAoIXBhY2thZ2VfYnVpbGRfaWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJpbnZhbGlkX3JlcXVlc3RcIixcbiAgICAgIG1lc3NhZ2U6IFwicGFja2FnZV9idWlsZF9pZCBpcyByZXF1aXJlZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBwYWNrYWdlQnVpbGQgPSBjdHguZGIucGFja2FnZUJ1aWxkcy5maW5kKFxuICAgIChidWlsZCkgPT4gYnVpbGQucGFja2FnZV9idWlsZF9pZCA9PT0gcGFja2FnZV9idWlsZF9pZCxcbiAgKVxuXG4gIGlmICghcGFja2FnZUJ1aWxkKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9idWlsZF9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSBidWlsZCBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgKHByKSA9PiBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VCdWlsZC5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gIClcblxuICBpZiAoIXBhY2thZ2VSZWxlYXNlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIHJlbGVhc2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHBrZyA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKFxuICAgIChwKSA9PiBwLnBhY2thZ2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlLnBhY2thZ2VfaWQsXG4gIClcbiAgaWYgKCFwa2cpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBpZiAocGtnLmNyZWF0b3JfYWNjb3VudF9pZCAhPT0gY3R4LmF1dGguYWNjb3VudF9pZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInVuYXV0aG9yaXplZFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgYXJlIG5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyB0aGlzIHBhY2thZ2UgYnVpbGRcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgcHVibGljQnVpbGQgPSBwdWJsaWNNYXBQYWNrYWdlQnVpbGQocGFja2FnZUJ1aWxkLCB7XG4gICAgaW5jbHVkZV9sb2dzLFxuICB9KVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgcGFja2FnZV9idWlsZDogcHVibGljQnVpbGQsXG4gIH0pXG59KVxuIiwgImltcG9ydCAqIGFzIFpUIGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcblxuZXhwb3J0IGNvbnN0IHB1YmxpY01hcFBhY2thZ2VCdWlsZCA9IChcbiAgaW50ZXJuYWxQYWNrYWdlQnVpbGQ6IFpULlBhY2thZ2VCdWlsZCAmIHtcbiAgICB1c2VyX2NvZGVfam9iX2Vycm9yPzogYW55IHwgbnVsbFxuICAgIHVzZXJfY29kZV9qb2JfY29tcGxldGVkX2F0Pzogc3RyaW5nIHwgbnVsbFxuICAgIHVzZXJfY29kZV9qb2JfY29tcGxldGVkX2xvZ3M/OiBhbnkgfCBudWxsXG4gICAgdXNlcl9jb2RlX2pvYl9sb2dfc3RyZWFtX3VybD86IHN0cmluZyB8IG51bGxcbiAgICB1c2VyX2NvZGVfam9iX3N0YXJ0ZWRfYXQ/OiBzdHJpbmcgfCBudWxsXG4gIH0sXG4gIG9wdGlvbnM6IHtcbiAgICBpbmNsdWRlX2xvZ3M/OiBib29sZWFuXG4gIH0gPSB7XG4gICAgaW5jbHVkZV9sb2dzOiBmYWxzZSxcbiAgfSxcbik6IFpULlBhY2thZ2VCdWlsZCA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAuLi5pbnRlcm5hbFBhY2thZ2VCdWlsZCxcbiAgICBjcmVhdGVkX2F0OiBpbnRlcm5hbFBhY2thZ2VCdWlsZC5jcmVhdGVkX2F0LFxuICAgIHRyYW5zcGlsYXRpb25fc3RhcnRlZF9hdDogaW50ZXJuYWxQYWNrYWdlQnVpbGQudHJhbnNwaWxhdGlvbl9zdGFydGVkX2F0LFxuICAgIHRyYW5zcGlsYXRpb25fY29tcGxldGVkX2F0OiBpbnRlcm5hbFBhY2thZ2VCdWlsZC50cmFuc3BpbGF0aW9uX2NvbXBsZXRlZF9hdCxcbiAgICB0cmFuc3BpbGF0aW9uX2xvZ3M6IG9wdGlvbnMuaW5jbHVkZV9sb2dzXG4gICAgICA/IGludGVybmFsUGFja2FnZUJ1aWxkLnRyYW5zcGlsYXRpb25fbG9nc1xuICAgICAgOiBudWxsLFxuICAgIHRyYW5zcGlsYXRpb25fZXJyb3I6IGludGVybmFsUGFja2FnZUJ1aWxkLnRyYW5zcGlsYXRpb25fZXJyb3IsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX3N0YXJ0ZWRfYXQ6XG4gICAgICBpbnRlcm5hbFBhY2thZ2VCdWlsZC5jaXJjdWl0X2pzb25fYnVpbGRfc3RhcnRlZF9hdCxcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfY29tcGxldGVkX2F0OlxuICAgICAgaW50ZXJuYWxQYWNrYWdlQnVpbGQuY2lyY3VpdF9qc29uX2J1aWxkX2NvbXBsZXRlZF9hdCxcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfbG9nczogb3B0aW9ucy5pbmNsdWRlX2xvZ3NcbiAgICAgID8gaW50ZXJuYWxQYWNrYWdlQnVpbGQuY2lyY3VpdF9qc29uX2J1aWxkX2xvZ3NcbiAgICAgIDogbnVsbCxcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfZXJyb3I6IGludGVybmFsUGFja2FnZUJ1aWxkLmNpcmN1aXRfanNvbl9idWlsZF9lcnJvcixcbiAgICBpbWFnZV9nZW5lcmF0aW9uX2luX3Byb2dyZXNzOlxuICAgICAgaW50ZXJuYWxQYWNrYWdlQnVpbGQuaW1hZ2VfZ2VuZXJhdGlvbl9pbl9wcm9ncmVzcyxcbiAgICBpbWFnZV9nZW5lcmF0aW9uX3N0YXJ0ZWRfYXQ6XG4gICAgICBpbnRlcm5hbFBhY2thZ2VCdWlsZC5pbWFnZV9nZW5lcmF0aW9uX3N0YXJ0ZWRfYXQsXG4gICAgaW1hZ2VfZ2VuZXJhdGlvbl9jb21wbGV0ZWRfYXQ6XG4gICAgICBpbnRlcm5hbFBhY2thZ2VCdWlsZC5pbWFnZV9nZW5lcmF0aW9uX2NvbXBsZXRlZF9hdCxcbiAgICBpbWFnZV9nZW5lcmF0aW9uX2xvZ3M6IG9wdGlvbnMuaW5jbHVkZV9sb2dzXG4gICAgICA/IGludGVybmFsUGFja2FnZUJ1aWxkLmltYWdlX2dlbmVyYXRpb25fbG9nc1xuICAgICAgOiBudWxsLFxuICAgIGltYWdlX2dlbmVyYXRpb25fZXJyb3I6IGludGVybmFsUGFja2FnZUJ1aWxkLmltYWdlX2dlbmVyYXRpb25fZXJyb3IsXG4gICAgYnVpbGRfc3RhcnRlZF9hdDogaW50ZXJuYWxQYWNrYWdlQnVpbGQuYnVpbGRfc3RhcnRlZF9hdCxcbiAgICBidWlsZF9jb21wbGV0ZWRfYXQ6IGludGVybmFsUGFja2FnZUJ1aWxkLmJ1aWxkX2NvbXBsZXRlZF9hdCxcbiAgICBidWlsZF9lcnJvcjogaW50ZXJuYWxQYWNrYWdlQnVpbGQuYnVpbGRfZXJyb3IsXG4gICAgYnVpbGRfZXJyb3JfbGFzdF91cGRhdGVkX2F0OlxuICAgICAgaW50ZXJuYWxQYWNrYWdlQnVpbGQuYnVpbGRfZXJyb3JfbGFzdF91cGRhdGVkX2F0LFxuICAgIHByZXZpZXdfdXJsOiBpbnRlcm5hbFBhY2thZ2VCdWlsZC5wcmV2aWV3X3VybCxcbiAgICBidWlsZF9sb2dzOiBvcHRpb25zLmluY2x1ZGVfbG9ncyA/IGludGVybmFsUGFja2FnZUJ1aWxkLmJ1aWxkX2xvZ3MgOiBudWxsLFxuICAgIHVzZXJfY29kZV9zdGFydGVkX2F0OiBpbnRlcm5hbFBhY2thZ2VCdWlsZC51c2VyX2NvZGVfam9iX3N0YXJ0ZWRfYXQgPz8gbnVsbCxcbiAgICB1c2VyX2NvZGVfY29tcGxldGVkX2F0OlxuICAgICAgaW50ZXJuYWxQYWNrYWdlQnVpbGQudXNlcl9jb2RlX2pvYl9jb21wbGV0ZWRfYXQgPz8gbnVsbCxcbiAgICB1c2VyX2NvZGVfZXJyb3I6IGludGVybmFsUGFja2FnZUJ1aWxkLnVzZXJfY29kZV9qb2JfZXJyb3IgPz8gbnVsbCxcbiAgICB1c2VyX2NvZGVfYnVpbGRfbG9nczogb3B0aW9ucy5pbmNsdWRlX2xvZ3NcbiAgICAgID8gaW50ZXJuYWxQYWNrYWdlQnVpbGQudXNlcl9jb2RlX2pvYl9jb21wbGV0ZWRfbG9nc1xuICAgICAgOiBudWxsLFxuICAgIHVzZXJfY29kZV9sb2dfc3RyZWFtX3VybDpcbiAgICAgIGludGVybmFsUGFja2FnZUJ1aWxkLnVzZXJfY29kZV9qb2JfbG9nX3N0cmVhbV91cmwgPz8gbnVsbCxcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcHVibGljTWFwUGFja2FnZUJ1aWxkIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9wdWJsaWMtbWFwcGluZy9wdWJsaWMtbWFwLXBhY2thZ2UtYnVpbGRcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAgcXVlcnlQYXJhbXM6IHoub2JqZWN0KHtcbiAgICBwYWNrYWdlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcGFja2FnZV9yZWxlYXNlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBwYWNrYWdlX2J1aWxkczogei5hcnJheSh6LmFueSgpKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBwYWNrYWdlX2lkLCBwYWNrYWdlX3JlbGVhc2VfaWQgfSA9IHJlcS5xdWVyeVxuICBpZiAoIXBhY2thZ2VfaWQgJiYgIXBhY2thZ2VfcmVsZWFzZV9pZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludmFsaWRfcmVxdWVzdFwiLFxuICAgICAgbWVzc2FnZTogXCJFaXRoZXIgcGFja2FnZV9pZCBvciBwYWNrYWdlX3JlbGVhc2VfaWQgbXVzdCBiZSBwcm92aWRlZFwiLFxuICAgIH0pXG4gIH1cblxuICBsZXQgdGFyZ2V0UGFja2FnZUlkID0gcGFja2FnZV9pZFxuXG4gIGlmIChwYWNrYWdlX3JlbGVhc2VfaWQpIHtcbiAgICBjb25zdCBwYWNrYWdlUmVsZWFzZSA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgIChwcikgPT4gcHIucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgKVxuICAgIGlmICghcGFja2FnZVJlbGVhc2UpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX25vdF9mb3VuZFwiLFxuICAgICAgICBtZXNzYWdlOiBcIlBhY2thZ2UgcmVsZWFzZSBub3QgZm91bmRcIixcbiAgICAgIH0pXG4gICAgfVxuICAgIHRhcmdldFBhY2thZ2VJZCA9IHBhY2thZ2VSZWxlYXNlLnBhY2thZ2VfaWRcbiAgfVxuXG4gIGlmICh0YXJnZXRQYWNrYWdlSWQpIHtcbiAgICBjb25zdCBwa2cgPSBjdHguZGIucGFja2FnZXMuZmluZCgocCkgPT4gcC5wYWNrYWdlX2lkID09PSB0YXJnZXRQYWNrYWdlSWQpXG4gICAgaWYgKCFwa2cpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9ub3RfZm91bmRcIixcbiAgICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIG5vdCBmb3VuZFwiLFxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKHBrZy5jcmVhdG9yX2FjY291bnRfaWQgIT09IGN0eC5hdXRoLmFjY291bnRfaWQpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwidW5hdXRob3JpemVkXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiWW91IGFyZSBub3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgdGhpcyBwYWNrYWdlXCIsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGxldCBidWlsZHMgPSBjdHguZGIucGFja2FnZUJ1aWxkc1xuXG4gIGlmIChwYWNrYWdlX2lkKSB7XG4gICAgY29uc3QgcGFja2FnZVJlbGVhc2VzID0gY3R4LmRiLnBhY2thZ2VSZWxlYXNlcy5maWx0ZXIoXG4gICAgICAoeCkgPT4geC5wYWNrYWdlX2lkID09PSBwYWNrYWdlX2lkLFxuICAgIClcbiAgICBpZiAocGFja2FnZVJlbGVhc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX25vdF9mb3VuZFwiLFxuICAgICAgICBtZXNzYWdlOiBcIlBhY2thZ2Ugbm90IGZvdW5kXCIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHBhY2thZ2VSZWxlYXNlSWRzID0gcGFja2FnZVJlbGVhc2VzXG4gICAgICAuZmlsdGVyKChwcikgPT4gcHIucGFja2FnZV9pZCA9PT0gcGFja2FnZV9pZClcbiAgICAgIC5tYXAoKHByKSA9PiBwci5wYWNrYWdlX3JlbGVhc2VfaWQpXG5cbiAgICBidWlsZHMgPSBidWlsZHMuZmlsdGVyKChidWlsZCkgPT5cbiAgICAgIHBhY2thZ2VSZWxlYXNlSWRzLmluY2x1ZGVzKGJ1aWxkLnBhY2thZ2VfcmVsZWFzZV9pZCksXG4gICAgKVxuICB9XG5cbiAgaWYgKHBhY2thZ2VfcmVsZWFzZV9pZCkge1xuICAgIGJ1aWxkcyA9IGJ1aWxkcy5maWx0ZXIoXG4gICAgICAoYnVpbGQpID0+IGJ1aWxkLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGFja2FnZV9yZWxlYXNlX2lkLFxuICAgIClcbiAgfVxuXG4gIGJ1aWxkcyA9IGJ1aWxkcy5zb3J0KFxuICAgIChhLCBiKSA9PlxuICAgICAgbmV3IERhdGUoYi5jcmVhdGVkX2F0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhLmNyZWF0ZWRfYXQpLmdldFRpbWUoKSxcbiAgKVxuXG4gIGNvbnN0IHB1YmxpY0J1aWxkcyA9IGJ1aWxkcy5tYXAoKGJ1aWxkKSA9PlxuICAgIHB1YmxpY01hcFBhY2thZ2VCdWlsZChidWlsZCwge1xuICAgICAgaW5jbHVkZV9sb2dzOiBmYWxzZSxcbiAgICB9KSxcbiAgKVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgcGFja2FnZV9idWlsZHM6IHB1YmxpY0J1aWxkcyxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgUGFja2FnZSwgUGFja2FnZVJlbGVhc2UgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBjb25zdCBmaW5kUGFja2FnZVJlbGVhc2VJZCA9IGFzeW5jIChcbiAgcGFyYW1zOlxuICAgIHwgc3RyaW5nXG4gICAgfCB7XG4gICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogc3RyaW5nXG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHBhY2thZ2VfbmFtZTogc3RyaW5nXG4gICAgICAgIHVzZV9sYXRlc3RfdmVyc2lvbjogdHJ1ZVxuICAgICAgfVxuICAgIHwge1xuICAgICAgICBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uOiBzdHJpbmdcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgcGFja2FnZV9yZWxlYXNlX2lkPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgICAgIHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICAgIH0sXG4gIGN0eDogeyBkYjogYW55IH0sXG4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+ID0+IHtcbiAgaWYgKHR5cGVvZiBwYXJhbXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gZmluZFBhY2thZ2VSZWxlYXNlSWRGcm9tUGFja2FnZU5hbWVXaXRoVmVyc2lvbihwYXJhbXMsIGN0eC5kYilcbiAgfVxuXG4gIGlmIChcbiAgICBcInBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb25cIiBpbiBwYXJhbXMgJiZcbiAgICBwYXJhbXMucGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvblxuICApIHtcbiAgICBjb25zdCB7IHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24gfSA9IHBhcmFtc1xuXG4gICAgaWYgKHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24uZW5kc1dpdGgoXCJAbGF0ZXN0XCIpKSB7XG4gICAgICBjb25zdCBbcGFja2FnZU5hbWVdID0gcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbi5zcGxpdChcIkBcIilcbiAgICAgIHJldHVybiBmaW5kUGFja2FnZVJlbGVhc2VJZChcbiAgICAgICAge1xuICAgICAgICAgIHBhY2thZ2VfbmFtZTogcGFja2FnZU5hbWUhLFxuICAgICAgICAgIHVzZV9sYXRlc3RfdmVyc2lvbjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY3R4LFxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gZmluZFBhY2thZ2VSZWxlYXNlSWRGcm9tUGFja2FnZU5hbWVXaXRoVmVyc2lvbihcbiAgICAgIHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24hLFxuICAgICAgY3R4LmRiLFxuICAgIClcbiAgfVxuXG4gIGlmIChcInBhY2thZ2VfcmVsZWFzZV9pZFwiIGluIHBhcmFtcyAmJiBwYXJhbXMucGFja2FnZV9yZWxlYXNlX2lkKSB7XG4gICAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgICAocHI6IFBhY2thZ2VSZWxlYXNlKSA9PlxuICAgICAgICBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhcmFtcy5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgKVxuICAgIGlmICghcGFja2FnZVJlbGVhc2UpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiBwYXJhbXMucGFja2FnZV9yZWxlYXNlX2lkXG4gIH1cblxuICBpZiAoXCJwYWNrYWdlX25hbWVcIiBpbiBwYXJhbXMpIHtcbiAgICBjb25zdCB7IHBhY2thZ2VfbmFtZSwgdXNlX2xhdGVzdF92ZXJzaW9uIH0gPSBwYXJhbXNcblxuICAgIGlmICghdXNlX2xhdGVzdF92ZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VfbGF0ZXN0X3ZlcnNpb24gbXVzdCBiZSB0cnVlXCIpXG4gICAgfVxuXG4gICAgY29uc3QgcGtnID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoXG4gICAgICAocDogUGFja2FnZSkgPT4gcC5uYW1lID09PSBwYWNrYWdlX25hbWUucmVwbGFjZSgvXkAvLCBcIlwiKSxcbiAgICApXG4gICAgaWYgKCFwa2cpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgICAocHI6IFBhY2thZ2VSZWxlYXNlKSA9PiBwci5wYWNrYWdlX2lkID09PSBwa2cucGFja2FnZV9pZCAmJiBwci5pc19sYXRlc3QsXG4gICAgKVxuXG4gICAgaWYgKCFwYWNrYWdlUmVsZWFzZSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gcGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgY29uc3QgZmluZFBhY2thZ2VSZWxlYXNlSWRGcm9tUGFja2FnZU5hbWVXaXRoVmVyc2lvbiA9IChcbiAgcGFja2FnZU5hbWVXaXRoVmVyc2lvbjogc3RyaW5nLFxuICBkYjogYW55LFxuKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGlmICghcGFja2FnZU5hbWVXaXRoVmVyc2lvbikgcmV0dXJuIG51bGxcblxuICBjb25zdCBbcGFja2FnZU5hbWUsIHZlcnNpb25dID0gcGFja2FnZU5hbWVXaXRoVmVyc2lvblxuICAgIC5yZXBsYWNlKC9eQC8sIFwiXCIpXG4gICAgLnNwbGl0KFwiQFwiKVxuXG4gIGNvbnN0IHBrZyA9IGRiLnBhY2thZ2VzLmZpbmQoKHA6IFBhY2thZ2UpID0+IHAubmFtZSA9PT0gcGFja2FnZU5hbWUpXG4gIGlmICghcGtnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBwYWNrYWdlUmVsZWFzZVxuXG4gIGlmICghdmVyc2lvbiB8fCB2ZXJzaW9uID09PSBcImxhdGVzdFwiKSB7XG4gICAgcGFja2FnZVJlbGVhc2UgPSBkYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgIChwcjogUGFja2FnZVJlbGVhc2UpID0+IHByLnBhY2thZ2VfaWQgPT09IHBrZy5wYWNrYWdlX2lkICYmIHByLmlzX2xhdGVzdCxcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgcGFja2FnZVJlbGVhc2UgPSBkYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgIChwcjogUGFja2FnZVJlbGVhc2UpID0+XG4gICAgICAgIHByLnBhY2thZ2VfaWQgPT09IHBrZy5wYWNrYWdlX2lkICYmIHByLnZlcnNpb24gPT09IHZlcnNpb24sXG4gICAgKVxuICB9XG5cbiAgaWYgKCFwYWNrYWdlUmVsZWFzZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gcGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkXG59XG4iLCAiaW1wb3J0ICogYXMgenQgZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgZmluZFBhY2thZ2VSZWxlYXNlSWQgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3BhY2thZ2VfcmVsZWFzZS9maW5kLXBhY2thZ2UtcmVsZWFzZS1pZFwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuY29uc3Qgcm91dGVTcGVjID0ge1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIGZpbGVfcGF0aDogei5zdHJpbmcoKSxcbiAgICAgIGlzX3JlbGVhc2VfdGFyYmFsbDogei5ib29sZWFuKCkub3B0aW9uYWwoKS5kZWZhdWx0KGZhbHNlKSxcbiAgICAgIGNvbnRlbnRfbWltZXR5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRlbnRfdGV4dDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgY29udGVudF9iYXNlNjQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgbnBtX3BhY2tfb3V0cHV0OiB6LmFueSgpLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAucmVmaW5lKCh2KSA9PiB7XG4gICAgICBpZiAodi5wYWNrYWdlX3JlbGVhc2VfaWQpIHJldHVybiB0cnVlXG4gICAgICBpZiAodi5wYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uKSByZXR1cm4gdHJ1ZVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSwgXCJNdXN0IHNwZWNpZnkgZWl0aGVyIHBhY2thZ2VfcmVsZWFzZV9pZCBvciBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uXCIpXG4gICAgLnJlZmluZSgodikgPT4ge1xuICAgICAgaWYgKHYucGFja2FnZV9yZWxlYXNlX2lkICYmIHYucGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbikgcmV0dXJuIGZhbHNlXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sIFwiQ2Fubm90IHNwZWNpZnkgYm90aCBwYWNrYWdlX3JlbGVhc2VfaWQgYW5kIHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb25cIilcbiAgICAucmVmaW5lKCh2KSA9PiB7XG4gICAgICBpZiAodi5jb250ZW50X2Jhc2U2NCAmJiB2LmNvbnRlbnRfdGV4dCkgcmV0dXJuIGZhbHNlXG4gICAgICBpZiAoIXYuY29udGVudF9iYXNlNjQgJiYgdi5jb250ZW50X3RleHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sIFwiRWl0aGVyIGNvbnRlbnRfYmFzZTY0IG9yIGNvbnRlbnRfdGV4dCBpcyByZXF1aXJlZFwiKSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICAgIHBhY2thZ2VfZmlsZTogenQucGFja2FnZUZpbGVTY2hlbWEsXG4gIH0pLFxufSBhcyBjb25zdFxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHJvdXRlU3BlYykoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmaWxlX3BhdGgsXG4gICAgY29udGVudF9taW1ldHlwZTogcHJvdmlkZWRDb250ZW50TWltZXR5cGUsXG4gICAgY29udGVudF9iYXNlNjQsXG4gICAgY29udGVudF90ZXh0LFxuICAgIGlzX3JlbGVhc2VfdGFyYmFsbCxcbiAgICBucG1fcGFja19vdXRwdXQsXG4gIH0gPSByZXEuanNvbkJvZHlcblxuICBpZiAoaXNfcmVsZWFzZV90YXJiYWxsICYmICFucG1fcGFja19vdXRwdXQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJtaXNzaW5nX29wdGlvbnNcIixcbiAgICAgIG1lc3NhZ2U6IFwibnBtX3BhY2tfb3V0cHV0IGlzIHJlcXVpcmVkIGZvciByZWxlYXNlIHRhcmJhbGxzXCIsXG4gICAgfSlcbiAgfVxuXG4gIGlmICghaXNfcmVsZWFzZV90YXJiYWxsICYmIG5wbV9wYWNrX291dHB1dCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludmFsaWRfb3B0aW9uc1wiLFxuICAgICAgbWVzc2FnZTogXCJucG1fcGFja19vdXRwdXQgaXMgb25seSB2YWxpZCBmb3IgcmVsZWFzZSB0YXJiYWxsc1wiLFxuICAgIH0pXG4gIH1cblxuICBsZXQgcGFja2FnZVJlbGVhc2VJZCA9IHJlcS5qc29uQm9keS5wYWNrYWdlX3JlbGVhc2VfaWRcblxuICBpZiAoIXBhY2thZ2VSZWxlYXNlSWQgJiYgcmVxLmpzb25Cb2R5LnBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24pIHtcbiAgICBjb25zdCBmb3VuZFBhY2thZ2VSZWxlYXNlSWQgPSBhd2FpdCBmaW5kUGFja2FnZVJlbGVhc2VJZChcbiAgICAgIHsgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbjogcmVxLmpzb25Cb2R5LnBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24gfSxcbiAgICAgIGN0eCxcbiAgICApXG4gICAgaWYgKGZvdW5kUGFja2FnZVJlbGVhc2VJZCkge1xuICAgICAgcGFja2FnZVJlbGVhc2VJZCA9IGZvdW5kUGFja2FnZVJlbGVhc2VJZFxuICAgIH1cbiAgfVxuXG4gIGlmICghcGFja2FnZVJlbGVhc2VJZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBWZXJpZnkgdGhlIHBhY2thZ2UgcmVsZWFzZSBleGlzdHNcbiAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgKHByKSA9PiBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlSWQsXG4gIClcblxuICBpZiAoIXBhY2thZ2VSZWxlYXNlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIHJlbGVhc2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIEdldCB0aGUgcGFja2FnZSB0byBjaGVjayBwZXJtaXNzaW9uc1xuICBjb25zdCBleGlzdGluZ1BhY2thZ2UgPSBjdHguZGIucGFja2FnZXMuZmluZChcbiAgICAocCkgPT4gcC5wYWNrYWdlX2lkID09PSBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX2lkLFxuICApXG5cbiAgaWYgKCFleGlzdGluZ1BhY2thZ2UpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDaGVjayBpZiB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZS91cGRhdGUgdGhlIGZpbGVcbiAgaWYgKGV4aXN0aW5nUGFja2FnZS5jcmVhdG9yX2FjY291bnRfaWQgIT09IGN0eC5hdXRoLmFjY291bnRfaWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMywge1xuICAgICAgZXJyb3JfY29kZTogXCJmb3JiaWRkZW5cIixcbiAgICAgIG1lc3NhZ2U6IFwiWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBtb2RpZnkgZmlsZXMgaW4gdGhpcyBwYWNrYWdlXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGZpbGUgZXhpc3RzXG4gIGNvbnN0IGV4aXNpdGluZ0ZpbGUgPSBjdHguZGIucGFja2FnZUZpbGVzLmZpbmQoXG4gICAgKHBmKSA9PlxuICAgICAgcGYucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZUlkICYmIHBmLmZpbGVfcGF0aCA9PT0gZmlsZV9wYXRoLFxuICApXG5cbiAgLy8gRGV0ZXJtaW5lIGNvbnRlbnQgbWltZXR5cGVcbiAgY29uc3QgY29udGVudE1pbWV0eXBlID1cbiAgICBwcm92aWRlZENvbnRlbnRNaW1ldHlwZSB8fFxuICAgIChmaWxlX3BhdGguZW5kc1dpdGgoXCIudHNcIikgfHwgZmlsZV9wYXRoLmVuZHNXaXRoKFwiLnRzeFwiKVxuICAgICAgPyBcInRleHQvdHlwZXNjcmlwdFwiXG4gICAgICA6IG51bGwpIHx8XG4gICAgKGZpbGVfcGF0aC5lbmRzV2l0aChcIi5qc1wiKSA/IFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiIDogbnVsbCkgfHxcbiAgICAoZmlsZV9wYXRoLmVuZHNXaXRoKFwiLmpzb25cIikgPyBcImFwcGxpY2F0aW9uL2pzb25cIiA6IG51bGwpIHx8XG4gICAgKGZpbGVfcGF0aC5lbmRzV2l0aChcIi5tZFwiKSA/IFwidGV4dC9tYXJrZG93blwiIDogbnVsbCkgfHxcbiAgICAoZmlsZV9wYXRoLmVuZHNXaXRoKFwiLmh0bWxcIikgPyBcInRleHQvaHRtbFwiIDogbnVsbCkgfHxcbiAgICAoZmlsZV9wYXRoLmVuZHNXaXRoKFwiLmNzc1wiKSA/IFwidGV4dC9jc3NcIiA6IG51bGwpIHx8XG4gICAgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIlxuXG4gIGlmIChleGlzaXRpbmdGaWxlKSB7XG4gICAgY29uc3QgcGFja2FnZV9maWxlID0gY3R4LmRiLnVwZGF0ZVBhY2thZ2VGaWxlKFxuICAgICAgZXhpc2l0aW5nRmlsZS5wYWNrYWdlX2ZpbGVfaWQsXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnRfdGV4dDpcbiAgICAgICAgICBjb250ZW50X3RleHQgPz9cbiAgICAgICAgICAoY29udGVudF9iYXNlNjRcbiAgICAgICAgICAgID8gQnVmZmVyLmZyb20oY29udGVudF9iYXNlNjQsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKClcbiAgICAgICAgICAgIDogbnVsbCksXG4gICAgICAgIGNvbnRlbnRfbWltZXR5cGU6IGNvbnRlbnRNaW1ldHlwZSxcbiAgICAgICAgaXNfcmVsZWFzZV90YXJiYWxsOiBpc19yZWxlYXNlX3RhcmJhbGwgfHwgZmFsc2UsXG4gICAgICAgIG5wbV9wYWNrX291dHB1dDogbnBtX3BhY2tfb3V0cHV0IHx8IG51bGwsXG4gICAgICB9LFxuICAgIClcblxuICAgIC8vIFVwZGF0ZSBmc19zaGEgZm9yIHRoZSBwYWNrYWdlIHJlbGVhc2VcbiAgICBjdHguZGIudXBkYXRlUGFja2FnZVJlbGVhc2VGc1NoYShwYWNrYWdlUmVsZWFzZUlkKVxuXG4gICAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICAgIG9rOiB0cnVlLFxuICAgICAgcGFja2FnZV9maWxlLFxuICAgIH0pXG4gIH1cblxuICBpZiAoXG4gICAgIXJlcS5qc29uQm9keS5wYWNrYWdlX3JlbGVhc2VfaWQgJiZcbiAgICAhcmVxLmpzb25Cb2R5LnBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb25cbiAgKVxuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm1pc3Npbmdfb3B0aW9uc1wiLFxuICAgICAgbWVzc2FnZTpcbiAgICAgICAgXCJNdXN0IHNwZWNpZnkgZWl0aGVyIHBhY2thZ2VfcmVsZWFzZV9pZCBvciBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uXCIsXG4gICAgfSlcbiAgLy8gQ3JlYXRlIHRoZSBwYWNrYWdlIGZpbGVcbiAgY29uc3QgbmV3UGFja2FnZUZpbGUgPSB7XG4gICAgcGFja2FnZV9maWxlX2lkOiBjcnlwdG8ucmFuZG9tVVVJRCgpLFxuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogcGFja2FnZVJlbGVhc2VJZCxcbiAgICBmaWxlX3BhdGgsXG4gICAgY29udGVudF90ZXh0OlxuICAgICAgY29udGVudF90ZXh0ID8/XG4gICAgICAoY29udGVudF9iYXNlNjRcbiAgICAgICAgPyBCdWZmZXIuZnJvbShjb250ZW50X2Jhc2U2NCwgXCJiYXNlNjRcIikudG9TdHJpbmcoKVxuICAgICAgICA6IG51bGwpLFxuICAgIGNvbnRlbnRfbWltZXR5cGU6IGNvbnRlbnRNaW1ldHlwZSxcbiAgICBpc19kaXJlY3Rvcnk6IGZhbHNlLFxuICAgIGlzX3JlbGVhc2VfdGFyYmFsbDogaXNfcmVsZWFzZV90YXJiYWxsIHx8IGZhbHNlLFxuICAgIG5wbV9wYWNrX291dHB1dDogbnBtX3BhY2tfb3V0cHV0IHx8IG51bGwsXG4gICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICB9XG5cbiAgLy8gQWRkIHRvIHRoZSB0ZXN0IGRhdGFiYXNlXG4gIGN0eC5kYi5hZGRQYWNrYWdlRmlsZShuZXdQYWNrYWdlRmlsZSlcblxuICAvLyBVcGRhdGUgZnNfc2hhIGZvciB0aGUgcGFja2FnZSByZWxlYXNlXG4gIGN0eC5kYi51cGRhdGVQYWNrYWdlUmVsZWFzZUZzU2hhKHBhY2thZ2VSZWxlYXNlSWQpXG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgICBwYWNrYWdlX2ZpbGU6IG5ld1BhY2thZ2VGaWxlLFxuICB9KVxufSlcbiIsICJpbXBvcnQgKiBhcyB6dCBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyBmaW5kUGFja2FnZVJlbGVhc2VJZCB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcGFja2FnZV9yZWxlYXNlL2ZpbmQtcGFja2FnZS1yZWxlYXNlLWlkXCJcbmltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5jb25zdCByb3V0ZVNwZWMgPSB7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwibm9uZVwiLFxuICBqc29uQm9keTogelxuICAgIC5vYmplY3Qoe1xuICAgICAgZmlsZV9wYXRoOiB6LnN0cmluZygpLFxuICAgICAgaXNfcmVsZWFzZV90YXJiYWxsOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlZmF1bHQoZmFsc2UpLFxuICAgICAgY29udGVudF9taW1ldHlwZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgY29udGVudF90ZXh0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBjb250ZW50X2Jhc2U2NDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgcGFja2FnZV9yZWxlYXNlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBucG1fcGFja19vdXRwdXQ6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgICB9KVxuICAgIC5yZWZpbmUoKHYpID0+IHtcbiAgICAgIGlmICh2LnBhY2thZ2VfcmVsZWFzZV9pZCkgcmV0dXJuIHRydWVcbiAgICAgIGlmICh2LnBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24pIHJldHVybiB0cnVlXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LCBcIk11c3Qgc3BlY2lmeSBlaXRoZXIgcGFja2FnZV9yZWxlYXNlX2lkIG9yIHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb25cIilcbiAgICAucmVmaW5lKCh2KSA9PiB7XG4gICAgICBpZiAodi5wYWNrYWdlX3JlbGVhc2VfaWQgJiYgdi5wYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uKSByZXR1cm4gZmFsc2VcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSwgXCJDYW5ub3Qgc3BlY2lmeSBib3RoIHBhY2thZ2VfcmVsZWFzZV9pZCBhbmQgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvblwiKVxuICAgIC5yZWZpbmUoKHYpID0+IHtcbiAgICAgIGlmICh2LmNvbnRlbnRfYmFzZTY0ICYmIHYuY29udGVudF90ZXh0KSByZXR1cm4gZmFsc2VcbiAgICAgIGlmICghdi5jb250ZW50X2Jhc2U2NCAmJiAhdi5jb250ZW50X3RleHQpIHJldHVybiBmYWxzZVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LCBcIkVpdGhlciBjb250ZW50X2Jhc2U2NCBvciBjb250ZW50X3RleHQgaXMgcmVxdWlyZWRcIiksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgICBwYWNrYWdlX2ZpbGU6IHp0LnBhY2thZ2VGaWxlU2NoZW1hLFxuICB9KSxcbn0gYXMgY29uc3RcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyhyb3V0ZVNwZWMpKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7XG4gICAgZmlsZV9wYXRoLFxuICAgIGNvbnRlbnRfbWltZXR5cGU6IHByb3ZpZGVkQ29udGVudE1pbWV0eXBlLFxuICAgIGNvbnRlbnRfYmFzZTY0LFxuICAgIGNvbnRlbnRfdGV4dCxcbiAgICBpc19yZWxlYXNlX3RhcmJhbGwsXG4gICAgbnBtX3BhY2tfb3V0cHV0LFxuICB9ID0gcmVxLmpzb25Cb2R5XG5cbiAgaWYgKGlzX3JlbGVhc2VfdGFyYmFsbCAmJiAhbnBtX3BhY2tfb3V0cHV0KSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwibWlzc2luZ19vcHRpb25zXCIsXG4gICAgICBtZXNzYWdlOiBcIm5wbV9wYWNrX291dHB1dCBpcyByZXF1aXJlZCBmb3IgcmVsZWFzZSB0YXJiYWxsc1wiLFxuICAgIH0pXG4gIH1cblxuICBpZiAoIWlzX3JlbGVhc2VfdGFyYmFsbCAmJiBucG1fcGFja19vdXRwdXQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJpbnZhbGlkX29wdGlvbnNcIixcbiAgICAgIG1lc3NhZ2U6IFwibnBtX3BhY2tfb3V0cHV0IGlzIG9ubHkgdmFsaWQgZm9yIHJlbGVhc2UgdGFyYmFsbHNcIixcbiAgICB9KVxuICB9XG5cbiAgbGV0IHBhY2thZ2VSZWxlYXNlSWQgPSByZXEuanNvbkJvZHkucGFja2FnZV9yZWxlYXNlX2lkXG5cbiAgaWYgKCFwYWNrYWdlUmVsZWFzZUlkICYmIHJlcS5qc29uQm9keS5wYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uKSB7XG4gICAgY29uc3QgZm91bmRQYWNrYWdlUmVsZWFzZUlkID0gYXdhaXQgZmluZFBhY2thZ2VSZWxlYXNlSWQoXG4gICAgICByZXEuanNvbkJvZHkucGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbixcbiAgICAgIGN0eCxcbiAgICApXG4gICAgaWYgKGZvdW5kUGFja2FnZVJlbGVhc2VJZCkge1xuICAgICAgcGFja2FnZVJlbGVhc2VJZCA9IGZvdW5kUGFja2FnZVJlbGVhc2VJZFxuICAgIH1cbiAgfVxuXG4gIGlmICghcGFja2FnZVJlbGVhc2VJZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBWZXJpZnkgdGhlIHBhY2thZ2UgcmVsZWFzZSBleGlzdHNcbiAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgKHByKSA9PiBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlSWQsXG4gIClcblxuICBpZiAoIXBhY2thZ2VSZWxlYXNlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIHJlbGVhc2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIERldGVybWluZSBjb250ZW50IG1pbWV0eXBlXG4gIGNvbnN0IGNvbnRlbnRNaW1ldHlwZSA9XG4gICAgcHJvdmlkZWRDb250ZW50TWltZXR5cGUgfHxcbiAgICAoZmlsZV9wYXRoLmVuZHNXaXRoKFwiLnRzXCIpIHx8IGZpbGVfcGF0aC5lbmRzV2l0aChcIi50c3hcIilcbiAgICAgID8gXCJ0ZXh0L3R5cGVzY3JpcHRcIlxuICAgICAgOiBudWxsKSB8fFxuICAgIChmaWxlX3BhdGguZW5kc1dpdGgoXCIuanNcIikgPyBcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiA6IG51bGwpIHx8XG4gICAgKGZpbGVfcGF0aC5lbmRzV2l0aChcIi5qc29uXCIpID8gXCJhcHBsaWNhdGlvbi9qc29uXCIgOiBudWxsKSB8fFxuICAgIChmaWxlX3BhdGguZW5kc1dpdGgoXCIubWRcIikgPyBcInRleHQvbWFya2Rvd25cIiA6IG51bGwpIHx8XG4gICAgKGZpbGVfcGF0aC5lbmRzV2l0aChcIi5odG1sXCIpID8gXCJ0ZXh0L2h0bWxcIiA6IG51bGwpIHx8XG4gICAgKGZpbGVfcGF0aC5lbmRzV2l0aChcIi5jc3NcIikgPyBcInRleHQvY3NzXCIgOiBudWxsKSB8fFxuICAgIFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCJcblxuICAvLyBDcmVhdGUgdGhlIHBhY2thZ2UgZmlsZVxuICBjb25zdCBuZXdQYWNrYWdlRmlsZSA9IHtcbiAgICBwYWNrYWdlX2ZpbGVfaWQ6IGNyeXB0by5yYW5kb21VVUlEKCksXG4gICAgcGFja2FnZV9yZWxlYXNlX2lkOiBwYWNrYWdlUmVsZWFzZUlkLFxuICAgIGZpbGVfcGF0aCxcbiAgICBjb250ZW50X3RleHQ6XG4gICAgICBjb250ZW50X3RleHQgfHxcbiAgICAgIChjb250ZW50X2Jhc2U2NFxuICAgICAgICA/IEJ1ZmZlci5mcm9tKGNvbnRlbnRfYmFzZTY0LCBcImJhc2U2NFwiKS50b1N0cmluZygpXG4gICAgICAgIDogbnVsbCksXG4gICAgY29udGVudF9taW1ldHlwZTogY29udGVudE1pbWV0eXBlLFxuICAgIGlzX2RpcmVjdG9yeTogZmFsc2UsXG4gICAgaXNfcmVsZWFzZV90YXJiYWxsOiBpc19yZWxlYXNlX3RhcmJhbGwgfHwgZmFsc2UsXG4gICAgbnBtX3BhY2tfb3V0cHV0OiBucG1fcGFja19vdXRwdXQgfHwgbnVsbCxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIH1cblxuICAvLyBBZGQgdG8gdGhlIHRlc3QgZGF0YWJhc2VcbiAgY3R4LmRiLmFkZFBhY2thZ2VGaWxlKG5ld1BhY2thZ2VGaWxlKVxuXG4gIC8vIFVwZGF0ZSBmc19zaGEgZm9yIHRoZSBwYWNrYWdlIHJlbGVhc2VcbiAgY3R4LmRiLnVwZGF0ZVBhY2thZ2VSZWxlYXNlRnNTaGEocGFja2FnZVJlbGVhc2VJZClcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICAgIHBhY2thZ2VfZmlsZTogbmV3UGFja2FnZUZpbGUsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBmaW5kUGFja2FnZVJlbGVhc2VJZCB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcGFja2FnZV9yZWxlYXNlL2ZpbmQtcGFja2FnZS1yZWxlYXNlLWlkXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogelxuICAgIC5vYmplY3Qoe1xuICAgICAgcGFja2FnZV9yZWxlYXNlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBmaWxlX3BhdGg6IHouc3RyaW5nKCksXG4gICAgfSlcbiAgICAucmVmaW5lKCh2KSA9PiB7XG4gICAgICBpZiAodi5wYWNrYWdlX3JlbGVhc2VfaWQpIHJldHVybiB0cnVlXG4gICAgICBpZiAodi5wYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uKSByZXR1cm4gdHJ1ZVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSwgXCJNdXN0IHNwZWNpZnkgZWl0aGVyIHBhY2thZ2VfcmVsZWFzZV9pZCBvciBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uXCIpXG4gICAgLnJlZmluZSgodikgPT4ge1xuICAgICAgaWYgKHYucGFja2FnZV9yZWxlYXNlX2lkICYmIHYucGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbikgcmV0dXJuIGZhbHNlXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sIFwiQ2Fubm90IHNwZWNpZnkgYm90aCBwYWNrYWdlX3JlbGVhc2VfaWQgYW5kIHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb25cIiksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBmaWxlX3BhdGggfSA9IHJlcS5qc29uQm9keVxuXG4gIGxldCBwYWNrYWdlUmVsZWFzZUlkID0gcmVxLmpzb25Cb2R5LnBhY2thZ2VfcmVsZWFzZV9pZFxuXG4gIGlmICghcGFja2FnZVJlbGVhc2VJZCAmJiByZXEuanNvbkJvZHkucGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbikge1xuICAgIGNvbnN0IGZvdW5kUGFja2FnZVJlbGVhc2VJZCA9IGF3YWl0IGZpbmRQYWNrYWdlUmVsZWFzZUlkKFxuICAgICAgcmVxLmpzb25Cb2R5LnBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24sXG4gICAgICBjdHgsXG4gICAgKVxuICAgIGlmIChmb3VuZFBhY2thZ2VSZWxlYXNlSWQpIHtcbiAgICAgIHBhY2thZ2VSZWxlYXNlSWQgPSBmb3VuZFBhY2thZ2VSZWxlYXNlSWRcbiAgICB9XG4gIH1cblxuICBpZiAoIXBhY2thZ2VSZWxlYXNlSWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX3JlbGVhc2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlBhY2thZ2UgcmVsZWFzZSBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gR2V0IHRoZSBwYWNrYWdlIHJlbGVhc2UgdG8gY2hlY2sgcGVybWlzc2lvbnNcbiAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgKHByKSA9PiBwci5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlSWQsXG4gIClcblxuICBpZiAoIXBhY2thZ2VSZWxlYXNlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIHJlbGVhc2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIEdldCB0aGUgcGFja2FnZSB0byBjaGVjayBwZXJtaXNzaW9uc1xuICBjb25zdCBleGlzdGluZ3BhY2thZ2UgPSBjdHguZGIucGFja2FnZXMuZmluZChcbiAgICAocCkgPT4gcC5wYWNrYWdlX2lkID09PSBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX2lkLFxuICApXG5cbiAgaWYgKCFleGlzdGluZ3BhY2thZ2UpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDaGVjayBpZiB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSB0aGUgZmlsZVxuICBpZiAoZXhpc3RpbmdwYWNrYWdlLmNyZWF0b3JfYWNjb3VudF9pZCAhPT0gY3R4LmF1dGguYWNjb3VudF9pZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImZvcmJpZGRlblwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBmaWxlcyBpbiB0aGlzIHBhY2thZ2VcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gRmluZCB0aGUgZmlsZVxuICBjb25zdCBwYWNrYWdlRmlsZSA9IGN0eC5kYi5wYWNrYWdlRmlsZXMuZmluZChcbiAgICAoZikgPT5cbiAgICAgIGYuZmlsZV9wYXRoID09PSBmaWxlX3BhdGggJiYgZi5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlSWQsXG4gIClcblxuICBpZiAoIXBhY2thZ2VGaWxlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiZmlsZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSBmaWxlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBEZWxldGUgdGhlIGZpbGUgdXNpbmcgZGVsZXRlUGFja2FnZUZpbGUgbWV0aG9kXG4gIGNvbnN0IGRlbGV0ZWQgPSBjdHguZGIuZGVsZXRlUGFja2FnZUZpbGUocGFja2FnZUZpbGUucGFja2FnZV9maWxlX2lkKVxuXG4gIGlmICghZGVsZXRlZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNTAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImZpbGVfZGVsZXRpb25fZmFpbGVkXCIsXG4gICAgICBtZXNzYWdlOiBcIkZhaWxlZCB0byBkZWxldGUgcGFja2FnZSBmaWxlXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIFVwZGF0ZSBmc19zaGEgZm9yIHRoZSBwYWNrYWdlIHJlbGVhc2VcbiAgY3R4LmRiLnVwZGF0ZVBhY2thZ2VSZWxlYXNlRnNTaGEocGFja2FnZVJlbGVhc2VJZClcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyBOb3RGb3VuZEVycm9yIH0gZnJvbSBcIndpbnRlcnNwZWMvbWlkZGxld2FyZVwiXG5pbXBvcnQgKiBhcyBaVCBmcm9tIFwiLi4vZGIvc2NoZW1hXCJcbmltcG9ydCB7IG5vcm1hbGl6ZVByb2plY3RGaWxlUGF0aCB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS91dGlscy9ub3JtYWxpemVQcm9qZWN0RmlsZVBhdGhcIlxuZXhwb3J0IGNvbnN0IGdldFBhY2thZ2VGaWxlSWRGcm9tRmlsZURlc2NyaXB0b3IgPSBhc3luYyAoXG4gIGRlc2NyaXB0b3I6XG4gICAgfCB7IHBhY2thZ2VfZmlsZV9pZDogc3RyaW5nIH1cbiAgICB8IHsgcGFja2FnZV9yZWxlYXNlX2lkOiBzdHJpbmc7IGZpbGVfcGF0aDogc3RyaW5nIH1cbiAgICB8IHsgcGFja2FnZV9pZDogc3RyaW5nOyB2ZXJzaW9uPzogc3RyaW5nOyBmaWxlX3BhdGg6IHN0cmluZyB9XG4gICAgfCB7IHBhY2thZ2VfbmFtZTogc3RyaW5nOyB2ZXJzaW9uPzogc3RyaW5nOyBmaWxlX3BhdGg6IHN0cmluZyB9XG4gICAgfCB7IHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb246IHN0cmluZzsgZmlsZV9wYXRoOiBzdHJpbmcgfSxcbiAgY3R4OiB7IGRiOiBhbnkgfSxcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGlmIChcInBhY2thZ2VfZmlsZV9pZFwiIGluIGRlc2NyaXB0b3IpIHtcbiAgICBjb25zdCBwYWNrYWdlRmlsZSA9IGN0eC5kYi5wYWNrYWdlRmlsZXMuZmluZChcbiAgICAgIChwZjogWlQuUGFja2FnZUZpbGUpID0+IHBmLnBhY2thZ2VfZmlsZV9pZCA9PT0gZGVzY3JpcHRvci5wYWNrYWdlX2ZpbGVfaWQsXG4gICAgKVxuXG4gICAgaWYgKCFwYWNrYWdlRmlsZSkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXCJQYWNrYWdlIGZpbGUgbm90IGZvdW5kXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc2NyaXB0b3IucGFja2FnZV9maWxlX2lkXG4gIH1cblxuICBpZiAoXCJwYWNrYWdlX3JlbGVhc2VfaWRcIiBpbiBkZXNjcmlwdG9yKSB7XG4gICAgY29uc3QgeyBwYWNrYWdlX3JlbGVhc2VfaWQsIGZpbGVfcGF0aCB9ID0gZGVzY3JpcHRvclxuICAgIGNvbnN0IHBhY2thZ2VGaWxlID0gY3R4LmRiLnBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgKHBmOiBaVC5QYWNrYWdlRmlsZSkgPT5cbiAgICAgICAgcGYucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlX3JlbGVhc2VfaWQgJiZcbiAgICAgICAgbm9ybWFsaXplUHJvamVjdEZpbGVQYXRoKHBmLmZpbGVfcGF0aCkgPT09XG4gICAgICAgICAgbm9ybWFsaXplUHJvamVjdEZpbGVQYXRoKGZpbGVfcGF0aCksXG4gICAgKVxuXG4gICAgaWYgKCFwYWNrYWdlRmlsZSkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXCJQYWNrYWdlIGZpbGUgbm90IGZvdW5kXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhY2thZ2VGaWxlLnBhY2thZ2VfZmlsZV9pZFxuICB9XG5cbiAgaWYgKFwicGFja2FnZV9pZFwiIGluIGRlc2NyaXB0b3IpIHtcbiAgICBjb25zdCB7IHBhY2thZ2VfaWQsIHZlcnNpb24sIGZpbGVfcGF0aCB9ID0gZGVzY3JpcHRvclxuXG4gICAgLy8gVmVyaWZ5IHBhY2thZ2UgZXhpc3RzXG4gICAgY29uc3QgcGtnID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoXG4gICAgICAocDogWlQuUGFja2FnZSkgPT4gcC5wYWNrYWdlX2lkID09PSBwYWNrYWdlX2lkLFxuICAgIClcbiAgICBpZiAoIXBrZykge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXCJQYWNrYWdlIG5vdCBmb3VuZFwiKVxuICAgIH1cblxuICAgIC8vIEZpbmQgdGhlIHBhY2thZ2UgcmVsZWFzZVxuICAgIGxldCBwYWNrYWdlUmVsZWFzZVxuICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICBwYWNrYWdlUmVsZWFzZSA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgICAgKHByOiBaVC5QYWNrYWdlUmVsZWFzZSkgPT5cbiAgICAgICAgICBwci5wYWNrYWdlX2lkID09PSBwYWNrYWdlX2lkICYmIHByLnZlcnNpb24gPT09IHZlcnNpb24sXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHBhY2thZ2VSZWxlYXNlID0gY3R4LmRiLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgICAgICAocHI6IFpULlBhY2thZ2VSZWxlYXNlKSA9PiBwci5wYWNrYWdlX2lkID09PSBwYWNrYWdlX2lkICYmIHByLmlzX2xhdGVzdCxcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAoIXBhY2thZ2VSZWxlYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihcIlBhY2thZ2UgcmVsZWFzZSBub3QgZm91bmRcIilcbiAgICB9XG5cbiAgICAvLyBGaW5kIHRoZSBmaWxlXG4gICAgY29uc3QgcGFja2FnZUZpbGUgPSBjdHguZGIucGFja2FnZUZpbGVzLmZpbmQoXG4gICAgICAocGY6IFpULlBhY2thZ2VGaWxlKSA9PlxuICAgICAgICBwZi5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCAmJlxuICAgICAgICBub3JtYWxpemVQcm9qZWN0RmlsZVBhdGgocGYuZmlsZV9wYXRoKSA9PT1cbiAgICAgICAgICBub3JtYWxpemVQcm9qZWN0RmlsZVBhdGgoZmlsZV9wYXRoKSxcbiAgICApXG5cbiAgICBpZiAoIXBhY2thZ2VGaWxlKSB7XG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihcIlBhY2thZ2UgZmlsZSBub3QgZm91bmRcIilcbiAgICB9XG5cbiAgICByZXR1cm4gcGFja2FnZUZpbGUucGFja2FnZV9maWxlX2lkXG4gIH1cblxuICBpZiAoXCJwYWNrYWdlX25hbWVcIiBpbiBkZXNjcmlwdG9yKSB7XG4gICAgY29uc3QgeyBwYWNrYWdlX25hbWUsIHZlcnNpb24sIGZpbGVfcGF0aCB9ID0gZGVzY3JpcHRvclxuXG4gICAgLy8gRmluZCB0aGUgcGFja2FnZSBmaXJzdFxuICAgIGNvbnN0IHBrZyA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKChwOiBaVC5QYWNrYWdlKSA9PiBwLm5hbWUgPT09IHBhY2thZ2VfbmFtZSlcbiAgICBpZiAoIXBrZykge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYFBhY2thZ2Ugbm90IGZvdW5kOiAke3BhY2thZ2VfbmFtZX1gKVxuICAgIH1cblxuICAgIC8vIEZpbmQgdGhlIHBhY2thZ2UgcmVsZWFzZVxuICAgIGxldCBwYWNrYWdlUmVsZWFzZVxuICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICBwYWNrYWdlUmVsZWFzZSA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgICAgKHByOiBaVC5QYWNrYWdlUmVsZWFzZSkgPT5cbiAgICAgICAgICBwci5wYWNrYWdlX2lkID09PSBwa2cucGFja2FnZV9pZCAmJiBwci52ZXJzaW9uID09PSB2ZXJzaW9uLFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBwYWNrYWdlUmVsZWFzZSA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgICAgKHByOiBaVC5QYWNrYWdlUmVsZWFzZSkgPT5cbiAgICAgICAgICBwci5wYWNrYWdlX2lkID09PSBwa2cucGFja2FnZV9pZCAmJiBwci5pc19sYXRlc3QsXG4gICAgICApXG4gICAgfVxuXG4gICAgaWYgKCFwYWNrYWdlUmVsZWFzZSkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXCJQYWNrYWdlIHJlbGVhc2Ugbm90IGZvdW5kXCIpXG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgZmlsZVxuICAgIGNvbnN0IHBhY2thZ2VGaWxlID0gY3R4LmRiLnBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgKHBmOiBaVC5QYWNrYWdlRmlsZSkgPT5cbiAgICAgICAgcGYucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQgJiZcbiAgICAgICAgbm9ybWFsaXplUHJvamVjdEZpbGVQYXRoKHBmLmZpbGVfcGF0aCkgPT09XG4gICAgICAgICAgbm9ybWFsaXplUHJvamVjdEZpbGVQYXRoKGZpbGVfcGF0aCksXG4gICAgKVxuXG4gICAgaWYgKCFwYWNrYWdlRmlsZSkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXCJQYWNrYWdlIGZpbGUgbm90IGZvdW5kXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhY2thZ2VGaWxlLnBhY2thZ2VfZmlsZV9pZFxuICB9XG5cbiAgaWYgKFwicGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvblwiIGluIGRlc2NyaXB0b3IpIHtcbiAgICBjb25zdCB7IHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24sIGZpbGVfcGF0aCB9ID0gZGVzY3JpcHRvclxuICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbi5zcGxpdChcIkBcIilbMF1cbiAgICBjb25zdCB2ZXJzaW9uID0gcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbi5zcGxpdChcIkBcIilbMV1cblxuICAgIC8vIEZpbmQgdGhlIHBhY2thZ2VcbiAgICBjb25zdCBwa2cgPSBjdHguZGIucGFja2FnZXMuZmluZCgocDogWlQuUGFja2FnZSkgPT4gcC5uYW1lID09PSBwYWNrYWdlTmFtZSlcbiAgICBpZiAoIXBrZykge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYFBhY2thZ2Ugbm90IGZvdW5kOiAke3BhY2thZ2VOYW1lfWApXG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgcGFja2FnZSByZWxlYXNlXG4gICAgbGV0IHBhY2thZ2VSZWxlYXNlXG4gICAgaWYgKCF2ZXJzaW9uIHx8IHZlcnNpb24gPT09IFwibGF0ZXN0XCIpIHtcbiAgICAgIHBhY2thZ2VSZWxlYXNlID0gY3R4LmRiLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgICAgICAocHI6IFpULlBhY2thZ2VSZWxlYXNlKSA9PlxuICAgICAgICAgIHByLnBhY2thZ2VfaWQgPT09IHBrZy5wYWNrYWdlX2lkICYmIHByLmlzX2xhdGVzdCxcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgICAgIChwcjogWlQuUGFja2FnZVJlbGVhc2UpID0+XG4gICAgICAgICAgcHIucGFja2FnZV9pZCA9PT0gcGtnLnBhY2thZ2VfaWQgJiYgcHIudmVyc2lvbiA9PT0gdmVyc2lvbixcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAoIXBhY2thZ2VSZWxlYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihcbiAgICAgICAgYFBhY2thZ2UgcmVsZWFzZSBub3QgZm91bmQgZm9yIHZlcnNpb246ICR7dmVyc2lvbiB8fCBcImxhdGVzdFwifWAsXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgZmlsZVxuICAgIGNvbnN0IHBhY2thZ2VGaWxlID0gY3R4LmRiLnBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgKHBmOiBaVC5QYWNrYWdlRmlsZSkgPT5cbiAgICAgICAgcGYucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQgJiZcbiAgICAgICAgbm9ybWFsaXplUHJvamVjdEZpbGVQYXRoKHBmLmZpbGVfcGF0aCkgPT09XG4gICAgICAgICAgbm9ybWFsaXplUHJvamVjdEZpbGVQYXRoKGZpbGVfcGF0aCksXG4gICAgKVxuXG4gICAgaWYgKCFwYWNrYWdlRmlsZSkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYFBhY2thZ2UgZmlsZSBub3QgZm91bmQ6ICR7ZmlsZV9wYXRofWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhY2thZ2VGaWxlLnBhY2thZ2VfZmlsZV9pZFxuICB9XG5cbiAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXCJJbnZhbGlkIHBhY2thZ2UgZmlsZSBkZXNjcmlwdG9yXCIpXG59XG4iLCAiaW1wb3J0IHsgZ2V0UGFja2FnZUZpbGVJZEZyb21GaWxlRGVzY3JpcHRvciB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcGFja2FnZV9maWxlL2dldC1wYWNrYWdlLWZpbGUtaWQtZnJvbS1maWxlLWRlc2NyaXB0b3JcIlxuaW1wb3J0IHsgZmluZFBhY2thZ2VSZWxlYXNlSWQgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3BhY2thZ2VfcmVsZWFzZS9maW5kLXBhY2thZ2UtcmVsZWFzZS1pZFwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuY29uc3Qgcm91dGVTcGVjID0ge1xuICBtZXRob2RzOiBbXCJHRVRcIiwgXCJQT1NUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAgcXVlcnlQYXJhbXM6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIHBhY2thZ2VfZmlsZV9pZDogei5zdHJpbmcoKSxcbiAgICB9KVxuICAgIC5vcihcbiAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbjogei5zdHJpbmcoKSxcbiAgICAgICAgZmlsZV9wYXRoOiB6LnN0cmluZygpLFxuICAgICAgfSksXG4gICAgKSxcbiAganNvblJlc3BvbnNlOiB6LmFueSgpLCAvLyBVc2luZyBhbnkgYmVjYXVzZSB3ZSdyZSByZXR1cm5pbmcgYmluYXJ5IGRhdGFcbn0gYXMgY29uc3RcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyhyb3V0ZVNwZWMpKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBsZXQgcGFja2FnZUZpbGVJZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGNvbnN0IHBhcmFtcyA9IHJlcS5xdWVyeVxuXG4gIGlmIChcInBhY2thZ2VfZmlsZV9pZFwiIGluIHBhcmFtcykge1xuICAgIHBhY2thZ2VGaWxlSWQgPSBwYXJhbXMucGFja2FnZV9maWxlX2lkXG4gIH0gZWxzZSBpZiAoXCJwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uXCIgaW4gcGFyYW1zKSB7XG4gICAgY29uc3QgeyBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uLCBmaWxlX3BhdGggfSA9IHBhcmFtc1xuXG4gICAgY29uc3QgcGFja2FnZVJlbGVhc2VJZCA9IGF3YWl0IGZpbmRQYWNrYWdlUmVsZWFzZUlkKFxuICAgICAgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbixcbiAgICAgIGN0eCxcbiAgICApXG5cbiAgICBpZiAoIXBhY2thZ2VSZWxlYXNlSWQpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwibm90X2ZvdW5kXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcGFja2FnZUZpbGVJZCA9IGF3YWl0IGdldFBhY2thZ2VGaWxlSWRGcm9tRmlsZURlc2NyaXB0b3IoXG4gICAgICAgIHtcbiAgICAgICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHBhY2thZ2VSZWxlYXNlSWQsXG4gICAgICAgICAgZmlsZV9wYXRoOiBmaWxlX3BhdGgsXG4gICAgICAgIH0sXG4gICAgICAgIGN0eCxcbiAgICAgIClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgICAgZXJyb3JfY29kZTogXCJub3RfZm91bmRcIixcbiAgICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIGZpbGUgbm90IGZvdW5kXCIsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGlmICghcGFja2FnZUZpbGVJZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImJhZF9yZXF1ZXN0XCIsXG4gICAgICBtZXNzYWdlOiBcIkNvdWxkIG5vdCBkZXRlcm1pbmUgcGFja2FnZV9maWxlX2lkXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VGaWxlID0gY3R4LmRiLnBhY2thZ2VGaWxlcy5maW5kKFxuICAgIChwZikgPT4gcGYucGFja2FnZV9maWxlX2lkID09PSBwYWNrYWdlRmlsZUlkLFxuICApXG5cbiAgaWYgKCFwYWNrYWdlRmlsZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm5vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIGZpbGUgbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gXCJ0ZXh0L3BsYWluXCJcblxuICBjb25zdCBoZWFkZXJzID0ge1xuICAgIFwiQ29udGVudC1UeXBlXCI6IGNvbnRlbnRUeXBlLFxuICAgIFwiQ29udGVudC1EaXNwb3NpdGlvblwiOiBgYXR0YWNobWVudDsgZmlsZW5hbWU9XCIke3BhY2thZ2VGaWxlLmZpbGVfcGF0aC5zcGxpdChcIi9cIikucG9wKCl9XCJgLFxuICAgIFwiQ2FjaGUtQ29udHJvbFwiOiBcInB1YmxpYywgbWF4LWFnZT04NjQwMCwgc3RhbGUtd2hpbGUtcmV2YWxpZGF0ZT02MDQ4MDBcIixcbiAgICBFeHBpcmVzOiBuZXcgRGF0ZShEYXRlLm5vdygpICsgODY0MDAwMDApLnRvVVRDU3RyaW5nKCksXG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3BvbnNlKHBhY2thZ2VGaWxlLmNvbnRlbnRfdGV4dCwgeyBoZWFkZXJzIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0ICogYXMgWlQgZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgZ2V0UGFja2FnZUZpbGVJZEZyb21GaWxlRGVzY3JpcHRvciB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcGFja2FnZV9maWxlL2dldC1wYWNrYWdlLWZpbGUtaWQtZnJvbS1maWxlLWRlc2NyaXB0b3JcIlxuXG5jb25zdCByb3V0ZVNwZWMgPSB7XG4gIG1ldGhvZHM6IFtcIkdFVFwiLCBcIlBPU1RcIl0sXG4gIGF1dGg6IFwibm9uZVwiLFxuICBxdWVyeVBhcmFtczogelxuICAgIC5vYmplY3Qoe1xuICAgICAgcGFja2FnZV9maWxlX2lkOiB6LnN0cmluZygpLFxuICAgIH0pXG4gICAgLm9yKFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHouc3RyaW5nKCksXG4gICAgICAgIGZpbGVfcGF0aDogei5zdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgIClcbiAgICAub3IoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHBhY2thZ2VfaWQ6IHouc3RyaW5nKCksXG4gICAgICAgIHZlcnNpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgICAgZmlsZV9wYXRoOiB6LnN0cmluZygpLFxuICAgICAgfSksXG4gICAgKVxuICAgIC5vcihcbiAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgcGFja2FnZV9uYW1lOiB6LnN0cmluZygpLFxuICAgICAgICB2ZXJzaW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAgIGZpbGVfcGF0aDogei5zdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgIClcbiAgICAub3IoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb246IHouc3RyaW5nKCksXG4gICAgICAgIGZpbGVfcGF0aDogei5zdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgICksXG4gIGpzb25SZXNwb25zZTogelxuICAgIC5vYmplY3Qoe1xuICAgICAgb2s6IHouYm9vbGVhbigpLFxuICAgICAgcGFja2FnZV9maWxlOiBaVC5wYWNrYWdlRmlsZVNjaGVtYS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm9yKFpULmVycm9yUmVzcG9uc2VTY2hlbWEpLFxufSBhcyBjb25zdFxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHJvdXRlU3BlYykoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHBhY2thZ2VGaWxlSWQgPSBhd2FpdCBnZXRQYWNrYWdlRmlsZUlkRnJvbUZpbGVEZXNjcmlwdG9yKHJlcS5xdWVyeSwgY3R4KVxuXG4gIGNvbnN0IHBhY2thZ2VGaWxlID0gY3R4LmRiLnBhY2thZ2VGaWxlcy5maW5kKFxuICAgIChwZjogWlQuUGFja2FnZUZpbGUpID0+IHBmLnBhY2thZ2VfZmlsZV9pZCA9PT0gcGFja2FnZUZpbGVJZCxcbiAgKVxuXG4gIGlmICghcGFja2FnZUZpbGUpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX2ZpbGVfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlBhY2thZ2UgZmlsZSBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgICBwYWNrYWdlX2ZpbGU6IHtcbiAgICAgIC4uLnBhY2thZ2VGaWxlLFxuICAgICAgY3JlYXRlZF9hdDogcGFja2FnZUZpbGUuY3JlYXRlZF9hdC50b1N0cmluZygpLFxuICAgIH0sXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0ICogYXMgWlQgZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgZmluZFBhY2thZ2VSZWxlYXNlSWQgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL3BhY2thZ2VfcmVsZWFzZS9maW5kLXBhY2thZ2UtcmVsZWFzZS1pZFwiXG5cbmNvbnN0IHJvdXRlU3BlYyA9IHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAgcXVlcnlQYXJhbXM6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogei5zdHJpbmcoKSxcbiAgICB9KVxuICAgIC5vcihcbiAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgcGFja2FnZV9uYW1lOiB6LnN0cmluZygpLFxuICAgICAgICB1c2VfbGF0ZXN0X3ZlcnNpb246IHoucHJlcHJvY2VzcyhcbiAgICAgICAgICAodmFsKSA9PiAodmFsID09PSBcInRydWVcIiA/IHRydWUgOiB2YWwpLFxuICAgICAgICAgIHoubGl0ZXJhbCh0cnVlKSxcbiAgICAgICAgKSxcbiAgICAgIH0pLFxuICAgIClcbiAgICAub3IoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb246IHouc3RyaW5nKCksXG4gICAgICB9KSxcbiAgICApLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gICAgcGFja2FnZV9maWxlczogei5hcnJheShaVC5wYWNrYWdlRmlsZVNjaGVtYSksXG4gIH0pLFxufSBhcyBjb25zdFxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHJvdXRlU3BlYykoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHBhY2thZ2VSZWxlYXNlSWQgPSBhd2FpdCBmaW5kUGFja2FnZVJlbGVhc2VJZChyZXEucXVlcnksIGN0eClcblxuICBpZiAoIXBhY2thZ2VSZWxlYXNlSWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX3JlbGVhc2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlBhY2thZ2UgcmVsZWFzZSBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gT21pdCB0aGUgY29udGVudF90ZXh0IGZpZWxkXG4gIGNvbnN0IHBhY2thZ2VGaWxlcyA9IGN0eC5kYi5wYWNrYWdlRmlsZXNcbiAgICAuZmlsdGVyKChmaWxlKSA9PiBmaWxlLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcGFja2FnZVJlbGVhc2VJZClcbiAgICAubWFwKCh7IGNvbnRlbnRfdGV4dCwgLi4uZmlsZSB9KSA9PiAoe1xuICAgICAgLi4uZmlsZSxcbiAgICB9KSlcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICAgIHBhY2thZ2VfZmlsZXM6IHBhY2thZ2VGaWxlcyxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0ICogYXMgWlQgZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHR5cGUgeyBEYkNsaWVudCB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvZGItY2xpZW50XCJcblxuZXhwb3J0IGNvbnN0IHB1YmxpY01hcFBhY2thZ2VSZWxlYXNlID0gKFxuICBpbnRlcm5hbF9wYWNrYWdlX3JlbGVhc2U6IFpULlBhY2thZ2VSZWxlYXNlLFxuICBvcHRpb25zOiB7XG4gICAgaW5jbHVkZV9sb2dzPzogYm9vbGVhblxuICAgIGluY2x1ZGVfYWlfcmV2aWV3PzogYm9vbGVhblxuICAgIGRiPzogRGJDbGllbnRcbiAgfSA9IHtcbiAgICBpbmNsdWRlX2xvZ3M6IGZhbHNlLFxuICAgIGluY2x1ZGVfYWlfcmV2aWV3OiBmYWxzZSxcbiAgfSxcbik6IFpULlBhY2thZ2VSZWxlYXNlID0+IHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIC4uLmludGVybmFsX3BhY2thZ2VfcmVsZWFzZSxcbiAgICBjcmVhdGVkX2F0OiBpbnRlcm5hbF9wYWNrYWdlX3JlbGVhc2UuY3JlYXRlZF9hdCxcbiAgICBjaXJjdWl0X2pzb25fYnVpbGRfZXJyb3JfbGFzdF91cGRhdGVkX2F0OlxuICAgICAgaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLmNpcmN1aXRfanNvbl9idWlsZF9lcnJvcl9sYXN0X3VwZGF0ZWRfYXQsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2Vycm9yOiBpbnRlcm5hbF9wYWNrYWdlX3JlbGVhc2UuY2lyY3VpdF9qc29uX2J1aWxkX2Vycm9yLFxuICAgIHRyYW5zcGlsYXRpb25fbG9nczogb3B0aW9ucy5pbmNsdWRlX2xvZ3NcbiAgICAgID8gaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLnRyYW5zcGlsYXRpb25fbG9nc1xuICAgICAgOiBbXSxcbiAgICB1c2VyX2NvZGVfYnVpbGRfbG9nczogb3B0aW9ucy5pbmNsdWRlX2xvZ3NcbiAgICAgID8gaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLnVzZXJfY29kZV9idWlsZF9sb2dzXG4gICAgICA6IG51bGwsXG4gICAgdXNlcl9jb2RlX2xvZ19zdHJlYW1fdXJsOiBvcHRpb25zLmluY2x1ZGVfbG9nc1xuICAgICAgPyBpbnRlcm5hbF9wYWNrYWdlX3JlbGVhc2UudXNlcl9jb2RlX2xvZ19zdHJlYW1fdXJsXG4gICAgICA6IG51bGwsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2xvZ3M6IG9wdGlvbnMuaW5jbHVkZV9sb2dzXG4gICAgICA/IGludGVybmFsX3BhY2thZ2VfcmVsZWFzZS5jaXJjdWl0X2pzb25fYnVpbGRfbG9nc1xuICAgICAgOiBbXSxcbiAgICBpbWFnZV9nZW5lcmF0aW9uX2xvZ3M6IG9wdGlvbnMuaW5jbHVkZV9sb2dzXG4gICAgICA/IGludGVybmFsX3BhY2thZ2VfcmVsZWFzZS5pbWFnZV9nZW5lcmF0aW9uX2xvZ3NcbiAgICAgIDogbnVsbCxcbiAgICBpbWFnZV9nZW5lcmF0aW9uX2luX3Byb2dyZXNzOlxuICAgICAgaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLmltYWdlX2dlbmVyYXRpb25faW5fcHJvZ3Jlc3MsXG4gICAgaW1hZ2VfZ2VuZXJhdGlvbl9zdGFydGVkX2F0OlxuICAgICAgaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLmltYWdlX2dlbmVyYXRpb25fc3RhcnRlZF9hdCA/PyBudWxsLFxuICAgIGltYWdlX2dlbmVyYXRpb25fY29tcGxldGVkX2F0OlxuICAgICAgaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLmltYWdlX2dlbmVyYXRpb25fY29tcGxldGVkX2F0ID8/IG51bGwsXG4gICAgaW1hZ2VfZ2VuZXJhdGlvbl9pc19zdGFsZTpcbiAgICAgIGludGVybmFsX3BhY2thZ2VfcmVsZWFzZS5pbWFnZV9nZW5lcmF0aW9uX2lzX3N0YWxlLFxuICAgIGltYWdlX2dlbmVyYXRpb25fZXJyb3I6XG4gICAgICBpbnRlcm5hbF9wYWNrYWdlX3JlbGVhc2UuaW1hZ2VfZ2VuZXJhdGlvbl9lcnJvciA/PyBudWxsLFxuICAgIGltYWdlX2dlbmVyYXRpb25fZXJyb3JfbGFzdF91cGRhdGVkX2F0OlxuICAgICAgaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLmltYWdlX2dlbmVyYXRpb25fZXJyb3JfbGFzdF91cGRhdGVkX2F0ID8/IG51bGwsXG4gICAgaW1hZ2VfZ2VuZXJhdGlvbl9kaXNwbGF5X3N0YXR1czpcbiAgICAgIGludGVybmFsX3BhY2thZ2VfcmVsZWFzZS5pbWFnZV9nZW5lcmF0aW9uX2Rpc3BsYXlfc3RhdHVzLFxuICAgIGlzX3ByX3ByZXZpZXc6IEJvb2xlYW4oaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLmlzX3ByX3ByZXZpZXcpLFxuICAgIGdpdGh1Yl9wcl9udW1iZXI6IGludGVybmFsX3BhY2thZ2VfcmVsZWFzZS5naXRodWJfcHJfbnVtYmVyLFxuICAgIGJyYW5jaF9uYW1lOiBpbnRlcm5hbF9wYWNrYWdlX3JlbGVhc2UuYnJhbmNoX25hbWUsXG4gICAgY29tbWl0X21lc3NhZ2U6IGludGVybmFsX3BhY2thZ2VfcmVsZWFzZS5jb21taXRfbWVzc2FnZSA/PyBudWxsLFxuICAgIGNvbW1pdF9hdXRob3I6IGludGVybmFsX3BhY2thZ2VfcmVsZWFzZS5jb21taXRfYXV0aG9yID8/IG51bGwsXG4gICAgcGNiX3ByZXZpZXdfaW1hZ2VfdXJsOlxuICAgICAgaW50ZXJuYWxfcGFja2FnZV9yZWxlYXNlLnBjYl9wcmV2aWV3X2ltYWdlX3VybCA/PyBudWxsLFxuICAgIHNjaF9wcmV2aWV3X2ltYWdlX3VybDpcbiAgICAgIGludGVybmFsX3BhY2thZ2VfcmVsZWFzZS5zY2hfcHJldmlld19pbWFnZV91cmwgPz8gbnVsbCxcbiAgICBjYWRfcHJldmlld19pbWFnZV91cmw6XG4gICAgICBpbnRlcm5hbF9wYWNrYWdlX3JlbGVhc2UuY2FkX3ByZXZpZXdfaW1hZ2VfdXJsID8/IG51bGwsXG4gIH1cblxuICBpZiAob3B0aW9ucy5pbmNsdWRlX2FpX3JldmlldyAmJiBvcHRpb25zLmRiKSB7XG4gICAgY29uc3QgcmV2aWV3cyA9IG9wdGlvbnMuZGJcbiAgICAgIC5saXN0QWlSZXZpZXdzKClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChyKSA9PlxuICAgICAgICAgIHIucGFja2FnZV9yZWxlYXNlX2lkID09PSBpbnRlcm5hbF9wYWNrYWdlX3JlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgKVxuICAgICAgLnNvcnQoXG4gICAgICAgIChhLCBiKSA9PlxuICAgICAgICAgIG5ldyBEYXRlKGIuY3JlYXRlZF9hdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYS5jcmVhdGVkX2F0KS5nZXRUaW1lKCksXG4gICAgICApXG5cbiAgICBpZiAocmV2aWV3cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBsYXRlc3QgPSByZXZpZXdzWzBdXG4gICAgICByZXN1bHQuYWlfcmV2aWV3X3RleHQgPSBsYXRlc3QuYWlfcmV2aWV3X3RleHQgPz8gbnVsbFxuICAgICAgcmVzdWx0LmFpX3Jldmlld19zdGFydGVkX2F0ID0gbGF0ZXN0LnN0YXJ0X3Byb2Nlc3NpbmdfYXQgPz8gbnVsbFxuICAgICAgcmVzdWx0LmFpX3Jldmlld19jb21wbGV0ZWRfYXQgPSBsYXRlc3QuZmluaXNoZWRfcHJvY2Vzc2luZ19hdCA/PyBudWxsXG4gICAgICByZXN1bHQuYWlfcmV2aWV3X2Vycm9yID0gbGF0ZXN0LnByb2Nlc3NpbmdfZXJyb3IgPz8gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8vIE9ubHkgaW5jbHVkZSBBSSByZXZpZXcgZmllbGRzIHdoZW4gaW5jbHVkZV9haV9yZXZpZXcgaXMgdHJ1ZVxuICBpZiAoIW9wdGlvbnMuaW5jbHVkZV9haV9yZXZpZXcpIHtcbiAgICBkZWxldGUgcmVzdWx0LmFpX3Jldmlld190ZXh0XG4gICAgZGVsZXRlIHJlc3VsdC5haV9yZXZpZXdfc3RhcnRlZF9hdFxuICAgIGRlbGV0ZSByZXN1bHQuYWlfcmV2aWV3X2NvbXBsZXRlZF9hdFxuICAgIGRlbGV0ZSByZXN1bHQuYWlfcmV2aWV3X2Vycm9yXG4gICAgZGVsZXRlIHJlc3VsdC5haV9yZXZpZXdfbG9nc1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuIiwgImltcG9ydCB7IHBhY2thZ2VSZWxlYXNlU2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHB1YmxpY01hcFBhY2thZ2VSZWxlYXNlIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9wdWJsaWMtbWFwcGluZy9wdWJsaWMtbWFwLXBhY2thZ2UtcmVsZWFzZVwiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBwYWNrYWdlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcGFja2FnZV9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgdmVyc2lvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGlzX2xhdGVzdDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBjb21taXRfc2hhOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICAgIHBhY2thZ2VfcmVsZWFzZTogcGFja2FnZVJlbGVhc2VTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGxldCB7XG4gICAgcGFja2FnZV9pZCxcbiAgICBwYWNrYWdlX25hbWUsXG4gICAgaXNfbGF0ZXN0ID0gdHJ1ZSxcbiAgICB2ZXJzaW9uLFxuICAgIGNvbW1pdF9zaGEsXG4gICAgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbixcbiAgfSA9IHJlcS5qc29uQm9keVxuXG4gIGlmIChwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uICYmICFwYWNrYWdlX2lkKSB7XG4gICAgY29uc3QgW3BhY2thZ2VOYW1lLCBwYXJzZWRWZXJzaW9uXSA9IHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24uc3BsaXQoXCJAXCIpXG4gICAgY29uc3QgcGtnID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gcGFja2FnZU5hbWUpXG5cbiAgICBpZiAoIXBrZykge1xuICAgICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX25vdF9mb3VuZFwiLFxuICAgICAgICBtZXNzYWdlOiBgUGFja2FnZSBub3QgZm91bmQ6ICR7cGFja2FnZU5hbWV9YCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcGFja2FnZV9pZCA9IHBrZy5wYWNrYWdlX2lkXG4gICAgdmVyc2lvbiA9IHBhcnNlZFZlcnNpb25cbiAgfVxuXG4gIGlmICghcGFja2FnZV9pZCAmJiBwYWNrYWdlX25hbWUpIHtcbiAgICBjb25zdCBwa2cgPSBjdHguZGIucGFja2FnZXMuZmluZCgocCkgPT4gcC5uYW1lID09PSBwYWNrYWdlX25hbWUpXG4gICAgaWYgKCFwa2cpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9ub3RfZm91bmRcIixcbiAgICAgICAgbWVzc2FnZTogYFBhY2thZ2Ugbm90IGZvdW5kOiAke3BhY2thZ2VfbmFtZX1gLFxuICAgICAgfSlcbiAgICB9XG4gICAgcGFja2FnZV9pZCA9IHBrZy5wYWNrYWdlX2lkXG4gIH1cblxuICBpZiAoIXBhY2thZ2VfaWQgfHwgIXZlcnNpb24pIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJtaXNzaW5nX29wdGlvbnNcIixcbiAgICAgIG1lc3NhZ2U6IFwicGFja2FnZV9pZCBvciBwYWNrYWdlX25hbWUgYW5kIHZlcnNpb24gYXJlIHJlcXVpcmVkXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHZlcnNpb24gYWxyZWFkeSBleGlzdHNcbiAgY29uc3QgZXhpc3RpbmdSZWxlYXNlID0gY3R4LmRiLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgIChwcikgPT4gcHIucGFja2FnZV9pZCA9PT0gcGFja2FnZV9pZCAmJiBwci52ZXJzaW9uID09PSB2ZXJzaW9uLFxuICApXG5cbiAgaWYgKGV4aXN0aW5nUmVsZWFzZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInZlcnNpb25fYWxyZWFkeV9leGlzdHNcIixcbiAgICAgIG1lc3NhZ2U6IGBWZXJzaW9uICR7dmVyc2lvbn0gYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgcGFja2FnZWAsXG4gICAgfSlcbiAgfVxuXG4gIC8vIFVwZGF0ZSBwcmV2aW91cyBsYXRlc3QgaWYgbmVlZGVkXG4gIGlmIChpc19sYXRlc3QpIHtcbiAgICBjdHguZGIucGFja2FnZVJlbGVhc2VzXG4gICAgICAuZmlsdGVyKChwcikgPT4gcHIucGFja2FnZV9pZCA9PT0gcGFja2FnZV9pZCAmJiBwci5pc19sYXRlc3QpXG4gICAgICAuZm9yRWFjaCgocHIpID0+IChwci5pc19sYXRlc3QgPSBmYWxzZSkpXG4gIH1cblxuICBjb25zdCBuZXdQYWNrYWdlUmVsZWFzZSA9IGN0eC5kYi5hZGRQYWNrYWdlUmVsZWFzZSh7XG4gICAgcGFja2FnZV9pZCxcbiAgICBpc19sYXRlc3QsXG4gICAgdmVyc2lvbixcbiAgICBpc19sb2NrZWQ6IGZhbHNlLFxuICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBjb21taXRfc2hhOiBjb21taXRfc2hhID8/IG51bGwsXG4gICAgY2lyY3VpdF9qc29uX2J1aWxkX2Vycm9yOiBudWxsLFxuICAgIGNpcmN1aXRfanNvbl9idWlsZF9lcnJvcl9sYXN0X3VwZGF0ZWRfYXQ6IG51bGwsXG4gICAgLy8gU2V0dGluZyB0aGUgdHJhbnNwaWxlZCBhcyB0cnVlIG9uIGNyZWF0aW9uXG4gICAgaGFzX3RyYW5zcGlsZWQ6IHRydWUsXG4gICAgdHJhbnNwaWxhdGlvbl9lcnJvcjogbnVsbCxcbiAgfSlcblxuICAvLyBVcGRhdGUgdGhlIHBhY2thZ2UncyBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkIGlmIHRoaXMgaXMgdGhlIGxhdGVzdCByZWxlYXNlXG4gIGlmIChpc19sYXRlc3QpIHtcbiAgICBjdHguZGIudXBkYXRlUGFja2FnZShwYWNrYWdlX2lkLCB7XG4gICAgICBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkOiBuZXdQYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgICBsYXRlc3RfdmVyc2lvbjogdmVyc2lvbixcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgICBwYWNrYWdlX3JlbGVhc2U6IHB1YmxpY01hcFBhY2thZ2VSZWxlYXNlKG5ld1BhY2thZ2VSZWxlYXNlLCB7IGRiOiBjdHguZGIgfSksXG4gIH0pXG59KVxuIiwgImltcG9ydCAqIGFzIHp0IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcbmltcG9ydCB7IHB1YmxpY01hcFBhY2thZ2VSZWxlYXNlIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9wdWJsaWMtbWFwcGluZy9wdWJsaWMtbWFwLXBhY2thZ2UtcmVsZWFzZVwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwibm9uZVwiLFxuICBjb21tb25QYXJhbXM6IHoub2JqZWN0KHtcbiAgICBpbmNsdWRlX2xvZ3M6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVmYXVsdChmYWxzZSksXG4gICAgaW5jbHVkZV9haV9yZXZpZXc6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVmYXVsdChmYWxzZSksXG4gIH0pLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBwYWNrYWdlX25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBwYWNrYWdlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaXNfbGF0ZXN0OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICAgIHBhY2thZ2VfcmVsZWFzZTogenQucGFja2FnZVJlbGVhc2VTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBwYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbixcbiAgICBwYWNrYWdlX25hbWUsXG4gICAgcGFja2FnZV9pZCxcbiAgICBpc19sYXRlc3QsXG4gIH0gPSByZXEuanNvbkJvZHlcblxuICAvLyBIYW5kbGUgcGFja2FnZV9uYW1lIHdpdGggaXNfbGF0ZXN0XG4gIGlmIChwYWNrYWdlX25hbWUgJiYgaXNfbGF0ZXN0ID09PSB0cnVlKSB7XG4gICAgY29uc3QgcGtnID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoKHgpID0+IHgubmFtZSA9PT0gcGFja2FnZV9uYW1lKVxuXG4gICAgaWYgKCFwa2cpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9ub3RfZm91bmRcIixcbiAgICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIG5vdCBmb3VuZFwiLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBTb3J0IHJlbGVhc2VzIGJ5IHZlcnNpb24gdG8gZmluZCB0aGUgbGF0ZXN0IG9uZVxuICAgIGNvbnN0IHBhY2thZ2VSZWxlYXNlcyA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXNcbiAgICAgIC5maWx0ZXIoKHgpID0+IHgucGFja2FnZV9pZCA9PT0gcGtnLnBhY2thZ2VfaWQpXG4gICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG5ldyBEYXRlKGIuY3JlYXRlZF9hdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYS5jcmVhdGVkX2F0KS5nZXRUaW1lKClcbiAgICAgICAgKVxuICAgICAgfSlcblxuICAgIGlmIChwYWNrYWdlUmVsZWFzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgICAgbWVzc2FnZTogXCJObyByZWxlYXNlcyBmb3VuZCBmb3IgdGhpcyBwYWNrYWdlXCIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBjdHguanNvbih7XG4gICAgICBvazogdHJ1ZSxcbiAgICAgIHBhY2thZ2VfcmVsZWFzZTogcHVibGljTWFwUGFja2FnZVJlbGVhc2UocGFja2FnZVJlbGVhc2VzWzBdLCB7XG4gICAgICAgIGluY2x1ZGVfYWlfcmV2aWV3OiByZXEuY29tbW9uUGFyYW1zPy5pbmNsdWRlX2FpX3JldmlldyxcbiAgICAgICAgZGI6IGN0eC5kYixcbiAgICAgIH0pLFxuICAgIH0pXG4gIH1cblxuICAvLyBIYW5kbGUgcGFja2FnZV9pZCB3aXRoIGlzX2xhdGVzdFxuICBpZiAocGFja2FnZV9pZCAmJiBpc19sYXRlc3QgPT09IHRydWUpIHtcbiAgICAvLyBTb3J0IHJlbGVhc2VzIGJ5IHZlcnNpb24gdG8gZmluZCB0aGUgbGF0ZXN0IG9uZVxuICAgIGNvbnN0IHBhY2thZ2VSZWxlYXNlcyA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXNcbiAgICAgIC5maWx0ZXIoKHgpID0+IHgucGFja2FnZV9pZCA9PT0gcGFja2FnZV9pZClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbmV3IERhdGUoYi5jcmVhdGVkX2F0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhLmNyZWF0ZWRfYXQpLmdldFRpbWUoKVxuICAgICAgICApXG4gICAgICB9KVxuXG4gICAgaWYgKHBhY2thZ2VSZWxlYXNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX25vdF9mb3VuZFwiLFxuICAgICAgICBtZXNzYWdlOiBcIk5vIHJlbGVhc2VzIGZvdW5kIGZvciB0aGlzIHBhY2thZ2VcIixcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICAgIG9rOiB0cnVlLFxuICAgICAgcGFja2FnZV9yZWxlYXNlOiBwdWJsaWNNYXBQYWNrYWdlUmVsZWFzZShwYWNrYWdlUmVsZWFzZXNbMF0sIHtcbiAgICAgICAgaW5jbHVkZV9haV9yZXZpZXc6IHJlcS5jb21tb25QYXJhbXM/LmluY2x1ZGVfYWlfcmV2aWV3LFxuICAgICAgICBkYjogY3R4LmRiLFxuICAgICAgfSksXG4gICAgfSlcbiAgfVxuXG4gIGlmIChwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uICYmICFwYWNrYWdlX3JlbGVhc2VfaWQpIHtcbiAgICBjb25zdCBbcGFja2FnZU5hbWUsIHBhcnNlZFZlcnNpb25dID0gcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbi5zcGxpdChcIkBcIilcbiAgICBjb25zdCBwa2cgPSBjdHguZGIucGFja2FnZXMuZmluZCgoeCkgPT4geC5uYW1lID09PSBwYWNrYWdlTmFtZSlcbiAgICBjb25zdCBwa2dSZWxlYXNlID0gY3R4LmRiLnBhY2thZ2VSZWxlYXNlcy5maW5kKCh4KSA9PiB7XG4gICAgICByZXR1cm4geC52ZXJzaW9uID09IHBhcnNlZFZlcnNpb24gJiYgeC5wYWNrYWdlX2lkID09IHBrZz8ucGFja2FnZV9pZFxuICAgIH0pXG5cbiAgICBpZiAoIXBrZ1JlbGVhc2UpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX25vdF9mb3VuZFwiLFxuICAgICAgICBtZXNzYWdlOiBcIlBhY2thZ2UgcmVsZWFzZSBub3QgZm91bmRcIixcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICAgIG9rOiB0cnVlLFxuICAgICAgcGFja2FnZV9yZWxlYXNlOiBwdWJsaWNNYXBQYWNrYWdlUmVsZWFzZShwa2dSZWxlYXNlLCB7XG4gICAgICAgIGluY2x1ZGVfYWlfcmV2aWV3OiByZXEuY29tbW9uUGFyYW1zPy5pbmNsdWRlX2FpX3JldmlldyxcbiAgICAgICAgZGI6IGN0eC5kYixcbiAgICAgIH0pLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBmb3VuZFJlbGVhc2UgPVxuICAgIHBhY2thZ2VfcmVsZWFzZV9pZCAmJiBjdHguZGIuZ2V0UGFja2FnZVJlbGVhc2VCeUlkKHBhY2thZ2VfcmVsZWFzZV9pZClcblxuICBpZiAoIWZvdW5kUmVsZWFzZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICAgIHBhY2thZ2VfcmVsZWFzZTogcHVibGljTWFwUGFja2FnZVJlbGVhc2UoZm91bmRSZWxlYXNlLCB7XG4gICAgICBpbmNsdWRlX2xvZ3M6IHJlcS5jb21tb25QYXJhbXM/LmluY2x1ZGVfbG9ncyxcbiAgICAgIGluY2x1ZGVfYWlfcmV2aWV3OiByZXEuY29tbW9uUGFyYW1zPy5pbmNsdWRlX2FpX3JldmlldyxcbiAgICAgIGRiOiBjdHguZGIsXG4gICAgfSksXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHBhY2thZ2VSZWxlYXNlU2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHB1YmxpY01hcFBhY2thZ2VSZWxlYXNlIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9wdWJsaWMtbWFwcGluZy9wdWJsaWMtbWFwLXBhY2thZ2UtcmVsZWFzZVwiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgaW5jbHVkZV9haV9yZXZpZXc6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVmYXVsdChmYWxzZSksXG4gIH0pLFxuICBqc29uQm9keTogelxuICAgIC5vYmplY3Qoe1xuICAgICAgcGFja2FnZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgcGFja2FnZV9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBpc19sYXRlc3Q6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgICB2ZXJzaW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBjb21taXRfc2hhOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAucmVmaW5lKCh7IHBhY2thZ2VfaWQsIHBhY2thZ2VfbmFtZSB9KSA9PiB7XG4gICAgICBpZiAocGFja2FnZV9pZCAmJiBwYWNrYWdlX25hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sIFwicGFja2FnZV9pZCBhbmQgcGFja2FnZV9uYW1lIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcIilcbiAgICAucmVmaW5lKCh7IHBhY2thZ2VfaWQsIHBhY2thZ2VfbmFtZSB9KSA9PiB7XG4gICAgICBpZiAoIXBhY2thZ2VfaWQgJiYgIXBhY2thZ2VfbmFtZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSwgXCJwYWNrYWdlX2lkIG9yIHBhY2thZ2VfbmFtZSBpcyByZXF1aXJlZFwiKSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICAgIHBhY2thZ2VfcmVsZWFzZXM6IHouYXJyYXkocGFja2FnZVJlbGVhc2VTY2hlbWEpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IHBhY2thZ2VfaWQsIHBhY2thZ2VfbmFtZSwgaXNfbGF0ZXN0LCB2ZXJzaW9uLCBjb21taXRfc2hhIH0gPVxuICAgIHJlcS5qc29uQm9keVxuXG4gIGlmICghcGFja2FnZV9pZCAmJiAhcGFja2FnZV9uYW1lICYmICFpc19sYXRlc3QgJiYgIXZlcnNpb24gJiYgIWNvbW1pdF9zaGEpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJpbnZhbGlkX3F1ZXJ5XCIsXG4gICAgICBtZXNzYWdlOlxuICAgICAgICBcIkF0IGxlYXN0IG9uZSBvZiBwYWNrYWdlX2lkLCBwYWNrYWdlX25hbWUsIGlzX2xhdGVzdCwgdmVyc2lvbiBvciBjb21taXRfc2hhIGlzIHJlcXVpcmVkXCIsXG4gICAgfSlcbiAgfVxuXG4gIGxldCByZWxlYXNlcyA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXNcblxuICAvLyBBcHBseSBmaWx0ZXJzXG4gIGlmIChwYWNrYWdlX2lkKSB7XG4gICAgcmVsZWFzZXMgPSByZWxlYXNlcy5maWx0ZXIoKHByKSA9PiBwci5wYWNrYWdlX2lkID09PSBwYWNrYWdlX2lkKVxuICB9XG5cbiAgaWYgKHBhY2thZ2VfbmFtZSkge1xuICAgIGNvbnN0IHBrZyA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKChwKSA9PiBwLm5hbWUgPT09IHBhY2thZ2VfbmFtZSlcbiAgICBpZiAocGtnKSB7XG4gICAgICByZWxlYXNlcyA9IHJlbGVhc2VzLmZpbHRlcigocHIpID0+IHByLnBhY2thZ2VfaWQgPT09IHBrZy5wYWNrYWdlX2lkKVxuICAgIH0gZWxzZSB7XG4gICAgICByZWxlYXNlcyA9IFtdXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzX2xhdGVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVsZWFzZXMgPSByZWxlYXNlcy5maWx0ZXIoKHByKSA9PiBwci5pc19sYXRlc3QgPT09IGlzX2xhdGVzdClcbiAgfVxuXG4gIGlmICh2ZXJzaW9uKSB7XG4gICAgcmVsZWFzZXMgPSByZWxlYXNlcy5maWx0ZXIoKHByKSA9PiBwci52ZXJzaW9uID09PSB2ZXJzaW9uKVxuICB9XG5cbiAgaWYgKGNvbW1pdF9zaGEpIHtcbiAgICByZWxlYXNlcyA9IHJlbGVhc2VzLmZpbHRlcigocHIpID0+IHByLmNvbW1pdF9zaGEgPT09IGNvbW1pdF9zaGEpXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICAgIHBhY2thZ2VfcmVsZWFzZXM6IHJlbGVhc2VzLm1hcCgocHIpID0+XG4gICAgICBwdWJsaWNNYXBQYWNrYWdlUmVsZWFzZShwciwge1xuICAgICAgICBpbmNsdWRlX2FpX3JldmlldzogcmVxLmNvbW1vblBhcmFtcz8uaW5jbHVkZV9haV9yZXZpZXcsXG4gICAgICAgIGRiOiBjdHguZGIsXG4gICAgICB9KSxcbiAgICApLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IERlYnVnIGZyb20gXCJkZWJ1Z1wiXG5cbmNvbnN0IGRlYnVnID0gRGVidWcoXCJmYWtlLXNuaXBwZXRzLWFwaTpyZWJ1aWxkLXBhY2thZ2VcIilcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogei5zdHJpbmcoKSxcbiAgICByZWJ1aWxkX3RyYW5zcGlsYXRpb246IHouYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG4gICAgcmVidWlsZF9jaXJjdWl0X2pzb246IHouYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgcGFja2FnZV9yZWxlYXNlX2lkLCByZWJ1aWxkX3RyYW5zcGlsYXRpb24sIHJlYnVpbGRfY2lyY3VpdF9qc29uIH0gPVxuICAgIHJlcS5qc29uQm9keVxuXG4gIC8vIEdldCB0aGUgcGFja2FnZSByZWxlYXNlIGluZm8gZm9yIGxvZ2dpbmdcbiAgY29uc3QgcmVsZWFzZSA9IGN0eC5kYi5nZXRQYWNrYWdlUmVsZWFzZUJ5SWQocGFja2FnZV9yZWxlYXNlX2lkKVxuXG4gIGlmICghcmVsZWFzZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBwYWNrYWdlSW5mbyA9IGN0eC5kYi5nZXRQYWNrYWdlQnlJZChyZWxlYXNlLnBhY2thZ2VfaWQpXG5cbiAgaWYgKCFwYWNrYWdlSW5mbykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlBhY2thZ2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGlmIChwYWNrYWdlSW5mby5vd25lcl9vcmdfaWQgIT09IGN0eC5hdXRoLnBlcnNvbmFsX29yZ19pZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImZvcmJpZGRlblwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byByZWJ1aWxkIHRoaXMgcGFja2FnZSByZWxlYXNlXCIsXG4gICAgfSlcbiAgfVxuXG4gIGRlYnVnKFxuICAgIGBSZWJ1aWxkaW5nIHBhY2thZ2UgcmVsZWFzZSAke3BhY2thZ2VfcmVsZWFzZV9pZH0gZm9yICR7cGFja2FnZUluZm8ubmFtZX1AJHtyZWxlYXNlLnZlcnNpb259YCxcbiAgKVxuXG4gIC8vIFRyaWdnZXIgdHJhbnNwaWxhdGlvbiBpZiByZXF1ZXN0ZWRcbiAgaWYgKHJlYnVpbGRfdHJhbnNwaWxhdGlvbikge1xuICAgIGRlYnVnKFwiUmVzZXR0aW5nIHRyYW5zcGlsYXRpb24gc3RhdGVcIilcbiAgfVxuXG4gIC8vIFNldCBjaXJjdWl0IEpTT04gYnVpbGQgc3RhdGUgdG8gcGVuZGluZyBmb3Igd29ya2VyIHBpY2t1cCBpZiByZXF1ZXN0ZWRcbiAgaWYgKHJlYnVpbGRfY2lyY3VpdF9qc29uKSB7XG4gICAgZGVidWcoXCJSZXNldHRpbmcgY2lyY3VpdCBKU09OIGJ1aWxkIHN0YXRlXCIpXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJub25lXCIsXG4gIGpzb25Cb2R5OiB6Lm9iamVjdCh7XG4gICAgcGFja2FnZV9yZWxlYXNlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGlzX2xvY2tlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBpc19sYXRlc3Q6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgbGljZW5zZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGZzX3NoYTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHJlYWR5X3RvX2J1aWxkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIGFpX3Jldmlld19yZXF1ZXN0ZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBwYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgcGFja2FnZV9uYW1lX3dpdGhfdmVyc2lvbixcbiAgICBpc19sb2NrZWQsXG4gICAgaXNfbGF0ZXN0LFxuICAgIGxpY2Vuc2UsXG4gICAgZnNfc2hhLFxuICAgIHJlYWR5X3RvX2J1aWxkLFxuICAgIGFpX3Jldmlld19yZXF1ZXN0ZWQsXG4gIH0gPSByZXEuanNvbkJvZHlcbiAgbGV0IHJlbGVhc2VJZCA9IHBhY2thZ2VfcmVsZWFzZV9pZFxuXG4gIC8vIEhhbmRsZSBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uIGxvb2t1cFxuICBpZiAoIXJlbGVhc2VJZCAmJiBwYWNrYWdlX25hbWVfd2l0aF92ZXJzaW9uKSB7XG4gICAgY29uc3QgW3BhY2thZ2VOYW1lLCB2ZXJzaW9uXSA9IHBhY2thZ2VfbmFtZV93aXRoX3ZlcnNpb24uc3BsaXQoXCJAXCIpXG4gICAgY29uc3QgcGtnID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gcGFja2FnZU5hbWUpXG4gICAgaWYgKHBrZykge1xuICAgICAgY29uc3QgcmVsZWFzZSA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAgICAgKHByKSA9PiBwci5wYWNrYWdlX2lkID09PSBwa2cucGFja2FnZV9pZCAmJiBwci52ZXJzaW9uID09PSB2ZXJzaW9uLFxuICAgICAgKVxuICAgICAgaWYgKHJlbGVhc2UpIHtcbiAgICAgICAgcmVsZWFzZUlkID0gcmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIXJlbGVhc2VJZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBkZWx0YSA9IHtcbiAgICBpc19sb2NrZWQsXG4gICAgaXNfbGF0ZXN0LFxuICAgIGxpY2Vuc2UsXG4gICAgZnNfc2hhLFxuICAgIHJlYWR5X3RvX2J1aWxkLFxuICAgIGFpX3Jldmlld19yZXF1ZXN0ZWQsXG4gIH1cbiAgaWYgKFxuICAgIE9iamVjdC5rZXlzKGRlbHRhKS5maWx0ZXIoXG4gICAgICAoaykgPT4gZGVsdGFbayBhcyBrZXlvZiB0eXBlb2YgZGVsdGFdICE9PSB1bmRlZmluZWQsXG4gICAgKS5sZW5ndGggPT09IDBcbiAgKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwibm9fZmllbGRzX3Byb3ZpZGVkXCIsXG4gICAgICBtZXNzYWdlOiBcIk5vIGZpZWxkcyBwcm92aWRlZCB0byB1cGRhdGVcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgcmVsZWFzZSA9IGN0eC5kYi5wYWNrYWdlUmVsZWFzZXMuZmluZChcbiAgICAocHIpID0+IHByLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gcmVsZWFzZUlkLFxuICApXG4gIGlmICghcmVsZWFzZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSByZWxlYXNlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDcmVhdGUgdXBkYXRlZCByZWxlYXNlIG9iamVjdFxuICBjb25zdCB1cGRhdGVkUmVsZWFzZSA9IHtcbiAgICAuLi5yZWxlYXNlLFxuICAgIC4uLihpc19sb2NrZWQgIT09IHVuZGVmaW5lZCAmJiB7IGlzX2xvY2tlZCB9KSxcbiAgICAuLi4oaXNfbGF0ZXN0ICE9PSB1bmRlZmluZWQgJiYgeyBpc19sYXRlc3QgfSksXG4gICAgLi4uKGxpY2Vuc2UgIT09IHVuZGVmaW5lZCAmJiB7IGxpY2Vuc2UgfSksXG4gICAgLi4uKGZzX3NoYSAhPT0gdW5kZWZpbmVkICYmIHsgZnNfc2hhIH0pLFxuICAgIC4uLihyZWFkeV90b19idWlsZCAhPT0gdW5kZWZpbmVkICYmIHsgcmVhZHlfdG9fYnVpbGQgfSksXG4gICAgLi4uKGFpX3Jldmlld19yZXF1ZXN0ZWQgIT09IHVuZGVmaW5lZCAmJiB7IGFpX3Jldmlld19yZXF1ZXN0ZWQgfSksXG4gICAgLi4uKGFpX3Jldmlld19yZXF1ZXN0ZWQgPT09IHRydWUgJiYge1xuICAgICAgYWlfcmV2aWV3X3RleHQ6IFwiUGxhY2Vob2xkZXIgQUkgUmV2aWV3IFRleHRcIixcbiAgICB9KSxcbiAgfVxuXG4gIC8vIEhhbmRsZSBpc19sYXRlc3QgdXBkYXRlcyBhdG9taWNhbGx5XG4gIGlmIChpc19sYXRlc3QgIT09IHVuZGVmaW5lZCAmJiBpc19sYXRlc3QpIHtcbiAgICAvLyBHZXQgYWxsIHJlbGVhc2VzIGZvciB0aGlzIHBhY2thZ2UgdGhhdCBhcmUgY3VycmVudGx5IG1hcmtlZCBhcyBsYXRlc3RcbiAgICBjb25zdCBvdGhlckxhdGVzdFJlbGVhc2VzID0gY3R4LmRiLnBhY2thZ2VSZWxlYXNlcy5maWx0ZXIoXG4gICAgICAocHIpID0+XG4gICAgICAgIHByLnBhY2thZ2VfaWQgPT09IHJlbGVhc2UucGFja2FnZV9pZCAmJlxuICAgICAgICBwci5wYWNrYWdlX3JlbGVhc2VfaWQgIT09IHJlbGVhc2VJZCAmJlxuICAgICAgICBwci5pc19sYXRlc3QsXG4gICAgKVxuXG4gICAgLy8gVXBkYXRlIGFsbCByZWxlYXNlcyBpbiBhIHNpbmdsZSBvcGVyYXRpb25cbiAgICBmb3IgKGNvbnN0IGxhdGVzdFJlbGVhc2Ugb2Ygb3RoZXJMYXRlc3RSZWxlYXNlcykge1xuICAgICAgY3R4LmRiLnVwZGF0ZVBhY2thZ2VSZWxlYXNlKHtcbiAgICAgICAgLi4ubGF0ZXN0UmVsZWFzZSxcbiAgICAgICAgaXNfbGF0ZXN0OiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIHRoZSB0YXJnZXQgcmVsZWFzZVxuICBjdHguZGIudXBkYXRlUGFja2FnZVJlbGVhc2UodXBkYXRlZFJlbGVhc2UpXG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogelxuICAgIC5vYmplY3Qoe1xuICAgICAgcGFja2FnZV9pZDogei5zdHJpbmcoKSxcbiAgICB9KVxuICAgIC5vcih6Lm9iamVjdCh7IG5hbWU6IHouc3RyaW5nKCkgfSkpLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGxldCBwYWNrYWdlSWQ6IHN0cmluZ1xuXG4gIC8vIEdldCBwYWNrYWdlIElEIGVpdGhlciBkaXJlY3RseSBvciBieSBuYW1lXG4gIGlmIChcInBhY2thZ2VfaWRcIiBpbiByZXEuanNvbkJvZHkpIHtcbiAgICBjb25zdCBib2R5ID0gcmVxLmpzb25Cb2R5XG4gICAgcGFja2FnZUlkID0gYm9keS5wYWNrYWdlX2lkXG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgbmFtZSBpcyBwcm92aWRlZCwgbG9vayB1cCB0aGUgcGFja2FnZV9pZFxuICAgIGNvbnN0IGJvZHkgPSByZXEuanNvbkJvZHlcbiAgICBjb25zdCBwYWNrYWdlRGF0YSA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKChwa2cpID0+IHBrZy5uYW1lID09PSBib2R5Lm5hbWUpXG5cbiAgICBpZiAoIXBhY2thZ2VEYXRhKSB7XG4gICAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2Vfbm90X2ZvdW5kXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSBub3QgZm91bmRcIixcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcGFja2FnZUlkID0gcGFja2FnZURhdGEucGFja2FnZV9pZFxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgcGFja2FnZSBleGlzdHMgKGV4dHJhIGNoZWNrIGZvciBJRC1iYXNlZCBsb29rdXApXG4gIGNvbnN0IHBrZyA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKChwKSA9PiBwLnBhY2thZ2VfaWQgPT09IHBhY2thZ2VJZClcblxuICBpZiAoIXBrZykge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlBhY2thZ2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGFscmVhZHkgc3RhcnJlZFxuICBjb25zdCBleGlzdGluZyA9IGN0eC5kYi5hY2NvdW50UGFja2FnZXMuZmluZChcbiAgICAoYXApID0+XG4gICAgICBhcC5hY2NvdW50X2lkID09PSBjdHguYXV0aC5hY2NvdW50X2lkICYmIGFwLnBhY2thZ2VfaWQgPT09IHBhY2thZ2VJZCxcbiAgKVxuXG4gIGlmIChleGlzdGluZz8uaXNfc3RhcnJlZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImFscmVhZHlfc3RhcnJlZFwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgaGF2ZSBhbHJlYWR5IHN0YXJyZWQgdGhpcyBwYWNrYWdlXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIFVwZGF0ZSB0aGUgcGFja2FnZSdzIHN0YXIgY291bnRcbiAgcGtnLnN0YXJfY291bnQgPSAocGtnLnN0YXJfY291bnQgfHwgMCkgKyAxXG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgLy8gSWYgcmVjb3JkIGV4aXN0cyBidXQgaXNfc3RhcnJlZCBpcyBmYWxzZSwgdXBkYXRlIHRvIGlzX3N0YXJyZWQ9dHJ1ZVxuICAgIGV4aXN0aW5nLmlzX3N0YXJyZWQgPSB0cnVlXG4gICAgZXhpc3RpbmcudXBkYXRlZF9hdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICB9IGVsc2Uge1xuICAgIC8vIEFkZCBzdGFyIGJ5IGNyZWF0aW5nIGEgbmV3IGFjY291bnRfcGFja2FnZSByZWNvcmRcbiAgICBjb25zdCBuZXdUaW1lc3RhbXAgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICBjb25zdCBuZXdBY2NvdW50UGFja2FnZSA9IHtcbiAgICAgIGFjY291bnRfcGFja2FnZV9pZDogYGFwXyR7RGF0ZS5ub3coKX1gLFxuICAgICAgYWNjb3VudF9pZDogY3R4LmF1dGguYWNjb3VudF9pZCxcbiAgICAgIHBhY2thZ2VfaWQ6IHBhY2thZ2VJZCxcbiAgICAgIGlzX3N0YXJyZWQ6IHRydWUsXG4gICAgICBjcmVhdGVkX2F0OiBuZXdUaW1lc3RhbXAsXG4gICAgICB1cGRhdGVkX2F0OiBuZXdUaW1lc3RhbXAsXG4gICAgfVxuICAgIGN0eC5kYi5hZGRBY2NvdW50UGFja2FnZShuZXdBY2NvdW50UGFja2FnZSlcbiAgfVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb2s6IHRydWUsXG4gIH0pXG59KVxuIiwgImltcG9ydCB0eXBlICogYXMgenQgZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuXG5leHBvcnQgY29uc3QgcHVibGljTWFwUGFja2FnZSA9IChpbnRlcm5hbFBhY2thZ2U6IHtcbiAgcGFja2FnZV9pZDogc3RyaW5nXG4gIGNyZWF0b3JfYWNjb3VudF9pZDogc3RyaW5nXG4gIG93bmVyX29yZ19pZDogc3RyaW5nXG4gIG93bmVyX2dpdGh1Yl91c2VybmFtZTogc3RyaW5nIHwgbnVsbFxuICBpc19zb3VyY2VfZnJvbV9naXRodWI6IGJvb2xlYW5cbiAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGxcbiAgbGF0ZXN0X3ZlcnNpb24/OiBzdHJpbmcgfCBudWxsXG4gIGxhdGVzdF9saWNlbnNlPzogc3RyaW5nIHwgbnVsbFxuICBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkPzogc3RyaW5nIHwgbnVsbFxuICBzdGFyX2NvdW50PzogbnVtYmVyIHwgbnVsbFxuICBuYW1lOiBzdHJpbmdcbiAgd2Vic2l0ZTogc3RyaW5nIHwgbnVsbFxuICB1bnNjb3BlZF9uYW1lOiBzdHJpbmdcbiAgdXBkYXRlZF9hdDogc3RyaW5nXG4gIGNyZWF0ZWRfYXQ6IHN0cmluZ1xuICBhaV9kZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbFxuICBhaV91c2FnZV9pbnN0cnVjdGlvbnM6IHN0cmluZyB8IG51bGxcbiAgaXNfc25pcHBldDogYm9vbGVhblxuICBpc19ib2FyZDogYm9vbGVhblxuICBpc19wYWNrYWdlOiBib29sZWFuXG4gIGlzX21vZGVsOiBib29sZWFuXG4gIGlzX2Zvb3RwcmludDogYm9vbGVhblxuICBpc19wcml2YXRlOiBib29sZWFuIHwgbnVsbFxuICBpc191bmxpc3RlZDogYm9vbGVhbiB8IG51bGxcbiAgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9mc19zaGE6IHN0cmluZyB8IG51bGxcbiAgZ2l0aHViX3JlcG9fZnVsbF9uYW1lPzogc3RyaW5nIHwgbnVsbFxuICBhbGxvd19wcl9wcmV2aWV3cz86IGJvb2xlYW5cbiAgbGF0ZXN0X3BjYl9wcmV2aWV3X2ltYWdlX3VybD86IHN0cmluZyB8IG51bGxcbiAgbGF0ZXN0X3NjaF9wcmV2aWV3X2ltYWdlX3VybD86IHN0cmluZyB8IG51bGxcbiAgbGF0ZXN0X2NhZF9wcmV2aWV3X2ltYWdlX3VybD86IHN0cmluZyB8IG51bGxcbn0pOiB6dC5QYWNrYWdlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5pbnRlcm5hbFBhY2thZ2UsXG4gICAgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZDpcbiAgICAgIGludGVybmFsUGFja2FnZS5sYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkID8/IG51bGwsXG4gICAgbGF0ZXN0X3ZlcnNpb246IGludGVybmFsUGFja2FnZS5sYXRlc3RfdmVyc2lvbiA/PyBudWxsLFxuICAgIGxpY2Vuc2U6IGludGVybmFsUGFja2FnZS5sYXRlc3RfbGljZW5zZSA/PyBudWxsLFxuICAgIHdlYnNpdGU6IGludGVybmFsUGFja2FnZS53ZWJzaXRlID8/IG51bGwsXG4gICAgc3Rhcl9jb3VudDogaW50ZXJuYWxQYWNrYWdlLnN0YXJfY291bnQgPz8gMCxcbiAgICBjcmVhdGVkX2F0OiBpbnRlcm5hbFBhY2thZ2UuY3JlYXRlZF9hdCxcbiAgICB1cGRhdGVkX2F0OiBpbnRlcm5hbFBhY2thZ2UudXBkYXRlZF9hdCxcbiAgICBnaXRodWJfcmVwb19mdWxsX25hbWU6IGludGVybmFsUGFja2FnZS5naXRodWJfcmVwb19mdWxsX25hbWUgPz8gbnVsbCxcbiAgICBpc19wcml2YXRlOiBpbnRlcm5hbFBhY2thZ2UuaXNfcHJpdmF0ZSA/PyBmYWxzZSxcbiAgICBpc19wdWJsaWM6IGludGVybmFsUGFja2FnZS5pc19wcml2YXRlID09PSB0cnVlID8gZmFsc2UgOiB0cnVlLFxuICAgIGlzX3VubGlzdGVkOlxuICAgICAgaW50ZXJuYWxQYWNrYWdlLmlzX3ByaXZhdGUgPT09IHRydWVcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogKGludGVybmFsUGFja2FnZS5pc191bmxpc3RlZCA/PyBmYWxzZSksXG4gICAgYWxsb3dfcHJfcHJldmlld3M6IEJvb2xlYW4oaW50ZXJuYWxQYWNrYWdlLmFsbG93X3ByX3ByZXZpZXdzKSxcbiAgICBsYXRlc3RfcGNiX3ByZXZpZXdfaW1hZ2VfdXJsOlxuICAgICAgaW50ZXJuYWxQYWNrYWdlLmxhdGVzdF9wY2JfcHJldmlld19pbWFnZV91cmwgPz8gbnVsbCxcbiAgICBsYXRlc3Rfc2NoX3ByZXZpZXdfaW1hZ2VfdXJsOlxuICAgICAgaW50ZXJuYWxQYWNrYWdlLmxhdGVzdF9zY2hfcHJldmlld19pbWFnZV91cmwgPz8gbnVsbCxcbiAgICBsYXRlc3RfY2FkX3ByZXZpZXdfaW1hZ2VfdXJsOlxuICAgICAgaW50ZXJuYWxQYWNrYWdlLmxhdGVzdF9jYWRfcHJldmlld19pbWFnZV91cmwgPz8gbnVsbCxcbiAgfVxufVxuIiwgImltcG9ydCB7IHBhY2thZ2VTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgcHVibGljTWFwUGFja2FnZSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcHVibGljLW1hcHBpbmcvcHVibGljLW1hcC1wYWNrYWdlXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIG5hbWU6IHpcbiAgICAgIC5zdHJpbmcoKVxuICAgICAgLnJlZ2V4KFxuICAgICAgICAvXltAYS16QS1aMC05LV9cXC9dKyQvLFxuICAgICAgICBcIlBhY2thZ2UgbmFtZSBjYW4gb25seSBjb250YWluIGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBhbmQgZm9yd2FyZCBzbGFzaGVzXCIsXG4gICAgICApXG4gICAgICAudHJhbnNmb3JtKChuYW1lKSA9PiBuYW1lLnJlcGxhY2UoL15ALywgXCJcIikpXG4gICAgICAub3B0aW9uYWwoKSxcbiAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGlzX3ByaXZhdGU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVmYXVsdChmYWxzZSksXG4gICAgaXNfdW5saXN0ZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVmYXVsdChmYWxzZSksXG4gICAgb3JnX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBwYWNrYWdlOiBwYWNrYWdlU2NoZW1hLm9wdGlvbmFsKCksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgbmFtZSwgZGVzY3JpcHRpb24sIGlzX3ByaXZhdGUsIGlzX3VubGlzdGVkLCBvcmdfaWQgfSA9IHJlcS5qc29uQm9keVxuICBsZXQgb3duZXJfc2VnbWVudCA9IG5hbWU/LnNwbGl0KFwiL1wiKVswXVxuICBsZXQgdW5zY29wZWRfbmFtZSA9IG5hbWU/LnNwbGl0KFwiL1wiKVsxXVxuXG4gIGlmIChuYW1lICYmICF1bnNjb3BlZF9uYW1lKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiaW52YWxpZF9wYWNrYWdlX25hbWVcIixcbiAgICAgIG1lc3NhZ2U6XG4gICAgICAgIFwiUGFja2FnZSBuYW1lIG11c3QgaW5jbHVkZSBhbiBhdXRob3Igc2VnbWVudCAoZS5nLiBhdXRob3IvcGFja2FnZV9uYW1lKVwiLFxuICAgIH0pXG4gIH1cbiAgY29uc3Qgb3JnID0gY3R4LmRiLmdldE9yZyh7IG9yZ19pZCB9KVxuICBpZiAoQm9vbGVhbihvcmdfaWQpICYmICFCb29sZWFuKG9yZykpXG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwib3JnX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJPcmdhbml6YXRpb24gbm90IGZvdW5kXCIsXG4gICAgfSlcblxuICBpZiAoIXVuc2NvcGVkX25hbWUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGN0eC5kYi5nZXRTdGF0ZSgpXG5cbiAgICBjb25zdCBjb3VudCA9IG9yZ19pZFxuICAgICAgPyBzdGF0ZS5wYWNrYWdlcy5maWx0ZXIoKHBrZykgPT4gcGtnLm93bmVyX29yZ19pZCA9PT0gb3JnX2lkKS5sZW5ndGhcbiAgICAgIDogc3RhdGUucGFja2FnZXMuZmlsdGVyKFxuICAgICAgICAgIChwa2cpID0+IHBrZy5jcmVhdG9yX2FjY291bnRfaWQgPT09IGN0eC5hdXRoLmFjY291bnRfaWQsXG4gICAgICAgICkubGVuZ3RoXG5cbiAgICB1bnNjb3BlZF9uYW1lID0gYHVudGl0bGVkLXBhY2thZ2UtJHtjb3VudH1gXG4gIH1cblxuICBpZiAoIW93bmVyX3NlZ21lbnQpIHtcbiAgICBvd25lcl9zZWdtZW50ID0gb3JnX2lkXG4gICAgICA/IChvcmchLnRzY2lyY3VpdF9oYW5kbGUgPz8gdW5kZWZpbmVkKVxuICAgICAgOiAoY3R4LmF1dGgudHNjaXJjdWl0X2hhbmRsZSA/PyB1bmRlZmluZWQpXG4gIH1cblxuICBpZiAoIW93bmVyX3NlZ21lbnQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJtaXNzaW5nX293bmVyX3NlZ21lbnRcIixcbiAgICAgIG1lc3NhZ2U6IFwiT3duZXIgc2VnbWVudCBpcyByZXF1aXJlZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBmaW5hbF9uYW1lID0gbmFtZSA/PyBgJHtvd25lcl9zZWdtZW50fS8ke3Vuc2NvcGVkX25hbWV9YFxuXG4gIGNvbnN0IHJlcXVlc3RlZF9vd25lcl9sb3dlciA9IG93bmVyX3NlZ21lbnQudG9Mb3dlckNhc2UoKVxuICBjb25zdCBwZXJzb25hbF9vd25lcl9sb3dlciA9IGN0eC5hdXRoLmdpdGh1Yl91c2VybmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgbGV0IG93bmVyX29yZ19pZCA9IGN0eC5hdXRoLnBlcnNvbmFsX29yZ19pZFxuICBsZXQgb3duZXJfZ2l0aHViX3VzZXJuYW1lID0gY3R4LmF1dGguZ2l0aHViX3VzZXJuYW1lXG5cbiAgaWYgKHJlcXVlc3RlZF9vd25lcl9sb3dlciAhPT0gcGVyc29uYWxfb3duZXJfbG93ZXIpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGN0eC5kYi5nZXRTdGF0ZSgpXG4gICAgY29uc3QgbWVtYmVyT3JnID0gc3RhdGUub3JnQWNjb3VudHNcbiAgICAgIC5maWx0ZXIoKG9hKSA9PiBvYS5hY2NvdW50X2lkID09PSBjdHguYXV0aC5hY2NvdW50X2lkKVxuICAgICAgLm1hcCgob2EpID0+IHN0YXRlLm9yZ2FuaXphdGlvbnMuZmluZCgobykgPT4gby5vcmdfaWQgPT09IG9hLm9yZ19pZCkpXG4gICAgICAuZmlsdGVyKChvKTogbyBpcyBOb25OdWxsYWJsZTx0eXBlb2Ygbz4gPT4gbyAhPT0gdW5kZWZpbmVkKVxuICAgICAgLmZpbmQoKG8pID0+IG8udHNjaXJjdWl0X2hhbmRsZT8udG9Mb3dlckNhc2UoKSA9PT0gcmVxdWVzdGVkX293bmVyX2xvd2VyKVxuXG4gICAgaWYgKCFtZW1iZXJPcmcpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwiZm9yYmlkZGVuXCIsXG4gICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgXCJZb3UgbXVzdCBiZSBhIG1lbWJlciBvZiB0aGUgb3JnYW5pemF0aW9uIHRvIGNyZWF0ZSBhIHBhY2thZ2UgdW5kZXIgaXRcIixcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgb3duZXJfb3JnX2lkID0gbWVtYmVyT3JnLm9yZ19pZFxuICAgIG93bmVyX2dpdGh1Yl91c2VybmFtZSA9XG4gICAgICBtZW1iZXJPcmcuZ2l0aHViX2hhbmRsZSA/PyBtZW1iZXJPcmcudHNjaXJjdWl0X2hhbmRsZSA/PyBcIlwiXG4gIH1cblxuICBjb25zdCBleGlzdGluZ1BhY2thZ2UgPSBjdHguZGJcbiAgICAuZ2V0U3RhdGUoKVxuICAgIC5wYWNrYWdlcy5maW5kKChwa2cpID0+IHBrZy5uYW1lID09PSBmaW5hbF9uYW1lKVxuXG4gIGlmIChleGlzdGluZ1BhY2thZ2UpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX2FscmVhZHlfZXhpc3RzXCIsXG4gICAgICBtZXNzYWdlOiBcIkEgcGFja2FnZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0c1wiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBuZXdQYWNrYWdlID0gY3R4LmRiLmFkZFBhY2thZ2Uoe1xuICAgIG5hbWU6IGZpbmFsX25hbWUsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uID8/IG51bGwsXG4gICAgY3JlYXRvcl9hY2NvdW50X2lkOiBjdHguYXV0aC5hY2NvdW50X2lkLFxuICAgIG93bmVyX29yZ19pZCxcbiAgICBvd25lcl9naXRodWJfdXNlcm5hbWUsXG4gICAgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZDogbnVsbCxcbiAgICBsYXRlc3RfcGFja2FnZV9yZWxlYXNlX2ZzX3NoYTogbnVsbCxcbiAgICBsYXRlc3RfdmVyc2lvbjogbnVsbCxcbiAgICBsaWNlbnNlOiBudWxsLFxuICAgIHdlYnNpdGU6IG51bGwsXG4gICAgaXNfc291cmNlX2Zyb21fZ2l0aHViOiBmYWxzZSxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHVuc2NvcGVkX25hbWUsXG4gICAgc3Rhcl9jb3VudDogMCxcbiAgICBhaV9kZXNjcmlwdGlvbjogXCJwbGFjZWhvbGRlciBhaSBkZXNjcmlwdGlvblwiLFxuICAgIGlzX3ByaXZhdGU6IGlzX3ByaXZhdGUgPz8gZmFsc2UsXG4gICAgaXNfcHVibGljOiBpc19wcml2YXRlID09PSB0cnVlID8gZmFsc2UgOiB0cnVlLFxuICAgIGlzX3VubGlzdGVkOiBpc19wcml2YXRlID09PSB0cnVlID8gdHJ1ZSA6IChpc191bmxpc3RlZCA/PyBmYWxzZSksXG4gICAgYWlfdXNhZ2VfaW5zdHJ1Y3Rpb25zOiBcInBsYWNlaG9sZGVyIGFpIHVzYWdlIGluc3RydWN0aW9uc1wiLFxuICAgIGRlZmF1bHRfdmlldzogXCJmaWxlc1wiLFxuICB9KVxuXG4gIGlmICghbmV3UGFja2FnZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgcGFja2FnZVwiKVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBwYWNrYWdlOiBwdWJsaWNNYXBQYWNrYWdlKG5ld1BhY2thZ2UpLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25Cb2R5OiB6Lm9iamVjdCh7XG4gICAgcGFja2FnZV9pZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBwYWNrYWdlX2lkIH0gPSByZXEuanNvbkJvZHlcblxuICBjb25zdCBwYWNrYWdlSW5kZXggPSBjdHguZGIucGFja2FnZXMuZmluZEluZGV4KFxuICAgIChwKSA9PiBwLnBhY2thZ2VfaWQgPT09IHBhY2thZ2VfaWQsXG4gIClcblxuICBpZiAocGFja2FnZUluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlBhY2thZ2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHBrZyA9IGN0eC5kYi5wYWNrYWdlc1twYWNrYWdlSW5kZXhdXG5cbiAgaWYgKHBrZy5vd25lcl9naXRodWJfdXNlcm5hbWUgIT09IGN0eC5hdXRoLmdpdGh1Yl91c2VybmFtZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImZvcmJpZGRlblwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGRlbGV0ZSB0aGlzIHBhY2thZ2VcIixcbiAgICB9KVxuICB9XG5cbiAgY3R4LmRiLnBhY2thZ2VzLnNwbGljZShwYWNrYWdlSW5kZXgsIDEpXG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgcGFja2FnZVNjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcbmltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyBwdWJsaWNNYXBQYWNrYWdlIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9wdWJsaWMtbWFwcGluZy9wdWJsaWMtbWFwLXBhY2thZ2VcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25Cb2R5OiB6XG4gICAgLm9iamVjdCh7XG4gICAgICAvLyBBY2NlcHQgZWl0aGVyIHBhY2thZ2VfaWQgb3IgcGFja2FnZV9uYW1lIHRvIGZpbmQgdGhlIHBhY2thZ2UgdG8gZm9ya1xuICAgICAgcGFja2FnZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgcGFja2FnZV9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAvLyBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGN1c3RvbWl6ZSB0aGUgZm9ya2VkIHBhY2thZ2VcbiAgICAgIGlzX3ByaXZhdGU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVmYXVsdChmYWxzZSksXG4gICAgICBpc191bmxpc3RlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKS5kZWZhdWx0KGZhbHNlKSxcbiAgICB9KVxuICAgIC5yZWZpbmUoXG4gICAgICAoZGF0YSkgPT5cbiAgICAgICAgZGF0YS5wYWNrYWdlX2lkICE9PSB1bmRlZmluZWQgfHwgZGF0YS5wYWNrYWdlX25hbWUgIT09IHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgbWVzc2FnZTogXCJFaXRoZXIgcGFja2FnZV9pZCBvciBwYWNrYWdlX25hbWUgbXVzdCBiZSBwcm92aWRlZFwiLFxuICAgICAgfSxcbiAgICApXG4gICAgLnRyYW5zZm9ybSgoZGF0YSkgPT4gKHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICAvLyBJZiB0aGUgcGFja2FnZSBpcyBwcml2YXRlLCBpdCBzaG91bGQgYmUgdW5saXN0ZWRcbiAgICAgIGlzX3VubGlzdGVkOiBkYXRhLmlzX3ByaXZhdGUgPyB0cnVlIDogZGF0YS5pc191bmxpc3RlZCxcbiAgICB9KSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIHBhY2thZ2U6IHBhY2thZ2VTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHsgcGFja2FnZV9pZCwgcGFja2FnZV9uYW1lLCBpc19wcml2YXRlLCBpc191bmxpc3RlZCB9ID0gcmVxLmpzb25Cb2R5XG5cbiAgLy8gRmluZCB0aGUgcGFja2FnZSB0byBmb3JrXG4gIGxldCBzb3VyY2VQYWNrYWdlID0gbnVsbFxuICBpZiAocGFja2FnZV9pZCkge1xuICAgIHNvdXJjZVBhY2thZ2UgPSBjdHguZGIucGFja2FnZXMuZmluZCgocGtnKSA9PiBwa2cucGFja2FnZV9pZCA9PT0gcGFja2FnZV9pZClcbiAgfSBlbHNlIGlmIChwYWNrYWdlX25hbWUpIHtcbiAgICBzb3VyY2VQYWNrYWdlID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoKHBrZykgPT4gcGtnLm5hbWUgPT09IHBhY2thZ2VfbmFtZSlcbiAgfVxuXG4gIGlmICghc291cmNlUGFja2FnZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlRoZSBwYWNrYWdlIHRvIGZvcmsgd2FzIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBpZiAoc291cmNlUGFja2FnZS5jcmVhdG9yX2FjY291bnRfaWQgPT09IGN0eC5hdXRoLmFjY291bnRfaWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJjYW5ub3RfZm9ya19vd25fcGFja2FnZVwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgY2Fubm90IGZvcmsgeW91ciBvd24gcGFja2FnZVwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDaGVjayBpZiBmb3JrIGFscmVhZHkgZXhpc3RzICh1c2VyIGFscmVhZHkgaGFzIGEgcGFja2FnZSB3aXRoIHRoZSBzYW1lIG5hbWUpXG4gIGNvbnN0IGZvcmtOYW1lID0gYCR7Y3R4LmF1dGguZ2l0aHViX3VzZXJuYW1lfS8ke3NvdXJjZVBhY2thZ2UudW5zY29wZWRfbmFtZX1gXG4gIGNvbnN0IGV4aXN0aW5nRm9yayA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKFxuICAgIChwa2cpID0+XG4gICAgICBwa2cuY3JlYXRvcl9hY2NvdW50X2lkID09PSBjdHguYXV0aC5hY2NvdW50X2lkICYmIHBrZy5uYW1lID09PSBmb3JrTmFtZSxcbiAgKVxuXG4gIGlmIChleGlzdGluZ0ZvcmspIHtcbiAgICByZXR1cm4gY3R4Lmpzb24oe1xuICAgICAgcGFja2FnZTogcHVibGljTWFwUGFja2FnZShleGlzdGluZ0ZvcmspLFxuICAgIH0pXG4gIH1cblxuICAvLyBGaW5kIHRoZSBsYXRlc3QgcmVsZWFzZSBvZiB0aGUgc291cmNlIHBhY2thZ2VcbiAgY29uc3Qgc291cmNlUGFja2FnZVJlbGVhc2UgPSBjdHguZGIucGFja2FnZVJlbGVhc2VzLmZpbmQoXG4gICAgKHJlbGVhc2UpID0+XG4gICAgICByZWxlYXNlLnBhY2thZ2VfaWQgPT09IHNvdXJjZVBhY2thZ2UucGFja2FnZV9pZCAmJlxuICAgICAgcmVsZWFzZS5pc19sYXRlc3QgPT09IHRydWUsXG4gIClcblxuICBpZiAoIXNvdXJjZVBhY2thZ2VSZWxlYXNlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwic291cmNlX3BhY2thZ2VfcmVsZWFzZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiVGhlIHNvdXJjZSBwYWNrYWdlIGRvZXMgbm90IGhhdmUgYW55IHJlbGVhc2VzIHRvIGZvcmtcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gR2V0IHRoZSBmaWxlcyBmcm9tIHRoZSBzb3VyY2UgcGFja2FnZSByZWxlYXNlXG4gIGNvbnN0IHNvdXJjZUZpbGVzID0gY3R4LmRiLnBhY2thZ2VGaWxlcy5maWx0ZXIoXG4gICAgKGZpbGUpID0+XG4gICAgICBmaWxlLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gc291cmNlUGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICApXG5cbiAgaWYgKHNvdXJjZUZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInNvdXJjZV9wYWNrYWdlX2ZpbGVzX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJUaGUgc291cmNlIHBhY2thZ2UgcmVsZWFzZSBkb2VzIG5vdCBoYXZlIGFueSBmaWxlcyB0byBmb3JrXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENyZWF0ZSB0aGUgZm9ya2VkIHBhY2thZ2VcbiAgY29uc3QgZm9ya2VkUGFja2FnZSA9IGN0eC5kYi5hZGRQYWNrYWdlKHtcbiAgICBuYW1lOiBmb3JrTmFtZSxcbiAgICBkZXNjcmlwdGlvbjogc291cmNlUGFja2FnZS5kZXNjcmlwdGlvbixcbiAgICBjcmVhdG9yX2FjY291bnRfaWQ6IGN0eC5hdXRoLmFjY291bnRfaWQsXG4gICAgb3duZXJfb3JnX2lkOiBjdHguYXV0aC5wZXJzb25hbF9vcmdfaWQsXG4gICAgb3duZXJfZ2l0aHViX3VzZXJuYW1lOiBjdHguYXV0aC5naXRodWJfdXNlcm5hbWUsXG4gICAgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZDogbnVsbCxcbiAgICBsYXRlc3RfdmVyc2lvbjogbnVsbCxcbiAgICBsaWNlbnNlOiBudWxsLFxuICAgIHdlYnNpdGU6IG51bGwsXG4gICAgaXNfc291cmNlX2Zyb21fZ2l0aHViOiBmYWxzZSxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHVuc2NvcGVkX25hbWU6IHNvdXJjZVBhY2thZ2UudW5zY29wZWRfbmFtZSxcbiAgICBzdGFyX2NvdW50OiAwLFxuICAgIGFpX2Rlc2NyaXB0aW9uOiBzb3VyY2VQYWNrYWdlLmFpX2Rlc2NyaXB0aW9uIHx8IFwiZm9ya2VkIHBhY2thZ2VcIixcbiAgICBpc19wcml2YXRlOiBpc19wcml2YXRlLFxuICAgIGlzX3B1YmxpYzogIWlzX3ByaXZhdGUsXG4gICAgaXNfdW5saXN0ZWQsXG4gICAgYWlfdXNhZ2VfaW5zdHJ1Y3Rpb25zOiBcImZvcmtlZCBwYWNrYWdlIHVzYWdlXCIsXG4gICAgaXNfYm9hcmQ6IEJvb2xlYW4oc291cmNlUGFja2FnZS5pc19ib2FyZCksXG4gICAgaXNfcGFja2FnZTogdHJ1ZSxcbiAgICBpc19tb2RlbDogQm9vbGVhbihzb3VyY2VQYWNrYWdlLmlzX21vZGVsKSxcbiAgICBpc19mb290cHJpbnQ6IEJvb2xlYW4oc291cmNlUGFja2FnZS5pc19mb290cHJpbnQpLFxuICAgIGlzX3NuaXBwZXQ6IEJvb2xlYW4oc291cmNlUGFja2FnZS5pc19zbmlwcGV0KSxcbiAgfSlcblxuICBpZiAoIWZvcmtlZFBhY2thZ2UpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDUwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJmYWlsZWRfdG9fY3JlYXRlX2ZvcmtlZF9wYWNrYWdlXCIsXG4gICAgICBtZXNzYWdlOiBcIkZhaWxlZCB0byBjcmVhdGUgZm9ya2VkIHBhY2thZ2VcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gQ3JlYXRlIGEgbmV3IHBhY2thZ2UgcmVsZWFzZSBmb3IgdGhlIGZvcmtlZCBwYWNrYWdlXG4gIGNvbnN0IGZvcmtlZFBhY2thZ2VSZWxlYXNlID0gY3R4LmRiLmFkZFBhY2thZ2VSZWxlYXNlKHtcbiAgICBwYWNrYWdlX2lkOiBmb3JrZWRQYWNrYWdlLnBhY2thZ2VfaWQsXG4gICAgdmVyc2lvbjogc291cmNlUGFja2FnZVJlbGVhc2UudmVyc2lvbixcbiAgICBpc19sb2NrZWQ6IGZhbHNlLFxuICAgIGlzX2xhdGVzdDogdHJ1ZSxcbiAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgY29tbWl0X3NoYTogbnVsbCxcbiAgICBsaWNlbnNlOiBzb3VyY2VQYWNrYWdlUmVsZWFzZS5saWNlbnNlIHx8IG51bGwsXG4gICAgLy8gU2V0dGluZyB0aGUgdHJhbnNwaWxlZCBhcyB0cnVlIG9uIGNyZWF0aW9uXG4gICAgaGFzX3RyYW5zcGlsZWQ6IHRydWUsXG4gICAgdHJhbnNwaWxhdGlvbl9lcnJvcjogbnVsbCxcbiAgfSlcblxuICAvLyBVcGRhdGUgdGhlIGZvcmtlZCBwYWNrYWdlIHdpdGggcmVsZWFzZSBpbmZvXG4gIGZvcmtlZFBhY2thZ2UubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCA9XG4gICAgZm9ya2VkUGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkXG4gIGZvcmtlZFBhY2thZ2UubGF0ZXN0X3ZlcnNpb24gPSBmb3JrZWRQYWNrYWdlUmVsZWFzZS52ZXJzaW9uIHx8IG51bGxcblxuICAvLyBDb3B5IGFsbCBmaWxlcyBmcm9tIHRoZSBzb3VyY2UgcGFja2FnZSByZWxlYXNlIHRvIHRoZSBmb3JrZWQgcGFja2FnZSByZWxlYXNlXG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBzb3VyY2VGaWxlcykge1xuICAgIGN0eC5kYi5hZGRQYWNrYWdlRmlsZSh7XG4gICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IGZvcmtlZFBhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgIGZpbGVfcGF0aDogc291cmNlRmlsZS5maWxlX3BhdGgsXG4gICAgICBjb250ZW50X3RleHQ6IHNvdXJjZUZpbGUuY29udGVudF90ZXh0LFxuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIHBhY2thZ2U6IHB1YmxpY01hcFBhY2thZ2UoZm9ya2VkUGFja2FnZSksXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHBhY2thZ2VTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgcHVibGljTWFwUGFja2FnZSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvcHVibGljLW1hcHBpbmcvcHVibGljLW1hcC1wYWNrYWdlXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiLCBcIlBPU1RcIl0sXG4gIGF1dGg6IFwib3B0aW9uYWxfc2Vzc2lvblwiLFxuICBjb21tb25QYXJhbXM6IHoub2JqZWN0KHtcbiAgICBwYWNrYWdlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSxcbiAganNvbkJvZHk6IHouYW55KCkub3B0aW9uYWwoKSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICAgIHBhY2thZ2U6IHBhY2thZ2VTY2hlbWFcbiAgICAgIC5leHRlbmQoe1xuICAgICAgICBpc19zdGFycmVkOiB6LmJvb2xlYW4oKSxcbiAgICAgICAgdXNlcl9wZXJtaXNzaW9uczogelxuICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgY2FuX21hbmFnZV9wYWNrYWdlczogei5ib29sZWFuKCksXG4gICAgICAgICAgfSlcbiAgICAgICAgICAub3B0aW9uYWwoKSxcbiAgICAgIH0pXG4gICAgICAub3B0aW9uYWwoKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBwYWNrYWdlX2lkLCBuYW1lIH0gPSByZXEuY29tbW9uUGFyYW1zXG4gIGNvbnN0IGF1dGggPSBcImF1dGhcIiBpbiBjdHggJiYgY3R4LmF1dGggPyBjdHguYXV0aCA6IG51bGxcblxuICBjb25zdCBmb3VuZFBhY2thZ2UgPVxuICAgIChwYWNrYWdlX2lkICYmIGN0eC5kYi5nZXRQYWNrYWdlQnlJZChwYWNrYWdlX2lkKSkgfHxcbiAgICBjdHguZGIucGFja2FnZXMuZmluZCgocCkgPT4gcC5uYW1lID09PSBuYW1lKVxuXG4gIGlmICghZm91bmRQYWNrYWdlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IGBQYWNrYWdlIG5vdCBmb3VuZCAoc2VhcmNoZWQgdXNpbmcgJHtKU09OLnN0cmluZ2lmeShyZXEuY29tbW9uUGFyYW1zKX0pYCxcbiAgICB9KVxuICB9XG5cbiAgaWYgKFxuICAgIGZvdW5kUGFja2FnZS5pc19wcml2YXRlICYmXG4gICAgYXV0aD8uZ2l0aHViX3VzZXJuYW1lICE9PSBmb3VuZFBhY2thZ2Uub3duZXJfZ2l0aHViX3VzZXJuYW1lXG4gICkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBgUGFja2FnZSBub3QgZm91bmQgKHNlYXJjaGVkIHVzaW5nICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHJlcS5jb21tb25QYXJhbXMsXG4gICAgICApfSlgLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBvd25lck9yZyA9IGN0eC5kYi5nZXRPcmcoeyBvcmdfaWQ6IGZvdW5kUGFja2FnZS5vd25lcl9vcmdfaWQgfSlcblxuICBjb25zdCBjYW5NYW5hZ2VQYWNrYWdlID1cbiAgICBhdXRoICYmXG4gICAgY3R4LmRiXG4gICAgICAuZ2V0U3RhdGUoKVxuICAgICAgLm9yZ0FjY291bnRzLnNvbWUoXG4gICAgICAgIChvcmdfYWNjb3VudCkgPT5cbiAgICAgICAgICBvcmdfYWNjb3VudC5hY2NvdW50X2lkID09PSBhdXRoLmFjY291bnRfaWQgJiZcbiAgICAgICAgICBvcmdfYWNjb3VudC5vcmdfaWQgPT09IGZvdW5kUGFja2FnZS5vd25lcl9vcmdfaWQsXG4gICAgICApXG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgICBwYWNrYWdlOiB7XG4gICAgICAuLi5wdWJsaWNNYXBQYWNrYWdlKGZvdW5kUGFja2FnZSksXG4gICAgICBpc19zdGFycmVkOiBhdXRoXG4gICAgICAgID8gY3R4LmRiLmhhc1N0YXJyZWQoYXV0aC5hY2NvdW50X2lkLCBmb3VuZFBhY2thZ2UucGFja2FnZV9pZClcbiAgICAgICAgOiBmYWxzZSxcbiAgICAgIG9yZ19vd25lcl90c2NpcmN1aXRfaGFuZGxlOiBvd25lck9yZz8udHNjaXJjdWl0X2hhbmRsZSA/PyBudWxsLFxuICAgICAgLi4uKGF1dGhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB1c2VyX3Blcm1pc3Npb25zOiB7XG4gICAgICAgICAgICAgIGNhbl9tYW5hZ2VfcGFja2FnZXM6IGNhbk1hbmFnZVBhY2thZ2UgPz8gZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgQW55Q2lyY3VpdEVsZW1lbnQgfSBmcm9tIFwiY2lyY3VpdC1qc29uXCJcbmltcG9ydCB7XG4gIGNvbnZlcnRDaXJjdWl0SnNvblRvQXNzZW1ibHlTdmcsXG4gIGNvbnZlcnRDaXJjdWl0SnNvblRvUGNiU3ZnLFxuICBjb252ZXJ0Q2lyY3VpdEpzb25Ub1NjaGVtYXRpY1N2Zyxcbn0gZnJvbSBcImNpcmN1aXQtdG8tc3ZnXCJcbmltcG9ydCB7IGNvbnZlcnRDaXJjdWl0SnNvblRvU2ltcGxlM2RTdmcgfSBmcm9tIFwiY2lyY3VpdC1qc29uLXRvLXNpbXBsZS0zZFwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcmVuZGVyQXN5bmMgfSBmcm9tIFwiQHJlc3ZnL3Jlc3ZnLWpzXCJcblxuLy8gRGVmaW5lIHRoZSB2aWV3IHR5cGVzIGFuZCBleHRlbnNpb25zXG5jb25zdCBWSUVXX1RZUEVTID0gW1wic2NoZW1hdGljXCIsIFwicGNiXCIsIFwiYXNzZW1ibHlcIiwgXCIzZFwiXSBhcyBjb25zdFxuY29uc3QgRVhURU5TSU9OUyA9IFtcInN2Z1wiLCBcInBuZ1wiXSBhcyBjb25zdFxuXG4vLyBDcmVhdGUgYSByZWdleCBwYXR0ZXJuIGZvciB0aGUgdmlldyBmb3JtYXQgdGhhdCBpbmNsdWRlcyBvcHRpb25hbCB3aWR0aCBzdWZmaXhcbmNvbnN0IHZpZXdGb3JtYXRQYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgYF4oJHtWSUVXX1RZUEVTLmpvaW4oXCJ8XCIpfSktPyhcXFxcZCt3KT9cXFxcLigke0VYVEVOU0lPTlMuam9pbihcInxcIil9KSRgLFxuKVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAgcm91dGVQYXJhbXM6IHoub2JqZWN0KHtcbiAgICBvd25lcl9naXRodWJfdXNlcm5hbWU6IHouc3RyaW5nKCksXG4gICAgdW5zY29wZWRfbmFtZTogei5zdHJpbmcoKSxcbiAgICB2aWV3X2Zvcm1hdDogei5zdHJpbmcoKS5yZWdleCh2aWV3Rm9ybWF0UGF0dGVybiwge1xuICAgICAgbWVzc2FnZTogYEludmFsaWQgdmlldyBmb3JtYXQuIE11c3QgYmUgb25lIG9mOiAke1ZJRVdfVFlQRVMuam9pbihcIiwgXCIpfSB3aXRoIG9wdGlvbmFsIHdpZHRoIHN1ZmZpeCAoZS5nLiAtODAwdykuJHtFWFRFTlNJT05TLmpvaW4oXCIgb3IgXCIpfWAsXG4gICAgfSksXG4gIH0pLFxuICBxdWVyeVBhcmFtczogei5vYmplY3Qoe1xuICAgIGZzX3NoYTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSxcbiAgcmF3UmVzcG9uc2U6IHRydWUsXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBvd25lcl9naXRodWJfdXNlcm5hbWUsIHVuc2NvcGVkX25hbWUsIHZpZXdfZm9ybWF0IH0gPSByZXEucm91dGVQYXJhbXNcbiAgY29uc3QgeyBmc19zaGEgfSA9IHJlcS5xdWVyeVxuXG4gIC8vIFBhcnNlIHRoZSB2aWV3IGZvcm1hdFxuICBjb25zdCBbb3V0cHV0VHlwZSwgZm9ybWF0XSA9IHZpZXdfZm9ybWF0LnNwbGl0KFwiLlwiKVxuXG4gIC8vIEdldCB0aGUgcGFja2FnZVxuICBjb25zdCBwa2cgPSBjdHguZGIucGFja2FnZXMuZmluZChcbiAgICAocCkgPT5cbiAgICAgIHAub3duZXJfZ2l0aHViX3VzZXJuYW1lID09PSBvd25lcl9naXRodWJfdXNlcm5hbWUgJiZcbiAgICAgIHAudW5zY29wZWRfbmFtZSA9PT0gdW5zY29wZWRfbmFtZSxcbiAgKVxuXG4gIC8vIElmIHBhY2thZ2UgaXMgbm90IGZvdW5kLCByZXR1cm4gNDA0XG4gIGlmICghcGtnKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gR2V0IHRoZSBwYWNrYWdlIHJlbGVhc2UgZm9yIHRoZSBnaXZlbiBoYXNoIHZhbHVlXG4gIGNvbnN0IHBrZ19yZWxlYXNlID0gY3R4LmRiLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgIChwcikgPT4gcHIucGFja2FnZV9pZCA9PT0gcGtnLnBhY2thZ2VfaWQgJiYgcHIuZnNfc2hhID09PSBmc19zaGEsXG4gIClcblxuICBpZiAoIXBrZ19yZWxlYXNlKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9yZWxlYXNlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIHJlbGVhc2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIEdldCB0aGUgY2lyY3VpdCBKU09OIGZyb20gdGhlIHBhY2thZ2UgZmlsZXNcbiAgY29uc3QgY2lyY3VpdF9qc29uX2ZpbGUgPSBjdHguZGIucGFja2FnZUZpbGVzLmZpbmQoXG4gICAgKHBmKSA9PlxuICAgICAgcGYucGFja2FnZV9yZWxlYXNlX2lkID09PSBwa2dfcmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQgJiZcbiAgICAgIChwZi5maWxlX3BhdGggPT09IFwiY2lyY3VpdC5qc29uXCIgfHxcbiAgICAgICAgcGYuZmlsZV9wYXRoID09PSBcIi9kaXN0L2NpcmN1aXQuanNvblwiKSxcbiAgKVxuXG4gIGlmICghY2lyY3VpdF9qc29uX2ZpbGU/LmNvbnRlbnRfdGV4dCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImNpcmN1aXRfanNvbl9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiQ2lyY3VpdCBKU09OIG5vdCBmb3VuZCBmb3IgcGFja2FnZVwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjaXJjdWl0X2pzb24gPSBKU09OLnBhcnNlKGNpcmN1aXRfanNvbl9maWxlLmNvbnRlbnRfdGV4dClcblxuICAvLyBDb252ZXJ0IGNpcmN1aXQganNvbiB0byBzdmdcbiAgbGV0IHN2ZyA9IFwiXCJcbiAgaWYgKG91dHB1dFR5cGUgPT09IFwic2NoZW1hdGljXCIpIHtcbiAgICBzdmcgPSBjb252ZXJ0Q2lyY3VpdEpzb25Ub1NjaGVtYXRpY1N2ZyhjaXJjdWl0X2pzb24gYXMgQW55Q2lyY3VpdEVsZW1lbnRbXSlcbiAgfSBlbHNlIGlmIChvdXRwdXRUeXBlID09PSBcInBjYlwiKSB7XG4gICAgc3ZnID0gY29udmVydENpcmN1aXRKc29uVG9QY2JTdmcoY2lyY3VpdF9qc29uIGFzIEFueUNpcmN1aXRFbGVtZW50W10pXG4gIH0gZWxzZSBpZiAob3V0cHV0VHlwZSA9PT0gXCJhc3NlbWJseVwiKSB7XG4gICAgc3ZnID0gY29udmVydENpcmN1aXRKc29uVG9Bc3NlbWJseVN2ZyhjaXJjdWl0X2pzb24gYXMgQW55Q2lyY3VpdEVsZW1lbnRbXSlcbiAgfSBlbHNlIGlmIChvdXRwdXRUeXBlID09PSBcIjNkXCIpIHtcbiAgICBzdmcgPSBhd2FpdCBjb252ZXJ0Q2lyY3VpdEpzb25Ub1NpbXBsZTNkU3ZnKGNpcmN1aXRfanNvbiwge1xuICAgICAgYmFja2dyb3VuZDoge1xuICAgICAgICBjb2xvcjogXCIjZmZmXCIsXG4gICAgICAgIG9wYWNpdHk6IDAuMCxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0Wm9vbU11bHRpcGxpZXI6IDEuMSxcbiAgICB9KVxuICB9XG4gIGlmIChmb3JtYXQgPT09IFwic3ZnXCIpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHN2Zywge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImltYWdlL3N2Zyt4bWxcIixcbiAgICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwicHVibGljLCBtYXgtYWdlPTg2NDAwLCBzLW1heGFnZT04NjQwMFwiLFxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgcG5nQnVmZmVyID0gYXdhaXQgcmVuZGVyQXN5bmMoc3ZnKVxuICByZXR1cm4gbmV3IFJlc3BvbnNlKHBuZ0J1ZmZlci5hc1BuZygpLmJ1ZmZlciBhcyBBcnJheUJ1ZmZlciwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiaW1hZ2UvcG5nXCIsXG4gICAgICBcIkNhY2hlLUNvbnRyb2xcIjogXCJwdWJsaWMsIG1heC1hZ2U9ODY0MDAsIHMtbWF4YWdlPTg2NDAwXCIsXG4gICAgfSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHBhY2thZ2VTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyBwdWJsaWNNYXBQYWNrYWdlIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9wdWJsaWMtbWFwcGluZy9wdWJsaWMtbWFwLXBhY2thZ2VcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAgcXVlcnlQYXJhbXM6IHoub2JqZWN0KHtcbiAgICBsaW1pdDogei5zdHJpbmcoKS5yZWdleCgvXlxcZCskLykudHJhbnNmb3JtKE51bWJlcikub3B0aW9uYWwoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIHBhY2thZ2VzOiB6LmFycmF5KHBhY2thZ2VTY2hlbWEpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCBsaW1pdCA9IHJlcS5xdWVyeS5saW1pdCB8fCA1MFxuXG4gIC8vIEdldCBhbGwgcGFja2FnZXMgdGhhdCBhcmUgbm90IHNuaXBwZXRzXG4gIGNvbnN0IHBhY2thZ2VzID0gY3R4LmRiLnBhY2thZ2VzXG4gICAgLmZpbHRlcigocGtnKSA9PiAhcGtnLmlzX3NuaXBwZXQpXG4gICAgLnNvcnQoXG4gICAgICAoYSwgYikgPT5cbiAgICAgICAgbmV3IERhdGUoYi5jcmVhdGVkX2F0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhLmNyZWF0ZWRfYXQpLmdldFRpbWUoKSxcbiAgICApXG4gICAgLnNsaWNlKDAsIGxpbWl0KVxuICAgIC5tYXAoKHBrZykgPT4gcHVibGljTWFwUGFja2FnZShwa2cpKVxuXG4gIHJldHVybiBjdHguanNvbih7IHBhY2thZ2VzIH0pXG59KVxuIiwgImltcG9ydCB7IHBhY2thZ2VTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCIsIFwiUE9TVFwiXSxcbiAgYXV0aDogXCJub25lXCIsXG4gIGNvbW1vblBhcmFtczogei5vYmplY3Qoe30pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gICAgcGFja2FnZXM6IHouYXJyYXkocGFja2FnZVNjaGVtYSksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIC8vIEdldCBhbGwgcGFja2FnZXMgYW5kIHRoZWlyIHN0YXIgY291bnRzXG4gIGNvbnN0IHBhY2thZ2VzV2l0aFN0YXJzID0gY3R4LmRiLnBhY2thZ2VzLm1hcCgocGtnKSA9PiB7XG4gICAgY29uc3Qgc3RhckNvdW50ID0gY3R4LmRiLmFjY291bnRQYWNrYWdlcy5maWx0ZXIoXG4gICAgICAoYXApID0+IGFwLnBhY2thZ2VfaWQgPT09IHBrZy5wYWNrYWdlX2lkICYmIGFwLmlzX3N0YXJyZWQsXG4gICAgKS5sZW5ndGhcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wa2csXG4gICAgICBzdGFyX2NvdW50OiBzdGFyQ291bnQsXG4gICAgfVxuICB9KVxuXG4gIC8vIEZpbHRlciBvdXQgcGFja2FnZXMgd2l0aCBubyBzdGFycyBhbmQgc29ydCBieSBzdGFyIGNvdW50XG4gIGNvbnN0IHRyZW5kaW5nUGFja2FnZXMgPSBjdHguZGIucGFja2FnZXNcbiAgICAuZmlsdGVyKChwKSA9PiBwLnN0YXJfY291bnQgPiAwKVxuICAgIC5zb3J0KChhLCBiKSA9PiBiLnN0YXJfY291bnQgLSBhLnN0YXJfY291bnQpXG4gICAgLnNsaWNlKDAsIDUwKVxuXG4gIC8vIFJhbmRvbWl6ZSB0aGUgb3JkZXIgb2YgdGhlIHBhY2thZ2VzLCB0aGVuIHBpY2sgdGhlIGZpcnN0IDEwXG4gIGNvbnN0IHJhbmRvbWl6ZWRQYWNrYWdlcyA9IHRyZW5kaW5nUGFja2FnZXMuc29ydCgoKSA9PiBNYXRoLnJhbmRvbSgpIC0gMC41KVxuICBjb25zdCBzZWxlY3RlZFBhY2thZ2VzID0gcmFuZG9taXplZFBhY2thZ2VzLnNsaWNlKDAsIDEwKVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb2s6IHRydWUsXG4gICAgcGFja2FnZXM6IHNlbGVjdGVkUGFja2FnZXMubWFwKChwKSA9PiAoe1xuICAgICAgLi4ucCxcbiAgICAgIGxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQ6IHAubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCB8fCBudWxsLFxuICAgIH0pKSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgcGFja2FnZVNjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcbmltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIiwgXCJQT1NUXCJdLFxuICBhdXRoOiBcIm9wdGlvbmFsX3Nlc3Npb25cIixcbiAgY29tbW9uUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgY3JlYXRvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgb3duZXJfZ2l0aHViX3VzZXJuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgb3duZXJfdHNjaXJjdWl0X2hhbmRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGlzX3dyaXRhYmxlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIG93bmVyX29yZ19pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBsaW1pdDogei5udW1iZXIoKS5pbnQoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgICBwYWNrYWdlczogei5hcnJheShcbiAgICAgIHBhY2thZ2VTY2hlbWEuZXh0ZW5kKHtcbiAgICAgICAgc3RhcnJlZF9hdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgICAgICB1c2VyX3Blcm1pc3Npb25zOiB6XG4gICAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgICBjYW5fbWFuYWdlX3BhY2thZ2VzOiB6LmJvb2xlYW4oKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5vcHRpb25hbCgpLFxuICAgICAgfSksXG4gICAgKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3Qge1xuICAgIGNyZWF0b3JfYWNjb3VudF9pZCxcbiAgICBvd25lcl9naXRodWJfdXNlcm5hbWUsXG4gICAgb3duZXJfdHNjaXJjdWl0X2hhbmRsZSxcbiAgICBuYW1lLFxuICAgIGlzX3dyaXRhYmxlLFxuICAgIG93bmVyX29yZ19pZCxcbiAgICBsaW1pdCxcbiAgfSA9IHJlcS5jb21tb25QYXJhbXNcblxuICBjb25zdCBhdXRoID0gXCJhdXRoXCIgaW4gY3R4ICYmIGN0eC5hdXRoID8gY3R4LmF1dGggOiBudWxsXG5cbiAgaWYgKFxuICAgICFhdXRoICYmXG4gICAgIWlzX3dyaXRhYmxlICYmXG4gICAgIWNyZWF0b3JfYWNjb3VudF9pZCAmJlxuICAgICFvd25lcl9naXRodWJfdXNlcm5hbWUgJiZcbiAgICAhb3duZXJfdHNjaXJjdWl0X2hhbmRsZSAmJlxuICAgICFvd25lcl9vcmdfaWRcbiAgKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiaW52YWxpZF9yZXF1ZXN0XCIsXG4gICAgICBtZXNzYWdlOiBcIllvdSBtdXN0IHByb3ZpZGUgc29tZSBmaWx0ZXJpbmcgcGFyYW1ldGVycyBvciBiZSBsb2dnZWQgaW5cIixcbiAgICB9KVxuICB9XG5cbiAgLy8gSGVscGVyIHRvIGNoZWNrIGlmIHVzZXIgY2FuIG1hbmFnZSBhIHBhY2thZ2VcbiAgY29uc3QgY2FuTWFuYWdlUGFja2FnZSA9IChwa2c6IGFueSkgPT4ge1xuICAgIGlmICghYXV0aCkgcmV0dXJuIGZhbHNlXG4gICAgLy8gQ2hlY2sgaWYgdXNlciBpcyBhIG1lbWJlciBvZiB0aGUgcGFja2FnZSdzIG93bmVyIG9yZ1xuICAgIGNvbnN0IHN0YXRlID0gY3R4LmRiLmdldFN0YXRlKClcbiAgICByZXR1cm4gc3RhdGUub3JnQWNjb3VudHMuc29tZShcbiAgICAgIChvYSkgPT5cbiAgICAgICAgb2EuYWNjb3VudF9pZCA9PT0gYXV0aC5hY2NvdW50X2lkICYmIG9hLm9yZ19pZCA9PT0gcGtnLm93bmVyX29yZ19pZCxcbiAgICApXG4gIH1cblxuICBsZXQgcGFja2FnZXMgPSBjdHguZGIucGFja2FnZXNcblxuICAvLyBBcHBseSBmaWx0ZXJzXG4gIGlmIChjcmVhdG9yX2FjY291bnRfaWQpIHtcbiAgICBwYWNrYWdlcyA9IHBhY2thZ2VzLmZpbHRlcihcbiAgICAgIChwKSA9PiBwLmNyZWF0b3JfYWNjb3VudF9pZCA9PT0gY3JlYXRvcl9hY2NvdW50X2lkLFxuICAgIClcbiAgfVxuICBpZiAob3duZXJfZ2l0aHViX3VzZXJuYW1lKSB7XG4gICAgcGFja2FnZXMgPSBwYWNrYWdlcy5maWx0ZXIoXG4gICAgICAocCkgPT4gcC5vd25lcl9naXRodWJfdXNlcm5hbWUgPT09IG93bmVyX2dpdGh1Yl91c2VybmFtZSxcbiAgICApXG4gIH1cbiAgaWYgKG93bmVyX3RzY2lyY3VpdF9oYW5kbGUpIHtcbiAgICBjb25zdCBvcmcgPSBjdHguZGIub3JnYW5pemF0aW9ucy5maW5kKFxuICAgICAgKG8pID0+IG8udHNjaXJjdWl0X2hhbmRsZSA9PT0gb3duZXJfdHNjaXJjdWl0X2hhbmRsZSxcbiAgICApXG4gICAgaWYgKG9yZykge1xuICAgICAgcGFja2FnZXMgPSBwYWNrYWdlcy5maWx0ZXIoKHApID0+IHAub3duZXJfb3JnX2lkID09PSBvcmcub3JnX2lkKVxuICAgIH1cbiAgfVxuICBpZiAobmFtZSkge1xuICAgIHBhY2thZ2VzID0gcGFja2FnZXMuZmlsdGVyKChwKSA9PiBwLm5hbWUgPT09IG5hbWUpXG4gIH1cbiAgaWYgKG93bmVyX29yZ19pZCkge1xuICAgIHBhY2thZ2VzID0gcGFja2FnZXMuZmlsdGVyKChwKSA9PiBwLm93bmVyX29yZ19pZCA9PT0gb3duZXJfb3JnX2lkKVxuICB9XG4gIGlmIChsaW1pdCkge1xuICAgIHBhY2thZ2VzID0gcGFja2FnZXMuc2xpY2UoMCwgbGltaXQpXG4gIH1cbiAgaWYgKGlzX3dyaXRhYmxlICYmIGF1dGgpIHtcbiAgICBwYWNrYWdlcyA9IHBhY2thZ2VzLmZpbHRlcihjYW5NYW5hZ2VQYWNrYWdlKVxuICB9XG5cbiAgLy8gR2V0IHN0YXIgdGltZXN0YW1wcyBmb3IgYXV0aGVudGljYXRlZCB1c2VyXG4gIGNvbnN0IHN0YXJUaW1lc3RhbXBzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKVxuICBpZiAoYXV0aCkge1xuICAgIGN0eC5kYi5hY2NvdW50UGFja2FnZXNcbiAgICAgIC5maWx0ZXIoKGFwKSA9PiBhcC5hY2NvdW50X2lkID09PSBhdXRoLmFjY291bnRfaWQgJiYgYXAuaXNfc3RhcnJlZClcbiAgICAgIC5mb3JFYWNoKChhcCkgPT4ge1xuICAgICAgICBzdGFyVGltZXN0YW1wcy5zZXQoYXAucGFja2FnZV9pZCwgYXAudXBkYXRlZF9hdClcbiAgICAgIH0pXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICAgIHBhY2thZ2VzOiBwYWNrYWdlcy5tYXAoKHApID0+ICh7XG4gICAgICAuLi5wLFxuICAgICAgbGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZDogcC5sYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkIHx8IG51bGwsXG4gICAgICBzdGFycmVkX2F0OiBzdGFyVGltZXN0YW1wcy5nZXQocC5wYWNrYWdlX2lkKSB8fCBudWxsLFxuICAgICAgLi4uKGF1dGhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB1c2VyX3Blcm1pc3Npb25zOiB7XG4gICAgICAgICAgICAgIGNhbl9tYW5hZ2VfcGFja2FnZXM6IGNhbk1hbmFnZVBhY2thZ2UocCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSkpLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25Cb2R5OiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBwYWNrYWdlX2lkOiB6LnN0cmluZygpLFxuICAgIH0pXG4gICAgLm9yKHoub2JqZWN0KHsgbmFtZTogei5zdHJpbmcoKSB9KSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgbGV0IHBhY2thZ2VJZDogc3RyaW5nXG5cbiAgLy8gR2V0IHBhY2thZ2UgSUQgZWl0aGVyIGRpcmVjdGx5IG9yIGJ5IG5hbWVcbiAgaWYgKFwicGFja2FnZV9pZFwiIGluIHJlcS5qc29uQm9keSkge1xuICAgIGNvbnN0IGJvZHkgPSByZXEuanNvbkJvZHlcbiAgICBwYWNrYWdlSWQgPSBib2R5LnBhY2thZ2VfaWRcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBuYW1lIGlzIHByb3ZpZGVkLCBsb29rIHVwIHRoZSBwYWNrYWdlX2lkXG4gICAgY29uc3QgYm9keSA9IHJlcS5qc29uQm9keVxuICAgIGNvbnN0IHBhY2thZ2VEYXRhID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoKHBrZykgPT4gcGtnLm5hbWUgPT09IGJvZHkubmFtZSlcblxuICAgIGlmICghcGFja2FnZURhdGEpIHtcbiAgICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9ub3RfZm91bmRcIixcbiAgICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIG5vdCBmb3VuZFwiLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBwYWNrYWdlSWQgPSBwYWNrYWdlRGF0YS5wYWNrYWdlX2lkXG4gIH1cblxuICAvLyBDaGVjayBpZiBwYWNrYWdlIGV4aXN0cyAoZXh0cmEgY2hlY2sgZm9yIElELWJhc2VkIGxvb2t1cClcbiAgY29uc3QgcGtnID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoKHApID0+IHAucGFja2FnZV9pZCA9PT0gcGFja2FnZUlkKVxuXG4gIGlmICghcGtnKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwicGFja2FnZV9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiUGFja2FnZSBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBzdGFycmVkXG4gIGNvbnN0IGV4aXN0aW5nID0gY3R4LmRiLmFjY291bnRQYWNrYWdlcy5maW5kKFxuICAgIChhcCkgPT5cbiAgICAgIGFwLmFjY291bnRfaWQgPT09IGN0eC5hdXRoLmFjY291bnRfaWQgJiYgYXAucGFja2FnZV9pZCA9PT0gcGFja2FnZUlkLFxuICApXG5cbiAgaWYgKCFleGlzdGluZz8uaXNfc3RhcnJlZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcIm5vdF9zdGFycmVkXCIsXG4gICAgICBtZXNzYWdlOiBcIllvdSBoYXZlIG5vdCBzdGFycmVkIHRoaXMgcGFja2FnZVwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBVcGRhdGUgdGhlIHBhY2thZ2UncyBzdGFyIGNvdW50XG4gIHBrZy5zdGFyX2NvdW50ID0gTWF0aC5tYXgoMCwgKHBrZy5zdGFyX2NvdW50IHx8IDApIC0gMSlcblxuICAvLyBSZW1vdmUgc3RhciBieSB1cGRhdGluZyBpc19zdGFycmVkIHRvIGZhbHNlXG4gIGV4aXN0aW5nLmlzX3N0YXJyZWQgPSBmYWxzZVxuICBleGlzdGluZy51cGRhdGVkX2F0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHBhY2thZ2VTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBxdWVyeTogei5zdHJpbmcoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgICBwYWNrYWdlczogei5hcnJheShwYWNrYWdlU2NoZW1hKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBxdWVyeSB9ID0gcmVxLmpzb25Cb2R5XG4gIGNvbnN0IHBhY2thZ2VzID0gY3R4LmRiLnNlYXJjaFBhY2thZ2VzKHF1ZXJ5KVxuICByZXR1cm4gY3R4Lmpzb24oeyBwYWNrYWdlcywgb2s6IHRydWUgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIHBhY2thZ2VfaWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBzdWNjZXNzOiB6LmJvb2xlYW4oKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBwYWNrYWdlX2lkIH0gPSByZXEuanNvbkJvZHlcblxuICBjb25zdCBwYWNrYWdlX2luZm8gPSBjdHguZGIuZ2V0UGFja2FnZUJ5SWQocGFja2FnZV9pZClcbiAgaWYgKCFwYWNrYWdlX2luZm8pIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJQYWNrYWdlIG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBpZiAocGFja2FnZV9pbmZvLm93bmVyX2dpdGh1Yl91c2VybmFtZSAhPT0gY3R4LmF1dGguZ2l0aHViX3VzZXJuYW1lKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDMsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwidW5hdXRob3JpemVkXCIsXG4gICAgICBtZXNzYWdlOiBcIk9ubHkgdGhlIHBhY2thZ2Ugb3duZXIgY2FuIHVwZGF0ZSBBSSBkZXNjcmlwdGlvblwiLFxuICAgIH0pXG4gIH1cblxuICBjdHguZGIudXBkYXRlUGFja2FnZShwYWNrYWdlX2lkLCB7XG4gICAgYWlfZGVzY3JpcHRpb246IFwiTmV3IGFpIGRlc2NyaXB0aW9uXCIsXG4gICAgYWlfdXNhZ2VfaW5zdHJ1Y3Rpb25zOiBcIk5ldyBhaSB1c2FnZSBpbnN0cnVjdGlvbnNcIixcbiAgfSlcblxuICByZXR1cm4gY3R4Lmpzb24oeyBzdWNjZXNzOiB0cnVlIH0pXG59KVxuIiwgImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHBhY2thZ2VTY2hlbWEgfSBmcm9tIFwiLi4vLi4vLi4vbGliL2RiL3NjaGVtYVwiXG5pbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiUE9TVFwiXSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIGpzb25Cb2R5OiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBwYWNrYWdlX2lkOiB6LnN0cmluZygpLFxuICAgICAgbmFtZTogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLnJlZ2V4KFxuICAgICAgICAgIC9eW0BhLXpBLVowLTktX1xcL10rJC8sXG4gICAgICAgICAgXCJQYWNrYWdlIG5hbWUgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW5zLCB1bmRlcnNjb3JlcywgYW5kIGZvcndhcmQgc2xhc2hlc1wiLFxuICAgICAgICApXG4gICAgICAgIC50cmFuc2Zvcm0oKG5hbWUpID0+IG5hbWUucmVwbGFjZSgvXkAvLCBcIlwiKSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgd2Vic2l0ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgZ2l0aHViX3JlcG9fZnVsbF9uYW1lOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgICAgIGlzX3ByaXZhdGU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgICBpc191bmxpc3RlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICAgIGRlZmF1bHRfdmlldzogei5lbnVtKFtcImZpbGVzXCIsIFwiM2RcIiwgXCJwY2JcIiwgXCJzY2hlbWF0aWNcIl0pLm9wdGlvbmFsKCksXG4gICAgICBhbGxvd19wcl9wcmV2aWV3czogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICB9KVxuICAgIC50cmFuc2Zvcm0oKGRhdGEpID0+ICh7XG4gICAgICAuLi5kYXRhLFxuICAgICAgaXNfdW5saXN0ZWQ6IGRhdGEuaXNfcHJpdmF0ZSA/IHRydWUgOiBkYXRhLmlzX3VubGlzdGVkLFxuICAgIH0pKSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICAgIHBhY2thZ2U6IHBhY2thZ2VTY2hlbWEsXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBwYWNrYWdlX2lkLFxuICAgIG5hbWUsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgd2Vic2l0ZSxcbiAgICBpc19wcml2YXRlLFxuICAgIGlzX3VubGlzdGVkLFxuICAgIGdpdGh1Yl9yZXBvX2Z1bGxfbmFtZSxcbiAgICBkZWZhdWx0X3ZpZXcsXG4gICAgYWxsb3dfcHJfcHJldmlld3MsXG4gIH0gPSByZXEuanNvbkJvZHlcblxuICBjb25zdCBwYWNrYWdlSW5kZXggPSBjdHguZGIucGFja2FnZXMuZmluZEluZGV4KFxuICAgIChwKSA9PiBwLnBhY2thZ2VfaWQgPT09IHBhY2thZ2VfaWQsXG4gIClcblxuICBpZiAocGFja2FnZUluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInBhY2thZ2Vfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlBhY2thZ2Ugbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGV4aXN0aW5nUGFja2FnZSA9IGN0eC5kYi5wYWNrYWdlc1twYWNrYWdlSW5kZXhdXG5cbiAgLy8gQ2hlY2sgaWYgdXNlciBoYXMgcGVybWlzc2lvbiB0byB1cGRhdGUgdGhlIHBhY2thZ2VcbiAgaWYgKGV4aXN0aW5nUGFja2FnZS5vd25lcl9naXRodWJfdXNlcm5hbWUgIT09IGN0eC5hdXRoLmdpdGh1Yl91c2VybmFtZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAzLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImZvcmJpZGRlblwiLFxuICAgICAgbWVzc2FnZTogXCJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHVwZGF0ZSB0aGlzIHBhY2thZ2VcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBwYWNrYWdlIG5hbWUgaWYgbmFtZSBpcyBiZWluZyB1cGRhdGVkXG4gIGlmIChuYW1lKSB7XG4gICAgY29uc3QgbmV3RnVsbE5hbWUgPSBgJHtjdHguYXV0aC5naXRodWJfdXNlcm5hbWV9LyR7bmFtZX1gXG4gICAgY29uc3QgZHVwbGljYXRlUGFja2FnZSA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKFxuICAgICAgKHApID0+IHAubmFtZSA9PT0gbmV3RnVsbE5hbWUgJiYgcC5wYWNrYWdlX2lkICE9PSBwYWNrYWdlX2lkLFxuICAgIClcbiAgICBpZiAoZHVwbGljYXRlUGFja2FnZSkge1xuICAgICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgICAgZXJyb3JfY29kZTogXCJwYWNrYWdlX2FscmVhZHlfZXhpc3RzXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiQSBwYWNrYWdlIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzXCIsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZWRQYWNrYWdlID0gY3R4LmRiLnVwZGF0ZVBhY2thZ2UocGFja2FnZV9pZCwge1xuICAgIG5hbWU6IG5hbWUgPyBgJHtjdHguYXV0aC5naXRodWJfdXNlcm5hbWV9LyR7bmFtZX1gIDogZXhpc3RpbmdQYWNrYWdlLm5hbWUsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uID8/IGV4aXN0aW5nUGFja2FnZS5kZXNjcmlwdGlvbixcbiAgICB1bnNjb3BlZF9uYW1lOiBuYW1lID8/IGV4aXN0aW5nUGFja2FnZS51bnNjb3BlZF9uYW1lLFxuICAgIHdlYnNpdGU6IHdlYnNpdGUgPz8gZXhpc3RpbmdQYWNrYWdlLndlYnNpdGUsXG4gICAgZ2l0aHViX3JlcG9fZnVsbF9uYW1lOlxuICAgICAgZ2l0aHViX3JlcG9fZnVsbF9uYW1lID09PSBudWxsXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IChnaXRodWJfcmVwb19mdWxsX25hbWUgPz8gZXhpc3RpbmdQYWNrYWdlLmdpdGh1Yl9yZXBvX2Z1bGxfbmFtZSksXG4gICAgaXNfcHJpdmF0ZTogaXNfcHJpdmF0ZSA/PyBleGlzdGluZ1BhY2thZ2UuaXNfcHJpdmF0ZSxcbiAgICBpc19wdWJsaWM6XG4gICAgICBpc19wcml2YXRlICE9PSB1bmRlZmluZWQgPyAhaXNfcHJpdmF0ZSA6IGV4aXN0aW5nUGFja2FnZS5pc19wdWJsaWMsXG4gICAgaXNfdW5saXN0ZWQ6IGlzX3VubGlzdGVkID8/IGV4aXN0aW5nUGFja2FnZS5pc191bmxpc3RlZCxcbiAgICBkZWZhdWx0X3ZpZXc6IGRlZmF1bHRfdmlldyA/PyBleGlzdGluZ1BhY2thZ2UuZGVmYXVsdF92aWV3LFxuICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBhbGxvd19wcl9wcmV2aWV3czogYWxsb3dfcHJfcHJldmlld3MgPz8gZXhpc3RpbmdQYWNrYWdlLmFsbG93X3ByX3ByZXZpZXdzLFxuICB9KVxuXG4gIGlmICghdXBkYXRlZFBhY2thZ2UpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDUwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJ1cGRhdGVfZmFpbGVkXCIsXG4gICAgICBtZXNzYWdlOiBcIkZhaWxlZCB0byB1cGRhdGUgcGFja2FnZVwiLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICAgIHBhY2thZ2U6IHVwZGF0ZWRQYWNrYWdlLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5jb25zdCBQUk9YWV9IRUFERVJTID0gW1xuICBcIlgtVGFyZ2V0LVVybFwiLFxuICBcIlgtU2VuZGVyLU9yaWdpblwiLFxuICBcIlgtU2VuZGVyLUhvc3RcIixcbiAgXCJYLVNlbmRlci1SZWZlcmVyXCIsXG4gIFwiWC1TZW5kZXItVXNlci1BZ2VudFwiLFxuICBcIlgtU2VuZGVyLUNvb2tpZVwiLFxuXVxuXG5jb25zdCBBTExPV0VEX0RPTUFJTlM6IEFycmF5PHsgZG9tYWluOiBzdHJpbmc7IHJvdXRlcz86IHN0cmluZ1tdIH0+ID0gW1xuICB7IGRvbWFpbjogXCJlYXN5ZWRhLmNvbVwiIH0sXG5dXG5cbmZ1bmN0aW9uIGlzQWxsb3dlZERvbWFpbih1cmw6IHN0cmluZykge1xuICB0cnkge1xuICAgIGNvbnN0IHsgaG9zdG5hbWUsIHBhdGhuYW1lLCBwb3J0IH0gPSBuZXcgVVJMKHVybClcbiAgICBjb25zdCBhbGxvd2VkRG9tYWluID0gQUxMT1dFRF9ET01BSU5TLmZpbmQoXG4gICAgICAoZG9tYWluKSA9PiBkb21haW4uZG9tYWluID09PSBob3N0bmFtZSxcbiAgICApXG5cbiAgICBpZiAoYWxsb3dlZERvbWFpbikge1xuICAgICAgaWYgKFxuICAgICAgICAhYWxsb3dlZERvbWFpbi5yb3V0ZXMgfHxcbiAgICAgICAgYWxsb3dlZERvbWFpbi5yb3V0ZXMuc29tZSgocm91dGUpID0+IHBhdGhuYW1lLnN0YXJ0c1dpdGgocm91dGUpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvc3RuYW1lID09PSBcImxvY2FsaG9zdFwiIHx8IChob3N0bmFtZSA9PT0gXCIxMjcuMC4wLjFcIiAmJiBwb3J0KVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCIsIFwiUE9TVFwiLCBcIlBVVFwiLCBcIkRFTEVURVwiLCBcIlBBVENIXCIsIFwiSEVBRFwiLCBcIk9QVElPTlNcIl0sXG4gIGpzb25SZXNwb25zZTogei5hbnkoKSxcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgaWYgKHJlcS5oZWFkZXJzLmdldChcIlgtcHJveGllZFwiKSkge1xuICAgIHJldHVybiBjdHguanNvbihcbiAgICAgIHsgZXJyb3I6IFwiUmVjdXJzaXZlIHByb3h5IGNhbGxzIGFyZSBub3QgYWxsb3dlZFwiIH0sXG4gICAgICB7IHN0YXR1czogNDAzIH0sXG4gICAgKVxuICB9XG5cbiAgY29uc3QgdGFyZ2V0VXJsID0gcmVxLmhlYWRlcnMuZ2V0KFwiWC1UYXJnZXQtVXJsXCIpXG5cbiAgaWYgKCF0YXJnZXRVcmwpIHtcbiAgICByZXR1cm4gY3R4Lmpzb24oXG4gICAgICB7IGVycm9yOiBcIlgtVGFyZ2V0LVVybCBoZWFkZXIgaXMgcmVxdWlyZWRcIiB9LFxuICAgICAgeyBzdGF0dXM6IDQwMCB9LFxuICAgIClcbiAgfVxuXG4gIGlmICghaXNBbGxvd2VkRG9tYWluKHRhcmdldFVybCkpIHtcbiAgICByZXR1cm4gY3R4Lmpzb24oeyBlcnJvcjogXCJEb21haW4gbm90IGFsbG93ZWRcIiB9LCB7IHN0YXR1czogNDAzIH0pXG4gIH1cblxuICBsZXQgYm9keTogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGlmIChbXCJQT1NUXCIsIFwiUFVUXCIsIFwiUEFUQ0hcIl0uaW5jbHVkZXMocmVxLm1ldGhvZCkpIHtcbiAgICBib2R5ID0gYXdhaXQgcmVxLmNsb25lKCkudGV4dCgpXG4gIH1cblxuICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMocmVxLmhlYWRlcnMpXG5cbiAgY29uc3Qgc2VuZGVyT3JpZ2luID0gcmVxLmhlYWRlcnMuZ2V0KFwiWC1TZW5kZXItT3JpZ2luXCIpXG4gIGlmIChzZW5kZXJPcmlnaW4pIHtcbiAgICBoZWFkZXJzLnNldChcIk9yaWdpblwiLCBzZW5kZXJPcmlnaW4pXG4gIH1cblxuICBjb25zdCBzZW5kZXJIb3N0ID0gcmVxLmhlYWRlcnMuZ2V0KFwiWC1TZW5kZXItSG9zdFwiKVxuICBpZiAoc2VuZGVySG9zdCkge1xuICAgIGNvbnN0IGhvc3RWYWx1ZSA9IHNlbmRlckhvc3QucmVwbGFjZSgvXmh0dHBzPzpcXC9cXC8vLCBcIlwiKVxuICAgIGhlYWRlcnMuc2V0KFwiSG9zdFwiLCBob3N0VmFsdWUpXG4gICAgaGVhZGVycy5zZXQoXCJhdXRob3JpdHlcIiwgaG9zdFZhbHVlKVxuICB9XG5cbiAgY29uc3Qgc2VuZGVyUmVmZXJlciA9IHJlcS5oZWFkZXJzLmdldChcIlgtU2VuZGVyLVJlZmVyZXJcIilcbiAgaWYgKHNlbmRlclJlZmVyZXIpIHtcbiAgICBoZWFkZXJzLnNldChcIlJlZmVyZXJcIiwgc2VuZGVyUmVmZXJlcilcbiAgfVxuXG4gIGNvbnN0IHNlbmRlclVzZXJBZ2VudCA9IHJlcS5oZWFkZXJzLmdldChcIlgtU2VuZGVyLVVzZXItQWdlbnRcIilcbiAgaWYgKHNlbmRlclVzZXJBZ2VudCkge1xuICAgIGhlYWRlcnMuc2V0KFwiVXNlci1BZ2VudFwiLCBzZW5kZXJVc2VyQWdlbnQpXG4gIH1cblxuICBjb25zdCBzZW5kZXJDb29raWUgPSByZXEuaGVhZGVycy5nZXQoXCJYLVNlbmRlci1Db29raWVcIilcbiAgaWYgKHNlbmRlckNvb2tpZSkge1xuICAgIGhlYWRlcnMuc2V0KFwiQ29va2llXCIsIHNlbmRlckNvb2tpZSlcbiAgfVxuXG4gIGZvciAoY29uc3QgaGVhZGVyIG9mIFBST1hZX0hFQURFUlMpIHtcbiAgICBoZWFkZXJzLmRlbGV0ZShoZWFkZXIpXG4gIH1cblxuICBoZWFkZXJzLmRlbGV0ZShcImNvbnRlbnQtZW5jb2RpbmdcIilcbiAgaGVhZGVycy5kZWxldGUoXCJhY2NlcHQtZW5jb2RpbmdcIilcbiAgaGVhZGVycy5zZXQoXCJYLXByb3hpZWRcIiwgXCJ0cnVlXCIpXG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRhcmdldFVybCwge1xuICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGJvZHk6IFtcIkdFVFwiLCBcIkhFQURcIl0uaW5jbHVkZXMocmVxLm1ldGhvZCkgPyB1bmRlZmluZWQgOiBib2R5LFxuICAgIH0pXG5cbiAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBuZXcgSGVhZGVycyhyZXNwb25zZS5oZWFkZXJzKVxuICAgIHJlc3BvbnNlSGVhZGVycy5kZWxldGUoXCJjb250ZW50LWVuY29kaW5nXCIpXG5cbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHJlc3BvbnNlLmJvZHksIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICB9KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJQcm94eSBlcnJvcjpcIiwgZXJyb3IpXG4gICAgcmV0dXJuIGN0eC5qc29uKFxuICAgICAgeyBlcnJvcjogeyBtZXNzYWdlOiBcIkZhaWxlZCB0byBwcm94eSByZXF1ZXN0XCIgfSB9LFxuICAgICAgeyBzdGF0dXM6IDUwMiB9LFxuICAgIClcbiAgfVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgYXV0aDogXCJzZXNzaW9uXCIsXG4gIG1ldGhvZHM6IFtcIlBPU1RcIiwgXCJERUxFVEVcIl0sXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBzZXNzaW9uX2lkIH0gPSBjdHguYXV0aFxuXG4gIGNvbnN0IGRlbGV0ZWQgPSBjdHguZGIuZGVsZXRlU2Vzc2lvbihzZXNzaW9uX2lkKVxuXG4gIGlmICghZGVsZXRlZCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInNlc3Npb25fbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlNlc3Npb24gbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb2s6IHRydWUsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBzbmlwcGV0X2lkOiB6LnN0cmluZygpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IHNuaXBwZXRfaWQgfSA9IHJlcS5qc29uQm9keVxuXG4gIC8vIENoZWNrIGlmIHNuaXBwZXQgZXhpc3RzIChhcyBhIHBhY2thZ2UpXG4gIGNvbnN0IHNuaXBwZXQgPSBjdHguZGIucGFja2FnZXMuZmluZChcbiAgICAocGtnKSA9PiBwa2cucGFja2FnZV9pZCA9PT0gc25pcHBldF9pZCAmJiBwa2cuaXNfc25pcHBldCA9PT0gdHJ1ZSxcbiAgKVxuXG4gIGlmICghc25pcHBldCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInNuaXBwZXRfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlNuaXBwZXQgbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGFscmVhZHkgc3RhcnJlZFxuICBjb25zdCBleGlzdGluZyA9IGN0eC5kYi5hY2NvdW50UGFja2FnZXMuZmluZChcbiAgICAoYXApID0+XG4gICAgICBhcC5hY2NvdW50X2lkID09PSBjdHguYXV0aC5hY2NvdW50X2lkICYmIGFwLnBhY2thZ2VfaWQgPT09IHNuaXBwZXRfaWQsXG4gIClcblxuICBpZiAoZXhpc3Rpbmc/LmlzX3N0YXJyZWQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJhbHJlYWR5X3N0YXJyZWRcIixcbiAgICAgIG1lc3NhZ2U6IFwiWW91IGhhdmUgYWxyZWFkeSBzdGFycmVkIHRoaXMgc25pcHBldFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBVcGRhdGUgdGhlIHBhY2thZ2UncyBzdGFyIGNvdW50XG4gIHNuaXBwZXQuc3Rhcl9jb3VudCA9IChzbmlwcGV0LnN0YXJfY291bnQgfHwgMCkgKyAxXG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgLy8gSWYgcmVjb3JkIGV4aXN0cyBidXQgaXNfc3RhcnJlZCBpcyBmYWxzZSwgdXBkYXRlIHRvIGlzX3N0YXJyZWQ9dHJ1ZVxuICAgIGV4aXN0aW5nLmlzX3N0YXJyZWQgPSB0cnVlXG4gICAgZXhpc3RpbmcudXBkYXRlZF9hdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICB9IGVsc2Uge1xuICAgIC8vIEFkZCBzdGFyIGJ5IGNyZWF0aW5nIGEgbmV3IGFjY291bnRfcGFja2FnZSByZWNvcmRcbiAgICBjdHguZGIuYWRkQWNjb3VudFBhY2thZ2Uoe1xuICAgICAgYWNjb3VudF9pZDogY3R4LmF1dGguYWNjb3VudF9pZCxcbiAgICAgIHBhY2thZ2VfaWQ6IHNuaXBwZXRfaWQsXG4gICAgICBpc19zdGFycmVkOiB0cnVlLFxuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyBzbmlwcGV0U2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIlBPU1RcIl0sXG4gIGF1dGg6IFwic2Vzc2lvblwiLFxuICBqc29uQm9keTogei5vYmplY3Qoe1xuICAgIHVuc2NvcGVkX25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBjb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgc25pcHBldF90eXBlOiB6LmVudW0oW1wiYm9hcmRcIiwgXCJwYWNrYWdlXCIsIFwibW9kZWxcIiwgXCJmb290cHJpbnRcIl0pLFxuICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgY29tcGlsZWRfanM6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBjaXJjdWl0X2pzb246IHouYXJyYXkoei5yZWNvcmQoei5hbnkoKSkpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICBkdHM6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBpc19wcml2YXRlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIGlzX3B1YmxpYzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBpc191bmxpc3RlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgICBzbmlwcGV0OiBzbmlwcGV0U2NoZW1hLm9wdGlvbmFsKCksXG4gIH0pLFxufSkoYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gIGxldCB7XG4gICAgdW5zY29wZWRfbmFtZSxcbiAgICBjb2RlID0gXCJcIixcbiAgICBzbmlwcGV0X3R5cGUsXG4gICAgZGVzY3JpcHRpb24gPSBcIlwiLFxuICAgIGNvbXBpbGVkX2pzLFxuICAgIGNpcmN1aXRfanNvbixcbiAgICBkdHMsXG4gICAgaXNfcHJpdmF0ZSxcbiAgICBpc19wdWJsaWMsXG4gICAgaXNfdW5saXN0ZWQsXG4gIH0gPSByZXEuanNvbkJvZHlcblxuICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpXG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gbmV3IERhdGUodGltZXN0YW1wKS50b0lTT1N0cmluZygpXG5cbiAgaWYgKCF1bnNjb3BlZF9uYW1lKSB7XG4gICAgLy8gQ291bnQgc25pcHBldHMgb2YgdGhpcyB0eXBlIGZvciB0aGlzIHVzZXJcbiAgICBjb25zdCB1c2VyU25pcHBldHMgPSBjdHguZGIucGFja2FnZXMuZmlsdGVyKFxuICAgICAgKHApID0+XG4gICAgICAgIHAub3duZXJfZ2l0aHViX3VzZXJuYW1lID09PSBjdHguYXV0aC5naXRodWJfdXNlcm5hbWUgJiZcbiAgICAgICAgcC5pc19zbmlwcGV0ID09PSB0cnVlICYmXG4gICAgICAgICgocC5pc19ib2FyZCAmJiBzbmlwcGV0X3R5cGUgPT09IFwiYm9hcmRcIikgfHxcbiAgICAgICAgICAocC5pc19wYWNrYWdlICYmIHNuaXBwZXRfdHlwZSA9PT0gXCJwYWNrYWdlXCIpIHx8XG4gICAgICAgICAgKHAuaXNfbW9kZWwgJiYgc25pcHBldF90eXBlID09PSBcIm1vZGVsXCIpIHx8XG4gICAgICAgICAgKHAuaXNfZm9vdHByaW50ICYmIHNuaXBwZXRfdHlwZSA9PT0gXCJmb290cHJpbnRcIikpLFxuICAgIClcbiAgICB1bnNjb3BlZF9uYW1lID0gYHVudGl0bGVkLSR7c25pcHBldF90eXBlfS0ke3VzZXJTbmlwcGV0cy5sZW5ndGggKyAxfWBcbiAgfVxuXG4gIGNvbnN0IGV4aXN0aW5nUGFja2FnZSA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKFxuICAgIChwa2cpID0+XG4gICAgICBwa2cudW5zY29wZWRfbmFtZSA9PT0gdW5zY29wZWRfbmFtZSAmJlxuICAgICAgcGtnLm93bmVyX2dpdGh1Yl91c2VybmFtZSA9PT0gY3R4LmF1dGguZ2l0aHViX3VzZXJuYW1lLFxuICApXG5cbiAgaWYgKGV4aXN0aW5nUGFja2FnZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInNuaXBwZXRfYWxyZWFkeV9leGlzdHNcIixcbiAgICAgIG1lc3NhZ2U6IFwiWW91IGhhdmUgYWxyZWFkeSBmb3JrZWQgdGhpcyBzbmlwcGV0IGluIHlvdXIgYWNjb3VudC5cIixcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBDcmVhdGUgdGhlIHBhY2thZ2UgZGlyZWN0bHkgKHdoaWNoIHdpbGwgc2VydmUgYXMgb3VyIHNuaXBwZXQpXG4gICAgY29uc3QgbmV3UGFja2FnZSA9IGN0eC5kYi5hZGRQYWNrYWdlKHtcbiAgICAgIGNyZWF0b3JfYWNjb3VudF9pZDogY3R4LmF1dGguYWNjb3VudF9pZCxcbiAgICAgIG93bmVyX29yZ19pZDogY3R4LmF1dGgucGVyc29uYWxfb3JnX2lkLFxuICAgICAgb3duZXJfZ2l0aHViX3VzZXJuYW1lOiBjdHguYXV0aC5naXRodWJfdXNlcm5hbWUsXG4gICAgICBpc19zb3VyY2VfZnJvbV9naXRodWI6IGZhbHNlLFxuICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgICAgbmFtZTogYCR7Y3R4LmF1dGguZ2l0aHViX3VzZXJuYW1lfS8ke3Vuc2NvcGVkX25hbWV9YCxcbiAgICAgIHVuc2NvcGVkX25hbWU6IHVuc2NvcGVkX25hbWUsXG4gICAgICBsYXRlc3RfdmVyc2lvbjogXCIwLjAuMVwiLFxuICAgICAgbGljZW5zZTogbnVsbCxcbiAgICAgIHN0YXJfY291bnQ6IDAsXG4gICAgICBjcmVhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgIHVwZGF0ZWRfYXQ6IGN1cnJlbnRUaW1lLFxuICAgICAgYWlfZGVzY3JpcHRpb246IG51bGwsXG4gICAgICBpc19zbmlwcGV0OiB0cnVlLFxuICAgICAgaXNfYm9hcmQ6IHNuaXBwZXRfdHlwZSA9PT0gXCJib2FyZFwiLFxuICAgICAgaXNfcGFja2FnZTogc25pcHBldF90eXBlID09PSBcInBhY2thZ2VcIixcbiAgICAgIGlzX21vZGVsOiBzbmlwcGV0X3R5cGUgPT09IFwibW9kZWxcIixcbiAgICAgIGlzX2Zvb3RwcmludDogc25pcHBldF90eXBlID09PSBcImZvb3RwcmludFwiLFxuICAgICAgc25pcHBldF90eXBlOiBzbmlwcGV0X3R5cGUsXG4gICAgICBpc19wcml2YXRlOiBpc19wcml2YXRlIHx8IGZhbHNlLFxuICAgICAgaXNfcHVibGljOiBpc19wdWJsaWMgfHwgdHJ1ZSxcbiAgICAgIGlzX3VubGlzdGVkOiBpc191bmxpc3RlZCB8fCBmYWxzZSxcbiAgICAgIGxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQ6IG51bGwsXG4gICAgICBhaV91c2FnZV9pbnN0cnVjdGlvbnM6IFwicGxhY2Vob2xkZXIgYWkgdXNhZ2UgaW5zdHJ1Y3Rpb25zXCIsXG4gICAgfSlcblxuICAgIGNvbnN0IG5ld1BhY2thZ2VSZWxlYXNlID0gY3R4LmRiLmFkZFBhY2thZ2VSZWxlYXNlKHtcbiAgICAgIHBhY2thZ2VfaWQ6IG5ld1BhY2thZ2UucGFja2FnZV9pZCxcbiAgICAgIHZlcnNpb246IFwiMC4wLjFcIixcbiAgICAgIGlzX2xhdGVzdDogdHJ1ZSxcbiAgICAgIGlzX2xvY2tlZDogZmFsc2UsXG4gICAgICBjcmVhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgIC8vIFNldHRpbmcgdGhlIHRyYW5zcGlsZWQgYXMgdHJ1ZSBvbiBjcmVhdGlvblxuICAgICAgaGFzX3RyYW5zcGlsZWQ6IHRydWUsXG4gICAgICB0cmFuc3BpbGF0aW9uX2Vycm9yOiBudWxsLFxuICAgIH0pXG5cbiAgICBjdHguZGIudXBkYXRlUGFja2FnZShuZXdQYWNrYWdlLnBhY2thZ2VfaWQsIHtcbiAgICAgIGxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQ6IG5ld1BhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICB9KVxuXG4gICAgLy8gQWRkIHBhY2thZ2UgZmlsZXNcbiAgICAvLyBBZGQgaW5kZXgudHN4IGZpbGUgd2l0aCB0aGUgY29kZSBjb250ZW50XG4gICAgY3R4LmRiLmFkZFBhY2thZ2VGaWxlKHtcbiAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogbmV3UGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgZmlsZV9wYXRoOiBcImluZGV4LnRzeFwiLFxuICAgICAgY29udGVudF90ZXh0OiBjb2RlLFxuICAgICAgY3JlYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgfSlcblxuICAgIC8vIEFkZCBEVFMgZmlsZSBpZiBwcm92aWRlZFxuICAgIGlmIChkdHMpIHtcbiAgICAgIGN0eC5kYi5hZGRQYWNrYWdlRmlsZSh7XG4gICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogbmV3UGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgICBmaWxlX3BhdGg6IFwiL2Rpc3QvaW5kZXguZC50c1wiLFxuICAgICAgICBjb250ZW50X3RleHQ6IGR0cyxcbiAgICAgICAgY3JlYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIEFkZCBjb21waWxlZCBKUyBpZiBwcm92aWRlZFxuICAgIGlmIChjb21waWxlZF9qcykge1xuICAgICAgY3R4LmRiLmFkZFBhY2thZ2VGaWxlKHtcbiAgICAgICAgcGFja2FnZV9yZWxlYXNlX2lkOiBuZXdQYWNrYWdlUmVsZWFzZS5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gICAgICAgIGZpbGVfcGF0aDogXCIvZGlzdC9pbmRleC5qc1wiLFxuICAgICAgICBjb250ZW50X3RleHQ6IGNvbXBpbGVkX2pzLFxuICAgICAgICBjcmVhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gQWRkIGNpcmN1aXQgSlNPTiBpZiBwcm92aWRlZFxuICAgIGlmIChjaXJjdWl0X2pzb24pIHtcbiAgICAgIGN0eC5kYi5hZGRQYWNrYWdlRmlsZSh7XG4gICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogbmV3UGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgICAgICBmaWxlX3BhdGg6IFwiL2Rpc3QvY2lyY3VpdC5qc29uXCIsXG4gICAgICAgIGNvbnRlbnRfdGV4dDogSlNPTi5zdHJpbmdpZnkoY2lyY3VpdF9qc29uKSxcbiAgICAgICAgY3JlYXRlZF9hdDogY3VycmVudFRpbWUsXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgc25pcHBldCByZXNwb25zZSBvYmplY3RcbiAgICBjb25zdCBzbmlwcGV0UmVzcG9uc2UgPSB7XG4gICAgICBzbmlwcGV0X2lkOiBuZXdQYWNrYWdlLnBhY2thZ2VfaWQsXG4gICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IG5ld1BhY2thZ2VSZWxlYXNlLnBhY2thZ2VfcmVsZWFzZV9pZCxcbiAgICAgIG5hbWU6IG5ld1BhY2thZ2UubmFtZSxcbiAgICAgIHVuc2NvcGVkX25hbWU6IG5ld1BhY2thZ2UudW5zY29wZWRfbmFtZSxcbiAgICAgIG93bmVyX25hbWU6IGN0eC5hdXRoLmdpdGh1Yl91c2VybmFtZSxcbiAgICAgIGNvZGUsXG4gICAgICBkdHMsXG4gICAgICBjb21waWxlZF9qcyxcbiAgICAgIHN0YXJfY291bnQ6IDAsXG4gICAgICBjcmVhdGVkX2F0OiBjdXJyZW50VGltZSxcbiAgICAgIHVwZGF0ZWRfYXQ6IGN1cnJlbnRUaW1lLFxuICAgICAgc25pcHBldF90eXBlOiBzbmlwcGV0X3R5cGUsXG4gICAgICBjaXJjdWl0X2pzb246IGNpcmN1aXRfanNvbiB8fCBbXSxcbiAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICAgIGlzX3N0YXJyZWQ6IGZhbHNlLFxuICAgICAgdmVyc2lvbjogXCIwLjAuMVwiLFxuICAgICAgaXNfcHJpdmF0ZTogaXNfcHJpdmF0ZSB8fCBmYWxzZSxcbiAgICAgIGlzX3B1YmxpYzogaXNfcHVibGljIHx8IHRydWUsXG4gICAgICBpc191bmxpc3RlZDogaXNfdW5saXN0ZWQgfHwgZmFsc2UsXG4gICAgfVxuXG4gICAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICAgIG9rOiB0cnVlLFxuICAgICAgc25pcHBldDogc25pcHBldFJlc3BvbnNlLFxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig1MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwic25pcHBldF9jcmVhdGlvbl9mYWlsZWRcIixcbiAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIHNuaXBwZXQ6ICR7ZXJyb3J9YCxcbiAgICB9KVxuICB9XG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBzbmlwcGV0X2lkOiB6LnN0cmluZygpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IHNuaXBwZXRfaWQgfSA9IHJlcS5qc29uQm9keVxuXG4gIGNvbnN0IHNuaXBwZXRJbmRleCA9IGN0eC5kYi5wYWNrYWdlcy5maW5kSW5kZXgoXG4gICAgKHMpID0+IHMucGFja2FnZV9pZCA9PT0gc25pcHBldF9pZCxcbiAgKVxuXG4gIGlmIChzbmlwcGV0SW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwic25pcHBldF9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiU25pcHBldCBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgY29uc3Qgc25pcHBldCA9IGN0eC5kYi5wYWNrYWdlc1tzbmlwcGV0SW5kZXhdXG5cbiAgaWYgKHNuaXBwZXQuY3JlYXRvcl9hY2NvdW50X2lkICE9PSBjdHguYXV0aC5naXRodWJfdXNlcm5hbWUpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMywge1xuICAgICAgZXJyb3JfY29kZTogXCJmb3JiaWRkZW5cIixcbiAgICAgIG1lc3NhZ2U6IFwiWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBkZWxldGUgdGhpcyBzbmlwcGV0XCIsXG4gICAgfSlcbiAgfVxuXG4gIGN0eC5kYi5wYWNrYWdlcy5zcGxpY2Uoc25pcHBldEluZGV4LCAxKVxuXG4gIHJldHVybiBjdHguanNvbih7XG4gICAgb2s6IHRydWUsXG4gIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIl0sXG4gIGF1dGg6IFwibm9uZVwiLFxuICBxdWVyeVBhcmFtczogei5vYmplY3Qoe1xuICAgIGpzZGVsaXZyX3Jlc29sdmU6IHpcbiAgICAgIC5lbnVtKFtcInRydWVcIiwgXCJmYWxzZVwiXSlcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAudHJhbnNmb3JtKCh2KSA9PiB2ID09PSBcInRydWVcIiksXG4gICAganNkZWxpdnJfcGF0aDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5hbnkoKSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IGpzZGVsaXZyX3BhdGgsIGpzZGVsaXZyX3Jlc29sdmUgfSA9IHJlcS5xdWVyeVxuXG4gIC8vIFBhcnNlIHRoZSBmaWxlIHBhdGhcbiAgY29uc3QgW293bmVyLCBwYWNrYWdlV2l0aFZlcnNpb24sIC4uLnJlc3RdID0ganNkZWxpdnJfcGF0aC5zcGxpdChcIi9cIilcbiAgY29uc3QgW3BhY2thZ2VOYW1lLCB2ZXJzaW9uXSA9IHBhY2thZ2VXaXRoVmVyc2lvbi5zcGxpdChcIkBcIilcbiAgY29uc3QgZmlsZU5hbWUgPSByZXN0LmpvaW4oXCIvXCIpXG5cbiAgLy8gRmluZCB0aGUgc25pcHBldFxuICBjb25zdCBfcGFja2FnZSA9IGN0eC5kYi5wYWNrYWdlcy5maW5kKFxuICAgIChzKSA9PiBzLm93bmVyX2dpdGh1Yl91c2VybmFtZSA9PT0gb3duZXIgJiYgcy51bnNjb3BlZF9uYW1lID09PSBwYWNrYWdlTmFtZSxcbiAgKVxuXG4gIGNvbnN0IHBhY2thZ2VSZWxlYXNlID0gY3R4LmRiLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgIChwKSA9PiBwLnBhY2thZ2VfaWQgPT09IF9wYWNrYWdlPy5wYWNrYWdlX2lkLFxuICApXG5cbiAgY29uc3QgcGFja2FnZUZpbGVzID0gY3R4LmRiLnBhY2thZ2VGaWxlcy5maWx0ZXIoXG4gICAgKHApID0+IHAucGFja2FnZV9yZWxlYXNlX2lkID09PSBwYWNrYWdlUmVsZWFzZT8ucGFja2FnZV9yZWxlYXNlX2lkLFxuICApXG5cbiAgaWYgKCFfcGFja2FnZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInNuaXBwZXRfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlNuaXBwZXQgbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIGlmICghZmlsZU5hbWUgJiYgIWpzZGVsaXZyX3Jlc29sdmUpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgbGF0ZXN0OiBcIjAuMC4xXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHZlcnNpb25zOiBbXCIwLjAuMVwiXSxcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgfSxcbiAgICApXG4gIH0gZWxzZSBpZiAoIWZpbGVOYW1lICYmIGpzZGVsaXZyX3Jlc29sdmUpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB2ZXJzaW9uOiBcIjAuMC4xXCIsXG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgIH0sXG4gICAgKVxuICB9XG5cbiAgLy8gSWYgbm8gZmlsZU5hbWUgaXMgcHJvdmlkZWQsIHJldHVybiB0aGUgZGlyZWN0b3J5IGxpc3RpbmdcbiAgaWYgKCFmaWxlTmFtZSB8fCBmaWxlTmFtZSA9PT0gXCJmbGF0XCIpIHtcbiAgICBjb25zdCBmaWxlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgIG5hbWU6IFwiaW5kZXgudHNcIixcbiAgICAgICAgaGFzaDogXCJwbGFjZWhvbGRlcl9oYXNoXCIsXG4gICAgICAgIHRpbWU6IHBhY2thZ2VSZWxlYXNlPy5jcmVhdGVkX2F0LFxuICAgICAgICBzaXplOiBwYWNrYWdlRmlsZXMuZmluZCgoZikgPT4gZi5maWxlX3BhdGggPT09IFwiaW5kZXgudHNcIik/LmNvbnRlbnRfdGV4dFxuICAgICAgICAgID8ubGVuZ3RoLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgIG5hbWU6IFwiaW5kZXguZC50c1wiLFxuICAgICAgICBoYXNoOiBcInBsYWNlaG9sZGVyX2hhc2hcIixcbiAgICAgICAgdGltZTogcGFja2FnZVJlbGVhc2U/LmNyZWF0ZWRfYXQsXG4gICAgICAgIHNpemU6IHBhY2thZ2VGaWxlcy5maW5kKChmKSA9PiBmLmZpbGVfcGF0aCA9PT0gXCJpbmRleC5kLnRzXCIpXG4gICAgICAgICAgPy5jb250ZW50X3RleHQ/Lmxlbmd0aCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICBuYW1lOiBcInBhY2thZ2UuanNvblwiLFxuICAgICAgICBoYXNoOiBcInBsYWNlaG9sZGVyX2hhc2hcIixcbiAgICAgICAgdGltZTogcGFja2FnZVJlbGVhc2U/LmNyZWF0ZWRfYXQsXG4gICAgICAgIHNpemU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBuYW1lOiBgQHRzY2kvJHtvd25lcn0uJHtwYWNrYWdlTmFtZX1gLFxuICAgICAgICAgIHZlcnNpb246IHZlcnNpb24gfHwgXCIwLjAuMVwiLFxuICAgICAgICAgIG1haW46IFwiaW5kZXgudHNcIixcbiAgICAgICAgICB0eXBlczogXCJpbmRleC5kLnRzXCIsXG4gICAgICAgIH0pLmxlbmd0aCxcbiAgICAgIH0sXG4gICAgXVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICBkZWZhdWx0OiBcIi9pbmRleC50c1wiLFxuICAgICAgZmlsZXM6XG4gICAgICAgIGZpbGVOYW1lID09PSBcImZsYXRcIlxuICAgICAgICAgID8gZmlsZXMubWFwKChmKSA9PiAoe1xuICAgICAgICAgICAgICBuYW1lOiBgLyR7Zi5uYW1lfWAsXG4gICAgICAgICAgICAgIGhhc2g6IGYuaGFzaCxcbiAgICAgICAgICAgICAgdGltZTogZi50aW1lLFxuICAgICAgICAgICAgICBzaXplOiBmLnNpemUsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiZGlyZWN0b3J5XCIsXG4gICAgICAgICAgICAgICAgbmFtZTogXCIuXCIsXG4gICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLCBudWxsLCAyKSwge1xuICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgfSlcbiAgfVxuXG4gIC8vIEhhbmRsZSBmaWxlIGRvd25sb2Fkc1xuICBsZXQgY29udGVudDogc3RyaW5nXG4gIHN3aXRjaCAoZmlsZU5hbWUpIHtcbiAgICBjYXNlIFwiaW5kZXgudHNcIjpcbiAgICAgIGNvbnRlbnQgPVxuICAgICAgICBwYWNrYWdlRmlsZXMuZmluZCgoZikgPT4gZi5maWxlX3BhdGggPT09IFwiaW5kZXgudHN4XCIpPy5jb250ZW50X3RleHQgfHxcbiAgICAgICAgXCJcIlxuICAgICAgYnJlYWtcbiAgICBjYXNlIFwiaW5kZXguZC50c1wiOlxuICAgICAgY29udGVudCA9XG4gICAgICAgIHBhY2thZ2VGaWxlcy5maW5kKChmKSA9PiBmLmZpbGVfcGF0aCA9PT0gXCIvZGlzdC9pbmRleC5kLnRzXCIpXG4gICAgICAgICAgPy5jb250ZW50X3RleHQgfHwgXCJcIlxuICAgICAgYnJlYWtcbiAgICBjYXNlIFwicGFja2FnZS5qc29uXCI6XG4gICAgICBjb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBgQHRzY2kvJHtvd25lcn0uJHtwYWNrYWdlTmFtZX1gLFxuICAgICAgICAgIHZlcnNpb246IHZlcnNpb24gfHwgXCIwLjAuMVwiLFxuICAgICAgICAgIG1haW46IFwiaW5kZXgudHNcIixcbiAgICAgICAgICB0eXBlczogXCJpbmRleC5kLnRzXCIsXG4gICAgICAgIH0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgICBlcnJvcl9jb2RlOiBcImZpbGVfbm90X2ZvdW5kXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiUmVxdWVzdGVkIGZpbGUgbm90IGZvdW5kXCIsXG4gICAgICB9KVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShjb250ZW50LCB7XG4gICAgc3RhdHVzOiAyMDAsXG4gICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcInRleHQvcGxhaW5cIiB9LFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHtcbiAgY29udmVydENpcmN1aXRKc29uVG9TY2hlbWF0aWNTdmcsXG4gIGNvbnZlcnRDaXJjdWl0SnNvblRvUGNiU3ZnLFxufSBmcm9tIFwiY2lyY3VpdC10by1zdmdcIlxuaW1wb3J0IHsgQW55Q2lyY3VpdEVsZW1lbnQgfSBmcm9tIFwiY2lyY3VpdC1qc29uXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgYXV0aDogXCJub25lXCIsXG4gIHF1ZXJ5UGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgc25pcHBldElkOiB6LnN0cmluZygpLFxuICAgIGltYWdlX29mOiB6LmVudW0oW1wic2NoZW1hdGljXCIsIFwicGNiXCJdKSxcbiAgICBmb3JtYXQ6IHouZW51bShbXCJzdmdcIl0pLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICAgIHN2Zzogei5zdHJpbmcoKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBzbmlwcGV0SWQsIGltYWdlX29mLCBmb3JtYXQgfSA9IHJlcS5xdWVyeVxuXG4gIGNvbnN0IHNuaXBwZXQgPSBjdHguZGIuZ2V0U25pcHBldEJ5SWQoc25pcHBldElkKVxuXG4gIC8vIGNoZWNrIGlmIHRoZSBzbmlwcGV0IGV4aXN0c1xuICBpZiAoIXNuaXBwZXQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJzbmlwcGV0X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJTbmlwcGV0IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIHZhbGlkXG4gIGlmIChmb3JtYXQgIT09IFwic3ZnXCIpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgICAgZXJyb3JfY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgbWVzc2FnZTogXCJGb3JtYXQgbXVzdCBiZSAnc3ZnJ1wiLFxuICAgIH0pXG4gIH1cblxuICBpZiAoaW1hZ2Vfb2YgPT09IFwic2NoZW1hdGljXCIpIHtcbiAgICBjb25zdCBjaXJjdWl0SnNvbiA9IHNuaXBwZXQuY2lyY3VpdF9qc29uIGFzIEFueUNpcmN1aXRFbGVtZW50W11cbiAgICBjb25zdCBzdmcgPSBjb252ZXJ0Q2lyY3VpdEpzb25Ub1NjaGVtYXRpY1N2ZyhjaXJjdWl0SnNvbilcbiAgICByZXR1cm4gY3R4Lmpzb24oe1xuICAgICAgb2s6IHRydWUsXG4gICAgICBzdmcsXG4gICAgfSlcbiAgfVxuXG4gIGlmIChpbWFnZV9vZiA9PT0gXCJwY2JcIikge1xuICAgIGNvbnN0IHN2ZyA9IGNvbnZlcnRDaXJjdWl0SnNvblRvUGNiU3ZnKFxuICAgICAgc25pcHBldC5jaXJjdWl0X2pzb24gYXMgQW55Q2lyY3VpdEVsZW1lbnRbXSxcbiAgICApXG4gICAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICAgIG9rOiB0cnVlLFxuICAgICAgc3ZnLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gY3R4LmVycm9yKDQwMCwge1xuICAgIGVycm9yX2NvZGU6IFwiSU5WQUxJRF9SRVFVRVNUX1RZUEVcIixcbiAgICBtZXNzYWdlOiBcIlJlcXVlc3QgdHlwZSBtdXN0IGJlIGVpdGhlciAnc2NoZW1hdGljJyBvciAncGNiJ1wiLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyBzbmlwcGV0U2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiLCBcIlBPU1RcIl0sXG4gIGF1dGg6IFwib3B0aW9uYWxfc2Vzc2lvblwiLFxuICBjb21tb25QYXJhbXM6IHoub2JqZWN0KHtcbiAgICBzbmlwcGV0X2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG93bmVyX25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB1bnNjb3BlZF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBqc29uQm9keTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBvazogei5ib29sZWFuKCksXG4gICAgc25pcHBldDogc25pcHBldFNjaGVtYSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBzbmlwcGV0X2lkLCBuYW1lLCBvd25lcl9uYW1lLCB1bnNjb3BlZF9uYW1lIH0gPSByZXEuY29tbW9uUGFyYW1zXG5cbiAgLy8gRmlyc3QgdHJ5IHRvIGZpbmQgYnkgc25pcHBldF9pZFxuICBpZiAoc25pcHBldF9pZCkge1xuICAgIGNvbnN0IGZvdW5kU25pcHBldCA9IGN0eC5kYi5nZXRTbmlwcGV0QnlJZChzbmlwcGV0X2lkLCBjdHguYXV0aClcbiAgICBpZiAoZm91bmRTbmlwcGV0KSB7XG4gICAgICBpZiAoY3R4LmF1dGgpIHtcbiAgICAgICAgZm91bmRTbmlwcGV0LmlzX3N0YXJyZWQgPSBjdHguZGIuaGFzU3RhcnJlZChcbiAgICAgICAgICBjdHguYXV0aC5hY2NvdW50X2lkLFxuICAgICAgICAgIGZvdW5kU25pcHBldC5zbmlwcGV0X2lkLFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gY3R4Lmpzb24oe1xuICAgICAgICBvazogdHJ1ZSxcbiAgICAgICAgc25pcHBldDogZm91bmRTbmlwcGV0LFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvLyBJZiBub3QgZm91bmQgYnkgSUQsIHRyeSB0byBmaW5kIGJ5IG90aGVyIHBhcmFtZXRlcnNcbiAgY29uc3QgZm91bmRQYWNrYWdlID0gY3R4LmRiLnBhY2thZ2VzLmZpbmQoKHBrZykgPT4ge1xuICAgIGlmICghcGtnLmlzX3NuaXBwZXQpIHJldHVybiBmYWxzZVxuICAgIGlmIChuYW1lICYmIHBrZy5uYW1lLnRvTG93ZXJDYXNlKCkgIT09IG5hbWUudG9Mb3dlckNhc2UoKSkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKFxuICAgICAgb3duZXJfbmFtZSAmJlxuICAgICAgcGtnLm93bmVyX2dpdGh1Yl91c2VybmFtZT8udG9Mb3dlckNhc2UoKSAhPT0gb3duZXJfbmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgaWYgKFxuICAgICAgdW5zY29wZWRfbmFtZSAmJlxuICAgICAgcGtnLnVuc2NvcGVkX25hbWUudG9Mb3dlckNhc2UoKSAhPT0gdW5zY29wZWRfbmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgcmV0dXJuIHRydWVcbiAgfSlcblxuICBpZiAoIWZvdW5kUGFja2FnZSkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInNuaXBwZXRfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBgU25pcHBldCBub3QgZm91bmQgKHNlYXJjaGVkIHVzaW5nICR7SlNPTi5zdHJpbmdpZnkocmVxLmNvbW1vblBhcmFtcyl9KWAsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENvbnZlcnQgcGFja2FnZSB0byBzbmlwcGV0IGZvcm1hdFxuICBjb25zdCBzbmlwcGV0ID0gY3R4LmRiLmdldFNuaXBwZXRCeUlkKGZvdW5kUGFja2FnZS5wYWNrYWdlX2lkKVxuICBpZiAoIXNuaXBwZXQpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJzbmlwcGV0X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogYFNuaXBwZXQgbm90IGZvdW5kIChzZWFyY2hlZCB1c2luZyAke0pTT04uc3RyaW5naWZ5KHJlcS5jb21tb25QYXJhbXMpfSlgLFxuICAgIH0pXG4gIH1cblxuICBpZiAoY3R4LmF1dGgpIHtcbiAgICBzbmlwcGV0LmlzX3N0YXJyZWQgPSBjdHguZGIuaGFzU3RhcnJlZChcbiAgICAgIGN0eC5hdXRoLmFjY291bnRfaWQsXG4gICAgICBzbmlwcGV0LnNuaXBwZXRfaWQsXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgICBzbmlwcGV0LFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyBBbnlDaXJjdWl0RWxlbWVudCB9IGZyb20gXCJjaXJjdWl0LWpzb25cIlxuaW1wb3J0IHtcbiAgY29udmVydENpcmN1aXRKc29uVG9Bc3NlbWJseVN2ZyxcbiAgY29udmVydENpcmN1aXRKc29uVG9QY2JTdmcsXG4gIGNvbnZlcnRDaXJjdWl0SnNvblRvU2NoZW1hdGljU3ZnLFxufSBmcm9tIFwiY2lyY3VpdC10by1zdmdcIlxuaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlU3BlYyh7XG4gIG1ldGhvZHM6IFtcIkdFVFwiXSxcbiAgYXV0aDogXCJub25lXCIsXG4gIHJvdXRlUGFyYW1zOiB6Lm9iamVjdCh7XG4gICAgYXV0aG9yOiB6LnN0cmluZygpLFxuICAgIHNuaXBwZXRfbmFtZTogei5zdHJpbmcoKSxcbiAgICB0eXBlRm9ybWF0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgcmF3UmVzcG9uc2U6IHRydWUsXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBhdXRob3IsIHNuaXBwZXRfbmFtZSwgdHlwZUZvcm1hdCB9ID0gcmVxLnJvdXRlUGFyYW1zXG5cbiAgLy8gR2V0IHRoZSBzbmlwcGV0XG4gIGNvbnN0IG5hbWUgPSBhdXRob3IgKyBcIi9cIiArIHNuaXBwZXRfbmFtZVxuICBjb25zdCBzbmlwcGV0ID0gY3R4LmRiLmdldFNuaXBwZXRCeUF1dGhvckFuZE5hbWUoYXV0aG9yLCBuYW1lKVxuXG4gIC8vIElmIHNuaXBwZXQgaXMgbm90IGZvdW5kLCByZXR1cm4gNDA0XG4gIGlmICghc25pcHBldCkge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDA0LCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInNuaXBwZXRfbm90X2ZvdW5kXCIsXG4gICAgICBtZXNzYWdlOiBcIlNuaXBwZXQgbm90IGZvdW5kXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgdmFsaWRcbiAgY29uc3QgZm9ybWF0ID0gdHlwZUZvcm1hdC5zcGxpdChcIi5cIilbMV1cbiAgaWYgKGZvcm1hdCAhPT0gXCJzdmdcIikge1xuICAgIHJldHVybiBjdHguZXJyb3IoNDAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICBtZXNzYWdlOiBcIkZvcm1hdCBtdXN0IGJlICdzdmcnXCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSB0eXBlIGlzIHZhbGlkXG4gIGNvbnN0IHR5cGUgPSB0eXBlRm9ybWF0LnNwbGl0KFwiLlwiKVswXVxuICBjb25zdCB0eXBlc1ZhbGlkID0gW1wic2NoZW1hdGljXCIsIFwicGNiXCIsIFwiYXNzZW1ibHlcIl1cbiAgaWYgKCF0eXBlc1ZhbGlkLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICBtZXNzYWdlOiBgVHlwZSBtdXN0IGJlICcke3R5cGVzVmFsaWQuam9pbihcIicgb3IgJ1wiKX0nYCxcbiAgICB9KVxuICB9XG5cbiAgLy8gQ29udmVydCBjaXJjdWl0IGpzb24gdG8gc3ZnXG4gIGxldCBzdmc6IHN0cmluZ1xuICBpZiAodHlwZSA9PT0gXCJzY2hlbWF0aWNcIikge1xuICAgIHN2ZyA9IGNvbnZlcnRDaXJjdWl0SnNvblRvU2NoZW1hdGljU3ZnKFxuICAgICAgc25pcHBldC5jaXJjdWl0X2pzb24gYXMgQW55Q2lyY3VpdEVsZW1lbnRbXSxcbiAgICApXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJwY2JcIikge1xuICAgIHN2ZyA9IGNvbnZlcnRDaXJjdWl0SnNvblRvUGNiU3ZnKFxuICAgICAgc25pcHBldC5jaXJjdWl0X2pzb24gYXMgQW55Q2lyY3VpdEVsZW1lbnRbXSxcbiAgICApXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJhc3NlbWJseVwiKSB7XG4gICAgc3ZnID0gY29udmVydENpcmN1aXRKc29uVG9Bc3NlbWJseVN2ZyhcbiAgICAgIHNuaXBwZXQuY2lyY3VpdF9qc29uIGFzIEFueUNpcmN1aXRFbGVtZW50W10sXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBjdHguZXJyb3IoNTAwLCB7XG4gICAgICBlcnJvcl9jb2RlOiBcInVua25vd25fZXJyb3JcIixcbiAgICAgIG1lc3NhZ2U6IFwiVW5rbm93biBlcnJvclwiLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3BvbnNlKHN2Zywge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiaW1hZ2Uvc3ZnK3htbFwiLFxuICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwicHVibGljLCBtYXgtYWdlPTMxNTM2MDAwXCIsXG4gICAgfSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHNuaXBwZXRTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIl0sXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIHNuaXBwZXRzOiB6LmFycmF5KHNuaXBwZXRTY2hlbWEpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCBsYXRlc3RTbmlwcGV0cyA9IGN0eC5kYi5nZXRMYXRlc3RTbmlwcGV0cygyMClcbiAgcmV0dXJuIGN0eC5qc29uKHsgc25pcHBldHM6IGxhdGVzdFNuaXBwZXRzIH0pXG59KVxuIiwgImltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBzbmlwcGV0U2NoZW1hIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCJdLFxuICBhdXRoOiBcIm5vbmVcIixcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgc25pcHBldHM6IHouYXJyYXkoc25pcHBldFNjaGVtYSksXG4gIH0pLFxuICBxdWVyeVBhcmFtczogei5vYmplY3Qoe1xuICAgIHRpbWVfcGVyaW9kOiB6LmVudW0oW1wiN2RheXNcIiwgXCIzMGRheXNcIiwgXCJhbGxcIl0pLm9wdGlvbmFsKCkuZGVmYXVsdChcImFsbFwiKSxcbiAgICB0YWc6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyB0aW1lX3BlcmlvZCwgdGFnIH0gPSByZXEucXVlcnlcblxuICBsZXQgc2luY2VEYXRlID0gbmV3IERhdGUoKVxuICBpZiAodGltZV9wZXJpb2QgPT09IFwiN2RheXNcIikge1xuICAgIHNpbmNlRGF0ZS5zZXREYXRlKHNpbmNlRGF0ZS5nZXREYXRlKCkgLSA3KVxuICB9IGVsc2UgaWYgKHRpbWVfcGVyaW9kID09PSBcIjMwZGF5c1wiKSB7XG4gICAgc2luY2VEYXRlLnNldERhdGUoc2luY2VEYXRlLmdldERhdGUoKSAtIDMwKVxuICB9IGVsc2Uge1xuICAgIHNpbmNlRGF0ZSA9IG5ldyBEYXRlKDApIC8vIEZvciBcImFsbFwiLCB1c2UgZWFybGllc3QgcG9zc2libGUgZGF0ZVxuICB9XG5cbiAgY29uc3QgdHJlbmRpbmdTbmlwcGV0cyA9IGN0eC5kYi5nZXRUcmVuZGluZ1NuaXBwZXRzKFxuICAgIDIwLFxuICAgIHNpbmNlRGF0ZS50b0lTT1N0cmluZygpLFxuICApXG5cbiAgLy8gRmlsdGVyIGJ5IHRhZyBpZiBwcm92aWRlZFxuICBjb25zdCBmaWx0ZXJlZFNuaXBwZXRzID0gdGFnXG4gICAgPyB0cmVuZGluZ1NuaXBwZXRzLmZpbHRlcigoc25pcHBldCkgPT4gc25pcHBldC5zbmlwcGV0X3R5cGUgPT09IHRhZylcbiAgICA6IHRyZW5kaW5nU25pcHBldHNcblxuICByZXR1cm4gY3R4Lmpzb24oeyBzbmlwcGV0czogZmlsdGVyZWRTbmlwcGV0cyB9KVxufSlcbiIsICJpbXBvcnQgeyB3aXRoUm91dGVTcGVjIH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9taWRkbGV3YXJlL3dpdGgtd2ludGVyLXNwZWNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgc25pcHBldFNjaGVtYSwgdHlwZSBBY2NvdW50IH0gZnJvbSBcImZha2Utc25pcHBldHMtYXBpL2xpYi9kYi9zY2hlbWFcIlxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVTcGVjKHtcbiAgbWV0aG9kczogW1wiR0VUXCIsIFwiUE9TVFwiXSxcbiAgYXV0aDogXCJvcHRpb25hbF9zZXNzaW9uXCIsXG4gIGNvbW1vblBhcmFtczogei5vYmplY3Qoe1xuICAgIG93bmVyX25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB1bnNjb3BlZF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgc3RhcnJlZF9ieTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSxcbiAganNvbkJvZHk6IHouYW55KCkub3B0aW9uYWwoKSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICAgIHNuaXBwZXRzOiB6LmFycmF5KHNuaXBwZXRTY2hlbWEpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IG93bmVyX25hbWUsIHVuc2NvcGVkX25hbWUsIHN0YXJyZWRfYnkgfSA9IHJlcS5jb21tb25QYXJhbXNcbiAgbGV0IHN0YXJyZWRCeUFjY291bnQ6IEFjY291bnQgfCBudWxsID0gbnVsbFxuICAvLyBHZXQgYWxsIHBhY2thZ2VzIHRoYXQgYXJlIHNuaXBwZXRzXG4gIGxldCBwYWNrYWdlcyA9IGN0eC5kYi5wYWNrYWdlcy5maWx0ZXIoKHBrZykgPT4gcGtnLmlzX3NuaXBwZXQgPT09IHRydWUpXG5cbiAgLy8gRmlsdGVyIGJ5IG93bmVyX25hbWUgaWYgcHJvdmlkZWRcbiAgaWYgKG93bmVyX25hbWUpIHtcbiAgICBwYWNrYWdlcyA9IHBhY2thZ2VzLmZpbHRlcihcbiAgICAgIChwa2cpID0+XG4gICAgICAgIHBrZy5vd25lcl9naXRodWJfdXNlcm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IG93bmVyX25hbWUudG9Mb3dlckNhc2UoKSxcbiAgICApXG4gIH1cblxuICAvLyBGaWx0ZXIgYnkgdW5zY29wZWRfbmFtZSBpZiBwcm92aWRlZFxuICBpZiAodW5zY29wZWRfbmFtZSkge1xuICAgIHBhY2thZ2VzID0gcGFja2FnZXMuZmlsdGVyKFxuICAgICAgKHBrZykgPT4gcGtnLnVuc2NvcGVkX25hbWUudG9Mb3dlckNhc2UoKSA9PT0gdW5zY29wZWRfbmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgIClcbiAgfVxuXG4gIC8vIEZpbHRlciBieSBzdGFycmVkX2J5IGlmIHByb3ZpZGVkXG4gIGlmIChzdGFycmVkX2J5KSB7XG4gICAgc3RhcnJlZEJ5QWNjb3VudCA9XG4gICAgICBjdHguZGIuYWNjb3VudHMuZmluZChcbiAgICAgICAgKGFjYykgPT4gYWNjLmdpdGh1Yl91c2VybmFtZS50b0xvd2VyQ2FzZSgpID09PSBzdGFycmVkX2J5LnRvTG93ZXJDYXNlKCksXG4gICAgICApIHx8IG51bGxcblxuICAgIGlmIChzdGFycmVkQnlBY2NvdW50KSB7XG4gICAgICBjb25zdCBhY2NvdW50UGFja2FnZXMgPSBjdHguZGIuYWNjb3VudFBhY2thZ2VzLmZpbHRlcihcbiAgICAgICAgKGFwKSA9PiBhcC5hY2NvdW50X2lkID09PSBzdGFycmVkQnlBY2NvdW50Py5hY2NvdW50X2lkICYmIGFwLmlzX3N0YXJyZWQsXG4gICAgICApXG5cbiAgICAgIGNvbnN0IHN0YXJUaW1lc3RhbXBzID0gbmV3IE1hcChcbiAgICAgICAgYWNjb3VudFBhY2thZ2VzLm1hcCgoYXApID0+IFthcC5wYWNrYWdlX2lkLCBhcC51cGRhdGVkX2F0XSksXG4gICAgICApXG5cbiAgICAgIC8vIEZpbHRlciBwYWNrYWdlcyB0byBvbmx5IGluY2x1ZGUgc3RhcnJlZCBvbmVzXG4gICAgICBwYWNrYWdlcyA9IHBhY2thZ2VzLmZpbHRlcigocGtnKSA9PiBzdGFyVGltZXN0YW1wcy5oYXMocGtnLnBhY2thZ2VfaWQpKVxuICAgIH0gZWxzZSB7XG4gICAgICBwYWNrYWdlcyA9IFtdXG4gICAgfVxuICB9XG5cbiAgLy8gQ29udmVydCBwYWNrYWdlcyB0byBzbmlwcGV0c1xuICBjb25zdCBzbmlwcGV0cyA9IHBhY2thZ2VzLm1hcCgocGtnKSA9PiB7XG4gICAgY29uc3QgcGFja2FnZVJlbGVhc2UgPSBjdHguZGIuZ2V0UGFja2FnZVJlbGVhc2VCeUlkKFxuICAgICAgcGtnLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgfHwgXCJcIixcbiAgICApXG5cbiAgICBsZXQgc3RhclRpbWVzdGFtcFxuICAgIGlmIChzdGFycmVkX2J5ICYmIHN0YXJyZWRCeUFjY291bnQpIHtcbiAgICAgIGNvbnN0IGFjY291bnRQYWNrYWdlID0gY3R4LmRiLmFjY291bnRQYWNrYWdlcy5maW5kKFxuICAgICAgICAoYXApID0+XG4gICAgICAgICAgYXAuYWNjb3VudF9pZCA9PT0gc3RhcnJlZEJ5QWNjb3VudC5hY2NvdW50X2lkICYmXG4gICAgICAgICAgYXAucGFja2FnZV9pZCA9PT0gcGtnLnBhY2thZ2VfaWQgJiZcbiAgICAgICAgICBhcC5pc19zdGFycmVkLFxuICAgICAgKVxuICAgICAgc3RhclRpbWVzdGFtcCA9IGFjY291bnRQYWNrYWdlPy51cGRhdGVkX2F0XG4gICAgfVxuXG4gICAgaWYgKCFwYWNrYWdlUmVsZWFzZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc25pcHBldF9pZDogcGtnLnBhY2thZ2VfaWQsXG4gICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogcGtnLmxhdGVzdF9wYWNrYWdlX3JlbGVhc2VfaWQgfHwgXCJcIixcbiAgICAgICAgdW5zY29wZWRfbmFtZTogcGtnLnVuc2NvcGVkX25hbWUsXG4gICAgICAgIG5hbWU6IHBrZy5uYW1lLFxuICAgICAgICBvd25lcl9uYW1lOiBwa2cub3duZXJfZ2l0aHViX3VzZXJuYW1lIHx8IFwiXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBwa2cuZGVzY3JpcHRpb24gfHwgXCJcIixcbiAgICAgICAgc25pcHBldF90eXBlOiBwa2cuc25pcHBldF90eXBlIHx8IFwiYm9hcmRcIixcbiAgICAgICAgY29kZTogXCJcIixcbiAgICAgICAgZHRzOiBcIlwiLFxuICAgICAgICBjb21waWxlZF9qczogXCJcIixcbiAgICAgICAgY3JlYXRlZF9hdDogcGtnLmNyZWF0ZWRfYXQsXG4gICAgICAgIHVwZGF0ZWRfYXQ6IHBrZy51cGRhdGVkX2F0LFxuICAgICAgICBzdGFycmVkX2F0OiBzdGFyVGltZXN0YW1wLCAvLyBBZGQgc3RhciB0aW1lc3RhbXBcbiAgICAgICAgc3Rhcl9jb3VudDogY3R4LmRiLmdldFN0YXJDb3VudChwa2cucGFja2FnZV9pZCksXG4gICAgICAgIGlzX3N0YXJyZWQ6IGN0eC5hdXRoXG4gICAgICAgICAgPyBjdHguZGIuaGFzU3RhcnJlZChjdHguYXV0aC5hY2NvdW50X2lkLCBwa2cucGFja2FnZV9pZClcbiAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICB2ZXJzaW9uOiBwa2cubGF0ZXN0X3ZlcnNpb24gfHwgXCIwLjAuMVwiLFxuICAgICAgICBpc19wcml2YXRlOiBwa2cuaXNfcHJpdmF0ZSB8fCBmYWxzZSxcbiAgICAgICAgaXNfcHVibGljOiBwa2cuaXNfcHVibGljIHx8IHRydWUsXG4gICAgICAgIGlzX3VubGlzdGVkOiBwa2cuaXNfdW5saXN0ZWQgfHwgZmFsc2UsXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFja2FnZUZpbGVzID0gY3R4LmRiLmdldFBhY2thZ2VGaWxlc0J5UmVsZWFzZUlkKFxuICAgICAgcGFja2FnZVJlbGVhc2UucGFja2FnZV9yZWxlYXNlX2lkLFxuICAgIClcbiAgICBjb25zdCBjb2RlRmlsZSA9IHBhY2thZ2VGaWxlcy5maW5kKFxuICAgICAgKGZpbGU6IHsgZmlsZV9wYXRoOiBzdHJpbmcgfSkgPT5cbiAgICAgICAgZmlsZS5maWxlX3BhdGggPT09IFwiaW5kZXgudHNcIiB8fCBmaWxlLmZpbGVfcGF0aCA9PT0gXCJpbmRleC50c3hcIixcbiAgICApXG5cbiAgICBjb25zdCBzbmlwcGV0ID0ge1xuICAgICAgc25pcHBldF9pZDogcGtnLnBhY2thZ2VfaWQsXG4gICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHBrZy5sYXRlc3RfcGFja2FnZV9yZWxlYXNlX2lkIHx8IFwiXCIsXG4gICAgICB1bnNjb3BlZF9uYW1lOiBwa2cudW5zY29wZWRfbmFtZSxcbiAgICAgIG5hbWU6IHBrZy5uYW1lLFxuICAgICAgb3duZXJfbmFtZTogcGtnLm93bmVyX2dpdGh1Yl91c2VybmFtZSB8fCBcIlwiLFxuICAgICAgZGVzY3JpcHRpb246IHBrZy5kZXNjcmlwdGlvbiB8fCBcIlwiLFxuICAgICAgc25pcHBldF90eXBlOiBwa2cuc25pcHBldF90eXBlIHx8IFwiYm9hcmRcIixcbiAgICAgIGNvZGU6IGNvZGVGaWxlPy5jb250ZW50X3RleHQgfHwgXCJcIixcbiAgICAgIGR0czpcbiAgICAgICAgcGFja2FnZUZpbGVzLmZpbmQoXG4gICAgICAgICAgKGZpbGU6IHsgZmlsZV9wYXRoOiBzdHJpbmcgfSkgPT5cbiAgICAgICAgICAgIGZpbGUuZmlsZV9wYXRoID09PSBcIi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgICAgKT8uY29udGVudF90ZXh0IHx8IFwiXCIsXG4gICAgICBjb21waWxlZF9qczpcbiAgICAgICAgcGFja2FnZUZpbGVzLmZpbmQoXG4gICAgICAgICAgKGZpbGU6IHsgZmlsZV9wYXRoOiBzdHJpbmcgfSkgPT4gZmlsZS5maWxlX3BhdGggPT09IFwiL2Rpc3QvaW5kZXguanNcIixcbiAgICAgICAgKT8uY29udGVudF90ZXh0IHx8IFwiXCIsXG4gICAgICBjcmVhdGVkX2F0OiBwa2cuY3JlYXRlZF9hdCxcbiAgICAgIHVwZGF0ZWRfYXQ6IHBrZy51cGRhdGVkX2F0LFxuICAgICAgc3RhcnJlZF9hdDogc3RhclRpbWVzdGFtcCwgLy8gQWRkIHN0YXIgdGltZXN0YW1wXG4gICAgICBzdGFyX2NvdW50OiBjdHguZGIuZ2V0U3RhckNvdW50KHBrZy5wYWNrYWdlX2lkKSxcbiAgICAgIGlzX3N0YXJyZWQ6IGN0eC5hdXRoXG4gICAgICAgID8gY3R4LmRiLmhhc1N0YXJyZWQoY3R4LmF1dGguYWNjb3VudF9pZCwgcGtnLnBhY2thZ2VfaWQpXG4gICAgICAgIDogZmFsc2UsXG4gICAgICB2ZXJzaW9uOiBwa2cubGF0ZXN0X3ZlcnNpb24gfHwgXCIwLjAuMVwiLFxuICAgICAgaXNfcHJpdmF0ZTogcGtnLmlzX3ByaXZhdGUgfHwgZmFsc2UsXG4gICAgICBpc19wdWJsaWM6IHBrZy5pc19wdWJsaWMgfHwgdHJ1ZSxcbiAgICAgIGlzX3VubGlzdGVkOiBwa2cuaXNfdW5saXN0ZWQgfHwgZmFsc2UsXG4gICAgfVxuXG4gICAgcmV0dXJuIHNuaXBwZXRcbiAgfSlcblxuICByZXR1cm4gY3R4Lmpzb24oe1xuICAgIG9rOiB0cnVlLFxuICAgIHNuaXBwZXRzLFxuICB9KVxufSlcbiIsICJpbXBvcnQgeyBhY2NvdW50U25pcHBldFNjaGVtYSB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvZGIvc2NoZW1hXCJcbmltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBzbmlwcGV0X2lkOiB6LnN0cmluZygpLFxuICB9KSxcbiAganNvblJlc3BvbnNlOiB6Lm9iamVjdCh7XG4gICAgb2s6IHouYm9vbGVhbigpLFxuICAgIGlzX3N0YXJyZWQ6IHouYm9vbGVhbigpLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7IHNuaXBwZXRfaWQgfSA9IHJlcS5qc29uQm9keVxuXG4gIC8vIENoZWNrIGlmIHNuaXBwZXQgZXhpc3RzXG4gIGNvbnN0IHNuaXBwZXQgPSBjdHguZGIuZ2V0U25pcHBldEJ5SWQoc25pcHBldF9pZClcbiAgaWYgKCFzbmlwcGV0KSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDQsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwic25pcHBldF9ub3RfZm91bmRcIixcbiAgICAgIG1lc3NhZ2U6IFwiU25pcHBldCBub3QgZm91bmRcIixcbiAgICB9KVxuICB9XG5cbiAgLy8gY2hlY2sgaWYgbm90IGFscmVhZHkgc3RhcnJlZFxuICBpZiAoIWN0eC5kYi5oYXNTdGFycmVkKGN0eC5hdXRoLmFjY291bnRfaWQsIHNuaXBwZXRfaWQpKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwibm90X3N0YXJyZWRcIixcbiAgICAgIG1lc3NhZ2U6IFwiWW91IGhhdmUgbm90IHN0YXJyZWQgdGhpcyBzbmlwcGV0XCIsXG4gICAgfSlcbiAgfVxuXG4gIC8vIFJlbW92ZSBzdGFyXG4gIGN0eC5kYi5yZW1vdmVTdGFyKGN0eC5hdXRoLmFjY291bnRfaWQsIHNuaXBwZXRfaWQpXG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgICBpc19zdGFycmVkOiBmYWxzZSxcbiAgfSlcbn0pXG4iLCAiaW1wb3J0IHsgd2l0aFJvdXRlU3BlYyB9IGZyb20gXCJmYWtlLXNuaXBwZXRzLWFwaS9saWIvbWlkZGxld2FyZS93aXRoLXdpbnRlci1zcGVjXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHNuaXBwZXRTY2hlbWEgfSBmcm9tIFwiZmFrZS1zbmlwcGV0cy1hcGkvbGliL2RiL3NjaGVtYVwiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJHRVRcIl0sXG4gIGF1dGg6IFwibm9uZVwiLFxuICBxdWVyeVBhcmFtczogei5vYmplY3Qoe1xuICAgIHE6IHouc3RyaW5nKCksXG4gIH0pLFxuICBqc29uUmVzcG9uc2U6IHoub2JqZWN0KHtcbiAgICBzbmlwcGV0czogei5hcnJheShzbmlwcGV0U2NoZW1hKSxcbiAgfSksXG59KShhc3luYyAocmVxLCBjdHgpID0+IHtcbiAgY29uc3QgeyBxIH0gPSByZXEucXVlcnlcbiAgY29uc3Qgc25pcHBldHMgPSBjdHguZGIuc2VhcmNoU25pcHBldHMocSlcbiAgcmV0dXJuIGN0eC5qc29uKHsgc25pcHBldHMgfSlcbn0pXG4iLCAiaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgc25pcHBldFNjaGVtYSB9IGZyb20gXCIuLi8uLi8uLi9saWIvZGIvc2NoZW1hXCJcbmltcG9ydCB7IHdpdGhSb3V0ZVNwZWMgfSBmcm9tIFwiLi4vLi4vLi4vbGliL21pZGRsZXdhcmUvd2l0aC13aW50ZXItc3BlY1wiXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZVNwZWMoe1xuICBtZXRob2RzOiBbXCJQT1NUXCJdLFxuICBhdXRoOiBcInNlc3Npb25cIixcbiAganNvbkJvZHk6IHoub2JqZWN0KHtcbiAgICBzbmlwcGV0X2lkOiB6LnN0cmluZygpLFxuICAgIGNvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHVuc2NvcGVkX25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkdHM6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBjb21waWxlZF9qczogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKCksXG4gICAgY2lyY3VpdF9qc29uOiB6LmFycmF5KHoucmVjb3JkKHouYW55KCkpKS5vcHRpb25hbCgpLm51bGxhYmxlKCksXG4gICAgbWFudWFsX2VkaXRzX2pzb25fY29udGVudDogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKCksXG4gICAgc25pcHBldF90eXBlOiB6LmVudW0oW1wiYm9hcmRcIiwgXCJwYWNrYWdlXCIsIFwibW9kZWxcIiwgXCJmb290cHJpbnRcIl0pLm9wdGlvbmFsKCksXG4gICAgaXNfcHJpdmF0ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBpc191bmxpc3RlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIGpzb25SZXNwb25zZTogei5vYmplY3Qoe1xuICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgICBzbmlwcGV0OiBzbmlwcGV0U2NoZW1hLFxuICB9KSxcbn0pKGFzeW5jIChyZXEsIGN0eCkgPT4ge1xuICBjb25zdCB7XG4gICAgc25pcHBldF9pZCxcbiAgICBjb2RlLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIHVuc2NvcGVkX25hbWUsXG4gICAgZHRzLFxuICAgIGNvbXBpbGVkX2pzLFxuICAgIGNpcmN1aXRfanNvbixcbiAgICBzbmlwcGV0X3R5cGUsXG4gICAgbWFudWFsX2VkaXRzX2pzb25fY29udGVudCxcbiAgICBpc19wcml2YXRlLFxuICAgIGlzX3VubGlzdGVkLFxuICB9ID0gcmVxLmpzb25Cb2R5XG5cbiAgY29uc3QgcGFja2FnZUluZGV4ID0gY3R4LmRiLnBhY2thZ2VzLmZpbmRJbmRleChcbiAgICAocykgPT4gcy5wYWNrYWdlX2lkID09PSBzbmlwcGV0X2lkLFxuICApXG5cbiAgaWYgKHBhY2thZ2VJbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gY3R4LmVycm9yKDQwNCwge1xuICAgICAgZXJyb3JfY29kZTogXCJzbmlwcGV0X25vdF9mb3VuZFwiLFxuICAgICAgbWVzc2FnZTogXCJTbmlwcGV0IG5vdCBmb3VuZFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBfcGFja2FnZSA9IGN0eC5kYi5wYWNrYWdlc1twYWNrYWdlSW5kZXhdXG4gIGNvbnN0IHBhY2thZ2VSZWxlYXNlID0gY3R4LmRiLnBhY2thZ2VSZWxlYXNlcy5maW5kKFxuICAgIChyKSA9PiByLnBhY2thZ2VfcmVsZWFzZV9pZCA9PT0gX3BhY2thZ2UubGF0ZXN0X3BhY2thZ2VfcmVsZWFzZV9pZCxcbiAgKVxuICBjb25zdCBwYWNrYWdlRmlsZXMgPSBjdHguZGIucGFja2FnZUZpbGVzLmZpbHRlcihcbiAgICAoZikgPT4gZi5wYWNrYWdlX3JlbGVhc2VfaWQgPT09IHBhY2thZ2VSZWxlYXNlPy5wYWNrYWdlX3JlbGVhc2VfaWQsXG4gIClcbiAgY29uc3QgY29kZUZpbGUgPSBwYWNrYWdlRmlsZXMuZmluZChcbiAgICAoZikgPT4gZi5maWxlX3BhdGggPT09IFwiaW5kZXgudHN4XCIgfHwgZi5maWxlX3BhdGggPT09IFwiaW5kZXgudHNcIixcbiAgKVxuICBjb25zdCBkdHNGaWxlID0gcGFja2FnZUZpbGVzLmZpbmQoKGYpID0+IGYuZmlsZV9wYXRoID09PSBcIi9kaXN0L2luZGV4LmQudHNcIilcbiAgY29uc3QgY29tcGlsZWRKc0ZpbGUgPSBwYWNrYWdlRmlsZXMuZmluZChcbiAgICAoZikgPT4gZi5maWxlX3BhdGggPT09IFwiL2Rpc3QvaW5kZXguanNcIixcbiAgKVxuICBjb25zdCBtYW51YWxFZGl0c0pzb25GaWxlID0gcGFja2FnZUZpbGVzLmZpbmQoXG4gICAgKGYpID0+IGYuZmlsZV9wYXRoID09PSBcIm1hbnVhbC1lZGl0cy5qc29uXCIsXG4gIClcbiAgY29uc3QgY2lyY3VpdEpzb25GaWxlID0gcGFja2FnZUZpbGVzLmZpbmQoXG4gICAgKGYpID0+IGYuZmlsZV9wYXRoID09PSBcIi9kaXN0L2NpcmN1aXQuanNvblwiLFxuICApXG5cbiAgaWYgKF9wYWNrYWdlLm93bmVyX2dpdGh1Yl91c2VybmFtZSAhPT0gY3R4LmF1dGguZ2l0aHViX3VzZXJuYW1lKSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig0MDMsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwiZm9yYmlkZGVuXCIsXG4gICAgICBtZXNzYWdlOiBcIllvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gdXBkYXRlIHRoaXMgc25pcHBldFwiLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCB1cGRhdGVkU25pcHBldCA9IGN0eC5kYi51cGRhdGVTbmlwcGV0KHNuaXBwZXRfaWQsIHtcbiAgICBjb2RlOiBjb2RlID8/IGNvZGVGaWxlPy5jb250ZW50X3RleHQgPz8gXCJcIixcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gPz8gX3BhY2thZ2UuZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICB1bnNjb3BlZF9uYW1lOiB1bnNjb3BlZF9uYW1lID8/IF9wYWNrYWdlLnVuc2NvcGVkX25hbWUsXG4gICAgbmFtZTogdW5zY29wZWRfbmFtZVxuICAgICAgPyBgJHtjdHguYXV0aC5naXRodWJfdXNlcm5hbWV9LyR7dW5zY29wZWRfbmFtZX1gXG4gICAgICA6IF9wYWNrYWdlLm5hbWUsXG4gICAgZHRzOiBkdHMgPz8gZHRzRmlsZT8uY29udGVudF90ZXh0ID8/IFwiXCIsXG4gICAgY29tcGlsZWRfanM6IGNvbXBpbGVkX2pzID8/IGNvbXBpbGVkSnNGaWxlPy5jb250ZW50X3RleHQgPz8gXCJcIixcbiAgICBtYW51YWxfZWRpdHNfanNvbl9jb250ZW50OlxuICAgICAgbWFudWFsX2VkaXRzX2pzb25fY29udGVudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gbWFudWFsX2VkaXRzX2pzb25fY29udGVudFxuICAgICAgICA6IChtYW51YWxFZGl0c0pzb25GaWxlPy5jb250ZW50X3RleHQgPz8gXCJcIiksXG4gICAgY2lyY3VpdF9qc29uOlxuICAgICAgY2lyY3VpdF9qc29uID8/XG4gICAgICAoY2lyY3VpdEpzb25GaWxlPy5jb250ZW50X3RleHRcbiAgICAgICAgPyBKU09OLnBhcnNlKGNpcmN1aXRKc29uRmlsZS5jb250ZW50X3RleHQpXG4gICAgICAgIDogW10pLFxuICAgIHNuaXBwZXRfdHlwZTogc25pcHBldF90eXBlID8/IF9wYWNrYWdlLnNuaXBwZXRfdHlwZSxcbiAgICBpc19wcml2YXRlOiBpc19wcml2YXRlID8/IF9wYWNrYWdlLmlzX3ByaXZhdGUgPz8gZmFsc2UsXG4gICAgaXNfdW5saXN0ZWQ6IGlzX3VubGlzdGVkID8/IF9wYWNrYWdlLmlzX3VubGlzdGVkID8/IGZhbHNlLFxuICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgfSlcblxuICBpZiAoIXVwZGF0ZWRTbmlwcGV0KSB7XG4gICAgcmV0dXJuIGN0eC5lcnJvcig1MDAsIHtcbiAgICAgIGVycm9yX2NvZGU6IFwidXBkYXRlX2ZhaWxlZFwiLFxuICAgICAgbWVzc2FnZTogXCJGYWlsZWQgdG8gdXBkYXRlIHNuaXBwZXRcIixcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICBvazogdHJ1ZSxcbiAgICBzbmlwcGV0OiB1cGRhdGVkU25pcHBldCxcbiAgfSlcbn0pXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsU0FBUSx1QkFBc0I7QUFDOUIsU0FBUyxvQ0FBb0M7OztBQ0Q3QyxTQUFTLDRCQUE0Qjs7O0FDQXJDLFNBQVMsa0JBQWtCO0FBRTNCLFNBQVMsYUFBYTtBQUN0QixTQUFTLG1CQUFtQjtBQUU1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YWNrYWdlRmlsZXMiLCAicGtnIiwgImFjY291bnQiLCAib3JnIiwgImRlY29kZUp3dCIsICJrbGV1ciIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgImdldF9kZWZhdWx0IiwgInoiLCAieiIsICJ6IiwgImFueXJvdXRlX2RlZmF1bHQiLCAieiIsICJ6IiwgImNyZWF0ZV9kZWZhdWx0IiwgInoiLCAiQnVmZmVyIiwgInoiLCAicmVxdWVzdFNjaGVtYSIsICJCdWZmZXIiLCAieiIsICJjcmVhdGVfZGVmYXVsdCIsICJ6IiwgImdldF9kZWZhdWx0IiwgInoiLCAibGlzdF9kZWZhdWx0IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJnZXRfZGVmYXVsdCIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAiY3JlYXRlX2RlZmF1bHQiLCAieiIsICJnZXRfZGVmYXVsdCIsICJ6IiwgInoiLCAiY3JlYXRlX2RlZmF1bHQiLCAieiIsICJnZXRfZGVmYXVsdCIsICJ6IiwgInoiLCAibGlzdF9kZWZhdWx0IiwgInoiLCAieiIsICJ6IiwgImNyZWF0ZV9kZWZhdWx0IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJnZXRfZGVmYXVsdCIsICJ6IiwgInoiLCAieiIsICJjcmVhdGVfZGVmYXVsdCIsICJ6IiwgImdldF9kZWZhdWx0IiwgInoiLCAibGlzdF9kZWZhdWx0IiwgInoiLCAieiIsICJ6IiwgInoiLCAibGlzdF9kZWZhdWx0IiwgInoiLCAieiIsICJ6IiwgInoiLCAidXBkYXRlX2RlZmF1bHQiLCAieiIsICJ6IiwgInoiLCAieiIsICJnZXRfZGVmYXVsdCIsICJ6IiwgInoiLCAibGlzdF9kZWZhdWx0IiwgInoiLCAieiIsICJ6IiwgInJvdXRlU3BlYyIsICJjcmVhdGVfZGVmYXVsdCIsICJ6IiwgImRlbGV0ZV9kZWZhdWx0IiwgInoiLCAieiIsICJyb3V0ZVNwZWMiLCAieiIsICJyb3V0ZVNwZWMiLCAieiIsICJnZXRfZGVmYXVsdCIsICJ6IiwgInJvdXRlU3BlYyIsICJ6IiwgImxpc3RfZGVmYXVsdCIsICJ6IiwgImNyZWF0ZV9kZWZhdWx0IiwgInoiLCAiZ2V0X2RlZmF1bHQiLCAieiIsICJsaXN0X2RlZmF1bHQiLCAieiIsICJ6IiwgInVwZGF0ZV9kZWZhdWx0IiwgInJlbGVhc2UiLCAieiIsICJwa2ciLCAieiIsICJjcmVhdGVfZGVmYXVsdCIsICJ6IiwgImRlbGV0ZV9kZWZhdWx0IiwgInoiLCAieiIsICJnZXRfZGVmYXVsdCIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAibGlzdF9kZWZhdWx0IiwgInoiLCAicGtnIiwgInoiLCAic2VhcmNoX2RlZmF1bHQiLCAieiIsICJ6IiwgInoiLCAidXBkYXRlX2RlZmF1bHQiLCAieiIsICJ6IiwgInoiLCAiZGVsZXRlX2RlZmF1bHQiLCAieiIsICJhZGRfc3Rhcl9kZWZhdWx0IiwgInoiLCAiY3JlYXRlX2RlZmF1bHQiLCAieiIsICJkZWxldGVfZGVmYXVsdCIsICJ6IiwgImRvd25sb2FkX2RlZmF1bHQiLCAieiIsICJjb252ZXJ0Q2lyY3VpdEpzb25Ub1NjaGVtYXRpY1N2ZyIsICJjb252ZXJ0Q2lyY3VpdEpzb25Ub1BjYlN2ZyIsICJ6IiwgImdldF9kZWZhdWx0IiwgImNvbnZlcnRDaXJjdWl0SnNvblRvQXNzZW1ibHlTdmciLCAiY29udmVydENpcmN1aXRKc29uVG9QY2JTdmciLCAiY29udmVydENpcmN1aXRKc29uVG9TY2hlbWF0aWNTdmciLCAieiIsICJjb252ZXJ0Q2lyY3VpdEpzb25Ub1NjaGVtYXRpY1N2ZyIsICJjb252ZXJ0Q2lyY3VpdEpzb25Ub1BjYlN2ZyIsICJjb252ZXJ0Q2lyY3VpdEpzb25Ub0Fzc2VtYmx5U3ZnIiwgInoiLCAibGlzdF9sYXRlc3RfZGVmYXVsdCIsICJ6IiwgInoiLCAibGlzdF90cmVuZGluZ19kZWZhdWx0IiwgInoiLCAieiIsICJsaXN0X2RlZmF1bHQiLCAieiIsICJ6IiwgInJlbW92ZV9zdGFyX2RlZmF1bHQiLCAieiIsICJzZWFyY2hfZGVmYXVsdCIsICJ6IiwgInoiLCAidXBkYXRlX2RlZmF1bHQiLCAieiIsICJnZXRfZGVmYXVsdCIsICJhbnlyb3V0ZV9kZWZhdWx0IiwgImNyZWF0ZV9kZWZhdWx0IiwgImxpc3RfZGVmYXVsdCIsICJ1cGRhdGVfZGVmYXVsdCIsICJkZWxldGVfZGVmYXVsdCIsICJzZWFyY2hfZGVmYXVsdCIsICJhZGRfc3Rhcl9kZWZhdWx0IiwgImRvd25sb2FkX2RlZmF1bHQiLCAibGlzdF9sYXRlc3RfZGVmYXVsdCIsICJsaXN0X3RyZW5kaW5nX2RlZmF1bHQiLCAicmVtb3ZlX3N0YXJfZGVmYXVsdCJdCn0K
|