payload
Version:
Node, React and MongoDB Headless CMS and Application Framework
182 lines (181 loc) • 17.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
const _reacti18next = require("react-i18next");
const _reactrouterdom = require("react-router-dom");
const _usePayloadAPI = /*#__PURE__*/ _interop_require_default(require("../../../hooks/usePayloadAPI"));
const _buildStateFromSchema = /*#__PURE__*/ _interop_require_default(require("../../forms/Form/buildStateFromSchema"));
const _fieldtypes = require("../../forms/field-types");
const _Auth = require("../../utilities/Auth");
const _Config = require("../../utilities/Config");
const _DocumentEvents = require("../../utilities/DocumentEvents");
const _DocumentInfo = require("../../utilities/DocumentInfo");
const _EditDepth = require("../../utilities/EditDepth");
const _Locale = require("../../utilities/Locale");
const _Preferences = require("../../utilities/Preferences");
const _RenderCustomComponent = /*#__PURE__*/ _interop_require_default(require("../../utilities/RenderCustomComponent"));
const _Default = /*#__PURE__*/ _interop_require_default(require("./Default"));
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function _getRequireWildcardCache(nodeInterop) {
if (typeof WeakMap !== "function") return null;
var cacheBabelInterop = new WeakMap();
var cacheNodeInterop = new WeakMap();
return (_getRequireWildcardCache = function(nodeInterop) {
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
})(nodeInterop);
}
function _interop_require_wildcard(obj, nodeInterop) {
if (!nodeInterop && obj && obj.__esModule) {
return obj;
}
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
return {
default: obj
};
}
var cache = _getRequireWildcardCache(nodeInterop);
if (cache && cache.has(obj)) {
return cache.get(obj);
}
var newObj = {
__proto__: null
};
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
for(var key in obj){
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
if (desc && (desc.get || desc.set)) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
newObj.default = obj;
if (cache) {
cache.set(obj, newObj);
}
return newObj;
}
const GlobalView = (props)=>{
const { global } = props;
const { state: locationState } = (0, _reactrouterdom.useLocation)();
const { code: locale } = (0, _Locale.useLocale)();
const { permissions, user } = (0, _Auth.useAuth)();
const [initialState, setInitialState] = (0, _react.useState)();
const [updatedAt, setUpdatedAt] = (0, _react.useState)();
const { docPermissions, getDocPermissions, getDocPreferences, getVersions, preferencesKey } = (0, _DocumentInfo.useDocumentInfo)();
const { getPreference } = (0, _Preferences.usePreferences)();
const { t } = (0, _reacti18next.useTranslation)();
const config = (0, _Config.useConfig)();
const { routes: { api }, serverURL } = (0, _Config.useConfig)();
const { reportUpdate } = (0, _DocumentEvents.useDocumentEvents)();
const { slug, admin: { components: { views: { Edit: Edit } = {} } = {} } = {}, fields } = global;
const onSave = (0, _react.useCallback)(async (json)=>{
reportUpdate({
entitySlug: global.slug,
updatedAt: json?.result?.updatedAt || new Date().toISOString()
});
getVersions();
getDocPermissions();
setUpdatedAt(json?.result?.updatedAt);
const preferences = await getDocPreferences();
const state = await (0, _buildStateFromSchema.default)({
config,
data: json.result,
fieldSchema: fields,
locale,
operation: 'update',
preferences,
t,
user
});
setInitialState(state);
}, [
getVersions,
fields,
user,
locale,
t,
getDocPermissions,
getDocPreferences,
config,
global,
reportUpdate
]);
const [{ data, isLoading: isLoadingData }] = (0, _usePayloadAPI.default)(`${serverURL}${api}/globals/${slug}`, {
initialData: null,
initialParams: {
depth: 0,
draft: 'true',
'fallback-locale': 'null'
}
});
const dataToRender = locationState?.data || data;
(0, _react.useEffect)(()=>{
const awaitInitialState = async ()=>{
const preferences = await getDocPreferences();
const state = await (0, _buildStateFromSchema.default)({
config,
data: dataToRender,
fieldSchema: fields,
locale,
operation: 'update',
preferences,
t,
user
});
if (preferencesKey) {
await getPreference(preferencesKey);
}
setInitialState(state);
};
if (dataToRender) awaitInitialState();
}, [
dataToRender,
fields,
user,
locale,
getPreference,
preferencesKey,
t,
getDocPreferences,
config
]);
const isLoading = !initialState || !docPermissions || isLoadingData;
const componentProps = {
action: `${serverURL}${api}/globals/${slug}?locale=${locale}&fallback-locale=null`,
apiURL: `${serverURL}${api}/globals/${slug}?locale=${locale}${global.versions?.drafts ? '&draft=true' : ''}`,
canAccessAdmin: permissions?.canAccessAdmin,
data: dataToRender,
fieldTypes: _fieldtypes.fieldTypes,
global,
initialState,
isLoading,
onSave,
permissions: docPermissions,
updatedAt: updatedAt || dataToRender?.updatedAt,
user
};
return /*#__PURE__*/ _react.default.createElement(_EditDepth.EditDepthContext.Provider, {
value: 1
}, /*#__PURE__*/ _react.default.createElement(_RenderCustomComponent.default, {
CustomComponent: typeof Edit === 'function' ? Edit : undefined,
DefaultComponent: _Default.default,
componentProps: componentProps
}));
};
const _default = GlobalView;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL3ZpZXdzL0dsb2JhbC9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyB1c2VMb2NhdGlvbiB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nXG5cbmltcG9ydCB0eXBlIHsgRmllbGRzIH0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS90eXBlcydcbmltcG9ydCB0eXBlIHsgRGVmYXVsdEdsb2JhbFZpZXdQcm9wcyB9IGZyb20gJy4vRGVmYXVsdCdcbmltcG9ydCB0eXBlIHsgSW5kZXhQcm9wcyB9IGZyb20gJy4vdHlwZXMnXG5cbmltcG9ydCB1c2VQYXlsb2FkQVBJIGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVBheWxvYWRBUEknXG5pbXBvcnQgYnVpbGRTdGF0ZUZyb21TY2hlbWEgZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS9idWlsZFN0YXRlRnJvbVNjaGVtYSdcbmltcG9ydCB7IGZpZWxkVHlwZXMgfSBmcm9tICcuLi8uLi9mb3Jtcy9maWVsZC10eXBlcydcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvQXV0aCdcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9Db25maWcnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEV2ZW50cyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9Eb2N1bWVudEV2ZW50cydcbmltcG9ydCB7IHVzZURvY3VtZW50SW5mbyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9Eb2N1bWVudEluZm8nXG5pbXBvcnQgeyBFZGl0RGVwdGhDb250ZXh0IH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL0VkaXREZXB0aCdcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9Mb2NhbGUnXG5pbXBvcnQgeyB1c2VQcmVmZXJlbmNlcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9QcmVmZXJlbmNlcydcbmltcG9ydCBSZW5kZXJDdXN0b21Db21wb25lbnQgZnJvbSAnLi4vLi4vdXRpbGl0aWVzL1JlbmRlckN1c3RvbUNvbXBvbmVudCdcbmltcG9ydCBEZWZhdWx0R2xvYmFsVmlldyBmcm9tICcuL0RlZmF1bHQnXG5cbmNvbnN0IEdsb2JhbFZpZXc6IFJlYWN0LkZDPEluZGV4UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgZ2xvYmFsIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgc3RhdGU6IGxvY2F0aW9uU3RhdGUgfSA9IHVzZUxvY2F0aW9uPHsgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+KClcbiAgY29uc3QgeyBjb2RlOiBsb2NhbGUgfSA9IHVzZUxvY2FsZSgpXG4gIGNvbnN0IHsgcGVybWlzc2lvbnMsIHVzZXIgfSA9IHVzZUF1dGgoKVxuICBjb25zdCBbaW5pdGlhbFN0YXRlLCBzZXRJbml0aWFsU3RhdGVdID0gdXNlU3RhdGU8RmllbGRzPigpXG4gIGNvbnN0IFt1cGRhdGVkQXQsIHNldFVwZGF0ZWRBdF0gPSB1c2VTdGF0ZTxzdHJpbmc+KClcbiAgY29uc3QgeyBkb2NQZXJtaXNzaW9ucywgZ2V0RG9jUGVybWlzc2lvbnMsIGdldERvY1ByZWZlcmVuY2VzLCBnZXRWZXJzaW9ucywgcHJlZmVyZW5jZXNLZXkgfSA9XG4gICAgdXNlRG9jdW1lbnRJbmZvKClcbiAgY29uc3QgeyBnZXRQcmVmZXJlbmNlIH0gPSB1c2VQcmVmZXJlbmNlcygpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCBjb25maWcgPSB1c2VDb25maWcoKVxuXG4gIGNvbnN0IHtcbiAgICByb3V0ZXM6IHsgYXBpIH0sXG4gICAgc2VydmVyVVJMLFxuICB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCB7IHJlcG9ydFVwZGF0ZSB9ID0gdXNlRG9jdW1lbnRFdmVudHMoKVxuXG4gIGNvbnN0IHsgc2x1ZywgYWRtaW46IHsgY29tcG9uZW50czogeyB2aWV3czogeyBFZGl0OiBFZGl0IH0gPSB7fSB9ID0ge30gfSA9IHt9LCBmaWVsZHMgfSA9IGdsb2JhbFxuXG4gIGNvbnN0IG9uU2F2ZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChqc29uKSA9PiB7XG4gICAgICByZXBvcnRVcGRhdGUoe1xuICAgICAgICBlbnRpdHlTbHVnOiBnbG9iYWwuc2x1ZyxcbiAgICAgICAgdXBkYXRlZEF0OiBqc29uPy5yZXN1bHQ/LnVwZGF0ZWRBdCB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9KVxuXG4gICAgICBnZXRWZXJzaW9ucygpXG4gICAgICBnZXREb2NQZXJtaXNzaW9ucygpXG4gICAgICBzZXRVcGRhdGVkQXQoanNvbj8ucmVzdWx0Py51cGRhdGVkQXQpXG5cbiAgICAgIGNvbnN0IHByZWZlcmVuY2VzID0gYXdhaXQgZ2V0RG9jUHJlZmVyZW5jZXMoKVxuXG4gICAgICBjb25zdCBzdGF0ZSA9IGF3YWl0IGJ1aWxkU3RhdGVGcm9tU2NoZW1hKHtcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBkYXRhOiBqc29uLnJlc3VsdCxcbiAgICAgICAgZmllbGRTY2hlbWE6IGZpZWxkcyxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBvcGVyYXRpb246ICd1cGRhdGUnLFxuICAgICAgICBwcmVmZXJlbmNlcyxcbiAgICAgICAgdCxcbiAgICAgICAgdXNlcixcbiAgICAgIH0pXG4gICAgICBzZXRJbml0aWFsU3RhdGUoc3RhdGUpXG4gICAgfSxcbiAgICBbXG4gICAgICBnZXRWZXJzaW9ucyxcbiAgICAgIGZpZWxkcyxcbiAgICAgIHVzZXIsXG4gICAgICBsb2NhbGUsXG4gICAgICB0LFxuICAgICAgZ2V0RG9jUGVybWlzc2lvbnMsXG4gICAgICBnZXREb2NQcmVmZXJlbmNlcyxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGdsb2JhbCxcbiAgICAgIHJlcG9ydFVwZGF0ZSxcbiAgICBdLFxuICApXG5cbiAgY29uc3QgW3sgZGF0YSwgaXNMb2FkaW5nOiBpc0xvYWRpbmdEYXRhIH1dID0gdXNlUGF5bG9hZEFQSShgJHtzZXJ2ZXJVUkx9JHthcGl9L2dsb2JhbHMvJHtzbHVnfWAsIHtcbiAgICBpbml0aWFsRGF0YTogbnVsbCxcbiAgICBpbml0aWFsUGFyYW1zOiB7IGRlcHRoOiAwLCBkcmFmdDogJ3RydWUnLCAnZmFsbGJhY2stbG9jYWxlJzogJ251bGwnIH0sXG4gIH0pXG5cbiAgY29uc3QgZGF0YVRvUmVuZGVyID0gbG9jYXRpb25TdGF0ZT8uZGF0YSB8fCBkYXRhXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBhd2FpdEluaXRpYWxTdGF0ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByZWZlcmVuY2VzID0gYXdhaXQgZ2V0RG9jUHJlZmVyZW5jZXMoKVxuICAgICAgY29uc3Qgc3RhdGUgPSBhd2FpdCBidWlsZFN0YXRlRnJvbVNjaGVtYSh7XG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZGF0YTogZGF0YVRvUmVuZGVyLFxuICAgICAgICBmaWVsZFNjaGVtYTogZmllbGRzLFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIG9wZXJhdGlvbjogJ3VwZGF0ZScsXG4gICAgICAgIHByZWZlcmVuY2VzLFxuICAgICAgICB0LFxuICAgICAgICB1c2VyLFxuICAgICAgfSlcblxuICAgICAgaWYgKHByZWZlcmVuY2VzS2V5KSB7XG4gICAgICAgIGF3YWl0IGdldFByZWZlcmVuY2UocHJlZmVyZW5jZXNLZXkpXG4gICAgICB9XG5cbiAgICAgIHNldEluaXRpYWxTdGF0ZShzdGF0ZSlcbiAgICB9XG5cbiAgICBpZiAoZGF0YVRvUmVuZGVyKSBhd2FpdEluaXRpYWxTdGF0ZSgpXG4gIH0sIFtcbiAgICBkYXRhVG9SZW5kZXIsXG4gICAgZmllbGRzLFxuICAgIHVzZXIsXG4gICAgbG9jYWxlLFxuICAgIGdldFByZWZlcmVuY2UsXG4gICAgcHJlZmVyZW5jZXNLZXksXG4gICAgdCxcbiAgICBnZXREb2NQcmVmZXJlbmNlcyxcbiAgICBjb25maWcsXG4gIF0pXG5cbiAgY29uc3QgaXNMb2FkaW5nID0gIWluaXRpYWxTdGF0ZSB8fCAhZG9jUGVybWlzc2lvbnMgfHwgaXNMb2FkaW5nRGF0YVxuXG4gIGNvbnN0IGNvbXBvbmVudFByb3BzOiBEZWZhdWx0R2xvYmFsVmlld1Byb3BzID0ge1xuICAgIGFjdGlvbjogYCR7c2VydmVyVVJMfSR7YXBpfS9nbG9iYWxzLyR7c2x1Z30/bG9jYWxlPSR7bG9jYWxlfSZmYWxsYmFjay1sb2NhbGU9bnVsbGAsXG4gICAgYXBpVVJMOiBgJHtzZXJ2ZXJVUkx9JHthcGl9L2dsb2JhbHMvJHtzbHVnfT9sb2NhbGU9JHtsb2NhbGV9JHtcbiAgICAgIGdsb2JhbC52ZXJzaW9ucz8uZHJhZnRzID8gJyZkcmFmdD10cnVlJyA6ICcnXG4gICAgfWAsXG4gICAgY2FuQWNjZXNzQWRtaW46IHBlcm1pc3Npb25zPy5jYW5BY2Nlc3NBZG1pbixcbiAgICBkYXRhOiBkYXRhVG9SZW5kZXIsXG4gICAgZmllbGRUeXBlcyxcbiAgICBnbG9iYWwsXG4gICAgaW5pdGlhbFN0YXRlLFxuICAgIGlzTG9hZGluZyxcbiAgICBvblNhdmUsXG4gICAgcGVybWlzc2lvbnM6IGRvY1Blcm1pc3Npb25zLFxuICAgIHVwZGF0ZWRBdDogdXBkYXRlZEF0IHx8IGRhdGFUb1JlbmRlcj8udXBkYXRlZEF0LFxuICAgIHVzZXIsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxFZGl0RGVwdGhDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXsxfT5cbiAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXt0eXBlb2YgRWRpdCA9PT0gJ2Z1bmN0aW9uJyA/IEVkaXQgOiB1bmRlZmluZWR9XG4gICAgICAgIERlZmF1bHRDb21wb25lbnQ9e0RlZmF1bHRHbG9iYWxWaWV3fVxuICAgICAgICBjb21wb25lbnRQcm9wcz17Y29tcG9uZW50UHJvcHN9XG4gICAgICAvPlxuICAgIDwvRWRpdERlcHRoQ29udGV4dC5Qcm92aWRlcj5cbiAgKVxufVxuZXhwb3J0IGRlZmF1bHQgR2xvYmFsVmlld1xuIl0sIm5hbWVzIjpbIkdsb2JhbFZpZXciLCJwcm9wcyIsImdsb2JhbCIsInN0YXRlIiwibG9jYXRpb25TdGF0ZSIsInVzZUxvY2F0aW9uIiwiY29kZSIsImxvY2FsZSIsInVzZUxvY2FsZSIsInBlcm1pc3Npb25zIiwidXNlciIsInVzZUF1dGgiLCJpbml0aWFsU3RhdGUiLCJzZXRJbml0aWFsU3RhdGUiLCJ1c2VTdGF0ZSIsInVwZGF0ZWRBdCIsInNldFVwZGF0ZWRBdCIsImRvY1Blcm1pc3Npb25zIiwiZ2V0RG9jUGVybWlzc2lvbnMiLCJnZXREb2NQcmVmZXJlbmNlcyIsImdldFZlcnNpb25zIiwicHJlZmVyZW5jZXNLZXkiLCJ1c2VEb2N1bWVudEluZm8iLCJnZXRQcmVmZXJlbmNlIiwidXNlUHJlZmVyZW5jZXMiLCJ0IiwidXNlVHJhbnNsYXRpb24iLCJjb25maWciLCJ1c2VDb25maWciLCJyb3V0ZXMiLCJhcGkiLCJzZXJ2ZXJVUkwiLCJyZXBvcnRVcGRhdGUiLCJ1c2VEb2N1bWVudEV2ZW50cyIsInNsdWciLCJhZG1pbiIsImNvbXBvbmVudHMiLCJ2aWV3cyIsIkVkaXQiLCJmaWVsZHMiLCJvblNhdmUiLCJ1c2VDYWxsYmFjayIsImpzb24iLCJlbnRpdHlTbHVnIiwicmVzdWx0IiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwicHJlZmVyZW5jZXMiLCJidWlsZFN0YXRlRnJvbVNjaGVtYSIsImRhdGEiLCJmaWVsZFNjaGVtYSIsIm9wZXJhdGlvbiIsImlzTG9hZGluZyIsImlzTG9hZGluZ0RhdGEiLCJ1c2VQYXlsb2FkQVBJIiwiaW5pdGlhbERhdGEiLCJpbml0aWFsUGFyYW1zIiwiZGVwdGgiLCJkcmFmdCIsImRhdGFUb1JlbmRlciIsInVzZUVmZmVjdCIsImF3YWl0SW5pdGlhbFN0YXRlIiwiY29tcG9uZW50UHJvcHMiLCJhY3Rpb24iLCJhcGlVUkwiLCJ2ZXJzaW9ucyIsImRyYWZ0cyIsImNhbkFjY2Vzc0FkbWluIiwiZmllbGRUeXBlcyIsIkVkaXREZXB0aENvbnRleHQiLCJQcm92aWRlciIsInZhbHVlIiwiUmVuZGVyQ3VzdG9tQ29tcG9uZW50IiwiQ3VzdG9tQ29tcG9uZW50IiwidW5kZWZpbmVkIiwiRGVmYXVsdENvbXBvbmVudCIsIkRlZmF1bHRHbG9iYWxWaWV3Il0sIm1hcHBpbmdzIjoiOzs7OytCQXlKQTs7O2VBQUE7OzsrREF6SndEOzhCQUN6QjtnQ0FDSDtzRUFNRjs2RUFDTzs0QkFDTjtzQkFDSDt3QkFDRTtnQ0FDUTs4QkFDRjsyQkFDQzt3QkFDUDs2QkFDSzs4RUFDRztnRUFDSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFOUIsTUFBTUEsYUFBbUMsQ0FBQ0M7SUFDeEMsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR0Q7SUFFbkIsTUFBTSxFQUFFRSxPQUFPQyxhQUFhLEVBQUUsR0FBR0MsSUFBQUEsMkJBQVc7SUFDNUMsTUFBTSxFQUFFQyxNQUFNQyxNQUFNLEVBQUUsR0FBR0MsSUFBQUEsaUJBQVM7SUFDbEMsTUFBTSxFQUFFQyxXQUFXLEVBQUVDLElBQUksRUFBRSxHQUFHQyxJQUFBQSxhQUFPO0lBQ3JDLE1BQU0sQ0FBQ0MsY0FBY0MsZ0JBQWdCLEdBQUdDLElBQUFBLGVBQVE7SUFDaEQsTUFBTSxDQUFDQyxXQUFXQyxhQUFhLEdBQUdGLElBQUFBLGVBQVE7SUFDMUMsTUFBTSxFQUFFRyxjQUFjLEVBQUVDLGlCQUFpQixFQUFFQyxpQkFBaUIsRUFBRUMsV0FBVyxFQUFFQyxjQUFjLEVBQUUsR0FDekZDLElBQUFBLDZCQUFlO0lBQ2pCLE1BQU0sRUFBRUMsYUFBYSxFQUFFLEdBQUdDLElBQUFBLDJCQUFjO0lBQ3hDLE1BQU0sRUFBRUMsQ0FBQyxFQUFFLEdBQUdDLElBQUFB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