payload
Version:
Node, React and MongoDB Headless CMS and Application Framework
197 lines (196 loc) • 23.4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _executeAccess = /*#__PURE__*/ _interop_require_default(require("../../auth/executeAccess"));
const _combineQueries = require("../../database/combineQueries");
const _validateQueryPaths = require("../../database/queryValidation/validateQueryPaths");
const _afterRead = require("../../fields/hooks/afterRead");
const _commitTransaction = require("../../utilities/commitTransaction");
const _initTransaction = require("../../utilities/initTransaction");
const _killTransaction = require("../../utilities/killTransaction");
const _buildCollectionFields = require("../../versions/buildCollectionFields");
const _appendVersionToQueryKey = require("../../versions/drafts/appendVersionToQueryKey");
const _getQueryDraftsSort = require("../../versions/drafts/getQueryDraftsSort");
const _utils = require("./utils");
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
async function find(incomingArgs) {
let args = incomingArgs;
try {
const shouldCommit = await (0, _initTransaction.initTransaction)(args.req);
// /////////////////////////////////////
// beforeOperation - Collection
// /////////////////////////////////////
await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook)=>{
await priorHook;
args = await hook({
args,
collection: args.collection.config,
context: args.req.context,
operation: 'read',
req: args.req
}) || args;
}, Promise.resolve());
const { collection: { config: collectionConfig }, collection, currentDepth, depth, disableErrors, draft: draftsEnabled, limit, overrideAccess, page, pagination = true, req: { fallbackLocale, locale, payload }, req, showHiddenFields, sort, where } = args;
// /////////////////////////////////////
// Access
// /////////////////////////////////////
let accessResult;
if (!overrideAccess) {
accessResult = await (0, _executeAccess.default)({
disableErrors,
req
}, collectionConfig.access.read);
// If errors are disabled, and access returns false, return empty results
if (accessResult === false) {
return {
docs: [],
hasNextPage: false,
hasPrevPage: false,
limit,
nextPage: null,
page: 1,
pagingCounter: 1,
prevPage: null,
totalDocs: 0,
totalPages: 1
};
}
}
// /////////////////////////////////////
// Find
// /////////////////////////////////////
const usePagination = pagination && limit !== 0;
const sanitizedLimit = limit ?? (usePagination ? 10 : 0);
const sanitizedPage = page || 1;
let result;
let fullWhere = (0, _combineQueries.combineQueries)(where, accessResult);
if (collectionConfig.versions?.drafts && draftsEnabled) {
fullWhere = (0, _appendVersionToQueryKey.appendVersionToQueryKey)(fullWhere);
await (0, _validateQueryPaths.validateQueryPaths)({
collectionConfig: collection.config,
overrideAccess,
req,
versionFields: (0, _buildCollectionFields.buildVersionCollectionFields)(collection.config),
where: fullWhere
});
result = await payload.db.queryDrafts({
collection: collectionConfig.slug,
limit: sanitizedLimit,
locale,
page: sanitizedPage,
pagination: usePagination,
req,
sort: (0, _getQueryDraftsSort.getQueryDraftsSort)(sort),
where: fullWhere
});
} else {
await (0, _validateQueryPaths.validateQueryPaths)({
collectionConfig,
overrideAccess,
req,
where
});
result = await payload.db.find({
collection: collectionConfig.slug,
limit: sanitizedLimit,
locale,
page: sanitizedPage,
pagination,
req,
sort,
where: fullWhere
});
}
// /////////////////////////////////////
// beforeRead - Collection
// /////////////////////////////////////
result = {
...result,
docs: await Promise.all(result.docs.map(async (doc)=>{
let docRef = doc;
await collectionConfig.hooks.beforeRead.reduce(async (priorHook, hook)=>{
await priorHook;
docRef = await hook({
collection: collectionConfig,
context: req.context,
doc: docRef,
query: fullWhere,
req
}) || docRef;
}, Promise.resolve());
return docRef;
}))
};
// /////////////////////////////////////
// afterRead - Fields
// /////////////////////////////////////
result = {
...result,
docs: await Promise.all(result.docs.map(async (doc)=>(0, _afterRead.afterRead)({
collection: collectionConfig,
context: req.context,
currentDepth,
depth,
doc,
fallbackLocale,
findMany: true,
global: null,
locale,
overrideAccess,
req,
showHiddenFields
})))
};
// /////////////////////////////////////
// afterRead - Collection
// /////////////////////////////////////
result = {
...result,
docs: await Promise.all(result.docs.map(async (doc)=>{
let docRef = doc;
await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook)=>{
await priorHook;
docRef = await hook({
collection: collectionConfig,
context: req.context,
doc: docRef,
findMany: true,
query: fullWhere,
req
}) || doc;
}, Promise.resolve());
return docRef;
}))
};
// /////////////////////////////////////
// afterOperation - Collection
// /////////////////////////////////////
result = await (0, _utils.buildAfterOperation)({
args,
collection: collectionConfig,
operation: 'find',
result
});
// /////////////////////////////////////
// Return results
// /////////////////////////////////////
if (shouldCommit) await (0, _commitTransaction.commitTransaction)(req);
return result;
} catch (error) {
await (0, _killTransaction.killTransaction)(args.req);
throw error;
}
}
const _default = find;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2xsZWN0aW9ucy9vcGVyYXRpb25zL2ZpbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY2Nlc3NSZXN1bHQgfSBmcm9tICcuLi8uLi9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFBhZ2luYXRlZERvY3MgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS90eXBlcydcbmltcG9ydCB0eXBlIHsgUGF5bG9hZFJlcXVlc3QgfSBmcm9tICcuLi8uLi9leHByZXNzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBXaGVyZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uLCBUeXBlV2l0aElEIH0gZnJvbSAnLi4vY29uZmlnL3R5cGVzJ1xuXG5pbXBvcnQgZXhlY3V0ZUFjY2VzcyBmcm9tICcuLi8uLi9hdXRoL2V4ZWN1dGVBY2Nlc3MnXG5pbXBvcnQgeyBjb21iaW5lUXVlcmllcyB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL2NvbWJpbmVRdWVyaWVzJ1xuaW1wb3J0IHsgdmFsaWRhdGVRdWVyeVBhdGhzIH0gZnJvbSAnLi4vLi4vZGF0YWJhc2UvcXVlcnlWYWxpZGF0aW9uL3ZhbGlkYXRlUXVlcnlQYXRocydcbmltcG9ydCB7IGFmdGVyUmVhZCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9ob29rcy9hZnRlclJlYWQnXG5pbXBvcnQgeyBjb21taXRUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9jb21taXRUcmFuc2FjdGlvbidcbmltcG9ydCB7IGluaXRUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9pbml0VHJhbnNhY3Rpb24nXG5pbXBvcnQgeyBraWxsVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi91dGlsaXRpZXMva2lsbFRyYW5zYWN0aW9uJ1xuaW1wb3J0IHsgYnVpbGRWZXJzaW9uQ29sbGVjdGlvbkZpZWxkcyB9IGZyb20gJy4uLy4uL3ZlcnNpb25zL2J1aWxkQ29sbGVjdGlvbkZpZWxkcydcbmltcG9ydCB7IGFwcGVuZFZlcnNpb25Ub1F1ZXJ5S2V5IH0gZnJvbSAnLi4vLi4vdmVyc2lvbnMvZHJhZnRzL2FwcGVuZFZlcnNpb25Ub1F1ZXJ5S2V5J1xuaW1wb3J0IHsgZ2V0UXVlcnlEcmFmdHNTb3J0IH0gZnJvbSAnLi4vLi4vdmVyc2lvbnMvZHJhZnRzL2dldFF1ZXJ5RHJhZnRzU29ydCdcbmltcG9ydCB7IGJ1aWxkQWZ0ZXJPcGVyYXRpb24gfSBmcm9tICcuL3V0aWxzJ1xuXG5leHBvcnQgdHlwZSBBcmd1bWVudHMgPSB7XG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb25cbiAgY3VycmVudERlcHRoPzogbnVtYmVyXG4gIGRlcHRoPzogbnVtYmVyXG4gIGRpc2FibGVFcnJvcnM/OiBib29sZWFuXG4gIGRyYWZ0PzogYm9vbGVhblxuICBsaW1pdD86IG51bWJlclxuICBvdmVycmlkZUFjY2Vzcz86IGJvb2xlYW5cbiAgcGFnZT86IG51bWJlclxuICBwYWdpbmF0aW9uPzogYm9vbGVhblxuICByZXE/OiBQYXlsb2FkUmVxdWVzdFxuICBzaG93SGlkZGVuRmllbGRzPzogYm9vbGVhblxuICBzb3J0Pzogc3RyaW5nXG4gIHdoZXJlPzogV2hlcmVcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluZDxUIGV4dGVuZHMgVHlwZVdpdGhJRCAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgaW5jb21pbmdBcmdzOiBBcmd1bWVudHMsXG4pOiBQcm9taXNlPFBhZ2luYXRlZERvY3M8VD4+IHtcbiAgbGV0IGFyZ3MgPSBpbmNvbWluZ0FyZ3NcblxuICB0cnkge1xuICAgIGNvbnN0IHNob3VsZENvbW1pdCA9IGF3YWl0IGluaXRUcmFuc2FjdGlvbihhcmdzLnJlcSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBiZWZvcmVPcGVyYXRpb24gLSBDb2xsZWN0aW9uXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgYXdhaXQgYXJncy5jb2xsZWN0aW9uLmNvbmZpZy5ob29rcy5iZWZvcmVPcGVyYXRpb24ucmVkdWNlKGFzeW5jIChwcmlvckhvb2ssIGhvb2spID0+IHtcbiAgICAgIGF3YWl0IHByaW9ySG9va1xuXG4gICAgICBhcmdzID1cbiAgICAgICAgKGF3YWl0IGhvb2soe1xuICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgY29sbGVjdGlvbjogYXJncy5jb2xsZWN0aW9uLmNvbmZpZyxcbiAgICAgICAgICBjb250ZXh0OiBhcmdzLnJlcS5jb250ZXh0LFxuICAgICAgICAgIG9wZXJhdGlvbjogJ3JlYWQnLFxuICAgICAgICAgIHJlcTogYXJncy5yZXEsXG4gICAgICAgIH0pKSB8fCBhcmdzXG4gICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpXG5cbiAgICBjb25zdCB7XG4gICAgICBjb2xsZWN0aW9uOiB7IGNvbmZpZzogY29sbGVjdGlvbkNvbmZpZyB9LFxuICAgICAgY29sbGVjdGlvbixcbiAgICAgIGN1cnJlbnREZXB0aCxcbiAgICAgIGRlcHRoLFxuICAgICAgZGlzYWJsZUVycm9ycyxcbiAgICAgIGRyYWZ0OiBkcmFmdHNFbmFibGVkLFxuICAgICAgbGltaXQsXG4gICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgIHBhZ2UsXG4gICAgICBwYWdpbmF0aW9uID0gdHJ1ZSxcbiAgICAgIHJlcTogeyBmYWxsYmFja0xvY2FsZSwgbG9jYWxlLCBwYXlsb2FkIH0sXG4gICAgICByZXEsXG4gICAgICBzaG93SGlkZGVuRmllbGRzLFxuICAgICAgc29ydCxcbiAgICAgIHdoZXJlLFxuICAgIH0gPSBhcmdzXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQWNjZXNzXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgbGV0IGFjY2Vzc1Jlc3VsdDogQWNjZXNzUmVzdWx0XG5cbiAgICBpZiAoIW92ZXJyaWRlQWNjZXNzKSB7XG4gICAgICBhY2Nlc3NSZXN1bHQgPSBhd2FpdCBleGVjdXRlQWNjZXNzKHsgZGlzYWJsZUVycm9ycywgcmVxIH0sIGNvbGxlY3Rpb25Db25maWcuYWNjZXNzLnJlYWQpXG5cbiAgICAgIC8vIElmIGVycm9ycyBhcmUgZGlzYWJsZWQsIGFuZCBhY2Nlc3MgcmV0dXJucyBmYWxzZSwgcmV0dXJuIGVtcHR5IHJlc3VsdHNcbiAgICAgIGlmIChhY2Nlc3NSZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZG9jczogW10sXG4gICAgICAgICAgaGFzTmV4dFBhZ2U6IGZhbHNlLFxuICAgICAgICAgIGhhc1ByZXZQYWdlOiBmYWxzZSxcbiAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICBuZXh0UGFnZTogbnVsbCxcbiAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgIHBhZ2luZ0NvdW50ZXI6IDEsXG4gICAgICAgICAgcHJldlBhZ2U6IG51bGwsXG4gICAgICAgICAgdG90YWxEb2NzOiAwLFxuICAgICAgICAgIHRvdGFsUGFnZXM6IDEsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRmluZFxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGNvbnN0IHVzZVBhZ2luYXRpb24gPSBwYWdpbmF0aW9uICYmIGxpbWl0ICE9PSAwXG4gICAgY29uc3Qgc2FuaXRpemVkTGltaXQgPSBsaW1pdCA/PyAodXNlUGFnaW5hdGlvbiA/IDEwIDogMClcbiAgICBjb25zdCBzYW5pdGl6ZWRQYWdlID0gcGFnZSB8fCAxXG5cbiAgICBsZXQgcmVzdWx0OiBQYWdpbmF0ZWREb2NzPFQ+XG5cbiAgICBsZXQgZnVsbFdoZXJlID0gY29tYmluZVF1ZXJpZXMod2hlcmUsIGFjY2Vzc1Jlc3VsdClcblxuICAgIGlmIChjb2xsZWN0aW9uQ29uZmlnLnZlcnNpb25zPy5kcmFmdHMgJiYgZHJhZnRzRW5hYmxlZCkge1xuICAgICAgZnVsbFdoZXJlID0gYXBwZW5kVmVyc2lvblRvUXVlcnlLZXkoZnVsbFdoZXJlKVxuXG4gICAgICBhd2FpdCB2YWxpZGF0ZVF1ZXJ5UGF0aHMoe1xuICAgICAgICBjb2xsZWN0aW9uQ29uZmlnOiBjb2xsZWN0aW9uLmNvbmZpZyxcbiAgICAgICAgb3ZlcnJpZGVBY2Nlc3MsXG4gICAgICAgIHJlcSxcbiAgICAgICAgdmVyc2lvbkZpZWxkczogYnVpbGRWZXJzaW9uQ29sbGVjdGlvbkZpZWxkcyhjb2xsZWN0aW9uLmNvbmZpZyksXG4gICAgICAgIHdoZXJlOiBmdWxsV2hlcmUsXG4gICAgICB9KVxuXG4gICAgICByZXN1bHQgPSBhd2FpdCBwYXlsb2FkLmRiLnF1ZXJ5RHJhZnRzPFQ+KHtcbiAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZy5zbHVnLFxuICAgICAgICBsaW1pdDogc2FuaXRpemVkTGltaXQsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgcGFnZTogc2FuaXRpemVkUGFnZSxcbiAgICAgICAgcGFnaW5hdGlvbjogdXNlUGFnaW5hdGlvbixcbiAgICAgICAgcmVxLFxuICAgICAgICBzb3J0OiBnZXRRdWVyeURyYWZ0c1NvcnQoc29ydCksXG4gICAgICAgIHdoZXJlOiBmdWxsV2hlcmUsXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB2YWxpZGF0ZVF1ZXJ5UGF0aHMoe1xuICAgICAgICBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgICAgcmVxLFxuICAgICAgICB3aGVyZSxcbiAgICAgIH0pXG5cbiAgICAgIHJlc3VsdCA9IGF3YWl0IHBheWxvYWQuZGIuZmluZDxUPih7XG4gICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcuc2x1ZyxcbiAgICAgICAgbGltaXQ6IHNhbml0aXplZExpbWl0LFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIHBhZ2U6IHNhbml0aXplZFBhZ2UsXG4gICAgICAgIHBhZ2luYXRpb24sXG4gICAgICAgIHJlcSxcbiAgICAgICAgc29ydCxcbiAgICAgICAgd2hlcmU6IGZ1bGxXaGVyZSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGJlZm9yZVJlYWQgLSBDb2xsZWN0aW9uXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgcmVzdWx0ID0ge1xuICAgICAgLi4ucmVzdWx0LFxuICAgICAgZG9jczogYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHJlc3VsdC5kb2NzLm1hcChhc3luYyAoZG9jKSA9PiB7XG4gICAgICAgICAgbGV0IGRvY1JlZiA9IGRvY1xuXG4gICAgICAgICAgYXdhaXQgY29sbGVjdGlvbkNvbmZpZy5ob29rcy5iZWZvcmVSZWFkLnJlZHVjZShhc3luYyAocHJpb3JIb29rLCBob29rKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBwcmlvckhvb2tcblxuICAgICAgICAgICAgZG9jUmVmID1cbiAgICAgICAgICAgICAgKGF3YWl0IGhvb2soe1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICAgICAgICAgICAgY29udGV4dDogcmVxLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgZG9jOiBkb2NSZWYsXG4gICAgICAgICAgICAgICAgcXVlcnk6IGZ1bGxXaGVyZSxcbiAgICAgICAgICAgICAgICByZXEsXG4gICAgICAgICAgICAgIH0pKSB8fCBkb2NSZWZcbiAgICAgICAgICB9LCBQcm9taXNlLnJlc29sdmUoKSlcblxuICAgICAgICAgIHJldHVybiBkb2NSZWZcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgIH1cblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlclJlYWQgLSBGaWVsZHNcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICByZXN1bHQgPSB7XG4gICAgICAuLi5yZXN1bHQsXG4gICAgICBkb2NzOiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgcmVzdWx0LmRvY3MubWFwKGFzeW5jIChkb2MpID0+XG4gICAgICAgICAgYWZ0ZXJSZWFkPFQ+KHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICAgICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgICAgICAgIGN1cnJlbnREZXB0aCxcbiAgICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgICAgZG9jLFxuICAgICAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgICAgICBmaW5kTWFueTogdHJ1ZSxcbiAgICAgICAgICAgIGdsb2JhbDogbnVsbCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgICAgICAgcmVxLFxuICAgICAgICAgICAgc2hvd0hpZGRlbkZpZWxkcyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgfVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGFmdGVyUmVhZCAtIENvbGxlY3Rpb25cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICByZXN1bHQgPSB7XG4gICAgICAuLi5yZXN1bHQsXG4gICAgICBkb2NzOiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgcmVzdWx0LmRvY3MubWFwKGFzeW5jIChkb2MpID0+IHtcbiAgICAgICAgICBsZXQgZG9jUmVmID0gZG9jXG5cbiAgICAgICAgICBhd2FpdCBjb2xsZWN0aW9uQ29uZmlnLmhvb2tzLmFmdGVyUmVhZC5yZWR1Y2UoYXN5bmMgKHByaW9ySG9vaywgaG9vaykgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcHJpb3JIb29rXG5cbiAgICAgICAgICAgIGRvY1JlZiA9XG4gICAgICAgICAgICAgIChhd2FpdCBob29rKHtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHJlcS5jb250ZXh0LFxuICAgICAgICAgICAgICAgIGRvYzogZG9jUmVmLFxuICAgICAgICAgICAgICAgIGZpbmRNYW55OiB0cnVlLFxuICAgICAgICAgICAgICAgIHF1ZXJ5OiBmdWxsV2hlcmUsXG4gICAgICAgICAgICAgICAgcmVxLFxuICAgICAgICAgICAgICB9KSkgfHwgZG9jXG4gICAgICAgICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpXG5cbiAgICAgICAgICByZXR1cm4gZG9jUmVmXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICB9XG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gYWZ0ZXJPcGVyYXRpb24gLSBDb2xsZWN0aW9uXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgcmVzdWx0ID0gYXdhaXQgYnVpbGRBZnRlck9wZXJhdGlvbjxUPih7XG4gICAgICBhcmdzLFxuICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgIG9wZXJhdGlvbjogJ2ZpbmQnLFxuICAgICAgcmVzdWx0LFxuICAgIH0pXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUmV0dXJuIHJlc3VsdHNcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBpZiAoc2hvdWxkQ29tbWl0KSBhd2FpdCBjb21taXRUcmFuc2FjdGlvbihyZXEpXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgYXdhaXQga2lsbFRyYW5zYWN0aW9uKGFyZ3MucmVxKVxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZmluZFxuIl0sIm5hbWVzIjpbImZpbmQiLCJpbmNvbWluZ0FyZ3MiLCJhcmdzIiwic2hvdWxkQ29tbWl0IiwiaW5pdFRyYW5zYWN0aW9uIiwicmVxIiwiY29sbGVjdGlvbiIsImNvbmZpZyIsImhvb2tzIiwiYmVmb3JlT3BlcmF0aW9uIiwicmVkdWNlIiwicHJpb3JIb29rIiwiaG9vayIsImNvbnRleHQiLCJvcGVyYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsImNvbGxlY3Rpb25Db25maWciLCJjdXJyZW50RGVwdGgiLCJkZXB0aCIsImRpc2FibGVFcnJvcnMiLCJkcmFmdCIsImRyYWZ0c0VuYWJsZWQiLCJsaW1pdCIsIm92ZXJyaWRlQWNjZXNzIiwicGFnZSIsInBhZ2luYXRpb24iLCJmYWxsYmFja0xvY2FsZSIsImxvY2FsZSIsInBheWxvYWQiLCJzaG93SGlkZGVuRmllbGRzIiwic29ydCIsIndoZXJlIiwiYWNjZXNzUmVzdWx0IiwiZXhlY3V0ZUFjY2VzcyIsImFjY2VzcyIsInJlYWQiLCJkb2NzIiwiaGFzTmV4dFBhZ2UiLCJoYXNQcmV2UGFnZSIsIm5leHRQYWdlIiwicGFnaW5nQ291bnRlciIsInByZXZQYWdlIiwidG90YWxEb2NzIiwidG90YWxQYWdlcyIsInVzZVBhZ2luYXRpb24iLCJzYW5pdGl6ZWRMaW1pdCIsInNhbml0aXplZFBhZ2UiLCJyZXN1bHQiLCJmdWxsV2hlcmUiLCJjb21iaW5lUXVlcmllcyIsInZlcnNpb25zIiwiZHJhZnRzIiwiYXBwZW5kVmVyc2lvblRvUXVlcnlLZXkiLCJ2YWxpZGF0ZVF1ZXJ5UGF0aHMiLCJ2ZXJzaW9uRmllbGRzIiwiYnVpbGRWZXJzaW9uQ29sbGVjdGlvbkZpZWxkcyIsImRiIiwicXVlcnlEcmFmdHMiLCJzbHVnIiwiZ2V0UXVlcnlEcmFmdHNTb3J0IiwiYWxsIiwibWFwIiwiZG9jIiwiZG9jUmVmIiwiYmVmb3JlUmVhZCIsInF1ZXJ5IiwiYWZ0ZXJSZWFkIiwiZmluZE1hbnkiLCJnbG9iYWwiLCJidWlsZEFmdGVyT3BlcmF0aW9uIiwiY29tbWl0VHJhbnNhY3Rpb24iLCJlcnJvciIsImtpbGxUcmFuc2FjdGlvbiJdLCJtYXBwaW5ncyI6Ijs7OzsrQkF1UUE7OztlQUFBOzs7c0VBalEwQjtnQ0FDSztvQ0FDSTsyQkFDVDttQ0FDUTtpQ0FDRjtpQ0FDQTt1Q0FDYTt5Q0FDTDtvQ0FDTDt1QkFDQzs7Ozs7O0FBa0JwQyxlQUFlQSxLQUNiQyxZQUF1QjtJQUV2QixJQUFJQyxPQUFPRDtJQUVYLElBQUk7UUFDRixNQUFNRSxlQUFlLE1BQU1DLElBQUFBLGdDQUFlLEVBQUNGLEtBQUtHLEdBQUc7UUFFbkQsd0NBQXdDO1FBQ3hDLCtCQUErQjtRQUMvQix3Q0FBd0M7UUFFeEMsTUFBTUgsS0FBS0ksVUFBVSxDQUFDQyxNQUFNLENBQUNDLEtBQUssQ0FBQ0MsZUFBZSxDQUFDQyxNQUFNLENBQUMsT0FBT0MsV0FBV0M7WUFDMUUsTUFBTUQ7WUFFTlQsT0FDRSxBQUFDLE1BQU1VLEtBQUs7Z0JBQ1ZWO2dCQUNBSSxZQUFZSixLQUFLSSxVQUFVLENBQUNDLE1BQU07Z0JBQ2xDTSxTQUFTWCxLQUFLRyxHQUFHLENBQUNRLE9BQU87Z0JBQ3pCQyxXQUFXO2dCQUNYVCxLQUFLSCxLQUFLRyxHQUFHO1lBQ2YsTUFBT0g7UUFDWCxHQUFHYSxRQUFRQyxPQUFPO1FBRWxCLE1BQU0sRUFDSlYsWUFBWSxFQUFFQyxRQUFRVSxnQkFBZ0IsRUFBRSxFQUN4Q1gsVUFBVSxFQUNWWSxZQUFZLEVBQ1pDLEtBQUssRUFDTEMsYUFBYSxFQUNiQyxPQUFPQyxhQUFhLEVBQ3BCQyxLQUFLLEVBQ0xDLGNBQWMsRUFDZEMsSUFBSSxFQUNKQyxhQUFhLElBQUksRUFDakJyQixLQUFLLEVBQUVzQixjQUFjLEVBQUVDLE1BQU0s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