diff --git a/.gitignore b/.gitignore
index 9dcfd64ac..b24f194ca 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,6 +11,12 @@
hs_err_pid*
replay_pid*
+##############################
+## Javascript
+##############################
+node_modules/
+.env
+
##############################
## Maven
##############################
diff --git a/connectservice/.dockerignore b/connectservice/.dockerignore
new file mode 100644
index 000000000..a4bf05a8d
--- /dev/null
+++ b/connectservice/.dockerignore
@@ -0,0 +1,4 @@
+node_modules/
+docker-compose.yml
+test.http
+Readme.md
diff --git a/connectservice/Dockerfile b/connectservice/Dockerfile
new file mode 100644
index 000000000..9f8d1b845
--- /dev/null
+++ b/connectservice/Dockerfile
@@ -0,0 +1,11 @@
+FROM node:22
+WORKDIR /app
+
+COPY package*.json ./
+RUN npm install
+
+COPY . .
+
+EXPOSE 3000
+USER 1000
+CMD ["npm", "run", "start"]
diff --git a/connectservice/Readme.md b/connectservice/Readme.md
new file mode 100644
index 000000000..54ea27708
--- /dev/null
+++ b/connectservice/Readme.md
@@ -0,0 +1,21 @@
+# Connect Service
+
+Connect Service is a sample implementation of a web service which records usage
+of Open Integration Engine, and provides access to a notifications feed. The service
+implements the operations called by the client in `ConnectServiceUtil.java`.
+
+## Running and testing
+
+To start the example, run `docker-compose build` in this directory, followed by
+`docker-compose up -d`. You can use `http://localhost:3000` as `URL_CONNECT_SERVER`
+in `ConnectServiceUtil.java`, and see recorded data
+[in Kibana.](http://localhost:5601/app/management/data/index_management/indices/index_details?indexName=registration)
+
+## Not fit for production use as-is
+
+This example is purely for expository purposes only. Use as-is is not recommended.
+At a minimum, it would be neccesary to:
+
+- Use a reverse proxy to encrypt in-transit data
+- Secure communication between the connectservice and elasticsearch
+- Require authentication for elasticsearch and kibana
diff --git a/connectservice/docker-compose.yml b/connectservice/docker-compose.yml
new file mode 100644
index 000000000..915d8c00c
--- /dev/null
+++ b/connectservice/docker-compose.yml
@@ -0,0 +1,36 @@
+name: connectservice
+
+volumes:
+ connectservice_elastic_data: {}
+
+services:
+ elasticsearch:
+ image: docker.elastic.co/elasticsearch/elasticsearch:9.0.1
+ environment:
+ - discovery.type=single-node
+ # Don't do this in prod.
+ - xpack.security.enabled=false
+ ports:
+ - "9200:9200"
+ volumes:
+ - connectservice_elastic_data:/usr/share/elasticsearch/data
+
+ connectservice:
+ build:
+ context: .
+ dockerfile: Dockerfile
+ environment:
+ - ELASTICSEARCH_URL=http://elasticsearch:9200
+ ports:
+ - "3000:3000"
+ depends_on:
+ - elasticsearch
+
+ kibana:
+ image: docker.elastic.co/kibana/kibana:9.0.1
+ ports:
+ - "5601:5601"
+ environment:
+ - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
+ depends_on:
+ - elasticsearch
diff --git a/connectservice/elastic.js b/connectservice/elastic.js
new file mode 100644
index 000000000..9f63637be
--- /dev/null
+++ b/connectservice/elastic.js
@@ -0,0 +1,13 @@
+import { Client } from '@elastic/elasticsearch';
+
+export const client = new Client({
+ node: process.env.ELASTICSEARCH_URL || 'http://localhost:9200',
+ auth: process.env.ELASTICSEARCH_USERNAME ? {
+ username: process.env.ELASTICSEARCH_USERNAME,
+ password: process.env.ELASTICSEARCH_PASSWORD || 'changeme',
+ } : undefined,
+ tls: {
+ rejectUnauthorized: process.env.ELASTICSEARCH_IGNORETLSERRORS && !!JSON.parse(process.env.ELASTICSEARCH_IGNORETLSERRORS),
+ },
+ requestTimeout: process.env.ELASTICSEARCH_TIMEOUT ? JSON.parse(process.env.ELASTICSEARCH_TIMEOUT) : 30000,
+});
diff --git a/connectservice/github.js b/connectservice/github.js
new file mode 100644
index 000000000..6374bcc5b
--- /dev/null
+++ b/connectservice/github.js
@@ -0,0 +1,31 @@
+const REPO_URL = process.env.NOTIFICATIONS_URL ?? 'https://api.github.com/repos/OpenIntegrationEngine/engine/releases?per_page=10';
+
+export async function getLatestReleases() {
+ const response = await fetch(REPO_URL, {
+ headers: {
+ 'Accept': 'application/vnd.github.html+json',
+ 'User-Agent': 'OIEConnectService',
+ },
+ });
+
+ if (!response.ok) {
+ throw new Error(`Failed to fetch latest release: ${response.statusText}`);
+ }
+
+ const releases = await response.json();
+ return releases.map(release => ({
+ id: release.id,
+ name: release.name,
+ body_html: release.body_html,
+ published_at: release.published_at,
+ }));
+}
+
+/*
+interface Release {
+ id: number;
+ name: string;
+ body_html: string;
+ published_at: string;
+}
+*/
diff --git a/connectservice/index.js b/connectservice/index.js
new file mode 100644
index 000000000..ce9f1daea
--- /dev/null
+++ b/connectservice/index.js
@@ -0,0 +1,50 @@
+import express from 'express';
+import * as yup from 'yup';
+import { postRegistration, postUsage, registrationBodySchema, usageBodySchema } from './usage.js';
+import { postNotifications, notificationBodySchema } from './notifications.js';
+
+const app = express();
+
+app.use(express.urlencoded({ extended: true }));
+
+app.post('/RegistrationServlet', [validateFormUrlEncoded, makeValidator(registrationBodySchema)], postRegistration);
+app.post('/UsageStatisticsServlet', [validateFormUrlEncoded, makeValidator(usageBodySchema)], postUsage);
+
+app.post('/NotificationServlet', [validateFormUrlEncoded, makeValidator(notificationBodySchema)], postNotifications);
+
+const port = process.env.PORT || 3000;
+app.listen(port, () =>
+ console.log(`connectservice available from http://localhost:${port}`),
+);
+
+function validateFormUrlEncoded(req, res, next) {
+ const contentType = req.headers['content-type'];
+ if (!contentType || !contentType.startsWith('application/x-www-form-urlencoded')) {
+ return res.status(415).send('Unsupported content-type');
+ }
+
+ next();
+}
+
+function makeValidator(schema) {
+ return async (req, res, next) => {
+ try {
+ // abortEarly: false collects all errors rather than stopping on the first
+ await schema.validate(req.body, { abortEarly: false });
+ next();
+ } catch (error) {
+ if (error instanceof yup.ValidationError) {
+ return res.status(400).json({
+ type: error.name,
+ message: error.message,
+ errors: error.inner.map(err => ({
+ path: err.path,
+ message: err.message,
+ type: err.type,
+ })),
+ });
+ }
+ next(error);
+ }
+ };
+}
diff --git a/connectservice/notifications.js b/connectservice/notifications.js
new file mode 100644
index 000000000..e1c0deed9
--- /dev/null
+++ b/connectservice/notifications.js
@@ -0,0 +1,78 @@
+import * as yup from 'yup';
+import { getLatestReleases } from './github.js';
+
+export async function postNotifications(req, res) {
+ const notifications = await getLatestReleases();
+
+ if (req.body.op === 'getNotificationCount') {
+ return res.status(200).json(notifications.map(rel => rel.id));
+ } else if (req.body.op === 'getNotifications') {
+ return res.status(200).json(notifications.map(rel => ({
+ id: rel.id,
+ name: rel.name,
+ content: makeFullPageFromDiv(rel.body_html, rel.name),
+ date: rel.published_at,
+ })));
+ } else {
+ return res.status(400).json({
+ error: 'Invalid operation',
+ });
+ }
+}
+
+function makeFullPageFromDiv(div, name) {
+ name = htmlEncode(name);
+ return `
+
+ ${name}
+
+
+
+
+
+ ${name}
+
+ ${div}
+
+
+
+`;
+}
+
+function htmlEncode(text) {
+ return text
+ .replace(/&/g, '&')
+ .replace(//g, '>')
+ .replace(/"/g, '"')
+ .replace(/'/g, ''');
+}
+
+/*
+POST https://connect.mirthcorp.com/NotificationServlet HTTP/1.1
+Content-Type: application/x-www-form-urlencoded; charset=UTF-8
+User-Agent: Apache-HttpClient/4.5.13 (Java/21.0.7)
+Host: connect.mirthcorp.com
+Content-Length: 2116
+
+op=getNotificationCount&serverId=49885e13-4f2e-41a6-b66a-8e65f5492d9a&version=4.5.2&extensionVersions=url_encode_json
+*/
+export const notificationBodySchema = yup.object({
+ op: yup.string().oneOf(['getNotificationCount', 'getNotifications']).required(),
+ serverId: yup.string().required(),
+ version: yup.string().required(),
+ extensionVersions: yup.string().required(),
+}).required();
+
+/*
+extensionVersions is a JSON object with the version of each extension:
+{
+ "Server Log":"4.5.2",
+ "File Writer":"4.5.2",
+ ...
+}
+*/
diff --git a/connectservice/package-lock.json b/connectservice/package-lock.json
new file mode 100644
index 000000000..b0c0b40d9
--- /dev/null
+++ b/connectservice/package-lock.json
@@ -0,0 +1,1226 @@
+{
+ "name": "connectservice",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "connectservice",
+ "version": "1.0.0",
+ "license": "MPL-2.0",
+ "dependencies": {
+ "@elastic/elasticsearch": "^9.0.2",
+ "express": "^5.1.0",
+ "xml2js": "^0.6.2",
+ "yup": "^1.6.1"
+ }
+ },
+ "node_modules/@elastic/elasticsearch": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-9.0.2.tgz",
+ "integrity": "sha512-uKA0PuPSND3OhHH9UFqnKZfxifAg/8mQW4VnrQ+sUtusTbPhGuErs5NeWCPyd/RLgruBWBmLSv1zzEv5GS+UnA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@elastic/transport": "^9.0.1",
+ "apache-arrow": "18.x - 19.x",
+ "tslib": "^2.4.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@elastic/transport": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/@elastic/transport/-/transport-9.0.1.tgz",
+ "integrity": "sha512-6jVZQzAe2iTRsZA6I/wkO2BjzJFD9BHTASo2YgGfbcoV95ey/8D/ABRhpgfg35LIDrmialIGJBizunSwxsRDLg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@opentelemetry/api": "1.x",
+ "debug": "^4.4.0",
+ "hpagent": "^1.2.0",
+ "ms": "^2.1.3",
+ "secure-json-parse": "^3.0.2",
+ "tslib": "^2.8.1",
+ "undici": "^7.2.3"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@opentelemetry/api": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
+ "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/@swc/helpers": {
+ "version": "0.5.17",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz",
+ "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@types/command-line-args": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.3.tgz",
+ "integrity": "sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "20.17.57",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.57.tgz",
+ "integrity": "sha512-f3T4y6VU4fVQDKVqJV4Uppy8c1p/sVvS3peyqxyWnzkqXFJLRU7Y1Bl7rMS1Qe9z0v4M6McY0Fp9yBsgHJUsWQ==",
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.19.2"
+ }
+ },
+ "node_modules/accepts": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
+ "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-types": "^3.0.0",
+ "negotiator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/apache-arrow": {
+ "version": "19.0.1",
+ "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-19.0.1.tgz",
+ "integrity": "sha512-APmMLzS4qbTivLrPdQXexGM4JRr+0g62QDaobzEvip/FdQIrv2qLy0mD5Qdmw4buydtVJgbFeKR8f59I6PPGDg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@swc/helpers": "^0.5.11",
+ "@types/command-line-args": "^5.2.3",
+ "@types/command-line-usage": "^5.0.4",
+ "@types/node": "^20.13.0",
+ "command-line-args": "^6.0.1",
+ "command-line-usage": "^7.0.1",
+ "flatbuffers": "^24.3.25",
+ "json-bignum": "^0.0.3",
+ "tslib": "^2.6.2"
+ },
+ "bin": {
+ "arrow2csv": "bin/arrow2csv.js"
+ }
+ },
+ "node_modules/array-back": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz",
+ "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.17"
+ }
+ },
+ "node_modules/body-parser": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz",
+ "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "^3.1.2",
+ "content-type": "^1.0.5",
+ "debug": "^4.4.0",
+ "http-errors": "^2.0.0",
+ "iconv-lite": "^0.6.3",
+ "on-finished": "^2.4.1",
+ "qs": "^6.14.0",
+ "raw-body": "^3.0.0",
+ "type-is": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chalk-template": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz",
+ "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==",
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk-template?sponsor=1"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
+ "node_modules/command-line-args": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-6.0.1.tgz",
+ "integrity": "sha512-Jr3eByUjqyK0qd8W0SGFW1nZwqCaNCtbXjRo2cRJC1OYxWl3MZ5t1US3jq+cO4sPavqgw4l9BMGX0CBe+trepg==",
+ "license": "MIT",
+ "dependencies": {
+ "array-back": "^6.2.2",
+ "find-replace": "^5.0.2",
+ "lodash.camelcase": "^4.3.0",
+ "typical": "^7.2.0"
+ },
+ "engines": {
+ "node": ">=12.20"
+ },
+ "peerDependencies": {
+ "@75lb/nature": "latest"
+ },
+ "peerDependenciesMeta": {
+ "@75lb/nature": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/command-line-usage": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.3.tgz",
+ "integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==",
+ "license": "MIT",
+ "dependencies": {
+ "array-back": "^6.2.2",
+ "chalk-template": "^0.4.0",
+ "table-layout": "^4.1.0",
+ "typical": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
+ "node_modules/content-disposition": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz",
+ "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
+ "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.6.0"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+ "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+ "license": "MIT"
+ },
+ "node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+ "license": "MIT"
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz",
+ "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==",
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "^2.0.0",
+ "body-parser": "^2.2.0",
+ "content-disposition": "^1.0.0",
+ "content-type": "^1.0.5",
+ "cookie": "^0.7.1",
+ "cookie-signature": "^1.2.1",
+ "debug": "^4.4.0",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "etag": "^1.8.1",
+ "finalhandler": "^2.1.0",
+ "fresh": "^2.0.0",
+ "http-errors": "^2.0.0",
+ "merge-descriptors": "^2.0.0",
+ "mime-types": "^3.0.0",
+ "on-finished": "^2.4.1",
+ "once": "^1.4.0",
+ "parseurl": "^1.3.3",
+ "proxy-addr": "^2.0.7",
+ "qs": "^6.14.0",
+ "range-parser": "^1.2.1",
+ "router": "^2.2.0",
+ "send": "^1.1.0",
+ "serve-static": "^2.2.0",
+ "statuses": "^2.0.1",
+ "type-is": "^2.0.1",
+ "vary": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz",
+ "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.0",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "on-finished": "^2.4.1",
+ "parseurl": "^1.3.3",
+ "statuses": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/find-replace": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-5.0.2.tgz",
+ "integrity": "sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@75lb/nature": "latest"
+ },
+ "peerDependenciesMeta": {
+ "@75lb/nature": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/flatbuffers": {
+ "version": "24.12.23",
+ "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-24.12.23.tgz",
+ "integrity": "sha512-dLVCAISd5mhls514keQzmEG6QHmUUsNuWsb4tFafIUwvvgDjXhtfAYSKOzt5SWOy+qByV5pbsDZ+Vb7HUOBEdA==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
+ "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hpagent": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz",
+ "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "license": "ISC"
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-promise": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
+ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
+ "license": "MIT"
+ },
+ "node_modules/json-bignum": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz",
+ "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
+ "license": "MIT"
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
+ "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/merge-descriptors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
+ "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.54.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz",
+ "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "^1.54.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/negotiator": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
+ "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz",
+ "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/property-expr": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz",
+ "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==",
+ "license": "MIT"
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "license": "MIT",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
+ "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz",
+ "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.6.3",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/router": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
+ "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.0",
+ "depd": "^2.0.0",
+ "is-promise": "^4.0.0",
+ "parseurl": "^1.3.3",
+ "path-to-regexp": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "license": "MIT"
+ },
+ "node_modules/sax": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
+ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
+ "license": "ISC"
+ },
+ "node_modules/secure-json-parse": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-3.0.2.tgz",
+ "integrity": "sha512-H6nS2o8bWfpFEV6U38sOSjS7bTbdgbCGU9wEM6W14P5H0QOsz94KCusifV44GpHDTu2nqZbuDNhTzu+mjDSw1w==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/send": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz",
+ "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.3.5",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "etag": "^1.8.1",
+ "fresh": "^2.0.0",
+ "http-errors": "^2.0.0",
+ "mime-types": "^3.0.1",
+ "ms": "^2.1.3",
+ "on-finished": "^2.4.1",
+ "range-parser": "^1.2.1",
+ "statuses": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/serve-static": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz",
+ "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==",
+ "license": "MIT",
+ "dependencies": {
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "parseurl": "^1.3.3",
+ "send": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "license": "ISC"
+ },
+ "node_modules/side-channel": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/table-layout": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-4.1.1.tgz",
+ "integrity": "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==",
+ "license": "MIT",
+ "dependencies": {
+ "array-back": "^6.2.2",
+ "wordwrapjs": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=12.17"
+ }
+ },
+ "node_modules/tiny-case": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz",
+ "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==",
+ "license": "MIT"
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/toposort": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz",
+ "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==",
+ "license": "MIT"
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "license": "0BSD"
+ },
+ "node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/type-is": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
+ "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
+ "license": "MIT",
+ "dependencies": {
+ "content-type": "^1.0.5",
+ "media-typer": "^1.1.0",
+ "mime-types": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/typical": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-7.3.0.tgz",
+ "integrity": "sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.17"
+ }
+ },
+ "node_modules/undici": {
+ "version": "7.10.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-7.10.0.tgz",
+ "integrity": "sha512-u5otvFBOBZvmdjWLVW+5DAc9Nkq8f24g0O9oY7qw2JVIF1VocIFoyz9JFkuVOS2j41AufeO0xnlweJ2RLT8nGw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.18.1"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+ "license": "MIT"
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/wordwrapjs": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz",
+ "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.17"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "license": "ISC"
+ },
+ "node_modules/xml2js": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz",
+ "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==",
+ "license": "MIT",
+ "dependencies": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/xmlbuilder": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/yup": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/yup/-/yup-1.6.1.tgz",
+ "integrity": "sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==",
+ "license": "MIT",
+ "dependencies": {
+ "property-expr": "^2.0.5",
+ "tiny-case": "^1.0.3",
+ "toposort": "^2.0.2",
+ "type-fest": "^2.19.0"
+ }
+ }
+ }
+}
diff --git a/connectservice/package.json b/connectservice/package.json
new file mode 100644
index 000000000..d7dafff77
--- /dev/null
+++ b/connectservice/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "connectservice",
+ "version": "1.0.0",
+ "description": "Example statistics and notification service",
+ "main": "index.js",
+ "type": "module",
+ "scripts": {
+ "start": "node index.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/OpenIntegrationEngine/engine.git"
+ },
+ "author": "",
+ "license": "MPL-2.0",
+ "bugs": {
+ "url": "https://github.com/OpenIntegrationEngine/engine/issues"
+ },
+ "homepage": "https://github.com/OpenIntegrationEngine/engine#readme",
+ "dependencies": {
+ "@elastic/elasticsearch": "^9.0.2",
+ "express": "^5.1.0",
+ "xml2js": "^0.6.2",
+ "yup": "^1.6.1"
+ }
+}
diff --git a/connectservice/test.http b/connectservice/test.http
new file mode 100644
index 000000000..ffd6012b8
--- /dev/null
+++ b/connectservice/test.http
@@ -0,0 +1,43 @@
+---
+POST http://localhost:3000/NotificationServlet HTTP/1.1
+Content-Type: application/x-www-form-urlencoded; charset=UTF-8
+User-Agent: Apache-HttpClient/4.5.13 (Java/21.0.7)
+
+op=getNotificationCount&serverId=49885e13-4f2e-41a6-b66a-8e65f5492d9a&version=4.5.2&extensionVersions=%7B%22Server+Log%22%3A%224.5.2%22%2C%22File+Writer%22%3A%224.5.2%22%2C%22Delimited+Data+Type%22%3A%224.5.2%22%2C%22HTTP+Sender%22%3A%224.5.2%22%2C%22HTTP+Authentication+Settings%22%3A%224.5.2%22%2C%22Image+Viewer%22%3A%224.5.2%22%2C%22Data+Pruner%22%3A%224.5.2%22%2C%22Database+Writer%22%3A%224.5.2%22%2C%22TCP+Sender%22%3A%224.5.2%22%2C%22JavaScript+Filter+Rule%22%3A%224.5.2%22%2C%22Channel+Reader%22%3A%224.5.2%22%2C%22Mapper+Transformer+Step%22%3A%224.5.2%22%2C%22JMS+Listener%22%3A%224.5.2%22%2C%22Message+Builder+Transformer+Step%22%3A%224.5.2%22%2C%22DICOM+Sender%22%3A%224.5.2%22%2C%22External+Script+Transformer+Step%22%3A%224.5.2%22%2C%22External+Script+Filter+Step%22%3A%224.5.2%22%2C%22File+Reader%22%3A%224.5.2%22%2C%22HTTP+Listener%22%3A%224.5.2%22%2C%22DICOM+Listener%22%3A%224.5.2%22%2C%22TCP+Connector+Service+Plugin%22%3A%224.5.2%22%2C%22JavaScript+Reader%22%3A%224.5.2%22%2C%22JSON+Data+Type%22%3A%224.5.2%22%2C%22JavaScript+Writer%22%3A%224.5.2%22%2C%22Web+Service+Sender%22%3A%224.5.2%22%2C%22Text+Viewer%22%3A%224.5.2%22%2C%22XML+Data+Type%22%3A%224.5.2%22%2C%22HL7v2+Data+Type%22%3A%224.5.2%22%2C%22Raw+Data+Type%22%3A%224.5.2%22%2C%22DICOM+Data+Type%22%3A%224.5.2%22%2C%22Destination+Set+Filter+Step%22%3A%224.5.2%22%2C%22Document+Writer%22%3A%224.5.2%22%2C%22Web+Service+Listener%22%3A%224.5.2%22%2C%22HL7v3+Data+Type%22%3A%224.5.2%22%2C%22JavaScript+Transformer+Step%22%3A%224.5.2%22%2C%22Dashboard+Connector+Status+Monitor%22%3A%224.5.2%22%2C%22DICOM+Viewer%22%3A%224.5.2%22%2C%22Directory+Resource+Plugin%22%3A%224.5.2%22%2C%22SMTP+Sender%22%3A%224.5.2%22%2C%22NCPDP+Data+Type%22%3A%224.5.2%22%2C%22Transmission+Mode+-+MLLP%22%3A%224.5.2%22%2C%22Rule+Builder+Filter+Rule%22%3A%224.5.2%22%2C%22Channel+Writer%22%3A%224.5.2%22%2C%22TCP+Listener%22%3A%224.5.2%22%2C%22Database+Reader%22%3A%224.5.2%22%2C%22PDF+Viewer%22%3A%224.5.2%22%2C%22EDI+Data+Type%22%3A%224.5.2%22%2C%22Global+Map+Viewer%22%3A%224.5.2%22%2C%22XSLT+Transformer+Step%22%3A%224.5.2%22%2C%22JMS+Sender%22%3A%224.5.2%22%7D
+---
+POST https://connect.mirthcorp.com/NotificationServlet HTTP/1.1
+Content-Type: application/x-www-form-urlencoded; charset=UTF-8
+User-Agent: Apache-HttpClient/4.5.13 (Java/21.0.7)
+
+op=getNotifications&serverId=49885e13-4f2e-41a6-b66a-8e65f5492d9a&version=4.4.0&extensionVersions=%7B%22Server+Log%22%3A%224.5.2%22%2C%22File+Writer%22%3A%224.5.2%22%2C%22Delimited+Data+Type%22%3A%224.5.2%22%2C%22HTTP+Sender%22%3A%224.5.2%22%2C%22HTTP+Authentication+Settings%22%3A%224.5.2%22%2C%22Image+Viewer%22%3A%224.5.2%22%2C%22Data+Pruner%22%3A%224.5.2%22%2C%22Database+Writer%22%3A%224.5.2%22%2C%22TCP+Sender%22%3A%224.5.2%22%2C%22JavaScript+Filter+Rule%22%3A%224.5.2%22%2C%22Channel+Reader%22%3A%224.5.2%22%2C%22Mapper+Transformer+Step%22%3A%224.5.2%22%2C%22JMS+Listener%22%3A%224.5.2%22%2C%22Message+Builder+Transformer+Step%22%3A%224.5.2%22%2C%22DICOM+Sender%22%3A%224.5.2%22%2C%22External+Script+Transformer+Step%22%3A%224.5.2%22%2C%22External+Script+Filter+Step%22%3A%224.5.2%22%2C%22File+Reader%22%3A%224.5.2%22%2C%22HTTP+Listener%22%3A%224.5.2%22%2C%22DICOM+Listener%22%3A%224.5.2%22%2C%22TCP+Connector+Service+Plugin%22%3A%224.5.2%22%2C%22JavaScript+Reader%22%3A%224.5.2%22%2C%22JSON+Data+Type%22%3A%224.5.2%22%2C%22JavaScript+Writer%22%3A%224.5.2%22%2C%22Web+Service+Sender%22%3A%224.5.2%22%2C%22Text+Viewer%22%3A%224.5.2%22%2C%22XML+Data+Type%22%3A%224.5.2%22%2C%22HL7v2+Data+Type%22%3A%224.5.2%22%2C%22Raw+Data+Type%22%3A%224.5.2%22%2C%22DICOM+Data+Type%22%3A%224.5.2%22%2C%22Destination+Set+Filter+Step%22%3A%224.5.2%22%2C%22Document+Writer%22%3A%224.5.2%22%2C%22Web+Service+Listener%22%3A%224.5.2%22%2C%22HL7v3+Data+Type%22%3A%224.5.2%22%2C%22JavaScript+Transformer+Step%22%3A%224.5.2%22%2C%22Dashboard+Connector+Status+Monitor%22%3A%224.5.2%22%2C%22DICOM+Viewer%22%3A%224.5.2%22%2C%22Directory+Resource+Plugin%22%3A%224.5.2%22%2C%22SMTP+Sender%22%3A%224.5.2%22%2C%22NCPDP+Data+Type%22%3A%224.5.2%22%2C%22Transmission+Mode+-+MLLP%22%3A%224.5.2%22%2C%22Rule+Builder+Filter+Rule%22%3A%224.5.2%22%2C%22Channel+Writer%22%3A%224.5.2%22%2C%22TCP+Listener%22%3A%224.5.2%22%2C%22Database+Reader%22%3A%224.5.2%22%2C%22PDF+Viewer%22%3A%224.5.2%22%2C%22EDI+Data+Type%22%3A%224.5.2%22%2C%22Global+Map+Viewer%22%3A%224.5.2%22%2C%22XSLT+Transformer+Step%22%3A%224.5.2%22%2C%22JMS+Sender%22%3A%224.5.2%22%7D
+---
+POST http://localhost:3000/RegistrationServlet
+Content-Type: application/x-www-form-urlencoded; charset=UTF-8
+User-Agent: Apache-HttpClient/4.5.13 (Java/21.0.7)
+
+serverId=49885e13-4f2e-41a6-b66a-8e65f5492d9a&version=4.5.2&user=%3Cuser%3E%0A++%3Cid%3E1%3C%2Fid%3E%0A++%3Cusername%3Eadmin%3C%2Fusername%3E%0A++%3Cemail%3Eadmin%40local%3C%2Femail%3E%0A++%3CfirstName%3Eadmin%3C%2FfirstName%3E%0A++%3ClastName%3Eadmin%3C%2FlastName%3E%0A++%3Corganization%3Eadmin%3C%2Forganization%3E%0A++%3Cdescription%3Easdg%3C%2Fdescription%3E%0A++%3CphoneNumber%3E%2B1+219-707-6210%3C%2FphoneNumber%3E%0A++%3Cindustry%3EClinic%3C%2Findustry%3E%0A++%3ClastLogin%3E%0A++++%3Ctime%3E1748811423800%3C%2Ftime%3E%0A++++%3Ctimezone%3EEtc%2FUTC%3C%2Ftimezone%3E%0A++%3C%2FlastLogin%3E%0A++%3CstrikeCount%3E0%3C%2FstrikeCount%3E%0A++%3Ccountry%3EUnited+States%3C%2Fcountry%3E%0A++%3Crole%3EConsultant+-+Engineer%3C%2Frole%3E%0A++%3CuserConsent%3Etrue%3C%2FuserConsent%3E%0A%3C%2Fuser%3E
+---
+POST http://localhost:3000/UsageStatisticsServlet
+Content-Type: application/x-www-form-urlencoded; charset=UTF-8
+User-Agent: Apache-HttpClient/4.5.13 (Java/21.0.7)
+
+serverId=49885e13-4f2e-41a6-b66a-8e65f5492d9a&version=4.5.2&server=true&data=%7B%22mirthVersion%22%3A%224.5.2%22%2C%22serverId%22%3A%2249885e13-4f2e-41a6-b66a-8e65f5492d9a%22%2C%22databaseType%22%3A%22derby%22%2C%22serverSpecs%22%3A%7B%22availableProcessors%22%3A16%2C%22osVersion%22%3A%225.15.167.4-microsoft-standard-WSL2%22%2C%22javaVersion%22%3A%2221.0.7%22%2C%22osName%22%3A%22Linux%22%2C%22maxMemory%22%3A268435456%7D%2C%22clientSpecs%22%3A%7B%7D%2C%22globalScripts%22%3A%7B%22deployLines%22%3A3%2C%22preprocessorLines%22%3A3%2C%22undeployLines%22%3A4%2C%22postprocessorLines%22%3A5%7D%2C%22channels%22%3A%5B%5D%2C%22invalidChannels%22%3A0%2C%22codeTemplateLibraries%22%3A%5B%5D%2C%22alerts%22%3A%5B%5D%2C%22plugins%22%3A%5B%7B%22pluginPoint%22%3A%22Server+Log%22%7D%2C%7B%22pluginPoint%22%3A%22DELIMITED%22%7D%2C%7B%22pluginPoint%22%3A%22XML%22%7D%2C%7B%22pluginPoint%22%3A%22HTTP+Auth+Service+Plugin%22%7D%2C%7B%22pluginPoint%22%3A%22HL7V2%22%7D%2C%7B%22pluginPoint%22%3A%22Data+Pruner%22%7D%2C%7B%22pluginPoint%22%3A%22RAW%22%7D%2C%7B%22pluginPoint%22%3A%22DICOM%22%7D%2C%7B%22pluginPoint%22%3A%22HL7V3%22%7D%2C%7B%22pluginPoint%22%3A%22Dashboard+Connector+Status+Service%22%7D%2C%7B%22pluginPoint%22%3A%22Directory+Resource%22%7D%2C%7B%22pluginPoint%22%3A%22NCPDP%22%7D%2C%7B%22pluginPoint%22%3A%22MLLP%22%7D%2C%7B%22pluginPoint%22%3A%22TCP+Service+Plugin%22%7D%2C%7B%22pluginPoint%22%3A%22JSON%22%7D%2C%7B%22pluginPoint%22%3A%22EDI%2FX12%22%7D%2C%7B%22pluginPoint%22%3A%22Global+Maps%22%7D%5D%2C%22pluginMetaData%22%3A%5B%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.serverlog.ServerLogProvider%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.serverlog.ServerLogClient%22%2C%22weight%22%3A120%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Server+Log%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.textviewer.TextViewer%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Text+Viewer%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.delimited.DelimitedDataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.delimited.DelimitedDataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Delimited+Data+Type%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.xml.XMLDataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.xml.XMLDataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22XML+Data+Type%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.httpauth.HttpAuthServicePlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.httpauth.HttpAuthConnectorPropertiesPlugin%22%2C%22weight%22%3A-100%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22HTTP+Authentication+Settings%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.imageviewer.ImageViewer%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Image+Viewer%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22HL7v2+Data+Type%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datapruner.DataPrunerService%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datapruner.DataPrunerClient%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Data+Pruner%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.raw.RawDataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.raw.RawDataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Raw+Data+Type%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.dicom.DICOMDataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.dicom.DICOMDataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22DICOM+Data+Type%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.destinationsetfilter.DestinationSetFilterPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Destination+Set+Filter+Step%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.hl7v3.HL7V3DataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.hl7v3.HL7V3DataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22HL7v3+Data+Type%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.javascriptrule.JavaScriptRulePlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22JavaScript+Filter+Rule%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.mapper.MapperStepPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Mapper+Transformer+Step%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.javascriptstep.JavaScriptStepPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22JavaScript+Transformer+Step%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.messagebuilder.MessageBuilderPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Message+Builder+Transformer+Step%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.dashboardstatus.DashboardConnectorStatusMonitor%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.dashboardstatus.DashboardConnectorStatusColumn%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%2C%7B%22name%22%3A%22com.mirth.connect.plugins.dashboardstatus.DashboardConnectorStatusClient%22%2C%22weight%22%3A110%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Dashboard+Connector+Status+Monitor%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.dicomviewer.DICOMViewer%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22DICOM+Viewer%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.scriptfilestep.ExternalScriptStepPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22External+Script+Transformer+Step%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.directoryresource.DirectoryResourcePlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.directoryresource.DirectoryResourceClientPlugin%22%2C%22weight%22%3A110%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Directory+Resource+Plugin%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.scriptfilerule.ExternalScriptRulePlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22External+Script+Filter+Step%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.ncpdp.NCPDPDataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.ncpdp.NCPDPDataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22NCPDP+Data+Type%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.mllpmode.MLLPModeProvider%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.mllpmode.MLLPModePlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Transmission+Mode+-+MLLP%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.rulebuilder.RuleBuilderPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Rule+Builder+Filter+Rule%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.connectors.tcp.TcpServicePlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.connectors.tcp.TcpClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22TCP+Connector+Service+Plugin%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.json.JSONDataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.json.JSONDataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22JSON+Data+Type%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.pdfviewer.PDFViewer%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22PDF+Viewer%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.edi.EDIDataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.edi.EDIDataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22EDI+Data+Type%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.globalmapviewer.GlobalMapProvider%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.globalmapviewer.GlobalMapClient%22%2C%22weight%22%3A100%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Global+Map+Viewer%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.xsltstep.XsltStepPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22XSLT+Transformer+Step%22%7D%5D%2C%22connectorMetaData%22%3A%5B%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22smtp%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.smtp.SmtpDispatcher%22%2C%22name%22%3A%22SMTP+Sender%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.smtp.SmtpSender%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.smtp.SmtpDispatcherProperties%22%7D%2C%7B%22transformers%22%3Anull%2C%22protocol%22%3A%22file%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.file.FileDispatcher%22%2C%22name%22%3A%22File+Writer%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.file.FileWriter%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.file.FileDispatcherProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22http%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.http.HttpDispatcher%22%2C%22name%22%3A%22HTTP+Sender%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.http.HttpSender%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.http.HttpDispatcherProperties%22%7D%2C%7B%22transformers%22%3Anull%2C%22protocol%22%3A%22file%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.file.FileReceiver%22%2C%22name%22%3A%22File+Reader%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.file.FileReader%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.file.FileReceiverProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22http%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.http.HttpReceiver%22%2C%22name%22%3A%22HTTP+Listener%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.http.HttpListener%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.http.HttpReceiverProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22dicom%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.dimse.DICOMReceiver%22%2C%22name%22%3A%22DICOM+Listener%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.dimse.DICOMListener%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.dimse.DICOMReceiverProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22vm%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.vm.VmDispatcher%22%2C%22name%22%3A%22Channel+Writer%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.vm.ChannelWriter%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.vm.VmDispatcherProperties%22%7D%2C%7B%22transformers%22%3A%22ResultMapToXML%22%2C%22protocol%22%3A%22js%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.js.JavaScriptReceiver%22%2C%22name%22%3A%22JavaScript+Reader%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.js.JavaScriptReader%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.js.JavaScriptReceiverProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22tcp%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.tcp.TcpReceiver%22%2C%22name%22%3A%22TCP+Listener%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.tcp.TcpListener%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.tcp.TcpReceiverProperties%22%7D%2C%7B%22transformers%22%3Anull%2C%22protocol%22%3A%22jdbc%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.jdbc.DatabaseReceiver%22%2C%22name%22%3A%22Database+Reader%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.jdbc.DatabaseReader%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.jdbc.DatabaseReceiverProperties%22%7D%2C%7B%22transformers%22%3Anull%2C%22protocol%22%3A%22jdbc%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.jdbc.DatabaseDispatcher%22%2C%22name%22%3A%22Database+Writer%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.jdbc.DatabaseWriter%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.jdbc.DatabaseDispatcherProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22doc%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.doc.DocumentDispatcher%22%2C%22name%22%3A%22Document+Writer%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.doc.DocumentWriter%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.doc.DocumentDispatcherProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22ws%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.ws.WebServiceReceiver%22%2C%22name%22%3A%22Web+Service+Listener%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.ws.WebServiceListener%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.ws.WebServiceReceiverProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22tcp%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.tcp.TcpDispatcher%22%2C%22name%22%3A%22TCP+Sender%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.tcp.TcpSender%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.tcp.TcpDispatcherProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22js%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.js.JavaScriptDispatcher%22%2C%22name%22%3A%22JavaScript+Writer%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.js.JavaScriptWriter%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.js.JavaScriptDispatcherProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22vm%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.vm.VmReceiver%22%2C%22name%22%3A%22Channel+Reader%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.vm.ChannelReader%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.vm.VmReceiverProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22ws%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.ws.WebServiceDispatcher%22%2C%22name%22%3A%22Web+Service+Sender%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.ws.WebServiceSender%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.ws.WebServiceDispatcherProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22jms%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.jms.JmsDispatcher%22%2C%22name%22%3A%22JMS+Sender%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.jms.JmsSender%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.jms.JmsDispatcherProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22jms%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.jms.JmsReceiver%22%2C%22name%22%3A%22JMS+Listener%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.jms.JmsListener%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.jms.JmsReceiverProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22dicom%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.dimse.DICOMDispatcher%22%2C%22name%22%3A%22DICOM+Sender%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.dimse.DICOMSender%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.dimse.DICOMDispatcherProperties%22%7D%5D%2C%22serverSettings%22%3A%7B%22clearGlobalMap%22%3Atrue%2C%22smtpTimeout%22%3A%225000%22%2C%22smtpAuth%22%3Afalse%2C%22defaultMetaDataColumns%22%3A%5B%7B%22type%22%3A%22STRING%22%7D%2C%7B%22type%22%3A%22STRING%22%7D%5D%2C%22defaultAdministratorBackgroundColor%22%3A%7B%22red%22%3A158%2C%22green%22%3A177%2C%22blue%22%3A201%2C%22alpha%22%3A255%2C%22rgb%22%3A-6377015%2C%22colorSpace%22%3A%7B%22type%22%3A5%2C%22numComponents%22%3A3%2C%22profile%22%3A%7B%22matrix%22%3A%5B%5B0.43585205%2C0.3853302%2C0.14302063%5D%2C%5B0.22238159%2C0.717041%2C0.06059265%5D%2C%5B0.013916016%2C0.09713745%2C0.71383667%5D%5D%2C%22mediaWhitePoint%22%3A%5B0.95014954%2C1.0%2C1.0882568%5D%2C%22numComponents%22%3A3%2C%22colorSpaceType%22%3A5%2C%22profileClass%22%3A1%2C%22pcstype%22%3A0%2C%22majorVersion%22%3A2%2C%22minorVersion%22%3A48%2C%22data%22%3A%22AAAa3GxjbXMCMAAAbW50clJHQiBYWVogB9YADAAcABIABwAWYWNzcE1TRlQAAAAAbGNtcwAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1sY21zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZG1uZAAAAQgAAABqZGVzYwAAAXQAAABoZG1kZAAAAdwAAABod3RwdAAAAkQAAAAUclhZWgAAAlgAAAAUYlhZWgAAAmwAAAAUZ1hZWgAAAoAAAAAUclRSQwAAApQAAAgMZ1RSQwAACqAAAAgMYlRSQwAAEqwAAAgMY2hybQAAGrgAAAAkZGVzYwAAAAAAAAAQKGxjbXMgaW50ZXJuYWwpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAOc1JHQiBidWlsdC1pbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAA5zUkdCIGJ1aWx0LWluAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAADzPQABAAAAARaYWFlaIAAAAAAAAG%2BUAAA47gAAA5BYWVogAAAAAAAAJJ0AAA%2BDAAC2vlhZWiAAAAAAAABipQAAt5AAABjeY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA%2BAD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB%2FgICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI%2BwkQCSUJOglPCWQJeQmPCaQJugnPCeUJ%2BwoRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N%2BA4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg%2BzD88P7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR%2BUH78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h%2ByInIlUigiKvIt0jCiM4I2YjlCPCI%2FAkHyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg%2FKHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi%2BRL8cv%2FjA1MGwwpDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN%2FM7gz8TQrNGU0njTYNRM1TTWHNcI1%2FTY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA%2BoD7gPyE%2FYT%2BiP%2BJAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS%2BJMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0%2FdUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW%2BVcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg%2FGFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg%2FaJZo7GlDaZpp8WpIap9q92tPa6dr%2F2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2hfgF%2BYn7CfyN%2FhH%2FlgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ%2FopkisqLMIuWi%2FyMY4zKjTGNmI3%2FjmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ%2FJpomtWbQpuvnByciZz3nWSd0p5Anq6fHZ%2BLn%2FqgaaDYoUehtqImopajBqN2o%2BakVqTHpTilqaYapoum%2Fadup%2BCoUqjEqTepqaocqo%2BrAqt1q%2BmsXKzQrUStuK4trqGvFq%2BLsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2Pvgq%2BhL7%2Fv3q%2F9cBwwOzBZ8Hjwl%2FC28NYw9TEUcTOxUvFyMZGxsPHQce%2FyD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI%2F0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba%2B9uA3AXcit0Q3ZbeHN6i3ynfr%2BA24L3hROHM4lPi2%2BNj4%2Bvkc%2BT85YTmDeaW5x%2Fnqegy6LzpRunQ6lvq5etw6%2Fvshu0R7ZzuKO6070DvzPBY8OXxcvH%2F8ozzGfOn9DT0wvVQ9d72bfb794r4Gfio%2BTj5x%2FpX%2Buf7d%2FwH%2FJj9Kf26%2Fkv%2B3P9t%2F%2F9jdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE%2BAUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN%2BA4oDlgOiA64DugPHA9MD4APsA%2FkEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE%2FgUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB%2BUH%2BAgLCB8IMghGCFoIbgiCCJYIqgi%2BCNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC%2FkMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg%2BWD7MPzw%2FsEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW%2BhcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx%2FqIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy%2F%2BMDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl%2FObw5%2BTo2OnQ6sjrvOy07azuqO%2Bg8JzxlPKQ84z0iPWE9oT3gPiA%2BYD6gPuA%2FIT9hP6I%2F4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU%2BTT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV%2BBYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v%2FbFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF%2BAX5ifsJ%2FI3%2BEf%2BWAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn%2BimSKyoswi5aL%2FIxjjMqNMY2Yjf%2BOZo7OjzaPnpAGkG6Q1pE%2FkaiSEZJ6kuOTTZO2lCCUipT0lV%2BVyZY0lp%2BXCpd1l%2BCYTJi4mSSZkJn8mmia1ZtCm6%2BcHJyJnPedZJ3SnkCerp8dn4uf%2BqBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot%2BC4WbjRuUq5wro7urW7LrunvCG8m70VvY%2B%2BCr6Evv%2B%2Fer%2F1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7%2FIPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG%2B0j%2FSwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd%2Bv4DbgveFE4cziU%2BLb42Pj6%2BRz5PzlhOYN5pbnH%2Bep6DLovOlG6dDqW%2Brl63Dr%2B%2ByG7RHtnO4o7rTvQO%2FM8Fjw5fFy8f%2FyjPMZ86f0NPTC9VD13vZt9vv3ivgZ%2BKj5OPnH%2Blf65%2Ft3%2FAf8mP0p%2Fbr%2BS%2F7c%2F23%2F%2F2N1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMAKAAtADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCkAKkArgCyALcAvADBAMYAywDQANUA2wDgAOUA6wDwAPYA%2BwEBAQcBDQETARkBHwElASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGhAakBsQG5AcEByQHRAdkB4QHpAfIB%2BgIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJxAnoChAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNyA34DigOWA6IDrgO6A8cD0wPgA%2BwD%2BQQGBBMEIAQtBDsESARVBGMEcQR%2BBIwEmgSoBLYExATTBOEE8AT%2BBQ0FHAUrBToFSQVYBWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowGnQavBsAG0QbjBvUHBwcZBysHPQdPB2EHdAeGB5kHrAe%2FB9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiqCL4I0gjnCPsJEAklCToJTwlkCXkJjwmkCboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5C1ELaQuAC5gLsAvIC%2BEL%2BQwSDCoMQwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4uDkkOZA5%2FDpsOtg7SDu4PCQ8lD0EPXg96D5YPsw%2FPD%2BwQCRAmEEMQYRB%2BEJsQuRDXEPURExExEU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS4xMDEyMTQxNjE4MTpBPFE%2BUUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6Fx0XQRdlF4kXrhfSF%2FcYGxhAGGUYihivGNUY%2BhkgGUUZaxmRGbcZ3RoEGioaURp3Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3DHeweFh5AHmoelB6%2BHukfEx8%2BH2kflB%2B%2FH%2BogFSBBIGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJVIoIiryLdIwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS%2FHL%2F4wNTBsMKQw2zESMUoxgjG6MfIyKjJjMpsy1DMNM0YzfzO4M%2FE0KzRlNJ402DUTNU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76DwnPGU8pDzjPSI9YT2hPeA%2BID5gPqA%2B4D8hP2E%2Foj%2FiQCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fASAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLHUxNTX1OqU%2FZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1kaWWlZuFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV%2BzYAVgV2CqYPxhT2GiYfViSWKcYvBjQ2OXY%2BtkQGSUZOllPWWSZedmPWaSZuhnPWeTZ%2BloP2iWaOxpQ2maafFqSGqfavdrT2una%2F9sV2yvbQhtYG25bhJua27Ebx5veG%2FRcCtwhnDgcTpxlXHwcktypnMBc11zuHQUdHB0zHUodYV14XY%2Bdpt2%2BHdWd7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4BfmJ%2Bwn8jf4R%2F5YBHgKiBCoFrgc2CMIKSgvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5%2BIBIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN%2F45mjs6PNo%2BekAaQbpDWkT%2BRqJIRknqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrVm0Kbr5wcnImc951kndKeQJ6unx2fi5%2F6oGmg2KFHobaiJqKWowajdqPmpFakx6U4pammGqaLpv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AAsHWw6rFgsdayS7LCszizrrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8IbybvRW9j74KvoS%2B%2F796v%2FXAcMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8%2B40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1%2BDYZNjo2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p36%2FgNuC94UThzOJT4tvjY%2BPr5HPk%2FOWE5g3mlucf56noMui86Ubp0Opb6uXrcOv77IbtEe2c7ijutO9A78zwWPDl8XLx%2F%2FKM8xnzp%2FQ09ML1UPXe9m32%2B%2FeK%2BBn4qPk4%2Bcf6V%2Frn%2B3f8B%2FyY%2FSn9uv5L%2Ftz%2Fbf%2F%2FY2hybQAAAAAAAwAAAACj1wAAVHsAAEzNAACZmgAAJmYAAA9c%22%7D%2C%22cs_sRGB%22%3Atrue%7D%2C%22transparency%22%3A1%7D%2C%22queueBufferSize%22%3A1000%2C%22smtpSecure%22%3A%220%22%7D%2C%22updateSettings%22%3A%7B%7D%2C%22debugStats%22%3A%5B%5D%2C%22users%22%3A1%7D
+---
+POST http://localhost:3000/UsageStatisticsServlet
+Content-Type: application/x-www-form-urlencoded; charset=UTF-8
+User-Agent: Apache-HttpClient/4.5.13 (Java/21.0.7)
+
+serverId=49885e13-4f2e-41a6-b66a-8e65f5492d9a&version=4.5.2&server=false&data=%7B%22mirthVersion%22%3A%224.5.2%22%2C%22serverId%22%3A%2249885e13-4f2e-41a6-b66a-8e65f5492d9a%22%2C%22databaseType%22%3A%22derby%22%2C%22serverSpecs%22%3A%7B%22availableProcessors%22%3A16%2C%22osVersion%22%3A%225.15.167.4-microsoft-standard-WSL2%22%2C%22javaVersion%22%3A%2221.0.7%22%2C%22osName%22%3A%22Linux%22%2C%22maxMemory%22%3A268435456%7D%2C%22clientSpecs%22%3A%7B%22javaVersion%22%3A%221.8.0_351%22%7D%2C%22globalScripts%22%3A%7B%22deployLines%22%3A3%2C%22preprocessorLines%22%3A3%2C%22undeployLines%22%3A4%2C%22postprocessorLines%22%3A5%7D%2C%22channels%22%3A%5B%5D%2C%22invalidChannels%22%3A0%2C%22codeTemplateLibraries%22%3A%5B%5D%2C%22alerts%22%3A%5B%5D%2C%22plugins%22%3A%5B%7B%22pluginPoint%22%3A%22Server+Log%22%7D%2C%7B%22pluginPoint%22%3A%22DELIMITED%22%7D%2C%7B%22pluginPoint%22%3A%22XML%22%7D%2C%7B%22pluginPoint%22%3A%22HTTP+Auth+Service+Plugin%22%7D%2C%7B%22pluginPoint%22%3A%22HL7V2%22%7D%2C%7B%22pluginPoint%22%3A%22Data+Pruner%22%7D%2C%7B%22pluginPoint%22%3A%22RAW%22%7D%2C%7B%22pluginPoint%22%3A%22DICOM%22%7D%2C%7B%22pluginPoint%22%3A%22HL7V3%22%7D%2C%7B%22pluginPoint%22%3A%22Dashboard+Connector+Status+Service%22%7D%2C%7B%22pluginPoint%22%3A%22Directory+Resource%22%7D%2C%7B%22pluginPoint%22%3A%22NCPDP%22%7D%2C%7B%22pluginPoint%22%3A%22MLLP%22%7D%2C%7B%22pluginPoint%22%3A%22TCP+Service+Plugin%22%7D%2C%7B%22pluginPoint%22%3A%22JSON%22%7D%2C%7B%22pluginPoint%22%3A%22EDI%2FX12%22%7D%2C%7B%22pluginPoint%22%3A%22Global+Maps%22%7D%5D%2C%22pluginMetaData%22%3A%5B%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.serverlog.ServerLogProvider%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.serverlog.ServerLogClient%22%2C%22weight%22%3A120%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Server+Log%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.textviewer.TextViewer%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Text+Viewer%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.delimited.DelimitedDataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.delimited.DelimitedDataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Delimited+Data+Type%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.xml.XMLDataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.xml.XMLDataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22XML+Data+Type%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.httpauth.HttpAuthServicePlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.httpauth.HttpAuthConnectorPropertiesPlugin%22%2C%22weight%22%3A-100%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22HTTP+Authentication+Settings%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.imageviewer.ImageViewer%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Image+Viewer%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22HL7v2+Data+Type%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datapruner.DataPrunerService%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datapruner.DataPrunerClient%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Data+Pruner%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.raw.RawDataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.raw.RawDataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Raw+Data+Type%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.dicom.DICOMDataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.dicom.DICOMDataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22DICOM+Data+Type%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.destinationsetfilter.DestinationSetFilterPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Destination+Set+Filter+Step%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.hl7v3.HL7V3DataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.hl7v3.HL7V3DataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22HL7v3+Data+Type%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.javascriptrule.JavaScriptRulePlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22JavaScript+Filter+Rule%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.mapper.MapperStepPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Mapper+Transformer+Step%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.javascriptstep.JavaScriptStepPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22JavaScript+Transformer+Step%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.messagebuilder.MessageBuilderPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Message+Builder+Transformer+Step%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.dashboardstatus.DashboardConnectorStatusMonitor%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.dashboardstatus.DashboardConnectorStatusColumn%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%2C%7B%22name%22%3A%22com.mirth.connect.plugins.dashboardstatus.DashboardConnectorStatusClient%22%2C%22weight%22%3A110%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Dashboard+Connector+Status+Monitor%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.dicomviewer.DICOMViewer%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22DICOM+Viewer%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.scriptfilestep.ExternalScriptStepPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22External+Script+Transformer+Step%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.directoryresource.DirectoryResourcePlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.directoryresource.DirectoryResourceClientPlugin%22%2C%22weight%22%3A110%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Directory+Resource+Plugin%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.scriptfilerule.ExternalScriptRulePlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22External+Script+Filter+Step%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.ncpdp.NCPDPDataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.ncpdp.NCPDPDataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22NCPDP+Data+Type%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.mllpmode.MLLPModeProvider%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.mllpmode.MLLPModePlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Transmission+Mode+-+MLLP%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.rulebuilder.RuleBuilderPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Rule+Builder+Filter+Rule%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.connectors.tcp.TcpServicePlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.connectors.tcp.TcpClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22TCP+Connector+Service+Plugin%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.json.JSONDataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.json.JSONDataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22JSON+Data+Type%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.pdfviewer.PDFViewer%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22PDF+Viewer%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.edi.EDIDataTypeServerPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.datatypes.edi.EDIDataTypeClientPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22EDI+Data+Type%22%7D%2C%7B%22serverClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.globalmapviewer.GlobalMapProvider%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.globalmapviewer.GlobalMapClient%22%2C%22weight%22%3A100%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22Global+Map+Viewer%22%7D%2C%7B%22serverClasses%22%3Anull%2C%22clientClasses%22%3A%5B%7B%22name%22%3A%22com.mirth.connect.plugins.xsltstep.XsltStepPlugin%22%2C%22weight%22%3A0%2C%22conditionClass%22%3Anull%7D%5D%2C%22name%22%3A%22XSLT+Transformer+Step%22%7D%5D%2C%22connectorMetaData%22%3A%5B%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22smtp%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.smtp.SmtpDispatcher%22%2C%22name%22%3A%22SMTP+Sender%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.smtp.SmtpSender%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.smtp.SmtpDispatcherProperties%22%7D%2C%7B%22transformers%22%3Anull%2C%22protocol%22%3A%22file%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.file.FileDispatcher%22%2C%22name%22%3A%22File+Writer%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.file.FileWriter%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.file.FileDispatcherProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22http%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.http.HttpDispatcher%22%2C%22name%22%3A%22HTTP+Sender%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.http.HttpSender%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.http.HttpDispatcherProperties%22%7D%2C%7B%22transformers%22%3Anull%2C%22protocol%22%3A%22file%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.file.FileReceiver%22%2C%22name%22%3A%22File+Reader%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.file.FileReader%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.file.FileReceiverProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22http%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.http.HttpReceiver%22%2C%22name%22%3A%22HTTP+Listener%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.http.HttpListener%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.http.HttpReceiverProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22dicom%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.dimse.DICOMReceiver%22%2C%22name%22%3A%22DICOM+Listener%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.dimse.DICOMListener%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.dimse.DICOMReceiverProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22vm%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.vm.VmDispatcher%22%2C%22name%22%3A%22Channel+Writer%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.vm.ChannelWriter%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.vm.VmDispatcherProperties%22%7D%2C%7B%22transformers%22%3A%22ResultMapToXML%22%2C%22protocol%22%3A%22js%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.js.JavaScriptReceiver%22%2C%22name%22%3A%22JavaScript+Reader%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.js.JavaScriptReader%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.js.JavaScriptReceiverProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22tcp%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.tcp.TcpReceiver%22%2C%22name%22%3A%22TCP+Listener%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.tcp.TcpListener%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.tcp.TcpReceiverProperties%22%7D%2C%7B%22transformers%22%3Anull%2C%22protocol%22%3A%22jdbc%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.jdbc.DatabaseReceiver%22%2C%22name%22%3A%22Database+Reader%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.jdbc.DatabaseReader%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.jdbc.DatabaseReceiverProperties%22%7D%2C%7B%22transformers%22%3Anull%2C%22protocol%22%3A%22jdbc%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.jdbc.DatabaseDispatcher%22%2C%22name%22%3A%22Database+Writer%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.jdbc.DatabaseWriter%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.jdbc.DatabaseDispatcherProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22doc%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.doc.DocumentDispatcher%22%2C%22name%22%3A%22Document+Writer%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.doc.DocumentWriter%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.doc.DocumentDispatcherProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22ws%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.ws.WebServiceReceiver%22%2C%22name%22%3A%22Web+Service+Listener%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.ws.WebServiceListener%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.ws.WebServiceReceiverProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22tcp%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.tcp.TcpDispatcher%22%2C%22name%22%3A%22TCP+Sender%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.tcp.TcpSender%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.tcp.TcpDispatcherProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22js%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.js.JavaScriptDispatcher%22%2C%22name%22%3A%22JavaScript+Writer%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.js.JavaScriptWriter%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.js.JavaScriptDispatcherProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22vm%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.vm.VmReceiver%22%2C%22name%22%3A%22Channel+Reader%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.vm.ChannelReader%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.vm.VmReceiverProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22ws%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.ws.WebServiceDispatcher%22%2C%22name%22%3A%22Web+Service+Sender%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.ws.WebServiceSender%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.ws.WebServiceDispatcherProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22jms%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.jms.JmsDispatcher%22%2C%22name%22%3A%22JMS+Sender%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.jms.JmsSender%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.jms.JmsDispatcherProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22jms%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.jms.JmsReceiver%22%2C%22name%22%3A%22JMS+Listener%22%2C%22type%22%3A%22SOURCE%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.jms.JmsListener%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.jms.JmsReceiverProperties%22%7D%2C%7B%22transformers%22%3A%22%22%2C%22protocol%22%3A%22dicom%22%2C%22serverClassName%22%3A%22com.mirth.connect.connectors.dimse.DICOMDispatcher%22%2C%22name%22%3A%22DICOM+Sender%22%2C%22type%22%3A%22DESTINATION%22%2C%22clientClassName%22%3A%22com.mirth.connect.connectors.dimse.DICOMSender%22%2C%22sharedClassName%22%3A%22com.mirth.connect.connectors.dimse.DICOMDispatcherProperties%22%7D%5D%2C%22serverSettings%22%3A%7B%22clearGlobalMap%22%3Atrue%2C%22smtpTimeout%22%3A%225000%22%2C%22smtpAuth%22%3Afalse%2C%22defaultMetaDataColumns%22%3A%5B%7B%22type%22%3A%22STRING%22%7D%2C%7B%22type%22%3A%22STRING%22%7D%5D%2C%22defaultAdministratorBackgroundColor%22%3A%7B%22red%22%3A158%2C%22green%22%3A177%2C%22blue%22%3A201%2C%22alpha%22%3A255%2C%22rgb%22%3A-6377015%2C%22colorSpace%22%3A%7B%22type%22%3A5%2C%22numComponents%22%3A3%2C%22profile%22%3A%7B%22matrix%22%3A%5B%5B0.43585205%2C0.3853302%2C0.14302063%5D%2C%5B0.22238159%2C0.717041%2C0.06059265%5D%2C%5B0.013916016%2C0.09713745%2C0.71383667%5D%5D%2C%22mediaWhitePoint%22%3A%5B0.95014954%2C1.0%2C1.0882568%5D%2C%22numComponents%22%3A3%2C%22colorSpaceType%22%3A5%2C%22profileClass%22%3A1%2C%22pcstype%22%3A0%2C%22majorVersion%22%3A2%2C%22minorVersion%22%3A48%2C%22data%22%3A%22AAAa3GxjbXMCMAAAbW50clJHQiBYWVogB9YADAAcABIABwAWYWNzcE1TRlQAAAAAbGNtcwAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1sY21zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZG1uZAAAAQgAAABqZGVzYwAAAXQAAABoZG1kZAAAAdwAAABod3RwdAAAAkQAAAAUclhZWgAAAlgAAAAUYlhZWgAAAmwAAAAUZ1hZWgAAAoAAAAAUclRSQwAAApQAAAgMZ1RSQwAACqAAAAgMYlRSQwAAEqwAAAgMY2hybQAAGrgAAAAkZGVzYwAAAAAAAAAQKGxjbXMgaW50ZXJuYWwpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAOc1JHQiBidWlsdC1pbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAA5zUkdCIGJ1aWx0LWluAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAADzPQABAAAAARaYWFlaIAAAAAAAAG%2BUAAA47gAAA5BYWVogAAAAAAAAJJ0AAA%2BDAAC2vlhZWiAAAAAAAABipQAAt5AAABjeY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA%2BAD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB%2FgICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI%2BwkQCSUJOglPCWQJeQmPCaQJugnPCeUJ%2BwoRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N%2BA4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg%2BzD88P7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR%2BUH78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h%2ByInIlUigiKvIt0jCiM4I2YjlCPCI%2FAkHyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg%2FKHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi%2BRL8cv%2FjA1MGwwpDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN%2FM7gz8TQrNGU0njTYNRM1TTWHNcI1%2FTY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA%2BoD7gPyE%2FYT%2BiP%2BJAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS%2BJMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0%2FdUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW%2BVcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg%2FGFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg%2FaJZo7GlDaZpp8WpIap9q92tPa6dr%2F2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2hfgF%2BYn7CfyN%2FhH%2FlgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ%2FopkisqLMIuWi%2FyMY4zKjTGNmI3%2FjmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ%2FJpomtWbQpuvnByciZz3nWSd0p5Anq6fHZ%2BLn%2FqgaaDYoUehtqImopajBqN2o%2BakVqTHpTilqaYapoum%2Fadup%2BCoUqjEqTepqaocqo%2BrAqt1q%2BmsXKzQrUStuK4trqGvFq%2BLsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2Pvgq%2BhL7%2Fv3q%2F9cBwwOzBZ8Hjwl%2FC28NYw9TEUcTOxUvFyMZGxsPHQce%2FyD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI%2F0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba%2B9uA3AXcit0Q3ZbeHN6i3ynfr%2BA24L3hROHM4lPi2%2BNj4%2Bvkc%2BT85YTmDeaW5x%2Fnqegy6LzpRunQ6lvq5etw6%2Fvshu0R7ZzuKO6070DvzPBY8OXxcvH%2F8ozzGfOn9DT0wvVQ9d72bfb794r4Gfio%2BTj5x%2FpX%2Buf7d%2FwH%2FJj9Kf26%2Fkv%2B3P9t%2F%2F9jdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE%2BAUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN%2BA4oDlgOiA64DugPHA9MD4APsA%2FkEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE%2FgUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB%2BUH%2BAgLCB8IMghGCFoIbgiCCJYIqgi%2BCNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC%2FkMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg%2BWD7MPzw%2FsEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW%2BhcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx%2FqIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy%2F%2BMDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl%2FObw5%2BTo2OnQ6sjrvOy07azuqO%2Bg8JzxlPKQ84z0iPWE9oT3gPiA%2BYD6gPuA%2FIT9hP6I%2F4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU%2BTT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV%2BBYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v%2FbFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF%2BAX5ifsJ%2FI3%2BEf%2BWAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn%2BimSKyoswi5aL%2FIxjjMqNMY2Yjf%2BOZo7OjzaPnpAGkG6Q1pE%2FkaiSEZJ6kuOTTZO2lCCUipT0lV%2BVyZY0lp%2BXCpd1l%2BCYTJi4mSSZkJn8mmia1ZtCm6%2BcHJyJnPedZJ3SnkCerp8dn4uf%2BqBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot%2BC4WbjRuUq5wro7urW7LrunvCG8m70VvY%2B%2BCr6Evv%2B%2Fer%2F1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7%2FIPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG%2B0j%2FSwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd%2Bv4DbgveFE4cziU%2BLb42Pj6%2BRz5PzlhOYN5pbnH%2Bep6DLovOlG6dDqW%2Brl63Dr%2B%2ByG7RHtnO4o7rTvQO%2FM8Fjw5fFy8f%2FyjPMZ86f0NPTC9VD13vZt9vv3ivgZ%2BKj5OPnH%2Blf65%2Ft3%2FAf8mP0p%2Fbr%2BS%2F7c%2F23%2F%2F2N1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMAKAAtADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCkAKkArgCyALcAvADBAMYAywDQANUA2wDgAOUA6wDwAPYA%2BwEBAQcBDQETARkBHwElASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGhAakBsQG5AcEByQHRAdkB4QHpAfIB%2BgIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJxAnoChAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNyA34DigOWA6IDrgO6A8cD0wPgA%2BwD%2BQQGBBMEIAQtBDsESARVBGMEcQR%2BBIwEmgSoBLYExATTBOEE8AT%2BBQ0FHAUrBToFSQVYBWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowGnQavBsAG0QbjBvUHBwcZBysHPQdPB2EHdAeGB5kHrAe%2FB9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiqCL4I0gjnCPsJEAklCToJTwlkCXkJjwmkCboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5C1ELaQuAC5gLsAvIC%2BEL%2BQwSDCoMQwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4uDkkOZA5%2FDpsOtg7SDu4PCQ8lD0EPXg96D5YPsw%2FPD%2BwQCRAmEEMQYRB%2BEJsQuRDXEPURExExEU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS4xMDEyMTQxNjE4MTpBPFE%2BUUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6Fx0XQRdlF4kXrhfSF%2FcYGxhAGGUYihivGNUY%2BhkgGUUZaxmRGbcZ3RoEGioaURp3Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3DHeweFh5AHmoelB6%2BHukfEx8%2BH2kflB%2B%2FH%2BogFSBBIGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJVIoIiryLdIwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS%2FHL%2F4wNTBsMKQw2zESMUoxgjG6MfIyKjJjMpsy1DMNM0YzfzO4M%2FE0KzRlNJ402DUTNU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76DwnPGU8pDzjPSI9YT2hPeA%2BID5gPqA%2B4D8hP2E%2Foj%2FiQCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fASAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLHUxNTX1OqU%2FZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1kaWWlZuFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV%2BzYAVgV2CqYPxhT2GiYfViSWKcYvBjQ2OXY%2BtkQGSUZOllPWWSZedmPWaSZuhnPWeTZ%2BloP2iWaOxpQ2maafFqSGqfavdrT2una%2F9sV2yvbQhtYG25bhJua27Ebx5veG%2FRcCtwhnDgcTpxlXHwcktypnMBc11zuHQUdHB0zHUodYV14XY%2Bdpt2%2BHdWd7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4BfmJ%2Bwn8jf4R%2F5YBHgKiBCoFrgc2CMIKSgvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5%2BIBIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN%2F45mjs6PNo%2BekAaQbpDWkT%2BRqJIRknqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrVm0Kbr5wcnImc951kndKeQJ6unx2fi5%2F6oGmg2KFHobaiJqKWowajdqPmpFakx6U4pammGqaLpv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AAsHWw6rFgsdayS7LCszizrrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8IbybvRW9j74KvoS%2B%2F796v%2FXAcMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8%2B40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1%2BDYZNjo2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p36%2FgNuC94UThzOJT4tvjY%2BPr5HPk%2FOWE5g3mlucf56noMui86Ubp0Opb6uXrcOv77IbtEe2c7ijutO9A78zwWPDl8XLx%2F%2FKM8xnzp%2FQ09ML1UPXe9m32%2B%2FeK%2BBn4qPk4%2Bcf6V%2Frn%2B3f8B%2FyY%2FSn9uv5L%2Ftz%2Fbf%2F%2FY2hybQAAAAAAAwAAAACj1wAAVHsAAEzNAACZmgAAJmYAAA9c%22%7D%2C%22cs_sRGB%22%3Atrue%7D%2C%22transparency%22%3A1%7D%2C%22queueBufferSize%22%3A1000%2C%22smtpSecure%22%3A%220%22%7D%2C%22updateSettings%22%3A%7B%7D%2C%22debugStats%22%3A%5B%5D%2C%22users%22%3A1%7D
+---
+POST http://localhost:3000/NotificationServlet HTTP/1.1
+Content-Type: application/x-www-form-urlencoded; charset=UTF-8
+User-Agent: Apache-HttpClient/4.5.13 (Java/21.0.7)
+
+op=getNotificationCount&serverId=49885e13-4f2e-41a6-b66a-8e65f5492d9a&version=4.5.2&extensionVersions=%7B%22Server+Log%22%3A%224.5.2%22%2C%22File+Writer%22%3A%224.5.2%22%2C%22Delimited+Data+Type%22%3A%224.5.2%22%2C%22HTTP+Sender%22%3A%224.5.2%22%2C%22HTTP+Authentication+Settings%22%3A%224.5.2%22%2C%22Image+Viewer%22%3A%224.5.2%22%2C%22Data+Pruner%22%3A%224.5.2%22%2C%22Database+Writer%22%3A%224.5.2%22%2C%22TCP+Sender%22%3A%224.5.2%22%2C%22JavaScript+Filter+Rule%22%3A%224.5.2%22%2C%22Channel+Reader%22%3A%224.5.2%22%2C%22Mapper+Transformer+Step%22%3A%224.5.2%22%2C%22JMS+Listener%22%3A%224.5.2%22%2C%22Message+Builder+Transformer+Step%22%3A%224.5.2%22%2C%22DICOM+Sender%22%3A%224.5.2%22%2C%22External+Script+Transformer+Step%22%3A%224.5.2%22%2C%22External+Script+Filter+Step%22%3A%224.5.2%22%2C%22File+Reader%22%3A%224.5.2%22%2C%22HTTP+Listener%22%3A%224.5.2%22%2C%22DICOM+Listener%22%3A%224.5.2%22%2C%22TCP+Connector+Service+Plugin%22%3A%224.5.2%22%2C%22JavaScript+Reader%22%3A%224.5.2%22%2C%22JSON+Data+Type%22%3A%224.5.2%22%2C%22JavaScript+Writer%22%3A%224.5.2%22%2C%22Web+Service+Sender%22%3A%224.5.2%22%2C%22Text+Viewer%22%3A%224.5.2%22%2C%22XML+Data+Type%22%3A%224.5.2%22%2C%22HL7v2+Data+Type%22%3A%224.5.2%22%2C%22Raw+Data+Type%22%3A%224.5.2%22%2C%22DICOM+Data+Type%22%3A%224.5.2%22%2C%22Destination+Set+Filter+Step%22%3A%224.5.2%22%2C%22Document+Writer%22%3A%224.5.2%22%2C%22Web+Service+Listener%22%3A%224.5.2%22%2C%22HL7v3+Data+Type%22%3A%224.5.2%22%2C%22JavaScript+Transformer+Step%22%3A%224.5.2%22%2C%22Dashboard+Connector+Status+Monitor%22%3A%224.5.2%22%2C%22DICOM+Viewer%22%3A%224.5.2%22%2C%22Directory+Resource+Plugin%22%3A%224.5.2%22%2C%22SMTP+Sender%22%3A%224.5.2%22%2C%22NCPDP+Data+Type%22%3A%224.5.2%22%2C%22Transmission+Mode+-+MLLP%22%3A%224.5.2%22%2C%22Rule+Builder+Filter+Rule%22%3A%224.5.2%22%2C%22Channel+Writer%22%3A%224.5.2%22%2C%22TCP+Listener%22%3A%224.5.2%22%2C%22Database+Reader%22%3A%224.5.2%22%2C%22PDF+Viewer%22%3A%224.5.2%22%2C%22EDI+Data+Type%22%3A%224.5.2%22%2C%22Global+Map+Viewer%22%3A%224.5.2%22%2C%22XSLT+Transformer+Step%22%3A%224.5.2%22%2C%22JMS+Sender%22%3A%224.5.2%22%7D
+---
+POST http://localhost:3000/NotificationServlet HTTP/1.1
+Content-Type: application/x-www-form-urlencoded; charset=UTF-8
+User-Agent: Apache-HttpClient/4.5.13 (Java/21.0.7)
+
+op=getNotifications&serverId=49885e13-4f2e-41a6-b66a-8e65f5492d9a&version=4.4.0&extensionVersions=%7B%22Server+Log%22%3A%224.5.2%22%2C%22File+Writer%22%3A%224.5.2%22%2C%22Delimited+Data+Type%22%3A%224.5.2%22%2C%22HTTP+Sender%22%3A%224.5.2%22%2C%22HTTP+Authentication+Settings%22%3A%224.5.2%22%2C%22Image+Viewer%22%3A%224.5.2%22%2C%22Data+Pruner%22%3A%224.5.2%22%2C%22Database+Writer%22%3A%224.5.2%22%2C%22TCP+Sender%22%3A%224.5.2%22%2C%22JavaScript+Filter+Rule%22%3A%224.5.2%22%2C%22Channel+Reader%22%3A%224.5.2%22%2C%22Mapper+Transformer+Step%22%3A%224.5.2%22%2C%22JMS+Listener%22%3A%224.5.2%22%2C%22Message+Builder+Transformer+Step%22%3A%224.5.2%22%2C%22DICOM+Sender%22%3A%224.5.2%22%2C%22External+Script+Transformer+Step%22%3A%224.5.2%22%2C%22External+Script+Filter+Step%22%3A%224.5.2%22%2C%22File+Reader%22%3A%224.5.2%22%2C%22HTTP+Listener%22%3A%224.5.2%22%2C%22DICOM+Listener%22%3A%224.5.2%22%2C%22TCP+Connector+Service+Plugin%22%3A%224.5.2%22%2C%22JavaScript+Reader%22%3A%224.5.2%22%2C%22JSON+Data+Type%22%3A%224.5.2%22%2C%22JavaScript+Writer%22%3A%224.5.2%22%2C%22Web+Service+Sender%22%3A%224.5.2%22%2C%22Text+Viewer%22%3A%224.5.2%22%2C%22XML+Data+Type%22%3A%224.5.2%22%2C%22HL7v2+Data+Type%22%3A%224.5.2%22%2C%22Raw+Data+Type%22%3A%224.5.2%22%2C%22DICOM+Data+Type%22%3A%224.5.2%22%2C%22Destination+Set+Filter+Step%22%3A%224.5.2%22%2C%22Document+Writer%22%3A%224.5.2%22%2C%22Web+Service+Listener%22%3A%224.5.2%22%2C%22HL7v3+Data+Type%22%3A%224.5.2%22%2C%22JavaScript+Transformer+Step%22%3A%224.5.2%22%2C%22Dashboard+Connector+Status+Monitor%22%3A%224.5.2%22%2C%22DICOM+Viewer%22%3A%224.5.2%22%2C%22Directory+Resource+Plugin%22%3A%224.5.2%22%2C%22SMTP+Sender%22%3A%224.5.2%22%2C%22NCPDP+Data+Type%22%3A%224.5.2%22%2C%22Transmission+Mode+-+MLLP%22%3A%224.5.2%22%2C%22Rule+Builder+Filter+Rule%22%3A%224.5.2%22%2C%22Channel+Writer%22%3A%224.5.2%22%2C%22TCP+Listener%22%3A%224.5.2%22%2C%22Database+Reader%22%3A%224.5.2%22%2C%22PDF+Viewer%22%3A%224.5.2%22%2C%22EDI+Data+Type%22%3A%224.5.2%22%2C%22Global+Map+Viewer%22%3A%224.5.2%22%2C%22XSLT+Transformer+Step%22%3A%224.5.2%22%2C%22JMS+Sender%22%3A%224.5.2%22%7D
+---
\ No newline at end of file
diff --git a/connectservice/usage.js b/connectservice/usage.js
new file mode 100644
index 000000000..55047896e
--- /dev/null
+++ b/connectservice/usage.js
@@ -0,0 +1,174 @@
+import * as yup from 'yup';
+import { parseStringPromise } from 'xml2js';
+import { client } from './elastic.js';
+
+export async function postRegistration(req, res) {
+ const userData = {
+ serverId: req.body.serverId,
+ version: req.body.version,
+ user: (await parseStringPromise(req.body.user, { explicitArray: false }))?.user,
+ };
+
+ console.log(`Received registration for ${JSON.stringify(userData)}`);
+
+ await client.index({
+ index: 'registration',
+ id: userData.serverId,
+ body: userData,
+ });
+
+ res.sendStatus(204);
+}
+
+/*
+POST http://localhost:3000/RegistrationServlet
+Content-Type: application/x-www-form-urlencoded; charset=UTF-8
+User-Agent: Apache-HttpClient/4.5.13 (Java/21.0.7)
+
+serverId=49885e13-4f2e-41a6-b66a-8e65f5492d9a&version=4.5.2&user=user_xml_data
+*/
+export const registrationBodySchema = yup.object({
+ serverId: yup.string().required(),
+ version: yup.string().required(),
+ user: yup.string().required(), // XML data as a string
+}).required();
+
+/*
+registration data:
+
+ 1
+ admin
+ admin@local
+ admin
+ admin
+ admin
+ asdg
+ +1 219-555-1212
+ Clinic
+
+
+ Etc/UTC
+
+ 0
+ United States
+ Consultant - Engineer
+ true
+
+*/
+
+export async function postUsage(req, res) {
+ let usagePayload = JSON.parse(req.body.data);
+
+ // data.serverSettings.defaultAdministratorBackgroundColor is not representable
+ // in ElasticSearch and has a crazy amount of data - so kill it.
+ delete usagePayload.serverSettings.defaultAdministratorBackgroundColor;
+
+ const usageData = {
+ serverId: req.body.serverId,
+ version: req.body.version,
+ server: req.body.server,
+ data: usagePayload
+ };
+
+ console.log(`Received usage data ${JSON.stringify(usageData)}`);
+ await client.index({
+ index: 'usage',
+ id: usageData.serverId,
+ body: usageData,
+ });
+
+ res.sendStatus(204);
+}
+
+/*
+POST http://localhost:3000/UsageStatisticsServlet
+Content-Type: application/x-www-form-urlencoded; charset=UTF-8
+User-Agent: Apache-HttpClient/4.5.13 (Java/21.0.7)
+
+serverId=49885e13-4f2e-41a6-b66a-8e65f5492d9a&version=4.5.2&server=true&data=usage_xml_data
+*/
+export const usageBodySchema = yup.object({
+ serverId: yup.string().required(),
+ version: yup.string().required(),
+ server: yup.boolean().required(),
+ data: yup.string().required(),
+}).required();
+
+/*
+usage data:
+{
+ "mirthVersion": "4.5.2",
+ "serverId": "49885e13-4f2e-41a6-b66a-8e65f5492d9a",
+ "databaseType": "derby",
+ "serverSpecs": {
+ "availableProcessors": 16,
+ "osVersion": "5.15.167.4-microsoft-standard-WSL2",
+ "javaVersion": "21.0.7",
+ "osName": "Linux",
+ "maxMemory": 268435456
+ },
+ "clientSpecs": {
+ "javaVersion": "1.8.0_351"
+ },
+ "globalScripts": {
+ "deployLines": 3,
+ "preprocessorLines": 3,
+ "undeployLines": 4,
+ "postprocessorLines": 5
+ },
+ "channels": [],
+ "invalidChannels": 0,
+ "codeTemplateLibraries": [],
+ "alerts": [],
+ "plugins": [
+ {
+ "pluginPoint": "Server Log"
+ },
+ ...
+ ],
+ "pluginMetaData": [
+ {
+ "serverClasses": [
+ {
+ "name": "com.mirth.connect.plugins.serverlog.ServerLogProvider",
+ "weight": 0,
+ "conditionClass": null
+ }
+ ],
+ "clientClasses": [
+ {
+ "name": "com.mirth.connect.plugins.serverlog.ServerLogClient",
+ "weight": 120,
+ "conditionClass": null
+ }
+ ],
+ "name": "Server Log"
+ },
+ ...
+ ],
+ "connectorMetaData": [
+ {
+ "transformers": "",
+ "protocol": "smtp",
+ "serverClassName": "com.mirth.connect.connectors.smtp.SmtpDispatcher",
+ "name": "SMTP Sender",
+ "type": "DESTINATION",
+ "clientClassName": "com.mirth.connect.connectors.smtp.SmtpSender",
+ "sharedClassName": "com.mirth.connect.connectors.smtp.SmtpDispatcherProperties"
+ },
+ ...
+ ],
+ "serverSettings": {
+ "clearGlobalMap": true,
+ "smtpTimeout": "5000",
+ "smtpAuth": false,
+ "defaultMetaDataColumns": [ ... ],
+ "defaultAdministratorBackgroundColor": { ... },
+ "queueBufferSize": 1000,
+ "smtpSecure": "0"
+ },
+ "updateSettings": {},
+ "debugStats": [],
+ "users": 1
+ }
+*/