@darraghor/eslint-plugin-nestjs-typed 6.14.0 → 6.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/rules/allPropertiesAreWhitelisted/allPropertiesAreWhitelisted.d.ts +6 -1
- package/dist/rules/allPropertiesAreWhitelisted/allPropertiesAreWhitelisted.js +24 -9
- package/dist/rules/allPropertiesHaveExplicitDefined/allPropertiesHaveExplicitDefined.d.ts +6 -1
- package/dist/rules/allPropertiesHaveExplicitDefined/allPropertiesHaveExplicitDefined.js +46 -32
- package/dist/rules/index.d.ts +6 -2
- package/dist/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.js +3 -2
- package/package.json +1 -1
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
type Options = [
|
|
2
|
+
{
|
|
3
|
+
additionalDecorators?: string[];
|
|
4
|
+
}
|
|
5
|
+
];
|
|
6
|
+
declare const rule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"missing-property-decorator", Options, unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
2
7
|
export default rule;
|
|
@@ -11,24 +11,39 @@ const rule = createRule({
|
|
|
11
11
|
"missing-property-decorator": "Property has no class-validator decorator (use @Allow() if you don't need a validation)",
|
|
12
12
|
},
|
|
13
13
|
type: "problem",
|
|
14
|
-
schema: [
|
|
14
|
+
schema: [
|
|
15
|
+
{
|
|
16
|
+
type: "object",
|
|
17
|
+
properties: {
|
|
18
|
+
additionalDecorators: {
|
|
19
|
+
type: "array",
|
|
20
|
+
items: {
|
|
21
|
+
type: "string",
|
|
22
|
+
},
|
|
23
|
+
description: "List of custom decorator names that should be treated as class-validator decorators",
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
additionalProperties: false,
|
|
27
|
+
},
|
|
28
|
+
],
|
|
15
29
|
},
|
|
16
|
-
defaultOptions: [
|
|
30
|
+
defaultOptions: [
|
|
31
|
+
{
|
|
32
|
+
additionalDecorators: [],
|
|
33
|
+
},
|
|
34
|
+
],
|
|
17
35
|
create: function (context) {
|
|
36
|
+
const { additionalDecorators = [] } = context.options[0] || {};
|
|
18
37
|
return {
|
|
19
38
|
ClassDeclaration(node) {
|
|
20
|
-
const program = typedTokenHelpers.getRootProgram(node);
|
|
21
39
|
const withDecorator = [];
|
|
22
40
|
const withoutDecorator = [];
|
|
23
41
|
for (const element of node.body.body) {
|
|
24
42
|
if (element.type !== AST_NODE_TYPES.PropertyDefinition) {
|
|
25
43
|
continue;
|
|
26
44
|
}
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
decorator.expression.callee.type ===
|
|
30
|
-
AST_NODE_TYPES.Identifier &&
|
|
31
|
-
typedTokenHelpers.decoratorIsClassValidatorDecorator(program, decorator));
|
|
45
|
+
const validationDecorators = typedTokenHelpers.getValidationDecorators(element, additionalDecorators);
|
|
46
|
+
const hasDecorator = validationDecorators.length > 0;
|
|
32
47
|
if (hasDecorator) {
|
|
33
48
|
withDecorator.push(element);
|
|
34
49
|
}
|
|
@@ -49,4 +64,4 @@ const rule = createRule({
|
|
|
49
64
|
},
|
|
50
65
|
});
|
|
51
66
|
export default rule;
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsUHJvcGVydGllc0FyZVdoaXRlbGlzdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL2FsbFByb3BlcnRpZXNBcmVXaGl0ZWxpc3RlZC9hbGxQcm9wZXJ0aWVzQXJlV2hpdGVsaXN0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBVyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQVFuRSxNQUFNLElBQUksR0FBRyxVQUFVLENBQXdDO0lBQzNELElBQUksRUFBRSxnQ0FBZ0M7SUFDdEMsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUFFLHdDQUF3QztTQUN4RDtRQUNELFFBQVEsRUFBRTtZQUNOLDRCQUE0QixFQUN4Qix5RkFBeUY7U0FDaEc7UUFDRCxJQUFJLEVBQUUsU0FBUztRQUNmLE1BQU0sRUFBRTtZQUNKO2dCQUNJLElBQUksRUFBRSxRQUFRO2dCQUNkLFVBQVUsRUFBRTtvQkFDUixvQkFBb0IsRUFBRTt3QkFDbEIsSUFBSSxFQUFFLE9BQU87d0JBQ2IsS0FBSyxFQUFFOzRCQUNILElBQUksRUFBRSxRQUFRO3lCQUNqQjt3QkFDRCxXQUFXLEVBQ1AscUZBQXFGO3FCQUM1RjtpQkFDSjtnQkFDRCxvQkFBb0IsRUFBRSxLQUFLO2FBQzlCO1NBQ0o7S0FDSjtJQUNELGNBQWMsRUFBRTtRQUNaO1lBQ0ksb0JBQW9CLEVBQUUsRUFBRTtTQUMzQjtLQUNKO0lBQ0QsTUFBTSxFQUFFLFVBQVUsT0FBTztRQUNyQixNQUFNLEVBQUMsb0JBQW9CLEdBQUcsRUFBRSxFQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFN0QsT0FBTztZQUNILGdCQUFnQixDQUFDLElBQStCO2dCQUM1QyxNQUFNLGFBQWEsR0FBa0MsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLGdCQUFnQixHQUFrQyxFQUFFLENBQUM7Z0JBQzNELEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDbkMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO3dCQUNyRCxTQUFTO29CQUNiLENBQUM7b0JBQ0QsTUFBTSxvQkFBb0IsR0FDdEIsaUJBQWlCLENBQUMsdUJBQXVCLENBQ3JDLE9BQU8sRUFDUCxvQkFBb0IsQ0FDdkIsQ0FBQztvQkFDTixNQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUVyRCxJQUFJLFlBQVksRUFBRSxDQUFDO3dCQUNmLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ2hDLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ25DLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDMUQsS0FBSyxNQUFNLE9BQU8sSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO3dCQUNyQyxPQUFPLENBQUMsTUFBTSxDQUFDOzRCQUNYLElBQUksRUFBRSxPQUFPOzRCQUNiLFNBQVMsRUFBRSw0QkFBNEI7eUJBQzFDLENBQUMsQ0FBQztvQkFDUCxDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxlQUFlLElBQUksQ0FBQyJ9
|
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
import { ESLintUtils } from "@typescript-eslint/utils";
|
|
2
|
-
|
|
2
|
+
type Options = [
|
|
3
|
+
{
|
|
4
|
+
additionalDecorators?: string[];
|
|
5
|
+
}
|
|
6
|
+
];
|
|
7
|
+
declare const rule: ESLintUtils.RuleModule<"missing-is-defined-decorator" | "missing-is-optional-decorator" | "conflicting-defined-decorators-defined-optional" | "conflicting-defined-decorators-optional-validate-if" | "conflicting-defined-decorators-all", Options, unknown, ESLintUtils.RuleListener>;
|
|
3
8
|
export default rule;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ESLintUtils, } from "@typescript-eslint/utils";
|
|
2
2
|
import { isNullableType } from "@typescript-eslint/type-utils";
|
|
3
3
|
import { getPropertiesDefinitions } from "../../utils/ast.js";
|
|
4
4
|
import { createRule } from "../../utils/createRule.js";
|
|
@@ -17,11 +17,30 @@ const rule = createRule({
|
|
|
17
17
|
"conflicting-defined-decorators-all": "Properties can have one of @IsDefined() or @IsOptional() or @ValidateIf()",
|
|
18
18
|
},
|
|
19
19
|
type: "problem",
|
|
20
|
-
schema: [
|
|
20
|
+
schema: [
|
|
21
|
+
{
|
|
22
|
+
type: "object",
|
|
23
|
+
properties: {
|
|
24
|
+
additionalDecorators: {
|
|
25
|
+
type: "array",
|
|
26
|
+
items: {
|
|
27
|
+
type: "string",
|
|
28
|
+
},
|
|
29
|
+
description: "List of custom decorator names that should be treated as class-validator decorators",
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
additionalProperties: false,
|
|
33
|
+
},
|
|
34
|
+
],
|
|
21
35
|
},
|
|
22
|
-
defaultOptions: [
|
|
36
|
+
defaultOptions: [
|
|
37
|
+
{
|
|
38
|
+
additionalDecorators: [],
|
|
39
|
+
},
|
|
40
|
+
],
|
|
23
41
|
create: function (context) {
|
|
24
42
|
const service = ESLintUtils.getParserServices(context);
|
|
43
|
+
const { additionalDecorators = [] } = context.options[0] || {};
|
|
25
44
|
const checker = service.program.getTypeChecker();
|
|
26
45
|
return {
|
|
27
46
|
ClassDeclaration(node) {
|
|
@@ -31,7 +50,7 @@ const rule = createRule({
|
|
|
31
50
|
// for each property in the class
|
|
32
51
|
for (const propertyDefinition of propertyDefinitions) {
|
|
33
52
|
// check for the optional or defined decorators, or any class-validator decorator
|
|
34
|
-
const decoratorsStatus = getDecoratorsStatus(propertyDefinition);
|
|
53
|
+
const decoratorsStatus = getDecoratorsStatus(propertyDefinition, additionalDecorators);
|
|
35
54
|
propertyDefinitionsWithDecoratorsStatus.push([
|
|
36
55
|
propertyDefinition,
|
|
37
56
|
decoratorsStatus,
|
|
@@ -106,37 +125,32 @@ function getType(typeNode, service, checker) {
|
|
|
106
125
|
const type = checker.getTypeAtLocation(tsNode);
|
|
107
126
|
return type;
|
|
108
127
|
}
|
|
109
|
-
function getDecoratorsStatus(propertyDefinition) {
|
|
128
|
+
function getDecoratorsStatus(propertyDefinition, additionalDecorators = []) {
|
|
110
129
|
let hasIsDefinedDecorator = false;
|
|
111
130
|
let hasTypeCheckingDecorator = false;
|
|
112
131
|
let hasIsOptionalDecorator = false;
|
|
113
132
|
let hasValidateIfDecorator = false;
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
if (decorator.expression.callee.name === "ValidateIf") {
|
|
137
|
-
hasValidateIfDecorator = true;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
133
|
+
const validationDecorators = typedTokenHelpers.getValidationDecorators(propertyDefinition, additionalDecorators);
|
|
134
|
+
for (const decorator of validationDecorators) {
|
|
135
|
+
const decoratorName = typedTokenHelpers.getDecoratorName(decorator);
|
|
136
|
+
if (!decoratorName) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
// We care if the decorator is a validation decorator like IsString etc for checks later
|
|
140
|
+
if (decoratorName !== "IsDefined" &&
|
|
141
|
+
decoratorName !== "IsOptional" &&
|
|
142
|
+
decoratorName !== "ValidateIf") {
|
|
143
|
+
hasTypeCheckingDecorator = true;
|
|
144
|
+
}
|
|
145
|
+
// otherwise check if it is isDefined or isOptional, we will use this later
|
|
146
|
+
if (decoratorName === "IsDefined") {
|
|
147
|
+
hasIsDefinedDecorator = true;
|
|
148
|
+
}
|
|
149
|
+
if (decoratorName === "IsOptional") {
|
|
150
|
+
hasIsOptionalDecorator = true;
|
|
151
|
+
}
|
|
152
|
+
if (decoratorName === "ValidateIf") {
|
|
153
|
+
hasValidateIfDecorator = true;
|
|
140
154
|
}
|
|
141
155
|
}
|
|
142
156
|
return {
|
|
@@ -146,4 +160,4 @@ function getDecoratorsStatus(propertyDefinition) {
|
|
|
146
160
|
hasValidateIfDecorator,
|
|
147
161
|
};
|
|
148
162
|
}
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsUHJvcGVydGllc0hhdmVFeHBsaWNpdERlZmluZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvYWxsUHJvcGVydGllc0hhdmVFeHBsaWNpdERlZmluZWQvYWxsUHJvcGVydGllc0hhdmVFeHBsaWNpdERlZmluZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFdBQVcsR0FFZCxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFFckQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFRbkUsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQU9yQjtJQUNFLElBQUksRUFBRSxzQ0FBc0M7SUFDNUMsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUNQLGtFQUFrRTtTQUN6RTtRQUNELFFBQVEsRUFBRTtZQUNOLDhCQUE4QixFQUMxQiw0R0FBNEc7WUFDaEgsK0JBQStCLEVBQzNCLHdFQUF3RTtZQUM1RSxpREFBaUQsRUFDN0MsZ0VBQWdFO1lBQ3BFLHFEQUFxRCxFQUNqRCxpRUFBaUU7WUFDckUsb0NBQW9DLEVBQ2hDLDJFQUEyRTtTQUNsRjtRQUNELElBQUksRUFBRSxTQUFTO1FBQ2YsTUFBTSxFQUFFO1lBQ0o7Z0JBQ0ksSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsVUFBVSxFQUFFO29CQUNSLG9CQUFvQixFQUFFO3dCQUNsQixJQUFJLEVBQUUsT0FBTzt3QkFDYixLQUFLLEVBQUU7NEJBQ0gsSUFBSSxFQUFFLFFBQVE7eUJBQ2pCO3dCQUNELFdBQVcsRUFDUCxxRkFBcUY7cUJBQzVGO2lCQUNKO2dCQUNELG9CQUFvQixFQUFFLEtBQUs7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
|
package/dist/rules/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
declare const allRules: {
|
|
2
|
-
"all-properties-have-explicit-defined": import("@typescript-eslint/utils/ts-eslint").RuleModule<"missing-is-defined-decorator" | "missing-is-optional-decorator" | "conflicting-defined-decorators-defined-optional" | "conflicting-defined-decorators-optional-validate-if" | "conflicting-defined-decorators-all", [
|
|
2
|
+
"all-properties-have-explicit-defined": import("@typescript-eslint/utils/ts-eslint").RuleModule<"missing-is-defined-decorator" | "missing-is-optional-decorator" | "conflicting-defined-decorators-defined-optional" | "conflicting-defined-decorators-optional-validate-if" | "conflicting-defined-decorators-all", [{
|
|
3
|
+
additionalDecorators?: string[];
|
|
4
|
+
}], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
3
5
|
"api-property-matches-property-optionality": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldUseOptionalDecorator" | "shouldUseRequiredDecorator" | "redundantRequired", [{
|
|
4
6
|
checkRedundantRequired?: boolean;
|
|
5
7
|
}], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
@@ -20,7 +22,9 @@ declare const allRules: {
|
|
|
20
22
|
}], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
21
23
|
"validated-non-primitive-property-needs-type-decorator": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldUseTypeDecorator" | "autofixWithTypeDecorator", import("./validateNonPrimitiveNeedsTypeDecorator/validateNonPrimitiveNeedsDecorators.js").ValidateNonPrimitivePropertyTypeDecoratorOptions, unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
22
24
|
"validate-nested-of-array-should-set-each": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSetEachPropertyTrue" | "shouldSetEachPropertyFalse", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
23
|
-
"all-properties-are-whitelisted": import("@typescript-eslint/utils/ts-eslint").RuleModule<"missing-property-decorator", [
|
|
25
|
+
"all-properties-are-whitelisted": import("@typescript-eslint/utils/ts-eslint").RuleModule<"missing-property-decorator", [{
|
|
26
|
+
additionalDecorators?: string[];
|
|
27
|
+
}], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
24
28
|
"api-methods-should-be-guarded": import("@typescript-eslint/utils/ts-eslint").RuleModule<"apiMethodsShouldBeGuarded", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
25
29
|
"sort-module-metadata-arrays": import("@typescript-eslint/utils/ts-eslint").RuleModule<"moduleMetadataArraysAreSorted", import("./sortModuleMetadataArrays/sortModuleMetadataArrays.js").RuleOptions, unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
26
30
|
"use-correct-endpoint-naming-convention": import("@typescript-eslint/utils/ts-eslint").RuleModule<"controllerPathShouldBePlural" | "controllerPathShouldBeKebabCase" | "routePathShouldBeKebabCase", [{
|
package/dist/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.js
CHANGED
|
@@ -16,7 +16,8 @@ export const parsePathParts = (decorator) => {
|
|
|
16
16
|
const decoratorArgument = decorator?.expression
|
|
17
17
|
?.arguments[0];
|
|
18
18
|
if (decoratorArgument?.type === TSESTree.AST_NODE_TYPES.TemplateLiteral ||
|
|
19
|
-
decoratorArgument?.type === TSESTree.AST_NODE_TYPES.Identifier
|
|
19
|
+
decoratorArgument?.type === TSESTree.AST_NODE_TYPES.Identifier ||
|
|
20
|
+
decoratorArgument?.type === TSESTree.AST_NODE_TYPES.MemberExpression) {
|
|
20
21
|
return ["dareslint__skip"];
|
|
21
22
|
}
|
|
22
23
|
if (decoratorArgument?.type === TSESTree.AST_NODE_TYPES.Literal) {
|
|
@@ -187,4 +188,4 @@ const rule = createRule({
|
|
|
187
188
|
},
|
|
188
189
|
});
|
|
189
190
|
export default rule;
|
|
190
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvcGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0vcGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0RBQWtEO0FBQ2xELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFxQnJELE1BQU0sK0JBQStCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDNUMsS0FBSztJQUNMLE1BQU07SUFDTixLQUFLO0lBQ0wsUUFBUTtJQUNSLE9BQU87SUFDUCxTQUFTO0lBQ1QsTUFBTTtJQUNOLEtBQUs7SUFDTCxLQUFLO0NBQ1IsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsU0FBNkIsRUFBWSxFQUFFO0lBQ3RFLE1BQU0saUJBQWlCLEdBQUksU0FBUyxFQUFFLFVBQXNDO1FBQ3hFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5CLElBQ0ksaUJBQWlCLEVBQUUsSUFBSSxLQUFLLFFBQVEsQ0FBQyxjQUFjLENBQUMsZUFBZTtRQUNuRSxpQkFBaUIsRUFBRSxJQUFJLEtBQUssUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVO1FBQzlELGlCQUFpQixFQUFFLElBQUksS0FBSyxRQUFRLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUN0RSxDQUFDO1FBQ0MsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksaUJBQWlCLEVBQUUsSUFBSSxLQUFLLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUQsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FB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
|