cdk-preflight 0.0.175 → 0.0.177

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.
@@ -122,3 +122,19 @@ export declare function prune(rules: BundledRuleData[], types: Set<string> | und
122
122
  */
123
123
  export declare function validateTemplate(eng: any, template: unknown, config: object): any;
124
124
  export declare function loadEngine(): any | undefined;
125
+ /**
126
+ * loadEngine() が載せるのと同じエンジンの版。解決順も同じにしてある。読めなければ undefined。
127
+ * (テストからも利用するため export している)
128
+ */
129
+ export declare function engineVersion(): string | undefined;
130
+ /**
131
+ * semver の大小(a < b で負)。プレリリース(`1.9.0-beta`)は同じ版の正式リリースより小さい。
132
+ * 読めない形なら undefined。
133
+ * ponytail: プレリリース同士は文字列で比べる(エンジンは `-beta` しか出していない)。
134
+ */
135
+ export declare function compareVersions(a: string, b: string): number | undefined;
136
+ /**
137
+ * このエンジンが自力で止める制約のルールか(meta.yaml#supersededBy)。版が読めなければ false
138
+ * =省かない(重複が出るだけで、見逃しは起きない側に倒す)。
139
+ */
140
+ export declare function isSuperseded(rule: BundledRuleData, version: string | undefined): boolean;
@@ -46,6 +46,9 @@ exports.templateResourceTypes = templateResourceTypes;
46
46
  exports.prune = prune;
47
47
  exports.validateTemplate = validateTemplate;
48
48
  exports.loadEngine = loadEngine;
49
+ exports.engineVersion = engineVersion;
50
+ exports.compareVersions = compareVersions;
51
+ exports.isSuperseded = isSuperseded;
49
52
  const fs = __importStar(require("fs"));
50
53
  const path = __importStar(require("path"));
51
54
  const aws_cdk_lib_1 = require("aws-cdk-lib");
@@ -519,4 +522,58 @@ function loadEngine() {
519
522
  return undefined;
520
523
  }
521
524
  }
