@roit/roit-data-firestore 0.0.32 → 0.0.33-alpha

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/README.md CHANGED
@@ -249,3 +249,16 @@ export class Repository1 extends BaseRepository<User> {
249
249
  }
250
250
  }
251
251
  ```
252
+
253
+ ## Firestore read auditing with Big Query
254
+
255
+ GCP Firestore does not provide a way to visualize the number of reads per collection, so with this functionality it is possible to save all the reads of a Firestore collection into a BigQuery table for further analysis.
256
+
257
+ Example (using env.yaml):
258
+
259
+ ```
260
+ firestore:
261
+ enableReadAudit: true
262
+ readAuditEndAt: '2023-01-19 15:02:10' (optional - after this date, queries will not be saved in BigQuery)
263
+ ```
264
+
@@ -0,0 +1,9 @@
1
+ import { PersistFirestoreReadProps } from "../model/PersistFirestoreReadProps";
2
+ export declare class FirestoreReadAuditResolver {
3
+ private static instance;
4
+ private provider;
5
+ constructor();
6
+ static getInstance(): FirestoreReadAuditResolver;
7
+ private isReadAuditTimeEnded;
8
+ persistFirestoreRead(props: PersistFirestoreReadProps): Promise<void>;
9
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.FirestoreReadAuditResolver = void 0;
13
+ const roit_environment_1 = require("roit-environment");
14
+ const BigQueryFirestoreReadAuditProvider_1 = require("./providers/BigQueryFirestoreReadAuditProvider");
15
+ class FirestoreReadAuditResolver {
16
+ constructor() {
17
+ if (roit_environment_1.Environment.getProperty('firestore.enableReadAudit') && !this.isReadAuditTimeEnded()) {
18
+ this.provider = new BigQueryFirestoreReadAuditProvider_1.BigQueryFirestoreReadAuditProvider();
19
+ }
20
+ }
21
+ static getInstance() {
22
+ return this.instance;
23
+ }
24
+ isReadAuditTimeEnded() {
25
+ const readAuditEndAt = roit_environment_1.Environment.getProperty('firestore.readAuditEndAt');
26
+ if (readAuditEndAt) {
27
+ return new Date(readAuditEndAt) < new Date();
28
+ }
29
+ return false;
30
+ }
31
+ persistFirestoreRead(props) {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ if (this.provider) {
34
+ if (!this.isReadAuditTimeEnded()) {
35
+ yield this.provider.persistFirestoreRead(props);
36
+ }
37
+ }
38
+ });
39
+ }
40
+ }
41
+ exports.FirestoreReadAuditResolver = FirestoreReadAuditResolver;
42
+ FirestoreReadAuditResolver.instance = new FirestoreReadAuditResolver();
@@ -0,0 +1,12 @@
1
+ import { PersistFirestoreReadProps } from '../../model/PersistFirestoreReadProps';
2
+ export declare class BigQueryFirestoreReadAuditProvider {
3
+ /**
4
+ * Big Query module instance loaded dynamically
5
+ */
6
+ private bigQuery;
7
+ private tableIsCreated;
8
+ constructor();
9
+ private createFirestoreAuditDatasetAndTableIfNecessary;
10
+ persistFirestoreRead({ collection, repositoryClassName, functionSignature, params }: PersistFirestoreReadProps): Promise<void>;
11
+ private loadBigQuery;
12
+ }
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BigQueryFirestoreReadAuditProvider = void 0;
13
+ const roit_environment_1 = require("roit-environment");
14
+ const RepositorySystemException_1 = require("../../exception/RepositorySystemException");
15
+ const PlatformTools_1 = require("../../platform/PlatformTools");
16
+ const dataset = 'firestore_read_audit';
17
+ const table = `${dataset}_table`;
18
+ class BigQueryFirestoreReadAuditProvider {
19
+ constructor() {
20
+ this.tableIsCreated = false;
21
+ if (roit_environment_1.Environment.acceptedEnv(roit_environment_1.Env.TEST))
22
+ return;
23
+ if (!this.bigQuery) {
24
+ const projectId = roit_environment_1.Environment.getProperty("firestore.projectId");
25
+ if (!projectId) {
26
+ throw new RepositorySystemException_1.RepositorySystemException(`projectId is required in env.yaml {firestore.projectId}`);
27
+ }
28
+ try {
29
+ const { BigQuery } = this.loadBigQuery();
30
+ this.bigQuery = new BigQuery({
31
+ projectId
32
+ });
33
+ }
34
+ catch (err) {
35
+ console.error(err);
36
+ throw new RepositorySystemException_1.RepositorySystemException(`Error in initializeApp: ${err}`);
37
+ }
38
+ }
39
+ }
40
+ createFirestoreAuditDatasetAndTableIfNecessary() {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ const TWO_DAYS_IN_MS = '172800000';
43
+ const schema = [
44
+ { name: 'collection', type: 'STRING' },
45
+ { name: 'service', type: 'STRING' },
46
+ { name: 'env', type: 'STRING' },
47
+ { name: 'repositoryClassName', type: 'STRING' },
48
+ { name: 'functionSignature', type: 'STRING' },
49
+ { name: 'params', type: 'STRING' },
50
+ { name: 'insertAt', type: 'DATETIME' },
51
+ ];
52
+ const options = {
53
+ schema,
54
+ location: 'US',
55
+ timePartitioning: {
56
+ type: 'DAY',
57
+ expirationMS: TWO_DAYS_IN_MS,
58
+ field: 'insertAt'
59
+ }
60
+ };
61
+ const handleBigQueryError = (e) => {
62
+ if (!JSON.stringify(e.errors).includes('Exists')) {
63
+ console.log('Error [createFirestoreAuditDatasetAndTableIfNecessary]', e);
64
+ }
65
+ };
66
+ try {
67
+ yield this.bigQuery.createDataset(dataset);
68
+ }
69
+ catch (e) {
70
+ handleBigQueryError(e);
71
+ }
72
+ try {
73
+ yield this.bigQuery
74
+ .dataset(dataset)
75
+ .createTable(table, options);
76
+ }
77
+ catch (e) {
78
+ handleBigQueryError(e);
79
+ }
80
+ });
81
+ }
82
+ persistFirestoreRead({ collection, repositoryClassName, functionSignature, params }) {
83
+ return __awaiter(this, void 0, void 0, function* () {
84
+ try {
85
+ if (!this.tableIsCreated) {
86
+ yield this.createFirestoreAuditDatasetAndTableIfNecessary();
87
+ }
88
+ this.tableIsCreated = true;
89
+ const response = yield this.bigQuery
90
+ .dataset(dataset)
91
+ .table(table)
92
+ .insert([{
93
+ collection,
94
+ repositoryClassName,
95
+ functionSignature,
96
+ params,
97
+ env: roit_environment_1.Environment.currentEnv(),
98
+ insertAt: this.bigQuery.datetime(new Date().toISOString()),
99
+ service: roit_environment_1.Environment.getProperty('service')
100
+ }]);
101
+ console.log("inserted", response);
102
+ }
103
+ catch (error) {
104
+ console.log(JSON.stringify(error.errors));
105
+ }
106
+ });
107
+ }
108
+ loadBigQuery() {
109
+ try {
110
+ return PlatformTools_1.PlatformTools.load("bigquery");
111
+ }
112
+ catch (e) {
113
+ console.log(e);
114
+ throw new Error(`Cannot use Firestore Read Audit because BigQuery is not installed. Please run "npm i @google-cloud/bigquery@6.0.3 --save-exact".`);
115
+ }
116
+ }
117
+ }
118
+ exports.BigQueryFirestoreReadAuditProvider = BigQueryFirestoreReadAuditProvider;
@@ -0,0 +1,6 @@
1
+ export declare type PersistFirestoreReadProps = {
2
+ collection: string;
3
+ repositoryClassName: string;
4
+ functionSignature: string;
5
+ params?: string;
6
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -27,6 +27,8 @@ class PlatformTools {
27
27
  switch (name) {
28
28
  case "redis":
29
29
  return require("redis");
30
+ case "bigquery":
31
+ return require("@google-cloud/bigquery");
30
32
  }
31
33
  }
32
34
  catch (err) {
@@ -53,6 +53,13 @@ class ManualQueryHelper {
53
53
  }
54
54
  const data = this.getData(snapshot);
55
55
  yield cacheResolver.cacheResult(className, 'any', data, JSON.stringify(config));
56
+ const firestoreReadAuditResolver = global.instances.firestoreReadAuditResolver;
57
+ yield firestoreReadAuditResolver.persistFirestoreRead({
58
+ collection: repositoryOptions.collection,
59
+ repositoryClassName: className,
60
+ functionSignature: 'manual-query',
61
+ params: JSON.stringify(config)
62
+ });
56
63
  return data;
57
64
  }
58
65
  }
@@ -4,6 +4,7 @@ exports.QueryPredicateFunctionTransform = void 0;
4
4
  const class_validator_jsonschema_1 = require("class-validator-jsonschema");
5
5
  const CacheResolver_1 = require("../cache/CacheResolver");
6
6
  const ValidatorDataHandle_1 = require("../exception/handle/ValidatorDataHandle");
7
+ const FirestoreReadAuditResolver_1 = require("../firestore-read-audit/FirestoreReadAuditResolver");
7
8
  const EnvironmentUtil_1 = require("../util/EnvironmentUtil");
8
9
  const CreateFunction_1 = require("./operator/CreateFunction");
9
10
  const QueryCreatorConfig_1 = require("./QueryCreatorConfig");
@@ -26,7 +27,8 @@ class QueryPredicateFunctionTransform {
26
27
  Environment,
27
28
  queryCreatorConfig: new QueryCreatorConfig_1.QueryCreatorConfig,
28
29
  cacheResolver: CacheResolver_1.CacheResolver.getInstance(),
29
- environmentUtil: new EnvironmentUtil_1.EnvironmentUtil
30
+ environmentUtil: new EnvironmentUtil_1.EnvironmentUtil,
31
+ firestoreReadAuditResolver: FirestoreReadAuditResolver_1.FirestoreReadAuditResolver.getInstance()
30
32
  };
31
33
  if (!(options === null || options === void 0 ? void 0 : options.collection)) {
32
34
  throw new Error(`Collection is required`);
@@ -44,7 +46,7 @@ class QueryPredicateFunctionTransform {
44
46
  .replace(methodSignature, 'async function')
45
47
  .replace('return __awaiter(this, void 0, void 0, function* () {', '')
46
48
  .replace(/yield/g, 'await')
47
- .replace('<COLLECTION_REPLACE>', options.collection)
49
+ .replace(/<COLLECTION_REPLACE>/g, options.collection)
48
50
  .replace("let modelName = ''", `let modelName = '${modelName}'`)
49
51
  .replace("let validatorOptions", `let validatorOptions = ${(options === null || options === void 0 ? void 0 : options.validatorOptions) ? JSON.stringify(options === null || options === void 0 ? void 0 : options.validatorOptions) : undefined}`)
50
52
  .replace("let repositoryClassName = ''", `let repositoryClassName = '${repositoryClassName}'`)
@@ -222,6 +222,12 @@ class CreateFunction {
222
222
  items.push(Object.assign({}, data));
223
223
  });
224
224
  yield cacheResolver.cacheResult(repositoryClassName, methodSignature, items, 'Any');
225
+ const firestoreReadAuditResolver = global.instances.firestoreReadAuditResolver;
226
+ yield firestoreReadAuditResolver.persistFirestoreRead({
227
+ collection: '<COLLECTION_REPLACE>',
228
+ repositoryClassName,
229
+ functionSignature: methodSignature
230
+ });
225
231
  return items;
226
232
  });
227
233
  }
@@ -244,6 +250,13 @@ class CreateFunction {
244
250
  const response = yield collection.doc(id).get();
245
251
  const item = response.data();
246
252
  yield cacheResolver.cacheResult(repositoryClassName, methodSignature, item, id);
253
+ const firestoreReadAuditResolver = global.instances.firestoreReadAuditResolver;
254
+ yield firestoreReadAuditResolver.persistFirestoreRead({
255
+ collection: '<COLLECTION_REPLACE>',
256
+ repositoryClassName,
257
+ functionSignature: methodSignature,
258
+ params: id
259
+ });
247
260
  return item;
248
261
  });
249
262
  }
@@ -1 +1 @@
1
- {"program":{"fileNames":["../node_modules/typescript/lib/lib.es6.d.ts","../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/reflect-metadata/index.d.ts","../src/model/CacheProviders.ts","../src/model/CacheableOptions.ts","../src/cache/providers/CacheProvider.ts","../node_modules/roit-environment/src/Env.ts","../node_modules/@types/dot-object/index.d.ts","../node_modules/roit-environment/node_modules/chalk/types/index.d.ts","../node_modules/roit-environment/src/EnvOptions.ts","../node_modules/@types/yamljs/index.d.ts","../node_modules/roit-environment/src/Environment.ts","../node_modules/roit-environment/src/index.ts","../node_modules/@types/node/base.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/node-cache/index.d.ts","../src/cache/providers/InMemoryCacheProvider.ts","../src/cache/providers/index.ts","../src/platform/PlatformTools.ts","../src/cache/providers/RedisCacheProvider.ts","../src/cache/CacheResolver.ts","../src/config/ClassMethodQueryMap.ts","../node_modules/class-validator/types/validation/ValidationError.d.ts","../node_modules/class-validator/types/validation/ValidatorOptions.d.ts","../node_modules/class-validator/types/validation-schema/ValidationSchema.d.ts","../node_modules/class-validator/types/container.d.ts","../node_modules/class-validator/types/validation/ValidationArguments.d.ts","../node_modules/class-validator/types/decorator/ValidationOptions.d.ts","../node_modules/class-validator/types/decorator/common/Allow.d.ts","../node_modules/class-validator/types/decorator/common/IsDefined.d.ts","../node_modules/class-validator/types/decorator/common/IsOptional.d.ts","../node_modules/class-validator/types/decorator/common/Validate.d.ts","../node_modules/class-validator/types/validation/ValidatorConstraintInterface.d.ts","../node_modules/class-validator/types/decorator/common/ValidateBy.d.ts","../node_modules/class-validator/types/decorator/common/ValidateIf.d.ts","../node_modules/class-validator/types/decorator/common/ValidateNested.d.ts","../node_modules/class-validator/types/decorator/common/ValidatePromise.d.ts","../node_modules/class-validator/types/decorator/common/IsLatLong.d.ts","../node_modules/class-validator/types/decorator/common/IsLatitude.d.ts","../node_modules/class-validator/types/decorator/common/IsLongitude.d.ts","../node_modules/class-validator/types/decorator/common/Equals.d.ts","../node_modules/class-validator/types/decorator/common/NotEquals.d.ts","../node_modules/class-validator/types/decorator/common/IsEmpty.d.ts","../node_modules/class-validator/types/decorator/common/IsNotEmpty.d.ts","../node_modules/class-validator/types/decorator/common/IsIn.d.ts","../node_modules/class-validator/types/decorator/common/IsNotIn.d.ts","../node_modules/class-validator/types/decorator/number/IsDivisibleBy.d.ts","../node_modules/class-validator/types/decorator/number/IsPositive.d.ts","../node_modules/class-validator/types/decorator/number/IsNegative.d.ts","../node_modules/class-validator/types/decorator/number/Max.d.ts","../node_modules/class-validator/types/decorator/number/Min.d.ts","../node_modules/class-validator/types/decorator/date/MinDate.d.ts","../node_modules/class-validator/types/decorator/date/MaxDate.d.ts","../node_modules/class-validator/types/decorator/string/Contains.d.ts","../node_modules/class-validator/types/decorator/string/NotContains.d.ts","../node_modules/@types/validator/index.d.ts","../node_modules/class-validator/types/decorator/string/IsAlpha.d.ts","../node_modules/class-validator/types/decorator/string/IsAlphanumeric.d.ts","../node_modules/class-validator/types/decorator/string/IsDecimal.d.ts","../node_modules/class-validator/types/decorator/string/IsAscii.d.ts","../node_modules/class-validator/types/decorator/string/IsBase64.d.ts","../node_modules/class-validator/types/decorator/string/IsByteLength.d.ts","../node_modules/class-validator/types/decorator/string/IsCreditCard.d.ts","../node_modules/class-validator/types/decorator/string/IsCurrency.d.ts","../node_modules/class-validator/types/decorator/string/IsEmail.d.ts","../node_modules/class-validator/types/decorator/string/IsFQDN.d.ts","../node_modules/class-validator/types/decorator/string/IsFullWidth.d.ts","../node_modules/class-validator/types/decorator/string/IsHalfWidth.d.ts","../node_modules/class-validator/types/decorator/string/IsVariableWidth.d.ts","../node_modules/class-validator/types/decorator/string/IsHexColor.d.ts","../node_modules/class-validator/types/decorator/string/IsHexadecimal.d.ts","../node_modules/class-validator/types/decorator/string/IsMacAddress.d.ts","../node_modules/class-validator/types/decorator/string/IsIP.d.ts","../node_modules/class-validator/types/decorator/string/IsPort.d.ts","../node_modules/class-validator/types/decorator/string/IsISBN.d.ts","../node_modules/class-validator/types/decorator/string/IsISIN.d.ts","../node_modules/class-validator/types/decorator/string/IsISO8601.d.ts","../node_modules/class-validator/types/decorator/string/IsJSON.d.ts","../node_modules/class-validator/types/decorator/string/IsJWT.d.ts","../node_modules/class-validator/types/decorator/string/IsLowercase.d.ts","../node_modules/class-validator/types/decorator/string/IsMobilePhone.d.ts","../node_modules/class-validator/types/decorator/string/IsISO31661Alpha2.d.ts","../node_modules/class-validator/types/decorator/string/IsISO31661Alpha3.d.ts","../node_modules/class-validator/types/decorator/string/IsMongoId.d.ts","../node_modules/class-validator/types/decorator/string/IsMultibyte.d.ts","../node_modules/class-validator/types/decorator/string/IsSurrogatePair.d.ts","../node_modules/class-validator/types/decorator/string/IsUrl.d.ts","../node_modules/class-validator/types/decorator/string/IsUUID.d.ts","../node_modules/class-validator/types/decorator/string/IsFirebasePushId.d.ts","../node_modules/class-validator/types/decorator/string/IsUppercase.d.ts","../node_modules/class-validator/types/decorator/string/Length.d.ts","../node_modules/class-validator/types/decorator/string/MaxLength.d.ts","../node_modules/class-validator/types/decorator/string/MinLength.d.ts","../node_modules/class-validator/types/decorator/string/Matches.d.ts","../node_modules/class-validator/types/decorator/string/IsPhoneNumber.d.ts","../node_modules/class-validator/types/decorator/string/IsMilitaryTime.d.ts","../node_modules/class-validator/types/decorator/string/IsHash.d.ts","../node_modules/class-validator/types/decorator/string/IsISSN.d.ts","../node_modules/class-validator/types/decorator/string/IsDateString.d.ts","../node_modules/class-validator/types/decorator/string/IsBooleanString.d.ts","../node_modules/class-validator/types/decorator/string/IsNumberString.d.ts","../node_modules/class-validator/types/decorator/string/IsBase32.d.ts","../node_modules/class-validator/types/decorator/string/IsBIC.d.ts","../node_modules/class-validator/types/decorator/string/IsBtcAddress.d.ts","../node_modules/class-validator/types/decorator/string/IsDataURI.d.ts","../node_modules/class-validator/types/decorator/string/IsEAN.d.ts","../node_modules/class-validator/types/decorator/string/IsEthereumAddress.d.ts","../node_modules/class-validator/types/decorator/string/IsHSL.d.ts","../node_modules/class-validator/types/decorator/string/IsIBAN.d.ts","../node_modules/class-validator/types/decorator/string/IsIdentityCard.d.ts","../node_modules/class-validator/types/decorator/string/IsISRC.d.ts","../node_modules/class-validator/types/decorator/string/IsLocale.d.ts","../node_modules/class-validator/types/decorator/string/IsMagnetURI.d.ts","../node_modules/class-validator/types/decorator/string/IsMimeType.d.ts","../node_modules/class-validator/types/decorator/string/IsOctal.d.ts","../node_modules/class-validator/types/decorator/string/IsPassportNumber.d.ts","../node_modules/class-validator/types/decorator/string/IsPostalCode.d.ts","../node_modules/class-validator/types/decorator/string/IsRFC3339.d.ts","../node_modules/class-validator/types/decorator/string/IsRgbColor.d.ts","../node_modules/class-validator/types/decorator/string/IsSemVer.d.ts","../node_modules/class-validator/types/decorator/typechecker/IsBoolean.d.ts","../node_modules/class-validator/types/decorator/typechecker/IsDate.d.ts","../node_modules/class-validator/types/decorator/typechecker/IsNumber.d.ts","../node_modules/class-validator/types/decorator/typechecker/IsEnum.d.ts","../node_modules/class-validator/types/decorator/typechecker/IsInt.d.ts","../node_modules/class-validator/types/decorator/typechecker/IsString.d.ts","../node_modules/class-validator/types/decorator/typechecker/IsArray.d.ts","../node_modules/class-validator/types/decorator/typechecker/IsObject.d.ts","../node_modules/class-validator/types/decorator/array/ArrayContains.d.ts","../node_modules/class-validator/types/decorator/array/ArrayNotContains.d.ts","../node_modules/class-validator/types/decorator/array/ArrayNotEmpty.d.ts","../node_modules/class-validator/types/decorator/array/ArrayMinSize.d.ts","../node_modules/class-validator/types/decorator/array/ArrayMaxSize.d.ts","../node_modules/class-validator/types/decorator/array/ArrayUnique.d.ts","../node_modules/class-validator/types/decorator/object/IsNotEmptyObject.d.ts","../node_modules/class-validator/types/decorator/object/IsInstance.d.ts","../node_modules/class-validator/types/decorator/decorators.d.ts","../node_modules/class-validator/types/validation/ValidationTypes.d.ts","../node_modules/class-validator/types/validation/Validator.d.ts","../node_modules/class-validator/types/register-decorator.d.ts","../node_modules/class-validator/types/metadata/ValidationMetadataArgs.d.ts","../node_modules/class-validator/types/metadata/ValidationMetadata.d.ts","../node_modules/class-validator/types/metadata/ConstraintMetadata.d.ts","../node_modules/class-validator/types/metadata/MetadataStorage.d.ts","../node_modules/class-validator/types/index.d.ts","../src/model/RepositoryOptions.ts","../node_modules/openapi3-ts/dist/model/SpecificationExtension.d.ts","../node_modules/openapi3-ts/dist/model/OpenApi.d.ts","../node_modules/openapi3-ts/dist/model/Server.d.ts","../node_modules/openapi3-ts/dist/model/index.d.ts","../node_modules/openapi3-ts/dist/dsl/OpenApiBuilder.d.ts","../node_modules/openapi3-ts/dist/dsl/index.d.ts","../node_modules/openapi3-ts/dist/index.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/expose-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/exclude-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/transform-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/type-discriminator-descriptor.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/type-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/exclude-metadata.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/expose-metadata.interface.d.ts","../node_modules/class-transformer/types/enums/transformation-type.enum.d.ts","../node_modules/class-transformer/types/enums/index.d.ts","../node_modules/class-transformer/types/interfaces/target-map.interface.d.ts","../node_modules/class-transformer/types/interfaces/class-transformer-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/transform-fn-params.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/transform-metadata.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/type-metadata.interface.d.ts","../node_modules/class-transformer/types/interfaces/class-constructor.type.d.ts","../node_modules/class-transformer/types/interfaces/type-help-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/index.d.ts","../node_modules/class-transformer/types/MetadataStorage.d.ts","../node_modules/class-validator-jsonschema/build/defaultConverters.d.ts","../node_modules/class-validator-jsonschema/build/options.d.ts","../node_modules/class-validator-jsonschema/build/decorators.d.ts","../node_modules/class-validator-jsonschema/build/index.d.ts","../src/exception/RepositoryException.ts","../src/exception/RepositorySystemException.ts","../src/exception/RepositoryBusinessException.ts","../src/exception/RepositoryValidationException.ts","../src/exception/handle/ValidatorDataHandle.ts","../src/model/QueryPredicate.ts","../src/util/EnvironmentUtil.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/metadata.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/call-credentials.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/constants.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/filter.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/filter-stack.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/channel-credentials.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/compression-algorithms.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/channel-options.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/client-interceptors.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/client.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/server-credentials.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/connectivity-state.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/node_modules/protobufjs/index.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/node_modules/protobufjs/ext/descriptor/index.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader/build/src/util.d.ts","../node_modules/@types/long/index.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader/build/src/index.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Timestamp.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelRef.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SubchannelRef.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTrace.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/subchannel-address.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelRequest.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelData.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketRef.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channel.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelResponse.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerRequest.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerRef.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerData.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Server.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerResponse.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersRequest.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersResponse.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketRequest.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int64Value.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Any.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOption.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketData.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Address.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Security.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Socket.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketResponse.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Subchannel.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channelz.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/channelz.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/server.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/make-client.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/events.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/object-stream.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/server-call.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/channel.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/uri-parser.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/subchannel-interface.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/subchannel.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/call-stream.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/call.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/status-builder.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/admin.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/logging.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/duration.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/picker.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/load-balancer.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/service-config.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/resolver.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/backoff-timeout.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/experimental.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/index.d.ts","../node_modules/protobufjs/index.d.ts","../node_modules/protobufjs/ext/descriptor/index.d.ts","../node_modules/@grpc/proto-loader/build/src/util.d.ts","../node_modules/@grpc/proto-loader/build/src/index.d.ts","../node_modules/event-target-shim/index.d.ts","../node_modules/abort-controller/dist/abort-controller.d.ts","../node_modules/gaxios/build/src/common.d.ts","../node_modules/gaxios/build/src/gaxios.d.ts","../node_modules/gaxios/build/src/index.d.ts","../node_modules/google-auth-library/build/src/transporters.d.ts","../node_modules/google-auth-library/build/src/crypto/crypto.d.ts","../node_modules/google-auth-library/build/src/auth/credentials.d.ts","../node_modules/google-auth-library/build/src/auth/authclient.d.ts","../node_modules/google-auth-library/build/src/auth/loginticket.d.ts","../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts","../node_modules/google-auth-library/build/src/auth/computeclient.d.ts","../node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts","../node_modules/google-auth-library/build/src/auth/envDetect.d.ts","../node_modules/gtoken/build/src/index.d.ts","../node_modules/google-auth-library/build/src/auth/jwtclient.d.ts","../node_modules/google-auth-library/build/src/auth/refreshclient.d.ts","../node_modules/google-auth-library/build/src/auth/impersonated.d.ts","../node_modules/google-auth-library/build/src/auth/baseexternalclient.d.ts","../node_modules/google-auth-library/build/src/auth/identitypoolclient.d.ts","../node_modules/google-auth-library/build/src/auth/awsclient.d.ts","../node_modules/google-auth-library/build/src/auth/externalclient.d.ts","../node_modules/google-auth-library/build/src/auth/googleauth.d.ts","../node_modules/google-auth-library/build/src/auth/iam.d.ts","../node_modules/google-auth-library/build/src/auth/jwtaccess.d.ts","../node_modules/google-auth-library/build/src/auth/downscopedclient.d.ts","../node_modules/google-auth-library/build/src/index.d.ts","../node_modules/google-gax/build/src/call.d.ts","../node_modules/google-gax/build/src/status.d.ts","../node_modules/google-gax/build/src/googleError.d.ts","../node_modules/google-gax/build/src/streamingCalls/streaming.d.ts","../node_modules/google-gax/build/src/apiCaller.d.ts","../node_modules/google-gax/build/src/paginationCalls/pageDescriptor.d.ts","../node_modules/google-gax/build/src/streamingCalls/streamDescriptor.d.ts","../node_modules/google-gax/build/src/normalCalls/normalApiCaller.d.ts","../node_modules/google-gax/build/src/bundlingCalls/bundleApiCaller.d.ts","../node_modules/google-gax/build/src/bundlingCalls/bundleDescriptor.d.ts","../node_modules/google-gax/build/src/descriptor.d.ts","../node_modules/google-gax/build/protos/operations.d.ts","../node_modules/google-gax/build/src/clientInterface.d.ts","../node_modules/google-gax/build/src/routingHeader.d.ts","../node_modules/google-gax/build/src/pathTemplate.d.ts","../node_modules/protobufjs/minimal.d.ts","../node_modules/google-gax/build/src/streamArrayParser.d.ts","../node_modules/google-gax/build/src/fallbackServiceStub.d.ts","../node_modules/google-gax/build/src/fallback.d.ts","../node_modules/google-gax/build/src/operationsClient.d.ts","../node_modules/google-gax/build/src/longRunningCalls/longRunningApiCaller.d.ts","../node_modules/google-gax/build/src/longRunningCalls/longRunningDescriptor.d.ts","../node_modules/google-gax/build/src/longRunningCalls/longrunning.d.ts","../node_modules/google-gax/build/src/apitypes.d.ts","../node_modules/google-gax/build/src/bundlingCalls/task.d.ts","../node_modules/google-gax/build/src/bundlingCalls/bundleExecutor.d.ts","../node_modules/google-gax/build/src/gax.d.ts","../node_modules/google-gax/build/src/grpc.d.ts","../node_modules/google-gax/build/protos/iam_service.d.ts","../node_modules/google-gax/build/protos/locations.d.ts","../node_modules/google-gax/build/src/createApiCall.d.ts","../node_modules/google-gax/build/src/iamService.d.ts","../node_modules/google-gax/build/src/locationService.d.ts","../node_modules/google-gax/build/src/warnings.d.ts","../node_modules/proto3-json-serializer/build/src/types.d.ts","../node_modules/proto3-json-serializer/build/src/toproto3json.d.ts","../node_modules/proto3-json-serializer/build/src/fromproto3json.d.ts","../node_modules/proto3-json-serializer/build/src/index.d.ts","../node_modules/google-gax/build/src/index.d.ts","../node_modules/@google-cloud/firestore/types/protos/firestore_v1beta1_proto_api.d.ts","../node_modules/@google-cloud/firestore/types/v1beta1/firestore_client.d.ts","../node_modules/@google-cloud/firestore/types/protos/firestore_v1_proto_api.d.ts","../node_modules/@google-cloud/firestore/types/v1/firestore_client.d.ts","../node_modules/@google-cloud/firestore/types/protos/firestore_admin_v1_proto_api.d.ts","../node_modules/@google-cloud/firestore/types/v1/firestore_admin_client.d.ts","../node_modules/@google-cloud/firestore/types/firestore.d.ts","../src/model/Paging.ts","../src/query/QueryCreatorConfig.ts","../src/query/operator/CreateFunction.ts","../src/query/QueryPredicateFunctionTransform.ts","../src/query/operator/OperatorMap.ts","../src/query/TransformMethodFromQuery.ts","../src/decorators/Repository.ts","../src/decorators/Query.ts","../src/decorators/Cacheable.ts","../src/model/MQuery.ts","../src/config/FirestoreInstance.ts","../src/query/ManualQueryHelper.ts","../src/config/BaseRepository.ts","../src/config/ReadonlyRepository.ts","../src/index.ts","../src/config/ClassCollectionMap.ts","../node_modules/@types/minimatch/index.d.ts","../node_modules/@types/glob/index.d.ts","../node_modules/@types/shelljs/index.d.ts","../src/emulator/FirestoreEmuator.ts","../src/util/TemplateLoading.ts","../node_modules/@babel/types/lib/index.d.ts","../node_modules/@types/babel__generator/index.d.ts","../node_modules/@babel/parser/typings/babel-parser.d.ts","../node_modules/@types/babel__template/index.d.ts","../node_modules/@types/babel__traverse/index.d.ts","../node_modules/@types/babel__core/index.d.ts","../node_modules/@types/graceful-fs/index.d.ts","../node_modules/@types/istanbul-lib-coverage/index.d.ts","../node_modules/@types/istanbul-lib-report/index.d.ts","../node_modules/@types/istanbul-reports/index.d.ts","../node_modules/chalk/index.d.ts","../node_modules/jest-diff/build/cleanupSemantic.d.ts","../node_modules/pretty-format/build/types.d.ts","../node_modules/pretty-format/build/index.d.ts","../node_modules/jest-diff/build/types.d.ts","../node_modules/jest-diff/build/diffLines.d.ts","../node_modules/jest-diff/build/printDiffs.d.ts","../node_modules/jest-diff/build/index.d.ts","../node_modules/jest-matcher-utils/build/index.d.ts","../node_modules/@types/jest/index.d.ts","../node_modules/@types/prettier/index.d.ts","../node_modules/@types/stack-utils/index.d.ts","../node_modules/@types/uuid/index.d.ts","../node_modules/@types/yargs-parser/index.d.ts","../node_modules/@types/yargs/index.d.ts"],"fileInfos":["721cec59c3fef87aaf480047d821fb758b3ec9482c4129a54631e6e25e432a31",{"version":"aa9fb4c70f369237c2f45f9d969c9a59e0eae9a192962eb48581fe864aa609db","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6",{"version":"e54c8715a4954cfdc66cd69489f2b725c09ebf37492dbd91cff0a1688b1159e8","affectsGlobalScope":true},{"version":"e34eb9339171ec45da2801c1967e4d378bd61a1dceaa1b1b4e1b6d28cb9ca962","affectsGlobalScope":true},{"version":"7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481","affectsGlobalScope":true},{"version":"097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd","affectsGlobalScope":true},{"version":"51b8b27c21c066bf877646e320bf6a722b80d1ade65e686923cd9d4494aef1ca","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"2c8c5ee58f30e7c944e04ab1fb5506fdbb4dd507c9efa6972cf4b91cec90c503","affectsGlobalScope":true},{"version":"2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"8d6d51a5118d000ed3bfe6e1dd1335bebfff3fef23cd2af2f84a24d30f90cc90","affectsGlobalScope":true},"b37a842dd3f6691d92264cf037cfcfd7b5febc9a28f37a207b5bdfcd96e72441","d223d2ebd552348d3751df9c96bc5761065fc14a575792490402cf41fb7dc3d2",{"version":"09891d8e03208bb67b2a85a2d15429bd959392288b828b864eb3f94cdad55bfc","signature":"34655455d402808d709b592192a3f649294b7da60a4765f932e57196d68f0f9b"},"69241d6be17babef52695a5e97084da44475e972dea649cfb3352ead8d566e41",{"version":"4a680a54c322402fb396df7012eaecfd866ee73a990e96a486e1603ca762af36","affectsGlobalScope":true},"091f417275a51ab3c47b949723e9e8a193012157ecc64a96e2d7b1505e82f395","1ad480dc0a8ae84b35939b701b055c941eb1ea50a71294bc81e8a2546954c8d6","bbe2107a96f15b2cfebcfebfc8933619cb285c43bf1ef6946f78fd92b2de6893","d511bac43e17db592bfb9977e691b095243fdc2e9262e87b1f6a79fcb994d290","d61d2d9ac04b86e0027ed05ff3f194c33f4d0110e52d30cd1e8b2ea18d7c7d4d",{"version":"2b4c1c2edab174e69cb47aa5fa242f271af0364301dec441bc4784039bedf707","affectsGlobalScope":true},"9bd7ca40555e47a583419e7bee28a299ead570dde06345c00b90b6dfbb36cb59","6f4e4e5a046171e70dfb4b1f3e6212de786bf2c1e2c4383ae0e61c4726fdd168",{"version":"1118439febc4afedb2a04744aee490e3125fff779bd17933a4e58548718c5d0a","signature":"0c54704aec06d3e617d48304a3cc659b9bbe0e2620c5f4f616935fed2826bfec"},{"version":"50a375ea6f7cafd0e737a7e759cf3cff97581f32c3431fad8d08dbc6fa00a511","signature":"3828e4444896ba50d8630a5530280c03c00d857b86d9c76b7449397bfa325d22"},"b53ec53e80a4383a89779f18480b71f2d9df3a8707ab991c99667c5cfd29fad5",{"version":"aca51beb4c35da24ed5de33fefc06346905fa3bcd9d8438e38b8f3eddee4727a","signature":"de13bcd2a1fbaf08bc2b0bf95fd8d29c47854eb444c643e8c3d434950a1f32cd"},{"version":"36a8ea30f8062fb07f836b63974b29904f14471afc5f401ab0078dc6c452c1d1","signature":"a19c92f08942dfd6c45d72483ef3e13b5333a50355046f0d72b3daae3ba086bf"},"292fd57ecc8da377035cc069faad7f98d54aada57217a7cd7868f6cb41a7e627","d224f2ef464cf2a544dcf6be6b416db5563aa5ca4c94e2a1d93bf3765c1f77cb","d3c0c471c298dc7115ada6c07f78d4fafb088523a301cb539c5cb44dae009954","86f89124a90fae1b90421bcce1e0ba58614383ca72403bfc03ff89761b050a4d","5a6fbec8c8e62c37e9685a91a6ef0f6ecaddb1ee90f7b2c2b71b454b40a0d9a6","f049af45e62625e0be51a3badd311110abf1ac8b23f56689e1d850923f6d9aac","84520c7da490e46a85f23aaeb2dbd02214f2c2eb7466cfa37f67b4e8486a3333","79ddbca11e8f46788b24e5f21e6db1b2a2f53609d931d52d0009d506f23612e9","8f9aee3462ad88fc6db8dc5afd8c6179fa7a805e1c023f27870bc792631c8345","b6e72a3614ea86784a0e067e612d7deb6e60139b522f3d90289b5e5b3c6adf87","a98ec21c1df89d5d5ed12c2e3441f1d80d72b3ce987467d31ecd3bd0e5afb6cc","8e7c8386c3700086085770ac298d37de34bd290db95938f5c77f1ab83fa67c52","9e5b8bb29f0e3ea3f2768bc073c9d979a9003a0588ecc8f8b070f52f0ee88457","c978beece24d0989cb2c82347587fe01ef5b768ce19582e450730d9fe748d1cd","6a64f52076638c5f170233050ac536dce1e5bca590019d488a8ea3ef8ba6306c","74645e4af7d3b2e7cd2c8bb0f6b4cd216dcf7387a7b63afc573206efe414522f","609c998f93521eaa6fd0ef12dbb2a64858ab09be15af9a62734fb65c64fd1c1e","622663a9039cfabf20fb0fd510fd5cb0cb4dcb7263d6919da1f23f6708bdfd5e","a362d189a45351ec80c492c630f3224e044e330d1efd8d67120c0217578a6630","877b2776294304fbc216977e1e278da726caf6269aeef63a805079bfcb2b07f7","dba7fd6142211dc70a91c3143533fac5067491a31512516d6bb090042dede4ca","e70e32a2b2cab598a449ddb510051c56dab5f1afad5ee4fa8df2148237b4ffdb","ff504dfbee8a8f4b5e0bb0a32c292ce0b152ea3abbf6752869e712cbde06bce9","b4c7d5c3949676c15da5455ca3724291a2a0d52aff243f2c8d01a72db7626a22","d8f256c8940bf0c866635aea13c1dbdee4198d8cd84e5be14acaf31df53e1497","056a46b665d629debf54b188ccff671214cb8460b1cf7ba99b60ef1526b961e8","b982d48019d8454b3034d8b5b06502b216908e644d430878d7818bfb96b7e8df","268056633de1e35b4c3747609844cae9dddf61c6dd7f87d90e8158736c117950","2809c8068fa8a780546d760ceb4d197243891fff0f107786e359b2497f11988d","46108c7ea7f7f7fe6291bf35f99c33036b347236cde33ee40c4410d9a2918730","dc390eaa414ee4e31ea90c5c3fdd321d8b89f7dfbf331db62e28d8e7bb31f0f2","c828fc02687f3794288bbaa813ec940ffb2ea86017fca59f47f39c4c5458ec95","0f48751b76dbdc60831ee6350bf7e52dadf2207903541b07e610b17a1ab91f18","332133b486037098c00d4dfa627ed8d312dc5f9a5a9693d86c489010e9749d91","3ff2dd07f8aa032e6eb7ffacd8f4e1f0b8dac4ba02c1f6ea1413187aef947ec9","1a99dd108fb76343c751f256d1892bc77741b984e7cd628e8c3a3c4e4054249f","edbc32662fd13b65ce92a5ffd68b57ddc1c6a2b4260894c85b35c2ebb3621c4f","8829c118c1abb01eed918bb4b996689cd6000e7e1dc51d6f5bef316c6c033090","890e75d39abff90ddf172e40201d1f2759830bb8b258698346d50f735c831225","115effbd878a17a8f6587a11594f1c56cf7d75efa90dbef086a6ef5aedb14b18","67cecb9adb483649b173000d1554b2708c5dbd52c10f6c52d10dd5568b6447ad","c67b4e78c6f4b36288a269e39bab4104a77f44352af53413a9c0d4d2a07789ed","ac376230d4fb370209ab531abd2a96c050c3182323ff5cd63f53f5ddf02e1616","3743f0fcbe90e3fc7c68913730263bf3b4fb29658b05695dfca50ea2812064fc","df127c6b901e2b622d8bc1c7fbb39db5ca1195727fc098f4d76127e2fad037c3","82bf6be5217035ebc5df8a551657b9998f07f40062c5d37f67a42dd884d56696","28a770a61db7c4f074b5ad13101dee11332d1d0720f97ca4855967b366086d81","0a4673ab6ddccd462225041e8c5ff108190ab2cfaf4a3c3b908466031c8e0866","7309a8ab83349bfc2adf7cda1834a4d4b0a923069ab95a6f098ff5e59c242932","016f0542c1a7e8508cb0123789d99271226454de7216c79837aea247c523a8ef","1429d42a27973ccf263889b852bc56174c488427a74697879751e45145527310","547e84b4791541dc2510b1a09454c5cd2cc1f90ac7aff66a7d6a9b162fa52ce9","fbfecc0238fff6c035b5fc098de559d21e2e1ff2214814d0ae9fd234a5e6d4f4","f2aae906e0494829e99185278b73c818eb6019a9b87bb3f51c405afc0382e8f5","f78cc3174fa71470f8eb01e9fdd73701cb8c92c389dec36852c8b73ed700cd0b","ff2ff324c2074f9420cdc02fb96f7f1bc3dc2bea1f46d9d25b052a3ba886a4ee","023710033c47af573c6647a8bc0894a75352460472bc28bcee06ab61651527d2","c3388c11eb52973d762ce92f41644d7205b171d9b24dbd5224b7cde7d527000d","356df04d29b5af772353acf56db5a65ab24ea8ce7bd1bbfff3eb173f459ab9db","1a665c362bbba84e89f6f7098d891dc14c20a9a748daf8be70c0ba7347c44aea","5c0633aed1ae93dd204159f5c80418bcb6b79ca3c5ced980d9f72e67e1c9e9ed","b05c76b104b6bc31d2acf590e85777c19c8d7dc4d374a70755693822ac6fd931","ccee8306cbca68f71bb2bd783975cd1c0051faae69cf39087106bc71ed53fc1b","bd9fa48bfdff39ab7371212f41aed2ea3149a715bd0efd6f3d4781fb2a3d136e","c260de8a899c8212def174496b37e5da1ef58321e0a5e398221d1ee8715c48d5","b45e16f34d11ce0183bfc936fbcb9801dbd30476f5701922f3e57e16f0dbea31","a8a197688403685e32bf99924c917b09ae19242be1d49ae5c3a35cf39f93088d","62184bc7c84b4df42caf05c4a709a89d921908595b476aa4f35d98846ca515e3","a82d35729dc511416f90479df5979b18afa59cc2972b89224f3582905663af1c","f08b724b61c71963f3902eb0974ecb4636f10628be53f8e6103183409c63f495","5ca69cef58fce948f89317741a5fa59d9ca22ae705eafd03fb3e4db4675900ba","8f2b2e5bcb20ed1ceff79d8caebd79697486aefd4ea452347dda192f373833a8","7038448102f09f54c645e8ee85fd8678e741b98d764a28149fc9bd8e803aadbb","ff207060c4f40f1de5d91872b05321cdba145146d6fe09bba048cbe33b830343","71db384f85832776db0380055e76f1cd1b41ea4c3066485c7cb9a0ce1cf7eb04","0492ac6a4a28d38ebae62509d0f01cfe70964ebeef8abd655161aad22bd28887","286789bb419383ff71ee57dd2a46790e6eff9870723f0e32058f425077c8debc","eb75965a983d174b61533493ed172d9df34b08570ed68a71562a5cb42bc40314","def4d3842e4847172281543a13fd6a902a1a5ba6e0d1f036e0529f3b7da18189","ad69818e3b1428edb40ac14f8279d949a121c8f506d44c546e4f9db3dd7f0a2a","7fdceecdee5835963b3fa3e3dfdc032f5b83e951ac8f08ea254a9b05c91b9034","69c795c8afb241763fcb603933fac8f34bec02cea939c40ca0b4ea2cce089402","283d333afe327d778d2af74735414a2a78abe0664f929fc6f220e8fa1c7342fa","d42578a8ba6a4b36b146eac7a7799c3bed6032c1ace7f83188e0edec264cfe72","50b8f7f132eed0b748aaa90cdeef18f6445908e58bc74e15291bb74425f1e9e3","4d8fc6373fe56eca2522244ddc0550cb0fc002209e76a752f94f5acc0d608c6a","68872f2a798516e617886b36971fa09180662017dccff4e835a31a8a164f2d7f","4ac8ddbe514f264702bb974a41a76954617f18fd43d5236bb0eb6e683af0fc4a","d91f48ceb2329ae017d2f6bf7fa8431a299b691b6495e22da4ee8af65d9b748c","1cfc8bdca30bb45d9965f3c60637f079d91a1e5546cf1340df0979f07c6123d9","b08778ca2cdf180eaf1f0c36981a509703e2460f502736fcc47e53e49d055def","adfd518e05d1ee1166986ec0cbd543786e033edfdc8144abc40ef78f85023ee7","cb01a81cddc90d064f6f1d2c502d04907c74cc5683933ecc5befcb312398b559","2b66e13af93391d05dfd4ca7eef3c43903b60e41dfa52b9be7dcf176e6df6395","8ff4402c5fb4866e02ec8584bbc4aff376562b5b721c160745546f812b29b84e","5ffb293a73418aced30688b02aa52f644a40bde6432dcfc10b64d80360b8cf67","8f4f9f281e42e7a72e0da0486a9a2c242fb8b3e081ff38fc00bafe18b3b7670f","003e2334b9027963b4d87a6e6d6769b6e83eb9b3f5d89c8a093de14f8fb9c4f5","3d9d811ce9a24290710966125d6851d96f33b9d19b451e6eb5dd38df0c968e4a","63a73f7d785b12a25f7356bd96b7dda12ab0fc0227a41eb6ed3a02910b22952d","38161011da6ca54bf0b4447d64db7e7aaf797a9e7a1132c914078d8a911211ea","b81e737e6d7003eaa010d1c6e67b138def60b0312f9d7c0aa0f556694e8c42d1","774dff81140ac6e9a7afb3d7d9bd0b12e4333e1c50aba99c85254f59eea14ed9","a7bbe9f3a96bea352e4e8898f3b260f33fcf003240b7da7431f30f4f23fa8be1","da9d576677e820f2a942f99ef3a15573f9ccdd73e2c39bfc43ea2aa31c5400c0","0b6744dec894641d7135709bb4b3b3520c6e324de853380b3a56f82a64c68616","567c49ba2988909079b9c504929192243f696db2211b8bd5d27ac2d5f939e4ac","6382d4f1298acb23919bfd100827d32510c830fd7670e771a9176aafb3972659","eeb6e2ba25bfa49402a38886aa782341ec612ef88d399249515513bd215bead0","a89e758512ad2dbeff724d5adf9bccda211a67390e8a87fdc67323f417f9a3ba","82595d6e8ee2d9a040fae439a705745bdd2ab2d09bc8ce203bf99c2e2667f0f9","2bfd7ff1210b33d9f468df551f04b7636895df6b1ce0f8f4adfddf79c7ba5750","a9a895f5e06c7d1f35ec0adc86f10c120d99bee81b9a4c70583df3bd2be035d0","ce4576ba53c48929ebe6cfc6e1c7f033825f24b31301808b5cc6d6dd28ceabed","651aac145c06589addd934be8f93acd7619c0f9a14efb17deaaab4416efb7702","9f098a0d7545b68be569dea9ca42d0a18fb3e622e25a6805a0780182e537ef17","b4f3b4e20e2193179481ab325b8bd0871b986e1e8a8ed2961ce020c2dba7c02d","c3527a55a9d355d5019ae948f9622690408e921a8bbf7b37bdad9f09feed7590","7a22ccbd71ad35fb9f292e00297b8df7ab033c411cbe7106d39065f26b4209db","8f29f65ce09040175a948aeb38af31f34367123903c49b556a76097bcb8fe813","8be85fd3849c702cd34aee594b4e9773dceca300cc358c63d75a3118720b12fe","bb71811f328b358d990e298006492de623964862240de7eb6342e5efb8aafae9","2b2201068a1be0cd0a6211b6175c263425431c9da9fb4c06a429a985aeb0bcd6","1d5f30cbd06ffa2aab22346b087e140f069851c17b91189be8d1e168d53f9f93","decae8f6edbe21a53afdc86107d16214e718dcee1baeeeb2ae57be9cc04ef286","9508fcc6616ea31bf848463f161571bcb0c8726b267a43e231f21fca775007e7","daf44d045f41c7dc023520708443bc42f914178fbaeb193a59b6acbe3183dc7e","e54119a21539e5c1d0c2e2bcb74fc42303cec7d28c00cddd2c5fef9686caca8b","ab135130c2e2f34a2bd54f69331a1a7773fcdb4d9cfdff9a23831dc4eb6c0a21","f5f9b4e141a2fb1baaa7c3256261292fda87bceb2d27adfd7c407d4750575ec1","1037017fc5dc0109d84ce24aa65eefff6cc9728c608cd1fc54212e4c2db18baa","2fd1f5f37a7da7c28e6e4ec088cca5c6882fe41cd2e4d512cd583ad35f11dcc7","b6e995b5ef6661f5636ff738e67e4ec90150768ef119ad74b473c404304408a1","5d470930bf6142d7cbda81c157869024527dc7911ba55d90b8387ef6e1585aa1","074483fdbf20b30bd450e54e6892e96ea093430c313e61be5fdfe51588baa2d6","b7e6a6a3495301360edb9e1474702db73d18be7803b3f5c6c05571212acccd16","aa7527285c94043f21baf6e337bc60a92c20b6efaa90859473f6476954ac5f79","dd3be6d9dcd79e46d192175a756546630f2dc89dab28073823c936557b977f26","8d0566152618a1da6536c75a5659c139522d67c63a9ae27e8228d76ab0420584","ba06bf784edafe0db0e2bd1f6ecf3465b81f6b1819871bf190a0e0137b5b7f18","a0500233cb989bcb78f5f1a81f51eabc06b5c39e3042c560a7489f022f1f55a3","220508b3fb6b773f49d8fb0765b04f90ef15caacf0f3d260e3412ed38f71ef09","1ad113089ad5c188fec4c9a339cb53d1bcbb65682407d6937557bb23a6e1d4e5","e56427c055602078cbf0e58e815960541136388f4fc62554813575508def98b6","1f58b0676a80db38df1ce19d15360c20ce9e983b35298a5d0b4aa4eb4fb67e0f","3d67e7eb73c6955ee27f1d845cae88923f75c8b0830d4b5440eea2339958e8ec","11fec302d58b56033ab07290a3abc29e9908e29d504db9468544b15c4cd7670d","c66d6817c931633650edf19a8644eea61aeeb84190c7219911cefa8ddea8bd9a","ab1359707e4fc610c5f37f1488063af65cda3badca6b692d44b95e8380e0f6c2","86f4f26e7e2e216f49db89fe0e5f66dc6966edb34b6bb3d0e93608a223b1fed8","4a62e901bdc1d3d523871a38ee07dacc0effe7fd8215c21d6a51fc2093322b48","3cfef0a604c9dfc2c07224b8cecbeeef9c2d5ccbd50b3d0e1eeab4fb68520bfd","605ea258c6c3b91cb0ecd5e4919a5b2a9bbe2f23ec3f142b5ad35a21346ffcd2","40cdf91e74e7c77dac9a17722a4a3b15b4f871e826cbe69526427b8506576ae0","38f2df96177845e42488a11d158b384ae8181c2b12ae0bc5330f1b533d90fd91","9df5edd54d4afc9bb695688921a05cebd8870619538c927cac7d395f4b6ec800","1cfadb9c4a495fad01ed62596448f4e18b0683dcc49762c2c3398b1b03a48806","bf3384492d133b72050ad33351cf775d9f7f52a5257a03b556da3c18f437dd73",{"version":"033d57edce704430d2e4ec84d7ec4f01924b04cfbc2f61a8378543d149bee2a4","signature":"5ba04081d5f823f0208b19da4e77b80cd823c95bdbd46970bed4c5f8f46d20e8"},"152b81b748a92d98dd7c46545e6ba1c44dc5be517534395e0d9fef82554b64b8","a7607ef485c11c0381cf58624f91e63346bcb41709b8e880b5cb1961e4b9de51","9e3cd884f7eac19b502dd0edfe29ae6b3021a491cd7eb8a530d63c34c367a783","3c0a3b2401dfd932551257b4cff1fe61e36da660ed359c565a56db1877773a77","181694d1f7a579e57c55efb1418904efc513ebce0b08601e94f288674104359e","f26f7ce74fc73d3176941bb4172450cd97e34787ae584de49c2d16c191cb37fc","e7f5e282da2ddeee8bbc6671459c35dd3144e0ab23a0abaaf77db598cfa896ee","4801a5fb4f8b7f0897189c79cd6d3fedb99a43a4604e9dd76c0cd92d4eb269ee","eed0cfbd238f0f9def37d26d793393c8cfb59afe28ecd1a4639a58905abdadf1","79cda812e4d3e249cbf90015a050ab333aaa41af08f143276aa0862dde976dbe","9a12e92309c84ef3d701bb9d01813e4bdb1a850136710be03f745fdc77df7ff3","1f4b26b6651d390085bc11e982a36d21e57a0fb34ad9e2910041851f47a02773","93b6c52c6e42184dae94619aeda58da74219cbef411e2aca4301c8da7647340b","416eec23b202526964d0f5ebf0ca9e0d8c08e4260bc0946143b66f1a1e17b787","688c9dfd2b7114f5f01022abb5b179659f990d5af5924f185c2644ca99fe7b77","f17c007d95f666ecf664ff13ca8efc196980597c4ca152a0baaa82b2525e2328","02ff761f690163463a4e7594d666e4c73995c4f72746a5967b3477d9ecf62c4e","0e60e0cbf2283adfd5a15430ae548cd2f662d581b5da6ecd98220203e7067c70","473d9269f1f277be1e222b80b5912b26f924efe13c1f418e569617ec34342720","f5b284ceadf71472a8fbf555dbd91079cce0ce7ba54f65dd63d18deec84cd11d","11f848107bc2f7535adccd37b55f018a0f18abbf5a1cd276f5776779618c37ed","8f47ed340254a8ccdf37035d9cba70f53a4d899804da840b47f4c3b07a7b2063","e5bd26052c0f4b600728cc41f03f00c20776d5dc53e8226600e0bf1dbcd66220","50b54f6dac82c34e8c12b35eac220ccc178f51e84813179826da0e3e96283af9","0c112f7206883caa95fa6b4558f3d05141d61910c05379660e1493b716a88656","6fd6fcadeab3b973ea52c2dbfcc960f23e086ea3bc07aaa0e1c6d0d690f8e776","6dbc7c87a2dfb95c594c5da54f7a8081f3019bb1bf6dcd72eeb6239ee0e243cb","a59fdd5525468b9afe1fef2238f5b990c640723bd430c589b4c963d576209be8","23c0f554c1fab508370678aca41cf9b1d6a6a00069e499d803d43387067fea9d","016f140691ab5fea3357a89c6a254ff8ada91173d22d36921bb8295fe5d828ab","ee219b4332439451cbf9ee34584e8a7e67be35d8ed3d1b292769a09483a102ce","305c2373ff739ceca5780a204766c76617e74b551f6fc646a358b5f687a77333","61c5821b70e113b15f24593e7061e6302635448ae700d813f06560ca5f140727","1e127052ae269b7f278b828978b962eb93bbc6134c0bda8b03e3f39df5c3865d","716cb84b8b410c52de9e7b310b2125cbc390a7c59e929a5c0a29514345b9ba9f","edabf50cfd2310b9af7214ecb821e0af6c43f66d8b5fb297d532f27bba242088","1687d528ca6c51a635f9a4022973f472221700464be83810788238a595cb588c","32162214c3f25748f784283a3f6059ad3d09d845faccc52b5c2cf521eace6bd6","4a13f78f265e7deb260bd0cc9063b9927a39f99f7cc8bb62b0310aa3a1df3efd","c04c509a58cc86b654326592aca64d7ceab81a208735c391dd171ca438114ea9","74c6a2352b00e41d352cc23e98e8d6313d5631738a5ea734f1c7bff0192b0f47","fc94bcfb823846ba8b4c1727520a3d509c9f517d4e803dfb45e6a71b41000eb8","93f9f2f55cc8393683048c720e30bc416bc3589a5d3f04a24d8bdc2d29c08589","e4c09f8a818679f80931fae1d0ca3dec192708c510c9f33fe56d71abe8337c59","b1cc0dfdc0455283ccf003185dbbc51e2c15299aff343413310eaf45c4572323","196f3c5da872983f8f0d2242c2cecc4fae85684d887ae1eef6be6b13b4138233","970c9e6d3c4184ca0c36d86dc29cc3e7b151d6aa4c1f2185fb97650b05a07055","af4beeac0e879b673f8b874e5fe013bdebfb17f0213142e5037ac90aea86d636","c620ccd98c18e71d7e39a79bea47b4f4724c3a1f30f78d2cdd03cf707ae64e4d","150f375c7f5c01a15d531c961468f1a04a1c21dc4e4a372ca4661700d66cc9c2","8aabc7d8676ba6098fc30c95eca03a331df41ac4c08213207a9329998f32d1b0","9d8464e1c6b7f30c4121d28b11c112da81c496c65e65948fbc7d5b5f23b50cdc","6b88a632af960a4140730527eb670c3d3e6eae0da573f0df2849909d9bb3e5f3","ab2f4f2d874d18918f0abb55e5a89a36ab875e01e3e9efa6e19efbd65295800b","2212906ab48ae8891080a68a19ba3ab53a4927d360feb34120051aff4ae980ae","57fb7ca63631577603d247484cb716a44aaef2fed76ff4d39db23391fc469695","ccc635892c2121c569281e8605f63b964d9067d8c560fdd0d8c0305aa3436b0a","56abe182c8ac81afc695eeefc9dbf6a637c8a8365b672053746678a3bfc6ca7c","df4b5e6fe2a91140a1ed2f8f94e01d4c836a069cee23a2d0a83a00cf649f8505","a43ee2d0bc49ad3cdc9a12c9e284adca7ecd30688dbffdbbd4b75244af498231","480afcb2c1ea07d5a33101f39ee49c4e433df5279bcc901c86299ed51df066c7","58add5da26530fecb38667d08702a6ce8c0387ebb1d685f35caba5559d365bc5","9bbcda8e62203eae2ff2f7ff61fb443222974c125f6e0e8a280ab8765d55b5f3","1cd3a865010365344f689258ccc229341c5610bd036cdf51a0369e78a2cc297f","2babba65e6d8e6b0303d5e7ba9ad221c89bda004d2e703eebb8884e342bfba27","52946a32d09191026f3c889bdfc1e0fce88dda141472a8d8a60aef9d83502b7f","2300d5812cfd6747c34de25950a11a84c0cb93dd5613b46a74cf1422d61d3c9f","febbe46be2865dfc342fc690fc91311eacf3f4f6c4f83fa9ca32c27581c016bf","f64fff46fcd20e44ed057398a9872269bb547d85eb6a40050f8b6794d2ef093f","bc5626a4f279345cc49bca110c83adb6885d74044f818abcfdc11802c569ba1b","baef294f6ea8cfd7e45932669b7cbc6aa1621d3ae6d2c9515acc3ea484fb4be0","7e6aa4667eefa889cbd66fa1cc50f432f674d32a6e9f58a7d2beedd34c9f44a6","c97e0165511e0fa9e4da49681b649c9b846200811da3101d41876c1df166287a","3fb1a6b4a14f2a08fc360d0891db68a4643b393262af448a0811d4acd150490b","79c15e25133240ab56678614a2705cba30578b93c0c2ea6c07e86d87c7ce26d1","fde15ccf34319bfbbd71a8453a9121f4161908668caf13740fa38af176e41a00","76ead0d03259ad18a7263ffbc74f38f74799ee98d46dbaabbb2db35f15d0adae","64377a93588b37bc8e0a09166b7078e7ddfa59010b15710941c3c29475728097","e2ac01d9d3742f9514c692d9ebe96af7f7c7df07ca38f40e456d214f72f475db","a7022bab77511e11e629442479fb478b3433ae15af2b70d02d5d4fdb1f2a38d1","1558c642e03689d42843e7b047b9c20e77ee09ab388ff854484db5dcfbed11da","f17c007d95f666ecf664ff13ca8efc196980597c4ca152a0baaa82b2525e2328","02ff761f690163463a4e7594d666e4c73995c4f72746a5967b3477d9ecf62c4e","473d9269f1f277be1e222b80b5912b26f924efe13c1f418e569617ec34342720","2859adaa4f2db3d4f0fc37ad86f056045341496b58fba0dbc16a222f9d5d55b1","655ed305e8f4cb95d3f578040301a4e4d6ace112b1bd8824cd32bda66c3677d1","f4ab8874e2d8fcfa22d239e84c59d00b7f4f3a4a14f4f06d7974b9512c59e9c3","8da65c108ea40f3009b7c00ac811efa43e77e7a2afb2471a69526ca9192e9849","cb789da1f75dc9d53848949aed3bb1d521de13c6340e5792a6b3f2c5e0c53e29","82b70e72d3e16b95c6f933b0d146240214ef01dfe8e270f6e50f349223b0615d","e4f1aa581dce6c84a244b5b5f1160f6e7465d0c6d48948ff6f1069a630fe9925","60b042f1a2a32d4d5e065e7fb229399562b9949984e63e09fd6a42dbc8e22c35","5f07468c2f5315f463874d73b8293cb135b228f59280e164a840e5d919b565fa","f025aff69699033567ebb4925578dedb18f63b4aa185f85005451cfd5fc53343","9b9e004c2bee844a5a58e8803a1ae0c8075a2caab3d567f69a6eec72f154626a","64cc158e07ce953307a95ee711b67fc8cd980380d12aee33670d483ba6f642f3","01b8fe09ea0b18ceba458308fd349bd2545227995c1b370a6897ea7c8f4ae577","a24a9c59b7baecbb85c0ace2c07c9c5b7c2330bb5a2ae5d766f6bbf68f75e727","2ee6c6e12729bd41bf99cd5a1158650d3afe9cd435e2d3ce6746de2dbf93a2ad","4484870aac79f12400497cea19aba493150811f10eb720f4cd52095d928ebe6f","e9203259c5f820618a0c10df0e0e28df87f2469770461540919b23d864b0e2f8","faa0ccaee1e4151600c618b91f22e29d7c3090555841fbc7cfcba0bb8dc78dda","23809dc5154c50a704bf5903da3cca5e2d8770f9a8ac77217d5cebc494eebeeb","363b99235b46cfdd75b8308c71c1ff2d492e383593350b33f307e0746aca3789","6df3174b7fff6ce47402ffa987624c82c772afc5bcbc68d7cecc3d08406278a2","9d47eb88df11d4e049b2bb0b7236944cf4a517444f805e0c2f9f00b5b8a722ce","42c3d521301dba91d2841f7f176b8803e5524c6cf7ce6a90b6708385f2ece433","71725ba9235f9d2aa02839162b1df2df59fd9dd91c110a54ea02112243d7a4d9","2260e58465ee7adc7184c7e3011bd6f69e5dfa4c9847e1f1c5d2c5fe39b5c50c","e38903e3ceaa0b1ad18686596cb633f37112b4c1e421dbeec709a0393abab34e","f0cfc87e830959608e727239836d9e0c759894b419758961839d308c42b79b09","6ae375916cb1ab039b0d8191a1b2a4c5ee7d54ca55523edf9c648751d9bf4f3f","75efaf7dee18ee6d8f78255e370175a788984656170872fd7c6dfba9ed78e456","dd8bd6e49db072bb7f67a50fcfc2ed85da25216e8357f69662785ec9cff6805a","0532ceeb57a03056a1db9ef93c44e2b6868047b9e77e3ce94a82cfad3ac764be","5b016a20523753fb55e44223ad7e4f2728a3d6b83771e8f2b52a3212d612f494","fc831788d78ccee85562cbbdca8dbf955dc1540d9bc33525b7cfee9be2732de7","e73d6e940ebcd5418bc881ec9f3eb2c9beaf089673a1dda5ec9d74f8f3a674e3","f9a8a74a3277dba5994b7830faa0a72ccbbdde4edc546579ea5f3bfdd833f1c3","6396e07ac9d5653e2ea225c491e7d5b548165eddb49e4293dcad42445fdd2b5b","4356f53b3bcd48f4253465746ccdb0baa38c6bf929712349bffea5426e59c2f4","c07dcc52ff4bf2fe6b9027067089b2696ea8debfab01c5a89567b57c85a8143a","01c7b17b4106823329939ac4971770aa720b35749401312a9c6610ba61a689f3","bd950bd6332b0ad5bc3705374665c44bd87f3018774aa62c05bcd89788fed40a","6ff08a01c33e70289d44268bb3954c9f3c71162085b829dc323279fbf3a70b2a","25f989f57da0150fc531eb60696097517c300e41c48f9a35cf8c39a2884e9e9e","932cade1c5802123b5831f332ad8a6297f0f7d14d0ee04f5a774408f393e2200","fb22796881ca27b61f649e17d8511814ec740e0b53cc6a1c7d3ddb4e37ca840f","33336c1c320134b37d9f2981944a0a20807adc566419f2c2f864faf090886d1b","29e9716dd95e62c62d4a1bc945947978f3fbaa74a58b74e2ee295f98819cf2dc","3143e9ab69bc3de6addad59d87d6ec39287c3ace7573aafedd711b446060dcdc","b97c43cc5c758375c762546242bd2e5dfecea495d11e7ab8670cdf7800a78a55","76e8204d6c3f2411c8b0f3e0db34e190880acbc525be4facf882abac3c6e9868","cf09d50994d492c9b49980e8a1e8b6296f8c3b7cfba248fb0a0705fcbd0066de","a7d8688d9233bd072030b3cbb02a32c045f21703d83a9588f9e0da388554c099","75191cd4f498eecaa71d357b68f198aabff6e9aeb094783bc2e88224f2440e91","68ab7ba45dd13e321f9b4ffa2cc9092c66c8a32eac53f8268ef992c9d83bddae","b0eca460992491df024ff9e11c06c57f83d8f389edfc37f343abbf1760133020","571feed5f3992f4e5f52368891259c9675f387e062be59b4fe4064c4fa12189f","88ab5c0465b89250245fb97b17192adbd7d3ee26b26e29f948a410c4dc554663","e2b2b5211b339ddcd1f1c80a80ac970090a969770b7931ab6fb6641d0321c0d2","d5547676ace66ee69a2f115546f63c8df3aa08924dfe3c5330adc309f9e88db0","35f382d45192c13ffc63e6b7349bf9eb02d62db2b4ee12b5cf3806d7fc7268f7","d3cfab7286ea31393cc979667efd26fe307af4f0ad8c5df262c8be322a2cbef5","95874c2af12afd52e7042a326aef0303f3a6f66733c7f18a88a9c6f3fa78d2ee","8d5ad6a07dc84c0fba4041cba09bfc9c75bc06b04e8843405e3fb2456c721438","e680ff882bccd2bb6574128a17e1a32d7a49b8eb161a9a739dd60f8362e3d4d9","a4d6781f2d709fe9f1378181deb3f457036c7ebc7968a233f7bc16f343b98ced","aa7d0095b9763a3b47c1851036d87152872a3d7f1733732b0a0e14655b0ee34b","74c58bc6847528c4349c884453f3c604b7d1cf4f9df2ba4816ea1b35e0ddea3d","650e65e5459ca1f2ac14e3159f698a75e44025e0cf736aabc120962b6027b243","51143dd06200d0d0670f19cf38bb0c8cc9e0c2a0b1ad86dc517d68e8fdcaec89","d52e8b1f1b5eec0aa771eeb11b56c5ee3bc310b40619c9aa5e9dfd47cd294c7f","df36b61b42f520aae6a0648a0113c9b5fc8edf20ffe1b38c2143f6bc3777bc6b","aa8b0c5153f089b9d1ebd06eefd5223728e52df664ca5c64abe2736fd3c15b95","8cab00e89567640fcfccaa32fe0ce060e87ba452730c1d609005cf1e577eb262",{"version":"1ace17751d70faeb553e6c2ebf24b6a966c624530c5a329cd43fbb4ba9791dd8","affectsGlobalScope":true},"57c088bde14f28759bbe0592b144e721cc4157e0a56e8525a21f73aa6a8a1895","8d1daa090c8d6ef835bd07b8624d77c6fc72b550f64f8f48a8275d79aa024dd2",{"version":"daa4cf75b1aafc5227314bc8b0cf998242c04534fedf22e4bd2a3ac8681c2cc9","signature":"60de895c7cce0f4f695797a2ff1669bbb65c41eec3df0e44a8c3f137de84d2a6"},{"version":"f723fef3f8f481cdc6237e72a267c05f1ad7bc86641e7c5293129395dca3dfb7","signature":"634c3acd4420c2714a9d9995ab90bb51d6ac87b875b72b11af3acb9bfb78a14e"},"eedf623d3dc5b1868d1262188b2539b4cee3565a0efab4b13fa2f63de2b74eb6","ac202c5534a939893a35623bd55dcbd2883f4b95f68d0b2b9e38d8726be857c3",{"version":"b52b80d11f309bccb1c5fc968f24039fa3c6f94886ae65a6778ac89e1de7578c","signature":"4e5f84c36f03a3255abdfe9601e0111a63866daaa6c05b7e2b92939f21591671"},"48104d634621ad9262978a994ca2cd4a8c85b967db9d55e792f9aab35a4d6eb6","2e7eb8626a2b1fc1af21fb1d2bd319f0b5734e9c61e8623c10fb966ba3ed63d2","e4a3f8a2d17619a682f316b297172bbfc7b9f37cc10a7b1c8dc667d03157cc99","85dfc66d7717ca206042bd0ea7dfe8f7304cd94a5687ba6c786320f0c3d4a851",{"version":"ac3fe74e1625a7c9d491b6a7ce0f83821b42fc14a538eac854f590b40dc8bdde","signature":"5039123e48dc32f1efe557fe6a7f23db63d9dda69b8e04781fc47f3e52b5a204"},{"version":"68a2099f7616c8289ec91a19a417f1db2a4b974e7b3b6fc1313e23a2dc46e54c","signature":"8260cd48afa94d36503d9d4cd02970ec9ba86b6eea9efbb87bee0168937560df"},{"version":"d11bda81ace04f45754586a2eed55006f0b8558f85af7b570c81a1167ebb919d","signature":"a4f7274c26f563078d2cd8ad2ead4f6719c9c5b50d98b0a30ab376f9c335b4cd"},{"version":"d55d2c5bc75e60302ac506f2140219b1facbfc752d1cb28f1777f41aa90fbb3c","signature":"d1d57fc8a97d965cef996bec8643333af963cabb0161760dd7818eba1c4465d1"},"a06034f1c97c900e3b04aa259e6e44b83a6d806c4ef7370d97230e209639aba1","963d59066dd6742da1918a6213a209bcc205b8ee53b1876ee2b4e6d80f97c85e","a55ca8b5f8c6a8535bb26fac1e10132a5338234ca3d5b9ed739fbc8ef41c8075","639158c94f9813ac0ef48abc5e24788b5acce74e961ad6d9ac30c18273965bfe","40644bd969bb2ed15b52a94216ff5e8a5d6e42c92d7172a585813e2ff429fa37","ec0f7e00b3a3aba82da9aba482c5717e7b4b9b70f3966bcdb16f2be374417437","760cb9b76ab53a2f704ee0e731e162bcfc6af609f5e400a668efe2cc7923e4f4","cc957354aa3c94c9961ebf46282cfde1e81d107fc5785a61f62c67f1dd3ac2eb","7ec238b220ea991b6643e24191b1f552a65956d5f6de4c6144e700b9985265d8","93de1c6dab503f053efe8d304cb522bb3a89feab8c98f307a674a4fae04773e9","dae3d1adc67ac3dbd1cd471889301339ec439837b5df565982345be20c8fca9a","5426e62886b7be7806312d31a00e8f7dccd6fe63ba9bbefe99ee2eab29cc48a3","3ebae8c00411116a66fca65b08228ea0cf0b72724701f9b854442100aab55aba","8b06ac3faeacb8484d84ddb44571d8f410697f98d7bfa86c0fda60373a9f5215","7eb06594824ada538b1d8b48c3925a83e7db792f47a081a62cf3e5c4e23cf0ee","f5638f7c2f12a9a1a57b5c41b3c1ea7db3876c003bab68e6a57afd6bcc169af0","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","d8aab31ba8e618cc3eea10b0945de81cb93b7e8150a013a482332263b9305322","462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","7adecb2c3238794c378d336a8182d4c3dd2c4fa6fa1785e2797a3db550edea62","dc12dc0e5aa06f4e1a7692149b78f89116af823b9e1f1e4eae140cd3e0e674e6","1bfc6565b90c8771615cd8cfcf9b36efc0275e5e83ac7d9181307e96eb495161","8a8a96898906f065f296665e411f51010b51372fa260d5373bf9f64356703190","7f82ef88bdb67d9a850dd1c7cd2d690f33e0f0acd208e3c9eba086f3670d4f73",{"version":"ccfd8774cd9b929f63ff7dcf657977eb0652e3547f1fcac1b3a1dc5db22d4d58","affectsGlobalScope":true},"93c4fc5b5237c09bc9ed65cb8f0dc1d89034406ab40500b89701341994897142","b0d10e46cfe3f6c476b69af02eaa38e4ccc7430221ce3109ae84bb9fb8282298","fab58e600970e66547644a44bc9918e3223aa2cbd9e8763cec004b2cfb48827e","70e9a18da08294f75bf23e46c7d69e67634c0765d355887b9b41f0d959e1426e","6ba73232c9d3267ca36ddb83e335d474d2c0e167481e3dec416c782894e11438"],"options":{"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"module":1,"noImplicitAny":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","skipLibCheck":true,"strictNullChecks":true,"strictPropertyInitialization":false,"target":2},"fileIdsList":[[373],[346,348,350],[275,278],[28,29,344,349],[28,29,344,347],[28,29,344,345],[29,212,275,276,277,278],[373,374,375,376,377],[373,375],[28,29,368],[28,29],[380],[381],[386,391],[28],[28,29,369],[396],[279],[176,184],[175],[177],[184],[171],[168,169,170,171,172,173,174,177,178,179,180,181,182,183],[176,178],[179,184],[17,167,187],[17,156,167,187],[156,167,187,188],[159,185,186],[41],[42],[41,42,47],[43,44,45,46,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150],[42,70],[37,38,39,40,41,42,47,151,152,153,154,158],[47],[39,156,157],[41,155],[42,47],[37,38],[28,29,280],[28,29,281],[281,282],[28,29,283,284,286,289],[289,297],[283,284,286,287,289],[283,289],[289,297,298,299],[28,29,283,284,286,287,289,290,291,292,294,295,296,297,300],[289],[287,289],[28,29,286,289],[28,29,286,289,291,293],[283,284,285,286,287,288],[29],[284,286,287,288,289,290,291,292,294,295,296,297,298,299,300,301,302,303,304],[283],[212,275,278],[306,308,309,316,329,332],[28,29,306,308,328,332],[306,308,310,329,331,332],[313,314,316,332],[315,329,330],[329],[305,316,317,328,332,333],[316,329,332],[310,311,312,315,327,332],[28,29,275,278,305,308,309,316,319,320,321,323,325,329,332,333],[29,322,324],[331],[29,275,278,307,333],[28,29,206,274,275,278,305,332],[301,305,318,324,332,333,334],[274,275,278,305,306,307,308,309,316,317,318,319,320,321,324,325,328,329,332,333,334,335,336,337,338,339,343],[305,318,324,332,333,335],[306,308,310,327,329,332],[275,278,316,325,326],[28,29,306,308,317,327,329,332,333],[306,308,310,329],[28,29,301,305,306,316,317,318,324,329,332,333],[28,29,310,316,329,332],[309,310,316,332],[28,29,329,332],[251,252],[197],[29,197,198,199,200,201,255,256,259],[28,29,197,205,253,254,260],[28,29,198],[203],[197,202,204,208,250,255,260],[29,208,218,219,249],[197,198,199,206,252,256,260],[29,197,198,202,204,205,252,255,256,260,261],[200,201,219,257,258,260,263,264,265,266,267,268,269,270,271,272],[29,197,200,260],[29,197,260],[29,213],[213],[29,237],[215,216,222,223],[213,214,218,221],[213,214,217],[214,215,216],[213,220,225,226,230,231,232,233,234,235,243,244,246,247,248,274],[224],[229],[223],[242],[245],[223,227,228],[213,214,218],[223,239,240,241],[213,214,236,238],[237],[29,197,198,199,202,203,204,205,206,207,208,250,251,252,255,256,260,261,262,263,273],[219,267],[219,267,273],[204,208,219,250,258,266],[29,199],[29,202,204,206,251],[28,29,253],[197,200,258,260,267],[197,199,200,204,219,257,260,268],[28,29,197,204,252,254,260],[204,207,250,252,255],[265,267],[197,199,260],[208,250,259],[197,200,202,204,208,219,250,257,258,260],[29,209,210,211,212,213],[209,213],[384,387],[384,387,388,389],[386],[383,390],[164],[165],[164,166],[161],[162],[161,162,163],[385],[275,278,340],[340,341,342],[27],[21,22,23,24,25,28],[21,24,26],[18,19,27,32,34],[20,27,30],[20,27,33],[20,31],[352,359,361,363],[27,191,351],[19,35],[17,36],[35,36,160,355,357],[27,370],[190],[190,192],[159,191,193,355],[17,18,358,359,360,362,364,365],[18],[351],[159],[35,160,351,355,361,362],[351,352],[35,160,189,194,195,196,353,354],[195,356],[35,192,194,196,351,352,353],[19],[20],[352,361],[160],[361],[160,195],[352]],"referencedMap":[[375,1],[351,2],[349,3],[347,3],[345,3],[350,4],[348,5],[346,6],[278,7],[277,3],[378,8],[374,1],[376,9],[377,1],[369,10],[379,11],[381,12],[382,13],[392,14],[28,15],[29,15],[370,16],[397,17],[280,18],[185,19],[176,20],[178,21],[171,22],[172,23],[184,24],[173,22],[174,22],[179,25],[180,26],[181,22],[188,27],[186,28],[189,29],[187,30],[42,31],[143,32],[147,32],[146,32],[144,32],[145,32],[148,32],[43,32],[55,32],[44,32],[57,32],[59,32],[52,32],[53,32],[54,32],[58,32],[60,32],[45,32],[56,32],[46,32],[48,33],[49,32],[50,32],[51,32],[67,32],[66,32],[151,34],[61,32],[63,32],[62,32],[64,32],[65,32],[150,32],[149,32],[68,32],[71,35],[72,35],[74,32],[117,32],[116,32],[75,32],[114,32],[118,32],[76,32],[77,32],[78,35],[119,32],[113,32],[73,35],[120,32],[79,35],[121,32],[80,35],[103,32],[81,32],[122,32],[82,32],[111,35],[84,32],[85,32],[123,32],[87,32],[89,32],[90,32],[96,32],[97,32],[91,35],[125,32],[112,35],[124,35],[92,32],[93,32],[126,32],[94,32],[86,35],[127,32],[110,32],[128,32],[95,35],[98,32],[99,32],[115,35],[129,32],[130,32],[109,32],[88,32],[131,35],[132,32],[133,32],[134,32],[100,32],[102,32],[104,32],[101,35],[83,32],[105,32],[108,32],[106,32],[107,32],[69,32],[141,32],[135,32],[136,32],[138,32],[139,32],[137,32],[142,32],[140,32],[159,36],[157,37],[158,38],[156,39],[155,32],[154,40],[153,41],[47,31],[281,42],[282,43],[283,44],[287,45],[299,46],[297,47],[290,48],[304,47],[300,49],[301,50],[298,46],[291,51],[296,52],[303,53],[294,54],[289,55],[295,53],[285,56],[305,57],[284,58],[334,59],[335,3],[317,59],[310,60],[329,61],[314,62],[315,63],[331,64],[330,65],[306,65],[318,66],[336,67],[316,68],[324,69],[323,70],[332,71],[308,72],[333,73],[337,74],[344,75],[338,76],[326,77],[327,78],[328,79],[313,80],[325,81],[311,82],[322,11],[312,83],[309,84],[263,85],[198,86],[260,87],[261,88],[202,89],[204,90],[256,91],[250,92],[205,93],[206,94],[273,95],[201,96],[200,97],[237,98],[236,99],[214,99],[240,100],[224,101],[222,102],[215,99],[218,103],[217,104],[249,105],[220,99],[225,106],[226,99],[230,107],[231,99],[232,108],[233,99],[234,107],[235,99],[243,109],[244,99],[246,110],[247,99],[248,106],[241,100],[229,111],[228,112],[227,99],[242,113],[239,114],[238,115],[223,99],[245,101],[216,99],[274,116],[271,117],[272,118],[267,119],[264,120],[252,121],[197,56],[254,122],[266,123],[269,124],[255,125],[207,56],[251,126],[268,127],[262,128],[258,129],[259,130],[213,131],[211,132],[210,132],[388,133],[390,134],[389,133],[387,135],[391,136],[30,11],[165,137],[166,138],[167,139],[162,140],[163,141],[164,142],[386,143],[342,144],[343,145],[341,144],[340,56],[276,3],[321,3],[24,146],[26,147],[27,148],[35,149],[31,150],[34,151],[32,152],[364,153],[362,154],[365,153],[360,155],[359,156],[358,157],[371,158],[192,159],[191,159],[193,160],[194,161],[366,162],[19,163],[361,164],[160,165],[33,15],[363,166],[353,167],[355,168],[357,169],[354,170],[372,15]],"exportedModulesMap":[[375,1],[351,2],[349,3],[347,3],[345,3],[350,4],[348,5],[346,6],[278,7],[277,3],[378,8],[374,1],[376,9],[377,1],[369,10],[379,11],[381,12],[382,13],[392,14],[28,15],[29,15],[370,16],[397,17],[280,18],[185,19],[176,20],[178,21],[171,22],[172,23],[184,24],[173,22],[174,22],[179,25],[180,26],[181,22],[188,27],[186,28],[189,29],[187,30],[42,31],[143,32],[147,32],[146,32],[144,32],[145,32],[148,32],[43,32],[55,32],[44,32],[57,32],[59,32],[52,32],[53,32],[54,32],[58,32],[60,32],[45,32],[56,32],[46,32],[48,33],[49,32],[50,32],[51,32],[67,32],[66,32],[151,34],[61,32],[63,32],[62,32],[64,32],[65,32],[150,32],[149,32],[68,32],[71,35],[72,35],[74,32],[117,32],[116,32],[75,32],[114,32],[118,32],[76,32],[77,32],[78,35],[119,32],[113,32],[73,35],[120,32],[79,35],[121,32],[80,35],[103,32],[81,32],[122,32],[82,32],[111,35],[84,32],[85,32],[123,32],[87,32],[89,32],[90,32],[96,32],[97,32],[91,35],[125,32],[112,35],[124,35],[92,32],[93,32],[126,32],[94,32],[86,35],[127,32],[110,32],[128,32],[95,35],[98,32],[99,32],[115,35],[129,32],[130,32],[109,32],[88,32],[131,35],[132,32],[133,32],[134,32],[100,32],[102,32],[104,32],[101,35],[83,32],[105,32],[108,32],[106,32],[107,32],[69,32],[141,32],[135,32],[136,32],[138,32],[139,32],[137,32],[142,32],[140,32],[159,36],[157,37],[158,38],[156,39],[155,32],[154,40],[153,41],[47,31],[281,42],[282,43],[283,44],[287,45],[299,46],[297,47],[290,48],[304,47],[300,49],[301,50],[298,46],[291,51],[296,52],[303,53],[294,54],[289,55],[295,53],[285,56],[305,57],[284,58],[334,59],[335,3],[317,59],[310,60],[329,61],[314,62],[315,63],[331,64],[330,65],[306,65],[318,66],[336,67],[316,68],[324,69],[323,70],[332,71],[308,72],[333,73],[337,74],[344,75],[338,76],[326,77],[327,78],[328,79],[313,80],[325,81],[311,82],[322,11],[312,83],[309,84],[263,85],[198,86],[260,87],[261,88],[202,89],[204,90],[256,91],[250,92],[205,93],[206,94],[273,95],[201,96],[200,97],[237,98],[236,99],[214,99],[240,100],[224,101],[222,102],[215,99],[218,103],[217,104],[249,105],[220,99],[225,106],[226,99],[230,107],[231,99],[232,108],[233,99],[234,107],[235,99],[243,109],[244,99],[246,110],[247,99],[248,106],[241,100],[229,111],[228,112],[227,99],[242,113],[239,114],[238,115],[223,99],[245,101],[216,99],[274,116],[271,117],[272,118],[267,119],[264,120],[252,121],[197,56],[254,122],[266,123],[269,124],[255,125],[207,56],[251,126],[268,127],[262,128],[258,129],[259,130],[213,131],[211,132],[210,132],[388,133],[390,134],[389,133],[387,135],[391,136],[30,11],[165,137],[166,138],[167,139],[162,140],[163,141],[164,142],[386,143],[342,144],[343,145],[341,144],[340,56],[276,3],[321,3],[24,146],[26,147],[27,148],[35,171],[31,172],[34,172],[32,152],[364,173],[362,154],[365,173],[360,155],[359,156],[358,174],[371,158],[192,159],[191,159],[193,160],[194,165],[366,162],[19,163],[361,164],[160,165],[33,15],[363,175],[353,167],[355,176],[357,169],[354,177],[372,15]],"semanticDiagnosticsPerFile":[375,373,351,349,347,345,350,348,346,278,277,378,374,376,377,22,369,379,380,381,382,392,212,368,28,29,393,370,394,395,70,25,396,397,280,383,185,176,175,182,178,169,168,170,171,172,184,173,174,179,180,181,177,183,188,186,189,187,40,42,143,147,146,144,145,148,43,55,44,57,59,52,53,54,58,60,45,56,46,48,49,50,51,67,66,151,61,63,62,64,65,150,149,68,71,72,74,117,116,75,114,118,76,77,78,119,113,73,120,79,121,80,103,81,122,82,111,84,85,123,87,89,90,96,97,91,125,112,124,92,93,126,94,86,127,110,128,95,98,99,115,129,130,109,88,131,132,133,134,100,102,104,101,83,105,108,106,107,69,141,135,136,138,139,137,142,140,159,157,158,156,155,154,39,41,37,152,153,47,38,279,281,282,283,287,299,297,290,286,304,292,300,301,302,298,291,296,303,294,288,289,295,285,305,284,334,335,317,310,329,314,315,331,330,306,318,336,316,324,323,332,308,333,337,344,338,326,327,328,313,325,311,320,319,307,322,312,309,339,263,270,198,260,261,202,204,256,250,205,206,203,208,199,265,253,273,201,200,237,236,214,240,224,221,222,215,218,217,249,220,225,226,230,231,232,233,234,235,243,244,246,247,248,241,229,228,227,242,239,238,223,245,216,274,271,272,267,264,252,197,254,266,269,255,207,251,268,262,219,258,259,257,213,211,210,209,293,384,388,390,389,387,391,30,165,166,167,162,163,161,164,386,385,342,343,341,340,276,275,321,17,23,21,24,26,27,4,5,9,8,3,10,11,12,13,14,15,16,2,1,7,6,35,20,31,34,32,364,367,36,362,365,360,359,358,371,192,190,191,193,194,366,18,19,361,352,195,160,33,363,353,355,357,354,356,196,372]},"version":"4.4.4"}
1
+ {"program":{"fileNames":["../node_modules/typescript/lib/lib.es6.d.ts","../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/reflect-metadata/index.d.ts","../src/model/CacheProviders.ts","../src/model/CacheableOptions.ts","../src/cache/providers/CacheProvider.ts","../node_modules/roit-environment/src/Env.ts","../node_modules/@types/dot-object/index.d.ts","../node_modules/roit-environment/node_modules/chalk/types/index.d.ts","../node_modules/roit-environment/src/EnvOptions.ts","../node_modules/@types/yamljs/index.d.ts","../node_modules/roit-environment/src/Environment.ts","../node_modules/roit-environment/src/index.ts","../node_modules/@types/node/base.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/node-cache/index.d.ts","../src/cache/providers/InMemoryCacheProvider.ts","../src/cache/providers/index.ts","../src/platform/PlatformTools.ts","../src/cache/providers/RedisCacheProvider.ts","../src/cache/CacheResolver.ts","../src/config/ClassMethodQueryMap.ts","../node_modules/class-validator/types/validation/ValidationError.d.ts","../node_modules/class-validator/types/validation/ValidatorOptions.d.ts","../node_modules/class-validator/types/validation-schema/ValidationSchema.d.ts","../node_modules/class-validator/types/container.d.ts","../node_modules/class-validator/types/validation/ValidationArguments.d.ts","../node_modules/class-validator/types/decorator/ValidationOptions.d.ts","../node_modules/class-validator/types/decorator/common/Allow.d.ts","../node_modules/class-validator/types/decorator/common/IsDefined.d.ts","../node_modules/class-validator/types/decorator/common/IsOptional.d.ts","../node_modules/class-validator/types/decorator/common/Validate.d.ts","../node_modules/class-validator/types/validation/ValidatorConstraintInterface.d.ts","../node_modules/class-validator/types/decorator/common/ValidateBy.d.ts","../node_modules/class-validator/types/decorator/common/ValidateIf.d.ts","../node_modules/class-validator/types/decorator/common/ValidateNested.d.ts","../node_modules/class-validator/types/decorator/common/ValidatePromise.d.ts","../node_modules/class-validator/types/decorator/common/IsLatLong.d.ts","../node_modules/class-validator/types/decorator/common/IsLatitude.d.ts","../node_modules/class-validator/types/decorator/common/IsLongitude.d.ts","../node_modules/class-validator/types/decorator/common/Equals.d.ts","../node_modules/class-validator/types/decorator/common/NotEquals.d.ts","../node_modules/class-validator/types/decorator/common/IsEmpty.d.ts","../node_modules/class-validator/types/decorator/common/IsNotEmpty.d.ts","../node_modules/class-validator/types/decorator/common/IsIn.d.ts","../node_modules/class-validator/types/decorator/common/IsNotIn.d.ts","../node_modules/class-validator/types/decorator/number/IsDivisibleBy.d.ts","../node_modules/class-validator/types/decorator/number/IsPositive.d.ts","../node_modules/class-validator/types/decorator/number/IsNegative.d.ts","../node_modules/class-validator/types/decorator/number/Max.d.ts","../node_modules/class-validator/types/decorator/number/Min.d.ts","../node_modules/class-validator/types/decorator/date/MinDate.d.ts","../node_modules/class-validator/types/decorator/date/MaxDate.d.ts","../node_modules/class-validator/types/decorator/string/Contains.d.ts","../node_modules/class-validator/types/decorator/string/NotContains.d.ts","../node_modules/@types/validator/index.d.ts","../node_modules/class-validator/types/decorator/string/IsAlpha.d.ts","../node_modules/class-validator/types/decorator/string/IsAlphanumeric.d.ts","../node_modules/class-validator/types/decorator/string/IsDecimal.d.ts","../node_modules/class-validator/types/decorator/string/IsAscii.d.ts","../node_modules/class-validator/types/decorator/string/IsBase64.d.ts","../node_modules/class-validator/types/decorator/string/IsByteLength.d.ts","../node_modules/class-validator/types/decorator/string/IsCreditCard.d.ts","../node_modules/class-validator/types/decorator/string/IsCurrency.d.ts","../node_modules/class-validator/types/decorator/string/IsEmail.d.ts","../node_modules/class-validator/types/decorator/string/IsFQDN.d.ts","../node_modules/class-validator/types/decorator/string/IsFullWidth.d.ts","../node_modules/class-validator/types/decorator/string/IsHalfWidth.d.ts","../node_modules/class-validator/types/decorator/string/IsVariableWidth.d.ts","../node_modules/class-validator/types/decorator/string/IsHexColor.d.ts","../node_modules/class-validator/types/decorator/string/IsHexadecimal.d.ts","../node_modules/class-validator/types/decorator/string/IsMacAddress.d.ts","../node_modules/class-validator/types/decorator/string/IsIP.d.ts","../node_modules/class-validator/types/decorator/string/IsPort.d.ts","../node_modules/class-validator/types/decorator/string/IsISBN.d.ts","../node_modules/class-validator/types/decorator/string/IsISIN.d.ts","../node_modules/class-validator/types/decorator/string/IsISO8601.d.ts","../node_modules/class-validator/types/decorator/string/IsJSON.d.ts","../node_modules/class-validator/types/decorator/string/IsJWT.d.ts","../node_modules/class-validator/types/decorator/string/IsLowercase.d.ts","../node_modules/class-validator/types/decorator/string/IsMobilePhone.d.ts","../node_modules/class-validator/types/decorator/string/IsISO31661Alpha2.d.ts","../node_modules/class-validator/types/decorator/string/IsISO31661Alpha3.d.ts","../node_modules/class-validator/types/decorator/string/IsMongoId.d.ts","../node_modules/class-validator/types/decorator/string/IsMultibyte.d.ts","../node_modules/class-validator/types/decorator/string/IsSurrogatePair.d.ts","../node_modules/class-validator/types/decorator/string/IsUrl.d.ts","../node_modules/class-validator/types/decorator/string/IsUUID.d.ts","../node_modules/class-validator/types/decorator/string/IsFirebasePushId.d.ts","../node_modules/class-validator/types/decorator/string/IsUppercase.d.ts","../node_modules/class-validator/types/decorator/string/Length.d.ts","../node_modules/class-validator/types/decorator/string/MaxLength.d.ts","../node_modules/class-validator/types/decorator/string/MinLength.d.ts","../node_modules/class-validator/types/decorator/string/Matches.d.ts","../node_modules/class-validator/types/decorator/string/IsPhoneNumber.d.ts","../node_modules/class-validator/types/decorator/string/IsMilitaryTime.d.ts","../node_modules/class-validator/types/decorator/string/IsHash.d.ts","../node_modules/class-validator/types/decorator/string/IsISSN.d.ts","../node_modules/class-validator/types/decorator/string/IsDateString.d.ts","../node_modules/class-validator/types/decorator/string/IsBooleanString.d.ts","../node_modules/class-validator/types/decorator/string/IsNumberString.d.ts","../node_modules/class-validator/types/decorator/string/IsBase32.d.ts","../node_modules/class-validator/types/decorator/string/IsBIC.d.ts","../node_modules/class-validator/types/decorator/string/IsBtcAddress.d.ts","../node_modules/class-validator/types/decorator/string/IsDataURI.d.ts","../node_modules/class-validator/types/decorator/string/IsEAN.d.ts","../node_modules/class-validator/types/decorator/string/IsEthereumAddress.d.ts","../node_modules/class-validator/types/decorator/string/IsHSL.d.ts","../node_modules/class-validator/types/decorator/string/IsIBAN.d.ts","../node_modules/class-validator/types/decorator/string/IsIdentityCard.d.ts","../node_modules/class-validator/types/decorator/string/IsISRC.d.ts","../node_modules/class-validator/types/decorator/string/IsLocale.d.ts","../node_modules/class-validator/types/decorator/string/IsMagnetURI.d.ts","../node_modules/class-validator/types/decorator/string/IsMimeType.d.ts","../node_modules/class-validator/types/decorator/string/IsOctal.d.ts","../node_modules/class-validator/types/decorator/string/IsPassportNumber.d.ts","../node_modules/class-validator/types/decorator/string/IsPostalCode.d.ts","../node_modules/class-validator/types/decorator/string/IsRFC3339.d.ts","../node_modules/class-validator/types/decorator/string/IsRgbColor.d.ts","../node_modules/class-validator/types/decorator/string/IsSemVer.d.ts","../node_modules/class-validator/types/decorator/typechecker/IsBoolean.d.ts","../node_modules/class-validator/types/decorator/typechecker/IsDate.d.ts","../node_modules/class-validator/types/decorator/typechecker/IsNumber.d.ts","../node_modules/class-validator/types/decorator/typechecker/IsEnum.d.ts","../node_modules/class-validator/types/decorator/typechecker/IsInt.d.ts","../node_modules/class-validator/types/decorator/typechecker/IsString.d.ts","../node_modules/class-validator/types/decorator/typechecker/IsArray.d.ts","../node_modules/class-validator/types/decorator/typechecker/IsObject.d.ts","../node_modules/class-validator/types/decorator/array/ArrayContains.d.ts","../node_modules/class-validator/types/decorator/array/ArrayNotContains.d.ts","../node_modules/class-validator/types/decorator/array/ArrayNotEmpty.d.ts","../node_modules/class-validator/types/decorator/array/ArrayMinSize.d.ts","../node_modules/class-validator/types/decorator/array/ArrayMaxSize.d.ts","../node_modules/class-validator/types/decorator/array/ArrayUnique.d.ts","../node_modules/class-validator/types/decorator/object/IsNotEmptyObject.d.ts","../node_modules/class-validator/types/decorator/object/IsInstance.d.ts","../node_modules/class-validator/types/decorator/decorators.d.ts","../node_modules/class-validator/types/validation/ValidationTypes.d.ts","../node_modules/class-validator/types/validation/Validator.d.ts","../node_modules/class-validator/types/register-decorator.d.ts","../node_modules/class-validator/types/metadata/ValidationMetadataArgs.d.ts","../node_modules/class-validator/types/metadata/ValidationMetadata.d.ts","../node_modules/class-validator/types/metadata/ConstraintMetadata.d.ts","../node_modules/class-validator/types/metadata/MetadataStorage.d.ts","../node_modules/class-validator/types/index.d.ts","../src/model/RepositoryOptions.ts","../node_modules/openapi3-ts/dist/model/SpecificationExtension.d.ts","../node_modules/openapi3-ts/dist/model/OpenApi.d.ts","../node_modules/openapi3-ts/dist/model/Server.d.ts","../node_modules/openapi3-ts/dist/model/index.d.ts","../node_modules/openapi3-ts/dist/dsl/OpenApiBuilder.d.ts","../node_modules/openapi3-ts/dist/dsl/index.d.ts","../node_modules/openapi3-ts/dist/index.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/expose-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/exclude-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/transform-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/type-discriminator-descriptor.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/type-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/exclude-metadata.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/expose-metadata.interface.d.ts","../node_modules/class-transformer/types/enums/transformation-type.enum.d.ts","../node_modules/class-transformer/types/enums/index.d.ts","../node_modules/class-transformer/types/interfaces/target-map.interface.d.ts","../node_modules/class-transformer/types/interfaces/class-transformer-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/transform-fn-params.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/transform-metadata.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/type-metadata.interface.d.ts","../node_modules/class-transformer/types/interfaces/class-constructor.type.d.ts","../node_modules/class-transformer/types/interfaces/type-help-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/index.d.ts","../node_modules/class-transformer/types/MetadataStorage.d.ts","../node_modules/class-validator-jsonschema/build/defaultConverters.d.ts","../node_modules/class-validator-jsonschema/build/options.d.ts","../node_modules/class-validator-jsonschema/build/decorators.d.ts","../node_modules/class-validator-jsonschema/build/index.d.ts","../src/exception/RepositoryException.ts","../src/exception/RepositorySystemException.ts","../src/exception/RepositoryBusinessException.ts","../src/exception/RepositoryValidationException.ts","../src/exception/handle/ValidatorDataHandle.ts","../src/model/PersistFirestoreReadProps.ts","../src/firestore-read-audit/providers/BigQueryFirestoreReadAuditProvider.ts","../src/firestore-read-audit/FirestoreReadAuditResolver.ts","../src/model/QueryPredicate.ts","../src/util/EnvironmentUtil.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/metadata.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/call-credentials.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/constants.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/filter.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/filter-stack.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/channel-credentials.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/compression-algorithms.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/channel-options.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/client-interceptors.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/client.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/server-credentials.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/connectivity-state.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/node_modules/protobufjs/index.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/node_modules/protobufjs/ext/descriptor/index.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader/build/src/util.d.ts","../node_modules/@types/long/index.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader/build/src/index.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Timestamp.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelRef.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SubchannelRef.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTrace.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/subchannel-address.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelRequest.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelData.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketRef.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channel.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelResponse.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerRequest.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerRef.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerData.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Server.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerResponse.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersRequest.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersResponse.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketRequest.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int64Value.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Any.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOption.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketData.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Address.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Security.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Socket.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketResponse.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Subchannel.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channelz.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/channelz.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/server.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/make-client.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/events.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/object-stream.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/server-call.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/channel.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/uri-parser.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/subchannel-interface.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/subchannel.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/call-stream.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/call.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/status-builder.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/admin.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/logging.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/duration.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/picker.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/load-balancer.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/service-config.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/resolver.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/backoff-timeout.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/experimental.d.ts","../node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/index.d.ts","../node_modules/protobufjs/index.d.ts","../node_modules/protobufjs/ext/descriptor/index.d.ts","../node_modules/@grpc/proto-loader/build/src/util.d.ts","../node_modules/@grpc/proto-loader/build/src/index.d.ts","../node_modules/event-target-shim/index.d.ts","../node_modules/abort-controller/dist/abort-controller.d.ts","../node_modules/gaxios/build/src/common.d.ts","../node_modules/gaxios/build/src/gaxios.d.ts","../node_modules/gaxios/build/src/index.d.ts","../node_modules/google-auth-library/build/src/transporters.d.ts","../node_modules/google-auth-library/build/src/crypto/crypto.d.ts","../node_modules/google-auth-library/build/src/auth/credentials.d.ts","../node_modules/google-auth-library/build/src/auth/authclient.d.ts","../node_modules/google-auth-library/build/src/auth/loginticket.d.ts","../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts","../node_modules/google-auth-library/build/src/auth/computeclient.d.ts","../node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts","../node_modules/google-auth-library/build/src/auth/envDetect.d.ts","../node_modules/gtoken/build/src/index.d.ts","../node_modules/google-auth-library/build/src/auth/jwtclient.d.ts","../node_modules/google-auth-library/build/src/auth/refreshclient.d.ts","../node_modules/google-auth-library/build/src/auth/impersonated.d.ts","../node_modules/google-auth-library/build/src/auth/baseexternalclient.d.ts","../node_modules/google-auth-library/build/src/auth/identitypoolclient.d.ts","../node_modules/google-auth-library/build/src/auth/awsclient.d.ts","../node_modules/google-auth-library/build/src/auth/externalclient.d.ts","../node_modules/google-auth-library/build/src/auth/googleauth.d.ts","../node_modules/google-auth-library/build/src/auth/iam.d.ts","../node_modules/google-auth-library/build/src/auth/jwtaccess.d.ts","../node_modules/google-auth-library/build/src/auth/downscopedclient.d.ts","../node_modules/google-auth-library/build/src/index.d.ts","../node_modules/google-gax/build/src/call.d.ts","../node_modules/google-gax/build/src/status.d.ts","../node_modules/google-gax/build/src/googleError.d.ts","../node_modules/google-gax/build/src/streamingCalls/streaming.d.ts","../node_modules/google-gax/build/src/apiCaller.d.ts","../node_modules/google-gax/build/src/paginationCalls/pageDescriptor.d.ts","../node_modules/google-gax/build/src/streamingCalls/streamDescriptor.d.ts","../node_modules/google-gax/build/src/normalCalls/normalApiCaller.d.ts","../node_modules/google-gax/build/src/bundlingCalls/bundleApiCaller.d.ts","../node_modules/google-gax/build/src/bundlingCalls/bundleDescriptor.d.ts","../node_modules/google-gax/build/src/descriptor.d.ts","../node_modules/google-gax/build/protos/operations.d.ts","../node_modules/google-gax/build/src/clientInterface.d.ts","../node_modules/google-gax/build/src/routingHeader.d.ts","../node_modules/google-gax/build/src/pathTemplate.d.ts","../node_modules/protobufjs/minimal.d.ts","../node_modules/google-gax/build/src/streamArrayParser.d.ts","../node_modules/google-gax/build/src/fallbackServiceStub.d.ts","../node_modules/google-gax/build/src/fallback.d.ts","../node_modules/google-gax/build/src/operationsClient.d.ts","../node_modules/google-gax/build/src/longRunningCalls/longRunningApiCaller.d.ts","../node_modules/google-gax/build/src/longRunningCalls/longRunningDescriptor.d.ts","../node_modules/google-gax/build/src/longRunningCalls/longrunning.d.ts","../node_modules/google-gax/build/src/apitypes.d.ts","../node_modules/google-gax/build/src/bundlingCalls/task.d.ts","../node_modules/google-gax/build/src/bundlingCalls/bundleExecutor.d.ts","../node_modules/google-gax/build/src/gax.d.ts","../node_modules/google-gax/build/src/grpc.d.ts","../node_modules/google-gax/build/protos/iam_service.d.ts","../node_modules/google-gax/build/protos/locations.d.ts","../node_modules/google-gax/build/src/createApiCall.d.ts","../node_modules/google-gax/build/src/iamService.d.ts","../node_modules/google-gax/build/src/locationService.d.ts","../node_modules/google-gax/build/src/warnings.d.ts","../node_modules/proto3-json-serializer/build/src/types.d.ts","../node_modules/proto3-json-serializer/build/src/toproto3json.d.ts","../node_modules/proto3-json-serializer/build/src/fromproto3json.d.ts","../node_modules/proto3-json-serializer/build/src/index.d.ts","../node_modules/google-gax/build/src/index.d.ts","../node_modules/@google-cloud/firestore/types/protos/firestore_v1beta1_proto_api.d.ts","../node_modules/@google-cloud/firestore/types/v1beta1/firestore_client.d.ts","../node_modules/@google-cloud/firestore/types/protos/firestore_v1_proto_api.d.ts","../node_modules/@google-cloud/firestore/types/v1/firestore_client.d.ts","../node_modules/@google-cloud/firestore/types/protos/firestore_admin_v1_proto_api.d.ts","../node_modules/@google-cloud/firestore/types/v1/firestore_admin_client.d.ts","../node_modules/@google-cloud/firestore/types/firestore.d.ts","../src/model/Paging.ts","../src/query/QueryCreatorConfig.ts","../src/query/operator/CreateFunction.ts","../src/query/QueryPredicateFunctionTransform.ts","../src/query/operator/OperatorMap.ts","../src/query/TransformMethodFromQuery.ts","../src/decorators/Repository.ts","../src/decorators/Query.ts","../src/decorators/Cacheable.ts","../src/model/MQuery.ts","../src/config/FirestoreInstance.ts","../src/query/ManualQueryHelper.ts","../src/config/BaseRepository.ts","../src/config/ReadonlyRepository.ts","../src/index.ts","../src/config/ClassCollectionMap.ts","../node_modules/@types/minimatch/index.d.ts","../node_modules/@types/glob/index.d.ts","../node_modules/@types/shelljs/index.d.ts","../src/emulator/FirestoreEmuator.ts","../src/util/TemplateLoading.ts","../node_modules/@babel/types/lib/index.d.ts","../node_modules/@types/babel__generator/index.d.ts","../node_modules/@babel/parser/typings/babel-parser.d.ts","../node_modules/@types/babel__template/index.d.ts","../node_modules/@types/babel__traverse/index.d.ts","../node_modules/@types/babel__core/index.d.ts","../node_modules/@types/graceful-fs/index.d.ts","../node_modules/@types/istanbul-lib-coverage/index.d.ts","../node_modules/@types/istanbul-lib-report/index.d.ts","../node_modules/@types/istanbul-reports/index.d.ts","../node_modules/chalk/index.d.ts","../node_modules/jest-diff/build/cleanupSemantic.d.ts","../node_modules/pretty-format/build/types.d.ts","../node_modules/pretty-format/build/index.d.ts","../node_modules/jest-diff/build/types.d.ts","../node_modules/jest-diff/build/diffLines.d.ts","../node_modules/jest-diff/build/printDiffs.d.ts","../node_modules/jest-diff/build/index.d.ts","../node_modules/jest-matcher-utils/build/index.d.ts","../node_modules/@types/jest/index.d.ts","../node_modules/@types/prettier/index.d.ts","../node_modules/@types/stack-utils/index.d.ts","../node_modules/@types/uuid/index.d.ts","../node_modules/@types/yargs-parser/index.d.ts","../node_modules/@types/yargs/index.d.ts"],"fileInfos":["721cec59c3fef87aaf480047d821fb758b3ec9482c4129a54631e6e25e432a31",{"version":"aa9fb4c70f369237c2f45f9d969c9a59e0eae9a192962eb48581fe864aa609db","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6",{"version":"e54c8715a4954cfdc66cd69489f2b725c09ebf37492dbd91cff0a1688b1159e8","affectsGlobalScope":true},{"version":"e34eb9339171ec45da2801c1967e4d378bd61a1dceaa1b1b4e1b6d28cb9ca962","affectsGlobalScope":true},{"version":"7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481","affectsGlobalScope":true},{"version":"097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd","affectsGlobalScope":true},{"version":"51b8b27c21c066bf877646e320bf6a722b80d1ade65e686923cd9d4494aef1ca","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"2c8c5ee58f30e7c944e04ab1fb5506fdbb4dd507c9efa6972cf4b91cec90c503","affectsGlobalScope":true},{"version":"2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"8d6d51a5118d000ed3bfe6e1dd1335bebfff3fef23cd2af2f84a24d30f90cc90","affectsGlobalScope":true},"b37a842dd3f6691d92264cf037cfcfd7b5febc9a28f37a207b5bdfcd96e72441","d223d2ebd552348d3751df9c96bc5761065fc14a575792490402cf41fb7dc3d2","09891d8e03208bb67b2a85a2d15429bd959392288b828b864eb3f94cdad55bfc","69241d6be17babef52695a5e97084da44475e972dea649cfb3352ead8d566e41",{"version":"4a680a54c322402fb396df7012eaecfd866ee73a990e96a486e1603ca762af36","affectsGlobalScope":true},"091f417275a51ab3c47b949723e9e8a193012157ecc64a96e2d7b1505e82f395","1ad480dc0a8ae84b35939b701b055c941eb1ea50a71294bc81e8a2546954c8d6","bbe2107a96f15b2cfebcfebfc8933619cb285c43bf1ef6946f78fd92b2de6893","d511bac43e17db592bfb9977e691b095243fdc2e9262e87b1f6a79fcb994d290","d61d2d9ac04b86e0027ed05ff3f194c33f4d0110e52d30cd1e8b2ea18d7c7d4d",{"version":"2b4c1c2edab174e69cb47aa5fa242f271af0364301dec441bc4784039bedf707","affectsGlobalScope":true},"9bd7ca40555e47a583419e7bee28a299ead570dde06345c00b90b6dfbb36cb59","6f4e4e5a046171e70dfb4b1f3e6212de786bf2c1e2c4383ae0e61c4726fdd168","1118439febc4afedb2a04744aee490e3125fff779bd17933a4e58548718c5d0a","50a375ea6f7cafd0e737a7e759cf3cff97581f32c3431fad8d08dbc6fa00a511",{"version":"c9c57f8270a4601e464e243188983c01438f32b6b6335591c6a1570fd841b104","signature":"5ef5cb76d5020332e7b7e97a99e8850901700f425642066797bd218337371be0"},{"version":"aca51beb4c35da24ed5de33fefc06346905fa3bcd9d8438e38b8f3eddee4727a","signature":"de13bcd2a1fbaf08bc2b0bf95fd8d29c47854eb444c643e8c3d434950a1f32cd"},{"version":"36a8ea30f8062fb07f836b63974b29904f14471afc5f401ab0078dc6c452c1d1","signature":"a19c92f08942dfd6c45d72483ef3e13b5333a50355046f0d72b3daae3ba086bf"},"292fd57ecc8da377035cc069faad7f98d54aada57217a7cd7868f6cb41a7e627","d224f2ef464cf2a544dcf6be6b416db5563aa5ca4c94e2a1d93bf3765c1f77cb","d3c0c471c298dc7115ada6c07f78d4fafb088523a301cb539c5cb44dae009954","86f89124a90fae1b90421bcce1e0ba58614383ca72403bfc03ff89761b050a4d","5a6fbec8c8e62c37e9685a91a6ef0f6ecaddb1ee90f7b2c2b71b454b40a0d9a6","f049af45e62625e0be51a3badd311110abf1ac8b23f56689e1d850923f6d9aac","84520c7da490e46a85f23aaeb2dbd02214f2c2eb7466cfa37f67b4e8486a3333","79ddbca11e8f46788b24e5f21e6db1b2a2f53609d931d52d0009d506f23612e9","8f9aee3462ad88fc6db8dc5afd8c6179fa7a805e1c023f27870bc792631c8345","b6e72a3614ea86784a0e067e612d7deb6e60139b522f3d90289b5e5b3c6adf87","a98ec21c1df89d5d5ed12c2e3441f1d80d72b3ce987467d31ecd3bd0e5afb6cc","8e7c8386c3700086085770ac298d37de34bd290db95938f5c77f1ab83fa67c52","9e5b8bb29f0e3ea3f2768bc073c9d979a9003a0588ecc8f8b070f52f0ee88457","c978beece24d0989cb2c82347587fe01ef5b768ce19582e450730d9fe748d1cd","6a64f52076638c5f170233050ac536dce1e5bca590019d488a8ea3ef8ba6306c","74645e4af7d3b2e7cd2c8bb0f6b4cd216dcf7387a7b63afc573206efe414522f","609c998f93521eaa6fd0ef12dbb2a64858ab09be15af9a62734fb65c64fd1c1e","622663a9039cfabf20fb0fd510fd5cb0cb4dcb7263d6919da1f23f6708bdfd5e","a362d189a45351ec80c492c630f3224e044e330d1efd8d67120c0217578a6630","877b2776294304fbc216977e1e278da726caf6269aeef63a805079bfcb2b07f7","dba7fd6142211dc70a91c3143533fac5067491a31512516d6bb090042dede4ca","e70e32a2b2cab598a449ddb510051c56dab5f1afad5ee4fa8df2148237b4ffdb","ff504dfbee8a8f4b5e0bb0a32c292ce0b152ea3abbf6752869e712cbde06bce9","b4c7d5c3949676c15da5455ca3724291a2a0d52aff243f2c8d01a72db7626a22","d8f256c8940bf0c866635aea13c1dbdee4198d8cd84e5be14acaf31df53e1497","056a46b665d629debf54b188ccff671214cb8460b1cf7ba99b60ef1526b961e8","b982d48019d8454b3034d8b5b06502b216908e644d430878d7818bfb96b7e8df","268056633de1e35b4c3747609844cae9dddf61c6dd7f87d90e8158736c117950","2809c8068fa8a780546d760ceb4d197243891fff0f107786e359b2497f11988d","46108c7ea7f7f7fe6291bf35f99c33036b347236cde33ee40c4410d9a2918730","dc390eaa414ee4e31ea90c5c3fdd321d8b89f7dfbf331db62e28d8e7bb31f0f2","c828fc02687f3794288bbaa813ec940ffb2ea86017fca59f47f39c4c5458ec95","0f48751b76dbdc60831ee6350bf7e52dadf2207903541b07e610b17a1ab91f18","332133b486037098c00d4dfa627ed8d312dc5f9a5a9693d86c489010e9749d91","3ff2dd07f8aa032e6eb7ffacd8f4e1f0b8dac4ba02c1f6ea1413187aef947ec9","1a99dd108fb76343c751f256d1892bc77741b984e7cd628e8c3a3c4e4054249f","edbc32662fd13b65ce92a5ffd68b57ddc1c6a2b4260894c85b35c2ebb3621c4f","8829c118c1abb01eed918bb4b996689cd6000e7e1dc51d6f5bef316c6c033090","890e75d39abff90ddf172e40201d1f2759830bb8b258698346d50f735c831225","115effbd878a17a8f6587a11594f1c56cf7d75efa90dbef086a6ef5aedb14b18","67cecb9adb483649b173000d1554b2708c5dbd52c10f6c52d10dd5568b6447ad","c67b4e78c6f4b36288a269e39bab4104a77f44352af53413a9c0d4d2a07789ed","ac376230d4fb370209ab531abd2a96c050c3182323ff5cd63f53f5ddf02e1616","3743f0fcbe90e3fc7c68913730263bf3b4fb29658b05695dfca50ea2812064fc","df127c6b901e2b622d8bc1c7fbb39db5ca1195727fc098f4d76127e2fad037c3","82bf6be5217035ebc5df8a551657b9998f07f40062c5d37f67a42dd884d56696","28a770a61db7c4f074b5ad13101dee11332d1d0720f97ca4855967b366086d81","0a4673ab6ddccd462225041e8c5ff108190ab2cfaf4a3c3b908466031c8e0866","7309a8ab83349bfc2adf7cda1834a4d4b0a923069ab95a6f098ff5e59c242932","016f0542c1a7e8508cb0123789d99271226454de7216c79837aea247c523a8ef","1429d42a27973ccf263889b852bc56174c488427a74697879751e45145527310","547e84b4791541dc2510b1a09454c5cd2cc1f90ac7aff66a7d6a9b162fa52ce9","fbfecc0238fff6c035b5fc098de559d21e2e1ff2214814d0ae9fd234a5e6d4f4","f2aae906e0494829e99185278b73c818eb6019a9b87bb3f51c405afc0382e8f5","f78cc3174fa71470f8eb01e9fdd73701cb8c92c389dec36852c8b73ed700cd0b","ff2ff324c2074f9420cdc02fb96f7f1bc3dc2bea1f46d9d25b052a3ba886a4ee","023710033c47af573c6647a8bc0894a75352460472bc28bcee06ab61651527d2","c3388c11eb52973d762ce92f41644d7205b171d9b24dbd5224b7cde7d527000d","356df04d29b5af772353acf56db5a65ab24ea8ce7bd1bbfff3eb173f459ab9db","1a665c362bbba84e89f6f7098d891dc14c20a9a748daf8be70c0ba7347c44aea","5c0633aed1ae93dd204159f5c80418bcb6b79ca3c5ced980d9f72e67e1c9e9ed","b05c76b104b6bc31d2acf590e85777c19c8d7dc4d374a70755693822ac6fd931","ccee8306cbca68f71bb2bd783975cd1c0051faae69cf39087106bc71ed53fc1b","bd9fa48bfdff39ab7371212f41aed2ea3149a715bd0efd6f3d4781fb2a3d136e","c260de8a899c8212def174496b37e5da1ef58321e0a5e398221d1ee8715c48d5","b45e16f34d11ce0183bfc936fbcb9801dbd30476f5701922f3e57e16f0dbea31","a8a197688403685e32bf99924c917b09ae19242be1d49ae5c3a35cf39f93088d","62184bc7c84b4df42caf05c4a709a89d921908595b476aa4f35d98846ca515e3","a82d35729dc511416f90479df5979b18afa59cc2972b89224f3582905663af1c","f08b724b61c71963f3902eb0974ecb4636f10628be53f8e6103183409c63f495","5ca69cef58fce948f89317741a5fa59d9ca22ae705eafd03fb3e4db4675900ba","8f2b2e5bcb20ed1ceff79d8caebd79697486aefd4ea452347dda192f373833a8","7038448102f09f54c645e8ee85fd8678e741b98d764a28149fc9bd8e803aadbb","ff207060c4f40f1de5d91872b05321cdba145146d6fe09bba048cbe33b830343","71db384f85832776db0380055e76f1cd1b41ea4c3066485c7cb9a0ce1cf7eb04","0492ac6a4a28d38ebae62509d0f01cfe70964ebeef8abd655161aad22bd28887","286789bb419383ff71ee57dd2a46790e6eff9870723f0e32058f425077c8debc","eb75965a983d174b61533493ed172d9df34b08570ed68a71562a5cb42bc40314","def4d3842e4847172281543a13fd6a902a1a5ba6e0d1f036e0529f3b7da18189","ad69818e3b1428edb40ac14f8279d949a121c8f506d44c546e4f9db3dd7f0a2a","7fdceecdee5835963b3fa3e3dfdc032f5b83e951ac8f08ea254a9b05c91b9034","69c795c8afb241763fcb603933fac8f34bec02cea939c40ca0b4ea2cce089402","283d333afe327d778d2af74735414a2a78abe0664f929fc6f220e8fa1c7342fa","d42578a8ba6a4b36b146eac7a7799c3bed6032c1ace7f83188e0edec264cfe72","50b8f7f132eed0b748aaa90cdeef18f6445908e58bc74e15291bb74425f1e9e3","4d8fc6373fe56eca2522244ddc0550cb0fc002209e76a752f94f5acc0d608c6a","68872f2a798516e617886b36971fa09180662017dccff4e835a31a8a164f2d7f","4ac8ddbe514f264702bb974a41a76954617f18fd43d5236bb0eb6e683af0fc4a","d91f48ceb2329ae017d2f6bf7fa8431a299b691b6495e22da4ee8af65d9b748c","1cfc8bdca30bb45d9965f3c60637f079d91a1e5546cf1340df0979f07c6123d9","b08778ca2cdf180eaf1f0c36981a509703e2460f502736fcc47e53e49d055def","adfd518e05d1ee1166986ec0cbd543786e033edfdc8144abc40ef78f85023ee7","cb01a81cddc90d064f6f1d2c502d04907c74cc5683933ecc5befcb312398b559","2b66e13af93391d05dfd4ca7eef3c43903b60e41dfa52b9be7dcf176e6df6395","8ff4402c5fb4866e02ec8584bbc4aff376562b5b721c160745546f812b29b84e","5ffb293a73418aced30688b02aa52f644a40bde6432dcfc10b64d80360b8cf67","8f4f9f281e42e7a72e0da0486a9a2c242fb8b3e081ff38fc00bafe18b3b7670f","003e2334b9027963b4d87a6e6d6769b6e83eb9b3f5d89c8a093de14f8fb9c4f5","3d9d811ce9a24290710966125d6851d96f33b9d19b451e6eb5dd38df0c968e4a","63a73f7d785b12a25f7356bd96b7dda12ab0fc0227a41eb6ed3a02910b22952d","38161011da6ca54bf0b4447d64db7e7aaf797a9e7a1132c914078d8a911211ea","b81e737e6d7003eaa010d1c6e67b138def60b0312f9d7c0aa0f556694e8c42d1","774dff81140ac6e9a7afb3d7d9bd0b12e4333e1c50aba99c85254f59eea14ed9","a7bbe9f3a96bea352e4e8898f3b260f33fcf003240b7da7431f30f4f23fa8be1","da9d576677e820f2a942f99ef3a15573f9ccdd73e2c39bfc43ea2aa31c5400c0","0b6744dec894641d7135709bb4b3b3520c6e324de853380b3a56f82a64c68616","567c49ba2988909079b9c504929192243f696db2211b8bd5d27ac2d5f939e4ac","6382d4f1298acb23919bfd100827d32510c830fd7670e771a9176aafb3972659","eeb6e2ba25bfa49402a38886aa782341ec612ef88d399249515513bd215bead0","a89e758512ad2dbeff724d5adf9bccda211a67390e8a87fdc67323f417f9a3ba","82595d6e8ee2d9a040fae439a705745bdd2ab2d09bc8ce203bf99c2e2667f0f9","2bfd7ff1210b33d9f468df551f04b7636895df6b1ce0f8f4adfddf79c7ba5750","a9a895f5e06c7d1f35ec0adc86f10c120d99bee81b9a4c70583df3bd2be035d0","ce4576ba53c48929ebe6cfc6e1c7f033825f24b31301808b5cc6d6dd28ceabed","651aac145c06589addd934be8f93acd7619c0f9a14efb17deaaab4416efb7702","9f098a0d7545b68be569dea9ca42d0a18fb3e622e25a6805a0780182e537ef17","b4f3b4e20e2193179481ab325b8bd0871b986e1e8a8ed2961ce020c2dba7c02d","c3527a55a9d355d5019ae948f9622690408e921a8bbf7b37bdad9f09feed7590","7a22ccbd71ad35fb9f292e00297b8df7ab033c411cbe7106d39065f26b4209db","8f29f65ce09040175a948aeb38af31f34367123903c49b556a76097bcb8fe813","8be85fd3849c702cd34aee594b4e9773dceca300cc358c63d75a3118720b12fe","bb71811f328b358d990e298006492de623964862240de7eb6342e5efb8aafae9","2b2201068a1be0cd0a6211b6175c263425431c9da9fb4c06a429a985aeb0bcd6","1d5f30cbd06ffa2aab22346b087e140f069851c17b91189be8d1e168d53f9f93","decae8f6edbe21a53afdc86107d16214e718dcee1baeeeb2ae57be9cc04ef286","9508fcc6616ea31bf848463f161571bcb0c8726b267a43e231f21fca775007e7","daf44d045f41c7dc023520708443bc42f914178fbaeb193a59b6acbe3183dc7e","e54119a21539e5c1d0c2e2bcb74fc42303cec7d28c00cddd2c5fef9686caca8b","ab135130c2e2f34a2bd54f69331a1a7773fcdb4d9cfdff9a23831dc4eb6c0a21","f5f9b4e141a2fb1baaa7c3256261292fda87bceb2d27adfd7c407d4750575ec1","1037017fc5dc0109d84ce24aa65eefff6cc9728c608cd1fc54212e4c2db18baa","2fd1f5f37a7da7c28e6e4ec088cca5c6882fe41cd2e4d512cd583ad35f11dcc7","b6e995b5ef6661f5636ff738e67e4ec90150768ef119ad74b473c404304408a1","5d470930bf6142d7cbda81c157869024527dc7911ba55d90b8387ef6e1585aa1","074483fdbf20b30bd450e54e6892e96ea093430c313e61be5fdfe51588baa2d6","b7e6a6a3495301360edb9e1474702db73d18be7803b3f5c6c05571212acccd16","aa7527285c94043f21baf6e337bc60a92c20b6efaa90859473f6476954ac5f79","dd3be6d9dcd79e46d192175a756546630f2dc89dab28073823c936557b977f26","8d0566152618a1da6536c75a5659c139522d67c63a9ae27e8228d76ab0420584","ba06bf784edafe0db0e2bd1f6ecf3465b81f6b1819871bf190a0e0137b5b7f18","a0500233cb989bcb78f5f1a81f51eabc06b5c39e3042c560a7489f022f1f55a3","220508b3fb6b773f49d8fb0765b04f90ef15caacf0f3d260e3412ed38f71ef09","1ad113089ad5c188fec4c9a339cb53d1bcbb65682407d6937557bb23a6e1d4e5","e56427c055602078cbf0e58e815960541136388f4fc62554813575508def98b6","1f58b0676a80db38df1ce19d15360c20ce9e983b35298a5d0b4aa4eb4fb67e0f","3d67e7eb73c6955ee27f1d845cae88923f75c8b0830d4b5440eea2339958e8ec","11fec302d58b56033ab07290a3abc29e9908e29d504db9468544b15c4cd7670d","c66d6817c931633650edf19a8644eea61aeeb84190c7219911cefa8ddea8bd9a","ab1359707e4fc610c5f37f1488063af65cda3badca6b692d44b95e8380e0f6c2","86f4f26e7e2e216f49db89fe0e5f66dc6966edb34b6bb3d0e93608a223b1fed8","4a62e901bdc1d3d523871a38ee07dacc0effe7fd8215c21d6a51fc2093322b48","3cfef0a604c9dfc2c07224b8cecbeeef9c2d5ccbd50b3d0e1eeab4fb68520bfd","605ea258c6c3b91cb0ecd5e4919a5b2a9bbe2f23ec3f142b5ad35a21346ffcd2","40cdf91e74e7c77dac9a17722a4a3b15b4f871e826cbe69526427b8506576ae0","38f2df96177845e42488a11d158b384ae8181c2b12ae0bc5330f1b533d90fd91","9df5edd54d4afc9bb695688921a05cebd8870619538c927cac7d395f4b6ec800","1cfadb9c4a495fad01ed62596448f4e18b0683dcc49762c2c3398b1b03a48806","bf3384492d133b72050ad33351cf775d9f7f52a5257a03b556da3c18f437dd73",{"version":"033d57edce704430d2e4ec84d7ec4f01924b04cfbc2f61a8378543d149bee2a4","signature":"5ba04081d5f823f0208b19da4e77b80cd823c95bdbd46970bed4c5f8f46d20e8"},"ffb8f678245c8807cde1e6fb7cf2f2be05958c3865e8d3196e88292ce9fcf56a",{"version":"efb3cb1128420e634f8ff7c437e69bda1c64feae78fb61937e4042e5bf0f2ed4","signature":"387f8b492fc626791f902029aa9483172a7a223304bb21b0efe4a49ca32a219c"},{"version":"73a0da7ab212401ab26a349c331660dae8034beb75bd23cb08afe86a86094296","signature":"268fa8fb8891026a3b8092af9e4c27072abb20ece8d21d17c94289eef5443144"},"152b81b748a92d98dd7c46545e6ba1c44dc5be517534395e0d9fef82554b64b8","a7607ef485c11c0381cf58624f91e63346bcb41709b8e880b5cb1961e4b9de51","9e3cd884f7eac19b502dd0edfe29ae6b3021a491cd7eb8a530d63c34c367a783","3c0a3b2401dfd932551257b4cff1fe61e36da660ed359c565a56db1877773a77","181694d1f7a579e57c55efb1418904efc513ebce0b08601e94f288674104359e","f26f7ce74fc73d3176941bb4172450cd97e34787ae584de49c2d16c191cb37fc","e7f5e282da2ddeee8bbc6671459c35dd3144e0ab23a0abaaf77db598cfa896ee","4801a5fb4f8b7f0897189c79cd6d3fedb99a43a4604e9dd76c0cd92d4eb269ee","eed0cfbd238f0f9def37d26d793393c8cfb59afe28ecd1a4639a58905abdadf1","79cda812e4d3e249cbf90015a050ab333aaa41af08f143276aa0862dde976dbe","9a12e92309c84ef3d701bb9d01813e4bdb1a850136710be03f745fdc77df7ff3","1f4b26b6651d390085bc11e982a36d21e57a0fb34ad9e2910041851f47a02773","93b6c52c6e42184dae94619aeda58da74219cbef411e2aca4301c8da7647340b","416eec23b202526964d0f5ebf0ca9e0d8c08e4260bc0946143b66f1a1e17b787","688c9dfd2b7114f5f01022abb5b179659f990d5af5924f185c2644ca99fe7b77","f17c007d95f666ecf664ff13ca8efc196980597c4ca152a0baaa82b2525e2328","02ff761f690163463a4e7594d666e4c73995c4f72746a5967b3477d9ecf62c4e","0e60e0cbf2283adfd5a15430ae548cd2f662d581b5da6ecd98220203e7067c70","473d9269f1f277be1e222b80b5912b26f924efe13c1f418e569617ec34342720","f5b284ceadf71472a8fbf555dbd91079cce0ce7ba54f65dd63d18deec84cd11d","11f848107bc2f7535adccd37b55f018a0f18abbf5a1cd276f5776779618c37ed","8f47ed340254a8ccdf37035d9cba70f53a4d899804da840b47f4c3b07a7b2063","e5bd26052c0f4b600728cc41f03f00c20776d5dc53e8226600e0bf1dbcd66220","50b54f6dac82c34e8c12b35eac220ccc178f51e84813179826da0e3e96283af9","0c112f7206883caa95fa6b4558f3d05141d61910c05379660e1493b716a88656","6fd6fcadeab3b973ea52c2dbfcc960f23e086ea3bc07aaa0e1c6d0d690f8e776","6dbc7c87a2dfb95c594c5da54f7a8081f3019bb1bf6dcd72eeb6239ee0e243cb","a59fdd5525468b9afe1fef2238f5b990c640723bd430c589b4c963d576209be8","23c0f554c1fab508370678aca41cf9b1d6a6a00069e499d803d43387067fea9d","016f140691ab5fea3357a89c6a254ff8ada91173d22d36921bb8295fe5d828ab","ee219b4332439451cbf9ee34584e8a7e67be35d8ed3d1b292769a09483a102ce","305c2373ff739ceca5780a204766c76617e74b551f6fc646a358b5f687a77333","61c5821b70e113b15f24593e7061e6302635448ae700d813f06560ca5f140727","1e127052ae269b7f278b828978b962eb93bbc6134c0bda8b03e3f39df5c3865d","716cb84b8b410c52de9e7b310b2125cbc390a7c59e929a5c0a29514345b9ba9f","edabf50cfd2310b9af7214ecb821e0af6c43f66d8b5fb297d532f27bba242088","1687d528ca6c51a635f9a4022973f472221700464be83810788238a595cb588c","32162214c3f25748f784283a3f6059ad3d09d845faccc52b5c2cf521eace6bd6","4a13f78f265e7deb260bd0cc9063b9927a39f99f7cc8bb62b0310aa3a1df3efd","c04c509a58cc86b654326592aca64d7ceab81a208735c391dd171ca438114ea9","74c6a2352b00e41d352cc23e98e8d6313d5631738a5ea734f1c7bff0192b0f47","fc94bcfb823846ba8b4c1727520a3d509c9f517d4e803dfb45e6a71b41000eb8","93f9f2f55cc8393683048c720e30bc416bc3589a5d3f04a24d8bdc2d29c08589","e4c09f8a818679f80931fae1d0ca3dec192708c510c9f33fe56d71abe8337c59","b1cc0dfdc0455283ccf003185dbbc51e2c15299aff343413310eaf45c4572323","196f3c5da872983f8f0d2242c2cecc4fae85684d887ae1eef6be6b13b4138233","970c9e6d3c4184ca0c36d86dc29cc3e7b151d6aa4c1f2185fb97650b05a07055","af4beeac0e879b673f8b874e5fe013bdebfb17f0213142e5037ac90aea86d636","c620ccd98c18e71d7e39a79bea47b4f4724c3a1f30f78d2cdd03cf707ae64e4d","150f375c7f5c01a15d531c961468f1a04a1c21dc4e4a372ca4661700d66cc9c2","8aabc7d8676ba6098fc30c95eca03a331df41ac4c08213207a9329998f32d1b0","9d8464e1c6b7f30c4121d28b11c112da81c496c65e65948fbc7d5b5f23b50cdc","6b88a632af960a4140730527eb670c3d3e6eae0da573f0df2849909d9bb3e5f3","ab2f4f2d874d18918f0abb55e5a89a36ab875e01e3e9efa6e19efbd65295800b","2212906ab48ae8891080a68a19ba3ab53a4927d360feb34120051aff4ae980ae","57fb7ca63631577603d247484cb716a44aaef2fed76ff4d39db23391fc469695","ccc635892c2121c569281e8605f63b964d9067d8c560fdd0d8c0305aa3436b0a","56abe182c8ac81afc695eeefc9dbf6a637c8a8365b672053746678a3bfc6ca7c","df4b5e6fe2a91140a1ed2f8f94e01d4c836a069cee23a2d0a83a00cf649f8505","a43ee2d0bc49ad3cdc9a12c9e284adca7ecd30688dbffdbbd4b75244af498231","480afcb2c1ea07d5a33101f39ee49c4e433df5279bcc901c86299ed51df066c7","58add5da26530fecb38667d08702a6ce8c0387ebb1d685f35caba5559d365bc5","9bbcda8e62203eae2ff2f7ff61fb443222974c125f6e0e8a280ab8765d55b5f3","1cd3a865010365344f689258ccc229341c5610bd036cdf51a0369e78a2cc297f","2babba65e6d8e6b0303d5e7ba9ad221c89bda004d2e703eebb8884e342bfba27","52946a32d09191026f3c889bdfc1e0fce88dda141472a8d8a60aef9d83502b7f","2300d5812cfd6747c34de25950a11a84c0cb93dd5613b46a74cf1422d61d3c9f","febbe46be2865dfc342fc690fc91311eacf3f4f6c4f83fa9ca32c27581c016bf","f64fff46fcd20e44ed057398a9872269bb547d85eb6a40050f8b6794d2ef093f","bc5626a4f279345cc49bca110c83adb6885d74044f818abcfdc11802c569ba1b","baef294f6ea8cfd7e45932669b7cbc6aa1621d3ae6d2c9515acc3ea484fb4be0","7e6aa4667eefa889cbd66fa1cc50f432f674d32a6e9f58a7d2beedd34c9f44a6","c97e0165511e0fa9e4da49681b649c9b846200811da3101d41876c1df166287a","3fb1a6b4a14f2a08fc360d0891db68a4643b393262af448a0811d4acd150490b","79c15e25133240ab56678614a2705cba30578b93c0c2ea6c07e86d87c7ce26d1","fde15ccf34319bfbbd71a8453a9121f4161908668caf13740fa38af176e41a00","76ead0d03259ad18a7263ffbc74f38f74799ee98d46dbaabbb2db35f15d0adae","64377a93588b37bc8e0a09166b7078e7ddfa59010b15710941c3c29475728097","e2ac01d9d3742f9514c692d9ebe96af7f7c7df07ca38f40e456d214f72f475db","a7022bab77511e11e629442479fb478b3433ae15af2b70d02d5d4fdb1f2a38d1","1558c642e03689d42843e7b047b9c20e77ee09ab388ff854484db5dcfbed11da","f17c007d95f666ecf664ff13ca8efc196980597c4ca152a0baaa82b2525e2328","02ff761f690163463a4e7594d666e4c73995c4f72746a5967b3477d9ecf62c4e","473d9269f1f277be1e222b80b5912b26f924efe13c1f418e569617ec34342720","2859adaa4f2db3d4f0fc37ad86f056045341496b58fba0dbc16a222f9d5d55b1","655ed305e8f4cb95d3f578040301a4e4d6ace112b1bd8824cd32bda66c3677d1","f4ab8874e2d8fcfa22d239e84c59d00b7f4f3a4a14f4f06d7974b9512c59e9c3","8da65c108ea40f3009b7c00ac811efa43e77e7a2afb2471a69526ca9192e9849","cb789da1f75dc9d53848949aed3bb1d521de13c6340e5792a6b3f2c5e0c53e29","82b70e72d3e16b95c6f933b0d146240214ef01dfe8e270f6e50f349223b0615d","e4f1aa581dce6c84a244b5b5f1160f6e7465d0c6d48948ff6f1069a630fe9925","60b042f1a2a32d4d5e065e7fb229399562b9949984e63e09fd6a42dbc8e22c35","5f07468c2f5315f463874d73b8293cb135b228f59280e164a840e5d919b565fa","f025aff69699033567ebb4925578dedb18f63b4aa185f85005451cfd5fc53343","9b9e004c2bee844a5a58e8803a1ae0c8075a2caab3d567f69a6eec72f154626a","64cc158e07ce953307a95ee711b67fc8cd980380d12aee33670d483ba6f642f3","01b8fe09ea0b18ceba458308fd349bd2545227995c1b370a6897ea7c8f4ae577","a24a9c59b7baecbb85c0ace2c07c9c5b7c2330bb5a2ae5d766f6bbf68f75e727","2ee6c6e12729bd41bf99cd5a1158650d3afe9cd435e2d3ce6746de2dbf93a2ad","4484870aac79f12400497cea19aba493150811f10eb720f4cd52095d928ebe6f","e9203259c5f820618a0c10df0e0e28df87f2469770461540919b23d864b0e2f8","faa0ccaee1e4151600c618b91f22e29d7c3090555841fbc7cfcba0bb8dc78dda","23809dc5154c50a704bf5903da3cca5e2d8770f9a8ac77217d5cebc494eebeeb","363b99235b46cfdd75b8308c71c1ff2d492e383593350b33f307e0746aca3789","6df3174b7fff6ce47402ffa987624c82c772afc5bcbc68d7cecc3d08406278a2","9d47eb88df11d4e049b2bb0b7236944cf4a517444f805e0c2f9f00b5b8a722ce","42c3d521301dba91d2841f7f176b8803e5524c6cf7ce6a90b6708385f2ece433","71725ba9235f9d2aa02839162b1df2df59fd9dd91c110a54ea02112243d7a4d9","2260e58465ee7adc7184c7e3011bd6f69e5dfa4c9847e1f1c5d2c5fe39b5c50c","e38903e3ceaa0b1ad18686596cb633f37112b4c1e421dbeec709a0393abab34e","f0cfc87e830959608e727239836d9e0c759894b419758961839d308c42b79b09","6ae375916cb1ab039b0d8191a1b2a4c5ee7d54ca55523edf9c648751d9bf4f3f","75efaf7dee18ee6d8f78255e370175a788984656170872fd7c6dfba9ed78e456","dd8bd6e49db072bb7f67a50fcfc2ed85da25216e8357f69662785ec9cff6805a","0532ceeb57a03056a1db9ef93c44e2b6868047b9e77e3ce94a82cfad3ac764be","5b016a20523753fb55e44223ad7e4f2728a3d6b83771e8f2b52a3212d612f494","fc831788d78ccee85562cbbdca8dbf955dc1540d9bc33525b7cfee9be2732de7","e73d6e940ebcd5418bc881ec9f3eb2c9beaf089673a1dda5ec9d74f8f3a674e3","f9a8a74a3277dba5994b7830faa0a72ccbbdde4edc546579ea5f3bfdd833f1c3","6396e07ac9d5653e2ea225c491e7d5b548165eddb49e4293dcad42445fdd2b5b","4356f53b3bcd48f4253465746ccdb0baa38c6bf929712349bffea5426e59c2f4","c07dcc52ff4bf2fe6b9027067089b2696ea8debfab01c5a89567b57c85a8143a","01c7b17b4106823329939ac4971770aa720b35749401312a9c6610ba61a689f3","bd950bd6332b0ad5bc3705374665c44bd87f3018774aa62c05bcd89788fed40a","6ff08a01c33e70289d44268bb3954c9f3c71162085b829dc323279fbf3a70b2a","25f989f57da0150fc531eb60696097517c300e41c48f9a35cf8c39a2884e9e9e","932cade1c5802123b5831f332ad8a6297f0f7d14d0ee04f5a774408f393e2200","fb22796881ca27b61f649e17d8511814ec740e0b53cc6a1c7d3ddb4e37ca840f","33336c1c320134b37d9f2981944a0a20807adc566419f2c2f864faf090886d1b","29e9716dd95e62c62d4a1bc945947978f3fbaa74a58b74e2ee295f98819cf2dc","3143e9ab69bc3de6addad59d87d6ec39287c3ace7573aafedd711b446060dcdc","b97c43cc5c758375c762546242bd2e5dfecea495d11e7ab8670cdf7800a78a55","76e8204d6c3f2411c8b0f3e0db34e190880acbc525be4facf882abac3c6e9868","cf09d50994d492c9b49980e8a1e8b6296f8c3b7cfba248fb0a0705fcbd0066de","a7d8688d9233bd072030b3cbb02a32c045f21703d83a9588f9e0da388554c099","75191cd4f498eecaa71d357b68f198aabff6e9aeb094783bc2e88224f2440e91","68ab7ba45dd13e321f9b4ffa2cc9092c66c8a32eac53f8268ef992c9d83bddae","b0eca460992491df024ff9e11c06c57f83d8f389edfc37f343abbf1760133020","571feed5f3992f4e5f52368891259c9675f387e062be59b4fe4064c4fa12189f","88ab5c0465b89250245fb97b17192adbd7d3ee26b26e29f948a410c4dc554663","e2b2b5211b339ddcd1f1c80a80ac970090a969770b7931ab6fb6641d0321c0d2","d5547676ace66ee69a2f115546f63c8df3aa08924dfe3c5330adc309f9e88db0","35f382d45192c13ffc63e6b7349bf9eb02d62db2b4ee12b5cf3806d7fc7268f7","d3cfab7286ea31393cc979667efd26fe307af4f0ad8c5df262c8be322a2cbef5","95874c2af12afd52e7042a326aef0303f3a6f66733c7f18a88a9c6f3fa78d2ee","8d5ad6a07dc84c0fba4041cba09bfc9c75bc06b04e8843405e3fb2456c721438","e680ff882bccd2bb6574128a17e1a32d7a49b8eb161a9a739dd60f8362e3d4d9","a4d6781f2d709fe9f1378181deb3f457036c7ebc7968a233f7bc16f343b98ced","aa7d0095b9763a3b47c1851036d87152872a3d7f1733732b0a0e14655b0ee34b","74c58bc6847528c4349c884453f3c604b7d1cf4f9df2ba4816ea1b35e0ddea3d","650e65e5459ca1f2ac14e3159f698a75e44025e0cf736aabc120962b6027b243","51143dd06200d0d0670f19cf38bb0c8cc9e0c2a0b1ad86dc517d68e8fdcaec89","d52e8b1f1b5eec0aa771eeb11b56c5ee3bc310b40619c9aa5e9dfd47cd294c7f","df36b61b42f520aae6a0648a0113c9b5fc8edf20ffe1b38c2143f6bc3777bc6b","aa8b0c5153f089b9d1ebd06eefd5223728e52df664ca5c64abe2736fd3c15b95","8cab00e89567640fcfccaa32fe0ce060e87ba452730c1d609005cf1e577eb262",{"version":"1ace17751d70faeb553e6c2ebf24b6a966c624530c5a329cd43fbb4ba9791dd8","affectsGlobalScope":true},"57c088bde14f28759bbe0592b144e721cc4157e0a56e8525a21f73aa6a8a1895","8d1daa090c8d6ef835bd07b8624d77c6fc72b550f64f8f48a8275d79aa024dd2",{"version":"f33af9895a0887691445245d0178741daf9ed37fbcdf1ed9110231db761d4f7b","signature":"60de895c7cce0f4f695797a2ff1669bbb65c41eec3df0e44a8c3f137de84d2a6"},{"version":"a667b8f2c267e624c2a62ad5eef6606ff89736529bc45283b239b34120e349ed","signature":"634c3acd4420c2714a9d9995ab90bb51d6ac87b875b72b11af3acb9bfb78a14e"},"eedf623d3dc5b1868d1262188b2539b4cee3565a0efab4b13fa2f63de2b74eb6","ac202c5534a939893a35623bd55dcbd2883f4b95f68d0b2b9e38d8726be857c3",{"version":"b52b80d11f309bccb1c5fc968f24039fa3c6f94886ae65a6778ac89e1de7578c","signature":"4e5f84c36f03a3255abdfe9601e0111a63866daaa6c05b7e2b92939f21591671"},"48104d634621ad9262978a994ca2cd4a8c85b967db9d55e792f9aab35a4d6eb6",{"version":"2e7eb8626a2b1fc1af21fb1d2bd319f0b5734e9c61e8623c10fb966ba3ed63d2","signature":"fff67f7e81d74a0179e1c1160928403f66642fe5319ebf627dc8c8f2a596636b"},"e4a3f8a2d17619a682f316b297172bbfc7b9f37cc10a7b1c8dc667d03157cc99","85dfc66d7717ca206042bd0ea7dfe8f7304cd94a5687ba6c786320f0c3d4a851",{"version":"36151afd482bced5b154ae9282975605f79730b7988291e5825962317cf31d2e","signature":"5039123e48dc32f1efe557fe6a7f23db63d9dda69b8e04781fc47f3e52b5a204"},{"version":"68a2099f7616c8289ec91a19a417f1db2a4b974e7b3b6fc1313e23a2dc46e54c","signature":"8260cd48afa94d36503d9d4cd02970ec9ba86b6eea9efbb87bee0168937560df"},{"version":"d11bda81ace04f45754586a2eed55006f0b8558f85af7b570c81a1167ebb919d","signature":"a4f7274c26f563078d2cd8ad2ead4f6719c9c5b50d98b0a30ab376f9c335b4cd"},{"version":"d55d2c5bc75e60302ac506f2140219b1facbfc752d1cb28f1777f41aa90fbb3c","signature":"d1d57fc8a97d965cef996bec8643333af963cabb0161760dd7818eba1c4465d1"},"a06034f1c97c900e3b04aa259e6e44b83a6d806c4ef7370d97230e209639aba1","963d59066dd6742da1918a6213a209bcc205b8ee53b1876ee2b4e6d80f97c85e","a55ca8b5f8c6a8535bb26fac1e10132a5338234ca3d5b9ed739fbc8ef41c8075","639158c94f9813ac0ef48abc5e24788b5acce74e961ad6d9ac30c18273965bfe","40644bd969bb2ed15b52a94216ff5e8a5d6e42c92d7172a585813e2ff429fa37","ec0f7e00b3a3aba82da9aba482c5717e7b4b9b70f3966bcdb16f2be374417437","760cb9b76ab53a2f704ee0e731e162bcfc6af609f5e400a668efe2cc7923e4f4","cc957354aa3c94c9961ebf46282cfde1e81d107fc5785a61f62c67f1dd3ac2eb","7ec238b220ea991b6643e24191b1f552a65956d5f6de4c6144e700b9985265d8","93de1c6dab503f053efe8d304cb522bb3a89feab8c98f307a674a4fae04773e9","dae3d1adc67ac3dbd1cd471889301339ec439837b5df565982345be20c8fca9a","5426e62886b7be7806312d31a00e8f7dccd6fe63ba9bbefe99ee2eab29cc48a3","3ebae8c00411116a66fca65b08228ea0cf0b72724701f9b854442100aab55aba","8b06ac3faeacb8484d84ddb44571d8f410697f98d7bfa86c0fda60373a9f5215","7eb06594824ada538b1d8b48c3925a83e7db792f47a081a62cf3e5c4e23cf0ee","f5638f7c2f12a9a1a57b5c41b3c1ea7db3876c003bab68e6a57afd6bcc169af0","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","d8aab31ba8e618cc3eea10b0945de81cb93b7e8150a013a482332263b9305322","462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","7adecb2c3238794c378d336a8182d4c3dd2c4fa6fa1785e2797a3db550edea62","dc12dc0e5aa06f4e1a7692149b78f89116af823b9e1f1e4eae140cd3e0e674e6","1bfc6565b90c8771615cd8cfcf9b36efc0275e5e83ac7d9181307e96eb495161","8a8a96898906f065f296665e411f51010b51372fa260d5373bf9f64356703190","7f82ef88bdb67d9a850dd1c7cd2d690f33e0f0acd208e3c9eba086f3670d4f73",{"version":"ccfd8774cd9b929f63ff7dcf657977eb0652e3547f1fcac1b3a1dc5db22d4d58","affectsGlobalScope":true},"93c4fc5b5237c09bc9ed65cb8f0dc1d89034406ab40500b89701341994897142","b0d10e46cfe3f6c476b69af02eaa38e4ccc7430221ce3109ae84bb9fb8282298","fab58e600970e66547644a44bc9918e3223aa2cbd9e8763cec004b2cfb48827e","70e9a18da08294f75bf23e46c7d69e67634c0765d355887b9b41f0d959e1426e","6ba73232c9d3267ca36ddb83e335d474d2c0e167481e3dec416c782894e11438"],"options":{"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"module":1,"noImplicitAny":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","skipLibCheck":true,"strictNullChecks":true,"strictPropertyInitialization":false,"target":2},"fileIdsList":[[376],[349,351,353],[278,281],[28,29,347,352],[28,29,347,350],[28,29,347,348],[29,215,278,279,280,281],[376,377,378,379,380],[376,378],[28,29,371],[28,29],[383],[384],[389,394],[28],[28,29,372],[399],[282],[176,184],[175],[177],[184],[171],[168,169,170,171,172,173,174,177,178,179,180,181,182,183],[176,178],[179,184],[17,167,187],[17,156,167,187],[156,167,187,188],[159,185,186],[41],[42],[41,42,47],[43,44,45,46,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150],[42,70],[37,38,39,40,41,42,47,151,152,153,154,158],[47],[39,156,157],[41,155],[42,47],[37,38],[28,29,283],[28,29,284],[284,285],[28,29,286,287,289,292],[292,300],[286,287,289,290,292],[286,292],[292,300,301,302],[28,29,286,287,289,290,292,293,294,295,297,298,299,300,303],[292],[290,292],[28,29,289,292],[28,29,289,292,294,296],[286,287,288,289,290,291],[29],[287,289,290,291,292,293,294,295,297,298,299,300,301,302,303,304,305,306,307],[286],[215,278,281],[309,311,312,319,332,335],[28,29,309,311,331,335],[309,311,313,332,334,335],[316,317,319,335],[318,332,333],[332],[308,319,320,331,335,336],[319,332,335],[313,314,315,318,330,335],[28,29,278,281,308,311,312,319,322,323,324,326,328,332,335,336],[29,325,327],[334],[29,278,281,310,336],[28,29,209,277,278,281,308,335],[304,308,321,327,335,336,337],[277,278,281,308,309,310,311,312,319,320,321,322,323,324,327,328,331,332,335,336,337,338,339,340,341,342,346],[308,321,327,335,336,338],[309,311,313,330,332,335],[278,281,319,328,329],[28,29,309,311,320,330,332,335,336],[309,311,313,332],[28,29,304,308,309,319,320,321,327,332,335,336],[28,29,313,319,332,335],[312,313,319,335],[28,29,332,335],[254,255],[200],[29,200,201,202,203,204,258,259,262],[28,29,200,208,256,257,263],[28,29,201],[206],[200,205,207,211,253,258,263],[29,211,221,222,252],[200,201,202,209,255,259,263],[29,200,201,205,207,208,255,258,259,263,264],[203,204,222,260,261,263,266,267,268,269,270,271,272,273,274,275],[29,200,203,263],[29,200,263],[29,216],[216],[29,240],[218,219,225,226],[216,217,221,224],[216,217,220],[217,218,219],[216,223,228,229,233,234,235,236,237,238,246,247,249,250,251,277],[227],[232],[226],[245],[248],[226,230,231],[216,217,221],[226,242,243,244],[216,217,239,241],[240],[29,200,201,202,205,206,207,208,209,210,211,253,254,255,258,259,263,264,265,266,276],[222,270],[222,270,276],[207,211,222,253,261,269],[29,202],[29,205,207,209,254],[28,29,256],[200,203,261,263,270],[200,202,203,207,222,260,263,271],[28,29,200,207,255,257,263],[207,210,253,255,258],[268,270],[200,202,263],[211,253,262],[200,203,205,207,211,222,253,260,261,263],[29,212,213,214,215,216],[212,216],[387,390],[387,390,391,392],[389],[386,393],[164],[165],[164,166],[161],[162],[161,162,163],[388],[278,281,343],[343,344,345],[27],[21,22,23,24,25,28],[21,24,26],[18,19,27,32,34],[20,27,30],[20,27,33],[20,31],[355,362,364,366],[27,191,354],[19,35],[17,36],[35,36,160,358,360],[27,373],[190],[190,192],[159,191,193,358],[27,195,196],[27,33,191,195],[17,18,361,362,363,365,367,368],[18],[354],[159],[35,160,197,354,358,364,365],[354,355],[35,160,189,194,197,198,199,356,357],[198,359],[35,192,194,197,199,354,355,356],[19],[20],[355,364],[160],[195],[364],[160,198],[355]],"referencedMap":[[378,1],[354,2],[352,3],[350,3],[348,3],[353,4],[351,5],[349,6],[281,7],[280,3],[381,8],[377,1],[379,9],[380,1],[372,10],[382,11],[384,12],[385,13],[395,14],[28,15],[29,15],[373,16],[400,17],[283,18],[185,19],[176,20],[178,21],[171,22],[172,23],[184,24],[173,22],[174,22],[179,25],[180,26],[181,22],[188,27],[186,28],[189,29],[187,30],[42,31],[143,32],[147,32],[146,32],[144,32],[145,32],[148,32],[43,32],[55,32],[44,32],[57,32],[59,32],[52,32],[53,32],[54,32],[58,32],[60,32],[45,32],[56,32],[46,32],[48,33],[49,32],[50,32],[51,32],[67,32],[66,32],[151,34],[61,32],[63,32],[62,32],[64,32],[65,32],[150,32],[149,32],[68,32],[71,35],[72,35],[74,32],[117,32],[116,32],[75,32],[114,32],[118,32],[76,32],[77,32],[78,35],[119,32],[113,32],[73,35],[120,32],[79,35],[121,32],[80,35],[103,32],[81,32],[122,32],[82,32],[111,35],[84,32],[85,32],[123,32],[87,32],[89,32],[90,32],[96,32],[97,32],[91,35],[125,32],[112,35],[124,35],[92,32],[93,32],[126,32],[94,32],[86,35],[127,32],[110,32],[128,32],[95,35],[98,32],[99,32],[115,35],[129,32],[130,32],[109,32],[88,32],[131,35],[132,32],[133,32],[134,32],[100,32],[102,32],[104,32],[101,35],[83,32],[105,32],[108,32],[106,32],[107,32],[69,32],[141,32],[135,32],[136,32],[138,32],[139,32],[137,32],[142,32],[140,32],[159,36],[157,37],[158,38],[156,39],[155,32],[154,40],[153,41],[47,31],[284,42],[285,43],[286,44],[290,45],[302,46],[300,47],[293,48],[307,47],[303,49],[304,50],[301,46],[294,51],[299,52],[306,53],[297,54],[292,55],[298,53],[288,56],[308,57],[287,58],[337,59],[338,3],[320,59],[313,60],[332,61],[317,62],[318,63],[334,64],[333,65],[309,65],[321,66],[339,67],[319,68],[327,69],[326,70],[335,71],[311,72],[336,73],[340,74],[347,75],[341,76],[329,77],[330,78],[331,79],[316,80],[328,81],[314,82],[325,11],[315,83],[312,84],[266,85],[201,86],[263,87],[264,88],[205,89],[207,90],[259,91],[253,92],[208,93],[209,94],[276,95],[204,96],[203,97],[240,98],[239,99],[217,99],[243,100],[227,101],[225,102],[218,99],[221,103],[220,104],[252,105],[223,99],[228,106],[229,99],[233,107],[234,99],[235,108],[236,99],[237,107],[238,99],[246,109],[247,99],[249,110],[250,99],[251,106],[244,100],[232,111],[231,112],[230,99],[245,113],[242,114],[241,115],[226,99],[248,101],[219,99],[277,116],[274,117],[275,118],[270,119],[267,120],[255,121],[200,56],[257,122],[269,123],[272,124],[258,125],[210,56],[254,126],[271,127],[265,128],[261,129],[262,130],[216,131],[214,132],[213,132],[391,133],[393,134],[392,133],[390,135],[394,136],[30,11],[165,137],[166,138],[167,139],[162,140],[163,141],[164,142],[389,143],[345,144],[346,145],[344,144],[343,56],[279,3],[324,3],[24,146],[26,147],[27,148],[35,149],[31,150],[34,151],[32,152],[367,153],[365,154],[368,153],[363,155],[362,156],[361,157],[374,158],[192,159],[191,159],[193,160],[194,161],[197,162],[196,163],[369,164],[19,165],[364,166],[160,167],[33,15],[366,168],[356,169],[358,170],[360,171],[357,172],[375,15]],"exportedModulesMap":[[378,1],[354,2],[352,3],[350,3],[348,3],[353,4],[351,5],[349,6],[281,7],[280,3],[381,8],[377,1],[379,9],[380,1],[372,10],[382,11],[384,12],[385,13],[395,14],[28,15],[29,15],[373,16],[400,17],[283,18],[185,19],[176,20],[178,21],[171,22],[172,23],[184,24],[173,22],[174,22],[179,25],[180,26],[181,22],[188,27],[186,28],[189,29],[187,30],[42,31],[143,32],[147,32],[146,32],[144,32],[145,32],[148,32],[43,32],[55,32],[44,32],[57,32],[59,32],[52,32],[53,32],[54,32],[58,32],[60,32],[45,32],[56,32],[46,32],[48,33],[49,32],[50,32],[51,32],[67,32],[66,32],[151,34],[61,32],[63,32],[62,32],[64,32],[65,32],[150,32],[149,32],[68,32],[71,35],[72,35],[74,32],[117,32],[116,32],[75,32],[114,32],[118,32],[76,32],[77,32],[78,35],[119,32],[113,32],[73,35],[120,32],[79,35],[121,32],[80,35],[103,32],[81,32],[122,32],[82,32],[111,35],[84,32],[85,32],[123,32],[87,32],[89,32],[90,32],[96,32],[97,32],[91,35],[125,32],[112,35],[124,35],[92,32],[93,32],[126,32],[94,32],[86,35],[127,32],[110,32],[128,32],[95,35],[98,32],[99,32],[115,35],[129,32],[130,32],[109,32],[88,32],[131,35],[132,32],[133,32],[134,32],[100,32],[102,32],[104,32],[101,35],[83,32],[105,32],[108,32],[106,32],[107,32],[69,32],[141,32],[135,32],[136,32],[138,32],[139,32],[137,32],[142,32],[140,32],[159,36],[157,37],[158,38],[156,39],[155,32],[154,40],[153,41],[47,31],[284,42],[285,43],[286,44],[290,45],[302,46],[300,47],[293,48],[307,47],[303,49],[304,50],[301,46],[294,51],[299,52],[306,53],[297,54],[292,55],[298,53],[288,56],[308,57],[287,58],[337,59],[338,3],[320,59],[313,60],[332,61],[317,62],[318,63],[334,64],[333,65],[309,65],[321,66],[339,67],[319,68],[327,69],[326,70],[335,71],[311,72],[336,73],[340,74],[347,75],[341,76],[329,77],[330,78],[331,79],[316,80],[328,81],[314,82],[325,11],[315,83],[312,84],[266,85],[201,86],[263,87],[264,88],[205,89],[207,90],[259,91],[253,92],[208,93],[209,94],[276,95],[204,96],[203,97],[240,98],[239,99],[217,99],[243,100],[227,101],[225,102],[218,99],[221,103],[220,104],[252,105],[223,99],[228,106],[229,99],[233,107],[234,99],[235,108],[236,99],[237,107],[238,99],[246,109],[247,99],[249,110],[250,99],[251,106],[244,100],[232,111],[231,112],[230,99],[245,113],[242,114],[241,115],[226,99],[248,101],[219,99],[277,116],[274,117],[275,118],[270,119],[267,120],[255,121],[200,56],[257,122],[269,123],[272,124],[258,125],[210,56],[254,126],[271,127],[265,128],[261,129],[262,130],[216,131],[214,132],[213,132],[391,133],[393,134],[392,133],[390,135],[394,136],[30,11],[165,137],[166,138],[167,139],[162,140],[163,141],[164,142],[389,143],[345,144],[346,145],[344,144],[343,56],[279,3],[324,3],[24,146],[26,147],[27,148],[35,173],[31,150],[34,174],[32,152],[367,175],[365,154],[368,175],[363,173],[362,156],[361,176],[374,158],[192,159],[191,159],[193,160],[194,167],[197,177],[196,177],[369,164],[19,165],[364,166],[160,167],[366,178],[356,169],[358,179],[360,171],[357,180],[375,15]],"semanticDiagnosticsPerFile":[378,376,354,352,350,348,353,351,349,281,280,381,377,379,380,22,372,382,383,384,385,395,215,371,28,29,396,373,397,398,70,25,399,400,283,386,185,176,175,182,178,169,168,170,171,172,184,173,174,179,180,181,177,183,188,186,189,187,40,42,143,147,146,144,145,148,43,55,44,57,59,52,53,54,58,60,45,56,46,48,49,50,51,67,66,151,61,63,62,64,65,150,149,68,71,72,74,117,116,75,114,118,76,77,78,119,113,73,120,79,121,80,103,81,122,82,111,84,85,123,87,89,90,96,97,91,125,112,124,92,93,126,94,86,127,110,128,95,98,99,115,129,130,109,88,131,132,133,134,100,102,104,101,83,105,108,106,107,69,141,135,136,138,139,137,142,140,159,157,158,156,155,154,39,41,37,152,153,47,38,282,284,285,286,290,302,300,293,289,307,295,303,304,305,301,294,299,306,297,291,292,298,288,308,287,337,338,320,313,332,317,318,334,333,309,321,339,319,327,326,335,311,336,340,347,341,329,330,331,316,328,314,323,322,310,325,315,312,342,266,273,201,263,264,205,207,259,253,208,209,206,211,202,268,256,276,204,203,240,239,217,243,227,224,225,218,221,220,252,223,228,229,233,234,235,236,237,238,246,247,249,250,251,244,232,231,230,245,242,241,226,248,219,277,274,275,270,267,255,200,257,269,272,258,210,254,271,265,222,261,262,260,216,214,213,212,296,387,391,393,392,390,394,30,165,166,167,162,163,161,164,389,388,345,346,344,343,279,278,324,17,23,21,24,26,27,4,5,9,8,3,10,11,12,13,14,15,16,2,1,7,6,35,20,31,34,32,367,370,36,365,368,363,362,361,374,192,190,191,193,194,197,196,369,18,19,364,355,195,198,160,33,366,356,358,360,357,359,199,375]},"version":"4.4.4"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roit/roit-data-firestore",
3
- "version": "0.0.32",
3
+ "version": "0.0.33-alpha",
4
4
  "main": "dist/index.js",
5
5
  "types": "src/index.ts",
6
6
  "scripts": {
@@ -10,15 +10,16 @@
10
10
  },
11
11
  "author": "Author",
12
12
  "devDependencies": {
13
+ "@google-cloud/bigquery": "6.0.3",
13
14
  "@types/jest": "^27.0.2",
14
15
  "@types/node": "^6.0.46",
15
16
  "@types/shelljs": "^0.8.9",
16
17
  "@types/uuid": "^8.3.1",
17
18
  "jest": "^27.3.1",
19
+ "redis": "4.0.6",
18
20
  "ts-jest": "^27.0.7",
19
21
  "ts-node": "^8.3.0",
20
- "typescript": "4.4.4",
21
- "redis": "4.0.6"
22
+ "typescript": "4.4.4"
22
23
  },
23
24
  "dependencies": {
24
25
  "@google-cloud/firestore": "4.10.1",
@@ -51,4 +52,4 @@
51
52
  "testEnvironment": "node"
52
53
  },
53
54
  "keywords": []
54
- }
55
+ }
@@ -0,0 +1,37 @@
1
+ import { Environment } from "roit-environment"
2
+ import { PersistFirestoreReadProps } from "../model/PersistFirestoreReadProps"
3
+ import { BigQueryFirestoreReadAuditProvider } from "./providers/BigQueryFirestoreReadAuditProvider"
4
+
5
+ export class FirestoreReadAuditResolver {
6
+
7
+ private static instance: FirestoreReadAuditResolver = new FirestoreReadAuditResolver()
8
+
9
+ private provider: BigQueryFirestoreReadAuditProvider
10
+
11
+ constructor() {
12
+ if (Environment.getProperty('firestore.enableReadAudit') && !this.isReadAuditTimeEnded()) {
13
+ this.provider = new BigQueryFirestoreReadAuditProvider()
14
+ }
15
+ }
16
+
17
+ static getInstance(): FirestoreReadAuditResolver {
18
+ return this.instance
19
+ }
20
+
21
+ private isReadAuditTimeEnded() {
22
+ const readAuditEndAt = Environment.getProperty('firestore.readAuditEndAt')
23
+ if (readAuditEndAt) {
24
+ return new Date(readAuditEndAt) < new Date()
25
+ }
26
+ return false
27
+ }
28
+
29
+ async persistFirestoreRead(props: PersistFirestoreReadProps) {
30
+ if (this.provider) {
31
+ if (!this.isReadAuditTimeEnded()) {
32
+ await this.provider.persistFirestoreRead(props)
33
+ }
34
+ }
35
+ }
36
+
37
+ }
@@ -0,0 +1,127 @@
1
+ import { Env, Environment } from 'roit-environment'
2
+ import { RepositorySystemException } from "../../exception/RepositorySystemException";
3
+ import { PersistFirestoreReadProps } from '../../model/PersistFirestoreReadProps';
4
+ import { PlatformTools } from '../../platform/PlatformTools';
5
+
6
+ const dataset = 'firestore_read_audit'
7
+ const table = `${dataset}_table`
8
+
9
+ export class BigQueryFirestoreReadAuditProvider {
10
+
11
+ /**
12
+ * Big Query module instance loaded dynamically
13
+ */
14
+ private bigQuery: any
15
+
16
+ private tableIsCreated: boolean = false
17
+
18
+ constructor() {
19
+ if (Environment.acceptedEnv(Env.TEST)) return
20
+
21
+ if (!this.bigQuery) {
22
+ const projectId = Environment.getProperty("firestore.projectId")
23
+
24
+ if (!projectId) {
25
+ throw new RepositorySystemException(`projectId is required in env.yaml {firestore.projectId}`)
26
+ }
27
+
28
+ try {
29
+ const { BigQuery } = this.loadBigQuery()
30
+ this.bigQuery = new BigQuery({
31
+ projectId
32
+ })
33
+ } catch (err) {
34
+ console.error(err)
35
+ throw new RepositorySystemException(`Error in initializeApp: ${err}`)
36
+ }
37
+ }
38
+
39
+ }
40
+
41
+ private async createFirestoreAuditDatasetAndTableIfNecessary() {
42
+ const TWO_DAYS_IN_MS = '172800000'
43
+
44
+ const schema = [
45
+ { name: 'collection', type: 'STRING' },
46
+ { name: 'service', type: 'STRING' },
47
+ { name: 'env', type: 'STRING' },
48
+ { name: 'repositoryClassName', type: 'STRING' },
49
+ { name: 'functionSignature', type: 'STRING' },
50
+ { name: 'params', type: 'STRING' },
51
+ { name: 'insertAt', type: 'DATETIME' },
52
+ ]
53
+
54
+ const options = {
55
+ schema,
56
+ location: 'US',
57
+ timePartitioning: {
58
+ type: 'DAY',
59
+ expirationMS: TWO_DAYS_IN_MS,
60
+ field: 'insertAt'
61
+ }
62
+ }
63
+
64
+ const handleBigQueryError = (e: any) => {
65
+ if (!JSON.stringify(e.errors).includes('Exists')) {
66
+ console.log('Error [createFirestoreAuditDatasetAndTableIfNecessary]', e)
67
+ }
68
+ }
69
+
70
+ try {
71
+ await this.bigQuery.createDataset(dataset)
72
+ } catch (e) {
73
+ handleBigQueryError(e)
74
+ }
75
+
76
+ try {
77
+ await this.bigQuery
78
+ .dataset(dataset)
79
+ .createTable(table, options)
80
+ } catch (e) {
81
+ handleBigQueryError(e)
82
+ }
83
+ }
84
+
85
+ async persistFirestoreRead({
86
+ collection,
87
+ repositoryClassName,
88
+ functionSignature,
89
+ params
90
+ }: PersistFirestoreReadProps) {
91
+ try {
92
+ if (!this.tableIsCreated) {
93
+ await this.createFirestoreAuditDatasetAndTableIfNecessary()
94
+ }
95
+
96
+ this.tableIsCreated = true
97
+
98
+ const response = await this.bigQuery
99
+ .dataset(dataset)
100
+ .table(table)
101
+ .insert([{
102
+ collection,
103
+ repositoryClassName,
104
+ functionSignature,
105
+ params,
106
+ env: Environment.currentEnv(),
107
+ insertAt: this.bigQuery.datetime(new Date().toISOString()),
108
+ service: Environment.getProperty('service')
109
+ }])
110
+ console.log("inserted", response)
111
+ } catch (error) {
112
+ console.log(JSON.stringify(error.errors))
113
+ }
114
+ }
115
+
116
+ private loadBigQuery(): any {
117
+ try {
118
+ return PlatformTools.load("bigquery")
119
+ } catch (e) {
120
+ console.log(e)
121
+ throw new Error(
122
+ `Cannot use Firestore Read Audit because BigQuery is not installed. Please run "npm i @google-cloud/bigquery@6.0.3 --save-exact".`,
123
+ )
124
+ }
125
+ }
126
+
127
+ }
@@ -0,0 +1,6 @@
1
+ export type PersistFirestoreReadProps = {
2
+ collection: string,
3
+ repositoryClassName: string,
4
+ functionSignature: string,
5
+ params?: string
6
+ }
@@ -6,6 +6,8 @@ export class PlatformTools {
6
6
  switch (name) {
7
7
  case "redis":
8
8
  return require("redis")
9
+ case "bigquery":
10
+ return require("@google-cloud/bigquery")
9
11
  }
10
12
  } catch (err) {
11
13
  return require(path.resolve(
@@ -4,6 +4,7 @@ import { QueryPredicateFunctionTransform } from './QueryPredicateFunctionTransfo
4
4
  import { RepositoryOptions } from '../model/RepositoryOptions';
5
5
  import { MQuery, MQuerySimple, Config } from '../model/MQuery';
6
6
  import { CacheResolver } from "../cache/CacheResolver";
7
+ import { FirestoreReadAuditResolver } from "../firestore-read-audit/FirestoreReadAuditResolver";
7
8
 
8
9
  export class ManualQueryHelper {
9
10
 
@@ -65,6 +66,16 @@ export class ManualQueryHelper {
65
66
  const data = this.getData(snapshot);
66
67
 
67
68
  await cacheResolver.cacheResult(className, 'any', data, JSON.stringify(config))
69
+
70
+ const firestoreReadAuditResolver: FirestoreReadAuditResolver = (global as any).instances.firestoreReadAuditResolver
71
+
72
+ await firestoreReadAuditResolver.persistFirestoreRead({
73
+ collection: repositoryOptions.collection,
74
+ repositoryClassName: className,
75
+ functionSignature: 'manual-query',
76
+ params: JSON.stringify(config)
77
+ })
78
+
68
79
  return data
69
80
  }
70
81
  }
@@ -1,6 +1,7 @@
1
1
  import { targetConstructorToSchema } from 'class-validator-jsonschema';
2
2
  import { CacheResolver } from '../cache/CacheResolver';
3
3
  import { ValidatorDataHandle } from '../exception/handle/ValidatorDataHandle';
4
+ import { FirestoreReadAuditResolver } from '../firestore-read-audit/FirestoreReadAuditResolver';
4
5
  import { QueryPredicate } from "../model/QueryPredicate";
5
6
  import { RepositoryOptions } from "../model/RepositoryOptions";
6
7
  import { EnvironmentUtil } from '../util/EnvironmentUtil';
@@ -33,7 +34,8 @@ export class QueryPredicateFunctionTransform {
33
34
  Environment,
34
35
  queryCreatorConfig: new QueryCreatorConfig,
35
36
  cacheResolver: CacheResolver.getInstance(),
36
- environmentUtil: new EnvironmentUtil
37
+ environmentUtil: new EnvironmentUtil,
38
+ firestoreReadAuditResolver: FirestoreReadAuditResolver.getInstance()
37
39
  }
38
40
 
39
41
  if (!options?.collection) {
@@ -60,7 +62,7 @@ export class QueryPredicateFunctionTransform {
60
62
  .replace(methodSignature, 'async function')
61
63
  .replace('return __awaiter(this, void 0, void 0, function* () {', '')
62
64
  .replace(/yield/g, 'await')
63
- .replace('<COLLECTION_REPLACE>', options.collection)
65
+ .replace(/<COLLECTION_REPLACE>/g, options.collection)
64
66
  .replace("let modelName = ''", `let modelName = '${modelName}'`)
65
67
  .replace("let validatorOptions", `let validatorOptions = ${options?.validatorOptions ? JSON.stringify(options?.validatorOptions) : undefined}`)
66
68
  .replace("let repositoryClassName = ''", `let repositoryClassName = '${repositoryClassName}'`)
@@ -2,6 +2,7 @@ import { Firestore } from "@google-cloud/firestore";
2
2
  import { CacheResolver } from "../../cache/CacheResolver";
3
3
  import { ValidatorDataHandle } from "../../exception/handle/ValidatorDataHandle";
4
4
  import { RepositoryBusinessException } from "../../exception/RepositoryBusinessException";
5
+ import { FirestoreReadAuditResolver } from "../../firestore-read-audit/FirestoreReadAuditResolver";
5
6
  import { Paging } from "../../model/Paging";
6
7
  import { EnvironmentUtil } from "../../util/EnvironmentUtil";
7
8
  import { QueryCreatorConfig } from "../QueryCreatorConfig";
@@ -285,6 +286,14 @@ export class CreateFunction {
285
286
 
286
287
  await cacheResolver.cacheResult(repositoryClassName, methodSignature, items, 'Any')
287
288
 
289
+ const firestoreReadAuditResolver: FirestoreReadAuditResolver = (global as any).instances.firestoreReadAuditResolver
290
+
291
+ await firestoreReadAuditResolver.persistFirestoreRead({
292
+ collection: '<COLLECTION_REPLACE>',
293
+ repositoryClassName,
294
+ functionSignature: methodSignature
295
+ })
296
+
288
297
  return items
289
298
  }
290
299
 
@@ -316,6 +325,15 @@ export class CreateFunction {
316
325
 
317
326
  await cacheResolver.cacheResult(repositoryClassName, methodSignature, item, id)
318
327
 
328
+ const firestoreReadAuditResolver: FirestoreReadAuditResolver = (global as any).instances.firestoreReadAuditResolver
329
+
330
+ await firestoreReadAuditResolver.persistFirestoreRead({
331
+ collection: '<COLLECTION_REPLACE>',
332
+ repositoryClassName,
333
+ functionSignature: methodSignature,
334
+ params: id
335
+ })
336
+
319
337
  return item
320
338
  }
321
339
  }
@@ -6,6 +6,7 @@
6
6
 
7
7
  const db = global.instances.globalDbFile.FirestoreInstance.getInstance()
8
8
  const cacheResolver = global.instances.cacheResolver
9
+ const firestoreReadAuditResolver = global.instances.firestoreReadAuditResolver
9
10
 
10
11
  const environmentUtil = global.instances.environmentUtil
11
12
  if(environmentUtil.areWeTesting()) {
@@ -21,7 +22,6 @@
21
22
 
22
23
  const collection = db.collection('<collection_name_replace>')
23
24
 
24
-
25
25
  if(Number(global.instances.Environment.getProperty('firestore.debug'))) { console.debug('[DEBUG] Executing query >', "<query_predicate_replace>") }
26
26
  const documentRef = global.instances.queryCreatorConfig.buildPaging(collection, paging)
27
27
  const snapshot = await documentRef<query_predicate_replace>.get()
@@ -35,5 +35,12 @@
35
35
 
36
36
  await cacheResolver.cacheResult(repositoryClassName, methodSignature, items, <params_replace>)
37
37
 
38
+ await firestoreReadAuditResolver.persistFirestoreRead({
39
+ collection: '<collection_name_replace>',
40
+ repositoryClassName: repositoryClassName,
41
+ functionSignature: methodSignature,
42
+ params: <params_replace>
43
+ })
44
+
38
45
  return items
39
46
  }