nextlove 2.18.0 → 2.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -40,6 +40,12 @@ interface RouteSpec<Auth extends string | string[] = string[], Methods extends H
40
40
  */
41
41
  sdkReturnValue?: string | string[];
42
42
  onMultipleAuthMiddlewareFailures?: (errors: unknown[]) => void;
43
+ /**
44
+ * Route-specific maxDuration (in seconds).
45
+ * Overrides the global default if set.
46
+ * This is a Next.js route segment config.
47
+ */
48
+ maxDuration?: number;
43
49
  }
44
50
  type MiddlewareChainOutput<MWChain extends readonly Middleware<any, any>[]> = MWChain extends readonly [] ? {} : MWChain extends readonly [infer First, ...infer Rest] ? First extends Middleware<infer T, any> ? T & (Rest extends readonly Middleware<any, any>[] ? MiddlewareChainOutput<Rest> : never) : never : never;
45
51
  type AuthMiddlewares = {
@@ -65,6 +71,12 @@ interface SetupParams<AuthMW extends AuthMiddlewares = AuthMiddlewares, GlobalMW
65
71
  * You can inspect the errors and throw a more generic error in this hook if you want.
66
72
  */
67
73
  onMultipleAuthMiddlewareFailures?: (errors: unknown[]) => void;
74
+ /**
75
+ * Global default maxDuration (in seconds) for all routes.
76
+ * Individual routes can override this value.
77
+ * This is a Next.js route segment config.
78
+ */
79
+ maxDuration?: number;
68
80
  }
69
81
  declare const defaultMiddlewareMap: {
70
82
  readonly none: (next: any) => any;
package/dist/index.js CHANGED
@@ -464,10 +464,12 @@ var createWithRouteSpec = (setupParams) => {
464
464
  ok: import_zod2.z.boolean()
465
465
  } : {},
466
466
  supportedArrayFormats = DEFAULT_ARRAY_FORMATS,
467
- onMultipleAuthMiddlewareFailures
467
+ onMultipleAuthMiddlewareFailures,
468
+ maxDuration: globalMaxDuration
468
469
  } = setupParams;
