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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QzNELDBCQUEwQixFQUFFLElBQUk7SUFDaEMsdUVBQXVFO0lBQ3ZFLCtCQUErQixFQUFFLEtBQUs7SUFDdEMsNEVBQTRFO0lBQzVFLG9CQUFvQixFQUFFLEtBQUs7SUFDM0IseURBQXlEO0lBQ3pELHVCQUF1QixFQUFFLElBQUk7SUFDN0IscUVBQXFFO0lBQ3JFLG9CQUFvQixFQUFFLElBQUk7SUFDMUIsNkVBQTZFO0lBQzdFLHdCQUF3QixFQUFFLElBQUk7SUFDOUIscUZBQXFGO0lBQ3JGLHdCQUF3QixFQUFFLElBQUk7SUFDOUIsMkZBQTJGO0lBQzNGLGtCQUFrQixFQUFFLElBQUk7SUFDeEIsa0hBQWtIO0lBQ2xILDZCQUE2QjtJQUM3Qiw0QkFBNEIsRUFBRSxJQUFJO0lBQ2xDLGtFQUFrRTtJQUNsRSx3QkFBd0IsRUFBRSxLQUFLO0lBQy9CLHlGQUF5RjtJQUN6Riw0QkFBNEIsRUFBRSxLQUFLLElBQ25DO0FBRVcsUUFBQSw2QkFBNkIsR0FBc0M7SUFDOUUsS0FBSyxFQUFFLG9DQUE0QjtDQUNwQyxDQUFDO0FBRUYsOEJBQThCO0FBQ2pCLFFBQUEsMkJBQTJCLEdBQXNDO0lBQzVFLEtBQUssRUFBRSxrQ0FBMEI7Q0FDbEMsQ0FBQyIsImZpbGUiOiJvcHRpb25zL3RzbGludC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlndXJhdGlvbiBhcyBUc2xpbnRDb25maWd1cmF0aW9uIH0gZnJvbSBcInRzbGludFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRzbGludE9wdGlvbnMge1xuICAvKipcbiAgICogUGF0aCB0byB0aGUgb3V0cHV0IHRzbGludC5qc29uIGZpbGUsIHJlbGF0aXZlIHRvIGByb290YFxuICAgKi9cbiAgdHNsaW50SnNvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRXh0ZW5kIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgICogVGhpcyBjYW4gZWl0aGVyIGJlIHBhdGggcmVsYXRpdmUgdG8gYHJvb3RgIG9yIGEgcmF3IGNvbmZpZyBvYmplY3QuXG4gICAqIElmIHlvdSBwYXNzIGEgcmF3IGNvbmZpZyBvYmplY3QsIGl0cyBjb25maWdGaWxlRGlyIHdpbGwgYmUgYHJvb3RgLlxuICAgKi9cbiAgY29uZmlndXJhdGlvbj86IFRzbGludENvbmZpZ3VyYXRpb24uUmF3Q29uZmlnRmlsZSB8IHN0cmluZztcblxuICBmb3JtYXR0ZXI/OiBcIm1zYnVpbGRcIiB8IFwidmVyYm9zZVwiIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZXMgdG8gbGludCwgcmVsYXRpdmUgdG8gYHJvb3RgXG4gICAqL1xuICBmaWxlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbnN0YW5jZSBvZiB0c2xpbnQgdG8gdXNlXG4gICAqL1xuICB0c2xpbnQ/OiBhbnk7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1VOVFlQRURfVFNMSU5UX1JVTEVTOiBUc2xpbnRDb25maWd1cmF0aW9uLlJhd1J1bGVzQ29uZmlnID0ge1xuICAvLyBFbmZvcmNlcyBmdW5jdGlvbiBvdmVybG9hZHMgdG8gYmUgY29uc2VjdXRpdmUuXG4gIFwiYWRqYWNlbnQtb3ZlcmxvYWQtc2lnbmF0dXJlc1wiOiB0cnVlLFxuICAvLyBFbmZvcmNlcyB2ZXJ0aWNhbCBhbGlnbm1lbnRcbiAgXCJhbGlnblwiOiBmYWxzZSxcbiAgLy8gUmVxdWlyZXMgdXNpbmcgZWl0aGVyIOKAmFRbXeKAmSBvciDigJhBcnJheScgZm9yIGFycmF5c1xuICBcImFycmF5LXR5cGVcIjogW3RydWUsIFwiYXJyYXlcIl0sXG4gIC8vIFJlcXVpcmVzIHBhcmVudGhlc2VzIGFyb3VuZCB0aGUgcGFyYW1ldGVycyBvZiBhcnJvdyBmdW5jdGlvbiBkZWZpbml0aW9uc1xuICBcImFycm93LXBhcmVuc1wiOiBbXG4gICAgdHJ1ZSxcbiAgICAvLyBBcnJvdyBmdW5jdGlvbnMgd2l0aCBvbmUgcGFyYW1ldGVyIG11c3Qgbm90IGhhdmUgcGFyZW50aGVzZXMgaWYgcmVtb3ZpbmcgdGhlbSBpcyBhbGxvd2VkIGJ5IFR5cGVTY3JpcHQuXG4gICAgXCJiYW4tc2luZ2xlLWFyZy1wYXJlbnNcIixcbiAgXSxcbiAgLy8gU3VnZ2VzdHMgdG8gY29udmVydCBgKCkgPT4geyByZXR1cm4geDsgfWAgdG8gYCgpID0+IHhgLlxuICBcImFycm93LXJldHVybi1zaG9ydGhhbmRcIjogdHJ1ZSxcbiAgLy8gQmFucyB0aGUgdXNlIG9mIHNwZWNpZmljIGZ1bmN0aW9ucyBvciBnbG9iYWwgbWV0aG9kc1xuICBcImJhblwiOiBbXG4gICAgdHJ1ZSxcbiAgXSxcbiAgLy8gQmFucyBzcGVjaWZpYyB0eXBlcyBmcm9tIGJlaW5nIHVzZWQuXG4gIFwiYmFuLXR5cGVzXCI6IGZhbHNlLFxuICAvLyBJbiBhIGJpbmFyeSBleHByZXNzaW9uLCBhIGxpdGVyYWwgc2hvdWxkIGFsd2F5cyBiZSBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlIGlmIHBvc3NpYmxlLlxuICBcImJpbmFyeS1leHByZXNzaW9uLW9wZXJhbmQtb3JkZXJcIjogZmFsc2UsXG4gIC8vIEFuIGludGVyZmFjZSBvciBsaXRlcmFsIHR5cGUgd2l0aCBqdXN0IGEgY2FsbCBzaWduYXR1cmUgY2FuIGJlIHdyaXR0ZW4gYXMgYSBmdW5jdGlvbiB0eXBlLlxuICBcImNhbGxhYmxlLXR5cGVzXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIFBhc2NhbENhc2VkIGNsYXNzIGFuZCBpbnRlcmZhY2UgbmFtZXNcbiAgXCJjbGFzcy1uYW1lXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIGZvcm1hdHRpbmcgcnVsZXMgZm9yIHNpbmdsZS1saW5lIGNvbW1lbnRzXG4gIFwiY29tbWVudC1mb3JtYXRcIjogW1xuICAgIHRydWUsXG4gICAgLy8gUmVxdWlyZXMgdGhhdCBhbGwgc2luZ2xlLWxpbmUgY29tbWVudHMgbXVzdCBiZWdpbiB3aXRoIGEgc3BhY2UsIGFzIGluIGAvLyBjb21tZW50YFxuICAgIFwiY2hlY2stc3BhY2VcIixcbiAgICAvLyBSZXF1aXJlcyB0aGF0IHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgb2YgYSBjb21tZW50IG11c3QgYmUgdXBwZXJjYXNlLCBpZiBhcHBsaWNhYmxlLlxuICAgIC8vIFwiY2hlY2stdXBwZXJjYXNlXCIsXG4gIF0sXG4gIC8vIEVuZm9yY2VzIGEgdGhyZXNob2xkIG9mIGN5Y2xvbWF0aWMgY29tcGxleGl0eVxuICBcImN5Y2xvbWF0aWMtY29tcGxleGl0eVwiOiBbdHJ1ZSwgMzBdLFxuICAvLyBFbmZvcmNlcyBicmFjZXMgZm9yIGBpZmAvYGZvcmAvYGRvYC9gd2hpbGVgIHN0YXRlbWVudHNcbiAgXCJjdXJseVwiOiB0cnVlLFxuICAvLyBFbnN1cmVzIHRoZSBmaWxlIGVuZHMgd2l0aCBhIG5ld2xpbmVcbiAgXCJlb2ZsaW5lXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIFVURi04IGZpbGUgZW5jb2RpbmcuXG4gIFwiZW5jb2RpbmdcIjogdHJ1ZSxcbiAgLy8gRW5mb3JjZXMgYSBjZXJ0YWluIGhlYWRlciBjb21tZW50IGZvciBhbGwgZmlsZXMsIG1hdGNoZWQgYnkgYSByZWd1bGFyIGV4cHJlc3Npb25cbiAgXCJmaWxlLWhlYWRlclwiOiBmYWxzZSxcbiAgLy8gUmVxdWlyZXMgYSBgZm9yIC4uLiBpbmAgc3RhdGVtZW50IHRvIGJlIGZpbHRlcmVkIHdpdGggYW4gYGlmYCBzdGF0ZW1lbnRcbiAgXCJmb3JpblwiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIGltcG9ydGluZyB0aGUgc3BlY2lmaWVkIG1vZHVsZXMgZGlyZWN0bHkgdmlhIGBpbXBvcnRgIGFuZCBgcmVxdWlyZWAuXG4gIFwiaW1wb3J0LWJsYWNrbGlzdFwiOiBmYWxzZSxcbiAgLy8gRW5zdXJlcyBwcm9wZXIgc3BhY2luZyBiZXR3ZWVuIGltcG9ydCBzdGF0ZW1lbnQga2V5d29yZHMuXG4gIFwiaW1wb3J0LXNwYWNpbmdcIjogdHJ1ZSxcbiAgLy8gRW5mb3JjZXMgaW5kZW50YXRpb24gd2l0aCB0YWJzIG9yIHNwYWNlc1xuICBcImluZGVudFwiOiBbdHJ1ZSwgXCJzcGFjZXNcIl0sXG4gIC8vIFJlcXVpcmVzIGludGVyZmFjZSBuYW1lcyB0byBiZWdpbiB3aXRoIGEgY2FwaXRhbCDigJhJ4oCZXG4gIFwiaW50ZXJmYWNlLW5hbWVcIjogW1xuICAgIHRydWUsXG4gICAgLy8gcmVxdWlyZXMgaW50ZXJmYWNlIG5hbWVzIHRvIG5vdCBoYXZlIGFuIOKAnEnigJ0gcHJlZml4XG4gICAgXCJuZXZlci1wcmVmaXhcIixcbiAgXSxcbiAgLy8gUHJlZmVyIGFuIGludGVyZmFjZSBkZWNsYXJhdGlvbiBvdmVyIGEgdHlwZSBsaXRlcmFsIChgdHlwZSBUID0geyAuLi4gfWApXG4gIFwiaW50ZXJmYWNlLW92ZXItdHlwZS1saXRlcmFsXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIGJhc2ljIGZvcm1hdCBydWxlcyBmb3IgSlNEb2MgY29tbWVudHNcbiAgXCJqc2RvYy1mb3JtYXRcIjogdHJ1ZSxcbiAgLy8gT25seSBhbGxvd3MgbGFiZWxzIGluIHNlbnNpYmxlIGxvY2F0aW9uc1xuICBcImxhYmVsLXBvc2l0aW9uXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIGEgY29uc2lzdGVudCBsaW5lYnJlYWsgc3R5bGVcbiAgXCJsaW5lYnJlYWstc3R5bGVcIjogW3RydWUsIFwiTEZcIl0sXG4gIC8vIEEgZmlsZSBtYXkgbm90IGNvbnRhaW4gbW9yZSB0aGFuIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNsYXNzZXNcbiAgXCJtYXgtY2xhc3Nlcy1wZXItZmlsZVwiOiBbdHJ1ZSwgNV0sXG4gIC8vIFJlcXVpcmVzIGZpbGVzIHRvIHJlbWFpbiB1bmRlciBhIGNlcnRhaW4gbnVtYmVyIG9mIGxpbmVzXG4gIFwibWF4LWZpbGUtbGluZS1jb3VudFwiOiBbdHJ1ZSwgODAwXSxcbiAgLy8gUmVxdWlyZXMgbGluZXMgdG8gYmUgdW5kZXIgYSBjZXJ0YWluIG1heCBsZW5ndGhcbiAgXCJtYXgtbGluZS1sZW5ndGhcIjogW3RydWUsIDEyMF0sXG4gIC8vIFJlcXVpcmVzIGV4cGxpY2l0IHZpc2liaWxpdHkgZGVjbGFyYXRpb25zIGZvciBjbGFzcyBtZW1iZXJzXG4gIFwibWVtYmVyLWFjY2Vzc1wiOiBmYWxzZSxcbiAgLy8gRW5mb3JjZXMgbWVtYmVyIG9yZGVyaW5nXG4gIFwibWVtYmVyLW9yZGVyaW5nXCI6IFtcbiAgICB0cnVlLFxuICAgIHtcbiAgICAgIG9yZGVyOiBcImZpZWxkcy1maXJzdFwiLFxuICAgIH0sXG4gIF0sXG4gIC8vIEVuZm9yY2VzIGJsYW5rIGxpbmUgYmVmb3JlIHJldHVybiB3aGVuIG5vdCB0aGUgb25seSBsaW5lIGluIHRoZSBibG9jay5cbiAgXCJuZXdsaW5lLWJlZm9yZS1yZXR1cm5cIjogZmFsc2UsXG4gIC8vIFJlcXVpcmVzIHBhcmVudGhlc2VzIHdoZW4gaW52b2tpbmcgYSBjb25zdHJ1Y3RvciB2aWEgdGhlIGBuZXdgIGtleXdvcmQuXG4gIFwibmV3LXBhcmVuc1wiOiBmYWxzZSxcbiAgLy8gUmVxdWlyZXMgdGhlIHVzZSBvZiBgYXMgVHlwZWAgZm9yIHR5cGUgYXNzZXJ0aW9ucyBpbnN0ZWFkIG9mIGA8VHlwZT5gLlxuICBcIm5vLWFuZ2xlLWJyYWNrZXQtdHlwZS1hc3NlcnRpb25cIjogZmFsc2UsXG4gIC8vIERpYWxsb3dzIHVzYWdlcyBvZiBgYW55YCBhcyBhIHR5cGUgZGVjbGFyYXRpb24uXG4gIFwibm8tYW55XCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgYWNjZXNzIHRvIGFyZ3VtZW50cy5jYWxsZWUuXG4gIFwibm8tYXJnXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyBiaXR3aXNlIG9wZXJhdG9ycy5cbiAgXCJuby1iaXR3aXNlXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgYW55IHR5cGUgb2YgYXNzaWdubWVudCBpbiBjb25kaXRpb25hbHMuXG4gIFwibm8tY29uZGl0aW9uYWwtYXNzaWdubWVudFwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3Mgb25lIG9yIG1vcmUgYmxhbmsgbGluZXMgaW4gYSByb3cuXG4gIFwibm8tY29uc2VjdXRpdmUtYmxhbmstbGluZXNcIjogW3RydWUsIDFdLFxuICAvLyBCYW5zIHRoZSB1c2Ugb2Ygc3BlY2lmaWVkIGNvbnNvbGUgbWV0aG9kcy5cbiAgXCJuby1jb25zb2xlXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgYWNjZXNzIHRvIHRoZSBjb25zdHJ1Y3RvcnMgb2YgYFN0cmluZ2AsIGBOdW1iZXJgLCBhbmQgYEJvb2xlYW5gLlxuICBcIm5vLWNvbnN0cnVjdFwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgYGRlYnVnZ2VyYCBzdGF0ZW1lbnRzLlxuICBcIm5vLWRlYnVnZ2VyXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyBkZWZhdWx0IGV4cG9ydHMgaW4gRVM2LXN0eWxlIG1vZHVsZXMuXG4gIFwibm8tZGVmYXVsdC1leHBvcnRcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIG11bHRpcGxlIGltcG9ydCBzdGF0ZW1lbnRzIGZyb20gdGhlIHNhbWUgbW9kdWxlLlxuICBcIm5vLWR1cGxpY2F0ZS1pbXBvcnRzXCI6IGZhbHNlLFxuICAvLyBXYXJucyBpZiBgc3VwZXIoKWAgYXBwZWFycyB0d2ljZSBpbiBhIGNvbnN0cnVjdG9yLlxuICBcIm5vLWR1cGxpY2F0ZS1zdXBlclwiOiB0cnVlLFxuICAvLyBQcmV2ZW50cyBkdXBsaWNhdGUgY2FzZXMgaW4gc3dpdGNoIHN0YXRlbWVudHMuXG4gIFwibm8tZHVwbGljYXRlLXN3aXRjaC1jYXNlXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyBkdXBsaWNhdGUgdmFyaWFibGUgZGVjbGFyYXRpb25zIGluIHRoZSBzYW1lIGJsb2NrIHNjb3BlLlxuICBcIm5vLWR1cGxpY2F0ZS12YXJpYWJsZVwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgZW1wdHkgYmxvY2tzLlxuICBcIm5vLWVtcHR5XCI6IGZhbHNlLFxuICAvLyBGb3JiaWRzIGVtcHR5IGludGVyZmFjZXMuXG4gIFwibm8tZW1wdHktaW50ZXJmYWNlXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgYGV2YWxgIGZ1bmN0aW9uIGludm9jYXRpb25zLlxuICBcIm5vLWV2YWxcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIGltcG9ydGluZyBtb2R1bGVzIHRoYXQgYXJlIG5vdCBsaXN0ZWQgYXMgZGVwZW5kZW5jeSBpbiB0aGUgcHJvamVjdOKAmXMgcGFja2FnZS5qc29uXG4gIFwibm8taW1wbGljaXQtZGVwZW5kZW5jaWVzXCI6IFt0cnVlLCBcImRldlwiLCBcIm9wdGlvbmFsXCJdLFxuICAvLyBBdm9pZCBpbXBvcnQgc3RhdGVtZW50cyB3aXRoIHNpZGUtZWZmZWN0LlxuICBcIm5vLWltcG9ydC1zaWRlLWVmZmVjdFwiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIGV4cGxpY2l0IHR5cGUgZGVjbGFyYXRpb25zIGZvciB2YXJpYWJsZXMgb3IgcGFyYW1ldGVycyBpbml0aWFsaXplZCB0byBhIG51bWJlcixcbiAgLy8gc3RyaW5nLCBvciBib29sZWFuLlxuICBcIm5vLWluZmVycmFibGUtdHlwZXNcIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyBpbnRlcm5hbCBgbW9kdWxlYC5cbiAgXCJuby1pbnRlcm5hbC1tb2R1bGVcIjogdHJ1ZSxcbiAgLy8gV2FybnMgb24gdXNlIG9mIGAke2AgaW4gbm9uLXRlbXBsYXRlIHN0cmluZ3MuXG4gIFwibm8taW52YWxpZC10ZW1wbGF0ZS1zdHJpbmdzXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyB1c2luZyB0aGUgYHRoaXNgIGtleXdvcmQgb3V0c2lkZSBvZiBjbGFzc2VzLlxuICBcIm5vLWludmFsaWQtdGhpc1wiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIGlycmVndWxhciB3aGl0ZXNwYWNlIG91dHNpZGUgb2Ygc3RyaW5ncyBhbmQgY29tbWVudHNcbiAgXCJuby1pcnJlZ3VsYXItd2hpdGVzcGFjZVwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgdGhlIHVzZSBjb25zdGFudCBudW1iZXIgdmFsdWVzIG91dHNpZGUgb2YgdmFyaWFibGUgYXNzaWdubWVudHMuXG4gIFwibm8tbWFnaWMtbnVtYmVyc1wiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIG1lcmdlYWJsZSBuYW1lc3BhY2VzIGluIHRoZSBzYW1lIGZpbGUuXG4gIFwibm8tbWVyZ2VhYmxlLW5hbWVzcGFjZVwiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIHVzZSBvZiBpbnRlcm5hbCBgbW9kdWxlYHMgYW5kIGBuYW1lc3BhY2Vgcy5cbiAgXCJuby1uYW1lc3BhY2VcIjogZmFsc2UsXG4gIC8vIFdhcm5zIG9uIGFwcGFyZW50IGF0dGVtcHRzIHRvIGRlZmluZSBjb25zdHJ1Y3RvcnMgZm9yIGludGVyZmFjZXMgb3IgYG5ld2AgZm9yIGNsYXNzZXMuXG4gIFwibm8tbWlzdXNlZC1uZXdcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIG5vbi1udWxsIGFzc2VydGlvbnMuXG4gIFwibm8tbm9uLW51bGwtYXNzZXJ0aW9uXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgdXNlIG9mIHRoZSBgbnVsbGAga2V5d29yZCBsaXRlcmFsLlxuICBcIm5vLW51bGwta2V5d29yZFwiOiBmYWxzZSxcbiAgLy8gRm9yYmlkcyBhbiBvYmplY3QgbGl0ZXJhbCB0byBhcHBlYXIgaW4gYSB0eXBlIGFzc2VydGlvbiBleHByZXNzaW9uLiBDYXN0aW5nIHRvIGBhbnlgIGlzIHN0aWxsIGFsbG93ZWQuXG4gIFwibm8tb2JqZWN0LWxpdGVyYWwtdHlwZS1hc3NlcnRpb25cIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyBwYXJhbWV0ZXIgcHJvcGVydGllcyBpbiBjbGFzcyBjb25zdHJ1Y3RvcnMuXG4gIFwibm8tcGFyYW1ldGVyLXByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIHJlYXNzaWduaW5nIHBhcmFtZXRlcnMuXG4gIFwibm8tcGFyYW1ldGVyLXJlYXNzaWdubWVudFwiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIGAvLy8gPHJlZmVyZW5jZSBwYXRoPT5gIGltcG9ydHMgKHVzZSBFUzYtc3R5bGUgaW1wb3J0cyBpbnN0ZWFkKS5cbiAgXCJuby1yZWZlcmVuY2VcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIGludm9jYXRpb24gb2YgYHJlcXVpcmUoKWAuXG4gIFwibm8tcmVxdWlyZS1pbXBvcnRzXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyB1bm5lY2Vzc2FyeSBgcmV0dXJuIGF3YWl0YC5cbiAgXCJuby1yZXR1cm4tYXdhaXRcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIHNoYWRvd2luZyB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG4gIFwibm8tc2hhZG93ZWQtdmFyaWFibGVcIjogZmFsc2UsXG4gIC8vIEZvcmJpZHMgYXJyYXkgbGl0ZXJhbHMgdG8gY29udGFpbiBtaXNzaW5nIGVsZW1lbnRzLlxuICBcIm5vLXNwYXJzZS1hcnJheXNcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIG9iamVjdCBhY2Nlc3MgdmlhIHN0cmluZyBsaXRlcmFscy5cbiAgXCJuby1zdHJpbmctbGl0ZXJhbFwiOiBmYWxzZSxcbiAgLy8gRmxhZ3MgdGhyb3dpbmcgcGxhaW4gc3RyaW5ncyBvciBjb25jYXRlbmF0aW9ucyBvZiBzdHJpbmdzLlxuICBcIm5vLXN0cmluZy10aHJvd1wiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgaW1wb3J0aW5nIGFueSBzdWJtb2R1bGUuXG4gIFwibm8tc3VibW9kdWxlLWltcG9ydHNcIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyBmYWxsaW5nIHRocm91Z2ggY2FzZSBzdGF0ZW1lbnRzLlxuICBcIm5vLXN3aXRjaC1jYXNlLWZhbGwtdGhyb3VnaFwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgdW5uZWNlc3NhcnkgcmVmZXJlbmNlcyB0byBgdGhpc2AuXG4gIFwibm8tdGhpcy1hc3NpZ25tZW50XCI6IFt0cnVlLCB7XCJhbGxvdy1kZXN0cnVjdHVyaW5nXCI6IHRydWV9XSxcbiAgLy8gRGlzYWxsb3dzIHRyYWlsaW5nIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gIFwibm8tdHJhaWxpbmctd2hpdGVzcGFjZVwiOiB0cnVlLFxuICAvLyBSZXBsYWNlcyBgeCA9PiBmKHgpYCB3aXRoIGp1c3QgYGZgLlxuICBcIm5vLXVubmVjZXNzYXJ5LWNhbGxiYWNrLXdyYXBwZXJcIjogdHJ1ZSxcbiAgLy8gRm9yYmlkcyBhIOKAmHZhcuKAmS/igJlsZXTigJkgc3RhdGVtZW50IG9yIGRlc3RydWN0dXJpbmcgaW5pdGlhbGl6ZXIgdG8gYmUgaW5pdGlhbGl6ZWQgdG8g4oCYdW5kZWZpbmVk4oCZLlxuICBcIm5vLXVubmVjZXNzYXJ5LWluaXRpYWxpemVyXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgY29udHJvbCBmbG93IHN0YXRlbWVudHMsIHN1Y2ggYXMgcmV0dXJuLCBjb250aW51ZSwgYnJlYWsgYW5kIHRocm93cyBpbiBmaW5hbGx5XG4gIC8vIGJsb2Nrcy5cbiAgXCJuby11bnNhZmUtZmluYWxseVwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgdW51c2VkIGV4cHJlc3Npb24gc3RhdGVtZW50cy5cbiAgXCJuby11bnVzZWQtZXhwcmVzc2lvblwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgdXNhZ2Ugb2YgdGhlIGB2YXJgIGtleXdvcmQuXG4gIFwibm8tdmFyLWtleXdvcmRcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIHRoZSB1c2Ugb2YgcmVxdWlyZSBzdGF0ZW1lbnRzIGV4Y2VwdCBpbiBpbXBvcnQgc3RhdGVtZW50cy5cbiAgXCJuby12YXItcmVxdWlyZXNcIjogdHJ1ZSxcbiAgLy8gQ2hlY2tzIHRoYXQgZGVjaW1hbCBsaXRlcmFscyBzaG91bGQgYmVnaW4gd2l0aCBgMC5gIGluc3RlYWQgb2YganVzdCBgLmAsIGFuZCBzaG91bGQgbm90IGVuZCB3aXRoIGEgdHJhaWxpbmcgYDBgLlxuICAvLyBUT0RPOiBFbmFibGUgaXQgd2hlbiB0aGUgb3B0aW9uIHRvIGVuZm9yY2UgbG93ZXJjYXNlIGhleCBpcyBhdmFpbGFibGVcbiAgXCJudW1iZXItbGl0ZXJhbC1mb3JtYXRcIjogZmFsc2UsXG4gIC8vIEVuZm9yY2VzIGNvbnNpc3RlbnQgb2JqZWN0IGxpdGVyYWwgcHJvcGVydHkgcXVvdGUgc3R5bGUuXG4gIFwib2JqZWN0LWxpdGVyYWwta2V5LXF1b3Rlc1wiOiBbdHJ1ZSwgXCJjb25zaXN0ZW50LWFzLW5lZWRlZFwiXSxcbiAgLy8gRW5mb3JjZXMgdXNlIG9mIEVTNiBvYmplY3QgbGl0ZXJhbCBzaG9ydGhhbmQgd2hlbiBwb3NzaWJsZS5cbiAgXCJvYmplY3QtbGl0ZXJhbC1zaG9ydGhhbmRcIjogdHJ1ZSxcbiAgLy8gUmVxdWlyZXMga2V5cyBpbiBvYmplY3QgbGl0ZXJhbHMgdG8gYmUgc29ydGVkIGFscGhhYmV0aWNhbGx5LlxuICBcIm9iamVjdC1saXRlcmFsLXNvcnQta2V5c1wiOiBmYWxzZSxcbiAgLy8gUmVxdWlyZXMgdGhlIHNwZWNpZmllZCB0b2tlbnMgdG8gYmUgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgZXhwcmVzc2lvbiBwcmVjZWRpbmcgdGhlbS5cbiAgXCJvbmUtbGluZVwiOiBbXG4gICAgdHJ1ZSxcbiAgICAvLyBDaGVja3MgdGhhdCBgY2F0Y2hgIGlzIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGNsb3NpbmcgYnJhY2UgZm9yIGB0cnlgLlxuICAgIFwiY2hlY2stY2F0Y2hcIixcbiAgICAvLyBDaGVja3MgdGhhdCBgZmluYWxseWAgaXMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgY2xvc2luZyBicmFjZSBmb3IgYGNhdGNoYC5cbiAgICBcImNoZWNrLWZpbmFsbHlcIixcbiAgICAvLyBDaGVja3MgdGhhdCBgZWxzZWAgaXMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgY2xvc2luZyBicmFjZSBmb3IgYGlmYC5cbiAgICBcImNoZWNrLWVsc2VcIixcbiAgICAvLyBDaGVja3MgdGhhdCBhbiBvcGVuIGJyYWNlIGZhbGxzIG9uIHRoZSBzYW1lIGxpbmUgYXMgaXRzIHByZWNlZGluZyBleHByZXNzaW9uLlxuICAgIFwiY2hlY2stb3Blbi1icmFjZVwiLFxuICAgIC8vIENoZWNrcyBwcmVjZWRpbmcgd2hpdGVzcGFjZSBmb3IgdGhlIHNwZWNpZmllZCB0b2tlbnMuXG4gICAgXCJjaGVjay13aGl0ZXNwYWNlXCIsXG4gIF0sXG4gIC8vIERpc2FsbG93cyBtdWx0aXBsZSB2YXJpYWJsZSBkZWZpbml0aW9ucyBpbiB0aGUgc2FtZSBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQuXG4gIFwib25lLXZhcmlhYmxlLXBlci1kZWNsYXJhdGlvblwiOiBbdHJ1ZSwgXCJpZ25vcmUtZm9yLWxvb3BcIl0sXG4gIC8vIERpc2FsbG93cyB0cmFkaXRpb25hbCAobm9uLWFycm93KSBmdW5jdGlvbiBleHByZXNzaW9ucy5cbiAgXCJvbmx5LWFycm93LWZ1bmN0aW9uc1wiOiBmYWxzZSxcbiAgLy8gUmVxdWlyZXMgdGhhdCBpbXBvcnQgc3RhdGVtZW50cyBiZSBhbHBoYWJldGl6ZWQuXG4gIFwib3JkZXJlZC1pbXBvcnRzXCI6IHRydWUsXG4gIC8vIFJlY29tbWVuZHMgdG8gdXNlIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpbnN0ZWFkIG9mIGFzc2lnbmluZyB0byB0aGUgc2FtZSB0aGluZyBpbiBlYWNoIGJyYW5jaCBvZiBhbiBpZlxuICAvLyBzdGF0ZW1lbnQuXG4gIFwicHJlZmVyLWNvbmRpdGlvbmFsLWV4cHJlc3Npb25cIjogZmFsc2UsXG4gIC8vIFJlcXVpcmVzIHRoYXQgdmFyaWFibGUgZGVjbGFyYXRpb25zIHVzZSBjb25zdCBpbnN0ZWFkIG9mIGxldCBpZiBwb3NzaWJsZS5cbiAgXCJwcmVmZXItY29uc3RcIjogdHJ1ZSxcbiAgLy8gUmVjb21tZW5kcyBhIOKAmGZvci1vZuKAmSBsb29wIG92ZXIgYSBzdGFuZGFyZCDigJhmb3LigJkgbG9vcCBpZiB0aGUgaW5kZXggaXMgb25seSB1c2VkIHRvIGFjY2Vzc1xuICAvLyB0aGUgYXJyYXkgYmVpbmcgaXRlcmF0ZWQuXG4gIFwicHJlZmVyLWZvci1vZlwiOiB0cnVlLFxuICAvLyBXYXJucyBmb3IgY2xhc3MgbWV0aG9kcyB0aGF0IGRvIG5vdCB1c2UgYHRoaXNgLlxuICBcInByZWZlci1mdW5jdGlvbi1vdmVyLW1ldGhvZFwiOiBmYWxzZSxcbiAgLy8gUHJlZmVyIGBmb28oKTogdm9pZGAgb3ZlciBgZm9vOiAoKSA9PiB2b2lkYCBpbiBpbnRlcmZhY2VzIGFuZCB0eXBlcy5cbiAgXCJwcmVmZXItbWV0aG9kLXNpZ25hdHVyZVwiOiB0cnVlLFxuICAvLyBFbmZvcmNlcyB0aGUgdXNlIG9mIHRoZSBFUzIwMTUgb2JqZWN0IHNwcmVhZCBvcGVyYXRvciBvdmVyIGBPYmplY3QuYXNzaWduKClgIHdoZXJlIGFwcHJvcHJpYXRlLlxuICBcInByZWZlci1vYmplY3Qtc3ByZWFkXCI6IHRydWUsXG4gIC8vIFByZWZlciBhIGBzd2l0Y2hgIHN0YXRlbWVudCB0byBhbiBgaWZgIHN0YXRlbWVudCB3aXRoIHNpbXBsZSBgPT09YCBjb21wYXJpc29ucy5cbiAgXCJwcmVmZXItc3dpdGNoXCI6IHRydWUsXG4gIC8vIFByZWZlciBhIHRlbXBsYXRlIGV4cHJlc3Npb24gb3ZlciBzdHJpbmcgbGl0ZXJhbCBjb25jYXRlbmF0aW9uLlxuICBcInByZWZlci10ZW1wbGF0ZVwiOiBbdHJ1ZSwgXCJhbGxvdy1zaW5nbGUtY29uY2F0XCJdLFxuICAvLyBSZXF1aXJlcyBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyBmb3Igc3RyaW5nIGxpdGVyYWxzLlxuICBcInF1b3RlbWFya1wiOiBbXG4gICAgdHJ1ZSxcbiAgICAvLyBFbmZvcmNlcyBkb3VibGUgcXVvdGVzLlxuICAgIFwiZG91YmxlXCIsXG4gICAgLy8gRm9yYmlkcyBzaW5nbGUtbGluZSB1bnRhZ2dlZCB0ZW1wbGF0ZSBzdHJpbmdzIHRoYXQgZG8gbm90IGNvbnRhaW4gc3RyaW5nIGludGVycG9sYXRpb25zLlxuICAgIFwiYXZvaWQtdGVtcGxhdGVcIixcbiAgICAvLyBBbGxvd3MgeW91IHRvIHVzZSB0aGUg4oCcb3RoZXLigJ0gcXVvdGVtYXJrIGluIGNhc2VzIHdoZXJlIGVzY2FwaW5nIHdvdWxkIG5vcm1hbGx5IGJlIHJlcXVpcmVkLlxuICAgIFwiYXZvaWQtZXNjYXBlXCIsXG4gIF0sXG4gIC8vIFJlcXVpcmVzIHRoZSByYWRpeCBwYXJhbWV0ZXIgdG8gYmUgc3BlY2lmaWVkIHdoZW4gY2FsbGluZyBgcGFyc2VJbnRgLlxuICBcInJhZGl4XCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIGNvbnNpc3RlbnQgc2VtaWNvbG9uIHVzYWdlIGF0IHRoZSBlbmQgb2YgZXZlcnkgc3RhdGVtZW50LlxuICBcInNlbWljb2xvblwiOiBbdHJ1ZSwgXCJhbHdheXNcIl0sXG4gIC8vIFJlcXVpcmUgb3IgZGlzYWxsb3cgYSBzcGFjZSBiZWZvcmUgZnVuY3Rpb24gcGFyZW50aGVzaXNcbiAgXCJzcGFjZS1iZWZvcmUtZnVuY3Rpb24tcGFyZW5cIjogW1xuICAgIHRydWUsXG4gICAge1xuICAgICAgYW5vbnltb3VzOiBcImFsd2F5c1wiLFxuICAgICAgbmFtZWQ6IFwibmV2ZXJcIixcbiAgICAgIGFzeW5jQXJyb3c6IFwiYWx3YXlzXCIsXG4gICAgICBtZXRob2Q6IFwibmV2ZXJcIixcbiAgICAgIGNvbnN0cnVjdG9yOiBcIm5ldmVyXCIsXG4gICAgfSxcbiAgXSxcbiAgLy8gRW5mb3JjZXMgc3BhY2VzIHdpdGhpbiBwYXJlbnRoZXNlcyBvciBkaXNhbGxvdyB0aGVtLlxuICBcInNwYWNlLXdpdGhpbi1wYXJlbnNcIjogW3RydWUsIDBdLFxuICAvLyBSZXF1aXJlcyBhIGBkZWZhdWx0YCBjYXNlIGluIGFsbCBgc3dpdGNoYCBzdGF0ZW1lbnRzLlxuICBcInN3aXRjaC1kZWZhdWx0XCI6IHRydWUsXG4gIC8vIENoZWNrcyB3aGV0aGVyIHRoZSBmaW5hbCBjbGF1c2Ugb2YgYSBzd2l0Y2ggc3RhdGVtZW50IGVuZHMgaW4gYGJyZWFrO2AuXG4gIFwic3dpdGNoLWZpbmFsLWJyZWFrXCI6IFt0cnVlLCBcImFsd2F5c1wiXSxcbiAgLy8gUmVxdWlyZXMgb3IgZGlzYWxsb3dzIHRyYWlsaW5nIGNvbW1hcyBpbiBhcnJheSBhbmQgb2JqZWN0IGxpdGVyYWxzLCBkZXN0cnVjdHVyaW5nXG4gIC8vIGFzc2lnbm1lbnRzLCBmdW5jdGlvbiBhbmQgdHVwbGUgdHlwaW5ncywgbmFtZWQgaW1wb3J0cyBhbmQgZnVuY3Rpb24gcGFyYW1ldGVycy5cbiAgXCJ0cmFpbGluZy1jb21tYVwiOiBbXG4gICAgdHJ1ZSxcbiAgICB7XG4gICAgICAvLyBDaGVja3MgbXVsdGktbGluZSBvYmplY3QgbGl0ZXJhbHMuXG4gICAgICBtdWx0aWxpbmU6IFwiYWx3YXlzXCIsXG4gICAgICAvLyBDaGVja3Mgc2luZ2xlLWxpbmUgb2JqZWN0IGxpdGVyYWxzLlxuICAgICAgc2luZ2xlbGluZTogXCJuZXZlclwiLFxuICAgIH0sXG4gIF0sXG4gIC8vIFJlcXVpcmVzIGA9PT1gIGFuZCBgIT09YCBpbiBwbGFjZSBvZiBgPT1gIGFuZCBgIT1gLlxuICBcInRyaXBsZS1lcXVhbHNcIjogdHJ1ZSxcbiAgLy8gQ2hlY2tzIHRoYXQgdHlwZSBsaXRlcmFsIG1lbWJlcnMgYXJlIHNlcGFyYXRlZCBieSBzZW1pY29sb25zLiBFbmZvcmNlcyBhIHRyYWlsaW5nIHNlbWljb2xvbiBmb3IgbXVsdGlsaW5lIHR5cGVcbiAgLy8gbGl0ZXJhbHMuXG4gIFwidHlwZS1saXRlcmFsLWRlbGltaXRlclwiOiB0cnVlLFxuICAvLyBSZXF1aXJlcyB0eXBlIGRlZmluaXRpb25zIHRvIGV4aXN0LlxuICBcInR5cGVkZWZcIjogW1xuICAgIHRydWUsXG4gICAgLy8gQ2hlY2sgcmV0dXJuIHR5cGVzIG9mIGludGVyZmFjZSBwcm9wZXJ0aWVzLlxuICAgIFwicHJvcGVydHktZGVjbGFyYXRpb25cIixcbiAgICAvLyBDaGVjayB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG4gICAgXCJ2YXJpYWJsZS1kZWNsYXJhdGlvblwiLFxuICAgIC8vIENoZWNrIG1lbWJlciB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG4gICAgXCJtZW1iZXItdmFyaWFibGUtZGVjbGFyYXRpb25cIixcbiAgXSxcbiAgLy8gUmVxdWlyZXMgb3IgZGlzYWxsb3dzIHdoaXRlc3BhY2UgZm9yIHR5cGUgZGVmaW5pdGlvbnMuXG4gIFwidHlwZWRlZi13aGl0ZXNwYWNlXCI6IFtcbiAgICB0cnVlLFxuICAgIC8vIFNwZWNpZmllcyBob3cgbXVjaCBzcGFjZSBzaG91bGQgYmUgdG8gdGhlIF9sZWZ0XyBvZiBhIHR5cGVkZWYgY29sb24uXG4gICAge1xuICAgICAgXCJjYWxsLXNpZ25hdHVyZVwiOiBcIm5vc3BhY2VcIixcbiAgICAgIFwiaW5kZXgtc2lnbmF0dXJlXCI6IFwibm9zcGFjZVwiLFxuICAgICAgXCJwYXJhbWV0ZXJcIjogXCJub3NwYWNlXCIsXG4gICAgICBcInByb3BlcnR5LWRlY2xhcmF0aW9uXCI6IFwibm9zcGFjZVwiLFxuICAgICAgXCJ2YXJpYWJsZS1kZWNsYXJhdGlvblwiOiBcIm5vc3BhY2VcIixcbiAgICB9LFxuICAgIC8vIFNwZWNpZmllcyBob3cgbXVjaCBzcGFjZSBzaG91bGQgYmUgdG8gdGhlIF9yaWdodF8gb2YgYSB0eXBlZGVmIGNvbG9uLlxuICAgIHtcbiAgICAgIFwiY2FsbC1zaWduYXR1cmVcIjogXCJvbmVzcGFjZVwiLFxuICAgICAgXCJpbmRleC1zaWduYXR1cmVcIjogXCJvbmVzcGFjZVwiLFxuICAgICAgXCJwYXJhbWV0ZXJcIjogXCJvbmVzcGFjZVwiLFxuICAgICAgXCJwcm9wZXJ0eS1kZWNsYXJhdGlvblwiOiBcIm9uZXNwYWNlXCIsXG4gICAgICBcInZhcmlhYmxlLWRlY2xhcmF0aW9uXCI6IFwib25lc3BhY2VcIixcbiAgICB9LFxuICBdLFxuICAvLyBNYWtlcyBzdXJlIHJlc3VsdCBvZiBgdHlwZW9mYCBpcyBjb21wYXJlZCB0byBjb3JyZWN0IHN0cmluZyB2YWx1ZXMuXG4gIFwidHlwZW9mLWNvbXBhcmVcIjogdHJ1ZSxcbiAgLy8gV2FybnMgZm9yIGFueSB0d28gb3ZlcmxvYWRzIHRoYXQgY291bGQgYmUgdW5pZmllZCBpbnRvIG9uZSBieSB1c2luZyBhIHVuaW9uIG9yIGFuIG9wdGlvbmFsL3Jlc3QgcGFyYW1ldGVyLlxuICBcInVuaWZpZWQtc2lnbmF0dXJlc1wiOiB0cnVlLFxuICAvLyBFbmZvcmNlcyB1c2Ugb2YgdGhlIGBpc05hTigpYCBmdW5jdGlvbiB0byBjaGVjayBmb3IgTmFOIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBhIGNvbXBhcmlzb25cbiAgLy8gdG8gdGhlIGBOYU5gIGNvbnN0YW50LlxuICBcInVzZS1pc25hblwiOiB0cnVlLFxuICAvLyBDaGVja3MgdmFyaWFibGUgbmFtZXMgZm9yIHZhcmlvdXMgZXJyb3JzLlxuICBcInZhcmlhYmxlLW5hbWVcIjogW3RydWUsIFwiY2hlY2stZm9ybWF0XCIsIFwiYWxsb3ctbGVhZGluZy11bmRlcnNjb3JlXCJdLFxuICAvLyBFbmZvcmNlcyB3aGl0ZXNwYWNlIHN0eWxlIGNvbnZlbnRpb25zLlxuICBcIndoaXRlc3BhY2VcIjogW1xuICAgIHRydWUsXG4gICAgLy8gQ2hlY2tzIGJyYW5jaGluZyBzdGF0ZW1lbnRzIChgaWZgL2BlbHNlYC9mYG9yYC9gd2hpbGVgKSBhcmUgZm9sbG93ZWQgYnkgd2hpdGVzcGFjZS5cbiAgICBcImNoZWNrLWJyYW5jaFwiLFxuICAgIC8vIENoZWNrcyB0aGF0IHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBoYXZlIHdoaXRlc3BhY2UgYXJvdW5kIHRoZSBlcXVhbHMgdG9rZW4uXG4gICAgXCJjaGVjay1kZWNsXCIsXG4gICAgLy8gQ2hlY2tzIGZvciB3aGl0ZXNwYWNlIGFyb3VuZCBvcGVyYXRvciB0b2tlbnMuXG4gICAgXCJjaGVjay1vcGVyYXRvclwiLFxuICAgIC8vIENoZWNrcyBmb3Igd2hpdGVzcGFjZSBpbiBpbXBvcnQgJiBleHBvcnQgc3RhdGVtZW50cy5cbiAgICBcImNoZWNrLW1vZHVsZVwiLFxuICAgIC8vIENoZWNrcyBmb3Igd2hpdGVzcGFjZSBhZnRlciBzZXBhcmF0b3IgdG9rZW5zIChgLGAvYDtgKS5cbiAgICBcImNoZWNrLXNlcGFyYXRvclwiLFxuICAgIC8vIENoZWNrcyB0aGF0IHRoZXJlIGlzIG5vIHdoaXRlc3BhY2UgYWZ0ZXIgcmVzdC9zcHJlYWQgb3BlcmF0b3IgKGAuLi5gKS5cbiAgICBcImNoZWNrLXJlc3Qtc3ByZWFkXCIsXG4gICAgLy8gQ2hlY2tzIGZvciB3aGl0ZXNwYWNlIGJlZm9yZSBhIHZhcmlhYmxlIHR5cGUgc3BlY2lmaWNhdGlvbi5cbiAgICBcImNoZWNrLXR5cGVcIixcbiAgICAvLyBDaGVja3MgZm9yIHdoaXRlc3BhY2UgYmV0d2VlbiBhIHR5cGVjYXN0IGFuZCBpdHMgdGFyZ2V0LlxuICAgIFwiY2hlY2stdHlwZWNhc3RcIixcbiAgICAvLyBDaGVja3MgZm9yIHdoaXRlc3BhY2UgYmV0d2VlbiB0eXBlIG9wZXJhdG9ycyBgfGAgYW5kIGAmYC5cbiAgICBcImNoZWNrLXR5cGUtb3BlcmF0b3JcIixcbiAgICAvLyBDaGVja3MgZm9yIHdoaXRlc3BhY2UgYmVmb3JlIHRoZSBvcGVuaW5nIGJyYWNlIG9mIGEgYmxvY2suXG4gICAgXCJjaGVjay1wcmVibG9ja1wiLFxuICBdLFxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVFlQRURfVFNMSU5UX1JVTEVTOiBUc2xpbnRDb25maWd1cmF0aW9uLlJhd1J1bGVzQ29uZmlnID0ge1xuICAuLi5ERUZBVUxUX1VOVFlQRURfVFNMSU5UX1JVTEVTLFxuICAvLyBXYXJucyBmb3IgYW4gYXdhaXRlZCB2YWx1ZSB0aGF0IGlzIG5vdCBhIFByb21pc2UuXG4gIFwiYXdhaXQtcHJvbWlzZVwiOiB0cnVlLFxuICAvLyBFbmZvcmNlcyBkb2N1bWVudGF0aW9uIGZvciBpbXBvcnRhbnQgaXRlbXMgYmUgZmlsbGVkIG91dC5cbiAgXCJjb21wbGV0ZWQtZG9jc1wiOiBbdHJ1ZSwgW1wiY2xhc3Nlc1wiLCBcImZ1bmN0aW9uc1wiXV0sXG4gIC8vIFdhcm5zIHdoZW4gZGVwcmVjYXRlZCBBUElzIGFyZSB1c2VkLlxuICBcImRlcHJlY2F0aW9uXCI6IHRydWUsXG4gIC8vIFJlcXVpcmVzIHRoYXQgYSBkZWZhdWx0IGltcG9ydCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGRlY2xhcmF0aW9uIGl0IGltcG9ydHMuIERvZXMgbm90aGluZyBmb3IgYW5vbnltb3VzXG4gIC8vIGRlZmF1bHQgZXhwb3J0cy5cbiAgXCJtYXRjaC1kZWZhdWx0LWV4cG9ydC1uYW1lXCI6IGZhbHNlLFxuICAvLyBXYXJucyBvbiBjb21wYXJpc29uIHRvIGEgYm9vbGVhbiBsaXRlcmFsLCBhcyBpbiBgeCA9PT0gdHJ1ZWAuXG4gIFwibm8tYm9vbGVhbi1saXRlcmFsLWNvbXBhcmVcIjogdHJ1ZSxcbiAgLy8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgZnVuY3Rpb25zIG11c3QgYmUgaGFuZGxlZCBhcHByb3ByaWF0ZWx5LlxuICBcIm5vLWZsb2F0aW5nLXByb21pc2VzXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheSB3aXRoIGEgZm9yLWluIGxvb3AuXG4gIFwibm8tZm9yLWluLWFycmF5XCI6IHRydWUsXG4gIC8vIERpc2FsbG