payload
Version:
Node, React and MongoDB Headless CMS and Application Framework
148 lines (147 loc) • 19.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _types = require("../../config/types");
const populate = async ({ currentDepth, data, dataReference, depth, fallbackLocale, field, index, key, locale, overrideAccess, req, showHiddenFields })=>{
const dataToUpdate = dataReference;
const relation = Array.isArray(field.relationTo) ? data.relationTo : field.relationTo;
const relatedCollection = req.payload.collections[relation];
if (relatedCollection) {
let id = Array.isArray(field.relationTo) ? data.value : data;
let relationshipValue;
const shouldPopulate = depth && currentDepth <= depth;
if (typeof id !== 'string' && typeof id !== 'number' && typeof id?.toString === 'function' && typeof id !== 'object') {
id = id.toString();
}
if (shouldPopulate) {
relationshipValue = await req.payloadDataLoader.load(JSON.stringify([
req.transactionID,
relatedCollection.config.slug,
id,
depth,
currentDepth + 1,
locale,
fallbackLocale,
overrideAccess,
showHiddenFields
]));
}
if (!relationshipValue) {
// ids are visible regardless of access controls
relationshipValue = id;
}
if (typeof index === 'number' && typeof key === 'string') {
if (Array.isArray(field.relationTo)) {
dataToUpdate[field.name][key][index].value = relationshipValue;
} else {
dataToUpdate[field.name][key][index] = relationshipValue;
}
} else if (typeof index === 'number' || typeof key === 'string') {
if (Array.isArray(field.relationTo)) {
dataToUpdate[field.name][index ?? key].value = relationshipValue;
} else {
dataToUpdate[field.name][index ?? key] = relationshipValue;
}
} else if (Array.isArray(field.relationTo)) {
dataToUpdate[field.name].value = relationshipValue;
} else {
dataToUpdate[field.name] = relationshipValue;
}
}
};
const relationshipPopulationPromise = async ({ currentDepth, depth, fallbackLocale, field, locale, overrideAccess, req, showHiddenFields, siblingDoc })=>{
const resultingDoc = siblingDoc;
const populateDepth = (0, _types.fieldHasMaxDepth)(field) && field.maxDepth < depth ? field.maxDepth : depth;
const rowPromises = [];
if ((0, _types.fieldSupportsMany)(field) && field.hasMany) {
if (locale === 'all' && typeof siblingDoc[field.name] === 'object' && siblingDoc[field.name] !== null) {
Object.keys(siblingDoc[field.name]).forEach((key)=>{
if (Array.isArray(siblingDoc[field.name][key])) {
siblingDoc[field.name][key].forEach((relatedDoc, index)=>{
const rowPromise = async ()=>{
await populate({
currentDepth,
data: siblingDoc[field.name][key][index],
dataReference: resultingDoc,
depth: populateDepth,
fallbackLocale,
field,
index,
key,
locale,
overrideAccess,
req,
showHiddenFields
});
};
rowPromises.push(rowPromise());
});
}
});
} else if (Array.isArray(siblingDoc[field.name])) {
siblingDoc[field.name].forEach((relatedDoc, index)=>{
const rowPromise = async ()=>{
if (relatedDoc) {
await populate({
currentDepth,
data: relatedDoc,
dataReference: resultingDoc,
depth: populateDepth,
fallbackLocale,
field,
index,
locale,
overrideAccess,
req,
showHiddenFields
});
}
};
rowPromises.push(rowPromise());
});
}
} else if (typeof siblingDoc[field.name] === 'object' && siblingDoc[field.name] !== null && locale === 'all') {
Object.keys(siblingDoc[field.name]).forEach((key)=>{
const rowPromise = async ()=>{
await populate({
currentDepth,
data: siblingDoc[field.name][key],
dataReference: resultingDoc,
depth: populateDepth,
fallbackLocale,
field,
key,
locale,
overrideAccess,
req,
showHiddenFields
});
};
rowPromises.push(rowPromise());
});
await Promise.all(rowPromises);
} else if (siblingDoc[field.name]) {
await populate({
currentDepth,
data: siblingDoc[field.name],
dataReference: resultingDoc,
depth: populateDepth,
fallbackLocale,
field,
locale,
overrideAccess,
req,
showHiddenFields
});
}
await Promise.all(rowPromises);
};
const _default = relationshipPopulationPromise;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9maWVsZHMvaG9va3MvYWZ0ZXJSZWFkL3JlbGF0aW9uc2hpcFBvcHVsYXRpb25Qcm9taXNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGF5bG9hZFJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi9leHByZXNzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWxhdGlvbnNoaXBGaWVsZCwgVXBsb2FkRmllbGQgfSBmcm9tICcuLi8uLi9jb25maWcvdHlwZXMnXG5cbmltcG9ydCB7IGZpZWxkSGFzTWF4RGVwdGgsIGZpZWxkU3VwcG9ydHNNYW55IH0gZnJvbSAnLi4vLi4vY29uZmlnL3R5cGVzJ1xuXG50eXBlIFBvcHVsYXRlQXJncyA9IHtcbiAgY3VycmVudERlcHRoOiBudW1iZXJcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgZGF0YVJlZmVyZW5jZTogUmVjb3JkPHN0cmluZywgYW55PlxuICBkZXB0aDogbnVtYmVyXG4gIGZhbGxiYWNrTG9jYWxlOiBudWxsIHwgc3RyaW5nXG4gIGZpZWxkOiBSZWxhdGlvbnNoaXBGaWVsZCB8IFVwbG9hZEZpZWxkXG4gIGluZGV4PzogbnVtYmVyXG4gIGtleT86IHN0cmluZ1xuICBsb2NhbGU6IG51bGwgfCBzdHJpbmdcbiAgb3ZlcnJpZGVBY2Nlc3M6IGJvb2xlYW5cbiAgcmVxOiBQYXlsb2FkUmVxdWVzdFxuICBzaG93SGlkZGVuRmllbGRzOiBib29sZWFuXG59XG5cbmNvbnN0IHBvcHVsYXRlID0gYXN5bmMgKHtcbiAgY3VycmVudERlcHRoLFxuICBkYXRhLFxuICBkYXRhUmVmZXJlbmNlLFxuICBkZXB0aCxcbiAgZmFsbGJhY2tMb2NhbGUsXG4gIGZpZWxkLFxuICBpbmRleCxcbiAga2V5LFxuICBsb2NhbGUsXG4gIG92ZXJyaWRlQWNjZXNzLFxuICByZXEsXG4gIHNob3dIaWRkZW5GaWVsZHMsXG59OiBQb3B1bGF0ZUFyZ3MpID0+IHtcbiAgY29uc3QgZGF0YVRvVXBkYXRlID0gZGF0YVJlZmVyZW5jZVxuICBjb25zdCByZWxhdGlvbiA9IEFycmF5LmlzQXJyYXkoZmllbGQucmVsYXRpb25UbykgPyAoZGF0YS5yZWxhdGlvblRvIGFzIHN0cmluZykgOiBmaWVsZC5yZWxhdGlvblRvXG4gIGNvbnN0IHJlbGF0ZWRDb2xsZWN0aW9uID0gcmVxLnBheWxvYWQuY29sbGVjdGlvbnNbcmVsYXRpb25dXG5cbiAgaWYgKHJlbGF0ZWRDb2xsZWN0aW9uKSB7XG4gICAgbGV0IGlkID0gQXJyYXkuaXNBcnJheShmaWVsZC5yZWxhdGlvblRvKSA/IGRhdGEudmFsdWUgOiBkYXRhXG4gICAgbGV0IHJlbGF0aW9uc2hpcFZhbHVlXG4gICAgY29uc3Qgc2hvdWxkUG9wdWxhdGUgPSBkZXB0aCAmJiBjdXJyZW50RGVwdGggPD0gZGVwdGhcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBpZCAhPT0gJ3N0cmluZycgJiZcbiAgICAgIHR5cGVvZiBpZCAhPT0gJ251bWJlcicgJiZcbiAgICAgIHR5cGVvZiBpZD8udG9TdHJpbmcgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHR5cGVvZiBpZCAhPT0gJ29iamVjdCdcbiAgICApIHtcbiAgICAgIGlkID0gaWQudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIGlmIChzaG91bGRQb3B1bGF0ZSkge1xuICAgICAgcmVsYXRpb25zaGlwVmFsdWUgPSBhd2FpdCByZXEucGF5bG9hZERhdGFMb2FkZXIubG9hZChcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgIHJlcS50cmFuc2FjdGlvbklELFxuICAgICAgICAgIHJlbGF0ZWRDb2xsZWN0aW9uLmNvbmZpZy5zbHVnLFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgIGN1cnJlbnREZXB0aCArIDEsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgICAgIHNob3dIaWRkZW5GaWVsZHMsXG4gICAgICAgIF0pLFxuICAgICAgKVxuICAgIH1cblxuICAgIGlmICghcmVsYXRpb25zaGlwVmFsdWUpIHtcbiAgICAgIC8vIGlkcyBhcmUgdmlzaWJsZSByZWdhcmRsZXNzIG9mIGFjY2VzcyBjb250cm9sc1xuICAgICAgcmVsYXRpb25zaGlwVmFsdWUgPSBpZFxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICdudW1iZXInICYmIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5yZWxhdGlvblRvKSkge1xuICAgICAgICBkYXRhVG9VcGRhdGVbZmllbGQubmFtZV1ba2V5XVtpbmRleF0udmFsdWUgPSByZWxhdGlvbnNoaXBWYWx1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YVRvVXBkYXRlW2ZpZWxkLm5hbWVdW2tleV1baW5kZXhdID0gcmVsYXRpb25zaGlwVmFsdWVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbmRleCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pKSB7XG4gICAgICAgIGRhdGFUb1VwZGF0ZVtmaWVsZC5uYW1lXVtpbmRleCA/PyBrZXldLnZhbHVlID0gcmVsYXRpb25zaGlwVmFsdWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGFUb1VwZGF0ZVtmaWVsZC5uYW1lXVtpbmRleCA/PyBrZXldID0gcmVsYXRpb25zaGlwVmFsdWVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQucmVsYXRpb25UbykpIHtcbiAgICAgIGRhdGFUb1VwZGF0ZVtmaWVsZC5uYW1lXS52YWx1ZSA9IHJlbGF0aW9uc2hpcFZhbHVlXG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFUb1VwZGF0ZVtmaWVsZC5uYW1lXSA9IHJlbGF0aW9uc2hpcFZhbHVlXG4gICAgfVxuICB9XG59XG5cbnR5cGUgUHJvbWlzZUFyZ3MgPSB7XG4gIGN1cnJlbnREZXB0aDogbnVtYmVyXG4gIGRlcHRoOiBudW1iZXJcbiAgZmFsbGJhY2tMb2NhbGU6IG51bGwgfCBzdHJpbmdcbiAgZmllbGQ6IFJlbGF0aW9uc2hpcEZpZWxkIHwgVXBsb2FkRmllbGRcbiAgbG9jYWxlOiBudWxsIHwgc3RyaW5nXG4gIG92ZXJyaWRlQWNjZXNzOiBib29sZWFuXG4gIHJlcTogUGF5bG9hZFJlcXVlc3RcbiAgc2hvd0hpZGRlbkZpZWxkczogYm9vbGVhblxuICBzaWJsaW5nRG9jOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG59XG5cbmNvbnN0IHJlbGF0aW9uc2hpcFBvcHVsYXRpb25Qcm9taXNlID0gYXN5bmMgKHtcbiAgY3VycmVudERlcHRoLFxuICBkZXB0aCxcbiAgZmFsbGJhY2tMb2NhbGUsXG4gIGZpZWxkLFxuICBsb2NhbGUsXG4gIG92ZXJyaWRlQWNjZXNzLFxuICByZXEsXG4gIHNob3dIaWRkZW5GaWVsZHMsXG4gIHNpYmxpbmdEb2MsXG59OiBQcm9taXNlQXJncyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCByZXN1bHRpbmdEb2MgPSBzaWJsaW5nRG9jXG4gIGNvbnN0IHBvcHVsYXRlRGVwdGggPSBmaWVsZEhhc01heERlcHRoKGZpZWxkKSAmJiBmaWVsZC5tYXhEZXB0aCA8IGRlcHRoID8gZmllbGQubWF4RGVwdGggOiBkZXB0aFxuICBjb25zdCByb3dQcm9taXNlcyA9IFtdXG5cbiAgaWYgKGZpZWxkU3VwcG9ydHNNYW55KGZpZWxkKSAmJiBmaWVsZC5oYXNNYW55KSB7XG4gICAgaWYgKFxuICAgICAgbG9jYWxlID09PSAnYWxsJyAmJlxuICAgICAgdHlwZW9mIHNpYmxpbmdEb2NbZmllbGQubmFtZV0gPT09ICdvYmplY3QnICYmXG4gICAgICBzaWJsaW5nRG9jW2ZpZWxkLm5hbWVdICE9PSBudWxsXG4gICAgKSB7XG4gICAgICBPYmplY3Qua2V5cyhzaWJsaW5nRG9jW2ZpZWxkLm5hbWVdKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2libGluZ0RvY1tmaWVsZC5uYW1lXVtrZXldKSkge1xuICAgICAgICAgIHNpYmxpbmdEb2NbZmllbGQubmFtZV1ba2V5XS5mb3JFYWNoKChyZWxhdGVkRG9jLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93UHJvbWlzZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgYXdhaXQgcG9wdWxhdGUoe1xuICAgICAgICAgICAgICAgIGN1cnJlbnREZXB0aCxcbiAgICAgICAgICAgICAgICBkYXRhOiBzaWJsaW5nRG9jW2ZpZWxkLm5hbWVdW2tleV1baW5kZXhdLFxuICAgICAgICAgICAgICAgIGRhdGFSZWZlcmVuY2U6IHJlc3VsdGluZ0RvYyxcbiAgICAgICAgICAgICAgICBkZXB0aDogcG9wdWxhdGVEZXB0aCxcbiAgICAgICAgICAgICAgICBmYWxsYmFja0xvY2FsZSxcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgICAgICAgICAgIHJlcSxcbiAgICAgICAgICAgICAgICBzaG93SGlkZGVuRmllbGRzLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93UHJvbWlzZXMucHVzaChyb3dQcm9taXNlKCkpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc2libGluZ0RvY1tmaWVsZC5uYW1lXSkpIHtcbiAgICAgIHNpYmxpbmdEb2NbZmllbGQubmFtZV0uZm9yRWFjaCgocmVsYXRlZERvYywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgcm93UHJvbWlzZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAocmVsYXRlZERvYykge1xuICAgICAgICAgICAgYXdhaXQgcG9wdWxhdGUoe1xuICAgICAgICAgICAgICBjdXJyZW50RGVwdGgsXG4gICAgICAgICAgICAgIGRhdGE6IHJlbGF0ZWREb2MsXG4gICAgICAgICAgICAgIGRhdGFSZWZlcmVuY2U6IHJlc3VsdGluZ0RvYyxcbiAgICAgICAgICAgICAgZGVwdGg6IHBvcHVsYXRlRGVwdGgsXG4gICAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgb3ZlcnJpZGVBY2Nlc3MsXG4gICAgICAgICAgICAgIHJlcSxcbiAgICAgICAgICAgICAgc2hvd0hpZGRlbkZpZWxkcyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcm93UHJvbWlzZXMucHVzaChyb3dQcm9taXNlKCkpXG4gICAgICB9KVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICB0eXBlb2Ygc2libGluZ0RvY1tmaWVsZC5uYW1lXSA9PT0gJ29iamVjdCcgJiZcbiAgICBzaWJsaW5nRG9jW2ZpZWxkLm5hbWVdICE9PSBudWxsICYmXG4gICAgbG9jYWxlID09PSAnYWxsJ1xuICApIHtcbiAgICBPYmplY3Qua2V5cyhzaWJsaW5nRG9jW2ZpZWxkLm5hbWVdKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IHJvd1Byb21pc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHBvcHVsYXRlKHtcbiAgICAgICAgICBjdXJyZW50RGVwdGgsXG4gICAgICAgICAgZGF0YTogc2libGluZ0RvY1tmaWVsZC5uYW1lXVtrZXldLFxuICAgICAgICAgIGRhdGFSZWZlcmVuY2U6IHJlc3VsdGluZ0RvYyxcbiAgICAgICAgICBkZXB0aDogcG9wdWxhdGVEZXB0aCxcbiAgICAgICAgICBmYWxsYmFja0xvY2FsZSxcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgICAgIHJlcSxcbiAgICAgICAgICBzaG93SGlkZGVuRmllbGRzLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcm93UHJvbWlzZXMucHVzaChyb3dQcm9taXNlKCkpXG4gICAgfSlcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHJvd1Byb21pc2VzKVxuICB9IGVsc2UgaWYgKHNpYmxpbmdEb2NbZmllbGQubmFtZV0pIHtcbiAgICBhd2FpdCBwb3B1bGF0ZSh7XG4gICAgICBjdXJyZW50RGVwdGgsXG4gICAgICBkYXRhOiBzaWJsaW5nRG9jW2ZpZWxkLm5hbWVdLFxuICAgICAgZGF0YVJlZmVyZW5jZTogcmVzdWx0aW5nRG9jLFxuICAgICAgZGVwdGg6IHBvcHVsYXRlRGVwdGgsXG4gICAgICBmYWxsYmFja0xvY2FsZSxcbiAgICAgIGZpZWxkLFxuICAgICAgbG9jYWxlLFxuICAgICAgb3ZlcnJpZGVBY2Nlc3MsXG4gICAgICByZXEsXG4gICAgICBzaG93SGlkZGVuRmllbGRzLFxuICAgIH0pXG4gIH1cbiAgYXdhaXQgUHJvbWlzZS5hbGwocm93UHJvbWlzZXMpXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbGF0aW9uc2hpcFBvcHVsYXRpb25Qcm9taXNlXG4iXSwibmFtZXMiOlsicG9wdWxhdGUiLCJjdXJyZW50RGVwdGgiLCJkYXRhIiwiZGF0YVJlZmVyZW5jZSIsImRlcHRoIiwiZmFsbGJhY2tMb2NhbGUiLCJmaWVsZCIsImluZGV4Iiwia2V5IiwibG9jYWxlIiwib3ZlcnJpZGVBY2Nlc3MiLCJyZXEiLCJzaG93SGlkZGVuRmllbGRzIiwiZGF0YVRvVXBkYXRlIiwicmVsYXRpb24iLCJBcnJheSIsImlzQXJyYXkiLCJyZWxhdGlvblRvIiwicmVsYXRlZENvbGxlY3Rpb24iLCJwYXlsb2FkIiwiY29sbGVjdGlvbnMiLCJpZCIsInZhbHVlIiwicmVsYXRpb25zaGlwVmFsdWUiLCJzaG91bGRQb3B1bGF0ZSIsInRvU3RyaW5nIiwicGF5bG9hZERhdGFMb2FkZXIiLCJsb2FkIiwiSlNPTiIsInN0cmluZ2lmeSIsInRyYW5zYWN0aW9uSUQiLCJjb25maWciLCJzbHVnIiwibmFtZSIsInJlbGF0aW9uc2hpcFBvcHVsYXRpb25Qcm9taXNlIiwic2libGluZ0RvYyIsInJlc3VsdGluZ0RvYyIsInBvcHVsYXRlRGVwdGgiLCJmaWVsZEhhc01heERlcHRoIiwibWF4RGVwdGgiLCJyb3dQcm9taXNlcyIsImZpZWxkU3VwcG9ydHNNYW55IiwiaGFzTWFueSIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwicmVsYXRlZERvYyIsInJvd1Byb21pc2UiLCJwdXNoIiwiUHJvbWlzZSIsImFsbCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFzTkE7OztlQUFBOzs7dUJBbk5vRDtBQWlCcEQsTUFBTUEsV0FBVyxPQUFPLEVBQ3RCQyxZQUFZLEVBQ1pDLElBQUksRUFDSkMsYUFBYSxFQUNiQyxLQUFLLEVBQ0xDLGNBQWMsRUFDZEMsS0FBSyxFQUNMQyxLQUFLLEVBQ0xDLEdBQUcsRUFDSEMsTUFBTSxFQUNOQyxjQUFjLEVBQ2RDLEdBQUcsRUFDSEMsZ0JBQWdCLEVBQ0g7SUFDYixNQUFNQyxlQUFlVjtJQUNyQixNQUFNVyxXQUFXQyxNQUFNQyxPQUFPLENBQUNWLE1BQU1XLFVBQVUsSUFBS2YsS0FBS2UsVUFBVSxHQUFjWCxNQUFNVyxVQUFVO0lBQ2pHLE1BQU1DLG9CQUFvQlAsSUFBSVEsT0FBTyxDQUFDQyxXQUFXLENBQUNOLFNBQVM7SUFFM0QsSUFBSUksbUJBQW1CO1FBQ3JCLElBQUlHLEtBQUtOLE1BQU1DLE9BQU8sQ0FBQ1YsTUFBTVcsVUFBVSxJQUFJZixLQUFLb0IsS0FBSyxHQUFHcEI7UUFDeEQsSUFBSXFCO1FBQ0osTUFBTUMsaUJBQWlCcEIsU0FBU0gsZ0JBQWdCRztRQUVoRCxJQUNFLE9BQU9p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