469
470
  const withRouteSpec = (spec) => {
470
471
  const createRouteExport = (userDefinedRouteFn) => {
472
+ var _a;
471
473
  const rootRequestHandler = async (req, res) => {
472
474
  authMiddlewareMap["none"] = (next) => next;
473
475
  const authMiddlewares = (Array.isArray(spec.auth) ? spec.auth : [spec.auth]).map((authType) => [authType, authMiddlewareMap[authType]]);
@@ -475,8 +477,8 @@ var createWithRouteSpec = (setupParams) => {
475
477
  if (undefinedAuthType)
476
478
  throw new Error(`Unknown auth type: ${undefinedAuthType}`);
477
479
  const firstAuthMiddlewareThatSucceeds = (next) => async (req2, res2) => {
478
- var _a;
479
- const handleMultipleAuthMiddlewareFailures = (_a = spec.onMultipleAuthMiddlewareFailures) != null ? _a : onMultipleAuthMiddlewareFailures;
480
+ var _a2;
481
+ const handleMultipleAuthMiddlewareFailures = (_a2 = spec.onMultipleAuthMiddlewareFailures) != null ? _a2 : onMultipleAuthMiddlewareFailures;
480
482
  for (const [name, middleware] of authMiddlewares) {
481
483
  let didAuthMiddlewareThrow = true;
482
484
  try {
@@ -522,6 +524,10 @@ var createWithRouteSpec = (setupParams) => {
522
524
  };
523
525
  rootRequestHandler._setupParams = setupParams;
524
526
  rootRequestHandler._routeSpec = spec;
527
+ const maxDuration = (_a = spec.maxDuration) != null ? _a : globalMaxDuration;
528
+ if (maxDuration !== void 0) {
529
+ rootRequestHandler.maxDuration = maxDuration;
530
+ }
525
531
  return rootRequestHandler;
526
532
  };
527
533
  createRouteExport._setupParams = setupParams;
@@ -547,4 +553,4 @@ var createWithRouteSpec = (setupParams) => {
547
553
  withExceptionHandling,
548
554
  wrappers
549
555
  });
550
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmUvaHR0cC1leGNlcHRpb25zLnRzIiwgIi4uL3NyYy9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmUvd2l0aC1leGNlcHRpb24taGFuZGxpbmcudHMiLCAiLi4vc3JjL25leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZS93aXRoLW9rLXN0YXR1cy50cyIsICIuLi9zcmMvbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlL2luZGV4LnRzIiwgIi4uL3NyYy93cmFwcGVycy9pbmRleC50cyIsICIuLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtbWV0aG9kcy50cyIsICIuLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtdmFsaWRhdGlvbi50cyIsICIuLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgKiBmcm9tIFwiLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuZXhwb3J0ICogZnJvbSBcIi4vd2l0aC1yb3V0ZS1zcGVjXCJcbmV4cG9ydCB7IHdyYXBwZXJzIH0gZnJvbSBcIi4vd3JhcHBlcnNcIlxuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIlxuIiwgImV4cG9ydCB0eXBlIEh0dHBFeGNlcHRpb25NZXRhZGF0YSA9IHtcbiAgdHlwZTogc3RyaW5nXG4gIG1lc3NhZ2U6IHN0cmluZ1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbn0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXG5leHBvcnQgaW50ZXJmYWNlIFRocm93aW5nT3B0aW9ucyB7XG4gIGpzb24/OiBib29sZWFuXG59XG5cbi8qKlxuICogVGhyb3cgSHR0cEV4Y2VwdGlvbnMgaW5zaWRlIEFQSSBlbmRwb2ludHMgdG8gZ2VuZXJhdGUgbmljZSBlcnJvciBtZXNzYWdlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGlmIChiYWRfc291cHMuaW5jbHVkZXMoc291cF9wYXJhbSkpIHtcbiAqICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oNDAwLCB7XG4gKiAgICAgIHR5cGU6IFwiY2FudF9tYWtlX3NvdXBcIixcbiAqICAgICAgbWVzc2FnZTogXCJTb3VwIHdhcyB0b28gZGlmZmljdWx0LCBwbGVhc2Ugc3BlY2lmeSBhIGRpZmZlcmVudCBzb3VwXCJcbiAqICAgIH0pXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiovXG5leHBvcnQgY2xhc3MgSHR0cEV4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgb3B0aW9uczogVGhyb3dpbmdPcHRpb25zXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXR1czogbnVtYmVyLFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIobWV0YWRhdGEubWVzc2FnZSlcblxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3RvcilcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID8/IHsganNvbjogdHJ1ZSB9XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYEh0dHBFeGNlcHRpb246ICR7dGhpcy5zdGF0dXN9LCAke3RoaXMubWV0YWRhdGEubWVzc2FnZX0gKCR7dGhpcy5tZXRhZGF0YS50eXBlfSlgXG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvdyBCYWRSZXF1ZXN0RXhjZXB0aW9uIGluc2lkZSBBUEkgZW5kcG9pbnRzIHRoYXQgd2VyZSBwcm92aWRlZCBpbmNvcnJlY3RcbiAqIHBhcmFtZXRlcnMgb3IgYm9keVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGlmIChiYWRfc291cHMuaW5jbHVkZXMoc291cF9wYXJhbSkpIHtcbiAqICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oe1xuICogICAgIHR5cGU6IFwiY2FudF9tYWtlX3NvdXBcIixcbiAqICAgICBtZXNzYWdlOiBcIlNvdXAgd2FzIHRvbyBkaWZmaWN1bHQsIHBsZWFzZSBzcGVjaWZ5IGEgZGlmZmVyZW50IHNvdXBcIixcbiAqICAgfSlcbiAqIH1cbiAqIGBgYFxuICpcbiAqKi9cbmV4cG9ydCBjbGFzcyBCYWRSZXF1ZXN0RXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNDAwLCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5hdXRob3JpemVkRXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNDAxLCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXV0aE1ldGhvZERvZXNOb3RBcHBseUV4Y2VwdGlvbiBleHRlbmRzIEh0dHBFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSA9IHtcbiAgICAgIHR5cGU6IFwiYXV0aF9tZXRob2RfZG9lc19ub3RfYXBwbHlcIixcbiAgICAgIG1lc3NhZ2U6IFwiQXV0aCBtZXRob2QgZG9lcyBub3QgYXBwbHlcIixcbiAgICB9LFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNDAxLCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90Rm91bmRFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1ldGFkYXRhOiBIdHRwRXhjZXB0aW9uTWV0YWRhdGEsXG4gICAgb3B0aW9ucz86IFRocm93aW5nT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcig0MDQsIG1ldGFkYXRhLCBvcHRpb25zKVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiBleHRlbmRzIEh0dHBFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSA9IHtcbiAgICAgIHR5cGU6IFwibm90X2ltcGxlbWVudGVkXCIsXG4gICAgICBtZXNzYWdlOiBcIk5vdCBpbXBsZW1lbnRlZFwiLFxuICAgIH0sXG4gICAgb3B0aW9ucz86IFRocm93aW5nT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcig1MDEsIG1ldGFkYXRhLCBvcHRpb25zKVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZXRob2ROb3RBbGxvd2VkRXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNDA1LCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW50ZXJuYWxTZXJ2ZXJFcnJvckV4Y2VwdGlvbiBleHRlbmRzIEh0dHBFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSxcbiAgICBvcHRpb25zPzogVGhyb3dpbmdPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKDUwMCwgbWV0YWRhdGEsIG9wdGlvbnMpXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBOZXh0QXBpUmVxdWVzdCwgTmV4dEFwaVJlc3BvbnNlIH0gZnJvbSBcIm5leHRcIlxuaW1wb3J0IHsgSHR0cEV4Y2VwdGlvbiB9IGZyb20gXCIuL2h0dHAtZXhjZXB0aW9uc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aEV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyB7XG4gIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yLCByZXE6IE5leHRBcGlSZXF1ZXN0KSA9PiB2b2lkXG4gIGdldEVycm9yQ29udGV4dD86IChcbiAgICByZXE6IE5leHRBcGlSZXF1ZXN0LFxuICAgIGVycm9yOiBFcnJvclxuICApID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG59XG5cbmNvbnN0IHdpdGhFeGNlcHRpb25IYW5kbGluZyA9XG4gIChvcHRpb25zOiBXaXRoRXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zID0ge30pID0+XG4gIChuZXh0OiAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD4pID0+XG4gIGFzeW5jIChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuZXh0KHJlcSwgcmVzKVxuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsZXQgZXJyb3JDb250ZXh0OiBhbnkgPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucy5vbkVycm9yKSB7XG4gICAgICAgIG9wdGlvbnMub25FcnJvcihlcnJvciBhcyBFcnJvciwgcmVxKVxuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBlcnJvckNvbnRleHQuc3RhY2sgPSBlcnJvci5zdGFja1xuICAgICAgfVxuXG4gICAgICBlcnJvckNvbnRleHQgPSBvcHRpb25zLmdldEVycm9yQ29udGV4dFxuICAgICAgICA/IG9wdGlvbnMuZ2V0RXJyb3JDb250ZXh0KHJlcSwgZXJyb3JDb250ZXh0KVxuICAgICAgICA6IGVycm9yQ29udGV4dFxuXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXhjZXB0aW9uKSB7XG4gICAgICAgIGlmIChlcnJvci5vcHRpb25zLmpzb24pIHtcbiAgICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cykuanNvbih7XG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAuLi5lcnJvci5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgLi4uZXJyb3JDb250ZXh0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKS5lbmQoZXJyb3IubWV0YWRhdGEubWVzc2FnZSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBuZXcgSHR0cEV4Y2VwdGlvbig1MDAsIHtcbiAgICAgICAgICB0eXBlOiBcImludGVybmFsX3NlcnZlcl9lcnJvclwiLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCIsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAuLi5mb3JtYXR0ZWRFcnJvci5tZXRhZGF0YSxcbiAgICAgICAgICAgIC4uLmVycm9yQ29udGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aEV4Y2VwdGlvbkhhbmRsaW5nXG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcblxuZXhwb3J0IGludGVyZmFjZSBXaXRoT2tTdGF0dXNPcHRpb25zIHtcbiAgYWRkSWY/OiAocmVxOiBOZXh0QXBpUmVxdWVzdCkgPT4gYm9vbGVhblxufVxuXG5jb25zdCB3aXRoT2tTdGF0dXMgPVxuICAob3B0aW9uczogV2l0aE9rU3RhdHVzT3B0aW9ucyA9IHt9KSA9PlxuICAobmV4dDogKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+KSA9PlxuICBhc3luYyAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IHtcbiAgICAvLyBQYXRjaCAuanNvbigpXG4gICAgY29uc3Qgb3JpZ2luYWxKc29uID0gcmVzLmpzb25cblxuICAgIHJlcy5qc29uID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGNvbnN0IG9rID0gcmVzLnN0YXR1c0NvZGUgPj0gMjAwICYmIHJlcy5zdGF0dXNDb2RlIDwgMzAwXG4gICAgICBjb25zdCBzaG91bGRJbmNsdWRlU3RhdHVzID0gb3B0aW9ucy5hZGRJZiA/IG9wdGlvbnMuYWRkSWYocmVxKSA6IHRydWVcblxuICAgICAgaWYgKHNob3VsZEluY2x1ZGVTdGF0dXMpIHtcbiAgICAgICAgb3JpZ2luYWxKc29uLmNhbGwodGhpcywge1xuICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgb2ssXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcmlnaW5hbEpzb24uY2FsbCh0aGlzLCBkYXRhKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IG5leHQocmVxLCByZXMpXG4gIH1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aE9rU3RhdHVzXG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB1bndyYXBwZWRXaXRoRXhjZXB0aW9uSGFuZGxpbmcsIHtcbiAgV2l0aEV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyxcbn0gZnJvbSBcIi4vd2l0aC1leGNlcHRpb24taGFuZGxpbmdcIlxuaW1wb3J0IHdpdGhPa1N0YXR1cywgeyBXaXRoT2tTdGF0dXNPcHRpb25zIH0gZnJvbSBcIi4vd2l0aC1vay1zdGF0dXNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIEV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyB7XG4gIGFkZE9rU3RhdHVzPzogYm9vbGVhblxuICBva1N0YXR1c09wdGlvbnM/OiBXaXRoT2tTdGF0dXNPcHRpb25zXG4gIGV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucz86IFdpdGhFeGNlcHRpb25IYW5kbGluZ09wdGlvbnNcbn1cblxuZXhwb3J0IGNvbnN0IHdpdGhFeGNlcHRpb25IYW5kbGluZyA9XG4gICh7XG4gICAgYWRkT2tTdGF0dXMgPSBmYWxzZSxcbiAgICBva1N0YXR1c09wdGlvbnMsXG4gICAgZXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zLFxuICB9OiBFeGNlcHRpb25IYW5kbGluZ09wdGlvbnMgPSB7fSkgPT5cbiAgKG5leHQ6IChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPikgPT5cbiAgKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKGFkZE9rU3RhdHVzKSB7XG4gICAgICByZXR1cm4gd2l0aE9rU3RhdHVzKG9rU3RhdHVzT3B0aW9ucykoXG4gICAgICAgIHVud3JhcHBlZFdpdGhFeGNlcHRpb25IYW5kbGluZyhleGNlcHRpb25IYW5kbGluZ09wdGlvbnMpKG5leHQpXG4gICAgICApKHJlcSwgcmVzKVxuICAgIH1cblxuICAgIHJldHVybiB1bndyYXBwZWRXaXRoRXhjZXB0aW9uSGFuZGxpbmcoZXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zKShuZXh0KShcbiAgICAgIHJlcSxcbiAgICAgIHJlc1xuICAgIClcbiAgfVxuXG5leHBvcnQgKiBmcm9tIFwiLi9odHRwLWV4Y2VwdGlvbnNcIlxuIiwgImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QgYXMgUmVxLCBOZXh0QXBpUmVzcG9uc2UgYXMgUmVzIH0gZnJvbSBcIm5leHRcIlxuLypcblxuV3JhcHMgYSBmdW5jdGlvbiBpbiBsYXllcnMgb2Ygb3RoZXIgZnVuY3Rpb25zLCB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBpbnB1dC9vdXRwdXRcbnR5cGUuIFRoZSBvdXRwdXQgb2Ygd3JhcHBlcnMgd2lsbCBhbHdheXMgaGF2ZSB0aGUgdHlwZSBvZiBpdCdzIGxhc3QgcGFyYW1ldGVyXG4odGhlIHdyYXBwZWQgZnVuY3Rpb24pXG5cblRoaXMgZnVuY3Rpb24gdHVybnMgdGhpcyB0eXBlIG9mIGNvbXBvc2l0aW9uLi4uXG5cbmxvZ2dlci53aXRoQ29udGV4dChcInNvbWVjb250ZXh0XCIpKFxuICBhc3luYyAoYSwgYikgPT4ge1xuICAgIHJldHVybiBhXG4gIH1cbilcblxuSW50by4uLlxuXG53cmFwcGVycyhcbiAgbG9nZ2VyLndpdGhDb250ZXh0KFwic29tZWNvbnRleHRcIiksXG4gIGFzeW5jIChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGFcbiAgfVxuKVxuXG5IYXZpbmcgdGhpcyBhcyBhIHV0aWxpdHkgbWV0aG9kIGhlbHBzIHByZXNlcnZlIHR5cGVzLCB3aGljaCBvdGhlcndpc2UgY2FuIGdldFxubWVzc2VkIHVwIGJ5IHRoZSBtaWRkbGV3YXJlcy4gSXQgYWxzbyBjYW4gbWFrZSB0aGUgY29kZSBjbGVhbmVyIHdoZXJlIHRoZXJlIGFyZVxubXVsdGlwbGUgd3JhcHBlcnMuXG5cbiMjIEVYQU1QTEVTXG5cbkluIHRoZSBjb250ZXh0IG9mIHJlcXVlc3QgbWlkZGxld2FyZSB5b3UgbWlnaHQgd3JpdGUgc29tZXRoaW5nIGxpa2UgdGhpcy4uLlxuXG5jb25zdCB3aXRoUmVxdWVzdExvZ2dpbmdNaWRkbGV3YXJlID0gKG5leHQpID0+IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICBjb25zb2xlLmxvZyhgR09UIFJFUVVFU1QgJHtyZXEubWV0aG9kfSAke3JlcS5wYXRofWApXG4gIHJldHVybiBuZXh0KHJlcSwgcmVzKVxufVxuXG5IZXJlJ3MgYW4gZXhhbXBsZSBvZiBhIHdyYXBwZXIgdGhhdCB0YWtlcyBzb21lIHBhcmFtZXRlcnMuLi5cblxuY29uc3Qgd2l0aExvZ2dlZEFyZ3VtZW50cyA9XG4gICAgKGxvZ1ByZWZpeDogc3RyaW5nKSA9PlxuICAgIChuZXh0KSA9PlxuICAgIGFzeW5jICguLi5mdW5jQXJncykgPT4ge1xuICAgICAgY29uc29sZS5sb2cobG9nUHJlZml4LCAuLi5mdW5jQXJncylcbiAgICAgIHJldHVybiBuZXh0KC4uLmZ1bmNBcmdzKVxuICAgIH1cblxuKi9cblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZTxULCBEZXAgPSB7fT4gPSAoXG4gIG5leHQ6IChyZXE6IFJlcSAmIERlcCAmIFQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxICYgRGVwICYgVCwgcmVzOiBSZXMpID0+IGFueVxuXG4vLyBTYWZlciBNaWRkbGV3YXJlIHJlcXVpcmVzIHRoZSB1c2Ugb2YgZXh0ZW5kUmVxdWVzdCB0byBlbnN1cmUgdGhhdCB0aGVcbi8vIG5ldyBjb250ZXh0IChUKSB3YXMgYWN0dWFsbHkgYWRkZWQgdG8gdGhlIHJlcXVlc3QuIEl0J3Mga2luZCBvZiBhbm5veWluZ1xuLy8gdG8gdXNlIGluIHByYWN0aWNlLCBzbyB3ZSBkb24ndCB1c2UgaXQgZm9yIG91ciBXcmFwcGVycyAoeWV0KVxuZXhwb3J0IHR5cGUgU2FmZXJNaWRkbGV3YXJlPFQsIERlcCA9IHt9PiA9IChcbiAgbmV4dDogKHJlcTogUmVxICYgRGVwICYgVCwgcmVzOiBSZXMpID0+IGFueVxuKSA9PiAocmVxOiBSZXEgJiBEZXAsIHJlczogUmVzKSA9PiBhbnlcblxuZXhwb3J0IGNvbnN0IGV4dGVuZFJlcXVlc3QgPSA8VCBleHRlbmRzIFJlcSwgSyBleHRlbmRzIHt9PihcbiAgcmVxOiBULFxuICBtZXJnZTogS1xuKTogVCAmIEsgPT4ge1xuICBmb3IgKGNvbnN0IFtrZXksIHZdIG9mIE9iamVjdC5lbnRyaWVzKG1lcmdlKSkge1xuICAgIDsocmVxIGFzIGFueSlba2V5XSA9IHZcbiAgfVxuICByZXR1cm4gcmVxIGFzIGFueVxufVxuXG50eXBlIFdyYXBwZXJzMSA9IDxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBlbmRwb2ludDogKHJlcTogUmVxICYgTXcxUmVxdWVzdENvbnRleHQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbnR5cGUgV3JhcHBlcnMyID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgZW5kcG9pbnQ6IChyZXE6IFJlcSAmIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbi8vIFRPRE8gZmlndXJlIG91dCBob3cgdG8gZG8gYSByZWN1cnNpdmUgZGVmaW5pdGlvbiwgb3Igb25lIHRoYXQgc2ltcGxpZmllc1xuLy8gdGhlc2UgcmVkdW5kYW50IHdyYXBwZXJzXG5cbnR5cGUgV3JhcHBlcnMzID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwLFxuICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgTXczRGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgbXczOiBNaWRkbGV3YXJlPFxuICAgIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzNEZXAgPyBNdzNEZXAgOiBuZXZlclxuICA+LFxuICBlbmRwb2ludDogKFxuICAgIHJlcTogUmVxICYgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCAmIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIHJlczogUmVzXG4gICkgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzNCA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcCxcbiAgTXc0UmVxdWVzdENvbnRleHQsXG4gIE13NERlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgbXc0OiBNaWRkbGV3YXJlPFxuICAgIE13NFJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NERlcFxuICAgICAgPyBNdzREZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczUgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczYgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXAsXG4gIE13NlJlcXVlc3RDb250ZXh0LFxuICBNdzZEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc2OiBNaWRkbGV3YXJlPFxuICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc2RGVwXG4gICAgICA/IE13NkRlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBlbmRwb2ludDogKFxuICAgIHJlcTogUmVxICZcbiAgICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIHJlczogUmVzXG4gICkgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzNyA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcCxcbiAgTXc0UmVxdWVzdENvbnRleHQsXG4gIE13NERlcCxcbiAgTXc1UmVxdWVzdENvbnRleHQsXG4gIE13NURlcCxcbiAgTXc2UmVxdWVzdENvbnRleHQsXG4gIE13NkRlcCxcbiAgTXc3UmVxdWVzdENvbnRleHQsXG4gIE13N0RlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgbXc0OiBNaWRkbGV3YXJlPFxuICAgIE13NFJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NERlcFxuICAgICAgPyBNdzREZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc1OiBNaWRkbGV3YXJlPFxuICAgIE13NVJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc1RGVwXG4gICAgICA/IE13NURlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBtdzY6IE1pZGRsZXdhcmU8XG4gICAgTXc2UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc1UmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzZEZXBcbiAgICAgID8gTXc2RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NzogTWlkZGxld2FyZTxcbiAgICBNdzdSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13N0RlcFxuICAgICAgPyBNdzdEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzdSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVycyA9IFdyYXBwZXJzMSAmXG4gIFdyYXBwZXJzMiAmXG4gIFdyYXBwZXJzMyAmXG4gIFdyYXBwZXJzNCAmXG4gIFdyYXBwZXJzNSAmXG4gIFdyYXBwZXJzNiAmXG4gIFdyYXBwZXJzN1xuXG5leHBvcnQgY29uc3Qgd3JhcHBlcnM6IFdyYXBwZXJzID0gKC4uLndyYXBwZXJzQXJnczogYW55W10pID0+IHtcbiAgY29uc3Qgd3JhcHBlZEZ1bmN0aW9uID0gd3JhcHBlcnNBcmdzW3dyYXBwZXJzQXJncy5sZW5ndGggLSAxXVxuICBjb25zdCBtd3MgPSB3cmFwcGVyc0FyZ3Muc2xpY2UoMCwgLTEpXG5cbiAgbGV0IGxhc3RXcmFwcGVkRnVuY3Rpb24gPSB3cmFwcGVkRnVuY3Rpb25cbiAgZm9yIChsZXQgaSA9IG13cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGxhc3RXcmFwcGVkRnVuY3Rpb24gPSAobXdzW2ldIGFzIGFueSkobGFzdFdyYXBwZWRGdW5jdGlvbilcbiAgfVxuXG4gIHJldHVybiBsYXN0V3JhcHBlZEZ1bmN0aW9uXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdyYXBwZXJzXG4iLCAiaW1wb3J0IHsgTWV0aG9kTm90QWxsb3dlZEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuXG5leHBvcnQgdHlwZSBIVFRQTWV0aG9kcyA9XG4gIHwgXCJHRVRcIlxuICB8IFwiUE9TVFwiXG4gIHwgXCJERUxFVEVcIlxuICB8IFwiUFVUXCJcbiAgfCBcIlBBVENIXCJcbiAgfCBcIkhFQURcIlxuICB8IFwiT1BUSU9OU1wiXG5cbmV4cG9ydCBjb25zdCB3aXRoTWV0aG9kcyA9IChtZXRob2RzOiBIVFRQTWV0aG9kc1tdKSA9PiAobmV4dCkgPT4gKHJlcSwgcmVzKSA9PiB7XG4gIGlmICghbWV0aG9kcy5pbmNsdWRlcyhyZXEubWV0aG9kKSkge1xuICAgIHRocm93IG5ldyBNZXRob2ROb3RBbGxvd2VkRXhjZXB0aW9uKHtcbiAgICAgIHR5cGU6IFwibWV0aG9kX25vdF9hbGxvd2VkXCIsXG4gICAgICBtZXNzYWdlOiBgb25seSAke21ldGhvZHMuam9pbihcIixcIil9IGFjY2VwdGVkYCxcbiAgICB9KVxuICB9XG4gIHJldHVybiBuZXh0KHJlcSwgcmVzKVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoTWV0aG9kc1xuIiwgImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHosIFpvZEZpcnN0UGFydHlUeXBlS2luZCB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiXG5cbmltcG9ydCB7XG4gIEJhZFJlcXVlc3RFeGNlcHRpb24sXG4gIEludGVybmFsU2VydmVyRXJyb3JFeGNlcHRpb24sXG59IGZyb20gXCIuLi8uLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuaW1wb3J0IHsgUXVlcnlBcnJheUZvcm1hdHMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuaW1wb3J0IHsgREVGQVVMVF9BUlJBWV9GT1JNQVRTIH0gZnJvbSBcIi4uXCJcblxuY29uc3QgZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYSA9IChcbiAgaXNab2RFZmZlY3Q6IGJvb2xlYW4sXG4gIHNjaGVtYTogei5ab2RUeXBlQW55XG4pOiB6LlpvZFR5cGVBbnkgfCB6LlpvZE9iamVjdDxhbnk+ID0+IHtcbiAgaWYgKCFpc1pvZEVmZmVjdCkge1xuICAgIHJldHVybiBzY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxuICB9XG5cbiAgbGV0IGN1cnJlbnRTY2hlbWEgPSBzY2hlbWFcblxuICB3aGlsZSAoY3VycmVudFNjaGVtYSBpbnN0YW5jZW9mIHouWm9kRWZmZWN0cykge1xuICAgIGN1cnJlbnRTY2hlbWEgPSBjdXJyZW50U2NoZW1hLl9kZWYuc2NoZW1hXG4gIH1cblxuICByZXR1cm4gY3VycmVudFNjaGVtYSBhcyB6LlpvZE9iamVjdDxhbnk+XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgY29ycmVjdCBzY2hlbWEgZnJvbSBhIFpvZEVmZmVjdCB8IFpvZERlZmF1bHQgfCBab2RPcHRpb25hbCBzY2hlbWEuXG4gKiBUT0RPOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgYWxsIHNwZWNpYWwgY2FzZXMgb2YgWm9kU2NoZW1hIGFuZCBub3QganVzdCBab2RFZmZlY3QgfCBab2REZWZhdWx0IHwgWm9kT3B0aW9uYWxcbiAqL1xuY29uc3QgZ2V0Wm9kRGVmRnJvbVpvZFNjaGVtYUhlbHBlcnMgPSAoc2NoZW1hOiB6LlpvZFR5cGVBbnkpID0+IHtcbiAgY29uc3Qgc3BlY2lhbF96b2RfdHlwZXMgPSBbXG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9wdGlvbmFsLFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICBdXG5cbiAgd2hpbGUgKHNwZWNpYWxfem9kX3R5cGVzLmluY2x1ZGVzKHNjaGVtYS5fZGVmLnR5cGVOYW1lKSkge1xuICAgIGlmIChcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT3B0aW9uYWwgfHxcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdFxuICAgICkge1xuICAgICAgc2NoZW1hID0gc2NoZW1hLl9kZWYuaW5uZXJUeXBlXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMpIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5fZGVmLnNjaGVtYVxuICAgICAgY29udGludWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYS5fZGVmXG59XG5cbmNvbnN0IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0ID0gKFxuICBzY2hlbWE6IHouWm9kVHlwZUFueVxuKTogei5ab2RPYmplY3Q8YW55PiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGlzWm9kRWZmZWN0ID0gc2NoZW1hLl9kZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzXG4gIGNvbnN0IHNhZmVfc2NoZW1hID0gZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYShpc1pvZEVmZmVjdCwgc2NoZW1hKVxuICBjb25zdCBpc1pvZE9iamVjdCA9XG4gICAgc2FmZV9zY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdFxuXG4gIGlmICghaXNab2RPYmplY3QpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICByZXR1cm4gc2FmZV9zY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxufVxuXG5jb25zdCBpc1pvZFNjaGVtYUFycmF5ID0gKHNjaGVtYTogei5ab2RUeXBlQW55KSA9PiB7XG4gIGNvbnN0IGRlZiA9IGdldFpvZERlZkZyb21ab2RTY2hlbWFIZWxwZXJzKHNjaGVtYSlcbiAgcmV0dXJuIGRlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFycmF5XG59XG5cbmNvbnN0IGlzWm9kU2NoZW1hQm9vbGVhbiA9IChzY2hlbWE6IHouWm9kVHlwZUFueSkgPT4ge1xuICBjb25zdCBkZWYgPSBnZXRab2REZWZGcm9tWm9kU2NoZW1hSGVscGVycyhzY2hlbWEpXG4gIHJldHVybiBkZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCb29sZWFuXG59XG5cbmNvbnN0IHBhcnNlUXVlcnlQYXJhbXMgPSAoXG4gIHNjaGVtYTogei5ab2RUeXBlQW55LFxuICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHN1cHBvcnRlZEFycmF5Rm9ybWF0czogUXVlcnlBcnJheUZvcm1hdHNcbikgPT4ge1xuICBjb25zdCBwYXJzZWRfaW5wdXQgPSBPYmplY3QuYXNzaWduKHt9LCBpbnB1dClcbiAgY29uc3Qgb2JqX3NjaGVtYSA9IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0KHNjaGVtYSlcblxuICBpZiAob2JqX3NjaGVtYSkge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9ial9zY2hlbWEuc2hhcGUpKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheSh2YWx1ZSBhcyB6LlpvZFR5cGVBbnkpKSB7XG4gICAgICAgIGNvbnN0IGFycmF5X2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmICh0eXBlb2YgYXJyYXlfaW5wdXQgPT09IFwic3RyaW5nXCIgJiYgYXJyYXlfaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcGFyc2VkX2lucHV0W2tleV0gPSBbXVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBhcnJheV9pbnB1dCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgIGFycmF5X2lucHV0Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJjb21tYVwiKVxuICAgICAgICApIHtcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IGFycmF5X2lucHV0LnNwbGl0KFwiLFwiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXQgPSBpbnB1dFtgJHtrZXl9W11gXVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzLmluY2x1ZGVzKFwiYnJhY2tldHNcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgcHJlX3NwbGl0X2FycmF5ID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IHByZV9zcGxpdF9hcnJheS5zcGxpdChcIixcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0KSAmJlxuICAgICAgICAgIHN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcImJyYWNrZXRzXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChpc1pvZFNjaGVtYUJvb2xlYW4odmFsdWUgYXMgei5ab2RUeXBlQW55KSkge1xuICAgICAgICBjb25zdCBib29sZWFuX2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmICh0eXBlb2YgYm9vbGVhbl9pbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYm9vbGVhbl9pbnB1dCA9PT0gXCJ0cnVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzY2hlbWEucGFyc2UocGFyc2VkX2lucHV0KVxufVxuXG5jb25zdCB2YWxpZGF0ZVF1ZXJ5UGFyYW1zID0gKFxuICBpbnB1dFVybDogc3RyaW5nLFxuICBzY2hlbWE6IHouWm9kVHlwZUFueSxcbiAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzOiBRdWVyeUFycmF5Rm9ybWF0c1xuKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaW5wdXRVcmwsIFwiaHR0cDovL2R1bW15LmNvbVwiKVxuXG4gIGNvbnN0IHNlZW5LZXlzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICBjb25zdCBvYmpfc2NoZW1hID0gdHJ5R2V0Wm9kU2NoZW1hQXNPYmplY3Qoc2NoZW1hKVxuICBpZiAoIW9ial9zY2hlbWEpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIHVybC5zZWFyY2hQYXJhbXMua2V5cygpKSB7XG4gICAgZm9yIChjb25zdCBbc2NoZW1hS2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqX3NjaGVtYS5zaGFwZSkpIHtcbiAgICAgIGlmIChpc1pvZFNjaGVtYUFycmF5KHZhbHVlIGFzIHouWm9kVHlwZUFueSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleSA9PT0gYCR7c2NoZW1hS2V5fVtdYCAmJlxuICAgICAgICAgICFzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJicmFja2V0c1wiKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgICB0eXBlOiBcImludmFsaWRfcXVlcnlfcGFyYW1zXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgQnJhY2tldCBzeW50YXggbm90IHN1cHBvcnRlZCBmb3IgcXVlcnkgcGFyYW0gXCIke3NjaGVtYUtleX1cImAsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGtleV9zY2hlbWEgPSBvYmpfc2NoZW1hLnNoYXBlW2tleV1cblxuICAgIGlmIChrZXlfc2NoZW1hKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheShrZXlfc2NoZW1hKSkge1xuICAgICAgICBpZiAoc2VlbktleXMuaGFzKGtleSkgJiYgIXN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcInJlcGVhdFwiKSkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgICAgIHR5cGU6IFwiaW52YWxpZF9xdWVyeV9wYXJhbXNcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBSZXBlYXRlZCBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWQgZm9yIGR1cGxpY2F0ZSBxdWVyeSBwYXJhbSBcIiR7a2V5fVwiYCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2VlbktleXMuYWRkKGtleSlcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RJbnB1dDxcbiAgSnNvbkJvZHkgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBDb21tb25QYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIEZvcm1EYXRhIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbj4ge1xuICBqc29uQm9keT86IEpzb25Cb2R5XG4gIHF1ZXJ5UGFyYW1zPzogUXVlcnlQYXJhbXNcbiAgY29tbW9uUGFyYW1zPzogQ29tbW9uUGFyYW1zXG4gIGZvcm1EYXRhPzogRm9ybURhdGFcbiAganNvblJlc3BvbnNlPzogSnNvblJlc3BvbnNlXG4gIHNob3VsZFZhbGlkYXRlUmVzcG9uc2VzPzogYm9vbGVhblxuICBzaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5PzogYm9vbGVhblxuICBzdXBwb3J0ZWRBcnJheUZvcm1hdHM/OiBRdWVyeUFycmF5Rm9ybWF0c1xufVxuXG5jb25zdCB6b2RJc3N1ZVRvU3RyaW5nID0gKGlzc3VlOiB6LlpvZElzc3VlKSA9PiB7XG4gIGlmIChpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGlzc3VlLm1lc3NhZ2VcbiAgfVxuICBpZiAoaXNzdWUubWVzc2FnZSA9PT0gXCJSZXF1aXJlZFwiKSB7XG4gICAgcmV0dXJuIGAke2lzc3VlLnBhdGguam9pbihcIi5cIil9IGlzIHJlcXVpcmVkYFxuICB9XG4gIHJldHVybiBgJHtpc3N1ZS5tZXNzYWdlfSBmb3IgXCIke2lzc3VlLnBhdGguam9pbihcIi5cIil9XCJgXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSnNvblJlc3BvbnNlPEpzb25SZXNwb25zZSBleHRlbmRzIHouWm9kVHlwZUFueT4oXG4gIGpzb25SZXNwb25zZTogSnNvblJlc3BvbnNlIHwgdW5kZWZpbmVkLFxuICByZXM6IE5leHRBcGlSZXNwb25zZVxuKSB7XG4gIGNvbnN0IG9yaWdpbmFsX3Jlc19qc29uID0gcmVzLmpzb25cbiAgY29uc3Qgb3ZlcnJpZGVfcmVzX2pzb24gPSAoanNvbjogYW55KSA9PiB7XG4gICAgY29uc3QgaXNfc3VjY2VzcyA9IHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMFxuICAgIGlmICghaXNfc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsX3Jlc19qc29uKGpzb24pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGpzb25SZXNwb25zZT8ucGFyc2UoanNvbilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbFNlcnZlckVycm9yRXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX3Jlc3BvbnNlXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwidGhlIHJlc3BvbnNlIGRvZXMgbm90IG1hdGNoIHdpdGgganNvblJlc3BvbnNlXCIsXG4gICAgICAgIHpvZEVycm9yOiBlcnIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBvcmlnaW5hbF9yZXNfanNvbihqc29uKVxuICB9XG4gIHJlcy5qc29uID0gb3ZlcnJpZGVfcmVzX2pzb25cbn1cblxuZXhwb3J0IGNvbnN0IHdpdGhWYWxpZGF0aW9uID1cbiAgPFxuICAgIEpzb25Cb2R5IGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIENvbW1vblBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBGb3JtRGF0YSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbiAgPihcbiAgICBpbnB1dDogUmVxdWVzdElucHV0PFxuICAgICAgSnNvbkJvZHksXG4gICAgICBRdWVyeVBhcmFtcyxcbiAgICAgIENvbW1vblBhcmFtcyxcbiAgICAgIEZvcm1EYXRhLFxuICAgICAgSnNvblJlc3BvbnNlXG4gICAgPlxuICApID0+XG4gIChuZXh0KSA9PlxuICBhc3luYyAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCB7IHN1cHBvcnRlZEFycmF5Rm9ybWF0cyA9IERFRkFVTFRfQVJSQVlfRk9STUFUUyB9ID0gaW5wdXRcblxuICAgIGlmIChcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5qc29uQm9keSkgfHxcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5jb21tb25QYXJhbXMpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGZvcm1EYXRhIHdpdGgganNvbkJvZHkgb3IgY29tbW9uUGFyYW1zXCIpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKHJlcS5tZXRob2QgPT09IFwiUE9TVFwiIHx8IHJlcS5tZXRob2QgPT09IFwiUEFUQ0hcIikgJiZcbiAgICAgIChpbnB1dC5qc29uQm9keSB8fCBpbnB1dC5jb21tb25QYXJhbXMpICYmXG4gICAgICAhcmVxLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0/LmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSAmJlxuICAgICAgIV8uaXNFbXB0eShyZXEuYm9keSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2NvbnRlbnRfdHlwZVwiLFxuICAgICAgICBtZXNzYWdlOiBgJHtyZXEubWV0aG9kfSByZXF1ZXN0cyBtdXN0IGhhdmUgQ29udGVudC1UeXBlIGhlYWRlciB3aXRoIFwiYXBwbGljYXRpb24vanNvblwiYCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaW5wdXQuZm9ybURhdGEgJiZcbiAgICAgIHJlcS5tZXRob2QgIT09IFwiR0VUXCIgJiZcbiAgICAgICFyZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXT8uaW5jbHVkZXMoXG4gICAgICAgIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCJcbiAgICAgIClcbiAgICAgIC8vIFRPRE8gZXZlbnR1YWxseSB3ZSBzaG91bGQgc3VwcG9ydCBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9jb250ZW50X3R5cGVcIixcbiAgICAgICAgbWVzc2FnZTogYE11c3QgaGF2ZSBDb250ZW50LVR5cGUgaGVhZGVyIHdpdGggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcImAsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcmlnaW5hbF9jb21iaW5lZF9wYXJhbXMgPSB7IC4uLnJlcS5xdWVyeSwgLi4ucmVxLmJvZHkgfVxuXG4gICAgICBjb25zdCB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSA9IGlucHV0LnNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHlcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogcmVxLm1ldGhvZCAhPT0gXCJHRVRcIiAmJiByZXEubWV0aG9kICE9PSBcIkRFTEVURVwiXG5cbiAgICAgIGNvbnN0IGlzRm9ybURhdGEgPSBCb29sZWFuKGlucHV0LmZvcm1EYXRhKVxuXG4gICAgICBpZiAoaXNGb3JtRGF0YSAmJiB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSkge1xuICAgICAgICByZXEuYm9keSA9IGlucHV0LmZvcm1EYXRhPy5wYXJzZShyZXEuYm9keSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0Zvcm1EYXRhICYmIHdpbGxWYWxpZGF0ZVJlcXVlc3RCb2R5KSB7XG4gICAgICAgIHJlcS5ib2R5ID0gaW5wdXQuanNvbkJvZHk/LnBhcnNlKHJlcS5ib2R5KVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQucXVlcnlQYXJhbXMpIHtcbiAgICAgICAgaWYgKCFyZXEudXJsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVxLnVybCBpcyB1bmRlZmluZWRcIilcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlUXVlcnlQYXJhbXMocmVxLnVybCwgaW5wdXQucXVlcnlQYXJhbXMsIHN1cHBvcnRlZEFycmF5Rm9ybWF0cylcblxuICAgICAgICByZXEucXVlcnkgPSBwYXJzZVF1ZXJ5UGFyYW1zKFxuICAgICAgICAgIGlucHV0LnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHJlcS5xdWVyeSxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQuY29tbW9uUGFyYW1zKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhcyBjb21tb25QYXJhbXMgaW5jbHVkZXMgcXVlcnkgcGFyYW1zLCB3ZSBjYW4gdXNlIHRoZSBwYXJzZVF1ZXJ5UGFyYW1zIGZ1bmN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICA7KHJlcSBhcyBhbnkpLmNvbW1vblBhcmFtcyA9IHBhcnNlUXVlcnlQYXJhbXMoXG4gICAgICAgICAgaW5wdXQuY29tbW9uUGFyYW1zLFxuICAgICAgICAgIG9yaWdpbmFsX2NvbWJpbmVkX3BhcmFtcyxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhZFJlcXVlc3RFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiWm9kRXJyb3JcIikge1xuICAgICAgICBsZXQgbWVzc2FnZVxuICAgICAgICBpZiAoZXJyb3IuaXNzdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IGlzc3VlID0gZXJyb3IuaXNzdWVzWzBdXG4gICAgICAgICAgbWVzc2FnZSA9IHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZV9jb21wb25lbnRzOiBzdHJpbmdbXSA9IFtdXG4gICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VfY29tcG9uZW50cy5wdXNoKHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgIGAke2Vycm9yLmlzc3Vlcy5sZW5ndGh9IElucHV0IEVycm9yczogYCArXG4gICAgICAgICAgICBtZXNzYWdlX2NvbXBvbmVudHMuam9pbihcIiwgXCIpXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICB2YWxpZGF0aW9uX2Vycm9yczogZXJyb3IuZm9ybWF0KCksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiRXJyb3Igd2hpbGUgcGFyc2luZyBpbnB1dFwiLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aGlzIHdpbGwgb3ZlcnJpZGUgdGhlIHJlcy5qc29uIG1ldGhvZCB0byB2YWxpZGF0ZSB0aGUgcmVzcG9uc2VcbiAgICAgKi9cbiAgICBpZiAoaW5wdXQuc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMpIHtcbiAgICAgIHZhbGlkYXRlSnNvblJlc3BvbnNlKGlucHV0Lmpzb25SZXNwb25zZSwgcmVzKVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0KHJlcSwgcmVzKVxuICB9XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhWYWxpZGF0aW9uXG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlc3BvbnNlLCBOZXh0QXBpUmVxdWVzdCB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHdpdGhFeGNlcHRpb25IYW5kbGluZyB9IGZyb20gXCIuLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuaW1wb3J0IHdyYXBwZXJzLCB7IE1pZGRsZXdhcmUgfSBmcm9tIFwiLi4vd3JhcHBlcnNcIlxuaW1wb3J0IHtcbiAgQ3JlYXRlV2l0aFJvdXRlU3BlY0Z1bmN0aW9uLFxuICBRdWVyeUFycmF5Rm9ybWF0cyxcbiAgUm91dGVTcGVjLFxufSBmcm9tIFwiLi4vdHlwZXNcIlxuaW1wb3J0IHdpdGhNZXRob2RzLCB7IEhUVFBNZXRob2RzIH0gZnJvbSBcIi4vbWlkZGxld2FyZXMvd2l0aC1tZXRob2RzXCJcbmltcG9ydCB3aXRoVmFsaWRhdGlvbiBmcm9tIFwiLi9taWRkbGV3YXJlcy93aXRoLXZhbGlkYXRpb25cIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHtcbiAgQXV0aE1ldGhvZERvZXNOb3RBcHBseUV4Y2VwdGlvbixcbiAgVW5hdXRob3JpemVkRXhjZXB0aW9uLFxufSBmcm9tIFwiLi4vbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlXCJcblxudHlwZSBQYXJhbURlZiA9IHouWm9kVHlwZUFueSB8IHouWm9kRWZmZWN0czx6LlpvZFR5cGVBbnk+XG5cbmV4cG9ydCBjb25zdCBjaGVja1JvdXRlU3BlYyA9IDxcbiAgQXV0aFR5cGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4gIE1ldGhvZHMgZXh0ZW5kcyBIVFRQTWV0aG9kc1tdID0gSFRUUE1ldGhvZHNbXSxcbiAgSnNvbkJvZHkgZXh0ZW5kcyBQYXJhbURlZiA9IHouWm9kVHlwZUFueSxcbiAgUXVlcnlQYXJhbXMgZXh0ZW5kcyBQYXJhbURlZiA9IHouWm9kVHlwZUFueSxcbiAgQ29tbW9uUGFyYW1zIGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIE1pZGRsZXdhcmVzIGV4dGVuZHMgcmVhZG9ubHkgTWlkZGxld2FyZTxhbnksIGFueT5bXSA9IHJlYWRvbmx5IE1pZGRsZXdhcmU8XG4gICAgYW55LFxuICAgIGFueVxuICA+W10sXG4gIEZvcm1EYXRhIGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIFNwZWMgZXh0ZW5kcyBSb3V0ZVNwZWM8XG4gICAgQXV0aFR5cGUsXG4gICAgTWV0aG9kcyxcbiAgICBKc29uQm9keSxcbiAgICBRdWVyeVBhcmFtcyxcbiAgICBDb21tb25QYXJhbXMsXG4gICAgTWlkZGxld2FyZXMsXG4gICAgRm9ybURhdGFcbiAgPiA9IFJvdXRlU3BlYzxcbiAgICBBdXRoVHlwZSxcbiAgICBNZXRob2RzLFxuICAgIEpzb25Cb2R5LFxuICAgIFF1ZXJ5UGFyYW1zLFxuICAgIENvbW1vblBhcmFtcyxcbiAgICBNaWRkbGV3YXJlcyxcbiAgICBGb3JtRGF0YVxuICA+XG4+KFxuICBzcGVjOiBTcGVjXG4pOiBzdHJpbmcgZXh0ZW5kcyBTcGVjW1wiYXV0aFwiXVxuICA/IGB5b3VyIHJvdXRlIHNwZWMgaXMgdW5kZXJzcGVjaWZpZWQsIGFkZCBcImFzIGNvbnN0XCJgXG4gIDogU3BlYyA9PiBzcGVjIGFzIGFueVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BUlJBWV9GT1JNQVRTOiBRdWVyeUFycmF5Rm9ybWF0cyA9IFtcbiAgXCJicmFja2V0c1wiLFxuICBcImNvbW1hXCIsXG4gIFwicmVwZWF0XCIsXG5dXG5cbmV4cG9ydCBjb25zdCBjcmVhdGVXaXRoUm91dGVTcGVjOiBDcmVhdGVXaXRoUm91dGVTcGVjRnVuY3Rpb24gPSAoKFxuICBzZXR1cFBhcmFtc1xuKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhdXRoTWlkZGxld2FyZU1hcCA9IHt9LFxuICAgIGdsb2JhbE1pZGRsZXdhcmVzID0gW10sXG4gICAgZ2xvYmFsTWlkZGxld2FyZXNBZnRlckF1dGggPSBbXSxcbiAgICBzaG91bGRWYWxpZGF0ZVJlc3BvbnNlcyxcbiAgICBzaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5ID0gdHJ1ZSxcbiAgICBleGNlcHRpb25IYW5kbGluZ01pZGRsZXdhcmUgPSB3aXRoRXhjZXB0aW9uSGFuZGxpbmcoe1xuICAgICAgYWRkT2tTdGF0dXM6IHNldHVwUGFyYW1zLmFkZE9rU3RhdHVzLFxuICAgICAgZXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zOiB7XG4gICAgICAgIGdldEVycm9yQ29udGV4dDogKHJlcSwgZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4ge31cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZXJyb3JcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkgYXMgYW55LFxuICAgIGdsb2JhbFNjaGVtYXMgPSBzZXR1cFBhcmFtcy5hZGRPa1N0YXR1c1xuICAgICAgPyB7XG4gICAgICAgICAgb2s6IHouYm9vbGVhbigpLFxuICAgICAgICB9XG4gICAgICA6IHt9LFxuICAgIHN1cHBvcnRlZEFycmF5Rm9ybWF0cyA9IERFRkFVTFRfQVJSQVlfRk9STUFUUyxcbiAgICBvbk11bHRpcGxlQXV0aE1pZGRsZXdhcmVGYWlsdXJlcyxcbiAgfSA9IHNldHVwUGFyYW1zXG5cbiAgY29uc3Qgd2l0aFJvdXRlU3BlYyA9IChzcGVjOiBSb3V0ZVNwZWMpID0+IHtcbiAgICBjb25zdCBjcmVhdGVSb3V0ZUV4cG9ydCA9ICh1c2VyRGVmaW5lZFJvdXRlRm4pID0+IHtcbiAgICAgIGNvbnN0IHJvb3RSZXF1ZXN0SGFuZGxlciA9IGFzeW5jIChcbiAgICAgICAgcmVxOiBOZXh0QXBpUmVxdWVzdCxcbiAgICAgICAgcmVzOiBOZXh0QXBpUmVzcG9uc2VcbiAgICAgICkgPT4ge1xuICAgICAgICBhdXRoTWlkZGxld2FyZU1hcFtcIm5vbmVcIl0gPSAobmV4dCkgPT4gbmV4dFxuXG4gICAgICAgIGNvbnN0IGF1dGhNaWRkbGV3YXJlcyA9IChcbiAgICAgICAgICBBcnJheS5pc0FycmF5KHNwZWMuYXV0aCkgPyBzcGVjLmF1dGggOiBbc3BlYy5hdXRoXVxuICAgICAgICApLm1hcCgoYXV0aFR5cGUpID0+IFthdXRoVHlwZSwgYXV0aE1pZGRsZXdhcmVNYXBbYXV0aFR5cGVdXSBhcyBjb25zdClcbiAgICAgICAgY29uc3QgdW5kZWZpbmVkQXV0aFR5cGUgPSBhdXRoTWlkZGxld2FyZXMuZmluZCgoWywgbXddKSA9PiAhbXcpXG4gICAgICAgIGlmICh1bmRlZmluZWRBdXRoVHlwZSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYXV0aCB0eXBlOiAke3VuZGVmaW5lZEF1dGhUeXBlfWApXG5cbiAgICAgICAgY29uc3QgZmlyc3RBdXRoTWlkZGxld2FyZVRoYXRTdWNjZWVkcyA9IChuZXh0KSA9PiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVNdWx0aXBsZUF1dGhNaWRkbGV3YXJlRmFpbHVyZXMgPVxuICAgICAgICAgICAgc3BlYy5vbk11bHRpcGxlQXV0aE1pZGRsZXdhcmVGYWlsdXJlcyA/P1xuICAgICAgICAgICAgb25NdWx0aXBsZUF1dGhNaWRkbGV3YXJlRmFpbHVyZXNcblxuICAgICAgICAgIGZvciAoY29uc3QgW25hbWUsIG1pZGRsZXdhcmVdIG9mIGF1dGhNaWRkbGV3YXJlcykge1xuICAgICAgICAgICAgbGV0IGRpZEF1dGhNaWRkbGV3YXJlVGhyb3cgPSB0cnVlXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgbWlkZGxld2FyZSgoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBlcnJvcnMgdW5yZWxhdGVkIHRvIGF1dGggdGhyb3duIGJ5IGJ1aWx0LWluIG1pZGRsZXdhcmUgKHdpdGhNZXRob2RzLCB3aXRoVmFsaWRhdGlvbikgd2lsbCBiZSBjYXVnaHQgaGVyZVxuICAgICAgICAgICAgICAgIGRpZEF1dGhNaWRkbGV3YXJlVGhyb3cgPSBmYWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KC4uLmFyZ3MpXG4gICAgICAgICAgICAgIH0pKHJlcSwgcmVzKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBdXRoTWV0aG9kRG9lc05vdEFwcGx5RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlcnJvci5zb3VyY2VfbWlkZGxld2FyZSA9IG5hbWVcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhbmRsZU11bHRpcGxlQXV0aE1pZGRsZXdhcmVGYWlsdXJlcyAmJlxuICAgICAgICAgICAgICAgIGRpZEF1dGhNaWRkbGV3YXJlVGhyb3dcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlTXVsdGlwbGVBdXRoTWlkZGxld2FyZUZhaWx1cmVzKFtlcnJvcl0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IFVuYXV0aG9yaXplZEV4Y2VwdGlvbih7XG4gICAgICAgICAgICB0eXBlOiBcInVuYXV0aG9yaXplZFwiLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJObyBhdXRoZW50aWNhdGlvbiBtZXRob2RzIHN1Y2NlZWRlZFwiLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd3JhcHBlcnMoXG4gICAgICAgICAgLi4uKChleGNlcHRpb25IYW5kbGluZ01pZGRsZXdhcmVcbiAgICAgICAgICAgID8gW2V4Y2VwdGlvbkhhbmRsaW5nTWlkZGxld2FyZV1cbiAgICAgICAgICAgIDogW10pIGFzIFthbnldKSxcbiAgICAgICAgICAuLi4oKGdsb2JhbE1pZGRsZXdhcmVzIHx8IFtdKSBhcyBbXSksXG4gICAgICAgICAgZmlyc3RBdXRoTWlkZGxld2FyZVRoYXRTdWNjZWVkcyxcbiAgICAgICAgICAuLi4oKGdsb2JhbE1pZGRsZXdhcmVzQWZ0ZXJBdXRoIHx8IFtdKSBhcyBbXSksXG4gICAgICAgICAgLi4uKChzcGVjLm1pZGRsZXdhcmVzIHx8IFtdKSBhcyBbXSksXG4gICAgICAgICAgd2l0aE1ldGhvZHMoc3BlYy5tZXRob2RzKSxcbiAgICAgICAgICB3aXRoVmFsaWRhdGlvbih7XG4gICAgICAgICAgICBqc29uQm9keTogc3BlYy5qc29uQm9keSxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBzcGVjLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgY29tbW9uUGFyYW1zOiBzcGVjLmNvbW1vblBhcmFtcyxcbiAgICAgICAgICAgIGZvcm1EYXRhOiBzcGVjLmZvcm1EYXRhLFxuICAgICAgICAgICAganNvblJlc3BvbnNlOiBzcGVjLmpzb25SZXNwb25zZSxcbiAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlUmVzcG9uc2VzLFxuICAgICAgICAgICAgc2hvdWxkVmFsaWRhdGVHZXRSZXF1ZXN0Qm9keSxcbiAgICAgICAgICAgIHN1cHBvcnRlZEFycmF5Rm9ybWF0cyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB1c2VyRGVmaW5lZFJvdXRlRm5cbiAgICAgICAgKShyZXEgYXMgYW55LCByZXMpXG4gICAgICB9XG5cbiAgICAgIHJvb3RSZXF1ZXN0SGFuZGxlci5fc2V0dXBQYXJhbXMgPSBzZXR1cFBhcmFtc1xuICAgICAgcm9vdFJlcXVlc3RIYW5kbGVyLl9yb3V0ZVNwZWMgPSBzcGVjXG5cbiAgICAgIHJldHVybiByb290UmVxdWVzdEhhbmRsZXJcbiAgICB9XG5cbiAgICBjcmVhdGVSb3V0ZUV4cG9ydC5fc2V0dXBQYXJhbXMgPSBzZXR1cFBhcmFtc1xuICAgIGNyZWF0ZVJvdXRlRXhwb3J0Ll9yb3V0ZVNwZWMgPSBzcGVjXG5cbiAgICByZXR1cm4gY3JlYXRlUm91dGVFeHBvcnRcbiAgfVxuXG4gIHdpdGhSb3V0ZVNwZWMuX3NldHVwUGFyYW1zID0gc2V0dXBQYXJhbXNcblxuICByZXR1cm4gd2l0aFJvdXRlU3BlY1xufSkgYXMgYW55XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7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QUFPQyxNQUFLQyxTQUFRO0FBdkc5RTtBQXdHVSxnQkFBTSx3Q0FDSixVQUFLLHFDQUFMLFlBQ0E7QUFFRixxQkFBVyxDQUFDLE1BQU0sVUFBVSxLQUFLLGlCQUFpQjtBQUNoRCxnQkFBSSx5QkFBeUI7QUFDN0IsZ0JBQUk7QUFDRixxQkFBTyxNQUFNLFdBQVcsSUFBSSxTQUFTO0FBRW5DLHlDQUF5QjtBQUN6Qix1QkFBTyxLQUFLLEdBQUcsSUFBSTtBQUFBLGNBQ3JCLENBQUMsRUFBRUQsTUFBS0MsSUFBRztBQUFBLFlBQ2IsU0FBUyxPQUFQO0FBQ0Esa0JBQUksaUJBQWlCLGlDQUFpQztBQUNwRDtBQUFBLGNBQ0Y7QUFDQSxvQkFBTSxvQkFBb0I7QUFDMUIsa0JBQ0Usd0NBQ0Esd0JBQ0E7QUFDQSxxREFBcUMsQ0FBQyxLQUFLLENBQUM7QUFBQSxjQUM5QztBQUNBLG9CQUFNO0FBQUEsWUFDUjtBQUFBLFVBQ0Y7QUFDQSxnQkFBTSxJQUFJLHNCQUFzQjtBQUFBLFlBQzlCLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxVQUNYLENBQUM7QUFBQSxRQUNIO0FBRUEsZUFBTztBQUFBLFVBQ0wsR0FBSyw4QkFDRCxDQUFDLDJCQUEyQixJQUM1QixDQUFDO0FBQUEsVUFDTCxHQUFLLHFCQUFxQixDQUFDO0FBQUEsVUFDM0I7QUFBQSxVQUNBLEdBQUssOEJBQThCLENBQUM7QUFBQSxVQUNwQyxHQUFLLEtBQUssZUFBZSxDQUFDO0FBQUEsVUFDMUIscUJBQVksS0FBSyxPQUFPO0FBQUEsVUFDeEIsd0JBQWU7QUFBQSxZQUNiLFVBQVUsS0FBSztBQUFBLFlBQ2YsYUFBYSxLQUFLO0FBQUEsWUFDbEIsY0FBYyxLQUFLO0FBQUEsWUFDbkIsVUFBVSxLQUFLO0FBQUEsWUFDZixjQUFjLEtBQUs7QUFBQSxZQUNuQjtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsVUFDRixDQUFDO0FBQUEsVUFDRDtBQUFBLFFBQ0YsRUFBRSxLQUFZLEdBQUc7QUFBQSxNQUNuQjtBQUVBLHlCQUFtQixlQUFlO0FBQ2xDLHlCQUFtQixhQUFhO0FBRWhDLGFBQU87QUFBQSxJQUNUO0FBRUEsc0JBQWtCLGVBQWU7QUFDakMsc0JBQWtCLGFBQWE7QUFFL0IsV0FBTztBQUFBLEVBQ1Q7QUFFQSxnQkFBYyxlQUFlO0FBRTdCLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFsid2l0aEV4Y2VwdGlvbkhhbmRsaW5nIiwgIndpdGhFeGNlcHRpb25IYW5kbGluZyIsICJfIiwgImltcG9ydF96b2QiLCAid2l0aEV4Y2VwdGlvbkhhbmRsaW5nIiwgInJlcSIsICJyZXMiXQp9Cg==
556
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmUvaHR0cC1leGNlcHRpb25zLnRzIiwgIi4uL3NyYy9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmUvd2l0aC1leGNlcHRpb24taGFuZGxpbmcudHMiLCAiLi4vc3JjL25leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZS93aXRoLW9rLXN0YXR1cy50cyIsICIuLi9zcmMvbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlL2luZGV4LnRzIiwgIi4uL3NyYy93cmFwcGVycy9pbmRleC50cyIsICIuLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtbWV0aG9kcy50cyIsICIuLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtdmFsaWRhdGlvbi50cyIsICIuLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgKiBmcm9tIFwiLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuZXhwb3J0ICogZnJvbSBcIi4vd2l0aC1yb3V0ZS1zcGVjXCJcbmV4cG9ydCB7IHdyYXBwZXJzIH0gZnJvbSBcIi4vd3JhcHBlcnNcIlxuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIlxuIiwgImV4cG9ydCB0eXBlIEh0dHBFeGNlcHRpb25NZXRhZGF0YSA9IHtcbiAgdHlwZTogc3RyaW5nXG4gIG1lc3NhZ2U6IHN0cmluZ1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbn0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXG5leHBvcnQgaW50ZXJmYWNlIFRocm93aW5nT3B0aW9ucyB7XG4gIGpzb24/OiBib29sZWFuXG59XG5cbi8qKlxuICogVGhyb3cgSHR0cEV4Y2VwdGlvbnMgaW5zaWRlIEFQSSBlbmRwb2ludHMgdG8gZ2VuZXJhdGUgbmljZSBlcnJvciBtZXNzYWdlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGlmIChiYWRfc291cHMuaW5jbHVkZXMoc291cF9wYXJhbSkpIHtcbiAqICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oNDAwLCB7XG4gKiAgICAgIHR5cGU6IFwiY2FudF9tYWtlX3NvdXBcIixcbiAqICAgICAgbWVzc2FnZTogXCJTb3VwIHdhcyB0b28gZGlmZmljdWx0LCBwbGVhc2Ugc3BlY2lmeSBhIGRpZmZlcmVudCBzb3VwXCJcbiAqICAgIH0pXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiovXG5leHBvcnQgY2xhc3MgSHR0cEV4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgb3B0aW9uczogVGhyb3dpbmdPcHRpb25zXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXR1czogbnVtYmVyLFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIobWV0YWRhdGEubWVzc2FnZSlcblxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3RvcilcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID8/IHsganNvbjogdHJ1ZSB9XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYEh0dHBFeGNlcHRpb246ICR7dGhpcy5zdGF0dXN9LCAke3RoaXMubWV0YWRhdGEubWVzc2FnZX0gKCR7dGhpcy5tZXRhZGF0YS50eXBlfSlgXG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvdyBCYWRSZXF1ZXN0RXhjZXB0aW9uIGluc2lkZSBBUEkgZW5kcG9pbnRzIHRoYXQgd2VyZSBwcm92aWRlZCBpbmNvcnJlY3RcbiAqIHBhcmFtZXRlcnMgb3IgYm9keVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGlmIChiYWRfc291cHMuaW5jbHVkZXMoc291cF9wYXJhbSkpIHtcbiAqICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oe1xuICogICAgIHR5cGU6IFwiY2FudF9tYWtlX3NvdXBcIixcbiAqICAgICBtZXNzYWdlOiBcIlNvdXAgd2FzIHRvbyBkaWZmaWN1bHQsIHBsZWFzZSBzcGVjaWZ5IGEgZGlmZmVyZW50IHNvdXBcIixcbiAqICAgfSlcbiAqIH1cbiAqIGBgYFxuICpcbiAqKi9cbmV4cG9ydCBjbGFzcyBCYWRSZXF1ZXN0RXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNDAwLCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5hdXRob3JpemVkRXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNDAxLCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXV0aE1ldGhvZERvZXNOb3RBcHBseUV4Y2VwdGlvbiBleHRlbmRzIEh0dHBFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSA9IHtcbiAgICAgIHR5cGU6IFwiYXV0aF9tZXRob2RfZG9lc19ub3RfYXBwbHlcIixcbiAgICAgIG1lc3NhZ2U6IFwiQXV0aCBtZXRob2QgZG9lcyBub3QgYXBwbHlcIixcbiAgICB9LFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNDAxLCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90Rm91bmRFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1ldGFkYXRhOiBIdHRwRXhjZXB0aW9uTWV0YWRhdGEsXG4gICAgb3B0aW9ucz86IFRocm93aW5nT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcig0MDQsIG1ldGFkYXRhLCBvcHRpb25zKVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiBleHRlbmRzIEh0dHBFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSA9IHtcbiAgICAgIHR5cGU6IFwibm90X2ltcGxlbWVudGVkXCIsXG4gICAgICBtZXNzYWdlOiBcIk5vdCBpbXBsZW1lbnRlZFwiLFxuICAgIH0sXG4gICAgb3B0aW9ucz86IFRocm93aW5nT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcig1MDEsIG1ldGFkYXRhLCBvcHRpb25zKVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZXRob2ROb3RBbGxvd2VkRXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNDA1LCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW50ZXJuYWxTZXJ2ZXJFcnJvckV4Y2VwdGlvbiBleHRlbmRzIEh0dHBFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSxcbiAgICBvcHRpb25zPzogVGhyb3dpbmdPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKDUwMCwgbWV0YWRhdGEsIG9wdGlvbnMpXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBOZXh0QXBpUmVxdWVzdCwgTmV4dEFwaVJlc3BvbnNlIH0gZnJvbSBcIm5leHRcIlxuaW1wb3J0IHsgSHR0cEV4Y2VwdGlvbiB9IGZyb20gXCIuL2h0dHAtZXhjZXB0aW9uc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aEV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyB7XG4gIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yLCByZXE6IE5leHRBcGlSZXF1ZXN0KSA9PiB2b2lkXG4gIGdldEVycm9yQ29udGV4dD86IChcbiAgICByZXE6IE5leHRBcGlSZXF1ZXN0LFxuICAgIGVycm9yOiBFcnJvclxuICApID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG59XG5cbmNvbnN0IHdpdGhFeGNlcHRpb25IYW5kbGluZyA9XG4gIChvcHRpb25zOiBXaXRoRXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zID0ge30pID0+XG4gIChuZXh0OiAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD4pID0+XG4gIGFzeW5jIChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuZXh0KHJlcSwgcmVzKVxuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsZXQgZXJyb3JDb250ZXh0OiBhbnkgPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucy5vbkVycm9yKSB7XG4gICAgICAgIG9wdGlvbnMub25FcnJvcihlcnJvciBhcyBFcnJvciwgcmVxKVxuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBlcnJvckNvbnRleHQuc3RhY2sgPSBlcnJvci5zdGFja1xuICAgICAgfVxuXG4gICAgICBlcnJvckNvbnRleHQgPSBvcHRpb25zLmdldEVycm9yQ29udGV4dFxuICAgICAgICA/IG9wdGlvbnMuZ2V0RXJyb3JDb250ZXh0KHJlcSwgZXJyb3JDb250ZXh0KVxuICAgICAgICA6IGVycm9yQ29udGV4dFxuXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXhjZXB0aW9uKSB7XG4gICAgICAgIGlmIChlcnJvci5vcHRpb25zLmpzb24pIHtcbiAgICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cykuanNvbih7XG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAuLi5lcnJvci5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgLi4uZXJyb3JDb250ZXh0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKS5lbmQoZXJyb3IubWV0YWRhdGEubWVzc2FnZSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBuZXcgSHR0cEV4Y2VwdGlvbig1MDAsIHtcbiAgICAgICAgICB0eXBlOiBcImludGVybmFsX3NlcnZlcl9lcnJvclwiLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCIsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAuLi5mb3JtYXR0ZWRFcnJvci5tZXRhZGF0YSxcbiAgICAgICAgICAgIC4uLmVycm9yQ29udGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aEV4Y2VwdGlvbkhhbmRsaW5nXG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcblxuZXhwb3J0IGludGVyZmFjZSBXaXRoT2tTdGF0dXNPcHRpb25zIHtcbiAgYWRkSWY/OiAocmVxOiBOZXh0QXBpUmVxdWVzdCkgPT4gYm9vbGVhblxufVxuXG5jb25zdCB3aXRoT2tTdGF0dXMgPVxuICAob3B0aW9uczogV2l0aE9rU3RhdHVzT3B0aW9ucyA9IHt9KSA9PlxuICAobmV4dDogKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+KSA9PlxuICBhc3luYyAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IHtcbiAgICAvLyBQYXRjaCAuanNvbigpXG4gICAgY29uc3Qgb3JpZ2luYWxKc29uID0gcmVzLmpzb25cblxuICAgIHJlcy5qc29uID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGNvbnN0IG9rID0gcmVzLnN0YXR1c0NvZGUgPj0gMjAwICYmIHJlcy5zdGF0dXNDb2RlIDwgMzAwXG4gICAgICBjb25zdCBzaG91bGRJbmNsdWRlU3RhdHVzID0gb3B0aW9ucy5hZGRJZiA/IG9wdGlvbnMuYWRkSWYocmVxKSA6IHRydWVcblxuICAgICAgaWYgKHNob3VsZEluY2x1ZGVTdGF0dXMpIHtcbiAgICAgICAgb3JpZ2luYWxKc29uLmNhbGwodGhpcywge1xuICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgb2ssXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcmlnaW5hbEpzb24uY2FsbCh0aGlzLCBkYXRhKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IG5leHQocmVxLCByZXMpXG4gIH1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aE9rU3RhdHVzXG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB1bndyYXBwZWRXaXRoRXhjZXB0aW9uSGFuZGxpbmcsIHtcbiAgV2l0aEV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyxcbn0gZnJvbSBcIi4vd2l0aC1leGNlcHRpb24taGFuZGxpbmdcIlxuaW1wb3J0IHdpdGhPa1N0YXR1cywgeyBXaXRoT2tTdGF0dXNPcHRpb25zIH0gZnJvbSBcIi4vd2l0aC1vay1zdGF0dXNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIEV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyB7XG4gIGFkZE9rU3RhdHVzPzogYm9vbGVhblxuICBva1N0YXR1c09wdGlvbnM/OiBXaXRoT2tTdGF0dXNPcHRpb25zXG4gIGV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucz86IFdpdGhFeGNlcHRpb25IYW5kbGluZ09wdGlvbnNcbn1cblxuZXhwb3J0IGNvbnN0IHdpdGhFeGNlcHRpb25IYW5kbGluZyA9XG4gICh7XG4gICAgYWRkT2tTdGF0dXMgPSBmYWxzZSxcbiAgICBva1N0YXR1c09wdGlvbnMsXG4gICAgZXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zLFxuICB9OiBFeGNlcHRpb25IYW5kbGluZ09wdGlvbnMgPSB7fSkgPT5cbiAgKG5leHQ6IChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPikgPT5cbiAgKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKGFkZE9rU3RhdHVzKSB7XG4gICAgICByZXR1cm4gd2l0aE9rU3RhdHVzKG9rU3RhdHVzT3B0aW9ucykoXG4gICAgICAgIHVud3JhcHBlZFdpdGhFeGNlcHRpb25IYW5kbGluZyhleGNlcHRpb25IYW5kbGluZ09wdGlvbnMpKG5leHQpXG4gICAgICApKHJlcSwgcmVzKVxuICAgIH1cblxuICAgIHJldHVybiB1bndyYXBwZWRXaXRoRXhjZXB0aW9uSGFuZGxpbmcoZXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zKShuZXh0KShcbiAgICAgIHJlcSxcbiAgICAgIHJlc1xuICAgIClcbiAgfVxuXG5leHBvcnQgKiBmcm9tIFwiLi9odHRwLWV4Y2VwdGlvbnNcIlxuIiwgImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QgYXMgUmVxLCBOZXh0QXBpUmVzcG9uc2UgYXMgUmVzIH0gZnJvbSBcIm5leHRcIlxuLypcblxuV3JhcHMgYSBmdW5jdGlvbiBpbiBsYXllcnMgb2Ygb3RoZXIgZnVuY3Rpb25zLCB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBpbnB1dC9vdXRwdXRcbnR5cGUuIFRoZSBvdXRwdXQgb2Ygd3JhcHBlcnMgd2lsbCBhbHdheXMgaGF2ZSB0aGUgdHlwZSBvZiBpdCdzIGxhc3QgcGFyYW1ldGVyXG4odGhlIHdyYXBwZWQgZnVuY3Rpb24pXG5cblRoaXMgZnVuY3Rpb24gdHVybnMgdGhpcyB0eXBlIG9mIGNvbXBvc2l0aW9uLi4uXG5cbmxvZ2dlci53aXRoQ29udGV4dChcInNvbWVjb250ZXh0XCIpKFxuICBhc3luYyAoYSwgYikgPT4ge1xuICAgIHJldHVybiBhXG4gIH1cbilcblxuSW50by4uLlxuXG53cmFwcGVycyhcbiAgbG9nZ2VyLndpdGhDb250ZXh0KFwic29tZWNvbnRleHRcIiksXG4gIGFzeW5jIChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGFcbiAgfVxuKVxuXG5IYXZpbmcgdGhpcyBhcyBhIHV0aWxpdHkgbWV0aG9kIGhlbHBzIHByZXNlcnZlIHR5cGVzLCB3aGljaCBvdGhlcndpc2UgY2FuIGdldFxubWVzc2VkIHVwIGJ5IHRoZSBtaWRkbGV3YXJlcy4gSXQgYWxzbyBjYW4gbWFrZSB0aGUgY29kZSBjbGVhbmVyIHdoZXJlIHRoZXJlIGFyZVxubXVsdGlwbGUgd3JhcHBlcnMuXG5cbiMjIEVYQU1QTEVTXG5cbkluIHRoZSBjb250ZXh0IG9mIHJlcXVlc3QgbWlkZGxld2FyZSB5b3UgbWlnaHQgd3JpdGUgc29tZXRoaW5nIGxpa2UgdGhpcy4uLlxuXG5jb25zdCB3aXRoUmVxdWVzdExvZ2dpbmdNaWRkbGV3YXJlID0gKG5leHQpID0+IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICBjb25zb2xlLmxvZyhgR09UIFJFUVVFU1QgJHtyZXEubWV0aG9kfSAke3JlcS5wYXRofWApXG4gIHJldHVybiBuZXh0KHJlcSwgcmVzKVxufVxuXG5IZXJlJ3MgYW4gZXhhbXBsZSBvZiBhIHdyYXBwZXIgdGhhdCB0YWtlcyBzb21lIHBhcmFtZXRlcnMuLi5cblxuY29uc3Qgd2l0aExvZ2dlZEFyZ3VtZW50cyA9XG4gICAgKGxvZ1ByZWZpeDogc3RyaW5nKSA9PlxuICAgIChuZXh0KSA9PlxuICAgIGFzeW5jICguLi5mdW5jQXJncykgPT4ge1xuICAgICAgY29uc29sZS5sb2cobG9nUHJlZml4LCAuLi5mdW5jQXJncylcbiAgICAgIHJldHVybiBuZXh0KC4uLmZ1bmNBcmdzKVxuICAgIH1cblxuKi9cblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZTxULCBEZXAgPSB7fT4gPSAoXG4gIG5leHQ6IChyZXE6IFJlcSAmIERlcCAmIFQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxICYgRGVwICYgVCwgcmVzOiBSZXMpID0+IGFueVxuXG4vLyBTYWZlciBNaWRkbGV3YXJlIHJlcXVpcmVzIHRoZSB1c2Ugb2YgZXh0ZW5kUmVxdWVzdCB0byBlbnN1cmUgdGhhdCB0aGVcbi8vIG5ldyBjb250ZXh0IChUKSB3YXMgYWN0dWFsbHkgYWRkZWQgdG8gdGhlIHJlcXVlc3QuIEl0J3Mga2luZCBvZiBhbm5veWluZ1xuLy8gdG8gdXNlIGluIHByYWN0aWNlLCBzbyB3ZSBkb24ndCB1c2UgaXQgZm9yIG91ciBXcmFwcGVycyAoeWV0KVxuZXhwb3J0IHR5cGUgU2FmZXJNaWRkbGV3YXJlPFQsIERlcCA9IHt9PiA9IChcbiAgbmV4dDogKHJlcTogUmVxICYgRGVwICYgVCwgcmVzOiBSZXMpID0+IGFueVxuKSA9PiAocmVxOiBSZXEgJiBEZXAsIHJlczogUmVzKSA9PiBhbnlcblxuZXhwb3J0IGNvbnN0IGV4dGVuZFJlcXVlc3QgPSA8VCBleHRlbmRzIFJlcSwgSyBleHRlbmRzIHt9PihcbiAgcmVxOiBULFxuICBtZXJnZTogS1xuKTogVCAmIEsgPT4ge1xuICBmb3IgKGNvbnN0IFtrZXksIHZdIG9mIE9iamVjdC5lbnRyaWVzKG1lcmdlKSkge1xuICAgIDsocmVxIGFzIGFueSlba2V5XSA9IHZcbiAgfVxuICByZXR1cm4gcmVxIGFzIGFueVxufVxuXG50eXBlIFdyYXBwZXJzMSA9IDxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBlbmRwb2ludDogKHJlcTogUmVxICYgTXcxUmVxdWVzdENvbnRleHQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbnR5cGUgV3JhcHBlcnMyID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgZW5kcG9pbnQ6IChyZXE6IFJlcSAmIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbi8vIFRPRE8gZmlndXJlIG91dCBob3cgdG8gZG8gYSByZWN1cnNpdmUgZGVmaW5pdGlvbiwgb3Igb25lIHRoYXQgc2ltcGxpZmllc1xuLy8gdGhlc2UgcmVkdW5kYW50IHdyYXBwZXJzXG5cbnR5cGUgV3JhcHBlcnMzID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwLFxuICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgTXczRGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgbXczOiBNaWRkbGV3YXJlPFxuICAgIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzNEZXAgPyBNdzNEZXAgOiBuZXZlclxuICA+LFxuICBlbmRwb2ludDogKFxuICAgIHJlcTogUmVxICYgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCAmIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIHJlczogUmVzXG4gICkgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzNCA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcCxcbiAgTXc0UmVxdWVzdENvbnRleHQsXG4gIE13NERlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgbXc0OiBNaWRkbGV3YXJlPFxuICAgIE13NFJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NERlcFxuICAgICAgPyBNdzREZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczUgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczYgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXAsXG4gIE13NlJlcXVlc3RDb250ZXh0LFxuICBNdzZEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc2OiBNaWRkbGV3YXJlPFxuICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc2RGVwXG4gICAgICA/IE13NkRlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBlbmRwb2ludDogKFxuICAgIHJlcTogUmVxICZcbiAgICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIHJlczogUmVzXG4gICkgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzNyA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcCxcbiAgTXc0UmVxdWVzdENvbnRleHQsXG4gIE13NERlcCxcbiAgTXc1UmVxdWVzdENvbnRleHQsXG4gIE13NURlcCxcbiAgTXc2UmVxdWVzdENvbnRleHQsXG4gIE13NkRlcCxcbiAgTXc3UmVxdWVzdENvbnRleHQsXG4gIE13N0RlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgbXc0OiBNaWRkbGV3YXJlPFxuICAgIE13NFJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NERlcFxuICAgICAgPyBNdzREZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc1OiBNaWRkbGV3YXJlPFxuICAgIE13NVJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc1RGVwXG4gICAgICA/IE13NURlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBtdzY6IE1pZGRsZXdhcmU8XG4gICAgTXc2UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc1UmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzZEZXBcbiAgICAgID8gTXc2RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NzogTWlkZGxld2FyZTxcbiAgICBNdzdSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13N0RlcFxuICAgICAgPyBNdzdEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzdSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVycyA9IFdyYXBwZXJzMSAmXG4gIFdyYXBwZXJzMiAmXG4gIFdyYXBwZXJzMyAmXG4gIFdyYXBwZXJzNCAmXG4gIFdyYXBwZXJzNSAmXG4gIFdyYXBwZXJzNiAmXG4gIFdyYXBwZXJzN1xuXG5leHBvcnQgY29uc3Qgd3JhcHBlcnM6IFdyYXBwZXJzID0gKC4uLndyYXBwZXJzQXJnczogYW55W10pID0+IHtcbiAgY29uc3Qgd3JhcHBlZEZ1bmN0aW9uID0gd3JhcHBlcnNBcmdzW3dyYXBwZXJzQXJncy5sZW5ndGggLSAxXVxuICBjb25zdCBtd3MgPSB3cmFwcGVyc0FyZ3Muc2xpY2UoMCwgLTEpXG5cbiAgbGV0IGxhc3RXcmFwcGVkRnVuY3Rpb24gPSB3cmFwcGVkRnVuY3Rpb25cbiAgZm9yIChsZXQgaSA9IG13cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGxhc3RXcmFwcGVkRnVuY3Rpb24gPSAobXdzW2ldIGFzIGFueSkobGFzdFdyYXBwZWRGdW5jdGlvbilcbiAgfVxuXG4gIHJldHVybiBsYXN0V3JhcHBlZEZ1bmN0aW9uXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdyYXBwZXJzXG4iLCAiaW1wb3J0IHsgTWV0aG9kTm90QWxsb3dlZEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuXG5leHBvcnQgdHlwZSBIVFRQTWV0aG9kcyA9XG4gIHwgXCJHRVRcIlxuICB8IFwiUE9TVFwiXG4gIHwgXCJERUxFVEVcIlxuICB8IFwiUFVUXCJcbiAgfCBcIlBBVENIXCJcbiAgfCBcIkhFQURcIlxuICB8IFwiT1BUSU9OU1wiXG5cbmV4cG9ydCBjb25zdCB3aXRoTWV0aG9kcyA9IChtZXRob2RzOiBIVFRQTWV0aG9kc1tdKSA9PiAobmV4dCkgPT4gKHJlcSwgcmVzKSA9PiB7XG4gIGlmICghbWV0aG9kcy5pbmNsdWRlcyhyZXEubWV0aG9kKSkge1xuICAgIHRocm93IG5ldyBNZXRob2ROb3RBbGxvd2VkRXhjZXB0aW9uKHtcbiAgICAgIHR5cGU6IFwibWV0aG9kX25vdF9hbGxvd2VkXCIsXG4gICAgICBtZXNzYWdlOiBgb25seSAke21ldGhvZHMuam9pbihcIixcIil9IGFjY2VwdGVkYCxcbiAgICB9KVxuICB9XG4gIHJldHVybiBuZXh0KHJlcSwgcmVzKVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoTWV0aG9kc1xuIiwgImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHosIFpvZEZpcnN0UGFydHlUeXBlS2luZCB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiXG5cbmltcG9ydCB7XG4gIEJhZFJlcXVlc3RFeGNlcHRpb24sXG4gIEludGVybmFsU2VydmVyRXJyb3JFeGNlcHRpb24sXG59IGZyb20gXCIuLi8uLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuaW1wb3J0IHsgUXVlcnlBcnJheUZvcm1hdHMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuaW1wb3J0IHsgREVGQVVMVF9BUlJBWV9GT1JNQVRTIH0gZnJvbSBcIi4uXCJcblxuY29uc3QgZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYSA9IChcbiAgaXNab2RFZmZlY3Q6IGJvb2xlYW4sXG4gIHNjaGVtYTogei5ab2RUeXBlQW55XG4pOiB6LlpvZFR5cGVBbnkgfCB6LlpvZE9iamVjdDxhbnk+ID0+IHtcbiAgaWYgKCFpc1pvZEVmZmVjdCkge1xuICAgIHJldHVybiBzY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxuICB9XG5cbiAgbGV0IGN1cnJlbnRTY2hlbWEgPSBzY2hlbWFcblxuICB3aGlsZSAoY3VycmVudFNjaGVtYSBpbnN0YW5jZW9mIHouWm9kRWZmZWN0cykge1xuICAgIGN1cnJlbnRTY2hlbWEgPSBjdXJyZW50U2NoZW1hLl9kZWYuc2NoZW1hXG4gIH1cblxuICByZXR1cm4gY3VycmVudFNjaGVtYSBhcyB6LlpvZE9iamVjdDxhbnk+XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgY29ycmVjdCBzY2hlbWEgZnJvbSBhIFpvZEVmZmVjdCB8IFpvZERlZmF1bHQgfCBab2RPcHRpb25hbCBzY2hlbWEuXG4gKiBUT0RPOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgYWxsIHNwZWNpYWwgY2FzZXMgb2YgWm9kU2NoZW1hIGFuZCBub3QganVzdCBab2RFZmZlY3QgfCBab2REZWZhdWx0IHwgWm9kT3B0aW9uYWxcbiAqL1xuY29uc3QgZ2V0Wm9kRGVmRnJvbVpvZFNjaGVtYUhlbHBlcnMgPSAoc2NoZW1hOiB6LlpvZFR5cGVBbnkpID0+IHtcbiAgY29uc3Qgc3BlY2lhbF96b2RfdHlwZXMgPSBbXG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9wdGlvbmFsLFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICBdXG5cbiAgd2hpbGUgKHNwZWNpYWxfem9kX3R5cGVzLmluY2x1ZGVzKHNjaGVtYS5fZGVmLnR5cGVOYW1lKSkge1xuICAgIGlmIChcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT3B0aW9uYWwgfHxcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdFxuICAgICkge1xuICAgICAgc2NoZW1hID0gc2NoZW1hLl9kZWYuaW5uZXJUeXBlXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMpIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5fZGVmLnNjaGVtYVxuICAgICAgY29udGludWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYS5fZGVmXG59XG5cbmNvbnN0IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0ID0gKFxuICBzY2hlbWE6IHouWm9kVHlwZUFueVxuKTogei5ab2RPYmplY3Q8YW55PiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGlzWm9kRWZmZWN0ID0gc2NoZW1hLl9kZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzXG4gIGNvbnN0IHNhZmVfc2NoZW1hID0gZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYShpc1pvZEVmZmVjdCwgc2NoZW1hKVxuICBjb25zdCBpc1pvZE9iamVjdCA9XG4gICAgc2FmZV9zY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdFxuXG4gIGlmICghaXNab2RPYmplY3QpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICByZXR1cm4gc2FmZV9zY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxufVxuXG5jb25zdCBpc1pvZFNjaGVtYUFycmF5ID0gKHNjaGVtYTogei5ab2RUeXBlQW55KSA9PiB7XG4gIGNvbnN0IGRlZiA9IGdldFpvZERlZkZyb21ab2RTY2hlbWFIZWxwZXJzKHNjaGVtYSlcbiAgcmV0dXJuIGRlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFycmF5XG59XG5cbmNvbnN0IGlzWm9kU2NoZW1hQm9vbGVhbiA9IChzY2hlbWE6IHouWm9kVHlwZUFueSkgPT4ge1xuICBjb25zdCBkZWYgPSBnZXRab2REZWZGcm9tWm9kU2NoZW1hSGVscGVycyhzY2hlbWEpXG4gIHJldHVybiBkZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCb29sZWFuXG59XG5cbmNvbnN0IHBhcnNlUXVlcnlQYXJhbXMgPSAoXG4gIHNjaGVtYTogei5ab2RUeXBlQW55LFxuICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHN1cHBvcnRlZEFycmF5Rm9ybWF0czogUXVlcnlBcnJheUZvcm1hdHNcbikgPT4ge1xuICBjb25zdCBwYXJzZWRfaW5wdXQgPSBPYmplY3QuYXNzaWduKHt9LCBpbnB1dClcbiAgY29uc3Qgb2JqX3NjaGVtYSA9IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0KHNjaGVtYSlcblxuICBpZiAob2JqX3NjaGVtYSkge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9ial9zY2hlbWEuc2hhcGUpKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheSh2YWx1ZSBhcyB6LlpvZFR5cGVBbnkpKSB7XG4gICAgICAgIGNvbnN0IGFycmF5X2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmICh0eXBlb2YgYXJyYXlfaW5wdXQgPT09IFwic3RyaW5nXCIgJiYgYXJyYXlfaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcGFyc2VkX2lucHV0W2tleV0gPSBbXVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBhcnJheV9pbnB1dCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgIGFycmF5X2lucHV0Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJjb21tYVwiKVxuICAgICAgICApIHtcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IGFycmF5X2lucHV0LnNwbGl0KFwiLFwiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXQgPSBpbnB1dFtgJHtrZXl9W11gXVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzLmluY2x1ZGVzKFwiYnJhY2tldHNcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgcHJlX3NwbGl0X2FycmF5ID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IHByZV9zcGxpdF9hcnJheS5zcGxpdChcIixcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0KSAmJlxuICAgICAgICAgIHN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcImJyYWNrZXRzXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChpc1pvZFNjaGVtYUJvb2xlYW4odmFsdWUgYXMgei5ab2RUeXBlQW55KSkge1xuICAgICAgICBjb25zdCBib29sZWFuX2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmICh0eXBlb2YgYm9vbGVhbl9pbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYm9vbGVhbl9pbnB1dCA9PT0gXCJ0cnVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzY2hlbWEucGFyc2UocGFyc2VkX2lucHV0KVxufVxuXG5jb25zdCB2YWxpZGF0ZVF1ZXJ5UGFyYW1zID0gKFxuICBpbnB1dFVybDogc3RyaW5nLFxuICBzY2hlbWE6IHouWm9kVHlwZUFueSxcbiAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzOiBRdWVyeUFycmF5Rm9ybWF0c1xuKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaW5wdXRVcmwsIFwiaHR0cDovL2R1bW15LmNvbVwiKVxuXG4gIGNvbnN0IHNlZW5LZXlzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICBjb25zdCBvYmpfc2NoZW1hID0gdHJ5R2V0Wm9kU2NoZW1hQXNPYmplY3Qoc2NoZW1hKVxuICBpZiAoIW9ial9zY2hlbWEpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIHVybC5zZWFyY2hQYXJhbXMua2V5cygpKSB7XG4gICAgZm9yIChjb25zdCBbc2NoZW1hS2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqX3NjaGVtYS5zaGFwZSkpIHtcbiAgICAgIGlmIChpc1pvZFNjaGVtYUFycmF5KHZhbHVlIGFzIHouWm9kVHlwZUFueSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleSA9PT0gYCR7c2NoZW1hS2V5fVtdYCAmJlxuICAgICAgICAgICFzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJicmFja2V0c1wiKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgICB0eXBlOiBcImludmFsaWRfcXVlcnlfcGFyYW1zXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgQnJhY2tldCBzeW50YXggbm90IHN1cHBvcnRlZCBmb3IgcXVlcnkgcGFyYW0gXCIke3NjaGVtYUtleX1cImAsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGtleV9zY2hlbWEgPSBvYmpfc2NoZW1hLnNoYXBlW2tleV1cblxuICAgIGlmIChrZXlfc2NoZW1hKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheShrZXlfc2NoZW1hKSkge1xuICAgICAgICBpZiAoc2VlbktleXMuaGFzKGtleSkgJiYgIXN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcInJlcGVhdFwiKSkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgICAgIHR5cGU6IFwiaW52YWxpZF9xdWVyeV9wYXJhbXNcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBSZXBlYXRlZCBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWQgZm9yIGR1cGxpY2F0ZSBxdWVyeSBwYXJhbSBcIiR7a2V5fVwiYCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2VlbktleXMuYWRkKGtleSlcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RJbnB1dDxcbiAgSnNvbkJvZHkgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBDb21tb25QYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIEZvcm1EYXRhIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbj4ge1xuICBqc29uQm9keT86IEpzb25Cb2R5XG4gIHF1ZXJ5UGFyYW1zPzogUXVlcnlQYXJhbXNcbiAgY29tbW9uUGFyYW1zPzogQ29tbW9uUGFyYW1zXG4gIGZvcm1EYXRhPzogRm9ybURhdGFcbiAganNvblJlc3BvbnNlPzogSnNvblJlc3BvbnNlXG4gIHNob3VsZFZhbGlkYXRlUmVzcG9uc2VzPzogYm9vbGVhblxuICBzaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5PzogYm9vbGVhblxuICBzdXBwb3J0ZWRBcnJheUZvcm1hdHM/OiBRdWVyeUFycmF5Rm9ybWF0c1xufVxuXG5jb25zdCB6b2RJc3N1ZVRvU3RyaW5nID0gKGlzc3VlOiB6LlpvZElzc3VlKSA9PiB7XG4gIGlmIChpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGlzc3VlLm1lc3NhZ2VcbiAgfVxuICBpZiAoaXNzdWUubWVzc2FnZSA9PT0gXCJSZXF1aXJlZFwiKSB7XG4gICAgcmV0dXJuIGAke2lzc3VlLnBhdGguam9pbihcIi5cIil9IGlzIHJlcXVpcmVkYFxuICB9XG4gIHJldHVybiBgJHtpc3N1ZS5tZXNzYWdlfSBmb3IgXCIke2lzc3VlLnBhdGguam9pbihcIi5cIil9XCJgXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSnNvblJlc3BvbnNlPEpzb25SZXNwb25zZSBleHRlbmRzIHouWm9kVHlwZUFueT4oXG4gIGpzb25SZXNwb25zZTogSnNvblJlc3BvbnNlIHwgdW5kZWZpbmVkLFxuICByZXM6IE5leHRBcGlSZXNwb25zZVxuKSB7XG4gIGNvbnN0IG9yaWdpbmFsX3Jlc19qc29uID0gcmVzLmpzb25cbiAgY29uc3Qgb3ZlcnJpZGVfcmVzX2pzb24gPSAoanNvbjogYW55KSA9PiB7XG4gICAgY29uc3QgaXNfc3VjY2VzcyA9IHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMFxuICAgIGlmICghaXNfc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsX3Jlc19qc29uKGpzb24pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGpzb25SZXNwb25zZT8ucGFyc2UoanNvbilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbFNlcnZlckVycm9yRXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX3Jlc3BvbnNlXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwidGhlIHJlc3BvbnNlIGRvZXMgbm90IG1hdGNoIHdpdGgganNvblJlc3BvbnNlXCIsXG4gICAgICAgIHpvZEVycm9yOiBlcnIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBvcmlnaW5hbF9yZXNfanNvbihqc29uKVxuICB9XG4gIHJlcy5qc29uID0gb3ZlcnJpZGVfcmVzX2pzb25cbn1cblxuZXhwb3J0IGNvbnN0IHdpdGhWYWxpZGF0aW9uID1cbiAgPFxuICAgIEpzb25Cb2R5IGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIENvbW1vblBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBGb3JtRGF0YSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbiAgPihcbiAgICBpbnB1dDogUmVxdWVzdElucHV0PFxuICAgICAgSnNvbkJvZHksXG4gICAgICBRdWVyeVBhcmFtcyxcbiAgICAgIENvbW1vblBhcmFtcyxcbiAgICAgIEZvcm1EYXRhLFxuICAgICAgSnNvblJlc3BvbnNlXG4gICAgPlxuICApID0+XG4gIChuZXh0KSA9PlxuICBhc3luYyAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCB7IHN1cHBvcnRlZEFycmF5Rm9ybWF0cyA9IERFRkFVTFRfQVJSQVlfRk9STUFUUyB9ID0gaW5wdXRcblxuICAgIGlmIChcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5qc29uQm9keSkgfHxcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5jb21tb25QYXJhbXMpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGZvcm1EYXRhIHdpdGgganNvbkJvZHkgb3IgY29tbW9uUGFyYW1zXCIpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKHJlcS5tZXRob2QgPT09IFwiUE9TVFwiIHx8IHJlcS5tZXRob2QgPT09IFwiUEFUQ0hcIikgJiZcbiAgICAgIChpbnB1dC5qc29uQm9keSB8fCBpbnB1dC5jb21tb25QYXJhbXMpICYmXG4gICAgICAhcmVxLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0/LmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSAmJlxuICAgICAgIV8uaXNFbXB0eShyZXEuYm9keSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2NvbnRlbnRfdHlwZVwiLFxuICAgICAgICBtZXNzYWdlOiBgJHtyZXEubWV0aG9kfSByZXF1ZXN0cyBtdXN0IGhhdmUgQ29udGVudC1UeXBlIGhlYWRlciB3aXRoIFwiYXBwbGljYXRpb24vanNvblwiYCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaW5wdXQuZm9ybURhdGEgJiZcbiAgICAgIHJlcS5tZXRob2QgIT09IFwiR0VUXCIgJiZcbiAgICAgICFyZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXT8uaW5jbHVkZXMoXG4gICAgICAgIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCJcbiAgICAgIClcbiAgICAgIC8vIFRPRE8gZXZlbnR1YWxseSB3ZSBzaG91bGQgc3VwcG9ydCBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9jb250ZW50X3R5cGVcIixcbiAgICAgICAgbWVzc2FnZTogYE11c3QgaGF2ZSBDb250ZW50LVR5cGUgaGVhZGVyIHdpdGggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcImAsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcmlnaW5hbF9jb21iaW5lZF9wYXJhbXMgPSB7IC4uLnJlcS5xdWVyeSwgLi4ucmVxLmJvZHkgfVxuXG4gICAgICBjb25zdCB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSA9IGlucHV0LnNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHlcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogcmVxLm1ldGhvZCAhPT0gXCJHRVRcIiAmJiByZXEubWV0aG9kICE9PSBcIkRFTEVURVwiXG5cbiAgICAgIGNvbnN0IGlzRm9ybURhdGEgPSBCb29sZWFuKGlucHV0LmZvcm1EYXRhKVxuXG4gICAgICBpZiAoaXNGb3JtRGF0YSAmJiB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSkge1xuICAgICAgICByZXEuYm9keSA9IGlucHV0LmZvcm1EYXRhPy5wYXJzZShyZXEuYm9keSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0Zvcm1EYXRhICYmIHdpbGxWYWxpZGF0ZVJlcXVlc3RCb2R5KSB7XG4gICAgICAgIHJlcS5ib2R5ID0gaW5wdXQuanNvbkJvZHk/LnBhcnNlKHJlcS5ib2R5KVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQucXVlcnlQYXJhbXMpIHtcbiAgICAgICAgaWYgKCFyZXEudXJsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVxLnVybCBpcyB1bmRlZmluZWRcIilcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlUXVlcnlQYXJhbXMocmVxLnVybCwgaW5wdXQucXVlcnlQYXJhbXMsIHN1cHBvcnRlZEFycmF5Rm9ybWF0cylcblxuICAgICAgICByZXEucXVlcnkgPSBwYXJzZVF1ZXJ5UGFyYW1zKFxuICAgICAgICAgIGlucHV0LnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHJlcS5xdWVyeSxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQuY29tbW9uUGFyYW1zKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhcyBjb21tb25QYXJhbXMgaW5jbHVkZXMgcXVlcnkgcGFyYW1zLCB3ZSBjYW4gdXNlIHRoZSBwYXJzZVF1ZXJ5UGFyYW1zIGZ1bmN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICA7KHJlcSBhcyBhbnkpLmNvbW1vblBhcmFtcyA9IHBhcnNlUXVlcnlQYXJhbXMoXG4gICAgICAgICAgaW5wdXQuY29tbW9uUGFyYW1zLFxuICAgICAgICAgIG9yaWdpbmFsX2NvbWJpbmVkX3BhcmFtcyxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhZFJlcXVlc3RFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiWm9kRXJyb3JcIikge1xuICAgICAgICBsZXQgbWVzc2FnZVxuICAgICAgICBpZiAoZXJyb3IuaXNzdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IGlzc3VlID0gZXJyb3IuaXNzdWVzWzBdXG4gICAgICAgICAgbWVzc2FnZSA9IHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZV9jb21wb25lbnRzOiBzdHJpbmdbXSA9IFtdXG4gICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VfY29tcG9uZW50cy5wdXNoKHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgIGAke2Vycm9yLmlzc3Vlcy5sZW5ndGh9IElucHV0IEVycm9yczogYCArXG4gICAgICAgICAgICBtZXNzYWdlX2NvbXBvbmVudHMuam9pbihcIiwgXCIpXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICB2YWxpZGF0aW9uX2Vycm9yczogZXJyb3IuZm9ybWF0KCksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiRXJyb3Igd2hpbGUgcGFyc2luZyBpbnB1dFwiLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aGlzIHdpbGwgb3ZlcnJpZGUgdGhlIHJlcy5qc29uIG1ldGhvZCB0byB2YWxpZGF0ZSB0aGUgcmVzcG9uc2VcbiAgICAgKi9cbiAgICBpZiAoaW5wdXQuc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMpIHtcbiAgICAgIHZhbGlkYXRlSnNvblJlc3BvbnNlKGlucHV0Lmpzb25SZXNwb25zZSwgcmVzKVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0KHJlcSwgcmVzKVxuICB9XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhWYWxpZGF0aW9uXG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlc3BvbnNlLCBOZXh0QXBpUmVxdWVzdCB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHdpdGhFeGNlcHRpb25IYW5kbGluZyB9IGZyb20gXCIuLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuaW1wb3J0IHdyYXBwZXJzLCB7IE1pZGRsZXdhcmUgfSBmcm9tIFwiLi4vd3JhcHBlcnNcIlxuaW1wb3J0IHtcbiAgQ3JlYXRlV2l0aFJvdXRlU3BlY0Z1bmN0aW9uLFxuICBRdWVyeUFycmF5Rm9ybWF0cyxcbiAgUm91dGVTcGVjLFxufSBmcm9tIFwiLi4vdHlwZXNcIlxuaW1wb3J0IHdpdGhNZXRob2RzLCB7IEhUVFBNZXRob2RzIH0gZnJvbSBcIi4vbWlkZGxld2FyZXMvd2l0aC1tZXRob2RzXCJcbmltcG9ydCB3aXRoVmFsaWRhdGlvbiBmcm9tIFwiLi9taWRkbGV3YXJlcy93aXRoLXZhbGlkYXRpb25cIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHtcbiAgQXV0aE1ldGhvZERvZXNOb3RBcHBseUV4Y2VwdGlvbixcbiAgVW5hdXRob3JpemVkRXhjZXB0aW9uLFxufSBmcm9tIFwiLi4vbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlXCJcblxudHlwZSBQYXJhbURlZiA9IHouWm9kVHlwZUFueSB8IHouWm9kRWZmZWN0czx6LlpvZFR5cGVBbnk+XG5cbmV4cG9ydCBjb25zdCBjaGVja1JvdXRlU3BlYyA9IDxcbiAgQXV0aFR5cGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4gIE1ldGhvZHMgZXh0ZW5kcyBIVFRQTWV0aG9kc1tdID0gSFRUUE1ldGhvZHNbXSxcbiAgSnNvbkJvZHkgZXh0ZW5kcyBQYXJhbURlZiA9IHouWm9kVHlwZUFueSxcbiAgUXVlcnlQYXJhbXMgZXh0ZW5kcyBQYXJhbURlZiA9IHouWm9kVHlwZUFueSxcbiAgQ29tbW9uUGFyYW1zIGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIE1pZGRsZXdhcmVzIGV4dGVuZHMgcmVhZG9ubHkgTWlkZGxld2FyZTxhbnksIGFueT5bXSA9IHJlYWRvbmx5IE1pZGRsZXdhcmU8XG4gICAgYW55LFxuICAgIGFueVxuICA+W10sXG4gIEZvcm1EYXRhIGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIFNwZWMgZXh0ZW5kcyBSb3V0ZVNwZWM8XG4gICAgQXV0aFR5cGUsXG4gICAgTWV0aG9kcyxcbiAgICBKc29uQm9keSxcbiAgICBRdWVyeVBhcmFtcyxcbiAgICBDb21tb25QYXJhbXMsXG4gICAgTWlkZGxld2FyZXMsXG4gICAgRm9ybURhdGFcbiAgPiA9IFJvdXRlU3BlYzxcbiAgICBBdXRoVHlwZSxcbiAgICBNZXRob2RzLFxuICAgIEpzb25Cb2R5LFxuICAgIFF1ZXJ5UGFyYW1zLFxuICAgIENvbW1vblBhcmFtcyxcbiAgICBNaWRkbGV3YXJlcyxcbiAgICBGb3JtRGF0YVxuICA+XG4+KFxuICBzcGVjOiBTcGVjXG4pOiBzdHJpbmcgZXh0ZW5kcyBTcGVjW1wiYXV0aFwiXVxuICA/IGB5b3VyIHJvdXRlIHNwZWMgaXMgdW5kZXJzcGVjaWZpZWQsIGFkZCBcImFzIGNvbnN0XCJgXG4gIDogU3BlYyA9PiBzcGVjIGFzIGFueVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BUlJBWV9GT1JNQVRTOiBRdWVyeUFycmF5Rm9ybWF0cyA9IFtcbiAgXCJicmFja2V0c1wiLFxuICBcImNvbW1hXCIsXG4gIFwicmVwZWF0XCIsXG5dXG5cbmV4cG9ydCBjb25zdCBjcmVhdGVXaXRoUm91dGVTcGVjOiBDcmVhdGVXaXRoUm91dGVTcGVjRnVuY3Rpb24gPSAoKFxuICBzZXR1cFBhcmFtc1xuKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhdXRoTWlkZGxld2FyZU1hcCA9IHt9LFxuICAgIGdsb2JhbE1pZGRsZXdhcmVzID0gW10sXG4gICAgZ2xvYmFsTWlkZGxld2FyZXNBZnRlckF1dGggPSBbXSxcbiAgICBzaG91bGRWYWxpZGF0ZVJlc3BvbnNlcyxcbiAgICBzaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5ID0gdHJ1ZSxcbiAgICBleGNlcHRpb25IYW5kbGluZ01pZGRsZXdhcmUgPSB3aXRoRXhjZXB0aW9uSGFuZGxpbmcoe1xuICAgICAgYWRkT2tTdGF0dXM6IHNldHVwUGFyYW1zLmFkZE9rU3RhdHVzLFxuICAgICAgZXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zOiB7XG4gICAgICAgIGdldEVycm9yQ29udGV4dDogKHJlcSwgZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4ge31cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZXJyb3JcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkgYXMgYW55LFxuICAgIGdsb2JhbFNjaGVtYXMgPSBzZXR1cFBhcmFtcy5hZGRPa1N0YXR1c1xuICAgICAgPyB7XG4gICAgICAgICAgb2s6IHouYm9vbGVhbigpLFxuICAgICAgICB9XG4gICAgICA6IHt9LFxuICAgIHN1cHBvcnRlZEFycmF5Rm9ybWF0cyA9IERFRkFVTFRfQVJSQVlfRk9STUFUUyxcbiAgICBvbk11bHRpcGxlQXV0aE1pZGRsZXdhcmVGYWlsdXJlcyxcbiAgICBtYXhEdXJhdGlvbjogZ2xvYmFsTWF4RHVyYXRpb24sXG4gIH0gPSBzZXR1cFBhcmFtc1xuXG4gIGNvbnN0IHdpdGhSb3V0ZVNwZWMgPSAoc3BlYzogUm91dGVTcGVjKSA9PiB7XG4gICAgY29uc3QgY3JlYXRlUm91dGVFeHBvcnQgPSAodXNlckRlZmluZWRSb3V0ZUZuKSA9PiB7XG4gICAgICBjb25zdCByb290UmVxdWVzdEhhbmRsZXIgPSBhc3luYyAoXG4gICAgICAgIHJlcTogTmV4dEFwaVJlcXVlc3QsXG4gICAgICAgIHJlczogTmV4dEFwaVJlc3BvbnNlXG4gICAgICApID0+IHtcbiAgICAgICAgYXV0aE1pZGRsZXdhcmVNYXBbXCJub25lXCJdID0gKG5leHQpID0+IG5leHRcblxuICAgICAgICBjb25zdCBhdXRoTWlkZGxld2FyZXMgPSAoXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShzcGVjLmF1dGgpID8gc3BlYy5hdXRoIDogW3NwZWMuYXV0aF1cbiAgICAgICAgKS5tYXAoKGF1dGhUeXBlKSA9PiBbYXV0aFR5cGUsIGF1dGhNaWRkbGV3YXJlTWFwW2F1dGhUeXBlXV0gYXMgY29uc3QpXG4gICAgICAgIGNvbnN0IHVuZGVmaW5lZEF1dGhUeXBlID0gYXV0aE1pZGRsZXdhcmVzLmZpbmQoKFssIG13XSkgPT4gIW13KVxuICAgICAgICBpZiAodW5kZWZpbmVkQXV0aFR5cGUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGF1dGggdHlwZTogJHt1bmRlZmluZWRBdXRoVHlwZX1gKVxuXG4gICAgICAgIGNvbnN0IGZpcnN0QXV0aE1pZGRsZXdhcmVUaGF0U3VjY2VlZHMgPSAobmV4dCkgPT4gYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlTXVsdGlwbGVBdXRoTWlkZGxld2FyZUZhaWx1cmVzID1cbiAgICAgICAgICAgIHNwZWMub25NdWx0aXBsZUF1dGhNaWRkbGV3YXJlRmFpbHVyZXMgPz9cbiAgICAgICAgICAgIG9uTXVsdGlwbGVBdXRoTWlkZGxld2FyZUZhaWx1cmVzXG5cbiAgICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBtaWRkbGV3YXJlXSBvZiBhdXRoTWlkZGxld2FyZXMpIHtcbiAgICAgICAgICAgIGxldCBkaWRBdXRoTWlkZGxld2FyZVRocm93ID0gdHJ1ZVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IG1pZGRsZXdhcmUoKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgZXJyb3JzIHVucmVsYXRlZCB0byBhdXRoIHRocm93biBieSBidWlsdC1pbiBtaWRkbGV3YXJlICh3aXRoTWV0aG9kcywgd2l0aFZhbGlkYXRpb24pIHdpbGwgYmUgY2F1Z2h0IGhlcmVcbiAgICAgICAgICAgICAgICBkaWRBdXRoTWlkZGxld2FyZVRocm93ID0gZmFsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dCguLi5hcmdzKVxuICAgICAgICAgICAgICB9KShyZXEsIHJlcylcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXV0aE1ldGhvZERvZXNOb3RBcHBseUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZXJyb3Iuc291cmNlX21pZGRsZXdhcmUgPSBuYW1lXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYW5kbGVNdWx0aXBsZUF1dGhNaWRkbGV3YXJlRmFpbHVyZXMgJiZcbiAgICAgICAgICAgICAgICBkaWRBdXRoTWlkZGxld2FyZVRocm93XG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGhhbmRsZU11bHRpcGxlQXV0aE1pZGRsZXdhcmVGYWlsdXJlcyhbZXJyb3JdKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IG5ldyBVbmF1dGhvcml6ZWRFeGNlcHRpb24oe1xuICAgICAgICAgICAgdHlwZTogXCJ1bmF1dGhvcml6ZWRcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiTm8gYXV0aGVudGljYXRpb24gbWV0aG9kcyBzdWNjZWVkZWRcIixcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdyYXBwZXJzKFxuICAgICAgICAgIC4uLigoZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlXG4gICAgICAgICAgICA/IFtleGNlcHRpb25IYW5kbGluZ01pZGRsZXdhcmVdXG4gICAgICAgICAgICA6IFtdKSBhcyBbYW55XSksXG4gICAgICAgICAgLi4uKChnbG9iYWxNaWRkbGV3YXJlcyB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIGZpcnN0QXV0aE1pZGRsZXdhcmVUaGF0U3VjY2VlZHMsXG4gICAgICAgICAgLi4uKChnbG9iYWxNaWRkbGV3YXJlc0FmdGVyQXV0aCB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIC4uLigoc3BlYy5taWRkbGV3YXJlcyB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIHdpdGhNZXRob2RzKHNwZWMubWV0aG9kcyksXG4gICAgICAgICAgd2l0aFZhbGlkYXRpb24oe1xuICAgICAgICAgICAganNvbkJvZHk6IHNwZWMuanNvbkJvZHksXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogc3BlYy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIGNvbW1vblBhcmFtczogc3BlYy5jb21tb25QYXJhbXMsXG4gICAgICAgICAgICBmb3JtRGF0YTogc3BlYy5mb3JtRGF0YSxcbiAgICAgICAgICAgIGpzb25SZXNwb25zZTogc3BlYy5qc29uUmVzcG9uc2UsXG4gICAgICAgICAgICBzaG91bGRWYWxpZGF0ZVJlc3BvbnNlcyxcbiAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHksXG4gICAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdXNlckRlZmluZWRSb3V0ZUZuXG4gICAgICAgICkocmVxIGFzIGFueSwgcmVzKVxuICAgICAgfVxuXG4gICAgICByb290UmVxdWVzdEhhbmRsZXIuX3NldHVwUGFyYW1zID0gc2V0dXBQYXJhbXNcbiAgICAgIHJvb3RSZXF1ZXN0SGFuZGxlci5fcm91dGVTcGVjID0gc3BlY1xuXG4gICAgICAvLyBFeHBvcnQgbWF4RHVyYXRpb24gYXMgYSBOZXh0LmpzIHJvdXRlIHNlZ21lbnQgY29uZmlnXG4gICAgICBjb25zdCBtYXhEdXJhdGlvbiA9IHNwZWMubWF4RHVyYXRpb24gPz8gZ2xvYmFsTWF4RHVyYXRpb25cbiAgICAgIGlmIChtYXhEdXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJvb3RSZXF1ZXN0SGFuZGxlci5tYXhEdXJhdGlvbiA9IG1heER1cmF0aW9uXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByb290UmVxdWVzdEhhbmRsZXJcbiAgICB9XG5cbiAgICBjcmVhdGVSb3V0ZUV4cG9ydC5fc2V0dXBQYXJhbXMgPSBzZXR1cFBhcmFtc1xuICAgIGNyZWF0ZVJvdXRlRXhwb3J0Ll9yb3V0ZVNwZWMgPSBzcGVjXG5cbiAgICByZXR1cm4gY3JlYXRlUm91dGVFeHBvcnRcbiAgfVxuXG4gIHdpdGhSb3V0ZVNwZWMuX3NldHVwUGFyYW1zID0gc2V0dXBQYXJhbXNcblxuICByZXR1cm4gd2l0aFJvdXRlU3BlY1xufSkgYXMgYW55XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsK0JBQUFBO0FBQUEsRUFBQTtBQUFBO0FBQUE7OztBQ3dCTyxJQUFNLGdCQUFOLGNBQTRCLE1BQU07QUFBQSxFQUd2QyxZQUNTLFFBQ0EsVUFDUCxTQUNBO0FBQ0EsVUFBTSxTQUFTLE9BQU87QUFKZjtBQUNBO0FBS1AsUUFBSSxNQUFNLG1CQUFtQjtBQUMzQixZQUFNLGtCQUFrQixNQUFNLEtBQUssV0FBVztBQUFBLElBQ2hEO0FBRUEsU0FBSyxVQUFVLDRCQUFXLEVBQUUsTUFBTSxLQUFLO0FBQUEsRUFDekM7QUFBQSxFQUVBLFdBQVc7QUFDVCxXQUFPLGtCQUFrQixLQUFLLFdBQVcsS0FBSyxTQUFTLFlBQVksS0FBSyxTQUFTO0FBQUEsRUFDbkY7QUFDRjtBQWlCTyxJQUFNLHNCQUFOLGNBQWtDLGNBQWM7QUFBQSxFQUNyRCxZQUNTLFVBQ1AsU0FDQTtBQUNBLFVBQU0sS0FBSyxVQUFVLE9BQU87QUFIckI7QUFBQSxFQUlUO0FBQ0Y7QUFFTyxJQUFNLHdCQUFOLGNBQW9DLGNBQWM7QUFBQSxFQUN2RCxZQUNTLFVBQ1AsU0FDQTtBQUNBLFVBQU0sS0FBSyxVQUFVLE9BQU87QUFIckI7QUFBQSxFQUlUO0FBQ0Y7QUFFTyxJQUFNLGtDQUFOLGNBQThDLGNBQWM7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QUE4QixDQUFDO0FBQUEsVUFDcEMsR0FBSyxLQUFLLGVBQWUsQ0FBQztBQUFBLFVBQzFCLHFCQUFZLEtBQUssT0FBTztBQUFBLFVBQ3hCLHdCQUFlO0FBQUEsWUFDYixVQUFVLEtBQUs7QUFBQSxZQUNmLGFBQWEsS0FBSztBQUFBLFlBQ2xCLGNBQWMsS0FBSztBQUFBLFlBQ25CLFVBQVUsS0FBSztBQUFBLFlBQ2YsY0FBYyxLQUFLO0FBQUEsWUFDbkI7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0YsQ0FBQztBQUFBLFVBQ0Q7QUFBQSxRQUNGLEVBQUUsS0FBWSxHQUFHO0FBQUEsTUFDbkI7QUFFQSx5QkFBbUIsZUFBZTtBQUNsQyx5QkFBbUIsYUFBYTtBQUdoQyxZQUFNLGVBQWMsVUFBSyxnQkFBTCxZQUFvQjtBQUN4QyxVQUFJLGdCQUFnQixRQUFXO0FBQzdCLDJCQUFtQixjQUFjO0FBQUEsTUFDbkM7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUVBLHNCQUFrQixlQUFlO0FBQ2pDLHNCQUFrQixhQUFhO0FBRS9CLFdBQU87QUFBQSxFQUNUO0FBRUEsZ0JBQWMsZUFBZTtBQUU3QixTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbIndpdGhFeGNlcHRpb25IYW5kbGluZyIsICJ3aXRoRXhjZXB0aW9uSGFuZGxpbmciLCAiXyIsICJpbXBvcnRfem9kIiwgIndpdGhFeGNlcHRpb25IYW5kbGluZyIsICJyZXEiLCAicmVzIiwgIl9hIl0KfQo=
package/dist/index.mjs CHANGED
@@ -301,10 +301,12 @@ var createWithRouteSpec = (setupParams) => {
301
301
  ok: z2.boolean()
302
302
  } : {},
303
303
  supportedArrayFormats = DEFAULT_ARRAY_FORMATS,
304
- onMultipleAuthMiddlewareFailures
304
+ onMultipleAuthMiddlewareFailures,
305
+ maxDuration: globalMaxDuration
305
306
  } = setupParams;
306
307
  const withRouteSpec = (spec) => {
307
308
  const createRouteExport = (userDefinedRouteFn) => {
309
+ var _a;
308
310
  const rootRequestHandler = async (req, res) => {
309
311
  authMiddlewareMap["none"] = (next) => next;
310
312
  const authMiddlewares = (Array.isArray(spec.auth) ? spec.auth : [spec.auth]).map((authType) => [authType, authMiddlewareMap[authType]]);
@@ -312,8 +314,8 @@ var createWithRouteSpec = (setupParams) => {
312
314
  if (undefinedAuthType)
313
315
  throw new Error(`Unknown auth type: ${undefinedAuthType}`);
314
316
  const firstAuthMiddlewareThatSucceeds = (next) => async (req2, res2) => {
315
- var _a;
316
- const handleMultipleAuthMiddlewareFailures = (_a = spec.onMultipleAuthMiddlewareFailures) != null ? _a : onMultipleAuthMiddlewareFailures;
317
+ var _a2;
318
+ const handleMultipleAuthMiddlewareFailures = (_a2 = spec.onMultipleAuthMiddlewareFailures) != null ? _a2 : onMultipleAuthMiddlewareFailures;
317
319
  for (const [name, middleware] of authMiddlewares) {
318
320
  let didAuthMiddlewareThrow = true;
319
321
  try {
@@ -359,6 +361,10 @@ var createWithRouteSpec = (setupParams) => {
359
361
  };
360
362
  rootRequestHandler._setupParams = setupParams;
361
363
  rootRequestHandler._routeSpec = spec;
364
+ const maxDuration = (_a = spec.maxDuration) != null ? _a : globalMaxDuration;
365
+ if (maxDuration !== void 0) {
366
+ rootRequestHandler.maxDuration = maxDuration;
367
+ }
362
368
  return rootRequestHandler;
363
369
  };
364
370
  createRouteExport._setupParams = setupParams;
@@ -383,4 +389,4 @@ export {
383
389
  withExceptionHandling,
384
390
  wrappers
385
391
  };
386
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy93aXRoLXJvdXRlLXNwZWMvaW5kZXgudHMiLCAiLi4vc3JjL3dyYXBwZXJzL2luZGV4LnRzIiwgIi4uL3NyYy93aXRoLXJvdXRlLXNwZWMvbWlkZGxld2FyZXMvd2l0aC1tZXRob2RzLnRzIiwgIi4uL3NyYy93aXRoLXJvdXRlLXNwZWMvbWlkZGxld2FyZXMvd2l0aC12YWxpZGF0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgKiBmcm9tIFwiLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuZXhwb3J0ICogZnJvbSBcIi4vd2l0aC1yb3V0ZS1zcGVjXCJcbmV4cG9ydCB7IHdyYXBwZXJzIH0gZnJvbSBcIi4vd3JhcHBlcnNcIlxuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIlxuIiwgImltcG9ydCB7IE5leHRBcGlSZXNwb25zZSwgTmV4dEFwaVJlcXVlc3QgfSBmcm9tIFwibmV4dFwiXG5pbXBvcnQgeyB3aXRoRXhjZXB0aW9uSGFuZGxpbmcgfSBmcm9tIFwiLi4vbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlXCJcbmltcG9ydCB3cmFwcGVycywgeyBNaWRkbGV3YXJlIH0gZnJvbSBcIi4uL3dyYXBwZXJzXCJcbmltcG9ydCB7XG4gIENyZWF0ZVdpdGhSb3V0ZVNwZWNGdW5jdGlvbixcbiAgUXVlcnlBcnJheUZvcm1hdHMsXG4gIFJvdXRlU3BlYyxcbn0gZnJvbSBcIi4uL3R5cGVzXCJcbmltcG9ydCB3aXRoTWV0aG9kcywgeyBIVFRQTWV0aG9kcyB9IGZyb20gXCIuL21pZGRsZXdhcmVzL3dpdGgtbWV0aG9kc1wiXG5pbXBvcnQgd2l0aFZhbGlkYXRpb24gZnJvbSBcIi4vbWlkZGxld2FyZXMvd2l0aC12YWxpZGF0aW9uXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7XG4gIEF1dGhNZXRob2REb2VzTm90QXBwbHlFeGNlcHRpb24sXG4gIFVuYXV0aG9yaXplZEV4Y2VwdGlvbixcbn0gZnJvbSBcIi4uL25leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZVwiXG5cbnR5cGUgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnkgfCB6LlpvZEVmZmVjdHM8ei5ab2RUeXBlQW55PlxuXG5leHBvcnQgY29uc3QgY2hlY2tSb3V0ZVNwZWMgPSA8XG4gIEF1dGhUeXBlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBNZXRob2RzIGV4dGVuZHMgSFRUUE1ldGhvZHNbXSA9IEhUVFBNZXRob2RzW10sXG4gIEpzb25Cb2R5IGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIENvbW1vblBhcmFtcyBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBNaWRkbGV3YXJlcyBleHRlbmRzIHJlYWRvbmx5IE1pZGRsZXdhcmU8YW55LCBhbnk+W10gPSByZWFkb25seSBNaWRkbGV3YXJlPFxuICAgIGFueSxcbiAgICBhbnlcbiAgPltdLFxuICBGb3JtRGF0YSBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBTcGVjIGV4dGVuZHMgUm91dGVTcGVjPFxuICAgIEF1dGhUeXBlLFxuICAgIE1ldGhvZHMsXG4gICAgSnNvbkJvZHksXG4gICAgUXVlcnlQYXJhbXMsXG4gICAgQ29tbW9uUGFyYW1zLFxuICAgIE1pZGRsZXdhcmVzLFxuICAgIEZvcm1EYXRhXG4gID4gPSBSb3V0ZVNwZWM8XG4gICAgQXV0aFR5cGUsXG4gICAgTWV0aG9kcyxcbiAgICBKc29uQm9keSxcbiAgICBRdWVyeVBhcmFtcyxcbiAgICBDb21tb25QYXJhbXMsXG4gICAgTWlkZGxld2FyZXMsXG4gICAgRm9ybURhdGFcbiAgPlxuPihcbiAgc3BlYzogU3BlY1xuKTogc3RyaW5nIGV4dGVuZHMgU3BlY1tcImF1dGhcIl1cbiAgPyBgeW91ciByb3V0ZSBzcGVjIGlzIHVuZGVyc3BlY2lmaWVkLCBhZGQgXCJhcyBjb25zdFwiYFxuICA6IFNwZWMgPT4gc3BlYyBhcyBhbnlcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQVJSQVlfRk9STUFUUzogUXVlcnlBcnJheUZvcm1hdHMgPSBbXG4gIFwiYnJhY2tldHNcIixcbiAgXCJjb21tYVwiLFxuICBcInJlcGVhdFwiLFxuXVxuXG5leHBvcnQgY29uc3QgY3JlYXRlV2l0aFJvdXRlU3BlYzogQ3JlYXRlV2l0aFJvdXRlU3BlY0Z1bmN0aW9uID0gKChcbiAgc2V0dXBQYXJhbXNcbikgPT4ge1xuICBjb25zdCB7XG4gICAgYXV0aE1pZGRsZXdhcmVNYXAgPSB7fSxcbiAgICBnbG9iYWxNaWRkbGV3YXJlcyA9IFtdLFxuICAgIGdsb2JhbE1pZGRsZXdhcmVzQWZ0ZXJBdXRoID0gW10sXG4gICAgc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMsXG4gICAgc2hvdWxkVmFsaWRhdGVHZXRSZXF1ZXN0Qm9keSA9IHRydWUsXG4gICAgZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlID0gd2l0aEV4Y2VwdGlvbkhhbmRsaW5nKHtcbiAgICAgIGFkZE9rU3RhdHVzOiBzZXR1cFBhcmFtcy5hZGRPa1N0YXR1cyxcbiAgICAgIGV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9uczoge1xuICAgICAgICBnZXRFcnJvckNvbnRleHQ6IChyZXEsIGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pIGFzIGFueSxcbiAgICBnbG9iYWxTY2hlbWFzID0gc2V0dXBQYXJhbXMuYWRkT2tTdGF0dXNcbiAgICAgID8ge1xuICAgICAgICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgICAgICAgfVxuICAgICAgOiB7fSxcbiAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMgPSBERUZBVUxUX0FSUkFZX0ZPUk1BVFMsXG4gICAgb25NdWx0aXBsZUF1dGhNaWRkbGV3YXJlRmFpbHVyZXMsXG4gIH0gPSBzZXR1cFBhcmFtc1xuXG4gIGNvbnN0IHdpdGhSb3V0ZVNwZWMgPSAoc3BlYzogUm91dGVTcGVjKSA9PiB7XG4gICAgY29uc3QgY3JlYXRlUm91dGVFeHBvcnQgPSAodXNlckRlZmluZWRSb3V0ZUZuKSA9PiB7XG4gICAgICBjb25zdCByb290UmVxdWVzdEhhbmRsZXIgPSBhc3luYyAoXG4gICAgICAgIHJlcTogTmV4dEFwaVJlcXVlc3QsXG4gICAgICAgIHJlczogTmV4dEFwaVJlc3BvbnNlXG4gICAgICApID0+IHtcbiAgICAgICAgYXV0aE1pZGRsZXdhcmVNYXBbXCJub25lXCJdID0gKG5leHQpID0+IG5leHRcblxuICAgICAgICBjb25zdCBhdXRoTWlkZGxld2FyZXMgPSAoXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShzcGVjLmF1dGgpID8gc3BlYy5hdXRoIDogW3NwZWMuYXV0aF1cbiAgICAgICAgKS5tYXAoKGF1dGhUeXBlKSA9PiBbYXV0aFR5cGUsIGF1dGhNaWRkbGV3YXJlTWFwW2F1dGhUeXBlXV0gYXMgY29uc3QpXG4gICAgICAgIGNvbnN0IHVuZGVmaW5lZEF1dGhUeXBlID0gYXV0aE1pZGRsZXdhcmVzLmZpbmQoKFssIG13XSkgPT4gIW13KVxuICAgICAgICBpZiAodW5kZWZpbmVkQXV0aFR5cGUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGF1dGggdHlwZTogJHt1bmRlZmluZWRBdXRoVHlwZX1gKVxuXG4gICAgICAgIGNvbnN0IGZpcnN0QXV0aE1pZGRsZXdhcmVUaGF0U3VjY2VlZHMgPSAobmV4dCkgPT4gYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlTXVsdGlwbGVBdXRoTWlkZGxld2FyZUZhaWx1cmVzID1cbiAgICAgICAgICAgIHNwZWMub25NdWx0aXBsZUF1dGhNaWRkbGV3YXJlRmFpbHVyZXMgPz9cbiAgICAgICAgICAgIG9uTXVsdGlwbGVBdXRoTWlkZGxld2FyZUZhaWx1cmVzXG5cbiAgICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBtaWRkbGV3YXJlXSBvZiBhdXRoTWlkZGxld2FyZXMpIHtcbiAgICAgICAgICAgIGxldCBkaWRBdXRoTWlkZGxld2FyZVRocm93ID0gdHJ1ZVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IG1pZGRsZXdhcmUoKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgZXJyb3JzIHVucmVsYXRlZCB0byBhdXRoIHRocm93biBieSBidWlsdC1pbiBtaWRkbGV3YXJlICh3aXRoTWV0aG9kcywgd2l0aFZhbGlkYXRpb24pIHdpbGwgYmUgY2F1Z2h0IGhlcmVcbiAgICAgICAgICAgICAgICBkaWRBdXRoTWlkZGxld2FyZVRocm93ID0gZmFsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dCguLi5hcmdzKVxuICAgICAgICAgICAgICB9KShyZXEsIHJlcylcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXV0aE1ldGhvZERvZXNOb3RBcHBseUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZXJyb3Iuc291cmNlX21pZGRsZXdhcmUgPSBuYW1lXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYW5kbGVNdWx0aXBsZUF1dGhNaWRkbGV3YXJlRmFpbHVyZXMgJiZcbiAgICAgICAgICAgICAgICBkaWRBdXRoTWlkZGxld2FyZVRocm93XG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGhhbmRsZU11bHRpcGxlQXV0aE1pZGRsZXdhcmVGYWlsdXJlcyhbZXJyb3JdKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IG5ldyBVbmF1dGhvcml6ZWRFeGNlcHRpb24oe1xuICAgICAgICAgICAgdHlwZTogXCJ1bmF1dGhvcml6ZWRcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiTm8gYXV0aGVudGljYXRpb24gbWV0aG9kcyBzdWNjZWVkZWRcIixcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdyYXBwZXJzKFxuICAgICAgICAgIC4uLigoZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlXG4gICAgICAgICAgICA/IFtleGNlcHRpb25IYW5kbGluZ01pZGRsZXdhcmVdXG4gICAgICAgICAgICA6IFtdKSBhcyBbYW55XSksXG4gICAgICAgICAgLi4uKChnbG9iYWxNaWRkbGV3YXJlcyB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIGZpcnN0QXV0aE1pZGRsZXdhcmVUaGF0U3VjY2VlZHMsXG4gICAgICAgICAgLi4uKChnbG9iYWxNaWRkbGV3YXJlc0FmdGVyQXV0aCB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIC4uLigoc3BlYy5taWRkbGV3YXJlcyB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIHdpdGhNZXRob2RzKHNwZWMubWV0aG9kcyksXG4gICAgICAgICAgd2l0aFZhbGlkYXRpb24oe1xuICAgICAgICAgICAganNvbkJvZHk6IHNwZWMuanNvbkJvZHksXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogc3BlYy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIGNvbW1vblBhcmFtczogc3BlYy5jb21tb25QYXJhbXMsXG4gICAgICAgICAgICBmb3JtRGF0YTogc3BlYy5mb3JtRGF0YSxcbiAgICAgICAgICAgIGpzb25SZXNwb25zZTogc3BlYy5qc29uUmVzcG9uc2UsXG4gICAgICAgICAgICBzaG91bGRWYWxpZGF0ZVJlc3BvbnNlcyxcbiAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHksXG4gICAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdXNlckRlZmluZWRSb3V0ZUZuXG4gICAgICAgICkocmVxIGFzIGFueSwgcmVzKVxuICAgICAgfVxuXG4gICAgICByb290UmVxdWVzdEhhbmRsZXIuX3NldHVwUGFyYW1zID0gc2V0dXBQYXJhbXNcbiAgICAgIHJvb3RSZXF1ZXN0SGFuZGxlci5fcm91dGVTcGVjID0gc3BlY1xuXG4gICAgICByZXR1cm4gcm9vdFJlcXVlc3RIYW5kbGVyXG4gICAgfVxuXG4gICAgY3JlYXRlUm91dGVFeHBvcnQuX3NldHVwUGFyYW1zID0gc2V0dXBQYXJhbXNcbiAgICBjcmVhdGVSb3V0ZUV4cG9ydC5fcm91dGVTcGVjID0gc3BlY1xuXG4gICAgcmV0dXJuIGNyZWF0ZVJvdXRlRXhwb3J0XG4gIH1cblxuICB3aXRoUm91dGVTcGVjLl9zZXR1cFBhcmFtcyA9IHNldHVwUGFyYW1zXG5cbiAgcmV0dXJuIHdpdGhSb3V0ZVNwZWNcbn0pIGFzIGFueVxuIiwgImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QgYXMgUmVxLCBOZXh0QXBpUmVzcG9uc2UgYXMgUmVzIH0gZnJvbSBcIm5leHRcIlxuLypcblxuV3JhcHMgYSBmdW5jdGlvbiBpbiBsYXllcnMgb2Ygb3RoZXIgZnVuY3Rpb25zLCB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBpbnB1dC9vdXRwdXRcbnR5cGUuIFRoZSBvdXRwdXQgb2Ygd3JhcHBlcnMgd2lsbCBhbHdheXMgaGF2ZSB0aGUgdHlwZSBvZiBpdCdzIGxhc3QgcGFyYW1ldGVyXG4odGhlIHdyYXBwZWQgZnVuY3Rpb24pXG5cblRoaXMgZnVuY3Rpb24gdHVybnMgdGhpcyB0eXBlIG9mIGNvbXBvc2l0aW9uLi4uXG5cbmxvZ2dlci53aXRoQ29udGV4dChcInNvbWVjb250ZXh0XCIpKFxuICBhc3luYyAoYSwgYikgPT4ge1xuICAgIHJldHVybiBhXG4gIH1cbilcblxuSW50by4uLlxuXG53cmFwcGVycyhcbiAgbG9nZ2VyLndpdGhDb250ZXh0KFwic29tZWNvbnRleHRcIiksXG4gIGFzeW5jIChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGFcbiAgfVxuKVxuXG5IYXZpbmcgdGhpcyBhcyBhIHV0aWxpdHkgbWV0aG9kIGhlbHBzIHByZXNlcnZlIHR5cGVzLCB3aGljaCBvdGhlcndpc2UgY2FuIGdldFxubWVzc2VkIHVwIGJ5IHRoZSBtaWRkbGV3YXJlcy4gSXQgYWxzbyBjYW4gbWFrZSB0aGUgY29kZSBjbGVhbmVyIHdoZXJlIHRoZXJlIGFyZVxubXVsdGlwbGUgd3JhcHBlcnMuXG5cbiMjIEVYQU1QTEVTXG5cbkluIHRoZSBjb250ZXh0IG9mIHJlcXVlc3QgbWlkZGxld2FyZSB5b3UgbWlnaHQgd3JpdGUgc29tZXRoaW5nIGxpa2UgdGhpcy4uLlxuXG5jb25zdCB3aXRoUmVxdWVzdExvZ2dpbmdNaWRkbGV3YXJlID0gKG5leHQpID0+IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICBjb25zb2xlLmxvZyhgR09UIFJFUVVFU1QgJHtyZXEubWV0aG9kfSAke3JlcS5wYXRofWApXG4gIHJldHVybiBuZXh0KHJlcSwgcmVzKVxufVxuXG5IZXJlJ3MgYW4gZXhhbXBsZSBvZiBhIHdyYXBwZXIgdGhhdCB0YWtlcyBzb21lIHBhcmFtZXRlcnMuLi5cblxuY29uc3Qgd2l0aExvZ2dlZEFyZ3VtZW50cyA9XG4gICAgKGxvZ1ByZWZpeDogc3RyaW5nKSA9PlxuICAgIChuZXh0KSA9PlxuICAgIGFzeW5jICguLi5mdW5jQXJncykgPT4ge1xuICAgICAgY29uc29sZS5sb2cobG9nUHJlZml4LCAuLi5mdW5jQXJncylcbiAgICAgIHJldHVybiBuZXh0KC4uLmZ1bmNBcmdzKVxuICAgIH1cblxuKi9cblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZTxULCBEZXAgPSB7fT4gPSAoXG4gIG5leHQ6IChyZXE6IFJlcSAmIERlcCAmIFQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxICYgRGVwICYgVCwgcmVzOiBSZXMpID0+IGFueVxuXG4vLyBTYWZlciBNaWRkbGV3YXJlIHJlcXVpcmVzIHRoZSB1c2Ugb2YgZXh0ZW5kUmVxdWVzdCB0byBlbnN1cmUgdGhhdCB0aGVcbi8vIG5ldyBjb250ZXh0IChUKSB3YXMgYWN0dWFsbHkgYWRkZWQgdG8gdGhlIHJlcXVlc3QuIEl0J3Mga2luZCBvZiBhbm5veWluZ1xuLy8gdG8gdXNlIGluIHByYWN0aWNlLCBzbyB3ZSBkb24ndCB1c2UgaXQgZm9yIG91ciBXcmFwcGVycyAoeWV0KVxuZXhwb3J0IHR5cGUgU2FmZXJNaWRkbGV3YXJlPFQsIERlcCA9IHt9PiA9IChcbiAgbmV4dDogKHJlcTogUmVxICYgRGVwICYgVCwgcmVzOiBSZXMpID0+IGFueVxuKSA9PiAocmVxOiBSZXEgJiBEZXAsIHJlczogUmVzKSA9PiBhbnlcblxuZXhwb3J0IGNvbnN0IGV4dGVuZFJlcXVlc3QgPSA8VCBleHRlbmRzIFJlcSwgSyBleHRlbmRzIHt9PihcbiAgcmVxOiBULFxuICBtZXJnZTogS1xuKTogVCAmIEsgPT4ge1xuICBmb3IgKGNvbnN0IFtrZXksIHZdIG9mIE9iamVjdC5lbnRyaWVzKG1lcmdlKSkge1xuICAgIDsocmVxIGFzIGFueSlba2V5XSA9IHZcbiAgfVxuICByZXR1cm4gcmVxIGFzIGFueVxufVxuXG50eXBlIFdyYXBwZXJzMSA9IDxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBlbmRwb2ludDogKHJlcTogUmVxICYgTXcxUmVxdWVzdENvbnRleHQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbnR5cGUgV3JhcHBlcnMyID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgZW5kcG9pbnQ6IChyZXE6IFJlcSAmIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbi8vIFRPRE8gZmlndXJlIG91dCBob3cgdG8gZG8gYSByZWN1cnNpdmUgZGVmaW5pdGlvbiwgb3Igb25lIHRoYXQgc2ltcGxpZmllc1xuLy8gdGhlc2UgcmVkdW5kYW50IHdyYXBwZXJzXG5cbnR5cGUgV3JhcHBlcnMzID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwLFxuICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgTXczRGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgbXczOiBNaWRkbGV3YXJlPFxuICAgIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzNEZXAgPyBNdzNEZXAgOiBuZXZlclxuICA+LFxuICBlbmRwb2ludDogKFxuICAgIHJlcTogUmVxICYgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCAmIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIHJlczogUmVzXG4gICkgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzNCA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcCxcbiAgTXc0UmVxdWVzdENvbnRleHQsXG4gIE13NERlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgbXc0OiBNaWRkbGV3YXJlPFxuICAgIE13NFJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NERlcFxuICAgICAgPyBNdzREZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczUgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczYgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXAsXG4gIE13NlJlcXVlc3RDb250ZXh0LFxuICBNdzZEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc2OiBNaWRkbGV3YXJlPFxuICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc2RGVwXG4gICAgICA/IE13NkRlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBlbmRwb2ludDogKFxuICAgIHJlcTogUmVxICZcbiAgICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIHJlczogUmVzXG4gICkgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzNyA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcCxcbiAgTXc0UmVxdWVzdENvbnRleHQsXG4gIE13NERlcCxcbiAgTXc1UmVxdWVzdENvbnRleHQsXG4gIE13NURlcCxcbiAgTXc2UmVxdWVzdENvbnRleHQsXG4gIE13NkRlcCxcbiAgTXc3UmVxdWVzdENvbnRleHQsXG4gIE13N0RlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgbXc0OiBNaWRkbGV3YXJlPFxuICAgIE13NFJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NERlcFxuICAgICAgPyBNdzREZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc1OiBNaWRkbGV3YXJlPFxuICAgIE13NVJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc1RGVwXG4gICAgICA/IE13NURlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBtdzY6IE1pZGRsZXdhcmU8XG4gICAgTXc2UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc1UmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzZEZXBcbiAgICAgID8gTXc2RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NzogTWlkZGxld2FyZTxcbiAgICBNdzdSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13N0RlcFxuICAgICAgPyBNdzdEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzdSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVycyA9IFdyYXBwZXJzMSAmXG4gIFdyYXBwZXJzMiAmXG4gIFdyYXBwZXJzMyAmXG4gIFdyYXBwZXJzNCAmXG4gIFdyYXBwZXJzNSAmXG4gIFdyYXBwZXJzNiAmXG4gIFdyYXBwZXJzN1xuXG5leHBvcnQgY29uc3Qgd3JhcHBlcnM6IFdyYXBwZXJzID0gKC4uLndyYXBwZXJzQXJnczogYW55W10pID0+IHtcbiAgY29uc3Qgd3JhcHBlZEZ1bmN0aW9uID0gd3JhcHBlcnNBcmdzW3dyYXBwZXJzQXJncy5sZW5ndGggLSAxXVxuICBjb25zdCBtd3MgPSB3cmFwcGVyc0FyZ3Muc2xpY2UoMCwgLTEpXG5cbiAgbGV0IGxhc3RXcmFwcGVkRnVuY3Rpb24gPSB3cmFwcGVkRnVuY3Rpb25cbiAgZm9yIChsZXQgaSA9IG13cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGxhc3RXcmFwcGVkRnVuY3Rpb24gPSAobXdzW2ldIGFzIGFueSkobGFzdFdyYXBwZWRGdW5jdGlvbilcbiAgfVxuXG4gIHJldHVybiBsYXN0V3JhcHBlZEZ1bmN0aW9uXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdyYXBwZXJzXG4iLCAiaW1wb3J0IHsgTWV0aG9kTm90QWxsb3dlZEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuXG5leHBvcnQgdHlwZSBIVFRQTWV0aG9kcyA9XG4gIHwgXCJHRVRcIlxuICB8IFwiUE9TVFwiXG4gIHwgXCJERUxFVEVcIlxuICB8IFwiUFVUXCJcbiAgfCBcIlBBVENIXCJcbiAgfCBcIkhFQURcIlxuICB8IFwiT1BUSU9OU1wiXG5cbmV4cG9ydCBjb25zdCB3aXRoTWV0aG9kcyA9IChtZXRob2RzOiBIVFRQTWV0aG9kc1tdKSA9PiAobmV4dCkgPT4gKHJlcSwgcmVzKSA9PiB7XG4gIGlmICghbWV0aG9kcy5pbmNsdWRlcyhyZXEubWV0aG9kKSkge1xuICAgIHRocm93IG5ldyBNZXRob2ROb3RBbGxvd2VkRXhjZXB0aW9uKHtcbiAgICAgIHR5cGU6IFwibWV0aG9kX25vdF9hbGxvd2VkXCIsXG4gICAgICBtZXNzYWdlOiBgb25seSAke21ldGhvZHMuam9pbihcIixcIil9IGFjY2VwdGVkYCxcbiAgICB9KVxuICB9XG4gIHJldHVybiBuZXh0KHJlcSwgcmVzKVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoTWV0aG9kc1xuIiwgImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHosIFpvZEZpcnN0UGFydHlUeXBlS2luZCB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiXG5cbmltcG9ydCB7XG4gIEJhZFJlcXVlc3RFeGNlcHRpb24sXG4gIEludGVybmFsU2VydmVyRXJyb3JFeGNlcHRpb24sXG59IGZyb20gXCIuLi8uLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuaW1wb3J0IHsgUXVlcnlBcnJheUZvcm1hdHMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuaW1wb3J0IHsgREVGQVVMVF9BUlJBWV9GT1JNQVRTIH0gZnJvbSBcIi4uXCJcblxuY29uc3QgZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYSA9IChcbiAgaXNab2RFZmZlY3Q6IGJvb2xlYW4sXG4gIHNjaGVtYTogei5ab2RUeXBlQW55XG4pOiB6LlpvZFR5cGVBbnkgfCB6LlpvZE9iamVjdDxhbnk+ID0+IHtcbiAgaWYgKCFpc1pvZEVmZmVjdCkge1xuICAgIHJldHVybiBzY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxuICB9XG5cbiAgbGV0IGN1cnJlbnRTY2hlbWEgPSBzY2hlbWFcblxuICB3aGlsZSAoY3VycmVudFNjaGVtYSBpbnN0YW5jZW9mIHouWm9kRWZmZWN0cykge1xuICAgIGN1cnJlbnRTY2hlbWEgPSBjdXJyZW50U2NoZW1hLl9kZWYuc2NoZW1hXG4gIH1cblxuICByZXR1cm4gY3VycmVudFNjaGVtYSBhcyB6LlpvZE9iamVjdDxhbnk+XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgY29ycmVjdCBzY2hlbWEgZnJvbSBhIFpvZEVmZmVjdCB8IFpvZERlZmF1bHQgfCBab2RPcHRpb25hbCBzY2hlbWEuXG4gKiBUT0RPOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgYWxsIHNwZWNpYWwgY2FzZXMgb2YgWm9kU2NoZW1hIGFuZCBub3QganVzdCBab2RFZmZlY3QgfCBab2REZWZhdWx0IHwgWm9kT3B0aW9uYWxcbiAqL1xuY29uc3QgZ2V0Wm9kRGVmRnJvbVpvZFNjaGVtYUhlbHBlcnMgPSAoc2NoZW1hOiB6LlpvZFR5cGVBbnkpID0+IHtcbiAgY29uc3Qgc3BlY2lhbF96b2RfdHlwZXMgPSBbXG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9wdGlvbmFsLFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICBdXG5cbiAgd2hpbGUgKHNwZWNpYWxfem9kX3R5cGVzLmluY2x1ZGVzKHNjaGVtYS5fZGVmLnR5cGVOYW1lKSkge1xuICAgIGlmIChcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT3B0aW9uYWwgfHxcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdFxuICAgICkge1xuICAgICAgc2NoZW1hID0gc2NoZW1hLl9kZWYuaW5uZXJUeXBlXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMpIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5fZGVmLnNjaGVtYVxuICAgICAgY29udGludWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYS5fZGVmXG59XG5cbmNvbnN0IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0ID0gKFxuICBzY2hlbWE6IHouWm9kVHlwZUFueVxuKTogei5ab2RPYmplY3Q8YW55PiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGlzWm9kRWZmZWN0ID0gc2NoZW1hLl9kZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzXG4gIGNvbnN0IHNhZmVfc2NoZW1hID0gZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYShpc1pvZEVmZmVjdCwgc2NoZW1hKVxuICBjb25zdCBpc1pvZE9iamVjdCA9XG4gICAgc2FmZV9zY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdFxuXG4gIGlmICghaXNab2RPYmplY3QpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICByZXR1cm4gc2FmZV9zY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxufVxuXG5jb25zdCBpc1pvZFNjaGVtYUFycmF5ID0gKHNjaGVtYTogei5ab2RUeXBlQW55KSA9PiB7XG4gIGNvbnN0IGRlZiA9IGdldFpvZERlZkZyb21ab2RTY2hlbWFIZWxwZXJzKHNjaGVtYSlcbiAgcmV0dXJuIGRlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFycmF5XG59XG5cbmNvbnN0IGlzWm9kU2NoZW1hQm9vbGVhbiA9IChzY2hlbWE6IHouWm9kVHlwZUFueSkgPT4ge1xuICBjb25zdCBkZWYgPSBnZXRab2REZWZGcm9tWm9kU2NoZW1hSGVscGVycyhzY2hlbWEpXG4gIHJldHVybiBkZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCb29sZWFuXG59XG5cbmNvbnN0IHBhcnNlUXVlcnlQYXJhbXMgPSAoXG4gIHNjaGVtYTogei5ab2RUeXBlQW55LFxuICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHN1cHBvcnRlZEFycmF5Rm9ybWF0czogUXVlcnlBcnJheUZvcm1hdHNcbikgPT4ge1xuICBjb25zdCBwYXJzZWRfaW5wdXQgPSBPYmplY3QuYXNzaWduKHt9LCBpbnB1dClcbiAgY29uc3Qgb2JqX3NjaGVtYSA9IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0KHNjaGVtYSlcblxuICBpZiAob2JqX3NjaGVtYSkge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9ial9zY2hlbWEuc2hhcGUpKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheSh2YWx1ZSBhcyB6LlpvZFR5cGVBbnkpKSB7XG4gICAgICAgIGNvbnN0IGFycmF5X2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmICh0eXBlb2YgYXJyYXlfaW5wdXQgPT09IFwic3RyaW5nXCIgJiYgYXJyYXlfaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcGFyc2VkX2lucHV0W2tleV0gPSBbXVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBhcnJheV9pbnB1dCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgIGFycmF5X2lucHV0Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJjb21tYVwiKVxuICAgICAgICApIHtcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IGFycmF5X2lucHV0LnNwbGl0KFwiLFwiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXQgPSBpbnB1dFtgJHtrZXl9W11gXVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzLmluY2x1ZGVzKFwiYnJhY2tldHNcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgcHJlX3NwbGl0X2FycmF5ID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IHByZV9zcGxpdF9hcnJheS5zcGxpdChcIixcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0KSAmJlxuICAgICAgICAgIHN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcImJyYWNrZXRzXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChpc1pvZFNjaGVtYUJvb2xlYW4odmFsdWUgYXMgei5ab2RUeXBlQW55KSkge1xuICAgICAgICBjb25zdCBib29sZWFuX2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmICh0eXBlb2YgYm9vbGVhbl9pbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYm9vbGVhbl9pbnB1dCA9PT0gXCJ0cnVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzY2hlbWEucGFyc2UocGFyc2VkX2lucHV0KVxufVxuXG5jb25zdCB2YWxpZGF0ZVF1ZXJ5UGFyYW1zID0gKFxuICBpbnB1dFVybDogc3RyaW5nLFxuICBzY2hlbWE6IHouWm9kVHlwZUFueSxcbiAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzOiBRdWVyeUFycmF5Rm9ybWF0c1xuKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaW5wdXRVcmwsIFwiaHR0cDovL2R1bW15LmNvbVwiKVxuXG4gIGNvbnN0IHNlZW5LZXlzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICBjb25zdCBvYmpfc2NoZW1hID0gdHJ5R2V0Wm9kU2NoZW1hQXNPYmplY3Qoc2NoZW1hKVxuICBpZiAoIW9ial9zY2hlbWEpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIHVybC5zZWFyY2hQYXJhbXMua2V5cygpKSB7XG4gICAgZm9yIChjb25zdCBbc2NoZW1hS2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqX3NjaGVtYS5zaGFwZSkpIHtcbiAgICAgIGlmIChpc1pvZFNjaGVtYUFycmF5KHZhbHVlIGFzIHouWm9kVHlwZUFueSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleSA9PT0gYCR7c2NoZW1hS2V5fVtdYCAmJlxuICAgICAgICAgICFzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJicmFja2V0c1wiKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgICB0eXBlOiBcImludmFsaWRfcXVlcnlfcGFyYW1zXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgQnJhY2tldCBzeW50YXggbm90IHN1cHBvcnRlZCBmb3IgcXVlcnkgcGFyYW0gXCIke3NjaGVtYUtleX1cImAsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGtleV9zY2hlbWEgPSBvYmpfc2NoZW1hLnNoYXBlW2tleV1cblxuICAgIGlmIChrZXlfc2NoZW1hKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheShrZXlfc2NoZW1hKSkge1xuICAgICAgICBpZiAoc2VlbktleXMuaGFzKGtleSkgJiYgIXN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcInJlcGVhdFwiKSkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgICAgIHR5cGU6IFwiaW52YWxpZF9xdWVyeV9wYXJhbXNcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBSZXBlYXRlZCBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWQgZm9yIGR1cGxpY2F0ZSBxdWVyeSBwYXJhbSBcIiR7a2V5fVwiYCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2VlbktleXMuYWRkKGtleSlcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RJbnB1dDxcbiAgSnNvbkJvZHkgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBDb21tb25QYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIEZvcm1EYXRhIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbj4ge1xuICBqc29uQm9keT86IEpzb25Cb2R5XG4gIHF1ZXJ5UGFyYW1zPzogUXVlcnlQYXJhbXNcbiAgY29tbW9uUGFyYW1zPzogQ29tbW9uUGFyYW1zXG4gIGZvcm1EYXRhPzogRm9ybURhdGFcbiAganNvblJlc3BvbnNlPzogSnNvblJlc3BvbnNlXG4gIHNob3VsZFZhbGlkYXRlUmVzcG9uc2VzPzogYm9vbGVhblxuICBzaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5PzogYm9vbGVhblxuICBzdXBwb3J0ZWRBcnJheUZvcm1hdHM/OiBRdWVyeUFycmF5Rm9ybWF0c1xufVxuXG5jb25zdCB6b2RJc3N1ZVRvU3RyaW5nID0gKGlzc3VlOiB6LlpvZElzc3VlKSA9PiB7XG4gIGlmIChpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGlzc3VlLm1lc3NhZ2VcbiAgfVxuICBpZiAoaXNzdWUubWVzc2FnZSA9PT0gXCJSZXF1aXJlZFwiKSB7XG4gICAgcmV0dXJuIGAke2lzc3VlLnBhdGguam9pbihcIi5cIil9IGlzIHJlcXVpcmVkYFxuICB9XG4gIHJldHVybiBgJHtpc3N1ZS5tZXNzYWdlfSBmb3IgXCIke2lzc3VlLnBhdGguam9pbihcIi5cIil9XCJgXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSnNvblJlc3BvbnNlPEpzb25SZXNwb25zZSBleHRlbmRzIHouWm9kVHlwZUFueT4oXG4gIGpzb25SZXNwb25zZTogSnNvblJlc3BvbnNlIHwgdW5kZWZpbmVkLFxuICByZXM6IE5leHRBcGlSZXNwb25zZVxuKSB7XG4gIGNvbnN0IG9yaWdpbmFsX3Jlc19qc29uID0gcmVzLmpzb25cbiAgY29uc3Qgb3ZlcnJpZGVfcmVzX2pzb24gPSAoanNvbjogYW55KSA9PiB7XG4gICAgY29uc3QgaXNfc3VjY2VzcyA9IHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMFxuICAgIGlmICghaXNfc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsX3Jlc19qc29uKGpzb24pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGpzb25SZXNwb25zZT8ucGFyc2UoanNvbilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbFNlcnZlckVycm9yRXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX3Jlc3BvbnNlXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwidGhlIHJlc3BvbnNlIGRvZXMgbm90IG1hdGNoIHdpdGgganNvblJlc3BvbnNlXCIsXG4gICAgICAgIHpvZEVycm9yOiBlcnIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBvcmlnaW5hbF9yZXNfanNvbihqc29uKVxuICB9XG4gIHJlcy5qc29uID0gb3ZlcnJpZGVfcmVzX2pzb25cbn1cblxuZXhwb3J0IGNvbnN0IHdpdGhWYWxpZGF0aW9uID1cbiAgPFxuICAgIEpzb25Cb2R5IGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIENvbW1vblBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBGb3JtRGF0YSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbiAgPihcbiAgICBpbnB1dDogUmVxdWVzdElucHV0PFxuICAgICAgSnNvbkJvZHksXG4gICAgICBRdWVyeVBhcmFtcyxcbiAgICAgIENvbW1vblBhcmFtcyxcbiAgICAgIEZvcm1EYXRhLFxuICAgICAgSnNvblJlc3BvbnNlXG4gICAgPlxuICApID0+XG4gIChuZXh0KSA9PlxuICBhc3luYyAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCB7IHN1cHBvcnRlZEFycmF5Rm9ybWF0cyA9IERFRkFVTFRfQVJSQVlfRk9STUFUUyB9ID0gaW5wdXRcblxuICAgIGlmIChcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5qc29uQm9keSkgfHxcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5jb21tb25QYXJhbXMpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGZvcm1EYXRhIHdpdGgganNvbkJvZHkgb3IgY29tbW9uUGFyYW1zXCIpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKHJlcS5tZXRob2QgPT09IFwiUE9TVFwiIHx8IHJlcS5tZXRob2QgPT09IFwiUEFUQ0hcIikgJiZcbiAgICAgIChpbnB1dC5qc29uQm9keSB8fCBpbnB1dC5jb21tb25QYXJhbXMpICYmXG4gICAgICAhcmVxLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0/LmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSAmJlxuICAgICAgIV8uaXNFbXB0eShyZXEuYm9keSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2NvbnRlbnRfdHlwZVwiLFxuICAgICAgICBtZXNzYWdlOiBgJHtyZXEubWV0aG9kfSByZXF1ZXN0cyBtdXN0IGhhdmUgQ29udGVudC1UeXBlIGhlYWRlciB3aXRoIFwiYXBwbGljYXRpb24vanNvblwiYCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaW5wdXQuZm9ybURhdGEgJiZcbiAgICAgIHJlcS5tZXRob2QgIT09IFwiR0VUXCIgJiZcbiAgICAgICFyZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXT8uaW5jbHVkZXMoXG4gICAgICAgIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCJcbiAgICAgIClcbiAgICAgIC8vIFRPRE8gZXZlbnR1YWxseSB3ZSBzaG91bGQgc3VwcG9ydCBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9jb250ZW50X3R5cGVcIixcbiAgICAgICAgbWVzc2FnZTogYE11c3QgaGF2ZSBDb250ZW50LVR5cGUgaGVhZGVyIHdpdGggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcImAsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcmlnaW5hbF9jb21iaW5lZF9wYXJhbXMgPSB7IC4uLnJlcS5xdWVyeSwgLi4ucmVxLmJvZHkgfVxuXG4gICAgICBjb25zdCB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSA9IGlucHV0LnNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHlcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogcmVxLm1ldGhvZCAhPT0gXCJHRVRcIiAmJiByZXEubWV0aG9kICE9PSBcIkRFTEVURVwiXG5cbiAgICAgIGNvbnN0IGlzRm9ybURhdGEgPSBCb29sZWFuKGlucHV0LmZvcm1EYXRhKVxuXG4gICAgICBpZiAoaXNGb3JtRGF0YSAmJiB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSkge1xuICAgICAgICByZXEuYm9keSA9IGlucHV0LmZvcm1EYXRhPy5wYXJzZShyZXEuYm9keSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0Zvcm1EYXRhICYmIHdpbGxWYWxpZGF0ZVJlcXVlc3RCb2R5KSB7XG4gICAgICAgIHJlcS5ib2R5ID0gaW5wdXQuanNvbkJvZHk/LnBhcnNlKHJlcS5ib2R5KVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQucXVlcnlQYXJhbXMpIHtcbiAgICAgICAgaWYgKCFyZXEudXJsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVxLnVybCBpcyB1bmRlZmluZWRcIilcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlUXVlcnlQYXJhbXMocmVxLnVybCwgaW5wdXQucXVlcnlQYXJhbXMsIHN1cHBvcnRlZEFycmF5Rm9ybWF0cylcblxuICAgICAgICByZXEucXVlcnkgPSBwYXJzZVF1ZXJ5UGFyYW1zKFxuICAgICAgICAgIGlucHV0LnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHJlcS5xdWVyeSxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQuY29tbW9uUGFyYW1zKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhcyBjb21tb25QYXJhbXMgaW5jbHVkZXMgcXVlcnkgcGFyYW1zLCB3ZSBjYW4gdXNlIHRoZSBwYXJzZVF1ZXJ5UGFyYW1zIGZ1bmN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICA7KHJlcSBhcyBhbnkpLmNvbW1vblBhcmFtcyA9IHBhcnNlUXVlcnlQYXJhbXMoXG4gICAgICAgICAgaW5wdXQuY29tbW9uUGFyYW1zLFxuICAgICAgICAgIG9yaWdpbmFsX2NvbWJpbmVkX3BhcmFtcyxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhZFJlcXVlc3RFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiWm9kRXJyb3JcIikge1xuICAgICAgICBsZXQgbWVzc2FnZVxuICAgICAgICBpZiAoZXJyb3IuaXNzdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IGlzc3VlID0gZXJyb3IuaXNzdWVzWzBdXG4gICAgICAgICAgbWVzc2FnZSA9IHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZV9jb21wb25lbnRzOiBzdHJpbmdbXSA9IFtdXG4gICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VfY29tcG9uZW50cy5wdXNoKHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgIGAke2Vycm9yLmlzc3Vlcy5sZW5ndGh9IElucHV0IEVycm9yczogYCArXG4gICAgICAgICAgICBtZXNzYWdlX2NvbXBvbmVudHMuam9pbihcIiwgXCIpXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICB2YWxpZGF0aW9uX2Vycm9yczogZXJyb3IuZm9ybWF0KCksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiRXJyb3Igd2hpbGUgcGFyc2luZyBpbnB1dFwiLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aGlzIHdpbGwgb3ZlcnJpZGUgdGhlIHJlcy5qc29uIG1ldGhvZCB0byB2YWxpZGF0ZSB0aGUgcmVzcG9uc2VcbiAgICAgKi9cbiAgICBpZiAoaW5wdXQuc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMpIHtcbiAgICAgIHZhbGlkYXRlSnNvblJlc3BvbnNlKGlucHV0Lmpzb25SZXNwb25zZSwgcmVzKVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0KHJlcSwgcmVzKVxuICB9XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhWYWxpZGF0aW9uXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7OztBQ0FBOzs7QUNBQTtBQWlVTyxJQUFNLFdBQXFCLElBQUksaUJBQXdCO0FBQzVELFFBQU0sa0JBQWtCLGFBQWEsYUFBYSxTQUFTO0FBQzNELFFBQU0sTUFBTSxhQUFhLE1BQU0sR0FBRyxFQUFFO0FBRXBDLE1BQUksc0JBQXNCO0FBQzFCLFdBQVMsSUFBSSxJQUFJLFNBQVMsR0FBRyxLQUFLLEdBQUcsS0FBSztBQUN4QywwQkFBdUIsSUFBSSxHQUFXLG1CQUFtQjtBQUFBLEVBQzNEO0FBRUEsU0FBTztBQUNUO0FBRUEsSUFBTyxtQkFBUTs7O0FDN1VmO0FBV08sSUFBTSxjQUFjLENBQUMsWUFBMkIsQ0FBQyxTQUFTLENBQUMsS0FBSyxRQUFRO0FBQzdFLE1BQUksQ0FBQyxRQUFRLFNBQVMsSUFBSSxNQUFNLEdBQUc7QUFDakMsVUFBTSxJQUFJLDBCQUEwQjtBQUFBLE1BQ2xDLE1BQU07QUFBQSxNQUNOLFNBQVMsUUFBUSxRQUFRLEtBQUssR0FBRztBQUFBLElBQ25DLENBQUM7QUFBQSxFQUNIO0FBQ0EsU0FBTyxLQUFLLEtBQUssR0FBRztBQUN0QjtBQUVBLElBQU8sdUJBQVE7OztBQ3JCZjtBQUNBLFNBQVMsR0FBRyw2QkFBNkI7QUFDekMsT0FBTyxPQUFPO0FBU2QsSUFBTSx3Q0FBd0MsQ0FDNUMsYUFD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
392
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy93aXRoLXJvdXRlLXNwZWMvaW5kZXgudHMiLCAiLi4vc3JjL3dyYXBwZXJzL2luZGV4LnRzIiwgIi4uL3NyYy93aXRoLXJvdXRlLXNwZWMvbWlkZGxld2FyZXMvd2l0aC1tZXRob2RzLnRzIiwgIi4uL3NyYy93aXRoLXJvdXRlLXNwZWMvbWlkZGxld2FyZXMvd2l0aC12YWxpZGF0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgKiBmcm9tIFwiLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuZXhwb3J0ICogZnJvbSBcIi4vd2l0aC1yb3V0ZS1zcGVjXCJcbmV4cG9ydCB7IHdyYXBwZXJzIH0gZnJvbSBcIi4vd3JhcHBlcnNcIlxuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIlxuIiwgImltcG9ydCB7IE5leHRBcGlSZXNwb25zZSwgTmV4dEFwaVJlcXVlc3QgfSBmcm9tIFwibmV4dFwiXG5pbXBvcnQgeyB3aXRoRXhjZXB0aW9uSGFuZGxpbmcgfSBmcm9tIFwiLi4vbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlXCJcbmltcG9ydCB3cmFwcGVycywgeyBNaWRkbGV3YXJlIH0gZnJvbSBcIi4uL3dyYXBwZXJzXCJcbmltcG9ydCB7XG4gIENyZWF0ZVdpdGhSb3V0ZVNwZWNGdW5jdGlvbixcbiAgUXVlcnlBcnJheUZvcm1hdHMsXG4gIFJvdXRlU3BlYyxcbn0gZnJvbSBcIi4uL3R5cGVzXCJcbmltcG9ydCB3aXRoTWV0aG9kcywgeyBIVFRQTWV0aG9kcyB9IGZyb20gXCIuL21pZGRsZXdhcmVzL3dpdGgtbWV0aG9kc1wiXG5pbXBvcnQgd2l0aFZhbGlkYXRpb24gZnJvbSBcIi4vbWlkZGxld2FyZXMvd2l0aC12YWxpZGF0aW9uXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7XG4gIEF1dGhNZXRob2REb2VzTm90QXBwbHlFeGNlcHRpb24sXG4gIFVuYXV0aG9yaXplZEV4Y2VwdGlvbixcbn0gZnJvbSBcIi4uL25leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZVwiXG5cbnR5cGUgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnkgfCB6LlpvZEVmZmVjdHM8ei5ab2RUeXBlQW55PlxuXG5leHBvcnQgY29uc3QgY2hlY2tSb3V0ZVNwZWMgPSA8XG4gIEF1dGhUeXBlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBNZXRob2RzIGV4dGVuZHMgSFRUUE1ldGhvZHNbXSA9IEhUVFBNZXRob2RzW10sXG4gIEpzb25Cb2R5IGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIENvbW1vblBhcmFtcyBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBNaWRkbGV3YXJlcyBleHRlbmRzIHJlYWRvbmx5IE1pZGRsZXdhcmU8YW55LCBhbnk+W10gPSByZWFkb25seSBNaWRkbGV3YXJlPFxuICAgIGFueSxcbiAgICBhbnlcbiAgPltdLFxuICBGb3JtRGF0YSBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBTcGVjIGV4dGVuZHMgUm91dGVTcGVjPFxuICAgIEF1dGhUeXBlLFxuICAgIE1ldGhvZHMsXG4gICAgSnNvbkJvZHksXG4gICAgUXVlcnlQYXJhbXMsXG4gICAgQ29tbW9uUGFyYW1zLFxuICAgIE1pZGRsZXdhcmVzLFxuICAgIEZvcm1EYXRhXG4gID4gPSBSb3V0ZVNwZWM8XG4gICAgQXV0aFR5cGUsXG4gICAgTWV0aG9kcyxcbiAgICBKc29uQm9keSxcbiAgICBRdWVyeVBhcmFtcyxcbiAgICBDb21tb25QYXJhbXMsXG4gICAgTWlkZGxld2FyZXMsXG4gICAgRm9ybURhdGFcbiAgPlxuPihcbiAgc3BlYzogU3BlY1xuKTogc3RyaW5nIGV4dGVuZHMgU3BlY1tcImF1dGhcIl1cbiAgPyBgeW91ciByb3V0ZSBzcGVjIGlzIHVuZGVyc3BlY2lmaWVkLCBhZGQgXCJhcyBjb25zdFwiYFxuICA6IFNwZWMgPT4gc3BlYyBhcyBhbnlcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQVJSQVlfRk9STUFUUzogUXVlcnlBcnJheUZvcm1hdHMgPSBbXG4gIFwiYnJhY2tldHNcIixcbiAgXCJjb21tYVwiLFxuICBcInJlcGVhdFwiLFxuXVxuXG5leHBvcnQgY29uc3QgY3JlYXRlV2l0aFJvdXRlU3BlYzogQ3JlYXRlV2l0aFJvdXRlU3BlY0Z1bmN0aW9uID0gKChcbiAgc2V0dXBQYXJhbXNcbikgPT4ge1xuICBjb25zdCB7XG4gICAgYXV0aE1pZGRsZXdhcmVNYXAgPSB7fSxcbiAgICBnbG9iYWxNaWRkbGV3YXJlcyA9IFtdLFxuICAgIGdsb2JhbE1pZGRsZXdhcmVzQWZ0ZXJBdXRoID0gW10sXG4gICAgc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMsXG4gICAgc2hvdWxkVmFsaWRhdGVHZXRSZXF1ZXN0Qm9keSA9IHRydWUsXG4gICAgZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlID0gd2l0aEV4Y2VwdGlvbkhhbmRsaW5nKHtcbiAgICAgIGFkZE9rU3RhdHVzOiBzZXR1cFBhcmFtcy5hZGRPa1N0YXR1cyxcbiAgICAgIGV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9uczoge1xuICAgICAgICBnZXRFcnJvckNvbnRleHQ6IChyZXEsIGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pIGFzIGFueSxcbiAgICBnbG9iYWxTY2hlbWFzID0gc2V0dXBQYXJhbXMuYWRkT2tTdGF0dXNcbiAgICAgID8ge1xuICAgICAgICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgICAgICAgfVxuICAgICAgOiB7fSxcbiAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMgPSBERUZBVUxUX0FSUkFZX0ZPUk1BVFMsXG4gICAgb25NdWx0aXBsZUF1dGhNaWRkbGV3YXJlRmFpbHVyZXMsXG4gICAgbWF4RHVyYXRpb246IGdsb2JhbE1heER1cmF0aW9uLFxuICB9ID0gc2V0dXBQYXJhbXNcblxuICBjb25zdCB3aXRoUm91dGVTcGVjID0gKHNwZWM6IFJvdXRlU3BlYykgPT4ge1xuICAgIGNvbnN0IGNyZWF0ZVJvdXRlRXhwb3J0ID0gKHVzZXJEZWZpbmVkUm91dGVGbikgPT4ge1xuICAgICAgY29uc3Qgcm9vdFJlcXVlc3RIYW5kbGVyID0gYXN5bmMgKFxuICAgICAgICByZXE6IE5leHRBcGlSZXF1ZXN0LFxuICAgICAgICByZXM6IE5leHRBcGlSZXNwb25zZVxuICAgICAgKSA9PiB7XG4gICAgICAgIGF1dGhNaWRkbGV3YXJlTWFwW1wibm9uZVwiXSA9IChuZXh0KSA9PiBuZXh0XG5cbiAgICAgICAgY29uc3QgYXV0aE1pZGRsZXdhcmVzID0gKFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoc3BlYy5hdXRoKSA/IHNwZWMuYXV0aCA6IFtzcGVjLmF1dGhdXG4gICAgICAgICkubWFwKChhdXRoVHlwZSkgPT4gW2F1dGhUeXBlLCBhdXRoTWlkZGxld2FyZU1hcFthdXRoVHlwZV1dIGFzIGNvbnN0KVxuICAgICAgICBjb25zdCB1bmRlZmluZWRBdXRoVHlwZSA9IGF1dGhNaWRkbGV3YXJlcy5maW5kKChbLCBtd10pID0+ICFtdylcbiAgICAgICAgaWYgKHVuZGVmaW5lZEF1dGhUeXBlKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhdXRoIHR5cGU6ICR7dW5kZWZpbmVkQXV0aFR5cGV9YClcblxuICAgICAgICBjb25zdCBmaXJzdEF1dGhNaWRkbGV3YXJlVGhhdFN1Y2NlZWRzID0gKG5leHQpID0+IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZU11bHRpcGxlQXV0aE1pZGRsZXdhcmVGYWlsdXJlcyA9XG4gICAgICAgICAgICBzcGVjLm9uTXVsdGlwbGVBdXRoTWlkZGxld2FyZUZhaWx1cmVzID8/XG4gICAgICAgICAgICBvbk11bHRpcGxlQXV0aE1pZGRsZXdhcmVGYWlsdXJlc1xuXG4gICAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgbWlkZGxld2FyZV0gb2YgYXV0aE1pZGRsZXdhcmVzKSB7XG4gICAgICAgICAgICBsZXQgZGlkQXV0aE1pZGRsZXdhcmVUaHJvdyA9IHRydWVcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCBtaWRkbGV3YXJlKCguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGVycm9ycyB1bnJlbGF0ZWQgdG8gYXV0aCB0aHJvd24gYnkgYnVpbHQtaW4gbWlkZGxld2FyZSAod2l0aE1ldGhvZHMsIHdpdGhWYWxpZGF0aW9uKSB3aWxsIGJlIGNhdWdodCBoZXJlXG4gICAgICAgICAgICAgICAgZGlkQXV0aE1pZGRsZXdhcmVUaHJvdyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQoLi4uYXJncylcbiAgICAgICAgICAgICAgfSkocmVxLCByZXMpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEF1dGhNZXRob2REb2VzTm90QXBwbHlFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVycm9yLnNvdXJjZV9taWRkbGV3YXJlID0gbmFtZVxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFuZGxlTXVsdGlwbGVBdXRoTWlkZGxld2FyZUZhaWx1cmVzICYmXG4gICAgICAgICAgICAgICAgZGlkQXV0aE1pZGRsZXdhcmVUaHJvd1xuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVNdWx0aXBsZUF1dGhNaWRkbGV3YXJlRmFpbHVyZXMoW2Vycm9yXSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBuZXcgVW5hdXRob3JpemVkRXhjZXB0aW9uKHtcbiAgICAgICAgICAgIHR5cGU6IFwidW5hdXRob3JpemVkXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBcIk5vIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgc3VjY2VlZGVkXCIsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3cmFwcGVycyhcbiAgICAgICAgICAuLi4oKGV4Y2VwdGlvbkhhbmRsaW5nTWlkZGxld2FyZVxuICAgICAgICAgICAgPyBbZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlXVxuICAgICAgICAgICAgOiBbXSkgYXMgW2FueV0pLFxuICAgICAgICAgIC4uLigoZ2xvYmFsTWlkZGxld2FyZXMgfHwgW10pIGFzIFtdKSxcbiAgICAgICAgICBmaXJzdEF1dGhNaWRkbGV3YXJlVGhhdFN1Y2NlZWRzLFxuICAgICAgICAgIC4uLigoZ2xvYmFsTWlkZGxld2FyZXNBZnRlckF1dGggfHwgW10pIGFzIFtdKSxcbiAgICAgICAgICAuLi4oKHNwZWMubWlkZGxld2FyZXMgfHwgW10pIGFzIFtdKSxcbiAgICAgICAgICB3aXRoTWV0aG9kcyhzcGVjLm1ldGhvZHMpLFxuICAgICAgICAgIHdpdGhWYWxpZGF0aW9uKHtcbiAgICAgICAgICAgIGpzb25Cb2R5OiBzcGVjLmpzb25Cb2R5LFxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHNwZWMucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICBjb21tb25QYXJhbXM6IHNwZWMuY29tbW9uUGFyYW1zLFxuICAgICAgICAgICAgZm9ybURhdGE6IHNwZWMuZm9ybURhdGEsXG4gICAgICAgICAgICBqc29uUmVzcG9uc2U6IHNwZWMuanNvblJlc3BvbnNlLFxuICAgICAgICAgICAgc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMsXG4gICAgICAgICAgICBzaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHVzZXJEZWZpbmVkUm91dGVGblxuICAgICAgICApKHJlcSBhcyBhbnksIHJlcylcbiAgICAgIH1cblxuICAgICAgcm9vdFJlcXVlc3RIYW5kbGVyLl9zZXR1cFBhcmFtcyA9IHNldHVwUGFyYW1zXG4gICAgICByb290UmVxdWVzdEhhbmRsZXIuX3JvdXRlU3BlYyA9IHNwZWNcblxuICAgICAgLy8gRXhwb3J0IG1heER1cmF0aW9uIGFzIGEgTmV4dC5qcyByb3V0ZSBzZWdtZW50IGNvbmZpZ1xuICAgICAgY29uc3QgbWF4RHVyYXRpb24gPSBzcGVjLm1heER1cmF0aW9uID8/IGdsb2JhbE1heER1cmF0aW9uXG4gICAgICBpZiAobWF4RHVyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByb290UmVxdWVzdEhhbmRsZXIubWF4RHVyYXRpb24gPSBtYXhEdXJhdGlvblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcm9vdFJlcXVlc3RIYW5kbGVyXG4gICAgfVxuXG4gICAgY3JlYXRlUm91dGVFeHBvcnQuX3NldHVwUGFyYW1zID0gc2V0dXBQYXJhbXNcbiAgICBjcmVhdGVSb3V0ZUV4cG9ydC5fcm91dGVTcGVjID0gc3BlY1xuXG4gICAgcmV0dXJuIGNyZWF0ZVJvdXRlRXhwb3J0XG4gIH1cblxuICB3aXRoUm91dGVTcGVjLl9zZXR1cFBhcmFtcyA9IHNldHVwUGFyYW1zXG5cbiAgcmV0dXJuIHdpdGhSb3V0ZVNwZWNcbn0pIGFzIGFueVxuIiwgImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QgYXMgUmVxLCBOZXh0QXBpUmVzcG9uc2UgYXMgUmVzIH0gZnJvbSBcIm5leHRcIlxuLypcblxuV3JhcHMgYSBmdW5jdGlvbiBpbiBsYXllcnMgb2Ygb3RoZXIgZnVuY3Rpb25zLCB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBpbnB1dC9vdXRwdXRcbnR5cGUuIFRoZSBvdXRwdXQgb2Ygd3JhcHBlcnMgd2lsbCBhbHdheXMgaGF2ZSB0aGUgdHlwZSBvZiBpdCdzIGxhc3QgcGFyYW1ldGVyXG4odGhlIHdyYXBwZWQgZnVuY3Rpb24pXG5cblRoaXMgZnVuY3Rpb24gdHVybnMgdGhpcyB0eXBlIG9mIGNvbXBvc2l0aW9uLi4uXG5cbmxvZ2dlci53aXRoQ29udGV4dChcInNvbWVjb250ZXh0XCIpKFxuICBhc3luYyAoYSwgYikgPT4ge1xuICAgIHJldHVybiBhXG4gIH1cbilcblxuSW50by4uLlxuXG53cmFwcGVycyhcbiAgbG9nZ2VyLndpdGhDb250ZXh0KFwic29tZWNvbnRleHRcIiksXG4gIGFzeW5jIChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGFcbiAgfVxuKVxuXG5IYXZpbmcgdGhpcyBhcyBhIHV0aWxpdHkgbWV0aG9kIGhlbHBzIHByZXNlcnZlIHR5cGVzLCB3aGljaCBvdGhlcndpc2UgY2FuIGdldFxubWVzc2VkIHVwIGJ5IHRoZSBtaWRkbGV3YXJlcy4gSXQgYWxzbyBjYW4gbWFrZSB0aGUgY29kZSBjbGVhbmVyIHdoZXJlIHRoZXJlIGFyZVxubXVsdGlwbGUgd3JhcHBlcnMuXG5cbiMjIEVYQU1QTEVTXG5cbkluIHRoZSBjb250ZXh0IG9mIHJlcXVlc3QgbWlkZGxld2FyZSB5b3UgbWlnaHQgd3JpdGUgc29tZXRoaW5nIGxpa2UgdGhpcy4uLlxuXG5jb25zdCB3aXRoUmVxdWVzdExvZ2dpbmdNaWRkbGV3YXJlID0gKG5leHQpID0+IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICBjb25zb2xlLmxvZyhgR09UIFJFUVVFU1QgJHtyZXEubWV0aG9kfSAke3JlcS5wYXRofWApXG4gIHJldHVybiBuZXh0KHJlcSwgcmVzKVxufVxuXG5IZXJlJ3MgYW4gZXhhbXBsZSBvZiBhIHdyYXBwZXIgdGhhdCB0YWtlcyBzb21lIHBhcmFtZXRlcnMuLi5cblxuY29uc3Qgd2l0aExvZ2dlZEFyZ3VtZW50cyA9XG4gICAgKGxvZ1ByZWZpeDogc3RyaW5nKSA9PlxuICAgIChuZXh0KSA9PlxuICAgIGFzeW5jICguLi5mdW5jQXJncykgPT4ge1xuICAgICAgY29uc29sZS5sb2cobG9nUHJlZml4LCAuLi5mdW5jQXJncylcbiAgICAgIHJldHVybiBuZXh0KC4uLmZ1bmNBcmdzKVxuICAgIH1cblxuKi9cblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZTxULCBEZXAgPSB7fT4gPSAoXG4gIG5leHQ6IChyZXE6IFJlcSAmIERlcCAmIFQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxICYgRGVwICYgVCwgcmVzOiBSZXMpID0+IGFueVxuXG4vLyBTYWZlciBNaWRkbGV3YXJlIHJlcXVpcmVzIHRoZSB1c2Ugb2YgZXh0ZW5kUmVxdWVzdCB0byBlbnN1cmUgdGhhdCB0aGVcbi8vIG5ldyBjb250ZXh0IChUKSB3YXMgYWN0dWFsbHkgYWRkZWQgdG8gdGhlIHJlcXVlc3QuIEl0J3Mga2luZCBvZiBhbm5veWluZ1xuLy8gdG8gdXNlIGluIHByYWN0aWNlLCBzbyB3ZSBkb24ndCB1c2UgaXQgZm9yIG91ciBXcmFwcGVycyAoeWV0KVxuZXhwb3J0IHR5cGUgU2FmZXJNaWRkbGV3YXJlPFQsIERlcCA9IHt9PiA9IChcbiAgbmV4dDogKHJlcTogUmVxICYgRGVwICYgVCwgcmVzOiBSZXMpID0+IGFueVxuKSA9PiAocmVxOiBSZXEgJiBEZXAsIHJlczogUmVzKSA9PiBhbnlcblxuZXhwb3J0IGNvbnN0IGV4dGVuZFJlcXVlc3QgPSA8VCBleHRlbmRzIFJlcSwgSyBleHRlbmRzIHt9PihcbiAgcmVxOiBULFxuICBtZXJnZTogS1xuKTogVCAmIEsgPT4ge1xuICBmb3IgKGNvbnN0IFtrZXksIHZdIG9mIE9iamVjdC5lbnRyaWVzKG1lcmdlKSkge1xuICAgIDsocmVxIGFzIGFueSlba2V5XSA9IHZcbiAgfVxuICByZXR1cm4gcmVxIGFzIGFueVxufVxuXG50eXBlIFdyYXBwZXJzMSA9IDxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBlbmRwb2ludDogKHJlcTogUmVxICYgTXcxUmVxdWVzdENvbnRleHQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbnR5cGUgV3JhcHBlcnMyID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgZW5kcG9pbnQ6IChyZXE6IFJlcSAmIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbi8vIFRPRE8gZmlndXJlIG91dCBob3cgdG8gZG8gYSByZWN1cnNpdmUgZGVmaW5pdGlvbiwgb3Igb25lIHRoYXQgc2ltcGxpZmllc1xuLy8gdGhlc2UgcmVkdW5kYW50IHdyYXBwZXJzXG5cbnR5cGUgV3JhcHBlcnMzID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwLFxuICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgTXczRGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgbXczOiBNaWRkbGV3YXJlPFxuICAgIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzNEZXAgPyBNdzNEZXAgOiBuZXZlclxuICA+LFxuICBlbmRwb2ludDogKFxuICAgIHJlcTogUmVxICYgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCAmIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIHJlczogUmVzXG4gICkgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzNCA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcCxcbiAgTXc0UmVxdWVzdENvbnRleHQsXG4gIE13NERlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgbXc0OiBNaWRkbGV3YXJlPFxuICAgIE13NFJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NERlcFxuICAgICAgPyBNdzREZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczUgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczYgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXAsXG4gIE13NlJlcXVlc3RDb250ZXh0LFxuICBNdzZEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc2OiBNaWRkbGV3YXJlPFxuICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc2RGVwXG4gICAgICA/IE13NkRlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBlbmRwb2ludDogKFxuICAgIHJlcTogUmVxICZcbiAgICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIHJlczogUmVzXG4gICkgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzNyA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcCxcbiAgTXc0UmVxdWVzdENvbnRleHQsXG4gIE13NERlcCxcbiAgTXc1UmVxdWVzdENvbnRleHQsXG4gIE13NURlcCxcbiAgTXc2UmVxdWVzdENvbnRleHQsXG4gIE13NkRlcCxcbiAgTXc3UmVxdWVzdENvbnRleHQsXG4gIE13N0RlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgbXc0OiBNaWRkbGV3YXJlPFxuICAgIE13NFJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NERlcFxuICAgICAgPyBNdzREZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc1OiBNaWRkbGV3YXJlPFxuICAgIE13NVJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc1RGVwXG4gICAgICA/IE13NURlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBtdzY6IE1pZGRsZXdhcmU8XG4gICAgTXc2UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc1UmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzZEZXBcbiAgICAgID8gTXc2RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NzogTWlkZGxld2FyZTxcbiAgICBNdzdSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13N0RlcFxuICAgICAgPyBNdzdEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzdSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVycyA9IFdyYXBwZXJzMSAmXG4gIFdyYXBwZXJzMiAmXG4gIFdyYXBwZXJzMyAmXG4gIFdyYXBwZXJzNCAmXG4gIFdyYXBwZXJzNSAmXG4gIFdyYXBwZXJzNiAmXG4gIFdyYXBwZXJzN1xuXG5leHBvcnQgY29uc3Qgd3JhcHBlcnM6IFdyYXBwZXJzID0gKC4uLndyYXBwZXJzQXJnczogYW55W10pID0+IHtcbiAgY29uc3Qgd3JhcHBlZEZ1bmN0aW9uID0gd3JhcHBlcnNBcmdzW3dyYXBwZXJzQXJncy5sZW5ndGggLSAxXVxuICBjb25zdCBtd3MgPSB3cmFwcGVyc0FyZ3Muc2xpY2UoMCwgLTEpXG5cbiAgbGV0IGxhc3RXcmFwcGVkRnVuY3Rpb24gPSB3cmFwcGVkRnVuY3Rpb25cbiAgZm9yIChsZXQgaSA9IG13cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGxhc3RXcmFwcGVkRnVuY3Rpb24gPSAobXdzW2ldIGFzIGFueSkobGFzdFdyYXBwZWRGdW5jdGlvbilcbiAgfVxuXG4gIHJldHVybiBsYXN0V3JhcHBlZEZ1bmN0aW9uXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdyYXBwZXJzXG4iLCAiaW1wb3J0IHsgTWV0aG9kTm90QWxsb3dlZEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuXG5leHBvcnQgdHlwZSBIVFRQTWV0aG9kcyA9XG4gIHwgXCJHRVRcIlxuICB8IFwiUE9TVFwiXG4gIHwgXCJERUxFVEVcIlxuICB8IFwiUFVUXCJcbiAgfCBcIlBBVENIXCJcbiAgfCBcIkhFQURcIlxuICB8IFwiT1BUSU9OU1wiXG5cbmV4cG9ydCBjb25zdCB3aXRoTWV0aG9kcyA9IChtZXRob2RzOiBIVFRQTWV0aG9kc1tdKSA9PiAobmV4dCkgPT4gKHJlcSwgcmVzKSA9PiB7XG4gIGlmICghbWV0aG9kcy5pbmNsdWRlcyhyZXEubWV0aG9kKSkge1xuICAgIHRocm93IG5ldyBNZXRob2ROb3RBbGxvd2VkRXhjZXB0aW9uKHtcbiAgICAgIHR5cGU6IFwibWV0aG9kX25vdF9hbGxvd2VkXCIsXG4gICAgICBtZXNzYWdlOiBgb25seSAke21ldGhvZHMuam9pbihcIixcIil9IGFjY2VwdGVkYCxcbiAgICB9KVxuICB9XG4gIHJldHVybiBuZXh0KHJlcSwgcmVzKVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoTWV0aG9kc1xuIiwgImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHosIFpvZEZpcnN0UGFydHlUeXBlS2luZCB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiXG5cbmltcG9ydCB7XG4gIEJhZFJlcXVlc3RFeGNlcHRpb24sXG4gIEludGVybmFsU2VydmVyRXJyb3JFeGNlcHRpb24sXG59IGZyb20gXCIuLi8uLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuaW1wb3J0IHsgUXVlcnlBcnJheUZvcm1hdHMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuaW1wb3J0IHsgREVGQVVMVF9BUlJBWV9GT1JNQVRTIH0gZnJvbSBcIi4uXCJcblxuY29uc3QgZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYSA9IChcbiAgaXNab2RFZmZlY3Q6IGJvb2xlYW4sXG4gIHNjaGVtYTogei5ab2RUeXBlQW55XG4pOiB6LlpvZFR5cGVBbnkgfCB6LlpvZE9iamVjdDxhbnk+ID0+IHtcbiAgaWYgKCFpc1pvZEVmZmVjdCkge1xuICAgIHJldHVybiBzY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxuICB9XG5cbiAgbGV0IGN1cnJlbnRTY2hlbWEgPSBzY2hlbWFcblxuICB3aGlsZSAoY3VycmVudFNjaGVtYSBpbnN0YW5jZW9mIHouWm9kRWZmZWN0cykge1xuICAgIGN1cnJlbnRTY2hlbWEgPSBjdXJyZW50U2NoZW1hLl9kZWYuc2NoZW1hXG4gIH1cblxuICByZXR1cm4gY3VycmVudFNjaGVtYSBhcyB6LlpvZE9iamVjdDxhbnk+XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgY29ycmVjdCBzY2hlbWEgZnJvbSBhIFpvZEVmZmVjdCB8IFpvZERlZmF1bHQgfCBab2RPcHRpb25hbCBzY2hlbWEuXG4gKiBUT0RPOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgYWxsIHNwZWNpYWwgY2FzZXMgb2YgWm9kU2NoZW1hIGFuZCBub3QganVzdCBab2RFZmZlY3QgfCBab2REZWZhdWx0IHwgWm9kT3B0aW9uYWxcbiAqL1xuY29uc3QgZ2V0Wm9kRGVmRnJvbVpvZFNjaGVtYUhlbHBlcnMgPSAoc2NoZW1hOiB6LlpvZFR5cGVBbnkpID0+IHtcbiAgY29uc3Qgc3BlY2lhbF96b2RfdHlwZXMgPSBbXG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9wdGlvbmFsLFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICBdXG5cbiAgd2hpbGUgKHNwZWNpYWxfem9kX3R5cGVzLmluY2x1ZGVzKHNjaGVtYS5fZGVmLnR5cGVOYW1lKSkge1xuICAgIGlmIChcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT3B0aW9uYWwgfHxcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdFxuICAgICkge1xuICAgICAgc2NoZW1hID0gc2NoZW1hLl9kZWYuaW5uZXJUeXBlXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMpIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5fZGVmLnNjaGVtYVxuICAgICAgY29udGludWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYS5fZGVmXG59XG5cbmNvbnN0IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0ID0gKFxuICBzY2hlbWE6IHouWm9kVHlwZUFueVxuKTogei5ab2RPYmplY3Q8YW55PiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGlzWm9kRWZmZWN0ID0gc2NoZW1hLl9kZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzXG4gIGNvbnN0IHNhZmVfc2NoZW1hID0gZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYShpc1pvZEVmZmVjdCwgc2NoZW1hKVxuICBjb25zdCBpc1pvZE9iamVjdCA9XG4gICAgc2FmZV9zY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdFxuXG4gIGlmICghaXNab2RPYmplY3QpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICByZXR1cm4gc2FmZV9zY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxufVxuXG5jb25zdCBpc1pvZFNjaGVtYUFycmF5ID0gKHNjaGVtYTogei5ab2RUeXBlQW55KSA9PiB7XG4gIGNvbnN0IGRlZiA9IGdldFpvZERlZkZyb21ab2RTY2hlbWFIZWxwZXJzKHNjaGVtYSlcbiAgcmV0dXJuIGRlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFycmF5XG59XG5cbmNvbnN0IGlzWm9kU2NoZW1hQm9vbGVhbiA9IChzY2hlbWE6IHouWm9kVHlwZUFueSkgPT4ge1xuICBjb25zdCBkZWYgPSBnZXRab2REZWZGcm9tWm9kU2NoZW1hSGVscGVycyhzY2hlbWEpXG4gIHJldHVybiBkZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCb29sZWFuXG59XG5cbmNvbnN0IHBhcnNlUXVlcnlQYXJhbXMgPSAoXG4gIHNjaGVtYTogei5ab2RUeXBlQW55LFxuICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHN1cHBvcnRlZEFycmF5Rm9ybWF0czogUXVlcnlBcnJheUZvcm1hdHNcbikgPT4ge1xuICBjb25zdCBwYXJzZWRfaW5wdXQgPSBPYmplY3QuYXNzaWduKHt9LCBpbnB1dClcbiAgY29uc3Qgb2JqX3NjaGVtYSA9IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0KHNjaGVtYSlcblxuICBpZiAob2JqX3NjaGVtYSkge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9ial9zY2hlbWEuc2hhcGUpKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheSh2YWx1ZSBhcyB6LlpvZFR5cGVBbnkpKSB7XG4gICAgICAgIGNvbnN0IGFycmF5X2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmICh0eXBlb2YgYXJyYXlfaW5wdXQgPT09IFwic3RyaW5nXCIgJiYgYXJyYXlfaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcGFyc2VkX2lucHV0W2tleV0gPSBbXVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBhcnJheV9pbnB1dCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgIGFycmF5X2lucHV0Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJjb21tYVwiKVxuICAgICAgICApIHtcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IGFycmF5X2lucHV0LnNwbGl0KFwiLFwiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXQgPSBpbnB1dFtgJHtrZXl9W11gXVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzLmluY2x1ZGVzKFwiYnJhY2tldHNcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgcHJlX3NwbGl0X2FycmF5ID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IHByZV9zcGxpdF9hcnJheS5zcGxpdChcIixcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0KSAmJlxuICAgICAgICAgIHN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcImJyYWNrZXRzXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChpc1pvZFNjaGVtYUJvb2xlYW4odmFsdWUgYXMgei5ab2RUeXBlQW55KSkge1xuICAgICAgICBjb25zdCBib29sZWFuX2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmICh0eXBlb2YgYm9vbGVhbl9pbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYm9vbGVhbl9pbnB1dCA9PT0gXCJ0cnVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzY2hlbWEucGFyc2UocGFyc2VkX2lucHV0KVxufVxuXG5jb25zdCB2YWxpZGF0ZVF1ZXJ5UGFyYW1zID0gKFxuICBpbnB1dFVybDogc3RyaW5nLFxuICBzY2hlbWE6IHouWm9kVHlwZUFueSxcbiAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzOiBRdWVyeUFycmF5Rm9ybWF0c1xuKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaW5wdXRVcmwsIFwiaHR0cDovL2R1bW15LmNvbVwiKVxuXG4gIGNvbnN0IHNlZW5LZXlzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICBjb25zdCBvYmpfc2NoZW1hID0gdHJ5R2V0Wm9kU2NoZW1hQXNPYmplY3Qoc2NoZW1hKVxuICBpZiAoIW9ial9zY2hlbWEpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIHVybC5zZWFyY2hQYXJhbXMua2V5cygpKSB7XG4gICAgZm9yIChjb25zdCBbc2NoZW1hS2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqX3NjaGVtYS5zaGFwZSkpIHtcbiAgICAgIGlmIChpc1pvZFNjaGVtYUFycmF5KHZhbHVlIGFzIHouWm9kVHlwZUFueSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleSA9PT0gYCR7c2NoZW1hS2V5fVtdYCAmJlxuICAgICAgICAgICFzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJicmFja2V0c1wiKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgICB0eXBlOiBcImludmFsaWRfcXVlcnlfcGFyYW1zXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgQnJhY2tldCBzeW50YXggbm90IHN1cHBvcnRlZCBmb3IgcXVlcnkgcGFyYW0gXCIke3NjaGVtYUtleX1cImAsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGtleV9zY2hlbWEgPSBvYmpfc2NoZW1hLnNoYXBlW2tleV1cblxuICAgIGlmIChrZXlfc2NoZW1hKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheShrZXlfc2NoZW1hKSkge1xuICAgICAgICBpZiAoc2VlbktleXMuaGFzKGtleSkgJiYgIXN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcInJlcGVhdFwiKSkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgICAgIHR5cGU6IFwiaW52YWxpZF9xdWVyeV9wYXJhbXNcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBSZXBlYXRlZCBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWQgZm9yIGR1cGxpY2F0ZSBxdWVyeSBwYXJhbSBcIiR7a2V5fVwiYCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2VlbktleXMuYWRkKGtleSlcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RJbnB1dDxcbiAgSnNvbkJvZHkgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBDb21tb25QYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIEZvcm1EYXRhIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbj4ge1xuICBqc29uQm9keT86IEpzb25Cb2R5XG4gIHF1ZXJ5UGFyYW1zPzogUXVlcnlQYXJhbXNcbiAgY29tbW9uUGFyYW1zPzogQ29tbW9uUGFyYW1zXG4gIGZvcm1EYXRhPzogRm9ybURhdGFcbiAganNvblJlc3BvbnNlPzogSnNvblJlc3BvbnNlXG4gIHNob3VsZFZhbGlkYXRlUmVzcG9uc2VzPzogYm9vbGVhblxuICBzaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5PzogYm9vbGVhblxuICBzdXBwb3J0ZWRBcnJheUZvcm1hdHM/OiBRdWVyeUFycmF5Rm9ybWF0c1xufVxuXG5jb25zdCB6b2RJc3N1ZVRvU3RyaW5nID0gKGlzc3VlOiB6LlpvZElzc3VlKSA9PiB7XG4gIGlmIChpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGlzc3VlLm1lc3NhZ2VcbiAgfVxuICBpZiAoaXNzdWUubWVzc2FnZSA9PT0gXCJSZXF1aXJlZFwiKSB7XG4gICAgcmV0dXJuIGAke2lzc3VlLnBhdGguam9pbihcIi5cIil9IGlzIHJlcXVpcmVkYFxuICB9XG4gIHJldHVybiBgJHtpc3N1ZS5tZXNzYWdlfSBmb3IgXCIke2lzc3VlLnBhdGguam9pbihcIi5cIil9XCJgXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSnNvblJlc3BvbnNlPEpzb25SZXNwb25zZSBleHRlbmRzIHouWm9kVHlwZUFueT4oXG4gIGpzb25SZXNwb25zZTogSnNvblJlc3BvbnNlIHwgdW5kZWZpbmVkLFxuICByZXM6IE5leHRBcGlSZXNwb25zZVxuKSB7XG4gIGNvbnN0IG9yaWdpbmFsX3Jlc19qc29uID0gcmVzLmpzb25cbiAgY29uc3Qgb3ZlcnJpZGVfcmVzX2pzb24gPSAoanNvbjogYW55KSA9PiB7XG4gICAgY29uc3QgaXNfc3VjY2VzcyA9IHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMFxuICAgIGlmICghaXNfc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsX3Jlc19qc29uKGpzb24pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGpzb25SZXNwb25zZT8ucGFyc2UoanNvbilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbFNlcnZlckVycm9yRXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX3Jlc3BvbnNlXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwidGhlIHJlc3BvbnNlIGRvZXMgbm90IG1hdGNoIHdpdGgganNvblJlc3BvbnNlXCIsXG4gICAgICAgIHpvZEVycm9yOiBlcnIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBvcmlnaW5hbF9yZXNfanNvbihqc29uKVxuICB9XG4gIHJlcy5qc29uID0gb3ZlcnJpZGVfcmVzX2pzb25cbn1cblxuZXhwb3J0IGNvbnN0IHdpdGhWYWxpZGF0aW9uID1cbiAgPFxuICAgIEpzb25Cb2R5IGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIENvbW1vblBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBGb3JtRGF0YSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbiAgPihcbiAgICBpbnB1dDogUmVxdWVzdElucHV0PFxuICAgICAgSnNvbkJvZHksXG4gICAgICBRdWVyeVBhcmFtcyxcbiAgICAgIENvbW1vblBhcmFtcyxcbiAgICAgIEZvcm1EYXRhLFxuICAgICAgSnNvblJlc3BvbnNlXG4gICAgPlxuICApID0+XG4gIChuZXh0KSA9PlxuICBhc3luYyAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCB7IHN1cHBvcnRlZEFycmF5Rm9ybWF0cyA9IERFRkFVTFRfQVJSQVlfRk9STUFUUyB9ID0gaW5wdXRcblxuICAgIGlmIChcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5qc29uQm9keSkgfHxcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5jb21tb25QYXJhbXMpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGZvcm1EYXRhIHdpdGgganNvbkJvZHkgb3IgY29tbW9uUGFyYW1zXCIpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKHJlcS5tZXRob2QgPT09IFwiUE9TVFwiIHx8IHJlcS5tZXRob2QgPT09IFwiUEFUQ0hcIikgJiZcbiAgICAgIChpbnB1dC5qc29uQm9keSB8fCBpbnB1dC5jb21tb25QYXJhbXMpICYmXG4gICAgICAhcmVxLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0/LmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSAmJlxuICAgICAgIV8uaXNFbXB0eShyZXEuYm9keSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2NvbnRlbnRfdHlwZVwiLFxuICAgICAgICBtZXNzYWdlOiBgJHtyZXEubWV0aG9kfSByZXF1ZXN0cyBtdXN0IGhhdmUgQ29udGVudC1UeXBlIGhlYWRlciB3aXRoIFwiYXBwbGljYXRpb24vanNvblwiYCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaW5wdXQuZm9ybURhdGEgJiZcbiAgICAgIHJlcS5tZXRob2QgIT09IFwiR0VUXCIgJiZcbiAgICAgICFyZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXT8uaW5jbHVkZXMoXG4gICAgICAgIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCJcbiAgICAgIClcbiAgICAgIC8vIFRPRE8gZXZlbnR1YWxseSB3ZSBzaG91bGQgc3VwcG9ydCBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9jb250ZW50X3R5cGVcIixcbiAgICAgICAgbWVzc2FnZTogYE11c3QgaGF2ZSBDb250ZW50LVR5cGUgaGVhZGVyIHdpdGggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcImAsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcmlnaW5hbF9jb21iaW5lZF9wYXJhbXMgPSB7IC4uLnJlcS5xdWVyeSwgLi4ucmVxLmJvZHkgfVxuXG4gICAgICBjb25zdCB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSA9IGlucHV0LnNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHlcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogcmVxLm1ldGhvZCAhPT0gXCJHRVRcIiAmJiByZXEubWV0aG9kICE9PSBcIkRFTEVURVwiXG5cbiAgICAgIGNvbnN0IGlzRm9ybURhdGEgPSBCb29sZWFuKGlucHV0LmZvcm1EYXRhKVxuXG4gICAgICBpZiAoaXNGb3JtRGF0YSAmJiB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSkge1xuICAgICAgICByZXEuYm9keSA9IGlucHV0LmZvcm1EYXRhPy5wYXJzZShyZXEuYm9keSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0Zvcm1EYXRhICYmIHdpbGxWYWxpZGF0ZVJlcXVlc3RCb2R5KSB7XG4gICAgICAgIHJlcS5ib2R5ID0gaW5wdXQuanNvbkJvZHk/LnBhcnNlKHJlcS5ib2R5KVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQucXVlcnlQYXJhbXMpIHtcbiAgICAgICAgaWYgKCFyZXEudXJsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVxLnVybCBpcyB1bmRlZmluZWRcIilcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlUXVlcnlQYXJhbXMocmVxLnVybCwgaW5wdXQucXVlcnlQYXJhbXMsIHN1cHBvcnRlZEFycmF5Rm9ybWF0cylcblxuICAgICAgICByZXEucXVlcnkgPSBwYXJzZVF1ZXJ5UGFyYW1zKFxuICAgICAgICAgIGlucHV0LnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHJlcS5xdWVyeSxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQuY29tbW9uUGFyYW1zKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhcyBjb21tb25QYXJhbXMgaW5jbHVkZXMgcXVlcnkgcGFyYW1zLCB3ZSBjYW4gdXNlIHRoZSBwYXJzZVF1ZXJ5UGFyYW1zIGZ1bmN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICA7KHJlcSBhcyBhbnkpLmNvbW1vblBhcmFtcyA9IHBhcnNlUXVlcnlQYXJhbXMoXG4gICAgICAgICAgaW5wdXQuY29tbW9uUGFyYW1zLFxuICAgICAgICAgIG9yaWdpbmFsX2NvbWJpbmVkX3BhcmFtcyxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhZFJlcXVlc3RFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiWm9kRXJyb3JcIikge1xuICAgICAgICBsZXQgbWVzc2FnZVxuICAgICAgICBpZiAoZXJyb3IuaXNzdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IGlzc3VlID0gZXJyb3IuaXNzdWVzWzBdXG4gICAgICAgICAgbWVzc2FnZSA9IHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZV9jb21wb25lbnRzOiBzdHJpbmdbXSA9IFtdXG4gICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VfY29tcG9uZW50cy5wdXNoKHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgIGAke2Vycm9yLmlzc3Vlcy5sZW5ndGh9IElucHV0IEVycm9yczogYCArXG4gICAgICAgICAgICBtZXNzYWdlX2NvbXBvbmVudHMuam9pbihcIiwgXCIpXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICB2YWxpZGF0aW9uX2Vycm9yczogZXJyb3IuZm9ybWF0KCksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiRXJyb3Igd2hpbGUgcGFyc2luZyBpbnB1dFwiLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aGlzIHdpbGwgb3ZlcnJpZGUgdGhlIHJlcy5qc29uIG1ldGhvZCB0byB2YWxpZGF0ZSB0aGUgcmVzcG9uc2VcbiAgICAgKi9cbiAgICBpZiAoaW5wdXQuc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMpIHtcbiAgICAgIHZhbGlkYXRlSnNvblJlc3BvbnNlKGlucHV0Lmpzb25SZXNwb25zZSwgcmVzKVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0KHJlcSwgcmVzKVxuICB9XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhWYWxpZGF0aW9uXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7OztBQ0FBOzs7QUNBQTtBQWlVTyxJQUFNLFdBQXFCLElBQUksaUJBQXdCO0FBQzVELFFBQU0sa0JBQWtCLGFBQWEsYUFBYSxTQUFTO0FBQzNELFFBQU0sTUFBTSxhQUFhLE1BQU0sR0FBRyxFQUFFO0FBRXBDLE1BQUksc0JBQXNCO0FBQzFCLFdBQVMsSUFBSSxJQUFJLFNBQVMsR0FBRyxLQUFLLEdBQUcsS0FBSztBQUN4QywwQkFBdUIsSUFBSSxHQUFXLG1CQUFtQjtBQUFBLEVBQzNEO0FBRUEsU0FBTztBQUNUO0FBRUEsSUFBTyxtQkFBUTs7O0FDN1VmO0FBV08sSUFBTSxjQUFjLENBQUMsWUFBMkIsQ0FBQyxTQUFTLENBQUMsS0FBSyxRQUFRO0FBQzdFLE1BQUksQ0FBQyxRQUFRLFNBQVMsSUFBSSxNQUFNLEdBQUc7QUFDakMsVUFBTSxJQUFJLDBCQUEwQjtBQUFBLE1BQ2xDLE1BQU07QUFBQSxNQUNOLFNBQVMsUUFBUSxRQUFRLEtBQUssR0FBRztBQUFBLElBQ25DLENBQUM7QUFBQSxFQUNIO0FBQ0EsU0FBTyxLQUFLLEtBQUssR0FBRztBQUN0QjtBQUVBLElBQU8sdUJBQVE7OztBQ3JCZjtBQUNBLFNBQVMsR0FBRyw2QkFBNkI7QUFDekMsT0FBTyxPQUFPO0FBU2QsSUFBTSx3Q0FBd0MsQ0FDNUMsYUFDQSxXQUNvQztBQUNwQyxNQUFJLENBQUMsYUFBYTtBQUNoQixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksZ0JBQWdCO0FBRXBCLFNBQU8seUJBQXlCLEVBQUUsWUFBWTtBQUM1QyxvQkFBZ0IsY0FBYyxLQUFLO0FBQUEsRUFDckM7QUFFQSxTQUFPO0FBQ1Q7QUFNQSxJQUFNLGdDQUFnQyxDQUFDLFdBQXlCO0FBQzlELFFBQU0sb0JBQW9CO0FBQUEsSUFDeEIsc0JBQXNCO0FBQUEsSUFDdEIsc0JBQXNCO0FBQUEsSUFDdEIsc0JBQXNCO0FBQUEsRUFDeEI7QUFFQSxTQUFPLGtCQUFrQixTQUFTLE9BQU8sS0FBSyxRQUFRLEdBQUc7QUFDdkQsUUFDRSxPQUFPLEtBQUssYUFBYSxzQkFBc0IsZUFDL0MsT0FBTyxLQUFLLGFBQWEsc0JBQXNCLFlBQy9DO0FBQ0EsZUFBUyxPQUFPLEtBQUs7QUFDckI7QUFBQSxJQUNGO0FBRUEsUUFBSSxPQUFPLEtBQUssYUFBYSxzQkFBc0IsWUFBWTtBQUM3RCxlQUFTLE9BQU8sS0FBSztBQUNyQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTyxPQUFPO0FBQ2hCO0FBRUEsSUFBTSwwQkFBMEIsQ0FDOUIsV0FDaUM7QUFDakMsUUFBTSxjQUFjLE9BQU8sS0FBSyxhQUFhLHNCQUFzQjtBQUNuRSxRQUFNLGNBQWMsc0NBQXNDLGFBQWEsTUFBTTtBQUM3RSxRQUFNLGNBQ0osWUFBWSxLQUFLLGFBQWEsc0JBQXNCO0FBRXRELE1BQUksQ0FBQyxhQUFhO0FBQ2hCLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTztBQUNUO0FBRUEsSUFBTSxtQkFBbUIsQ0FBQyxXQUF5QjtBQUNqRCxRQUFNLE1BQU0sOEJBQThCLE1BQU07QUFDaEQsU0FBTyxJQUFJLGFBQWEsc0JBQXNCO0FBQ2hEO0FBRUEsSUFBTSxxQkFBcUIsQ0FBQyxXQUF5QjtBQUNuRCxRQUFNLE1BQU0sOEJBQThCLE1BQU07QUFDaEQsU0FBTyxJQUFJLGFBQWEsc0JBQXNCO0FBQ2hEO0FBRUEsSUFBTSxtQkFBbUIsQ0FDdkIsUUFDQSxPQUNBLDBCQUNHO0FBQ0gsUUFBTSxlQUFlLE9BQU8sT0FBTyxDQUFDLEdBQUcsS0FBSztBQUM1QyxRQUFNLGFBQWEsd0JBQXdCLE1BQU07QUFFakQsTUFBSSxZQUFZO0FBQ2QsZUFBVyxDQUFDLEtBQUssS0FBSyxLQUFLLE9BQU8sUUFBUSxXQUFXLEtBQUssR0FBRztBQUMzRCxVQUFJLGlCQUFpQixLQUFxQixHQUFHO0FBQzNDLGNBQU0sY0FBYyxNQUFNO0FBRTFCLFlBQUksT0FBTyxnQkFBZ0IsWUFBWSxZQUFZLFdBQVcsR0FBRztBQUMvRCx1QkFBYSxPQUFPLENBQUM7QUFBQSxRQUN2QjtBQUVBLFlBQ0UsT0FBTyxnQkFBZ0IsWUFDdkIsWUFBWSxTQUFTLEtBQ3JCLHNCQUFzQixTQUFTLE9BQU8sR0FDdEM7QUFDQSx1QkFBYSxPQUFPLFlBQVksTUFBTSxHQUFHO0FBQUEsUUFDM0M7QUFFQSxjQUFNLDZCQUE2QixNQUFNLEdBQUc7QUFDNUMsWUFDRSxPQUFPLCtCQUErQixZQUN0QyxzQkFBc0IsU0FBUyxVQUFVLEdBQ3pDO0FBQ0EsZ0JBQU0sa0JBQWtCO0FBQ3hCLHVCQUFhLE9BQU8sZ0JBQWdCLE1BQU0sR0FBRztBQUFBLFFBQy9DO0FBRUEsWUFDRSxNQUFNLFFBQVEsMEJBQTBCLEtBQ3hDLHNCQUFzQixTQUFTLFVBQVUsR0FDekM7QUFDQSx1QkFBYSxPQUFPO0FBQUEsUUFDdEI7QUFFQTtBQUFBLE1BQ0Y7QUFFQSxVQUFJLG1CQUFtQixLQUFxQixHQUFHO0FBQzdDLGNBQU0sZ0JBQWdCLE1BQU07QUFFNUIsWUFBSSxPQUFPLGtCQUFrQixVQUFVO0FBQ3JDLHVCQUFhLE9BQU8sa0JBQWtCO0FBQUEsUUFDeEM7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxTQUFPLE9BQU8sTUFBTSxZQUFZO0FBQ2xDO0FBRUEsSUFBTSxzQkFBc0IsQ0FDMUIsVUFDQSxRQUNBLDBCQUNHO0FBQ0gsUUFBTSxNQUFNLElBQUksSUFBSSxVQUFVLGtCQUFrQjtBQUVoRCxRQUFNLFdBQVcsb0JBQUksSUFBWTtBQUVqQyxRQUFNLGFBQWEsd0JBQXdCLE1BQU07QUFDakQsTUFBSSxDQUFDLFlBQVk7QUFDZjtBQUFBLEVBQ0Y7QUFFQSxhQUFXLE9BQU8sSUFBSSxhQUFhLEtBQUssR0FBRztBQUN6QyxlQUFXLENBQUMsV0FBVyxLQUFLLEtBQUssT0FBTyxRQUFRLFdBQVcsS0FBSyxHQUFHO0FBQ2pFLFVBQUksaUJBQWlCLEtBQXFCLEdBQUc7QUFDM0MsWUFDRSxRQUFRLEdBQUcsaUJBQ1gsQ0FBQyxzQkFBc0IsU0FBUyxVQUFVLEdBQzFDO0FBQ0EsZ0JBQU0sSUFBSSxvQkFBb0I7QUFBQSxZQUM1QixNQUFNO0FBQUEsWUFDTixTQUFTLGlEQUFpRDtBQUFBLFVBQzVELENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxVQUFNLGFBQWEsV0FBVyxNQUFNO0FBRXBDLFFBQUksWUFBWTtBQUNkLFVBQUksaUJBQWlCLFVBQVUsR0FBRztBQUNoQyxZQUFJLFNBQVMsSUFBSSxHQUFHLEtBQUssQ0FBQyxzQkFBc0IsU0FBUyxRQUFRLEdBQUc7QUFDbEUsZ0JBQU0sSUFBSSxvQkFBb0I7QUFBQSxZQUM1QixNQUFNO0FBQUEsWUFDTixTQUFTLGdFQUFnRTtBQUFBLFVBQzNFLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxhQUFTLElBQUksR0FBRztBQUFBLEVBQ2xCO0FBQ0Y7QUFtQkEsSUFBTSxtQkFBbUIsQ0FBQyxVQUFzQjtBQUM5QyxNQUFJLE1BQU0sS0FBSyxLQUFLLEdBQUcsTUFBTSxJQUFJO0FBQy9CLFdBQU8sTUFBTTtBQUFBLEVBQ2Y7QUFDQSxNQUFJLE1BQU0sWUFBWSxZQUFZO0FBQ2hDLFdBQU8sR0FBRyxNQUFNLEtBQUssS0FBSyxHQUFHO0FBQUEsRUFDL0I7QUFDQSxTQUFPLEdBQUcsTUFBTSxnQkFBZ0IsTUFBTSxLQUFLLEtBQUssR0FBRztBQUNyRDtBQUVBLFNBQVMscUJBQ1AsY0FDQSxLQUNBO0FBQ0EsUUFBTSxvQkFBb0IsSUFBSTtBQUM5QixRQUFNLG9CQUFvQixDQUFDLFNBQWM7QUFDdkMsVUFBTSxhQUFhLElBQUksY0FBYyxPQUFPLElBQUksYUFBYTtBQUM3RCxRQUFJLENBQUMsWUFBWTtBQUNmLGFBQU8sa0JBQWtCLElBQUk7QUFBQSxJQUMvQjtBQUVBLFFBQUk7QUFDRixtREFBYyxNQUFNO0FBQUEsSUFDdEIsU0FBUyxLQUFQO0FBQ0EsWUFBTSxJQUFJLDZCQUE2QjtBQUFBLFFBQ3JDLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULFVBQVU7QUFBQSxNQUNaLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxrQkFBa0IsSUFBSTtBQUFBLEVBQy9CO0FBQ0EsTUFBSSxPQUFPO0FBQ2I7QUFFTyxJQUFNLGlCQUNYLENBT0UsVUFRRixDQUFDLFNBQ0QsT0FBTyxLQUFxQixRQUF5QjtBQTlQdkQ7QUErUEksUUFBTSxFQUFFLHdCQUF3QixzQkFBc0IsSUFBSTtBQUUxRCxNQUNHLE1BQU0sWUFBWSxNQUFNLFlBQ3hCLE1BQU0sWUFBWSxNQUFNLGNBQ3pCO0FBQ0EsVUFBTSxJQUFJLE1BQU0sbURBQW1EO0FBQUEsRUFDckU7QUFFQSxPQUNHLElBQUksV0FBVyxVQUFVLElBQUksV0FBVyxhQUN4QyxNQUFNLFlBQVksTUFBTSxpQkFDekIsR0FBQyxTQUFJLFFBQVEsb0JBQVosbUJBQTZCLFNBQVMsd0JBQ3ZDLENBQUMsRUFBRSxRQUFRLElBQUksSUFBSSxHQUNuQjtBQUNBLFVBQU0sSUFBSSxvQkFBb0I7QUFBQSxNQUM1QixNQUFNO0FBQUEsTUFDTixTQUFTLEdBQUcsSUFBSTtBQUFBLElBQ2xCLENBQUM7QUFBQSxFQUNIO0FBRUEsTUFDRSxNQUFNLFlBQ04sSUFBSSxXQUFXLFNBQ2YsR0FBQyxTQUFJLFFBQVEsb0JBQVosbUJBQTZCO0FBQUEsSUFDNUI7QUFBQSxNQUdGO0FBQ0EsVUFBTSxJQUFJLG9CQUFvQjtBQUFBLE1BQzVCLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNYLENBQUM7QUFBQSxFQUNIO0FBRUEsTUFBSTtBQUNGLFVBQU0sMkJBQTJCLEVBQUUsR0FBRyxJQUFJLE9BQU8sR0FBRyxJQUFJLEtBQUs7QUFFN0QsVUFBTSwwQkFBMEIsTUFBTSwrQkFDbEMsT0FDQSxJQUFJLFdBQVcsU0FBUyxJQUFJLFdBQVc7QUFFM0MsVUFBTSxhQUFhLFFBQVEsTUFBTSxRQUFRO0FBRXpDLFFBQUksY0FBYyx5QkFBeUI7QUFDekMsVUFBSSxRQUFPLFdBQU0sYUFBTixtQkFBZ0IsTUFBTSxJQUFJO0FBQUEsSUFDdkM7QUFFQSxRQUFJLENBQUMsY0FBYyx5QkFBeUI7QUFDMUMsVUFBSSxRQUFPLFdBQU0sYUFBTixtQkFBZ0IsTUFBTSxJQUFJO0FBQUEsSUFDdkM7QUFFQSxRQUFJLE1BQU0sYUFBYTtBQUNyQixVQUFJLENBQUMsSUFBSSxLQUFLO0FBQ1osY0FBTSxJQUFJLE1BQU0sc0JBQXNCO0FBQUEsTUFDeEM7QUFFQSwwQkFBb0IsSUFBSSxLQUFLLE1BQU0sYUFBYSxxQkFBcUI7QUFFckUsVUFBSSxRQUFRO0FBQUEsUUFDVixNQUFNO0FBQUEsUUFDTixJQUFJO0FBQUEsUUFDSjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsUUFBSSxNQUFNLGNBQWM7QUFJdEI7QUFBQyxNQUFDLElBQVksZUFBZTtBQUFBLFFBQzNCLE1BQU07QUFBQSxRQUNOO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRixTQUFTLE9BQVA7QUFDQSxRQUFJLGlCQUFpQixxQkFBcUI7QUFDeEMsWUFBTTtBQUFBLElBQ1I7QUFFQSxRQUFJLE1BQU0sU0FBUyxZQUFZO0FBQzdCLFVBQUk7QUFDSixVQUFJLE1BQU0sT0FBTyxXQUFXLEdBQUc7QUFDN0IsY0FBTSxRQUFRLE1BQU0sT0FBTztBQUMzQixrQkFBVSxpQkFBaUIsS0FBSztBQUFBLE1BQ2xDLE9BQU87QUFDTCxjQUFNLHFCQUErQixDQUFDO0FBQ3RDLG1CQUFXLFNBQVMsTUFBTSxRQUFRO0FBQ2hDLDZCQUFtQixLQUFLLGlCQUFpQixLQUFLLENBQUM7QUFBQSxRQUNqRDtBQUNBLGtCQUNFLEdBQUcsTUFBTSxPQUFPLDBCQUNoQixtQkFBbUIsS0FBSyxJQUFJO0FBQUEsTUFDaEM7QUFFQSxZQUFNLElBQUksb0JBQW9CO0FBQUEsUUFDNUIsTUFBTTtBQUFBLFFBQ047QUFBQSxRQUNBLG1CQUFtQixNQUFNLE9BQU87QUFBQSxNQUNsQyxDQUFDO0FBQUEsSUFDSDtBQUVBLFVBQU0sSUFBSSxvQkFBb0I7QUFBQSxNQUM1QixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsSUFDWCxDQUFDO0FBQUEsRUFDSDtBQUtBLE1BQUksTUFBTSx5QkFBeUI7QUFDakMseUJBQXFCLE1BQU0sY0FBYyxHQUFHO0FBQUEsRUFDOUM7QUFFQSxTQUFPLEtBQUssS0FBSyxHQUFHO0FBQ3RCO0FBRUYsSUFBTywwQkFBUTs7O0FINVdmLFNBQVMsS0FBQUEsVUFBUztBQVFYLElBQU0saUJBQWlCLENBNkI1QixTQUdVO0FBRUwsSUFBTSx3QkFBMkM7QUFBQSxFQUN0RDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7QUFFTyxJQUFNLHNCQUFvRCxDQUMvRCxnQkFDRztBQUNILFFBQU07QUFBQSxJQUNKLG9CQUFvQixDQUFDO0FBQUEsSUFDckIsb0JBQW9CLENBQUM7QUFBQSxJQUNyQiw2QkFBNkIsQ0FBQztBQUFBLElBQzlCO0FBQUEsSUFDQSwrQkFBK0I7QUFBQSxJQUMvQiw4QkFBOEIsc0JBQXNCO0FBQUEsTUFDbEQsYUFBYSxZQUFZO0FBQUEsTUFDekIsMEJBQTBCO0FBQUEsUUFDeEIsaUJBQWlCLENBQUMsS0FBSyxVQUFVO0FBQy9CLGNBQUksUUFBUSxJQUFJLGFBQWEsY0FBYztBQUN6QyxtQkFBTyxDQUFDO0FBQUEsVUFDVjtBQUVBLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUM7QUFBQSxJQUNELGdCQUFnQixZQUFZLGNBQ3hCO0FBQUEsTUFDRSxJQUFJQyxHQUFFLFFBQVE7QUFBQSxJQUNoQixJQUNBLENBQUM7QUFBQSxJQUNMLHdCQUF3QjtBQUFBLElBQ3hCO0FBQUEsSUFDQSxhQUFhO0FBQUEsRUFDZixJQUFJO0FBRUosUUFBTSxnQkFBZ0IsQ0FBQyxTQUFvQjtBQUN6QyxVQUFNLG9CQUFvQixDQUFDLHVCQUF1QjtBQTFGdEQ7QUEyRk0sWUFBTSxxQkFBcUIsT0FDekIsS0FDQSxRQUNHO0FBQ0gsMEJBQWtCLFVBQVUsQ0FBQyxTQUFTO0FBRXRDLGNBQU0sbUJBQ0osTUFBTSxRQUFRLEtBQUssSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDLEtBQUssSUFBSSxHQUNqRCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsa0JBQWtCLFNBQVMsQ0FBVTtBQUNwRSxjQUFNLG9CQUFvQixnQkFBZ0IsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQzlELFlBQUk7QUFDRixnQkFBTSxJQUFJLE1BQU0sc0JBQXNCLG1CQUFtQjtBQUUzRCxjQUFNLGtDQUFrQyxDQUFDLFNBQVMsT0FBT0MsTUFBS0MsU0FBUTtBQXhHOUUsY0FBQUM7QUF5R1UsZ0JBQU0sd0NBQ0pBLE1BQUEsS0FBSyxxQ0FBTCxPQUFBQSxNQUNBO0FBRUYscUJBQVcsQ0FBQyxNQUFNLFVBQVUsS0FBSyxpQkFBaUI7QUFDaEQsZ0JBQUkseUJBQXlCO0FBQzdCLGdCQUFJO0FBQ0YscUJBQU8sTUFBTSxXQUFXLElBQUksU0FBUztBQUVuQyx5Q0FBeUI7QUFDekIsdUJBQU8sS0FBSyxHQUFHLElBQUk7QUFBQSxjQUNyQixDQUFDLEVBQUVGLE1BQUtDLElBQUc7QUFBQSxZQUNiLFNBQVMsT0FBUDtBQUNBLGtCQUFJLGlCQUFpQixpQ0FBaUM7QUFDcEQ7QUFBQSxjQUNGO0FBQ0Esb0JBQU0sb0JBQW9CO0FBQzFCLGtCQUNFLHdDQUNBLHdCQUNBO0FBQ0EscURBQXFDLENBQUMsS0FBSyxDQUFDO0FBQUEsY0FDOUM7QUFDQSxvQkFBTTtBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBQ0EsZ0JBQU0sSUFBSSxzQkFBc0I7QUFBQSxZQUM5QixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsVUFDWCxDQUFDO0FBQUEsUUFDSDtBQUVBLGVBQU87QUFBQSxVQUNMLEdBQUssOEJBQ0QsQ0FBQywyQkFBMkIsSUFDNUIsQ0FBQztBQUFBLFVBQ0wsR0FBSyxxQkFBcUIsQ0FBQztBQUFBLFVBQzNCO0FBQUEsVUFDQSxHQUFLLDhCQUE4QixDQUFDO0FBQUEsVUFDcEMsR0FBSyxLQUFLLGVBQWUsQ0FBQztBQUFBLFVBQzFCLHFCQUFZLEtBQUssT0FBTztBQUFBLFVBQ3hCLHdCQUFlO0FBQUEsWUFDYixVQUFVLEtBQUs7QUFBQSxZQUNmLGFBQWEsS0FBSztBQUFBLFlBQ2xCLGNBQWMsS0FBSztBQUFBLFlBQ25CLFVBQVUsS0FBSztBQUFBLFlBQ2YsY0FBYyxLQUFLO0FBQUEsWUFDbkI7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0YsQ0FBQztBQUFBLFVBQ0Q7QUFBQSxRQUNGLEVBQUUsS0FBWSxHQUFHO0FBQUEsTUFDbkI7QUFFQSx5QkFBbUIsZUFBZTtBQUNsQyx5QkFBbUIsYUFBYTtBQUdoQyxZQUFNLGVBQWMsVUFBSyxnQkFBTCxZQUFvQjtBQUN4QyxVQUFJLGdCQUFnQixRQUFXO0FBQzdCLDJCQUFtQixjQUFjO0FBQUEsTUFDbkM7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUVBLHNCQUFrQixlQUFlO0FBQ2pDLHNCQUFrQixhQUFhO0FBRS9CLFdBQU87QUFBQSxFQUNUO0FBRUEsZ0JBQWMsZUFBZTtBQUU3QixTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbInoiLCAieiIsICJyZXEiLCAicmVzIiwgIl9hIl0KfQo=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nextlove",
3
- "version": "2.18.0",
3
+ "version": "2.19.0",
4
4
  "private": false,
5
5
  "sideEffects": false,
6
6
  "repository": "https://github.com/seamapi/nextlove",