From d69bed00a272025b8112848edbd5fb01d73e9e6b Mon Sep 17 00:00:00 2001 From: Stefan Hardegger Date: Wed, 23 Jul 2025 12:28:48 +0200 Subject: [PATCH] MVP Version --- .../com/storycove/StoryCoveApplication.java | 2 + .../controller/AuthorController.java | 275 +++++++++- .../storycove/controller/StoryController.java | 78 ++- .../java/com/storycove/dto/AuthorDto.java | 9 + .../com/storycove/dto/AuthorSearchDto.java | 58 +++ .../repository/AuthorRepository.java | 3 + .../storycove/repository/StoryRepository.java | 6 + .../scheduled/TypesenseIndexScheduler.java | 84 ++++ .../service/AuthorIndexScheduler.java | 49 ++ .../com/storycove/service/AuthorService.java | 145 +++++- .../com/storycove/service/StoryService.java | 32 +- .../storycove/service/TypesenseService.java | 469 +++++++++++++++++- backend/src/main/resources/application.yml | 2 + frontend/src/app/add-story/page.tsx | 1 + frontend/src/app/authors/[id]/page.tsx | 23 + frontend/src/app/authors/page.tsx | 459 ++++++++++++----- frontend/src/app/library/page.tsx | 2 +- frontend/src/app/settings/page.tsx | 183 +++++++ frontend/src/app/stories/[id]/edit/page.tsx | 6 +- frontend/src/lib/api.ts | 45 ++ frontend/src/types/api.ts | 1 + frontend/tsconfig.tsbuildinfo | 2 +- 22 files changed, 1781 insertions(+), 153 deletions(-) create mode 100644 backend/src/main/java/com/storycove/dto/AuthorSearchDto.java create mode 100644 backend/src/main/java/com/storycove/scheduled/TypesenseIndexScheduler.java create mode 100644 backend/src/main/java/com/storycove/service/AuthorIndexScheduler.java diff --git a/backend/src/main/java/com/storycove/StoryCoveApplication.java b/backend/src/main/java/com/storycove/StoryCoveApplication.java index 0ce5fa4..c441c93 100644 --- a/backend/src/main/java/com/storycove/StoryCoveApplication.java +++ b/backend/src/main/java/com/storycove/StoryCoveApplication.java @@ -2,8 +2,10 @@ package com.storycove; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication +@EnableScheduling public class StoryCoveApplication { public static void main(String[] args) { diff --git a/backend/src/main/java/com/storycove/controller/AuthorController.java b/backend/src/main/java/com/storycove/controller/AuthorController.java index e93376e..29c63d2 100644 --- a/backend/src/main/java/com/storycove/controller/AuthorController.java +++ b/backend/src/main/java/com/storycove/controller/AuthorController.java @@ -1,10 +1,16 @@ package com.storycove.controller; import com.storycove.dto.AuthorDto; +import com.storycove.dto.AuthorSearchDto; +import com.storycove.dto.SearchResultDto; import com.storycove.entity.Author; import com.storycove.service.AuthorService; import com.storycove.service.ImageService; +import com.storycove.service.TypesenseService; +import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -14,6 +20,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.UUID; @@ -23,12 +30,16 @@ import java.util.stream.Collectors; @RequestMapping("/api/authors") public class AuthorController { + private static final Logger logger = LoggerFactory.getLogger(AuthorController.class); + private final AuthorService authorService; private final ImageService imageService; + private final TypesenseService typesenseService; - public AuthorController(AuthorService authorService, ImageService imageService) { + public AuthorController(AuthorService authorService, ImageService imageService, TypesenseService typesenseService) { this.authorService = authorService; this.imageService = imageService; + this.typesenseService = typesenseService; } @GetMapping @@ -63,9 +74,65 @@ public class AuthorController { return ResponseEntity.status(HttpStatus.CREATED).body(convertToDto(savedAuthor)); } - @PutMapping("/{id}") - public ResponseEntity updateAuthor(@PathVariable UUID id, - @Valid @RequestBody UpdateAuthorRequest request) { + @PutMapping(value = "/{id}", consumes = "multipart/form-data") + public ResponseEntity updateAuthorMultipart( + @PathVariable UUID id, + @RequestParam(required = false) String name, + @RequestParam(required = false) String notes, + @RequestParam(required = false) List urls, + @RequestParam(required = false, name = "authorRating") Integer rating, + @RequestParam(required = false, name = "avatar") MultipartFile avatarFile) { + + System.out.println("DEBUG: MULTIPART PUT called with:"); + System.out.println(" - name: " + name); + System.out.println(" - notes: " + notes); + System.out.println(" - urls: " + urls); + System.out.println(" - rating: " + rating); + System.out.println(" - avatar: " + (avatarFile != null ? avatarFile.getOriginalFilename() : "null")); + + try { + Author existingAuthor = authorService.findById(id); + + // Update basic fields + if (name != null && !name.trim().isEmpty()) { + existingAuthor.setName(name.trim()); + } + if (notes != null) { + existingAuthor.setNotes(notes); + } + if (urls != null) { + existingAuthor.setUrls(urls); + } + + // Handle rating update + if (rating != null) { + System.out.println("DEBUG: Setting author rating via PUT: " + rating); + existingAuthor.setAuthorRating(rating); + } + + // Handle avatar upload if provided + if (avatarFile != null && !avatarFile.isEmpty()) { + String imagePath = imageService.uploadImage(avatarFile, ImageService.ImageType.AVATAR); + existingAuthor.setAvatarImagePath(imagePath); + } + + Author updatedAuthor = authorService.update(id, existingAuthor); + return ResponseEntity.ok(convertToDto(updatedAuthor)); + + } catch (Exception e) { + return ResponseEntity.badRequest().body(null); + } + } + + @PutMapping(value = "/{id}", consumes = "application/json") + public ResponseEntity updateAuthorJson(@PathVariable UUID id, + @Valid @RequestBody UpdateAuthorRequest request) { + System.out.println("DEBUG: JSON PUT called with:"); + System.out.println(" - name: " + request.getName()); + System.out.println(" - notes: " + request.getNotes()); + System.out.println(" - urls: " + request.getUrls()); + System.out.println(" - rating: " + request.getRating()); + Author existingAuthor = authorService.findById(id); updateAuthorFromRequest(existingAuthor, request); @@ -73,6 +140,15 @@ public class AuthorController { return ResponseEntity.ok(convertToDto(updatedAuthor)); } + @PutMapping("/{id}") + public ResponseEntity updateAuthorGeneric(@PathVariable UUID id, HttpServletRequest request) { + System.out.println("DEBUG: GENERIC PUT called!"); + System.out.println(" - Content-Type: " + request.getContentType()); + System.out.println(" - Method: " + request.getMethod()); + + return ResponseEntity.status(415).body("Unsupported Media Type. Expected multipart/form-data or application/json"); + } + @DeleteMapping("/{id}") public ResponseEntity deleteAuthor(@PathVariable UUID id) { authorService.delete(id); @@ -103,8 +179,79 @@ public class AuthorController { @PostMapping("/{id}/rating") public ResponseEntity rateAuthor(@PathVariable UUID id, @RequestBody RatingRequest request) { + System.out.println("DEBUG: Rating author " + id + " with rating " + request.getRating()); Author author = authorService.setRating(id, request.getRating()); - return ResponseEntity.ok(convertToDto(author)); + System.out.println("DEBUG: After setRating, author rating is: " + author.getAuthorRating()); + AuthorDto dto = convertToDto(author); + System.out.println("DEBUG: Final DTO rating is: " + dto.getAuthorRating()); + return ResponseEntity.ok(dto); + } + + @GetMapping("/{id}/debug") + public ResponseEntity> debugAuthor(@PathVariable UUID id) { + Author author = authorService.findById(id); + Integer directDbRating = null; + String dbError = null; + + try { + directDbRating = authorService.getAuthorRatingFromDb(id); + } catch (Exception e) { + dbError = e.getMessage(); + } + + Map debug = Map.of( + "authorId", author.getId(), + "authorName", author.getName(), + "authorRating_entity", author.getAuthorRating(), + "authorRating_direct_db", directDbRating, + "db_error", dbError, + "toString", author.toString() + ); + return ResponseEntity.ok(debug); + } + + @PostMapping("/{id}/test-rating/{rating}") + public ResponseEntity> testSetRating(@PathVariable UUID id, @PathVariable Integer rating) { + try { + System.out.println("DEBUG: Test setting rating " + rating + " for author " + id); + Author author = authorService.setRating(id, rating); + System.out.println("DEBUG: After test setRating, got: " + author.getAuthorRating()); + + return ResponseEntity.ok(Map.of( + "success", true, + "authorRating", author.getAuthorRating(), + "message", "Rating set successfully" + )); + } catch (Exception e) { + return ResponseEntity.ok(Map.of( + "success", false, + "error", e.getMessage() + )); + } + } + + @PostMapping("/{id}/test-put-rating") + public ResponseEntity> testPutWithRating(@PathVariable UUID id, @RequestParam Integer rating) { + try { + System.out.println("DEBUG: Test PUT with rating " + rating + " for author " + id); + + Author existingAuthor = authorService.findById(id); + existingAuthor.setAuthorRating(rating); + Author updatedAuthor = authorService.update(id, existingAuthor); + + System.out.println("DEBUG: After PUT update, rating is: " + updatedAuthor.getAuthorRating()); + + return ResponseEntity.ok(Map.of( + "success", true, + "authorRating", updatedAuthor.getAuthorRating(), + "message", "Rating updated via PUT successfully" + )); + } catch (Exception e) { + return ResponseEntity.ok(Map.of( + "success", false, + "error", e.getMessage() + )); + } } @GetMapping("/search") @@ -120,6 +267,91 @@ public class AuthorController { return ResponseEntity.ok(authorDtos); } + @GetMapping("/search-typesense") + public ResponseEntity> searchAuthorsTypesense( + @RequestParam(defaultValue = "*") String q, + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "20") int size, + @RequestParam(defaultValue = "name") String sortBy, + @RequestParam(defaultValue = "asc") String sortOrder) { + + SearchResultDto searchResults = typesenseService.searchAuthors(q, page, size, sortBy, sortOrder); + + // Convert AuthorSearchDto results to AuthorDto + SearchResultDto results = new SearchResultDto<>(); + results.setQuery(searchResults.getQuery()); + results.setPage(searchResults.getPage()); + results.setPerPage(searchResults.getPerPage()); + results.setTotalHits(searchResults.getTotalHits()); + results.setSearchTimeMs(searchResults.getSearchTimeMs()); + + // Handle null results gracefully + List authorDtos = searchResults.getResults() != null + ? searchResults.getResults().stream() + .map(this::convertSearchDtoToDto) + .collect(Collectors.toList()) + : new ArrayList<>(); + results.setResults(authorDtos); + + return ResponseEntity.ok(results); + } + + @PostMapping("/reindex-typesense") + public ResponseEntity> reindexAuthorsTypesense() { + try { + List allAuthors = authorService.findAllWithStories(); + typesenseService.reindexAllAuthors(allAuthors); + return ResponseEntity.ok(Map.of( + "success", true, + "message", "Reindexed " + allAuthors.size() + " authors", + "count", allAuthors.size() + )); + } catch (Exception e) { + logger.error("Failed to reindex authors", e); + return ResponseEntity.ok(Map.of( + "success", false, + "error", e.getMessage() + )); + } + } + + @PostMapping("/recreate-typesense-collection") + public ResponseEntity> recreateAuthorsCollection() { + try { + // This will delete the existing collection and recreate it with correct schema + List allAuthors = authorService.findAllWithStories(); + typesenseService.reindexAllAuthors(allAuthors); + return ResponseEntity.ok(Map.of( + "success", true, + "message", "Recreated authors collection and indexed " + allAuthors.size() + " authors", + "count", allAuthors.size() + )); + } catch (Exception e) { + logger.error("Failed to recreate authors collection", e); + return ResponseEntity.ok(Map.of( + "success", false, + "error", e.getMessage() + )); + } + } + + @GetMapping("/typesense-schema") + public ResponseEntity> getAuthorsTypesenseSchema() { + try { + Map schema = typesenseService.getAuthorsCollectionSchema(); + return ResponseEntity.ok(Map.of( + "success", true, + "schema", schema + )); + } catch (Exception e) { + logger.error("Failed to get authors schema", e); + return ResponseEntity.ok(Map.of( + "success", false, + "error", e.getMessage() + )); + } + } + @GetMapping("/top-rated") public ResponseEntity> getTopRatedAuthors(@RequestParam(defaultValue = "10") int limit) { Pageable pageable = PageRequest.of(0, limit); @@ -158,6 +390,10 @@ public class AuthorController { if (updateReq.getUrls() != null) { author.setUrls(updateReq.getUrls()); } + if (updateReq.getRating() != null) { + System.out.println("DEBUG: Setting author rating via JSON: " + updateReq.getRating()); + author.setAuthorRating(updateReq.getRating()); + } } } @@ -167,12 +403,38 @@ public class AuthorController { dto.setName(author.getName()); dto.setNotes(author.getNotes()); dto.setAvatarImagePath(author.getAvatarImagePath()); + + // Debug logging for author rating + System.out.println("DEBUG: Converting author " + author.getName() + + " with rating: " + author.getAuthorRating()); + dto.setAuthorRating(author.getAuthorRating()); dto.setUrls(author.getUrls()); dto.setStoryCount(author.getStories() != null ? author.getStories().size() : 0); dto.setCreatedAt(author.getCreatedAt()); dto.setUpdatedAt(author.getUpdatedAt()); + // Calculate and set average story rating + dto.setAverageStoryRating(authorService.calculateAverageStoryRating(author.getId())); + + System.out.println("DEBUG: DTO authorRating set to: " + dto.getAuthorRating()); + + return dto; + } + + private AuthorDto convertSearchDtoToDto(AuthorSearchDto searchDto) { + AuthorDto dto = new AuthorDto(); + dto.setId(searchDto.getId()); + dto.setName(searchDto.getName()); + dto.setNotes(searchDto.getNotes()); + dto.setAuthorRating(searchDto.getAuthorRating()); + dto.setAverageStoryRating(searchDto.getAverageStoryRating()); + dto.setStoryCount(searchDto.getStoryCount()); + dto.setUrls(searchDto.getUrls()); + dto.setAvatarImagePath(searchDto.getAvatarImagePath()); + dto.setCreatedAt(searchDto.getCreatedAt()); + dto.setUpdatedAt(searchDto.getUpdatedAt()); + return dto; } @@ -195,6 +457,7 @@ public class AuthorController { private String name; private String notes; private List urls; + private Integer rating; // Getters and setters public String getName() { return name; } @@ -203,6 +466,8 @@ public class AuthorController { public void setNotes(String notes) { this.notes = notes; } public List getUrls() { return urls; } public void setUrls(List urls) { this.urls = urls; } + public Integer getRating() { return rating; } + public void setRating(Integer rating) { this.rating = rating; } } public static class RatingRequest { diff --git a/backend/src/main/java/com/storycove/controller/StoryController.java b/backend/src/main/java/com/storycove/controller/StoryController.java index 71f45ae..f908537 100644 --- a/backend/src/main/java/com/storycove/controller/StoryController.java +++ b/backend/src/main/java/com/storycove/controller/StoryController.java @@ -10,6 +10,8 @@ import com.storycove.dto.SearchResultDto; import com.storycove.dto.StorySearchDto; import com.storycove.service.*; import jakarta.validation.Valid; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -32,6 +34,8 @@ import java.util.stream.Collectors; @RequestMapping("/api/stories") public class StoryController { + private static final Logger logger = LoggerFactory.getLogger(StoryController.class); + private final StoryService storyService; private final AuthorService authorService; private final SeriesService seriesService; @@ -141,6 +145,60 @@ public class StoryController { return ResponseEntity.ok(convertToDto(story)); } + @PostMapping("/reindex") + public ResponseEntity manualReindex() { + if (typesenseService == null) { + return ResponseEntity.ok("Typesense is not enabled, no reindexing performed"); + } + + try { + List allStories = storyService.findAllWithAssociations(); + typesenseService.reindexAllStories(allStories); + return ResponseEntity.ok("Successfully reindexed " + allStories.size() + " stories"); + } catch (Exception e) { + return ResponseEntity.status(500).body("Failed to reindex stories: " + e.getMessage()); + } + } + + @PostMapping("/reindex-typesense") + public ResponseEntity> reindexStoriesTypesense() { + try { + List allStories = storyService.findAllWithAssociations(); + typesenseService.reindexAllStories(allStories); + return ResponseEntity.ok(Map.of( + "success", true, + "message", "Reindexed " + allStories.size() + " stories", + "count", allStories.size() + )); + } catch (Exception e) { + logger.error("Failed to reindex stories", e); + return ResponseEntity.ok(Map.of( + "success", false, + "error", e.getMessage() + )); + } + } + + @PostMapping("/recreate-typesense-collection") + public ResponseEntity> recreateStoriesCollection() { + try { + // This will delete the existing collection and recreate it with correct schema + List allStories = storyService.findAllWithAssociations(); + typesenseService.reindexAllStories(allStories); + return ResponseEntity.ok(Map.of( + "success", true, + "message", "Recreated stories collection and indexed " + allStories.size() + " stories", + "count", allStories.size() + )); + } catch (Exception e) { + logger.error("Failed to recreate stories collection", e); + return ResponseEntity.ok(Map.of( + "success", false, + "error", e.getMessage() + )); + } + } + @GetMapping("/search") public ResponseEntity> searchStories( @RequestParam String query, @@ -149,11 +207,13 @@ public class StoryController { @RequestParam(required = false) List authors, @RequestParam(required = false) List tags, @RequestParam(required = false) Integer minRating, - @RequestParam(required = false) Integer maxRating) { + @RequestParam(required = false) Integer maxRating, + @RequestParam(required = false) String sortBy, + @RequestParam(required = false) String sortDir) { if (typesenseService != null) { SearchResultDto results = typesenseService.searchStories( - query, page, size, authors, tags, minRating, maxRating); + query, page, size, authors, tags, minRating, maxRating, sortBy, sortDir); return ResponseEntity.ok(results); } else { // Fallback to basic search if Typesense is not available @@ -256,9 +316,13 @@ public class StoryController { story.setAuthor(author); } + // Handle series - either by ID or by name if (createReq.getSeriesId() != null) { Series series = seriesService.findById(createReq.getSeriesId()); story.setSeries(series); + } else if (createReq.getSeriesName() != null && !createReq.getSeriesName().trim().isEmpty()) { + Series series = seriesService.findOrCreate(createReq.getSeriesName().trim()); + story.setSeries(series); } // Handle tags @@ -298,9 +362,13 @@ public class StoryController { Author author = authorService.findById(updateReq.getAuthorId()); story.setAuthor(author); } + // Handle series - either by ID or by name if (updateReq.getSeriesId() != null) { Series series = seriesService.findById(updateReq.getSeriesId()); story.setSeries(series); + } else if (updateReq.getSeriesName() != null && !updateReq.getSeriesName().trim().isEmpty()) { + Series series = seriesService.findOrCreate(updateReq.getSeriesName().trim()); + story.setSeries(series); } // Note: Tags are now handled in StoryService.updateWithTagNames() @@ -360,6 +428,7 @@ public class StoryController { private UUID authorId; private String authorName; private UUID seriesId; + private String seriesName; private List tagNames; // Getters and setters @@ -381,6 +450,8 @@ public class StoryController { public void setAuthorName(String authorName) { this.authorName = authorName; } public UUID getSeriesId() { return seriesId; } public void setSeriesId(UUID seriesId) { this.seriesId = seriesId; } + public String getSeriesName() { return seriesName; } + public void setSeriesName(String seriesName) { this.seriesName = seriesName; } public List getTagNames() { return tagNames; } public void setTagNames(List tagNames) { this.tagNames = tagNames; } } @@ -394,6 +465,7 @@ public class StoryController { private Integer volume; private UUID authorId; private UUID seriesId; + private String seriesName; private List tagNames; // Getters and setters @@ -413,6 +485,8 @@ public class StoryController { public void setAuthorId(UUID authorId) { this.authorId = authorId; } public UUID getSeriesId() { return seriesId; } public void setSeriesId(UUID seriesId) { this.seriesId = seriesId; } + public String getSeriesName() { return seriesName; } + public void setSeriesName(String seriesName) { this.seriesName = seriesName; } public List getTagNames() { return tagNames; } public void setTagNames(List tagNames) { this.tagNames = tagNames; } } diff --git a/backend/src/main/java/com/storycove/dto/AuthorDto.java b/backend/src/main/java/com/storycove/dto/AuthorDto.java index 39b05c8..aa5fd9d 100644 --- a/backend/src/main/java/com/storycove/dto/AuthorDto.java +++ b/backend/src/main/java/com/storycove/dto/AuthorDto.java @@ -19,6 +19,7 @@ public class AuthorDto { private String avatarImagePath; private Integer authorRating; + private Double averageStoryRating; private List urls; private Integer storyCount; private LocalDateTime createdAt; @@ -71,6 +72,14 @@ public class AuthorDto { this.authorRating = authorRating; } + public Double getAverageStoryRating() { + return averageStoryRating; + } + + public void setAverageStoryRating(Double averageStoryRating) { + this.averageStoryRating = averageStoryRating; + } + public List getUrls() { return urls; } diff --git a/backend/src/main/java/com/storycove/dto/AuthorSearchDto.java b/backend/src/main/java/com/storycove/dto/AuthorSearchDto.java new file mode 100644 index 0000000..7657e69 --- /dev/null +++ b/backend/src/main/java/com/storycove/dto/AuthorSearchDto.java @@ -0,0 +1,58 @@ +package com.storycove.dto; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.UUID; + +public class AuthorSearchDto { + + private UUID id; + private String name; + private String notes; + private Integer authorRating; + private Double averageStoryRating; + private Integer storyCount; + private List urls; + private String avatarImagePath; + private LocalDateTime createdAt; + private LocalDateTime updatedAt; + + // Search-specific fields + private Long searchScore; + + public AuthorSearchDto() {} + + // Getters and Setters + public UUID getId() { return id; } + public void setId(UUID id) { this.id = id; } + + public String getName() { return name; } + public void setName(String name) { this.name = name; } + + public String getNotes() { return notes; } + public void setNotes(String notes) { this.notes = notes; } + + public Integer getAuthorRating() { return authorRating; } + public void setAuthorRating(Integer authorRating) { this.authorRating = authorRating; } + + public Double getAverageStoryRating() { return averageStoryRating; } + public void setAverageStoryRating(Double averageStoryRating) { this.averageStoryRating = averageStoryRating; } + + public Integer getStoryCount() { return storyCount; } + public void setStoryCount(Integer storyCount) { this.storyCount = storyCount; } + + public List getUrls() { return urls; } + public void setUrls(List urls) { this.urls = urls; } + + public String getAvatarImagePath() { return avatarImagePath; } + public void setAvatarImagePath(String avatarImagePath) { this.avatarImagePath = avatarImagePath; } + + public LocalDateTime getCreatedAt() { return createdAt; } + public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; } + + public LocalDateTime getUpdatedAt() { return updatedAt; } + public void setUpdatedAt(LocalDateTime updatedAt) { this.updatedAt = updatedAt; } + + public Long getSearchScore() { return searchScore; } + public void setSearchScore(Long searchScore) { this.searchScore = searchScore; } +} \ No newline at end of file diff --git a/backend/src/main/java/com/storycove/repository/AuthorRepository.java b/backend/src/main/java/com/storycove/repository/AuthorRepository.java index d7ff1b8..e798cfb 100644 --- a/backend/src/main/java/com/storycove/repository/AuthorRepository.java +++ b/backend/src/main/java/com/storycove/repository/AuthorRepository.java @@ -49,4 +49,7 @@ public interface AuthorRepository extends JpaRepository { @Query("SELECT COUNT(a) FROM Author a WHERE a.createdAt >= :cutoffDate") long countRecentAuthors(@Param("cutoffDate") java.time.LocalDateTime cutoffDate); + + @Query(value = "SELECT author_rating FROM authors WHERE id = :id", nativeQuery = true) + Integer findAuthorRatingById(@Param("id") UUID id); } \ No newline at end of file diff --git a/backend/src/main/java/com/storycove/repository/StoryRepository.java b/backend/src/main/java/com/storycove/repository/StoryRepository.java index e102772..7db3190 100644 --- a/backend/src/main/java/com/storycove/repository/StoryRepository.java +++ b/backend/src/main/java/com/storycove/repository/StoryRepository.java @@ -108,4 +108,10 @@ public interface StoryRepository extends JpaRepository { @Query("SELECT s FROM Story s WHERE s.createdAt >= :since ORDER BY s.createdAt DESC") List findRecentlyRead(@Param("since") LocalDateTime since); + + @Query("SELECT DISTINCT s FROM Story s " + + "LEFT JOIN FETCH s.author " + + "LEFT JOIN FETCH s.series " + + "LEFT JOIN FETCH s.tags") + List findAllWithAssociations(); } \ No newline at end of file diff --git a/backend/src/main/java/com/storycove/scheduled/TypesenseIndexScheduler.java b/backend/src/main/java/com/storycove/scheduled/TypesenseIndexScheduler.java new file mode 100644 index 0000000..9d56df9 --- /dev/null +++ b/backend/src/main/java/com/storycove/scheduled/TypesenseIndexScheduler.java @@ -0,0 +1,84 @@ +package com.storycove.scheduled; + +import com.storycove.entity.Story; +import com.storycove.service.StoryService; +import com.storycove.service.TypesenseService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * Scheduled task to periodically reindex all stories in Typesense + * to ensure search index stays synchronized with database changes. + */ +@Component +@ConditionalOnProperty(name = "storycove.typesense.enabled", havingValue = "true", matchIfMissing = true) +public class TypesenseIndexScheduler { + + private static final Logger logger = LoggerFactory.getLogger(TypesenseIndexScheduler.class); + + private final StoryService storyService; + private final TypesenseService typesenseService; + + @Autowired + public TypesenseIndexScheduler(StoryService storyService, + @Autowired(required = false) TypesenseService typesenseService) { + this.storyService = storyService; + this.typesenseService = typesenseService; + } + + /** + * Scheduled task that runs periodically to reindex all stories in Typesense. + * This ensures the search index stays synchronized with any database changes + * that might have occurred outside of the normal story update flow. + * + * Interval is configurable via storycove.typesense.reindex-interval property (default: 1 hour). + */ + @Scheduled(fixedRateString = "${storycove.typesense.reindex-interval:3600000}") + public void reindexAllStories() { + if (typesenseService == null) { + logger.debug("TypesenseService is not available, skipping scheduled reindexing"); + return; + } + + logger.info("Starting scheduled Typesense reindexing at {}", LocalDateTime.now()); + + try { + long startTime = System.currentTimeMillis(); + + // Get all stories from database with eagerly loaded associations + List allStories = storyService.findAllWithAssociations(); + + if (allStories.isEmpty()) { + logger.info("No stories found in database, skipping reindexing"); + return; + } + + // Perform full reindex + typesenseService.reindexAllStories(allStories); + + long endTime = System.currentTimeMillis(); + long duration = endTime - startTime; + + logger.info("Completed scheduled Typesense reindexing of {} stories in {}ms", + allStories.size(), duration); + + } catch (Exception e) { + logger.error("Failed to complete scheduled Typesense reindexing", e); + } + } + + /** + * Manual trigger for reindexing - can be called from other services or endpoints if needed + */ + public void triggerManualReindex() { + logger.info("Manual Typesense reindexing triggered"); + reindexAllStories(); + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/storycove/service/AuthorIndexScheduler.java b/backend/src/main/java/com/storycove/service/AuthorIndexScheduler.java new file mode 100644 index 0000000..27d4c1e --- /dev/null +++ b/backend/src/main/java/com/storycove/service/AuthorIndexScheduler.java @@ -0,0 +1,49 @@ +package com.storycove.service; + +import com.storycove.entity.Author; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@ConditionalOnProperty(name = "storycove.typesense.enabled", havingValue = "true", matchIfMissing = true) +public class AuthorIndexScheduler { + + private static final Logger logger = LoggerFactory.getLogger(AuthorIndexScheduler.class); + + private final AuthorService authorService; + private final TypesenseService typesenseService; + + @Autowired + public AuthorIndexScheduler(AuthorService authorService, TypesenseService typesenseService) { + this.authorService = authorService; + this.typesenseService = typesenseService; + } + + @Scheduled(fixedRateString = "${storycove.typesense.author-reindex-interval:7200000}") // 2 hours default + public void reindexAllAuthors() { + try { + logger.info("Starting scheduled author reindexing..."); + + List allAuthors = authorService.findAllWithStories(); + logger.info("Found {} authors to reindex", allAuthors.size()); + + if (!allAuthors.isEmpty()) { + typesenseService.reindexAllAuthors(allAuthors); + logger.info("Successfully completed scheduled author reindexing"); + } else { + logger.info("No authors found to reindex"); + } + + } catch (Exception e) { + logger.error("Failed to complete scheduled author reindexing", e); + } + } + + // Manual reindex endpoint can be added to AuthorController if needed +} \ No newline at end of file diff --git a/backend/src/main/java/com/storycove/service/AuthorService.java b/backend/src/main/java/com/storycove/service/AuthorService.java index 6a29e63..748f231 100644 --- a/backend/src/main/java/com/storycove/service/AuthorService.java +++ b/backend/src/main/java/com/storycove/service/AuthorService.java @@ -1,10 +1,13 @@ package com.storycove.service; import com.storycove.entity.Author; +import com.storycove.entity.Story; import com.storycove.repository.AuthorRepository; import com.storycove.service.exception.DuplicateResourceException; import com.storycove.service.exception.ResourceNotFoundException; import jakarta.validation.Valid; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -21,17 +24,36 @@ import java.util.UUID; @Transactional public class AuthorService { + private static final Logger logger = LoggerFactory.getLogger(AuthorService.class); + private final AuthorRepository authorRepository; + private final TypesenseService typesenseService; @Autowired - public AuthorService(AuthorRepository authorRepository) { + public AuthorService(AuthorRepository authorRepository, TypesenseService typesenseService) { this.authorRepository = authorRepository; + this.typesenseService = typesenseService; } @Transactional(readOnly = true) public List findAll() { return authorRepository.findAll(); } + + @Transactional(readOnly = true) + public List findAllWithStories() { + List authors = authorRepository.findAll(); + // Force load lazy collections within transaction to avoid lazy loading issues + authors.forEach(author -> { + if (author.getStories() != null) { + author.getStories().size(); // Force initialization + } + if (author.getUrls() != null) { + author.getUrls().size(); // Force initialization + } + }); + return authors; + } @Transactional(readOnly = true) public Page findAll(Pageable pageable) { @@ -107,7 +129,16 @@ public class AuthorService { public Author create(@Valid Author author) { validateAuthorForCreate(author); - return authorRepository.save(author); + Author savedAuthor = authorRepository.save(author); + + // Index in Typesense + try { + typesenseService.indexAuthor(savedAuthor); + } catch (Exception e) { + logger.warn("Failed to index author in Typesense: " + savedAuthor.getName(), e); + } + + return savedAuthor; } public Author update(UUID id, @Valid Author authorUpdates) { @@ -120,7 +151,16 @@ public class AuthorService { } updateAuthorFields(existingAuthor, authorUpdates); - return authorRepository.save(existingAuthor); + Author savedAuthor = authorRepository.save(existingAuthor); + + // Update in Typesense + try { + typesenseService.updateAuthor(savedAuthor); + } catch (Exception e) { + logger.warn("Failed to update author in Typesense: " + savedAuthor.getName(), e); + } + + return savedAuthor; } public void delete(UUID id) { @@ -132,18 +172,43 @@ public class AuthorService { } authorRepository.delete(author); + + // Remove from Typesense + try { + typesenseService.deleteAuthor(id.toString()); + } catch (Exception e) { + logger.warn("Failed to delete author from Typesense: " + author.getName(), e); + } } public Author addUrl(UUID id, String url) { Author author = findById(id); author.addUrl(url); - return authorRepository.save(author); + Author savedAuthor = authorRepository.save(author); + + // Update in Typesense + try { + typesenseService.updateAuthor(savedAuthor); + } catch (Exception e) { + logger.warn("Failed to update author in Typesense after adding URL: " + savedAuthor.getName(), e); + } + + return savedAuthor; } public Author removeUrl(UUID id, String url) { Author author = findById(id); author.removeUrl(url); - return authorRepository.save(author); + Author savedAuthor = authorRepository.save(author); + + // Update in Typesense + try { + typesenseService.updateAuthor(savedAuthor); + } catch (Exception e) { + logger.warn("Failed to update author in Typesense after removing URL: " + savedAuthor.getName(), e); + } + + return savedAuthor; } public Author setDirectRating(UUID id, int rating) { @@ -162,8 +227,32 @@ public class AuthorService { } Author author = findById(id); + logger.debug("Setting author rating: {} for author: {} (current rating: {})", + rating, author.getName(), author.getAuthorRating()); + author.setAuthorRating(rating); - return authorRepository.save(author); + Author savedAuthor = authorRepository.save(author); + + // Flush and refresh to ensure the entity is up-to-date + authorRepository.flush(); + Author refreshedAuthor = findById(id); + + logger.debug("Saved author rating: {} for author: {}", + refreshedAuthor.getAuthorRating(), refreshedAuthor.getName()); + + // Update in Typesense + try { + typesenseService.updateAuthor(refreshedAuthor); + } catch (Exception e) { + logger.warn("Failed to update author in Typesense after rating: " + refreshedAuthor.getName(), e); + } + + return refreshedAuthor; + } + + @Transactional(readOnly = true) + public Integer getAuthorRatingFromDb(UUID id) { + return authorRepository.findAuthorRatingById(id); } @Transactional(readOnly = true) @@ -171,17 +260,57 @@ public class AuthorService { return authorRepository.findTopRatedAuthors(pageable).getContent(); } + @Transactional(readOnly = true) + public Double calculateAverageStoryRating(UUID authorId) { + Author author = findById(authorId); + + if (author.getStories() == null || author.getStories().isEmpty()) { + return null; + } + + List ratings = author.getStories().stream() + .map(Story::getRating) + .filter(rating -> rating != null) + .toList(); + + if (ratings.isEmpty()) { + return null; + } + + return ratings.stream() + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + } public Author setAvatar(UUID id, String avatarPath) { Author author = findById(id); author.setAvatarImagePath(avatarPath); - return authorRepository.save(author); + Author savedAuthor = authorRepository.save(author); + + // Update in Typesense + try { + typesenseService.updateAuthor(savedAuthor); + } catch (Exception e) { + logger.warn("Failed to update author in Typesense after setting avatar: " + savedAuthor.getName(), e); + } + + return savedAuthor; } public Author removeAvatar(UUID id) { Author author = findById(id); author.setAvatarImagePath(null); - return authorRepository.save(author); + Author savedAuthor = authorRepository.save(author); + + // Update in Typesense + try { + typesenseService.updateAuthor(savedAuthor); + } catch (Exception e) { + logger.warn("Failed to update author in Typesense after removing avatar: " + savedAuthor.getName(), e); + } + + return savedAuthor; } @Transactional(readOnly = true) diff --git a/backend/src/main/java/com/storycove/service/StoryService.java b/backend/src/main/java/com/storycove/service/StoryService.java index cb791a8..d3d4097 100644 --- a/backend/src/main/java/com/storycove/service/StoryService.java +++ b/backend/src/main/java/com/storycove/service/StoryService.java @@ -58,6 +58,11 @@ public class StoryService { public List findAll() { return storyRepository.findAll(); } + + @Transactional(readOnly = true) + public List findAllWithAssociations() { + return storyRepository.findAllWithAssociations(); + } @Transactional(readOnly = true) public Page findAll(Pageable pageable) { @@ -221,7 +226,14 @@ public class StoryService { .orElseThrow(() -> new ResourceNotFoundException("Tag not found with id: " + tagId)); story.addTag(tag); - return storyRepository.save(story); + Story savedStory = storyRepository.save(story); + + // Update Typesense index with new tag information + if (typesenseService != null) { + typesenseService.updateStory(savedStory); + } + + return savedStory; } @Transactional @@ -231,7 +243,14 @@ public class StoryService { .orElseThrow(() -> new ResourceNotFoundException("Tag not found with id: " + tagId)); story.removeTag(tag); - return storyRepository.save(story); + Story savedStory = storyRepository.save(story); + + // Update Typesense index with updated tag information + if (typesenseService != null) { + typesenseService.updateStory(savedStory); + } + + return savedStory; } @Transactional @@ -242,7 +261,14 @@ public class StoryService { Story story = findById(id); story.setRating(rating); - return storyRepository.save(story); + Story savedStory = storyRepository.save(story); + + // Update Typesense index with new rating + if (typesenseService != null) { + typesenseService.updateStory(savedStory); + } + + return savedStory; } @Transactional(readOnly = true) diff --git a/backend/src/main/java/com/storycove/service/TypesenseService.java b/backend/src/main/java/com/storycove/service/TypesenseService.java index 5684048..a00a60e 100644 --- a/backend/src/main/java/com/storycove/service/TypesenseService.java +++ b/backend/src/main/java/com/storycove/service/TypesenseService.java @@ -1,7 +1,9 @@ package com.storycove.service; +import com.storycove.dto.AuthorSearchDto; import com.storycove.dto.SearchResultDto; import com.storycove.dto.StorySearchDto; +import com.storycove.entity.Author; import com.storycove.entity.Story; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,6 +23,7 @@ public class TypesenseService { private static final Logger logger = LoggerFactory.getLogger(TypesenseService.class); private static final String STORIES_COLLECTION = "stories"; + private static final String AUTHORS_COLLECTION = "authors"; private final Client typesenseClient; @@ -33,6 +36,7 @@ public class TypesenseService { public void initializeCollections() { try { createStoriesCollectionIfNotExists(); + createAuthorsCollectionIfNotExists(); } catch (Exception e) { logger.error("Failed to initialize Typesense collections", e); } @@ -77,6 +81,59 @@ public class TypesenseService { logger.info("Stories collection created successfully"); } + private void createAuthorsCollectionIfNotExists() throws Exception { + try { + // Check if collection already exists + typesenseClient.collections(AUTHORS_COLLECTION).retrieve(); + logger.info("Authors collection already exists"); + } catch (Exception e) { + logger.info("Creating authors collection..."); + createAuthorsCollection(); + } + } + + /** + * Force recreate the authors collection, deleting it first if it exists + */ + public void recreateAuthorsCollection() throws Exception { + try { + logger.info("Force deleting authors collection for recreation..."); + typesenseClient.collections(AUTHORS_COLLECTION).delete(); + logger.info("Successfully deleted authors collection"); + } catch (Exception e) { + logger.debug("Authors collection didn't exist for deletion: {}", e.getMessage()); + } + + // Wait a brief moment to ensure deletion is complete + Thread.sleep(100); + + logger.info("Creating authors collection with fresh schema..."); + createAuthorsCollection(); + logger.info("Successfully created authors collection"); + } + + private void createAuthorsCollection() throws Exception { + List fields = Arrays.asList( + new Field().name("id").type("string").facet(false), + new Field().name("name").type("string").facet(true).sort(true), // Enable both faceting and sorting + new Field().name("notes").type("string").facet(false).optional(true), + new Field().name("authorRating").type("int32").facet(true).sort(true).optional(true), // Enable both faceting and sorting + new Field().name("averageStoryRating").type("float").facet(true).sort(true).optional(true), // Enable both faceting and sorting + new Field().name("storyCount").type("int32").facet(true).sort(true), // Enable both faceting and sorting + new Field().name("urls").type("string[]").facet(false).optional(true), + new Field().name("avatarImagePath").type("string").facet(false).optional(true), + new Field().name("createdAt").type("int64").facet(true).sort(true), // Enable both faceting and sorting + new Field().name("updatedAt").type("int64").facet(true).sort(true) // Enable both faceting and sorting + ); + + CollectionSchema collectionSchema = new CollectionSchema() + .name(AUTHORS_COLLECTION) + .fields(fields); + + typesenseClient.collections().create(collectionSchema); + logger.info("Authors collection created successfully"); + } + public void indexStory(Story story) { try { Map document = createStoryDocument(story); @@ -113,7 +170,9 @@ public class TypesenseService { List authorFilters, List tagFilters, Integer minRating, - Integer maxRating) { + Integer maxRating, + String sortBy, + String sortDir) { try { long startTime = System.currentTimeMillis(); @@ -121,15 +180,21 @@ public class TypesenseService { // Convert 0-based page (frontend/backend) to 1-based page (Typesense) int typesensePage = page + 1; + // Normalize query - treat empty, null, or "*" as wildcard + String normalizedQuery = query; + if (query == null || query.trim().isEmpty() || "*".equals(query.trim())) { + normalizedQuery = "*"; + } + SearchParameters searchParameters = new SearchParameters() - .q(query.isEmpty() ? "*" : query) + .q(normalizedQuery) .queryBy("title,description,contentPlain,authorName,seriesName,tagNames") .page(typesensePage) .perPage(perPage) .highlightFields("title,description") .highlightStartTag("") .highlightEndTag("") - .sortBy("_text_match:desc,createdAt:desc"); + .sortBy(buildSortParameter(normalizedQuery, sortBy, sortDir)); // Add filters List filterConditions = new ArrayList<>(); @@ -254,7 +319,7 @@ public class TypesenseService { document.put("description", story.getDescription() != null ? story.getDescription() : ""); document.put("contentPlain", story.getContentPlain() != null ? story.getContentPlain() : ""); - // Required fields - always include even if null + // Author fields - required in schema, use empty string for missing values if (story.getAuthor() != null) { document.put("authorId", story.getAuthor().getId().toString()); document.put("authorName", story.getAuthor().getName()); @@ -263,6 +328,7 @@ public class TypesenseService { document.put("authorName", ""); } + // Series fields - optional if (story.getSeries() != null) { document.put("seriesId", story.getSeries().getId().toString()); document.put("seriesName", story.getSeries().getName()); @@ -305,13 +371,15 @@ public class TypesenseService { dto.setDescription((String) doc.get("description")); dto.setContentPlain((String) doc.get("contentPlain")); - if (doc.get("authorId") != null) { - dto.setAuthorId(UUID.fromString((String) doc.get("authorId"))); + String authorId = (String) doc.get("authorId"); + if (authorId != null && !authorId.trim().isEmpty()) { + dto.setAuthorId(UUID.fromString(authorId)); dto.setAuthorName((String) doc.get("authorName")); } - if (doc.get("seriesId") != null) { - dto.setSeriesId(UUID.fromString((String) doc.get("seriesId"))); + String seriesId = (String) doc.get("seriesId"); + if (seriesId != null && !seriesId.trim().isEmpty()) { + dto.setSeriesId(UUID.fromString(seriesId)); dto.setSeriesName((String) doc.get("seriesName")); } @@ -341,8 +409,9 @@ public class TypesenseService { timestamp, 0, java.time.ZoneOffset.UTC)); } - // Set search-specific fields - dto.setSearchScore(hit.getTextMatch()); + // Set search-specific fields - handle null for wildcard queries + Long textMatch = hit.getTextMatch(); + dto.setSearchScore(textMatch != null ? textMatch : 0L); // Extract highlights from the Typesense response with multiple fallback approaches List highlights = extractHighlights(hit, dto.getTitle()); @@ -441,4 +510,384 @@ public class TypesenseService { return highlights; } + + /** + * Build sort parameter for Typesense search. + * Maps frontend sort fields to Typesense document fields and handles direction. + */ + private String buildSortParameter(String query, String sortBy, String sortDir) { + // If it's a wildcard query, use default sort without text match scoring + boolean isWildcardQuery = query == null || query.trim().isEmpty() || "*".equals(query.trim()); + + // If no sort parameters provided, use appropriate default + if (sortBy == null || sortBy.trim().isEmpty()) { + return isWildcardQuery ? "createdAt:desc" : "_text_match:desc,createdAt:desc"; + } + + // Map frontend sort fields to Typesense fields + String typesenseField = mapSortField(sortBy); + String direction = (sortDir != null && sortDir.equalsIgnoreCase("asc")) ? "asc" : "desc"; + + String sortParameter = typesenseField + ":" + direction; + + // For text queries (not wildcard), include text match scoring if not already sorting by a text-based field + if (!isWildcardQuery && !isTextBasedSort(sortBy)) { + sortParameter = "_text_match:desc," + sortParameter; + } + + // Always include createdAt as a tie-breaker unless we're already sorting by it + if (!"createdAt".equals(sortBy)) { + sortParameter = sortParameter + ",createdAt:desc"; + } + + return sortParameter; + } + + /** + * Map frontend sort field names to Typesense document field names + */ + private String mapSortField(String frontendField) { + switch (frontendField.toLowerCase()) { + case "title": + return "title"; + case "author": + case "authorname": + return "authorName"; + case "createdat": + case "created_at": + case "date": + return "createdAt"; + case "rating": + return "rating"; + case "wordcount": + case "word_count": + return "wordCount"; + case "volume": + return "volume"; + case "series": + case "seriesname": + return "seriesName"; + default: + // Fallback to createdAt for unknown fields + return "createdAt"; + } + } + + /** + * Check if the sort field is text-based (title, author) where text match scoring is less relevant + */ + private boolean isTextBasedSort(String sortBy) { + return sortBy != null && ( + sortBy.equalsIgnoreCase("title") || + sortBy.equalsIgnoreCase("author") || + sortBy.equalsIgnoreCase("authorname") || + sortBy.equalsIgnoreCase("series") || + sortBy.equalsIgnoreCase("seriesname") + ); + } + + // Author indexing methods + + public void indexAuthor(Author author) { + try { + Map document = createAuthorDocument(author); + typesenseClient.collections(AUTHORS_COLLECTION).documents().create(document); + logger.debug("Indexed author: {}", author.getName()); + } catch (Exception e) { + logger.error("Failed to index author: " + author.getName(), e); + } + } + + public void updateAuthor(Author author) { + try { + Map document = createAuthorDocument(author); + typesenseClient.collections(AUTHORS_COLLECTION).documents(author.getId().toString()).update(document); + logger.debug("Updated author index: {}", author.getName()); + } catch (Exception e) { + logger.error("Failed to update author index: " + author.getName(), e); + } + } + + public void deleteAuthor(String authorId) { + try { + typesenseClient.collections(AUTHORS_COLLECTION).documents(authorId).delete(); + logger.debug("Deleted author from index: {}", authorId); + } catch (Exception e) { + logger.error("Failed to delete author from index: " + authorId, e); + } + } + + public void bulkIndexAuthors(List authors) { + if (authors.isEmpty()) { + return; + } + + try { + // Index authors one by one for now (can optimize later) + for (Author author : authors) { + indexAuthor(author); + } + logger.info("Bulk indexed {} authors", authors.size()); + + } catch (Exception e) { + logger.error("Failed to bulk index authors", e); + } + } + + public void reindexAllAuthors(List authors) { + try { + // Force recreate collection with proper schema + recreateAuthorsCollection(); + + // Bulk index all authors + bulkIndexAuthors(authors); + + logger.info("Reindexed all {} authors", authors.size()); + + } catch (Exception e) { + logger.error("Failed to reindex all authors", e); + throw new RuntimeException("Failed to reindex all authors", e); + } + } + + private Map createAuthorDocument(Author author) { + Map document = new HashMap<>(); + document.put("id", author.getId().toString()); + document.put("name", author.getName()); + document.put("notes", author.getNotes() != null ? author.getNotes() : ""); + document.put("authorRating", author.getAuthorRating()); + + // Safely handle potentially lazy-loaded stories collection + int storyCount = 0; + Double averageStoryRating = null; + + try { + if (author.getStories() != null && !author.getStories().isEmpty()) { + storyCount = author.getStories().size(); + + // Calculate average story rating + double avgRating = author.getStories().stream() + .filter(story -> story.getRating() != null) + .mapToInt(story -> story.getRating()) + .average() + .orElse(0.0); + averageStoryRating = avgRating > 0 ? avgRating : null; + } + } catch (Exception e) { + // If stories can't be loaded (lazy loading issue), set defaults + logger.debug("Could not load stories for author {}, using defaults: {}", author.getName(), e.getMessage()); + storyCount = 0; + averageStoryRating = null; + } + + document.put("storyCount", storyCount); + document.put("averageStoryRating", averageStoryRating); + + // Safely handle potentially lazy-loaded URLs collection + List urls = new ArrayList<>(); + try { + if (author.getUrls() != null) { + urls = author.getUrls(); + } + } catch (Exception e) { + logger.debug("Could not load URLs for author {}, using empty list: {}", author.getName(), e.getMessage()); + } + document.put("urls", urls); + document.put("avatarImagePath", author.getAvatarImagePath()); + document.put("createdAt", author.getCreatedAt() != null ? + author.getCreatedAt().toEpochSecond(java.time.ZoneOffset.UTC) : 0); + document.put("updatedAt", author.getUpdatedAt() != null ? + author.getUpdatedAt().toEpochSecond(java.time.ZoneOffset.UTC) : 0); + + return document; + } + + public SearchResultDto searchAuthors(String query, int page, int perPage, String sortBy, String sortOrder) { + try { + logger.info("AUTHORS SEARCH DEBUG: Searching collection '{}' with query='{}', sortBy='{}', sortOrder='{}'", + AUTHORS_COLLECTION, query, sortBy, sortOrder); + SearchParameters searchParameters = new SearchParameters() + .q(query != null && !query.trim().isEmpty() ? query : "*") + .queryBy("name,notes") + .page(page + 1) // Typesense pages are 1-indexed + .perPage(perPage); + + // Add sorting if specified, with fallback if sorting fails + if (sortBy != null && !sortBy.trim().isEmpty()) { + String sortDirection = "desc".equalsIgnoreCase(sortOrder) ? "desc" : "asc"; + String sortField = mapAuthorSortField(sortBy); + String sortString = sortField + ":" + sortDirection; + logger.info("AUTHORS SEARCH DEBUG: Original sortBy='{}', mapped to='{}', full sort string='{}'", + sortBy, sortField, sortString); + searchParameters.sortBy(sortString); + } + + SearchResult searchResult; + try { + searchResult = typesenseClient.collections(AUTHORS_COLLECTION) + .documents() + .search(searchParameters); + } catch (Exception sortException) { + // If sorting fails (likely due to schema issues), retry without sorting + logger.error("SORTING ERROR DEBUG: Full exception details", sortException); + logger.warn("Sorting failed for authors search, retrying without sort: " + sortException.getMessage()); + + // Try to get collection info for debugging + try { + CollectionResponse collection = typesenseClient.collections(AUTHORS_COLLECTION).retrieve(); + logger.error("COLLECTION DEBUG: Collection '{}' exists with {} documents and {} fields", + collection.getName(), collection.getNumDocuments(), collection.getFields().size()); + logger.error("COLLECTION DEBUG: Fields: {}", collection.getFields()); + } catch (Exception debugException) { + logger.error("COLLECTION DEBUG: Failed to retrieve collection info", debugException); + } + + searchParameters = new SearchParameters() + .q(query != null && !query.trim().isEmpty() ? query : "*") + .queryBy("name,notes") + .page(page + 1) + .perPage(perPage); + + searchResult = typesenseClient.collections(AUTHORS_COLLECTION) + .documents() + .search(searchParameters); + } + + return convertAuthorSearchResult(searchResult, query, page, perPage); + + } catch (Exception e) { + logger.error("Failed to search authors with query: " + query, e); + SearchResultDto emptyResult = new SearchResultDto<>(); + emptyResult.setQuery(query); + emptyResult.setPage(page); + emptyResult.setPerPage(perPage); + emptyResult.setTotalHits(0); + emptyResult.setSearchTimeMs(0); + emptyResult.setResults(new ArrayList<>()); + return emptyResult; + } + } + + private String mapAuthorSortField(String sortBy) { + switch (sortBy.toLowerCase()) { + case "name": + return "name"; + case "rating": + case "authorrating": + return "authorRating"; + case "stories": + case "storycount": + return "storyCount"; + case "avgrating": + case "averagestoryrating": + return "averageStoryRating"; + case "created": + case "createdat": + return "createdAt"; + default: + return "name"; + } + } + + private SearchResultDto convertAuthorSearchResult(SearchResult searchResult, String query, int page, int perPage) { + SearchResultDto result = new SearchResultDto<>(); + result.setQuery(query); + result.setPage(page); + result.setPerPage(perPage); + result.setTotalHits(searchResult.getFound().intValue()); + result.setSearchTimeMs(searchResult.getSearchTimeMs().intValue()); + + List authors = searchResult.getHits().stream() + .map(this::convertAuthorHit) + .collect(Collectors.toList()); + + result.setResults(authors); + return result; + } + + private AuthorSearchDto convertAuthorHit(SearchResultHit hit) { + Map doc = hit.getDocument(); + + AuthorSearchDto dto = new AuthorSearchDto(); + dto.setId(UUID.fromString((String) doc.get("id"))); + dto.setName((String) doc.get("name")); + dto.setNotes((String) doc.get("notes")); + + // Handle numeric fields safely + Object authorRating = doc.get("authorRating"); + if (authorRating instanceof Number) { + dto.setAuthorRating(((Number) authorRating).intValue()); + } + + Object storyCount = doc.get("storyCount"); + if (storyCount instanceof Number) { + dto.setStoryCount(((Number) storyCount).intValue()); + } + + Object avgRating = doc.get("averageStoryRating"); + if (avgRating instanceof Number) { + dto.setAverageStoryRating(((Number) avgRating).doubleValue()); + } + + dto.setAvatarImagePath((String) doc.get("avatarImagePath")); + + @SuppressWarnings("unchecked") + List urls = (List) doc.get("urls"); + dto.setUrls(urls); + + // Convert timestamps back to LocalDateTime + Object createdAt = doc.get("createdAt"); + if (createdAt instanceof Number) { + dto.setCreatedAt(java.time.LocalDateTime.ofEpochSecond( + ((Number) createdAt).longValue(), 0, java.time.ZoneOffset.UTC)); + } + + Object updatedAt = doc.get("updatedAt"); + if (updatedAt instanceof Number) { + dto.setUpdatedAt(java.time.LocalDateTime.ofEpochSecond( + ((Number) updatedAt).longValue(), 0, java.time.ZoneOffset.UTC)); + } + + // Set search score + Long textMatch = hit.getTextMatch(); + dto.setSearchScore(textMatch != null ? textMatch : 0L); + + return dto; + } + + /** + * Get current schema information for the authors collection + */ + public Map getAuthorsCollectionSchema() { + try { + CollectionResponse collection = typesenseClient.collections(AUTHORS_COLLECTION).retrieve(); + return Map.of( + "name", collection.getName(), + "num_documents", collection.getNumDocuments(), + "fields", collection.getFields(), + "created_at", collection.getCreatedAt() + ); + } catch (Exception e) { + logger.error("Failed to retrieve authors collection schema", e); + return Map.of("error", e.getMessage()); + } + } + + /** + * Get current schema information for the stories collection + */ + public Map getStoriesCollectionSchema() { + try { + CollectionResponse collection = typesenseClient.collections(STORIES_COLLECTION).retrieve(); + return Map.of( + "name", collection.getName(), + "num_documents", collection.getNumDocuments(), + "fields", collection.getFields(), + "created_at", collection.getCreatedAt() + ); + } catch (Exception e) { + logger.error("Failed to retrieve stories collection schema", e); + return Map.of("error", e.getMessage()); + } + } } \ No newline at end of file diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml index f18e358..c3da118 100644 --- a/backend/src/main/resources/application.yml +++ b/backend/src/main/resources/application.yml @@ -32,6 +32,8 @@ storycove: api-key: ${TYPESENSE_API_KEY:xyz} host: ${TYPESENSE_HOST:localhost} port: ${TYPESENSE_PORT:8108} + enabled: ${TYPESENSE_ENABLED:true} + reindex-interval: ${TYPESENSE_REINDEX_INTERVAL:3600000} # 1 hour in milliseconds images: storage-path: ${IMAGE_STORAGE_PATH:/app/images} diff --git a/frontend/src/app/add-story/page.tsx b/frontend/src/app/add-story/page.tsx index bd24a2a..92ee9d5 100644 --- a/frontend/src/app/add-story/page.tsx +++ b/frontend/src/app/add-story/page.tsx @@ -97,6 +97,7 @@ export default function AddStoryPage() { contentHtml: formData.contentHtml, sourceUrl: formData.sourceUrl || undefined, volume: formData.seriesName ? parseInt(formData.volume) : undefined, + seriesName: formData.seriesName || undefined, authorName: formData.authorName || undefined, tagNames: formData.tags.length > 0 ? formData.tags : undefined, }; diff --git a/frontend/src/app/authors/[id]/page.tsx b/frontend/src/app/authors/[id]/page.tsx index b3adbcb..0646194 100644 --- a/frontend/src/app/authors/[id]/page.tsx +++ b/frontend/src/app/authors/[id]/page.tsx @@ -122,6 +122,29 @@ export default function AuthorDetailPage() { )} + + {/* Average Story Rating */} + {author.averageStoryRating && ( +
+
+ {[1, 2, 3, 4, 5].map((star) => ( + + ★ + + ))} +
+ + Avg Story Rating: {author.averageStoryRating.toFixed(1)}/5 + +
+ )} diff --git a/frontend/src/app/authors/page.tsx b/frontend/src/app/authors/page.tsx index 79bd46f..42daec6 100644 --- a/frontend/src/app/authors/page.tsx +++ b/frontend/src/app/authors/page.tsx @@ -7,6 +7,7 @@ import { authorApi, getImageUrl } from '../../lib/api'; import { Author } from '../../types/api'; import AppLayout from '../../components/layout/AppLayout'; import { Input } from '../../components/ui/Input'; +import Button from '../../components/ui/Button'; import LoadingSpinner from '../../components/ui/LoadingSpinner'; export default function AuthorsPage() { @@ -14,41 +15,75 @@ export default function AuthorsPage() { const [filteredAuthors, setFilteredAuthors] = useState([]); const [loading, setLoading] = useState(true); const [searchQuery, setSearchQuery] = useState(''); + const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid'); + const [sortBy, setSortBy] = useState('name'); + const [sortOrder, setSortOrder] = useState<'asc' | 'desc'>('asc'); + const [currentPage, setCurrentPage] = useState(0); + const [totalHits, setTotalHits] = useState(0); + const [hasMore, setHasMore] = useState(false); + const ITEMS_PER_PAGE = 50; // Safe limit under Typesense's 250 limit useEffect(() => { const loadAuthors = async () => { try { setLoading(true); - const authorsResult = await authorApi.getAuthors({ page: 0, size: 1000 }); // Get all authors - setAuthors(authorsResult.content || []); - setFilteredAuthors(authorsResult.content || []); + const searchResults = await authorApi.searchAuthorsTypesense({ + q: searchQuery || '*', + page: currentPage, + size: ITEMS_PER_PAGE, + sortBy: sortBy, + sortOrder: sortOrder + }); + + if (currentPage === 0) { + // First page - replace all results + setAuthors(searchResults.results || []); + setFilteredAuthors(searchResults.results || []); + } else { + // Subsequent pages - append results + setAuthors(prev => [...prev, ...(searchResults.results || [])]); + setFilteredAuthors(prev => [...prev, ...(searchResults.results || [])]); + } + + setTotalHits(searchResults.totalHits); + setHasMore(searchResults.results.length === ITEMS_PER_PAGE && (currentPage + 1) * ITEMS_PER_PAGE < searchResults.totalHits); + } catch (error) { console.error('Failed to load authors:', error); + // Fallback to regular API if Typesense fails (only for first page) + if (currentPage === 0) { + try { + const authorsResult = await authorApi.getAuthors({ page: 0, size: ITEMS_PER_PAGE }); + setAuthors(authorsResult.content || []); + setFilteredAuthors(authorsResult.content || []); + setTotalHits(authorsResult.totalElements || 0); + setHasMore(authorsResult.content.length === ITEMS_PER_PAGE); + } catch (fallbackError) { + console.error('Fallback also failed:', fallbackError); + } + } } finally { setLoading(false); } }; loadAuthors(); - }, []); + }, [searchQuery, sortBy, sortOrder, currentPage]); + // Reset pagination when search or sort changes useEffect(() => { - if (!Array.isArray(authors)) { - setFilteredAuthors([]); - return; + if (currentPage !== 0) { + setCurrentPage(0); } - - if (searchQuery) { - const query = searchQuery.toLowerCase(); - const filtered = authors.filter(author => - author.name.toLowerCase().includes(query) || - (author.notes && author.notes.toLowerCase().includes(query)) - ); - setFilteredAuthors(filtered); - } else { - setFilteredAuthors(authors); + }, [searchQuery, sortBy, sortOrder]); + + const loadMore = () => { + if (hasMore && !loading) { + setCurrentPage(prev => prev + 1); } - }, [searchQuery, authors]); + }; + + // Client-side filtering no longer needed since we use Typesense // Note: We no longer have individual story ratings in the author list // Average rating would need to be calculated on backend if needed @@ -71,23 +106,65 @@ export default function AuthorsPage() {

Authors

- {filteredAuthors.length} {filteredAuthors.length === 1 ? 'author' : 'authors'} + {filteredAuthors.length} of {totalHits} {totalHits === 1 ? 'author' : 'authors'} {searchQuery ? ` found` : ` in your library`} + {hasMore && ` (showing first ${filteredAuthors.length})`}

+ + {/* View Mode Toggle */} +
+ + +
- {/* Search */} -
- setSearchQuery(e.target.value)} - /> + {/* Search and Sort Controls */} +
+
+ setSearchQuery(e.target.value)} + /> +
+ +
+ + + +
- {/* Authors Grid */} + {/* Authors Display */} {filteredAuthors.length === 0 ? (
@@ -109,100 +186,246 @@ export default function AuthorsPage() {

)}
- ) : ( + ) : viewMode === 'grid' ? (
- {filteredAuthors.map((author) => { - return ( - - {/* Avatar */} -
-
- {author.avatarImagePath ? ( - {author.name} - ) : ( -
- 👤 -
- )} -
- -
-

- {author.name} -

- -
- {/* Author Rating */} - {author.authorRating && ( -
-
- {[1, 2, 3, 4, 5].map((star) => ( - - ★ - - ))} -
- - ({author.authorRating}/5) - -
- )} -
-
-
- - {/* Stats */} -
-
- Stories: - - {author.storyCount || 0} - -
- - {author.urls.length > 0 && ( -
- Links: - - {author.urls.length} - -
- )} -
- - {/* Notes Preview */} - {author.notes && ( -
-

- {author.notes} -

-
- )} - - - ); - })} + {filteredAuthors.map((author) => ( + + ))} +
+ ) : ( +
+ {filteredAuthors.map((author) => ( + + ))} +
+ )} + + {/* Load More Button */} + {hasMore && ( +
+
)}
); +} + +// Author Grid Card Component +function AuthorGridCard({ author }: { author: Author }) { + return ( + + {/* Avatar */} +
+
+ {author.avatarImagePath ? ( + {author.name} + ) : ( +
+ 👤 +
+ )} +
+ +
+

+ {author.name} +

+ +
+ {/* Author Rating */} + {author.authorRating && ( +
+
+ {[1, 2, 3, 4, 5].map((star) => ( + + ★ + + ))} +
+ + ({author.authorRating}/5) + +
+ )} + + {/* Average Story Rating */} + {author.averageStoryRating && ( +
+
+ {[1, 2, 3, 4, 5].map((star) => ( + + ★ + + ))} +
+ + ({author.averageStoryRating.toFixed(1)}) + +
+ )} +
+
+
+ + {/* Stats */} +
+
+ Stories: + + {author.storyCount || 0} + +
+ + {author.urls && author.urls.length > 0 && ( +
+ Links: + + {author.urls.length} + +
+ )} +
+ + {/* Notes Preview */} + {author.notes && ( +
+

+ {author.notes} +

+
+ )} + + ); +} + +// Author List Item Component +function AuthorListItem({ author }: { author: Author }) { + return ( + + {/* Avatar */} +
+ {author.avatarImagePath ? ( + {author.name} + ) : ( +
+ 👤 +
+ )} +
+ + {/* Author Info */} +
+

+ {author.name} +

+ +
+ {/* Ratings */} +
+ {author.authorRating && ( +
+
+ {[1, 2, 3, 4, 5].map((star) => ( + + ★ + + ))} +
+ + ({author.authorRating}) + +
+ )} + + {author.averageStoryRating && ( +
+
+ {[1, 2, 3, 4, 5].map((star) => ( + + ★ + + ))} +
+ + Avg: {author.averageStoryRating.toFixed(1)} + +
+ )} +
+ + {/* Stats */} +
+ {author.storyCount || 0} stories + {author.urls && author.urls.length > 0 && ( + {author.urls.length} links + )} +
+
+ + {/* Notes Preview */} + {author.notes && ( +

+ {author.notes} +

+ )} +
+ + ); } \ No newline at end of file diff --git a/frontend/src/app/library/page.tsx b/frontend/src/app/library/page.tsx index 5a44893..05b6c5c 100644 --- a/frontend/src/app/library/page.tsx +++ b/frontend/src/app/library/page.tsx @@ -1,7 +1,7 @@ 'use client'; import { useState, useEffect } from 'react'; -import { storyApi, searchApi, tagApi } from '../../lib/api'; +import { searchApi, tagApi } from '../../lib/api'; import { Story, Tag } from '../../types/api'; import AppLayout from '../../components/layout/AppLayout'; import { Input } from '../../components/ui/Input'; diff --git a/frontend/src/app/settings/page.tsx b/frontend/src/app/settings/page.tsx index 19cbe9c..e372a48 100644 --- a/frontend/src/app/settings/page.tsx +++ b/frontend/src/app/settings/page.tsx @@ -4,6 +4,7 @@ import { useState, useEffect } from 'react'; import AppLayout from '../../components/layout/AppLayout'; import { useTheme } from '../../lib/theme'; import Button from '../../components/ui/Button'; +import { storyApi, authorApi } from '../../lib/api'; type FontFamily = 'serif' | 'sans' | 'mono'; type FontSize = 'small' | 'medium' | 'large' | 'extra-large'; @@ -27,6 +28,15 @@ export default function SettingsPage() { const { theme, setTheme } = useTheme(); const [settings, setSettings] = useState(defaultSettings); const [saved, setSaved] = useState(false); + const [typesenseStatus, setTypesenseStatus] = useState<{ + stories: { loading: boolean; message: string; success?: boolean }; + authors: { loading: boolean; message: string; success?: boolean }; + }>({ + stories: { loading: false, message: '' }, + authors: { loading: false, message: '' } + }); + const [authorsSchema, setAuthorsSchema] = useState(null); + const [showSchema, setShowSchema] = useState(false); // Load settings from localStorage on mount useEffect(() => { @@ -85,6 +95,66 @@ export default function SettingsPage() { setSettings(prev => ({ ...prev, [key]: value })); }; + const handleTypesenseOperation = async ( + type: 'stories' | 'authors', + operation: 'reindex' | 'recreate', + apiCall: () => Promise<{ success: boolean; message: string; count?: number; error?: string }> + ) => { + setTypesenseStatus(prev => ({ + ...prev, + [type]: { loading: true, message: 'Processing...', success: undefined } + })); + + try { + const result = await apiCall(); + setTypesenseStatus(prev => ({ + ...prev, + [type]: { + loading: false, + message: result.success ? result.message : result.error || 'Operation failed', + success: result.success + } + })); + + // Clear message after 5 seconds + setTimeout(() => { + setTypesenseStatus(prev => ({ + ...prev, + [type]: { loading: false, message: '', success: undefined } + })); + }, 5000); + } catch (error) { + setTypesenseStatus(prev => ({ + ...prev, + [type]: { + loading: false, + message: 'Network error occurred', + success: false + } + })); + + setTimeout(() => { + setTypesenseStatus(prev => ({ + ...prev, + [type]: { loading: false, message: '', success: undefined } + })); + }, 5000); + } + }; + + const fetchAuthorsSchema = async () => { + try { + const result = await authorApi.getTypesenseSchema(); + if (result.success) { + setAuthorsSchema(result.schema); + } else { + setAuthorsSchema({ error: result.error }); + } + } catch (error) { + setAuthorsSchema({ error: 'Failed to fetch schema' }); + } + }; + return (
@@ -251,6 +321,119 @@ export default function SettingsPage() {
+ {/* Typesense Search Management */} +
+

Search Index Management

+

+ Manage the Typesense search indexes for stories and authors. Use these tools if search functionality isn't working properly. +

+ +
+ {/* Stories Section */} +
+

Stories Index

+
+ + +
+ {typesenseStatus.stories.message && ( +
+ {typesenseStatus.stories.message} +
+ )} +
+ + {/* Authors Section */} +
+

Authors Index

+
+ + +
+ {typesenseStatus.authors.message && ( +
+ {typesenseStatus.authors.message} +
+ )} + + {/* Debug Schema Section */} +
+
+ + +
+ + {showSchema && authorsSchema && ( +
+
{JSON.stringify(authorsSchema, null, 2)}
+
+ )} +
+
+ +
+

When to use these tools:

+
    +
  • • Reindex: Refresh search data while keeping the existing schema
  • +
  • • Recreate Collection: Delete and rebuild the entire search index (fixes schema issues)
  • +
+
+
+
+ {/* Actions */}
=> { const response = await api.post('/stories', storyData); @@ -97,6 +98,7 @@ export const storyApi = { volume?: number; authorId?: string; seriesId?: string; + seriesName?: string; tagNames?: string[]; }): Promise => { const response = await api.put(`/stories/${id}`, storyData); @@ -133,6 +135,16 @@ export const storyApi = { const response = await api.delete(`/stories/${storyId}/tags/${tagId}`); return response.data; }, + + reindexTypesense: async (): Promise<{ success: boolean; message: string; count?: number; error?: string }> => { + const response = await api.post('/stories/reindex-typesense'); + return response.data; + }, + + recreateTypesenseCollection: async (): Promise<{ success: boolean; message: string; count?: number; error?: string }> => { + const response = await api.post('/stories/recreate-typesense-collection'); + return response.data; + }, }; // Author endpoints @@ -171,6 +183,39 @@ export const authorApi = { removeAvatar: async (id: string): Promise => { await api.delete(`/authors/${id}/avatar`); }, + + searchAuthorsTypesense: async (params?: { + q?: string; + page?: number; + size?: number; + sortBy?: string; + sortOrder?: string; + }): Promise<{ + results: Author[]; + totalHits: number; + page: number; + perPage: number; + query: string; + searchTimeMs: number; + }> => { + const response = await api.get('/authors/search-typesense', { params }); + return response.data; + }, + + reindexTypesense: async (): Promise<{ success: boolean; message: string; count?: number; error?: string }> => { + const response = await api.post('/authors/reindex-typesense'); + return response.data; + }, + + recreateTypesenseCollection: async (): Promise<{ success: boolean; message: string; count?: number; error?: string }> => { + const response = await api.post('/authors/recreate-typesense-collection'); + return response.data; + }, + + getTypesenseSchema: async (): Promise<{ success: boolean; schema?: any; error?: string }> => { + const response = await api.get('/authors/typesense-schema'); + return response.data; + }, }; // Tag endpoints diff --git a/frontend/src/types/api.ts b/frontend/src/types/api.ts index 42344e3..7d232bb 100644 --- a/frontend/src/types/api.ts +++ b/frontend/src/types/api.ts @@ -23,6 +23,7 @@ export interface Author { name: string; notes?: string; authorRating?: number; + averageStoryRating?: number; avatarImagePath?: string; urls: string[]; storyCount: number; diff --git a/frontend/tsconfig.tsbuildinfo b/frontend/tsconfig.tsbuildinfo index 4620dd9..81bf073 100644 --- a/frontend/tsconfig.tsbuildinfo +++ b/frontend/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"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.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.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.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.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.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.es2020.number.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/shared/lib/amp.d.ts","./node_modules/next/amp.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.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/dom-events.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/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.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/test.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/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/future/route-kind.d.ts","./node_modules/next/dist/server/future/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/future/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/lib/revalidate.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/client/components/static-generation-async-storage.external.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/future/helpers/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/font-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/server/future/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/future/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/future/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/client/components/request-async-storage.external.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/amp-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.d.ts","./node_modules/next/dist/client/components/app-router.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/action-async-storage.external.d.ts","./node_modules/next/dist/client/components/static-generation-bailout.d.ts","./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.d.ts","./node_modules/next/dist/client/components/searchparams-bailout-proxy.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/client/components/not-found-boundary.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/future/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/future/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/server/future/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/future/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/future/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/future/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/future/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/future/normalizers/normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/future/normalizers/request/postponed.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/webpack/plugins/define-env-plugin.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/types/index.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate-path.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate-tag.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/shared/lib/runtime-config.external.d.ts","./node_modules/next/config.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./next-env.d.ts","./node_modules/axios/index.d.ts","./src/types/api.ts","./src/lib/api.ts","./src/lib/theme.ts","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./src/contexts/authcontext.tsx","./src/app/layout.tsx","./src/components/ui/loadingspinner.tsx","./src/app/page.tsx","./src/components/ui/button.tsx","./src/components/layout/header.tsx","./src/components/layout/protectedroute.tsx","./src/components/layout/applayout.tsx","./src/components/ui/input.tsx","./src/components/stories/taginput.tsx","./src/components/stories/richtexteditor.tsx","./node_modules/file-selector/dist/file.d.ts","./node_modules/file-selector/dist/file-selector.d.ts","./node_modules/file-selector/dist/index.d.ts","./node_modules/react-dropzone/typings/react-dropzone.d.ts","./src/components/ui/imageupload.tsx","./src/app/add-story/page.tsx","./src/app/authors/page.tsx","./src/components/stories/storycard.tsx","./src/components/stories/tagfilter.tsx","./src/app/library/page.tsx","./src/app/login/page.tsx","./src/app/settings/page.tsx","./src/components/stories/storyrating.tsx","./node_modules/@types/trusted-types/lib/index.d.ts","./node_modules/dompurify/dist/purify.es.d.mts","./src/app/stories/[id]/page.tsx","./node_modules/@types/trusted-types/index.d.ts","./node_modules/@types/dompurify/index.d.ts","./node_modules/@types/json5/index.d.ts"],"fileIdsList":[[64,106,348,349],[64,106],[64,106,385],[64,103,106],[64,105,106],[106],[64,106,111,140],[64,106,107,112,118,119,126,137,148],[64,106,107,108,118,126],[59,60,61,64,106],[64,106,109,149],[64,106,110,111,119,127],[64,106,111,137,145],[64,106,112,114,118,126],[64,105,106,113],[64,106,114,115],[64,106,116,118],[64,105,106,118],[64,106,118,119,120,137,148],[64,106,118,119,120,133,137,140],[64,101,106],[64,106,114,118,121,126,137,148],[64,106,118,119,121,122,126,137,145,148],[64,106,121,123,137,145,148],[62,63,64,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154],[64,106,118,124],[64,106,125,148,153],[64,106,114,118,126,137],[64,106,127],[64,106,128],[64,105,106,129],[64,103,104,105,106,107,108,109,110,111,112,113,114,115,116,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],[64,106,131],[64,106,132],[64,106,118,133,134],[64,106,133,135,149,151],[64,106,118,137,138,140],[64,106,139,140],[64,106,137,138],[64,106,140],[64,106,141],[64,103,106,137,142],[64,106,118,143,144],[64,106,143,144],[64,106,111,126,137,145],[64,106,146],[64,106,126,147],[64,106,121,132,148],[64,106,111,149],[64,106,137,150],[64,106,125,151],[64,106,152],[64,106,118,120,129,137,140,148,151,153],[64,106,137,154],[52,64,106,159,160,161],[52,64,106,159,160],[52,64,106],[52,56,64,106,158,305,344],[52,56,64,106,157,305,344],[49,50,51,64,106],[64,106,382],[64,106,369],[64,106,369,370],[57,64,106],[64,106,309],[64,106,311,312,313,314],[64,106,316],[64,106,164,173,180,305],[64,106,164,171,175,182],[64,106,173,282],[64,106,230,240,253,347],[64,106,261],[64,106,164,173,179,217,227,280,347],[64,106,179,347],[64,106,173,227,228,347],[64,106,173,179,217,347],[64,106,347],[64,106,179,180,347],[64,105,106,155],[52,64,106,241,242,258],[52,64,106,158],[52,64,106,241,256],[64,106,237,259,332,333],[64,106,194],[64,105,106,155,194,231,232,233],[52,64,106,256,259],[64,106,256,258],[52,64,106,256,257,259],[64,105,106,155,174,187,188],[52,64,106,165,326],[52,64,106,148,155],[52,64,106,179,215],[52,64,106,179],[64,106,213,218],[52,64,106,214,308],[64,106,355],[52,56,64,106,121,155,157,158,305,342,343],[64,106,163],[64,106,298,299,300,301,302,303],[64,106,300],[52,64,106,306,308],[52,64,106,308],[64,106,121,155,174,308],[64,106,121,155,172,189,190,205,234,235,255,256],[64,106,188,189,234,243,244,245,246,247,248,249,250,251,252,347],[52,64,106,132,155,173,187,205,207,209,255,305,347],[64,106,121,155,174,175,194,195,231],[64,106,121,155,173,175],[64,106,121,137,155,172,174,175],[64,106,121,132,148,155,163,165,172,173,174,175,179,182,184,186,187,190,191,199,201,204,205,207,208,209,256,264,266,269,271,272,273,305],[64,106,121,137,155],[64,106,164,165,166,172,305,308,347],[64,106,173],[64,106,121,137,148,155,169,281,283,284,347],[64,106,132,148,155,169,172,174,187,198,199,201,202,203,207,269,274,276,294,295],[64,106,173,177,187],[64,106,172,173],[64,106,191,270],[64,106,270],[64,106,168,169],[64,106,168,210],[64,106,168],[64,106,170,191,268],[64,106,267],[64,106,169,170],[64,106,170,265],[64,106,169],[64,106,255],[64,106,121,155,172,190,206,225,230,236,239,254,256],[64,106,219,220,221,222,223,224,237,238,259,306],[64,106,263],[64,106,121,155,172,190,206,211,260,262,264,305,308],[64,106,121,148,155,165,172,173,186],[64,106,229],[64,106,121,155,287,293],[64,106,184,186,308],[64,106,288,294,297],[64,106,121,177,287,289],[64,106,164,173,184,208,291],[64,106,121,155,173,179,208,277,285,286,290,291,292],[64,106,156,205,206,305,308],[64,106,121,132,148,155,170,172,174,177,181,182,184,186,187,190,198,199,201,202,203,204,207,266,274,275,308],[64,106,121,155,172,173,177,276,296],[64,106,121,155,182,189],[52,64,106,121,132,155,163,165,172,175,190,204,205,207,209,263,305,308],[64,106,121,132,148,155,167,170,171,174],[64,106,185],[64,106,121,155,182,190],[64,106,121,155,173,191],[64,106,121,155],[64,106,193],[64,106,195],[64,106,173,192,194,198],[64,106,173,192,194],[64,106,121,155,167,173,174,195,196,197],[52,64,106,256,257,258],[64,106,226],[52,64,106,165],[52,64,106,201],[52,64,106,156,204,209,305,308],[64,106,165,326,327],[52,64,106,218],[52,64,106,132,148,155,163,212,214,216,217,308],[64,106,174,179,201],[64,106,132,155],[64,106,200],[52,64,106,119,121,132,155,163,218,227,305,306,307],[48,52,53,54,55,64,106,157,158,305,344],[64,106,111],[64,106,278,279],[64,106,278],[64,106,318],[64,106,320],[64,106,322],[64,106,356],[64,106,324],[64,106,328],[56,58,64,106,305,310,315,317,319,321,323,325,329,331,335,336,338,345,346,347],[64,106,330],[64,106,334],[64,106,214],[64,106,337],[64,105,106,195,196,197,198,339,340,341,344],[64,106,155],[52,56,64,106,121,123,132,155,157,158,159,161,163,175,297,304,308,344],[52,64,106,371],[64,73,77,106,148],[64,73,106,137,148],[64,68,106],[64,70,73,106,145,148],[64,106,126,145],[64,68,106,155],[64,70,73,106,126,148],[64,65,66,69,72,106,118,137,148],[64,73,80,106],[64,65,71,106],[64,73,94,95,106],[64,69,73,106,140,148,155],[64,94,106,155],[64,67,68,106,155],[64,73,106],[64,67,68,69,70,71,72,73,74,75,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,95,96,97,98,99,100,106],[64,73,88,106],[64,73,80,81,106],[64,71,73,81,82,106],[64,72,106],[64,65,68,73,106],[64,73,77,81,82,106],[64,77,106],[64,71,73,76,106,148],[64,65,70,73,80,106],[64,106,137],[64,68,73,94,106,153,155],[52,64,106,335,353,362,365,366,367,368,373],[52,64,106,329,331,352,353,360,365,366],[64,106,348,357,358],[52,64,106,352,353,360,362,365,366,376,377],[52,64,106,329,335,354,358,362,366],[52,64,106,335,358,360],[52,64,106,354,362,365],[52,64,106,329,331,335,352,353,360,362,381,383],[64,106,363,364],[52,64,106,329,331,335,354,358,362],[52,64,106,362,366],[52,64,106,329,331,352,353,362],[64,106,352],[52,64,106,353],[52,64,106,331,360],[52,64,106,329,372],[64,106,351,352]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"0990a7576222f248f0a3b888adcb7389f957928ce2afb1cd5128169086ff4d29","impliedFormat":1},{"version":"eb5b19b86227ace1d29ea4cf81387279d04bb34051e944bc53df69f58914b788","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"472f5aab7edc498a0a761096e8e254c5bc3323d07a1e7f5f8b8ec0d6395b60a0","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc69795d9954ee4ad57545b10c7bf1a7260d990231b1685c147ea71a6faa265c","impliedFormat":1},{"version":"8bc6c94ff4f2af1f4023b7bb2379b08d3d7dd80c698c9f0b07431ea16101f05f","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"57194e1f007f3f2cbef26fa299d4c6b21f4623a2eddc63dfeef79e38e187a36e","impliedFormat":1},{"version":"0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","impliedFormat":1},{"version":"05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"49a5a44f2e68241a1d2bd9ec894535797998841c09729e506a7cbfcaa40f2180","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"1ca84b44ad1d8e4576f24904d8b95dd23b94ea67e1575f89614ac90062fc67f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d586db0a09a9495ebb5dece28f54df9684bfbd6e1f568426ca153126dac4a40","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"567b7f607f400873151d7bc63a049514b53c3c00f5f56e9e95695d93b66a138e","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"84c1930e33d1bb12ad01bcbe11d656f9646bd21b2fb2afd96e8e10615a021aef","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"2bf469abae4cc9c0f340d4e05d9d26e37f936f9c8ca8f007a6534f109dcc77e4","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4c21aaa8257d7950a5b75a251d9075b6a371208fc948c9c8402f6690ef3b5b55","impliedFormat":1},{"version":"b5895e6353a5d708f55d8685c38a235c3a6d8138e374dee8ceb8ffde5aa8002a","impliedFormat":1},{"version":"54c4f21f578864961efc94e8f42bc893a53509e886370ec7dd602e0151b9266c","impliedFormat":1},{"version":"de735eca2c51dd8b860254e9fdb6d9ec19fe402dfe597c23090841ce3937cfc5","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"5155da3047ef977944d791a2188ff6e6c225f6975cc1910ab7bb6838ab84cede","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"e16d218a30f6a6810b57f7e968124eaa08c7bb366133ea34bbf01e7cd6b8c0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb8692dea24c27821f77e397272d9ed2eda0b95e4a75beb0fdda31081d15a8ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"5b6844ad931dcc1d3aca53268f4bd671428421464b1286746027aede398094f2","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"0dbcebe2126d03936c70545e96a6e41007cf065be38a1ce4d32a39fcedefead4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"461e54289e6287e8494a0178ba18182acce51a02bca8dea219149bf2cf96f105","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"e31e51c55800014d926e3f74208af49cb7352803619855c89296074d1ecbb524","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"dfb96ba5177b68003deec9e773c47257da5c4c8a74053d8956389d832df72002","affectsGlobalScope":true,"impliedFormat":1},{"version":"92d3070580cf72b4bb80959b7f16ede9a3f39e6f4ef2ac87cfa4561844fdc69f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"613deebaec53731ff6b74fe1a89f094b708033db6396b601df3e6d5ab0ec0a47","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"e56eb632f0281c9f8210eb8c86cc4839a427a4ffffcfd2a5e40b956050b3e042","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"8caa5c86be1b793cd5f599e27ecb34252c41e011980f7d61ae4989a149ff6ccc","impliedFormat":1},{"version":"3609e455ffcba8176c8ce0aa57f8258fe10cf03987e27f1fab68f702b4426521","impliedFormat":1},{"version":"d1bd4e51810d159899aad1660ccb859da54e27e08b8c9862b40cd36c1d9ff00f","impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"1cfa8647d7d71cb03847d616bd79320abfc01ddea082a49569fda71ac5ece66b","impliedFormat":1},{"version":"bb7a61dd55dc4b9422d13da3a6bb9cc5e89be888ef23bbcf6558aa9726b89a1c","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"cfe4ef4710c3786b6e23dae7c086c70b4f4835a2e4d77b75d39f9046106e83d3","impliedFormat":1},{"version":"cbea99888785d49bb630dcbb1613c73727f2b5a2cf02e1abcaab7bcf8d6bf3c5","impliedFormat":1},{"version":"3b8f725c3d5ffb64bf876c87409686875102c6f7450b268d8f5188b6920f7c25","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"2dad084c67e649f0f354739ec7df7c7df0779a28a4f55c97c6b6883ae850d1ce","impliedFormat":1},{"version":"fa5bbc7ab4130dd8cdc55ea294ec39f76f2bc507a0f75f4f873e38631a836ca7","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"cf86de1054b843e484a3c9300d62fbc8c97e77f168bbffb131d560ca0474d4a8","impliedFormat":1},{"version":"37f7b8e560025858aae5195ca74a3e95ecd55591e2babc0acd57bc1dab4ea8ea","impliedFormat":1},{"version":"e2d5483c9a79900ba9d6012135f18b662b3ca1d33fde4f5e39b71f74e47d6331","impliedFormat":1},{"version":"22b9fab85e85b95f6378b5a2bd43c9d2e15106d760e0e58111c416fe224cc76f","impliedFormat":1},{"version":"fc46f093d1b754a8e3e34a071a1dd402f42003927676757a9a10c6f1d195a35b","impliedFormat":1},{"version":"b7b3258e8d47333721f9d4c287361d773f8fa88e52d1148812485d9fc06d2577","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"49e567e0aa388ab416eeb7a7de9bce5045a7b628bad18d1f6fa9d3eacee7bc3f","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"87eaecac33864ecec8972b1773c5d897f0f589deb7ac8fe0dcdf4b721b06e28d","impliedFormat":1},{"version":"47e5af2a841356a961f815e7c55d72554db0c11b4cba4d0caab91f8717846a94","impliedFormat":1},{"version":"4c91cc1ab59b55d880877ccf1999ded0bb2ebc8e3a597c622962d65bf0e76be8","impliedFormat":1},{"version":"fa1ea09d3e073252eccff2f6630a4ce5633cc2ff963ba672dd8fd6783108ea83","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"309816cd6e597f4d4b080bc5e36215c6b78196f744d578adf61589bee5fd7eea","impliedFormat":1},{"version":"bdb44eca306ff5b62bcf2b4e70e96a40987e018029d95565e2f234aad80830cf","impliedFormat":1},{"version":"edaa0bbf2891b17f904a67aef7f9d53371c993fe3ff6dec708c2aff6083b01af","impliedFormat":1},{"version":"89aece12f9cd6d736ae7c350800f257a2363f6322ae8f998da73153fb405d8af","impliedFormat":1},{"version":"d23518a5f155f1a3e07214baf0295687507122ae2e6e9bd5e772551ebd4b3157","impliedFormat":1},{"version":"aa9a92be255ec97f669ea89678fafcbd35d165f65b68ff22685263f6eaeb3c9c","impliedFormat":1},{"version":"fa8b514302736759e491d3df074a61f54ed1a6a69b4aadee05dbcdda53f881c3","impliedFormat":1},{"version":"e8da637cbd6ed1cf6c36e9424f6bcee4515ca2c677534d4006cbd9a05f930f0c","impliedFormat":1},{"version":"ca1b882a105a1972f82cc58e3be491e7d750a1eb074ffd13b198269f57ed9e1b","impliedFormat":1},{"version":"c9d71f340f1a4576cd2a572f73a54dc7212161fa172dfe3dea64ac627c8fcb50","impliedFormat":1},{"version":"3867ca0e9757cc41e04248574f4f07b8f9e3c0c2a796a5eb091c65bfd2fc8bdb","impliedFormat":1},{"version":"6c66f6f7d9ff019a644ff50dd013e6bf59be4bf389092948437efa6b77dc8f9a","impliedFormat":1},{"version":"4e10622f89fea7b05dd9b52fb65e1e2b5cbd96d4cca3d9e1a60bb7f8a9cb86a1","impliedFormat":1},{"version":"ef2d1bd01d144d426b72db3744e7a6b6bb518a639d5c9c8d86438fb75a3b1934","impliedFormat":1},{"version":"b9750fe7235da7d8bf75cb171bf067b7350380c74271d3f80f49aea7466b55b5","impliedFormat":1},{"version":"ac60bbee0d4235643cc52b57768b22de8c257c12bd8c2039860540cab1fa1d82","impliedFormat":1},{"version":"973b59a17aaa817eb205baf6c132b83475a5c0a44e8294a472af7793b1817e89","impliedFormat":1},{"version":"ada39cbb2748ab2873b7835c90c8d4620723aedf323550e8489f08220e477c7f","impliedFormat":1},{"version":"6e5f5cee603d67ee1ba6120815497909b73399842254fc1e77a0d5cdc51d8c9c","impliedFormat":1},{"version":"f79e0681538ef94c273a46bb1a073b4fe9fdc93ef7f40cc2c3abd683b85f51fc","impliedFormat":1},{"version":"70f3814c457f54a7efe2d9ce9d2686de9250bb42eb7f4c539bd2280a42e52d33","impliedFormat":1},{"version":"17ace83a5bea3f1da7e0aef7aab0f52bca22619e243537a83a89352a611b837d","impliedFormat":1},{"version":"ef61792acbfa8c27c9bd113f02731e66229f7d3a169e3c1993b508134f1a58e0","impliedFormat":1},{"version":"6cf2d240d4e449ccfee82aff7ce0fd1890c1b6d4f144ec003aa51f7f70f68935","impliedFormat":1},{"version":"f6404e7837b96da3ea4d38c4f1a3812c96c9dcdf264e93d5bdb199f983a3ef4b","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1dc574e42493e8bf9bb37be44d9e38c5bd7bbc04f884e5e58b4d69636cb192b3","impliedFormat":1},{"version":"9deab571c42ed535c17054f35da5b735d93dc454d83c9a5330ecc7a4fb184e9e","affectsGlobalScope":true,"impliedFormat":1},{"version":"db01d18853469bcb5601b9fc9826931cc84cc1a1944b33cad76fd6f1e3d8c544","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b8e8c0331a0c2e9fb53b8b0d346e44a8db8c788dae727a2c52f4cf3bd857f0d","impliedFormat":1},{"version":"903e299a28282fa7b714586e28409ed73c3b63f5365519776bf78e8cf173db36","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"dd3900b24a6a8745efeb7ad27629c0f8a626470ac229c1d73f1fe29d67e44dca","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"ec29be0737d39268696edcec4f5e97ce26f449fa9b7afc2f0f99a86def34a418","impliedFormat":1},{"version":"8945919709e0c6069c32ca26a675a0de90fd2ad70d5bc3ba281c628729a0c39d","impliedFormat":1},{"version":"ec6cba1c02c675e4dd173251b156792e8d3b0c816af6d6ad93f1a55d674591aa","impliedFormat":1},{"version":"763ee3998716d599321e34b7f7e93a8e57bef751206325226ebf088bf75ea460","impliedFormat":1},{"version":"e15d3c84d5077bb4a3adee4c791022967b764dc41cb8fa3cfa44d4379b2c95f5","impliedFormat":1},{"version":"3556cfbab7b43da96d15a442ddbb970e1f2fc97876d055b6555d86d7ac57dae5","impliedFormat":1},{"version":"437751e0352c6e924ddf30e90849f1d9eb00ca78c94d58d6a37202ec84eb8393","impliedFormat":1},{"version":"48e8af7fdb2677a44522fd185d8c87deff4d36ee701ea003c6c780b1407a1397","impliedFormat":1},{"version":"606e6f841ba9667de5d83ca458449f0ed8c511ba635f753eaa731e532dea98c7","impliedFormat":1},{"version":"7c0d4fc71fe32cedb758c7e3c08715235a51e5a22d184306a59dae10a9c7ffaa","impliedFormat":1},{"version":"ce8a0b21e80cf5f10adc9336b46ffc666696d1373a763b170baf69a722f85d67","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"13283350547389802aa35d9f2188effaeac805499169a06ef5cd77ce2a0bd63f","impliedFormat":1},{"version":"680793958f6a70a44c8d9ae7d46b7a385361c69ac29dcab3ed761edce1c14ab8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"baeffe1b7d836196d497eb755699718deb729a2033078a018f037a14ecaeb9a7","impliedFormat":1},{"version":"39da0a8478aede3a55308089e231c5966b2196e7201494280b1e19f8ec8e24d4","impliedFormat":1},{"version":"90be1a7f573bad71331ff10deeadce25b09034d3d27011c2155bcb9cb9800b7f","impliedFormat":1},{"version":"bc7221c9a8dc71587ff784120f7707985627282dad0a99439e893a1588651ef0","impliedFormat":1},{"version":"438c7513b1df91dcef49b13cd7a1c4720f91a36e88c1df731661608b7c055f10","impliedFormat":1},{"version":"ad444a874f011d3a797f1a41579dbfcc6b246623f49c20009f60e211dbd5315e","impliedFormat":1},{"version":"1124613ba0669e7ea5fb785ede1c3f254ed1968335468b048b8fc35c172393de","impliedFormat":1},{"version":"5fa139523e35fd907f3dd6c2e38ef2066687b27ed88e2680783e05662355ac04","impliedFormat":1},{"version":"9c250db4bab4f78fad08be7f4e43e962cc143e0f78763831653549ceb477344a","impliedFormat":1},{"version":"9385cdc09850950bc9b59cca445a3ceb6fcca32b54e7b626e746912e489e535e","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"db7c948e2e69559324be7628cb63296ec8986d60f26173f9e324aeb8a2fe23d8","impliedFormat":1},{"version":"9c2353ef1fb353a1c8f30af2cf104f0bc64ebc2fcdb98c2834d451bd654664ab","impliedFormat":1},{"version":"63a8e96f65a22604eae82737e409d1536e69a467bb738bec505f4f97cce9d878","impliedFormat":1},{"version":"3fd78152a7031315478f159c6a5872c712ece6f01212c78ea82aef21cb0726e2","impliedFormat":1},{"version":"7fda4c0e3f50513286029633c458ee82cee563cd6af20b92e43b4425c969c146","impliedFormat":1},{"version":"cda4052f66b1e6cb7cf1fdfd96335d1627aa24a3b8b82ba4a9f873ec3a7bcde8","impliedFormat":1},{"version":"703733dde084b7e856f5940f9c3c12007ca62858accb9482c2b65e030877702d","impliedFormat":1},{"version":"413cb597cc5933562ec064bfb1c3a9164ef5d2f09e5f6b7bd19f483d5352449e","impliedFormat":1},{"version":"fd933f824347f9edd919618a76cdb6a0c0085c538115d9a287fa0c7f59957ab3","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"6a1aa3e55bdc50503956c5cd09ae4cd72e3072692d742816f65c66ca14f4dfdd","impliedFormat":1},{"version":"ab75cfd9c4f93ffd601f7ca1753d6a9d953bbedfbd7a5b3f0436ac8a1de60dfa","impliedFormat":1},{"version":"6cc79183c88040697e1552ba81c5245b0c701b965623774587c4b9d1e7497278","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"1364f64d2fb03bbb514edc42224abd576c064f89be6a990136774ecdd881a1da","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"950fb67a59be4c2dbe69a5786292e60a5cb0e8612e0e223537784c731af55db1","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"07ca44e8d8288e69afdec7a31fa408ce6ab90d4f3d620006701d5544646da6aa","impliedFormat":1},{"version":"82c27d4cf380b0e6cd62628f069b850298d20051f0b7b0a1904fdb38c53fa7a6","impliedFormat":1},{"version":"c97b9278c8ce212c1bdf4fae9c77d58c15565d4ebf663d761a9deb924b6ca8b3","impliedFormat":1},{"version":"8bb6e7ce91ec84336203e87010b1198514548c2e44789752c1741eaac02f2431","impliedFormat":1},{"version":"b33ac7d8d7d1bfc8cc06c75d1ee186d21577ab2026f482e29babe32b10b26512","impliedFormat":1},{"version":"24f8f342c14c911eedfee43074c6a0d0a5ebb5ec984353bffaeadddb3f6a6b1c","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"03d4a10c21ac451b682246f3261b769247baf774c4878551c02256ae98299b1c","impliedFormat":1},{"version":"2d9b710fee8c3d7eabee626af8fd6ec2cf6f71e6b7429b307b8f67d70b1707c5","impliedFormat":1},{"version":"652a4bbefba6aa309bfc3063f59ed1a2e739c1d802273b0e6e0aa7082659f3b3","impliedFormat":1},{"version":"d7ca19bfb1ba4c3ef59d43bd7cd3719d8c5ffb60a9b6f402dee4e229f4d921aa","impliedFormat":1},{"version":"0c0a85a19b60f2ec18a32ff051bb1423860977a16b645dbf159baa7202bc633b","impliedFormat":1},{"version":"fc5bdc1d13667041055811568043956c75150923d8b9a32b989ac7588418ce47","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"d3b290cc3c08cbde2b463df2616b948fb32733dafe3ac29b9e6ded26baee5489","impliedFormat":1},{"version":"94404c4a878fe291e7578a2a80264c6f18e9f1933fbb57e48f0eb368672e389c","impliedFormat":1},{"version":"5c1b7f03aa88be854bc15810bfd5bd5a1943c5a7620e1c53eddd2a013996343e","impliedFormat":1},{"version":"f416c9c3eee9d47ff49132c34f96b9180e50485d435d5748f0e8b72521d28d2e","impliedFormat":1},{"version":"9558d365d0e72b6d9bd8c1742fe1185f983965c6d2eff88a117a59b9f51d3c5f","impliedFormat":1},{"version":"6cc2961fbe8d32e34fd4c7f1b7045353016fff50df98bc31af7c7d1b4b6eb552","impliedFormat":1},{"version":"01aa917531e116485beca44a14970834687b857757159769c16b228eb1e49c5f","impliedFormat":1},{"version":"a2e1f7010ae5f746b937621840cb87dee9eeb69188d32880bd9752029084212c","impliedFormat":1},{"version":"dd30eb34b5c4597a568de0efb8b34e328c224648c258759ac541beb16256ffb6","impliedFormat":1},{"version":"6129bd7098131a0e346352901bc8d461a76d0568686bb0e1f8499df91fde8a1f","impliedFormat":1},{"version":"7cd7923a36835c1194a92b808068a524c4e7c0ff7bdc8712865800e6963d75da","impliedFormat":1},{"version":"82200d39d66c91f502f74c85db8c7a8d56cfc361c20d7da6d7b68a4eeaaefbf4","impliedFormat":1},{"version":"741067675daa6d4334a2dc80a4452ca3850e89d5852e330db7cb2b5f867173b1","impliedFormat":1},{"version":"a1c8542ed1189091dd39e732e4390882a9bcd15c0ca093f6e9483eba4e37573f","impliedFormat":1},{"version":"131b1475d2045f20fb9f43b7aa6b7cb51f25250b5e4c6a1d4aa3cf4dd1a68793","impliedFormat":1},{"version":"3a17f09634c50cce884721f54fd9e7b98e03ac505889c560876291fcf8a09e90","impliedFormat":1},{"version":"32531dfbb0cdc4525296648f53b2b5c39b64282791e2a8c765712e49e6461046","impliedFormat":1},{"version":"0ce1b2237c1c3df49748d61568160d780d7b26693bd9feb3acb0744a152cd86d","impliedFormat":1},{"version":"e489985388e2c71d3542612685b4a7db326922b57ac880f299da7026a4e8a117","impliedFormat":1},{"version":"76264a4df0b7c78b7b12dfaedc05d9f1016f27be1f3d0836417686ff6757f659","impliedFormat":1},{"version":"c0fabd699e6e0b6bfc1728c048e52737b73fb6609eeeae0f7f4775ff14ff2df6","affectsGlobalScope":true,"impliedFormat":1},{"version":"fd1b9d883b9446f1e1da1e1033a6a98995c25fbf3c10818a78960e2f2917d10c","impliedFormat":1},{"version":"19252079538942a69be1645e153f7dbbc1ef56b4f983c633bf31fe26aeac32cd","impliedFormat":1},{"version":"4dd4f6e28afc1ee30ce76ffc659d19e14dff29cb19b7747610ada3535b7409af","impliedFormat":1},{"version":"1640728521f6ab040fc4a85edd2557193839d0cd0e41c02004fc8d415363d4e2","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"ec9fd890d681789cb0aa9efbc50b1e0afe76fbf3c49c3ac50ff80e90e29c6bcb","impliedFormat":1},{"version":"5fbd292aa08208ae99bf06d5da63321fdc768ee43a7a104980963100a3841752","impliedFormat":1},{"version":"9eac5a6beea91cfb119688bf44a5688b129b804ede186e5e2413572a534c21bb","impliedFormat":1},{"version":"e81bf06c0600517d8f04cc5de398c28738bfdf04c91fb42ad835bfe6b0d63a23","impliedFormat":1},{"version":"363996fe13c513a7793aa28ffb05b5d0230db2b3d21b7bfaf21f79e4cde54b4e","impliedFormat":1},{"version":"b7fff2d004c5879cae335db8f954eb1d61242d9f2d28515e67902032723caeab","impliedFormat":1},{"version":"5f3dc10ae646f375776b4e028d2bed039a93eebbba105694d8b910feebbe8b9c","impliedFormat":1},{"version":"7f6c48cacd08c1b1e29737b8221b7661e6b855767f8778f9a181fa2f74c09d21","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"15959543f93f27e8e2b1a012fe28e14b682034757e2d7a6c1f02f87107fc731e","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"4e828bf688597c32905215785730cbdb603b54e284d472a23fc0195c6d4aeee8","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"4da80db9ed5a1a20fd5bfce863dd178b8928bcaf4a3d75e8657bcae32e572ede","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"f72ee46ae3f73e6c5ff0da682177251d80500dd423bfd50286124cd0ca11e160","impliedFormat":1},{"version":"898b714aad9cfd0e546d1ad2c031571de7622bd0f9606a499bee193cf5e7cf0c","impliedFormat":1},{"version":"d707fb7ca32930495019a4c85500385f6850c785ee0987a1b6bcad6ade95235e","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"5d26aae738fa3efc87c24f6e5ec07c54694e6bcf431cc38d3da7576d6bb35bd6","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"e0aa1079d58134e55ad2f73508ad1be565a975f2247245d76c64c1ca9e5e5b26","impliedFormat":1},{"version":"cd0c5af42811a4a56a0f77856cfa6c170278e9522888db715b11f176df3ff1f2","impliedFormat":1},{"version":"68f81dad9e8d7b7aa15f35607a70c8b68798cf579ac44bd85325b8e2f1fb3600","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"94fd3ce628bd94a2caf431e8d85901dbe3a64ab52c0bd1dbe498f63ca18789f7","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"c0eeaaa67c85c3bb6c52b629ebbfd3b2292dc67e8c0ffda2fc6cd2f78dc471e6","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"2470a2412a59c6177cd4408dd7edb099ca7ace68c0187f54187dfee56dc9c5aa","impliedFormat":99},{"version":"c2008605e78208cfa9cd70bd29856b72dda7ad89df5dc895920f8e10bcb9cd0a","impliedFormat":99},{"version":"ec61ebac4d71c4698318673efbb5c481a6c4d374da8d285f6557541a5bd318d0","impliedFormat":99},{"version":"16fd66ae997b2f01c972531239da90fbf8ab4022bb145b9587ef746f6cecde5a","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc8fbee8f73bf5ffd6ba08ba1c554d6f714c49cae5b5e984afd545ab1b7abe06","affectsGlobalScope":true,"impliedFormat":1},{"version":"3586f5ea3cc27083a17bd5c9059ede9421d587286d5a47f4341a4c2d00e4fa91","impliedFormat":1},{"version":"521fc35a732f1a19f5d52024c2c22e257aa63258554968f7806a823be2f82b03","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},"9269d492817e359123ac64c8205e5d05dab63d71a3a7a229e68b5d9a0e8150bf",{"version":"1d7ee0c4eb734d59b6d962bc9151f6330895067cd3058ce6a3cd95347ef5c6e8","impliedFormat":99},"a566e2b6feefb212532dbf7b1f7c543400a48b88f506185c78a2b1b3346bcb94","a65f3463e8230a2c2afb8e73fb8ae5125f7b45c136d5e3a45118b37af3a742f1","0fce8a9bd25cb14b8c3e3577883596593a377c3ec2cc775040b625f442b35e38",{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"1b61d562dbf8295515b0f1016ea7b719e46847621988f7420785e5c8668ca790","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},"4fbe10827677dbf172fc1ef5eae3b45200989f8772d7ef130ca37fdcd0b3c9b0","8bf5182f42ea17acad008ff41e3c0943185e67966fb08da0d96851dbd992aa6e","ee46c526e4a0119c3e8e4edc5f2281d4180b8f1ba0cc01c840f7aff9592b299e","8eda331cd98719945603ff749b1fc960c5e75c7b14850c2c6387405e0f6ea3ce","f08c967d1e8618060baaa840dd0e1c8a31cdc682416af116d32fda7d78b76ace","643d1e7ab97b00511e679d32f416efd7f257a898c20ce62f5d84c02b2580e228","53fb9b3a127f1f5851727985e87e0a78cd05ce331fd219d04f61597a1fe61ecc","a3ae331b28da7fed70f45e76ac849a9a96590bfe887d0b2a5e3b290640b84f62","22172a7dd2af03e315c9397e405bb131ce102e20df29459a4f7102c2ecbf1936","f504cf4209a269abe867e196d17643a8ad2486b6e81aa445b798f207df9e4754","c8b5c582d586e5fdccb981f47f156c76d9c51135c89fce38d7ae9fcc4862bd77",{"version":"882b28abe64dae4932c83ebb71e4155da340929fe08a2055f3e573ef17f70fc3","impliedFormat":1},{"version":"4a3e425808751200a7709671667ad3d7e7cbfd0a06d469cab42adf06c2601f4a","impliedFormat":1},{"version":"401da46338f5b4f97c2a5f8a0faaace045c51aabd751d2dc704159f64feafe89","impliedFormat":1},{"version":"4e6da006f3a74377f1801ef8cbd771f82ead12d4326d4429661524aca2e21493","impliedFormat":1},"aa8271711822ca11b2a93dadcc5388e76cc831f36ec6f667a4adfe6b8d96ef15","7f7b1e8ca49215c664fe630e3fcf34ec330fd64eac520235feb3a6d416368da0",{"version":"0df0328e1d6fa94b862e92274c04c7525dac215d9e105cb69bbee5efec757ff2","signature":"703a456a5fee7187360999c507a5ce62b9c4f694accc8ba75a9f78e34a48f5c1"},"6768e3e329e6bc1783aba6094e0e3e79b9bff870083fc41140eebb59ed5e142e","610acb31f93b31227adfa9a4f08e7b9baacf3309fd41b2208c38e8f040f3f332","2985f518fc2f1ede4d3a86a6af0231221801782be233503c2c14cfb8595408e8","bf520bf187e4f515feaa449892b92f8a7ec52fa60b5b634fd1ea0f3a987561e8","3a9ddcd2de323bcab6fdc8b2a47be44b92a57121db0dc51ec4929b59e3b8acb5","3cdd575aba8e4aad238f5c4becd78ef51c58c9e2872522f349a1e809b0125f77",{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"42979633ab57d6cc7837b15be8c44c2087a264d5f2ca976afed684bee0925468","impliedFormat":99},{"version":"9ff2a497ed72414497eeb0aa15df6ab0c9931c111b64de651909ce0a87ecd652","signature":"eee31bd8d56d2f89a7fb9cd733d6f62fb36f8c42bdb349d7a12fd115dc9b86cc"},{"version":"2c3b8be03577c98530ef9cb1a76e2c812636a871f367e9edf4c5f3ce702b77f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ecec8f82ddf42db544c8320eddf7f09a9a788723f7473e82e903401a3d14d488","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1}],"root":[350,[352,354],[358,368],[373,381],384],"options":{"allowJs":true,"esModuleInterop":true,"jsx":1,"module":99,"skipLibCheck":true,"strict":true,"target":1},"referencedMap":[[350,1],[307,2],[386,3],[387,2],[103,4],[104,4],[105,5],[64,6],[106,7],[107,8],[108,9],[59,2],[62,10],[60,2],[61,2],[109,11],[110,12],[111,13],[112,14],[113,15],[114,16],[115,16],[117,2],[116,17],[118,18],[119,19],[120,20],[102,21],[63,2],[121,22],[122,23],[123,24],[155,25],[124,26],[125,27],[126,28],[127,29],[128,30],[129,31],[130,32],[131,33],[132,34],[133,35],[134,35],[135,36],[136,2],[137,37],[139,38],[138,39],[140,40],[141,41],[142,42],[143,43],[144,44],[145,45],[146,46],[147,47],[148,48],[149,49],[150,50],[151,51],[152,52],[153,53],[154,54],[51,2],[160,55],[161,56],[159,57],[157,58],[158,59],[49,2],[52,60],[385,61],[382,2],[351,2],[50,2],[383,61],[370,62],[369,2],[371,63],[58,64],[310,65],[315,66],[317,67],[179,68],[184,69],[283,70],[254,71],[262,72],[281,73],[180,74],[228,2],[229,75],[282,76],[205,77],[181,78],[209,77],[199,77],[166,77],[246,79],[171,2],[243,80],[241,81],[188,2],[244,82],[334,83],[252,57],[333,2],[332,84],[245,57],[234,85],[242,86],[257,87],[258,88],[249,2],[189,89],[247,2],[248,57],[327,90],[330,91],[216,92],[215,93],[214,94],[337,57],[213,95],[193,2],[340,2],[356,96],[355,2],[343,2],[342,57],[344,97],[162,2],[277,2],[164,98],[298,2],[299,2],[301,2],[304,99],[300,2],[302,100],[303,100],[183,2],[309,95],[318,101],[322,102],[175,103],[236,104],[235,2],[253,105],[250,2],[251,2],[256,106],[232,107],[174,108],[203,109],[274,110],[167,111],[173,112],[163,113],[285,114],[296,115],[284,2],[295,116],[204,2],[191,117],[271,118],[270,2],[273,119],[272,119],[225,120],[210,120],[265,121],[211,121],[169,122],[168,2],[269,123],[268,124],[267,125],[266,126],[170,127],[240,128],[255,129],[239,130],[261,131],[263,132],[260,130],[206,127],[156,2],[275,133],[230,134],[294,135],[187,136],[289,137],[182,2],[290,138],[292,139],[293,140],[288,2],[287,111],[207,141],[276,142],[297,143],[176,2],[178,2],[190,144],[264,145],[172,146],[177,2],[186,147],[185,148],[192,149],[233,150],[231,84],[194,151],[196,152],[341,2],[195,153],[197,154],[312,2],[313,2],[311,2],[314,2],[339,2],[198,155],[238,57],[57,2],[259,156],[217,2],[227,157],[320,57],[326,158],[224,57],[324,57],[223,159],[306,160],[222,158],[165,2],[328,161],[220,57],[221,57],[212,2],[226,2],[219,162],[218,163],[208,164],[202,165],[291,2],[201,166],[200,2],[316,2],[237,57],[308,167],[48,2],[56,168],[53,57],[54,2],[55,2],[286,169],[280,170],[278,2],[279,171],[319,172],[321,173],[323,174],[357,175],[325,176],[349,177],[329,177],[348,178],[331,179],[335,180],[336,181],[338,182],[345,183],[347,2],[346,184],[305,185],[372,186],[46,2],[47,2],[8,2],[9,2],[11,2],[10,2],[2,2],[12,2],[13,2],[14,2],[15,2],[16,2],[17,2],[18,2],[19,2],[3,2],[20,2],[21,2],[4,2],[22,2],[26,2],[23,2],[24,2],[25,2],[27,2],[28,2],[29,2],[5,2],[30,2],[31,2],[32,2],[33,2],[6,2],[37,2],[34,2],[35,2],[36,2],[38,2],[7,2],[39,2],[44,2],[45,2],[40,2],[41,2],[42,2],[43,2],[1,2],[80,187],[90,188],[79,187],[100,189],[71,190],[70,191],[99,184],[93,192],[98,193],[73,194],[87,195],[72,196],[96,197],[68,198],[67,184],[97,199],[69,200],[74,201],[75,2],[78,201],[65,2],[101,202],[91,203],[82,204],[83,205],[85,206],[81,207],[84,208],[94,184],[76,209],[77,210],[86,211],[66,212],[89,203],[88,201],[92,2],[95,213],[374,214],[375,215],[359,216],[378,217],[379,218],[361,219],[380,220],[384,221],[365,222],[363,223],[364,219],[368,224],[376,225],[381,57],[377,226],[367,227],[362,228],[373,229],[366,57],[360,2],[358,227],[353,230],[354,57],[352,2]],"affectedFilesPendingEmit":[374,375,359,378,379,361,380,384,365,363,364,368,376,381,377,367,362,373,366,360,358,353,354,352],"version":"5.8.3"} \ No newline at end of file +{"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.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.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.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.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.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.es2020.number.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/shared/lib/amp.d.ts","./node_modules/next/amp.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.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/dom-events.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/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.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/test.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/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/future/route-kind.d.ts","./node_modules/next/dist/server/future/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/future/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/lib/revalidate.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/client/components/static-generation-async-storage.external.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/future/helpers/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/font-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/server/future/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/future/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/future/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/client/components/request-async-storage.external.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/amp-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.d.ts","./node_modules/next/dist/client/components/app-router.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/action-async-storage.external.d.ts","./node_modules/next/dist/client/components/static-generation-bailout.d.ts","./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.d.ts","./node_modules/next/dist/client/components/searchparams-bailout-proxy.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/client/components/not-found-boundary.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/future/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/future/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/server/future/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/future/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/future/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/future/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/future/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/future/normalizers/normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/future/normalizers/request/postponed.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/webpack/plugins/define-env-plugin.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/types/index.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate-path.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate-tag.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/shared/lib/runtime-config.external.d.ts","./node_modules/next/config.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./next-env.d.ts","./node_modules/axios/index.d.ts","./src/types/api.ts","./src/lib/api.ts","./src/lib/theme.ts","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./src/contexts/authcontext.tsx","./src/app/layout.tsx","./src/components/ui/loadingspinner.tsx","./src/app/page.tsx","./src/components/ui/button.tsx","./src/components/layout/header.tsx","./src/components/layout/protectedroute.tsx","./src/components/layout/applayout.tsx","./src/components/ui/input.tsx","./src/components/stories/taginput.tsx","./src/components/stories/richtexteditor.tsx","./node_modules/file-selector/dist/file.d.ts","./node_modules/file-selector/dist/file-selector.d.ts","./node_modules/file-selector/dist/index.d.ts","./node_modules/react-dropzone/typings/react-dropzone.d.ts","./src/components/ui/imageupload.tsx","./src/app/add-story/page.tsx","./src/app/authors/page.tsx","./src/components/stories/storycard.tsx","./src/app/authors/[id]/page.tsx","./src/app/authors/[id]/edit/page.tsx","./src/components/stories/tagfilter.tsx","./src/app/library/page.tsx","./src/app/login/page.tsx","./src/app/settings/page.tsx","./src/components/stories/storyrating.tsx","./node_modules/@types/trusted-types/lib/index.d.ts","./node_modules/dompurify/dist/purify.es.d.mts","./src/app/stories/[id]/page.tsx","./src/app/stories/[id]/detail/page.tsx","./src/app/stories/[id]/edit/page.tsx","./.next/types/app/page.ts","./.next/types/app/add-story/page.ts","./.next/types/app/authors/page.ts","./.next/types/app/library/page.ts","./.next/types/app/login/page.ts","./.next/types/app/settings/page.ts","./.next/types/app/stories/[id]/page.ts","./node_modules/@types/trusted-types/index.d.ts","./node_modules/@types/dompurify/index.d.ts","./node_modules/@types/json5/index.d.ts"],"fileIdsList":[[64,106,304,374],[64,106,304,375],[64,106,304,380],[64,106,304,381],[64,106,304,361],[64,106,304,382],[64,106,304,386],[64,106,348,349],[64,106],[64,106,396],[64,103,106],[64,105,106],[106],[64,106,111,140],[64,106,107,112,118,119,126,137,148],[64,106,107,108,118,126],[59,60,61,64,106],[64,106,109,149],[64,106,110,111,119,127],[64,106,111,137,145],[64,106,112,114,118,126],[64,105,106,113],[64,106,114,115],[64,106,116,118],[64,105,106,118],[64,106,118,119,120,137,148],[64,106,118,119,120,133,137,140],[64,101,106],[64,106,114,118,121,126,137,148],[64,106,118,119,121,122,126,137,145,148],[64,106,121,123,137,145,148],[62,63,64,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154],[64,106,118,124],[64,106,125,148,153],[64,106,114,118,126,137],[64,106,127],[64,106,128],[64,105,106,129],[64,103,104,105,106,107,108,109,110,111,112,113,114,115,116,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],[64,106,131],[64,106,132],[64,106,118,133,134],[64,106,133,135,149,151],[64,106,118,137,138,140],[64,106,139,140],[64,106,137,138],[64,106,140],[64,106,141],[64,103,106,137,142],[64,106,118,143,144],[64,106,143,144],[64,106,111,126,137,145],[64,106,146],[64,106,126,147],[64,106,121,132,148],[64,106,111,149],[64,106,137,150],[64,106,125,151],[64,106,152],[64,106,118,120,129,137,140,148,151,153],[64,106,137,154],[52,64,106,159,160,161],[52,64,106,159,160],[52,64,106],[52,56,64,106,158,305,344],[52,56,64,106,157,305,344],[49,50,51,64,106],[64,106,384],[64,106,369],[64,106,369,370],[57,64,106],[64,106,309],[64,106,311,312,313,314],[64,106,316],[64,106,164,173,180,305],[64,106,164,171,175,182],[64,106,173,282],[64,106,230,240,253,347],[64,106,261],[64,106,164,173,179,217,227,280,347],[64,106,179,347],[64,106,173,227,228,347],[64,106,173,179,217,347],[64,106,347],[64,106,179,180,347],[64,105,106,155],[52,64,106,241,242,258],[52,64,106,158],[52,64,106,241,256],[64,106,237,259,332,333],[64,106,194],[64,105,106,155,194,231,232,233],[52,64,106,256,259],[64,106,256,258],[52,64,106,256,257,259],[64,105,106,155,174,187,188],[52,64,106,165,326],[52,64,106,148,155],[52,64,106,179,215],[52,64,106,179],[64,106,213,218],[52,64,106,214,308],[64,106,355],[52,56,64,106,121,155,157,158,305,342,343],[64,106,163],[64,106,298,299,300,301,302,303],[64,106,300],[52,64,106,306,308],[52,64,106,308],[64,106,121,155,174,308],[64,106,121,155,172,189,190,205,234,235,255,256],[64,106,188,189,234,243,244,245,246,247,248,249,250,251,252,347],[52,64,106,132,155,173,187,205,207,209,255,305,347],[64,106,121,155,174,175,194,195,231],[64,106,121,155,173,175],[64,106,121,137,155,172,174,175],[64,106,121,132,148,155,163,165,172,173,174,175,179,182,184,186,187,190,191,199,201,204,205,207,208,209,256,264,266,269,271,272,273,305],[64,106,121,137,155],[64,106,164,165,166,172,305,308,347],[64,106,173],[64,106,121,137,148,155,169,281,283,284,347],[64,106,132,148,155,169,172,174,187,198,199,201,202,203,207,269,274,276,294,295],[64,106,173,177,187],[64,106,172,173],[64,106,191,270],[64,106,270],[64,106,168,169],[64,106,168,210],[64,106,168],[64,106,170,191,268],[64,106,267],[64,106,169,170],[64,106,170,265],[64,106,169],[64,106,255],[64,106,121,155,172,190,206,225,230,236,239,254,256],[64,106,219,220,221,222,223,224,237,238,259,306],[64,106,263],[64,106,121,155,172,190,206,211,260,262,264,305,308],[64,106,121,148,155,165,172,173,186],[64,106,229],[64,106,121,155,287,293],[64,106,184,186,308],[64,106,288,294,297],[64,106,121,177,287,289],[64,106,164,173,184,208,291],[64,106,121,155,173,179,208,277,285,286,290,291,292],[64,106,156,205,206,305,308],[64,106,121,132,148,155,170,172,174,177,181,182,184,186,187,190,198,199,201,202,203,204,207,266,274,275,308],[64,106,121,155,172,173,177,276,296],[64,106,121,155,182,189],[52,64,106,121,132,155,163,165,172,175,190,204,205,207,209,263,305,308],[64,106,121,132,148,155,167,170,171,174],[64,106,185],[64,106,121,155,182,190],[64,106,121,155,173,191],[64,106,121,155],[64,106,193],[64,106,195],[64,106,173,192,194,198],[64,106,173,192,194],[64,106,121,155,167,173,174,195,196,197],[52,64,106,256,257,258],[64,106,226],[52,64,106,165],[52,64,106,201],[52,64,106,156,204,209,305,308],[64,106,165,326,327],[52,64,106,218],[52,64,106,132,148,155,163,212,214,216,217,308],[64,106,174,179,201],[64,106,132,155],[64,106,200],[52,64,106,119,121,132,155,163,218,227,305,306,307],[48,52,53,54,55,64,106,157,158,305,344],[64,106,111],[64,106,278,279],[64,106,278],[64,106,318],[64,106,320],[64,106,322],[64,106,356],[64,106,324],[64,106,328],[56,58,64,106,305,310,315,317,319,321,323,325,329,331,335,336,338,345,346,347],[64,106,330],[64,106,334],[64,106,214],[64,106,337],[64,105,106,195,196,197,198,339,340,341,344],[64,106,155],[52,56,64,106,121,123,132,155,157,158,159,161,163,175,297,304,308,344],[52,64,106,371],[64,73,77,106,148],[64,73,106,137,148],[64,68,106],[64,70,73,106,145,148],[64,106,126,145],[64,68,106,155],[64,70,73,106,126,148],[64,65,66,69,72,106,118,137,148],[64,73,80,106],[64,65,71,106],[64,73,94,95,106],[64,69,73,106,140,148,155],[64,94,106,155],[64,67,68,106,155],[64,73,106],[64,67,68,69,70,71,72,73,74,75,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,95,96,97,98,99,100,106],[64,73,88,106],[64,73,80,81,106],[64,71,73,81,82,106],[64,72,106],[64,65,68,73,106],[64,73,77,81,82,106],[64,77,106],[64,71,73,76,106,148],[64,65,70,73,80,106],[64,106,137],[64,68,73,94,106,153,155],[52,64,106,335,353,362,365,366,367,368,373],[52,64,106,329,335,352,353,360,362,365,366,373],[52,64,106,329,331,335,352,353,360,362,365,376],[52,64,106,329,331,352,353,360,362,365,366],[64,106,348,357,358],[52,64,106,352,353,360,362,365,366,376,379],[52,64,106,329,335,354,358,362,366],[52,64,106,335,358,360],[52,64,106,353,354,362,365],[52,64,106,329,331,335,352,353,360,362,365],[52,64,106,335,352,353,360,362,365,366,367,368,373],[52,64,106,331,335,352,353,360,362,383,385],[64,106,363,364],[52,64,106,329,331,335,354,358,362],[52,64,106,362,366],[52,64,106,329,331,352,353,362],[64,106,352],[52,64,106,353],[52,64,106,331,360],[52,64,106,329,372],[64,106,351,352]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"0990a7576222f248f0a3b888adcb7389f957928ce2afb1cd5128169086ff4d29","impliedFormat":1},{"version":"eb5b19b86227ace1d29ea4cf81387279d04bb34051e944bc53df69f58914b788","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"472f5aab7edc498a0a761096e8e254c5bc3323d07a1e7f5f8b8ec0d6395b60a0","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc69795d9954ee4ad57545b10c7bf1a7260d990231b1685c147ea71a6faa265c","impliedFormat":1},{"version":"8bc6c94ff4f2af1f4023b7bb2379b08d3d7dd80c698c9f0b07431ea16101f05f","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"57194e1f007f3f2cbef26fa299d4c6b21f4623a2eddc63dfeef79e38e187a36e","impliedFormat":1},{"version":"0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","impliedFormat":1},{"version":"05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"49a5a44f2e68241a1d2bd9ec894535797998841c09729e506a7cbfcaa40f2180","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"1ca84b44ad1d8e4576f24904d8b95dd23b94ea67e1575f89614ac90062fc67f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d586db0a09a9495ebb5dece28f54df9684bfbd6e1f568426ca153126dac4a40","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"567b7f607f400873151d7bc63a049514b53c3c00f5f56e9e95695d93b66a138e","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"84c1930e33d1bb12ad01bcbe11d656f9646bd21b2fb2afd96e8e10615a021aef","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"2bf469abae4cc9c0f340d4e05d9d26e37f936f9c8ca8f007a6534f109dcc77e4","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4c21aaa8257d7950a5b75a251d9075b6a371208fc948c9c8402f6690ef3b5b55","impliedFormat":1},{"version":"b5895e6353a5d708f55d8685c38a235c3a6d8138e374dee8ceb8ffde5aa8002a","impliedFormat":1},{"version":"54c4f21f578864961efc94e8f42bc893a53509e886370ec7dd602e0151b9266c","impliedFormat":1},{"version":"de735eca2c51dd8b860254e9fdb6d9ec19fe402dfe597c23090841ce3937cfc5","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"5155da3047ef977944d791a2188ff6e6c225f6975cc1910ab7bb6838ab84cede","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"e16d218a30f6a6810b57f7e968124eaa08c7bb366133ea34bbf01e7cd6b8c0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb8692dea24c27821f77e397272d9ed2eda0b95e4a75beb0fdda31081d15a8ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"5b6844ad931dcc1d3aca53268f4bd671428421464b1286746027aede398094f2","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"0dbcebe2126d03936c70545e96a6e41007cf065be38a1ce4d32a39fcedefead4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"461e54289e6287e8494a0178ba18182acce51a02bca8dea219149bf2cf96f105","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"e31e51c55800014d926e3f74208af49cb7352803619855c89296074d1ecbb524","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"dfb96ba5177b68003deec9e773c47257da5c4c8a74053d8956389d832df72002","affectsGlobalScope":true,"impliedFormat":1},{"version":"92d3070580cf72b4bb80959b7f16ede9a3f39e6f4ef2ac87cfa4561844fdc69f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"613deebaec53731ff6b74fe1a89f094b708033db6396b601df3e6d5ab0ec0a47","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"e56eb632f0281c9f8210eb8c86cc4839a427a4ffffcfd2a5e40b956050b3e042","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"8caa5c86be1b793cd5f599e27ecb34252c41e011980f7d61ae4989a149ff6ccc","impliedFormat":1},{"version":"3609e455ffcba8176c8ce0aa57f8258fe10cf03987e27f1fab68f702b4426521","impliedFormat":1},{"version":"d1bd4e51810d159899aad1660ccb859da54e27e08b8c9862b40cd36c1d9ff00f","impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"1cfa8647d7d71cb03847d616bd79320abfc01ddea082a49569fda71ac5ece66b","impliedFormat":1},{"version":"bb7a61dd55dc4b9422d13da3a6bb9cc5e89be888ef23bbcf6558aa9726b89a1c","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"cfe4ef4710c3786b6e23dae7c086c70b4f4835a2e4d77b75d39f9046106e83d3","impliedFormat":1},{"version":"cbea99888785d49bb630dcbb1613c73727f2b5a2cf02e1abcaab7bcf8d6bf3c5","impliedFormat":1},{"version":"3b8f725c3d5ffb64bf876c87409686875102c6f7450b268d8f5188b6920f7c25","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"2dad084c67e649f0f354739ec7df7c7df0779a28a4f55c97c6b6883ae850d1ce","impliedFormat":1},{"version":"fa5bbc7ab4130dd8cdc55ea294ec39f76f2bc507a0f75f4f873e38631a836ca7","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"cf86de1054b843e484a3c9300d62fbc8c97e77f168bbffb131d560ca0474d4a8","impliedFormat":1},{"version":"37f7b8e560025858aae5195ca74a3e95ecd55591e2babc0acd57bc1dab4ea8ea","impliedFormat":1},{"version":"e2d5483c9a79900ba9d6012135f18b662b3ca1d33fde4f5e39b71f74e47d6331","impliedFormat":1},{"version":"22b9fab85e85b95f6378b5a2bd43c9d2e15106d760e0e58111c416fe224cc76f","impliedFormat":1},{"version":"fc46f093d1b754a8e3e34a071a1dd402f42003927676757a9a10c6f1d195a35b","impliedFormat":1},{"version":"b7b3258e8d47333721f9d4c287361d773f8fa88e52d1148812485d9fc06d2577","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"49e567e0aa388ab416eeb7a7de9bce5045a7b628bad18d1f6fa9d3eacee7bc3f","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"87eaecac33864ecec8972b1773c5d897f0f589deb7ac8fe0dcdf4b721b06e28d","impliedFormat":1},{"version":"47e5af2a841356a961f815e7c55d72554db0c11b4cba4d0caab91f8717846a94","impliedFormat":1},{"version":"4c91cc1ab59b55d880877ccf1999ded0bb2ebc8e3a597c622962d65bf0e76be8","impliedFormat":1},{"version":"fa1ea09d3e073252eccff2f6630a4ce5633cc2ff963ba672dd8fd6783108ea83","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"309816cd6e597f4d4b080bc5e36215c6b78196f744d578adf61589bee5fd7eea","impliedFormat":1},{"version":"bdb44eca306ff5b62bcf2b4e70e96a40987e018029d95565e2f234aad80830cf","impliedFormat":1},{"version":"edaa0bbf2891b17f904a67aef7f9d53371c993fe3ff6dec708c2aff6083b01af","impliedFormat":1},{"version":"89aece12f9cd6d736ae7c350800f257a2363f6322ae8f998da73153fb405d8af","impliedFormat":1},{"version":"d23518a5f155f1a3e07214baf0295687507122ae2e6e9bd5e772551ebd4b3157","impliedFormat":1},{"version":"aa9a92be255ec97f669ea89678fafcbd35d165f65b68ff22685263f6eaeb3c9c","impliedFormat":1},{"version":"fa8b514302736759e491d3df074a61f54ed1a6a69b4aadee05dbcdda53f881c3","impliedFormat":1},{"version":"e8da637cbd6ed1cf6c36e9424f6bcee4515ca2c677534d4006cbd9a05f930f0c","impliedFormat":1},{"version":"ca1b882a105a1972f82cc58e3be491e7d750a1eb074ffd13b198269f57ed9e1b","impliedFormat":1},{"version":"c9d71f340f1a4576cd2a572f73a54dc7212161fa172dfe3dea64ac627c8fcb50","impliedFormat":1},{"version":"3867ca0e9757cc41e04248574f4f07b8f9e3c0c2a796a5eb091c65bfd2fc8bdb","impliedFormat":1},{"version":"6c66f6f7d9ff019a644ff50dd013e6bf59be4bf389092948437efa6b77dc8f9a","impliedFormat":1},{"version":"4e10622f89fea7b05dd9b52fb65e1e2b5cbd96d4cca3d9e1a60bb7f8a9cb86a1","impliedFormat":1},{"version":"ef2d1bd01d144d426b72db3744e7a6b6bb518a639d5c9c8d86438fb75a3b1934","impliedFormat":1},{"version":"b9750fe7235da7d8bf75cb171bf067b7350380c74271d3f80f49aea7466b55b5","impliedFormat":1},{"version":"ac60bbee0d4235643cc52b57768b22de8c257c12bd8c2039860540cab1fa1d82","impliedFormat":1},{"version":"973b59a17aaa817eb205baf6c132b83475a5c0a44e8294a472af7793b1817e89","impliedFormat":1},{"version":"ada39cbb2748ab2873b7835c90c8d4620723aedf323550e8489f08220e477c7f","impliedFormat":1},{"version":"6e5f5cee603d67ee1ba6120815497909b73399842254fc1e77a0d5cdc51d8c9c","impliedFormat":1},{"version":"f79e0681538ef94c273a46bb1a073b4fe9fdc93ef7f40cc2c3abd683b85f51fc","impliedFormat":1},{"version":"70f3814c457f54a7efe2d9ce9d2686de9250bb42eb7f4c539bd2280a42e52d33","impliedFormat":1},{"version":"17ace83a5bea3f1da7e0aef7aab0f52bca22619e243537a83a89352a611b837d","impliedFormat":1},{"version":"ef61792acbfa8c27c9bd113f02731e66229f7d3a169e3c1993b508134f1a58e0","impliedFormat":1},{"version":"6cf2d240d4e449ccfee82aff7ce0fd1890c1b6d4f144ec003aa51f7f70f68935","impliedFormat":1},{"version":"f6404e7837b96da3ea4d38c4f1a3812c96c9dcdf264e93d5bdb199f983a3ef4b","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1dc574e42493e8bf9bb37be44d9e38c5bd7bbc04f884e5e58b4d69636cb192b3","impliedFormat":1},{"version":"9deab571c42ed535c17054f35da5b735d93dc454d83c9a5330ecc7a4fb184e9e","affectsGlobalScope":true,"impliedFormat":1},{"version":"db01d18853469bcb5601b9fc9826931cc84cc1a1944b33cad76fd6f1e3d8c544","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b8e8c0331a0c2e9fb53b8b0d346e44a8db8c788dae727a2c52f4cf3bd857f0d","impliedFormat":1},{"version":"903e299a28282fa7b714586e28409ed73c3b63f5365519776bf78e8cf173db36","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"dd3900b24a6a8745efeb7ad27629c0f8a626470ac229c1d73f1fe29d67e44dca","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"ec29be0737d39268696edcec4f5e97ce26f449fa9b7afc2f0f99a86def34a418","impliedFormat":1},{"version":"8945919709e0c6069c32ca26a675a0de90fd2ad70d5bc3ba281c628729a0c39d","impliedFormat":1},{"version":"ec6cba1c02c675e4dd173251b156792e8d3b0c816af6d6ad93f1a55d674591aa","impliedFormat":1},{"version":"763ee3998716d599321e34b7f7e93a8e57bef751206325226ebf088bf75ea460","impliedFormat":1},{"version":"e15d3c84d5077bb4a3adee4c791022967b764dc41cb8fa3cfa44d4379b2c95f5","impliedFormat":1},{"version":"3556cfbab7b43da96d15a442ddbb970e1f2fc97876d055b6555d86d7ac57dae5","impliedFormat":1},{"version":"437751e0352c6e924ddf30e90849f1d9eb00ca78c94d58d6a37202ec84eb8393","impliedFormat":1},{"version":"48e8af7fdb2677a44522fd185d8c87deff4d36ee701ea003c6c780b1407a1397","impliedFormat":1},{"version":"606e6f841ba9667de5d83ca458449f0ed8c511ba635f753eaa731e532dea98c7","impliedFormat":1},{"version":"7c0d4fc71fe32cedb758c7e3c08715235a51e5a22d184306a59dae10a9c7ffaa","impliedFormat":1},{"version":"ce8a0b21e80cf5f10adc9336b46ffc666696d1373a763b170baf69a722f85d67","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"13283350547389802aa35d9f2188effaeac805499169a06ef5cd77ce2a0bd63f","impliedFormat":1},{"version":"680793958f6a70a44c8d9ae7d46b7a385361c69ac29dcab3ed761edce1c14ab8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"baeffe1b7d836196d497eb755699718deb729a2033078a018f037a14ecaeb9a7","impliedFormat":1},{"version":"39da0a8478aede3a55308089e231c5966b2196e7201494280b1e19f8ec8e24d4","impliedFormat":1},{"version":"90be1a7f573bad71331ff10deeadce25b09034d3d27011c2155bcb9cb9800b7f","impliedFormat":1},{"version":"bc7221c9a8dc71587ff784120f7707985627282dad0a99439e893a1588651ef0","impliedFormat":1},{"version":"438c7513b1df91dcef49b13cd7a1c4720f91a36e88c1df731661608b7c055f10","impliedFormat":1},{"version":"ad444a874f011d3a797f1a41579dbfcc6b246623f49c20009f60e211dbd5315e","impliedFormat":1},{"version":"1124613ba0669e7ea5fb785ede1c3f254ed1968335468b048b8fc35c172393de","impliedFormat":1},{"version":"5fa139523e35fd907f3dd6c2e38ef2066687b27ed88e2680783e05662355ac04","impliedFormat":1},{"version":"9c250db4bab4f78fad08be7f4e43e962cc143e0f78763831653549ceb477344a","impliedFormat":1},{"version":"9385cdc09850950bc9b59cca445a3ceb6fcca32b54e7b626e746912e489e535e","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"db7c948e2e69559324be7628cb63296ec8986d60f26173f9e324aeb8a2fe23d8","impliedFormat":1},{"version":"9c2353ef1fb353a1c8f30af2cf104f0bc64ebc2fcdb98c2834d451bd654664ab","impliedFormat":1},{"version":"63a8e96f65a22604eae82737e409d1536e69a467bb738bec505f4f97cce9d878","impliedFormat":1},{"version":"3fd78152a7031315478f159c6a5872c712ece6f01212c78ea82aef21cb0726e2","impliedFormat":1},{"version":"7fda4c0e3f50513286029633c458ee82cee563cd6af20b92e43b4425c969c146","impliedFormat":1},{"version":"cda4052f66b1e6cb7cf1fdfd96335d1627aa24a3b8b82ba4a9f873ec3a7bcde8","impliedFormat":1},{"version":"703733dde084b7e856f5940f9c3c12007ca62858accb9482c2b65e030877702d","impliedFormat":1},{"version":"413cb597cc5933562ec064bfb1c3a9164ef5d2f09e5f6b7bd19f483d5352449e","impliedFormat":1},{"version":"fd933f824347f9edd919618a76cdb6a0c0085c538115d9a287fa0c7f59957ab3","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"6a1aa3e55bdc50503956c5cd09ae4cd72e3072692d742816f65c66ca14f4dfdd","impliedFormat":1},{"version":"ab75cfd9c4f93ffd601f7ca1753d6a9d953bbedfbd7a5b3f0436ac8a1de60dfa","impliedFormat":1},{"version":"6cc79183c88040697e1552ba81c5245b0c701b965623774587c4b9d1e7497278","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"1364f64d2fb03bbb514edc42224abd576c064f89be6a990136774ecdd881a1da","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"950fb67a59be4c2dbe69a5786292e60a5cb0e8612e0e223537784c731af55db1","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"07ca44e8d8288e69afdec7a31fa408ce6ab90d4f3d620006701d5544646da6aa","impliedFormat":1},{"version":"82c27d4cf380b0e6cd62628f069b850298d20051f0b7b0a1904fdb38c53fa7a6","impliedFormat":1},{"version":"c97b9278c8ce212c1bdf4fae9c77d58c15565d4ebf663d761a9deb924b6ca8b3","impliedFormat":1},{"version":"8bb6e7ce91ec84336203e87010b1198514548c2e44789752c1741eaac02f2431","impliedFormat":1},{"version":"b33ac7d8d7d1bfc8cc06c75d1ee186d21577ab2026f482e29babe32b10b26512","impliedFormat":1},{"version":"24f8f342c14c911eedfee43074c6a0d0a5ebb5ec984353bffaeadddb3f6a6b1c","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"03d4a10c21ac451b682246f3261b769247baf774c4878551c02256ae98299b1c","impliedFormat":1},{"version":"2d9b710fee8c3d7eabee626af8fd6ec2cf6f71e6b7429b307b8f67d70b1707c5","impliedFormat":1},{"version":"652a4bbefba6aa309bfc3063f59ed1a2e739c1d802273b0e6e0aa7082659f3b3","impliedFormat":1},{"version":"d7ca19bfb1ba4c3ef59d43bd7cd3719d8c5ffb60a9b6f402dee4e229f4d921aa","impliedFormat":1},{"version":"0c0a85a19b60f2ec18a32ff051bb1423860977a16b645dbf159baa7202bc633b","impliedFormat":1},{"version":"fc5bdc1d13667041055811568043956c75150923d8b9a32b989ac7588418ce47","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"d3b290cc3c08cbde2b463df2616b948fb32733dafe3ac29b9e6ded26baee5489","impliedFormat":1},{"version":"94404c4a878fe291e7578a2a80264c6f18e9f1933fbb57e48f0eb368672e389c","impliedFormat":1},{"version":"5c1b7f03aa88be854bc15810bfd5bd5a1943c5a7620e1c53eddd2a013996343e","impliedFormat":1},{"version":"f416c9c3eee9d47ff49132c34f96b9180e50485d435d5748f0e8b72521d28d2e","impliedFormat":1},{"version":"9558d365d0e72b6d9bd8c1742fe1185f983965c6d2eff88a117a59b9f51d3c5f","impliedFormat":1},{"version":"6cc2961fbe8d32e34fd4c7f1b7045353016fff50df98bc31af7c7d1b4b6eb552","impliedFormat":1},{"version":"01aa917531e116485beca44a14970834687b857757159769c16b228eb1e49c5f","impliedFormat":1},{"version":"a2e1f7010ae5f746b937621840cb87dee9eeb69188d32880bd9752029084212c","impliedFormat":1},{"version":"dd30eb34b5c4597a568de0efb8b34e328c224648c258759ac541beb16256ffb6","impliedFormat":1},{"version":"6129bd7098131a0e346352901bc8d461a76d0568686bb0e1f8499df91fde8a1f","impliedFormat":1},{"version":"7cd7923a36835c1194a92b808068a524c4e7c0ff7bdc8712865800e6963d75da","impliedFormat":1},{"version":"82200d39d66c91f502f74c85db8c7a8d56cfc361c20d7da6d7b68a4eeaaefbf4","impliedFormat":1},{"version":"741067675daa6d4334a2dc80a4452ca3850e89d5852e330db7cb2b5f867173b1","impliedFormat":1},{"version":"a1c8542ed1189091dd39e732e4390882a9bcd15c0ca093f6e9483eba4e37573f","impliedFormat":1},{"version":"131b1475d2045f20fb9f43b7aa6b7cb51f25250b5e4c6a1d4aa3cf4dd1a68793","impliedFormat":1},{"version":"3a17f09634c50cce884721f54fd9e7b98e03ac505889c560876291fcf8a09e90","impliedFormat":1},{"version":"32531dfbb0cdc4525296648f53b2b5c39b64282791e2a8c765712e49e6461046","impliedFormat":1},{"version":"0ce1b2237c1c3df49748d61568160d780d7b26693bd9feb3acb0744a152cd86d","impliedFormat":1},{"version":"e489985388e2c71d3542612685b4a7db326922b57ac880f299da7026a4e8a117","impliedFormat":1},{"version":"76264a4df0b7c78b7b12dfaedc05d9f1016f27be1f3d0836417686ff6757f659","impliedFormat":1},{"version":"c0fabd699e6e0b6bfc1728c048e52737b73fb6609eeeae0f7f4775ff14ff2df6","affectsGlobalScope":true,"impliedFormat":1},{"version":"fd1b9d883b9446f1e1da1e1033a6a98995c25fbf3c10818a78960e2f2917d10c","impliedFormat":1},{"version":"19252079538942a69be1645e153f7dbbc1ef56b4f983c633bf31fe26aeac32cd","impliedFormat":1},{"version":"4dd4f6e28afc1ee30ce76ffc659d19e14dff29cb19b7747610ada3535b7409af","impliedFormat":1},{"version":"1640728521f6ab040fc4a85edd2557193839d0cd0e41c02004fc8d415363d4e2","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"ec9fd890d681789cb0aa9efbc50b1e0afe76fbf3c49c3ac50ff80e90e29c6bcb","impliedFormat":1},{"version":"5fbd292aa08208ae99bf06d5da63321fdc768ee43a7a104980963100a3841752","impliedFormat":1},{"version":"9eac5a6beea91cfb119688bf44a5688b129b804ede186e5e2413572a534c21bb","impliedFormat":1},{"version":"e81bf06c0600517d8f04cc5de398c28738bfdf04c91fb42ad835bfe6b0d63a23","impliedFormat":1},{"version":"363996fe13c513a7793aa28ffb05b5d0230db2b3d21b7bfaf21f79e4cde54b4e","impliedFormat":1},{"version":"b7fff2d004c5879cae335db8f954eb1d61242d9f2d28515e67902032723caeab","impliedFormat":1},{"version":"5f3dc10ae646f375776b4e028d2bed039a93eebbba105694d8b910feebbe8b9c","impliedFormat":1},{"version":"7f6c48cacd08c1b1e29737b8221b7661e6b855767f8778f9a181fa2f74c09d21","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"15959543f93f27e8e2b1a012fe28e14b682034757e2d7a6c1f02f87107fc731e","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"4e828bf688597c32905215785730cbdb603b54e284d472a23fc0195c6d4aeee8","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"4da80db9ed5a1a20fd5bfce863dd178b8928bcaf4a3d75e8657bcae32e572ede","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"f72ee46ae3f73e6c5ff0da682177251d80500dd423bfd50286124cd0ca11e160","impliedFormat":1},{"version":"898b714aad9cfd0e546d1ad2c031571de7622bd0f9606a499bee193cf5e7cf0c","impliedFormat":1},{"version":"d707fb7ca32930495019a4c85500385f6850c785ee0987a1b6bcad6ade95235e","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"5d26aae738fa3efc87c24f6e5ec07c54694e6bcf431cc38d3da7576d6bb35bd6","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"e0aa1079d58134e55ad2f73508ad1be565a975f2247245d76c64c1ca9e5e5b26","impliedFormat":1},{"version":"cd0c5af42811a4a56a0f77856cfa6c170278e9522888db715b11f176df3ff1f2","impliedFormat":1},{"version":"68f81dad9e8d7b7aa15f35607a70c8b68798cf579ac44bd85325b8e2f1fb3600","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"94fd3ce628bd94a2caf431e8d85901dbe3a64ab52c0bd1dbe498f63ca18789f7","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"c0eeaaa67c85c3bb6c52b629ebbfd3b2292dc67e8c0ffda2fc6cd2f78dc471e6","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"2470a2412a59c6177cd4408dd7edb099ca7ace68c0187f54187dfee56dc9c5aa","impliedFormat":99},{"version":"c2008605e78208cfa9cd70bd29856b72dda7ad89df5dc895920f8e10bcb9cd0a","impliedFormat":99},{"version":"ec61ebac4d71c4698318673efbb5c481a6c4d374da8d285f6557541a5bd318d0","impliedFormat":99},{"version":"16fd66ae997b2f01c972531239da90fbf8ab4022bb145b9587ef746f6cecde5a","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc8fbee8f73bf5ffd6ba08ba1c554d6f714c49cae5b5e984afd545ab1b7abe06","affectsGlobalScope":true,"impliedFormat":1},{"version":"3586f5ea3cc27083a17bd5c9059ede9421d587286d5a47f4341a4c2d00e4fa91","impliedFormat":1},{"version":"521fc35a732f1a19f5d52024c2c22e257aa63258554968f7806a823be2f82b03","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},"9269d492817e359123ac64c8205e5d05dab63d71a3a7a229e68b5d9a0e8150bf",{"version":"1d7ee0c4eb734d59b6d962bc9151f6330895067cd3058ce6a3cd95347ef5c6e8","impliedFormat":99},{"version":"43a7f3c6de6e972445d287a17c542b99ead3e13c154ba76c900520323c9df11a","signature":"03044ed51a4e9b987b4f2f64c0a039f17e3a2247029f012cccad57115b94575a"},{"version":"46b640758b4475959acafe243832625bf0650270886ecd314de195457920d4ee","signature":"e870b88e2210a0ba8b6596c3850d74e407513a89e9d8c9cd11302b645c6dc572"},"0fce8a9bd25cb14b8c3e3577883596593a377c3ec2cc775040b625f442b35e38",{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"1b61d562dbf8295515b0f1016ea7b719e46847621988f7420785e5c8668ca790","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},"4fbe10827677dbf172fc1ef5eae3b45200989f8772d7ef130ca37fdcd0b3c9b0","8bf5182f42ea17acad008ff41e3c0943185e67966fb08da0d96851dbd992aa6e","ee46c526e4a0119c3e8e4edc5f2281d4180b8f1ba0cc01c840f7aff9592b299e","8eda331cd98719945603ff749b1fc960c5e75c7b14850c2c6387405e0f6ea3ce","f08c967d1e8618060baaa840dd0e1c8a31cdc682416af116d32fda7d78b76ace","643d1e7ab97b00511e679d32f416efd7f257a898c20ce62f5d84c02b2580e228","53fb9b3a127f1f5851727985e87e0a78cd05ce331fd219d04f61597a1fe61ecc","a3ae331b28da7fed70f45e76ac849a9a96590bfe887d0b2a5e3b290640b84f62","22172a7dd2af03e315c9397e405bb131ce102e20df29459a4f7102c2ecbf1936","f504cf4209a269abe867e196d17643a8ad2486b6e81aa445b798f207df9e4754","c8b5c582d586e5fdccb981f47f156c76d9c51135c89fce38d7ae9fcc4862bd77",{"version":"882b28abe64dae4932c83ebb71e4155da340929fe08a2055f3e573ef17f70fc3","impliedFormat":1},{"version":"4a3e425808751200a7709671667ad3d7e7cbfd0a06d469cab42adf06c2601f4a","impliedFormat":1},{"version":"401da46338f5b4f97c2a5f8a0faaace045c51aabd751d2dc704159f64feafe89","impliedFormat":1},{"version":"4e6da006f3a74377f1801ef8cbd771f82ead12d4326d4429661524aca2e21493","impliedFormat":1},"aa8271711822ca11b2a93dadcc5388e76cc831f36ec6f667a4adfe6b8d96ef15",{"version":"0c2ec28378064b0d6ef22b750c57c0631449068857eb4d39ce9d8a66524b6e19","signature":"f2ffcc0424acf94a1fc97f1598da823de80320c699e56961963be2935112d53a"},{"version":"905fc8871e2777097ac966549dc2abb62abb7e4715b2b8dbd7b056f4f8ec139c","signature":"703a456a5fee7187360999c507a5ce62b9c4f694accc8ba75a9f78e34a48f5c1"},{"version":"30b824483a6a479af0e84749f4fba06ad4f8bb0d2a58823347bbcd17ef235ed2","signature":"74dbecd1107dc906c358396733c3a7ad2036960a7d0cb4f232dfab4fa742445e"},{"version":"577dde4d09825191f616a6fea0dda70b455e8a19171af1931636dab3c1d5bbe1","signature":"848b40484aa84b6f442590925df6792606fe7f851663b37deaa869857148a32a"},{"version":"f258fa1646ed83ab8a39c1a5e5058df93ed15685927298b1a810fef54dadbfd1","signature":"a192ad25d90b0fcb7dc9f4eb21fb782a9098a13c2fccbb53bcee88a3af5cf99e"},{"version":"36c169f7c14ab50fefa0cc529fb34e0f3e7f9291e385a46fdc3e83371a4bc33c","signature":"d7194a6305d3eac1931cbce3f7b08c21df973b5aa466196221b8d19cfea608f3"},{"version":"efa4988bb4c5de1482bcd811c7389be3dcdd62863b25dcc61a995526ab76136f","signature":"d303560f025fea5aabba06f1a3cabbec22c43e45a0bf445df0312d235dcf3eff"},"bf520bf187e4f515feaa449892b92f8a7ec52fa60b5b634fd1ea0f3a987561e8",{"version":"a42409d2d0a360ea9c15ca04777e44b42a167f1fc7bdd7a16cf8df5de843408a","signature":"3a8523bfa20e149df671c3166d3c2e0c8e5b9f015b121a6855deedf209096b5e"},"3cdd575aba8e4aad238f5c4becd78ef51c58c9e2872522f349a1e809b0125f77",{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"42979633ab57d6cc7837b15be8c44c2087a264d5f2ca976afed684bee0925468","impliedFormat":99},{"version":"5d5dd94e05bb7aa8eaac0edfbed2435a9a19a648fcbfbb07f557fb67ed97d623","signature":"eee31bd8d56d2f89a7fb9cd733d6f62fb36f8c42bdb349d7a12fd115dc9b86cc"},{"version":"b537e9d222bbba2a38077a2819229eb99701c7f48564d82b40b97c5e1f509848","signature":"86d8f27a54413ad4759c68ea2c203813869261973b810cf1e906487ecd9edb4b"},{"version":"83fd5d02f3beb56e62b955dab641cf34e0fbde042f9f6adbef2cb71862e00c35","signature":"c213fac2d8c40d184a446b8919701a9896e187f65958e0c60123c7b460532f96"},{"version":"355d9dff15db3a79ec0c45ea76b1de9e0d4157e1b55a8600881104b64b28733d","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"c99fc024354c5310842b4307a08655ce0c71324bcab427d55cfa408cbe3c3c94","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"67a8865f741684f6cca5b82109c7916853911d54da54c6685b02009758fca361","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"0fb708d110b0095ff26fbb40e96ad8a3f31c0e710662d78d811a33af6abae765","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"6c2312a765e695b10d55dd50368dfa0d793965b59a9c08c8df915aa16e140a9c","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"b1ef0f3c639214285f6d4aa93c4640476b014fc9e73e1214682ae5f306ea1399","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"a197e281c2c17b5d7e64ed8d39a562567b71f097bade3aeb4a0f34db81161ada","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"2c3b8be03577c98530ef9cb1a76e2c812636a871f367e9edf4c5f3ce702b77f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ecec8f82ddf42db544c8320eddf7f09a9a788723f7473e82e903401a3d14d488","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1}],"root":[350,[352,354],[358,368],[373,383],[386,395]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":1,"module":99,"skipLibCheck":true,"strict":true,"target":1},"referencedMap":[[390,1],[391,2],[392,3],[393,4],[389,5],[394,6],[395,7],[350,8],[307,9],[397,10],[398,9],[103,11],[104,11],[105,12],[64,13],[106,14],[107,15],[108,16],[59,9],[62,17],[60,9],[61,9],[109,18],[110,19],[111,20],[112,21],[113,22],[114,23],[115,23],[117,9],[116,24],[118,25],[119,26],[120,27],[102,28],[63,9],[121,29],[122,30],[123,31],[155,32],[124,33],[125,34],[126,35],[127,36],[128,37],[129,38],[130,39],[131,40],[132,41],[133,42],[134,42],[135,43],[136,9],[137,44],[139,45],[138,46],[140,47],[141,48],[142,49],[143,50],[144,51],[145,52],[146,53],[147,54],[148,55],[149,56],[150,57],[151,58],[152,59],[153,60],[154,61],[51,9],[160,62],[161,63],[159,64],[157,65],[158,66],[49,9],[52,67],[396,68],[384,9],[351,9],[50,9],[385,68],[370,69],[369,9],[371,70],[58,71],[310,72],[315,73],[317,74],[179,75],[184,76],[283,77],[254,78],[262,79],[281,80],[180,81],[228,9],[229,82],[282,83],[205,84],[181,85],[209,84],[199,84],[166,84],[246,86],[171,9],[243,87],[241,88],[188,9],[244,89],[334,90],[252,64],[333,9],[332,91],[245,64],[234,92],[242,93],[257,94],[258,95],[249,9],[189,96],[247,9],[248,64],[327,97],[330,98],[216,99],[215,100],[214,101],[337,64],[213,102],[193,9],[340,9],[356,103],[355,9],[343,9],[342,64],[344,104],[162,9],[277,9],[164,105],[298,9],[299,9],[301,9],[304,106],[300,9],[302,107],[303,107],[183,9],[309,102],[318,108],[322,109],[175,110],[236,111],[235,9],[253,112],[250,9],[251,9],[256,113],[232,114],[174,115],[203,116],[274,117],[167,118],[173,119],[163,120],[285,121],[296,122],[284,9],[295,123],[204,9],[191,124],[271,125],[270,9],[273,126],[272,126],[225,127],[210,127],[265,128],[211,128],[169,129],[168,9],[269,130],[268,131],[267,132],[266,133],[170,134],[240,135],[255,136],[239,137],[261,138],[263,139],[260,137],[206,134],[156,9],[275,140],[230,141],[294,142],[187,143],[289,144],[182,9],[290,145],[292,146],[293,147],[288,9],[287,118],[207,148],[276,149],[297,150],[176,9],[178,9],[190,151],[264,152],[172,153],[177,9],[186,154],[185,155],[192,156],[233,157],[231,91],[194,158],[196,159],[341,9],[195,160],[197,161],[312,9],[313,9],[311,9],[314,9],[339,9],[198,162],[238,64],[57,9],[259,163],[217,9],[227,164],[320,64],[326,165],[224,64],[324,64],[223,166],[306,167],[222,165],[165,9],[328,168],[220,64],[221,64],[212,9],[226,9],[219,169],[218,170],[208,171],[202,172],[291,9],[201,173],[200,9],[316,9],[237,64],[308,174],[48,9],[56,175],[53,64],[54,9],[55,9],[286,176],[280,177],[278,9],[279,178],[319,179],[321,180],[323,181],[357,182],[325,183],[349,184],[329,184],[348,185],[331,186],[335,187],[336,188],[338,189],[345,190],[347,9],[346,191],[305,192],[372,193],[46,9],[47,9],[8,9],[9,9],[11,9],[10,9],[2,9],[12,9],[13,9],[14,9],[15,9],[16,9],[17,9],[18,9],[19,9],[3,9],[20,9],[21,9],[4,9],[22,9],[26,9],[23,9],[24,9],[25,9],[27,9],[28,9],[29,9],[5,9],[30,9],[31,9],[32,9],[33,9],[6,9],[37,9],[34,9],[35,9],[36,9],[38,9],[7,9],[39,9],[44,9],[45,9],[40,9],[41,9],[42,9],[43,9],[1,9],[80,194],[90,195],[79,194],[100,196],[71,197],[70,198],[99,191],[93,199],[98,200],[73,201],[87,202],[72,203],[96,204],[68,205],[67,191],[97,206],[69,207],[74,208],[75,9],[78,208],[65,9],[101,209],[91,210],[82,211],[83,212],[85,213],[81,214],[84,215],[94,191],[76,216],[77,217],[86,218],[66,219],[89,210],[88,208],[92,9],[95,220],[374,221],[378,222],[377,223],[375,224],[359,225],[380,226],[381,227],[361,228],[382,229],[387,230],[388,231],[386,232],[365,233],[363,234],[364,228],[368,235],[376,236],[383,64],[379,237],[367,238],[362,239],[373,240],[366,64],[360,9],[358,238],[353,241],[354,64],[352,9]],"affectedFilesPendingEmit":[390,391,392,393,389,394,395,374,378,377,375,359,380,381,361,382,387,388,386,365,363,364,368,376,383,379,367,362,373,366,360,358,353,354,352],"version":"5.8.3"} \ No newline at end of file