diff --git a/.github/workflows/ci-master.yml b/.github/workflows/ci-master.yml
index 44b924fc..7805cac3 100644
--- a/.github/workflows/ci-master.yml
+++ b/.github/workflows/ci-master.yml
@@ -16,10 +16,21 @@ jobs:
name: Tests
steps:
- uses: actions/checkout@v2
- - uses: actions/setup-node@v1
+ - uses: actions/setup-node@v2
with:
- node-version: '12.x'
- - run: npm install
+ node-version: '14.x'
+ - name: Cache node modules
+ uses: actions/cache@v2
+ env:
+ cache-name: cache-node-modules
+ with:
+ path: ~/.npm
+ key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
+ restore-keys: |
+ ${{ runner.os }}-build-${{ env.cache-name }}-
+ ${{ runner.os }}-build-
+ ${{ runner.os }}-
+ - run: npm ci
- run: npm run lint
- run: npm run typecheck
- run: npm run test
diff --git a/.github/workflows/ci-pull-request.yml b/.github/workflows/ci-pull-request.yml
index 2a9291dc..00066708 100644
--- a/.github/workflows/ci-pull-request.yml
+++ b/.github/workflows/ci-pull-request.yml
@@ -24,10 +24,21 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- - uses: actions/setup-node@v1
+ - uses: actions/setup-node@v2
with:
- node-version: '12.x'
- - run: npm install
+ node-version: '14.x'
+ - name: Cache node modules
+ uses: actions/cache@v2
+ env:
+ cache-name: cache-node-modules
+ with:
+ path: ~/.npm
+ key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
+ restore-keys: |
+ ${{ runner.os }}-build-${{ env.cache-name }}-
+ ${{ runner.os }}-build-
+ ${{ runner.os }}-
+ - run: npm ci
- run: npm run lint
- run: npm run typecheck
- run: npm run test
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 00000000..518633e1
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+lts/fermium
diff --git a/README.md b/README.md
index 18839f78..8dfde03c 100644
--- a/README.md
+++ b/README.md
@@ -10,12 +10,12 @@ To get onboarded as a HealthCerts Issuer, please refer to the [Notarise FAQ (poi
To start endorsing your **Pre-departure Test (PDT) HealthCerts** on Notarise.gov.sg, please take note of the respective endpoints for each version/environment:
-| **Environment** | **PDT Schema v1.0**\* | **PDT Schema v2.0** |
-| --------------- | -------------------------- | ----------------------------- |
-| Staging | `/stg/notarise/pdt` | `/stg/v2/notarise/pdt` |
-| Production | `/production/notarise/pdt` | `/production/v2/notarise/pdt` |
+| **Environment** | **PDT Schema v2.0** |
+| --------------- | ----------------------------- |
+| Staging | `/stg/v2/notarise/pdt` |
+| Production | `/production/v2/notarise/pdt` |
-> **Deprecation notice**: v1.0 endpoint is scheduled to be deprecated on 31 October 2021. Please refer to [this guide](https://github.com/Open-Attestation/schemata/pull/38) to migrate to PDT Schema v2.0.
Please be reminded that endorsement of documents utilising the new PDT HealthCert Schema v2.0 is only available in the new v2 Notarise endpoint: `/stg/v2/notarise/pdt` or `/production/v2/notarise/pdt`.
+> **Deprecation notice**: v1.0 endpoint is deprecated on 31 January 2022. Please refer to [this guide](https://github.com/Open-Attestation/schemata/pull/38) to migrate to PDT Schema v2.0.
Please be reminded that endorsement of documents utilising the new PDT HealthCert Schema v2.0 is only available in the new v2 Notarise endpoint: `/stg/v2/notarise/pdt` or `/production/v2/notarise/pdt`.
**Request Format**:
@@ -33,7 +33,7 @@ curl -i -X POST \
{
"notarisedDocument": {...},
"ttl": 1636629304073,
- "url": "https://action.openattestation.com/?q=xxx",
+ "url": "https://www.verify.gov.sg/verify?q=xxx",
"gpayCovidCardUrl": "https://pay.google.com/gp/v/save/xxx"
}
```
diff --git a/package-lock.json b/package-lock.json
index 20f1072b..10d2b595 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -43,26 +43,26 @@
}
},
"@babel/compat-data": {
- "version": "7.16.4",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz",
- "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==",
+ "version": "7.16.8",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz",
+ "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==",
"dev": true
},
"@babel/core": {
- "version": "7.15.5",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz",
- "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.15.4",
- "@babel/helper-compilation-targets": "^7.15.4",
- "@babel/helper-module-transforms": "^7.15.4",
- "@babel/helpers": "^7.15.4",
- "@babel/parser": "^7.15.5",
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4",
+ "version": "7.16.12",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz",
+ "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.7",
+ "@babel/generator": "^7.16.8",
+ "@babel/helper-compilation-targets": "^7.16.7",
+ "@babel/helper-module-transforms": "^7.16.7",
+ "@babel/helpers": "^7.16.7",
+ "@babel/parser": "^7.16.12",
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.16.10",
+ "@babel/types": "^7.16.8",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -71,92 +71,105 @@
"source-map": "^0.5.0"
},
"dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "@babel/code-frame": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
+ "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.16.7"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
"dev": true
+ },
+ "@babel/highlight": {
+ "version": "7.16.10",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
+ "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
}
}
},
"@babel/generator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz",
- "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==",
+ "version": "7.16.8",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz",
+ "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==",
"dev": true,
"requires": {
- "@babel/types": "^7.16.0",
+ "@babel/types": "^7.16.8",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
}
},
"@babel/helper-annotate-as-pure": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz",
- "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz",
+ "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==",
"dev": true,
"requires": {
- "@babel/types": "^7.16.0"
+ "@babel/types": "^7.16.7"
}
},
"@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz",
- "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz",
+ "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==",
"dev": true,
"requires": {
- "@babel/helper-explode-assignable-expression": "^7.16.0",
- "@babel/types": "^7.16.0"
+ "@babel/helper-explode-assignable-expression": "^7.16.7",
+ "@babel/types": "^7.16.7"
}
},
"@babel/helper-compilation-targets": {
- "version": "7.16.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz",
- "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz",
+ "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.16.0",
- "@babel/helper-validator-option": "^7.14.5",
+ "@babel/compat-data": "^7.16.4",
+ "@babel/helper-validator-option": "^7.16.7",
"browserslist": "^4.17.5",
"semver": "^6.3.0"
}
},
"@babel/helper-create-class-features-plugin": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz",
- "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==",
+ "version": "7.16.10",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz",
+ "integrity": "sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg==",
"dev": true,
"requires": {
- "@babel/helper-annotate-as-pure": "^7.16.0",
- "@babel/helper-function-name": "^7.16.0",
- "@babel/helper-member-expression-to-functions": "^7.16.0",
- "@babel/helper-optimise-call-expression": "^7.16.0",
- "@babel/helper-replace-supers": "^7.16.0",
- "@babel/helper-split-export-declaration": "^7.16.0"
+ "@babel/helper-annotate-as-pure": "^7.16.7",
+ "@babel/helper-environment-visitor": "^7.16.7",
+ "@babel/helper-function-name": "^7.16.7",
+ "@babel/helper-member-expression-to-functions": "^7.16.7",
+ "@babel/helper-optimise-call-expression": "^7.16.7",
+ "@babel/helper-replace-supers": "^7.16.7",
+ "@babel/helper-split-export-declaration": "^7.16.7"
}
},
"@babel/helper-create-regexp-features-plugin": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz",
- "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz",
+ "integrity": "sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==",
"dev": true,
"requires": {
- "@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-annotate-as-pure": "^7.16.7",
"regexpu-core": "^4.7.1"
}
},
"@babel/helper-define-polyfill-provider": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz",
- "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==",
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz",
+ "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==",
"dev": true,
"requires": {
"@babel/helper-compilation-targets": "^7.13.0",
@@ -169,123 +182,141 @@
"semver": "^6.1.2"
}
},
+ "@babel/helper-environment-visitor": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz",
+ "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.7"
+ }
+ },
"@babel/helper-explode-assignable-expression": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz",
- "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz",
+ "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.16.0"
+ "@babel/types": "^7.16.7"
}
},
"@babel/helper-function-name": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz",
- "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz",
+ "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "^7.16.0",
- "@babel/template": "^7.16.0",
- "@babel/types": "^7.16.0"
+ "@babel/helper-get-function-arity": "^7.16.7",
+ "@babel/template": "^7.16.7",
+ "@babel/types": "^7.16.7"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz",
- "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz",
+ "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==",
"dev": true,
"requires": {
- "@babel/types": "^7.16.0"
+ "@babel/types": "^7.16.7"
}
},
"@babel/helper-hoist-variables": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz",
- "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz",
+ "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==",
"dev": true,
"requires": {
- "@babel/types": "^7.16.0"
+ "@babel/types": "^7.16.7"
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz",
- "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz",
+ "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==",
"dev": true,
"requires": {
- "@babel/types": "^7.16.0"
+ "@babel/types": "^7.16.7"
}
},
"@babel/helper-module-imports": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz",
- "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz",
+ "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==",
"dev": true,
"requires": {
- "@babel/types": "^7.16.0"
+ "@babel/types": "^7.16.7"
}
},
"@babel/helper-module-transforms": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz",
- "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.16.0",
- "@babel/helper-replace-supers": "^7.16.0",
- "@babel/helper-simple-access": "^7.16.0",
- "@babel/helper-split-export-declaration": "^7.16.0",
- "@babel/helper-validator-identifier": "^7.15.7",
- "@babel/template": "^7.16.0",
- "@babel/traverse": "^7.16.0",
- "@babel/types": "^7.16.0"
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz",
+ "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.16.7",
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/helper-simple-access": "^7.16.7",
+ "@babel/helper-split-export-declaration": "^7.16.7",
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.16.7",
+ "@babel/types": "^7.16.7"
+ },
+ "dependencies": {
+ "@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "dev": true
+ }
}
},
"@babel/helper-optimise-call-expression": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz",
- "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz",
+ "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==",
"dev": true,
"requires": {
- "@babel/types": "^7.16.0"
+ "@babel/types": "^7.16.7"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz",
- "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz",
+ "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==",
"dev": true
},
"@babel/helper-remap-async-to-generator": {
- "version": "7.16.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz",
- "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==",
+ "version": "7.16.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz",
+ "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==",
"dev": true,
"requires": {
- "@babel/helper-annotate-as-pure": "^7.16.0",
- "@babel/helper-wrap-function": "^7.16.0",
- "@babel/types": "^7.16.0"
+ "@babel/helper-annotate-as-pure": "^7.16.7",
+ "@babel/helper-wrap-function": "^7.16.8",
+ "@babel/types": "^7.16.8"
}
},
"@babel/helper-replace-supers": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz",
- "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz",
+ "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==",
"dev": true,
"requires": {
- "@babel/helper-member-expression-to-functions": "^7.16.0",
- "@babel/helper-optimise-call-expression": "^7.16.0",
- "@babel/traverse": "^7.16.0",
- "@babel/types": "^7.16.0"
+ "@babel/helper-environment-visitor": "^7.16.7",
+ "@babel/helper-member-expression-to-functions": "^7.16.7",
+ "@babel/helper-optimise-call-expression": "^7.16.7",
+ "@babel/traverse": "^7.16.7",
+ "@babel/types": "^7.16.7"
}
},
"@babel/helper-simple-access": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz",
- "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz",
+ "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==",
"dev": true,
"requires": {
- "@babel/types": "^7.16.0"
+ "@babel/types": "^7.16.7"
}
},
"@babel/helper-skip-transparent-expression-wrappers": {
@@ -298,12 +329,12 @@
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz",
- "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz",
+ "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==",
"dev": true,
"requires": {
- "@babel/types": "^7.16.0"
+ "@babel/types": "^7.16.7"
}
},
"@babel/helper-validator-identifier": {
@@ -313,32 +344,32 @@
"dev": true
},
"@babel/helper-validator-option": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz",
- "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz",
+ "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==",
"dev": true
},
"@babel/helper-wrap-function": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz",
- "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==",
+ "version": "7.16.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz",
+ "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==",
"dev": true,
"requires": {
- "@babel/helper-function-name": "^7.16.0",
- "@babel/template": "^7.16.0",
- "@babel/traverse": "^7.16.0",
- "@babel/types": "^7.16.0"
+ "@babel/helper-function-name": "^7.16.7",
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.16.8",
+ "@babel/types": "^7.16.8"
}
},
"@babel/helpers": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz",
- "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz",
+ "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==",
"dev": true,
"requires": {
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4"
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.16.7",
+ "@babel/types": "^7.16.7"
}
},
"@babel/highlight": {
@@ -353,187 +384,187 @@
}
},
"@babel/parser": {
- "version": "7.16.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz",
- "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==",
+ "version": "7.16.12",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz",
+ "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==",
"dev": true
},
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.16.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz",
- "integrity": "sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz",
+ "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz",
- "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz",
+ "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.7",
"@babel/helper-skip-transparent-expression-wrappers": "^7.16.0",
- "@babel/plugin-proposal-optional-chaining": "^7.16.0"
+ "@babel/plugin-proposal-optional-chaining": "^7.16.7"
}
},
"@babel/plugin-proposal-async-generator-functions": {
- "version": "7.16.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz",
- "integrity": "sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg==",
+ "version": "7.16.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz",
+ "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-remap-async-to-generator": "^7.16.4",
+ "@babel/helper-plugin-utils": "^7.16.7",
+ "@babel/helper-remap-async-to-generator": "^7.16.8",
"@babel/plugin-syntax-async-generators": "^7.8.4"
}
},
"@babel/plugin-proposal-class-properties": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz",
- "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz",
+ "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==",
"dev": true,
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-create-class-features-plugin": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-proposal-class-static-block": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz",
- "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz",
+ "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==",
"dev": true,
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-create-class-features-plugin": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7",
"@babel/plugin-syntax-class-static-block": "^7.14.5"
}
},
"@babel/plugin-proposal-dynamic-import": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz",
- "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz",
+ "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.7",
"@babel/plugin-syntax-dynamic-import": "^7.8.3"
}
},
"@babel/plugin-proposal-export-namespace-from": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz",
- "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz",
+ "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.7",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3"
}
},
"@babel/plugin-proposal-json-strings": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz",
- "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz",
+ "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.7",
"@babel/plugin-syntax-json-strings": "^7.8.3"
}
},
"@babel/plugin-proposal-logical-assignment-operators": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz",
- "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz",
+ "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.7",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
}
},
"@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz",
- "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz",
+ "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.7",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
}
},
"@babel/plugin-proposal-numeric-separator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz",
- "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz",
+ "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.7",
"@babel/plugin-syntax-numeric-separator": "^7.10.4"
}
},
"@babel/plugin-proposal-object-rest-spread": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz",
- "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz",
+ "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.16.0",
- "@babel/helper-compilation-targets": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/compat-data": "^7.16.4",
+ "@babel/helper-compilation-targets": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.16.0"
+ "@babel/plugin-transform-parameters": "^7.16.7"
}
},
"@babel/plugin-proposal-optional-catch-binding": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz",
- "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz",
+ "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.7",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
}
},
"@babel/plugin-proposal-optional-chaining": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz",
- "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz",
+ "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.7",
"@babel/helper-skip-transparent-expression-wrappers": "^7.16.0",
"@babel/plugin-syntax-optional-chaining": "^7.8.3"
}
},
"@babel/plugin-proposal-private-methods": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz",
- "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==",
+ "version": "7.16.11",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz",
+ "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==",
"dev": true,
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-create-class-features-plugin": "^7.16.10",
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-proposal-private-property-in-object": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz",
- "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz",
+ "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==",
"dev": true,
"requires": {
- "@babel/helper-annotate-as-pure": "^7.16.0",
- "@babel/helper-create-class-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-annotate-as-pure": "^7.16.7",
+ "@babel/helper-create-class-features-plugin": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
}
},
"@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz",
- "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz",
+ "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==",
"dev": true,
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-create-regexp-features-plugin": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-syntax-async-generators": {
@@ -681,364 +712,374 @@
}
},
"@babel/plugin-syntax-typescript": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz",
- "integrity": "sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz",
+ "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-arrow-functions": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz",
- "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz",
+ "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-async-to-generator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz",
- "integrity": "sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==",
+ "version": "7.16.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz",
+ "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==",
"dev": true,
"requires": {
- "@babel/helper-module-imports": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-remap-async-to-generator": "^7.16.0"
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7",
+ "@babel/helper-remap-async-to-generator": "^7.16.8"
}
},
"@babel/plugin-transform-block-scoped-functions": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz",
- "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz",
+ "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-block-scoping": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz",
- "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz",
+ "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-classes": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz",
- "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.16.0",
- "@babel/helper-function-name": "^7.16.0",
- "@babel/helper-optimise-call-expression": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-replace-supers": "^7.16.0",
- "@babel/helper-split-export-declaration": "^7.16.0",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz",
+ "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.7",
+ "@babel/helper-environment-visitor": "^7.16.7",
+ "@babel/helper-function-name": "^7.16.7",
+ "@babel/helper-optimise-call-expression": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7",
+ "@babel/helper-replace-supers": "^7.16.7",
+ "@babel/helper-split-export-declaration": "^7.16.7",
"globals": "^11.1.0"
}
},
"@babel/plugin-transform-computed-properties": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz",
- "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz",
+ "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-destructuring": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz",
- "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz",
+ "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-dotall-regex": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz",
- "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz",
+ "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==",
"dev": true,
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-create-regexp-features-plugin": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-duplicate-keys": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz",
- "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz",
+ "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-exponentiation-operator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz",
- "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz",
+ "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==",
"dev": true,
"requires": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-for-of": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz",
- "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz",
+ "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-function-name": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz",
- "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz",
+ "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==",
"dev": true,
"requires": {
- "@babel/helper-function-name": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-compilation-targets": "^7.16.7",
+ "@babel/helper-function-name": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-literals": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz",
- "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz",
+ "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-member-expression-literals": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz",
- "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz",
+ "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-modules-amd": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz",
- "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz",
+ "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-module-transforms": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7",
"babel-plugin-dynamic-import-node": "^2.3.3"
}
},
"@babel/plugin-transform-modules-commonjs": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz",
- "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==",
+ "version": "7.16.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz",
+ "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-simple-access": "^7.16.0",
+ "@babel/helper-module-transforms": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7",
+ "@babel/helper-simple-access": "^7.16.7",
"babel-plugin-dynamic-import-node": "^2.3.3"
}
},
"@babel/plugin-transform-modules-systemjs": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz",
- "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz",
+ "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==",
"dev": true,
"requires": {
- "@babel/helper-hoist-variables": "^7.16.0",
- "@babel/helper-module-transforms": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-validator-identifier": "^7.15.7",
+ "@babel/helper-hoist-variables": "^7.16.7",
+ "@babel/helper-module-transforms": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7",
+ "@babel/helper-validator-identifier": "^7.16.7",
"babel-plugin-dynamic-import-node": "^2.3.3"
+ },
+ "dependencies": {
+ "@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "dev": true
+ }
}
},
"@babel/plugin-transform-modules-umd": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz",
- "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz",
+ "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-module-transforms": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz",
- "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==",
+ "version": "7.16.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz",
+ "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==",
"dev": true,
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.16.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.16.7"
}
},
"@babel/plugin-transform-new-target": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz",
- "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz",
+ "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-object-super": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz",
- "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz",
+ "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-replace-supers": "^7.16.0"
+ "@babel/helper-plugin-utils": "^7.16.7",
+ "@babel/helper-replace-supers": "^7.16.7"
}
},
"@babel/plugin-transform-parameters": {
- "version": "7.16.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz",
- "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz",
+ "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-property-literals": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz",
- "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz",
+ "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-regenerator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz",
- "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz",
+ "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==",
"dev": true,
"requires": {
"regenerator-transform": "^0.14.2"
}
},
"@babel/plugin-transform-reserved-words": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz",
- "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz",
+ "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-shorthand-properties": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz",
- "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz",
+ "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-spread": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz",
- "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz",
+ "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.7",
"@babel/helper-skip-transparent-expression-wrappers": "^7.16.0"
}
},
"@babel/plugin-transform-sticky-regex": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz",
- "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz",
+ "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-template-literals": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz",
- "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz",
+ "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-typeof-symbol": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz",
- "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz",
+ "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-typescript": {
- "version": "7.16.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.1.tgz",
- "integrity": "sha512-NO4XoryBng06jjw/qWEU2LhcLJr1tWkhpMam/H4eas/CDKMX/b2/Ylb6EI256Y7+FVPCawwSM1rrJNOpDiz+Lg==",
+ "version": "7.16.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz",
+ "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==",
"dev": true,
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-typescript": "^7.16.0"
+ "@babel/helper-create-class-features-plugin": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7",
+ "@babel/plugin-syntax-typescript": "^7.16.7"
}
},
"@babel/plugin-transform-unicode-escapes": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz",
- "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz",
+ "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/plugin-transform-unicode-regex": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz",
- "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz",
+ "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==",
"dev": true,
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-create-regexp-features-plugin": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7"
}
},
"@babel/preset-env": {
- "version": "7.16.4",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz",
- "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.16.4",
- "@babel/helper-compilation-targets": "^7.16.3",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0",
- "@babel/plugin-proposal-async-generator-functions": "^7.16.4",
- "@babel/plugin-proposal-class-properties": "^7.16.0",
- "@babel/plugin-proposal-class-static-block": "^7.16.0",
- "@babel/plugin-proposal-dynamic-import": "^7.16.0",
- "@babel/plugin-proposal-export-namespace-from": "^7.16.0",
- "@babel/plugin-proposal-json-strings": "^7.16.0",
- "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0",
- "@babel/plugin-proposal-numeric-separator": "^7.16.0",
- "@babel/plugin-proposal-object-rest-spread": "^7.16.0",
- "@babel/plugin-proposal-optional-catch-binding": "^7.16.0",
- "@babel/plugin-proposal-optional-chaining": "^7.16.0",
- "@babel/plugin-proposal-private-methods": "^7.16.0",
- "@babel/plugin-proposal-private-property-in-object": "^7.16.0",
- "@babel/plugin-proposal-unicode-property-regex": "^7.16.0",
+ "version": "7.16.11",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz",
+ "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.16.8",
+ "@babel/helper-compilation-targets": "^7.16.7",
+ "@babel/helper-plugin-utils": "^7.16.7",
+ "@babel/helper-validator-option": "^7.16.7",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7",
+ "@babel/plugin-proposal-async-generator-functions": "^7.16.8",
+ "@babel/plugin-proposal-class-properties": "^7.16.7",
+ "@babel/plugin-proposal-class-static-block": "^7.16.7",
+ "@babel/plugin-proposal-dynamic-import": "^7.16.7",
+ "@babel/plugin-proposal-export-namespace-from": "^7.16.7",
+ "@babel/plugin-proposal-json-strings": "^7.16.7",
+ "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7",
+ "@babel/plugin-proposal-numeric-separator": "^7.16.7",
+ "@babel/plugin-proposal-object-rest-spread": "^7.16.7",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.16.7",
+ "@babel/plugin-proposal-optional-chaining": "^7.16.7",
+ "@babel/plugin-proposal-private-methods": "^7.16.11",
+ "@babel/plugin-proposal-private-property-in-object": "^7.16.7",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.16.7",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
"@babel/plugin-syntax-class-static-block": "^7.14.5",
@@ -1053,44 +1094,44 @@
"@babel/plugin-syntax-optional-chaining": "^7.8.3",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5",
"@babel/plugin-syntax-top-level-await": "^7.14.5",
- "@babel/plugin-transform-arrow-functions": "^7.16.0",
- "@babel/plugin-transform-async-to-generator": "^7.16.0",
- "@babel/plugin-transform-block-scoped-functions": "^7.16.0",
- "@babel/plugin-transform-block-scoping": "^7.16.0",
- "@babel/plugin-transform-classes": "^7.16.0",
- "@babel/plugin-transform-computed-properties": "^7.16.0",
- "@babel/plugin-transform-destructuring": "^7.16.0",
- "@babel/plugin-transform-dotall-regex": "^7.16.0",
- "@babel/plugin-transform-duplicate-keys": "^7.16.0",
- "@babel/plugin-transform-exponentiation-operator": "^7.16.0",
- "@babel/plugin-transform-for-of": "^7.16.0",
- "@babel/plugin-transform-function-name": "^7.16.0",
- "@babel/plugin-transform-literals": "^7.16.0",
- "@babel/plugin-transform-member-expression-literals": "^7.16.0",
- "@babel/plugin-transform-modules-amd": "^7.16.0",
- "@babel/plugin-transform-modules-commonjs": "^7.16.0",
- "@babel/plugin-transform-modules-systemjs": "^7.16.0",
- "@babel/plugin-transform-modules-umd": "^7.16.0",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0",
- "@babel/plugin-transform-new-target": "^7.16.0",
- "@babel/plugin-transform-object-super": "^7.16.0",
- "@babel/plugin-transform-parameters": "^7.16.3",
- "@babel/plugin-transform-property-literals": "^7.16.0",
- "@babel/plugin-transform-regenerator": "^7.16.0",
- "@babel/plugin-transform-reserved-words": "^7.16.0",
- "@babel/plugin-transform-shorthand-properties": "^7.16.0",
- "@babel/plugin-transform-spread": "^7.16.0",
- "@babel/plugin-transform-sticky-regex": "^7.16.0",
- "@babel/plugin-transform-template-literals": "^7.16.0",
- "@babel/plugin-transform-typeof-symbol": "^7.16.0",
- "@babel/plugin-transform-unicode-escapes": "^7.16.0",
- "@babel/plugin-transform-unicode-regex": "^7.16.0",
+ "@babel/plugin-transform-arrow-functions": "^7.16.7",
+ "@babel/plugin-transform-async-to-generator": "^7.16.8",
+ "@babel/plugin-transform-block-scoped-functions": "^7.16.7",
+ "@babel/plugin-transform-block-scoping": "^7.16.7",
+ "@babel/plugin-transform-classes": "^7.16.7",
+ "@babel/plugin-transform-computed-properties": "^7.16.7",
+ "@babel/plugin-transform-destructuring": "^7.16.7",
+ "@babel/plugin-transform-dotall-regex": "^7.16.7",
+ "@babel/plugin-transform-duplicate-keys": "^7.16.7",
+ "@babel/plugin-transform-exponentiation-operator": "^7.16.7",
+ "@babel/plugin-transform-for-of": "^7.16.7",
+ "@babel/plugin-transform-function-name": "^7.16.7",
+ "@babel/plugin-transform-literals": "^7.16.7",
+ "@babel/plugin-transform-member-expression-literals": "^7.16.7",
+ "@babel/plugin-transform-modules-amd": "^7.16.7",
+ "@babel/plugin-transform-modules-commonjs": "^7.16.8",
+ "@babel/plugin-transform-modules-systemjs": "^7.16.7",
+ "@babel/plugin-transform-modules-umd": "^7.16.7",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8",
+ "@babel/plugin-transform-new-target": "^7.16.7",
+ "@babel/plugin-transform-object-super": "^7.16.7",
+ "@babel/plugin-transform-parameters": "^7.16.7",
+ "@babel/plugin-transform-property-literals": "^7.16.7",
+ "@babel/plugin-transform-regenerator": "^7.16.7",
+ "@babel/plugin-transform-reserved-words": "^7.16.7",
+ "@babel/plugin-transform-shorthand-properties": "^7.16.7",
+ "@babel/plugin-transform-spread": "^7.16.7",
+ "@babel/plugin-transform-sticky-regex": "^7.16.7",
+ "@babel/plugin-transform-template-literals": "^7.16.7",
+ "@babel/plugin-transform-typeof-symbol": "^7.16.7",
+ "@babel/plugin-transform-unicode-escapes": "^7.16.7",
+ "@babel/plugin-transform-unicode-regex": "^7.16.7",
"@babel/preset-modules": "^0.1.5",
- "@babel/types": "^7.16.0",
+ "@babel/types": "^7.16.8",
"babel-plugin-polyfill-corejs2": "^0.3.0",
- "babel-plugin-polyfill-corejs3": "^0.4.0",
+ "babel-plugin-polyfill-corejs3": "^0.5.0",
"babel-plugin-polyfill-regenerator": "^0.3.0",
- "core-js-compat": "^3.19.1",
+ "core-js-compat": "^3.20.2",
"semver": "^6.3.0"
}
},
@@ -1108,61 +1149,126 @@
}
},
"@babel/preset-typescript": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.0.tgz",
- "integrity": "sha512-txegdrZYgO9DlPbv+9QOVpMnKbOtezsLHWsnsRF4AjbSIsVaujrq1qg8HK0mxQpWv0jnejt0yEoW1uWpvbrDTg==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz",
+ "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-transform-typescript": "^7.16.0"
+ "@babel/helper-plugin-utils": "^7.16.7",
+ "@babel/helper-validator-option": "^7.16.7",
+ "@babel/plugin-transform-typescript": "^7.16.7"
}
},
"@babel/runtime": {
- "version": "7.16.3",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz",
- "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz",
+ "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==",
"dev": true,
"requires": {
"regenerator-runtime": "^0.13.4"
}
},
"@babel/template": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz",
- "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz",
+ "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.16.0",
- "@babel/parser": "^7.16.0",
- "@babel/types": "^7.16.0"
+ "@babel/code-frame": "^7.16.7",
+ "@babel/parser": "^7.16.7",
+ "@babel/types": "^7.16.7"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
+ "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.16.7"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "dev": true
+ },
+ "@babel/highlight": {
+ "version": "7.16.10",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
+ "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ }
}
},
"@babel/traverse": {
- "version": "7.16.3",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz",
- "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.16.0",
- "@babel/generator": "^7.16.0",
- "@babel/helper-function-name": "^7.16.0",
- "@babel/helper-hoist-variables": "^7.16.0",
- "@babel/helper-split-export-declaration": "^7.16.0",
- "@babel/parser": "^7.16.3",
- "@babel/types": "^7.16.0",
+ "version": "7.16.10",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz",
+ "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.7",
+ "@babel/generator": "^7.16.8",
+ "@babel/helper-environment-visitor": "^7.16.7",
+ "@babel/helper-function-name": "^7.16.7",
+ "@babel/helper-hoist-variables": "^7.16.7",
+ "@babel/helper-split-export-declaration": "^7.16.7",
+ "@babel/parser": "^7.16.10",
+ "@babel/types": "^7.16.8",
"debug": "^4.1.0",
"globals": "^11.1.0"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
+ "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.16.7"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "dev": true
+ },
+ "@babel/highlight": {
+ "version": "7.16.10",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
+ "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ }
}
},
"@babel/types": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz",
- "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==",
+ "version": "7.16.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz",
+ "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.15.7",
+ "@babel/helper-validator-identifier": "^7.16.7",
"to-fast-properties": "^2.0.0"
+ },
+ "dependencies": {
+ "@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "dev": true
+ }
}
},
"@bcoe/v8-coverage": {
@@ -1194,14 +1300,14 @@
"integrity": "sha512-sJpx3F5xcVV/9jNYJQtvimo4Vfld/nD3ph+ZWtQzZ03Zo8rJC7QKQTRcIGS13Rcz80DwFNthCWMrd58vpY4ZAQ=="
},
"@eslint/eslintrc": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.4.tgz",
- "integrity": "sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz",
+ "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.0.0",
+ "espree": "^9.2.0",
"globals": "^13.9.0",
"ignore": "^4.0.6",
"import-fresh": "^3.2.1",
@@ -1210,12 +1316,6 @@
"strip-json-comments": "^3.1.1"
},
"dependencies": {
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
"globals": {
"version": "13.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
@@ -1231,15 +1331,6 @@
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
},
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
"strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
@@ -1639,9 +1730,9 @@
}
},
"@govtechsg/dnsprove": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@govtechsg/dnsprove/-/dnsprove-2.1.3.tgz",
- "integrity": "sha512-eW/4MimGjhdS8mS5wM6RCezV+F9RBDuo5WD8DoLLXCipkMWYeWraCAhpKLd+Zl9NC2ROLXNDJSqg8/TUXt5/sg==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@govtechsg/dnsprove/-/dnsprove-2.3.0.tgz",
+ "integrity": "sha512-d8nmtlk8xbM7tR/7sKJcz1cL5yRLDxLysbzO5JTohj2grRij4jKyHwcEyfVTX5up6zXv2ELFcsu0zyvRuVVXFA==",
"requires": {
"axios": "^0.21.1",
"debug": "^4.3.1",
@@ -1706,11 +1797,11 @@
"integrity": "sha512-DQYDuknPzpN/7CbWysR5feqtLjJWklhog1+AJbG1hVQ+1+9ggMdXltyWpbRcndB3W4taxGQ0bjhjmcx6bAIQFg=="
},
"@govtechsg/oa-verify": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@govtechsg/oa-verify/-/oa-verify-7.7.0.tgz",
- "integrity": "sha512-Ast+8gYBMkJQS6v/YuDgnc1ILjuSTJUjP7JAyMvP5UboH5OzeXl6nv0Hs8JS42It+YgEV8t1POWDH//6XhW6Qg==",
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/@govtechsg/oa-verify/-/oa-verify-7.8.0.tgz",
+ "integrity": "sha512-22UwdpExdsZTmXd8i9ZutftCJye/JY8tRqu3UAtWMXYY4IbFXCC9jalXRPuKRG8cxwfqR5eP8plWBAmJhv0teg==",
"requires": {
- "@govtechsg/dnsprove": "^2.1.3",
+ "@govtechsg/dnsprove": "^2.3.0",
"@govtechsg/document-store": "^2.2.3",
"@govtechsg/open-attestation": "^6.2.0",
"@govtechsg/token-registry": "^2.5.3",
@@ -1732,43 +1823,6 @@
"requires": {
"follow-redirects": "^1.14.0"
}
- },
- "did-resolver": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.1.0.tgz",
- "integrity": "sha512-uf3/4LfHoDn3Ek8bFegO72OemHMytBhAkud6CA1HlB5I0iVwrCpG4oh+DA6DXUuBdhrA0cY4cGz1D0VNDTlgnw=="
- },
- "ethr-did-resolver": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/ethr-did-resolver/-/ethr-did-resolver-4.3.4.tgz",
- "integrity": "sha512-xx9rjjBf8t2pSUyciDDXv99D66YIpKH29bufbEYyOds6IJSa5C7xeql4MSYz6zNtAAtvNoj9AYhg6FbBkeQmxg==",
- "requires": {
- "@ethersproject/abi": "^5.1.0",
- "@ethersproject/abstract-signer": "^5.1.0",
- "@ethersproject/address": "^5.1.0",
- "@ethersproject/basex": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/contracts": "^5.1.0",
- "@ethersproject/providers": "^5.1.0",
- "@ethersproject/transactions": "^5.1.0",
- "did-resolver": "^3.1.0",
- "ethr-did-registry": "^0.0.3",
- "querystring": "^0.2.1"
- }
- },
- "querystring": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz",
- "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg=="
- },
- "web-did-resolver": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/web-did-resolver/-/web-did-resolver-2.0.4.tgz",
- "integrity": "sha512-PORpoA4P0I3m0cLJX2IIDZ0gMKgC1PjS8DuDeg9/JCdIlFiXrZCyTG1hxvw4a4vhDKr0sZKSZL1pQDXTgqLm8w==",
- "requires": {
- "cross-fetch": "^3.1.2",
- "did-resolver": "^3.1.0"
- }
}
}
},
@@ -1821,18 +1875,18 @@
}
},
"@govtechsg/serverless-selective-functions": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@govtechsg/serverless-selective-functions/-/serverless-selective-functions-0.1.1.tgz",
- "integrity": "sha512-5pzMLm6mgHNHqdsvBV0q1DYNEzvFENCVCgdvT2NExmxmkVdorIk8bCjEH+qA/n03p6s9/NrZXJJzA2S0NkoiDw==",
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@govtechsg/serverless-selective-functions/-/serverless-selective-functions-0.1.2.tgz",
+ "integrity": "sha512-cSsyKiF0Ao9oCbu0uJ7xKzfHgNUW32890aI3BsLUfWDMC6E4vnLdvBW5zuttXYJ7bBYboVGxhRPZoAc573aV0Q==",
"dev": true,
"requires": {
"serverless": "^2.15.0"
}
},
"@govtechsg/token-registry": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/@govtechsg/token-registry/-/token-registry-2.5.3.tgz",
- "integrity": "sha512-0VIeANA2XpaMNBLBAImwXf3SMV9wQcQeU4HxRgPzWaG4X/MpS2Msxv6YyTwk++p+j57s3PNoUQC5JiIAaY7xZw=="
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@govtechsg/token-registry/-/token-registry-2.6.1.tgz",
+ "integrity": "sha512-QnAIlYeGD4zHtYPiZ46SIe6hFc3HyMKvyBJIdlsFxHscMR4f8AENIyUS2AKhqJibCcN2beNJy/bPWlCAtHoT7w=="
},
"@hapi/accept": {
"version": "5.0.2",
@@ -2159,12 +2213,12 @@
}
},
"@humanwhocodes/config-array": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz",
- "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==",
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz",
+ "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==",
"dev": true,
"requires": {
- "@humanwhocodes/object-schema": "^1.2.0",
+ "@humanwhocodes/object-schema": "^1.2.1",
"debug": "^4.1.1",
"minimatch": "^3.0.4"
}
@@ -2204,6 +2258,16 @@
"path-exists": "^4.0.0"
}
},
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
@@ -2243,15 +2307,15 @@
"dev": true
},
"@jest/console": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.2.tgz",
- "integrity": "sha512-xknHThRsPB/To1FUbi6pCe43y58qFC03zfb6R7fDb/FfC7k2R3i1l+izRBJf8DI46KhYGRaF14Eo9A3qbBoixg==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.6.tgz",
+ "integrity": "sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA==",
"dev": true,
"requires": {
"@jest/types": "^27.4.2",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^27.4.2",
+ "jest-message-util": "^27.4.6",
"jest-util": "^27.4.2",
"slash": "^3.0.0"
},
@@ -2308,15 +2372,15 @@
}
},
"@jest/core": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.2.tgz",
- "integrity": "sha512-0mPM61tDbu8yc9CMKH9bvV+g+17VUpdWQtU1x6P1gk4AKj8iywWi8zBmEIl7pTGjUtYA92CNc/LlBfKCioBOow==",
+ "version": "27.4.7",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.7.tgz",
+ "integrity": "sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg==",
"dev": true,
"requires": {
- "@jest/console": "^27.4.2",
- "@jest/reporters": "^27.4.2",
- "@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.2",
+ "@jest/console": "^27.4.6",
+ "@jest/reporters": "^27.4.6",
+ "@jest/test-result": "^27.4.6",
+ "@jest/transform": "^27.4.6",
"@jest/types": "^27.4.2",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
@@ -2325,39 +2389,24 @@
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"jest-changed-files": "^27.4.2",
- "jest-config": "^27.4.2",
- "jest-haste-map": "^27.4.2",
- "jest-message-util": "^27.4.2",
+ "jest-config": "^27.4.7",
+ "jest-haste-map": "^27.4.6",
+ "jest-message-util": "^27.4.6",
"jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.2",
- "jest-resolve-dependencies": "^27.4.2",
- "jest-runner": "^27.4.2",
- "jest-runtime": "^27.4.2",
- "jest-snapshot": "^27.4.2",
+ "jest-resolve": "^27.4.6",
+ "jest-resolve-dependencies": "^27.4.6",
+ "jest-runner": "^27.4.6",
+ "jest-runtime": "^27.4.6",
+ "jest-snapshot": "^27.4.6",
"jest-util": "^27.4.2",
- "jest-validate": "^27.4.2",
- "jest-watcher": "^27.4.2",
+ "jest-validate": "^27.4.6",
+ "jest-watcher": "^27.4.6",
"micromatch": "^4.0.4",
"rimraf": "^3.0.0",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
},
"dependencies": {
- "ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "dev": true,
- "requires": {
- "type-fest": "^0.21.3"
- }
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -2415,62 +2464,56 @@
"requires": {
"has-flag": "^4.0.0"
}
- },
- "type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "dev": true
}
}
},
"@jest/environment": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.2.tgz",
- "integrity": "sha512-uSljKxh/rGlHlmhyeG4ZoVK9hOec+EPBkwTHkHKQ2EqDu5K+MaG9uJZ8o1CbRsSdZqSuhXvJCYhBWsORPPg6qw==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.6.tgz",
+ "integrity": "sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg==",
"dev": true,
"requires": {
- "@jest/fake-timers": "^27.4.2",
+ "@jest/fake-timers": "^27.4.6",
"@jest/types": "^27.4.2",
"@types/node": "*",
- "jest-mock": "^27.4.2"
+ "jest-mock": "^27.4.6"
}
},
"@jest/fake-timers": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.2.tgz",
- "integrity": "sha512-f/Xpzn5YQk5adtqBgvw1V6bF8Nx3hY0OIRRpCvWcfPl0EAjdqWPdhH3t/3XpiWZqtjIEHDyMKP9ajpva1l4Zmg==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.6.tgz",
+ "integrity": "sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A==",
"dev": true,
"requires": {
"@jest/types": "^27.4.2",
"@sinonjs/fake-timers": "^8.0.1",
"@types/node": "*",
- "jest-message-util": "^27.4.2",
- "jest-mock": "^27.4.2",
+ "jest-message-util": "^27.4.6",
+ "jest-mock": "^27.4.6",
"jest-util": "^27.4.2"
}
},
"@jest/globals": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.2.tgz",
- "integrity": "sha512-KkfaHEttlGpXYAQTZHgrESiEPx2q/DKAFLGLFda1uGVrqc17snd3YVPhOxlXOHIzVPs+lQ/SDB2EIvxyGzb3Ew==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.6.tgz",
+ "integrity": "sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw==",
"dev": true,
"requires": {
- "@jest/environment": "^27.4.2",
+ "@jest/environment": "^27.4.6",
"@jest/types": "^27.4.2",
- "expect": "^27.4.2"
+ "expect": "^27.4.6"
}
},
"@jest/reporters": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.2.tgz",
- "integrity": "sha512-sp4aqmdBJtjKetEakzDPcZggPcVIF6w9QLkYBbaWDV6e/SIsHnF1S4KtIH91eEc2fp7ep6V/e1xvdfEoho1d2w==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.6.tgz",
+ "integrity": "sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ==",
"dev": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^27.4.2",
- "@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.2",
+ "@jest/console": "^27.4.6",
+ "@jest/test-result": "^27.4.6",
+ "@jest/transform": "^27.4.6",
"@jest/types": "^27.4.2",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -2479,14 +2522,14 @@
"glob": "^7.1.2",
"graceful-fs": "^4.2.4",
"istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^4.0.3",
+ "istanbul-lib-instrument": "^5.1.0",
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "jest-haste-map": "^27.4.2",
- "jest-resolve": "^27.4.2",
+ "istanbul-reports": "^3.1.3",
+ "jest-haste-map": "^27.4.6",
+ "jest-resolve": "^27.4.6",
"jest-util": "^27.4.2",
- "jest-worker": "^27.4.2",
+ "jest-worker": "^27.4.6",
"slash": "^3.0.0",
"source-map": "^0.6.0",
"string-length": "^4.0.1",
@@ -2534,6 +2577,12 @@
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -2554,50 +2603,58 @@
"callsites": "^3.0.0",
"graceful-fs": "^4.2.4",
"source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
}
},
"@jest/test-result": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.2.tgz",
- "integrity": "sha512-kr+bCrra9jfTgxHXHa2UwoQjxvQk3Am6QbpAiJ5x/50LW8llOYrxILkqY0lZRW/hu8FXesnudbql263+EW9iNA==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.6.tgz",
+ "integrity": "sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ==",
"dev": true,
"requires": {
- "@jest/console": "^27.4.2",
+ "@jest/console": "^27.4.6",
"@jest/types": "^27.4.2",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
}
},
"@jest/test-sequencer": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.2.tgz",
- "integrity": "sha512-HmHp5mlh9f9GyNej5yCS1JZIFfUGnP9+jEOH5zoq5EmsuZeYD+dGULqyvGDPtuzzbyAFJ6R4+z4SS0VvnFwwGQ==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz",
+ "integrity": "sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw==",
"dev": true,
"requires": {
- "@jest/test-result": "^27.4.2",
+ "@jest/test-result": "^27.4.6",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.2",
- "jest-runtime": "^27.4.2"
+ "jest-haste-map": "^27.4.6",
+ "jest-runtime": "^27.4.6"
}
},
"@jest/transform": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.2.tgz",
- "integrity": "sha512-RTKcPZllfcmLfnlxBya7aypofhdz05+E6QITe55Ex0rxyerkgjmmpMlvVn11V0cP719Ps6WcDYCnDzxnnJUwKg==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.6.tgz",
+ "integrity": "sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw==",
"dev": true,
"requires": {
"@babel/core": "^7.1.0",
"@jest/types": "^27.4.2",
- "babel-plugin-istanbul": "^6.0.0",
+ "babel-plugin-istanbul": "^6.1.1",
"chalk": "^4.0.0",
"convert-source-map": "^1.4.0",
"fast-json-stable-stringify": "^2.0.0",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.2",
+ "jest-haste-map": "^27.4.6",
"jest-regex-util": "^27.4.0",
"jest-util": "^27.4.2",
"micromatch": "^4.0.4",
- "pirates": "^4.0.1",
+ "pirates": "^4.0.4",
"slash": "^3.0.0",
"source-map": "^0.6.1",
"write-file-atomic": "^3.0.0"
@@ -2643,6 +2700,12 @@
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -2753,66 +2816,73 @@
"integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw=="
},
"@middy/core": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/@middy/core/-/core-2.5.3.tgz",
- "integrity": "sha512-hCXlRglDu48sl03IjDGjcJwfwElIPAf0fwBu08kqE80qpnouZ1hGH1lZbkbJjAhz6DkSR+79YArUQKUYaM2k1g=="
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@middy/core/-/core-2.5.6.tgz",
+ "integrity": "sha512-uOKeXqqKK8NjOFXJCtaQl3BF9zTd6R2N/1nwvAJ3MGfXSBBiBoRxXE+NhwHd2DFzf0ruzk3lHel2XMOQu7PXIQ=="
},
"@middy/http-error-handler": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/@middy/http-error-handler/-/http-error-handler-2.5.3.tgz",
- "integrity": "sha512-wOCnTdX0wtGtu3n3+obEF2YaYTMOvu5NDz/BY4f0H35tQEmLnbCq4D2418IdOzV1CvdYvf1v3tPSe2BCzpghCA==",
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@middy/http-error-handler/-/http-error-handler-2.5.6.tgz",
+ "integrity": "sha512-e8B2nwZnkaL38/KFWFLZurqRUmp08sYrJYJQ7zDr47Yp3tidsyIbkTrRkoBjsDSndhw1XPdQWAFV5hVv7KlAxA==",
"requires": {
- "@middy/util": "^2.5.3"
+ "@middy/util": "^2.5.6"
}
},
"@middy/http-json-body-parser": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/@middy/http-json-body-parser/-/http-json-body-parser-2.5.3.tgz",
- "integrity": "sha512-8vUW40srhgwkgup9HTGv0lUOUUbTcK8XPrS0zjL3jC0Ew3AgU1FbpfyipTxgcaWr+cZlgmq1VvXY1G60R+7dyQ==",
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@middy/http-json-body-parser/-/http-json-body-parser-2.5.6.tgz",
+ "integrity": "sha512-CeHqXBi1p78RIAh0bNgWQZJrSRBeARpvxNerYNh4Zxudg5VCk/yAmWT9Gane3SL4EOcn1Vzl5SZyH8pP1WFvFg==",
"requires": {
- "@middy/util": "^2.5.3"
+ "@middy/util": "^2.5.6"
}
},
"@middy/ssm": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/@middy/ssm/-/ssm-2.5.3.tgz",
- "integrity": "sha512-PFKKkE5FBP3a++42geAf7YJvq1/AjywxiyEOOO6aWxjQrDFvdsJ9Xh52fqSjCu2RfPsmExB6fIWsZg1JpjOqig==",
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/@middy/ssm/-/ssm-2.5.7.tgz",
+ "integrity": "sha512-mpUxNJt6KNCD2uDi15LaU4qy4w08e/3+GBq3VUd/HPHJOcafUpex5Oa+wKqs52WlZ2k0wlM0eA4Z2cjs6eDe2g==",
"requires": {
- "@middy/util": "^2.5.3"
+ "@middy/util": "^2.5.7"
+ },
+ "dependencies": {
+ "@middy/util": {
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/@middy/util/-/util-2.5.7.tgz",
+ "integrity": "sha512-4CwEVfUyvF0n1qtEzrcrV56L7iQYyt6zChYQ9N5/uvQgAhdExLzOinW6ki1ZjTMgaMypqdHNUyDAEiAuNJLRUw=="
+ }
}
},
"@middy/util": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/@middy/util/-/util-2.5.3.tgz",
- "integrity": "sha512-tKB4Nw1tFYyt7A6OdY5ohuh/73+/uQQVv6dw+31uqdHZ4UNzqeIN+scT3QAC8Rqky6M8PrREJ+MrkqREykE/Tg=="
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@middy/util/-/util-2.5.6.tgz",
+ "integrity": "sha512-DMsDKs8pUG/heOmDm3n9mpAZrDqXRrVY+Sc8du5eLr+9luqOOSDZIfgyUooW6yDvX+HQrGiElY+Wn46vrqARmA=="
},
"@nodelib/fs.scandir": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
- "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"requires": {
- "@nodelib/fs.stat": "2.0.3",
+ "@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
}
},
"@nodelib/fs.stat": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
- "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA=="
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
},
"@nodelib/fs.walk": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
- "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"requires": {
- "@nodelib/fs.scandir": "2.1.3",
+ "@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
}
},
"@notarise-gov-sg/gpay-covid-cards": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@notarise-gov-sg/gpay-covid-cards/-/gpay-covid-cards-1.0.4.tgz",
- "integrity": "sha512-eB8BMD+5uq+OfFG+1K3R4UtgXlCrl9QqHBNEZOm8hDDD6TKWAgm0bzNdTsKyjoM6f8ruTZMPUuG39duc+3ZEag==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@notarise-gov-sg/gpay-covid-cards/-/gpay-covid-cards-1.0.5.tgz",
+ "integrity": "sha512-Y4ya5I0ZJeZCXJDLp+geI/nkvJ30gc6YOoarQvDLp08llofPOXBkHtGxPDJg2DX/PBzjqgJZh/A0SKXoyf2t6g==",
"requires": {
"debug": "^4.3.3",
"jsonwebtoken": "^8.5.1"
@@ -2945,9 +3015,9 @@
"integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
},
"@serverless/cli": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/@serverless/cli/-/cli-1.5.3.tgz",
- "integrity": "sha512-ZJ0Y7CsYoE/i45XkIMl/XBZO4KIlt0XH1qwxxNE2/84bZlih5cgRV6MZ+rKt7GlrD0iDAgQGyGv5dpyt+SGhKw==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@serverless/cli/-/cli-1.6.0.tgz",
+ "integrity": "sha512-1Muw/KhS4sZ6+ZrXBdmVY9zAwZh03lF7v1DKtaZ0cmxjqQBwPLoO40rOGXlxR97pyufe2NS6rD/p+ri8NGqeXg==",
"requires": {
"@serverless/core": "^1.1.2",
"@serverless/template": "^1.1.3",
@@ -2975,32 +3045,11 @@
"write-file-atomic": "^2.4.3"
}
},
- "ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "requires": {
- "type-fest": "^0.21.3"
- }
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
- },
"dotenv": {
"version": "8.6.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
"integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g=="
},
- "figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
"strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -3009,11 +3058,6 @@
"ansi-regex": "^5.0.1"
}
},
- "type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="
- },
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
@@ -3040,264 +3084,6 @@
"shortid": "^2.2.14"
}
},
- "@serverless/components": {
- "version": "3.18.1",
- "resolved": "https://registry.npmjs.org/@serverless/components/-/components-3.18.1.tgz",
- "integrity": "sha512-36XSYHjPkSEiSwWkl/xwWgYXa32Fk1CAbHvtWGheCtKV4+I3Yxzhe7FbgR84O0FeGQ/qM3QI8i5vtPUxeDeB9g==",
- "requires": {
- "@serverless/platform-client": "^4.2.2",
- "@serverless/platform-client-china": "^2.2.0",
- "@serverless/utils": "^4.0.0",
- "adm-zip": "^0.5.4",
- "ansi-escapes": "^4.3.1",
- "chalk": "^4.1.0",
- "child-process-ext": "^2.1.1",
- "chokidar": "^3.5.1",
- "ci-info": "^3.2.0",
- "dayjs": "^1.10.4",
- "dotenv": "^8.2.0",
- "fastest-levenshtein": "^1.0.12",
- "figures": "^3.2.0",
- "fs-extra": "^9.1.0",
- "got": "^11.8.2",
- "graphlib": "^2.1.8",
- "https-proxy-agent": "^5.0.0",
- "inquirer-autocomplete-prompt": "^1.3.0",
- "js-yaml": "^3.14.1",
- "memoizee": "^0.4.14",
- "minimist": "^1.2.5",
- "open": "^7.3.1",
- "prettyoutput": "^1.2.0",
- "ramda": "^0.27.1",
- "semver": "^7.3.4",
- "strip-ansi": "^6.0.0",
- "tencent-serverless-http": "^1.3.1",
- "traverse": "^0.6.6",
- "uuid": "^8.3.2"
- },
- "dependencies": {
- "@serverless/utils": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@serverless/utils/-/utils-4.1.0.tgz",
- "integrity": "sha512-cl5uPaGg72z0sCUpF0zsOhwYYUV72Gxc1FwFfxltO8hSvMeFDvwD7JrNE4kHcIcKRjwPGbSH0fdVPUpErZ8Mog==",
- "requires": {
- "chalk": "^4.1.0",
- "ci-info": "^3.1.1",
- "inquirer": "^7.3.3",
- "js-yaml": "^4.1.0",
- "jwt-decode": "^3.1.2",
- "lodash": "^4.17.21",
- "ncjsm": "^4.1.0",
- "type": "^2.5.0",
- "uuid": "^8.3.2",
- "write-file-atomic": "^3.0.3"
- },
- "dependencies": {
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "requires": {
- "argparse": "^2.0.1"
- }
- }
- }
- },
- "ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "requires": {
- "type-fest": "^0.21.3"
- }
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "requires": {
- "restore-cursor": "^3.1.0"
- }
- },
- "cli-width": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
- "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="
- },
- "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==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "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=="
- },
- "dotenv": {
- "version": "8.6.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
- "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g=="
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "inquirer": {
- "version": "7.3.3",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
- "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
- "requires": {
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.1.0",
- "cli-cursor": "^3.1.0",
- "cli-width": "^3.0.0",
- "external-editor": "^3.0.3",
- "figures": "^3.0.0",
- "lodash": "^4.17.19",
- "mute-stream": "0.0.8",
- "run-async": "^2.4.0",
- "rxjs": "^6.6.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0",
- "through": "^2.3.6"
- }
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
- },
- "jwt-decode": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz",
- "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A=="
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
- },
- "mute-stream": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
- },
- "onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "requires": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- }
- },
- "semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "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==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- }
- }
- },
"@serverless/core": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@serverless/core/-/core-1.1.2.tgz",
@@ -3320,24 +3106,28 @@
"universalify": "^0.1.0"
}
},
- "ramda": {
- "version": "0.26.1",
- "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz",
- "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ=="
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
}
}
},
"@serverless/dashboard-plugin": {
- "version": "5.5.1",
- "resolved": "https://registry.npmjs.org/@serverless/dashboard-plugin/-/dashboard-plugin-5.5.1.tgz",
- "integrity": "sha512-gXn17AOyY3fxSq2nIFNnU4tZorplh2yVb0zI9A+rTeHlQ3HgIJa7xs/rR2hLEcW4vT26zX8dqwdJOAml/9kZyw==",
+ "version": "5.5.4",
+ "resolved": "https://registry.npmjs.org/@serverless/dashboard-plugin/-/dashboard-plugin-5.5.4.tgz",
+ "integrity": "sha512-qqZnT/RXhBcWXwYnpF+GMeNvSUi6mnyIqsAHj8+f7jJ7N9qa5Qrb14+dUh78sdgRBG5Peub3m3Mlx1n5V9yHDw==",
"requires": {
"@serverless/event-mocks": "^1.1.1",
"@serverless/platform-client": "^4.3.0",
- "@serverless/utils": "^5.20.0",
+ "@serverless/utils": "^5.20.3",
"chalk": "^4.1.2",
"child-process-ext": "^2.1.1",
- "chokidar": "^3.5.2",
+ "chokidar": "^3.5.3",
"cli-color": "^2.0.1",
"flat": "^5.0.2",
"fs-extra": "^9.1.0",
@@ -3347,10 +3137,10 @@
"memoizee": "^0.4.15",
"ncjsm": "^4.2.0",
"node-dir": "^0.1.17",
- "node-fetch": "^2.6.6",
+ "node-fetch": "^2.6.7",
"open": "^7.4.2",
"semver": "^7.3.5",
- "simple-git": "^2.47.0",
+ "simple-git": "^2.48.0",
"uuid": "^8.3.2",
"yamljs": "^0.3.0"
},
@@ -3363,11 +3153,6 @@
"color-convert": "^2.0.1"
}
},
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
- },
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -3377,6 +3162,21 @@
"supports-color": "^7.1.0"
}
},
+ "chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ }
+ },
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -3395,26 +3195,10 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
},
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "requires": {
- "yallist": "^4.0.0"
- }
- },
"node-fetch": {
- "version": "2.6.6",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz",
- "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==",
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
"requires": {
"whatwg-url": "^5.0.0"
}
@@ -3434,30 +3218,6 @@
"requires": {
"has-flag": "^4.0.0"
}
- },
- "tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
- },
- "webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
- },
- "whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
- "requires": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
}
}
},
@@ -3500,42 +3260,26 @@
"follow-redirects": "^1.14.0"
}
},
- "fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"requires": {
- "is-glob": "^4.0.1"
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
}
},
- "querystring": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz",
- "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg=="
- },
"ws": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz",
- "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w=="
+ "version": "7.5.6",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz",
+ "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA=="
}
}
},
"@serverless/platform-client-china": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/@serverless/platform-client-china/-/platform-client-china-2.3.2.tgz",
- "integrity": "sha512-ZeB64IKuvFnuwwFHAJHEl0ZsJ6QPgGPUjfa8KEzIIn2kZ4lXpESJ+YKvo5PFn4jS+eZajbGrQZ4wCWdEFcuS3w==",
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/@serverless/platform-client-china/-/platform-client-china-2.3.4.tgz",
+ "integrity": "sha512-JRrI3gnUZ0e6on8hHtVr4CwnhrU0jXd3iVfJknEE9tLS//syV77h7PhalZ79SemrboykRoSqhdu9qHf/wiFJ3A==",
"requires": {
"@serverless/utils-china": "^1.1.4",
"adm-zip": "^0.5.1",
@@ -3566,6 +3310,15 @@
"version": "8.6.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
"integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g=="
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
}
}
},
@@ -3579,25 +3332,18 @@
"graphlib": "^2.1.8",
"ramda": "^0.26.1",
"traverse": "^0.6.6"
- },
- "dependencies": {
- "ramda": {
- "version": "0.26.1",
- "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz",
- "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ=="
- }
}
},
"@serverless/utils": {
- "version": "5.20.1",
- "resolved": "https://registry.npmjs.org/@serverless/utils/-/utils-5.20.1.tgz",
- "integrity": "sha512-X2CD685Q4NHuX4Si3SVZU4iaMDgD4+d78sd+nTyxV+lwFHG9FFUSJftwclYzoqZshw6QoYd/mMnUotWnlsiLWA==",
+ "version": "5.20.3",
+ "resolved": "https://registry.npmjs.org/@serverless/utils/-/utils-5.20.3.tgz",
+ "integrity": "sha512-MG3DQJdto+LaeVY9gh/z0xloAfT0h1Y3Pa4/yYcKe8Dy5HYtSujuav0MvTOH18+s2outjKKJDxTh6tZuyNqFDQ==",
"requires": {
"archive-type": "^4.0.0",
"chalk": "^4.1.2",
- "ci-info": "^3.2.0",
- "cli-progress-footer": "^2.1.1",
- "content-disposition": "^0.5.3",
+ "ci-info": "^3.3.0",
+ "cli-progress-footer": "^2.3.0",
+ "content-disposition": "^0.5.4",
"d": "^1.0.1",
"decompress": "^4.2.1",
"event-emitter": "^0.3.5",
@@ -3606,13 +3352,13 @@
"file-type": "^16.5.3",
"filenamify": "^4.3.0",
"get-stream": "^6.0.1",
- "got": "^11.8.2",
+ "got": "^11.8.3",
"inquirer": "^7.3.3",
"js-yaml": "^4.1.0",
"jwt-decode": "^3.1.2",
"lodash": "^4.17.21",
"log": "^6.3.1",
- "log-node": "^8.0.2",
+ "log-node": "^8.0.3",
"make-dir": "^3.1.0",
"memoizee": "^0.4.15",
"ncjsm": "^4.2.0",
@@ -3624,19 +3370,6 @@
"write-file-atomic": "^3.0.3"
},
"dependencies": {
- "ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "requires": {
- "type-fest": "^0.21.3"
- }
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
- },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -3645,11 +3378,6 @@
"color-convert": "^2.0.1"
}
},
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
- },
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -3669,19 +3397,6 @@
}
}
},
- "cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "requires": {
- "restore-cursor": "^3.1.0"
- }
- },
- "cli-width": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
- "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="
- },
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -3695,125 +3410,16 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
- "file-type": {
- "version": "16.5.3",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.3.tgz",
- "integrity": "sha512-uVsl7iFhHSOY4bEONLlTK47iAHtNsFHWP5YE4xJfZ4rnX7S1Q3wce09XgqSC7E/xh8Ncv/be1lNoyprlUH/x6A==",
- "requires": {
- "readable-web-to-node-stream": "^3.0.0",
- "strtok3": "^6.2.4",
- "token-types": "^4.1.1"
- }
- },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
},
- "inquirer": {
- "version": "7.3.3",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
- "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
- "requires": {
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.1.0",
- "cli-cursor": "^3.1.0",
- "cli-width": "^3.0.0",
- "external-editor": "^3.0.3",
- "figures": "^3.0.0",
- "lodash": "^4.17.19",
- "mute-stream": "0.0.8",
- "run-async": "^2.4.0",
- "rxjs": "^6.6.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0",
- "through": "^2.3.6"
- }
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "requires": {
- "argparse": "^2.0.1"
- }
- },
"jwt-decode": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz",
"integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A=="
},
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
- },
- "mute-stream": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
- },
- "onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "requires": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- }
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
"supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
@@ -3821,18 +3427,13 @@
"requires": {
"has-flag": "^4.0.0"
}
- },
- "type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="
}
}
},
"@serverless/utils-china": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/@serverless/utils-china/-/utils-china-1.1.4.tgz",
- "integrity": "sha512-8s73M1k+mST7Z/Rp8wgmZh50tjpwX+fqsbYYRuFGgyuWTvgqAlUflDOWAeQuDx4pEndWEqjbG09ZrZNqlHuZqQ==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@serverless/utils-china/-/utils-china-1.1.5.tgz",
+ "integrity": "sha512-pykhxsI+TlEbZzDUq5dkJPVWceNpaLU2ILEMsjUwyqGPsSE/g8Lrf7AhXseKtNK/7le3lduNnPacmY4Jb+GT+g==",
"requires": {
"@tencent-sdk/capi": "^1.1.8",
"dijkstrajs": "^1.0.1",
@@ -3930,14 +3531,14 @@
"optional": true
},
"@types/aws-lambda": {
- "version": "8.10.85",
- "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.85.tgz",
- "integrity": "sha512-cMRXVxb+NMb6EekKel1fPBfz2ZqE5cGhIS14G7FVUM4Bqilx0lHKnZbsDLWLSeckDpkvlp5six2F7UWyEEJSoQ=="
+ "version": "8.10.91",
+ "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.91.tgz",
+ "integrity": "sha512-vUmJGUqhwZTcrSLE3i9nNJp1gYa83KNv7AX/K30DJKWE31TWw1swdJopOyccttdBqhG3e8SIAqw3q+5ZYxfz0g=="
},
"@types/babel__core": {
- "version": "7.1.16",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz",
- "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==",
+ "version": "7.1.18",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz",
+ "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==",
"dev": true,
"requires": {
"@babel/parser": "^7.1.0",
@@ -3948,9 +3549,9 @@
}
},
"@types/babel__generator": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz",
- "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==",
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz",
+ "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==",
"dev": true,
"requires": {
"@babel/types": "^7.0.0"
@@ -4029,9 +3630,9 @@
}
},
"@types/eslint": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz",
- "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==",
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz",
+ "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==",
"dev": true,
"requires": {
"@types/estree": "*",
@@ -4039,9 +3640,9 @@
}
},
"@types/eslint-scope": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz",
- "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==",
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz",
+ "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==",
"dev": true,
"requires": {
"@types/eslint": "*",
@@ -4075,15 +3676,15 @@
"integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ=="
},
"@types/http-errors": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.1.tgz",
- "integrity": "sha512-e+2rjEwK6KDaNOm5Aa9wNGgyS9oSZU/4pfSMMPYNOfjvFI0WVXm29+ITRFr6aKDvvKo7uU1jV68MW4ScsfDi7Q==",
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.2.tgz",
+ "integrity": "sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w==",
"dev": true
},
"@types/istanbul-lib-coverage": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
- "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+ "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
"dev": true
},
"@types/istanbul-lib-report": {
@@ -4105,26 +3706,15 @@
}
},
"@types/jest": {
- "version": "27.0.3",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.3.tgz",
- "integrity": "sha512-cmmwv9t7gBYt7hNKH5Spu7Kuu/DotGa+Ff+JGRKZ4db5eh8PnKS4LuebJ3YLUoyOyIHraTGyULn23YtEAm0VSg==",
+ "version": "27.4.0",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.0.tgz",
+ "integrity": "sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ==",
"dev": true,
"requires": {
"jest-diff": "^27.0.0",
"pretty-format": "^27.0.0"
}
},
- "@types/jsdom": {
- "version": "16.2.13",
- "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.13.tgz",
- "integrity": "sha512-8JQCjdeAidptSsOcRWk2iTm9wCcwn9l+kRG6k5bzUacrnm1ezV4forq0kWjUih/tumAeoG+OspOvQEbbRucBTw==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "@types/parse5": "*",
- "@types/tough-cookie": "*"
- }
- },
"@types/json-schema": {
"version": "7.0.9",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
@@ -4145,9 +3735,9 @@
}
},
"@types/lodash": {
- "version": "4.14.177",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.177.tgz",
- "integrity": "sha512-0fDwydE2clKe9MNfvXHBHF9WEahRuj+msTuQqOmAApNORFvhMYZKNGGJdCzuhheVjMps/ti0Ak/iJPACMaevvw=="
+ "version": "4.14.178",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz",
+ "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw=="
},
"@types/long": {
"version": "4.0.1",
@@ -4155,9 +3745,9 @@
"integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
},
"@types/minimatch": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
- "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
"dev": true
},
"@types/ms": {
@@ -4177,48 +3767,30 @@
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true
},
- "@types/parse5": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
- "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==",
- "dev": true
- },
"@types/prettier": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz",
- "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==",
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.3.tgz",
+ "integrity": "sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==",
"dev": true
},
"@types/qrcode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.4.1.tgz",
- "integrity": "sha512-vxMyr7JM7tYPxu8vUE83NiosWX5DZieCyYeJRoOIg0pAkyofCBzknJ2ycUZkPGDFis2RS8GN/BeJLnRnAPxeCA==",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.4.2.tgz",
+ "integrity": "sha512-7uNT9L4WQTNJejHTSTdaJhfBSCN73xtXaHFyBJ8TSwiLhe4PRuTue7Iph0s2nG9R/ifUaSnGhLUOZavlBEqDWQ==",
"dev": true,
"requires": {
"@types/node": "*"
}
},
"@types/request": {
- "version": "2.48.7",
- "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.7.tgz",
- "integrity": "sha512-GWP9AZW7foLd4YQxyFZDBepl0lPsWLMEXDZUjQ/c1gqVPDPECrRZyEzuhJdnPWioFCq3Tv0qoGpMD6U+ygd4ZA==",
+ "version": "2.48.8",
+ "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.8.tgz",
+ "integrity": "sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==",
"requires": {
"@types/caseless": "*",
"@types/node": "*",
"@types/tough-cookie": "*",
"form-data": "^2.5.0"
- },
- "dependencies": {
- "form-data": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
- "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- }
}
},
"@types/request-promise-native": {
@@ -4279,9 +3851,9 @@
"integrity": "sha512-wDXw9LEEUHyV+7UWy7U315nrJGJ7p1BzaCxDpEoLr789Dk1WDVMMlf3iBfbG2F8NdWnYyFbtTxUn2ZNbm1Q4LQ=="
},
"@types/uuid": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.3.tgz",
- "integrity": "sha512-0LbEEx1zxrYB3pgpd1M5lEhLcXjKJnYghvhTRgaBeUivLHMDM1TzF3IJ6hXU2+8uA4Xz+5BA63mtZo5DjVT8iA==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz",
+ "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==",
"dev": true
},
"@types/yargs": {
@@ -4300,13 +3872,14 @@
"dev": true
},
"@typescript-eslint/eslint-plugin": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.5.0.tgz",
- "integrity": "sha512-4bV6fulqbuaO9UMXU0Ia0o6z6if+kmMRW8rMRyfqXj/eGrZZRGedS4n0adeGNnjr8LKAM495hrQ7Tea52UWmQA==",
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.0.tgz",
+ "integrity": "sha512-XXVKnMsq2fuu9K2KsIxPUGqb6xAImz8MEChClbXmE3VbveFtBUU5bzM6IPVWqzyADIgdkS2Ws/6Xo7W2TeZWjQ==",
"dev": true,
"requires": {
- "@typescript-eslint/experimental-utils": "5.5.0",
- "@typescript-eslint/scope-manager": "5.5.0",
+ "@typescript-eslint/scope-manager": "5.10.0",
+ "@typescript-eslint/type-utils": "5.10.0",
+ "@typescript-eslint/utils": "5.10.0",
"debug": "^4.3.2",
"functional-red-black-tree": "^1.0.1",
"ignore": "^5.1.8",
@@ -4315,15 +3888,6 @@
"tsutils": "^3.21.0"
},
"dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
@@ -4332,81 +3896,72 @@
"requires": {
"lru-cache": "^6.0.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
"@typescript-eslint/experimental-utils": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.5.0.tgz",
- "integrity": "sha512-kjWeeVU+4lQ1SLYErRKV5yDXbWDPkpbzTUUlfAUifPYvpX0qZlrcCZ96/6oWxt3QxtK5WVhXz+KsnwW9cIW+3A==",
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.10.0.tgz",
+ "integrity": "sha512-GeQAPqQMI5DVMGOUwGbSR+NdsirryyKOgUFRTWInhlsKUArns/MVnXmPpzxfrzB1nU36cT5WJAwmfCsjoaVBWg==",
"dev": true,
"requires": {
- "@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.5.0",
- "@typescript-eslint/types": "5.5.0",
- "@typescript-eslint/typescript-estree": "5.5.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^3.0.0"
+ "@typescript-eslint/utils": "5.10.0"
}
},
"@typescript-eslint/parser": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.5.0.tgz",
- "integrity": "sha512-JsXBU+kgQOAgzUn2jPrLA+Rd0Y1dswOlX3hp8MuRO1hQDs6xgHtbCXEiAu7bz5hyVURxbXcA2draasMbNqrhmg==",
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.0.tgz",
+ "integrity": "sha512-pJB2CCeHWtwOAeIxv8CHVGJhI5FNyJAIpx5Pt72YkK3QfEzt6qAlXZuyaBmyfOdM62qU0rbxJzNToPTVeJGrQw==",
"dev": true,
"requires": {
- "@typescript-eslint/scope-manager": "5.5.0",
- "@typescript-eslint/types": "5.5.0",
- "@typescript-eslint/typescript-estree": "5.5.0",
+ "@typescript-eslint/scope-manager": "5.10.0",
+ "@typescript-eslint/types": "5.10.0",
+ "@typescript-eslint/typescript-estree": "5.10.0",
"debug": "^4.3.2"
}
},
"@typescript-eslint/scope-manager": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.5.0.tgz",
- "integrity": "sha512-0/r656RmRLo7CbN4Mdd+xZyPJ/fPCKhYdU6mnZx+8msAD8nJSP8EyCFkzbd6vNVZzZvWlMYrSNekqGrCBqFQhg==",
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.0.tgz",
+ "integrity": "sha512-tgNgUgb4MhqK6DoKn3RBhyZ9aJga7EQrw+2/OiDk5hKf3pTVZWyqBi7ukP+Z0iEEDMF5FDa64LqODzlfE4O/Dg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.10.0",
+ "@typescript-eslint/visitor-keys": "5.10.0"
+ }
+ },
+ "@typescript-eslint/type-utils": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.0.tgz",
+ "integrity": "sha512-TzlyTmufJO5V886N+hTJBGIfnjQDQ32rJYxPaeiyWKdjsv2Ld5l8cbS7pxim4DeNs62fKzRSt8Q14Evs4JnZyQ==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.5.0",
- "@typescript-eslint/visitor-keys": "5.5.0"
+ "@typescript-eslint/utils": "5.10.0",
+ "debug": "^4.3.2",
+ "tsutils": "^3.21.0"
}
},
"@typescript-eslint/types": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.5.0.tgz",
- "integrity": "sha512-OaYTqkW3GnuHxqsxxJ6KypIKd5Uw7bFiQJZRyNi1jbMJnK3Hc/DR4KwB6KJj6PBRkJJoaNwzMNv9vtTk87JhOg==",
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.0.tgz",
+ "integrity": "sha512-wUljCgkqHsMZbw60IbOqT/puLfyqqD5PquGiBo1u1IS3PLxdi3RDGlyf032IJyh+eQoGhz9kzhtZa+VC4eWTlQ==",
"dev": true
},
"@typescript-eslint/typescript-estree": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.5.0.tgz",
- "integrity": "sha512-pVn8btYUiYrjonhMAO0yG8lm7RApzy2L4RC7Td/mC/qFkyf6vRbGyZozoA94+w6D2Y2GRqpMoCWcwx/EUOzyoQ==",
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.0.tgz",
+ "integrity": "sha512-x+7e5IqfwLwsxTdliHRtlIYkgdtYXzE0CkFeV6ytAqq431ZyxCFzNMNR5sr3WOlIG/ihVZr9K/y71VHTF/DUQA==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.5.0",
- "@typescript-eslint/visitor-keys": "5.5.0",
- "debug": "^4.3.2",
- "globby": "^11.0.4",
- "is-glob": "^4.0.3",
- "semver": "^7.3.5",
- "tsutils": "^3.21.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
+ "@typescript-eslint/types": "5.10.0",
+ "@typescript-eslint/visitor-keys": "5.10.0",
+ "debug": "^4.3.2",
+ "globby": "^11.0.4",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ },
+ "dependencies": {
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
@@ -4415,118 +3970,116 @@
"requires": {
"lru-cache": "^6.0.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
+ "@typescript-eslint/utils": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.0.tgz",
+ "integrity": "sha512-IGYwlt1CVcFoE2ueW4/ioEwybR60RAdGeiJX/iDAw0t5w0wK3S7QncDwpmsM70nKgGTuVchEWB8lwZwHqPAWRg==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.9",
+ "@typescript-eslint/scope-manager": "5.10.0",
+ "@typescript-eslint/types": "5.10.0",
+ "@typescript-eslint/typescript-estree": "5.10.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
+ }
+ },
"@typescript-eslint/visitor-keys": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.5.0.tgz",
- "integrity": "sha512-4GzJ1kRtsWzHhdM40tv0ZKHNSbkDhF0Woi/TDwVJX6UICwJItvP7ZTXbjTkCdrors7ww0sYe0t+cIKDAJwZ7Kw==",
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.0.tgz",
+ "integrity": "sha512-GMxj0K1uyrFLPKASLmZzCuSddmjZVbVj3Ouy5QVuIGKZopxvOr24JsS7gruz6C3GExE01mublZ3mIBOaon9zuQ==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.5.0",
+ "@typescript-eslint/types": "5.10.0",
"eslint-visitor-keys": "^3.0.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz",
- "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==",
- "dev": true
- }
}
},
"@vue/compiler-core": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.1.3.tgz",
- "integrity": "sha512-I58MDtVa8AYEIa3waLO6/89JdmgpkDAEcL3Vrmlsbnt07KZ5sIGLqaXjzGrOT57j9s8ty0WTYlLQq2rWUVYGCg==",
+ "version": "3.2.29",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.29.tgz",
+ "integrity": "sha512-RePZ/J4Ub3sb7atQw6V6Rez+/5LCRHGFlSetT3N4VMrejqJnNPXKUt5AVm/9F5MJriy2w/VudEIvgscCfCWqxw==",
"dev": true,
"requires": {
- "@babel/parser": "^7.12.0",
- "@babel/types": "^7.12.0",
- "@vue/shared": "3.1.3",
- "estree-walker": "^2.0.1",
+ "@babel/parser": "^7.16.4",
+ "@vue/shared": "3.2.29",
+ "estree-walker": "^2.0.2",
"source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
}
},
"@vue/compiler-dom": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.1.3.tgz",
- "integrity": "sha512-BunLXKP+UvY1XJ0L6M7KD/De0XP+kOlIxFg3OfXtVQZcLLgnLcTgSK3t/ylvIpYJOadGaHhb+BfCK/hdqOVAyw==",
+ "version": "3.2.29",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.29.tgz",
+ "integrity": "sha512-y26vK5khdNS9L3ckvkqJk/78qXwWb75Ci8iYLb67AkJuIgyKhIOcR1E8RIt4mswlVCIeI9gQ+fmtdhaiTAtrBQ==",
"dev": true,
"requires": {
- "@vue/compiler-core": "3.1.3",
- "@vue/shared": "3.1.3"
+ "@vue/compiler-core": "3.2.29",
+ "@vue/shared": "3.2.29"
}
},
"@vue/compiler-sfc": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.1.3.tgz",
- "integrity": "sha512-WpQ0oHMT5Aeb92UBnYCOxfHwdOGFZJ+BUyFiu2rG6TTDuw+aPNHCsFxvi55eG+2P7uiqRFK03lc0mGh3v8OVmw==",
- "dev": true,
- "requires": {
- "@babel/parser": "^7.13.9",
- "@babel/types": "^7.13.0",
- "@types/estree": "^0.0.48",
- "@vue/compiler-core": "3.1.3",
- "@vue/compiler-dom": "3.1.3",
- "@vue/compiler-ssr": "3.1.3",
- "@vue/shared": "3.1.3",
- "consolidate": "^0.16.0",
- "estree-walker": "^2.0.1",
- "hash-sum": "^2.0.0",
- "lru-cache": "^5.1.1",
+ "version": "3.2.29",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.29.tgz",
+ "integrity": "sha512-X9+0dwsag2u6hSOP/XsMYqFti/edvYvxamgBgCcbSYuXx1xLZN+dS/GvQKM4AgGS4djqo0jQvWfIXdfZ2ET68g==",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.16.4",
+ "@vue/compiler-core": "3.2.29",
+ "@vue/compiler-dom": "3.2.29",
+ "@vue/compiler-ssr": "3.2.29",
+ "@vue/reactivity-transform": "3.2.29",
+ "@vue/shared": "3.2.29",
+ "estree-walker": "^2.0.2",
"magic-string": "^0.25.7",
- "merge-source-map": "^1.1.0",
"postcss": "^8.1.10",
- "postcss-modules": "^4.0.0",
- "postcss-selector-parser": "^6.0.4",
"source-map": "^0.6.1"
},
"dependencies": {
- "@types/estree": {
- "version": "0.0.48",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.48.tgz",
- "integrity": "sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew==",
- "dev": true
- },
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
}
},
"@vue/compiler-ssr": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.1.3.tgz",
- "integrity": "sha512-dAktYBae3h9QWJoSKsrfrcZEjh4hwphDMWwj+ZwIkHBhEpyjdFLJks8MpxRjGMZzqz5vNyteVXkbOAaoiWPwwA==",
+ "version": "3.2.29",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.29.tgz",
+ "integrity": "sha512-LrvQwXlx66uWsB9/VydaaqEpae9xtmlUkeSKF6aPDbzx8M1h7ukxaPjNCAXuFd3fUHblcri8k42lfimHfzMICA==",
+ "dev": true,
+ "requires": {
+ "@vue/compiler-dom": "3.2.29",
+ "@vue/shared": "3.2.29"
+ }
+ },
+ "@vue/reactivity-transform": {
+ "version": "3.2.29",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.29.tgz",
+ "integrity": "sha512-YF6HdOuhdOw6KyRm59+3rML8USb9o8mYM1q+SH0G41K3/q/G7uhPnHGKvspzceD7h9J3VR1waOQ93CUZj7J7OA==",
"dev": true,
"requires": {
- "@vue/compiler-dom": "3.1.3",
- "@vue/shared": "3.1.3"
+ "@babel/parser": "^7.16.4",
+ "@vue/compiler-core": "3.2.29",
+ "@vue/shared": "3.2.29",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7"
}
},
"@vue/shared": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.3.tgz",
- "integrity": "sha512-uGBX4bZVFvgranxzpH3q1gGmICUjEUnNrMIBFeZRw8hBfCPhT+VnuY8+mG2l/yEyY73J9e6d36CtbFUqDXa12w==",
+ "version": "3.2.29",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.29.tgz",
+ "integrity": "sha512-BjNpU8OK6Z0LVzGUppEk0CMYm/hKDnZfYdjSmPOs0N+TR1cLKJAkDwW8ASZUvaaSLEi6d3hVM7jnWnX+6yWnHw==",
"dev": true
},
"@webassemblyjs/ast": {
@@ -4732,9 +4285,9 @@
}
},
"acorn-import-assertions": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.7.6.tgz",
- "integrity": "sha512-FlVvVFA1TX6l3lp8VjDnYYq7R1nyW6x3svAt4nDgrWQ9SBaSh9CnbwgSUTasgfNfOG5HlM1ehugCvM+hjo56LA==",
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
+ "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
"dev": true
},
"acorn-jsx": {
@@ -4839,21 +4392,25 @@
}
}
},
- "ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true
- },
"ansi-escapes": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
- "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ=="
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "requires": {
+ "type-fest": "^0.21.3"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="
+ }
+ }
},
"ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
},
"ansi-styles": {
"version": "3.2.1",
@@ -5017,10 +4574,16 @@
"integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
"dev": true
},
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+ "dev": true
+ },
"asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
"requires": {
"safer-buffer": "~2.1.0"
}
@@ -5059,14 +4622,14 @@
"integrity": "sha1-0WkB0QzOxZUWwZe5zNiTBom4E7Q="
},
"aws-sdk": {
- "version": "2.1040.0",
- "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1040.0.tgz",
- "integrity": "sha512-xGKYoVNFA46gphJZ5jRykxT96L3YNMO/STmjdW/cl36n61ENfTvH61OO5v2ReoAoReddAV7F0WMXfkzwjYc5Jw==",
+ "version": "2.1062.0",
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1062.0.tgz",
+ "integrity": "sha512-QIU8jwi7Uqyvw2HjsXXXUZv3V/6TinUzLewrdl2EdvonqZCXhwMgnZx2F9I2x62IKH1RqnINwFWdoK+OTgcAjA==",
"requires": {
"buffer": "4.9.2",
"events": "1.1.1",
"ieee754": "1.1.13",
- "jmespath": "0.15.0",
+ "jmespath": "0.16.0",
"querystring": "0.2.0",
"sax": "1.2.1",
"url": "0.10.3",
@@ -5084,6 +4647,11 @@
"isarray": "^1.0.0"
}
},
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+ },
"uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
@@ -5126,14 +4694,6 @@
"supports-color": "^2.0.0"
}
},
- "has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
@@ -5175,9 +4735,9 @@
}
},
"aws4": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
- "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug=="
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
+ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
},
"axios": {
"version": "0.24.0",
@@ -5219,14 +4779,6 @@
"supports-color": "^2.0.0"
}
},
- "has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
"js-tokens": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
@@ -5286,15 +4838,15 @@
"resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
"integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
},
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
"slash": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
"integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
}
}
},
@@ -5317,11 +4869,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
"integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
}
}
},
@@ -5335,15 +4882,15 @@
}
},
"babel-jest": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.2.tgz",
- "integrity": "sha512-MADrjb3KBO2eyZCAc6QaJg6RT5u+6oEdDyHO5HEalnpwQ6LrhTsQF2Kj1Wnz2t6UPXIXPk18dSXXOT0wF5yTxA==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.6.tgz",
+ "integrity": "sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg==",
"dev": true,
"requires": {
- "@jest/transform": "^27.4.2",
+ "@jest/transform": "^27.4.6",
"@jest/types": "^27.4.2",
"@types/babel__core": "^7.1.14",
- "babel-plugin-istanbul": "^6.0.0",
+ "babel-plugin-istanbul": "^6.1.1",
"babel-preset-jest": "^27.4.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
@@ -5419,15 +4966,15 @@
}
},
"babel-plugin-istanbul": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz",
- "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==",
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
+ "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
"@istanbuljs/load-nyc-config": "^1.0.0",
"@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^4.0.0",
+ "istanbul-lib-instrument": "^5.0.4",
"test-exclude": "^6.0.0"
}
},
@@ -5444,33 +4991,33 @@
}
},
"babel-plugin-polyfill-corejs2": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz",
- "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==",
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz",
+ "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==",
"dev": true,
"requires": {
"@babel/compat-data": "^7.13.11",
- "@babel/helper-define-polyfill-provider": "^0.3.0",
+ "@babel/helper-define-polyfill-provider": "^0.3.1",
"semver": "^6.1.1"
}
},
"babel-plugin-polyfill-corejs3": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz",
- "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==",
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz",
+ "integrity": "sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A==",
"dev": true,
"requires": {
- "@babel/helper-define-polyfill-provider": "^0.3.0",
- "core-js-compat": "^3.18.0"
+ "@babel/helper-define-polyfill-provider": "^0.3.1",
+ "core-js-compat": "^3.20.0"
}
},
"babel-plugin-polyfill-regenerator": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz",
- "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==",
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz",
+ "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==",
"dev": true,
"requires": {
- "@babel/helper-define-polyfill-provider": "^0.3.0"
+ "@babel/helper-define-polyfill-provider": "^0.3.1"
}
},
"babel-preset-current-node-syntax": {
@@ -5517,11 +5064,6 @@
"source-map-support": "^0.4.15"
},
"dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
- },
"source-map-support": {
"version": "0.4.18",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
@@ -5541,11 +5083,6 @@
"regenerator-runtime": "^0.11.0"
},
"dependencies": {
- "core-js": {
- "version": "2.6.11",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
- "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
- },
"regenerator-runtime": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
@@ -5593,6 +5130,11 @@
"version": "9.18.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
"integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
@@ -5889,20 +5431,20 @@
"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
},
"body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz",
+ "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==",
"requires": {
- "bytes": "3.1.0",
+ "bytes": "3.1.1",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "~1.1.2",
- "http-errors": "1.7.2",
+ "http-errors": "1.8.1",
"iconv-lite": "0.4.24",
"on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
+ "qs": "6.9.6",
+ "raw-body": "2.4.2",
+ "type-is": "~1.6.18"
},
"dependencies": {
"debug": {
@@ -5913,27 +5455,15 @@
"ms": "2.0.0"
}
},
- "http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+ "version": "6.9.6",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz",
+ "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ=="
}
}
},
@@ -6077,13 +5607,13 @@
"dev": true
},
"browserslist": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz",
- "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==",
+ "version": "4.19.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz",
+ "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
"dev": true,
"requires": {
- "caniuse-lite": "^1.0.30001280",
- "electron-to-chromium": "^1.3.896",
+ "caniuse-lite": "^1.0.30001286",
+ "electron-to-chromium": "^1.4.17",
"escalade": "^3.1.1",
"node-releases": "^2.0.1",
"picocolors": "^1.0.0"
@@ -6107,6 +5637,15 @@
"node-int64": "^0.4.0"
}
},
+ "buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
"buffer-alloc": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
@@ -6169,9 +5708,9 @@
}
},
"bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
+ "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg=="
},
"cache-content-type": {
"version": "1.0.1",
@@ -6249,9 +5788,9 @@
"integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg=="
},
"caniuse-lite": {
- "version": "1.0.30001283",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz",
- "integrity": "sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==",
+ "version": "1.0.30001301",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz",
+ "integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==",
"dev": true
},
"canonicalize": {
@@ -6396,17 +5935,17 @@
}
},
"cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
"requires": {
- "restore-cursor": "^2.0.0"
+ "restore-cursor": "^3.1.0"
}
},
"cli-progress-footer": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-progress-footer/-/cli-progress-footer-2.2.0.tgz",
- "integrity": "sha512-bMlSuLbztsIefm04dOOYcyXOhB6ZhJi8CAqzXtTmwbZlei+BLWDOgzYApl16DJdKucmiOb/pmqmilO3YfobGDQ==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/cli-progress-footer/-/cli-progress-footer-2.3.0.tgz",
+ "integrity": "sha512-xJl+jqvdsE0Gjh5tKoLzZrQS4nPHC+yzeitgq2faAZiHl+/Peuwzoy5Sed6EBkm8JNrPk7W4U3YNVO/uxoqOFg==",
"requires": {
"cli-color": "^2.0.1",
"d": "^1.0.1",
@@ -6415,50 +5954,33 @@
"process-utils": "^4.0.0",
"timers-ext": "^0.1.7",
"type": "^2.5.0"
- },
- "dependencies": {
- "mute-stream": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
- }
}
},
"cli-sprintf-format": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/cli-sprintf-format/-/cli-sprintf-format-1.1.0.tgz",
- "integrity": "sha512-t3LcCdPvrypZovStadWdRS4a186gsq9aoHJYTIer55VY20YdVjGVHDV4uPWcWCXTw1tPjfwlRGE7zKMWJ663Sw==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/cli-sprintf-format/-/cli-sprintf-format-1.1.1.tgz",
+ "integrity": "sha512-BbEjY9BEdA6wagVwTqPvmAwGB24U93rQPBFZUT8lNCDxXzre5LFHQUTJc70czjgUomVg8u8R5kW8oY9DYRFNeg==",
"requires": {
- "cli-color": "^1.3",
- "es5-ext": "^0.10.46",
- "sprintf-kit": "2",
- "supports-color": "^5.5"
+ "cli-color": "^2.0.1",
+ "es5-ext": "^0.10.53",
+ "sprintf-kit": "^2.0.1",
+ "supports-color": "^6.1.0"
},
"dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- },
- "cli-color": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.4.0.tgz",
- "integrity": "sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w==",
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
"requires": {
- "ansi-regex": "^2.1.1",
- "d": "1",
- "es5-ext": "^0.10.46",
- "es6-iterator": "^2.0.3",
- "memoizee": "^0.4.14",
- "timers-ext": "^0.1.5"
+ "has-flag": "^3.0.0"
}
}
}
},
"cli-width": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
- "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
+ "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="
},
"cliui": {
"version": "5.0.0",
@@ -6531,12 +6053,12 @@
"dev": true
},
"color": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz",
- "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
+ "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
"requires": {
- "color-convert": "^1.9.1",
- "color-string": "^1.5.2"
+ "color-convert": "^1.9.3",
+ "color-string": "^1.6.0"
}
},
"color-convert": {
@@ -6553,20 +6075,14 @@
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
"color-string": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
- "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz",
+ "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==",
"requires": {
"color-name": "^1.0.0",
"simple-swizzle": "^0.2.2"
}
},
- "colorette": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
- "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
- "dev": true
- },
"colornames": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz",
@@ -6578,11 +6094,11 @@
"integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg=="
},
"colorspace": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz",
- "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz",
+ "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==",
"requires": {
- "color": "3.0.x",
+ "color": "^3.1.3",
"text-hex": "1.0.x"
}
},
@@ -6700,27 +6216,18 @@
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
"optional": true
},
- "consolidate": {
- "version": "0.16.0",
- "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.16.0.tgz",
- "integrity": "sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==",
- "dev": true,
- "requires": {
- "bluebird": "^3.7.2"
- }
- },
"content-disposition": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"requires": {
- "safe-buffer": "5.1.2"
+ "safe-buffer": "5.2.1"
},
"dependencies": {
"safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
}
}
},
@@ -6745,9 +6252,9 @@
}
},
"cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
},
"cookie-signature": {
"version": "1.0.6",
@@ -6755,9 +6262,9 @@
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"cookiejar": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
- "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz",
+ "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ=="
},
"cookies": {
"version": "0.8.0",
@@ -6783,12 +6290,12 @@
"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
},
"core-js-compat": {
- "version": "3.19.2",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.2.tgz",
- "integrity": "sha512-ObBY1W5vx/LFFMaL1P5Udo4Npib6fu+cMokeziWkA8Tns4FcDemKF5j9JvaI5JhdkW8EQJQGJN1EcrzmEwuAqQ==",
+ "version": "3.20.3",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.3.tgz",
+ "integrity": "sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw==",
"dev": true,
"requires": {
- "browserslist": "^4.18.1",
+ "browserslist": "^4.19.1",
"semver": "7.0.0"
},
"dependencies": {
@@ -6806,9 +6313,9 @@
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"cosmiconfig": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz",
- "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
+ "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
"dev": true,
"requires": {
"@types/parse-json": "^4.0.0",
@@ -6918,11 +6425,11 @@
}
},
"cross-fetch": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz",
- "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
+ "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
"requires": {
- "node-fetch": "2.6.1"
+ "node-fetch": "2.6.7"
}
},
"cross-spawn": {
@@ -6968,12 +6475,6 @@
}
}
},
- "cssesc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true
- },
"cssom": {
"version": "0.4.4",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
@@ -7036,6 +6537,34 @@
"abab": "^2.0.3",
"whatwg-mimetype": "^2.3.0",
"whatwg-url": "^8.0.0"
+ },
+ "dependencies": {
+ "tr46": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
+ "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.1"
+ }
+ },
+ "webidl-conversions": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
+ "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
+ "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.7.0",
+ "tr46": "^2.1.0",
+ "webidl-conversions": "^6.1.0"
+ }
+ }
}
},
"date-fns": {
@@ -7054,18 +6583,11 @@
"integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig=="
},
"debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"requires": {
"ms": "2.1.2"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
}
},
"decamelize": {
@@ -7094,10 +6616,20 @@
"strip-dirs": "^2.0.0"
},
"dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ }
+ }
}
}
},
@@ -7128,6 +6660,11 @@
"safe-buffer": "^5.1.1"
}
},
+ "file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY="
+ },
"tar-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
@@ -7171,6 +6708,13 @@
"decompress-tar": "^4.1.1",
"file-type": "^5.2.0",
"is-stream": "^1.1.0"
+ },
+ "dependencies": {
+ "file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY="
+ }
}
},
"decompress-unzip": {
@@ -7197,11 +6741,6 @@
"object-assign": "^4.0.1",
"pinkie-promise": "^2.0.0"
}
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
}
}
},
@@ -7276,12 +6815,12 @@
"integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw=="
},
"depcheck": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-1.4.2.tgz",
- "integrity": "sha512-oYaBLRbF5NMkYxc5rltnqtuPAn25Lx5xPBIJXy5oUVBgrEDDtotCoYUfFH8lvcmSWzgk1Ts9H+f4Rk0oWL51LQ==",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-1.4.3.tgz",
+ "integrity": "sha512-vy8xe1tlLFu7t4jFyoirMmOR7x7N601ubU9Gkifyr9z8rjBFtEdWHDBMqXyk6OkK+94NXutzddVXJuo0JlUQKQ==",
"dev": true,
"requires": {
- "@babel/parser": "^7.12.5",
+ "@babel/parser": "7.16.4",
"@babel/traverse": "^7.12.5",
"@vue/compiler-sfc": "^3.0.5",
"camelcase": "^6.2.0",
@@ -7306,10 +6845,10 @@
"yargs": "^16.1.0"
},
"dependencies": {
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "@babel/parser": {
+ "version": "7.16.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz",
+ "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==",
"dev": true
},
"ansi-styles": {
@@ -7359,13 +6898,14 @@
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true
},
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"requires": {
- "yallist": "^4.0.0"
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
}
},
"semver": {
@@ -7378,23 +6918,23 @@
}
},
"string-width": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
- "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "strip-ansi": "^6.0.1"
}
},
"strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"requires": {
- "ansi-regex": "^5.0.0"
+ "ansi-regex": "^5.0.1"
}
},
"wrap-ansi": {
@@ -7414,12 +6954,6 @@
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true
},
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"yargs": {
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
@@ -7479,6 +7013,16 @@
"integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
"dev": true
},
+ "dezalgo": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz",
+ "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=",
+ "dev": true,
+ "requires": {
+ "asap": "^2.0.0",
+ "wrappy": "1"
+ }
+ },
"diacritics": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/diacritics/-/diacritics-1.3.0.tgz",
@@ -7503,6 +7047,11 @@
"streamsearch": "0.1.2"
}
},
+ "did-resolver": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.1.5.tgz",
+ "integrity": "sha512-/4lM1vK5osnWVZ2oN9QhlWV5xOwssuLSL1MvueBc8LQWotbD5kM9XQMe7h4GydYpbh3JaWMFkOWwc9jvSZ+qgg=="
+ },
"diff": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
@@ -7640,9 +7189,9 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"electron-to-chromium": {
- "version": "1.4.7",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.7.tgz",
- "integrity": "sha512-UPy2MsQw1OdcbxR7fvwWZH/rXcv+V26+uvQVHx0fGa1kqRfydtfOw+NMGAvZJ63hyaH4aEBxbhSEtqbpliSNWA==",
+ "version": "1.4.51",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.51.tgz",
+ "integrity": "sha512-JNEmcYl3mk1tGQmy0EvL5eik/CKSBuzAyGP0QFdG6LIgxQe3II0BL1m2zKc2MZMf3uGqHWE1TFddJML0RpjSHQ==",
"dev": true
},
"elliptic": {
@@ -7729,6 +7278,11 @@
"requires": {
"ms": "2.0.0"
}
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
@@ -7762,15 +7316,6 @@
}
}
},
- "enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
- "dev": true,
- "requires": {
- "ansi-colors": "^4.1.1"
- }
- },
"env-variable": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz",
@@ -7873,6 +7418,11 @@
"es6-symbol": "^3.1.1"
}
},
+ "es6-promisify": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz",
+ "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg=="
+ },
"es6-set": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
@@ -7987,6 +7537,13 @@
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
"dev": true
},
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
"type-check": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
@@ -7999,24 +7556,23 @@
}
},
"eslint": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.3.0.tgz",
- "integrity": "sha512-aIay56Ph6RxOTC7xyr59Kt3ewX185SaGnAr8eWukoPLeriCrvGjvAubxuvaXOfsxhtwV5g0uBOsyhAom4qJdww==",
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz",
+ "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==",
"dev": true,
"requires": {
- "@eslint/eslintrc": "^1.0.4",
- "@humanwhocodes/config-array": "^0.6.0",
+ "@eslint/eslintrc": "^1.0.5",
+ "@humanwhocodes/config-array": "^0.9.2",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
"debug": "^4.3.2",
"doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
"escape-string-regexp": "^4.0.0",
"eslint-scope": "^7.1.0",
"eslint-utils": "^3.0.0",
- "eslint-visitor-keys": "^3.1.0",
- "espree": "^9.1.0",
+ "eslint-visitor-keys": "^3.2.0",
+ "espree": "^9.3.0",
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -8024,7 +7580,7 @@
"functional-red-black-tree": "^1.0.1",
"glob-parent": "^6.0.1",
"globals": "^13.6.0",
- "ignore": "^4.0.6",
+ "ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
@@ -8035,21 +7591,13 @@
"minimatch": "^3.0.4",
"natural-compare": "^1.4.0",
"optionator": "^0.9.1",
- "progress": "^2.0.0",
"regexpp": "^3.2.0",
- "semver": "^7.2.1",
"strip-ansi": "^6.0.1",
"strip-json-comments": "^3.1.0",
"text-table": "^0.2.0",
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -8059,12 +7607,6 @@
"color-convert": "^2.0.1"
}
},
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -8106,12 +7648,6 @@
"estraverse": "^5.2.0"
}
},
- "eslint-visitor-keys": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz",
- "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==",
- "dev": true
- },
"estraverse": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
@@ -8134,9 +7670,9 @@
}
},
"globals": {
- "version": "13.11.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
- "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
+ "version": "13.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
+ "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
@@ -8148,39 +7684,6 @@
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
"strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -8204,12 +7707,6 @@
"requires": {
"has-flag": "^4.0.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
@@ -8249,24 +7746,17 @@
"requires": {
"ms": "^2.1.1"
}
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
}
}
},
"eslint-module-utils": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz",
- "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==",
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz",
+ "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==",
"dev": true,
"requires": {
"debug": "^3.2.7",
- "find-up": "^2.1.0",
- "pkg-dir": "^2.0.0"
+ "find-up": "^2.1.0"
},
"dependencies": {
"debug": {
@@ -8297,12 +7787,6 @@
"path-exists": "^3.0.0"
}
},
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
"p-limit": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
@@ -8330,9 +7814,9 @@
}
},
"eslint-plugin-import": {
- "version": "2.25.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz",
- "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==",
+ "version": "2.25.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz",
+ "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==",
"dev": true,
"requires": {
"array-includes": "^3.1.4",
@@ -8340,14 +7824,14 @@
"debug": "^2.6.9",
"doctrine": "^2.1.0",
"eslint-import-resolver-node": "^0.3.6",
- "eslint-module-utils": "^2.7.1",
+ "eslint-module-utils": "^2.7.2",
"has": "^1.0.3",
"is-core-module": "^2.8.0",
"is-glob": "^4.0.3",
"minimatch": "^3.0.4",
"object.values": "^1.1.5",
"resolve": "^1.20.0",
- "tsconfig-paths": "^3.11.0"
+ "tsconfig-paths": "^3.12.0"
},
"dependencies": {
"debug": {
@@ -8367,13 +7851,19 @@
"requires": {
"esutils": "^2.0.2"
}
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
}
}
},
"eslint-plugin-jest": {
- "version": "25.3.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.3.0.tgz",
- "integrity": "sha512-79WQtuBsTN1S8Y9+7euBYwxIOia/k7ykkl9OCBHL3xuww5ecursHy/D8GCIlvzHVWv85gOkS5Kv6Sh7RxOgK1Q==",
+ "version": "25.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz",
+ "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==",
"dev": true,
"requires": {
"@typescript-eslint/experimental-utils": "^5.0.0"
@@ -8405,12 +7895,20 @@
"dev": true,
"requires": {
"eslint-visitor-keys": "^2.0.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true
+ }
}
},
"eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz",
+ "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==",
"dev": true
},
"esm": {
@@ -8428,20 +7926,20 @@
}
},
"espree": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.1.0.tgz",
- "integrity": "sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ==",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz",
+ "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==",
"dev": true,
"requires": {
- "acorn": "^8.6.0",
+ "acorn": "^8.7.0",
"acorn-jsx": "^5.3.1",
"eslint-visitor-keys": "^3.1.0"
},
"dependencies": {
- "eslint-visitor-keys": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz",
- "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==",
+ "acorn": {
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
+ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
"dev": true
}
}
@@ -8461,9 +7959,9 @@
},
"dependencies": {
"estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
}
}
@@ -8478,17 +7976,20 @@
},
"dependencies": {
"estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
}
}
},
"essentials": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/essentials/-/essentials-1.1.1.tgz",
- "integrity": "sha512-SmaxoAdVu86XkZQM/u6TYSu96ZlFGwhvSk1l9zAkznFuQkMb9mRDS2iq/XWDow7R8OwBwdYH8nLyDKznMD+GWw=="
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/essentials/-/essentials-1.2.0.tgz",
+ "integrity": "sha512-kP/j7Iw7KeNE8b/o7+tr9uX2s1wegElGOoGZ2Xm35qBr4BbbEcH3/bxR2nfH9l9JANCq9AUrvKw+gRuHtZp0HQ==",
+ "requires": {
+ "uni-global": "^1.0.0"
+ }
},
"estraverse": {
"version": "4.3.0",
@@ -8554,6 +8055,24 @@
"resolved": "https://registry.npmjs.org/ethr-did-registry/-/ethr-did-registry-0.0.3.tgz",
"integrity": "sha512-4BPvMGkxAK9vTduCq6D5b8ZqjteD2cvDIPPriXP6nnmPhWKFSxypo+AFvyQ0omJGa0cGTR+dkdI/8jiF7U/qaw=="
},
+ "ethr-did-resolver": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/ethr-did-resolver/-/ethr-did-resolver-4.3.5.tgz",
+ "integrity": "sha512-BQO7PQwuqqczK+4AWQhys/sgegDVIFr6+lSoSYXlIbG0oRH0l7PkSuf7VEFKclEJ3JlJ1t9kjDIdj7Ba7euTJg==",
+ "requires": {
+ "@ethersproject/abi": "^5.1.0",
+ "@ethersproject/abstract-signer": "^5.1.0",
+ "@ethersproject/address": "^5.1.0",
+ "@ethersproject/basex": "^5.1.0",
+ "@ethersproject/bignumber": "^5.1.0",
+ "@ethersproject/contracts": "^5.1.0",
+ "@ethersproject/providers": "^5.1.0",
+ "@ethersproject/transactions": "^5.1.0",
+ "did-resolver": "^3.1.0",
+ "ethr-did-registry": "^0.0.3",
+ "querystring": "^0.2.1"
+ }
+ },
"event-emitter": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
@@ -8632,38 +8151,28 @@
"optional": true
},
"expect": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.2.tgz",
- "integrity": "sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.6.tgz",
+ "integrity": "sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag==",
"dev": true,
"requires": {
"@jest/types": "^27.4.2",
- "ansi-styles": "^5.0.0",
"jest-get-type": "^27.4.0",
- "jest-matcher-utils": "^27.4.2",
- "jest-message-util": "^27.4.2",
- "jest-regex-util": "^27.4.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true
- }
+ "jest-matcher-utils": "^27.4.6",
+ "jest-message-util": "^27.4.6"
}
},
"express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz",
+ "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==",
"requires": {
"accepts": "~1.3.7",
"array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
+ "body-parser": "1.19.1",
+ "content-disposition": "0.5.4",
"content-type": "~1.0.4",
- "cookie": "0.4.0",
+ "cookie": "0.4.1",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "~1.1.2",
@@ -8677,13 +8186,13 @@
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.9.6",
"range-parser": "~1.2.1",
- "safe-buffer": "5.1.2",
- "send": "0.17.1",
- "serve-static": "1.14.1",
- "setprototypeof": "1.1.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.17.2",
+ "serve-static": "1.14.2",
+ "setprototypeof": "1.2.0",
"statuses": "~1.5.0",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
@@ -8698,15 +8207,20 @@
"ms": "2.0.0"
}
},
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
"qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+ "version": "6.9.6",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz",
+ "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ=="
},
"safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
}
}
},
@@ -8767,16 +8281,15 @@
"dev": true
},
"fast-glob": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz",
- "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==",
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
"requires": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.0",
+ "glob-parent": "^5.1.2",
"merge2": "^1.3.0",
- "micromatch": "^4.0.2",
- "picomatch": "^2.2.1"
+ "micromatch": "^4.0.4"
}
},
"fast-json-stable-stringify": {
@@ -8791,17 +8304,18 @@
"dev": true
},
"fast-safe-stringify": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
- "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA=="
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
+ "dev": true
},
"fast-xml-parser": {
- "version": "3.20.0",
- "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.20.0.tgz",
- "integrity": "sha512-cMQwDJYVDjMPU56DviszewgMKuNzuf4NQSBuDf9RgZ6FKm5QEMxW05Za8lvnuL6moxoeZVUWBlL733WmovvV6g==",
+ "version": "3.21.1",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz",
+ "integrity": "sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==",
"dev": true,
"requires": {
- "strnum": "^1.0.3"
+ "strnum": "^1.0.4"
}
},
"fastest-levenshtein": {
@@ -8810,9 +8324,9 @@
"integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow=="
},
"fastq": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz",
- "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==",
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
"requires": {
"reusify": "^1.0.4"
}
@@ -8835,9 +8349,9 @@
}
},
"fecha": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz",
- "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg=="
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz",
+ "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q=="
},
"fhir": {
"version": "4.11.1",
@@ -8896,9 +8410,9 @@
}
},
"figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
"requires": {
"escape-string-regexp": "^1.0.5"
}
@@ -8949,9 +8463,14 @@
}
},
"file-type": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
- "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY="
+ "version": "16.5.3",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.3.tgz",
+ "integrity": "sha512-uVsl7iFhHSOY4bEONLlTK47iAHtNsFHWP5YE4xJfZ4rnX7S1Q3wce09XgqSC7E/xh8Ncv/be1lNoyprlUH/x6A==",
+ "requires": {
+ "readable-web-to-node-stream": "^3.0.0",
+ "strtok3": "^6.2.4",
+ "token-types": "^4.1.1"
+ }
},
"file-uri-to-path": {
"version": "1.0.0",
@@ -8975,9 +8494,9 @@
}
},
"filesize": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.6.tgz",
- "integrity": "sha512-sHvRqTiwdmcuzqet7iVwsbwF6UrV3wIgDf2SHNdY1Hgl8PC45HZg/0xtdw6U2izIV4lccnrY9ftl6wZFNdjYMg=="
+ "version": "8.0.7",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz",
+ "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ=="
},
"fill-range": {
"version": "7.0.1",
@@ -9008,6 +8527,11 @@
"requires": {
"ms": "2.0.0"
}
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
@@ -9052,15 +8576,15 @@
}
},
"flatted": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
- "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz",
+ "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==",
"dev": true
},
"follow-redirects": {
- "version": "1.14.5",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz",
- "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA=="
+ "version": "1.14.7",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz",
+ "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ=="
},
"forever-agent": {
"version": "0.6.1",
@@ -9177,9 +8701,9 @@
}
},
"form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
@@ -9187,9 +8711,9 @@
}
},
"formidable": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz",
- "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q=="
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz",
+ "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ=="
},
"forwarded": {
"version": "0.2.0",
@@ -9311,26 +8835,6 @@
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
"optional": true
},
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "optional": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "optional": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
@@ -9342,15 +8846,6 @@
}
}
},
- "generic-names": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz",
- "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==",
- "dev": true,
- "requires": {
- "loader-utils": "^1.1.0"
- }
- },
"gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -9464,15 +8959,15 @@
"dev": true
},
"globby": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
- "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
"requires": {
"array-union": "^2.1.0",
"dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
"slash": "^3.0.0"
}
},
@@ -9495,9 +8990,9 @@
},
"dependencies": {
"@sindresorhus/is": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz",
- "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw=="
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.3.0.tgz",
+ "integrity": "sha512-wwOvh0eO3PiTEivGJWiZ+b946SlMSb4pe+y+Ur/4S87cwo09pYi+FWHHnbrM3W9W7cBYKDqQXcrFYjYUCOJUEQ=="
},
"@szmarczak/http-timer": {
"version": "4.0.6",
@@ -9548,9 +9043,9 @@
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
},
"keyv": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz",
- "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.5.tgz",
+ "integrity": "sha512-531pkGLqV3BMg0eDqqJFI0R1mkK1Nm5xIP2mM6keP5P8WfFtCkg2IOwplTUmlGoTgIg9yQYZ/kdihhz89XH3vA==",
"requires": {
"json-buffer": "3.0.1"
}
@@ -9599,11 +9094,11 @@
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
},
"har-validator": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
- "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
"requires": {
- "ajv": "^6.5.5",
+ "ajv": "^6.12.3",
"har-schema": "^2.0.0"
}
},
@@ -9616,6 +9111,21 @@
"function-bind": "^1.1.1"
}
},
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ }
+ }
+ },
"has-bigints": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
@@ -9682,12 +9192,6 @@
"integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
"dev": true
},
- "hash-sum": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz",
- "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
- "dev": true
- },
"hash.js": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
@@ -9702,6 +9206,12 @@
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
},
+ "hexoid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
+ "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==",
+ "dev": true
+ },
"hi-base32": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz",
@@ -9839,102 +9349,51 @@
"safer-buffer": ">= 2.1.2 < 3"
}
},
- "icss-replace-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
- "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
- "dev": true
- },
- "icss-utils": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
- "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
- "dev": true
- },
"ieee754": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
"integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
},
"ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw=="
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ=="
},
"immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
},
+ "immutable": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz",
+ "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==",
+ "dev": true
+ },
"import-fresh": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
"integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
- "dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- }
- },
- "import-lazy": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
- "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
- "dev": true
- },
- "import-local": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz",
- "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==",
- "dev": true,
- "requires": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- }
- }
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
+ "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
+ "dev": true
+ },
+ "import-local": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
+ "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
}
},
"imurmurhash": {
@@ -9967,23 +9426,96 @@
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
},
"inquirer": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
- "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
+ "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
"requires": {
- "ansi-escapes": "^3.2.0",
- "chalk": "^2.4.2",
- "cli-cursor": "^2.1.0",
- "cli-width": "^2.0.0",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.1.0",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^3.0.0",
"external-editor": "^3.0.3",
- "figures": "^2.0.0",
- "lodash": "^4.17.12",
- "mute-stream": "0.0.7",
- "run-async": "^2.2.0",
- "rxjs": "^6.4.0",
- "string-width": "^2.1.0",
- "strip-ansi": "^5.1.0",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.19",
+ "mute-stream": "0.0.8",
+ "run-async": "^2.4.0",
+ "rxjs": "^6.6.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
"through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "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==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "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=="
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "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==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
}
},
"inquirer-autocomplete-prompt": {
@@ -9998,14 +9530,6 @@
"rxjs": "^6.6.2"
},
"dependencies": {
- "ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "requires": {
- "type-fest": "^0.21.3"
- }
- },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -10036,14 +9560,6 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
- "figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -10056,11 +9572,6 @@
"requires": {
"has-flag": "^4.0.0"
}
- },
- "type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="
}
}
},
@@ -10165,9 +9676,9 @@
}
},
"is-core-module": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
- "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
+ "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
"dev": true,
"requires": {
"has": "^1.0.3"
@@ -10180,9 +9691,9 @@
"dev": true
},
"is-docker": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
- "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw=="
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="
},
"is-extglob": {
"version": "2.1.1",
@@ -10386,20 +9897,21 @@
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"istanbul-lib-coverage": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
- "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
"dev": true
},
"istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz",
+ "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==",
"dev": true,
"requires": {
- "@babel/core": "^7.7.5",
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
"@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-coverage": "^3.2.0",
"semver": "^6.3.0"
}
},
@@ -10414,150 +9926,6 @@
"supports-color": "^7.1.0"
},
"dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "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==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "istanbul-lib-source-maps": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
- "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- }
- },
- "istanbul-reports": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.0.tgz",
- "integrity": "sha512-rgeP8yMlXeH4mfd9K/sQXZv1lvcS7xo379zntcotPDdMwkcGYwMxGHGZYo0/+YW5B/nor2YGKz2BH5ume405ow==",
- "dev": true,
- "requires": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
- }
- },
- "java-invoke-local": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/java-invoke-local/-/java-invoke-local-0.0.6.tgz",
- "integrity": "sha512-gZmQKe1QrfkkMjCn8Qv9cpyJFyogTYqkP5WCobX5RNaHsJzIV/6NvAnlnouOcwKr29QrxLGDGcqYuJ+ae98s1A==",
- "dev": true
- },
- "jest": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.2.tgz",
- "integrity": "sha512-TAReynFYCfHNcrL+8Z74WPGafLFLF++bGkrpcsk6cO5G9S2VuJGhu2c44YFForMgF0GlYmtbpmeznkvZpNgTxg==",
- "dev": true,
- "requires": {
- "@jest/core": "^27.4.2",
- "import-local": "^3.0.2",
- "jest-cli": "^27.4.2"
- }
- },
- "jest-changed-files": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz",
- "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==",
- "dev": true,
- "requires": {
- "@jest/types": "^27.4.2",
- "execa": "^5.0.0",
- "throat": "^6.0.1"
- },
- "dependencies": {
- "throat": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
- "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==",
- "dev": true
- }
- }
- },
- "jest-circus": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.2.tgz",
- "integrity": "sha512-2ePUSru1BGMyzxsMvRfu+tNb+PW60rUyMLJBfw1Nrh5zC8RoTPfF+zbE0JToU31a6ZVe4nnrNKWYRzlghAbL0A==",
- "dev": true,
- "requires": {
- "@jest/environment": "^27.4.2",
- "@jest/test-result": "^27.4.2",
- "@jest/types": "^27.4.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "dedent": "^0.7.0",
- "expect": "^27.4.2",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^27.4.2",
- "jest-matcher-utils": "^27.4.2",
- "jest-message-util": "^27.4.2",
- "jest-runtime": "^27.4.2",
- "jest-snapshot": "^27.4.2",
- "jest-util": "^27.4.2",
- "pretty-format": "^27.4.2",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3",
- "throat": "^6.0.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "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==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "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==",
- "dev": true
- },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -10569,44 +9937,58 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "throat": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
- "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
}
},
- "jest-cli": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.2.tgz",
- "integrity": "sha512-Ex2WhCj4s0XFntTKTnyLgV/CZKgQaZBYrKz02XOZ4nUjFD+26Fji/M1SgHm+2IWEIsQqoipNRx9RJH56p8d7MQ==",
+ "istanbul-reports": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz",
+ "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==",
"dev": true,
"requires": {
- "@jest/core": "^27.4.2",
- "@jest/test-result": "^27.4.2",
- "@jest/types": "^27.4.2",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ }
+ },
+ "java-invoke-local": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/java-invoke-local/-/java-invoke-local-0.0.6.tgz",
+ "integrity": "sha512-gZmQKe1QrfkkMjCn8Qv9cpyJFyogTYqkP5WCobX5RNaHsJzIV/6NvAnlnouOcwKr29QrxLGDGcqYuJ+ae98s1A==",
+ "dev": true
+ },
+ "jest": {
+ "version": "27.4.7",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.7.tgz",
+ "integrity": "sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg==",
+ "dev": true,
+ "requires": {
+ "@jest/core": "^27.4.7",
"import-local": "^3.0.2",
- "jest-config": "^27.4.2",
- "jest-util": "^27.4.2",
- "jest-validate": "^27.4.2",
- "prompts": "^2.0.1",
- "yargs": "^16.2.0"
+ "jest-cli": "^27.4.7"
},
"dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -10670,6 +10052,26 @@
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true
},
+ "jest-cli": {
+ "version": "27.4.7",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.7.tgz",
+ "integrity": "sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw==",
+ "dev": true,
+ "requires": {
+ "@jest/core": "^27.4.7",
+ "@jest/test-result": "^27.4.6",
+ "@jest/types": "^27.4.2",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.4",
+ "import-local": "^3.0.2",
+ "jest-config": "^27.4.7",
+ "jest-util": "^27.4.2",
+ "jest-validate": "^27.4.6",
+ "prompts": "^2.0.1",
+ "yargs": "^16.2.0"
+ }
+ },
"string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -10739,33 +10141,136 @@
}
}
},
- "jest-config": {
+ "jest-changed-files": {
"version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.2.tgz",
- "integrity": "sha512-2vKqelsfHPnIzrPTpE9hImqxZLp5l9Vszpci19RdVB2i5OwoM+OkPExZMQb8aGrpEGXoKtlzvdqCL1GObiz8JQ==",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz",
+ "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==",
"dev": true,
"requires": {
- "@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^27.4.2",
"@jest/types": "^27.4.2",
- "babel-jest": "^27.4.2",
+ "execa": "^5.0.0",
+ "throat": "^6.0.1"
+ },
+ "dependencies": {
+ "throat": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
+ "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==",
+ "dev": true
+ }
+ }
+ },
+ "jest-circus": {
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.6.tgz",
+ "integrity": "sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "^27.4.6",
+ "@jest/test-result": "^27.4.6",
+ "@jest/types": "^27.4.2",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "co": "^4.6.0",
+ "dedent": "^0.7.0",
+ "expect": "^27.4.6",
+ "is-generator-fn": "^2.0.0",
+ "jest-each": "^27.4.6",
+ "jest-matcher-utils": "^27.4.6",
+ "jest-message-util": "^27.4.6",
+ "jest-runtime": "^27.4.6",
+ "jest-snapshot": "^27.4.6",
+ "jest-util": "^27.4.2",
+ "pretty-format": "^27.4.6",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3",
+ "throat": "^6.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "throat": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
+ "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==",
+ "dev": true
+ }
+ }
+ },
+ "jest-config": {
+ "version": "27.4.7",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.7.tgz",
+ "integrity": "sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.8.0",
+ "@jest/test-sequencer": "^27.4.6",
+ "@jest/types": "^27.4.2",
+ "babel-jest": "^27.4.6",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.1",
"graceful-fs": "^4.2.4",
- "jest-circus": "^27.4.2",
- "jest-environment-jsdom": "^27.4.2",
- "jest-environment-node": "^27.4.2",
+ "jest-circus": "^27.4.6",
+ "jest-environment-jsdom": "^27.4.6",
+ "jest-environment-node": "^27.4.6",
"jest-get-type": "^27.4.0",
- "jest-jasmine2": "^27.4.2",
+ "jest-jasmine2": "^27.4.6",
"jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.2",
- "jest-runner": "^27.4.2",
+ "jest-resolve": "^27.4.6",
+ "jest-runner": "^27.4.6",
"jest-util": "^27.4.2",
- "jest-validate": "^27.4.2",
+ "jest-validate": "^27.4.6",
"micromatch": "^4.0.4",
- "pretty-format": "^27.4.2",
+ "pretty-format": "^27.4.6",
"slash": "^3.0.0"
},
"dependencies": {
@@ -10821,15 +10326,15 @@
}
},
"jest-diff": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.2.tgz",
- "integrity": "sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.6.tgz",
+ "integrity": "sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
"diff-sequences": "^27.4.0",
"jest-get-type": "^27.4.0",
- "pretty-format": "^27.4.2"
+ "pretty-format": "^27.4.6"
},
"dependencies": {
"ansi-styles": {
@@ -10893,16 +10398,16 @@
}
},
"jest-each": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.2.tgz",
- "integrity": "sha512-53V2MNyW28CTruB3lXaHNk6PkiIFuzdOC9gR3C6j8YE/ACfrPnz+slB0s17AgU1TtxNzLuHyvNlLJ+8QYw9nBg==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.6.tgz",
+ "integrity": "sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA==",
"dev": true,
"requires": {
"@jest/types": "^27.4.2",
"chalk": "^4.0.0",
"jest-get-type": "^27.4.0",
"jest-util": "^27.4.2",
- "pretty-format": "^27.4.2"
+ "pretty-format": "^27.4.6"
},
"dependencies": {
"ansi-styles": {
@@ -10957,32 +10462,31 @@
}
},
"jest-environment-jsdom": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.2.tgz",
- "integrity": "sha512-L0dV4oq4+Ll7hZ8QCGvSELn8uOr938/QKOg6o70kMHiZOpWOjAqSf7fMVAtGhG/BVSvk1GTzhGJNOWsxtH5KbQ==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz",
+ "integrity": "sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA==",
"dev": true,
"requires": {
- "@jest/environment": "^27.4.2",
- "@jest/fake-timers": "^27.4.2",
+ "@jest/environment": "^27.4.6",
+ "@jest/fake-timers": "^27.4.6",
"@jest/types": "^27.4.2",
- "@types/jsdom": "^16.2.4",
"@types/node": "*",
- "jest-mock": "^27.4.2",
+ "jest-mock": "^27.4.6",
"jest-util": "^27.4.2",
"jsdom": "^16.6.0"
}
},
"jest-environment-node": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.2.tgz",
- "integrity": "sha512-nzTZ5nJ+FabuZPH2YVci7SZIHpvtNRHPt8+vipLkCnAgXGjVzHm7XJWdnNqXbAkExIgiKeVEkVMNZOZE/LeiIg==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.6.tgz",
+ "integrity": "sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ==",
"dev": true,
"requires": {
- "@jest/environment": "^27.4.2",
- "@jest/fake-timers": "^27.4.2",
+ "@jest/environment": "^27.4.6",
+ "@jest/fake-timers": "^27.4.6",
"@jest/types": "^27.4.2",
"@types/node": "*",
- "jest-mock": "^27.4.2",
+ "jest-mock": "^27.4.6",
"jest-util": "^27.4.2"
}
},
@@ -10993,9 +10497,9 @@
"dev": true
},
"jest-haste-map": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.2.tgz",
- "integrity": "sha512-foiyAEePORUN2eeJnOtcM1y8qW0ShEd9kTjWVL4sVaMcuCJM6gtHegvYPBRT0mpI/bs4ueThM90+Eoj2ncoNsA==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.6.tgz",
+ "integrity": "sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ==",
"dev": true,
"requires": {
"@jest/types": "^27.4.2",
@@ -11008,34 +10512,33 @@
"jest-regex-util": "^27.4.0",
"jest-serializer": "^27.4.0",
"jest-util": "^27.4.2",
- "jest-worker": "^27.4.2",
+ "jest-worker": "^27.4.6",
"micromatch": "^4.0.4",
"walker": "^1.0.7"
}
},
"jest-jasmine2": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.2.tgz",
- "integrity": "sha512-VO/fyAJSH9u0THjbteFiL8qc93ufU+yW+bdieDc8tzTCWwlWzO53UHS5nFK1qmE8izb5Smkn+XHlVt6/l06MKQ==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz",
+ "integrity": "sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw==",
"dev": true,
"requires": {
- "@babel/traverse": "^7.1.0",
- "@jest/environment": "^27.4.2",
+ "@jest/environment": "^27.4.6",
"@jest/source-map": "^27.4.0",
- "@jest/test-result": "^27.4.2",
+ "@jest/test-result": "^27.4.6",
"@jest/types": "^27.4.2",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
- "expect": "^27.4.2",
+ "expect": "^27.4.6",
"is-generator-fn": "^2.0.0",
- "jest-each": "^27.4.2",
- "jest-matcher-utils": "^27.4.2",
- "jest-message-util": "^27.4.2",
- "jest-runtime": "^27.4.2",
- "jest-snapshot": "^27.4.2",
+ "jest-each": "^27.4.6",
+ "jest-matcher-utils": "^27.4.6",
+ "jest-message-util": "^27.4.6",
+ "jest-runtime": "^27.4.6",
+ "jest-snapshot": "^27.4.6",
"jest-util": "^27.4.2",
- "pretty-format": "^27.4.2",
+ "pretty-format": "^27.4.6",
"throat": "^6.0.1"
},
"dependencies": {
@@ -11097,25 +10600,25 @@
}
},
"jest-leak-detector": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.2.tgz",
- "integrity": "sha512-ml0KvFYZllzPBJWDei3mDzUhyp/M4ubKebX++fPaudpe8OsxUE+m+P6ciVLboQsrzOCWDjE20/eXew9QMx/VGw==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz",
+ "integrity": "sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA==",
"dev": true,
"requires": {
"jest-get-type": "^27.4.0",
- "pretty-format": "^27.4.2"
+ "pretty-format": "^27.4.6"
}
},
"jest-matcher-utils": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.2.tgz",
- "integrity": "sha512-jyP28er3RRtMv+fmYC/PKG8wvAmfGcSNproVTW2Y0P/OY7/hWUOmsPfxN1jOhM+0u2xU984u2yEagGivz9OBGQ==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz",
+ "integrity": "sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
- "jest-diff": "^27.4.2",
+ "jest-diff": "^27.4.6",
"jest-get-type": "^27.4.0",
- "pretty-format": "^27.4.2"
+ "pretty-format": "^27.4.6"
},
"dependencies": {
"ansi-styles": {
@@ -11170,9 +10673,9 @@
}
},
"jest-message-util": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.2.tgz",
- "integrity": "sha512-OMRqRNd9E0DkBLZpFtZkAGYOXl6ZpoMtQJWTAREJKDOFa0M6ptB7L67tp+cszMBkvSgKOhNtQp2Vbcz3ZZKo/w==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.6.tgz",
+ "integrity": "sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.13",
@@ -11181,7 +10684,7 @@
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"micromatch": "^4.0.4",
- "pretty-format": "^27.4.2",
+ "pretty-format": "^27.4.6",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
@@ -11238,9 +10741,9 @@
}
},
"jest-mock": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.2.tgz",
- "integrity": "sha512-PDDPuyhoukk20JrQKeofK12hqtSka7mWH0QQuxSNgrdiPsrnYYLS6wbzu/HDlxZRzji5ylLRULeuI/vmZZDrYA==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.6.tgz",
+ "integrity": "sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw==",
"dev": true,
"requires": {
"@jest/types": "^27.4.2",
@@ -11266,18 +10769,18 @@
"dev": true
},
"jest-resolve": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.2.tgz",
- "integrity": "sha512-d/zqPjxCzMqHlOdRTg8cTpO9jY+1/T74KazT8Ws/LwmwxV5sRMWOkiLjmzUCDj/5IqA5XHNK4Hkmlq9Kdpb9Sg==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.6.tgz",
+ "integrity": "sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw==",
"dev": true,
"requires": {
"@jest/types": "^27.4.2",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.2",
+ "jest-haste-map": "^27.4.6",
"jest-pnp-resolver": "^1.2.2",
"jest-util": "^27.4.2",
- "jest-validate": "^27.4.2",
+ "jest-validate": "^27.4.6",
"resolve": "^1.20.0",
"resolve.exports": "^1.1.0",
"slash": "^3.0.0"
@@ -11335,26 +10838,26 @@
}
},
"jest-resolve-dependencies": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.2.tgz",
- "integrity": "sha512-hb++cTpqvOWfU49MCP/JQkxmnrhKoAVqXWFjgYXswRSVGk8Q6bDTSvhbCeYXDtXaymY0y7WrrSIlKogClcKJuw==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz",
+ "integrity": "sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw==",
"dev": true,
"requires": {
"@jest/types": "^27.4.2",
"jest-regex-util": "^27.4.0",
- "jest-snapshot": "^27.4.2"
+ "jest-snapshot": "^27.4.6"
}
},
"jest-runner": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.2.tgz",
- "integrity": "sha512-YsgbYKk8V7J5BQPINXhdzNLoqIwUWrJkV9h6/ccsn6fbmC3n3ax1K5cDWzAU9qXyaQhetwFqPpHmAHIACscRKQ==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.6.tgz",
+ "integrity": "sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg==",
"dev": true,
"requires": {
- "@jest/console": "^27.4.2",
- "@jest/environment": "^27.4.2",
- "@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.2",
+ "@jest/console": "^27.4.6",
+ "@jest/environment": "^27.4.6",
+ "@jest/test-result": "^27.4.6",
+ "@jest/transform": "^27.4.6",
"@jest/types": "^27.4.2",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -11362,15 +10865,15 @@
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"jest-docblock": "^27.4.0",
- "jest-environment-jsdom": "^27.4.2",
- "jest-environment-node": "^27.4.2",
- "jest-haste-map": "^27.4.2",
- "jest-leak-detector": "^27.4.2",
- "jest-message-util": "^27.4.2",
- "jest-resolve": "^27.4.2",
- "jest-runtime": "^27.4.2",
+ "jest-environment-jsdom": "^27.4.6",
+ "jest-environment-node": "^27.4.6",
+ "jest-haste-map": "^27.4.6",
+ "jest-leak-detector": "^27.4.6",
+ "jest-message-util": "^27.4.6",
+ "jest-resolve": "^27.4.6",
+ "jest-runtime": "^27.4.6",
"jest-util": "^27.4.2",
- "jest-worker": "^27.4.2",
+ "jest-worker": "^27.4.6",
"source-map-support": "^0.5.6",
"throat": "^6.0.1"
},
@@ -11433,45 +10936,35 @@
}
},
"jest-runtime": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.2.tgz",
- "integrity": "sha512-eqPgcBaUNaw6j8T5M+dnfAEh6MIrh2YmtskCr9sl50QYpD22Sg+QqHw3J3nmaLzVMbBtOMHFFxLF0Qx8MsZVFQ==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.6.tgz",
+ "integrity": "sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ==",
"dev": true,
"requires": {
- "@jest/console": "^27.4.2",
- "@jest/environment": "^27.4.2",
- "@jest/globals": "^27.4.2",
+ "@jest/environment": "^27.4.6",
+ "@jest/fake-timers": "^27.4.6",
+ "@jest/globals": "^27.4.6",
"@jest/source-map": "^27.4.0",
- "@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.2",
+ "@jest/test-result": "^27.4.6",
+ "@jest/transform": "^27.4.6",
"@jest/types": "^27.4.2",
- "@types/yargs": "^16.0.0",
"chalk": "^4.0.0",
"cjs-module-lexer": "^1.0.0",
"collect-v8-coverage": "^1.0.0",
"execa": "^5.0.0",
- "exit": "^0.1.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.2",
- "jest-message-util": "^27.4.2",
- "jest-mock": "^27.4.2",
+ "jest-haste-map": "^27.4.6",
+ "jest-message-util": "^27.4.6",
+ "jest-mock": "^27.4.6",
"jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.2",
- "jest-snapshot": "^27.4.2",
+ "jest-resolve": "^27.4.6",
+ "jest-snapshot": "^27.4.6",
"jest-util": "^27.4.2",
- "jest-validate": "^27.4.2",
"slash": "^3.0.0",
- "strip-bom": "^4.0.0",
- "yargs": "^16.2.0"
+ "strip-bom": "^4.0.0"
},
"dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -11491,17 +10984,6 @@
"supports-color": "^7.1.0"
}
},
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -11517,44 +10999,18 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
"dev": true
},
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -11563,44 +11019,6 @@
"requires": {
"has-flag": "^4.0.0"
}
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- },
- "yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "dev": true
}
}
},
@@ -11615,34 +11033,32 @@
}
},
"jest-snapshot": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.2.tgz",
- "integrity": "sha512-DI7lJlNIu6WSQ+esqhnJzEzU70+dV+cNjoF1c+j5FagWEd3KtOyZvVliAH0RWNQ6KSnAAnKSU0qxJ8UXOOhuUQ==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.6.tgz",
+ "integrity": "sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ==",
"dev": true,
"requires": {
"@babel/core": "^7.7.2",
"@babel/generator": "^7.7.2",
- "@babel/parser": "^7.7.2",
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.0.0",
- "@jest/transform": "^27.4.2",
+ "@jest/transform": "^27.4.6",
"@jest/types": "^27.4.2",
"@types/babel__traverse": "^7.0.4",
"@types/prettier": "^2.1.5",
"babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
- "expect": "^27.4.2",
+ "expect": "^27.4.6",
"graceful-fs": "^4.2.4",
- "jest-diff": "^27.4.2",
+ "jest-diff": "^27.4.6",
"jest-get-type": "^27.4.0",
- "jest-haste-map": "^27.4.2",
- "jest-matcher-utils": "^27.4.2",
- "jest-message-util": "^27.4.2",
- "jest-resolve": "^27.4.2",
+ "jest-haste-map": "^27.4.6",
+ "jest-matcher-utils": "^27.4.6",
+ "jest-message-util": "^27.4.6",
"jest-util": "^27.4.2",
"natural-compare": "^1.4.0",
- "pretty-format": "^27.4.2",
+ "pretty-format": "^27.4.6",
"semver": "^7.3.2"
},
"dependencies": {
@@ -11680,20 +11096,11 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
},
"semver": {
"version": "7.3.5",
@@ -11712,12 +11119,6 @@
"requires": {
"has-flag": "^4.0.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
@@ -11787,9 +11188,9 @@
}
},
"jest-validate": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.2.tgz",
- "integrity": "sha512-hWYsSUej+Fs8ZhOm5vhWzwSLmVaPAxRy+Mr+z5MzeaHm9AxUpXdoVMEW4R86y5gOobVfBsMFLk4Rb+QkiEpx1A==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz",
+ "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==",
"dev": true,
"requires": {
"@jest/types": "^27.4.2",
@@ -11797,7 +11198,7 @@
"chalk": "^4.0.0",
"jest-get-type": "^27.4.0",
"leven": "^3.1.0",
- "pretty-format": "^27.4.2"
+ "pretty-format": "^27.4.6"
},
"dependencies": {
"ansi-styles": {
@@ -11852,12 +11253,12 @@
}
},
"jest-watcher": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.2.tgz",
- "integrity": "sha512-NJvMVyyBeXfDezhWzUOCOYZrUmkSCiatpjpm+nFUid74OZEHk6aMLrZAukIiFDwdbqp6mTM6Ui1w4oc+8EobQg==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.6.tgz",
+ "integrity": "sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw==",
"dev": true,
"requires": {
- "@jest/test-result": "^27.4.2",
+ "@jest/test-result": "^27.4.6",
"@jest/types": "^27.4.2",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
@@ -11866,15 +11267,6 @@
"string-length": "^4.0.1"
},
"dependencies": {
- "ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "dev": true,
- "requires": {
- "type-fest": "^0.21.3"
- }
- },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -11923,19 +11315,13 @@
"requires": {
"has-flag": "^4.0.0"
}
- },
- "type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "dev": true
}
}
},
"jest-worker": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz",
- "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz",
+ "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==",
"dev": true,
"requires": {
"@types/node": "*",
@@ -11961,9 +11347,9 @@
}
},
"jmespath": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
- "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc="
+ "version": "0.16.0",
+ "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz",
+ "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw=="
},
"js-sha3": {
"version": "0.8.0",
@@ -11982,12 +11368,18 @@
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "argparse": "^2.0.1"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ }
}
},
"jsbn": {
@@ -12041,12 +11433,6 @@
"mime-types": "^2.1.12"
}
},
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
- },
"tough-cookie": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
@@ -12057,6 +11443,32 @@
"punycode": "^2.1.1",
"universalify": "^0.1.2"
}
+ },
+ "tr46": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
+ "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.1"
+ }
+ },
+ "webidl-conversions": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
+ "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
+ "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.7.0",
+ "tr46": "^2.1.0",
+ "webidl-conversions": "^6.1.0"
+ }
}
}
},
@@ -12107,13 +11519,22 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
}
}
},
"json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
},
"json-schema-traverse": {
"version": "0.4.1",
@@ -12189,13 +11610,13 @@
}
},
"jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
- "json-schema": "0.2.3",
+ "json-schema": "0.4.0",
"verror": "1.10.0"
}
},
@@ -12280,6 +11701,11 @@
"ms": "2.0.0"
}
},
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
@@ -12316,9 +11742,9 @@
"dev": true
},
"koa": {
- "version": "2.13.1",
- "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.1.tgz",
- "integrity": "sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w==",
+ "version": "2.13.4",
+ "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.4.tgz",
+ "integrity": "sha512-43zkIKubNbnrULWlHdN5h1g3SEKXOEzoAlRsHOTFpnlDu8JlAOZSMJBLULusuXRequboiwJcj5vtYXKB3k7+2g==",
"dev": true,
"requires": {
"accepts": "^1.3.5",
@@ -12326,7 +11752,7 @@
"content-disposition": "~0.5.2",
"content-type": "^1.0.4",
"cookies": "~0.8.0",
- "debug": "~3.1.0",
+ "debug": "^4.3.2",
"delegates": "^1.0.0",
"depd": "^2.0.0",
"destroy": "^1.0.4",
@@ -12337,7 +11763,7 @@
"http-errors": "^1.6.3",
"is-generator-function": "^1.0.7",
"koa-compose": "^4.1.0",
- "koa-convert": "^1.2.0",
+ "koa-convert": "^2.0.0",
"on-finished": "^2.3.0",
"only": "~0.0.2",
"parseurl": "^1.3.2",
@@ -12346,15 +11772,6 @@
"vary": "^1.1.2"
},
"dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
"depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -12370,24 +11787,13 @@
"dev": true
},
"koa-convert": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz",
- "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz",
+ "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==",
"dev": true,
"requires": {
"co": "^4.6.0",
- "koa-compose": "^3.0.0"
- },
- "dependencies": {
- "koa-compose": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz",
- "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=",
- "dev": true,
- "requires": {
- "any-promise": "^1.1.0"
- }
- }
+ "koa-compose": "^4.1.0"
}
},
"koa-logger": {
@@ -12463,28 +11869,6 @@
"integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
"dev": true
},
- "loader-utils": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
- "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- },
- "dependencies": {
- "json5": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- }
- }
- },
"locate-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
@@ -12499,12 +11883,6 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
- "lodash.camelcase": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
- "dev": true
- },
"lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
@@ -12602,13 +11980,13 @@
}
},
"log-node": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/log-node/-/log-node-8.0.2.tgz",
- "integrity": "sha512-H+3t002yGqZRJhVW3A/EksIB7i1M84cwcWzBPsnAmQWOA2ePAV2fXJpNPBnw6VEdhzPcedIxQwT5jhBVTlYQww==",
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/log-node/-/log-node-8.0.3.tgz",
+ "integrity": "sha512-1UBwzgYiCIDFs8A0rM2QdBFo8Wd8UQ0HrSTu/MNI+/2zN3NoHRj2fhplurAyuxTYUXu3Oohugq1jAn5s05u1MQ==",
"requires": {
"ansi-regex": "^5.0.1",
- "cli-color": "^2.0.0",
- "cli-sprintf-format": "^1.1.0",
+ "cli-color": "^2.0.1",
+ "cli-sprintf-format": "^1.1.1",
"d": "^1.0.1",
"es5-ext": "^0.10.53",
"sprintf-kit": "^2.0.1",
@@ -12616,11 +11994,6 @@
"type": "^2.5.0"
},
"dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
- },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -12637,21 +12010,21 @@
}
},
"logform": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz",
- "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/logform/-/logform-2.3.2.tgz",
+ "integrity": "sha512-V6JiPThZzTsbVRspNO6TmHkR99oqYTs8fivMBYQkjZj6rxW92KxtDCPE6IkAk1DNBnYKNkjm4jYBm6JDUcyhOA==",
"requires": {
- "colors": "^1.2.1",
- "fast-safe-stringify": "^2.0.4",
- "fecha": "^2.3.3",
+ "colors": "1.4.0",
+ "fecha": "^4.2.0",
"ms": "^2.1.1",
+ "safe-stable-stringify": "^1.1.0",
"triple-beam": "^1.3.0"
},
"dependencies": {
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
}
}
},
@@ -12679,6 +12052,14 @@
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
"integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
},
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
"lru-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
@@ -12703,11 +12084,11 @@
}
},
"make-dir": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
- "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
"requires": {
- "pify": "^3.0.0"
+ "semver": "^6.0.0"
}
},
"make-error": {
@@ -12773,15 +12154,6 @@
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
},
- "merge-source-map": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
- "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
- "dev": true,
- "requires": {
- "source-map": "^0.6.1"
- }
- },
"merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -12835,17 +12207,24 @@
"integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="
},
"mime-types": {
- "version": "2.1.26",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
- "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
+ "version": "2.1.34",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
+ "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
"requires": {
- "mime-db": "1.43.0"
+ "mime-db": "1.51.0"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.51.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g=="
+ }
}
},
"mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
},
"mimic-response": {
"version": "1.0.1",
@@ -12876,18 +12255,11 @@
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"minipass": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
- "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz",
+ "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==",
"requires": {
"yallist": "^4.0.0"
- },
- "dependencies": {
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- }
}
},
"minizlib": {
@@ -12897,13 +12269,6 @@
"requires": {
"minipass": "^3.0.0",
"yallist": "^4.0.0"
- },
- "dependencies": {
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- }
}
},
"mkdirp": {
@@ -12928,9 +12293,9 @@
}
},
"ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"multimatch": {
"version": "5.0.0",
@@ -12946,9 +12311,9 @@
}
},
"mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
},
"nan": {
"version": "2.15.0",
@@ -13052,9 +12417,12 @@
}
},
"node-fetch": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
- "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
},
"node-inspect-extracted": {
"version": "1.0.8",
@@ -13067,12 +12435,6 @@
"integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
"dev": true
},
- "node-modules-regexp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
- "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
- "dev": true
- },
"node-releases": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
@@ -13257,11 +12619,11 @@
"integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4="
},
"onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"requires": {
- "mimic-fn": "^1.0.0"
+ "mimic-fn": "^2.1.0"
}
},
"only": {
@@ -13588,9 +12950,9 @@
"integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw=="
},
"pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
},
"pinkie": {
"version": "2.0.4",
@@ -13606,64 +12968,52 @@
}
},
"pirates": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
- "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
- "dev": true,
- "requires": {
- "node-modules-regexp": "^1.0.0"
- }
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz",
+ "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==",
+ "dev": true
},
"pkg-dir": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
- "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
"requires": {
- "find-up": "^2.1.0"
+ "find-up": "^4.0.0"
},
"dependencies": {
"find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"requires": {
- "locate-path": "^2.0.0"
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
}
},
"locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"requires": {
- "p-try": "^1.0.0"
+ "p-locate": "^4.1.0"
}
},
"p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"requires": {
- "p-limit": "^1.1.0"
+ "p-limit": "^2.2.0"
}
},
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true
}
}
@@ -13720,91 +13070,24 @@
}
},
"postcss": {
- "version": "8.3.5",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz",
- "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==",
+ "version": "8.4.5",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
+ "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
"dev": true,
"requires": {
- "colorette": "^1.2.2",
- "nanoid": "^3.1.23",
- "source-map-js": "^0.6.2"
+ "nanoid": "^3.1.30",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.1"
},
"dependencies": {
"nanoid": {
- "version": "3.1.23",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz",
- "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
+ "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
"dev": true
}
}
},
- "postcss-modules": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.1.3.tgz",
- "integrity": "sha512-dBT39hrXe4OAVYJe/2ZuIZ9BzYhOe7t+IhedYeQ2OxKwDpAGlkEN/fR0fGnrbx4BvgbMReRX4hCubYK9cE/pJQ==",
- "dev": true,
- "requires": {
- "generic-names": "^2.0.1",
- "icss-replace-symbols": "^1.1.0",
- "lodash.camelcase": "^4.3.0",
- "postcss-modules-extract-imports": "^3.0.0",
- "postcss-modules-local-by-default": "^4.0.0",
- "postcss-modules-scope": "^3.0.0",
- "postcss-modules-values": "^4.0.0",
- "string-hash": "^1.1.1"
- }
- },
- "postcss-modules-extract-imports": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
- "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
- "dev": true
- },
- "postcss-modules-local-by-default": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz",
- "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==",
- "dev": true,
- "requires": {
- "icss-utils": "^5.0.0",
- "postcss-selector-parser": "^6.0.2",
- "postcss-value-parser": "^4.1.0"
- }
- },
- "postcss-modules-scope": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz",
- "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==",
- "dev": true,
- "requires": {
- "postcss-selector-parser": "^6.0.4"
- }
- },
- "postcss-modules-values": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
- "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
- "dev": true,
- "requires": {
- "icss-utils": "^5.0.0"
- }
- },
- "postcss-selector-parser": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
- "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
- "dev": true,
- "requires": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- }
- },
- "postcss-value-parser": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
- "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
- "dev": true
- },
"prebuild-install": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.0.tgz",
@@ -13853,9 +13136,9 @@
"integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
},
"prettier": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz",
- "integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==",
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz",
+ "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==",
"dev": true
},
"prettier-linter-helpers": {
@@ -13868,23 +13151,16 @@
}
},
"pretty-format": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz",
- "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==",
+ "version": "27.4.6",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz",
+ "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==",
"dev": true,
"requires": {
- "@jest/types": "^27.4.2",
"ansi-regex": "^5.0.1",
"ansi-styles": "^5.0.0",
"react-is": "^17.0.1"
},
"dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
"ansi-styles": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
@@ -13929,12 +13205,6 @@
"type": "^2.1.0"
}
},
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true
- },
"promise-queue": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/promise-queue/-/promise-queue-2.2.5.tgz",
@@ -14001,9 +13271,9 @@
}
},
"punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
"pupa": {
"version": "2.1.1",
@@ -14050,35 +13320,23 @@
"integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ=="
},
"qs": {
- "version": "6.9.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz",
- "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw=="
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
},
"query-ast": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/query-ast/-/query-ast-1.0.3.tgz",
- "integrity": "sha512-k7z4jilpZCujhiJ+QeKSwYXHc9HxqiVKlVE7/em0zBfPpcqnXKUP8F7ld7XaAkO6oXeAD7yonqcNJWqOF2pSGA==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/query-ast/-/query-ast-1.0.4.tgz",
+ "integrity": "sha512-KFJFSvODCBjIH5HbHvITj9EEZKYUU6VX0T5CuB1ayvjUoUaZkKMi6eeby5Tf8DMukyZHlJQOE1+f3vevKUe6eg==",
"dev": true,
"requires": {
- "invariant": "2.2.2",
- "lodash": "^4.17.15"
- },
- "dependencies": {
- "invariant": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
- "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
- "dev": true,
- "requires": {
- "loose-envify": "^1.0.0"
- }
- }
+ "invariant": "2.2.4"
}
},
"querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz",
+ "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg=="
},
"queue-microtask": {
"version": "1.2.3",
@@ -14091,9 +13349,9 @@
"integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
},
"ramda": {
- "version": "0.27.1",
- "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz",
- "integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw=="
+ "version": "0.26.1",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz",
+ "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ=="
},
"randomatic": {
"version": "3.1.1",
@@ -14127,33 +13385,14 @@
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"raw-body": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz",
+ "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==",
"requires": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
+ "bytes": "3.1.1",
+ "http-errors": "1.8.1",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
- },
- "dependencies": {
- "http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- }
}
},
"raw-loader": {
@@ -14421,10 +13660,15 @@
"uuid": "^3.3.2"
},
"dependencies": {
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
},
"uuid": {
"version": "3.4.0",
@@ -14473,13 +13717,14 @@
"dev": true
},
"resolve": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
- "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
"dev": true,
"requires": {
- "is-core-module": "^2.2.0",
- "path-parse": "^1.0.6"
+ "is-core-module": "^2.8.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
}
},
"resolve-alpn": {
@@ -14525,11 +13770,11 @@
}
},
"restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
"requires": {
- "onetime": "^2.0.0",
+ "onetime": "^5.1.0",
"signal-exit": "^3.0.2"
}
},
@@ -14553,17 +13798,17 @@
}
},
"run-async": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz",
- "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==",
- "requires": {
- "is-promise": "^2.1.0"
- }
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="
},
"run-parallel": {
- "version": "1.1.10",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz",
- "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw=="
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
},
"run-parallel-limit": {
"version": "1.1.0",
@@ -14593,9 +13838,9 @@
"dev": true
},
"s3rver": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/s3rver/-/s3rver-3.7.0.tgz",
- "integrity": "sha512-Y/omIxk13qeNmoitsRxbFD/ME9dlcbrais7biuKtdQX43WSufc8P2A482j3BpkjrkoA1F57oBq4skMgeljKzcg==",
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/s3rver/-/s3rver-3.7.1.tgz",
+ "integrity": "sha512-H9KIX6n8NqcfoE4ziFNbQASBQfjcNJgb+3wbT9L5iotEqfOncFO1c38cfJSFSo7xXTu1zM9HA6t2u9xKNlYRaA==",
"dev": true,
"requires": {
"@koa/router": "^9.0.0",
@@ -14641,18 +13886,25 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
"integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
},
+ "safe-stable-stringify": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz",
+ "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw=="
+ },
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"sass": {
- "version": "1.35.1",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.35.1.tgz",
- "integrity": "sha512-oCisuQJstxMcacOPmxLNiLlj4cUyN2+8xJnG7VanRoh2GOLr9RqkvI4AxA4a6LHVg/rsu+PmxXeGhrdSF9jCiQ==",
+ "version": "1.49.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.0.tgz",
+ "integrity": "sha512-TVwVdNDj6p6b4QymJtNtRS2YtLJ/CqZriGg0eIAbAKMlN8Xy6kbv33FsEZSF7FufFFM705SQviHjjThfaQ4VNw==",
"dev": true,
"requires": {
- "chokidar": ">=3.0.0 <4.0.0"
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
}
},
"sax": {
@@ -14686,13 +13938,12 @@
"integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA=="
},
"scss-parser": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/scss-parser/-/scss-parser-1.0.4.tgz",
- "integrity": "sha512-oDZwDfY2JhnDrHNZPcdcPNVTpAXsJBY2/uhFfN0IzMy1xExAfJDcI1Yl/VXhfRsdQL3wLeg6/Oxt3cafBOuMzQ==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/scss-parser/-/scss-parser-1.0.5.tgz",
+ "integrity": "sha512-RZOtvCmCnwkDo7kdcYBi807Y5EoTIxJ34AgEgJNDmOH1jl0/xG0FyYZFbH6Ga3Iwu7q8LSdxJ4C5UkzNXjQxKQ==",
"dev": true,
"requires": {
- "invariant": "2.2.4",
- "lodash": "^4.17.4"
+ "invariant": "2.2.4"
}
},
"seek-bzip": {
@@ -14724,9 +13975,9 @@
}
},
"send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "version": "0.17.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz",
+ "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==",
"requires": {
"debug": "2.6.9",
"depd": "~1.1.2",
@@ -14735,9 +13986,9 @@
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
- "http-errors": "~1.7.2",
+ "http-errors": "1.8.1",
"mime": "1.6.0",
- "ms": "2.1.1",
+ "ms": "2.1.3",
"on-finished": "~2.3.0",
"range-parser": "~1.2.1",
"statuses": "~1.5.0"
@@ -14758,22 +14009,10 @@
}
}
},
- "http-errors": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
- "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- }
- },
"ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}
}
},
@@ -14795,54 +14034,53 @@
}
},
"serve-static": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
- "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz",
+ "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==",
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
- "send": "0.17.1"
+ "send": "0.17.2"
}
},
"serverless": {
- "version": "2.67.0",
- "resolved": "https://registry.npmjs.org/serverless/-/serverless-2.67.0.tgz",
- "integrity": "sha512-FbiUlsQnpcVK5nffOS2T4YmHZHHxjadPCJi6NIFOWWWbcDr0Bbai225KF3oO+znF0zSkc0vPmXfkT0Tvm91/lA==",
+ "version": "2.72.1",
+ "resolved": "https://registry.npmjs.org/serverless/-/serverless-2.72.1.tgz",
+ "integrity": "sha512-SxmxyBgWQvcKvEXdP0fR3Y+nljOQ+nWCPDZXnhic//w+k0kNQ/bHcd3S1VZQqU3m7nZZwMsdC5lxB26EpUFELA==",
"requires": {
- "@serverless/cli": "^1.5.3",
- "@serverless/components": "^3.18.1",
- "@serverless/dashboard-plugin": "^5.5.1",
+ "@serverless/cli": "^1.6.0",
+ "@serverless/components": "^3.18.2",
+ "@serverless/dashboard-plugin": "^5.5.4",
"@serverless/platform-client": "^4.3.0",
- "@serverless/utils": "^5.20.1",
+ "@serverless/utils": "^5.20.3",
"ajv": "^6.12.6",
"ajv-keywords": "^3.5.2",
"archiver": "^5.3.0",
- "aws-sdk": "^2.1036.0",
+ "aws-sdk": "^2.1061.0",
"bluebird": "^3.7.2",
"boxen": "^5.1.2",
"cachedir": "^2.3.0",
"chalk": "^4.1.2",
"child-process-ext": "^2.1.1",
"ci-info": "^3.3.0",
- "cli-progress-footer": "^2.2.0",
+ "cli-progress-footer": "^2.3.0",
"d": "^1.0.1",
"dayjs": "^1.10.7",
"decompress": "^4.2.1",
"dotenv": "^10.0.0",
"dotenv-expand": "^5.1.0",
- "essentials": "^1.1.1",
+ "essentials": "^1.2.0",
"ext": "^1.6.0",
"fastest-levenshtein": "^1.0.12",
- "filesize": "^8.0.6",
+ "filesize": "^8.0.7",
"fs-extra": "^9.1.0",
"get-stdin": "^8.0.0",
- "globby": "^11.0.4",
+ "globby": "^11.1.0",
"got": "^11.8.3",
- "graceful-fs": "^4.2.8",
+ "graceful-fs": "^4.2.9",
"https-proxy-agent": "^5.0.0",
"is-docker": "^2.2.1",
- "is-wsl": "^2.2.0",
"js-yaml": "^4.1.0",
"json-cycle": "^1.3.0",
"json-refs": "^3.0.15",
@@ -14850,8 +14088,8 @@
"memoizee": "^0.4.15",
"micromatch": "^4.0.4",
"ncjsm": "^4.2.0",
- "node-fetch": "^2.6.6",
- "object-hash": "^2.2.0",
+ "node-fetch": "^2.6.7",
+ "open": "^7.4.2",
"path2": "^0.1.0",
"process-utils": "^4.0.0",
"promise-queue": "^2.2.5",
@@ -14868,10 +14106,94 @@
"yaml-ast-parser": "0.0.43"
},
"dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+ "@serverless/components": {
+ "version": "3.18.2",
+ "resolved": "https://registry.npmjs.org/@serverless/components/-/components-3.18.2.tgz",
+ "integrity": "sha512-jQSgd3unajU94R6vjzD0l+PS5lVcky0vrE1DOfb28VPgmaS48+I/niavWR7+SOt0mYjIkUlwBI73a2ZuqeYK6Q==",
+ "requires": {
+ "@serverless/platform-client": "^4.2.2",
+ "@serverless/platform-client-china": "^2.2.0",
+ "@serverless/utils": "^4.0.0",
+ "adm-zip": "^0.5.4",
+ "ansi-escapes": "^4.3.1",
+ "chalk": "^4.1.0",
+ "child-process-ext": "^2.1.1",
+ "chokidar": "^3.5.1",
+ "ci-info": "^3.2.0",
+ "dayjs": "^1.10.4",
+ "dotenv": "^8.2.0",
+ "fastest-levenshtein": "^1.0.12",
+ "figures": "^3.2.0",
+ "fs-extra": "^9.1.0",
+ "got": "^11.8.2",
+ "graphlib": "^2.1.8",
+ "https-proxy-agent": "^5.0.0",
+ "inquirer-autocomplete-prompt": "^1.3.0",
+ "js-yaml": "^3.14.1",
+ "memoizee": "^0.4.14",
+ "minimist": "^1.2.5",
+ "open": "^7.3.1",
+ "prettyoutput": "^1.2.0",
+ "ramda": "^0.27.1",
+ "semver": "^7.3.4",
+ "strip-ansi": "^6.0.0",
+ "tencent-serverless-http": "^1.3.1",
+ "traverse": "^0.6.6",
+ "uuid": "^8.3.2"
+ },
+ "dependencies": {
+ "@serverless/utils": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@serverless/utils/-/utils-4.1.0.tgz",
+ "integrity": "sha512-cl5uPaGg72z0sCUpF0zsOhwYYUV72Gxc1FwFfxltO8hSvMeFDvwD7JrNE4kHcIcKRjwPGbSH0fdVPUpErZ8Mog==",
+ "requires": {
+ "chalk": "^4.1.0",
+ "ci-info": "^3.1.1",
+ "inquirer": "^7.3.3",
+ "js-yaml": "^4.1.0",
+ "jwt-decode": "^3.1.2",
+ "lodash": "^4.17.21",
+ "ncjsm": "^4.1.0",
+ "type": "^2.5.0",
+ "uuid": "^8.3.2",
+ "write-file-atomic": "^3.0.3"
+ },
+ "dependencies": {
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ }
+ }
+ },
+ "dotenv": {
+ "version": "8.6.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
+ "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g=="
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ }
+ }
+ }
+ }
},
"ansi-styles": {
"version": "4.3.0",
@@ -14895,11 +14217,6 @@
"supports-color": "^7.1.0"
}
},
- "chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
- },
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -14918,49 +14235,33 @@
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz",
"integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q=="
},
+ "graceful-fs": {
+ "version": "4.2.9",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
+ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ=="
+ },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
},
- "is-docker": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
- "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
+ "jwt-decode": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz",
+ "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A=="
},
"node-fetch": {
- "version": "2.6.6",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz",
- "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==",
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
"requires": {
"whatwg-url": "^5.0.0"
}
},
- "object-hash": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
- "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
+ "ramda": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz",
+ "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA=="
},
"semver": {
"version": "7.3.5",
@@ -14985,57 +14286,122 @@
"requires": {
"has-flag": "^4.0.0"
}
+ }
+ }
+ },
+ "serverless-attach-permission-boundary": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/serverless-attach-permission-boundary/-/serverless-attach-permission-boundary-0.1.0.tgz",
+ "integrity": "sha512-XIsZMCPiQvwpIpUQX5aVkNvYcTTm7qYSMEGgKnTEKebNG5skN+JQDDHMnujlq+R+76kaK4LiNyni5tr88qLBqA==",
+ "dev": true
+ },
+ "serverless-domain-manager": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/serverless-domain-manager/-/serverless-domain-manager-5.4.1.tgz",
+ "integrity": "sha512-/40LMajeI/tcnMZWqrciewdajRQx6dn0FkBQw5BEE/o3ohGoP/pJyNJ98oRm9B37Cfri1T3BxgsDOOTCsJBGmg==",
+ "dev": true,
+ "requires": {
+ "aws-sdk": "^2.1061.0",
+ "chalk": "^4.1.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
},
- "tar": {
- "version": "6.1.11",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
- "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
+ "aws-sdk": {
+ "version": "2.1062.0",
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1062.0.tgz",
+ "integrity": "sha512-QIU8jwi7Uqyvw2HjsXXXUZv3V/6TinUzLewrdl2EdvonqZCXhwMgnZx2F9I2x62IKH1RqnINwFWdoK+OTgcAjA==",
+ "dev": true,
"requires": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^3.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
+ "buffer": "4.9.2",
+ "events": "1.1.1",
+ "ieee754": "1.1.13",
+ "jmespath": "0.16.0",
+ "querystring": "0.2.0",
+ "sax": "1.2.1",
+ "url": "0.10.3",
+ "uuid": "3.3.2",
+ "xml2js": "0.4.19"
}
},
- "tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
+ "buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
},
- "untildify": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "has-flag": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
- "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw=="
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
},
- "webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+ "jmespath": {
+ "version": "0.16.0",
+ "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz",
+ "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==",
+ "dev": true
},
- "whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
"requires": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
+ "has-flag": "^4.0.0"
}
},
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "dev": true
}
}
},
- "serverless-attach-permission-boundary": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/serverless-attach-permission-boundary/-/serverless-attach-permission-boundary-0.1.0.tgz",
- "integrity": "sha512-XIsZMCPiQvwpIpUQX5aVkNvYcTTm7qYSMEGgKnTEKebNG5skN+JQDDHMnujlq+R+76kaK4LiNyni5tr88qLBqA==",
- "dev": true
- },
"serverless-http": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/serverless-http/-/serverless-http-2.7.0.tgz",
@@ -15131,9 +14497,9 @@
}
},
"node-fetch": {
- "version": "2.6.6",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz",
- "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==",
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
"dev": true,
"requires": {
"whatwg-url": "^5.0.0"
@@ -15157,28 +14523,6 @@
"has-flag": "^4.0.0"
}
},
- "tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
- "dev": true
- },
- "webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
- "dev": true
- },
- "whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
- "dev": true,
- "requires": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
"ws": {
"version": "7.5.6",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz",
@@ -15214,9 +14558,9 @@
}
},
"serverless-s3-local": {
- "version": "0.6.20",
- "resolved": "https://registry.npmjs.org/serverless-s3-local/-/serverless-s3-local-0.6.20.tgz",
- "integrity": "sha512-SWNs58FwIAWSc9MDPurBo7poJlMQqoJ5eOf5pNARmqPWMu6LAdyQVRS+sMqzMqQVm86c+IjO9gIU2hbEzAXE3A==",
+ "version": "0.6.21",
+ "resolved": "https://registry.npmjs.org/serverless-s3-local/-/serverless-s3-local-0.6.21.tgz",
+ "integrity": "sha512-MTRzpd89jg1CKIgJ8sESkzbpczKCdqnzGXyMJfCG4N3KJpfC/glbAw8RxiDVJV/eW+yeM+gKqigPg/Xv+7YvZQ==",
"dev": true,
"requires": {
"aws-sdk": "^2.916.0",
@@ -15225,7 +14569,7 @@
"rxjs-compat": "^6.6.7",
"s3rver": "^3.7.0",
"serverless-offline": "^8.0.0",
- "shelljs": "^0.8.4"
+ "shelljs": "^0.8.5"
},
"dependencies": {
"fs-extra": {
@@ -15331,9 +14675,9 @@
"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
},
"setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
"sha256-uint8array": {
"version": "0.10.1",
@@ -15354,9 +14698,9 @@
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
},
"shelljs": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz",
- "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==",
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
"dev": true,
"requires": {
"glob": "^7.0.0",
@@ -15411,9 +14755,9 @@
}
},
"simple-git": {
- "version": "2.47.1",
- "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.47.1.tgz",
- "integrity": "sha512-DF4rnBr4uzMQsreqxHg8t1wN4Pi3kj/shBVT1OO+aBkBnscCZ02tynKHc9cx3StNPnItHWAaoN31qkRNDhh5Ow==",
+ "version": "2.48.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.48.0.tgz",
+ "integrity": "sha512-z4qtrRuaAFJS4PUd0g+xy7aN4y+RvEt/QTJpR184lhJguBA1S/LsVlvE/CM95RsYMOFJG3NGGDjqFCzKU19S/A==",
"requires": {
"@kwsites/file-exists": "^1.1.1",
"@kwsites/promise-deferred": "^1.1.1",
@@ -15451,9 +14795,9 @@
}
},
"snyk": {
- "version": "1.707.0",
- "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.707.0.tgz",
- "integrity": "sha512-r99f8akVRFPryHAkcgmwH0TA2DdTyT1p0BwgnxPOK6Aak2phfhDF3w+EkmNoVC8p+lGYKeR3PaFW++tV9RQVrQ=="
+ "version": "1.834.0",
+ "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.834.0.tgz",
+ "integrity": "sha512-0XKshpV1azNRxOKwFV+NuR/ukT0OAhsUZI/jSN6O2XIQ5lYWXC8wNgvtpJ4pmhekMjBCj4rH6mxYDo2USWEZ1g=="
},
"socket.io-client": {
"version": "2.4.0",
@@ -15480,6 +14824,11 @@
"requires": {
"ms": "2.0.0"
}
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
@@ -15505,6 +14854,11 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
"integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
@@ -15531,25 +14885,32 @@
"dev": true
},
"source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
},
"source-map-js": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
- "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true
},
"source-map-support": {
- "version": "0.5.19",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
- "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"dev": true,
"requires": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
}
},
"sourcemap-codec": {
@@ -15575,14 +14936,6 @@
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "requires": {
- "safe-buffer": "~5.2.0"
- }
}
}
},
@@ -15600,9 +14953,9 @@
}
},
"sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+ "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
@@ -15673,12 +15026,6 @@
"integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=",
"dev": true
},
- "string-hash": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz",
- "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=",
- "dev": true
- },
"string-length": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
@@ -15689,12 +15036,6 @@
"strip-ansi": "^6.0.0"
},
"dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
"strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -15703,24 +15044,42 @@
"requires": {
"ansi-regex": "^5.0.1"
}
- }
- }
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "dependencies": {
+ }
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "optional": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "optional": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
"strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "optional": true,
"requires": {
- "ansi-regex": "^3.0.0"
+ "ansi-regex": "^2.0.0"
}
}
}
@@ -15769,9 +15128,9 @@
}
},
"strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
"dev": true
},
"strip-dirs": {
@@ -15802,9 +15161,9 @@
}
},
"strnum": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.3.tgz",
- "integrity": "sha512-GVoRjsqAYZkAH16GDzfTuafuwKxzKdaaCQyLaWf37gOP1e2PPbAKWoME1OmO+c4RCKMfNrrPRDLFCNBFU45N/A==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
+ "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==",
"dev": true
},
"strtok3": {
@@ -15834,34 +15193,29 @@
},
"dependencies": {
"debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"requires": {
"ms": "^2.1.1"
}
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"supertest": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.1.6.tgz",
- "integrity": "sha512-0hACYGNJ8OHRg8CRITeZOdbjur7NLuNs0mBjVhdpxi7hP6t3QIbOzLON5RTUmZcy2I9riuII3+Pr2C7yztrIIg==",
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.2.tgz",
+ "integrity": "sha512-wCw9WhAtKJsBvh07RaS+/By91NNE0Wh0DN19/hWPlBOU8tAfOtbZoVSV4xXeoKoxgPx0rx2y+y+8660XtE7jzg==",
"dev": true,
"requires": {
"methods": "^1.1.2",
- "superagent": "^6.1.0"
+ "superagent": "^7.1.0"
},
"dependencies": {
"form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"dev": true,
"requires": {
"asynckit": "^0.4.0",
@@ -15869,25 +15223,36 @@
"mime-types": "^2.1.12"
}
},
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "formidable": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz",
+ "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==",
"dev": true,
"requires": {
- "yallist": "^4.0.0"
+ "dezalgo": "1.0.3",
+ "hexoid": "1.0.0",
+ "once": "1.4.0",
+ "qs": "6.9.3"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.9.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz",
+ "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==",
+ "dev": true
+ }
}
},
"mime": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
- "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==",
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
"dev": true
},
"qs": {
- "version": "6.10.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz",
- "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==",
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
+ "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
"dev": true,
"requires": {
"side-channel": "^1.0.4"
@@ -15914,29 +15279,23 @@
}
},
"superagent": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/superagent/-/superagent-6.1.0.tgz",
- "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.1.tgz",
+ "integrity": "sha512-CQ2weSS6M+doIwwYFoMatklhRbx6sVNdB99OEJ5czcP3cng76Ljqus694knFWgOj3RkrtxZqIgpe6vhe0J7QWQ==",
"dev": true,
"requires": {
"component-emitter": "^1.3.0",
- "cookiejar": "^2.1.2",
- "debug": "^4.1.1",
- "fast-safe-stringify": "^2.0.7",
- "form-data": "^3.0.0",
- "formidable": "^1.2.2",
+ "cookiejar": "^2.1.3",
+ "debug": "^4.3.3",
+ "fast-safe-stringify": "^2.1.1",
+ "form-data": "^4.0.0",
+ "formidable": "^2.0.1",
"methods": "^1.1.2",
- "mime": "^2.4.6",
- "qs": "^6.9.4",
+ "mime": "^2.5.0",
+ "qs": "^6.10.1",
"readable-stream": "^3.6.0",
- "semver": "^7.3.2"
+ "semver": "^7.3.5"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
@@ -15975,6 +15334,12 @@
}
}
},
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true
+ },
"symbol-tree": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
@@ -15994,10 +15359,107 @@
"untildify": "^3.0.3"
},
"dependencies": {
- "es6-promisify": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz",
- "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg=="
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ=="
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
+ "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw=="
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "inquirer": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
+ "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
+ "requires": {
+ "ansi-escapes": "^3.2.0",
+ "chalk": "^2.4.2",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^2.0.0",
+ "lodash": "^4.17.12",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rxjs": "^6.4.0",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^5.1.0",
+ "through": "^2.3.6"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "untildify": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz",
+ "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA=="
}
}
},
@@ -16007,6 +15469,31 @@
"integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
"dev": true
},
+ "tar": {
+ "version": "6.1.11",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
+ "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
+ "requires": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^3.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
+ }
+ }
+ },
"tar-fs": {
"version": "1.16.3",
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz",
@@ -16096,34 +15583,17 @@
"requires": {
"ansi-escapes": "^4.2.1",
"supports-hyperlinks": "^2.0.0"
- },
- "dependencies": {
- "ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "dev": true,
- "requires": {
- "type-fest": "^0.21.3"
- }
- },
- "type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "dev": true
- }
}
},
"terser": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.2.tgz",
- "integrity": "sha512-0Omye+RD4X7X69O0eql3lC4Heh/5iLj3ggxR/B5ketZLOtLiOqukUgjw3q4PDnNQbsrkKr3UMypqStQG3XKRvw==",
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
+ "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"dev": true,
"requires": {
"commander": "^2.20.0",
"source-map": "~0.7.2",
- "source-map-support": "~0.5.19"
+ "source-map-support": "~0.5.20"
},
"dependencies": {
"commander": {
@@ -16141,28 +15611,18 @@
}
},
"terser-webpack-plugin": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz",
- "integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz",
+ "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==",
"dev": true,
"requires": {
- "jest-worker": "^27.0.6",
- "p-limit": "^3.1.0",
+ "jest-worker": "^27.4.1",
"schema-utils": "^3.1.1",
"serialize-javascript": "^6.0.0",
"source-map": "^0.6.1",
"terser": "^5.7.2"
},
"dependencies": {
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
"schema-utils": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
@@ -16173,6 +15633,12 @@
"ajv": "^6.12.5",
"ajv-keywords": "^3.5.2"
}
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
}
}
},
@@ -16260,11 +15726,6 @@
"is-number": "^7.0.0"
}
},
- "toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
- },
"token-types": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/token-types/-/token-types-4.1.1.tgz",
@@ -16288,31 +15749,12 @@
"requires": {
"psl": "^1.1.28",
"punycode": "^2.1.1"
- },
- "dependencies": {
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
- }
}
},
"tr46": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
- "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.1"
- },
- "dependencies": {
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
- }
- }
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
},
"traverse": {
"version": "0.6.6",
@@ -16338,9 +15780,9 @@
"integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
},
"ts-jest": {
- "version": "27.0.7",
- "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.7.tgz",
- "integrity": "sha512-O41shibMqzdafpuP+CkrOL7ykbmLh+FqQrXEmV9CydQ5JBk0Sj0uAEF5TNNe94fZWKm3yYvWa/IbyV4Yg1zK2Q==",
+ "version": "27.1.3",
+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz",
+ "integrity": "sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==",
"dev": true,
"requires": {
"bs-logger": "0.x",
@@ -16353,15 +15795,6 @@
"yargs-parser": "20.x"
},
"dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
@@ -16371,12 +15804,6 @@
"lru-cache": "^6.0.0"
}
},
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"yargs-parser": {
"version": "20.2.9",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
@@ -16522,19 +15949,13 @@
"requires": {
"minimist": "^1.2.0"
}
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "dev": true
}
}
},
"tslib": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz",
- "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA=="
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
},
"tsscmp": {
"version": "1.0.6",
@@ -16607,9 +16028,9 @@
}
},
"typescript": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz",
- "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==",
+ "version": "4.5.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
+ "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
"dev": true
},
"unbox-primitive": {
@@ -16639,17 +16060,6 @@
"requires": {
"buffer": "^5.2.1",
"through": "^2.3.8"
- },
- "dependencies": {
- "buffer": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.0.tgz",
- "integrity": "sha512-cd+5r1VLBwUqTrmnzW+D7ABkJUM6mr7uv1dv+6jRw4Rcl7tFIFHDqHPL98LhpGFn3dbAt3gtLxtrWp4m1kFrqg==",
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- }
}
},
"uni-global": {
@@ -16699,9 +16109,9 @@
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
"untildify": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz",
- "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
+ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw=="
},
"update-notifier": {
"version": "5.1.0",
@@ -16822,6 +16232,18 @@
"requires": {
"punycode": "1.3.2",
"querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+ }
}
},
"url-join": {
@@ -16867,9 +16289,9 @@
"dev": true
},
"v8-to-istanbul": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz",
- "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==",
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz",
+ "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.1",
@@ -16939,25 +16361,33 @@
}
},
"watchpack": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz",
- "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz",
+ "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==",
"dev": true,
"requires": {
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2"
}
},
+ "web-did-resolver": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/web-did-resolver/-/web-did-resolver-2.0.12.tgz",
+ "integrity": "sha512-bidL5bPn8CYFM33sfh465iLcgTbkNpfAlmpWkSC69D24fXnAY36tbMfhnehqIut+VCKZqIqeeZZl5ACanF5/+A==",
+ "requires": {
+ "cross-fetch": "^3.1.2",
+ "did-resolver": "^3.1.5"
+ }
+ },
"webidl-conversions": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
- "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
- "dev": true
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
},
"webpack": {
- "version": "5.64.4",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.64.4.tgz",
- "integrity": "sha512-LWhqfKjCLoYJLKJY8wk2C3h77i8VyHowG3qYNZiIqD6D0ZS40439S/KVuc/PY48jp2yQmy0mhMknq8cys4jFMw==",
+ "version": "5.67.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.67.0.tgz",
+ "integrity": "sha512-LjFbfMh89xBDpUMgA1W9Ur6Rn/gnr2Cq1jjHFPo4v6a79/ypznSYbAyPgGhwsxBtMIaEmDD1oJoA7BEYw/Fbrw==",
"dev": true,
"requires": {
"@types/eslint-scope": "^3.7.0",
@@ -16974,7 +16404,7 @@
"eslint-scope": "5.1.1",
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.4",
+ "graceful-fs": "^4.2.9",
"json-parse-better-errors": "^1.0.2",
"loader-runner": "^4.2.0",
"mime-types": "^2.1.27",
@@ -16982,8 +16412,8 @@
"schema-utils": "^3.1.0",
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.1.3",
- "watchpack": "^2.3.0",
- "webpack-sources": "^3.2.2"
+ "watchpack": "^2.3.1",
+ "webpack-sources": "^3.2.3"
},
"dependencies": {
"events": {
@@ -16992,21 +16422,12 @@
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
"dev": true
},
- "mime-db": {
- "version": "1.49.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz",
- "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==",
+ "graceful-fs": {
+ "version": "4.2.9",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
+ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==",
"dev": true
},
- "mime-types": {
- "version": "2.1.32",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz",
- "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==",
- "dev": true,
- "requires": {
- "mime-db": "1.49.0"
- }
- },
"schema-utils": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
@@ -17019,9 +16440,9 @@
}
},
"tapable": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz",
- "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
"dev": true
}
}
@@ -17033,9 +16454,9 @@
"dev": true
},
"webpack-sources": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz",
- "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
+ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
"dev": true
},
"whatwg-encoding": {
@@ -17054,14 +16475,12 @@
"dev": true
},
"whatwg-url": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
- "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
- "dev": true,
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
"requires": {
- "lodash": "^4.7.0",
- "tr46": "^2.1.0",
- "webidl-conversions": "^6.1.0"
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
}
},
"which": {
@@ -17138,24 +16557,29 @@
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "requires": {
- "safe-buffer": "~5.2.0"
- }
}
}
},
"winston-transport": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz",
- "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==",
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.2.tgz",
+ "integrity": "sha512-9jmhltAr5ygt5usgUTQbEiw/7RYXpyUbEAFRCSicIacpUzPkrnQsQZSPGEI12aLK9Jth4zNcYJx3Cvznwrl8pw==",
"requires": {
- "readable-stream": "^2.3.6",
+ "logform": "^2.3.2",
+ "readable-stream": "^3.4.0",
"triple-beam": "^1.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
}
},
"word-wrap": {
@@ -17254,6 +16678,11 @@
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
"integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
},
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
"yaml": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
@@ -17346,12 +16775,6 @@
"dev": true,
"optional": true
},
- "yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true
- },
"zip-stream": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz",
diff --git a/package.json b/package.json
index 19aa8048..14b87ae0 100644
--- a/package.json
+++ b/package.json
@@ -25,30 +25,31 @@
"dependencies": {
"@ahryman40k/ts-fhir-types": "^4.0.36",
"@govtechsg/oa-schemata": "^1.15.10",
- "@govtechsg/oa-verify": "^7.7.0",
+ "@govtechsg/oa-verify": "^7.8.0",
"@govtechsg/open-attestation": "^6.2.0",
- "@middy/core": "^2.5.3",
- "@middy/http-error-handler": "^2.5.3",
- "@middy/http-json-body-parser": "^2.5.3",
- "@middy/ssm": "^2.5.3",
- "@notarise-gov-sg/gpay-covid-cards": "^1.0.4",
+ "@middy/core": "^2.5.6",
+ "@middy/http-error-handler": "^2.5.6",
+ "@middy/http-json-body-parser": "^2.5.6",
+ "@middy/ssm": "^2.5.7",
+ "@notarise-gov-sg/gpay-covid-cards": "^1.0.5",
"@notarise-gov-sg/i18n-nationality": "^1.2.2",
"@notarise-gov-sg/sns-notify-recipients": "^1.5.2",
"@pathcheck/dcc-sdk": "0.0.17",
"@types/url-join": "^4.0.1",
- "aws-sdk": "^2.1036.0",
+ "aws-sdk": "^2.1062.0",
"aws-xray-sdk-core": "^3.3.4",
"axios": "^0.24.0",
- "debug": "^4.3.2",
+ "debug": "^4.3.3",
"fhir": "^4.11.1",
"file-loader": "^6.2.0",
+ "file-type": "16.5.3",
"he": "1.2.0",
"http-errors": "1.8.1",
"lodash": "^4.17.21",
"middy-middleware-json-error-handler": "^3.0.0",
"moment-timezone": "^0.5.34",
"runtypes": "^6.5.0",
- "serverless": "^2.66.2",
+ "serverless": "^2.72.1",
"serverless-http": "^2.7.0",
"serverless-offline-ses": "https://github.com/rjchow/serverless-offline-ses/tarball/release/1",
"serverless-plugin-aws-alerts": "^1.7.4",
@@ -58,43 +59,44 @@
"validate.js": "^0.13.1"
},
"devDependencies": {
- "@babel/preset-env": "^7.16.4",
- "@babel/preset-typescript": "^7.16.0",
- "@govtechsg/serverless-selective-functions": "^0.1.1",
- "@types/aws-lambda": "^8.10.85",
+ "@babel/preset-env": "^7.16.11",
+ "@babel/preset-typescript": "^7.16.7",
+ "@govtechsg/serverless-selective-functions": "^0.1.2",
+ "@types/aws-lambda": "^8.10.91",
"@types/debug": "^4.1.7",
"@types/dotenv": "^8.2.0",
"@types/he": "^1.1.2",
- "@types/http-errors": "^1.8.1",
- "@types/jest": "^27.0.3",
- "@types/lodash": "^4.14.177",
- "@types/qrcode": "^1.4.1",
+ "@types/http-errors": "^1.8.2",
+ "@types/jest": "^27.4.0",
+ "@types/lodash": "^4.14.178",
+ "@types/qrcode": "^1.4.2",
"@types/supertest": "^2.0.11",
- "@types/uuid": "^8.3.3",
- "@typescript-eslint/eslint-plugin": "^5.4.0",
- "@typescript-eslint/parser": "^5.4.0",
+ "@types/uuid": "^8.3.4",
+ "@typescript-eslint/eslint-plugin": "^5.10.0",
+ "@typescript-eslint/parser": "^5.10.0",
"cross-env": "^7.0.3",
- "depcheck": "^1.4.2",
- "eslint": "^8.3.0",
+ "depcheck": "^1.4.3",
+ "eslint": "^8.7.0",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-config-prettier": "^8.3.0",
- "eslint-plugin-import": "^2.25.3",
- "eslint-plugin-jest": "^25.3.0",
+ "eslint-plugin-import": "^2.25.4",
+ "eslint-plugin-jest": "^25.7.0",
"eslint-plugin-prettier": "^4.0.0",
"fork-ts-checker-webpack-plugin": "^6.4.2",
- "jest": "^27.3.1",
+ "jest": "^27.4.7",
"jest-raw-loader": "^1.0.1",
- "prettier": "^2.5.0",
+ "prettier": "^2.5.1",
"raw-loader": "^4.0.2",
"serverless-attach-permission-boundary": "^0.1.0",
+ "serverless-domain-manager": "^5.4.1",
"serverless-offline": "^8.3.1",
- "serverless-s3-local": "^0.6.20",
+ "serverless-s3-local": "^0.6.21",
"serverless-webpack": "^5.6.0",
- "supertest": "^6.1.6",
- "ts-jest": "^27.0.7",
+ "supertest": "^6.2.2",
+ "ts-jest": "^27.1.3",
"ts-loader": "^9.2.6",
- "typescript": "^4.5.2",
- "webpack": "^5.64.4",
+ "typescript": "^4.5.5",
+ "webpack": "^5.67.0",
"webpack-node-externals": "^3.0.0"
}
}
diff --git a/serverless.yml b/serverless.yml
index 28ae0c44..ad346717 100644
--- a/serverless.yml
+++ b/serverless.yml
@@ -2,7 +2,7 @@ service: api-notarise-healthcerts
provider:
name: aws
- runtime: nodejs12.x
+ runtime: nodejs14.x
memorySize: 256
timeout: 30 # optional, in seconds, default is 6
stage: ${opt:stage, "dev"}
@@ -70,43 +70,6 @@ provider:
burstLimit: 200
rateLimit: 100
functions:
- notarisePdt:
- environment:
- STAGE: ${self:provider.stage}
- DEBUG: "*,-follow-redirects"
- INFURA_API_KEY: ${self:custom.${self:custom.envSource}.INFURA_API_KEY}
- SIGNING_DID_NAME: ${self:custom.${self:custom.envSource}.SIGNING_DID_NAME}
- SIGNING_DNS_DID_LOCATION: ${self:custom.${self:custom.envSource}.SIGNING_DNS_DID_LOCATION}
- SIGNING_DID: ${self:custom.${self:custom.envSource}.SIGNING_DID}
- SIGNING_DID_KEY: ${self:custom.${self:custom.envSource}.SIGNING_DID_KEY}
- SIGNING_DID_PRIVATE_KEY: ${self:custom.${self:custom.envSource}.SIGNING_DID_PRIVATE_KEY}
- TRANSIENT_STORAGE_URL: ${self:custom.${self:custom.envSource}.TRANSIENT_STORAGE_URL}
- TRANSIENT_STORAGE_API_KEY: ${self:custom.${self:custom.envSource}.TRANSIENT_STORAGE_API_KEY}
- NOTIFICATION_ENABLED: ${self:custom.${self:custom.envSource}.NOTIFICATION_ENABLED}
- NOTIFICATION_TOPIC_ARN: ${self:custom.${self:custom.envSource}.NOTIFICATION_TOPIC_ARN}
- NOTIFICATION_SENDER_NAME: ${self:custom.${self:custom.envSource}.NOTIFICATION_SENDER_NAME}
- NOTIFICATION_SENDER_LOGO: ${self:custom.${self:custom.envSource}.NOTIFICATION_SENDER_LOGO}
- NOTIFICATION_TEMPLATE_ID: ${self:custom.${self:custom.envSource}.NOTIFICATION_TEMPLATE_ID}
- AUTHORIZED_ISSUERS_MAP: ${self:custom.${self:custom.envSource}.AUTHORIZED_ISSUERS_MAP}
- ETHEREUM_NETWORK: ${self:custom.ethereumConfig.${self:provider.stage}, self:custom.ethereumConfig.stg}
- USE_API_AUTHORISED_ISSUER: ${self:custom.${self:custom.envSource}.USE_API_AUTHORISED_ISSUER}
- AUTHORIZED_ISSUERS_API_URL: ${self:custom.${self:custom.envSource}.AUTHORIZED_ISSUERS_API_URL}
- AUTHORIZED_ISSUERS_API_KEY: ${self:custom.${self:custom.envSource}.AUTHORIZED_ISSUERS_API_KEY}
- OFFLINE_QR_ENABLED: ${self:custom.${self:custom.envSource}.OFFLINE_QR_ENABLED}
- SIGNING_EU_QR_NAME: ${self:custom.${self:custom.envSource}.SIGNING_EU_QR_NAME}
- SIGNING_EU_QR_PUBLIC_KEY: ${self:custom.${self:custom.envSource}.SIGNING_EU_QR_PUBLIC_KEY}
- SIGNING_EU_QR_PRIVATE_KEY: ${self:custom.${self:custom.envSource}.SIGNING_EU_QR_PRIVATE_KEY}
- WHITELIST_NRICS: ${self:custom.${self:custom.envSource}.WHITELIST_NRICS}
- handler: src/functionHandlers/notarisePdt/v1/handler.handler
- events:
- - http:
- path: /notarise/pdt
- method: post
- private: true
- - http:
- path: /v1/notarise/pdt
- method: post
- private: true
notarisePdtV2:
environment:
STAGE: ${self:provider.stage}
@@ -162,10 +125,13 @@ custom:
# ssm failure returns "undefined" while env failure returns ""
vpcDiscovery:
vpcName: "${env:VPC_NAME}"
- subnetNames: # optional if securityGroupNames are specified
- - "notarize-${self:custom.subnetEnvName.${self:provider.stage}, self:custom.subnetEnvName.other}-application-private-*"
- securityGroupNames:
- - "default"
+ subnets:
+ - tagKey: Name
+ tagValues:
+ - "notarize-${self:custom.subnetEnvName.${self:provider.stage}, self:custom.subnetEnvName.other}-application-private-*"
+ securityGroups:
+ - names:
+ - "default-application-vpc-*"
subnetEnvName:
stg: "stg"
production: "prd"
@@ -174,6 +140,17 @@ custom:
stg: "ssm"
production: "ssm"
other: "dotenv"
+ customDomainList:
+ production: "api-notarise-healthcerts.aws.notarise.gov.sg"
+ stg: "api-notarise-healthcerts.stg.notarise.io"
+ other: "api-notarise-healthcerts-${self:provider.stage}.stg.notarise.io"
+ customDomain:
+ domainName: "${self:custom.customDomainList.${self:provider.stage}, self:custom.customDomainList.other}"
+ basePath: ""
+ stage: ${self:provider.stage}
+ createRoute53Record: true
+ endpointType: regional
+ autoDomain: true
envSource: ${self:custom.envSourceConfig.${self:provider.stage}, self:custom.envSourceConfig.other}
KMS_ARN: ${env:KMS_ARN, "PLACEHOLDER_ARN"}
ethereumConfig:
@@ -271,6 +248,7 @@ plugins:
- serverless-s3-local
- serverless-offline
- serverless-offline-ses
+ - serverless-domain-manager
- serverless-attach-permission-boundary
- serverless-plugin-aws-alerts
- "@govtechsg/serverless-selective-functions"
diff --git a/src/common/datetime.ts b/src/common/datetime.ts
index c55ab2d7..fcf2c89a 100644
--- a/src/common/datetime.ts
+++ b/src/common/datetime.ts
@@ -1,5 +1,7 @@
// Replica of https://github.com/Notarise-gov-sg/healthcert-renderer/blob/352bc3ce4e24308942dce295b604a13daa394b0e/src/util/datetime.ts
+import moment from "moment-timezone";
+
const SG_LOCALE = "en-sg";
// FIXME: "en-sg" locale may not be supported in user's browser
@@ -38,3 +40,15 @@ export const isoToDateOnlyString = (iso = ""): string =>
day: "numeric",
year: "numeric",
});
+
+/**
+ * Returns a nicely formatted date-time string with GMT+08:00 timezone.
+ * @param iso "2020-09-28T06:15:00Z"
+ * @returns "9/28/20 6:15:00 AM GMT+08:00"
+ */
+export const parseDateTime = (dateString: string | undefined): string =>
+ dateString
+ ? `${moment
+ .tz(dateString, "Asia/Singapore")
+ .format("M/D/YY h:mm:ss A")} GMT+08:00`
+ : "";
diff --git a/src/common/healthCertDataValidation.test.ts b/src/common/healthCertDataValidation.test.ts
deleted file mode 100644
index 1abca5d3..00000000
--- a/src/common/healthCertDataValidation.test.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-import { validateHealthCertData } from "./healthCertDataValidation";
-import { DataInvalidError } from "./error";
-
-describe("validateHealthCertData", () => {
- test("should not flag optional data as invalid", () => {
- const testData = [
- {
- provider: "name",
- gender: "M",
- lab: "lab",
- nationality: "SG",
- nric: undefined,
- observationDate: "123",
- passportNumber: "123",
- patientName: "123",
- performerMcr: "123",
- performerName: "123",
- birthDate: "123",
- swabCollectionDate: "123",
- swabType: "123",
- testType: "123",
- },
- ];
- // @ts-ignore
- expect(() => validateHealthCertData(testData)).not.toThrow(
- DataInvalidError
- );
- });
-
- test("should not flag valid ART cert data as invalid", () => {
- const testData = [
- {
- provider: "name",
- gender: "M",
- lab: "lab",
- nationality: "SG",
- nric: undefined,
- observationDate: "123",
- passportNumber: "123",
- patientName: "123",
- performerMcr: "123",
- performerName: "123",
- birthDate: "123",
- swabCollectionDate: "123",
- swabType: "Anterior nares swab",
- swabTypeCode: "697989009",
- testType: "123",
- deviceIdentifier: "1232",
- },
- ];
- // @ts-ignore
- expect(() => validateHealthCertData(testData)).not.toThrow(
- DataInvalidError
- );
- });
-
- test("should flag device data missing as invalid in ART cert", () => {
- const testData = [
- {
- provider: "name",
- gender: "M",
- lab: "lab",
- nationality: "SG",
- nric: undefined,
- observationDate: "123",
- passportNumber: "123",
- patientName: "123",
- performerMcr: "123",
- performerName: "123",
- birthDate: "123",
- swabCollectionDate: "123",
- swabType: "Anterior nares swab",
- swabTypeCode: "697989009",
- testType: "123",
- },
- ];
- // @ts-ignore
- expect(() => validateHealthCertData(testData)).toThrow(DataInvalidError);
- });
-
- test("should flag missing required fields as invalid", () => {
- const testData = [
- {
- provider: "",
- gender: "",
- lab: "",
- nationality: "",
- nric: undefined,
- observationDate: "",
- passportNumber: "",
- patientName: "",
- performerMcr: "",
- performerName: "",
- birthDate: "",
- swabCollectionDate: "",
- swabType: "",
- testType: "",
- },
- ];
- // @ts-ignore
- expect(() => validateHealthCertData(testData)).toThrow(DataInvalidError);
- });
-});
diff --git a/src/common/healthCertDataValidation.ts b/src/common/healthCertDataValidation.ts
deleted file mode 100644
index 0de8eabb..00000000
--- a/src/common/healthCertDataValidation.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-// converts camelCase words to space seperated words
-// e.g passportNumber to passport number
-import { TestData } from "src/types";
-import { DataInvalidError } from "./error";
-import { config } from "../config";
-
-const { swabTestTypes } = config;
-
-const toEnglishWords = (variableName: string): string => {
- let newString = "";
- for (let i = 0; i < variableName.length; i += 1) {
- const character = variableName.charAt(i);
- if (character === character.toUpperCase()) {
- newString = `${newString} ${character.toLowerCase()}`;
- } else {
- newString += character;
- }
- }
- return newString;
-};
-
-// concats all required missing fields of test data to an a string array to be used
-// in the error message
-export const validateHealthCertData = (testDataList: TestData[]) => {
- const optionalData = ["nric", "lab", "deviceIdentifier"];
- const invalidParams: string[] = [];
- testDataList.forEach((testData) => {
- // art cert need to have device identifier
- if (
- testData.swabTypeCode === swabTestTypes.ART &&
- !testData.deviceIdentifier
- ) {
- invalidParams.push(toEnglishWords("deviceIdentifier"));
- }
- Object.entries(testData).forEach((entry) => {
- const [key, value] = entry;
- if (!value && !optionalData.includes(key)) {
- invalidParams.push(toEnglishWords(key));
- }
- });
- });
-
- // dedupe the invalid params
- invalidParams.filter(
- (value, index) => invalidParams.indexOf(value) === index
- );
-
- // for some reason the entire healthcert is malformed and no test data is pushed at all
- if (testDataList.length === 0) {
- throw new DataInvalidError([
- "observation",
- "specimen",
- "patient",
- "organisation",
- ]);
- }
- if (invalidParams.length > 0) {
- throw new DataInvalidError(invalidParams);
- }
-};
diff --git a/src/common/maskNricFin.test.ts b/src/common/maskNricFin.test.ts
index 720b2b51..6a254a88 100644
--- a/src/common/maskNricFin.test.ts
+++ b/src/common/maskNricFin.test.ts
@@ -1,25 +1,8 @@
import { R4 } from "@ahryman40k/ts-fhir-types";
-import { fhirBundleV1, Patient } from "../types";
-import { maskNricInFhirBundleV1, maskNricInFhirBundle } from "./maskNricFin";
-import pdtUnwrappedSampleV1 from "../../test/fixtures/v1/example_healthcert_with_nric_unwrapped.json";
+import { maskNricInFhirBundle } from "./maskNricFin";
import pdtUnwrappedSampleV2 from "../../test/fixtures/v2/pdt_pcr_with_nric_unwrapped.json";
describe("test maskNricFinInPlace function", () => {
- it("nric should be masked for V1 Healthcert", () => {
- const { fhirBundle } = pdtUnwrappedSampleV1;
-
- const maskedFhirBundle = maskNricInFhirBundleV1(fhirBundle as any);
- const patient = (maskedFhirBundle as fhirBundleV1).entry.find(
- (entry) => entry.resourceType === "Patient"
- );
- const nricIdentifier = (patient as Patient).identifier.find(
- (i) => i.type !== "PPN" && i.type.text.toUpperCase() === "NRIC"
- );
-
- expect(fhirBundle).not.toEqual(maskNricInFhirBundle);
- expect(nricIdentifier?.value).toStrictEqual("S****989Z");
- });
-
it("nric should be masked for V2 Healthcert", () => {
const { fhirBundle } = pdtUnwrappedSampleV2;
diff --git a/src/common/maskNricFin.ts b/src/common/maskNricFin.ts
index f7ce3671..6ca85d56 100644
--- a/src/common/maskNricFin.ts
+++ b/src/common/maskNricFin.ts
@@ -1,31 +1,11 @@
import { R4 } from "@ahryman40k/ts-fhir-types";
-import { fhirBundleV1, Patient, PDTHealthCertV2 } from "../types";
+import { PDTHealthCertV2 } from "../types";
// Get the reference to the nested nric identifier object
// mask the value in place
const maskNric = (nric: string) => `${nric[0]}****${nric.slice(5)}`;
-/**
- * @deprecated This function should be removed when PDT HealthCert v1.0 is deprecated.
- */
-export const maskNricInFhirBundleV1 = (
- fhirBundle: fhirBundleV1 | R4.IBundle
-) => {
- const patient = (fhirBundle as fhirBundleV1).entry.find(
- (entry) => entry.resourceType === "Patient"
- );
- const nricIdentifier = (patient as Patient).identifier.find(
- (i) => i.type !== "PPN" && i.type.text.toUpperCase() === "NRIC"
- );
-
- // Mask NRIC by reference
- if (nricIdentifier?.value)
- nricIdentifier.value = maskNric(nricIdentifier.value);
-
- return fhirBundle;
-};
-
export const maskNricInFhirBundle = (
fhirBundle: PDTHealthCertV2["fhirBundle"]
) => {
diff --git a/src/config.ts b/src/config.ts
index 11ab2334..c428d9cd 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -87,7 +87,8 @@ const generateConfig = () => ({
isGPayCovidCardEnabled: isTruthy(process.env.GPAY_COVID_CARD_ENABLED),
swabTestTypes: {
ART: "697989009",
- PCR: "258500001",
+ PCR_NASAL: "258500001",
+ PCR_SALIVA: "119342007",
},
});
diff --git a/src/functionHandlers/notarisePdt/v1/handler.ts b/src/functionHandlers/notarisePdt/v1/handler.ts
deleted file mode 100644
index 5cf58f98..00000000
--- a/src/functionHandlers/notarisePdt/v1/handler.ts
+++ /dev/null
@@ -1,113 +0,0 @@
-import { APIGatewayProxyResult, Handler } from "aws-lambda";
-import { v4 as uuid } from "uuid";
-import { getData, WrappedDocument } from "@govtechsg/open-attestation";
-import { notifyPdt } from "@notarise-gov-sg/sns-notify-recipients";
-import {
- getTestDataFromHealthCert,
- getParticularsFromHealthCert,
-} from "../../../models/healthCert";
-import { getLogger } from "../../../common/logger";
-import { DetailedCodedError } from "../../../common/error";
-import {
- HealthCertDocument,
- NotarisationResult,
- TestData,
-} from "../../../types";
-import { middyfy, ValidatedAPIGatewayProxyEvent } from "../../middyfy";
-import { validateInputs } from "../validateInputs";
-import { config } from "../../../config";
-import { notarisePdt } from "./notarisePdt";
-
-const { trace, error: logError } = getLogger(
- "src/functionHandlers/notarisePdt/v1/handler"
-);
-
-export const main: Handler = async (
- event: ValidatedAPIGatewayProxyEvent>
-): Promise => {
- trace("config", config);
- const reference = uuid();
- const certificate = event.body;
-
- // need to extract the nric first as the nric will be masked in place when notarisePdt()
- let data: HealthCertDocument = {} as any;
- let nric: string | undefined;
- let fin: string | undefined;
- let testData: TestData[] = [];
-
- try {
- data = getData(certificate);
- ({ nric, fin } = getParticularsFromHealthCert(data));
- testData = getTestDataFromHealthCert(data);
- } catch (e) {
- logError(`error extracting data from wrapped document. ${e}`);
- }
-
- const errorWithRef = logError.extend(`reference:${reference}`);
-
- try {
- await validateInputs(certificate);
-
- // ensure that all the required parameters can be read
- getTestDataFromHealthCert(data);
- } catch (e) {
- if (e instanceof DetailedCodedError) {
- errorWithRef(
- `Error while validating certificate: ${e.title}, ${e.messageBody}`
- );
- return {
- statusCode: 400,
- headers: {
- "x-trace-id": reference,
- },
- body: `${e.title}, ${e.messageBody}`,
- };
- }
- }
-
- let result: NotarisationResult | undefined;
-
- try {
- result = await notarisePdt(reference, certificate);
- } catch (e) {
- if (e instanceof Error) {
- errorWithRef(`Unhandled error: ${e.message}`);
- return {
- statusCode: 500,
- headers: {
- "x-trace-id": reference,
- },
- body: "",
- };
- }
- }
-
- /* Notify recipient via SPM (only if enabled) */
- if (config.notification.enabled) {
- try {
- if (result) {
- await notifyPdt({
- url: result.url,
- nric: nric || fin,
- passportNumber: testData[0].passportNumber,
- testData,
- validFrom: data.validFrom,
- });
- }
- } catch (e) {
- if (e instanceof Error) {
- errorWithRef(`Notification error: ${e.message}`);
- }
- }
- }
-
- return {
- statusCode: 200,
- headers: {
- "x-trace-id": reference,
- },
- body: JSON.stringify(result),
- };
-};
-
-export const handler = middyfy(main);
diff --git a/src/functionHandlers/notarisePdt/v1/notarisePdt.ts b/src/functionHandlers/notarisePdt/v1/notarisePdt.ts
deleted file mode 100644
index 25c149c0..00000000
--- a/src/functionHandlers/notarisePdt/v1/notarisePdt.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-import { getData, WrappedDocument } from "@govtechsg/open-attestation";
-import { notarise } from "@govtechsg/oa-schemata";
-import {
- getTestDataFromHealthCert,
- getParticularsFromHealthCert,
-} from "../../../models/healthCert";
-import { getLogger } from "../../../common/logger";
-import { createNotarizedHealthCert } from "../../../models/notarizedHealthCert";
-import {
- buildStoredUrl,
- getQueueNumber,
- uploadDocument,
-} from "../../../services/transientStorage";
-import { HealthCertDocument, NotarisationResult } from "../../../types";
-import { config, getDefaultIfUndefined } from "../../../config";
-import {
- createEuSignedTestQr,
- createEuTestCert,
-} from "../../../models/euHealthCert";
-
-const { trace } = getLogger(
- "src/functionHandlers/notarisePdt/v1/handler/notarisePdt"
-);
-
-export const notarisePdt = async (
- reference: string,
- certificate: WrappedDocument
-): Promise => {
- const errorWithRef = trace.extend(`reference:${reference}`);
- const traceWithRef = trace.extend(`reference:${reference}`);
-
- const { id, key } = await getQueueNumber(reference);
- traceWithRef(`placeholder document id: ${id}`);
-
- const storedUrl = buildStoredUrl(id, key);
- const data = getData(certificate);
- const testData = getTestDataFromHealthCert(data);
- const { nric, fin } = getParticularsFromHealthCert(data);
- const whiteListNrics = getDefaultIfUndefined(process.env.WHITELIST_NRICS, "")
- .split(",")
- .map((nirc) => nirc.trim());
- const patientNricFin = (nric || fin) ?? "";
- traceWithRef(
- `Is offline Qr nric/fin in whitelist : ${whiteListNrics.includes(
- patientNricFin
- )}`
- );
- let signedEuHealthCerts: notarise.SignedEuHealthCert[] = [];
- if (config.isOfflineQrEnabled || whiteListNrics.includes(patientNricFin)) {
- try {
- const testDataTypes = testData.map((test) => test.swabTypeCode);
- if (
- testDataTypes.includes(config.swabTestTypes.ART) ||
- testDataTypes.includes(config.swabTestTypes.PCR)
- ) {
- traceWithRef("signedEuHealthCerts: Generating EU test cert...");
- const euTestCerts = createEuTestCert(testData, reference, storedUrl);
- traceWithRef(euTestCerts);
- signedEuHealthCerts = await createEuSignedTestQr(euTestCerts);
- if (!signedEuHealthCerts.length) {
- throw new Error(
- `Generated EU Vacc Cert is invalid: signedEuHealthCerts has 0 entries`
- );
- }
- } else {
- traceWithRef(
- `signedEuHealthCerts: Unsupported test type - ${JSON.stringify(
- testDataTypes
- )}`
- );
- }
- } catch (e) {
- errorWithRef(
- `signedEuHealthCerts error: ${e instanceof Error ? e.message : e}`
- );
- }
- }
-
- const notarisedDocument = await createNotarizedHealthCert(
- certificate,
- reference,
- storedUrl,
- signedEuHealthCerts
- );
- const { ttl } = await uploadDocument(notarisedDocument, id, reference);
- traceWithRef("Document successfully notarised");
- return {
- notarisedDocument,
- ttl,
- url: storedUrl,
- };
-};
diff --git a/src/functionHandlers/notarisePdt/v2/handler.ts b/src/functionHandlers/notarisePdt/v2/handler.ts
index ed0c6d50..1f2474af 100644
--- a/src/functionHandlers/notarisePdt/v2/handler.ts
+++ b/src/functionHandlers/notarisePdt/v2/handler.ts
@@ -1,17 +1,13 @@
import { APIGatewayProxyResult, Handler } from "aws-lambda";
import { v4 as uuid } from "uuid";
import { getData, WrappedDocument } from "@govtechsg/open-attestation";
-import {
- notifyHealthCert,
- notifyPdt,
-} from "@notarise-gov-sg/sns-notify-recipients";
import { R4 } from "@ahryman40k/ts-fhir-types";
+import { sendNotification } from "../../../services/spmNotification";
import fhirHelper from "../../../models/fhir";
import { ParsedBundle } from "../../../models/fhir/types";
-import { getTestDataFromParseFhirBundle } from "../../../models/healthCertV2";
import { getLogger } from "../../../common/logger";
import { DetailedCodedError } from "../../../common/error";
-import { PDTHealthCertV2, NotarisationResult, TestData } from "../../../types";
+import { PDTHealthCertV2, NotarisationResult } from "../../../types";
import { middyfy, ValidatedAPIGatewayProxyEvent } from "../../middyfy";
import { validateV2Inputs } from "../validateInputs";
import { config } from "../../../config";
@@ -33,7 +29,6 @@ export const main: Handler = async (
/* 1. Validation */
let parsedFhirBundle: ParsedBundle;
let data: PDTHealthCertV2; // The unwrapped HealthCert
- let testData: TestData[];
try {
await validateV2Inputs(wrappedDocument);
data = getData(wrappedDocument);
@@ -43,9 +38,7 @@ export const main: Handler = async (
// validate parsed FhirBundle data with specific healthcert type constraints
fhirHelper.hasRequiredFields(data.type, parsedFhirBundle);
-
- // convert parsed Bundle to testdata[]
- testData = getTestDataFromParseFhirBundle(parsedFhirBundle);
+ fhirHelper.hasRecognisedFields(data.type, parsedFhirBundle);
} catch (e) {
errorWithRef(
`Error while validating certificate: ${
@@ -66,14 +59,13 @@ export const main: Handler = async (
/* 2. Endorsement */
let result: NotarisationResult;
- let directUrl: string;
try {
- ({ result, directUrl } = await notarisePdt(
+ result = await notarisePdt(
reference,
wrappedDocument,
- parsedFhirBundle as ParsedBundle,
- testData as TestData[]
- ));
+ data.type,
+ parsedFhirBundle as ParsedBundle
+ );
} catch (e) {
errorWithRef(`Unhandled error: ${e instanceof Error ? e.message : e}`);
return {
@@ -85,34 +77,10 @@ export const main: Handler = async (
};
}
- /* Send to SPM notification/wallet */
- if (parsedFhirBundle.patient?.nricFin && config.notification.enabled) {
+ /* Send to SPM notification/wallet (Only if enabled) */
+ if (config.notification.enabled) {
try {
- const testType =
- testData[0].swabTypeCode === config.swabTestTypes.PCR
- ? "PCR"
- : testData[0].swabTypeCode === config.swabTestTypes.ART
- ? "ART"
- : null;
- if (config.healthCertNotification.enabled && testType) {
- /* [NEW] Send HealthCert to SPM wallet for PCR | ART (Only if enabled) */
- await notifyHealthCert({
- uin: parsedFhirBundle.patient.nricFin,
- version: "2.0",
- type: testType,
- url: directUrl,
- expiry: result.ttl,
- });
- } else {
- /* Send SPM notification to recipient (Only if enabled) */
- await notifyPdt({
- url: result.url,
- nric: parsedFhirBundle.patient.nricFin,
- passportNumber: parsedFhirBundle.patient?.passportNumber,
- testData,
- validFrom: data.validFrom,
- });
- }
+ await sendNotification(result, parsedFhirBundle, data);
} catch (e) {
if (e instanceof Error) {
errorWithRef(`SPM notification/wallet error: ${e.message}`);
diff --git a/src/functionHandlers/notarisePdt/v2/notarisePdt.ts b/src/functionHandlers/notarisePdt/v2/notarisePdt.ts
index 57c2f0eb..cd98bda4 100644
--- a/src/functionHandlers/notarisePdt/v2/notarisePdt.ts
+++ b/src/functionHandlers/notarisePdt/v2/notarisePdt.ts
@@ -4,35 +4,32 @@ import { ParsedBundle } from "../../../models/fhir/types";
import { getLogger } from "../../../common/logger";
import { createNotarizedHealthCert } from "../../../models/notarizedHealthCertV2";
import {
- buildStoredDirectUrl,
- buildStoredUrl,
+ buildUniversalUrl,
getQueueNumber,
uploadDocument,
} from "../../../services/transientStorage";
-import { PDTHealthCertV2, NotarisationResult, TestData } from "../../../types";
+import { PDTHealthCertV2, NotarisationResult } from "../../../types";
import { config, getDefaultIfUndefined } from "../../../config";
-import {
- createEuSignedTestQr,
- createEuTestCert,
-} from "../../../models/euHealthCert";
+import { generateEuHealthCert } from "../../../models/euHealthCert";
+import { Type } from "../../../models/fhir/constraints";
const { trace } = getLogger("src/functionHandlers/notarisePdt/v2/notarisePdt");
export const notarisePdt = async (
reference: string,
certificate: WrappedDocument,
- parsedFhirBundle: ParsedBundle,
- testData: TestData[]
-): Promise<{ result: NotarisationResult; directUrl: string }> => {
+ type: Type,
+ parsedFhirBundle: ParsedBundle
+): Promise => {
const errorWithRef = trace.extend(`reference:${reference}`);
const traceWithRef = trace.extend(`reference:${reference}`);
+ /* Get transientStorage queue number for upload and build verify url. */
const { id, key } = await getQueueNumber(reference);
traceWithRef(`placeholder document id: ${id}`);
+ const universalUrl = buildUniversalUrl(id, key);
- const directUrl = buildStoredDirectUrl(id, key);
- const storedUrl = buildStoredUrl(id, key);
-
+ /* Get whitelisted nrics from SSM for enable some limited features in Prod. */
const whiteListNrics = getDefaultIfUndefined(process.env.WHITELIST_NRICS, "")
.split(",")
.map((nirc) => nirc.trim());
@@ -42,34 +39,17 @@ export const notarisePdt = async (
patientNricFin
)}`
);
+
+ /* Generate EU Test Health Cert (Only if enabled or Match with whitelisted NRIC) */
let signedEuHealthCerts: notarise.SignedEuHealthCert[] = [];
if (config.isOfflineQrEnabled || whiteListNrics.includes(patientNricFin)) {
try {
- const testDataTypes = testData.map((test) => test.swabTypeCode);
- if (
- testDataTypes.includes(config.swabTestTypes.ART) ||
- testDataTypes.includes(config.swabTestTypes.PCR)
- ) {
- traceWithRef("signedEuHealthCerts: Generating EU test cert...");
- const euTestCerts = await createEuTestCert(
- testData,
- reference,
- storedUrl
- );
- traceWithRef(euTestCerts);
- signedEuHealthCerts = await createEuSignedTestQr(euTestCerts);
- if (!signedEuHealthCerts.length) {
- throw new Error(
- `Generated EU Vacc Cert is invalid: signedEuHealthCerts has 0 entries`
- );
- }
- } else {
- traceWithRef(
- `signedEuHealthCerts: Unsupported test type - ${JSON.stringify(
- testDataTypes
- )}`
- );
- }
+ signedEuHealthCerts = await generateEuHealthCert(
+ type,
+ parsedFhirBundle,
+ reference,
+ universalUrl
+ );
} catch (e) {
errorWithRef(
`signedEuHealthCerts error: ${e instanceof Error ? e.message : e}`
@@ -77,21 +57,19 @@ export const notarisePdt = async (
}
}
+ /* Generate notarised Test Health Cert Document and Upload to transientStorage bucket. */
const notarisedDocument = await createNotarizedHealthCert(
certificate,
parsedFhirBundle,
reference,
- storedUrl,
+ universalUrl,
signedEuHealthCerts
);
const { ttl } = await uploadDocument(notarisedDocument, id, reference);
traceWithRef("Document successfully notarised");
return {
- result: {
- notarisedDocument,
- ttl,
- url: storedUrl,
- },
- directUrl,
+ notarisedDocument,
+ ttl,
+ url: universalUrl,
};
};
diff --git a/src/functionHandlers/notarisePdt/validateInputs/mock_image.json b/src/functionHandlers/notarisePdt/validateInputs/mock_image.json
new file mode 100644
index 00000000..188f5f00
--- /dev/null
+++ b/src/functionHandlers/notarisePdt/validateInputs/mock_image.json
@@ -0,0 +1,3 @@
+{
+ "33KB": "data:image/png;base64,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"
+}
diff --git a/src/functionHandlers/notarisePdt/validateInputs/validateDocument.test.ts b/src/functionHandlers/notarisePdt/validateInputs/validateDocument.test.ts
index 7ed216d6..d279671b 100644
--- a/src/functionHandlers/notarisePdt/validateInputs/validateDocument.test.ts
+++ b/src/functionHandlers/notarisePdt/validateInputs/validateDocument.test.ts
@@ -3,8 +3,10 @@ import _examplePcrHealthCertV1Wrapped from "../../../../test/fixtures/v1/example
import _examplePcrHealthCertV2Wrapped from "../../../../test/fixtures/v2/pdt_pcr_with_nric_wrapped.json";
import _exampleArtHealthCertV2Wrapped from "../../../../test/fixtures/v2/pdt_art_with_nric_wrapped.json";
import _examplePcrSerHealthCertV2Wrapped from "../../../../test/fixtures/v2/pdt_pcr_ser_multi_result_wrapped.json";
-import { validateDocument, validateV2Document } from "./validateDocument";
+import { validateV2Document } from "./validateDocument";
import { isAuthorizedIssuer } from "../authorizedIssuers";
+import { DocumentInvalidError } from "../../../common/error";
+import mockImage from "./mock_image.json";
jest.mock("@govtechsg/oa-verify");
@@ -104,101 +106,6 @@ beforeEach(() => {
whenFragmentsAreValid();
});
-it("should not throw on valid document", async () => {
- whenFragmentsAreValid();
- await expect(
- validateDocument(examplePcrHealthCertV1Wrapped)
- ).resolves.not.toThrow();
-});
-
-it("should throw on document failing OA verification", async () => {
- mockIsValid.mockReturnValue(false);
- await expect(validateDocument(examplePcrHealthCertV1Wrapped)).rejects.toThrow(
- /Invalid document error/
- );
-});
-
-it("should throw on document with multiple issuer identity passing (should not happen)", async () => {
- mockVerify.mockResolvedValue([
- ...validFragments,
- {
- name: "ADDITIONAL",
- type: "ISSUER_IDENTITY",
- data: {},
- status: "VALID",
- },
- ]);
- await expect(validateDocument(examplePcrHealthCertV1Wrapped)).rejects.toThrow(
- /Invalid document error/
- );
-});
-
-it("should throw on document with multiple issuers", async () => {
- mockVerify.mockResolvedValue([
- {
- name: "OpenAttestationDnsDid",
- type: "ISSUER_IDENTITY",
- data: [
- {
- location: "donotverify.testing.verify.gov.sg",
- key: "did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830#controller",
- status: "VALID",
- },
- {
- location: "donotverify2.testing.verify.gov.sg",
- key: "did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B831#controller",
- status: "VALID",
- },
- ],
- status: "VALID",
- },
- ]);
- await expect(validateDocument(examplePcrHealthCertV1Wrapped)).rejects.toThrow(
- /Invalid document error/
- );
-});
-
-it("should throw on document without issuer domain name (should not happen)", async () => {
- mockVerify.mockResolvedValue([
- {
- name: "OpenAttestationDnsDid",
- type: "ISSUER_IDENTITY",
- data: [
- {
- key: "did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830#controller",
- status: "VALID",
- },
- ],
- status: "VALID",
- },
- ]);
- await expect(validateDocument(examplePcrHealthCertV1Wrapped)).rejects.toThrow(
- /Invalid document error/
- );
-});
-
-it("should throw on document with unauthorized issuer domain", async () => {
- const unauthorizedIssuerDomain = "unauthorized.gov.sg";
- mockVerify.mockResolvedValue([
- {
- name: "OpenAttestationDnsDid",
- type: "ISSUER_IDENTITY",
- data: [
- {
- location: unauthorizedIssuerDomain,
- key: "did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830#controller",
- status: "VALID",
- },
- ],
- status: "VALID",
- },
- ]);
- mockIsAuthorizedIssuer.mockResolvedValue(false);
- await expect(validateDocument(examplePcrHealthCertV1Wrapped)).rejects.toThrow(
- /Unrecognised clinic error/
- );
-});
-
it("should not throw on valid PCR v2 document", async () => {
whenFragmentsAreValid();
await expect(
@@ -303,3 +210,157 @@ it("should throw on v2 document failing when document data type invalid", async
/Invalid document error/
);
});
+
+describe("document logo validation", () => {
+ const GENERIC_LOGO_ERROR = `Document should include a valid "logo" attribute in base64 image string or HTTPS direct link (i.e. /(^data:image\\/(png|jpg|jpeg);base64,.*$)|(^https:\\/\\/.*[.](png|jpg|jpeg)$)/)`;
+
+ it("should not throw on valid base64 image string", async () => {
+ whenFragmentsAreValid();
+ await expect(
+ validateV2Document(examplePcrHealthCertV2Wrapped)
+ ).resolves.not.toThrow();
+ });
+
+ it("should not throw on valid https url", async () => {
+ const sampleDocumentV2ValidLogo = { ...examplePcrHealthCertV2Wrapped };
+ sampleDocumentV2ValidLogo.data.logo =
+ "a60dd179-4029-44c5-8b77-296b10412836:string:https://www.notarise.gov.sg/images/notarise-logo.png";
+
+ whenFragmentsAreValid();
+ await expect(
+ validateV2Document(examplePcrHealthCertV2Wrapped)
+ ).resolves.not.toThrow();
+ });
+
+ it("should throw on invalid string", async () => {
+ const sampleDocumentV2InvalidLogo = { ...examplePcrHealthCertV2Wrapped };
+ sampleDocumentV2InvalidLogo.data.logo =
+ "a60dd179-4029-44c5-8b77-296b10412836:string:foobar";
+
+ let thrownError;
+ try {
+ await validateV2Document(sampleDocumentV2InvalidLogo);
+ } catch (e) {
+ if (e instanceof DocumentInvalidError) {
+ thrownError = { title: e.title, body: e.messageBody };
+ }
+ }
+ expect(thrownError).toStrictEqual({
+ title: `Submitted HealthCert is invalid`,
+ body: GENERIC_LOGO_ERROR,
+ });
+ });
+
+ it("should throw on invalid base64 image string", async () => {
+ const sampleDocumentV2InvalidLogo = { ...examplePcrHealthCertV2Wrapped };
+ sampleDocumentV2InvalidLogo.data.logo =
+ "a60dd179-4029-44c5-8b77-296b10412836:string:data:image/png;base64,foobar";
+
+ let thrownError;
+ try {
+ await validateV2Document(sampleDocumentV2InvalidLogo);
+ } catch (e) {
+ if (e instanceof DocumentInvalidError) {
+ thrownError = { title: e.title, body: e.messageBody };
+ }
+ }
+ expect(thrownError).toStrictEqual({
+ title: `Submitted HealthCert is invalid`,
+ body: `Document "logo" should resolve to a valid base64 image string (i.e. png|jpg|jpeg)`,
+ });
+ });
+
+ it("should throw on large base64 image string (>21KB)", async () => {
+ const sampleDocumentV2InvalidLogo = { ...examplePcrHealthCertV2Wrapped };
+ sampleDocumentV2InvalidLogo.data.logo = `a60dd179-4029-44c5-8b77-296b10412836:string:${mockImage["33KB"]}`;
+
+ let thrownError;
+ try {
+ await validateV2Document(sampleDocumentV2InvalidLogo);
+ } catch (e) {
+ if (e instanceof DocumentInvalidError) {
+ thrownError = { title: e.title, body: e.messageBody };
+ }
+ }
+ expect(thrownError).toStrictEqual({
+ title: `Submitted HealthCert is invalid`,
+ body: `Document "logo" in base64 image string is too large (33.95KB). Only <=21KB is supported.`,
+ });
+ });
+
+ it("should throw on https url with unknown format", async () => {
+ const sampleDocumentV2InvalidLogo = { ...examplePcrHealthCertV2Wrapped };
+ sampleDocumentV2InvalidLogo.data.logo =
+ "a60dd179-4029-44c5-8b77-296b10412836:string:http://example.com/image.foo";
+
+ let thrownError;
+ try {
+ await validateV2Document(sampleDocumentV2InvalidLogo);
+ } catch (e) {
+ if (e instanceof DocumentInvalidError) {
+ thrownError = { title: e.title, body: e.messageBody };
+ }
+ }
+ expect(thrownError).toStrictEqual({
+ title: `Submitted HealthCert is invalid`,
+ body: GENERIC_LOGO_ERROR,
+ });
+ });
+
+ it("should throw on https url with no direct link", async () => {
+ const sampleDocumentV2InvalidLogo = { ...examplePcrHealthCertV2Wrapped };
+ sampleDocumentV2InvalidLogo.data.logo =
+ "a60dd179-4029-44c5-8b77-296b10412836:string:http://example.com/image";
+
+ let thrownError;
+ try {
+ await validateV2Document(sampleDocumentV2InvalidLogo);
+ } catch (e) {
+ if (e instanceof DocumentInvalidError) {
+ thrownError = { title: e.title, body: e.messageBody };
+ }
+ }
+ expect(thrownError).toStrictEqual({
+ title: `Submitted HealthCert is invalid`,
+ body: GENERIC_LOGO_ERROR,
+ });
+ });
+
+ it("should throw on https url that is unresolvable", async () => {
+ const sampleDocumentV2InvalidLogo = { ...examplePcrHealthCertV2Wrapped };
+ sampleDocumentV2InvalidLogo.data.logo =
+ "a60dd179-4029-44c5-8b77-296b10412836:string:https://foobar.notarise/unknown.png";
+
+ let thrownError;
+ try {
+ await validateV2Document(sampleDocumentV2InvalidLogo);
+ } catch (e) {
+ if (e instanceof DocumentInvalidError) {
+ thrownError = { title: e.title, body: e.messageBody };
+ }
+ }
+ expect(thrownError).toStrictEqual({
+ title: `Submitted HealthCert is invalid`,
+ body: `Document "logo" should resolve to a valid HTTPS direct link (i.e. png|jpg|jpeg)`,
+ });
+ });
+
+ it("should throw on http url that is insecure", async () => {
+ const sampleDocumentV2InvalidLogo = { ...examplePcrHealthCertV2Wrapped };
+ sampleDocumentV2InvalidLogo.data.logo =
+ "a60dd179-4029-44c5-8b77-296b10412836:string:http://example.com/image.png";
+
+ let thrownError;
+ try {
+ await validateV2Document(sampleDocumentV2InvalidLogo);
+ } catch (e) {
+ if (e instanceof DocumentInvalidError) {
+ thrownError = { title: e.title, body: e.messageBody };
+ }
+ }
+ expect(thrownError).toStrictEqual({
+ title: `Submitted HealthCert is invalid`,
+ body: GENERIC_LOGO_ERROR,
+ });
+ });
+});
diff --git a/src/functionHandlers/notarisePdt/validateInputs/validateDocument.ts b/src/functionHandlers/notarisePdt/validateInputs/validateDocument.ts
index 1617656a..6d1e5c2e 100644
--- a/src/functionHandlers/notarisePdt/validateInputs/validateDocument.ts
+++ b/src/functionHandlers/notarisePdt/validateInputs/validateDocument.ts
@@ -8,57 +8,16 @@ import {
import { WrappedDocument, getData } from "@govtechsg/open-attestation";
import { pdtHealthCertV2 } from "@govtechsg/oa-schemata";
import _ from "lodash";
+import axios from "axios";
+import { fromStream, fromBuffer } from "file-type";
import { isAuthorizedIssuer } from "../authorizedIssuers";
-import { HealthCertDocument, PDTHealthCertV2 } from "../../../types";
+import { PDTHealthCertV2 } from "../../../types";
import {
UnrecognisedClinicError,
DocumentInvalidError,
} from "../../../common/error";
import { config } from "../../../config";
-/**
- * @deprecated This function should be removed when PDT HealthCert v1.0 is deprecated.
- */
-export const validateDocument = async (
- attachment: WrappedDocument
-) => {
- const verify =
- verificationBuilder(openAttestationVerifiers, {
- network: config.network,
- }) ?? defaultVerify;
-
- const results = await verify(attachment);
- const documentIsValid = isValid(results);
- if (!documentIsValid) {
- throw new DocumentInvalidError(
- `validation error: ${JSON.stringify(results)}`
- );
- }
- const identityFragments = results.filter(
- (fragment) =>
- fragment.status === "VALID" && fragment.type === "ISSUER_IDENTITY"
- );
- if (identityFragments.length !== 1)
- throw new DocumentInvalidError(
- "Document may only have one issuer identity test"
- );
-
- type IdentityFragment = VerificationFragment & {
- data: any;
- };
-
- const issuer = identityFragments[0] as IdentityFragment;
-
- if (!issuer || issuer.data.length !== 1) {
- throw new DocumentInvalidError("Document may only have one issuer");
- }
- const issuerDomain: string | undefined = issuer.data[0]?.location;
- if (!issuerDomain)
- throw new DocumentInvalidError("Issuer's domain is not found");
- const validDomain = await isAuthorizedIssuer(issuerDomain, "PCR"); // HealthCerts (in PDT Schema v1.0) are hardcoded to ONLY check against the PCR whitelist
- if (!validDomain) throw new UnrecognisedClinicError(issuerDomain, "PCR");
-};
-
export const validateV2Document = async (
wrappedDocument: WrappedDocument
) => {
@@ -124,7 +83,7 @@ export const validateV2Document = async (
if (!data.type)
throw new DocumentInvalidError(
- `Document should include a valid "type" attribute (e.g. "PCR", "ART", "SER", ["PCR", "SER"]`
+ `Document should include a valid "type" attribute (e.g. "PCR", "ART", "SER" or ["PCR", "SER"])`
);
const { PdtTypes } = pdtHealthCertV2;
@@ -168,4 +127,57 @@ export const validateV2Document = async (
const validDomain = await isAuthorizedIssuer(issuerDomain, whitelistType);
if (!validDomain)
throw new UnrecognisedClinicError(issuerDomain, JSON.stringify(data.type));
+
+ /* 4. Validate logo (<=20KB base64 image string or HTTPS direct link) */
+ if (data.logo) {
+ const VALID_LOGO_PATTERN =
+ // Either base64 string or https URL in .png | .jpg | .jpeg format
+ /(^data:image\/(png|jpg|jpeg);base64,.*$)|(^https:\/\/.*[.](png|jpg|jpeg)$)/;
+ const VALID_MIME_PATTERN = /^image\/(png|jpeg)$/;
+ const MAX_LOGO_SIZE_IN_KILOBYTES = 21 * 1024; // 20KB (21KB) for some leeway
+
+ if (!VALID_LOGO_PATTERN.test(data.logo)) {
+ throw new DocumentInvalidError(
+ `Document should include a valid "logo" attribute in base64 image string or HTTPS direct link (i.e. ${VALID_LOGO_PATTERN})`
+ );
+ }
+
+ if (data.logo.startsWith("https://")) {
+ try {
+ const res = await axios.get(data.logo, { responseType: "stream" });
+ const httpsFileType = await fromStream(res.data);
+ if (!VALID_MIME_PATTERN.test(httpsFileType?.mime || "")) {
+ throw new DocumentInvalidError(
+ `Document "logo" should resolve to a valid HTTPS direct link (i.e. png|jpg|jpeg)`
+ );
+ }
+ } catch (err) {
+ throw new DocumentInvalidError(
+ `Document "logo" should resolve to a valid HTTPS direct link (i.e. png|jpg|jpeg)`
+ );
+ }
+ } else if (data.logo.startsWith("data:image")) {
+ const buffer = Buffer.from(data.logo.split(",")[1], "base64");
+ const base64FileType = await fromBuffer(buffer);
+
+ if (!VALID_MIME_PATTERN.test(base64FileType?.mime || "")) {
+ throw new DocumentInvalidError(
+ `Document "logo" should resolve to a valid base64 image string (i.e. png|jpg|jpeg)`
+ );
+ }
+
+ if (data.logo.startsWith("data:")) {
+ const byteLength = Buffer.byteLength(data.logo, "utf-8");
+ if (byteLength >= MAX_LOGO_SIZE_IN_KILOBYTES) {
+ throw new DocumentInvalidError(
+ `Document "logo" in base64 image string is too large (${(
+ byteLength / 1024
+ ).toFixed(2)}KB). Only <=${
+ MAX_LOGO_SIZE_IN_KILOBYTES / 1024
+ }KB is supported.`
+ );
+ }
+ }
+ }
+ }
};
diff --git a/src/functionHandlers/notarisePdt/validateInputs/validateInputs.test.ts b/src/functionHandlers/notarisePdt/validateInputs/validateInputs.test.ts
index 0c328231..a8f5f06b 100644
--- a/src/functionHandlers/notarisePdt/validateInputs/validateInputs.test.ts
+++ b/src/functionHandlers/notarisePdt/validateInputs/validateInputs.test.ts
@@ -1,20 +1,20 @@
-import { validateInputs } from "./validateInputs";
-import { validateDocument } from "./validateDocument";
+import { validateV2Inputs } from "./validateInputs";
+import { validateV2Document } from "./validateDocument";
jest.mock("./validateDocument");
-const mockValidateDocument = validateDocument as jest.Mock;
+const mockValidateDocument = validateV2Document as jest.Mock;
const sampleDocument: any = {};
it("should pass when validation passes", async () => {
mockValidateDocument.mockResolvedValue(undefined);
- await expect(validateInputs(sampleDocument)).resolves.not.toThrow();
+ await expect(validateV2Inputs(sampleDocument)).resolves.not.toThrow();
});
it("should throw when validateDocument throws", async () => {
mockValidateDocument.mockRejectedValue(new Error("Some error message"));
- await expect(validateInputs(sampleDocument)).rejects.toThrow(
+ await expect(validateV2Inputs(sampleDocument)).rejects.toThrow(
/Some error message/
);
});
diff --git a/src/functionHandlers/notarisePdt/validateInputs/validateInputs.ts b/src/functionHandlers/notarisePdt/validateInputs/validateInputs.ts
index 5370ce51..44da34bb 100644
--- a/src/functionHandlers/notarisePdt/validateInputs/validateInputs.ts
+++ b/src/functionHandlers/notarisePdt/validateInputs/validateInputs.ts
@@ -1,13 +1,6 @@
import { WrappedDocument } from "@govtechsg/open-attestation";
-import { validateDocument, validateV2Document } from "./validateDocument";
-import { HealthCertDocument, PDTHealthCertV2 } from "../../../types";
-
-/**
- * @deprecated This function should be removed when PDT HealthCert v1.0 is deprecated.
- */
-export const validateInputs = async (
- attachment: WrappedDocument
-) => Promise.all([validateDocument(attachment)]);
+import { validateV2Document } from "./validateDocument";
+import { PDTHealthCertV2 } from "../../../types";
export const validateV2Inputs = async (
wrappedDocument: WrappedDocument
diff --git a/src/middleware/cloudWatch.test.ts b/src/middleware/cloudWatch.test.ts
index 71d6a0af..23112c0c 100644
--- a/src/middleware/cloudWatch.test.ts
+++ b/src/middleware/cloudWatch.test.ts
@@ -1,6 +1,5 @@
import { cloneDeep } from "lodash";
import { NotarisationResult } from "../types";
-import wrappedDocument from "../../test/fixtures/v1/example_healthcert_with_nric_wrapped.json";
import wrappedDocumentV2 from "../../test/fixtures/v2/pdt_pcr_with_nric_wrapped.json";
import { CloudWatchMiddleware, Request } from "./cloudWatch";
import * as log from "./trace";
@@ -15,12 +14,16 @@ it("test regex of extractSubDomain", () => {
).toBe("gov.sg");
});
-describe("test cloudwatch middleware for v1", () => {
+describe("test cloudwatch middleware for v2", () => {
+ afterEach(() => {
+ jest.clearAllMocks();
+ });
+
it("middlware should log clinic and subdomain from request", async () => {
jest.spyOn(log, "trace");
const request: Request = {
event: {
- body: wrappedDocument,
+ body: wrappedDocumentV2,
},
response: null,
};
@@ -32,24 +35,23 @@ describe("test cloudwatch middleware for v1", () => {
expect(log.trace).toHaveBeenCalledWith(
"specificDomain donotverify.testing.verify.gov.sg attempting to notarise pdt..."
);
- expect(log.trace).toHaveBeenCalledWith(
- "aggregateDomain gov.sg attempting to notarise pdt..."
- );
});
it("middleware should log cert type from response", async () => {
jest.spyOn(log, "trace");
+ const doc = cloneDeep(wrappedDocumentV2);
+ doc.data.type = ["pcr", "ser"] as any;
- // let's assume the wrappedDocument has been notarized
+ // let's assume the wrappedDocumentV2 has been notarized
const notarisationResult: NotarisationResult = {
- notarisedDocument: wrappedDocument as any,
+ notarisedDocument: doc as any,
ttl: 0,
url: "",
};
const request: Request = {
event: {
- body: wrappedDocumentV2,
+ body: doc,
},
response: {
body: JSON.stringify(notarisationResult),
@@ -61,41 +63,17 @@ describe("test cloudwatch middleware for v1", () => {
await cloudWatchMiddleware.before(request);
await cloudWatchMiddleware.after(request);
expect(log.trace).toHaveBeenCalledWith(
- `specificDomain donotverify.testing.verify.gov.sg successfully notarised pdt of type pcr`
+ `aggregateDomain gov.sg successfully notarised pdt of type pcr, ser`
);
- // expect(log.trace).toHaveBeenCalledWith(
- // `aggregateDomain gov.sg successfully notarised pdt of type pcr`
- // );
- });
-});
-
-describe("test cloudwatch middleware for v2", () => {
- afterEach(() => {
- jest.clearAllMocks();
- });
-
- it("middlware should log clinic and subdomain from request", async () => {
- jest.spyOn(log, "trace");
- const request: Request = {
- event: {
- body: wrappedDocumentV2,
- },
- response: null,
- };
-
- const cloudWatchMiddleware: CloudWatchMiddleware =
- new CloudWatchMiddleware();
- await cloudWatchMiddleware.before(request);
-
expect(log.trace).toHaveBeenCalledWith(
- "specificDomain donotverify.testing.verify.gov.sg attempting to notarise pdt..."
+ `specificDomain donotverify.testing.verify.gov.sg successfully notarised pdt of type pcr, ser`
);
});
- it("middleware should log cert type from response", async () => {
+ it("middleware should log unrecognised cert type from response", async () => {
jest.spyOn(log, "trace");
const doc = cloneDeep(wrappedDocumentV2);
- doc.data.type = ["pcr", "ser"] as any;
+ doc.data.type = ["pcr", "blah"] as any;
// let's assume the wrappedDocumentV2 has been notarized
const notarisationResult: NotarisationResult = {
@@ -118,10 +96,10 @@ describe("test cloudwatch middleware for v2", () => {
await cloudWatchMiddleware.before(request);
await cloudWatchMiddleware.after(request);
expect(log.trace).toHaveBeenCalledWith(
- `aggregateDomain gov.sg successfully notarised pdt of type pcr, ser`
+ `aggregateDomain gov.sg successfully notarised pdt of type pcr, UNRECOGNISED: blah`
);
expect(log.trace).toHaveBeenCalledWith(
- `specificDomain donotverify.testing.verify.gov.sg successfully notarised pdt of type pcr, ser`
+ `specificDomain donotverify.testing.verify.gov.sg successfully notarised pdt of type pcr, UNRECOGNISED: blah`
);
});
});
diff --git a/src/middleware/cloudWatch.ts b/src/middleware/cloudWatch.ts
index 4277a439..2af8b5c3 100644
--- a/src/middleware/cloudWatch.ts
+++ b/src/middleware/cloudWatch.ts
@@ -3,12 +3,7 @@
import { getData, WrappedDocument } from "@govtechsg/open-attestation";
import middy, { MiddlewareObj } from "@middy/core";
-import {
- HealthCertDocument,
- NotarisationResult,
- Observation,
- PDTHealthCertV2,
-} from "../types";
+import { NotarisationResult, PDTHealthCertV2 } from "../types";
import { logError, trace } from "./trace";
export type Request = Pick;
@@ -23,6 +18,12 @@ export class CloudWatchMiddleware
{
private specificDomain = "";
+ private validTests: Record = {
+ "94531-1": "pcr",
+ "97097-0": "art",
+ "94661-6": "ser",
+ };
+
// split "abc.riverr.io" into "riverr.io"
// searches for final "."
toAggregateDomain(provider: string): string {
@@ -30,8 +31,7 @@ export class CloudWatchMiddleware
}
before = async (req: Request): Promise => {
- const wrappedDocument = req.event
- .body as WrappedDocument;
+ const wrappedDocument = req.event.body as WrappedDocument;
const data = getData(wrappedDocument);
const provider = data.issuers[0].identityProof?.location ?? "UNKNOWN";
this.specificDomain = provider;
@@ -52,40 +52,14 @@ export class CloudWatchMiddleware
try {
const notarisationResult: NotarisationResult = JSON.parse(body);
const { notarisedDocument } = notarisationResult;
- const data: HealthCertDocument | PDTHealthCertV2 =
- getData(notarisedDocument);
+ const data: PDTHealthCertV2 = getData(notarisedDocument);
let testTypes: string[] = [];
- const validTestTypes = ["art", "pcr", "ser"];
if (data.version === "pdt-healthcert-v2.0") {
// version 2
- if (typeof data.type === "string") {
- testTypes = [data.type];
- } else if (Array.isArray(data.type)) {
- testTypes = data.type;
- }
- testTypes = testTypes.map((test) => test.toLowerCase());
- const allValid: boolean = testTypes.every((test) =>
- validTestTypes.includes(test)
- );
- if (!allValid) {
- logError(`${testTypes.join(", ")} are not valid`);
- }
- } else {
- // version 1
- // @ts-ignore
- const observations = data.fhirBundle?.entry as Observation[];
- const observation = observations.find(
- (entr: any) => entr.resourceType === "Observation"
- ) as Observation;
- let { display } = observation.code.coding[0]; // e.g. Reverse transcription polymerase chain reaction (rRT-PCR) test
- display = display.toLowerCase();
- testTypes = validTestTypes
- .filter((test) => display.includes(test))
- .map((test) => test.toLowerCase());
+ testTypes = this.extractTestTypesV2(data as PDTHealthCertV2);
}
const { specificDomain } = this;
const aggregateDomain = this.toAggregateDomain(specificDomain);
- testTypes.sort();
trace(
`aggregateDomain ${aggregateDomain} successfully notarised pdt of type ${testTypes.join(
", "
@@ -102,6 +76,24 @@ export class CloudWatchMiddleware
);
}
};
+
+ // version 2
+ private extractTestTypesV2(data: PDTHealthCertV2): string[] {
+ let testTypes: string[] = [];
+ const validTestTypes = Object.values(this.validTests);
+ if (typeof data.type === "string") {
+ testTypes = [data.type];
+ } else if (Array.isArray(data.type)) {
+ testTypes = data.type;
+ }
+ for (let i = 0; i < testTypes.length; i += 1) {
+ testTypes[i] = testTypes[i].toLowerCase();
+ if (!validTestTypes.includes(testTypes[i])) {
+ testTypes[i] = `UNRECOGNISED: ${testTypes[i]}`;
+ }
+ }
+ return testTypes;
+ }
}
export const cloudWatchMiddleware = (): Pick<
diff --git a/src/models/euHealthCert/createEuHealthCert/createEuHealthCert.test.ts b/src/models/euHealthCert/createEuHealthCert/createEuHealthCert.test.ts
index 931e7108..4b1e19d5 100644
--- a/src/models/euHealthCert/createEuHealthCert/createEuHealthCert.test.ts
+++ b/src/models/euHealthCert/createEuHealthCert/createEuHealthCert.test.ts
@@ -1,5 +1,10 @@
-import { TestData } from "src/types";
+import { R4 } from "@ahryman40k/ts-fhir-types";
+import _ from "lodash";
import { createEuTestCert } from "./index";
+import fhirHelper from "../../fhir/index";
+import exampleSingleTypePcrHealthCertWithNric from "../../../../test/fixtures/v2/pdt_pcr_with_nric_unwrapped.json";
+import exampleSingleTypeArtHealthCertWithNric from "../../../../test/fixtures/v2/pdt_art_with_nric_unwrapped.json";
+import exampleMultiTypeHealthCertWithNric from "../../../../test/fixtures/v2/pdt_pcr_ser_multi_result_unwrapped.json";
describe("createEuTestCert for invalid tests", () => {
let dateNowSpy: jest.SpyInstance;
@@ -17,39 +22,19 @@ describe("createEuTestCert for invalid tests", () => {
dateNowSpy.mockRestore();
});
- const testData: TestData[] = [
- {
- provider: "MacRitchie Medical Clinic",
- gender: "M",
- lab: "lab",
- nationality: "SG",
- nric: "123",
- observationDate: "6/28/21 2:15:00 PM GMT+08:00",
- passportNumber: "ES12345",
- patientName: "TESTING",
- performerMcr: "123",
- performerName: "123",
- birthDate: "01/01/2021",
- swabCollectionDate: "6/27/21 2:15:00 PM GMT+08:00",
- swabType: "Nasopharyngeal swab",
- swabTypeCode: "258500001",
- testCode: "94531-1",
- testType:
- "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- testResult: "Positive",
- testResultCode: "10828004",
- },
- ];
-
- it("invalid EU test cert for other test type", async () => {
- testData[0].swabTypeCode = "123456";
- const result = await createEuTestCert(testData, "abc-cde-cde", "storedUrl");
- expect(result).toMatchObject([]);
- });
+ const parsedFhirBundle = _.cloneDeep(
+ fhirHelper.parse(
+ exampleSingleTypePcrHealthCertWithNric.fhirBundle as R4.IBundle
+ )
+ );
it("invalid EU test cert for invalid test result code", async () => {
- testData[0].testResultCode = "123456";
- const result = await createEuTestCert(testData, "abc-cde-cde", "storedUrl");
+ parsedFhirBundle.observations[0].observation.result.code = "123456";
+ const result = await createEuTestCert(
+ parsedFhirBundle,
+ "abc-cde-cde",
+ "storedUrl"
+ );
expect(result).toMatchObject([]);
});
});
@@ -70,46 +55,32 @@ describe("createEuTestCert for PCR Nasopharyngeal Swab", () => {
dateNowSpy.mockRestore();
});
- const testData: TestData[] = [
- {
- provider: "MacRitchie Medical Clinic",
- gender: "M",
- lab: "lab",
- nationality: "SG",
- nric: "123",
- observationDate: "6/28/21 2:15:00 PM GMT+08:00",
- passportNumber: "ES12345",
- patientName: "TESTING",
- performerMcr: "123",
- performerName: "123",
- birthDate: "01/01/2021",
- swabCollectionDate: "6/27/21 2:15:00 PM GMT+08:00",
- swabType: "Nasopharyngeal swab",
- swabTypeCode: "258500001",
- testCode: "94531-1",
- testType:
- "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- testResult: "Positive",
- testResultCode: "10828004",
- },
- ];
+ const parsedFhirBundle = _.cloneDeep(
+ fhirHelper.parse(
+ exampleSingleTypePcrHealthCertWithNric.fhirBundle as R4.IBundle
+ )
+ );
it("create EU test cert with valid params", async () => {
- const result = await createEuTestCert(testData, "abc-cde-cde", "storedUrl");
+ const result = await createEuTestCert(
+ parsedFhirBundle,
+ "abc-cde-cde",
+ "storedUrl"
+ );
expect(result).toMatchObject([
{
ver: "1.3.0",
nam: {
- fnt: "TESTING",
+ fnt: "TAN {
meta: {
reference: "abc-cde-cde",
notarisedOn: "2021-06-30T00:00:00.000Z",
- passportNumber: "ES12345",
+ passportNumber: "E7831177G",
url: "storedUrl",
},
},
@@ -143,46 +114,32 @@ describe("createEuTestCert for ART Anterior Nares Swab", () => {
dateNowSpy.mockRestore();
});
- const testData: TestData[] = [
- {
- provider: "MacRitchie Medical Clinic",
- gender: "M",
- lab: "lab",
- nationality: "SG",
- nric: "123",
- observationDate: "6/28/21 2:15:00 PM GMT+08:00",
- passportNumber: "ES12345",
- patientName: "TESTING",
- performerMcr: "123",
- performerName: "123",
- birthDate: "01/01/2021",
- swabCollectionDate: "6/27/21 2:15:00 PM GMT+08:00",
- swabType: "Anterior nares swab",
- swabTypeCode: "697989009",
- testCode: "41112601",
- testType: "Quidel QuickVue At-Home OTC COVID-19 Test",
- testResult: "Positive",
- testResultCode: "10828004",
- deviceIdentifier: "1232",
- },
- ];
+ const parsedFhirBundle = _.cloneDeep(
+ fhirHelper.parse(
+ exampleSingleTypeArtHealthCertWithNric.fhirBundle as R4.IBundle
+ )
+ );
it("create EU test cert with valid params", async () => {
- const result = await createEuTestCert(testData, "abc-cde-cde", "storedUrl");
+ const result = await createEuTestCert(
+ parsedFhirBundle,
+ "abc-cde-cde",
+ "storedUrl"
+ );
expect(result).toMatchObject([
{
ver: "1.3.0",
nam: {
- fnt: "TESTING",
+ fnt: "TAN {
meta: {
reference: "abc-cde-cde",
notarisedOn: "2021-06-30T00:00:00.000Z",
- passportNumber: "ES12345",
+ passportNumber: "E7831177G",
url: "storedUrl",
},
},
@@ -216,67 +173,32 @@ describe("createEuTestCert for Multiple Swab Test Result", () => {
dateNowSpy.mockRestore();
});
- const testData: TestData[] = [
- {
- provider: "MacRitchie Medical Clinic",
- gender: "M",
- lab: "lab",
- nationality: "SG",
- nric: "123",
- observationDate: "6/28/21 2:15:00 PM GMT+08:00",
- passportNumber: "ES12345",
- patientName: "TESTING",
- performerMcr: "123",
- performerName: "123",
- birthDate: "01/01/2021",
- swabCollectionDate: "6/27/21 2:15:00 PM GMT+08:00",
- swabType: "Nasopharyngeal swab",
- swabTypeCode: "258500001",
- testCode: "94531-1",
- testType:
- "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- testResult: "Positive",
- testResultCode: "10828004",
- },
- {
- provider: "MacRitchie Medical Clinic",
- gender: "M",
- lab: "lab",
- nationality: "SG",
- nric: "123",
- observationDate: "6/28/21 2:15:00 PM GMT+08:00",
- passportNumber: "ES12345",
- patientName: "TESTING",
- performerMcr: "123",
- performerName: "123",
- birthDate: "01/01/2021",
- swabCollectionDate: "6/27/21 2:15:00 PM GMT+08:00",
- swabType: "Anterior nares swab",
- swabTypeCode: "697989009",
- testCode: "41112601",
- testType: "Quidel QuickVue At-Home OTC COVID-19 Test",
- testResult: "Positive",
- testResultCode: "10828004",
- deviceIdentifier: "1232",
- },
- ];
+ const parsedFhirBundle = _.cloneDeep(
+ fhirHelper.parse(
+ exampleMultiTypeHealthCertWithNric.fhirBundle as R4.IBundle
+ )
+ );
it("create EU test cert with valid params", async () => {
- const result = await createEuTestCert(testData, "abc-cde-cde", "storedUrl");
+ const result = await createEuTestCert(
+ parsedFhirBundle,
+ "abc-cde-cde",
+ "storedUrl"
+ );
expect(result).toMatchObject([
{
ver: "1.3.0",
nam: {
- fnt: "TESTING",
+ fnt: "TAN {
meta: {
reference: "abc-cde-cde",
notarisedOn: "2021-06-30T00:00:00.000Z",
- passportNumber: "ES12345",
- url: "storedUrl",
- },
- },
- {
- ver: "1.3.0",
- nam: {
- fnt: "TESTING",
- },
- dob: "2021-01-01",
- t: [
- {
- tg: "840539006",
- tt: "LP217198-3",
- ma: testData[1].deviceIdentifier,
- sc: "2021-06-27T14:15:00+08:00",
- tr: "260373001",
- tc: "MacRitchie Medical Clinic",
- co: "SG",
- is: "Ministry of Health (Singapore)",
- ci: "URN:UVCI:01:SG:2ABC-CDE-CDE",
- },
- ],
- meta: {
- reference: "abc-cde-cde",
- notarisedOn: "2021-06-30T00:00:00.000Z",
- passportNumber: "ES12345",
+ passportNumber: "E7831177G",
url: "storedUrl",
},
},
@@ -336,45 +232,31 @@ describe("createEuTestCert for PCR Nasopharyngeal Swab with positive/negative te
dateNowSpy.mockRestore();
});
- const testData: TestData[] = [
- {
- provider: "MacRitchie Medical Clinic",
- gender: "M",
- lab: "lab",
- nationality: "SG",
- nric: "123",
- observationDate: "6/28/21 2:15:00 PM GMT+08:00",
- passportNumber: "ES12345",
- patientName: "TESTING",
- performerMcr: "123",
- performerName: "123",
- birthDate: "01/01/2021",
- swabCollectionDate: "6/27/21 2:15:00 PM GMT+08:00",
- swabType: "Nasopharyngeal swab",
- swabTypeCode: "258500001",
- testCode: "94531-1",
- testType:
- "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- testResult: "Negative",
- testResultCode: "260385009",
- },
- ];
+ const parsedFhirBundle = _.cloneDeep(
+ fhirHelper.parse(
+ exampleSingleTypePcrHealthCertWithNric.fhirBundle as R4.IBundle
+ )
+ );
it("create EU test cert with valid params negative test result code", async () => {
- const result = await createEuTestCert(testData, "abc-cde-cde", "storedUrl");
+ const result = await createEuTestCert(
+ parsedFhirBundle,
+ "abc-cde-cde",
+ "storedUrl"
+ );
expect(result).toMatchObject([
{
ver: "1.3.0",
nam: {
- fnt: "TESTING",
+ fnt: "TAN {
- testData[0].testResult = "Positive";
- testData[0].testResultCode = "10828004";
- const result = await createEuTestCert(testData, "abc-cde-cde", "storedUrl");
+ parsedFhirBundle.observations[0].observation.result.display = "Positive";
+ parsedFhirBundle.observations[0].observation.result.code = "10828004";
+ const result = await createEuTestCert(
+ parsedFhirBundle,
+ "abc-cde-cde",
+ "storedUrl"
+ );
expect(result).toMatchObject([
{
ver: "1.3.0",
nam: {
- fnt: "TESTING",
+ fnt: "TAN {
- const result = await createEuTestCert(testData, "abc-cde-cde", "storedUrl");
+ const result = await createEuTestCert(
+ parsedFhirBundle,
+ "abc-cde-cde",
+ "storedUrl"
+ );
expect(result).toMatchObject([
{
ver: "1.3.0",
nam: {
- fnt: "TESTING",
+ fnt: "TAN {
- testData[0].testResult = "Detected";
- testData[0].testResultCode = "260373001";
- const result = await createEuTestCert(testData, "abc-cde-cde", "storedUrl");
+ parsedFhirBundle.observations[0].observation.result.display = "Detected";
+ parsedFhirBundle.observations[0].observation.result.code = "260373001";
+ const result = await createEuTestCert(
+ parsedFhirBundle,
+ "abc-cde-cde",
+ "storedUrl"
+ );
expect(result).toMatchObject([
{
ver: "1.3.0",
nam: {
- fnt: "TESTING",
+ fnt: "TAN {
+ let dateNowSpy: jest.SpyInstance;
+ let spy: jest.SpyInstance;
+ beforeAll(() => {
+ spy = jest.spyOn(console, "error").mockImplementation(() => {
+ // do not display errors
+ });
+ dateNowSpy = jest
+ .spyOn(Date.prototype, "toISOString")
+ .mockReturnValue("2021-06-30T00:00:00.000Z");
+ });
+ afterAll(() => {
+ spy.mockRestore();
+ dateNowSpy.mockRestore();
+ });
+
+ const parsedFhirBundle = _.cloneDeep(
+ fhirHelper.parse(
+ exampleSingleTypePcrHealthCertWithNric.fhirBundle as R4.IBundle
+ )
+ );
+
+ it("create EU test cert with valid params", async () => {
+ parsedFhirBundle.observations[0].specimen.swabType.display = "Sliva swab";
+ parsedFhirBundle.observations[0].specimen.swabType.code = "119342007";
+ const result = await createEuTestCert(
+ parsedFhirBundle,
+ "abc-cde-cde",
+ "storedUrl"
+ );
+ expect(result).toMatchObject([
+ {
+ ver: "1.3.0",
+ nam: {
+ fnt: "TAN {
@@ -22,15 +21,19 @@ export const createEuTestCert = (
const testHealthCerts: EuHealthCert[] = [];
let incrementTestNumber = 1;
- testData.forEach((item) => {
+ parsedFhirBundle.observations.forEach((item) => {
+ parsedFhirBundle.patient.fullName;
const euName: EuNameParams = {
- fnt: item.patientName.replace(/ /g, "<").toUpperCase(),
+ fnt: parsedFhirBundle.patient.fullName.replace(/ /g, "<").toUpperCase(),
};
- const dob = item.birthDate?.split("/")?.reverse()?.join("-");
+ const dob = parsedFhirBundle.patient.birthDate
+ .split("/")
+ ?.reverse()
+ ?.join("-");
const meta: notarise.NotarisationMetadata = {
reference,
notarisedOn: dateString,
- passportNumber: item.passportNumber,
+ passportNumber: parsedFhirBundle.patient.passportNumber,
url: storedUrl,
};
// Set increment dose number + reference
@@ -38,35 +41,39 @@ export const createEuTestCert = (
// Set Unique Cert Id with prefix + version + country + unique ref
const UniqueCertificateId = `URN:UVCI:01:SG:${uniqueRef}`;
const euDccTestResultCode = Object.values(EUDccTestResult).includes(
- item.testResultCode
+ item.observation.result.code as string
)
- ? item.testResultCode
- : _.get(EUDccTestResult, item.testResultCode, null);
+ ? item.observation.result.code
+ : _.get(EUDccTestResult, item.observation.result.code as string, null);
const testGroup: EuTestParams = {
tg: "840539006",
tt: "LP6464-4", // need to confirm with MOH for for Serology, it can either be [Nucleic acid amplification with probe detection] or [Rapid immunoassay]
- sc: moment
- .tz(item.swabCollectionDate, "M/D/YY h:mm:ss A", "Asia/Singapore")
- .format(),
+ sc: item.specimen.collectionDateTime,
tr: euDccTestResultCode,
- tc: item.provider,
+ tc: item.organization.lhp.fullName,
co: "SG",
is: euSigner.name,
ci: UniqueCertificateId,
};
- if (item.swabTypeCode === swabTestTypes.PCR) {
+ // check swab test type is valid PCR Nasal or PCR Saliva
+ if (
+ [swabTestTypes.PCR_NASAL, swabTestTypes.PCR_SALIVA].includes(
+ item.specimen.swabType.code as string
+ )
+ ) {
testGroup.tt = "LP6464-4"; // test type code for PCR test [Nucleic acid amplification with probe detection]
- testGroup.nm = item.testType;
- } else if (item.swabTypeCode === swabTestTypes.ART) {
+ testGroup.nm = item.observation.testType.display;
+ } else if (item.specimen.swabType.code === swabTestTypes.ART) {
testGroup.tt = "LP217198-3"; // test type code for ART test [Rapid immunoassay]
- testGroup.ma = item.deviceIdentifier;
+ testGroup.ma = item.device?.type.code;
}
- // generate test cert only for PCR and ART which have valid test result code
+ // generate test cert only for PCR Nasal, PCR Saliva and ART which have valid test result code
if (
euDccTestResultCode &&
- (item.swabTypeCode === swabTestTypes.PCR ||
- item.swabTypeCode === swabTestTypes.ART)
+ Object.values(swabTestTypes).includes(
+ item.specimen.swabType.code as string
+ )
) {
testHealthCerts.push({
ver: fhirVersion,
@@ -81,3 +88,38 @@ export const createEuTestCert = (
return testHealthCerts;
};
+
+export const generateEuHealthCert = async (
+ type: Type,
+ parsedFhirBundle: ParsedBundle,
+ reference: string,
+ storedUrl: string
+): Promise => {
+ const traceWithRef = trace.extend(`reference:${reference}`);
+ const { PdtTypes } = pdtHealthCertV2;
+ let signedEuHealthCerts: notarise.SignedEuHealthCert[] = [];
+ if (
+ (_.isString(type) && (type === PdtTypes.Art || type === PdtTypes.Pcr)) ||
+ type.includes(PdtTypes.Art) ||
+ type.includes(PdtTypes.Pcr)
+ ) {
+ traceWithRef("signedEuHealthCerts: Generating EU test cert...");
+ const euTestCerts = createEuTestCert(
+ parsedFhirBundle,
+ reference,
+ storedUrl
+ );
+ traceWithRef(euTestCerts);
+ signedEuHealthCerts = await createEuSignedTestQr(euTestCerts);
+ if (!signedEuHealthCerts.length) {
+ throw new Error(
+ `Generated EU Vacc Cert is invalid: signedEuHealthCerts has 0 entries`
+ );
+ }
+ } else {
+ traceWithRef(
+ `signedEuHealthCerts: Unsupported test type - ${JSON.stringify(type)}`
+ );
+ }
+ return signedEuHealthCerts;
+};
diff --git a/src/models/fhir/constraints.ts b/src/models/fhir/constraints.ts
index 6c2c378e..2c8416f7 100644
--- a/src/models/fhir/constraints.ts
+++ b/src/models/fhir/constraints.ts
@@ -1,12 +1,13 @@
import _ from "lodash";
import { pdtHealthCertV2 } from "@govtechsg/oa-schemata";
import { DocumentInvalidError } from "../../common/error";
+import euDccTestResultMapping from "../../static/EU-DCC-test-result.mapping.json";
/**
* Common constraints required by all types of HealthCerts:
* To convert parsed format -> original FHIR Bundle format (to aid in custom error message)
*/
-const commonConstraints = {
+const commonFhirKeys = {
// Patient
"patient.fullName": "Patient.name[0].text",
"patient.birthDate": "Patient.birthDate",
@@ -39,7 +40,7 @@ const commonConstraints = {
* Common grouped constraints required by all types of HealthCerts:
* To convert parsed format -> original FHIR Bundle format (to aid in custom error message)
*/
-const commonGroupedConstraints = {
+const commonGroupedFhirKeys = {
// Observation(s)
"observations._.observation.specimenResourceUuid":
"_.Observation.specimen.{ type=Specimen, reference }",
@@ -118,7 +119,7 @@ const commonGroupedConstraints = {
* ART constraints:
* To convert parsed format -> original FHIR Bundle format (to aid in custom error message)
*/
-const artGroupedConstraints = {
+const artGroupedFhirKeys = {
// Specimen(s)
"observations._.specimen.deviceResourceUuid":
"_.Specimen.subject.{ type=Device, reference }",
@@ -133,7 +134,7 @@ const artGroupedConstraints = {
* PCR constraints:
* To convert parsed format -> original FHIR Bundle format (to aid in custom error message)
*/
-const pcrGroupedConstraints = {
+const pcrGroupedFhirKeys = {
// Observation(s)
"observations._.observation.organizationAlResourceUuid":
"Observation.performer[2].{ id=AL, type=Organization, reference }",
@@ -161,14 +162,14 @@ const pcrGroupedConstraints = {
"_.Organization.contact[0].address.text",
};
-const generateConstraints = (constraintMapping: Record) => {
- const allKeys = Object.keys(constraintMapping);
+const generateRequiredConstraints = (mapping: Record) => {
+ const allKeys = Object.keys(mapping);
const constraints: Record = {};
allKeys.forEach((k) => {
constraints[k] = {
presence: {
- message: `'${constraintMapping[k]}' is required`,
+ message: `'${mapping[k]}' is required`,
allowEmpty: false,
},
};
@@ -177,19 +178,19 @@ const generateConstraints = (constraintMapping: Record) => {
return constraints;
};
-const generateGroupedConstraints = (
- constraintMapping: Record,
+const generateRequiredGroupedConstraints = (
+ mapping: Record,
observationCount: number
) => {
- const allKeys = Object.keys(constraintMapping);
+ const allKeys = Object.keys(mapping);
const constraints: Record = {};
for (let i = 0; i < observationCount; i += 1) {
allKeys.forEach((k) => {
- const key = k.replace("_", i.toString());
- const message = constraintMapping[k].replace("_", i.toString());
- constraints[key] = {
- presence: { message: `'${message}' is required`, allowEmpty: false },
+ const parsedKey = k.replace("_", i.toString());
+ const fhirKey = mapping[k].replace("_", i.toString());
+ constraints[parsedKey] = {
+ presence: { message: `'${fhirKey}' is required`, allowEmpty: false },
};
});
}
@@ -198,7 +199,10 @@ const generateGroupedConstraints = (
};
export type Type = pdtHealthCertV2.PdtTypes | pdtHealthCertV2.PdtTypes[];
-export const getConstraints = (type: Type, observationCount: number) => {
+export const getRequiredConstraints = (
+ type: Type,
+ observationCount: number
+) => {
const { PdtTypes } = pdtHealthCertV2;
const supportedMultiType = [PdtTypes.Pcr, PdtTypes.Ser]; // For now, only ["PCR", "SER"] is supported
@@ -210,9 +214,15 @@ export const getConstraints = (type: Type, observationCount: number) => {
if (type === PdtTypes.Art) {
// ART HealthCert
return {
- ...generateConstraints(commonConstraints),
- ...generateGroupedConstraints(commonGroupedConstraints, observationCount),
- ...generateGroupedConstraints(artGroupedConstraints, observationCount),
+ ...generateRequiredConstraints(commonFhirKeys),
+ ...generateRequiredGroupedConstraints(
+ commonGroupedFhirKeys,
+ observationCount
+ ),
+ ...generateRequiredGroupedConstraints(
+ artGroupedFhirKeys,
+ observationCount
+ ),
};
} else if (
type === PdtTypes.Pcr ||
@@ -222,9 +232,15 @@ export const getConstraints = (type: Type, observationCount: number) => {
// PCR, SER or PCR + SER HealthCert
// Currently PCR and SER have the same validation constraint
return {
- ...generateConstraints(commonConstraints),
- ...generateGroupedConstraints(commonGroupedConstraints, observationCount),
- ...generateGroupedConstraints(pcrGroupedConstraints, observationCount),
+ ...generateRequiredConstraints(commonFhirKeys),
+ ...generateRequiredGroupedConstraints(
+ commonGroupedFhirKeys,
+ observationCount
+ ),
+ ...generateRequiredGroupedConstraints(
+ pcrGroupedFhirKeys,
+ observationCount
+ ),
};
} else {
throw new DocumentInvalidError(
@@ -234,3 +250,29 @@ export const getConstraints = (type: Type, observationCount: number) => {
);
}
};
+
+export const getRecognisedConstraints = (
+ _type: Type,
+ observationCount: number
+) => {
+ const constraints: Record = {};
+
+ /* Inclusion validation: Limit to 2 sets of Test Result Codes */
+ const recognisedTestResultCodes = [
+ ...Object.keys(euDccTestResultMapping),
+ ...Object.values(euDccTestResultMapping),
+ ];
+ for (let i = 0; i < observationCount; i += 1) {
+ const k = `observations._.observation.result.code`;
+ const parsedKey = k.replace("_", i.toString());
+ const fhirKey = commonGroupedFhirKeys[k].replace("_", i.toString());
+ constraints[parsedKey] = {
+ inclusion: {
+ within: recognisedTestResultCodes,
+ message: `'${fhirKey}' is an unrecognised code - please use one of the following codes: ${recognisedTestResultCodes}`,
+ },
+ };
+ }
+
+ return constraints;
+};
diff --git a/src/models/fhir/index.ts b/src/models/fhir/index.ts
index bed65862..bb73156e 100644
--- a/src/models/fhir/index.ts
+++ b/src/models/fhir/index.ts
@@ -1,4 +1,5 @@
import { parse } from "./parse";
import { hasRequiredFields } from "./required";
+import { hasRecognisedFields } from "./recognised";
-export default { parse, hasRequiredFields };
+export default { parse, hasRequiredFields, hasRecognisedFields };
diff --git a/src/models/fhir/recognised.test.ts b/src/models/fhir/recognised.test.ts
new file mode 100644
index 00000000..23e0f3c2
--- /dev/null
+++ b/src/models/fhir/recognised.test.ts
@@ -0,0 +1,46 @@
+import { R4 } from "@ahryman40k/ts-fhir-types";
+import { pdtHealthCertV2 } from "@govtechsg/oa-schemata";
+import { DetailedCodedError } from "../../common/error";
+import fhirHelper from "./index";
+import exampleSingleTypeHealthCertWithNric from "../../../test/fixtures/v2/pdt_pcr_with_nric_unwrapped.json";
+import exampleMultiTypeHealthCertWithNric from "../../../test/fixtures/v2/pdt_pcr_ser_multi_result_unwrapped.json";
+
+const { PdtTypes } = pdtHealthCertV2;
+
+describe("recognised fields", () => {
+ test("should throw error if single type HealthCert has an invalid test result code", () => {
+ let thrownError;
+ const parsedFhirBundle = fhirHelper.parse(
+ exampleSingleTypeHealthCertWithNric.fhirBundle as R4.IBundle
+ );
+ parsedFhirBundle.observations[0].observation.result.code = "foobar";
+ try {
+ fhirHelper.hasRecognisedFields(PdtTypes.Pcr, parsedFhirBundle);
+ } catch (e) {
+ if (e instanceof DetailedCodedError) {
+ thrownError = `${e.title}, ${e.messageBody}`;
+ }
+ }
+ expect(thrownError).toMatchInlineSnapshot(
+ `"Submitted HealthCert is invalid, the following fields in fhirBundle are not recognised: [\\"'0.Observation.valueCodeableConcept.coding[0].code' is an unrecognised code - please use one of the following codes: 10828004,260385009,260373001,260415000\\"]. For more info, refer to the mapping table here: https://github.com/Open-Attestation/schemata/pull/38"`
+ );
+ });
+
+ test("should throw error if multi type HealthCert has an invalid test result code", () => {
+ let thrownError;
+ const parsedFhirBundle = fhirHelper.parse(
+ exampleMultiTypeHealthCertWithNric.fhirBundle as R4.IBundle
+ );
+ parsedFhirBundle.observations[1].observation.result.code = "foobar";
+ try {
+ fhirHelper.hasRecognisedFields(PdtTypes.Art, parsedFhirBundle);
+ } catch (e) {
+ if (e instanceof DetailedCodedError) {
+ thrownError = `${e.title}, ${e.messageBody}`;
+ }
+ }
+ expect(thrownError).toMatchInlineSnapshot(
+ `"Submitted HealthCert is invalid, the following fields in fhirBundle are not recognised: [\\"'1.Observation.valueCodeableConcept.coding[0].code' is an unrecognised code - please use one of the following codes: 10828004,260385009,260373001,260415000\\"]. For more info, refer to the mapping table here: https://github.com/Open-Attestation/schemata/pull/38"`
+ );
+ });
+});
diff --git a/src/models/fhir/recognised.ts b/src/models/fhir/recognised.ts
new file mode 100644
index 00000000..f8831841
--- /dev/null
+++ b/src/models/fhir/recognised.ts
@@ -0,0 +1,24 @@
+import validate from "validate.js";
+import { DocumentInvalidError } from "../../common/error";
+import { ParsedBundle } from "./types";
+import { getRecognisedConstraints, Type } from "./constraints";
+
+export const hasRecognisedFields = (type: Type, parsedBundle: ParsedBundle) => {
+ const constraints = getRecognisedConstraints(
+ type,
+ parsedBundle.observations.length
+ );
+
+ const errors = validate(parsedBundle, constraints, {
+ fullMessages: false,
+ format: "flat",
+ });
+
+ if (errors) {
+ throw new DocumentInvalidError(
+ `the following fields in fhirBundle are not recognised: ${JSON.stringify(
+ errors
+ )}. For more info, refer to the mapping table here: https://github.com/Open-Attestation/schemata/pull/38`
+ );
+ }
+};
diff --git a/src/models/fhir/required.ts b/src/models/fhir/required.ts
index e2ff1af6..2f49345c 100644
--- a/src/models/fhir/required.ts
+++ b/src/models/fhir/required.ts
@@ -1,10 +1,13 @@
import validate from "validate.js";
import { DocumentInvalidError } from "../../common/error";
import { ParsedBundle } from "./types";
-import { getConstraints, Type } from "./constraints";
+import { getRequiredConstraints, Type } from "./constraints";
export const hasRequiredFields = (type: Type, parsedBundle: ParsedBundle) => {
- const constraints = getConstraints(type, parsedBundle.observations.length);
+ const constraints = getRequiredConstraints(
+ type,
+ parsedBundle.observations.length
+ );
const errors = validate(parsedBundle, constraints, {
fullMessages: false,
diff --git a/src/models/healthCert.test.ts b/src/models/healthCert.test.ts
deleted file mode 100644
index 5069765a..00000000
--- a/src/models/healthCert.test.ts
+++ /dev/null
@@ -1,366 +0,0 @@
-import exampleHealthCertWithNric from "../../test/fixtures/v1/example_healthcert_with_nric_unwrapped.json";
-import exampleHealthCertWithoutNric from "../../test/fixtures/v1/example_healthcert_without_nric_unwrapped.json";
-import exampleMultiResultHealthCert from "../../test/fixtures/v1/example_healthcert_multi_result_unwrapped.json";
-import exampleArtHealthCertWithNric from "../../test/fixtures/v1/example_art_healthcert_with_nric_unwrapped.json";
-import {
- getParticularsFromHealthCert,
- getTestDataFromHealthCert,
-} from "./healthCert";
-import { DataInvalidError } from "../common/error";
-import { parseDateTime } from "./healthCertV2";
-
-type testCert =
- | typeof exampleHealthCertWithNric
- | typeof exampleHealthCertWithoutNric
- | typeof exampleMultiResultHealthCert
- | typeof exampleArtHealthCertWithNric;
-const getSwabCollectionDates = (document: testCert): string[] => {
- const entries: any[] = document.fhirBundle.entry;
- return entries
- .filter((entry) => entry?.collection?.collectedDateTime != null)
- .map((entry) => entry.collection.collectedDateTime);
-};
-
-const getObservationDates = (document: testCert): (string | undefined)[] => {
- const entries: any[] = document.fhirBundle.entry;
- return entries
- .filter((entry) => entry?.effectiveDateTime != null)
- .map((entry) => entry.effectiveDateTime);
-};
-
-describe("src/models/healthCert", () => {
- describe("getParticularsFromHealthCert", () => {
- test("should correctly extract patient particulars from a well formed healthcert containing nric", () => {
- expect(
- getParticularsFromHealthCert(exampleHealthCertWithNric as any)
- ).toStrictEqual({
- nric: "S9098989Z",
- fin: undefined,
- passportNumber: "E7831177G",
- });
- });
- test("should correctly extract patient particulars from a well formed healthcert without nric", () => {
- expect(
- getParticularsFromHealthCert(exampleHealthCertWithoutNric as any)
- ).toStrictEqual({
- nric: undefined,
- fin: undefined,
- passportNumber: "E7831177G",
- });
- });
- });
- describe("getTestDataFromHealthCert", () => {
- describe("single observation flow", () => {
- test("should correctly extract test data from a well formed ART healthcert", () => {
- const swabCollectionDates: string[] = getSwabCollectionDates(
- exampleArtHealthCertWithNric
- );
- const observationDates: (string | undefined)[] = getObservationDates(
- exampleArtHealthCertWithNric
- );
-
- const swabCollectionDate = parseDateTime(swabCollectionDates[0]);
- const observationDate = parseDateTime(observationDates[0]);
- expect(
- getTestDataFromHealthCert(exampleArtHealthCertWithNric as any)
- ).toStrictEqual([
- {
- lab: undefined,
- nric: "S9098989Z",
- observationDate,
- passportNumber: "E7831177G",
- birthDate: "15/01/1990",
- patientName: "Tan Chen Chen",
- nationality: "Singaporean",
- gender: "She",
- performerMcr: "MCR 123214",
- performerName: "Dr Michael Lim",
- provider: "MacRitchie Medical Clinic",
- swabCollectionDate,
- swabType: "Anterior nares swab",
- swabTypeCode: "697989009",
- testResult: "Negative",
- testResultCode: "260385009",
- testCode: "97097-0",
- testType:
- "SARS-CoV-2 (COVID-19) Ag [Presence] in Upper respiratory specimen by Rapid immunoassay",
- deviceIdentifier: "1232",
- },
- ]);
- });
-
- test("should throw error if ART healthcert not have device identifier", () => {
- const malformedHealthCert = exampleArtHealthCertWithNric as any;
- malformedHealthCert.fhirBundle.entry.pop();
- expect(() =>
- getTestDataFromHealthCert(malformedHealthCert)
- ).toThrowError(DataInvalidError);
- });
-
- test("should correctly extract test data from a well formed PCR healthcert", () => {
- const swabCollectionDates: string[] = getSwabCollectionDates(
- exampleHealthCertWithNric
- );
- const observationDates: (string | undefined)[] = getObservationDates(
- exampleHealthCertWithNric
- );
-
- const swabCollectionDate = parseDateTime(swabCollectionDates[0]);
- const observationDate = parseDateTime(observationDates[0]);
-
- expect(
- getTestDataFromHealthCert(exampleHealthCertWithNric as any)
- ).toStrictEqual([
- {
- lab: "MacRitchie Laboratory",
- nric: "S9098989Z",
- observationDate,
- passportNumber: "E7831177G",
- birthDate: "15/01/1990",
- patientName: "Tan Chen Chen",
- nationality: "Singaporean",
- gender: "She",
- performerMcr: "MCR 123214",
- performerName: "Dr Michael Lim",
- provider: "MacRitchie Medical Clinic",
- swabCollectionDate,
- swabType: "Nasopharyngeal swab",
- swabTypeCode: "258500001",
- testResult: "Negative",
- testResultCode: "260385009",
- testCode: "94531-1",
- testType:
- "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- },
- ]);
- });
-
- test("should throw error if observation object not found", () => {
- const malformedHealthCert = {
- fhirBundle: {
- entry: [
- {
- resourceType: "Teletubby",
- identifier: [{ type: "NAME", value: "Lala" }],
- },
- ],
- },
- };
-
- expect(() =>
- getTestDataFromHealthCert(malformedHealthCert as any)
- ).toThrowError(DataInvalidError);
- });
-
- test("should throw error if valueCodeableConcept missing", () => {
- const malformedHealthCertWithoutValueCodeableConcept = {
- fhirBundle: {
- entry: [
- {
- resourceType: "Observation",
- specimen: {
- reference: "urn:uuid:bbbb1321-4af5-424c-a0e1-ed3aab1c349d",
- },
- code: {
- coding: [
- {
- system: "http://loinc.org",
- code: "94531-1",
- display:
- "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- },
- ],
- },
- },
- {
- resourceType: "Specimen",
- collection: {
- collectedDateTime: "2020-09-27T06:15:00Z",
- },
- },
- ],
- },
- };
- expect(() =>
- getTestDataFromHealthCert(
- malformedHealthCertWithoutValueCodeableConcept as any
- )
- ).toThrowError(DataInvalidError);
- });
-
- test("should throw error if code missing", () => {
- const malformedHealthCertWithoutCode = {
- fhirBundle: {
- entry: [
- {
- resourceType: "Observation",
- specimen: {
- reference: "urn:uuid:bbbb1321-4af5-424c-a0e1-ed3aab1c349d",
- },
- valueCodeableConcept: {
- coding: [
- {
- system: "http://snomed.info/sct",
- code: "260385009",
- display: "Negative",
- },
- ],
- },
- },
- {
- resourceType: "Specimen",
- collection: {
- collectedDateTime: "2020-09-27T06:15:00Z",
- },
- },
- ],
- },
- };
- expect(() =>
- getTestDataFromHealthCert(malformedHealthCertWithoutCode as any)
- ).toThrowError(DataInvalidError);
- });
-
- test("should throw error if specimen reference is missing", () => {
- const malformedHealthCertWithoutSpecimenReference = {
- fhirBundle: {
- entry: [
- {
- resourceType: "Observation",
- valueCodeableConcept: {
- coding: [
- {
- system: "http://snomed.info/sct",
- code: "260385009",
- display: "Negative",
- },
- ],
- },
- code: {
- coding: [
- {
- system: "http://loinc.org",
- code: "94531-1",
- display:
- "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- },
- ],
- },
- },
- {
- resourceType: "Specimen",
- collection: {
- collectedDateTime: "2020-09-27T06:15:00Z",
- },
- },
- ],
- },
- };
- expect(() =>
- getTestDataFromHealthCert(
- malformedHealthCertWithoutSpecimenReference as any
- )
- ).toThrowError(DataInvalidError);
- });
-
- test("should throw error if specimen is missing", () => {
- const malformedHealthCertWithoutSpecimen = {
- fhirBundle: {
- entry: [
- {
- resourceType: "Observation",
- specimen: {
- reference: "urn:uuid:bbbb1321-4af5-424c-a0e1-ed3aab1c349d",
- },
- valueCodeableConcept: {
- coding: [
- {
- system: "http://snomed.info/sct",
- code: "260385009",
- display: "Negative",
- },
- ],
- },
- code: {
- coding: [
- {
- system: "http://loinc.org",
- code: "94531-1",
- display:
- "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- },
- ],
- },
- },
- ],
- },
- };
- expect(() =>
- getTestDataFromHealthCert(malformedHealthCertWithoutSpecimen as any)
- ).toThrowError(DataInvalidError);
- });
- });
- describe("multi observation flow", () => {
- test("should correctly extract test data from a well formed healthcert", () => {
- const swabCollectionDates: string[] = getSwabCollectionDates(
- exampleMultiResultHealthCert
- );
- const observationDates: (string | undefined)[] = getObservationDates(
- exampleMultiResultHealthCert
- );
-
- const swabCollectionDate1 = parseDateTime(swabCollectionDates[0]);
- const observationDate1 = parseDateTime(observationDates[0]);
- const swabCollectionDate2 = parseDateTime(swabCollectionDates[1]);
- const observationDate2 = parseDateTime(observationDates[1]);
-
- expect(
- getTestDataFromHealthCert(exampleMultiResultHealthCert as any)
- ).toStrictEqual([
- {
- lab: "MacRitchie Laboratory",
- nric: "S9098989Z",
- observationDate: observationDate1,
- passportNumber: "E7831177G",
- birthDate: "15/01/1990",
- patientName: "Tan Chen Chen",
- nationality: "Singaporean",
- gender: "She",
- performerMcr: "MCR 123214",
- performerName: "Dr Michael Lim",
- provider: "MacRitchie Medical Clinic",
- swabCollectionDate: swabCollectionDate1,
- swabType: "Nasopharyngeal swab",
- swabTypeCode: "258500001",
- testResult: "Negative",
- testResultCode: "260385009",
- testCode: "94531-1",
- testType:
- "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- },
- {
- lab: "MacRitchie Laboratory2",
- nric: "S9098989Z",
- observationDate: observationDate2,
- passportNumber: "E7831177G",
- birthDate: "15/01/1990",
- patientName: "Tan Chen Chen",
- nationality: "Singaporean",
- gender: "She",
- performerMcr: "MCR 123214",
- performerName: "Dr Michael Lim",
- provider: "MacRitchie Medical Clinic2",
- swabCollectionDate: swabCollectionDate2,
- swabType: "Nasopharyngeal swab",
- swabTypeCode: "258500001",
- testResult: "Negative",
- testResultCode: "260385009",
- testCode: "94531-1",
- testType:
- "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- },
- ]);
- });
- });
- });
-});
diff --git a/src/models/healthCert.ts b/src/models/healthCert.ts
deleted file mode 100644
index b281add2..00000000
--- a/src/models/healthCert.ts
+++ /dev/null
@@ -1,228 +0,0 @@
-// @ts-nocheck
-// TODO: remove no check. The code to get test data was copied from health cert renderer which also did not enforce type safety
-import { Patient } from "@govtechsg/oa-schemata/dist/types/__generated__/sg/gov/moh/pdt-healthcert/1.0/schema";
-import { pdtHealthCertV1 as healthcert } from "@govtechsg/oa-schemata";
-import { HealthCertDocument, TestData } from "../types";
-import { validateHealthCertData } from "../common/healthCertDataValidation";
-import { DataInvalidError } from "../common/error";
-import { getNationality } from "../common/nationality";
-import { parseDateTime } from "./healthCertV2";
-
-const getPatientFromHealthCert = (document: HealthCertDocument) =>
- document.fhirBundle.entry.find(
- (entry) => entry?.resourceType === "Patient"
- ) as Patient | undefined;
-
-export const getParticularsFromHealthCert = (document: HealthCertDocument) => {
- const patient = getPatientFromHealthCert(document);
-
- const nric = patient?.identifier?.find(
- (identifierEntry) =>
- identifierEntry.type instanceof Object &&
- identifierEntry.type.text === "NRIC"
- );
-
- const fin = patient?.identifier?.find(
- (identifierEntry) =>
- identifierEntry.type instanceof Object &&
- identifierEntry.type.text === "FIN"
- );
-
- const ppn = patient?.identifier?.find(
- (identifierEntry) => identifierEntry.type === "PPN"
- );
-
- return { nric: nric?.value, fin: fin?.value, passportNumber: ppn?.value };
-};
-
-export const getTestDataFromHealthCert = (
- document: HealthCertDocument
-): TestData[] => {
- const patient = document.fhirBundle.entry.find(
- (entry) => entry.resourceType === "Patient"
- );
- const observations = document.fhirBundle.entry.filter(
- (entry) => entry.resourceType === "Observation"
- );
- const device = document.fhirBundle.entry.find(
- (entry) => entry.resourceType === "Device"
- );
-
- const { passportNumber, nric } = getParticularsFromHealthCert(document);
-
- const patientName =
- typeof patient?.name?.[0] === "object" ? patient?.name?.[0].text : "";
- const patientNationality = patient?.extension?.find(
- (extension) =>
- extension.url ===
- "http://hl7.org/fhir/StructureDefinition/patient-nationality"
- );
- const deviceIdentifier =
- typeof device?.type?.coding?.[0] === "object"
- ? device?.type?.coding?.[0].code
- : null;
-
- const testData = [];
-
- // backward compatibility for healthcerts with no full url and only one test. auto resolve to first match instead
- if (observations.length === 1) {
- const observation = observations[0];
- const specimen = document.fhirBundle.entry.find(
- (entry) => entry.resourceType === "Specimen"
- );
- const provider = document.fhirBundle.entry.find(
- (entry) =>
- entry.resourceType === "Organization" &&
- entry.type === "Licensed Healthcare Provider"
- );
- const lab = document.fhirBundle.entry.find(
- (entry) =>
- entry.resourceType === "Organization" &&
- entry.type === "Accredited Laboratory"
- );
-
- const testCode = observation?.code?.coding?.[0]?.code;
- const testType = observation?.code?.coding?.[0]?.display;
-
- let testResult = observation?.valueCodeableConcept?.coding[0]?.display;
- const testResultCode = observation?.valueCodeableConcept?.coding?.[0]?.code;
- const codesDict: Record = {
- "260385009": "Negative",
- "10828004": "Positive",
- };
- if (testResultCode && testResultCode in codesDict) {
- testResult = codesDict[testResultCode];
- }
-
- const swabType =
- typeof specimen?.type === "object"
- ? specimen?.type.coding?.[0]
- : undefined;
- const swabCollectionDate = parseDateTime(
- specimen?.collection?.collectedDateTime
- );
-
- const performerName = observation?.performer?.name?.[0]?.text;
- const performerMcr = observation?.qualification?.[0]?.identifier;
- const observationDate = parseDateTime(observation?.effectiveDateTime);
- const nationality = getNationality(patientNationality?.code?.text ?? "");
- const gender =
- patient?.gender?.toLowerCase() === healthcert.Gender.Female.toLowerCase()
- ? "She"
- : "He";
-
- const testDataValue: TestData = {
- provider: provider?.name,
- lab: lab?.name,
- swabType: swabType?.display,
- swabTypeCode: swabType?.code,
- patientName,
- swabCollectionDate,
- performerName,
- performerMcr,
- observationDate,
- nric,
- passportNumber,
- birthDate: patient?.birthDate?.split("-")?.reverse()?.join("/"),
- testCode,
- testType,
- nationality,
- gender,
- testResult,
- testResultCode,
- };
-
- if (deviceIdentifier) {
- testDataValue.deviceIdentifier = deviceIdentifier;
- }
- testData.push(testDataValue);
- } else {
- observations.forEach((observation) => {
- const specimenReference = observation?.specimen?.reference;
- const organisationReferences = observation?.performerReference?.map(
- (organisation) => organisation?.reference
- );
-
- // certs with multiple observations need to have reference to point the right specimens and organisations to the observation
- if (!specimenReference || !organisationReferences) {
- throw new DataInvalidError(["observation references"]);
- }
-
- const specimen = document.fhirBundle.entry.find(
- (entry) =>
- entry.resourceType === "Specimen" &&
- entry?.fullUrl === specimenReference
- );
- const provider = document.fhirBundle.entry.find(
- (entry) =>
- entry.resourceType === "Organization" &&
- entry.type === "Licensed Healthcare Provider" &&
- organisationReferences.includes(entry?.fullUrl)
- );
- const lab = document.fhirBundle.entry.find(
- (entry) =>
- entry.resourceType === "Organization" &&
- entry.type === "Accredited Laboratory" &&
- organisationReferences.includes(entry?.fullUrl)
- );
- const testCode = observation?.code?.coding?.[0]?.code;
- const testType = observation?.code?.coding?.[0]?.display;
- let testResult = observation?.valueCodeableConcept?.coding[0]?.display;
- const testResultCode =
- observation?.valueCodeableConcept?.coding?.[0]?.code;
- const codesDict: Record = {
- "260385009": "Negative",
- "10828004": "Positive",
- };
- if (testResultCode && testResultCode in codesDict) {
- testResult = codesDict[testResultCode];
- }
- const swabType =
- typeof specimen?.type === "object"
- ? specimen?.type.coding?.[0]
- : undefined;
- const swabCollectionDate = parseDateTime(
- specimen?.collection?.collectedDateTime
- );
-
- const performerName = observation?.performer?.name?.[0]?.text;
- const performerMcr = observation?.qualification?.[0]?.identifier;
- const observationDate = parseDateTime(observation?.effectiveDateTime);
-
- const nationality = getNationality(patientNationality?.code?.text ?? "");
- const gender =
- patient?.gender?.toLowerCase() ===
- healthcert.Gender.Female.toLowerCase()
- ? "She"
- : "He";
-
- const testDataValue: TestData = {
- provider: provider?.name,
- lab: lab?.name,
- swabType: swabType?.display,
- swabTypeCode: swabType?.code,
- patientName,
- swabCollectionDate,
- performerName,
- performerMcr,
- observationDate,
- nric,
- passportNumber,
- birthDate: patient?.birthDate?.split("-")?.reverse()?.join("/"),
- testCode,
- testType,
- nationality,
- gender,
- testResult,
- testResultCode,
- };
-
- if (deviceIdentifier) {
- testDataValue.deviceIdentifier = deviceIdentifier;
- }
- testData.push(testDataValue);
- });
- }
- validateHealthCertData(testData);
- return testData;
-};
diff --git a/src/models/healthCertV2.test.ts b/src/models/healthCertV2.test.ts
deleted file mode 100644
index bfe3f3f1..00000000
--- a/src/models/healthCertV2.test.ts
+++ /dev/null
@@ -1,404 +0,0 @@
-import { R4 } from "@ahryman40k/ts-fhir-types";
-import exampleHealthCertWithNric from "../../test/fixtures/v2/pdt_pcr_with_nric_unwrapped.json";
-import exampleHealthCertWithoutNric from "../../test/fixtures/v2/pdt_pcr_without_nric_unwrapped.json";
-import exampleMultiResultHealthCert from "../../test/fixtures/v2/pdt_pcr_ser_multi_result_unwrapped.json";
-import exampleArtHealthCertWithNric from "../../test/fixtures/v2/pdt_art_with_nric_unwrapped.json";
-import { getTestDataFromParseFhirBundle, parseDateTime } from "./healthCertV2";
-import fhirHelper from "./fhir";
-
-type testCert =
- | typeof exampleHealthCertWithNric
- | typeof exampleHealthCertWithoutNric
- | typeof exampleMultiResultHealthCert
- | typeof exampleArtHealthCertWithNric;
-const getSwabCollectionDates = (document: testCert): string[] => {
- const entries: any[] = document.fhirBundle.entry;
- return entries
- .filter((entry) => entry?.resource?.collection?.collectedDateTime != null)
- .map((entry) => entry.resource.collection.collectedDateTime);
-};
-
-const getObservationDates = (document: testCert): (string | undefined)[] => {
- const entries: any[] = document.fhirBundle.entry;
- return entries
- .filter((entry) => entry?.resource?.effectiveDateTime != null)
- .map((entry) => entry.resource.effectiveDateTime);
-};
-
-describe("src/models/healthCertV2", () => {
- describe("getParticularsFromHealthCert", () => {
- test("should correctly extract patient particulars from a well formed healthcert containing nric", () => {
- const parseFhirBundle = fhirHelper.parse(
- exampleHealthCertWithNric.fhirBundle as R4.IBundle
- );
- expect(getTestDataFromParseFhirBundle(parseFhirBundle)).toStrictEqual([
- {
- birthDate: "15/01/1990",
- gender: "She",
- lab: "MacRitchie Laboratory",
- nationality: "Singaporean",
- nric: "S9098989Z",
- observationDate: "9/28/20 2:15:00 PM GMT+08:00",
- passportNumber: "E7831177G",
- patientName: "Tan Chen Chen",
- performerMcr: "123456",
- performerName: "Dr Michael Lim",
- provider: "MacRitchie Medical Clinic",
- swabCollectionDate: "9/27/20 2:15:00 PM GMT+08:00",
- swabType: "Nasopharyngeal swab",
- swabTypeCode: "258500001",
- testResult: "Negative",
- testResultCode: "260385009",
- testCode: "94531-1",
- testType:
- "SARS-CoV-2 (COVID-19) RNA panel - Respiratory specimen by NAA with probe detection",
- },
- ]);
- });
- test("should correctly extract patient particulars from a well formed healthcert without nric", () => {
- const parseFhirBundle = fhirHelper.parse(
- exampleHealthCertWithoutNric.fhirBundle as R4.IBundle
- );
- expect(getTestDataFromParseFhirBundle(parseFhirBundle)).toStrictEqual([
- {
- birthDate: "15/01/1990",
- gender: "She",
- lab: "MacRitchie Laboratory",
- nationality: "Singaporean",
- nric: "",
- observationDate: "9/28/20 2:15:00 PM GMT+08:00",
- passportNumber: "E7831177G",
- patientName: "Tan Chen Chen",
- performerMcr: "123456",
- performerName: "Dr Michael Lim",
- provider: "MacRitchie Medical Clinic",
- swabCollectionDate: "9/27/20 2:15:00 PM GMT+08:00",
- swabType: "Nasopharyngeal swab",
- swabTypeCode: "258500001",
- testResult: "Negative",
- testResultCode: "260385009",
- testCode: "94531-1",
- testType:
- "SARS-CoV-2 (COVID-19) RNA panel - Respiratory specimen by NAA with probe detection",
- },
- ]);
- });
- });
- describe("getTestDataFromHealthCert", () => {
- describe("single observation flow", () => {
- test("should correctly extract test data from a well formed ART healthcert", () => {
- const swabCollectionDates: string[] = getSwabCollectionDates(
- exampleArtHealthCertWithNric
- );
- const observationDates: (string | undefined)[] = getObservationDates(
- exampleArtHealthCertWithNric
- );
-
- const swabCollectionDate = parseDateTime(swabCollectionDates[0]);
- const observationDate = parseDateTime(observationDates[0]);
- const parseFhirBundle = fhirHelper.parse(
- exampleArtHealthCertWithNric.fhirBundle as R4.IBundle
- );
- expect(getTestDataFromParseFhirBundle(parseFhirBundle)).toStrictEqual([
- {
- lab: undefined,
- nric: "S9098989Z",
- observationDate,
- passportNumber: "E7831177G",
- birthDate: "15/01/1990",
- patientName: "Tan Chen Chen",
- nationality: "Singaporean",
- gender: "She",
- performerMcr: "123456",
- performerName: "Dr Michael Lim",
- provider: "MacRitchie Medical Clinic",
- swabCollectionDate,
- swabType: "Anterior nares swab",
- swabTypeCode: "697989009",
- testResult: "Negative",
- testResultCode: "260385009",
- testCode: "97097-0",
- testType:
- "SARS-CoV-2 (COVID-19) Ag [Presence] in Upper respiratory specimen by Rapid immunoassay",
- deviceIdentifier: "1232",
- },
- ]);
- });
-
- test("should correctly extract test data from a well formed PCR healthcert", () => {
- const swabCollectionDates: string[] = getSwabCollectionDates(
- exampleHealthCertWithNric
- );
- const observationDates: (string | undefined)[] = getObservationDates(
- exampleHealthCertWithNric
- );
-
- const swabCollectionDate = parseDateTime(swabCollectionDates[0]);
- const observationDate = parseDateTime(observationDates[0]);
- const parseFhirBundle = fhirHelper.parse(
- exampleHealthCertWithNric.fhirBundle as R4.IBundle
- );
- expect(getTestDataFromParseFhirBundle(parseFhirBundle)).toStrictEqual([
- {
- lab: "MacRitchie Laboratory",
- nric: "S9098989Z",
- observationDate,
- passportNumber: "E7831177G",
- birthDate: "15/01/1990",
- patientName: "Tan Chen Chen",
- nationality: "Singaporean",
- gender: "She",
- performerMcr: "123456",
- performerName: "Dr Michael Lim",
- provider: "MacRitchie Medical Clinic",
- swabCollectionDate,
- swabType: "Nasopharyngeal swab",
- swabTypeCode: "258500001",
- testResult: "Negative",
- testResultCode: "260385009",
- testCode: "94531-1",
- testType:
- "SARS-CoV-2 (COVID-19) RNA panel - Respiratory specimen by NAA with probe detection",
- },
- ]);
- });
-
- test("should throw error if observation object not found", () => {
- const malformedHealthCert = {
- fhirBundle: {
- entry: [
- {
- resourceType: "Teletubby",
- identifier: [{ type: "NAME", value: "Lala" }],
- },
- ],
- },
- };
- expect(() =>
- // @ts-ignore
- fhirHelper.parse(malformedHealthCert.fhirBundle as R4.IBundle)
- ).toThrowError(Error);
- });
-
- test("should throw error if valueCodeableConcept missing", () => {
- const malformedHealthCertWithoutValueCodeableConcept = {
- fhirBundle: {
- entry: [
- {
- resourceType: "Observation",
- specimen: {
- reference: "urn:uuid:bbbb1321-4af5-424c-a0e1-ed3aab1c349d",
- },
- code: {
- coding: [
- {
- system: "http://loinc.org",
- code: "94531-1",
- display:
- "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- },
- ],
- },
- },
- {
- resourceType: "Specimen",
- collection: {
- collectedDateTime: "2020-09-27T06:15:00Z",
- },
- },
- ],
- },
- };
- expect(() =>
- fhirHelper.parse(
- // @ts-ignore
- malformedHealthCertWithoutValueCodeableConcept.fhirBundle as R4.IBundle
- )
- ).toThrowError(Error);
- });
-
- test("should throw error if code missing", () => {
- const malformedHealthCertWithoutCode = {
- fhirBundle: {
- entry: [
- {
- resourceType: "Observation",
- specimen: {
- reference: "urn:uuid:bbbb1321-4af5-424c-a0e1-ed3aab1c349d",
- },
- valueCodeableConcept: {
- coding: [
- {
- system: "http://snomed.info/sct",
- code: "260385009",
- display: "Negative",
- },
- ],
- },
- },
- {
- resourceType: "Specimen",
- collection: {
- collectedDateTime: "2020-09-27T06:15:00Z",
- },
- },
- ],
- },
- };
- expect(() =>
- fhirHelper.parse(
- // @ts-ignore
- malformedHealthCertWithoutCode.fhirBundle as R4.IBundle
- )
- ).toThrowError(Error);
- });
-
- test("should throw error if specimen reference is missing", () => {
- const malformedHealthCertWithoutSpecimenReference = {
- fhirBundle: {
- entry: [
- {
- resourceType: "Observation",
- valueCodeableConcept: {
- coding: [
- {
- system: "http://snomed.info/sct",
- code: "260385009",
- display: "Negative",
- },
- ],
- },
- code: {
- coding: [
- {
- system: "http://loinc.org",
- code: "94531-1",
- display:
- "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- },
- ],
- },
- },
- {
- resourceType: "Specimen",
- collection: {
- collectedDateTime: "2020-09-27T06:15:00Z",
- },
- },
- ],
- },
- };
- expect(() =>
- fhirHelper.parse(
- // @ts-ignore
- malformedHealthCertWithoutSpecimenReference.fhirBundle as R4.IBundle
- )
- ).toThrowError(Error);
- });
-
- test("should throw error if specimen is missing", () => {
- const malformedHealthCertWithoutSpecimen = {
- fhirBundle: {
- entry: [
- {
- resourceType: "Observation",
- specimen: {
- reference: "urn:uuid:bbbb1321-4af5-424c-a0e1-ed3aab1c349d",
- },
- valueCodeableConcept: {
- coding: [
- {
- system: "http://snomed.info/sct",
- code: "260385009",
- display: "Negative",
- },
- ],
- },
- code: {
- coding: [
- {
- system: "http://loinc.org",
- code: "94531-1",
- display:
- "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- },
- ],
- },
- },
- ],
- },
- };
- expect(() =>
- fhirHelper.parse(
- // @ts-ignore
- malformedHealthCertWithoutSpecimen.fhirBundle as R4.IBundle
- )
- ).toThrowError(Error);
- });
- });
- describe("multi observation flow", () => {
- test("should correctly extract test data from a well formed healthcert", () => {
- const swabCollectionDates: string[] = getSwabCollectionDates(
- exampleMultiResultHealthCert
- );
- const observationDates: (string | undefined)[] = getObservationDates(
- exampleMultiResultHealthCert
- );
-
- const swabCollectionDate1 = parseDateTime(swabCollectionDates[0]);
- const observationDate1 = parseDateTime(observationDates[0]);
- const swabCollectionDate2 = parseDateTime(swabCollectionDates[1]);
- const observationDate2 = parseDateTime(observationDates[1]);
-
- const parseFhirBundle = fhirHelper.parse(
- exampleMultiResultHealthCert.fhirBundle as R4.IBundle
- );
-
- expect(getTestDataFromParseFhirBundle(parseFhirBundle)).toStrictEqual([
- {
- lab: "MacRitchie Laboratory",
- nric: "S9098989Z",
- observationDate: observationDate1,
- passportNumber: "E7831177G",
- birthDate: "15/01/1990",
- patientName: "Tan Chen Chen",
- nationality: "Singaporean",
- gender: "She",
- performerMcr: "123456",
- performerName: "Dr Michael Lim",
- provider: "MacRitchie Medical Clinic",
- swabCollectionDate: swabCollectionDate1,
- swabType: "Nasopharyngeal swab",
- swabTypeCode: "258500001",
- testResult: "Negative",
- testResultCode: "260385009",
- testCode: "94531-1",
- testType:
- "SARS-CoV-2 (COVID-19) RNA panel - Respiratory specimen by NAA with probe detection",
- },
- {
- lab: "MacRitchie Laboratory",
- nric: "S9098989Z",
- observationDate: observationDate2,
- passportNumber: "E7831177G",
- birthDate: "15/01/1990",
- patientName: "Tan Chen Chen",
- nationality: "Singaporean",
- gender: "She",
- performerMcr: "123456",
- performerName: "Dr Michael Lim",
- provider: "MacRitchie Medical Clinic",
- swabCollectionDate: swabCollectionDate2,
- swabType: "Venipuncture",
- swabTypeCode: "22778000",
- testResult: "Negative",
- testResultCode: "260385009",
- testCode: "94661-6",
- testType:
- "SARS-CoV-2 (COVID-19) Ab [Interpretation] in Serum or Plasma",
- },
- ]);
- });
- });
- });
-});
diff --git a/src/models/healthCertV2.ts b/src/models/healthCertV2.ts
deleted file mode 100644
index 30592716..00000000
--- a/src/models/healthCertV2.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-import { pdtHealthCertV2 as healthcert } from "@govtechsg/oa-schemata";
-import moment from "moment-timezone";
-import { TestData } from "src/types";
-import { getNationality } from "../common/nationality";
-import { ParsedBundle } from "./fhir/types";
-
-export const codesDict: Record = {
- "260385009": "Negative",
- "10828004": "Positive",
-};
-
-export const parseDateTime = (dateString: string | undefined): string =>
- dateString
- ? `${moment
- .tz(dateString, "Asia/Singapore")
- .format("M/D/YY h:mm:ss A")} GMT+08:00`
- : "";
-
-export const getTestDataFromParseFhirBundle = (
- parseFhirBundle: ParsedBundle
-): TestData[] => {
- const testData: TestData[] = [];
- parseFhirBundle.observations.forEach((observationGroup) => {
- const testResultCode = observationGroup.observation.result?.code || "";
- const testResult =
- testResultCode && testResultCode in codesDict
- ? codesDict[testResultCode]
- : "";
-
- const testCode = observationGroup.observation.testType?.code;
- const testType = observationGroup.observation.testType?.display;
-
- const gender =
- parseFhirBundle.patient?.gender?.toLowerCase() ===
- healthcert.Gender.Female.toLowerCase()
- ? "She"
- : "He";
-
- const testDataValue: TestData = {
- provider: observationGroup.organization.lhp?.fullName,
- lab: observationGroup.organization.al?.fullName,
- swabType: observationGroup.specimen.swabType?.display || "",
- swabTypeCode: observationGroup.specimen.swabType?.code || "",
- patientName: parseFhirBundle.patient?.fullName,
- swabCollectionDate: parseDateTime(
- observationGroup.specimen.collectionDateTime
- ),
- performerName: observationGroup.practitioner?.fullName,
- performerMcr: observationGroup.practitioner?.mcr,
- observationDate: parseDateTime(
- observationGroup.observation?.effectiveDateTime
- ),
- nric: parseFhirBundle.patient?.nricFin || "",
- passportNumber: parseFhirBundle.patient?.passportNumber,
- birthDate: parseFhirBundle.patient?.birthDate
- ?.split("-")
- ?.reverse()
- ?.join("/"),
- testCode: testCode || "",
- testType: testType || "",
- nationality: getNationality(parseFhirBundle.patient?.nationality?.code),
- gender,
- testResult,
- testResultCode,
- };
-
- if (observationGroup.device) {
- testDataValue.deviceIdentifier = observationGroup.device.type.code;
- }
- testData.push(testDataValue);
- });
- return testData;
-};
diff --git a/src/models/notarizedHealthCert/createNotarizedHealthCert/createNotarizedHealthCert.test.ts b/src/models/notarizedHealthCert/createNotarizedHealthCert/createNotarizedHealthCert.test.ts
deleted file mode 100644
index 3cbe804b..00000000
--- a/src/models/notarizedHealthCert/createNotarizedHealthCert/createNotarizedHealthCert.test.ts
+++ /dev/null
@@ -1,409 +0,0 @@
-import { getData } from "@govtechsg/open-attestation";
-import { notarise } from "@govtechsg/oa-schemata";
-import { createNotarizedHealthCert } from "./createNotarizedHealthCert";
-import exampleHealthcertWrapped from "../../../../test/fixtures/v1/example_healthcert_with_nric_wrapped.json";
-import { mockDate, unmockDate } from "../../../../test/utils";
-
-const sampleDocument = exampleHealthcertWrapped as any;
-const uuid = "e35f5d2a-4198-4f8f-96dc-d1afe0b67119";
-const storedUrl = "https://example.com";
-const sampleSignedEuHealthCerts: notarise.SignedEuHealthCert[] = [
- {
- type: "PCR",
- qr: "HC1:abcde",
- expiryDateTime: "2022-12-17T01:27:50.263Z",
- },
-];
-
-beforeAll(mockDate);
-afterAll(unmockDate);
-
-it("should wrap a document and sign the document", async () => {
- const createdDocument = await createNotarizedHealthCert(
- sampleDocument,
- uuid,
- storedUrl
- );
- const documentData = getData(createdDocument);
- expect(documentData).toMatchInlineSnapshot(
- documentData,
- `
- Object {
- "$template": Object {
- "name": "HEALTH_CERT",
- "type": "EMBEDDED_RENDERER",
- "url": "https://healthcert.renderer.moh.gov.sg/",
- },
- "attachments": Array [
- Object {
- "data": "eyJ2ZXJzaW9uIjoiaHR0cHM6Ly9zY2hlbWEub3BlbmF0dGVzdGF0aW9uLmNvbS8yLjAvc2NoZW1hLmpzb24iLCJkYXRhIjp7ImlkIjoiYTFjMmQyODItNmMxZi00ZTQyLWEzMzUtZTg4OGRhNGQxYjM0OnN0cmluZzpURVNUMDAxIiwibmFtZSI6ImMyNzI3NTNkLWRjYTItNDk5Zi1iNTQzLTM4MTQ0OWU4NTA3NDpzdHJpbmc6SGVhbHRoQ2VydCIsInZhbGlkRnJvbSI6IjhjMWVlYWVkLWU4MTItNDliMi1iZTY2LTg2OGIxZmNiNDJmZTpzdHJpbmc6MjAyMC0xMS0yMCIsImZoaXJWZXJzaW9uIjoiNTg2ZDQ4NjEtYzlmZC00ZmE4LTk0NmEtMWIwZGJiMzY2MWM5OnN0cmluZzo0LjAuMSIsImZoaXJCdW5kbGUiOnsicmVzb3VyY2VUeXBlIjoiM2ZkOWI1MjAtN2JiYS00NzczLWJjMTgtMTZmMGY1N2U0NjlmOnN0cmluZzpCdW5kbGUiLCJ0eXBlIjoiMGRkNDZkZGEtODY0Yy00ZTgwLWI0NmUtYzc4MDE2MjFmYzdmOnN0cmluZzpjb2xsZWN0aW9uIiwiZW50cnkiOlt7InJlc291cmNlVHlwZSI6IjdkMTI5MWJiLWIxMTQtNDI0Yi1iMDY2LTE1ZmQyMmFlOWRiNTpzdHJpbmc6UGF0aWVudCIsImV4dGVuc2lvbiI6W3sidXJsIjoiMmVlNGRmNjItYjViZS00MWQ0LWI4ZWYtYWI4ZTE4NTdlMjA4OnN0cmluZzpodHRwOi8vaGw3Lm9yZy9maGlyL1N0cnVjdHVyZURlZmluaXRpb24vcGF0aWVudC1uYXRpb25hbGl0eSIsImNvZGUiOnsidGV4dCI6ImVhOTUzMmQ1LTlhMmQtNDRlYS05ZDFlLTlmZDMyN2M4MzY0NTpzdHJpbmc6U0cifX1dLCJpZGVudGlmaWVyIjpbeyJ0eXBlIjoiMDExYzEzYmUtMzE5Ny00ZDA4LTk0ZTMtYzNkMzExZTgxNjNkOnN0cmluZzpQUE4iLCJ2YWx1ZSI6ImEwZTE0YTUwLTZkMGUtNDk4Ni1iYWE1LThmMmQyZDZkNTZlYjpzdHJpbmc6RTc4MzExNzdHIn0seyJ0eXBlIjp7InRleHQiOiIyZmUyZjIzMy05MzBmLTRlYmItODFmZi1iYmI1MzdhM2Y3ZjI6c3RyaW5nOk5SSUMifSwidmFsdWUiOiI4ODkyMTc2Zi0yZGMzLTQ0ODctOTc1Ni1iOWJmNWUyN2EwYmI6c3RyaW5nOlM5MDk4OTg5WiJ9XSwibmFtZSI6W3sidGV4dCI6IjM0OGY0YThiLTBiMTktNDkyZi05YThhLTk0MTkxZjE3NDg1YzpzdHJpbmc6VGFuIENoZW4gQ2hlbiJ9XSwiZ2VuZGVyIjoiNWE3MWI3Y2ItMWNkNy00NzBjLTgzMWItYzBiMDkzMDJmMmZjOnN0cmluZzpmZW1hbGUiLCJiaXJ0aERhdGUiOiIzN2ZhODRjNy0yMjg1LTQ0N2EtOTRmOS04MWUyMzA2MTY2MTE6c3RyaW5nOjE5OTAtMDEtMTUifSx7InJlc291cmNlVHlwZSI6IjQ2NjUxMzk3LTlhMzAtNDFkYS1iOGQ1LTVlMzk2MTRjMzM1YjpzdHJpbmc6U3BlY2ltZW4iLCJ0eXBlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiYWM5NjQ3ODAtOWFiNS00M2U2LTg3NmMtN2Y2M2IxMjIxNDlkOnN0cmluZzpodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiY29kZSI6IjgwYTM3YTM0LWZhYjEtNGZjOS1iOGFjLWUzNGVkYTZhNDA2YTpzdHJpbmc6MjU4NTAwMDAxIiwiZGlzcGxheSI6IjdmMDFmMGUwLTIxN2UtNDFhYi04MTA1LWUzOGYwMmViNWUxNzpzdHJpbmc6TmFzb3BoYXJ5bmdlYWwgc3dhYiJ9XX0sImNvbGxlY3Rpb24iOnsiY29sbGVjdGVkRGF0ZVRpbWUiOiI1MjcwODc5Yi05OTBkLTRlN2EtYmM3Ny1jNWU5ZWJkZjM5NWY6c3RyaW5nOjIwMjAtMDktMjdUMDY6MTU6MDBaIn19LHsicmVzb3VyY2VUeXBlIjoiNjY2M2I0NjEtYWYwYy00YTI0LWI3ODgtNThiOGY3MjM3NjE5OnN0cmluZzpPYnNlcnZhdGlvbiIsImlkZW50aWZpZXIiOlt7InZhbHVlIjoiNzFlYmNkYWMtOTU1My00MmFmLWE3M2ItNmJlYTQyNmM3MzVhOnN0cmluZzoxMjM0NTY3ODkiLCJ0eXBlIjoiYzQxMjliMWMtY2U5NC00ZDk5LWI4NTktMjc2NzQ2OTJlYzc2OnN0cmluZzpBQ1NOIn1dLCJjb2RlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiMzdkZDBjMTMtZGMxMy00ZDY4LWFhZDYtMzgwOGMzNzg2NWViOnN0cmluZzpodHRwOi8vbG9pbmMub3JnIiwiY29kZSI6IjUwYmUwOWE4LTAwNzMtNGUxMS1iMGNkLWZjOTg5NGM4OGYzMjpzdHJpbmc6OTQ1MzEtMSIsImRpc3BsYXkiOiI5YmYxOWFkNC1jMTFiLTQzOWUtOWUxNS05ZTJmODhiZGY5Nzg6c3RyaW5nOlJldmVyc2UgdHJhbnNjcmlwdGlvbiBwb2x5bWVyYXNlIGNoYWluIHJlYWN0aW9uIChyUlQtUENSKSB0ZXN0In1dfSwidmFsdWVDb2RlYWJsZUNvbmNlcHQiOnsiY29kaW5nIjpbeyJzeXN0ZW0iOiI0YWQ1ODBiNS1iYWQ2LTQxZjEtYmJkYS0xZDlmNGY5ODFiY2M6c3RyaW5nOmh0dHA6Ly9zbm9tZWQuaW5mby9zY3QiLCJjb2RlIjoiNWM2NTRlMWUtNmNjOS00NGViLTllOTktNGU5ZGVjZDU2ODZjOnN0cmluZzoyNjAzODUwMDkiLCJkaXNwbGF5IjoiNzI2Y2E5NjgtMjk0MS00Yzc2LTg3MWQtYWM1N2JhOWNkMDVmOnN0cmluZzpOZWdhdGl2ZSJ9XX0sImVmZmVjdGl2ZURhdGVUaW1lIjoiYzhlYzhhNWYtYWY1ZS00MzYyLTgwM2YtZGMyNzAwM2ZhYjEzOnN0cmluZzoyMDIwLTA5LTI4VDA2OjE1OjAwWiIsInN0YXR1cyI6IjFlYTBkZmE5LWRiMzQtNDFlMy1hNDkwLWRkZWQ0YjM1NGExOTpzdHJpbmc6ZmluYWwiLCJwZXJmb3JtZXIiOnsibmFtZSI6W3sidGV4dCI6ImE3NzI1MDE5LWNkNDYtNDEyNS05MDAzLTdmNDE2NGMyOTY2MjpzdHJpbmc6RHIgTWljaGFlbCBMaW0ifV19LCJxdWFsaWZpY2F0aW9uIjpbeyJpZGVudGlmaWVyIjoiMDExMTY1OWEtNTRhMi00MjYwLWJlMzUtZDNlMmQzZmVlYTAwOnN0cmluZzpNQ1IgMTIzMjE0IiwiaXNzdWVyIjoiZjQzNTRjYzQtYzJhOS00YTk2LWE1OTQtODE1YmNkY2FmNjdjOnN0cmluZzpNT0gifV19LHsicmVzb3VyY2VUeXBlIjoiNDc0ODg4NjYtNjkyMC00MWIwLWJjNzMtMDM1ZmMxMDY3MDFmOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiNzc3OGM2ZTgtZTI5My00NzJiLWJiNmEtNDNmMWFiNDg1YzlkOnN0cmluZzpNYWNSaXRjaGllIE1lZGljYWwgQ2xpbmljIiwidHlwZSI6IjA0OGQ1ZGM4LTg1ZmMtNDQyZC1hMThlLTdmY2UwNDk0ZDczNTpzdHJpbmc6TGljZW5zZWQgSGVhbHRoY2FyZSBQcm92aWRlciIsImVuZHBvaW50Ijp7ImFkZHJlc3MiOiI5NjkzYjdhOS0yMzI5LTRiOTgtODVmNi1hNThjNWNlNGI5ZTU6c3RyaW5nOmh0dHBzOi8vd3d3Lm1hY3JpdGNoaWVjbGluaWMuY29tLnNnIn0sImNvbnRhY3QiOnsidGVsZWNvbSI6W3sic3lzdGVtIjoiYjU5YjI2NDYtNWVjYi00NWM0LThmOGEtODAwYzBjMWI4MDhmOnN0cmluZzpwaG9uZSIsInZhbHVlIjoiZjk5MDMzNjYtMTgyNS00Njc5LWI1MzUtNjk5ODdkZGQyYWQ5OnN0cmluZzorNjU2MzExMzExMSJ9XSwiYWRkcmVzcyI6eyJ0eXBlIjoiYmY0OTE0NDYtMDAzMy00NzBlLThhOTQtMjc4ZmIyNWRkZDY2OnN0cmluZzpwaHlzaWNhbCIsInVzZSI6Ijc0ZTEwMTMzLTcyNTUtNGRjNy04NjNiLTgxYjA1MDZiMWFhMjpzdHJpbmc6d29yayIsInRleHQiOiI3NjFlNDI0OC1iNTI0LTRjODctOGM0ZC0xZDYyZTg3ZjhjZWY6c3RyaW5nOk1hY1JpdGNoaWUgSG9zcGl0YWwgVGhvbXNvbiBSb2FkIFNpbmdhcG9yZSAxMjMwMDAifX19LHsicmVzb3VyY2VUeXBlIjoiMTE3YzhjNjQtYzcyNy00ZGY2LWE3YjItMGE1Mjk3YTZjZTFhOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiMjQzYTliN2ItMzczOC00MWIzLWJiNzQtMGFjY2IyYzFmYWNjOnN0cmluZzpNYWNSaXRjaGllIExhYm9yYXRvcnkiLCJ0eXBlIjoiOTNiMzI4ODgtOTI2MC00NWYyLWE4ZTAtOTE3YzkwOWRiZThkOnN0cmluZzpBY2NyZWRpdGVkIExhYm9yYXRvcnkiLCJjb250YWN0Ijp7InRlbGVjb20iOlt7InN5c3RlbSI6IjM4MDY3NDQ1LTNkNDctNDYyNS1hYjE0LTNmNjk3MjlkODYwYzpzdHJpbmc6cGhvbmUiLCJ2YWx1ZSI6ImUzNDU2MWNlLWQ0MGEtNDE4NC05ZGRkLTM3ODU3OTIzMjg3ZTpzdHJpbmc6KzY1NjI3MTExODgifV0sImFkZHJlc3MiOnsidHlwZSI6ImNjNTcwZDBkLTUzOWEtNGY0Ny05MjExLTlkMWYzMzZkZmVjMjpzdHJpbmc6cGh5c2ljYWwiLCJ1c2UiOiJjMjViZTJhNS04NjUzLTRjZGMtOWQ1ZS0wNjM5OTBmZjY2M2Y6c3RyaW5nOndvcmsiLCJ0ZXh0IjoiOGI0OGYzYzAtNTc1NC00ZmQ3LTk5YTgtMjM0NDNmNDRlOGMzOnN0cmluZzoyIFRob21zb24gQXZlbnVlIDQgU2luZ2Fwb3JlIDA5ODg4OCJ9fX1dfSwiaXNzdWVycyI6W3siaWQiOiI3YzZhNWFmMS1hMTg3LTQ5NTktYjk5My1iYzg1NmZiN2MzYzc6c3RyaW5nOmRpZDpldGhyOjB4RTM5NDc5OTI4Q2M0RWZGRTUwNzc0NDg4NzgwQjlmNjE2YmQ0QjgzMCIsInJldm9jYXRpb24iOnsidHlwZSI6IjhmNmY2OGI0LTQwNzMtNDc5Ni05YTlhLWI4MDM3NmUzNTk4NjpzdHJpbmc6Tk9ORSJ9LCJuYW1lIjoiNGQ2MTRiYzctNDk2NC00YmI5LTkyYjYtNGM4YWQzNmQ3ZTgwOnN0cmluZzpTQU1QTEUgQ0xJTklDIiwiaWRlbnRpdHlQcm9vZiI6eyJ0eXBlIjoiNjI3YmE4NjYtYjcxNC00MTcyLWJiOGUtYmFhYzcwYzdmYzJkOnN0cmluZzpETlMtRElEIiwibG9jYXRpb24iOiI5ZGRlN2RjOC1lMTk4LTQ1ZDItYmJjNi1jYzg2NDgyMWEwMzQ6c3RyaW5nOmRvbm90dmVyaWZ5LnRlc3RpbmcudmVyaWZ5Lmdvdi5zZyIsImtleSI6Ijg5MjRjOWRhLTYzNjQtNDZhZi04MTc1LTAzMDM1OTk5NWNkNDpzdHJpbmc6ZGlkOmV0aHI6MHhFMzk0Nzk5MjhDYzRFZkZFNTA3NzQ0ODg3ODBCOWY2MTZiZDRCODMwI2NvbnRyb2xsZXIifX1dLCJsb2dvIjoiOGU5NDFkY2ItM2MzNi00NGZiLWFlZTEtODgxMzY2MzQ2ZGY4OnN0cmluZzpkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWZRQUFBRElDQU1BQUFBcHgrUGFBQUFBTTFCTVZFVUFBQURNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16ZUNtaUFBQUFBRUhSU1RsTUFRTCtBN3hBZ24yRFAzekJ3cjFDUEVsK0kvUUFBQndkSlJFRlVlTnJzbmQxMjJ5b1FSdmtISVNITit6L3R5VWs5b1RFQ1ExYlRCYzIzYnlOczBCNUdJREFSQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWsrSWsrSWR4NGc1TjRCOUdRL3JQQTlKL0lQZlNnd0wvTUVFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUR3UDVaUG9QNXI3RkpLQWY3Y3VmQmloUE5Ta1g1aGxBOXUrRHNQN2RYL0pLMVAyVlBpU0lvZWJFckx3Vmg1WngrOEMxWTIyWXRQMEZwZjZoZGVhK21xMVdsaXhmZWo2UmNEeGowOXN3WGJiZUJRcGlqdWcyMGFqL1NFOGJ2bzVoRXVhdkF1U0twUWZKeFRHOTFnVXJDVjZqU1FFMG9Qa2U0d3VrZTcwNUVxcExOV3h0TXRTazRqdlhHbGQrdExseHZWTU5uYWtEN21FbmRZVFZXU25WODYwV1VYbDM0Uk15N0JlbXB5R3pON3BBYm1YRUE2YmZ2SzB1MzJ1VEZLS1ZNMHIwWXcxTVRjRnZwOGlWTFBEMCs5Z0hReSs3clNmM2VlanAySHVGY3NtbGRpRXowRnpLWGZTUnczcWUwOFhxZDlkUDZRS09Obmt1NGxHM05TYi9SQnRLdEt0MXR0ZEJKaVliMlZJN2JyYzd0YzhJWW90SnpIVUIwYytPK1QzclRRdUxLc1pScXB6a1RTN2RaSTR2bytxSm5kRUdPOEV6ZWN5amFjNi9JVE4yS09XYVVMSVQvYUxkZVVucXBkaTdWVzIrS3ljMjlGTDNzN2UzaGk1TFRTaGVXV3B5V2xINFh6bXZXam5pT2lGTjNZV0RpdldJOTJXdWs1Y3QyQzBwM0p6bDlZTjY2V0k1SVYvVnlGODZyMWExN3BINVVNQzBwWC9Ed1hWVTUyNEtzNVlnRFptTDR6R3oxdzgwcDMzUGoxcE12Y2krdGMyY0ZJam1oSDJkV1ZmdWFWTHVMank5ZVR6Z3FPcnFld3YwdnVtLzFLUjQrMmE2RGg1cFhPN1Y5TytzNEtSSlBBRHV4Tmp0akZDQ2svQ2x0RXpnZnpTdGVyU3ZkWlFaZURveXlxeFFndVIxbFhtQmxJLzlQU2ViWnBiT2U4Yml2dDJiRks5WWFLNGVIZTdOTE5hdExQM3FHWUxmTDcxUm9NdkI2WHU5NkozVFd0OUxUb1FNNXptOFlmeGJISUVTUFpYWFcvdG92VFNvK1BxRnhOZXN3WnFqTy9YMDlPdkJnaTlPY0h3N2xsVXVrY3YrZGkwcm5lcWY5OXVYb0tnbE1Nd2FsbDd4L215MG1sUDVwaVZudjNmdVorMTkzeG5wVFlMejNTamVqUExYcE82VHRYYnpYcGZJVWNlSkhtUHNYQUpzYkkrYUw3ZnZzcHBWc09YN3VhZEo5RnZ1VDYzUHhzWkFRM1VNeHlnTHlXdnNrNi9sdWt1NDBmYjh0dG9sREZGYjFaUVE2L21Sa3YxaVc5aTFKNkMvMWFlakFjdlFQVm1VdDZGQjJjbjI2SnpETzRUc2FMY1dlYVRibzdJbjA0WDA4Njk2WHhUbnJrbXpHQ0hpbW1KcEx1TmFQaTcxZitLT2t0ZTVJSzlPclM3NGluZ1BTZkpkMW9JU0Q5WjBtL2hQaEIwbysvTGQzTU1HVXJTVTY4czl5VXpYU08zc3VoVytCaCtKajBveXoyc25acWdwY3pkNWl3cHZSdm1LZlhwWS9QMHllU2ZzZ0hPaGxpd3RMUzdjQlNpUjFhWkZQMzBxK0J0M2ZYYks5aFEyVHIrNHJTYys4ZGZsWENPMmw2cFkrUElzNXBGMXhzNGttYlhWQjZ6MEpXUlJkSCs2QjB3OFZlb3lkZVdsVjg0eGFVTG52WDA4dkV6Tm4rSEpPdSt0ZlQxY1NiS1BMZXd2V2tjL2MxL1l0czRTbEorREhwdW5zRjMwNjlYU3J3N1ZoUWVsNGdITjNRdUhPOGpFay9POGNDK1VvL3BYUit2RzBMU24vWlh4bFh5SW9jNjBQU2hlbGR3dmR6YjRIVzNJNzFwTy8wd0hZcU9JcDh2NDFKVDUyVE5qZjVqeDI0Zm1FOTZXTHJHNy9ic29NNmVoQ0dwSjhzMC9aVjNrOHFuVE9kWDFCNjZIT2diNGI1S1JmdGw1NGZDN292eXZaWnBYdDZKeTRvM1pxZWRPdk1UZHNsUFVoRDBybFd4dlZNRnRTMFAxVU9uUHZXazg0WGRiMERJWFcva0hpTVNMZW03ck1NS0RtdDlKMEhtZ3RLLzNCZzdHaGdPR0xDZ1BUOGFmcDFwZFRFeDQ4ODZuZ3RLRjJjOU9wc2dWRGJPS0NKT1Fha2krMVZyRmkrd3JpSnBmTmEvb3JTaGNyVzI4NmpMWXN5eWZaTGw4U0V0bk02NWoxU0xIK3dYVkc2amMwRFlJOTg2RnVqS0puUUxWMGMxTXJ3N3NPNW4vZnd3RGZrb2o5Z2ZENG96aHlGQVVWTXFCUmxZckNkMG9VblJya2l5RXpPUEZOTEZ6VHpUNVZsQlhkM09tOG96a0J0T09kRFBaa1U5azkvUENwTGtIYXJuWlVmSWhYT3YwLzZJU3YwU09jdmovMWI5dHpma041RzN4N2ViZEloMzRXZkY2dHBEcnJZSzZQVXBkLzRmSlMzYnBYYXJ0T0pOK1NSREJYT3YwbDZtNkV6WjF6MzVsdzlrM1JPMDFXTUZCVTRINCsyMWxNYmI4WHMwdmx2WVZIcDNQVXFLQ2NhT0RVc25iTkxTUjVjVEMrZForcHBWZWxDbkthMTE3ZU5UTlFrU1ZGaVUydFArUXJTT1Z2WlphVUxxd3Z0UENoL2pkTWIzUk45OVFPa29qdjhMc1FTMGsvTzcrdEtmK05NVDk2TlAwVXZMdmluUm05Sm4yNHdWcmJEQ2JHSWRGNHhWQk5KL3hKU2U2VWVvL0JqLzlJLzdEeTBQdnJuSnk1b3BTSVJSWlgwYVFVQUFQelgzaDNVQUFDQVFBeDdZQUQvYW5GQkNOZGFtSUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQW1tb2VLOUh6aUI1STlFQlhueDhBQUFBQUFBQUFBTEJtQUlaS216V0lueHlPQUFBQUFFbEZUa1N1UW1DQyIsIiR0ZW1wbGF0ZSI6eyJuYW1lIjoiN2M0NDIxNzMtMjMwYS00MmNiLTlkY2EtOWViYTIyYWMzNjAzOnN0cmluZzpIRUFMVEhDRVJUIiwidHlwZSI6IjU0MWVjMWE0LTJkYjItNDdjNi04OGNhLTcxZGIxYjczNTlkMzpzdHJpbmc6RU1CRURERURfUkVOREVSRVIiLCJ1cmwiOiI5NzUyM2Y5Yi1lYmY2LTQ2YjYtOTI5YS0wMmRmMTY2YzQ5MTE6c3RyaW5nOmh0dHBzOi8vbW9oLWhlYWx0aGNlcnQtcmVuZGVyZXIubmV0bGlmeS5hcHAvIn19LCJzaWduYXR1cmUiOnsidHlwZSI6IlNIQTNNZXJrbGVQcm9vZiIsInRhcmdldEhhc2giOiJmZjM0M2FhMjQzMjg0MTExN2NlMzNmMWEwYmNlNzU0ODhmYzUxZDg5MDhmZDZmMTMzZWYyZDRhZjE4YjllYmMyIiwicHJvb2YiOltdLCJtZXJrbGVSb290IjoiZmYzNDNhYTI0MzI4NDExMTdjZTMzZjFhMGJjZTc1NDg4ZmM1MWQ4OTA4ZmQ2ZjEzM2VmMmQ0YWYxOGI5ZWJjMiJ9LCJwcm9vZiI6W3sidHlwZSI6Ik9wZW5BdHRlc3RhdGlvblNpZ25hdHVyZTIwMTgiLCJjcmVhdGVkIjoiMjAyMC0xMC0wN1QwOTo1NjoxMC42OTFaIiwicHJvb2ZQdXJwb3NlIjoiYXNzZXJ0aW9uTWV0aG9kIiwidmVyaWZpY2F0aW9uTWV0aG9kIjoiZGlkOmV0aHI6MHhFMzk0Nzk5MjhDYzRFZkZFNTA3NzQ0ODg3ODBCOWY2MTZiZDRCODMwI2NvbnRyb2xsZXIiLCJzaWduYXR1cmUiOiIweDI5NjYzYTZiZDhiYzA5MTdmMzdkMWIyMGViNjQ0N2M5ZTc4OGQ1MTc3NWNhOWZlYWExZjk4YjYyYWVhODZiYTAyMDIyZjhhMzFkOWE1Y2IwYmU3YWFhYzY1ZDZhMTJkZjc0YmQzZTBlNzkxMTEzMmNiZGUxNzhhMTg2ZTZhMDViMWIifV19",
- "filename": "healthcert.txt",
- "type": "text/open-attestation",
- },
- ],
- "fhirBundle": Object {
- "entry": Array [
- Object {
- "birthDate": "1990-01-15",
- "extension": Array [
- Object {
- "code": Object {
- "text": "SG",
- },
- "url": "http://hl7.org/fhir/StructureDefinition/patient-nationality",
- },
- ],
- "gender": "female",
- "identifier": Array [
- Object {
- "type": "PPN",
- "value": "E7831177G",
- },
- Object {
- "type": Object {
- "text": "NRIC",
- },
- "value": "S****989Z",
- },
- ],
- "name": Array [
- Object {
- "text": "Tan Chen Chen",
- },
- ],
- "resourceType": "Patient",
- },
- Object {
- "collection": Object {
- "collectedDateTime": "2020-09-27T06:15:00Z",
- },
- "resourceType": "Specimen",
- "type": Object {
- "coding": Array [
- Object {
- "code": "258500001",
- "display": "Nasopharyngeal swab",
- "system": "http://snomed.info/sct",
- },
- ],
- },
- },
- Object {
- "code": Object {
- "coding": Array [
- Object {
- "code": "94531-1",
- "display": "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- "system": "http://loinc.org",
- },
- ],
- },
- "effectiveDateTime": "2020-09-28T06:15:00Z",
- "identifier": Array [
- Object {
- "type": "ACSN",
- "value": "123456789",
- },
- ],
- "performer": Object {
- "name": Array [
- Object {
- "text": "Dr Michael Lim",
- },
- ],
- },
- "qualification": Array [
- Object {
- "identifier": "MCR 123214",
- "issuer": "MOH",
- },
- ],
- "resourceType": "Observation",
- "status": "final",
- "valueCodeableConcept": Object {
- "coding": Array [
- Object {
- "code": "260385009",
- "display": "Negative",
- "system": "http://snomed.info/sct",
- },
- ],
- },
- },
- Object {
- "contact": Object {
- "address": Object {
- "text": "MacRitchie Hospital Thomson Road Singapore 123000",
- "type": "physical",
- "use": "work",
- },
- "telecom": Array [
- Object {
- "system": "phone",
- "value": "+6563113111",
- },
- ],
- },
- "endpoint": Object {
- "address": "https://www.macritchieclinic.com.sg",
- },
- "name": "MacRitchie Medical Clinic",
- "resourceType": "Organization",
- "type": "Licensed Healthcare Provider",
- },
- Object {
- "contact": Object {
- "address": Object {
- "text": "2 Thomson Avenue 4 Singapore 098888",
- "type": "physical",
- "use": "work",
- },
- "telecom": Array [
- Object {
- "system": "phone",
- "value": "+6562711188",
- },
- ],
- },
- "name": "MacRitchie Laboratory",
- "resourceType": "Organization",
- "type": "Accredited Laboratory",
- },
- ],
- "resourceType": "Bundle",
- "type": "collection",
- },
- "fhirVersion": "4.0.1",
- "id": "e35f5d2a-4198-4f8f-96dc-d1afe0b67119",
- "issuers": Array [
- Object {
- "id": "did:ethr:0x174D34BA87e88f58902b8fec59120AcC0B94743E",
- "identityProof": Object {
- "key": "did:ethr:0x174D34BA87e88f58902b8fec59120AcC0B94743E#controller",
- "location": "moh.gov.sg",
- "type": "DNS-DID",
- },
- "name": "Ministry of Health (Singapore)",
- "revocation": Object {
- "type": "NONE",
- },
- },
- ],
- "logo": "data:image/png;base64,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",
- "name": "HealthCert",
- "notarisationMetadata": Object {
- "notarisedOn": "1970-01-01T00:00:01.000Z",
- "passportNumber": "E7831177G",
- "reference": "e35f5d2a-4198-4f8f-96dc-d1afe0b67119",
- "url": "https://example.com",
- },
- "validFrom": "2020-11-20",
- }
- `
- );
- expect(createdDocument.proof).toHaveLength(1);
- expect(createdDocument.proof[0].type).toBe("OpenAttestationSignature2018");
- expect(createdDocument.proof[0].verificationMethod).toBe(
- "did:ethr:0x174D34BA87e88f58902b8fec59120AcC0B94743E#controller"
- );
- expect(createdDocument.proof[0].signature).toBeTruthy();
-});
-
-it("should wrap a document and sign the document with signedEuHealthCert", async () => {
- const createdDocument = await createNotarizedHealthCert(
- sampleDocument,
- uuid,
- storedUrl,
- sampleSignedEuHealthCerts
- );
- const documentData = getData(createdDocument);
- expect(documentData).toMatchInlineSnapshot(
- documentData,
- `
- Object {
- "$template": Object {
- "name": "HEALTH_CERT",
- "type": "EMBEDDED_RENDERER",
- "url": "https://healthcert.renderer.moh.gov.sg/",
- },
- "attachments": Array [
- Object {
- "data": "eyJ2ZXJzaW9uIjoiaHR0cHM6Ly9zY2hlbWEub3BlbmF0dGVzdGF0aW9uLmNvbS8yLjAvc2NoZW1hLmpzb24iLCJkYXRhIjp7ImlkIjoiYTFjMmQyODItNmMxZi00ZTQyLWEzMzUtZTg4OGRhNGQxYjM0OnN0cmluZzpURVNUMDAxIiwibmFtZSI6ImMyNzI3NTNkLWRjYTItNDk5Zi1iNTQzLTM4MTQ0OWU4NTA3NDpzdHJpbmc6SGVhbHRoQ2VydCIsInZhbGlkRnJvbSI6IjhjMWVlYWVkLWU4MTItNDliMi1iZTY2LTg2OGIxZmNiNDJmZTpzdHJpbmc6MjAyMC0xMS0yMCIsImZoaXJWZXJzaW9uIjoiNTg2ZDQ4NjEtYzlmZC00ZmE4LTk0NmEtMWIwZGJiMzY2MWM5OnN0cmluZzo0LjAuMSIsImZoaXJCdW5kbGUiOnsicmVzb3VyY2VUeXBlIjoiM2ZkOWI1MjAtN2JiYS00NzczLWJjMTgtMTZmMGY1N2U0NjlmOnN0cmluZzpCdW5kbGUiLCJ0eXBlIjoiMGRkNDZkZGEtODY0Yy00ZTgwLWI0NmUtYzc4MDE2MjFmYzdmOnN0cmluZzpjb2xsZWN0aW9uIiwiZW50cnkiOlt7InJlc291cmNlVHlwZSI6IjdkMTI5MWJiLWIxMTQtNDI0Yi1iMDY2LTE1ZmQyMmFlOWRiNTpzdHJpbmc6UGF0aWVudCIsImV4dGVuc2lvbiI6W3sidXJsIjoiMmVlNGRmNjItYjViZS00MWQ0LWI4ZWYtYWI4ZTE4NTdlMjA4OnN0cmluZzpodHRwOi8vaGw3Lm9yZy9maGlyL1N0cnVjdHVyZURlZmluaXRpb24vcGF0aWVudC1uYXRpb25hbGl0eSIsImNvZGUiOnsidGV4dCI6ImVhOTUzMmQ1LTlhMmQtNDRlYS05ZDFlLTlmZDMyN2M4MzY0NTpzdHJpbmc6U0cifX1dLCJpZGVudGlmaWVyIjpbeyJ0eXBlIjoiMDExYzEzYmUtMzE5Ny00ZDA4LTk0ZTMtYzNkMzExZTgxNjNkOnN0cmluZzpQUE4iLCJ2YWx1ZSI6ImEwZTE0YTUwLTZkMGUtNDk4Ni1iYWE1LThmMmQyZDZkNTZlYjpzdHJpbmc6RTc4MzExNzdHIn0seyJ0eXBlIjp7InRleHQiOiIyZmUyZjIzMy05MzBmLTRlYmItODFmZi1iYmI1MzdhM2Y3ZjI6c3RyaW5nOk5SSUMifSwidmFsdWUiOiI4ODkyMTc2Zi0yZGMzLTQ0ODctOTc1Ni1iOWJmNWUyN2EwYmI6c3RyaW5nOlM5MDk4OTg5WiJ9XSwibmFtZSI6W3sidGV4dCI6IjM0OGY0YThiLTBiMTktNDkyZi05YThhLTk0MTkxZjE3NDg1YzpzdHJpbmc6VGFuIENoZW4gQ2hlbiJ9XSwiZ2VuZGVyIjoiNWE3MWI3Y2ItMWNkNy00NzBjLTgzMWItYzBiMDkzMDJmMmZjOnN0cmluZzpmZW1hbGUiLCJiaXJ0aERhdGUiOiIzN2ZhODRjNy0yMjg1LTQ0N2EtOTRmOS04MWUyMzA2MTY2MTE6c3RyaW5nOjE5OTAtMDEtMTUifSx7InJlc291cmNlVHlwZSI6IjQ2NjUxMzk3LTlhMzAtNDFkYS1iOGQ1LTVlMzk2MTRjMzM1YjpzdHJpbmc6U3BlY2ltZW4iLCJ0eXBlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiYWM5NjQ3ODAtOWFiNS00M2U2LTg3NmMtN2Y2M2IxMjIxNDlkOnN0cmluZzpodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiY29kZSI6IjgwYTM3YTM0LWZhYjEtNGZjOS1iOGFjLWUzNGVkYTZhNDA2YTpzdHJpbmc6MjU4NTAwMDAxIiwiZGlzcGxheSI6IjdmMDFmMGUwLTIxN2UtNDFhYi04MTA1LWUzOGYwMmViNWUxNzpzdHJpbmc6TmFzb3BoYXJ5bmdlYWwgc3dhYiJ9XX0sImNvbGxlY3Rpb24iOnsiY29sbGVjdGVkRGF0ZVRpbWUiOiI1MjcwODc5Yi05OTBkLTRlN2EtYmM3Ny1jNWU5ZWJkZjM5NWY6c3RyaW5nOjIwMjAtMDktMjdUMDY6MTU6MDBaIn19LHsicmVzb3VyY2VUeXBlIjoiNjY2M2I0NjEtYWYwYy00YTI0LWI3ODgtNThiOGY3MjM3NjE5OnN0cmluZzpPYnNlcnZhdGlvbiIsImlkZW50aWZpZXIiOlt7InZhbHVlIjoiNzFlYmNkYWMtOTU1My00MmFmLWE3M2ItNmJlYTQyNmM3MzVhOnN0cmluZzoxMjM0NTY3ODkiLCJ0eXBlIjoiYzQxMjliMWMtY2U5NC00ZDk5LWI4NTktMjc2NzQ2OTJlYzc2OnN0cmluZzpBQ1NOIn1dLCJjb2RlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiMzdkZDBjMTMtZGMxMy00ZDY4LWFhZDYtMzgwOGMzNzg2NWViOnN0cmluZzpodHRwOi8vbG9pbmMub3JnIiwiY29kZSI6IjUwYmUwOWE4LTAwNzMtNGUxMS1iMGNkLWZjOTg5NGM4OGYzMjpzdHJpbmc6OTQ1MzEtMSIsImRpc3BsYXkiOiI5YmYxOWFkNC1jMTFiLTQzOWUtOWUxNS05ZTJmODhiZGY5Nzg6c3RyaW5nOlJldmVyc2UgdHJhbnNjcmlwdGlvbiBwb2x5bWVyYXNlIGNoYWluIHJlYWN0aW9uIChyUlQtUENSKSB0ZXN0In1dfSwidmFsdWVDb2RlYWJsZUNvbmNlcHQiOnsiY29kaW5nIjpbeyJzeXN0ZW0iOiI0YWQ1ODBiNS1iYWQ2LTQxZjEtYmJkYS0xZDlmNGY5ODFiY2M6c3RyaW5nOmh0dHA6Ly9zbm9tZWQuaW5mby9zY3QiLCJjb2RlIjoiNWM2NTRlMWUtNmNjOS00NGViLTllOTktNGU5ZGVjZDU2ODZjOnN0cmluZzoyNjAzODUwMDkiLCJkaXNwbGF5IjoiNzI2Y2E5NjgtMjk0MS00Yzc2LTg3MWQtYWM1N2JhOWNkMDVmOnN0cmluZzpOZWdhdGl2ZSJ9XX0sImVmZmVjdGl2ZURhdGVUaW1lIjoiYzhlYzhhNWYtYWY1ZS00MzYyLTgwM2YtZGMyNzAwM2ZhYjEzOnN0cmluZzoyMDIwLTA5LTI4VDA2OjE1OjAwWiIsInN0YXR1cyI6IjFlYTBkZmE5LWRiMzQtNDFlMy1hNDkwLWRkZWQ0YjM1NGExOTpzdHJpbmc6ZmluYWwiLCJwZXJmb3JtZXIiOnsibmFtZSI6W3sidGV4dCI6ImE3NzI1MDE5LWNkNDYtNDEyNS05MDAzLTdmNDE2NGMyOTY2MjpzdHJpbmc6RHIgTWljaGFlbCBMaW0ifV19LCJxdWFsaWZpY2F0aW9uIjpbeyJpZGVudGlmaWVyIjoiMDExMTY1OWEtNTRhMi00MjYwLWJlMzUtZDNlMmQzZmVlYTAwOnN0cmluZzpNQ1IgMTIzMjE0IiwiaXNzdWVyIjoiZjQzNTRjYzQtYzJhOS00YTk2LWE1OTQtODE1YmNkY2FmNjdjOnN0cmluZzpNT0gifV19LHsicmVzb3VyY2VUeXBlIjoiNDc0ODg4NjYtNjkyMC00MWIwLWJjNzMtMDM1ZmMxMDY3MDFmOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiNzc3OGM2ZTgtZTI5My00NzJiLWJiNmEtNDNmMWFiNDg1YzlkOnN0cmluZzpNYWNSaXRjaGllIE1lZGljYWwgQ2xpbmljIiwidHlwZSI6IjA0OGQ1ZGM4LTg1ZmMtNDQyZC1hMThlLTdmY2UwNDk0ZDczNTpzdHJpbmc6TGljZW5zZWQgSGVhbHRoY2FyZSBQcm92aWRlciIsImVuZHBvaW50Ijp7ImFkZHJlc3MiOiI5NjkzYjdhOS0yMzI5LTRiOTgtODVmNi1hNThjNWNlNGI5ZTU6c3RyaW5nOmh0dHBzOi8vd3d3Lm1hY3JpdGNoaWVjbGluaWMuY29tLnNnIn0sImNvbnRhY3QiOnsidGVsZWNvbSI6W3sic3lzdGVtIjoiYjU5YjI2NDYtNWVjYi00NWM0LThmOGEtODAwYzBjMWI4MDhmOnN0cmluZzpwaG9uZSIsInZhbHVlIjoiZjk5MDMzNjYtMTgyNS00Njc5LWI1MzUtNjk5ODdkZGQyYWQ5OnN0cmluZzorNjU2MzExMzExMSJ9XSwiYWRkcmVzcyI6eyJ0eXBlIjoiYmY0OTE0NDYtMDAzMy00NzBlLThhOTQtMjc4ZmIyNWRkZDY2OnN0cmluZzpwaHlzaWNhbCIsInVzZSI6Ijc0ZTEwMTMzLTcyNTUtNGRjNy04NjNiLTgxYjA1MDZiMWFhMjpzdHJpbmc6d29yayIsInRleHQiOiI3NjFlNDI0OC1iNTI0LTRjODctOGM0ZC0xZDYyZTg3ZjhjZWY6c3RyaW5nOk1hY1JpdGNoaWUgSG9zcGl0YWwgVGhvbXNvbiBSb2FkIFNpbmdhcG9yZSAxMjMwMDAifX19LHsicmVzb3VyY2VUeXBlIjoiMTE3YzhjNjQtYzcyNy00ZGY2LWE3YjItMGE1Mjk3YTZjZTFhOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiMjQzYTliN2ItMzczOC00MWIzLWJiNzQtMGFjY2IyYzFmYWNjOnN0cmluZzpNYWNSaXRjaGllIExhYm9yYXRvcnkiLCJ0eXBlIjoiOTNiMzI4ODgtOTI2MC00NWYyLWE4ZTAtOTE3YzkwOWRiZThkOnN0cmluZzpBY2NyZWRpdGVkIExhYm9yYXRvcnkiLCJjb250YWN0Ijp7InRlbGVjb20iOlt7InN5c3RlbSI6IjM4MDY3NDQ1LTNkNDctNDYyNS1hYjE0LTNmNjk3MjlkODYwYzpzdHJpbmc6cGhvbmUiLCJ2YWx1ZSI6ImUzNDU2MWNlLWQ0MGEtNDE4NC05ZGRkLTM3ODU3OTIzMjg3ZTpzdHJpbmc6KzY1NjI3MTExODgifV0sImFkZHJlc3MiOnsidHlwZSI6ImNjNTcwZDBkLTUzOWEtNGY0Ny05MjExLTlkMWYzMzZkZmVjMjpzdHJpbmc6cGh5c2ljYWwiLCJ1c2UiOiJjMjViZTJhNS04NjUzLTRjZGMtOWQ1ZS0wNjM5OTBmZjY2M2Y6c3RyaW5nOndvcmsiLCJ0ZXh0IjoiOGI0OGYzYzAtNTc1NC00ZmQ3LTk5YTgtMjM0NDNmNDRlOGMzOnN0cmluZzoyIFRob21zb24gQXZlbnVlIDQgU2luZ2Fwb3JlIDA5ODg4OCJ9fX1dfSwiaXNzdWVycyI6W3siaWQiOiI3YzZhNWFmMS1hMTg3LTQ5NTktYjk5My1iYzg1NmZiN2MzYzc6c3RyaW5nOmRpZDpldGhyOjB4RTM5NDc5OTI4Q2M0RWZGRTUwNzc0NDg4NzgwQjlmNjE2YmQ0QjgzMCIsInJldm9jYXRpb24iOnsidHlwZSI6IjhmNmY2OGI0LTQwNzMtNDc5Ni05YTlhLWI4MDM3NmUzNTk4NjpzdHJpbmc6Tk9ORSJ9LCJuYW1lIjoiNGQ2MTRiYzctNDk2NC00YmI5LTkyYjYtNGM4YWQzNmQ3ZTgwOnN0cmluZzpTQU1QTEUgQ0xJTklDIiwiaWRlbnRpdHlQcm9vZiI6eyJ0eXBlIjoiNjI3YmE4NjYtYjcxNC00MTcyLWJiOGUtYmFhYzcwYzdmYzJkOnN0cmluZzpETlMtRElEIiwibG9jYXRpb24iOiI5ZGRlN2RjOC1lMTk4LTQ1ZDItYmJjNi1jYzg2NDgyMWEwMzQ6c3RyaW5nOmRvbm90dmVyaWZ5LnRlc3RpbmcudmVyaWZ5Lmdvdi5zZyIsImtleSI6Ijg5MjRjOWRhLTYzNjQtNDZhZi04MTc1LTAzMDM1OTk5NWNkNDpzdHJpbmc6ZGlkOmV0aHI6MHhFMzk0Nzk5MjhDYzRFZkZFNTA3NzQ0ODg3ODBCOWY2MTZiZDRCODMwI2NvbnRyb2xsZXIifX1dLCJsb2dvIjoiOGU5NDFkY2ItM2MzNi00NGZiLWFlZTEtODgxMzY2MzQ2ZGY4OnN0cmluZzpkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWZRQUFBRElDQU1BQUFBcHgrUGFBQUFBTTFCTVZFVUFBQURNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16ZUNtaUFBQUFBRUhSU1RsTUFRTCtBN3hBZ24yRFAzekJ3cjFDUEVsK0kvUUFBQndkSlJFRlVlTnJzbmQxMjJ5b1FSdmtISVNITit6L3R5VWs5b1RFQ1ExYlRCYzIzYnlOczBCNUdJREFSQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWsrSWsrSWR4NGc1TjRCOUdRL3JQQTlKL0lQZlNnd0wvTUVFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUR3UDVaUG9QNXI3RkpLQWY3Y3VmQmloUE5Ta1g1aGxBOXUrRHNQN2RYL0pLMVAyVlBpU0lvZWJFckx3Vmg1WngrOEMxWTIyWXRQMEZwZjZoZGVhK21xMVdsaXhmZWo2UmNEeGowOXN3WGJiZUJRcGlqdWcyMGFqL1NFOGJ2bzVoRXVhdkF1U0twUWZKeFRHOTFnVXJDVjZqU1FFMG9Qa2U0d3VrZTcwNUVxcExOV3h0TXRTazRqdlhHbGQrdExseHZWTU5uYWtEN21FbmRZVFZXU25WODYwV1VYbDM0Uk15N0JlbXB5R3pON3BBYm1YRUE2YmZ2SzB1MzJ1VEZLS1ZNMHIwWXcxTVRjRnZwOGlWTFBEMCs5Z0hReSs3clNmM2VlanAySHVGY3NtbGRpRXowRnpLWGZTUnczcWUwOFhxZDlkUDZRS09Obmt1NGxHM05TYi9SQnRLdEt0MXR0ZEJKaVliMlZJN2JyYzd0YzhJWW90SnpIVUIwYytPK1QzclRRdUxLc1pScXB6a1RTN2RaSTR2bytxSm5kRUdPOEV6ZWN5amFjNi9JVE4yS09XYVVMSVQvYUxkZVVucXBkaTdWVzIrS3ljMjlGTDNzN2UzaGk1TFRTaGVXV3B5V2xINFh6bXZXam5pT2lGTjNZV0RpdldJOTJXdWs1Y3QyQzBwM0p6bDlZTjY2V0k1SVYvVnlGODZyMWExN3BINVVNQzBwWC9Ed1hWVTUyNEtzNVlnRFptTDR6R3oxdzgwcDMzUGoxcE12Y2krdGMyY0ZJam1oSDJkV1ZmdWFWTHVMank5ZVR6Z3FPcnFld3YwdnVtLzFLUjQrMmE2RGg1cFhPN1Y5TytzNEtSSlBBRHV4Tmp0akZDQ2svQ2x0RXpnZnpTdGVyU3ZkWlFaZURveXlxeFFndVIxbFhtQmxJLzlQU2ViWnBiT2U4Yml2dDJiRks5WWFLNGVIZTdOTE5hdExQM3FHWUxmTDcxUm9NdkI2WHU5NkozVFd0OUxUb1FNNXptOFlmeGJISUVTUFpYWFcvdG92VFNvK1BxRnhOZXN3WnFqTy9YMDlPdkJnaTlPY0h3N2xsVXVrY3YrZGkwcm5lcWY5OXVYb0tnbE1Nd2FsbDd4L215MG1sUDVwaVZudjNmdVorMTkzeG5wVFlMejNTamVqUExYcE82VHRYYnpYcGZJVWNlSkhtUHNYQUpzYkkrYUw3ZnZzcHBWc09YN3VhZEo5RnZ1VDYzUHhzWkFRM1VNeHlnTHlXdnNrNi9sdWt1NDBmYjh0dG9sREZGYjFaUVE2L21Sa3YxaVc5aTFKNkMvMWFlakFjdlFQVm1VdDZGQjJjbjI2SnpETzRUc2FMY1dlYVRibzdJbjA0WDA4Njk2WHhUbnJrbXpHQ0hpbW1KcEx1TmFQaTcxZitLT2t0ZTVJSzlPclM3NGluZ1BTZkpkMW9JU0Q5WjBtL2hQaEIwbysvTGQzTU1HVXJTVTY4czl5VXpYU08zc3VoVytCaCtKajBveXoyc25acWdwY3pkNWl3cHZSdm1LZlhwWS9QMHllU2ZzZ0hPaGxpd3RMUzdjQlNpUjFhWkZQMzBxK0J0M2ZYYks5aFEyVHIrNHJTYys4ZGZsWENPMmw2cFkrUElzNXBGMXhzNGttYlhWQjZ6MEpXUlJkSCs2QjB3OFZlb3lkZVdsVjg0eGFVTG52WDA4dkV6Tm4rSEpPdSt0ZlQxY1NiS1BMZXd2V2tjL2MxL1l0czRTbEorREhwdW5zRjMwNjlYU3J3N1ZoUWVsNGdITjNRdUhPOGpFay9POGNDK1VvL3BYUit2RzBMU24vWlh4bFh5SW9jNjBQU2hlbGR3dmR6YjRIVzNJNzFwTy8wd0hZcU9JcDh2NDFKVDUyVE5qZjVqeDI0Zm1FOTZXTHJHNy9ic29NNmVoQ0dwSjhzMC9aVjNrOHFuVE9kWDFCNjZIT2diNGI1S1JmdGw1NGZDN292eXZaWnBYdDZKeTRvM1pxZWRPdk1UZHNsUFVoRDBybFd4dlZNRnRTMFAxVU9uUHZXazg0WGRiMERJWFcva0hpTVNMZW03ck1NS0RtdDlKMEhtZ3RLLzNCZzdHaGdPR0xDZ1BUOGFmcDFwZFRFeDQ4ODZuZ3RLRjJjOU9wc2dWRGJPS0NKT1Fha2krMVZyRmkrd3JpSnBmTmEvb3JTaGNyVzI4NmpMWXN5eWZaTGw4U0V0bk02NWoxU0xIK3dYVkc2amMwRFlJOTg2RnVqS0puUUxWMGMxTXJ3N3NPNW4vZnd3RGZrb2o5Z2ZENG96aHlGQVVWTXFCUmxZckNkMG9VblJya2l5RXpPUEZOTEZ6VHpUNVZsQlhkM09tOG96a0J0T09kRFBaa1U5azkvUENwTGtIYXJuWlVmSWhYT3YwLzZJU3YwU09jdmovMWI5dHpma041RzN4N2ViZEloMzRXZkY2dHBEcnJZSzZQVXBkLzRmSlMzYnBYYXJ0T0pOK1NSREJYT3YwbDZtNkV6WjF6MzVsdzlrM1JPMDFXTUZCVTRINCsyMWxNYmI4WHMwdmx2WVZIcDNQVXFLQ2NhT0RVc25iTkxTUjVjVEMrZForcHBWZWxDbkthMTE3ZU5UTlFrU1ZGaVUydFArUXJTT1Z2WlphVUxxd3Z0UENoL2pkTWIzUk45OVFPa29qdjhMc1FTMGsvTzcrdEtmK05NVDk2TlAwVXZMdmluUm05Sm4yNHdWcmJEQ2JHSWRGNHhWQk5KL3hKU2U2VWVvL0JqLzlJLzdEeTBQdnJuSnk1b3BTSVJSWlgwYVFVQUFQelgzaDNVQUFDQVFBeDdZQUQvYW5GQkNOZGFtSUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQW1tb2VLOUh6aUI1STlFQlhueDhBQUFBQUFBQUFBTEJtQUlaS216V0lueHlPQUFBQUFFbEZUa1N1UW1DQyIsIiR0ZW1wbGF0ZSI6eyJuYW1lIjoiN2M0NDIxNzMtMjMwYS00MmNiLTlkY2EtOWViYTIyYWMzNjAzOnN0cmluZzpIRUFMVEhDRVJUIiwidHlwZSI6IjU0MWVjMWE0LTJkYjItNDdjNi04OGNhLTcxZGIxYjczNTlkMzpzdHJpbmc6RU1CRURERURfUkVOREVSRVIiLCJ1cmwiOiI5NzUyM2Y5Yi1lYmY2LTQ2YjYtOTI5YS0wMmRmMTY2YzQ5MTE6c3RyaW5nOmh0dHBzOi8vbW9oLWhlYWx0aGNlcnQtcmVuZGVyZXIubmV0bGlmeS5hcHAvIn19LCJzaWduYXR1cmUiOnsidHlwZSI6IlNIQTNNZXJrbGVQcm9vZiIsInRhcmdldEhhc2giOiJmZjM0M2FhMjQzMjg0MTExN2NlMzNmMWEwYmNlNzU0ODhmYzUxZDg5MDhmZDZmMTMzZWYyZDRhZjE4YjllYmMyIiwicHJvb2YiOltdLCJtZXJrbGVSb290IjoiZmYzNDNhYTI0MzI4NDExMTdjZTMzZjFhMGJjZTc1NDg4ZmM1MWQ4OTA4ZmQ2ZjEzM2VmMmQ0YWYxOGI5ZWJjMiJ9LCJwcm9vZiI6W3sidHlwZSI6Ik9wZW5BdHRlc3RhdGlvblNpZ25hdHVyZTIwMTgiLCJjcmVhdGVkIjoiMjAyMC0xMC0wN1QwOTo1NjoxMC42OTFaIiwicHJvb2ZQdXJwb3NlIjoiYXNzZXJ0aW9uTWV0aG9kIiwidmVyaWZpY2F0aW9uTWV0aG9kIjoiZGlkOmV0aHI6MHhFMzk0Nzk5MjhDYzRFZkZFNTA3NzQ0ODg3ODBCOWY2MTZiZDRCODMwI2NvbnRyb2xsZXIiLCJzaWduYXR1cmUiOiIweDI5NjYzYTZiZDhiYzA5MTdmMzdkMWIyMGViNjQ0N2M5ZTc4OGQ1MTc3NWNhOWZlYWExZjk4YjYyYWVhODZiYTAyMDIyZjhhMzFkOWE1Y2IwYmU3YWFhYzY1ZDZhMTJkZjc0YmQzZTBlNzkxMTEzMmNiZGUxNzhhMTg2ZTZhMDViMWIifV19",
- "filename": "healthcert.txt",
- "type": "text/open-attestation",
- },
- ],
- "fhirBundle": Object {
- "entry": Array [
- Object {
- "birthDate": "1990-01-15",
- "extension": Array [
- Object {
- "code": Object {
- "text": "SG",
- },
- "url": "http://hl7.org/fhir/StructureDefinition/patient-nationality",
- },
- ],
- "gender": "female",
- "identifier": Array [
- Object {
- "type": "PPN",
- "value": "E7831177G",
- },
- Object {
- "type": Object {
- "text": "NRIC",
- },
- "value": "S****989Z",
- },
- ],
- "name": Array [
- Object {
- "text": "Tan Chen Chen",
- },
- ],
- "resourceType": "Patient",
- },
- Object {
- "collection": Object {
- "collectedDateTime": "2020-09-27T06:15:00Z",
- },
- "resourceType": "Specimen",
- "type": Object {
- "coding": Array [
- Object {
- "code": "258500001",
- "display": "Nasopharyngeal swab",
- "system": "http://snomed.info/sct",
- },
- ],
- },
- },
- Object {
- "code": Object {
- "coding": Array [
- Object {
- "code": "94531-1",
- "display": "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- "system": "http://loinc.org",
- },
- ],
- },
- "effectiveDateTime": "2020-09-28T06:15:00Z",
- "identifier": Array [
- Object {
- "type": "ACSN",
- "value": "123456789",
- },
- ],
- "performer": Object {
- "name": Array [
- Object {
- "text": "Dr Michael Lim",
- },
- ],
- },
- "qualification": Array [
- Object {
- "identifier": "MCR 123214",
- "issuer": "MOH",
- },
- ],
- "resourceType": "Observation",
- "status": "final",
- "valueCodeableConcept": Object {
- "coding": Array [
- Object {
- "code": "260385009",
- "display": "Negative",
- "system": "http://snomed.info/sct",
- },
- ],
- },
- },
- Object {
- "contact": Object {
- "address": Object {
- "text": "MacRitchie Hospital Thomson Road Singapore 123000",
- "type": "physical",
- "use": "work",
- },
- "telecom": Array [
- Object {
- "system": "phone",
- "value": "+6563113111",
- },
- ],
- },
- "endpoint": Object {
- "address": "https://www.macritchieclinic.com.sg",
- },
- "name": "MacRitchie Medical Clinic",
- "resourceType": "Organization",
- "type": "Licensed Healthcare Provider",
- },
- Object {
- "contact": Object {
- "address": Object {
- "text": "2 Thomson Avenue 4 Singapore 098888",
- "type": "physical",
- "use": "work",
- },
- "telecom": Array [
- Object {
- "system": "phone",
- "value": "+6562711188",
- },
- ],
- },
- "name": "MacRitchie Laboratory",
- "resourceType": "Organization",
- "type": "Accredited Laboratory",
- },
- ],
- "resourceType": "Bundle",
- "type": "collection",
- },
- "fhirVersion": "4.0.1",
- "id": "e35f5d2a-4198-4f8f-96dc-d1afe0b67119",
- "issuers": Array [
- Object {
- "id": "did:ethr:0x174D34BA87e88f58902b8fec59120AcC0B94743E",
- "identityProof": Object {
- "key": "did:ethr:0x174D34BA87e88f58902b8fec59120AcC0B94743E#controller",
- "location": "moh.gov.sg",
- "type": "DNS-DID",
- },
- "name": "Ministry of Health (Singapore)",
- "revocation": Object {
- "type": "NONE",
- },
- },
- ],
- "logo": "data:image/png;base64,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",
- "name": "HealthCert",
- "notarisationMetadata": Object {
- "notarisedOn": "1970-01-01T00:00:01.000Z",
- "passportNumber": "E7831177G",
- "reference": "e35f5d2a-4198-4f8f-96dc-d1afe0b67119",
- "signedEuHealthCerts": Array [
- Object {
- "expiryDateTime": "2022-12-17T01:27:50.263Z",
- "qr": "HC1:abcde",
- "type": "PCR",
- },
- ],
- "url": "https://example.com",
- },
- "validFrom": "2020-11-20",
- }
- `
- );
- expect(createdDocument.proof).toHaveLength(1);
- expect(createdDocument.proof[0].type).toBe("OpenAttestationSignature2018");
- expect(createdDocument.proof[0].verificationMethod).toBe(
- "did:ethr:0x174D34BA87e88f58902b8fec59120AcC0B94743E#controller"
- );
- expect(createdDocument.proof[0].signature).toBeTruthy();
-});
diff --git a/src/models/notarizedHealthCert/createNotarizedHealthCert/createNotarizedHealthCert.ts b/src/models/notarizedHealthCert/createNotarizedHealthCert/createNotarizedHealthCert.ts
deleted file mode 100644
index f93f8876..00000000
--- a/src/models/notarizedHealthCert/createNotarizedHealthCert/createNotarizedHealthCert.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import {
- wrapDocument,
- WrappedDocument,
- signDocument,
- SUPPORTED_SIGNING_ALGORITHM,
-} from "@govtechsg/open-attestation";
-import { notarise } from "@govtechsg/oa-schemata";
-import {
- HealthCertDocument,
- NotarizedHealthCert,
- SignedNotarizedHealthCert,
-} from "../../../types";
-import { createUnwrappedDocument } from "./createUnwrappedHealthCert";
-import { config } from "../../../config";
-import { getLogger } from "../../../common/logger";
-
-const { didSigner } = config;
-const { trace } = getLogger("api-notarise-healthcerts");
-
-const signWrappedDocument = (
- wrappedDocument: WrappedDocument
-) =>
- signDocument(
- wrappedDocument as any,
- SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018,
- {
- public: didSigner.key,
- private: didSigner.privateKey,
- }
- ) as Promise;
-
-export const createNotarizedHealthCert = async (
- certificate: WrappedDocument,
- reference: string,
- storedUrl: string,
- signedEuHealthCerts?: notarise.SignedEuHealthCert[]
-) => {
- const unwrappedNotarisedDocument = createUnwrappedDocument(
- certificate,
- reference,
- storedUrl,
- signedEuHealthCerts
- );
- const wrappedNotarisedDocument = wrapDocument(unwrappedNotarisedDocument);
- const traceWithRef = trace.extend(`reference: ${reference}`);
- traceWithRef("Document successfully notarised");
- return signWrappedDocument(wrappedNotarisedDocument);
-};
diff --git a/src/models/notarizedHealthCert/createNotarizedHealthCert/createUnwrappedHealthCert.test.ts b/src/models/notarizedHealthCert/createNotarizedHealthCert/createUnwrappedHealthCert.test.ts
deleted file mode 100644
index 795fb9c4..00000000
--- a/src/models/notarizedHealthCert/createNotarizedHealthCert/createUnwrappedHealthCert.test.ts
+++ /dev/null
@@ -1,570 +0,0 @@
-import { notarise } from "@govtechsg/oa-schemata";
-import { createUnwrappedDocument } from "./createUnwrappedHealthCert";
-import exampleHealthcertWrapped from "../../../../test/fixtures/v1/example_healthcert_with_nric_wrapped.json";
-import { mockDate, unmockDate } from "../../../../test/utils";
-
-const sampleDocument = exampleHealthcertWrapped as any;
-const uuid = "e35f5d2a-4198-4f8f-96dc-d1afe0b67119";
-const storedUrl = "https://example.com";
-const sampleSignedEuHealthCerts: notarise.SignedEuHealthCert[] = [
- {
- type: "PCR",
- qr: "HC1:abcde",
- expiryDateTime: "2022-12-17T01:27:50.263Z",
- },
-];
-
-beforeAll(mockDate);
-afterAll(unmockDate);
-
-it("should create the unwrapped document from input data", () => {
- const createdDocument = createUnwrappedDocument(
- sampleDocument,
- uuid,
- storedUrl
- );
- expect(createdDocument).toMatchInlineSnapshot(`
- Object {
- "$template": Object {
- "name": "HEALTH_CERT",
- "type": "EMBEDDED_RENDERER",
- "url": "https://healthcert.renderer.moh.gov.sg/",
- },
- "attachments": Array [
- Object {
- "data": "eyJ2ZXJzaW9uIjoiaHR0cHM6Ly9zY2hlbWEub3BlbmF0dGVzdGF0aW9uLmNvbS8yLjAvc2NoZW1hLmpzb24iLCJkYXRhIjp7ImlkIjoiYTFjMmQyODItNmMxZi00ZTQyLWEzMzUtZTg4OGRhNGQxYjM0OnN0cmluZzpURVNUMDAxIiwibmFtZSI6ImMyNzI3NTNkLWRjYTItNDk5Zi1iNTQzLTM4MTQ0OWU4NTA3NDpzdHJpbmc6SGVhbHRoQ2VydCIsInZhbGlkRnJvbSI6IjhjMWVlYWVkLWU4MTItNDliMi1iZTY2LTg2OGIxZmNiNDJmZTpzdHJpbmc6MjAyMC0xMS0yMCIsImZoaXJWZXJzaW9uIjoiNTg2ZDQ4NjEtYzlmZC00ZmE4LTk0NmEtMWIwZGJiMzY2MWM5OnN0cmluZzo0LjAuMSIsImZoaXJCdW5kbGUiOnsicmVzb3VyY2VUeXBlIjoiM2ZkOWI1MjAtN2JiYS00NzczLWJjMTgtMTZmMGY1N2U0NjlmOnN0cmluZzpCdW5kbGUiLCJ0eXBlIjoiMGRkNDZkZGEtODY0Yy00ZTgwLWI0NmUtYzc4MDE2MjFmYzdmOnN0cmluZzpjb2xsZWN0aW9uIiwiZW50cnkiOlt7InJlc291cmNlVHlwZSI6IjdkMTI5MWJiLWIxMTQtNDI0Yi1iMDY2LTE1ZmQyMmFlOWRiNTpzdHJpbmc6UGF0aWVudCIsImV4dGVuc2lvbiI6W3sidXJsIjoiMmVlNGRmNjItYjViZS00MWQ0LWI4ZWYtYWI4ZTE4NTdlMjA4OnN0cmluZzpodHRwOi8vaGw3Lm9yZy9maGlyL1N0cnVjdHVyZURlZmluaXRpb24vcGF0aWVudC1uYXRpb25hbGl0eSIsImNvZGUiOnsidGV4dCI6ImVhOTUzMmQ1LTlhMmQtNDRlYS05ZDFlLTlmZDMyN2M4MzY0NTpzdHJpbmc6U0cifX1dLCJpZGVudGlmaWVyIjpbeyJ0eXBlIjoiMDExYzEzYmUtMzE5Ny00ZDA4LTk0ZTMtYzNkMzExZTgxNjNkOnN0cmluZzpQUE4iLCJ2YWx1ZSI6ImEwZTE0YTUwLTZkMGUtNDk4Ni1iYWE1LThmMmQyZDZkNTZlYjpzdHJpbmc6RTc4MzExNzdHIn0seyJ0eXBlIjp7InRleHQiOiIyZmUyZjIzMy05MzBmLTRlYmItODFmZi1iYmI1MzdhM2Y3ZjI6c3RyaW5nOk5SSUMifSwidmFsdWUiOiI4ODkyMTc2Zi0yZGMzLTQ0ODctOTc1Ni1iOWJmNWUyN2EwYmI6c3RyaW5nOlM5MDk4OTg5WiJ9XSwibmFtZSI6W3sidGV4dCI6IjM0OGY0YThiLTBiMTktNDkyZi05YThhLTk0MTkxZjE3NDg1YzpzdHJpbmc6VGFuIENoZW4gQ2hlbiJ9XSwiZ2VuZGVyIjoiNWE3MWI3Y2ItMWNkNy00NzBjLTgzMWItYzBiMDkzMDJmMmZjOnN0cmluZzpmZW1hbGUiLCJiaXJ0aERhdGUiOiIzN2ZhODRjNy0yMjg1LTQ0N2EtOTRmOS04MWUyMzA2MTY2MTE6c3RyaW5nOjE5OTAtMDEtMTUifSx7InJlc291cmNlVHlwZSI6IjQ2NjUxMzk3LTlhMzAtNDFkYS1iOGQ1LTVlMzk2MTRjMzM1YjpzdHJpbmc6U3BlY2ltZW4iLCJ0eXBlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiYWM5NjQ3ODAtOWFiNS00M2U2LTg3NmMtN2Y2M2IxMjIxNDlkOnN0cmluZzpodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiY29kZSI6IjgwYTM3YTM0LWZhYjEtNGZjOS1iOGFjLWUzNGVkYTZhNDA2YTpzdHJpbmc6MjU4NTAwMDAxIiwiZGlzcGxheSI6IjdmMDFmMGUwLTIxN2UtNDFhYi04MTA1LWUzOGYwMmViNWUxNzpzdHJpbmc6TmFzb3BoYXJ5bmdlYWwgc3dhYiJ9XX0sImNvbGxlY3Rpb24iOnsiY29sbGVjdGVkRGF0ZVRpbWUiOiI1MjcwODc5Yi05OTBkLTRlN2EtYmM3Ny1jNWU5ZWJkZjM5NWY6c3RyaW5nOjIwMjAtMDktMjdUMDY6MTU6MDBaIn19LHsicmVzb3VyY2VUeXBlIjoiNjY2M2I0NjEtYWYwYy00YTI0LWI3ODgtNThiOGY3MjM3NjE5OnN0cmluZzpPYnNlcnZhdGlvbiIsImlkZW50aWZpZXIiOlt7InZhbHVlIjoiNzFlYmNkYWMtOTU1My00MmFmLWE3M2ItNmJlYTQyNmM3MzVhOnN0cmluZzoxMjM0NTY3ODkiLCJ0eXBlIjoiYzQxMjliMWMtY2U5NC00ZDk5LWI4NTktMjc2NzQ2OTJlYzc2OnN0cmluZzpBQ1NOIn1dLCJjb2RlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiMzdkZDBjMTMtZGMxMy00ZDY4LWFhZDYtMzgwOGMzNzg2NWViOnN0cmluZzpodHRwOi8vbG9pbmMub3JnIiwiY29kZSI6IjUwYmUwOWE4LTAwNzMtNGUxMS1iMGNkLWZjOTg5NGM4OGYzMjpzdHJpbmc6OTQ1MzEtMSIsImRpc3BsYXkiOiI5YmYxOWFkNC1jMTFiLTQzOWUtOWUxNS05ZTJmODhiZGY5Nzg6c3RyaW5nOlJldmVyc2UgdHJhbnNjcmlwdGlvbiBwb2x5bWVyYXNlIGNoYWluIHJlYWN0aW9uIChyUlQtUENSKSB0ZXN0In1dfSwidmFsdWVDb2RlYWJsZUNvbmNlcHQiOnsiY29kaW5nIjpbeyJzeXN0ZW0iOiI0YWQ1ODBiNS1iYWQ2LTQxZjEtYmJkYS0xZDlmNGY5ODFiY2M6c3RyaW5nOmh0dHA6Ly9zbm9tZWQuaW5mby9zY3QiLCJjb2RlIjoiNWM2NTRlMWUtNmNjOS00NGViLTllOTktNGU5ZGVjZDU2ODZjOnN0cmluZzoyNjAzODUwMDkiLCJkaXNwbGF5IjoiNzI2Y2E5NjgtMjk0MS00Yzc2LTg3MWQtYWM1N2JhOWNkMDVmOnN0cmluZzpOZWdhdGl2ZSJ9XX0sImVmZmVjdGl2ZURhdGVUaW1lIjoiYzhlYzhhNWYtYWY1ZS00MzYyLTgwM2YtZGMyNzAwM2ZhYjEzOnN0cmluZzoyMDIwLTA5LTI4VDA2OjE1OjAwWiIsInN0YXR1cyI6IjFlYTBkZmE5LWRiMzQtNDFlMy1hNDkwLWRkZWQ0YjM1NGExOTpzdHJpbmc6ZmluYWwiLCJwZXJmb3JtZXIiOnsibmFtZSI6W3sidGV4dCI6ImE3NzI1MDE5LWNkNDYtNDEyNS05MDAzLTdmNDE2NGMyOTY2MjpzdHJpbmc6RHIgTWljaGFlbCBMaW0ifV19LCJxdWFsaWZpY2F0aW9uIjpbeyJpZGVudGlmaWVyIjoiMDExMTY1OWEtNTRhMi00MjYwLWJlMzUtZDNlMmQzZmVlYTAwOnN0cmluZzpNQ1IgMTIzMjE0IiwiaXNzdWVyIjoiZjQzNTRjYzQtYzJhOS00YTk2LWE1OTQtODE1YmNkY2FmNjdjOnN0cmluZzpNT0gifV19LHsicmVzb3VyY2VUeXBlIjoiNDc0ODg4NjYtNjkyMC00MWIwLWJjNzMtMDM1ZmMxMDY3MDFmOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiNzc3OGM2ZTgtZTI5My00NzJiLWJiNmEtNDNmMWFiNDg1YzlkOnN0cmluZzpNYWNSaXRjaGllIE1lZGljYWwgQ2xpbmljIiwidHlwZSI6IjA0OGQ1ZGM4LTg1ZmMtNDQyZC1hMThlLTdmY2UwNDk0ZDczNTpzdHJpbmc6TGljZW5zZWQgSGVhbHRoY2FyZSBQcm92aWRlciIsImVuZHBvaW50Ijp7ImFkZHJlc3MiOiI5NjkzYjdhOS0yMzI5LTRiOTgtODVmNi1hNThjNWNlNGI5ZTU6c3RyaW5nOmh0dHBzOi8vd3d3Lm1hY3JpdGNoaWVjbGluaWMuY29tLnNnIn0sImNvbnRhY3QiOnsidGVsZWNvbSI6W3sic3lzdGVtIjoiYjU5YjI2NDYtNWVjYi00NWM0LThmOGEtODAwYzBjMWI4MDhmOnN0cmluZzpwaG9uZSIsInZhbHVlIjoiZjk5MDMzNjYtMTgyNS00Njc5LWI1MzUtNjk5ODdkZGQyYWQ5OnN0cmluZzorNjU2MzExMzExMSJ9XSwiYWRkcmVzcyI6eyJ0eXBlIjoiYmY0OTE0NDYtMDAzMy00NzBlLThhOTQtMjc4ZmIyNWRkZDY2OnN0cmluZzpwaHlzaWNhbCIsInVzZSI6Ijc0ZTEwMTMzLTcyNTUtNGRjNy04NjNiLTgxYjA1MDZiMWFhMjpzdHJpbmc6d29yayIsInRleHQiOiI3NjFlNDI0OC1iNTI0LTRjODctOGM0ZC0xZDYyZTg3ZjhjZWY6c3RyaW5nOk1hY1JpdGNoaWUgSG9zcGl0YWwgVGhvbXNvbiBSb2FkIFNpbmdhcG9yZSAxMjMwMDAifX19LHsicmVzb3VyY2VUeXBlIjoiMTE3YzhjNjQtYzcyNy00ZGY2LWE3YjItMGE1Mjk3YTZjZTFhOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiMjQzYTliN2ItMzczOC00MWIzLWJiNzQtMGFjY2IyYzFmYWNjOnN0cmluZzpNYWNSaXRjaGllIExhYm9yYXRvcnkiLCJ0eXBlIjoiOTNiMzI4ODgtOTI2MC00NWYyLWE4ZTAtOTE3YzkwOWRiZThkOnN0cmluZzpBY2NyZWRpdGVkIExhYm9yYXRvcnkiLCJjb250YWN0Ijp7InRlbGVjb20iOlt7InN5c3RlbSI6IjM4MDY3NDQ1LTNkNDctNDYyNS1hYjE0LTNmNjk3MjlkODYwYzpzdHJpbmc6cGhvbmUiLCJ2YWx1ZSI6ImUzNDU2MWNlLWQ0MGEtNDE4NC05ZGRkLTM3ODU3OTIzMjg3ZTpzdHJpbmc6KzY1NjI3MTExODgifV0sImFkZHJlc3MiOnsidHlwZSI6ImNjNTcwZDBkLTUzOWEtNGY0Ny05MjExLTlkMWYzMzZkZmVjMjpzdHJpbmc6cGh5c2ljYWwiLCJ1c2UiOiJjMjViZTJhNS04NjUzLTRjZGMtOWQ1ZS0wNjM5OTBmZjY2M2Y6c3RyaW5nOndvcmsiLCJ0ZXh0IjoiOGI0OGYzYzAtNTc1NC00ZmQ3LTk5YTgtMjM0NDNmNDRlOGMzOnN0cmluZzoyIFRob21zb24gQXZlbnVlIDQgU2luZ2Fwb3JlIDA5ODg4OCJ9fX1dfSwiaXNzdWVycyI6W3siaWQiOiI3YzZhNWFmMS1hMTg3LTQ5NTktYjk5My1iYzg1NmZiN2MzYzc6c3RyaW5nOmRpZDpldGhyOjB4RTM5NDc5OTI4Q2M0RWZGRTUwNzc0NDg4NzgwQjlmNjE2YmQ0QjgzMCIsInJldm9jYXRpb24iOnsidHlwZSI6IjhmNmY2OGI0LTQwNzMtNDc5Ni05YTlhLWI4MDM3NmUzNTk4NjpzdHJpbmc6Tk9ORSJ9LCJuYW1lIjoiNGQ2MTRiYzctNDk2NC00YmI5LTkyYjYtNGM4YWQzNmQ3ZTgwOnN0cmluZzpTQU1QTEUgQ0xJTklDIiwiaWRlbnRpdHlQcm9vZiI6eyJ0eXBlIjoiNjI3YmE4NjYtYjcxNC00MTcyLWJiOGUtYmFhYzcwYzdmYzJkOnN0cmluZzpETlMtRElEIiwibG9jYXRpb24iOiI5ZGRlN2RjOC1lMTk4LTQ1ZDItYmJjNi1jYzg2NDgyMWEwMzQ6c3RyaW5nOmRvbm90dmVyaWZ5LnRlc3RpbmcudmVyaWZ5Lmdvdi5zZyIsImtleSI6Ijg5MjRjOWRhLTYzNjQtNDZhZi04MTc1LTAzMDM1OTk5NWNkNDpzdHJpbmc6ZGlkOmV0aHI6MHhFMzk0Nzk5MjhDYzRFZkZFNTA3NzQ0ODg3ODBCOWY2MTZiZDRCODMwI2NvbnRyb2xsZXIifX1dLCJsb2dvIjoiOGU5NDFkY2ItM2MzNi00NGZiLWFlZTEtODgxMzY2MzQ2ZGY4OnN0cmluZzpkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWZRQUFBRElDQU1BQUFBcHgrUGFBQUFBTTFCTVZFVUFBQURNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16ZUNtaUFBQUFBRUhSU1RsTUFRTCtBN3hBZ24yRFAzekJ3cjFDUEVsK0kvUUFBQndkSlJFRlVlTnJzbmQxMjJ5b1FSdmtISVNITit6L3R5VWs5b1RFQ1ExYlRCYzIzYnlOczBCNUdJREFSQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWsrSWsrSWR4NGc1TjRCOUdRL3JQQTlKL0lQZlNnd0wvTUVFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUR3UDVaUG9QNXI3RkpLQWY3Y3VmQmloUE5Ta1g1aGxBOXUrRHNQN2RYL0pLMVAyVlBpU0lvZWJFckx3Vmg1WngrOEMxWTIyWXRQMEZwZjZoZGVhK21xMVdsaXhmZWo2UmNEeGowOXN3WGJiZUJRcGlqdWcyMGFqL1NFOGJ2bzVoRXVhdkF1U0twUWZKeFRHOTFnVXJDVjZqU1FFMG9Qa2U0d3VrZTcwNUVxcExOV3h0TXRTazRqdlhHbGQrdExseHZWTU5uYWtEN21FbmRZVFZXU25WODYwV1VYbDM0Uk15N0JlbXB5R3pON3BBYm1YRUE2YmZ2SzB1MzJ1VEZLS1ZNMHIwWXcxTVRjRnZwOGlWTFBEMCs5Z0hReSs3clNmM2VlanAySHVGY3NtbGRpRXowRnpLWGZTUnczcWUwOFhxZDlkUDZRS09Obmt1NGxHM05TYi9SQnRLdEt0MXR0ZEJKaVliMlZJN2JyYzd0YzhJWW90SnpIVUIwYytPK1QzclRRdUxLc1pScXB6a1RTN2RaSTR2bytxSm5kRUdPOEV6ZWN5amFjNi9JVE4yS09XYVVMSVQvYUxkZVVucXBkaTdWVzIrS3ljMjlGTDNzN2UzaGk1TFRTaGVXV3B5V2xINFh6bXZXam5pT2lGTjNZV0RpdldJOTJXdWs1Y3QyQzBwM0p6bDlZTjY2V0k1SVYvVnlGODZyMWExN3BINVVNQzBwWC9Ed1hWVTUyNEtzNVlnRFptTDR6R3oxdzgwcDMzUGoxcE12Y2krdGMyY0ZJam1oSDJkV1ZmdWFWTHVMank5ZVR6Z3FPcnFld3YwdnVtLzFLUjQrMmE2RGg1cFhPN1Y5TytzNEtSSlBBRHV4Tmp0akZDQ2svQ2x0RXpnZnpTdGVyU3ZkWlFaZURveXlxeFFndVIxbFhtQmxJLzlQU2ViWnBiT2U4Yml2dDJiRks5WWFLNGVIZTdOTE5hdExQM3FHWUxmTDcxUm9NdkI2WHU5NkozVFd0OUxUb1FNNXptOFlmeGJISUVTUFpYWFcvdG92VFNvK1BxRnhOZXN3WnFqTy9YMDlPdkJnaTlPY0h3N2xsVXVrY3YrZGkwcm5lcWY5OXVYb0tnbE1Nd2FsbDd4L215MG1sUDVwaVZudjNmdVorMTkzeG5wVFlMejNTamVqUExYcE82VHRYYnpYcGZJVWNlSkhtUHNYQUpzYkkrYUw3ZnZzcHBWc09YN3VhZEo5RnZ1VDYzUHhzWkFRM1VNeHlnTHlXdnNrNi9sdWt1NDBmYjh0dG9sREZGYjFaUVE2L21Sa3YxaVc5aTFKNkMvMWFlakFjdlFQVm1VdDZGQjJjbjI2SnpETzRUc2FMY1dlYVRibzdJbjA0WDA4Njk2WHhUbnJrbXpHQ0hpbW1KcEx1TmFQaTcxZitLT2t0ZTVJSzlPclM3NGluZ1BTZkpkMW9JU0Q5WjBtL2hQaEIwbysvTGQzTU1HVXJTVTY4czl5VXpYU08zc3VoVytCaCtKajBveXoyc25acWdwY3pkNWl3cHZSdm1LZlhwWS9QMHllU2ZzZ0hPaGxpd3RMUzdjQlNpUjFhWkZQMzBxK0J0M2ZYYks5aFEyVHIrNHJTYys4ZGZsWENPMmw2cFkrUElzNXBGMXhzNGttYlhWQjZ6MEpXUlJkSCs2QjB3OFZlb3lkZVdsVjg0eGFVTG52WDA4dkV6Tm4rSEpPdSt0ZlQxY1NiS1BMZXd2V2tjL2MxL1l0czRTbEorREhwdW5zRjMwNjlYU3J3N1ZoUWVsNGdITjNRdUhPOGpFay9POGNDK1VvL3BYUit2RzBMU24vWlh4bFh5SW9jNjBQU2hlbGR3dmR6YjRIVzNJNzFwTy8wd0hZcU9JcDh2NDFKVDUyVE5qZjVqeDI0Zm1FOTZXTHJHNy9ic29NNmVoQ0dwSjhzMC9aVjNrOHFuVE9kWDFCNjZIT2diNGI1S1JmdGw1NGZDN292eXZaWnBYdDZKeTRvM1pxZWRPdk1UZHNsUFVoRDBybFd4dlZNRnRTMFAxVU9uUHZXazg0WGRiMERJWFcva0hpTVNMZW03ck1NS0RtdDlKMEhtZ3RLLzNCZzdHaGdPR0xDZ1BUOGFmcDFwZFRFeDQ4ODZuZ3RLRjJjOU9wc2dWRGJPS0NKT1Fha2krMVZyRmkrd3JpSnBmTmEvb3JTaGNyVzI4NmpMWXN5eWZaTGw4U0V0bk02NWoxU0xIK3dYVkc2amMwRFlJOTg2RnVqS0puUUxWMGMxTXJ3N3NPNW4vZnd3RGZrb2o5Z2ZENG96aHlGQVVWTXFCUmxZckNkMG9VblJya2l5RXpPUEZOTEZ6VHpUNVZsQlhkM09tOG96a0J0T09kRFBaa1U5azkvUENwTGtIYXJuWlVmSWhYT3YwLzZJU3YwU09jdmovMWI5dHpma041RzN4N2ViZEloMzRXZkY2dHBEcnJZSzZQVXBkLzRmSlMzYnBYYXJ0T0pOK1NSREJYT3YwbDZtNkV6WjF6MzVsdzlrM1JPMDFXTUZCVTRINCsyMWxNYmI4WHMwdmx2WVZIcDNQVXFLQ2NhT0RVc25iTkxTUjVjVEMrZForcHBWZWxDbkthMTE3ZU5UTlFrU1ZGaVUydFArUXJTT1Z2WlphVUxxd3Z0UENoL2pkTWIzUk45OVFPa29qdjhMc1FTMGsvTzcrdEtmK05NVDk2TlAwVXZMdmluUm05Sm4yNHdWcmJEQ2JHSWRGNHhWQk5KL3hKU2U2VWVvL0JqLzlJLzdEeTBQdnJuSnk1b3BTSVJSWlgwYVFVQUFQelgzaDNVQUFDQVFBeDdZQUQvYW5GQkNOZGFtSUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQW1tb2VLOUh6aUI1STlFQlhueDhBQUFBQUFBQUFBTEJtQUlaS216V0lueHlPQUFBQUFFbEZUa1N1UW1DQyIsIiR0ZW1wbGF0ZSI6eyJuYW1lIjoiN2M0NDIxNzMtMjMwYS00MmNiLTlkY2EtOWViYTIyYWMzNjAzOnN0cmluZzpIRUFMVEhDRVJUIiwidHlwZSI6IjU0MWVjMWE0LTJkYjItNDdjNi04OGNhLTcxZGIxYjczNTlkMzpzdHJpbmc6RU1CRURERURfUkVOREVSRVIiLCJ1cmwiOiI5NzUyM2Y5Yi1lYmY2LTQ2YjYtOTI5YS0wMmRmMTY2YzQ5MTE6c3RyaW5nOmh0dHBzOi8vbW9oLWhlYWx0aGNlcnQtcmVuZGVyZXIubmV0bGlmeS5hcHAvIn19LCJzaWduYXR1cmUiOnsidHlwZSI6IlNIQTNNZXJrbGVQcm9vZiIsInRhcmdldEhhc2giOiJmZjM0M2FhMjQzMjg0MTExN2NlMzNmMWEwYmNlNzU0ODhmYzUxZDg5MDhmZDZmMTMzZWYyZDRhZjE4YjllYmMyIiwicHJvb2YiOltdLCJtZXJrbGVSb290IjoiZmYzNDNhYTI0MzI4NDExMTdjZTMzZjFhMGJjZTc1NDg4ZmM1MWQ4OTA4ZmQ2ZjEzM2VmMmQ0YWYxOGI5ZWJjMiJ9LCJwcm9vZiI6W3sidHlwZSI6Ik9wZW5BdHRlc3RhdGlvblNpZ25hdHVyZTIwMTgiLCJjcmVhdGVkIjoiMjAyMC0xMC0wN1QwOTo1NjoxMC42OTFaIiwicHJvb2ZQdXJwb3NlIjoiYXNzZXJ0aW9uTWV0aG9kIiwidmVyaWZpY2F0aW9uTWV0aG9kIjoiZGlkOmV0aHI6MHhFMzk0Nzk5MjhDYzRFZkZFNTA3NzQ0ODg3ODBCOWY2MTZiZDRCODMwI2NvbnRyb2xsZXIiLCJzaWduYXR1cmUiOiIweDI5NjYzYTZiZDhiYzA5MTdmMzdkMWIyMGViNjQ0N2M5ZTc4OGQ1MTc3NWNhOWZlYWExZjk4YjYyYWVhODZiYTAyMDIyZjhhMzFkOWE1Y2IwYmU3YWFhYzY1ZDZhMTJkZjc0YmQzZTBlNzkxMTEzMmNiZGUxNzhhMTg2ZTZhMDViMWIifV19",
- "filename": "healthcert.txt",
- "type": "text/open-attestation",
- },
- ],
- "fhirBundle": Object {
- "entry": Array [
- Object {
- "birthDate": "1990-01-15",
- "extension": Array [
- Object {
- "code": Object {
- "text": "SG",
- },
- "url": "http://hl7.org/fhir/StructureDefinition/patient-nationality",
- },
- ],
- "gender": "female",
- "identifier": Array [
- Object {
- "type": "PPN",
- "value": "E7831177G",
- },
- Object {
- "type": Object {
- "text": "NRIC",
- },
- "value": "S****989Z",
- },
- ],
- "name": Array [
- Object {
- "text": "Tan Chen Chen",
- },
- ],
- "resourceType": "Patient",
- },
- Object {
- "collection": Object {
- "collectedDateTime": "2020-09-27T06:15:00Z",
- },
- "resourceType": "Specimen",
- "type": Object {
- "coding": Array [
- Object {
- "code": "258500001",
- "display": "Nasopharyngeal swab",
- "system": "http://snomed.info/sct",
- },
- ],
- },
- },
- Object {
- "code": Object {
- "coding": Array [
- Object {
- "code": "94531-1",
- "display": "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- "system": "http://loinc.org",
- },
- ],
- },
- "effectiveDateTime": "2020-09-28T06:15:00Z",
- "identifier": Array [
- Object {
- "type": "ACSN",
- "value": "123456789",
- },
- ],
- "performer": Object {
- "name": Array [
- Object {
- "text": "Dr Michael Lim",
- },
- ],
- },
- "qualification": Array [
- Object {
- "identifier": "MCR 123214",
- "issuer": "MOH",
- },
- ],
- "resourceType": "Observation",
- "status": "final",
- "valueCodeableConcept": Object {
- "coding": Array [
- Object {
- "code": "260385009",
- "display": "Negative",
- "system": "http://snomed.info/sct",
- },
- ],
- },
- },
- Object {
- "contact": Object {
- "address": Object {
- "text": "MacRitchie Hospital Thomson Road Singapore 123000",
- "type": "physical",
- "use": "work",
- },
- "telecom": Array [
- Object {
- "system": "phone",
- "value": "+6563113111",
- },
- ],
- },
- "endpoint": Object {
- "address": "https://www.macritchieclinic.com.sg",
- },
- "name": "MacRitchie Medical Clinic",
- "resourceType": "Organization",
- "type": "Licensed Healthcare Provider",
- },
- Object {
- "contact": Object {
- "address": Object {
- "text": "2 Thomson Avenue 4 Singapore 098888",
- "type": "physical",
- "use": "work",
- },
- "telecom": Array [
- Object {
- "system": "phone",
- "value": "+6562711188",
- },
- ],
- },
- "name": "MacRitchie Laboratory",
- "resourceType": "Organization",
- "type": "Accredited Laboratory",
- },
- ],
- "resourceType": "Bundle",
- "type": "collection",
- },
- "fhirVersion": "4.0.1",
- "id": "e35f5d2a-4198-4f8f-96dc-d1afe0b67119",
- "issuers": Array [
- Object {
- "id": "did:ethr:0x174D34BA87e88f58902b8fec59120AcC0B94743E",
- "identityProof": Object {
- "key": "did:ethr:0x174D34BA87e88f58902b8fec59120AcC0B94743E#controller",
- "location": "moh.gov.sg",
- "type": "DNS-DID",
- },
- "name": "Ministry of Health (Singapore)",
- "revocation": Object {
- "type": "NONE",
- },
- },
- ],
- "logo": "data:image/png;base64,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",
- "name": "HealthCert",
- "notarisationMetadata": Object {
- "notarisedOn": "1970-01-01T00:00:01.000Z",
- "passportNumber": "E7831177G",
- "reference": "e35f5d2a-4198-4f8f-96dc-d1afe0b67119",
- "url": "https://example.com",
- },
- "validFrom": "2020-11-20",
- }
- `);
-});
-
-it("should create the unwrapped document from input data with empty signedEuHealthCerts", () => {
- const createdDocument = createUnwrappedDocument(
- sampleDocument,
- uuid,
- storedUrl,
- []
- );
- expect(createdDocument).toMatchInlineSnapshot(`
- Object {
- "$template": Object {
- "name": "HEALTH_CERT",
- "type": "EMBEDDED_RENDERER",
- "url": "https://healthcert.renderer.moh.gov.sg/",
- },
- "attachments": Array [
- Object {
- "data": "eyJ2ZXJzaW9uIjoiaHR0cHM6Ly9zY2hlbWEub3BlbmF0dGVzdGF0aW9uLmNvbS8yLjAvc2NoZW1hLmpzb24iLCJkYXRhIjp7ImlkIjoiYTFjMmQyODItNmMxZi00ZTQyLWEzMzUtZTg4OGRhNGQxYjM0OnN0cmluZzpURVNUMDAxIiwibmFtZSI6ImMyNzI3NTNkLWRjYTItNDk5Zi1iNTQzLTM4MTQ0OWU4NTA3NDpzdHJpbmc6SGVhbHRoQ2VydCIsInZhbGlkRnJvbSI6IjhjMWVlYWVkLWU4MTItNDliMi1iZTY2LTg2OGIxZmNiNDJmZTpzdHJpbmc6MjAyMC0xMS0yMCIsImZoaXJWZXJzaW9uIjoiNTg2ZDQ4NjEtYzlmZC00ZmE4LTk0NmEtMWIwZGJiMzY2MWM5OnN0cmluZzo0LjAuMSIsImZoaXJCdW5kbGUiOnsicmVzb3VyY2VUeXBlIjoiM2ZkOWI1MjAtN2JiYS00NzczLWJjMTgtMTZmMGY1N2U0NjlmOnN0cmluZzpCdW5kbGUiLCJ0eXBlIjoiMGRkNDZkZGEtODY0Yy00ZTgwLWI0NmUtYzc4MDE2MjFmYzdmOnN0cmluZzpjb2xsZWN0aW9uIiwiZW50cnkiOlt7InJlc291cmNlVHlwZSI6IjdkMTI5MWJiLWIxMTQtNDI0Yi1iMDY2LTE1ZmQyMmFlOWRiNTpzdHJpbmc6UGF0aWVudCIsImV4dGVuc2lvbiI6W3sidXJsIjoiMmVlNGRmNjItYjViZS00MWQ0LWI4ZWYtYWI4ZTE4NTdlMjA4OnN0cmluZzpodHRwOi8vaGw3Lm9yZy9maGlyL1N0cnVjdHVyZURlZmluaXRpb24vcGF0aWVudC1uYXRpb25hbGl0eSIsImNvZGUiOnsidGV4dCI6ImVhOTUzMmQ1LTlhMmQtNDRlYS05ZDFlLTlmZDMyN2M4MzY0NTpzdHJpbmc6U0cifX1dLCJpZGVudGlmaWVyIjpbeyJ0eXBlIjoiMDExYzEzYmUtMzE5Ny00ZDA4LTk0ZTMtYzNkMzExZTgxNjNkOnN0cmluZzpQUE4iLCJ2YWx1ZSI6ImEwZTE0YTUwLTZkMGUtNDk4Ni1iYWE1LThmMmQyZDZkNTZlYjpzdHJpbmc6RTc4MzExNzdHIn0seyJ0eXBlIjp7InRleHQiOiIyZmUyZjIzMy05MzBmLTRlYmItODFmZi1iYmI1MzdhM2Y3ZjI6c3RyaW5nOk5SSUMifSwidmFsdWUiOiI4ODkyMTc2Zi0yZGMzLTQ0ODctOTc1Ni1iOWJmNWUyN2EwYmI6c3RyaW5nOlM5MDk4OTg5WiJ9XSwibmFtZSI6W3sidGV4dCI6IjM0OGY0YThiLTBiMTktNDkyZi05YThhLTk0MTkxZjE3NDg1YzpzdHJpbmc6VGFuIENoZW4gQ2hlbiJ9XSwiZ2VuZGVyIjoiNWE3MWI3Y2ItMWNkNy00NzBjLTgzMWItYzBiMDkzMDJmMmZjOnN0cmluZzpmZW1hbGUiLCJiaXJ0aERhdGUiOiIzN2ZhODRjNy0yMjg1LTQ0N2EtOTRmOS04MWUyMzA2MTY2MTE6c3RyaW5nOjE5OTAtMDEtMTUifSx7InJlc291cmNlVHlwZSI6IjQ2NjUxMzk3LTlhMzAtNDFkYS1iOGQ1LTVlMzk2MTRjMzM1YjpzdHJpbmc6U3BlY2ltZW4iLCJ0eXBlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiYWM5NjQ3ODAtOWFiNS00M2U2LTg3NmMtN2Y2M2IxMjIxNDlkOnN0cmluZzpodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiY29kZSI6IjgwYTM3YTM0LWZhYjEtNGZjOS1iOGFjLWUzNGVkYTZhNDA2YTpzdHJpbmc6MjU4NTAwMDAxIiwiZGlzcGxheSI6IjdmMDFmMGUwLTIxN2UtNDFhYi04MTA1LWUzOGYwMmViNWUxNzpzdHJpbmc6TmFzb3BoYXJ5bmdlYWwgc3dhYiJ9XX0sImNvbGxlY3Rpb24iOnsiY29sbGVjdGVkRGF0ZVRpbWUiOiI1MjcwODc5Yi05OTBkLTRlN2EtYmM3Ny1jNWU5ZWJkZjM5NWY6c3RyaW5nOjIwMjAtMDktMjdUMDY6MTU6MDBaIn19LHsicmVzb3VyY2VUeXBlIjoiNjY2M2I0NjEtYWYwYy00YTI0LWI3ODgtNThiOGY3MjM3NjE5OnN0cmluZzpPYnNlcnZhdGlvbiIsImlkZW50aWZpZXIiOlt7InZhbHVlIjoiNzFlYmNkYWMtOTU1My00MmFmLWE3M2ItNmJlYTQyNmM3MzVhOnN0cmluZzoxMjM0NTY3ODkiLCJ0eXBlIjoiYzQxMjliMWMtY2U5NC00ZDk5LWI4NTktMjc2NzQ2OTJlYzc2OnN0cmluZzpBQ1NOIn1dLCJjb2RlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiMzdkZDBjMTMtZGMxMy00ZDY4LWFhZDYtMzgwOGMzNzg2NWViOnN0cmluZzpodHRwOi8vbG9pbmMub3JnIiwiY29kZSI6IjUwYmUwOWE4LTAwNzMtNGUxMS1iMGNkLWZjOTg5NGM4OGYzMjpzdHJpbmc6OTQ1MzEtMSIsImRpc3BsYXkiOiI5YmYxOWFkNC1jMTFiLTQzOWUtOWUxNS05ZTJmODhiZGY5Nzg6c3RyaW5nOlJldmVyc2UgdHJhbnNjcmlwdGlvbiBwb2x5bWVyYXNlIGNoYWluIHJlYWN0aW9uIChyUlQtUENSKSB0ZXN0In1dfSwidmFsdWVDb2RlYWJsZUNvbmNlcHQiOnsiY29kaW5nIjpbeyJzeXN0ZW0iOiI0YWQ1ODBiNS1iYWQ2LTQxZjEtYmJkYS0xZDlmNGY5ODFiY2M6c3RyaW5nOmh0dHA6Ly9zbm9tZWQuaW5mby9zY3QiLCJjb2RlIjoiNWM2NTRlMWUtNmNjOS00NGViLTllOTktNGU5ZGVjZDU2ODZjOnN0cmluZzoyNjAzODUwMDkiLCJkaXNwbGF5IjoiNzI2Y2E5NjgtMjk0MS00Yzc2LTg3MWQtYWM1N2JhOWNkMDVmOnN0cmluZzpOZWdhdGl2ZSJ9XX0sImVmZmVjdGl2ZURhdGVUaW1lIjoiYzhlYzhhNWYtYWY1ZS00MzYyLTgwM2YtZGMyNzAwM2ZhYjEzOnN0cmluZzoyMDIwLTA5LTI4VDA2OjE1OjAwWiIsInN0YXR1cyI6IjFlYTBkZmE5LWRiMzQtNDFlMy1hNDkwLWRkZWQ0YjM1NGExOTpzdHJpbmc6ZmluYWwiLCJwZXJmb3JtZXIiOnsibmFtZSI6W3sidGV4dCI6ImE3NzI1MDE5LWNkNDYtNDEyNS05MDAzLTdmNDE2NGMyOTY2MjpzdHJpbmc6RHIgTWljaGFlbCBMaW0ifV19LCJxdWFsaWZpY2F0aW9uIjpbeyJpZGVudGlmaWVyIjoiMDExMTY1OWEtNTRhMi00MjYwLWJlMzUtZDNlMmQzZmVlYTAwOnN0cmluZzpNQ1IgMTIzMjE0IiwiaXNzdWVyIjoiZjQzNTRjYzQtYzJhOS00YTk2LWE1OTQtODE1YmNkY2FmNjdjOnN0cmluZzpNT0gifV19LHsicmVzb3VyY2VUeXBlIjoiNDc0ODg4NjYtNjkyMC00MWIwLWJjNzMtMDM1ZmMxMDY3MDFmOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiNzc3OGM2ZTgtZTI5My00NzJiLWJiNmEtNDNmMWFiNDg1YzlkOnN0cmluZzpNYWNSaXRjaGllIE1lZGljYWwgQ2xpbmljIiwidHlwZSI6IjA0OGQ1ZGM4LTg1ZmMtNDQyZC1hMThlLTdmY2UwNDk0ZDczNTpzdHJpbmc6TGljZW5zZWQgSGVhbHRoY2FyZSBQcm92aWRlciIsImVuZHBvaW50Ijp7ImFkZHJlc3MiOiI5NjkzYjdhOS0yMzI5LTRiOTgtODVmNi1hNThjNWNlNGI5ZTU6c3RyaW5nOmh0dHBzOi8vd3d3Lm1hY3JpdGNoaWVjbGluaWMuY29tLnNnIn0sImNvbnRhY3QiOnsidGVsZWNvbSI6W3sic3lzdGVtIjoiYjU5YjI2NDYtNWVjYi00NWM0LThmOGEtODAwYzBjMWI4MDhmOnN0cmluZzpwaG9uZSIsInZhbHVlIjoiZjk5MDMzNjYtMTgyNS00Njc5LWI1MzUtNjk5ODdkZGQyYWQ5OnN0cmluZzorNjU2MzExMzExMSJ9XSwiYWRkcmVzcyI6eyJ0eXBlIjoiYmY0OTE0NDYtMDAzMy00NzBlLThhOTQtMjc4ZmIyNWRkZDY2OnN0cmluZzpwaHlzaWNhbCIsInVzZSI6Ijc0ZTEwMTMzLTcyNTUtNGRjNy04NjNiLTgxYjA1MDZiMWFhMjpzdHJpbmc6d29yayIsInRleHQiOiI3NjFlNDI0OC1iNTI0LTRjODctOGM0ZC0xZDYyZTg3ZjhjZWY6c3RyaW5nOk1hY1JpdGNoaWUgSG9zcGl0YWwgVGhvbXNvbiBSb2FkIFNpbmdhcG9yZSAxMjMwMDAifX19LHsicmVzb3VyY2VUeXBlIjoiMTE3YzhjNjQtYzcyNy00ZGY2LWE3YjItMGE1Mjk3YTZjZTFhOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiMjQzYTliN2ItMzczOC00MWIzLWJiNzQtMGFjY2IyYzFmYWNjOnN0cmluZzpNYWNSaXRjaGllIExhYm9yYXRvcnkiLCJ0eXBlIjoiOTNiMzI4ODgtOTI2MC00NWYyLWE4ZTAtOTE3YzkwOWRiZThkOnN0cmluZzpBY2NyZWRpdGVkIExhYm9yYXRvcnkiLCJjb250YWN0Ijp7InRlbGVjb20iOlt7InN5c3RlbSI6IjM4MDY3NDQ1LTNkNDctNDYyNS1hYjE0LTNmNjk3MjlkODYwYzpzdHJpbmc6cGhvbmUiLCJ2YWx1ZSI6ImUzNDU2MWNlLWQ0MGEtNDE4NC05ZGRkLTM3ODU3OTIzMjg3ZTpzdHJpbmc6KzY1NjI3MTExODgifV0sImFkZHJlc3MiOnsidHlwZSI6ImNjNTcwZDBkLTUzOWEtNGY0Ny05MjExLTlkMWYzMzZkZmVjMjpzdHJpbmc6cGh5c2ljYWwiLCJ1c2UiOiJjMjViZTJhNS04NjUzLTRjZGMtOWQ1ZS0wNjM5OTBmZjY2M2Y6c3RyaW5nOndvcmsiLCJ0ZXh0IjoiOGI0OGYzYzAtNTc1NC00ZmQ3LTk5YTgtMjM0NDNmNDRlOGMzOnN0cmluZzoyIFRob21zb24gQXZlbnVlIDQgU2luZ2Fwb3JlIDA5ODg4OCJ9fX1dfSwiaXNzdWVycyI6W3siaWQiOiI3YzZhNWFmMS1hMTg3LTQ5NTktYjk5My1iYzg1NmZiN2MzYzc6c3RyaW5nOmRpZDpldGhyOjB4RTM5NDc5OTI4Q2M0RWZGRTUwNzc0NDg4NzgwQjlmNjE2YmQ0QjgzMCIsInJldm9jYXRpb24iOnsidHlwZSI6IjhmNmY2OGI0LTQwNzMtNDc5Ni05YTlhLWI4MDM3NmUzNTk4NjpzdHJpbmc6Tk9ORSJ9LCJuYW1lIjoiNGQ2MTRiYzctNDk2NC00YmI5LTkyYjYtNGM4YWQzNmQ3ZTgwOnN0cmluZzpTQU1QTEUgQ0xJTklDIiwiaWRlbnRpdHlQcm9vZiI6eyJ0eXBlIjoiNjI3YmE4NjYtYjcxNC00MTcyLWJiOGUtYmFhYzcwYzdmYzJkOnN0cmluZzpETlMtRElEIiwibG9jYXRpb24iOiI5ZGRlN2RjOC1lMTk4LTQ1ZDItYmJjNi1jYzg2NDgyMWEwMzQ6c3RyaW5nOmRvbm90dmVyaWZ5LnRlc3RpbmcudmVyaWZ5Lmdvdi5zZyIsImtleSI6Ijg5MjRjOWRhLTYzNjQtNDZhZi04MTc1LTAzMDM1OTk5NWNkNDpzdHJpbmc6ZGlkOmV0aHI6MHhFMzk0Nzk5MjhDYzRFZkZFNTA3NzQ0ODg3ODBCOWY2MTZiZDRCODMwI2NvbnRyb2xsZXIifX1dLCJsb2dvIjoiOGU5NDFkY2ItM2MzNi00NGZiLWFlZTEtODgxMzY2MzQ2ZGY4OnN0cmluZzpkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWZRQUFBRElDQU1BQUFBcHgrUGFBQUFBTTFCTVZFVUFBQURNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16ZUNtaUFBQUFBRUhSU1RsTUFRTCtBN3hBZ24yRFAzekJ3cjFDUEVsK0kvUUFBQndkSlJFRlVlTnJzbmQxMjJ5b1FSdmtISVNITit6L3R5VWs5b1RFQ1ExYlRCYzIzYnlOczBCNUdJREFSQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWsrSWsrSWR4NGc1TjRCOUdRL3JQQTlKL0lQZlNnd0wvTUVFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUR3UDVaUG9QNXI3RkpLQWY3Y3VmQmloUE5Ta1g1aGxBOXUrRHNQN2RYL0pLMVAyVlBpU0lvZWJFckx3Vmg1WngrOEMxWTIyWXRQMEZwZjZoZGVhK21xMVdsaXhmZWo2UmNEeGowOXN3WGJiZUJRcGlqdWcyMGFqL1NFOGJ2bzVoRXVhdkF1U0twUWZKeFRHOTFnVXJDVjZqU1FFMG9Qa2U0d3VrZTcwNUVxcExOV3h0TXRTazRqdlhHbGQrdExseHZWTU5uYWtEN21FbmRZVFZXU25WODYwV1VYbDM0Uk15N0JlbXB5R3pON3BBYm1YRUE2YmZ2SzB1MzJ1VEZLS1ZNMHIwWXcxTVRjRnZwOGlWTFBEMCs5Z0hReSs3clNmM2VlanAySHVGY3NtbGRpRXowRnpLWGZTUnczcWUwOFhxZDlkUDZRS09Obmt1NGxHM05TYi9SQnRLdEt0MXR0ZEJKaVliMlZJN2JyYzd0YzhJWW90SnpIVUIwYytPK1QzclRRdUxLc1pScXB6a1RTN2RaSTR2bytxSm5kRUdPOEV6ZWN5amFjNi9JVE4yS09XYVVMSVQvYUxkZVVucXBkaTdWVzIrS3ljMjlGTDNzN2UzaGk1TFRTaGVXV3B5V2xINFh6bXZXam5pT2lGTjNZV0RpdldJOTJXdWs1Y3QyQzBwM0p6bDlZTjY2V0k1SVYvVnlGODZyMWExN3BINVVNQzBwWC9Ed1hWVTUyNEtzNVlnRFptTDR6R3oxdzgwcDMzUGoxcE12Y2krdGMyY0ZJam1oSDJkV1ZmdWFWTHVMank5ZVR6Z3FPcnFld3YwdnVtLzFLUjQrMmE2RGg1cFhPN1Y5TytzNEtSSlBBRHV4Tmp0akZDQ2svQ2x0RXpnZnpTdGVyU3ZkWlFaZURveXlxeFFndVIxbFhtQmxJLzlQU2ViWnBiT2U4Yml2dDJiRks5WWFLNGVIZTdOTE5hdExQM3FHWUxmTDcxUm9NdkI2WHU5NkozVFd0OUxUb1FNNXptOFlmeGJISUVTUFpYWFcvdG92VFNvK1BxRnhOZXN3WnFqTy9YMDlPdkJnaTlPY0h3N2xsVXVrY3YrZGkwcm5lcWY5OXVYb0tnbE1Nd2FsbDd4L215MG1sUDVwaVZudjNmdVorMTkzeG5wVFlMejNTamVqUExYcE82VHRYYnpYcGZJVWNlSkhtUHNYQUpzYkkrYUw3ZnZzcHBWc09YN3VhZEo5RnZ1VDYzUHhzWkFRM1VNeHlnTHlXdnNrNi9sdWt1NDBmYjh0dG9sREZGYjFaUVE2L21Sa3YxaVc5aTFKNkMvMWFlakFjdlFQVm1VdDZGQjJjbjI2SnpETzRUc2FMY1dlYVRibzdJbjA0WDA4Njk2WHhUbnJrbXpHQ0hpbW1KcEx1TmFQaTcxZitLT2t0ZTVJSzlPclM3NGluZ1BTZkpkMW9JU0Q5WjBtL2hQaEIwbysvTGQzTU1HVXJTVTY4czl5VXpYU08zc3VoVytCaCtKajBveXoyc25acWdwY3pkNWl3cHZSdm1LZlhwWS9QMHllU2ZzZ0hPaGxpd3RMUzdjQlNpUjFhWkZQMzBxK0J0M2ZYYks5aFEyVHIrNHJTYys4ZGZsWENPMmw2cFkrUElzNXBGMXhzNGttYlhWQjZ6MEpXUlJkSCs2QjB3OFZlb3lkZVdsVjg0eGFVTG52WDA4dkV6Tm4rSEpPdSt0ZlQxY1NiS1BMZXd2V2tjL2MxL1l0czRTbEorREhwdW5zRjMwNjlYU3J3N1ZoUWVsNGdITjNRdUhPOGpFay9POGNDK1VvL3BYUit2RzBMU24vWlh4bFh5SW9jNjBQU2hlbGR3dmR6YjRIVzNJNzFwTy8wd0hZcU9JcDh2NDFKVDUyVE5qZjVqeDI0Zm1FOTZXTHJHNy9ic29NNmVoQ0dwSjhzMC9aVjNrOHFuVE9kWDFCNjZIT2diNGI1S1JmdGw1NGZDN292eXZaWnBYdDZKeTRvM1pxZWRPdk1UZHNsUFVoRDBybFd4dlZNRnRTMFAxVU9uUHZXazg0WGRiMERJWFcva0hpTVNMZW03ck1NS0RtdDlKMEhtZ3RLLzNCZzdHaGdPR0xDZ1BUOGFmcDFwZFRFeDQ4ODZuZ3RLRjJjOU9wc2dWRGJPS0NKT1Fha2krMVZyRmkrd3JpSnBmTmEvb3JTaGNyVzI4NmpMWXN5eWZaTGw4U0V0bk02NWoxU0xIK3dYVkc2amMwRFlJOTg2RnVqS0puUUxWMGMxTXJ3N3NPNW4vZnd3RGZrb2o5Z2ZENG96aHlGQVVWTXFCUmxZckNkMG9VblJya2l5RXpPUEZOTEZ6VHpUNVZsQlhkM09tOG96a0J0T09kRFBaa1U5azkvUENwTGtIYXJuWlVmSWhYT3YwLzZJU3YwU09jdmovMWI5dHpma041RzN4N2ViZEloMzRXZkY2dHBEcnJZSzZQVXBkLzRmSlMzYnBYYXJ0T0pOK1NSREJYT3YwbDZtNkV6WjF6MzVsdzlrM1JPMDFXTUZCVTRINCsyMWxNYmI4WHMwdmx2WVZIcDNQVXFLQ2NhT0RVc25iTkxTUjVjVEMrZForcHBWZWxDbkthMTE3ZU5UTlFrU1ZGaVUydFArUXJTT1Z2WlphVUxxd3Z0UENoL2pkTWIzUk45OVFPa29qdjhMc1FTMGsvTzcrdEtmK05NVDk2TlAwVXZMdmluUm05Sm4yNHdWcmJEQ2JHSWRGNHhWQk5KL3hKU2U2VWVvL0JqLzlJLzdEeTBQdnJuSnk1b3BTSVJSWlgwYVFVQUFQelgzaDNVQUFDQVFBeDdZQUQvYW5GQkNOZGFtSUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQW1tb2VLOUh6aUI1STlFQlhueDhBQUFBQUFBQUFBTEJtQUlaS216V0lueHlPQUFBQUFFbEZUa1N1UW1DQyIsIiR0ZW1wbGF0ZSI6eyJuYW1lIjoiN2M0NDIxNzMtMjMwYS00MmNiLTlkY2EtOWViYTIyYWMzNjAzOnN0cmluZzpIRUFMVEhDRVJUIiwidHlwZSI6IjU0MWVjMWE0LTJkYjItNDdjNi04OGNhLTcxZGIxYjczNTlkMzpzdHJpbmc6RU1CRURERURfUkVOREVSRVIiLCJ1cmwiOiI5NzUyM2Y5Yi1lYmY2LTQ2YjYtOTI5YS0wMmRmMTY2YzQ5MTE6c3RyaW5nOmh0dHBzOi8vbW9oLWhlYWx0aGNlcnQtcmVuZGVyZXIubmV0bGlmeS5hcHAvIn19LCJzaWduYXR1cmUiOnsidHlwZSI6IlNIQTNNZXJrbGVQcm9vZiIsInRhcmdldEhhc2giOiJmZjM0M2FhMjQzMjg0MTExN2NlMzNmMWEwYmNlNzU0ODhmYzUxZDg5MDhmZDZmMTMzZWYyZDRhZjE4YjllYmMyIiwicHJvb2YiOltdLCJtZXJrbGVSb290IjoiZmYzNDNhYTI0MzI4NDExMTdjZTMzZjFhMGJjZTc1NDg4ZmM1MWQ4OTA4ZmQ2ZjEzM2VmMmQ0YWYxOGI5ZWJjMiJ9LCJwcm9vZiI6W3sidHlwZSI6Ik9wZW5BdHRlc3RhdGlvblNpZ25hdHVyZTIwMTgiLCJjcmVhdGVkIjoiMjAyMC0xMC0wN1QwOTo1NjoxMC42OTFaIiwicHJvb2ZQdXJwb3NlIjoiYXNzZXJ0aW9uTWV0aG9kIiwidmVyaWZpY2F0aW9uTWV0aG9kIjoiZGlkOmV0aHI6MHhFMzk0Nzk5MjhDYzRFZkZFNTA3NzQ0ODg3ODBCOWY2MTZiZDRCODMwI2NvbnRyb2xsZXIiLCJzaWduYXR1cmUiOiIweDI5NjYzYTZiZDhiYzA5MTdmMzdkMWIyMGViNjQ0N2M5ZTc4OGQ1MTc3NWNhOWZlYWExZjk4YjYyYWVhODZiYTAyMDIyZjhhMzFkOWE1Y2IwYmU3YWFhYzY1ZDZhMTJkZjc0YmQzZTBlNzkxMTEzMmNiZGUxNzhhMTg2ZTZhMDViMWIifV19",
- "filename": "healthcert.txt",
- "type": "text/open-attestation",
- },
- ],
- "fhirBundle": Object {
- "entry": Array [
- Object {
- "birthDate": "1990-01-15",
- "extension": Array [
- Object {
- "code": Object {
- "text": "SG",
- },
- "url": "http://hl7.org/fhir/StructureDefinition/patient-nationality",
- },
- ],
- "gender": "female",
- "identifier": Array [
- Object {
- "type": "PPN",
- "value": "E7831177G",
- },
- Object {
- "type": Object {
- "text": "NRIC",
- },
- "value": "S****989Z",
- },
- ],
- "name": Array [
- Object {
- "text": "Tan Chen Chen",
- },
- ],
- "resourceType": "Patient",
- },
- Object {
- "collection": Object {
- "collectedDateTime": "2020-09-27T06:15:00Z",
- },
- "resourceType": "Specimen",
- "type": Object {
- "coding": Array [
- Object {
- "code": "258500001",
- "display": "Nasopharyngeal swab",
- "system": "http://snomed.info/sct",
- },
- ],
- },
- },
- Object {
- "code": Object {
- "coding": Array [
- Object {
- "code": "94531-1",
- "display": "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- "system": "http://loinc.org",
- },
- ],
- },
- "effectiveDateTime": "2020-09-28T06:15:00Z",
- "identifier": Array [
- Object {
- "type": "ACSN",
- "value": "123456789",
- },
- ],
- "performer": Object {
- "name": Array [
- Object {
- "text": "Dr Michael Lim",
- },
- ],
- },
- "qualification": Array [
- Object {
- "identifier": "MCR 123214",
- "issuer": "MOH",
- },
- ],
- "resourceType": "Observation",
- "status": "final",
- "valueCodeableConcept": Object {
- "coding": Array [
- Object {
- "code": "260385009",
- "display": "Negative",
- "system": "http://snomed.info/sct",
- },
- ],
- },
- },
- Object {
- "contact": Object {
- "address": Object {
- "text": "MacRitchie Hospital Thomson Road Singapore 123000",
- "type": "physical",
- "use": "work",
- },
- "telecom": Array [
- Object {
- "system": "phone",
- "value": "+6563113111",
- },
- ],
- },
- "endpoint": Object {
- "address": "https://www.macritchieclinic.com.sg",
- },
- "name": "MacRitchie Medical Clinic",
- "resourceType": "Organization",
- "type": "Licensed Healthcare Provider",
- },
- Object {
- "contact": Object {
- "address": Object {
- "text": "2 Thomson Avenue 4 Singapore 098888",
- "type": "physical",
- "use": "work",
- },
- "telecom": Array [
- Object {
- "system": "phone",
- "value": "+6562711188",
- },
- ],
- },
- "name": "MacRitchie Laboratory",
- "resourceType": "Organization",
- "type": "Accredited Laboratory",
- },
- ],
- "resourceType": "Bundle",
- "type": "collection",
- },
- "fhirVersion": "4.0.1",
- "id": "e35f5d2a-4198-4f8f-96dc-d1afe0b67119",
- "issuers": Array [
- Object {
- "id": "did:ethr:0x174D34BA87e88f58902b8fec59120AcC0B94743E",
- "identityProof": Object {
- "key": "did:ethr:0x174D34BA87e88f58902b8fec59120AcC0B94743E#controller",
- "location": "moh.gov.sg",
- "type": "DNS-DID",
- },
- "name": "Ministry of Health (Singapore)",
- "revocation": Object {
- "type": "NONE",
- },
- },
- ],
- "logo": "data:image/png;base64,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",
- "name": "HealthCert",
- "notarisationMetadata": Object {
- "notarisedOn": "1970-01-01T00:00:01.000Z",
- "passportNumber": "E7831177G",
- "reference": "e35f5d2a-4198-4f8f-96dc-d1afe0b67119",
- "url": "https://example.com",
- },
- "validFrom": "2020-11-20",
- }
- `);
-});
-
-it("should create the unwrapped document from input data with signedEuHealthCerts", () => {
- const createdDocument = createUnwrappedDocument(
- sampleDocument,
- uuid,
- storedUrl,
- sampleSignedEuHealthCerts
- );
- expect(createdDocument).toMatchInlineSnapshot(`
- Object {
- "$template": Object {
- "name": "HEALTH_CERT",
- "type": "EMBEDDED_RENDERER",
- "url": "https://healthcert.renderer.moh.gov.sg/",
- },
- "attachments": Array [
- Object {
- "data": "eyJ2ZXJzaW9uIjoiaHR0cHM6Ly9zY2hlbWEub3BlbmF0dGVzdGF0aW9uLmNvbS8yLjAvc2NoZW1hLmpzb24iLCJkYXRhIjp7ImlkIjoiYTFjMmQyODItNmMxZi00ZTQyLWEzMzUtZTg4OGRhNGQxYjM0OnN0cmluZzpURVNUMDAxIiwibmFtZSI6ImMyNzI3NTNkLWRjYTItNDk5Zi1iNTQzLTM4MTQ0OWU4NTA3NDpzdHJpbmc6SGVhbHRoQ2VydCIsInZhbGlkRnJvbSI6IjhjMWVlYWVkLWU4MTItNDliMi1iZTY2LTg2OGIxZmNiNDJmZTpzdHJpbmc6MjAyMC0xMS0yMCIsImZoaXJWZXJzaW9uIjoiNTg2ZDQ4NjEtYzlmZC00ZmE4LTk0NmEtMWIwZGJiMzY2MWM5OnN0cmluZzo0LjAuMSIsImZoaXJCdW5kbGUiOnsicmVzb3VyY2VUeXBlIjoiM2ZkOWI1MjAtN2JiYS00NzczLWJjMTgtMTZmMGY1N2U0NjlmOnN0cmluZzpCdW5kbGUiLCJ0eXBlIjoiMGRkNDZkZGEtODY0Yy00ZTgwLWI0NmUtYzc4MDE2MjFmYzdmOnN0cmluZzpjb2xsZWN0aW9uIiwiZW50cnkiOlt7InJlc291cmNlVHlwZSI6IjdkMTI5MWJiLWIxMTQtNDI0Yi1iMDY2LTE1ZmQyMmFlOWRiNTpzdHJpbmc6UGF0aWVudCIsImV4dGVuc2lvbiI6W3sidXJsIjoiMmVlNGRmNjItYjViZS00MWQ0LWI4ZWYtYWI4ZTE4NTdlMjA4OnN0cmluZzpodHRwOi8vaGw3Lm9yZy9maGlyL1N0cnVjdHVyZURlZmluaXRpb24vcGF0aWVudC1uYXRpb25hbGl0eSIsImNvZGUiOnsidGV4dCI6ImVhOTUzMmQ1LTlhMmQtNDRlYS05ZDFlLTlmZDMyN2M4MzY0NTpzdHJpbmc6U0cifX1dLCJpZGVudGlmaWVyIjpbeyJ0eXBlIjoiMDExYzEzYmUtMzE5Ny00ZDA4LTk0ZTMtYzNkMzExZTgxNjNkOnN0cmluZzpQUE4iLCJ2YWx1ZSI6ImEwZTE0YTUwLTZkMGUtNDk4Ni1iYWE1LThmMmQyZDZkNTZlYjpzdHJpbmc6RTc4MzExNzdHIn0seyJ0eXBlIjp7InRleHQiOiIyZmUyZjIzMy05MzBmLTRlYmItODFmZi1iYmI1MzdhM2Y3ZjI6c3RyaW5nOk5SSUMifSwidmFsdWUiOiI4ODkyMTc2Zi0yZGMzLTQ0ODctOTc1Ni1iOWJmNWUyN2EwYmI6c3RyaW5nOlM5MDk4OTg5WiJ9XSwibmFtZSI6W3sidGV4dCI6IjM0OGY0YThiLTBiMTktNDkyZi05YThhLTk0MTkxZjE3NDg1YzpzdHJpbmc6VGFuIENoZW4gQ2hlbiJ9XSwiZ2VuZGVyIjoiNWE3MWI3Y2ItMWNkNy00NzBjLTgzMWItYzBiMDkzMDJmMmZjOnN0cmluZzpmZW1hbGUiLCJiaXJ0aERhdGUiOiIzN2ZhODRjNy0yMjg1LTQ0N2EtOTRmOS04MWUyMzA2MTY2MTE6c3RyaW5nOjE5OTAtMDEtMTUifSx7InJlc291cmNlVHlwZSI6IjQ2NjUxMzk3LTlhMzAtNDFkYS1iOGQ1LTVlMzk2MTRjMzM1YjpzdHJpbmc6U3BlY2ltZW4iLCJ0eXBlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiYWM5NjQ3ODAtOWFiNS00M2U2LTg3NmMtN2Y2M2IxMjIxNDlkOnN0cmluZzpodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiY29kZSI6IjgwYTM3YTM0LWZhYjEtNGZjOS1iOGFjLWUzNGVkYTZhNDA2YTpzdHJpbmc6MjU4NTAwMDAxIiwiZGlzcGxheSI6IjdmMDFmMGUwLTIxN2UtNDFhYi04MTA1LWUzOGYwMmViNWUxNzpzdHJpbmc6TmFzb3BoYXJ5bmdlYWwgc3dhYiJ9XX0sImNvbGxlY3Rpb24iOnsiY29sbGVjdGVkRGF0ZVRpbWUiOiI1MjcwODc5Yi05OTBkLTRlN2EtYmM3Ny1jNWU5ZWJkZjM5NWY6c3RyaW5nOjIwMjAtMDktMjdUMDY6MTU6MDBaIn19LHsicmVzb3VyY2VUeXBlIjoiNjY2M2I0NjEtYWYwYy00YTI0LWI3ODgtNThiOGY3MjM3NjE5OnN0cmluZzpPYnNlcnZhdGlvbiIsImlkZW50aWZpZXIiOlt7InZhbHVlIjoiNzFlYmNkYWMtOTU1My00MmFmLWE3M2ItNmJlYTQyNmM3MzVhOnN0cmluZzoxMjM0NTY3ODkiLCJ0eXBlIjoiYzQxMjliMWMtY2U5NC00ZDk5LWI4NTktMjc2NzQ2OTJlYzc2OnN0cmluZzpBQ1NOIn1dLCJjb2RlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiMzdkZDBjMTMtZGMxMy00ZDY4LWFhZDYtMzgwOGMzNzg2NWViOnN0cmluZzpodHRwOi8vbG9pbmMub3JnIiwiY29kZSI6IjUwYmUwOWE4LTAwNzMtNGUxMS1iMGNkLWZjOTg5NGM4OGYzMjpzdHJpbmc6OTQ1MzEtMSIsImRpc3BsYXkiOiI5YmYxOWFkNC1jMTFiLTQzOWUtOWUxNS05ZTJmODhiZGY5Nzg6c3RyaW5nOlJldmVyc2UgdHJhbnNjcmlwdGlvbiBwb2x5bWVyYXNlIGNoYWluIHJlYWN0aW9uIChyUlQtUENSKSB0ZXN0In1dfSwidmFsdWVDb2RlYWJsZUNvbmNlcHQiOnsiY29kaW5nIjpbeyJzeXN0ZW0iOiI0YWQ1ODBiNS1iYWQ2LTQxZjEtYmJkYS0xZDlmNGY5ODFiY2M6c3RyaW5nOmh0dHA6Ly9zbm9tZWQuaW5mby9zY3QiLCJjb2RlIjoiNWM2NTRlMWUtNmNjOS00NGViLTllOTktNGU5ZGVjZDU2ODZjOnN0cmluZzoyNjAzODUwMDkiLCJkaXNwbGF5IjoiNzI2Y2E5NjgtMjk0MS00Yzc2LTg3MWQtYWM1N2JhOWNkMDVmOnN0cmluZzpOZWdhdGl2ZSJ9XX0sImVmZmVjdGl2ZURhdGVUaW1lIjoiYzhlYzhhNWYtYWY1ZS00MzYyLTgwM2YtZGMyNzAwM2ZhYjEzOnN0cmluZzoyMDIwLTA5LTI4VDA2OjE1OjAwWiIsInN0YXR1cyI6IjFlYTBkZmE5LWRiMzQtNDFlMy1hNDkwLWRkZWQ0YjM1NGExOTpzdHJpbmc6ZmluYWwiLCJwZXJmb3JtZXIiOnsibmFtZSI6W3sidGV4dCI6ImE3NzI1MDE5LWNkNDYtNDEyNS05MDAzLTdmNDE2NGMyOTY2MjpzdHJpbmc6RHIgTWljaGFlbCBMaW0ifV19LCJxdWFsaWZpY2F0aW9uIjpbeyJpZGVudGlmaWVyIjoiMDExMTY1OWEtNTRhMi00MjYwLWJlMzUtZDNlMmQzZmVlYTAwOnN0cmluZzpNQ1IgMTIzMjE0IiwiaXNzdWVyIjoiZjQzNTRjYzQtYzJhOS00YTk2LWE1OTQtODE1YmNkY2FmNjdjOnN0cmluZzpNT0gifV19LHsicmVzb3VyY2VUeXBlIjoiNDc0ODg4NjYtNjkyMC00MWIwLWJjNzMtMDM1ZmMxMDY3MDFmOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiNzc3OGM2ZTgtZTI5My00NzJiLWJiNmEtNDNmMWFiNDg1YzlkOnN0cmluZzpNYWNSaXRjaGllIE1lZGljYWwgQ2xpbmljIiwidHlwZSI6IjA0OGQ1ZGM4LTg1ZmMtNDQyZC1hMThlLTdmY2UwNDk0ZDczNTpzdHJpbmc6TGljZW5zZWQgSGVhbHRoY2FyZSBQcm92aWRlciIsImVuZHBvaW50Ijp7ImFkZHJlc3MiOiI5NjkzYjdhOS0yMzI5LTRiOTgtODVmNi1hNThjNWNlNGI5ZTU6c3RyaW5nOmh0dHBzOi8vd3d3Lm1hY3JpdGNoaWVjbGluaWMuY29tLnNnIn0sImNvbnRhY3QiOnsidGVsZWNvbSI6W3sic3lzdGVtIjoiYjU5YjI2NDYtNWVjYi00NWM0LThmOGEtODAwYzBjMWI4MDhmOnN0cmluZzpwaG9uZSIsInZhbHVlIjoiZjk5MDMzNjYtMTgyNS00Njc5LWI1MzUtNjk5ODdkZGQyYWQ5OnN0cmluZzorNjU2MzExMzExMSJ9XSwiYWRkcmVzcyI6eyJ0eXBlIjoiYmY0OTE0NDYtMDAzMy00NzBlLThhOTQtMjc4ZmIyNWRkZDY2OnN0cmluZzpwaHlzaWNhbCIsInVzZSI6Ijc0ZTEwMTMzLTcyNTUtNGRjNy04NjNiLTgxYjA1MDZiMWFhMjpzdHJpbmc6d29yayIsInRleHQiOiI3NjFlNDI0OC1iNTI0LTRjODctOGM0ZC0xZDYyZTg3ZjhjZWY6c3RyaW5nOk1hY1JpdGNoaWUgSG9zcGl0YWwgVGhvbXNvbiBSb2FkIFNpbmdhcG9yZSAxMjMwMDAifX19LHsicmVzb3VyY2VUeXBlIjoiMTE3YzhjNjQtYzcyNy00ZGY2LWE3YjItMGE1Mjk3YTZjZTFhOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiMjQzYTliN2ItMzczOC00MWIzLWJiNzQtMGFjY2IyYzFmYWNjOnN0cmluZzpNYWNSaXRjaGllIExhYm9yYXRvcnkiLCJ0eXBlIjoiOTNiMzI4ODgtOTI2MC00NWYyLWE4ZTAtOTE3YzkwOWRiZThkOnN0cmluZzpBY2NyZWRpdGVkIExhYm9yYXRvcnkiLCJjb250YWN0Ijp7InRlbGVjb20iOlt7InN5c3RlbSI6IjM4MDY3NDQ1LTNkNDctNDYyNS1hYjE0LTNmNjk3MjlkODYwYzpzdHJpbmc6cGhvbmUiLCJ2YWx1ZSI6ImUzNDU2MWNlLWQ0MGEtNDE4NC05ZGRkLTM3ODU3OTIzMjg3ZTpzdHJpbmc6KzY1NjI3MTExODgifV0sImFkZHJlc3MiOnsidHlwZSI6ImNjNTcwZDBkLTUzOWEtNGY0Ny05MjExLTlkMWYzMzZkZmVjMjpzdHJpbmc6cGh5c2ljYWwiLCJ1c2UiOiJjMjViZTJhNS04NjUzLTRjZGMtOWQ1ZS0wNjM5OTBmZjY2M2Y6c3RyaW5nOndvcmsiLCJ0ZXh0IjoiOGI0OGYzYzAtNTc1NC00ZmQ3LTk5YTgtMjM0NDNmNDRlOGMzOnN0cmluZzoyIFRob21zb24gQXZlbnVlIDQgU2luZ2Fwb3JlIDA5ODg4OCJ9fX1dfSwiaXNzdWVycyI6W3siaWQiOiI3YzZhNWFmMS1hMTg3LTQ5NTktYjk5My1iYzg1NmZiN2MzYzc6c3RyaW5nOmRpZDpldGhyOjB4RTM5NDc5OTI4Q2M0RWZGRTUwNzc0NDg4NzgwQjlmNjE2YmQ0QjgzMCIsInJldm9jYXRpb24iOnsidHlwZSI6IjhmNmY2OGI0LTQwNzMtNDc5Ni05YTlhLWI4MDM3NmUzNTk4NjpzdHJpbmc6Tk9ORSJ9LCJuYW1lIjoiNGQ2MTRiYzctNDk2NC00YmI5LTkyYjYtNGM4YWQzNmQ3ZTgwOnN0cmluZzpTQU1QTEUgQ0xJTklDIiwiaWRlbnRpdHlQcm9vZiI6eyJ0eXBlIjoiNjI3YmE4NjYtYjcxNC00MTcyLWJiOGUtYmFhYzcwYzdmYzJkOnN0cmluZzpETlMtRElEIiwibG9jYXRpb24iOiI5ZGRlN2RjOC1lMTk4LTQ1ZDItYmJjNi1jYzg2NDgyMWEwMzQ6c3RyaW5nOmRvbm90dmVyaWZ5LnRlc3RpbmcudmVyaWZ5Lmdvdi5zZyIsImtleSI6Ijg5MjRjOWRhLTYzNjQtNDZhZi04MTc1LTAzMDM1OTk5NWNkNDpzdHJpbmc6ZGlkOmV0aHI6MHhFMzk0Nzk5MjhDYzRFZkZFNTA3NzQ0ODg3ODBCOWY2MTZiZDRCODMwI2NvbnRyb2xsZXIifX1dLCJsb2dvIjoiOGU5NDFkY2ItM2MzNi00NGZiLWFlZTEtODgxMzY2MzQ2ZGY4OnN0cmluZzpkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWZRQUFBRElDQU1BQUFBcHgrUGFBQUFBTTFCTVZFVUFBQURNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16ZUNtaUFBQUFBRUhSU1RsTUFRTCtBN3hBZ24yRFAzekJ3cjFDUEVsK0kvUUFBQndkSlJFRlVlTnJzbmQxMjJ5b1FSdmtISVNITit6L3R5VWs5b1RFQ1ExYlRCYzIzYnlOczBCNUdJREFSQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWsrSWsrSWR4NGc1TjRCOUdRL3JQQTlKL0lQZlNnd0wvTUVFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUR3UDVaUG9QNXI3RkpLQWY3Y3VmQmloUE5Ta1g1aGxBOXUrRHNQN2RYL0pLMVAyVlBpU0lvZWJFckx3Vmg1WngrOEMxWTIyWXRQMEZwZjZoZGVhK21xMVdsaXhmZWo2UmNEeGowOXN3WGJiZUJRcGlqdWcyMGFqL1NFOGJ2bzVoRXVhdkF1U0twUWZKeFRHOTFnVXJDVjZqU1FFMG9Qa2U0d3VrZTcwNUVxcExOV3h0TXRTazRqdlhHbGQrdExseHZWTU5uYWtEN21FbmRZVFZXU25WODYwV1VYbDM0Uk15N0JlbXB5R3pON3BBYm1YRUE2YmZ2SzB1MzJ1VEZLS1ZNMHIwWXcxTVRjRnZwOGlWTFBEMCs5Z0hReSs3clNmM2VlanAySHVGY3NtbGRpRXowRnpLWGZTUnczcWUwOFhxZDlkUDZRS09Obmt1NGxHM05TYi9SQnRLdEt0MXR0ZEJKaVliMlZJN2JyYzd0YzhJWW90SnpIVUIwYytPK1QzclRRdUxLc1pScXB6a1RTN2RaSTR2bytxSm5kRUdPOEV6ZWN5amFjNi9JVE4yS09XYVVMSVQvYUxkZVVucXBkaTdWVzIrS3ljMjlGTDNzN2UzaGk1TFRTaGVXV3B5V2xINFh6bXZXam5pT2lGTjNZV0RpdldJOTJXdWs1Y3QyQzBwM0p6bDlZTjY2V0k1SVYvVnlGODZyMWExN3BINVVNQzBwWC9Ed1hWVTUyNEtzNVlnRFptTDR6R3oxdzgwcDMzUGoxcE12Y2krdGMyY0ZJam1oSDJkV1ZmdWFWTHVMank5ZVR6Z3FPcnFld3YwdnVtLzFLUjQrMmE2RGg1cFhPN1Y5TytzNEtSSlBBRHV4Tmp0akZDQ2svQ2x0RXpnZnpTdGVyU3ZkWlFaZURveXlxeFFndVIxbFhtQmxJLzlQU2ViWnBiT2U4Yml2dDJiRks5WWFLNGVIZTdOTE5hdExQM3FHWUxmTDcxUm9NdkI2WHU5NkozVFd0OUxUb1FNNXptOFlmeGJISUVTUFpYWFcvdG92VFNvK1BxRnhOZXN3WnFqTy9YMDlPdkJnaTlPY0h3N2xsVXVrY3YrZGkwcm5lcWY5OXVYb0tnbE1Nd2FsbDd4L215MG1sUDVwaVZudjNmdVorMTkzeG5wVFlMejNTamVqUExYcE82VHRYYnpYcGZJVWNlSkhtUHNYQUpzYkkrYUw3ZnZzcHBWc09YN3VhZEo5RnZ1VDYzUHhzWkFRM1VNeHlnTHlXdnNrNi9sdWt1NDBmYjh0dG9sREZGYjFaUVE2L21Sa3YxaVc5aTFKNkMvMWFlakFjdlFQVm1VdDZGQjJjbjI2SnpETzRUc2FMY1dlYVRibzdJbjA0WDA4Njk2WHhUbnJrbXpHQ0hpbW1KcEx1TmFQaTcxZitLT2t0ZTVJSzlPclM3NGluZ1BTZkpkMW9JU0Q5WjBtL2hQaEIwbysvTGQzTU1HVXJTVTY4czl5VXpYU08zc3VoVytCaCtKajBveXoyc25acWdwY3pkNWl3cHZSdm1LZlhwWS9QMHllU2ZzZ0hPaGxpd3RMUzdjQlNpUjFhWkZQMzBxK0J0M2ZYYks5aFEyVHIrNHJTYys4ZGZsWENPMmw2cFkrUElzNXBGMXhzNGttYlhWQjZ6MEpXUlJkSCs2QjB3OFZlb3lkZVdsVjg0eGFVTG52WDA4dkV6Tm4rSEpPdSt0ZlQxY1NiS1BMZXd2V2tjL2MxL1l0czRTbEorREhwdW5zRjMwNjlYU3J3N1ZoUWVsNGdITjNRdUhPOGpFay9POGNDK1VvL3BYUit2RzBMU24vWlh4bFh5SW9jNjBQU2hlbGR3dmR6YjRIVzNJNzFwTy8wd0hZcU9JcDh2NDFKVDUyVE5qZjVqeDI0Zm1FOTZXTHJHNy9ic29NNmVoQ0dwSjhzMC9aVjNrOHFuVE9kWDFCNjZIT2diNGI1S1JmdGw1NGZDN292eXZaWnBYdDZKeTRvM1pxZWRPdk1UZHNsUFVoRDBybFd4dlZNRnRTMFAxVU9uUHZXazg0WGRiMERJWFcva0hpTVNMZW03ck1NS0RtdDlKMEhtZ3RLLzNCZzdHaGdPR0xDZ1BUOGFmcDFwZFRFeDQ4ODZuZ3RLRjJjOU9wc2dWRGJPS0NKT1Fha2krMVZyRmkrd3JpSnBmTmEvb3JTaGNyVzI4NmpMWXN5eWZaTGw4U0V0bk02NWoxU0xIK3dYVkc2amMwRFlJOTg2RnVqS0puUUxWMGMxTXJ3N3NPNW4vZnd3RGZrb2o5Z2ZENG96aHlGQVVWTXFCUmxZckNkMG9VblJya2l5RXpPUEZOTEZ6VHpUNVZsQlhkM09tOG96a0J0T09kRFBaa1U5azkvUENwTGtIYXJuWlVmSWhYT3YwLzZJU3YwU09jdmovMWI5dHpma041RzN4N2ViZEloMzRXZkY2dHBEcnJZSzZQVXBkLzRmSlMzYnBYYXJ0T0pOK1NSREJYT3YwbDZtNkV6WjF6MzVsdzlrM1JPMDFXTUZCVTRINCsyMWxNYmI4WHMwdmx2WVZIcDNQVXFLQ2NhT0RVc25iTkxTUjVjVEMrZForcHBWZWxDbkthMTE3ZU5UTlFrU1ZGaVUydFArUXJTT1Z2WlphVUxxd3Z0UENoL2pkTWIzUk45OVFPa29qdjhMc1FTMGsvTzcrdEtmK05NVDk2TlAwVXZMdmluUm05Sm4yNHdWcmJEQ2JHSWRGNHhWQk5KL3hKU2U2VWVvL0JqLzlJLzdEeTBQdnJuSnk1b3BTSVJSWlgwYVFVQUFQelgzaDNVQUFDQVFBeDdZQUQvYW5GQkNOZGFtSUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQW1tb2VLOUh6aUI1STlFQlhueDhBQUFBQUFBQUFBTEJtQUlaS216V0lueHlPQUFBQUFFbEZUa1N1UW1DQyIsIiR0ZW1wbGF0ZSI6eyJuYW1lIjoiN2M0NDIxNzMtMjMwYS00MmNiLTlkY2EtOWViYTIyYWMzNjAzOnN0cmluZzpIRUFMVEhDRVJUIiwidHlwZSI6IjU0MWVjMWE0LTJkYjItNDdjNi04OGNhLTcxZGIxYjczNTlkMzpzdHJpbmc6RU1CRURERURfUkVOREVSRVIiLCJ1cmwiOiI5NzUyM2Y5Yi1lYmY2LTQ2YjYtOTI5YS0wMmRmMTY2YzQ5MTE6c3RyaW5nOmh0dHBzOi8vbW9oLWhlYWx0aGNlcnQtcmVuZGVyZXIubmV0bGlmeS5hcHAvIn19LCJzaWduYXR1cmUiOnsidHlwZSI6IlNIQTNNZXJrbGVQcm9vZiIsInRhcmdldEhhc2giOiJmZjM0M2FhMjQzMjg0MTExN2NlMzNmMWEwYmNlNzU0ODhmYzUxZDg5MDhmZDZmMTMzZWYyZDRhZjE4YjllYmMyIiwicHJvb2YiOltdLCJtZXJrbGVSb290IjoiZmYzNDNhYTI0MzI4NDExMTdjZTMzZjFhMGJjZTc1NDg4ZmM1MWQ4OTA4ZmQ2ZjEzM2VmMmQ0YWYxOGI5ZWJjMiJ9LCJwcm9vZiI6W3sidHlwZSI6Ik9wZW5BdHRlc3RhdGlvblNpZ25hdHVyZTIwMTgiLCJjcmVhdGVkIjoiMjAyMC0xMC0wN1QwOTo1NjoxMC42OTFaIiwicHJvb2ZQdXJwb3NlIjoiYXNzZXJ0aW9uTWV0aG9kIiwidmVyaWZpY2F0aW9uTWV0aG9kIjoiZGlkOmV0aHI6MHhFMzk0Nzk5MjhDYzRFZkZFNTA3NzQ0ODg3ODBCOWY2MTZiZDRCODMwI2NvbnRyb2xsZXIiLCJzaWduYXR1cmUiOiIweDI5NjYzYTZiZDhiYzA5MTdmMzdkMWIyMGViNjQ0N2M5ZTc4OGQ1MTc3NWNhOWZlYWExZjk4YjYyYWVhODZiYTAyMDIyZjhhMzFkOWE1Y2IwYmU3YWFhYzY1ZDZhMTJkZjc0YmQzZTBlNzkxMTEzMmNiZGUxNzhhMTg2ZTZhMDViMWIifV19",
- "filename": "healthcert.txt",
- "type": "text/open-attestation",
- },
- ],
- "fhirBundle": Object {
- "entry": Array [
- Object {
- "birthDate": "1990-01-15",
- "extension": Array [
- Object {
- "code": Object {
- "text": "SG",
- },
- "url": "http://hl7.org/fhir/StructureDefinition/patient-nationality",
- },
- ],
- "gender": "female",
- "identifier": Array [
- Object {
- "type": "PPN",
- "value": "E7831177G",
- },
- Object {
- "type": Object {
- "text": "NRIC",
- },
- "value": "S****989Z",
- },
- ],
- "name": Array [
- Object {
- "text": "Tan Chen Chen",
- },
- ],
- "resourceType": "Patient",
- },
- Object {
- "collection": Object {
- "collectedDateTime": "2020-09-27T06:15:00Z",
- },
- "resourceType": "Specimen",
- "type": Object {
- "coding": Array [
- Object {
- "code": "258500001",
- "display": "Nasopharyngeal swab",
- "system": "http://snomed.info/sct",
- },
- ],
- },
- },
- Object {
- "code": Object {
- "coding": Array [
- Object {
- "code": "94531-1",
- "display": "Reverse transcription polymerase chain reaction (rRT-PCR) test",
- "system": "http://loinc.org",
- },
- ],
- },
- "effectiveDateTime": "2020-09-28T06:15:00Z",
- "identifier": Array [
- Object {
- "type": "ACSN",
- "value": "123456789",
- },
- ],
- "performer": Object {
- "name": Array [
- Object {
- "text": "Dr Michael Lim",
- },
- ],
- },
- "qualification": Array [
- Object {
- "identifier": "MCR 123214",
- "issuer": "MOH",
- },
- ],
- "resourceType": "Observation",
- "status": "final",
- "valueCodeableConcept": Object {
- "coding": Array [
- Object {
- "code": "260385009",
- "display": "Negative",
- "system": "http://snomed.info/sct",
- },
- ],
- },
- },
- Object {
- "contact": Object {
- "address": Object {
- "text": "MacRitchie Hospital Thomson Road Singapore 123000",
- "type": "physical",
- "use": "work",
- },
- "telecom": Array [
- Object {
- "system": "phone",
- "value": "+6563113111",
- },
- ],
- },
- "endpoint": Object {
- "address": "https://www.macritchieclinic.com.sg",
- },
- "name": "MacRitchie Medical Clinic",
- "resourceType": "Organization",
- "type": "Licensed Healthcare Provider",
- },
- Object {
- "contact": Object {
- "address": Object {
- "text": "2 Thomson Avenue 4 Singapore 098888",
- "type": "physical",
- "use": "work",
- },
- "telecom": Array [
- Object {
- "system": "phone",
- "value": "+6562711188",
- },
- ],
- },
- "name": "MacRitchie Laboratory",
- "resourceType": "Organization",
- "type": "Accredited Laboratory",
- },
- ],
- "resourceType": "Bundle",
- "type": "collection",
- },
- "fhirVersion": "4.0.1",
- "id": "e35f5d2a-4198-4f8f-96dc-d1afe0b67119",
- "issuers": Array [
- Object {
- "id": "did:ethr:0x174D34BA87e88f58902b8fec59120AcC0B94743E",
- "identityProof": Object {
- "key": "did:ethr:0x174D34BA87e88f58902b8fec59120AcC0B94743E#controller",
- "location": "moh.gov.sg",
- "type": "DNS-DID",
- },
- "name": "Ministry of Health (Singapore)",
- "revocation": Object {
- "type": "NONE",
- },
- },
- ],
- "logo": "data:image/png;base64,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",
- "name": "HealthCert",
- "notarisationMetadata": Object {
- "notarisedOn": "1970-01-01T00:00:01.000Z",
- "passportNumber": "E7831177G",
- "reference": "e35f5d2a-4198-4f8f-96dc-d1afe0b67119",
- "signedEuHealthCerts": Array [
- Object {
- "expiryDateTime": "2022-12-17T01:27:50.263Z",
- "qr": "HC1:abcde",
- "type": "PCR",
- },
- ],
- "url": "https://example.com",
- },
- "validFrom": "2020-11-20",
- }
- `);
-});
diff --git a/src/models/notarizedHealthCert/createNotarizedHealthCert/createUnwrappedHealthCert.ts b/src/models/notarizedHealthCert/createNotarizedHealthCert/createUnwrappedHealthCert.ts
deleted file mode 100644
index ec4d8dcf..00000000
--- a/src/models/notarizedHealthCert/createNotarizedHealthCert/createUnwrappedHealthCert.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-import { getData, v2, WrappedDocument } from "@govtechsg/open-attestation";
-import { notarise } from "@govtechsg/oa-schemata";
-import { maskNricInFhirBundleV1 } from "../../../common/maskNricFin";
-import { config } from "../../../config";
-import { HealthCertDocument, NotarizedHealthCert } from "../../../types";
-import { getParticularsFromHealthCert } from "../../healthCert";
-
-const { didSigner, documentName } = config;
-
-export const createUnwrappedDocument = (
- certificate: WrappedDocument,
- reference: string,
- storedUrl: string,
- signedEuHealthCerts?: notarise.SignedEuHealthCert[]
-): NotarizedHealthCert => {
- const certificateData =
- getData>(certificate);
- const { passportNumber } = getParticularsFromHealthCert(certificateData);
- const b64Certificate = Buffer.from(JSON.stringify(certificate)).toString(
- "base64"
- );
- const dateString = new Date().toISOString();
-
- const $template = {
- name: "HEALTH_CERT",
- type: v2.TemplateType.EmbeddedRenderer,
- url: "https://healthcert.renderer.moh.gov.sg/",
- };
-
- const notarisationMetadata: notarise.NotarisationMetadata = {
- reference,
- notarisedOn: dateString,
- passportNumber: passportNumber || "",
- url: storedUrl,
- };
- if (signedEuHealthCerts && signedEuHealthCerts.length > 0) {
- notarisationMetadata.signedEuHealthCerts = signedEuHealthCerts;
- }
-
- const attachments = [
- {
- filename: "healthcert.txt",
- type: "text/open-attestation",
- data: b64Certificate,
- },
- ];
-
- const issuers = [
- {
- name: didSigner.name,
- id: didSigner.id,
- revocation: {
- type: v2.RevocationType.None,
- },
- identityProof: {
- type: v2.IdentityProofType.DNSDid,
- location: didSigner.dns,
- key: didSigner.key,
- },
- },
- ];
-
- const { fhirVersion, fhirBundle, logo } = certificateData;
-
- return {
- id: reference,
- name: documentName,
- validFrom: certificateData.validFrom,
- fhirVersion,
- fhirBundle: maskNricInFhirBundleV1(fhirBundle),
- issuers,
- $template,
- notarisationMetadata,
- logo,
- attachments,
- };
-};
diff --git a/src/models/notarizedHealthCert/createNotarizedHealthCert/index.ts b/src/models/notarizedHealthCert/createNotarizedHealthCert/index.ts
deleted file mode 100644
index 237e0dae..00000000
--- a/src/models/notarizedHealthCert/createNotarizedHealthCert/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from "./createNotarizedHealthCert";
diff --git a/src/models/notarizedHealthCert/index.ts b/src/models/notarizedHealthCert/index.ts
deleted file mode 100644
index 237e0dae..00000000
--- a/src/models/notarizedHealthCert/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from "./createNotarizedHealthCert";
diff --git a/src/services/spmNotification/index.test.ts b/src/services/spmNotification/index.test.ts
new file mode 100644
index 00000000..ba5fd69f
--- /dev/null
+++ b/src/services/spmNotification/index.test.ts
@@ -0,0 +1,313 @@
+import {
+ notifyHealthCert,
+ notifyPdt,
+} from "@notarise-gov-sg/sns-notify-recipients";
+import { TestData } from "@notarise-gov-sg/sns-notify-recipients/dist/types";
+import { ParsedBundle, GroupedObservation } from "../../models/fhir/types";
+import { NotarisationResult, PDTHealthCertV2 } from "../../types";
+import { config } from "../../config";
+import { sendNotification } from "./index";
+
+jest.mock("@notarise-gov-sg/sns-notify-recipients");
+
+describe("single type oa-doc notification", () => {
+ let certificateData: PDTHealthCertV2;
+ let resultMock: NotarisationResult;
+ let groupedObservationMock: GroupedObservation[];
+ let parsedFhirBundleMock: ParsedBundle;
+ let testDataMock: TestData[];
+ let spy: jest.SpyInstance;
+ beforeAll(() => {
+ spy = jest.spyOn(console, "error").mockImplementation(() => {
+ // do not display errors
+ });
+ config.healthCertNotification.enabled = true;
+ });
+ beforeEach(() => {
+ certificateData = {
+ validFrom: "2021-08-24T04:22:36.062Z",
+ type: "PCR" as any,
+ } as any;
+ resultMock = {
+ notarisedDocument: "notarisedDocument" as any,
+ ttl: 12345678,
+ url: "verify.sg/url",
+ gpayCovidCardUrl: "gpay.com/url",
+ };
+ groupedObservationMock = [
+ {
+ observation: {
+ testType: {
+ code: "258500001",
+ display: "Nasopharyngeal swab",
+ },
+ specimenResourceUuid: "urn:uuid:0275bfaf-48fb-44e0-80cd-12345",
+ practitionerResourceUuid: "urn:uuid:0275bfaf-48fb-44e0-80cd-12346",
+ organizationAlResourceUuid: "urn:uuid:0275bfaf-48fb-44e0-80cd-12347",
+ organizationLhpResourceUuid: "urn:uuid:0275bfaf-48fb-44e0-80cd-12348",
+ acsn: "123456789",
+ targetDisease: {
+ code: "840539006",
+ display: "COVID-19",
+ },
+ result: {
+ code: "260385009",
+ display: "Negative",
+ },
+ effectiveDateTime: "2020-09-28T06:15:00Z",
+ status: "final" as any,
+ },
+ specimen: {} as any,
+ practitioner: {} as any,
+ organization: {} as any,
+ },
+ ];
+ parsedFhirBundleMock = {
+ patient: {
+ fullName: "Tan Chen Chen",
+ nricFin: "S9098989Z",
+ birthDate: "1990-01-15",
+ passportNumber: "E7831177G",
+ nationality: {
+ code: "SG",
+ },
+ },
+ observations: groupedObservationMock,
+ organization: {} as any,
+ };
+ testDataMock = [
+ {
+ patientName: "Tan Chen Chen",
+ swabCollectionDate: "",
+ testType:
+ "SARS-CoV-2 (COVID-19) Ab [Interpretation] in Serum or Plasma",
+ testResult: "Negative",
+ },
+ ];
+ });
+ afterEach(() => {
+ jest.clearAllMocks();
+ });
+ afterAll(() => {
+ spy.mockRestore();
+ });
+
+ it("skip notifyHealthCert/notifyPdt for child valid test cert", async () => {
+ // set patient dob to 5 years old (less than 15 years)
+ parsedFhirBundleMock.patient.birthDate = new Date(
+ new Date().getFullYear() - 5,
+ 1,
+ 1
+ ).toISOString();
+ await sendNotification(resultMock, parsedFhirBundleMock, certificateData);
+ expect(notifyHealthCert).toBeCalledTimes(0);
+ expect(notifyPdt).toBeCalledTimes(0);
+ });
+
+ it("skip notifyHealthCert/notifyPdt for valid PCR test cert without nric/fin", async () => {
+ // remove patient nric/fin
+ delete parsedFhirBundleMock.patient.nricFin;
+ await sendNotification(resultMock, parsedFhirBundleMock, certificateData);
+ expect(notifyHealthCert).toBeCalledTimes(0);
+ expect(notifyPdt).toBeCalledTimes(0);
+ });
+
+ it("trigger notifyPdt for single valid SER test cert", async () => {
+ // set test type code to SER
+ certificateData.type = "SER" as any;
+ parsedFhirBundleMock.observations[0].observation.testType = {
+ code: "94661-6",
+ display: "SARS-CoV-2 (COVID-19) Ab [Interpretation] in Serum or Plasma",
+ };
+ await sendNotification(resultMock, parsedFhirBundleMock, certificateData);
+ expect(notifyPdt).toBeCalledTimes(1);
+ expect(notifyPdt).toHaveBeenCalledWith({
+ nric: parsedFhirBundleMock.patient.nricFin,
+ passportNumber: parsedFhirBundleMock.patient.passportNumber,
+ testData: testDataMock,
+ url: resultMock.url,
+ validFrom: certificateData.validFrom,
+ });
+ });
+
+ it("trigger notifyHealthCert for valid ART test cert", async () => {
+ // set test type code to ART
+ certificateData.type = "ART" as any;
+ parsedFhirBundleMock.observations[0].observation.testType = {
+ code: "697989009",
+ display: "Anterior nares swab",
+ };
+ await sendNotification(resultMock, parsedFhirBundleMock, certificateData);
+
+ expect(notifyHealthCert).toBeCalledTimes(1);
+ expect(notifyHealthCert).toHaveBeenCalledWith({
+ expiry: resultMock.ttl,
+ type: "ART",
+ uin: parsedFhirBundleMock.patient.nricFin,
+ url: resultMock.url,
+ version: "2.0",
+ });
+ });
+
+ it("trigger notifyHealthCert for valid PCR test cert", async () => {
+ await sendNotification(resultMock, parsedFhirBundleMock, certificateData);
+
+ expect(notifyHealthCert).toBeCalledTimes(1);
+ expect(notifyHealthCert).toHaveBeenCalledWith({
+ expiry: resultMock.ttl,
+ type: "PCR",
+ uin: parsedFhirBundleMock.patient.nricFin,
+ url: resultMock.url,
+ version: "2.0",
+ });
+ });
+});
+
+describe("multi type oa-doc notification", () => {
+ let certificateData: PDTHealthCertV2;
+ let resultMock: NotarisationResult;
+ let groupedObservationMock: GroupedObservation[];
+ let parsedFhirBundleMock: ParsedBundle;
+ let testDataMock: TestData[];
+ let spy: jest.SpyInstance;
+ beforeAll(() => {
+ spy = jest.spyOn(console, "error").mockImplementation(() => {
+ // do not display errors
+ });
+ config.healthCertNotification.enabled = true;
+ });
+ beforeEach(() => {
+ certificateData = {
+ validFrom: "2021-08-24T04:22:36.062Z",
+ type: ["PCR", "SER"] as any,
+ } as any;
+ resultMock = {
+ notarisedDocument: "notarisedDocument" as any,
+ ttl: 12345678,
+ url: "verify.sg/url",
+ gpayCovidCardUrl: "gpay.com/url",
+ };
+ groupedObservationMock = [
+ {
+ observation: {
+ testType: {
+ code: "258500001",
+ display: "Nasopharyngeal swab",
+ },
+ specimenResourceUuid: "urn:uuid:0275bfaf-48fb-44e0-80cd-12345",
+ practitionerResourceUuid: "urn:uuid:0275bfaf-48fb-44e0-80cd-12346",
+ organizationAlResourceUuid: "urn:uuid:0275bfaf-48fb-44e0-80cd-12347",
+ organizationLhpResourceUuid: "urn:uuid:0275bfaf-48fb-44e0-80cd-12348",
+ acsn: "123456789",
+ targetDisease: {
+ code: "840539006",
+ display: "COVID-19",
+ },
+ result: {
+ code: "260385009",
+ display: "Negative",
+ },
+ effectiveDateTime: "2020-09-28T06:15:00Z",
+ status: "final" as any,
+ },
+ specimen: {} as any,
+ practitioner: {} as any,
+ organization: {} as any,
+ },
+ {
+ observation: {
+ testType: {
+ code: "94661-6",
+ display:
+ "SARS-CoV-2 (COVID-19) Ab [Interpretation] in Serum or Plasma",
+ },
+ specimenResourceUuid: "urn:uuid:0275bfaf-48fb-44e0-80cd-123425",
+ practitionerResourceUuid: "urn:uuid:0275bfaf-48fb-44e0-80cd-123426",
+ organizationAlResourceUuid: "urn:uuid:0275bfaf-48fb-44e0-80cd-123427",
+ organizationLhpResourceUuid:
+ "urn:uuid:0275bfaf-48fb-44e0-80cd-123428",
+ acsn: "123456789",
+ targetDisease: {
+ code: "840539006",
+ display: "COVID-19",
+ },
+ result: {
+ code: "260385009",
+ display: "Negative",
+ },
+ effectiveDateTime: "2020-09-28T06:15:00Z",
+ status: "final" as any,
+ },
+ specimen: {} as any,
+ practitioner: {} as any,
+ organization: {} as any,
+ },
+ ];
+ parsedFhirBundleMock = {
+ patient: {
+ fullName: "Tan Chen Chen",
+ nricFin: "S9098989Z",
+ birthDate: "1990-01-15",
+ passportNumber: "E7831177G",
+ nationality: {
+ code: "SG",
+ },
+ },
+ observations: groupedObservationMock,
+ organization: {} as any,
+ };
+ testDataMock = [
+ {
+ patientName: "Tan Chen Chen",
+ swabCollectionDate: "",
+ testType: "Nasopharyngeal swab",
+ testResult: "Negative",
+ },
+ {
+ patientName: "Tan Chen Chen",
+ swabCollectionDate: "",
+ testType:
+ "SARS-CoV-2 (COVID-19) Ab [Interpretation] in Serum or Plasma",
+ testResult: "Negative",
+ },
+ ];
+ });
+ afterEach(() => {
+ jest.clearAllMocks();
+ });
+ afterAll(() => {
+ spy.mockRestore();
+ });
+
+ it("skip notifyHealthCert/notifyPdt for child valid [PCR, SER] test cert", async () => {
+ // set patient dob to 5 years old (less than 15 years)
+ parsedFhirBundleMock.patient.birthDate = new Date(
+ new Date().getFullYear() - 5,
+ 1,
+ 1
+ ).toISOString();
+ await sendNotification(resultMock, parsedFhirBundleMock, certificateData);
+ expect(notifyHealthCert).toBeCalledTimes(0);
+ expect(notifyPdt).toBeCalledTimes(0);
+ });
+
+ it("skip notifyHealthCert/notifyPdt for [PCR, SER] test cert without nric/fin", async () => {
+ // remove patient nric/fin
+ delete parsedFhirBundleMock.patient.nricFin;
+ await sendNotification(resultMock, parsedFhirBundleMock, certificateData);
+ expect(notifyHealthCert).toBeCalledTimes(0);
+ expect(notifyPdt).toBeCalledTimes(0);
+ });
+
+ it("trigger notifyPdt for valid [PCR, SER] test cert", async () => {
+ await sendNotification(resultMock, parsedFhirBundleMock, certificateData);
+ expect(notifyPdt).toBeCalledTimes(1);
+ expect(notifyPdt).toHaveBeenCalledWith({
+ nric: parsedFhirBundleMock.patient.nricFin,
+ passportNumber: parsedFhirBundleMock.patient.passportNumber,
+ testData: testDataMock,
+ url: resultMock.url,
+ validFrom: certificateData.validFrom,
+ });
+ });
+});
diff --git a/src/services/spmNotification/index.ts b/src/services/spmNotification/index.ts
new file mode 100644
index 00000000..a6c199ee
--- /dev/null
+++ b/src/services/spmNotification/index.ts
@@ -0,0 +1,82 @@
+import {
+ notifyHealthCert,
+ notifyPdt,
+} from "@notarise-gov-sg/sns-notify-recipients";
+import _ from "lodash";
+import moment from "moment-timezone";
+import { pdtHealthCertV2 } from "@govtechsg/oa-schemata";
+import { TestData } from "@notarise-gov-sg/sns-notify-recipients/dist/types";
+import { ParsedBundle } from "../../models/fhir/types";
+import { config } from "../../config";
+import { NotarisationResult, PDTHealthCertV2 } from "../../types";
+import { parseDateTime } from "../../common/datetime";
+
+const { PdtTypes } = pdtHealthCertV2;
+
+const isChildPatient = (parsedFhirBundle: ParsedBundle): boolean => {
+ const patientDOB = parsedFhirBundle.patient.birthDate;
+ return moment().diff(patientDOB, "years") < 15;
+};
+
+const isEligibleForSpmWallet = (certificateData: PDTHealthCertV2): boolean => {
+ const supportedSingleTypes = [PdtTypes.Pcr, PdtTypes.Art];
+ /*
+ [NEW] SPM wallet notification support only for;
+ - single type OA-Doc PCR or ART (currently, doesn't support either single-type 'SER' or multi-type ['PCR', 'SER'].)
+ */
+ return (
+ _.isString(certificateData.type) &&
+ supportedSingleTypes.some((t) => t === certificateData.type)
+ );
+};
+
+const getTestDataForNofityPdt = (
+ parsedFhirBundle: ParsedBundle
+): TestData[] => {
+ const testData: TestData[] = [];
+ parsedFhirBundle.observations.forEach((observationGroup) => {
+ const testDataValue: TestData = {
+ patientName: parsedFhirBundle.patient?.fullName,
+ swabCollectionDate: parseDateTime(
+ observationGroup.specimen.collectionDateTime
+ ),
+ testType: observationGroup.observation.testType?.display || "",
+ testResult: observationGroup.observation.result.display || "",
+ };
+ testData.push(testDataValue);
+ });
+ return testData;
+};
+
+export const sendNotification = async (
+ result: NotarisationResult,
+ parsedFhirBundle: ParsedBundle,
+ certificateData: PDTHealthCertV2
+) => {
+ /* Send SPM notification using api-notify/wallet when patient is adult (15 years & above) and present NRIC-FIN in OA-Doc. */
+ if (parsedFhirBundle.patient?.nricFin && !isChildPatient(parsedFhirBundle)) {
+ /* [NEW] Send HealthCert to SPM wallet for PCR | ART (Only if enabled) */
+ if (
+ config.healthCertNotification.enabled &&
+ isEligibleForSpmWallet(certificateData)
+ ) {
+ await notifyHealthCert({
+ uin: parsedFhirBundle.patient?.nricFin,
+ version: "2.0",
+ type: certificateData.type as string,
+ url: result.url,
+ expiry: result.ttl,
+ });
+ } else {
+ /* Send SPM notification to recipient (Only if enabled) */
+ const testData: TestData[] = getTestDataForNofityPdt(parsedFhirBundle);
+ await notifyPdt({
+ url: result.url,
+ nric: parsedFhirBundle.patient?.nricFin,
+ passportNumber: parsedFhirBundle.patient?.passportNumber,
+ testData,
+ validFrom: certificateData.validFrom,
+ });
+ }
+ }
+};
diff --git a/src/services/transientStorage/index.ts b/src/services/transientStorage/index.ts
index 0d882d4f..a51fb9fd 100644
--- a/src/services/transientStorage/index.ts
+++ b/src/services/transientStorage/index.ts
@@ -1,14 +1,11 @@
import { Record, String, Number, Runtype } from "runtypes";
import { SignedWrappedDocument } from "@govtechsg/open-attestation";
import axios from "axios";
-import {
- SignedNotarizedHealthCert,
- EndorsedPDTHealthCertV2,
-} from "../../types";
+import { EndorsedPDTHealthCertV2 } from "../../types";
import { config } from "../../config";
import { getLogger } from "../../common/logger";
-const { trace } = getLogger("api-notarise-healthcerts");
+const { trace } = getLogger("src/services/transientStorage");
export const SuccessfulGetQueueNumberResponseDef = Record({
id: String,
@@ -37,40 +34,24 @@ const stringifyAndEncode = (obj: any): string =>
const universalUrl = (url: string, key: string) => {
const subDomain = process.env.STAGE === "production" ? "www" : "dev";
+ const fullDomainToVerifyPath = `https://${subDomain}.verify.gov.sg/verify`;
const query = stringifyAndEncode({
type: "DOCUMENT",
payload: {
uri: url,
permittedActions: ["VIEW", "STORE"],
- redirect: `https://${subDomain}.verify.gov.sg/verify`,
+ redirect: fullDomainToVerifyPath,
},
});
const anchor = key ? `#${stringifyAndEncode({ key })}` : ``;
- return `https://action.openattestation.com/?q=${query}${anchor}`;
+ return `${fullDomainToVerifyPath}?q=${query}${anchor}`;
};
-export const buildStoredUrl = (id: string, key: string) => {
+export const buildUniversalUrl = (id: string, key: string) => {
const url = `${endpoint}/${id}`;
return universalUrl(url, key);
};
-const universalDirectUrl = (url: string, key: string) => {
- const query = stringifyAndEncode({
- type: "DOCUMENT",
- payload: {
- uri: url,
- permittedActions: ["VIEW", "STORE"],
- },
- });
- const anchor = key ? `#${stringifyAndEncode({ key })}` : ``;
- return `https://www.verify.gov.sg/verify?q=${query}${anchor}`;
-};
-
-export const buildStoredDirectUrl = (id: string, key: string) => {
- const url = `${endpoint}/${id}`;
- return universalDirectUrl(url, key);
-};
-
export const getQueueNumber = async (reference: string) => {
const traceWithRef = trace.extend(`reference:${reference}`);
traceWithRef("get queue number");
@@ -88,9 +69,7 @@ export const getQueueNumber = async (reference: string) => {
};
export const uploadDocument = async (
- document:
- | SignedNotarizedHealthCert
- | SignedWrappedDocument,
+ document: SignedWrappedDocument,
id: string,
reference: string
) => {
diff --git a/src/types.ts b/src/types.ts
index 5bce9b1b..0dbffbc3 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -1,123 +1,6 @@
-import {
- v2,
- SignedWrappedDocument,
- WrappedDocument,
-} from "@govtechsg/open-attestation";
+import { v2, WrappedDocument } from "@govtechsg/open-attestation";
import { Record, String, Static } from "runtypes";
import { notarise, pdtHealthCertV2 } from "@govtechsg/oa-schemata";
-import { R4 } from "@ahryman40k/ts-fhir-types";
-
-/* eslint-disable */
-enum EntryResourceType {
- Patient = "Patient",
- Observation = "Observation",
- Specimen = "Specimen",
- Organization = "Organization",
- Device = "Device",
-}
-/* eslint-disable */
-
-/**
- * @deprecated This interface should be remove after v1 healthcert deprecate.
- */
-export interface Patient {
- resourceType: EntryResourceType.Patient;
- identifier: [
- {
- type: "PPN" | { text: "NRIC" };
- value: string;
- }
- ];
- name: string;
-}
-
-/**
- * @deprecated This interface should be remove after v1 healthcert deprecate.
- */
-export interface Observation {
- resourceType: EntryResourceType.Observation;
- valueCodeableConcept: {
- coding: [{ system: string; code: string; display: string }];
- };
- code: {
- coding: [{ system: string; code: string; display: string }];
- };
- specimen: {
- reference: string;
- };
-}
-
-/**
- * @deprecated This interface should be remove after v1 healthcert deprecate.
- */
-export interface Specimen {
- fullUrl?: string;
- resourceType: EntryResourceType.Specimen;
- collection: {
- collectedDateTime: string;
- };
-}
-
-/**
- * @deprecated This interface should be remove after v1 healthcert deprecate.
- */
-export interface Organisation {
- fullUrl?: string;
- type: string;
- resourceType: EntryResourceType.Organization;
-}
-
-/**
- * @deprecated This interface should be remove after v1 healthcert deprecate.
- */
-export interface Device {
- resourceType: EntryResourceType.Device;
- type: {
- coding: [
- {
- system: string;
- code: string;
- display: string;
- }
- ];
- text: string;
- };
- identifier: [
- {
- system: string;
- value: string;
- }
- ];
-}
-
-/**
- * @deprecated This interface should be remove after v1 healthcert deprecate.
- */
-export interface fhirBundleV1 {
- entry: [Patient | Observation | Specimen | Organisation | Device];
-}
-
-/**
- * @deprecated This interface should be removed when PDT HealthCert v1.0 is deprecated.
- */
-export interface HealthCertDocument extends v2.OpenAttestationDocument {
- version?: string;
- type?: string;
- name?: string;
- validFrom: string;
- fhirVersion: string;
- logo: string;
- fhirBundle: fhirBundleV1 | R4.IBundle;
-}
-
-/**
- * @deprecated This interface should be removed when PDT HealthCert v1.0 is deprecated.
- *
- * Please use PDTHealthCertV2 instead.
- */
-export interface NotarizedHealthCert extends HealthCertDocument {
- notarisationMetadata: notarise.NotarisationMetadata;
-}
/**
* ========= HealthCert Types Explained =========
@@ -168,34 +51,6 @@ export const WorkflowContextData = WorkflowReferenceData.And(
);
export type WorkflowContextData = Static;
-/**
- * @deprecated This interface should be removed when PDT HealthCert v1.0 is deprecated.
- */
-export type SignedNotarizedHealthCert =
- SignedWrappedDocument;
-
-export interface TestData {
- provider: string;
- lab?: string;
- swabType: string;
- swabTypeCode: string;
- patientName: string;
- swabCollectionDate: string;
- performerName: string;
- performerMcr: string;
- observationDate: string;
- nric: string;
- passportNumber: string;
- birthDate: string;
- testType: string;
- testCode: string;
- nationality: string;
- gender: string;
- testResult: string;
- testResultCode: string;
- deviceIdentifier?: string;
-}
-
export interface EuTestParams {
tg: string;
tt: string;
@@ -227,9 +82,7 @@ export interface EuHealthCert extends EuHealthCertDocument {
}
export interface NotarisationResult {
- notarisedDocument: WrappedDocument<
- HealthCertDocument | EndorsedPDTHealthCertV2
- >;
+ notarisedDocument: WrappedDocument;
ttl: number;
url: string;
gpayCovidCardUrl?: string;
diff --git a/test/fixtures/v1/example_healthcert_invalid_file.json b/test/fixtures/v1/example_healthcert_invalid_file.json
deleted file mode 100644
index af8cc877..00000000
--- a/test/fixtures/v1/example_healthcert_invalid_file.json
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "version": "https://schema.openattestation.com/2.0/schema.json",
- "data": {
- "id": "9355cd12-3a2b-4827-8d86-d21aae8c3905:string:TEST001",
- "name": "aa55dbc8-dd12-4903-a3b2-480c1a32b593:string:HealthCert",
- "validFrom": "d5a28fcf-7041-4c5c-9090-dc4d6e08ac87:string:2020-11-20",
- "fhirVersion": "4d483393-f615-4873-82b6-b918e5409e56:string:4.0.1",
- "fhirBundle": {
- "resourceType": "2ee47618-18f6-4f6a-b414-33f2f54eb765:string:Bundle",
- "type": "9a3d5cd6-6266-4b58-ae10-f48f90670226:string:collection",
- "entry": [
- {
- "resourceType": "abe4be52-f701-476f-8273-97543cb85b1d:string:Patient",
- "extension": [
- {
- "url": "635e5434-cd98-4dd8-907d-e2f984c09545:string:http://hl7.org/fhir/StructureDefinition/patient-nationality",
- "code": {
- "text": "da20bb5d-4fa9-4f97-a273-41548edec3e8:string:SG"
- }
- }
- ],
- "identifier": [
- {
- "type": "1d370be4-9de5-4efb-9551-ef0867dc79a5:string:PPN",
- "value": "701f0ea6-d3d5-4dd9-a4d1-a9f1b06e01fe:string:E7831177G"
- }
- ],
- "name": [
- {
- "text": "8e965097-44b6-435a-aa3f-ddde2e9f1382:string:Tan Chen Chen"
- }
- ],
- "gender": "ae8fc798-634c-4f84-ba69-238dee70308d:string:female",
- "birthDate": "8387329d-486b-4aae-ba45-45ec519ec03f:string:1990-01-15"
- },
- {
- "resourceType": "68a64f2f-d21b-45ea-ae65-6179f382e6b4:string:Specimen",
- "type": {
- "coding": [
- {
- "system": "2fbb2e36-0d18-4311-a813-03a87c56446f:string:http://snomed.info/sct",
- "code": "300459b5-e0ef-4c49-b0dd-2236881fa062:string:258500001",
- "display": "363717a4-2aae-4272-98d3-480e965ae2ed:string:Nasopharyngeal swab"
- }
- ]
- },
- "collection": {
- "collectedDateTime": "cdf85375-93d8-4b92-b3f0-bb53ee9e34b0:string:2020-09-27T06:15:00Z"
- }
- },
- {
- "specimen": {
- "reference": "74440c51-b7e7-4a54-9672-28f364b105cf:string:urn:uuid:bbbb1321-4af5-424c-a0e1-ed3aab1c349d"
- },
- "performerReference": [
- {
- "reference": "4e2353ea-0f85-40c7-ad52-b55ecf0dcef7:string:urn:uuid:dddd1321-4af5-424c-a0e1-ed3aab1c349d"
- },
- {
- "reference": "34e97cb6-2300-4e3f-847b-fcdd21b6d582:string:urn:uuid:eeee1321-4af5-424c-a0e1-ed3aab1c349d"
- }
- ],
- "resourceType": "9846e6ce-53cb-4c44-9c7c-67927708a988:string:Observation",
- "identifier": [
- {
- "value": "01571165-7a4a-4145-bb9b-1f55e3c9ec50:string:123456789",
- "type": "70bcdafd-60c2-4c6b-a199-1ff8f2b8d0cc:string:ACSN"
- }
- ],
- "code": {
- "coding": [
- {
- "system": "9412e2fa-6b9b-4a51-80c0-326743b8baeb:string:http://loinc.org",
- "code": "420a0c0c-4258-471e-bfcb-14b3ad0bfdc8:string:94531-1",
- "display": "9f9e7c83-fbf8-4124-8d0b-f202fb620482:string:Reverse transcription polymerase chain reaction (rRT-PCR) test"
- }
- ]
- },
- "valueCodeableConcept": {
- "coding": [
- {
- "system": "a529313b-7dfc-48c1-82b1-beee343e3ac9:string:http://snomed.info/sct",
- "code": "140a1908-7933-4579-9b7a-d90f99f3c79a:string:260385009",
- "display": "8604525b-f552-4716-b893-c007ff0adecb:string:Negative"
- }
- ]
- },
- "effectiveDateTime": "5db9e744-7c36-4223-927d-37d6cbfa895a:string:2020-09-28T06:15:00Z",
- "status": "808b80b2-2bf7-41e9-9d08-7694c94a8c56:string:final",
- "performer": {
- "name": [
- {
- "text": "fdbe10b0-7fce-4c76-8c0e-c85315fed9be:string:Dr Michael Lim"
- }
- ]
- },
- "qualification": [
- {
- "identifier": "0fdab35a-fc07-4a17-a04d-dca8e305a67c:string:MCR 123214",
- "issuer": "02488cc8-5e22-4d4a-8228-d0bca2df02e4:string:MOH"
- }
- ]
- },
- {
- "resourceType": "8e949420-cca2-48f7-9858-1d53cdc2e64e:string:Organization",
- "name": "c4b19850-546c-46ab-a9ae-e669c043f795:string:MacRitchie Medical Clinic",
- "type": "0d0e454e-bf17-4d45-ac19-bd85353f640a:string:Licensed Healthcare Provider",
- "endpoint": {
- "address": "46370e33-7c68-4692-91ef-08af3e49f760:string:https://www.macritchieclinic.com.sg"
- },
- "contact": {
- "telecom": [
- {
- "system": "99656a02-4e37-4e0b-827f-6b8996c9e211:string:phone",
- "value": "7b275776-4bee-4a76-a489-c29e2288707f:string:+6563113111"
- }
- ],
- "address": {
- "type": "4bc72b01-1d00-4adf-8b81-b915b5c82745:string:physical",
- "use": "d30fd7cc-a8aa-4e1e-adce-e1d2cc9446ab:string:work",
- "text": "ffaa5d83-3488-41ab-b741-f4fb0d10caf8:string:MacRitchie Hospital Thomson Road Singapore 123000"
- }
- }
- },
- {
- "resourceType": "1f477ccc-4ff7-4df3-aa05-3d977b2100f7:string:Organization",
- "name": "d5dbe3b0-bc05-4d39-a673-4be17ec42929:string:MacRitchie Laboratory",
- "type": "36919db1-047a-4f4a-af44-4a4a37dd8ed4:string:Accredited Laboratory",
- "contact": {
- "telecom": [
- {
- "system": "cd2038f4-549e-41b2-8914-181342ad08b9:string:phone",
- "value": "eb5513b2-bc7d-4e2d-b3a8-94ad21169b7c:string:+6562711188"
- }
- ],
- "address": {
- "type": "42085642-6fa9-4c9e-9e7f-94427d85d7c1:string:physical",
- "use": "ccc9b053-0ae0-43d7-8ca6-a93808828aef:string:work",
- "text": "7389b950-89b6-4924-9f69-1388dd33def1:string:2 Thomson Avenue 4 Singapore 098888"
- }
- }
- }
- ]
- },
- "issuers": [
- {
- "id": "a9e8c85a-cd34-4cd7-b55c-f7e12d37772e:string:did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830",
- "revocation": {
- "type": "919375fd-1edb-411e-a3e0-03bc6a80e971:string:NONE"
- },
- "name": "2cc9820c-fc70-43e9-82e6-4452923d8020:string:SAMPLE CLINIC",
- "identityProof": {
- "type": "c8634d5d-663b-4486-bcca-c6f1a9155455:string:DNS-DID",
- "location": "20063e56-881f-4060-a07d-d25074f20cc7:string:donotverify.testing.verify.gov.sg",
- "key": "3b48a5b2-1084-4cbe-9b8b-b47fb89f255d:string:did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830#controller"
- }
- }
- ],
- "logo": "17109506-9dfd-4c13-92fc-cae2f98c35ad:string:data:image/png;base64,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",
- "$template": {
- "name": "5492a3fa-6631-483d-93b6-9f348748feb4:string:HEALTHCERT",
- "type": "af63ff92-df8d-41a0-ba22-2f859e1c292c:string:EMBEDDED_RENDERER",
- "url": "7698b266-6270-4008-bd73-4658c117f1cd:string:https://moh-healthcert-renderer.netlify.app/"
- }
- },
- "signature": {
- "type": "SHA3MerkleProof",
- "targetHash": "99bed561d58419f48aa5a12acd83a3db9037917ceb19b6949623ef16b0b033af",
- "proof": [],
- "merkleRoot": "99bed561d58419f48aa5a12acd83a3db9037917ceb19b6949623ef16b0b033af"
- },
- "proof": [
- {
- "type": "OpenAttestationSignature2018",
- "created": "2021-03-21T03:09:53.089Z",
- "proofPurpose": "assertionMethod",
- "verificationMethod": "did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830#controller",
- "signature": "0x0fc4e0e82f2423c42c58eb4874070cf8fb68d5a17e39836341b30ca4b323fba942f0763902c4b5f1ddd79e7257128dc827a833f896cfb07025b722de3e96d1651b"
- }
- ]
diff --git a/test/fixtures/v1/example_healthcert_without_everything_multi_unwrapped.json b/test/fixtures/v1/example_healthcert_without_everything_multi_unwrapped.json
deleted file mode 100644
index 2ff78717..00000000
--- a/test/fixtures/v1/example_healthcert_without_everything_multi_unwrapped.json
+++ /dev/null
@@ -1,172 +0,0 @@
-{
- "id": "TEST001",
- "name": "HealthCert",
- "validFrom": "2020-11-20",
- "fhirVersion": "4.0.1",
- "fhirBundle": {
- "resourceType": "Bundle",
- "type": "collection",
- "entry": [
- {
- "resourceType": "Patient",
- "extension": [
- {
- "url": "http://hl7.org/fhir/StructureDefinition/patient-nationality",
- "code": {
- "text": "SG"
- }
- }
- ],
- "identifier": [
- {
- "type": "PPN",
- "value": "E7831177G"
- }
- ],
- "name": [
- {
- "text": ["Tan Chen Chen"]
- }
- ]
- },
- {
- "resourceType": "Specimen",
- "type": {
- "coding": [
- {
- "system": "http://snomed.info/sct",
- "code": "258500001"
- }
- ]
- }
- },
- {
- "resourceType": "Observation",
- "identifier": [
- {
- "value": "123456789",
- "type": "ACSN"
- }
- ],
- "code": {
- "coding": [
- {
- "system": "http://loinc.org",
- "display": "Reverse transcription polymerase chain reaction (rRT-PCR) test"
- }
- ]
- },
- "valueCodeableConcept": {
- "coding": [
- {
- "system": "http://snomed.info/sct",
- "code": "260385009",
- "display": "Negative"
- }
- ]
- },
- "effectiveDateTime": "2020-09-28T06:15:00Z",
- "status": "final",
- "performer": {
- "name": [
- {
- "text": null
- }
- ]
- }
- },
- {
- "resourceType": "Observation",
- "identifier": [
- {
- "value": "123456789",
- "type": "ACSN"
- }
- ],
- "code": {
- "coding": [
- {
- "system": "http://loinc.org",
- "display": "Reverse transcription polymerase chain reaction (rRT-PCR) test"
- }
- ]
- },
- "valueCodeableConcept": {
- "coding": [
- {
- "system": "http://snomed.info/sct",
- "code": "260385009",
- "display": "Negative"
- }
- ]
- },
- "effectiveDateTime": "2020-09-28T06:15:00Z",
- "status": "final",
- "performer": {
- "name": [
- {
- "text": null
- }
- ]
- }
- },
- {
- "resourceType": "Organization",
- "name": "MacRitchie Medical Clinic",
- "endpoint": {
- "address": "https://www.macritchieclinic.com.sg"
- },
- "contact": {
- "telecom": [
- {
- "system": "phone",
- "value": "+6563113111"
- }
- ],
- "address": {
- "type": "physical",
- "use": "work",
- "text": "MacRitchie Hospital Thomson Road Singapore 123000"
- }
- }
- },
- {
- "resourceType": "Organization",
- "type": "Accredited Laboratory",
- "contact": {
- "telecom": [
- {
- "system": "phone",
- "value": "+6562711188"
- }
- ],
- "address": {
- "type": "physical",
- "use": "work",
- "text": "2 Thomson Avenue 4 Singapore 098888"
- }
- }
- }
- ]
- },
- "issuers": [
- {
- "id": "did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830",
- "revocation": {
- "type": "NONE"
- },
- "name": "SAMPLE CLINIC",
- "identityProof": {
- "type": "DNS-DID",
- "location": "donotverify.testing.verify.gov.sg",
- "key": "did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830#controller"
- }
- }
- ],
- "logo": "data:image/png;base64,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",
- "$template": {
- "name": "HEALTHCERT",
- "type": "EMBEDDED_RENDERER",
- "url": "https://moh-healthcert-renderer.netlify.app/"
- }
-}
diff --git a/test/fixtures/v1/example_healthcert_without_everything_multi_wrapped.json b/test/fixtures/v1/example_healthcert_without_everything_multi_wrapped.json
deleted file mode 100644
index a98fb78d..00000000
--- a/test/fixtures/v1/example_healthcert_without_everything_multi_wrapped.json
+++ /dev/null
@@ -1,192 +0,0 @@
-{
- "version": "https://schema.openattestation.com/2.0/schema.json",
- "data": {
- "id": "c4d94541-82df-4b1a-b768-fdefd7ceeaa8:string:TEST001",
- "name": "478cd436-2467-46d2-86d4-1c4c03613b87:string:HealthCert",
- "validFrom": "29af7db1-cb21-48d4-9778-dd5721bb2f11:string:2020-11-20",
- "fhirVersion": "cf62743e-59ad-405c-abc3-1ff4f32e9937:string:4.0.1",
- "fhirBundle": {
- "resourceType": "ae97701f-c893-4c6d-b8f1-3f80460a0e97:string:Bundle",
- "type": "6f5d0a88-9cb7-4acf-87d2-f2c18a971707:string:collection",
- "entry": [
- {
- "resourceType": "a0cd36fb-068b-4ab8-b45e-e92d1b2bba0d:string:Patient",
- "extension": [
- {
- "url": "31b0e446-1d4e-42d8-8f84-9ce0d130ed73:string:http://hl7.org/fhir/StructureDefinition/patient-nationality",
- "code": {
- "text": "21185196-64d2-4c3c-bb08-60262ed7f925:string:SG"
- }
- }
- ],
- "identifier": [
- {
- "type": "5792559a-f90f-4cc7-b3ba-f654838ef359:string:PPN",
- "value": "c441d297-286c-4c06-855d-6ca920932ede:string:E7831177G"
- }
- ],
- "name": [
- {
- "text": [
- "c69f1d2a-2000-4d55-8829-fe9160a766fe:string:Tan Chen Chen"
- ]
- }
- ]
- },
- {
- "resourceType": "bba7e640-898d-4f80-b9f6-8d919d4d53ff:string:Specimen",
- "type": {
- "coding": [
- {
- "system": "bcb6b20f-e8af-482e-957a-129a8abb039e:string:http://snomed.info/sct",
- "code": "9a02a815-7722-4052-9875-97ce06945e69:string:258500001"
- }
- ]
- }
- },
- {
- "resourceType": "d16e471a-2194-45ef-9be3-a8c4fd2b8655:string:Observation",
- "identifier": [
- {
- "value": "6e288515-f752-41d5-b847-4ce1df73624a:string:123456789",
- "type": "40493350-4fb9-4405-8fa8-59bf6c5ca7a4:string:ACSN"
- }
- ],
- "code": {
- "coding": [
- {
- "system": "a79158e6-4c84-4bd7-9bab-703d9316087f:string:http://loinc.org",
- "display": "a2c9c3a2-c65a-4884-a87d-b7beb2c8da20:string:Reverse transcription polymerase chain reaction (rRT-PCR) test"
- }
- ]
- },
- "valueCodeableConcept": {
- "coding": [
- {
- "system": "c3fc402d-f50a-46a8-b299-9eebab03ba5a:string:http://snomed.info/sct",
- "code": "f6644c70-f29d-41b5-84ac-f1afd9b76857:string:260385009",
- "display": "0c173291-9be4-41fa-ab20-5a64d7df8819:string:Negative"
- }
- ]
- },
- "effectiveDateTime": "2fe22ce7-95f0-4bfd-ab8d-7dfa514dd4ba:string:2020-09-28T06:15:00Z",
- "status": "f0daba22-c60a-4c92-a009-178ba467eaa1:string:final",
- "performer": {
- "name": [
- {
- "text": "6f0ed560-56f9-4718-8895-f28abf568278:null:null"
- }
- ]
- }
- },
- {
- "resourceType": "2846762d-1737-431c-919b-e32ff46e05e8:string:Observation",
- "identifier": [
- {
- "value": "c4dac41d-e92e-471e-b2bd-88720a73eab6:string:123456789",
- "type": "9f3148f1-032b-4dd6-b2db-a6fe9da2ded8:string:ACSN"
- }
- ],
- "code": {
- "coding": [
- {
- "system": "c724df16-c6bd-4ef5-acb8-77f5f845cadb:string:http://loinc.org",
- "display": "dc44be8a-c892-4221-b442-6eb11a23c5e5:string:Reverse transcription polymerase chain reaction (rRT-PCR) test"
- }
- ]
- },
- "valueCodeableConcept": {
- "coding": [
- {
- "system": "b456bc70-dba5-410f-b712-340b2a17aa58:string:http://snomed.info/sct",
- "code": "f1dd75b3-ef58-4501-8a13-8b57085fd227:string:260385009",
- "display": "61fc40ce-bb4b-493e-9805-1e1017c59519:string:Negative"
- }
- ]
- },
- "effectiveDateTime": "29eb2aa2-c106-43e3-bded-6de121601611:string:2020-09-28T06:15:00Z",
- "status": "e7a6176e-8bd0-4340-a9cb-493ce1df6664:string:final",
- "performer": {
- "name": [
- {
- "text": "c0cb5441-664a-4289-b019-308b0fc4cd33:null:null"
- }
- ]
- }
- },
- {
- "resourceType": "99505c86-077a-4973-ba69-51da030530ca:string:Organization",
- "name": "41756c65-eb50-4b45-ac27-8edda276e54d:string:MacRitchie Medical Clinic",
- "endpoint": {
- "address": "8260dd27-9ec6-4e6f-b8fb-ec62488982e2:string:https://www.macritchieclinic.com.sg"
- },
- "contact": {
- "telecom": [
- {
- "system": "879cf08c-5657-474a-b86b-88ad45a4ea0d:string:phone",
- "value": "8f422878-d7e9-4fc1-8c53-3b29d55da230:string:+6563113111"
- }
- ],
- "address": {
- "type": "d906873e-cf24-4de0-9e54-72f92d69db30:string:physical",
- "use": "c699f363-20f7-45f5-8d7e-6af065828746:string:work",
- "text": "5574da57-c967-48a7-b787-77593ae84a06:string:MacRitchie Hospital Thomson Road Singapore 123000"
- }
- }
- },
- {
- "resourceType": "ac571568-fd93-48ac-a1f3-085c16eda5cb:string:Organization",
- "type": "abcb1090-810d-4a82-a212-457de7ee5990:string:Accredited Laboratory",
- "contact": {
- "telecom": [
- {
- "system": "18e8e65d-7ad4-4f26-a3c2-bdcf87a9a7dc:string:phone",
- "value": "de008629-6bfd-4780-9f43-b5f52ff89f50:string:+6562711188"
- }
- ],
- "address": {
- "type": "2a67dabc-f901-4c8e-87a2-bcce6b355fee:string:physical",
- "use": "dfaf952e-afe6-4222-82d6-488a8cfffe8f:string:work",
- "text": "fc018edb-3a7d-4b76-82c0-000b9ead52ec:string:2 Thomson Avenue 4 Singapore 098888"
- }
- }
- }
- ]
- },
- "issuers": [
- {
- "id": "1ec4b1b8-80ea-46c6-991d-a5927f02aa3c:string:did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830",
- "revocation": {
- "type": "e54192df-7c6b-4f56-9753-cf5194b6940b:string:NONE"
- },
- "name": "c62e7499-47aa-4ce0-82af-0d7c1ad625cf:string:SAMPLE CLINIC",
- "identityProof": {
- "type": "903976ae-6ee4-49f0-8e79-828aeab787b1:string:DNS-DID",
- "location": "9ca5449b-e5ac-4635-b013-99193952db66:string:donotverify.testing.verify.gov.sg",
- "key": "79e749a9-98d6-445e-bf14-5a10154b5941:string:did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830#controller"
- }
- }
- ],
- "logo": "58edc22e-205c-4b9d-ba79-43cfd0b599bd:string:data:image/png;base64,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",
- "$template": {
- "name": "9d5dccb9-0dcd-4aeb-940e-5ee9c9bb8970:string:HEALTHCERT",
- "type": "104bfffe-c777-40e4-ab43-d6a91ca6dbd0:string:EMBEDDED_RENDERER",
- "url": "5d52460a-fdc7-4371-872c-6cb5dec6340a:string:https://moh-healthcert-renderer.netlify.app/"
- }
- },
- "signature": {
- "type": "SHA3MerkleProof",
- "targetHash": "19e79f58900ac80946badd6069cd7b75d9e760edef21321874e4050c412aa2f8",
- "proof": [],
- "merkleRoot": "19e79f58900ac80946badd6069cd7b75d9e760edef21321874e4050c412aa2f8"
- },
- "proof": [
- {
- "type": "OpenAttestationSignature2018",
- "created": "2021-03-20T02:30:45.855Z",
- "proofPurpose": "assertionMethod",
- "verificationMethod": "did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830#controller",
- "signature": "0xda8c9560e01c41c572abca1ecf356531b10fcb9fee28f47995c18284d1d638235e6fcfce9b56ce2994d29dfd7cfeb09b41e43de744304a0ca85fd604eb1ba3a41b"
- }
- ]
-}
\ No newline at end of file
diff --git a/test/fixtures/v1/example_healthcert_without_everything_unwrapped.json b/test/fixtures/v1/example_healthcert_without_everything_unwrapped.json
deleted file mode 100644
index a9c0d2b2..00000000
--- a/test/fixtures/v1/example_healthcert_without_everything_unwrapped.json
+++ /dev/null
@@ -1,148 +0,0 @@
-{
- "id": "TEST001",
- "name": "HealthCert",
- "validFrom": "2020-11-20",
- "fhirVersion": "4.0.1",
- "fhirBundle": {
- "resourceType": "Bundle",
- "type": "collection",
- "entry": [
- {
- "resourceType": "Patient",
- "extension": [
- {
- "url": "http://hl7.org/fhir/StructureDefinition/patient-nationality",
- "code": {
- "text": "SG"
- }
- }
- ],
- "identifier": [
- {
- "type": "PPN",
- "value": "E7831177G"
- }
- ],
- "name": [
- {
- "text": ["Tan Chen Chen"]
- }
- ]
- },
- {
- "resourceType": "Specimen",
- "type": {
- "coding": [
- {
- "system": "http://snomed.info/sct",
- "code": "258500001"
- }
- ]
- }
- },
- {
- "specimen": {
- "reference": "urn:uuid:bbbb1321-4af5-424c-a0e1-ed3aab1c349d"
- },
- "performerReference": [
- {
- "reference": "urn:uuid:dddd1321-4af5-424c-a0e1-ed3aab1c349d"
- },
- {
- "reference": "urn:uuid:eeee1321-4af5-424c-a0e1-ed3aab1c349d"
- }
- ],
- "resourceType": "Observation",
- "identifier": [
- {
- "value": "123456789",
- "type": "ACSN"
- }
- ],
- "code": {
- "coding": [
- {
- "system": "http://loinc.org",
- "display": "Reverse transcription polymerase chain reaction (rRT-PCR) test"
- }
- ]
- },
- "valueCodeableConcept": {
- "coding": [
- {
- "system": "http://snomed.info/sct",
- "code": "260385009",
- "display": "Negative"
- }
- ]
- },
- "effectiveDateTime": "2020-09-28T06:15:00Z",
- "status": "final",
- "performer": {
- "name": [
- {
- "text": null
- }
- ]
- }
- },
- {
- "resourceType": "Organization",
- "name": "MacRitchie Medical Clinic",
- "endpoint": {
- "address": "https://www.macritchieclinic.com.sg"
- },
- "contact": {
- "telecom": [
- {
- "system": "phone",
- "value": "+6563113111"
- }
- ],
- "address": {
- "type": "physical",
- "use": "work",
- "text": "MacRitchie Hospital Thomson Road Singapore 123000"
- }
- }
- },
- {
- "resourceType": "Organization",
- "type": "Accredited Laboratory",
- "contact": {
- "telecom": [
- {
- "system": "phone",
- "value": "+6562711188"
- }
- ],
- "address": {
- "type": "physical",
- "use": "work",
- "text": "2 Thomson Avenue 4 Singapore 098888"
- }
- }
- }
- ]
- },
- "issuers": [
- {
- "id": "did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830",
- "revocation": {
- "type": "NONE"
- },
- "name": "SAMPLE CLINIC",
- "identityProof": {
- "type": "DNS-DID",
- "location": "donotverify.testing.verify.gov.sg",
- "key": "did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830#controller"
- }
- }
- ],
- "logo": "data:image/png;base64,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",
- "$template": {
- "name": "HEALTHCERT",
- "type": "EMBEDDED_RENDERER",
- "url": "https://moh-healthcert-renderer.netlify.app/"
- }
-}
diff --git a/test/fixtures/v1/example_healthcert_without_everything_wrapped.json b/test/fixtures/v1/example_healthcert_without_everything_wrapped.json
deleted file mode 100644
index b8318cf0..00000000
--- a/test/fixtures/v1/example_healthcert_without_everything_wrapped.json
+++ /dev/null
@@ -1,168 +0,0 @@
-{
- "version": "https://schema.openattestation.com/2.0/schema.json",
- "data": {
- "id": "f76de451-4821-481a-8838-cd84310eb01b:string:TEST001",
- "name": "63d5cd2d-2b75-4c9f-abc4-4945d5e4f3ff:string:HealthCert",
- "validFrom": "8a208639-00cd-4372-a235-3158eadc6971:string:2020-11-20",
- "fhirVersion": "81a37877-9936-4c6c-a245-239db1f55bdd:string:4.0.1",
- "fhirBundle": {
- "resourceType": "e94ad12e-f7d7-4f37-9eec-0ddf22e511cf:string:Bundle",
- "type": "236154b8-7a78-4296-a466-74602ba16690:string:collection",
- "entry": [
- {
- "resourceType": "e4822ed1-ac80-4845-b373-d0093c571a45:string:Patient",
- "extension": [
- {
- "url": "63f7f676-1c13-4f89-ab5f-963b795a9977:string:http://hl7.org/fhir/StructureDefinition/patient-nationality",
- "code": {
- "text": "c0377fae-26f5-44ba-a984-01a6d71c8fd2:string:SG"
- }
- }
- ],
- "identifier": [
- {
- "type": "700c7304-6025-495d-845b-7b05eae0b9b0:string:PPN",
- "value": "b905504d-7c7b-4eb2-8359-ec44128cd76e:string:E7831177G"
- }
- ],
- "name": [
- {
- "text": [
- "4b13360f-bd65-4b5f-81d8-8e0e395fcdd3:string:Tan Chen Chen"
- ]
- }
- ]
- },
- {
- "resourceType": "f99ca7a1-90dd-463a-8c4f-6f9b48481b3d:string:Specimen",
- "type": {
- "coding": [
- {
- "system": "cfca12b0-c2af-450b-8c2e-75fba425f823:string:http://snomed.info/sct",
- "code": "8ce3e38b-7b1d-4e83-b863-42bf1122c7c0:string:258500001"
- }
- ]
- }
- },
- {
- "specimen": {
- "reference": "996ea772-8af0-444a-84ba-ff19e85b2050:string:urn:uuid:bbbb1321-4af5-424c-a0e1-ed3aab1c349d"
- },
- "performerReference": [
- {
- "reference": "00c50ac0-bedc-4c13-af55-79dbd7665515:string:urn:uuid:dddd1321-4af5-424c-a0e1-ed3aab1c349d"
- },
- {
- "reference": "1fe5aa44-7ebf-46d6-a4bd-b844680b68dd:string:urn:uuid:eeee1321-4af5-424c-a0e1-ed3aab1c349d"
- }
- ],
- "resourceType": "3b15fa01-4bc5-494b-9cc8-f57dbeaa8aa7:string:Observation",
- "identifier": [
- {
- "value": "07faa943-a12c-4f2f-b870-34777d52b28d:string:123456789",
- "type": "8fcb0a4f-5a7f-4acf-9918-f4ea8baf3738:string:ACSN"
- }
- ],
- "code": {
- "coding": [
- {
- "system": "96ad77f5-5983-4f0e-a9f0-7096a81c323d:string:http://loinc.org",
- "display": "1df06158-9240-4c23-b41c-5585de79ee7e:string:Reverse transcription polymerase chain reaction (rRT-PCR) test"
- }
- ]
- },
- "valueCodeableConcept": {
- "coding": [
- {
- "system": "e2417a38-b2a4-4c14-afe8-072518c92533:string:http://snomed.info/sct",
- "code": "89a0a028-4a37-4b90-bc9a-b3220bec703f:string:260385009",
- "display": "4a6c1a7a-d49a-4126-9ecd-365f87d73cca:string:Negative"
- }
- ]
- },
- "effectiveDateTime": "c27c0317-2463-4103-89b5-ec0e3f5fdf7c:string:2020-09-28T06:15:00Z",
- "status": "db28cce4-60fb-47e3-9e44-e1f4736bfdde:string:final",
- "performer": {
- "name": [
- {
- "text": "a049c99b-23af-4f86-8897-82f7e5bab9e9:null:null"
- }
- ]
- }
- },
- {
- "resourceType": "485e33be-4c34-431e-b32f-dd0eb1077e85:string:Organization",
- "name": "ac3816fd-de6f-446d-af58-4970fbd7e09a:string:MacRitchie Medical Clinic",
- "endpoint": {
- "address": "6a11a51b-3402-4507-9f62-2782c41e298b:string:https://www.macritchieclinic.com.sg"
- },
- "contact": {
- "telecom": [
- {
- "system": "d097c6c7-2316-4434-9894-c28df34343ed:string:phone",
- "value": "68396f0d-d4d6-4e8a-8e0b-09bf40a39968:string:+6563113111"
- }
- ],
- "address": {
- "type": "5895c97d-a407-4aa5-b934-f38ec1788007:string:physical",
- "use": "82d430ee-f74d-4fb9-a49b-59c16c6fa973:string:work",
- "text": "2f4e9358-5bce-4c04-b68c-2d71b2ef0371:string:MacRitchie Hospital Thomson Road Singapore 123000"
- }
- }
- },
- {
- "resourceType": "d153be2e-6cf1-4af8-8af6-3dd43e81d78e:string:Organization",
- "type": "c6de8ab6-bc81-4c72-8230-10631f4c16cb:string:Accredited Laboratory",
- "contact": {
- "telecom": [
- {
- "system": "432a87bc-d763-4e3c-944c-6592b12945e7:string:phone",
- "value": "ac2ffec7-da4c-4ecb-b575-e4f248db125c:string:+6562711188"
- }
- ],
- "address": {
- "type": "bcdf5904-b7dc-44ea-bcbf-d6599341adb0:string:physical",
- "use": "e76b9dca-e942-4d1e-9c8e-0a0825b9d1c7:string:work",
- "text": "eedc4634-9c81-4e91-b623-1b6ba5d307ab:string:2 Thomson Avenue 4 Singapore 098888"
- }
- }
- }
- ]
- },
- "issuers": [
- {
- "id": "b275da75-9414-4f7c-a605-935cf83b2e17:string:did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830",
- "revocation": {
- "type": "21749900-1416-409f-8ea1-fb32edca6579:string:NONE"
- },
- "name": "4bbdc600-b091-4c95-b106-a1fac029d2d5:string:SAMPLE CLINIC",
- "identityProof": {
- "type": "1543dbe9-166f-432d-b007-e37405c8f744:string:DNS-DID",
- "location": "af4c3b4d-ece8-4da7-948e-94f4e25a61a2:string:donotverify.testing.verify.gov.sg",
- "key": "d4ce0ecd-8089-4841-a5dc-5b2b1de7aafd:string:did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830#controller"
- }
- }
- ],
- "logo": "a806893f-20a7-46d0-b962-134b6bee43dd:string:data:image/png;base64,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",
- "$template": {
- "name": "a89ad816-e22e-4a79-afd6-a457d0b5f7d5:string:HEALTHCERT",
- "type": "1281323a-3079-4a92-b630-23386c9788a4:string:EMBEDDED_RENDERER",
- "url": "ecffb2c3-c513-4a66-b801-21a824026f2d:string:https://moh-healthcert-renderer.netlify.app/"
- }
- },
- "signature": {
- "type": "SHA3MerkleProof",
- "targetHash": "a29cde639d7695f1d26bec5e7a33cf38b6cfd023b6682134453477e9be2fe681",
- "proof": [],
- "merkleRoot": "a29cde639d7695f1d26bec5e7a33cf38b6cfd023b6682134453477e9be2fe681"
- },
- "proof": [
- {
- "type": "OpenAttestationSignature2018",
- "created": "2021-03-20T02:31:05.252Z",
- "proofPurpose": "assertionMethod",
- "verificationMethod": "did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830#controller",
- "signature": "0x3599c3f25a3bf8d592a7af746a7c7ee2adb345d1bf1a3cdb6e109453e3be8cae3e8fad0e6f599e9044607448cc014e25a365a3d28bcbddb2ceaee6cd69540b5c1b"
- }
- ]
-}
\ No newline at end of file
diff --git a/test/fixtures/v2/pdt_pcr_notarized_with_nric_unwrapped.json b/test/fixtures/v2/pdt_pcr_notarized_with_nric_unwrapped.json
index 70be45f9..62e4e7be 100644
--- a/test/fixtures/v2/pdt_pcr_notarized_with_nric_unwrapped.json
+++ b/test/fixtures/v2/pdt_pcr_notarized_with_nric_unwrapped.json
@@ -1,5 +1,5 @@
{
- "id": "c5ad19bb-403c-4b52-971d-3f01e87883e3",
+ "id": "3a21794e-0abb-46ae-91be-f8799818d7b0",
"version": "pdt-healthcert-v2.0",
"type": "PCR",
"validFrom": "2021-08-24T04:22:36.062Z",
@@ -42,7 +42,7 @@
},
"value": "E7831177G"
},
- { "id": "NRIC-FIN", "value": "S9098989Z" }
+ { "id": "NRIC-FIN", "value": "S****989Z" }
],
"name": [{ "text": "Tan Chen Chen" }],
"gender": "female",
@@ -283,14 +283,15 @@
"url": "https://healthcert.renderer.moh.gov.sg/"
},
"notarisationMetadata": {
- "reference": "c5ad19bb-403c-4b52-971d-3f01e87883e3",
- "notarisedOn": "2021-09-27T08:57:59.883Z",
+ "reference": "3a21794e-0abb-46ae-91be-f8799818d7b0",
+ "notarisedOn": "2021-12-28T07:21:44.562Z",
"passportNumber": "E7831177G",
- "url": "https://action.openattestation.com/?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fapi.storage.staging.notarise.io%2Fdocument%2Fdc65dc7d-05a3-4895-ad80-8dc4a90add1f%22%2C%22permittedActions%22%3A%5B%22VIEW%22%2C%22STORE%22%5D%2C%22redirect%22%3A%22https%3A%2F%2Fwww.verify.gov.sg%2Fverify%22%7D%7D#%7B%22key%22%3A%2210d5995597b68acab3940c53d7433d2a4e1a4c231b67f99e2847cb4b1781098e%22%7D",
+ "url": "https://www.verify.gov.sg/verify?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fapi-vaccine.storage.staging.notarise.io%2Fdocument%2F44409930-70b6-4ab7-94be-86cf57c9ed87%22%2C%22permittedActions%22%3A%5B%22VIEW%22%2C%22STORE%22%5D%2C%22redirect%22%3A%22https%3A%2F%2Fwww.verify.gov.sg%2Fverify%22%7D%7D#%7B%22key%22%3A%2252ae6dafd2ce6f818ccb7d893f4fb58416453f42c4624a9c6a98abf0760f2119%22%7D",
"signedEuHealthCerts": [
{
"type": "PCR",
- "qr": "HC1:6BFK%GA 9HWRH23MLBCFGCFO0WG4Y5XHB1RF%T70GR5QUN87MU6N%4P+JWCK:OJDQ4/M2P+ME2SMMG3SA23V060M$R.KMZ24LES1GO8+0DE2P.5VIHJGK%0I3UPSEHSF5$MI0A7-YK/AUKDUA3D:3K.KJ:6WYCTXRR*/1A5K*+JAKT%2EMQD0AFD T .PM2K 034PV23N MLS EI%TI/AQDSB1ADYTRUMF%EKJ0GDJ83U Q9179 ZTP5VN7O*L92Z3N30 NQJ84D$CA+68ON7+O:RIKQSJ3D.G8L8GNAKMD6D4EQTPX5B.*3V8HI7AYIBM5VB+QJPNPSFZSS-/4+ESBT5+ B940262*32QATB7C1YQYNE500O13TROMGGE45Y.I-I2F.L%Q25YQAV2B$AS87ME7K9NYRL:/8XXSCPS/9L:9ER537L86WOPM5-B6DOJIQ6O0NN7A1PFJ.T1%OTX9E/T 9J7.FEAKFJM:1NWYVBTR6YS ADB7R:CNSUDV D+3QPDD%MMPPJUILKQBWXLHZAN-JLP9XE531BHHJXVDA*E3EP$7A:HC7*C XKE K8WBYQ7+N6NLT2%AIHIP 6+NEXT5DTAKSOFKH9/6O*D5116$HFYI%E6T%BBKEPN9.E9FUP54ITFWYJMR2PQ+T367Z6CI4OLX28PLA*NZ2S-ZHEHAT:FL74Z:V+7KRWQO1U6JH0X899ULEQ/I2R:5B.8T1JQ4L:3K VM-7JR%NM:TK2N:0B-J1GPPYLHB1EEVSI/9 X3Q 0.VD6D8$XQCMH:EONXOXSADLVY$8S1T981C65QE6-MQ6T6W:H$*6S9W5ZSC$RJV8ODT427HMBKF73$RL-6RS28-B/CMOW80*TFAE$D2L*G5UKZGDAMEMVHPA2GV287PIIUNBQF.J4JF-$THLF$RMW9E1L6N/PMI5GVH-:07SGML07XFNX60K7H.VEPAS/PBYQW.6LX972DUNM.YP1JP912OR9Y5PI6DWAGNOP1LUV8PNGVZJ88.KTZGIWSHNG67UX31Y0E0PVSDFBRVPN0TCIJUM$TFX9W7:3TB24KNSY4LIFDIO%1C%0W+.U +JS6GN9W01U-184KDV/VWAT.EUS%FK+DF$TI6P1JTZBSU0EHAW*4W829W5ECQ7Q0RTVNT-FQYV47E3U14RS51"
+ "qr": "HC1:6BFK%G6 9$P3743BJR6UGEKEOQ68U6B/Q.JLIRLHTTLIDU1UJPTMP1K.C%CQKDJS/0-PLK5D5%P56FFQD54D3IDKJFNDW4VC0P0N-GIZNAKH5 7-32GB0C8GN1A N0U2KHHJ1BR1EHNTU+MU62R8+7*1WY.NCXLV.TK-G:9U$3891PE4HZ177WD*1F1GIN.UA6M9WRLQ81GWA:FP7WT38NWB42331UW3G9NH3SEM3KP/TRXH%R2/9NFXJ$.M4UG 7LW2AZE0Q0N-EF95L+U7S%QT32%2CZ.BQ5R6/4FPFY62970C103WAUXU/MAWMTSJTAO0.4JXZ66CFX-ON$0E AC8WKT0/$HTHOEY0C:0-61KUF3WV1M6MK97$GYB7SDBT9DUSUEF5T2J%HTHT82G7NLJ1HJQ4QL7QFM7-:A9K6-XSL0I$XSPCMKXD4K09PGQ-99.T6G8FIOFAGERK%BM3-8ZBK Q0D*FW12OMVQ5MNCBQ.JG0W*6UT-C4Q0WGE4KRI2NA30/XU% R1+HK.CNHCRJ4DYAKP9BTUVDCR-GLJEGH65Y5E-DMI3SJAX+H.%PL360GK21B%AQ9IL6.U%Q50OLE0Q5BJ+RC1U2I60C C%TIXI8*BCI$KDTC 7IZTL82M995EKI7SMCSII:75YM6S5940XDO4A06+4::N9VM6-ABIIJNL+RJDFA8IP1%D S7R7HSSPAOKM57%PLCMG.%FK7GW$Q$.ICOOM0TK-C0QL7VLY9M4*MPZ6:Q5AV5BKK:/I:MDHRTD3FKDATDMF7BN/TNQNA%SI97 XL8$PBGFT4CCOM4ANKKQ-KGCSPL%PTDB .I97D5MT2-CW$URHKZHJ6WC ZU- 2/KTLNC6A13D4R44H90RZP6P02D9X7JB2I:FHXZFT.33PKTJ9BR8/:L13MSFHYN9/VO..U5A1P38G0P7PMAMB:-8G4G9LLIRUW-QYX4 7U: TQ90./KD+TI.V1KCOLE0PC%KSOR6FQ5J%R$CUFTE*V4ZIMQXJNBP7HPI2I7Y5EYBMQAWZB-YFTLANIN2+MTI4*TN/BOU*O.REN4K59VJUKV4C4RV..9O$UJNO%XS22WZWVWHDO4PUXM/PFFNRI8IA2AGLV.UNJ%3-HFIKHP9PS3O*DWB4S9WV08NG6EHLL$2SPCE106J$Q22",
+ "expiryDateTime": "2022-01-04T07:21:44.143Z"
}
]
},
@@ -299,7 +300,7 @@
{
"filename": "healthcert.txt",
"type": "text/open-attestation",
- "data": "eyJ2ZXJzaW9uIjoiaHR0cHM6Ly9zY2hlbWEub3BlbmF0dGVzdGF0aW9uLmNvbS8yLjAvc2NoZW1hLmpzb24iLCJkYXRhIjp7ImlkIjoiNzY5MzcxMDMtNzdlZi00N2MxLTk5MTItYmI5MmRjNDgyN2VhOnN0cmluZzpjMjM1NmUzYi05MDA5LTQyMjAtYTFjYy0xYWY4ZDM0MjBkYWQiLCJ2ZXJzaW9uIjoiNzFhNWUzOTgtY2FmMi00NDQ4LTg2NzQtMTAwYzgxNGZkNzBhOnN0cmluZzpwZHQtaGVhbHRoY2VydC12Mi4wIiwidHlwZSI6IjNkZWVkNzExLTJiNGMtNDE2ZC04YTBmLWMyMTA1MzQwMDdmODpzdHJpbmc6UENSIiwidmFsaWRGcm9tIjoiZDUwMDhmMGItOGM1NC00YzQ1LTk5ZGEtYjE4NzkxY2ViMjY2OnN0cmluZzoyMDIxLTA4LTI0VDA0OjIyOjM2LjA2MloiLCJmaGlyVmVyc2lvbiI6ImFkNzdjYjEyLTNlZjgtNGZjZi04MmVjLTJkOTYyYTlkZDQ4NDpzdHJpbmc6NC4wLjEiLCJmaGlyQnVuZGxlIjp7InJlc291cmNlVHlwZSI6IjZjMDk3YmI0LTI3YjQtNDA0Yy1iNTViLTI3MmI4ZTkwNGMxYzpzdHJpbmc6QnVuZGxlIiwidHlwZSI6ImY1NjAwMDYyLWIwZTgtNGVmZS1hNDhkLTMxZjg0MjY5MWYwYjpzdHJpbmc6Y29sbGVjdGlvbiIsImVudHJ5IjpbeyJmdWxsVXJsIjoiZDViODc4ZDUtMTdkOS00ODcyLTk3OTctYTE2MTRhM2Y0YzE3OnN0cmluZzp1cm46dXVpZDpiYTdiN2M4ZC1jNTA5LTRkOWQtYmU0ZS1mOTliNmRlMjllMjMiLCJyZXNvdXJjZSI6eyJyZXNvdXJjZVR5cGUiOiIzYWM5NmRlOS0yNDQxLTRkMzItYmFlNS04ZGNiYjBkMjgyZWU6c3RyaW5nOlBhdGllbnQiLCJleHRlbnNpb24iOlt7InVybCI6IjRkNDE3MGU5LWFkMDMtNDkyNy1hODc1LWQyYjc0OWUyZDBmNDpzdHJpbmc6aHR0cDovL2hsNy5vcmcvZmhpci9TdHJ1Y3R1cmVEZWZpbml0aW9uL3BhdGllbnQtbmF0aW9uYWxpdHkiLCJleHRlbnNpb24iOlt7InVybCI6ImJkZTI0NTVlLTE5YjYtNDcyNi04OTg1LTRlOGVhNWUxYjU1NTpzdHJpbmc6Y29kZSIsInZhbHVlQ29kZWFibGVDb25jZXB0Ijp7InRleHQiOiJhMmM3YTA0My0xOWY2LTQxZmEtOGMxOS1lNWM2Y2E3NDAyNzk6c3RyaW5nOlBhdGllbnQgTmF0aW9uYWxpdHkiLCJjb2RpbmciOlt7InN5c3RlbSI6IjhhZDU2NDY3LWNiMzMtNDBlYy1iNTIxLWE3MTIzMWVhMGU1NzpzdHJpbmc6dXJuOmlzbzpzdGQ6aXNvOjMxNjYiLCJjb2RlIjoiYjQ0MmFiNTQtZGM4NC00MGNmLWE0MmMtYzc2MmJhMTg0MTY5OnN0cmluZzpTRyJ9XX19XX1dLCJpZGVudGlmaWVyIjpbeyJpZCI6IjRiZTk4ZGFiLWJjZWYtNGQ2MS04ZDY2LTNiY2M2ZjBiZmIzYjpzdHJpbmc6UFBOIiwidHlwZSI6eyJjb2RpbmciOlt7InN5c3RlbSI6IjI4OTIyNGRmLTI0ZmItNDgxZi04OTM0LTVhYTVkNGIxNmVmMzpzdHJpbmc6aHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS92Mi0wMjAzIiwiY29kZSI6ImZmMGUwOTJiLTNkOWItNDE3Ni04YjZkLTMyMGEyOTVhZDliYzpzdHJpbmc6UFBOIiwiZGlzcGxheSI6ImU5NmIxNjQ0LTg0Y2UtNDlkYS04NWRkLTQ2YzI1NjcxYWNjMzpzdHJpbmc6UGFzc3BvcnQgTnVtYmVyIn1dfSwidmFsdWUiOiIzMTQ4YWY2Yi0xMThmLTQ5ZWEtOWQzOS1hODBlYzljMzhjMGI6c3RyaW5nOkU3ODMxMTc3RyJ9LHsiaWQiOiI5NGUzNDk5ZS04YWU4LTRiZjctODgxMS0wZGMyMGRmMTYwOTQ6c3RyaW5nOk5SSUMtRklOIiwidmFsdWUiOiI2MTJjNDEyMC1hM2EwLTQ0MWQtOTFmMy1jNjUwYjlhM2U1MTI6c3RyaW5nOlM5MDk4OTg5WiJ9XSwibmFtZSI6W3sidGV4dCI6IjE5YjhlMDI0LWMwYzAtNDQ0NS1iMTE3LTVjMjY4ZmFmYzFlZTpzdHJpbmc6VGFuIENoZW4gQ2hlbiJ9XSwiZ2VuZGVyIjoiY2Q5ZTE0MWQtYTZlYi00ZDk4LTk3M2QtZDYwMTczNWUzNTI4OnN0cmluZzpmZW1hbGUiLCJiaXJ0aERhdGUiOiI2NTNhYmFjOS0yMjUxLTQzY2YtOWRiYy1lNWM2Nzg2M2U3M2U6c3RyaW5nOjE5OTAtMDEtMTUifX0seyJmdWxsVXJsIjoiZTQyZDQwY2UtOTY3Yi00YTEyLTkzMDktZWU1MmU2MGNhM2U0OnN0cmluZzp1cm46dXVpZDo3NzI5OTcwZS1hYjI2LTQ2OWYtYjNlNS0zNmE0MmVjMjQxNDYiLCJyZXNvdXJjZSI6eyJyZXNvdXJjZVR5cGUiOiI3YTQzMjgxMS1jMTVhLTQ3MDQtYjA2Yy0yNzUzYTYzOTE1MjY6c3RyaW5nOk9ic2VydmF0aW9uIiwic3BlY2ltZW4iOnsidHlwZSI6ImU0YzE2NDJlLTFhMTAtNGY5Zi1hYWU2LWUwNjU3YjJkZjU4MDpzdHJpbmc6U3BlY2ltZW4iLCJyZWZlcmVuY2UiOiIzMTY0YzVmZi1jOWM1LTQxZDUtYmYzNy0wZDNhYjEwMTI1MTE6c3RyaW5nOnVybjp1dWlkOjAyNzViZmFmLTQ4ZmItNDRlMC04MGNkLTljNTA0ZjgwZTZhZSJ9LCJwZXJmb3JtZXIiOlt7InR5cGUiOiI1OTJjZDVhMi1kNmE0LTRhODctODNjNi1iMmQ1YTU5Y2E1YzM6c3RyaW5nOlByYWN0aXRpb25lciIsInJlZmVyZW5jZSI6IjE2MTU5MTljLTIxMWUtNDc2ZS05NjU2LTdkNzkyNGQyYzE5NTpzdHJpbmc6dXJuOnV1aWQ6M2RiZmYwZGUtZDRhNC00ZTFkLTk4YmYtYWY3NDI4YjhhMDRiIn0seyJpZCI6ImExZDhkMDRmLWI4ZTQtNDY4Yy1hOTQzLWQ0OWZkNWVhYmZkNDpzdHJpbmc6TEhQIiwidHlwZSI6ImM1MzNkNjg3LTdkMmYtNDZhOC04OGM1LTNlYWIxZDBiOTUzNjpzdHJpbmc6T3JnYW5pemF0aW9uIiwicmVmZXJlbmNlIjoiODEyYTliYjUtYTgwMS00YjdlLWJjMWEtMGQ2NzUyMGVhNmY5OnN0cmluZzp1cm46dXVpZDpmYTIzMjhhZi00ODgyLTRlYWEtOGMyOC02NmRhYjQ2OTUwZjEifSx7ImlkIjoiOTk5M2I0OGYtOTQ4Yy00NzJkLWFjM2EtYzhjZjQxMTFlNGNjOnN0cmluZzpBTCIsInR5cGUiOiIwZjhjMjQ2NS04ZjgyLTQ1YmUtYTNlNC1kNjk2NDdlNmE5MzI6c3RyaW5nOk9yZ2FuaXphdGlvbiIsInJlZmVyZW5jZSI6ImQ5MTZmM2JmLTdjZDEtNDg1Ni05NDY2LWIxYzY3MWU0ZTU1ZTpzdHJpbmc6dXJuOnV1aWQ6ODM5YTdjNTQtNmI0MC00MWNiLWIxMGQtOTI5NWQ3ZTc1Zjc3In1dLCJpZGVudGlmaWVyIjpbeyJpZCI6IjM5OTYxMGFiLTNjOTItNDZjNC05MjA0LTkwNmMzMzM0YzU3ODpzdHJpbmc6QUNTTiIsInR5cGUiOnsiY29kaW5nIjpbeyJzeXN0ZW0iOiJkNjg1MTc1NC1mMWMwLTRlNWMtYjQzMC1jMzJmMTY5YzU4MjM6c3RyaW5nOmh0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjItMDIwMyIsImNvZGUiOiJmYzNhNTM2Yy1lMGFlLTQ1ZmUtYjliOS03ZjU0ZTJmN2RkZjg6c3RyaW5nOkFDU04iLCJkaXNwbGF5IjoiNTBiZDhmYzktNDEwZS00OTEwLWIyNGYtNjFiN2I3YTI1ZjE4OnN0cmluZzpBY2Nlc3Npb24gSUQifV19LCJ2YWx1ZSI6IjdkYjJkZDFhLTg3OTYtNGEwYy05NDljLWM0YjQ3NjdmMzgwZTpzdHJpbmc6MTIzNDU2Nzg5In1dLCJjYXRlZ29yeSI6W3siY29kaW5nIjpbeyJzeXN0ZW0iOiI0NmYxNTUwYS1hMGYzLTRiYWMtOWMwYy0xOTc2NjJmNDdmZWU6c3RyaW5nOmh0dHA6Ly9zbm9tZWQuaW5mby9zY3QiLCJjb2RlIjoiNTA5MmU3MTctM2RhYi00OTIwLWFmM2EtNDA2NTE1MTRiZDZiOnN0cmluZzo4NDA1MzkwMDYiLCJkaXNwbGF5IjoiOTdiZWZkODItN2I4Yy00M2I2LThlZjMtZjFhOWU2YjQ4OGU1OnN0cmluZzpDT1ZJRC0xOSJ9XX1dLCJjb2RlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiMmI4MDdkYzUtMmZhOS00YTE1LTg4YWQtNDk4OWZkODYyNmJjOnN0cmluZzpodHRwOi8vbG9pbmMub3JnIiwiY29kZSI6ImEwYzE3ZGZhLTVhMTktNDEwYy1hZGJmLTg3ZjljMzYyZWZlMTpzdHJpbmc6OTQ1MzEtMSIsImRpc3BsYXkiOiJkNTNkZWRlNi1hYmE3LTQ4NDEtOTczMC1mNzNmOThkNDQyMjA6c3RyaW5nOlNBUlMtQ29WLTIgKENPVklELTE5KSBSTkEgcGFuZWwgLSBSZXNwaXJhdG9yeSBzcGVjaW1lbiBieSBOQUEgd2l0aCBwcm9iZSBkZXRlY3Rpb24ifV19LCJ2YWx1ZUNvZGVhYmxlQ29uY2VwdCI6eyJjb2RpbmciOlt7InN5c3RlbSI6IjI2NDU2NWVhLTg5MjgtNDhkYS04NDUzLTRhZGJlZGM0NmI4NzpzdHJpbmc6aHR0cDovL3Nub21lZC5pbmZvL3NjdCIsImNvZGUiOiJlNDg2ZjQwNi0wNWNjLTQ1MmEtOGY3OS1jMTJhOTlkMmI3NDY6c3RyaW5nOjI2MDM4NTAwOSIsImRpc3BsYXkiOiJiMmY0M2Y0YS1mOWRmLTQ2YmQtOTAzOS1lODJjZmY4OWE1NWQ6c3RyaW5nOk5lZ2F0aXZlIn1dfSwiZWZmZWN0aXZlRGF0ZVRpbWUiOiIzYzhmMDI3My01MjliLTQyYzYtYTdkMS05ZjVlMWMzMDFmYTM6c3RyaW5nOjIwMjAtMDktMjhUMDY6MTU6MDBaIiwic3RhdHVzIjoiN2NhMGJkZmQtYjRkMC00MDI1LTllMGMtYTI2OWI2ZDQ1ZTNlOnN0cmluZzpmaW5hbCJ9fSx7ImZ1bGxVcmwiOiI1NDg2M2M3NC1kZjZkLTQwMmItYmZkMS03MTQ4YWZkMTYxNjg6c3RyaW5nOnVybjp1dWlkOjAyNzViZmFmLTQ4ZmItNDRlMC04MGNkLTljNTA0ZjgwZTZhZSIsInJlc291cmNlIjp7InJlc291cmNlVHlwZSI6ImU2ZjhlZjAwLTg4OGItNDk5Yy1iMDA0LTRkMWNkZWQ3YjNmMDpzdHJpbmc6U3BlY2ltZW4iLCJ0eXBlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiMDFlNGI4YTItMTc5My00NTkwLTkyZWMtNzE0MGQ5MjhmYTc2OnN0cmluZzpodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiY29kZSI6ImY1NGI4MjE3LWNhODUtNGI1NC04YTNiLWY5OTFkZTE3ODYzYTpzdHJpbmc6MjU4NTAwMDAxIiwiZGlzcGxheSI6IjU5ZDNhOTk3LTk3ZjAtNGU0Mi04NjM0LTVkZDAwNGE1N2YzZDpzdHJpbmc6TmFzb3BoYXJ5bmdlYWwgc3dhYiJ9XX0sImNvbGxlY3Rpb24iOnsiY29sbGVjdGVkRGF0ZVRpbWUiOiIyN2U1YjIxMy0wYjI4LTQ2YmUtYTUyZi1hNDhjOTcxMTcyMGE6c3RyaW5nOjIwMjAtMDktMjdUMDY6MTU6MDBaIn19fSx7ImZ1bGxVcmwiOiJmNTc1ZmI3MC03M2MzLTRlZTYtOTRjYi1kYTM5MjNiNTkzOGU6c3RyaW5nOnVybjp1dWlkOjNkYmZmMGRlLWQ0YTQtNGUxZC05OGJmLWFmNzQyOGI4YTA0YiIsInJlc291cmNlIjp7InJlc291cmNlVHlwZSI6ImJlMGMyNTRlLTlmNjYtNDgwYy05Nzg1LWVmZTIzZDY1MGRlODpzdHJpbmc6UHJhY3RpdGlvbmVyIiwibmFtZSI6W3sidGV4dCI6ImVkYTkwN2Y5LWYxMmQtNDc1OS1iNTZjLWM5OWE3ODY5ZDZmZDpzdHJpbmc6RHIgTWljaGFlbCBMaW0ifV0sInF1YWxpZmljYXRpb24iOlt7ImNvZGUiOnsiY29kaW5nIjpbeyJzeXN0ZW0iOiJhNjU4YmFkNy02NGRiLTQ2ZjQtOTU2NS00MzA4MjUyNmRlNWQ6c3RyaW5nOmh0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjItMDIwMyIsImNvZGUiOiJiZDAxYWQwYy05OTFjLTQzNjgtYTk3YS0wYTIxODc0OTA3ZDY6c3RyaW5nOk1DUiIsImRpc3BsYXkiOiIwNjczYTgzZi04NzNiLTQ4MDQtYTdiMy03M2VhNGEwZmQ2ZTQ6c3RyaW5nOlByYWN0aXRpb25lciBNZWRpY2FyZSBudW1iZXIifV19LCJpZGVudGlmaWVyIjpbeyJpZCI6IjRkYjRlZTE3LTMyYjgtNDk4My1hZTNhLWIwM2JkZGIyZTUyNTpzdHJpbmc6TUNSIiwidmFsdWUiOiIzMTA2YWRiYi1lOWVlLTRiMmQtOGNkZi1iM2EwZjAxYjYyYmU6c3RyaW5nOjEyMzQ1NiJ9XSwiaXNzdWVyIjp7InR5cGUiOiIxMTVkNmRlNi0zNTRjLTQ2YTktYjVjYi0yY2ZiYTIwOTg3MDA6c3RyaW5nOk9yZ2FuaXphdGlvbiIsInJlZmVyZW5jZSI6ImI2YmNhNjE0LWVmZGMtNDY4My04MWYzLTQ1OGQzMjQ4OGZmZTpzdHJpbmc6dXJuOnV1aWQ6YmM3MDY1ZWUtNDJhYS00NzNhLWE2MTQtYWZkOGE3YjMwYjFlIn19XX19LHsiZnVsbFVybCI6ImY4YjFhNzI4LTc5YmYtNDJkMS1iMzRiLThmZmQ2ZTMzNmIxODpzdHJpbmc6dXJuOnV1aWQ6YmM3MDY1ZWUtNDJhYS00NzNhLWE2MTQtYWZkOGE3YjMwYjFlIiwicmVzb3VyY2UiOnsicmVzb3VyY2VUeXBlIjoiY2Y5NDEyZWQtNzM4Ny00YTIzLTk4ZTktNDIxMjRhNTVlZGZkOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiMmVlODJkNmEtMTc5Zi00YWEwLWE2YjktOTg4MzNhZmQzYWZkOnN0cmluZzpNaW5pc3RyeSBvZiBIZWFsdGggKE1PSCkiLCJ0eXBlIjpbeyJjb2RpbmciOlt7InN5c3RlbSI6IjQzZGVlMjMxLWJjYzMtNDgwMC1hMjA2LWQ4YTI0ZWI1NTFiYjpzdHJpbmc6aHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9vcmdhbml6YXRpb24tdHlwZSIsImNvZGUiOiJjZDU4YjMxZi04MWZkLTQzOGYtOGU3ZS0yYjE2YTczN2I1ZjU6c3RyaW5nOmdvdnQiLCJkaXNwbGF5IjoiMGY4M2Q0YmEtY2ZmYi00ODg1LTlhMTQtZDA0YWIxYjQ2ZTIyOnN0cmluZzpHb3Zlcm5tZW50In1dfV0sImNvbnRhY3QiOlt7InRlbGVjb20iOlt7InN5c3RlbSI6IjllMTk1ODQ1LWM2NjQtNGQzNy1hZGZmLWUxM2QzMWY4YzgyMTpzdHJpbmc6dXJsIiwidmFsdWUiOiJhNThhMDllMC00MjExLTQ4ZGYtOTQzMi00ZWZjZWViNGY3ZWI6c3RyaW5nOmh0dHBzOi8vd3d3Lm1vaC5nb3Yuc2cifSx7InN5c3RlbSI6ImJlMGEyYWI4LTNmZjYtNDBiOS05YjkwLTg1MjUyZTFmOTMyZjpzdHJpbmc6cGhvbmUiLCJ2YWx1ZSI6IjIxMTI4MDQ4LWZiNjUtNDYzNS04MDEyLTViNDRkNTMwZTkxMDpzdHJpbmc6KzY1NjMyNTkyMjAifV0sImFkZHJlc3MiOnsidHlwZSI6ImMyN2FjZGM4LTA2NTktNDE3Mi05YjU2LWE2MWU3ZjQ1MWExNDpzdHJpbmc6cGh5c2ljYWwiLCJ1c2UiOiJkNWVjODU5YS1kNzZlLTRlZWItYjE0MS00ZjUwNzliYmM2OTY6c3RyaW5nOndvcmsiLCJ0ZXh0IjoiMzFhYWNiOWYtMDc5Zi00OTdhLTgxNTUtZjFjNDNhOGZhMzk1OnN0cmluZzpNaW5pc3RyeSBvZiBIZWFsdGgsIDE2IENvbGxlZ2UgUm9hZCwgQ29sbGVnZSBvZiBNZWRpY2luZSBCdWlsZGluZywgU2luZ2Fwb3JlIDE2OTg1NCJ9fV19fSx7ImZ1bGxVcmwiOiI2OWZkNmZiYi1iMGRhLTQ3ZDktYWEyNC0zMWFjNTY1NDI4Nzg6c3RyaW5nOnVybjp1dWlkOmZhMjMyOGFmLTQ4ODItNGVhYS04YzI4LTY2ZGFiNDY5NTBmMSIsInJlc291cmNlIjp7InJlc291cmNlVHlwZSI6IjFlZjA2M2RlLTI3NmEtNDkyNS05MzUyLWNlZmM5NjM3ZWI2MDpzdHJpbmc6T3JnYW5pemF0aW9uIiwibmFtZSI6IjNmYzQ0Y2MwLWViMzQtNGY2Ny1hNzU4LTMyYjY4ZTZlZTBkNjpzdHJpbmc6TWFjUml0Y2hpZSBNZWRpY2FsIENsaW5pYyIsInR5cGUiOlt7ImNvZGluZyI6W3sic3lzdGVtIjoiN2ViNWJmOTQtNDAzMC00MTlhLWE1YTAtY2RiM2Q5NzQyNWFkOnN0cmluZzpodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL29yZ2FuaXphdGlvbi10eXBlIiwiY29kZSI6IjZhNzU3Yzc2LWNlNTQtNGVkZi05ZGE0LTlmZWFjYWFmZWFiOTpzdHJpbmc6cHJvdiIsImRpc3BsYXkiOiJlNDE0OGY3OS05Y2YxLTQ5MzctYjJkYy00MmUzYjg3MjhiYjc6c3RyaW5nOkhlYWx0aGNhcmUgUHJvdmlkZXIifV0sInRleHQiOiIyNTI2MzBjNS1jYmNlLTRiMDMtYTc0MC1kMjRhMTBhODY3MDg6c3RyaW5nOkxpY2Vuc2VkIEhlYWx0aGNhcmUgUHJvdmlkZXIifV0sImNvbnRhY3QiOlt7InRlbGVjb20iOlt7InN5c3RlbSI6ImI4YmYyYmFmLTNkMGEtNDRjOS1iYThiLTNhNGFjYzVjMGM4MTpzdHJpbmc6dXJsIiwidmFsdWUiOiJmZjc2MDc0Mi0wMDNhLTRlY2ItODY4NS0xY2Y5MDQ4YjQxZTk6c3RyaW5nOmh0dHBzOi8vd3d3Lm1hY3JpdGNoaWVjbGluaWMuY29tLnNnIn0seyJzeXN0ZW0iOiJlODI5ZTFlNi04MGMzLTRhMmUtODRlMi02NTNjYjdkYzQ4NGI6c3RyaW5nOnBob25lIiwidmFsdWUiOiIzZGNkYTAxNi1mNTI0LTRmMDgtODBmNy0xMmMyN2IwNmI4NmM6c3RyaW5nOis2NTYxMjM0NTY3In1dLCJhZGRyZXNzIjp7InR5cGUiOiJmOWM3NmIxZC1hZDg1LTQyNWYtYjRhZi01NDA5MzAxNzk1MWI6c3RyaW5nOnBoeXNpY2FsIiwidXNlIjoiNDZkODc5NzEtOGZlMy00YmNiLTkxNTAtMDIxYmQ0MjEyZWU1OnN0cmluZzp3b3JrIiwidGV4dCI6ImM3NTlhYjkwLTIwNTMtNDE1MC05M2NhLTQyNGIxNWZmNjU4MjpzdHJpbmc6TWFjUml0Y2hpZSBIb3NwaXRhbCwgVGhvbXNvbiBSb2FkLCBTaW5nYXBvcmUgMTIzMDAwIn19XX19LHsiZnVsbFVybCI6IjdmMTE3OTg4LWE1ZWUtNDA5Yy1hZmY4LTZiMmYwZWIxOThhMDpzdHJpbmc6dXJuOnV1aWQ6ODM5YTdjNTQtNmI0MC00MWNiLWIxMGQtOTI5NWQ3ZTc1Zjc3IiwicmVzb3VyY2UiOnsicmVzb3VyY2VUeXBlIjoiZGIxNmQyMGYtZjljOC00NDkwLWI1NDAtNjJiYzM4NWZlOTRhOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiMmU3Mjg0ZTEtOWVjNS00ZjU5LWE1YTAtODU3ZmYyYzE5ZWI0OnN0cmluZzpNYWNSaXRjaGllIExhYm9yYXRvcnkiLCJ0eXBlIjpbeyJjb2RpbmciOlt7InN5c3RlbSI6ImJjODViY2ZkLWY5NWEtNDVhMi1hOTg5LWQ4MzMzNGQzYTcwZDpzdHJpbmc6aHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9vcmdhbml6YXRpb24tdHlwZSIsImNvZGUiOiIzM2EzY2NmNy0wODc1LTQzYWItOWJlMC01NzRmMmRlYzQ1YjY6c3RyaW5nOnByb3YiLCJkaXNwbGF5IjoiNzY1YWQ2Y2MtMTMwMS00NTc5LTlkOWItNGNiYjM4NTI0YzllOnN0cmluZzpIZWFsdGhjYXJlIFByb3ZpZGVyIn1dLCJ0ZXh0IjoiYTQyOTUxY2MtZWIxNC00MDg4LWJlYTgtYThmZjg0MjliNzhkOnN0cmluZzpBY2NyZWRpdGVkIExhYm9yYXRvcnkifV0sImNvbnRhY3QiOlt7InRlbGVjb20iOlt7InN5c3RlbSI6IjFhNWIyMTQyLTUxNGEtNDA3Zi1iOTc5LTY3ZjJiYzI3NzMwMDpzdHJpbmc6dXJsIiwidmFsdWUiOiJjYThmZjg4Zi01MjlmLTQwZTYtODA2NC00OGQ2NTAxNzk0MzA6c3RyaW5nOmh0dHBzOi8vd3d3Lm1hY3JpdGNoaWVsYWJvcmF0b3J5LmNvbS5zZyJ9LHsic3lzdGVtIjoiNzY2YzM5YzEtYmZiMS00MjI3LTkxNTEtYTA1ZDJkNzBmM2M5OnN0cmluZzpwaG9uZSIsInZhbHVlIjoiMzUxZDFjNTUtODg0MC00OTBiLTkyYWItN2NhMjY5MzdjMTdhOnN0cmluZzorNjU2NzY1NDMyMSJ9XSwiYWRkcmVzcyI6eyJ0eXBlIjoiZDJlMDBkYmYtZGYxMy00NDQyLWFhOTYtMTg4MTRlMTdjOGNjOnN0cmluZzpwaHlzaWNhbCIsInVzZSI6IjJiMWE5N2YwLTJiMDQtNGVjYi1hMGU3LTU1NmI0MmVhMzM2ZjpzdHJpbmc6d29yayIsInRleHQiOiIzYTkxYTU5ZS1lNjUyLTRmMGEtYTNkYy00OWUwMTViNTE1NGM6c3RyaW5nOjIgVGhvbXNvbiBBdmVudWUgNCwgU2luZ2Fwb3JlIDA5ODg4OCJ9fV19fV19LCJpc3N1ZXJzIjpbeyJuYW1lIjoiYWJjZTIxYTUtOTMxYS00ODQxLWJhMWEtNzIxZTgzZmRmZDMyOnN0cmluZzpTQU1QTEUgSVNTVUVSIChETyBOT1QgVkVSSUZZKSIsImlkIjoiOWY3ZTUzMmYtNjI4OC00NDhkLWExMDktZmQ5ZjI3ZjYzNmI0OnN0cmluZzpkaWQ6ZXRocjoweEUzOTQ3OTkyOENjNEVmRkU1MDc3NDQ4ODc4MEI5ZjYxNmJkNEI4MzAiLCJyZXZvY2F0aW9uIjp7InR5cGUiOiJiYTA0ZTIzNi05OTg0LTQzOWEtYmVjMi00Y2RkNTc2ZWViMDY6c3RyaW5nOk5PTkUifSwiaWRlbnRpdHlQcm9vZiI6eyJ0eXBlIjoiNjcwYmQxNmItNWI1Ni00Mjg0LTg2N2EtNTRiNjk3YzA1ZWE1OnN0cmluZzpETlMtRElEIiwibG9jYXRpb24iOiIyMjZjZTcyZS01NzZiLTQ2ZjktYTcyMi1jMGU1Y2E4ZDEzNmE6c3RyaW5nOmRvbm90dmVyaWZ5LnRlc3RpbmcudmVyaWZ5Lmdvdi5zZyIsImtleSI6IjEwMjM1OGYyLTNkMDQtNDMwNy1hYzc3LWM1YTNmZTdiMTgzYTpzdHJpbmc6ZGlkOmV0aHI6MHhFMzk0Nzk5MjhDYzRFZkZFNTA3NzQ0ODg3ODBCOWY2MTZiZDRCODMwI2NvbnRyb2xsZXIifX1dLCIkdGVtcGxhdGUiOnsibmFtZSI6ImJkZjBiZWFlLWY4ZTEtNDRhYS1hZmUzLWYwMTE3NjUwNTM4YjpzdHJpbmc6SEVBTFRIX0NFUlQiLCJ0eXBlIjoiMDc0MjEyZmQtZjIxNC00Mzk3LThhMTYtOTQ1MWE2NjAyOGU0OnN0cmluZzpFTUJFRERFRF9SRU5ERVJFUiIsInVybCI6IjgxZDQxZGM3LWJjMDQtNDA4Ni1hNGU1LTdiNzlkNTY1Yzg5YTpzdHJpbmc6aHR0cHM6Ly9oZWFsdGhjZXJ0LnJlbmRlcmVyLm1vaC5nb3Yuc2cvIn0sIm5vdGFyaXNhdGlvbk1ldGFkYXRhIjp7InJlZmVyZW5jZSI6ImZlZjY4OTZiLTc4Y2MtNDI3MC04NmYzLTU0MTg3NDFkOGM3ZjpzdHJpbmc6YzIzNTZlM2ItOTAwOS00MjIwLWExY2MtMWFmOGQzNDIwZGFkIiwibm90YXJpc2VkT24iOiJmYjQ3M2M1Mi0zM2NjLTQ0ZTUtYmUxYy03NTA0N2IyZGFhMWU6c3RyaW5nOjIwMjEtMDgtMjRUMDU6MDk6NTkuMjk5WiIsInBhc3Nwb3J0TnVtYmVyIjoiMmUwYjlhMWUtYjYwOC00NWQyLWFlMjYtNGQwY2EyYTI1NTBkOnN0cmluZzpFNzgzMTE3N0ciLCJ1cmwiOiI1M2VjMWVhYS0xNGQ0LTQ4NTAtOTg1OC0xMzIwMDIxNGZjZTU6c3RyaW5nOmh0dHBzOi8vYWN0aW9uLm9wZW5hdHRlc3RhdGlvbi5jb20vP3E9JTdCJTIydHlwZSUyMiUzQSUyMkRPQ1VNRU5UJTIyJTJDJTIycGF5bG9hZCUyMiUzQSU3QiUyMnVyaSUyMiUzQSUyMmh0dHBzJTNBJTJGJTJGYXBpLXZhY2NpbmUuc3RvcmFnZS5zdGFnaW5nLm5vdGFyaXNlLmlvJTJGZG9jdW1lbnQlMkYxMTFkMDI3YS1lOGRjLTRlNDQtODkyNC1jNDFjZDcwN2VhYzYlMjIlMkMlMjJwZXJtaXR0ZWRBY3Rpb25zJTIyJTNBJTVCJTIyVklFVyUyMiUyQyUyMlNUT1JFJTIyJTVEJTJDJTIycmVkaXJlY3QlMjIlM0ElMjJodHRwcyUzQSUyRiUyRnd3dy52ZXJpZnkuZ292LnNnJTJGdmVyaWZ5JTIyJTdEJTdEIyU3QiUyMmtleSUyMiUzQSUyMmZhMzVkNGI3MzViNmQ1MDMyN2M5N2YwMDgyNzEyOTk5Y2ZhNjQyYmI4MzAyNWY0ODczM2U1ZjIyMzA2NmQ5NmYlMjIlN0QifSwibG9nbyI6ImUyMmRhMDkzLTY2NzgtNDI0ZC1hZTQyLTg1MTI5YzMyZWUyMjpzdHJpbmc6ZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFmUUFBQURJQ0FNQUFBQXB4K1BhQUFBQU0xQk1WRVVBQUFETXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNemVDbWlBQUFBQUVIUlNUbE1BUUwrQTd4QWduMkRQM3pCd3IxQ1BFbCtJL1FBQUJ3ZEpSRUZVZU5yc25kMTIyeW9RUnZrSElTSE4rei90eVVrOW9URUNRMWJUQmMyM2J5TnMwQjVHSURBUkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFrK0lrK0lkeDRnNU40QjlHUS9yUEE5Si9JUGZTZ3dML01FRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEd1A1WlBvUDVyN0ZKS0FmN2N1ZkJpaFBOU2tYNWhsQTl1K0RzUDdkWC9KSzFQMlZQaVNJb2ViRXJMd1ZoNVp4KzhDMVkyMll0UDBGcGY2aGRlYSttcTFXbGl4ZmVqNlJjRHhqMDlzd1hiYmVCUXBpanVnMjBhai9TRThidm81aEV1YXZBdVNLcFFmSnhURzkxZ1VyQ1Y2alNRRTBvUGtlNHd1a2U3MDVFcXBMTld4dE10U2s0anZYR2xkK3RMbHh2Vk1ObmFrRDdtRW5kWVRWV1NuVjg2MFdVWGwzNFJNeTdCZW1weUd6TjdwQWJtWEVBNmJmdkswdTMydVRGS0tWTTByMFl3MU1UY0Z2cDhpVkxQRDArOWdIUXkrN3JTZjNlZWpwMkh1RmNzbWxkaUV6MEZ6S1hmU1J3M3FlMDhYcWQ5ZFA2UUtPTm5rdTRsRzNOU2IvUkJ0S3RLdDF0dGRCSmlZYjJWSTdicmM3dGM4SVlvdEp6SFVCMGMrTytUM3JUUXVMS3NaUnFwemtUUzdkWkk0dm8rcUpuZEVHTzhFemVjeWphYzYvSVROMktPV2FVTElUL2FMZGVVbnFwZGk3VlcyK0t5YzI5RkwzczdlM2hpNUxUU2hlV1dweVdsSDRYem12V2puaU9pRk4zWVdEaXZXSTkyV3VrNWN0MkMwcDNKemw5WU42NldJNUlWL1Z5Rjg2cjFhMTdwSDVVTUMwcFgvRHdYVlU1MjRLczVZZ0RabUw0ekd6MXc4MHAzM1BqMXBNdmNpK3RjMmNGSWptaEgyZFdWZnVhVkx1TGp5OWVUemdxT3JxZXd2MHZ1bS8xS1I0KzJhNkRoNXBYTzdWOU8rczRLUkpQQUR1eE5qdGpGQ0NrL0NsdEV6Z2Z6U3RlclN2ZFpRWmVEb3l5cXhRZ3VSMWxYbUJsSS85UFNlYlpwYk9lOGJpdnQyYkZLOVlhSzRlSGU3TkxOYXRMUDNxR1lMZkw3MVJvTXZCNlh1OTZKM1RXdDlMVG9RTTV6bThZZnhiSElFU1BaWFhXL3RvdlRTbytQcUZ4TmVzd1pxak8vWDA5T3ZCZ2k5T2NIdzdsbFV1a2N2K2RpMHJuZXFmOTl1WG9LZ2xNTXdhbGw3eC9teTBtbFA1cGlWbnYzZnVaKzE5M3hucFRZTHozU2plalBMWHBPNlR0WGJ6WHBmSVVjZUpIbVBzWEFKc2JJK2FMN2Z2c3BwVnNPWDd1YWRKOUZ2dVQ2M1B4c1pBUTNVTXh5Z0x5V3ZzazYvbHVrdTQwZmI4dHRvbERGRmIxWlFRNi9tUmt2MWlXOWkxSjZDLzFhZWpBY3ZRUFZtVXQ2RkIyY24yNkp6RE80VHNhTGNXZWFUYm83SW4wNFgwODY5Nlh4VG5ya216R0NIaW1tSnBMdU5hUGk3MWYrS09rdGU1SUs5T3JTNzRpbmdQU2ZKZDFvSVNEOVowbS9oUGhCMG8rL0xkM01NR1VyU1U2OHM5eVV6WFNPM3N1aFcrQmgrSmowb3l6MnNuWnFncGN6ZDVpd3B2UnZtS2ZYcFkvUDB5ZVNmc2dIT2hsaXd0TFM3Y0JTaVIxYVpGUDMwcStCdDNmWGJLOWhRMlRyKzRyU2MrOGRmbFhDTzJsNnBZK1BJczVwRjF4czRrbWJYVkI2ejBKV1JSZEgrNkIwdzhWZW95ZGVXbFY4NHhhVUxudlgwOHZFek5uK0hKT3UrdGZUMWNTYktQTGV3dldrYy9jMS9ZdHM0U2xKK0RIcHVuc0YzMDY5WFNydzdWaFFlbDRnSE4zUXVITzhqRWsvTzhjQytVby9wWFIrdkcwTFNuL1pYeGxYeUlvYzYwUFNoZWxkd3ZkemI0SFczSTcxcE8vMHdIWXFPSXA4djQxSlQ1MlROamY1angyNGZtRTk2V0xyRzcvYnNvTTZlaENHcEo4czAvWlYzazhxblRPZFgxQjY2SE9nYjRiNUtSZnRsNTRmQzdvdnl2WlpwWHQ2Snk0bzNacWVkT3ZNVGRzbFBVaEQwcmxXeHZWTUZ0UzBQMVVPblB2V2s4NFhkYjBESVhXL2tIaU1TTGVtN3JNTUtEbXQ5SjBIbWd0Sy8zQmc3R2hnT0dMQ2dQVDhhZnAxcGRURXg0ODg2bmd0S0YyYzlPcHNnVkRiT0tDSk9RYWtpKzFWckZpK3dyaUpwZk5hL29yU2hjclcyODZqTFlzeXlmWkxsOFNFdG5NNjVqMVNMSCt3WFZHNmpjMERZSTk4NkZ1aktKblFMVjBjMU1ydzdzTzVuL2Z3d0Rma29qOWdmRDRvemh5RkFVVk1xQlJsWXJDZDBvVW5ScmtpeUV6T1BGTkxGelR6VDVWbEJYZDNPbThvemtCdE9PZERQWmtVOWs5L1BDcExrSGFyblpVZkloWE92MC82SVN2MFNPY3ZqLzFiOXR6ZmtONUczeDdlYmRJaDM0V2ZGNnRwRHJyWUs2UFVwZC80ZkpTM2JwWGFydE9KTitTUkRCWE92MGw2bTZFeloxejM1bHc5azNSTzAxV01GQlU0SDQrMjFsTWJiOFhzMHZsdllWSHAzUFVxS0NjYU9EVXNuYk5MU1I1Y1RDK2RaK3BwVmVsQ25LYTExN2VOVE5Ra1NWRmlVMnRQK1FyU09WdlpaYVVMcXd2dFBDaC9qZE1iM1JOOTlRT2tvanY4THNRUzBrL083K3RLZitOTVQ5Nk5QMFV2THZpblJtOUpuMjR3VnJiRENiR0lkRjR4VkJOSi94SlNlNlVlby9Cai85SS83RHkwUHZybkp5NW9wU0lSUlpYMGFRVUFBUHpYM2gzVUFBQ0FRQXg3WUFEL2FuRkJDTmRhbUlBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBREFtbW9lSzlIemlCNUk5RUJYbng4QUFBQUFBQUFBQUxCbUFJWktteldJbnh5T0FBQUFBRWxGVGtTdVFtQ0MiLCJhdHRhY2htZW50cyI6W3siZmlsZW5hbWUiOiJmNjNkYTlhNi1lYWQ4LTQ5MTQtYmYyZS1lMmFiMzA2ZmNkZGY6c3RyaW5nOmhlYWx0aGNlcnQudHh0IiwidHlwZSI6ImI2MDRlNjE4LTc4N2QtNGVkNy04MzkyLTljNjExOTVkMzY5ZDpzdHJpbmc6dGV4dC9vcGVuLWF0dGVzdGF0aW9uIiwiZGF0YSI6ImNkMGJlNGZiLTYxNjUtNGFhNS1iMDVmLTdlMmU4MTM1MTgwZDpzdHJpbmc6ZXlKMlpYSnphVzl1SWpvaWFIUjBjSE02THk5elkyaGxiV0V1YjNCbGJtRjBkR1Z6ZEdGMGFXOXVMbU52YlM4eUxqQXZjMk5vWlcxaExtcHpiMjRpTENKa1lYUmhJanA3SW1sa0lqb2lORGhtTXpsbU5qQXROR0l5WVMwME1HRmtMVGhrWmpBdE1USmhNVGRoWldZd09UWTNPbk4wY21sdVp6bzNObU5oWmpObU9TMDFOVGt4TFRSbFpqRXRZamMxTmkweFkySTBOMkUzTm1SbFpHVWlMQ0oyWlhKemFXOXVJam9pWm1JNE9HUXlaak10TW1RM1lTMDBOemxqTFRrMU5ERXRNbVV4WmpZMU5tWmlaalZsT25OMGNtbHVaenB3WkhRdGFHVmhiSFJvWTJWeWRDMTJNaTR3SWl3aWRIbHdaU0k2SW1RNFkyUmhZekJpTFdJMlptSXROR00zTXkxaU16TTJMVE01TXpjNVpHWTNPRGsyTnpwemRISnBibWM2VUVOU0lpd2lkbUZzYVdSR2NtOXRJam9pTVdZNU9XRmxZMkV0WXpZd1pTMDBOelk1TFdJM09HWXRNV0kxTW1FME5tUmlaR0ZoT25OMGNtbHVaem95TURJeExUQTRMVEkwVkRBME9qSXlPak0yTGpBMk1sb2lMQ0ptYUdseVZtVnljMmx2YmlJNklqVmxaVFZtTW1ZMUxUTTBNalF0TkdNeVppMDRNRFE1TFdGak56Z3lPVFE1TlRnek1UcHpkSEpwYm1jNk5DNHdMakVpTENKbWFHbHlRblZ1Wkd4bElqcDdJbkpsYzI5MWNtTmxWSGx3WlNJNkltWTNPRFkwWm1ReExUbGpOak10TkRFM1lpMDRaakJrTFdOaE56aG1aVEF4WVdOak9UcHpkSEpwYm1jNlFuVnVaR3hsSWl3aWRIbHdaU0k2SWpVMU9XWmxNV0kwTFRkbVpXVXROR0kxTnkwNVlXWmhMVFF3TkRZd1pXRmxNV1JsTmpwemRISnBibWM2WTI5c2JHVmpkR2x2YmlJc0ltVnVkSEo1SWpwYmV5Sm1kV3hzVlhKc0lqb2lPREppWVdNeU5XWXRaV1EzTkMwME4ySmpMV0UyWkRJdE9XVTNZVGRrTm1JeVpqbGpPbk4wY21sdVp6cDFjbTQ2ZFhWcFpEcGlZVGRpTjJNNFpDMWpOVEE1TFRSa09XUXRZbVUwWlMxbU9UbGlObVJsTWpsbE1qTWlMQ0p5WlhOdmRYSmpaU0k2ZXlKeVpYTnZkWEpqWlZSNWNHVWlPaUl4T0RFME1UZzJOaTA1WkRjeExUUXpOMkV0WVRnMlpTMDVORGt4Tm1SaU9EZzNZbUk2YzNSeWFXNW5PbEJoZEdsbGJuUWlMQ0psZUhSbGJuTnBiMjRpT2x0N0luVnliQ0k2SWpGaU1XTmtOR0ZsTFdZMFlUTXRORE0yWmkwNE9ERTFMVGc0TVdRM1lUTmpNemhtT0RwemRISnBibWM2YUhSMGNEb3ZMMmhzTnk1dmNtY3ZabWhwY2k5VGRISjFZM1IxY21WRVpXWnBibWwwYVc5dUwzQmhkR2xsYm5RdGJtRjBhVzl1WVd4cGRIa2lMQ0psZUhSbGJuTnBiMjRpT2x0N0luVnliQ0k2SWpJd09HVTNZelF5TFRabE5qY3ROREZsT1MwNE9UWmlMVEEzWkdZMk1XVmxOR1pqWXpwemRISnBibWM2WTI5a1pTSXNJblpoYkhWbFEyOWtaV0ZpYkdWRGIyNWpaWEIwSWpwN0luUmxlSFFpT2lJd01XVXpPRGRtWVMxa1pERmxMVFEyWXpBdE9XWTVZUzFrWmpoalpqYzJZemN4TmpRNmMzUnlhVzVuT2xCaGRHbGxiblFnVG1GMGFXOXVZV3hwZEhraUxDSmpiMlJwYm1jaU9sdDdJbk41YzNSbGJTSTZJakF3TVdJd09HWTRMV1U0WkRndE5HTm1aaTFoT1RZMkxXVTFaVFk1T0RGa1ltVmlZVHB6ZEhKcGJtYzZkWEp1T21semJ6cHpkR1E2YVhOdk9qTXhOallpTENKamIyUmxJam9pWmpOak56VTFZVE10TkRrMU5TMDBOVGM0TFRobVpqZ3RPR1F6TXpNMVl6WTVObVU0T25OMGNtbHVaenBUUnlKOVhYMTlYWDFkTENKcFpHVnVkR2xtYVdWeUlqcGJleUpwWkNJNklqQTBaalJpTW1VMUxUVXpZV1l0TkdFMk1DMWhOVGc1TFRobU5UazJaREJqTlRrNVpqcHpkSEpwYm1jNlVGQk9JaXdpZEhsd1pTSTZleUpqYjJScGJtY2lPbHQ3SW5ONWMzUmxiU0k2SW1VNVlUWmpNemcyTFdJeVlqQXROREJoTXkxaE5XRTFMVGxoWkdFNFpXTm1NREUxTlRwemRISnBibWM2YUhSMGNEb3ZMM1JsY20xcGJtOXNiMmQ1TG1oc055NXZjbWN2UTI5a1pWTjVjM1JsYlM5Mk1pMHdNakF6SWl3aVkyOWtaU0k2SWpkaVpXVTBNRGc1TFdSalpESXRORGRpWXkxaU1qYzBMVEE0WW1RMlpEaG1OekJqWWpwemRISnBibWM2VUZCT0lpd2laR2x6Y0d4aGVTSTZJbU14Wm1Vd016Y3pMVFpqWkRJdE5HWmhOUzA0TlRJNUxUbGlNbVk1TnprMU5UWmlOVHB6ZEhKcGJtYzZVR0Z6YzNCdmNuUWdUblZ0WW1WeUluMWRmU3dpZG1Gc2RXVWlPaUpoTVRjNE5tTTVOQzB5WXpSbUxUUXpNRGN0WVdGbU9TMHhaamhsT1RRM01tWmlPV1k2YzNSeWFXNW5Pa1UzT0RNeE1UYzNSeUo5TEhzaWFXUWlPaUkyTlRCbE9XRmpNUzB5T0RCbExUUTVNamd0T0RFellpMWhPVFU1TWpBd1l6azFNRFU2YzNSeWFXNW5PazVTU1VNdFJrbE9JaXdpZG1Gc2RXVWlPaUkxTldNM1l6RTROeTB4WVRZM0xUUmlObVF0WW1FeE5DMDJNR00yTkdaaE1qY3lOR1k2YzNSeWFXNW5PbE01TURrNE9UZzVXaUo5WFN3aWJtRnRaU0k2VzNzaWRHVjRkQ0k2SW1ZM056VXlZalEwTFdSa1pqRXROR001WkMwNU5qTmpMV1F5TkRoaFkyWTJaR1EzTWpwemRISnBibWM2VkdGdUlFTm9aVzRnUTJobGJpSjlYU3dpWjJWdVpHVnlJam9pWkRjeFptTmlOMkV0WldFM1l5MDBZemN6TFdJMU1qUXRZMlkxTnpjM01HTTJOMkk1T25OMGNtbHVaenBtWlcxaGJHVWlMQ0ppYVhKMGFFUmhkR1VpT2lJNVpXSTJNREZtWWkxa01UTXpMVFF6Wm1ZdFlqWm1aQzFsTW1JelpqSTJaRFExWWpJNmMzUnlhVzVuT2pFNU9UQXRNREV0TVRVaWZYMHNleUptZFd4c1ZYSnNJam9pWW1ZM01qUTVaVEl0TTJReVlTMDBNVEV5TFdFMFl6Y3RaR0kwT0RCa056UXhaV1ptT25OMGNtbHVaenAxY200NmRYVnBaRG8zTnpJNU9UY3daUzFoWWpJMkxUUTJPV1l0WWpObE5TMHpObUUwTW1Wak1qUXhORFlpTENKeVpYTnZkWEpqWlNJNmV5SnlaWE52ZFhKalpWUjVjR1VpT2lKa00yTXdabUZtTXkxaU5ERmhMVFF6WXpBdE9XVXpOUzB3TXpBNE5XUXdOR1V5WkdRNmMzUnlhVzVuT2s5aWMyVnlkbUYwYVc5dUlpd2ljM0JsWTJsdFpXNGlPbnNpZEhsd1pTSTZJbU5oWmpjNE1tTXdMV1JqTm1ZdE5EUmhOQzFpWWpZNExUVTBPRGszTVdKak1EbGtOanB6ZEhKcGJtYzZVM0JsWTJsdFpXNGlMQ0p5WldabGNtVnVZMlVpT2lKbU5HTTJOV1V5TXkxak5tWmtMVFF4TnpndE9UazROUzFrTURoa1kyRmtNMlU0TkRBNmMzUnlhVzVuT25WeWJqcDFkV2xrT2pBeU56VmlabUZtTFRRNFptSXRORFJsTUMwNE1HTmtMVGxqTlRBMFpqZ3daVFpoWlNKOUxDSndaWEptYjNKdFpYSWlPbHQ3SW5SNWNHVWlPaUptWTJKaU9EVmpaUzB3WXpFeExUUXlaR010T0RaaE5pMDRaREprTldVNVlUa3daakU2YzNSeWFXNW5PbEJ5WVdOMGFYUnBiMjVsY2lJc0luSmxabVZ5Wlc1alpTSTZJbUprTUdRd09EUTRMVE5pWVdNdE5EQmlZeTA1TUdFMkxUUXlNV1F5TlRRMU1EYzBaanB6ZEhKcGJtYzZkWEp1T25WMWFXUTZNMlJpWm1Zd1pHVXRaRFJoTkMwMFpURmtMVGs0WW1ZdFlXWTNOREk0WWpoaE1EUmlJbjBzZXlKcFpDSTZJalkxWW1WbFpUTXlMV0prWVdJdE5HWXlOQzA0TWpneExUTTJZbVJpWmpsbFlUazBaVHB6ZEhKcGJtYzZURWhRSWl3aWRIbHdaU0k2SW1JNE5tUTJaVFkzTFRsak1UVXROR1kwTlMxaE5qazBMVGRsTWpKaE56UmtaakUyTWpwemRISnBibWM2VDNKbllXNXBlbUYwYVc5dUlpd2ljbVZtWlhKbGJtTmxJam9pT0dRMk5qZzVORGd0TUROa1lTMDBPR0kzTFdGa01ETXRPVGMyWmpNeFptVmlNR1ZqT25OMGNtbHVaenAxY200NmRYVnBaRHBtWVRJek1qaGhaaTAwT0RneUxUUmxZV0V0T0dNeU9DMDJObVJoWWpRMk9UVXdaakVpZlN4N0ltbGtJam9pWVdNMU1qRXdOek10TkdabU55MDBaVFF3TFRrM1l6SXRaamsxTVdabU5UQTRPVEl4T25OMGNtbHVaenBCVENJc0luUjVjR1VpT2lJek1UVXhPV0UxTVMwd056QTBMVFF6TXpFdFlXRTJZeTB5TkRFMk9ERTNaVFpqWlRZNmMzUnlhVzVuT2s5eVoyRnVhWHBoZEdsdmJpSXNJbkpsWm1WeVpXNWpaU0k2SWpaak4yVmpNakExTFdJNE16TXRORFE0TlMwNU5UZ3pMVEkzWlRaaE4yTTRaalJtTVRwemRISnBibWM2ZFhKdU9uVjFhV1E2T0RNNVlUZGpOVFF0Tm1JME1DMDBNV05pTFdJeE1HUXRPVEk1TldRM1pUYzFaamMzSW4xZExDSnBaR1Z1ZEdsbWFXVnlJanBiZXlKcFpDSTZJbUpsTldWa1pXSXhMVFJsT0RrdE5EVTVNQzA0TnpsbUxUUXhaR0k1TW1JMk16VmlORHB6ZEhKcGJtYzZRVU5UVGlJc0luUjVjR1VpT25zaVkyOWthVzVuSWpwYmV5SnplWE4wWlcwaU9pSmlNbUptTkRreU1pMDBaVEEyTFRReU1ESXRZakEzT0Mwd1pUTXhaVEV5T0dVNFl6STZjM1J5YVc1bk9taDBkSEE2THk5MFpYSnRhVzV2Ykc5bmVTNW9iRGN1YjNKbkwwTnZaR1ZUZVhOMFpXMHZkakl0TURJd015SXNJbU52WkdVaU9pSmlPVEppT0RFMk1pMWhORGMyTFRSak9EQXRPREpoWXkwNE5ESXdNR1V6WXpZME16VTZjM1J5YVc1bk9rRkRVMDRpTENKa2FYTndiR0Y1SWpvaU5UQXhOVEppWmpFdE4yWmlNUzAwWkROaExUazNOMk10T0dJMk5Ea3haR0ZtTURVek9uTjBjbWx1WnpwQlkyTmxjM05wYjI0Z1NVUWlmVjE5TENKMllXeDFaU0k2SWpReE1ERm1OR1kyTFRKbFlUWXRORGxsWWkxaFlqTTBMVEJqTlRoak4yVXlZbVkwWmpwemRISnBibWM2TVRJek5EVTJOemc1SW4xZExDSmpZWFJsWjI5eWVTSTZXM3NpWTI5a2FXNW5JanBiZXlKemVYTjBaVzBpT2lJNFlqWXdaREkyWVMxbU1UZzRMVFJpWmpZdFlqSmhNQzAzTm1Rek1HVTJOREl3WTJVNmMzUnlhVzVuT21oMGRIQTZMeTl6Ym05dFpXUXVhVzVtYnk5elkzUWlMQ0pqYjJSbElqb2lOVGxqWkRFM05UWXRZMkZsTWkwMFpqSmlMV0l4TVRBdE9XRmlaVEF4TUdWak0yRTRPbk4wY21sdVp6bzROREExTXprd01EWWlMQ0prYVhOd2JHRjVJam9pT0dFNU1qQTBNemN0TTJFeFppMDBPR0l6TFdFNFlUVXRZVGs1TXprNU1XTXdZelZoT25OMGNtbHVaenBEVDFaSlJDMHhPU0o5WFgxZExDSmpiMlJsSWpwN0ltTnZaR2x1WnlJNlczc2ljM2x6ZEdWdElqb2lOalppWVdVMFl6SXROak13WkMwMFlUVTJMVGxsWTJNdE9UZzNOemxsT1dSak5EVmhPbk4wY21sdVp6cG9kSFJ3T2k4dmJHOXBibU11YjNKbklpd2lZMjlrWlNJNklqazBZVE0yT1RSbUxXSmxOemN0TkdNeVlpMDVORFJoTFRZNE5HRmtZekl4WkdNM016cHpkSEpwYm1jNk9UUTFNekV0TVNJc0ltUnBjM0JzWVhraU9pSTJNVGRoTVRKaVlTMDFPRGxrTFRSbU56WXRPVEJoWXkxaU1qZGlNV1V4T1RjMk1EWTZjM1J5YVc1bk9sTkJVbE10UTI5V0xUSWdLRU5QVmtsRUxURTVLU0JTVGtFZ2NHRnVaV3dnTFNCU1pYTndhWEpoZEc5eWVTQnpjR1ZqYVcxbGJpQmllU0JPUVVFZ2QybDBhQ0J3Y205aVpTQmtaWFJsWTNScGIyNGlmVjE5TENKMllXeDFaVU52WkdWaFlteGxRMjl1WTJWd2RDSTZleUpqYjJScGJtY2lPbHQ3SW5ONWMzUmxiU0k2SWpReVptWXdZMkkwTFRVellUY3RORGhsTUMwNFpUTTRMV0ZpT1ROaVlUTmlNbVEyWlRwemRISnBibWM2YUhSMGNEb3ZMM051YjIxbFpDNXBibVp2TDNOamRDSXNJbU52WkdVaU9pSTJOVFJrTVRZNE1DMHhaVEkzTFRRME5qRXRZVFZoTVMwNE1XRmhZakE1TTJRNU5UQTZjM1J5YVc1bk9qSTJNRE00TlRBd09TSXNJbVJwYzNCc1lYa2lPaUk1WWpFNU9XWm1ZeTFtWkRsa0xUUXdNbVV0T0RabFppMW1OV0V6TWpjMU1HSXpPR002YzNSeWFXNW5PazVsWjJGMGFYWmxJbjFkZlN3aVpXWm1aV04wYVhabFJHRjBaVlJwYldVaU9pSTFOMlJsTmpnNFppMW1ORFkzTFRSaFlUa3RZVGs1TmkwMk5qVTRNekkyWVRFeFpqYzZjM1J5YVc1bk9qSXdNakF0TURrdE1qaFVNRFk2TVRVNk1EQmFJaXdpYzNSaGRIVnpJam9pWWpka05tWTVaV010TURFMlpTMDBOV0ZrTFdJd09HVXROamczTUdNd1pUVm1ZakUzT25OMGNtbHVaenBtYVc1aGJDSjlmU3g3SW1aMWJHeFZjbXdpT2lJM05UazRaVEF4WXkwelpqSTBMVFE0WW1JdE9ERXpNUzFpT0RrNE56TmhaalEyWlRVNmMzUnlhVzVuT25WeWJqcDFkV2xrT2pBeU56VmlabUZtTFRRNFptSXRORFJsTUMwNE1HTmtMVGxqTlRBMFpqZ3daVFpoWlNJc0luSmxjMjkxY21ObElqcDdJbkpsYzI5MWNtTmxWSGx3WlNJNklqWmpNVE0xTnpWbExUa3lOVFF0TkRnNFl5MDRNemd3TFRReU4yWXdNakJsWVRRNU1qcHpkSEpwYm1jNlUzQmxZMmx0Wlc0aUxDSjBlWEJsSWpwN0ltTnZaR2x1WnlJNlczc2ljM2x6ZEdWdElqb2lNekl6T0dWallqQXRNV1U1TVMwME56STRMV0kyWXpVdE56QTVPRFJtTURZNVpqTXdPbk4wY21sdVp6cG9kSFJ3T2k4dmMyNXZiV1ZrTG1sdVptOHZjMk4wSWl3aVkyOWtaU0k2SWpGbU1UZzNOVFkyTFRFMk1EWXRORFZrTWkxaFpEaG1MV0U0TVdRd1pqZ3hZamMzTkRwemRISnBibWM2TWpVNE5UQXdNREF4SWl3aVpHbHpjR3hoZVNJNklqTXlOR013WVdRMUxUTXdZVEF0TkdRMk9DMWhORGt3TFRZeFpqRmtNMlV4TjJJM1pEcHpkSEpwYm1jNlRtRnpiM0JvWVhKNWJtZGxZV3dnYzNkaFlpSjlYWDBzSW1OdmJHeGxZM1JwYjI0aU9uc2lZMjlzYkdWamRHVmtSR0YwWlZScGJXVWlPaUppWm1KaFpUa3hZeTAwTkRFeExUUXlZbUl0WWprNE9DMWhNMkUxWmpNek5HSmhOekU2YzNSeWFXNW5Pakl3TWpBdE1Ea3RNamRVTURZNk1UVTZNREJhSW4xOWZTeDdJbVoxYkd4VmNtd2lPaUl4TTJJd1pHTTJPQzB5TVdWakxUUXdZemN0T1dKall5MDJZVFF6Tm1abFltVXlPV1U2YzNSeWFXNW5PblZ5YmpwMWRXbGtPak5rWW1abU1HUmxMV1EwWVRRdE5HVXhaQzA1T0dKbUxXRm1OelF5T0dJNFlUQTBZaUlzSW5KbGMyOTFjbU5sSWpwN0luSmxjMjkxY21ObFZIbHdaU0k2SWpoaFlURmtaRFkyTFdRelpqVXROR0l4TXkwNU9EZGpMVGd4WlRNMk5UUTBaR0V4TmpwemRISnBibWM2VUhKaFkzUnBkR2x2Ym1WeUlpd2libUZ0WlNJNlczc2lkR1Y0ZENJNklqZGtPRFJoT0RjeUxUWmlZVEV0TkRJME9TMWlOMkUyTFdFM01URXlOVFpqWldZeU9EcHpkSEpwYm1jNlJISWdUV2xqYUdGbGJDQk1hVzBpZlYwc0luRjFZV3hwWm1sallYUnBiMjRpT2x0N0ltTnZaR1VpT25zaVkyOWthVzVuSWpwYmV5SnplWE4wWlcwaU9pSTBOVFUxTWpobVl5MDVOR0U1TFRSa09HRXRZVEV4TlMxa1lUWXpPVE5qTkRrM1pqVTZjM1J5YVc1bk9taDBkSEE2THk5MFpYSnRhVzV2Ykc5bmVTNW9iRGN1YjNKbkwwTnZaR1ZUZVhOMFpXMHZkakl0TURJd015SXNJbU52WkdVaU9pSm1OalZsWTJabVpTMDFNRFJrTFRSbE5XUXRZak5rTlMwMVl6TXdNekUxWlRjeU5HUTZjM1J5YVc1bk9rMURVaUlzSW1ScGMzQnNZWGtpT2lKbU9HTm1PVEV4TmkwM056WmlMVFE1TWpjdE9HRXdZUzAwTldWaU1qRmlaREJqTkdJNmMzUnlhVzVuT2xCeVlXTjBhWFJwYjI1bGNpQk5aV1JwWTJGeVpTQnVkVzFpWlhJaWZWMTlMQ0pwWkdWdWRHbG1hV1Z5SWpwYmV5SnBaQ0k2SW1aa1ptVXhZMkZsTFRrMVlXTXROR1ZoWkMxaE56TTBMVFZpWmprMVl6bGhNakJqWkRwemRISnBibWM2VFVOU0lpd2lkbUZzZFdVaU9pSTBNekUxWlRWbVpDMDRaakV6TFRRd1pUY3RZV0V3TUMxa05HUTFaV0ZtWWpNd05tTTZjM1J5YVc1bk9qRXlNelExTmlKOVhTd2lhWE56ZFdWeUlqcDdJblI1Y0dVaU9pSmpNamd6TnpBd05TMWlNRFU0TFRSalpqY3RPVFEwTVMxbU0ySm1aalEwTnpnMllqWTZjM1J5YVc1bk9rOXlaMkZ1YVhwaGRHbHZiaUlzSW5KbFptVnlaVzVqWlNJNklqUTVaalF5WWpWbExUTmpNR0V0TkRJNE55MDVNV0UwTFdaak5ERXhZV0UwWTJVek5EcHpkSEpwYm1jNmRYSnVPblYxYVdRNlltTTNNRFkxWldVdE5ESmhZUzAwTnpOaExXRTJNVFF0WVdaa09HRTNZak13WWpGbEluMTlYWDE5TEhzaVpuVnNiRlZ5YkNJNkltRTBOV1EzTW1SakxUVTJOelV0TkdOaVppMDVORGcyTFRKbU1ESTBNbVE0TkdWaE1qcHpkSEpwYm1jNmRYSnVPblYxYVdRNlltTTNNRFkxWldVdE5ESmhZUzAwTnpOaExXRTJNVFF0WVdaa09HRTNZak13WWpGbElpd2ljbVZ6YjNWeVkyVWlPbnNpY21WemIzVnlZMlZVZVhCbElqb2laVEJrTm1JMFptRXRaV05qWWkwME5HRTJMV0ZtWlRFdFpUTmlOREpoT1RsbU16STFPbk4wY21sdVp6cFBjbWRoYm1sNllYUnBiMjRpTENKdVlXMWxJam9pWW1KbU1EVTBaV1V0T1RBME9DMDBPRGt6TFdJNE9XTXRPR0kzTnprMU56Y3dNekE0T25OMGNtbHVaenBOYVc1cGMzUnllU0J2WmlCSVpXRnNkR2dnS0UxUFNDa2lMQ0owZVhCbElqcGJleUpqYjJScGJtY2lPbHQ3SW5ONWMzUmxiU0k2SWpFd01qRTBaakkwTFRReU1EZ3ROR1EwTWkxaU16bGxMVFEwTldWbE1UUmlZMkprT0RwemRISnBibWM2YUhSMGNEb3ZMM1JsY20xcGJtOXNiMmQ1TG1oc055NXZjbWN2UTI5a1pWTjVjM1JsYlM5dmNtZGhibWw2WVhScGIyNHRkSGx3WlNJc0ltTnZaR1VpT2lKbE9EWmlaV1EwT0MweU5EWXdMVFJtTXpNdFlXUmhPQzFsWm1Nd1lqSTJNVFZpWVRRNmMzUnlhVzVuT21kdmRuUWlMQ0prYVhOd2JHRjVJam9pTmprMFpXSm1aVFl0T0RSak55MDBOVGc1TFdFNE1HRXRPV1F3WVdRNE1EQTFPREE1T25OMGNtbHVaenBIYjNabGNtNXRaVzUwSW4xZGZWMHNJbU52Ym5SaFkzUWlPbHQ3SW5SbGJHVmpiMjBpT2x0N0luTjVjM1JsYlNJNklqZ3hNakJrTjJZMUxUbGtOamd0TkRCaU5DMWlZekF4TFRFMFpEQmtZV0ptT1dWak1qcHpkSEpwYm1jNmRYSnNJaXdpZG1Gc2RXVWlPaUl4TVRZMlltSXdOaTAwTmpFeUxUUTRZamN0WVdRd05DMWlZelUzWmpJd056SmtPVFU2YzNSeWFXNW5PbWgwZEhCek9pOHZkM2QzTG0xdmFDNW5iM1l1YzJjaWZTeDdJbk41YzNSbGJTSTZJalptWmpNd09URm1MVGswTXpFdE5HRXpaaTFoWWpka0xUVXpZelV5Tm1ReE5Ea3lNanB6ZEhKcGJtYzZjR2h2Ym1VaUxDSjJZV3gxWlNJNkltRXhPVEkwT1dVeUxUazBNek10TkRFNU5TMDROR0ZpTFdSaFlqTXlPR1UyWmpjMlpEcHpkSEpwYm1jNkt6WTFOak15TlRreU1qQWlmVjBzSW1Ga1pISmxjM01pT25zaWRIbHdaU0k2SW1Ka01qTTBOVGs0TFRneVpUZ3ROREJoTlMwNFlqQmxMVFpsTkRjMU9UTmhZemczWmpwemRISnBibWM2Y0doNWMybGpZV3dpTENKMWMyVWlPaUkxTVRRNE5ETXlPQzFsWkRjMUxUUTROVE10T0RGaE5pMDRNbUV6WmpSa01UWmxPREU2YzNSeWFXNW5PbmR2Y21zaUxDSjBaWGgwSWpvaU1UTTRPV016WVRFdFpqYzVZUzAwWWpsbExXSTFZekl0TkRrMk1XTmxOalppWXpVME9uTjBjbWx1WnpwTmFXNXBjM1J5ZVNCdlppQklaV0ZzZEdnc0lERTJJRU52Ykd4bFoyVWdVbTloWkN3Z1EyOXNiR1ZuWlNCdlppQk5aV1JwWTJsdVpTQkNkV2xzWkdsdVp5d2dVMmx1WjJGd2IzSmxJREUyT1RnMU5DSjlmVjE5ZlN4N0ltWjFiR3hWY213aU9pSTRaVGM1Wm1NME55MWpOalV3TFRRNFptVXRPVFJtWkMwME5qRmxOVFZqWTJVNU1qUTZjM1J5YVc1bk9uVnlianAxZFdsa09tWmhNak15T0dGbUxUUTRPREl0TkdWaFlTMDRZekk0TFRZMlpHRmlORFk1TlRCbU1TSXNJbkpsYzI5MWNtTmxJanA3SW5KbGMyOTFjbU5sVkhsd1pTSTZJak16WWpKaU5EUTNMVEF6WTJRdE5ESmpOUzFpT0ROaExXUmhORFUzTkRReFltWXpNanB6ZEhKcGJtYzZUM0puWVc1cGVtRjBhVzl1SWl3aWJtRnRaU0k2SWpSaFl6RTBPR1V3TFRSaE5tTXRORFEyWVMwNE5qUmtMVE5sWW1abE9UWmhNamxpWmpwemRISnBibWM2VFdGalVtbDBZMmhwWlNCTlpXUnBZMkZzSUVOc2FXNXBZeUlzSW5SNWNHVWlPbHQ3SW1OdlpHbHVaeUk2VzNzaWMzbHpkR1Z0SWpvaVpUWXlNamhqTXpVdFlqZGpOUzAwWTJVeExXSmtaVGN0TWpabFl6STVNRGxqTUdGaE9uTjBjbWx1Wnpwb2RIUndPaTh2ZEdWeWJXbHViMnh2WjNrdWFHdzNMbTl5Wnk5RGIyUmxVM2x6ZEdWdEwyOXlaMkZ1YVhwaGRHbHZiaTEwZVhCbElpd2lZMjlrWlNJNklqZzBPVEE0TURBeUxXVXpNVGN0TkRRMll5MWlNREU0TFRSaU1qQm1ZemxoWldNd1pqcHpkSEpwYm1jNmNISnZkaUlzSW1ScGMzQnNZWGtpT2lJMVltTmhZV0l3TlMwd1pUQm1MVFF4Wm1VdE9UUTNNeTA0TjJWbU1UVTJPVGd3WVdJNmMzUnlhVzVuT2tobFlXeDBhR05oY21VZ1VISnZkbWxrWlhJaWZWMHNJblJsZUhRaU9pSmpNR0k0WlRNM1ppMHpPRFl6TFRRME5tSXRZamxrTkMxbE5qbGtZbU0xWXpKaVlqWTZjM1J5YVc1bk9reHBZMlZ1YzJWa0lFaGxZV3gwYUdOaGNtVWdVSEp2ZG1sa1pYSWlmVjBzSW1OdmJuUmhZM1FpT2x0N0luUmxiR1ZqYjIwaU9sdDdJbk41YzNSbGJTSTZJbVl5TUdJME9HUmpMV0l5WW1RdE5HVm1ZaTA0TTJZNExUVXhaV000TkRJeE1XRXhNVHB6ZEhKcGJtYzZkWEpzSWl3aWRtRnNkV1VpT2lJM056QXlOalZtTVMwNE5tVmtMVFJrTmpZdE9EVXhaQzFpT0RFM05qTTJNVE0zTnpNNmMzUnlhVzVuT21oMGRIQnpPaTh2ZDNkM0xtMWhZM0pwZEdOb2FXVmpiR2x1YVdNdVkyOXRMbk5uSW4wc2V5SnplWE4wWlcwaU9pSmpNekprWXpFNE1TMDROemxrTFRRNE4yWXRZVE5tTUMwM09UTXdORGRrWXpneU9HUTZjM1J5YVc1bk9uQm9iMjVsSWl3aWRtRnNkV1VpT2lKbFpETm1NR00yTlMwMFpXUmpMVFJrTmprdFlqUmxNaTAyWm1RMk9USXhaR1UzT1RNNmMzUnlhVzVuT2lzMk5UWXhNak0wTlRZM0luMWRMQ0poWkdSeVpYTnpJanA3SW5SNWNHVWlPaUkwTTJZelptUXdaQzAyTkRJMExUUTJOVGd0T0dWa1pDMW1ZekpsTTJGbE5EUm1ZbVU2YzNSeWFXNW5PbkJvZVhOcFkyRnNJaXdpZFhObElqb2lNelV3T0RjM1pqRXRaV1F3TWkwMFpqQXdMVGszTXpNdFptRTJNV0pqWkRZek0yTTVPbk4wY21sdVp6cDNiM0pySWl3aWRHVjRkQ0k2SW1NNE5qUmtaVGxtTFRBelkyWXRORGc0WWkxaU1UUTJMV1UxTjJWbE1qaGpOMk15WlRwemRISnBibWM2VFdGalVtbDBZMmhwWlNCSWIzTndhWFJoYkN3Z1ZHaHZiWE52YmlCU2IyRmtMQ0JUYVc1bllYQnZjbVVnTVRJek1EQXdJbjE5WFgxOUxIc2lablZzYkZWeWJDSTZJamhpWldFMk9ESTNMVEZrTlRBdE5EbGxOUzFoT0RreExUVTBZbVl5TWpka09XVmlORHB6ZEhKcGJtYzZkWEp1T25WMWFXUTZPRE01WVRkak5UUXRObUkwTUMwME1XTmlMV0l4TUdRdE9USTVOV1EzWlRjMVpqYzNJaXdpY21WemIzVnlZMlVpT25zaWNtVnpiM1Z5WTJWVWVYQmxJam9pTmpjNE9XVmpaVGN0WmpNNFpDMDBORFk0TFdJNVltWXRPRFV6TWpRNU1UazJOREprT25OMGNtbHVaenBQY21kaGJtbDZZWFJwYjI0aUxDSnVZVzFsSWpvaVlXTXlZVFU0T1RJdE5XWTBPQzAwTVROaExUZ3hOakl0TkRrM1lXSXdNV1F3WlRJek9uTjBjbWx1WnpwTllXTlNhWFJqYUdsbElFeGhZbTl5WVhSdmNua2lMQ0owZVhCbElqcGJleUpqYjJScGJtY2lPbHQ3SW5ONWMzUmxiU0k2SWpGaE1HRTFZbU5oTFRRelpqRXROR015TXkxaU5HSXdMV05tTmpKaE9HSTNOV0U0TkRwemRISnBibWM2YUhSMGNEb3ZMM1JsY20xcGJtOXNiMmQ1TG1oc055NXZjbWN2UTI5a1pWTjVjM1JsYlM5dmNtZGhibWw2WVhScGIyNHRkSGx3WlNJc0ltTnZaR1VpT2lJeE9XUTNZelJoTnkxbE9XWXhMVFE1Wm1ZdFlUTmpZeTAwWkROak5XVTRZV1JoTWpBNmMzUnlhVzVuT25CeWIzWWlMQ0prYVhOd2JHRjVJam9pTXpKbU1qZzVOak10TnpkaE55MDBOV1l6TFdFNFpUWXROMlpsTmpBek1ERXpZbUUzT25OMGNtbHVaenBJWldGc2RHaGpZWEpsSUZCeWIzWnBaR1Z5SW4xZExDSjBaWGgwSWpvaVptUXhNekpoTWpZdE5URTFNQzAwTVRReExUZzVNREV0WlRZeFpETTBOekF4TjJKbE9uTjBjbWx1WnpwQlkyTnlaV1JwZEdWa0lFeGhZbTl5WVhSdmNua2lmVjBzSW1OdmJuUmhZM1FpT2x0N0luUmxiR1ZqYjIwaU9sdDdJbk41YzNSbGJTSTZJamswTnpnMk9UWmpMV1UzWVdJdE5ERTBNeTA0T1RobExXWmtZbVpqT1dZek1EYzJaVHB6ZEhKcGJtYzZkWEpzSWl3aWRtRnNkV1VpT2lJM056QTBOV1V4WXkwMU5tTXlMVFJqWlRVdFlXUTFZUzAyWW1Gak16QmxNRFJsTmpjNmMzUnlhVzVuT21oMGRIQnpPaTh2ZDNkM0xtMWhZM0pwZEdOb2FXVnNZV0p2Y21GMGIzSjVMbU52YlM1elp5SjlMSHNpYzNsemRHVnRJam9pTUdJek1qWmlabVl0WWpNME9TMDBPR1F6TFdGaE9HTXRNMkkwTldSbVpHTmhNams0T25OMGNtbHVaenB3YUc5dVpTSXNJblpoYkhWbElqb2laV1poTnpjeVlUVXRNMlEzTVMwME9UY3lMV0V6TldZdE1UZ3hNV1EyWmpaaU1UazRPbk4wY21sdVp6b3JOalUyTnpZMU5ETXlNU0o5WFN3aVlXUmtjbVZ6Y3lJNmV5SjBlWEJsSWpvaU5URTRNelk1TVRVdFpEaGtNUzAwWmpKbUxXSXhNVEF0TVRCaE5tVTJZMlZrWlRSa09uTjBjbWx1Wnpwd2FIbHphV05oYkNJc0luVnpaU0k2SWpjNFpEYzVPRFE1TFRoak5HUXRORFprTXkxaU5UWmtMV1F4WVdNelltTmhObVkxWkRwemRISnBibWM2ZDI5eWF5SXNJblJsZUhRaU9pSXhPRGM0Wm1VMVpTMHdOREkzTFRRd05EUXRZbU0zWXkwek9ESTNNMlZoWmpKak1XRTZjM1J5YVc1bk9qSWdWR2h2YlhOdmJpQkJkbVZ1ZFdVZ05Dd2dVMmx1WjJGd2IzSmxJREE1T0RnNE9DSjlmVjE5ZlYxOUxDSnNiMmR2SWpvaVlXSTJNVFEzTURZdE9URXdZaTAwWVRNeExUa3daR1l0Wmpjd05XUTVPR0ppTnpneU9uTjBjbWx1Wnpwa1lYUmhPbWx0WVdkbEwzQnVaenRpWVhObE5qUXNhVlpDVDFKM01FdEhaMjlCUVVGQlRsTlZhRVZWWjBGQlFXWlJRVUZCUkVsRFFVMUJRVUZCY0hnclVHRkJRVUZCVFRGQ1RWWkZWVUZCUVVSTmVrMTZUWHBOZWsxNlRYcE5lazE2VFhwTmVrMTZUWHBOZWsxNlRYcE5lazE2VFhwTmVrMTZUWHBOZWsxNlRYcE5lazE2VFhwTmVrMTZUWHBOZWsxNlpVTnRhVUZCUVVGQlJVaFNVMVJzVFVGUlRDdEJOM2hCWjI0eVJGQXpla0ozY2pGRFVFVnNLMGt2VVVGQlFuZGtTbEpGUmxWbFRuSnpibVF4TWpKNWIxRlNkbXRJU1ZOSVRpdDZMM1I1VldzNWIxUkZRMUV4WWxSQ1l6SXpZbmxPY3pCQ05VZEpSRUZTUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFXc3JTV3NyU1dSNE5HYzFUalJDT1VkUkwzSlFRVGxLTDBsUVpsTm5kMHd2VFVWRlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVVIzVURWYVVHOVFOWEkzUmtwTFFXWTNZM1ZtUW1sb1VFNVRhMWcxYUd4Qk9YVXJSSE5RTjJSWUwwcExNVkF5VmxCcFUwbHZaV0pGY2t4M1ZtZzFXbmdyT0VNeFdUSXlXWFJRTUVad1pqWm9aR1ZoSzIxeE1WZHNhWGhtWldvMlVtTkVlR293T1hOM1dHSmlaVUpSY0dscWRXY3lNR0ZxTDFORk9HSjJielZvUlhWaGRrRjFVMHR3VVdaS2VGUkhPVEZuVlhKRFZqWnFVMUZGTUc5UWEyVTBkM1ZyWlRjd05VVnhjRXhPVjNoMFRYUlRhelJxZGxoSGJHUXJkRXhzZUhaV1RVNXVZV3RFTjIxRmJtUlpWRlpYVTI1V09EWXdWMVZZYkRNMFVrMTVOMEpsYlhCNVIzcE9OM0JCWW0xWVJVRTJZbVoyU3pCMU16SjFWRVpMUzFaTk1ISXdXWGN4VFZSalJuWndPR2xXVEZCRU1DczVaMGhSZVNzM2NsTm1NMlZsYW5BeVNIVkdZM050YkdScFJYb3dSbnBMV0daVFVuY3pjV1V3T0ZoeFpEbGtVRFpSUzA5T2JtdDFOR3hITTA1VFlpOVNRblJMZEV0ME1YUjBaRUpLYVZsaU1sWkpOMkp5WXpkMFl6aEpXVzkwU25wSVZVSXdZeXRQSzFRemNsUlJkVXhMYzFwU2NYQjZhMVJUTjJSYVNUUjJieXR4U201a1JVZFBPRVY2WldONWFtRmpOaTlKVkU0eVMwOVhZVlZNU1ZRdllVeGtaVlZ1Y1hCa2FUZFdWeklyUzNsak1qbEdURE56TjJVemFHazFURlJUYUdWWFYzQjVWMnhJTkZoNmJYWlhhbTVwVDJsR1RqTlpWMFJwZGxkSk9USlhkV3MxWTNReVF6QndNMHA2YkRsWlRqWTJWMGsxU1ZZdlZubEdPRFp5TVdFeE4zQklOVlZOUXpCd1dDOUVkMWhXVlRVeU5FdHpOVmxuUkZwdFREUjZSM294ZHpnd2NETXpVR294Y0UxMlkya3JkR015WTBaSmFtMW9TREprVjFabWRXRldUSFZNYW5rNVpWUjZaM0ZQY25GbGQzWXdkblZ0THpGTFVqUXJNbUUyUkdnMWNGaFBOMVk1VHl0ek5FdFNTbEJCUkhWNFRtcDBha1pEUTJzdlEyeDBSWHBuWm5wVGRHVnlVM1prV2xGYVpVUnZlWGx4ZUZGbmRWSXhiRmh0UW14Skx6bFFVMlZpV25CaVQyVTRZbWwyZERKaVJrczVXV0ZMTkdWSVpUZE9URTVoZEV4UU0zRkhXVXhtVERjeFVtOU5ka0kyV0hVNU5rb3pWRmQwT1V4VWIxRk5OWHB0T0ZsbWVHSklTVVZUVUZwWVdGY3ZkRzkyVkZOdksxQnhSbmhPWlhOM1duRnFUeTlZTURsUGRrSm5hVGxQWTBoM04yeHNWWFZyWTNZclpHa3djbTVsY1dZNU9YVlliMHRuYkUxTmQyRnNiRGQ0TDIxNU1HMXNVRFZ3YVZadWRqTm1kVm9yTVRremVHNXdWRmxNZWpOVGFtVnFVRXhZY0U4MlZIUllZbnBZY0daSlZXTmxTa2h0VUhOWVFVcHpZa2tyWVV3M1puWnpjSEJXYzA5WU4zVmhaRW81Um5aMVZEWXpVSGh6V2tGUk0xVk5lSGxuVEhsWGRuTnJOaTlzZFd0MU5EQm1ZamgwZEc5c1JFWkdZakZhVVZFMkwyMVNhM1l4YVZjNWFURktOa012TVdGbGFrRmpkbEZRVm0xVmREWkdRakpqYmpJMlNucEVUelJVYzJGTVkxZGxZVlJpYnpkSmJqQTBXREE0TmprMldIaFVibkpyYlhwSFEwaHBiVzFLY0V4MVRtRlFhVGN4Wml0TFQydDBaVFZKU3psUGNsTTNOR2x1WjFCVFprcGtNVzlKVTBRNVdqQnRMMmhRYUVJd2J5c3ZUR1F6VFUxSFZYSlRWVFk0Y3psNVZYcFlVMDh6YzNWb1Z5dENhQ3RLYWpCdmVYb3ljMjVhY1dkd1kzcGtOV2wzY0haU2RtMUxabGh3V1M5UU1IbGxVMlp6WjBoUGFHeHBkM1JNVXpkalFsTnBVakZoV2taUU16QnhLMEowTTJaWVlrczVhRkV5VkhJck5ISlRZeXM0Wkdac1dFTlBNbXcyY0ZrclVFbHpOWEJHTVhoek5HdHRZbGhXUWpaNk1FcFhVbEprU0NzMlFqQjNPRlpsYjNsa1pWZHNWamcwZUdGVlRHNTJXREE0ZGtWNlRtNHJTRXBQZFN0MFpsUXhZMU5pUzFCTVpYZDJWMnRqTDJNeEwxbDBjelJUYkVvclJFaHdkVzV6UmpNd05qbFlVM0ozTjFab1VXVnNOR2RJVGpOUmRVaFBPR3BGYXk5UE9HTkRLMVZ2TDNCWVVpdDJSekJNVTI0dldsaDRiRmg1U1c5ak5qQlFVMmhsYkdSM2RtUjZZalJJVnpOSk56RndUeTh3ZDBoWmNVOUpjRGgyTkRGS1ZEVXlWRTVxWmpWcWVESTBabTFGT1RaWFRISkhOeTlpYzI5Tk5tVm9RMGR3U2poek1DOWFWak5yT0hGdVZFOWtXREZDTmpaSVQyZGlOR0kxUzFKbWRHdzFOR1pETjI5MmVYWmFXbkJZZERaS2VUUnZNMXB4WldSUGRrMVVaSE5zVUZWb1JEQnliRmQ0ZGxaTlJuUlRNRkF4VlU5dVVIWlhhemcwV0dSaU1FUkpXRmN2YTBocFRWTk1aVzAzY2sxTlMwUnRkRGxLTUVodFozUkxMek5DWnpkSGFHZFBSMHhEWjFCVU9HRm1jREZ3WkZSRmVEUTRPRFp1WjNSTFJqSmpPVTl3YzJkV1JHSlBTME5LVDFGaGEya3JNVlp5Um1rcmQzSnBTbkJtVG1FdmIzSlRhR055VnpJNE5tcE1XWE41ZVdaYVRHdzRVMFYwYmswMk5Xb3hVMHhJSzNkWVZrYzJhbU13UkZsSk9UZzJSblZxUzBwdVVVeFdNR014VFhKM04zTlBOVzR2Wm5kM1JHWnJiMm81WjJaRU5HOTZhSGxHUVZWV1RYRkNVbXhaY2tOa01HOVZibEp5YTJsNVJYcFBVRVpPVEVaNlZIcFVOVlpzUWxoa00wOXRPRzk2YTBKMFQwOWtSRkJhYTFVNWF6a3ZVRU53VEd0SVlYSnVXbFZtU1doWVQzWXdMelpKVTNZd1UwOWpkbW92TVdJNWRIcG1hMDQxUnpONE4yVmlaRWxvTXpSWFprWTJkSEJFY25KWlN6WlFWWEJrTHpSbVNsTXpZbkJZWVhKMFQwcE9LMU5TUkVKWVQzWXdiRFp0TmtWNldqRjZNelZzZHpsck0xSlBNREZYVFVaQ1ZUUklOQ3N5TVd4TlltSTRXSE13ZG14MldWWkljRE5RVlhGTFEyTmhUMFJWYzI1aVRreFRValZqVkVNclpGb3JjSEJXWld4RGJrdGhNVEUzWlU1VVRsRnJVMVpHYVZVeWRGQXJVWEpUVDFaMldscGhWVXh4ZDNaMFVFTm9MMnBrVFdJelVrNDVPVkZQYTI5cWRqaE1jMUZUTUdzdlR6Y3JkRXRtSzA1TlZEazJUbEF3VlhaTWRtbHVVbTA1U200eU5IZFdjbUpFUTJKSFNXUkdOSGhXUWs1S0wzaEtVMlUyVldWdkwwSnFMemxKTHpkRWVUQlFkbkp1U25rMWIzQlRTVkpTV2xnd1lWRlZRVUZRZWxnemFETlZRVUZEUVZGQmVEZFpRVVF2WVc1R1FrTk9aR0Z0U1VGQ1FVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGRVFXMXRiMlZMT1VoNmFVSTFTVGxGUWxodWVEaEJRVUZCUVVGQlFVRkJURUp0UVVsYVMyMTZWMGx1ZUhsUFFVRkJRVUZGYkVaVWExTjFVVzFEUXlJc0ltbHpjM1ZsY25NaU9sdDdJbWxrSWpvaU1qQm1OVGt4TlRndE9HSTNZUzAwTkdWa0xUZzVZbUV0T1dFMk9UTTBOR1V3TURVMk9uTjBjbWx1Wnpwa2FXUTZaWFJvY2pvd2VFVXpPVFEzT1RreU9FTmpORVZtUmtVMU1EYzNORFE0T0RjNE1FSTVaall4Tm1Ka05FSTRNekFpTENKeVpYWnZZMkYwYVc5dUlqcDdJblI1Y0dVaU9pSmxNekV5WmpJMk1TMWtPV0l5TFRRM016RXRPV0k1WVMwek9UQTBNamhrTkRGaE1UWTZjM1J5YVc1bk9rNVBUa1VpZlN3aWJtRnRaU0k2SW1NMU5UZzJaRGN5TFdZMVltUXROR015TVMwNE4yRTRMVEk1TVRVek1XSTFNV1l4WkRwemRISnBibWM2VTBGTlVFeEZJRU5NU1U1SlF5SXNJbWxrWlc1MGFYUjVVSEp2YjJZaU9uc2lkSGx3WlNJNklqZzFZVEZrTkRWbUxUUTFPRE10TkRNM055MDVPVFZtTFdaa09XUXpaamt4WVRWbVl6cHpkSEpwYm1jNlJFNVRMVVJKUkNJc0lteHZZMkYwYVc5dUlqb2laVFZqTkdGalpXVXRaalV6WWkwMFlqUmlMV0kyWTJJdE5qRXhaVEF3WTJJNU1ESmtPbk4wY21sdVp6cGtiMjV2ZEhabGNtbG1lUzUwWlhOMGFXNW5MblpsY21sbWVTNW5iM1l1YzJjaUxDSnJaWGtpT2lKaFptVm1abVJsTkMwME1qbG1MVFJqTjJNdFlqSmxNeTAyTWpCa1lUTmxaVGswTkdFNmMzUnlhVzVuT21ScFpEcGxkR2h5T2pCNFJUTTVORGM1T1RJNFEyTTBSV1pHUlRVd056YzBORGc0Tnpnd1FqbG1OakUyWW1RMFFqZ3pNQ05qYjI1MGNtOXNiR1Z5SW4xOVhTd2lKSFJsYlhCc1lYUmxJanA3SW01aGJXVWlPaUppWVRRM01qY3dNeTA0Wm1VMExUUXlNRGt0T1dRNFppMHhaVEJoTlROa1lqSmxaalE2YzNSeWFXNW5Pa2hGUVV4VVNGOURSVkpVSWl3aWRIbHdaU0k2SWpneE9EWTNaVEkwTFRRM09EQXRORFUyTXkxaU1UZzJMVEl4TnpreE9XWTRZemt4T1RwemRISnBibWM2UlUxQ1JVUkVSVVJmVWtWT1JFVlNSVklpTENKMWNtd2lPaUl5T0dGbU1HRXpNaTFsT0RJNExUUmtOelF0T0RjeU1pMDFOR014T1RkbU5tRXdOalE2YzNSeWFXNW5PbWgwZEhCek9pOHZhR1ZoYkhSb1kyVnlkQzV5Wlc1a1pYSmxjaTV0YjJndVoyOTJMbk5uTHlKOWZTd2ljMmxuYm1GMGRYSmxJanA3SW5SNWNHVWlPaUpUU0VFelRXVnlhMnhsVUhKdmIyWWlMQ0owWVhKblpYUklZWE5vSWpvaVlXSXdZMlk0WXpnek1XWTBabUppTlRVeVltUmlObU01WWpKbFltUmlNV1ZoTXpNMFptRm1OV1JpTm1Zd1lXUXlNalpoWlRnMU1HTTROakF6WkdFeVlTSXNJbkJ5YjI5bUlqcGJYU3dpYldWeWEyeGxVbTl2ZENJNkltRmlNR05tT0dNNE16Rm1OR1ppWWpVMU1tSmtZalpqT1dJeVpXSmtZakZsWVRNek5HWmhaalZrWWpabU1HRmtNakkyWVdVNE5UQmpPRFl3TTJSaE1tRWlmU3dpY0hKdmIyWWlPbHQ3SW5SNWNHVWlPaUpQY0dWdVFYUjBaWE4wWVhScGIyNVRhV2R1WVhSMWNtVXlNREU0SWl3aVkzSmxZWFJsWkNJNklqSXdNakV0TURndE1qUlVNRFE2TWpJNk5UVXVNVGMzV2lJc0luQnliMjltVUhWeWNHOXpaU0k2SW1GemMyVnlkR2x2YmsxbGRHaHZaQ0lzSW5abGNtbG1hV05oZEdsdmJrMWxkR2h2WkNJNkltUnBaRHBsZEdoeU9qQjRSVE01TkRjNU9USTRRMk0wUldaR1JUVXdOemMwTkRnNE56Z3dRamxtTmpFMlltUTBRamd6TUNOamIyNTBjbTlzYkdWeUlpd2ljMmxuYm1GMGRYSmxJam9pTUhnM1lUTXhPVFptWmpSbE5tTTRaVFl6TnpWbU9UY3hPRFkxWm1ObE9XTm1OVEprTWpabU5UUXhNVEF3TTJJeFpUQmtZMkV3TURKa056QTJNekkzTURNM00yVmpaVEZtT0dWak9HSTVPVGxqTXpFd09HTmtPRGd6TURCa1pEazBORFV3TXpjek5qTXdNekUyWlRVNVpqWmtaV0kxTURjd1lqa3pObVUyWXpsbFlqRmpJbjFkZlE9PSJ9XX0sInNpZ25hdHVyZSI6eyJ0eXBlIjoiU0hBM01lcmtsZVByb29mIiwidGFyZ2V0SGFzaCI6IjUxNzQwODcxMDk1ZjhjYzBjMDhjZTlmMjJkYzgwMGU1MDNkZGJjZjhjYjIwMzE4NDFkZDc2ODMyOWU1NmI5YTEiLCJwcm9vZiI6W10sIm1lcmtsZVJvb3QiOiI1MTc0MDg3MTA5NWY4Y2MwYzA4Y2U5ZjIyZGM4MDBlNTAzZGRiY2Y4Y2IyMDMxODQxZGQ3NjgzMjllNTZiOWExIn0sInByb29mIjpbeyJ0eXBlIjoiT3BlbkF0dGVzdGF0aW9uU2lnbmF0dXJlMjAxOCIsImNyZWF0ZWQiOiIyMDIxLTA4LTI0VDA1OjA5OjU5LjM0MVoiLCJwcm9vZlB1cnBvc2UiOiJhc3NlcnRpb25NZXRob2QiLCJ2ZXJpZmljYXRpb25NZXRob2QiOiJkaWQ6ZXRocjoweEUzOTQ3OTkyOENjNEVmRkU1MDc3NDQ4ODc4MEI5ZjYxNmJkNEI4MzAjY29udHJvbGxlciIsInNpZ25hdHVyZSI6IjB4OGJjOGIxM2VlZjQxYjQxYzM0NWFkY2JlYTFmYmFiMzc3NzNkYjVmYmY1ZDE5ZDViNzM1YzM0YzJlYjYyMTIyNzY2MGJlMWVlN2Y1ZmM5YWY4OGYyM2EzZTRmMjc5MTY4N2YxYzA2NGM4MWVlMmQ4MjFjMzQxOGRhMDNkZTQ5MWQxYiJ9XX0="
+ "data": "eyJ2ZXJzaW9uIjoiaHR0cHM6Ly9zY2hlbWEub3BlbmF0dGVzdGF0aW9uLmNvbS8yLjAvc2NoZW1hLmpzb24iLCJkYXRhIjp7ImlkIjoiZmVhMzliNDItMzFmNC00MDFkLTlkYzktMGY3ZTgwZDE3NGZmOnN0cmluZzpjNWFkMTliYi00MDNjLTRiNTItOTcxZC0zZjAxZTg3ODgzZTMiLCJ2ZXJzaW9uIjoiOGM5MjUxYWYtMjc2YS00YzA1LWE1YjctN2JiODRlMjA0ZWFmOnN0cmluZzpwZHQtaGVhbHRoY2VydC12Mi4wIiwidHlwZSI6ImU0YmZlMDRiLTM5NDctNDQyOC1iNjg0LTJiYmRiNzNlNDIyNzpzdHJpbmc6UENSIiwidmFsaWRGcm9tIjoiMmU0NDZkMGMtYTc0ZS00YzA1LWFkMDItNTdhMzhkNDc2NmFlOnN0cmluZzoyMDIxLTA4LTI0VDA0OjIyOjM2LjA2MloiLCJmaGlyVmVyc2lvbiI6Ijc4MTAyZTE2LTRjNTUtNGRjNC05ZWFiLWI3YmE4NDE4NzEyZjpzdHJpbmc6NC4wLjEiLCJmaGlyQnVuZGxlIjp7InJlc291cmNlVHlwZSI6ImI1OGI3NDY1LWZmNGItNDg4My05MDEyLWYxMTczNTk4MzU3ZTpzdHJpbmc6QnVuZGxlIiwidHlwZSI6ImFiNGU0YzU4LWYzYmUtNDVhZi1hY2U2LWFlZGFjNjgzYzcwYTpzdHJpbmc6Y29sbGVjdGlvbiIsImVudHJ5IjpbeyJmdWxsVXJsIjoiOThlNjJhNDUtMjRiMi00N2YxLThlMzUtY2U1NTU1NDQ5YmVjOnN0cmluZzp1cm46dXVpZDpiYTdiN2M4ZC1jNTA5LTRkOWQtYmU0ZS1mOTliNmRlMjllMjMiLCJyZXNvdXJjZSI6eyJyZXNvdXJjZVR5cGUiOiJlMjc2NDg3Ny04NmFkLTQzNGYtYTIyYi01Yjk2MzFiNDVlZjc6c3RyaW5nOlBhdGllbnQiLCJleHRlbnNpb24iOlt7InVybCI6IjA0M2FlMGZjLTIzMmQtNGI5MS1hZDYwLTRiOWZiZGFiMGMyNDpzdHJpbmc6aHR0cDovL2hsNy5vcmcvZmhpci9TdHJ1Y3R1cmVEZWZpbml0aW9uL3BhdGllbnQtbmF0aW9uYWxpdHkiLCJleHRlbnNpb24iOlt7InVybCI6ImI2NzIxZTMzLWRkZWItNDU3ZS1iNDgwLTBlNTFiOGQyZDFlNTpzdHJpbmc6Y29kZSIsInZhbHVlQ29kZWFibGVDb25jZXB0Ijp7InRleHQiOiI0OThhYjJlMy1jOWQ1LTQwZWItYWE2MS1mMWZhOTE3ZmQwZjk6c3RyaW5nOlBhdGllbnQgTmF0aW9uYWxpdHkiLCJjb2RpbmciOlt7InN5c3RlbSI6ImVjYThiNTExLWM3ODMtNDZiNC04M2UyLTAwMjhhYWJlZjI4NDpzdHJpbmc6dXJuOmlzbzpzdGQ6aXNvOjMxNjYiLCJjb2RlIjoiMjMxMTM3MWMtOTA0Ni00ODlkLWI5OTMtZTlhYjIwNTA4OWI3OnN0cmluZzpTRyJ9XX19XX1dLCJpZGVudGlmaWVyIjpbeyJpZCI6ImUxZWRkNGM0LTMwODctNDNlYS05ZGQ0LTRjYjE2NTZiZjFjNzpzdHJpbmc6UFBOIiwidHlwZSI6eyJjb2RpbmciOlt7InN5c3RlbSI6Ijg3NDQ5MDdhLTE3OGEtNDI3OS04YjBlLWEzMWQzZDZkOWI1MTpzdHJpbmc6aHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS92Mi0wMjAzIiwiY29kZSI6IjkxYTQ5NDk1LWNjM2ItNDI2My1iY2M2LTgyNDQyYjU1NDIxNTpzdHJpbmc6UFBOIiwiZGlzcGxheSI6IjQzMTc1ZmZmLWNmMzUtNGI2YS1iNzMwLTg5ZGI2ZTIxNGM0NTpzdHJpbmc6UGFzc3BvcnQgTnVtYmVyIn1dfSwidmFsdWUiOiIxY2MzNGJkZi1iNjljLTQxODktOTY2Yy1jYTI2MDFlMGEzMGE6c3RyaW5nOkU3ODMxMTc3RyJ9LHsiaWQiOiJjNTY1MjU4Yy05YzI0LTQyNjItYWY1OS02ODU1ZTBmM2M5MDk6c3RyaW5nOk5SSUMtRklOIiwidmFsdWUiOiI5YWFjNGI2Mi0yOWEyLTQ4MGEtYTcxZC04NWQ2ZmNjNmNkZDY6c3RyaW5nOlM5MDk4OTg5WiJ9XSwibmFtZSI6W3sidGV4dCI6IjA0N2I3NzVhLWM3NmItNDczYi04MDMwLTBiNmUxNWU5MzBlYjpzdHJpbmc6VGFuIENoZW4gQ2hlbiJ9XSwiZ2VuZGVyIjoiNzFiOWQ0ZmItODA2ZC00YjBkLTlkMjQtZTcxNjljMDUyMWQ1OnN0cmluZzpmZW1hbGUiLCJiaXJ0aERhdGUiOiI5Njg5NDFkOS01MWI2LTRmNjEtOGYyMC0xYmIyMmZmNjVjOTY6c3RyaW5nOjE5OTAtMDEtMTUifX0seyJmdWxsVXJsIjoiZTIxODVmY2MtN2ZjYy00NTlhLWI2NDktYWNmZWE2ZjNjMjNlOnN0cmluZzp1cm46dXVpZDo3NzI5OTcwZS1hYjI2LTQ2OWYtYjNlNS0zNmE0MmVjMjQxNDYiLCJyZXNvdXJjZSI6eyJyZXNvdXJjZVR5cGUiOiI5YThhMjE3ZS1hNmJlLTQ1NzktYjllMy0xMzcwYjdmZGY3MzM6c3RyaW5nOk9ic2VydmF0aW9uIiwic3BlY2ltZW4iOnsidHlwZSI6IjlhNzU0ZWI3LWNjMzktNGUxNi1hNDUwLWEyMjhhMzFkZTVjMzpzdHJpbmc6U3BlY2ltZW4iLCJyZWZlcmVuY2UiOiJjMmIzZGZlNi0zODhmLTRhMGUtOTU2OS05YzY3YzIwYzNiNjE6c3RyaW5nOnVybjp1dWlkOjAyNzViZmFmLTQ4ZmItNDRlMC04MGNkLTljNTA0ZjgwZTZhZSJ9LCJwZXJmb3JtZXIiOlt7InR5cGUiOiJiYTg0NDk1NC1iNDU3LTQzMDAtYmI2MC1kNzNjZDliNTRkZDk6c3RyaW5nOlByYWN0aXRpb25lciIsInJlZmVyZW5jZSI6ImExM2Q4YzllLWZlMWMtNDE5Ni1iYjEzLTczYzhhNjhjNTRhMDpzdHJpbmc6dXJuOnV1aWQ6M2RiZmYwZGUtZDRhNC00ZTFkLTk4YmYtYWY3NDI4YjhhMDRiIn0seyJpZCI6ImM0MzY3NzNhLWE3MzItNDFjOS1hMzdjLTdkNDYwZjZhMmRiYzpzdHJpbmc6TEhQIiwidHlwZSI6ImExYTlhNzQyLTkxNWEtNGYyNi1iNTgzLWIyZTEzMTY3ZDE5NDpzdHJpbmc6T3JnYW5pemF0aW9uIiwicmVmZXJlbmNlIjoiZmU0Mzk2ZjAtZWE4OS00ZjhmLWEwMTUtYThkMDdlZmRjOWZjOnN0cmluZzp1cm46dXVpZDpmYTIzMjhhZi00ODgyLTRlYWEtOGMyOC02NmRhYjQ2OTUwZjEifSx7ImlkIjoiNjYwZGUxNjktNzFmMC00YzMxLWI4ZWMtMDA1ZGE5MjdkNDdjOnN0cmluZzpBTCIsInR5cGUiOiI3ZDA4MjMzNy00YTA0LTRkZTctOTdhZS1hNjU5ZjgwNGRjOGI6c3RyaW5nOk9yZ2FuaXphdGlvbiIsInJlZmVyZW5jZSI6IjgxZDE3Yjc4LWZiNmItNGIzMC1hYjg3LWIyNmI2NjY2OWI4MDpzdHJpbmc6dXJuOnV1aWQ6ODM5YTdjNTQtNmI0MC00MWNiLWIxMGQtOTI5NWQ3ZTc1Zjc3In1dLCJpZGVudGlmaWVyIjpbeyJpZCI6ImZjYWE5Mjk0LWNkYTEtNDg0OS1iOTRjLWI2YjE5NjJjM2IyMTpzdHJpbmc6QUNTTiIsInR5cGUiOnsiY29kaW5nIjpbeyJzeXN0ZW0iOiI2ZDYxMWVjNy0wODJjLTQwM2UtYjhjYS1hMDIzZWI5YTY5Zjk6c3RyaW5nOmh0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjItMDIwMyIsImNvZGUiOiI4MDc3ZTcxMS02ZDFhLTQ1YWQtYmQyZi0yOWQ5YzgwNmY4OGU6c3RyaW5nOkFDU04iLCJkaXNwbGF5IjoiNjBiMjVjMGMtOTIxYS00ODAyLTgyNjAtZGYzZGM2ZmViMWI4OnN0cmluZzpBY2Nlc3Npb24gSUQifV19LCJ2YWx1ZSI6IjIxNzdkMTA0LTJjYTgtNGQ0MC1hMWIzLTY4YjYyOGIxYmI5YTpzdHJpbmc6MTIzNDU2Nzg5In1dLCJjYXRlZ29yeSI6W3siY29kaW5nIjpbeyJzeXN0ZW0iOiI1YTY4NDdjNy1jMjE3LTRiMGQtYTMwNi0xZjE4OTEzZGYyYjQ6c3RyaW5nOmh0dHA6Ly9zbm9tZWQuaW5mby9zY3QiLCJjb2RlIjoiZWU1ZDI0MzAtYzlmNC00NGMzLTgyNjctNTY2YTgwNzZhM2M0OnN0cmluZzo4NDA1MzkwMDYiLCJkaXNwbGF5IjoiMGFhOWI3ZDctYjA4ZC00Mzk0LWE4NTgtMDhiNTQ0NjBiNmYyOnN0cmluZzpDT1ZJRC0xOSJ9XX1dLCJjb2RlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiYTE4MGMxYzYtNDJmYi00ZjBkLWIwYTQtZDk5NWI1YjVhNzE4OnN0cmluZzpodHRwOi8vbG9pbmMub3JnIiwiY29kZSI6ImU2NDQwZDBiLTMzM2MtNGE5Yi1hMjUzLTRkMjc2MmQwZGE3MjpzdHJpbmc6OTQ1MzEtMSIsImRpc3BsYXkiOiIwODMwZTYxYy1lOTdmLTRhMDItOWFlMi0wMzNmNTIwZmU1YjA6c3RyaW5nOlNBUlMtQ29WLTIgKENPVklELTE5KSBSTkEgcGFuZWwgLSBSZXNwaXJhdG9yeSBzcGVjaW1lbiBieSBOQUEgd2l0aCBwcm9iZSBkZXRlY3Rpb24ifV19LCJ2YWx1ZUNvZGVhYmxlQ29uY2VwdCI6eyJjb2RpbmciOlt7InN5c3RlbSI6IjUzNzNjNWM2LTBhN2UtNDJkYy1hZjE5LWI4OTY4MmJkOTkxMzpzdHJpbmc6aHR0cDovL3Nub21lZC5pbmZvL3NjdCIsImNvZGUiOiJlMzJjMWYzNS1kZmI2LTQ0MDEtODkxOC1hMTc2ZDI0NGE0MmI6c3RyaW5nOjI2MDM4NTAwOSIsImRpc3BsYXkiOiJkN2MzM2U4OS0wOGUwLTRhYTktYWQxNS1kNDc5MTJkZDM3ODU6c3RyaW5nOk5lZ2F0aXZlIn1dfSwiZWZmZWN0aXZlRGF0ZVRpbWUiOiIwYjQyNWEzNy0xMDIxLTRhZDMtYmQwMi1hZjUyMTE3YjkzMTU6c3RyaW5nOjIwMjAtMDktMjhUMDY6MTU6MDBaIiwic3RhdHVzIjoiZTM4ZGI5YzMtZTYzNC00NjllLTkwMjQtYjY5NWVmMGExM2IxOnN0cmluZzpmaW5hbCJ9fSx7ImZ1bGxVcmwiOiI3NjU2MDg5Mi05YjY3LTQ4YjItYjdlNS1hOGRkOWNlOGQ5ZjA6c3RyaW5nOnVybjp1dWlkOjAyNzViZmFmLTQ4ZmItNDRlMC04MGNkLTljNTA0ZjgwZTZhZSIsInJlc291cmNlIjp7InJlc291cmNlVHlwZSI6ImE0MzA5OGUxLWYwYzItNDk4NS05N2YzLTk0YmMxOThiNzQ1NDpzdHJpbmc6U3BlY2ltZW4iLCJ0eXBlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiNWUzMjEwNjQtODFjYS00ZjRmLWEzOWItZDRlM2YyOTRjNGQ2OnN0cmluZzpodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiY29kZSI6ImQ3MWJhNTJkLTNhNWMtNDdmMy1hOTQ4LWI4MTZhODI2NGM4NTpzdHJpbmc6MjU4NTAwMDAxIiwiZGlzcGxheSI6Ijc5NzU1YjI5LTEyMzktNDliNi04MDcxLTM4MjdhMGE4M2NiYjpzdHJpbmc6TmFzb3BoYXJ5bmdlYWwgc3dhYiJ9XX0sImNvbGxlY3Rpb24iOnsiY29sbGVjdGVkRGF0ZVRpbWUiOiI0MmY0MDk2Ni1mNGUxLTRkZmYtYTI3Ni01ODVmMmMzNDZmMzc6c3RyaW5nOjIwMjAtMDktMjdUMDY6MTU6MDBaIn19fSx7ImZ1bGxVcmwiOiI5MzU2MDY1OC0zNDcyLTQyZTYtYjllYy0wZGJlZDdlMjYzZjU6c3RyaW5nOnVybjp1dWlkOjNkYmZmMGRlLWQ0YTQtNGUxZC05OGJmLWFmNzQyOGI4YTA0YiIsInJlc291cmNlIjp7InJlc291cmNlVHlwZSI6IjBmM2I2MTE3LTI5YjctNGI0NS1iMzIzLTI0NDcxODdkNjg3MjpzdHJpbmc6UHJhY3RpdGlvbmVyIiwibmFtZSI6W3sidGV4dCI6ImI0MTc2MTFmLWIyYWMtNGVhNy1hN2Q5LWI3ZDQ0NTBkMDYwZjpzdHJpbmc6RHIgTWljaGFlbCBMaW0ifV0sInF1YWxpZmljYXRpb24iOlt7ImNvZGUiOnsiY29kaW5nIjpbeyJzeXN0ZW0iOiIzMWJlMWYwYy1kNDk4LTQ2YTctYjliZC1hYzBkZjJiZmRlZjc6c3RyaW5nOmh0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjItMDIwMyIsImNvZGUiOiJiMWQ4MDRkZC04YWQwLTRiN2ItYWI3OS02N2FiNGFmZjFhNGM6c3RyaW5nOk1DUiIsImRpc3BsYXkiOiIwNzcxMGRiZS0wMDgwLTQzZTktOWVjMy1mZThiNGIxNzViMjA6c3RyaW5nOlByYWN0aXRpb25lciBNZWRpY2FyZSBudW1iZXIifV19LCJpZGVudGlmaWVyIjpbeyJpZCI6IjQ2M2ZmNDhkLWQyN2EtNDdlMS04ZDhiLWYxNGJkMGMyY2M2ZTpzdHJpbmc6TUNSIiwidmFsdWUiOiIxNjhiYzgyOS00YmFmLTQ0MzQtOWUwOS0zY2NiMDRjODgxYjQ6c3RyaW5nOjEyMzQ1NiJ9XSwiaXNzdWVyIjp7InR5cGUiOiI5NjI5OWM1MC02YmViLTQ3ODItODg0ZS1lZjA0ZWVkZjZjN2I6c3RyaW5nOk9yZ2FuaXphdGlvbiIsInJlZmVyZW5jZSI6ImFiMGNlMDhlLThiNDItNDMwMi04Mzk2LTlmMWY3OTZhZmI3OTpzdHJpbmc6dXJuOnV1aWQ6YmM3MDY1ZWUtNDJhYS00NzNhLWE2MTQtYWZkOGE3YjMwYjFlIn19XX19LHsiZnVsbFVybCI6IjQzNzk3ODVkLWRhMzEtNGU0My1hM2ExLWY5MzRlMmY5YWZiMTpzdHJpbmc6dXJuOnV1aWQ6YmM3MDY1ZWUtNDJhYS00NzNhLWE2MTQtYWZkOGE3YjMwYjFlIiwicmVzb3VyY2UiOnsicmVzb3VyY2VUeXBlIjoiYTczY2VkOTUtODRhMi00YzUxLTkxOGEtZTc2ZmM0MGJjMjNmOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiZjQxZThjMTctZDI4OC00NDkwLTk5NjYtZDgwOGRjNTQ4ODUzOnN0cmluZzpNaW5pc3RyeSBvZiBIZWFsdGggKE1PSCkiLCJ0eXBlIjpbeyJjb2RpbmciOlt7InN5c3RlbSI6IjZlZjk1MGQ4LTAxNzQtNDIyOC1hNWIyLWU3NTQ0ZjBlMDY2MjpzdHJpbmc6aHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9vcmdhbml6YXRpb24tdHlwZSIsImNvZGUiOiJmZmMxZGUyYS01NmI4LTQwZDQtODA4MC1hODdjZDA1YzJhY2U6c3RyaW5nOmdvdnQiLCJkaXNwbGF5IjoiYjliZWFlNjUtNjFkMi00OTJkLWExZDctN2U1YzZiNDcwZDRlOnN0cmluZzpHb3Zlcm5tZW50In1dfV0sImNvbnRhY3QiOlt7InRlbGVjb20iOlt7InN5c3RlbSI6ImMxM2M5YzgzLTRmOTgtNDY4Ny1hMTJhLTg2NTllZDJhODc4NDpzdHJpbmc6dXJsIiwidmFsdWUiOiI3MjI5ZjVjYy1hMTRmLTQ1ZGQtYjYwOS0wY2Q2NzBiY2NlOWM6c3RyaW5nOmh0dHBzOi8vd3d3Lm1vaC5nb3Yuc2cifSx7InN5c3RlbSI6IjliODhlZjdhLTE0ZDgtNDA3My04NTFiLTI0MzJjMzNmNDNjNzpzdHJpbmc6cGhvbmUiLCJ2YWx1ZSI6IjMyMGQ3ZmNiLWQyOGEtNGIyNS1hNGYyLWQ5MmMwZDRiNzU3MjpzdHJpbmc6KzY1NjMyNTkyMjAifV0sImFkZHJlc3MiOnsidHlwZSI6IjIxMjQ2Yjg1LTYwMTQtNDY0ZS1iNzMyLTdmZWM2YzA1ZGY1MDpzdHJpbmc6cGh5c2ljYWwiLCJ1c2UiOiJhODIwZmQzOC03YjE1LTQzYzItYTIyMy05NGUxN2Q5NmZlYTA6c3RyaW5nOndvcmsiLCJ0ZXh0IjoiMjJhZjhiZDctOTFhOC00ZGRkLWI2NGUtNzZjMjZmNTAyMGZmOnN0cmluZzpNaW5pc3RyeSBvZiBIZWFsdGgsIDE2IENvbGxlZ2UgUm9hZCwgQ29sbGVnZSBvZiBNZWRpY2luZSBCdWlsZGluZywgU2luZ2Fwb3JlIDE2OTg1NCJ9fV19fSx7ImZ1bGxVcmwiOiJlMzFlNzFlYS02MWMwLTQwZDUtYjBlNC02YWRkMGVjZDUyOWY6c3RyaW5nOnVybjp1dWlkOmZhMjMyOGFmLTQ4ODItNGVhYS04YzI4LTY2ZGFiNDY5NTBmMSIsInJlc291cmNlIjp7InJlc291cmNlVHlwZSI6IjcwMjZmODQzLTgwZGUtNDVmNi05YzJlLTRkN2UzMzgxOWY4NzpzdHJpbmc6T3JnYW5pemF0aW9uIiwibmFtZSI6ImRjMjEyMGM3LWE1M2QtNDY1ZS1hODI0LTI0NTdhOTY5NzNjMTpzdHJpbmc6TWFjUml0Y2hpZSBNZWRpY2FsIENsaW5pYyIsInR5cGUiOlt7ImNvZGluZyI6W3sic3lzdGVtIjoiZTU0ZTM3ZTYtNTgxOC00ZTQ4LTljOTYtZWY1NjlmMzNjNzIwOnN0cmluZzpodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL29yZ2FuaXphdGlvbi10eXBlIiwiY29kZSI6ImE5ZTVmMmExLWFlNzEtNDcyNS05MjVjLTU2ZmMzNDNjN2FmZTpzdHJpbmc6cHJvdiIsImRpc3BsYXkiOiIwZjFjNWZmZi1lYzJkLTRkYjctYjVmMS03MDMyMDBmYTY1NGQ6c3RyaW5nOkhlYWx0aGNhcmUgUHJvdmlkZXIifV0sInRleHQiOiJiMzgyMDg5Zi1iM2NhLTQ0ZjMtODJjOS1mMDAyMmIxZTlmMjM6c3RyaW5nOkxpY2Vuc2VkIEhlYWx0aGNhcmUgUHJvdmlkZXIifV0sImNvbnRhY3QiOlt7InRlbGVjb20iOlt7InN5c3RlbSI6ImVlMjRmYzdlLTRjMGQtNDkzZi1iZTAxLWI0ZDdjYTQxMjVmNTpzdHJpbmc6dXJsIiwidmFsdWUiOiI2ZDMxMWJiMy00ZjQ5LTRkZjQtYmIwNi0zOGQ1MDQyNTg2MzQ6c3RyaW5nOmh0dHBzOi8vd3d3Lm1hY3JpdGNoaWVjbGluaWMuY29tLnNnIn0seyJzeXN0ZW0iOiJhOGY5NmQzNy1mYTZiLTQwY2MtOGRmMi1lMGEwYzE4MDE0Y2U6c3RyaW5nOnBob25lIiwidmFsdWUiOiJkMTRhNmI1YS05NTBiLTRhZDAtYmEzYi01NjdmMTk1M2IzNGE6c3RyaW5nOis2NTYxMjM0NTY3In1dLCJhZGRyZXNzIjp7InR5cGUiOiIzZDk2NzY5ZC1mZmM5LTQ5ZGQtODI1NS02NTIzNjA1Y2MwNTQ6c3RyaW5nOnBoeXNpY2FsIiwidXNlIjoiYTg3N2EyNzktY2Q2OC00ZmQyLTg0NmUtZTUyOGJlOTYzYmQ4OnN0cmluZzp3b3JrIiwidGV4dCI6Ijk3ZjNlZGY5LTk3ZTAtNDcxZC04ZmJiLThmNWUwZDAzMjc1NDpzdHJpbmc6TWFjUml0Y2hpZSBIb3NwaXRhbCwgVGhvbXNvbiBSb2FkLCBTaW5nYXBvcmUgMTIzMDAwIn19XX19LHsiZnVsbFVybCI6ImFiMmRkOWI4LTE2ZTAtNGZhNi1iZTExLTIwMjMzZmU1NjgyZjpzdHJpbmc6dXJuOnV1aWQ6ODM5YTdjNTQtNmI0MC00MWNiLWIxMGQtOTI5NWQ3ZTc1Zjc3IiwicmVzb3VyY2UiOnsicmVzb3VyY2VUeXBlIjoiZTc4NzdhYWQtZTk1Mi00ODQ5LTk2MGQtNTVkZjc4MDdmZjhiOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiYjk5ZmYzNGEtZTg2NS00ZThmLWJjZGUtNzMwOTNmZWI1NjNmOnN0cmluZzpNYWNSaXRjaGllIExhYm9yYXRvcnkiLCJ0eXBlIjpbeyJjb2RpbmciOlt7InN5c3RlbSI6ImUzZDA4MDUyLThlOWUtNDk1MS1iZDlmLTE2ODUwM2UyYjk5MjpzdHJpbmc6aHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9vcmdhbml6YXRpb24tdHlwZSIsImNvZGUiOiIyZGY4OTk0ZS1jOTE4LTQzYTAtYTdiMC0xODcwM2IwMDQyZDA6c3RyaW5nOnByb3YiLCJkaXNwbGF5IjoiN2VhNGFlODUtN2I5Mi00MWEyLWJjN2EtYmMzNmRjNTlmMzU1OnN0cmluZzpIZWFsdGhjYXJlIFByb3ZpZGVyIn1dLCJ0ZXh0IjoiOTg0ZDcyOWEtM2UxNi00OTcyLTk4OWEtMjBjZGJjMTk1MTQ0OnN0cmluZzpBY2NyZWRpdGVkIExhYm9yYXRvcnkifV0sImNvbnRhY3QiOlt7InRlbGVjb20iOlt7InN5c3RlbSI6IjhkYjBjNDdkLWUwMDQtNDczYS05NWUwLWQ0OWU4MzVhOWIzNTpzdHJpbmc6dXJsIiwidmFsdWUiOiJkYzBjMTcwZC0xZmNmLTQ5ZmQtODZjOC04ZWM0N2RmNmMzNTM6c3RyaW5nOmh0dHBzOi8vd3d3Lm1hY3JpdGNoaWVsYWJvcmF0b3J5LmNvbS5zZyJ9LHsic3lzdGVtIjoiNTM0ZjI5YjgtNTg3ZC00YzQzLWE2ZWEtNDhjODQxZTBkMWQ2OnN0cmluZzpwaG9uZSIsInZhbHVlIjoiMjYxYmNhNzktNDg1NC00ZjQxLWJkZmMtOGQ3ZGM4YTQxZjhkOnN0cmluZzorNjU2NzY1NDMyMSJ9XSwiYWRkcmVzcyI6eyJ0eXBlIjoiNDg4MDg3MmItNzZmNS00Mjk1LThhOWQtZTdmYzZjNWEwOWVjOnN0cmluZzpwaHlzaWNhbCIsInVzZSI6ImRmZWJiNTdjLTY5ZDAtNGNhNy1hZWQ1LWMyODY2NTEyZDY2ODpzdHJpbmc6d29yayIsInRleHQiOiIyNGIyYWM1ZS03MTBhLTQ3YmUtOThkOC03YjFkMzg1MTI1NDg6c3RyaW5nOjIgVGhvbXNvbiBBdmVudWUgNCwgU2luZ2Fwb3JlIDA5ODg4OCJ9fV19fV19LCJpc3N1ZXJzIjpbeyJuYW1lIjoiYWViOWIzN2YtNDdhNy00YzY3LWI5YzctMzZkYWQ2YTJhYWFiOnN0cmluZzpTQU1QTEUgSVNTVUVSIChETyBOT1QgVkVSSUZZKSIsImlkIjoiYzQzYTVhZDktZDMwMC00YjVmLTgzYjgtYTQxM2QwYjlmZmIzOnN0cmluZzpkaWQ6ZXRocjoweEUzOTQ3OTkyOENjNEVmRkU1MDc3NDQ4ODc4MEI5ZjYxNmJkNEI4MzAiLCJyZXZvY2F0aW9uIjp7InR5cGUiOiI1ZjVmNmI3Zi1lMGYwLTQyNWQtYTU3Ny0wNWQ4MTlmMGRlMWY6c3RyaW5nOk5PTkUifSwiaWRlbnRpdHlQcm9vZiI6eyJ0eXBlIjoiOGFjOWZlYWMtMWM4My00MWEwLTkzMGMtM2FhODRmOTFkM2U5OnN0cmluZzpETlMtRElEIiwibG9jYXRpb24iOiI2OTk3MjJiNC1kM2YxLTQ5MmQtYTQ2ZS0wY2Q0ZTdiNmRhNTc6c3RyaW5nOmRvbm90dmVyaWZ5LnRlc3RpbmcudmVyaWZ5Lmdvdi5zZyIsImtleSI6IjFmMjU2MTQ2LTJhY2YtNGMzNC04MDQ5LTMwYTM5M2ExNjczMDpzdHJpbmc6ZGlkOmV0aHI6MHhFMzk0Nzk5MjhDYzRFZkZFNTA3NzQ0ODg3ODBCOWY2MTZiZDRCODMwI2NvbnRyb2xsZXIifX1dLCIkdGVtcGxhdGUiOnsibmFtZSI6ImQ5ZjczNjljLTVlZmYtNDg2Ni04NDRjLTc5NzU1Nzk4MmRmYzpzdHJpbmc6SEVBTFRIX0NFUlQiLCJ0eXBlIjoiZTU3MGIxOWUtNzJmZS00ZTA0LWFmMjUtYzVkMjM3ZTRhZGQzOnN0cmluZzpFTUJFRERFRF9SRU5ERVJFUiIsInVybCI6Ijk5YzM2Mjk1LTllNzYtNGE4ZS05ZDNjLWFjMzY5Y2ZhMjIyYzpzdHJpbmc6aHR0cHM6Ly9oZWFsdGhjZXJ0LnJlbmRlcmVyLm1vaC5nb3Yuc2cvIn0sIm5vdGFyaXNhdGlvbk1ldGFkYXRhIjp7InJlZmVyZW5jZSI6ImFjY2E0M2YwLWE4ZTAtNDNiZC1hMDYyLTNhN2Y5NzY5YmUxMTpzdHJpbmc6YzVhZDE5YmItNDAzYy00YjUyLTk3MWQtM2YwMWU4Nzg4M2UzIiwibm90YXJpc2VkT24iOiIzZjY4N2QwYS05OTJhLTRlY2UtOGIyNC0xMjMzMzJkMjRhZjY6c3RyaW5nOjIwMjEtMDktMjdUMDg6NTc6NTkuODgzWiIsInBhc3Nwb3J0TnVtYmVyIjoiMWFmNjVlMjAtNThiYy00YWM3LWFiNTktZmEwOTk2ZDAwMGFjOnN0cmluZzpFNzgzMTE3N0ciLCJ1cmwiOiI0MjdkMzFhMC02YWFkLTRjOTMtOGUxYy0wNjU2OTkyZmJkZWI6c3RyaW5nOmh0dHBzOi8vYWN0aW9uLm9wZW5hdHRlc3RhdGlvbi5jb20vP3E9JTdCJTIydHlwZSUyMiUzQSUyMkRPQ1VNRU5UJTIyJTJDJTIycGF5bG9hZCUyMiUzQSU3QiUyMnVyaSUyMiUzQSUyMmh0dHBzJTNBJTJGJTJGYXBpLnN0b3JhZ2Uuc3RhZ2luZy5ub3RhcmlzZS5pbyUyRmRvY3VtZW50JTJGZGM2NWRjN2QtMDVhMy00ODk1LWFkODAtOGRjNGE5MGFkZDFmJTIyJTJDJTIycGVybWl0dGVkQWN0aW9ucyUyMiUzQSU1QiUyMlZJRVclMjIlMkMlMjJTVE9SRSUyMiU1RCUyQyUyMnJlZGlyZWN0JTIyJTNBJTIyaHR0cHMlM0ElMkYlMkZ3d3cudmVyaWZ5Lmdvdi5zZyUyRnZlcmlmeSUyMiU3RCU3RCMlN0IlMjJrZXklMjIlM0ElMjIxMGQ1OTk1NTk3YjY4YWNhYjM5NDBjNTNkNzQzM2QyYTRlMWE0YzIzMWI2N2Y5OWUyODQ3Y2I0YjE3ODEwOThlJTIyJTdEIiwic2lnbmVkRXVIZWFsdGhDZXJ0cyI6W3sidHlwZSI6IjA5NzlhMzkzLTA3YmItNDUxNC04MWY5LTg1MjlmMjNiMDUxMjpzdHJpbmc6UENSIiwicXIiOiI3NzkxZWNlOS1jYjRlLTRiZDItODVmMS03YmIwNTUxMGVlZGU6c3RyaW5nOkhDMTo2QkZLJUdBIDlIV1JIMjNNTEJDRkdDRk8wV0c0WTVYSEIxUkYlVDcwR1I1UVVOODdNVTZOJTRQK0pXQ0s6T0pEUTQvTTJQK01FMlNNTUczU0EyM1YwNjBNJFIuS01aMjRMRVMxR084KzBERTJQLjVWSUhKR0slMEkzVVBTRUhTRjUkTUkwQTctWUsvQVVLRFVBM0Q6M0suS0o6NldZQ1RYUlIqLzFBNUsqK0pBS1QlMkVNUUQwQUZEIFQgLlBNMksgMDM0UFYyM04gTUxTIEVJJVRJL0FRRFNCMUFEWVRSVU1GJUVLSjBHREo4M1UgUTkxNzkgWlRQNVZON08qTDkyWjNOMzAgTlFKODREJENBKzY4T043K086UklLUVNKM0QuRzhMOEdOQUtNRDZENEVRVFBYNUIuKjNWOEhJN0FZSUJNNVZCK1FKUE5QU0ZaU1MtLzQrRVNCVDUrIEI5NDAyNjIqMzJRQVRCN0MxWVFZTkU1MDBPMTNUUk9NR0dFNDVZLkktSTJGLkwlUTI1WVFBVjJCJEFTODdNRTdLOU5ZUkw6LzhYWFNDUFMvOUw6OUVSNTM3TDg2V09QTTUtQjZET0pJUTZPME5ON0ExUEZKLlQxJU9UWDlFL1QgOUo3LkZFQUtGSk06MU5XWVZCVFI2WVMgQURCN1I6Q05TVURWIEQrM1FQREQlTU1QUEpVSUxLUUJXWExIWkFOLUpMUDlYRTUzMUJISEpYVkRBKkUzRVAkN0E6SEM3KkMgWEtFIEs4V0JZUTcrTjZOTFQyJUFJSElQIDYrTkVYVDVEVEFLU09GS0g5LzZPKkQ1MTE2JEhGWUklRTZUJUJCS0VQTjkuRTlGVVA1NElURldZSk1SMlBRK1QzNjdaNkNJNE9MWDI4UExBKk5aMlMtWkhFSEFUOkZMNzRaOlYrN0tSV1FPMVU2SkgwWDg5OVVMRVEvSTJSOjVCLjhUMUpRNEw6M0sgVk0tN0pSJU5NOlRLMk46MEItSjFHUFBZTEhCMUVFVlNJLzkgWDNRIDAuVkQ2RDgkWFFDTUg6RU9OWE9YU0FETFZZJDhTMVQ5ODFDNjVRRTYtTVE2VDZXOkgkKjZTOVc1WlNDJFJKVjhPRFQ0MjdITUJLRjczJFJMLTZSUzI4LUIvQ01PVzgwKlRGQUUkRDJMKkc1VUtaR0RBTUVNVkhQQTJHVjI4N1BJSVVOQlFGLko0SkYtJFRITEYkUk1XOUUxTDZOL1BNSTVHVkgtOjA3U0dNTDA3WEZOWDYwSzdILlZFUEFTL1BCWVFXLjZMWDk3MkRVTk0uWVAxSlA5MTJPUjlZNVBJNkRXQUdOT1AxTFVWOFBOR1ZaSjg4LktUWkdJV1NITkc2N1VYMzFZMEUwUFZTREZCUlZQTjBUQ0lKVU0kVEZYOVc3OjNUQjI0S05TWTRMSUZESU8lMUMlMFcrLlUgK0pTNkdOOVcwMVUtMTg0S0RWL1ZXQVQuRVVTJUZLK0RGJFRJNlAxSlRaQlNVMEVIQVcqNFc4MjlXNUVDUTdRMFJUVk5ULUZRWVY0N0UzVTE0UlM1MSJ9XX0sImxvZ28iOiJhYjM2NTEwZC1mNjFjLTRiZDgtOWIwNi0yODhlNWY1ZmI1MmE6c3RyaW5nOmRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBZlFBQUFESUNBTUFBQUFweCtQYUFBQUFNMUJNVkVVQUFBRE16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXplQ21pQUFBQUFFSFJTVGxNQVFMK0E3eEFnbjJEUDN6QndyMUNQRWwrSS9RQUFCd2RKUkVGVWVOcnNuZDEyMnlvUVJ2a0hJU0hOK3ovdHlVazlvVEVDUTFiVEJjMjNieU5zMEI1R0lEQVJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBaytJaytJZHg0ZzVONEI5R1EvclBBOUovSVBmU2d3TC9NRUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRHdQNVpQb1A1cjdGSktBZjdjdWZCaWhQTlNrWDVobEE5dStEc1A3ZFgvSksxUDJWUGlTSW9lYkVyTHdWaDVaeCs4QzFZMjJZdFAwRnBmNmhkZWErbXExV2xpeGZlajZSY0R4ajA5c3dYYmJlQlFwaWp1ZzIwYWovU0U4YnZvNWhFdWF2QXVTS3BRZkp4VEc5MWdVckNWNmpTUUUwb1BrZTR3dWtlNzA1RXFwTE5XeHRNdFNrNGp2WEdsZCt0TGx4dlZNTm5ha0Q3bUVuZFlUVldTblY4NjBXVVhsMzRSTXk3QmVtcHlHek43cEFibVhFQTZiZnZLMHUzMnVURktLVk0wcjBZdzFNVGNGdnA4aVZMUEQwKzlnSFF5KzdyU2YzZWVqcDJIdUZjc21sZGlFejBGektYZlNSdzNxZTA4WHFkOWRQNlFLT05ua3U0bEczTlNiL1JCdEt0S3QxdHRkQkppWWIyVkk3YnJjN3RjOElZb3RKekhVQjBjK08rVDNyVFF1TEtzWlJxcHprVFM3ZFpJNHZvK3FKbmRFR084RXplY3lqYWM2L0lUTjJLT1dhVUxJVC9hTGRlVW5xcGRpN1ZXMitLeWMyOUZMM3M3ZTNoaTVMVFNoZVdXcHlXbEg0WHptdldqbmlPaUZOM1lXRGl2V0k5Mld1azVjdDJDMHAzSnpsOVlONjZXSTVJVi9WeUY4NnIxYTE3cEg1VU1DMHBYL0R3WFZVNTI0S3M1WWdEWm1MNHpHejF3ODBwMzNQajFwTXZjaSt0YzJjRklqbWhIMmRXVmZ1YVZMdUxqeTllVHpncU9ycWV3djB2dW0vMUtSNCsyYTZEaDVwWE83VjlPK3M0S1JKUEFEdXhOanRqRkNDay9DbHRFemdmelN0ZXJTdmRaUVplRG95eXF4UWd1UjFsWG1CbEkvOVBTZWJacGJPZThiaXZ0MmJGSzlZYUs0ZUhlN05MTmF0TFAzcUdZTGZMNzFSb012QjZYdTk2SjNUV3Q5TFRvUU01em04WWZ4YkhJRVNQWlhYVy90b3ZUU28rUHFGeE5lc3dacWpPL1gwOU92QmdpOU9jSHc3bGxVdWtjditkaTBybmVxZjk5dVhvS2dsTU13YWxsN3gvbXkwbWxQNXBpVm52M2Z1WisxOTN4bnBUWUx6M1NqZWpQTFhwTzZUdFhielhwZklVY2VKSG1Qc1hBSnNiSSthTDdmdnNwcFZzT1g3dWFkSjlGdnVUNjNQeHNaQVEzVU14eWdMeVd2c2s2L2x1a3U0MGZiOHR0b2xERkZiMVpRUTYvbVJrdjFpVzlpMUo2Qy8xYWVqQWN2UVBWbVV0NkZCMmNuMjZKekRPNFRzYUxjV2VhVGJvN0luMDRYMDg2OTZYeFRucmttekdDSGltbUpwTHVOYVBpNzFmK0tPa3RlNUlLOU9yUzc0aW5nUFNmSmQxb0lTRDlaMG0vaFBoQjBvKy9MZDNNTUdVclNVNjhzOXlVelhTTzNzdWhXK0JoK0pqMG95ejJzblpxZ3BjemQ1aXdwdlJ2bUtmWHBZL1AweWVTZnNnSE9obGl3dExTN2NCU2lSMWFaRlAzMHErQnQzZlhiSzloUTJUcis0clNjKzhkZmxYQ08ybDZwWStQSXM1cEYxeHM0a21iWFZCNnowSldSUmRIKzZCMHc4VmVveWRlV2xWODR4YVVMbnZYMDh2RXpObitISk91K3RmVDFjU2JLUExld3ZXa2MvYzEvWXRzNFNsSitESHB1bnNGMzA2OVhTcnc3VmhRZWw0Z0hOM1F1SE84akVrL084Y0MrVW8vcFhSK3ZHMExTbi9aWHhsWHlJb2M2MFBTaGVsZHd2ZHpiNEhXM0k3MXBPLzB3SFlxT0lwOHY0MUpUNTJUTmpmNWp4MjRmbUU5NldMckc3L2Jzb002ZWhDR3BKOHMwL1pWM2s4cW5UT2RYMUI2NkhPZ2I0YjVLUmZ0bDU0ZkM3b3Z5dlpacFh0Nkp5NG8zWnFlZE92TVRkc2xQVWhEMHJsV3h2Vk1GdFMwUDFVT25QdldrODRYZGIwRElYVy9rSGlNU0xlbTdyTU1LRG10OUowSG1ndEsvM0JnN0doZ09HTENnUFQ4YWZwMXBkVEV4NDg4Nm5ndEtGMmM5T3BzZ1ZEYk9LQ0pPUWFraSsxVnJGaSt3cmlKcGZOYS9vclNoY3JXMjg2akxZc3l5ZlpMbDhTRXRuTTY1ajFTTEgrd1hWRzZqYzBEWUk5ODZGdWpLSm5RTFYwYzFNcnc3c081bi9md3dEZmtvajlnZkQ0b3poeUZBVVZNcUJSbFlyQ2Qwb1VuUnJraXlFek9QRk5MRnpUelQ1VmxCWGQzT204b3prQnRPT2REUFprVTlrOS9QQ3BMa0hhcm5aVWZJaFhPdjAvNklTdjBTT2N2ai8xYjl0emZrTjVHM3g3ZWJkSWgzNFdmRjZ0cERycllLNlBVcGQvNGZKUzNicFhhcnRPSk4rU1JEQlhPdjBsNm02RXpaMXozNWx3OWszUk8wMVdNRkJVNEg0KzIxbE1iYjhYczB2bHZZVkhwM1BVcUtDY2FPRFVzbmJOTFNSNWNUQytkWitwcFZlbENuS2ExMTdlTlROUWtTVkZpVTJ0UCtRclNPVnZaWmFVTHF3dnRQQ2gvamRNYjNSTjk5UU9rb2p2OExzUVMway9PNyt0S2YrTk1UOTZOUDBVdkx2aW5SbTlKbjI0d1ZyYkRDYkdJZEY0eFZCTkoveEpTZTZVZW8vQmovOUkvN0R5MFB2cm5KeTVvcFNJUlJaWDBhUVVBQVB6WDNoM1VBQUNBUUF4N1lBRC9hbkZCQ05kYW1JQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURBbW1vZUs5SHppQjVJOUVCWG54OEFBQUFBQUFBQUFMQm1BSVpLbXpXSW54eU9BQUFBQUVsRlRrU3VRbUNDIiwiYXR0YWNobWVudHMiOlt7ImZpbGVuYW1lIjoiN2YzZmY1ZmMtZTEwOC00OWE2LTljNmUtMTBmMDdlMzg0MGI3OnN0cmluZzpoZWFsdGhjZXJ0LnR4dCIsInR5cGUiOiI3NmU3ZGZkYS1kNGY3LTRlYTEtOTc0Ny02MDcwYTlhNjJiNDA6c3RyaW5nOnRleHQvb3Blbi1hdHRlc3RhdGlvbiIsImRhdGEiOiJjMTU1YzY3Ni05Yzk2LTRmM2MtOTYzYS0yYTU2OTJmMTdiYzU6c3RyaW5nOmV5SjJaWEp6YVc5dUlqb2lhSFIwY0hNNkx5OXpZMmhsYldFdWIzQmxibUYwZEdWemRHRjBhVzl1TG1OdmJTOHlMakF2YzJOb1pXMWhMbXB6YjI0aUxDSmtZWFJoSWpwN0ltbGtJam9pTnpZNU16Y3hNRE10TnpkbFppMDBOMk14TFRrNU1USXRZbUk1TW1Sak5EZ3lOMlZoT25OMGNtbHVaenBqTWpNMU5tVXpZaTA1TURBNUxUUXlNakF0WVRGall5MHhZV1k0WkRNME1qQmtZV1FpTENKMlpYSnphVzl1SWpvaU56RmhOV1V6T1RndFkyRm1NaTAwTkRRNExUZzJOelF0TVRBd1l6Z3hOR1prTnpCaE9uTjBjbWx1Wnpwd1pIUXRhR1ZoYkhSb1kyVnlkQzEyTWk0d0lpd2lkSGx3WlNJNklqTmtaV1ZrTnpFeExUSmlOR010TkRFMlpDMDRZVEJtTFdNeU1UQTFNelF3TURkbU9EcHpkSEpwYm1jNlVFTlNJaXdpZG1Gc2FXUkdjbTl0SWpvaVpEVXdNRGhtTUdJdE9HTTFOQzAwWXpRMUxUazVaR0V0WWpFNE56a3hZMlZpTWpZMk9uTjBjbWx1WnpveU1ESXhMVEE0TFRJMFZEQTBPakl5T2pNMkxqQTJNbG9pTENKbWFHbHlWbVZ5YzJsdmJpSTZJbUZrTnpkallqRXlMVE5sWmpndE5HWmpaaTA0TW1WakxUSmtPVFl5WVRsa1pEUTRORHB6ZEhKcGJtYzZOQzR3TGpFaUxDSm1hR2x5UW5WdVpHeGxJanA3SW5KbGMyOTFjbU5sVkhsd1pTSTZJalpqTURrM1ltSTBMVEkzWWpRdE5EQTBZeTFpTlRWaUxUSTNNbUk0WlRrd05HTXhZenB6ZEhKcGJtYzZRblZ1Wkd4bElpd2lkSGx3WlNJNkltWTFOakF3TURZeUxXSXdaVGd0TkdWbVpTMWhORGhrTFRNeFpqZzBNalk1TVdZd1lqcHpkSEpwYm1jNlkyOXNiR1ZqZEdsdmJpSXNJbVZ1ZEhKNUlqcGJleUptZFd4c1ZYSnNJam9pWkRWaU9EYzRaRFV0TVRka09TMDBPRGN5TFRrM09UY3RZVEUyTVRSaE0yWTBZekUzT25OMGNtbHVaenAxY200NmRYVnBaRHBpWVRkaU4yTTRaQzFqTlRBNUxUUmtPV1F0WW1VMFpTMW1PVGxpTm1SbE1qbGxNak1pTENKeVpYTnZkWEpqWlNJNmV5SnlaWE52ZFhKalpWUjVjR1VpT2lJellXTTVObVJsT1MweU5EUXhMVFJrTXpJdFltRmxOUzA0WkdOaVlqQmtNamd5WldVNmMzUnlhVzVuT2xCaGRHbGxiblFpTENKbGVIUmxibk5wYjI0aU9sdDdJblZ5YkNJNklqUmtOREUzTUdVNUxXRmtNRE10TkRreU55MWhPRGMxTFdReVlqYzBPV1V5WkRCbU5EcHpkSEpwYm1jNmFIUjBjRG92TDJoc055NXZjbWN2Wm1ocGNpOVRkSEoxWTNSMWNtVkVaV1pwYm1sMGFXOXVMM0JoZEdsbGJuUXRibUYwYVc5dVlXeHBkSGtpTENKbGVIUmxibk5wYjI0aU9sdDdJblZ5YkNJNkltSmtaVEkwTlRWbExURTVZall0TkRjeU5pMDRPVGcxTFRSbE9HVmhOV1V4WWpVMU5UcHpkSEpwYm1jNlkyOWtaU0lzSW5aaGJIVmxRMjlrWldGaWJHVkRiMjVqWlhCMElqcDdJblJsZUhRaU9pSmhNbU0zWVRBME15MHhPV1kyTFRReFptRXRPR014T1MxbE5XTTJZMkUzTkRBeU56azZjM1J5YVc1bk9sQmhkR2xsYm5RZ1RtRjBhVzl1WVd4cGRIa2lMQ0pqYjJScGJtY2lPbHQ3SW5ONWMzUmxiU0k2SWpoaFpEVTJORFkzTFdOaU16TXROREJsWXkxaU5USXhMV0UzTVRJek1XVmhNR1UxTnpwemRISnBibWM2ZFhKdU9tbHpienB6ZEdRNmFYTnZPak14TmpZaUxDSmpiMlJsSWpvaVlqUTBNbUZpTlRRdFpHTTROQzAwTUdObUxXRTBNbU10WXpjMk1tSmhNVGcwTVRZNU9uTjBjbWx1WnpwVFJ5SjlYWDE5WFgxZExDSnBaR1Z1ZEdsbWFXVnlJanBiZXlKcFpDSTZJalJpWlRrNFpHRmlMV0pqWldZdE5HUTJNUzA0WkRZMkxUTmlZMk0yWmpCaVptSXpZanB6ZEhKcGJtYzZVRkJPSWl3aWRIbHdaU0k2ZXlKamIyUnBibWNpT2x0N0luTjVjM1JsYlNJNklqSTRPVEl5TkdSbUxUSTBabUl0TkRneFppMDRPVE0wTFRWaFlUVmtOR0l4Tm1WbU16cHpkSEpwYm1jNmFIUjBjRG92TDNSbGNtMXBibTlzYjJkNUxtaHNOeTV2Y21jdlEyOWtaVk41YzNSbGJTOTJNaTB3TWpBeklpd2lZMjlrWlNJNkltWm1NR1V3T1RKaUxUTmtPV0l0TkRFM05pMDRZalprTFRNeU1HRXlPVFZoWkRsaVl6cHpkSEpwYm1jNlVGQk9JaXdpWkdsemNHeGhlU0k2SW1VNU5tSXhOalEwTFRnMFkyVXRORGxrWVMwNE5XUmtMVFEyWXpJMU5qY3hZV05qTXpwemRISnBibWM2VUdGemMzQnZjblFnVG5WdFltVnlJbjFkZlN3aWRtRnNkV1VpT2lJek1UUTRZV1kyWWkweE1UaG1MVFE1WldFdE9XUXpPUzFoT0RCbFl6bGpNemhqTUdJNmMzUnlhVzVuT2tVM09ETXhNVGMzUnlKOUxIc2lhV1FpT2lJNU5HVXpORGs1WlMwNFlXVTRMVFJpWmpjdE9EZ3hNUzB3WkdNeU1HUm1NVFl3T1RRNmMzUnlhVzVuT2s1U1NVTXRSa2xPSWl3aWRtRnNkV1VpT2lJMk1USmpOREV5TUMxaE0yRXdMVFEwTVdRdE9URm1NeTFqTmpVd1lqbGhNMlUxTVRJNmMzUnlhVzVuT2xNNU1EazRPVGc1V2lKOVhTd2libUZ0WlNJNlczc2lkR1Y0ZENJNklqRTVZamhsTURJMExXTXdZekF0TkRRME5TMWlNVEUzTFRWak1qWTRabUZtWXpGbFpUcHpkSEpwYm1jNlZHRnVJRU5vWlc0Z1EyaGxiaUo5WFN3aVoyVnVaR1Z5SWpvaVkyUTVaVEUwTVdRdFlUWmxZaTAwWkRrNExUazNNMlF0WkRZd01UY3pOV1V6TlRJNE9uTjBjbWx1WnpwbVpXMWhiR1VpTENKaWFYSjBhRVJoZEdVaU9pSTJOVE5oWW1Gak9TMHlNalV4TFRRelkyWXRPV1JpWXkxbE5XTTJOemcyTTJVM00yVTZjM1J5YVc1bk9qRTVPVEF0TURFdE1UVWlmWDBzZXlKbWRXeHNWWEpzSWpvaVpUUXlaRFF3WTJVdE9UWTNZaTAwWVRFeUxUa3pNRGt0WldVMU1tVTJNR05oTTJVME9uTjBjbWx1WnpwMWNtNDZkWFZwWkRvM056STVPVGN3WlMxaFlqSTJMVFEyT1dZdFlqTmxOUzB6Tm1FME1tVmpNalF4TkRZaUxDSnlaWE52ZFhKalpTSTZleUp5WlhOdmRYSmpaVlI1Y0dVaU9pSTNZVFF6TWpneE1TMWpNVFZoTFRRM01EUXRZakEyWXkweU56VXpZVFl6T1RFMU1qWTZjM1J5YVc1bk9rOWljMlZ5ZG1GMGFXOXVJaXdpYzNCbFkybHRaVzRpT25zaWRIbHdaU0k2SW1VMFl6RTJOREpsTFRGaE1UQXROR1k1WmkxaFlXVTJMV1V3TmpVM1lqSmtaalU0TURwemRISnBibWM2VTNCbFkybHRaVzRpTENKeVpXWmxjbVZ1WTJVaU9pSXpNVFkwWXpWbVppMWpPV00xTFRReFpEVXRZbVl6Tnkwd1pETmhZakV3TVRJMU1URTZjM1J5YVc1bk9uVnlianAxZFdsa09qQXlOelZpWm1GbUxUUTRabUl0TkRSbE1DMDRNR05rTFRsak5UQTBaamd3WlRaaFpTSjlMQ0p3WlhKbWIzSnRaWElpT2x0N0luUjVjR1VpT2lJMU9USmpaRFZoTWkxa05tRTBMVFJoT0RjdE9ETmpOaTFpTW1RMVlUVTVZMkUxWXpNNmMzUnlhVzVuT2xCeVlXTjBhWFJwYjI1bGNpSXNJbkpsWm1WeVpXNWpaU0k2SWpFMk1UVTVNVGxqTFRJeE1XVXRORGMyWlMwNU5qVTJMVGRrTnpreU5HUXlZekU1TlRwemRISnBibWM2ZFhKdU9uVjFhV1E2TTJSaVptWXdaR1V0WkRSaE5DMDBaVEZrTFRrNFltWXRZV1kzTkRJNFlqaGhNRFJpSW4wc2V5SnBaQ0k2SW1FeFpEaGtNRFJtTFdJNFpUUXRORFk0WXkxaE9UUXpMV1EwT1daa05XVmhZbVprTkRwemRISnBibWM2VEVoUUlpd2lkSGx3WlNJNkltTTFNek5rTmpnM0xUZGtNbVl0TkRaaE9DMDRPR00xTFRObFlXSXhaREJpT1RVek5qcHpkSEpwYm1jNlQzSm5ZVzVwZW1GMGFXOXVJaXdpY21WbVpYSmxibU5sSWpvaU9ERXlZVGxpWWpVdFlUZ3dNUzAwWWpkbExXSmpNV0V0TUdRMk56VXlNR1ZoTm1ZNU9uTjBjbWx1WnpwMWNtNDZkWFZwWkRwbVlUSXpNamhoWmkwME9EZ3lMVFJsWVdFdE9HTXlPQzAyTm1SaFlqUTJPVFV3WmpFaWZTeDdJbWxrSWpvaU9UazVNMkkwT0dZdE9UUTRZeTAwTnpKa0xXRmpNMkV0WXpoalpqUXhNVEZsTkdOak9uTjBjbWx1WnpwQlRDSXNJblI1Y0dVaU9pSXdaamhqTWpRMk5TMDRaamd5TFRRMVltVXRZVE5sTkMxa05qazJORGRsTm1FNU16STZjM1J5YVc1bk9rOXlaMkZ1YVhwaGRHbHZiaUlzSW5KbFptVnlaVzVqWlNJNkltUTVNVFptTTJKbUxUZGpaREV0TkRnMU5pMDVORFkyTFdJeFl6WTNNV1UwWlRVMVpUcHpkSEpwYm1jNmRYSnVPblYxYVdRNk9ETTVZVGRqTlRRdE5tSTBNQzAwTVdOaUxXSXhNR1F0T1RJNU5XUTNaVGMxWmpjM0luMWRMQ0pwWkdWdWRHbG1hV1Z5SWpwYmV5SnBaQ0k2SWpNNU9UWXhNR0ZpTFROak9USXRORFpqTkMwNU1qQTBMVGt3Tm1Nek16TTBZelUzT0RwemRISnBibWM2UVVOVFRpSXNJblI1Y0dVaU9uc2lZMjlrYVc1bklqcGJleUp6ZVhOMFpXMGlPaUprTmpnMU1UYzFOQzFtTVdNd0xUUmxOV010WWpRek1DMWpNekptTVRZNVl6VTRNak02YzNSeWFXNW5PbWgwZEhBNkx5OTBaWEp0YVc1dmJHOW5lUzVvYkRjdWIzSm5MME52WkdWVGVYTjBaVzB2ZGpJdE1ESXdNeUlzSW1OdlpHVWlPaUptWXpOaE5UTTJZeTFsTUdGbExUUTFabVV0WWpsaU9TMDNaalUwWlRKbU4yUmtaamc2YzNSeWFXNW5Pa0ZEVTA0aUxDSmthWE53YkdGNUlqb2lOVEJpWkRobVl6a3ROREV3WlMwME9URXdMV0l5TkdZdE5qRmlOMkkzWVRJMVpqRTRPbk4wY21sdVp6cEJZMk5sYzNOcGIyNGdTVVFpZlYxOUxDSjJZV3gxWlNJNklqZGtZakprWkRGaExUZzNPVFl0TkdFd1l5MDVORGxqTFdNMFlqUTNOamRtTXpnd1pUcHpkSEpwYm1jNk1USXpORFUyTnpnNUluMWRMQ0pqWVhSbFoyOXllU0k2VzNzaVkyOWthVzVuSWpwYmV5SnplWE4wWlcwaU9pSTBObVl4TlRVd1lTMWhNR1l6TFRSaVlXTXRPV013WXkweE9UYzJOakptTkRkbVpXVTZjM1J5YVc1bk9taDBkSEE2THk5emJtOXRaV1F1YVc1bWJ5OXpZM1FpTENKamIyUmxJam9pTlRBNU1tVTNNVGN0TTJSaFlpMDBPVEl3TFdGbU0yRXROREEyTlRFMU1UUmlaRFppT25OMGNtbHVaem80TkRBMU16a3dNRFlpTENKa2FYTndiR0Y1SWpvaU9UZGlaV1prT0RJdE4ySTRZeTAwTTJJMkxUaGxaak10WmpGaE9XVTJZalE0T0dVMU9uTjBjbWx1WnpwRFQxWkpSQzB4T1NKOVhYMWRMQ0pqYjJSbElqcDdJbU52WkdsdVp5STZXM3NpYzNsemRHVnRJam9pTW1JNE1EZGtZelV0TW1aaE9TMDBZVEUxTFRnNFlXUXRORGs0T1daa09EWXlObUpqT25OMGNtbHVaenBvZEhSd09pOHZiRzlwYm1NdWIzSm5JaXdpWTI5a1pTSTZJbUV3WXpFM1pHWmhMVFZoTVRrdE5ERXdZeTFoWkdKbUxUZzNaamxqTXpZeVpXWmxNVHB6ZEhKcGJtYzZPVFExTXpFdE1TSXNJbVJwYzNCc1lYa2lPaUprTlROa1pXUmxOaTFoWW1FM0xUUTROREV0T1Rjek1DMW1Oek5tT1Roa05EUXlNakE2YzNSeWFXNW5PbE5CVWxNdFEyOVdMVElnS0VOUFZrbEVMVEU1S1NCU1RrRWdjR0Z1Wld3Z0xTQlNaWE53YVhKaGRHOXllU0J6Y0dWamFXMWxiaUJpZVNCT1FVRWdkMmwwYUNCd2NtOWlaU0JrWlhSbFkzUnBiMjRpZlYxOUxDSjJZV3gxWlVOdlpHVmhZbXhsUTI5dVkyVndkQ0k2ZXlKamIyUnBibWNpT2x0N0luTjVjM1JsYlNJNklqSTJORFUyTldWaExUZzVNamd0TkRoa1lTMDRORFV6TFRSaFpHSmxaR00wTm1JNE56cHpkSEpwYm1jNmFIUjBjRG92TDNOdWIyMWxaQzVwYm1adkwzTmpkQ0lzSW1OdlpHVWlPaUpsTkRnMlpqUXdOaTB3TldOakxUUTFNbUV0T0dZM09TMWpNVEpoT1Rsa01tSTNORFk2YzNSeWFXNW5PakkyTURNNE5UQXdPU0lzSW1ScGMzQnNZWGtpT2lKaU1tWTBNMlkwWVMxbU9XUm1MVFEyWW1RdE9UQXpPUzFsT0RKalptWTRPV0UxTldRNmMzUnlhVzVuT2s1bFoyRjBhWFpsSW4xZGZTd2laV1ptWldOMGFYWmxSR0YwWlZScGJXVWlPaUl6WXpobU1ESTNNeTAxTWpsaUxUUXlZell0WVRka01TMDVaalZsTVdNek1ERm1ZVE02YzNSeWFXNW5Pakl3TWpBdE1Ea3RNamhVTURZNk1UVTZNREJhSWl3aWMzUmhkSFZ6SWpvaU4yTmhNR0prWm1RdFlqUmtNQzAwTURJMUxUbGxNR010WVRJMk9XSTJaRFExWlRObE9uTjBjbWx1WnpwbWFXNWhiQ0o5ZlN4N0ltWjFiR3hWY213aU9pSTFORGcyTTJNM05DMWtaalprTFRRd01tSXRZbVprTVMwM01UUTRZV1prTVRZeE5qZzZjM1J5YVc1bk9uVnlianAxZFdsa09qQXlOelZpWm1GbUxUUTRabUl0TkRSbE1DMDRNR05rTFRsak5UQTBaamd3WlRaaFpTSXNJbkpsYzI5MWNtTmxJanA3SW5KbGMyOTFjbU5sVkhsd1pTSTZJbVUyWmpobFpqQXdMVGc0T0dJdE5EazVZeTFpTURBMExUUmtNV05rWldRM1lqTm1NRHB6ZEhKcGJtYzZVM0JsWTJsdFpXNGlMQ0owZVhCbElqcDdJbU52WkdsdVp5STZXM3NpYzNsemRHVnRJam9pTURGbE5HSTRZVEl0TVRjNU15MDBOVGt3TFRreVpXTXROekUwTUdRNU1qaG1ZVGMyT25OMGNtbHVaenBvZEhSd09pOHZjMjV2YldWa0xtbHVabTh2YzJOMElpd2lZMjlrWlNJNkltWTFOR0k0TWpFM0xXTmhPRFV0TkdJMU5DMDRZVE5pTFdZNU9URmtaVEUzT0RZellUcHpkSEpwYm1jNk1qVTROVEF3TURBeElpd2laR2x6Y0d4aGVTSTZJalU1WkROaE9UazNMVGszWmpBdE5HVTBNaTA0TmpNMExUVmtaREF3TkdFMU4yWXpaRHB6ZEhKcGJtYzZUbUZ6YjNCb1lYSjVibWRsWVd3Z2MzZGhZaUo5WFgwc0ltTnZiR3hsWTNScGIyNGlPbnNpWTI5c2JHVmpkR1ZrUkdGMFpWUnBiV1VpT2lJeU4yVTFZakl4TXkwd1lqSTRMVFEyWW1VdFlUVXlaaTFoTkRoak9UY3hNVGN5TUdFNmMzUnlhVzVuT2pJd01qQXRNRGt0TWpkVU1EWTZNVFU2TURCYUluMTlmU3g3SW1aMWJHeFZjbXdpT2lKbU5UYzFabUkzTUMwM00yTXpMVFJsWlRZdE9UUmpZaTFrWVRNNU1qTmlOVGt6T0dVNmMzUnlhVzVuT25WeWJqcDFkV2xrT2pOa1ltWm1NR1JsTFdRMFlUUXROR1V4WkMwNU9HSm1MV0ZtTnpReU9HSTRZVEEwWWlJc0luSmxjMjkxY21ObElqcDdJbkpsYzI5MWNtTmxWSGx3WlNJNkltSmxNR015TlRSbExUbG1Oall0TkRnd1l5MDVOemcxTFdWbVpUSXpaRFkxTUdSbE9EcHpkSEpwYm1jNlVISmhZM1JwZEdsdmJtVnlJaXdpYm1GdFpTSTZXM3NpZEdWNGRDSTZJbVZrWVRrd04yWTVMV1l4TW1RdE5EYzFPUzFpTlRaakxXTTVPV0UzT0RZNVpEWm1aRHB6ZEhKcGJtYzZSSElnVFdsamFHRmxiQ0JNYVcwaWZWMHNJbkYxWVd4cFptbGpZWFJwYjI0aU9sdDdJbU52WkdVaU9uc2lZMjlrYVc1bklqcGJleUp6ZVhOMFpXMGlPaUpoTmpVNFltRmtOeTAyTkdSaUxUUTJaalF0T1RVMk5TMDBNekE0TWpVeU5tUmxOV1E2YzNSeWFXNW5PbWgwZEhBNkx5OTBaWEp0YVc1dmJHOW5lUzVvYkRjdWIzSm5MME52WkdWVGVYTjBaVzB2ZGpJdE1ESXdNeUlzSW1OdlpHVWlPaUppWkRBeFlXUXdZeTA1T1RGakxUUXpOamd0WVRrM1lTMHdZVEl4T0RjME9UQTNaRFk2YzNSeWFXNW5PazFEVWlJc0ltUnBjM0JzWVhraU9pSXdOamN6WVRnelppMDROek5pTFRRNE1EUXRZVGRpTXkwM00yVmhOR0V3Wm1RMlpUUTZjM1J5YVc1bk9sQnlZV04wYVhScGIyNWxjaUJOWldScFkyRnlaU0J1ZFcxaVpYSWlmVjE5TENKcFpHVnVkR2xtYVdWeUlqcGJleUpwWkNJNklqUmtZalJsWlRFM0xUTXlZamd0TkRrNE15MWhaVE5oTFdJd00ySmtaR0l5WlRVeU5UcHpkSEpwYm1jNlRVTlNJaXdpZG1Gc2RXVWlPaUl6TVRBMllXUmlZaTFsT1dWbExUUmlNbVF0T0dOa1ppMWlNMkV3WmpBeFlqWXlZbVU2YzNSeWFXNW5PakV5TXpRMU5pSjlYU3dpYVhOemRXVnlJanA3SW5SNWNHVWlPaUl4TVRWa05tUmxOaTB6TlRSakxUUTJZVGt0WWpWallpMHlZMlppWVRJd09UZzNNREE2YzNSeWFXNW5Pazl5WjJGdWFYcGhkR2x2YmlJc0luSmxabVZ5Wlc1alpTSTZJbUkyWW1OaE5qRTBMV1ZtWkdNdE5EWTRNeTA0TVdZekxUUTFPR1F6TWpRNE9HWm1aVHB6ZEhKcGJtYzZkWEp1T25WMWFXUTZZbU0zTURZMVpXVXROREpoWVMwME56TmhMV0UyTVRRdFlXWmtPR0UzWWpNd1lqRmxJbjE5WFgxOUxIc2lablZzYkZWeWJDSTZJbVk0WWpGaE56STRMVGM1WW1ZdE5ESmtNUzFpTXpSaUxUaG1abVEyWlRNek5tSXhPRHB6ZEhKcGJtYzZkWEp1T25WMWFXUTZZbU0zTURZMVpXVXROREpoWVMwME56TmhMV0UyTVRRdFlXWmtPR0UzWWpNd1lqRmxJaXdpY21WemIzVnlZMlVpT25zaWNtVnpiM1Z5WTJWVWVYQmxJam9pWTJZNU5ERXlaV1F0TnpNNE55MDBZVEl6TFRrNFpUa3ROREl4TWpSaE5UVmxaR1prT25OMGNtbHVaenBQY21kaGJtbDZZWFJwYjI0aUxDSnVZVzFsSWpvaU1tVmxPREprTm1FdE1UYzVaaTAwWVdFd0xXRTJZamt0T1RnNE16TmhabVF6WVdaa09uTjBjbWx1WnpwTmFXNXBjM1J5ZVNCdlppQklaV0ZzZEdnZ0tFMVBTQ2tpTENKMGVYQmxJanBiZXlKamIyUnBibWNpT2x0N0luTjVjM1JsYlNJNklqUXpaR1ZsTWpNeExXSmpZek10TkRnd01DMWhNakEyTFdRNFlUSTBaV0kxTlRGaVlqcHpkSEpwYm1jNmFIUjBjRG92TDNSbGNtMXBibTlzYjJkNUxtaHNOeTV2Y21jdlEyOWtaVk41YzNSbGJTOXZjbWRoYm1sNllYUnBiMjR0ZEhsd1pTSXNJbU52WkdVaU9pSmpaRFU0WWpNeFppMDRNV1prTFRRek9HWXRPR1UzWlMweVlqRTJZVGN6TjJJMVpqVTZjM1J5YVc1bk9tZHZkblFpTENKa2FYTndiR0Y1SWpvaU1HWTRNMlEwWW1FdFkyWm1ZaTAwT0RnMUxUbGhNVFF0WkRBMFlXSXhZalEyWlRJeU9uTjBjbWx1WnpwSGIzWmxjbTV0Wlc1MEluMWRmVjBzSW1OdmJuUmhZM1FpT2x0N0luUmxiR1ZqYjIwaU9sdDdJbk41YzNSbGJTSTZJamxsTVRrMU9EUTFMV00yTmpRdE5HUXpOeTFoWkdabUxXVXhNMlF6TVdZNFl6Z3lNVHB6ZEhKcGJtYzZkWEpzSWl3aWRtRnNkV1VpT2lKaE5UaGhNRGxsTUMwME1qRXhMVFE0WkdZdE9UUXpNaTAwWldaalpXVmlOR1kzWldJNmMzUnlhVzVuT21oMGRIQnpPaTh2ZDNkM0xtMXZhQzVuYjNZdWMyY2lmU3g3SW5ONWMzUmxiU0k2SW1KbE1HRXlZV0k0TFRObVpqWXROREJpT1MwNVlqa3dMVGcxTWpVeVpURm1PVE15WmpwemRISnBibWM2Y0dodmJtVWlMQ0oyWVd4MVpTSTZJakl4TVRJNE1EUTRMV1ppTmpVdE5EWXpOUzA0TURFeUxUVmlORFJrTlRNd1pUa3hNRHB6ZEhKcGJtYzZLelkxTmpNeU5Ua3lNakFpZlYwc0ltRmtaSEpsYzNNaU9uc2lkSGx3WlNJNkltTXlOMkZqWkdNNExUQTJOVGt0TkRFM01pMDVZalUyTFdFMk1XVTNaalExTVdFeE5EcHpkSEpwYm1jNmNHaDVjMmxqWVd3aUxDSjFjMlVpT2lKa05XVmpPRFU1WVMxa056WmxMVFJsWldJdFlqRTBNUzAwWmpVd056bGlZbU0yT1RZNmMzUnlhVzVuT25kdmNtc2lMQ0owWlhoMElqb2lNekZoWVdOaU9XWXRNRGM1WmkwME9UZGhMVGd4TlRVdFpqRmpORE5oT0daaE16azFPbk4wY21sdVp6cE5hVzVwYzNSeWVTQnZaaUJJWldGc2RHZ3NJREUySUVOdmJHeGxaMlVnVW05aFpDd2dRMjlzYkdWblpTQnZaaUJOWldScFkybHVaU0JDZFdsc1pHbHVaeXdnVTJsdVoyRndiM0psSURFMk9UZzFOQ0o5ZlYxOWZTeDdJbVoxYkd4VmNtd2lPaUkyT1daa05tWmlZaTFpTUdSaExUUTNaRGt0WVdFeU5DMHpNV0ZqTlRZMU5ESTROemc2YzNSeWFXNW5PblZ5YmpwMWRXbGtPbVpoTWpNeU9HRm1MVFE0T0RJdE5HVmhZUzA0WXpJNExUWTJaR0ZpTkRZNU5UQm1NU0lzSW5KbGMyOTFjbU5sSWpwN0luSmxjMjkxY21ObFZIbHdaU0k2SWpGbFpqQTJNMlJsTFRJM05tRXRORGt5TlMwNU16VXlMV05sWm1NNU5qTTNaV0kyTURwemRISnBibWM2VDNKbllXNXBlbUYwYVc5dUlpd2libUZ0WlNJNklqTm1ZelEwWTJNd0xXVmlNelF0TkdZMk55MWhOelU0TFRNeVlqWTRaVFpsWlRCa05qcHpkSEpwYm1jNlRXRmpVbWwwWTJocFpTQk5aV1JwWTJGc0lFTnNhVzVwWXlJc0luUjVjR1VpT2x0N0ltTnZaR2x1WnlJNlczc2ljM2x6ZEdWdElqb2lOMlZpTldKbU9UUXROREF6TUMwME1UbGhMV0UxWVRBdFkyUmlNMlE1TnpReU5XRmtPbk4wY21sdVp6cG9kSFJ3T2k4dmRHVnliV2x1YjJ4dloza3VhR3czTG05eVp5OURiMlJsVTNsemRHVnRMMjl5WjJGdWFYcGhkR2x2YmkxMGVYQmxJaXdpWTI5a1pTSTZJalpoTnpVM1l6YzJMV05sTlRRdE5HVmtaaTA1WkdFMExUbG1aV0ZqWVdGbVpXRmlPVHB6ZEhKcGJtYzZjSEp2ZGlJc0ltUnBjM0JzWVhraU9pSmxOREUwT0dZM09TMDVZMll4TFRRNU16Y3RZakprWXkwME1tVXpZamczTWpoaVlqYzZjM1J5YVc1bk9raGxZV3gwYUdOaGNtVWdVSEp2ZG1sa1pYSWlmVjBzSW5SbGVIUWlPaUl5TlRJMk16QmpOUzFqWW1ObExUUmlNRE10WVRjME1DMWtNalJoTVRCaE9EWTNNRGc2YzNSeWFXNW5Pa3hwWTJWdWMyVmtJRWhsWVd4MGFHTmhjbVVnVUhKdmRtbGtaWElpZlYwc0ltTnZiblJoWTNRaU9sdDdJblJsYkdWamIyMGlPbHQ3SW5ONWMzUmxiU0k2SW1JNFltWXlZbUZtTFROa01HRXRORFJqT1MxaVlUaGlMVE5oTkdGall6VmpNR000TVRwemRISnBibWM2ZFhKc0lpd2lkbUZzZFdVaU9pSm1aamMyTURjME1pMHdNRE5oTFRSbFkySXRPRFk0TlMweFkyWTVNRFE0WWpReFpUazZjM1J5YVc1bk9taDBkSEJ6T2k4dmQzZDNMbTFoWTNKcGRHTm9hV1ZqYkdsdWFXTXVZMjl0TG5ObkluMHNleUp6ZVhOMFpXMGlPaUpsT0RJNVpURmxOaTA0TUdNekxUUmhNbVV0T0RSbE1pMDJOVE5qWWpka1l6UTROR0k2YzNSeWFXNW5PbkJvYjI1bElpd2lkbUZzZFdVaU9pSXpaR05rWVRBeE5pMW1OVEkwTFRSbU1EZ3RPREJtTnkweE1tTXlOMkl3Tm1JNE5tTTZjM1J5YVc1bk9pczJOVFl4TWpNME5UWTNJbjFkTENKaFpHUnlaWE56SWpwN0luUjVjR1VpT2lKbU9XTTNObUl4WkMxaFpEZzFMVFF5TldZdFlqUmhaaTAxTkRBNU16QXhOemsxTVdJNmMzUnlhVzVuT25Cb2VYTnBZMkZzSWl3aWRYTmxJam9pTkRaa09EYzVOekV0T0dabE15MDBZbU5pTFRreE5UQXRNREl4WW1RME1qRXlaV1UxT25OMGNtbHVaenAzYjNKcklpd2lkR1Y0ZENJNkltTTNOVGxoWWprd0xUSXdOVE10TkRFMU1DMDVNMk5oTFRReU5HSXhOV1ptTmpVNE1qcHpkSEpwYm1jNlRXRmpVbWwwWTJocFpTQkliM053YVhSaGJDd2dWR2h2YlhOdmJpQlNiMkZrTENCVGFXNW5ZWEJ2Y21VZ01USXpNREF3SW4xOVhYMTlMSHNpWm5Wc2JGVnliQ0k2SWpkbU1URTNPVGc0TFdFMVpXVXROREE1WXkxaFptWTRMVFppTW1Zd1pXSXhPVGhoTURwemRISnBibWM2ZFhKdU9uVjFhV1E2T0RNNVlUZGpOVFF0Tm1JME1DMDBNV05pTFdJeE1HUXRPVEk1TldRM1pUYzFaamMzSWl3aWNtVnpiM1Z5WTJVaU9uc2ljbVZ6YjNWeVkyVlVlWEJsSWpvaVpHSXhObVF5TUdZdFpqbGpPQzAwTkRrd0xXSTFOREF0TmpKaVl6TTROV1psT1RSaE9uTjBjbWx1WnpwUGNtZGhibWw2WVhScGIyNGlMQ0p1WVcxbElqb2lNbVUzTWpnMFpURXRPV1ZqTlMwMFpqVTVMV0UxWVRBdE9EVTNabVl5WXpFNVpXSTBPbk4wY21sdVp6cE5ZV05TYVhSamFHbGxJRXhoWW05eVlYUnZjbmtpTENKMGVYQmxJanBiZXlKamIyUnBibWNpT2x0N0luTjVjM1JsYlNJNkltSmpPRFZpWTJaa0xXWTVOV0V0TkRWaE1pMWhPVGc1TFdRNE16TXpOR1F6WVRjd1pEcHpkSEpwYm1jNmFIUjBjRG92TDNSbGNtMXBibTlzYjJkNUxtaHNOeTV2Y21jdlEyOWtaVk41YzNSbGJTOXZjbWRoYm1sNllYUnBiMjR0ZEhsd1pTSXNJbU52WkdVaU9pSXpNMkV6WTJObU55MHdPRGMxTFRRellXSXRPV0psTUMwMU56Um1NbVJsWXpRMVlqWTZjM1J5YVc1bk9uQnliM1lpTENKa2FYTndiR0Y1SWpvaU56WTFZV1EyWTJNdE1UTXdNUzAwTlRjNUxUbGtPV0l0TkdOaVlqTTROVEkwWXpsbE9uTjBjbWx1WnpwSVpXRnNkR2hqWVhKbElGQnliM1pwWkdWeUluMWRMQ0owWlhoMElqb2lZVFF5T1RVeFkyTXRaV0l4TkMwME1EZzRMV0psWVRndFlUaG1aamcwTWpsaU56aGtPbk4wY21sdVp6cEJZMk55WldScGRHVmtJRXhoWW05eVlYUnZjbmtpZlYwc0ltTnZiblJoWTNRaU9sdDdJblJsYkdWamIyMGlPbHQ3SW5ONWMzUmxiU0k2SWpGaE5XSXlNVFF5TFRVeE5HRXROREEzWmkxaU9UYzVMVFkzWmpKaVl6STNOek13TURwemRISnBibWM2ZFhKc0lpd2lkbUZzZFdVaU9pSmpZVGhtWmpnNFppMDFNamxtTFRRd1pUWXRPREEyTkMwME9HUTJOVEF4TnprME16QTZjM1J5YVc1bk9taDBkSEJ6T2k4dmQzZDNMbTFoWTNKcGRHTm9hV1ZzWVdKdmNtRjBiM0o1TG1OdmJTNXpaeUo5TEhzaWMzbHpkR1Z0SWpvaU56WTJZek01WXpFdFltWmlNUzAwTWpJM0xUa3hOVEV0WVRBMVpESmtOekJtTTJNNU9uTjBjbWx1Wnpwd2FHOXVaU0lzSW5aaGJIVmxJam9pTXpVeFpERmpOVFV0T0RnME1DMDBPVEJpTFRreVlXSXROMk5oTWpZNU16ZGpNVGRoT25OMGNtbHVaem9yTmpVMk56WTFORE15TVNKOVhTd2lZV1JrY21WemN5STZleUowZVhCbElqb2laREpsTURCa1ltWXRaR1l4TXkwME5EUXlMV0ZoT1RZdE1UZzRNVFJsTVRkak9HTmpPbk4wY21sdVp6cHdhSGx6YVdOaGJDSXNJblZ6WlNJNklqSmlNV0U1TjJZd0xUSmlNRFF0TkdWallpMWhNR1UzTFRVMU5tSTBNbVZoTXpNMlpqcHpkSEpwYm1jNmQyOXlheUlzSW5SbGVIUWlPaUl6WVRreFlUVTVaUzFsTmpVeUxUUm1NR0V0WVROa1l5MDBPV1V3TVRWaU5URTFOR002YzNSeWFXNW5PaklnVkdodmJYTnZiaUJCZG1WdWRXVWdOQ3dnVTJsdVoyRndiM0psSURBNU9EZzRPQ0o5ZlYxOWZWMTlMQ0pwYzNOMVpYSnpJanBiZXlKdVlXMWxJam9pWVdKalpUSXhZVFV0T1RNeFlTMDBPRFF4TFdKaE1XRXROekl4WlRnelptUm1aRE15T25OMGNtbHVaenBUUVUxUVRFVWdTVk5UVlVWU0lDaEVUeUJPVDFRZ1ZrVlNTVVpaS1NJc0ltbGtJam9pT1dZM1pUVXpNbVl0TmpJNE9DMDBORGhrTFdFeE1Ea3RabVE1WmpJM1pqWXpObUkwT25OMGNtbHVaenBrYVdRNlpYUm9jam93ZUVVek9UUTNPVGt5T0VOak5FVm1Sa1UxTURjM05EUTRPRGM0TUVJNVpqWXhObUprTkVJNE16QWlMQ0p5WlhadlkyRjBhVzl1SWpwN0luUjVjR1VpT2lKaVlUQTBaVEl6TmkwNU9UZzBMVFF6T1dFdFltVmpNaTAwWTJSa05UYzJaV1ZpTURZNmMzUnlhVzVuT2s1UFRrVWlmU3dpYVdSbGJuUnBkSGxRY205dlppSTZleUowZVhCbElqb2lOamN3WW1ReE5tSXROV0kxTmkwME1qZzBMVGcyTjJFdE5UUmlOamszWXpBMVpXRTFPbk4wY21sdVp6cEVUbE10UkVsRUlpd2liRzlqWVhScGIyNGlPaUl5TWpaalpUY3laUzAxTnpaaUxUUTJaamt0WVRjeU1pMWpNR1UxWTJFNFpERXpObUU2YzNSeWFXNW5PbVJ2Ym05MGRtVnlhV1o1TG5SbGMzUnBibWN1ZG1WeWFXWjVMbWR2ZGk1elp5SXNJbXRsZVNJNklqRXdNak0xT0dZeUxUTmtNRFF0TkRNd055MWhZemMzTFdNMVlUTm1aVGRpTVRnellUcHpkSEpwYm1jNlpHbGtPbVYwYUhJNk1IaEZNemswTnprNU1qaERZelJGWmtaRk5UQTNOelEwT0RnM09EQkNPV1kyTVRaaVpEUkNPRE13STJOdmJuUnliMnhzWlhJaWZYMWRMQ0lrZEdWdGNHeGhkR1VpT25zaWJtRnRaU0k2SW1Ka1pqQmlaV0ZsTFdZNFpURXRORFJoWVMxaFptVXpMV1l3TVRFM05qVXdOVE00WWpwemRISnBibWM2U0VWQlRGUklYME5GVWxRaUxDSjBlWEJsSWpvaU1EYzBNakV5Wm1RdFpqSXhOQzAwTXprM0xUaGhNVFl0T1RRMU1XRTJOakF5T0dVME9uTjBjbWx1WnpwRlRVSkZSRVJGUkY5U1JVNUVSVkpGVWlJc0luVnliQ0k2SWpneFpEUXhaR00zTFdKak1EUXROREE0TmkxaE5HVTFMVGRpTnpsa05UWTFZemc1WVRwemRISnBibWM2YUhSMGNITTZMeTlvWldGc2RHaGpaWEowTG5KbGJtUmxjbVZ5TG0xdmFDNW5iM1l1YzJjdkluMHNJbTV2ZEdGeWFYTmhkR2x2YmsxbGRHRmtZWFJoSWpwN0luSmxabVZ5Wlc1alpTSTZJbVpsWmpZNE9UWmlMVGM0WTJNdE5ESTNNQzA0Tm1ZekxUVTBNVGczTkRGa09HTTNaanB6ZEhKcGJtYzZZekl6TlRabE0ySXRPVEF3T1MwME1qSXdMV0V4WTJNdE1XRm1PR1F6TkRJd1pHRmtJaXdpYm05MFlYSnBjMlZrVDI0aU9pSm1ZalEzTTJNMU1pMHpNMk5qTFRRMFpUVXRZbVV4WXkwM05UQTBOMkl5WkdGaE1XVTZjM1J5YVc1bk9qSXdNakV0TURndE1qUlVNRFU2TURrNk5Ua3VNams1V2lJc0luQmhjM053YjNKMFRuVnRZbVZ5SWpvaU1tVXdZamxoTVdVdFlqWXdPQzAwTldReUxXRmxNall0TkdRd1kyRXlZVEkxTlRCa09uTjBjbWx1WnpwRk56Z3pNVEUzTjBjaUxDSjFjbXdpT2lJMU0yVmpNV1ZoWVMweE5HUTBMVFE0TlRBdE9UZzFPQzB4TXpJd01ESXhOR1pqWlRVNmMzUnlhVzVuT21oMGRIQnpPaTh2WVdOMGFXOXVMbTl3Wlc1aGRIUmxjM1JoZEdsdmJpNWpiMjB2UDNFOUpUZENKVEl5ZEhsd1pTVXlNaVV6UVNVeU1rUlBRMVZOUlU1VUpUSXlKVEpESlRJeWNHRjViRzloWkNVeU1pVXpRU1UzUWlVeU1uVnlhU1V5TWlVelFTVXlNbWgwZEhCekpUTkJKVEpHSlRKR1lYQnBMWFpoWTJOcGJtVXVjM1J2Y21GblpTNXpkR0ZuYVc1bkxtNXZkR0Z5YVhObExtbHZKVEpHWkc5amRXMWxiblFsTWtZeE1URmtNREkzWVMxbE9HUmpMVFJsTkRRdE9Ea3lOQzFqTkRGalpEY3dOMlZoWXpZbE1qSWxNa01sTWpKd1pYSnRhWFIwWldSQlkzUnBiMjV6SlRJeUpUTkJKVFZDSlRJeVZrbEZWeVV5TWlVeVF5VXlNbE5VVDFKRkpUSXlKVFZFSlRKREpUSXljbVZrYVhKbFkzUWxNaklsTTBFbE1qSm9kSFJ3Y3lVelFTVXlSaVV5Um5kM2R5NTJaWEpwWm5rdVoyOTJMbk5uSlRKR2RtVnlhV1o1SlRJeUpUZEVKVGRFSXlVM1FpVXlNbXRsZVNVeU1pVXpRU1V5TW1aaE16VmtOR0kzTXpWaU5tUTFNRE15TjJNNU4yWXdNRGd5TnpFeU9UazVZMlpoTmpReVltSTRNekF5TldZME9EY3pNMlUxWmpJeU16QTJObVE1Tm1ZbE1qSWxOMFFpZlN3aWJHOW5ieUk2SW1VeU1tUmhNRGt6TFRZMk56Z3ROREkwWkMxaFpUUXlMVGcxTVRJNVl6TXlaV1V5TWpwemRISnBibWM2WkdGMFlUcHBiV0ZuWlM5d2JtYzdZbUZ6WlRZMExHbFdRazlTZHpCTFIyZHZRVUZCUVU1VFZXaEZWV2RCUVVGbVVVRkJRVVJKUTBGTlFVRkJRWEI0SzFCaFFVRkJRVTB4UWsxV1JWVkJRVUZFVFhwTmVrMTZUWHBOZWsxNlRYcE5lazE2VFhwTmVrMTZUWHBOZWsxNlRYcE5lazE2VFhwTmVrMTZUWHBOZWsxNlRYcE5lazE2VFhwTmVrMTZUWHBOZW1WRGJXbEJRVUZCUVVWSVVsTlViRTFCVVV3clFUZDRRV2R1TWtSUU0zcENkM0l4UTFCRmJDdEpMMUZCUVVKM1pFcFNSVVpWWlU1eWMyNWtNVEl5ZVc5UlVuWnJTRWxUU0U0cmVpOTBlVlZyT1c5VVJVTlJNV0pVUW1NeU0ySjVUbk13UWpWSFNVUkJVa0ZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGckswbHJLMGxrZURSbk5VNDBRamxIVVM5eVVFRTVTaTlKVUdaVFozZE1MMDFGUlVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkVkMUExV2xCdlVEVnlOMFpLUzBGbU4yTjFaa0pwYUZCT1UydFlOV2hzUVRsMUswUnpVRGRrV0M5S1N6RlFNbFpRYVZOSmIyVmlSWEpNZDFab05WcDRLemhETVZreU1sbDBVREJHY0dZMmFHUmxZU3R0Y1RGWGJHbDRabVZxTmxKalJIaHFNRGx6ZDFoaVltVkNVWEJwYW5Wbk1qQmhhaTlUUlRoaWRtODFhRVYxWVhaQmRWTkxjRkZtU25oVVJ6a3haMVZ5UTFZMmFsTlJSVEJ2VUd0bE5IZDFhMlUzTURWRmNYQk1UbGQ0ZEUxMFUyczBhblpZUjJ4a0szUk1iSGgyVmsxT2JtRnJSRGR0Ulc1a1dWUldWMU51VmpnMk1GZFZXR3d6TkZKTmVUZENaVzF3ZVVkNlRqZHdRV0p0V0VWQk5tSm1ka3N3ZFRNeWRWUkdTMHRXVFRCeU1GbDNNVTFVWTBaMmNEaHBWa3hRUkRBck9XZElVWGtyTjNKVFpqTmxaV3B3TWtoMVJtTnpiV3hrYVVWNk1FWjZTMWhtVTFKM00zRmxNRGhZY1dRNVpGQTJVVXRQVG01cmRUUnNSek5PVTJJdlVrSjBTM1JMZERGMGRHUkNTbWxaWWpKV1NUZGljbU0zZEdNNFNWbHZkRXA2U0ZWQ01HTXJUeXRVTTNKVVVYVk1TM05hVW5Gd2VtdFVVemRrV2trMGRtOHJjVXB1WkVWSFR6aEZlbVZqZVdwaFl6WXZTVlJPTWt0UFYyRlZURWxVTDJGTVpHVlZibkZ3WkdrM1ZsY3lLMHQ1WXpJNVJrd3pjemRsTTJocE5VeFVVMmhsVjFkd2VWZHNTRFJZZW0xMlYycHVhVTlwUms0eldWZEVhWFpYU1RreVYzVnJOV04wTWtNd2NETktlbXc1V1U0Mk5sZEpOVWxXTDFaNVJqZzJjakZoTVRkd1NEVlZUVU13Y0ZndlJIZFlWbFUxTWpSTGN6VlpaMFJhYlV3MGVrZDZNWGM0TUhBek0xQnFNWEJOZG1OcEszUmpNbU5HU1dwdGFFZ3laRmRXWm5WaFZreDFUR3A1T1dWVWVtZHhUM0p4WlhkMk1IWjFiUzh4UzFJMEt6SmhOa1JvTlhCWVR6ZFdPVThyY3pSTFVrcFFRVVIxZUU1cWRHcEdRME5yTDBOc2RFVjZaMlo2VTNSbGNsTjJaRnBSV21WRWIzbDVjWGhSWjNWU01XeFliVUpzU1M4NVVGTmxZbHB3WWs5bE9HSnBkblF5WWtaTE9WbGhTelJsU0dVM1RreE9ZWFJNVUROeFIxbE1aa3czTVZKdlRYWkNObGgxT1RaS00xUlhkRGxNVkc5UlRUVjZiVGhaWm5oaVNFbEZVMUJhV0ZoWEwzUnZkbFJUYnl0UWNVWjRUbVZ6ZDFweGFrOHZXREE1VDNaQ1oyazVUMk5JZHpkc2JGVjFhMk4ySzJScE1ISnVaWEZtT1RsMVdHOUxaMnhOVFhkaGJHdzNlQzl0ZVRCdGJGQTFjR2xXYm5ZelpuVmFLekU1TTNodWNGUlpUSG96VTJwbGFsQk1XSEJQTmxSMFdHSjZXSEJtU1ZWalpVcEliVkJ6V0VGS2MySkpLMkZNTjJaMmMzQndWbk5QV0RkMVlXUktPVVoyZFZRMk0xQjRjMXBCVVROVlRYaDVaMHg1VjNaemF6WXZiSFZyZFRRd1ptSTRkSFJ2YkVSR1JtSXhXbEZSTmk5dFVtdDJNV2xYT1dreFNqWkRMekZoWldwQlkzWlJVRlp0VlhRMlJrSXlZMjR5TmtwNlJFODBWSE5oVEdOWFpXRlVZbTgzU1c0d05GZ3dPRFk1TmxoNFZHNXlhMjE2UjBOSWFXMXRTbkJNZFU1aFVHazNNV1lyUzA5cmRHVTFTVXM1VDNKVE56UnBibWRRVTJaS1pERnZTVk5FT1Zvd2JTOW9VR2hDTUc4ckwweGtNMDFOUjFWeVUxVTJPSE01ZVZWNldGTlBNM04xYUZjclFtZ3JTbW93YjNsNk1uTnVXbkZuY0dONlpEVnBkM0IyVW5adFMyWlljRmt2VURCNVpWTm1jMmRJVDJoc2FYZDBURk0zWTBKVGFWSXhZVnBHVURNd2NTdENkRE5tV0dKTE9XaFJNbFJ5S3pSeVUyTXJPR1JtYkZoRFR6SnNObkJaSzFCSmN6VndSakY0Y3pScmJXSllWa0kyZWpCS1YxSlNaRWdyTmtJd2R6aFdaVzk1WkdWWGJGWTROSGhoVlV4dWRsZ3dPSFpGZWs1dUswaEtUM1VyZEdaVU1XTlRZa3RRVEdWM2RsZHJZeTlqTVM5WmRITTBVMnhLSzBSSWNIVnVjMFl6TURZNVdGTnlkemRXYUZGbGJEUm5TRTR6VVhWSVR6aHFSV3N2VHpoalF5dFZieTl3V0ZJcmRrY3dURk51TDFwWWVHeFllVWx2WXpZd1VGTm9aV3hrZDNaa2VtSTBTRmN6U1RjeGNFOHZNSGRJV1hGUFNYQTRkalF4U2xRMU1sUk9hbVkxYW5neU5HWnRSVGsyVjB4eVJ6Y3ZZbk52VFRabGFFTkhjRW80Y3pBdldsWXphemh4YmxSUFpGZ3hRalkyU0U5bllqUmlOVXRTWm5Sc05UUm1RemR2ZG5sMldscHdXSFEyU25rMGJ6TmFjV1ZrVDNaTlZHUnpiRkJWYUVRd2NteFhlSFpXVFVaMFV6QlFNVlZQYmxCMlYyczRORmhrWWpCRVNWaFhMMnRJYVUxVFRHVnROM0pOVFV0RWJYUTVTakJJYldkMFN5OHpRbWMzUjJoblQwZE1RMmRRVkRoaFpuQXhjR1JVUlhnME9EZzJibWQwUzBZeVl6bFBjSE5uVmtSaVQwdERTazlSWVd0cEt6Rldja1pwSzNkeWFVcHdaazVoTDI5eVUyaGpjbGN5T0RacVRGbHplWGxtV2t4c09GTkZkRzVOTmpWcU1WTk1TQ3QzV0ZaSE5tcGpNRVJaU1RrNE5rWjFha3RLYmxGTVZqQmpNVTF5ZHpkelR6VnVMMlozZDBSbWEyOXFPV2RtUkRSdmVtaDVSa0ZWVmsxeFFsSnNXWEpEWkRCdlZXNVNjbXRwZVVWNlQxQkdUa3hHZWxSNlZEVldiRUpZWkROUGJUaHZlbXRDZEU5UFpFUlFXbXRWT1dzNUwxQkRjRXhyU0dGeWJscFZaa2xvV0U5Mk1DODJTVk4yTUZOUFkzWnFMekZpT1hSNlptdE9OVWN6ZURkbFltUkphRE0wVjJaR05uUndSSEp5V1VzMlVGVndaQzgwWmtwVE0ySndXR0Z5ZEU5S1RpdFRVa1JDV0U5Mk1HdzJiVFpGZWxveGVqTTFiSGM1YXpOU1R6QXhWMDFHUWxVMFNEUXJNakZzVFdKaU9GaHpNSFpzZGxsV1NIQXpVRlZ4UzBOallVOUVWWE51WWs1TVUxSTFZMVJESzJSYUszQndWbVZzUTI1TFlURXhOMlZPVkU1UmExTldSbWxWTW5SUUsxRnlVMDlXZGxwYVlWVk1jWGQyZEZCRGFDOXFaRTFpTTFKT09UbFJUMnR2YW5ZNFRITlJVekJyTDA4M0szUkxaaXRPVFZRNU5rNVFNRlYyVEhacGJsSnRPVXB1TWpSM1ZuSmlSRU5pUjBsa1JqUjRWa0pPU2k5NFNsTmxObFZsYnk5Q2FpODVTUzgzUkhrd1VIWnlia3A1Tlc5d1UwbFNVbHBZTUdGUlZVRkJVSHBZTTJnelZVRkJRMEZSUVhnM1dVRkVMMkZ1UmtKRFRtUmhiVWxCUWtGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUkVGdGJXOWxTemxJZW1sQ05VazVSVUpZYm5nNFFVRkJRVUZCUVVGQlFVeENiVUZKV2t0dGVsZEpibmg1VDBGQlFVRkJSV3hHVkd0VGRWRnRRME1pTENKaGRIUmhZMmh0Wlc1MGN5STZXM3NpWm1sc1pXNWhiV1VpT2lKbU5qTmtZVGxoTmkxbFlXUTRMVFE1TVRRdFltWXlaUzFsTW1GaU16QTJabU5rWkdZNmMzUnlhVzVuT21obFlXeDBhR05sY25RdWRIaDBJaXdpZEhsd1pTSTZJbUkyTURSbE5qRTRMVGM0TjJRdE5HVmtOeTA0TXpreUxUbGpOakV4T1RWa016WTVaRHB6ZEhKcGJtYzZkR1Y0ZEM5dmNHVnVMV0YwZEdWemRHRjBhVzl1SWl3aVpHRjBZU0k2SW1Oa01HSmxOR1ppTFRZeE5qVXROR0ZoTlMxaU1EVm1MVGRsTW1VNE1UTTFNVGd3WkRwemRISnBibWM2WlhsS01scFlTbnBoVnpsMVNXcHZhV0ZJVWpCalNFMDJUSGs1ZWxreWFHeGlWMFYxWWpOQ2JHSnRSakJrUjFaNlpFZEdNR0ZYT1hWTWJVNTJZbE00ZVV4cVFYWmpNazV2V2xjeGFFeHRjSHBpTWpScFRFTkthMWxZVW1oSmFuQTNTVzFzYTBscWIybE9SR2h0VFhwc2JVNXFRWFJPUjBsNVdWTXdNRTFIUm10TVZHaHJXbXBCZEUxVVNtaE5WR1JvV2xkWmQwOVVXVE5QYms0d1kyMXNkVnA2YnpOT2JVNW9XbXBPYlU5VE1ERk9WR3Q0VEZSU2JGcHFSWFJaYW1NeFRta3dlRmt5U1RCT01rVXpUbTFTYkZwSFZXbE1RMG95V2xoS2VtRlhPWFZKYW05cFdtMUpORTlIVVhsYWFrMTBUVzFSTTFsVE1EQk9lbXhxVEZSck1VNUVSWFJOYlZWNFdtcFpNVTV0V21sYWFsWnNUMjVPTUdOdGJIVmFlbkIzV2toUmRHRkhWbWhpU0ZKdldUSldlV1JETVRKTmFUUjNTV2wzYVdSSWJIZGFVMGsyU1cxUk5Ga3lVbWhaZWtKcFRGZEpNbHB0U1hST1IwMHpUWGt4YVUxNlRUSk1WRTAxVFhwak5WcEhXVE5QUkdzeVRucHdlbVJJU25CaWJXTTJWVVZPVTBscGQybGtiVVp6WVZkU1IyTnRPWFJKYW05cFRWZFpOVTlYUm14Wk1rVjBXWHBaZDFwVE1EQk9lbGsxVEZkSk0wOUhXWFJOVjBreFRXMUZNRTV0VW1sYVIwWm9UMjVPTUdOdGJIVmFlbTk1VFVSSmVFeFVRVFJNVkVrd1ZrUkJNRTlxU1hsUGFrMHlUR3BCTWsxc2IybE1RMHB0WVVkc2VWWnRWbmxqTW14MlltbEpOa2xxVm14YVZGWnRUVzFaTVV4VVRUQk5hbEYwVGtkTmVWcHBNRFJOUkZFMVRGZEdhazU2WjNsUFZGRTFUbFJuZWsxVWNIcGtTRXB3WW0xak5rNUROSGRNYWtWcFRFTktiV0ZIYkhsUmJsWjFXa2Q0YkVscWNEZEpia3BzWXpJNU1XTnRUbXhXU0d4M1dsTkpOa2x0V1ROUFJGa3dXbTFSZUV4VWJHcE9hazEwVGtSRk0xbHBNRFJhYWtKclRGZE9hRTU2YUcxYVZFRjRXVmRPYWs5VWNIcGtTRXB3WW0xak5sRnVWblZhUjNoc1NXbDNhV1JJYkhkYVUwazJTV3BWTVU5WFdteE5WMGt3VEZSa2JWcFhWWFJPUjBreFRua3dOVmxYV21oTVZGRjNUa1JaZDFwWFJteE5WMUpzVG1wd2VtUklTbkJpYldNMldUSTVjMkpIVm1wa1IyeDJZbWxKYzBsdFZuVmtTRW8xU1dwd1ltVjVTbTFrVjNoelZsaEtjMGxxYjJsUFJFcHBXVmROZVU1WFdYUmFWMUV6VGtNd01FNHlTbXBNVjBVeVdrUkpkRTlYVlROWlZHUnJUbTFKZVZwcWJHcFBiazR3WTIxc2RWcDZjREZqYlRRMlpGaFdjRnBFY0dsWlZHUnBUakpOTkZwRE1XcE9WRUUxVEZSU2EwOVhVWFJaYlZVd1dsTXhiVTlVYkdsT2JWSnNUV3BzYkUxcVRXbE1RMHA1V2xoT2RtUllTbXBhVTBrMlpYbEtlVnBZVG5aa1dFcHFXbFpTTldOSFZXbFBhVWw0VDBSRk1FMVVaekpPYVRBMVdrUmplRXhVVVhwT01rVjBXVlJuTWxwVE1EVk9SR3Q0VG0xU2FVOUVaek5aYlVrMll6TlNlV0ZYTlc1UGJFSm9aRWRzYkdKdVVXbE1RMHBzWlVoU2JHSnVUbkJpTWpScFQyeDBOMGx1Vm5saVEwazJTV3BHYVUxWFRtdE9SMFpzVEZkWk1GbFVUWFJPUkUweVdta3dORTlFUlRGTVZHYzBUVmRSTTFsVVRtcE5lbWh0VDBSd2VtUklTbkJpYldNMllVaFNNR05FYjNaTU1taHpUbmsxZG1OdFkzWmFiV2h3WTJrNVZHUklTakZaTTFJeFkyMVdSVnBYV25CaWJXd3dZVmM1ZFV3elFtaGtSMnhzWW01UmRHSnRSakJoVnpsMVdWZDRjR1JJYTJsTVEwcHNaVWhTYkdKdVRuQmlNalJwVDJ4ME4wbHVWbmxpUTBrMlNXcEpkMDlIVlROWmVsRjVURlJhYkU1cVkzUk9SRVpzVDFNd05FOVVXbWxNVkVFeldrZFpNazFYVm14T1IxcHFXWHB3ZW1SSVNuQmliV00yV1RJNWExcFRTWE5KYmxwb1lraFdiRkV5T1d0YVYwWnBZa2RXUkdJeU5XcGFXRUl3U1dwd04wbHVVbXhsU0ZGcFQybEpkMDFYVlhwUFJHUnRXVk14YTFwRVJteE1WRkV5V1hwQmRFOVhXVFZaVXpGcldtcG9hbHBxWXpKWmVtTjRUbXBSTm1NelVubGhWelZ1VDJ4Q2FHUkhiR3hpYmxGblZHMUdNR0ZYT1hWWlYzaHdaRWhyYVV4RFNtcGlNbEp3WW0xamFVOXNkRGRKYms0MVl6TlNiR0pUU1RaSmFrRjNUVmRKZDA5SFdUUk1WMVUwV2tSbmRFNUhUbTFhYVRGb1QxUlpNa3hYVlRGYVZGazFUMFJHYTFsdFZtbFpWSEI2WkVoS2NHSnRZelprV0VwMVQyMXNlbUo2Y0hwa1IxRTJZVmhPZGs5cVRYaE9hbGxwVEVOS2FtSXlVbXhKYW05cFdtcE9hazU2VlRGWlZFMTBUa1JyTVU1VE1EQk9WR00wVEZSb2JWcHFaM1JQUjFGNlRYcE5NVmw2V1RWT2JWVTBUMjVPTUdOdGJIVmFlbkJVVW5sS09WaFlNVGxZV0RGa1RFTktjRnBIVm5Wa1IyeHRZVmRXZVVscWNHSmxlVXB3V2tOSk5rbHFRVEJhYWxKcFRXMVZNVXhVVlhwWlYxbDBUa2RGTWsxRE1XaE9WR2MxVEZSb2JVNVVhekphUkVKcVRsUnJOVnBxY0hwa1NFcHdZbTFqTmxWR1FrOUphWGRwWkVoc2QxcFRTVFpsZVVwcVlqSlNjR0p0WTJsUGJIUTNTVzVPTldNelVteGlVMGsyU1cxVk5WbFVXbXBOZW1jeVRGZEplVmxxUVhST1JFSm9UWGt4YUU1WFJURk1WR3hvV2tkRk5GcFhUbTFOUkVVeFRsUndlbVJJU25CaWJXTTJZVWhTTUdORWIzWk1NMUpzWTIweGNHSnRPWE5pTW1RMVRHMW9jMDU1TlhaamJXTjJVVEk1YTFwV1RqVmpNMUpzWWxNNU1rMXBNSGROYWtGNlNXbDNhVmt5T1d0YVUwazJTV3BrYVZwWFZUQk5SR2MxVEZkU2FscEVTWFJPUkdScFdYa3hhVTFxWXpCTVZFRTBXVzFSTWxwRWFHMU9la0pxV1dwd2VtUklTbkJpYldNMlZVWkNUMGxwZDJsYVIyeDZZMGQ0YUdWVFNUWkpiVTE0V20xVmQwMTZZM3BNVkZwcVdrUkpkRTVIV21oT1V6QTBUbFJKTlV4VWJHbE5iVmsxVG5wck1VNVVXbWxPVkhCNlpFaEtjR0p0WXpaVlIwWjZZek5DZG1OdVVXZFVibFowV1cxV2VVbHVNV1JtVTNkcFpHMUdjMlJYVldsUGFVcG9UVlJqTkU1dFRUVk9RekI1V1hwU2JVeFVVWHBOUkdOMFdWZEdiVTlUTUhoYWFtaHNUMVJSTTAxdFdtbFBWMWsyWXpOU2VXRlhOVzVQYTFVelQwUk5lRTFVWXpOU2VVbzVURWh6YVdGWFVXbFBhVWt5VGxSQ2JFOVhSbXBOVXpCNVQwUkNiRXhVVVRWTmFtZDBUMFJGZWxscE1XaFBWRlUxVFdwQmQxbDZhekZOUkZVMll6TlNlV0ZYTlc1UGF6VlRVMVZOZEZKcmJFOUphWGRwWkcxR2MyUlhWV2xQYVVreFRsZE5NMWw2UlRST2VUQjRXVlJaTTB4VVVtbE9iVkYwV1cxRmVFNURNREpOUjAweVRrZGFhRTFxWTNsT1IxazJZek5TZVdGWE5XNVBiRTAxVFVSck5FOVVaelZYYVVvNVdGTjNhV0p0Um5SYVUwazJWek56YVdSSFZqUmtRMGsyU1cxWk0wNTZWWGxaYWxFd1RGZFNhMXBxUlhST1IwMDFXa013TlU1cVRtcE1WMUY1VGtSb2FGa3lXVEphUjFFelRXcHdlbVJJU25CaWJXTTJWa2RHZFVsRlRtOWFWelJuVVRKb2JHSnBTamxZVTNkcFdqSldkVnBIVm5sSmFtOXBXa1JqZUZwdFRtbE9Na1YwV2xkRk0xbDVNREJaZW1ONlRGZEpNVTFxVVhSWk1sa3hUbnBqTTAxSFRUSk9Na2sxVDI1T01HTnRiSFZhZW5CdFdsY3hhR0pIVldsTVEwcHBZVmhLTUdGRlVtaGtSMVZwVDJsSk5WcFhTVEpOUkVadFdXa3hhMDFVVFhwTVZGRjZXbTFaZEZscVdtMWFRekZzVFcxSmVscHFTVEphUkZFeFdXcEpObU16VW5saFZ6VnVUMnBGTlU5VVFYUk5SRVYwVFZSVmFXWllNSE5sZVVwdFpGZDRjMVpZU25OSmFtOXBXVzFaTTAxcVVUVmFWRWwwVFRKUmVWbFRNREJOVkVWNVRGZEZNRmw2WTNSYVIwa3dUMFJDYTA1NlVYaGFWMXB0VDI1T01HTnRiSFZhZW5BeFkyMDBObVJZVm5CYVJHOHpUbnBKTlU5VVkzZGFVekZvV1dwSk1reFVVVEpQVjFsMFdXcE9iRTVUTUhwT2JVVXdUVzFXYWsxcVVYaE9SRmxwVEVOS2VWcFlUblprV0VwcVdsTkpObVY1U25sYVdFNTJaRmhLYWxwV1VqVmpSMVZwVDJsS2EwMHlUWGRhYlVadFRYa3hhVTVFUm1oTVZGRjZXWHBCZEU5WFZYcE9VekIzVFhwQk5FNVhVWGRPUjFWNVdrZFJObU16VW5saFZ6VnVUMnM1YVdNeVZubGtiVVl3WVZjNWRVbHBkMmxqTTBKc1dUSnNkRnBYTkdsUGJuTnBaRWhzZDFwVFNUWkpiVTVvV21wak5FMXRUWGRNVjFKcVRtMVpkRTVFVW1oT1F6RnBXV3BaTkV4VVZUQlBSR3N6VFZkS2FrMUViR3RPYW5CNlpFaEtjR0p0WXpaVk0wSnNXVEpzZEZwWE5HbE1RMHA1V2xkYWJHTnRWblZaTWxWcFQybEtiVTVIVFRKT1YxVjVUWGt4YWs1dFdtdE1WRkY0VG5wbmRFOVVhelJPVXpGclRVUm9hMWt5Um10Tk1sVTBUa1JCTm1NelVubGhWelZ1VDI1V2VXSnFjREZrVjJ4clQycEJlVTU2Vm1sYWJVWnRURlJSTkZwdFNYUk9SRkpzVFVNd05FMUhUbXRNVkd4cVRsUkJNRnBxWjNkYVZGcG9XbE5LT1V4RFNuZGFXRXB0WWpOS2RGcFlTV2xQYkhRM1NXNVNOV05IVldsUGFVcHRXVEpLYVU5RVZtcGFVekIzV1hwRmVFeFVVWGxhUjAxMFQwUmFhRTVwTURSYVJFcHJUbGRWTlZsVWEzZGFha1UyWXpOU2VXRlhOVzVQYkVKNVdWZE9NR0ZZVW5CaU1qVnNZMmxKYzBsdVNteGFiVlo1V2xjMWFscFRTVFpKYlVwclRVZFJkMDlFVVRSTVZFNXBXVmROZEU1RVFtbFplVEExVFVkRk1reFVVWGxOVjFGNVRsUlJNVTFFWXpCYWFuQjZaRWhLY0dKdFl6WmtXRXAxVDI1V01XRlhVVFpOTWxKcFdtMVpkMXBIVlhSYVJGSm9Ua013TUZwVVJtdE1WR3MwV1cxWmRGbFhXVE5PUkVrMFdXcG9hRTFFVW1sSmJqQnpaWGxLY0ZwRFNUWkphbGt4V1cxV2JGcFVUWGxNVjBwcldWZEpkRTVIV1hsT1F6QTBUV3BuZUV4VVRUSlpiVkpwV21wc2JGbFVhekJhVkhCNlpFaEtjR0p0WXpaVVJXaFJTV2wzYVdSSWJIZGFVMGsyU1cxSk5FNXRVVEphVkZrelRGUnNhazFVVlhST1Ixa3dUbE14YUU1cWF6Qk1WR1JzVFdwS2FFNTZVbXRhYWtVeVRXcHdlbVJJU25CaWJXTTJWRE5LYmxsWE5YQmxiVVl3WVZjNWRVbHBkMmxqYlZadFdsaEtiR0p0VG14SmFtOXBUMGRSTWs1cVp6Vk9SR2QwVFVST2ExbFRNREJQUjBrelRGZEdhMDFFVFhSUFZHTXlXbXBOZUZwdFZtbE5SMVpxVDI1T01HTnRiSFZhZW5BeFkyMDBObVJZVm5CYVJIQnRXVlJKZWsxcWFHaGFhVEF3VDBSbmVVeFVVbXhaVjBWMFQwZE5lVTlETURKT2JWSm9XV3BSTWs5VVZYZGFha1ZwWmxONE4wbHRiR3RKYW05cFdWZE5NVTFxUlhkT2VrMTBUa2RhYlU1NU1EQmFWRkYzVEZSck0xbDZTWFJhYW1zeFRWZGFiVTVVUVRSUFZFbDRUMjVPTUdOdGJIVmFlbkJDVkVOSmMwbHVValZqUjFWcFQybEplazFVVlhoUFYwVXhUVk13ZDA1NlFUQk1WRkY2VFhwRmRGbFhSVEpaZVRCNVRrUkZNazlFUlROYVZGcHFXbFJaTm1NelVubGhWelZ1VDJzNWVWb3lSblZoV0hCb1pFZHNkbUpwU1hOSmJrcHNXbTFXZVZwWE5XcGFVMGsyU1dwYWFrNHlWbXBOYWtFeFRGZEpORTE2VFhST1JGRTBUbE13TlU1VVozcE1WRWt6V2xSYWFFNHlUVFJhYWxKdFRWUndlbVJJU25CaWJXTTJaRmhLZFU5dVZqRmhWMUUyVDBSTk5WbFVaR3BPVkZGMFRtMUpNRTFETURCTlYwNXBURmRKZUUxSFVYUlBWRWsxVGxkUk0xcFVZekZhYW1NelNXNHhaRXhEU25CYVIxWjFaRWRzYldGWFZubEphbkJpWlhsS2NGcERTVFpKYlVwc1RsZFdhMXBYU1hoTVZGSnNUMFJyZEU1RVZUVk5RekEwVG5wc2JVeFVVWGhhUjBrMVRXMUpNazE2Vm1sT1JIQjZaRWhLY0dKdFl6WlJWVTVVVkdsSmMwbHVValZqUjFWcFQyNXphVmt5T1d0aFZ6VnVTV3B3WW1WNVNucGxXRTR3V2xjd2FVOXBTbWxOYlVwdFRrUnJlVTFwTURCYVZFRXlURlJSZVUxRVNYUlpha0V6VDBNd2QxcFVUWGhhVkVWNVQwZFZORmw2U1Raak0xSjVZVmMxYms5dGFEQmtTRUUyVEhrNU1GcFlTblJoVnpWMllrYzVibVZUTlc5aVJHTjFZak5LYmt3d1RuWmFSMVpVWlZoT01GcFhNSFprYWtsMFRVUkpkMDE1U1hOSmJVNTJXa2RWYVU5cFNtbFBWRXBwVDBSRk1rMXBNV2hPUkdNeVRGUlNhazlFUVhSUFJFcG9XWGt3TkU1RVNYZE5SMVY2V1hwWk1FMTZWVFpqTTFKNVlWYzFiazlyUmtSVk1EUnBURU5LYTJGWVRuZGlSMFkxU1dwdmFVNVVRWGhPVkVwcFdtcEZkRTR5V21sTlV6QXdXa1JPYUV4VWF6Tk9NazEwVDBkSk1rNUVhM2hhUjBadFRVUlZlazl1VGpCamJXeDFXbnB3UWxreVRteGpNMDV3WWpJMFoxTlZVV2xtVmpFNVRFTktNbGxYZURGYVUwazJTV3BSZUUxRVJtMU9SMWt5VEZSS2JGbFVXWFJPUkd4c1dXa3hhRmxxVFRCTVZFSnFUbFJvYWs0eVZYbFpiVmt3V21wd2VtUklTbkJpYldNMlRWUkplazVFVlRKT2VtYzFTVzR4WkV4RFNtcFpXRkpzV2pJNWVXVlRTVFpYTTNOcFdUSTVhMkZYTlc1SmFuQmlaWGxLZW1WWVRqQmFWekJwVDJsSk5GbHFXWGRhUkVreVdWTXhiVTFVWnpSTVZGSnBXbXBaZEZscVNtaE5RekF6VG0xUmVrMUhWVEpPUkVsM1dUSlZObU16VW5saFZ6VnVUMjFvTUdSSVFUWk1lVGw2WW0wNWRGcFhVWFZoVnpWdFluazVlbGt6VVdsTVEwcHFZakpTYkVscWIybE9WR3hxV2tSRk0wNVVXWFJaTWtac1RXa3dNRnBxU21sTVYwbDRUVlJCZEU5WFJtbGFWRUY0VFVkV2FrMHlSVFJQYms0d1kyMXNkVnA2YnpST1JFRXhUWHByZDAxRVdXbE1RMHByWVZoT2QySkhSalZKYW05cFQwZEZOVTFxUVRCTmVtTjBUVEpGZUZwcE1EQlBSMGw2VEZkRk5GbFVWWFJaVkdzMVRYcHJOVTFYVFhkWmVsWm9UMjVPTUdOdGJIVmFlbkJFVkRGYVNsSkRNSGhQVTBvNVdGZ3haRXhEU21waU1sSnNTV3B3TjBsdFRuWmFSMngxV25sSk5sY3pjMmxqTTJ4NlpFZFdkRWxxYjJsT2FscHBXVmRWTUZsNlNYUk9hazEzV2tNd01GbFVWVEpNVkd4c1dUSk5kRTlVWnpOT2VteHNUMWRTYWs1RVZtaFBiazR3WTIxc2RWcDZjRzlrU0ZKM1QyazRkbUpIT1hCaWJVMTFZak5LYmtscGQybFpNamxyV2xOSk5rbHFhekJaVkUweVQxUlNiVXhYU214T2VtTjBUa2ROZVZscE1EVk9SRkpvVEZSWk5FNUhSbXRaZWtsNFdrZE5NMDE2Y0hwa1NFcHdZbTFqTms5VVVURk5la1YwVFZOSmMwbHRVbkJqTTBKeldWaHJhVTlwU1RKTlZHUm9UVlJLYVZsVE1ERlBSR3hyVEZSU2JVNTZXWFJQVkVKb1dYa3hhVTFxWkdsTlYxVjRUMVJqTWsxRVdUWmpNMUo1WVZjMWJrOXNUa0pWYkUxMFVUSTVWMHhVU1dkTFJVNVFWbXRzUlV4VVJUVkxVMEpUVkd0RloyTkhSblZhVjNkblRGTkNVMXBZVG5kaFdFcG9aRWM1ZVdWVFFucGpSMVpxWVZjeGJHSnBRbWxsVTBKUFVWVkZaMlF5YkRCaFEwSjNZMjA1YVZwVFFtdGFXRkpzV1ROU2NHSXlOR2xtVmpFNVRFTktNbGxYZURGYVZVNTJXa2RXYUZsdGVHeFJNamwxV1RKV2QyUkRTVFpsZVVwcVlqSlNjR0p0WTJsUGJIUTNTVzVPTldNelVteGlVMGsyU1dwUmVWcHRXWGRaTWtrd1RGUlZlbGxVWTNST1JHaHNUVU13TkZwVVRUUk1WMFpwVDFST2FWbFVUbWxOYlZFeVdsUndlbVJJU25CaWJXTTJZVWhTTUdORWIzWk1NMDUxWWpJeGJGcEROWEJpYlZwMlRETk9hbVJEU1hOSmJVNTJXa2RWYVU5cFNUSk9WRkpyVFZSWk5FMURNSGhhVkVrelRGUlJNRTVxUlhSWlZGWm9UVk13TkUxWFJtaFpha0UxVFRKUk5VNVVRVFpqTTFKNVlWYzFiazlxU1RKTlJFMDBUbFJCZDA5VFNYTkpiVkp3WXpOQ2MxbFlhMmxQYVVrMVdXcEZOVTlYV20xWmVURnRXa1JzYTB4VVVYZE5iVlYwVDBSYWJGcHBNVzFPVjBWNlRXcGpNVTFIU1hwUFIwMDJZek5TZVdGWE5XNVBhelZzV2pKR01HRllXbXhKYmpGa1psTjNhVnBYV20xYVYwNHdZVmhhYkZKSFJqQmFWbEp3WWxkVmFVOXBTVEZPTWxKc1RtcG5ORnBwTVcxT1JGa3pURlJTYUZsVWEzUlpWR3MxVG1rd01rNXFWVFJOZWtreVdWUkZlRnBxWXpaak0xSjVZVmMxYms5cVNYZE5ha0YwVFVScmRFMXFhRlZOUkZrMlRWUlZOazFFUW1GSmFYZHBZek5TYUdSSVZucEphbTlwV1dwa2EwNXRXVFZhVjAxMFRVUkZNbHBUTURCT1YwWnJURmRKZDA5SFZYUk9hbWN6VFVkTmQxcFVWbTFaYWtVelQyNU9NR050YkhWYWVuQnRZVmMxYUdKRFNqbG1VM2czU1cxYU1XSkhlRlpqYlhkcFQybEpNMDVVYXpSYVZFRjRXWGt3ZWxwcVNUQk1WRkUwV1cxSmRFOUVSWHBOVXpGcFQwUnJORTU2VG1oYWFsRXlXbFJWTm1NelVubGhWelZ1VDI1V2VXSnFjREZrVjJ4clQycEJlVTU2Vm1sYWJVWnRURlJSTkZwdFNYUk9SRkpzVFVNd05FMUhUbXRNVkd4cVRsUkJNRnBxWjNkYVZGcG9XbE5KYzBsdVNteGpNamt4WTIxT2JFbHFjRGRKYmtwc1l6STVNV050VG14V1NHeDNXbE5KTmtscVdtcE5WRTB4VG5wV2JFeFVhM2xPVkZGMFRrUm5ORmw1TURSTmVtZDNURlJSZVU0eVdYZE5ha0pzV1ZSUk5VMXFjSHBrU0Vwd1ltMWpObFV6UW14Wk1teDBXbGMwYVV4RFNqQmxXRUpzU1dwd04wbHRUblphUjJ4MVdubEpObGN6YzJsak0yeDZaRWRXZEVscWIybE5la2w2VDBkV2FsbHFRWFJOVjFVMVRWTXdNRTU2U1RSTVYwa3lXWHBWZEU1NlFUVlBSRkp0VFVSWk5WcHFUWGRQYms0d1kyMXNkVnA2Y0c5a1NGSjNUMms0ZG1NeU5YWmlWMVpyVEcxc2RWcHRPSFpqTWs0d1NXbDNhVmt5T1d0YVUwazJTV3BHYlUxVVp6Tk9WRmt5VEZSRk1rMUVXWFJPUkZaclRXa3hhRnBFYUcxTVYwVTBUVmRSZDFwcVozaFphbU16VGtSd2VtUklTbkJpYldNMlRXcFZORTVVUVhkTlJFRjRTV2wzYVZwSGJIcGpSM2hvWlZOSk5rbHFUWGxPUjAxM1dWZFJNVXhVVFhkWlZFRjBUa2RSTWs5RE1XaE9SR3QzVEZSWmVGcHFSbXROTWxWNFRqSkpNMXBFY0hwa1NFcHdZbTFqTmxSdFJucGlNMEp2V1ZoS05XSnRaR3haVjNkbll6TmthRmxwU2psWVdEQnpTVzFPZG1KSGVHeFpNMUp3WWpJMGFVOXVjMmxaTWpsellrZFdhbVJIVm10U1IwWXdXbFpTY0dKWFZXbFBhVXBwV20xS2FGcFVhM2haZVRBd1RrUkZlRXhVVVhsWmJVbDBXV3ByTkU5RE1XaE5Na1V4V21wTmVrNUhTbWhPZWtVMll6TlNlV0ZYTlc1UGFrbDNUV3BCZEUxRWEzUk5hbVJWVFVSWk5rMVVWVFpOUkVKaFNXNHhPV1pUZURkSmJWb3hZa2Q0Vm1OdGQybFBhVWw0VFRKSmQxcEhUVEpQUXpCNVRWZFdha3hVVVhkWmVtTjBUMWRLYWxsNU1ESlpWRkY2VG0xYWJGbHRWWGxQVjFVMll6TlNlV0ZYTlc1UGJsWjVZbXB3TVdSWGJHdFBhazVyV1cxYWJVMUhVbXhNVjFFd1dWUlJkRTVIVlhoYVF6QTFUMGRLYlV4WFJtMU9lbEY1VDBkSk5GbFVRVEJaYVVselNXNUtiR015T1RGamJVNXNTV3B3TjBsdVNteGpNamt4WTIxT2JGWkliSGRhVTBrMlNXcG9hRmxVUm10YVJGa3lURmRSZWxwcVZYUk9SMGw0VFhrd05VOUVaR3BNVkdkNFdsUk5NazVVVVRCYVIwVjRUbXB3ZW1SSVNuQmliV00yVlVoS2FGa3pVbkJrUjJ4MlltMVdlVWxwZDJsaWJVWjBXbE5KTmxjemMybGtSMVkwWkVOSk5rbHFaR3RQUkZKb1QwUmplVXhVV21sWlZFVjBUa1JKTUU5VE1XbE9Na1V5VEZkRk0wMVVSWGxPVkZwcVdsZFplVTlFY0hwa1NFcHdZbTFqTmxKSVNXZFVWMnhxWVVkR2JHSkRRazFoVnpCcFpsWXdjMGx1UmpGWlYzaHdXbTFzYWxsWVVuQmlNalJwVDJ4ME4wbHRUblphUjFWcFQyNXphVmt5T1d0aFZ6VnVTV3B3WW1WNVNucGxXRTR3V2xjd2FVOXBTVEJPVkZVeFRXcG9iVmw1TURWT1IwVTFURlJTYTA5SFJYUlpWRVY0VGxNeGExbFVXWHBQVkU1cVRrUnJNMXBxVlRaak0xSjVZVmMxYms5dGFEQmtTRUUyVEhrNU1GcFlTblJoVnpWMllrYzVibVZUTlc5aVJHTjFZak5LYmt3d1RuWmFSMVpVWlZoT01GcFhNSFprYWtsMFRVUkpkMDE1U1hOSmJVNTJXa2RWYVU5cFNtMU9hbFpzV1RKYWJWcFRNREZOUkZKclRGUlNiRTVYVVhSWmFrNXJUbE13TVZsNlRYZE5la1V4V2xSamVVNUhVVFpqTTFKNVlWYzFiazlyTVVSVmFVbHpTVzFTY0dNelFuTlpXR3RwVDJsS2JVOUhUbTFQVkVWNFRta3dNMDU2V21sTVZGRTFUV3BqZEU5SFJYZFpVekF3VGxkV2FVMXFSbWxhUkVKcVRrZEpObU16VW5saFZ6VnVUMnhDZVZsWFRqQmhXRkp3WWpJMWJHTnBRazVhVjFKd1dUSkdlVnBUUW5Wa1Z6RnBXbGhKYVdaV01UbE1RMHB3V2tkV2RXUkhiRzFoVjFaNVNXcHdZbVY1U25CYVEwazJTVzFhYTFwdFZYaFpNa1pzVEZSck1WbFhUWFJPUjFab1drTXhhRTU2VFRCTVZGWnBXbXByTVZsNmJHaE5ha0pxV2tSd2VtUklTbkJpYldNMlZGVk9VMGxwZDJsa2JVWnpaRmRWYVU5cFNUQk5la1V4V2xSV2JWcERNRFJhYWtWNlRGUlJkMXBVWTNSWlYwVjNUVU14YTA1SFVURmFWMFp0V1dwTmQwNXRUVFpqTTFKNVlWYzFiazlxUlhsTmVsRXhUbWxLT1ZoVGQybGhXRTU2WkZkV2VVbHFjRGRKYmxJMVkwZFZhVTlwU21wTmFtZDZUbnBCZDA1VE1XbE5SRlUwVEZSU2FscHFZM1JQVkZFd1RWTXhiVTB5U20xYWFsRXdUbnBuTWxscVdUWmpNMUo1WVZjMWJrOXJPWGxhTWtaMVlWaHdhR1JIYkhaaWFVbHpTVzVLYkZwdFZubGFWelZxV2xOSk5rbHFVVFZhYWxGNVdXcFdiRXhVVG1wTlIwVjBUa1JKTkU1NU1EVk5WMFV3VEZkYWFrNUVSWGhaVjBVd1dUSlZlazVFY0hwa1NFcHdZbTFqTm1SWVNuVlBibFl4WVZkUk5sbHRUVE5OUkZreFdsZFZkRTVFU21oWlV6QXdUbnBPYUV4WFJUSk5WRkYwV1ZkYWEwOUhSVE5aYWsxM1dXcEdiRWx1TVRsWVdERTVURWh6YVZwdVZuTmlSbFo1WWtOSk5rbHRSVEJPVjFFelRXMVNha3hVVlRKT2VsVjBUa2RPYVZwcE1EVk9SR2N5VEZSS2JVMUVTVEJOYlZFMFRrZFdhRTFxY0hwa1NFcHdZbTFqTm1SWVNuVlBibFl4WVZkUk5sbHRUVE5OUkZreFdsZFZkRTVFU21oWlV6QXdUbnBPYUV4WFJUSk5WRkYwV1ZkYWEwOUhSVE5aYWsxM1dXcEdiRWxwZDJsamJWWjZZak5XZVZreVZXbFBibk5wWTIxV2VtSXpWbmxaTWxaVlpWaENiRWxxYjJsYVZFSnJUbTFKTUZwdFJYUmFWMDVxV1drd01FNUhSVEpNVjBadFdsUkZkRnBVVG1sT1JFcG9UMVJzYlUxNlNURlBiazR3WTIxc2RWcDZjRkJqYldSb1ltMXNObGxZVW5CaU1qUnBURU5LZFZsWE1XeEphbTlwV1cxS2JVMUVWVEJhVjFWMFQxUkJNRTlETURCUFJHdDZURmRKTkU5WFRYUlBSMGt6VG5wck1VNTZZM2ROZWtFMFQyNU9NR050YkhWYWVuQk9ZVmMxY0dNelVubGxVMEoyV21sQ1NWcFhSbk5rUjJkblMwVXhVRk5EYTJsTVEwb3daVmhDYkVscWNHSmxlVXBxWWpKU2NHSnRZMmxQYkhRM1NXNU9OV016VW14aVUwazJTV3BGZDAxcVJUQmFha2t3VEZSUmVVMUVaM1JPUjFFd1RXa3hhVTE2Ykd4TVZGRXdUbGRXYkUxVVVtbFpNa3ByVDBSd2VtUklTbkJpYldNMllVaFNNR05FYjNaTU0xSnNZMjB4Y0dKdE9YTmlNbVExVEcxb2MwNTVOWFpqYldOMlVUSTVhMXBXVGpWak0xSnNZbE01ZG1OdFpHaGliV3cyV1ZoU2NHSXlOSFJrU0d4M1dsTkpjMGx0VG5aYVIxVnBUMmxLYkU5RVdtbGFWMUV3VDBNd2VVNUVXWGRNVkZKdFRYcE5kRmxYVW1oUFF6RnNXbTFOZDFscVNUSk5WRlpwV1ZSUk5tTXpVbmxoVnpWdVQyMWtkbVJ1VVdsTVEwcHJZVmhPZDJKSFJqVkphbTlwVG1wck1GcFhTbTFhVkZsMFQwUlNhazU1TURCT1ZHYzFURmRGTkUxSFJYUlBWMUYzV1ZkUk5FMUVRVEZQUkVFMVQyNU9NR050YkhWYWVuQklZak5hYkdOdE5YUmFWelV3U1c0eFpHWldNSE5KYlU1MlltNVNhRmt6VVdsUGJIUTNTVzVTYkdKSFZtcGlNakJwVDJ4ME4wbHVUalZqTTFKc1lsTkpOa2xxWjNoTmFrSnJUakpaTVV4VWJHdE9hbWQwVGtSQ2FVNURNV2xaZWtGNFRGUkZNRnBFUW10WlYwcHRUMWRXYWsxcWNIcGtTRXB3WW0xak5tUllTbk5KYVhkcFpHMUdjMlJYVldsUGFVbDRUVlJaTWxsdFNYZE9hVEF3VG1wRmVVeFVVVFJaYW1OMFdWZFJkMDVETVdsWmVsVXpXbXBKZDA1NlNtdFBWRlUyWXpOU2VXRlhOVzVQYldnd1pFaENlazlwT0haa00yUXpURzB4ZG1GRE5XNWlNMWwxWXpKamFXWlRlRGRKYms0MVl6TlNiR0pUU1RaSmFscHRXbXBOZDA5VVJtMU1WR3N3VFhwRmRFNUhSWHBhYVRGb1dXcGthMHhVVlhwWmVsVjVUbTFSZUU1RWEzbE5hbkI2WkVoS2NHSnRZelpqUjJoMlltMVZhVXhEU2pKWlYzZ3hXbE5KTmtsdFJYaFBWRWt3VDFkVmVVeFVhekJOZWsxMFRrUkZOVTVUTURST1IwWnBURmRTYUZscVRYbFBSMVV5V21wak1scEVjSHBrU0Vwd1ltMWpOa3Q2V1RGT2FrMTVUbFJyZVUxcVFXbG1WakJ6U1cxR2ExcElTbXhqTTAxcFQyNXphV1JJYkhkYVUwazJTVzFLYTAxcVRUQk9WR3MwVEZSbmVWcFVaM1JPUkVKb1RsTXdORmxxUW14TVZGcHNUa1JqTVU5VVRtaFplbWN6V21wd2VtUklTbkJpYldNMlkwZG9OV015YkdwWlYzZHBURU5LTVdNeVZXbFBhVWt4VFZSUk5FNUVUWGxQUXpGc1drUmpNVXhVVVRST1ZFMTBUMFJHYUU1cE1EUk5iVVY2V21wU2EwMVVXbXhQUkVVMll6TlNlV0ZYTlc1UGJtUjJZMjF6YVV4RFNqQmFXR2d3U1dwdmFVMVVUVFJQVjAxNldWUkZkRnBxWXpWWlV6QXdXV3BzYkV4WFNURlpla2wwVGtSck1rMVhUbXhPYWxwcFdYcFZNRTl1VGpCamJXeDFXbnB3VG1GWE5YQmpNMUo1WlZOQ2RscHBRa2xhVjBaelpFZG5jMGxFUlRKSlJVNTJZa2Q0YkZveVZXZFZiVGxvV2tOM1oxRXlPWE5pUjFadVdsTkNkbHBwUWs1YVYxSndXVEpzZFZwVFFrTmtWMnh6V2tkc2RWcDVkMmRWTW14MVdqSkdkMkl6U214SlJFVXlUMVJuTVU1RFNqbG1WakU1WmxONE4wbHRXakZpUjNoV1kyMTNhVTlwU1RSYVZHTTFXbTFOTUU1NU1XcE9hbFYzVEZSUk5GcHRWWFJQVkZKdFdrTXdNRTVxUm14T1ZGWnFXVEpWTlUxcVVUWmpNMUo1WVZjMWJrOXVWbmxpYW5BeFpGZHNhMDl0V21oTmFrMTVUMGRHYlV4VVVUUlBSRWwwVGtkV2FGbFRNRFJaZWtrMFRGUlpNbHBIUm1sT1JGazFUbFJDYlUxVFNYTkpia3BzWXpJNU1XTnRUbXhKYW5BM1NXNUtiR015T1RGamJVNXNWa2hzZDFwVFNUWkphazE2V1dwS2FVNUVVVE5NVkVGNldUSlJkRTVFU21wT1V6RnBUMFJPYUV4WFVtaE9SRlV6VGtSUmVGbHRXWHBOYW5CNlpFaEtjR0p0WXpaVU0wcHVXVmMxY0dWdFJqQmhWemwxU1dsM2FXSnRSblJhVTBrMlNXcFNhRmw2UlRCUFIxVjNURlJTYUU1dFRYUk9SRkV5V1ZNd05FNXFVbXRNVkU1c1dXMWFiRTlVV21oTmFteHBXbXB3ZW1SSVNuQmliV00yVkZkR2FsVnRiREJaTW1od1dsTkNUbHBYVW5CWk1rWnpTVVZPYzJGWE5YQlplVWx6U1c1U05XTkhWV2xQYkhRM1NXMU9kbHBIYkhWYWVVazJWek56YVdNemJIcGtSMVowU1dwdmFWcFVXWGxOYW1ocVRYcFZkRmxxWkdwT1V6QXdXVEpWZUV4WFNtdGFWR04wVFdwYWJGbDZTVFZOUkd4cVRVZEdhRTl1VGpCamJXeDFXbnB3YjJSSVVuZFBhVGgyWkVkV2VXSlhiSFZpTW5oMldqTnJkV0ZIZHpOTWJUbDVXbms1UkdJeVVteFZNMng2WkVkV2RFd3lPWGxhTWtaMVlWaHdhR1JIYkhaaWFURXdaVmhDYkVscGQybFpNamxyV2xOSk5rbHFaekJQVkVFMFRVUkJlVXhYVlhwTlZHTjBUa1JSTWxsNU1XbE5SRVUwVEZSU2FVMXFRbTFaZW14b1dsZE5kMXBxY0hwa1NFcHdZbTFqTm1OSVNuWmthVWx6U1cxU2NHTXpRbk5aV0d0cFQybEpNVmx0VG1oWlYwbDNUbE13ZDFwVVFtMU1WRkY0V20xVmRFOVVVVE5OZVRBMFRqSldiVTFVVlRKUFZHZDNXVmRKTm1NelVubGhWelZ1VDJ0b2JGbFhlREJoUjA1b1kyMVZaMVZJU25aa2JXeHJXbGhKYVdaV01ITkpibEpzWlVoUmFVOXBTbXBOUjBrMFdsUk5NMXBwTUhwUFJGbDZURlJSTUU1dFNYUlphbXhyVGtNeGJFNXFiR3RaYlUweFdYcEthVmxxV1Raak0xSjVZVmMxYms5cmVIQlpNbFoxWXpKV2EwbEZhR3haVjNnd1lVZE9hR050VldkVlNFcDJaRzFzYTFwWVNXbG1WakJ6U1cxT2RtSnVVbWhaTTFGcFQyeDBOMGx1VW14aVIxWnFZakl3YVU5c2REZEpiazQxWXpOU2JHSlRTVFpKYlZsNVRVZEpNRTlIVW1wTVYwbDVXVzFSZEU1SFZtMVphVEEwVFRKWk5FeFVWWGhhVjAwMFRrUkplRTFYUlhoTlZIQjZaRWhLY0dKdFl6WmtXRXB6U1dsM2FXUnRSbk5rVjFWcFQybEpNMDU2UVhsT2FsWnRUVk13TkU1dFZtdE1WRkpyVG1wWmRFOUVWWGhhUXpGcFQwUkZNMDVxVFRKTlZFMHpUbnBOTm1NelVubGhWelZ1VDIxb01HUklRbnBQYVRoMlpETmtNMHh0TVdoWk0wcHdaRWRPYjJGWFZtcGlSMngxWVZkTmRWa3lPWFJNYms1dVNXNHdjMlY1U25wbFdFNHdXbGN3YVU5cFNtcE5la3ByV1hwRk5FMVRNRFJPZW14clRGUlJORTR5V1hSWlZFNXRUVU13TTA5VVRYZE9SR1JyV1hwbmVVOUhVVFpqTTFKNVlWYzFiazl1UW05aU1qVnNTV2wzYVdSdFJuTmtWMVZwVDJsS2JGcEVUbTFOUjAweVRsTXdNRnBYVW1wTVZGSnJUbXByZEZscVVteE5hVEF5V20xUk1rOVVTWGhhUjFVelQxUk5ObU16VW5saFZ6VnVUMmx6TWs1VVdYaE5hazB3VGxSWk0wbHVNV1JNUTBwb1drZFNlVnBZVG5wSmFuQTNTVzVTTldOSFZXbFBhVWt3VFRKWmVscHRVWGRhUXpBeVRrUkpNRXhVVVRKT1ZHZDBUMGRXYTFwRE1XMVpla3BzVFRKR2JFNUVVbTFaYlZVMll6TlNlV0ZYTlc1UGJrSnZaVmhPY0ZreVJuTkphWGRwWkZoT2JFbHFiMmxOZWxWM1QwUmpNMXBxUlhSYVYxRjNUV2t3TUZwcVFYZE1WR3N6VFhwTmRGcHRSVEpOVjBwcVdrUlplazB5VFRWUGJrNHdZMjFzZFZwNmNETmlNMHB5U1dsM2FXUkhWalJrUTBrMlNXMU5ORTVxVW10YVZHeHRURlJCZWxreVdYUk9SR2MwV1dreGFVMVVVVEpNVjFVeFRqSldiRTFxYUdwT01rMTVXbFJ3ZW1SSVNuQmliV00yVkZkR2FsVnRiREJaTW1od1dsTkNTV0l6VG5kaFdGSm9Za04zWjFaSGFIWmlXRTUyWW1sQ1UySXlSbXRNUTBKVVlWYzFibGxZUW5aamJWVm5UVlJKZWsxRVFYZEpiakU1V0ZneE9VeEljMmxhYmxaellrWldlV0pEU1RaSmFtaHBXbGRGTWs5RVNUTk1WRVpyVGxSQmRFNUViR3hPVXpGb1QwUnJlRXhVVlRCWmJWbDVUV3BrYTA5WFZtbE9SSEI2WkVoS2NHSnRZelprV0VwMVQyNVdNV0ZYVVRaUFJFMDFXVlJrYWs1VVVYUk9iVWt3VFVNd01FMVhUbWxNVjBsNFRVZFJkRTlVU1RWT1YxRXpXbFJqTVZwcVl6TkphWGRwWTIxV2VtSXpWbmxaTWxWcFQyNXphV050Vm5waU0xWjVXVEpXVldWWVFteEphbTlwVG1wak5FOVhWbXBhVkdOMFdtcE5ORnBETURCT1JGazBURmRKTlZsdFdYUlBSRlY2VFdwUk5VMVVhekpPUkVwclQyNU9NR050YkhWYWVuQlFZMjFrYUdKdGJEWlpXRkp3WWpJMGFVeERTblZaVnpGc1NXcHZhVmxYVFhsWlZGVTBUMVJKZEU1WFdUQlBRekF3VFZST2FFeFVaM2hPYWtsMFRrUnJNMWxYU1hkTlYxRjNXbFJKZWs5dVRqQmpiV3gxV25wd1RsbFhUbE5oV0ZKcVlVZHNiRWxGZUdoWmJUbDVXVmhTZG1OdWEybE1RMG93WlZoQ2JFbHFjR0psZVVwcVlqSlNjR0p0WTJsUGJIUTNTVzVPTldNelVteGlVMGsyU1dwR2FFMUhSVEZaYlU1b1RGUlJlbHBxUlhST1IwMTVUWGt4YVU1SFNYZE1WMDV0VG1wS2FFOUhTVE5PVjBVMFRrUndlbVJJU25CaWJXTTJZVWhTTUdORWIzWk1NMUpzWTIweGNHSnRPWE5pTW1RMVRHMW9jMDU1TlhaamJXTjJVVEk1YTFwV1RqVmpNMUpzWWxNNWRtTnRaR2hpYld3MldWaFNjR0l5TkhSa1NHeDNXbE5KYzBsdFRuWmFSMVZwVDJsSmVFOVhVVE5aZWxKb1Rua3hiRTlYV1hoTVZGRTFXbTFaZEZsVVRtcFplVEF3V2tST2FrNVhWVFJaVjFKb1RXcEJObU16VW5saFZ6VnVUMjVDZVdJeldXbE1RMHByWVZoT2QySkhSalZKYW05cFRYcEtiVTFxWnpWT2FrMTBUbnBrYUU1NU1EQk9WMWw2VEZkRk5GcFVXWFJPTWxwc1RtcEJlazFFUlhwWmJVVXpUMjVPTUdOdGJIVmFlbkJKV2xkR2MyUkhhR3BaV0Vwc1NVWkNlV0l6V25CYVIxWjVTVzR4WkV4RFNqQmFXR2d3U1dwdmFWcHRVWGhOZWtwb1RXcFpkRTVVUlRGTlF6QXdUVlJSZUV4VVp6Vk5SRVYwV2xSWmVGcEVUVEJPZWtGNFRqSktiRTl1VGpCamJXeDFXbnB3UWxreVRubGFWMUp3WkVkV2EwbEZlR2haYlRsNVdWaFNkbU51YTJsbVZqQnpTVzFPZG1KdVVtaFpNMUZwVDJ4ME4wbHVVbXhpUjFacVlqSXdhVTlzZERkSmJrNDFZek5TYkdKVFNUWkphbXN3VG5wbk1rOVVXbXBNVjFVeldWZEpkRTVFUlRCTmVUQTBUMVJvYkV4WFdtdFpiVnBxVDFkWmVrMUVZekphVkhCNlpFaEtjR0p0WXpaa1dFcHpTV2wzYVdSdFJuTmtWMVZwVDJsSk0wNTZRVEJPVjFWNFdYa3dNVTV0VFhsTVZGSnFXbFJWZEZsWFVURlpVekF5V1cxR2FrMTZRbXhOUkZKc1RtcGpObU16VW5saFZ6VnVUMjFvTUdSSVFucFBhVGgyWkROa00weHRNV2haTTBwd1pFZE9iMkZYVm5OWlYwcDJZMjFHTUdJelNqVk1iVTUyWWxNMWVscDVTamxNU0hOcFl6TnNlbVJIVm5SSmFtOXBUVWRKZWsxcVdtbGFiVmwwV1dwTk1FOVRNREJQUjFGNlRGZEdhRTlIVFhSTk1ra3dUbGRTYlZwSFRtaE5hbXMwVDI1T01HTnRiSFZhZW5CM1lVYzVkVnBUU1hOSmJscG9Za2hXYkVscWIybGFWMXBvVG5wamVWbFVWWFJOTWxFelRWTXdNRTlVWTNsTVYwVjZUbGRaZEUxVVozaE5WMUV5V21wYWFVMVVhelJQYms0d1kyMXNkVnA2YjNKT2FsVXlUbnBaTVU1RVRYbE5VMG81V0ZOM2FWbFhVbXRqYlZaNlkzbEpObVY1U2pCbFdFSnNTV3B2YVU1VVJUUk5lbGsxVFZSVmRGcEVhR3ROVXpBd1dtcEtiVXhYU1hoTlZFRjBUVlJDYUU1dFZUSlpNbFpyV2xSU2EwOXVUakJqYld4MVducHdkMkZJYkhwaFYwNW9Za05KYzBsdVZucGFVMGsyU1dwak5GcEVZelZQUkZFMVRGUm9hazVIVVhST1JGcHJUWGt4YVU1VVdtdE1WMUY0V1ZkTmVsbHRUbWhPYlZreFdrUndlbVJJU25CaWJXTTJaREk1ZVdGNVNYTkpibEpzWlVoUmFVOXBTWGhQUkdNMFdtMVZNVnBUTUhkT1JFa3pURlJSZDA1RVVYUlpiVTB6V1hrd2VrOUVTVE5OTWxab1dtcEthazFYUlRaak0xSjVZVmMxYms5cVNXZFdSMmgyWWxoT2RtSnBRa0prYlZaMVpGZFZaMDVEZDJkVk1teDFXakpHZDJJelNteEpSRUUxVDBSbk5FOURTamxtVmpFNVpsWXhPVXhEU25OaU1tUjJTV3B2YVZsWFNUSk5WRkV6VFVSWmRFOVVSWGRaYVRBd1dWUk5lRXhVYTNkYVIxbDBXbXBqZDA1WFVUVlBSMHBwVG5wbmVVOXVUakJqYld4MVducHdhMWxZVW1oUGJXeDBXVmRrYkV3elFuVmFlblJwV1ZoT2JFNXFVWE5oVmxwRFZERktNMDFGZEVoYU1qbENVVlZHUWxSc1RsWmhSVlpXV2pCR1FsRlhXbEpSVlVaQ1VrVnNSRkZWTVVKUlZVWkNZMGhuY2xWSFJrSlJWVVpDVkZSR1ExUldXa1pXVlVaQ1VWVlNUbVZyTVRaVVdIQk9aV3N4TmxSWWNFNWxhekUyVkZod1RtVnJNVFpVV0hCT1pXc3hObFJZY0U1bGF6RTJWRmh3VG1Wck1UWlVXSEJPWldzeE5sUlljRTVsYXpFMlZGaHdUbVZyTVRaVVdIQk9aV3N4TmxwVlRuUmhWVVpDVVZWR1FsSlZhRk5WTVZKelZGVkdVbFJEZEVKT00yaENXakkwZVZKR1FYcGxhMG96WTJwR1JGVkZWbk5MTUd0MlZWVkdRbEZ1Wkd0VGJFcEdVbXhXYkZSdVNucGliVkY0VFdwS05XSXhSbE5rYlhSSlUxWk9TVlJwZERaTU0xSTFWbGR6TldJeFVrWlJNVVY0V1d4U1ExbDZTWHBaYm14UFkzcENRMDVWWkVwU1JVWlRVVlZHUWxGVlJrSlJWVVpDVVZWR1FsRlZSa0pSVlVaQ1VWVkdRbEZWUmtKUlZVWkNVVlZHUWxGVlJrSlJWVVpDVVZWR1FsRlhjM0pUVjNOeVUxZFNORTVIWXpGVWFsSkRUMVZrVWt3elNsRlJWR3hMVERCc1VWcHNUbTVrTUhkMlZGVldSbEZWUmtKUlZVWkNVVlZHUWxGVlJrSlJWVVpDVVZWR1FsRlZSa0pSVlVaQ1VWVkdRbEZWUmtKUlZVWkNVVlZHUWxGVlJrSlJWVVpDVVZWR1FsRlZSa0pSVlVaQ1VWVkdRbEZWUmtKUlZVWkNVVlZHUWxGVlJrSlJWVkl6VlVSV1lWVkhPVkZPV0VrelVtdHdURkZYV1ROWk0xWnRVVzFzYjFWRk5WUmhNV2N4WVVkNFFrOVlWWEpTU0U1UlRqSlNXVXd3Y0V4TlZrRjVWbXhDY0ZVd2JIWmFWMHBHWTJ0NE0xWnRaekZYYm1keVQwVk5lRmRVU1hsWFdGSlJUVVZhZDFwcVdtOWFSMVpvU3pJeGVFMVdaSE5oV0dodFdsZHZNbFZ0VGtWbFIyOTNUMWhPTTFkSFNtbGFWVXBTWTBkc2NXUlhZM2xOUjBaeFRERk9SazlIU2pKaWVsWnZVbGhXYUdSclJqRlZNSFIzVlZkYVMyVkdVa2hQVkVadVZsaEtSRlpxV25GVk1VWkdUVWM1VVdFeVZUQmtNMVp5V2xSamQwNVZWbmhqUlhoUFZqTm9NRlJZVWxSaGVsSnhaR3hvU0dKSFVYSmtSWGh6WlVoYVYxUlZOWFZaVjNSRlRqSXhSbUp0VWxwV1JscFlWVEkxVjA5RVdYZFdNVlpaWWtSTk1GVnJNVFZPTUVwc1lsaENOVkl6Y0U5T00wSkNXVzB4V1ZKVlJUSlpiVm95VTNwQ01VMTZTakZXUlZwTVV6RmFUazFJU1hkWFdHTjRWRlpTYWxKdVduZFBSMnhYVkVaQ1JVMURjelZhTUdoU1pWTnpNMk5zVG0xTk1sWnNZVzVCZVZOSVZrZFpNMDUwWWtkU2NGSlliM2RTYm5CTVYwZGFWRlZ1WTNwalYxVjNUMFpvZUZwRWJHdFZSRnBTVXpBNVQySnRkREZPUjNoSVRUQTFWRmxwT1ZOUmJsSk1aRVYwTUUxWVVqQmFSVXBMWVZac2FVMXNXa3BPTWtwNVdYcGtNRmw2YUVwWFZ6a3dVMjV3U1ZaVlNYZFplWFJRU3pGUmVtTnNVbEprVlhoTVl6RndVMk5ZUWpaaE1WSlVUakpTWVZOVVVqSmllWFI0VTIwMWExSlZaRkJQUlZZMldsZE9OV0Z0Um1wT2FUbEtWa1UwZVZNd09WaFpWbFpOVTFaUmRsbFZlR3RhVmxaMVkxaENhMkZVWkZkV2VrbHlVek5zYWsxcWJFZFVSRTU2VGpKVmVtRkhhekZVUmxKVVlVZFdXRll6UWpWV01uaEpUa1pvTm1KWVdsaGhiVFZ3VkRKc1IxUnFUbHBXTUZKd1pHeGtTazlVU2xoa1YzTXhXVE5SZVZGNlFuZE5NSEEyWWtSc1dsUnFXVEpXTUdzeFUxWlpkbFp1YkVkUFJGcDVUVmRGZUU0elFrbE9WbFpPVVhwQ2QxZERPVVZrTVdoWFZsUlZlVTVGZEhwT1ZteHVVa1p3ZEZSRVVqWlNNMjk0WkhwbmQyTkVUWHBWUjI5NFkwVXhNbGt5YTNKa1IwMTVXVEJhU21GdE1XOVRSRXByVmpGYWJXUlhSbGRVU0ZaTllXNXJOVnBXVWpaYU0wWlFZMjVHYkdReldYZGtibFowVEhwR1RGVnFVWEpOYlVVeVVrZG5NV05HYUZCT01WazFWSGwwZWs1RmRGTlRiRUpDVWtoV05GUnRjREJoYTFwRVVUSnpkbEV5ZURCU1dIQnVXbTV3VkdSSFZubFZNMXByVjJ4R1lWcFZVblpsV0d4NFpVWkdibVJXU1hoaVJtaDBVVzE0U2t4NmJGRlZNbFpwVjI1Q2FWUXlWVFJaYld3eVpFUkthVkpyY3pWWFYwWk1Ua2RXU1ZwVVpFOVVSVFZvWkVWNFVVMHpSa2hYVlhodFZFUmplRlZ0T1U1a2Ewa3lWMGhWTlU1cmIzcFdSbVF3VDFWNFZXSXhSazVPV0hCMFQwWnNiV1ZIU2tsVFZWWlVWVVp3V1ZkR1kzWmtSemt5VmtaT2Rrc3hRbmhTYm1oUFdsaE9NMWR1Um5GVWVUbFpUVVJzVUdSclNtNWhWR3hRV1RCb00wNHllSE5XV0ZaeVdUTlpjbHBIYTNkamJUVnNZMWRaTlU5WVZsbGlNSFJ1WWtVeFRtUXlSbk5pUkdRMFRESXhOVTFITVhOVlJGWjNZVlphZFdScVRtMWtWbTl5VFZScmVtVkhOWGRXUm14TlpXcE9WR0Z0Vm5GVlJYaFpZMFU0TWxaSVVsbFpibkJaWTBkYVNsWlhUbXhUYTJoMFZVaE9XVkZWY0hwWmEydHlXVlYzTTFwdVducGpTRUpYWXpBNVdVNHpWbWhhUlc4MVVtNWFNVlpFV1hwVlNHaDZWMnRHVWsweFZrNWxTR3h1VkVoc1dHUnVUbkpPYVRselpGZDBNVTVFUW0xWmFtZ3daRWM1YzFKRldrZFpha1poVlZaRk1rd3lNVk5oTTFsNFlWWmpOV0ZVUmt0T2EwMTJUVmRHYkdGclJtcGtiRVpSVm0weFZtUkVXa2RSYWtwcVltcEpNbE51Y0VWVWVsSlZZekpHVFZreFpHeFpWbEpwWW5wa1NtSnFRVEJYUkVFMFRtcHJNbGRJYUZWaWJrcHlZbGh3U0ZFd2FIQmlWekZMWTBWNE1WUnRSbEZoVkdONFdtbDBURlF5ZERCYVZGWktVM3BzVUdOc1RUTk9SMngxV2pGQ1ZGcHJjR3ROVnpsS1ZUQlJOVmRxUW5STU1taFJZVVZKZDJKNWMzWlVSMUY2VkZVeFNGWllTbFJXVkZrMFkzcHNOVlpZY0ZsVk1EaDZZek5XYjFaNWRFTmhRM1JMWVdwQ2RtVlliM2xqTWpWaFkxZGtkMWt6Y0d0T1Yyd3pZMGhhVTJSdE1VeGFiR2gzVjFNNVVVMUliR3hWTWxwNldqQm9VR0ZIZUhCa00xSk5WWHBrYWxGc1RuQlZha1pvVjJ0YVVVMTZRbmhMTUVvd1RUSmFXVmxyY3pWaFJrVjVWa2hKY2s1SVNsUlplWE0wV2tkYWMxZEZUbEJOYlhjeVkwWnJjbFZGYkhwT1dFSkhUVmhvZWs1SGRIUlpiR2hYVVdwYU5rMUZjRmhWYkVwclUwTnpNbEZxUWpOUFJscHNZak5zYTFwV1pITldhbWN3WlVkR1ZsUkhOVEpYUkVFMFpHdFdObFJ0TkhKVFJYQlFaRk4wTUZwc1VYaFpNVTVwVXpGQ1RWcFlaREpXTW5ScVRESk5lRXd4YkRCamVsSlVZa1Z2Y2xKRmFIZGtWelY2VW1wTmQwNXFiRmxWTTBvelRqRmFiMVZYVm5OT1IyUkpWR3BPVW1SVmFGQlBSM0JHWVhrNVVFOUhUa1JMTVZaMlRETkNXVlZwZERKU2VrSk5WVEkwZGxkc2FEUmlSbWcxVTFjNWFrNXFRbEZWTW1oc1lrZFNNMlJ0VWpaWmFsSkpWbnBPU2s1NlJuZFVlVGgzWkRCb1dtTlZPVXBqUkdneVRrUkdTMVpFVlhsV1JUVnhXbXBXY1dWRVNUQmFiVEZHVDFSYVdGUklTa2hPZVRscFl6STVUazV0Vm05Uk1HUjNVMnBvZWsxRE9XRldhazV5VDBoR2RWWkZPV3RYUkVaRFRtcGFTVlF5WkdsT1Iwa3hVekZLYldSSGR6Rk9SMXBFVGpJNU1tVllXbUZYYmtKWlpFUmFTMlZVVW5aTk1YQjRXbGRTVUdSck1WVmFTRTV6VlVaV2IxSkVRbmxpUm1RMFpHeGFUbEp1VWxSTlJrRjRWbFU1ZFZWSVdsaGhlbWN3VjBkU2FVMUZVa3BYUm1OMllUQm9jRlJXVGsxYVZ6QXpZMnN4VGxNd1VuUmtSR3hMVFVWb2RGb3pVa3hNZWs1RFducGtTR0ZIWkZCU01IaEVXakZDVlU5SFJtMWpSRVozV2taU1JtVkVVVFJQUkZwMVdqTlNURkpxU21wUFZUbDNZekprVjFKSFNsQlRNRTVMVkRGR2FHRXlhM0pOVmxwNVVtMXJjbVF6U25CVGJrSnRWRzFGZG1JelNsUmhSMDU1Vm5wSk5FNXRjRTFYV0U0MVpWZGFZVlJIZHpSVk1GWXdZbXN3TWs1WGIzaFZNSGhKU3pOa1dWWnJZekpoYlUxM1VrWnNTazlVWnpKU2JsWnhVekJ3ZFZWVmVGZE5SMDE0VkZoS00wNHpUbEJPVnpSMldtNWtNMUpIV25KaU1tODFXakphUlU1SE9UWmhTR3hIVVZaV1YxUllSa05WYlhoYVkydE9hMDFIT1ZaaWJFcDVZVEpzTlZKWWNGQlZSVnBQVkVWYU5sWkljRlZPVmxwelVXeG9hMDB3T1hSUFJ6azJZVEJLTUZRd09XdFNSa0poWVRGVk5XRjZhM1pWUlU1M1ZFZDBTVmxZU25WWGJGWnRVMWRvV1ZReldYZE1lbHBLVlROWmQxVXdPV3BrYlc5MlRWZEpOV1JJY0cxaE1EUXhVbnBPTkU0eVZtbGFSV3h2VFhwU1dGcHJXVEprU0VKRlkyNUtXbE42V2xGV1dFSnJUSHBTYlZOc1RYcFpia0paV1ZoS01GUXdjRTlMTVU1VFVrVktXVlF6V1hkaVJGcDBUbXRXTmxkcVJqWk5lbFp6Wkhwc2NrMHhTbEJOUkVaWVZGVmFRMVpVVWtsT1EzTjVUVmQ0VGxsdFNUUlhTRTEzWkcxNE1sZFdXa2xqUkU1UlZsaEdURkV5VG1oVU1GSldZekkxYVZScmVGUlZhbFpxVmtWTmNscEdiM0pqU0VKWFdsZDRSR0pyZEdoTlZFVXpXbFUxVlZSc1JuSlZNVnBIWVZaVmVXUkdRWEpWV0VwVVZERmFNbGRzY0doV1ZYaDRaRE5hTUZWRlRtOU1NbkJyVkZkSmVsVnJORFZQVmtaUVlUSTVjV1JxYUUxak1VWlVUVWR6ZGxSNlkzSmtSWFJ0U3pBMVRsWkVhekpVYkVGM1ZsaGFUV1J0YkhWVmJUQTFVMjAwZVU1SVpGZGpiVXBGVVRKS1NGTlhVa2RPU0doWFVXczFTMHd6YUV0Vk1sVXlWbGRXZGt3d1NuRk1lbXhLVEhwa1JXVlVRbEZrYmtwMVUyNXJNV0l6UWxSVFZrcFRWMnhuZDFsV1JsWlJWVVpSWld4bmVtRkVUbFpSVlVaRVVWWkdRbVZFWkZwUlZWRjJXVmMxUjFGclRrOWFSMFowVTFWR1ExRlZSa0pSVlVaQ1VWVkdRbEZWUmtKUlZVWkNVVlZHUWxGVlJrSlJWVVpDVVZWR1JWRlhNWFJpTWxaTVQxVm9ObUZWU1RGVFZHeEdVV3hvZFdWRWFFSlJWVVpDVVZWR1FsRlZSa0pVUlVwMFVWVnNZVk15TVRaV01HeDFaVWhzVUZGVlJrSlJWVVpHWWtWYVZXRXhUakZWVnpGRVVYbEpjMGx0Ykhwak0xWnNZMjVOYVU5c2REZEpiV3hyU1dwdmFVMXFRbTFPVkd0NFRsUm5kRTlIU1ROWlV6QXdUa2RXYTB4VVp6VlpiVVYwVDFkRk1rOVVUVEJPUjFWM1RVUlZNazl1VGpCamJXeDFXbnB3YTJGWFVUWmFXRkp2WTJwdmQyVkZWWHBQVkZFelQxUnJlVTlGVG1wT1JWWnRVbXRWTVUxRVl6Tk9SRkUwVDBSak5FMUZTVFZhYWxsNFRtMUthMDVGU1RSTmVrRnBURU5LZVZwWVduWlpNa1l3WVZjNWRVbHFjRGRKYmxJMVkwZFZhVTlwU214TmVrVjVXbXBKTWsxVE1XdFBWMGw1VEZSUk0wMTZSWFJQVjBrMVdWTXdlazlVUVRCTmFtaHJUa1JHYUUxVVdUWmpNMUo1WVZjMWJrOXJOVkJVYTFWcFpsTjNhV0p0Um5SYVUwazJTVzFOTVU1VVp6SmFSR041VEZkWk1WbHRVWFJPUjAxNVRWTXdORTR5UlRSTVZFazFUVlJWZWsxWFNURk5WMWw0V2tSd2VtUklTbkJpYldNMlZUQkdUbFZGZUVaSlJVNU5VMVUxU2xGNVNYTkpiV3hyV2xjMU1HRllValZWU0VwMllqSlphVTl1YzJsa1NHeDNXbE5KTmtscVp6RlpWRVpyVGtSV2JVeFVVVEZQUkUxMFRrUk5NMDU1TURWUFZGWnRURmRhYTA5WFVYcGFhbXQ0V1ZSV2JWbDZjSHBrU0Vwd1ltMWpObEpGTlZSTVZWSktVa05KYzBsdGVIWlpNa1l3WVZjNWRVbHFiMmxhVkZacVRrZEdhbHBYVlhSYWFsVjZXV2t3TUZscVVtbE1WMGt5V1RKSmRFNXFSWGhhVkVGM1dUSkpOVTFFU210UGJrNHdZMjFzZFZwNmNHdGlNalYyWkVoYWJHTnRiRzFsVXpVd1dsaE9NR0ZYTlc1TWJscHNZMjFzYldWVE5XNWlNMWwxWXpKamFVeERTbkphV0d0cFQybEthRnB0Vm0xYWJWSnNUa013TUUxcWJHMU1WRkpxVGpKTmRGbHFTbXhOZVRBeVRXcENhMWxVVG14YVZHc3dUa2RGTm1NelVubGhWelZ1VDIxU2NGcEVjR3hrUjJoNVQycENORkpVVFRWT1JHTTFUMVJKTkZFeVRUQlNWMXBIVWxSVmQwNTZZekJPUkdjMFRucG5kMUZxYkcxT2FrVXlXVzFSTUZGcVozcE5RMDVxWWpJMU1HTnRPWE5pUjFaNVNXNHhPVmhUZDJsS1NGSnNZbGhDYzFsWVVteEphbkEzU1cwMWFHSlhWV2xQYVVwcFdWUlJNMDFxWTNkTmVUQTBXbTFWTUV4VVVYbE5SR3QwVDFkUk5GcHBNSGhhVkVKb1RsUk9hMWxxU214YWFsRTJZek5TZVdGWE5XNVBhMmhHVVZWNFZWTkdPVVJTVmtwVlNXbDNhV1JJYkhkYVUwazJTV3BuZUU5RVdUTmFWRWt3VEZSUk0wOUVRWFJPUkZVeVRYa3hhVTFVWnpKTVZFbDRUbnByZUU5WFdUUlplbXQ0VDFSd2VtUklTbkJpYldNMlVsVXhRMUpWVWtWU1ZWSm1WV3RXVDFKRlZsTlNWa2xwVEVOS01XTnRkMmxQYVVsNVQwZEdiVTFIUlhwTmFURnNUMFJKTkV4VVVtdE9lbEYwVDBSamVVMXBNREZPUjAxNFQxUmtiVTV0UlhkT2FsRTJZek5TZVdGWE5XNVBiV2d3WkVoQ2VrOXBPSFpoUjFab1lraFNiMWt5Vm5sa1F6VjVXbGMxYTFwWVNteGphVFYwWWpKbmRWb3lPVEpNYms1dVRIbEtPV1pUZDJsak1teHVZbTFHTUdSWVNteEphbkEzU1c1U05XTkhWV2xQYVVwVVUwVkZlbFJYVm5saE1uaHNWVWhLZG1JeVdXbE1RMG93V1ZoS2JscFlVa2xaV0U1dlNXcHZhVmxYU1hkWk1sazBXWHBuZWsxWFdUQmFiVXBwVGxSVmVWbHRVbWxPYlUwMVdXcEtiRmx0VW1sTlYxWm9UWHBOTUZwdFJtMU9WMUpwVG0xWmQxbFhVWGxOYWxwb1dsUm5NVTFIVFRST2FrRjZXa2RGZVZsVFNYTkpia0o1WWpJNWJVbHFjR0pZVTNkcFlsZFdlV0V5ZUd4VmJUbDJaRU5KTmtsdFJtbE5SMDV0VDBkTk5FMTZSbTFPUjFwcFdXcFZNVTF0U210WmFscHFUMWRKZVZwWFNtdFpha1pzV1ZSTmVrNUhXbWhhYWxacldXcGFiVTFIUm10TmFra3lXVmRWTkU1VVFtcFBSRmwzVFRKU2FFMXRSV2xtVTNkcFkwaEtkbUl5V1dsUGJIUTNTVzVTTldOSFZXbFBhVXBRWTBkV2RWRllVakJhV0U0d1dWaFNjR0l5TlZSaFYyUjFXVmhTTVdOdFZYbE5SRVUwU1dsM2FWa3pTbXhaV0ZKc1drTkpOa2xxU1hkTmFrVjBUVVJuZEUxcVVsVk5SRkUyVFdwSk5rNVVWWFZOVkdNelYybEpjMGx1UW5saU1qbHRWVWhXZVdOSE9YcGFVMGsyU1cxR2VtTXlWbmxrUjJ4Mlltc3hiR1JIYUhaYVEwbHpTVzVhYkdOdGJHMWhWMDVvWkVkc2RtSnJNV3hrUjJoMldrTkpOa2x0VW5CYVJIQnNaRWRvZVU5cVFqUlNWRTAxVGtSak5VOVVTVFJSTWswd1VsZGFSMUpVVlhkT2VtTXdUa1JuTkU1NlozZFJhbXh0VG1wRk1sbHRVVEJSYW1kNlRVTk9hbUl5TlRCamJUbHpZa2RXZVVscGQybGpNbXh1WW0xR01HUllTbXhKYW05cFRVaG5NMWxVVFhoUFZGcHRXbXBTYkU1dFRUUmFWRmw2VG5wV2JVOVVZM2hQUkZreFdtMU9iRTlYVG0xT1ZFcHJUV3BhYlU1VVVYaE5WRUYzVFRKSmVGcFVRbXRaTWtWM1RVUkthMDU2UVRKTmVra3pUVVJOTTAweVZtcGFWRVp0VDBkV2FrOUhTVFZQVkd4cVRYcEZkMDlIVG10UFJHZDZUVVJDYTFwRWF6Qk9SRlYzVFhwamVrNXFUWGROZWtVeVdsUlZOVnBxV210YVYwa3hUVVJqZDFscWEzcE9iVlV5V1hwc2JGbHFSbXBKYmpGa1psRTlQU0o5WFgwc0luTnBaMjVoZEhWeVpTSTZleUowZVhCbElqb2lVMGhCTTAxbGNtdHNaVkJ5YjI5bUlpd2lkR0Z5WjJWMFNHRnphQ0k2SWpVeE56UXdPRGN4TURrMVpqaGpZekJqTURoalpUbG1NakprWXpnd01HVTFNRE5rWkdKalpqaGpZakl3TXpFNE5ERmtaRGMyT0RNeU9XVTFObUk1WVRFaUxDSndjbTl2WmlJNlcxMHNJbTFsY210c1pWSnZiM1FpT2lJMU1UYzBNRGczTVRBNU5XWTRZMk13WXpBNFkyVTVaakl5WkdNNE1EQmxOVEF6WkdSaVkyWTRZMkl5TURNeE9EUXhaR1EzTmpnek1qbGxOVFppT1dFeEluMHNJbkJ5YjI5bUlqcGJleUowZVhCbElqb2lUM0JsYmtGMGRHVnpkR0YwYVc5dVUybG5ibUYwZFhKbE1qQXhPQ0lzSW1OeVpXRjBaV1FpT2lJeU1ESXhMVEE0TFRJMFZEQTFPakE1T2pVNUxqTTBNVm9pTENKd2NtOXZabEIxY25CdmMyVWlPaUpoYzNObGNuUnBiMjVOWlhSb2IyUWlMQ0oyWlhKcFptbGpZWFJwYjI1TlpYUm9iMlFpT2lKa2FXUTZaWFJvY2pvd2VFVXpPVFEzT1RreU9FTmpORVZtUmtVMU1EYzNORFE0T0RjNE1FSTVaall4Tm1Ka05FSTRNekFqWTI5dWRISnZiR3hsY2lJc0luTnBaMjVoZEhWeVpTSTZJakI0T0dKak9HSXhNMlZsWmpReFlqUXhZek0wTldGa1kySmxZVEZtWW1GaU16YzNOek5rWWpWbVltWTFaREU1WkRWaU56TTFZek0wWXpKbFlqWXlNVEl5TnpZMk1HSmxNV1ZsTjJZMVptTTVZV1k0T0dZeU0yRXpaVFJtTWpjNU1UWTROMll4WXpBMk5HTTRNV1ZsTW1RNE1qRmpNelF4T0dSaE1ETmtaVFE1TVdReFlpSjlYWDA9In1dfSwic2lnbmF0dXJlIjp7InR5cGUiOiJTSEEzTWVya2xlUHJvb2YiLCJ0YXJnZXRIYXNoIjoiMzhkMDBkMGQ2ZGU1ODU1MDNiNDRiYzc5MmNjNWVjMzlhMDZmZjRhYmU3YTFhOGIzYjIzNjNjMjUyMzMwMzRmMiIsInByb29mIjpbXSwibWVya2xlUm9vdCI6IjM4ZDAwZDBkNmRlNTg1NTAzYjQ0YmM3OTJjYzVlYzM5YTA2ZmY0YWJlN2ExYThiM2IyMzYzYzI1MjMzMDM0ZjIifSwicHJvb2YiOlt7InR5cGUiOiJPcGVuQXR0ZXN0YXRpb25TaWduYXR1cmUyMDE4IiwiY3JlYXRlZCI6IjIwMjEtMDktMjdUMDg6NTg6MDAuMDA3WiIsInByb29mUHVycG9zZSI6ImFzc2VydGlvbk1ldGhvZCIsInZlcmlmaWNhdGlvbk1ldGhvZCI6ImRpZDpldGhyOjB4RTM5NDc5OTI4Q2M0RWZGRTUwNzc0NDg4NzgwQjlmNjE2YmQ0QjgzMCNjb250cm9sbGVyIiwic2lnbmF0dXJlIjoiMHg3N2VmYzE4ZjJkYzBhNzIzYThkNGRkZmY3Y2UxZjE1N2Q3MGFjZTQxNWEwOTU5ZGM3MGE2NzE0ZmU0ZTVlZTY1MThlZGFjMmIxYjdjMDY3Y2UwOTRhMThiNGQ0MThhN2QzNzZiMWQxYzg5YWM3NjQyYTcxOWZhOGNhOWY2YTg1ZjFjIn1dfQ=="
}
]
-}
+}
\ No newline at end of file
diff --git a/test/fixtures/v2/pdt_pcr_notarized_with_nric_wrapped.json b/test/fixtures/v2/pdt_pcr_notarized_with_nric_wrapped.json
index 5a774598..d8a42182 100644
--- a/test/fixtures/v2/pdt_pcr_notarized_with_nric_wrapped.json
+++ b/test/fixtures/v2/pdt_pcr_notarized_with_nric_wrapped.json
@@ -1,358 +1,359 @@
{
"version": "https://schema.openattestation.com/2.0/schema.json",
"data": {
- "id": "fea39b42-31f4-401d-9dc9-0f7e80d174ff:string:c5ad19bb-403c-4b52-971d-3f01e87883e3",
- "version": "8c9251af-276a-4c05-a5b7-7bb84e204eaf:string:pdt-healthcert-v2.0",
- "type": "e4bfe04b-3947-4428-b684-2bbdb73e4227:string:PCR",
- "validFrom": "2e446d0c-a74e-4c05-ad02-57a38d4766ae:string:2021-08-24T04:22:36.062Z",
- "fhirVersion": "78102e16-4c55-4dc4-9eab-b7ba8418712f:string:4.0.1",
- "fhirBundle": {
- "resourceType": "b58b7465-ff4b-4883-9012-f1173598357e:string:Bundle",
- "type": "ab4e4c58-f3be-45af-ace6-aedac683c70a:string:collection",
- "entry": [
- {
- "fullUrl": "98e62a45-24b2-47f1-8e35-ce5555449bec:string:urn:uuid:ba7b7c8d-c509-4d9d-be4e-f99b6de29e23",
- "resource": {
- "resourceType": "e2764877-86ad-434f-a22b-5b9631b45ef7:string:Patient",
- "extension": [
+ "id": "919a402f-f399-4d80-9a36-5393ad757027:string:3a21794e-0abb-46ae-91be-f8799818d7b0",
+ "version": "b524b41e-e9f3-4e30-9060-54484cfaa3d8:string:pdt-healthcert-v2.0",
+ "type": "1b5cc929-5ed5-48b7-a2d6-cd8aaba102ae:string:PCR",
+ "validFrom": "3eda08d3-8396-4405-ad0e-22ea94881e9b:string:2021-08-24T04:22:36.062Z",
+ "fhirVersion": "9e1876e8-208c-4ee8-8e13-7f41cba11aca:string:4.0.1",
+ "fhirBundle": {
+ "resourceType": "c92f6e26-4381-42d8-94dc-10872bd3d80f:string:Bundle",
+ "type": "d475c3ab-ec7f-4637-bcbe-737271709015:string:collection",
+ "entry": [
{
- "url": "043ae0fc-232d-4b91-ad60-4b9fbdab0c24:string:http://hl7.org/fhir/StructureDefinition/patient-nationality",
- "extension": [
- {
- "url": "b6721e33-ddeb-457e-b480-0e51b8d2d1e5:string:code",
- "valueCodeableConcept": {
- "text": "498ab2e3-c9d5-40eb-aa61-f1fa917fd0f9:string:Patient Nationality",
- "coding": [
- {
- "system": "eca8b511-c783-46b4-83e2-0028aabef284:string:urn:iso:std:iso:3166",
- "code": "2311371c-9046-489d-b993-e9ab205089b7:string:SG"
- }
- ]
- }
+ "fullUrl": "adadd2e6-31f0-4c29-94e4-708a640e5d30:string:urn:uuid:ba7b7c8d-c509-4d9d-be4e-f99b6de29e23",
+ "resource": {
+ "resourceType": "f2dbdccc-6591-4468-9927-5e73a0754f98:string:Patient",
+ "extension": [
+ {
+ "url": "6a9e8b05-3a13-48ec-b1a8-23dfa8640ac3:string:http://hl7.org/fhir/StructureDefinition/patient-nationality",
+ "extension": [
+ {
+ "url": "5ad7f45c-447a-4f39-b18f-8d3f210cfb10:string:code",
+ "valueCodeableConcept": {
+ "text": "b3f57c96-7e5a-408d-8d91-d365a5216dbb:string:Patient Nationality",
+ "coding": [
+ {
+ "system": "e0ecc597-6d1a-4794-830a-cc52e8ca45b9:string:urn:iso:std:iso:3166",
+ "code": "30139f50-0a25-466b-9ec7-d638fb678ad9:string:SG"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ],
+ "identifier": [
+ {
+ "id": "0313376f-3f35-42e3-a475-faddedffac37:string:PPN",
+ "type": {
+ "coding": [
+ {
+ "system": "d80a5377-19b2-498d-8db5-920df798420a:string:http://terminology.hl7.org/CodeSystem/v2-0203",
+ "code": "58641a91-45fa-4938-b823-fa2814450f23:string:PPN",
+ "display": "0ac81cb9-1c5a-4a5b-87e2-d40e1ddaf727:string:Passport Number"
+ }
+ ]
+ },
+ "value": "ee2384a5-6be5-405d-aa15-c423800f7285:string:E7831177G"
+ },
+ {
+ "id": "9debb5c8-b408-49a1-97fb-23f73e42f514:string:NRIC-FIN",
+ "value": "511f4d36-b5e0-4434-8385-77fecb09c783:string:S****989Z"
+ }
+ ],
+ "name": [
+ {
+ "text": "c013316c-05f9-4a8c-8a7d-40d03e98782f:string:Tan Chen Chen"
+ }
+ ],
+ "gender": "f9ba11b5-eb4e-499f-aa58-c3a6b4c2d68e:string:female",
+ "birthDate": "35ba2caf-0d90-4c88-899e-ece1dc6fcc56:string:1990-01-15"
}
- ]
- }
- ],
- "identifier": [
- {
- "id": "e1edd4c4-3087-43ea-9dd4-4cb1656bf1c7:string:PPN",
- "type": {
- "coding": [
- {
- "system": "8744907a-178a-4279-8b0e-a31d3d6d9b51:string:http://terminology.hl7.org/CodeSystem/v2-0203",
- "code": "91a49495-cc3b-4263-bcc6-82442b554215:string:PPN",
- "display": "43175fff-cf35-4b6a-b730-89db6e214c45:string:Passport Number"
- }
- ]
- },
- "value": "1cc34bdf-b69c-4189-966c-ca2601e0a30a:string:E7831177G"
- },
- {
- "id": "c565258c-9c24-4262-af59-6855e0f3c909:string:NRIC-FIN",
- "value": "9aac4b62-29a2-480a-a71d-85d6fcc6cdd6:string:S9098989Z"
- }
- ],
- "name": [
- {
- "text": "047b775a-c76b-473b-8030-0b6e15e930eb:string:Tan Chen Chen"
- }
- ],
- "gender": "71b9d4fb-806d-4b0d-9d24-e7169c0521d5:string:female",
- "birthDate": "968941d9-51b6-4f61-8f20-1bb22ff65c96:string:1990-01-15"
- }
- },
- {
- "fullUrl": "e2185fcc-7fcc-459a-b649-acfea6f3c23e:string:urn:uuid:7729970e-ab26-469f-b3e5-36a42ec24146",
- "resource": {
- "resourceType": "9a8a217e-a6be-4579-b9e3-1370b7fdf733:string:Observation",
- "specimen": {
- "type": "9a754eb7-cc39-4e16-a450-a228a31de5c3:string:Specimen",
- "reference": "c2b3dfe6-388f-4a0e-9569-9c67c20c3b61:string:urn:uuid:0275bfaf-48fb-44e0-80cd-9c504f80e6ae"
- },
- "performer": [
- {
- "type": "ba844954-b457-4300-bb60-d73cd9b54dd9:string:Practitioner",
- "reference": "a13d8c9e-fe1c-4196-bb13-73c8a68c54a0:string:urn:uuid:3dbff0de-d4a4-4e1d-98bf-af7428b8a04b"
},
{
- "id": "c436773a-a732-41c9-a37c-7d460f6a2dbc:string:LHP",
- "type": "a1a9a742-915a-4f26-b583-b2e13167d194:string:Organization",
- "reference": "fe4396f0-ea89-4f8f-a015-a8d07efdc9fc:string:urn:uuid:fa2328af-4882-4eaa-8c28-66dab46950f1"
+ "fullUrl": "d34d1bba-01ca-4a1c-b558-c113eb687000:string:urn:uuid:7729970e-ab26-469f-b3e5-36a42ec24146",
+ "resource": {
+ "resourceType": "dbb388b3-8f5f-4430-bf39-084d040b9a01:string:Observation",
+ "specimen": {
+ "type": "a7b5aa27-5327-43d8-afdd-4d55fb607bc6:string:Specimen",
+ "reference": "22cd274e-c752-4704-b80d-e662e81366ac:string:urn:uuid:0275bfaf-48fb-44e0-80cd-9c504f80e6ae"
+ },
+ "performer": [
+ {
+ "type": "3f642973-5a26-469f-b2e0-eac271bd19b0:string:Practitioner",
+ "reference": "de1d005a-8c5d-4cb7-a082-a13b9cc0ee22:string:urn:uuid:3dbff0de-d4a4-4e1d-98bf-af7428b8a04b"
+ },
+ {
+ "id": "a277f61f-af95-4547-8c97-6ecc7d00d47c:string:LHP",
+ "type": "e94c0196-746e-4558-a840-722de1d16a89:string:Organization",
+ "reference": "3becd52f-51fa-4b23-b7c3-cff7c92c2a0d:string:urn:uuid:fa2328af-4882-4eaa-8c28-66dab46950f1"
+ },
+ {
+ "id": "6e31efe5-0e3f-4731-a84d-6577ccb5ab77:string:AL",
+ "type": "bac26249-19c6-49af-8585-8f0a506de9a8:string:Organization",
+ "reference": "809f47b7-33dd-413f-a962-48d3eeb609fa:string:urn:uuid:839a7c54-6b40-41cb-b10d-9295d7e75f77"
+ }
+ ],
+ "identifier": [
+ {
+ "id": "d9e08c5c-da9e-45b5-b0e3-3b1234f568ed:string:ACSN",
+ "type": {
+ "coding": [
+ {
+ "system": "a44cc45c-97f2-49f1-8e79-949ccb3e6433:string:http://terminology.hl7.org/CodeSystem/v2-0203",
+ "code": "b91078c0-e180-4376-b142-a4f6007d13b3:string:ACSN",
+ "display": "7efc9f31-69d0-4c55-b030-c8d6d7312fc5:string:Accession ID"
+ }
+ ]
+ },
+ "value": "36716b84-7868-4e10-88ca-35089e54742c:string:123456789"
+ }
+ ],
+ "category": [
+ {
+ "coding": [
+ {
+ "system": "f03aa87a-df39-4d2b-a64d-9d42a1072eb9:string:http://snomed.info/sct",
+ "code": "3aa2e320-cb76-4155-ab92-5d4d9650132f:string:840539006",
+ "display": "bc43043b-d9e1-4581-8206-9e435e4cb6f4:string:COVID-19"
+ }
+ ]
+ }
+ ],
+ "code": {
+ "coding": [
+ {
+ "system": "8b4f3faa-5f9a-4cef-895b-821f55455be1:string:http://loinc.org",
+ "code": "878b94bd-7ca7-457e-9bb2-3e4fa9923418:string:94531-1",
+ "display": "584010ef-54d3-479f-a3f3-603b3fd4c878:string:SARS-CoV-2 (COVID-19) RNA panel - Respiratory specimen by NAA with probe detection"
+ }
+ ]
+ },
+ "valueCodeableConcept": {
+ "coding": [
+ {
+ "system": "11627a38-7f6f-4740-9afd-e8a3535198c3:string:http://snomed.info/sct",
+ "code": "2001fb1b-73f2-4ea0-a477-3a4034be0bb7:string:260385009",
+ "display": "804e4d77-b323-4743-8cd6-a2e88f9cf993:string:Negative"
+ }
+ ]
+ },
+ "effectiveDateTime": "70991a8d-fce8-45db-ad94-54047738d8b2:string:2020-09-28T06:15:00Z",
+ "status": "edd92751-a499-4533-b3cf-a9874256ec74:string:final"
+ }
},
{
- "id": "660de169-71f0-4c31-b8ec-005da927d47c:string:AL",
- "type": "7d082337-4a04-4de7-97ae-a659f804dc8b:string:Organization",
- "reference": "81d17b78-fb6b-4b30-ab87-b26b66669b80:string:urn:uuid:839a7c54-6b40-41cb-b10d-9295d7e75f77"
- }
- ],
- "identifier": [
- {
- "id": "fcaa9294-cda1-4849-b94c-b6b1962c3b21:string:ACSN",
- "type": {
- "coding": [
- {
- "system": "6d611ec7-082c-403e-b8ca-a023eb9a69f9:string:http://terminology.hl7.org/CodeSystem/v2-0203",
- "code": "8077e711-6d1a-45ad-bd2f-29d9c806f88e:string:ACSN",
- "display": "60b25c0c-921a-4802-8260-df3dc6feb1b8:string:Accession ID"
- }
- ]
- },
- "value": "2177d104-2ca8-4d40-a1b3-68b628b1bb9a:string:123456789"
- }
- ],
- "category": [
- {
- "coding": [
- {
- "system": "5a6847c7-c217-4b0d-a306-1f18913df2b4:string:http://snomed.info/sct",
- "code": "ee5d2430-c9f4-44c3-8267-566a8076a3c4:string:840539006",
- "display": "0aa9b7d7-b08d-4394-a858-08b54460b6f2:string:COVID-19"
+ "fullUrl": "439b320c-b834-47a7-99e9-e68e3a8aad67:string:urn:uuid:0275bfaf-48fb-44e0-80cd-9c504f80e6ae",
+ "resource": {
+ "resourceType": "5425ee45-0015-4263-af80-cb54be25f501:string:Specimen",
+ "type": {
+ "coding": [
+ {
+ "system": "7da692db-1ac8-4700-b628-3017f91d807f:string:http://snomed.info/sct",
+ "code": "2ac46745-e900-4ff1-976b-be98dbbc512d:string:258500001",
+ "display": "a78ce216-e7df-4421-a22d-ddfecf5d6317:string:Nasopharyngeal swab"
+ }
+ ]
+ },
+ "collection": {
+ "collectedDateTime": "ec704e9b-dc4a-4dfc-8ee8-fb798a235d47:string:2020-09-27T06:15:00Z"
+ }
}
- ]
- }
- ],
- "code": {
- "coding": [
- {
- "system": "a180c1c6-42fb-4f0d-b0a4-d995b5b5a718:string:http://loinc.org",
- "code": "e6440d0b-333c-4a9b-a253-4d2762d0da72:string:94531-1",
- "display": "0830e61c-e97f-4a02-9ae2-033f520fe5b0:string:SARS-CoV-2 (COVID-19) RNA panel - Respiratory specimen by NAA with probe detection"
- }
- ]
- },
- "valueCodeableConcept": {
- "coding": [
- {
- "system": "5373c5c6-0a7e-42dc-af19-b89682bd9913:string:http://snomed.info/sct",
- "code": "e32c1f35-dfb6-4401-8918-a176d244a42b:string:260385009",
- "display": "d7c33e89-08e0-4aa9-ad15-d47912dd3785:string:Negative"
- }
- ]
- },
- "effectiveDateTime": "0b425a37-1021-4ad3-bd02-af52117b9315:string:2020-09-28T06:15:00Z",
- "status": "e38db9c3-e634-469e-9024-b695ef0a13b1:string:final"
- }
- },
- {
- "fullUrl": "76560892-9b67-48b2-b7e5-a8dd9ce8d9f0:string:urn:uuid:0275bfaf-48fb-44e0-80cd-9c504f80e6ae",
- "resource": {
- "resourceType": "a43098e1-f0c2-4985-97f3-94bc198b7454:string:Specimen",
- "type": {
- "coding": [
- {
- "system": "5e321064-81ca-4f4f-a39b-d4e3f294c4d6:string:http://snomed.info/sct",
- "code": "d71ba52d-3a5c-47f3-a948-b816a8264c85:string:258500001",
- "display": "79755b29-1239-49b6-8071-3827a0a83cbb:string:Nasopharyngeal swab"
- }
- ]
- },
- "collection": {
- "collectedDateTime": "42f40966-f4e1-4dff-a276-585f2c346f37:string:2020-09-27T06:15:00Z"
- }
- }
- },
- {
- "fullUrl": "93560658-3472-42e6-b9ec-0dbed7e263f5:string:urn:uuid:3dbff0de-d4a4-4e1d-98bf-af7428b8a04b",
- "resource": {
- "resourceType": "0f3b6117-29b7-4b45-b323-2447187d6872:string:Practitioner",
- "name": [
- {
- "text": "b417611f-b2ac-4ea7-a7d9-b7d4450d060f:string:Dr Michael Lim"
- }
- ],
- "qualification": [
+ },
{
- "code": {
- "coding": [
- {
- "system": "31be1f0c-d498-46a7-b9bd-ac0df2bfdef7:string:http://terminology.hl7.org/CodeSystem/v2-0203",
- "code": "b1d804dd-8ad0-4b7b-ab79-67ab4aff1a4c:string:MCR",
- "display": "07710dbe-0080-43e9-9ec3-fe8b4b175b20:string:Practitioner Medicare number"
- }
- ]
- },
- "identifier": [
- {
- "id": "463ff48d-d27a-47e1-8d8b-f14bd0c2cc6e:string:MCR",
- "value": "168bc829-4baf-4434-9e09-3ccb04c881b4:string:123456"
+ "fullUrl": "efabb5d3-ca92-44aa-979c-cae573ffd713:string:urn:uuid:3dbff0de-d4a4-4e1d-98bf-af7428b8a04b",
+ "resource": {
+ "resourceType": "b665d375-dcc0-4582-be7e-7fb2a7b8461f:string:Practitioner",
+ "name": [
+ {
+ "text": "1ee6c31f-47d2-4cdd-81d7-7df84b11ab7b:string:Dr Michael Lim"
+ }
+ ],
+ "qualification": [
+ {
+ "code": {
+ "coding": [
+ {
+ "system": "8968559e-5189-4aea-bdda-aae0c377104c:string:http://terminology.hl7.org/CodeSystem/v2-0203",
+ "code": "d73b8947-fbb6-4fc6-9653-e238d5999262:string:MCR",
+ "display": "c3d995c3-ca75-4f87-bbf8-c5912ccae0e2:string:Practitioner Medicare number"
+ }
+ ]
+ },
+ "identifier": [
+ {
+ "id": "ef646a65-08ab-4670-8826-cf68523732a0:string:MCR",
+ "value": "f7c25742-dd9a-4016-9d34-4470810c89c8:string:123456"
+ }
+ ],
+ "issuer": {
+ "type": "39b58ffb-5dda-478f-afcb-a831ad1216d9:string:Organization",
+ "reference": "58663663-d8ae-4c43-b92c-710403825e05:string:urn:uuid:bc7065ee-42aa-473a-a614-afd8a7b30b1e"
+ }
+ }
+ ]
}
- ],
- "issuer": {
- "type": "96299c50-6beb-4782-884e-ef04eedf6c7b:string:Organization",
- "reference": "ab0ce08e-8b42-4302-8396-9f1f796afb79:string:urn:uuid:bc7065ee-42aa-473a-a614-afd8a7b30b1e"
- }
- }
- ]
- }
- },
- {
- "fullUrl": "4379785d-da31-4e43-a3a1-f934e2f9afb1:string:urn:uuid:bc7065ee-42aa-473a-a614-afd8a7b30b1e",
- "resource": {
- "resourceType": "a73ced95-84a2-4c51-918a-e76fc40bc23f:string:Organization",
- "name": "f41e8c17-d288-4490-9966-d808dc548853:string:Ministry of Health (MOH)",
- "type": [
+ },
{
- "coding": [
- {
- "system": "6ef950d8-0174-4228-a5b2-e7544f0e0662:string:http://terminology.hl7.org/CodeSystem/organization-type",
- "code": "ffc1de2a-56b8-40d4-8080-a87cd05c2ace:string:govt",
- "display": "b9beae65-61d2-492d-a1d7-7e5c6b470d4e:string:Government"
+ "fullUrl": "367cb75a-f12d-45cf-9e12-6988609bc2c1:string:urn:uuid:bc7065ee-42aa-473a-a614-afd8a7b30b1e",
+ "resource": {
+ "resourceType": "2ad4842e-9790-45d0-a801-eed29a1f8a08:string:Organization",
+ "name": "cf852704-3321-49d2-b372-967d51d23cd6:string:Ministry of Health (MOH)",
+ "type": [
+ {
+ "coding": [
+ {
+ "system": "1bee0056-da6b-4ab8-9393-acf98bb9f817:string:http://terminology.hl7.org/CodeSystem/organization-type",
+ "code": "8038ed41-1dc1-41ac-b7aa-89e0522b8fc7:string:govt",
+ "display": "97796441-0854-488b-ab99-1711ae8c660e:string:Government"
+ }
+ ]
+ }
+ ],
+ "contact": [
+ {
+ "telecom": [
+ {
+ "system": "877a540e-95d0-40df-a8be-058906251c01:string:url",
+ "value": "b6347755-2607-4f2d-b850-546229d4da15:string:https://www.moh.gov.sg"
+ },
+ {
+ "system": "abc089ca-7b61-4123-b280-6c7bab106319:string:phone",
+ "value": "39ce8ae7-5eb4-474d-8f2b-60f5e365d37e:string:+6563259220"
+ }
+ ],
+ "address": {
+ "type": "bf2fbee1-ead3-4611-860d-56c6d974b46f:string:physical",
+ "use": "bb2a22a9-e053-48c8-bda0-b6284de736f9:string:work",
+ "text": "8608b49a-1ad4-4767-98c2-428e3a35dd21:string:Ministry of Health, 16 College Road, College of Medicine Building, Singapore 169854"
+ }
+ }
+ ]
}
- ]
- }
- ],
- "contact": [
+ },
{
- "telecom": [
- {
- "system": "c13c9c83-4f98-4687-a12a-8659ed2a8784:string:url",
- "value": "7229f5cc-a14f-45dd-b609-0cd670bcce9c:string:https://www.moh.gov.sg"
- },
- {
- "system": "9b88ef7a-14d8-4073-851b-2432c33f43c7:string:phone",
- "value": "320d7fcb-d28a-4b25-a4f2-d92c0d4b7572:string:+6563259220"
+ "fullUrl": "f4a4206c-882a-4785-ad1a-73282a1a4946:string:urn:uuid:fa2328af-4882-4eaa-8c28-66dab46950f1",
+ "resource": {
+ "resourceType": "10839d55-d564-45a5-951f-731dd3cb5073:string:Organization",
+ "name": "ab958a9a-424a-4f63-ba45-1b5ef710195b:string:MacRitchie Medical Clinic",
+ "type": [
+ {
+ "coding": [
+ {
+ "system": "1a6da8de-e5a3-45cd-9ff9-ccc78d0882f5:string:http://terminology.hl7.org/CodeSystem/organization-type",
+ "code": "4980f8d0-ae54-48b9-8db3-4e78b3e45394:string:prov",
+ "display": "7c42937d-3051-4d53-8a77-4354349ba473:string:Healthcare Provider"
+ }
+ ],
+ "text": "00446da2-8f5f-48a3-80fb-b882aec5aebd:string:Licensed Healthcare Provider"
+ }
+ ],
+ "contact": [
+ {
+ "telecom": [
+ {
+ "system": "dfdd8a65-1e71-4f8b-a13b-a3b83e209b90:string:url",
+ "value": "273d44df-05af-4b6a-8126-94e0bf49ca87:string:https://www.macritchieclinic.com.sg"
+ },
+ {
+ "system": "b3078fa1-55e3-406b-9c5b-ef3d05b2a6e9:string:phone",
+ "value": "b832bbaa-5742-4cce-a585-a9f865dd85ef:string:+6561234567"
+ }
+ ],
+ "address": {
+ "type": "3b6b641a-79d2-45c2-87ff-be82525c3002:string:physical",
+ "use": "526359c5-6dd3-4569-8af8-b7fd89c91c28:string:work",
+ "text": "e2d238d9-2269-4323-84e0-cd85f44c0a65:string:MacRitchie Hospital, Thomson Road, Singapore 123000"
+ }
+ }
+ ]
}
- ],
- "address": {
- "type": "21246b85-6014-464e-b732-7fec6c05df50:string:physical",
- "use": "a820fd38-7b15-43c2-a223-94e17d96fea0:string:work",
- "text": "22af8bd7-91a8-4ddd-b64e-76c26f5020ff:string:Ministry of Health, 16 College Road, College of Medicine Building, Singapore 169854"
- }
- }
- ]
- }
- },
- {
- "fullUrl": "e31e71ea-61c0-40d5-b0e4-6add0ecd529f:string:urn:uuid:fa2328af-4882-4eaa-8c28-66dab46950f1",
- "resource": {
- "resourceType": "7026f843-80de-45f6-9c2e-4d7e33819f87:string:Organization",
- "name": "dc2120c7-a53d-465e-a824-2457a96973c1:string:MacRitchie Medical Clinic",
- "type": [
+ },
{
- "coding": [
- {
- "system": "e54e37e6-5818-4e48-9c96-ef569f33c720:string:http://terminology.hl7.org/CodeSystem/organization-type",
- "code": "a9e5f2a1-ae71-4725-925c-56fc343c7afe:string:prov",
- "display": "0f1c5fff-ec2d-4db7-b5f1-703200fa654d:string:Healthcare Provider"
+ "fullUrl": "fb17570e-bc00-4e93-9d34-8b967948cdd4:string:urn:uuid:839a7c54-6b40-41cb-b10d-9295d7e75f77",
+ "resource": {
+ "resourceType": "150e09d7-ca56-4848-a303-bdc20fd763c1:string:Organization",
+ "name": "312c0e1d-ca37-40a0-a54f-e5d4698c3255:string:MacRitchie Laboratory",
+ "type": [
+ {
+ "coding": [
+ {
+ "system": "ea88b0c5-0b45-4767-b92a-b9cd62906408:string:http://terminology.hl7.org/CodeSystem/organization-type",
+ "code": "ce0707f2-3d2d-406a-9a11-2e1aaf7a7faf:string:prov",
+ "display": "ebbc122d-6ad5-4307-9ea1-b5c06f350ede:string:Healthcare Provider"
+ }
+ ],
+ "text": "7c04f692-bf3e-429b-8ca5-cfcd1f29256b:string:Accredited Laboratory"
+ }
+ ],
+ "contact": [
+ {
+ "telecom": [
+ {
+ "system": "9c2529e6-4cce-41e9-95d1-6b108cc86848:string:url",
+ "value": "e25825e5-cba5-4e4b-83e5-ad00ff826d34:string:https://www.macritchielaboratory.com.sg"
+ },
+ {
+ "system": "19468ca7-a837-44ef-82fd-9e837601021c:string:phone",
+ "value": "18a52ac0-ab29-449f-9d4f-883b97ebd2f1:string:+6567654321"
+ }
+ ],
+ "address": {
+ "type": "5ba1e94a-8ef3-404b-bee6-05ecdc1412e8:string:physical",
+ "use": "5507d70b-979a-4798-9c3a-7a8f400eb448:string:work",
+ "text": "0402e027-25db-4037-a5ec-8f7426b85ff5:string:2 Thomson Avenue 4, Singapore 098888"
+ }
+ }
+ ]
}
- ],
- "text": "b382089f-b3ca-44f3-82c9-f0022b1e9f23:string:Licensed Healthcare Provider"
}
- ],
- "contact": [
- {
- "telecom": [
- {
- "system": "ee24fc7e-4c0d-493f-be01-b4d7ca4125f5:string:url",
- "value": "6d311bb3-4f49-4df4-bb06-38d504258634:string:https://www.macritchieclinic.com.sg"
- },
- {
- "system": "a8f96d37-fa6b-40cc-8df2-e0a0c18014ce:string:phone",
- "value": "d14a6b5a-950b-4ad0-ba3b-567f1953b34a:string:+6561234567"
- }
- ],
- "address": {
- "type": "3d96769d-ffc9-49dd-8255-6523605cc054:string:physical",
- "use": "a877a279-cd68-4fd2-846e-e528be963bd8:string:work",
- "text": "97f3edf9-97e0-471d-8fbb-8f5e0d032754:string:MacRitchie Hospital, Thomson Road, Singapore 123000"
- }
+ ]
+ },
+ "issuers": [
+ {
+ "name": "76bec86c-f4f1-4f1a-880d-0107b4f44079:string:SAMPLE ISSUER (DO NOT VERIFY)",
+ "id": "c6f20205-0910-4fbd-942a-9f56de656ecc:string:did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830",
+ "revocation": {
+ "type": "bcd0b8ca-d930-49e8-bf55-37bdba267e78:string:NONE"
+ },
+ "identityProof": {
+ "type": "74f7fd9a-fca6-4aba-bae2-cddc2b4647f2:string:DNS-DID",
+ "location": "109a2963-2088-4e68-8ec0-1e4b8ed38f07:string:donotverify.testing.verify.gov.sg",
+ "key": "c32bfde4-852b-438c-99b2-d6a5659b0ad4:string:did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830#controller"
}
- ]
}
- },
- {
- "fullUrl": "ab2dd9b8-16e0-4fa6-be11-20233fe5682f:string:urn:uuid:839a7c54-6b40-41cb-b10d-9295d7e75f77",
- "resource": {
- "resourceType": "e7877aad-e952-4849-960d-55df7807ff8b:string:Organization",
- "name": "b99ff34a-e865-4e8f-bcde-73093feb563f:string:MacRitchie Laboratory",
- "type": [
+ ],
+ "$template": {
+ "name": "fbc5f0d2-f5a0-475a-ae1b-1827175e02e4:string:HEALTH_CERT",
+ "type": "5efe249d-6d00-4544-9642-3e647c583f8f:string:EMBEDDED_RENDERER",
+ "url": "034adcfb-b367-405d-bfec-0db87962ee6c:string:https://healthcert.renderer.moh.gov.sg/"
+ },
+ "notarisationMetadata": {
+ "reference": "a7af626e-4daa-43a5-aa3d-a5895125901b:string:3a21794e-0abb-46ae-91be-f8799818d7b0",
+ "notarisedOn": "a79ac486-5a04-4b6f-9509-ef007d13c4df:string:2021-12-28T07:21:44.562Z",
+ "passportNumber": "13264007-ef86-4b70-bc59-51db3f14b5c3:string:E7831177G",
+ "url": "2f52135d-deb5-4e63-9965-e8eb11454ff6:string:https://www.verify.gov.sg/verify?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fapi-vaccine.storage.staging.notarise.io%2Fdocument%2F44409930-70b6-4ab7-94be-86cf57c9ed87%22%2C%22permittedActions%22%3A%5B%22VIEW%22%2C%22STORE%22%5D%2C%22redirect%22%3A%22https%3A%2F%2Fwww.verify.gov.sg%2Fverify%22%7D%7D#%7B%22key%22%3A%2252ae6dafd2ce6f818ccb7d893f4fb58416453f42c4624a9c6a98abf0760f2119%22%7D",
+ "signedEuHealthCerts": [
{
- "coding": [
- {
- "system": "e3d08052-8e9e-4951-bd9f-168503e2b992:string:http://terminology.hl7.org/CodeSystem/organization-type",
- "code": "2df8994e-c918-43a0-a7b0-18703b0042d0:string:prov",
- "display": "7ea4ae85-7b92-41a2-bc7a-bc36dc59f355:string:Healthcare Provider"
- }
- ],
- "text": "984d729a-3e16-4972-989a-20cdbc195144:string:Accredited Laboratory"
- }
- ],
- "contact": [
- {
- "telecom": [
- {
- "system": "8db0c47d-e004-473a-95e0-d49e835a9b35:string:url",
- "value": "dc0c170d-1fcf-49fd-86c8-8ec47df6c353:string:https://www.macritchielaboratory.com.sg"
- },
- {
- "system": "534f29b8-587d-4c43-a6ea-48c841e0d1d6:string:phone",
- "value": "261bca79-4854-4f41-bdfc-8d7dc8a41f8d:string:+6567654321"
- }
- ],
- "address": {
- "type": "4880872b-76f5-4295-8a9d-e7fc6c5a09ec:string:physical",
- "use": "dfebb57c-69d0-4ca7-aed5-c2866512d668:string:work",
- "text": "24b2ac5e-710a-47be-98d8-7b1d38512548:string:2 Thomson Avenue 4, Singapore 098888"
- }
+ "type": "8f5a0582-0b74-4cef-971c-6ea916de03fd:string:PCR",
+ "qr": "41cae531-4f2b-4e80-b158-337e42b88a70:string:HC1:6BFK%G6 9$P3743BJR6UGEKEOQ68U6B/Q.JLIRLHTTLIDU1UJPTMP1K.C%CQKDJS/0-PLK5D5%P56FFQD54D3IDKJFNDW4VC0P0N-GIZNAKH5 7-32GB0C8GN1A N0U2KHHJ1BR1EHNTU+MU62R8+7*1WY.NCXLV.TK-G:9U$3891PE4HZ177WD*1F1GIN.UA6M9WRLQ81GWA:FP7WT38NWB42331UW3G9NH3SEM3KP/TRXH%R2/9NFXJ$.M4UG 7LW2AZE0Q0N-EF95L+U7S%QT32%2CZ.BQ5R6/4FPFY62970C103WAUXU/MAWMTSJTAO0.4JXZ66CFX-ON$0E AC8WKT0/$HTHOEY0C:0-61KUF3WV1M6MK97$GYB7SDBT9DUSUEF5T2J%HTHT82G7NLJ1HJQ4QL7QFM7-:A9K6-XSL0I$XSPCMKXD4K09PGQ-99.T6G8FIOFAGERK%BM3-8ZBK Q0D*FW12OMVQ5MNCBQ.JG0W*6UT-C4Q0WGE4KRI2NA30/XU% R1+HK.CNHCRJ4DYAKP9BTUVDCR-GLJEGH65Y5E-DMI3SJAX+H.%PL360GK21B%AQ9IL6.U%Q50OLE0Q5BJ+RC1U2I60C C%TIXI8*BCI$KDTC 7IZTL82M995EKI7SMCSII:75YM6S5940XDO4A06+4::N9VM6-ABIIJNL+RJDFA8IP1%D S7R7HSSPAOKM57%PLCMG.%FK7GW$Q$.ICOOM0TK-C0QL7VLY9M4*MPZ6:Q5AV5BKK:/I:MDHRTD3FKDATDMF7BN/TNQNA%SI97 XL8$PBGFT4CCOM4ANKKQ-KGCSPL%PTDB .I97D5MT2-CW$URHKZHJ6WC ZU- 2/KTLNC6A13D4R44H90RZP6P02D9X7JB2I:FHXZFT.33PKTJ9BR8/:L13MSFHYN9/VO..U5A1P38G0P7PMAMB:-8G4G9LLIRUW-QYX4 7U: TQ90./KD+TI.V1KCOLE0PC%KSOR6FQ5J%R$CUFTE*V4ZIMQXJNBP7HPI2I7Y5EYBMQAWZB-YFTLANIN2+MTI4*TN/BOU*O.REN4K59VJUKV4C4RV..9O$UJNO%XS22WZWVWHDO4PUXM/PFFNRI8IA2AGLV.UNJ%3-HFIKHP9PS3O*DWB4S9WV08NG6EHLL$2SPCE106J$Q22",
+ "expiryDateTime": "e8d761a8-c1d9-45ad-a1b3-c3f2fcc4212a:string:2022-01-04T07:21:44.143Z"
}
- ]
+ ]
+ },
+ "logo": "702ca827-2993-44d7-b5e0-febebf628cbb:string:data:image/png;base64,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",
+ "attachments": [
+ {
+ "filename": "1514e3d4-e714-4162-a569-cdb32058e63b:string:healthcert.txt",
+ "type": "e4c1ec52-edce-419d-b8c2-74ab13be4a0b:string:text/open-attestation",
+ "data": "d3309cbe-2e49-442b-9351-762663b1ccdd:string:eyJ2ZXJzaW9uIjoiaHR0cHM6Ly9zY2hlbWEub3BlbmF0dGVzdGF0aW9uLmNvbS8yLjAvc2NoZW1hLmpzb24iLCJkYXRhIjp7ImlkIjoiZmVhMzliNDItMzFmNC00MDFkLTlkYzktMGY3ZTgwZDE3NGZmOnN0cmluZzpjNWFkMTliYi00MDNjLTRiNTItOTcxZC0zZjAxZTg3ODgzZTMiLCJ2ZXJzaW9uIjoiOGM5MjUxYWYtMjc2YS00YzA1LWE1YjctN2JiODRlMjA0ZWFmOnN0cmluZzpwZHQtaGVhbHRoY2VydC12Mi4wIiwidHlwZSI6ImU0YmZlMDRiLTM5NDctNDQyOC1iNjg0LTJiYmRiNzNlNDIyNzpzdHJpbmc6UENSIiwidmFsaWRGcm9tIjoiMmU0NDZkMGMtYTc0ZS00YzA1LWFkMDItNTdhMzhkNDc2NmFlOnN0cmluZzoyMDIxLTA4LTI0VDA0OjIyOjM2LjA2MloiLCJmaGlyVmVyc2lvbiI6Ijc4MTAyZTE2LTRjNTUtNGRjNC05ZWFiLWI3YmE4NDE4NzEyZjpzdHJpbmc6NC4wLjEiLCJmaGlyQnVuZGxlIjp7InJlc291cmNlVHlwZSI6ImI1OGI3NDY1LWZmNGItNDg4My05MDEyLWYxMTczNTk4MzU3ZTpzdHJpbmc6QnVuZGxlIiwidHlwZSI6ImFiNGU0YzU4LWYzYmUtNDVhZi1hY2U2LWFlZGFjNjgzYzcwYTpzdHJpbmc6Y29sbGVjdGlvbiIsImVudHJ5IjpbeyJmdWxsVXJsIjoiOThlNjJhNDUtMjRiMi00N2YxLThlMzUtY2U1NTU1NDQ5YmVjOnN0cmluZzp1cm46dXVpZDpiYTdiN2M4ZC1jNTA5LTRkOWQtYmU0ZS1mOTliNmRlMjllMjMiLCJyZXNvdXJjZSI6eyJyZXNvdXJjZVR5cGUiOiJlMjc2NDg3Ny04NmFkLTQzNGYtYTIyYi01Yjk2MzFiNDVlZjc6c3RyaW5nOlBhdGllbnQiLCJleHRlbnNpb24iOlt7InVybCI6IjA0M2FlMGZjLTIzMmQtNGI5MS1hZDYwLTRiOWZiZGFiMGMyNDpzdHJpbmc6aHR0cDovL2hsNy5vcmcvZmhpci9TdHJ1Y3R1cmVEZWZpbml0aW9uL3BhdGllbnQtbmF0aW9uYWxpdHkiLCJleHRlbnNpb24iOlt7InVybCI6ImI2NzIxZTMzLWRkZWItNDU3ZS1iNDgwLTBlNTFiOGQyZDFlNTpzdHJpbmc6Y29kZSIsInZhbHVlQ29kZWFibGVDb25jZXB0Ijp7InRleHQiOiI0OThhYjJlMy1jOWQ1LTQwZWItYWE2MS1mMWZhOTE3ZmQwZjk6c3RyaW5nOlBhdGllbnQgTmF0aW9uYWxpdHkiLCJjb2RpbmciOlt7InN5c3RlbSI6ImVjYThiNTExLWM3ODMtNDZiNC04M2UyLTAwMjhhYWJlZjI4NDpzdHJpbmc6dXJuOmlzbzpzdGQ6aXNvOjMxNjYiLCJjb2RlIjoiMjMxMTM3MWMtOTA0Ni00ODlkLWI5OTMtZTlhYjIwNTA4OWI3OnN0cmluZzpTRyJ9XX19XX1dLCJpZGVudGlmaWVyIjpbeyJpZCI6ImUxZWRkNGM0LTMwODctNDNlYS05ZGQ0LTRjYjE2NTZiZjFjNzpzdHJpbmc6UFBOIiwidHlwZSI6eyJjb2RpbmciOlt7InN5c3RlbSI6Ijg3NDQ5MDdhLTE3OGEtNDI3OS04YjBlLWEzMWQzZDZkOWI1MTpzdHJpbmc6aHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS92Mi0wMjAzIiwiY29kZSI6IjkxYTQ5NDk1LWNjM2ItNDI2My1iY2M2LTgyNDQyYjU1NDIxNTpzdHJpbmc6UFBOIiwiZGlzcGxheSI6IjQzMTc1ZmZmLWNmMzUtNGI2YS1iNzMwLTg5ZGI2ZTIxNGM0NTpzdHJpbmc6UGFzc3BvcnQgTnVtYmVyIn1dfSwidmFsdWUiOiIxY2MzNGJkZi1iNjljLTQxODktOTY2Yy1jYTI2MDFlMGEzMGE6c3RyaW5nOkU3ODMxMTc3RyJ9LHsiaWQiOiJjNTY1MjU4Yy05YzI0LTQyNjItYWY1OS02ODU1ZTBmM2M5MDk6c3RyaW5nOk5SSUMtRklOIiwidmFsdWUiOiI5YWFjNGI2Mi0yOWEyLTQ4MGEtYTcxZC04NWQ2ZmNjNmNkZDY6c3RyaW5nOlM5MDk4OTg5WiJ9XSwibmFtZSI6W3sidGV4dCI6IjA0N2I3NzVhLWM3NmItNDczYi04MDMwLTBiNmUxNWU5MzBlYjpzdHJpbmc6VGFuIENoZW4gQ2hlbiJ9XSwiZ2VuZGVyIjoiNzFiOWQ0ZmItODA2ZC00YjBkLTlkMjQtZTcxNjljMDUyMWQ1OnN0cmluZzpmZW1hbGUiLCJiaXJ0aERhdGUiOiI5Njg5NDFkOS01MWI2LTRmNjEtOGYyMC0xYmIyMmZmNjVjOTY6c3RyaW5nOjE5OTAtMDEtMTUifX0seyJmdWxsVXJsIjoiZTIxODVmY2MtN2ZjYy00NTlhLWI2NDktYWNmZWE2ZjNjMjNlOnN0cmluZzp1cm46dXVpZDo3NzI5OTcwZS1hYjI2LTQ2OWYtYjNlNS0zNmE0MmVjMjQxNDYiLCJyZXNvdXJjZSI6eyJyZXNvdXJjZVR5cGUiOiI5YThhMjE3ZS1hNmJlLTQ1NzktYjllMy0xMzcwYjdmZGY3MzM6c3RyaW5nOk9ic2VydmF0aW9uIiwic3BlY2ltZW4iOnsidHlwZSI6IjlhNzU0ZWI3LWNjMzktNGUxNi1hNDUwLWEyMjhhMzFkZTVjMzpzdHJpbmc6U3BlY2ltZW4iLCJyZWZlcmVuY2UiOiJjMmIzZGZlNi0zODhmLTRhMGUtOTU2OS05YzY3YzIwYzNiNjE6c3RyaW5nOnVybjp1dWlkOjAyNzViZmFmLTQ4ZmItNDRlMC04MGNkLTljNTA0ZjgwZTZhZSJ9LCJwZXJmb3JtZXIiOlt7InR5cGUiOiJiYTg0NDk1NC1iNDU3LTQzMDAtYmI2MC1kNzNjZDliNTRkZDk6c3RyaW5nOlByYWN0aXRpb25lciIsInJlZmVyZW5jZSI6ImExM2Q4YzllLWZlMWMtNDE5Ni1iYjEzLTczYzhhNjhjNTRhMDpzdHJpbmc6dXJuOnV1aWQ6M2RiZmYwZGUtZDRhNC00ZTFkLTk4YmYtYWY3NDI4YjhhMDRiIn0seyJpZCI6ImM0MzY3NzNhLWE3MzItNDFjOS1hMzdjLTdkNDYwZjZhMmRiYzpzdHJpbmc6TEhQIiwidHlwZSI6ImExYTlhNzQyLTkxNWEtNGYyNi1iNTgzLWIyZTEzMTY3ZDE5NDpzdHJpbmc6T3JnYW5pemF0aW9uIiwicmVmZXJlbmNlIjoiZmU0Mzk2ZjAtZWE4OS00ZjhmLWEwMTUtYThkMDdlZmRjOWZjOnN0cmluZzp1cm46dXVpZDpmYTIzMjhhZi00ODgyLTRlYWEtOGMyOC02NmRhYjQ2OTUwZjEifSx7ImlkIjoiNjYwZGUxNjktNzFmMC00YzMxLWI4ZWMtMDA1ZGE5MjdkNDdjOnN0cmluZzpBTCIsInR5cGUiOiI3ZDA4MjMzNy00YTA0LTRkZTctOTdhZS1hNjU5ZjgwNGRjOGI6c3RyaW5nOk9yZ2FuaXphdGlvbiIsInJlZmVyZW5jZSI6IjgxZDE3Yjc4LWZiNmItNGIzMC1hYjg3LWIyNmI2NjY2OWI4MDpzdHJpbmc6dXJuOnV1aWQ6ODM5YTdjNTQtNmI0MC00MWNiLWIxMGQtOTI5NWQ3ZTc1Zjc3In1dLCJpZGVudGlmaWVyIjpbeyJpZCI6ImZjYWE5Mjk0LWNkYTEtNDg0OS1iOTRjLWI2YjE5NjJjM2IyMTpzdHJpbmc6QUNTTiIsInR5cGUiOnsiY29kaW5nIjpbeyJzeXN0ZW0iOiI2ZDYxMWVjNy0wODJjLTQwM2UtYjhjYS1hMDIzZWI5YTY5Zjk6c3RyaW5nOmh0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjItMDIwMyIsImNvZGUiOiI4MDc3ZTcxMS02ZDFhLTQ1YWQtYmQyZi0yOWQ5YzgwNmY4OGU6c3RyaW5nOkFDU04iLCJkaXNwbGF5IjoiNjBiMjVjMGMtOTIxYS00ODAyLTgyNjAtZGYzZGM2ZmViMWI4OnN0cmluZzpBY2Nlc3Npb24gSUQifV19LCJ2YWx1ZSI6IjIxNzdkMTA0LTJjYTgtNGQ0MC1hMWIzLTY4YjYyOGIxYmI5YTpzdHJpbmc6MTIzNDU2Nzg5In1dLCJjYXRlZ29yeSI6W3siY29kaW5nIjpbeyJzeXN0ZW0iOiI1YTY4NDdjNy1jMjE3LTRiMGQtYTMwNi0xZjE4OTEzZGYyYjQ6c3RyaW5nOmh0dHA6Ly9zbm9tZWQuaW5mby9zY3QiLCJjb2RlIjoiZWU1ZDI0MzAtYzlmNC00NGMzLTgyNjctNTY2YTgwNzZhM2M0OnN0cmluZzo4NDA1MzkwMDYiLCJkaXNwbGF5IjoiMGFhOWI3ZDctYjA4ZC00Mzk0LWE4NTgtMDhiNTQ0NjBiNmYyOnN0cmluZzpDT1ZJRC0xOSJ9XX1dLCJjb2RlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiYTE4MGMxYzYtNDJmYi00ZjBkLWIwYTQtZDk5NWI1YjVhNzE4OnN0cmluZzpodHRwOi8vbG9pbmMub3JnIiwiY29kZSI6ImU2NDQwZDBiLTMzM2MtNGE5Yi1hMjUzLTRkMjc2MmQwZGE3MjpzdHJpbmc6OTQ1MzEtMSIsImRpc3BsYXkiOiIwODMwZTYxYy1lOTdmLTRhMDItOWFlMi0wMzNmNTIwZmU1YjA6c3RyaW5nOlNBUlMtQ29WLTIgKENPVklELTE5KSBSTkEgcGFuZWwgLSBSZXNwaXJhdG9yeSBzcGVjaW1lbiBieSBOQUEgd2l0aCBwcm9iZSBkZXRlY3Rpb24ifV19LCJ2YWx1ZUNvZGVhYmxlQ29uY2VwdCI6eyJjb2RpbmciOlt7InN5c3RlbSI6IjUzNzNjNWM2LTBhN2UtNDJkYy1hZjE5LWI4OTY4MmJkOTkxMzpzdHJpbmc6aHR0cDovL3Nub21lZC5pbmZvL3NjdCIsImNvZGUiOiJlMzJjMWYzNS1kZmI2LTQ0MDEtODkxOC1hMTc2ZDI0NGE0MmI6c3RyaW5nOjI2MDM4NTAwOSIsImRpc3BsYXkiOiJkN2MzM2U4OS0wOGUwLTRhYTktYWQxNS1kNDc5MTJkZDM3ODU6c3RyaW5nOk5lZ2F0aXZlIn1dfSwiZWZmZWN0aXZlRGF0ZVRpbWUiOiIwYjQyNWEzNy0xMDIxLTRhZDMtYmQwMi1hZjUyMTE3YjkzMTU6c3RyaW5nOjIwMjAtMDktMjhUMDY6MTU6MDBaIiwic3RhdHVzIjoiZTM4ZGI5YzMtZTYzNC00NjllLTkwMjQtYjY5NWVmMGExM2IxOnN0cmluZzpmaW5hbCJ9fSx7ImZ1bGxVcmwiOiI3NjU2MDg5Mi05YjY3LTQ4YjItYjdlNS1hOGRkOWNlOGQ5ZjA6c3RyaW5nOnVybjp1dWlkOjAyNzViZmFmLTQ4ZmItNDRlMC04MGNkLTljNTA0ZjgwZTZhZSIsInJlc291cmNlIjp7InJlc291cmNlVHlwZSI6ImE0MzA5OGUxLWYwYzItNDk4NS05N2YzLTk0YmMxOThiNzQ1NDpzdHJpbmc6U3BlY2ltZW4iLCJ0eXBlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiNWUzMjEwNjQtODFjYS00ZjRmLWEzOWItZDRlM2YyOTRjNGQ2OnN0cmluZzpodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiY29kZSI6ImQ3MWJhNTJkLTNhNWMtNDdmMy1hOTQ4LWI4MTZhODI2NGM4NTpzdHJpbmc6MjU4NTAwMDAxIiwiZGlzcGxheSI6Ijc5NzU1YjI5LTEyMzktNDliNi04MDcxLTM4MjdhMGE4M2NiYjpzdHJpbmc6TmFzb3BoYXJ5bmdlYWwgc3dhYiJ9XX0sImNvbGxlY3Rpb24iOnsiY29sbGVjdGVkRGF0ZVRpbWUiOiI0MmY0MDk2Ni1mNGUxLTRkZmYtYTI3Ni01ODVmMmMzNDZmMzc6c3RyaW5nOjIwMjAtMDktMjdUMDY6MTU6MDBaIn19fSx7ImZ1bGxVcmwiOiI5MzU2MDY1OC0zNDcyLTQyZTYtYjllYy0wZGJlZDdlMjYzZjU6c3RyaW5nOnVybjp1dWlkOjNkYmZmMGRlLWQ0YTQtNGUxZC05OGJmLWFmNzQyOGI4YTA0YiIsInJlc291cmNlIjp7InJlc291cmNlVHlwZSI6IjBmM2I2MTE3LTI5YjctNGI0NS1iMzIzLTI0NDcxODdkNjg3MjpzdHJpbmc6UHJhY3RpdGlvbmVyIiwibmFtZSI6W3sidGV4dCI6ImI0MTc2MTFmLWIyYWMtNGVhNy1hN2Q5LWI3ZDQ0NTBkMDYwZjpzdHJpbmc6RHIgTWljaGFlbCBMaW0ifV0sInF1YWxpZmljYXRpb24iOlt7ImNvZGUiOnsiY29kaW5nIjpbeyJzeXN0ZW0iOiIzMWJlMWYwYy1kNDk4LTQ2YTctYjliZC1hYzBkZjJiZmRlZjc6c3RyaW5nOmh0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjItMDIwMyIsImNvZGUiOiJiMWQ4MDRkZC04YWQwLTRiN2ItYWI3OS02N2FiNGFmZjFhNGM6c3RyaW5nOk1DUiIsImRpc3BsYXkiOiIwNzcxMGRiZS0wMDgwLTQzZTktOWVjMy1mZThiNGIxNzViMjA6c3RyaW5nOlByYWN0aXRpb25lciBNZWRpY2FyZSBudW1iZXIifV19LCJpZGVudGlmaWVyIjpbeyJpZCI6IjQ2M2ZmNDhkLWQyN2EtNDdlMS04ZDhiLWYxNGJkMGMyY2M2ZTpzdHJpbmc6TUNSIiwidmFsdWUiOiIxNjhiYzgyOS00YmFmLTQ0MzQtOWUwOS0zY2NiMDRjODgxYjQ6c3RyaW5nOjEyMzQ1NiJ9XSwiaXNzdWVyIjp7InR5cGUiOiI5NjI5OWM1MC02YmViLTQ3ODItODg0ZS1lZjA0ZWVkZjZjN2I6c3RyaW5nOk9yZ2FuaXphdGlvbiIsInJlZmVyZW5jZSI6ImFiMGNlMDhlLThiNDItNDMwMi04Mzk2LTlmMWY3OTZhZmI3OTpzdHJpbmc6dXJuOnV1aWQ6YmM3MDY1ZWUtNDJhYS00NzNhLWE2MTQtYWZkOGE3YjMwYjFlIn19XX19LHsiZnVsbFVybCI6IjQzNzk3ODVkLWRhMzEtNGU0My1hM2ExLWY5MzRlMmY5YWZiMTpzdHJpbmc6dXJuOnV1aWQ6YmM3MDY1ZWUtNDJhYS00NzNhLWE2MTQtYWZkOGE3YjMwYjFlIiwicmVzb3VyY2UiOnsicmVzb3VyY2VUeXBlIjoiYTczY2VkOTUtODRhMi00YzUxLTkxOGEtZTc2ZmM0MGJjMjNmOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiZjQxZThjMTctZDI4OC00NDkwLTk5NjYtZDgwOGRjNTQ4ODUzOnN0cmluZzpNaW5pc3RyeSBvZiBIZWFsdGggKE1PSCkiLCJ0eXBlIjpbeyJjb2RpbmciOlt7InN5c3RlbSI6IjZlZjk1MGQ4LTAxNzQtNDIyOC1hNWIyLWU3NTQ0ZjBlMDY2MjpzdHJpbmc6aHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9vcmdhbml6YXRpb24tdHlwZSIsImNvZGUiOiJmZmMxZGUyYS01NmI4LTQwZDQtODA4MC1hODdjZDA1YzJhY2U6c3RyaW5nOmdvdnQiLCJkaXNwbGF5IjoiYjliZWFlNjUtNjFkMi00OTJkLWExZDctN2U1YzZiNDcwZDRlOnN0cmluZzpHb3Zlcm5tZW50In1dfV0sImNvbnRhY3QiOlt7InRlbGVjb20iOlt7InN5c3RlbSI6ImMxM2M5YzgzLTRmOTgtNDY4Ny1hMTJhLTg2NTllZDJhODc4NDpzdHJpbmc6dXJsIiwidmFsdWUiOiI3MjI5ZjVjYy1hMTRmLTQ1ZGQtYjYwOS0wY2Q2NzBiY2NlOWM6c3RyaW5nOmh0dHBzOi8vd3d3Lm1vaC5nb3Yuc2cifSx7InN5c3RlbSI6IjliODhlZjdhLTE0ZDgtNDA3My04NTFiLTI0MzJjMzNmNDNjNzpzdHJpbmc6cGhvbmUiLCJ2YWx1ZSI6IjMyMGQ3ZmNiLWQyOGEtNGIyNS1hNGYyLWQ5MmMwZDRiNzU3MjpzdHJpbmc6KzY1NjMyNTkyMjAifV0sImFkZHJlc3MiOnsidHlwZSI6IjIxMjQ2Yjg1LTYwMTQtNDY0ZS1iNzMyLTdmZWM2YzA1ZGY1MDpzdHJpbmc6cGh5c2ljYWwiLCJ1c2UiOiJhODIwZmQzOC03YjE1LTQzYzItYTIyMy05NGUxN2Q5NmZlYTA6c3RyaW5nOndvcmsiLCJ0ZXh0IjoiMjJhZjhiZDctOTFhOC00ZGRkLWI2NGUtNzZjMjZmNTAyMGZmOnN0cmluZzpNaW5pc3RyeSBvZiBIZWFsdGgsIDE2IENvbGxlZ2UgUm9hZCwgQ29sbGVnZSBvZiBNZWRpY2luZSBCdWlsZGluZywgU2luZ2Fwb3JlIDE2OTg1NCJ9fV19fSx7ImZ1bGxVcmwiOiJlMzFlNzFlYS02MWMwLTQwZDUtYjBlNC02YWRkMGVjZDUyOWY6c3RyaW5nOnVybjp1dWlkOmZhMjMyOGFmLTQ4ODItNGVhYS04YzI4LTY2ZGFiNDY5NTBmMSIsInJlc291cmNlIjp7InJlc291cmNlVHlwZSI6IjcwMjZmODQzLTgwZGUtNDVmNi05YzJlLTRkN2UzMzgxOWY4NzpzdHJpbmc6T3JnYW5pemF0aW9uIiwibmFtZSI6ImRjMjEyMGM3LWE1M2QtNDY1ZS1hODI0LTI0NTdhOTY5NzNjMTpzdHJpbmc6TWFjUml0Y2hpZSBNZWRpY2FsIENsaW5pYyIsInR5cGUiOlt7ImNvZGluZyI6W3sic3lzdGVtIjoiZTU0ZTM3ZTYtNTgxOC00ZTQ4LTljOTYtZWY1NjlmMzNjNzIwOnN0cmluZzpodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL29yZ2FuaXphdGlvbi10eXBlIiwiY29kZSI6ImE5ZTVmMmExLWFlNzEtNDcyNS05MjVjLTU2ZmMzNDNjN2FmZTpzdHJpbmc6cHJvdiIsImRpc3BsYXkiOiIwZjFjNWZmZi1lYzJkLTRkYjctYjVmMS03MDMyMDBmYTY1NGQ6c3RyaW5nOkhlYWx0aGNhcmUgUHJvdmlkZXIifV0sInRleHQiOiJiMzgyMDg5Zi1iM2NhLTQ0ZjMtODJjOS1mMDAyMmIxZTlmMjM6c3RyaW5nOkxpY2Vuc2VkIEhlYWx0aGNhcmUgUHJvdmlkZXIifV0sImNvbnRhY3QiOlt7InRlbGVjb20iOlt7InN5c3RlbSI6ImVlMjRmYzdlLTRjMGQtNDkzZi1iZTAxLWI0ZDdjYTQxMjVmNTpzdHJpbmc6dXJsIiwidmFsdWUiOiI2ZDMxMWJiMy00ZjQ5LTRkZjQtYmIwNi0zOGQ1MDQyNTg2MzQ6c3RyaW5nOmh0dHBzOi8vd3d3Lm1hY3JpdGNoaWVjbGluaWMuY29tLnNnIn0seyJzeXN0ZW0iOiJhOGY5NmQzNy1mYTZiLTQwY2MtOGRmMi1lMGEwYzE4MDE0Y2U6c3RyaW5nOnBob25lIiwidmFsdWUiOiJkMTRhNmI1YS05NTBiLTRhZDAtYmEzYi01NjdmMTk1M2IzNGE6c3RyaW5nOis2NTYxMjM0NTY3In1dLCJhZGRyZXNzIjp7InR5cGUiOiIzZDk2NzY5ZC1mZmM5LTQ5ZGQtODI1NS02NTIzNjA1Y2MwNTQ6c3RyaW5nOnBoeXNpY2FsIiwidXNlIjoiYTg3N2EyNzktY2Q2OC00ZmQyLTg0NmUtZTUyOGJlOTYzYmQ4OnN0cmluZzp3b3JrIiwidGV4dCI6Ijk3ZjNlZGY5LTk3ZTAtNDcxZC04ZmJiLThmNWUwZDAzMjc1NDpzdHJpbmc6TWFjUml0Y2hpZSBIb3NwaXRhbCwgVGhvbXNvbiBSb2FkLCBTaW5nYXBvcmUgMTIzMDAwIn19XX19LHsiZnVsbFVybCI6ImFiMmRkOWI4LTE2ZTAtNGZhNi1iZTExLTIwMjMzZmU1NjgyZjpzdHJpbmc6dXJuOnV1aWQ6ODM5YTdjNTQtNmI0MC00MWNiLWIxMGQtOTI5NWQ3ZTc1Zjc3IiwicmVzb3VyY2UiOnsicmVzb3VyY2VUeXBlIjoiZTc4NzdhYWQtZTk1Mi00ODQ5LTk2MGQtNTVkZjc4MDdmZjhiOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiYjk5ZmYzNGEtZTg2NS00ZThmLWJjZGUtNzMwOTNmZWI1NjNmOnN0cmluZzpNYWNSaXRjaGllIExhYm9yYXRvcnkiLCJ0eXBlIjpbeyJjb2RpbmciOlt7InN5c3RlbSI6ImUzZDA4MDUyLThlOWUtNDk1MS1iZDlmLTE2ODUwM2UyYjk5MjpzdHJpbmc6aHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9vcmdhbml6YXRpb24tdHlwZSIsImNvZGUiOiIyZGY4OTk0ZS1jOTE4LTQzYTAtYTdiMC0xODcwM2IwMDQyZDA6c3RyaW5nOnByb3YiLCJkaXNwbGF5IjoiN2VhNGFlODUtN2I5Mi00MWEyLWJjN2EtYmMzNmRjNTlmMzU1OnN0cmluZzpIZWFsdGhjYXJlIFByb3ZpZGVyIn1dLCJ0ZXh0IjoiOTg0ZDcyOWEtM2UxNi00OTcyLTk4OWEtMjBjZGJjMTk1MTQ0OnN0cmluZzpBY2NyZWRpdGVkIExhYm9yYXRvcnkifV0sImNvbnRhY3QiOlt7InRlbGVjb20iOlt7InN5c3RlbSI6IjhkYjBjNDdkLWUwMDQtNDczYS05NWUwLWQ0OWU4MzVhOWIzNTpzdHJpbmc6dXJsIiwidmFsdWUiOiJkYzBjMTcwZC0xZmNmLTQ5ZmQtODZjOC04ZWM0N2RmNmMzNTM6c3RyaW5nOmh0dHBzOi8vd3d3Lm1hY3JpdGNoaWVsYWJvcmF0b3J5LmNvbS5zZyJ9LHsic3lzdGVtIjoiNTM0ZjI5YjgtNTg3ZC00YzQzLWE2ZWEtNDhjODQxZTBkMWQ2OnN0cmluZzpwaG9uZSIsInZhbHVlIjoiMjYxYmNhNzktNDg1NC00ZjQxLWJkZmMtOGQ3ZGM4YTQxZjhkOnN0cmluZzorNjU2NzY1NDMyMSJ9XSwiYWRkcmVzcyI6eyJ0eXBlIjoiNDg4MDg3MmItNzZmNS00Mjk1LThhOWQtZTdmYzZjNWEwOWVjOnN0cmluZzpwaHlzaWNhbCIsInVzZSI6ImRmZWJiNTdjLTY5ZDAtNGNhNy1hZWQ1LWMyODY2NTEyZDY2ODpzdHJpbmc6d29yayIsInRleHQiOiIyNGIyYWM1ZS03MTBhLTQ3YmUtOThkOC03YjFkMzg1MTI1NDg6c3RyaW5nOjIgVGhvbXNvbiBBdmVudWUgNCwgU2luZ2Fwb3JlIDA5ODg4OCJ9fV19fV19LCJpc3N1ZXJzIjpbeyJuYW1lIjoiYWViOWIzN2YtNDdhNy00YzY3LWI5YzctMzZkYWQ2YTJhYWFiOnN0cmluZzpTQU1QTEUgSVNTVUVSIChETyBOT1QgVkVSSUZZKSIsImlkIjoiYzQzYTVhZDktZDMwMC00YjVmLTgzYjgtYTQxM2QwYjlmZmIzOnN0cmluZzpkaWQ6ZXRocjoweEUzOTQ3OTkyOENjNEVmRkU1MDc3NDQ4ODc4MEI5ZjYxNmJkNEI4MzAiLCJyZXZvY2F0aW9uIjp7InR5cGUiOiI1ZjVmNmI3Zi1lMGYwLTQyNWQtYTU3Ny0wNWQ4MTlmMGRlMWY6c3RyaW5nOk5PTkUifSwiaWRlbnRpdHlQcm9vZiI6eyJ0eXBlIjoiOGFjOWZlYWMtMWM4My00MWEwLTkzMGMtM2FhODRmOTFkM2U5OnN0cmluZzpETlMtRElEIiwibG9jYXRpb24iOiI2OTk3MjJiNC1kM2YxLTQ5MmQtYTQ2ZS0wY2Q0ZTdiNmRhNTc6c3RyaW5nOmRvbm90dmVyaWZ5LnRlc3RpbmcudmVyaWZ5Lmdvdi5zZyIsImtleSI6IjFmMjU2MTQ2LTJhY2YtNGMzNC04MDQ5LTMwYTM5M2ExNjczMDpzdHJpbmc6ZGlkOmV0aHI6MHhFMzk0Nzk5MjhDYzRFZkZFNTA3NzQ0ODg3ODBCOWY2MTZiZDRCODMwI2NvbnRyb2xsZXIifX1dLCIkdGVtcGxhdGUiOnsibmFtZSI6ImQ5ZjczNjljLTVlZmYtNDg2Ni04NDRjLTc5NzU1Nzk4MmRmYzpzdHJpbmc6SEVBTFRIX0NFUlQiLCJ0eXBlIjoiZTU3MGIxOWUtNzJmZS00ZTA0LWFmMjUtYzVkMjM3ZTRhZGQzOnN0cmluZzpFTUJFRERFRF9SRU5ERVJFUiIsInVybCI6Ijk5YzM2Mjk1LTllNzYtNGE4ZS05ZDNjLWFjMzY5Y2ZhMjIyYzpzdHJpbmc6aHR0cHM6Ly9oZWFsdGhjZXJ0LnJlbmRlcmVyLm1vaC5nb3Yuc2cvIn0sIm5vdGFyaXNhdGlvbk1ldGFkYXRhIjp7InJlZmVyZW5jZSI6ImFjY2E0M2YwLWE4ZTAtNDNiZC1hMDYyLTNhN2Y5NzY5YmUxMTpzdHJpbmc6YzVhZDE5YmItNDAzYy00YjUyLTk3MWQtM2YwMWU4Nzg4M2UzIiwibm90YXJpc2VkT24iOiIzZjY4N2QwYS05OTJhLTRlY2UtOGIyNC0xMjMzMzJkMjRhZjY6c3RyaW5nOjIwMjEtMDktMjdUMDg6NTc6NTkuODgzWiIsInBhc3Nwb3J0TnVtYmVyIjoiMWFmNjVlMjAtNThiYy00YWM3LWFiNTktZmEwOTk2ZDAwMGFjOnN0cmluZzpFNzgzMTE3N0ciLCJ1cmwiOiI0MjdkMzFhMC02YWFkLTRjOTMtOGUxYy0wNjU2OTkyZmJkZWI6c3RyaW5nOmh0dHBzOi8vYWN0aW9uLm9wZW5hdHRlc3RhdGlvbi5jb20vP3E9JTdCJTIydHlwZSUyMiUzQSUyMkRPQ1VNRU5UJTIyJTJDJTIycGF5bG9hZCUyMiUzQSU3QiUyMnVyaSUyMiUzQSUyMmh0dHBzJTNBJTJGJTJGYXBpLnN0b3JhZ2Uuc3RhZ2luZy5ub3RhcmlzZS5pbyUyRmRvY3VtZW50JTJGZGM2NWRjN2QtMDVhMy00ODk1LWFkODAtOGRjNGE5MGFkZDFmJTIyJTJDJTIycGVybWl0dGVkQWN0aW9ucyUyMiUzQSU1QiUyMlZJRVclMjIlMkMlMjJTVE9SRSUyMiU1RCUyQyUyMnJlZGlyZWN0JTIyJTNBJTIyaHR0cHMlM0ElMkYlMkZ3d3cudmVyaWZ5Lmdvdi5zZyUyRnZlcmlmeSUyMiU3RCU3RCMlN0IlMjJrZXklMjIlM0ElMjIxMGQ1OTk1NTk3YjY4YWNhYjM5NDBjNTNkNzQzM2QyYTRlMWE0YzIzMWI2N2Y5OWUyODQ3Y2I0YjE3ODEwOThlJTIyJTdEIiwic2lnbmVkRXVIZWFsdGhDZXJ0cyI6W3sidHlwZSI6IjA5NzlhMzkzLTA3YmItNDUxNC04MWY5LTg1MjlmMjNiMDUxMjpzdHJpbmc6UENSIiwicXIiOiI3NzkxZWNlOS1jYjRlLTRiZDItODVmMS03YmIwNTUxMGVlZGU6c3RyaW5nOkhDMTo2QkZLJUdBIDlIV1JIMjNNTEJDRkdDRk8wV0c0WTVYSEIxUkYlVDcwR1I1UVVOODdNVTZOJTRQK0pXQ0s6T0pEUTQvTTJQK01FMlNNTUczU0EyM1YwNjBNJFIuS01aMjRMRVMxR084KzBERTJQLjVWSUhKR0slMEkzVVBTRUhTRjUkTUkwQTctWUsvQVVLRFVBM0Q6M0suS0o6NldZQ1RYUlIqLzFBNUsqK0pBS1QlMkVNUUQwQUZEIFQgLlBNMksgMDM0UFYyM04gTUxTIEVJJVRJL0FRRFNCMUFEWVRSVU1GJUVLSjBHREo4M1UgUTkxNzkgWlRQNVZON08qTDkyWjNOMzAgTlFKODREJENBKzY4T043K086UklLUVNKM0QuRzhMOEdOQUtNRDZENEVRVFBYNUIuKjNWOEhJN0FZSUJNNVZCK1FKUE5QU0ZaU1MtLzQrRVNCVDUrIEI5NDAyNjIqMzJRQVRCN0MxWVFZTkU1MDBPMTNUUk9NR0dFNDVZLkktSTJGLkwlUTI1WVFBVjJCJEFTODdNRTdLOU5ZUkw6LzhYWFNDUFMvOUw6OUVSNTM3TDg2V09QTTUtQjZET0pJUTZPME5ON0ExUEZKLlQxJU9UWDlFL1QgOUo3LkZFQUtGSk06MU5XWVZCVFI2WVMgQURCN1I6Q05TVURWIEQrM1FQREQlTU1QUEpVSUxLUUJXWExIWkFOLUpMUDlYRTUzMUJISEpYVkRBKkUzRVAkN0E6SEM3KkMgWEtFIEs4V0JZUTcrTjZOTFQyJUFJSElQIDYrTkVYVDVEVEFLU09GS0g5LzZPKkQ1MTE2JEhGWUklRTZUJUJCS0VQTjkuRTlGVVA1NElURldZSk1SMlBRK1QzNjdaNkNJNE9MWDI4UExBKk5aMlMtWkhFSEFUOkZMNzRaOlYrN0tSV1FPMVU2SkgwWDg5OVVMRVEvSTJSOjVCLjhUMUpRNEw6M0sgVk0tN0pSJU5NOlRLMk46MEItSjFHUFBZTEhCMUVFVlNJLzkgWDNRIDAuVkQ2RDgkWFFDTUg6RU9OWE9YU0FETFZZJDhTMVQ5ODFDNjVRRTYtTVE2VDZXOkgkKjZTOVc1WlNDJFJKVjhPRFQ0MjdITUJLRjczJFJMLTZSUzI4LUIvQ01PVzgwKlRGQUUkRDJMKkc1VUtaR0RBTUVNVkhQQTJHVjI4N1BJSVVOQlFGLko0SkYtJFRITEYkUk1XOUUxTDZOL1BNSTVHVkgtOjA3U0dNTDA3WEZOWDYwSzdILlZFUEFTL1BCWVFXLjZMWDk3MkRVTk0uWVAxSlA5MTJPUjlZNVBJNkRXQUdOT1AxTFVWOFBOR1ZaSjg4LktUWkdJV1NITkc2N1VYMzFZMEUwUFZTREZCUlZQTjBUQ0lKVU0kVEZYOVc3OjNUQjI0S05TWTRMSUZESU8lMUMlMFcrLlUgK0pTNkdOOVcwMVUtMTg0S0RWL1ZXQVQuRVVTJUZLK0RGJFRJNlAxSlRaQlNVMEVIQVcqNFc4MjlXNUVDUTdRMFJUVk5ULUZRWVY0N0UzVTE0UlM1MSJ9XX0sImxvZ28iOiJhYjM2NTEwZC1mNjFjLTRiZDgtOWIwNi0yODhlNWY1ZmI1MmE6c3RyaW5nOmRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBZlFBQUFESUNBTUFBQUFweCtQYUFBQUFNMUJNVkVVQUFBRE16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXplQ21pQUFBQUFFSFJTVGxNQVFMK0E3eEFnbjJEUDN6QndyMUNQRWwrSS9RQUFCd2RKUkVGVWVOcnNuZDEyMnlvUVJ2a0hJU0hOK3ovdHlVazlvVEVDUTFiVEJjMjNieU5zMEI1R0lEQVJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBaytJaytJZHg0ZzVONEI5R1EvclBBOUovSVBmU2d3TC9NRUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRHdQNVpQb1A1cjdGSktBZjdjdWZCaWhQTlNrWDVobEE5dStEc1A3ZFgvSksxUDJWUGlTSW9lYkVyTHdWaDVaeCs4QzFZMjJZdFAwRnBmNmhkZWErbXExV2xpeGZlajZSY0R4ajA5c3dYYmJlQlFwaWp1ZzIwYWovU0U4YnZvNWhFdWF2QXVTS3BRZkp4VEc5MWdVckNWNmpTUUUwb1BrZTR3dWtlNzA1RXFwTE5XeHRNdFNrNGp2WEdsZCt0TGx4dlZNTm5ha0Q3bUVuZFlUVldTblY4NjBXVVhsMzRSTXk3QmVtcHlHek43cEFibVhFQTZiZnZLMHUzMnVURktLVk0wcjBZdzFNVGNGdnA4aVZMUEQwKzlnSFF5KzdyU2YzZWVqcDJIdUZjc21sZGlFejBGektYZlNSdzNxZTA4WHFkOWRQNlFLT05ua3U0bEczTlNiL1JCdEt0S3QxdHRkQkppWWIyVkk3YnJjN3RjOElZb3RKekhVQjBjK08rVDNyVFF1TEtzWlJxcHprVFM3ZFpJNHZvK3FKbmRFR084RXplY3lqYWM2L0lUTjJLT1dhVUxJVC9hTGRlVW5xcGRpN1ZXMitLeWMyOUZMM3M3ZTNoaTVMVFNoZVdXcHlXbEg0WHptdldqbmlPaUZOM1lXRGl2V0k5Mld1azVjdDJDMHAzSnpsOVlONjZXSTVJVi9WeUY4NnIxYTE3cEg1VU1DMHBYL0R3WFZVNTI0S3M1WWdEWm1MNHpHejF3ODBwMzNQajFwTXZjaSt0YzJjRklqbWhIMmRXVmZ1YVZMdUxqeTllVHpncU9ycWV3djB2dW0vMUtSNCsyYTZEaDVwWE83VjlPK3M0S1JKUEFEdXhOanRqRkNDay9DbHRFemdmelN0ZXJTdmRaUVplRG95eXF4UWd1UjFsWG1CbEkvOVBTZWJacGJPZThiaXZ0MmJGSzlZYUs0ZUhlN05MTmF0TFAzcUdZTGZMNzFSb012QjZYdTk2SjNUV3Q5TFRvUU01em04WWZ4YkhJRVNQWlhYVy90b3ZUU28rUHFGeE5lc3dacWpPL1gwOU92QmdpOU9jSHc3bGxVdWtjditkaTBybmVxZjk5dVhvS2dsTU13YWxsN3gvbXkwbWxQNXBpVm52M2Z1WisxOTN4bnBUWUx6M1NqZWpQTFhwTzZUdFhielhwZklVY2VKSG1Qc1hBSnNiSSthTDdmdnNwcFZzT1g3dWFkSjlGdnVUNjNQeHNaQVEzVU14eWdMeVd2c2s2L2x1a3U0MGZiOHR0b2xERkZiMVpRUTYvbVJrdjFpVzlpMUo2Qy8xYWVqQWN2UVBWbVV0NkZCMmNuMjZKekRPNFRzYUxjV2VhVGJvN0luMDRYMDg2OTZYeFRucmttekdDSGltbUpwTHVOYVBpNzFmK0tPa3RlNUlLOU9yUzc0aW5nUFNmSmQxb0lTRDlaMG0vaFBoQjBvKy9MZDNNTUdVclNVNjhzOXlVelhTTzNzdWhXK0JoK0pqMG95ejJzblpxZ3BjemQ1aXdwdlJ2bUtmWHBZL1AweWVTZnNnSE9obGl3dExTN2NCU2lSMWFaRlAzMHErQnQzZlhiSzloUTJUcis0clNjKzhkZmxYQ08ybDZwWStQSXM1cEYxeHM0a21iWFZCNnowSldSUmRIKzZCMHc4VmVveWRlV2xWODR4YVVMbnZYMDh2RXpObitISk91K3RmVDFjU2JLUExld3ZXa2MvYzEvWXRzNFNsSitESHB1bnNGMzA2OVhTcnc3VmhRZWw0Z0hOM1F1SE84akVrL084Y0MrVW8vcFhSK3ZHMExTbi9aWHhsWHlJb2M2MFBTaGVsZHd2ZHpiNEhXM0k3MXBPLzB3SFlxT0lwOHY0MUpUNTJUTmpmNWp4MjRmbUU5NldMckc3L2Jzb002ZWhDR3BKOHMwL1pWM2s4cW5UT2RYMUI2NkhPZ2I0YjVLUmZ0bDU0ZkM3b3Z5dlpacFh0Nkp5NG8zWnFlZE92TVRkc2xQVWhEMHJsV3h2Vk1GdFMwUDFVT25QdldrODRYZGIwRElYVy9rSGlNU0xlbTdyTU1LRG10OUowSG1ndEsvM0JnN0doZ09HTENnUFQ4YWZwMXBkVEV4NDg4Nm5ndEtGMmM5T3BzZ1ZEYk9LQ0pPUWFraSsxVnJGaSt3cmlKcGZOYS9vclNoY3JXMjg2akxZc3l5ZlpMbDhTRXRuTTY1ajFTTEgrd1hWRzZqYzBEWUk5ODZGdWpLSm5RTFYwYzFNcnc3c081bi9md3dEZmtvajlnZkQ0b3poeUZBVVZNcUJSbFlyQ2Qwb1VuUnJraXlFek9QRk5MRnpUelQ1VmxCWGQzT204b3prQnRPT2REUFprVTlrOS9QQ3BMa0hhcm5aVWZJaFhPdjAvNklTdjBTT2N2ai8xYjl0emZrTjVHM3g3ZWJkSWgzNFdmRjZ0cERycllLNlBVcGQvNGZKUzNicFhhcnRPSk4rU1JEQlhPdjBsNm02RXpaMXozNWx3OWszUk8wMVdNRkJVNEg0KzIxbE1iYjhYczB2bHZZVkhwM1BVcUtDY2FPRFVzbmJOTFNSNWNUQytkWitwcFZlbENuS2ExMTdlTlROUWtTVkZpVTJ0UCtRclNPVnZaWmFVTHF3dnRQQ2gvamRNYjNSTjk5UU9rb2p2OExzUVMway9PNyt0S2YrTk1UOTZOUDBVdkx2aW5SbTlKbjI0d1ZyYkRDYkdJZEY0eFZCTkoveEpTZTZVZW8vQmovOUkvN0R5MFB2cm5KeTVvcFNJUlJaWDBhUVVBQVB6WDNoM1VBQUNBUUF4N1lBRC9hbkZCQ05kYW1JQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURBbW1vZUs5SHppQjVJOUVCWG54OEFBQUFBQUFBQUFMQm1BSVpLbXpXSW54eU9BQUFBQUVsRlRrU3VRbUNDIiwiYXR0YWNobWVudHMiOlt7ImZpbGVuYW1lIjoiN2YzZmY1ZmMtZTEwOC00OWE2LTljNmUtMTBmMDdlMzg0MGI3OnN0cmluZzpoZWFsdGhjZXJ0LnR4dCIsInR5cGUiOiI3NmU3ZGZkYS1kNGY3LTRlYTEtOTc0Ny02MDcwYTlhNjJiNDA6c3RyaW5nOnRleHQvb3Blbi1hdHRlc3RhdGlvbiIsImRhdGEiOiJjMTU1YzY3Ni05Yzk2LTRmM2MtOTYzYS0yYTU2OTJmMTdiYzU6c3RyaW5nOmV5SjJaWEp6YVc5dUlqb2lhSFIwY0hNNkx5OXpZMmhsYldFdWIzQmxibUYwZEdWemRHRjBhVzl1TG1OdmJTOHlMakF2YzJOb1pXMWhMbXB6YjI0aUxDSmtZWFJoSWpwN0ltbGtJam9pTnpZNU16Y3hNRE10TnpkbFppMDBOMk14TFRrNU1USXRZbUk1TW1Sak5EZ3lOMlZoT25OMGNtbHVaenBqTWpNMU5tVXpZaTA1TURBNUxUUXlNakF0WVRGall5MHhZV1k0WkRNME1qQmtZV1FpTENKMlpYSnphVzl1SWpvaU56RmhOV1V6T1RndFkyRm1NaTAwTkRRNExUZzJOelF0TVRBd1l6Z3hOR1prTnpCaE9uTjBjbWx1Wnpwd1pIUXRhR1ZoYkhSb1kyVnlkQzEyTWk0d0lpd2lkSGx3WlNJNklqTmtaV1ZrTnpFeExUSmlOR010TkRFMlpDMDRZVEJtTFdNeU1UQTFNelF3TURkbU9EcHpkSEpwYm1jNlVFTlNJaXdpZG1Gc2FXUkdjbTl0SWpvaVpEVXdNRGhtTUdJdE9HTTFOQzAwWXpRMUxUazVaR0V0WWpFNE56a3hZMlZpTWpZMk9uTjBjbWx1WnpveU1ESXhMVEE0TFRJMFZEQTBPakl5T2pNMkxqQTJNbG9pTENKbWFHbHlWbVZ5YzJsdmJpSTZJbUZrTnpkallqRXlMVE5sWmpndE5HWmpaaTA0TW1WakxUSmtPVFl5WVRsa1pEUTRORHB6ZEhKcGJtYzZOQzR3TGpFaUxDSm1hR2x5UW5WdVpHeGxJanA3SW5KbGMyOTFjbU5sVkhsd1pTSTZJalpqTURrM1ltSTBMVEkzWWpRdE5EQTBZeTFpTlRWaUxUSTNNbUk0WlRrd05HTXhZenB6ZEhKcGJtYzZRblZ1Wkd4bElpd2lkSGx3WlNJNkltWTFOakF3TURZeUxXSXdaVGd0TkdWbVpTMWhORGhrTFRNeFpqZzBNalk1TVdZd1lqcHpkSEpwYm1jNlkyOXNiR1ZqZEdsdmJpSXNJbVZ1ZEhKNUlqcGJleUptZFd4c1ZYSnNJam9pWkRWaU9EYzRaRFV0TVRka09TMDBPRGN5TFRrM09UY3RZVEUyTVRSaE0yWTBZekUzT25OMGNtbHVaenAxY200NmRYVnBaRHBpWVRkaU4yTTRaQzFqTlRBNUxUUmtPV1F0WW1VMFpTMW1PVGxpTm1SbE1qbGxNak1pTENKeVpYTnZkWEpqWlNJNmV5SnlaWE52ZFhKalpWUjVjR1VpT2lJellXTTVObVJsT1MweU5EUXhMVFJrTXpJdFltRmxOUzA0WkdOaVlqQmtNamd5WldVNmMzUnlhVzVuT2xCaGRHbGxiblFpTENKbGVIUmxibk5wYjI0aU9sdDdJblZ5YkNJNklqUmtOREUzTUdVNUxXRmtNRE10TkRreU55MWhPRGMxTFdReVlqYzBPV1V5WkRCbU5EcHpkSEpwYm1jNmFIUjBjRG92TDJoc055NXZjbWN2Wm1ocGNpOVRkSEoxWTNSMWNtVkVaV1pwYm1sMGFXOXVMM0JoZEdsbGJuUXRibUYwYVc5dVlXeHBkSGtpTENKbGVIUmxibk5wYjI0aU9sdDdJblZ5YkNJNkltSmtaVEkwTlRWbExURTVZall0TkRjeU5pMDRPVGcxTFRSbE9HVmhOV1V4WWpVMU5UcHpkSEpwYm1jNlkyOWtaU0lzSW5aaGJIVmxRMjlrWldGaWJHVkRiMjVqWlhCMElqcDdJblJsZUhRaU9pSmhNbU0zWVRBME15MHhPV1kyTFRReFptRXRPR014T1MxbE5XTTJZMkUzTkRBeU56azZjM1J5YVc1bk9sQmhkR2xsYm5RZ1RtRjBhVzl1WVd4cGRIa2lMQ0pqYjJScGJtY2lPbHQ3SW5ONWMzUmxiU0k2SWpoaFpEVTJORFkzTFdOaU16TXROREJsWXkxaU5USXhMV0UzTVRJek1XVmhNR1UxTnpwemRISnBibWM2ZFhKdU9tbHpienB6ZEdRNmFYTnZPak14TmpZaUxDSmpiMlJsSWpvaVlqUTBNbUZpTlRRdFpHTTROQzAwTUdObUxXRTBNbU10WXpjMk1tSmhNVGcwTVRZNU9uTjBjbWx1WnpwVFJ5SjlYWDE5WFgxZExDSnBaR1Z1ZEdsbWFXVnlJanBiZXlKcFpDSTZJalJpWlRrNFpHRmlMV0pqWldZdE5HUTJNUzA0WkRZMkxUTmlZMk0yWmpCaVptSXpZanB6ZEhKcGJtYzZVRkJPSWl3aWRIbHdaU0k2ZXlKamIyUnBibWNpT2x0N0luTjVjM1JsYlNJNklqSTRPVEl5TkdSbUxUSTBabUl0TkRneFppMDRPVE0wTFRWaFlUVmtOR0l4Tm1WbU16cHpkSEpwYm1jNmFIUjBjRG92TDNSbGNtMXBibTlzYjJkNUxtaHNOeTV2Y21jdlEyOWtaVk41YzNSbGJTOTJNaTB3TWpBeklpd2lZMjlrWlNJNkltWm1NR1V3T1RKaUxUTmtPV0l0TkRFM05pMDRZalprTFRNeU1HRXlPVFZoWkRsaVl6cHpkSEpwYm1jNlVGQk9JaXdpWkdsemNHeGhlU0k2SW1VNU5tSXhOalEwTFRnMFkyVXRORGxrWVMwNE5XUmtMVFEyWXpJMU5qY3hZV05qTXpwemRISnBibWM2VUdGemMzQnZjblFnVG5WdFltVnlJbjFkZlN3aWRtRnNkV1VpT2lJek1UUTRZV1kyWWkweE1UaG1MVFE1WldFdE9XUXpPUzFoT0RCbFl6bGpNemhqTUdJNmMzUnlhVzVuT2tVM09ETXhNVGMzUnlKOUxIc2lhV1FpT2lJNU5HVXpORGs1WlMwNFlXVTRMVFJpWmpjdE9EZ3hNUzB3WkdNeU1HUm1NVFl3T1RRNmMzUnlhVzVuT2s1U1NVTXRSa2xPSWl3aWRtRnNkV1VpT2lJMk1USmpOREV5TUMxaE0yRXdMVFEwTVdRdE9URm1NeTFqTmpVd1lqbGhNMlUxTVRJNmMzUnlhVzVuT2xNNU1EazRPVGc1V2lKOVhTd2libUZ0WlNJNlczc2lkR1Y0ZENJNklqRTVZamhsTURJMExXTXdZekF0TkRRME5TMWlNVEUzTFRWak1qWTRabUZtWXpGbFpUcHpkSEpwYm1jNlZHRnVJRU5vWlc0Z1EyaGxiaUo5WFN3aVoyVnVaR1Z5SWpvaVkyUTVaVEUwTVdRdFlUWmxZaTAwWkRrNExUazNNMlF0WkRZd01UY3pOV1V6TlRJNE9uTjBjbWx1WnpwbVpXMWhiR1VpTENKaWFYSjBhRVJoZEdVaU9pSTJOVE5oWW1Gak9TMHlNalV4TFRRelkyWXRPV1JpWXkxbE5XTTJOemcyTTJVM00yVTZjM1J5YVc1bk9qRTVPVEF0TURFdE1UVWlmWDBzZXlKbWRXeHNWWEpzSWpvaVpUUXlaRFF3WTJVdE9UWTNZaTAwWVRFeUxUa3pNRGt0WldVMU1tVTJNR05oTTJVME9uTjBjbWx1WnpwMWNtNDZkWFZwWkRvM056STVPVGN3WlMxaFlqSTJMVFEyT1dZdFlqTmxOUzB6Tm1FME1tVmpNalF4TkRZaUxDSnlaWE52ZFhKalpTSTZleUp5WlhOdmRYSmpaVlI1Y0dVaU9pSTNZVFF6TWpneE1TMWpNVFZoTFRRM01EUXRZakEyWXkweU56VXpZVFl6T1RFMU1qWTZjM1J5YVc1bk9rOWljMlZ5ZG1GMGFXOXVJaXdpYzNCbFkybHRaVzRpT25zaWRIbHdaU0k2SW1VMFl6RTJOREpsTFRGaE1UQXROR1k1WmkxaFlXVTJMV1V3TmpVM1lqSmtaalU0TURwemRISnBibWM2VTNCbFkybHRaVzRpTENKeVpXWmxjbVZ1WTJVaU9pSXpNVFkwWXpWbVppMWpPV00xTFRReFpEVXRZbVl6Tnkwd1pETmhZakV3TVRJMU1URTZjM1J5YVc1bk9uVnlianAxZFdsa09qQXlOelZpWm1GbUxUUTRabUl0TkRSbE1DMDRNR05rTFRsak5UQTBaamd3WlRaaFpTSjlMQ0p3WlhKbWIzSnRaWElpT2x0N0luUjVjR1VpT2lJMU9USmpaRFZoTWkxa05tRTBMVFJoT0RjdE9ETmpOaTFpTW1RMVlUVTVZMkUxWXpNNmMzUnlhVzVuT2xCeVlXTjBhWFJwYjI1bGNpSXNJbkpsWm1WeVpXNWpaU0k2SWpFMk1UVTVNVGxqTFRJeE1XVXRORGMyWlMwNU5qVTJMVGRrTnpreU5HUXlZekU1TlRwemRISnBibWM2ZFhKdU9uVjFhV1E2TTJSaVptWXdaR1V0WkRSaE5DMDBaVEZrTFRrNFltWXRZV1kzTkRJNFlqaGhNRFJpSW4wc2V5SnBaQ0k2SW1FeFpEaGtNRFJtTFdJNFpUUXRORFk0WXkxaE9UUXpMV1EwT1daa05XVmhZbVprTkRwemRISnBibWM2VEVoUUlpd2lkSGx3WlNJNkltTTFNek5rTmpnM0xUZGtNbVl0TkRaaE9DMDRPR00xTFRObFlXSXhaREJpT1RVek5qcHpkSEpwYm1jNlQzSm5ZVzVwZW1GMGFXOXVJaXdpY21WbVpYSmxibU5sSWpvaU9ERXlZVGxpWWpVdFlUZ3dNUzAwWWpkbExXSmpNV0V0TUdRMk56VXlNR1ZoTm1ZNU9uTjBjbWx1WnpwMWNtNDZkWFZwWkRwbVlUSXpNamhoWmkwME9EZ3lMVFJsWVdFdE9HTXlPQzAyTm1SaFlqUTJPVFV3WmpFaWZTeDdJbWxrSWpvaU9UazVNMkkwT0dZdE9UUTRZeTAwTnpKa0xXRmpNMkV0WXpoalpqUXhNVEZsTkdOak9uTjBjbWx1WnpwQlRDSXNJblI1Y0dVaU9pSXdaamhqTWpRMk5TMDRaamd5TFRRMVltVXRZVE5sTkMxa05qazJORGRsTm1FNU16STZjM1J5YVc1bk9rOXlaMkZ1YVhwaGRHbHZiaUlzSW5KbFptVnlaVzVqWlNJNkltUTVNVFptTTJKbUxUZGpaREV0TkRnMU5pMDVORFkyTFdJeFl6WTNNV1UwWlRVMVpUcHpkSEpwYm1jNmRYSnVPblYxYVdRNk9ETTVZVGRqTlRRdE5tSTBNQzAwTVdOaUxXSXhNR1F0T1RJNU5XUTNaVGMxWmpjM0luMWRMQ0pwWkdWdWRHbG1hV1Z5SWpwYmV5SnBaQ0k2SWpNNU9UWXhNR0ZpTFROak9USXRORFpqTkMwNU1qQTBMVGt3Tm1Nek16TTBZelUzT0RwemRISnBibWM2UVVOVFRpSXNJblI1Y0dVaU9uc2lZMjlrYVc1bklqcGJleUp6ZVhOMFpXMGlPaUprTmpnMU1UYzFOQzFtTVdNd0xUUmxOV010WWpRek1DMWpNekptTVRZNVl6VTRNak02YzNSeWFXNW5PbWgwZEhBNkx5OTBaWEp0YVc1dmJHOW5lUzVvYkRjdWIzSm5MME52WkdWVGVYTjBaVzB2ZGpJdE1ESXdNeUlzSW1OdlpHVWlPaUptWXpOaE5UTTJZeTFsTUdGbExUUTFabVV0WWpsaU9TMDNaalUwWlRKbU4yUmtaamc2YzNSeWFXNW5Pa0ZEVTA0aUxDSmthWE53YkdGNUlqb2lOVEJpWkRobVl6a3ROREV3WlMwME9URXdMV0l5TkdZdE5qRmlOMkkzWVRJMVpqRTRPbk4wY21sdVp6cEJZMk5sYzNOcGIyNGdTVVFpZlYxOUxDSjJZV3gxWlNJNklqZGtZakprWkRGaExUZzNPVFl0TkdFd1l5MDVORGxqTFdNMFlqUTNOamRtTXpnd1pUcHpkSEpwYm1jNk1USXpORFUyTnpnNUluMWRMQ0pqWVhSbFoyOXllU0k2VzNzaVkyOWthVzVuSWpwYmV5SnplWE4wWlcwaU9pSTBObVl4TlRVd1lTMWhNR1l6TFRSaVlXTXRPV013WXkweE9UYzJOakptTkRkbVpXVTZjM1J5YVc1bk9taDBkSEE2THk5emJtOXRaV1F1YVc1bWJ5OXpZM1FpTENKamIyUmxJam9pTlRBNU1tVTNNVGN0TTJSaFlpMDBPVEl3TFdGbU0yRXROREEyTlRFMU1UUmlaRFppT25OMGNtbHVaem80TkRBMU16a3dNRFlpTENKa2FYTndiR0Y1SWpvaU9UZGlaV1prT0RJdE4ySTRZeTAwTTJJMkxUaGxaak10WmpGaE9XVTJZalE0T0dVMU9uTjBjbWx1WnpwRFQxWkpSQzB4T1NKOVhYMWRMQ0pqYjJSbElqcDdJbU52WkdsdVp5STZXM3NpYzNsemRHVnRJam9pTW1JNE1EZGtZelV0TW1aaE9TMDBZVEUxTFRnNFlXUXRORGs0T1daa09EWXlObUpqT25OMGNtbHVaenBvZEhSd09pOHZiRzlwYm1NdWIzSm5JaXdpWTI5a1pTSTZJbUV3WXpFM1pHWmhMVFZoTVRrdE5ERXdZeTFoWkdKbUxUZzNaamxqTXpZeVpXWmxNVHB6ZEhKcGJtYzZPVFExTXpFdE1TSXNJbVJwYzNCc1lYa2lPaUprTlROa1pXUmxOaTFoWW1FM0xUUTROREV0T1Rjek1DMW1Oek5tT1Roa05EUXlNakE2YzNSeWFXNW5PbE5CVWxNdFEyOVdMVElnS0VOUFZrbEVMVEU1S1NCU1RrRWdjR0Z1Wld3Z0xTQlNaWE53YVhKaGRHOXllU0J6Y0dWamFXMWxiaUJpZVNCT1FVRWdkMmwwYUNCd2NtOWlaU0JrWlhSbFkzUnBiMjRpZlYxOUxDSjJZV3gxWlVOdlpHVmhZbXhsUTI5dVkyVndkQ0k2ZXlKamIyUnBibWNpT2x0N0luTjVjM1JsYlNJNklqSTJORFUyTldWaExUZzVNamd0TkRoa1lTMDRORFV6TFRSaFpHSmxaR00wTm1JNE56cHpkSEpwYm1jNmFIUjBjRG92TDNOdWIyMWxaQzVwYm1adkwzTmpkQ0lzSW1OdlpHVWlPaUpsTkRnMlpqUXdOaTB3TldOakxUUTFNbUV0T0dZM09TMWpNVEpoT1Rsa01tSTNORFk2YzNSeWFXNW5PakkyTURNNE5UQXdPU0lzSW1ScGMzQnNZWGtpT2lKaU1tWTBNMlkwWVMxbU9XUm1MVFEyWW1RdE9UQXpPUzFsT0RKalptWTRPV0UxTldRNmMzUnlhVzVuT2s1bFoyRjBhWFpsSW4xZGZTd2laV1ptWldOMGFYWmxSR0YwWlZScGJXVWlPaUl6WXpobU1ESTNNeTAxTWpsaUxUUXlZell0WVRka01TMDVaalZsTVdNek1ERm1ZVE02YzNSeWFXNW5Pakl3TWpBdE1Ea3RNamhVTURZNk1UVTZNREJhSWl3aWMzUmhkSFZ6SWpvaU4yTmhNR0prWm1RdFlqUmtNQzAwTURJMUxUbGxNR010WVRJMk9XSTJaRFExWlRObE9uTjBjbWx1WnpwbWFXNWhiQ0o5ZlN4N0ltWjFiR3hWY213aU9pSTFORGcyTTJNM05DMWtaalprTFRRd01tSXRZbVprTVMwM01UUTRZV1prTVRZeE5qZzZjM1J5YVc1bk9uVnlianAxZFdsa09qQXlOelZpWm1GbUxUUTRabUl0TkRSbE1DMDRNR05rTFRsak5UQTBaamd3WlRaaFpTSXNJbkpsYzI5MWNtTmxJanA3SW5KbGMyOTFjbU5sVkhsd1pTSTZJbVUyWmpobFpqQXdMVGc0T0dJdE5EazVZeTFpTURBMExUUmtNV05rWldRM1lqTm1NRHB6ZEhKcGJtYzZVM0JsWTJsdFpXNGlMQ0owZVhCbElqcDdJbU52WkdsdVp5STZXM3NpYzNsemRHVnRJam9pTURGbE5HSTRZVEl0TVRjNU15MDBOVGt3TFRreVpXTXROekUwTUdRNU1qaG1ZVGMyT25OMGNtbHVaenBvZEhSd09pOHZjMjV2YldWa0xtbHVabTh2YzJOMElpd2lZMjlrWlNJNkltWTFOR0k0TWpFM0xXTmhPRFV0TkdJMU5DMDRZVE5pTFdZNU9URmtaVEUzT0RZellUcHpkSEpwYm1jNk1qVTROVEF3TURBeElpd2laR2x6Y0d4aGVTSTZJalU1WkROaE9UazNMVGszWmpBdE5HVTBNaTA0TmpNMExUVmtaREF3TkdFMU4yWXpaRHB6ZEhKcGJtYzZUbUZ6YjNCb1lYSjVibWRsWVd3Z2MzZGhZaUo5WFgwc0ltTnZiR3hsWTNScGIyNGlPbnNpWTI5c2JHVmpkR1ZrUkdGMFpWUnBiV1VpT2lJeU4yVTFZakl4TXkwd1lqSTRMVFEyWW1VdFlUVXlaaTFoTkRoak9UY3hNVGN5TUdFNmMzUnlhVzVuT2pJd01qQXRNRGt0TWpkVU1EWTZNVFU2TURCYUluMTlmU3g3SW1aMWJHeFZjbXdpT2lKbU5UYzFabUkzTUMwM00yTXpMVFJsWlRZdE9UUmpZaTFrWVRNNU1qTmlOVGt6T0dVNmMzUnlhVzVuT25WeWJqcDFkV2xrT2pOa1ltWm1NR1JsTFdRMFlUUXROR1V4WkMwNU9HSm1MV0ZtTnpReU9HSTRZVEEwWWlJc0luSmxjMjkxY21ObElqcDdJbkpsYzI5MWNtTmxWSGx3WlNJNkltSmxNR015TlRSbExUbG1Oall0TkRnd1l5MDVOemcxTFdWbVpUSXpaRFkxTUdSbE9EcHpkSEpwYm1jNlVISmhZM1JwZEdsdmJtVnlJaXdpYm1GdFpTSTZXM3NpZEdWNGRDSTZJbVZrWVRrd04yWTVMV1l4TW1RdE5EYzFPUzFpTlRaakxXTTVPV0UzT0RZNVpEWm1aRHB6ZEhKcGJtYzZSSElnVFdsamFHRmxiQ0JNYVcwaWZWMHNJbkYxWVd4cFptbGpZWFJwYjI0aU9sdDdJbU52WkdVaU9uc2lZMjlrYVc1bklqcGJleUp6ZVhOMFpXMGlPaUpoTmpVNFltRmtOeTAyTkdSaUxUUTJaalF0T1RVMk5TMDBNekE0TWpVeU5tUmxOV1E2YzNSeWFXNW5PbWgwZEhBNkx5OTBaWEp0YVc1dmJHOW5lUzVvYkRjdWIzSm5MME52WkdWVGVYTjBaVzB2ZGpJdE1ESXdNeUlzSW1OdlpHVWlPaUppWkRBeFlXUXdZeTA1T1RGakxUUXpOamd0WVRrM1lTMHdZVEl4T0RjME9UQTNaRFk2YzNSeWFXNW5PazFEVWlJc0ltUnBjM0JzWVhraU9pSXdOamN6WVRnelppMDROek5pTFRRNE1EUXRZVGRpTXkwM00yVmhOR0V3Wm1RMlpUUTZjM1J5YVc1bk9sQnlZV04wYVhScGIyNWxjaUJOWldScFkyRnlaU0J1ZFcxaVpYSWlmVjE5TENKcFpHVnVkR2xtYVdWeUlqcGJleUpwWkNJNklqUmtZalJsWlRFM0xUTXlZamd0TkRrNE15MWhaVE5oTFdJd00ySmtaR0l5WlRVeU5UcHpkSEpwYm1jNlRVTlNJaXdpZG1Gc2RXVWlPaUl6TVRBMllXUmlZaTFsT1dWbExUUmlNbVF0T0dOa1ppMWlNMkV3WmpBeFlqWXlZbVU2YzNSeWFXNW5PakV5TXpRMU5pSjlYU3dpYVhOemRXVnlJanA3SW5SNWNHVWlPaUl4TVRWa05tUmxOaTB6TlRSakxUUTJZVGt0WWpWallpMHlZMlppWVRJd09UZzNNREE2YzNSeWFXNW5Pazl5WjJGdWFYcGhkR2x2YmlJc0luSmxabVZ5Wlc1alpTSTZJbUkyWW1OaE5qRTBMV1ZtWkdNdE5EWTRNeTA0TVdZekxUUTFPR1F6TWpRNE9HWm1aVHB6ZEhKcGJtYzZkWEp1T25WMWFXUTZZbU0zTURZMVpXVXROREpoWVMwME56TmhMV0UyTVRRdFlXWmtPR0UzWWpNd1lqRmxJbjE5WFgxOUxIc2lablZzYkZWeWJDSTZJbVk0WWpGaE56STRMVGM1WW1ZdE5ESmtNUzFpTXpSaUxUaG1abVEyWlRNek5tSXhPRHB6ZEhKcGJtYzZkWEp1T25WMWFXUTZZbU0zTURZMVpXVXROREpoWVMwME56TmhMV0UyTVRRdFlXWmtPR0UzWWpNd1lqRmxJaXdpY21WemIzVnlZMlVpT25zaWNtVnpiM1Z5WTJWVWVYQmxJam9pWTJZNU5ERXlaV1F0TnpNNE55MDBZVEl6TFRrNFpUa3ROREl4TWpSaE5UVmxaR1prT25OMGNtbHVaenBQY21kaGJtbDZZWFJwYjI0aUxDSnVZVzFsSWpvaU1tVmxPREprTm1FdE1UYzVaaTAwWVdFd0xXRTJZamt0T1RnNE16TmhabVF6WVdaa09uTjBjbWx1WnpwTmFXNXBjM1J5ZVNCdlppQklaV0ZzZEdnZ0tFMVBTQ2tpTENKMGVYQmxJanBiZXlKamIyUnBibWNpT2x0N0luTjVjM1JsYlNJNklqUXpaR1ZsTWpNeExXSmpZek10TkRnd01DMWhNakEyTFdRNFlUSTBaV0kxTlRGaVlqcHpkSEpwYm1jNmFIUjBjRG92TDNSbGNtMXBibTlzYjJkNUxtaHNOeTV2Y21jdlEyOWtaVk41YzNSbGJTOXZjbWRoYm1sNllYUnBiMjR0ZEhsd1pTSXNJbU52WkdVaU9pSmpaRFU0WWpNeFppMDRNV1prTFRRek9HWXRPR1UzWlMweVlqRTJZVGN6TjJJMVpqVTZjM1J5YVc1bk9tZHZkblFpTENKa2FYTndiR0Y1SWpvaU1HWTRNMlEwWW1FdFkyWm1ZaTAwT0RnMUxUbGhNVFF0WkRBMFlXSXhZalEyWlRJeU9uTjBjbWx1WnpwSGIzWmxjbTV0Wlc1MEluMWRmVjBzSW1OdmJuUmhZM1FpT2x0N0luUmxiR1ZqYjIwaU9sdDdJbk41YzNSbGJTSTZJamxsTVRrMU9EUTFMV00yTmpRdE5HUXpOeTFoWkdabUxXVXhNMlF6TVdZNFl6Z3lNVHB6ZEhKcGJtYzZkWEpzSWl3aWRtRnNkV1VpT2lKaE5UaGhNRGxsTUMwME1qRXhMVFE0WkdZdE9UUXpNaTAwWldaalpXVmlOR1kzWldJNmMzUnlhVzVuT21oMGRIQnpPaTh2ZDNkM0xtMXZhQzVuYjNZdWMyY2lmU3g3SW5ONWMzUmxiU0k2SW1KbE1HRXlZV0k0TFRObVpqWXROREJpT1MwNVlqa3dMVGcxTWpVeVpURm1PVE15WmpwemRISnBibWM2Y0dodmJtVWlMQ0oyWVd4MVpTSTZJakl4TVRJNE1EUTRMV1ppTmpVdE5EWXpOUzA0TURFeUxUVmlORFJrTlRNd1pUa3hNRHB6ZEhKcGJtYzZLelkxTmpNeU5Ua3lNakFpZlYwc0ltRmtaSEpsYzNNaU9uc2lkSGx3WlNJNkltTXlOMkZqWkdNNExUQTJOVGt0TkRFM01pMDVZalUyTFdFMk1XVTNaalExTVdFeE5EcHpkSEpwYm1jNmNHaDVjMmxqWVd3aUxDSjFjMlVpT2lKa05XVmpPRFU1WVMxa056WmxMVFJsWldJdFlqRTBNUzAwWmpVd056bGlZbU0yT1RZNmMzUnlhVzVuT25kdmNtc2lMQ0owWlhoMElqb2lNekZoWVdOaU9XWXRNRGM1WmkwME9UZGhMVGd4TlRVdFpqRmpORE5oT0daaE16azFPbk4wY21sdVp6cE5hVzVwYzNSeWVTQnZaaUJJWldGc2RHZ3NJREUySUVOdmJHeGxaMlVnVW05aFpDd2dRMjlzYkdWblpTQnZaaUJOWldScFkybHVaU0JDZFdsc1pHbHVaeXdnVTJsdVoyRndiM0psSURFMk9UZzFOQ0o5ZlYxOWZTeDdJbVoxYkd4VmNtd2lPaUkyT1daa05tWmlZaTFpTUdSaExUUTNaRGt0WVdFeU5DMHpNV0ZqTlRZMU5ESTROemc2YzNSeWFXNW5PblZ5YmpwMWRXbGtPbVpoTWpNeU9HRm1MVFE0T0RJdE5HVmhZUzA0WXpJNExUWTJaR0ZpTkRZNU5UQm1NU0lzSW5KbGMyOTFjbU5sSWpwN0luSmxjMjkxY21ObFZIbHdaU0k2SWpGbFpqQTJNMlJsTFRJM05tRXRORGt5TlMwNU16VXlMV05sWm1NNU5qTTNaV0kyTURwemRISnBibWM2VDNKbllXNXBlbUYwYVc5dUlpd2libUZ0WlNJNklqTm1ZelEwWTJNd0xXVmlNelF0TkdZMk55MWhOelU0TFRNeVlqWTRaVFpsWlRCa05qcHpkSEpwYm1jNlRXRmpVbWwwWTJocFpTQk5aV1JwWTJGc0lFTnNhVzVwWXlJc0luUjVjR1VpT2x0N0ltTnZaR2x1WnlJNlczc2ljM2x6ZEdWdElqb2lOMlZpTldKbU9UUXROREF6TUMwME1UbGhMV0UxWVRBdFkyUmlNMlE1TnpReU5XRmtPbk4wY21sdVp6cG9kSFJ3T2k4dmRHVnliV2x1YjJ4dloza3VhR3czTG05eVp5OURiMlJsVTNsemRHVnRMMjl5WjJGdWFYcGhkR2x2YmkxMGVYQmxJaXdpWTI5a1pTSTZJalpoTnpVM1l6YzJMV05sTlRRdE5HVmtaaTA1WkdFMExUbG1aV0ZqWVdGbVpXRmlPVHB6ZEhKcGJtYzZjSEp2ZGlJc0ltUnBjM0JzWVhraU9pSmxOREUwT0dZM09TMDVZMll4TFRRNU16Y3RZakprWXkwME1tVXpZamczTWpoaVlqYzZjM1J5YVc1bk9raGxZV3gwYUdOaGNtVWdVSEp2ZG1sa1pYSWlmVjBzSW5SbGVIUWlPaUl5TlRJMk16QmpOUzFqWW1ObExUUmlNRE10WVRjME1DMWtNalJoTVRCaE9EWTNNRGc2YzNSeWFXNW5Pa3hwWTJWdWMyVmtJRWhsWVd4MGFHTmhjbVVnVUhKdmRtbGtaWElpZlYwc0ltTnZiblJoWTNRaU9sdDdJblJsYkdWamIyMGlPbHQ3SW5ONWMzUmxiU0k2SW1JNFltWXlZbUZtTFROa01HRXRORFJqT1MxaVlUaGlMVE5oTkdGall6VmpNR000TVRwemRISnBibWM2ZFhKc0lpd2lkbUZzZFdVaU9pSm1aamMyTURjME1pMHdNRE5oTFRSbFkySXRPRFk0TlMweFkyWTVNRFE0WWpReFpUazZjM1J5YVc1bk9taDBkSEJ6T2k4dmQzZDNMbTFoWTNKcGRHTm9hV1ZqYkdsdWFXTXVZMjl0TG5ObkluMHNleUp6ZVhOMFpXMGlPaUpsT0RJNVpURmxOaTA0TUdNekxUUmhNbVV0T0RSbE1pMDJOVE5qWWpka1l6UTROR0k2YzNSeWFXNW5PbkJvYjI1bElpd2lkbUZzZFdVaU9pSXpaR05rWVRBeE5pMW1OVEkwTFRSbU1EZ3RPREJtTnkweE1tTXlOMkl3Tm1JNE5tTTZjM1J5YVc1bk9pczJOVFl4TWpNME5UWTNJbjFkTENKaFpHUnlaWE56SWpwN0luUjVjR1VpT2lKbU9XTTNObUl4WkMxaFpEZzFMVFF5TldZdFlqUmhaaTAxTkRBNU16QXhOemsxTVdJNmMzUnlhVzVuT25Cb2VYTnBZMkZzSWl3aWRYTmxJam9pTkRaa09EYzVOekV0T0dabE15MDBZbU5pTFRreE5UQXRNREl4WW1RME1qRXlaV1UxT25OMGNtbHVaenAzYjNKcklpd2lkR1Y0ZENJNkltTTNOVGxoWWprd0xUSXdOVE10TkRFMU1DMDVNMk5oTFRReU5HSXhOV1ptTmpVNE1qcHpkSEpwYm1jNlRXRmpVbWwwWTJocFpTQkliM053YVhSaGJDd2dWR2h2YlhOdmJpQlNiMkZrTENCVGFXNW5ZWEJ2Y21VZ01USXpNREF3SW4xOVhYMTlMSHNpWm5Wc2JGVnliQ0k2SWpkbU1URTNPVGc0TFdFMVpXVXROREE1WXkxaFptWTRMVFppTW1Zd1pXSXhPVGhoTURwemRISnBibWM2ZFhKdU9uVjFhV1E2T0RNNVlUZGpOVFF0Tm1JME1DMDBNV05pTFdJeE1HUXRPVEk1TldRM1pUYzFaamMzSWl3aWNtVnpiM1Z5WTJVaU9uc2ljbVZ6YjNWeVkyVlVlWEJsSWpvaVpHSXhObVF5TUdZdFpqbGpPQzAwTkRrd0xXSTFOREF0TmpKaVl6TTROV1psT1RSaE9uTjBjbWx1WnpwUGNtZGhibWw2WVhScGIyNGlMQ0p1WVcxbElqb2lNbVUzTWpnMFpURXRPV1ZqTlMwMFpqVTVMV0UxWVRBdE9EVTNabVl5WXpFNVpXSTBPbk4wY21sdVp6cE5ZV05TYVhSamFHbGxJRXhoWW05eVlYUnZjbmtpTENKMGVYQmxJanBiZXlKamIyUnBibWNpT2x0N0luTjVjM1JsYlNJNkltSmpPRFZpWTJaa0xXWTVOV0V0TkRWaE1pMWhPVGc1TFdRNE16TXpOR1F6WVRjd1pEcHpkSEpwYm1jNmFIUjBjRG92TDNSbGNtMXBibTlzYjJkNUxtaHNOeTV2Y21jdlEyOWtaVk41YzNSbGJTOXZjbWRoYm1sNllYUnBiMjR0ZEhsd1pTSXNJbU52WkdVaU9pSXpNMkV6WTJObU55MHdPRGMxTFRRellXSXRPV0psTUMwMU56Um1NbVJsWXpRMVlqWTZjM1J5YVc1bk9uQnliM1lpTENKa2FYTndiR0Y1SWpvaU56WTFZV1EyWTJNdE1UTXdNUzAwTlRjNUxUbGtPV0l0TkdOaVlqTTROVEkwWXpsbE9uTjBjbWx1WnpwSVpXRnNkR2hqWVhKbElGQnliM1pwWkdWeUluMWRMQ0owWlhoMElqb2lZVFF5T1RVeFkyTXRaV0l4TkMwME1EZzRMV0psWVRndFlUaG1aamcwTWpsaU56aGtPbk4wY21sdVp6cEJZMk55WldScGRHVmtJRXhoWW05eVlYUnZjbmtpZlYwc0ltTnZiblJoWTNRaU9sdDdJblJsYkdWamIyMGlPbHQ3SW5ONWMzUmxiU0k2SWpGaE5XSXlNVFF5TFRVeE5HRXROREEzWmkxaU9UYzVMVFkzWmpKaVl6STNOek13TURwemRISnBibWM2ZFhKc0lpd2lkbUZzZFdVaU9pSmpZVGhtWmpnNFppMDFNamxtTFRRd1pUWXRPREEyTkMwME9HUTJOVEF4TnprME16QTZjM1J5YVc1bk9taDBkSEJ6T2k4dmQzZDNMbTFoWTNKcGRHTm9hV1ZzWVdKdmNtRjBiM0o1TG1OdmJTNXpaeUo5TEhzaWMzbHpkR1Z0SWpvaU56WTJZek01WXpFdFltWmlNUzAwTWpJM0xUa3hOVEV0WVRBMVpESmtOekJtTTJNNU9uTjBjbWx1Wnpwd2FHOXVaU0lzSW5aaGJIVmxJam9pTXpVeFpERmpOVFV0T0RnME1DMDBPVEJpTFRreVlXSXROMk5oTWpZNU16ZGpNVGRoT25OMGNtbHVaem9yTmpVMk56WTFORE15TVNKOVhTd2lZV1JrY21WemN5STZleUowZVhCbElqb2laREpsTURCa1ltWXRaR1l4TXkwME5EUXlMV0ZoT1RZdE1UZzRNVFJsTVRkak9HTmpPbk4wY21sdVp6cHdhSGx6YVdOaGJDSXNJblZ6WlNJNklqSmlNV0U1TjJZd0xUSmlNRFF0TkdWallpMWhNR1UzTFRVMU5tSTBNbVZoTXpNMlpqcHpkSEpwYm1jNmQyOXlheUlzSW5SbGVIUWlPaUl6WVRreFlUVTVaUzFsTmpVeUxUUm1NR0V0WVROa1l5MDBPV1V3TVRWaU5URTFOR002YzNSeWFXNW5PaklnVkdodmJYTnZiaUJCZG1WdWRXVWdOQ3dnVTJsdVoyRndiM0psSURBNU9EZzRPQ0o5ZlYxOWZWMTlMQ0pwYzNOMVpYSnpJanBiZXlKdVlXMWxJam9pWVdKalpUSXhZVFV0T1RNeFlTMDBPRFF4TFdKaE1XRXROekl4WlRnelptUm1aRE15T25OMGNtbHVaenBUUVUxUVRFVWdTVk5UVlVWU0lDaEVUeUJPVDFRZ1ZrVlNTVVpaS1NJc0ltbGtJam9pT1dZM1pUVXpNbVl0TmpJNE9DMDBORGhrTFdFeE1Ea3RabVE1WmpJM1pqWXpObUkwT25OMGNtbHVaenBrYVdRNlpYUm9jam93ZUVVek9UUTNPVGt5T0VOak5FVm1Sa1UxTURjM05EUTRPRGM0TUVJNVpqWXhObUprTkVJNE16QWlMQ0p5WlhadlkyRjBhVzl1SWpwN0luUjVjR1VpT2lKaVlUQTBaVEl6TmkwNU9UZzBMVFF6T1dFdFltVmpNaTAwWTJSa05UYzJaV1ZpTURZNmMzUnlhVzVuT2s1UFRrVWlmU3dpYVdSbGJuUnBkSGxRY205dlppSTZleUowZVhCbElqb2lOamN3WW1ReE5tSXROV0kxTmkwME1qZzBMVGcyTjJFdE5UUmlOamszWXpBMVpXRTFPbk4wY21sdVp6cEVUbE10UkVsRUlpd2liRzlqWVhScGIyNGlPaUl5TWpaalpUY3laUzAxTnpaaUxUUTJaamt0WVRjeU1pMWpNR1UxWTJFNFpERXpObUU2YzNSeWFXNW5PbVJ2Ym05MGRtVnlhV1o1TG5SbGMzUnBibWN1ZG1WeWFXWjVMbWR2ZGk1elp5SXNJbXRsZVNJNklqRXdNak0xT0dZeUxUTmtNRFF0TkRNd055MWhZemMzTFdNMVlUTm1aVGRpTVRnellUcHpkSEpwYm1jNlpHbGtPbVYwYUhJNk1IaEZNemswTnprNU1qaERZelJGWmtaRk5UQTNOelEwT0RnM09EQkNPV1kyTVRaaVpEUkNPRE13STJOdmJuUnliMnhzWlhJaWZYMWRMQ0lrZEdWdGNHeGhkR1VpT25zaWJtRnRaU0k2SW1Ka1pqQmlaV0ZsTFdZNFpURXRORFJoWVMxaFptVXpMV1l3TVRFM05qVXdOVE00WWpwemRISnBibWM2U0VWQlRGUklYME5GVWxRaUxDSjBlWEJsSWpvaU1EYzBNakV5Wm1RdFpqSXhOQzAwTXprM0xUaGhNVFl0T1RRMU1XRTJOakF5T0dVME9uTjBjbWx1WnpwRlRVSkZSRVJGUkY5U1JVNUVSVkpGVWlJc0luVnliQ0k2SWpneFpEUXhaR00zTFdKak1EUXROREE0TmkxaE5HVTFMVGRpTnpsa05UWTFZemc1WVRwemRISnBibWM2YUhSMGNITTZMeTlvWldGc2RHaGpaWEowTG5KbGJtUmxjbVZ5TG0xdmFDNW5iM1l1YzJjdkluMHNJbTV2ZEdGeWFYTmhkR2x2YmsxbGRHRmtZWFJoSWpwN0luSmxabVZ5Wlc1alpTSTZJbVpsWmpZNE9UWmlMVGM0WTJNdE5ESTNNQzA0Tm1ZekxUVTBNVGczTkRGa09HTTNaanB6ZEhKcGJtYzZZekl6TlRabE0ySXRPVEF3T1MwME1qSXdMV0V4WTJNdE1XRm1PR1F6TkRJd1pHRmtJaXdpYm05MFlYSnBjMlZrVDI0aU9pSm1ZalEzTTJNMU1pMHpNMk5qTFRRMFpUVXRZbVV4WXkwM05UQTBOMkl5WkdGaE1XVTZjM1J5YVc1bk9qSXdNakV0TURndE1qUlVNRFU2TURrNk5Ua3VNams1V2lJc0luQmhjM053YjNKMFRuVnRZbVZ5SWpvaU1tVXdZamxoTVdVdFlqWXdPQzAwTldReUxXRmxNall0TkdRd1kyRXlZVEkxTlRCa09uTjBjbWx1WnpwRk56Z3pNVEUzTjBjaUxDSjFjbXdpT2lJMU0yVmpNV1ZoWVMweE5HUTBMVFE0TlRBdE9UZzFPQzB4TXpJd01ESXhOR1pqWlRVNmMzUnlhVzVuT21oMGRIQnpPaTh2WVdOMGFXOXVMbTl3Wlc1aGRIUmxjM1JoZEdsdmJpNWpiMjB2UDNFOUpUZENKVEl5ZEhsd1pTVXlNaVV6UVNVeU1rUlBRMVZOUlU1VUpUSXlKVEpESlRJeWNHRjViRzloWkNVeU1pVXpRU1UzUWlVeU1uVnlhU1V5TWlVelFTVXlNbWgwZEhCekpUTkJKVEpHSlRKR1lYQnBMWFpoWTJOcGJtVXVjM1J2Y21GblpTNXpkR0ZuYVc1bkxtNXZkR0Z5YVhObExtbHZKVEpHWkc5amRXMWxiblFsTWtZeE1URmtNREkzWVMxbE9HUmpMVFJsTkRRdE9Ea3lOQzFqTkRGalpEY3dOMlZoWXpZbE1qSWxNa01sTWpKd1pYSnRhWFIwWldSQlkzUnBiMjV6SlRJeUpUTkJKVFZDSlRJeVZrbEZWeVV5TWlVeVF5VXlNbE5VVDFKRkpUSXlKVFZFSlRKREpUSXljbVZrYVhKbFkzUWxNaklsTTBFbE1qSm9kSFJ3Y3lVelFTVXlSaVV5Um5kM2R5NTJaWEpwWm5rdVoyOTJMbk5uSlRKR2RtVnlhV1o1SlRJeUpUZEVKVGRFSXlVM1FpVXlNbXRsZVNVeU1pVXpRU1V5TW1aaE16VmtOR0kzTXpWaU5tUTFNRE15TjJNNU4yWXdNRGd5TnpFeU9UazVZMlpoTmpReVltSTRNekF5TldZME9EY3pNMlUxWmpJeU16QTJObVE1Tm1ZbE1qSWxOMFFpZlN3aWJHOW5ieUk2SW1VeU1tUmhNRGt6TFRZMk56Z3ROREkwWkMxaFpUUXlMVGcxTVRJNVl6TXlaV1V5TWpwemRISnBibWM2WkdGMFlUcHBiV0ZuWlM5d2JtYzdZbUZ6WlRZMExHbFdRazlTZHpCTFIyZHZRVUZCUVU1VFZXaEZWV2RCUVVGbVVVRkJRVVJKUTBGTlFVRkJRWEI0SzFCaFFVRkJRVTB4UWsxV1JWVkJRVUZFVFhwTmVrMTZUWHBOZWsxNlRYcE5lazE2VFhwTmVrMTZUWHBOZWsxNlRYcE5lazE2VFhwTmVrMTZUWHBOZWsxNlRYcE5lazE2VFhwTmVrMTZUWHBOZW1WRGJXbEJRVUZCUVVWSVVsTlViRTFCVVV3clFUZDRRV2R1TWtSUU0zcENkM0l4UTFCRmJDdEpMMUZCUVVKM1pFcFNSVVpWWlU1eWMyNWtNVEl5ZVc5UlVuWnJTRWxUU0U0cmVpOTBlVlZyT1c5VVJVTlJNV0pVUW1NeU0ySjVUbk13UWpWSFNVUkJVa0ZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGckswbHJLMGxrZURSbk5VNDBRamxIVVM5eVVFRTVTaTlKVUdaVFozZE1MMDFGUlVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkVkMUExV2xCdlVEVnlOMFpLUzBGbU4yTjFaa0pwYUZCT1UydFlOV2hzUVRsMUswUnpVRGRrV0M5S1N6RlFNbFpRYVZOSmIyVmlSWEpNZDFab05WcDRLemhETVZreU1sbDBVREJHY0dZMmFHUmxZU3R0Y1RGWGJHbDRabVZxTmxKalJIaHFNRGx6ZDFoaVltVkNVWEJwYW5Wbk1qQmhhaTlUUlRoaWRtODFhRVYxWVhaQmRWTkxjRkZtU25oVVJ6a3haMVZ5UTFZMmFsTlJSVEJ2VUd0bE5IZDFhMlUzTURWRmNYQk1UbGQ0ZEUxMFUyczBhblpZUjJ4a0szUk1iSGgyVmsxT2JtRnJSRGR0Ulc1a1dWUldWMU51VmpnMk1GZFZXR3d6TkZKTmVUZENaVzF3ZVVkNlRqZHdRV0p0V0VWQk5tSm1ka3N3ZFRNeWRWUkdTMHRXVFRCeU1GbDNNVTFVWTBaMmNEaHBWa3hRUkRBck9XZElVWGtyTjNKVFpqTmxaV3B3TWtoMVJtTnpiV3hrYVVWNk1FWjZTMWhtVTFKM00zRmxNRGhZY1dRNVpGQTJVVXRQVG01cmRUUnNSek5PVTJJdlVrSjBTM1JMZERGMGRHUkNTbWxaWWpKV1NUZGljbU0zZEdNNFNWbHZkRXA2U0ZWQ01HTXJUeXRVTTNKVVVYVk1TM05hVW5Gd2VtdFVVemRrV2trMGRtOHJjVXB1WkVWSFR6aEZlbVZqZVdwaFl6WXZTVlJPTWt0UFYyRlZURWxVTDJGTVpHVlZibkZ3WkdrM1ZsY3lLMHQ1WXpJNVJrd3pjemRsTTJocE5VeFVVMmhsVjFkd2VWZHNTRFJZZW0xMlYycHVhVTlwUms0eldWZEVhWFpYU1RreVYzVnJOV04wTWtNd2NETktlbXc1V1U0Mk5sZEpOVWxXTDFaNVJqZzJjakZoTVRkd1NEVlZUVU13Y0ZndlJIZFlWbFUxTWpSTGN6VlpaMFJhYlV3MGVrZDZNWGM0TUhBek0xQnFNWEJOZG1OcEszUmpNbU5HU1dwdGFFZ3laRmRXWm5WaFZreDFUR3A1T1dWVWVtZHhUM0p4WlhkMk1IWjFiUzh4UzFJMEt6SmhOa1JvTlhCWVR6ZFdPVThyY3pSTFVrcFFRVVIxZUU1cWRHcEdRME5yTDBOc2RFVjZaMlo2VTNSbGNsTjJaRnBSV21WRWIzbDVjWGhSWjNWU01XeFliVUpzU1M4NVVGTmxZbHB3WWs5bE9HSnBkblF5WWtaTE9WbGhTelJsU0dVM1RreE9ZWFJNVUROeFIxbE1aa3czTVZKdlRYWkNObGgxT1RaS00xUlhkRGxNVkc5UlRUVjZiVGhaWm5oaVNFbEZVMUJhV0ZoWEwzUnZkbFJUYnl0UWNVWjRUbVZ6ZDFweGFrOHZXREE1VDNaQ1oyazVUMk5JZHpkc2JGVjFhMk4ySzJScE1ISnVaWEZtT1RsMVdHOUxaMnhOVFhkaGJHdzNlQzl0ZVRCdGJGQTFjR2xXYm5ZelpuVmFLekU1TTNodWNGUlpUSG96VTJwbGFsQk1XSEJQTmxSMFdHSjZXSEJtU1ZWalpVcEliVkJ6V0VGS2MySkpLMkZNTjJaMmMzQndWbk5QV0RkMVlXUktPVVoyZFZRMk0xQjRjMXBCVVROVlRYaDVaMHg1VjNaemF6WXZiSFZyZFRRd1ptSTRkSFJ2YkVSR1JtSXhXbEZSTmk5dFVtdDJNV2xYT1dreFNqWkRMekZoWldwQlkzWlJVRlp0VlhRMlJrSXlZMjR5TmtwNlJFODBWSE5oVEdOWFpXRlVZbTgzU1c0d05GZ3dPRFk1TmxoNFZHNXlhMjE2UjBOSWFXMXRTbkJNZFU1aFVHazNNV1lyUzA5cmRHVTFTVXM1VDNKVE56UnBibWRRVTJaS1pERnZTVk5FT1Zvd2JTOW9VR2hDTUc4ckwweGtNMDFOUjFWeVUxVTJPSE01ZVZWNldGTlBNM04xYUZjclFtZ3JTbW93YjNsNk1uTnVXbkZuY0dONlpEVnBkM0IyVW5adFMyWlljRmt2VURCNVpWTm1jMmRJVDJoc2FYZDBURk0zWTBKVGFWSXhZVnBHVURNd2NTdENkRE5tV0dKTE9XaFJNbFJ5S3pSeVUyTXJPR1JtYkZoRFR6SnNObkJaSzFCSmN6VndSakY0Y3pScmJXSllWa0kyZWpCS1YxSlNaRWdyTmtJd2R6aFdaVzk1WkdWWGJGWTROSGhoVlV4dWRsZ3dPSFpGZWs1dUswaEtUM1VyZEdaVU1XTlRZa3RRVEdWM2RsZHJZeTlqTVM5WmRITTBVMnhLSzBSSWNIVnVjMFl6TURZNVdGTnlkemRXYUZGbGJEUm5TRTR6VVhWSVR6aHFSV3N2VHpoalF5dFZieTl3V0ZJcmRrY3dURk51TDFwWWVHeFllVWx2WXpZd1VGTm9aV3hrZDNaa2VtSTBTRmN6U1RjeGNFOHZNSGRJV1hGUFNYQTRkalF4U2xRMU1sUk9hbVkxYW5neU5HWnRSVGsyVjB4eVJ6Y3ZZbk52VFRabGFFTkhjRW80Y3pBdldsWXphemh4YmxSUFpGZ3hRalkyU0U5bllqUmlOVXRTWm5Sc05UUm1RemR2ZG5sMldscHdXSFEyU25rMGJ6TmFjV1ZrVDNaTlZHUnpiRkJWYUVRd2NteFhlSFpXVFVaMFV6QlFNVlZQYmxCMlYyczRORmhrWWpCRVNWaFhMMnRJYVUxVFRHVnROM0pOVFV0RWJYUTVTakJJYldkMFN5OHpRbWMzUjJoblQwZE1RMmRRVkRoaFpuQXhjR1JVUlhnME9EZzJibWQwUzBZeVl6bFBjSE5uVmtSaVQwdERTazlSWVd0cEt6Rldja1pwSzNkeWFVcHdaazVoTDI5eVUyaGpjbGN5T0RacVRGbHplWGxtV2t4c09GTkZkRzVOTmpWcU1WTk1TQ3QzV0ZaSE5tcGpNRVJaU1RrNE5rWjFha3RLYmxGTVZqQmpNVTF5ZHpkelR6VnVMMlozZDBSbWEyOXFPV2RtUkRSdmVtaDVSa0ZWVmsxeFFsSnNXWEpEWkRCdlZXNVNjbXRwZVVWNlQxQkdUa3hHZWxSNlZEVldiRUpZWkROUGJUaHZlbXRDZEU5UFpFUlFXbXRWT1dzNUwxQkRjRXhyU0dGeWJscFZaa2xvV0U5Mk1DODJTVk4yTUZOUFkzWnFMekZpT1hSNlptdE9OVWN6ZURkbFltUkphRE0wVjJaR05uUndSSEp5V1VzMlVGVndaQzgwWmtwVE0ySndXR0Z5ZEU5S1RpdFRVa1JDV0U5Mk1HdzJiVFpGZWxveGVqTTFiSGM1YXpOU1R6QXhWMDFHUWxVMFNEUXJNakZzVFdKaU9GaHpNSFpzZGxsV1NIQXpVRlZ4UzBOallVOUVWWE51WWs1TVUxSTFZMVJESzJSYUszQndWbVZzUTI1TFlURXhOMlZPVkU1UmExTldSbWxWTW5SUUsxRnlVMDlXZGxwYVlWVk1jWGQyZEZCRGFDOXFaRTFpTTFKT09UbFJUMnR2YW5ZNFRITlJVekJyTDA4M0szUkxaaXRPVFZRNU5rNVFNRlYyVEhacGJsSnRPVXB1TWpSM1ZuSmlSRU5pUjBsa1JqUjRWa0pPU2k5NFNsTmxObFZsYnk5Q2FpODVTUzgzUkhrd1VIWnlia3A1Tlc5d1UwbFNVbHBZTUdGUlZVRkJVSHBZTTJnelZVRkJRMEZSUVhnM1dVRkVMMkZ1UmtKRFRtUmhiVWxCUWtGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUkVGdGJXOWxTemxJZW1sQ05VazVSVUpZYm5nNFFVRkJRVUZCUVVGQlFVeENiVUZKV2t0dGVsZEpibmg1VDBGQlFVRkJSV3hHVkd0VGRWRnRRME1pTENKaGRIUmhZMmh0Wlc1MGN5STZXM3NpWm1sc1pXNWhiV1VpT2lKbU5qTmtZVGxoTmkxbFlXUTRMVFE1TVRRdFltWXlaUzFsTW1GaU16QTJabU5rWkdZNmMzUnlhVzVuT21obFlXeDBhR05sY25RdWRIaDBJaXdpZEhsd1pTSTZJbUkyTURSbE5qRTRMVGM0TjJRdE5HVmtOeTA0TXpreUxUbGpOakV4T1RWa016WTVaRHB6ZEhKcGJtYzZkR1Y0ZEM5dmNHVnVMV0YwZEdWemRHRjBhVzl1SWl3aVpHRjBZU0k2SW1Oa01HSmxOR1ppTFRZeE5qVXROR0ZoTlMxaU1EVm1MVGRsTW1VNE1UTTFNVGd3WkRwemRISnBibWM2WlhsS01scFlTbnBoVnpsMVNXcHZhV0ZJVWpCalNFMDJUSGs1ZWxreWFHeGlWMFYxWWpOQ2JHSnRSakJrUjFaNlpFZEdNR0ZYT1hWTWJVNTJZbE00ZVV4cVFYWmpNazV2V2xjeGFFeHRjSHBpTWpScFRFTkthMWxZVW1oSmFuQTNTVzFzYTBscWIybE9SR2h0VFhwc2JVNXFRWFJPUjBsNVdWTXdNRTFIUm10TVZHaHJXbXBCZEUxVVNtaE5WR1JvV2xkWmQwOVVXVE5QYms0d1kyMXNkVnA2YnpOT2JVNW9XbXBPYlU5VE1ERk9WR3Q0VEZSU2JGcHFSWFJaYW1NeFRta3dlRmt5U1RCT01rVXpUbTFTYkZwSFZXbE1RMG95V2xoS2VtRlhPWFZKYW05cFdtMUpORTlIVVhsYWFrMTBUVzFSTTFsVE1EQk9lbXhxVEZSck1VNUVSWFJOYlZWNFdtcFpNVTV0V21sYWFsWnNUMjVPTUdOdGJIVmFlbkIzV2toUmRHRkhWbWhpU0ZKdldUSldlV1JETVRKTmFUUjNTV2wzYVdSSWJIZGFVMGsyU1cxUk5Ga3lVbWhaZWtKcFRGZEpNbHB0U1hST1IwMHpUWGt4YVUxNlRUSk1WRTAxVFhwak5WcEhXVE5QUkdzeVRucHdlbVJJU25CaWJXTTJWVVZPVTBscGQybGtiVVp6WVZkU1IyTnRPWFJKYW05cFRWZFpOVTlYUm14Wk1rVjBXWHBaZDFwVE1EQk9lbGsxVEZkSk0wOUhXWFJOVjBreFRXMUZNRTV0VW1sYVIwWm9UMjVPTUdOdGJIVmFlbTk1VFVSSmVFeFVRVFJNVkVrd1ZrUkJNRTlxU1hsUGFrMHlUR3BCTWsxc2IybE1RMHB0WVVkc2VWWnRWbmxqTW14MlltbEpOa2xxVm14YVZGWnRUVzFaTVV4VVRUQk5hbEYwVGtkTmVWcHBNRFJOUkZFMVRGZEdhazU2WjNsUFZGRTFUbFJuZWsxVWNIcGtTRXB3WW0xak5rNUROSGRNYWtWcFRFTktiV0ZIYkhsUmJsWjFXa2Q0YkVscWNEZEpia3BzWXpJNU1XTnRUbXhXU0d4M1dsTkpOa2x0V1ROUFJGa3dXbTFSZUV4VWJHcE9hazEwVGtSRk0xbHBNRFJhYWtKclRGZE9hRTU2YUcxYVZFRjRXVmRPYWs5VWNIcGtTRXB3WW0xak5sRnVWblZhUjNoc1NXbDNhV1JJYkhkYVUwazJTV3BWTVU5WFdteE5WMGt3VEZSa2JWcFhWWFJPUjBreFRua3dOVmxYV21oTVZGRjNUa1JaZDFwWFJteE5WMUpzVG1wd2VtUklTbkJpYldNMldUSTVjMkpIVm1wa1IyeDJZbWxKYzBsdFZuVmtTRW8xU1dwd1ltVjVTbTFrVjNoelZsaEtjMGxxYjJsUFJFcHBXVmROZVU1WFdYUmFWMUV6VGtNd01FNHlTbXBNVjBVeVdrUkpkRTlYVlROWlZHUnJUbTFKZVZwcWJHcFBiazR3WTIxc2RWcDZjREZqYlRRMlpGaFdjRnBFY0dsWlZHUnBUakpOTkZwRE1XcE9WRUUxVEZSU2EwOVhVWFJaYlZVd1dsTXhiVTlVYkdsT2JWSnNUV3BzYkUxcVRXbE1RMHA1V2xoT2RtUllTbXBhVTBrMlpYbEtlVnBZVG5aa1dFcHFXbFpTTldOSFZXbFBhVWw0VDBSRk1FMVVaekpPYVRBMVdrUmplRXhVVVhwT01rVjBXVlJuTWxwVE1EVk9SR3Q0VG0xU2FVOUVaek5aYlVrMll6TlNlV0ZYTlc1UGJFSm9aRWRzYkdKdVVXbE1RMHBzWlVoU2JHSnVUbkJpTWpScFQyeDBOMGx1Vm5saVEwazJTV3BHYVUxWFRtdE9SMFpzVEZkWk1GbFVUWFJPUkUweVdta3dORTlFUlRGTVZHYzBUVmRSTTFsVVRtcE5lbWh0VDBSd2VtUklTbkJpYldNMllVaFNNR05FYjNaTU1taHpUbmsxZG1OdFkzWmFiV2h3WTJrNVZHUklTakZaTTFJeFkyMVdSVnBYV25CaWJXd3dZVmM1ZFV3elFtaGtSMnhzWW01UmRHSnRSakJoVnpsMVdWZDRjR1JJYTJsTVEwcHNaVWhTYkdKdVRuQmlNalJwVDJ4ME4wbHVWbmxpUTBrMlNXcEpkMDlIVlROWmVsRjVURlJhYkU1cVkzUk9SRVpzVDFNd05FOVVXbWxNVkVFeldrZFpNazFYVm14T1IxcHFXWHB3ZW1SSVNuQmliV00yV1RJNWExcFRTWE5KYmxwb1lraFdiRkV5T1d0YVYwWnBZa2RXUkdJeU5XcGFXRUl3U1dwd04wbHVVbXhsU0ZGcFQybEpkMDFYVlhwUFJHUnRXVk14YTFwRVJteE1WRkV5V1hwQmRFOVhXVFZaVXpGcldtcG9hbHBxWXpKWmVtTjRUbXBSTm1NelVubGhWelZ1VDJ4Q2FHUkhiR3hpYmxGblZHMUdNR0ZYT1hWWlYzaHdaRWhyYVV4RFNtcGlNbEp3WW0xamFVOXNkRGRKYms0MVl6TlNiR0pUU1RaSmFrRjNUVmRKZDA5SFdUUk1WMVUwV2tSbmRFNUhUbTFhYVRGb1QxUlpNa3hYVlRGYVZGazFUMFJHYTFsdFZtbFpWSEI2WkVoS2NHSnRZelprV0VwMVQyMXNlbUo2Y0hwa1IxRTJZVmhPZGs5cVRYaE9hbGxwVEVOS2FtSXlVbXhKYW05cFdtcE9hazU2VlRGWlZFMTBUa1JyTVU1VE1EQk9WR00wVEZSb2JWcHFaM1JQUjFGNlRYcE5NVmw2V1RWT2JWVTBUMjVPTUdOdGJIVmFlbkJVVW5sS09WaFlNVGxZV0RGa1RFTktjRnBIVm5Wa1IyeHRZVmRXZVVscWNHSmxlVXB3V2tOSk5rbHFRVEJhYWxKcFRXMVZNVXhVVlhwWlYxbDBUa2RGTWsxRE1XaE9WR2MxVEZSb2JVNVVhekphUkVKcVRsUnJOVnBxY0hwa1NFcHdZbTFqTmxWR1FrOUphWGRwWkVoc2QxcFRTVFpsZVVwcVlqSlNjR0p0WTJsUGJIUTNTVzVPTldNelVteGlVMGsyU1cxVk5WbFVXbXBOZW1jeVRGZEplVmxxUVhST1JFSm9UWGt4YUU1WFJURk1WR3hvV2tkRk5GcFhUbTFOUkVVeFRsUndlbVJJU25CaWJXTTJZVWhTTUdORWIzWk1NMUpzWTIweGNHSnRPWE5pTW1RMVRHMW9jMDU1TlhaamJXTjJVVEk1YTFwV1RqVmpNMUpzWWxNNU1rMXBNSGROYWtGNlNXbDNhVmt5T1d0YVUwazJTV3BrYVZwWFZUQk5SR2MxVEZkU2FscEVTWFJPUkdScFdYa3hhVTFxWXpCTVZFRTBXVzFSTWxwRWFHMU9la0pxV1dwd2VtUklTbkJpYldNMlZVWkNUMGxwZDJsYVIyeDZZMGQ0YUdWVFNUWkpiVTE0V20xVmQwMTZZM3BNVkZwcVdrUkpkRTVIV21oT1V6QTBUbFJKTlV4VWJHbE5iVmsxVG5wck1VNVVXbWxPVkhCNlpFaEtjR0p0WXpaVlIwWjZZek5DZG1OdVVXZFVibFowV1cxV2VVbHVNV1JtVTNkcFpHMUdjMlJYVldsUGFVcG9UVlJqTkU1dFRUVk9RekI1V1hwU2JVeFVVWHBOUkdOMFdWZEdiVTlUTUhoYWFtaHNUMVJSTTAxdFdtbFBWMWsyWXpOU2VXRlhOVzVQYTFVelQwUk5lRTFVWXpOU2VVbzVURWh6YVdGWFVXbFBhVWt5VGxSQ2JFOVhSbXBOVXpCNVQwUkNiRXhVVVRWTmFtZDBUMFJGZWxscE1XaFBWRlUxVFdwQmQxbDZhekZOUkZVMll6TlNlV0ZYTlc1UGF6VlRVMVZOZEZKcmJFOUphWGRwWkcxR2MyUlhWV2xQYVVreFRsZE5NMWw2UlRST2VUQjRXVlJaTTB4VVVtbE9iVkYwV1cxRmVFNURNREpOUjAweVRrZGFhRTFxWTNsT1IxazJZek5TZVdGWE5XNVBiRTAxVFVSck5FOVVaelZYYVVvNVdGTjNhV0p0Um5SYVUwazJWek56YVdSSFZqUmtRMGsyU1cxWk0wNTZWWGxaYWxFd1RGZFNhMXBxUlhST1IwMDFXa013TlU1cVRtcE1WMUY1VGtSb2FGa3lXVEphUjFFelRXcHdlbVJJU25CaWJXTTJWa2RHZFVsRlRtOWFWelJuVVRKb2JHSnBTamxZVTNkcFdqSldkVnBIVm5sSmFtOXBXa1JqZUZwdFRtbE9Na1YwV2xkRk0xbDVNREJaZW1ONlRGZEpNVTFxVVhSWk1sa3hUbnBqTTAxSFRUSk9Na2sxVDI1T01HTnRiSFZhZW5CdFdsY3hhR0pIVldsTVEwcHBZVmhLTUdGRlVtaGtSMVZwVDJsSk5WcFhTVEpOUkVadFdXa3hhMDFVVFhwTVZGRjZXbTFaZEZscVdtMWFRekZzVFcxSmVscHFTVEphUkZFeFdXcEpObU16VW5saFZ6VnVUMnBGTlU5VVFYUk5SRVYwVFZSVmFXWllNSE5sZVVwdFpGZDRjMVpZU25OSmFtOXBXVzFaTTAxcVVUVmFWRWwwVFRKUmVWbFRNREJOVkVWNVRGZEZNRmw2WTNSYVIwa3dUMFJDYTA1NlVYaGFWMXB0VDI1T01HTnRiSFZhZW5BeFkyMDBObVJZVm5CYVJHOHpUbnBKTlU5VVkzZGFVekZvV1dwSk1reFVVVEpQVjFsMFdXcE9iRTVUTUhwT2JVVXdUVzFXYWsxcVVYaE9SRmxwVEVOS2VWcFlUblprV0VwcVdsTkpObVY1U25sYVdFNTJaRmhLYWxwV1VqVmpSMVZwVDJsS2EwMHlUWGRhYlVadFRYa3hhVTVFUm1oTVZGRjZXWHBCZEU5WFZYcE9VekIzVFhwQk5FNVhVWGRPUjFWNVdrZFJObU16VW5saFZ6VnVUMnM1YVdNeVZubGtiVVl3WVZjNWRVbHBkMmxqTTBKc1dUSnNkRnBYTkdsUGJuTnBaRWhzZDFwVFNUWkpiVTVvV21wak5FMXRUWGRNVjFKcVRtMVpkRTVFVW1oT1F6RnBXV3BaTkV4VVZUQlBSR3N6VFZkS2FrMUViR3RPYW5CNlpFaEtjR0p0WXpaVk0wSnNXVEpzZEZwWE5HbE1RMHA1V2xkYWJHTnRWblZaTWxWcFQybEtiVTVIVFRKT1YxVjVUWGt4YWs1dFdtdE1WRkY0VG5wbmRFOVVhelJPVXpGclRVUm9hMWt5Um10Tk1sVTBUa1JCTm1NelVubGhWelZ1VDI1V2VXSnFjREZrVjJ4clQycEJlVTU2Vm1sYWJVWnRURlJSTkZwdFNYUk9SRkpzVFVNd05FMUhUbXRNVkd4cVRsUkJNRnBxWjNkYVZGcG9XbE5LT1V4RFNuZGFXRXB0WWpOS2RGcFlTV2xQYkhRM1NXNVNOV05IVldsUGFVcHRXVEpLYVU5RVZtcGFVekIzV1hwRmVFeFVVWGxhUjAxMFQwUmFhRTVwTURSYVJFcHJUbGRWTlZsVWEzZGFha1UyWXpOU2VXRlhOVzVQYkVKNVdWZE9NR0ZZVW5CaU1qVnNZMmxKYzBsdVNteGFiVlo1V2xjMWFscFRTVFpKYlVwclRVZFJkMDlFVVRSTVZFNXBXVmROZEU1RVFtbFplVEExVFVkRk1reFVVWGxOVjFGNVRsUlJNVTFFWXpCYWFuQjZaRWhLY0dKdFl6WmtXRXAxVDI1V01XRlhVVFpOTWxKcFdtMVpkMXBIVlhSYVJGSm9Ua013TUZwVVJtdE1WR3MwV1cxWmRGbFhXVE5PUkVrMFdXcG9hRTFFVW1sSmJqQnpaWGxLY0ZwRFNUWkphbGt4V1cxV2JGcFVUWGxNVjBwcldWZEpkRTVIV1hsT1F6QTBUV3BuZUV4VVRUSlpiVkpwV21wc2JGbFVhekJhVkhCNlpFaEtjR0p0WXpaVVJXaFJTV2wzYVdSSWJIZGFVMGsyU1cxSk5FNXRVVEphVkZrelRGUnNhazFVVlhST1Ixa3dUbE14YUU1cWF6Qk1WR1JzVFdwS2FFNTZVbXRhYWtVeVRXcHdlbVJJU25CaWJXTTJWRE5LYmxsWE5YQmxiVVl3WVZjNWRVbHBkMmxqYlZadFdsaEtiR0p0VG14SmFtOXBUMGRSTWs1cVp6Vk9SR2QwVFVST2ExbFRNREJQUjBrelRGZEdhMDFFVFhSUFZHTXlXbXBOZUZwdFZtbE5SMVpxVDI1T01HTnRiSFZhZW5BeFkyMDBObVJZVm5CYVJIQnRXVlJKZWsxcWFHaGFhVEF3VDBSbmVVeFVVbXhaVjBWMFQwZE5lVTlETURKT2JWSm9XV3BSTWs5VVZYZGFha1ZwWmxONE4wbHRiR3RKYW05cFdWZE5NVTFxUlhkT2VrMTBUa2RhYlU1NU1EQmFWRkYzVEZSck0xbDZTWFJhYW1zeFRWZGFiVTVVUVRSUFZFbDRUMjVPTUdOdGJIVmFlbkJDVkVOSmMwbHVValZqUjFWcFQybEplazFVVlhoUFYwVXhUVk13ZDA1NlFUQk1WRkY2VFhwRmRGbFhSVEpaZVRCNVRrUkZNazlFUlROYVZGcHFXbFJaTm1NelVubGhWelZ1VDJzNWVWb3lSblZoV0hCb1pFZHNkbUpwU1hOSmJrcHNXbTFXZVZwWE5XcGFVMGsyU1dwYWFrNHlWbXBOYWtFeFRGZEpORTE2VFhST1JGRTBUbE13TlU1VVozcE1WRWt6V2xSYWFFNHlUVFJhYWxKdFRWUndlbVJJU25CaWJXTTJaRmhLZFU5dVZqRmhWMUUyVDBSTk5WbFVaR3BPVkZGMFRtMUpNRTFETURCTlYwNXBURmRKZUUxSFVYUlBWRWsxVGxkUk0xcFVZekZhYW1NelNXNHhaRXhEU25CYVIxWjFaRWRzYldGWFZubEphbkJpWlhsS2NGcERTVFpKYlVwc1RsZFdhMXBYU1hoTVZGSnNUMFJyZEU1RVZUVk5RekEwVG5wc2JVeFVVWGhhUjBrMVRXMUpNazE2Vm1sT1JIQjZaRWhLY0dKdFl6WlJWVTVVVkdsSmMwbHVValZqUjFWcFQyNXphVmt5T1d0aFZ6VnVTV3B3WW1WNVNucGxXRTR3V2xjd2FVOXBTbWxOYlVwdFRrUnJlVTFwTURCYVZFRXlURlJSZVUxRVNYUlpha0V6VDBNd2QxcFVUWGhhVkVWNVQwZFZORmw2U1Raak0xSjVZVmMxYms5dGFEQmtTRUUyVEhrNU1GcFlTblJoVnpWMllrYzVibVZUTlc5aVJHTjFZak5LYmt3d1RuWmFSMVpVWlZoT01GcFhNSFprYWtsMFRVUkpkMDE1U1hOSmJVNTJXa2RWYVU5cFNtbFBWRXBwVDBSRk1rMXBNV2hPUkdNeVRGUlNhazlFUVhSUFJFcG9XWGt3TkU1RVNYZE5SMVY2V1hwWk1FMTZWVFpqTTFKNVlWYzFiazlyUmtSVk1EUnBURU5LYTJGWVRuZGlSMFkxU1dwdmFVNVVRWGhPVkVwcFdtcEZkRTR5V21sTlV6QXdXa1JPYUV4VWF6Tk9NazEwVDBkSk1rNUVhM2hhUjBadFRVUlZlazl1VGpCamJXeDFXbnB3UWxreVRteGpNMDV3WWpJMFoxTlZVV2xtVmpFNVRFTktNbGxYZURGYVUwazJTV3BSZUUxRVJtMU9SMWt5VEZSS2JGbFVXWFJPUkd4c1dXa3hhRmxxVFRCTVZFSnFUbFJvYWs0eVZYbFpiVmt3V21wd2VtUklTbkJpYldNMlRWUkplazVFVlRKT2VtYzFTVzR4WkV4RFNtcFpXRkpzV2pJNWVXVlRTVFpYTTNOcFdUSTVhMkZYTlc1SmFuQmlaWGxLZW1WWVRqQmFWekJwVDJsSk5GbHFXWGRhUkVreVdWTXhiVTFVWnpSTVZGSnBXbXBaZEZscVNtaE5RekF6VG0xUmVrMUhWVEpPUkVsM1dUSlZObU16VW5saFZ6VnVUMjFvTUdSSVFUWk1lVGw2WW0wNWRGcFhVWFZoVnpWdFluazVlbGt6VVdsTVEwcHFZakpTYkVscWIybE9WR3hxV2tSRk0wNVVXWFJaTWtac1RXa3dNRnBxU21sTVYwbDRUVlJCZEU5WFJtbGFWRUY0VFVkV2FrMHlSVFJQYms0d1kyMXNkVnA2YnpST1JFRXhUWHByZDAxRVdXbE1RMHByWVZoT2QySkhSalZKYW05cFQwZEZOVTFxUVRCTmVtTjBUVEpGZUZwcE1EQlBSMGw2VEZkRk5GbFVWWFJaVkdzMVRYcHJOVTFYVFhkWmVsWm9UMjVPTUdOdGJIVmFlbkJFVkRGYVNsSkRNSGhQVTBvNVdGZ3haRXhEU21waU1sSnNTV3B3TjBsdFRuWmFSMngxV25sSk5sY3pjMmxqTTJ4NlpFZFdkRWxxYjJsT2FscHBXVmRWTUZsNlNYUk9hazEzV2tNd01GbFVWVEpNVkd4c1dUSk5kRTlVWnpOT2VteHNUMWRTYWs1RVZtaFBiazR3WTIxc2RWcDZjRzlrU0ZKM1QyazRkbUpIT1hCaWJVMTFZak5LYmtscGQybFpNamxyV2xOSk5rbHFhekJaVkUweVQxUlNiVXhYU214T2VtTjBUa2ROZVZscE1EVk9SRkpvVEZSWk5FNUhSbXRaZWtsNFdrZE5NMDE2Y0hwa1NFcHdZbTFqTms5VVVURk5la1YwVFZOSmMwbHRVbkJqTTBKeldWaHJhVTlwU1RKTlZHUm9UVlJLYVZsVE1ERlBSR3hyVEZSU2JVNTZXWFJQVkVKb1dYa3hhVTFxWkdsTlYxVjRUMVJqTWsxRVdUWmpNMUo1WVZjMWJrOXNUa0pWYkUxMFVUSTVWMHhVU1dkTFJVNVFWbXRzUlV4VVJUVkxVMEpUVkd0RloyTkhSblZhVjNkblRGTkNVMXBZVG5kaFdFcG9aRWM1ZVdWVFFucGpSMVpxWVZjeGJHSnBRbWxsVTBKUFVWVkZaMlF5YkRCaFEwSjNZMjA1YVZwVFFtdGFXRkpzV1ROU2NHSXlOR2xtVmpFNVRFTktNbGxYZURGYVZVNTJXa2RXYUZsdGVHeFJNamwxV1RKV2QyUkRTVFpsZVVwcVlqSlNjR0p0WTJsUGJIUTNTVzVPTldNelVteGlVMGsyU1dwUmVWcHRXWGRaTWtrd1RGUlZlbGxVWTNST1JHaHNUVU13TkZwVVRUUk1WMFpwVDFST2FWbFVUbWxOYlZFeVdsUndlbVJJU25CaWJXTTJZVWhTTUdORWIzWk1NMDUxWWpJeGJGcEROWEJpYlZwMlRETk9hbVJEU1hOSmJVNTJXa2RWYVU5cFNUSk9WRkpyVFZSWk5FMURNSGhhVkVrelRGUlJNRTVxUlhSWlZGWm9UVk13TkUxWFJtaFpha0UxVFRKUk5VNVVRVFpqTTFKNVlWYzFiazlxU1RKTlJFMDBUbFJCZDA5VFNYTkpiVkp3WXpOQ2MxbFlhMmxQYVVrMVdXcEZOVTlYV20xWmVURnRXa1JzYTB4VVVYZE5iVlYwVDBSYWJGcHBNVzFPVjBWNlRXcGpNVTFIU1hwUFIwMDJZek5TZVdGWE5XNVBhelZzV2pKR01HRllXbXhKYmpGa1psTjNhVnBYV20xYVYwNHdZVmhhYkZKSFJqQmFWbEp3WWxkVmFVOXBTVEZPTWxKc1RtcG5ORnBwTVcxT1JGa3pURlJTYUZsVWEzUlpWR3MxVG1rd01rNXFWVFJOZWtreVdWUkZlRnBxWXpaak0xSjVZVmMxYms5cVNYZE5ha0YwVFVScmRFMXFhRlZOUkZrMlRWUlZOazFFUW1GSmFYZHBZek5TYUdSSVZucEphbTlwV1dwa2EwNXRXVFZhVjAxMFRVUkZNbHBUTURCT1YwWnJURmRKZDA5SFZYUk9hbWN6VFVkTmQxcFVWbTFaYWtVelQyNU9NR050YkhWYWVuQnRZVmMxYUdKRFNqbG1VM2czU1cxYU1XSkhlRlpqYlhkcFQybEpNMDVVYXpSYVZFRjRXWGt3ZWxwcVNUQk1WRkUwV1cxSmRFOUVSWHBOVXpGcFQwUnJORTU2VG1oYWFsRXlXbFJWTm1NelVubGhWelZ1VDI1V2VXSnFjREZrVjJ4clQycEJlVTU2Vm1sYWJVWnRURlJSTkZwdFNYUk9SRkpzVFVNd05FMUhUbXRNVkd4cVRsUkJNRnBxWjNkYVZGcG9XbE5KYzBsdVNteGpNamt4WTIxT2JFbHFjRGRKYmtwc1l6STVNV050VG14V1NHeDNXbE5KTmtscVdtcE5WRTB4VG5wV2JFeFVhM2xPVkZGMFRrUm5ORmw1TURSTmVtZDNURlJSZVU0eVdYZE5ha0pzV1ZSUk5VMXFjSHBrU0Vwd1ltMWpObFV6UW14Wk1teDBXbGMwYVV4RFNqQmxXRUpzU1dwd04wbHRUblphUjJ4MVdubEpObGN6YzJsak0yeDZaRWRXZEVscWIybE5la2w2VDBkV2FsbHFRWFJOVjFVMVRWTXdNRTU2U1RSTVYwa3lXWHBWZEU1NlFUVlBSRkp0VFVSWk5WcHFUWGRQYms0d1kyMXNkVnA2Y0c5a1NGSjNUMms0ZG1NeU5YWmlWMVpyVEcxc2RWcHRPSFpqTWs0d1NXbDNhVmt5T1d0YVUwazJTV3BHYlUxVVp6Tk9WRmt5VEZSRk1rMUVXWFJPUkZaclRXa3hhRnBFYUcxTVYwVTBUVmRSZDFwcVozaFphbU16VGtSd2VtUklTbkJpYldNMlRXcFZORTVVUVhkTlJFRjRTV2wzYVZwSGJIcGpSM2hvWlZOSk5rbHFUWGxPUjAxM1dWZFJNVXhVVFhkWlZFRjBUa2RSTWs5RE1XaE9SR3QzVEZSWmVGcHFSbXROTWxWNFRqSkpNMXBFY0hwa1NFcHdZbTFqTmxSdFJucGlNMEp2V1ZoS05XSnRaR3haVjNkbll6TmthRmxwU2psWVdEQnpTVzFPZG1KSGVHeFpNMUp3WWpJMGFVOXVjMmxaTWpsellrZFdhbVJIVm10U1IwWXdXbFpTY0dKWFZXbFBhVXBwV20xS2FGcFVhM2haZVRBd1RrUkZlRXhVVVhsWmJVbDBXV3ByTkU5RE1XaE5Na1V4V21wTmVrNUhTbWhPZWtVMll6TlNlV0ZYTlc1UGFrbDNUV3BCZEUxRWEzUk5hbVJWVFVSWk5rMVVWVFpOUkVKaFNXNHhPV1pUZURkSmJWb3hZa2Q0Vm1OdGQybFBhVWw0VFRKSmQxcEhUVEpQUXpCNVRWZFdha3hVVVhkWmVtTjBUMWRLYWxsNU1ESlpWRkY2VG0xYWJGbHRWWGxQVjFVMll6TlNlV0ZYTlc1UGJsWjVZbXB3TVdSWGJHdFBhazVyV1cxYWJVMUhVbXhNVjFFd1dWUlJkRTVIVlhoYVF6QTFUMGRLYlV4WFJtMU9lbEY1VDBkSk5GbFVRVEJaYVVselNXNUtiR015T1RGamJVNXNTV3B3TjBsdVNteGpNamt4WTIxT2JGWkliSGRhVTBrMlNXcG9hRmxVUm10YVJGa3lURmRSZWxwcVZYUk9SMGw0VFhrd05VOUVaR3BNVkdkNFdsUk5NazVVVVRCYVIwVjRUbXB3ZW1SSVNuQmliV00yVlVoS2FGa3pVbkJrUjJ4MlltMVdlVWxwZDJsaWJVWjBXbE5KTmxjemMybGtSMVkwWkVOSk5rbHFaR3RQUkZKb1QwUmplVXhVV21sWlZFVjBUa1JKTUU5VE1XbE9Na1V5VEZkRk0wMVVSWGxPVkZwcVdsZFplVTlFY0hwa1NFcHdZbTFqTmxKSVNXZFVWMnhxWVVkR2JHSkRRazFoVnpCcFpsWXdjMGx1UmpGWlYzaHdXbTFzYWxsWVVuQmlNalJwVDJ4ME4wbHRUblphUjFWcFQyNXphVmt5T1d0aFZ6VnVTV3B3WW1WNVNucGxXRTR3V2xjd2FVOXBTVEJPVkZVeFRXcG9iVmw1TURWT1IwVTFURlJTYTA5SFJYUlpWRVY0VGxNeGExbFVXWHBQVkU1cVRrUnJNMXBxVlRaak0xSjVZVmMxYms5dGFEQmtTRUUyVEhrNU1GcFlTblJoVnpWMllrYzVibVZUTlc5aVJHTjFZak5LYmt3d1RuWmFSMVpVWlZoT01GcFhNSFprYWtsMFRVUkpkMDE1U1hOSmJVNTJXa2RWYVU5cFNtMU9hbFpzV1RKYWJWcFRNREZOUkZKclRGUlNiRTVYVVhSWmFrNXJUbE13TVZsNlRYZE5la1V4V2xSamVVNUhVVFpqTTFKNVlWYzFiazlyTVVSVmFVbHpTVzFTY0dNelFuTlpXR3RwVDJsS2JVOUhUbTFQVkVWNFRta3dNMDU2V21sTVZGRTFUV3BqZEU5SFJYZFpVekF3VGxkV2FVMXFSbWxhUkVKcVRrZEpObU16VW5saFZ6VnVUMnhDZVZsWFRqQmhXRkp3WWpJMWJHTnBRazVhVjFKd1dUSkdlVnBUUW5Wa1Z6RnBXbGhKYVdaV01UbE1RMHB3V2tkV2RXUkhiRzFoVjFaNVNXcHdZbVY1U25CYVEwazJTVzFhYTFwdFZYaFpNa1pzVEZSck1WbFhUWFJPUjFab1drTXhhRTU2VFRCTVZGWnBXbXByTVZsNmJHaE5ha0pxV2tSd2VtUklTbkJpYldNMlZGVk9VMGxwZDJsa2JVWnpaRmRWYVU5cFNUQk5la1V4V2xSV2JWcERNRFJhYWtWNlRGUlJkMXBVWTNSWlYwVjNUVU14YTA1SFVURmFWMFp0V1dwTmQwNXRUVFpqTTFKNVlWYzFiazlxUlhsTmVsRXhUbWxLT1ZoVGQybGhXRTU2WkZkV2VVbHFjRGRKYmxJMVkwZFZhVTlwU21wTmFtZDZUbnBCZDA1VE1XbE5SRlUwVEZSU2FscHFZM1JQVkZFd1RWTXhiVTB5U20xYWFsRXdUbnBuTWxscVdUWmpNMUo1WVZjMWJrOXJPWGxhTWtaMVlWaHdhR1JIYkhaaWFVbHpTVzVLYkZwdFZubGFWelZxV2xOSk5rbHFVVFZhYWxGNVdXcFdiRXhVVG1wTlIwVjBUa1JKTkU1NU1EVk5WMFV3VEZkYWFrNUVSWGhaVjBVd1dUSlZlazVFY0hwa1NFcHdZbTFqTm1SWVNuVlBibFl4WVZkUk5sbHRUVE5OUkZreFdsZFZkRTVFU21oWlV6QXdUbnBPYUV4WFJUSk5WRkYwV1ZkYWEwOUhSVE5aYWsxM1dXcEdiRWx1TVRsWVdERTVURWh6YVZwdVZuTmlSbFo1WWtOSk5rbHRSVEJPVjFFelRXMVNha3hVVlRKT2VsVjBUa2RPYVZwcE1EVk9SR2N5VEZSS2JVMUVTVEJOYlZFMFRrZFdhRTFxY0hwa1NFcHdZbTFqTm1SWVNuVlBibFl4WVZkUk5sbHRUVE5OUkZreFdsZFZkRTVFU21oWlV6QXdUbnBPYUV4WFJUSk5WRkYwV1ZkYWEwOUhSVE5aYWsxM1dXcEdiRWxwZDJsamJWWjZZak5XZVZreVZXbFBibk5wWTIxV2VtSXpWbmxaTWxaVlpWaENiRWxxYjJsYVZFSnJUbTFKTUZwdFJYUmFWMDVxV1drd01FNUhSVEpNVjBadFdsUkZkRnBVVG1sT1JFcG9UMVJzYlUxNlNURlBiazR3WTIxc2RWcDZjRkJqYldSb1ltMXNObGxZVW5CaU1qUnBURU5LZFZsWE1XeEphbTlwV1cxS2JVMUVWVEJhVjFWMFQxUkJNRTlETURCUFJHdDZURmRKTkU5WFRYUlBSMGt6VG5wck1VNTZZM2ROZWtFMFQyNU9NR050YkhWYWVuQk9ZVmMxY0dNelVubGxVMEoyV21sQ1NWcFhSbk5rUjJkblMwVXhVRk5EYTJsTVEwb3daVmhDYkVscWNHSmxlVXBxWWpKU2NHSnRZMmxQYkhRM1NXNU9OV016VW14aVUwazJTV3BGZDAxcVJUQmFha2t3VEZSUmVVMUVaM1JPUjFFd1RXa3hhVTE2Ykd4TVZGRXdUbGRXYkUxVVVtbFpNa3ByVDBSd2VtUklTbkJpYldNMllVaFNNR05FYjNaTU0xSnNZMjB4Y0dKdE9YTmlNbVExVEcxb2MwNTVOWFpqYldOMlVUSTVhMXBXVGpWak0xSnNZbE01ZG1OdFpHaGliV3cyV1ZoU2NHSXlOSFJrU0d4M1dsTkpjMGx0VG5aYVIxVnBUMmxLYkU5RVdtbGFWMUV3VDBNd2VVNUVXWGRNVkZKdFRYcE5kRmxYVW1oUFF6RnNXbTFOZDFscVNUSk5WRlpwV1ZSUk5tTXpVbmxoVnpWdVQyMWtkbVJ1VVdsTVEwcHJZVmhPZDJKSFJqVkphbTlwVG1wck1GcFhTbTFhVkZsMFQwUlNhazU1TURCT1ZHYzFURmRGTkUxSFJYUlBWMUYzV1ZkUk5FMUVRVEZQUkVFMVQyNU9NR050YkhWYWVuQklZak5hYkdOdE5YUmFWelV3U1c0eFpHWldNSE5KYlU1MlltNVNhRmt6VVdsUGJIUTNTVzVTYkdKSFZtcGlNakJwVDJ4ME4wbHVUalZqTTFKc1lsTkpOa2xxWjNoTmFrSnJUakpaTVV4VWJHdE9hbWQwVGtSQ2FVNURNV2xaZWtGNFRGUkZNRnBFUW10WlYwcHRUMWRXYWsxcWNIcGtTRXB3WW0xak5tUllTbk5KYVhkcFpHMUdjMlJYVldsUGFVbDRUVlJaTWxsdFNYZE9hVEF3VG1wRmVVeFVVVFJaYW1OMFdWZFJkMDVETVdsWmVsVXpXbXBKZDA1NlNtdFBWRlUyWXpOU2VXRlhOVzVQYldnd1pFaENlazlwT0haa00yUXpURzB4ZG1GRE5XNWlNMWwxWXpKamFXWlRlRGRKYms0MVl6TlNiR0pUU1RaSmFscHRXbXBOZDA5VVJtMU1WR3N3VFhwRmRFNUhSWHBhYVRGb1dXcGthMHhVVlhwWmVsVjVUbTFSZUU1RWEzbE5hbkI2WkVoS2NHSnRZelpqUjJoMlltMVZhVXhEU2pKWlYzZ3hXbE5KTmtsdFJYaFBWRWt3VDFkVmVVeFVhekJOZWsxMFRrUkZOVTVUTURST1IwWnBURmRTYUZscVRYbFBSMVV5V21wak1scEVjSHBrU0Vwd1ltMWpOa3Q2V1RGT2FrMTVUbFJyZVUxcVFXbG1WakJ6U1cxR2ExcElTbXhqTTAxcFQyNXphV1JJYkhkYVUwazJTVzFLYTAxcVRUQk9WR3MwVEZSbmVWcFVaM1JPUkVKb1RsTXdORmxxUW14TVZGcHNUa1JqTVU5VVRtaFplbWN6V21wd2VtUklTbkJpYldNMlkwZG9OV015YkdwWlYzZHBURU5LTVdNeVZXbFBhVWt4VFZSUk5FNUVUWGxQUXpGc1drUmpNVXhVVVRST1ZFMTBUMFJHYUU1cE1EUk5iVVY2V21wU2EwMVVXbXhQUkVVMll6TlNlV0ZYTlc1UGJtUjJZMjF6YVV4RFNqQmFXR2d3U1dwdmFVMVVUVFJQVjAxNldWUkZkRnBxWXpWWlV6QXdXV3BzYkV4WFNURlpla2wwVGtSck1rMVhUbXhPYWxwcFdYcFZNRTl1VGpCamJXeDFXbnB3VG1GWE5YQmpNMUo1WlZOQ2RscHBRa2xhVjBaelpFZG5jMGxFUlRKSlJVNTJZa2Q0YkZveVZXZFZiVGxvV2tOM1oxRXlPWE5pUjFadVdsTkNkbHBwUWs1YVYxSndXVEpzZFZwVFFrTmtWMnh6V2tkc2RWcDVkMmRWTW14MVdqSkdkMkl6U214SlJFVXlUMVJuTVU1RFNqbG1WakU1WmxONE4wbHRXakZpUjNoV1kyMTNhVTlwU1RSYVZHTTFXbTFOTUU1NU1XcE9hbFYzVEZSUk5GcHRWWFJQVkZKdFdrTXdNRTVxUm14T1ZGWnFXVEpWTlUxcVVUWmpNMUo1WVZjMWJrOXVWbmxpYW5BeFpGZHNhMDl0V21oTmFrMTVUMGRHYlV4VVVUUlBSRWwwVGtkV2FGbFRNRFJaZWtrMFRGUlpNbHBIUm1sT1JGazFUbFJDYlUxVFNYTkpia3BzWXpJNU1XTnRUbXhKYW5BM1NXNUtiR015T1RGamJVNXNWa2hzZDFwVFNUWkphazE2V1dwS2FVNUVVVE5NVkVGNldUSlJkRTVFU21wT1V6RnBUMFJPYUV4WFVtaE9SRlV6VGtSUmVGbHRXWHBOYW5CNlpFaEtjR0p0WXpaVU0wcHVXVmMxY0dWdFJqQmhWemwxU1dsM2FXSnRSblJhVTBrMlNXcFNhRmw2UlRCUFIxVjNURlJTYUU1dFRYUk9SRkV5V1ZNd05FNXFVbXRNVkU1c1dXMWFiRTlVV21oTmFteHBXbXB3ZW1SSVNuQmliV00yVkZkR2FsVnRiREJaTW1od1dsTkNUbHBYVW5CWk1rWnpTVVZPYzJGWE5YQlplVWx6U1c1U05XTkhWV2xQYkhRM1NXMU9kbHBIYkhWYWVVazJWek56YVdNemJIcGtSMVowU1dwdmFWcFVXWGxOYW1ocVRYcFZkRmxxWkdwT1V6QXdXVEpWZUV4WFNtdGFWR04wVFdwYWJGbDZTVFZOUkd4cVRVZEdhRTl1VGpCamJXeDFXbnB3YjJSSVVuZFBhVGgyWkVkV2VXSlhiSFZpTW5oMldqTnJkV0ZIZHpOTWJUbDVXbms1UkdJeVVteFZNMng2WkVkV2RFd3lPWGxhTWtaMVlWaHdhR1JIYkhaaWFURXdaVmhDYkVscGQybFpNamxyV2xOSk5rbHFaekJQVkVFMFRVUkJlVXhYVlhwTlZHTjBUa1JSTWxsNU1XbE5SRVUwVEZSU2FVMXFRbTFaZW14b1dsZE5kMXBxY0hwa1NFcHdZbTFqTm1OSVNuWmthVWx6U1cxU2NHTXpRbk5aV0d0cFQybEpNVmx0VG1oWlYwbDNUbE13ZDFwVVFtMU1WRkY0V20xVmRFOVVVVE5OZVRBMFRqSldiVTFVVlRKUFZHZDNXVmRKTm1NelVubGhWelZ1VDJ0b2JGbFhlREJoUjA1b1kyMVZaMVZJU25aa2JXeHJXbGhKYVdaV01ITkpibEpzWlVoUmFVOXBTbXBOUjBrMFdsUk5NMXBwTUhwUFJGbDZURlJSTUU1dFNYUlphbXhyVGtNeGJFNXFiR3RaYlUweFdYcEthVmxxV1Raak0xSjVZVmMxYms5cmVIQlpNbFoxWXpKV2EwbEZhR3haVjNnd1lVZE9hR050VldkVlNFcDJaRzFzYTFwWVNXbG1WakJ6U1cxT2RtSnVVbWhaTTFGcFQyeDBOMGx1VW14aVIxWnFZakl3YVU5c2REZEpiazQxWXpOU2JHSlRTVFpKYlZsNVRVZEpNRTlIVW1wTVYwbDVXVzFSZEU1SFZtMVphVEEwVFRKWk5FeFVWWGhhVjAwMFRrUkplRTFYUlhoTlZIQjZaRWhLY0dKdFl6WmtXRXB6U1dsM2FXUnRSbk5rVjFWcFQybEpNMDU2UVhsT2FsWnRUVk13TkU1dFZtdE1WRkpyVG1wWmRFOUVWWGhhUXpGcFQwUkZNMDVxVFRKTlZFMHpUbnBOTm1NelVubGhWelZ1VDIxb01HUklRbnBQYVRoMlpETmtNMHh0TVdoWk0wcHdaRWRPYjJGWFZtcGlSMngxWVZkTmRWa3lPWFJNYms1dVNXNHdjMlY1U25wbFdFNHdXbGN3YVU5cFNtcE5la3ByV1hwRk5FMVRNRFJPZW14clRGUlJORTR5V1hSWlZFNXRUVU13TTA5VVRYZE9SR1JyV1hwbmVVOUhVVFpqTTFKNVlWYzFiazl1UW05aU1qVnNTV2wzYVdSdFJuTmtWMVZwVDJsS2JGcEVUbTFOUjAweVRsTXdNRnBYVW1wTVZGSnJUbXByZEZscVVteE5hVEF5V20xUk1rOVVTWGhhUjFVelQxUk5ObU16VW5saFZ6VnVUMmx6TWs1VVdYaE5hazB3VGxSWk0wbHVNV1JNUTBwb1drZFNlVnBZVG5wSmFuQTNTVzVTTldOSFZXbFBhVWt3VFRKWmVscHRVWGRhUXpBeVRrUkpNRXhVVVRKT1ZHZDBUMGRXYTFwRE1XMVpla3BzVFRKR2JFNUVVbTFaYlZVMll6TlNlV0ZYTlc1UGJrSnZaVmhPY0ZreVJuTkphWGRwWkZoT2JFbHFiMmxOZWxWM1QwUmpNMXBxUlhSYVYxRjNUV2t3TUZwcVFYZE1WR3N6VFhwTmRGcHRSVEpOVjBwcVdrUlplazB5VFRWUGJrNHdZMjFzZFZwNmNETmlNMHB5U1dsM2FXUkhWalJrUTBrMlNXMU5ORTVxVW10YVZHeHRURlJCZWxreVdYUk9SR2MwV1dreGFVMVVVVEpNVjFVeFRqSldiRTFxYUdwT01rMTVXbFJ3ZW1SSVNuQmliV00yVkZkR2FsVnRiREJaTW1od1dsTkNTV0l6VG5kaFdGSm9Za04zWjFaSGFIWmlXRTUyWW1sQ1UySXlSbXRNUTBKVVlWYzFibGxZUW5aamJWVm5UVlJKZWsxRVFYZEpiakU1V0ZneE9VeEljMmxhYmxaellrWldlV0pEU1RaSmFtaHBXbGRGTWs5RVNUTk1WRVpyVGxSQmRFNUViR3hPVXpGb1QwUnJlRXhVVlRCWmJWbDVUV3BrYTA5WFZtbE9SSEI2WkVoS2NHSnRZelprV0VwMVQyNVdNV0ZYVVRaUFJFMDFXVlJrYWs1VVVYUk9iVWt3VFVNd01FMVhUbWxNVjBsNFRVZFJkRTlVU1RWT1YxRXpXbFJqTVZwcVl6TkphWGRwWTIxV2VtSXpWbmxaTWxWcFQyNXphV050Vm5waU0xWjVXVEpXVldWWVFteEphbTlwVG1wak5FOVhWbXBhVkdOMFdtcE5ORnBETURCT1JGazBURmRKTlZsdFdYUlBSRlY2VFdwUk5VMVVhekpPUkVwclQyNU9NR050YkhWYWVuQlFZMjFrYUdKdGJEWlpXRkp3WWpJMGFVeERTblZaVnpGc1NXcHZhVmxYVFhsWlZGVTBUMVJKZEU1WFdUQlBRekF3VFZST2FFeFVaM2hPYWtsMFRrUnJNMWxYU1hkTlYxRjNXbFJKZWs5dVRqQmpiV3gxV25wd1RsbFhUbE5oV0ZKcVlVZHNiRWxGZUdoWmJUbDVXVmhTZG1OdWEybE1RMG93WlZoQ2JFbHFjR0psZVVwcVlqSlNjR0p0WTJsUGJIUTNTVzVPTldNelVteGlVMGsyU1dwR2FFMUhSVEZaYlU1b1RGUlJlbHBxUlhST1IwMTVUWGt4YVU1SFNYZE1WMDV0VG1wS2FFOUhTVE5PVjBVMFRrUndlbVJJU25CaWJXTTJZVWhTTUdORWIzWk1NMUpzWTIweGNHSnRPWE5pTW1RMVRHMW9jMDU1TlhaamJXTjJVVEk1YTFwV1RqVmpNMUpzWWxNNWRtTnRaR2hpYld3MldWaFNjR0l5TkhSa1NHeDNXbE5KYzBsdFRuWmFSMVZwVDJsSmVFOVhVVE5aZWxKb1Rua3hiRTlYV1hoTVZGRTFXbTFaZEZsVVRtcFplVEF3V2tST2FrNVhWVFJaVjFKb1RXcEJObU16VW5saFZ6VnVUMjVDZVdJeldXbE1RMHByWVZoT2QySkhSalZKYW05cFRYcEtiVTFxWnpWT2FrMTBUbnBrYUU1NU1EQk9WMWw2VEZkRk5GcFVXWFJPTWxwc1RtcEJlazFFUlhwWmJVVXpUMjVPTUdOdGJIVmFlbkJKV2xkR2MyUkhhR3BaV0Vwc1NVWkNlV0l6V25CYVIxWjVTVzR4WkV4RFNqQmFXR2d3U1dwdmFWcHRVWGhOZWtwb1RXcFpkRTVVUlRGTlF6QXdUVlJSZUV4VVp6Vk5SRVYwV2xSWmVGcEVUVEJPZWtGNFRqSktiRTl1VGpCamJXeDFXbnB3UWxreVRubGFWMUp3WkVkV2EwbEZlR2haYlRsNVdWaFNkbU51YTJsbVZqQnpTVzFPZG1KdVVtaFpNMUZwVDJ4ME4wbHVVbXhpUjFacVlqSXdhVTlzZERkSmJrNDFZek5TYkdKVFNUWkphbXN3VG5wbk1rOVVXbXBNVjFVeldWZEpkRTVFUlRCTmVUQTBUMVJvYkV4WFdtdFpiVnBxVDFkWmVrMUVZekphVkhCNlpFaEtjR0p0WXpaa1dFcHpTV2wzYVdSdFJuTmtWMVZwVDJsSk0wNTZRVEJPVjFWNFdYa3dNVTV0VFhsTVZGSnFXbFJWZEZsWFVURlpVekF5V1cxR2FrMTZRbXhOUkZKc1RtcGpObU16VW5saFZ6VnVUMjFvTUdSSVFucFBhVGgyWkROa00weHRNV2haTTBwd1pFZE9iMkZYVm5OWlYwcDJZMjFHTUdJelNqVk1iVTUyWWxNMWVscDVTamxNU0hOcFl6TnNlbVJIVm5SSmFtOXBUVWRKZWsxcVdtbGFiVmwwV1dwTk1FOVRNREJQUjFGNlRGZEdhRTlIVFhSTk1ra3dUbGRTYlZwSFRtaE5hbXMwVDI1T01HTnRiSFZhZW5CM1lVYzVkVnBUU1hOSmJscG9Za2hXYkVscWIybGFWMXBvVG5wamVWbFVWWFJOTWxFelRWTXdNRTlVWTNsTVYwVjZUbGRaZEUxVVozaE5WMUV5V21wYWFVMVVhelJQYms0d1kyMXNkVnA2YjNKT2FsVXlUbnBaTVU1RVRYbE5VMG81V0ZOM2FWbFhVbXRqYlZaNlkzbEpObVY1U2pCbFdFSnNTV3B2YVU1VVJUUk5lbGsxVFZSVmRGcEVhR3ROVXpBd1dtcEtiVXhYU1hoTlZFRjBUVlJDYUU1dFZUSlpNbFpyV2xSU2EwOXVUakJqYld4MVducHdkMkZJYkhwaFYwNW9Za05KYzBsdVZucGFVMGsyU1dwak5GcEVZelZQUkZFMVRGUm9hazVIVVhST1JGcHJUWGt4YVU1VVdtdE1WMUY0V1ZkTmVsbHRUbWhPYlZreFdrUndlbVJJU25CaWJXTTJaREk1ZVdGNVNYTkpibEpzWlVoUmFVOXBTWGhQUkdNMFdtMVZNVnBUTUhkT1JFa3pURlJSZDA1RVVYUlpiVTB6V1hrd2VrOUVTVE5OTWxab1dtcEthazFYUlRaak0xSjVZVmMxYms5cVNXZFdSMmgyWWxoT2RtSnBRa0prYlZaMVpGZFZaMDVEZDJkVk1teDFXakpHZDJJelNteEpSRUUxVDBSbk5FOURTamxtVmpFNVpsWXhPVXhEU25OaU1tUjJTV3B2YVZsWFNUSk5WRkV6VFVSWmRFOVVSWGRaYVRBd1dWUk5lRXhVYTNkYVIxbDBXbXBqZDA1WFVUVlBSMHBwVG5wbmVVOXVUakJqYld4MVducHdhMWxZVW1oUGJXeDBXVmRrYkV3elFuVmFlblJwV1ZoT2JFNXFVWE5oVmxwRFZERktNMDFGZEVoYU1qbENVVlZHUWxSc1RsWmhSVlpXV2pCR1FsRlhXbEpSVlVaQ1VrVnNSRkZWTVVKUlZVWkNZMGhuY2xWSFJrSlJWVVpDVkZSR1ExUldXa1pXVlVaQ1VWVlNUbVZyTVRaVVdIQk9aV3N4TmxSWWNFNWxhekUyVkZod1RtVnJNVFpVV0hCT1pXc3hObFJZY0U1bGF6RTJWRmh3VG1Wck1UWlVXSEJPWldzeE5sUlljRTVsYXpFMlZGaHdUbVZyTVRaVVdIQk9aV3N4TmxwVlRuUmhWVVpDVVZWR1FsSlZhRk5WTVZKelZGVkdVbFJEZEVKT00yaENXakkwZVZKR1FYcGxhMG96WTJwR1JGVkZWbk5MTUd0MlZWVkdRbEZ1Wkd0VGJFcEdVbXhXYkZSdVNucGliVkY0VFdwS05XSXhSbE5rYlhSSlUxWk9TVlJwZERaTU0xSTFWbGR6TldJeFVrWlJNVVY0V1d4U1ExbDZTWHBaYm14UFkzcENRMDVWWkVwU1JVWlRVVlZHUWxGVlJrSlJWVVpDVVZWR1FsRlZSa0pSVlVaQ1VWVkdRbEZWUmtKUlZVWkNVVlZHUWxGVlJrSlJWVVpDVVZWR1FsRlhjM0pUVjNOeVUxZFNORTVIWXpGVWFsSkRUMVZrVWt3elNsRlJWR3hMVERCc1VWcHNUbTVrTUhkMlZGVldSbEZWUmtKUlZVWkNVVlZHUWxGVlJrSlJWVVpDVVZWR1FsRlZSa0pSVlVaQ1VWVkdRbEZWUmtKUlZVWkNVVlZHUWxGVlJrSlJWVVpDVVZWR1FsRlZSa0pSVlVaQ1VWVkdRbEZWUmtKUlZVWkNVVlZHUWxGVlJrSlJWVkl6VlVSV1lWVkhPVkZPV0VrelVtdHdURkZYV1ROWk0xWnRVVzFzYjFWRk5WUmhNV2N4WVVkNFFrOVlWWEpTU0U1UlRqSlNXVXd3Y0V4TlZrRjVWbXhDY0ZVd2JIWmFWMHBHWTJ0NE0xWnRaekZYYm1keVQwVk5lRmRVU1hsWFdGSlJUVVZhZDFwcVdtOWFSMVpvU3pJeGVFMVdaSE5oV0dodFdsZHZNbFZ0VGtWbFIyOTNUMWhPTTFkSFNtbGFWVXBTWTBkc2NXUlhZM2xOUjBaeFRERk9SazlIU2pKaWVsWnZVbGhXYUdSclJqRlZNSFIzVlZkYVMyVkdVa2hQVkVadVZsaEtSRlpxV25GVk1VWkdUVWM1VVdFeVZUQmtNMVp5V2xSamQwNVZWbmhqUlhoUFZqTm9NRlJZVWxSaGVsSnhaR3hvU0dKSFVYSmtSWGh6WlVoYVYxUlZOWFZaVjNSRlRqSXhSbUp0VWxwV1JscFlWVEkxVjA5RVdYZFdNVlpaWWtSTk1GVnJNVFZPTUVwc1lsaENOVkl6Y0U5T00wSkNXVzB4V1ZKVlJUSlpiVm95VTNwQ01VMTZTakZXUlZwTVV6RmFUazFJU1hkWFdHTjRWRlpTYWxKdVduZFBSMnhYVkVaQ1JVMURjelZhTUdoU1pWTnpNMk5zVG0xTk1sWnNZVzVCZVZOSVZrZFpNMDUwWWtkU2NGSlliM2RTYm5CTVYwZGFWRlZ1WTNwalYxVjNUMFpvZUZwRWJHdFZSRnBTVXpBNVQySnRkREZPUjNoSVRUQTFWRmxwT1ZOUmJsSk1aRVYwTUUxWVVqQmFSVXBMWVZac2FVMXNXa3BPTWtwNVdYcGtNRmw2YUVwWFZ6a3dVMjV3U1ZaVlNYZFplWFJRU3pGUmVtTnNVbEprVlhoTVl6RndVMk5ZUWpaaE1WSlVUakpTWVZOVVVqSmllWFI0VTIwMWExSlZaRkJQUlZZMldsZE9OV0Z0Um1wT2FUbEtWa1UwZVZNd09WaFpWbFpOVTFaUmRsbFZlR3RhVmxaMVkxaENhMkZVWkZkV2VrbHlVek5zYWsxcWJFZFVSRTU2VGpKVmVtRkhhekZVUmxKVVlVZFdXRll6UWpWV01uaEpUa1pvTm1KWVdsaGhiVFZ3VkRKc1IxUnFUbHBXTUZKd1pHeGtTazlVU2xoa1YzTXhXVE5SZVZGNlFuZE5NSEEyWWtSc1dsUnFXVEpXTUdzeFUxWlpkbFp1YkVkUFJGcDVUVmRGZUU0elFrbE9WbFpPVVhwQ2QxZERPVVZrTVdoWFZsUlZlVTVGZEhwT1ZteHVVa1p3ZEZSRVVqWlNNMjk0WkhwbmQyTkVUWHBWUjI5NFkwVXhNbGt5YTNKa1IwMTVXVEJhU21GdE1XOVRSRXByVmpGYWJXUlhSbGRVU0ZaTllXNXJOVnBXVWpaYU0wWlFZMjVHYkdReldYZGtibFowVEhwR1RGVnFVWEpOYlVVeVVrZG5NV05HYUZCT01WazFWSGwwZWs1RmRGTlRiRUpDVWtoV05GUnRjREJoYTFwRVVUSnpkbEV5ZURCU1dIQnVXbTV3VkdSSFZubFZNMXByVjJ4R1lWcFZVblpsV0d4NFpVWkdibVJXU1hoaVJtaDBVVzE0U2t4NmJGRlZNbFpwVjI1Q2FWUXlWVFJaYld3eVpFUkthVkpyY3pWWFYwWk1Ua2RXU1ZwVVpFOVVSVFZvWkVWNFVVMHpSa2hYVlhodFZFUmplRlZ0T1U1a2Ewa3lWMGhWTlU1cmIzcFdSbVF3VDFWNFZXSXhSazVPV0hCMFQwWnNiV1ZIU2tsVFZWWlVWVVp3V1ZkR1kzWmtSemt5VmtaT2Rrc3hRbmhTYm1oUFdsaE9NMWR1Um5GVWVUbFpUVVJzVUdSclNtNWhWR3hRV1RCb00wNHllSE5XV0ZaeVdUTlpjbHBIYTNkamJUVnNZMWRaTlU5WVZsbGlNSFJ1WWtVeFRtUXlSbk5pUkdRMFRESXhOVTFITVhOVlJGWjNZVlphZFdScVRtMWtWbTl5VFZScmVtVkhOWGRXUm14TlpXcE9WR0Z0Vm5GVlJYaFpZMFU0TWxaSVVsbFpibkJaWTBkYVNsWlhUbXhUYTJoMFZVaE9XVkZWY0hwWmEydHlXVlYzTTFwdVducGpTRUpYWXpBNVdVNHpWbWhhUlc4MVVtNWFNVlpFV1hwVlNHaDZWMnRHVWsweFZrNWxTR3h1VkVoc1dHUnVUbkpPYVRselpGZDBNVTVFUW0xWmFtZ3daRWM1YzFKRldrZFpha1poVlZaRk1rd3lNVk5oTTFsNFlWWmpOV0ZVUmt0T2EwMTJUVmRHYkdGclJtcGtiRVpSVm0weFZtUkVXa2RSYWtwcVltcEpNbE51Y0VWVWVsSlZZekpHVFZreFpHeFpWbEpwWW5wa1NtSnFRVEJYUkVFMFRtcHJNbGRJYUZWaWJrcHlZbGh3U0ZFd2FIQmlWekZMWTBWNE1WUnRSbEZoVkdONFdtbDBURlF5ZERCYVZGWktVM3BzVUdOc1RUTk9SMngxV2pGQ1ZGcHJjR3ROVnpsS1ZUQlJOVmRxUW5STU1taFJZVVZKZDJKNWMzWlVSMUY2VkZVeFNGWllTbFJXVkZrMFkzcHNOVlpZY0ZsVk1EaDZZek5XYjFaNWRFTmhRM1JMWVdwQ2RtVlliM2xqTWpWaFkxZGtkMWt6Y0d0T1Yyd3pZMGhhVTJSdE1VeGFiR2gzVjFNNVVVMUliR3hWTWxwNldqQm9VR0ZIZUhCa00xSk5WWHBrYWxGc1RuQlZha1pvVjJ0YVVVMTZRbmhMTUVvd1RUSmFXVmxyY3pWaFJrVjVWa2hKY2s1SVNsUlplWE0wV2tkYWMxZEZUbEJOYlhjeVkwWnJjbFZGYkhwT1dFSkhUVmhvZWs1SGRIUlpiR2hYVVdwYU5rMUZjRmhWYkVwclUwTnpNbEZxUWpOUFJscHNZak5zYTFwV1pITldhbWN3WlVkR1ZsUkhOVEpYUkVFMFpHdFdObFJ0TkhKVFJYQlFaRk4wTUZwc1VYaFpNVTVwVXpGQ1RWcFlaREpXTW5ScVRESk5lRXd4YkRCamVsSlVZa1Z2Y2xKRmFIZGtWelY2VW1wTmQwNXFiRmxWTTBvelRqRmFiMVZYVm5OT1IyUkpWR3BPVW1SVmFGQlBSM0JHWVhrNVVFOUhUa1JMTVZaMlRETkNXVlZwZERKU2VrSk5WVEkwZGxkc2FEUmlSbWcxVTFjNWFrNXFRbEZWTW1oc1lrZFNNMlJ0VWpaWmFsSkpWbnBPU2s1NlJuZFVlVGgzWkRCb1dtTlZPVXBqUkdneVRrUkdTMVpFVlhsV1JUVnhXbXBXY1dWRVNUQmFiVEZHVDFSYVdGUklTa2hPZVRscFl6STVUazV0Vm05Uk1HUjNVMnBvZWsxRE9XRldhazV5VDBoR2RWWkZPV3RYUkVaRFRtcGFTVlF5WkdsT1Iwa3hVekZLYldSSGR6Rk9SMXBFVGpJNU1tVllXbUZYYmtKWlpFUmFTMlZVVW5aTk1YQjRXbGRTVUdSck1WVmFTRTV6VlVaV2IxSkVRbmxpUm1RMFpHeGFUbEp1VWxSTlJrRjRWbFU1ZFZWSVdsaGhlbWN3VjBkU2FVMUZVa3BYUm1OMllUQm9jRlJXVGsxYVZ6QXpZMnN4VGxNd1VuUmtSR3hMVFVWb2RGb3pVa3hNZWs1RFducGtTR0ZIWkZCU01IaEVXakZDVlU5SFJtMWpSRVozV2taU1JtVkVVVFJQUkZwMVdqTlNURkpxU21wUFZUbDNZekprVjFKSFNsQlRNRTVMVkRGR2FHRXlhM0pOVmxwNVVtMXJjbVF6U25CVGJrSnRWRzFGZG1JelNsUmhSMDU1Vm5wSk5FNXRjRTFYV0U0MVpWZGFZVlJIZHpSVk1GWXdZbXN3TWs1WGIzaFZNSGhKU3pOa1dWWnJZekpoYlUxM1VrWnNTazlVWnpKU2JsWnhVekJ3ZFZWVmVGZE5SMDE0VkZoS00wNHpUbEJPVnpSMldtNWtNMUpIV25KaU1tODFXakphUlU1SE9UWmhTR3hIVVZaV1YxUllSa05WYlhoYVkydE9hMDFIT1ZaaWJFcDVZVEpzTlZKWWNGQlZSVnBQVkVWYU5sWkljRlZPVmxwelVXeG9hMDB3T1hSUFJ6azJZVEJLTUZRd09XdFNSa0poWVRGVk5XRjZhM1pWUlU1M1ZFZDBTVmxZU25WWGJGWnRVMWRvV1ZReldYZE1lbHBLVlROWmQxVXdPV3BrYlc5MlRWZEpOV1JJY0cxaE1EUXhVbnBPTkU0eVZtbGFSV3h2VFhwU1dGcHJXVEprU0VKRlkyNUtXbE42V2xGV1dFSnJUSHBTYlZOc1RYcFpia0paV1ZoS01GUXdjRTlMTVU1VFVrVktXVlF6V1hkaVJGcDBUbXRXTmxkcVJqWk5lbFp6Wkhwc2NrMHhTbEJOUkVaWVZGVmFRMVpVVWtsT1EzTjVUVmQ0VGxsdFNUUlhTRTEzWkcxNE1sZFdXa2xqUkU1UlZsaEdURkV5VG1oVU1GSldZekkxYVZScmVGUlZhbFpxVmtWTmNscEdiM0pqU0VKWFdsZDRSR0pyZEdoTlZFVXpXbFUxVlZSc1JuSlZNVnBIWVZaVmVXUkdRWEpWV0VwVVZERmFNbGRzY0doV1ZYaDRaRE5hTUZWRlRtOU1NbkJyVkZkSmVsVnJORFZQVmtaUVlUSTVjV1JxYUUxak1VWlVUVWR6ZGxSNlkzSmtSWFJ0U3pBMVRsWkVhekpVYkVGM1ZsaGFUV1J0YkhWVmJUQTFVMjAwZVU1SVpGZGpiVXBGVVRKS1NGTlhVa2RPU0doWFVXczFTMHd6YUV0Vk1sVXlWbGRXZGt3d1NuRk1lbXhLVEhwa1JXVlVRbEZrYmtwMVUyNXJNV0l6UWxSVFZrcFRWMnhuZDFsV1JsWlJWVVpSWld4bmVtRkVUbFpSVlVaRVVWWkdRbVZFWkZwUlZWRjJXVmMxUjFGclRrOWFSMFowVTFWR1ExRlZSa0pSVlVaQ1VWVkdRbEZWUmtKUlZVWkNVVlZHUWxGVlJrSlJWVVpDVVZWR1JWRlhNWFJpTWxaTVQxVm9ObUZWU1RGVFZHeEdVV3hvZFdWRWFFSlJWVVpDVVZWR1FsRlZSa0pVUlVwMFVWVnNZVk15TVRaV01HeDFaVWhzVUZGVlJrSlJWVVpHWWtWYVZXRXhUakZWVnpGRVVYbEpjMGx0Ykhwak0xWnNZMjVOYVU5c2REZEpiV3hyU1dwdmFVMXFRbTFPVkd0NFRsUm5kRTlIU1ROWlV6QXdUa2RXYTB4VVp6VlpiVVYwVDFkRk1rOVVUVEJPUjFWM1RVUlZNazl1VGpCamJXeDFXbnB3YTJGWFVUWmFXRkp2WTJwdmQyVkZWWHBQVkZFelQxUnJlVTlGVG1wT1JWWnRVbXRWTVUxRVl6Tk9SRkUwVDBSak5FMUZTVFZhYWxsNFRtMUthMDVGU1RSTmVrRnBURU5LZVZwWVduWlpNa1l3WVZjNWRVbHFjRGRKYmxJMVkwZFZhVTlwU214TmVrVjVXbXBKTWsxVE1XdFBWMGw1VEZSUk0wMTZSWFJQVjBrMVdWTXdlazlVUVRCTmFtaHJUa1JHYUUxVVdUWmpNMUo1WVZjMWJrOXJOVkJVYTFWcFpsTjNhV0p0Um5SYVUwazJTVzFOTVU1VVp6SmFSR041VEZkWk1WbHRVWFJPUjAxNVRWTXdORTR5UlRSTVZFazFUVlJWZWsxWFNURk5WMWw0V2tSd2VtUklTbkJpYldNMlZUQkdUbFZGZUVaSlJVNU5VMVUxU2xGNVNYTkpiV3hyV2xjMU1HRllValZWU0VwMllqSlphVTl1YzJsa1NHeDNXbE5KTmtscVp6RlpWRVpyVGtSV2JVeFVVVEZQUkUxMFRrUk5NMDU1TURWUFZGWnRURmRhYTA5WFVYcGFhbXQ0V1ZSV2JWbDZjSHBrU0Vwd1ltMWpObEpGTlZSTVZWSktVa05KYzBsdGVIWlpNa1l3WVZjNWRVbHFiMmxhVkZacVRrZEdhbHBYVlhSYWFsVjZXV2t3TUZscVVtbE1WMGt5V1RKSmRFNXFSWGhhVkVGM1dUSkpOVTFFU210UGJrNHdZMjFzZFZwNmNHdGlNalYyWkVoYWJHTnRiRzFsVXpVd1dsaE9NR0ZYTlc1TWJscHNZMjFzYldWVE5XNWlNMWwxWXpKamFVeERTbkphV0d0cFQybEthRnB0Vm0xYWJWSnNUa013TUUxcWJHMU1WRkpxVGpKTmRGbHFTbXhOZVRBeVRXcENhMWxVVG14YVZHc3dUa2RGTm1NelVubGhWelZ1VDIxU2NGcEVjR3hrUjJoNVQycENORkpVVFRWT1JHTTFUMVJKTkZFeVRUQlNWMXBIVWxSVmQwNTZZekJPUkdjMFRucG5kMUZxYkcxT2FrVXlXVzFSTUZGcVozcE5RMDVxWWpJMU1HTnRPWE5pUjFaNVNXNHhPVmhUZDJsS1NGSnNZbGhDYzFsWVVteEphbkEzU1cwMWFHSlhWV2xQYVVwcFdWUlJNMDFxWTNkTmVUQTBXbTFWTUV4VVVYbE5SR3QwVDFkUk5GcHBNSGhhVkVKb1RsUk9hMWxxU214YWFsRTJZek5TZVdGWE5XNVBhMmhHVVZWNFZWTkdPVVJTVmtwVlNXbDNhV1JJYkhkYVUwazJTV3BuZUU5RVdUTmFWRWt3VEZSUk0wOUVRWFJPUkZVeVRYa3hhVTFVWnpKTVZFbDRUbnByZUU5WFdUUlplbXQ0VDFSd2VtUklTbkJpYldNMlVsVXhRMUpWVWtWU1ZWSm1WV3RXVDFKRlZsTlNWa2xwVEVOS01XTnRkMmxQYVVsNVQwZEdiVTFIUlhwTmFURnNUMFJKTkV4VVVtdE9lbEYwVDBSamVVMXBNREZPUjAxNFQxUmtiVTV0UlhkT2FsRTJZek5TZVdGWE5XNVBiV2d3WkVoQ2VrOXBPSFpoUjFab1lraFNiMWt5Vm5sa1F6VjVXbGMxYTFwWVNteGphVFYwWWpKbmRWb3lPVEpNYms1dVRIbEtPV1pUZDJsak1teHVZbTFHTUdSWVNteEphbkEzU1c1U05XTkhWV2xQYVVwVVUwVkZlbFJYVm5saE1uaHNWVWhLZG1JeVdXbE1RMG93V1ZoS2JscFlVa2xaV0U1dlNXcHZhVmxYU1hkWk1sazBXWHBuZWsxWFdUQmFiVXBwVGxSVmVWbHRVbWxPYlUwMVdXcEtiRmx0VW1sTlYxWm9UWHBOTUZwdFJtMU9WMUpwVG0xWmQxbFhVWGxOYWxwb1dsUm5NVTFIVFRST2FrRjZXa2RGZVZsVFNYTkpia0o1WWpJNWJVbHFjR0pZVTNkcFlsZFdlV0V5ZUd4VmJUbDJaRU5KTmtsdFJtbE5SMDV0VDBkTk5FMTZSbTFPUjFwcFdXcFZNVTF0U210WmFscHFUMWRKZVZwWFNtdFpha1pzV1ZSTmVrNUhXbWhhYWxacldXcGFiVTFIUm10TmFra3lXVmRWTkU1VVFtcFBSRmwzVFRKU2FFMXRSV2xtVTNkcFkwaEtkbUl5V1dsUGJIUTNTVzVTTldOSFZXbFBhVXBRWTBkV2RWRllVakJhV0U0d1dWaFNjR0l5TlZSaFYyUjFXVmhTTVdOdFZYbE5SRVUwU1dsM2FWa3pTbXhaV0ZKc1drTkpOa2xxU1hkTmFrVjBUVVJuZEUxcVVsVk5SRkUyVFdwSk5rNVVWWFZOVkdNelYybEpjMGx1UW5saU1qbHRWVWhXZVdOSE9YcGFVMGsyU1cxR2VtTXlWbmxrUjJ4Mlltc3hiR1JIYUhaYVEwbHpTVzVhYkdOdGJHMWhWMDVvWkVkc2RtSnJNV3hrUjJoMldrTkpOa2x0VW5CYVJIQnNaRWRvZVU5cVFqUlNWRTAxVGtSak5VOVVTVFJSTWswd1VsZGFSMUpVVlhkT2VtTXdUa1JuTkU1NlozZFJhbXh0VG1wRk1sbHRVVEJSYW1kNlRVTk9hbUl5TlRCamJUbHpZa2RXZVVscGQybGpNbXh1WW0xR01HUllTbXhKYW05cFRVaG5NMWxVVFhoUFZGcHRXbXBTYkU1dFRUUmFWRmw2VG5wV2JVOVVZM2hQUkZreFdtMU9iRTlYVG0xT1ZFcHJUV3BhYlU1VVVYaE5WRUYzVFRKSmVGcFVRbXRaTWtWM1RVUkthMDU2UVRKTmVra3pUVVJOTTAweVZtcGFWRVp0VDBkV2FrOUhTVFZQVkd4cVRYcEZkMDlIVG10UFJHZDZUVVJDYTFwRWF6Qk9SRlYzVFhwamVrNXFUWGROZWtVeVdsUlZOVnBxV210YVYwa3hUVVJqZDFscWEzcE9iVlV5V1hwc2JGbHFSbXBKYmpGa1psRTlQU0o5WFgwc0luTnBaMjVoZEhWeVpTSTZleUowZVhCbElqb2lVMGhCTTAxbGNtdHNaVkJ5YjI5bUlpd2lkR0Z5WjJWMFNHRnphQ0k2SWpVeE56UXdPRGN4TURrMVpqaGpZekJqTURoalpUbG1NakprWXpnd01HVTFNRE5rWkdKalpqaGpZakl3TXpFNE5ERmtaRGMyT0RNeU9XVTFObUk1WVRFaUxDSndjbTl2WmlJNlcxMHNJbTFsY210c1pWSnZiM1FpT2lJMU1UYzBNRGczTVRBNU5XWTRZMk13WXpBNFkyVTVaakl5WkdNNE1EQmxOVEF6WkdSaVkyWTRZMkl5TURNeE9EUXhaR1EzTmpnek1qbGxOVFppT1dFeEluMHNJbkJ5YjI5bUlqcGJleUowZVhCbElqb2lUM0JsYmtGMGRHVnpkR0YwYVc5dVUybG5ibUYwZFhKbE1qQXhPQ0lzSW1OeVpXRjBaV1FpT2lJeU1ESXhMVEE0TFRJMFZEQTFPakE1T2pVNUxqTTBNVm9pTENKd2NtOXZabEIxY25CdmMyVWlPaUpoYzNObGNuUnBiMjVOWlhSb2IyUWlMQ0oyWlhKcFptbGpZWFJwYjI1TlpYUm9iMlFpT2lKa2FXUTZaWFJvY2pvd2VFVXpPVFEzT1RreU9FTmpORVZtUmtVMU1EYzNORFE0T0RjNE1FSTVaall4Tm1Ka05FSTRNekFqWTI5dWRISnZiR3hsY2lJc0luTnBaMjVoZEhWeVpTSTZJakI0T0dKak9HSXhNMlZsWmpReFlqUXhZek0wTldGa1kySmxZVEZtWW1GaU16YzNOek5rWWpWbVltWTFaREU1WkRWaU56TTFZek0wWXpKbFlqWXlNVEl5TnpZMk1HSmxNV1ZsTjJZMVptTTVZV1k0T0dZeU0yRXpaVFJtTWpjNU1UWTROMll4WXpBMk5HTTRNV1ZsTW1RNE1qRmpNelF4T0dSaE1ETmtaVFE1TVdReFlpSjlYWDA9In1dfSwic2lnbmF0dXJlIjp7InR5cGUiOiJTSEEzTWVya2xlUHJvb2YiLCJ0YXJnZXRIYXNoIjoiMzhkMDBkMGQ2ZGU1ODU1MDNiNDRiYzc5MmNjNWVjMzlhMDZmZjRhYmU3YTFhOGIzYjIzNjNjMjUyMzMwMzRmMiIsInByb29mIjpbXSwibWVya2xlUm9vdCI6IjM4ZDAwZDBkNmRlNTg1NTAzYjQ0YmM3OTJjYzVlYzM5YTA2ZmY0YWJlN2ExYThiM2IyMzYzYzI1MjMzMDM0ZjIifSwicHJvb2YiOlt7InR5cGUiOiJPcGVuQXR0ZXN0YXRpb25TaWduYXR1cmUyMDE4IiwiY3JlYXRlZCI6IjIwMjEtMDktMjdUMDg6NTg6MDAuMDA3WiIsInByb29mUHVycG9zZSI6ImFzc2VydGlvbk1ldGhvZCIsInZlcmlmaWNhdGlvbk1ldGhvZCI6ImRpZDpldGhyOjB4RTM5NDc5OTI4Q2M0RWZGRTUwNzc0NDg4NzgwQjlmNjE2YmQ0QjgzMCNjb250cm9sbGVyIiwic2lnbmF0dXJlIjoiMHg3N2VmYzE4ZjJkYzBhNzIzYThkNGRkZmY3Y2UxZjE1N2Q3MGFjZTQxNWEwOTU5ZGM3MGE2NzE0ZmU0ZTVlZTY1MThlZGFjMmIxYjdjMDY3Y2UwOTRhMThiNGQ0MThhN2QzNzZiMWQxYzg5YWM3NjQyYTcxOWZhOGNhOWY2YTg1ZjFjIn1dfQ=="
}
- }
]
- },
- "issuers": [
- {
- "name": "aeb9b37f-47a7-4c67-b9c7-36dad6a2aaab:string:SAMPLE ISSUER (DO NOT VERIFY)",
- "id": "c43a5ad9-d300-4b5f-83b8-a413d0b9ffb3:string:did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830",
- "revocation": {
- "type": "5f5f6b7f-e0f0-425d-a577-05d819f0de1f:string:NONE"
- },
- "identityProof": {
- "type": "8ac9feac-1c83-41a0-930c-3aa84f91d3e9:string:DNS-DID",
- "location": "699722b4-d3f1-492d-a46e-0cd4e7b6da57:string:donotverify.testing.verify.gov.sg",
- "key": "1f256146-2acf-4c34-8049-30a393a16730:string:did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830#controller"
- }
- }
- ],
- "$template": {
- "name": "d9f7369c-5eff-4866-844c-797557982dfc:string:HEALTH_CERT",
- "type": "e570b19e-72fe-4e04-af25-c5d237e4add3:string:EMBEDDED_RENDERER",
- "url": "99c36295-9e76-4a8e-9d3c-ac369cfa222c:string:https://healthcert.renderer.moh.gov.sg/"
- },
- "notarisationMetadata": {
- "reference": "acca43f0-a8e0-43bd-a062-3a7f9769be11:string:c5ad19bb-403c-4b52-971d-3f01e87883e3",
- "notarisedOn": "3f687d0a-992a-4ece-8b24-123332d24af6:string:2021-09-27T08:57:59.883Z",
- "passportNumber": "1af65e20-58bc-4ac7-ab59-fa0996d000ac:string:E7831177G",
- "url": "427d31a0-6aad-4c93-8e1c-0656992fbdeb:string:https://action.openattestation.com/?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fapi.storage.staging.notarise.io%2Fdocument%2Fdc65dc7d-05a3-4895-ad80-8dc4a90add1f%22%2C%22permittedActions%22%3A%5B%22VIEW%22%2C%22STORE%22%5D%2C%22redirect%22%3A%22https%3A%2F%2Fwww.verify.gov.sg%2Fverify%22%7D%7D#%7B%22key%22%3A%2210d5995597b68acab3940c53d7433d2a4e1a4c231b67f99e2847cb4b1781098e%22%7D",
- "signedEuHealthCerts": [
- {
- "type": "0979a393-07bb-4514-81f9-8529f23b0512:string:PCR",
- "qr": "7791ece9-cb4e-4bd2-85f1-7bb05510eede:string:HC1:6BFK%GA 9HWRH23MLBCFGCFO0WG4Y5XHB1RF%T70GR5QUN87MU6N%4P+JWCK:OJDQ4/M2P+ME2SMMG3SA23V060M$R.KMZ24LES1GO8+0DE2P.5VIHJGK%0I3UPSEHSF5$MI0A7-YK/AUKDUA3D:3K.KJ:6WYCTXRR*/1A5K*+JAKT%2EMQD0AFD T .PM2K 034PV23N MLS EI%TI/AQDSB1ADYTRUMF%EKJ0GDJ83U Q9179 ZTP5VN7O*L92Z3N30 NQJ84D$CA+68ON7+O:RIKQSJ3D.G8L8GNAKMD6D4EQTPX5B.*3V8HI7AYIBM5VB+QJPNPSFZSS-/4+ESBT5+ B940262*32QATB7C1YQYNE500O13TROMGGE45Y.I-I2F.L%Q25YQAV2B$AS87ME7K9NYRL:/8XXSCPS/9L:9ER537L86WOPM5-B6DOJIQ6O0NN7A1PFJ.T1%OTX9E/T 9J7.FEAKFJM:1NWYVBTR6YS ADB7R:CNSUDV D+3QPDD%MMPPJUILKQBWXLHZAN-JLP9XE531BHHJXVDA*E3EP$7A:HC7*C XKE K8WBYQ7+N6NLT2%AIHIP 6+NEXT5DTAKSOFKH9/6O*D5116$HFYI%E6T%BBKEPN9.E9FUP54ITFWYJMR2PQ+T367Z6CI4OLX28PLA*NZ2S-ZHEHAT:FL74Z:V+7KRWQO1U6JH0X899ULEQ/I2R:5B.8T1JQ4L:3K VM-7JR%NM:TK2N:0B-J1GPPYLHB1EEVSI/9 X3Q 0.VD6D8$XQCMH:EONXOXSADLVY$8S1T981C65QE6-MQ6T6W:H$*6S9W5ZSC$RJV8ODT427HMBKF73$RL-6RS28-B/CMOW80*TFAE$D2L*G5UKZGDAMEMVHPA2GV287PIIUNBQF.J4JF-$THLF$RMW9E1L6N/PMI5GVH-:07SGML07XFNX60K7H.VEPAS/PBYQW.6LX972DUNM.YP1JP912OR9Y5PI6DWAGNOP1LUV8PNGVZJ88.KTZGIWSHNG67UX31Y0E0PVSDFBRVPN0TCIJUM$TFX9W7:3TB24KNSY4LIFDIO%1C%0W+.U +JS6GN9W01U-184KDV/VWAT.EUS%FK+DF$TI6P1JTZBSU0EHAW*4W829W5ECQ7Q0RTVNT-FQYV47E3U14RS51"
- }
- ]
- },
- "logo": "ab36510d-f61c-4bd8-9b06-288e5f5fb52a:string:data:image/png;base64,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",
- "attachments": [
- {
- "filename": "7f3ff5fc-e108-49a6-9c6e-10f07e3840b7:string:healthcert.txt",
- "type": "76e7dfda-d4f7-4ea1-9747-6070a9a62b40:string:text/open-attestation",
- "data": "c155c676-9c96-4f3c-963a-2a5692f17bc5:string:eyJ2ZXJzaW9uIjoiaHR0cHM6Ly9zY2hlbWEub3BlbmF0dGVzdGF0aW9uLmNvbS8yLjAvc2NoZW1hLmpzb24iLCJkYXRhIjp7ImlkIjoiNzY5MzcxMDMtNzdlZi00N2MxLTk5MTItYmI5MmRjNDgyN2VhOnN0cmluZzpjMjM1NmUzYi05MDA5LTQyMjAtYTFjYy0xYWY4ZDM0MjBkYWQiLCJ2ZXJzaW9uIjoiNzFhNWUzOTgtY2FmMi00NDQ4LTg2NzQtMTAwYzgxNGZkNzBhOnN0cmluZzpwZHQtaGVhbHRoY2VydC12Mi4wIiwidHlwZSI6IjNkZWVkNzExLTJiNGMtNDE2ZC04YTBmLWMyMTA1MzQwMDdmODpzdHJpbmc6UENSIiwidmFsaWRGcm9tIjoiZDUwMDhmMGItOGM1NC00YzQ1LTk5ZGEtYjE4NzkxY2ViMjY2OnN0cmluZzoyMDIxLTA4LTI0VDA0OjIyOjM2LjA2MloiLCJmaGlyVmVyc2lvbiI6ImFkNzdjYjEyLTNlZjgtNGZjZi04MmVjLTJkOTYyYTlkZDQ4NDpzdHJpbmc6NC4wLjEiLCJmaGlyQnVuZGxlIjp7InJlc291cmNlVHlwZSI6IjZjMDk3YmI0LTI3YjQtNDA0Yy1iNTViLTI3MmI4ZTkwNGMxYzpzdHJpbmc6QnVuZGxlIiwidHlwZSI6ImY1NjAwMDYyLWIwZTgtNGVmZS1hNDhkLTMxZjg0MjY5MWYwYjpzdHJpbmc6Y29sbGVjdGlvbiIsImVudHJ5IjpbeyJmdWxsVXJsIjoiZDViODc4ZDUtMTdkOS00ODcyLTk3OTctYTE2MTRhM2Y0YzE3OnN0cmluZzp1cm46dXVpZDpiYTdiN2M4ZC1jNTA5LTRkOWQtYmU0ZS1mOTliNmRlMjllMjMiLCJyZXNvdXJjZSI6eyJyZXNvdXJjZVR5cGUiOiIzYWM5NmRlOS0yNDQxLTRkMzItYmFlNS04ZGNiYjBkMjgyZWU6c3RyaW5nOlBhdGllbnQiLCJleHRlbnNpb24iOlt7InVybCI6IjRkNDE3MGU5LWFkMDMtNDkyNy1hODc1LWQyYjc0OWUyZDBmNDpzdHJpbmc6aHR0cDovL2hsNy5vcmcvZmhpci9TdHJ1Y3R1cmVEZWZpbml0aW9uL3BhdGllbnQtbmF0aW9uYWxpdHkiLCJleHRlbnNpb24iOlt7InVybCI6ImJkZTI0NTVlLTE5YjYtNDcyNi04OTg1LTRlOGVhNWUxYjU1NTpzdHJpbmc6Y29kZSIsInZhbHVlQ29kZWFibGVDb25jZXB0Ijp7InRleHQiOiJhMmM3YTA0My0xOWY2LTQxZmEtOGMxOS1lNWM2Y2E3NDAyNzk6c3RyaW5nOlBhdGllbnQgTmF0aW9uYWxpdHkiLCJjb2RpbmciOlt7InN5c3RlbSI6IjhhZDU2NDY3LWNiMzMtNDBlYy1iNTIxLWE3MTIzMWVhMGU1NzpzdHJpbmc6dXJuOmlzbzpzdGQ6aXNvOjMxNjYiLCJjb2RlIjoiYjQ0MmFiNTQtZGM4NC00MGNmLWE0MmMtYzc2MmJhMTg0MTY5OnN0cmluZzpTRyJ9XX19XX1dLCJpZGVudGlmaWVyIjpbeyJpZCI6IjRiZTk4ZGFiLWJjZWYtNGQ2MS04ZDY2LTNiY2M2ZjBiZmIzYjpzdHJpbmc6UFBOIiwidHlwZSI6eyJjb2RpbmciOlt7InN5c3RlbSI6IjI4OTIyNGRmLTI0ZmItNDgxZi04OTM0LTVhYTVkNGIxNmVmMzpzdHJpbmc6aHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS92Mi0wMjAzIiwiY29kZSI6ImZmMGUwOTJiLTNkOWItNDE3Ni04YjZkLTMyMGEyOTVhZDliYzpzdHJpbmc6UFBOIiwiZGlzcGxheSI6ImU5NmIxNjQ0LTg0Y2UtNDlkYS04NWRkLTQ2YzI1NjcxYWNjMzpzdHJpbmc6UGFzc3BvcnQgTnVtYmVyIn1dfSwidmFsdWUiOiIzMTQ4YWY2Yi0xMThmLTQ5ZWEtOWQzOS1hODBlYzljMzhjMGI6c3RyaW5nOkU3ODMxMTc3RyJ9LHsiaWQiOiI5NGUzNDk5ZS04YWU4LTRiZjctODgxMS0wZGMyMGRmMTYwOTQ6c3RyaW5nOk5SSUMtRklOIiwidmFsdWUiOiI2MTJjNDEyMC1hM2EwLTQ0MWQtOTFmMy1jNjUwYjlhM2U1MTI6c3RyaW5nOlM5MDk4OTg5WiJ9XSwibmFtZSI6W3sidGV4dCI6IjE5YjhlMDI0LWMwYzAtNDQ0NS1iMTE3LTVjMjY4ZmFmYzFlZTpzdHJpbmc6VGFuIENoZW4gQ2hlbiJ9XSwiZ2VuZGVyIjoiY2Q5ZTE0MWQtYTZlYi00ZDk4LTk3M2QtZDYwMTczNWUzNTI4OnN0cmluZzpmZW1hbGUiLCJiaXJ0aERhdGUiOiI2NTNhYmFjOS0yMjUxLTQzY2YtOWRiYy1lNWM2Nzg2M2U3M2U6c3RyaW5nOjE5OTAtMDEtMTUifX0seyJmdWxsVXJsIjoiZTQyZDQwY2UtOTY3Yi00YTEyLTkzMDktZWU1MmU2MGNhM2U0OnN0cmluZzp1cm46dXVpZDo3NzI5OTcwZS1hYjI2LTQ2OWYtYjNlNS0zNmE0MmVjMjQxNDYiLCJyZXNvdXJjZSI6eyJyZXNvdXJjZVR5cGUiOiI3YTQzMjgxMS1jMTVhLTQ3MDQtYjA2Yy0yNzUzYTYzOTE1MjY6c3RyaW5nOk9ic2VydmF0aW9uIiwic3BlY2ltZW4iOnsidHlwZSI6ImU0YzE2NDJlLTFhMTAtNGY5Zi1hYWU2LWUwNjU3YjJkZjU4MDpzdHJpbmc6U3BlY2ltZW4iLCJyZWZlcmVuY2UiOiIzMTY0YzVmZi1jOWM1LTQxZDUtYmYzNy0wZDNhYjEwMTI1MTE6c3RyaW5nOnVybjp1dWlkOjAyNzViZmFmLTQ4ZmItNDRlMC04MGNkLTljNTA0ZjgwZTZhZSJ9LCJwZXJmb3JtZXIiOlt7InR5cGUiOiI1OTJjZDVhMi1kNmE0LTRhODctODNjNi1iMmQ1YTU5Y2E1YzM6c3RyaW5nOlByYWN0aXRpb25lciIsInJlZmVyZW5jZSI6IjE2MTU5MTljLTIxMWUtNDc2ZS05NjU2LTdkNzkyNGQyYzE5NTpzdHJpbmc6dXJuOnV1aWQ6M2RiZmYwZGUtZDRhNC00ZTFkLTk4YmYtYWY3NDI4YjhhMDRiIn0seyJpZCI6ImExZDhkMDRmLWI4ZTQtNDY4Yy1hOTQzLWQ0OWZkNWVhYmZkNDpzdHJpbmc6TEhQIiwidHlwZSI6ImM1MzNkNjg3LTdkMmYtNDZhOC04OGM1LTNlYWIxZDBiOTUzNjpzdHJpbmc6T3JnYW5pemF0aW9uIiwicmVmZXJlbmNlIjoiODEyYTliYjUtYTgwMS00YjdlLWJjMWEtMGQ2NzUyMGVhNmY5OnN0cmluZzp1cm46dXVpZDpmYTIzMjhhZi00ODgyLTRlYWEtOGMyOC02NmRhYjQ2OTUwZjEifSx7ImlkIjoiOTk5M2I0OGYtOTQ4Yy00NzJkLWFjM2EtYzhjZjQxMTFlNGNjOnN0cmluZzpBTCIsInR5cGUiOiIwZjhjMjQ2NS04ZjgyLTQ1YmUtYTNlNC1kNjk2NDdlNmE5MzI6c3RyaW5nOk9yZ2FuaXphdGlvbiIsInJlZmVyZW5jZSI6ImQ5MTZmM2JmLTdjZDEtNDg1Ni05NDY2LWIxYzY3MWU0ZTU1ZTpzdHJpbmc6dXJuOnV1aWQ6ODM5YTdjNTQtNmI0MC00MWNiLWIxMGQtOTI5NWQ3ZTc1Zjc3In1dLCJpZGVudGlmaWVyIjpbeyJpZCI6IjM5OTYxMGFiLTNjOTItNDZjNC05MjA0LTkwNmMzMzM0YzU3ODpzdHJpbmc6QUNTTiIsInR5cGUiOnsiY29kaW5nIjpbeyJzeXN0ZW0iOiJkNjg1MTc1NC1mMWMwLTRlNWMtYjQzMC1jMzJmMTY5YzU4MjM6c3RyaW5nOmh0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjItMDIwMyIsImNvZGUiOiJmYzNhNTM2Yy1lMGFlLTQ1ZmUtYjliOS03ZjU0ZTJmN2RkZjg6c3RyaW5nOkFDU04iLCJkaXNwbGF5IjoiNTBiZDhmYzktNDEwZS00OTEwLWIyNGYtNjFiN2I3YTI1ZjE4OnN0cmluZzpBY2Nlc3Npb24gSUQifV19LCJ2YWx1ZSI6IjdkYjJkZDFhLTg3OTYtNGEwYy05NDljLWM0YjQ3NjdmMzgwZTpzdHJpbmc6MTIzNDU2Nzg5In1dLCJjYXRlZ29yeSI6W3siY29kaW5nIjpbeyJzeXN0ZW0iOiI0NmYxNTUwYS1hMGYzLTRiYWMtOWMwYy0xOTc2NjJmNDdmZWU6c3RyaW5nOmh0dHA6Ly9zbm9tZWQuaW5mby9zY3QiLCJjb2RlIjoiNTA5MmU3MTctM2RhYi00OTIwLWFmM2EtNDA2NTE1MTRiZDZiOnN0cmluZzo4NDA1MzkwMDYiLCJkaXNwbGF5IjoiOTdiZWZkODItN2I4Yy00M2I2LThlZjMtZjFhOWU2YjQ4OGU1OnN0cmluZzpDT1ZJRC0xOSJ9XX1dLCJjb2RlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiMmI4MDdkYzUtMmZhOS00YTE1LTg4YWQtNDk4OWZkODYyNmJjOnN0cmluZzpodHRwOi8vbG9pbmMub3JnIiwiY29kZSI6ImEwYzE3ZGZhLTVhMTktNDEwYy1hZGJmLTg3ZjljMzYyZWZlMTpzdHJpbmc6OTQ1MzEtMSIsImRpc3BsYXkiOiJkNTNkZWRlNi1hYmE3LTQ4NDEtOTczMC1mNzNmOThkNDQyMjA6c3RyaW5nOlNBUlMtQ29WLTIgKENPVklELTE5KSBSTkEgcGFuZWwgLSBSZXNwaXJhdG9yeSBzcGVjaW1lbiBieSBOQUEgd2l0aCBwcm9iZSBkZXRlY3Rpb24ifV19LCJ2YWx1ZUNvZGVhYmxlQ29uY2VwdCI6eyJjb2RpbmciOlt7InN5c3RlbSI6IjI2NDU2NWVhLTg5MjgtNDhkYS04NDUzLTRhZGJlZGM0NmI4NzpzdHJpbmc6aHR0cDovL3Nub21lZC5pbmZvL3NjdCIsImNvZGUiOiJlNDg2ZjQwNi0wNWNjLTQ1MmEtOGY3OS1jMTJhOTlkMmI3NDY6c3RyaW5nOjI2MDM4NTAwOSIsImRpc3BsYXkiOiJiMmY0M2Y0YS1mOWRmLTQ2YmQtOTAzOS1lODJjZmY4OWE1NWQ6c3RyaW5nOk5lZ2F0aXZlIn1dfSwiZWZmZWN0aXZlRGF0ZVRpbWUiOiIzYzhmMDI3My01MjliLTQyYzYtYTdkMS05ZjVlMWMzMDFmYTM6c3RyaW5nOjIwMjAtMDktMjhUMDY6MTU6MDBaIiwic3RhdHVzIjoiN2NhMGJkZmQtYjRkMC00MDI1LTllMGMtYTI2OWI2ZDQ1ZTNlOnN0cmluZzpmaW5hbCJ9fSx7ImZ1bGxVcmwiOiI1NDg2M2M3NC1kZjZkLTQwMmItYmZkMS03MTQ4YWZkMTYxNjg6c3RyaW5nOnVybjp1dWlkOjAyNzViZmFmLTQ4ZmItNDRlMC04MGNkLTljNTA0ZjgwZTZhZSIsInJlc291cmNlIjp7InJlc291cmNlVHlwZSI6ImU2ZjhlZjAwLTg4OGItNDk5Yy1iMDA0LTRkMWNkZWQ3YjNmMDpzdHJpbmc6U3BlY2ltZW4iLCJ0eXBlIjp7ImNvZGluZyI6W3sic3lzdGVtIjoiMDFlNGI4YTItMTc5My00NTkwLTkyZWMtNzE0MGQ5MjhmYTc2OnN0cmluZzpodHRwOi8vc25vbWVkLmluZm8vc2N0IiwiY29kZSI6ImY1NGI4MjE3LWNhODUtNGI1NC04YTNiLWY5OTFkZTE3ODYzYTpzdHJpbmc6MjU4NTAwMDAxIiwiZGlzcGxheSI6IjU5ZDNhOTk3LTk3ZjAtNGU0Mi04NjM0LTVkZDAwNGE1N2YzZDpzdHJpbmc6TmFzb3BoYXJ5bmdlYWwgc3dhYiJ9XX0sImNvbGxlY3Rpb24iOnsiY29sbGVjdGVkRGF0ZVRpbWUiOiIyN2U1YjIxMy0wYjI4LTQ2YmUtYTUyZi1hNDhjOTcxMTcyMGE6c3RyaW5nOjIwMjAtMDktMjdUMDY6MTU6MDBaIn19fSx7ImZ1bGxVcmwiOiJmNTc1ZmI3MC03M2MzLTRlZTYtOTRjYi1kYTM5MjNiNTkzOGU6c3RyaW5nOnVybjp1dWlkOjNkYmZmMGRlLWQ0YTQtNGUxZC05OGJmLWFmNzQyOGI4YTA0YiIsInJlc291cmNlIjp7InJlc291cmNlVHlwZSI6ImJlMGMyNTRlLTlmNjYtNDgwYy05Nzg1LWVmZTIzZDY1MGRlODpzdHJpbmc6UHJhY3RpdGlvbmVyIiwibmFtZSI6W3sidGV4dCI6ImVkYTkwN2Y5LWYxMmQtNDc1OS1iNTZjLWM5OWE3ODY5ZDZmZDpzdHJpbmc6RHIgTWljaGFlbCBMaW0ifV0sInF1YWxpZmljYXRpb24iOlt7ImNvZGUiOnsiY29kaW5nIjpbeyJzeXN0ZW0iOiJhNjU4YmFkNy02NGRiLTQ2ZjQtOTU2NS00MzA4MjUyNmRlNWQ6c3RyaW5nOmh0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjItMDIwMyIsImNvZGUiOiJiZDAxYWQwYy05OTFjLTQzNjgtYTk3YS0wYTIxODc0OTA3ZDY6c3RyaW5nOk1DUiIsImRpc3BsYXkiOiIwNjczYTgzZi04NzNiLTQ4MDQtYTdiMy03M2VhNGEwZmQ2ZTQ6c3RyaW5nOlByYWN0aXRpb25lciBNZWRpY2FyZSBudW1iZXIifV19LCJpZGVudGlmaWVyIjpbeyJpZCI6IjRkYjRlZTE3LTMyYjgtNDk4My1hZTNhLWIwM2JkZGIyZTUyNTpzdHJpbmc6TUNSIiwidmFsdWUiOiIzMTA2YWRiYi1lOWVlLTRiMmQtOGNkZi1iM2EwZjAxYjYyYmU6c3RyaW5nOjEyMzQ1NiJ9XSwiaXNzdWVyIjp7InR5cGUiOiIxMTVkNmRlNi0zNTRjLTQ2YTktYjVjYi0yY2ZiYTIwOTg3MDA6c3RyaW5nOk9yZ2FuaXphdGlvbiIsInJlZmVyZW5jZSI6ImI2YmNhNjE0LWVmZGMtNDY4My04MWYzLTQ1OGQzMjQ4OGZmZTpzdHJpbmc6dXJuOnV1aWQ6YmM3MDY1ZWUtNDJhYS00NzNhLWE2MTQtYWZkOGE3YjMwYjFlIn19XX19LHsiZnVsbFVybCI6ImY4YjFhNzI4LTc5YmYtNDJkMS1iMzRiLThmZmQ2ZTMzNmIxODpzdHJpbmc6dXJuOnV1aWQ6YmM3MDY1ZWUtNDJhYS00NzNhLWE2MTQtYWZkOGE3YjMwYjFlIiwicmVzb3VyY2UiOnsicmVzb3VyY2VUeXBlIjoiY2Y5NDEyZWQtNzM4Ny00YTIzLTk4ZTktNDIxMjRhNTVlZGZkOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiMmVlODJkNmEtMTc5Zi00YWEwLWE2YjktOTg4MzNhZmQzYWZkOnN0cmluZzpNaW5pc3RyeSBvZiBIZWFsdGggKE1PSCkiLCJ0eXBlIjpbeyJjb2RpbmciOlt7InN5c3RlbSI6IjQzZGVlMjMxLWJjYzMtNDgwMC1hMjA2LWQ4YTI0ZWI1NTFiYjpzdHJpbmc6aHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9vcmdhbml6YXRpb24tdHlwZSIsImNvZGUiOiJjZDU4YjMxZi04MWZkLTQzOGYtOGU3ZS0yYjE2YTczN2I1ZjU6c3RyaW5nOmdvdnQiLCJkaXNwbGF5IjoiMGY4M2Q0YmEtY2ZmYi00ODg1LTlhMTQtZDA0YWIxYjQ2ZTIyOnN0cmluZzpHb3Zlcm5tZW50In1dfV0sImNvbnRhY3QiOlt7InRlbGVjb20iOlt7InN5c3RlbSI6IjllMTk1ODQ1LWM2NjQtNGQzNy1hZGZmLWUxM2QzMWY4YzgyMTpzdHJpbmc6dXJsIiwidmFsdWUiOiJhNThhMDllMC00MjExLTQ4ZGYtOTQzMi00ZWZjZWViNGY3ZWI6c3RyaW5nOmh0dHBzOi8vd3d3Lm1vaC5nb3Yuc2cifSx7InN5c3RlbSI6ImJlMGEyYWI4LTNmZjYtNDBiOS05YjkwLTg1MjUyZTFmOTMyZjpzdHJpbmc6cGhvbmUiLCJ2YWx1ZSI6IjIxMTI4MDQ4LWZiNjUtNDYzNS04MDEyLTViNDRkNTMwZTkxMDpzdHJpbmc6KzY1NjMyNTkyMjAifV0sImFkZHJlc3MiOnsidHlwZSI6ImMyN2FjZGM4LTA2NTktNDE3Mi05YjU2LWE2MWU3ZjQ1MWExNDpzdHJpbmc6cGh5c2ljYWwiLCJ1c2UiOiJkNWVjODU5YS1kNzZlLTRlZWItYjE0MS00ZjUwNzliYmM2OTY6c3RyaW5nOndvcmsiLCJ0ZXh0IjoiMzFhYWNiOWYtMDc5Zi00OTdhLTgxNTUtZjFjNDNhOGZhMzk1OnN0cmluZzpNaW5pc3RyeSBvZiBIZWFsdGgsIDE2IENvbGxlZ2UgUm9hZCwgQ29sbGVnZSBvZiBNZWRpY2luZSBCdWlsZGluZywgU2luZ2Fwb3JlIDE2OTg1NCJ9fV19fSx7ImZ1bGxVcmwiOiI2OWZkNmZiYi1iMGRhLTQ3ZDktYWEyNC0zMWFjNTY1NDI4Nzg6c3RyaW5nOnVybjp1dWlkOmZhMjMyOGFmLTQ4ODItNGVhYS04YzI4LTY2ZGFiNDY5NTBmMSIsInJlc291cmNlIjp7InJlc291cmNlVHlwZSI6IjFlZjA2M2RlLTI3NmEtNDkyNS05MzUyLWNlZmM5NjM3ZWI2MDpzdHJpbmc6T3JnYW5pemF0aW9uIiwibmFtZSI6IjNmYzQ0Y2MwLWViMzQtNGY2Ny1hNzU4LTMyYjY4ZTZlZTBkNjpzdHJpbmc6TWFjUml0Y2hpZSBNZWRpY2FsIENsaW5pYyIsInR5cGUiOlt7ImNvZGluZyI6W3sic3lzdGVtIjoiN2ViNWJmOTQtNDAzMC00MTlhLWE1YTAtY2RiM2Q5NzQyNWFkOnN0cmluZzpodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL29yZ2FuaXphdGlvbi10eXBlIiwiY29kZSI6IjZhNzU3Yzc2LWNlNTQtNGVkZi05ZGE0LTlmZWFjYWFmZWFiOTpzdHJpbmc6cHJvdiIsImRpc3BsYXkiOiJlNDE0OGY3OS05Y2YxLTQ5MzctYjJkYy00MmUzYjg3MjhiYjc6c3RyaW5nOkhlYWx0aGNhcmUgUHJvdmlkZXIifV0sInRleHQiOiIyNTI2MzBjNS1jYmNlLTRiMDMtYTc0MC1kMjRhMTBhODY3MDg6c3RyaW5nOkxpY2Vuc2VkIEhlYWx0aGNhcmUgUHJvdmlkZXIifV0sImNvbnRhY3QiOlt7InRlbGVjb20iOlt7InN5c3RlbSI6ImI4YmYyYmFmLTNkMGEtNDRjOS1iYThiLTNhNGFjYzVjMGM4MTpzdHJpbmc6dXJsIiwidmFsdWUiOiJmZjc2MDc0Mi0wMDNhLTRlY2ItODY4NS0xY2Y5MDQ4YjQxZTk6c3RyaW5nOmh0dHBzOi8vd3d3Lm1hY3JpdGNoaWVjbGluaWMuY29tLnNnIn0seyJzeXN0ZW0iOiJlODI5ZTFlNi04MGMzLTRhMmUtODRlMi02NTNjYjdkYzQ4NGI6c3RyaW5nOnBob25lIiwidmFsdWUiOiIzZGNkYTAxNi1mNTI0LTRmMDgtODBmNy0xMmMyN2IwNmI4NmM6c3RyaW5nOis2NTYxMjM0NTY3In1dLCJhZGRyZXNzIjp7InR5cGUiOiJmOWM3NmIxZC1hZDg1LTQyNWYtYjRhZi01NDA5MzAxNzk1MWI6c3RyaW5nOnBoeXNpY2FsIiwidXNlIjoiNDZkODc5NzEtOGZlMy00YmNiLTkxNTAtMDIxYmQ0MjEyZWU1OnN0cmluZzp3b3JrIiwidGV4dCI6ImM3NTlhYjkwLTIwNTMtNDE1MC05M2NhLTQyNGIxNWZmNjU4MjpzdHJpbmc6TWFjUml0Y2hpZSBIb3NwaXRhbCwgVGhvbXNvbiBSb2FkLCBTaW5nYXBvcmUgMTIzMDAwIn19XX19LHsiZnVsbFVybCI6IjdmMTE3OTg4LWE1ZWUtNDA5Yy1hZmY4LTZiMmYwZWIxOThhMDpzdHJpbmc6dXJuOnV1aWQ6ODM5YTdjNTQtNmI0MC00MWNiLWIxMGQtOTI5NWQ3ZTc1Zjc3IiwicmVzb3VyY2UiOnsicmVzb3VyY2VUeXBlIjoiZGIxNmQyMGYtZjljOC00NDkwLWI1NDAtNjJiYzM4NWZlOTRhOnN0cmluZzpPcmdhbml6YXRpb24iLCJuYW1lIjoiMmU3Mjg0ZTEtOWVjNS00ZjU5LWE1YTAtODU3ZmYyYzE5ZWI0OnN0cmluZzpNYWNSaXRjaGllIExhYm9yYXRvcnkiLCJ0eXBlIjpbeyJjb2RpbmciOlt7InN5c3RlbSI6ImJjODViY2ZkLWY5NWEtNDVhMi1hOTg5LWQ4MzMzNGQzYTcwZDpzdHJpbmc6aHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9vcmdhbml6YXRpb24tdHlwZSIsImNvZGUiOiIzM2EzY2NmNy0wODc1LTQzYWItOWJlMC01NzRmMmRlYzQ1YjY6c3RyaW5nOnByb3YiLCJkaXNwbGF5IjoiNzY1YWQ2Y2MtMTMwMS00NTc5LTlkOWItNGNiYjM4NTI0YzllOnN0cmluZzpIZWFsdGhjYXJlIFByb3ZpZGVyIn1dLCJ0ZXh0IjoiYTQyOTUxY2MtZWIxNC00MDg4LWJlYTgtYThmZjg0MjliNzhkOnN0cmluZzpBY2NyZWRpdGVkIExhYm9yYXRvcnkifV0sImNvbnRhY3QiOlt7InRlbGVjb20iOlt7InN5c3RlbSI6IjFhNWIyMTQyLTUxNGEtNDA3Zi1iOTc5LTY3ZjJiYzI3NzMwMDpzdHJpbmc6dXJsIiwidmFsdWUiOiJjYThmZjg4Zi01MjlmLTQwZTYtODA2NC00OGQ2NTAxNzk0MzA6c3RyaW5nOmh0dHBzOi8vd3d3Lm1hY3JpdGNoaWVsYWJvcmF0b3J5LmNvbS5zZyJ9LHsic3lzdGVtIjoiNzY2YzM5YzEtYmZiMS00MjI3LTkxNTEtYTA1ZDJkNzBmM2M5OnN0cmluZzpwaG9uZSIsInZhbHVlIjoiMzUxZDFjNTUtODg0MC00OTBiLTkyYWItN2NhMjY5MzdjMTdhOnN0cmluZzorNjU2NzY1NDMyMSJ9XSwiYWRkcmVzcyI6eyJ0eXBlIjoiZDJlMDBkYmYtZGYxMy00NDQyLWFhOTYtMTg4MTRlMTdjOGNjOnN0cmluZzpwaHlzaWNhbCIsInVzZSI6IjJiMWE5N2YwLTJiMDQtNGVjYi1hMGU3LTU1NmI0MmVhMzM2ZjpzdHJpbmc6d29yayIsInRleHQiOiIzYTkxYTU5ZS1lNjUyLTRmMGEtYTNkYy00OWUwMTViNTE1NGM6c3RyaW5nOjIgVGhvbXNvbiBBdmVudWUgNCwgU2luZ2Fwb3JlIDA5ODg4OCJ9fV19fV19LCJpc3N1ZXJzIjpbeyJuYW1lIjoiYWJjZTIxYTUtOTMxYS00ODQxLWJhMWEtNzIxZTgzZmRmZDMyOnN0cmluZzpTQU1QTEUgSVNTVUVSIChETyBOT1QgVkVSSUZZKSIsImlkIjoiOWY3ZTUzMmYtNjI4OC00NDhkLWExMDktZmQ5ZjI3ZjYzNmI0OnN0cmluZzpkaWQ6ZXRocjoweEUzOTQ3OTkyOENjNEVmRkU1MDc3NDQ4ODc4MEI5ZjYxNmJkNEI4MzAiLCJyZXZvY2F0aW9uIjp7InR5cGUiOiJiYTA0ZTIzNi05OTg0LTQzOWEtYmVjMi00Y2RkNTc2ZWViMDY6c3RyaW5nOk5PTkUifSwiaWRlbnRpdHlQcm9vZiI6eyJ0eXBlIjoiNjcwYmQxNmItNWI1Ni00Mjg0LTg2N2EtNTRiNjk3YzA1ZWE1OnN0cmluZzpETlMtRElEIiwibG9jYXRpb24iOiIyMjZjZTcyZS01NzZiLTQ2ZjktYTcyMi1jMGU1Y2E4ZDEzNmE6c3RyaW5nOmRvbm90dmVyaWZ5LnRlc3RpbmcudmVyaWZ5Lmdvdi5zZyIsImtleSI6IjEwMjM1OGYyLTNkMDQtNDMwNy1hYzc3LWM1YTNmZTdiMTgzYTpzdHJpbmc6ZGlkOmV0aHI6MHhFMzk0Nzk5MjhDYzRFZkZFNTA3NzQ0ODg3ODBCOWY2MTZiZDRCODMwI2NvbnRyb2xsZXIifX1dLCIkdGVtcGxhdGUiOnsibmFtZSI6ImJkZjBiZWFlLWY4ZTEtNDRhYS1hZmUzLWYwMTE3NjUwNTM4YjpzdHJpbmc6SEVBTFRIX0NFUlQiLCJ0eXBlIjoiMDc0MjEyZmQtZjIxNC00Mzk3LThhMTYtOTQ1MWE2NjAyOGU0OnN0cmluZzpFTUJFRERFRF9SRU5ERVJFUiIsInVybCI6IjgxZDQxZGM3LWJjMDQtNDA4Ni1hNGU1LTdiNzlkNTY1Yzg5YTpzdHJpbmc6aHR0cHM6Ly9oZWFsdGhjZXJ0LnJlbmRlcmVyLm1vaC5nb3Yuc2cvIn0sIm5vdGFyaXNhdGlvbk1ldGFkYXRhIjp7InJlZmVyZW5jZSI6ImZlZjY4OTZiLTc4Y2MtNDI3MC04NmYzLTU0MTg3NDFkOGM3ZjpzdHJpbmc6YzIzNTZlM2ItOTAwOS00MjIwLWExY2MtMWFmOGQzNDIwZGFkIiwibm90YXJpc2VkT24iOiJmYjQ3M2M1Mi0zM2NjLTQ0ZTUtYmUxYy03NTA0N2IyZGFhMWU6c3RyaW5nOjIwMjEtMDgtMjRUMDU6MDk6NTkuMjk5WiIsInBhc3Nwb3J0TnVtYmVyIjoiMmUwYjlhMWUtYjYwOC00NWQyLWFlMjYtNGQwY2EyYTI1NTBkOnN0cmluZzpFNzgzMTE3N0ciLCJ1cmwiOiI1M2VjMWVhYS0xNGQ0LTQ4NTAtOTg1OC0xMzIwMDIxNGZjZTU6c3RyaW5nOmh0dHBzOi8vYWN0aW9uLm9wZW5hdHRlc3RhdGlvbi5jb20vP3E9JTdCJTIydHlwZSUyMiUzQSUyMkRPQ1VNRU5UJTIyJTJDJTIycGF5bG9hZCUyMiUzQSU3QiUyMnVyaSUyMiUzQSUyMmh0dHBzJTNBJTJGJTJGYXBpLXZhY2NpbmUuc3RvcmFnZS5zdGFnaW5nLm5vdGFyaXNlLmlvJTJGZG9jdW1lbnQlMkYxMTFkMDI3YS1lOGRjLTRlNDQtODkyNC1jNDFjZDcwN2VhYzYlMjIlMkMlMjJwZXJtaXR0ZWRBY3Rpb25zJTIyJTNBJTVCJTIyVklFVyUyMiUyQyUyMlNUT1JFJTIyJTVEJTJDJTIycmVkaXJlY3QlMjIlM0ElMjJodHRwcyUzQSUyRiUyRnd3dy52ZXJpZnkuZ292LnNnJTJGdmVyaWZ5JTIyJTdEJTdEIyU3QiUyMmtleSUyMiUzQSUyMmZhMzVkNGI3MzViNmQ1MDMyN2M5N2YwMDgyNzEyOTk5Y2ZhNjQyYmI4MzAyNWY0ODczM2U1ZjIyMzA2NmQ5NmYlMjIlN0QifSwibG9nbyI6ImUyMmRhMDkzLTY2NzgtNDI0ZC1hZTQyLTg1MTI5YzMyZWUyMjpzdHJpbmc6ZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFmUUFBQURJQ0FNQUFBQXB4K1BhQUFBQU0xQk1WRVVBQUFETXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNek16TXpNemVDbWlBQUFBQUVIUlNUbE1BUUwrQTd4QWduMkRQM3pCd3IxQ1BFbCtJL1FBQUJ3ZEpSRUZVZU5yc25kMTIyeW9RUnZrSElTSE4rei90eVVrOW9URUNRMWJUQmMyM2J5TnMwQjVHSURBUkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFrK0lrK0lkeDRnNU40QjlHUS9yUEE5Si9JUGZTZ3dML01FRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEd1A1WlBvUDVyN0ZKS0FmN2N1ZkJpaFBOU2tYNWhsQTl1K0RzUDdkWC9KSzFQMlZQaVNJb2ViRXJMd1ZoNVp4KzhDMVkyMll0UDBGcGY2aGRlYSttcTFXbGl4ZmVqNlJjRHhqMDlzd1hiYmVCUXBpanVnMjBhai9TRThidm81aEV1YXZBdVNLcFFmSnhURzkxZ1VyQ1Y2alNRRTBvUGtlNHd1a2U3MDVFcXBMTld4dE10U2s0anZYR2xkK3RMbHh2Vk1ObmFrRDdtRW5kWVRWV1NuVjg2MFdVWGwzNFJNeTdCZW1weUd6TjdwQWJtWEVBNmJmdkswdTMydVRGS0tWTTByMFl3MU1UY0Z2cDhpVkxQRDArOWdIUXkrN3JTZjNlZWpwMkh1RmNzbWxkaUV6MEZ6S1hmU1J3M3FlMDhYcWQ5ZFA2UUtPTm5rdTRsRzNOU2IvUkJ0S3RLdDF0dGRCSmlZYjJWSTdicmM3dGM4SVlvdEp6SFVCMGMrTytUM3JUUXVMS3NaUnFwemtUUzdkWkk0dm8rcUpuZEVHTzhFemVjeWphYzYvSVROMktPV2FVTElUL2FMZGVVbnFwZGk3VlcyK0t5YzI5RkwzczdlM2hpNUxUU2hlV1dweVdsSDRYem12V2puaU9pRk4zWVdEaXZXSTkyV3VrNWN0MkMwcDNKemw5WU42NldJNUlWL1Z5Rjg2cjFhMTdwSDVVTUMwcFgvRHdYVlU1MjRLczVZZ0RabUw0ekd6MXc4MHAzM1BqMXBNdmNpK3RjMmNGSWptaEgyZFdWZnVhVkx1TGp5OWVUemdxT3JxZXd2MHZ1bS8xS1I0KzJhNkRoNXBYTzdWOU8rczRLUkpQQUR1eE5qdGpGQ0NrL0NsdEV6Z2Z6U3RlclN2ZFpRWmVEb3l5cXhRZ3VSMWxYbUJsSS85UFNlYlpwYk9lOGJpdnQyYkZLOVlhSzRlSGU3TkxOYXRMUDNxR1lMZkw3MVJvTXZCNlh1OTZKM1RXdDlMVG9RTTV6bThZZnhiSElFU1BaWFhXL3RvdlRTbytQcUZ4TmVzd1pxak8vWDA5T3ZCZ2k5T2NIdzdsbFV1a2N2K2RpMHJuZXFmOTl1WG9LZ2xNTXdhbGw3eC9teTBtbFA1cGlWbnYzZnVaKzE5M3hucFRZTHozU2plalBMWHBPNlR0WGJ6WHBmSVVjZUpIbVBzWEFKc2JJK2FMN2Z2c3BwVnNPWDd1YWRKOUZ2dVQ2M1B4c1pBUTNVTXh5Z0x5V3ZzazYvbHVrdTQwZmI4dHRvbERGRmIxWlFRNi9tUmt2MWlXOWkxSjZDLzFhZWpBY3ZRUFZtVXQ2RkIyY24yNkp6RE80VHNhTGNXZWFUYm83SW4wNFgwODY5Nlh4VG5ya216R0NIaW1tSnBMdU5hUGk3MWYrS09rdGU1SUs5T3JTNzRpbmdQU2ZKZDFvSVNEOVowbS9oUGhCMG8rL0xkM01NR1VyU1U2OHM5eVV6WFNPM3N1aFcrQmgrSmowb3l6MnNuWnFncGN6ZDVpd3B2UnZtS2ZYcFkvUDB5ZVNmc2dIT2hsaXd0TFM3Y0JTaVIxYVpGUDMwcStCdDNmWGJLOWhRMlRyKzRyU2MrOGRmbFhDTzJsNnBZK1BJczVwRjF4czRrbWJYVkI2ejBKV1JSZEgrNkIwdzhWZW95ZGVXbFY4NHhhVUxudlgwOHZFek5uK0hKT3UrdGZUMWNTYktQTGV3dldrYy9jMS9ZdHM0U2xKK0RIcHVuc0YzMDY5WFNydzdWaFFlbDRnSE4zUXVITzhqRWsvTzhjQytVby9wWFIrdkcwTFNuL1pYeGxYeUlvYzYwUFNoZWxkd3ZkemI0SFczSTcxcE8vMHdIWXFPSXA4djQxSlQ1MlROamY1angyNGZtRTk2V0xyRzcvYnNvTTZlaENHcEo4czAvWlYzazhxblRPZFgxQjY2SE9nYjRiNUtSZnRsNTRmQzdvdnl2WlpwWHQ2Snk0bzNacWVkT3ZNVGRzbFBVaEQwcmxXeHZWTUZ0UzBQMVVPblB2V2s4NFhkYjBESVhXL2tIaU1TTGVtN3JNTUtEbXQ5SjBIbWd0Sy8zQmc3R2hnT0dMQ2dQVDhhZnAxcGRURXg0ODg2bmd0S0YyYzlPcHNnVkRiT0tDSk9RYWtpKzFWckZpK3dyaUpwZk5hL29yU2hjclcyODZqTFlzeXlmWkxsOFNFdG5NNjVqMVNMSCt3WFZHNmpjMERZSTk4NkZ1aktKblFMVjBjMU1ydzdzTzVuL2Z3d0Rma29qOWdmRDRvemh5RkFVVk1xQlJsWXJDZDBvVW5ScmtpeUV6T1BGTkxGelR6VDVWbEJYZDNPbThvemtCdE9PZERQWmtVOWs5L1BDcExrSGFyblpVZkloWE92MC82SVN2MFNPY3ZqLzFiOXR6ZmtONUczeDdlYmRJaDM0V2ZGNnRwRHJyWUs2UFVwZC80ZkpTM2JwWGFydE9KTitTUkRCWE92MGw2bTZFeloxejM1bHc5azNSTzAxV01GQlU0SDQrMjFsTWJiOFhzMHZsdllWSHAzUFVxS0NjYU9EVXNuYk5MU1I1Y1RDK2RaK3BwVmVsQ25LYTExN2VOVE5Ra1NWRmlVMnRQK1FyU09WdlpaYVVMcXd2dFBDaC9qZE1iM1JOOTlRT2tvanY4THNRUzBrL083K3RLZitOTVQ5Nk5QMFV2THZpblJtOUpuMjR3VnJiRENiR0lkRjR4VkJOSi94SlNlNlVlby9Cai85SS83RHkwUHZybkp5NW9wU0lSUlpYMGFRVUFBUHpYM2gzVUFBQ0FRQXg3WUFEL2FuRkJDTmRhbUlBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBREFtbW9lSzlIemlCNUk5RUJYbng4QUFBQUFBQUFBQUxCbUFJWktteldJbnh5T0FBQUFBRWxGVGtTdVFtQ0MiLCJhdHRhY2htZW50cyI6W3siZmlsZW5hbWUiOiJmNjNkYTlhNi1lYWQ4LTQ5MTQtYmYyZS1lMmFiMzA2ZmNkZGY6c3RyaW5nOmhlYWx0aGNlcnQudHh0IiwidHlwZSI6ImI2MDRlNjE4LTc4N2QtNGVkNy04MzkyLTljNjExOTVkMzY5ZDpzdHJpbmc6dGV4dC9vcGVuLWF0dGVzdGF0aW9uIiwiZGF0YSI6ImNkMGJlNGZiLTYxNjUtNGFhNS1iMDVmLTdlMmU4MTM1MTgwZDpzdHJpbmc6ZXlKMlpYSnphVzl1SWpvaWFIUjBjSE02THk5elkyaGxiV0V1YjNCbGJtRjBkR1Z6ZEdGMGFXOXVMbU52YlM4eUxqQXZjMk5vWlcxaExtcHpiMjRpTENKa1lYUmhJanA3SW1sa0lqb2lORGhtTXpsbU5qQXROR0l5WVMwME1HRmtMVGhrWmpBdE1USmhNVGRoWldZd09UWTNPbk4wY21sdVp6bzNObU5oWmpObU9TMDFOVGt4TFRSbFpqRXRZamMxTmkweFkySTBOMkUzTm1SbFpHVWlMQ0oyWlhKemFXOXVJam9pWm1JNE9HUXlaak10TW1RM1lTMDBOemxqTFRrMU5ERXRNbVV4WmpZMU5tWmlaalZsT25OMGNtbHVaenB3WkhRdGFHVmhiSFJvWTJWeWRDMTJNaTR3SWl3aWRIbHdaU0k2SW1RNFkyUmhZekJpTFdJMlptSXROR00zTXkxaU16TTJMVE01TXpjNVpHWTNPRGsyTnpwemRISnBibWM2VUVOU0lpd2lkbUZzYVdSR2NtOXRJam9pTVdZNU9XRmxZMkV0WXpZd1pTMDBOelk1TFdJM09HWXRNV0kxTW1FME5tUmlaR0ZoT25OMGNtbHVaem95TURJeExUQTRMVEkwVkRBME9qSXlPak0yTGpBMk1sb2lMQ0ptYUdseVZtVnljMmx2YmlJNklqVmxaVFZtTW1ZMUxUTTBNalF0TkdNeVppMDRNRFE1TFdGak56Z3lPVFE1TlRnek1UcHpkSEpwYm1jNk5DNHdMakVpTENKbWFHbHlRblZ1Wkd4bElqcDdJbkpsYzI5MWNtTmxWSGx3WlNJNkltWTNPRFkwWm1ReExUbGpOak10TkRFM1lpMDRaakJrTFdOaE56aG1aVEF4WVdOak9UcHpkSEpwYm1jNlFuVnVaR3hsSWl3aWRIbHdaU0k2SWpVMU9XWmxNV0kwTFRkbVpXVXROR0kxTnkwNVlXWmhMVFF3TkRZd1pXRmxNV1JsTmpwemRISnBibWM2WTI5c2JHVmpkR2x2YmlJc0ltVnVkSEo1SWpwYmV5Sm1kV3hzVlhKc0lqb2lPREppWVdNeU5XWXRaV1EzTkMwME4ySmpMV0UyWkRJdE9XVTNZVGRrTm1JeVpqbGpPbk4wY21sdVp6cDFjbTQ2ZFhWcFpEcGlZVGRpTjJNNFpDMWpOVEE1TFRSa09XUXRZbVUwWlMxbU9UbGlObVJsTWpsbE1qTWlMQ0p5WlhOdmRYSmpaU0k2ZXlKeVpYTnZkWEpqWlZSNWNHVWlPaUl4T0RFME1UZzJOaTA1WkRjeExUUXpOMkV0WVRnMlpTMDVORGt4Tm1SaU9EZzNZbUk2YzNSeWFXNW5PbEJoZEdsbGJuUWlMQ0psZUhSbGJuTnBiMjRpT2x0N0luVnliQ0k2SWpGaU1XTmtOR0ZsTFdZMFlUTXRORE0yWmkwNE9ERTFMVGc0TVdRM1lUTmpNemhtT0RwemRISnBibWM2YUhSMGNEb3ZMMmhzTnk1dmNtY3ZabWhwY2k5VGRISjFZM1IxY21WRVpXWnBibWwwYVc5dUwzQmhkR2xsYm5RdGJtRjBhVzl1WVd4cGRIa2lMQ0psZUhSbGJuTnBiMjRpT2x0N0luVnliQ0k2SWpJd09HVTNZelF5TFRabE5qY3ROREZsT1MwNE9UWmlMVEEzWkdZMk1XVmxOR1pqWXpwemRISnBibWM2WTI5a1pTSXNJblpoYkhWbFEyOWtaV0ZpYkdWRGIyNWpaWEIwSWpwN0luUmxlSFFpT2lJd01XVXpPRGRtWVMxa1pERmxMVFEyWXpBdE9XWTVZUzFrWmpoalpqYzJZemN4TmpRNmMzUnlhVzVuT2xCaGRHbGxiblFnVG1GMGFXOXVZV3hwZEhraUxDSmpiMlJwYm1jaU9sdDdJbk41YzNSbGJTSTZJakF3TVdJd09HWTRMV1U0WkRndE5HTm1aaTFoT1RZMkxXVTFaVFk1T0RGa1ltVmlZVHB6ZEhKcGJtYzZkWEp1T21semJ6cHpkR1E2YVhOdk9qTXhOallpTENKamIyUmxJam9pWmpOak56VTFZVE10TkRrMU5TMDBOVGM0TFRobVpqZ3RPR1F6TXpNMVl6WTVObVU0T25OMGNtbHVaenBUUnlKOVhYMTlYWDFkTENKcFpHVnVkR2xtYVdWeUlqcGJleUpwWkNJNklqQTBaalJpTW1VMUxUVXpZV1l0TkdFMk1DMWhOVGc1TFRobU5UazJaREJqTlRrNVpqcHpkSEpwYm1jNlVGQk9JaXdpZEhsd1pTSTZleUpqYjJScGJtY2lPbHQ3SW5ONWMzUmxiU0k2SW1VNVlUWmpNemcyTFdJeVlqQXROREJoTXkxaE5XRTFMVGxoWkdFNFpXTm1NREUxTlRwemRISnBibWM2YUhSMGNEb3ZMM1JsY20xcGJtOXNiMmQ1TG1oc055NXZjbWN2UTI5a1pWTjVjM1JsYlM5Mk1pMHdNakF6SWl3aVkyOWtaU0k2SWpkaVpXVTBNRGc1TFdSalpESXRORGRpWXkxaU1qYzBMVEE0WW1RMlpEaG1OekJqWWpwemRISnBibWM2VUZCT0lpd2laR2x6Y0d4aGVTSTZJbU14Wm1Vd016Y3pMVFpqWkRJdE5HWmhOUzA0TlRJNUxUbGlNbVk1TnprMU5UWmlOVHB6ZEhKcGJtYzZVR0Z6YzNCdmNuUWdUblZ0WW1WeUluMWRmU3dpZG1Gc2RXVWlPaUpoTVRjNE5tTTVOQzB5WXpSbUxUUXpNRGN0WVdGbU9TMHhaamhsT1RRM01tWmlPV1k2YzNSeWFXNW5Pa1UzT0RNeE1UYzNSeUo5TEhzaWFXUWlPaUkyTlRCbE9XRmpNUzB5T0RCbExUUTVNamd0T0RFellpMWhPVFU1TWpBd1l6azFNRFU2YzNSeWFXNW5PazVTU1VNdFJrbE9JaXdpZG1Gc2RXVWlPaUkxTldNM1l6RTROeTB4WVRZM0xUUmlObVF0WW1FeE5DMDJNR00yTkdaaE1qY3lOR1k2YzNSeWFXNW5PbE01TURrNE9UZzVXaUo5WFN3aWJtRnRaU0k2VzNzaWRHVjRkQ0k2SW1ZM056VXlZalEwTFdSa1pqRXROR001WkMwNU5qTmpMV1F5TkRoaFkyWTJaR1EzTWpwemRISnBibWM2VkdGdUlFTm9aVzRnUTJobGJpSjlYU3dpWjJWdVpHVnlJam9pWkRjeFptTmlOMkV0WldFM1l5MDBZemN6TFdJMU1qUXRZMlkxTnpjM01HTTJOMkk1T25OMGNtbHVaenBtWlcxaGJHVWlMQ0ppYVhKMGFFUmhkR1VpT2lJNVpXSTJNREZtWWkxa01UTXpMVFF6Wm1ZdFlqWm1aQzFsTW1JelpqSTJaRFExWWpJNmMzUnlhVzVuT2pFNU9UQXRNREV0TVRVaWZYMHNleUptZFd4c1ZYSnNJam9pWW1ZM01qUTVaVEl0TTJReVlTMDBNVEV5TFdFMFl6Y3RaR0kwT0RCa056UXhaV1ptT25OMGNtbHVaenAxY200NmRYVnBaRG8zTnpJNU9UY3daUzFoWWpJMkxUUTJPV1l0WWpObE5TMHpObUUwTW1Wak1qUXhORFlpTENKeVpYTnZkWEpqWlNJNmV5SnlaWE52ZFhKalpWUjVjR1VpT2lKa00yTXdabUZtTXkxaU5ERmhMVFF6WXpBdE9XVXpOUzB3TXpBNE5XUXdOR1V5WkdRNmMzUnlhVzVuT2s5aWMyVnlkbUYwYVc5dUlpd2ljM0JsWTJsdFpXNGlPbnNpZEhsd1pTSTZJbU5oWmpjNE1tTXdMV1JqTm1ZdE5EUmhOQzFpWWpZNExUVTBPRGszTVdKak1EbGtOanB6ZEhKcGJtYzZVM0JsWTJsdFpXNGlMQ0p5WldabGNtVnVZMlVpT2lKbU5HTTJOV1V5TXkxak5tWmtMVFF4TnpndE9UazROUzFrTURoa1kyRmtNMlU0TkRBNmMzUnlhVzVuT25WeWJqcDFkV2xrT2pBeU56VmlabUZtTFRRNFptSXRORFJsTUMwNE1HTmtMVGxqTlRBMFpqZ3daVFpoWlNKOUxDSndaWEptYjNKdFpYSWlPbHQ3SW5SNWNHVWlPaUptWTJKaU9EVmpaUzB3WXpFeExUUXlaR010T0RaaE5pMDRaREprTldVNVlUa3daakU2YzNSeWFXNW5PbEJ5WVdOMGFYUnBiMjVsY2lJc0luSmxabVZ5Wlc1alpTSTZJbUprTUdRd09EUTRMVE5pWVdNdE5EQmlZeTA1TUdFMkxUUXlNV1F5TlRRMU1EYzBaanB6ZEhKcGJtYzZkWEp1T25WMWFXUTZNMlJpWm1Zd1pHVXRaRFJoTkMwMFpURmtMVGs0WW1ZdFlXWTNOREk0WWpoaE1EUmlJbjBzZXlKcFpDSTZJalkxWW1WbFpUTXlMV0prWVdJdE5HWXlOQzA0TWpneExUTTJZbVJpWmpsbFlUazBaVHB6ZEhKcGJtYzZURWhRSWl3aWRIbHdaU0k2SW1JNE5tUTJaVFkzTFRsak1UVXROR1kwTlMxaE5qazBMVGRsTWpKaE56UmtaakUyTWpwemRISnBibWM2VDNKbllXNXBlbUYwYVc5dUlpd2ljbVZtWlhKbGJtTmxJam9pT0dRMk5qZzVORGd0TUROa1lTMDBPR0kzTFdGa01ETXRPVGMyWmpNeFptVmlNR1ZqT25OMGNtbHVaenAxY200NmRYVnBaRHBtWVRJek1qaGhaaTAwT0RneUxUUmxZV0V0T0dNeU9DMDJObVJoWWpRMk9UVXdaakVpZlN4N0ltbGtJam9pWVdNMU1qRXdOek10TkdabU55MDBaVFF3TFRrM1l6SXRaamsxTVdabU5UQTRPVEl4T25OMGNtbHVaenBCVENJc0luUjVjR1VpT2lJek1UVXhPV0UxTVMwd056QTBMVFF6TXpFdFlXRTJZeTB5TkRFMk9ERTNaVFpqWlRZNmMzUnlhVzVuT2s5eVoyRnVhWHBoZEdsdmJpSXNJbkpsWm1WeVpXNWpaU0k2SWpaak4yVmpNakExTFdJNE16TXRORFE0TlMwNU5UZ3pMVEkzWlRaaE4yTTRaalJtTVRwemRISnBibWM2ZFhKdU9uVjFhV1E2T0RNNVlUZGpOVFF0Tm1JME1DMDBNV05pTFdJeE1HUXRPVEk1TldRM1pUYzFaamMzSW4xZExDSnBaR1Z1ZEdsbWFXVnlJanBiZXlKcFpDSTZJbUpsTldWa1pXSXhMVFJsT0RrdE5EVTVNQzA0TnpsbUxUUXhaR0k1TW1JMk16VmlORHB6ZEhKcGJtYzZRVU5UVGlJc0luUjVjR1VpT25zaVkyOWthVzVuSWpwYmV5SnplWE4wWlcwaU9pSmlNbUptTkRreU1pMDBaVEEyTFRReU1ESXRZakEzT0Mwd1pUTXhaVEV5T0dVNFl6STZjM1J5YVc1bk9taDBkSEE2THk5MFpYSnRhVzV2Ykc5bmVTNW9iRGN1YjNKbkwwTnZaR1ZUZVhOMFpXMHZkakl0TURJd015SXNJbU52WkdVaU9pSmlPVEppT0RFMk1pMWhORGMyTFRSak9EQXRPREpoWXkwNE5ESXdNR1V6WXpZME16VTZjM1J5YVc1bk9rRkRVMDRpTENKa2FYTndiR0Y1SWpvaU5UQXhOVEppWmpFdE4yWmlNUzAwWkROaExUazNOMk10T0dJMk5Ea3haR0ZtTURVek9uTjBjbWx1WnpwQlkyTmxjM05wYjI0Z1NVUWlmVjE5TENKMllXeDFaU0k2SWpReE1ERm1OR1kyTFRKbFlUWXRORGxsWWkxaFlqTTBMVEJqTlRoak4yVXlZbVkwWmpwemRISnBibWM2TVRJek5EVTJOemc1SW4xZExDSmpZWFJsWjI5eWVTSTZXM3NpWTI5a2FXNW5JanBiZXlKemVYTjBaVzBpT2lJNFlqWXdaREkyWVMxbU1UZzRMVFJpWmpZdFlqSmhNQzAzTm1Rek1HVTJOREl3WTJVNmMzUnlhVzVuT21oMGRIQTZMeTl6Ym05dFpXUXVhVzVtYnk5elkzUWlMQ0pqYjJSbElqb2lOVGxqWkRFM05UWXRZMkZsTWkwMFpqSmlMV0l4TVRBdE9XRmlaVEF4TUdWak0yRTRPbk4wY21sdVp6bzROREExTXprd01EWWlMQ0prYVhOd2JHRjVJam9pT0dFNU1qQTBNemN0TTJFeFppMDBPR0l6TFdFNFlUVXRZVGs1TXprNU1XTXdZelZoT25OMGNtbHVaenBEVDFaSlJDMHhPU0o5WFgxZExDSmpiMlJsSWpwN0ltTnZaR2x1WnlJNlczc2ljM2x6ZEdWdElqb2lOalppWVdVMFl6SXROak13WkMwMFlUVTJMVGxsWTJNdE9UZzNOemxsT1dSak5EVmhPbk4wY21sdVp6cG9kSFJ3T2k4dmJHOXBibU11YjNKbklpd2lZMjlrWlNJNklqazBZVE0yT1RSbUxXSmxOemN0TkdNeVlpMDVORFJoTFRZNE5HRmtZekl4WkdNM016cHpkSEpwYm1jNk9UUTFNekV0TVNJc0ltUnBjM0JzWVhraU9pSTJNVGRoTVRKaVlTMDFPRGxrTFRSbU56WXRPVEJoWXkxaU1qZGlNV1V4T1RjMk1EWTZjM1J5YVc1bk9sTkJVbE10UTI5V0xUSWdLRU5QVmtsRUxURTVLU0JTVGtFZ2NHRnVaV3dnTFNCU1pYTndhWEpoZEc5eWVTQnpjR1ZqYVcxbGJpQmllU0JPUVVFZ2QybDBhQ0J3Y205aVpTQmtaWFJsWTNScGIyNGlmVjE5TENKMllXeDFaVU52WkdWaFlteGxRMjl1WTJWd2RDSTZleUpqYjJScGJtY2lPbHQ3SW5ONWMzUmxiU0k2SWpReVptWXdZMkkwTFRVellUY3RORGhsTUMwNFpUTTRMV0ZpT1ROaVlUTmlNbVEyWlRwemRISnBibWM2YUhSMGNEb3ZMM051YjIxbFpDNXBibVp2TDNOamRDSXNJbU52WkdVaU9pSTJOVFJrTVRZNE1DMHhaVEkzTFRRME5qRXRZVFZoTVMwNE1XRmhZakE1TTJRNU5UQTZjM1J5YVc1bk9qSTJNRE00TlRBd09TSXNJbVJwYzNCc1lYa2lPaUk1WWpFNU9XWm1ZeTFtWkRsa0xUUXdNbVV0T0RabFppMW1OV0V6TWpjMU1HSXpPR002YzNSeWFXNW5PazVsWjJGMGFYWmxJbjFkZlN3aVpXWm1aV04wYVhabFJHRjBaVlJwYldVaU9pSTFOMlJsTmpnNFppMW1ORFkzTFRSaFlUa3RZVGs1TmkwMk5qVTRNekkyWVRFeFpqYzZjM1J5YVc1bk9qSXdNakF0TURrdE1qaFVNRFk2TVRVNk1EQmFJaXdpYzNSaGRIVnpJam9pWWpka05tWTVaV010TURFMlpTMDBOV0ZrTFdJd09HVXROamczTUdNd1pUVm1ZakUzT25OMGNtbHVaenBtYVc1aGJDSjlmU3g3SW1aMWJHeFZjbXdpT2lJM05UazRaVEF4WXkwelpqSTBMVFE0WW1JdE9ERXpNUzFpT0RrNE56TmhaalEyWlRVNmMzUnlhVzVuT25WeWJqcDFkV2xrT2pBeU56VmlabUZtTFRRNFptSXRORFJsTUMwNE1HTmtMVGxqTlRBMFpqZ3daVFpoWlNJc0luSmxjMjkxY21ObElqcDdJbkpsYzI5MWNtTmxWSGx3WlNJNklqWmpNVE0xTnpWbExUa3lOVFF0TkRnNFl5MDRNemd3TFRReU4yWXdNakJsWVRRNU1qcHpkSEpwYm1jNlUzQmxZMmx0Wlc0aUxDSjBlWEJsSWpwN0ltTnZaR2x1WnlJNlczc2ljM2x6ZEdWdElqb2lNekl6T0dWallqQXRNV1U1TVMwME56STRMV0kyWXpVdE56QTVPRFJtTURZNVpqTXdPbk4wY21sdVp6cG9kSFJ3T2k4dmMyNXZiV1ZrTG1sdVptOHZjMk4wSWl3aVkyOWtaU0k2SWpGbU1UZzNOVFkyTFRFMk1EWXRORFZrTWkxaFpEaG1MV0U0TVdRd1pqZ3hZamMzTkRwemRISnBibWM2TWpVNE5UQXdNREF4SWl3aVpHbHpjR3hoZVNJNklqTXlOR013WVdRMUxUTXdZVEF0TkdRMk9DMWhORGt3TFRZeFpqRmtNMlV4TjJJM1pEcHpkSEpwYm1jNlRtRnpiM0JvWVhKNWJtZGxZV3dnYzNkaFlpSjlYWDBzSW1OdmJHeGxZM1JwYjI0aU9uc2lZMjlzYkdWamRHVmtSR0YwWlZScGJXVWlPaUppWm1KaFpUa3hZeTAwTkRFeExUUXlZbUl0WWprNE9DMWhNMkUxWmpNek5HSmhOekU2YzNSeWFXNW5Pakl3TWpBdE1Ea3RNamRVTURZNk1UVTZNREJhSW4xOWZTeDdJbVoxYkd4VmNtd2lPaUl4TTJJd1pHTTJPQzB5TVdWakxUUXdZemN0T1dKall5MDJZVFF6Tm1abFltVXlPV1U2YzNSeWFXNW5PblZ5YmpwMWRXbGtPak5rWW1abU1HUmxMV1EwWVRRdE5HVXhaQzA1T0dKbUxXRm1OelF5T0dJNFlUQTBZaUlzSW5KbGMyOTFjbU5sSWpwN0luSmxjMjkxY21ObFZIbHdaU0k2SWpoaFlURmtaRFkyTFdRelpqVXROR0l4TXkwNU9EZGpMVGd4WlRNMk5UUTBaR0V4TmpwemRISnBibWM2VUhKaFkzUnBkR2x2Ym1WeUlpd2libUZ0WlNJNlczc2lkR1Y0ZENJNklqZGtPRFJoT0RjeUxUWmlZVEV0TkRJME9TMWlOMkUyTFdFM01URXlOVFpqWldZeU9EcHpkSEpwYm1jNlJISWdUV2xqYUdGbGJDQk1hVzBpZlYwc0luRjFZV3hwWm1sallYUnBiMjRpT2x0N0ltTnZaR1VpT25zaVkyOWthVzVuSWpwYmV5SnplWE4wWlcwaU9pSTBOVFUxTWpobVl5MDVOR0U1TFRSa09HRXRZVEV4TlMxa1lUWXpPVE5qTkRrM1pqVTZjM1J5YVc1bk9taDBkSEE2THk5MFpYSnRhVzV2Ykc5bmVTNW9iRGN1YjNKbkwwTnZaR1ZUZVhOMFpXMHZkakl0TURJd015SXNJbU52WkdVaU9pSm1OalZsWTJabVpTMDFNRFJrTFRSbE5XUXRZak5rTlMwMVl6TXdNekUxWlRjeU5HUTZjM1J5YVc1bk9rMURVaUlzSW1ScGMzQnNZWGtpT2lKbU9HTm1PVEV4TmkwM056WmlMVFE1TWpjdE9HRXdZUzAwTldWaU1qRmlaREJqTkdJNmMzUnlhVzVuT2xCeVlXTjBhWFJwYjI1bGNpQk5aV1JwWTJGeVpTQnVkVzFpWlhJaWZWMTlMQ0pwWkdWdWRHbG1hV1Z5SWpwYmV5SnBaQ0k2SW1aa1ptVXhZMkZsTFRrMVlXTXROR1ZoWkMxaE56TTBMVFZpWmprMVl6bGhNakJqWkRwemRISnBibWM2VFVOU0lpd2lkbUZzZFdVaU9pSTBNekUxWlRWbVpDMDRaakV6TFRRd1pUY3RZV0V3TUMxa05HUTFaV0ZtWWpNd05tTTZjM1J5YVc1bk9qRXlNelExTmlKOVhTd2lhWE56ZFdWeUlqcDdJblI1Y0dVaU9pSmpNamd6TnpBd05TMWlNRFU0TFRSalpqY3RPVFEwTVMxbU0ySm1aalEwTnpnMllqWTZjM1J5YVc1bk9rOXlaMkZ1YVhwaGRHbHZiaUlzSW5KbFptVnlaVzVqWlNJNklqUTVaalF5WWpWbExUTmpNR0V0TkRJNE55MDVNV0UwTFdaak5ERXhZV0UwWTJVek5EcHpkSEpwYm1jNmRYSnVPblYxYVdRNlltTTNNRFkxWldVdE5ESmhZUzAwTnpOaExXRTJNVFF0WVdaa09HRTNZak13WWpGbEluMTlYWDE5TEhzaVpuVnNiRlZ5YkNJNkltRTBOV1EzTW1SakxUVTJOelV0TkdOaVppMDVORGcyTFRKbU1ESTBNbVE0TkdWaE1qcHpkSEpwYm1jNmRYSnVPblYxYVdRNlltTTNNRFkxWldVdE5ESmhZUzAwTnpOaExXRTJNVFF0WVdaa09HRTNZak13WWpGbElpd2ljbVZ6YjNWeVkyVWlPbnNpY21WemIzVnlZMlZVZVhCbElqb2laVEJrTm1JMFptRXRaV05qWWkwME5HRTJMV0ZtWlRFdFpUTmlOREpoT1RsbU16STFPbk4wY21sdVp6cFBjbWRoYm1sNllYUnBiMjRpTENKdVlXMWxJam9pWW1KbU1EVTBaV1V0T1RBME9DMDBPRGt6TFdJNE9XTXRPR0kzTnprMU56Y3dNekE0T25OMGNtbHVaenBOYVc1cGMzUnllU0J2WmlCSVpXRnNkR2dnS0UxUFNDa2lMQ0owZVhCbElqcGJleUpqYjJScGJtY2lPbHQ3SW5ONWMzUmxiU0k2SWpFd01qRTBaakkwTFRReU1EZ3ROR1EwTWkxaU16bGxMVFEwTldWbE1UUmlZMkprT0RwemRISnBibWM2YUhSMGNEb3ZMM1JsY20xcGJtOXNiMmQ1TG1oc055NXZjbWN2UTI5a1pWTjVjM1JsYlM5dmNtZGhibWw2WVhScGIyNHRkSGx3WlNJc0ltTnZaR1VpT2lKbE9EWmlaV1EwT0MweU5EWXdMVFJtTXpNdFlXUmhPQzFsWm1Nd1lqSTJNVFZpWVRRNmMzUnlhVzVuT21kdmRuUWlMQ0prYVhOd2JHRjVJam9pTmprMFpXSm1aVFl0T0RSak55MDBOVGc1TFdFNE1HRXRPV1F3WVdRNE1EQTFPREE1T25OMGNtbHVaenBIYjNabGNtNXRaVzUwSW4xZGZWMHNJbU52Ym5SaFkzUWlPbHQ3SW5SbGJHVmpiMjBpT2x0N0luTjVjM1JsYlNJNklqZ3hNakJrTjJZMUxUbGtOamd0TkRCaU5DMWlZekF4TFRFMFpEQmtZV0ptT1dWak1qcHpkSEpwYm1jNmRYSnNJaXdpZG1Gc2RXVWlPaUl4TVRZMlltSXdOaTAwTmpFeUxUUTRZamN0WVdRd05DMWlZelUzWmpJd056SmtPVFU2YzNSeWFXNW5PbWgwZEhCek9pOHZkM2QzTG0xdmFDNW5iM1l1YzJjaWZTeDdJbk41YzNSbGJTSTZJalptWmpNd09URm1MVGswTXpFdE5HRXpaaTFoWWpka0xUVXpZelV5Tm1ReE5Ea3lNanB6ZEhKcGJtYzZjR2h2Ym1VaUxDSjJZV3gxWlNJNkltRXhPVEkwT1dVeUxUazBNek10TkRFNU5TMDROR0ZpTFdSaFlqTXlPR1UyWmpjMlpEcHpkSEpwYm1jNkt6WTFOak15TlRreU1qQWlmVjBzSW1Ga1pISmxjM01pT25zaWRIbHdaU0k2SW1Ka01qTTBOVGs0TFRneVpUZ3ROREJoTlMwNFlqQmxMVFpsTkRjMU9UTmhZemczWmpwemRISnBibWM2Y0doNWMybGpZV3dpTENKMWMyVWlPaUkxTVRRNE5ETXlPQzFsWkRjMUxUUTROVE10T0RGaE5pMDRNbUV6WmpSa01UWmxPREU2YzNSeWFXNW5PbmR2Y21zaUxDSjBaWGgwSWpvaU1UTTRPV016WVRFdFpqYzVZUzAwWWpsbExXSTFZekl0TkRrMk1XTmxOalppWXpVME9uTjBjbWx1WnpwTmFXNXBjM1J5ZVNCdlppQklaV0ZzZEdnc0lERTJJRU52Ykd4bFoyVWdVbTloWkN3Z1EyOXNiR1ZuWlNCdlppQk5aV1JwWTJsdVpTQkNkV2xzWkdsdVp5d2dVMmx1WjJGd2IzSmxJREUyT1RnMU5DSjlmVjE5ZlN4N0ltWjFiR3hWY213aU9pSTRaVGM1Wm1NME55MWpOalV3TFRRNFptVXRPVFJtWkMwME5qRmxOVFZqWTJVNU1qUTZjM1J5YVc1bk9uVnlianAxZFdsa09tWmhNak15T0dGbUxUUTRPREl0TkdWaFlTMDRZekk0TFRZMlpHRmlORFk1TlRCbU1TSXNJbkpsYzI5MWNtTmxJanA3SW5KbGMyOTFjbU5sVkhsd1pTSTZJak16WWpKaU5EUTNMVEF6WTJRdE5ESmpOUzFpT0ROaExXUmhORFUzTkRReFltWXpNanB6ZEhKcGJtYzZUM0puWVc1cGVtRjBhVzl1SWl3aWJtRnRaU0k2SWpSaFl6RTBPR1V3TFRSaE5tTXRORFEyWVMwNE5qUmtMVE5sWW1abE9UWmhNamxpWmpwemRISnBibWM2VFdGalVtbDBZMmhwWlNCTlpXUnBZMkZzSUVOc2FXNXBZeUlzSW5SNWNHVWlPbHQ3SW1OdlpHbHVaeUk2VzNzaWMzbHpkR1Z0SWpvaVpUWXlNamhqTXpVdFlqZGpOUzAwWTJVeExXSmtaVGN0TWpabFl6STVNRGxqTUdGaE9uTjBjbWx1Wnpwb2RIUndPaTh2ZEdWeWJXbHViMnh2WjNrdWFHdzNMbTl5Wnk5RGIyUmxVM2x6ZEdWdEwyOXlaMkZ1YVhwaGRHbHZiaTEwZVhCbElpd2lZMjlrWlNJNklqZzBPVEE0TURBeUxXVXpNVGN0TkRRMll5MWlNREU0TFRSaU1qQm1ZemxoWldNd1pqcHpkSEpwYm1jNmNISnZkaUlzSW1ScGMzQnNZWGtpT2lJMVltTmhZV0l3TlMwd1pUQm1MVFF4Wm1VdE9UUTNNeTA0TjJWbU1UVTJPVGd3WVdJNmMzUnlhVzVuT2tobFlXeDBhR05oY21VZ1VISnZkbWxrWlhJaWZWMHNJblJsZUhRaU9pSmpNR0k0WlRNM1ppMHpPRFl6TFRRME5tSXRZamxrTkMxbE5qbGtZbU0xWXpKaVlqWTZjM1J5YVc1bk9reHBZMlZ1YzJWa0lFaGxZV3gwYUdOaGNtVWdVSEp2ZG1sa1pYSWlmVjBzSW1OdmJuUmhZM1FpT2x0N0luUmxiR1ZqYjIwaU9sdDdJbk41YzNSbGJTSTZJbVl5TUdJME9HUmpMV0l5WW1RdE5HVm1ZaTA0TTJZNExUVXhaV000TkRJeE1XRXhNVHB6ZEhKcGJtYzZkWEpzSWl3aWRtRnNkV1VpT2lJM056QXlOalZtTVMwNE5tVmtMVFJrTmpZdE9EVXhaQzFpT0RFM05qTTJNVE0zTnpNNmMzUnlhVzVuT21oMGRIQnpPaTh2ZDNkM0xtMWhZM0pwZEdOb2FXVmpiR2x1YVdNdVkyOXRMbk5uSW4wc2V5SnplWE4wWlcwaU9pSmpNekprWXpFNE1TMDROemxrTFRRNE4yWXRZVE5tTUMwM09UTXdORGRrWXpneU9HUTZjM1J5YVc1bk9uQm9iMjVsSWl3aWRtRnNkV1VpT2lKbFpETm1NR00yTlMwMFpXUmpMVFJrTmprdFlqUmxNaTAyWm1RMk9USXhaR1UzT1RNNmMzUnlhVzVuT2lzMk5UWXhNak0wTlRZM0luMWRMQ0poWkdSeVpYTnpJanA3SW5SNWNHVWlPaUkwTTJZelptUXdaQzAyTkRJMExUUTJOVGd0T0dWa1pDMW1ZekpsTTJGbE5EUm1ZbVU2YzNSeWFXNW5PbkJvZVhOcFkyRnNJaXdpZFhObElqb2lNelV3T0RjM1pqRXRaV1F3TWkwMFpqQXdMVGszTXpNdFptRTJNV0pqWkRZek0yTTVPbk4wY21sdVp6cDNiM0pySWl3aWRHVjRkQ0k2SW1NNE5qUmtaVGxtTFRBelkyWXRORGc0WWkxaU1UUTJMV1UxTjJWbE1qaGpOMk15WlRwemRISnBibWM2VFdGalVtbDBZMmhwWlNCSWIzTndhWFJoYkN3Z1ZHaHZiWE52YmlCU2IyRmtMQ0JUYVc1bllYQnZjbVVnTVRJek1EQXdJbjE5WFgxOUxIc2lablZzYkZWeWJDSTZJamhpWldFMk9ESTNMVEZrTlRBdE5EbGxOUzFoT0RreExUVTBZbVl5TWpka09XVmlORHB6ZEhKcGJtYzZkWEp1T25WMWFXUTZPRE01WVRkak5UUXRObUkwTUMwME1XTmlMV0l4TUdRdE9USTVOV1EzWlRjMVpqYzNJaXdpY21WemIzVnlZMlVpT25zaWNtVnpiM1Z5WTJWVWVYQmxJam9pTmpjNE9XVmpaVGN0WmpNNFpDMDBORFk0TFdJNVltWXRPRFV6TWpRNU1UazJOREprT25OMGNtbHVaenBQY21kaGJtbDZZWFJwYjI0aUxDSnVZVzFsSWpvaVlXTXlZVFU0T1RJdE5XWTBPQzAwTVROaExUZ3hOakl0TkRrM1lXSXdNV1F3WlRJek9uTjBjbWx1WnpwTllXTlNhWFJqYUdsbElFeGhZbTl5WVhSdmNua2lMQ0owZVhCbElqcGJleUpqYjJScGJtY2lPbHQ3SW5ONWMzUmxiU0k2SWpGaE1HRTFZbU5oTFRRelpqRXROR015TXkxaU5HSXdMV05tTmpKaE9HSTNOV0U0TkRwemRISnBibWM2YUhSMGNEb3ZMM1JsY20xcGJtOXNiMmQ1TG1oc055NXZjbWN2UTI5a1pWTjVjM1JsYlM5dmNtZGhibWw2WVhScGIyNHRkSGx3WlNJc0ltTnZaR1VpT2lJeE9XUTNZelJoTnkxbE9XWXhMVFE1Wm1ZdFlUTmpZeTAwWkROak5XVTRZV1JoTWpBNmMzUnlhVzVuT25CeWIzWWlMQ0prYVhOd2JHRjVJam9pTXpKbU1qZzVOak10TnpkaE55MDBOV1l6TFdFNFpUWXROMlpsTmpBek1ERXpZbUUzT25OMGNtbHVaenBJWldGc2RHaGpZWEpsSUZCeWIzWnBaR1Z5SW4xZExDSjBaWGgwSWpvaVptUXhNekpoTWpZdE5URTFNQzAwTVRReExUZzVNREV0WlRZeFpETTBOekF4TjJKbE9uTjBjbWx1WnpwQlkyTnlaV1JwZEdWa0lFeGhZbTl5WVhSdmNua2lmVjBzSW1OdmJuUmhZM1FpT2x0N0luUmxiR1ZqYjIwaU9sdDdJbk41YzNSbGJTSTZJamswTnpnMk9UWmpMV1UzWVdJdE5ERTBNeTA0T1RobExXWmtZbVpqT1dZek1EYzJaVHB6ZEhKcGJtYzZkWEpzSWl3aWRtRnNkV1VpT2lJM056QTBOV1V4WXkwMU5tTXlMVFJqWlRVdFlXUTFZUzAyWW1Gak16QmxNRFJsTmpjNmMzUnlhVzVuT21oMGRIQnpPaTh2ZDNkM0xtMWhZM0pwZEdOb2FXVnNZV0p2Y21GMGIzSjVMbU52YlM1elp5SjlMSHNpYzNsemRHVnRJam9pTUdJek1qWmlabVl0WWpNME9TMDBPR1F6TFdGaE9HTXRNMkkwTldSbVpHTmhNams0T25OMGNtbHVaenB3YUc5dVpTSXNJblpoYkhWbElqb2laV1poTnpjeVlUVXRNMlEzTVMwME9UY3lMV0V6TldZdE1UZ3hNV1EyWmpaaU1UazRPbk4wY21sdVp6b3JOalUyTnpZMU5ETXlNU0o5WFN3aVlXUmtjbVZ6Y3lJNmV5SjBlWEJsSWpvaU5URTRNelk1TVRVdFpEaGtNUzAwWmpKbUxXSXhNVEF0TVRCaE5tVTJZMlZrWlRSa09uTjBjbWx1Wnpwd2FIbHphV05oYkNJc0luVnpaU0k2SWpjNFpEYzVPRFE1TFRoak5HUXRORFprTXkxaU5UWmtMV1F4WVdNelltTmhObVkxWkRwemRISnBibWM2ZDI5eWF5SXNJblJsZUhRaU9pSXhPRGM0Wm1VMVpTMHdOREkzTFRRd05EUXRZbU0zWXkwek9ESTNNMlZoWmpKak1XRTZjM1J5YVc1bk9qSWdWR2h2YlhOdmJpQkJkbVZ1ZFdVZ05Dd2dVMmx1WjJGd2IzSmxJREE1T0RnNE9DSjlmVjE5ZlYxOUxDSnNiMmR2SWpvaVlXSTJNVFEzTURZdE9URXdZaTAwWVRNeExUa3daR1l0Wmpjd05XUTVPR0ppTnpneU9uTjBjbWx1Wnpwa1lYUmhPbWx0WVdkbEwzQnVaenRpWVhObE5qUXNhVlpDVDFKM01FdEhaMjlCUVVGQlRsTlZhRVZWWjBGQlFXWlJRVUZCUkVsRFFVMUJRVUZCY0hnclVHRkJRVUZCVFRGQ1RWWkZWVUZCUVVSTmVrMTZUWHBOZWsxNlRYcE5lazE2VFhwTmVrMTZUWHBOZWsxNlRYcE5lazE2VFhwTmVrMTZUWHBOZWsxNlRYcE5lazE2VFhwTmVrMTZUWHBOZWsxNlpVTnRhVUZCUVVGQlJVaFNVMVJzVFVGUlRDdEJOM2hCWjI0eVJGQXpla0ozY2pGRFVFVnNLMGt2VVVGQlFuZGtTbEpGUmxWbFRuSnpibVF4TWpKNWIxRlNkbXRJU1ZOSVRpdDZMM1I1VldzNWIxUkZRMUV4WWxSQ1l6SXpZbmxPY3pCQ05VZEpSRUZTUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFXc3JTV3NyU1dSNE5HYzFUalJDT1VkUkwzSlFRVGxLTDBsUVpsTm5kMHd2VFVWRlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVVIzVURWYVVHOVFOWEkzUmtwTFFXWTNZM1ZtUW1sb1VFNVRhMWcxYUd4Qk9YVXJSSE5RTjJSWUwwcExNVkF5VmxCcFUwbHZaV0pGY2t4M1ZtZzFXbmdyT0VNeFdUSXlXWFJRTUVad1pqWm9aR1ZoSzIxeE1WZHNhWGhtWldvMlVtTkVlR293T1hOM1dHSmlaVUpSY0dscWRXY3lNR0ZxTDFORk9HSjJielZvUlhWaGRrRjFVMHR3VVdaS2VGUkhPVEZuVlhKRFZqWnFVMUZGTUc5UWEyVTBkM1ZyWlRjd05VVnhjRXhPVjNoMFRYUlRhelJxZGxoSGJHUXJkRXhzZUhaV1RVNXVZV3RFTjIxRmJtUlpWRlpYVTI1V09EWXdWMVZZYkRNMFVrMTVOMEpsYlhCNVIzcE9OM0JCWW0xWVJVRTJZbVoyU3pCMU16SjFWRVpMUzFaTk1ISXdXWGN4VFZSalJuWndPR2xXVEZCRU1DczVaMGhSZVNzM2NsTm1NMlZsYW5BeVNIVkdZM050YkdScFJYb3dSbnBMV0daVFVuY3pjV1V3T0ZoeFpEbGtVRFpSUzA5T2JtdDFOR3hITTA1VFlpOVNRblJMZEV0ME1YUjBaRUpLYVZsaU1sWkpOMkp5WXpkMFl6aEpXVzkwU25wSVZVSXdZeXRQSzFRemNsUlJkVXhMYzFwU2NYQjZhMVJUTjJSYVNUUjJieXR4U201a1JVZFBPRVY2WldONWFtRmpOaTlKVkU0eVMwOVhZVlZNU1ZRdllVeGtaVlZ1Y1hCa2FUZFdWeklyUzNsak1qbEdURE56TjJVemFHazFURlJUYUdWWFYzQjVWMnhJTkZoNmJYWlhhbTVwVDJsR1RqTlpWMFJwZGxkSk9USlhkV3MxWTNReVF6QndNMHA2YkRsWlRqWTJWMGsxU1ZZdlZubEdPRFp5TVdFeE4zQklOVlZOUXpCd1dDOUVkMWhXVlRVeU5FdHpOVmxuUkZwdFREUjZSM294ZHpnd2NETXpVR294Y0UxMlkya3JkR015WTBaSmFtMW9TREprVjFabWRXRldUSFZNYW5rNVpWUjZaM0ZQY25GbGQzWXdkblZ0THpGTFVqUXJNbUUyUkdnMWNGaFBOMVk1VHl0ek5FdFNTbEJCUkhWNFRtcDBha1pEUTJzdlEyeDBSWHBuWm5wVGRHVnlVM1prV2xGYVpVUnZlWGx4ZUZGbmRWSXhiRmh0UW14Skx6bFFVMlZpV25CaVQyVTRZbWwyZERKaVJrczVXV0ZMTkdWSVpUZE9URTVoZEV4UU0zRkhXVXhtVERjeFVtOU5ka0kyV0hVNU5rb3pWRmQwT1V4VWIxRk5OWHB0T0ZsbWVHSklTVVZUVUZwWVdGY3ZkRzkyVkZOdksxQnhSbmhPWlhOM1duRnFUeTlZTURsUGRrSm5hVGxQWTBoM04yeHNWWFZyWTNZclpHa3djbTVsY1dZNU9YVlliMHRuYkUxTmQyRnNiRGQ0TDIxNU1HMXNVRFZ3YVZadWRqTm1kVm9yTVRremVHNXdWRmxNZWpOVGFtVnFVRXhZY0U4MlZIUllZbnBZY0daSlZXTmxTa2h0VUhOWVFVcHpZa2tyWVV3M1puWnpjSEJXYzA5WU4zVmhaRW81Um5aMVZEWXpVSGh6V2tGUk0xVk5lSGxuVEhsWGRuTnJOaTlzZFd0MU5EQm1ZamgwZEc5c1JFWkdZakZhVVZFMkwyMVNhM1l4YVZjNWFURktOa012TVdGbGFrRmpkbEZRVm0xVmREWkdRakpqYmpJMlNucEVUelJVYzJGTVkxZGxZVlJpYnpkSmJqQTBXREE0TmprMldIaFVibkpyYlhwSFEwaHBiVzFLY0V4MVRtRlFhVGN4Wml0TFQydDBaVFZKU3psUGNsTTNOR2x1WjFCVFprcGtNVzlKVTBRNVdqQnRMMmhRYUVJd2J5c3ZUR1F6VFUxSFZYSlRWVFk0Y3psNVZYcFlVMDh6YzNWb1Z5dENhQ3RLYWpCdmVYb3ljMjVhY1dkd1kzcGtOV2wzY0haU2RtMUxabGh3V1M5UU1IbGxVMlp6WjBoUGFHeHBkM1JNVXpkalFsTnBVakZoV2taUU16QnhLMEowTTJaWVlrczVhRkV5VkhJck5ISlRZeXM0Wkdac1dFTlBNbXcyY0ZrclVFbHpOWEJHTVhoek5HdHRZbGhXUWpaNk1FcFhVbEprU0NzMlFqQjNPRlpsYjNsa1pWZHNWamcwZUdGVlRHNTJXREE0ZGtWNlRtNHJTRXBQZFN0MFpsUXhZMU5pUzFCTVpYZDJWMnRqTDJNeEwxbDBjelJUYkVvclJFaHdkVzV6UmpNd05qbFlVM0ozTjFab1VXVnNOR2RJVGpOUmRVaFBPR3BGYXk5UE9HTkRLMVZ2TDNCWVVpdDJSekJNVTI0dldsaDRiRmg1U1c5ak5qQlFVMmhsYkdSM2RtUjZZalJJVnpOSk56RndUeTh3ZDBoWmNVOUpjRGgyTkRGS1ZEVXlWRTVxWmpWcWVESTBabTFGT1RaWFRISkhOeTlpYzI5Tk5tVm9RMGR3U2poek1DOWFWak5yT0hGdVZFOWtXREZDTmpaSVQyZGlOR0kxUzFKbWRHdzFOR1pETjI5MmVYWmFXbkJZZERaS2VUUnZNMXB4WldSUGRrMVVaSE5zVUZWb1JEQnliRmQ0ZGxaTlJuUlRNRkF4VlU5dVVIWlhhemcwV0dSaU1FUkpXRmN2YTBocFRWTk1aVzAzY2sxTlMwUnRkRGxLTUVodFozUkxMek5DWnpkSGFHZFBSMHhEWjFCVU9HRm1jREZ3WkZSRmVEUTRPRFp1WjNSTFJqSmpPVTl3YzJkV1JHSlBTME5LVDFGaGEya3JNVlp5Um1rcmQzSnBTbkJtVG1FdmIzSlRhR055VnpJNE5tcE1XWE41ZVdaYVRHdzRVMFYwYmswMk5Xb3hVMHhJSzNkWVZrYzJhbU13UkZsSk9UZzJSblZxUzBwdVVVeFdNR014VFhKM04zTlBOVzR2Wm5kM1JHWnJiMm81WjJaRU5HOTZhSGxHUVZWV1RYRkNVbXhaY2tOa01HOVZibEp5YTJsNVJYcFBVRVpPVEVaNlZIcFVOVlpzUWxoa00wOXRPRzk2YTBKMFQwOWtSRkJhYTFVNWF6a3ZVRU53VEd0SVlYSnVXbFZtU1doWVQzWXdMelpKVTNZd1UwOWpkbW92TVdJNWRIcG1hMDQxUnpONE4yVmlaRWxvTXpSWFprWTJkSEJFY25KWlN6WlFWWEJrTHpSbVNsTXpZbkJZWVhKMFQwcE9LMU5TUkVKWVQzWXdiRFp0TmtWNldqRjZNelZzZHpsck0xSlBNREZYVFVaQ1ZUUklOQ3N5TVd4TlltSTRXSE13ZG14MldWWkljRE5RVlhGTFEyTmhUMFJWYzI1aVRreFRValZqVkVNclpGb3JjSEJXWld4RGJrdGhNVEUzWlU1VVRsRnJVMVpHYVZVeWRGQXJVWEpUVDFaMldscGhWVXh4ZDNaMFVFTm9MMnBrVFdJelVrNDVPVkZQYTI5cWRqaE1jMUZUTUdzdlR6Y3JkRXRtSzA1TlZEazJUbEF3VlhaTWRtbHVVbTA1U200eU5IZFdjbUpFUTJKSFNXUkdOSGhXUWs1S0wzaEtVMlUyVldWdkwwSnFMemxKTHpkRWVUQlFkbkp1U25rMWIzQlRTVkpTV2xnd1lWRlZRVUZRZWxnemFETlZRVUZEUVZGQmVEZFpRVVF2WVc1R1FrTk9aR0Z0U1VGQ1FVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGRVFXMXRiMlZMT1VoNmFVSTFTVGxGUWxodWVEaEJRVUZCUVVGQlFVRkJURUp0UVVsYVMyMTZWMGx1ZUhsUFFVRkJRVUZGYkVaVWExTjFVVzFEUXlJc0ltbHpjM1ZsY25NaU9sdDdJbWxrSWpvaU1qQm1OVGt4TlRndE9HSTNZUzAwTkdWa0xUZzVZbUV0T1dFMk9UTTBOR1V3TURVMk9uTjBjbWx1Wnpwa2FXUTZaWFJvY2pvd2VFVXpPVFEzT1RreU9FTmpORVZtUmtVMU1EYzNORFE0T0RjNE1FSTVaall4Tm1Ka05FSTRNekFpTENKeVpYWnZZMkYwYVc5dUlqcDdJblI1Y0dVaU9pSmxNekV5WmpJMk1TMWtPV0l5TFRRM016RXRPV0k1WVMwek9UQTBNamhrTkRGaE1UWTZjM1J5YVc1bk9rNVBUa1VpZlN3aWJtRnRaU0k2SW1NMU5UZzJaRGN5TFdZMVltUXROR015TVMwNE4yRTRMVEk1TVRVek1XSTFNV1l4WkRwemRISnBibWM2VTBGTlVFeEZJRU5NU1U1SlF5SXNJbWxrWlc1MGFYUjVVSEp2YjJZaU9uc2lkSGx3WlNJNklqZzFZVEZrTkRWbUxUUTFPRE10TkRNM055MDVPVFZtTFdaa09XUXpaamt4WVRWbVl6cHpkSEpwYm1jNlJFNVRMVVJKUkNJc0lteHZZMkYwYVc5dUlqb2laVFZqTkdGalpXVXRaalV6WWkwMFlqUmlMV0kyWTJJdE5qRXhaVEF3WTJJNU1ESmtPbk4wY21sdVp6cGtiMjV2ZEhabGNtbG1lUzUwWlhOMGFXNW5MblpsY21sbWVTNW5iM1l1YzJjaUxDSnJaWGtpT2lKaFptVm1abVJsTkMwME1qbG1MVFJqTjJNdFlqSmxNeTAyTWpCa1lUTmxaVGswTkdFNmMzUnlhVzVuT21ScFpEcGxkR2h5T2pCNFJUTTVORGM1T1RJNFEyTTBSV1pHUlRVd056YzBORGc0Tnpnd1FqbG1OakUyWW1RMFFqZ3pNQ05qYjI1MGNtOXNiR1Z5SW4xOVhTd2lKSFJsYlhCc1lYUmxJanA3SW01aGJXVWlPaUppWVRRM01qY3dNeTA0Wm1VMExUUXlNRGt0T1dRNFppMHhaVEJoTlROa1lqSmxaalE2YzNSeWFXNW5Pa2hGUVV4VVNGOURSVkpVSWl3aWRIbHdaU0k2SWpneE9EWTNaVEkwTFRRM09EQXRORFUyTXkxaU1UZzJMVEl4TnpreE9XWTRZemt4T1RwemRISnBibWM2UlUxQ1JVUkVSVVJmVWtWT1JFVlNSVklpTENKMWNtd2lPaUl5T0dGbU1HRXpNaTFsT0RJNExUUmtOelF0T0RjeU1pMDFOR014T1RkbU5tRXdOalE2YzNSeWFXNW5PbWgwZEhCek9pOHZhR1ZoYkhSb1kyVnlkQzV5Wlc1a1pYSmxjaTV0YjJndVoyOTJMbk5uTHlKOWZTd2ljMmxuYm1GMGRYSmxJanA3SW5SNWNHVWlPaUpUU0VFelRXVnlhMnhsVUhKdmIyWWlMQ0owWVhKblpYUklZWE5vSWpvaVlXSXdZMlk0WXpnek1XWTBabUppTlRVeVltUmlObU01WWpKbFltUmlNV1ZoTXpNMFptRm1OV1JpTm1Zd1lXUXlNalpoWlRnMU1HTTROakF6WkdFeVlTSXNJbkJ5YjI5bUlqcGJYU3dpYldWeWEyeGxVbTl2ZENJNkltRmlNR05tT0dNNE16Rm1OR1ppWWpVMU1tSmtZalpqT1dJeVpXSmtZakZsWVRNek5HWmhaalZrWWpabU1HRmtNakkyWVdVNE5UQmpPRFl3TTJSaE1tRWlmU3dpY0hKdmIyWWlPbHQ3SW5SNWNHVWlPaUpQY0dWdVFYUjBaWE4wWVhScGIyNVRhV2R1WVhSMWNtVXlNREU0SWl3aVkzSmxZWFJsWkNJNklqSXdNakV0TURndE1qUlVNRFE2TWpJNk5UVXVNVGMzV2lJc0luQnliMjltVUhWeWNHOXpaU0k2SW1GemMyVnlkR2x2YmsxbGRHaHZaQ0lzSW5abGNtbG1hV05oZEdsdmJrMWxkR2h2WkNJNkltUnBaRHBsZEdoeU9qQjRSVE01TkRjNU9USTRRMk0wUldaR1JUVXdOemMwTkRnNE56Z3dRamxtTmpFMlltUTBRamd6TUNOamIyNTBjbTlzYkdWeUlpd2ljMmxuYm1GMGRYSmxJam9pTUhnM1lUTXhPVFptWmpSbE5tTTRaVFl6TnpWbU9UY3hPRFkxWm1ObE9XTm1OVEprTWpabU5UUXhNVEF3TTJJeFpUQmtZMkV3TURKa056QTJNekkzTURNM00yVmpaVEZtT0dWak9HSTVPVGxqTXpFd09HTmtPRGd6TURCa1pEazBORFV3TXpjek5qTXdNekUyWlRVNVpqWmtaV0kxTURjd1lqa3pObVUyWXpsbFlqRmpJbjFkZlE9PSJ9XX0sInNpZ25hdHVyZSI6eyJ0eXBlIjoiU0hBM01lcmtsZVByb29mIiwidGFyZ2V0SGFzaCI6IjUxNzQwODcxMDk1ZjhjYzBjMDhjZTlmMjJkYzgwMGU1MDNkZGJjZjhjYjIwMzE4NDFkZDc2ODMyOWU1NmI5YTEiLCJwcm9vZiI6W10sIm1lcmtsZVJvb3QiOiI1MTc0MDg3MTA5NWY4Y2MwYzA4Y2U5ZjIyZGM4MDBlNTAzZGRiY2Y4Y2IyMDMxODQxZGQ3NjgzMjllNTZiOWExIn0sInByb29mIjpbeyJ0eXBlIjoiT3BlbkF0dGVzdGF0aW9uU2lnbmF0dXJlMjAxOCIsImNyZWF0ZWQiOiIyMDIxLTA4LTI0VDA1OjA5OjU5LjM0MVoiLCJwcm9vZlB1cnBvc2UiOiJhc3NlcnRpb25NZXRob2QiLCJ2ZXJpZmljYXRpb25NZXRob2QiOiJkaWQ6ZXRocjoweEUzOTQ3OTkyOENjNEVmRkU1MDc3NDQ4ODc4MEI5ZjYxNmJkNEI4MzAjY29udHJvbGxlciIsInNpZ25hdHVyZSI6IjB4OGJjOGIxM2VlZjQxYjQxYzM0NWFkY2JlYTFmYmFiMzc3NzNkYjVmYmY1ZDE5ZDViNzM1YzM0YzJlYjYyMTIyNzY2MGJlMWVlN2Y1ZmM5YWY4OGYyM2EzZTRmMjc5MTY4N2YxYzA2NGM4MWVlMmQ4MjFjMzQxOGRhMDNkZTQ5MWQxYiJ9XX0="
- }
- ]
},
"signature": {
- "type": "SHA3MerkleProof",
- "targetHash": "38d00d0d6de585503b44bc792cc5ec39a06ff4abe7a1a8b3b2363c25233034f2",
- "proof": [],
- "merkleRoot": "38d00d0d6de585503b44bc792cc5ec39a06ff4abe7a1a8b3b2363c25233034f2"
+ "type": "SHA3MerkleProof",
+ "targetHash": "644814f7b7dcca05639fc86a9b8ffd50f749e5d4848a58968e0b036aca2cd5cd",
+ "proof": [],
+ "merkleRoot": "644814f7b7dcca05639fc86a9b8ffd50f749e5d4848a58968e0b036aca2cd5cd"
},
"proof": [
- {
- "type": "OpenAttestationSignature2018",
- "created": "2021-09-27T08:58:00.007Z",
- "proofPurpose": "assertionMethod",
- "verificationMethod": "did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830#controller",
- "signature": "0x77efc18f2dc0a723a8d4ddff7ce1f157d70ace415a0959dc70a6714fe4e5ee6518edac2b1b7c067ce094a18b4d418a7d376b1d1c89ac7642a719fa8ca9f6a85f1c"
- }
+ {
+ "type": "OpenAttestationSignature2018",
+ "created": "2021-12-28T07:21:44.633Z",
+ "proofPurpose": "assertionMethod",
+ "verificationMethod": "did:ethr:0xE39479928Cc4EfFE50774488780B9f616bd4B830#controller",
+ "signature": "0xd12cbc4a5f8070ca7abfda7a5e9343bb7cc8056560d69bc861f758c5293ab42c4caf8903e65d8f2d416f4e8b52b492fdd89cef7c122672674fba7cbfe61816a01c"
+ }
]
-}
+}
\ No newline at end of file