turbo-gulp
Version:
Gulp tasks to boost high-quality projects.
400 lines (399 loc) • 52.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DEFAULT_UNTYPED_TSLINT_RULES = {
// Enforces function overloads to be consecutive.
"adjacent-overload-signatures": true,
// Enforces vertical alignment
"align": false,
// Requires using either ‘T[]’ or ‘Array' for arrays
"array-type": [true, "array"],
// Requires parentheses around the parameters of arrow function definitions
"arrow-parens": [
true,
// Arrow functions with one parameter must not have parentheses if removing them is allowed by TypeScript.
"ban-single-arg-parens",
],
// Suggests to convert `() => { return x; }` to `() => x`.
"arrow-return-shorthand": true,
// Bans the use of specific functions or global methods
"ban": [
true,
],
// Bans specific types from being used.
"ban-types": false,
// In a binary expression, a literal should always be on the right-hand side if possible.
"binary-expression-operand-order": false,
// An interface or literal type with just a call signature can be written as a function type.
"callable-types": true,
// Enforces PascalCased class and interface names
"class-name": true,
// Enforces formatting rules for single-line comments
"comment-format": [
true,
// Requires that all single-line comments must begin with a space, as in `// comment`
"check-space",
],
// Enforces a threshold of cyclomatic complexity
"cyclomatic-complexity": [true, 30],
// Enforces braces for `if`/`for`/`do`/`while` statements
"curly": true,
// Ensures the file ends with a newline
"eofline": true,
// Enforces UTF-8 file encoding.
"encoding": true,
// Enforces a certain header comment for all files, matched by a regular expression
"file-header": false,
// Requires a `for ... in` statement to be filtered with an `if` statement
"forin": false,
// Disallows importing the specified modules directly via `import` and `require`.
"import-blacklist": false,
// Ensures proper spacing between import statement keywords.
"import-spacing": true,
// Enforces indentation with tabs or spaces
"indent": [true, "spaces"],
// Requires interface names to begin with a capital ‘I’
"interface-name": [
true,
// requires interface names to not have an “I” prefix
"never-prefix",
],
// Prefer an interface declaration over a type literal (`type T = { ... }`)
"interface-over-type-literal": true,
// Enforces basic format rules for JSDoc comments
"jsdoc-format": true,
// Only allows labels in sensible locations
"label-position": true,
// Enforces a consistent linebreak style
"linebreak-style": [true, "LF"],
// A file may not contain more than the specified number of classes
"max-classes-per-file": [true, 5],
// Requires files to remain under a certain number of lines
"max-file-line-count": [true, 800],
// Requires lines to be under a certain max length
"max-line-length": [true, 120],
// Requires explicit visibility declarations for class members
"member-access": false,
// Enforces member ordering
"member-ordering": [
true,
{
order: "fields-first",
},
],
// Enforces blank line before return when not the only line in the block.
"newline-before-return": false,
// Requires parentheses when invoking a constructor via the `new` keyword.
"new-parens": false,
// Requires the use of `as Type` for type assertions instead of `<Type>`.
"no-angle-bracket-type-assertion": false,
// Diallows usages of `any` as a type declaration.
"no-any": false,
// Disallows access to arguments.callee.
"no-arg": true,
// Disallows bitwise operators.
"no-bitwise": false,
// Disallows any type of assignment in conditionals.
"no-conditional-assignment": true,
// Disallows one or more blank lines in a row.
"no-consecutive-blank-lines": [true, 1],
// Bans the use of specified console methods.
"no-console": false,
// Disallows access to the constructors of `String`, `Number`, and `Boolean`.
"no-construct": true,
// Disallows `debugger` statements.
"no-debugger": true,
// Disallows default exports in ES6-style modules.
"no-default-export": true,
// Disallows multiple import statements from the same module.
"no-duplicate-imports": false,
// Warns if `super()` appears twice in a constructor.
"no-duplicate-super": true,
// Prevents duplicate cases in switch statements.
"no-duplicate-switch-case": true,
// Disallows duplicate variable declarations in the same block scope.
"no-duplicate-variable": true,
// Disallows empty blocks.
"no-empty": false,
// Forbids empty interfaces.
"no-empty-interface": false,
// Disallows `eval` function invocations.
"no-eval": true,
// Disallows importing modules that are not listed as dependency in the project’s package.json
"no-implicit-dependencies": [true, "dev", "optional"],
// Avoid import statements with side-effect.
"no-import-side-effect": false,
// Disallows explicit type declarations for variables or parameters initialized to a number,
// string, or boolean.
"no-inferrable-types": false,
// Disallows internal `module`.
"no-internal-module": true,
// Warns on use of `${` in non-template strings.
"no-invalid-template-strings": true,
// Disallows using the `this` keyword outside of classes.
"no-invalid-this": false,
// Disallows irregular whitespace outside of strings and comments
"no-irregular-whitespace": true,
// Disallows the use constant number values outside of variable assignments.
"no-magic-numbers": false,
// Disallows mergeable namespaces in the same file.
"no-mergeable-namespace": false,
// Disallows use of internal `module`s and `namespace`s.
"no-namespace": false,
// Warns on apparent attempts to define constructors for interfaces or `new` for classes.
"no-misused-new": true,
// Disallows non-null assertions.
"no-non-null-assertion": false,
// Disallows use of the `null` keyword literal.
"no-null-keyword": false,
// Forbids an object literal to appear in a type assertion expression. Casting to `any` is still allowed.
"no-object-literal-type-assertion": false,
// Disallows parameter properties in class constructors.
"no-parameter-properties": true,
// Disallows reassigning parameters.
"no-parameter-reassignment": false,
// Disallows `/// <reference path=>` imports (use ES6-style imports instead).
"no-reference": true,
// Disallows invocation of `require()`.
"no-require-imports": true,
// Disallows unnecessary `return await`.
"no-return-await": true,
// Disallows shadowing variable declarations.
"no-shadowed-variable": false,
// Forbids array literals to contain missing elements.
"no-sparse-arrays": true,
// Disallows object access via string literals.
"no-string-literal": false,
// Flags throwing plain strings or concatenations of strings.
"no-string-throw": true,
// Disallows importing any submodule.
"no-submodule-imports": false,
// Disallows falling through case statements.
"no-switch-case-fall-through": true,
// Disallows unnecessary references to `this`.
"no-this-assignment": [true, { "allow-destructuring": true }],
// Disallows trailing whitespace at the end of a line.
"no-trailing-whitespace": true,
// Replaces `x => f(x)` with just `f`.
"no-unnecessary-callback-wrapper": true,
// Forbids a ‘var’/’let’ statement or destructuring initializer to be initialized to ‘undefined’.
"no-unnecessary-initializer": false,
// Disallows control flow statements, such as return, continue, break and throws in finally
// blocks.
"no-unsafe-finally": true,
// Disallows unused expression statements.
"no-unused-expression": true,
// Disallows usage of the `var` keyword.
"no-var-keyword": true,
// Disallows the use of require statements except in import statements.
"no-var-requires": true,
// Checks that decimal literals should begin with `0.` instead of just `.`, and should not end with a trailing `0`.
// TODO: Enable it when the option to enforce lowercase hex is available
"number-literal-format": false,
// Enforces consistent object literal property quote style.
"object-literal-key-quotes": [true, "consistent-as-needed"],
// Enforces use of ES6 object literal shorthand when possible.
"object-literal-shorthand": true,
// Requires keys in object literals to be sorted alphabetically.
"object-literal-sort-keys": false,
// Requires the specified tokens to be on the same line as the expression preceding them.
"one-line": [
true,
// Checks that `catch` is on the same line as the closing brace for `try`.
"check-catch",
// Checks that `finally` is on the same line as the closing brace for `catch`.
"check-finally",
// Checks that `else` is on the same line as the closing brace for `if`.
"check-else",
// Checks that an open brace falls on the same line as its preceding expression.
"check-open-brace",
// Checks preceding whitespace for the specified tokens.
"check-whitespace",
],
// Disallows multiple variable definitions in the same declaration statement.
"one-variable-per-declaration": [true, "ignore-for-loop"],
// Disallows traditional (non-arrow) function expressions.
"only-arrow-functions": false,
// Requires that import statements be alphabetized.
"ordered-imports": true,
// Recommends to use a conditional expression instead of assigning to the same thing in each branch of an if
// statement.
"prefer-conditional-expression": false,
// Requires that variable declarations use const instead of let if possible.
"prefer-const": true,
// Recommends a ‘for-of’ loop over a standard ‘for’ loop if the index is only used to access
// the array being iterated.
"prefer-for-of": true,
// Warns for class methods that do not use `this`.
"prefer-function-over-method": false,
// Prefer `foo(): void` over `foo: () => void` in interfaces and types.
"prefer-method-signature": true,
// Enforces the use of the ES2015 object spread operator over `Object.assign()` where appropriate.
"prefer-object-spread": true,
// Prefer a `switch` statement to an `if` statement with simple `===` comparisons.
"prefer-switch": true,
// Prefer a template expression over string literal concatenation.
"prefer-template": [true, "allow-single-concat"],
// Requires single or double quotes for string literals.
"quotemark": [
true,
// Enforces double quotes.
"double",
// Forbids single-line untagged template strings that do not contain string interpolations.
"avoid-template",
// Allows you to use the “other” quotemark in cases where escaping would normally be required.
"avoid-escape",
],
// Requires the radix parameter to be specified when calling `parseInt`.
"radix": true,
// Enforces consistent semicolon usage at the end of every statement.
"semicolon": [true, "always"],
// Require or disallow a space before function parenthesis
"space-before-function-paren": [
true,
{
anonymous: "always",
named: "never",
asyncArrow: "always",
method: "never",
constructor: "never",
},
],
// Enforces spaces within parentheses or disallow them.
"space-within-parens": [true, 0],
// Requires a `default` case in all `switch` statements.
"switch-default": true,
// Checks whether the final clause of a switch statement ends in `break;`.
"switch-final-break": [true, "always"],
// Requires or disallows trailing commas in array and object literals, destructuring
// assignments, function and tuple typings, named imports and function parameters.
"trailing-comma": [
true,
{
// Checks multi-line object literals.
multiline: "always",
// Checks single-line object literals.
singleline: "never",
},
],
// Requires `===` and `!==` in place of `==` and `!=`.
"triple-equals": true,
// Checks that type literal members are separated by semicolons. Enforces a trailing semicolon for multiline type
// literals.
"type-literal-delimiter": true,
// Requires type definitions to exist.
"typedef": [
true,
// Check return types of interface properties.
"property-declaration",
// Check variable declarations.
"variable-declaration",
// Check member variable declarations.
"member-variable-declaration",
],
// Requires or disallows whitespace for type definitions.
"typedef-whitespace": [
true,
// Specifies how much space should be to the _left_ of a typedef colon.
{
"call-signature": "nospace",
"index-signature": "nospace",
"parameter": "nospace",
"property-declaration": "nospace",
"variable-declaration": "nospace",
},
// Specifies how much space should be to the _right_ of a typedef colon.
{
"call-signature": "onespace",
"index-signature": "onespace",
"parameter": "onespace",
"property-declaration": "onespace",
"variable-declaration": "onespace",
},
],
// Makes sure result of `typeof` is compared to correct string values.
"typeof-compare": true,
// Warns for any two overloads that could be unified into one by using a union or an optional/rest parameter.
"unified-signatures": true,
// Enforces use of the `isNaN()` function to check for NaN references instead of a comparison
// to the `NaN` constant.
"use-isnan": true,
// Checks variable names for various errors.
"variable-name": [true, "check-format", "allow-leading-underscore"],
// Enforces whitespace style conventions.
"whitespace": [
true,
// Checks branching statements (`if`/`else`/f`or`/`while`) are followed by whitespace.
"check-branch",
// Checks that variable declarations have whitespace around the equals token.
"check-decl",
// Checks for whitespace around operator tokens.
"check-operator",
// Checks for whitespace in import & export statements.
"check-module",
// Checks for whitespace after separator tokens (`,`/`;`).
"check-separator",
// Checks that there is no whitespace after rest/spread operator (`...`).
"check-rest-spread",
// Checks for whitespace before a variable type specification.
"check-type",
// Checks for whitespace between a typecast and its target.
"check-typecast",
// Checks for whitespace between type operators `|` and `&`.
"check-type-operator",
// Checks for whitespace before the opening brace of a block.
"check-preblock",
],
};
exports.DEFAULT_TYPED_TSLINT_RULES = Object.assign({}, exports.DEFAULT_UNTYPED_TSLINT_RULES, {
// Warns for an awaited value that is not a Promise.
"await-promise": true,
// Enforces documentation for important items be filled out.
"completed-docs": [true, ["classes", "functions"]],
// Warns when deprecated APIs are used.
"deprecation": true,
// Requires that a default import have the same name as the declaration it imports. Does nothing for anonymous
// default exports.
"match-default-export-name": false,
// Warns on comparison to a boolean literal, as in `x === true`.
"no-boolean-literal-compare": true,
// Promises returned by functions must be handled appropriately.
"no-floating-promises": true,
// Disallows iterating over an array with a for-in loop.
"no-for-in-array": true,
// Disallow type inference of `{}` (empty object type) at function and constructor call sites.
"no-inferred-empty-object-type": false,
// Warns when a method is used as outside of a method call.
"no-unbound-method": false,
// Warns when using an expression of type `any` in a dynamic way.
"no-unsafe-any": false,
// Warns when a namespace qualifier (`A.x`) is unnecessary.
"no-unnecessary-qualifier": true,
// Warns if a type assertion does not change the type of an expression.
"no-unnecessary-type-assertion": false,
// Disallows unused imports, variables, functions and private class members.
"no-unused-variable": false,
// Disallows usage of variables before their declaration.
"no-use-before-declare": true,
// Requires expressions of type void to appear in statement position.
"no-void-expression": true,
// Requires any function or method that returns a promise to be marked async.
"promise-function-async": true,
// When adding two variables, operands must both be of type number or of type string.
"restrict-plus-operands": true,
// Prefer `return;` in void functions and `return undefined;` in value-returning functions.
"return-undefined": true,
// Usage of && or || operators should be with boolean operands and expressions in If, Do, While and For statements
// should be of type boolean.
"strict-boolean-expressions": true,
// Warns for type predicates that are always true or always false.
"strict-type-predicates": false,
// Warns if an explicitly specified type argument is the default for that type parameter.
"use-default-type-parameter": false });
exports.DEFAULT_UNTYPED_TSLINT_CONFIG = {
rules: exports.DEFAULT_UNTYPED_TSLINT_RULES,
};
// TODO: Support type checking
exports.DEFAULT_TYPED_TSLINT_CONFIG = {
rules: exports.DEFAULT_TYPED_TSLINT_RULES,
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,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MkQ7SUFDM0QsMEJBQTBCLEVBQUUsSUFBSTtJQUNoQyx1RUFBdUU7SUFDdkUsK0JBQStCLEVBQUUsS0FBSztJQUN0Qyw0RUFBNEU7SUFDNUUsb0JBQW9CLEVBQUUsS0FBSztJQUMzQix5REFBeUQ7SUFDekQsdUJBQXVCLEVBQUUsSUFBSTtJQUM3QixxRUFBcUU7SUFDckUsb0JBQW9CLEVBQUUsSUFBSTtJQUMxQiw2RUFBNkU7SUFDN0Usd0JBQXdCLEVBQUUsSUFBSTtJQUM5QixxRkFBcUY7SUFDckYsd0JBQXdCLEVBQUUsSUFBSTtJQUM5QiwyRkFBMkY7SUFDM0Ysa0JBQWtCLEVBQUUsSUFBSTtJQUN4QixrSEFBa0g7SUFDbEgsNkJBQTZCO0lBQzdCLDRCQUE0QixFQUFFLElBQUk7SUFDbEMsa0VBQWtFO0lBQ2xFLHdCQUF3QixFQUFFLEtBQUs7SUFDL0IseUZBQXlGO0lBQ3pGLDRCQUE0QixFQUFFLEtBQUssSUFDbkM7QUFFVyxRQUFBLDZCQUE2QixHQUFzQztJQUM5RSxLQUFLLEVBQUUsb0NBQTRCO0NBQ3BDLENBQUM7QUFFRiw4QkFBOEI7QUFDakIsUUFBQSwyQkFBMkIsR0FBc0M7SUFDNUUsS0FBSyxFQUFFLGtDQUEwQjtDQUNsQyxDQUFDIiwiZmlsZSI6Im9wdGlvbnMvdHNsaW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25maWd1cmF0aW9uIGFzIFRzbGludENvbmZpZ3VyYXRpb24gfSBmcm9tIFwidHNsaW50XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHNsaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBvdXRwdXQgdHNsaW50Lmpzb24gZmlsZSwgcmVsYXRpdmUgdG8gYHJvb3RgXG4gICAqL1xuICB0c2xpbnRKc29uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeHRlbmQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvblxuICAgKiBUaGlzIGNhbiBlaXRoZXIgYmUgcGF0aCByZWxhdGl2ZSB0byBgcm9vdGAgb3IgYSByYXcgY29uZmlnIG9iamVjdC5cbiAgICogSWYgeW91IHBhc3MgYSByYXcgY29uZmlnIG9iamVjdCwgaXRzIGNvbmZpZ0ZpbGVEaXIgd2lsbCBiZSBgcm9vdGAuXG4gICAqL1xuICBjb25maWd1cmF0aW9uPzogVHNsaW50Q29uZmlndXJhdGlvbi5SYXdDb25maWdGaWxlIHwgc3RyaW5nO1xuXG4gIGZvcm1hdHRlcj86IFwibXNidWlsZFwiIHwgXCJ2ZXJib3NlXCIgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlcyB0byBsaW50LCByZWxhdGl2ZSB0byBgcm9vdGBcbiAgICovXG4gIGZpbGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEluc3RhbmNlIG9mIHRzbGludCB0byB1c2VcbiAgICovXG4gIHRzbGludD86IGFueTtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVU5UWVBFRF9UU0xJTlRfUlVMRVM6IFRzbGludENvbmZpZ3VyYXRpb24uUmF3UnVsZXNDb25maWcgPSB7XG4gIC8vIEVuZm9yY2VzIGZ1bmN0aW9uIG92ZXJsb2FkcyB0byBiZSBjb25zZWN1dGl2ZS5cbiAgXCJhZGphY2VudC1vdmVybG9hZC1zaWduYXR1cmVzXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIHZlcnRpY2FsIGFsaWdubWVudFxuICBcImFsaWduXCI6IGZhbHNlLFxuICAvLyBSZXF1aXJlcyB1c2luZyBlaXRoZXIg4oCYVFtd4oCZIG9yIOKAmEFycmF5JyBmb3IgYXJyYXlzXG4gIFwiYXJyYXktdHlwZVwiOiBbdHJ1ZSwgXCJhcnJheVwiXSxcbiAgLy8gUmVxdWlyZXMgcGFyZW50aGVzZXMgYXJvdW5kIHRoZSBwYXJhbWV0ZXJzIG9mIGFycm93IGZ1bmN0aW9uIGRlZmluaXRpb25zXG4gIFwiYXJyb3ctcGFyZW5zXCI6IFtcbiAgICB0cnVlLFxuICAgIC8vIEFycm93IGZ1bmN0aW9ucyB3aXRoIG9uZSBwYXJhbWV0ZXIgbXVzdCBub3QgaGF2ZSBwYXJlbnRoZXNlcyBpZiByZW1vdmluZyB0aGVtIGlzIGFsbG93ZWQgYnkgVHlwZVNjcmlwdC5cbiAgICBcImJhbi1zaW5nbGUtYXJnLXBhcmVuc1wiLFxuICBdLFxuICAvLyBTdWdnZXN0cyB0byBjb252ZXJ0IGAoKSA9PiB7IHJldHVybiB4OyB9YCB0byBgKCkgPT4geGAuXG4gIFwiYXJyb3ctcmV0dXJuLXNob3J0aGFuZFwiOiB0cnVlLFxuICAvLyBCYW5zIHRoZSB1c2Ugb2Ygc3BlY2lmaWMgZnVuY3Rpb25zIG9yIGdsb2JhbCBtZXRob2RzXG4gIFwiYmFuXCI6IFtcbiAgICB0cnVlLFxuICBdLFxuICAvLyBCYW5zIHNwZWNpZmljIHR5cGVzIGZyb20gYmVpbmcgdXNlZC5cbiAgXCJiYW4tdHlwZXNcIjogZmFsc2UsXG4gIC8vIEluIGEgYmluYXJ5IGV4cHJlc3Npb24sIGEgbGl0ZXJhbCBzaG91bGQgYWx3YXlzIGJlIG9uIHRoZSByaWdodC1oYW5kIHNpZGUgaWYgcG9zc2libGUuXG4gIFwiYmluYXJ5LWV4cHJlc3Npb24tb3BlcmFuZC1vcmRlclwiOiBmYWxzZSxcbiAgLy8gQW4gaW50ZXJmYWNlIG9yIGxpdGVyYWwgdHlwZSB3aXRoIGp1c3QgYSBjYWxsIHNpZ25hdHVyZSBjYW4gYmUgd3JpdHRlbiBhcyBhIGZ1bmN0aW9uIHR5cGUuXG4gIFwiY2FsbGFibGUtdHlwZXNcIjogdHJ1ZSxcbiAgLy8gRW5mb3JjZXMgUGFzY2FsQ2FzZWQgY2xhc3MgYW5kIGludGVyZmFjZSBuYW1lc1xuICBcImNsYXNzLW5hbWVcIjogdHJ1ZSxcbiAgLy8gRW5mb3JjZXMgZm9ybWF0dGluZyBydWxlcyBmb3Igc2luZ2xlLWxpbmUgY29tbWVudHNcbiAgXCJjb21tZW50LWZvcm1hdFwiOiBbXG4gICAgdHJ1ZSxcbiAgICAvLyBSZXF1aXJlcyB0aGF0IGFsbCBzaW5nbGUtbGluZSBjb21tZW50cyBtdXN0IGJlZ2luIHdpdGggYSBzcGFjZSwgYXMgaW4gYC8vIGNvbW1lbnRgXG4gICAgXCJjaGVjay1zcGFjZVwiLFxuICAgIC8vIFJlcXVpcmVzIHRoYXQgdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBvZiBhIGNvbW1lbnQgbXVzdCBiZSB1cHBlcmNhc2UsIGlmIGFwcGxpY2FibGUuXG4gICAgLy8gXCJjaGVjay11cHBlcmNhc2VcIixcbiAgXSxcbiAgLy8gRW5mb3JjZXMgYSB0aHJlc2hvbGQgb2YgY3ljbG9tYXRpYyBjb21wbGV4aXR5XG4gIFwiY3ljbG9tYXRpYy1jb21wbGV4aXR5XCI6IFt0cnVlLCAzMF0sXG4gIC8vIEVuZm9yY2VzIGJyYWNlcyBmb3IgYGlmYC9gZm9yYC9gZG9gL2B3aGlsZWAgc3RhdGVtZW50c1xuICBcImN1cmx5XCI6IHRydWUsXG4gIC8vIEVuc3VyZXMgdGhlIGZpbGUgZW5kcyB3aXRoIGEgbmV3bGluZVxuICBcImVvZmxpbmVcIjogdHJ1ZSxcbiAgLy8gRW5mb3JjZXMgVVRGLTggZmlsZSBlbmNvZGluZy5cbiAgXCJlbmNvZGluZ1wiOiB0cnVlLFxuICAvLyBFbmZvcmNlcyBhIGNlcnRhaW4gaGVhZGVyIGNvbW1lbnQgZm9yIGFsbCBmaWxlcywgbWF0Y2hlZCBieSBhIHJlZ3VsYXIgZXhwcmVzc2lvblxuICBcImZpbGUtaGVhZGVyXCI6IGZhbHNlLFxuICAvLyBSZXF1aXJlcyBhIGBmb3IgLi4uIGluYCBzdGF0ZW1lbnQgdG8gYmUgZmlsdGVyZWQgd2l0aCBhbiBgaWZgIHN0YXRlbWVudFxuICBcImZvcmluXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgaW1wb3J0aW5nIHRoZSBzcGVjaWZpZWQgbW9kdWxlcyBkaXJlY3RseSB2aWEgYGltcG9ydGAgYW5kIGByZXF1aXJlYC5cbiAgXCJpbXBvcnQtYmxhY2tsaXN0XCI6IGZhbHNlLFxuICAvLyBFbnN1cmVzIHByb3BlciBzcGFjaW5nIGJldHdlZW4gaW1wb3J0IHN0YXRlbWVudCBrZXl3b3Jkcy5cbiAgXCJpbXBvcnQtc3BhY2luZ1wiOiB0cnVlLFxuICAvLyBFbmZvcmNlcyBpbmRlbnRhdGlvbiB3aXRoIHRhYnMgb3Igc3BhY2VzXG4gIFwiaW5kZW50XCI6IFt0cnVlLCBcInNwYWNlc1wiXSxcbiAgLy8gUmVxdWlyZXMgaW50ZXJmYWNlIG5hbWVzIHRvIGJlZ2luIHdpdGggYSBjYXBpdGFsIOKAmEnigJlcbiAgXCJpbnRlcmZhY2UtbmFtZVwiOiBbXG4gICAgdHJ1ZSxcbiAgICAvLyByZXF1aXJlcyBpbnRlcmZhY2UgbmFtZXMgdG8gbm90IGhhdmUgYW4g4oCcSeKAnSBwcmVmaXhcbiAgICBcIm5ldmVyLXByZWZpeFwiLFxuICBdLFxuICAvLyBQcmVmZXIgYW4gaW50ZXJmYWNlIGRlY2xhcmF0aW9uIG92ZXIgYSB0eXBlIGxpdGVyYWwgKGB0eXBlIFQgPSB7IC4uLiB9YClcbiAgXCJpbnRlcmZhY2Utb3Zlci10eXBlLWxpdGVyYWxcIjogdHJ1ZSxcbiAgLy8gRW5mb3JjZXMgYmFzaWMgZm9ybWF0IHJ1bGVzIGZvciBKU0RvYyBjb21tZW50c1xuICBcImpzZG9jLWZvcm1hdFwiOiB0cnVlLFxuICAvLyBPbmx5IGFsbG93cyBsYWJlbHMgaW4gc2Vuc2libGUgbG9jYXRpb25zXG4gIFwibGFiZWwtcG9zaXRpb25cIjogdHJ1ZSxcbiAgLy8gRW5mb3JjZXMgYSBjb25zaXN0ZW50IGxpbmVicmVhayBzdHlsZVxuICBcImxpbmVicmVhay1zdHlsZVwiOiBbdHJ1ZSwgXCJMRlwiXSxcbiAgLy8gQSBmaWxlIG1heSBub3QgY29udGFpbiBtb3JlIHRoYW4gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgY2xhc3Nlc1xuICBcIm1heC1jbGFzc2VzLXBlci1maWxlXCI6IFt0cnVlLCA1XSxcbiAgLy8gUmVxdWlyZXMgZmlsZXMgdG8gcmVtYWluIHVuZGVyIGEgY2VydGFpbiBudW1iZXIgb2YgbGluZXNcbiAgXCJtYXgtZmlsZS1saW5lLWNvdW50XCI6IFt0cnVlLCA4MDBdLFxuICAvLyBSZXF1aXJlcyBsaW5lcyB0byBiZSB1bmRlciBhIGNlcnRhaW4gbWF4IGxlbmd0aFxuICBcIm1heC1saW5lLWxlbmd0aFwiOiBbdHJ1ZSwgMTIwXSxcbiAgLy8gUmVxdWlyZXMgZXhwbGljaXQgdmlzaWJpbGl0eSBkZWNsYXJhdGlvbnMgZm9yIGNsYXNzIG1lbWJlcnNcbiAgXCJtZW1iZXItYWNjZXNzXCI6IGZhbHNlLFxuICAvLyBFbmZvcmNlcyBtZW1iZXIgb3JkZXJpbmdcbiAgXCJtZW1iZXItb3JkZXJpbmdcIjogW1xuICAgIHRydWUsXG4gICAge1xuICAgICAgb3JkZXI6IFwiZmllbGRzLWZpcnN0XCIsXG4gICAgfSxcbiAgXSxcbiAgLy8gRW5mb3JjZXMgYmxhbmsgbGluZSBiZWZvcmUgcmV0dXJuIHdoZW4gbm90IHRoZSBvbmx5IGxpbmUgaW4gdGhlIGJsb2NrLlxuICBcIm5ld2xpbmUtYmVmb3JlLXJldHVyblwiOiBmYWxzZSxcbiAgLy8gUmVxdWlyZXMgcGFyZW50aGVzZXMgd2hlbiBpbnZva2luZyBhIGNvbnN0cnVjdG9yIHZpYSB0aGUgYG5ld2Aga2V5d29yZC5cbiAgXCJuZXctcGFyZW5zXCI6IGZhbHNlLFxuICAvLyBSZXF1aXJlcyB0aGUgdXNlIG9mIGBhcyBUeXBlYCBmb3IgdHlwZSBhc3NlcnRpb25zIGluc3RlYWQgb2YgYDxUeXBlPmAuXG4gIFwibm8tYW5nbGUtYnJhY2tldC10eXBlLWFzc2VydGlvblwiOiBmYWxzZSxcbiAgLy8gRGlhbGxvd3MgdXNhZ2VzIG9mIGBhbnlgIGFzIGEgdHlwZSBkZWNsYXJhdGlvbi5cbiAgXCJuby1hbnlcIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyBhY2Nlc3MgdG8gYXJndW1lbnRzLmNhbGxlZS5cbiAgXCJuby1hcmdcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIGJpdHdpc2Ugb3BlcmF0b3JzLlxuICBcIm5vLWJpdHdpc2VcIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyBhbnkgdHlwZSBvZiBhc3NpZ25tZW50IGluIGNvbmRpdGlvbmFscy5cbiAgXCJuby1jb25kaXRpb25hbC1hc3NpZ25tZW50XCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyBvbmUgb3IgbW9yZSBibGFuayBsaW5lcyBpbiBhIHJvdy5cbiAgXCJuby1jb25zZWN1dGl2ZS1ibGFuay1saW5lc1wiOiBbdHJ1ZSwgMV0sXG4gIC8vIEJhbnMgdGhlIHVzZSBvZiBzcGVjaWZpZWQgY29uc29sZSBtZXRob2RzLlxuICBcIm5vLWNvbnNvbGVcIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyBhY2Nlc3MgdG8gdGhlIGNvbnN0cnVjdG9ycyBvZiBgU3RyaW5nYCwgYE51bWJlcmAsIGFuZCBgQm9vbGVhbmAuXG4gIFwibm8tY29uc3RydWN0XCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyBgZGVidWdnZXJgIHN0YXRlbWVudHMuXG4gIFwibm8tZGVidWdnZXJcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIGRlZmF1bHQgZXhwb3J0cyBpbiBFUzYtc3R5bGUgbW9kdWxlcy5cbiAgXCJuby1kZWZhdWx0LWV4cG9ydFwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgbXVsdGlwbGUgaW1wb3J0IHN0YXRlbWVudHMgZnJvbSB0aGUgc2FtZSBtb2R1bGUuXG4gIFwibm8tZHVwbGljYXRlLWltcG9ydHNcIjogZmFsc2UsXG4gIC8vIFdhcm5zIGlmIGBzdXBlcigpYCBhcHBlYXJzIHR3aWNlIGluIGEgY29uc3RydWN0b3IuXG4gIFwibm8tZHVwbGljYXRlLXN1cGVyXCI6IHRydWUsXG4gIC8vIFByZXZlbnRzIGR1cGxpY2F0ZSBjYXNlcyBpbiBzd2l0Y2ggc3RhdGVtZW50cy5cbiAgXCJuby1kdXBsaWNhdGUtc3dpdGNoLWNhc2VcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIGR1cGxpY2F0ZSB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaW4gdGhlIHNhbWUgYmxvY2sgc2NvcGUuXG4gIFwibm8tZHVwbGljYXRlLXZhcmlhYmxlXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyBlbXB0eSBibG9ja3MuXG4gIFwibm8tZW1wdHlcIjogZmFsc2UsXG4gIC8vIEZvcmJpZHMgZW1wdHkgaW50ZXJmYWNlcy5cbiAgXCJuby1lbXB0eS1pbnRlcmZhY2VcIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyBgZXZhbGAgZnVuY3Rpb24gaW52b2NhdGlvbnMuXG4gIFwibm8tZXZhbFwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgaW1wb3J0aW5nIG1vZHVsZXMgdGhhdCBhcmUgbm90IGxpc3RlZCBhcyBkZXBlbmRlbmN5IGluIHRoZSBwcm9qZWN04oCZcyBwYWNrYWdlLmpzb25cbiAgXCJuby1pbXBsaWNpdC1kZXBlbmRlbmNpZXNcIjogW3RydWUsIFwiZGV2XCIsIFwib3B0aW9uYWxcIl0sXG4gIC8vIEF2b2lkIGltcG9ydCBzdGF0ZW1lbnRzIHdpdGggc2lkZS1lZmZlY3QuXG4gIFwibm8taW1wb3J0LXNpZGUtZWZmZWN0XCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgZXhwbGljaXQgdHlwZSBkZWNsYXJhdGlvbnMgZm9yIHZhcmlhYmxlcyBvciBwYXJhbWV0ZXJzIGluaXRpYWxpemVkIHRvIGEgbnVtYmVyLFxuICAvLyBzdHJpbmcsIG9yIGJvb2xlYW4uXG4gIFwibm8taW5mZXJyYWJsZS10eXBlc1wiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIGludGVybmFsIGBtb2R1bGVgLlxuICBcIm5vLWludGVybmFsLW1vZHVsZVwiOiB0cnVlLFxuICAvLyBXYXJucyBvbiB1c2Ugb2YgYCR7YCBpbiBub24tdGVtcGxhdGUgc3RyaW5ncy5cbiAgXCJuby1pbnZhbGlkLXRlbXBsYXRlLXN0cmluZ3NcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIHVzaW5nIHRoZSBgdGhpc2Aga2V5d29yZCBvdXRzaWRlIG9mIGNsYXNzZXMuXG4gIFwibm8taW52YWxpZC10aGlzXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgaXJyZWd1bGFyIHdoaXRlc3BhY2Ugb3V0c2lkZSBvZiBzdHJpbmdzIGFuZCBjb21tZW50c1xuICBcIm5vLWlycmVndWxhci13aGl0ZXNwYWNlXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyB0aGUgdXNlIGNvbnN0YW50IG51bWJlciB2YWx1ZXMgb3V0c2lkZSBvZiB2YXJpYWJsZSBhc3NpZ25tZW50cy5cbiAgXCJuby1tYWdpYy1udW1iZXJzXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgbWVyZ2VhYmxlIG5hbWVzcGFjZXMgaW4gdGhlIHNhbWUgZmlsZS5cbiAgXCJuby1tZXJnZWFibGUtbmFtZXNwYWNlXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgdXNlIG9mIGludGVybmFsIGBtb2R1bGVgcyBhbmQgYG5hbWVzcGFjZWBzLlxuICBcIm5vLW5hbWVzcGFjZVwiOiBmYWxzZSxcbiAgLy8gV2FybnMgb24gYXBwYXJlbnQgYXR0ZW1wdHMgdG8gZGVmaW5lIGNvbnN0cnVjdG9ycyBmb3IgaW50ZXJmYWNlcyBvciBgbmV3YCBmb3IgY2xhc3Nlcy5cbiAgXCJuby1taXN1c2VkLW5ld1wiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3Mgbm9uLW51bGwgYXNzZXJ0aW9ucy5cbiAgXCJuby1ub24tbnVsbC1hc3NlcnRpb25cIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyB1c2Ugb2YgdGhlIGBudWxsYCBrZXl3b3JkIGxpdGVyYWwuXG4gIFwibm8tbnVsbC1rZXl3b3JkXCI6IGZhbHNlLFxuICAvLyBGb3JiaWRzIGFuIG9iamVjdCBsaXRlcmFsIHRvIGFwcGVhciBpbiBhIHR5cGUgYXNzZXJ0aW9uIGV4cHJlc3Npb24uIENhc3RpbmcgdG8gYGFueWAgaXMgc3RpbGwgYWxsb3dlZC5cbiAgXCJuby1vYmplY3QtbGl0ZXJhbC10eXBlLWFzc2VydGlvblwiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIHBhcmFtZXRlciBwcm9wZXJ0aWVzIGluIGNsYXNzIGNvbnN0cnVjdG9ycy5cbiAgXCJuby1wYXJhbWV0ZXItcHJvcGVydGllc1wiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgcmVhc3NpZ25pbmcgcGFyYW1ldGVycy5cbiAgXCJuby1wYXJhbWV0ZXItcmVhc3NpZ25tZW50XCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgYC8vLyA8cmVmZXJlbmNlIHBhdGg9PmAgaW1wb3J0cyAodXNlIEVTNi1zdHlsZSBpbXBvcnRzIGluc3RlYWQpLlxuICBcIm5vLXJlZmVyZW5jZVwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgaW52b2NhdGlvbiBvZiBgcmVxdWlyZSgpYC5cbiAgXCJuby1yZXF1aXJlLWltcG9ydHNcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIHVubmVjZXNzYXJ5IGByZXR1cm4gYXdhaXRgLlxuICBcIm5vLXJldHVybi1hd2FpdFwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3Mgc2hhZG93aW5nIHZhcmlhYmxlIGRlY2xhcmF0aW9ucy5cbiAgXCJuby1zaGFkb3dlZC12YXJpYWJsZVwiOiBmYWxzZSxcbiAgLy8gRm9yYmlkcyBhcnJheSBsaXRlcmFscyB0byBjb250YWluIG1pc3NpbmcgZWxlbWVudHMuXG4gIFwibm8tc3BhcnNlLWFycmF5c1wiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3Mgb2JqZWN0IGFjY2VzcyB2aWEgc3RyaW5nIGxpdGVyYWxzLlxuICBcIm5vLXN0cmluZy1saXRlcmFsXCI6IGZhbHNlLFxuICAvLyBGbGFncyB0aHJvd2luZyBwbGFpbiBzdHJpbmdzIG9yIGNvbmNhdGVuYXRpb25zIG9mIHN0cmluZ3MuXG4gIFwibm8tc3RyaW5nLXRocm93XCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyBpbXBvcnRpbmcgYW55IHN1Ym1vZHVsZS5cbiAgXCJuby1zdWJtb2R1bGUtaW1wb3J0c1wiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIGZhbGxpbmcgdGhyb3VnaCBjYXNlIHN0YXRlbWVudHMuXG4gIFwibm8tc3dpdGNoLWNhc2UtZmFsbC10aHJvdWdoXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyB1bm5lY2Vzc2FyeSByZWZlcmVuY2VzIHRvIGB0aGlzYC5cbiAgXCJuby10aGlzLWFzc2lnbm1lbnRcIjogW3RydWUsIHtcImFsbG93LWRlc3RydWN0dXJpbmdcIjogdHJ1ZX1dLFxuICAvLyBEaXNhbGxvd3MgdHJhaWxpbmcgd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgXCJuby10cmFpbGluZy13aGl0ZXNwYWNlXCI6IHRydWUsXG4gIC8vIFJlcGxhY2VzIGB4ID0+IGYoeClgIHdpdGgganVzdCBgZmAuXG4gIFwibm8tdW5uZWNlc3NhcnktY2FsbGJhY2std3JhcHBlclwiOiB0cnVlLFxuICAvLyBGb3JiaWRzIGEg4oCYdmFy4oCZL+KAmWxldOKAmSBzdGF0ZW1lbnQgb3IgZGVzdHJ1Y3R1cmluZyBpbml0aWFsaXplciB0byBiZSBpbml0aWFsaXplZCB0byDigJh1bmRlZmluZWTigJkuXG4gIFwibm8tdW5uZWNlc3NhcnktaW5pdGlhbGl6ZXJcIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyBjb250cm9sIGZsb3cgc3RhdGVtZW50cywgc3VjaCBhcyByZXR1cm4sIGNvbnRpbnVlLCBicmVhayBhbmQgdGhyb3dzIGluIGZpbmFsbHlcbiAgLy8gYmxvY2tzLlxuICBcIm5vLXVuc2FmZS1maW5hbGx5XCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyB1bnVzZWQgZXhwcmVzc2lvbiBzdGF0ZW1lbnRzLlxuICBcIm5vLXVudXNlZC1leHByZXNzaW9uXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyB1c2FnZSBvZiB0aGUgYHZhcmAga2V5d29yZC5cbiAgXCJuby12YXIta2V5d29yZFwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgdGhlIHVzZSBvZiByZXF1aXJlIHN0YXRlbWVudHMgZXhjZXB0IGluIGltcG9ydCBzdGF0ZW1lbnRzLlxuICBcIm5vLXZhci1yZXF1aXJlc1wiOiB0cnVlLFxuICAvLyBDaGVja3MgdGhhdCBkZWNpbWFsIGxpdGVyYWxzIHNob3VsZCBiZWdpbiB3aXRoIGAwLmAgaW5zdGVhZCBvZiBqdXN0IGAuYCwgYW5kIHNob3VsZCBub3QgZW5kIHdpdGggYSB0cmFpbGluZyBgMGAuXG4gIC8vIFRPRE86IEVuYWJsZSBpdCB3aGVuIHRoZSBvcHRpb24gdG8gZW5mb3JjZSBsb3dlcmNhc2UgaGV4IGlzIGF2YWlsYWJsZVxuICBcIm51bWJlci1saXRlcmFsLWZvcm1hdFwiOiBmYWxzZSxcbiAgLy8gRW5mb3JjZXMgY29uc2lzdGVudCBvYmplY3QgbGl0ZXJhbCBwcm9wZXJ0eSBxdW90ZSBzdHlsZS5cbiAgXCJvYmplY3QtbGl0ZXJhbC1rZXktcXVvdGVzXCI6IFt0cnVlLCBcImNvbnNpc3RlbnQtYXMtbmVlZGVkXCJdLFxuICAvLyBFbmZvcmNlcyB1c2Ugb2YgRVM2IG9iamVjdCBsaXRlcmFsIHNob3J0aGFuZCB3aGVuIHBvc3NpYmxlLlxuICBcIm9iamVjdC1saXRlcmFsLXNob3J0aGFuZFwiOiB0cnVlLFxuICAvLyBSZXF1aXJlcyBrZXlzIGluIG9iamVjdCBsaXRlcmFscyB0byBiZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkuXG4gIFwib2JqZWN0LWxpdGVyYWwtc29ydC1rZXlzXCI6IGZhbHNlLFxuICAvLyBSZXF1aXJlcyB0aGUgc3BlY2lmaWVkIHRva2VucyB0byBiZSBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBleHByZXNzaW9uIHByZWNlZGluZyB0aGVtLlxuICBcIm9uZS1saW5lXCI6IFtcbiAgICB0cnVlLFxuICAgIC8vIENoZWNrcyB0aGF0IGBjYXRjaGAgaXMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgY2xvc2luZyBicmFjZSBmb3IgYHRyeWAuXG4gICAgXCJjaGVjay1jYXRjaFwiLFxuICAgIC8vIENoZWNrcyB0aGF0IGBmaW5hbGx5YCBpcyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBjbG9zaW5nIGJyYWNlIGZvciBgY2F0Y2hgLlxuICAgIFwiY2hlY2stZmluYWxseVwiLFxuICAgIC8vIENoZWNrcyB0aGF0IGBlbHNlYCBpcyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBjbG9zaW5nIGJyYWNlIGZvciBgaWZgLlxuICAgIFwiY2hlY2stZWxzZVwiLFxuICAgIC8vIENoZWNrcyB0aGF0IGFuIG9wZW4gYnJhY2UgZmFsbHMgb24gdGhlIHNhbWUgbGluZSBhcyBpdHMgcHJlY2VkaW5nIGV4cHJlc3Npb24uXG4gICAgXCJjaGVjay1vcGVuLWJyYWNlXCIsXG4gICAgLy8gQ2hlY2tzIHByZWNlZGluZyB3aGl0ZXNwYWNlIGZvciB0aGUgc3BlY2lmaWVkIHRva2Vucy5cbiAgICBcImNoZWNrLXdoaXRlc3BhY2VcIixcbiAgXSxcbiAgLy8gRGlzYWxsb3dzIG11bHRpcGxlIHZhcmlhYmxlIGRlZmluaXRpb25zIGluIHRoZSBzYW1lIGRlY2xhcmF0aW9uIHN0YXRlbWVudC5cbiAgXCJvbmUtdmFyaWFibGUtcGVyLWRlY2xhcmF0aW9uXCI6IFt0cnVlLCBcImlnbm9yZS1mb3ItbG9vcFwiXSxcbiAgLy8gRGlzYWxsb3dzIHRyYWRpdGlvbmFsIChub24tYXJyb3cpIGZ1bmN0aW9uIGV4cHJlc3Npb25zLlxuICBcIm9ubHktYXJyb3ctZnVuY3Rpb25zXCI6IGZhbHNlLFxuICAvLyBSZXF1aXJlcyB0aGF0IGltcG9ydCBzdGF0ZW1lbnRzIGJlIGFscGhhYmV0aXplZC5cbiAgXCJvcmRlcmVkLWltcG9ydHNcIjogdHJ1ZSxcbiAgLy8gUmVjb21tZW5kcyB0byB1c2UgYSBjb25kaXRpb25hbCBleHByZXNzaW9uIGluc3RlYWQgb2YgYXNzaWduaW5nIHRvIHRoZSBzYW1lIHRoaW5nIGluIGVhY2ggYnJhbmNoIG9mIGFuIGlmXG4gIC8vIHN0YXRlbWVudC5cbiAgXCJwcmVmZXItY29uZGl0aW9uYWwtZXhwcmVzc2lvblwiOiBmYWxzZSxcbiAgLy8gUmVxdWlyZXMgdGhhdCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgdXNlIGNvbnN0IGluc3RlYWQgb2YgbGV0IGlmIHBvc3NpYmxlLlxuICBcInByZWZlci1jb25zdFwiOiB0cnVlLFxuICAvLyBSZWNvbW1lbmRzIGEg4oCYZm9yLW9m4oCZIGxvb3Agb3ZlciBhIHN0YW5kYXJkIOKAmGZvcuKAmSBsb29wIGlmIHRoZSBpbmRleCBpcyBvbmx5IHVzZWQgdG8gYWNjZXNzXG4gIC8vIHRoZSBhcnJheSBiZWluZyBpdGVyYXRlZC5cbiAgXCJwcmVmZXItZm9yLW9mXCI6IHRydWUsXG4gIC8vIFdhcm5zIGZvciBjbGFzcyBtZXRob2RzIHRoYXQgZG8gbm90IHVzZSBgdGhpc2AuXG4gIFwicHJlZmVyLWZ1bmN0aW9uLW92ZXItbWV0aG9kXCI6IGZhbHNlLFxuICAvLyBQcmVmZXIgYGZvbygpOiB2b2lkYCBvdmVyIGBmb286ICgpID0+IHZvaWRgIGluIGludGVyZmFjZXMgYW5kIHR5cGVzLlxuICBcInByZWZlci1tZXRob2Qtc2lnbmF0dXJlXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIHRoZSB1c2Ugb2YgdGhlIEVTMjAxNSBvYmplY3Qgc3ByZWFkIG9wZXJhdG9yIG92ZXIgYE9iamVjdC5hc3NpZ24oKWAgd2hlcmUgYXBwcm9wcmlhdGUuXG4gIFwicHJlZmVyLW9iamVjdC1zcHJlYWRcIjogdHJ1ZSxcbiAgLy8gUHJlZmVyIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIGFuIGBpZmAgc3RhdGVtZW50IHdpdGggc2ltcGxlIGA9PT1gIGNvbXBhcmlzb25zLlxuICBcInByZWZlci1zd2l0Y2hcIjogdHJ1ZSxcbiAgLy8gUHJlZmVyIGEgdGVtcGxhdGUgZXhwcmVzc2lvbiBvdmVyIHN0cmluZyBsaXRlcmFsIGNvbmNhdGVuYXRpb24uXG4gIFwicHJlZmVyLXRlbXBsYXRlXCI6IFt0cnVlLCBcImFsbG93LXNpbmdsZS1jb25jYXRcIl0sXG4gIC8vIFJlcXVpcmVzIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzIGZvciBzdHJpbmcgbGl0ZXJhbHMuXG4gIFwicXVvdGVtYXJrXCI6IFtcbiAgICB0cnVlLFxuICAgIC8vIEVuZm9yY2VzIGRvdWJsZSBxdW90ZXMuXG4gICAgXCJkb3VibGVcIixcbiAgICAvLyBGb3JiaWRzIHNpbmdsZS1saW5lIHVudGFnZ2VkIHRlbXBsYXRlIHN0cmluZ3MgdGhhdCBkbyBub3QgY29udGFpbiBzdHJpbmcgaW50ZXJwb2xhdGlvbnMuXG4gICAgXCJhdm9pZC10ZW1wbGF0ZVwiLFxuICAgIC8vIEFsbG93cyB5b3UgdG8gdXNlIHRoZSDigJxvdGhlcuKAnSBxdW90ZW1hcmsgaW4gY2FzZXMgd2hlcmUgZXNjYXBpbmcgd291bGQgbm9ybWFsbHkgYmUgcmVxdWlyZWQuXG4gICAgXCJhdm9pZC1lc2NhcGVcIixcbiAgXSxcbiAgLy8gUmVxdWlyZXMgdGhlIHJhZGl4IHBhcmFtZXRlciB0byBiZSBzcGVjaWZpZWQgd2hlbiBjYWxsaW5nIGBwYXJzZUludGAuXG4gIFwicmFkaXhcIjogdHJ1ZSxcbiAgLy8gRW5mb3JjZXMgY29uc2lzdGVudCBzZW1pY29sb24gdXNhZ2UgYXQgdGhlIGVuZCBvZiBldmVyeSBzdGF0ZW1lbnQuXG4gIFwic2VtaWNvbG9uXCI6IFt0cnVlLCBcImFsd2F5c1wiXSxcbiAgLy8gUmVxdWlyZSBvciBkaXNhbGxvdyBhIHNwYWNlIGJlZm9yZSBmdW5jdGlvbiBwYXJlbnRoZXNpc1xuICBcInNwYWNlLWJlZm9yZS1mdW5jdGlvbi1wYXJlblwiOiBbXG4gICAgdHJ1ZSxcbiAgICB7XG4gICAgICBhbm9ueW1vdXM6IFwiYWx3YXlzXCIsXG4gICAgICBuYW1lZDogXCJuZXZlclwiLFxuICAgICAgYXN5bmNBcnJvdzogXCJhbHdheXNcIixcbiAgICAgIG1ldGhvZDogXCJuZXZlclwiLFxuICAgICAgY29uc3RydWN0b3I6IFwibmV2ZXJcIixcbiAgICB9LFxuICBdLFxuICAvLyBFbmZvcmNlcyBzcGFjZXMgd2l0aGluIHBhcmVudGhlc2VzIG9yIGRpc2FsbG93IHRoZW0uXG4gIFwic3BhY2Utd2l0aGluLXBhcmVuc1wiOiBbdHJ1ZSwgMF0sXG4gIC8vIFJlcXVpcmVzIGEgYGRlZmF1bHRgIGNhc2UgaW4gYWxsIGBzd2l0Y2hgIHN0YXRlbWVudHMuXG4gIFwic3dpdGNoLWRlZmF1bHRcIjogdHJ1ZSxcbiAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGZpbmFsIGNsYXVzZSBvZiBhIHN3aXRjaCBzdGF0ZW1lbnQgZW5kcyBpbiBgYnJlYWs7YC5cbiAgXCJzd2l0Y2gtZmluYWwtYnJlYWtcIjogW3RydWUsIFwiYWx3YXlzXCJdLFxuICAvLyBSZXF1aXJlcyBvciBkaXNhbGxvd3MgdHJhaWxpbmcgY29tbWFzIGluIGFycmF5IGFuZCBvYmplY3QgbGl0ZXJhbHMsIGRlc3RydWN0dXJpbmdcbiAgLy8gYXNzaWdubWVudHMsIGZ1bmN0aW9uIGFuZCB0dXBsZSB0eXBpbmdzLCBuYW1lZCBpbXBvcnRzIGFuZCBmdW5jdGlvbiBwYXJhbWV0ZXJzLlxuICBcInRyYWlsaW5nLWNvbW1hXCI6IFtcbiAgICB0cnVlLFxuICAgIHtcbiAgICAgIC8vIENoZWNrcyBtdWx0aS1saW5lIG9iamVjdCBsaXRlcmFscy5cbiAgICAgIG11bHRpbGluZTogXCJhbHdheXNcIixcbiAgICAgIC8vIENoZWNrcyBzaW5nbGUtbGluZSBvYmplY3QgbGl0ZXJhbHMuXG4gICAgICBzaW5nbGVsaW5lOiBcIm5ldmVyXCIsXG4gICAgfSxcbiAgXSxcbiAgLy8gUmVxdWlyZXMgYD09PWAgYW5kIGAhPT1gIGluIHBsYWNlIG9mIGA9PWAgYW5kIGAhPWAuXG4gIFwidHJpcGxlLWVxdWFsc1wiOiB0cnVlLFxuICAvLyBDaGVja3MgdGhhdCB0eXBlIGxpdGVyYWwgbWVtYmVycyBhcmUgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMuIEVuZm9yY2VzIGEgdHJhaWxpbmcgc2VtaWNvbG9uIGZvciBtdWx0aWxpbmUgdHlwZVxuICAvLyBsaXRlcmFscy5cbiAgXCJ0eXBlLWxpdGVyYWwtZGVsaW1pdGVyXCI6IHRydWUsXG4gIC8vIFJlcXVpcmVzIHR5cGUgZGVmaW5pdGlvbnMgdG8gZXhpc3QuXG4gIFwidHlwZWRlZlwiOiBbXG4gICAgdHJ1ZSxcbiAgICAvLyBDaGVjayByZXR1cm4gdHlwZXMgb2YgaW50ZXJmYWNlIHByb3BlcnRpZXMuXG4gICAgXCJwcm9wZXJ0eS1kZWNsYXJhdGlvblwiLFxuICAgIC8vIENoZWNrIHZhcmlhYmxlIGRlY2xhcmF0aW9ucy5cbiAgICBcInZhcmlhYmxlLWRlY2xhcmF0aW9uXCIsXG4gICAgLy8gQ2hlY2sgbWVtYmVyIHZhcmlhYmxlIGRlY2xhcmF0aW9ucy5cbiAgICBcIm1lbWJlci12YXJpYWJsZS1kZWNsYXJhdGlvblwiLFxuICBdLFxuICAvLyBSZXF1aXJlcyBvciBkaXNhbGxvd3Mgd2hpdGVzcGFjZSBmb3IgdHlwZSBkZWZpbml0aW9ucy5cbiAgXCJ0eXBlZGVmLXdoaXRlc3BhY2VcIjogW1xuICAgIHRydWUsXG4gICAgLy8gU3BlY2lmaWVzIGhvdyBtdWNoIHNwYWNlIHNob3VsZCBiZSB0byB0aGUgX2xlZnRfIG9mIGEgdHlwZWRlZiBjb2xvbi5cbiAgICB7XG4gICAgICBcImNhbGwtc2lnbmF0dXJlXCI6IFwibm9zcGFjZVwiLFxuICAgICAgXCJpbmRleC1zaWduYXR1cmVcIjogXCJub3NwYWNlXCIsXG4gICAgICBcInBhcmFtZXRlclwiOiBcIm5vc3BhY2VcIixcbiAgICAgIFwicHJvcGVydHktZGVjbGFyYXRpb25cIjogXCJub3NwYWNlXCIsXG4gICAgICBcInZhcmlhYmxlLWRlY2xhcmF0aW9uXCI6IFwibm9zcGFjZVwiLFxuICAgIH0sXG4gICAgLy8gU3BlY2lmaWVzIGhvdyBtdWNoIHNwYWNlIHNob3VsZCBiZSB0byB0aGUgX3JpZ2h0XyBvZiBhIHR5cGVkZWYgY29sb24uXG4gICAge1xuICAgICAgXCJjYWxsLXNpZ25hdHVyZVwiOiBcIm9uZXNwYWNlXCIsXG4gICAgICBcImluZGV4LXNpZ25hdHVyZVwiOiBcIm9uZXNwYWNlXCIsXG4gICAgICBcInBhcmFtZXRlclwiOiBcIm9uZXNwYWNlXCIsXG4gICAgICBcInByb3BlcnR5LWRlY2xhcmF0aW9uXCI6IFwib25lc3BhY2VcIixcbiAgICAgIFwidmFyaWFibGUtZGVjbGFyYXRpb25cIjogXCJvbmVzcGFjZVwiLFxuICAgIH0sXG4gIF0sXG4gIC8vIE1ha2VzIHN1cmUgcmVzdWx0IG9mIGB0eXBlb2ZgIGlzIGNvbXBhcmVkIHRvIGNvcnJlY3Qgc3RyaW5nIHZhbHVlcy5cbiAgXCJ0eXBlb2YtY29tcGFyZVwiOiB0cnVlLFxuICAvLyBXYXJucyBmb3IgYW55IHR3byBvdmVybG9hZHMgdGhhdCBjb3VsZCBiZSB1bmlmaWVkIGludG8gb25lIGJ5IHVzaW5nIGEgdW5pb24gb3IgYW4gb3B0aW9uYWwvcmVzdCBwYXJhbWV0ZXIuXG4gIFwidW5pZmllZC1zaWduYXR1cmVzXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIHVzZSBvZiB0aGUgYGlzTmFOKClgIGZ1bmN0aW9uIHRvIGNoZWNrIGZvciBOYU4gcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIGEgY29tcGFyaXNvblxuICAvLyB0byB0aGUgYE5hTmAgY29uc3RhbnQuXG4gIFwidXNlLWlzbmFuXCI6IHRydWUsXG4gIC8vIENoZWNrcyB2YXJpYWJsZSBuYW1lcyBmb3IgdmFyaW91cyBlcnJvcnMuXG4gIFwidmFyaWFibGUtbmFtZVwiOiBbdHJ1ZSwgXCJjaGVjay1mb3JtYXRcIiwgXCJhbGxvdy1sZWFkaW5nLXVuZGVyc2NvcmVcIl0sXG4gIC8vIEVuZm9yY2VzIHdoaXRlc3BhY2Ugc3R5bGUgY29udmVudGlvbnMuXG4gIFwid2hpdGVzcGFjZVwiOiBbXG4gICAgdHJ1ZSxcbiAgICAvLyBDaGVja3MgYnJhbmNoaW5nIHN0YXRlbWVudHMgKGBpZmAvYGVsc2VgL2Zgb3JgL2B3aGlsZWApIGFyZSBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlLlxuICAgIFwiY2hlY2stYnJhbmNoXCIsXG4gICAgLy8gQ2hlY2tzIHRoYXQgdmFyaWFibGUgZGVjbGFyYXRpb25zIGhhdmUgd2hpdGVzcGFjZSBhcm91bmQgdGhlIGVxdWFscyB0b2tlbi5cbiAgICBcImNoZWNrLWRlY2xcIixcbiAgICAvLyBDaGVja3MgZm9yIHdoaXRlc3BhY2UgYXJvdW5kIG9wZXJhdG9yIHRva2Vucy5cbiAgICBcImNoZWNrLW9wZXJhdG9yXCIsXG4gICAgLy8gQ2hlY2tzIGZvciB3aGl0ZXNwYWNlIGluIGltcG9ydCAmIGV4cG9ydCBzdGF0ZW1lbnRzLlxuICAgIFwiY2hlY2stbW9kdWxlXCIsXG4gICAgLy8gQ2hlY2tzIGZvciB3aGl0ZXNwYWNlIGFmdGVyIHNlcGFyYXRvciB0b2tlbnMgKGAsYC9gO2ApLlxuICAgIFwiY2hlY2stc2VwYXJhdG9yXCIsXG4gICAgLy8gQ2hlY2tzIHRoYXQgdGhlcmUgaXMgbm8gd2hpdGVzcGFjZSBhZnRlciByZXN0L3NwcmVhZCBvcGVyYXRvciAoYC4uLmApLlxuICAgIFwiY2hlY2stcmVzdC1zcHJlYWRcIixcbiAgICAvLyBDaGVja3MgZm9yIHdoaXRlc3BhY2UgYmVmb3JlIGEgdmFyaWFibGUgdHlwZSBzcGVjaWZpY2F0aW9uLlxuICAgIFwiY2hlY2stdHlwZVwiLFxuICAgIC8vIENoZWNrcyBmb3Igd2hpdGVzcGFjZSBiZXR3ZWVuIGEgdHlwZWNhc3QgYW5kIGl0cyB0YXJnZXQuXG4gICAgXCJjaGVjay10eXBlY2FzdFwiLFxuICAgIC8vIENoZWNrcyBmb3Igd2hpdGVzcGFjZSBiZXR3ZWVuIHR5cGUgb3BlcmF0b3JzIGB8YCBhbmQgYCZgLlxuICAgIFwiY2hlY2stdHlwZS1vcGVyYXRvclwiLFxuICAgIC8vIENoZWNrcyBmb3Igd2hpdGVzcGFjZSBiZWZvcmUgdGhlIG9wZW5pbmcgYnJhY2Ugb2YgYSBibG9jay5cbiAgICBcImNoZWNrLXByZWJsb2NrXCIsXG4gIF0sXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9UWVBFRF9UU0xJTlRfUlVMRVM6IFRzbGludENvbmZpZ3VyYXRpb24uUmF3UnVsZXNDb25maWcgPSB7XG4gIC4uLkRFRkFVTFRfVU5UWVBFRF9UU0xJTlRfUlVMRVMsXG4gIC8vIFdhcm5zIGZvciBhbiBhd2FpdGVkIHZhbHVlIHRoYXQgaXMgbm90IGEgUHJvbWlzZS5cbiAgXCJhd2FpdC1wcm9taXNlXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIGRvY3VtZW50YXRpb24gZm9yIGltcG9ydGFudCBpdGVtcyBiZSBmaWxsZWQgb3V0LlxuICBcImNvbXBsZXRlZC1kb2NzXCI6IFt0cnVlLCBbXCJjbGFzc2VzXCIsIFwiZnVuY3Rpb25zXCJdXSxcbiAgLy8gV2FybnMgd2hlbiBkZXByZWNhdGVkIEFQSXMgYXJlIHVzZWQuXG4gIFwiZGVwcmVjYXRpb25cIjogdHJ1ZSxcbiAgLy8gUmVxdWlyZXMgdGhhdCBhIGRlZmF1bHQgaW1wb3J0IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZGVjbGFyYXRpb24gaXQgaW1wb3J0cy4gRG9lcyBub3RoaW5nIGZvciBhbm9ueW1vdXNcbiAgLy8gZGVmYXVsdCBleHBvcnRzLlxuICBcIm1hdGNoLWRlZmF1bHQtZXhwb3J0LW5hbWVcIjogZmFsc2UsXG4gIC8vIFdhcm5zIG9uIGNvbXBhcmlzb24gdG8gYSBib29sZWFuIGxpdGVyYWwsIGFzIGluIGB4ID09PSB0cnVlYC5cbiAgXCJuby1ib29sZWFuLWxpdGVyYWwtY29tcGFyZVwiOiB0cnVlLFxuICAvLyBQcm9taXNlcyByZXR1cm5lZCBieSBmdW5jdGlvbnMgbXVzdCBiZSBoYW5kbGVkIGFwcHJvcHJpYXRlbHkuXG4gIFwibm8tZmxvYXRpbmctcHJvbWlzZXNcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIGl0ZXJhdGluZyBvdmVyIGFuIGFycmF5IHdpdGggYSBmb3ItaW4gbG9vcC5cbiAgXCJuby1mb3ItaW4tYXJyYXlcIjogdHJ1ZSxcbiAgLy8gRG