{"version":3,"file":"index.mjs","sources":["../../server/src/register.ts","../../server/src/bootstrap.ts","../../server/src/destroy.ts","../../server/src/config/index.ts","../../server/src/content-types/index.ts","../../server/src/controllers/my-controller.ts","../../server/src/controllers/index.ts","../../server/src/routes/index.ts","../../server/src/middlewares/index.ts","../../server/src/policies/index.ts","../../node_modules/mime-types/node_modules/mime-db/index.js","../../node_modules/mime-types/index.js","../../server/src/services/my-service.ts","../../server/src/services/index.ts","../../server/src/index.ts"],"sourcesContent":["export default ({ strapi }) => {\n\t// registeration phase\n};\n","export default ({ strapi }) => {\n\t// bootstrap phase\n};\n","export default ({ strapi }) => {\n\t// destroy phase\n};\n","export default {\n\tdefault: {},\n\tvalidator() {}\n};\n","export default {};\n","import fs from 'fs';\nimport path from 'path';\n\nconst validateName = (name: string, countFiles: number) => {\n\tconst [number, ext] = name.split('.');\n\treturn +number <= countFiles;\n};\n\n// Helper function to retry uploads with a backoff mechanism\nconst retryUpload = async (strapi, url, retries = 5) => {\n\tfor (let attempt = 1; attempt <= retries; attempt++) {\n\t\ttry {\n\t\t\treturn await strapi.plugin('generate-data').service('myService').uploadToLibrary(url);\n\t\t} catch (err) {\n\t\t\tconsole.warn(`Upload failed (attempt ${attempt}) for URL: ${url}`, err);\n\t\t\tif (attempt === retries) {\n\t\t\t\tconsole.error(`Max retries reached for URL: ${url}`);\n\t\t\t\treturn null; // Return null to indicate a failure\n\t\t\t}\n\t\t}\n\t\t// wait before trying again\n\t\tawait new Promise((resolve) => setTimeout(resolve, attempt * 1000));\n\t}\n};\n\nexport default ({ strapi }) => ({\n\tgetContentTypes(ctx) {\n\t\tconst contentTypes = Object.values(strapi.contentTypes)\n\t\t\t.filter(\n\t\t\t\t(ct: any) =>\n\t\t\t\t\t(ct.uid.startsWith('api') && ct.kind === 'collectionType') ||\n\t\t\t\t\tct.uid === 'plugin::users-permissions.user'\n\t\t\t)\n\t\t\t.map((ct: any) => ({\n\t\t\t\tuid: ct.uid,\n\t\t\t\tapiID: ct.info?.singularName,\n\t\t\t\tschema: ct\n\t\t\t}));\n\t\treturn { data: contentTypes };\n\t},\n\tasync getCollection(ctx) {\n\t\tconst { contentType } = ctx.params;\n\t\tconst { fields = [], page = 1, pageSize = 25 } = ctx.query;\n\n\t\tconst [data, total] = await Promise.all([\n\t\t\tstrapi.db.query(contentType).findMany({\n\t\t\t\tselect: fields,\n\t\t\t\tlimit: pageSize,\n\t\t\t\toffset: (page - 1) * pageSize\n\t\t\t}),\n\t\t\tstrapi.db.query(contentType).count()\n\t\t]);\n\n\t\treturn {\n\t\t\tresults: data,\n\t\t\tmeta: {\n\t\t\t\tpagination: {\n\t\t\t\t\tpage,\n\t\t\t\t\tpageSize,\n\t\t\t\t\ttotal,\n\t\t\t\t\tpageCount: Math.ceil(total / pageSize)\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t},\n\tflush(ctx) {\n\t\tconst { contentType } = ctx.params;\n\t\treturn strapi.db.query(contentType).deleteMany();\n\t},\n\tasync create(ctx) {\n\t\tconst { contentType } = ctx.params;\n\t\tconst { data, status } = ctx.request.body;\n\t\treturn data.map((item) => {\n\t\t\treturn strapi.documents(contentType).create({\n\t\t\t\tdata: item,\n\t\t\t\tstatus\n\t\t\t});\n\t\t});\n\t},\n\tasync upload(ctx) {\n\t\tconst data = ctx.request.body;\n\t\tlet obj = {};\n\n\t\ttry {\n\t\t\tawait Promise.all(\n\t\t\t\tObject.keys(data).map(async (key) => {\n\t\t\t\t\tlet response = await Promise.all(\n\t\t\t\t\t\tdata[key].map(async (urls) =>\n\t\t\t\t\t\t\tPromise.all(urls.map(async (url) => await retryUpload(strapi, url)))\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\t// Filter out any failed uploads (null responses)\n\t\t\t\t\tobj[key] = response.map((urlResponses) =>\n\t\t\t\t\t\turlResponses.filter((res) => res !== null)\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t);\n\t\t} catch (err) {\n\t\t\tconsole.error('Unexpected error during upload:', err);\n\t\t\treturn ctx.internalServerError('An error occurred during upload processing.');\n\t\t}\n\n\t\treturn obj;\n\t},\n\tgetVideos(ctx) {\n\t\tconst { name } = ctx.params;\n\t\tif (validateName(name, 10)) {\n\t\t\tctx.set('Content-Type', 'video/mp4');\n\t\t\treturn fs.readFileSync(\n\t\t\t\tpath.resolve(__dirname, '..', '..', 'public') + path.normalize(`/${name}`)\n\t\t\t);\n\t\t}\n\t},\n\tgetAudios(ctx) {\n\t\tconst { name } = ctx.params;\n\t\tif (validateName(name, 5)) {\n\t\t\tctx.set('Content-Type', 'audio/wav');\n\t\t\treturn fs.readFileSync(\n\t\t\t\tpath.normalize(\n\t\t\t\t\tpath.resolve(__dirname, '..', '..', 'public') + path.normalize(`/${name}`)\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t},\n\tgetFiles(ctx) {\n\t\tconst { name } = ctx.params;\n\t\tif (validateName(name, 5)) {\n\t\t\tctx.set('Content-Type', 'text/json');\n\t\t\treturn fs.readFileSync(\n\t\t\t\tpath.normalize(\n\t\t\t\t\tpath.resolve(__dirname, '..', '..', 'public') + path.normalize(`/${name}`)\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n});\n","import myController from './my-controller';\n\nexport default {\n\tmyController\n};\n","export default [\n\t{\n\t\tmethod: 'GET',\n\t\tpath: '/content-types',\n\t\thandler: 'myController.getContentTypes',\n\t\tconfig: {\n\t\t\tpolicies: [],\n\t\t\tauth: false\n\t\t}\n\t},\n\t{\n\t\tmethod: 'GET',\n\t\tpath: '/collection-types/:contentType',\n\t\thandler: 'myController.getCollection',\n\t\tconfig: {\n\t\t\tpolicies: [],\n\t\t\tauth: false\n\t\t}\n\t},\n\t{\n\t\tmethod: 'POST',\n\t\tpath: '/flush/:contentType',\n\t\thandler: 'myController.flush',\n\t\tconfig: {\n\t\t\tpolicies: [],\n\t\t\tauth: false\n\t\t}\n\t},\n\t{\n\t\tmethod: 'POST',\n\t\tpath: '/create/:contentType',\n\t\thandler: 'myController.create',\n\t\tconfig: {\n\t\t\tpolicies: [],\n\t\t\tauth: false\n\t\t}\n\t},\n\t{\n\t\tmethod: 'POST',\n\t\tpath: '/upload',\n\t\thandler: 'myController.upload',\n\t\tconfig: {\n\t\t\tpolicies: [],\n\t\t\tauth: false\n\t\t}\n\t},\n\t{\n\t\tmethod: 'GET',\n\t\tpath: '/videos/:name',\n\t\thandler: 'myController.getVideos',\n\t\tconfig: {\n\t\t\tpolicies: [],\n\t\t\tauth: false\n\t\t}\n\t},\n\t{\n\t\tmethod: 'GET',\n\t\tpath: '/audios/:name',\n\t\thandler: 'myController.getAudios',\n\t\tconfig: {\n\t\t\tpolicies: [],\n\t\t\tauth: false\n\t\t}\n\t},\n\t{\n\t\tmethod: 'GET',\n\t\tpath: '/files/:name',\n\t\thandler: 'myController.getFiles',\n\t\tconfig: {\n\t\t\tpolicies: [],\n\t\t\tauth: false\n\t\t}\n\t}\n];\n","export default {};\n","export default {};\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n  var mime = match && db[match[1].toLowerCase()]\n\n  if (mime && mime.charset) {\n    return mime.charset\n  }\n\n  // default text/* to utf-8\n  if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n    return 'UTF-8'\n  }\n\n  return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n  // TODO: should this even be in this module?\n  if (!str || typeof str !== 'string') {\n    return false\n  }\n\n  var mime = str.indexOf('/') === -1\n    ? exports.lookup(str)\n    : str\n\n  if (!mime) {\n    return false\n  }\n\n  // TODO: use content-type or other module\n  if (mime.indexOf('charset') === -1) {\n    var charset = exports.charset(mime)\n    if (charset) mime += '; charset=' + charset.toLowerCase()\n  }\n\n  return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n  // get extensions\n  var exts = match && exports.extensions[match[1].toLowerCase()]\n\n  if (!exts || !exts.length) {\n    return false\n  }\n\n  return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n  if (!path || typeof path !== 'string') {\n    return false\n  }\n\n  // get the extension (\"ext\" or \".ext\" or full path)\n  var extension = extname('x.' + path)\n    .toLowerCase()\n    .substr(1)\n\n  if (!extension) {\n    return false\n  }\n\n  return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n  // source preference (least -> most)\n  var preference = ['nginx', 'apache', undefined, 'iana']\n\n  Object.keys(db).forEach(function forEachMimeType (type) {\n    var mime = db[type]\n    var exts = mime.extensions\n\n    if (!exts || !exts.length) {\n      return\n    }\n\n    // mime -> extensions\n    extensions[type] = exts\n\n    // extension -> mime\n    for (var i = 0; i < exts.length; i++) {\n      var extension = exts[i]\n\n      if (types[extension]) {\n        var from = preference.indexOf(db[types[extension]].source)\n        var to = preference.indexOf(mime.source)\n\n        if (types[extension] !== 'application/octet-stream' &&\n          (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n          // skip the remapping\n          continue\n        }\n      }\n\n      // set the extension -> mime\n      types[extension] = type\n    }\n  })\n}\n","import axios from 'axios';\nimport fs from 'fs';\nimport os from 'os';\nimport { Agent } from 'https';\nimport stream from 'stream';\nimport path from 'path';\nimport util from 'util';\nimport mime from 'mime-types';\n\nconst dir = os.tmpdir();\n\nexport default ({ strapi }) => ({\n\tgetFileDetails(filePath) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tfs.stat(filePath, (err, stats) => {\n\t\t\t\tif (err) reject(err.message);\n\t\t\t\tresolve(stats);\n\t\t\t});\n\t\t});\n\t},\n\n\tdeleteFile(filePath) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tfs.access(filePath, fs.constants.F_OK, (accessErr) => {\n\t\t\t\tif (accessErr) {\n\t\t\t\t\t// File doesn't exist\n\t\t\t\t\treturn reject(`File does not exist: ${filePath}`);\n\t\t\t\t}\n\n\t\t\t\t// File exists, proceed to delete it\n\t\t\t\tfs.unlink(filePath, (unlinkErr) => {\n\t\t\t\t\tif (unlinkErr) {\n\t\t\t\t\t\treturn reject(unlinkErr.message);\n\t\t\t\t\t}\n\t\t\t\t\tresolve('deleted');\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t},\n\n\tasync uploadToLibrary(imageByteStreamURL) {\n\t\tconst result = await axios.get(imageByteStreamURL, {\n\t\t\tresponseType: 'stream',\n\t\t\thttpsAgent: new Agent({ rejectUnauthorized: false })\n\t\t});\n\n\t\tconst imageName = result.request.path.split('/').pop();\n\n\t\tconst filePath = `${dir}/${new Date().getTime()}-${imageName}`;\n\n\t\tconst file = fs.createWriteStream(filePath);\n\t\tconst finished = util.promisify(stream.finished);\n\t\tresult.data.pipe(file);\n\t\tawait finished(file);\n\t\tconst image = await this.upload(filePath);\n\t\treturn image;\n\t},\n\n\tasync upload(filePath) {\n\t\tconst stats = (await this.getFileDetails(filePath)) as any;\n\t\tconst fileName = path.parse(filePath).base;\n\n\t\tconst res = await strapi.plugins.upload.services.upload.upload({\n\t\t\tdata: {\n\t\t\t\tfileInfo: {\n\t\t\t\t\tname: fileName\n\t\t\t\t}\n\t\t\t},\n\t\t\tfiles: { filepath: filePath, size: stats.size, mimetype: mime.lookup(fileName) }\n\t\t});\n\n\t\tawait this.deleteFile(filePath);\n\t\treturn res[0];\n\t}\n});\n","import myService from './my-service';\n\nexport default {\n\tmyService\n};\n","import register from './register';\nimport bootstrap from './bootstrap';\nimport destroy from './destroy';\nimport config from './config';\nimport contentTypes from './content-types';\nimport controllers from './controllers';\nimport routes from './routes';\nimport middlewares from './middlewares';\nimport policies from './policies';\nimport services from './services';\n\nexport default {\n\tregister,\n\tbootstrap,\n\tdestroy,\n\tconfig,\n\tcontrollers,\n\troutes,\n\tservices,\n\tcontentTypes,\n\tpolicies,\n\tmiddlewares\n};\n"],"names":["contentTypes","require$$0","require$$1","mime","charset","path","extension"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","x_google_ignoreList":[10,11]}