vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
139 lines (136 loc) • 17.8 kB
JavaScript
/**
* vite-plugin-react-server
* Copyright (c) Nico Brinkkemper
* MIT License
*/
import 'vite';
import { resolveBuildPages } from './resolveBuildPages.js';
import { resolvePages } from '../resolvePages.js';
import { createGlobAutoDiscover } from './createGlobAutoDiscover.js';
import { createDirectiveClientAutoDiscover } from './createDirectiveClientAutoDiscover.js';
import { customWorkerFiles } from './customWorkerFiles.js';
import { pageAndPropFiles } from './pageAndPropFiles.js';
const resolveAutoDiscover = async function _resolveAutoDiscover({
config,
configEnv,
userOptions,
logger
}) {
const envId = `${configEnv.command}-${configEnv.mode}`;
const configInputRecord = {};
if (typeof config.build?.rollupOptions?.input === "string") {
configInputRecord[userOptions.normalizer(config.build?.rollupOptions?.input)[0]] = config.build?.rollupOptions?.input;
} else if (typeof config.build?.rollupOptions?.input === "object") {
for (const [, value] of Object.entries(
config.build?.rollupOptions?.input
)) {
configInputRecord[userOptions.normalizer(value)[0]] = value;
}
}
const serverEntry = typeof userOptions.serverEntry === "string" ? Object.fromEntries([userOptions.normalizer(userOptions.serverEntry)]) : null;
const indexHtmlInputs = { index: "index.html" };
const clientEntry = typeof userOptions.clientEntry === "string" ? Object.fromEntries([userOptions.normalizer(userOptions.clientEntry)]) : {};
const { type, error, pages } = await resolvePages(userOptions.build.pages);
if (type === "error") {
return {
type: "error",
error,
id: envId
};
}
const clientFiles = createGlobAutoDiscover(userOptions.autoDiscover.clientEntry);
const directiveClientFiles = createDirectiveClientAutoDiscover();
const serverFiles = createGlobAutoDiscover(userOptions.autoDiscover.serverEntry);
const cssFiles = createGlobAutoDiscover(userOptions.autoDiscover.cssEntry);
const jsonFiles = createGlobAutoDiscover(userOptions.autoDiscover.jsonEntry);
const htmlFiles = createGlobAutoDiscover(userOptions.autoDiscover.htmlPattern.source);
const files = await resolveBuildPages({
pages,
userOptions,
logger
});
const customWorkerInputs = customWorkerFiles({
inputs: {},
userOptions
});
const clientInputs = await clientFiles({
inputs: {},
userOptions
});
const directiveClientInputs = await directiveClientFiles({
inputs: {},
userOptions
});
const serverActions = await serverFiles({
inputs: {},
userOptions
});
const pageAndPropInputs = pageAndPropFiles({
files,
inputs: {}
});
const cssInputs = await cssFiles({
inputs: {},
userOptions
});
const jsonInputs = await jsonFiles({
inputs: {},
userOptions
});
const htmlInputs = await htmlFiles({
inputs: {},
userOptions
});
const customComponentInputs = {};
for (const [rootKey, rootValue] of files.rootMap) {
if (!customComponentInputs[rootKey]) {
customComponentInputs[rootKey] = rootValue;
}
}
for (const [htmlKey, htmlValue] of files.htmlMap) {
if (!customComponentInputs[htmlKey]) {
customComponentInputs[htmlKey] = htmlValue;
}
}
const clientInputsCollection = {
...configInputRecord,
...clientInputs,
...directiveClientInputs,
...clientEntry,
...cssInputs
};
if (Object.keys(clientInputsCollection).length === 0) {
Object.assign(clientInputsCollection, indexHtmlInputs);
}
const serverInputsCollection = {
...clientInputsCollection,
...customWorkerInputs,
...pageAndPropInputs,
...cssInputs,
...serverActions,
...serverEntry,
...jsonInputs,
...customComponentInputs
// Add custom components to server build
};
return {
type: "success",
id: envId,
autoDiscoveredFiles: {
...files,
workerPaths: customWorkerInputs,
serverEntry,
clientEntry,
staticInputs: {
...indexHtmlInputs,
...htmlInputs,
...clientInputsCollection
},
clientInputs: clientInputsCollection,
serverInputs: serverInputsCollection,
serverActions
}
};
};
export { resolveAutoDiscover };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZUF1dG9EaXNjb3Zlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGx1Z2luL2NvbmZpZy9hdXRvRGlzY292ZXIvcmVzb2x2ZUF1dG9EaXNjb3Zlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIENvbmZpZ0VudiwgdHlwZSBVc2VyQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB0eXBlIHsgQXV0b0Rpc2NvdmVyZWRGaWxlcywgUmVzb2x2ZWRVc2VyT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUJ1aWxkUGFnZXMgfSBmcm9tIFwiLi9yZXNvbHZlQnVpbGRQYWdlcy5qc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZVBhZ2VzIH0gZnJvbSBcIi4uL3Jlc29sdmVQYWdlcy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBMb2dnZXIsIFJlc29sdmVkQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IGNyZWF0ZUdsb2JBdXRvRGlzY292ZXIgfSBmcm9tIFwiLi9jcmVhdGVHbG9iQXV0b0Rpc2NvdmVyLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVEaXJlY3RpdmVDbGllbnRBdXRvRGlzY292ZXIgfSBmcm9tIFwiLi9jcmVhdGVEaXJlY3RpdmVDbGllbnRBdXRvRGlzY292ZXIuanNcIjtcbmltcG9ydCB7IGN1c3RvbVdvcmtlckZpbGVzIH0gZnJvbSBcIi4vY3VzdG9tV29ya2VyRmlsZXMuanNcIjtcbmltcG9ydCB7IHBhZ2VBbmRQcm9wRmlsZXMgfSBmcm9tIFwiLi9wYWdlQW5kUHJvcEZpbGVzLmpzXCI7XG5cblxuXG50eXBlIFJlc29sdmVBdXRvRGlzY292ZXJQcm9wcyA9IHtcbiAgY29uZmlnOiBVc2VyQ29uZmlnIHwgUmVzb2x2ZWRDb25maWc7XG4gIGNvbmZpZ0VudjogQ29uZmlnRW52O1xuICB1c2VyT3B0aW9uczogUGljazxcbiAgICBSZXNvbHZlZFVzZXJPcHRpb25zLFxuICAgIHwgXCJidWlsZFwiXG4gICAgfCBcIm5vcm1hbGl6ZXJcIlxuICAgIHwgXCJzZXJ2ZXJFbnRyeVwiXG4gICAgfCBcImNsaWVudEVudHJ5XCJcbiAgICB8IFwicHJvamVjdFJvb3RcIlxuICAgIHwgXCJtb2R1bGVCYXNlXCJcbiAgICB8IFwibW9kdWxlQmFzZVBhdGhcIlxuICAgIHwgXCJQYWdlXCJcbiAgICB8IFwicHJvcHNcIlxuICAgIHwgXCJodG1sV29ya2VyUGF0aFwiXG4gICAgfCBcInJzY1dvcmtlclBhdGhcIlxuICAgIHwgXCJwYWdlRXhwb3J0TmFtZVwiXG4gICAgfCBcInByb3BzRXhwb3J0TmFtZVwiXG4gICAgfCBcImh0bWxFeHBvcnROYW1lXCJcbiAgICB8IFwicm9vdEV4cG9ydE5hbWVcIlxuICAgIHwgXCJSb290XCJcbiAgICB8IFwiSHRtbFwiXG4gICAgfCBcInZlcmJvc2VcIlxuICAgIHwgXCJwYW5pY1RocmVzaG9sZFwiXG4gICAgfCBcImF1dG9EaXNjb3ZlclwiXG4gID47XG4gIGxvZ2dlcjogTG9nZ2VyO1xufTtcblxudHlwZSBSZXNvbHZlQXV0b0Rpc2NvdmVyUmV0dXJuID1cbiAgfCB7XG4gICAgICB0eXBlOiBcInN1Y2Nlc3NcIjtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICBhdXRvRGlzY292ZXJlZEZpbGVzOiBBdXRvRGlzY292ZXJlZEZpbGVzO1xuICAgICAgZXJyb3I/OiBuZXZlcjtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJlcnJvclwiO1xuICAgICAgZXJyb3I6IHVua25vd247XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAgYXV0b0Rpc2NvdmVyZWRGaWxlcz86IG5ldmVyO1xuICAgIH07XG5cbmV4cG9ydCB0eXBlIFJlc29sdmVBdXRvRGlzY292ZXJGbiA9IChcbiAgcHJvcHM6IFJlc29sdmVBdXRvRGlzY292ZXJQcm9wc1xuKSA9PiBQcm9taXNlPFJlc29sdmVBdXRvRGlzY292ZXJSZXR1cm4+O1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUF1dG9EaXNjb3ZlcjogUmVzb2x2ZUF1dG9EaXNjb3ZlckZuID1cbiAgYXN5bmMgZnVuY3Rpb24gX3Jlc29sdmVBdXRvRGlzY292ZXIoe1xuICAgIGNvbmZpZyxcbiAgICBjb25maWdFbnYsXG4gICAgdXNlck9wdGlvbnMsXG4gICAgbG9nZ2VyLFxuICB9KSB7XG4gICAgY29uc3QgZW52SWQgPSBgJHtjb25maWdFbnYuY29tbWFuZH0tJHtjb25maWdFbnYubW9kZX1gO1xuICAgIFxuXG4gICAgXG4gICAgXG4gICAgXG5cbiAgICBjb25zdCBjb25maWdJbnB1dFJlY29yZCA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgaWYgKHR5cGVvZiBjb25maWcuYnVpbGQ/LnJvbGx1cE9wdGlvbnM/LmlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb25maWdJbnB1dFJlY29yZFtcbiAgICAgICAgdXNlck9wdGlvbnMubm9ybWFsaXplcihjb25maWcuYnVpbGQ/LnJvbGx1cE9wdGlvbnM/LmlucHV0KVswXVxuICAgICAgXSA9IGNvbmZpZy5idWlsZD8ucm9sbHVwT3B0aW9ucz8uaW5wdXQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLmJ1aWxkPy5yb2xsdXBPcHRpb25zPy5pbnB1dCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgZm9yIChjb25zdCBbLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgIGNvbmZpZy5idWlsZD8ucm9sbHVwT3B0aW9ucz8uaW5wdXRcbiAgICAgICkpIHtcbiAgICAgICAgY29uZmlnSW5wdXRSZWNvcmRbdXNlck9wdGlvbnMubm9ybWFsaXplcih2YWx1ZSlbMF1dID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2VydmVyRW50cnkgPVxuICAgICAgdHlwZW9mIHVzZXJPcHRpb25zLnNlcnZlckVudHJ5ID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKFt1c2VyT3B0aW9ucy5ub3JtYWxpemVyKHVzZXJPcHRpb25zLnNlcnZlckVudHJ5KV0pXG4gICAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IGluZGV4SHRtbElucHV0cyA9IHsgaW5kZXg6IFwiaW5kZXguaHRtbFwiIH07XG5cbiAgICBjb25zdCBjbGllbnRFbnRyeSA9XG4gICAgICB0eXBlb2YgdXNlck9wdGlvbnMuY2xpZW50RW50cnkgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoW3VzZXJPcHRpb25zLm5vcm1hbGl6ZXIodXNlck9wdGlvbnMuY2xpZW50RW50cnkpXSlcbiAgICAgICAgOiB7fTtcblxuICAgIGNvbnN0IHsgdHlwZSwgZXJyb3IsIHBhZ2VzIH0gPSBhd2FpdCByZXNvbHZlUGFnZXModXNlck9wdGlvbnMuYnVpbGQucGFnZXMpO1xuXG4gICAgaWYgKHR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgICBlcnJvcixcbiAgICAgICAgaWQ6IGVudklkLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgY2xpZW50RmlsZXMgPSBjcmVhdGVHbG9iQXV0b0Rpc2NvdmVyKHVzZXJPcHRpb25zLmF1dG9EaXNjb3Zlci5jbGllbnRFbnRyeSk7XG4gICAgLy8gRmlyc3QtcGFydHkgbW9kdWxlcyBkZXRlY3RlZCBieSBhIHRvcC1vZi1maWxlIGBcInVzZSBjbGllbnRcImAgZGlyZWN0aXZlXG4gICAgLy8gKG5vIGAuY2xpZW50LmAgc3VmZml4KSBtdXN0IGFsc28gYmUgZW1pdHRlZCB0byBkaXN0L2NsaWVudC5cbiAgICBjb25zdCBkaXJlY3RpdmVDbGllbnRGaWxlcyA9IGNyZWF0ZURpcmVjdGl2ZUNsaWVudEF1dG9EaXNjb3ZlcigpO1xuICAgIGNvbnN0IHNlcnZlckZpbGVzID0gY3JlYXRlR2xvYkF1dG9EaXNjb3Zlcih1c2VyT3B0aW9ucy5hdXRvRGlzY292ZXIuc2VydmVyRW50cnkpO1xuICAgIGNvbnN0IGNzc0ZpbGVzID0gY3JlYXRlR2xvYkF1dG9EaXNjb3Zlcih1c2VyT3B0aW9ucy5hdXRvRGlzY292ZXIuY3NzRW50cnkpO1xuICAgIGNvbnN0IGpzb25GaWxlcyA9IGNyZWF0ZUdsb2JBdXRvRGlzY292ZXIodXNlck9wdGlvbnMuYXV0b0Rpc2NvdmVyLmpzb25FbnRyeSk7XG4gICAgY29uc3QgaHRtbEZpbGVzID0gY3JlYXRlR2xvYkF1dG9EaXNjb3Zlcih1c2VyT3B0aW9ucy5hdXRvRGlzY292ZXIuaHRtbFBhdHRlcm4uc291cmNlKTtcblxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVzb2x2ZUJ1aWxkUGFnZXMoe1xuICAgICAgcGFnZXMsXG4gICAgICB1c2VyT3B0aW9ucyxcbiAgICAgIGxvZ2dlcixcbiAgICB9KTtcblxuIFxuXG4gICAgY29uc3QgY3VzdG9tV29ya2VySW5wdXRzID0gY3VzdG9tV29ya2VyRmlsZXMoe1xuICAgICAgaW5wdXRzOiB7fSxcbiAgICAgIHVzZXJPcHRpb25zLFxuICAgIH0pO1xuICAgIGNvbnN0IGNsaWVudElucHV0cyA9IGF3YWl0IGNsaWVudEZpbGVzKHtcbiAgICAgIGlucHV0czoge30sXG4gICAgICB1c2VyT3B0aW9ucyxcbiAgICB9KTtcbiAgICBjb25zdCBkaXJlY3RpdmVDbGllbnRJbnB1dHMgPSBhd2FpdCBkaXJlY3RpdmVDbGllbnRGaWxlcyh7XG4gICAgICBpbnB1dHM6IHt9LFxuICAgICAgdXNlck9wdGlvbnMsXG4gICAgfSk7XG4gICAgY29uc3Qgc2VydmVyQWN0aW9ucyA9IGF3YWl0IHNlcnZlckZpbGVzKHtcbiAgICAgIGlucHV0czoge30sXG4gICAgICB1c2VyT3B0aW9ucyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBhZ2VBbmRQcm9wSW5wdXRzID0gcGFnZUFuZFByb3BGaWxlcyh7XG4gICAgICBmaWxlcyxcbiAgICAgIGlucHV0czoge30sXG4gICAgfSk7XG5cbiAgICBjb25zdCBjc3NJbnB1dHMgPSBhd2FpdCBjc3NGaWxlcyh7XG4gICAgICBpbnB1dHM6IHt9LFxuICAgICAgdXNlck9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBqc29uSW5wdXRzID0gYXdhaXQganNvbkZpbGVzKHtcbiAgICAgIGlucHV0czoge30sXG4gICAgICB1c2VyT3B0aW9ucyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGh0bWxJbnB1dHMgPSBhd2FpdCBodG1sRmlsZXMoe1xuICAgICAgaW5wdXRzOiB7fSxcbiAgICAgIHVzZXJPcHRpb25zLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIGN1c3RvbSBSb290IGFuZCBIdG1sIGNvbXBvbmVudHMgdG8gaW5wdXRzXG4gICAgY29uc3QgY3VzdG9tQ29tcG9uZW50SW5wdXRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAvLyBBZGQgUm9vdCBjb21wb25lbnRzIGZyb20gcmVzb2x2ZWQgYnVpbGQgcGFnZXNcbiAgICBmb3IgKGNvbnN0IFtyb290S2V5LCByb290VmFsdWVdIG9mIGZpbGVzLnJvb3RNYXApIHtcbiAgICAgIGlmICghY3VzdG9tQ29tcG9uZW50SW5wdXRzW3Jvb3RLZXldKSB7XG4gICAgICAgIGN1c3RvbUNvbXBvbmVudElucHV0c1tyb290S2V5XSA9IHJvb3RWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgSHRtbCBjb21wb25lbnRzIGZyb20gcmVzb2x2ZWQgYnVpbGQgcGFnZXNcbiAgICBmb3IgKGNvbnN0IFtodG1sS2V5LCBodG1sVmFsdWVdIG9mIGZpbGVzLmh0bWxNYXApIHtcbiAgICAgIGlmICghY3VzdG9tQ29tcG9uZW50SW5wdXRzW2h0bWxLZXldKSB7XG4gICAgICAgIGN1c3RvbUNvbXBvbmVudElucHV0c1todG1sS2V5XSA9IGh0bWxWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIFxuICAgIC8vIFNlcGFyYXRlIGNsaWVudCBhbmQgc2VydmVyIGlucHV0c1xuICAgIGNvbnN0IGNsaWVudElucHV0c0NvbGxlY3Rpb24gPSB7XG4gICAgICAuLi5jb25maWdJbnB1dFJlY29yZCxcbiAgICAgIC4uLmNsaWVudElucHV0cyxcbiAgICAgIC4uLmRpcmVjdGl2ZUNsaWVudElucHV0cyxcbiAgICAgIC4uLmNsaWVudEVudHJ5LFxuICAgICAgLi4uY3NzSW5wdXRzLFxuICAgIH07XG4gICAgLy8gSWYgbm8gY2xpZW50IGVudHJpZXMgZm91bmQsIGZhbGwgYmFjayB0byBpbmRleC5odG1sIHNvIFNTUiBlbnZpcm9ubWVudCBoYXMgaW5wdXRzXG4gICAgaWYgKE9iamVjdC5rZXlzKGNsaWVudElucHV0c0NvbGxlY3Rpb24pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgT2JqZWN0LmFzc2lnbihjbGllbnRJbnB1dHNDb2xsZWN0aW9uLCBpbmRleEh0bWxJbnB1dHMpO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBzZXJ2ZXJJbnB1dHNDb2xsZWN0aW9uID0ge1xuICAgICAgLi4uY2xpZW50SW5wdXRzQ29sbGVjdGlvbixcbiAgICAgIC4uLmN1c3RvbVdvcmtlcklucHV0cyxcbiAgICAgIC4uLnBhZ2VBbmRQcm9wSW5wdXRzLFxuICAgICAgLi4uY3NzSW5wdXRzLFxuICAgICAgLi4uc2VydmVyQWN0aW9ucyxcbiAgICAgIC4uLnNlcnZlckVudHJ5LFxuICAgICAgLi4uanNvbklucHV0cyxcbiAgICAgIC4uLmN1c3RvbUNvbXBvbmVudElucHV0cywgLy8gQWRkIGN1c3RvbSBjb21wb25lbnRzIHRvIHNlcnZlciBidWlsZFxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzdWNjZXNzXCIsXG4gICAgICBpZDogZW52SWQsXG4gICAgICBhdXRvRGlzY292ZXJlZEZpbGVzOiB7XG4gICAgICAgIC4uLmZpbGVzLFxuICAgICAgICB3b3JrZXJQYXRoczogY3VzdG9tV29ya2VySW5wdXRzLFxuICAgICAgICBzZXJ2ZXJFbnRyeSxcbiAgICAgICAgY2xpZW50RW50cnksXG4gICAgICAgIHN0YXRpY0lucHV0czoge1xuICAgICAgICAgIC4uLmluZGV4SHRtbElucHV0cyxcbiAgICAgICAgICAuLi5odG1sSW5wdXRzLFxuICAgICAgICAgIC4uLmNsaWVudElucHV0c0NvbGxlY3Rpb25cbiAgICAgICAgfSxcbiAgICAgICAgY2xpZW50SW5wdXRzOiBjbGllbnRJbnB1dHNDb2xsZWN0aW9uLFxuICAgICAgICBzZXJ2ZXJJbnB1dHM6IHNlcnZlcklucHV0c0NvbGxlY3Rpb24sXG4gICAgICAgIHNlcnZlckFjdGlvbnMsXG4gICAgICB9LFxuICAgIH07XG4gIH07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQTJEYSxNQUFBLG1CQUFBLEdBQ1gsZUFBZSxvQkFBcUIsQ0FBQTtBQUFBLEVBQ2xDLE1BQUE7QUFBQSxFQUNBLFNBQUE7QUFBQSxFQUNBLFdBQUE7QUFBQSxFQUNBO0FBQ0YsQ0FBRyxFQUFBO0FBQ0QsRUFBQSxNQUFNLFFBQVEsQ0FBRyxFQUFBLFNBQUEsQ0FBVSxPQUFPLENBQUEsQ0FBQSxFQUFJLFVBQVUsSUFBSSxDQUFBLENBQUE7QUFPcEQsRUFBQSxNQUFNLG9CQUFvQixFQUFDO0FBQzNCLEVBQUEsSUFBSSxPQUFPLE1BQUEsQ0FBTyxLQUFPLEVBQUEsYUFBQSxFQUFlLFVBQVUsUUFBVSxFQUFBO0FBQzFELElBQUEsaUJBQUEsQ0FDRSxXQUFZLENBQUEsVUFBQSxDQUFXLE1BQU8sQ0FBQSxLQUFBLEVBQU8sYUFBZSxFQUFBLEtBQUssQ0FBRSxDQUFBLENBQUMsQ0FDOUQsQ0FBQSxHQUFJLE1BQU8sQ0FBQSxLQUFBLEVBQU8sYUFBZSxFQUFBLEtBQUE7QUFBQSxhQUN4QixPQUFPLE1BQUEsQ0FBTyxLQUFPLEVBQUEsYUFBQSxFQUFlLFVBQVUsUUFBVSxFQUFBO0FBQ2pFLElBQUEsS0FBQSxNQUFXLEdBQUcsS0FBSyxDQUFBLElBQUssTUFBTyxDQUFBLE9BQUE7QUFBQSxNQUM3QixNQUFBLENBQU8sT0FBTyxhQUFlLEVBQUE7QUFBQSxLQUM1QixFQUFBO0FBQ0QsTUFBQSxpQkFBQSxDQUFrQixZQUFZLFVBQVcsQ0FB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