522
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5mb3JjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcml2YXRlL2VuZm9yY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUNBLDBEQU1DO0FBR0QsOENBRUM7QUFNRCw0Q0FFQztBQTZMRCxnREFpQkM7QUF1REQsd0NBaUJDO0FBYUQsc0NBUUM7QUEyQ0Qsa0RBY0M7QUFpQkQsNENBVUM7QUFRRCxzREFtQkM7QUFZRCxzQkFRQztBQWVELDRDQU1DO0FBRUQsZ0NBZUM7QUF4Z0JELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsNkNBT3FCO0FBRXJCLHdEQUF3RTtBQUV4RSwwREFBMEQ7QUFDMUQ7OERBQzhEO0FBRTlEOzs7R0FHRztBQUNVLFFBQUEsc0JBQXNCLEdBQUcsd0JBQXdCLENBQUM7QUFFL0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsTUFBYyxFQUFFLFNBQWtCO0lBQ3hFLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdkcsT0FBTztRQUNMLElBQUksRUFBRSw4QkFBc0I7UUFDNUIsT0FBTyxFQUFFLCtEQUErRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sRUFBRTtLQUM3RyxDQUFDO0FBQ0osQ0FBQztBQUVELHlGQUF5RjtBQUN6RixTQUFnQixpQkFBaUIsQ0FBQyxTQUE2QjtJQUM3RCxPQUFPLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxNQUEwQjtJQUN6RCxPQUFPLE9B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QUFFLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztJQUN4RCxJQUFJLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0ZBQWdGLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELFNBQWdCLFVBQVU7SUFDeEIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsZUFBZTtJQUNqQixDQUFDO0lBQ0QsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzNELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsMkNBQTJDLEVBQUU7WUFDMUUsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM5QixDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7XG4gIEFwcCxcbiAgQ2xvdWRGb3JtYXRpb25WYWxpZGF0ZVBsdWdpbixcbiAgdHlwZSBJUG9saWN5VmFsaWRhdGlvbkNvbnRleHQsXG4gIHR5cGUgSVBvbGljeVZhbGlkYXRpb25QbHVnaW4sXG4gIHR5cGUgUG9saWN5VmFsaWRhdGlvblBsdWdpblJlcG9ydCxcbiAgdHlwZSBQb2xpY3lWaW9sYXRpb24sXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQlVORExFRF9MSUJTLCB0eXBlIEJ1bmRsZWRSdWxlRGF0YSB9IGZyb20gJy4uL3J1bGVzLmdlbmVyYXRlZCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAtLSBAYXdzL2Nsb3VkZm9ybWF0aW9uLXZhbGlkYXRlIOOBr1xuICAgYXdzLWNkay1saWIg5ZCM5qKx44Kz44OU44O844KS5YuV55qE6Kej5rG644GZ44KL6Kit6KiI77yI5L6d5a2Y44Gr44Gv6LyJ44Gb44Gq44GE77yJ44CCUkVBRE1FL0FHRU5UUy5tZCDlj4LnhacgKi9cblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIFJlZ28gbW9kdWxlIHRoYXQgY2FycmllcyB0aGUgZGVwbG95bWVudFxuICogZW52aXJvbm1lbnQgaW50byBydWxlIGV2YWx1YXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBERVBMT1lfRU5WX01PRFVMRV9OQU1FID0gJ19wZl9kZXBsb3lfZW52aXJvbm1lbnQnO1xuXG4vKipcbiAqIEJ1aWxkIHRoZSBnZW5lcmF0ZWQgbW9kdWxlIGRlZmluaW5nIGBkZXBsb3lfcmVnaW9uYCBmb3IgdGhlIHJ1bGUgcGFja2FnZS5cbiAqXG4gKiBSdWxlcyBtdXN0IHJlYWQgaXQgYXMgYGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uYCAobmV2ZXIgYXMgYSBiYXJlXG4gKiB2YXJpYWJsZSk6IHRoZSBkYXRhIHJlZmVyZW5jZSBpcyBzaW1wbHkgdW5kZWZpbmVkIHdoZW4gdGhlIG1vZHVsZSBpcyBub3RcbiAqIGluamVjdGVkIOKAlCB0aGUgcnVsZSBib2R5IGZhaWxzIGFuZCB0aGUgcnVsZSBza2lwcyDigJQgd2hpbGUgYSBiYXJlIHZhcmlhYmxlXG4gKiB3b3VsZCBiZSBhIGNvbXBpbGUgZXJyb3IuIEluamVjdGVkIGJ5IHRoZSBlbmZvcmNlIHBsdWdpbiB3aGVuIHRoZSBhcHAtbGV2ZWxcbiAqIHJlZ2lvbiBpcyBjb25jcmV0ZTsgdGhlIHdhcm4gbW9kZSAoQ0RLIGJ1aWx0LWluIHBsdWdpbikgbmV2ZXIgaW5qZWN0cyBpdCxcbiAqIHNvIHJlZ2lvbi1kZXBlbmRlbnQgcnVsZXMgb25seSBmaXJlIGluIGVuZm9yY2UgbW9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcGxveUVudmlyb25tZW50TW9kdWxlKHJlZ2lvbjogc3RyaW5nLCBhY2NvdW50SWQ/OiBzdHJpbmcpOiB7IG5hbWU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0ge1xuICBjb25zdCBhY2NvdW50ID0gaXNDb25jcmV0ZUFjY291bnQoYWNjb3VudElkKSA/IGBkZXBsb3lfYWNjb3VudCA6PSAke0pTT04uc3RyaW5naWZ5KGFjY291bnRJZCl9XFxuYCA6ICcnO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IERFUExPWV9FTlZfTU9EVUxFX05BTUUsXG4gICAgY29udGVudDogYHBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuZGVwbG95X3JlZ2lvbiA6PSAke0pTT04uc3RyaW5naWZ5KHJlZ2lvbil9XFxuJHthY2NvdW50fWAsXG4gIH07XG59XG5cbi8qKiBXaGV0aGVyIHRoZSBhY2NvdW50IGZyb20gdGhlIHZhbGlkYXRpb24gY29udGV4dCBpcyBhIGNvbmNyZXRlIDEyLWRpZ2l0IGFjY291bnQgaWQuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb25jcmV0ZUFjY291bnQoYWNjb3VudElkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBhY2NvdW50SWQgaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiBhY2NvdW50SWQgPT09ICdzdHJpbmcnICYmIC9eXFxkezEyfSQvLnRlc3QoYWNjb3VudElkKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSByZWdpb24gZnJvbSB0aGUgdmFsaWRhdGlvbiBjb250ZXh0IGlzIGEgY29uY3JldGUgcmVnaW9uIG5hbWVcbiAqIChhcyBvcHBvc2VkIHRvIHVuZGVmaW5lZCwgYW4gdW5yZXNvbHZlZCB0b2tlbiwgb3IgYSBwbGFjZWhvbGRlcikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbmNyZXRlUmVnaW9uKHJlZ2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogcmVnaW9uIGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgcmVnaW9uID09PSAnc3RyaW5nJyAmJiAvXlthLXpdezJ9KC1bYS16XSspKy1cXGQrJC8udGVzdChyZWdpb24pO1xufVxuXG5pbnRlcmZhY2UgRW5naW5lRGlhZ25vc3RpYyB7XG4gIHJlYWRvbmx5IHJ1bGVJZDogc3RyaW5nO1xuICByZWFkb25seSBzZXZlcml0eTogc3RyaW5nO1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNvdXJjZT86IHN0cmluZztcbiAgcmVhZG9ubHkgZW50aXR5PzogeyByZWFkb25seSBsb2dpY2FsSWQ/OiBzdHJpbmcgfTtcbiAgcmVhZG9ubHkgcHJvcGVydHlQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBkb2N1bWVudGF0aW9uVXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIGVuZm9yY2Ug44Oi44O844OJ55So44Gu5YaF6YOo44OX44Op44Kw44Kk44Oz44CCXG4gKlxuICogQ0RLIOe1hOOBv+i+vOOBv+OBriBDbG91ZEZvcm1hdGlvblZhbGlkYXRlUGx1Z2luIOOBr+WFqCBmaW5kaW5nIOOCkiB3YXJuaW5nIOOBq+S4uOOCgeOCi+OBn+OCgVxuICog77yIYXdzLWNkay1saWIgMi4yNjcuMCDlrp/muKzjgIHmmIfmoLzjg5Xjg6njgrDjgoLnhKHlirnvvInjgIHlkIzjgZjjgqjjg7Pjgrjjg7PjgpLnm7TmjqXlkbzjgbPjgIFcbiAqIGNkay1wcmVmbGlnaHQg44Gu44Or44O844Or6YGV5Y+N77yI44GK44KI44GzIHN0cmljdCDmmYLjga/jgqjjg7Pjgrjjg7Pjga7jgqjjg6njg7zjgq/jg6njgrnvvInjgpJcbiAqIHBvbGljeSB2YWxpZGF0aW9uIOOBruWkseaVl+OBqOOBl+OBpuWgseWRiuOBl+OBpiBzeW50aCDjgpLmraLjgoHjgovjgIJcbiAqL1xuZXhwb3J0IGNsYXNzIFByZWZsaWdodEVuZm9yY2VQbHVnaW4gaW1wbGVtZW50cyBJUG9saWN5VmFsaWRhdGlvblBsdWdpbiB7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lID0gUExVR0lOX05BTUU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBydWxlczogQnVuZGxlZFJ1bGVEYXRhW10sXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdHJpY3Q6IGJvb2xlYW4sXG4gICkge31cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udGV4dDogSVBvbGljeVZhbGlkYXRpb25Db250ZXh0KTogUG9saWN5VmFsaWRhdGlvblBsdWdpblJlcG9ydCB7XG4gICAgY29uc3QgZW5naW5lID0gbG9hZEVuZ2luZUNhY2hlZCgpO1xuICAgIGlmICghZW5naW5lKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ2Nkay1wcmVmbGlnaHQ6IGNvdWxkIG5vdCByZXNvbHZlIEBhd3MvY2xvdWRmb3JtYXRpb24tdmFsaWRhdGU7ICcgK1xuICAgICAgICAnZW5mb3JjZSBtb2RlIGlzIHVuYXZhaWxhYmxlIGFuZCBubyBwcmVmbGlnaHQgY2hlY2tzIHdlcmUgcnVuLiAnICtcbiAgICAgICAgJ0luc3RhbGwgaXQgYXMgYSBkZXZEZXBlbmRlbmN5IG9yIHVzZSB0aGUgZGVmYXVsdCAod2FybikgbW9kZS4nLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHZpb2xhdGlvbnM6IFtdIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVnaW9uID0gaXNDb25jcmV0ZVJlZ2lvbihjb250ZXh0LnJlZ2lvbikgPyBjb250ZXh0LnJlZ2lvbiA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBhY2NvdW50ID0gaXNDb25jcmV0ZUFjY291bnQoY29udGV4dC5hY2NvdW50SWQpID8gY29udGV4dC5hY2NvdW50SWQgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgb3VycyA9IG5ldyBTZXQodGhpcy5ydWxlcy5tYXAoKHIpID0+IHIuaWQpKTtcbiAgICBjb25zdCB2aW9sYXRpb25zOiBQb2xpY3lWaW9sYXRpb25bXSA9IFtdO1xuXG4gICAgLy8g5YWo44OG44Oz44OX44Os44O844OI44Gu5ZKM6ZuG5ZCI44Gn5YiI44KK6L6844KA44CC44OG44Oz44OX44Os44O844OI44GU44Go44Gr5YiI44KL44Go44Ko44Oz44K444Oz44KS5L2V5bqm44KCXG4gICAgLy8g5L2c44KK55u044GZ44GT44Go44Gr44Gq44KK44CB44Gd44Gh44KJ44Gu44Kz44K544OI44Gu5pa544GM6auY44GP44Gk44GP77yIcmVnb0VuZ2luZUNhY2hlZCDjga7jgrPjg6Hjg7Pjg4jlj4LnhafvvInjgIJcbiAgICBjb25zdCBydWxlcyA9IHBydW5lKHRoaXMucnVsZXMsIHRlbXBsYXRlUmVzb3VyY2VUeXBlcyhjb250ZXh0LnN0YWNrVGVtcGxhdGVzLm1hcCgoc3QpID0+IHN0LnRlbXBsYXRlUGF0aCkpKTtcblxuICAgIC8vIDEg5pys44KC5q6L44KJ44Gq44GEID0g44GT44Gu44Ki44OX44Oq44Gu44Oq44K944O844K544Gr6Zai5L+C44GZ44KL44Or44O844Or44GM54Sh44GE44CC44Ko44Oz44K444Oz44KS57WE44KA5b+F6KaB44KC54Sh44GEXG4gICAgLy8g77yIbGlicyDjgaDjgZHjgpLovInjgZvjgZ/jgqjjg7Pjgrjjg7Pjga8gdmlvbGF0aW9uIOODq+ODvOODq+OCkuaMgeOBn+OBmuOAgeipleS+oeaZguOBq+iQveOBoeOCi++8ieOAglxuICAgIC8vIHN0cmljdCDjga7jgajjgY3jga/ntYTjgb/ovrzjgb/jgqjjg7Pjgrjjg7Pjga4gZmluZGluZ3Mg44KS5ou+44GG5LuV5LqL44GM5q6L44KL44Gu44Gn6YCa5bi444Gp44GK44KK6YCy44KA44CCXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5zdHJpY3QpIHtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHZpb2xhdGlvbnM6IFtdIH07XG4gICAgfVxuXG4gICAgbGV0IGVuZzogYW55O1xuICAgIHRyeSB7XG4gICAgICBlbmcgPSByZWdvRW5naW5lQ2FjaGVkKGVuZ2luZSwgcnVsZXMsIHJlZ2lvbiwgYWNjb3VudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8g44Or44O844Or44OR44OD44Kv44GM44Kz44Oz44OR44Kk44Or44Gn44GN44Gq44GEID0g44Gp44Gu44OG44Oz44OX44Os44O844OI44KC5qSc5p+744Gn44GN44Gq44GE44Gu44Gn44CBXG4gICAgICAvLyDlhajjgrnjgr/jg4Pjgq/jgbbjgpMgdmlvbGF0aW9uIOOCkueri+OBpuOCi++8iDEg5p6a44Ga44Gk44GuIGNhdGNoIOOBq+OBr+WIsOmBlOOBl+OBquOBhO+8ieOAglxuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIHZpb2xhdGlvbnM6IGNvbnRleHQuc3RhY2tUZW1wbGF0ZXMubWFwKChzdCkgPT4gZW5naW5lRXJyb3JWaW9sYXRpb24oc3QsIGUpKSB9O1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3Qgb2YgY29udGV4dC5zdGFja1RlbXBsYXRlcykge1xuICAgICAgbGV0IHJlcG9ydDogYW55O1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVwb3J0ID0gdmFsaWRhdGVUZW1wbGF0ZShlbmcsIG5ldyBlbmdpbmUuVGVtcGxhdGVGaWxlKHN0LnRlbXBsYXRlUGF0aCksIHtcbiAgICAgICAgICBwc2V1ZG9QYXJhbWV0ZXJPdmVycmlkZXM6IHtcbiAgICAgICAgICAgIGFjY291bnRJZDogY29udGV4dC5hY2NvdW50SWQsXG4gICAgICAgICAgICByZWdpb246IGNvbnRleHQucmVnaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8g57WE44G/6L6844G/44Or44O844Or44GvIENESyDntYTjgb/ovrzjgb/jga4gQ2xvdWRGb3JtYXRpb25WYWxpZGF0ZVBsdWdpbiDjgYzlkIzjgZjjg4bjg7Pjg5fjg6zjg7zjg4jjgatcbiAgICAgICAgICAvLyDlr77jgZfjgabml6LjgavotbDjgonjgZvjgabjgYTjgovjgIJzdHJpY3Qg44Gn44Gq44GR44KM44Gw57WQ5p6c44KC5L2/44KP44Ga5o2o44Gm44Gm44GE44KL44Gu44Gn44CB5Li444GU44Go5YiH44KLXG4gICAgICAgICAgLy8g77yI5a6f5risIDcwIOODquOCveODvOOCuSAxIOaemuOBp+WIneWbniAzLjI3cyAtPiAwLjIyc++8ieOAgnN0cmljdCDjga7jgajjgY3jgaDjgZHlv4XopoHjgavjgarjgovjgIJcbiAgICAgICAgICBkaXNhYmxlQnVpbHRpblJ1bGVzOiAhdGhpcy5zdHJpY3QsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0aHJvdyDjgpLlpJbjgavlh7rjgZnjgaggQ0RLIOOBr+OBk+OBruWRvOOBs+WHuuOBl+OCkiBwbHVnaW4gZmFpbHVyZe+8iHZpb2xhdGlvbiDjgrzjg63vvInjgajjgZfjgaZcbiAgICAgICAgLy8g6KiY6Yyy44GZ44KL44Gg44GR44Gr44Gq44KK44CB44GT44GT44G+44Gn44Gr6ZuG44KB44Gf6YGV5Y+N44KC5b6M57aa44OG44Oz44OX44Os44O844OI44Gu6YGV5Y+N44KC5Li444GU44Go5raI44GI44CBXG4gICAgICAgIC8vIOaui+OCi+OBruOBryBgZmFpbGVkOiB1bmRlZmluZWRgIOOBoOOBkeOBq+OBquOCi++8iGlzc3VlICMxNTHvvInjgIJcbiAgICAgICAgLy8gc3ludGgg44KS5q2i44KB44KL44Gu44GvIGluc3RhbGxFbmZvcmNlR2F0ZSDjga7lvbnnm67jgILjgZPjgZPjga/jgIzjganjga7jgrnjgr/jg4Pjgq/jgafkvZXjgYxcbiAgICAgICAgLy8g6LW344GN44Gf44GL44CN44KS44Os44Od44O844OI44Gr5q6L44GX44CB5LuW44K544K/44OD44Kv44Gu44Or44O844Or44KS6LWw44KJ44Gb57aa44GR44KL44Gf44KB44Gu44KC44Gu44CCXG4gICAgICAgIHZpb2xhdGlvbnMucHVzaChlbmdpbmVFcnJvclZpb2xhdGlvbihzdCwgZSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZCBvZiAocmVwb3J0LmRpYWdub3N0aWNzID8/IFtdKSBhcyBFbmdpbmVEaWFnbm9zdGljW10pIHtcbiAgICAgICAgY29uc3QgaXNPdXJzID0gZC5zb3VyY2UgPT09ICdDVVNUT00nICYmIG91cnMuaGFzKGQucnVsZUlkKTtcbiAgICAgICAgY29uc3QgaXNTdHJpY3RIaXQgPSB0aGlzLnN0cmljdFxuICAgICAgICAgICYmIGQuc291cmNlICE9PSAnQ1VTVE9NJ1xuICAgICAgICAgICYmIChkLnNldmVyaXR5ID09PSAnRVJST1InIHx8IGQuc2V2ZXJpdHkgPT09ICdGQVRBTCcpO1xuICAgICAgICBpZiAoIWlzT3VycyAmJiAhaXNTdHJpY3RIaXQpIGNvbnRpbnVlO1xuICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgIHJ1bGVOYW1lOiBkLnJ1bGVJZCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZC5tZXNzYWdlLFxuICAgICAgICAgIHNldmVyaXR5OiBtYXBTZXZlcml0eShkLnNldmVyaXR5KSxcbiAgICAgICAgICB2aW9sYXRpbmdSZXNvdXJjZXM6IFt7XG4gICAgICAgICAgICByZXNvdXJjZUxvZ2ljYWxJZDogZC5lbnRpdHk/LmxvZ2ljYWxJZCA/PyAnKHVua25vd24pJyxcbiAgICAgICAgICAgIHRlbXBsYXRlUGF0aDogc3QudGVtcGxhdGVQYXRoLFxuICAgICAgICAgICAgbG9jYXRpb25zOiBbZC5wcm9wZXJ0eVBhdGggPz8gJyh0ZW1wbGF0ZSknXSxcbiAgICAgICAgICB9XSxcbiAgICAgICAgICAuLi4oZC5kb2N1bWVudGF0aW9uVXJsID8geyBydWxlTWV0YWRhdGE6IHsgRG9jdW1lbnRhdGlvblVybDogZC5kb2N1bWVudGF0aW9uVXJsIH0gfSA6IHt9KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ0RLIOe1hOOBv+i+vOOBv+OBriBDbG91ZEZvcm1hdGlvblZhbGlkYXRlUGx1Z2luIOOBqOWQjOOBmOWIpOWumuOAgndhcm5pbmcg44Gg44GR44Gq44KJXG4gICAgLy8g44Os44Od44O844OI44Gr44Gv6LyJ44KL44GM5ZCI5oiQ44Gv6YCa44KL77yIQ0xJIOWBtOOBryBzdWNjZXNzL2ZhaWx1cmUg44Gr6Zai44KP44KJ44Ga5b+F44Ga5Ye65Yqb44GZ44KL77yJ44CCXG4gICAgcmV0dXJuIHsgc3VjY2VzczogdmlvbGF0aW9ucy5ldmVyeSgodikgPT4gIUJMT0NLU19TWU5USC5oYXMoU3RyaW5nKHYuc2V2ZXJpdHkpKSksIHZpb2xhdGlvbnMgfTtcbiAgfVxufVxuXG4vKiog5ZCI5oiQ44KS5q2i44KB44KLIHZpb2xhdGlvbiBzZXZlcml0eeOAgiAqL1xuY29uc3QgQkxPQ0tTX1NZTlRIID0gbmV3IFNldChbJ2Vycm9yJywgJ2ZhdGFsJ10pO1xuXG4vKipcbiAqIOOCqOODs+OCuOODs+OBriBzZXZlcml0eSDjgpIgcG9saWN5IHZhbGlkYXRpb24g44GuIHNldmVyaXR5IOOBq+WGmeOBmeOAguihqOOBryBhd3MtY2RrLWxpYiAyLjI2Ny4wIOOBrlxuICogQ2xvdWRGb3JtYXRpb25WYWxpZGF0ZVBsdWdpbiDjgajlkIzkuIDjgIJgcmVwcm8ubWV0aG9kOiBkb2Mtb25seWAg44Gu44Or44O844Or44GvIFdBUk4g44KS5Ye644GZ44Gu44GnXG4gKiB3YXJuaW5nIOOBq+OBquOCiuOAgeWgseWRiuOBr+OBleOCjOOCi+OBjCBzeW50aCDjga/mraLjgoHjgarjgYTvvIjoqLzmi6DjgYzlrp/mqZ/jga7jg4fjg5fjg63jgqTlpLHmlZfjgafjga/jgarjgYTjgZ/jgoHvvInjgIJcbiAqL1xuZnVuY3Rpb24gbWFwU2V2ZXJpdHkoc2V2ZXJpdHk6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHN3aXRjaCAoc2V2ZXJpdHkpIHtcbiAgICBjYXNlICdGQVRBTCc6XG4gICAgY2FzZSAnRVJST1InOlxuICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgY2FzZSAnV0FSTic6XG4gICAgICByZXR1cm4gJ3dhcm5pbmcnO1xuICAgIGNhc2UgJ0lORk8nOlxuICAgICAgcmV0dXJuICdpbmZvcm1hdGlvbmFsJztcbiAgICBjYXNlICdERUJVRyc6XG4gICAgICByZXR1cm4gJ2RlYnVnJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICd3YXJuaW5nJztcbiAgfVxufVxuXG4vKipcbiAqIOODq+ODvOODq+ipleS+oeOBneOBruOCguOBruOBjOWkseaVl+OBl+OBn+OBk+OBqOOCkuihqOOBmSB2aW9sYXRpb24g44GuIHJ1bGVOYW1l44CCXG4gKiDjg5Djg7Pjg4njg6vmuIjjgb/jg6vjg7zjg6vjga4gaWQg44Gn44Gv44Gq44GE44Gu44GnIGBleGNsdWRlYCDjgafjga/mtojjgZvjgarjgYTvvIjmtojjgZfjgabjgojjgYTnirbmhYvjgafjga/jgarjgYTvvInjgIJcbiAqL1xuZXhwb3J0IGNvbnN0IEVOR0lORV9FUlJPUl9SVUxFID0gJ3BmLWVuZ2luZS1lcnJvcic7XG5cbi8qKiDjgqjjg7Pjgrjjg7PjgYzmipXjgZLjgZ/lgKTjgpLjg6Hjg4Pjgrvjg7zjgrjjgavokL3jgajjgZnjgILjgqjjg7Pjgrjjg7Pjga8gRXJyb3Ig44Gn44Gv44Gq44GP57Sg44Gu5paH5a2X5YiX44KS5oqV44GS44KL44GT44Go44GM44GC44KL44CCICovXG5mdW5jdGlvbiBlbmdpbmVFcnJvclRleHQoZTogdW5rbm93bik6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSAoZSBhcyB7IG1lc3NhZ2U/OiB1bmtub3duIH0gfCB1bmRlZmluZWQpPy5tZXNzYWdlO1xuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2UubGVuZ3RoID4gMCA/IG1lc3NhZ2UgOiBTdHJpbmcoZSk7XG59XG5cbi8qKiAxIOaemuOBruODhuODs+ODl+ODrOODvOODiOOCkuaknOafu+OBp+OBjeOBquOBi+OBo+OBn+OBk+OBqOOCkiB2aW9sYXRpb24g44Go44GX44Gm5aCx5ZGK44GZ44KL44CCICovXG5mdW5jdGlvbiBlbmdpbmVFcnJvclZpb2xhdGlvbihzdDogeyBzdGFja0NvbnN0cnVjdFBhdGg6IHN0cmluZzsgdGVtcGxhdGVQYXRoOiBzdHJpbmcgfSwgZTogdW5rbm93bik6IFBvbGljeVZpb2xhdGlvbiB7XG4gIHJldHVybiB7XG4gICAgcnVsZU5hbWU6IEVOR0lORV9FUlJPUl9SVUxFLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ2Nkay1wcmVmbGlnaHQgY291bGQgbm90IGV2YWx1YXRlIGl0cyBydWxlcyBmb3IgdGhpcyB0ZW1wbGF0ZSwgc28gbm8gcHJlZmxpZ2h0IHJ1bGUgcmFuIGZvciBpdDogJ1xuICAgICAgKyBlbmdpbmVFcnJvclRleHQoZSksXG4gICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgZml4OiAnUmVwb3J0IHRoaXMgYXQgaHR0cHM6Ly9naXRodWIuY29tL2JhZG1pbnRvbmNyeWVyL2Nkay1wcmVmbGlnaHQvaXNzdWVzOyAnXG4gICAgICArICd0byB1bmJsb2NrIHRoZSBidWlsZCBtZWFud2hpbGUsIHVzZSBQcmVmbGlnaHQuYXBwbHkoYXBwLCB7IGVuZm9yY2U6IGZhbHNlIH0pLicsXG4gICAgdmlvbGF0aW5nUmVzb3VyY2VzOiBbe1xuICAgICAgY29uc3RydWN0UGF0aDogc3Quc3RhY2tDb25zdHJ1Y3RQYXRoLFxuICAgICAgdGVtcGxhdGVQYXRoOiBzdC50ZW1wbGF0ZVBhdGgsXG4gICAgICBsb2NhdGlvbnM6IFsnKHRlbXBsYXRlKSddLFxuICAgIH1dLFxuICB9O1xufVxuXG4vKiogVGhlIHBsdWdpbiBuYW1lIHJlY29yZGVkIGluIGB2YWxpZGF0aW9uLXJlcG9ydC5qc29uYCBmb3Igb3VyIGZpbmRpbmdzLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9OQU1FID0gJ2Nkay1wcmVmbGlnaHQnO1xuXG4vKiogVGhlIGNsb3VkIGFzc2VtYmx5IGZpbGUgdGhlIENESyB3cml0ZXMgaXRzIHZhbGlkYXRpb24gcmVwb3J0IHRvLiAqL1xuY29uc3QgVkFMSURBVElPTl9SRVBPUlRfRklMRSA9ICd2YWxpZGF0aW9uLXJlcG9ydC5qc29uJztcblxuY29uc3QgR0FURV9JTlNUQUxMRUQgPSBTeW1ib2wuZm9yKCdjZGstcHJlZmxpZ2h0LmVuZm9yY2VHYXRlJyk7XG5cbi8qKlxuICogZW5mb3JjZSDjg6Ljg7zjg4njga7lj5bjgorjgZPjgbzjgZfjgpLloZ7jgZDjgrLjg7zjg4jjgpIgQXBwIOOBq+S7lei+vOOCgOOAglxuICpcbiAqIENESyBDTEkgMi4xMTI4LjEg5Lul6ZmN44GvIGFwcCDjgavjgIzjg6zjg53jg7zjg4jjga8gQ0xJIOOBjOWHpueQhuOBmeOCi+OAjeOBqOS8neOBiOOBn+OBhuOBiOOBp1xuICogYHZhbGlkYXRpb24tcmVwb3J0Lmpzb25gIOOCkuiHquWIhuOBp+iqreOCgOOBjOOAgeOBneOBrue1nuOCiui+vOOBv++8iHRvb2xraXQtbGliIOOBrlxuICogYGZpbHRlclJlcG9ydHNCeVN0YWNrc2DvvInjgYwgdmlvbGF0aW9uIOOBriBjb25zdHJ1Y3RQYXRoIOWFiOmgreOCu+OCsOODoeODs+ODiOOCklxuICog6YG45oqe44K544K/44OD44Kv44GuIGhpZXJhcmNoaWNhbElkIOOBqOeqgeOBjeWQiOOCj+OBm+OCi+OBn+OCgeOAgWBTdGFnZS9TdGFja2Ag5b2i5byP44Gr44Gq44KLXG4gKiBTdGFnZSDlhoXjgrnjgr/jg4Pjgq/jga7pgZXlj43jgYzjgZnjgbnjgabmjajjgabjgonjgozjgIFzeW50aCDjgYzpu5njgaPjgabmiJDlip/jgZnjgovvvIhpc3N1ZSAjMTEz77yJ44CCXG4gKlxuICog44Gd44GT44GnIHN5bnRoIOWujOS6huW+jOOBq+ODrOODneODvOODiOOCkuiqreOBv+ebtOOBl+OAgWNkay1wcmVmbGlnaHQg44Gu6YGV5Y+N44GM5q6L44Gj44Gm44GE44KM44GwXG4gKiDoh6rliIbjgafloLHlkYrjgZfjgaYgc3ludGgg44KS5q2i44KB44KL44CC44Op44Kk44OW44Op44Oq44GM6Ieq5Yqb44Gn5aCx5ZGK44GZ44KL57WM6Lev77yI57Sg44GuIG5vZGUg5a6f6KGM44CBXG4gKiBqZXN044CBQ0xJIDIuMTEyOC4xIOacqua6gO+8ieOBp+OBryBzeW50aCDjgYzkvovlpJbjgpLmipXjgZLjgovjgZ/jgoHjgZPjgZPjgavjga/liLDpgZTjgZvjgZrjgIFcbiAqIOS6jOmHjeWgseWRiuOBr+i1t+OBjeOBquOBhOOAglxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbEVuZm9yY2VHYXRlKHNjb3BlOiBJQ29uc3RydWN0KTogdm9pZCB7XG4gIGNvbnN0IHJvb3QgPSBzY29wZS5ub2RlLnJvb3Q7XG4gIGlmICghQXBwLmlzQXBwKHJvb3QpKSByZXR1cm47XG4gIGNvbnN0IGFwcCA9IHJvb3QgYXMgQXBwICYgeyBbR0FURV9JTlNUQUxMRURdPzogYm9vbGVhbiB9O1xuICBpZiAoYXBwW0dBVEVfSU5TVEFMTEVEXSkgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXBwLCBHQVRFX0lOU1RBTExFRCwgeyB2YWx1ZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG5cbiAgY29uc3Qgc3ludGggPSBhcHAuc3ludGguYmluZChhcHApO1xuICBsZXQgY2hlY2tlZCA9IGZhbHNlO1xuICBhcHAuc3ludGggPSAob3B0aW9ucz86IFBhcmFtZXRlcnM8QXBwWydzeW50aCddPlswXSkgPT4ge1xuICAgIGNvbnN0IGFzc2VtYmx5ID0gc3ludGgob3B0aW9ucyk7XG4gICAgaWYgKCFjaGVja2VkKSB7XG4gICAgICBjaGVja2VkID0gdHJ1ZTtcbiAgICAgIGZhaWxJZlJlcG9ydFVuaGFuZGxlZChhc3NlbWJseS5kaXJlY3RvcnkpO1xuICAgIH1cbiAgICByZXR1cm4gYXNzZW1ibHk7XG4gIH07XG59XG5cbi8qKlxuICog44Os44Od44O844OI44GrIGNkay1wcmVmbGlnaHQg44Gu5aSx5pWX44GM5q6L44Gj44Gm44GE44KM44Gw44CBZmluZGluZ3Mg44KS5Ye65Yqb44GX44GmIHN5bnRoIOOCkuatouOCgeOCi+OAglxuICpcbiAqIOWIpOWumuOBryBjZGstcHJlZmxpZ2h0IOOBruODrOODneODvOODiOOBoOOBkeOCkuimi+OCi+OAgue1hOOBv+i+vOOBv+OCqOODs+OCuOODs+OChCBjb25zdHJ1Y3QgYW5ub3RhdGlvblxuICog44Gg44GR44GM5aSx5pWX44GX44Gm44GE44KL5aC05ZCI44GvIENMSSDjgYzmraPjgZfjgY/mibHjgYjjgovjga7jgafjgIHjgZPjgaHjgonjga/pu5njgaPjgaYgQ0xJIOOBq+S7u+OBm+OCi+OAglxuICog6YCG44Gr55m654Gr44GZ44KL44Go44GN44Gv44Os44Od44O844OI5YWo5L2T44KS5Ye644GZ44CC44GT44GT44GnIHN5bnRoIOOCkuatouOCgeOCi+OBqCBDTEkg5YG044Gu5Ye65Yqb44GMXG4gKiDkuIDliIfotbDjgonjgarjgYTjgZ/jgoHjgIHlkIzmmYLjgavlh7rjgabjgYTjgZ/jga/jgZrjga7ku5bjg5fjg6njgrDjgqTjg7Pjga4gZmluZGluZyDjgYzmtojjgYjjgabjgZfjgb7jgYbjgIJcbiAqL1xuZnVuY3Rpb24gZmFpbElmUmVwb3J0VW5oYW5kbGVkKGRpcmVjdG9yeTogc3RyaW5nKTogdm9pZCB7XG4gIGxldCBwbHVnaW5SZXBvcnRzOiBhbnlbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXBvcnQgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZGlyZWN0b3J5LCBWQUxJREFUSU9OX1JFUE9SVF9GSUxFKSwgJ3V0ZjgnKSk7XG4gICAgcGx1Z2luUmVwb3J0cyA9IHJlcG9ydD8ucGx1Z2luUmVwb3J0cyA/PyBbXTtcbiAgfSBjYXRjaCB7XG4gICAgLy8g44Os44Od44O844OI44GM54Sh44GE77yI44OX44Op44Kw44Kk44Oz5pyq5a6f6KGM77yJ44G+44Gf44Gv5aOK44KM44Gm44GE44KL5aC05ZCI44Gv5L2V44KC44GX44Gq44GEXG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGZhaWxlZCA9IHBsdWdpblJlcG9ydHMuc29tZShcbiAgICAocikgPT4gcj8ucGx1Z2luTmFtZSA9PT0gUExVR0lOX05BTUUgJiYgcj8uY29uY2x1c2lvbiA9PT0gJ2ZhaWx1cmUnLFxuICApO1xuICBpZiAoIWZhaWxlZCkgcmV0dXJuO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUuZXJyb3IoZm9ybWF0UmVwb3J0cyhwbHVnaW5SZXBvcnRzKSk7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAnY2RrLXByZWZsaWdodDogdmFsaWRhdGlvbiBmYWlsZWQuIEZpeCB0aGUgZmluZGluZ3MgYWJvdmUsICcgK1xuICAgIFwiYWNrbm93bGVkZ2UgdGhlbSB3aXRoIFZhbGlkYXRpb25zLm9mKHNjb3BlKS5hY2tub3dsZWRnZSh7IGlkOiAnY2RrLXByZWZsaWdodDo6PHJ1bGUtaWQ+JyB9KSwgXCIgK1xuICAgICdvciBleGNsdWRlIHRoZSBydWxlIHZpYSBQcmVmbGlnaHQuYXBwbHkoYXBwLCB7IGV4Y2x1ZGU6IFsuLi5dIH0pLicsXG4gICk7XG59XG5cbi8qKlxuICogQ0RLIOacrOS9k+OBruODleOCqeODvOODnuODg+OCv+OBp+aVtOW9ouOBl+OAgUNMSSDjgajlkIzkuIDjga7opovjgZ/nm67jgavjgZnjgovjgIJcbiAqIOengeacieODkeOCueOBquOBruOBp+ino+axuuOBp+OBjeOBquOBhOOBk+OBqOOBjOOBguOCiuOAgeOBneOBruWgtOWQiOOBr+acgOWwj+mZkOOBruiHquWJjeaVtOW9ouOBq+iQveOBqOOBmVxuICog77yI6KaL44Gf55uu44KI44KK44CM6JC944Go44GZ44CN44GT44Go44KS5YSq5YWI44GZ44KL77yJ44CCXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFJlcG9ydHMocGx1Z2luUmVwb3J0czogYW55W10pOiBzdHJpbmcge1xuICBjb25zdCBmb3JtYXR0ZXIgPSBsb2FkRm9ybWF0dGVyQ2FjaGVkKCk7XG4gIGlmIChmb3JtYXR0ZXIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXRWYWxpZGF0aW9uUmVwb3J0cyhwcm9jZXNzLmN3ZCgpLCBwbHVnaW5SZXBvcnRzKS5qb2luKCdcXG5cXG4nKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGZhbGwgdGhyb3VnaFxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsbGJhY2tGb3JtYXQocGx1Z2luUmVwb3J0cyk7XG59XG5cbi8qKlxuICogQ0RLIOacrOS9k+OBruODleOCqeODvOODnuODg+OCv+OCkuino+axuuOBp+OBjeOBquOBhOOBqOOBjeOBruacgOWwj+mZkOOBruaVtOW9ouOAglxuICog6KaL44Gf55uu44Gv5Yqj44KL44GM44CBZmluZGluZ3Mg44KS5b+F44Ga6Kqt44KB44KL5b2i44Gn5Ye644GZ44Gf44KB44Gu5pyA5b6M44Gu56Cm44CCXG4gKiDvvIjjg4bjgrnjg4jjgYvjgonjgoLliKnnlKjjgZnjgovjgZ/jgoEgZXhwb3J0IOOBl+OBpuOBhOOCi++8iVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFsbGJhY2tGb3JtYXQocGx1Z2luUmVwb3J0czogYW55W10pOiBzdHJpbmcge1xuICBjb25zdCBibG9ja3M6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcmVwb3J0IG9mIHBsdWdpblJlcG9ydHMpIHtcbiAgICBmb3IgKGNvbnN0IHZpb2xhdGlvbiBvZiByZXBvcnQ/LnZpb2xhdGlvbnMgPz8gW10pIHtcbiAgICAgIGNvbnN0IGFja0lkID0gU3RyaW5nKHZpb2xhdGlvbi5ydWxlTmFtZSkuaW5jbHVkZXMoJzo6JylcbiAgICAgICAgPyB2aW9sYXRpb24ucnVsZU5hbWVcbiAgICAgICAgOiBgJHtyZXBvcnQucGx1Z2luTmFtZX06OiR7dmlvbGF0aW9uLnJ1bGVOYW1lfWA7XG4gICAgICBmb3IgKGNvbnN0IGMgb2YgdmlvbGF0aW9uLnZpb2xhdGluZ0NvbnN0cnVjdHMgPz8gW10pIHtcbiAgICAgICAgYmxvY2tzLnB1c2goXG4gICAgICAgICAgYCR7U3RyaW5nKHZpb2xhdGlvbi5zZXZlcml0eSA/PyAnRVJST1InKS50b1VwcGVyQ2FzZSgpfSAke3Zpb2xhdGlvbi5kZXNjcmlwdGlvbn0gKCR7cmVwb3J0LnBsdWdpbk5hbWV9KVxcbmAgK1xuICAgICAgICAgIGAgICAke2MuY29uc3RydWN0UGF0aH0gKCR7Yy5jbG91ZEZvcm1hdGlvblJlc291cmNlPy5sb2dpY2FsSWR9KSAke2MuY29uc3RydWN0RnFufVxcbmAgK1xuICAgICAgICAgIGAgICBBY2tub3dsZWRnZSB3aXRoICcke1N0cmluZyhhY2tJZCkucmVwbGFjZSgvIC9nLCAnLScpfSdgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYmxvY2tzLmpvaW4oJ1xcblxcbicpO1xufVxuXG4vLyDjg5Xjgqnjg7zjg57jg4Pjgr/jga8gYXdzLWNkay1saWIg44Gu56eB5pyJ44OR44K544Gr44GC44KKIGBleHBvcnRzYCDjgYvjgonopovjgYjjgarjgYTjgZ/jgoHjgIFcbi8vIOOCqOODs+OCuOODs+ino+axuu+8iGxvYWRFbmdpbmXvvInjgajlkIzjgZjjgY/jg5Hjg4PjgrHjg7zjgrjjg6vjg7zjg4jjgYvjgonjga7ntbblr77jg5Hjgrnjgafoqq3jgb/ovrzjgoDjgIJcbmxldCBjYWNoZWRGb3JtYXR0ZXI6IGFueSB8IGZhbHNlIHwgdW5kZWZpbmVkO1xuZnVuY3Rpb24gbG9hZEZvcm1hdHRlckNhY2hlZCgpOiBhbnkgfCB1bmRlZmluZWQge1xuICBpZiAoY2FjaGVkRm9ybWF0dGVyID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWNoZWRGb3JtYXR0ZXIgPSBsb2FkRm9ybWF0dGVyKCkgPz8gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGNhY2hlZEZvcm1hdHRlciA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBjYWNoZWRGb3JtYXR0ZXI7XG59XG5cbi8qKiDvvIjjg4bjgrnjg4jjgYvjgonjgoLliKnnlKjjgZnjgovjgZ/jgoEgZXhwb3J0IOOBl+OBpuOBhOOCi++8iSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGb3JtYXR0ZXIoKTogYW55IHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBsaWJSb290ID0gcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZSgnYXdzLWNkay1saWIvcGFja2FnZS5qc29uJykpO1xuICAgIGNvbnN0IG1vZCA9IHJlcXVpcmUocGF0aC5qb2luKGxpYlJvb3QsICdjb3JlL2xpYi92YWxpZGF0aW9uL3ByaXZhdGUvbW9kZXJuLWZvcm1hdHRlci5qcycpKTtcbiAgICByZXR1cm4gdHlwZW9mIG1vZD8uZm9ybWF0VmFsaWRhdGlvblJlcG9ydHMgPT09ICdmdW5jdGlvbicgPyBtb2QgOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLy8g44Ko44Oz44K444Oz77yIV0FTTe+8ieOBruWIneacn+WMluOBr+mHjeOBhOOBn+OCgeOAgeODouOCuOODpeODvOODq+ODrOODmeODq+OBp+OCreODo+ODg+OCt+ODpeOBmeOCi1xubGV0IGNhY2hlZEVuZ2luZU1vZHVsZTogYW55IHwgZmFsc2UgfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBsb2FkRW5naW5lQ2FjaGVkKCk6IGFueSB8IHVuZGVmaW5lZCB7XG4gIGlmIChjYWNoZWRFbmdpbmVNb2R1bGUgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlZEVuZ2luZU1vZHVsZSA9IGxvYWRFbmdpbmUoKSA/PyBmYWxzZTtcbiAgfVxuICByZXR1cm4gY2FjaGVkRW5naW5lTW9kdWxlID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IGNhY2hlZEVuZ2luZU1vZHVsZTtcbn1cblxuLy8g44Ko44Oz44K444Oz77yIV0FTTe+8ieOBryAxIOODl+ODreOCu+OCueOBqyAxIOOBpOOBoOOBkeeUn+OBi+OBmeOAguS9nOOCiuebtOOBmeWJjeOBqyBmcmVlKCkg44GX44Gq44GE44Go44Kk44Oz44K544K/44Oz44K544GMXG4vLyDnqY3jgb/kuIrjgYzjgorjgIEyIOWAi+ebruS7pemZjeOBruani+evieOBjOi2hee3muW9ouOBq+mBheOBj+OBquOCi++8iOWun+a4rDogZnJlZSDnhKHjgZfjgacgMy44cyAtPiAxMS4ycyAtPiAyMi4xc+OAgVxuLy8g5qeL56+J5YmN44GrIGZyZWUg44GZ44KL44GoIDMuNXMgLT4gMC40c++8ieOAguODq+ODvOODq+OCu+ODg+ODiOOBjOWkieOCj+OCi++8iFN0YWdlIOOBlOOBqOOBqyBleGNsdWRlIOOBjOmBleOBhuOAgVxuLy8g44OG44K544OI44Gn6KSH5pWw44Ki44OX44Oq44KS5ZCI5oiQ44GZ44KL77yJ44Gf44Gz44Gr5L2c44KK55u044GZ44Gu44Gn44CB44Kt44Oj44OD44K344Ol44GvIDEg44K544Ot44OD44OI44Gn6Laz44KK44KL44CCXG5sZXQgY2FjaGVkUmVnb0VuZ2luZTogeyBrZXk6IHN0cmluZzsgZW5naW5lOiBhbnkgfSB8IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIHJlZ29FbmdpbmVDYWNoZWQoZW5naW5lTW9kdWxlOiBhbnksIHJ1bGVzOiBCdW5kbGVkUnVsZURhdGFbXSwgcmVnaW9uPzogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nKTogYW55IHtcbiAgY29uc3Qga2V5ID0gYCR7cmVnaW9uID8/ICcnfXwke2FjY291bnQgPz8gJyd9fCR7cnVsZXMubWFwKChyKSA9PiByLmlkKS5qb2luKCcsJyl9YDtcbiAgaWYgKGNhY2hlZFJlZ29FbmdpbmU/LmtleSAhPT0ga2V5KSB7XG4gICAgY2FjaGVkUmVnb0VuZ2luZT8uZW5naW5lPy5mcmVlPy4oKTtcbiAgICBjYWNoZWRSZWdvRW5naW5lID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGN1c3RvbVJ1bGVzID0gW1xuICAgICAgLi4uQlVORExFRF9MSUJTLm1hcCgobCkgPT4gKHsgbmFtZTogbC5uYW1lLCBjb250ZW50OiBsLnJlZ28gfSkpLFxuICAgICAgLi4ubWVyZ2VSdWxlTW9kdWxlcyhydWxlcyksXG4gICAgXTtcbiAgICBpZiAocmVnaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGN1c3RvbVJ1bGVzLnB1c2goZGVwbG95RW52aXJvbm1lbnRNb2R1bGUocmVnaW9uLCBhY2NvdW50KSk7XG4gICAgfVxuICAgIGNhY2hlZFJlZ29FbmdpbmUgPSB7IGtleSwgZW5naW5lOiBuZXcgZW5naW5lTW9kdWxlLlJlZ29FbmdpbmUoeyBjdXN0b21SdWxlcyB9KSB9O1xuICB9XG4gIHJldHVybiBjYWNoZWRSZWdvRW5naW5lLmVuZ2luZTtcbn1cblxuLy8g6Kaz5ris44Oi44O844OJ77yIZW5mb3JjZTogZmFsc2XvvInjga8gQ0RLIOe1hOOBv+i+vOOBv+OBriBDbG91ZEZvcm1hdGlvblZhbGlkYXRlUGx1Z2luIOOBq+ebuOS5l+OCiuOBmeOCi+OAglxuLy8g44GC44Gh44KJ44Gv44Kz44Oz44K544OI44Op44Kv44K/44Gn44Ko44Oz44K444Oz44KSIDEg44Gk5L2c44Gj44GmIGZyZWUoKSDjgZfjgarjgYTjga7jgafjgIHlkIzjgZjjg5fjg63jgrvjgrnjgacgQXBwIOOCklxuLy8g5L2c44KK55u044GZ44Gf44Gz44Gr44Kk44Oz44K544K/44Oz44K544GM56mN44G/5LiK44GM44KK44CBcmVnb0VuZ2luZUNhY2hlZCDjgajlkIzjgZjotoXnt5rlvaLjga7mgqrljJbjgpLotbfjgZPjgZlcbi8vIO+8iOWun+a4rCAyMDI2LTA5LTEzOiDlkIzjgZjjg6vjg7zjg6vjgrvjg4Pjg4jjgacgNCDlm54gc3ludGgg44GX44GmIDM2cyAtPiA5NXMgLT4gMTMxcyAtPiAxNzhz77yJ44CCXG4vLyDjg6vjg7zjg6vjgrvjg4Pjg4jjgYzlpInjgo/jgonjgarjgYTpmZDjgorjg5fjg6njgrDjgqTjg7PjgZTjgajkvb/jgYTlm57jgZnjgIJcbi8vIHBvbnl0YWlsOiDjgq3jg7zjgYzlpInjgo/jgaPjgZ/jgajjgY3jgavlj6TjgYTjgqjjg7Pjgrjjg7Pjga8gZnJlZSgpIOOBl+OBquOBhO+8iOOCqOODs+OCuOODs+OBryBDREsg5YG044GuXG4vLyBwcml2YXRlIOODleOCo+ODvOODq+ODieOBp+OAgeinpuOCi+OBq+OBr+WGhemDqOWun+ijheOBq+aJi+OCkuWFpeOCjOOCi+OBk+OBqOOBq+OBquOCi++8ieOAguioreWumumBleOBhOOBriBTdGFnZSDjgYxcbi8vIE4g5YCL44GC44KM44GwIE4g5YCL56mN44KA44GM44CB5a6f44Ki44OX44Oq44Gn44GvIDHjgJwyIOWAi+OAguepjeOBv+S4iuOBjOOCiuOBjOWVj+mhjOOBq+OBquOCi+OBquOCieOAgeOBneOBruOBqOOBjeOBq1xuLy8g44Ki44OD44OX44K544OI44Oq44O844Og44G4IGZyZWUvZGlzcG9zZSDjgpLlhaXjgozjgabjgoLjgonjgYbjgIJcbmxldCBjYWNoZWRPYnNlcnZlUGx1Z2luOiB7IGtleTogc3RyaW5nOyBwbHVnaW46IENsb3VkRm9ybWF0aW9uVmFsaWRhdGVQbHVnaW4gfSB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlUGx1Z2luQ2FjaGVkKHJ1bGVzOiBCdW5kbGVkUnVsZURhdGFbXSk6IENsb3VkRm9ybWF0aW9uVmFsaWRhdGVQbHVnaW4ge1xuICBjb25zdCBrZXkgPSBydWxlcy5tYXAoKHIpID0+IHIuaWQpLmpvaW4oJywnKTtcbiAgaWYgKGNhY2hlZE9ic2VydmVQbHVnaW4/LmtleSAhPT0ga2V5KSB7XG4gICAgY2FjaGVkT2JzZXJ2ZVBsdWdpbiA9IHtcbiAgICAgIGtleSxcbiAgICAgIHBsdWdpbjogbmV3IENsb3VkRm9ybWF0aW9uVmFsaWRhdGVQbHVnaW4oe1xuICAgICAgICByZWdvUnVsZXM6IFtcbiAgICAgICAgICAuLi5CVU5ETEVEX0xJQlMubWFwKChsKSA9PiAoeyBuYW1lOiBsLm5hbWUsIGNvbnRlbnQ6IGwucmVnbyB9KSksXG4gICAgICAgICAgLi4ubWVyZ2VSdWxlTW9kdWxlcyhydWxlcyksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG4gIHJldHVybiBjYWNoZWRPYnNlcnZlUGx1Z2luLnBsdWdpbjtcbn1cblxuLyoqIOWFqOODq+ODvOODq+OBq+WFsemAmuOBriByZWdvIOODmOODg+ODgOOAgmJ1bmRsZS1ydWxlcyDjgYwgcGFja2FnZSDlkI3jgaggaW1wb3J0IOOCkiAxIOeorumhnuOBq+W8t+WItuOBl+OBpuOBhOOCi+OAgiAqL1xuY29uc3QgUkVHT19IRUFERVIgPSAncGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG4nO1xuXG4vKipcbiAqIOODq+ODvOODq+OCkiBzZXJ2aWNlIOOBlOOBqOOBqyAxIOODouOCuOODpeODvOODq+OBuOOBvuOBqOOCgeOCi+OAglxuICpcbiAqIOOCs+ODs+ODkeOCpOODq+aZgumWk+OBr+ODq+ODvOODq+acrOS9k+OBrumHj+OCiOOCiuODouOCuOODpeODvOODq+aVsOOBp+WKueOBhOOBpuOBj+OCi++8iOWun+a4rCAxODQ0IOODq+ODvOODq+OCklxuICogMSDjg6vjg7zjg6sgMSDjg6Ljgrjjg6Xjg7zjg6vjgafovInjgZvjgovjgajntIQgNi4yc+OAgXNlcnZpY2Ug5Y2Y5L2N44GuIDM5IOODouOCuOODpeODvOODq+OBq+eVs+OCgOOBqOe0hCAxLjBz77yJ44CCXG4gKiDjg6vjg7zjg6vjga/jgoLjgajjgoLjgajlhajpg6ggYHBhY2thZ2UgY2RrX3ByZWZsaWdodGAg44Gq44Gu44Gn44CBUmVnbyDjgYvjgonopovjgozjgbDntZDlkIjjgZfjgabjgoJcbiAqIOOBl+OBquOBj+OBpuOCguWQjOOBmCAxIOODkeODg+OCseODvOOCuOKAlOKAlOODouOCuOODpeODvOODq+Wig+eVjOOBq+aEj+WRs+irluOBr+eEoeOBhOOAguOBl+OBn+OBjOOBo+OBpueVs+OCgeOCi+OBruOBoOOBjOOAgVxuICog6KOP44KS6L+U44Gb44Gw44CM5Yil44Or44O844Or44GM5ZCM44GY5ZCN5YmN44Gu44OY44Or44OR44O844KS5a6a576p44GZ44KL44Go6buZ44Gj44GmIDEg44Gk44Gu6KaP5YmH44Gr5ZCI5rWB44GZ44KL44CNXG4gKiDjgajjgYTjgYbljbHpmbrjgoLntZDlkIjliY3jgYvjgonlrZjlnKjjgZnjgovjgIJidW5kbGUtcnVsZXMg44GM44Or44O844Or6ZaT44Gu44OI44OD44OX44Os44OZ44Or5ZCN6KGd56qB44KSXG4gKiDlvL7jgYTjgabjgYTjgovjga7jga/jgZ3jga7jgZ/jgoHvvIjlhbHmnInjgZfjgZ/jgYTlrprnvqnjga8gcnVsZXMvX2xpYi8g44Gr572u44GP77yJ44CCXG4gKiDvvIjjg4bjgrnjg4jjgYvjgonjgoLliKnnlKjjgZnjgovjgZ/jgoEgZXhwb3J0IOOBl+OBpuOBhOOCi++8iVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VSdWxlTW9kdWxlcyhydWxlczogQnVuZGxlZFJ1bGVEYXRhW10pOiB7IG5hbWU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH1bXSB7XG4gIGNvbnN0IGJ5U2VydmljZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgZm9yIChjb25zdCByIG9mIHJ1bGVzKSB7XG4gICAgY29uc3QgYm9keSA9IHIucmVnby5yZXBsYWNlKC9eKD86cGFja2FnZXxpbXBvcnQpXFxzLipcXG4vZ20sICcnKTtcbiAgICBieVNlcnZpY2Uuc2V0KHIuc2VydmljZSwgWy4uLmJ5U2VydmljZS5nZXQoci5zZXJ2aWNlKSA/PyBbXSwgYm9keV0pO1xuICB9XG4gIHJldHVybiBbLi4uYnlTZXJ2aWNlXS5tYXAoKFtzZXJ2aWNlLCBib2RpZXNdKSA9PiAoe1xuICAgIG5hbWU6IGBfcGZfc2VydmljZV8ke3NlcnZpY2V9YCxcbiAgICBjb250ZW50OiBSRUdPX0hFQURFUiArIGJvZGllcy5qb2luKCdcXG4nKSxcbiAgfSkpO1xufVxuXG4vKipcbiAqIOODhuODs+ODl+ODrOODvOODiOe+pOOBq+WHuuOBpuOBj+OCi+ODquOCveODvOOCueOCv+OCpOODl+OAguWIiOOCiui+vOOBv+OBq+S9v+OBiOOBquOBhOODhuODs+ODl+ODrOODvOODiOOBjCAxIOaemuOBp+OCguOBguOCjOOBsFxuICogdW5kZWZpbmVkIOOCkui/lOOBl+OAgeWIiOOCiui+vOOBv+OBneOBruOCguOBruOCkuirpuOCgeOCi++8iOS9leOBjOi8ieOBo+OBpuOBhOOCi+OBi+WIhuOBi+OCieOBquOBhOOBvuOBvuiQveOBqOOBmeOBqOOAgVxuICog44Or44O844Or44GM6buZ44Gj44Gm55m654Gr44GX44Gq44GP44Gq44KLID0gZW5mb3JjZSDjgavjgajjgaPjgabmnIDmgqrjga7lo4rjgozmlrnjgavjgarjgovjgZ/jgoHvvInjgIJcbiAqIO+8iOODhuOCueODiOOBi+OCieOCguWIqeeUqOOBmeOCi+OBn+OCgSBleHBvcnQg44GX44Gm44GE44KL77yJXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW1wbGF0ZVJlc291cmNlVHlwZXModGVtcGxhdGVQYXRoczogc3RyaW5nW10pOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHR5cGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgdGVtcGxhdGVQYXRoIG9mIHRlbXBsYXRlUGF0aHMpIHtcbiAgICBsZXQgdGVtcGxhdGU6IGFueTtcbiAgICB0cnkge1xuICAgICAgdGVtcGxhdGUgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyh0ZW1wbGF0ZVBhdGgsICd1dGY4JykpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gVHJhbnNmb3Jt77yIU0FNIOetie+8ieOBr+ODnuOCr+ODreWxlemWi+OBp+WIpeOBruODquOCveODvOOCueOBq+WMluOBkeOCi+OBruOBp+OAgeeUn+OBruODhuODs+ODl+ODrOODvOODiOOBi+OCiVxuICAgIC8vIOiqreOCgeOCi+ODquOCveODvOOCueOCv+OCpOODl+OBr+W9k+OBpuOBq+OBquOCieOBquOBhOOAglxuICAgIGlmICh0ZW1wbGF0ZT8uVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBPYmplY3QudmFsdWVzKHRlbXBsYXRlPy5SZXNvdXJjZXMgPz8ge30pIGFzIGFueVtdKSB7XG4gICAgICAvLyBGbjo6Rm9yRWFjaCDjgarjganjgacgVHlwZSDjgYzpnZnnmoTjgavoqq3jgoHjgarjgYTjgqjjg7Pjg4jjg6rjgYzjgYLjgozjgbDoq6bjgoHjgovjgIJcbiAgICAgIGlmICh0eXBlb2YgcmVzb3VyY2U/LlR5cGUgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgdHlwZXMuYWRkKHJlc291cmNlLlR5cGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHlwZXM7XG59XG5cbi8qKlxuICog44OG44Oz44OX44Os44O844OI44Gr5Ye644Gm44GP44KL44Oq44K944O844K544K/44Kk44OX44Gr6Zai5L+C44GZ44KL44Or44O844Or44Gg44GR44KS6YG444G244CCXG4gKlxuICog44Ko44Oz44K444Oz44Gu44Kz44Oz44OR44Kk44Or5pmC6ZaT44Gv44Or44O844Or5pWw44Gn44G744G85rG644G+44KL44Gu44Gn77yI5a6f5risIDE4NDQg44Or44O844Or44Gn57SEIDQuNnPjgIFcbiAqIOWFuOWei+eahOOBquOCouODl+ODquOBq+aui+OCiyAxMDAg44Or44O844Or5YmN5b6M44Gq44KJIDAuOHMg5YmN5b6M77yJ44CB44GT44KM44GM5Zu65a6a6LK744Gu5Li744Gq5YmK44KK44Gp44GT44KN44CCXG4gKiDlronlhajmgKfjga8gbWV0YS5yZXNvdXJjZVR5cGVzIOOBruWuo+iogOOBq+S5l+OBo+OBpuOBhOOCizog44Or44O844Or44GM6KaL44KL44Oq44K944O844K544K/44Kk44OX44GMXG4gKiDlrqPoqIDjgYvjgonmvI/jgozjgabjgYTjgovjgajliIjjgonjgozjgabnmbrngavjgZfjgarjgY/jgarjgovjgZ/jgoHjgIF0ZXN0L3J1bGVzLnRlc3QudHMg44GM5YWo44Or44O844Or44Gr44Gk44GE44GmXG4gKiDjgIzoh6rliIbjga4gZmFpbCDjg4bjg7Pjg5fjg6zjg7zjg4jjgafliIjjgormrovjgovjgZPjgajjgI3jgpLmpJzmn7vjgZfjgabjgYTjgovjgIJcbiAqIO+8iOODhuOCueODiOOBi+OCieOCguWIqeeUqOOBmeOCi+OBn+OCgSBleHBvcnQg44GX44Gm44GE44KL77yJXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShydWxlczogQnVuZGxlZFJ1bGVEYXRhW10sIHR5cGVzOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCk6IEJ1bmRsZWRSdWxlRGF0YVtdIHtcbiAgaWYgKHR5cGVzID09PSB1bmRlZmluZWQpIHJldHVybiBydWxlcztcbiAgLy8g5YiI44KL5qC55oug44GM54Sh44GE44Or44O844Or44Gv5q6L44GZOiBcIipcIu+8iOWFqOODquOCveODvOOCueWei+OBq+WKueOBj+OCv+OCsOezu+ODq+ODvOODq++8ieOBqOOAgVxuICAvLyByZXNvdXJjZVR5cGVzIOOBjOepuuOBruOCguOBru+8iOODkOODs+ODieODq+a4iOOBv+ODq+ODvOODq+OBr+mdnuepuuOBjOS/neiovOOBleOCjOOBpuOBhOOCi+OBruOBp+OAgeipsuW9k+OBmeOCi+OBruOBr1xuICAvLyDmiYvjgafntYTjgb/nq4vjgabjgZ/jg6vjg7zjg6sgPSDjg4bjgrnjg4jjgoTlsIbmnaXjga7jg4bjg7Pjg5fjg6zjg7zjg4jlsaTjg6vjg7zjg6vjgaDjgZHvvInjgIJcbiAgcmV0dXJuIHJ1bGVzLmZpbHRlcigocikgPT4gci5yZXNvdXJjZVR5cGVzLmxlbmd0aCA9PT0gMFxuICAgIHx8IHIucmVzb3VyY2VUeXBlcy5pbmNsdWRlcygnKicpXG4gICAgfHwgci5yZXNvdXJjZVR5cGVzLnNvbWUoKHQpID0+IHR5cGVzLmhhcyh0KSkpO1xufVxuXG4vKipcbiAqIEBhd3MvY2xvdWRmb3JtYXRpb24tdmFsaWRhdGUg44KS6Kej5rG644GZ44KL44CCXG4gKiDpgJrluLjjga8gYXdzLWNkay1saWIg44GMIGJ1bmRsZWREZXBlbmRlbmNpZXMg44Go44GX44Gm5ZCM5qKx44GX44Gm44GE44KL44Kz44OU44O844Gr5LmX44KL44CCXG4gKiDvvIjjg4bjgrnjg4jjgYvjgonjgoLliKnnlKjjgZnjgovjgZ/jgoEgZXhwb3J0IOOBl+OBpuOBhOOCi++8iVxuICovXG4vKipcbiAqIOOCqOODs+OCuOODs+OBrueJiOOBq+S+neOCieOBmuODhuODs+ODl+ODrOODvOODiOOCkuipleS+oeOBmeOCi+OAgjEuNy4wLWJldGHjgJwxLjkuMC1iZXRh77yIYXdzLWNkay1saWIgMi4yNjfjgJwyLjI3MCDjga5cbiAqIOWQjOaiseeJiO+8ieOBryB2YWxpZGF0ZURldGFpbGVkIOOBoOOBkeOAgTEuMTAuMCDjga8gdmFsaWRhdGVUZW1wbGF0ZSDjgaDjgZHvvIjmlLnlkI3vvInjgIExLjExLjAg5Lul6ZmN44Gv5Lih5pa544KSXG4gKiDmjIHjgaHjgIExLjEyLjEg44GnIHZhbGlkYXRlRGV0YWlsZWQg44Gv6Z2e5o6o5aWo44Gu5Yil5ZCN44Gr44Gq44Gj44Gf44CC44Os44Od44O844OI44Gu5b2i77yIZGlhZ25vc3RpY3Mg44GuXG4gKiBydWxlSWQvc2V2ZXJpdHkvc291cmNlL3Byb3BlcnR5UGF0aC9lbnRpdHkubG9naWNhbElk77yJ44Gv5Lih6ICF44Gn5ZCM44GY77yI5a6f5risIDIwMjYtMDktMjjjgIFcbiAqIDEuNy4wLWJldGEgLyAxLjEwLjAgLyAxLjEyLjEg44GnIGZhaWwg44OG44Oz44OX44Os44O844OIIDQwMCDmnKzjga4gQ1VTVE9NIOiouuaWreOBjOWujOWFqOS4gOiHtO+8ieOAglxuICog5YWI44Gr5raI44GI44KL44Gu44Gv6Z2e5o6o5aWo44Gu5YG044Gq44Gu44GnIHZhbGlkYXRlVGVtcGxhdGUg44KS5YSq5YWI44GZ44KL44CCXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRlbXBsYXRlKGVuZzogYW55LCB0ZW1wbGF0ZTogdW5rbm93biwgY29uZmlnOiBvYmplY3QpOiBhbnkge1xuICBjb25zdCBmbiA9IGVuZy52YWxpZGF0ZVRlbXBsYXRlID8/IGVuZy52YWxpZGF0ZURldGFpbGVkO1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdAYXdzL2Nsb3VkZm9ybWF0aW9uLXZhbGlkYXRlIGhhcyBuZWl0aGVyIHZhbGlkYXRlVGVtcGxhdGUgbm9yIHZhbGlkYXRlRGV0YWlsZWQnKTtcbiAgfVxuICByZXR1cm4gZm4uY2FsbChlbmcsIHRlbXBsYXRlLCBjb25maWcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEVuZ2luZSgpOiBhbnkgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiByZXF1aXJlKCdAYXdzL2Nsb3VkZm9ybWF0aW9uLXZhbGlkYXRlJyk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIGZhbGwgdGhyb3VnaFxuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgbGliUGtnID0gcmVxdWlyZS5yZXNvbHZlKCdhd3MtY2RrLWxpYi9wYWNrYWdlLmpzb24nKTtcbiAgICBjb25zdCBlbmdQa2cgPSByZXF1aXJlLnJlc29sdmUoJ0Bhd3MvY2xvdWRmb3JtYXRpb24tdmFsaWRhdGUvcGFja2FnZS5qc29uJywge1xuICAgICAgcGF0aHM6IFtwYXRoLmRpcm5hbWUobGliUGtnKV0sXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcXVpcmUocGF0aC5kaXJuYW1lKGVuZ1BrZykpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
525
+ /**
526
+ * loadEngine() が載せるのと同じエンジンの版。解決順も同じにしてある。読めなければ undefined。
527
+ * (テストからも利用するため export している)
528
+ */
529
+ function engineVersion() {
530
+ try {
531
+ return require('@aws/cloudformation-validate/package.json').version;
532
+ }
533
+ catch {
534
+ // fall through
535
+ }
536
+ try {
537
+ const libPkg = require.resolve('aws-cdk-lib/package.json');
538
+ return require(require.resolve('@aws/cloudformation-validate/package.json', {
539
+ paths: [path.dirname(libPkg)],
540
+ })).version;
541
+ }
542
+ catch {
543
+ return undefined;
544
+ }
545
+ }
546
+ /**
547
+ * semver の大小(a < b で負)。プレリリース(`1.9.0-beta`)は同じ版の正式リリースより小さい。
548
+ * 読めない形なら undefined。
549
+ * ponytail: プレリリース同士は文字列で比べる(エンジンは `-beta` しか出していない)。
550
+ */
551
+ function compareVersions(a, b) {
552
+ const parse = (v) => /^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$/.exec(v);
553
+ const pa = parse(a);
554
+ const pb = parse(b);
555
+ if (!pa || !pb)
556
+ return undefined;
557
+ for (let i = 1; i <= 3; i++) {
558
+ const d = Number(pa[i]) - Number(pb[i]);
559
+ if (d !== 0)
560
+ return d;
561
+ }
562
+ if (pa[4] === pb[4])
563
+ return 0;
564
+ if (pa[4] === undefined)
565
+ return 1;
566
+ if (pb[4] === undefined)
567
+ return -1;
568
+ return pa[4] < pb[4] ? -1 : 1;
569
+ }
570
+ /**
571
+ * このエンジンが自力で止める制約のルールか(meta.yaml#supersededBy)。版が読めなければ false
572
+ * =省かない(重複が出るだけで、見逃しは起きない側に倒す)。
573
+ */
574
+ function isSuperseded(rule, version) {
575
+ if (!rule.supersededBy || version === undefined)
576
+ return false;
577
+ return (compareVersions(version, rule.supersededBy.engine) ?? -1) >= 0;
578
+ }
579
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5mb3JjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcml2YXRlL2VuZm9yY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUNBLDBEQU1DO0FBR0QsOENBRUM7QUFNRCw0Q0FFQztBQTZMRCxnREFpQkM7QUF1REQsd0NBaUJDO0FBYUQsc0NBUUM7QUEyQ0Qsa0RBY0M7QUFpQkQsNENBVUM7QUFRRCxzREFtQkM7QUFZRCxzQkFRQztBQWVELDRDQU1DO0FBRUQsZ0NBZUM7QUFNRCxzQ0FjQztBQU9ELDBDQWFDO0FBTUQsb0NBR0M7QUF6akJELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsNkNBT3FCO0FBRXJCLHdEQUF3RTtBQUV4RSwwREFBMEQ7QUFDMUQ7OERBQzhEO0FBRTlEOzs7R0FHRztBQUNVLFFBQUEsc0JBQXNCLEdBQUcsd0JBQXdCLENBQUM7QUFFL0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsTUFBYyxFQUFFLFNBQWtCO0lBQ3hFLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdkcsT0FBTztRQUNMLElBQUksRUFBRSw4QkFBc0I7UUFDNUIsT0FBTyxFQUFFLCtEQUErRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sRUFBRTtLQUM3RyxDQUFDO0FBQ0osQ0FBQztBQUVELHlGQUF5RjtBQUN6RixTQUFnQixpQkFBaUIsQ0FBQyxTQUE2QjtJQUM3RCxPQUFPLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFn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QUFTO1FBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNuQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBQyxJQUFxQixFQUFFLE9BQTJCO0lBQzdFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLE9BQU8sS0FBSyxTQUFTO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDOUQsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7XG4gIEFwcCxcbiAgQ2xvdWRGb3JtYXRpb25WYWxpZGF0ZVBsdWdpbixcbiAgdHlwZSBJUG9saWN5VmFsaWRhdGlvbkNvbnRleHQsXG4gIHR5cGUgSVBvbGljeVZhbGlkYXRpb25QbHVnaW4sXG4gIHR5cGUgUG9saWN5VmFsaWRhdGlvblBsdWdpblJlcG9ydCxcbiAgdHlwZSBQb2xpY3lWaW9sYXRpb24sXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQlVORExFRF9MSUJTLCB0eXBlIEJ1bmRsZWRSdWxlRGF0YSB9IGZyb20gJy4uL3J1bGVzLmdlbmVyYXRlZCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAtLSBAYXdzL2Nsb3VkZm9ybWF0aW9uLXZhbGlkYXRlIOOBr1xuICAgYXdzLWNkay1saWIg5ZCM5qKx44Kz44OU44O844KS5YuV55qE6Kej5rG644GZ44KL6Kit6KiI77yI5L6d5a2Y44Gr44Gv6LyJ44Gb44Gq44GE77yJ44CCUkVBRE1FL0FHRU5UUy5tZCDlj4LnhacgKi9cblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIFJlZ28gbW9kdWxlIHRoYXQgY2FycmllcyB0aGUgZGVwbG95bWVudFxuICogZW52aXJvbm1lbnQgaW50byBydWxlIGV2YWx1YXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBERVBMT1lfRU5WX01PRFVMRV9OQU1FID0gJ19wZl9kZXBsb3lfZW52aXJvbm1lbnQnO1xuXG4vKipcbiAqIEJ1aWxkIHRoZSBnZW5lcmF0ZWQgbW9kdWxlIGRlZmluaW5nIGBkZXBsb3lfcmVnaW9uYCBmb3IgdGhlIHJ1bGUgcGFja2FnZS5cbiAqXG4gKiBSdWxlcyBtdXN0IHJlYWQgaXQgYXMgYGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uYCAobmV2ZXIgYXMgYSBiYXJlXG4gKiB2YXJpYWJsZSk6IHRoZSBkYXRhIHJlZmVyZW5jZSBpcyBzaW1wbHkgdW5kZWZpbmVkIHdoZW4gdGhlIG1vZHVsZSBpcyBub3RcbiAqIGluamVjdGVkIOKAlCB0aGUgcnVsZSBib2R5IGZhaWxzIGFuZCB0aGUgcnVsZSBza2lwcyDigJQgd2hpbGUgYSBiYXJlIHZhcmlhYmxlXG4gKiB3b3VsZCBiZSBhIGNvbXBpbGUgZXJyb3IuIEluamVjdGVkIGJ5IHRoZSBlbmZvcmNlIHBsdWdpbiB3aGVuIHRoZSBhcHAtbGV2ZWxcbiAqIHJlZ2lvbiBpcyBjb25jcmV0ZTsgdGhlIHdhcm4gbW9kZSAoQ0RLIGJ1aWx0LWluIHBsdWdpbikgbmV2ZXIgaW5qZWN0cyBpdCxcbiAqIHNvIHJlZ2lvbi1kZXBlbmRlbnQgcnVsZXMgb25seSBmaXJlIGluIGVuZm9yY2UgbW9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcGxveUVudmlyb25tZW50TW9kdWxlKHJlZ2lvbjogc3RyaW5nLCBhY2NvdW50SWQ/OiBzdHJpbmcpOiB7IG5hbWU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0ge1xuICBjb25zdCBhY2NvdW50ID0gaXNDb25jcmV0ZUFjY291bnQoYWNjb3VudElkKSA/IGBkZXBsb3lfYWNjb3VudCA6PSAke0pTT04uc3RyaW5naWZ5KGFjY291bnRJZCl9XFxuYCA6ICcnO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IERFUExPWV9FTlZfTU9EVUxFX05BTUUsXG4gICAgY29udGVudDogYHBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuZGVwbG95X3JlZ2lvbiA6PSAke0pTT04uc3RyaW5naWZ5KHJlZ2lvbil9XFxuJHthY2NvdW50fWAsXG4gIH07XG59XG5cbi8qKiBXaGV0aGVyIHRoZSBhY2NvdW50IGZyb20gdGhlIHZhbGlkYXRpb24gY29udGV4dCBpcyBhIGNvbmNyZXRlIDEyLWRpZ2l0IGFjY291bnQgaWQuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb25jcmV0ZUFjY291bnQoYWNjb3VudElkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBhY2NvdW50SWQgaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiBhY2NvdW50SWQgPT09ICdzdHJpbmcnICYmIC9eXFxkezEyfSQvLnRlc3QoYWNjb3VudElkKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSByZWdpb24gZnJvbSB0aGUgdmFsaWRhdGlvbiBjb250ZXh0IGlzIGEgY29uY3JldGUgcmVnaW9uIG5hbWVcbiAqIChhcyBvcHBvc2VkIHRvIHVuZGVmaW5lZCwgYW4gdW5yZXNvbHZlZCB0b2tlbiwgb3IgYSBwbGFjZWhvbGRlcikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbmNyZXRlUmVnaW9uKHJlZ2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogcmVnaW9uIGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgcmVnaW9uID09PSAnc3RyaW5nJyAmJiAvXlthLXpdezJ9KC1bYS16XSspKy1cXGQrJC8udGVzdChyZWdpb24pO1xufVxuXG5pbnRlcmZhY2UgRW5naW5lRGlhZ25vc3RpYyB7XG4gIHJlYWRvbmx5IHJ1bGVJZDogc3RyaW5nO1xuICByZWFkb25seSBzZXZlcml0eTogc3RyaW5nO1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNvdXJjZT86IHN0cmluZztcbiAgcmVhZG9ubHkgZW50aXR5PzogeyByZWFkb25seSBsb2dpY2FsSWQ/OiBzdHJpbmcgfTtcbiAgcmVhZG9ubHkgcHJvcGVydHlQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBkb2N1bWVudGF0aW9uVXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIGVuZm9yY2Ug44Oi44O844OJ55So44Gu5YaF6YOo44OX44Op44Kw44Kk44Oz44CCXG4gKlxuICogQ0RLIOe1hOOBv+i+vOOBv+OBriBDbG91ZEZvcm1hdGlvblZhbGlkYXRlUGx1Z2luIOOBr+WFqCBmaW5kaW5nIOOCkiB3YXJuaW5nIOOBq+S4uOOCgeOCi+OBn+OCgVxuICog77yIYXdzLWNkay1saWIgMi4yNjcuMCDlrp/muKzjgIHmmIfmoLzjg5Xjg6njgrDjgoLnhKHlirnvvInjgIHlkIzjgZjjgqjjg7Pjgrjjg7PjgpLnm7TmjqXlkbzjgbPjgIFcbiAqIGNkay1wcmVmbGlnaHQg44Gu44Or44O844Or6YGV5Y+N77yI44GK44KI44GzIHN0cmljdCDmmYLjga/jgqjjg7Pjgrjjg7Pjga7jgqjjg6njg7zjgq/jg6njgrnvvInjgpJcbiAqIHBvbGljeSB2YWxpZGF0aW9uIOOBruWkseaVl+OBqOOBl+OBpuWgseWRiuOBl+OBpiBzeW50aCDjgpLmraLjgoHjgovjgIJcbiAqL1xuZXhwb3J0IGNsYXNzIFByZWZsaWdodEVuZm9yY2VQbHVnaW4gaW1wbGVtZW50cyBJUG9saWN5VmFsaWRhdGlvblBsdWdpbiB7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lID0gUExVR0lOX05BTUU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBydWxlczogQnVuZGxlZFJ1bGVEYXRhW10sXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdHJpY3Q6IGJvb2xlYW4sXG4gICkge31cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udGV4dDogSVBvbGljeVZhbGlkYXRpb25Db250ZXh0KTogUG9saWN5VmFsaWRhdGlvblBsdWdpblJlcG9ydCB7XG4gICAgY29uc3QgZW5naW5lID0gbG9hZEVuZ2luZUNhY2hlZCgpO1xuICAgIGlmICghZW5naW5lKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ2Nkay1wcmVmbGlnaHQ6IGNvdWxkIG5vdCByZXNvbHZlIEBhd3MvY2xvdWRmb3JtYXRpb24tdmFsaWRhdGU7ICcgK1xuICAgICAgICAnZW5mb3JjZSBtb2RlIGlzIHVuYXZhaWxhYmxlIGFuZCBubyBwcmVmbGlnaHQgY2hlY2tzIHdlcmUgcnVuLiAnICtcbiAgICAgICAgJ0luc3RhbGwgaXQgYXMgYSBkZXZEZXBlbmRlbmN5IG9yIHVzZSB0aGUgZGVmYXVsdCAod2FybikgbW9kZS4nLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHZpb2xhdGlvbnM6IFtdIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVnaW9uID0gaXNDb25jcmV0ZVJlZ2lvbihjb250ZXh0LnJlZ2lvbikgPyBjb250ZXh0LnJlZ2lvbiA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBhY2NvdW50ID0gaXNDb25jcmV0ZUFjY291bnQoY29udGV4dC5hY2NvdW50SWQpID8gY29udGV4dC5hY2NvdW50SWQgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgb3VycyA9IG5ldyBTZXQodGhpcy5ydWxlcy5tYXAoKHIpID0+IHIuaWQpKTtcbiAgICBjb25zdCB2aW9sYXRpb25zOiBQb2xpY3lWaW9sYXRpb25bXSA9IFtdO1xuXG4gICAgLy8g5YWo44OG44Oz44OX44Os44O844OI44Gu5ZKM6ZuG5ZCI44Gn5YiI44KK6L6844KA44CC44OG44Oz44OX44Os44O844OI44GU44Go44Gr5YiI44KL44Go44Ko44Oz44K444Oz44KS5L2V5bqm44KCXG4gICAgLy8g5L2c44KK55u044GZ44GT44Go44Gr44Gq44KK44CB44Gd44Gh44KJ44Gu44Kz44K544OI44Gu5pa544GM6auY44GP44Gk44GP77yIcmVnb0VuZ2luZUNhY2hlZCDjga7jgrPjg6Hjg7Pjg4jlj4LnhafvvInjgIJcbiAgICBjb25zdCBydWxlcyA9IHBydW5lKHRoaXMucnVsZXMsIHRlbXBsYXRlUmVzb3VyY2VUeXBlcyhjb250ZXh0LnN0YWNrVGVtcGxhdGVzLm1hcCgoc3QpID0+IHN0LnRlbXBsYXRlUGF0aCkpKTtcblxuICAgIC8vIDEg5pys44KC5q6L44KJ44Gq44GEID0g44GT44Gu44Ki44OX44Oq44Gu44Oq44K944O844K544Gr6Zai5L+C44GZ44KL44Or44O844Or44GM54Sh44GE44CC44Ko44Oz44K444Oz44KS57WE44KA5b+F6KaB44KC54Sh44GEXG4gICAgLy8g77yIbGlicyDjgaDjgZHjgpLovInjgZvjgZ/jgqjjg7Pjgrjjg7Pjga8gdmlvbGF0aW9uIOODq+ODvOODq+OCkuaMgeOBn+OBmuOAgeipleS+oeaZguOBq+iQveOBoeOCi++8ieOAglxuICAgIC8vIHN0cmljdCDjga7jgajjgY3jga/ntYTjgb/ovrzjgb/jgqjjg7Pjgrjjg7Pjga4gZmluZGluZ3Mg44KS5ou+44GG5LuV5LqL44GM5q6L44KL44Gu44Gn6YCa5bi444Gp44GK44KK6YCy44KA44CCXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5zdHJpY3QpIHtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHZpb2xhdGlvbnM6IFtdIH07XG4gICAgfVxuXG4gICAgbGV0IGVuZzogYW55O1xuICAgIHRyeSB7XG4gICAgICBlbmcgPSByZWdvRW5naW5lQ2FjaGVkKGVuZ2luZSwgcnVsZXMsIHJlZ2lvbiwgYWNjb3VudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8g44Or44O844Or44OR44OD44Kv44GM44Kz44Oz44OR44Kk44Or44Gn44GN44Gq44GEID0g44Gp44Gu44OG44Oz44OX44Os44O844OI44KC5qSc5p+744Gn44GN44Gq44GE44Gu44Gn44CBXG4gICAgICAvLyDlhajjgrnjgr/jg4Pjgq/jgbbjgpMgdmlvbGF0aW9uIOOCkueri+OBpuOCi++8iDEg5p6a44Ga44Gk44GuIGNhdGNoIOOBq+OBr+WIsOmBlOOBl+OBquOBhO+8ieOAglxuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIHZpb2xhdGlvbnM6IGNvbnRleHQuc3RhY2tUZW1wbGF0ZXMubWFwKChzdCkgPT4gZW5naW5lRXJyb3JWaW9sYXRpb24oc3QsIGUpKSB9O1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3Qgb2YgY29udGV4dC5zdGFja1RlbXBsYXRlcykge1xuICAgICAgbGV0IHJlcG9ydDogYW55O1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVwb3J0ID0gdmFsaWRhdGVUZW1wbGF0ZShlbmcsIG5ldyBlbmdpbmUuVGVtcGxhdGVGaWxlKHN0LnRlbXBsYXRlUGF0aCksIHtcbiAgICAgICAgICBwc2V1ZG9QYXJhbWV0ZXJPdmVycmlkZXM6IHtcbiAgICAgICAgICAgIGFjY291bnRJZDogY29udGV4dC5hY2NvdW50SWQsXG4gICAgICAgICAgICByZWdpb246IGNvbnRleHQucmVnaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8g57WE44G/6L6844G/44Or44O844Or44GvIENESyDntYTjgb/ovrzjgb/jga4gQ2xvdWRGb3JtYXRpb25WYWxpZGF0ZVBsdWdpbiDjgYzlkIzjgZjjg4bjg7Pjg5fjg6zjg7zjg4jjgatcbiAgICAgICAgICAvLyDlr77jgZfjgabml6LjgavotbDjgonjgZvjgabjgYTjgovjgIJzdHJpY3Qg44Gn44Gq44GR44KM44Gw57WQ5p6c44KC5L2/44KP44Ga5o2o44Gm44Gm44GE44KL44Gu44Gn44CB5Li444GU44Go5YiH44KLXG4gICAgICAgICAgLy8g77yI5a6f5risIDcwIOODquOCveODvOOCuSAxIOaemuOBp+WIneWbniAzLjI3cyAtPiAwLjIyc++8ieOAgnN0cmljdCDjga7jgajjgY3jgaDjgZHlv4XopoHjgavjgarjgovjgIJcbiAgICAgICAgICBkaXNhYmxlQnVpbHRpblJ1bGVzOiAhdGhpcy5zdHJpY3QsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0aHJvdyDjgpLlpJbjgavlh7rjgZnjgaggQ0RLIOOBr+OBk+OBruWRvOOBs+WHuuOBl+OCkiBwbHVnaW4gZmFpbHVyZe+8iHZpb2xhdGlvbiDjgrzjg63vvInjgajjgZfjgaZcbiAgICAgICAgLy8g6KiY6Yyy44GZ44KL44Gg44GR44Gr44Gq44KK44CB44GT44GT44G+44Gn44Gr6ZuG44KB44Gf6YGV5Y+N44KC5b6M57aa44OG44Oz44OX44Os44O844OI44Gu6YGV5Y+N44KC5Li444GU44Go5raI44GI44CBXG4gICAgICAgIC8vIOaui+OCi+OBruOBryBgZmFpbGVkOiB1bmRlZmluZWRgIOOBoOOBkeOBq+OBquOCi++8iGlzc3VlICMxNTHvvInjgIJcbiAgICAgICAgLy8gc3ludGgg44KS5q2i44KB44KL44Gu44GvIGluc3RhbGxFbmZvcmNlR2F0ZSDjga7lvbnnm67jgILjgZPjgZPjga/jgIzjganjga7jgrnjgr/jg4Pjgq/jgafkvZXjgYxcbiAgICAgICAgLy8g6LW344GN44Gf44GL44CN44KS44Os44Od44O844OI44Gr5q6L44GX44CB5LuW44K544K/44OD44Kv44Gu44Or44O844Or44KS6LWw44KJ44Gb57aa44GR44KL44Gf44KB44Gu44KC44Gu44CCXG4gICAgICAgIHZpb2xhdGlvbnMucHVzaChlbmdpbmVFcnJvclZpb2xhdGlvbihzdCwgZSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZCBvZiAocmVwb3J0LmRpYWdub3N0aWNzID8/IFtdKSBhcyBFbmdpbmVEaWFnbm9zdGljW10pIHtcbiAgICAgICAgY29uc3QgaXNPdXJzID0gZC5zb3VyY2UgPT09ICdDVVNUT00nICYmIG91cnMuaGFzKGQucnVsZUlkKTtcbiAgICAgICAgY29uc3QgaXNTdHJpY3RIaXQgPSB0aGlzLnN0cmljdFxuICAgICAgICAgICYmIGQuc291cmNlICE9PSAnQ1VTVE9NJ1xuICAgICAgICAgICYmIChkLnNldmVyaXR5ID09PSAnRVJST1InIHx8IGQuc2V2ZXJpdHkgPT09ICdGQVRBTCcpO1xuICAgICAgICBpZiAoIWlzT3VycyAmJiAhaXNTdHJpY3RIaXQpIGNvbnRpbnVlO1xuICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgIHJ1bGVOYW1lOiBkLnJ1bGVJZCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZC5tZXNzYWdlLFxuICAgICAgICAgIHNldmVyaXR5OiBtYXBTZXZlcml0eShkLnNldmVyaXR5KSxcbiAgICAgICAgICB2aW9sYXRpbmdSZXNvdXJjZXM6IFt7XG4gICAgICAgICAgICByZXNvdXJjZUxvZ2ljYWxJZDogZC5lbnRpdHk/LmxvZ2ljYWxJZCA/PyAnKHVua25vd24pJyxcbiAgICAgICAgICAgIHRlbXBsYXRlUGF0aDogc3QudGVtcGxhdGVQYXRoLFxuICAgICAgICAgICAgbG9jYXRpb25zOiBbZC5wcm9wZXJ0eVBhdGggPz8gJyh0ZW1wbGF0ZSknXSxcbiAgICAgICAgICB9XSxcbiAgICAgICAgICAuLi4oZC5kb2N1bWVudGF0aW9uVXJsID8geyBydWxlTWV0YWRhdGE6IHsgRG9jdW1lbnRhdGlvblVybDogZC5kb2N1bWVudGF0aW9uVXJsIH0gfSA6IHt9KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ0RLIOe1hOOBv+i+vOOBv+OBriBDbG91ZEZvcm1hdGlvblZhbGlkYXRlUGx1Z2luIOOBqOWQjOOBmOWIpOWumuOAgndhcm5pbmcg44Gg44GR44Gq44KJXG4gICAgLy8g44Os44Od44O844OI44Gr44Gv6LyJ44KL44GM5ZCI5oiQ44Gv6YCa44KL77yIQ0xJIOWBtOOBryBzdWNjZXNzL2ZhaWx1cmUg44Gr6Zai44KP44KJ44Ga5b+F44Ga5Ye65Yqb44GZ44KL77yJ44CCXG4gICAgcmV0dXJuIHsgc3VjY2VzczogdmlvbGF0aW9ucy5ldmVyeSgodikgPT4gIUJMT0NLU19TWU5USC5oYXMoU3RyaW5nKHYuc2V2ZXJpdHkpKSksIHZpb2xhdGlvbnMgfTtcbiAgfVxufVxuXG4vKiog5ZCI5oiQ44KS5q2i44KB44KLIHZpb2xhdGlvbiBzZXZlcml0eeOAgiAqL1xuY29uc3QgQkxPQ0tTX1NZTlRIID0gbmV3IFNldChbJ2Vycm9yJywgJ2ZhdGFsJ10pO1xuXG4vKipcbiAqIOOCqOODs+OCuOODs+OBriBzZXZlcml0eSDjgpIgcG9saWN5IHZhbGlkYXRpb24g44GuIHNldmVyaXR5IOOBq+WGmeOBmeOAguihqOOBryBhd3MtY2RrLWxpYiAyLjI2Ny4wIOOBrlxuICogQ2xvdWRGb3JtYXRpb25WYWxpZGF0ZVBsdWdpbiDjgajlkIzkuIDjgIJgcmVwcm8ubWV0aG9kOiBkb2Mtb25seWAg44Gu44Or44O844Or44GvIFdBUk4g44KS5Ye644GZ44Gu44GnXG4gKiB3YXJuaW5nIOOBq+OBquOCiuOAgeWgseWRiuOBr+OBleOCjOOCi+OBjCBzeW50aCDjga/mraLjgoHjgarjgYTvvIjoqLzmi6DjgYzlrp/mqZ/jga7jg4fjg5fjg63jgqTlpLHmlZfjgafjga/jgarjgYTjgZ/jgoHvvInjgIJcbiAqL1xuZnVuY3Rpb24gbWFwU2V2ZXJpdHkoc2V2ZXJpdHk6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHN3aXRjaCAoc2V2ZXJpdHkpIHtcbiAgICBjYXNlICdGQVRBTCc6XG4gICAgY2FzZSAnRVJST1InOlxuICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgY2FzZSAnV0FSTic6XG4gICAgICByZXR1cm4gJ3dhcm5pbmcnO1xuICAgIGNhc2UgJ0lORk8nOlxuICAgICAgcmV0dXJuICdpbmZvcm1hdGlvbmFsJztcbiAgICBjYXNlICdERUJVRyc6XG4gICAgICByZXR1cm4gJ2RlYnVnJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICd3YXJuaW5nJztcbiAgfVxufVxuXG4vKipcbiAqIOODq+ODvOODq+ipleS+oeOBneOBruOCguOBruOBjOWkseaVl+OBl+OBn+OBk+OBqOOCkuihqOOBmSB2aW9sYXRpb24g44GuIHJ1bGVOYW1l44CCXG4gKiDjg5Djg7Pjg4njg6vmuIjjgb/jg6vjg7zjg6vjga4gaWQg44Gn44Gv44Gq44GE44Gu44GnIGBleGNsdWRlYCDjgafjga/mtojjgZvjgarjgYTvvIjmtojjgZfjgabjgojjgYTnirbmhYvjgafjga/jgarjgYTvvInjgIJcbiAqL1xuZXhwb3J0IGNvbnN0IEVOR0lORV9FUlJPUl9SVUxFID0gJ3BmLWVuZ2luZS1lcnJvcic7XG5cbi8qKiDjgqjjg7Pjgrjjg7PjgYzmipXjgZLjgZ/lgKTjgpLjg6Hjg4Pjgrvjg7zjgrjjgavokL3jgajjgZnjgILjgqjjg7Pjgrjjg7Pjga8gRXJyb3Ig44Gn44Gv44Gq44GP57Sg44Gu5paH5a2X5YiX44KS5oqV44GS44KL44GT44Go44GM44GC44KL44CCICovXG5mdW5jdGlvbiBlbmdpbmVFcnJvclRleHQoZTogdW5rbm93bik6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSAoZSBhcyB7IG1lc3NhZ2U/OiB1bmtub3duIH0gfCB1bmRlZmluZWQpPy5tZXNzYWdlO1xuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2UubGVuZ3RoID4gMCA/IG1lc3NhZ2UgOiBTdHJpbmcoZSk7XG59XG5cbi8qKiAxIOaemuOBruODhuODs+ODl+ODrOODvOODiOOCkuaknOafu+OBp+OBjeOBquOBi+OBo+OBn+OBk+OBqOOCkiB2aW9sYXRpb24g44Go44GX44Gm5aCx5ZGK44GZ44KL44CCICovXG5mdW5jdGlvbiBlbmdpbmVFcnJvclZpb2xhdGlvbihzdDogeyBzdGFja0NvbnN0cnVjdFBhdGg6IHN0cmluZzsgdGVtcGxhdGVQYXRoOiBzdHJpbmcgfSwgZTogdW5rbm93bik6IFBvbGljeVZpb2xhdGlvbiB7XG4gIHJldHVybiB7XG4gICAgcnVsZU5hbWU6IEVOR0lORV9FUlJPUl9SVUxFLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ2Nkay1wcmVmbGlnaHQgY291bGQgbm90IGV2YWx1YXRlIGl0cyBydWxlcyBmb3IgdGhpcyB0ZW1wbGF0ZSwgc28gbm8gcHJlZmxpZ2h0IHJ1bGUgcmFuIGZvciBpdDogJ1xuICAgICAgKyBlbmdpbmVFcnJvclRleHQoZSksXG4gICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgZml4OiAnUmVwb3J0IHRoaXMgYXQgaHR0cHM6Ly9naXRodWIuY29tL2JhZG1pbnRvbmNyeWVyL2Nkay1wcmVmbGlnaHQvaXNzdWVzOyAnXG4gICAgICArICd0byB1bmJsb2NrIHRoZSBidWlsZCBtZWFud2hpbGUsIHVzZSBQcmVmbGlnaHQuYXBwbHkoYXBwLCB7IGVuZm9yY2U6IGZhbHNlIH0pLicsXG4gICAgdmlvbGF0aW5nUmVzb3VyY2VzOiBbe1xuICAgICAgY29uc3RydWN0UGF0aDogc3Quc3RhY2tDb25zdHJ1Y3RQYXRoLFxuICAgICAgdGVtcGxhdGVQYXRoOiBzdC50ZW1wbGF0ZVBhdGgsXG4gICAgICBsb2NhdGlvbnM6IFsnKHRlbXBsYXRlKSddLFxuICAgIH1dLFxuICB9O1xufVxuXG4vKiogVGhlIHBsdWdpbiBuYW1lIHJlY29yZGVkIGluIGB2YWxpZGF0aW9uLXJlcG9ydC5qc29uYCBmb3Igb3VyIGZpbmRpbmdzLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9OQU1FID0gJ2Nkay1wcmVmbGlnaHQnO1xuXG4vKiogVGhlIGNsb3VkIGFzc2VtYmx5IGZpbGUgdGhlIENESyB3cml0ZXMgaXRzIHZhbGlkYXRpb24gcmVwb3J0IHRvLiAqL1xuY29uc3QgVkFMSURBVElPTl9SRVBPUlRfRklMRSA9ICd2YWxpZGF0aW9uLXJlcG9ydC5qc29uJztcblxuY29uc3QgR0FURV9JTlNUQUxMRUQgPSBTeW1ib2wuZm9yKCdjZGstcHJlZmxpZ2h0LmVuZm9yY2VHYXRlJyk7XG5cbi8qKlxuICogZW5mb3JjZSDjg6Ljg7zjg4njga7lj5bjgorjgZPjgbzjgZfjgpLloZ7jgZDjgrLjg7zjg4jjgpIgQXBwIOOBq+S7lei+vOOCgOOAglxuICpcbiAqIENESyBDTEkgMi4xMTI4LjEg5Lul6ZmN44GvIGFwcCDjgavjgIzjg6zjg53jg7zjg4jjga8gQ0xJIOOBjOWHpueQhuOBmeOCi+OAjeOBqOS8neOBiOOBn+OBhuOBiOOBp1xuICogYHZhbGlkYXRpb24tcmVwb3J0Lmpzb25gIOOCkuiHquWIhuOBp+iqreOCgOOBjOOAgeOBneOBrue1nuOCiui+vOOBv++8iHRvb2xraXQtbGliIOOBrlxuICogYGZpbHRlclJlcG9ydHNCeVN0YWNrc2DvvInjgYwgdmlvbGF0aW9uIOOBriBjb25zdHJ1Y3RQYXRoIOWFiOmgreOCu+OCsOODoeODs+ODiOOCklxuICog6YG45oqe44K544K/44OD44Kv44GuIGhpZXJhcmNoaWNhbElkIOOBqOeqgeOBjeWQiOOCj+OBm+OCi+OBn+OCgeOAgWBTdGFnZS9TdGFja2Ag5b2i5byP44Gr44Gq44KLXG4gKiBTdGFnZSDlhoXjgrnjgr/jg4Pjgq/jga7pgZXlj43jgYzjgZnjgbnjgabmjajjgabjgonjgozjgIFzeW50aCDjgYzpu5njgaPjgabmiJDlip/jgZnjgovvvIhpc3N1ZSAjMTEz77yJ44CCXG4gKlxuICog44Gd44GT44GnIHN5bnRoIOWujOS6huW+jOOBq+ODrOODneODvOODiOOCkuiqreOBv+ebtOOBl+OAgWNkay1wcmVmbGlnaHQg44Gu6YGV5Y+N44GM5q6L44Gj44Gm44GE44KM44GwXG4gKiDoh6rliIbjgafloLHlkYrjgZfjgaYgc3ludGgg44KS5q2i44KB44KL44CC44Op44Kk44OW44Op44Oq44GM6Ieq5Yqb44Gn5aCx5ZGK44GZ44KL57WM6Lev77yI57Sg44GuIG5vZGUg5a6f6KGM44CBXG4gKiBqZXN044CBQ0xJIDIuMTEyOC4xIOacqua6gO+8ieOBp+OBryBzeW50aCDjgYzkvovlpJbjgpLmipXjgZLjgovjgZ/jgoHjgZPjgZPjgavjga/liLDpgZTjgZvjgZrjgIFcbiAqIOS6jOmHjeWgseWRiuOBr+i1t+OBjeOBquOBhOOAglxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbEVuZm9yY2VHYXRlKHNjb3BlOiBJQ29uc3RydWN0KTogdm9pZCB7XG4gIGNvbnN0IHJvb3QgPSBzY29wZS5ub2RlLnJvb3Q7XG4gIGlmICghQXBwLmlzQXBwKHJvb3QpKSByZXR1cm47XG4gIGNvbnN0IGFwcCA9IHJvb3QgYXMgQXBwICYgeyBbR0FURV9JTlNUQUxMRURdPzogYm9vbGVhbiB9O1xuICBpZiAoYXBwW0dBVEVfSU5TVEFMTEVEXSkgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXBwLCBHQVRFX0lOU1RBTExFRCwgeyB2YWx1ZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG5cbiAgY29uc3Qgc3ludGggPSBhcHAuc3ludGguYmluZChhcHApO1xuICBsZXQgY2hlY2tlZCA9IGZhbHNlO1xuICBhcHAuc3ludGggPSAob3B0aW9ucz86IFBhcmFtZXRlcnM8QXBwWydzeW50aCddPlswXSkgPT4ge1xuICAgIGNvbnN0IGFzc2VtYmx5ID0gc3ludGgob3B0aW9ucyk7XG4gICAgaWYgKCFjaGVja2VkKSB7XG4gICAgICBjaGVja2VkID0gdHJ1ZTtcbiAgICAgIGZhaWxJZlJlcG9ydFVuaGFuZGxlZChhc3NlbWJseS5kaXJlY3RvcnkpO1xuICAgIH1cbiAgICByZXR1cm4gYXNzZW1ibHk7XG4gIH07XG59XG5cbi8qKlxuICog44Os44Od44O844OI44GrIGNkay1wcmVmbGlnaHQg44Gu5aSx5pWX44GM5q6L44Gj44Gm44GE44KM44Gw44CBZmluZGluZ3Mg44KS5Ye65Yqb44GX44GmIHN5bnRoIOOCkuatouOCgeOCi+OAglxuICpcbiAqIOWIpOWumuOBryBjZGstcHJlZmxpZ2h0IOOBruODrOODneODvOODiOOBoOOBkeOCkuimi+OCi+OAgue1hOOBv+i+vOOBv+OCqOODs+OCuOODs+OChCBjb25zdHJ1Y3QgYW5ub3RhdGlvblxuICog44Gg44GR44GM5aSx5pWX44GX44Gm44GE44KL5aC05ZCI44GvIENMSSDjgYzmraPjgZfjgY/mibHjgYjjgovjga7jgafjgIHjgZPjgaHjgonjga/pu5njgaPjgaYgQ0xJIOOBq+S7u+OBm+OCi+OAglxuICog6YCG44Gr55m654Gr44GZ44KL44Go44GN44Gv44Os44Od44O844OI5YWo5L2T44KS5Ye644GZ44CC44GT44GT44GnIHN5bnRoIOOCkuatouOCgeOCi+OBqCBDTEkg5YG044Gu5Ye65Yqb44GMXG4gKiDkuIDliIfotbDjgonjgarjgYTjgZ/jgoHjgIHlkIzmmYLjgavlh7rjgabjgYTjgZ/jga/jgZrjga7ku5bjg5fjg6njgrDjgqTjg7Pjga4gZmluZGluZyDjgYzmtojjgYjjgabjgZfjgb7jgYbjgIJcbiAqL1xuZnVuY3Rpb24gZmFpbElmUmVwb3J0VW5oYW5kbGVkKGRpcmVjdG9yeTogc3RyaW5nKTogdm9pZCB7XG4gIGxldCBwbHVnaW5SZXBvcnRzOiBhbnlbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXBvcnQgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZGlyZWN0b3J5LCBWQUxJREFUSU9OX1JFUE9SVF9GSUxFKSwgJ3V0ZjgnKSk7XG4gICAgcGx1Z2luUmVwb3J0cyA9IHJlcG9ydD8ucGx1Z2luUmVwb3J0cyA/PyBbXTtcbiAgfSBjYXRjaCB7XG4gICAgLy8g44Os44Od44O844OI44GM54Sh44GE77yI44OX44Op44Kw44Kk44Oz5pyq5a6f6KGM77yJ44G+44Gf44Gv5aOK44KM44Gm44GE44KL5aC05ZCI44Gv5L2V44KC44GX44Gq44GEXG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGZhaWxlZCA9IHBsdWdpblJlcG9ydHMuc29tZShcbiAgICAocikgPT4gcj8ucGx1Z2luTmFtZSA9PT0gUExVR0lOX05BTUUgJiYgcj8uY29uY2x1c2lvbiA9PT0gJ2ZhaWx1cmUnLFxuICApO1xuICBpZiAoIWZhaWxlZCkgcmV0dXJuO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUuZXJyb3IoZm9ybWF0UmVwb3J0cyhwbHVnaW5SZXBvcnRzKSk7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAnY2RrLXByZWZsaWdodDogdmFsaWRhdGlvbiBmYWlsZWQuIEZpeCB0aGUgZmluZGluZ3MgYWJvdmUsICcgK1xuICAgIFwiYWNrbm93bGVkZ2UgdGhlbSB3aXRoIFZhbGlkYXRpb25zLm9mKHNjb3BlKS5hY2tub3dsZWRnZSh7IGlkOiAnY2RrLXByZWZsaWdodDo6PHJ1bGUtaWQ+JyB9KSwgXCIgK1xuICAgICdvciBleGNsdWRlIHRoZSBydWxlIHZpYSBQcmVmbGlnaHQuYXBwbHkoYXBwLCB7IGV4Y2x1ZGU6IFsuLi5dIH0pLicsXG4gICk7XG59XG5cbi8qKlxuICogQ0RLIOacrOS9k+OBruODleOCqeODvOODnuODg+OCv+OBp+aVtOW9ouOBl+OAgUNMSSDjgajlkIzkuIDjga7opovjgZ/nm67jgavjgZnjgovjgIJcbiAqIOengeacieODkeOCueOBquOBruOBp+ino+axuuOBp+OBjeOBquOBhOOBk+OBqOOBjOOBguOCiuOAgeOBneOBruWgtOWQiOOBr+acgOWwj+mZkOOBruiHquWJjeaVtOW9ouOBq+iQveOBqOOBmVxuICog77yI6KaL44Gf55uu44KI44KK44CM6JC944Go44GZ44CN44GT44Go44KS5YSq5YWI44GZ44KL77yJ44CCXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFJlcG9ydHMocGx1Z2luUmVwb3J0czogYW55W10pOiBzdHJpbmcge1xuICBjb25zdCBmb3JtYXR0ZXIgPSBsb2FkRm9ybWF0dGVyQ2FjaGVkKCk7XG4gIGlmIChmb3JtYXR0ZXIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXRWYWxpZGF0aW9uUmVwb3J0cyhwcm9jZXNzLmN3ZCgpLCBwbHVnaW5SZXBvcnRzKS5qb2luKCdcXG5cXG4nKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGZhbGwgdGhyb3VnaFxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsbGJhY2tGb3JtYXQocGx1Z2luUmVwb3J0cyk7XG59XG5cbi8qKlxuICogQ0RLIOacrOS9k+OBruODleOCqeODvOODnuODg+OCv+OCkuino+axuuOBp+OBjeOBquOBhOOBqOOBjeOBruacgOWwj+mZkOOBruaVtOW9ouOAglxuICog6KaL44Gf55uu44Gv5Yqj44KL44GM44CBZmluZGluZ3Mg44KS5b+F44Ga6Kqt44KB44KL5b2i44Gn5Ye644GZ44Gf44KB44Gu5pyA5b6M44Gu56Cm44CCXG4gKiDvvIjjg4bjgrnjg4jjgYvjgonjgoLliKnnlKjjgZnjgovjgZ/jgoEgZXhwb3J0IOOBl+OBpuOBhOOCi++8iVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFsbGJhY2tGb3JtYXQocGx1Z2luUmVwb3J0czogYW55W10pOiBzdHJpbmcge1xuICBjb25zdCBibG9ja3M6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcmVwb3J0IG9mIHBsdWdpblJlcG9ydHMpIHtcbiAgICBmb3IgKGNvbnN0IHZpb2xhdGlvbiBvZiByZXBvcnQ/LnZpb2xhdGlvbnMgPz8gW10pIHtcbiAgICAgIGNvbnN0IGFja0lkID0gU3RyaW5nKHZpb2xhdGlvbi5ydWxlTmFtZSkuaW5jbHVkZXMoJzo6JylcbiAgICAgICAgPyB2aW9sYXRpb24ucnVsZU5hbWVcbiAgICAgICAgOiBgJHtyZXBvcnQucGx1Z2luTmFtZX06OiR7dmlvbGF0aW9uLnJ1bGVOYW1lfWA7XG4gICAgICBmb3IgKGNvbnN0IGMgb2YgdmlvbGF0aW9uLnZpb2xhdGluZ0NvbnN0cnVjdHMgPz8gW10pIHtcbiAgICAgICAgYmxvY2tzLnB1c2goXG4gICAgICAgICAgYCR7U3RyaW5nKHZpb2xhdGlvbi5zZXZlcml0eSA/PyAnRVJST1InKS50b1VwcGVyQ2FzZSgpfSAke3Zpb2xhdGlvbi5kZXNjcmlwdGlvbn0gKCR7cmVwb3J0LnBsdWdpbk5hbWV9KVxcbmAgK1xuICAgICAgICAgIGAgICAke2MuY29uc3RydWN0UGF0aH0gKCR7Yy5jbG91ZEZvcm1hdGlvblJlc291cmNlPy5sb2dpY2FsSWR9KSAke2MuY29uc3RydWN0RnFufVxcbmAgK1xuICAgICAgICAgIGAgICBBY2tub3dsZWRnZSB3aXRoICcke1N0cmluZyhhY2tJZCkucmVwbGFjZSgvIC9nLCAnLScpfSdgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYmxvY2tzLmpvaW4oJ1xcblxcbicpO1xufVxuXG4vLyDjg5Xjgqnjg7zjg57jg4Pjgr/jga8gYXdzLWNkay1saWIg44Gu56eB5pyJ44OR44K544Gr44GC44KKIGBleHBvcnRzYCDjgYvjgonopovjgYjjgarjgYTjgZ/jgoHjgIFcbi8vIOOCqOODs+OCuOODs+ino+axuu+8iGxvYWRFbmdpbmXvvInjgajlkIzjgZjjgY/jg5Hjg4PjgrHjg7zjgrjjg6vjg7zjg4jjgYvjgonjga7ntbblr77jg5Hjgrnjgafoqq3jgb/ovrzjgoDjgIJcbmxldCBjYWNoZWRGb3JtYXR0ZXI6IGFueSB8IGZhbHNlIHwgdW5kZWZpbmVkO1xuZnVuY3Rpb24gbG9hZEZvcm1hdHRlckNhY2hlZCgpOiBhbnkgfCB1bmRlZmluZWQge1xuICBpZiAoY2FjaGVkRm9ybWF0dGVyID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWNoZWRGb3JtYXR0ZXIgPSBsb2FkRm9ybWF0dGVyKCkgPz8gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGNhY2hlZEZvcm1hdHRlciA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBjYWNoZWRGb3JtYXR0ZXI7XG59XG5cbi8qKiDvvIjjg4bjgrnjg4jjgYvjgonjgoLliKnnlKjjgZnjgovjgZ/jgoEgZXhwb3J0IOOBl+OBpuOBhOOCi++8iSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGb3JtYXR0ZXIoKTogYW55IHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBsaWJSb290ID0gcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZSgnYXdzLWNkay1saWIvcGFja2FnZS5qc29uJykpO1xuICAgIGNvbnN0IG1vZCA9IHJlcXVpcmUocGF0aC5qb2luKGxpYlJvb3QsICdjb3JlL2xpYi92YWxpZGF0aW9uL3ByaXZhdGUvbW9kZXJuLWZvcm1hdHRlci5qcycpKTtcbiAgICByZXR1cm4gdHlwZW9mIG1vZD8uZm9ybWF0VmFsaWRhdGlvblJlcG9ydHMgPT09ICdmdW5jdGlvbicgPyBtb2QgOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLy8g44Ko44Oz44K444Oz77yIV0FTTe+8ieOBruWIneacn+WMluOBr+mHjeOBhOOBn+OCgeOAgeODouOCuOODpeODvOODq+ODrOODmeODq+OBp+OCreODo+ODg+OCt+ODpeOBmeOCi1xubGV0IGNhY2hlZEVuZ2luZU1vZHVsZTogYW55IHwgZmFsc2UgfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBsb2FkRW5naW5lQ2FjaGVkKCk6IGFueSB8IHVuZGVmaW5lZCB7XG4gIGlmIChjYWNoZWRFbmdpbmVNb2R1bGUgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlZEVuZ2luZU1vZHVsZSA9IGxvYWRFbmdpbmUoKSA/PyBmYWxzZTtcbiAgfVxuICByZXR1cm4gY2FjaGVkRW5naW5lTW9kdWxlID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IGNhY2hlZEVuZ2luZU1vZHVsZTtcbn1cblxuLy8g44Ko44Oz44K444Oz77yIV0FTTe+8ieOBryAxIOODl+ODreOCu+OCueOBqyAxIOOBpOOBoOOBkeeUn+OBi+OBmeOAguS9nOOCiuebtOOBmeWJjeOBqyBmcmVlKCkg44GX44Gq44GE44Go44Kk44Oz44K544K/44Oz44K544GMXG4vLyDnqY3jgb/kuIrjgYzjgorjgIEyIOWAi+ebruS7pemZjeOBruani+evieOBjOi2hee3muW9ouOBq+mBheOBj+OBquOCi++8iOWun+a4rDogZnJlZSDnhKHjgZfjgacgMy44cyAtPiAxMS4ycyAtPiAyMi4xc+OAgVxuLy8g5qeL56+J5YmN44GrIGZyZWUg44GZ44KL44GoIDMuNXMgLT4gMC40c++8ieOAguODq+ODvOODq+OCu+ODg+ODiOOBjOWkieOCj+OCi++8iFN0YWdlIOOBlOOBqOOBqyBleGNsdWRlIOOBjOmBleOBhuOAgVxuLy8g44OG44K544OI44Gn6KSH5pWw44Ki44OX44Oq44KS5ZCI5oiQ44GZ44KL77yJ44Gf44Gz44Gr5L2c44KK55u044GZ44Gu44Gn44CB44Kt44Oj44OD44K344Ol44GvIDEg44K544Ot44OD44OI44Gn6Laz44KK44KL44CCXG5sZXQgY2FjaGVkUmVnb0VuZ2luZTogeyBrZXk6IHN0cmluZzsgZW5naW5lOiBhbnkgfSB8IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIHJlZ29FbmdpbmVDYWNoZWQoZW5naW5lTW9kdWxlOiBhbnksIHJ1bGVzOiBCdW5kbGVkUnVsZURhdGFbXSwgcmVnaW9uPzogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nKTogYW55IHtcbiAgY29uc3Qga2V5ID0gYCR7cmVnaW9uID8/ICcnfXwke2FjY291bnQgPz8gJyd9fCR7cnVsZXMubWFwKChyKSA9PiByLmlkKS5qb2luKCcsJyl9YDtcbiAgaWYgKGNhY2hlZFJlZ29FbmdpbmU/LmtleSAhPT0ga2V5KSB7XG4gICAgY2FjaGVkUmVnb0VuZ2luZT8uZW5naW5lPy5mcmVlPy4oKTtcbiAgICBjYWNoZWRSZWdvRW5naW5lID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGN1c3RvbVJ1bGVzID0gW1xuICAgICAgLi4uQlVORExFRF9MSUJTLm1hcCgobCkgPT4gKHsgbmFtZTogbC5uYW1lLCBjb250ZW50OiBsLnJlZ28gfSkpLFxuICAgICAgLi4ubWVyZ2VSdWxlTW9kdWxlcyhydWxlcyksXG4gICAgXTtcbiAgICBpZiAocmVnaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGN1c3RvbVJ1bGVzLnB1c2goZGVwbG95RW52aXJvbm1lbnRNb2R1bGUocmVnaW9uLCBhY2NvdW50KSk7XG4gICAgfVxuICAgIGNhY2hlZFJlZ29FbmdpbmUgPSB7IGtleSwgZW5naW5lOiBuZXcgZW5naW5lTW9kdWxlLlJlZ29FbmdpbmUoeyBjdXN0b21SdWxlcyB9KSB9O1xuICB9XG4gIHJldHVybiBjYWNoZWRSZWdvRW5naW5lLmVuZ2luZTtcbn1cblxuLy8g6Kaz5ris44Oi44O844OJ77yIZW5mb3JjZTogZmFsc2XvvInjga8gQ0RLIOe1hOOBv+i+vOOBv+OBriBDbG91ZEZvcm1hdGlvblZhbGlkYXRlUGx1Z2luIOOBq+ebuOS5l+OCiuOBmeOCi+OAglxuLy8g44GC44Gh44KJ44Gv44Kz44Oz44K544OI44Op44Kv44K/44Gn44Ko44Oz44K444Oz44KSIDEg44Gk5L2c44Gj44GmIGZyZWUoKSDjgZfjgarjgYTjga7jgafjgIHlkIzjgZjjg5fjg63jgrvjgrnjgacgQXBwIOOCklxuLy8g5L2c44KK55u044GZ44Gf44Gz44Gr44Kk44Oz44K544K/44Oz44K544GM56mN44G/5LiK44GM44KK44CBcmVnb0VuZ2luZUNhY2hlZCDjgajlkIzjgZjotoXnt5rlvaLjga7mgqrljJbjgpLotbfjgZPjgZlcbi8vIO+8iOWun+a4rCAyMDI2LTA5LTEzOiDlkIzjgZjjg6vjg7zjg6vjgrvjg4Pjg4jjgacgNCDlm54gc3ludGgg44GX44GmIDM2cyAtPiA5NXMgLT4gMTMxcyAtPiAxNzhz77yJ44CCXG4vLyDjg6vjg7zjg6vjgrvjg4Pjg4jjgYzlpInjgo/jgonjgarjgYTpmZDjgorjg5fjg6njgrDjgqTjg7PjgZTjgajkvb/jgYTlm57jgZnjgIJcbi8vIHBvbnl0YWlsOiDjgq3jg7zjgYzlpInjgo/jgaPjgZ/jgajjgY3jgavlj6TjgYTjgqjjg7Pjgrjjg7Pjga8gZnJlZSgpIOOBl+OBquOBhO+8iOOCqOODs+OCuOODs+OBryBDREsg5YG044GuXG4vLyBwcml2YXRlIOODleOCo+ODvOODq+ODieOBp+OAgeinpuOCi+OBq+OBr+WGhemDqOWun+ijheOBq+aJi+OCkuWFpeOCjOOCi+OBk+OBqOOBq+OBquOCi++8ieOAguioreWumumBleOBhOOBriBTdGFnZSDjgYxcbi8vIE4g5YCL44GC44KM44GwIE4g5YCL56mN44KA44GM44CB5a6f44Ki44OX44Oq44Gn44GvIDHjgJwyIOWAi+OAguepjeOBv+S4iuOBjOOCiuOBjOWVj+mhjOOBq+OBquOCi+OBquOCieOAgeOBneOBruOBqOOBjeOBq1xuLy8g44Ki44OD44OX44K544OI44Oq44O844Og44G4IGZyZWUvZGlzcG9zZSDjgpLlhaXjgozjgabjgoLjgonjgYbjgIJcbmxldCBjYWNoZWRPYnNlcnZlUGx1Z2luOiB7IGtleTogc3RyaW5nOyBwbHVnaW46IENsb3VkRm9ybWF0aW9uVmFsaWRhdGVQbHVnaW4gfSB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlUGx1Z2luQ2FjaGVkKHJ1bGVzOiBCdW5kbGVkUnVsZURhdGFbXSk6IENsb3VkRm9ybWF0aW9uVmFsaWRhdGVQbHVnaW4ge1xuICBjb25zdCBrZXkgPSBydWxlcy5tYXAoKHIpID0+IHIuaWQpLmpvaW4oJywnKTtcbiAgaWYgKGNhY2hlZE9ic2VydmVQbHVnaW4/LmtleSAhPT0ga2V5KSB7XG4gICAgY2FjaGVkT2JzZXJ2ZVBsdWdpbiA9IHtcbiAgICAgIGtleSxcbiAgICAgIHBsdWdpbjogbmV3IENsb3VkRm9ybWF0aW9uVmFsaWRhdGVQbHVnaW4oe1xuICAgICAgICByZWdvUnVsZXM6IFtcbiAgICAgICAgICAuLi5CVU5ETEVEX0xJQlMubWFwKChsKSA9PiAoeyBuYW1lOiBsLm5hbWUsIGNvbnRlbnQ6IGwucmVnbyB9KSksXG4gICAgICAgICAgLi4ubWVyZ2VSdWxlTW9kdWxlcyhydWxlcyksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG4gIHJldHVybiBjYWNoZWRPYnNlcnZlUGx1Z2luLnBsdWdpbjtcbn1cblxuLyoqIOWFqOODq+ODvOODq+OBq+WFsemAmuOBriByZWdvIOODmOODg+ODgOOAgmJ1bmRsZS1ydWxlcyDjgYwgcGFja2FnZSDlkI3jgaggaW1wb3J0IOOCkiAxIOeorumhnuOBq+W8t+WItuOBl+OBpuOBhOOCi+OAgiAqL1xuY29uc3QgUkVHT19IRUFERVIgPSAncGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG4nO1xuXG4vKipcbiAqIOODq+ODvOODq+OCkiBzZXJ2aWNlIOOBlOOBqOOBqyAxIOODouOCuOODpeODvOODq+OBuOOBvuOBqOOCgeOCi+OAglxuICpcbiAqIOOCs+ODs+ODkeOCpOODq+aZgumWk+OBr+ODq+ODvOODq+acrOS9k+OBrumHj+OCiOOCiuODouOCuOODpeODvOODq+aVsOOBp+WKueOBhOOBpuOBj+OCi++8iOWun+a4rCAxODQ0IOODq+ODvOODq+OCklxuICogMSDjg6vjg7zjg6sgMSDjg6Ljgrjjg6Xjg7zjg6vjgafovInjgZvjgovjgajntIQgNi4yc+OAgXNlcnZpY2Ug5Y2Y5L2N44GuIDM5IOODouOCuOODpeODvOODq+OBq+eVs+OCgOOBqOe0hCAxLjBz77yJ44CCXG4gKiDjg6vjg7zjg6vjga/jgoLjgajjgoLjgajlhajpg6ggYHBhY2thZ2UgY2RrX3ByZWZsaWdodGAg44Gq44Gu44Gn44CBUmVnbyDjgYvjgonopovjgozjgbDntZDlkIjjgZfjgabjgoJcbiAqIOOBl+OBquOBj+OBpuOCguWQjOOBmCAxIOODkeODg+OCseODvOOCuOKAlOKAlOODouOCuOODpeODvOODq+Wig+eVjOOBq+aEj+WRs+irluOBr+eEoeOBhOOAguOBl+OBn+OBjOOBo+OBpueVs+OCgeOCi+OBruOBoOOBjOOAgVxuICog6KOP44KS6L+U44Gb44Gw44CM5Yil44Or44O844Or44GM5ZCM44GY5ZCN5YmN44Gu44OY44Or44OR44O844KS5a6a576p44GZ44KL44Go6buZ44Gj44GmIDEg44Gk44Gu6KaP5YmH44Gr5ZCI5rWB44GZ44KL44CNXG4gKiDjgajjgYTjgYbljbHpmbrjgoLntZDlkIjliY3jgYvjgonlrZjlnKjjgZnjgovjgIJidW5kbGUtcnVsZXMg44GM44Or44O844Or6ZaT44Gu44OI44OD44OX44Os44OZ44Or5ZCN6KGd56qB44KSXG4gKiDlvL7jgYTjgabjgYTjgovjga7jga/jgZ3jga7jgZ/jgoHvvIjlhbHmnInjgZfjgZ/jgYTlrprnvqnjga8gcnVsZXMvX2xpYi8g44Gr572u44GP77yJ44CCXG4gKiDvvIjjg4bjgrnjg4jjgYvjgonjgoLliKnnlKjjgZnjgovjgZ/jgoEgZXhwb3J0IOOBl+OBpuOBhOOCi++8iVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VSdWxlTW9kdWxlcyhydWxlczogQnVuZGxlZFJ1bGVEYXRhW10pOiB7IG5hbWU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH1bXSB7XG4gIGNvbnN0IGJ5U2VydmljZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgZm9yIChjb25zdCByIG9mIHJ1bGVzKSB7XG4gICAgY29uc3QgYm9keSA9IHIucmVnby5yZXBsYWNlKC9eKD86cGFja2FnZXxpbXBvcnQpXFxzLipcXG4vZ20sICcnKTtcbiAgICBieVNlcnZpY2Uuc2V0KHIuc2VydmljZSwgWy4uLmJ5U2VydmljZS5nZXQoci5zZXJ2aWNlKSA/PyBbXSwgYm9keV0pO1xuICB9XG4gIHJldHVybiBbLi4uYnlTZXJ2aWNlXS5tYXAoKFtzZXJ2aWNlLCBib2RpZXNdKSA9PiAoe1xuICAgIG5hbWU6IGBfcGZfc2VydmljZV8ke3NlcnZpY2V9YCxcbiAgICBjb250ZW50OiBSRUdPX0hFQURFUiArIGJvZGllcy5qb2luKCdcXG4nKSxcbiAgfSkpO1xufVxuXG4vKipcbiAqIOODhuODs+ODl+ODrOODvOODiOe+pOOBq+WHuuOBpuOBj+OCi+ODquOCveODvOOCueOCv+OCpOODl+OAguWIiOOCiui+vOOBv+OBq+S9v+OBiOOBquOBhOODhuODs+ODl+ODrOODvOODiOOBjCAxIOaemuOBp+OCguOBguOCjOOBsFxuICogdW5kZWZpbmVkIOOCkui/lOOBl+OAgeWIiOOCiui+vOOBv+OBneOBruOCguOBruOCkuirpuOCgeOCi++8iOS9leOBjOi8ieOBo+OBpuOBhOOCi+OBi+WIhuOBi+OCieOBquOBhOOBvuOBvuiQveOBqOOBmeOBqOOAgVxuICog44Or44O844Or44GM6buZ44Gj44Gm55m654Gr44GX44Gq44GP44Gq44KLID0gZW5mb3JjZSDjgavjgajjgaPjgabmnIDmgqrjga7lo4rjgozmlrnjgavjgarjgovjgZ/jgoHvvInjgIJcbiAqIO+8iOODhuOCueODiOOBi+OCieOCguWIqeeUqOOBmeOCi+OBn+OCgSBleHBvcnQg44GX44Gm44GE44KL77yJXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW1wbGF0ZVJlc291cmNlVHlwZXModGVtcGxhdGVQYXRoczogc3RyaW5nW10pOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHR5cGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgdGVtcGxhdGVQYXRoIG9mIHRlbXBsYXRlUGF0aHMpIHtcbiAgICBsZXQgdGVtcGxhdGU6IGFueTtcbiAgICB0cnkge1xuICAgICAgdGVtcGxhdGUgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyh0ZW1wbGF0ZVBhdGgsICd1dGY4JykpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gVHJhbnNmb3Jt77yIU0FNIOetie+8ieOBr+ODnuOCr+ODreWxlemWi+OBp+WIpeOBruODquOCveODvOOCueOBq+WMluOBkeOCi+OBruOBp+OAgeeUn+OBruODhuODs+ODl+ODrOODvOODiOOBi+OCiVxuICAgIC8vIOiqreOCgeOCi+ODquOCveODvOOCueOCv+OCpOODl+OBr+W9k+OBpuOBq+OBquOCieOBquOBhOOAglxuICAgIGlmICh0ZW1wbGF0ZT8uVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBPYmplY3QudmFsdWVzKHRlbXBsYXRlPy5SZXNvdXJjZXMgPz8ge30pIGFzIGFueVtdKSB7XG4gICAgICAvLyBGbjo6Rm9yRWFjaCDjgarjganjgacgVHlwZSDjgYzpnZnnmoTjgavoqq3jgoHjgarjgYTjgqjjg7Pjg4jjg6rjgYzjgYLjgozjgbDoq6bjgoHjgovjgIJcbiAgICAgIGlmICh0eXBlb2YgcmVzb3VyY2U/LlR5cGUgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgdHlwZXMuYWRkKHJlc291cmNlLlR5cGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHlwZXM7XG59XG5cbi8qKlxuICog44OG44Oz44OX44Os44O844OI44Gr5Ye644Gm44GP44KL44Oq44K944O844K544K/44Kk44OX44Gr6Zai5L+C44GZ44KL44Or44O844Or44Gg44GR44KS6YG444G244CCXG4gKlxuICog44Ko44Oz44K444Oz44Gu44Kz44Oz44OR44Kk44Or5pmC6ZaT44Gv44Or44O844Or5pWw44Gn44G744G85rG644G+44KL44Gu44Gn77yI5a6f5risIDE4NDQg44Or44O844Or44Gn57SEIDQuNnPjgIFcbiAqIOWFuOWei+eahOOBquOCouODl+ODquOBq+aui+OCiyAxMDAg44Or44O844Or5YmN5b6M44Gq44KJIDAuOHMg5YmN5b6M77yJ44CB44GT44KM44GM5Zu65a6a6LK744Gu5Li744Gq5YmK44KK44Gp44GT44KN44CCXG4gKiDlronlhajmgKfjga8gbWV0YS5yZXNvdXJjZVR5cGVzIOOBruWuo+iogOOBq+S5l+OBo+OBpuOBhOOCizog44Or44O844Or44GM6KaL44KL44Oq44K944O844K544K/44Kk44OX44GMXG4gKiDlrqPoqIDjgYvjgonmvI/jgozjgabjgYTjgovjgajliIjjgonjgozjgabnmbrngavjgZfjgarjgY/jgarjgovjgZ/jgoHjgIF0ZXN0L3J1bGVzLnRlc3QudHMg44GM5YWo44Or44O844Or44Gr44Gk44GE44GmXG4gKiDjgIzoh6rliIbjga4gZmFpbCDjg4bjg7Pjg5fjg6zjg7zjg4jjgafliIjjgormrovjgovjgZPjgajjgI3jgpLmpJzmn7vjgZfjgabjgYTjgovjgIJcbiAqIO+8iOODhuOCueODiOOBi+OCieOCguWIqeeUqOOBmeOCi+OBn+OCgSBleHBvcnQg44GX44Gm44GE44KL77yJXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShydWxlczogQnVuZGxlZFJ1bGVEYXRhW10sIHR5cGVzOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCk6IEJ1bmRsZWRSdWxlRGF0YVtdIHtcbiAgaWYgKHR5cGVzID09PSB1bmRlZmluZWQpIHJldHVybiBydWxlcztcbiAgLy8g5YiI44KL5qC55oug44GM54Sh44GE44Or44O844Or44Gv5q6L44GZOiBcIipcIu+8iOWFqOODquOCveODvOOCueWei+OBq+WKueOBj+OCv+OCsOezu+ODq+ODvOODq++8ieOBqOOAgVxuICAvLyByZXNvdXJjZVR5cGVzIOOBjOepuuOBruOCguOBru+8iOODkOODs+ODieODq+a4iOOBv+ODq+ODvOODq+OBr+mdnuepuuOBjOS/neiovOOBleOCjOOBpuOBhOOCi+OBruOBp+OAgeipsuW9k+OBmeOCi+OBruOBr1xuICAvLyDmiYvjgafntYTjgb/nq4vjgabjgZ/jg6vjg7zjg6sgPSDjg4bjgrnjg4jjgoTlsIbmnaXjga7jg4bjg7Pjg5fjg6zjg7zjg4jlsaTjg6vjg7zjg6vjgaDjgZHvvInjgIJcbiAgcmV0dXJuIHJ1bGVzLmZpbHRlcigocikgPT4gci5yZXNvdXJjZVR5cGVzLmxlbmd0aCA9PT0gMFxuICAgIHx8IHIucmVzb3VyY2VUeXBlcy5pbmNsdWRlcygnKicpXG4gICAgfHwgci5yZXNvdXJjZVR5cGVzLnNvbWUoKHQpID0+IHR5cGVzLmhhcyh0KSkpO1xufVxuXG4vKipcbiAqIEBhd3MvY2xvdWRmb3JtYXRpb24tdmFsaWRhdGUg44KS6Kej5rG644GZ44KL44CCXG4gKiDpgJrluLjjga8gYXdzLWNkay1saWIg44GMIGJ1bmRsZWREZXBlbmRlbmNpZXMg44Go44GX44Gm5ZCM5qKx44GX44Gm44GE44KL44Kz44OU44O844Gr5LmX44KL44CCXG4gKiDvvIjjg4bjgrnjg4jjgYvjgonjgoLliKnnlKjjgZnjgovjgZ/jgoEgZXhwb3J0IOOBl+OBpuOBhOOCi++8iVxuICovXG4vKipcbiAqIOOCqOODs+OCuOODs+OBrueJiOOBq+S+neOCieOBmuODhuODs+ODl+ODrOODvOODiOOCkuipleS+oeOBmeOCi+OAgjEuNy4wLWJldGHjgJwxLjkuMC1iZXRh77yIYXdzLWNkay1saWIgMi4yNjfjgJwyLjI3MCDjga5cbiAqIOWQjOaiseeJiO+8ieOBryB2YWxpZGF0ZURldGFpbGVkIOOBoOOBkeOAgTEuMTAuMCDjga8gdmFsaWRhdGVUZW1wbGF0ZSDjgaDjgZHvvIjmlLnlkI3vvInjgIExLjExLjAg5Lul6ZmN44Gv5Lih5pa544KSXG4gKiDmjIHjgaHjgIExLjEyLjEg44GnIHZhbGlkYXRlRGV0YWlsZWQg44Gv6Z2e5o6o5aWo44Gu5Yil5ZCN44Gr44Gq44Gj44Gf44CC44Os44Od44O844OI44Gu5b2i77yIZGlhZ25vc3RpY3Mg44GuXG4gKiBydWxlSWQvc2V2ZXJpdHkvc291cmNlL3Byb3BlcnR5UGF0aC9lbnRpdHkubG9naWNhbElk77yJ44Gv5Lih6ICF44Gn5ZCM44GY77yI5a6f5risIDIwMjYtMDktMjjjgIFcbiAqIDEuNy4wLWJldGEgLyAxLjEwLjAgLyAxLjEyLjEg44GnIGZhaWwg44OG44Oz44OX44Os44O844OIIDQwMCDmnKzjga4gQ1VTVE9NIOiouuaWreOBjOWujOWFqOS4gOiHtO+8ieOAglxuICog5YWI44Gr5raI44GI44KL44Gu44Gv6Z2e5o6o5aWo44Gu5YG044Gq44Gu44GnIHZhbGlkYXRlVGVtcGxhdGUg44KS5YSq5YWI44GZ44KL44CCXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRlbXBsYXRlKGVuZzogYW55LCB0ZW1wbGF0ZTogdW5rbm93biwgY29uZmlnOiBvYmplY3QpOiBhbnkge1xuICBjb25zdCBmbiA9IGVuZy52YWxpZGF0ZVRlbXBsYXRlID8/IGVuZy52YWxpZGF0ZURldGFpbGVkO1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdAYXdzL2Nsb3VkZm9ybWF0aW9uLXZhbGlkYXRlIGhhcyBuZWl0aGVyIHZhbGlkYXRlVGVtcGxhdGUgbm9yIHZhbGlkYXRlRGV0YWlsZWQnKTtcbiAgfVxuICByZXR1cm4gZm4uY2FsbChlbmcsIHRlbXBsYXRlLCBjb25maWcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEVuZ2luZSgpOiBhbnkgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiByZXF1aXJlKCdAYXdzL2Nsb3VkZm9ybWF0aW9uLXZhbGlkYXRlJyk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIGZhbGwgdGhyb3VnaFxuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgbGliUGtnID0gcmVxdWlyZS5yZXNvbHZlKCdhd3MtY2RrLWxpYi9wYWNrYWdlLmpzb24nKTtcbiAgICBjb25zdCBlbmdQa2cgPSByZXF1aXJlLnJlc29sdmUoJ0Bhd3MvY2xvdWRmb3JtYXRpb24tdmFsaWRhdGUvcGFja2FnZS5qc29uJywge1xuICAgICAgcGF0aHM6IFtwYXRoLmRpcm5hbWUobGliUGtnKV0sXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcXVpcmUocGF0aC5kaXJuYW1lKGVuZ1BrZykpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogbG9hZEVuZ2luZSgpIOOBjOi8ieOBm+OCi+OBruOBqOWQjOOBmOOCqOODs+OCuOODs+OBrueJiOOAguino+axuumghuOCguWQjOOBmOOBq+OBl+OBpuOBguOCi+OAguiqreOCgeOBquOBkeOCjOOBsCB1bmRlZmluZWTjgIJcbiAqIO+8iOODhuOCueODiOOBi+OCieOCguWIqeeUqOOBmeOCi+OBn+OCgSBleHBvcnQg44GX44Gm44GE44KL77yJXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmdpbmVWZXJzaW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJ0Bhd3MvY2xvdWRmb3JtYXRpb24tdmFsaWRhdGUvcGFja2FnZS5qc29uJykudmVyc2lvbjtcbiAgfSBjYXRjaCB7XG4gICAgLy8gZmFsbCB0aHJvdWdoXG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBsaWJQa2cgPSByZXF1aXJlLnJlc29sdmUoJ2F3cy1jZGstbGliL3BhY2thZ2UuanNvbicpO1xuICAgIHJldHVybiByZXF1aXJlKHJlcXVpcmUucmVzb2x2ZSgnQGF3cy9jbG91ZGZvcm1hdGlvbi12YWxpZGF0ZS9wYWNrYWdlLmpzb24nLCB7XG4gICAgICBwYXRoczogW3BhdGguZGlybmFtZShsaWJQa2cpXSxcbiAgICB9KSkudmVyc2lvbjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIHNlbXZlciDjga7lpKflsI/vvIhhIDwgYiDjgafosqDvvInjgILjg5fjg6zjg6rjg6rjg7zjgrnvvIhgMS45LjAtYmV0YWDvvInjga/lkIzjgZjniYjjga7mraPlvI/jg6rjg6rjg7zjgrnjgojjgorlsI/jgZXjgYTjgIJcbiAqIOiqreOCgeOBquOBhOW9ouOBquOCiSB1bmRlZmluZWTjgIJcbiAqIHBvbnl0YWlsOiDjg5fjg6zjg6rjg6rjg7zjgrnlkIzlo6vjga/mloflrZfliJfjgafmr5TjgbnjgovvvIjjgqjjg7Pjgrjjg7Pjga8gYC1iZXRhYCDjgZfjgYvlh7rjgZfjgabjgYTjgarjgYTvvInjgIJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyhhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhcnNlID0gKHY6IHN0cmluZykgPT4gL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoPzotKC4rKSk/JC8uZXhlYyh2KTtcbiAgY29uc3QgcGEgPSBwYXJzZShhKTtcbiAgY29uc3QgcGIgPSBwYXJzZShiKTtcbiAgaWYgKCFwYSB8fCAhcGIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGkgPSAxOyBpIDw9IDM7IGkrKykge1xuICAgIGNvbnN0IGQgPSBOdW1iZXIocGFbaV0pIC0gTnVtYmVyKHBiW2ldKTtcbiAgICBpZiAoZCAhPT0gMCkgcmV0dXJuIGQ7XG4gIH1cbiAgaWYgKHBhWzRdID09PSBwYls0XSkgcmV0dXJuIDA7XG4gIGlmIChwYVs0XSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMTtcbiAgaWYgKHBiWzRdID09PSB1bmRlZmluZWQpIHJldHVybiAtMTtcbiAgcmV0dXJuIHBhWzRdIDwgcGJbNF0gPyAtMSA6IDE7XG59XG5cbi8qKlxuICog44GT44Gu44Ko44Oz44K444Oz44GM6Ieq5Yqb44Gn5q2i44KB44KL5Yi257SE44Gu44Or44O844Or44GL77yIbWV0YS55YW1sI3N1cGVyc2VkZWRCee+8ieOAgueJiOOBjOiqreOCgeOBquOBkeOCjOOBsCBmYWxzZVxuICog77yd55yB44GL44Gq44GE77yI6YeN6KSH44GM5Ye644KL44Gg44GR44Gn44CB6KaL6YCD44GX44Gv6LW344GN44Gq44GE5YG044Gr5YCS44GZ77yJ44CCXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N1cGVyc2VkZWQocnVsZTogQnVuZGxlZFJ1bGVEYXRhLCB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgaWYgKCFydWxlLnN1cGVyc2VkZWRCeSB8fCB2ZXJzaW9uID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIChjb21wYXJlVmVyc2lvbnModmVyc2lvbiwgcnVsZS5zdXBlcnNlZGVkQnkuZW5naW5lKSA/PyAtMSkgPj0gMDtcbn1cbiJdfQ==
@@ -6,6 +6,12 @@ export interface BundledRuleData {
6
6
  readonly upstream: string;
7
7
  readonly resourceTypes: string[];
8
8
  readonly fixtureRegion?: string;
9
+ /** The bundled engine blocks this rule's constraint by itself from `engine` on (bundled in aws-cdk-lib >= `cdk`). */
10
+ readonly supersededBy?: {
11
+ readonly engine: string;
12
+ readonly cdk: string;
13
+ readonly engineRules: string[];
14
+ };
9
15
  readonly rego: string;
10
16
  }
11
17
  export declare const BUNDLED_RULES: BundledRuleData[];