UNPKG

payload

Version:

Node, React and MongoDB Headless CMS and Application Framework

154 lines (153 loc) • 21.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "sanitizeFields", { enumerable: true, get: function() { return sanitizeFields; } }); const _withCondition = /*#__PURE__*/ _interop_require_default(require("../../admin/components/forms/withCondition")); const _errors = require("../../errors"); const _formatLabels = require("../../utilities/formatLabels"); const _baseBlockFields = require("../baseFields/baseBlockFields"); const _baseIDField = require("../baseFields/baseIDField"); const _validations = /*#__PURE__*/ _interop_require_default(require("../validations")); const _types = require("./types"); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const sanitizeFields = ({ config, existingFieldNames = new Set(), fields, validRelationships })=>{ if (!fields) return []; return fields.map((unsanitizedField)=>{ const field = { ...unsanitizedField }; if (!field.type) throw new _errors.MissingFieldType(field); // assert that field names do not contain forbidden characters if ((0, _types.fieldAffectsData)(field) && field.name.includes('.')) { throw new _errors.InvalidFieldName(field, field.name); } // Make sure that the richText field has an editor if (field.type === 'richText' && !field.editor && config.editor) { field.editor = config.editor; } // Auto-label if ('name' in field && field.name && typeof field.label !== 'object' && typeof field.label !== 'string' && field.label !== false) { field.label = (0, _formatLabels.toWords)(field.name); } if (field.type === 'checkbox' && typeof field.defaultValue === 'undefined' && field.required === true) { field.defaultValue = false; } if (field.type === 'relationship' || field.type === 'upload') { if (validRelationships) { const relationships = Array.isArray(field.relationTo) ? field.relationTo : [ field.relationTo ]; relationships.forEach((relationship)=>{ if (!validRelationships.includes(relationship)) { throw new _errors.InvalidFieldRelationship(field, relationship); } }); } if (field.type === 'relationship') { if (field.min && !field.minRows) { console.warn(`(payload): The "min" property is deprecated for the Relationship field "${field.name}" and will be removed in a future version. Please use "minRows" instead.`); } if (field.max && !field.maxRows) { console.warn(`(payload): The "max" property is deprecated for the Relationship field "${field.name}" and will be removed in a future version. Please use "maxRows" instead.`); } field.minRows = field.minRows || field.min; field.maxRows = field.maxRows || field.max; } } if (field.type === 'blocks' && field.blocks) { field.blocks = field.blocks.map((block)=>({ ...block, fields: block.fields.concat(_baseBlockFields.baseBlockFields) })); } if (field.type === 'array' && field.fields) { field.fields.push(_baseIDField.baseIDField); } if ((field.type === 'blocks' || field.type === 'array') && field.label) { field.labels = field.labels || (0, _formatLabels.formatLabels)(field.name); } if ((0, _types.fieldAffectsData)(field)) { if (existingFieldNames.has(field.name)) { throw new _errors.DuplicateFieldName(field.name); } else if (![ 'id', 'blockName' ].includes(field.name)) { existingFieldNames.add(field.name); } if (field.localized && !config.localization) delete field.localized; if (typeof field.validate === 'undefined') { const defaultValidate = _validations.default[field.type]; if (defaultValidate) { field.validate = (val, options)=>defaultValidate(val, { ...field, ...options }); } else { field.validate = ()=>true; } } if (!field.hooks) field.hooks = {}; if (!field.access) field.access = {}; } if (field.admin) { if (field.admin.condition && field.admin.components?.Field) { field.admin.components.Field = (0, _withCondition.default)(field.admin.components?.Field); } } else { field.admin = {}; } if ('fields' in field && field.fields) { field.fields = sanitizeFields({ config, existingFieldNames: (0, _types.fieldAffectsData)(field) ? new Set() : existingFieldNames, fields: field.fields, validRelationships }); } if (field.type === 'tabs') { field.tabs = field.tabs.map((tab)=>{ const unsanitizedTab = { ...tab }; if ((0, _types.tabHasName)(tab) && typeof tab.label === 'undefined') { unsanitizedTab.label = (0, _formatLabels.toWords)(tab.name); } unsanitizedTab.fields = sanitizeFields({ config, existingFieldNames: (0, _types.tabHasName)(tab) ? new Set() : existingFieldNames, fields: tab.fields, validRelationships }); return unsanitizedTab; }); } if ('blocks' in field && field.blocks) { field.blocks = field.blocks.map((block)=>{ const unsanitizedBlock = { ...block }; unsanitizedBlock.labels = !unsanitizedBlock.labels ? (0, _formatLabels.formatLabels)(unsanitizedBlock.slug) : unsanitizedBlock.labels; unsanitizedBlock.fields = sanitizeFields({ config, fields: block.fields, validRelationships, existingFieldNames: new Set() }); return unsanitizedBlock; }); } return field; }); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9maWVsZHMvY29uZmlnL3Nhbml0aXplLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBGaWVsZCB9IGZyb20gJy4vdHlwZXMnXG5cbmltcG9ydCB3aXRoQ29uZGl0aW9uIGZyb20gJy4uLy4uL2FkbWluL2NvbXBvbmVudHMvZm9ybXMvd2l0aENvbmRpdGlvbidcbmltcG9ydCB7XG4gIER1cGxpY2F0ZUZpZWxkTmFtZSxcbiAgSW52YWxpZEZpZWxkTmFtZSxcbiAgSW52YWxpZEZpZWxkUmVsYXRpb25zaGlwLFxuICBNaXNzaW5nRmllbGRUeXBlLFxufSBmcm9tICcuLi8uLi9lcnJvcnMnXG5pbXBvcnQgeyBmb3JtYXRMYWJlbHMsIHRvV29yZHMgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvZm9ybWF0TGFiZWxzJ1xuaW1wb3J0IHsgYmFzZUJsb2NrRmllbGRzIH0gZnJvbSAnLi4vYmFzZUZpZWxkcy9iYXNlQmxvY2tGaWVsZHMnXG5pbXBvcnQgeyBiYXNlSURGaWVsZCB9IGZyb20gJy4uL2Jhc2VGaWVsZHMvYmFzZUlERmllbGQnXG5pbXBvcnQgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMnXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhLCB0YWJIYXNOYW1lIH0gZnJvbSAnLi90eXBlcydcblxudHlwZSBBcmdzID0ge1xuICBjb25maWc6IENvbmZpZ1xuICBleGlzdGluZ0ZpZWxkTmFtZXM/OiBTZXQ8c3RyaW5nPlxuICBmaWVsZHM6IEZpZWxkW11cbiAgLyoqXG4gICAqIElmIG5vdCBudWxsLCB3aWxsIHZhbGlkYXRlIHRoYXQgdXBsb2FkIGFuZCByZWxhdGlvbnNoaXAgZmllbGRzIGRvIG5vdCByZWxhdGUgdG8gYSBjb2xsZWN0aW9uIHRoYXQgaXMgbm90IGluIHRoaXMgYXJyYXkuXG4gICAqIFRoaXMgdmFsaWRhdGlvbiB3aWxsIGJlIHNraXBwZWQgaWYgdmFsaWRSZWxhdGlvbnNoaXBzIGlzIG51bGwuXG4gICAqL1xuICB2YWxpZFJlbGF0aW9uc2hpcHM6IG51bGwgfCBzdHJpbmdbXVxufVxuXG5leHBvcnQgY29uc3Qgc2FuaXRpemVGaWVsZHMgPSAoe1xuICBjb25maWcsXG4gIGV4aXN0aW5nRmllbGROYW1lcyA9IG5ldyBTZXQoKSxcbiAgZmllbGRzLFxuICB2YWxpZFJlbGF0aW9uc2hpcHMsXG59OiBBcmdzKTogRmllbGRbXSA9PiB7XG4gIGlmICghZmllbGRzKSByZXR1cm4gW11cblxuICByZXR1cm4gZmllbGRzLm1hcCgodW5zYW5pdGl6ZWRGaWVsZCkgPT4ge1xuICAgIGNvbnN0IGZpZWxkOiBGaWVsZCA9IHsgLi4udW5zYW5pdGl6ZWRGaWVsZCB9XG5cbiAgICBpZiAoIWZpZWxkLnR5cGUpIHRocm93IG5ldyBNaXNzaW5nRmllbGRUeXBlKGZpZWxkKVxuXG4gICAgLy8gYXNzZXJ0IHRoYXQgZmllbGQgbmFtZXMgZG8gbm90IGNvbnRhaW4gZm9yYmlkZGVuIGNoYXJhY3RlcnNcbiAgICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGQubmFtZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEZpZWxkTmFtZShmaWVsZCwgZmllbGQubmFtZSlcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmljaFRleHQgZmllbGQgaGFzIGFuIGVkaXRvclxuICAgIGlmIChmaWVsZC50eXBlID09PSAncmljaFRleHQnICYmICFmaWVsZC5lZGl0b3IgJiYgY29uZmlnLmVkaXRvcikge1xuICAgICAgZmllbGQuZWRpdG9yID0gY29uZmlnLmVkaXRvclxuICAgIH1cblxuICAgIC8vIEF1dG8tbGFiZWxcbiAgICBpZiAoXG4gICAgICAnbmFtZScgaW4gZmllbGQgJiZcbiAgICAgIGZpZWxkLm5hbWUgJiZcbiAgICAgIHR5cGVvZiBmaWVsZC5sYWJlbCAhPT0gJ29iamVjdCcgJiZcbiAgICAgIHR5cGVvZiBmaWVsZC5sYWJlbCAhPT0gJ3N0cmluZycgJiZcbiAgICAgIGZpZWxkLmxhYmVsICE9PSBmYWxzZVxuICAgICkge1xuICAgICAgZmllbGQubGFiZWwgPSB0b1dvcmRzKGZpZWxkLm5hbWUpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZmllbGQudHlwZSA9PT0gJ2NoZWNrYm94JyAmJlxuICAgICAgdHlwZW9mIGZpZWxkLmRlZmF1bHRWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIGZpZWxkLnJlcXVpcmVkID09PSB0cnVlXG4gICAgKSB7XG4gICAgICBmaWVsZC5kZWZhdWx0VmFsdWUgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmIChmaWVsZC50eXBlID09PSAncmVsYXRpb25zaGlwJyB8fCBmaWVsZC50eXBlID09PSAndXBsb2FkJykge1xuICAgICAgaWYgKHZhbGlkUmVsYXRpb25zaGlwcykge1xuICAgICAgICBjb25zdCByZWxhdGlvbnNoaXBzID0gQXJyYXkuaXNBcnJheShmaWVsZC5yZWxhdGlvblRvKVxuICAgICAgICAgID8gZmllbGQucmVsYXRpb25Ub1xuICAgICAgICAgIDogW2ZpZWxkLnJlbGF0aW9uVG9dXG4gICAgICAgIHJlbGF0aW9uc2hpcHMuZm9yRWFjaCgocmVsYXRpb25zaGlwOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAoIXZhbGlkUmVsYXRpb25zaGlwcy5pbmNsdWRlcyhyZWxhdGlvbnNoaXApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEZpZWxkUmVsYXRpb25zaGlwKGZpZWxkLCByZWxhdGlvbnNoaXApXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3JlbGF0aW9uc2hpcCcpIHtcbiAgICAgICAgaWYgKGZpZWxkLm1pbiAmJiAhZmllbGQubWluUm93cykge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGAocGF5bG9hZCk6IFRoZSBcIm1pblwiIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQgZm9yIHRoZSBSZWxhdGlvbnNoaXAgZmllbGQgXCIke2ZpZWxkLm5hbWV9XCIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiBQbGVhc2UgdXNlIFwibWluUm93c1wiIGluc3RlYWQuYCxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLm1heCAmJiAhZmllbGQubWF4Um93cykge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGAocGF5bG9hZCk6IFRoZSBcIm1heFwiIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQgZm9yIHRoZSBSZWxhdGlvbnNoaXAgZmllbGQgXCIke2ZpZWxkLm5hbWV9XCIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiBQbGVhc2UgdXNlIFwibWF4Um93c1wiIGluc3RlYWQuYCxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgZmllbGQubWluUm93cyA9IGZpZWxkLm1pblJvd3MgfHwgZmllbGQubWluXG4gICAgICAgIGZpZWxkLm1heFJvd3MgPSBmaWVsZC5tYXhSb3dzIHx8IGZpZWxkLm1heFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWVsZC50eXBlID09PSAnYmxvY2tzJyAmJiBmaWVsZC5ibG9ja3MpIHtcbiAgICAgIGZpZWxkLmJsb2NrcyA9IGZpZWxkLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiAoe1xuICAgICAgICAuLi5ibG9jayxcbiAgICAgICAgZmllbGRzOiBibG9jay5maWVsZHMuY29uY2F0KGJhc2VCbG9ja0ZpZWxkcyksXG4gICAgICB9KSlcbiAgICB9XG5cbiAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2FycmF5JyAmJiBmaWVsZC5maWVsZHMpIHtcbiAgICAgIGZpZWxkLmZpZWxkcy5wdXNoKGJhc2VJREZpZWxkKVxuICAgIH1cblxuICAgIGlmICgoZmllbGQudHlwZSA9PT0gJ2Jsb2NrcycgfHwgZmllbGQudHlwZSA9PT0gJ2FycmF5JykgJiYgZmllbGQubGFiZWwpIHtcbiAgICAgIGZpZWxkLmxhYmVscyA9IGZpZWxkLmxhYmVscyB8fCBmb3JtYXRMYWJlbHMoZmllbGQubmFtZSlcbiAgICB9XG5cbiAgICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICAgIGlmIChleGlzdGluZ0ZpZWxkTmFtZXMuaGFzKGZpZWxkLm5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBEdXBsaWNhdGVGaWVsZE5hbWUoZmllbGQubmFtZSlcbiAgICAgIH0gZWxzZSBpZiAoIVsnaWQnLCAnYmxvY2tOYW1lJ10uaW5jbHVkZXMoZmllbGQubmFtZSkpIHtcbiAgICAgICAgZXhpc3RpbmdGaWVsZE5hbWVzLmFkZChmaWVsZC5uYW1lKVxuICAgICAgfVxuXG4gICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmICFjb25maWcubG9jYWxpemF0aW9uKSBkZWxldGUgZmllbGQubG9jYWxpemVkXG5cbiAgICAgIGlmICh0eXBlb2YgZmllbGQudmFsaWRhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWxpZGF0ZSA9IHZhbGlkYXRpb25zW2ZpZWxkLnR5cGVdXG4gICAgICAgIGlmIChkZWZhdWx0VmFsaWRhdGUpIHtcbiAgICAgICAgICBmaWVsZC52YWxpZGF0ZSA9ICh2YWwsIG9wdGlvbnMpID0+IGRlZmF1bHRWYWxpZGF0ZSh2YWwsIHsgLi4uZmllbGQsIC4uLm9wdGlvbnMgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWVsZC52YWxpZGF0ZSA9ICgpID0+IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWZpZWxkLmhvb2tzKSBmaWVsZC5ob29rcyA9IHt9XG4gICAgICBpZiAoIWZpZWxkLmFjY2VzcykgZmllbGQuYWNjZXNzID0ge31cbiAgICB9XG5cbiAgICBpZiAoZmllbGQuYWRtaW4pIHtcbiAgICAgIGlmIChmaWVsZC5hZG1pbi5jb25kaXRpb24gJiYgZmllbGQuYWRtaW4uY29tcG9uZW50cz8uRmllbGQpIHtcbiAgICAgICAgZmllbGQuYWRtaW4uY29tcG9uZW50cy5GaWVsZCA9IHdpdGhDb25kaXRpb24oZmllbGQuYWRtaW4uY29tcG9uZW50cz8uRmllbGQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkLmFkbWluID0ge31cbiAgICB9XG5cbiAgICBpZiAoJ2ZpZWxkcycgaW4gZmllbGQgJiYgZmllbGQuZmllbGRzKSB7XG4gICAgICBmaWVsZC5maWVsZHMgPSBzYW5pdGl6ZUZpZWxkcyh7XG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZXhpc3RpbmdGaWVsZE5hbWVzOiBmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSA/IG5ldyBTZXQoKSA6IGV4aXN0aW5nRmllbGROYW1lcyxcbiAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgIHZhbGlkUmVsYXRpb25zaGlwcyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGZpZWxkLnR5cGUgPT09ICd0YWJzJykge1xuICAgICAgZmllbGQudGFicyA9IGZpZWxkLnRhYnMubWFwKCh0YWIpID0+IHtcbiAgICAgICAgY29uc3QgdW5zYW5pdGl6ZWRUYWIgPSB7IC4uLnRhYiB9XG4gICAgICAgIGlmICh0YWJIYXNOYW1lKHRhYikgJiYgdHlwZW9mIHRhYi5sYWJlbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB1bnNhbml0aXplZFRhYi5sYWJlbCA9IHRvV29yZHModGFiLm5hbWUpXG4gICAgICAgIH1cblxuICAgICAgICB1bnNhbml0aXplZFRhYi5maWVsZHMgPSBzYW5pdGl6ZUZpZWxkcyh7XG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGV4aXN0aW5nRmllbGROYW1lczogdGFiSGFzTmFtZSh0YWIpID8gbmV3IFNldCgpIDogZXhpc3RpbmdGaWVsZE5hbWVzLFxuICAgICAgICAgIGZpZWxkczogdGFiLmZpZWxkcyxcbiAgICAgICAgICB2YWxpZFJlbGF0aW9uc2hpcHMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuIHVuc2FuaXRpemVkVGFiXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICgnYmxvY2tzJyBpbiBmaWVsZCAmJiBmaWVsZC5ibG9ja3MpIHtcbiAgICAgIGZpZWxkLmJsb2NrcyA9IGZpZWxkLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgIGNvbnN0IHVuc2FuaXRpemVkQmxvY2sgPSB7IC4uLmJsb2NrIH1cbiAgICAgICAgdW5zYW5pdGl6ZWRCbG9jay5sYWJlbHMgPSAhdW5zYW5pdGl6ZWRCbG9jay5sYWJlbHNcbiAgICAgICAgICA/IGZvcm1hdExhYmVscyh1bnNhbml0aXplZEJsb2NrLnNsdWcpXG4gICAgICAgICAgOiB1bnNhbml0aXplZEJsb2NrLmxhYmVsc1xuXG4gICAgICAgIHVuc2FuaXRpemVkQmxvY2suZmllbGRzID0gc2FuaXRpemVGaWVsZHMoe1xuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBmaWVsZHM6IGJsb2NrLmZpZWxkcyxcbiAgICAgICAgICB2YWxpZFJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgZXhpc3RpbmdGaWVsZE5hbWVzOiBuZXcgU2V0KCksXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuIHVuc2FuaXRpemVkQmxvY2tcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkXG4gIH0pXG59XG4iXSwibmFtZXMiOlsic2FuaXRpemVGaWVsZHMiLCJjb25maWciLCJleGlzdGluZ0ZpZWxkTmFtZXMiLCJTZXQiLCJmaWVsZHMiLCJ2YWxpZFJlbGF0aW9uc2hpcHMiLCJtYXAiLCJ1bnNhbml0aXplZEZpZWxkIiwiZmllbGQiLCJ0eXBlIiwiTWlzc2luZ0ZpZWxkVHlwZSIsImZpZWxkQWZmZWN0c0RhdGEiLCJuYW1lIiwiaW5jbHVkZXMiLCJJbnZhbGlkRmllbGROYW1lIiwiZWRpdG9yIiwibGFiZWwiLCJ0b1dvcmRzIiwiZGVmYXVsdFZhbHVlIiwicmVxdWlyZWQiLCJyZWxhdGlvbnNoaXBzIiwiQXJyYXkiLCJpc0FycmF5IiwicmVsYXRpb25UbyIsImZvckVhY2giLCJyZWxhdGlvbnNoaXAiLCJJbnZhbGlkRmllbGRSZWxhdGlvbnNoaXAiLCJtaW4iLCJtaW5Sb3dzIiwiY29uc29sZSIsIndhcm4iLCJtYXgiLCJtYXhSb3dzIiwiYmxvY2tzIiwiYmxvY2siLCJjb25jYXQiLCJiYXNlQmxvY2tGaWVsZHMiLCJwdXNoIiwiYmFzZUlERmllbGQiLCJsYWJlbHMiLCJmb3JtYXRMYWJlbHMiLCJoYXMiLCJEdXBsaWNhdGVGaWVsZE5hbWUiLCJhZGQiLCJsb2NhbGl6ZWQiLCJsb2NhbGl6YXRpb24iLCJ2YWxpZGF0ZSIsImRlZmF1bHRWYWxpZGF0ZSIsInZhbGlkYXRpb25zIiwidmFsIiwib3B0aW9ucyIsImhvb2tzIiwiYWNjZXNzIiwiYWRtaW4iLCJjb25kaXRpb24iLCJjb21wb25lbnRzIiwiRmllbGQiLCJ3aXRoQ29uZGl0aW9uIiwidGFicyIsInRhYiIsInVuc2FuaXRpemVkVGFiIiwidGFiSGFzTmFtZSIsInVuc2FuaXRpemVkQmxvY2siLCJzbHVnIl0sIm1hcHBpbmdzIjoiOzs7OytCQTJCYUE7OztlQUFBQTs7O3NFQXhCYTt3QkFNbkI7OEJBQytCO2lDQUNOOzZCQUNKO29FQUNKO3VCQUNxQjs7Ozs7O0FBYXRDLE1BQU1BLGlCQUFpQixDQUFDLEVBQzdCQyxNQUFNLEVBQ05DLHFCQUFxQixJQUFJQyxLQUFLLEVBQzlCQyxNQUFNLEVBQ05DLGtCQUFrQixFQUNiO0lBQ0wsSUFBSSxDQUFDRCxRQUFRLE9BQU8sRUFBRTtJQUV0QixPQUFPQSxPQUFPRSxHQUFHLENBQUMsQ0FBQ0M7UUFDakIsTUFBTUMsUUFBZTtZQUFFLEdBQUdELGdCQUFnQjtRQUFDO1FBRTNDLElBQUksQ0FBQ0MsTUFBTUMsSUFBSSxFQUFFLE1BQU0sSUFBSUMsd0JBQWdCLENBQUNGO1FBRTVDLDhEQUE4RDtRQUM5RCxJQUFJRyxJQUFB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