├── .eslintrc.js ├── .gitignore ├── .prettierrc ├── README.md ├── dist ├── app.module.d.ts ├── app.module.js ├── app.module.js.map ├── auth │ ├── auth.controller.d.ts │ ├── auth.controller.js │ ├── auth.controller.js.map │ ├── auth.guard.d.ts │ ├── auth.guard.js │ ├── auth.guard.js.map │ ├── auth.module.d.ts │ ├── auth.module.js │ ├── auth.module.js.map │ ├── auth.service.d.ts │ ├── auth.service.js │ ├── auth.service.js.map │ ├── dto │ │ ├── auth-response.dto.d.ts │ │ ├── auth-response.dto.js │ │ ├── auth-response.dto.js.map │ │ ├── auth.dto.d.ts │ │ ├── auth.dto.js │ │ ├── auth.dto.js.map │ │ ├── login-user.dto.d.ts │ │ ├── login-user.dto.js │ │ ├── login-user.dto.js.map │ │ ├── register-user.dto.d.ts │ │ ├── register-user.dto.js │ │ └── register-user.dto.js.map │ ├── jwt.strategy.d.ts │ ├── jwt.strategy.js │ └── jwt.strategy.js.map ├── common │ └── decorators │ │ ├── auth-user.decorator.d.ts │ │ ├── auth-user.decorator.js │ │ └── auth-user.decorator.js.map ├── main.d.ts ├── main.js ├── main.js.map ├── prisma │ ├── prisma.module.d.ts │ ├── prisma.module.js │ ├── prisma.module.js.map │ ├── prisma.service.d.ts │ ├── prisma.service.js │ └── prisma.service.js.map ├── tsconfig.build.tsbuildinfo └── users │ ├── dto │ ├── create-user.dto.d.ts │ ├── create-user.dto.js │ └── create-user.dto.js.map │ ├── users.controller.d.ts │ ├── users.controller.js │ ├── users.controller.js.map │ ├── users.module.d.ts │ ├── users.module.js │ ├── users.module.js.map │ ├── users.service.d.ts │ ├── users.service.js │ └── users.service.js.map ├── nest-cli.json ├── package-lock.json ├── package.json ├── prisma ├── migrations │ ├── 20210928064342_users │ │ └── migration.sql │ └── migration_lock.toml └── schema.prisma ├── src ├── app.module.ts ├── auth │ ├── auth.controller.ts │ ├── auth.guard.ts │ ├── auth.module.ts │ ├── auth.service.ts │ ├── dto │ │ ├── auth-response.dto.ts │ │ ├── login-user.dto.ts │ │ └── register-user.dto.ts │ └── jwt.strategy.ts ├── common │ └── decorators │ │ └── auth-user.decorator.ts ├── main.ts ├── prisma │ ├── prisma.module.ts │ └── prisma.service.ts └── users │ ├── users.controller.ts │ ├── users.module.ts │ └── users.service.ts ├── test ├── app.e2e-spec.ts └── jest-e2e.json ├── tsconfig.build.json └── tsconfig.json /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: '@typescript-eslint/parser', 3 | parserOptions: { 4 | project: 'tsconfig.json', 5 | sourceType: 'module', 6 | }, 7 | plugins: ['@typescript-eslint/eslint-plugin'], 8 | extends: [ 9 | 'plugin:@typescript-eslint/recommended', 10 | 'plugin:prettier/recommended', 11 | ], 12 | root: true, 13 | env: { 14 | node: true, 15 | jest: true, 16 | }, 17 | ignorePatterns: ['.eslintrc.js'], 18 | rules: { 19 | '@typescript-eslint/interface-name-prefix': 'off', 20 | '@typescript-eslint/explicit-function-return-type': 'off', 21 | '@typescript-eslint/explicit-module-boundary-types': 'off', 22 | '@typescript-eslint/no-explicit-any': 'off', 23 | }, 24 | }; 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | # Keep environment variables out of version control 3 | .env 4 | 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all" 4 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dinushchathurya/nestjs-prisma-bcrypt-jwt-authentication/601f29a5b6dd93ed8a4cd8ae98fd8b83843d62b4/README.md -------------------------------------------------------------------------------- /dist/app.module.d.ts: -------------------------------------------------------------------------------- 1 | export declare class AppModule { 2 | } 3 | -------------------------------------------------------------------------------- /dist/app.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | exports.AppModule = void 0; 10 | const common_1 = require("@nestjs/common"); 11 | const users_module_1 = require("./users/users.module"); 12 | const prisma_module_1 = require("./prisma/prisma.module"); 13 | const auth_module_1 = require("./auth/auth.module"); 14 | let AppModule = class AppModule { 15 | }; 16 | AppModule = __decorate([ 17 | (0, common_1.Module)({ 18 | imports: [users_module_1.UsersModule, prisma_module_1.PrismaModule, auth_module_1.AuthModule], 19 | controllers: [], 20 | providers: [], 21 | }) 22 | ], AppModule); 23 | exports.AppModule = AppModule; 24 | //# sourceMappingURL=app.module.js.map -------------------------------------------------------------------------------- /dist/app.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uDAAmD;AACnD,0DAAsD;AACtD,oDAAgD;AAOhD,IAAa,SAAS,GAAtB,MAAa,SAAS;CAAG,CAAA;AAAZ,SAAS;IALrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,0BAAW,EAAE,4BAAY,EAAE,wBAAU,CAAC;QAChD,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,EAAE;KACd,CAAC;GACW,SAAS,CAAG;AAAZ,8BAAS"} -------------------------------------------------------------------------------- /dist/auth/auth.controller.d.ts: -------------------------------------------------------------------------------- 1 | import { AuthService } from './auth.service'; 2 | import { LoginDto } from './dto/login-user.dto'; 3 | import { AuthResponse } from './dto/auth-response.dto'; 4 | import { User } from '.prisma/client'; 5 | import { CreateUserDto } from './dto/register-user.dto'; 6 | export declare class AuthController { 7 | private readonly authService; 8 | constructor(authService: AuthService); 9 | login(loginDto: LoginDto): Promise; 10 | register(createUserDto: CreateUserDto): Promise; 11 | getLoggedUser(user: User): User; 12 | } 13 | -------------------------------------------------------------------------------- /dist/auth/auth.controller.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | var __param = (this && this.__param) || function (paramIndex, decorator) { 12 | return function (target, key) { decorator(target, key, paramIndex); } 13 | }; 14 | Object.defineProperty(exports, "__esModule", { value: true }); 15 | exports.AuthController = void 0; 16 | const common_1 = require("@nestjs/common"); 17 | const auth_service_1 = require("./auth.service"); 18 | const login_user_dto_1 = require("./dto/login-user.dto"); 19 | const auth_user_decorator_1 = require("../common/decorators/auth-user.decorator"); 20 | const passport_1 = require("@nestjs/passport"); 21 | const register_user_dto_1 = require("./dto/register-user.dto"); 22 | let AuthController = class AuthController { 23 | constructor(authService) { 24 | this.authService = authService; 25 | } 26 | login(loginDto) { 27 | return this.authService.login(loginDto); 28 | } 29 | register(createUserDto) { 30 | return this.authService.register(createUserDto); 31 | } 32 | getLoggedUser(user) { 33 | return user; 34 | } 35 | }; 36 | __decorate([ 37 | (0, common_1.Post)('/login'), 38 | __param(0, (0, common_1.Body)()), 39 | __metadata("design:type", Function), 40 | __metadata("design:paramtypes", [login_user_dto_1.LoginDto]), 41 | __metadata("design:returntype", Promise) 42 | ], AuthController.prototype, "login", null); 43 | __decorate([ 44 | (0, common_1.Post)('/register'), 45 | __param(0, (0, common_1.Body)()), 46 | __metadata("design:type", Function), 47 | __metadata("design:paramtypes", [register_user_dto_1.CreateUserDto]), 48 | __metadata("design:returntype", Promise) 49 | ], AuthController.prototype, "register", null); 50 | __decorate([ 51 | (0, common_1.UseGuards)((0, passport_1.AuthGuard)('jwt')), 52 | (0, common_1.Get)('/profile'), 53 | __param(0, (0, auth_user_decorator_1.default)()), 54 | __metadata("design:type", Function), 55 | __metadata("design:paramtypes", [Object]), 56 | __metadata("design:returntype", Object) 57 | ], AuthController.prototype, "getLoggedUser", null); 58 | AuthController = __decorate([ 59 | (0, common_1.Controller)('auth'), 60 | __metadata("design:paramtypes", [auth_service_1.AuthService]) 61 | ], AuthController); 62 | exports.AuthController = AuthController; 63 | //# sourceMappingURL=auth.controller.js.map -------------------------------------------------------------------------------- /dist/auth/auth.controller.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../src/auth/auth.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwE;AACxE,iDAA6C;AAC7C,yDAAgD;AAEhD,kFAAiE;AAEjE,+CAA6C;AAC7C,+DAAwD;AAGxD,IAAa,cAAc,GAA3B,MAAa,cAAc;IAEvB,YAA6B,WAAuB;QAAvB,gBAAW,GAAX,WAAW,CAAY;IAAI,CAAC;IAGzD,KAAK,CAAS,QAAiB;QAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAGD,QAAQ,CAAS,aAA2B;QACxC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACpD,CAAC;IAID,aAAa,CAAa,IAAU;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;CAEJ,CAAA;AAfG;IADC,IAAA,aAAI,EAAC,QAAQ,CAAC;IACR,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAU,yBAAQ;;2CAE9B;AAGD;IADC,IAAA,aAAI,EAAC,WAAW,CAAC;IACR,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAe,iCAAa;;8CAE3C;AAID;IAFC,IAAA,kBAAS,EAAC,IAAA,oBAAS,EAAC,KAAK,CAAC,CAAC;IAC3B,IAAA,YAAG,EAAC,UAAU,CAAC;IACD,WAAA,IAAA,6BAAQ,GAAE,CAAA;;;;mDAExB;AAlBQ,cAAc;IAD1B,IAAA,mBAAU,EAAC,MAAM,CAAC;qCAG0B,0BAAW;GAF3C,cAAc,CAoB1B;AApBY,wCAAc"} -------------------------------------------------------------------------------- /dist/auth/auth.guard.d.ts: -------------------------------------------------------------------------------- 1 | import { CanActivate, ExecutionContext } from '@nestjs/common'; 2 | import { Observable } from 'rxjs'; 3 | export declare class AuthGuard implements CanActivate { 4 | canActivate(context: ExecutionContext): boolean | Promise | Observable; 5 | } 6 | -------------------------------------------------------------------------------- /dist/auth/auth.guard.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | exports.AuthGuard = void 0; 10 | const common_1 = require("@nestjs/common"); 11 | let AuthGuard = class AuthGuard { 12 | canActivate(context) { 13 | const req = context.switchToHttp().getRequest(); 14 | const token = req.headers['authorization']; 15 | if (!token) { 16 | throw new common_1.UnauthorizedException('token not found'); 17 | } 18 | if (token !== 'MY_AUTH_TOKEN') { 19 | throw new common_1.UnauthorizedException('invalid token'); 20 | } 21 | return true; 22 | } 23 | }; 24 | AuthGuard = __decorate([ 25 | (0, common_1.Injectable)() 26 | ], AuthGuard); 27 | exports.AuthGuard = AuthGuard; 28 | //# sourceMappingURL=auth.guard.js.map -------------------------------------------------------------------------------- /dist/auth/auth.guard.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"auth.guard.js","sourceRoot":"","sources":["../../src/auth/auth.guard.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAkG;AAIlG,IAAa,SAAS,GAAtB,MAAa,SAAS;IACpB,WAAW,CACT,OAAyB;QAGzB,MAAM,GAAG,GAAW,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAE3C,IAAG,CAAC,KAAK,EAAE;YACT,MAAM,IAAI,8BAAqB,CAAC,iBAAiB,CAAC,CAAC;SACpD;QAED,IAAG,KAAK,KAAK,eAAe,EAAE;YAC5B,MAAM,IAAI,8BAAqB,CAAC,eAAe,CAAC,CAAC;SAClD;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAjBY,SAAS;IADrB,IAAA,mBAAU,GAAE;GACA,SAAS,CAiBrB;AAjBY,8BAAS"} -------------------------------------------------------------------------------- /dist/auth/auth.module.d.ts: -------------------------------------------------------------------------------- 1 | export declare class AuthModule { 2 | } 3 | -------------------------------------------------------------------------------- /dist/auth/auth.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | exports.AuthModule = void 0; 10 | const common_1 = require("@nestjs/common"); 11 | const auth_service_1 = require("./auth.service"); 12 | const passport_1 = require("@nestjs/passport"); 13 | const jwt_1 = require("@nestjs/jwt"); 14 | const prisma_service_1 = require("../prisma/prisma.service"); 15 | const auth_controller_1 = require("./auth.controller"); 16 | const jwt_strategy_1 = require("./jwt.strategy"); 17 | const users_module_1 = require("../users/users.module"); 18 | let AuthModule = class AuthModule { 19 | }; 20 | AuthModule = __decorate([ 21 | (0, common_1.Module)({ 22 | imports: [ 23 | users_module_1.UsersModule, 24 | passport_1.PassportModule, 25 | jwt_1.JwtModule.register({ 26 | secret: process.env.JWT_SECRET, 27 | signOptions: { 28 | expiresIn: '1h' 29 | } 30 | }) 31 | ], 32 | providers: [auth_service_1.AuthService, prisma_service_1.PrismaService, jwt_strategy_1.JwtStrategy], 33 | controllers: [auth_controller_1.AuthController] 34 | }) 35 | ], AuthModule); 36 | exports.AuthModule = AuthModule; 37 | //# sourceMappingURL=auth.module.js.map -------------------------------------------------------------------------------- /dist/auth/auth.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../../src/auth/auth.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,iDAA6C;AAC7C,+CAAkD;AAClD,qCAAwC;AACxC,6DAA0D;AAC1D,uDAAmD;AACnD,iDAA6C;AAC7C,wDAAqD;AAgBrD,IAAa,UAAU,GAAvB,MAAa,UAAU;CAAG,CAAA;AAAb,UAAU;IAdtB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,0BAAW;YACX,yBAAc;YACd,eAAS,CAAC,QAAQ,CAAC;gBACjB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;gBAC9B,WAAW,EAAE;oBACX,SAAS,EAAE,IAAI;iBAChB;aACF,CAAC;SACH;QACD,SAAS,EAAE,CAAC,0BAAW,EAAE,8BAAa,EAAE,0BAAW,CAAC;QACpD,WAAW,EAAE,CAAC,gCAAc,CAAC;KAC9B,CAAC;GACW,UAAU,CAAG;AAAb,gCAAU"} -------------------------------------------------------------------------------- /dist/auth/auth.service.d.ts: -------------------------------------------------------------------------------- 1 | import { PrismaService } from 'src/prisma/prisma.service'; 2 | import { LoginDto } from './dto/login-user.dto'; 3 | import { JwtService } from '@nestjs/jwt'; 4 | import { AuthResponse } from './dto/auth-response.dto'; 5 | import { CreateUserDto } from './dto/register-user.dto'; 6 | import { UsersService } from 'src/users/users.service'; 7 | export declare class AuthService { 8 | private readonly prismaService; 9 | private jwtService; 10 | private readonly usersService; 11 | constructor(prismaService: PrismaService, jwtService: JwtService, usersService: UsersService); 12 | login(loginDto: LoginDto): Promise; 13 | register(createUserDto: CreateUserDto): Promise; 14 | } 15 | -------------------------------------------------------------------------------- /dist/auth/auth.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.AuthService = void 0; 13 | const common_1 = require("@nestjs/common"); 14 | const prisma_service_1 = require("../prisma/prisma.service"); 15 | const jwt_1 = require("@nestjs/jwt"); 16 | const bcrypt = require("bcrypt"); 17 | const users_service_1 = require("../users/users.service"); 18 | let AuthService = class AuthService { 19 | constructor(prismaService, jwtService, usersService) { 20 | this.prismaService = prismaService; 21 | this.jwtService = jwtService; 22 | this.usersService = usersService; 23 | } 24 | async login(loginDto) { 25 | const { username, password } = loginDto; 26 | const user = await this.prismaService.user.findUnique({ 27 | where: { username } 28 | }); 29 | if (!user) { 30 | throw new common_1.NotFoundException('user not found'); 31 | } 32 | const validatePassword = await bcrypt.compare(password, user.password); 33 | if (!validatePassword) { 34 | throw new common_1.UnauthorizedException('invalid password'); 35 | } 36 | return { 37 | token: this.jwtService.sign({ 38 | username 39 | }), 40 | user 41 | }; 42 | } 43 | async register(createUserDto) { 44 | const user = await this.usersService.createUser(createUserDto); 45 | return { 46 | token: this.jwtService.sign({ username: user.username }), 47 | user 48 | }; 49 | } 50 | }; 51 | AuthService = __decorate([ 52 | (0, common_1.Injectable)(), 53 | __metadata("design:paramtypes", [prisma_service_1.PrismaService, jwt_1.JwtService, users_service_1.UsersService]) 54 | ], AuthService); 55 | exports.AuthService = AuthService; 56 | //# sourceMappingURL=auth.service.js.map -------------------------------------------------------------------------------- /dist/auth/auth.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../src/auth/auth.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAsF;AACtF,6DAA0D;AAE1D,qCAAyC;AACzC,iCAAiC;AAGjC,0DAAuD;AAIvD,IAAa,WAAW,GAAxB,MAAa,WAAW;IAEpB,YAA6B,aAA4B,EAAU,UAAsB,EAAmB,YAA0B;QAAzG,kBAAa,GAAb,aAAa,CAAe;QAAU,eAAU,GAAV,UAAU,CAAY;QAAmB,iBAAY,GAAZ,YAAY,CAAc;IAAI,CAAC;IAE3I,KAAK,CAAC,KAAK,CAAC,QAAiB;QACzB,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAExC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;YAClD,KAAK,EAAE,EAAE,QAAQ,EAAE;SACtB,CAAC,CAAC;QAEH,IAAG,CAAC,IAAI,EAAE;YACN,MAAM,IAAI,0BAAiB,CAAC,gBAAgB,CAAC,CAAC;SACjD;QAED,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEvE,IAAI,CAAC,gBAAgB,EAAE;YACnB,MAAM,IAAI,8BAAqB,CAAC,kBAAkB,CAAC,CAAC;SACvD;QAED,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACxB,QAAQ;aACX,CAAC;YACF,IAAI;SACP,CAAA;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,aAA4B;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC/D,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxD,IAAI;SACP,CAAA;IACL,CAAC;CACJ,CAAA;AApCY,WAAW;IADvB,IAAA,mBAAU,GAAE;qCAGmC,8BAAa,EAAsB,gBAAU,EAAiC,4BAAY;GAF7H,WAAW,CAoCvB;AApCY,kCAAW"} -------------------------------------------------------------------------------- /dist/auth/dto/auth-response.dto.d.ts: -------------------------------------------------------------------------------- 1 | import { User } from ".prisma/client"; 2 | export declare class AuthResponse { 3 | token: string; 4 | user: User; 5 | } 6 | -------------------------------------------------------------------------------- /dist/auth/dto/auth-response.dto.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.AuthResponse = void 0; 4 | class AuthResponse { 5 | } 6 | exports.AuthResponse = AuthResponse; 7 | //# sourceMappingURL=auth-response.dto.js.map -------------------------------------------------------------------------------- /dist/auth/dto/auth-response.dto.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"auth-response.dto.js","sourceRoot":"","sources":["../../../src/auth/dto/auth-response.dto.ts"],"names":[],"mappings":";;;AAEA,MAAa,YAAY;CAGxB;AAHD,oCAGC"} -------------------------------------------------------------------------------- /dist/auth/dto/auth.dto.d.ts: -------------------------------------------------------------------------------- 1 | export declare class LoginDto { 2 | username: string; 3 | password: string; 4 | } 5 | -------------------------------------------------------------------------------- /dist/auth/dto/auth.dto.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.LoginDto = void 0; 13 | const class_validator_1 = require("class-validator"); 14 | class LoginDto { 15 | } 16 | __decorate([ 17 | (0, class_validator_1.IsString)(), 18 | (0, class_validator_1.Length)(5, 10), 19 | __metadata("design:type", String) 20 | ], LoginDto.prototype, "username", void 0); 21 | __decorate([ 22 | (0, class_validator_1.IsString)(), 23 | (0, class_validator_1.Length)(6, 12), 24 | __metadata("design:type", String) 25 | ], LoginDto.prototype, "password", void 0); 26 | exports.LoginDto = LoginDto; 27 | //# sourceMappingURL=auth.dto.js.map -------------------------------------------------------------------------------- /dist/auth/dto/auth.dto.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"auth.dto.js","sourceRoot":"","sources":["../../../src/auth/dto/auth.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAmD;AAEnD,MAAa,QAAQ;CAQpB;AALG;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,CAAC;;0CACG;AAIjB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,CAAC;;0CACG;AAPrB,4BAQC"} -------------------------------------------------------------------------------- /dist/auth/dto/login-user.dto.d.ts: -------------------------------------------------------------------------------- 1 | export declare class LoginDto { 2 | username: string; 3 | password: string; 4 | } 5 | -------------------------------------------------------------------------------- /dist/auth/dto/login-user.dto.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.LoginDto = void 0; 13 | const class_validator_1 = require("class-validator"); 14 | class LoginDto { 15 | } 16 | __decorate([ 17 | (0, class_validator_1.IsString)(), 18 | (0, class_validator_1.Length)(5, 10), 19 | __metadata("design:type", String) 20 | ], LoginDto.prototype, "username", void 0); 21 | __decorate([ 22 | (0, class_validator_1.IsString)(), 23 | (0, class_validator_1.Length)(6, 12), 24 | __metadata("design:type", String) 25 | ], LoginDto.prototype, "password", void 0); 26 | exports.LoginDto = LoginDto; 27 | //# sourceMappingURL=login-user.dto.js.map -------------------------------------------------------------------------------- /dist/auth/dto/login-user.dto.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"login-user.dto.js","sourceRoot":"","sources":["../../../src/auth/dto/login-user.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAmD;AAEnD,MAAa,QAAQ;CAQpB;AALG;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,CAAC;;0CACG;AAIjB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,CAAC;;0CACG;AAPrB,4BAQC"} -------------------------------------------------------------------------------- /dist/auth/dto/register-user.dto.d.ts: -------------------------------------------------------------------------------- 1 | export declare class CreateUserDto { 2 | username: string; 3 | password: string; 4 | firstName: string; 5 | lastName: string; 6 | } 7 | -------------------------------------------------------------------------------- /dist/auth/dto/register-user.dto.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.CreateUserDto = void 0; 13 | const class_validator_1 = require("class-validator"); 14 | class CreateUserDto { 15 | } 16 | __decorate([ 17 | (0, class_validator_1.IsString)(), 18 | (0, class_validator_1.Length)(5, 10), 19 | __metadata("design:type", String) 20 | ], CreateUserDto.prototype, "username", void 0); 21 | __decorate([ 22 | (0, class_validator_1.IsString)(), 23 | (0, class_validator_1.Length)(6, 12), 24 | __metadata("design:type", String) 25 | ], CreateUserDto.prototype, "password", void 0); 26 | __decorate([ 27 | (0, class_validator_1.IsString)(), 28 | (0, class_validator_1.Length)(5, 10), 29 | __metadata("design:type", String) 30 | ], CreateUserDto.prototype, "firstName", void 0); 31 | __decorate([ 32 | (0, class_validator_1.IsString)(), 33 | (0, class_validator_1.Length)(5, 10), 34 | __metadata("design:type", String) 35 | ], CreateUserDto.prototype, "lastName", void 0); 36 | exports.CreateUserDto = CreateUserDto; 37 | //# sourceMappingURL=register-user.dto.js.map -------------------------------------------------------------------------------- /dist/auth/dto/register-user.dto.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"register-user.dto.js","sourceRoot":"","sources":["../../../src/auth/dto/register-user.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAmD;AAEnD,MAAa,aAAa;CAgBzB;AAbG;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,CAAC;;+CACG;AAIjB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,CAAC;;+CACG;AAIjB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,CAAC;;gDACI;AAIlB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,CAAC;;+CACG;AAfrB,sCAgBC"} -------------------------------------------------------------------------------- /dist/auth/jwt.strategy.d.ts: -------------------------------------------------------------------------------- 1 | import { Strategy } from "passport-jwt"; 2 | import { PrismaService } from "src/prisma/prisma.service"; 3 | declare const JwtStrategy_base: new (...args: any[]) => Strategy; 4 | export declare class JwtStrategy extends JwtStrategy_base { 5 | private readonly prismaService; 6 | constructor(prismaService: PrismaService); 7 | validate(payload: { 8 | username: string; 9 | }): Promise; 10 | } 11 | export {}; 12 | -------------------------------------------------------------------------------- /dist/auth/jwt.strategy.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.JwtStrategy = void 0; 13 | const common_1 = require("@nestjs/common"); 14 | const passport_1 = require("@nestjs/passport"); 15 | const passport_jwt_1 = require("passport-jwt"); 16 | const prisma_service_1 = require("../prisma/prisma.service"); 17 | let JwtStrategy = class JwtStrategy extends (0, passport_1.PassportStrategy)(passport_jwt_1.Strategy) { 18 | constructor(prismaService) { 19 | super({ 20 | jwtFromRequest: passport_jwt_1.ExtractJwt.fromAuthHeaderAsBearerToken(), 21 | ignoreExpiration: false, 22 | secretOrKey: process.env.JWT_SECRET 23 | }); 24 | this.prismaService = prismaService; 25 | } 26 | async validate(payload) { 27 | const user = await this.prismaService.user.findUnique({ 28 | where: { 29 | username: payload.username 30 | } 31 | }); 32 | return user; 33 | } 34 | }; 35 | JwtStrategy = __decorate([ 36 | (0, common_1.Injectable)(), 37 | __metadata("design:paramtypes", [prisma_service_1.PrismaService]) 38 | ], JwtStrategy); 39 | exports.JwtStrategy = JwtStrategy; 40 | //# sourceMappingURL=jwt.strategy.js.map -------------------------------------------------------------------------------- /dist/auth/jwt.strategy.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"jwt.strategy.js","sourceRoot":"","sources":["../../src/auth/jwt.strategy.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,+CAAoD;AACpD,+CAAoD;AACpD,6DAA0D;AAI1D,IAAa,WAAW,GAAxB,MAAa,WAAY,SAAQ,IAAA,2BAAgB,EAAC,uBAAQ,CAAC;IAEvD,YAA8B,aAA2B;QACrD,KAAK,CAAC;YACF,cAAc,EAAE,yBAAU,CAAC,2BAA2B,EAAE;YACxD,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;SACtC,CAAC,CAAC;QALuB,kBAAa,GAAb,aAAa,CAAc;IAMzD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAA4B;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;YAClD,KAAK,EAAE;gBACH,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC7B;SACJ,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC;IAChB,CAAC;CAEJ,CAAA;AApBY,WAAW;IADvB,IAAA,mBAAU,GAAE;qCAGmC,8BAAa;GAFhD,WAAW,CAoBvB;AApBY,kCAAW"} -------------------------------------------------------------------------------- /dist/common/decorators/auth-user.decorator.d.ts: -------------------------------------------------------------------------------- 1 | declare const AuthUser: (...dataOrPipes: any[]) => ParameterDecorator; 2 | export default AuthUser; 3 | -------------------------------------------------------------------------------- /dist/common/decorators/auth-user.decorator.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | const common_1 = require("@nestjs/common"); 4 | const AuthUser = (0, common_1.createParamDecorator)((_, ctx) => { 5 | const request = ctx.switchToHttp().getRequest(); 6 | const user = request.user; 7 | delete user.password; 8 | return user; 9 | }); 10 | exports.default = AuthUser; 11 | //# sourceMappingURL=auth-user.decorator.js.map -------------------------------------------------------------------------------- /dist/common/decorators/auth-user.decorator.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"auth-user.decorator.js","sourceRoot":"","sources":["../../../src/common/decorators/auth-user.decorator.ts"],"names":[],"mappings":";;AAAA,2CAAwE;AAGxE,MAAM,QAAQ,GAAG,IAAA,6BAAoB,EAAC,CAAC,CAAC,EAAE,GAAqB,EAAC,EAAE;IAC9D,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAY,CAAC;IAClC,OAAO,IAAI,CAAC,QAAQ,CAAC;IACrB,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC,CAAA;AAEF,kBAAe,QAAQ,CAAC"} -------------------------------------------------------------------------------- /dist/main.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /dist/main.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | const core_1 = require("@nestjs/core"); 4 | const app_module_1 = require("./app.module"); 5 | const common_1 = require("@nestjs/common"); 6 | async function bootstrap() { 7 | const app = await core_1.NestFactory.create(app_module_1.AppModule); 8 | app.useGlobalPipes(new common_1.ValidationPipe({ 9 | transform: true, 10 | whitelist: true, 11 | forbidNonWhitelisted: true 12 | })); 13 | await app.listen(3000); 14 | } 15 | bootstrap(); 16 | //# sourceMappingURL=main.js.map -------------------------------------------------------------------------------- /dist/main.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;AAAA,uCAA2C;AAC3C,6CAAyC;AACzC,2CAAgD;AAEhD,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,CAAC,CAAC;IAEhD,GAAG,CAAC,cAAc,CAChB,IAAI,uBAAc,CAAC;QACjB,SAAS,EAAC,IAAI;QACd,SAAS,EAAE,IAAI;QACf,oBAAoB,EAAE,IAAI;KAC3B,CAAC,CACH,CAAA;IACD,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AACD,SAAS,EAAE,CAAC"} -------------------------------------------------------------------------------- /dist/prisma/prisma.module.d.ts: -------------------------------------------------------------------------------- 1 | export declare class PrismaModule { 2 | } 3 | -------------------------------------------------------------------------------- /dist/prisma/prisma.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | exports.PrismaModule = void 0; 10 | const common_1 = require("@nestjs/common"); 11 | const prisma_service_1 = require("./prisma.service"); 12 | let PrismaModule = class PrismaModule { 13 | }; 14 | PrismaModule = __decorate([ 15 | (0, common_1.Module)({ 16 | providers: [prisma_service_1.PrismaService] 17 | }) 18 | ], PrismaModule); 19 | exports.PrismaModule = PrismaModule; 20 | //# sourceMappingURL=prisma.module.js.map -------------------------------------------------------------------------------- /dist/prisma/prisma.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"prisma.module.js","sourceRoot":"","sources":["../../src/prisma/prisma.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,qDAAiD;AAKjD,IAAa,YAAY,GAAzB,MAAa,YAAY;CAAG,CAAA;AAAf,YAAY;IAHxB,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,8BAAa,CAAC;KAC3B,CAAC;GACW,YAAY,CAAG;AAAf,oCAAY"} -------------------------------------------------------------------------------- /dist/prisma/prisma.service.d.ts: -------------------------------------------------------------------------------- 1 | import { OnModuleDestroy, OnModuleInit } from '@nestjs/common'; 2 | import { PrismaClient } from '@prisma/client'; 3 | export declare class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy { 4 | constructor(); 5 | onModuleInit(): Promise; 6 | onModuleDestroy(): Promise; 7 | } 8 | -------------------------------------------------------------------------------- /dist/prisma/prisma.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.PrismaService = void 0; 13 | const common_1 = require("@nestjs/common"); 14 | const client_1 = require("@prisma/client"); 15 | let PrismaService = class PrismaService extends client_1.PrismaClient { 16 | constructor() { 17 | super(); 18 | } 19 | async onModuleInit() { 20 | await this.$connect(); 21 | } 22 | async onModuleDestroy() { 23 | await this.$disconnect(); 24 | } 25 | }; 26 | PrismaService = __decorate([ 27 | (0, common_1.Injectable)(), 28 | __metadata("design:paramtypes", []) 29 | ], PrismaService); 30 | exports.PrismaService = PrismaService; 31 | //# sourceMappingURL=prisma.service.js.map -------------------------------------------------------------------------------- /dist/prisma/prisma.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"prisma.service.js","sourceRoot":"","sources":["../../src/prisma/prisma.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA2E;AAC3E,2CAA8C;AAG9C,IAAa,aAAa,GAA1B,MAAa,aACT,SAAQ,qBAAY;IAEpB;QACI,KAAK,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,YAAY;QACd,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,eAAe;QACjB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;CACJ,CAAA;AAdY,aAAa;IADzB,IAAA,mBAAU,GAAE;;GACA,aAAa,CAczB;AAdY,sCAAa"} -------------------------------------------------------------------------------- /dist/tsconfig.build.tsbuildinfo: -------------------------------------------------------------------------------- 1 | {"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.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/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.es2017.full.d.ts","../node_modules/reflect-metadata/index.d.ts","../node_modules/@nestjs/common/cache/cache.constants.d.ts","../node_modules/@nestjs/common/interfaces/abstract.interface.d.ts","../node_modules/@nestjs/common/interfaces/controllers/controller-metadata.interface.d.ts","../node_modules/@nestjs/common/interfaces/controllers/controller.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/arguments-host.interface.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/exception-filter.interface.d.ts","../node_modules/rxjs/dist/types/internal/subscription.d.ts","../node_modules/rxjs/dist/types/internal/subscriber.d.ts","../node_modules/rxjs/dist/types/internal/operator.d.ts","../node_modules/rxjs/dist/types/internal/observable.d.ts","../node_modules/rxjs/dist/types/internal/types.d.ts","../node_modules/rxjs/dist/types/internal/operators/audit.d.ts","../node_modules/rxjs/dist/types/internal/operators/audittime.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffer.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffercount.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffertime.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffertoggle.d.ts","../node_modules/rxjs/dist/types/internal/operators/bufferwhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/catcherror.d.ts","../node_modules/rxjs/dist/types/internal/operators/combinelatestall.d.ts","../node_modules/rxjs/dist/types/internal/operators/combineall.d.ts","../node_modules/rxjs/dist/types/internal/operators/combinelatest.d.ts","../node_modules/rxjs/dist/types/internal/operators/combinelatestwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/concat.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatall.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatmapto.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/connect.d.ts","../node_modules/rxjs/dist/types/internal/operators/count.d.ts","../node_modules/rxjs/dist/types/internal/operators/debounce.d.ts","../node_modules/rxjs/dist/types/internal/operators/debouncetime.d.ts","../node_modules/rxjs/dist/types/internal/operators/defaultifempty.d.ts","../node_modules/rxjs/dist/types/internal/operators/delay.d.ts","../node_modules/rxjs/dist/types/internal/operators/delaywhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/dematerialize.d.ts","../node_modules/rxjs/dist/types/internal/operators/distinct.d.ts","../node_modules/rxjs/dist/types/internal/operators/distinctuntilchanged.d.ts","../node_modules/rxjs/dist/types/internal/operators/distinctuntilkeychanged.d.ts","../node_modules/rxjs/dist/types/internal/operators/elementat.d.ts","../node_modules/rxjs/dist/types/internal/operators/endwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/every.d.ts","../node_modules/rxjs/dist/types/internal/operators/exhaustall.d.ts","../node_modules/rxjs/dist/types/internal/operators/exhaust.d.ts","../node_modules/rxjs/dist/types/internal/operators/exhaustmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/expand.d.ts","../node_modules/rxjs/dist/types/internal/operators/filter.d.ts","../node_modules/rxjs/dist/types/internal/operators/finalize.d.ts","../node_modules/rxjs/dist/types/internal/operators/find.d.ts","../node_modules/rxjs/dist/types/internal/operators/findindex.d.ts","../node_modules/rxjs/dist/types/internal/operators/first.d.ts","../node_modules/rxjs/dist/types/internal/subject.d.ts","../node_modules/rxjs/dist/types/internal/operators/groupby.d.ts","../node_modules/rxjs/dist/types/internal/operators/ignoreelements.d.ts","../node_modules/rxjs/dist/types/internal/operators/isempty.d.ts","../node_modules/rxjs/dist/types/internal/operators/last.d.ts","../node_modules/rxjs/dist/types/internal/operators/map.d.ts","../node_modules/rxjs/dist/types/internal/operators/mapto.d.ts","../node_modules/rxjs/dist/types/internal/notification.d.ts","../node_modules/rxjs/dist/types/internal/operators/materialize.d.ts","../node_modules/rxjs/dist/types/internal/operators/max.d.ts","../node_modules/rxjs/dist/types/internal/operators/merge.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergeall.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergemap.d.ts","../node_modules/rxjs/dist/types/internal/operators/flatmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergemapto.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergescan.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergewith.d.ts","../node_modules/rxjs/dist/types/internal/operators/min.d.ts","../node_modules/rxjs/dist/types/internal/observable/connectableobservable.d.ts","../node_modules/rxjs/dist/types/internal/operators/multicast.d.ts","../node_modules/rxjs/dist/types/internal/operators/observeon.d.ts","../node_modules/rxjs/dist/types/internal/operators/onerrorresumenext.d.ts","../node_modules/rxjs/dist/types/internal/operators/pairwise.d.ts","../node_modules/rxjs/dist/types/internal/operators/partition.d.ts","../node_modules/rxjs/dist/types/internal/operators/pluck.d.ts","../node_modules/rxjs/dist/types/internal/operators/publish.d.ts","../node_modules/rxjs/dist/types/internal/operators/publishbehavior.d.ts","../node_modules/rxjs/dist/types/internal/operators/publishlast.d.ts","../node_modules/rxjs/dist/types/internal/operators/publishreplay.d.ts","../node_modules/rxjs/dist/types/internal/operators/race.d.ts","../node_modules/rxjs/dist/types/internal/operators/racewith.d.ts","../node_modules/rxjs/dist/types/internal/operators/reduce.d.ts","../node_modules/rxjs/dist/types/internal/operators/repeat.d.ts","../node_modules/rxjs/dist/types/internal/operators/repeatwhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/retry.d.ts","../node_modules/rxjs/dist/types/internal/operators/retrywhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/refcount.d.ts","../node_modules/rxjs/dist/types/internal/operators/sample.d.ts","../node_modules/rxjs/dist/types/internal/operators/sampletime.d.ts","../node_modules/rxjs/dist/types/internal/operators/scan.d.ts","../node_modules/rxjs/dist/types/internal/operators/sequenceequal.d.ts","../node_modules/rxjs/dist/types/internal/operators/share.d.ts","../node_modules/rxjs/dist/types/internal/operators/sharereplay.d.ts","../node_modules/rxjs/dist/types/internal/operators/single.d.ts","../node_modules/rxjs/dist/types/internal/operators/skip.d.ts","../node_modules/rxjs/dist/types/internal/operators/skiplast.d.ts","../node_modules/rxjs/dist/types/internal/operators/skipuntil.d.ts","../node_modules/rxjs/dist/types/internal/operators/skipwhile.d.ts","../node_modules/rxjs/dist/types/internal/operators/startwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/subscribeon.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchall.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchmapto.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchscan.d.ts","../node_modules/rxjs/dist/types/internal/operators/take.d.ts","../node_modules/rxjs/dist/types/internal/operators/takelast.d.ts","../node_modules/rxjs/dist/types/internal/operators/takeuntil.d.ts","../node_modules/rxjs/dist/types/internal/operators/takewhile.d.ts","../node_modules/rxjs/dist/types/internal/operators/tap.d.ts","../node_modules/rxjs/dist/types/internal/operators/throttle.d.ts","../node_modules/rxjs/dist/types/internal/operators/throttletime.d.ts","../node_modules/rxjs/dist/types/internal/operators/throwifempty.d.ts","../node_modules/rxjs/dist/types/internal/operators/timeinterval.d.ts","../node_modules/rxjs/dist/types/internal/operators/timeout.d.ts","../node_modules/rxjs/dist/types/internal/operators/timeoutwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/timestamp.d.ts","../node_modules/rxjs/dist/types/internal/operators/toarray.d.ts","../node_modules/rxjs/dist/types/internal/operators/window.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowcount.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowtime.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowtoggle.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowwhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/withlatestfrom.d.ts","../node_modules/rxjs/dist/types/internal/operators/zip.d.ts","../node_modules/rxjs/dist/types/internal/operators/zipall.d.ts","../node_modules/rxjs/dist/types/internal/operators/zipwith.d.ts","../node_modules/rxjs/dist/types/operators/index.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/action.d.ts","../node_modules/rxjs/dist/types/internal/scheduler.d.ts","../node_modules/rxjs/dist/types/internal/testing/testmessage.d.ts","../node_modules/rxjs/dist/types/internal/testing/subscriptionlog.d.ts","../node_modules/rxjs/dist/types/internal/testing/subscriptionloggable.d.ts","../node_modules/rxjs/dist/types/internal/testing/coldobservable.d.ts","../node_modules/rxjs/dist/types/internal/testing/hotobservable.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asyncscheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asyncaction.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/virtualtimescheduler.d.ts","../node_modules/rxjs/dist/types/internal/testing/testscheduler.d.ts","../node_modules/rxjs/dist/types/testing/index.d.ts","../node_modules/rxjs/dist/types/internal/symbol/observable.d.ts","../node_modules/rxjs/dist/types/internal/observable/dom/animationframes.d.ts","../node_modules/rxjs/dist/types/internal/behaviorsubject.d.ts","../node_modules/rxjs/dist/types/internal/replaysubject.d.ts","../node_modules/rxjs/dist/types/internal/asyncsubject.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asapscheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asap.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/async.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/queuescheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/queue.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/animationframescheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/animationframe.d.ts","../node_modules/rxjs/dist/types/internal/util/identity.d.ts","../node_modules/rxjs/dist/types/internal/util/pipe.d.ts","../node_modules/rxjs/dist/types/internal/util/noop.d.ts","../node_modules/rxjs/dist/types/internal/util/isobservable.d.ts","../node_modules/rxjs/dist/types/internal/lastvaluefrom.d.ts","../node_modules/rxjs/dist/types/internal/firstvaluefrom.d.ts","../node_modules/rxjs/dist/types/internal/util/argumentoutofrangeerror.d.ts","../node_modules/rxjs/dist/types/internal/util/emptyerror.d.ts","../node_modules/rxjs/dist/types/internal/util/notfounderror.d.ts","../node_modules/rxjs/dist/types/internal/util/objectunsubscribederror.d.ts","../node_modules/rxjs/dist/types/internal/util/sequenceerror.d.ts","../node_modules/rxjs/dist/types/internal/util/unsubscriptionerror.d.ts","../node_modules/rxjs/dist/types/internal/observable/bindcallback.d.ts","../node_modules/rxjs/dist/types/internal/observable/bindnodecallback.d.ts","../node_modules/rxjs/dist/types/internal/anycatcher.d.ts","../node_modules/rxjs/dist/types/internal/observable/combinelatest.d.ts","../node_modules/rxjs/dist/types/internal/observable/concat.d.ts","../node_modules/rxjs/dist/types/internal/observable/connectable.d.ts","../node_modules/rxjs/dist/types/internal/observable/defer.d.ts","../node_modules/rxjs/dist/types/internal/observable/empty.d.ts","../node_modules/rxjs/dist/types/internal/observable/forkjoin.d.ts","../node_modules/rxjs/dist/types/internal/observable/from.d.ts","../node_modules/rxjs/dist/types/internal/observable/fromevent.d.ts","../node_modules/rxjs/dist/types/internal/observable/fromeventpattern.d.ts","../node_modules/rxjs/dist/types/internal/observable/generate.d.ts","../node_modules/rxjs/dist/types/internal/observable/iif.d.ts","../node_modules/rxjs/dist/types/internal/observable/interval.d.ts","../node_modules/rxjs/dist/types/internal/observable/merge.d.ts","../node_modules/rxjs/dist/types/internal/observable/never.d.ts","../node_modules/rxjs/dist/types/internal/observable/of.d.ts","../node_modules/rxjs/dist/types/internal/observable/onerrorresumenext.d.ts","../node_modules/rxjs/dist/types/internal/observable/pairs.d.ts","../node_modules/rxjs/dist/types/internal/observable/partition.d.ts","../node_modules/rxjs/dist/types/internal/observable/race.d.ts","../node_modules/rxjs/dist/types/internal/observable/range.d.ts","../node_modules/rxjs/dist/types/internal/observable/throwerror.d.ts","../node_modules/rxjs/dist/types/internal/observable/timer.d.ts","../node_modules/rxjs/dist/types/internal/observable/using.d.ts","../node_modules/rxjs/dist/types/internal/observable/zip.d.ts","../node_modules/rxjs/dist/types/internal/scheduled/scheduled.d.ts","../node_modules/rxjs/dist/types/internal/config.d.ts","../node_modules/rxjs/dist/types/index.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter.interface.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/ws-exception-filter.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/validation-error.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/execution-context.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/can-activate.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/custom-route-param-factory.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/nest-interceptor.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/paramtype.interface.d.ts","../node_modules/@nestjs/common/interfaces/type.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/pipe-transform.interface.d.ts","../node_modules/@nestjs/common/enums/request-method.enum.d.ts","../node_modules/@nestjs/common/enums/http-status.enum.d.ts","../node_modules/@nestjs/common/enums/shutdown-signal.enum.d.ts","../node_modules/@nestjs/common/enums/version-type.enum.d.ts","../node_modules/@nestjs/common/enums/index.d.ts","../node_modules/@nestjs/common/interfaces/middleware/middleware-configuration.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/middleware-consumer.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/middleware-config-proxy.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/nest-middleware.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/index.d.ts","../node_modules/@nestjs/common/interfaces/global-prefix-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/before-application-shutdown.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-application-bootstrap.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-application-shutdown.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-destroy.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-init.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/index.d.ts","../node_modules/@nestjs/common/interfaces/external/cors-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/https-options.interface.d.ts","../node_modules/@nestjs/common/services/logger.service.d.ts","../node_modules/@nestjs/common/interfaces/nest-application-context-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/nest-application-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/version-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/http-server.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/message-event.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/index.d.ts","../node_modules/@nestjs/common/interfaces/injectable.interface.d.ts","../node_modules/@nestjs/common/interfaces/microservices/nest-hybrid-application-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/forward-reference.interface.d.ts","../node_modules/@nestjs/common/interfaces/scope-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/provider.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/module-metadata.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/dynamic-module.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/introspection-result.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/nest-module.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/index.d.ts","../node_modules/@nestjs/common/interfaces/nest-application-context.interface.d.ts","../node_modules/@nestjs/common/interfaces/websockets/web-socket-adapter.interface.d.ts","../node_modules/@nestjs/common/interfaces/nest-application.interface.d.ts","../node_modules/@nestjs/common/interfaces/nest-microservice.interface.d.ts","../node_modules/@nestjs/common/interfaces/index.d.ts","../node_modules/@nestjs/common/cache/interfaces/cache-manager.interface.d.ts","../node_modules/@nestjs/common/cache/interfaces/cache-module.interface.d.ts","../node_modules/@nestjs/common/cache/cache.module.d.ts","../node_modules/@nestjs/common/decorators/core/bind.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/catch.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/controller.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/dependencies.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/exception-filters.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/inject.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/injectable.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/optional.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/set-metadata.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/use-guards.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/use-interceptors.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/use-pipes.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/apply-decorators.d.ts","../node_modules/@nestjs/common/decorators/core/version.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/index.d.ts","../node_modules/@nestjs/common/decorators/modules/global.decorator.d.ts","../node_modules/@nestjs/common/decorators/modules/module.decorator.d.ts","../node_modules/@nestjs/common/decorators/modules/index.d.ts","../node_modules/@nestjs/common/decorators/http/request-mapping.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/route-params.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/http-code.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/create-route-param-metadata.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/render.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/header.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/redirect.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/sse.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/index.d.ts","../node_modules/@nestjs/common/decorators/index.d.ts","../node_modules/@nestjs/common/cache/decorators/cache-key.decorator.d.ts","../node_modules/@nestjs/common/cache/decorators/cache-ttl.decorator.d.ts","../node_modules/@nestjs/common/cache/decorators/index.d.ts","../node_modules/@nestjs/common/cache/interceptors/cache.interceptor.d.ts","../node_modules/@nestjs/common/cache/interceptors/index.d.ts","../node_modules/@nestjs/common/cache/interfaces/index.d.ts","../node_modules/@nestjs/common/cache/index.d.ts","../node_modules/@nestjs/common/exceptions/http.exception.d.ts","../node_modules/@nestjs/common/exceptions/bad-request.exception.d.ts","../node_modules/@nestjs/common/exceptions/unauthorized.exception.d.ts","../node_modules/@nestjs/common/exceptions/method-not-allowed.exception.d.ts","../node_modules/@nestjs/common/exceptions/not-found.exception.d.ts","../node_modules/@nestjs/common/exceptions/forbidden.exception.d.ts","../node_modules/@nestjs/common/exceptions/not-acceptable.exception.d.ts","../node_modules/@nestjs/common/exceptions/request-timeout.exception.d.ts","../node_modules/@nestjs/common/exceptions/conflict.exception.d.ts","../node_modules/@nestjs/common/exceptions/gone.exception.d.ts","../node_modules/@nestjs/common/exceptions/payload-too-large.exception.d.ts","../node_modules/@nestjs/common/exceptions/unsupported-media-type.exception.d.ts","../node_modules/@nestjs/common/exceptions/unprocessable-entity.exception.d.ts","../node_modules/@nestjs/common/exceptions/internal-server-error.exception.d.ts","../node_modules/@nestjs/common/exceptions/not-implemented.exception.d.ts","../node_modules/@nestjs/common/exceptions/http-version-not-supported.exception.d.ts","../node_modules/@nestjs/common/exceptions/bad-gateway.exception.d.ts","../node_modules/@nestjs/common/exceptions/service-unavailable.exception.d.ts","../node_modules/@nestjs/common/exceptions/gateway-timeout.exception.d.ts","../node_modules/@nestjs/common/exceptions/im-a-teapot.exception.d.ts","../node_modules/@nestjs/common/exceptions/precondition-failed.exception.d.ts","../node_modules/@nestjs/common/exceptions/misdirected.exception.d.ts","../node_modules/@nestjs/common/exceptions/index.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@nestjs/common/file-stream/streamable-file.d.ts","../node_modules/@nestjs/common/file-stream/index.d.ts","../node_modules/axios/index.d.ts","../node_modules/@nestjs/common/http/interfaces/http-module.interface.d.ts","../node_modules/@nestjs/common/http/interfaces/index.d.ts","../node_modules/@nestjs/common/http/http.module.d.ts","../node_modules/@nestjs/common/http/http.service.d.ts","../node_modules/@nestjs/common/http/index.d.ts","../node_modules/@nestjs/common/pipes/default-value.pipe.d.ts","../node_modules/@nestjs/common/interfaces/external/class-transform-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/validator-options.interface.d.ts","../node_modules/@nestjs/common/utils/http-error-by-code.util.d.ts","../node_modules/@nestjs/common/pipes/validation.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-array.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-bool.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-int.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-float.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-enum.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-uuid.pipe.d.ts","../node_modules/@nestjs/common/pipes/index.d.ts","../node_modules/@nestjs/common/serializer/class-serializer.interceptor.d.ts","../node_modules/@nestjs/common/serializer/decorators/serialize-options.decorator.d.ts","../node_modules/@nestjs/common/serializer/decorators/index.d.ts","../node_modules/@nestjs/common/serializer/index.d.ts","../node_modules/@nestjs/common/services/console-logger.service.d.ts","../node_modules/@nestjs/common/services/index.d.ts","../node_modules/@nestjs/common/utils/forward-ref.util.d.ts","../node_modules/@nestjs/common/utils/index.d.ts","../node_modules/@nestjs/common/index.d.ts","../node_modules/@prisma/client/runtime/index.d.ts","../node_modules/.prisma/client/index.d.ts","../node_modules/@prisma/client/index.d.ts","../src/prisma/prisma.service.ts","../node_modules/@types/bcrypt/index.d.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/libphonenumber-js/types.d.ts","../node_modules/libphonenumber-js/index.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/auth/dto/register-user.dto.ts","../src/users/users.service.ts","../src/users/users.controller.ts","../src/users/users.module.ts","../src/prisma/prisma.module.ts","../src/auth/dto/login-user.dto.ts","../node_modules/@types/jsonwebtoken/index.d.ts","../node_modules/@nestjs/jwt/dist/interfaces/jwt-module-options.interface.d.ts","../node_modules/@nestjs/jwt/dist/interfaces/index.d.ts","../node_modules/@nestjs/jwt/dist/jwt.module.d.ts","../node_modules/@nestjs/jwt/dist/jwt.service.d.ts","../node_modules/@nestjs/jwt/dist/index.d.ts","../node_modules/@nestjs/jwt/index.d.ts","../src/auth/dto/auth-response.dto.ts","../src/auth/auth.service.ts","../node_modules/@nestjs/passport/dist/abstract.strategy.d.ts","../node_modules/@nestjs/passport/dist/interfaces/auth-module.options.d.ts","../node_modules/@nestjs/passport/dist/interfaces/type.interface.d.ts","../node_modules/@nestjs/passport/dist/interfaces/index.d.ts","../node_modules/@nestjs/passport/dist/auth.guard.d.ts","../node_modules/@nestjs/passport/dist/passport.module.d.ts","../node_modules/@types/range-parser/index.d.ts","../node_modules/@types/qs/index.d.ts","../node_modules/@types/express-serve-static-core/index.d.ts","../node_modules/@types/mime/index.d.ts","../node_modules/@types/serve-static/index.d.ts","../node_modules/@types/connect/index.d.ts","../node_modules/@types/body-parser/index.d.ts","../node_modules/@types/express/index.d.ts","../node_modules/@types/passport/index.d.ts","../node_modules/@nestjs/passport/dist/passport/passport.serializer.d.ts","../node_modules/@nestjs/passport/dist/passport/passport.strategy.d.ts","../node_modules/@nestjs/passport/dist/index.d.ts","../node_modules/@nestjs/passport/index.d.ts","../src/common/decorators/auth-user.decorator.ts","../src/auth/auth.controller.ts","../node_modules/@types/passport-strategy/index.d.ts","../node_modules/@types/passport-jwt/index.d.ts","../src/auth/jwt.strategy.ts","../src/auth/auth.module.ts","../src/app.module.ts","../node_modules/@nestjs/core/adapters/http-adapter.d.ts","../node_modules/@nestjs/core/adapters/index.d.ts","../node_modules/@nestjs/core/injector/module-token-factory.d.ts","../node_modules/@nestjs/core/injector/compiler.d.ts","../node_modules/@nestjs/core/injector/modules-container.d.ts","../node_modules/@nestjs/core/injector/container.d.ts","../node_modules/@nestjs/core/injector/module-ref.d.ts","../node_modules/@nestjs/core/injector/module.d.ts","../node_modules/@nestjs/core/injector/instance-wrapper.d.ts","../node_modules/@nestjs/core/router/interfaces/exclude-route-metadata.interface.d.ts","../node_modules/@nestjs/core/application-config.d.ts","../node_modules/@nestjs/core/constants.d.ts","../node_modules/@nestjs/core/discovery/discovery-module.d.ts","../node_modules/@nestjs/core/discovery/discovery-service.d.ts","../node_modules/@nestjs/core/discovery/index.d.ts","../node_modules/@nestjs/core/helpers/http-adapter-host.d.ts","../node_modules/@nestjs/core/exceptions/base-exception-filter.d.ts","../node_modules/@nestjs/core/exceptions/index.d.ts","../node_modules/@nestjs/core/helpers/context-id-factory.d.ts","../node_modules/@nestjs/core/helpers/index.d.ts","../node_modules/@nestjs/core/injector/inquirer/inquirer-constants.d.ts","../node_modules/@nestjs/core/injector/inquirer/index.d.ts","../node_modules/@nestjs/core/metadata-scanner.d.ts","../node_modules/@nestjs/core/scanner.d.ts","../node_modules/@nestjs/core/injector/instance-loader.d.ts","../node_modules/@nestjs/core/injector/lazy-module-loader.d.ts","../node_modules/@nestjs/core/injector/index.d.ts","../node_modules/@nestjs/core/middleware/routes-mapper.d.ts","../node_modules/@nestjs/core/middleware/builder.d.ts","../node_modules/@nestjs/core/middleware/index.d.ts","../node_modules/@nestjs/core/injector/injector.d.ts","../node_modules/@nestjs/core/nest-application-context.d.ts","../node_modules/@nestjs/core/nest-application.d.ts","../node_modules/@nestjs/common/interfaces/microservices/nest-microservice-options.interface.d.ts","../node_modules/@nestjs/core/nest-factory.d.ts","../node_modules/@nestjs/core/router/interfaces/routes.interface.d.ts","../node_modules/@nestjs/core/router/interfaces/index.d.ts","../node_modules/@nestjs/core/router/request/request-constants.d.ts","../node_modules/@nestjs/core/router/request/index.d.ts","../node_modules/@nestjs/core/router/router-module.d.ts","../node_modules/@nestjs/core/router/index.d.ts","../node_modules/@nestjs/core/services/reflector.service.d.ts","../node_modules/@nestjs/core/services/index.d.ts","../node_modules/@nestjs/core/index.d.ts","../src/main.ts","../src/auth/auth.guard.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/cookiejar/index.d.ts","../node_modules/@types/eslint/helpers.d.ts","../node_modules/@types/eslint/lib/rules/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/estree/index.d.ts","../node_modules/@types/eslint/index.d.ts","../node_modules/@types/eslint-scope/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/jest-diff/build/cleanupsemantic.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/pretty-format/build/types.d.ts","../node_modules/pretty-format/build/index.d.ts","../node_modules/@types/jest/index.d.ts","../node_modules/@types/json5/index.d.ts","../node_modules/@types/parse-json/index.d.ts","../node_modules/@types/prettier/index.d.ts","../node_modules/@types/stack-utils/index.d.ts","../node_modules/@types/superagent/index.d.ts","../node_modules/@types/supertest/index.d.ts","../node_modules/@types/yargs-parser/index.d.ts","../node_modules/@types/yargs/index.d.ts"],"fileInfos":[{"version":"aa9fb4c70f369237c2f45f9d969c9a59e0eae9a192962eb48581fe864aa609db","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940",{"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":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"1b3fe904465430e030c93239a348f05e1be80640d91f2f004c3512c2c2c89f34","affectsGlobalScope":true},{"version":"7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"9f1817f7c3f02f6d56e0f403b927e90bb133f371dcebc36fa7d6d208ef6899da","affectsGlobalScope":true},{"version":"4632665b87204bb1caa8b44d165bce0c50dfab177df5b561b345a567cabacf9a","affectsGlobalScope":true},"d2f31f19e1ba6ed59be9259d660a239d9a3fcbbc8e038c6b2009bde34b175fed",{"version":"8d6d51a5118d000ed3bfe6e1dd1335bebfff3fef23cd2af2f84a24d30f90cc90","affectsGlobalScope":true},"3346a737f29b700e7c6c2a694973ceb70a738c3ac5212ffbefac8a27048fa8d6","e89535c3ec439608bcd0f68af555d0e5ddf121c54abe69343549718bd7506b9c","622a984b60c294ffb2f9152cf1d4d12e91d2b733d820eec949cf54d63a3c1025","1a25c4d02a013b4690efa24ab48184a2c10b1906a379565ba558b2c3ba679a6d","ba6f9c5491bcf018dbbc813e1dd488beb26f876b825007ba76db485df341a8ee","75b57b109d774acca1e151df21cf5cb54c7a1df33a273f0457b9aee4ebd36fb9","9935be445530b0ac76c84ebf5337abf7555bb297ed8f922c17c986d67b266e29","e3fd84e6470b7e0679c4073ee5ce971d324182486dde5a49b67cae29168b51d2","dd8331d0a5190a4735ce6c152e420230188c4966067a756673c36dd7ba72b10e","8e0f1e7305467e5ab930818f3ac6a002a279e3eccb7db35d97b244caa7bdebf2",{"version":"73ef6665569660084f33342bfbab2f546461fdae7a037fd6a3aacea7653567cb","affectsGlobalScope":true},"6d629d3853de19f72eb84c16b427ab4b00c95ea39566054c6b9a2b05cf10dc51","6004bfe7520b0bb42c289170b8ac3e89e0dee655c0e754abdcd56c976f8020d0","a21d697161ed60d8a537c92063c5c3efe25a08e515d1cd349c05652de286e6e1","c813f07926439a4f98a057d9c4a0b3e413e870c3b938bc0aab524a5d2ab9534d","4d59c6a10b6c79a0927c79efa89b3c9f71d174ec14ec2792076cfd2330d0cf8e","7813d5f70dfa0ca0287b80a5341828f6a426d1c8c2832ee2e3baeee74e14639f","57b7d2a70d4cac657d439d6786681b4e3fa74c8f12d6568596f72a0d0856bbe3","06a38095ad4368314366bc08f7cbc0fe274ef7321ec611005d0bdd9c6565e4d5","4599793db9aed9b84677f0ca1cf7ef3c69bb91cda4fe4329cbab778ca4d80a58","ad0028f96921778931fb8419d8de33b10908314fa99699de1702020f69235da1","ccd2a35321c0786bd3808042dc43b960cac13f2cc660ac37a0087e12bc97d2fc","b8c963678032739754978cc88ab9a6e6b36ae2554ffb3fdade7d520e67f75212","2e3981b9cee48174ff85ae15019fd72933f7023a4ed05094740f7e6f7775623c","c8b5373f0f3f3162784dd2b4aa2eacb8f856b8677f4e57271be2c094decdeee1","2cc6b617c6120ba64b5778ccd4b74c951adc3a3941bb6b39f47d48701c44af39","7fe2c219d91d260ca64e6ad3246276d809250869f834276a8cd6fc2b0b53e5a5","b0184ade4ffe10ff26baa48cfb192e2ad8f29f06836eedd8eb1eaed9cb5fea0b","b89a8993685e3c61bd96b588bcb06bdd8bc611262e8adb3251b5d9be10870a92","3718a0ed712943bd688582b1837058f36730923bf78a965c2f11b732ce82cda2","9ec1f655cb1c1ef93527d7845efe00541556934493f2e33c455be82d9ece36e2","311300c03627250fb17ecc07d0d79a1875317a67ead482a21af21827ccaf477a","e0b4d1bfc13d92eca1d23702d3b1c1b1fba414d80ed790500dd7ea3c1ffbdda0","28b38121cc626d93bf1dc4297ce1d13fc3754d2c264134720832bed9600fe77c","d07ea953cfea0c4bd11641912846bd955f4fd26ad2b7b8a279d69c7ab9cb3add","847077313ccb5dbdd810ca057c90643b274077cda92e9de70e6ca722bc0676f7","65fe597e5f6a3672c47d07a3e95dcd41fbfffcd9094b4e6083f80f16fd4fe7b7","7d2fc5b63c7436471a7f5061243ad3e434b780c42bcb9ddb85fa11a574a3fff7","7f5cb3a03588ed46d52a6c2138315d930cd6ffb5c2134247cd07bc23cbea0b5a","227777582dfff8cdf1a19e21b37e90909da522588e499e656a31cbdf398ceb68","f39fb20b83c3f9853c13d4ac95533760979d3023c0a5affe2c0a62d91ab3afd8","e4fca08aed8afb32bb8643d7469810bc8681115fe398e56a028df9e73b2d867f","8eb79914fc224c0394b35eb879798bb2100d1404c4ecf7920fc7408b30110ca3","078966067552650f44ca96c68eddbb8539f30ee48a9ab3f24abdcf0a4037b535","2cd6250c43dba360377481c98d48db6ab1532a7527339edb0deffddc28ba66b1","7a9d600990fbe263a23daebed9ba1bbc5761e45679a7e2b2774a42756ef077a2","66bc155515fbea8c31a4efccbbac44de7c037b01f3aa00b76312cf7252725d30","34b465efd49ad7d54f55f79b349e0bd293ee330e142ec33cb29f34ca24840612","0dfd353f0c16dd5107a7e0713dc52d0a2538293b0a0eac6000a017f9c0a60b56","9cd683a4663ef4d9c6486f1b8a34c73bdbc344d69490931bfe2fbcada12ab35b","42f6a409bad5259ece69df25d2b8ace2ff2ade45fe6386ee45203bdd9329f971","dc9a862a8f7868881ece56ae35d5d8ad3e7180446b5bbeec5e2c4641fcb6de01","513d5918665e36551581f60cd80c58cd0eb8b9ecf4dd67aa69f1e2af735fbdae","a0987071a387fa67e6426817e6ee28f7d98f1ff8713b9a08d3d208c2c80606ca","938b202a0a6786782356b185e1640d0b22c6fb97683efcde80765766ca97a3aa","e7bf975a98cecefe2e8902fb7da9314675ecdce553aea722aaec97327668e18b","3d36f93648518338c875d9f77a8eab52905365483dbb3afe43ed68f1b712b67c","5154b3f86a87dac7c9b9c6faa8d52ed5c693e78c0bc842637ebc8e2e6f21ed2c","b4e32bd5e3b493e4ea6b5ec69a4c02aa1fdaa78e1df9a863bb07604de8f9d123","779f863af62e1e32865416a9068fd755d7b2f015b54e7e736c7359fab906febc","a9d2b00ff0b3a9915195f902673fa77d9f4f0e269ffc4a27c9b4b04c5b50f35a","fbdc8d7cc7daf4101bf567512c67fb990d8fe300e0ba7f213171192177f44aa0","ae1cbedc8c69b75cb9a1efdbd97ef0d569cf2363e4b9a4afdc7c4102b1fe44ca","3b6457fb3866562d279377f923cf3758c80ed7bfcc19414b72a24d0a98188e0c","4fb5d7efb3520b92c1b767ce18968057c5e70886d7fb3416c487231df9275af9","3130616be54242cce3cb9b885a03776a1b53ab9b5c536979383188bafe8945e4","96305a7c4105c96444cab66c839e5cd7d08f9ba2692f43c4c5effb9b110e8b62","bbb7f19fa617d3a9c09542dd43437efcd583e18650d566c862415b858e010439","c1e8042adf5ee99a5b11458e43535676f83e7877fb4e181a7c3d1e0585826596","1a39e51e3362aec7d4edec9b317ff83916fe0471f86ddf2d3ef3af5952e87d9e","4b3f36b96f129a8e125c91d41a05f711e73b3285f80bceb3a1aecb13c97c4502","bb0378011a2d8b274589611f18ce692cab68a8b482736418ec30d3456f1b6c8d","9a82e1b959524c1abfeeb024ee1a400234130a341f2b90a313ce4e37833b7dd2","cb0b4d6295be36ee1bab0ff7877590d871980e43f8fcb720a92c517fa1a6ff38","86814239bc5c49036ceef4de961121376f97f48954e0a02ce849ec5fb740daa3","7a5bfc619b1ad803f11c50668574b16baba8f0e8ce1c3e8ebf16421e910474d2","644addd4811636da491c9546654bc005ba8599f23df6d731d91eba86f3137fc2","a9249493114b181814728cbfeb7234738193a4169b654ec4705d48d7a4d25222","94aebcdc8ed510062887894a9872875ab88bbd165056adb4a582820ce73ba2d9","876fbedec2f494eb6f834ce8636b07d581c657d205d81a3ba894eff0facc6b84","58527aa45f11c9b259a6a9d78b397f35020bfbb104f4d3bb177039b5c18146bd","e9bbf9ba271617496e49f6b481acbe27cb9cd722407a7638869451072594277f","2744532f8fb960eb78497ac660db719f503a10c801f87131d26fd9cbef75dcef","3de846037f1850e848a8a4a5c539cbdbdcde9092625fcd40f2825047c28a0062","40961a837a4593ad8e73fb6e8e4d727846e2e0b0c049ec1120356b3728a892b7","183a75c9a71cff7c792aa6627a07aea100f04f48175083a14f5ec1c17274ac7c","003e15b5bb740b6e64f2e7456d7965134986de439dd74f11d8db6c2043f53f3e","948e229fa121869a1626a00b44403ac10bfab95fd0a5459bb924a9c433264a7c","074f34b9f579125ce814bd49e29cd5d030f94d8e70518901dfe4d00961cc908b","f1a9ecdd9e5155f4a5bc32310f7960f60e4c9f454ee4d077f928abe8a7d0ba05","f2d3567210ca4d559d8297d6c4402599c93e3bc7485054192d38db5e132fbc0a","8bec671f45a79c5952f1f357e51e7df4c76e9934c23407b97f7eac27fcbe5c68","ad27aa59d346179ac449bd3077d245f213152879e4027356306ccf1722d61d51","ea546a7ed9eaa71ba78d4d392509dadea4bafed283269dd6c4b09e7d8824e986","4ec0f2a141a9ae7d3557b8efe630ac2021bc3a9ac61238b59293f4cf2f196e82","d3ca7ca5358e528bafe526cb36c6d8cdaf3a4eeaae8c8bfb7878456966386ba2","1cc712218ef11f8077c24204df1683aa3281b97eeb1595abad05a3a73340f6be","13e84c5dd1aa42f42e2247704f1dfe9e8e8855fb9e8e381246343627fa353d44","ba9c46725e2a0bd9df59d3a1e801cc60f90db3ef7817131c53945dce2b8c0c56","281d373eeabf80c4851f8de991e6abe4d385c30379d80897bbc3df3dcac99cee","a1531dbf5fe1477101816ebcc194f9aa7e6a42539a8cfa330de479ec536418a2","9c236339bea3f02289b508658fd55f4578471e83d6b9136fb8e79399982de6e7","605dd288c636cf9b5317fe76dec75d3c7fb855fdcd3ee8cb4fea7d7091ca6fb4","f0f608c51771227ac59fac5d63ddf40e44f3938e2885577bb5aa174d8114a818","6bd47fe1f8921d2929181158281881faa0bb22671bcddc05930ee54737b9ecc9","4e2c0696146c17f66b35146eb70c20369af11299982df9d99efd40a37604b99f","7559e5864a22c9c338efeea6200e048dac91e08bbfc16fa79a2a8421d60b1730","05b67ba7c698619a46649f09ec47d555b2615e128ccc99ac46b0d603cee0d6ed","a0cf59033f506c9f6d167a6f3c4ff52012a324bceb6b7c415b94017f32807d68","b8a0236f47d9037efdaf93da602415ae425dababe097fc92f83fd47ce9aaa69f","b54b7fbc7a1d8b9082a7728aa13ebff565f4b097665ea87c23cad9f8aba8c5f7","0866f32a043fdfe79dbc5bc3ed83f765339e1414cf0bb08cfd7290e46207ae26","576fc7e1986ddf2353a3a0663aa13e7974ce3ce3d373637e6e88b4063c81b537","ec25703ad4c2c0b0d82e13140816c76172a9ef9a8ca5530fb93f24250a0d9a93","2d2c4fe7ef7e6ce427f7af00379e848dc3105c221254a1ef8d08a141d2b7ec9e","b306e5b2eb98471337973082d85cb66c652dd5bb8098f268d144acdb3a3e147b","3b94f525f7d816f304424f89b7361715ba9598a85cb297ccefdb2e2ff2b1538e","a2824c030a93b24c7b8ffde0311dacc4c685c3d6a8d21f78c6b6f524adaf5e1e","edd3978ee130eb220c033c35aae5cb215983f0ea5d21bd809108952d6153cf92","7694a662d862bcd77430971468984237464c74cd0b74895c339855fb8ebe2eb2","89e253db2c2cc9a510c521f14dd2b1aae4de2556ee5159ad8d118d3587e3a880","fa037d7b37cc1f188f487ebdc68ecc10d00cc341bce3cb0905f8da239581e5b3","901559b466b5b570611cecb556176ffd130301c579abffd7101c5eab64d112b3","6fdc88b1287c276b55b7f7c4c7b49587813c763eea9751ce0baf0a7e61cd5d89","6a02443704052768bd021f24783aa104b02ae4444e9b735317bf13c6b857a11e","37987b0fe9800cf25473c882ce07bccdab2763c5681c1a2d16816aead46aa8d1","c84c03c721154068e1a60d83e9e85819bd3ef70b824ac2edc498aa31c06e5781","5804d7468bea956dfd6a581077e013d853574c710013778d88babe8b21679dd8","c96fb6a0c1e879f95634ab0ff439cbb6fff6227b26bbf0153bef9ed0aabba60d","db936079fe6396aad9bf7ad0479ffc9220cec808a26a745baebb5f9e2ef9dbc7","06bc0b9cc7bf0b92534f1517fe5adde1f23f60cc6cc5c59f8e1c65db48a40067","919a753b0cbb12ccc606c62e2d34884d75a48ba19b1dda497c72621b11dac088","2c27e33ee0bf722988da00abd582cc9b806ce3fd9153a864800a339ad13f3fcf","92d7b3a5aa5dc872e54cbad2a7094b3ea4f72c7901de1d07b4c334ff658297f0","7a52922b38e9686d5bdc6e75774929eec6688d26c1dfe4a03ddec77ede468e87","aa5efca2833d89b55248f1889a6433dab1b1f41768e9a75f8ce35f9bf56c5ec4","0ba3b34cbe39c6fe3ba89f7f6559f10c05f78cd5368477d9c95d25c390b65931","4e82f599b0cff3741e5a4f45889d04753a8bb3b0f95d0f3328bcfbb4f995b2a1","8354bb3a9465dc2e9ccb848564945e0818d3698b2844cfd69b0435080871fd25","1218398da7c8dc4add10bdb3aa2856aad54b123d847eaf574d1d694ac269bfb5","189014f3213ee7457dbeea04dca10ca5d9ed2062cd39641aca5f3b4c75de9d99","5b825ee191f38bd904e62c7e1814af3d49df7bbf2b60ab057bf7b5dceeb47364","7061e83d6792897077bcac039fccf7325234004769f591c63a8cf8478bf551bb","f2d2c194c4c6ba8cfbacf893e371cd8482102b368c1a5ea4771fc956bd0a6a19","277a358d61376fce7ac3392402909c96cf6a0a613146549fc0165ccff953e012","50614c808e099a1d4413786f3783d9eeaaa74b267f2c87fcf8a893287e91c301","f4cb6530f248e87cefa74ef623206fec805f6252f885f8e14ef3d1a5872cef2d","38c332caadd8391566552395d592076470a5e7423f70964620eabf05c02907cd","eb17b5bf1fc763a644c21d76572c0e41e351c3f6dfcde649428d5d829f7294d2","cb124162c87b29ff5121e3ee5bb29c782f101e0135d6c2644ab1b31d530a435e","406d6f5d3707c488362fb40d1c1f8a7b0a42b70554b427160185d93e430228f5","2e9776410c5bc290d9432a9215c67398a273e514a79b9e15f32ecddfde8a03be","b09f944ac37276adf242685b88e47123e958cf3072d7d97ba0881c5a29b8599b","c718475bca06806cc243e77777641cb67ba68f2c57321a4773ebb47760a3bcf2","96e6bf811343caab5112b68880905c5d20d9257054afac6c18e718a4c549ed27","a2793bc73ba63ca7d259cb0f0b61d0023820170d08a1f9715006c8042d060165","d5011b38165771fdf75a9a06d6d379a1fc7edd7eb695ebdc52319fb6e3c6d81f","88417fb19d339304e9616a38ea513251047c9e300c81f9467fc317df8a582e71","3e8e2d132f726dddbda57819f5391504e585cb3beab6b32203064e7e40618583","6e23627cd3f10418b5b2db102fdcf557b75f2837f266d88afac6b18f333bb1bc","866046dcea88f23d766a65487ee7870c4cf8285a4c75407c80a5c26ed250ef8d","019f4f1cbc781cc15c6173f8be5ef907405722194ab297127b3c3426e5368339","41f4413eac08210dfc1b1cdb5891ad08b05c79f5038bdf8c06e4aedaa85b943d","c79f1c8b51d8475dde8d2973f740f43ca34b1f0a95d93649cd76c1ee20abba19","35f0d2bd2c5c05c0cb19095bf5b7c44365b1c88efe6285370855b90417277a64","8264b129f4c4eb4799703f8e5ee2223a184d1cdbfc782158b1f40a88a4435a1f","527ddda6f8be1279f3294714534c49d6e90f238cea325519882ebf88d7ec5bd2","b23877792e8bd00271d0ec5d401b68e4228540a4316de3d9dfb697b955c161a4","35b2eb1de01633db90d41abe93730b29984856fcc840b4c2801bfd3761a2097b","1fd5a6eb7fc5159b80a848cbe718eae07a97998c5e5382c888904248cf58e26f","80071b83978711d5c6f392bf30ea0affacac42552d0d4e2a502bb032f6aa0fd6","a40465980e5f1b15e895a46cf34938c42893d1d53cd7b0d39abc23029e9a37d7","d505055b8fadd42da235c85947911d8d198ad70c5f5775991e7821d4f89c90f5","60e06661a767c3349a6de908271951e3c4d3ecc13acee23cc8fb8fd1eecd2d3e","0d1aa3341d1ad2064adada71c5d01a2f572e4aac09410e5616d90894105a0eb9","52494ca5a884da3bf11b8165ab31429715f0970d9c6383240c5666f4bd713e01","12e56c8e4ebbca564c01111fb453d7016f06629cc1eef9c832b1592f19e89d55","260f6fd0152c0f59735626b5778f45e3bcb3a970069a1e3fa0237dbd68f98f3b","aa01e521ff15c12dbe71918882948b38bd5bbcc525be46988fec5614dedae889","c76053984b39150d00ade365b096a8bc21a4a7f2ee9e0a926711b00f8e7bf701","02471f11b2d262f546482867d2138611cb2c889e74c127e486963312040e8e79","cd1a8ff61f5063d7e6e2094e25d35c90b499961b63911f2f4ae0ff5555c2b4d7","1cf09b5945779e9bc75c4dcd805fb149c28fc90da3335186ef620647a3c540e1","9cdc0b9a313090ec45b34ea1eb02fbace433f509e753634b043e9b83038261e6","c93474cff0088351a65d3cad24037874a26a5371a48528563e56efe31cb3d8bb","b4580df8ea7f62d7b06588001952bf69426e6b03cf3d2569f5f608e45f29ba08","de27f7bb9be9d8a2b4557ec6503b8a315f74d598ce9a0ab81b5ed5610e1a8e81","20a2880c3f9cd8cd7bed2d22f119efaf98e83610b4ca81ca84bdb0cf9a12327d","43f5c97e6ad84521aebf0423d7ece96f3c78f09156bf57a96f2fdd4328252e70","a5fbf3bc5c16ab5c84465ba7a043a4bee4c2b20bd3633d50d80118a3844edbaf","0923e4ac8c894ad507bd2daee0df66b699de88467201381ece011ba5a080e1ff","e4f6626f827ea509255647e1b6db82145a2eb1a6b46202655e7d9bb19145c33b","26e23972c40f378f0301d8d7025ea895557c2865a1a31c8ea9c3fff0dbc27075","112547f3832dd095dccb9533f24a5c25f0ec63abd724af6fa57365a1e0714ede","795a08ae4e193f345073b49f68826ab6a9b280400b440906e4ec5c237ae777e6","8153df63cf65122809db17128e5918f59d6bb43a371b5218f4430c4585f64085","a8150bc382dd12ce58e00764d2366e1d59a590288ee3123af8a4a2cb4ef7f9df","5adfaf2f9f33957264ad199a186456a4676b2724ed700fc313ff945d03372169","d5c41a741cd408c34cb91f84468f70e9bda3dfeabf33251a61039b3cdb8b22d8","6e87c0c1cf06fe7dd6e545d72edefd61d86b4f13d2f9d34140e8168af94a7b7d","cbaf4a4aa8a8c02aa681c5870d5c69127974de29b7e01df570edec391a417959","b8d9df5c49858df86ffa6c497f1840528963c14ca0dea7684e813b008fe797b3","340a45cd77b41d8a6deda248167fa23d3dc67ec798d411bd282f7b3d555b1695","b1f8c85b27619ccfae9064e433b3b32a11d93d54de5a1afdaeca23c8b30e38a5","0ed6417b905cddb85f98281cb3b5b137d393955521993d9ce069d5e2d6b26ee8","f9ceab53f0d273ccaa68ef125974305dc26fe856af9a5be401ca72d0f78659d4","99d99a765426accf8133737843fb024a154dc6545fc0ffbba968a7c0b848959d","7004a79fff3fe69e67d2085f387b307650f29201af5087912a7b35a312a0bb35","883d2104e448bb351c49dd9689a7e8117b480b614b2622732655cef03021bf6d","8e1453c4f07194ab558fa0648cc30356c7536b134a8d7516edf86fd93706c222","eee530aaa93e9ec362e3941ee8355e2d073c7b21d88c2af4713e3d701dab8fef","ebf6ea6f412af15674333149f7f6561c0de9e36a4d4b350daccf6c5acbbf9fa3","3d26959cb8d1c11bf3cbaf17f8d2cb0c0488ab787fac1b222e924e04bd235965","7a0e4cd92545ad03910fd019ae9838718643bd4dde39881c745f236914901dfa","c99ebd20316217e349004ee1a0bc74d32d041fb6864093f10f31984c737b8cad","6f622e7f054f5ab86258362ac0a64a2d6a27f1e88732d6f5f052f422e08a70e7","d62d2ef93ceeb41cf9dfab25989a1e5f9ca5160741aac7f1453c69a6c14c69be","1491e80d72873fc586605283f2d9056ee59b166333a769e64378240df130d1c9","c32c073d389cfaa3b3e562423e16c2e6d26b8edebbb7d73ccffff4aa66f2171d","eca72bf229eecadb63e758613c62fab13815879053539a22477d83a48a21cd73","633db46fd1765736409a4767bfc670861468dde60dbb9a501fba4c1b72f8644d","1f9cc8013b709369d82a9f19813cd09cd478481553a0e8262b3b7f28ab52b0b2","a314a39426700ba2b5a76c01bab321bbe79cfef898dae996e930b017fc2b0af9","7f2c10fc5de794bf7ddad2ff13b46e2b7f89ced296c1c372c5fdb94fc759d20d","c2014a7a2718e8f1f953ced2092cff39de89d0bffe5a7d983ce12625e5493b9d","9aee949dd6fab5a9910aa0675b7c0dc99f8e877146873832f5cd884e464eed01","31d46fc6e4ea500ee80960b7bdc35c6482500d0080c00d43469b776b646d1cfd","94a9ea3294431a586b073fbf269938904acf6f1f626d88dcd408dd9769d9211b","5c4c5b49bbb01828402bb04af1d71673b18852c11b7e95bfd5cf4c3d80d352c8","8a4a75382ad915be014991cffdfef0e8d78572fe6dfa7f8f8eb748288bec27e2","44ec212fbf43580505de3d6054376ced252c534ced872c53698047387213efb9","4880c2a2caa941aff7f91f51948ebfb10f15283ff0b163f8ea2a74499add61aa","19c3760af3cbc9da99d5b7763b9e33aaf8d018bc2ed843287b7ff4343adf4634","c3befd91fe65a95f9a70f9fb62cdc98f0ffd28bebbc12ab09298de70f9cddc66","d1e22bc4ba2142678ca7e7a57b0df2952363cf6ee2546b820f38d46c2148cc72","9ddf8e9069327faa75d20135cab675779844f66590249769c3d35dd2a38c2ba9","d7c30f0abfe9e197e376b016086cf66b2ffb84015139963f37301ed0da9d3d0d","ff75bba0148f07775bcb54bf4823421ed4ebdb751b3bf79cc003bd22e49d7d73","69196fa55fab9cd52c4eecba6051902bd5adff63ecf65e0546cb484b5a279fb1","65cc10e9ccfba05590414409f6117b1cd945212ccf37dfb4bd1f0b8d3f8b0fe0","55156d64d3e528149e154b365e9589fd2f3a96149d33946979451941134c7a5c","b75aa590b103f8491e1c943f9bc4989df55323d7e68fba393d3de11f4aae6bb8","b494648c291d0fb42660e97cca99fdb65d722cebf30c0eeb7fa390f205af0d51","970866cb5213e259a6c10b736d96cdfaeb65697bf2e80b4461f4edb34e4f463f","90433c678bc26751eb7a5d54a2bb0a14be6f5717f69abb5f7a04afc75dce15a4","3ce6884df19ea1f29b33f1aa8529eb2b061ce71ed50828e4fd3b065f1d2e93ec","5a4b002e196dbeb469c1857c0e554db6a9cb96399e690e2bcefae00d1399cefa","e04fed17398173e5baca3e7b003b677ff9263cae758bcb5049870cc8a850a1fe","6d8dedbec739bc79642c1e96e9bfc0b83b25b104a0486aebf016fc7b85b39f48","da339d9811a07a5923c48e10f2e2668d043fdf085bea59d88ed25e34708e6267","c18f4f72a68275b7602e5968b862cb9b7b76ea4a1ac1b3e622f99e0b672569e8","0fdb1ed509382bd388896d3770655b0cda8c80c36f8c54b3899992f7a3a8665c","d97b96b6ecd4ee03f9f1170722c825ef778430a6a0d7aab03b8929012bf773cd","f55fc3e536ab193aaabb9b6ded5f93181f81294ee65fe3199c9f4415f0f1e53c","ec8053ec564993a885ba2e2c31408369270a190a332a29fac7a825bb7e60b37c","542ecc66e4fcc33f46695ae22b1d14c075054a78c019915d556636be642465af","476b5c25e85b94e15d761bb9503f55fb11e81167df451f187f5080fca825273b","72636f59b635c378dc9ea5246b9b3517b1214e340e468e54cb80126353053b2e","ebb79f267a3bf2de5f8edc1995c5d31777b539935fab8b7d863e8efb06c8e9ea","ada033e6a4c7f4e147e6d76bb881069dc66750619f8cc2472d65beeec1100145","52ff5e1ea35c54428b46c75fd14f87b7a7158a8f4a1ecfc4a9b996a03185c738","605d29d619180fbec287d1701e8b1f51f2d16747ec308d20aba3e9a0dac43a0f","67c19848b442d77c767414084fc571ce118b08301c4ddff904889d318f3a3363","c704ff0e0cb86d1b791767a88af21dadfee259180720a14c12baee668d0eb8fb","035297b9574f4c15f2eb0ec28b631ffd242236c3feedf58602209b245045d94e","da665f00b6877ae4adb39cd548257f487a76e3d99e006a702a4f38b4b39431cb","0d276d377a0bf0f35e8d7a5b871922ebfa6aff1757d1bbe27a7982b15ce78516","9cbb45413acfdf0cc384d884de88c3f951319004450c88a2bcdad62a11bd21d9","d7a4309673b06223537bc9544b1a5fe9425628e1c8ab5605f3c5ebc27ecb8074","ced87f58b05e2b07e314754f0a7ab17e2df9c37ee2d429948024b2c6418d6c9f","daaed996a21f3bf223f5897e9555ab5388e47cf4dc2a46d646de98b254a80e24","3ac0b94ba8f884f63d38450ce9e29ecd59ff00805ffdd609193d7532b8605459","a3684ea9719122f9477902acd08cd363a6f3cff6d493df89d4dc12fa58204e27","2828dabf17a6507d39ebcc58fef847e111dcf2d51b8e4ff0d32732c72be032b3","c0c46113b4cd5ec9e7cf56e6dbfb3930ef6cbba914c0883eeced396988ae8320","118ea3f4e7b9c12e92551be0766706f57a411b4f18a1b4762cfde3cd6d4f0a96","473bf3574a48185f71b70fe839fb1a340a176d80ea7f50dee489c2dc8e81613f","2b14b50de7e32a9882511d1b06be4eb036303bc72ce4a10f93a224382731500d","eeb24fa259f000f6b51a1fe89123f55de081eb2a0ef8d8f847afd67af49cfb68","91d8f3c1c3ae5efb8564ec7cb1f8ac8bf5714eb94078fb50a761ab811963e324","e21bb2cfbcdd8ce7eebb72422f3660806724f2b16cd6ce126d527511abb3a379","c04146836a55ea071b435298335e47f569db0e4d3ae420e35c83e448f944192f","31f71fe23daabea143fc8bd21dae0d5908227180fcda38ad3674df70351f9761","760408bb4f8dccdabcec197d1a3ccd453c70b0a877f49fb9586d56e57972d4c1","5e708f74430b99f0d7234aad17a03ea3f20953b70a9d483e944cf6fd4c5bcad8","c73024f77467e950214c5ccded56b9f52a30413795f0673d55ed34d4a3abbb80","44119efe5bff6e427cebd594b5ed141b70e4725c12d0f0bdab9f422433b82534","6c32e45004393346be19d018d5f6935cce22bfeadbba88f47dd5455120566f56","38241b58e1f9b3a9dcc7d868bbfa4a6aeeab8ed6631259533f9133111c382cba","a2d7ab8f8ce3402f04c53565dd0bd3bcf54915fa823e7e2bb354c8be30e77531","5135b998e8a38739e35e277b9cf7c099700356d2e67f49aeacf469e26fc67914","c9a309f77585b4bc473a6119c0b278dff3dd601f150e0eb47df7fbee1fc57ca3","17520948e5661a97753b251b6c8f120c5dec3146a8e6fd311fb7a0fc29d05c62","3c50345b73a7f3e26b9f934050d9345d6138259b6a33ad4c76c767e831e6fa2c","d2230911663e190e544bc83a64467abe2c723969a687f19d55bdeff068f07be9","8a316369d7d99cdd3c94c05dd13945edf81cbc254b307a808c1bb6cff4bb32ed","19f53dd3a4fe3a0d14b4921d881fcf7b4b6d5e93c1b59b007cf17ee81b72b9ce","24d03528b32b500a938ed85963becf5032d0fe554c70c29a55d533224ba9150e","12417842c8569d29558df33faf50b3d43b1d1f4d5ff0ebec0647620442d27081","8c57da766ebfe9477023e0e6dd8b3b17bafad363cd4abf220e27df01fba5eba8","5341c8e84b5e75615ec1b9443b2b3485048fb3536a64c468c7d86be8f8d535d9","c7c0814aac0ffff6415448abef7ca8ce3ed78bc290f6d4d400bde64103350a5c","5046e6a3ee887d2037d6417a6a2a7deb674064f19e5b6c917711198597ce905e","d43e759e21c40c06f5228ddaa6a35ef1ea711c4fa1d2f3380789d27312b0bbfe","1874e5bc5f6f0b4007608ea8cfa36c8883d3f9be8d51c0881ef1c913ea0ff169","b9c89b4a2435c171e0a9a56668f510a376cb7991eaecef08b619e6d484841735","0d5a2ee1fdfa82740e0103389b9efd6bfe145a20018a2da3c02b89666181f4d9","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"92d63add669d18ebc349efbacd88966d6f2ccdddfb1b880b2db98ae3aa7bf7c4","affectsGlobalScope":true},"ccc94049a9841fe47abe5baef6be9a38fc6228807974ae675fb15dc22531b4be",{"version":"658a70ff0b4d8298739566835c4b324a9ecef1676a2cd1fabfb5660a821d38ef","affectsGlobalScope":true},"43978f18d1165eea81040bc9bfac1a551717f5cc9bd0f13b31bf490c5fcdc75f","afc6e96061af46bcff47246158caee7e056f5288783f2d83d6858cd25be1c565",{"version":"c3ad91d23259b68e10a9bef08c5f9fa1d19f27ef740ac9af98ed226b030c09c6","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","384e598ab8e7faaa286828b2911f470aa1eb21b509d3128608cdbffa174b1e5a","260aad3a6bd3fc510b7f97cfb05859bfc045ce185f8c2b4d73ddb9c43b0eb3c0","cb428529763c6c8e38e42db2a39f333ffcc6d3aab396b24ac84b22da752c1de0","ad4b60488fb1e562bf375dac9299815f7028bf667d9b5887b2d01d501b7d1ddd","246341c3a7a2638cf830d690e69de1e6085a102c6a30596435b050e6ac86c11a","6972fca26f6e9bd56197568d4379f99071a90766e06b4fcb5920a0130a9202be",{"version":"4a2628e95962c8ab756121faa3ac2ed348112ff7a87b5c286dd2cc3326546b4c","affectsGlobalScope":true},"fd5d2f531376b1e84df315df0fe724445353a0ae2e2c4de7bae01e24c6c2047a","84214d474bed6e36b7608ba8a39d463ff90061b8af47cbd1a8f7ecb775e21fac","944660c079e97f62f513c33ec64cebc44154374053d3a9adb04bf02f67ee1066","b287b810b5035d5685f1df6e1e418f1ca452a3ed4f59fd5cc081dbf2045f0d9b","4b9a003b5c556c96784132945bb41c655ea11273b1917f5c8d0c154dd5fd20dd","62a00c9cc0c78d9f282dcd7b0a7776aefe220106c3bc327e259e5f6484c6f556",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"f3e8bcce378a26bc672fce0ec05affabbbbfa18493b76f24c39136dea87100d0","abc1c425b2ad6720433f40f1877abfa4223f0f3dd486c9c28c492179ca183cb6","cd4854d38f4eb5592afd98ab95ca17389a7dfe38013d9079e802d739bdbcc939","94eed4cc2f5f658d5e229ff1ccd38860bddf4233e347bf78edd2154dee1f2b99",{"version":"e51bee3200733b1f58818b5a9ea90fcd61c5b8afa3a0378391991f3696826a65","affectsGlobalScope":true},"9f1069b9e2c051737b1f9b4f1baf50e4a63385a6a89c32235549ae87fc3d5492","ee18f2da7a037c6ceeb112a084e485aead9ea166980bf433474559eac1b46553","e70339a3d63f806c43f24250c42aa0000093923457b0ed7dfc10e0ac910ebca9","0acbf26bf958f9e80c1ffa587b74749d2697b75b484062d36e103c137c562bc3","d7838022c7dab596357a9604b9c6adffe37dc34085ce0779c958ce9545bd7139","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff",{"version":"806ef4cac3b3d9fa4a48d849c8e084d7c72fcd7b16d76e06049a9ed742ff79c0","affectsGlobalScope":true},"a279435e7813d1f061c0cab6ab77b1b9377e8d96851e5ed4a76a1ce6eb6e628f","c33a6ea7147af60d8e98f1ac127047f4b0d4e2ce28b8f08ff3de07ca7cc00637",{"version":"b42b47e17b8ece2424ae8039feb944c2e3ba4b262986aebd582e51efbdca93dc","affectsGlobalScope":true},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","2408611d9b4146e35d1dbd1f443ccd8e187c74614a54b80300728277529dbf11","998a3de5237518c0b3ac00a11b3b4417affb008aa20aedee52f3fdae3cb86151","ad41008ffe077206e1811fc873f4d9005b5fd7f6ab52bb6118fef600815a5cb4","b810390059fc34122556c644f586e7a2b4598ded8afe5ba70bb82fc2e50577b1","ba9de5c5823e06ee3314f959c138cdaf4477d3a1a0769f0d24e62911020e8088","c3db860bcaaaeb3bbc23f353bbda1f8ab82756c8d5e973bebb3953cb09ea68f2","235a53595bd20b0b0eeb1a29cb2887c67c48375e92f03749b2488fbd46d0b1a0","bc09393cd4cd13f69cf1366d4236fbae5359bb550f0de4e15767e9a91d63dfb1","9c266243b01545e11d2733a55ad02b4c00ecdbda99c561cd1674f96e89cdc958","c71155c05fc76ff948a4759abc1cb9feec036509f500174bc18dad4c7827a60c",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"893f4b8552c248f6542174b53d1519f739b20428c970dda89cd90485dab059d0","d22248ab663792d0c58721fa29e6516e9e04c8981971390bca1981ba7ae069f2","89049878a456b5e0870bb50289ea8ece28a2abd0255301a261fa8ab6a3e9a07d","3154a026075044aa102298fe9e6a7a14aaa26a06270680c7478a1765af8ffb09","fb986dd9763020d8b0bb92257a2be89f18d286947762d93788b8518c4a3db2ef","7d80d85fbd6b4e0fe11dde5fcc9aa875547f1ec1a499ca536a39b55d4e1ba803","89d8275e44668b0869d4009258aeb1949f6efc5fa12bd9cdb9d57bd3b868cc72","fa39c1480d2cc6b9474b6a5d7d56a5db98ae9c6433a05581551722a603773ce9","3a93e73ecbb7a89241c58fcf30ecfbf788c3e98d01f5eab4573ce0f8635b6506","66e351f3739da4f30b9a0274e16b3a850014931896f31d568746a3056076fcef","ebbe6765a836bfa7f03181bc433c8984ca29626270ca1e240c009851222cb8a7","b2f2311d7085a1feec3f6a85d7cc8bdaf1d976de1874c1f92940ad8ce6a34d39","4ee1e0fea72cd6a832c65af93b62fbf39b009e3711384bb371b48c9abba66781","89df6c6a92c4501a0455a9d94784da870bdfb4034a139c4878bbf5fcaaf4f19e","8f0ab38ea72ffbd177ac897c1b559334362373261b8bffda7950ed3961a8fcc5","425208368b07a6a747f13975d261688c6a874a67555a3fb518fb52f42867e394","36a789256b8e764f16c089ca9da548fea3e21fb268cefcd1ee7118fbea39cbd1","19143973da1c331e9208a76c80a4ca57877ca15bee0d0803b4d17a021ee92dcc","8aa451aa2c6e762f359e6fae74e2903f6e3304b1a5ae19c1da548128ddf25add","e3f5060e98d678e320df7fed7391e6c1291849df4b9e36c8b2ab6dc5604d8f37","380970ed12c5382fa1bd36a84c8562b042aeafa6de618a64d27e682e493965c2","746f47ea1571e64790813bec6e71ff254eb35e2c6cbc55a5696da8743c5bf7c3","9c89ab413cd620c91d82ef9a9631eca3fe3b65090df1cc729a43e1fdc9f8ed37","5a44788293f9165116c9c183be66cefef0dc5d718782a04847de53bf664f3cc1","0b7109542117ad1529021dc091535820f0c2c42cc2399a751ba8af5c119af6a9","9fb26d311df43e8fcecc64c734f7d3d9703081930ea5d5596abb54d223096e27","9f96b9fd0362a7bfe6a3aa70baa883c47ae167469c904782c99ccc942f62f0dc","5df9a68835c1e020625127d8c951c90808d319c811fc3a780d24f64053192ea4","71807b208e5f15feffb3ff530bec5b46b1217af0d8cc96dde00d549353bcb864","0e002af73ea5935edb79a3ec0bbfa4b4d40531024b6337cef9820e03ddec03a9","52f89824805a6c5f593ceb1b741c688a86078fa2c82357d858873caf4921a377","33d33c5bcd9b4f74f30c5c3f16a27341104e62f99eeae4fe5172f657a2526ad1","022d0e5b18aa33e48e53e2fc7a558ee448a29cba6fe163a36cd5ece60cd1f7ff",{"version":"a7a3694e72915df54855dea197ef7323073cf8a54ac1f636119ed4e60ed3fa3e","signature":"c5465c2c3275f57e7792699813dfaab64150f53a1c5d60f2b023a3dea3820680"},"57ddc4e066366bbe04f497f9afce1c88e088dbd09be0618e072754450de3acbb","e69d0b59db23f59172cb087ee44a71438f809bd214d4f4105abd6090b341cbdc","d5c1d4db425938fb1e0ff528b3edb945d4d851c001ab6e1528c62eb16813d96e","86f89124a90fae1b90421bcce1e0ba58614383ca72403bfc03ff89761b050a4d","5a6fbec8c8e62c37e9685a91a6ef0f6ecaddb1ee90f7b2c2b71b454b40a0d9a6","e7435f2f56c50688250f3b6ef99d8f3a1443f4e3d65b4526dfb31dfd4ba532f8","6fc56a681a637069675b2e11b4aa105efe146f7a88876f23537e9ea139297cf9","33b7f4106cf45ae7ccbb95acd551e9a5cd3c27f598d48216bda84213b8ae0c7e","542c82f0d719084ec6dde3ce4a69be8db0f5fa3ea1e38129f95ee6897b82de78","c5079a23a0200a682ec3db25bc789d6cee4275b676a86ec1a3964d919b977e6a","8bcb884d06860a129dbffa3500d51116d9d1040bb3bf1c9762eb2f1e7fd5c85c","e55c0f31407e1e4eee10994001a4f570e1817897a707655f0bbe4d4a66920e9e","a37c2194c586faa8979f50a5c5ca165b0903d31ee62a9fe65e4494aa099712c0","6602339ddc9cd7e54261bda0e70fb356d9cdc10e3ec7feb5fa28982f8a4d9e34","7ffaa736b8a04b0b8af66092da536f71ef13a5ef0428c7711f32b94b68f7c8c8","7b4930d666bbe5d10a19fcc8f60cfa392d3ad3383b7f61e979881d2c251bc895","46342f04405a2be3fbfb5e38fe3411325769f14482b8cd48077f2d14b64abcfb","8fa675c4f44e6020328cf85fdf25419300f35d591b4f56f56e00f9d52b6fbb3b","ba98f23160cfa6b47ee8072b8f54201f21a1ee9addc2ef461ebadf559fe5c43a","45a4591b53459e21217dc9803367a651e5a1c30358a015f27de0b3e719db816b","9ef22bee37885193b9fae7f4cad9502542c12c7fe16afe61e826cdd822643d84","b0451895b894c102eed19d50bd5fcb3afd116097f77a7d83625624fafcca8939","bce17120b679ff4f1be70f5fe5c56044e07ed45f1e555db6486c6ded8e1da1c8","7590477bfa2e309e677ff7f31cb466f377fcd0e10a72950439c3203175309958","3f9ebd554335d2c4c4e7dc67af342d37dc8f2938afa64605d8a93236022cc8a5","1c077c9f6c0bc02a36207994a6e92a8fbf72d017c4567f640b52bf32984d2392","600b42323925b32902b17563654405968aa12ee39e665f83987b7759224cc317","32c8f85f6b4e145537dfe61b94ddd98b47dbdd1d37dc4b7042a8d969cd63a1aa","0da77bc7e34afccd7d35dcc0d99db05b56235a536c69082c15f2a07ceb7ceae0","f364fb93abf1e50fa93e38b4cb32c99adb43e8c8044482da5b9bf29aa27eaf75","a460b56ced5a21969a819245f9f36b2b55aa2129e87159957d400d3dc0847529","e53e817cec71dc843700a1571356271d3e13abf8cb9d32f33b4a214c6dcdd1e0","252eb4750d0439d1674ad0dc30d2a2a3e4655e08ad9e58a7e236b21e78d1d540","e344b4a389bb2dfa98f144f3f195387a02b6bdb69deed4a96d16cc283c567778","40bc9bf6808edd4fed3703f1ce7b50f1eb9124d2ac168f85fc4adbb4bd77e291","d618d077158335a50ae6bb789d93dd29b62f930195a2e909e94f0afadad5680a","ae0eeabdb4b4129356ba04ce086c675af383a9ab2b275950d73067842ccd91e4","54f664311746f12a5b0b93a6a58b12a52660e3ff74f06aa0e9c275f46bd22d0e","506bc8f4d2d639bebb120e18d3752ddeee11321fd1070ad2ce05612753c628d6","4069e28d9ec7bb86c714d2d11b5811ebca88c114c12df3fb56b8fec4423dcf18","1977f62a560f3b0fc824281fd027a97ce06c4b2d47b408f3a439c29f1e9f7e10","627570f2487bd8d899dd4f36ecb20fe0eb2f8c379eff297e24caba0c985a6c43","445bbd11741254b30eb904776cbebc72b9d13b35e6a04a0dda331a7bbafe2428","85c9be6b38726347f80c528c950302900db744b558a95206c4de12e1d99b2dee","735baa325c8211ac962fa5927fa69d3702666d1247ceb16bf94c789ccd7bef26","9e82194af3a7d314ccbc64bb94bfb62f4bfea047db3422a7f6c5caf2d06540a9","c32373a44722e84517acd1f923284ce32514fecf3dd93cc5ae52111dc6aa682a","952a9eab21103b79b7a6cca8ad970c3872883aa71273f540285cad360c35da40","8ba48776335db39e0329018c04486907069f3d7ee06ce8b1a6134b7d745271cc","e6d5809e52ed7ef1860d1c483e005d1f71bab36772ef0fd80d5df6db1da0e815","6ee38318bdaa2852d9309e92842f099a9f40c5d3c5aff3833066c02ffd42dade","12ae46c46c5e2405ad3d7e96e2638f1d183095fa8cf8a876d3b3b4d6ba985f5b","e4b1e912737472765e6d2264b8721995f86a463a1225f5e2a27f783ecc013a7b","da09c0171b55ccdf5329e38c5249c0878e7aec151c2a4390c630a2bc1383e768","c40d552bd2a4644b0617ec2f0f1c58618a25d098d2d4aa7c65fb446f3c305b54","ecb4c715f74eb8b0e289c87483f8a4933dfa566f0745b4c86231a077e2f13fea","424ddba00938bb9ae68138f1d03c669f43556fc3e9448ed676866c864ca3f1d6","a0fe12181346c8404aab9d9a938360133b770a0c08b75a2fce967d77ca4b543f","3cc6eb7935ff45d7628b93bb6aaf1a32e8cb3b24287f9e75694b607484b377b3","51451e948351903941a53ed002977984413a3e6a24f748339dd1ed156a6122bf","efd463021ccc91579ed8ae62584176baab2cd407c555c69214152480531a2072","29647c3b79320cfeecb5862e1f79220e059b26db2be52ea256df9cf9203fb401","e8cdefd2dc293cb4866ee8f04368e7001884650bb0f43357c4fe044cc2e1674f","582a3578ebba9238eb0c5d30b4d231356d3e8116fea497119920208fb48ccf85","185eae4a1e8a54e38f36cd6681cfa54c975a2fc3bc2ba6a39bf8163fac85188d","e6e7ac06b50b2693488813f8de73613934d9aa2eb355cdffd2ef898db60c9af1","5b504f247d6388daa92ffb5bbd3ffc5fc5a1ebd3ff928f90b6285b620455dd04","cee72255e129896f0240ceb58c22e207b83d2cc81d8446190d1b4ef9b507ccd6","3b54670e11a8d3512f87e46645aa9c83ae93afead4a302299a192ac5458aa586","c2fc4d3a130e9dc0e40f7e7d192ef2494a39c37da88b5454c8adf143623e5979","2e693158fc1eedba3a5766e032d3620c0e9c8ad0418e4769be8a0f103fdb52cd","516275ccf3e66dc391533afd4d326c44dd750345b68bb573fc592e4e4b74545f","07c342622568693847f6cb898679402dd19740f815fd43bec996daf24a1e2b85","8df70db9ce1c66cf75a75f54025570ab0848ce310f06f96a8dedd3591a8bdd06","841aff23a321e6904eb7f76af1d2cf3ffd23efd71ee9dc1163244884ccebfbd7","6aacd53b14c96a0cd21435cae68eabe6d9a3d78dc5442ec6edcf391efd7989ef","a4096686f982f6977433ee9759ecbef49da29d7e6a5d8278f0fbc7b9f70fce12","2eb279b2ae63cf59b419eb41c4ccd8f0850a7114c0a6a0da386286799f62c38b","9c9b902ae773d4c1ca6bb8f05e06b1dc6ffe7514463e3ee9b9e28153014836ee","86df53d43eccf5f18b4bc8f876932bd8a4a2a9601eb06bbba13f937f3b2a2377","2147f8d114cf58c05106c3dccea9924d069c69508b5980ed4011d2b648af2ffe","edb8332e0c7c7ec8f8f321c96d29c80d5e90de63efdb1b96ad8299d383d4b6b9","fe61f001bd4bd0a374daa75a2ba6d1bb12c849060a607593a3d9a44e6b1df590","cfe8221c909ad721b3da6080570553dea2f0e729afbdbcf2c141252cf22f39b5","34e89249b6d840032b9acdec61d136877f84f2cd3e3980355b8a18f119809956","6f36ff8f8a898184277e7c6e3bf6126f91c7a8b6a841f5b5e6cb415cfc34820e","4b6378c9b1b3a2521316c96f5c777e32a1b14d05b034ccd223499e26de8a379c","07be5ae9bf5a51f3d98ffcfacf7de2fe4842a7e5016f741e9fad165bb929be93","cb1b37eda1afc730d2909a0f62cac4a256276d5e62fea36db1473981a5a65ab1","195f855b39c8a6e50eb1f37d8f794fbd98e41199dffbc98bf629506b6def73d7","da32b37d9dec18a1e66ce7a540c1a466c0a7499a02819a78c049810f8c80ec8f","108314a60f3cb2454f2d889c1fb8b3826795399e5d92e87b2918f14d70c01e69","d75cc838286d6b1260f0968557cd5f28495d7341c02ac93989fb5096deddfb47","d531dc11bb3a8a577bd9ff83e12638098bfc9e0856b25852b91aac70b0887f2a","19968b998a2ab7dfd39de0c942fc738b2b610895843fec25477bc393687babd8","c0e6319f0839d76beed6e37b45ec4bb80b394d836db308ae9db4dea0fe8a9297","1a7b11be5c442dab3f4af9faf20402798fddf1d3c904f7b310f05d91423ba870","48709e4ac55179f5f6789207691759f44e8e0d2bfbadd1ceecb93d4123a12cef","2c817fa37b3d2aa72f01ce4d3f93413a7fbdecafe1b9fb7bd7baaa1bbd46eb08","682203aed293a0986cc2fccc6321d862742b48d7359118ac8f36b290d28920d2","7406d75a4761b34ce126f099eafe6643b929522e9696e5db5043f4e5c74a9e40","ad74043d72ed605cecf58a589112083c78dfd97452b80cd0a81b31c57976af12","9bc363b91528a169b3d9451fba33f865c339a3397da80a44a754547962f4a210","64efb52cb6cf86c8a05ceec920db05f9ebdaac4dff5980d9a62227eb6d2ebc11","3286cf198cf5f068cd74cb0b6648c8cba440dade2fc55eb819e50e5ea9b3f92e","16a6d4efcce5bb20d42134ce52855a46cd4783668c6d6a67a86397eb670ad0d2","46bd71615bdf9bfa8499b9cfce52da03507f7140c93866805d04155fa19caa1b","334b49c56ad2d1285a113ae3df77733d304853afcf7328367f320934e37559af","a0e74be326371c0d49be38e1ca065441fb587c26ca49772d1c96db7b77a1bb14","bb1e5cf70d99c277c9f1fe7a216b527dd6bd2f26b307a8ab65d24248fb3319f5","817547eacf93922e22570ba411f23e9164544dead83e379c7ae9c1cfc700c2cf","a728478cb11ab09a46e664c0782610d7dd5c9db3f9a249f002c92918ca0308f7","9e91ef9c3e057d6d9df8bcbfbba0207e83ef9ab98aa302cf9223e81e32fdfe8d","66d30ef7f307f95b3f9c4f97e6c1a5e4c462703de03f2f81aca8a1a2f8739dbd","0f562669bc473ed1e1e2804f12d09831e6bf506181d7684fb386f60f22989057","90a4be0e17ba5824558c38c93894e7f480b3adf5edd1fe04877ab56c56111595","fadd55cddab059940934df39ce2689d37110cfe37cc6775f06b0e8decf3092d7","9115cfffd8ea095accd6edf950d4bdfabbd5118e7604be2e13fe07150344bb9d","b4f3b4e20e2193179481ab325b8bd0871b986e1e8a8ed2961ce020c2dba7c02d","41744c67366a0482db029a21f0df4b52cd6f1c85cbc426b981b83b378ccb6e65","c3f3cf7561dd31867635c22f3c47c8491af4cfa3758c53e822a136828fc24e5d","1a3f603fedd85d20c65eb7ca522dd6f0e264dbb6e1bfa9fb4f214f2e61b8bdf8","82a74e031ab992424f8874ceacbb43ad33bdcf69538a0fbddc28145e54980f5a","5515f17f45c6aafe6459afa3318bba040cb466a8d91617041566808a5fd77a44","4df1f0c17953b0450aa988c9930061f8861b114e1649e1a16cfd70c5cbdf8d83","441104b363d80fe57eb79a50d495e0b7e3ebeb45a5f0d1a4067d71ef75e8fbfa",{"version":"315f2548ae55ac5da5db73607351906eb10faf551d677843142be295f672e18f","signature":"08298b020257908aa6a6fe162f11f7e8d93617b94fc87655a0648b383e05801f"},{"version":"e03907b976cdfed009490736a22953b19a71f3d3f59d5b82814652908519275f","signature":"27a57fd6ab92b1a637571db6cd716053d303bf35a40fa7fbebc27fe8adc42417"},{"version":"d8b8d1e9f39475716e147f65fcfd1ec16a09852d20f8a5de8d4a46a84532dd74","signature":"724cfc0ae13442453f7e1f4274f67806a8f49a0db0293f8872f3fce46c3e7b61"},{"version":"ab344e3b20185f909d1421ffbdfa64c7c1a728732de703c483c2807a8b218395","signature":"12dec6c99bd8d11167fa91a31e737abbbf8c9cc789c151a25a9a1d13f328175c"},{"version":"8721cd0f93db13f24b9ce7930e8d56bb8b8455f2daf10327e9084504cd760616","signature":"9d115027f4a017c6675d8fdc02279b645f8f9f5652f9a2bcfb33b3f013195d19"},{"version":"dd3850fe63ddad529e8f5f4c81b232fa0706fc2a07b3846c76f031f40acc90eb","signature":"c51a54b4ae969321266c22b366be7b1c0328733c7392f2aeea6d97babc4c50df"},"b77aadb530010c3abe2f96fe97fb6ab7215b0efbc53cda06abd6befcd45fbbf9","fc0140cf41d169b3b77e09831c9d2eed1cdb131aa34f4fa27e4c01896ec97ad6","7c14e702387296711c1a829bc95052ff02f533d4aa27d53cc0186c795094a3a9","579f8828da42ae02db6915a0223d23b0da07157ff484fecdbf8a96fffa0fa4df","d1e16a1778a336ae49607ca0becd8688e74a020bea949047dcfcbb1bd2dc0f5a","a13aac535101a942283e3d00bce50f483bfa9bed6e1f8dfda33a3bb072498776","8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f",{"version":"ea50763d9bfa32c8dddf133640afab0c3edcec8a0846033a2a6ecd4d5110ab43","signature":"76e118460418323f60bad7e3666db3c0943e1b6bfb27e4e835da37e18d7c741d"},{"version":"75d522dcab18f6c2d94d89229cffefb58df2f66c3f9a0eddbf901ab94eb44281","signature":"aaff1a213abb103c4e81e05dbaa6c69adc889db63423d52e5e9dbfeb198ad947"},"ba63131c5e91f797736444933af16ffa42f9f8c150d859ec65f568f037a416ea","142e2e1abd8603dfdeaa1c88d73003a7912aa949b3a19234fa91f729ebfa2fcc","340a45cd77b41d8a6deda248167fa23d3dc67ec798d411bd282f7b3d555b1695","0e9aa853b5eb2ca09e0e3e3eb94cbd1d5fb3d682ab69817d4d11fe225953fc57","ffa1885ad546522fa1046644db93b17de7a29191a547edeeac57391909a73846","793c353144f16601da994fa4e62c09b7525836ce999c44f69c28929072ca206a","16d51f964ec125ad2024cf03f0af444b3bc3ec3614d9345cc54d09bab45c9a4c","ba601641fac98c229ccd4a303f747de376d761babb33229bb7153bed9356c9cc",{"version":"61b60d145059c3c8e3c7b484713191b6d0b70999bcb11f2b26286b15926a2b5f","affectsGlobalScope":true},"84e3bbd6f80983d468260fdbfeeb431cc81f7ea98d284d836e4d168e36875e86","0b85cb069d0e427ba946e5eb2d86ef65ffd19867042810516d16919f6c1a5aec","6d829824ead8999f87b6df21200df3c6150391b894b4e80662caa462bd48d073","65cfd1c0bc729fbc2b49fe66bc5ebddba5aa3a978c748e1d2e0d07f502238ce2","15c88bfd1b8dc7231ff828ae8df5d955bae5ebca4cf2bcb417af5821e52299ae",{"version":"7cee402d3c866d1fd7c8f12275c6afc350690e4e17db6bd6b86bbb501466140b","affectsGlobalScope":true},"599ac4a84b7aa6a298731179ec1663a623ff8ac324cdc1dabb9c73c1259dc854","100509817f7a12b93f2ca4e07c1e3fe7f73ce2cbe2d69b609df2bf35fbbe7cf8","585bc61f439c027640754dd26e480afa202f33e51db41ee283311a59c12c62e7","8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f",{"version":"2ab75fa3d744256aa0f208e067244ec3393363fa0638b1e751c5f7cef9e3aba4","signature":"cc0593d8285eaf8125fd500030979e73159af080cf6e62de6372619c54a92f85"},{"version":"e6492490fc56103e64120dfd209805ce41b200a87fa12ebb5916691d1846dd1d","signature":"168bebe1c21b2f169ed2f3e6b49785a06ffe8da0f5f7d4ce0d174d53d29be537"},"29d59e921bc723594bbfc98230d24f38f0d5a669f28fcf989b7468f4f95b7c52","55cf4bede47afcecc481168df3135bdf6f8e5c1bd0d78fb30981164ff165c3bc",{"version":"2524111b005f59bc1b323dfa6da5e1840d5d0700cdc30e6898cf5df430f6d7ba","signature":"766b76fdd0d408292fdcefc76bbc6bd40388c437bc63c4970483166fc9e9daa1"},{"version":"308bedb430fb80163f846d7a98500e4fcf14e4e03f5d2224d3ccc19543496ceb","signature":"2e5d258cf85349b02b015c3f1b8873c152d182c3819a7ccc3aff16fc3037a5fc"},"4be86f322306e3abd99ca5081a7f7c4b291a4a94c029a333b378374b8dad133e","2cc060320030aa859e8623aa2be1d87818ca30b173303b4406ffff457d5f99de","8b0b6a4c032a56d5651f7dd02ba3f05fbfe4131c4095093633cda3cae0991972","27484cb3aa328bc5d0957fcb34df68a5db1be280af510d9ed3a282b1a0a93b38","6c2b8c78eb1476ad2668898923fda9c3e67b295b9a6dc7a7312ead2582a76883","d8fb0821bcebbcc5ef87655a6442e8909313eb0bd7960f696b10cdb31576fdaa","1053398d8fd9b1a45170b5cca30bd54abe7ec7061ef2929c4da9feaa71737930","9473e83a3ccd24983ca2bc517ad41d81542f5a8215288be71bcd73655ee5ace0","3b0e75cde1f3a18976c76de3b11ff0ec76f59e561c107d4d304c1555a4bacdad","7c6b9f82c3c62d67c3311301ec6f618b1773373201aefea8ec33e7d607b308d1","c86ad86cc7a3ec3794deab9b943a823d9aaf09b846bb581a06bf263117e8d6d9","cfe88132f67aa055a3f49d59b01585fa8d890f5a66a0a13bb71973d57573eee7","f23601713615719b1a1394deae884fb9f507de819a086d5a019c63793da9efc6","50fd11b764194f06977c162c37e5a70bcf0d3579bf82dd4de4eee3ac68d0f82f","ad5ad568f2f537a43dcc1588b2379f9dc79539ae36b8821b13a5d03625211eb2","99579aa074ed298e7a3d6a47e68f0cd099e92411212d5081ce88344a5b1b528d","d2d58166965f631fa203f405f3713b0f86f1f8b80755e9daea43057a25311e16","ce7dbf31739cc7bca35ca50e4f0cbd75cd31fd6c05c66841f8748e225dc73aaf","942ab34f62ac3f3d20014615b6442b6dc51815e30a878ebc390dd70e0dec63bf","a4d05f346ba48f5685f9142fdd90b1e12e463535c38bdea74fce64813f2a8661","0256d60785ede7860b5262f504f139aa68f74db44ba9f03807b752864580772c","396c1e5a39706999ec8cc582916e05fcb4f901631d2c192c1292e95089a494d9","89df75d28f34fc698fe261f9489125b4e5828fbd62d863bbe93373d3ed995056","7cb9b6d5c1e3508fbc81e7bbab314eac54715f9326ac72fd0eb65f17a4393d50","1a2f63e6b67578536d0102c8ff351191cda459676b3f6e459c0cbf99d7c99264","1747d2d57e94676bc6b3ae6962439013ffd7ff26f6c12a30a1ace54f003ccbab","50183ad09541522ef0471069f8900599767392678fe3a1a62570ab7c82e604a1","e8b556459403cfae6d8d14eefbb85c6246bccc41ecde7be616d643df513aed6b","903bb69c5e5ce0cb8f8159a86acca9116275f8c78253db80004fe0d78f436ef4","9daabcf8cac2bd41d4cb83511c0358fc24650fd08f9ae73e888582285a116a3f","82d3e00d56a71fc169f3cf9ec5f5ffcc92f6c0e67d4dfc130dafe9f1886d5515","0d87794dd5d3cc5788f8cd400a69c5ce4c96b098c73e8375c1c61ee2f5b66253","c8bdc9b7fb85eb9704c17d3316a95844e543db9742044c2b1a0fc88d8d620fe6","862b3a5f6637c3826ea615378ba203a3cb4e8320bb2f4422aa055f69c7e7422f","e3d221660c0b79a9a3ba1111b3dfbb1136c0b52d7609b0054d3ce09ce711a3e6","892adfd3427fa4ed24bede88e8e46e4cb67e53e794365023fd473f3be796981d","992fda06eebba15d37625007500bef5b3fdd1c5e2f5a334064efeb1604c7bce3","07bc8a3551e39e70c38e7293b1a09916867d728043e352b119f951742cb91624","e47adc2176f43c617c0ab47f2d9b2bb1706d9e0669bf349a30c3fe09ddd63261","7fec79dfd7319fec7456b1b53134edb54c411ba493a0aef350eee75a4f223eeb","189c489705bb96a308dcde9b3336011d08bfbca568bcaf5d5d55c05468e9de7a","98f4b1074567341764b580bf14c5aabe82a4390d11553780814f7e932970a6f7","abdc0a8843b28c3cafbefb90079690b17b7b4e2a9c9bbf2cd8762e11a3958034","2e252235037a2cd8feebfbf74aa460f783e5d423895d13f29a934d7655a1f8be","7b5ed961a0e03965299591d73de8b8c41e8a68105ff4fc07a240b0dfb94a5a3d",{"version":"9ab6713af48ff7415e1c518f014224e1fe6be69f0d5bfb5e0de6810bb4cf7ee0","signature":"f761c91419d0a89422a0004ef1a92929dd4d2d5e5c16758654d8b0467d1998c6"},{"version":"3ecacd52891c02691cf8512ffeea513e2998e8f3da364c29f3c6ac11cd4e9d7a","signature":"74dd91d4a9e89666f7e7dc4e475e09de1393abcb65e46a7a8886b2116c57c90f"},"f82348f8ac4f637d6ad76ef5d45577ccc0c59fbd25d8c44d55349a71a90e195a","8dfed5c91ad36e69e6da6b7e49be929d4e19666db2b651aa839c485170a2902c","4aaf84a5ac87bad3211f041fab85de5cc42e5954c3ed56842faf6f08167e6202","93de1c6dab503f053efe8d304cb522bb3a89feab8c98f307a674a4fae04773e9","3b043cf9a81854a72963fdb57d1884fc4da1cf5be69b5e0a4c5b751e58cb6d88","d0b0a00cf31968a33baeaadf974ce4e5e7edf58cea5288765293f41ba5e72b3a","8d48b8f8a377ade8dd1f000625bc276eea067f2529cc9cafdf082d17142107d6",{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true},"0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0","0359682c54e487c4cab2b53b2b4d35cc8dea4d9914bc6abcdb5701f8b8e745a4","7d7c8ef7d48a035142c07dae60545ecc0e4af4c337742760cb09726f2f8e31db","e300bf65972ac08167a72787e19d1b43c285c5424707194d0ba64422f6b02c77","82772e5d55062a042a2715a555d347275a663940926fc785705eb082010cb9f6","3ebae8c00411116a66fca65b08228ea0cf0b72724701f9b854442100aab55aba","de18acda71730bac52f4b256ce7511bb56cc21f6f114c59c46782eff2f632857","7eb06594824ada538b1d8b48c3925a83e7db792f47a081a62cf3e5c4e23cf0ee","f5638f7c2f12a9a1a57b5c41b3c1ea7db3876c003bab68e6a57afd6bcc169af0","d8aab31ba8e618cc3eea10b0945de81cb93b7e8150a013a482332263b9305322","69da61a7b5093dac77fa3bec8be95dcf9a74c95a0e9161edb98bb24e30e439d2","561eca7a381b96d6ccac6e4061e6d2ae53f5bc44203f3fd9f5b26864c32ae6e9","62ea38627e3ebab429f7616812a9394d327c2bc271003dfba985de9b4137369f","8a8a96898906f065f296665e411f51010b51372fa260d5373bf9f64356703190","f014d6d053cb1840965952268a589c9e2a74d66c8c88286562d5699350e28e19","66851b263230decb3684072b2cb777f70ea3e52d4489b88f78f185618d4d398e",{"version":"e9f2cdc4e98e73a606ff68c470a8cb4f23cd638c47649d71b90a2d9413102080","affectsGlobalScope":true},"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b","f58599a92d4a64416f4999a4d7241e1647aec2a6249214892722f712a6eedbe0","b0d10e46cfe3f6c476b69af02eaa38e4ccc7430221ce3109ae84bb9fb8282298","c52625d45193c6c0165798cd2be330b9b2c22cab457232a27f990e95b000b6a4","e57360b3f53ec41ed30cfb0eaed6e689be92bf311d7c25175a4e127f46158079","f7e133b20ee2669b6c0e5d7f0cd510868c57cd64b283e68c7f598e30ce9d76d2","6ba73232c9d3267ca36ddb83e335d474d2c0e167481e3dec416c782894e11438"],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"experimentalDecorators":true,"module":1,"noFallthroughCasesInSwitch":false,"noImplicitAny":false,"outDir":"./","removeComments":true,"skipLibCheck":true,"sourceMap":true,"strictNullChecks":false,"target":4},"fileIdsList":[[394,431],[394,648],[394],[289,291,394],[320,394],[242,320,394],[321,322,394],[45,292,323,325,326,394],[238,289,394],[324,394],[289,290,394],[290,291,394],[289,394],[271,278,394],[394,430],[293,294,295,296,297,298,299,300,301,302,303,304,305,306,394],[247,278,394],[271,394],[244,289,394,430],[311,312,313,314,315,316,317,318,394],[249,394],[289,394,430],[307,310,319,394],[308,309,394],[280,394],[249,250,251,252,394],[328,394],[328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,394],[394,402],[383,394,401],[289,394,406],[238,394,404],[394,406,407,408],[289,394,404],[394,405],[44,253,289,320,327,350,394,403,409,421,425,427,429],[49,394],[49,238,394],[238,242,394],[49,289,394],[246,247,394],[258,394],[260,261,262,263,264,394],[253,266,270,271,394],[272,273,394],[46,47,48,49,50,239,240,241,242,243,244,245,246,247,248,258,259,265,270,271,274,275,276,278,284,285,286,287,288,394],[269,394],[254,255,256,257,394],[247,254,255,394],[247,253,394],[247,256,394],[247,280,394],[277,279,280,281,282,283,394],[278,394],[46,247,277,279,281,394],[255,394],[46,247,278,394],[268,394],[46,247,251,268,284,394],[266,267,269,394],[243,245,259,266,271,272,285,286,289,394],[50,243,245,248,285,286,394],[252,394],[238,394],[248,394],[394,410,414,415,416,417,418,419,420],[248,289,394,414],[248,394,413],[248,394,413,430],[241,247,248,394,411,412,413],[238,289,394,411],[394,423],[320,394,411],[394,422,424],[268,394,426],[277,394],[253,289,394],[394,428],[266,270,289,394,430],[394,602],[289,394,430,610,611],[394,606,609,610],[394,614,615],[394,430,603,617],[394,618],[394,610],[394,617,620],[44,394,603,612,613,616,619,621,624,628,631,633,634,636,642,644],[289,394,604],[247,275,394,430,604,605,606,609,610,612,645],[394,606,607,608,610,623,627],[48,247,275,394,609,610],[394,622],[394,430,607,609],[394,430,609],[394,430,605,606,608,625,626],[394,430,607,609,610],[247,394,430],[247,289,394,607,608,610],[394,609],[275,394],[254,258,289,394,629],[394,630],[289,394,607],[247,289,394,430,607,609,610,632],[259,266,270,394,430,603,607,612,633],[269,270,394,430,602,635],[394,638,640,641],[394,637],[394,639],[394,430,606,609,638],[48,247,275,289,394,430,607,609,612,624],[394,643],[394,569,570,571],[394,568],[289,394,401,567],[394,430,568],[394,401,567,568],[394,572],[394,430,577,579],[394,576,579,580,581,591,592],[394,577,578],[394,430,577],[394,590],[394,579],[394,593],[394,432],[394,401],[394,648,649,650,651,652],[394,648,650],[369,394,401,587],[369,394,401],[394,658,659],[394,655,656,657,658],[394,659],[366,369,394,401,582,583],[394,583,584,586,588],[367,394,401],[394,662],[394,663],[394,669,671],[351,394],[354,394],[355,360,394],[356,366,367,374,383,393,394],[356,357,366,374,394],[358,394],[359,360,367,375,394],[360,383,390,394],[361,363,366,374,394],[362,394],[363,364,394],[365,366,394],[366,394],[366,367,368,383,393,394],[366,367,368,383,394],[369,374,383,393,394],[366,367,369,370,374,383,390,393,394],[369,371,383,390,393,394],[351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400],[366,372,394],[373,393,394],[363,366,374,383,394],[375,394],[376,394],[354,377,394],[378,392,394,398],[379,394],[380,394],[366,381,394],[381,382,394,396],[366,383,384,385,394],[383,385,394],[383,384,394],[386,394],[387,394],[366,388,389,394],[388,389,394],[360,374,390,394],[391,394],[374,392,394],[355,369,380,393,394],[360,394],[383,394,395],[394,396],[394,397],[355,360,366,368,377,383,393,394,396,398],[383,394,399],[394,567,589,597],[394,589,590],[369,394,589],[369,394,401,585],[367,369,383,394,401,654],[394,677],[394,679],[394,441],[394,440,441,446],[394,442,443,444,445,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551],[394,441,469],[394,441,509],[394,440],[394,436,437,438,439,440,441,446,552,553,554,555,559],[394,446],[394,438,557,558],[394,440,556],[394,441,446],[394,436,437],[394,665,666],[394,665,666,667,668],[394,508],[394,670],[51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,67,69,70,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,107,108,109,110,111,112,113,114,115,116,118,120,121,122,123,124,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,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,170,171,172,174,182,184,185,186,187,188,189,191,192,194,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,394],[96,394],[52,55,394],[54,394],[54,55,394],[51,52,53,55,394],[52,54,55,211,394],[55,394],[51,54,96,394],[54,55,211,394],[54,219,394],[52,54,55,394],[64,394],[87,394],[108,394],[54,55,96,394],[55,103,394],[54,55,96,114,394],[54,55,114,394],[55,155,394],[55,96,394],[51,55,173,394],[51,55,174,394],[195,394],[180,181,394],[190,394],[180,394],[51,55,173,180,394],[173,174,181,394],[193,394],[51,55,180,181,394],[53,54,55,394],[51,55,394],[52,54,174,175,176,177,394],[96,174,175,176,177,394],[174,176,394],[54,175,176,178,179,182,394],[51,54,394],[55,197,394],[56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,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,97,98,99,100,101,102,104,105,106,107,108,109,110,111,112,113,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,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,394],[183,394],[394,430,564,565,600],[394,430,432,561,566,574,575,594,595],[238,394,430],[394,430,434,564,573,575,594,596,599],[394,430,434,435,561,562,566,573,574],[394,560],[375,394,430,434,594,598],[394,430,432],[394,430,601,645],[394,430,434],[394,430,433],[394,430,562],[394,430,434,562,563],[394,430,432,434,435,561],[432,561,566,574,575],[238,430],[434,561,562,566,573,574],[432],[432,434,598],[430,433],[562],[432,434,561]],"referencedMap":[[432,1],[650,2],[648,3],[45,3],[292,4],[321,5],[322,6],[323,7],[327,8],[324,9],[325,10],[290,3],[291,11],[326,12],[305,3],[293,3],[294,13],[295,14],[296,3],[297,15],[307,16],[298,3],[299,17],[300,3],[301,3],[302,13],[303,13],[304,13],[306,18],[314,19],[316,3],[313,3],[319,20],[317,3],[315,3],[311,21],[312,22],[318,3],[320,23],[308,3],[310,24],[309,25],[250,3],[253,26],[249,3],[251,3],[252,3],[344,27],[329,27],[336,27],[333,27],[346,27],[337,27],[343,27],[328,3],[347,27],[350,28],[341,27],[331,27],[349,27],[334,27],[332,27],[342,27],[338,27],[348,27],[335,27],[345,27],[330,27],[340,27],[339,27],[403,29],[402,30],[407,31],[408,32],[409,33],[405,34],[406,35],[430,36],[46,3],[47,3],[48,3],[50,37],[239,38],[240,37],[411,3],[266,3],[267,3],[241,3],[412,3],[49,3],[243,39],[244,3],[242,40],[245,39],[246,3],[248,41],[259,42],[260,3],[265,43],[261,3],[262,3],[263,3],[264,3],[272,44],[274,45],[273,3],[289,46],[275,3],[276,3],[635,47],[258,48],[256,49],[254,50],[255,51],[257,3],[281,52],[277,3],[284,53],[282,54],[280,55],[283,56],[279,57],[269,58],[285,59],[270,60],[287,61],[288,62],[278,3],[247,3],[271,63],[286,64],[410,65],[421,66],[415,67],[416,68],[419,69],[418,69],[417,68],[420,68],[414,70],[422,71],[424,72],[423,73],[425,74],[426,58],[427,75],[268,3],[428,76],[413,77],[429,78],[602,79],[603,80],[612,81],[613,3],[614,3],[615,82],[616,83],[618,84],[619,85],[620,86],[617,80],[621,87],[645,88],[605,89],[607,90],[628,91],[632,92],[623,93],[622,3],[626,94],[610,95],[627,96],[608,97],[604,98],[609,99],[606,100],[624,101],[630,102],[631,103],[629,104],[633,105],[634,106],[636,107],[642,108],[611,15],[638,109],[637,15],[640,110],[639,3],[641,111],[625,112],[644,113],[643,15],[572,114],[569,115],[568,116],[570,117],[571,118],[573,119],[576,3],[580,120],[593,121],[577,13],[579,122],[578,3],[581,123],[591,124],[592,125],[594,126],[433,127],[431,128],[653,129],[649,2],[651,130],[652,2],[435,128],[588,131],[587,132],[654,3],[660,133],[655,3],[659,134],[656,135],[658,3],[584,136],[589,137],[661,138],[662,3],[663,139],[664,140],[672,141],[657,3],[673,3],[567,128],[585,3],[351,142],[352,142],[354,143],[355,144],[356,145],[357,146],[358,147],[359,148],[360,149],[361,150],[362,151],[363,152],[364,152],[365,153],[366,154],[367,155],[368,156],[353,3],[400,3],[369,157],[370,158],[371,159],[401,160],[372,161],[373,162],[374,163],[375,164],[376,165],[377,166],[378,167],[379,168],[380,169],[381,170],[382,171],[383,172],[385,173],[384,174],[386,175],[387,176],[388,177],[389,178],[390,179],[391,180],[392,181],[393,182],[394,183],[395,184],[396,185],[397,186],[398,187],[399,188],[674,3],[598,189],[597,190],[590,191],[675,3],[583,3],[582,3],[586,192],[676,3],[677,193],[678,194],[469,3],[679,3],[680,195],[404,3],[439,3],[544,196],[548,196],[547,196],[545,196],[546,196],[549,196],[442,196],[454,196],[443,196],[456,196],[458,196],[452,196],[451,196],[453,196],[457,196],[459,196],[444,196],[455,196],[445,196],[447,197],[448,196],[449,196],[450,196],[466,196],[465,196],[552,198],[460,196],[462,196],[461,196],[463,196],[464,196],[551,196],[550,196],[467,196],[470,199],[471,199],[473,196],[517,196],[474,196],[518,196],[515,196],[519,196],[475,196],[476,196],[477,199],[520,196],[514,199],[472,199],[521,196],[478,199],[522,196],[502,196],[479,199],[480,196],[481,196],[512,199],[484,196],[483,196],[523,196],[524,196],[525,199],[486,196],[488,196],[489,196],[495,196],[496,196],[490,199],[526,196],[513,199],[491,196],[492,196],[527,196],[493,196],[485,199],[528,196],[511,196],[529,196],[494,199],[497,196],[498,196],[516,199],[530,196],[531,196],[510,200],[487,196],[532,199],[533,196],[534,196],[535,196],[499,196],[503,196],[500,199],[501,196],[482,196],[504,196],[507,196],[505,196],[506,196],[468,196],[542,196],[536,196],[537,196],[539,196],[540,196],[538,196],[543,196],[541,196],[441,201],[560,202],[558,203],[559,204],[557,205],[556,196],[555,206],[438,3],[440,3],[436,3],[553,3],[554,207],[446,201],[437,3],[665,3],[667,208],[669,209],[668,208],[666,3],[509,210],[508,3],[671,211],[670,3],[44,3],[238,212],[211,3],[189,213],[187,213],[237,214],[202,215],[201,215],[103,216],[54,217],[209,216],[210,216],[212,218],[213,216],[214,219],[114,220],[215,216],[186,216],[216,216],[217,221],[218,216],[219,215],[220,222],[221,216],[222,216],[223,216],[224,216],[225,215],[226,216],[227,216],[228,216],[229,216],[230,223],[231,216],[232,216],[233,216],[234,216],[235,216],[53,214],[56,219],[57,219],[58,216],[59,219],[60,219],[61,219],[62,219],[63,216],[65,224],[66,219],[64,219],[67,219],[68,219],[69,219],[70,219],[71,219],[72,219],[73,216],[74,219],[75,219],[76,219],[77,219],[78,219],[79,216],[80,219],[81,216],[82,219],[83,219],[84,219],[85,219],[86,216],[88,225],[87,219],[89,219],[90,219],[91,219],[92,219],[93,223],[94,216],[95,216],[109,226],[97,227],[98,219],[99,219],[100,216],[101,219],[102,219],[104,228],[105,219],[106,219],[107,219],[108,219],[110,219],[111,219],[112,219],[113,219],[115,229],[116,219],[117,219],[118,219],[119,216],[120,219],[121,230],[122,230],[123,230],[124,216],[125,219],[126,219],[127,219],[132,219],[128,219],[129,216],[130,219],[131,216],[133,216],[134,219],[135,219],[136,216],[137,216],[138,219],[139,216],[140,219],[141,219],[142,216],[143,219],[144,219],[145,219],[146,219],[147,219],[148,219],[149,219],[150,219],[151,219],[152,219],[153,219],[154,219],[155,219],[156,231],[157,219],[158,219],[159,219],[160,219],[161,219],[162,219],[163,216],[164,216],[165,216],[166,216],[167,216],[168,219],[169,219],[170,219],[171,219],[188,232],[236,216],[174,233],[173,234],[196,235],[195,236],[191,237],[190,236],[192,238],[181,239],[180,240],[194,241],[193,238],[182,242],[96,243],[52,244],[51,219],[185,3],[178,245],[179,246],[176,3],[177,247],[175,219],[183,248],[55,249],[203,3],[204,3],[197,3],[200,215],[199,3],[205,3],[206,3],[198,250],[207,3],[208,3],[172,251],[184,252],[8,3],[9,3],[13,3],[12,3],[2,3],[14,3],[15,3],[16,3],[17,3],[18,3],[19,3],[20,3],[21,3],[3,3],[4,3],[43,3],[25,3],[22,3],[23,3],[24,3],[26,3],[27,3],[28,3],[5,3],[29,3],[30,3],[31,3],[32,3],[6,3],[33,3],[34,3],[35,3],[36,3],[7,3],[41,3],[37,3],[38,3],[39,3],[40,3],[1,3],[42,3],[11,3],[10,3],[601,253],[596,254],[647,255],[600,256],[575,257],[574,127],[566,258],[561,258],[599,259],[595,260],[646,261],[565,262],[434,263],[563,264],[564,265],[562,266]],"exportedModulesMap":[[432,1],[650,2],[648,3],[45,3],[292,4],[321,5],[322,6],[323,7],[327,8],[324,9],[325,10],[290,3],[291,11],[326,12],[305,3],[293,3],[294,13],[295,14],[296,3],[297,15],[307,16],[298,3],[299,17],[300,3],[301,3],[302,13],[303,13],[304,13],[306,18],[314,19],[316,3],[313,3],[319,20],[317,3],[315,3],[311,21],[312,22],[318,3],[320,23],[308,3],[310,24],[309,25],[250,3],[253,26],[249,3],[251,3],[252,3],[344,27],[329,27],[336,27],[333,27],[346,27],[337,27],[343,27],[328,3],[347,27],[350,28],[341,27],[331,27],[349,27],[334,27],[332,27],[342,27],[338,27],[348,27],[335,27],[345,27],[330,27],[340,27],[339,27],[403,29],[402,30],[407,31],[408,32],[409,33],[405,34],[406,35],[430,36],[46,3],[47,3],[48,3],[50,37],[239,38],[240,37],[411,3],[266,3],[267,3],[241,3],[412,3],[49,3],[243,39],[244,3],[242,40],[245,39],[246,3],[248,41],[259,42],[260,3],[265,43],[261,3],[262,3],[263,3],[264,3],[272,44],[274,45],[273,3],[289,46],[275,3],[276,3],[635,47],[258,48],[256,49],[254,50],[255,51],[257,3],[281,52],[277,3],[284,53],[282,54],[280,55],[283,56],[279,57],[269,58],[285,59],[270,60],[287,61],[288,62],[278,3],[247,3],[271,63],[286,64],[410,65],[421,66],[415,67],[416,68],[419,69],[418,69],[417,68],[420,68],[414,70],[422,71],[424,72],[423,73],[425,74],[426,58],[427,75],[268,3],[428,76],[413,77],[429,78],[602,79],[603,80],[612,81],[613,3],[614,3],[615,82],[616,83],[618,84],[619,85],[620,86],[617,80],[621,87],[645,88],[605,89],[607,90],[628,91],[632,92],[623,93],[622,3],[626,94],[610,95],[627,96],[608,97],[604,98],[609,99],[606,100],[624,101],[630,102],[631,103],[629,104],[633,105],[634,106],[636,107],[642,108],[611,15],[638,109],[637,15],[640,110],[639,3],[641,111],[625,112],[644,113],[643,15],[572,114],[569,115],[568,116],[570,117],[571,118],[573,119],[576,3],[580,120],[593,121],[577,13],[579,122],[578,3],[581,123],[591,124],[592,125],[594,126],[433,127],[431,128],[653,129],[649,2],[651,130],[652,2],[435,128],[588,131],[587,132],[654,3],[660,133],[655,3],[659,134],[656,135],[658,3],[584,136],[589,137],[661,138],[662,3],[663,139],[664,140],[672,141],[657,3],[673,3],[567,128],[585,3],[351,142],[352,142],[354,143],[355,144],[356,145],[357,146],[358,147],[359,148],[360,149],[361,150],[362,151],[363,152],[364,152],[365,153],[366,154],[367,155],[368,156],[353,3],[400,3],[369,157],[370,158],[371,159],[401,160],[372,161],[373,162],[374,163],[375,164],[376,165],[377,166],[378,167],[379,168],[380,169],[381,170],[382,171],[383,172],[385,173],[384,174],[386,175],[387,176],[388,177],[389,178],[390,179],[391,180],[392,181],[393,182],[394,183],[395,184],[396,185],[397,186],[398,187],[399,188],[674,3],[598,189],[597,190],[590,191],[675,3],[583,3],[582,3],[586,192],[676,3],[677,193],[678,194],[469,3],[679,3],[680,195],[404,3],[439,3],[544,196],[548,196],[547,196],[545,196],[546,196],[549,196],[442,196],[454,196],[443,196],[456,196],[458,196],[452,196],[451,196],[453,196],[457,196],[459,196],[444,196],[455,196],[445,196],[447,197],[448,196],[449,196],[450,196],[466,196],[465,196],[552,198],[460,196],[462,196],[461,196],[463,196],[464,196],[551,196],[550,196],[467,196],[470,199],[471,199],[473,196],[517,196],[474,196],[518,196],[515,196],[519,196],[475,196],[476,196],[477,199],[520,196],[514,199],[472,199],[521,196],[478,199],[522,196],[502,196],[479,199],[480,196],[481,196],[512,199],[484,196],[483,196],[523,196],[524,196],[525,199],[486,196],[488,196],[489,196],[495,196],[496,196],[490,199],[526,196],[513,199],[491,196],[492,196],[527,196],[493,196],[485,199],[528,196],[511,196],[529,196],[494,199],[497,196],[498,196],[516,199],[530,196],[531,196],[510,200],[487,196],[532,199],[533,196],[534,196],[535,196],[499,196],[503,196],[500,199],[501,196],[482,196],[504,196],[507,196],[505,196],[506,196],[468,196],[542,196],[536,196],[537,196],[539,196],[540,196],[538,196],[543,196],[541,196],[441,201],[560,202],[558,203],[559,204],[557,205],[556,196],[555,206],[438,3],[440,3],[436,3],[553,3],[554,207],[446,201],[437,3],[665,3],[667,208],[669,209],[668,208],[666,3],[509,210],[508,3],[671,211],[670,3],[44,3],[238,212],[211,3],[189,213],[187,213],[237,214],[202,215],[201,215],[103,216],[54,217],[209,216],[210,216],[212,218],[213,216],[214,219],[114,220],[215,216],[186,216],[216,216],[217,221],[218,216],[219,215],[220,222],[221,216],[222,216],[223,216],[224,216],[225,215],[226,216],[227,216],[228,216],[229,216],[230,223],[231,216],[232,216],[233,216],[234,216],[235,216],[53,214],[56,219],[57,219],[58,216],[59,219],[60,219],[61,219],[62,219],[63,216],[65,224],[66,219],[64,219],[67,219],[68,219],[69,219],[70,219],[71,219],[72,219],[73,216],[74,219],[75,219],[76,219],[77,219],[78,219],[79,216],[80,219],[81,216],[82,219],[83,219],[84,219],[85,219],[86,216],[88,225],[87,219],[89,219],[90,219],[91,219],[92,219],[93,223],[94,216],[95,216],[109,226],[97,227],[98,219],[99,219],[100,216],[101,219],[102,219],[104,228],[105,219],[106,219],[107,219],[108,219],[110,219],[111,219],[112,219],[113,219],[115,229],[116,219],[117,219],[118,219],[119,216],[120,219],[121,230],[122,230],[123,230],[124,216],[125,219],[126,219],[127,219],[132,219],[128,219],[129,216],[130,219],[131,216],[133,216],[134,219],[135,219],[136,216],[137,216],[138,219],[139,216],[140,219],[141,219],[142,216],[143,219],[144,219],[145,219],[146,219],[147,219],[148,219],[149,219],[150,219],[151,219],[152,219],[153,219],[154,219],[155,219],[156,231],[157,219],[158,219],[159,219],[160,219],[161,219],[162,219],[163,216],[164,216],[165,216],[166,216],[167,216],[168,219],[169,219],[170,219],[171,219],[188,232],[236,216],[174,233],[173,234],[196,235],[195,236],[191,237],[190,236],[192,238],[181,239],[180,240],[194,241],[193,238],[182,242],[96,243],[52,244],[51,219],[185,3],[178,245],[179,246],[176,3],[177,247],[175,219],[183,248],[55,249],[203,3],[204,3],[197,3],[200,215],[199,3],[205,3],[206,3],[198,250],[207,3],[208,3],[172,251],[184,252],[8,3],[9,3],[13,3],[12,3],[2,3],[14,3],[15,3],[16,3],[17,3],[18,3],[19,3],[20,3],[21,3],[3,3],[4,3],[43,3],[25,3],[22,3],[23,3],[24,3],[26,3],[27,3],[28,3],[5,3],[29,3],[30,3],[31,3],[32,3],[6,3],[33,3],[34,3],[35,3],[36,3],[7,3],[41,3],[37,3],[38,3],[39,3],[40,3],[1,3],[42,3],[11,3],[10,3],[601,253],[596,267],[647,268],[575,269],[574,270],[599,271],[434,272],[563,273],[562,274]],"semanticDiagnosticsPerFile":[432,650,648,45,292,321,322,323,327,324,325,290,291,326,305,293,294,295,296,297,307,298,299,300,301,302,303,304,306,314,316,313,319,317,315,311,312,318,320,308,310,309,250,253,249,251,252,344,329,336,333,346,337,343,328,347,350,341,331,349,334,332,342,338,348,335,345,330,340,339,403,402,407,408,409,405,406,430,46,47,48,50,239,240,411,266,267,241,412,49,243,244,242,245,246,248,259,260,265,261,262,263,264,272,274,273,289,275,276,635,258,256,254,255,257,281,277,284,282,280,283,279,269,285,270,287,288,278,247,271,286,410,421,415,416,419,418,417,420,414,422,424,423,425,426,427,268,428,413,429,602,603,612,613,614,615,616,618,619,620,617,621,645,605,607,628,632,623,622,626,610,627,608,604,609,606,624,630,631,629,633,634,636,642,611,638,637,640,639,641,625,644,643,572,569,568,570,571,573,576,580,593,577,579,578,581,591,592,594,433,431,653,649,651,652,435,588,587,654,660,655,659,656,658,584,589,661,662,663,664,672,657,673,567,585,351,352,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,353,400,369,370,371,401,372,373,374,375,376,377,378,379,380,381,382,383,385,384,386,387,388,389,390,391,392,393,394,395,396,397,398,399,674,598,597,590,675,583,582,586,676,677,678,469,679,680,404,439,544,548,547,545,546,549,442,454,443,456,458,452,451,453,457,459,444,455,445,447,448,449,450,466,465,552,460,462,461,463,464,551,550,467,470,471,473,517,474,518,515,519,475,476,477,520,514,472,521,478,522,502,479,480,481,512,484,483,523,524,525,486,488,489,495,496,490,526,513,491,492,527,493,485,528,511,529,494,497,498,516,530,531,510,487,532,533,534,535,499,503,500,501,482,504,507,505,506,468,542,536,537,539,540,538,543,541,441,560,558,559,557,556,555,438,440,436,553,554,446,437,665,667,669,668,666,509,508,671,670,44,238,211,189,187,237,202,201,103,54,209,210,212,213,214,114,215,186,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,53,56,57,58,59,60,61,62,63,65,66,64,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,88,87,89,90,91,92,93,94,95,109,97,98,99,100,101,102,104,105,106,107,108,110,111,112,113,115,116,117,118,119,120,121,122,123,124,125,126,127,132,128,129,130,131,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,188,236,174,173,196,195,191,190,192,181,180,194,193,182,96,52,51,185,178,179,176,177,175,183,55,203,204,197,200,199,205,206,198,207,208,172,184,8,9,13,12,2,14,15,16,17,18,19,20,21,3,4,43,25,22,23,24,26,27,28,5,29,30,31,32,6,33,34,35,36,7,41,37,38,39,40,1,42,11,10,601,596,647,600,575,574,566,561,599,595,646,565,434,563,564,562]},"version":"4.4.3"} -------------------------------------------------------------------------------- /dist/users/dto/create-user.dto.d.ts: -------------------------------------------------------------------------------- 1 | export declare class CreateUserDto { 2 | username: string; 3 | password: string; 4 | firstName: string; 5 | lastName: string; 6 | } 7 | -------------------------------------------------------------------------------- /dist/users/dto/create-user.dto.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.CreateUserDto = void 0; 13 | const class_validator_1 = require("class-validator"); 14 | class CreateUserDto { 15 | } 16 | __decorate([ 17 | (0, class_validator_1.IsString)(), 18 | (0, class_validator_1.Length)(5, 10), 19 | __metadata("design:type", String) 20 | ], CreateUserDto.prototype, "username", void 0); 21 | __decorate([ 22 | (0, class_validator_1.IsString)(), 23 | (0, class_validator_1.Length)(6, 12), 24 | __metadata("design:type", String) 25 | ], CreateUserDto.prototype, "password", void 0); 26 | __decorate([ 27 | (0, class_validator_1.IsString)(), 28 | (0, class_validator_1.Length)(5, 10), 29 | __metadata("design:type", String) 30 | ], CreateUserDto.prototype, "firstName", void 0); 31 | __decorate([ 32 | (0, class_validator_1.IsString)(), 33 | (0, class_validator_1.Length)(5, 10), 34 | __metadata("design:type", String) 35 | ], CreateUserDto.prototype, "lastName", void 0); 36 | exports.CreateUserDto = CreateUserDto; 37 | //# sourceMappingURL=create-user.dto.js.map -------------------------------------------------------------------------------- /dist/users/dto/create-user.dto.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"create-user.dto.js","sourceRoot":"","sources":["../../../src/users/dto/create-user.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAmD;AAEnD,MAAa,aAAa;CAgBzB;AAbG;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,CAAC;;+CACG;AAIjB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,CAAC;;+CACG;AAIjB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,CAAC;;gDACG;AAIjB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,CAAC;;+CACG;AAfrB,sCAgBC"} -------------------------------------------------------------------------------- /dist/users/users.controller.d.ts: -------------------------------------------------------------------------------- 1 | import { UsersService } from './users.service'; 2 | export declare class UsersController { 3 | private readonly usersService; 4 | constructor(usersService: UsersService); 5 | } 6 | -------------------------------------------------------------------------------- /dist/users/users.controller.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.UsersController = void 0; 13 | const common_1 = require("@nestjs/common"); 14 | const users_service_1 = require("./users.service"); 15 | let UsersController = class UsersController { 16 | constructor(usersService) { 17 | this.usersService = usersService; 18 | } 19 | }; 20 | UsersController = __decorate([ 21 | (0, common_1.Controller)('users'), 22 | __metadata("design:paramtypes", [users_service_1.UsersService]) 23 | ], UsersController); 24 | exports.UsersController = UsersController; 25 | //# sourceMappingURL=users.controller.js.map -------------------------------------------------------------------------------- /dist/users/users.controller.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"users.controller.js","sourceRoot":"","sources":["../../src/users/users.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAwD;AACxD,mDAA+C;AAG/C,IAAa,eAAe,GAA5B,MAAa,eAAe;IAExB,YAA8B,YAAyB;QAAzB,iBAAY,GAAZ,YAAY,CAAa;IAAI,CAAC;CAE/D,CAAA;AAJY,eAAe;IAD3B,IAAA,mBAAU,EAAC,OAAO,CAAC;qCAG2B,4BAAY;GAF9C,eAAe,CAI3B;AAJY,0CAAe"} -------------------------------------------------------------------------------- /dist/users/users.module.d.ts: -------------------------------------------------------------------------------- 1 | export declare class UsersModule { 2 | } 3 | -------------------------------------------------------------------------------- /dist/users/users.module.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | Object.defineProperty(exports, "__esModule", { value: true }); 9 | exports.UsersModule = void 0; 10 | const common_1 = require("@nestjs/common"); 11 | const prisma_service_1 = require("../prisma/prisma.service"); 12 | const users_controller_1 = require("./users.controller"); 13 | const users_service_1 = require("./users.service"); 14 | let UsersModule = class UsersModule { 15 | }; 16 | UsersModule = __decorate([ 17 | (0, common_1.Module)({ 18 | controllers: [users_controller_1.UsersController], 19 | providers: [users_service_1.UsersService, prisma_service_1.PrismaService], 20 | exports: [users_service_1.UsersService] 21 | }) 22 | ], UsersModule); 23 | exports.UsersModule = UsersModule; 24 | //# sourceMappingURL=users.module.js.map -------------------------------------------------------------------------------- /dist/users/users.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"users.module.js","sourceRoot":"","sources":["../../src/users/users.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AAExC,6DAA0D;AAC1D,yDAAqD;AACrD,mDAA+C;AAO/C,IAAa,WAAW,GAAxB,MAAa,WAAW;CAAG,CAAA;AAAd,WAAW;IALvB,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,kCAAe,CAAC;QAC9B,SAAS,EAAE,CAAC,4BAAY,EAAE,8BAAa,CAAC;QACxC,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG;AAAd,kCAAW"} -------------------------------------------------------------------------------- /dist/users/users.service.d.ts: -------------------------------------------------------------------------------- 1 | import { PrismaService } from 'src/prisma/prisma.service'; 2 | import { User } from '.prisma/client'; 3 | import { CreateUserDto } from './../auth/dto/register-user.dto'; 4 | export declare class UsersService { 5 | private readonly prismaService; 6 | constructor(prismaService: PrismaService); 7 | getUser(username: string): Promise; 8 | createUser(data: CreateUserDto): Promise; 9 | } 10 | -------------------------------------------------------------------------------- /dist/users/users.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.UsersService = void 0; 13 | const common_1 = require("@nestjs/common"); 14 | const prisma_service_1 = require("../prisma/prisma.service"); 15 | const bcrypt = require("bcrypt"); 16 | let UsersService = class UsersService { 17 | constructor(prismaService) { 18 | this.prismaService = prismaService; 19 | } 20 | async getUser(username) { 21 | const user = await this.prismaService.user.findUnique({ 22 | where: { username } 23 | }); 24 | if (!user) { 25 | throw new common_1.NotFoundException(); 26 | } 27 | delete user.password; 28 | return user; 29 | } 30 | async createUser(data) { 31 | const existing = await this.prismaService.user.findUnique({ 32 | where: { 33 | username: data.username 34 | } 35 | }); 36 | if (existing) { 37 | throw new common_1.ConflictException('username already exists'); 38 | } 39 | const hashedPassword = await bcrypt.hash(data.password, 10); 40 | const user = await this.prismaService.user.create({ 41 | data: Object.assign(Object.assign({}, data), { password: hashedPassword }) 42 | }); 43 | delete user.password; 44 | return user; 45 | } 46 | }; 47 | UsersService = __decorate([ 48 | (0, common_1.Injectable)(), 49 | __metadata("design:paramtypes", [prisma_service_1.PrismaService]) 50 | ], UsersService); 51 | exports.UsersService = UsersService; 52 | //# sourceMappingURL=users.service.js.map -------------------------------------------------------------------------------- /dist/users/users.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"users.service.js","sourceRoot":"","sources":["../../src/users/users.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAkF;AAClF,6DAA0D;AAE1D,iCAAiC;AAIjC,IAAa,YAAY,GAAzB,MAAa,YAAY;IAErB,YAA6B,aAA2B;QAA3B,kBAAa,GAAb,aAAa,CAAc;IAAG,CAAC;IAE5D,KAAK,CAAC,OAAO,CAAC,QAAgB;QAE1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;YAClD,KAAK,EAAE,EAAE,QAAQ,EAAE;SACtB,CAAC,CAAC;QAEH,IAAG,CAAC,IAAI,EAAE;YACN,MAAM,IAAI,0BAAiB,EAAE,CAAC;SACjC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC;QACrB,OAAO,IAAI,CAAC;IAEhB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAmB;QAEhC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;YACtD,KAAK,EAAE;gBACH,QAAQ,EAAE,IAAI,CAAC,QAAQ;aAC1B;SACJ,CAAC,CAAC;QAEH,IAAG,QAAQ,EAAE;YACT,MAAM,IAAI,0BAAiB,CAAC,yBAAyB,CAAC,CAAC;SAC1D;QAED,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAE5D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YAC9C,IAAI,kCACG,IAAI,KACP,QAAQ,EAAE,cAAc,GAC3B;SACJ,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,QAAQ,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ,CAAA;AA3CY,YAAY;IADxB,IAAA,mBAAU,GAAE;qCAGkC,8BAAa;GAF/C,YAAY,CA2CxB;AA3CY,oCAAY"} -------------------------------------------------------------------------------- /nest-cli.json: -------------------------------------------------------------------------------- 1 | { 2 | "collection": "@nestjs/schematics", 3 | "sourceRoot": "src" 4 | } 5 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jwt", 3 | "version": "0.0.1", 4 | "description": "", 5 | "author": "", 6 | "private": true, 7 | "license": "UNLICENSED", 8 | "scripts": { 9 | "prebuild": "rimraf dist", 10 | "build": "nest build", 11 | "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", 12 | "start": "nest start", 13 | "start:dev": "nest start --watch", 14 | "start:debug": "nest start --debug --watch", 15 | "start:prod": "node dist/main", 16 | "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", 17 | "test": "jest", 18 | "test:watch": "jest --watch", 19 | "test:cov": "jest --coverage", 20 | "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", 21 | "test:e2e": "jest --config ./test/jest-e2e.json" 22 | }, 23 | "dependencies": { 24 | "@nestjs/common": "^8.0.0", 25 | "@nestjs/config": "^1.0.1", 26 | "@nestjs/core": "^8.0.0", 27 | "@nestjs/jwt": "^8.0.0", 28 | "@nestjs/passport": "^8.0.1", 29 | "@nestjs/platform-express": "^8.0.0", 30 | "@prisma/client": "^3.1.1", 31 | "bcrypt": "^5.0.1", 32 | "class-transformer": "^0.4.0", 33 | "class-validator": "^0.13.1", 34 | "passport": "^0.4.1", 35 | "passport-jwt": "^4.0.0", 36 | "reflect-metadata": "^0.1.13", 37 | "rimraf": "^3.0.2", 38 | "rxjs": "^7.2.0" 39 | }, 40 | "devDependencies": { 41 | "@nestjs/cli": "^8.0.0", 42 | "@nestjs/schematics": "^8.0.0", 43 | "@nestjs/testing": "^8.0.0", 44 | "@types/bcrypt": "^5.0.0", 45 | "@types/express": "^4.17.13", 46 | "@types/jest": "^27.0.1", 47 | "@types/node": "^16.0.0", 48 | "@types/passport-jwt": "^3.0.6", 49 | "@types/supertest": "^2.0.11", 50 | "@typescript-eslint/eslint-plugin": "^4.28.2", 51 | "@typescript-eslint/parser": "^4.28.2", 52 | "eslint": "^7.30.0", 53 | "eslint-config-prettier": "^8.3.0", 54 | "eslint-plugin-prettier": "^3.4.0", 55 | "jest": "^27.0.6", 56 | "prettier": "^2.3.2", 57 | "prisma": "^3.1.1", 58 | "supertest": "^6.1.3", 59 | "ts-jest": "^27.0.3", 60 | "ts-loader": "^9.2.3", 61 | "ts-node": "^10.0.0", 62 | "tsconfig-paths": "^3.10.1", 63 | "typescript": "^4.3.5" 64 | }, 65 | "jest": { 66 | "moduleFileExtensions": [ 67 | "js", 68 | "json", 69 | "ts" 70 | ], 71 | "rootDir": "src", 72 | "testRegex": ".*\\.spec\\.ts$", 73 | "transform": { 74 | "^.+\\.(t|j)s$": "ts-jest" 75 | }, 76 | "collectCoverageFrom": [ 77 | "**/*.(t|j)s" 78 | ], 79 | "coverageDirectory": "../coverage", 80 | "testEnvironment": "node" 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /prisma/migrations/20210928064342_users/migration.sql: -------------------------------------------------------------------------------- 1 | -- CreateTable 2 | CREATE TABLE `User` ( 3 | `username` VARCHAR(191) NOT NULL, 4 | `password` VARCHAR(191) NOT NULL, 5 | `firstName` VARCHAR(191) NOT NULL, 6 | `lastName` VARCHAR(191) NOT NULL, 7 | 8 | PRIMARY KEY (`username`) 9 | ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 10 | -------------------------------------------------------------------------------- /prisma/migrations/migration_lock.toml: -------------------------------------------------------------------------------- 1 | # Please do not edit this file manually 2 | # It should be added in your version-control system (i.e. Git) 3 | provider = "mysql" -------------------------------------------------------------------------------- /prisma/schema.prisma: -------------------------------------------------------------------------------- 1 | datasource db { 2 | provider = "mysql" 3 | url = env("DATABASE_URL") 4 | } 5 | 6 | generator client { 7 | provider = "prisma-client-js" 8 | } 9 | 10 | model User { 11 | username String @id 12 | password String 13 | firstName String 14 | lastName String 15 | } -------------------------------------------------------------------------------- /src/app.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { UsersModule } from './users/users.module'; 3 | import { PrismaModule } from './prisma/prisma.module'; 4 | import { AuthModule } from './auth/auth.module'; 5 | 6 | @Module({ 7 | imports: [UsersModule, PrismaModule, AuthModule], 8 | controllers: [], 9 | providers: [], 10 | }) 11 | export class AppModule {} 12 | -------------------------------------------------------------------------------- /src/auth/auth.controller.ts: -------------------------------------------------------------------------------- 1 | import { Controller, Post, Body, Get, UseGuards } from '@nestjs/common'; 2 | import { AuthService } from './auth.service'; 3 | import { LoginDto } from './dto/login-user.dto'; 4 | import { AuthResponse } from './dto/auth-response.dto'; 5 | import AuthUser from 'src/common/decorators/auth-user.decorator'; 6 | import { User } from '.prisma/client'; 7 | import { AuthGuard } from '@nestjs/passport'; 8 | import { CreateUserDto } from './dto/register-user.dto'; 9 | 10 | @Controller('auth') 11 | export class AuthController { 12 | 13 | constructor(private readonly authService:AuthService) { } 14 | 15 | @Post('/login') 16 | login(@Body() loginDto:LoginDto): Promise { 17 | return this.authService.login(loginDto); 18 | } 19 | 20 | @Post('/register') 21 | register(@Body() createUserDto:CreateUserDto): Promise { 22 | return this.authService.register(createUserDto); 23 | } 24 | 25 | @UseGuards(AuthGuard('jwt')) 26 | @Get('/profile') 27 | getLoggedUser(@AuthUser() user: User): User { 28 | return user; 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/auth/auth.guard.ts: -------------------------------------------------------------------------------- 1 | import { CanActivate, ExecutionContext, Injectable, UnauthorizedException } from '@nestjs/common'; 2 | import { Observable } from 'rxjs'; 3 | 4 | @Injectable() 5 | export class AuthGuard implements CanActivate { 6 | canActivate( 7 | context: ExecutionContext, 8 | ): boolean | Promise | Observable { 9 | 10 | const req: Request= context.switchToHttp().getRequest(); 11 | const token = req.headers['authorization']; 12 | 13 | if(!token) { 14 | throw new UnauthorizedException('token not found'); 15 | } 16 | 17 | if(token !== 'MY_AUTH_TOKEN') { 18 | throw new UnauthorizedException('invalid token'); 19 | } 20 | return true; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/auth/auth.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { AuthService } from './auth.service'; 3 | import { PassportModule } from '@nestjs/passport'; 4 | import { JwtModule } from '@nestjs/jwt'; 5 | import { PrismaService } from 'src/prisma/prisma.service'; 6 | import { AuthController } from './auth.controller'; 7 | import { JwtStrategy } from './jwt.strategy'; 8 | import { UsersModule } from 'src/users/users.module'; 9 | 10 | @Module({ 11 | imports: [ 12 | UsersModule, 13 | PassportModule, 14 | JwtModule.register({ 15 | secret: process.env.JWT_SECRET, 16 | signOptions: { 17 | expiresIn: '1h' 18 | } 19 | }) 20 | ], 21 | providers: [AuthService, PrismaService, JwtStrategy], 22 | controllers: [AuthController] 23 | }) 24 | export class AuthModule {} 25 | -------------------------------------------------------------------------------- /src/auth/auth.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable, NotFoundException, UnauthorizedException } from '@nestjs/common'; 2 | import { PrismaService } from 'src/prisma/prisma.service'; 3 | import { LoginDto } from './dto/login-user.dto'; 4 | import { JwtService } from '@nestjs/jwt'; 5 | import * as bcrypt from 'bcrypt'; 6 | import { AuthResponse } from './dto/auth-response.dto'; 7 | import { CreateUserDto } from './dto/register-user.dto'; 8 | import { UsersService } from 'src/users/users.service'; 9 | 10 | 11 | @Injectable() 12 | export class AuthService { 13 | 14 | constructor(private readonly prismaService: PrismaService, private jwtService: JwtService, private readonly usersService: UsersService) { } 15 | 16 | async login(loginDto:LoginDto): Promise { 17 | const { username, password } = loginDto; 18 | 19 | const user = await this.prismaService.user.findUnique({ 20 | where: { username } 21 | }); 22 | 23 | if(!user) { 24 | throw new NotFoundException('user not found'); 25 | } 26 | 27 | const validatePassword = await bcrypt.compare(password, user.password); 28 | 29 | if (!validatePassword) { 30 | throw new UnauthorizedException('invalid password'); 31 | } 32 | 33 | return { 34 | token: this.jwtService.sign({ 35 | username 36 | }), 37 | user 38 | } 39 | } 40 | 41 | async register(createUserDto: CreateUserDto): Promise { 42 | const user = await this.usersService.createUser(createUserDto); 43 | return { 44 | token: this.jwtService.sign({ username: user.username }), 45 | user 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/auth/dto/auth-response.dto.ts: -------------------------------------------------------------------------------- 1 | import { User } from ".prisma/client"; 2 | 3 | export class AuthResponse { 4 | token: string; 5 | user: User 6 | } -------------------------------------------------------------------------------- /src/auth/dto/login-user.dto.ts: -------------------------------------------------------------------------------- 1 | import { IsString, Length } from "class-validator"; 2 | 3 | export class LoginDto { 4 | @IsString() 5 | @Length(5, 10) 6 | username: string; 7 | 8 | @IsString() 9 | @Length(6, 12) 10 | password: string; 11 | } -------------------------------------------------------------------------------- /src/auth/dto/register-user.dto.ts: -------------------------------------------------------------------------------- 1 | import { IsString, Length } from 'class-validator'; 2 | 3 | export class CreateUserDto { 4 | @IsString() 5 | @Length(5, 10) 6 | username: string; 7 | 8 | @IsString() 9 | @Length(6, 12) 10 | password: string; 11 | 12 | @IsString() 13 | @Length(5, 10) 14 | firstName: string; 15 | 16 | @IsString() 17 | @Length(5, 10) 18 | lastName: string; 19 | } -------------------------------------------------------------------------------- /src/auth/jwt.strategy.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@nestjs/common"; 2 | import { PassportStrategy } from "@nestjs/passport"; 3 | import { Strategy, ExtractJwt } from "passport-jwt"; 4 | import { PrismaService } from "src/prisma/prisma.service"; 5 | import { userInfo } from "os"; 6 | 7 | @Injectable() 8 | export class JwtStrategy extends PassportStrategy(Strategy) { 9 | 10 | constructor (private readonly prismaService:PrismaService) { 11 | super({ 12 | jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), 13 | ignoreExpiration: false, 14 | secretOrKey: process.env.JWT_SECRET 15 | }); 16 | } 17 | 18 | async validate(payload: { username:string }) { 19 | const user = await this.prismaService.user.findUnique({ 20 | where: { 21 | username: payload.username 22 | } 23 | }) 24 | 25 | return user; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /src/common/decorators/auth-user.decorator.ts: -------------------------------------------------------------------------------- 1 | import { createParamDecorator, ExecutionContext } from "@nestjs/common"; 2 | import { User } from ".prisma/client"; 3 | 4 | const AuthUser = createParamDecorator((_, ctx: ExecutionContext)=>{ 5 | const request = ctx.switchToHttp().getRequest(); 6 | const user = request.user as User; 7 | delete user.password; 8 | return user; 9 | }) 10 | 11 | export default AuthUser; -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { NestFactory } from '@nestjs/core'; 2 | import { AppModule } from './app.module'; 3 | import { ValidationPipe } from '@nestjs/common'; 4 | 5 | async function bootstrap() { 6 | const app = await NestFactory.create(AppModule); 7 | 8 | app.useGlobalPipes( 9 | new ValidationPipe({ 10 | transform:true, 11 | whitelist: true, 12 | forbidNonWhitelisted: true 13 | }) 14 | ) 15 | await app.listen(3000); 16 | } 17 | bootstrap(); 18 | -------------------------------------------------------------------------------- /src/prisma/prisma.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { PrismaService } from './prisma.service'; 3 | 4 | @Module({ 5 | providers: [PrismaService] 6 | }) 7 | export class PrismaModule {} 8 | -------------------------------------------------------------------------------- /src/prisma/prisma.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common'; 2 | import { PrismaClient } from '@prisma/client'; 3 | 4 | @Injectable() 5 | export class PrismaService 6 | extends PrismaClient 7 | implements OnModuleInit, OnModuleDestroy { 8 | constructor() { 9 | super(); 10 | } 11 | 12 | async onModuleInit() { 13 | await this.$connect(); 14 | } 15 | 16 | async onModuleDestroy() { 17 | await this.$disconnect(); 18 | } 19 | } -------------------------------------------------------------------------------- /src/users/users.controller.ts: -------------------------------------------------------------------------------- 1 | import { Controller, Post, Body } from '@nestjs/common'; 2 | import { UsersService } from './users.service'; 3 | 4 | @Controller('users') 5 | export class UsersController { 6 | 7 | constructor (private readonly usersService:UsersService) { } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/users/users.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | 3 | import { PrismaService } from 'src/prisma/prisma.service'; 4 | import { UsersController } from './users.controller'; 5 | import { UsersService } from './users.service'; 6 | 7 | @Module({ 8 | controllers: [UsersController], 9 | providers: [UsersService, PrismaService], 10 | exports: [UsersService] 11 | }) 12 | export class UsersModule {} 13 | -------------------------------------------------------------------------------- /src/users/users.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable, NotFoundException, ConflictException } from '@nestjs/common'; 2 | import { PrismaService } from 'src/prisma/prisma.service'; 3 | import { User } from '.prisma/client'; 4 | import * as bcrypt from 'bcrypt'; 5 | import { CreateUserDto } from './../auth/dto/register-user.dto'; 6 | 7 | @Injectable() 8 | export class UsersService { 9 | 10 | constructor(private readonly prismaService:PrismaService) {} 11 | 12 | async getUser(username: string): Promise { 13 | 14 | const user = await this.prismaService.user.findUnique({ 15 | where: { username } 16 | }); 17 | 18 | if(!user) { 19 | throw new NotFoundException(); 20 | } 21 | 22 | delete user.password; 23 | return user; 24 | 25 | } 26 | 27 | async createUser(data: CreateUserDto): Promise { 28 | 29 | const existing = await this.prismaService.user.findUnique({ 30 | where: { 31 | username: data.username 32 | } 33 | }); 34 | 35 | if(existing) { 36 | throw new ConflictException('username already exists'); 37 | } 38 | 39 | const hashedPassword = await bcrypt.hash(data.password, 10); 40 | 41 | const user = await this.prismaService.user.create({ 42 | data: { 43 | ...data, 44 | password: hashedPassword 45 | } 46 | }); 47 | 48 | delete user.password; 49 | return user; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /test/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { INestApplication } from '@nestjs/common'; 3 | import * as request from 'supertest'; 4 | import { AppModule } from './../src/app.module'; 5 | 6 | describe('AppController (e2e)', () => { 7 | let app: INestApplication; 8 | 9 | beforeEach(async () => { 10 | const moduleFixture: TestingModule = await Test.createTestingModule({ 11 | imports: [AppModule], 12 | }).compile(); 13 | 14 | app = moduleFixture.createNestApplication(); 15 | await app.init(); 16 | }); 17 | 18 | it('/ (GET)', () => { 19 | return request(app.getHttpServer()) 20 | .get('/') 21 | .expect(200) 22 | .expect('Hello World!'); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /test/jest-e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "moduleFileExtensions": ["js", "json", "ts"], 3 | "rootDir": ".", 4 | "testEnvironment": "node", 5 | "testRegex": ".e2e-spec.ts$", 6 | "transform": { 7 | "^.+\\.(t|j)s$": "ts-jest" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "declaration": true, 5 | "removeComments": true, 6 | "emitDecoratorMetadata": true, 7 | "experimentalDecorators": true, 8 | "allowSyntheticDefaultImports": true, 9 | "target": "es2017", 10 | "sourceMap": true, 11 | "outDir": "./dist", 12 | "baseUrl": "./", 13 | "incremental": true, 14 | "skipLibCheck": true, 15 | "strictNullChecks": false, 16 | "noImplicitAny": false, 17 | "strictBindCallApply": false, 18 | "forceConsistentCasingInFileNames": false, 19 | "noFallthroughCasesInSwitch": false 20 | } 21 | } 22 | --------------------------------------------------------------------------------